SQLite format 3@ j.zq tla[qQbFJ58* R 3workflow_statistics-execution_entity1execution_metadata!migrations RW2 T' \ 9  M  P  Z % j 7 qADe?i8 u2d+_.o< &RE]UClearEvaluation1745322634000/QW8AddScopesColumnToApiKeys17429184000000PYeRenameAnalyticsToInsights17411675842771O[:BUpdateParentFolderIdColumn1740445074052,NQ9VCreateAnalyticsTables1739549398681(MI+-CreateFolderTable17387096099400LYAddErrorColumnsToTestRuns17377154214623K_j#CreateTestCaseExecutionTable1736947513045/JW;8AddStatsColumnsToTestRun17361720587799Ik |AddManagedColumnToCredentialsTable1734479635324;HoҳAddMockedNodesColumnToTestDefinition1733133775640$GAdCreateTestRun1732549866705,FQSjJCreateTestMetricTable17322713252587Eg*_MigrateTestDefinitionKeyToString17315827486635DcAddDescriptionToTestDefinition17314040281060CYCreateTestDefinitionTable1730386903556&BE}AddProjectIcons1729607673469;AoxUpdateProcessedDataValueColumnToText1729607673464A@{|'ڜAddMissingPrimaryKeyOnAnnotationTagMapping17286598396449?k2SeparateExecutionCreationFromStart1727427440136/>WCreateProcessedDataTable1726606152711&=EAddApiKeysTable1724951148974-<SROCreateAnnotationTables1724753530828/;WZCBRefactorExecutionIndices17237962431462:]P6 nCreateInvalidAuthTokenTable172362761022279g~ JAddConstraintToExecutionMetadata172010165314808Y΋AddActivatedAtUserSetting171749846593157cUIMakeExecutionStatusNonNullable1714133768521$6AUGCreateProject1714133768519(5I{RemoveNodesAccess1712044305787,4QvyKMoveSshKeysToDatabase171139088212323]` >RemoveFailedExecutionStatus1711018413374&2E~Q*DropRoleMapping1705429061930)1KWiAddGlobalAdminRole1700571993961?0wM20ModifyWorkflowHistoryNodesAndConnections1695829275184*/MjAddWorkflowMetadata1695128658538/.WODisallowOrphanExecutions1693554410387*-MKQExecutionSoftDelete16934916139821,[, CreateWorkflowHistoryTable1692967111175.+U;CreateWorkflowNameIndex1691088862123$*A{لAddMfaColumns16900000000301)[{لRemoveResetPasswordColumns1690000000030=(s{لFixMissingIndicesFromStringIdMigration1690000000020,'Q{ل SeparateExecutionData16900000000101&[{لMigrateIntegerKeysToString1690000000002+%OkgQRemoveSkipOwnerSetup1681134145997/$WkgQAddUserActivatedProperty16811341459963#_ʱCreateExecutionMetadataTable1679416281777&"E㠐CreateVariables16775016367523!_8UpdateRunningExecutionStatus1677237073720- StXMigrateExecutionStatus16769961030006e5aPurgeInvalidWorkflowConnections1675940580449)K CreateLdapEntities1674509946020,Qo=pAddStatusToExecutions16741385660004aDeleteExecutionsWithWorkflows16732686824753_:CRemoveWorkflowDataLoadedFlag16717261484192]/F MessageEventBusDestinations1671535397530,QBıAddTriggerCountColumn16698239069931[=AddWorkflowVersionIdColumn16697397071241[ֶRemoveCredentialUsageTable16657546370241[ƗCreateCredentialUsageTable1665484192211)Ky`WorkflowStatistics16641961740000Y_\ CreateWorkflowsEditorRole16637557708920YmCreateCredentialsUserRole1660062385367(IyUAddJsonKeyPinData1659888469333!;? UAddNodeIds1658930531669'GfIntroducePinData1654089251344&E٬AddAPIKeyColumn1652905585850&EAddUserSettings1652367743993% C QCommunityNodes1652254514001) K_LowerCaseUserEmail1648740597343+ OxkLCreateUserManagement16469927723310 Y~/6AddExecutionEntityIndexes16444219395100 Y{LXUpdateWorkflowCredentials1630330987096$AyO[AddWaitColumn1621707690587*My`*UniqueWorkflowNames1620821879465&ExmKRCreateTagEntity1617213344594#?wQsu}يActivateExecuteWorkflowTriggerWorkflows1763048000000/rW}|AddActiveVersionIdColumn17630478000007qgqlAddWorkflowHistoryAutoSaveFields1762847206508:pmmekAddIsGlobalColumnToCredentialsTable1762771954619 11'tableevent_destinationsevent_destinations CREATE TABLE "event_destinations" ("id" varchar(36) PRIMARY KEY NOT NULL,"destination" text NOT NULL,"createdAt" datetime(3) NOT NULL DEFAULT 'STRFTIME(''%Y-%m-%d %H:%M:%f'', ''NOW'')',"updatedAt" datetime(3) NOT NULL DEFAULT 'STRFTIME(''%Y-%m-%d %H:%M:%f'', ''NOW'')')C W1indexsqlite_autoindex_event_destinations_1event_destinations<++/tableinstalled_nodesinstalled_nodes CREATE TABLE "installed_nodes" ("name" char(200) NOT NULL,"type" char(200) NOT NULL,"latestVersion" INTEGER DEFAULT 1,"package" char(214) NOT NULL,PRIMARY KEY("name"),FOREIGN KEY("package") REFERENCES "installed_packages"("packageName") ON DELETE CASCADE ON UPDATE CASCADE)=Q+indexsqlite_autoindex_installed_nodes_1installed_nodes 11Stableinstalled_packagesinstalled_packages CREATE TABLE "installed_packages" ("packageName" char(214) NOT NULL,"installedVersion" char(50) NOT NULL,"authorName" char(70) NULL,"authorEmail" char(70) NULL,"createdAt" datetime(3) NOT NULL DEFAULT 'STRFTIME(''%Y-%m-%d %H:%M:%f'', ''NOW'')',"updatedAt" datetime(3) NOT NULL DEFAULT 'STRFTIME(''%Y-%m-%d %H:%M:%f'', ''NOW'')',PRIMARY KEY("packageName"))CW1indexsqlite_autoindex_installed_packages_1installed_packages --tablesettingssettingsCREATE TABLE "settings" ("key" TEXT NOT NULL,"value" TEXT NOT NULL DEFAULT '',"loadOnStartup" boolean NOT NULL default false,PRIMARY KEY("key"))/Cindexsqlite_autoindex_settings_1settingsP++Ytablesqlite_sequencesqlite_sequenceCREATE TABLE sqlite_sequence(name,seq)"!!tablemigrationsmigrationsCREATE TABLE "migrations" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "timestamp" bigint NOT NULL, "name" varchar NOT NULL) D D eD  11ktableinvalid_aS ??5tableexecution_annotation_tagsexecution_annotation_tags5CREATE TABLE "execution_annotation_tags" ("annotationId" integer NOT NULL, "tagId" varchar(24) NOT NULL, CONSTRAINT "FK_c1519757391996eb06064f0e7c8" FOREIGN KEY ("annotationId") REFERENCES "execution_annotations" ("id") ON DELETE CASCADE, CONSTRAINT "FK_a3697779b366e131b2bbdae2976" FOREIGN KEY ("tagId") REFERENCES "annotation_tag_entity" ("id") ON DELETE CASCADE, PRIMARY KEY ("annotationId", "tagId"))I]7indexsqlite_autoindex_annotation_tag_entity_1annotation_tag_entity4B77#tableannotation_tag_entityannotation_tag_entity3CREATE TABLE "annotation_tag_entity" ("id" varchar(16) PRIMARY KEY NOT NULL, "name" varchar(24) NOT NULL, "createdAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "updatedAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')))o77}tableexecution_annotationsexecution_annotations2CREATE TABLE "execution_annotations" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "executionId" integer NOT NULL, "vote" varchar(6), "note" text, "createdAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "updatedAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), CONSTRAINT "FK_97f863fa83c4786f19565084960" FOREIGN KEY ("executionId") REFERENCES "execution_entity" ("id") ON DELETE CASCADE)CW1indexsqlite_autoindex_invalid_auth_token_1invalid_auth_token1 11ktableinvalid_auth_tokeninvalid_auth_token0CREATE TABLE "invalid_auth_token" ("token" varchar(512) PRIMARY KEY NOT NULL, "expiresAt" datetime(3) NOT NULL)X11[tableexecution_metadataexecution_metadata/CREATE TABLE "execution_metadata" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "executionId" integer NOT NULL, "key" varchar(255) NOT NULL, "value" text NOT NULL, CONSTRAINT "FK_31d0b4c93fb85ced26f6005cda3" FOREIGN KEY ("executionId") REFERENCES "execution_entity" ("id") ON DELETE CASCADE)=Q+indexsqlite_autoindex_shared_workflow_1shared_workflow.c++}tableshared_workflowshared_workflow-CREATE TABLE "shared_workflow" ("workflowId" varchar(36) NOT NULL, "projectId" varchar(36) NOT NULL, "role" text NOT NULL, "createdAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "updatedAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), CONSTRAINT "FK_daa206a04983d47d0a9c34649ce" FOREIGN KEY ("workflowId") REFERENCES "workflow_entity" ("id") ON DELETE CASCADE, CONSTRAINT "FK_a45ea5f27bcfdc21af9b4188560" FOREIGN KEY ("projectId") REFERENCES "project" ("id") ON DELETE CASCADE, PRIMARY KEY ("workflowId", "projectId"))CW1indexsqlite_autoindex_shared_credentials_1shared_credentials,x11tableshared_credentialsshared_credentials+CREATE TABLE "shared_credentials" ("credentialsId" varchar(36) NOT NULL, "projectId" varchar(36) NOT NULL, "role" text NOT NULL, "createdAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "updatedAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), CONSTRAINT "FK_416f66fc846c7c442970c094ccf" FOREIGN KEY ("credentialsId") REFERENCES "credentials_entity" ("id") ON DELETE CASCADE, CONSTRAINT "FK_812c2852270da1247756e77f5a4" FOREIGN KEY ("projectId") REFERENCES "project" ("id") ON DELETE CASCADE, PRIMARY KEY ("credentialsId", "projectId"));O)indexsqlite_autoindex_execution_data_1execution_data,))tableexecution_dataexecution_dataCREATE TABLE "execution_data" ( "executionId" int PRIMARY KEY NOT NULL, "workflowData" text NOT NULL, "data" text NOT NULL, "workflowVersionId" VARCHAR(36), FOREIGN KEY("executionId") REFERENCES "execution_entity" ("id") ON DELETE CASCADE );O)indexsqlite_autoindex_webhook_entity_1webhook_entity))[tablewebhook_entitywebhook_entityCREATE TABLE "webhook_entity" ("workflowId" varchar(36) NOT NULL, "webhookPath" varchar NOT NULL, "method" varchar NOT NULL, "node" varchar NOT NULL, "webhookId" varchar, "pathLength" integer, PRIMARY KEY ("webhookPath", "method"))[-192,-144],"typeVersion":1,"id":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","webhookId":"a4d792e3-b5b9-425f-b612-c938e71de65d"},{"parameters":{"notice":"","functionCode":"const user = $json.user_id;\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = `n8n.${user}.inmetech.cloud`;\n\nconst cmd = `docker run -d \\\n--name n8n-${user} \\\n--memory=${ram} \\\n--cpus=${cpu} \\\n-v n8n_${user}:/home/node/.n8n \\\n-e N8N_HOST=${domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label traefik.http.routers.n8n-${user}.rule=Host(\\`${domain}\\`) \\\n--label traefik.http.routers.n8n-${user}.entrypoints=websecure \\\n--label traefik.http.routers.n8n-${user}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.n8n-${user}.loadbalancer.server.port=5678 \\\n docker.n8n.io/n8nio/n8n`;\n\nreturn [{ json: { command: cmd, url: `https://${domain}` } }];"},"name":"Build Docker Command","type":"n8n-nodes-base.function","position":[112,-144],"typeVersion":1,"id":"7c91468e-80ea-4de5-8553-376dc01f0973"},{"parameters":{"executeOnce":true,"command":"={{$json.command}}"},"name":"Run Docker","type":"n8n-nodes-base.executeCommand","position":[416,-144],"typeVersion":1,"id":"d049c848-745f-43ce-ad8f-2069344eb356"},{"parameters":{"generalNotice":"","respondWith":"firstIncomingItem","options":{}},"name":"Respond","type":"n8n-nodes-base.respondToWebhook","position":[672,-144],"typeVersion":1,"id":"c17c8373-bb00-4562-ae8f-c18a13839f0d"}],"connections":{"Webhook":{"main":[[{"node":"Build Docker Command","type":"main","index":0}]]},"Build Docker Command":{"main":[[{"node":"Run Docker","type":"main","index":0}]]},"Run Docker":{"main":[[{"node":"Respond","type":"main","index":0}]]}},"settings":{"executionOrder":"v1","binaryMode":"separate","availableInMCP":false},"staticData":{},"pinData":{}}[{"version":1,"startData":"1","resultData":"2","executionData":"3"},{},{"error":"4","runData":"5","lastNodeExecuted":"6"},{"contextData":"7","nodeExecutionStack":"8","metadata":"9","waitingExecution":"10","waitingExecutionSource":"11","runtimeData":"12"},{"level":"13","tags":"14","timestamp":1772773211952,"context":"15","functionality":"16","name":"17","node":"18","messages":"19","message":"20","stack":"21"},{"Webhook":"22","Build Docker Command":"23","Run Docker":"24"},"Run Docker",{},["25"],{},{},{},{"version":1,"establishedAt":1772773211877,"source":"26","triggerNode":"27"},"warning",{},{"itemIndex":0},"regular","NodeOperationError",{"parameters":"28","name":"6","type":"29","position":"30","typeVersion":1,"id":"31"},[],"Command failed: docker run -d --name n8n-undefined --memory=1g --cpus=1 -v n8n_undefined:/home/node/.n8n -e N8N_HOST=n8n.undefined.inmetech.cloud -e N8N_PROTOCOL=https -e WEBHOOK_URL=https://n8n.undefined.inmetech.cloud/ -e N8N_TRUST_PROXY=true --label traefik.enable=true --label traefik.http.routers.n8n-undefined.rule=Host(`n8n.undefined.inmetech.cloud`) --label traefik.http.routers.n8n-undefined.entrypoints=websecure --label traefik.http.routers.n8n-undefined.tls.certresolver=letsencrypt --label traefik.http.services.n8n-undefined.loadbalancer.server.port=5678 docker.n8n.io/n8nio/n8n\n/bin/sh: syntax error: unexpected \"(\"\n","NodeOperationError: Command failed: docker run -d --name n8n-undefined --memory=1g --cpus=1 -v n8n_undefined:/home/node/.n8n -e N8N_HOST=n8n.undefined.inmetech.cloud -e N8N_PROTOCOL=https -e WEBHOOK_URL=https://n8n.undefined.inmetech.cloud/ -e N8N_TRUST_PROXY=true --label traefik.enable=true --label traefik.http.routers.n8n-undefined.rule=Host(`n8n.undefined.inmetech.cloud`) --label traefik.http.routers.n8n-undefined.entrypoints=websecure --label traefik.http.routers.n8n-undefined.tls.certresolver=letsencrypt --label traefik.http.services.n8n-undefined.loadbalancer.server.port=5678 docker.n8n.io/n8nio/n8n\n/bin/sh: syntax error: unexpected \"(\"\n\n at ExecuteContext.execute (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-nodes-base@file+packages+nodes-base_@aws-sdk+credential-providers@3.808.0_asn1.js@5_8da18263ca0574b0db58d4fefd8173ce/node_modules/n8n-nodes-base/nodes/ExecuteCommand/ExecuteCommand.node.ts:102:12)\n at WorkflowExecute.executeNode (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@opentelemetry+api@1.9.0_@opentelemetry+exporter-trace-otlp_9f358c3eeaef0d2736f54ac9757ada43/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:1043:8)\n at WorkflowExecute.runNode (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@opentelemetry+api@1.9.0_@opentelemetry+exporter-trace-otlp_9f358c3eeaef0d2736f54ac9757ada43/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:1222:11)\n at /usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@opentelemetry+api@1.9.0_@opentelemetry+exporter-trace-otlp_9f358c3eeaef0d2736f54ac9757ada43/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:1665:27\n at /usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@opentelemetry+api@1.9.0_@opentelemetry+exporter-trace-otlp_9f358c3eeaef0d2736f54ac9757ada43/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:2308:11",["32"],["33"],["34"],{"node":"35","data":"36","source":"37"},"webhook",{"name":"38","type":"39"},{"executeOnce":true,"command":"40"},"n8n-nodes-base.executeCommand",[416,-144],"d049c848-745f-43ce-ad8f-2069344eb356",{"startTime":1772773211879,"executionIndex":0,"source":"41","hints":"42","executionTime":1,"executionStatus":"43","data":"44"},{"startTime":1772773211881,"executionIndex":1,"source":"45","hints":"46","executionTime":36,"executionStatus":"43","data":"47"},{"startTime":1772773211917,"executionIndex":2,"source":"48","hints":"49","executionTime":55,"executionStatus":"50","error":"51"},{"parameters":"52","name":"6","type":"29","position":"53","typeVersion":1,"id":"31"},{"main":"54"},{"main":"48"},"Webhook","n8n-nodes-base.webhook","={{$json.command}}",[],[],"success",{"main":"55"},["56"],[],{"main":"57"},["58"],[],"error",{"level":"13","tags":"14","timestamp":1772773211952,"context":"15","functionality":"16","name":"17","node":"18","messages":"19","message":"20","stack":"21"},{"executeOnce":true,"command":"40"},[416,-144],["59"],["60"],{"previousNode":"38","previousNodeOutput":0,"previousNodeRun":0},["61"],{"previousNode":"62","previousNodeOutput":0,"previousNodeRun":0},["63"],["64"],["65"],"Build Docker Command",{"json":"66","pairedItem":"67"},{"json":"68","pairedItem":"69"},{"json":"66","pairedItem":"70"},{"command":"71","url":"72"},{"item":0},{"headers":"73","params":"74","query":"75","body":"76","webhookUrl":"77","executionMode":"78"},{"item":0},{"item":0},"docker run -d --name n8n-undefined --memory=1g --cpus=1 -v n8n_undefined:/home/node/.n8n -e N8N_HOST=n8n.undefined.inmetech.cloud -e N8N_PROTOCOL=https -e WEBHOOK_URL=https://n8n.undefined.inmetech.cloud/ -e N8N_TRUST_PROXY=true --label traefik.enable=true --label traefik.http.routers.n8n-undefined.rule=Host(`n8n.undefined.inmetech.cloud`) --label traefik.http.routers.n8n-undefined.entrypoints=websecure --label traefik.http.routers.n8n-undefined.tls.certresolver=letsencrypt --label traefik.http.services.n8n-undefined.loadbalancer.server.port=5678 docker.n8n.io/n8nio/n8n","https://n8n.undefined.inmetech.cloud",{"host":"79","user-agent":"80","content-length":"81","accept":"82","accept-encoding":"83","content-type":"84","x-forwarded-for":"85","x-forwarded-host":"79","x-forwarded-port":"86","x-forwarded-proto":"87","x-forwarded-server":"88","x-real-ip":"85"},{},{},{"user_id":"89","ram":"90","cpu":"91"},"https://admin.n8n.inmetech.cloud/webhook/create-n8n","production","admin.n8n.inmetech.cloud","axios/1.13.5","42","application/json,text/html,application/xhtml+xml,application/xml,text/*;q=0.9, image/*;q=0.8, */*;q=0.7","gzip, compress, deflate, br","application/json","172.18.0.1","443","https","f431cf187979","user123","1g","1"]f2a17289-ca75-4511-a9b7-2691b7ce0fa3 } wGU{"id":"ioR8eFBEVaKOkjc0","name":"Create User n8n Server","active":false,"activeVersionId":null,"nodes":[{"parameters":{"multipleMethods":false,"httpMethod":"POST","path":"create-n8n","authentication":"none","responseMode":"onReceived","responseCode":200,"contentTypeNotice":"","options":{}},"name":"Webhook","type":"n8n-nodes-base.webhook","position":[-192,-144],"typeVersion":1,"id":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","webhookId":"a4d792e3-b5b9-425f-b612-c938e71de65d"},{"parameters":{"notice":"","functionCode":"const user = $json.user_id;\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = `n8n.${user}.inmetech.cloud`;\n\nconst cmd = `docker run -d \\\n--name n8n-${user} \\\n--memory=${ram} \\\n--cpus=${cpu} \\\n-v n8n_${user}:/home/node/.n8n \\\n-e N8N_HOST=${domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label traefik.http.routers.n8n-${user}.rule=Host(\\`${domain}\\`) \\\n--label traefik.http.routers.n8n-${user}.entrypoints=websecure \\\n--label traefik.http.routers.n8n-${user}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.n8n-${user}.loadbalancer.server.port=5678 \\\n docker.n8n.io/n8nio/n8n`;\n\nreturn [{ json: { command: cmd, url: `https://${domain}` } }];"},"name":"Build Docker Command","type":"n8n-nodes-base.function","position":[112,-144],"typeVersion":1,"id":"7c91468e-80ea-4de5-8553-376dc01f0973"},{"parameters":{"executeOnce":true,"command":"={{$json.command}}"},"name":"Run Docker","type":"n8n-nodes-base.executeCommand","position":[416,-144],"typeVersion":1,"id":"d049c848-745f-43ce-ad8f-2069344eb356"},{"parameters":{"generalNotice":"","respondWith":"firstIncomingItem","options":{}},"name":"Respond","type":"n8n-nodes-base.respondToWebhook","position":[672,-144],"typeVersion":1,"id":"c17c8373-bb00-4562-ae8f-c18a13839f0d"},{"parameters":{"curlImport":"","method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","authentication":"none","provideSslCertificates":false,"sendQuery":false,"sendHeaders":false,"sendBody":true,"contentType":"json","specifyBody":"keypair","bodyParameters":{"parameters":[{"name":"user_id","value":"user123"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{},"infoMessage":""},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[336,-400],"id":"9654e007-c6e7-4a2b-b48a-7ee7df40a1c0","name":"HTTP Request"}],"connections":{"Webhook":{"main":[[{"node":"Build Docker Command","type":"main","index":0}]]},"Build Docker Command":{"main":[[{"node":"Run Docker","type":"main","index":0}]]},"Run Docker":{"main":[[{"node":"Respond","type":"main","index":0}]]}},"settings":{"executionOrder":"v1","binaryMode":"separate","availableInMCP":false},"pinData":{}}[{"version":1,"startData":"1","resultData":"2","executionData":"3"},{"destinationNode":"4","runNodeFilter":"5"},{"runData":"6","pinData":"7","lastNodeExecuted":"8"},{"contextData":"9","nodeExecutionStack":"10","metadata":"11","waitingExecution":"12","waitingExecutionSource":"13","runtimeData":"14"},{"nodeName":"8","mode":"15"},["8"],{"HTTP Request":"16"},{},"HTTP Request",{"node:HTTP Request":"17"},[],{},{},{},{"version":1,"establishedAt":1772773211443,"source":"18","triggerNode":"19"},"inclusive",["20"],{"response":"21"},"manual",{"name":"8","type":"22"},{"startTime":1772773211447,"executionIndex":0,"source":"23","hints":"24","executionTime":494,"executionStatus":"25","data":"26"},{"body":"27"},"n8n-nodes-base.httpRequest",[],[],"success",{"main":"28"},{"message":"29"},["30"],"Workflow was started",["31"],{"json":"27","pairedItem":"32"},{"item":0}]f2a17289-ca75-4511-a9b7-2691b7ce0fa3   ~'U{"id":"ioR8eFBEVaKOkjc0","name":"Create User n8n Server","active":false,"activeVersionId":null,"nodes":[{"parameters":{"multipleMethods":false,"httpMethod":"POST","path":"create-n8n","authentication":"none","responseMode":"onReceived","responseCode":200,"contentTypeNotice":"","options":{}},"name":"Webhook","type":"n8n-nodes-base.webhook","position":[-192,-144],"typeVersion":1,"id":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","webhookId":"a4d792e3-b5b9-425f-b612-c938e71de65d"},{"parameters":{"notice":"","functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = \"n8n.\" + user + \".inmetech.cloud\";\n\nconst cmd = `\ndocker run -d \\\n--name n8n-${user} \\\n--memory=${ram} \\\n--cpus=${cpu} \\\n-v n8n_${user}:/home/node/.n8n \\\n-e N8N_HOST=${domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label ^9EU{"id":"ioR8eFBEVaKOkjc0","name":"Create User n8n Server","active":true,"activeVersionId":"370acd9f-8c23-404f-be77-ec179f6ec858","isArchived":false,"createdAt":"2026-03-06T04:58:21.680Z","updatedAt":"2026-03-06T05:00:01.002Z","nodes":[{"parameters":{"multipleMethods":false,"httpMethod":"POST","path":"create-n8n","authentication":"none","responseMode":"onReceived","responseCode":200,"contentTypeNotice":"","options":{}},"name":"Webhook","type":"n8n-nodes-base.webhook","position":!\"traefik.http.routers.n8n-${user}.rule=Host('${domain}')\" \\\n--label traefik.http.routers.n8n-${user}.entrypoints=websecure \\\n--label traefik.http.routers.n8n-${user}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.n8n-${user}.loadbalancer.server.port=5678 \\\ndocker.n8n.io/n8nio/n8n\n`;\n\nreturn [{\n json: {\n command: cmd,\n url: \"https://\" + domain\n }\n}];"},"name":"Build Docker Command","type":"n8n-nodes-base.function","position":[112,-144],"typeVersion":1,"id":"7c91468e-80ea-4de5-8553-376dc01f0973"},{"parameters":{"executeOnce":true,"command":"={{$json.command}}"},"name":"Run Docker","type":"n8n-nodes-base.executeCommand","position":[416,-144],"typeVersion":1,"id":"d049c848-745f-43ce-ad8f-2069344eb356"},{"parameters":{"generalNotice":"","respondWith":"firstIncomingItem","options":{}},"name":"Respond","type":"n8n-nodes-base.respondToWebhook","position":[672,-144],"typeVersion":1,"id":"c17c8373-bb00-4562-ae8f-c18a13839f0d"},{"parameters":{"curlImport":"","method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","authentication":"none","provideSslCertificates":false,"sendQuery":false,"sendHeaders":false,"sendBody":true,"contentType":"json","specifyBody":"keypair","bodyParameters":{"parameters":[{"name":"user_id","value":"user123"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{},"infoMessage":""},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[336,-400],"id":"9654e007-c6e7-4a2b-b48a-7ee7df40a1c0","name":"HTTP Request"}],"connections":{"Webhook":{"main":[[{"node":"Build Docker Command","type":"main","index":0}]]},"Build Docker Command":{"main":[[{"node":"Run Docker","type":"main","index":0}]]},"Run Docker":{"main":[[{"node":"Respond","type":"main","index":0}]]}},"settings":{"executionOrder":"v1","binaryMode":"separate","availableInMCP":false},"pinData":{"Webhook":[{"json":{"headers":{"host":"admin.n8n.inmetech.cloud","user-agent":"axios/1.13.5","content-length":"42","accept":"application/json,text/html,application/xhtml+xml,application/xml,text/*;q=0.9, image/*;q=0.8, */*;q=0.7","accept-encoding":"gzip, compress, deflate, br","content-type":"application/json","x-forwarded-for":"172.18.0.1","x-forwarded-host":"admin.n8n.inmetech.cloud","x-forwarded-port":"443","x-forwarded-proto":"https","x-forwarded-server":"f431cf187979","x-real-ip":"172.18.0.1"},"params":{},"query":{},"body":{"user_id":"user123","ram":"1g","cpu":"1"},"webhookUrl":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","executionMode":"production"},"pairedItem":{"item":0}}]}}[{"version":1,"startData":"1","resultData":"2","executionData":"3"},{"destinationNode":"4","runNodeFilter":"5"},{"error":"6","runData":"7","pinData":"8","lastNodeExecuted":"9"},{"contextData":"10","nodeExecutionStack":"11","metadata":"12","waitingExecution":"13","waitingExecutionSource":"14","runtimeData":"15"},{"nodeName":"9","mode":"16"},["17","9"],{"message":"18","stack":"19"},{"Webhook":"20","Build Docker Command":"21"},{"Webhook":"22"},"Build Docker Command",{},["23"],{},{},{},{"version":1,"establishedAt":1772773295472,"source":"24","triggerNode":"25"},"inclusive","Webhook","user_id missing [Line 4]","Error: user_id missing\n at /usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-nodes-base@file+packages+nodes-base_@aws-sdk+credential-providers@3.808.0_asn1.js@5_8da18263ca0574b0db58d4fefd8173ce/node_modules/n8n-nodes-base/dist/nodes/Function:4:9\n at /usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-nodes-base@file+packages+nodes-base_@aws-sdk+credential-providers@3.808.0_asn1.js@5_8da18263ca0574b0db58d4fefd8173ce/node_modules/n8n-nodes-base/dist/nodes/Function:36:2\n at VM2 Wrapper.apply (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/vm2@3.10.5/node_modules/vm2/lib/bridge.js:672:11)\n at NodeVM.run (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/vm2@3.10.5/node_modules/vm2/lib/nodevm.js:497:23)\n at ExecuteContext.execute (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-nodes-base@file+packages+nodes-base_@aws-sdk+credential-providers@3.808.0_asn1.js@5_8da18263ca0574b0db58d4fefd8173ce/node_modules/n8n-nodes-base/nodes/Function/Function.node.ts:169:21)\n at WorkflowExecute.executeNode (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@opentelemetry+api@1.9.0_@opentelemetry+exporter-trace-otlp_9f358c3eeaef0d2736f54ac9757ada43/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:1043:31)\n at WorkflowExecute.runNode (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@opentelemetry+api@1.9.0_@opentelemetry+exporter-trace-otlp_9f358c3eeaef0d2736f54ac9757ada43/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:1222:22)\n at /usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@opentelemetry+api@1.9.0_@opentelemetry+exporter-trace-otlp_9f358c3eeaef0d2736f54ac9757ada43/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:1665:38\n at /usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@opentelemetry+api@1.9.0_@opentelemetry+exporter-trace-otlp_9f358c3eeaef0d2736f54ac9757ada43/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:2308:11",["26"],["27"],["28"],{"node":"29","data":"30","source":"31"},"manual",{"name":"9","type":"32"},{"startTime":1772773211879,"executionIndex":0,"source":"33","hints":"34","executionTime":1,"executionStatus":"35","data":"36"},{"startTime":1772773295473,"executionIndex":1,"source":"37","hints":"38","executionTime":22,"executionStatus":"39","error":"40"},{"json":"41","pairedItem":"42"},{"parameters":"43","name":"9","type":"32","position":"44","typeVersion":1,"id":"45"},{"main":"46"},{"main":"37"},"n8n-nodes-base.function",[],[],"success",{"main":"47"},["48"],[],"error",{"message":"18","stack":"19"},{"headers":"49","params":"50","query":"51","body":"52","webhookUrl":"53","executionMode":"54"},{"item":0},{"notice":"55","functionCode":"56"},[112,-144],"7c91468e-80ea-4de5-8553-376dc01f0973",["57"],["58"],{"previousNode":"17","previousNodeOutput":0,"previousNodeRun":0},{"host":"59","user-agent":"60","content-length":"61","accept":"62","accept-encoding":"63","content-type":"64","x-forwarded-for":"65","x-forwarded-host":"59","x-forwarded-port":"66","x-forwarded-proto":"67","x-forwarded-server":"68","x-real-ip":"65"},{},{},{"user_id":"69","ram":"70","cpu":"71"},"https://admin.n8n.inmetech.cloud/webhook/create-n8n","production","","const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = \"n8n.\" + user + \".inmetech.cloud\";\n\nconst cmd = `\ndocker run -d \\\n--name n8n-${user} \\\n--memory=${ram} \\\n--cpus=${cpu} \\\n-v n8n_${user}:/home/node/.n8n \\\n-e N8N_HOST=${domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \"traefik.http.routers.n8n-${user}.rule=Host('${domain}')\" \\\n--label traefik.http.routers.n8n-${user}.entrypoints=websecure \\\n--label traefik.http.routers.n8n-${user}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.n8n-${user}.loadbalancer.server.port=5678 \\\ndocker.n8n.io/n8nio/n8n\n`;\n\nreturn [{\n json: {\n command: cmd,\n url: \"https://\" + domain\n }\n}];",["72"],["73"],"admin.n8n.inmetech.cloud","axios/1.13.5","42","application/json,text/html,application/xhtml+xml,application/xml,text/*;q=0.9, image/*;q=0.8, */*;q=0.7","gzip, compress, deflate, br","application/json","172.18.0.1","443","https","f431cf187979","user123","1g","1",{"json":"41","pairedItem":"74"},{"json":"75","pairedItem":"76"},{"item":0},{"headers":"77","params":"78","query":"79","body":"80","webhookUrl":"53","executionMode":"54"},{"item":0},{"host":"59","user-agent":"60","content-length":"61","accept":"62","accept-encoding":"63","content-type":"64","x-forwarded-for":"65","x-forwarded-host":"59","x-forwarded-port":"66","x-forwarded-proto":"67","x-forwarded-server":"68","x-real-ip":"65"},{},{},{"user_id":"69","ram":"70","cpu":"71"}]fc3bc306-cf91-4f89-aa4b-75ee88a0be50# || $env.API_KEY || \"\"}}"},{"name":"username","value":"={{$json[\"username\"] || $json[\"email\"] || $json[\"user\"] || \"user\"}}"},{"name":"plan","value":"={{$json[\"plan\"] || \"basic\"}}"},{"name":"domain","value":"={{$json[\"domain\"] || $env.DEFAULT_DOMAIN || \"inmetech.cloud\"}}"}]},"options":{}},"name":"Set Input","type":"n8n-nodes-base.set","typeVersion":1,"position":[-400,256],"id":"503fad3f-a1b5-4820-a049-48dd916574f5"},{"parameters":{"notice":"","functionCode":"const payload = items[0].json;\n\n// simple API key check (secure your webhook in production)\nconst providedKey = payload.apiKey || '';\nconst expected = process.env.API_KEY || '';\nif (!expected || providedKey !== expected) {\n throw new Error('Invalid API key');\n}\n\n// sanitize username\nlet raw = (payload.username || 'user').toString();\nlet username = raw.toLowerCase().replace(/[^a-z0-9\\-]/g, '').slice(0, 20) || 'user';\n\n// plan -> resources mapping (restrict to allowed values)\nconst plans = {\n basic: { ram: '1g', cpus: '0.5' },\n pro: { ram: '2g', cpus: '1' },\n agency: { ram: '4g', cpus: '2' }\n};\nconst plan = (payload.plan || 'basic').toLowerCase();\nconst res = plans[plan] || plans['basic'];\n\nconst domain = (payload.domain || process.env.DEFAULT_DOMAIN || 'inmetech.cloud').replace(/[^a-z0-9.\\-]/gi,'');\nconst subdomain = `n8n-${username}`;\nconst host = `${subdomain}.${domain}`;\nconst containerName = `n8n-${username}`;\nconst volume = `${containerName}_data`;\n\n// environment variables for each user container (disable dangerous nodes for clients)\nconst envs = [\n `-e N8N_HOST=${host}`,\n `-e N8N_PROTOCOL=https`,\n `-e WEBHOOK_URL=https://${host}/` ,\n `-e N8N_TRUST_PROXY=true`,\n `-e N8N_SECURE_COOKIE=true`,\n `-e NODES_EXCLUDE=[\"n8n-nodes-base.executeCommand\",\"n8n-nodes-base.localFileTrigger\"]`\n];\n\n// labels for Traefik routing\nconst labels = [\n `--label traefik.enable=true`,\n `--label traefik.http.routers.${containerName}.entrypoints=websecure`,\n `--label traefik.http.routers.${containerName}.rule=Host(\\`${host}\\`)`,\n `--label traefik.http.routers.${containerName}.tls.certresolver=letsencrypt`,\n `--label traefik.http.services.${containerName}.loadbalancer.server.port=5678`\n];\n\n// prepare docker commands\nconst cmdCreateVolume = `docker volume create ${volume}`;\nconst cmdRun = `docker run -d --name ${containerName} --restart unless-stopped --memory=${res.ram} --cpus=${res.cpus} -v ${volume}:/home/node/.n8n ${envs.join(' ')} ${labels.join(' ')} docker.n8n.io/n8nio/n8n`;\n\n// check existing container cmd\nconst cmdCheck = `docker ps -a --filter \\\"name=^/${containerName}$\\\" --format \\\"{{.Names}}\\\"`;\n\nreturn [ { json: { username, plan, domain, host, containerName, cmdCreateVolume, cmdRun, cmdCheck } } ];"},"name":"Build Commands","type":"n8n-nodes-base.function","typeVersion":1,"position":[-160,256],"id":"6b4138b5-495d-46a4-8a37-1ef01adb601a"},{"parameters":{"executeOnce":true,"command":"={{$json.commandCheck}}"},"name":"Check Existing","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,192],"id":"33050773-1166-410e-af9a-2629b205483c"},{"parameters":{"notice":"","functionCode":"const out = items[0].json;\nif (out && out.data && out.data.length) {\n const names = out.data.trim();\n if (names) throw new Error(`Container already exists: ${names}`);\n}\nreturn items;"},"name":"Fail If Exists","type":"n8n-nodes-base.function","typeVersion":1,"position":[336,192],"id":"8b770345-6008-45df-b449-648dc9181903"},{"parameters":{"executeOnce":true,"command":"={{$json.cmdCreateVolume}}"},"name":"Create Volume","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,320],"id":"c3ef5fcd-65be-44ef-a8fa-dc1db8dc1621"},{"parameters":{"executeOnce":true,"command":"={{$json.cmdRun}}"},"name":"Run Container","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[336,320],"id":"749ef316-deab-4898-805c-891900d0fed0"},{"parameters":{"notice":"","functionCode":"const j = items[0].json;\nreturn [{ json: { success: true, host: j.host, container: j.containerName, m$essage: 'Container creation triggered. Allow 10-30s to boot and acquire TLS.' } }];"},"name":"Prepare Response","type":"n8n-nodes-base.function","typeVersion":1,"position":[608,256],"id":"352f91c6-e900-433c-8d9b-b653cbf5e275"},{"parameters":{"multipleMethods":false,"httpMethod":"POST","path":"create-n8n","authentication":"none","responseMode":"onReceived","responseCode":200,"contentTypeNotice":"","options":{}},"name":"Webhook1","type":"n8n-nodes-base.webhook","typeVersion":1,"position":[-640,256],"id":"8e72c500-0d98-4892-b3bf-16633ffdb18f","webhookId":"91e8d5c0-cb20-4d3a-978a-db8e22e4073b","disabled":true},{"parameters":{"generalNotice":"","respondWith":"firstIncomingItem","options":{}},"name":"Respond1","type":"n8n-nodes-base.respondToWebhook","typeVersion":1,"position":[864,256],"id":"8d30d07b-7c63-43dd-89cc-fed8ec9d226b"},{"parameters":{"notice":"","functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = `n8n.${user}.inmetech.cloud`;\n\nreturn [{\n json: {\n user,\n ram,\n cpu,\n domain,\n container: `n8n-${user}`,\n volume: `n8n_${user}`\n }\n}];"},"id":"9ddf7ecd-9b82-40df-82c7-63fc748fb79c","name":"Prepare Data","type":"n8n-nodes-base.function","position":[-672,1200],"typeVersion":1},{"parameters":{"executeOnce":true,"command":"docker ps -a --format '{{.Names}}'"},"id":"0f259cf3-ccd1-481d-b237-bbb048f9ce3c","name":"List Containers","type":"n8n-nodes-base.executeCommand","position":[-416,1088],"typeVersion":1},{"parameters":{"notice":"","functionCode":"const existing = $json.stdout || \"\";\nconst user = $items(\"Prepare Data\")[0].json.user;\n\nif (existing.includes(`n8n-${user}`)) {\n throw new Error(\"Container already exists\");\n}\n\nreturn $items(\"Prepare Data\");"},"id":"12aa3069-ada6-4845-ad2f-87af3d31bb85","name":"Check Duplicate","type":"n8n-nodes-base.function","position":[-160,1088],"typeVersion":1},{"parameters":{"multipleMethods":false,"httpMethod":"POST","path":"create-n8n1111","authentication":"none","responseMode":"onReceived","responseCode":200,"contentTypeNotice":"","options":{}},"id":"fb6697e6-8815-4beb-936d-f16f1814cfdc","name":"Webhook2","type":"n8n-nodes-base.webhook","position":[-912,1200],"typeVersion":1,"webhookId":"c08aedad-597e-4ea4-b647-bccecb2c90f3"},{"parameters":{"notice":"","functionCode":"const data = $json;\n\nconst cmd = `docker run -d \\\n--name ${data.container} \\\n--memory=${data.ram} \\\n--cpus=${data.cpu} \\\n-v ${data.volume}:/home/node/.n8n \\\n-e N8N_HOST=${data.domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${data.domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \\\"traefik.http.routers.${data.container}.rule=Host('${data.domain}')\\\" \\\n--label traefik.http.routers.${data.container}.entrypoints=websecure \\\n--label traefik.http.routers.${data.container}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.${data.container}.loadbalancer.server.port=5678 \\\n docker.n8n.io/n8nio/n8n`;\n\nreturn [{ json: { command: cmd, url: `https://${data.domain}` } }];"},"id":"36f16652-730e-4ff9-8978-16747fa1d8e3","name":"Build Docker Command1","type":"n8n-nodes-base.function","position":[96,1200],"typeVersion":1},{"parameters":{"executeOnce":true,"command":"={{$json.command}}"},"id":"652ddbd1-09f1-4ac6-84c2-169a34d5016c","name":"Run Docker1","type":"n8n-nodes-base.executeCommand","position":[336,1200],"typeVersion":1},{"parameters":{"generalNotice":"","respondWith":"firstIncomingItem","options":{}},"id":"2672e437-0f80-43fa-91ad-80805b69d424","name":"Respond2","type":"n8n-nodes-base.respondToWebhook","position":[592,1200],"typeVersion":1},{"parameters":{"curlImport":"","method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n1111","authentication":"none","provideSslCertificates":false,"sendQuery":false,"sendHeaders":false,"sendBody":true,"contentType":"json","specifyBody":"keypair","bodyParameters":{"parameters":[{"name":"user_id","value":"1234"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{},"infoMessage":""},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[-592,1664],"id":"6699443d-0372-4cbf-958a-e890a12c5381","name":"HTTP Request1"}],"connections":{"Webhook":{"main":[[{"node":"Build Docker Command","type":"main","index":0}]]},"Build Docker Command":{"main":[[{"node":"Run Docker","type":"main","index":0}]]},"Run Docker":{"main":[[{"node":"Respond","type":"main","index":0}]]},"Set Input":{"main":[[{"node":"Build Commands","type":"main","index":0}]]},"Build Commands":{"main":[[{"node":"Check Existing","type":"main","index":0},{"node":"Create Volume","type":"main","index":0}]]},"Check Existing":{"main":[[{"node":"Fail If Exists","type":"main","index":0}]]},"Fail If Exists":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Create Volume":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Run Container":{"main":[[{"node":"Prepare Response","type":"main","index":0}]]},"Prepare Response":{"main":[[{"node":"Respond1","type":"main","index":0}]]},"Webhook1":{"main":[[{"node":"Set Input","type":"main","index":0}]]},"Check Duplicate":{"main":[[{"node":"Build Docker Command1","type":"main","index":0}]]},"Webhook2":{"main":[[{"node":"Prepare Data","type":"main","index":0}]]},"Build Docker Command1":{"main":[[{"node":"Run Docker1","type":"main","index":0}]]},"Run Docker1":{"main":[[{"node":"Respond2","type":"main","index":0}]]},"Prepare Data":{"main":[[{"node":"List Containers","type":"main","index":0}]]},"List Containers":{"main":[[{"node":"Check Duplicate","type":"main","index":0}]]}},"settings":{"executionOrder":"v1","binaryMode":"separate","availableInMCP":false},"pinData":{"Webhook":[{"json":{"headers":{"host":"admin.n8n.inmetech.cloud","user-agent":"axios/1.13.5","content-length":"42","accept":"application/json,text/html,application/xhtml+xml,application/xml,text/*;q=0.9, image/*;q=0.8, */*;q=0.7","accept-encoding":"gzip, compress, deflate, br","content-type":"application/json","x-forwarded-for":"172.18.0.1","x-forwarded-host":"admin.n8n.inmetech.cloud","x-forwarded-port":"443","x-forwarded-proto":"https","x-forwarded-server":"f431cf187979","x-real-ip":"172.18.0.1"},"params":{},"query":{},"body":{"user_id":"user123","ram":"1g","cpu":"1"},"webhookUrl":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","executionMode":"production"},"pairedItem":{"item":0}}]}}[{"version":1,"startData":"1","resultData":"2","executionData":"3"},{"destinationNode":"4","runNodeFilter":"5"},{"runData":"6","pinData":"7","lastNodeExecuted":"8"},{"contextData":"9","nodeExecutionStack":"10","metadata":"11","waitingExecution":"12","waitingExecutionSource":"13","runtimeData":"14"},{"nodeName":"8","mode":"15"},["8"],{"HTTP Request1":"16"},{"Webhook":"17"},"HTTP Request1",{"node:HTTP Request1":"18"},[],{},{},{},{"version":1,"establishedAt":1772773624087,"source":"19","triggerNode":"20"},"inclusive",["21"],["22"],{"response":"23"},"manual",{"name":"8","type":"24"},{"startTime":1772773624090,"executionIndex":0,"source":"25","hints":"26","executionTime":287,"executionStatus":"27","data":"28"},{"json":"29","pairedItem":"30"},{"body":"31"},"n8n-nodes-base.httpRequest",[],[],"success",{"main":"32"},{"headers":"33","params":"34","query":"35","body":"36","webhookUrl":"37","executionMode":"38"},{"item":0},{"message":"39"},["40"],{"host":"41","user-agent":"42","content-length":"43","accept":"44","accept-encoding":"45","content-type":"46","x-forwarded-for":"47","x-forwarded-host":"41","x-forwarded-port":"48","x-forwarded-proto":"49","x-forwarded-server":"50","x-real-ip":"47"},{},{},{"user_id":"51","ram":"52","cpu":"53"},"https://admin.n8n.inmetech.cloud/webhook/create-n8n","production","Workflow was started",["54"],"admin.n8n.inmetech.cloud","axios/1.13.5","42","application/json,text/html,application/xhtml+xml,application/xml,text/*;q=0.9, image/*;q=0.8, */*;q=0.7","gzip, compress, deflate, br","application/json","172.18.0.1","443","https","f431cf187979","user123","1g","1",{"json":"31","pairedItem":"55"},{"item":0}]bfa0341d-c9ac-4770-8935-19b9c2979780 j'mU{"id":"ioR8eFBEVaKOkjc0","name":"Create n8n Instance","active":false,"activeVersionId":null,"nodes":[{"parameters":{"multipleMethods":false,"httpMethod":"POST","path":"create-n8n","authentication":"none","responseMode":"onReceived","responseCode":200,"contentTypeNotice":"","options":{}},"name":"Webhook","type":"n8n-nodes-base.webhook","position":[-192,-144],"typeVersion":1,"id":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","webhookId":"a4d792e3-b5b9-425f-b612-c938e71de65d"},{"parameters":{"notice":"","functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = \"n8n.\" + user + \".inmetech.cloud\";\n\nconst cmd = `\ndocker run -d \\\n--name n8n-${user} \\\n--memory=${ram} \\\n--cpus=${cpu} \\\n-v n8n_${user}:/home/node/.n8n \\\n-e N8N_HOST=${domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \"traefik.http.routers.n8n-${user}.rule=Host('${domain}')\" \\\n--label traefik.http.routers.n8n-${user}.entrypoints=websecure \\\n--label traefik.http.routers.n8n-${user}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.n8n-${user}.loadbalancer.server.port=5678 \\\ndocker.n8n.io/n8nio/n8n\n`;\n\nreturn [{\n json: {\n command: cmd,\n url: \"https://\" + domain\n }\n}];"},"name":"Build Docker Command","type":"n8n-nodes-base.function","position":[176,-192],"typeVersion":1,"id":"7c91468e-80ea-4de5-8553-376dc01f0973","disabled":true},{"parameters":{"executeOnce":true,"command":"={{$json.command}}"},"name":"Run Docker","type":"n8n-nodes-base.executeCommand","position":[416,-144],"typeVersion":1,"id":"d049c848-745f-43ce-ad8f-2069344eb356"},{"parameters":{"generalNotice":"","respondWith":"firstIncomingItem","options":{}},"name":"Respond","type":"n8n-nodes-base.respondToWebhook","position":[672,-144],"typeVersion":1,"id":"c17c8373-bb00-4562-ae8f-c18a13839f0d"},{"parameters":{"curlImport":"","method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","authentication":"none","provideSslCertificates":false,"sendQuery":false,"sendHeaders":false,"sendBody":true,"contentType":"json","specifyBody":"keypair","bodyParameters":{"parameters":[{"name":"user_id","value":"user123"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{},"infoMessage":""},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[336,-400],"id":"9654e007-c6e7-4a2b-b48a-7ee7df40a1c0","name":"HTTP Request"},{"parameters":{"keepOnlySet":false,"values":{"string":[{"name":"apiKey","value":"{{$json[\"apiKey\"]"'}\n}];"},"name":"Build Docker Command","type":"n8n-nodes-base.function","position":[176,-192],"typeVersion":1,"id":"7c91468e-80ea-4de5-8553-376dc01f0973","disabled":true},{"parameters":{"executeOnce":true,"command":"={{$json.command}}"},"name":"Run Docker","type":"n8n-nodes-base.executeCommand","position":[416,-144],"typeVersion":1,"id":"d049c848-745f-43ce-ad8f-2069344eb356"},{"parameters":{"generalNotice":"","respondWith":"firstIncomingItem","options":{}},"name":"Respond","type":"n8n-nodes-base.respondToWebhook","position":[672,-144],"typeVersion":1,"id":"c17c8373-bb00-4562-ae8f-c18a13839f0d"},{"parameters":{"curlImport":"","method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","authentication":"none","provideSslCertificates":false,"sendQuery":false,"sendHeaders":false,"sendBody":true,"contentType":"json","specifyBody":"keypair","bodyParameters":{"parameters":[{"name":"user_id","value":"user123"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{},"infoMessage":""},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[336,-400],"id":"9654e007-c6e7-4a2b-b48a-7ee7df40a1c0","name":"HTTP Request"},{"parameters":{"keepOnlySet":false,"values":{"string":[{"name":"apiKey","value":"{{$json[\"apiKey\"] || $env.API_KEY || \"\"}}"},{"name":"username","value":"={{$json[\"username\"] || $json[\"email\"] || $json[\"user\"] || \"user\"}}"},{"name":"plan","value":"={{$json[\"plan\"] || \"basic\"}}"},{"name":"domain","value":"={{$json[\"domain\"] || $env.DEFAULT_DOMAIN || \"inmetech.cloud\"}}"}]},"options":{}},"name":"Set Input","type":"n8n-nodes-base.set","typeVersion":1,"position":[-400,256],"id":"503fad3f-a1b5-4820-a049-48dd916574f5"},{"parameters":{"notice":"","functionCode":"const payload = items[0].json;\n\n// simple API key check (secure your webhook in production)\nconst providedKey = payload.apiKey || '';\nconst expected = process.env.API_KEY || '';\nif (!expected || providedKey !== expected) {\n throw new Error('Invalid API key');\n}\n\n// sanitize username\nlet raw = (payload.username || 'user').toString();\nlet username = raw.toLowerCase().replace(/[^a-z0-9\\-]/g, '').slice(0, 20) || 'user';\n\n// plan -> resources mapping (restrict to allowed values)\nconst plans = {\n basic: { ram: '1g', cpus: '0.5' },\n pro: { ram: '2g', cpus: '1' },\n agency: { ram: '4g', cpus: '2' }\n};\nconst plan = (payload.plan || 'basic').toLowerCase();\nconst res = plans[plan] || plans['basic'];\n\nconst domain = (payload.domain || process.env.DEFAULT_DOMAIN || 'inmetech.cloud').replace(/[^a-z0-9.\\-]/gi,'');\nconst subdomain = `n8n-${username}`;\nconst host = `${subdomain}.${domain}`;\nconst containerName = `n8n-${username}`;\nconst volume = `${containerName}_data`;\n\n// environment variables for each user container (disable dangerous nodes for clients)\nconst envs = [\n `-e N8N_HOST=${host}`,\n `-e N8N_PROTOCOL=https`,\n `-e WEBHOOK_URL=https://${host}/` ,\n `-e N8N_TRUST_PROXY=true`,\n `-e N8N_SECURE_COOKIE=true`,\n `-e NODES_EXCLUDE=[\"n8n-nodes-base.executeCommand\",\"n8n-nodes-base.localFileTrigger\"]`\n];\n\n// labels for Traefik routing\nconst labels = [\n `--label traefik.enable=true`,\n `--label traefik.http.routers.${containerName}.entrypoints=websecure`,\n `--label traefik.http.routers.${containerName}.rule=Host(\\`${host}\\`)`,\n `--label traefik.http.routers.${containerName}.tls.certresolver=letsencrypt`,\n `--label traefik.http.services.${containerName}.loadbalancer.server.port=5678`\n];\n\n// prepare docker commands\nconst cmdCreateVolume = `docker volume create ${volume}`;\nconst cmdRun = `docker run -d --name ${containerName} --restart unless-stopped --memory=${res.ram} --cpus=${res.cpus} -v ${volume}:/home/node/.n8n ${envs.join(' ')} ${labels.join(' ')} docker.n8n.io/n8nio/n8n`;\n\n// check existing container cmd\nconst cmdCheck = `docker ps -a --filter \\\"name=^/${containerName}$\\\" --format \\\"{{.Names}}\\\"`;\n\nreturn [ { json: { username, plan, domain, host, containerName, cmdCreateVolume, cmdRun, cmdCheck } } ];"},"name":"Build Commands","type":"n8n-no(des-base.function","typeVersion":1,"position":[-160,256],"id":"6b4138b5-495d-46a4-8a37-1ef01adb601a"},{"parameters":{"executeOnce":true,"command":"={{$json.commandCheck}}"},"name":"Check Existing","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,192],"id":"33050773-1166-410e-af9a-2629b205483c"},{"parameters":{"notice":"","functionCode":"const out = items[0].json;\nif (out && out.data && out.data.length) {\n const names = out.data.trim();\n if (names) throw new Error(`Container already exists: ${names}`);\n}\nreturn items;"},"name":"Fail If Exists","type":"n8n-nodes-base.function","typeVersion":1,"position":[336,192],"id":"8b770345-6008-45df-b449-648dc9181903"},{"parameters":{"executeOnce":true,"command":"={{$json.cmdCreateVolume}}"},"name":"Create Volume","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,320],"id":"c3ef5fcd-65be-44ef-a8fa-dc1db8dc1621"},{"parameters":{"executeOnce":true,"command":"={{$json.cmdRun}}"},"name":"Run Container","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[336,320],"id":"749ef316-deab-4898-805c-891900d0fed0"},{"parameters":{"notice":"","functionCode":"const j = items[0].json;\nreturn [{ json: { success: true, host: j.host, container: j.containerName, message: 'Container creation triggered. Allow 10-30s to boot and acquire TLS.' } }];"},"name":"Prepare Response","type":"n8n-nodes-base.function","typeVersion":1,"position":[608,256],"id":"352f91c6-e900-433c-8d9b-b653cbf5e275"},{"parameters":{"multipleMethods":false,"httpMethod":"POST","path":"create-n8n","authentication":"none","responseMode":"onReceived","responseCode":200,"contentTypeNotice":"","options":{}},"name":"Webhook1","type":"n8n-nodes-base.webhook","typeVersion":1,"position":[-640,256],"id":"8e72c500-0d98-4892-b3bf-16633ffdb18f","webhookId":"91e8d5c0-cb20-4d3a-978a-db8e22e4073b","disabled":true},{"parameters":{"generalNotice":"","respondWith":"firstIncomingItem","options":{}},"name":"Respond1","type":"n8n-nodes-base.respondToWebhook","typeVersion":1,"position":[864,256],"id":"8d30d07b-7c63-43dd-89cc-fed8ec9d226b"},{"parameters":{"notice":"","functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = `n8n.${user}.inmetech.cloud`;\n\nreturn [{\n json: {\n user,\n ram,\n cpu,\n domain,\n container: `n8n-${user}`,\n volume: `n8n_${user}`\n }\n}];"},"id":"9ddf7ecd-9b82-40df-82c7-63fc748fb79c","name":"Prepare Data","type":"n8n-nodes-base.function","position":[-672,1200],"typeVersion":1},{"parameters":{"executeOnce":true,"command":"docker ps -a --format '{{.Names}}'"},"id":"0f259cf3-ccd1-481d-b237-bbb048f9ce3c","name":"List Containers","type":"n8n-nodes-base.executeCommand","position":[-416,1088],"typeVersion":1},{"parameters":{"notice":"","functionCode":"const existing = $json.stdout || \"\";\nconst user = $items(\"Prepare Data\")[0].json.user;\n\nif (existing.includes(`n8n-${user}`)) {\n throw new Error(\"Container already exists\");\n}\n\nreturn $items(\"Prepare Data\");"},"id":"12aa3069-ada6-4845-ad2f-87af3d31bb85","name":"Check Duplicate","type":"n8n-nodes-base.function","position":[-160,1088],"typeVersion":1},{"parameters":{"multipleMethods":false,"httpMethod":"POST","path":"create-n8n1111","authentication":"none","responseMode":"onReceived","responseCode":200,"contentTypeNotice":"","options":{}},"id":"fb6697e6-8815-4beb-936d-f16f1814cfdc","name":"Webhook2","type":"n8n-nodes-base.webhook","position":[-912,1200],"typeVersion":1,"webhookId":"c08aedad-597e-4ea4-b647-bccecb2c90f3"},{"parameters":{"notice":"","functionCode":"const data = $json;\n\nconst cmd = `docker run -d \\\n--name ${data.container} \\\n--memory=${data.ram} \\\n--cpus=${data.cpu} \\\n-v ${data.volume}:/home/node/.n8n \\\n-e N8N_HOST=${data.domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${data.domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \\\"traefik.http.routers.${data.container}.rule=Host('${data.domain}'))\\\" \\\n--label traefik.http.routers.${data.container}.entrypoints=websecure \\\n--label traefik.http.routers.${data.container}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.${data.container}.loadbalancer.server.port=5678 \\\n docker.n8n.io/n8nio/n8n`;\n\nreturn [{ json: { command: cmd, url: `https://${data.domain}` } }];"},"id":"36f16652-730e-4ff9-8978-16747fa1d8e3","name":"Build Docker Command1","type":"n8n-nodes-base.function","position":[96,1200],"typeVersion":1},{"parameters":{"executeOnce":true,"command":"={{$json.command}}"},"id":"652ddbd1-09f1-4ac6-84c2-169a34d5016c","name":"Run Docker1","type":"n8n-nodes-base.executeCommand","position":[336,1200],"typeVersion":1},{"parameters":{"generalNotice":"","respondWith":"firstIncomingItem","options":{}},"id":"2672e437-0f80-43fa-91ad-80805b69d424","name":"Respond2","type":"n8n-nodes-base.respondToWebhook","position":[592,1200],"typeVersion":1},{"parameters":{"curlImport":"","method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","authentication":"none","provideSslCertificates":false,"sendQuery":false,"sendHeaders":false,"sendBody":true,"contentType":"json","specifyBody":"keypair","bodyParameters":{"parameters":[{"name":"user_id","value":"user1"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{},"infoMessage":""},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[-592,1664],"id":"6699443d-0372-4cbf-958a-e890a12c5381","name":"HTTP Request1"}],"connections":{"Webhook":{"main":[[{"node":"Build Docker Command","type":"main","index":0}]]},"Build Docker Command":{"main":[[{"node":"Run Docker","type":"main","index":0}]]},"Run Docker":{"main":[[{"node":"Respond","type":"main","index":0}]]},"Set Input":{"main":[[{"node":"Build Commands","type":"main","index":0}]]},"Build Commands":{"main":[[{"node":"Check Existing","type":"main","index":0},{"node":"Create Volume","type":"main","index":0}]]},"Check Existing":{"main":[[{"node":"Fail If Exists","type":"main","index":0}]]},"Fail If Exists":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Create Volume":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Run Container":{"main":[[{"node":"Prepare Response","type":"main","index":0}]]},"Prepare Response":{"main":[[{"node":"Respond1","type":"main","index":0}]]},"Webhook1":{"main":[[{"node":"Set Input","type":"main","index":0}]]},"Check Duplicate":{"main":[[{"node":"Build Docker Command1","type":"main","index":0}]]},"Webhook2":{"main":[[{"node":"Prepare Data","type":"main","index":0}]]},"Build Docker Command1":{"main":[[{"node":"Run Docker1","type":"main","index":0}]]},"Run Docker1":{"main":[[{"node":"Respond2","type":"main","index":0}]]},"Prepare Data":{"main":[[{"node":"List Containers","type":"main","index":0}]]},"List Containers":{"main":[[{"node":"Check Duplicate","type":"main","index":0}]]}},"settings":{"executionOrder":"v1","binaryMode":"separate","availableInMCP":false},"staticData":{},"pinData":{"Webhook":[{"json":{"headers":{"host":"admin.n8n.inmetech.cloud","user-agent":"axios/1.13.5","content-length":"42","accept":"application/json,text/html,application/xhtml+xml,application/xml,text/*;q=0.9, image/*;q=0.8, */*;q=0.7","accept-encoding":"gzip, compress, deflate, br","content-type":"application/json","x-forwarded-for":"172.18.0.1","x-forwarded-host":"admin.n8n.inmetech.cloud","x-forwarded-port":"443","x-forwarded-proto":"https","x-forwarded-server":"f431cf187979","x-real-ip":"172.18.0.1"},"params":{},"query":{},"body":{"user_id":"user123","ram":"1g","cpu":"1"},"webhookUrl":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","executionMode":"production"},"pairedItem":{"item":0}}]}}[{"version":1,"startData":"1","resultData":"2","executionData":"3"},{},{"error":"4","runData":"5","lastNodeExecuted":"6"},{"contextData":"7","nodeExecutionStack":"8","metadata":"9","waitingExecution":"10","waitingExecutionSource":"11","runtimeData":"12"},{"message":"13","stack":"14"},{"Webhook2":"15","Prepare Data":"16"},"Prepare Data",{},["17"],{},{},{},{"version":1,"establishedAt":1772773624314,"source":"18","triggerNode":"19"},"user_id missing [Line 4]","Error: user_id missing\n at /usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-nodes-base@file+packages+nodes-base_@aws-sdk+credential-providers@3.808.0_asn1.js@5_8da18263ca0574b0db58d4fefd8173ce/node_modules/n8n-nodes-base/dist/nodes/Function:4:9\n at /usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-nodes-base@file+packages+nodes-base_@aws-sdk+credential-providers@3.808.0_asn1.js@5_8da18263ca0574b0db58d4fefd8173ce/node_modules/n8n-nodes-base/dist/nodes/Function:22:2\n at VM2 Wrapper.apply (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/vm2@3.10.5/node_modules/vm2/lib/bridge.js:672:11)\n at NodeVM.run (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/vm2@3.10.5/node_modules/vm2/lib/nodevm.js:497:23)\n at ExecuteContext.execute (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-nodes-base@file+packages+nodes-base_@aws-sdk+credential-providers@3.808.0_asn1.js@5_8da18263ca0574b0db58d4fefd8173ce/node_modules/n8n-nodes-base/nodes/Function/Function.node.ts:169:21)\n at WorkflowExecute.executeNode (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@opentelemetry+api@1.9.0_@opentelemetry+exporter-trace-otlp_9f358c3eeaef0d2736f54ac9757ada43/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:1043:31)\n at WorkflowExecute.runNode (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@opentelemetry+api@1.9.0_@opentelemetry+exporter-trace-otlp_9f358c3eeaef0d2736f54ac9757ada43/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:1222:22)\n at /usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@opentelemetry+api@1.9.0_@opentelemetry+exporter-trace-otlp_9f358c3eeaef0d2736f54ac9757ada43/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:1665:38\n at /usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@opentelemetry+api@1.9.0_@opentelemetry+exporter-trace-otlp_9f358c3eeaef0d2736f54ac9757ada43/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:2308:11",["20"],["21"],{"node":"22","data":"23","source":"24"},"webhook",{"name":"25","type":"26"},{"startTime":1772773624318,"executionIndex":0,"source":"27","hints":"28","executionTime":1,"executionStatus":"29","data":"30"},{"startTime":1772773624320,"executionIndex":1,"source":"31","hints":"32","executionTime":31,"executionStatus":"33","error":"34"},{"parameters":"35","id":"36","name":"6","type":"37","position":"38","typeVersion":1},{"main":"39"},{"main":"31"},"Webhook2","n8n-nodes-base.webhook",[],[],"success",{"main":"40"},["41"],[],"error",{"message":"13","stack":"14"},{"notice":"42","functionCode":"43"},"9ddf7ecd-9b82-40df-82c7-63fc748fb79c","n8n-nodes-base.function",[-672,1200],["44"],["45"],{"previousNode":"25","previousNodeOutput":0,"previousNodeRun":0},"","const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = `n8n.${user}.inmetech.cloud`;\n\nreturn [{\n json: {\n user,\n ram,\n cpu,\n domain,\n container: `n8n-${user}`,\n volume: `n8n_${user}`\n }\n}];",["46"],["47"],{"json":"48","pairedItem":"49"},{"json":"48","pairedItem":"50"},{"headers":"51","params":"52","query":"53","body":"54","webhookUrl":"55","executionMode":"56"},{"item":0},{"item":0},{"host":"57","user-agent":"58","content-length":"59","accept":"60","accept-encoding":"61","content-type":"62","x-forwarded-for":"63","x-forwarded-host":"57","x-forwarded-port":"64","x-forwarded-proto":"65","x-forwarded-server":"66","x-real-ip":"63"},{},{},{"user_id":"67","ram":"68","cpu":"69"},"https://admin.n8n.inmetech.cloud/webhook/create-n8n1111","production","admin.n8n.inmetech.cloud","axios/1.13.5","39","application/json,text/html,application/xhtml+xml,application/xml,text/*;q=0.9, image/*;q=0.8, */*;q=0.7","gzip, compress, deflate, br","application/json","172.18.0.1","443","https","f431cf187979","1234","1g","1"]bfa0341d-c9ac-4770-8935-19b9c2979780  yEmU{"id":"ioR8eFBEVaKOkjc0","name":"Create n8n Instance","active":true,"activeVersionId":"9d185630-6aca-46e3-b9b4-7ceb8e19d3fb","isArchived":false,"createdAt":"2026-03-06T04:58:21.680Z","updatedAt":"2026-03-06T05:06:49.520Z","nodes":[{"parameters":{"multipleMethods":false,"httpMethod":"POST","path":"create-n8n","authentication":"none","responseMode":"onReceived","responseCode":200,"contentTypeNotice":"","options":{}},"name":"Webhook","type":"n8n-nodes-base.webhook","position":[-192,-144],"typeVersion":1,"id":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","webhookId":"a4d792e3-b5b9-425f-b612-c938e71de65d"},{"parameters":{"notice":"","functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = \"n8n.\" + user + \".inmetech.cloud\";\n\nconst cmd = `\ndocker run -d \\\n--name n8n-${user} \\\n--memory=${ram} \\\n--cpus=${cpu} \\\n-v n8n_${user}:/home/node/.n8n \\\n-e N8N_HOST=${domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \"traefik.http.routers.n8n-${user}.rule=Host('${domain}')\" \\\n--label traefik.http.routers.n8n-${user}.entrypoints=websecure \\\n--label traefik.http.routers.n8n-${user}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.n8n-${user}.loadbalancer.server.port=5678 \\\ndocker.n8n.io/n8nio/n8n\n`;\n\nreturn [{\n json: {\n command: cmd,\n url: \"https://\" + domain\n &   b--);;ioR8eFBEVaKOkjc0cZz5fzaW49pCUs3Cworkflow:owner2026-03-06 04:58:21.6842026-03-06 04:58:21.684 $-- ioR8eFBEVaKOkjc0cZz5fzaW49pCUs3C          3 q-;;;ioR8eFBEVaKOkjc0webhook2026-03-06 05:07:04.3082026-03-06 05:07:04.353error2026-03-06 05:07:04.287dbr- ;;;ioR8eFBEVaKOkjc0manual2026-03-06 05:07:04.0822026-03-06 05:07:04.381success2026-03-06 05:07:04.064dbp-;;;ioR8eFBEVaKOkjc0manual2026-03-06 05:01:35.4682026-03-06 05:01:35.496error2026-03-06 05:01:35.462dbq-;;;ioR8eFBEVaKOkjc0webhook2026-03-06 05:00:11.8752026-03-06 05:00:11.973error2026-03-06 05:00:11.861dbr- ;;;ioR8eFBEVaKOkjc0manual2026-03-06 05:00:11.4312026-03-06 05:00:11.942success2026-03-06 05:00:11.403db T \n g '!!Stablefolder_tagfolder_tag=CREATE TABLE "folder_tag" ("folderId" varchar(36) NOT NULL, "tagId" varchar(36) NOT NULL, CONSTRAINT "FK_94a60854e06f2897b2e0d39edba" FOREIGN KEY ("folderId") REFERENCES "folder" ("id") ON DELETE CASCADE, CONSTRAINT "FK_dc88164176283de80af47621746" FOREIGN KEY ("tagId") REFERENCES "tag_entity" ("id") ON DELETE CASCADE, PRIMARY KEY ("folderId", "tagId"))3(G!indexsqlite_autoindex_folder_tag_1folder_tag>D%ctablefolderfolder;CREATE TABLE "folder" ("id" varchar(36) PRIMARY KEY NOT NULL, "name" varchar(128) NOT NULL, "parentFolderId" varchar(36), "projectId" varchar(36) NOT NULL, "createdAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "updatedAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), CONSTRAINT "FK_a8260b0b36939c6247f385b8221" FOREIGN KEY ("projectId") REFERENCES "project" ("id") ON DELETE CASCADE, CONSTRAINT "FK_804ea52f6729e3940498bd54d78" FOREIGN KEY ("parentFolderId") REFERENCES "folder" ("id") ON DELETE CASCADE)+&?indexsqlite_autoindex_folder_1folder<}#))5tableprocessed_dataprocessed_data9CREATE TABLE "processed_data" ("workflowId" varchar(36) NOT NULL, "context" varchar(255) NOT NULL, "createdAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "updatedAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "value" text NOT NULL, CONSTRAINT "FK_06a69a7032c97a763c2c7599464" FOREIGN KEY ("workflowId") REFERENCES "workflow_entity" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, PRIMARY KEY ("workflowId", "context"));$O)indexsqlite_autoindex_processed_data_1processed_data: c1"--tableexecution_entityexecution_entity7CREATE TABLE "execution_entity" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "workflowId" varchar(36) NOT NULL, "finished" boolean NOT NULL, "mode" varchar NOT NULL, "retryOf" varchar, "retrySuccessId" varchar, "startedAt" datetime, "stoppedAt" datetime, "waitTill" datetime, "status" varchar NOT NULL, "deletedAt" datetime(3), "createdAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "storedAt" VARCHAR(2) NOT NULL DEFAULT 'db' CHECK("storedAt" IN ('db', 'fs', 's3')), CONSTRAINT "FK_c4d999a5e90784e8caccf5589de" FOREIGN KEY ("workflowId") REFERENCES "workflow_entity" ("id") ON DELETE CASCADE ON UPDATE NO ACTION)Q!e?indexsqlite_autoindex_execution_annotation_tags_1execution_annotation_tags65x*Ctabletest_runtest_run@CREATE TABLE "test_run" ("id" varchar(36) PRIMARY KEY NOT NULL, "workflowId" varchar(36) NOT NULL, "status" varchar NOT NULL, "errorCode" varchar, "errorDetails" text, "runAt" datetime(3), "completedAt" datetime(3), "metrics" text, "createdAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "updatedAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "runningInstanceId" VARCHAR(255), "cancelRequested" BOOLEAN NOT NULL DEFAULT FALSE, CONSTRAINT "FK_d6870d3b6e4c185d33926f423c8" FOREIGN KEY ("workflowId") REFERENCES "workflow_entity" ("id") ON DELETE CASCADE)j)//tableinsights_metadatainsights_metadata?CREATE TABLE "insights_metadata" ("metaId" integer PRIMARY KEY NOT NULL, "workflowId" varchar(16), "projectId" varchar(36), "workflowName" varchar(128) NOT NULL, "projectName" varchar(255) NOT NULL, CONSTRAINT "FK_1d8ab99d5861c9388d2dc1cf733" FOREIGN KEY ("workflowId") REFERENCES "workflow_entity" ("id") ON DELETE SET NULL, CONSTRAINT "FK_2375a1eda085adb16b24615b69c" FOREIGN KEY ("projectId") REFERENCES "project" ("id") ON DELETE SET NULL)       w--3ioR8eFBEVaKOkjc0cZz5fzaW49pCUs3CCreate n8n InstanceRIZOWAN rizowansiddique@gmail.com  ED_GF"IexternalSecretsProvider:update# _v- b4 l B & R  t L ( X  T Vr< `>dB$ T*jT:  T8 zV2_!!variable:*variable:*^''variable:listvariable:list"]++variable:deletevariable:delete"\++variable:updatevariable:update[''variable:readvariable:read"Z++variable:createvariable:createYuser:*user:*Xuser:listuser:listW##user:deleteuser:deleteV##user:updateuser:updateUuser:readuser:readT##user:createuser:create2S;;user:generateInviteLinkuser:generateInviteLink"R++user:enforceMfauser:enforceMfa"Q++user:changeRoleuser:changeRole(P11user:resetPassworduser:resetPasswordOtag:*tag:*Ntag:listtag:listM!!tag:deletetag:deleteL!!tag:updatetag:updateKtag:readtag:readJ!!tag:createtag:create"I++sourceControl:*sourceControl:*,H55sourceControl:managesourceControl:manage(G11sourceControl:pushsourceControl:push(F11sourceControl:pullsourceControl:pull(E11securitySettings:*securitySettings:*2D;;securitySettings:managesecuritySettings:manage"C++securityAudit:*securityAudit:*0B99securityAudit:generatesecurityAudit:generateAsaml:*saml:*@##saml:managesaml:manage?project:*project:*>%%project:listproject:list =))project:deleteproject:delete <))project:updateproject:update;%%project:readproject:read :))project:createproject:create"9++orchestration:*orchestration:*(811orchestration:listorchestration:list(711orchestration:readorchestration:read 6))logStreaming:*logStreaming:**533logStreaming:managelogStreaming:manage4license:*license:* 3))license:managelicense:manage2ldap:*ldap:*1##ldap:manageldap:manage0ldap:syncldap:sync./77eventBusDestination:*eventBusDestination:*4.==eventBusDestination:listeventBusDestination:list8-AAeventBusDestination:deleteeventBusDestination:delete8,AAeventBusDestination:updateeventBusDestination:update4+==eventBusDestination:readeventBusDestination:read8*AAeventBusDestination:createeventBusDestination:create4)==eventBusDestination:testeventBusDestination:test$(--externalSecret:*externalSecret:**'33externalSecret:listexternalSecret:list6&??externalSecretsProvider:*externalSecretsProvider:*<%EEexternalSecretsProvider:listexternalSecretsProvider:list@$IIexternalSecretsProvider:deleteexternalSecretsProvider:delete@#IIexternalSecretsProvider:updateexternalSecretsProvider:update<"EEexternalSecretsProvider:readexternalSecretsProvider:read@!IIexternalSecretsProvider:createexternalSecretsProvider:create< EEexternalSecretsProvider:syncexternalSecretsProvider:sync%%credential:*credential:*"++credential:listcredential:list&//credential:deletecredential:delete&//credential:updatecredential:update"++credential:readcredential:read&//credential:createcredential:create"++credential:movecredential:move4==credential:shareGloballycredential:shareGlobally$--credential:sharecredential:share(11communityPackage:*communityPackage:*2;;communityPackage:managecommunityPackage:manage.77communityPackage:listcommunityPackage:list2;;communityPackage:updatecommunityPackage:update8AAcommunityPackage:uninstallcommunityPackage:uninstall4==communityPackage:installcommunityPackage:install##community:*community:*(11community:registercommunity:registerbanner:*banner:* ))banner:dismissbanner:dismiss ##auditLogs:*auditLogs:*$ --auditLogs:manageauditLogs:manage" ++annotationTag:*annotationTag:*( 11annotationTag:listannotationTag:list,55annotationTag:deleteannotationTag:delete,55annotationTag:updateannotationTag:update(11annotationTag:readannotationTag:readQ57UannotationTag:createCreate Annotation TagAllows creating new annotation tags.''aiAssistant:*aiAssistant:*G1+QaiAssistant:manageManage AI UsageAllows managing AI Usage settings.F11Iworkflow:unpublishUnpublish WorkflowAllows unpublishing workflows.@--Eworkflow:publishPublish WorkflowAllows publishing workflows. Sn<zT$ l H $  n R 6 i B  Z ) z Y < x_N'U,W. Ob$2--execution:revealexecution:revealB1KKworkflow:updateRedactionSettingworkflow:updateRedactionSettingJ011Qcredential:unshareUnshare CredentialAllows removing credential shares.D/--Mworkflow:unshareUnshare WorkflowAllows removing workflow shares..**,-55credentialResolver:*credentialResolver:*2,;;credentialResolver:listcredentialResolver:list6+??credentialResolver:deletecredentialResolver:delete6*??credentialResolver:updatecredentialResolver:update2);;credentialResolver:readcredentialResolver:read6(??credentialResolver:createcredentialResolver:create'apiKey:*apiKey:*&''apiKey:manageapiKey:manage&%//breakingChanges:*breakingChanges:*,$55breakingChanges:listbreakingChanges:list #))chatHubAgent:*chatHubAgent:*&"//chatHubAgent:listchatHubAgent:list*!33chatHubAgent:deletechatHubAgent:delete* 33chatHubAgent:updatechatHubAgent:update&//chatHubAgent:readchatHubAgent:read*33chatHubAgent:createchatHubAgent:createchatHub:*chatHub:*"++chatHub:messagechatHub:message ))chatHub:managechatHub:manage##mcpApiKey:*mcpApiKey:*$--mcpApiKey:rotatemcpApiKey:rotate$--mcpApiKey:createmcpApiKey:createmcp:*mcp:*mcp:oauthmcp:oauth!!mcp:managemcp:managerole:*role:*##role:managerole:manage ))workflowTags:*workflowTags:*&//workflowTags:listworkflowTags:list*33workflowTags:updateworkflowTags:update##execution:*execution:*''execution:getexecution:get ))execution:listexecution:list" ++execution:retryexecution:retry ))execution:readexecution:read$ --execution:deleteexecution:delete ##dataTable:*dataTable:*.77dataTable:listProjectdataTable:listProject(11dataTable:writeRowdataTable:writeRow&//dataTable:readRowdataTable:readRow ))dataTable:listdataTable:list$--dataTable:deletedataTable:delete$--dataTable:updatedataTable:update ))dataTable:readdataTable:read$--dataTable:createdataTable:create ))provisioning:*provisioning:**33provisioning:manageprovisioning:manage~oidc:*oidc:*}##oidc:manageoidc:manage|!!insights:*insights:*{''insights:listinsights:listzfolder:*folder:*y##folder:movefolder:movex##folder:listfolder:listw''folder:deletefolder:deletev''folder:updatefolder:updateu##folder:readfolder:readt''folder:createfolder:creates!!workflow:*workflow:*r''workflow:listworkflow:list"q++workflow:deleteworkflow:delete"p++workflow:updateworkflow:updateo''workflow:readworkflow:read"n++workflow:createworkflow:create*m33workflow:deactivateworkflow:deactivate&l//workflow:activateworkflow:activatek''workflow:moveworkflow:move.j77workflow:execute-chatworkflow:execute-chat$i--workflow:executeworkflow:execute h))workflow:shareworkflow:shareg''workersView:*workersView:*(f11workersView:manageworkersView:manage&e//projectVariable:*projectVariable:*,d55projectVariable:listprojectVariable:list0c99projectVariable:deleteprojectVariable:delete0b99projectVariable:updateprojectVariable:update,a55projectVariable:readprojectVariable:read0`99projectVariable:createprojectVariable:create lQoJ3|cUc v4XCA%w[ M r ^ o 6ZF0 h  4EXl 6 K c ,9) ? J Z  , l} H g V ze{p - 8  p  a 6 ) T Emx Y G3<NKlZ)1credential:unshare-execution:reveal*5credentialResolver:*;credentialResolver:list?credentialResolver:delete?credentialResolver:update;credentialResolver:read?credentialResolver:create apiKey:*'apiKey:manage/breakingChanges:*5breakingChanges:list)chatHubAgent:*/chatHubAgent:list3chatHubAgent:delete3chatHubAgent:update/chatHubAgent:read3chatHubAgent:createchatHub:*+chatHub:message)chatHub:managep#execution:*'execution:get)execution:list+execution:retry)execution:read-execution:delete#dataTable:*7dataTable:listProject1dataTable:writeRow/dataTable:readRow)dataTable:list-dataTable:delete-dataTable:update)dataTable:read-dataTable:create 7eventBusDestination:*/=eventBusDestination:list.AeventBusDestination:delete-AeventBusDestination:update,=eventBusDestination:read+AeventBusDestination:create*=eventBusDestination:test)-externalSecret:*(3externalSecret:list'?externalSecretsProvider:*& EexternalSecretsProvider:list%"IexternalSecretsProvider:delete$# EexternalSecretsProvider:read""IexternalSecretsProvider:create! EexternalSecretsProvider:sync %credential:*+credential:list/credential:delete/credential:update+credential:read/credential:create+credential:move=credential:shareGlobally-credential:share1communityPackage:*;communityPackage:manage7communityPackage:list;communityPackage:updateAcommunityPackage:uninstall=communityPackage:install#community:*1community:register banner:*)banner:dismiss #auditLogs:* -auditLogs:manage +annotationTag:* 1annotationTag:list 5annotationTag:delete5annotationTag:update1annotationTag:read5annotationTag:create'aiAssistant:*1aiAssistant:manage+ `~laQC5"uaJ3% ~ e L 1   k W > '   l P B 4  u f P < $  m W C  3workflowTags:update/workflowTags:list)workflowTags:*$Kworkflow:updateRedactionSetting+workflow:updatep-workflow:unshare1workflow:unpublish)workflow:shareh'workflow:reado- workflow:publish'workflow:movek'workflow:listr7workflow:execute-chatj-workflow:executei+workflow:deleteq3workflow:deactivatem+workflow:createn/workflow:activatel!workflow:*s1workersView:managef'workersView:*g+variable:update\'variable:read['variable:list^+variable:delete]+variable:createZ!variable:*_#user:updateV1user:resetPasswordP user:readU user:listX;user:generateInviteLinkS+user:enforceMfaR#user:deleteW#user:createT+user:changeRoleQ user:*Y!tag:updateL tag:readK tag:listN!tag:deleteM!tag:createJ tag:*O1sourceControl:pushG1sourceControl:pullF5sourceControl:manageH+sourceControl:*I;securitySettings:manageD1securitySettings:*E9securityAudit:generateB+securityAudit:*C#saml:manage@ saml:*A#role:manage role:*3provisioning:manage)provisioning:*9projectVariable:updateb5projectVariable:reada5projectVariable:listd9projectVariable:deletec9projectVariable:create`/projectVariable:*e)project:update<%project:read;%project:list>)project:delete=)project:create: project:*?1orchestration:read71orchestration:list8+orchestration:*9#oidc:manage} oidc:*~-mcpApiKey:rotate-mcpApiKey:create#mcpApiKey:*mcp:oauth!mcp:manage mcp:*3logStreaming:manage5)logStreaming:*6)license:manage3 license:*4 ldap:sync0#ldap:manage1 ldap:*2'insights:list{!insights:*|'folder:updatev#folder:readu#folder:movey#folder:listx'folder:deletew'folder:createt folder:*zTR0PIN]Mp*S*UL&%7global:ownerdataTable:listProject'Q-71project:personalOwnerdataTable:writeRowGO!')project:admindataTable:read*K$%1global:adminsourceControl:pull  y Nl; * %333Etabletest_case_executiontest_case_executionXCREATE TABLE "test_case_execution" ("id" varchar(36) PRIMARY KEY NOT NULL, "testRunId" varchar(36) NOT NULL, "pastExecutionId" integer, "executionId" integer, "evaluationExecutionId" integer, "status" varchar NOT NULL, "runAt" datetime(3), "completedAt" datetime(3), "errorCode" varchar, "errorDetails" text, "metrics" text, "createdAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "updatedAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "inputs" text, "outputs" text, CONSTRAINT "FK_dfbe194e3ebdfe49a87bc4692ca" FOREIGN KEY ("evaluationExecutionId") REFERENCES "execution_entity" ("id") ON DELETE SET NULL ON UPDATE NO ACTION, CONSTRAINT "FK_e48965fac35d0f5b9e7f51d8c44" FOREIGN KEY ("executionId") REFERENCES "execution_entity" ("id") ON DELETE SET NULL ON UPDATE NO ACTION, CONSTRAINT "FK_258d954733841d51edd826a562b" FOREIGN KEY ("pastExecutionId") REFERENCES "execution_entity" ("id") ON DELETE SET NULL ON UPDATE NO ACTION, CONSTRAINT "FK_8e4b4774db42f1e6dda3452b2af" FOREIGN KEY ("testRunId") REFERENCES "test_run" ("id") ON DELETE CASCADE ON UPDATE NO ACTION)E4Y3indexsqlite_autoindex_test_case_execution_1test_case_executionYg01tableuseruserUCREATE TABLE "user" ("id" varchar PRIMARY KEY, "email" varchar(255), "firstName" varchar(32), "lastName" varchar(32), "password" varchar, "personalizationAnswers" text, "createdAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "updatedAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "settings" text, "disabled" boolean NOT NULL DEFAULT (FALSE), "mfaEnabled" boolean NOT NULL DEFAULT (FALSE), "mfaSecret" text, "mfaRecoveryCodes" text, "lastActiveAt" date, "roleSlug" varchar(128) NOT NULL DEFAULT ('global:member'), CONSTRAINT "UQ_e12875dfb3b1d92d7d7c5377e22" UNIQUE ("email"), CONSTRAINT "FK_eaea92ee7bfb9c1b6cd01505d56" FOREIGN KEY ("roleSlug") REFERENCES "role" ("slug"))'2;indexsqlite_autoindex_user_2userW'1;indexsqlite_autoindex_user_1userV 3/G!indexsqlite_autoindex_role_scope_1role_scopeI<.!!Ctablerole_scoperole_scopeHCREATE TABLE role_scope ( "roleSlug" VARCHAR(128) NOT NULL, "scopeSlug" VARCHAR(128) NOT NULL, CONSTRAINT "PK_role_scope" PRIMARY KEY ("roleSlug", "scopeSlug"), CONSTRAINT "FK_role" FOREIGN KEY ("roleSlug") REFERENCES role ("slug") ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT "FK_scope" FOREIGN KEY ("scopeSlug") REFERENCES "scope" ("slug") ON DELETE CASCADE ON UPDATE CASCADE ))-=indexsqlite_autoindex_scope_1scopeC~,[tablescopescopeBCREATE TABLE "scope" ("slug" varchar(128) PRIMARY KEY NOT NULL, "displayName" text, "description" text)/+Cindexsqlite_autoindex_test_run_1test_runAS5--Ytableproject_relationproject_relationZCREATE TABLE "project_relation" ("projectId" varchar(36) NOT NULL, "userId" varchar NOT NULL, "role" varchar NOT NULL, "createdAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "updatedAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), CONSTRAINT "FK_5f0643f6717905a05164090dde7" FOREIGN KEY ("userId") REFERENCES "user" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, CONSTRAINT "FK_61448d56d61802b5dfde5cdb002" FOREIGN KEY ("projectId") REFERENCES "project" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, CONSTRAINT "FK_c6b99592dc96b0d836d7a21db91" FOREIGN KEY ("role") REFERENCES "role" ("slug"), PRIMARY KEY ("projectId", "userId")) bwQ+lH"vT. u J " a ?   S ) l D # ] 2 X'iI) qU4qL+ Y2 W-dG$%1global:admincredential:unshareG(-1credential:ownercredential:unshareM"%-global:adminexecution:reveal$++credential:usercredential:read'-/credential:ownercredential:update&--credential:ownercredential:share%-+credential:ownercredential:read%-+credential:ownercredential:move'-/credential:ownercredential:deleteg&%5global:adminsourceControl:manage)%;global:adminsecuritySettings:manage(%9global:adminsecurityAudit:generate%#global:adminsaml:manage%#global:adminrole:manage%%3global:adminprovisioning:manage(%9global:adminprojectVariable:update&%5global:adminprojectVariable:read&%5global:adminprojectVariable:list(%9global:adminprojectVariable:delete(%9global:adminprojectVariable:create %)global:adminproject:update%%global:adminproject:read%%global:adminproject:list %)global:adminproject:delete %)global:adminproject:create$%1global:adminorchestration:read%#global:adminoidc:manage"%-global:adminmcpApiKey:rotate"%-global:adminmcpApiKey:create%global:adminmcp:oauth%!global:adminmcp:manage%%3global:adminlogStreaming:manage %)global:adminlicense:manage%global:adminldap:sync%#global:adminldap:manage%'global:admininsights:list%'global:adminfolder:update%#global:adminfolder:read%#global:adminfolder:move%#global:adminfolder:list%'global:adminfolder:delete%'global:adminfolder:create0%Iglobal:adminexternalSecretsProvider:update.%Eglobal:adminexternalSecretsProvider:sync.%Eglobal:adminexternalSecretsProvider:read.%Eglobal:adminexternalSecretsProvider:list0%Iglobal:adminexternalSecretsProvider:delete0%Iglobal:adminexternalSecretsProvider:create%%3global:adminexternalSecret:list,%Aglobal:admineventBusDestination:update*%=global:admineventBusDestination:test*%=global:admineventBusDestination:read*%=global:admineventBusDestination:list,%Aglobal:admineventBusDestination:delete,%Aglobal:admineventBusDestination:create$%1global:admindataTable:writeRow"%-global:admindataTable:update#%/global:admindataTable:readRow %)global:admindataTable:read'%7global:admindataTable:listProject %)global:admindataTable:list"%-global:admindataTable:delete"%-global:admindataTable:create+%?global:admincredentialResolver:update)%;global:admincredentialResolver:read)%;global:admincredentialResolver:list+%?global:admincredentialResolver:delete+%?global:admincredentialResolver:create#%/global:admincredential:update*%=global:admincredential:shareGlobally"%-global:admincredential:share!%+global:admincredential:read!%+global:admincredential:move!%+global:admincredential:list#%/global:admincredential:delete#%/global:admincredential:create)%;global:admincommunityPackage:update,%Aglobal:admincommunityPackage:uninstall'%7global:admincommunityPackage:list*%=global:admincommunityPackage:install$%1global:admincommunity:register%%3global:adminchatHubAgent:update#%/global:adminchatHubAgent:read#%/global:adminchatHubAgent:list%%3global:adminchatHubAgent:delete%%3global:adminchatHubAgent:create!%+global:adminchatHub:message %)global:adminchatHub:manage&%5global:adminbreakingChanges:list %)global:adminbanner:dismiss"%-global:adminauditLogs:manage%'global:adminapiKey:manage%%5global:adminannotationTag:update#%1global:adminannotationTag:read~#%1global:adminannotationTag:list}%%5global:adminannotationTag:delete|%%5global:adminannotationTag:create{#%1global:adminaiAssistant:managez iey\A& x\@yW2 c @   l C  | V 0  v Q , e n J & tS0 vW5dAX/ d:sJ gl*';global:membercredentialResolver:list1%Kglobal:adminworkflow:updateRedactionSetting$%1global:adminworkflow:unpublish!%+global:adminuser:changeRole%!global:admintag:update%global:admintag:read%global:admintag:list%!global:admintag:delete%!global:admintag:create$%1global:adminsourceControl:push%)global:ownerdataTable:list&!%-global:ownerdataTable:delete%!%-global:ownerdataTable:create$*%?global:ownercredentialResolver:update#(%;global:ownercredentialResolver:read"(%;global:ownercredentialResolver:list!*%?global:ownercredentialResolver:delete *%?global:ownercredentialResolver:create"%/global:ownercredential:update$%1global:ownercredential:unshare)%=global:ownercredential:shareGlobally!%-global:ownercredential:share %+global:ownercredential:read %+global:ownercredential:move %+global:ownercredential:list"%/global:ownercredential:delete"%/global:ownercredential:create(%;global:ownercommunityPackage:update+%Aglobal:ownercommunityPackage:uninstall&%7global:ownercommunityPackage:list)%=global:ownercommunityPackage:install#%1global:ownercommunity:register$%3global:ownerchatHubAgent:update"%/global:ownerchatHubAgent:read"%/global:ownerchatHubAgent:list$%3global:ownerchatHubAgent:delete$%3global:ownerchatHubAgent:create %+global:ownerchatHub:message %)global:ownerchatHub:manage %%5global:ownerbreakingChanges:list %)global:ownerbanner:dismiss !%-global:ownerauditLogs:manage%'global:ownerapiKey:manage%%5global:ownerannotationTag:update#%1global:ownerannotationTag:read#%1global:ownerannotationTag:list%%5global:ownerannotationTag:delete%%5global:ownerannotationTag:create"%1 global:owneraiAssistant:manage ''global:membervariable:read ''global:membervariable:list 'global:memberuser:list '!global:membertag:update'global:membertag:read'global:membertag:list'!global:membertag:create#'-global:membermcpApiKey:rotate#'-global:membermcpApiKey:create'global:membermcp:oauth+'=global:membereventBusDestination:test+'=global:membereventBusDestination:list!')global:memberdataTable:list&'3global:memberchatHubAgent:update$'/global:memberchatHubAgent:read$'/global:memberchatHubAgent:list&'3global:memberchatHubAgent:delete&'3global:memberchatHubAgent:create"'+global:memberchatHub:message ''global:memberapiKey:manage''5global:memberannotationTag:update%'1global:memberannotationTag:read%'1global:memberannotationTag:list''5global:memberannotationTag:delete''5global:memberannotationTag:create(+3global:chatUserchatHubAgent:update&+/global:chatUserchatHubAgent:read&+/global:chatUserchatHubAgent:list(+3global:chatUserchatHubAgent:delete(+3global:chatUserchatHubAgent:create $++global:chatUserchatHub:message !%+global:adminworkflow:update"%-global:adminworkflow:unshare %)global:adminworkflow:share%'global:adminworkflow:read"%-global:adminworkflow:publish%'global:adminworkflow:move%'global:adminworkflow:list'%7global:adminworkflow:execute-chat"%-global:adminworkflow:execute!%+global:adminworkflow:delete!%+global:adminworkflow:create$%1global:adminworkersView:manage!%+global:adminvariable:update%'global:adminvariable:read%'global:adminvariable:list!%+global:adminvariable:delete!%+global:adminvariable:create%#global:adminuser:update$%1global:adminuser:resetPassword%global:adminuser:read%global:adminuser:list)%;global:adminuser:generateInviteLink!%+global:adminuser:enforceMfa%#global:adminuser:delete%#global:adminuser:create ppM( fB j D  m M ,  e =  m K *  _ 6 \/{_C%sY8}`A^B&lQ6qI/xZ:p%+global:ownerworkflow:create!o%1global:ownerworkersView:managen%+global:ownervariable:updatem%'global:ownervariable:readl%'global:ownervariable:listk%+global:ownervariable:deletej%+global:ownervariable:createi%#global:owneruser:update!h%1global:owneruser:resetPasswordg%global:owneruser:readf%global:owneruser:list&e%;global:owneruser:generateInviteLinkd%+global:owneruser:enforceMfac%#global:owneruser:deleteb%#global:owneruser:createa%+global:owneruser:changeRole`%!global:ownertag:update_%global:ownertag:read^%global:ownertag:list]%!global:ownertag:delete\%!global:ownertag:create![%1global:ownersourceControl:push!Z%1global:ownersourceControl:pull#Y%5global:ownersourceControl:manage&X%;global:ownersecuritySettings:manage%W%9global:ownersecurityAudit:generateV%#global:ownersaml:manageU%#global:ownerrole:manage"T%3global:ownerprovisioning:manage%S%9global:ownerprojectVariable:update#R%5global:ownerprojectVariable:read#Q%5global:ownerprojectVariable:list%P%9global:ownerprojectVariable:delete%O%9global:ownerprojectVariable:createN%)global:ownerproject:updateM%%global:ownerproject:readL%%global:ownerproject:listK%)global:ownerproject:deleteJ%)global:ownerproject:create!I%1global:ownerorchestration:readH%#global:owneroidc:manageG%-global:ownermcpApiKey:rotateF%-global:ownermcpApiKey:createE%global:ownermcp:oauthD%!global:ownermcp:manage"C%3global:ownerlogStreaming:manageB%)global:ownerlicense:manageA%global:ownerldap:sync@%#global:ownerldap:manage?%'global:ownerinsights:list>%'global:ownerfolder:update=%#global:ownerfolder:read<%#global:ownerfolder:move;%#global:ownerfolder:list:%'global:ownerfolder:delete9%'global:ownerfolder:create-8%Iglobal:ownerexternalSecretsProvider:update+7%Eglobal:ownerexternalSecretsProvider:sync+6%Eglobal:ownerexternalSecretsProvider:read+5%Eglobal:ownerexternalSecretsProvider:list-4%Iglobal:ownerexternalSecretsProvider:delete-3%Iglobal:ownerexternalSecretsProvider:create"2%3global:ownerexternalSecret:list)1%Aglobal:ownereventBusDestination:update'0%=global:ownereventBusDestination:test'/%=global:ownereventBusDestination:read'.%=global:ownereventBusDestination:list)-%Aglobal:ownereventBusDestination:delete),%Aglobal:ownereventBusDestination:create!+%1global:ownerdataTable:writeRow*%-global:ownerdataTable:update )%/global:ownerdataTable:readRow(%)global:ownerdataTable:read$'%7global:ownerdataTable:listProject&%)global:ownerdataTable:list%%-global:ownerdataTable:delete$%-global:ownerdataTable:create(#%?global:ownercredentialResolver:update&"%;global:ownercredentialResolver:read&!%;global:ownercredentialResolver:list( %?global:ownercredentialResolver:delete(%?global:ownercredentialResolver:create %/global:ownercredential:update'%=global:ownercredential:shareGlobally%-global:ownercredential:share%+global:ownercredential:read%+global:ownercredential:move%+global:ownercredential:list %/global:ownercredential:delete %/global:ownercredential:create&%;global:ownercommunityPackage:update)%Aglobal:ownercommunityPackage:uninstall$%7global:ownercommunityPackage:list'%=global:ownercommunityPackage:install!%1global:ownercommunity:register"%3global:ownerchatHubAgent:update %/global:ownerchatHubAgent:read %/global:ownerchatHubAgent:list"%3global:ownerchatHubAgent:delete" %3global:ownerchatHubAgent:create %+global:ownerchatHub:message %)global:ownerchatHub:manage# %5global:ownerbreakingChanges:list %)global:ownerbanner:dismiss%-global:ownerauditLogs:manage%'global:ownerapiKey:manage#%5global:ownerannotationTag:update!%1global:ownerannotationTag:read!%1global:ownerannotationTag:list#%5global:ownerannotationTag:delete#%5global:ownerannotationTag:create!%1global:owneraiAssistant:manage m{]<rO, ` ?  f <  z Y 8  } R ) q J * i?j: aB%uU0tT4b<d>nM0]%+global:adminuser:enforceMfa\%#global:adminuser:delete[%#global:adminuser:createZ%+global:adminuser:changeRoleY%!global:admintag:updateX%global:admintag:readW%global:admintag:listV%!global:admintag:deleteU%!global:admintag:create!T%1global:adminsourceControl:push!S%1global:adminsourceControl:pull#R%5global:adminsourceControl:manage&Q%;global:adminsecuritySettings:manage%P%9global:adminsecurityAudit:generateO%#global:adminsaml:manageN%#global:adminrole:manage"M%3global:adminprovisioning:manage%L%9global:adminprojectVariable:update#K%5global:adminprojectVariable:read#J%5global:adminprojectVariable:list%I%9global:adminprojectVariable:delete%H%9global:adminprojectVariable:createG%)global:adminproject:updateF%%global:adminproject:readE%%global:adminproject:listD%)global:adminproject:deleteC%)global:adminproject:create!B%1global:adminorchestration:readA%#global:adminoidc:manage@%-global:adminmcpApiKey:rotate?%-global:adminmcpApiKey:create>%global:adminmcp:oauth=%!global:adminmcp:manage"<%3global:adminlogStreaming:manage;%)global:adminlicense:manage:%global:adminldap:sync9%#global:adminldap:manage8%'global:admininsights:list7%'global:adminfolder:update6%#global:adminfolder:read5%#global:adminfolder:move4%#global:adminfolder:list3%'global:adminfolder:delete2%'global:adminfolder:create-1%Iglobal:adminexternalSecretsProvider:update+0%Eglobal:adminexternalSecretsProvider:sync+/%Eglobal:adminexternalSecretsProvider:read+.%Eglobal:adminexternalSecretsProvider:list--%Iglobal:adminexternalSecretsProvider:delete-,%Iglobal:adminexternalSecretsProvider:create"+%3global:adminexternalSecret:list)*%Aglobal:admineventBusDestination:update')%=global:admineventBusDestination:test'(%=global:admineventBusDestination:read''%=global:admineventBusDestination:list)&%Aglobal:admineventBusDestination:delete)%%Aglobal:admineventBusDestination:create!$%1global:admindataTable:writeRow#%-global:admindataTable:update "%/global:admindataTable:readRow!%)global:admindataTable:read$ %7global:admindataTable:listProject%)global:admindataTable:list%-global:admindataTable:delete%-global:admindataTable:create(%?global:admincredentialResolver:update&%;global:admincredentialResolver:read&%;global:admincredentialResolver:list(%?global:admincredentialResolver:delete(%?global:admincredentialResolver:create %/global:admincredential:update'%=global:admincredential:shareGlobally%-global:admincredential:share%+global:admincredential:read%+global:admincredential:move%+global:admincredential:list %/global:admincredential:delete %/global:admincredential:create&%;global:admincommunityPackage:update)%Aglobal:admincommunityPackage:uninstall$ %7global:admincommunityPackage:list' %=global:admincommunityPackage:install! %1global:admincommunity:register" %3global:adminchatHubAgent:update %/global:adminchatHubAgent:read %/global:adminchatHubAgent:list"%3global:adminchatHubAgent:delete"%3global:adminchatHubAgent:create%+global:adminchatHub:message%)global:adminchatHub:manage#%5global:adminbreakingChanges:list%)global:adminbanner:dismiss%-global:adminauditLogs:manage%'global:adminapiKey:manage#%5global:adminannotationTag:update!~%1global:adminannotationTag:read!}%1global:adminannotationTag:list#|%5global:adminannotationTag:delete#{%5global:adminannotationTag:create!z%1global:adminaiAssistant:managey%+global:ownerworkflow:updatex%)global:ownerworkflow:sharew%'global:ownerworkflow:readv%-global:ownerworkflow:publishu%'global:ownerworkflow:movet%'global:ownerworkflow:list$s%7global:ownerworkflow:execute-chatr%-global:ownerworkflow:executeq%+global:ownerworkflow:delete SagCmANdE& gL*iK+ g B %  m I -  f E   c D %  | U 6 0pKfB~v0S/tS$%1global:ownerworkflow:unpublish%)global:ownerdataTable:read("%-global:ownerworkflow:unsharet1%Kglobal:ownerworkflow:updateRedactionSetting$%3global:ownerexternalSecret:list2"%-global:ownerexecution:reveal+%Aglobal:ownereventBusDestination:update1)%=global:ownereventBusDestination:test0)%=global:ownereventBusDestination:read/)%=global:ownereventBusDestination:list.+%Aglobal:ownereventBusDestination:delete-+%Aglobal:ownereventBusDestination:create,#%1global:ownerdataTable:writeRow+!%-global:ownerdataTable:update*"%/global:ownerdataTable:readRow)('7project:admindataTable:listProject#'-project:admindataTable:delete#'-project:admindataTable:create$'/project:admincredential:update#'-project:admincredential:share"'+project:admincredential:read"'+project:admincredential:move"'+project:admincredential:list%#global:ownerfolder:read=%#global:ownerfolder:move<%#global:ownerfolder:list;%'global:ownerfolder:delete:%'global:ownerfolder:create9/%Iglobal:ownerexternalSecretsProvider:update8-%Eglobal:ownerexternalSecretsProvider:sync7-%Eglobal:ownerexternalSecretsProvider:read6-%Eglobal:ownerexternalSecretsProvider:list5/%Iglobal:ownerexternalSecretsProvider:delete4/%Iglobal:ownerexternalSecretsProvider:create3%'1project:admincredential:unshare$%'global:ownerinsights:list?%'global:ownerfolder:update>E$'/project:admincredential:delete$'/project:admincredential:create %+global:ownerworkflow:updatey%)global:ownerworkflow:sharex%'global:ownerworkflow:readw!%-global:ownerworkflow:publishv%'global:ownerworkflow:moveu%'global:ownerworkflow:listt&%7global:ownerworkflow:execute-chats!%-global:ownerworkflow:executer %+global:ownerworkflow:deleteq %+global:ownerworkflow:createp#%1global:ownerworkersView:manageo %+global:ownervariable:updaten%'global:ownervariable:readm%'global:ownervariable:listl %+global:ownervariable:deletek %+global:ownervariable:createj%#global:owneruser:updatei#%1global:owneruser:resetPasswordh%global:owneruser:readg%global:owneruser:listf(%;global:owneruser:generateInviteLinke %+global:owneruser:enforceMfad%#global:owneruser:deletec%#global:owneruser:createb %+global:owneruser:changeRolea%!global:ownertag:update`%global:ownertag:read_%global:ownertag:list^%!global:ownertag:delete]%!global:ownertag:create\#%1global:ownersourceControl:push[#%1global:ownersourceControl:pullZ%%5global:ownersourceControl:manageY(%;global:ownersecuritySettings:manageX'%9global:ownersecurityAudit:generateW%#global:ownersaml:manageV%#global:ownerrole:manageU$%3global:ownerprovisioning:manageT'%9global:ownerprojectVariable:updateS%%5global:ownerprojectVariable:readR%%5global:ownerprojectVariable:listQ'%9global:ownerprojectVariable:deleteP'%9global:ownerprojectVariable:createO%)global:ownerproject:updateN%%global:ownerproject:readM%%global:ownerproject:listL%)global:ownerproject:deleteK%)global:ownerproject:createJ#%1global:ownerorchestration:readI%#global:owneroidc:manageH!%-global:ownermcpApiKey:rotateG!%-global:ownermcpApiKey:createF%global:ownermcp:oauthE%!global:ownermcp:manageD$%3global:ownerlogStreaming:manageC%)global:ownerlicense:manageB%global:ownerldap:syncA%#global:ownerldap:manage@ l}`?zY7 q P )  q O )  t I   i L 0  | V 0 |Z7`=~^=e>aA!k?j?d7%I7'project:personalOwnerfolder:delete%H7'project:personalOwnerfolder:create*G71project:personalOwnerdataTable:writeRow(F7-project:personalOwnerdataTable:update)E7/project:personalOwnerdataTable:readRow&D7)project:personalOwnerdataTable:read-C77project:personalOwnerdataTable:listProject(B7-project:personalOwnerdataTable:delete(A7-project:personalOwnerdataTable:create)@7/project:personalOwnercredential:update(?7-project:personalOwnercredential:share'>7+project:personalOwnercredential:read'=7+project:personalOwnercredential:move'<7+project:personalOwnercredential:list);7/project:personalOwnercredential:delete):7/project:personalOwnercredential:create9'+project:adminworkflow:update"8'1project:adminworkflow:unpublish7''project:adminworkflow:read 6'-project:adminworkflow:publish5''project:adminworkflow:move4''project:adminworkflow:list%3'7project:adminworkflow:execute-chat 2'-project:adminworkflow:execute1'+project:adminworkflow:delete0'+project:adminworkflow:create"/'1project:adminsourceControl:push&.'9project:adminprojectVariable:update$-'5project:adminprojectVariable:read$,'5project:adminprojectVariable:list&+'9project:adminprojectVariable:delete&*'9project:adminprojectVariable:create)')project:adminproject:update('%project:adminproject:read''%project:adminproject:list&')project:adminproject:delete%''project:adminfolder:update$'#project:adminfolder:read#'#project:adminfolder:move"'#project:adminfolder:list!''project:adminfolder:delete ''project:adminfolder:create"'1project:admindataTable:writeRow '-project:admindataTable:update!'/project:admindataTable:readRow')project:admindataTable:read%'7project:admindataTable:listProject '-project:admindataTable:delete '-project:admindataTable:create!'/project:admincredential:update '-project:admincredential:share'+project:admincredential:read'+project:admincredential:move'+project:admincredential:list!'/project:admincredential:delete!'/project:admincredential:create%+3global:chatUserchatHubAgent:update#+/global:chatUserchatHubAgent:read#+/global:chatUserchatHubAgent:list%+3global:chatUserchatHubAgent:delete% +3global:chatUserchatHubAgent:create! ++global:chatUserchatHub:message ''global:membervariable:read ''global:membervariable:list 'global:memberuser:list'!global:membertag:update'global:membertag:read'global:membertag:list'!global:membertag:create '-global:membermcpApiKey:rotate '-global:membermcpApiKey:create'global:membermcp:oauth('=global:membereventBusDestination:test('=global:membereventBusDestination:list')global:memberdataTable:list#~'3global:memberchatHubAgent:update!}'/global:memberchatHubAgent:read!|'/global:memberchatHubAgent:list#{'3global:memberchatHubAgent:delete#z'3global:memberchatHubAgent:createy'+global:memberchatHub:messagex''global:memberapiKey:manage$w'5global:memberannotationTag:update"v'1global:memberannotationTag:read"u'1global:memberannotationTag:list$t'5global:memberannotationTag:delete$s'5global:memberannotationTag:creater%+global:adminworkflow:updateq%)global:adminworkflow:sharep%'global:adminworkflow:reado%-global:adminworkflow:publishn%'global:adminworkflow:movem%'global:adminworkflow:list$l%7global:adminworkflow:execute-chatk%-global:adminworkflow:executej%+global:adminworkflow:deletei%+global:adminworkflow:create!h%1global:adminworkersView:manageg%+global:adminvariable:updatef%'global:adminvariable:reade%'global:adminvariable:listd%+global:adminvariable:deletec%+global:adminvariable:createb%#global:adminuser:update!a%1global:adminuser:resetPassword`%global:adminuser:read_%global:adminuser:list&^%;global:adminuser:generateInviteLink $O J&Qa@h@^5u  jE a?yN#^9mF" U * { O #o i G % d A   k I & +-7project:chatUserworkflow:execute-chat$)-project:editorworkflow:executeu#)+project:editorworkflow:deletet#)+project:editorworkflow:creates*)9project:editorprojectVariable:updater()5project:editorprojectVariable:readq()5project:editorprojectVariable:listp*)9project:editorprojectVariable:deleteo*)9project:editorprojectVariable:createn )%project:editorproject:readm )%project:editorproject:listl!)'project:editorfolder:updatek)#project:editorfolder:readj)#project:editorfolder:listi!)'project:editorfolder:deleteh!)'project:editorfolder:createg&)1project:editordataTable:writeRowf$)-project:editordataTable:updatee%)/project:editordataTable:readRowd"))project:editordataTable:readc))7project:editordataTable:listProjectb$)-project:editordataTable:deletea$)-project:editordataTable:create`%)/project:editorcredential:update_#)+project:editorcredential:read^#)+project:editorcredential:list]%)/project:editorcredential:delete\%)/project:editorcredential:create[ ('7project:adminworkflow:execute-chat3#'-project:adminworkflow:execute2"'+project:adminworkflow:delete1"'+project:adminworkflow:create0%'1project:adminsourceControl:push/)'9project:adminprojectVariable:update.''5project:adminprojectVariable:read-''5project:adminprojectVariable:list,)'9project:adminprojectVariable:delete+)'9project:adminprojectVariable:create*!')project:adminproject:update)'%project:adminproject:read('%project:adminproject:list'!')project:adminproject:delete& ''project:adminfolder:update%'#project:adminfolder:read$'#project:adminfolder:move#'#project:adminfolder:list" ''project:adminfolder:delete! ''project:adminfolder:create %'1project:admindataTable:writeRow#'-project:admindataTable:update$'/project:admindataTable:readRow+7-project:personalOwnerdataTable:updateF,7/project:personalOwnerdataTable:readRowE)7)project:personalOwnerdataTable:readD077project:personalOwnerdataTable:listProjectC+7-project:personalOwnerdataTable:deleteB+7-project:personalOwnerdataTable:createA,7/project:personalOwnercredential:update@+7-project:personalOwnercredential:share?*7+project:personalOwnercredential:read>*7+project:personalOwnercredential:move=*7+project:personalOwnercredential:list<,7/project:personalOwnercredential:delete;,7/project:personalOwnercredential:create:"'+project:adminworkflow:update9-71project:personalOwnercredential:unshare2'Kproject:adminworkflow:updateRedactionSetting#'-project:adminexecution:reveal%'1project:adminworkflow:unpublish8 ''project:adminworkflow:read7#'-project:adminworkflow:publish6 ''project:adminworkflow:move5 ''project:adminworkflow:list4#)+project:editorworkflow:update{&)1project:editorworkflow:unpublishz!)'project:editorworkflow:ready$)-project:editorworkflow:publishx!)'project:editorworkflow:listw))7project:editorworkflow:execute-chatv gf?iA p F ! m I n M .  Z 2 v M , {X/ jB]8[2a<^<a= kH*071project:personalOwnercredential:unshare//'Kproject:adminworkflow:updateRedactionSetting .'-project:adminexecution:reveal'-';global:membercredentialResolver:list.,%Kglobal:adminworkflow:updateRedactionSetting!+%1global:adminworkflow:unpublish*%-global:adminexecution:reveal.)%Kglobal:ownerworkflow:updateRedactionSetting!(%1global:ownerworkflow:unpublish'%-global:ownerexecution:reveal%&-1credential:ownercredential:unshare"%'1project:admincredential:unshare!$%1global:admincredential:unshare!#%1global:ownercredential:unshare!")-workflow:ownerworkflow:unshare!%-global:adminworkflow:unshare %-global:ownerworkflow:unshare!++workflow:editorworkflow:update$+1workflow:editorworkflow:unpublish+'workflow:editorworkflow:read"+-workflow:editorworkflow:publish'+7workflow:editorworkflow:execute-chat"+-workflow:editorworkflow:execute )+workflow:ownerworkflow:update#)1workflow:ownerworkflow:unpublish))workflow:ownerworkflow:share)'workflow:ownerworkflow:read!)-workflow:ownerworkflow:publish)'workflow:ownerworkflow:move&)7workflow:ownerworkflow:execute-chat!)-workflow:ownerworkflow:execute )+workflow:ownerworkflow:delete!++credential:usercredential:read$-/credential:ownercredential:update#--credential:ownercredential:share" -+credential:ownercredential:read" -+credential:ownercredential:move$ -/credential:ownercredential:delete( -7project:chatUserworkflow:execute-chat )'project:viewerworkflow:read)'project:viewerworkflow:list&)7project:viewerworkflow:execute-chat%)5project:viewerprojectVariable:read%)5project:viewerprojectVariable:list)%project:viewerproject:read)%project:viewerproject:list)#project:viewerfolder:read)#project:viewerfolder:list")/project:viewerdataTable:readRow))project:viewerdataTable:read&~)7project:viewerdataTable:listProject })+project:viewercredential:read |)+project:viewercredential:list {)+project:editorworkflow:update#z)1project:editorworkflow:unpublishy)'project:editorworkflow:read!x)-project:editorworkflow:publishw)'project:editorworkflow:list&v)7project:editorworkflow:execute-chat!u)-project:editorworkflow:execute t)+project:editorworkflow:delete s)+project:editorworkflow:create'r)9project:editorprojectVariable:update%q)5project:editorprojectVariable:read%p)5project:editorprojectVariable:list'o)9project:editorprojectVariable:delete'n)9project:editorprojectVariable:createm)%project:editorproject:readl)%project:editorproject:listk)'project:editorfolder:updatej)#project:editorfolder:readi)#project:editorfolder:listh)'project:editorfolder:deleteg)'project:editorfolder:create#f)1project:editordataTable:writeRow!e)-project:editordataTable:update"d)/project:editordataTable:readRowc))project:editordataTable:read&b)7project:editordataTable:listProject!a)-project:editordataTable:delete!`)-project:editordataTable:create"_)/project:editorcredential:update ^)+project:editorcredential:read ])+project:editorcredential:list"\)/project:editorcredential:delete"[)/project:editorcredential:create'Z7+project:personalOwnerworkflow:update*Y71project:personalOwnerworkflow:unpublish&X7)project:personalOwnerworkflow:share%W7'project:personalOwnerworkflow:read(V7-project:personalOwnerworkflow:publish%U7'project:personalOwnerworkflow:move%T7'project:personalOwnerworkflow:list-S77project:personalOwnerworkflow:execute-chat(R7-project:personalOwnerworkflow:execute'Q7+project:personalOwnerworkflow:delete'P7+project:personalOwnerworkflow:create$O7%project:personalOwnerproject:read$N7%project:personalOwnerproject:list%M7'project:personalOwnerfolder:update#L7#project:personalOwnerfolder:read#K7#project:personalOwnerfolder:move#J7#project:personalOwnerfolder:list =d`9j> f < 8  q N (  } T *  >v> o L $ j E # @IEsecretsProviderConnection:userexternalSecretsProvider:read@IEsecretsProviderConnection:userexternalSecretsProvider:list7I3secretsProviderConnection:userexternalSecret:listCKIsecretsProviderConnection:ownerexternalSecretsProvider:updateAKEsecretsProviderConnection:ownerexternalSecretsProvider:syncAKEsecretsProviderConnection:ownerexternalSecretsProvider:readAKEsecretsProviderConnection:ownerexternalSecretsProvider:listCKIsecretsProviderConnection:ownerexternalSecretsProvider:delete8K3secretsProviderConnection:ownerexternalSecret:list:7Kproject:personalOwnerworkflow:updateRedactionSetting+7-project:personalOwnerworkflow:unshare+7-project:personalOwnerexecution:reveal#)+workflow:ownerworkflow:update$)-workflow:ownerworkflow:unshare&)1workflow:ownerworkflow:unpublish"))workflow:ownerworkflow:share!)'workflow:ownerworkflow:read$)-workflow:ownerworkflow:publish!)'workflow:ownerworkflow:move))7workflow:ownerworkflow:execute-chat$)-workflow:ownerworkflow:execute#)+workflow:ownerworkflow:delete$++workflow:editorworkflow:update'+1workflow:editorworkflow:unpublish"+'workflow:editorworkflow:read%+-workflow:editorworkflow:publish*+7workflow:editorworkflow:execute-chat%+-workflow:editorworkflow:execute!)'project:viewerworkflow:read!)'project:viewerworkflow:list))7project:viewerworkflow:execute-chat()5project:viewerprojectVariable:read()5project:viewerprojectVariable:list )%project:viewerproject:read )%project:viewerproject:list)#project:viewerfolder:read)#project:viewerfolder:list%)/project:viewerdataTable:readRow"))project:viewerdataTable:read))7project:viewerdataTable:listProject~#)+project:viewercredential:read}#)+project:viewercredential:list|*7+project:personalOwnerworkflow:updateZ-71project:personalOwnerworkflow:unpublishY)7)project:personalOwnerworkflow:shareX(7'project:personalOwnerworkflow:readW+7-project:personalOwnerworkflow:publishV(7'project:personalOwnerworkflow:moveU(7'project:personalOwnerworkflow:listT077project:personalOwnerworkflow:execute-chatS+7-project:personalOwnerworkflow:executeR*7+project:personalOwnerworkflow:deleteQ*7+project:personalOwnerworkflow:createP'7%project:personalOwnerproject:readO'7%project:personalOwnerproject:listN(7'project:personalOwnerfolder:updateM&7#project:personalOwnerfolder:readL&7#project:personalOwnerfolder:moveK&7#project:personalOwnerfolder:listJ(7'project:personalOwnerfolder:deleteI(7'project:personalOwnerfolder:createH 8p8s2 x 8=<IEsecretsProviderConnection:userexternalSecretsProvider:read=;IEsecretsProviderConnection:userexternalSecretsProvider:list4:I3secretsProviderConnection:userexternalSecret:list@9KIsecretsProviderConnection:ownerexternalSecretsProvider:update>8KEsecretsProviderConnection:ownerexternalSecretsProvider:sync>7KEsecretsProviderConnection:ownerexternalSecretsProvider:read>6KEsecretsProviderConnection:ownerexternalSecretsProvider:list@5KIsecretsProviderConnection:ownerexternalSecretsProvider:delete54K3secretsProviderConnection:ownerexternalSecret:list737Kproject:personalOwnerworkflow:updateRedactionSetting(27-project:personalOwnerworkflow:unshare(17-project:personalOwnerexecution:reveal ||U?? ;3;!%3f77e136-dc7a-4d58-8dc6-817cb2b88866rizowansiddique@gmail.comRIZOWANrizowansiddique@gmail.com$2a$10$a5BxANs3UkqwfXY5dKFbse289gvU7SjgGdFLh48DD86ylcOhi0iwC{"version":"v4","personalization_survey_submitted_at":"2026-03-06T04:58:07.143Z","personalization_survey_n8n_version":"2.10.3"}2026-03-06 04:57:50.7442026-03-06 04:58:06{"userActivated":false}2026-03-06global:owner 'U 3f77e136-dc7a-4d58-8dc6-817cb2b88866 ? rizowansiddique@gmail.com   }-U7;;cZz5fzaW49pCUs3C3f77e136-dc7a-4d58-8dc6-817cb2b88866project:personalOwner2026-03-06 04:57:51.0852026-03-06 04:57:51.085 8-U cZz5fzaW49pCUs3C3f77e136-dc7a-4d58-8dc6-817cb2b88866        O n 3F9CAtablevariableF11]tableinsights_by_periodinsights_by_periodlCREATE TABLE "insights_by_period" ("id" integer PRIMARY KEY NOT NULL, "metaId" integer NOT NULL, "type" integer NOT NULL, "value" bigint NOT NULL, "periodUnit" integer NOT NULL, "periodStart" datetime(0) DEFAULT (CURRENT_TIMESTAMP), CONSTRAINT "FK_e8881f2214df046dc2740260fe8" FOREIGN KEY ("metaId") REFERENCES "insights_metadata" ("metaId") ON DELETE CASCADE)oE%%!tableinsights_rawinsights_rawkCREATE TABLE "insights_raw" ("id" integer PRIMARY KEY NOT NULL, "metaId" integer NOT NULL, "type" integer NOT NULL, "value" bigint NOT NULL, "timestamp" datetime(0) NOT NULL DEFAULT (CURRENT_TIMESTAMP), CONSTRAINT "FK_d66d942bc9907488832eb0eed81" FOREIGN KEY ("metaId") REFERENCES "insights_metadata" ("metaId") ON DELETE CASCADE)1DEindexsqlite_autoindex_variables_1variablesj9CAtablevariablesvariablesiCREATE TABLE "variables" ("id" varchar(36) PRIMARY KEY NOT NULL, "key" text NOT NULL, "type" text NOT NULL DEFAULT ('string'), "value" text, "projectId" varchar(36), CONSTRAINT "FK_a0f13eaa709a21b77a3a9721319" FOREIGN KEY ("projectId") REFERENCES "project" ("id") ON DELETE CASCADE)9BM'indexsqlite_autoindex_user_api_keys_3user_api_keysh9AM'indexsqlite_autoindex_user_api_keys_2user_api_keysg9@M'indexsqlite_autoindex_user_api_keys_1user_api_keysf/?''tableuser_api_keysuser_api_keyseCREATE TABLE "user_api_keys" ("id" varchar(36) PRIMARY KEY NOT NULL, "userId" varchar NOT NULL, "label" varchar(100) NOT NULL, "apiKey" varchar NOT NULL, "createdAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "updatedAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "scopes" text, "audience" varchar NOT NULL DEFAULT ('public-api'), CONSTRAINT "UQ_63d7bbae72c767cf162d459fccd" UNIQUE ("userId", "label"), CONSTRAINT "UQ_1ef35bac35d20bdae979d917a36" UNIQUE ("apiKey"), CONSTRAINT "FK_e131705cbbc8fb589889b02d457" FOREIGN KEY ("userId") REFERENCES "user" ("id") ON DELETE CASCADE ON UPDATE NO ACTION)'>;indexsqlite_autoindex_role_1roled]=tablerolerolecCREATE TABLE "role" ("slug" varchar(128) PRIMARY KEY NOT NULL, "displayName" text, "description" text, "roleType" text, "systemRole" boolean NOT NULL DEFAULT (false), "createdAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "updatedAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')))A<U/indexsqlite_autoindex_data_table_column_2data_table_columnaA;U/indexsqlite_autoindex_data_table_column_1data_table_column`X://_tabledata_table_columndata_table_column_CREATE TABLE "data_table_column" ("id" varchar(36) PRIMARY KEY NOT NULL, "name" varchar(128) NOT NULL, "type" varchar(32) NOT NULL, "index" integer NOT NULL, "dataTableId" varchar(36) NOT NULL, "createdAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "updatedAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), CONSTRAINT "UQ_8082ec4890f892f0bc77473a123" UNIQUE ("dataTableId", "name"), CONSTRAINT "FK_930b6e8faaf88294cef23484160" FOREIGN KEY ("dataTableId") REFERENCES "data_table" ("id") ON DELETE CASCADE)39G!indexsqlite_autoindex_data_table_2data_table^38G!indexsqlite_autoindex_data_table_1data_table]7!!Qtabledata_tabledata_table\CREATE TABLE "data_table" ("id" varchar(36) PRIMARY KEY NOT NULL, "name" varchar(128) NOT NULL, "projectId" varchar(36) NOT NULL, "createdAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "updatedAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), CONSTRAINT "UQ_b23096ef747281ac944d28e8b0d" UNIQUE ("projectId", "name"), CONSTRAINT "FK_c2a794257dee48af7c9abf681de" FOREIGN KEY ("projectId") REFERENCES "project" ("id") ON DELETE CASCADE)?6S-indexsqlite_autoindex_project_relation_1project_relation[ hX T  D k +h@IMs? ;;secretsProviderConnection:userSecrets Provider Connection UserRead-only access to use secrets from the connectionsecretsProviderConnection2026-03-25 18:55:27.8612026-03-25 18:55:27.861P KO ? ;;secretsProviderConnection:ownerSecrets Provider Connection OwnerFull control of secrets provider connection settings and secretssecretsProviderConnection2026-03-25 18:55:27.8592026-03-25 18:55:27.859k +++ ;;workflow:editorWorkflow EditorWorkflow Editorworkflow2026-03-06 04:57:51.9992026-03-06 04:57:51.999h ))) ;;workflow:ownerWorkflow OwnerWorkflow Ownerworkflow2026-03-06 04:57:51.9982026-03-06 04:57:51.998m +++! ;;credential:userCredential UserCredential Usercredential2026-03-06 04:57:51.9942026-03-06 04:57:51.994p ---! ;;credential:ownerCredential OwnerCredential Ownercredential2026-03-06 04:57:51.9942026-03-06 04:57:51.994] + ;;global:chatUserChat UserChat Userglobal2026-03-06 04:57:51.9712026-03-06 04:57:51.971% -/ ;;project:chatUserProject Chat UserChat-only access to chatting with workflows that have n8n Chat enabledproject2026-03-06 04:57:51.3992026-03-06 04:57:51.985 )) ;;project:viewerProject ViewerRead-only access to workflows, credentials, and executionsproject2026-03-06 04:57:51.3992026-03-06 04:57:51.985 ))  ;;project:editorProject EditorCreate, edit, and delete workflows, credentials, and executionsproject2026-03-06 04:57:51.3992026-03-06 04:57:51.985  '' ;;project:adminProject AdminFull control of settings, members, workflows, credentials and executionsproject2026-03-06 04:57:51.3992026-03-06 04:57:51.985l7'' ;;project:personalOwnerProject OwnerProject Ownerproject2026-03-06 04:57:51.3992026-03-06 04:57:51.985U' ;;global:memberMemberMemberglobal2026-03-06 04:57:51.3992026-03-06 04:57:51.968R% ;;global:adminAdminAdminglobal2026-03-06 04:57:51.3992026-03-06 04:57:51.968R% ;;global:ownerOwnerOwnerglobal2026-03-06 04:57:51.3992026-03-06 04:57:51.968 =)Rf{"IsecretsProviderConnection:user#KsecretsProviderConnection:owner+workflow:editor )workflow:owner +credential:user -credential:owner +global:chatUser -project:chatUser)project:viewer)project:editor'project:admin7project:personalOwner'global:member%global:admin% global:owner        ;'2026-03-06 05:07:04.450  ;2026-03-06 05:07:04.450 ;`2026-03-06 05:00:12.007  ;2026-03-06 05:00:12.007      | B KF~=|<4>Q++1tableworkflow_entityworkflow_entityCREATE TABLE "workflow_entity" ("id" varchar(36) PRIMARY KEY NOT NULL, "name" varchar(128) NOT NULL, "active" boolean NOT NULL, "nodes" text, "connections" text, "settings" text, "staticData" text, "pinData" text, "versionId" varchar(36) NOT NULL, "triggerCount" integer DEFAULT (0), "meta" text, "parentFolderId" varchar(36), "createdAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "updatedAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "isArchived" boolean NOT NULL DEFAULT (FALSE), "versionCounter" integer NOT NULL DEFAULT (1), "description" text, "activeVersionId" varchar(36), CONSTRAINT "FK_04a4db5906fbc5606c71448d912" FOREIGN KEY ("parentFolderId") REFERENCES "folder" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, CONSTRAINT "FK_08d6c67b7f722b0039d9d5ed620" FOREIGN KEY ("activeVersionId") REFERENCES "workflow_history" ("versionId") ON DELETE RESTRICT)?PS-indexsqlite_autoindex_workflow_history_1workflow_historyw~O--/tableworkflow_historyworkflow_historyvCREATE TABLE "workflow_history" ("versionId" varchar(36) PRIMARY KEY NOT NULL, "workflowId" varchar(36) NOT NULL, "authors" varchar(255) NOT NULL, "createdAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "updatedAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "nodes" text NOT NULL, "connections" text NOT NULL, "name" varchar(128), "autosaved" boolean NOT NULL DEFAULT (false), "description" text, CONSTRAINT "FK_1e31657f5fe46816c34be7c1b4b" FOREIGN KEY ("workflowId") REFERENCES "workflow_entity" ("id") ON DELETE CASCADE ON UPDATE NO ACTION)ENY3indexsqlite_autoindex_oauth_user_consents_1oauth_user_consentsuM33+tableoauth_user_consentsoauth_user_consentstCREATE TABLE "oauth_user_consents" ("id" integer PRIMARY KEY NOT NULL, "userId" varchar NOT NULL, "clientId" varchar NOT NULL, "grantedAt" bigint NOT NULL, CONSTRAINT "UQ_083721d99ce8db4033e2958ebb4" UNIQUE ("userId", "clientId"), CONSTRAINT "FK_a651acea2f6c97f8c4514935486" FOREIGN KEY ("clientId") REFERENCES "oauth_clients" ("id") ON DELETE CASCADE, CONSTRAINT "FK_21e6c3c2d78a097478fae6aaefa" FOREIGN KEY ("userId") REFERENCES "user" ("id") ON DELETE CASCADE)GL[5indexsqlite_autoindex_oauth_refresh_tokens_1oauth_refresh_tokenssdK55ktableoauth_refresh_tokensoauth_refresh_tokensrCREATE TABLE "oauth_refresh_tokens" ("token" varchar(255) PRIMARY KEY NOT NULL, "clientId" varchar NOT NULL, "userId" varchar NOT NULL, "expiresAt" bigint NOT NULL, "createdAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "updatedAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), CONSTRAINT "FK_b388696ce4d8be7ffbe8d3e4b69" FOREIGN KEY ("clientId") REFERENCES "oauth_clients" ("id") ON DELETE CASCADE, CONSTRAINT "FK_a699f3ed9fd0c1b19bc2608ac53" FOREIGN KEY ("userId") REFERENCES "user" ("id") ON DELETE CASCADE)EJY3indexsqlite_autoindex_oauth_access_tokens_1oauth_access_tokenspI33atableoauth_access_tokensoauth_access_tokensoCREATE TABLE "oauth_access_tokens" ("token" varchar PRIMARY KEY NOT NULL, "clientId" varchar NOT NULL, "userId" varchar NOT NULL, CONSTRAINT "FK_78b26968132b7e5e45b75876481" FOREIGN KEY ("clientId") REFERENCES "oauth_clients" ("id") ON DELETE CASCADE, CONSTRAINT "FK_7234a36d8e49a1fa85095328845" FOREIGN KEY ("userId") REFERENCES "user" ("id") ON DELETE CASCADE)9HM'indexsqlite_autoindex_oauth_clients_1oauth_clientsn`G''tableoauth_clientsoauth_clientsmCREATE TABLE "oauth_clients" ("id" varchar PRIMARY KEY NOT NULL, "name" varchar(255) NOT NULL, "redirectUris" text NOT NULL, "grantTypes" text NOT NULL, "clientSecret" varchar(255), "clientSecretExpiresAt" bigint, "tokenEndpointAuthMethod" varchar(255) NOT NULL DEFAULT ('none'), "createdAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "updatedAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')))     ~|{zyx   g )  > q]  R H {4 (U91ac832d-df1a-46ee-87ad-0aa740ed9f86(U44117e37-f6ac-4327-93f8-eb439bd1a09c(Uaf3173d0-d5a2-4e82-8080-9dc9eb1a5638(U3763d912-8e4d-42ae-95c0-5756b67cad5e(Ub0319ad9-feaa-4e2d-a01f-87c1bdedcec8(Uc4d8b9a6-f94e-472b-96a8-34466617b949(Ubfa0341d-c9ac-4770-8935-19b9c2979780(U4feebac7-ff3b-4bf3-839a-9d6a02c3a16e(U12245b43-f693-48fc-9f02-fb1e6f96050f(U9d185630-6aca-46e3-b9b4-7ceb8e19d3fb(Uba231745-44b2-4e08-86f0-0dc5ea19589d(U7be55d5f-51fe-48da-b0cb-d3842ba563fe(U31cf9688-316a-4cc4-a8df-ba01116bebf5(Ufc47ad8e-caf4-428e-a45a-8e8a7bd70196(U36a5005f-c69a-434c-a24f-63076b19735b (U4bf2016d-9c08-4a74-afca-1926ffdabfc7 (U65eb6a08-e946-4793-ba82-6f40e7b8fabc (U36d1509a-6676-4676-b4eb-fe32fb63cc67 (U4fbe9afd-8972-4eb3-b6e1-bb70468b1e25 (Uee251927-8041-419f-97d4-a97f32049f96(U285f3e29-532e-4e7c-b4b2-d193af9c54e5(Ufc3bc306-cf91-4f89-aa4b-75ee88a0be50(Uf2a17289-ca75-4511-a9b7-2691b7ce0fa3(U81920a61-a843-4304-825d-75d8b5a9f3b3(Ubaa86904-c4ef-4010-bb23-0d0798d02cbc(U370acd9f-8c23-404f-be77-ec179f6ec858'U ca712434-0ad0-4d4f-8652-9eb9306ee2a8 N@ U-O;3[- 370acd9f-8c23-404f-be77-ec179f6ec858ioR8eFBEVaKOkjc0RIZOWAN rizowansiddique@gmail.com2026-03-06 04:58:28.7312026-03-06 04:59:39[{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook","type":"n8n-nodes-base.webhook","position":[-192,-144],"typeVersion":1,"id":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","webhookId":"a4d792e3-b5b9-425f-b612-c938e71de65d"},{"parameters":{"functionCode":"const user = $json.user_id;\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = `n8n.${user}.inmetech.cloud`;\n\nconst cmd = `docker run -d \\\n--name n8n-${user} \\\n--memory=${ram} \\\n--cpus=${cpu} \\\n-v n8n_${user}:/home/node/.n8n \\\n-e N8N_HOST=${domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label traefik.http.routers.n8n-${user}.rule=Host(\\`${domain}\\`) \\\n--label traefik.http.routers.n8n-${user}.entrypoints=websecure \\\n--label traefik.http.routers.n8n-${user}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.n8n-${user}.loadbalancer.server.port=5678 \\\n docker.n8n.io/n8nio/n8n`;\n\nreturn [{ json: { command: cmd, url: `https://${domain}` } }];"},"name":"Build Docker Command","type":"n8n-nodes-base.function","position":[112,-144],"typeVersion":1,"id":"7c91468e-80ea-4de5-8553-376dc01f0973"},{"parameters":{"command":"={{$json.command}}"},"name":"Run Docker","type":"n8n-nodes-base.executeCommand","position":[416,-144],"typeVersion":1,"id":"d049c848-745f-43ce-ad8f-2069344eb356"},{"parameters":{"options":{}},"name":"Respond","type":"n8n-nodes-base.respondToWebhook","position":[672,-144],"typeVersion":1,"id":"c17c8373-bb00-4562-ae8f-c18a13839f0d"}]{"Webhook":{"main":[[{"node":"Build Docker Command","type":"main","index":0}]]},"Build Docker Command":{"main":[[{"node":"Run Docker","type":"main","index":0}]]},"Run Docker":{"main":[[{"node":"Respond","type":"main","index":0}]]}}Version 370acd9f/ U-O;;}[ ca712434-0ad0-4d4f-8652-9eb9306ee2a8ioR8eFBEVaKOkjc0RIZOWAN rizowansiddique@gmail.com2026-03-06 04:58:21.6862026-03-06 04:58:21.686[{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook","type":"n8n-nodes-base.webhook","position":[-48,-96],"typeVersion":1,"id":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","webhookId":"a4d792e3-b5b9-425f-b612-c938e71de65d"},{"parameters":{"functionCode":"const user = $json.user_id;\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = `n8n.${user}.inmetech.cloud`;\n\nconst cmd = `docker run -d \\\n--name n8n-${user} \\\n--memory=${ram} \\\n--cpus=${cpu} \\\n-v n8n_${user}:/home/node/.n8n \\\n-e N8N_HOST=${domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label traefik.http.routers.n8n-${user}.rule=Host(\\`${domain}\\`) \\\n--label traefik.http.routers.n8n-${user}.entrypoints=websecure \\\n--label traefik.http.routers.n8n-${user}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.n8n-${user}.loadbalancer.server.port=5678 \\\n docker.n8n.io/n8nio/n8n`;\n\nreturn [{ json: { command: cmd, url: `https://${domain}` } }];"},"name":"Build Docker Command","type":"n8n-nodes-base.function","position":[256,-96],"typeVersion":1,"id":"7c91468e-80ea-4de5-8553-376dc01f0973"},{"parameters":{"command":"={{$json.command}}"},"name":"Run Docker","type":"n8n-nodes-base.executeCommand","position":[560,-96],"typeVersion":1,"id":"d049c848-745f-43ce-ad8f-2069344eb356"},{"parameters":{"options":{}},"name":"Respond","type":"n8n-nodes-base.respondToWebhook","position":[816,-96],"typeVersion":1,"id":"c17c8373-bb00-4562-ae8f-c18a13839f0d"}]{"Webhook":{"main":[[{"node":"Build Docker Command","type":"main","index":0}]]},"Build Docker Command":{"main":[[{"node":"Run Docker","type":"main","index":0}]]},"Run Docker":{"main":[[{"node":"Respond","type":"main","index":0}]]}} _ U-O;;][ baa86904-c4ef-4010-bb23-0d0798d02cbcioR8eFBEVaKOkjc0RIZOWAN rizowansiddique@gmail.com2026-03-06 04:59:52.5012026-03-06 04:59:52.501[{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook","type":"n8n-nodes-base.webhook","position":[-192,-144],"typeVersion":1,"id":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","webhookId":"a4d792e3-b5b9-425f-b612-c938e71de65d"},{"parameters":{"functionCode":"const user = $json.user_id;\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = `n8n.${user}.inmetech.cloud`;\n\nconst cmd = `docker run -d \\\n--name n8n-${user} \\\n--memory=${ram} \\\n--cpus=${cpu} \\\n-v n8n_${user}:/home/node/.n8n \\\n-e N8N_HOST=${domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label traefik.http.routers.n8n-${user}.rule=Host(\\`${domain}\\`) \\\n--label traefik.http.routers.n8n-${user}.entrypoints=websecure \\\n--label traefik.http.routers.n8n-${user}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.n8n-${user}.loadbalancer.server.port=5678 \\\n docker.n8n.io/n8nio/n8n`;\n\nreturn [{ json: { command: cmd, url: `https://${domain}` } }];"},"name":"Build Docker Command","type":"n8n-nodes-base.function","position":[112,-144],"typeVersion":1,"id":"7c91468e-80ea-4de5-8553-376dc01f0973"},{"parameters":{"command":"={{$json.command}}"},"name":"Run Docker","type":"n8n-nodes-base.executeCommand","position":[416,-144],"typeVersion":1,"id":"d049c848-745f-43ce-ad8f-2069344eb356"},{"parameters":{"options":{}},"name":"Respond","type":"n8n-nodes-base.respondToWebhook","position":[672,-144],"typeVersion":1,"id":"c17c8373-bb00-4562-ae8f-c18a13839f0d"},{"parameters":{"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[512,224],"id":"9654e007-c6e7-4a2b-b48a-7ee7df40a1c0","name":"HTTP Request"}]{"Webhook":{"main":[[{"node":"Build Docker Command","type":"main","index":0}]]},"Build Docker Command":{"main":[[{"node":"Run Docker","type":"main","index":0}]]},"Run Docker":{"main":[[{"node":"Respond","type":"main","index":0}]]}} ` U-O;;_[ 81920a61-a843-4304-825d-75d8b5a9f3b3ioR8eFBEVaKOkjc0RIZOWAN rizowansiddique@gmail.com2026-03-06 04:59:56.0712026-03-06 04:59:56.071[{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook","type":"n8n-nodes-base.webhook","position":[-192,-144],"typeVersion":1,"id":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","webhookId":"a4d792e3-b5b9-425f-b612-c938e71de65d"},{"parameters":{"functionCode":"const user = $json.user_id;\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = `n8n.${user}.inmetech.cloud`;\n\nconst cmd = `docker run -d \\\n--name n8n-${user} \\\n--memory=${ram} \\\n--cpus=${cpu} \\\n-v n8n_${user}:/home/node/.n8n \\\n-e N8N_HOST=${domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label traefik.http.routers.n8n-${user}.rule=Host(\\`${domain}\\`) \\\n--label traefik.http.routers.n8n-${user}.entrypoints=websecure \\\n--label traefik.http.routers.n8n-${user}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.n8n-${user}.loadbalancer.server.port=5678 \\\n docker.n8n.io/n8nio/n8n`;\n\nreturn [{ json: { command: cmd, url: `https://${domain}` } }];"},"name":"Build Docker Command","type":"n8n-nodes-base.function","position":[112,-144],"typeVersion":1,"id":"7c91468e-80ea-4de5-8553-376dc01f0973"},{"parameters":{"command":"={{$json.command}}"},"name":"Run Docker","type":"n8n-nodes-base.executeCommand","position":[416,-144],"typeVersion":1,"id":"d049c848-745f-43ce-ad8f-2069344eb356"},{"parameters":{"options":{}},"name":"Respond","type":"n8n-nodes-base.respondToWebhook","position":[672,-144],"typeVersion":1,"id":"c17c8373-bb00-4562-ae8f-c18a13839f0d"},{"parameters":{"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[336,-400],"id":"9654e007-c6e7-4a2b-b48a-7ee7df40a1c0","name":"HTTP Request"}]{"Webhook":{"main":[[{"node":"Build Docker Command","type":"main","index":0}]]},"Build Docker Command":{"main":[[{"node":"Run Docker","type":"main","index":0}]]},"Run Docker":{"main":[[{"node":"Respond","type":"main","index":0}]]}} : U-O;;[ f2a17289-ca75-4511-a9b7-2691b7ce0fa3ioR8eFBEVaKOkjc0RIZOWAN rizowansiddique@gmail.com2026-03-06 05:00:01.0032026-03-06 05:00:01.003[{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook","type":"n8n-nodes-base.webhook","position":[-192,-144],"typeVersion":1,"id":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","webhookId":"a4d792e3-b5b9-425f-b612-c938e71de65d"},{"parameters":{"functionCode":"const user = $json.user_id;\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = `n8n.${user}.inmetech.cloud`;\n\nconst cmd = `docker run -d \\\n--name n8n-${user} \\\n--memory=${ram} \\\n--cpus=${cpu} \\\n-v n8n_${user}:/home/node/.n8n \\\n-e N8N_HOST=${domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label traefik.http.routers.n8n-${user}.rule=Host(\\`${domain}\\`) \\\n--label traefik.http.routers.n8n-${user}.entrypoints=websecure \\\n--label traefik.http.routers.n8n-${user}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.n8n-${user}.loadbalancer.server.port=5678 \\\n docker.n8n.io/n8nio/n8n`;\n\nreturn [{ json: { command: cmd, url: `https://${domain}` } }];"},"name":"Build Docker Command","type":"n8n-nodes-base.function","position":[112,-144],"typeVersion":1,"id":"7c91468e-80ea-4de5-8553-376dc01f0973"},{"parameters":{"command":"={{$json.command}}"},"name":"Run Docker","type":"n8n-nodes-base.executeCommand","position":[416,-144],"typeVersion":1,"id":"d049c848-745f-43ce-ad8f-2069344eb356"},{"parameters":{"options":{}},"name":"Respond","type":"n8n-nodes-base.respondToWebhook","position":[672,-144],"typeVersion":1,"id":"c17c8373-bb00-4562-ae8f-c18a13839f0d"},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"user123"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[336,-400],"id":"9654e007-c6e7-4a2b-b48a-7ee7df40a1c0","name":"HTTP Request"}]{"Webhook":{"main":[[{"node":"Build Docker Command","type":"main","index":0}]]},"Build Docker Command":{"main":[[{"node":"Run Docker","type":"main","index":0}]]},"Run Docker":{"main":[[{"node":"Respond","type":"main","index":0}]]}} ff U-O;;M[ fc3bc306-cf91-4f89-aa4b-75ee88a0be50ioR8eFBEVaKOkjc0RIZOWAN rizowansiddique@gmail.com2026-03-06 05:01:34.8092026-03-06 05:01:34.809[{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook","type":"n8n-nodes-base.webhook","position":[-192,-144],"typeVersion":1,"id":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","webhookId":"a4d792e3-b5b9-425f-b612-c938e71de65d"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = \"n8n.\" + user + \".inmetech.cloud\";\n\nconst cmd = `\ndocker run -d \\\n--name n8n-${user} \\\n--memory=${ram} \\\n--cpus=${cpu} \\\n-v n8n_${user}:/home/node/.n8n \\\n-e N8N_HOST=${domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \"traefik.http.routers.n8n-${user}.rule=Host('${domain}')\" \\\n--label traefik.http.routers.n8n-${user}.entrypoints=websecure \\\n--label traefik.http.routers.n8n-${user}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.n8n-${user}.loadbalancer.server.port=5678 \\\ndocker.n8n.io/n8nio/n8n\n`;\n\nreturn [{\n json: {\n command: cmd,\n url: \"https://\" + domain\n }\n}];"},"name":"Build Docker Command","type":"n8n-nodes-base.function","position":[112,-144],"typeVersion":1,"id":"7c91468e-80ea-4de5-8553-376dc01f0973"},{"parameters":{"command":"={{$json.command}}"},"name":"Run Docker","type":"n8n-nodes-base.executeCommand","position":[416,-144],"typeVersion":1,"id":"d049c848-745f-43ce-ad8f-2069344eb356"},{"parameters":{"options":{}},"name":"Respond","type":"n8n-nodes-base.respondToWebhook","position":[672,-144],"typeVersion":1,"id":"c17c8373-bb00-4562-ae8f-c18a13839f0d"},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"user123"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[336,-400],"id":"9654e007-c6e7-4a2b-b48a-7ee7df40a1c0","name":"HTTP Request"}]{"Webhook":{"main":[[{"node":"Build Docker Command","type":"main","index":0}]]},"Build Docker Command":{"main":[[{"node":"Run Docker","type":"main","index":0}]]},"Run Docker":{"main":[[{"node":"Respond","type":"main","index":0}]]}}ame}_data`;\n\n// environment variables for each user container (disable dangerous nodes for clients)\nconst envs = [\n `-e N8N_HOST=${host}`,\n `-e N8N_PROTOCOL=https`,\n `-e WEBHOOK_URL=https://${host}/` ,\n `-e N8N_TRUST_PROXY=true`,\n `-e N8N_SECURE_COOKIE=true`,\n `-e NODES_EXCLUDE=[\"n8n-nodes-base.executeCommand\",\"n8n-nodes-base.localFileTrigger\"]`\n];\n\n// labels for Traefik routing\nconst labels = [\n `--label traefik.enable=true`,\n `--label traefik.http.routers.${containerName}.entrypoints=websecure`,\n `--label traefik.http.routers.${containerName}.rule=Host(\\`${host}\\`)`,\n `--label traefik.http.routers.${containerName}.tls.certresolver=letsencrypt`,\n `--label traefik.http.services.${containerName}.loadbalancer.server.port=5678`\n];\n\n// prepare docker commands\nconst cmdCreateVolume = `docker volume create ${volume}`;\nconst cmdRun = `docker run -d --name ${containerName} --restart unless-stopped --memory=${res.ram} --cpus=${res.cpus} -v ${volume}:/home/node/.n8n ${envs.join(' ')} ${labels.join(' ')} docker.n8n.io/n8nio/n8n`;\n\n// check existing container cmd\nconst cmdCheck = `docker ps -a --filter \\\"name=^/${containerName}$\\\" --format \\\"{{.Names}}\\\"`;\n\nreturn [ { json: { username, plan, domain, host, containerName, cmdCreateVolume, cmdRun, cmdCheck } } ];"},"name":"Build Commands","type":"n8n-nodes-base.function","typeVersion":1,"position":[-160,256],"id":"6b4138b5-495d-46a4-8a37-1ef01adb601a"},{"parameters":{"command":"={{$json.commandCheck}}"},"name":"Check Existing","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,192],"id":"33050773-1166-410e-af9a-2629b205483c"},{"parameters":{"functionCode":"const out = items[0].json;\nif (out && out.data && out.data.length) {\n const names = out.data.trim();\n if (names) throw new Error(`Container already exists: ${names}`);\n}\nreturn items;"},"name":"Fail If Exists","type":"n8n-nodes-base.function","typeVersion":1,"position":[336,192],"id":"8b770345-6008-45df-b449-648dc9181903"},{"parameters":{"command":"={{$json.cmdCreateVolume}}"},"name":"Create Volume","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,320],"id":"c3ef5fcd-65be-44ef-a8fa-dc1db8dc1621"},{"parameters":{"command":"={{$json.cmdRun}}"},"name":"Run Container","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[336,320],"id":"749ef316-deab-4898-805c-891900d0fed0"},{"parameters":{"functionCode":"const j = items[0].json;\nreturn [{ json: { success: true, host: j.host, container: j.containerName, message: 'Container creation triggered. Allow 10-30s to boot and acquire TLS.' } }];"},"name":"Prepare Response","type":"n8n-nodes-base.function","typeVersion":1,"position":[608,256],"id":"352f91c6-e900-433c-8d9b-b653cbf5e275"},{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook1","type":"n8n-nodes-base.webhook","typeVersion":1,"position":[-640,256],"id":"8e72c500-0d98-4892-b3bf-16633ffdb18f","webhookId":"91e8d5c0-cb20-4d3a-978a-db8e22e4073b"},{"parameters":{"options":{}},"name":"Respond1","type":"n8n-nodes-base.respondToWebhook","typeVersion":1,"position":[864,256],"id":"8d30d07b-7c63-43dd-89cc-fed8ec9d226b"}]{"Webhook":{"main":[[{"node":"Build Docker Command","type":"main","index":0}]]},"Build Docker Command":{"main":[[{"node":"Run Docker","type":"main","index":0}]]},"Run Docker":{"main":[[{"node":"Respond","type":"main","index":0}]]},"Set Input":{"main":[[{"node":"Build Commands","type":"main","index":0}]]},"Build Commands":{"main":[[{"node":"Check Existing","type":"main","index":0},{"node":"Create Volume","type":"main","index":0}]]},"Check Existing":{"main":[[{"node":"Fail If Exists","type":"main","index":0}]]},"Fail If Exists":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Create Volume":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Run Container":{"main":[[{"node":"Prepare Response","type":"main","index":0}]]},"Prepare Response":{"main":[[{"node":"Respond1","type":"main","index":0}]]},"Webhook1":{"main":[[{"node":"Set Input","type":"main","index":0}]]}} JJ+ U-O;;? 285f3e29-532e-4e7c-b4b2-d193af9c54e5ioR8eFBEVaKOkjc0RIZOWAN rizowansiddique@gmail.com2026-03-06 05:02:48.4752026-03-06 05:02:48.475[{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook","type":"n8n-nodes-base.webhook","position":[-192,-144],"typeVersion":1,"id":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","webhookId":"a4d792e3-b5b9-425f-b612-c938e71de65d"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = \"n8n.\" + user + \".inmetech.cloud\";\n\nconst cmd = `\ndocker run -d \\\n--name n8n-${user} \\\n--memory=${ram} \\\n--cpus=${cpu} \\\n-v n8n_${user}:/home/node/.n8n \\\n-e N8N_HOST=${domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \"traefik.http.routers.n8n-${user}.rule=Host('${domain}')\" \\\n--label traefik.http.routers.n8n-${user}.entrypoints=websecure \\\n--label traefik.http.routers.n8n-${user}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.n8n-${user}.loadbalancer.server.port=5678 \\\ndocker.n8n.io/n8nio/n8n\n`;\n\nreturn [{\n json: {\n command: cmd,\n url: \"https://\" + domain\n }\n}];"},"name":"Build Docker Command","type":"n8n-nodes-base.function","position":[112,-144],"typeVersion":1,"id":"7c91468e-80ea-4de5-8553-376dc01f0973"},{"parameters":{"command":"={{$json.command}}"},"name":"Run Docker","type":"n8n-nodes-base.executeCommand","position":[416,-144],"typeVersion":1,"id":"d049c848-745f-43ce-ad8f-2069344eb356"},{"parameters":{"options":{}},"name":"Respond","type":"n8n-nodes-base.respondToWebhook","position":[672,-144],"typeVersion":1,"id":"c17c8373-bb00-4562-ae8f-c18a13839f0d"},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"user123"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[336,-400],"id":"9654e007-c6e7-4a2b-b48a-7ee7df40a1c0","name":"HTTP Request"},{"parameters":{"values":{"string":[{"name":"apiKey","value":"{{$json[\"apiKey\"] || $env.API_KEY || \"\"}}"},{"name":"username","value":"={{$json[\"username\"] || $json[\"email\"] || $json[\"user\"] || \"user\"}}"},{"name":"plan","value":"={{$json[\"plan\"] || \"basic\"}}"},{"name":"domain","value":"={{$json[\"domain\"] || $env.DEFAULT_DOMAIN || \"inmetech.cloud\"}}"}]},"options":{}},"name":"Set Input","type":"n8n-nodes-base.set","typeVersion":1,"position":[-400,256],"id":"503fad3f-a1b5-4820-a049-48dd916574f5"},{"parameters":{"functionCode":"const payload = items[0].json;\n\n// simple API key check (secure your webhook in production)\nconst providedKey = payload.apiKey || '';\nconst expected = process.env.API_KEY || '';\nif (!expected || providedKey !== expected) {\n throw new Error('Invalid API key');\n}\n\n// sanitize username\nlet raw = (payload.username || 'user').toString();\nlet username = raw.toLowerCase().replace(/[^a-z0-9\\-]/g, '').slice(0, 20) || 'user';\n\n// plan -> resources mapping (restrict to allowed values)\nconst plans = {\n basic: { ram: '1g', cpus: '0.5' },\n pro: { ram: '2g', cpus: '1' },\n agency: { ram: '4g', cpus: '2' }\n};\nconst plan = (payload.plan || 'basic').toLowerCase();\nconst res = plans[plan] || plans['basic'];\n\nconst domain = (payload.domain || process.env.DEFAULT_DOMAIN || 'inmetech.cloud').replace(/[^a-z0-9.\\-]/gi,'');\nconst subdomain = `n8n-${username}`;\nconst host = `${subdomain}.${domain}`;\nconst containerName = `n8n-${username}`;\nconst volume = `${containerN}base.set","typeVersion":1,"position":[-400,256],"id":"503fad3f-a1b5-4820-a049-48dd916574f5"},{"parameters":{"functionCode":"const payload = items[0].json;\n\n// simple API key check (secure your webhook in production)\nconst providedKey = payload.apiKey || '';\nconst expected = process.env.API_KEY || '';\nif (!expected || providedKey !== expected) {\n throw new Error('Invalid API key');\n}\n\n// sanitize username\nlet raw = (payload.username || 'user').toString();\nlet username = raw.toLowerCase().replace(/[^a-z0-9\\-]/g, '').slice(0, 20) || 'user';\n\n// plan -> resources mapping (restrict to allowed values)\nconst plans = {\n basic: { ram: '1g', cpus: '0.5' },\n pro: { ram: '2g', cpus: '1' },\n agency: { ram: '4g', cpus: '2' }\n};\nconst plan = (payload.plan || 'basic').toLowerCase();\nconst res = plans[plan] || plans['basic'];\n\nconst domain = (payload.domain || process.env.DEFAULT_DOMAIN || 'inmetech.cloud').replace(/[^a-z0-9.\\-]/gi,'');\nconst subdomain = `n8n-${username}`;\nconst host = `${subdomain}.${domain}`;\nconst containerName = `n8n-${username}`;\nconst volume = `${containerName}_data`;\n\n// environment variables for each user container (disable dangerous nodes for clients)\nconst envs = [\n `-e N8N_HOST=${host}`,\n `-e N8N_PROTOCOL=https`,\n `-e WEBHOOK_URL=https://${host}/` ,\n `-e N8N_TRUST_PROXY=true`,\n `-e N8N_SECURE_COOKIE=true`,\n `-e NODES_EXCLUDE=[\"n8n-nodes-base.executeCommand\",\"n8n-nodes-base.localFileTrigger\"]`\n];\n\n// labels for Traefik routing\nconst labels = [\n `--label traefik.enable=true`,\n `--label traefik.http.routers.${containerName}.entrypoints=websecure`,\n `--label traefik.http.routers.${containerName}.rule=Host(\\`${host}\\`)`,\n `--label traefik.http.routers.${containerName}.tls.certresolver=letsencrypt`,\n `--label traefik.http.services.${containerName}.loadbalancer.server.port=5678`\n];\n\n// prepare docker commands\nconst cmdCreateVolume = `docker volume create ${volume}`;\nconst cmdRun = `docker run -d --name ${containerName} --restart unless-stopped --memory=${res.ram} --cpus=${res.cpus} -v ${volume}:/home/node/.n8n ${envs.join(' ')} ${labels.join(' ')} docker.n8n.io/n8nio/n8n`;\n\n// check existing container cmd\nconst cmdCheck = `docker ps -a --filter \\\"name=^/${containerName}$\\\" --format \\\"{{.Names}}\\\"`;\n\nreturn [ { json: { username, plan, domain, host, containerName, cmdCreateVolume, cmdRun, cmdCheck } } ];"},"name":"Build Commands","type":"n8n-nodes-base.function","typeVersion":1,"position":[-160,256],"id":"6b4138b5-495d-46a4-8a37-1ef01adb601a"},{"parameters":{"command":"={{$json.commandCheck}}"},"name":"Check Existing","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,192],"id":"33050773-1166-410e-af9a-2629b205483c"},{"parameters":{"functionCode":"const out = items[0].json;\nif (out && out.data && out.data.length) {\n const names = out.data.trim();\n if (names) throw new Error(`Container already exists: ${names}`);\n}\nreturn items;"},"name":"Fail If Exists","type":"n8n-nodes-base.function","typeVersion":1,"position":[336,192],"id":"8b770345-6008-45df-b449-648dc9181903"},{"parameters":{"command":"={{$json.cmdCreateVolume}}"},"name":"Create Volume","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,320],"id":"c3ef5fcd-65be-44ef-a8fa-dc1db8dc1621"},{"parameters":{"command":"={{$json.cmdRun}}"},"name":"Run Container","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[336,320],"id":"749ef316-deab-4898-805c-891900d0fed0"},{"parameters":{"functionCode":"const j = items[0].json;\nreturn [{ json: { success: true, host: j.host, container: j.containerName, message: 'Container creation triggered. Allow 10-30s to boot and acquire TLS.' } }];"},"name":"Prepare Response","type":"n8n-nodes-base.function","typeVersion":1,"position":[608,256],"id":"352f91c6-e900-433c-8d9b-b653cbf5e275"},{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook1","type":"n8n-nodes-base.webhook","typeVersion":1,"position":[-640,256],"id":"8e72c500-0d98-4892-b3bf-16633ffdb18f","webhookId":"91e8d5c0-cb20-4d3a-978a-db8e22e4073b"},{"parameters":{"options":{}},"name":"Respond1","type":"n8n-nodes-base.respondToWebhook","typeVersion":1,"position":[864,256],"id":"8d30d07b-7c63-43dd-89cc-fed8ec9d226b"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = `n8n.${user}.inmetech.cloud`;\n\nreturn [{\n json: {\n user,\n ram,\n cpu,\n domain,\n container: `n8n-${user}`,\n volume: `n8n_${user}`\n }\n}];"},"id":"9ddf7ecd-9b82-40df-82c7-63fc748fb79c","name":"Prepare Data","type":"n8n-nodes-base.function","position":[-672,1200],"typeVersion":1},{"parameters":{"command":"docker ps -a --format '{{.Names}}'"},"id":"0f259cf3-ccd1-481d-b237-bbb048f9ce3c","name":"List Containers","type":"n8n-nodes-base.executeCommand","position":[-416,1088],"typeVersion":1},{"parameters":{"functionCode":"const existing = $json.stdout || \"\";\nconst user = $items(\"Prepare Data\")[0].json.user;\n\nif (existing.includes(`n8n-${user}`)) {\n throw new Error(\"Container already exists\");\n}\n\nreturn $items(\"Prepare Data\");"},"id":"12aa3069-ada6-4845-ad2f-87af3d31bb85","name":"Check Duplicate","type":"n8n-nodes-base.function","position":[-160,1088],"typeVersion":1},{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"id":"fb6697e6-8815-4beb-936d-f16f1814cfdc","name":"Webhook2","type":"n8n-nodes-base.webhook","position":[-912,1200],"typeVersion":1,"webhookId":"c08aedad-597e-4ea4-b647-bccecb2c90f3"},{"parameters":{"functionCode":"const data = $json;\n\nconst cmd = `docker run -d \\\n--name ${data.container} \\\n--memory=${data.ram} \\\n--cpus=${data.cpu} \\\n-v ${data.volume}:/home/node/.n8n \\\n-e N8N_HOST=${data.domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${data.domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \\\"traefik.http.routers.${data.container}.rule=Host('${data.domain}')\\\" \\\n--label traefik.http.routers.${data.container}.entrypoints=websecure \\\n--label traefik.http.routers.${data.container}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.${data.container}.loadbalancer.server.port=5678 \\\n docker.n8n.io/n8nio/n8n`;\n\nreturn [{ json: { command: cmd, url: `https://${data.domain}` } }];"},"id":"36f16652-730e-4ff9-8978-16747fa1d8e3","name":"Build Docker Command1","type":"n8n-nodes-base.function","position":[96,1200],"typeVersion":1},{"parameters":{"command":"={{$json.command}}"},"id":"652ddbd1-09f1-4ac6-84c2-169a34d5016c","name":"Run Docker1","type":"n8n-nodes-base.executeCommand","position":[336,1200],"typeVersion":1},{"parameters":{"options":{}},"id":"2672e437-0f80-43fa-91ad-80805b69d424","name":"Respond2","type":"n8n-nodes-base.respondToWebhook","position":[592,1200],"typeVersion":1}]{"Webhook":{"main":[[{"node":"Build Docker Command","type":"main","index":0}]]},"Build Docker Command":{"main":[[{"node":"Run Docker","type":"main","index":0}]]},"Run Docker":{"main":[[{"node":"Respond","type":"main","index":0}]]},"Set Input":{"main":[[{"node":"Build Commands","type":"main","index":0}]]},"Build Commands":{"main":[[{"node":"Check Existing","type":"main","index":0},{"node":"Create Volume","type":"main","index":0}]]},"Check Existing":{"main":[[{"node":"Fail If Exists","type":"main","index":0}]]},"Fail If Exists":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Create Volume":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Run Container":{"main":[[{"node":"Prepare Response","type":"main","index":0}]]},"Prepare Response":{"main":[[{"node":"Respond1","type":"main","index":0}]]},"Webhook1":{"main":[[{"node":"Set Input","type":"main","index":0}]]},"Check Duplicate":{"main":[[{"node":"Build Docker Command1","type":"main","index":0}]]},"Webhook2":{"main":[[{"node":"Prepare Data","type":"main","index":0}]]},"Build Docker Command1":{"main":[[{"node":"Run Docker1","type":"main","index":0}]]},"Run Docker1":{"main":[[{"node":"Respond2","type":"main","index":0}]]}} QU-O;; ee251927-8041-419f-97d4-a97f32049f96ioR8eFBEVaKOkjc0RIZOWAN rizowansiddique@gmail.com2026-03-06 05:05:11.2002026-03-06 05:05:11.200[{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook","type":"n8n-nodes-base.webhook","position":[-192,-144],"typeVersion":1,"id":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","webhookId":"a4d792e3-b5b9-425f-b612-c938e71de65d"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = \"n8n.\" + user + \".inmetech.cloud\";\n\nconst cmd = `\ndocker run -d \\\n--name n8n-${user} \\\n--memory=${ram} \\\n--cpus=${cpu} \\\n-v n8n_${user}:/home/node/.n8n \\\n-e N8N_HOST=${domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \"traefik.http.routers.n8n-${user}.rule=Host('${domain}')\" \\\n--label traefik.http.routers.n8n-${user}.entrypoints=websecure \\\n--label traefik.http.routers.n8n-${user}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.n8n-${user}.loadbalancer.server.port=5678 \\\ndocker.n8n.io/n8nio/n8n\n`;\n\nreturn [{\n json: {\n command: cmd,\n url: \"https://\" + domain\n }\n}];"},"name":"Build Docker Command","type":"n8n-nodes-base.function","position":[112,-144],"typeVersion":1,"id":"7c91468e-80ea-4de5-8553-376dc01f0973"},{"parameters":{"command":"={{$json.command}}"},"name":"Run Docker","type":"n8n-nodes-base.executeCommand","position":[416,-144],"typeVersion":1,"id":"d049c848-745f-43ce-ad8f-2069344eb356"},{"parameters":{"options":{}},"name":"Respond","type":"n8n-nodes-base.respondToWebhook","position":[672,-144],"typeVersion":1,"id":"c17c8373-bb00-4562-ae8f-c18a13839f0d"},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"user123"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[336,-400],"id":"9654e007-c6e7-4a2b-b48a-7ee7df40a1c0","name":"HTTP Request"},{"parameters":{"values":{"string":[{"name":"apiKey","value":"{{$json[\"apiKey\"] || $env.API_KEY || \"\"}}"},{"name":"username","value":"={{$json[\"username\"] || $json[\"email\"] || $json[\"user\"] || \"user\"}}"},{"name":"plan","value":"={{$json[\"plan\"] || \"basic\"}}"},{"name":"domain","value":"={{$json[\"domain\"] || $env.DEFAULT_DOMAIN || \"inmetech.cloud\"}}"}]},"options":{}},"name":"Set Input","type":"n8n-nodes-simple API key check (secure your webhook in production)\nconst providedKey = payload.apiKey || '';\nconst expected = process.env.API_KEY || '';\nif (!expected || providedKey !== expected) {\n throw new Error('Invalid API key');\n}\n\n// sanitize username\nlet raw = (payload.username || 'user').toString();\nlet username = raw.toLowerCase().replace(/[^a-z0-9\\-]/g, '').slice(0, 20) || 'user';\n\n// plan -> resources mapping (restrict to allowed values)\nconst plans = {\n basic: { ram: '1g', cpus: '0.5' },\n pro: { ram: '2g', cpus: '1' },\n agency: { ram: '4g', cpus: '2' }\n};\nconst plan = (payload.plan || 'basic').toLowerCase();\nconst res = plans[plan] || plans['basic'];\n\nconst domain = (payload.domain || process.env.DEFAULT_DOMAIN || 'inmetech.cloud').replace(/[^a-z0-9.\\-]/gi,'');\nconst subdomain = `n8n-${username}`;\nconst host = `${subdomain}.${domain}`;\nconst containerName = `n8n-${username}`;\nconst volume = `${containerName}_data`;\n\n// environment variables for each user container (disable dangerous nodes for clients)\nconst envs = [\n `-e N8N_HOST=${host}`,\n `-e N8N_PROTOCOL=https`,\n `-e WEBHOOK_URL=https://${host}/` ,\n `-e N8N_TRUST_PROXY=true`,\n `-e N8N_SECURE_COOKIE=true`,\n `-e NODES_EXCLUDE=[\"n8n-nodes-base.executeCommand\",\"n8n-nodes-base.localFileTrigger\"]`\n];\n\n// labels for Traefik routing\nconst labels = [\n `--label traefik.enable=true`,\n `--label traefik.http.routers.${containerName}.entrypoints=websecure`,\n `--label traefik.http.routers.${containerName}.rule=Host(\\`${host}\\`)`,\n `--label traefik.http.routers.${containerName}.tls.certresolver=letsencrypt`,\n `--label traefik.http.services.${containerName}.loadbalancer.server.port=5678`\n];\n\n// prepare docker commands\nconst cmdCreateVolume = `docker volume create ${volume}`;\nconst cmdRun = `docker run -d --name ${containerName} --restart unless-stopped --memory=${res.ram} --cpus=${res.cpus} -v ${volume}:/home/node/.n8n ${envs.join(' ')} ${labels.join(' ')} docker.n8n.io/n8nio/n8n`;\n\n// check existing container cmd\nconst cmdCheck = `docker ps -a --filter \\\"name=^/${containerName}$\\\" --format \\\"{{.Names}}\\\"`;\n\nreturn [ { json: { username, plan, domain, host, containerName, cmdCreateVolume, cmdRun, cmdCheck } } ];"},"name":"Build Commands","type":"n8n-nodes-base.function","typeVersion":1,"position":[-160,256],"id":"6b4138b5-495d-46a4-8a37-1ef01adb601a"},{"parameters":{"command":"={{$json.commandCheck}}"},"name":"Check Existing","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,192],"id":"33050773-1166-410e-af9a-2629b205483c"},{"parameters":{"functionCode":"const out = items[0].json;\nif (out && out.data && out.data.length) {\n const names = out.data.trim();\n if (names) throw new Error(`Container already exists: ${names}`);\n}\nreturn items;"},"name":"Fail If Exists","type":"n8n-nodes-base.function","typeVersion":1,"position":[336,192],"id":"8b770345-6008-45df-b449-648dc9181903"},{"parameters":{"command":"={{$json.cmdCreateVolume}}"},"name":"Create Volume","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,320],"id":"c3ef5fcd-65be-44ef-a8fa-dc1db8dc1621"},{"parameters":{"command":"={{$json.cmdRun}}"},"name":"Run Container","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[336,320],"id":"749ef316-deab-4898-805c-891900d0fed0"},{"parameters":{"functionCode":"const j = items[0].json;\nreturn [{ json: { success: true, host: j.host, container: j.containerName, message: 'Container creation triggered. Allow 10-30s to boot and acquire TLS.' } }];"},"name":"Prepare Response","type":"n8n-nodes-base.function","typeVersion":1,"position":[608,256],"id":"352f91c6-e900-433c-8d9b-b653cbf5e275"},{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook1","type":"n8n-nodes-base.webhook","typeVersion":1,"position":[-640,256],"id":"8e72c500-0d98-4892-b3bf-16633ffdb18f","webhookId":"91e8d5c0-cb20-4d3a-978a-db8e22e4073b"},{"parameters":{"options":{}},"name":"Respond1","type":"n8n-nodes-base.respondToWebhook","typeVersion":1,"position":[864,256],"id":"8d30d07b-7c63-43dd-89cc-fed8ec9d226b"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = `n8n.${user}.inmetech.cloud`;\n\nreturn [{\n json: {\n user,\n ram,\n cpu,\n domain,\n container: `n8n-${user}`,\n volume: `n8n_${user}`\n }\n}];"},"id":"9ddf7ecd-9b82-40df-82c7-63fc748fb79c","name":"Prepare Data","type":"n8n-nodes-base.function","position":[-672,1200],"typeVersion":1},{"parameters":{"command":"docker ps -a --format '{{.Names}}'"},"id":"0f259cf3-ccd1-481d-b237-bbb048f9ce3c","name":"List Containers","type":"n8n-nodes-base.executeCommand","position":[-416,1088],"typeVersion":1},{"parameters":{"functionCode":"const existing = $json.stdout || \"\";\nconst user = $items(\"Prepare Data\")[0].json.user;\n\nif (existing.includes(`n8n-${user}`)) {\n throw new Error(\"Container already exists\");\n}\n\nreturn $items(\"Prepare Data\");"},"id":"12aa3069-ada6-4845-ad2f-87af3d31bb85","name":"Check Duplicate","type":"n8n-nodes-base.function","position":[-160,1088],"typeVersion":1},{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"id":"fb6697e6-8815-4beb-936d-f16f1814cfdc","name":"Webhook2","type":"n8n-nodes-base.webhook","position":[-912,1200],"typeVersion":1,"webhookId":"c08aedad-597e-4ea4-b647-bccecb2c90f3"},{"parameters":{"functionCode":"const data = $json;\n\nconst cmd = `docker run -d \\\n--name ${data.container} \\\n--memory=${data.ram} \\\n--cpus=${data.cpu} \\\n-v ${data.volume}:/home/node/.n8n \\\n-e N8N_HOST=${data.domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${data.domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \\\"traefik.http.routers.${data.container}.rule=Host('${data.domain}')\\\" \\\n--label traefik.http.routers.${data.container}.entrypoints=websecure \\\n--label traefik.http.routers.${data.container}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.${data.container}.loadbalancer.server.port=5678 \\\n docker.n8n.io/n8nio/n8n`;\n\nreturn [{ json: { command: cmd, url: `https://${data.domain}` } }];"},"id":"36f16652-730e-4ff9-8978-16747fa1d8e3","name":"Build Docker Command1","type":"n8n-nodes-base.function","position":[96,1200],"typeVersion":1},{"parameters":{"command":"={{$json.command}}"},"id":"652ddbd1-09f1-4ac6-84c2-169a34d5016c","name":"Run Docker1","type":"n8n-nodes-base.executeCommand","position":[336,1200],"typeVersion":1},{"parameters":{"options":{}},"id":"2672e437-0f80-43fa-91ad-80805b69d424","name":"Respond2","type":"n8n-nodes-base.respondToWebhook","position":[592,1200],"typeVersion":1}]{"Webhook":{"main":[[{"node":"Build Docker Command","type":"main","index":0}]]},"Build Docker Command":{"main":[[{"node":"Run Docker","type":"main","index":0}]]},"Run Docker":{"main":[[{"node":"Respond","type":"main","index":0}]]},"Set Input":{"main":[[{"node":"Build Commands","type":"main","index":0}]]},"Build Commands":{"main":[[{"node":"Check Existing","type":"main","index":0},{"node":"Create Volume","type":"main","index":0}]]},"Check Existing":{"main":[[{"node":"Fail If Exists","type":"main","index":0}]]},"Fail If Exists":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Create Volume":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Run Container":{"main":[[{"node":"Prepare Response","type":"main","index":0}]]},"Prepare Response":{"main":[[{"node":"Respond1","type":"main","index":0}]]},"Webhook1":{"main":[[{"node":"Set Input","type":"main","index":0}]]},"Check Duplicate":{"main":[[{"node":"Build Docker Command1","type":"main","index":0}]]},"Webhook2":{"main":[[{"node":"Prepare Data","type":"main","index":0}]]},"Build Docker Command1":{"main":[[{"node":"Run Docker1","type":"main","index":0}]]},"Run Docker1":{"main":[[{"node":"Respond2","type":"main","index":0}]]},"Prepare Data":{"main":[[{"node":"List Containers","type":"main","index":0}]]},"List Containers":{"main":[[{"node":"Check Duplicate","type":"main","index":0}]]}} r U-O;;I 4fbe9afd-8972-4eb3-b6e1-bb70468b1e25ioR8eFBEVaKOkjc0RIZOWAN rizowansiddique@gmail.com2026-03-06 05:05:16.1262026-03-06 05:05:16.126[{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook","type":"n8n-nodes-base.webhook","position":[-192,-144],"typeVersion":1,"id":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","webhookId":"a4d792e3-b5b9-425f-b612-c938e71de65d"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = \"n8n.\" + user + \".inmetech.cloud\";\n\nconst cmd = `\ndocker run -d \\\n--name n8n-${user} \\\n--memory=${ram} \\\n--cpus=${cpu} \\\n-v n8n_${user}:/home/node/.n8n \\\n-e N8N_HOST=${domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \"traefik.http.routers.n8n-${user}.rule=Host('${domain}')\" \\\n--label traefik.http.routers.n8n-${user}.entrypoints=websecure \\\n--label traefik.http.routers.n8n-${user}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.n8n-${user}.loadbalancer.server.port=5678 \\\ndocker.n8n.io/n8nio/n8n\n`;\n\nreturn [{\n json: {\n command: cmd,\n url: \"https://\" + domain\n }\n}];"},"name":"Build Docker Command","type":"n8n-nodes-base.function","position":[112,-144],"typeVersion":1,"id":"7c91468e-80ea-4de5-8553-376dc01f0973"},{"parameters":{"command":"={{$json.command}}"},"name":"Run Docker","type":"n8n-nodes-base.executeCommand","position":[416,-144],"typeVersion":1,"id":"d049c848-745f-43ce-ad8f-2069344eb356"},{"parameters":{"options":{}},"name":"Respond","type":"n8n-nodes-base.respondToWebhook","position":[672,-144],"typeVersion":1,"id":"c17c8373-bb00-4562-ae8f-c18a13839f0d"},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"user123"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[336,-400],"id":"9654e007-c6e7-4a2b-b48a-7ee7df40a1c0","name":"HTTP Request"},{"parameters":{"values":{"string":[{"name":"apiKey","value":"{{$json[\"apiKey\"] || $env.API_KEY || \"\"}}"},{"name":"username","value":"={{$json[\"username\"] || $json[\"email\"] || $json[\"user\"] || \"user\"}}"},{"name":"plan","value":"={{$json[\"plan\"] || \"basic\"}}"},{"name":"domain","value":"={{$json[\"domain\"] || $env.DEFAULT_DOMAIN || \"inmetech.cloud\"}}"}]},"options":{}},"name":"Set Input","type":"n8n-nodes-base.set","typeVersion":1,"position":[-400,256],"id":"503fad3f-a1b5-4820-a049-48dd916574f5"},{"parameters":{"functionCode":"const payload = items[0].json;\n\n// spond","type":"n8n-nodes-base.respondToWebhook","position":[672,-144],"typeVersion":1,"id":"c17c8373-bb00-4562-ae8f-c18a13839f0d"},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"user123"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[336,-400],"id":"9654e007-c6e7-4a2b-b48a-7ee7df40a1c0","name":"HTTP Request"},{"parameters":{"values":{"string":[{"name":"apiKey","value":"{{$json[\"apiKey\"] || $env.API_KEY || \"\"}}"},{"name":"username","value":"={{$json[\"username\"] || $json[\"email\"] || $json[\"user\"] || \"user\"}}"},{"name":"plan","value":"={{$json[\"plan\"] || \"basic\"}}"},{"name":"domain","value":"={{$json[\"domain\"] || $env.DEFAULT_DOMAIN || \"inmetech.cloud\"}}"}]},"options":{}},"name":"Set Input","type":"n8n-nodes-base.set","typeVersion":1,"position":[-400,256],"id":"503fad3f-a1b5-4820-a049-48dd916574f5"},{"parameters":{"functionCode":"const payload = items[0].json;\n\n// simple API key check (secure your webhook in production)\nconst providedKey = payload.apiKey || '';\nconst expected = process.env.API_KEY || '';\nif (!expected || providedKey !== expected) {\n throw new Error('Invalid API key');\n}\n\n// sanitize username\nlet raw = (payload.username || 'user').toString();\nlet username = raw.toLowerCase().replace(/[^a-z0-9\\-]/g, '').slice(0, 20) || 'user';\n\n// plan -> resources mapping (restrict to allowed values)\nconst plans = {\n basic: { ram: '1g', cpus: '0.5' },\n pro: { ram: '2g', cpus: '1' },\n agency: { ram: '4g', cpus: '2' }\n};\nconst plan = (payload.plan || 'basic').toLowerCase();\nconst res = plans[plan] || plans['basic'];\n\nconst domain = (payload.domain || process.env.DEFAULT_DOMAIN || 'inmetech.cloud').replace(/[^a-z0-9.\\-]/gi,'');\nconst subdomain = `n8n-${username}`;\nconst host = `${subdomain}.${domain}`;\nconst containerName = `n8n-${username}`;\nconst volume = `${containerName}_data`;\n\n// environment variables for each user container (disable dangerous nodes for clients)\nconst envs = [\n `-e N8N_HOST=${host}`,\n `-e N8N_PROTOCOL=https`,\n `-e WEBHOOK_URL=https://${host}/` ,\n `-e N8N_TRUST_PROXY=true`,\n `-e N8N_SECURE_COOKIE=true`,\n `-e NODES_EXCLUDE=[\"n8n-nodes-base.executeCommand\",\"n8n-nodes-base.localFileTrigger\"]`\n];\n\n// labels for Traefik routing\nconst labels = [\n `--label traefik.enable=true`,\n `--label traefik.http.routers.${containerName}.entrypoints=websecure`,\n `--label traefik.http.routers.${containerName}.rule=Host(\\`${host}\\`)`,\n `--label traefik.http.routers.${containerName}.tls.certresolver=letsencrypt`,\n `--label traefik.http.services.${containerName}.loadbalancer.server.port=5678`\n];\n\n// prepare docker commands\nconst cmdCreateVolume = `docker volume create ${volume}`;\nconst cmdRun = `docker run -d --name ${containerName} --restart unless-stopped --memory=${res.ram} --cpus=${res.cpus} -v ${volume}:/home/node/.n8n ${envs.join(' ')} ${labels.join(' ')} docker.n8n.io/n8nio/n8n`;\n\n// check existing container cmd\nconst cmdCheck = `docker ps -a --filter \\\"name=^/${containerName}$\\\" --format \\\"{{.Names}}\\\"`;\n\nreturn [ { json: { username, plan, domain, host, containerName, cmdCreateVolume, cmdRun, cmdCheck } } ];"},"name":"Build Commands","type":"n8n-nodes-base.function","typeVersion":1,"position":[-160,256],"id":"6b4138b5-495d-46a4-8a37-1ef01adb601a"},{"parameters":{"command":"={{$json.commandCheck}}"},"name":"Check Existing","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,192],"id":"33050773-1166-410e-af9a-2629b205483c"},{"parameters":{"functionCode":"const out = items[0].json;\nif (out && out.data && out.data.length) {\n const names = out.data.trim();\n if (names) throw new Error(`Container already exists: ${names}`);\n}\nreturn items;"},"name":"Fail If Exists","type":"n8n-nodes-base.function","typeVersion":1,"position":[336,192],"id":"8b770345-6008-45df-b449-648dc9181903"},{"parameters":{"command":"={{$json.cmdCreateVolume}}"},"name":"Create Volume","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,320],"id":"c3ef5fcd-65be-44ef-a8fa-dc1db8dc1621"},{"parameters":{"command":"={{$json.cmdRun}}"},"name":"Run Container","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[336,320],"id":"749ef316-deab-4898-805c-891900d0fed0"},{"parameters":{"functionCode":"const j = items[0].json;\nreturn [{ json: { success: true, host: j.host, container: j.containerName, message: 'Container creation triggered. Allow 10-30s to boot and acquire TLS.' } }];"},"name":"Prepare Response","type":"n8n-nodes-base.function","typeVersion":1,"position":[608,256],"id":"352f91c6-e900-433c-8d9b-b653cbf5e275"},{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook1","type":"n8n-nodes-base.webhook","typeVersion":1,"position":[-640,256],"id":"8e72c500-0d98-4892-b3bf-16633ffdb18f","webhookId":"91e8d5c0-cb20-4d3a-978a-db8e22e4073b"},{"parameters":{"options":{}},"name":"Respond1","type":"n8n-nodes-base.respondToWebhook","typeVersion":1,"position":[864,256],"id":"8d30d07b-7c63-43dd-89cc-fed8ec9d226b"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = `n8n.${user}.inmetech.cloud`;\n\nreturn [{\n json: {\n user,\n ram,\n cpu,\n domain,\n container: `n8n-${user}`,\n volume: `n8n_${user}`\n }\n}];"},"id":"9ddf7ecd-9b82-40df-82c7-63fc748fb79c","name":"Prepare Data","type":"n8n-nodes-base.function","position":[-672,1200],"typeVersion":1},{"parameters":{"command":"docker ps -a --format '{{.Names}}'"},"id":"0f259cf3-ccd1-481d-b237-bbb048f9ce3c","name":"List Containers","type":"n8n-nodes-base.executeCommand","position":[-416,1088],"typeVersion":1},{"parameters":{"functionCode":"const existing = $json.stdout || \"\";\nconst user = $items(\"Prepare Data\")[0].json.user;\n\nif (existing.includes(`n8n-${user}`)) {\n throw new Error(\"Container already exists\");\n}\n\nreturn $items(\"Prepare Data\");"},"id":"12aa3069-ada6-4845-ad2f-87af3d31bb85","name":"Check Duplicate","type":"n8n-nodes-base.function","position":[-160,1088],"typeVersion":1},{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"id":"fb6697e6-8815-4beb-936d-f16f1814cfdc","name":"Webhook2","type":"n8n-nodes-base.webhook","position":[-912,1200],"typeVersion":1,"webhookId":"c08aedad-597e-4ea4-b647-bccecb2c90f3"},{"parameters":{"functionCode":"const data = $json;\n\nconst cmd = `docker run -d \\\n--name ${data.container} \\\n--memory=${data.ram} \\\n--cpus=${data.cpu} \\\n-v ${data.volume}:/home/node/.n8n \\\n-e N8N_HOST=${data.domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${data.domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \\\"traefik.http.routers.${data.container}.rule=Host('${data.domain}')\\\" \\\n--label traefik.http.routers.${data.container}.entrypoints=websecure \\\n--label traefik.http.routers.${data.container}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.${data.container}.loadbalancer.server.port=5678 \\\n docker.n8n.io/n8nio/n8n`;\n\nreturn [{ json: { command: cmd, url: `https://${data.domain}` } }];"},"id":"36f16652-730e-4ff9-8978-16747fa1d8e3","name":"Build Docker Command1","type":"n8n-nodes-base.function","position":[96,1200],"typeVersion":1},{"parameters":{"command":"={{$json.command}}"},"id":"652ddbd1-09f1-4ac6-84c2-169a34d5016c","name":"Run Docker1","type":"n8n-nodes-base.executeCommand","position":[336,1200],"typeVersion":1},{"parameters":{"options":{}},"id":"2672e437-0f80-43fa-91ad-80805b69d424","name":"Respond2","type":"n8n-nodes-base.respondToWebhook","position":[592,1200],"typeVersion":1},{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"id":"009b5a49-b88a-4314-a3f1-89ed6eeffe93","name":"Webhook3","type":"n8n-nodes-base.webhook","position":[-976,1856],"typeVersion":1,"webhookId":"459de9ca-eec6-4e95-a7d0-772d0f1a514b"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = `n8n.${user}.inmetech.cloud`;\n\nreturn [{\n json: {\n user,\n ram,\n cpu,\n domain,\n container: `n8n-${user}`,\n volume: `n8n_${user}`\n }\n}];"},"id":"6447f14c-cc00-4a41-8984-9cf0b0cfa3bb","name":"Prepare Data1","type":"n8n-nodes-base.function","position":[-736,1856],"typeVersion":1},{"parameters":{"command":"docker ps -a --format '{{.Names}}'"},"id":"419de9af-19c1-4320-9542-ee2115dbb85e","name":"List Containers1","type":"n8n-nodes-base.executeCommand","position":[-480,1744],"typeVersion":1},{"parameters":{"functionCode":"const existing = $json.stdout || \"\";\nconst user = $items(\"Prepare Data\")[0].json.user;\n\nif (existing.includes(`n8n-${user}`)) {\n throw new Error(\"Container already exists\");\n}\n\nreturn $items(\"Prepare Data\");"},"id":"3ffadfe2-a97f-4184-94c4-b781fea47500","name":"Check Duplicate1","type":"n8n-nodes-base.function","position":[-224,1744],"typeVersion":1},{"parameters":{"functionCode":"const data = $json;\n\nconst cmd = `docker run -d \\\n--name ${data.container} \\\n--memory=${data.ram} \\\n--cpus=${data.cpu} \\\n-v ${data.volume}:/home/node/.n8n \\\n-e N8N_HOST=${data.domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${data.domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \\\"traefik.http.routers.${data.container}.rule=Host('${data.domain}')\\\" \\\n--label traefik.http.routers.${data.container}.entrypoints=websecure \\\n--label traefik.http.routers.${data.container}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.${data.container}.loadbalancer.server.port=5678 \\\n docker.n8n.io/n8nio/n8n`;\n\nreturn [{ json: { command: cmd, url: `https://${data.domain}` } }];"},"id":"fea1e447-d596-4039-9e60-cc9de087c024","name":"Build Docker Command2","type":"n8n-nodes-base.function","position":[32,1856],"typeVersion":1},{"parameters":{"command":"={{$json.command}}"},"id":"63857df6-328c-4324-84d8-87cf6168a149","name":"Run Docker2","type":"n8n-nodes-base.executeCommand","position":[272,1856],"typeVersion":1},{"parameters":{"options":{}},"id":"2a3d9c0d-7f65-4730-9f75-2ffe7f4543dc","name":"Respond3","type":"n8n-nodes-base.respondToWebhook","position":[528,1856],"typeVersion":1}]{"Webhook":{"main":[[{"node":"Build Docker Command","type":"main","index":0}]]},"Build Docker Command":{"main":[[{"node":"Run Docker","type":"main","index":0}]]},"Run Docker":{"main":[[{"node":"Respond","type":"main","index":0}]]},"Set Input":{"main":[[{"node":"Build Commands","type":"main","index":0}]]},"Build Commands":{"main":[[{"node":"Check Existing","type":"main","index":0},{"node":"Create Volume","type":"main","index":0}]]},"Check Existing":{"main":[[{"node":"Fail If Exists","type":"main","index":0}]]},"Fail If Exists":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Create Volume":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Run Container":{"main":[[{"node":"Prepare Response","type":"main","index":0}]]},"Prepare Response":{"main":[[{"node":"Respond1","type":"main","index":0}]]},"Webhook1":{"main":[[{"node":"Set Input","type":"main","index":0}]]},"Check Duplicate":{"main":[[{"node":"Build Docker Command1","type":"main","index":0}]]},"Webhook2":{"main":[[{"node":"Prepare Data","type":"main","index":0}]]},"Build Docker Command1":{"main":[[{"node":"Run Docker1","type":"main","index":0}]]},"Run Docker1":{"main":[[{"node":"Respond2","type":"main","index":0}]]},"Prepare Data":{"main":[[{"node":"List Containers","type":"main","index":0}]]},"List Containers":{"main":[[{"node":"Check Duplicate","type":"main","index":0}]]},"Webhook3":{"main":[[{"node":"Prepare Data1","type":"main","index":0}]]},"Check Duplicate1":{"main":[[{"node":"Build Docker Command2","type":"main","index":0}]]},"Build Docker Command2":{"main":[[{"node":"Run Docker2","type":"main","index":0}]]},"Run Docker2":{"main":[[{"node":"Respond3","type":"main","index":0}]]}}  Q Q U-O;;mC 36d1509a-6676-4676-b4eb-fe32fb63cc67ioR8eFBEVaKOkjc0RIZOWAN rizowansiddique@gmail.com2026-03-06 05:05:20.4702026-03-06 05:05:20.470[{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook","type":"n8n-nodes-base.webhook","position":[-192,-144],"typeVersion":1,"id":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","webhookId":"a4d792e3-b5b9-425f-b612-c938e71de65d"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = \"n8n.\" + user + \".inmetech.cloud\";\n\nconst cmd = `\ndocker run -d \\\n--name n8n-${user} \\\n--memory=${ram} \\\n--cpus=${cpu} \\\n-v n8n_${user}:/home/node/.n8n \\\n-e N8N_HOST=${domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \"traefik.http.routers.n8n-${user}.rule=Host('${domain}')\" \\\n--label traefik.http.routers.n8n-${user}.entrypoints=websecure \\\n--label traefik.http.routers.n8n-${user}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.n8n-${user}.loadbalancer.server.port=5678 \\\ndocker.n8n.io/n8nio/n8n\n`;\n\nreturn [{\n json: {\n command: cmd,\n url: \"https://\" + domain\n }\n}];"},"name":"Build Docker Command","type":"n8n-nodes-base.function","position":[112,-144],"typeVersion":1,"id":"7c91468e-80ea-4de5-8553-376dc01f0973"},{"parameters":{"command":"={{$json.command}}"},"name":"Run Docker","type":"n8n-nodes-base.executeCommand","position":[416,-144],"typeVersion":1,"id":"d049c848-745f-43ce-ad8f-2069344eb356"},{"parameters":{"options":{}},"name":"Resimple API key check (secure your webhook in production)\nconst providedKey = payload.apiKey || '';\nconst expected = process.env.API_KEY || '';\nif (!expected || providedKey !== expected) {\n throw new Error('Invalid API key');\n}\n\n// sanitize username\nlet raw = (payload.username || 'user').toString();\nlet username = raw.toLowerCase().replace(/[^a-z0-9\\-]/g, '').slice(0, 20) || 'user';\n\n// plan -> resources mapping (restrict to allowed values)\nconst plans = {\n basic: { ram: '1g', cpus: '0.5' },\n pro: { ram: '2g', cpus: '1' },\n agency: { ram: '4g', cpus: '2' }\n};\nconst plan = (payload.plan || 'basic').toLowerCase();\nconst res = plans[plan] || plans['basic'];\n\nconst domain = (payload.domain || process.env.DEFAULT_DOMAIN || 'inmetech.cloud').replace(/[^a-z0-9.\\-]/gi,'');\nconst subdomain = `n8n-${username}`;\nconst host = `${subdomain}.${domain}`;\nconst containerName = `n8n-${username}`;\nconst volume = `${containerName}_data`;\n\n// environment variables for each user container (disable dangerous nodes for clients)\nconst envs = [\n `-e N8N_HOST=${host}`,\n `-e N8N_PROTOCOL=https`,\n `-e WEBHOOK_URL=https://${host}/` ,\n `-e N8N_TRUST_PROXY=true`,\n `-e N8N_SECURE_COOKIE=true`,\n `-e NODES_EXCLUDE=[\"n8n-nodes-base.executeCommand\",\"n8n-nodes-base.localFileTrigger\"]`\n];\n\n// labels for Traefik routing\nconst labels = [\n `--label traefik.enable=true`,\n `--label traefik.http.routers.${containerName}.entrypoints=websecure`,\n `--label traefik.http.routers.${containerName}.rule=Host(\\`${host}\\`)`,\n `--label traefik.http.routers.${containerName}.tls.certresolver=letsencrypt`,\n `--label traefik.http.services.${containerName}.loadbalancer.server.port=5678`\n];\n\n// prepare docker commands\nconst cmdCreateVolume = `docker volume create ${volume}`;\nconst cmdRun = `docker run -d --name ${containerName} --restart unless-stopped --memory=${res.ram} --cpus=${res.cpus} -v ${volume}:/home/node/.n8n ${envs.join(' ')} ${labels.join(' ')} docker.n8n.io/n8nio/n8n`;\n\n// check existing container cmd\nconst cmdCheck = `docker ps -a --filter \\\"name=^/${containerName}$\\\" --format \\\"{{.Names}}\\\"`;\n\nreturn [ { json: { username, plan, domain, host, containerName, cmdCreateVolume, cmdRun, cmdCheck } } ];"},"name":"Build Commands","type":"n8n-nodes-base.function","typeVersion":1,"position":[-160,256],"id":"6b4138b5-495d-46a4-8a37-1ef01adb601a"},{"parameters":{"command":"={{$json.commandCheck}}"},"name":"Check Existing","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,192],"id":"33050773-1166-410e-af9a-2629b205483c"},{"parameters":{"functionCode":"const out = items[0].json;\nif (out && out.data && out.data.length) {\n const names = out.data.trim();\n if (names) throw new Error(`Container already exists: ${names}`);\n}\nreturn items;"},"name":"Fail If Exists","type":"n8n-nodes-base.function","typeVersion":1,"position":[336,192],"id":"8b770345-6008-45df-b449-648dc9181903"},{"parameters":{"command":"={{$json.cmdCreateVolume}}"},"name":"Create Volume","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,320],"id":"c3ef5fcd-65be-44ef-a8fa-dc1db8dc1621"},{"parameters":{"command":"={{$json.cmdRun}}"},"name":"Run Container","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[336,320],"id":"749ef316-deab-4898-805c-891900d0fed0"},{"parameters":{"functionCode":"const j = items[0].json;\nreturn [{ json: { success: true, host: j.host, container: j.containerName, message: 'Container creation triggered. Allow 10-30s to boot and acquire TLS.' } }];"},"name":"Prepare Response","type":"n8n-nodes-base.function","typeVersion":1,"position":[608,256],"id":"352f91c6-e900-433c-8d9b-b653cbf5e275"},{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook1","type":"n8n-nodes-base.webhook","typeVersion":1,"position":[-640,256],"id":"8e72c500-0d98-4892-b3bf-16633ffdb18f","webhookId":"91e8d5c0-cb20-4d3a-978a-db8e22e4073b"},{"parameters":{"options":{}},"name":"Respond1","type":"n8n-nodes-base.respondToWebhook","typeVersion":1,"position":[864,256],"id":"8d30d07b-7c63-43dd-89cc-fed8ec9d226b"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = `n8n.${user}.inmetech.cloud`;\n\nreturn [{\n json: {\n user,\n ram,\n cpu,\n domain,\n container: `n8n-${user}`,\n volume: `n8n_${user}`\n }\n}];"},"id":"9ddf7ecd-9b82-40df-82c7-63fc748fb79c","name":"Prepare Data","type":"n8n-nodes-base.function","position":[-672,1200],"typeVersion":1},{"parameters":{"command":"docker ps -a --format '{{.Names}}'"},"id":"0f259cf3-ccd1-481d-b237-bbb048f9ce3c","name":"List Containers","type":"n8n-nodes-base.executeCommand","position":[-416,1088],"typeVersion":1},{"parameters":{"functionCode":"const existing = $json.stdout || \"\";\nconst user = $items(\"Prepare Data\")[0].json.user;\n\nif (existing.includes(`n8n-${user}`)) {\n throw new Error(\"Container already exists\");\n}\n\nreturn $items(\"Prepare Data\");"},"id":"12aa3069-ada6-4845-ad2f-87af3d31bb85","name":"Check Duplicate","type":"n8n-nodes-base.function","position":[-160,1088],"typeVersion":1},{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"id":"fb6697e6-8815-4beb-936d-f16f1814cfdc","name":"Webhook2","type":"n8n-nodes-base.webhook","position":[-912,1200],"typeVersion":1,"webhookId":"c08aedad-597e-4ea4-b647-bccecb2c90f3"},{"parameters":{"functionCode":"const data = $json;\n\nconst cmd = `docker run -d \\\n--name ${data.container} \\\n--memory=${data.ram} \\\n--cpus=${data.cpu} \\\n-v ${data.volume}:/home/node/.n8n \\\n-e N8N_HOST=${data.domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${data.domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \\\"traefik.http.routers.${data.container}.rule=Host('${data.domain}')\\\" \\\n--label traefik.http.routers.${data.container}.entrypoints=websecure \\\n--label traefik.http.routers.${data.container}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.${data.container}.loadbalancer.server.port=5678 \\\n docker.n8n.io/n8nio/n8n`;\n\nreturn [{ json: { command: cmd, url: `https://${data.domain}` } }];"},"id":"36f16652-730e-4ff9-8978-16747fa1d8e3","name":"Build Docker Command1","type":"n8n-nodes-base.function","position":[96,1200],"typeVersion":1},{"parameters":{"command":"={{$json.command}}"},"id":"652ddbd1-09f1-4ac6-84c2-169a34d5016c","name":"Run Docker1","type":"n8n-nodes-base.executeCommand","position":[336,1200],"typeVersion":1},{"parameters":{"options":{}},"id":"2672e437-0f80-43fa-91ad-80805b69d424","name":"Respond2","type":"n8n-nodes-base.respondToWebhook","position":[592,1200],"typeVersion":1}]{"Webhook":{"main":[[{"node":"Build Docker Command","type":"main","index":0}]]},"Build Docker Command":{"main":[[{"node":"Run Docker","type":"main","index":0}]]},"Run Docker":{"main":[[{"node":"Respond","type":"main","index":0}]]},"Set Input":{"main":[[{"node":"Build Commands","type":"main","index":0}]]},"Build Commands":{"main":[[{"node":"Check Existing","type":"main","index":0},{"node":"Create Volume","type":"main","index":0}]]},"Check Existing":{"main":[[{"node":"Fail If Exists","type":"main","index":0}]]},"Fail If Exists":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Create Volume":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Run Container":{"main":[[{"node":"Prepare Response","type":"main","index":0}]]},"Prepare Response":{"main":[[{"node":"Respond1","type":"main","index":0}]]},"Webhook1":{"main":[[{"node":"Set Input","type":"main","index":0}]]},"Check Duplicate":{"main":[[{"node":"Build Docker Command1","type":"main","index":0}]]},"Webhook2":{"main":[[{"node":"Prepare Data","type":"main","index":0}]]},"Build Docker Command1":{"main":[[{"node":"Run Docker1","type":"main","index":0}]]},"Run Docker1":{"main":[[{"node":"Respond2","type":"main","index":0}]]},"Prepare Data":{"main":[[{"node":"List Containers","type":"main","index":0}]]},"List Containers":{"main":[[{"node":"Check Duplicate","type":"main","index":0}]]}} r U-O;;I 65eb6a08-e946-4793-ba82-6f40e7b8fabcioR8eFBEVaKOkjc0RIZOWAN rizowansiddique@gmail.com2026-03-06 05:05:25.4092026-03-06 05:05:25.409[{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook","type":"n8n-nodes-base.webhook","position":[-192,-144],"typeVersion":1,"id":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","webhookId":"a4d792e3-b5b9-425f-b612-c938e71de65d"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = \"n8n.\" + user + \".inmetech.cloud\";\n\nconst cmd = `\ndocker run -d \\\n--name n8n-${user} \\\n--memory=${ram} \\\n--cpus=${cpu} \\\n-v n8n_${user}:/home/node/.n8n \\\n-e N8N_HOST=${domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \"traefik.http.routers.n8n-${user}.rule=Host('${domain}')\" \\\n--label traefik.http.routers.n8n-${user}.entrypoints=websecure \\\n--label traefik.http.routers.n8n-${user}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.n8n-${user}.loadbalancer.server.port=5678 \\\ndocker.n8n.io/n8nio/n8n\n`;\n\nreturn [{\n json: {\n command: cmd,\n url: \"https://\" + domain\n }\n}];"},"name":"Build Docker Command","type":"n8n-nodes-base.function","position":[112,-144],"typeVersion":1,"id":"7c91468e-80ea-4de5-8553-376dc01f0973"},{"parameters":{"command":"={{$json.command}}"},"name":"Run Docker","type":"n8n-nodes-base.executeCommand","position":[416,-144],"typeVersion":1,"id":"d049c848-745f-43ce-ad8f-2069344eb356"},{"parameters":{"options":{}},"name":"Respond","type":"n8n-nodes-base.respondToWebhook","position":[672,-144],"typeVersion":1,"id":"c17c8373-bb00-4562-ae8f-c18a13839f0d"},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"user123"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[336,-400],"id":"9654e007-c6e7-4a2b-b48a-7ee7df40a1c0","name":"HTTP Request"},{"parameters":{"values":{"string":[{"name":"apiKey","value":"{{$json[\"apiKey\"] || $env.API_KEY || \"\"}}"},{"name":"username","value":"={{$json[\"username\"] || $json[\"email\"] || $json[\"user\"] || \"user\"}}"},{"name":"plan","value":"={{$json[\"plan\"] || \"basic\"}}"},{"name":"domain","value":"={{$json[\"domain\"] || $env.DEFAULT_DOMAIN || \"inmetech.cloud\"}}"}]},"options":{}},"name":"Set Input","type":"n8n-nodes-base.set","typeVersion":1,"position":[-400,256],"id":"503fad3f-a1b5-4820-a049-48dd916574f5"},{"parameters":{"functionCode":"const payload = items[0].json;\n\n// raw = (payload.username || 'user').toString();\nlet username = raw.toLowerCase().replace(/[^a-z0-9\\-]/g, '').slice(0, 20) || 'user';\n\n// plan -> resources mapping (restrict to allowed values)\nconst plans = {\n basic: { ram: '1g', cpus: '0.5' },\n pro: { ram: '2g', cpus: '1' },\n agency: { ram: '4g', cpus: '2' }\n};\nconst plan = (payload.plan || 'basic').toLowerCase();\nconst res = plans[plan] || plans['basic'];\n\nconst domain = (payload.domain || process.env.DEFAULT_DOMAIN || 'inmetech.cloud').replace(/[^a-z0-9.\\-]/gi,'');\nconst subdomain = `n8n-${username}`;\nconst host = `${subdomain}.${domain}`;\nconst containerName = `n8n-${username}`;\nconst volume = `${containerName}_data`;\n\n// environment variables for each user container (disable dangerous nodes for clients)\nconst envs = [\n `-e N8N_HOST=${host}`,\n `-e N8N_PROTOCOL=https`,\n `-e WEBHOOK_URL=https://${host}/` ,\n `-e N8N_TRUST_PROXY=true`,\n `-e N8N_SECURE_COOKIE=true`,\n `-e NODES_EXCLUDE=[\"n8n-nodes-base.executeCommand\",\"n8n-nodes-base.localFileTrigger\"]`\n];\n\n// labels for Traefik routing\nconst labels = [\n `--label traefik.enable=true`,\n `--label traefik.http.routers.${containerName}.entrypoints=websecure`,\n `--label traefik.http.routers.${containerName}.rule=Host(\\`${host}\\`)`,\n `--label traefik.http.routers.${containerName}.tls.certresolver=letsencrypt`,\n `--label traefik.http.services.${containerName}.loadbalancer.server.port=5678`\n];\n\n// prepare docker commands\nconst cmdCreateVolume = `docker volume create ${volume}`;\nconst cmdRun = `docker run -d --name ${containerName} --restart unless-stopped --memory=${res.ram} --cpus=${res.cpus} -v ${volume}:/home/node/.n8n ${envs.join(' ')} ${labels.join(' ')} docker.n8n.io/n8nio/n8n`;\n\n// check existing container cmd\nconst cmdCheck = `docker ps -a --filter \\\"name=^/${containerName}$\\\" --format \\\"{{.Names}}\\\"`;\n\nreturn [ { json: { username, plan, domain, host, containerName, cmdCreateVolume, cmdRun, cmdCheck } } ];"},"name":"Build Commands","type":"n8n-nodes-base.function","typeVersion":1,"position":[-160,256],"id":"6b4138b5-495d-46a4-8a37-1ef01adb601a"},{"parameters":{"command":"={{$json.commandCheck}}"},"name":"Check Existing","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,192],"id":"33050773-1166-410e-af9a-2629b205483c"},{"parameters":{"functionCode":"const out = items[0].json;\nif (out && out.data && out.data.length) {\n const names = out.data.trim();\n if (names) throw new Error(`Container already exists: ${names}`);\n}\nreturn items;"},"name":"Fail If Exists","type":"n8n-nodes-base.function","typeVersion":1,"position":[336,192],"id":"8b770345-6008-45df-b449-648dc9181903"},{"parameters":{"command":"={{$json.cmdCreateVolume}}"},"name":"Create Volume","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,320],"id":"c3ef5fcd-65be-44ef-a8fa-dc1db8dc1621"},{"parameters":{"command":"={{$json.cmdRun}}"},"name":"Run Container","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[336,320],"id":"749ef316-deab-4898-805c-891900d0fed0"},{"parameters":{"functionCode":"const j = items[0].json;\nreturn [{ json: { success: true, host: j.host, container: j.containerName, message: 'Container creation triggered. Allow 10-30s to boot and acquire TLS.' } }];"},"name":"Prepare Response","type":"n8n-nodes-base.function","typeVersion":1,"position":[608,256],"id":"352f91c6-e900-433c-8d9b-b653cbf5e275"},{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook1","type":"n8n-nodes-base.webhook","typeVersion":1,"position":[-640,256],"id":"8e72c500-0d98-4892-b3bf-16633ffdb18f","webhookId":"91e8d5c0-cb20-4d3a-978a-db8e22e4073b"},{"parameters":{"options":{}},"name":"Respond1","type":"n8n-nodes-base.respondToWebhook","typeVersion":1,"position":[864,256],"id":"8d30d07b-7c63-43dd-89cc-fed8ec9d226b"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = `n8n.${user}.inmetech.cloud`;\n\nreturn [{\n json: {\n user,\n ram,\n cpu,\n domain,\n container: `n8n-${user}`,\n volume: `n8n_${user}`\n }\n}];"},"id":"9ddf7ecd-9b82-40df-82c7-63fc748fb79c","name":"Prepare Data","type":"n8n-nodes-base.function","position":[-672,1200],"typeVersion":1},{"parameters":{"command":"docker ps -a --format '{{.Names}}'"},"id":"0f259cf3-ccd1-481d-b237-bbb048f9ce3c","name":"List Containers","type":"n8n-nodes-base.executeCommand","position":[-416,1088],"typeVersion":1},{"parameters":{"functionCode":"const existing = $json.stdout || \"\";\nconst user = $items(\"Prepare Data\")[0].json.user;\n\nif (existing.includes(`n8n-${user}`)) {\n throw new Error(\"Container already exists\");\n}\n\nreturn $items(\"Prepare Data\");"},"id":"12aa3069-ada6-4845-ad2f-87af3d31bb85","name":"Check Duplicate","type":"n8n-nodes-base.function","position":[-160,1088],"typeVersion":1},{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"id":"fb6697e6-8815-4beb-936d-f16f1814cfdc","name":"Webhook2","type":"n8n-nodes-base.webhook","position":[-912,1200],"typeVersion":1,"webhookId":"c08aedad-597e-4ea4-b647-bccecb2c90f3"},{"parameters":{"functionCode":"const data = $json;\n\nconst cmd = `docker run -d \\\n--name ${data.container} \\\n--memory=${data.ram} \\\n--cpus=${data.cpu} \\\n-v ${data.volume}:/home/node/.n8n \\\n-e N8N_HOST=${data.domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${data.domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \\\"traefik.http.routers.${data.container}.rule=Host('${data.domain}')\\\" \\\n--label traefik.http.routers.${data.container}.entrypoints=websecure \\\n--label traefik.http.routers.${data.container}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.${data.container}.loadbalancer.server.port=5678 \\\n docker.n8n.io/n8nio/n8n`;\n\nreturn [{ json: { command: cmd, url: `https://${data.domain}` } }];"},"id":"36f16652-730e-4ff9-8978-16747fa1d8e3","name":"Build Docker Command1","type":"n8n-nodes-base.function","position":[96,1200],"typeVersion":1},{"parameters":{"command":"={{$json.command}}"},"id":"652ddbd1-09f1-4ac6-84c2-169a34d5016c","name":"Run Docker1","type":"n8n-nodes-base.executeCommand","position":[336,1200],"typeVersion":1},{"parameters":{"options":{}},"id":"2672e437-0f80-43fa-91ad-80805b69d424","name":"Respond2","type":"n8n-nodes-base.respondToWebhook","position":[592,1200],"typeVersion":1},{"parameters":{"path":"ec0fa388-5055-4524-9adb-21dfd976f806","options":{}},"type":"n8n-nodes-base.webhook","typeVersion":2.1,"position":[-592,1664],"id":"84346f4e-5a9e-468d-b564-74fe7c1e8c99","name":"Webhook3","webhookId":"ec0fa388-5055-4524-9adb-21dfd976f806"}]{"Webhook":{"main":[[{"node":"Build Docker Command","type":"main","index":0}]]},"Build Docker Command":{"main":[[{"node":"Run Docker","type":"main","index":0}]]},"Run Docker":{"main":[[{"node":"Respond","type":"main","index":0}]]},"Set Input":{"main":[[{"node":"Build Commands","type":"main","index":0}]]},"Build Commands":{"main":[[{"node":"Check Existing","type":"main","index":0},{"node":"Create Volume","type":"main","index":0}]]},"Check Existing":{"main":[[{"node":"Fail If Exists","type":"main","index":0}]]},"Fail If Exists":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Create Volume":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Run Container":{"main":[[{"node":"Prepare Response","type":"main","index":0}]]},"Prepare Response":{"main":[[{"node":"Respond1","type":"main","index":0}]]},"Webhook1":{"main":[[{"node":"Set Input","type":"main","index":0}]]},"Check Duplicate":{"main":[[{"node":"Build Docker Command1","type":"main","index":0}]]},"Webhook2":{"main":[[{"node":"Prepare Data","type":"main","index":0}]]},"Build Docker Command1":{"main":[[{"node":"Run Docker1","type":"main","index":0}]]},"Run Docker1":{"main":[[{"node":"Respond2","type":"main","index":0}]]},"Prepare Data":{"main":[[{"node":"List Containers","type":"main","index":0}]]},"List Containers":{"main":[[{"node":"Check Duplicate","type":"main","index":0}]]}} x U-O;;I 4bf2016d-9c08-4a74-afca-1926ffdabfc7ioR8eFBEVaKOkjc0RIZOWAN rizowansiddique@gmail.com2026-03-06 05:05:40.6542026-03-06 05:05:40.654[{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook","type":"n8n-nodes-base.webhook","position":[-192,-144],"typeVersion":1,"id":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","webhookId":"a4d792e3-b5b9-425f-b612-c938e71de65d"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = \"n8n.\" + user + \".inmetech.cloud\";\n\nconst cmd = `\ndocker run -d \\\n--name n8n-${user} \\\n--memory=${ram} \\\n--cpus=${cpu} \\\n-v n8n_${user}:/home/node/.n8n \\\n-e N8N_HOST=${domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \"traefik.http.routers.n8n-${user}.rule=Host('${domain}')\" \\\n--label traefik.http.routers.n8n-${user}.entrypoints=websecure \\\n--label traefik.http.routers.n8n-${user}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.n8n-${user}.loadbalancer.server.port=5678 \\\ndocker.n8n.io/n8nio/n8n\n`;\n\nreturn [{\n json: {\n command: cmd,\n url: \"https://\" + domain\n }\n}];"},"name":"Build Docker Command","type":"n8n-nodes-base.function","position":[112,-144],"typeVersion":1,"id":"7c91468e-80ea-4de5-8553-376dc01f0973"},{"parameters":{"command":"={{$json.command}}"},"name":"Run Docker","type":"n8n-nodes-base.executeCommand","position":[416,-144],"typeVersion":1,"id":"d049c848-745f-43ce-ad8f-2069344eb356"},{"parameters":{"options":{}},"name":"Respond","type":"n8n-nodes-base.respondToWebhook","position":[672,-144],"typeVersion":1,"id":"c17c8373-bb00-4562-ae8f-c18a13839f0d"},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"user123"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[336,-400],"id":"9654e007-c6e7-4a2b-b48a-7ee7df40a1c0","name":"HTTP Request"},{"parameters":{"values":{"string":[{"name":"apiKey","value":"{{$json[\"apiKey\"] || $env.API_KEY || \"\"}}"},{"name":"username","value":"={{$json[\"username\"] || $json[\"email\"] || $json[\"user\"] || \"user\"}}"},{"name":"plan","value":"={{$json[\"plan\"] || \"basic\"}}"},{"name":"domain","value":"={{$json[\"domain\"] || $env.DEFAULT_DOMAIN || \"inmetech.cloud\"}}"}]},"options":{}},"name":"Set Input","type":"n8n-nodes-base.set","typeVersion":1,"position":[-400,256],"id":"503fad3f-a1b5-4820-a049-48dd916574f5"},{"parameters":{"functionCode":"const payload = items[0].json;\n\n// simple API key check (secure your webhook in production)\nconst providedKey = payload.apiKey || '';\nconst expected = process.env.API_KEY || '';\nif (!expected || providedKey !== expected) {\n throw new Error('Invalid API key');\n}\n\n// sanitize username\nlet simple API key check (secure your webhook in production)\nconst providedKey = payload.apiKey || '';\nconst expected = process.env.API_KEY || '';\nif (!expected || providedKey !== expected) {\n throw new Error('Invalid API key');\n}\n\n// sanitize username\nlet raw = (payload.username || 'user').toString();\nlet username = raw.toLowerCase().replace(/[^a-z0-9\\-]/g, '').slice(0, 20) || 'user';\n\n// plan -> resources mapping (restrict to allowed values)\nconst plans = {\n basic: { ram: '1g', cpus: '0.5' },\n pro: { ram: '2g', cpus: '1' },\n agency: { ram: '4g', cpus: '2' }\n};\nconst plan = (payload.plan || 'basic').toLowerCase();\nconst res = plans[plan] || plans['basic'];\n\nconst domain = (payload.domain || process.env.DEFAULT_DOMAIN || 'inmetech.cloud').replace(/[^a-z0-9.\\-]/gi,'');\nconst subdomain = `n8n-${username}`;\nconst host = `${subdomain}.${domain}`;\nconst containerName = `n8n-${username}`;\nconst volume = `${containerName}_data`;\n\n// environment variables for each user container (disable dangerous nodes for clients)\nconst envs = [\n `-e N8N_HOST=${host}`,\n `-e N8N_PROTOCOL=https`,\n `-e WEBHOOK_URL=https://${host}/` ,\n `-e N8N_TRUST_PROXY=true`,\n `-e N8N_SECURE_COOKIE=true`,\n `-e NODES_EXCLUDE=[\"n8n-nodes-base.executeCommand\",\"n8n-nodes-base.localFileTrigger\"]`\n];\n\n// labels for Traefik routing\nconst labels = [\n `--label traefik.enable=true`,\n `--label traefik.http.routers.${containerName}.entrypoints=websecure`,\n `--label traefik.http.routers.${containerName}.rule=Host(\\`${host}\\`)`,\n `--label traefik.http.routers.${containerName}.tls.certresolver=letsencrypt`,\n `--label traefik.http.services.${containerName}.loadbalancer.server.port=5678`\n];\n\n// prepare docker commands\nconst cmdCreateVolume = `docker volume create ${volume}`;\nconst cmdRun = `docker run -d --name ${containerName} --restart unless-stopped --memory=${res.ram} --cpus=${res.cpus} -v ${volume}:/home/node/.n8n ${envs.join(' ')} ${labels.join(' ')} docker.n8n.io/n8nio/n8n`;\n\n// check existing container cmd\nconst cmdCheck = `docker ps -a --filter \\\"name=^/${containerName}$\\\" --format \\\"{{.Names}}\\\"`;\n\nreturn [ { json: { username, plan, domain, host, containerName, cmdCreateVolume, cmdRun, cmdCheck } } ];"},"name":"Build Commands","type":"n8n-nodes-base.function","typeVersion":1,"position":[-160,256],"id":"6b4138b5-495d-46a4-8a37-1ef01adb601a"},{"parameters":{"command":"={{$json.commandCheck}}"},"name":"Check Existing","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,192],"id":"33050773-1166-410e-af9a-2629b205483c"},{"parameters":{"functionCode":"const out = items[0].json;\nif (out && out.data && out.data.length) {\n const names = out.data.trim();\n if (names) throw new Error(`Container already exists: ${names}`);\n}\nreturn items;"},"name":"Fail If Exists","type":"n8n-nodes-base.function","typeVersion":1,"position":[336,192],"id":"8b770345-6008-45df-b449-648dc9181903"},{"parameters":{"command":"={{$json.cmdCreateVolume}}"},"name":"Create Volume","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,320],"id":"c3ef5fcd-65be-44ef-a8fa-dc1db8dc1621"},{"parameters":{"command":"={{$json.cmdRun}}"},"name":"Run Container","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[336,320],"id":"749ef316-deab-4898-805c-891900d0fed0"},{"parameters":{"functionCode":"const j = items[0].json;\nreturn [{ json: { success: true, host: j.host, container: j.containerName, message: 'Container creation triggered. Allow 10-30s to boot and acquire TLS.' } }];"},"name":"Prepare Response","type":"n8n-nodes-base.function","typeVersion":1,"position":[608,256],"id":"352f91c6-e900-433c-8d9b-b653cbf5e275"},{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook1","type":"n8n-nodes-base.webhook","typeVersion":1,"position":[-640,256],"id":"8e72c500-0d98-4892-b3bf-16633ffdb18f","webhookId":"91e8d5c0-cb20-4d3a-978a-db8e22e4073b"},{"parameters":{"options":{}},"name":"Respond1","type":"n8n-nodes-base.respondToWebhook","typeVersion":1,"position":[864,256],"id":"8d30d07b-7c63-43dd-89cc-fed8ec9d226b"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = `n8n.${user}.inmetech.cloud`;\n\nreturn [{\n json: {\n user,\n ram,\n cpu,\n domain,\n container: `n8n-${user}`,\n volume: `n8n_${user}`\n }\n}];"},"id":"9ddf7ecd-9b82-40df-82c7-63fc748fb79c","name":"Prepare Data","type":"n8n-nodes-base.function","position":[-672,1200],"typeVersion":1},{"parameters":{"command":"docker ps -a --format '{{.Names}}'"},"id":"0f259cf3-ccd1-481d-b237-bbb048f9ce3c","name":"List Containers","type":"n8n-nodes-base.executeCommand","position":[-416,1088],"typeVersion":1},{"parameters":{"functionCode":"const existing = $json.stdout || \"\";\nconst user = $items(\"Prepare Data\")[0].json.user;\n\nif (existing.includes(`n8n-${user}`)) {\n throw new Error(\"Container already exists\");\n}\n\nreturn $items(\"Prepare Data\");"},"id":"12aa3069-ada6-4845-ad2f-87af3d31bb85","name":"Check Duplicate","type":"n8n-nodes-base.function","position":[-160,1088],"typeVersion":1},{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"id":"fb6697e6-8815-4beb-936d-f16f1814cfdc","name":"Webhook2","type":"n8n-nodes-base.webhook","position":[-912,1200],"typeVersion":1,"webhookId":"c08aedad-597e-4ea4-b647-bccecb2c90f3"},{"parameters":{"functionCode":"const data = $json;\n\nconst cmd = `docker run -d \\\n--name ${data.container} \\\n--memory=${data.ram} \\\n--cpus=${data.cpu} \\\n-v ${data.volume}:/home/node/.n8n \\\n-e N8N_HOST=${data.domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${data.domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \\\"traefik.http.routers.${data.container}.rule=Host('${data.domain}')\\\" \\\n--label traefik.http.routers.${data.container}.entrypoints=websecure \\\n--label traefik.http.routers.${data.container}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.${data.container}.loadbalancer.server.port=5678 \\\n docker.n8n.io/n8nio/n8n`;\n\nreturn [{ json: { command: cmd, url: `https://${data.domain}` } }];"},"id":"36f16652-730e-4ff9-8978-16747fa1d8e3","name":"Build Docker Command1","type":"n8n-nodes-base.function","position":[96,1200],"typeVersion":1},{"parameters":{"command":"={{$json.command}}"},"id":"652ddbd1-09f1-4ac6-84c2-169a34d5016c","name":"Run Docker1","type":"n8n-nodes-base.executeCommand","position":[336,1200],"typeVersion":1},{"parameters":{"options":{}},"id":"2672e437-0f80-43fa-91ad-80805b69d424","name":"Respond2","type":"n8n-nodes-base.respondToWebhook","position":[592,1200],"typeVersion":1}]{"Webhook":{"main":[[{"node":"Build Docker Command","type":"main","index":0}]]},"Build Docker Command":{"main":[[{"node":"Run Docker","type":"main","index":0}]]},"Run Docker":{"main":[[{"node":"Respond","type":"main","index":0}]]},"Set Input":{"main":[[{"node":"Build Commands","type":"main","index":0}]]},"Build Commands":{"main":[[{"node":"Check Existing","type":"main","index":0},{"node":"Create Volume","type":"main","index":0}]]},"Check Existing":{"main":[[{"node":"Fail If Exists","type":"main","index":0}]]},"Fail If Exists":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Create Volume":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Run Container":{"main":[[{"node":"Prepare Response","type":"main","index":0}]]},"Prepare Response":{"main":[[{"node":"Respond1","type":"main","index":0}]]},"Webhook1":{"main":[[{"node":"Set Input","type":"main","index":0}]]},"Check Duplicate":{"main":[[{"node":"Build Docker Command1","type":"main","index":0}]]},"Webhook2":{"main":[[{"node":"Prepare Data","type":"main","index":0}]]},"Build Docker Command1":{"main":[[{"node":"Run Docker1","type":"main","index":0}]]},"Run Docker1":{"main":[[{"node":"Respond2","type":"main","index":0}]]},"Prepare Data":{"main":[[{"node":"List Containers","type":"main","index":0}]]},"List Containers":{"main":[[{"node":"Check Duplicate","type":"main","index":0}]]}} r U-O;;I 36a5005f-c69a-434c-a24f-63076b19735bioR8eFBEVaKOkjc0RIZOWAN rizowansiddique@gmail.com2026-03-06 05:05:46.0852026-03-06 05:05:46.085[{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook","type":"n8n-nodes-base.webhook","position":[-192,-144],"typeVersion":1,"id":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","webhookId":"a4d792e3-b5b9-425f-b612-c938e71de65d"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = \"n8n.\" + user + \".inmetech.cloud\";\n\nconst cmd = `\ndocker run -d \\\n--name n8n-${user} \\\n--memory=${ram} \\\n--cpus=${cpu} \\\n-v n8n_${user}:/home/node/.n8n \\\n-e N8N_HOST=${domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \"traefik.http.routers.n8n-${user}.rule=Host('${domain}')\" \\\n--label traefik.http.routers.n8n-${user}.entrypoints=websecure \\\n--label traefik.http.routers.n8n-${user}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.n8n-${user}.loadbalancer.server.port=5678 \\\ndocker.n8n.io/n8nio/n8n\n`;\n\nreturn [{\n json: {\n command: cmd,\n url: \"https://\" + domain\n }\n}];"},"name":"Build Docker Command","type":"n8n-nodes-base.function","position":[112,-144],"typeVersion":1,"id":"7c91468e-80ea-4de5-8553-376dc01f0973"},{"parameters":{"command":"={{$json.command}}"},"name":"Run Docker","type":"n8n-nodes-base.executeCommand","position":[416,-144],"typeVersion":1,"id":"d049c848-745f-43ce-ad8f-2069344eb356"},{"parameters":{"options":{}},"name":"Respond","type":"n8n-nodes-base.respondToWebhook","position":[672,-144],"typeVersion":1,"id":"c17c8373-bb00-4562-ae8f-c18a13839f0d"},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"user123"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[336,-400],"id":"9654e007-c6e7-4a2b-b48a-7ee7df40a1c0","name":"HTTP Request"},{"parameters":{"values":{"string":[{"name":"apiKey","value":"{{$json[\"apiKey\"] || $env.API_KEY || \"\"}}"},{"name":"username","value":"={{$json[\"username\"] || $json[\"email\"] || $json[\"user\"] || \"user\"}}"},{"name":"plan","value":"={{$json[\"plan\"] || \"basic\"}}"},{"name":"domain","value":"={{$json[\"domain\"] || $env.DEFAULT_DOMAIN || \"inmetech.cloud\"}}"}]},"options":{}},"name":"Set Input","type":"n8n-nodes-base.set","typeVersion":1,"position":[-400,256],"id":"503fad3f-a1b5-4820-a049-48dd916574f5"},{"parameters":{"functionCode":"const payload = items[0].json;\n\n// !== expected) {\n throw new Error('Invalid API key');\n}\n\n// sanitize username\nlet raw = (payload.username || 'user').toString();\nlet username = raw.toLowerCase().replace(/[^a-z0-9\\-]/g, '').slice(0, 20) || 'user';\n\n// plan -> resources mapping (restrict to allowed values)\nconst plans = {\n basic: { ram: '1g', cpus: '0.5' },\n pro: { ram: '2g', cpus: '1' },\n agency: { ram: '4g', cpus: '2' }\n};\nconst plan = (payload.plan || 'basic').toLowerCase();\nconst res = plans[plan] || plans['basic'];\n\nconst domain = (payload.domain || process.env.DEFAULT_DOMAIN || 'inmetech.cloud').replace(/[^a-z0-9.\\-]/gi,'');\nconst subdomain = `n8n-${username}`;\nconst host = `${subdomain}.${domain}`;\nconst containerName = `n8n-${username}`;\nconst volume = `${containerName}_data`;\n\n// environment variables for each user container (disable dangerous nodes for clients)\nconst envs = [\n `-e N8N_HOST=${host}`,\n `-e N8N_PROTOCOL=https`,\n `-e WEBHOOK_URL=https://${host}/` ,\n `-e N8N_TRUST_PROXY=true`,\n `-e N8N_SECURE_COOKIE=true`,\n `-e NODES_EXCLUDE=[\"n8n-nodes-base.executeCommand\",\"n8n-nodes-base.localFileTrigger\"]`\n];\n\n// labels for Traefik routing\nconst labels = [\n `--label traefik.enable=true`,\n `--label traefik.http.routers.${containerName}.entrypoints=websecure`,\n `--label traefik.http.routers.${containerName}.rule=Host(\\`${host}\\`)`,\n `--label traefik.http.routers.${containerName}.tls.certresolver=letsencrypt`,\n `--label traefik.http.services.${containerName}.loadbalancer.server.port=5678`\n];\n\n// prepare docker commands\nconst cmdCreateVolume = `docker volume create ${volume}`;\nconst cmdRun = `docker run -d --name ${containerName} --restart unless-stopped --memory=${res.ram} --cpus=${res.cpus} -v ${volume}:/home/node/.n8n ${envs.join(' ')} ${labels.join(' ')} docker.n8n.io/n8nio/n8n`;\n\n// check existing container cmd\nconst cmdCheck = `docker ps -a --filter \\\"name=^/${containerName}$\\\" --format \\\"{{.Names}}\\\"`;\n\nreturn [ { json: { username, plan, domain, host, containerName, cmdCreateVolume, cmdRun, cmdCheck } } ];"},"name":"Build Commands","type":"n8n-nodes-base.function","typeVersion":1,"position":[-160,256],"id":"6b4138b5-495d-46a4-8a37-1ef01adb601a"},{"parameters":{"command":"={{$json.commandCheck}}"},"name":"Check Existing","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,192],"id":"33050773-1166-410e-af9a-2629b205483c"},{"parameters":{"functionCode":"const out = items[0].json;\nif (out && out.data && out.data.length) {\n const names = out.data.trim();\n if (names) throw new Error(`Container already exists: ${names}`);\n}\nreturn items;"},"name":"Fail If Exists","type":"n8n-nodes-base.function","typeVersion":1,"position":[336,192],"id":"8b770345-6008-45df-b449-648dc9181903"},{"parameters":{"command":"={{$json.cmdCreateVolume}}"},"name":"Create Volume","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,320],"id":"c3ef5fcd-65be-44ef-a8fa-dc1db8dc1621"},{"parameters":{"command":"={{$json.cmdRun}}"},"name":"Run Container","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[336,320],"id":"749ef316-deab-4898-805c-891900d0fed0"},{"parameters":{"functionCode":"const j = items[0].json;\nreturn [{ json: { success: true, host: j.host, container: j.containerName, message: 'Container creation triggered. Allow 10-30s to boot and acquire TLS.' } }];"},"name":"Prepare Response","type":"n8n-nodes-base.function","typeVersion":1,"position":[608,256],"id":"352f91c6-e900-433c-8d9b-b653cbf5e275"},{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook1","type":"n8n-nodes-base.webhook","typeVersion":1,"position":[-640,256],"id":"8e72c500-0d98-4892-b3bf-16633ffdb18f","webhookId":"91e8d5c0-cb20-4d3a-978a-db8e22e4073b"},{"parameters":{"options":{}},"name":"Respond1","type":"n8n-nodes-base.respondToWebhook","typeVersion":1,"position":[864,256],"id":"8d30d07b-7c63-43dd-89cc-fed8ec9d226b"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = `n8n.${user}.inmetech.cloud`;\n\nreturn [{\n json: {\n user,\n ram,\n cpu,\n domain,\n container: `n8n-${user}`,\n volume: `n8n_${user}`\n }\n}];"},"id":"9ddf7ecd-9b82-40df-82c7-63fc748fb79c","name":"Prepare Data","type":"n8n-nodes-base.function","position":[-672,1200],"typeVersion":1},{"parameters":{"command":"docker ps -a --format '{{.Names}}'"},"id":"0f259cf3-ccd1-481d-b237-bbb048f9ce3c","name":"List Containers","type":"n8n-nodes-base.executeCommand","position":[-416,1088],"typeVersion":1},{"parameters":{"functionCode":"const existing = $json.stdout || \"\";\nconst user = $items(\"Prepare Data\")[0].json.user;\n\nif (existing.includes(`n8n-${user}`)) {\n throw new Error(\"Container already exists\");\n}\n\nreturn $items(\"Prepare Data\");"},"id":"12aa3069-ada6-4845-ad2f-87af3d31bb85","name":"Check Duplicate","type":"n8n-nodes-base.function","position":[-160,1088],"typeVersion":1},{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"id":"fb6697e6-8815-4beb-936d-f16f1814cfdc","name":"Webhook2","type":"n8n-nodes-base.webhook","position":[-912,1200],"typeVersion":1,"webhookId":"c08aedad-597e-4ea4-b647-bccecb2c90f3"},{"parameters":{"functionCode":"const data = $json;\n\nconst cmd = `docker run -d \\\n--name ${data.container} \\\n--memory=${data.ram} \\\n--cpus=${data.cpu} \\\n-v ${data.volume}:/home/node/.n8n \\\n-e N8N_HOST=${data.domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${data.domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \\\"traefik.http.routers.${data.container}.rule=Host('${data.domain}')\\\" \\\n--label traefik.http.routers.${data.container}.entrypoints=websecure \\\n--label traefik.http.routers.${data.container}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.${data.container}.loadbalancer.server.port=5678 \\\n docker.n8n.io/n8nio/n8n`;\n\nreturn [{ json: { command: cmd, url: `https://${data.domain}` } }];"},"id":"36f16652-730e-4ff9-8978-16747fa1d8e3","name":"Build Docker Command1","type":"n8n-nodes-base.function","position":[96,1200],"typeVersion":1},{"parameters":{"command":"={{$json.command}}"},"id":"652ddbd1-09f1-4ac6-84c2-169a34d5016c","name":"Run Docker1","type":"n8n-nodes-base.executeCommand","position":[336,1200],"typeVersion":1},{"parameters":{"options":{}},"id":"2672e437-0f80-43fa-91ad-80805b69d424","name":"Respond2","type":"n8n-nodes-base.respondToWebhook","position":[592,1200],"typeVersion":1},{"parameters":{"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[-592,1664],"id":"6699443d-0372-4cbf-958a-e890a12c5381","name":"HTTP Request1"}]{"Webhook":{"main":[[{"node":"Build Docker Command","type":"main","index":0}]]},"Build Docker Command":{"main":[[{"node":"Run Docker","type":"main","index":0}]]},"Run Docker":{"main":[[{"node":"Respond","type":"main","index":0}]]},"Set Input":{"main":[[{"node":"Build Commands","type":"main","index":0}]]},"Build Commands":{"main":[[{"node":"Check Existing","type":"main","index":0},{"node":"Create Volume","type":"main","index":0}]]},"Check Existing":{"main":[[{"node":"Fail If Exists","type":"main","index":0}]]},"Fail If Exists":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Create Volume":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Run Container":{"main":[[{"node":"Prepare Response","type":"main","index":0}]]},"Prepare Response":{"main":[[{"node":"Respond1","type":"main","index":0}]]},"Webhook1":{"main":[[{"node":"Set Input","type":"main","index":0}]]},"Check Duplicate":{"main":[[{"node":"Build Docker Command1","type":"main","index":0}]]},"Webhook2":{"main":[[{"node":"Prepare Data","type":"main","index":0}]]},"Build Docker Command1":{"main":[[{"node":"Run Docker1","type":"main","index":0}]]},"Run Docker1":{"main":[[{"node":"Respond2","type":"main","index":0}]]},"Prepare Data":{"main":[[{"node":"List Containers","type":"main","index":0}]]},"List Containers":{"main":[[{"node":"Check Duplicate","type":"main","index":0}]]}} QQ U-O;;oI fc47ad8e-caf4-428e-a45a-8e8a7bd70196ioR8eFBEVaKOkjc0RIZOWAN rizowansiddique@gmail.com2026-03-06 05:05:50.8252026-03-06 05:05:50.825[{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook","type":"n8n-nodes-base.webhook","position":[-192,-144],"typeVersion":1,"id":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","webhookId":"a4d792e3-b5b9-425f-b612-c938e71de65d"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = \"n8n.\" + user + \".inmetech.cloud\";\n\nconst cmd = `\ndocker run -d \\\n--name n8n-${user} \\\n--memory=${ram} \\\n--cpus=${cpu} \\\n-v n8n_${user}:/home/node/.n8n \\\n-e N8N_HOST=${domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \"traefik.http.routers.n8n-${user}.rule=Host('${domain}')\" \\\n--label traefik.http.routers.n8n-${user}.entrypoints=websecure \\\n--label traefik.http.routers.n8n-${user}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.n8n-${user}.loadbalancer.server.port=5678 \\\ndocker.n8n.io/n8nio/n8n\n`;\n\nreturn [{\n json: {\n command: cmd,\n url: \"https://\" + domain\n }\n}];"},"name":"Build Docker Command","type":"n8n-nodes-base.function","position":[112,-144],"typeVersion":1,"id":"7c91468e-80ea-4de5-8553-376dc01f0973"},{"parameters":{"command":"={{$json.command}}"},"name":"Run Docker","type":"n8n-nodes-base.executeCommand","position":[416,-144],"typeVersion":1,"id":"d049c848-745f-43ce-ad8f-2069344eb356"},{"parameters":{"options":{}},"name":"Respond","type":"n8n-nodes-base.respondToWebhook","position":[672,-144],"typeVersion":1,"id":"c17c8373-bb00-4562-ae8f-c18a13839f0d"},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"user123"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[336,-400],"id":"9654e007-c6e7-4a2b-b48a-7ee7df40a1c0","name":"HTTP Request"},{"parameters":{"values":{"string":[{"name":"apiKey","value":"{{$json[\"apiKey\"] || $env.API_KEY || \"\"}}"},{"name":"username","value":"={{$json[\"username\"] || $json[\"email\"] || $json[\"user\"] || \"user\"}}"},{"name":"plan","value":"={{$json[\"plan\"] || \"basic\"}}"},{"name":"domain","value":"={{$json[\"domain\"] || $env.DEFAULT_DOMAIN || \"inmetech.cloud\"}}"}]},"options":{}},"name":"Set Input","type":"n8n-nodes-base.set","typeVersion":1,"position":[-400,256],"id":"503fad3f-a1b5-4820-a049-48dd916574f5"},{"parameters":{"functionCode":"const payload = items[0].json;\n\n// simple API key check (secure your webhook in production)\nconst providedKey = payload.apiKey || '';\nconst expected = process.env.API_KEY || '';\nif (!expected || providedKeyser';\n\n// plan -> resources mapping (restrict to allowed values)\nconst plans = {\n basic: { ram: '1g', cpus: '0.5' },\n pro: { ram: '2g', cpus: '1' },\n agency: { ram: '4g', cpus: '2' }\n};\nconst plan = (payload.plan || 'basic').toLowerCase();\nconst res = plans[plan] || plans['basic'];\n\nconst domain = (payload.domain || process.env.DEFAULT_DOMAIN || 'inmetech.cloud').replace(/[^a-z0-9.\\-]/gi,'');\nconst subdomain = `n8n-${username}`;\nconst host = `${subdomain}.${domain}`;\nconst containerName = `n8n-${username}`;\nconst volume = `${containerName}_data`;\n\n// environment variables for each user container (disable dangerous nodes for clients)\nconst envs = [\n `-e N8N_HOST=${host}`,\n `-e N8N_PROTOCOL=https`,\n `-e WEBHOOK_URL=https://${host}/` ,\n `-e N8N_TRUST_PROXY=true`,\n `-e N8N_SECURE_COOKIE=true`,\n `-e NODES_EXCLUDE=[\"n8n-nodes-base.executeCommand\",\"n8n-nodes-base.localFileTrigger\"]`\n];\n\n// labels for Traefik routing\nconst labels = [\n `--label traefik.enable=true`,\n `--label traefik.http.routers.${containerName}.entrypoints=websecure`,\n `--label traefik.http.routers.${containerName}.rule=Host(\\`${host}\\`)`,\n `--label traefik.http.routers.${containerName}.tls.certresolver=letsencrypt`,\n `--label traefik.http.services.${containerName}.loadbalancer.server.port=5678`\n];\n\n// prepare docker commands\nconst cmdCreateVolume = `docker volume create ${volume}`;\nconst cmdRun = `docker run -d --name ${containerName} --restart unless-stopped --memory=${res.ram} --cpus=${res.cpus} -v ${volume}:/home/node/.n8n ${envs.join(' ')} ${labels.join(' ')} docker.n8n.io/n8nio/n8n`;\n\n// check existing container cmd\nconst cmdCheck = `docker ps -a --filter \\\"name=^/${containerName}$\\\" --format \\\"{{.Names}}\\\"`;\n\nreturn [ { json: { username, plan, domain, host, containerName, cmdCreateVolume, cmdRun, cmdCheck } } ];"},"name":"Build Commands","type":"n8n-nodes-base.function","typeVersion":1,"position":[-160,256],"id":"6b4138b5-495d-46a4-8a37-1ef01adb601a"},{"parameters":{"command":"={{$json.commandCheck}}"},"name":"Check Existing","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,192],"id":"33050773-1166-410e-af9a-2629b205483c"},{"parameters":{"functionCode":"const out = items[0].json;\nif (out && out.data && out.data.length) {\n const names = out.data.trim();\n if (names) throw new Error(`Container already exists: ${names}`);\n}\nreturn items;"},"name":"Fail If Exists","type":"n8n-nodes-base.function","typeVersion":1,"position":[336,192],"id":"8b770345-6008-45df-b449-648dc9181903"},{"parameters":{"command":"={{$json.cmdCreateVolume}}"},"name":"Create Volume","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,320],"id":"c3ef5fcd-65be-44ef-a8fa-dc1db8dc1621"},{"parameters":{"command":"={{$json.cmdRun}}"},"name":"Run Container","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[336,320],"id":"749ef316-deab-4898-805c-891900d0fed0"},{"parameters":{"functionCode":"const j = items[0].json;\nreturn [{ json: { success: true, host: j.host, container: j.containerName, message: 'Container creation triggered. Allow 10-30s to boot and acquire TLS.' } }];"},"name":"Prepare Response","type":"n8n-nodes-base.function","typeVersion":1,"position":[608,256],"id":"352f91c6-e900-433c-8d9b-b653cbf5e275"},{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook1","type":"n8n-nodes-base.webhook","typeVersion":1,"position":[-640,256],"id":"8e72c500-0d98-4892-b3bf-16633ffdb18f","webhookId":"91e8d5c0-cb20-4d3a-978a-db8e22e4073b"},{"parameters":{"options":{}},"name":"Respond1","type":"n8n-nodes-base.respondToWebhook","typeVersion":1,"position":[864,256],"id":"8d30d07b-7c63-43dd-89cc-fed8ec9d226b"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = `n8n.${user}.inmetech.cloud`;\n\nreturn [{\n json: {\n user,\n ram,\n cpu,\n domain,\n container: `n8n-${user}`,\n volume: `n8n_${user}`\n }\n}];"},"id":"9ddf7ecd-9b82-40df-82c7-63fc748fb79c","name":"Prepare Data","type":"n8n-nodes-base.function","position":[-672,1200],"typeVersion":1},{"parameters":{"command":"docker ps -a --format '{{.Names}}'"},"id":"0f259cf3-ccd1-481d-b237-bbb048f9ce3c","name":"List Containers","type":"n8n-nodes-base.executeCommand","position":[-416,1088],"typeVersion":1},{"parameters":{"functionCode":"const existing = $json.stdout || \"\";\nconst user = $items(\"Prepare Data\")[0].json.user;\n\nif (existing.includes(`n8n-${user}`)) {\n throw new Error(\"Container already exists\");\n}\n\nreturn $items(\"Prepare Data\");"},"id":"12aa3069-ada6-4845-ad2f-87af3d31bb85","name":"Check Duplicate","type":"n8n-nodes-base.function","position":[-160,1088],"typeVersion":1},{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"id":"fb6697e6-8815-4beb-936d-f16f1814cfdc","name":"Webhook2","type":"n8n-nodes-base.webhook","position":[-912,1200],"typeVersion":1,"webhookId":"c08aedad-597e-4ea4-b647-bccecb2c90f3"},{"parameters":{"functionCode":"const data = $json;\n\nconst cmd = `docker run -d \\\n--name ${data.container} \\\n--memory=${data.ram} \\\n--cpus=${data.cpu} \\\n-v ${data.volume}:/home/node/.n8n \\\n-e N8N_HOST=${data.domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${data.domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \\\"traefik.http.routers.${data.container}.rule=Host('${data.domain}')\\\" \\\n--label traefik.http.routers.${data.container}.entrypoints=websecure \\\n--label traefik.http.routers.${data.container}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.${data.container}.loadbalancer.server.port=5678 \\\n docker.n8n.io/n8nio/n8n`;\n\nreturn [{ json: { command: cmd, url: `https://${data.domain}` } }];"},"id":"36f16652-730e-4ff9-8978-16747fa1d8e3","name":"Build Docker Command1","type":"n8n-nodes-base.function","position":[96,1200],"typeVersion":1},{"parameters":{"command":"={{$json.command}}"},"id":"652ddbd1-09f1-4ac6-84c2-169a34d5016c","name":"Run Docker1","type":"n8n-nodes-base.executeCommand","position":[336,1200],"typeVersion":1},{"parameters":{"options":{}},"id":"2672e437-0f80-43fa-91ad-80805b69d424","name":"Respond2","type":"n8n-nodes-base.respondToWebhook","position":[592,1200],"typeVersion":1},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"user1"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[-592,1664],"id":"6699443d-0372-4cbf-958a-e890a12c5381","name":"HTTP Request1"}]{"Webhook":{"main":[[{"node":"Build Docker Command","type":"main","index":0}]]},"Build Docker Command":{"main":[[{"node":"Run Docker","type":"main","index":0}]]},"Run Docker":{"main":[[{"node":"Respond","type":"main","index":0}]]},"Set Input":{"main":[[{"node":"Build Commands","type":"main","index":0}]]},"Build Commands":{"main":[[{"node":"Check Existing","type":"main","index":0},{"node":"Create Volume","type":"main","index":0}]]},"Check Existing":{"main":[[{"node":"Fail If Exists","type":"main","index":0}]]},"Fail If Exists":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Create Volume":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Run Container":{"main":[[{"node":"Prepare Response","type":"main","index":0}]]},"Prepare Response":{"main":[[{"node":"Respond1","type":"main","index":0}]]},"Webhook1":{"main":[[{"node":"Set Input","type":"main","index":0}]]},"Check Duplicate":{"main":[[{"node":"Build Docker Command1","type":"main","index":0}]]},"Webhook2":{"main":[[{"node":"Prepare Data","type":"main","index":0}]]},"Build Docker Command1":{"main":[[{"node":"Run Docker1","type":"main","index":0}]]},"Run Docker1":{"main":[[{"node":"Respond2","type":"main","index":0}]]},"Prepare Data":{"main":[[{"node":"List Containers","type":"main","index":0}]]},"List Containers":{"main":[[{"node":"Check Duplicate","type":"main","index":0}]]}} yyxU-O;;I 31cf9688-316a-4cc4-a8df-ba01116bebf5ioR8eFBEVaKOkjc0RIZOWAN rizowansiddique@gmail.com2026-03-06 05:05:54.4602026-03-06 05:05:54.460[{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook","type":"n8n-nodes-base.webhook","position":[-192,-144],"typeVersion":1,"id":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","webhookId":"a4d792e3-b5b9-425f-b612-c938e71de65d"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = \"n8n.\" + user + \".inmetech.cloud\";\n\nconst cmd = `\ndocker run -d \\\n--name n8n-${user} \\\n--memory=${ram} \\\n--cpus=${cpu} \\\n-v n8n_${user}:/home/node/.n8n \\\n-e N8N_HOST=${domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \"traefik.http.routers.n8n-${user}.rule=Host('${domain}')\" \\\n--label traefik.http.routers.n8n-${user}.entrypoints=websecure \\\n--label traefik.http.routers.n8n-${user}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.n8n-${user}.loadbalancer.server.port=5678 \\\ndocker.n8n.io/n8nio/n8n\n`;\n\nreturn [{\n json: {\n command: cmd,\n url: \"https://\" + domain\n }\n}];"},"name":"Build Docker Command","type":"n8n-nodes-base.function","position":[112,-144],"typeVersion":1,"id":"7c91468e-80ea-4de5-8553-376dc01f0973"},{"parameters":{"command":"={{$json.command}}"},"name":"Run Docker","type":"n8n-nodes-base.executeCommand","position":[416,-144],"typeVersion":1,"id":"d049c848-745f-43ce-ad8f-2069344eb356"},{"parameters":{"options":{}},"name":"Respond","type":"n8n-nodes-base.respondToWebhook","position":[672,-144],"typeVersion":1,"id":"c17c8373-bb00-4562-ae8f-c18a13839f0d"},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"user123"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[336,-400],"id":"9654e007-c6e7-4a2b-b48a-7ee7df40a1c0","name":"HTTP Request"},{"parameters":{"values":{"string":[{"name":"apiKey","value":"{{$json[\"apiKey\"] || $env.API_KEY || \"\"}}"},{"name":"username","value":"={{$json[\"username\"] || $json[\"email\"] || $json[\"user\"] || \"user\"}}"},{"name":"plan","value":"={{$json[\"plan\"] || \"basic\"}}"},{"name":"domain","value":"={{$json[\"domain\"] || $env.DEFAULT_DOMAIN || \"inmetech.cloud\"}}"}]},"options":{}},"name":"Set Input","type":"n8n-nodes-base.set","typeVersion":1,"position":[-400,256],"id":"503fad3f-a1b5-4820-a049-48dd916574f5"},{"parameters":{"functionCode":"const payload = items[0].json;\n\n// simple API key check (secure your webhook in production)\nconst providedKey = payload.apiKey || '';\nconst expected = process.env.API_KEY || '';\nif (!expected || providedKey !== expected) {\n throw new Error('Invalid API key');\n}\n\n// sanitize username\nlet raw = (payload.username || 'user').toString();\nlet username = raw.toLowerCase().replace(/[^a-z0-9\\-]/g, '').slice(0, 20) || 'u;\n\n// plan -> resources mapping (restrict to allowed values)\nconst plans = {\n basic: { ram: '1g', cpus: '0.5' },\n pro: { ram: '2g', cpus: '1' },\n agency: { ram: '4g', cpus: '2' }\n};\nconst plan = (payload.plan || 'basic').toLowerCase();\nconst res = plans[plan] || plans['basic'];\n\nconst domain = (payload.domain || process.env.DEFAULT_DOMAIN || 'inmetech.cloud').replace(/[^a-z0-9.\\-]/gi,'');\nconst subdomain = `n8n-${username}`;\nconst host = `${subdomain}.${domain}`;\nconst containerName = `n8n-${username}`;\nconst volume = `${containerName}_data`;\n\n// environment variables for each user container (disable dangerous nodes for clients)\nconst envs = [\n `-e N8N_HOST=${host}`,\n `-e N8N_PROTOCOL=https`,\n `-e WEBHOOK_URL=https://${host}/` ,\n `-e N8N_TRUST_PROXY=true`,\n `-e N8N_SECURE_COOKIE=true`,\n `-e NODES_EXCLUDE=[\"n8n-nodes-base.executeCommand\",\"n8n-nodes-base.localFileTrigger\"]`\n];\n\n// labels for Traefik routing\nconst labels = [\n `--label traefik.enable=true`,\n `--label traefik.http.routers.${containerName}.entrypoints=websecure`,\n `--label traefik.http.routers.${containerName}.rule=Host(\\`${host}\\`)`,\n `--label traefik.http.routers.${containerName}.tls.certresolver=letsencrypt`,\n `--label traefik.http.services.${containerName}.loadbalancer.server.port=5678`\n];\n\n// prepare docker commands\nconst cmdCreateVolume = `docker volume create ${volume}`;\nconst cmdRun = `docker run -d --name ${containerName} --restart unless-stopped --memory=${res.ram} --cpus=${res.cpus} -v ${volume}:/home/node/.n8n ${envs.join(' ')} ${labels.join(' ')} docker.n8n.io/n8nio/n8n`;\n\n// check existing container cmd\nconst cmdCheck = `docker ps -a --filter \\\"name=^/${containerName}$\\\" --format \\\"{{.Names}}\\\"`;\n\nreturn [ { json: { username, plan, domain, host, containerName, cmdCreateVolume, cmdRun, cmdCheck } } ];"},"name":"Build Commands","type":"n8n-nodes-base.function","typeVersion":1,"position":[-160,256],"id":"6b4138b5-495d-46a4-8a37-1ef01adb601a"},{"parameters":{"command":"={{$json.commandCheck}}"},"name":"Check Existing","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,192],"id":"33050773-1166-410e-af9a-2629b205483c"},{"parameters":{"functionCode":"const out = items[0].json;\nif (out && out.data && out.data.length) {\n const names = out.data.trim();\n if (names) throw new Error(`Container already exists: ${names}`);\n}\nreturn items;"},"name":"Fail If Exists","type":"n8n-nodes-base.function","typeVersion":1,"position":[336,192],"id":"8b770345-6008-45df-b449-648dc9181903"},{"parameters":{"command":"={{$json.cmdCreateVolume}}"},"name":"Create Volume","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,320],"id":"c3ef5fcd-65be-44ef-a8fa-dc1db8dc1621"},{"parameters":{"command":"={{$json.cmdRun}}"},"name":"Run Container","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[336,320],"id":"749ef316-deab-4898-805c-891900d0fed0"},{"parameters":{"functionCode":"const j = items[0].json;\nreturn [{ json: { success: true, host: j.host, container: j.containerName, message: 'Container creation triggered. Allow 10-30s to boot and acquire TLS.' } }];"},"name":"Prepare Response","type":"n8n-nodes-base.function","typeVersion":1,"position":[608,256],"id":"352f91c6-e900-433c-8d9b-b653cbf5e275"},{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook1","type":"n8n-nodes-base.webhook","typeVersion":1,"position":[-640,256],"id":"8e72c500-0d98-4892-b3bf-16633ffdb18f","webhookId":"91e8d5c0-cb20-4d3a-978a-db8e22e4073b"},{"parameters":{"options":{}},"name":"Respond1","type":"n8n-nodes-base.respondToWebhook","typeVersion":1,"position":[864,256],"id":"8d30d07b-7c63-43dd-89cc-fed8ec9d226b"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = `n8n.${user}.inmetech.cloud`;\n\nreturn [{\n json: {\n user,\n ram,\n cpu,\n domain,\n container: `n8n-${user}`,\n volume: `n8n_${user}`\n }\n}];"},"id":"9ddf7ecd-9b82-40df-82c7-63fc748fb79c","name":"Prepare Data","type":"n8n-nodes-base.function","position":[-672,1200],"typeVersion":1},{"parameters":{"command":"docker ps -a --format '{{.Names}}'"},"id":"0f259cf3-ccd1-481d-b237-bbb048f9ce3c","name":"List Containers","type":"n8n-nodes-base.executeCommand","position":[-416,1088],"typeVersion":1},{"parameters":{"functionCode":"const existing = $json.stdout || \"\";\nconst user = $items(\"Prepare Data\")[0].json.user;\n\nif (existing.includes(`n8n-${user}`)) {\n throw new Error(\"Container already exists\");\n}\n\nreturn $items(\"Prepare Data\");"},"id":"12aa3069-ada6-4845-ad2f-87af3d31bb85","name":"Check Duplicate","type":"n8n-nodes-base.function","position":[-160,1088],"typeVersion":1},{"parameters":{"httpMethod":"POST","path":"create-n8n1111","options":{}},"id":"fb6697e6-8815-4beb-936d-f16f1814cfdc","name":"Webhook2","type":"n8n-nodes-base.webhook","position":[-912,1200],"typeVersion":1,"webhookId":"c08aedad-597e-4ea4-b647-bccecb2c90f3"},{"parameters":{"functionCode":"const data = $json;\n\nconst cmd = `docker run -d \\\n--name ${data.container} \\\n--memory=${data.ram} \\\n--cpus=${data.cpu} \\\n-v ${data.volume}:/home/node/.n8n \\\n-e N8N_HOST=${data.domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${data.domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \\\"traefik.http.routers.${data.container}.rule=Host('${data.domain}')\\\" \\\n--label traefik.http.routers.${data.container}.entrypoints=websecure \\\n--label traefik.http.routers.${data.container}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.${data.container}.loadbalancer.server.port=5678 \\\n docker.n8n.io/n8nio/n8n`;\n\nreturn [{ json: { command: cmd, url: `https://${data.domain}` } }];"},"id":"36f16652-730e-4ff9-8978-16747fa1d8e3","name":"Build Docker Command1","type":"n8n-nodes-base.function","position":[96,1200],"typeVersion":1},{"parameters":{"command":"={{$json.command}}"},"id":"652ddbd1-09f1-4ac6-84c2-169a34d5016c","name":"Run Docker1","type":"n8n-nodes-base.executeCommand","position":[336,1200],"typeVersion":1},{"parameters":{"options":{}},"id":"2672e437-0f80-43fa-91ad-80805b69d424","name":"Respond2","type":"n8n-nodes-base.respondToWebhook","position":[592,1200],"typeVersion":1},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"user1"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[-592,1664],"id":"6699443d-0372-4cbf-958a-e890a12c5381","name":"HTTP Request1"}]{"Webhook":{"main":[[{"node":"Build Docker Command","type":"main","index":0}]]},"Build Docker Command":{"main":[[{"node":"Run Docker","type":"main","index":0}]]},"Run Docker":{"main":[[{"node":"Respond","type":"main","index":0}]]},"Set Input":{"main":[[{"node":"Build Commands","type":"main","index":0}]]},"Build Commands":{"main":[[{"node":"Check Existing","type":"main","index":0},{"node":"Create Volume","type":"main","index":0}]]},"Check Existing":{"main":[[{"node":"Fail If Exists","type":"main","index":0}]]},"Fail If Exists":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Create Volume":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Run Container":{"main":[[{"node":"Prepare Response","type":"main","index":0}]]},"Prepare Response":{"main":[[{"node":"Respond1","type":"main","index":0}]]},"Webhook1":{"main":[[{"node":"Set Input","type":"main","index":0}]]},"Check Duplicate":{"main":[[{"node":"Build Docker Command1","type":"main","index":0}]]},"Webhook2":{"main":[[{"node":"Prepare Data","type":"main","index":0}]]},"Build Docker Command1":{"main":[[{"node":"Run Docker1","type":"main","index":0}]]},"Run Docker1":{"main":[[{"node":"Respond2","type":"main","index":0}]]},"Prepare Data":{"main":[[{"node":"List Containers","type":"main","index":0}]]},"List Containers":{"main":[[{"node":"Check Duplicate","type":"main","index":0}]]}} uu|U-O;;'I 7be55d5f-51fe-48da-b0cb-d3842ba563feioR8eFBEVaKOkjc0RIZOWAN rizowansiddique@gmail.com2026-03-06 05:06:06.6522026-03-06 05:06:06.652[{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook","type":"n8n-nodes-base.webhook","position":[-192,-144],"typeVersion":1,"id":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","webhookId":"a4d792e3-b5b9-425f-b612-c938e71de65d"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = \"n8n.\" + user + \".inmetech.cloud\";\n\nconst cmd = `\ndocker run -d \\\n--name n8n-${user} \\\n--memory=${ram} \\\n--cpus=${cpu} \\\n-v n8n_${user}:/home/node/.n8n \\\n-e N8N_HOST=${domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \"traefik.http.routers.n8n-${user}.rule=Host('${domain}')\" \\\n--label traefik.http.routers.n8n-${user}.entrypoints=websecure \\\n--label traefik.http.routers.n8n-${user}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.n8n-${user}.loadbalancer.server.port=5678 \\\ndocker.n8n.io/n8nio/n8n\n`;\n\nreturn [{\n json: {\n command: cmd,\n url: \"https://\" + domain\n }\n}];"},"name":"Build Docker Command","type":"n8n-nodes-base.function","position":[112,-144],"typeVersion":1,"id":"7c91468e-80ea-4de5-8553-376dc01f0973"},{"parameters":{"command":"={{$json.command}}"},"name":"Run Docker","type":"n8n-nodes-base.executeCommand","position":[416,-144],"typeVersion":1,"id":"d049c848-745f-43ce-ad8f-2069344eb356"},{"parameters":{"options":{}},"name":"Respond","type":"n8n-nodes-base.respondToWebhook","position":[672,-144],"typeVersion":1,"id":"c17c8373-bb00-4562-ae8f-c18a13839f0d"},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"user123"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[336,-400],"id":"9654e007-c6e7-4a2b-b48a-7ee7df40a1c0","name":"HTTP Request"},{"parameters":{"values":{"string":[{"name":"apiKey","value":"{{$json[\"apiKey\"] || $env.API_KEY || \"\"}}"},{"name":"username","value":"={{$json[\"username\"] || $json[\"email\"] || $json[\"user\"] || \"user\"}}"},{"name":"plan","value":"={{$json[\"plan\"] || \"basic\"}}"},{"name":"domain","value":"={{$json[\"domain\"] || $env.DEFAULT_DOMAIN || \"inmetech.cloud\"}}"}]},"options":{}},"name":"Set Input","type":"n8n-nodes-base.set","typeVersion":1,"position":[-400,256],"id":"503fad3f-a1b5-4820-a049-48dd916574f5"},{"parameters":{"functionCode":"const payload = items[0].json;\n\n// simple API key check (secure your webhook in production)\nconst providedKey = payload.apiKey || '';\nconst expected = process.env.API_KEY || '';\nif (!expected || providedKey !== expected) {\n throw new Error('Invalid API key');\n}\n\n// sanitize username\nlet raw = (payload.username || 'user').toString();\nlet username = raw.toLowerCase().replace(/[^a-z0-9\\-]/g, '').slice(0, 20) || 'user';\n\n// plan -> resources mapping (restrict to allowed values)\nconst plans = {\n basic: { ram: '1g', cpus: '0.5' },\n pro: { ram: '2g', cpus: '1' },\n agency: { ram: '4g', cpus: '2' }\n};\nconst plan = (payload.plan || 'basic').toLowerCase();\nconst res = plans[plan] || plans['basic'];\n\nconst domain = (payload.domain || process.env.DEFAULT_DOMAIN || 'inmetech.cloud').replace(/[^a-z0-9.\\-]/gi,'');\nconst subdomain = `n8n-${username}`;\nconst host = `${subdomain}.${domain}`;\nconst containerName = `n8n-${username}`;\nconst volume = `${containerName}_data`;\n\n// environment variables for each user container (disable dangerous nodes for clients)\nconst envs = [\n `-e N8N_HOST=${host}`,\n `-e N8N_PROTOCOL=https`,\n `-e WEBHOOK_URL=https://${host}/` ,\n `-e N8N_TRUST_PROXY=true`,\n `-e N8N_SECURE_COOKIE=true`,\n `-e NODES_EXCLUDE=[\"n8n-nodes-base.executeCommand\",\"n8n-nodes-base.localFileTrigger\"]`\n];\n\n// labels for Traefik routing\nconst labels = [\n `--label traefik.enable=true`,\n `--label traefik.http.routers.${containerName}.entrypoints=websecure`,\n `--label traefik.http.routers.${containerName}.rule=Host(\\`${host}\\`)`,\n `--label traefik.http.routers.${containerName}.tls.certresolver=letsencrypt`,\n `--label traefik.http.services.${containerName}.loadbalancer.server.port=5678`\n];\n\n// prepare docker commands\nconst cmdCreateVolume = `docker volume create ${volume}`;\nconst cmdRun = `docker run -d --name ${containerName} --restart unless-stopped --memory=${res.ram} --cpus=${res.cpus} -v ${volume}:/home/node/.n8n ${envs.join(' ')} ${labels.join(' ')} docker.n8n.io/n8nio/n8n`;\n\n// check existing container cmd\nconst cmdCheck = `docker ps -a --filter \\\"name=^/${containerName}$\\\" --format \\\"{{.Names}}\\\"`;\n\nreturn [ { json: { username, plan, domain, host, containerName, cmdCreateVolume, cmdRun, cmdCheck } } ];"},"name":"Build Commands","type":"n8n-nodes-base.function","typeVersion":1,"position":[-160,256],"id":"6b4138b5-495d-46a4-8a37-1ef01adb601a"},{"parameters":{"command":"={{$json.commandCheck}}"},"name":"Check Existing","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,192],"id":"33050773-1166-410e-af9a-2629b205483c"},{"parameters":{"functionCode":"const out = items[0].json;\nif (out && out.data && out.data.length) {\n const names = out.data.trim();\n if (names) throw new Error(`Container already exists: ${names}`);\n}\nreturn items;"},"name":"Fail If Exists","type":"n8n-nodes-base.function","typeVersion":1,"position":[336,192],"id":"8b770345-6008-45df-b449-648dc9181903"},{"parameters":{"command":"={{$json.cmdCreateVolume}}"},"name":"Create Volume","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,320],"id":"c3ef5fcd-65be-44ef-a8fa-dc1db8dc1621"},{"parameters":{"command":"={{$json.cmdRun}}"},"name":"Run Container","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[336,320],"id":"749ef316-deab-4898-805c-891900d0fed0"},{"parameters":{"functionCode":"const j = items[0].json;\nreturn [{ json: { success: true, host: j.host, container: j.containerName, message: 'Container creation triggered. Allow 10-30s to boot and acquire TLS.' } }];"},"name":"Prepare Response","type":"n8n-nodes-base.function","typeVersion":1,"position":[608,256],"id":"352f91c6-e900-433c-8d9b-b653cbf5e275"},{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook1","type":"n8n-nodes-base.webhook","typeVersion":1,"position":[-640,256],"id":"8e72c500-0d98-4892-b3bf-16633ffdb18f","webhookId":"91e8d5c0-cb20-4d3a-978a-db8e22e4073b"},{"parameters":{"options":{}},"name":"Respond1","type":"n8n-nodes-base.respondToWebhook","typeVersion":1,"position":[864,256],"id":"8d30d07b-7c63-43dd-89cc-fed8ec9d226b"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = `n8n.${user}.inmetech.cloud`;\n\nreturn [{\n json: {\n user,\n ram,\n cpu,\n domain,\n container: `n8n-${user}`,\n volume: `n8n_${user}`\n }\n}];"},"id":"9ddf7ecd-9b82-40df-82c7-63fc748fb79c","name":"Prepare Data","type":"n8n-nodes-base.function","position":[-672,1200],"typeVersion":1},{"parameters":{"command":"docker ps -a --format '{{.Names}}'"},"id":"0f259cf3-ccd1-481d-b237-bbb048f9ce3c","name":"List Containers","type":"n8n-nodes-base.executeCommand","position":[-416,1088],"typeVersion":1},{"parameters":{"functionCode":"const existing = $json.stdout || \"\";\nconst user = $items(\"Prepare Data\")[0].json.user;\n\nif (existing.includes(`n8n-${user}`)) {\n throw new Error(\"Container already exists\");\n}\n\nreturn $items(\"Prepare Data\");"},"id":"12aa3069-ada6-4845-ad2f-87af3d31bb85","name":"Check Duplicate","type":"n8n-nodes-base.function","position":[-160,1088],"typeVersion":1},{"parameters":{"httpMethod":"POST","path":"create-n8n1111","options":{}},"id":"fb6697e6-8815-4beb-936d-f16f1814cfdc","name":"Webhook2","type":"n8n-nodes-base.webhook","position":[-912,1200],"typeVersion":1,"webhookId":"c08aedad-597e-4ea4-b647-bccecb2c90f3"},{"parameters":{"functionCode":"const data = $json;\n\nconst cmd = `docker run -d \\\n--name ${data.container} \\\n--memory=${data.ram} \\\n--cpus=${data.cpu} \\\n-v ${data.volume}:/home/node/.n8n \\\n-e N8N_HOST=${data.domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${data.domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \\\"traefik.http.routers.${data.container}.rule=Host('${data.domain}')\\\" \\\n--label traefik.http.routers.${data.container}.entrypoints=websecure \\\n--label traefik.http.routers.${data.container}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.${data.container}.loadbalancer.server.port=5678 \\\n docker.n8n.io/n8nio/n8n`;\n\nreturn [{ json: { command: cmd, url: `https://${data.domain}` } }];"},"id":"36f16652-730e-4ff9-8978-16747fa1d8e3","name":"Build Docker Command1","type":"n8n-nodes-base.function","position":[96,1200],"typeVersion":1},{"parameters":{"command":"={{$json.command}}"},"id":"652ddbd1-09f1-4ac6-84c2-169a34d5016c","name":"Run Docker1","type":"n8n-nodes-base.executeCommand","position":[336,1200],"typeVersion":1},{"parameters":{"options":{}},"id":"2672e437-0f80-43fa-91ad-80805b69d424","name":"Respond2","type":"n8n-nodes-base.respondToWebhook","position":[592,1200],"typeVersion":1},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"user1"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[-592,1664],"id":"6699443d-0372-4cbf-958a-e890a12c5381","name":"HTTP Request1"}]{"Webhook":{"main":[[{"node":"Build Docker Command","type":"main","index":0}]]},"Build Docker Command":{"main":[[{"node":"Run Docker","type":"main","index":0}]]},"Run Docker":{"main":[[{"node":"Respond","type":"main","index":0}]]},"Set Input":{"main":[[{"node":"Build Commands","type":"main","index":0}]]},"Build Commands":{"main":[[{"node":"Check Existing","type":"main","index":0},{"node":"Create Volume","type":"main","index":0}]]},"Check Existing":{"main":[[{"node":"Fail If Exists","type":"main","index":0}]]},"Fail If Exists":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Create Volume":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Run Container":{"main":[[{"node":"Prepare Response","type":"main","index":0}]]},"Prepare Response":{"main":[[{"node":"Respond1","type":"main","index":0}]]},"Webhook1":{"main":[[{"node":"Set Input","type":"main","index":0}]]},"Check Duplicate":{"main":[[{"node":"Build Docker Command1","type":"main","index":0}]]},"Webhook2":{"main":[[{"node":"Prepare Data","type":"main","index":0}]]},"Build Docker Command1":{"main":[[{"node":"Run Docker1","type":"main","index":0}]]},"Run Docker1":{"main":[[{"node":"Respond2","type":"main","index":0}]]},"Prepare Data":{"main":[[{"node":"List Containers","type":"main","index":0}]]},"List Containers":{"main":[[{"node":"Check Duplicate","type":"main","index":0}]]}} ee U-O;;GI ba231745-44b2-4e08-86f0-0dc5ea19589dioR8eFBEVaKOkjc0RIZOWAN rizowansiddique@gmail.com2026-03-06 05:06:17.6392026-03-06 05:06:17.639[{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook","type":"n8n-nodes-base.webhook","position":[-192,-144],"typeVersion":1,"id":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","webhookId":"a4d792e3-b5b9-425f-b612-c938e71de65d"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = \"n8n.\" + user + \".inmetech.cloud\";\n\nconst cmd = `\ndocker run -d \\\n--name n8n-${user} \\\n--memory=${ram} \\\n--cpus=${cpu} \\\n-v n8n_${user}:/home/node/.n8n \\\n-e N8N_HOST=${domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \"traefik.http.routers.n8n-${user}.rule=Host('${domain}')\" \\\n--label traefik.http.routers.n8n-${user}.entrypoints=websecure \\\n--label traefik.http.routers.n8n-${user}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.n8n-${user}.loadbalancer.server.port=5678 \\\ndocker.n8n.io/n8nio/n8n\n`;\n\nreturn [{\n json: {\n command: cmd,\n url: \"https://\" + domain\n }\n}];"},"name":"Build Docker Command","type":"n8n-nodes-base.function","position":[176,-192],"typeVersion":1,"id":"7c91468e-80ea-4de5-8553-376dc01f0973","disabled":true},{"parameters":{"command":"={{$json.command}}"},"name":"Run Docker","type":"n8n-nodes-base.executeCommand","position":[416,-144],"typeVersion":1,"id":"d049c848-745f-43ce-ad8f-2069344eb356"},{"parameters":{"options":{}},"name":"Respond","type":"n8n-nodes-base.respondToWebhook","position":[672,-144],"typeVersion":1,"id":"c17c8373-bb00-4562-ae8f-c18a13839f0d"},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"user123"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[336,-400],"id":"9654e007-c6e7-4a2b-b48a-7ee7df40a1c0","name":"HTTP Request"},{"parameters":{"values":{"string":[{"name":"apiKey","value":"{{$json[\"apiKey\"] || $env.API_KEY || \"\"}}"},{"name":"username","value":"={{$json[\"username\"] || $json[\"email\"] || $json[\"user\"] || \"user\"}}"},{"name":"plan","value":"={{$json[\"plan\"] || \"basic\"}}"},{"name":"domain","value":"={{$json[\"domain\"] || $env.DEFAULT_DOMAIN || \"inmetech.cloud\"}}"}]},"options":{}},"name":"Set Input","type":"n8n-nodes-base.set","typeVersion":1,"position":[-400,256],"id":"503fad3f-a1b5-4820-a049-48dd916574f5"},{"parameters":{"functionCode":"const payload = items[0].json;\n\n// simple API key check (secure your webhook in production)\nconst providedKey = payload.apiKey || '';\nconst expected = process.env.API_KEY || '';\nif (!expected || providedKey !== expected) {\n throw new Error('Invalid API key');\n}\n\n// sanitize username\nlet raw = (payload.username || 'user').toString();\nlet username = raw.toLowerCase().replace(/[^a-z0-9\\-]/g, '').slice(0, 20) || 'user'g (restrict to allowed values)\nconst plans = {\n basic: { ram: '1g', cpus: '0.5' },\n pro: { ram: '2g', cpus: '1' },\n agency: { ram: '4g', cpus: '2' }\n};\nconst plan = (payload.plan || 'basic').toLowerCase();\nconst res = plans[plan] || plans['basic'];\n\nconst domain = (payload.domain || process.env.DEFAULT_DOMAIN || 'inmetech.cloud').replace(/[^a-z0-9.\\-]/gi,'');\nconst subdomain = `n8n-${username}`;\nconst host = `${subdomain}.${domain}`;\nconst containerName = `n8n-${username}`;\nconst volume = `${containerName}_data`;\n\n// environment variables for each user container (disable dangerous nodes for clients)\nconst envs = [\n `-e N8N_HOST=${host}`,\n `-e N8N_PROTOCOL=https`,\n `-e WEBHOOK_URL=https://${host}/` ,\n `-e N8N_TRUST_PROXY=true`,\n `-e N8N_SECURE_COOKIE=true`,\n `-e NODES_EXCLUDE=[\"n8n-nodes-base.executeCommand\",\"n8n-nodes-base.localFileTrigger\"]`\n];\n\n// labels for Traefik routing\nconst labels = [\n `--label traefik.enable=true`,\n `--label traefik.http.routers.${containerName}.entrypoints=websecure`,\n `--label traefik.http.routers.${containerName}.rule=Host(\\`${host}\\`)`,\n `--label traefik.http.routers.${containerName}.tls.certresolver=letsencrypt`,\n `--label traefik.http.services.${containerName}.loadbalancer.server.port=5678`\n];\n\n// prepare docker commands\nconst cmdCreateVolume = `docker volume create ${volume}`;\nconst cmdRun = `docker run -d --name ${containerName} --restart unless-stopped --memory=${res.ram} --cpus=${res.cpus} -v ${volume}:/home/node/.n8n ${envs.join(' ')} ${labels.join(' ')} docker.n8n.io/n8nio/n8n`;\n\n// check existing container cmd\nconst cmdCheck = `docker ps -a --filter \\\"name=^/${containerName}$\\\" --format \\\"{{.Names}}\\\"`;\n\nreturn [ { json: { username, plan, domain, host, containerName, cmdCreateVolume, cmdRun, cmdCheck } } ];"},"name":"Build Commands","type":"n8n-nodes-base.function","typeVersion":1,"position":[-160,256],"id":"6b4138b5-495d-46a4-8a37-1ef01adb601a"},{"parameters":{"command":"={{$json.commandCheck}}"},"name":"Check Existing","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,192],"id":"33050773-1166-410e-af9a-2629b205483c"},{"parameters":{"functionCode":"const out = items[0].json;\nif (out && out.data && out.data.length) {\n const names = out.data.trim();\n if (names) throw new Error(`Container already exists: ${names}`);\n}\nreturn items;"},"name":"Fail If Exists","type":"n8n-nodes-base.function","typeVersion":1,"position":[336,192],"id":"8b770345-6008-45df-b449-648dc9181903"},{"parameters":{"command":"={{$json.cmdCreateVolume}}"},"name":"Create Volume","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,320],"id":"c3ef5fcd-65be-44ef-a8fa-dc1db8dc1621"},{"parameters":{"command":"={{$json.cmdRun}}"},"name":"Run Container","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[336,320],"id":"749ef316-deab-4898-805c-891900d0fed0"},{"parameters":{"functionCode":"const j = items[0].json;\nreturn [{ json: { success: true, host: j.host, container: j.containerName, message: 'Container creation triggered. Allow 10-30s to boot and acquire TLS.' } }];"},"name":"Prepare Response","type":"n8n-nodes-base.function","typeVersion":1,"position":[608,256],"id":"352f91c6-e900-433c-8d9b-b653cbf5e275"},{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook1","type":"n8n-nodes-base.webhook","typeVersion":1,"position":[-640,256],"id":"8e72c500-0d98-4892-b3bf-16633ffdb18f","webhookId":"91e8d5c0-cb20-4d3a-978a-db8e22e4073b","disabled":true},{"parameters":{"options":{}},"name":"Respond1","type":"n8n-nodes-base.respondToWebhook","typeVersion":1,"position":[864,256],"id":"8d30d07b-7c63-43dd-89cc-fed8ec9d226b"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = `n8n.${user}.inmetech.cloud`;\n\nreturn [{\n json: {\n user,\n ram,\n cpu,\n domain,\n container: `n8n-${user}`,\n volume: `n8n_${user}`\n }\n}];"},"id":"9ddf7ecd-9b82-40df-82c7-63fc748fb79c","name":"Prepare Data","type":"n8n-nodes-base.function","position":[-672,1200],"typeVersion":1},{"parameters":{"command":"docker ps -a --format '{{.Names}}'"},"id":"0f259cf3-ccd1-481d-b237-bbb048f9ce3c","name":"List Containers","type":"n8n-nodes-base.executeCommand","position":[-416,1088],"typeVersion":1},{"parameters":{"functionCode":"const existing = $json.stdout || \"\";\nconst user = $items(\"Prepare Data\")[0].json.user;\n\nif (existing.includes(`n8n-${user}`)) {\n throw new Error(\"Container already exists\");\n}\n\nreturn $items(\"Prepare Data\");"},"id":"12aa3069-ada6-4845-ad2f-87af3d31bb85","name":"Check Duplicate","type":"n8n-nodes-base.function","position":[-160,1088],"typeVersion":1},{"parameters":{"httpMethod":"POST","path":"create-n8n1111","options":{}},"id":"fb6697e6-8815-4beb-936d-f16f1814cfdc","name":"Webhook2","type":"n8n-nodes-base.webhook","position":[-912,1200],"typeVersion":1,"webhookId":"c08aedad-597e-4ea4-b647-bccecb2c90f3"},{"parameters":{"functionCode":"const data = $json;\n\nconst cmd = `docker run -d \\\n--name ${data.container} \\\n--memory=${data.ram} \\\n--cpus=${data.cpu} \\\n-v ${data.volume}:/home/node/.n8n \\\n-e N8N_HOST=${data.domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${data.domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \\\"traefik.http.routers.${data.container}.rule=Host('${data.domain}')\\\" \\\n--label traefik.http.routers.${data.container}.entrypoints=websecure \\\n--label traefik.http.routers.${data.container}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.${data.container}.loadbalancer.server.port=5678 \\\n docker.n8n.io/n8nio/n8n`;\n\nreturn [{ json: { command: cmd, url: `https://${data.domain}` } }];"},"id":"36f16652-730e-4ff9-8978-16747fa1d8e3","name":"Build Docker Command1","type":"n8n-nodes-base.function","position":[96,1200],"typeVersion":1},{"parameters":{"command":"={{$json.command}}"},"id":"652ddbd1-09f1-4ac6-84c2-169a34d5016c","name":"Run Docker1","type":"n8n-nodes-base.executeCommand","position":[336,1200],"typeVersion":1},{"parameters":{"options":{}},"id":"2672e437-0f80-43fa-91ad-80805b69d424","name":"Respond2","type":"n8n-nodes-base.respondToWebhook","position":[592,1200],"typeVersion":1},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"user1"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[-592,1664],"id":"6699443d-0372-4cbf-958a-e890a12c5381","name":"HTTP Request1"}]{"Webhook":{"main":[[{"node":"Build Docker Command","type":"main","index":0}]]},"Build Docker Command":{"main":[[{"node":"Run Docker","type":"main","index":0}]]},"Run Docker":{"main":[[{"node":"Respond","type":"main","index":0}]]},"Set Input":{"main":[[{"node":"Build Commands","type":"main","index":0}]]},"Build Commands":{"main":[[{"node":"Check Existing","type":"main","index":0},{"node":"Create Volume","type":"main","index":0}]]},"Check Existing":{"main":[[{"node":"Fail If Exists","type":"main","index":0}]]},"Fail If Exists":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Create Volume":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Run Container":{"main":[[{"node":"Prepare Response","type":"main","index":0}]]},"Prepare Response":{"main":[[{"node":"Respond1","type":"main","index":0}]]},"Webhook1":{"main":[[{"node":"Set Input","type":"main","index":0}]]},"Check Duplicate":{"main":[[{"node":"Build Docker Command1","type":"main","index":0}]]},"Webhook2":{"main":[[{"node":"Prepare Data","type":"main","index":0}]]},"Build Docker Command1":{"main":[[{"node":"Run Docker1","type":"main","index":0}]]},"Run Docker1":{"main":[[{"node":"Respond2","type":"main","index":0}]]},"Prepare Data":{"main":[[{"node":"List Containers","type":"main","index":0}]]},"List Containers":{"main":[[{"node":"Check Duplicate","type":"main","index":0}]]}}Version 9d185630 II(U-O;3gI- 9d185630-6aca-46e3-b9b4-7ceb8e19d3fbioR8eFBEVaKOkjc0RIZOWAN rizowansiddique@gmail.com2026-03-06 05:06:27.1472026-03-06 05:06:29[{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook","type":"n8n-nodes-base.webhook","position":[-192,-144],"typeVersion":1,"id":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","webhookId":"a4d792e3-b5b9-425f-b612-c938e71de65d"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = \"n8n.\" + user + \".inmetech.cloud\";\n\nconst cmd = `\ndocker run -d \\\n--name n8n-${user} \\\n--memory=${ram} \\\n--cpus=${cpu} \\\n-v n8n_${user}:/home/node/.n8n \\\n-e N8N_HOST=${domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \"traefik.http.routers.n8n-${user}.rule=Host('${domain}')\" \\\n--label traefik.http.routers.n8n-${user}.entrypoints=websecure \\\n--label traefik.http.routers.n8n-${user}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.n8n-${user}.loadbalancer.server.port=5678 \\\ndocker.n8n.io/n8nio/n8n\n`;\n\nreturn [{\n json: {\n command: cmd,\n url: \"https://\" + domain\n }\n}];"},"name":"Build Docker Command","type":"n8n-nodes-base.function","position":[176,-192],"typeVersion":1,"id":"7c91468e-80ea-4de5-8553-376dc01f0973","disabled":true},{"parameters":{"command":"={{$json.command}}"},"name":"Run Docker","type":"n8n-nodes-base.executeCommand","position":[416,-144],"typeVersion":1,"id":"d049c848-745f-43ce-ad8f-2069344eb356"},{"parameters":{"options":{}},"name":"Respond","type":"n8n-nodes-base.respondToWebhook","position":[672,-144],"typeVersion":1,"id":"c17c8373-bb00-4562-ae8f-c18a13839f0d"},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"user123"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[336,-400],"id":"9654e007-c6e7-4a2b-b48a-7ee7df40a1c0","name":"HTTP Request"},{"parameters":{"values":{"string":[{"name":"apiKey","value":"{{$json[\"apiKey\"] || $env.API_KEY || \"\"}}"},{"name":"username","value":"={{$json[\"username\"] || $json[\"email\"] || $json[\"user\"] || \"user\"}}"},{"name":"plan","value":"={{$json[\"plan\"] || \"basic\"}}"},{"name":"domain","value":"={{$json[\"domain\"] || $env.DEFAULT_DOMAIN || \"inmetech.cloud\"}}"}]},"options":{}},"name":"Set Input","type":"n8n-nodes-base.set","typeVersion":1,"position":[-400,256],"id":"503fad3f-a1b5-4820-a049-48dd916574f5"},{"parameters":{"functionCode":"const payload = items[0].json;\n\n// simple API key check (secure your webhook in production)\nconst providedKey = payload.apiKey || '';\nconst expected = process.env.API_KEY || '';\nif (!expected || providedKey !== expected) {\n throw new Error('Invalid API key');\n}\n\n// sanitize username\nlet raw = (payload.username || 'user').toString();\nlet username = raw.toLowerCase().replace(/[^a-z0-9\\-]/g, '').slice(0, 20) || 'user';\n\n// plan -> resources mappinurces mapping (restrict to allowed values)\nconst plans = {\n basic: { ram: '1g', cpus: '0.5' },\n pro: { ram: '2g', cpus: '1' },\n agency: { ram: '4g', cpus: '2' }\n};\nconst plan = (payload.plan || 'basic').toLowerCase();\nconst res = plans[plan] || plans['basic'];\n\nconst domain = (payload.domain || process.env.DEFAULT_DOMAIN || 'inmetech.cloud').replace(/[^a-z0-9.\\-]/gi,'');\nconst subdomain = `n8n-${username}`;\nconst host = `${subdomain}.${domain}`;\nconst containerName = `n8n-${username}`;\nconst volume = `${containerName}_data`;\n\n// environment variables for each user container (disable dangerous nodes for clients)\nconst envs = [\n `-e N8N_HOST=${host}`,\n `-e N8N_PROTOCOL=https`,\n `-e WEBHOOK_URL=https://${host}/` ,\n `-e N8N_TRUST_PROXY=true`,\n `-e N8N_SECURE_COOKIE=true`,\n `-e NODES_EXCLUDE=[\"n8n-nodes-base.executeCommand\",\"n8n-nodes-base.localFileTrigger\"]`\n];\n\n// labels for Traefik routing\nconst labels = [\n `--label traefik.enable=true`,\n `--label traefik.http.routers.${containerName}.entrypoints=websecure`,\n `--label traefik.http.routers.${containerName}.rule=Host(\\`${host}\\`)`,\n `--label traefik.http.routers.${containerName}.tls.certresolver=letsencrypt`,\n `--label traefik.http.services.${containerName}.loadbalancer.server.port=5678`\n];\n\n// prepare docker commands\nconst cmdCreateVolume = `docker volume create ${volume}`;\nconst cmdRun = `docker run -d --name ${containerName} --restart unless-stopped --memory=${res.ram} --cpus=${res.cpus} -v ${volume}:/home/node/.n8n ${envs.join(' ')} ${labels.join(' ')} docker.n8n.io/n8nio/n8n`;\n\n// check existing container cmd\nconst cmdCheck = `docker ps -a --filter \\\"name=^/${containerName}$\\\" --format \\\"{{.Names}}\\\"`;\n\nreturn [ { json: { username, plan, domain, host, containerName, cmdCreateVolume, cmdRun, cmdCheck } } ];"},"name":"Build Commands","type":"n8n-nodes-base.function","typeVersion":1,"position":[-160,256],"id":"6b4138b5-495d-46a4-8a37-1ef01adb601a"},{"parameters":{"command":"={{$json.commandCheck}}"},"name":"Check Existing","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,192],"id":"33050773-1166-410e-af9a-2629b205483c"},{"parameters":{"functionCode":"const out = items[0].json;\nif (out && out.data && out.data.length) {\n const names = out.data.trim();\n if (names) throw new Error(`Container already exists: ${names}`);\n}\nreturn items;"},"name":"Fail If Exists","type":"n8n-nodes-base.function","typeVersion":1,"position":[336,192],"id":"8b770345-6008-45df-b449-648dc9181903"},{"parameters":{"command":"={{$json.cmdCreateVolume}}"},"name":"Create Volume","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,320],"id":"c3ef5fcd-65be-44ef-a8fa-dc1db8dc1621"},{"parameters":{"command":"={{$json.cmdRun}}"},"name":"Run Container","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[336,320],"id":"749ef316-deab-4898-805c-891900d0fed0"},{"parameters":{"functionCode":"const j = items[0].json;\nreturn [{ json: { success: true, host: j.host, container: j.containerName, message: 'Container creation triggered. Allow 10-30s to boot and acquire TLS.' } }];"},"name":"Prepare Response","type":"n8n-nodes-base.function","typeVersion":1,"position":[608,256],"id":"352f91c6-e900-433c-8d9b-b653cbf5e275"},{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook1","type":"n8n-nodes-base.webhook","typeVersion":1,"position":[-640,256],"id":"8e72c500-0d98-4892-b3bf-16633ffdb18f","webhookId":"91e8d5c0-cb20-4d3a-978a-db8e22e4073b","disabled":true},{"parameters":{"options":{}},"name":"Respond1","type":"n8n-nodes-base.respondToWebhook","typeVersion":1,"position":[864,256],"id":"8d30d07b-7c63-43dd-89cc-fed8ec9d226b"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = `n8n.${user}.inmetech.cloud`;\n\nreturn [{\n json: {\n user,\n ram,\n cpu,\n domain,\n container: `n8n-${user}`,\n volume: `n8n_${user}`\n }\n}];"},"id":"9ddf7ecd-9b82-40df-82c7-63fc748fb79c","name":"Prepare Data","type":"n8n-nodes-base.function","position":[-672,1200],"typeVersion":1},{"parameters":{"command":"docker ps -a --format '{{.Names}}'"},"id":"0f259cf3-ccd1-481d-b237-bbb048f9ce3c","name":"List Containers","type":"n8n-nodes-base.executeCommand","position":[-416,1088],"typeVersion":1},{"parameters":{"functionCode":"const existing = $json.stdout || \"\";\nconst user = $items(\"Prepare Data\")[0].json.user;\n\nif (existing.includes(`n8n-${user}`)) {\n throw new Error(\"Container already exists\");\n}\n\nreturn $items(\"Prepare Data\");"},"id":"12aa3069-ada6-4845-ad2f-87af3d31bb85","name":"Check Duplicate","type":"n8n-nodes-base.function","position":[-160,1088],"typeVersion":1},{"parameters":{"httpMethod":"POST","path":"create-n8n1111","options":{}},"id":"fb6697e6-8815-4beb-936d-f16f1814cfdc","name":"Webhook2","type":"n8n-nodes-base.webhook","position":[-912,1200],"typeVersion":1,"webhookId":"c08aedad-597e-4ea4-b647-bccecb2c90f3"},{"parameters":{"functionCode":"const data = $json;\n\nconst cmd = `docker run -d \\\n--name ${data.container} \\\n--memory=${data.ram} \\\n--cpus=${data.cpu} \\\n-v ${data.volume}:/home/node/.n8n \\\n-e N8N_HOST=${data.domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${data.domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \\\"traefik.http.routers.${data.container}.rule=Host('${data.domain}')\\\" \\\n--label traefik.http.routers.${data.container}.entrypoints=websecure \\\n--label traefik.http.routers.${data.container}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.${data.container}.loadbalancer.server.port=5678 \\\n docker.n8n.io/n8nio/n8n`;\n\nreturn [{ json: { command: cmd, url: `https://${data.domain}` } }];"},"id":"36f16652-730e-4ff9-8978-16747fa1d8e3","name":"Build Docker Command1","type":"n8n-nodes-base.function","position":[96,1200],"typeVersion":1},{"parameters":{"command":"={{$json.command}}"},"id":"652ddbd1-09f1-4ac6-84c2-169a34d5016c","name":"Run Docker1","type":"n8n-nodes-base.executeCommand","position":[336,1200],"typeVersion":1},{"parameters":{"options":{}},"id":"2672e437-0f80-43fa-91ad-80805b69d424","name":"Respond2","type":"n8n-nodes-base.respondToWebhook","position":[592,1200],"typeVersion":1},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n1111","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"user1"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[-592,1664],"id":"6699443d-0372-4cbf-958a-e890a12c5381","name":"HTTP Request1"}]{"Webhook":{"main":[[{"node":"Build Docker Command","type":"main","index":0}]]},"Build Docker Command":{"main":[[{"node":"Run Docker","type":"main","index":0}]]},"Run Docker":{"main":[[{"node":"Respond","type":"main","index":0}]]},"Set Input":{"main":[[{"node":"Build Commands","type":"main","index":0}]]},"Build Commands":{"main":[[{"node":"Check Existing","type":"main","index":0},{"node":"Create Volume","type":"main","index":0}]]},"Check Existing":{"main":[[{"node":"Fail If Exists","type":"main","index":0}]]},"Fail If Exists":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Create Volume":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Run Container":{"main":[[{"node":"Prepare Response","type":"main","index":0}]]},"Prepare Response":{"main":[[{"node":"Respond1","type":"main","index":0}]]},"Webhook1":{"main":[[{"node":"Set Input","type":"main","index":0}]]},"Check Duplicate":{"main":[[{"node":"Build Docker Command1","type":"main","index":0}]]},"Webhook2":{"main":[[{"node":"Prepare Data","type":"main","index":0}]]},"Build Docker Command1":{"main":[[{"node":"Run Docker1","type":"main","index":0}]]},"Run Docker1":{"main":[[{"node":"Respond2","type":"main","index":0}]]},"Prepare Data":{"main":[[{"node":"List Containers","type":"main","index":0}]]},"List Containers":{"main":[[{"node":"Check Duplicate","type":"main","index":0}]]}} QQ U-O;;oI 12245b43-f693-48fc-9f02-fb1e6f96050fioR8eFBEVaKOkjc0RIZOWAN rizowansiddique@gmail.com2026-03-06 05:06:40.6332026-03-06 05:06:40.633[{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook","type":"n8n-nodes-base.webhook","position":[-192,-144],"typeVersion":1,"id":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","webhookId":"a4d792e3-b5b9-425f-b612-c938e71de65d"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = \"n8n.\" + user + \".inmetech.cloud\";\n\nconst cmd = `\ndocker run -d \\\n--name n8n-${user} \\\n--memory=${ram} \\\n--cpus=${cpu} \\\n-v n8n_${user}:/home/node/.n8n \\\n-e N8N_HOST=${domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \"traefik.http.routers.n8n-${user}.rule=Host('${domain}')\" \\\n--label traefik.http.routers.n8n-${user}.entrypoints=websecure \\\n--label traefik.http.routers.n8n-${user}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.n8n-${user}.loadbalancer.server.port=5678 \\\ndocker.n8n.io/n8nio/n8n\n`;\n\nreturn [{\n json: {\n command: cmd,\n url: \"https://\" + domain\n }\n}];"},"name":"Build Docker Command","type":"n8n-nodes-base.function","position":[176,-192],"typeVersion":1,"id":"7c91468e-80ea-4de5-8553-376dc01f0973","disabled":true},{"parameters":{"command":"={{$json.command}}"},"name":"Run Docker","type":"n8n-nodes-base.executeCommand","position":[416,-144],"typeVersion":1,"id":"d049c848-745f-43ce-ad8f-2069344eb356"},{"parameters":{"options":{}},"name":"Respond","type":"n8n-nodes-base.respondToWebhook","position":[672,-144],"typeVersion":1,"id":"c17c8373-bb00-4562-ae8f-c18a13839f0d"},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"user123"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[336,-400],"id":"9654e007-c6e7-4a2b-b48a-7ee7df40a1c0","name":"HTTP Request"},{"parameters":{"values":{"string":[{"name":"apiKey","value":"{{$json[\"apiKey\"] || $env.API_KEY || \"\"}}"},{"name":"username","value":"={{$json[\"username\"] || $json[\"email\"] || $json[\"user\"] || \"user\"}}"},{"name":"plan","value":"={{$json[\"plan\"] || \"basic\"}}"},{"name":"domain","value":"={{$json[\"domain\"] || $env.DEFAULT_DOMAIN || \"inmetech.cloud\"}}"}]},"options":{}},"name":"Set Input","type":"n8n-nodes-base.set","typeVersion":1,"position":[-400,256],"id":"503fad3f-a1b5-4820-a049-48dd916574f5"},{"parameters":{"functionCode":"const payload = items[0].json;\n\n// simple API key check (secure your webhook in production)\nconst providedKey = payload.apiKey || '';\nconst expected = process.env.API_KEY || '';\nif (!expected || providedKey !== expected) {\n throw new Error('Invalid API key');\n}\n\n// sanitize username\nlet raw = (payload.username || 'user').toString();\nlet username = raw.toLowerCase().replace(/[^a-z0-9\\-]/g, '').slice(0, 20) || 'user';\n\n// plan -> reson// plan -> resources mapping (restrict to allowed values)\nconst plans = {\n basic: { ram: '1g', cpus: '0.5' },\n pro: { ram: '2g', cpus: '1' },\n agency: { ram: '4g', cpus: '2' }\n};\nconst plan = (payload.plan || 'basic').toLowerCase();\nconst res = plans[plan] || plans['basic'];\n\nconst domain = (payload.domain || process.env.DEFAULT_DOMAIN || 'inmetech.cloud').replace(/[^a-z0-9.\\-]/gi,'');\nconst subdomain = `n8n-${username}`;\nconst host = `${subdomain}.${domain}`;\nconst containerName = `n8n-${username}`;\nconst volume = `${containerName}_data`;\n\n// environment variables for each user container (disable dangerous nodes for clients)\nconst envs = [\n `-e N8N_HOST=${host}`,\n `-e N8N_PROTOCOL=https`,\n `-e WEBHOOK_URL=https://${host}/` ,\n `-e N8N_TRUST_PROXY=true`,\n `-e N8N_SECURE_COOKIE=true`,\n `-e NODES_EXCLUDE=[\"n8n-nodes-base.executeCommand\",\"n8n-nodes-base.localFileTrigger\"]`\n];\n\n// labels for Traefik routing\nconst labels = [\n `--label traefik.enable=true`,\n `--label traefik.http.routers.${containerName}.entrypoints=websecure`,\n `--label traefik.http.routers.${containerName}.rule=Host(\\`${host}\\`)`,\n `--label traefik.http.routers.${containerName}.tls.certresolver=letsencrypt`,\n `--label traefik.http.services.${containerName}.loadbalancer.server.port=5678`\n];\n\n// prepare docker commands\nconst cmdCreateVolume = `docker volume create ${volume}`;\nconst cmdRun = `docker run -d --name ${containerName} --restart unless-stopped --memory=${res.ram} --cpus=${res.cpus} -v ${volume}:/home/node/.n8n ${envs.join(' ')} ${labels.join(' ')} docker.n8n.io/n8nio/n8n`;\n\n// check existing container cmd\nconst cmdCheck = `docker ps -a --filter \\\"name=^/${containerName}$\\\" --format \\\"{{.Names}}\\\"`;\n\nreturn [ { json: { username, plan, domain, host, containerName, cmdCreateVolume, cmdRun, cmdCheck } } ];"},"name":"Build Commands","type":"n8n-nodes-base.function","typeVersion":1,"position":[-160,256],"id":"6b4138b5-495d-46a4-8a37-1ef01adb601a"},{"parameters":{"command":"={{$json.commandCheck}}"},"name":"Check Existing","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,192],"id":"33050773-1166-410e-af9a-2629b205483c"},{"parameters":{"functionCode":"const out = items[0].json;\nif (out && out.data && out.data.length) {\n const names = out.data.trim();\n if (names) throw new Error(`Container already exists: ${names}`);\n}\nreturn items;"},"name":"Fail If Exists","type":"n8n-nodes-base.function","typeVersion":1,"position":[336,192],"id":"8b770345-6008-45df-b449-648dc9181903"},{"parameters":{"command":"={{$json.cmdCreateVolume}}"},"name":"Create Volume","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,320],"id":"c3ef5fcd-65be-44ef-a8fa-dc1db8dc1621"},{"parameters":{"command":"={{$json.cmdRun}}"},"name":"Run Container","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[336,320],"id":"749ef316-deab-4898-805c-891900d0fed0"},{"parameters":{"functionCode":"const j = items[0].json;\nreturn [{ json: { success: true, host: j.host, container: j.containerName, message: 'Container creation triggered. Allow 10-30s to boot and acquire TLS.' } }];"},"name":"Prepare Response","type":"n8n-nodes-base.function","typeVersion":1,"position":[608,256],"id":"352f91c6-e900-433c-8d9b-b653cbf5e275"},{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook1","type":"n8n-nodes-base.webhook","typeVersion":1,"position":[-640,256],"id":"8e72c500-0d98-4892-b3bf-16633ffdb18f","webhookId":"91e8d5c0-cb20-4d3a-978a-db8e22e4073b","disabled":true},{"parameters":{"options":{}},"name":"Respond1","type":"n8n-nodes-base.respondToWebhook","typeVersion":1,"position":[864,256],"id":"8d30d07b-7c63-43dd-89cc-fed8ec9d226b"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = `n8n.${user}.inmetech.cloud`;\n\nreturn [{\n json: {\n user,\n ram,\n cpu,\n domain,\n container: `n8n-${user}`,\n volume: `n8n_${user}`\n }\n}];"},"id":"9ddf7ecd-9b82-40df-82c7-63fc748fb79c","name":"Prepare Data","type":"n8n-nodes-base.function","position":[-672,1200],"typeVersion":1},{"parameters":{"command":"docker ps -a --format '{{.Names}}'"},"id":"0f259cf3-ccd1-481d-b237-bbb048f9ce3c","name":"List Containers","type":"n8n-nodes-base.executeCommand","position":[-416,1088],"typeVersion":1},{"parameters":{"functionCode":"const existing = $json.stdout || \"\";\nconst user = $items(\"Prepare Data\")[0].json.user;\n\nif (existing.includes(`n8n-${user}`)) {\n throw new Error(\"Container already exists\");\n}\n\nreturn $items(\"Prepare Data\");"},"id":"12aa3069-ada6-4845-ad2f-87af3d31bb85","name":"Check Duplicate","type":"n8n-nodes-base.function","position":[-160,1088],"typeVersion":1},{"parameters":{"httpMethod":"POST","path":"create-n8n1111","options":{}},"id":"fb6697e6-8815-4beb-936d-f16f1814cfdc","name":"Webhook2","type":"n8n-nodes-base.webhook","position":[-912,1200],"typeVersion":1,"webhookId":"c08aedad-597e-4ea4-b647-bccecb2c90f3"},{"parameters":{"functionCode":"const data = $json;\n\nconst cmd = `docker run -d \\\n--name ${data.container} \\\n--memory=${data.ram} \\\n--cpus=${data.cpu} \\\n-v ${data.volume}:/home/node/.n8n \\\n-e N8N_HOST=${data.domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${data.domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \\\"traefik.http.routers.${data.container}.rule=Host('${data.domain}')\\\" \\\n--label traefik.http.routers.${data.container}.entrypoints=websecure \\\n--label traefik.http.routers.${data.container}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.${data.container}.loadbalancer.server.port=5678 \\\n docker.n8n.io/n8nio/n8n`;\n\nreturn [{ json: { command: cmd, url: `https://${data.domain}` } }];"},"id":"36f16652-730e-4ff9-8978-16747fa1d8e3","name":"Build Docker Command1","type":"n8n-nodes-base.function","position":[96,1200],"typeVersion":1},{"parameters":{"command":"={{$json.command}}"},"id":"652ddbd1-09f1-4ac6-84c2-169a34d5016c","name":"Run Docker1","type":"n8n-nodes-base.executeCommand","position":[336,1200],"typeVersion":1},{"parameters":{"options":{}},"id":"2672e437-0f80-43fa-91ad-80805b69d424","name":"Respond2","type":"n8n-nodes-base.respondToWebhook","position":[592,1200],"typeVersion":1},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n1111","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[-592,1664],"id":"6699443d-0372-4cbf-958a-e890a12c5381","name":"HTTP Request1"}]{"Webhook":{"main":[[{"node":"Build Docker Command","type":"main","index":0}]]},"Build Docker Command":{"main":[[{"node":"Run Docker","type":"main","index":0}]]},"Run Docker":{"main":[[{"node":"Respond","type":"main","index":0}]]},"Set Input":{"main":[[{"node":"Build Commands","type":"main","index":0}]]},"Build Commands":{"main":[[{"node":"Check Existing","type":"main","index":0},{"node":"Create Volume","type":"main","index":0}]]},"Check Existing":{"main":[[{"node":"Fail If Exists","type":"main","index":0}]]},"Fail If Exists":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Create Volume":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Run Container":{"main":[[{"node":"Prepare Response","type":"main","index":0}]]},"Prepare Response":{"main":[[{"node":"Respond1","type":"main","index":0}]]},"Webhook1":{"main":[[{"node":"Set Input","type":"main","index":0}]]},"Check Duplicate":{"main":[[{"node":"Build Docker Command1","type":"main","index":0}]]},"Webhook2":{"main":[[{"node":"Prepare Data","type":"main","index":0}]]},"Build Docker Command1":{"main":[[{"node":"Run Docker1","type":"main","index":0}]]},"Run Docker1":{"main":[[{"node":"Respond2","type":"main","index":0}]]},"Prepare Data":{"main":[[{"node":"List Containers","type":"main","index":0}]]},"List Containers":{"main":[[{"node":"Check Duplicate","type":"main","index":0}]]}} aaU-O;;OI 4feebac7-ff3b-4bf3-839a-9d6a02c3a16eioR8eFBEVaKOkjc0RIZOWAN rizowansiddique@gmail.com2026-03-06 05:06:44.4172026-03-06 05:06:44.417[{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook","type":"n8n-nodes-base.webhook","position":[-192,-144],"typeVersion":1,"id":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","webhookId":"a4d792e3-b5b9-425f-b612-c938e71de65d"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = \"n8n.\" + user + \".inmetech.cloud\";\n\nconst cmd = `\ndocker run -d \\\n--name n8n-${user} \\\n--memory=${ram} \\\n--cpus=${cpu} \\\n-v n8n_${user}:/home/node/.n8n \\\n-e N8N_HOST=${domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \"traefik.http.routers.n8n-${user}.rule=Host('${domain}')\" \\\n--label traefik.http.routers.n8n-${user}.entrypoints=websecure \\\n--label traefik.http.routers.n8n-${user}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.n8n-${user}.loadbalancer.server.port=5678 \\\ndocker.n8n.io/n8nio/n8n\n`;\n\nreturn [{\n json: {\n command: cmd,\n url: \"https://\" + domain\n }\n}];"},"name":"Build Docker Command","type":"n8n-nodes-base.function","position":[176,-192],"typeVersion":1,"id":"7c91468e-80ea-4de5-8553-376dc01f0973","disabled":true},{"parameters":{"command":"={{$json.command}}"},"name":"Run Docker","type":"n8n-nodes-base.executeCommand","position":[416,-144],"typeVersion":1,"id":"d049c848-745f-43ce-ad8f-2069344eb356"},{"parameters":{"options":{}},"name":"Respond","type":"n8n-nodes-base.respondToWebhook","position":[672,-144],"typeVersion":1,"id":"c17c8373-bb00-4562-ae8f-c18a13839f0d"},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"user123"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[336,-400],"id":"9654e007-c6e7-4a2b-b48a-7ee7df40a1c0","name":"HTTP Request"},{"parameters":{"values":{"string":[{"name":"apiKey","value":"{{$json[\"apiKey\"] || $env.API_KEY || \"\"}}"},{"name":"username","value":"={{$json[\"username\"] || $json[\"email\"] || $json[\"user\"] || \"user\"}}"},{"name":"plan","value":"={{$json[\"plan\"] || \"basic\"}}"},{"name":"domain","value":"={{$json[\"domain\"] || $env.DEFAULT_DOMAIN || \"inmetech.cloud\"}}"}]},"options":{}},"name":"Set Input","type":"n8n-nodes-base.set","typeVersion":1,"position":[-400,256],"id":"503fad3f-a1b5-4820-a049-48dd916574f5"},{"parameters":{"functionCode":"const payload = items[0].json;\n\n// simple API key check (secure your webhook in production)\nconst providedKey = payload.apiKey || '';\nconst expected = process.env.API_KEY || '';\nif (!expected || providedKey !== expected) {\n throw new Error('Invalid API key');\n}\n\n// sanitize username\nlet raw = (payload.username || 'user').toString();\nlet username = raw.toLowerCase().replace(/[^a-z0-9\\-]/g, '').slice(0, 20) || 'user';\n\ources mapping (restrict to allowed values)\nconst plans = {\n basic: { ram: '1g', cpus: '0.5' },\n pro: { ram: '2g', cpus: '1' },\n agency: { ram: '4g', cpus: '2' }\n};\nconst plan = (payload.plan || 'basic').toLowerCase();\nconst res = plans[plan] || plans['basic'];\n\nconst domain = (payload.domain || process.env.DEFAULT_DOMAIN || 'inmetech.cloud').replace(/[^a-z0-9.\\-]/gi,'');\nconst subdomain = `n8n-${username}`;\nconst host = `${subdomain}.${domain}`;\nconst containerName = `n8n-${username}`;\nconst volume = `${containerName}_data`;\n\n// environment variables for each user container (disable dangerous nodes for clients)\nconst envs = [\n `-e N8N_HOST=${host}`,\n `-e N8N_PROTOCOL=https`,\n `-e WEBHOOK_URL=https://${host}/` ,\n `-e N8N_TRUST_PROXY=true`,\n `-e N8N_SECURE_COOKIE=true`,\n `-e NODES_EXCLUDE=[\"n8n-nodes-base.executeCommand\",\"n8n-nodes-base.localFileTrigger\"]`\n];\n\n// labels for Traefik routing\nconst labels = [\n `--label traefik.enable=true`,\n `--label traefik.http.routers.${containerName}.entrypoints=websecure`,\n `--label traefik.http.routers.${containerName}.rule=Host(\\`${host}\\`)`,\n `--label traefik.http.routers.${containerName}.tls.certresolver=letsencrypt`,\n `--label traefik.http.services.${containerName}.loadbalancer.server.port=5678`\n];\n\n// prepare docker commands\nconst cmdCreateVolume = `docker volume create ${volume}`;\nconst cmdRun = `docker run -d --name ${containerName} --restart unless-stopped --memory=${res.ram} --cpus=${res.cpus} -v ${volume}:/home/node/.n8n ${envs.join(' ')} ${labels.join(' ')} docker.n8n.io/n8nio/n8n`;\n\n// check existing container cmd\nconst cmdCheck = `docker ps -a --filter \\\"name=^/${containerName}$\\\" --format \\\"{{.Names}}\\\"`;\n\nreturn [ { json: { username, plan, domain, host, containerName, cmdCreateVolume, cmdRun, cmdCheck } } ];"},"name":"Build Commands","type":"n8n-nodes-base.function","typeVersion":1,"position":[-160,256],"id":"6b4138b5-495d-46a4-8a37-1ef01adb601a"},{"parameters":{"command":"={{$json.commandCheck}}"},"name":"Check Existing","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,192],"id":"33050773-1166-410e-af9a-2629b205483c"},{"parameters":{"functionCode":"const out = items[0].json;\nif (out && out.data && out.data.length) {\n const names = out.data.trim();\n if (names) throw new Error(`Container already exists: ${names}`);\n}\nreturn items;"},"name":"Fail If Exists","type":"n8n-nodes-base.function","typeVersion":1,"position":[336,192],"id":"8b770345-6008-45df-b449-648dc9181903"},{"parameters":{"command":"={{$json.cmdCreateVolume}}"},"name":"Create Volume","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,320],"id":"c3ef5fcd-65be-44ef-a8fa-dc1db8dc1621"},{"parameters":{"command":"={{$json.cmdRun}}"},"name":"Run Container","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[336,320],"id":"749ef316-deab-4898-805c-891900d0fed0"},{"parameters":{"functionCode":"const j = items[0].json;\nreturn [{ json: { success: true, host: j.host, container: j.containerName, message: 'Container creation triggered. Allow 10-30s to boot and acquire TLS.' } }];"},"name":"Prepare Response","type":"n8n-nodes-base.function","typeVersion":1,"position":[608,256],"id":"352f91c6-e900-433c-8d9b-b653cbf5e275"},{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook1","type":"n8n-nodes-base.webhook","typeVersion":1,"position":[-640,256],"id":"8e72c500-0d98-4892-b3bf-16633ffdb18f","webhookId":"91e8d5c0-cb20-4d3a-978a-db8e22e4073b","disabled":true},{"parameters":{"options":{}},"name":"Respond1","type":"n8n-nodes-base.respondToWebhook","typeVersion":1,"position":[864,256],"id":"8d30d07b-7c63-43dd-89cc-fed8ec9d226b"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = `n8n.${user}.inmetech.cloud`;\n\nreturn [{\n json: {\n user,\n ram,\n cpu,\n domain,\n container: `n8n-${user}`,\n volume: `n8n_${user}`\n }\n}];"},"id":"9ddf7ecd-9b82-40df-82c7-63fc748fb79c","name":"Prepare Data","type":"n8n-nodes-base.function","position":[-672,1200],"typeVersion":1},{"parameters":{"command":"docker ps -a --format '{{.Names}}'"},"id":"0f259cf3-ccd1-481d-b237-bbb048f9ce3c","name":"List Containers","type":"n8n-nodes-base.executeCommand","position":[-416,1088],"typeVersion":1},{"parameters":{"functionCode":"const existing = $json.stdout || \"\";\nconst user = $items(\"Prepare Data\")[0].json.user;\n\nif (existing.includes(`n8n-${user}`)) {\n throw new Error(\"Container already exists\");\n}\n\nreturn $items(\"Prepare Data\");"},"id":"12aa3069-ada6-4845-ad2f-87af3d31bb85","name":"Check Duplicate","type":"n8n-nodes-base.function","position":[-160,1088],"typeVersion":1},{"parameters":{"httpMethod":"POST","path":"create-n8n1111","options":{}},"id":"fb6697e6-8815-4beb-936d-f16f1814cfdc","name":"Webhook2","type":"n8n-nodes-base.webhook","position":[-912,1200],"typeVersion":1,"webhookId":"c08aedad-597e-4ea4-b647-bccecb2c90f3"},{"parameters":{"functionCode":"const data = $json;\n\nconst cmd = `docker run -d \\\n--name ${data.container} \\\n--memory=${data.ram} \\\n--cpus=${data.cpu} \\\n-v ${data.volume}:/home/node/.n8n \\\n-e N8N_HOST=${data.domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${data.domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \\\"traefik.http.routers.${data.container}.rule=Host('${data.domain}')\\\" \\\n--label traefik.http.routers.${data.container}.entrypoints=websecure \\\n--label traefik.http.routers.${data.container}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.${data.container}.loadbalancer.server.port=5678 \\\n docker.n8n.io/n8nio/n8n`;\n\nreturn [{ json: { command: cmd, url: `https://${data.domain}` } }];"},"id":"36f16652-730e-4ff9-8978-16747fa1d8e3","name":"Build Docker Command1","type":"n8n-nodes-base.function","position":[96,1200],"typeVersion":1},{"parameters":{"command":"={{$json.command}}"},"id":"652ddbd1-09f1-4ac6-84c2-169a34d5016c","name":"Run Docker1","type":"n8n-nodes-base.executeCommand","position":[336,1200],"typeVersion":1},{"parameters":{"options":{}},"id":"2672e437-0f80-43fa-91ad-80805b69d424","name":"Respond2","type":"n8n-nodes-base.respondToWebhook","position":[592,1200],"typeVersion":1},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n1111","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"1234"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[-592,1664],"id":"6699443d-0372-4cbf-958a-e890a12c5381","name":"HTTP Request1"}]{"Webhook":{"main":[[{"node":"Build Docker Command","type":"main","index":0}]]},"Build Docker Command":{"main":[[{"node":"Run Docker","type":"main","index":0}]]},"Run Docker":{"main":[[{"node":"Respond","type":"main","index":0}]]},"Set Input":{"main":[[{"node":"Build Commands","type":"main","index":0}]]},"Build Commands":{"main":[[{"node":"Check Existing","type":"main","index":0},{"node":"Create Volume","type":"main","index":0}]]},"Check Existing":{"main":[[{"node":"Fail If Exists","type":"main","index":0}]]},"Fail If Exists":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Create Volume":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Run Container":{"main":[[{"node":"Prepare Response","type":"main","index":0}]]},"Prepare Response":{"main":[[{"node":"Respond1","type":"main","index":0}]]},"Webhook1":{"main":[[{"node":"Set Input","type":"main","index":0}]]},"Check Duplicate":{"main":[[{"node":"Build Docker Command1","type":"main","index":0}]]},"Webhook2":{"main":[[{"node":"Prepare Data","type":"main","index":0}]]},"Build Docker Command1":{"main":[[{"node":"Run Docker1","type":"main","index":0}]]},"Run Docker1":{"main":[[{"node":"Respond2","type":"main","index":0}]]},"Prepare Data":{"main":[[{"node":"List Containers","type":"main","index":0}]]},"List Containers":{"main":[[{"node":"Check Duplicate","type":"main","index":0}]]}} RRU-O;;mI bfa0341d-c9ac-4770-8935-19b9c2979780ioR8eFBEVaKOkjc0RIZOWAN rizowansiddique@gmail.com2026-03-06 05:06:49.5222026-03-06 05:06:49.522[{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook","type":"n8n-nodes-base.webhook","position":[-192,-144],"typeVersion":1,"id":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","webhookId":"a4d792e3-b5b9-425f-b612-c938e71de65d"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = \"n8n.\" + user + \".inmetech.cloud\";\n\nconst cmd = `\ndocker run -d \\\n--name n8n-${user} \\\n--memory=${ram} \\\n--cpus=${cpu} \\\n-v n8n_${user}:/home/node/.n8n \\\n-e N8N_HOST=${domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \"traefik.http.routers.n8n-${user}.rule=Host('${domain}')\" \\\n--label traefik.http.routers.n8n-${user}.entrypoints=websecure \\\n--label traefik.http.routers.n8n-${user}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.n8n-${user}.loadbalancer.server.port=5678 \\\ndocker.n8n.io/n8nio/n8n\n`;\n\nreturn [{\n json: {\n command: cmd,\n url: \"https://\" + domain\n }\n}];"},"name":"Build Docker Command","type":"n8n-nodes-base.function","position":[176,-192],"typeVersion":1,"id":"7c91468e-80ea-4de5-8553-376dc01f0973","disabled":true},{"parameters":{"command":"={{$json.command}}"},"name":"Run Docker","type":"n8n-nodes-base.executeCommand","position":[416,-144],"typeVersion":1,"id":"d049c848-745f-43ce-ad8f-2069344eb356"},{"parameters":{"options":{}},"name":"Respond","type":"n8n-nodes-base.respondToWebhook","position":[672,-144],"typeVersion":1,"id":"c17c8373-bb00-4562-ae8f-c18a13839f0d"},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"user123"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[336,-400],"id":"9654e007-c6e7-4a2b-b48a-7ee7df40a1c0","name":"HTTP Request"},{"parameters":{"values":{"string":[{"name":"apiKey","value":"{{$json[\"apiKey\"] || $env.API_KEY || \"\"}}"},{"name":"username","value":"={{$json[\"username\"] || $json[\"email\"] || $json[\"user\"] || \"user\"}}"},{"name":"plan","value":"={{$json[\"plan\"] || \"basic\"}}"},{"name":"domain","value":"={{$json[\"domain\"] || $env.DEFAULT_DOMAIN || \"inmetech.cloud\"}}"}]},"options":{}},"name":"Set Input","type":"n8n-nodes-base.set","typeVersion":1,"position":[-400,256],"id":"503fad3f-a1b5-4820-a049-48dd916574f5"},{"parameters":{"functionCode":"const payload = items[0].json;\n\n// simple API key check (secure your webhook in production)\nconst providedKey = payload.apiKey || '';\nconst expected = process.env.API_KEY || '';\nif (!expected || providedKey !== expected) {\n throw new Error('Invalid API key');\n}\n\n// sanitize username\nlet raw = (payload.username || 'user').toString();\nlet username = raw.toLowerCase().replace(/[^a-z0-9\\-]/g, '').slice(0, 20) || 'user';\n\n// plan -> res/ plan -> resources mapping (restrict to allowed values)\nconst plans = {\n basic: { ram: '1g', cpus: '0.5' },\n pro: { ram: '2g', cpus: '1' },\n agency: { ram: '4g', cpus: '2' }\n};\nconst plan = (payload.plan || 'basic').toLowerCase();\nconst res = plans[plan] || plans['basic'];\n\nconst domain = (payload.domain || process.env.DEFAULT_DOMAIN || 'inmetech.cloud').replace(/[^a-z0-9.\\-]/gi,'');\nconst subdomain = `n8n-${username}`;\nconst host = `${subdomain}.${domain}`;\nconst containerName = `n8n-${username}`;\nconst volume = `${containerName}_data`;\n\n// environment variables for each user container (disable dangerous nodes for clients)\nconst envs = [\n `-e N8N_HOST=${host}`,\n `-e N8N_PROTOCOL=https`,\n `-e WEBHOOK_URL=https://${host}/` ,\n `-e N8N_TRUST_PROXY=true`,\n `-e N8N_SECURE_COOKIE=true`,\n `-e NODES_EXCLUDE=[\"n8n-nodes-base.executeCommand\",\"n8n-nodes-base.localFileTrigger\"]`\n];\n\n// labels for Traefik routing\nconst labels = [\n `--label traefik.enable=true`,\n `--label traefik.http.routers.${containerName}.entrypoints=websecure`,\n `--label traefik.http.routers.${containerName}.rule=Host(\\`${host}\\`)`,\n `--label traefik.http.routers.${containerName}.tls.certresolver=letsencrypt`,\n `--label traefik.http.services.${containerName}.loadbalancer.server.port=5678`\n];\n\n// prepare docker commands\nconst cmdCreateVolume = `docker volume create ${volume}`;\nconst cmdRun = `docker run -d --name ${containerName} --restart unless-stopped --memory=${res.ram} --cpus=${res.cpus} -v ${volume}:/home/node/.n8n ${envs.join(' ')} ${labels.join(' ')} docker.n8n.io/n8nio/n8n`;\n\n// check existing container cmd\nconst cmdCheck = `docker ps -a --filter \\\"name=^/${containerName}$\\\" --format \\\"{{.Names}}\\\"`;\n\nreturn [ { json: { username, plan, domain, host, containerName, cmdCreateVolume, cmdRun, cmdCheck } } ];"},"name":"Build Commands","type":"n8n-nodes-base.function","typeVersion":1,"position":[-160,256],"id":"6b4138b5-495d-46a4-8a37-1ef01adb601a"},{"parameters":{"command":"={{$json.commandCheck}}"},"name":"Check Existing","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,192],"id":"33050773-1166-410e-af9a-2629b205483c"},{"parameters":{"functionCode":"const out = items[0].json;\nif (out && out.data && out.data.length) {\n const names = out.data.trim();\n if (names) throw new Error(`Container already exists: ${names}`);\n}\nreturn items;"},"name":"Fail If Exists","type":"n8n-nodes-base.function","typeVersion":1,"position":[336,192],"id":"8b770345-6008-45df-b449-648dc9181903"},{"parameters":{"command":"={{$json.cmdCreateVolume}}"},"name":"Create Volume","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,320],"id":"c3ef5fcd-65be-44ef-a8fa-dc1db8dc1621"},{"parameters":{"command":"={{$json.cmdRun}}"},"name":"Run Container","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[336,320],"id":"749ef316-deab-4898-805c-891900d0fed0"},{"parameters":{"functionCode":"const j = items[0].json;\nreturn [{ json: { success: true, host: j.host, container: j.containerName, message: 'Container creation triggered. Allow 10-30s to boot and acquire TLS.' } }];"},"name":"Prepare Response","type":"n8n-nodes-base.function","typeVersion":1,"position":[608,256],"id":"352f91c6-e900-433c-8d9b-b653cbf5e275"},{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook1","type":"n8n-nodes-base.webhook","typeVersion":1,"position":[-640,256],"id":"8e72c500-0d98-4892-b3bf-16633ffdb18f","webhookId":"91e8d5c0-cb20-4d3a-978a-db8e22e4073b","disabled":true},{"parameters":{"options":{}},"name":"Respond1","type":"n8n-nodes-base.respondToWebhook","typeVersion":1,"position":[864,256],"id":"8d30d07b-7c63-43dd-89cc-fed8ec9d226b"},{"parameters":{"functionCode":"const user = ;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = `n8n.${user}.inmetech.cloud`;\n\nreturn [{\n json: {\n user,\n ram,\n cpu,\n domain,\n container: `n8n-${user}`,\n volume: `n8n_${user}`\n }\n}];"},"id":"9ddf7ecd-9b82-40df-82c7-63fc748fb79c","name":"Prepare Data","type":"n8n-nodes-base.function","position":[-672,1200],"typeVersion":1},{"parameters":{"command":"docker ps -a --format '{{.Names}}'"},"id":"0f259cf3-ccd1-481d-b237-bbb048f9ce3c","name":"List Containers","type":"n8n-nodes-base.executeCommand","position":[-416,1088],"typeVersion":1},{"parameters":{"functionCode":"const existing = $json.stdout || \"\";\nconst user = $items(\"Prepare Data\")[0].json.user;\n\nif (existing.includes(`n8n-${user}`)) {\n throw new Error(\"Container already exists\");\n}\n\nreturn $items(\"Prepare Data\");"},"id":"12aa3069-ada6-4845-ad2f-87af3d31bb85","name":"Check Duplicate","type":"n8n-nodes-base.function","position":[-160,1088],"typeVersion":1},{"parameters":{"httpMethod":"POST","path":"create-n8n1111","options":{}},"id":"fb6697e6-8815-4beb-936d-f16f1814cfdc","name":"Webhook2","type":"n8n-nodes-base.webhook","position":[-912,1200],"typeVersion":1,"webhookId":"c08aedad-597e-4ea4-b647-bccecb2c90f3"},{"parameters":{"functionCode":"const data = $json;\n\nconst cmd = `docker run -d \\\n--name ${data.container} \\\n--memory=${data.ram} \\\n--cpus=${data.cpu} \\\n-v ${data.volume}:/home/node/.n8n \\\n-e N8N_HOST=${data.domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${data.domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \\\"traefik.http.routers.${data.container}.rule=Host('${data.domain}')\\\" \\\n--label traefik.http.routers.${data.container}.entrypoints=websecure \\\n--label traefik.http.routers.${data.container}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.${data.container}.loadbalancer.server.port=5678 \\\n docker.n8n.io/n8nio/n8n`;\n\nreturn [{ json: { command: cmd, url: `https://${data.domain}` } }];"},"id":"36f16652-730e-4ff9-8978-16747fa1d8e3","name":"Build Docker Command1","type":"n8n-nodes-base.function","position":[96,1200],"typeVersion":1},{"parameters":{"command":"={{$json.command}}"},"id":"652ddbd1-09f1-4ac6-84c2-169a34d5016c","name":"Run Docker1","type":"n8n-nodes-base.executeCommand","position":[336,1200],"typeVersion":1},{"parameters":{"options":{}},"id":"2672e437-0f80-43fa-91ad-80805b69d424","name":"Respond2","type":"n8n-nodes-base.respondToWebhook","position":[592,1200],"typeVersion":1},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n1111","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"1234"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[-592,1664],"id":"6699443d-0372-4cbf-958a-e890a12c5381","name":"HTTP Request1"}]{"Webhook":{"main":[[{"node":"Build Docker Command","type":"main","index":0}]]},"Build Docker Command":{"main":[[{"node":"Run Docker","type":"main","index":0}]]},"Run Docker":{"main":[[{"node":"Respond","type":"main","index":0}]]},"Set Input":{"main":[[{"node":"Build Commands","type":"main","index":0}]]},"Build Commands":{"main":[[{"node":"Check Existing","type":"main","index":0},{"node":"Create Volume","type":"main","index":0}]]},"Check Existing":{"main":[[{"node":"Fail If Exists","type":"main","index":0}]]},"Fail If Exists":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Create Volume":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Run Container":{"main":[[{"node":"Prepare Response","type":"main","index":0}]]},"Prepare Response":{"main":[[{"node":"Respond1","type":"main","index":0}]]},"Webhook1":{"main":[[{"node":"Set Input","type":"main","index":0}]]},"Check Duplicate":{"main":[[{"node":"Build Docker Command1","type":"main","index":0}]]},"Webhook2":{"main":[[{"node":"Prepare Data","type":"main","index":0}]]},"Build Docker Command1":{"main":[[{"node":"Run Docker1","type":"main","index":0}]]},"Run Docker1":{"main":[[{"node":"Respond2","type":"main","index":0}]]},"Prepare Data":{"main":[[{"node":"List Containers","type":"main","index":0}]]},"List Containers":{"main":[[{"node":"Check Duplicate","type":"main","index":0}]]}} __U-O;;SI c4d8b9a6-f94e-472b-96a8-34466617b949ioR8eFBEVaKOkjc0RIZOWAN rizowansiddique@gmail.com2026-03-06 05:10:23.0322026-03-06 05:10:23.032[{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook","type":"n8n-nodes-base.webhook","position":[-192,-144],"typeVersion":1,"id":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","webhookId":"a4d792e3-b5b9-425f-b612-c938e71de65d"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = \"n8n.\" + user + \".inmetech.cloud\";\n\nconst cmd = `\ndocker run -d \\\n--name n8n-${user} \\\n--memory=${ram} \\\n--cpus=${cpu} \\\n-v n8n_${user}:/home/node/.n8n \\\n-e N8N_HOST=${domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \"traefik.http.routers.n8n-${user}.rule=Host('${domain}')\" \\\n--label traefik.http.routers.n8n-${user}.entrypoints=websecure \\\n--label traefik.http.routers.n8n-${user}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.n8n-${user}.loadbalancer.server.port=5678 \\\ndocker.n8n.io/n8nio/n8n\n`;\n\nreturn [{\n json: {\n command: cmd,\n url: \"https://\" + domain\n }\n}];"},"name":"Build Docker Command","type":"n8n-nodes-base.function","position":[176,-192],"typeVersion":1,"id":"7c91468e-80ea-4de5-8553-376dc01f0973","disabled":true},{"parameters":{"command":"={{$json.command}}"},"name":"Run Docker","type":"n8n-nodes-base.executeCommand","position":[416,-144],"typeVersion":1,"id":"d049c848-745f-43ce-ad8f-2069344eb356"},{"parameters":{"options":{}},"name":"Respond","type":"n8n-nodes-base.respondToWebhook","position":[672,-144],"typeVersion":1,"id":"c17c8373-bb00-4562-ae8f-c18a13839f0d"},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"user123"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[336,-400],"id":"9654e007-c6e7-4a2b-b48a-7ee7df40a1c0","name":"HTTP Request"},{"parameters":{"values":{"string":[{"name":"apiKey","value":"{{$json[\"apiKey\"] || $env.API_KEY || \"\"}}"},{"name":"username","value":"={{$json[\"username\"] || $json[\"email\"] || $json[\"user\"] || \"user\"}}"},{"name":"plan","value":"={{$json[\"plan\"] || \"basic\"}}"},{"name":"domain","value":"={{$json[\"domain\"] || $env.DEFAULT_DOMAIN || \"inmetech.cloud\"}}"}]},"options":{}},"name":"Set Input","type":"n8n-nodes-base.set","typeVersion":1,"position":[-400,256],"id":"503fad3f-a1b5-4820-a049-48dd916574f5"},{"parameters":{"functionCode":"const payload = items[0].json;\n\n// simple API key check (secure your webhook in production)\nconst providedKey = payload.apiKey || '';\nconst expected = process.env.API_KEY || '';\nif (!expected || providedKey !== expected) {\n throw new Error('Invalid API key');\n}\n\n// sanitize username\nlet raw = (payload.username || 'user').toString();\nlet username = raw.toLowerCase().replace(/[^a-z0-9\\-]/g, '').slice(0, 20) || 'user';\n\n/onst subdomain = `n8n-${username}`;\nconst host = `${subdomain}.${domain}`;\nconst containerName = `n8n-${username}`;\nconst volume = `${containerName}_data`;\n\n// environment variables for each user container (disable dangerous nodes for clients)\nconst envs = [\n `-e N8N_HOST=${host}`,\n `-e N8N_PROTOCOL=https`,\n `-e WEBHOOK_URL=https://${host}/` ,\n `-e N8N_TRUST_PROXY=true`,\n `-e N8N_SECURE_COOKIE=true`,\n `-e NODES_EXCLUDE=[\"n8n-nodes-base.executeCommand\",\"n8n-nodes-base.localFileTrigger\"]`\n];\n\n// labels for Traefik routing\nconst labels = [\n `--label traefik.enable=true`,\n `--label traefik.http.routers.${containerName}.entrypoints=websecure`,\n `--label traefik.http.routers.${containerName}.rule=Host(\\`${host}\\`)`,\n `--label traefik.http.routers.${containerName}.tls.certresolver=letsencrypt`,\n `--label traefik.http.services.${containerName}.loadbalancer.server.port=5678`\n];\n\n// prepare docker commands\nconst cmdCreateVolume = `docker volume create ${volume}`;\nconst cmdRun = `docker run -d --name ${containerName} --restart unless-stopped --memory=${res.ram} --cpus=${res.cpus} -v ${volume}:/home/node/.n8n ${envs.join(' ')} ${labels.join(' ')} docker.n8n.io/n8nio/n8n`;\n\n// check existing container cmd\nconst cmdCheck = `docker ps -a --filter \\\"name=^/${containerName}$\\\" --format \\\"{{.Names}}\\\"`;\n\nreturn [ { json: { username, plan, domain, host, containerName, cmdCreateVolume, cmdRun, cmdCheck } } ];"},"name":"Build Commands","type":"n8n-nodes-base.function","typeVersion":1,"position":[-160,256],"id":"6b4138b5-495d-46a4-8a37-1ef01adb601a"},{"parameters":{"command":"={{$json.commandCheck}}"},"name":"Check Existing","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,192],"id":"33050773-1166-410e-af9a-2629b205483c"},{"parameters":{"functionCode":"const out = items[0].json;\nif (out && out.data && out.data.length) {\n const names = out.data.trim();\n if (names) throw new Error(`Container already exists: ${names}`);\n}\nreturn items;"},"name":"Fail If Exists","type":"n8n-nodes-base.function","typeVersion":1,"position":[336,192],"id":"8b770345-6008-45df-b449-648dc9181903"},{"parameters":{"command":"={{$json.cmdCreateVolume}}"},"name":"Create Volume","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,320],"id":"c3ef5fcd-65be-44ef-a8fa-dc1db8dc1621"},{"parameters":{"command":"={{$json.cmdRun}}"},"name":"Run Container","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[336,320],"id":"749ef316-deab-4898-805c-891900d0fed0"},{"parameters":{"functionCode":"const j = items[0].json;\nreturn [{ json: { success: true, host: j.host, container: j.containerName, message: 'Container creation triggered. Allow 10-30s to boot and acquire TLS.' } }];"},"name":"Prepare Response","type":"n8n-nodes-base.function","typeVersion":1,"position":[608,256],"id":"352f91c6-e900-433c-8d9b-b653cbf5e275"},{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook1","type":"n8n-nodes-base.webhook","typeVersion":1,"position":[-640,256],"id":"8e72c500-0d98-4892-b3bf-16633ffdb18f","webhookId":"91e8d5c0-cb20-4d3a-978a-db8e22e4073b","disabled":true},{"parameters":{"options":{}},"name":"Respond1","type":"n8n-nodes-base.respondToWebhook","typeVersion":1,"position":[864,256],"id":"8d30d07b-7c63-43dd-89cc-fed8ec9d226b"},{"parameters":{"functionCode":"const user = ;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = `n8n.${user}.inmetech.cloud`;\n\nreturn [{\n json: {\n user,\n ram,\n cpu,\n domain,\n container: `n8n-${user}`,\n volume: `n8n_${user}`\n }\n}];"},"id":"9ddf7ecd-9b82-40df-82c7-63fc748fb79c","name":"Prepare Data","type":"n8n-nodes-base.function","position":[-672,1200],"typeVersion":1},{"parameters":{"command":"docker ps -a --format '{{.Names}}'"},"id":"0f259cf3-ccd1-481d-b237-bbb048f9ce3c","name":"List Containers","type":"n8n-nodes-base.executeCommand","position":[-416,1088],"typeVersion":1},{"parameters":{"functionCode":"const existing = $json.stdout || \"\";\nconst user = $items(\"Prepare Data\")[0].json.user;\n\nif (existing.includes(`n8n-${user}`)) {\n throw new Error(\"Container already exists\");\n}\n\nreturn $items(\"Prepare Data\");"},"id":"12aa3069-ada6-4845-ad2f-87af3d31bb85","name":"Check Duplicate","type":"n8n-nodes-base.function","position":[-160,1088],"typeVersion":1},{"parameters":{"httpMethod":"POST","path":"create-n8n1111","options":{}},"id":"fb6697e6-8815-4beb-936d-f16f1814cfdc","name":"Webhook2","type":"n8n-nodes-base.webhook","position":[-912,1200],"typeVersion":1,"webhookId":"c08aedad-597e-4ea4-b647-bccecb2c90f3"},{"parameters":{"functionCode":"const data = $json;\n\nconst cmd = `docker run -d \\\n--name ${data.container} \\\n--memory=${data.ram} \\\n--cpus=${data.cpu} \\\n-v ${data.volume}:/home/node/.n8n \\\n-e N8N_HOST=${data.domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${data.domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \\\"traefik.http.routers.${data.container}.rule=Host('${data.domain}')\\\" \\\n--label traefik.http.routers.${data.container}.entrypoints=websecure \\\n--label traefik.http.routers.${data.container}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.${data.container}.loadbalancer.server.port=5678 \\\n docker.n8n.io/n8nio/n8n`;\n\nreturn [{ json: { command: cmd, url: `https://${data.domain}` } }];"},"id":"36f16652-730e-4ff9-8978-16747fa1d8e3","name":"Build Docker Command1","type":"n8n-nodes-base.function","position":[96,1200],"typeVersion":1},{"parameters":{"command":"={{$json.command}}"},"id":"652ddbd1-09f1-4ac6-84c2-169a34d5016c","name":"Run Docker1","type":"n8n-nodes-base.executeCommand","position":[336,1200],"typeVersion":1},{"parameters":{"options":{}},"id":"2672e437-0f80-43fa-91ad-80805b69d424","name":"Respond2","type":"n8n-nodes-base.respondToWebhook","position":[592,1200],"typeVersion":1},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n1111","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"1234"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[-592,1664],"id":"6699443d-0372-4cbf-958a-e890a12c5381","name":"HTTP Request1"},{"parameters":{"jsCode":"// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n item.json.myNewField = 1;\n}\n\nreturn $input.all();"},"type":"n8n-nodes-base.code","typeVersion":2,"position":[-464,1200],"id":"48594458-80cf-442a-be1d-c146a406d631","name":"Code in JavaScript"}]{"Webhook":{"main":[[{"node":"Build Docker Command","type":"main","index":0}]]},"Build Docker Command":{"main":[[{"node":"Run Docker","type":"main","index":0}]]},"Run Docker":{"main":[[{"node":"Respond","type":"main","index":0}]]},"Set Input":{"main":[[{"node":"Build Commands","type":"main","index":0}]]},"Build Commands":{"main":[[{"node":"Check Existing","type":"main","index":0},{"node":"Create Volume","type":"main","index":0}]]},"Check Existing":{"main":[[{"node":"Fail If Exists","type":"main","index":0}]]},"Fail If Exists":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Create Volume":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Run Container":{"main":[[{"node":"Prepare Response","type":"main","index":0}]]},"Prepare Response":{"main":[[{"node":"Respond1","type":"main","index":0}]]},"Webhook1":{"main":[[{"node":"Set Input","type":"main","index":0}]]},"Check Duplicate":{"main":[[{"node":"Build Docker Command1","type":"main","index":0}]]},"Webhook2":{"main":[[{"node":"Prepare Data","type":"main","index":0}]]},"Build Docker Command1":{"main":[[{"node":"Run Docker1","type":"main","index":0}]]},"Run Docker1":{"main":[[{"node":"Respond2","type":"main","index":0}]]},"Prepare Data":{"main":[[{"node":"List Containers","type":"main","index":0},{"node":"Code in JavaScript","type":"main","index":0}]]},"List Containers":{"main":[[{"node":"Check Duplicate","type":"main","index":0}]]}} %U-O;; 5 b0319ad9-feaa-4e2d-a01f-87c1bdedcec8ioR8eFBEVaKOkjc0RIZOWAN rizowansiddique@gmail.com2026-03-06 05:11:17.0862026-03-06 05:11:17.086[{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook","type":"n8n-nodes-base.webhook","position":[-192,-144],"typeVersion":1,"id":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","webhookId":"a4d792e3-b5b9-425f-b612-c938e71de65d"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = \"n8n.\" + user + \".inmetech.cloud\";\n\nconst cmd = `\ndocker run -d \\\n--name n8n-${user} \\\n--memory=${ram} \\\n--cpus=${cpu} \\\n-v n8n_${user}:/home/node/.n8n \\\n-e N8N_HOST=${domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \"traefik.http.routers.n8n-${user}.rule=Host('${domain}')\" \\\n--label traefik.http.routers.n8n-${user}.entrypoints=websecure \\\n--label traefik.http.routers.n8n-${user}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.n8n-${user}.loadbalancer.server.port=5678 \\\ndocker.n8n.io/n8nio/n8n\n`;\n\nreturn [{\n json: {\n command: cmd,\n url: \"https://\" + domain\n }\n}];"},"name":"Build Docker Command","type":"n8n-nodes-base.function","position":[176,-192],"typeVersion":1,"id":"7c91468e-80ea-4de5-8553-376dc01f0973","disabled":true},{"parameters":{"command":"={{$json.command}}"},"name":"Run Docker","type":"n8n-nodes-base.executeCommand","position":[416,-144],"typeVersion":1,"id":"d049c848-745f-43ce-ad8f-2069344eb356"},{"parameters":{"options":{}},"name":"Respond","type":"n8n-nodes-base.respondToWebhook","position":[672,-144],"typeVersion":1,"id":"c17c8373-bb00-4562-ae8f-c18a13839f0d"},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"user123"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[336,-400],"id":"9654e007-c6e7-4a2b-b48a-7ee7df40a1c0","name":"HTTP Request"},{"parameters":{"values":{"string":[{"name":"apiKey","value":"{{$json[\"apiKey\"] || $env.API_KEY || \"\"}}"},{"name":"username","value":"={{$json[\"username\"] || $json[\"email\"] || $json[\"user\"] || \"user\"}}"},{"name":"plan","value":"={{$json[\"plan\"] || \"basic\"}}"},{"name":"domain","value":"={{$json[\"domain\"] || $env.DEFAULT_DOMAIN || \"inmetech.cloud\"}}"}]},"options":{}},"name":"Set Input","type":"n8n-nodes-base.set","typeVersion":1,"position":[-400,256],"id":"503fad3f-a1b5-4820-a049-48dd916574f5"},{"parameters":{"functionCode":"const payload = items[0].json;\n\n// simple API key check (secure your webhook in production)\nconst providedKey = payload.apiKey || '';\nconst expected = process.env.API_KEY || '';\nif (!expected || providedKey !== expected) {\n throw new Error('Invalid API key');\n}\n\n// sanitize username\nlet raw = (payload.username || 'user').toString();\nlet username = raw.toLowerCase().replace(/[^a-z0-9\\-]/g, '').slice(0, 20) || 'user';\n\n// plan -> resources mapping (restrict to allowed values)\nconst plans = {\n basic: { ram: '1g', cpus: '0.5' },\n pro: { ram: '2g', cpus: '1' },\n agency: { ram: '4g', cpus: '2' }\n};\nconst plan = (payload.plan || 'basic').toLowerCase();\nconst res = plans[plan] || plans['basic'];\n\nconst domain = (payload.domain || process.env.DEFAULT_DOMAIN || 'inmetech.cloud').replace(/[^a-z0-9.\\-]/gi,'');\nc|| 'inmetech.cloud').replace(/[^a-z0-9.\\-]/gi,'');\nconst subdomain = `n8n-${username}`;\nconst host = `${subdomain}.${domain}`;\nconst containerName = `n8n-${username}`;\nconst volume = `${containerName}_data`;\n\n// environment variables for each user container (disable dangerous nodes for clients)\nconst envs = [\n `-e N8N_HOST=${host}`,\n `-e N8N_PROTOCOL=https`,\n `-e WEBHOOK_URL=https://${host}/` ,\n `-e N8N_TRUST_PROXY=true`,\n `-e N8N_SECURE_COOKIE=true`,\n `-e NODES_EXCLUDE=[\"n8n-nodes-base.executeCommand\",\"n8n-nodes-base.localFileTrigger\"]`\n];\n\n// labels for Traefik routing\nconst labels = [\n `--label traefik.enable=true`,\n `--label traefik.http.routers.${containerName}.entrypoints=websecure`,\n `--label traefik.http.routers.${containerName}.rule=Host(\\`${host}\\`)`,\n `--label traefik.http.routers.${containerName}.tls.certresolver=letsencrypt`,\n `--label traefik.http.services.${containerName}.loadbalancer.server.port=5678`\n];\n\n// prepare docker commands\nconst cmdCreateVolume = `docker volume create ${volume}`;\nconst cmdRun = `docker run -d --name ${containerName} --restart unless-stopped --memory=${res.ram} --cpus=${res.cpus} -v ${volume}:/home/node/.n8n ${envs.join(' ')} ${labels.join(' ')} docker.n8n.io/n8nio/n8n`;\n\n// check existing container cmd\nconst cmdCheck = `docker ps -a --filter \\\"name=^/${containerName}$\\\" --format \\\"{{.Names}}\\\"`;\n\nreturn [ { json: { username, plan, domain, host, containerName, cmdCreateVolume, cmdRun, cmdCheck } } ];"},"name":"Build Commands","type":"n8n-nodes-base.function","typeVersion":1,"position":[-160,256],"id":"6b4138b5-495d-46a4-8a37-1ef01adb601a"},{"parameters":{"command":"={{$json.commandCheck}}"},"name":"Check Existing","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,192],"id":"33050773-1166-410e-af9a-2629b205483c"},{"parameters":{"functionCode":"const out = items[0].json;\nif (out && out.data && out.data.length) {\n const names = out.data.trim();\n if (names) throw new Error(`Container already exists: ${names}`);\n}\nreturn items;"},"name":"Fail If Exists","type":"n8n-nodes-base.function","typeVersion":1,"position":[336,192],"id":"8b770345-6008-45df-b449-648dc9181903"},{"parameters":{"command":"={{$json.cmdCreateVolume}}"},"name":"Create Volume","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,320],"id":"c3ef5fcd-65be-44ef-a8fa-dc1db8dc1621"},{"parameters":{"command":"={{$json.cmdRun}}"},"name":"Run Container","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[336,320],"id":"749ef316-deab-4898-805c-891900d0fed0"},{"parameters":{"functionCode":"const j = items[0].json;\nreturn [{ json: { success: true, host: j.host, container: j.containerName, message: 'Container creation triggered. Allow 10-30s to boot and acquire TLS.' } }];"},"name":"Prepare Response","type":"n8n-nodes-base.function","typeVersion":1,"position":[608,256],"id":"352f91c6-e900-433c-8d9b-b653cbf5e275"},{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook1","type":"n8n-nodes-base.webhook","typeVersion":1,"position":[-640,256],"id":"8e72c500-0d98-4892-b3bf-16633ffdb18f","webhookId":"91e8d5c0-cb20-4d3a-978a-db8e22e4073b","disabled":true},{"parameters":{"options":{}},"name":"Respond1","type":"n8n-nodes-base.respondToWebhook","typeVersion":1,"position":[864,256],"id":"8d30d07b-7c63-43dd-89cc-fed8ec9d226b"},{"parameters":{"functionCode":"const user = ;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = `n8n.${user}.inmetech.cloud`;\n\nreturn [{\n json: {\n user,\n ram,\n cpu,\n domain,\n container: `n8n-${user}`,\n volume: `n8n_${user}`\n }\n}];"},"id":"9ddf7ecd-9b82-40df-82c7-63fc748fb79c","name":"Prepare Data","type":"n8n-nodes-base.function","position":[-672,1200],"typeVersion":1},{"parameters":{"command":"docker ps -a --format '{{.Names}}'"},"id":"0f259cf3-ccd1-481d-b237-bbb048f9ce3c","name":"List Containers","type":"n8n-nodes-base.executeCommand","position":[-416,1088],"typeVersion":1},{"parameters":{"functionCode":"const existing = $json.stdout || \"\";\nconst user = $items(\"Prepare Data\")[0].json.user;\n\nif (existing.includes(`n8n-${user}`)) {\n throw new Error(\"Container already exists\");\n}\n\nreturn $items(\"Prepare Data\");"},"id":"12aa3069-ada6-4845-ad2f-87af3d31bb85","name":"Check Duplicate","type":"n8n-nodes-base.function","position":[-160,1088],"typeVersion":1},{"parameters":{"httpMethod":"POST","path":"create-n8n1111","options":{}},"id":"fb6697e6-8815-4beb-936d-f16f1814cfdc","name":"Webhook2","type":"n8n-nodes-base.webhook","position":[-912,1200],"typeVersion":1,"webhookId":"c08aedad-597e-4ea4-b647-bccecb2c90f3"},{"parameters":{"functionCode":"const data = $json;\n\nconst cmd = `docker run -d \\\n--name ${data.container} \\\n--memory=${data.ram} \\\n--cpus=${data.cpu} \\\n-v ${data.volume}:/home/node/.n8n \\\n-e N8N_HOST=${data.domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${data.domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \\\"traefik.http.routers.${data.container}.rule=Host('${data.domain}')\\\" \\\n--label traefik.http.routers.${data.container}.entrypoints=websecure \\\n--label traefik.http.routers.${data.container}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.${data.container}.loadbalancer.server.port=5678 \\\n docker.n8n.io/n8nio/n8n`;\n\nreturn [{ json: { command: cmd, url: `https://${data.domain}` } }];"},"id":"36f16652-730e-4ff9-8978-16747fa1d8e3","name":"Build Docker Command1","type":"n8n-nodes-base.function","position":[96,1200],"typeVersion":1},{"parameters":{"command":"={{$json.command}}"},"id":"652ddbd1-09f1-4ac6-84c2-169a34d5016c","name":"Run Docker1","type":"n8n-nodes-base.executeCommand","position":[336,1200],"typeVersion":1},{"parameters":{"options":{}},"id":"2672e437-0f80-43fa-91ad-80805b69d424","name":"Respond2","type":"n8n-nodes-base.respondToWebhook","position":[592,1200],"typeVersion":1},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n1111","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"1234"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[-592,1664],"id":"6699443d-0372-4cbf-958a-e890a12c5381","name":"HTTP Request1"},{"parameters":{"jsCode":"// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n item.json.myNewField = 1;\n}\n\nreturn $input.all();"},"type":"n8n-nodes-base.code","typeVersion":2,"position":[-464,1200],"id":"48594458-80cf-442a-be1d-c146a406d631","name":"Code in JavaScript"}]{"Webhook":{"main":[[{"node":"Build Docker Command","type":"main","index":0}]]},"Build Docker Command":{"main":[[{"node":"Run Docker","type":"main","index":0}]]},"Run Docker":{"main":[[{"node":"Respond","type":"main","index":0}]]},"Set Input":{"main":[[{"node":"Build Commands","type":"main","index":0}]]},"Build Commands":{"main":[[{"node":"Check Existing","type":"main","index":0},{"node":"Create Volume","type":"main","index":0}]]},"Check Existing":{"main":[[{"node":"Fail If Exists","type":"main","index":0}]]},"Fail If Exists":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Create Volume":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Run Container":{"main":[[{"node":"Prepare Response","type":"main","index":0}]]},"Prepare Response":{"main":[[{"node":"Respond1","type":"main","index":0}]]},"Webhook1":{"main":[[{"node":"Set Input","type":"main","index":0}]]},"Check Duplicate":{"main":[[{"node":"Build Docker Command1","type":"main","index":0}]]},"Webhook2":{"main":[[{"node":"Prepare Data","type":"main","index":0}]]},"Build Docker Command1":{"main":[[{"node":"Run Docker1","type":"main","index":0}]]},"Run Docker1":{"main":[[{"node":"Respond2","type":"main","index":0}]]},"Prepare Data":{"main":[[{"node":"List Containers","type":"main","index":0}]]},"List Containers":{"main":[[{"node":"Check Duplicate","type":"main","index":0}]]}} oU-O;; I 3763d912-8e4d-42ae-95c0-5756b67cad5eioR8eFBEVaKOkjc0RIZOWAN rizowansiddique@gmail.com2026-03-06 05:11:20.9102026-03-06 05:11:20.910[{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook","type":"n8n-nodes-base.webhook","position":[-192,-144],"typeVersion":1,"id":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","webhookId":"a4d792e3-b5b9-425f-b612-c938e71de65d"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = \"n8n.\" + user + \".inmetech.cloud\";\n\nconst cmd = `\ndocker run -d \\\n--name n8n-${user} \\\n--memory=${ram} \\\n--cpus=${cpu} \\\n-v n8n_${user}:/home/node/.n8n \\\n-e N8N_HOST=${domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \"traefik.http.routers.n8n-${user}.rule=Host('${domain}')\" \\\n--label traefik.http.routers.n8n-${user}.entrypoints=websecure \\\n--label traefik.http.routers.n8n-${user}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.n8n-${user}.loadbalancer.server.port=5678 \\\ndocker.n8n.io/n8nio/n8n\n`;\n\nreturn [{\n json: {\n command: cmd,\n url: \"https://\" + domain\n }\n}];"},"name":"Build Docker Command","type":"n8n-nodes-base.function","position":[176,-192],"typeVersion":1,"id":"7c91468e-80ea-4de5-8553-376dc01f0973","disabled":true},{"parameters":{"command":"={{$json.command}}"},"name":"Run Docker","type":"n8n-nodes-base.executeCommand","position":[416,-144],"typeVersion":1,"id":"d049c848-745f-43ce-ad8f-2069344eb356"},{"parameters":{"options":{}},"name":"Respond","type":"n8n-nodes-base.respondToWebhook","position":[672,-144],"typeVersion":1,"id":"c17c8373-bb00-4562-ae8f-c18a13839f0d"},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"user123"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[336,-400],"id":"9654e007-c6e7-4a2b-b48a-7ee7df40a1c0","name":"HTTP Request"},{"parameters":{"values":{"string":[{"name":"apiKey","value":"{{$json[\"apiKey\"] || $env.API_KEY || \"\"}}"},{"name":"username","value":"={{$json[\"username\"] || $json[\"email\"] || $json[\"user\"] || \"user\"}}"},{"name":"plan","value":"={{$json[\"plan\"] || \"basic\"}}"},{"name":"domain","value":"={{$json[\"domain\"] || $env.DEFAULT_DOMAIN || \"inmetech.cloud\"}}"}]},"options":{}},"name":"Set Input","type":"n8n-nodes-base.set","typeVersion":1,"position":[-400,256],"id":"503fad3f-a1b5-4820-a049-48dd916574f5"},{"parameters":{"functionCode":"const payload = items[0].json;\n\n// simple API key check (secure your webhook in production)\nconst providedKey = payload.apiKey || '';\nconst expected = process.env.API_KEY || '';\nif (!expected || providedKey !== expected) {\n throw new Error('Invalid API key');\n}\n\n// sanitize username\nlet raw = (payload.username || 'user').toString();\nlet username = raw.toLowerCase().replace(/[^a-z0-9\\-]/g, '').slice(0, 20) || 'user';\n\n// plan -> resources mapping (restrict to allowed values)\nconst plans = {\n basic: { ram: '1g', cpus: '0.5' },\n pro: { ram: '2g', cpus: '1' },\n agency: { ram: '4g', cpus: '2' }\n};\nconst plan = (payload.plan || 'basic').toLowerCase();\nconst res = plans[plan] || plans['basic'];\n\nconst domain = (payload.domain || process.env.DEFAULT_DOMAIN pping (restrict to allowed values)\nconst plans = {\n basic: { ram: '1g', cpus: '0.5' },\n pro: { ram: '2g', cpus: '1' },\n agency: { ram: '4g', cpus: '2' }\n};\nconst plan = (payload.plan || 'basic').toLowerCase();\nconst res = plans[plan] || plans['basic'];\n\nconst domain = (payload.domain || process.env.DEFAULT_DOMAIN || 'inmetech.cloud').replace(/[^a-z0-9.\\-]/gi,'');\nconst subdomain = `n8n-${username}`;\nconst host = `${subdomain}.${domain}`;\nconst containerName = `n8n-${username}`;\nconst volume = `${containerName}_data`;\n\n// environment variables for each user container (disable dangerous nodes for clients)\nconst envs = [\n `-e N8N_HOST=${host}`,\n `-e N8N_PROTOCOL=https`,\n `-e WEBHOOK_URL=https://${host}/` ,\n `-e N8N_TRUST_PROXY=true`,\n `-e N8N_SECURE_COOKIE=true`,\n `-e NODES_EXCLUDE=[\"n8n-nodes-base.executeCommand\",\"n8n-nodes-base.localFileTrigger\"]`\n];\n\n// labels for Traefik routing\nconst labels = [\n `--label traefik.enable=true`,\n `--label traefik.http.routers.${containerName}.entrypoints=websecure`,\n `--label traefik.http.routers.${containerName}.rule=Host(\\`${host}\\`)`,\n `--label traefik.http.routers.${containerName}.tls.certresolver=letsencrypt`,\n `--label traefik.http.services.${containerName}.loadbalancer.server.port=5678`\n];\n\n// prepare docker commands\nconst cmdCreateVolume = `docker volume create ${volume}`;\nconst cmdRun = `docker run -d --name ${containerName} --restart unless-stopped --memory=${res.ram} --cpus=${res.cpus} -v ${volume}:/home/node/.n8n ${envs.join(' ')} ${labels.join(' ')} docker.n8n.io/n8nio/n8n`;\n\n// check existing container cmd\nconst cmdCheck = `docker ps -a --filter \\\"name=^/${containerName}$\\\" --format \\\"{{.Names}}\\\"`;\n\nreturn [ { json: { username, plan, domain, host, containerName, cmdCreateVolume, cmdRun, cmdCheck } } ];"},"name":"Build Commands","type":"n8n-nodes-base.function","typeVersion":1,"position":[-160,256],"id":"6b4138b5-495d-46a4-8a37-1ef01adb601a"},{"parameters":{"command":"={{$json.commandCheck}}"},"name":"Check Existing","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,192],"id":"33050773-1166-410e-af9a-2629b205483c"},{"parameters":{"functionCode":"const out = items[0].json;\nif (out && out.data && out.data.length) {\n const names = out.data.trim();\n if (names) throw new Error(`Container already exists: ${names}`);\n}\nreturn items;"},"name":"Fail If Exists","type":"n8n-nodes-base.function","typeVersion":1,"position":[336,192],"id":"8b770345-6008-45df-b449-648dc9181903"},{"parameters":{"command":"={{$json.cmdCreateVolume}}"},"name":"Create Volume","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,320],"id":"c3ef5fcd-65be-44ef-a8fa-dc1db8dc1621"},{"parameters":{"command":"={{$json.cmdRun}}"},"name":"Run Container","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[336,320],"id":"749ef316-deab-4898-805c-891900d0fed0"},{"parameters":{"functionCode":"const j = items[0].json;\nreturn [{ json: { success: true, host: j.host, container: j.containerName, message: 'Container creation triggered. Allow 10-30s to boot and acquire TLS.' } }];"},"name":"Prepare Response","type":"n8n-nodes-base.function","typeVersion":1,"position":[608,256],"id":"352f91c6-e900-433c-8d9b-b653cbf5e275"},{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook1","type":"n8n-nodes-base.webhook","typeVersion":1,"position":[-640,256],"id":"8e72c500-0d98-4892-b3bf-16633ffdb18f","webhookId":"91e8d5c0-cb20-4d3a-978a-db8e22e4073b","disabled":true},{"parameters":{"options":{}},"name":"Respond1","type":"n8n-nodes-base.respondToWebhook","typeVersion":1,"position":[864,256],"id":"8d30d07b-7c63-43dd-89cc-fed8ec9d226b"},{"parameters":{"functionCode":""},"id":"9ddf7ecd-9b82-40df-82c7-63fc748fb79c","name":"Prepare Data","type":"n8n-nodes-base.function","position":[-672,1200],"typeVersion":1},{"parameters":{"command":"docker ps -a --format '{{.Names}}'"},"id":"0f259cf3-ccd1-481d-b237-bbb048f9ce3c","name":"List Containers","type":"n8n-nodes-base.executeCommand","position":[-416,1088],"typeVersion":1},{"parameters":{"functionCode":"const existing = $json.stdout || \"\";\nconst user = $items(\"Prepare Data\")[0].json.user;\n\nif (existing.includes(`n8n-${user}`)) {\n throw new Error(\"Container already exists\");\n}\n\nreturn $items(\"Prepare Data\");"},"id":"12aa3069-ada6-4845-ad2f-87af3d31bb85","name":"Check Duplicate","type":"n8n-nodes-base.function","position":[-160,1088],"typeVersion":1},{"parameters":{"httpMethod":"POST","path":"create-n8n1111","options":{}},"id":"fb6697e6-8815-4beb-936d-f16f1814cfdc","name":"Webhook2","type":"n8n-nodes-base.webhook","position":[-912,1200],"typeVersion":1,"webhookId":"c08aedad-597e-4ea4-b647-bccecb2c90f3"},{"parameters":{"functionCode":"const data = $json;\n\nconst cmd = `docker run -d \\\n--name ${data.container} \\\n--memory=${data.ram} \\\n--cpus=${data.cpu} \\\n-v ${data.volume}:/home/node/.n8n \\\n-e N8N_HOST=${data.domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${data.domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \\\"traefik.http.routers.${data.container}.rule=Host('${data.domain}')\\\" \\\n--label traefik.http.routers.${data.container}.entrypoints=websecure \\\n--label traefik.http.routers.${data.container}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.${data.container}.loadbalancer.server.port=5678 \\\n docker.n8n.io/n8nio/n8n`;\n\nreturn [{ json: { command: cmd, url: `https://${data.domain}` } }];"},"id":"36f16652-730e-4ff9-8978-16747fa1d8e3","name":"Build Docker Command1","type":"n8n-nodes-base.function","position":[96,1200],"typeVersion":1},{"parameters":{"command":"={{$json.command}}"},"id":"652ddbd1-09f1-4ac6-84c2-169a34d5016c","name":"Run Docker1","type":"n8n-nodes-base.executeCommand","position":[336,1200],"typeVersion":1},{"parameters":{"options":{}},"id":"2672e437-0f80-43fa-91ad-80805b69d424","name":"Respond2","type":"n8n-nodes-base.respondToWebhook","position":[592,1200],"typeVersion":1},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n1111","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"1234"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[-592,1664],"id":"6699443d-0372-4cbf-958a-e890a12c5381","name":"HTTP Request1"},{"parameters":{"jsCode":"// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n item.json.myNewField = 1;\n}\n\nreturn $input.all();"},"type":"n8n-nodes-base.code","typeVersion":2,"position":[-464,1200],"id":"48594458-80cf-442a-be1d-c146a406d631","name":"Code in JavaScript"}]{"Webhook":{"main":[[{"node":"Build Docker Command","type":"main","index":0}]]},"Build Docker Command":{"main":[[{"node":"Run Docker","type":"main","index":0}]]},"Run Docker":{"main":[[{"node":"Respond","type":"main","index":0}]]},"Set Input":{"main":[[{"node":"Build Commands","type":"main","index":0}]]},"Build Commands":{"main":[[{"node":"Check Existing","type":"main","index":0},{"node":"Create Volume","type":"main","index":0}]]},"Check Existing":{"main":[[{"node":"Fail If Exists","type":"main","index":0}]]},"Fail If Exists":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Create Volume":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Run Container":{"main":[[{"node":"Prepare Response","type":"main","index":0}]]},"Prepare Response":{"main":[[{"node":"Respond1","type":"main","index":0}]]},"Webhook1":{"main":[[{"node":"Set Input","type":"main","index":0}]]},"Check Duplicate":{"main":[[{"node":"Build Docker Command1","type":"main","index":0}]]},"Webhook2":{"main":[[{"node":"Prepare Data","type":"main","index":0}]]},"Build Docker Command1":{"main":[[{"node":"Run Docker1","type":"main","index":0}]]},"Run Docker1":{"main":[[{"node":"Respond2","type":"main","index":0}]]},"Prepare Data":{"main":[[{"node":"List Containers","type":"main","index":0}]]},"List Containers":{"main":[[{"node":"Check Duplicate","type":"main","index":0}]]}} II(U-O;;I af3173d0-d5a2-4e82-8080-9dc9eb1a5638ioR8eFBEVaKOkjc0RIZOWAN rizowansiddique@gmail.com2026-03-06 05:11:24.7732026-03-06 05:11:24.773[{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook","type":"n8n-nodes-base.webhook","position":[-192,-144],"typeVersion":1,"id":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","webhookId":"a4d792e3-b5b9-425f-b612-c938e71de65d"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = \"n8n.\" + user + \".inmetech.cloud\";\n\nconst cmd = `\ndocker run -d \\\n--name n8n-${user} \\\n--memory=${ram} \\\n--cpus=${cpu} \\\n-v n8n_${user}:/home/node/.n8n \\\n-e N8N_HOST=${domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \"traefik.http.routers.n8n-${user}.rule=Host('${domain}')\" \\\n--label traefik.http.routers.n8n-${user}.entrypoints=websecure \\\n--label traefik.http.routers.n8n-${user}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.n8n-${user}.loadbalancer.server.port=5678 \\\ndocker.n8n.io/n8nio/n8n\n`;\n\nreturn [{\n json: {\n command: cmd,\n url: \"https://\" + domain\n }\n}];"},"name":"Build Docker Command","type":"n8n-nodes-base.function","position":[176,-192],"typeVersion":1,"id":"7c91468e-80ea-4de5-8553-376dc01f0973","disabled":true},{"parameters":{"command":"={{$json.command}}"},"name":"Run Docker","type":"n8n-nodes-base.executeCommand","position":[416,-144],"typeVersion":1,"id":"d049c848-745f-43ce-ad8f-2069344eb356"},{"parameters":{"options":{}},"name":"Respond","type":"n8n-nodes-base.respondToWebhook","position":[672,-144],"typeVersion":1,"id":"c17c8373-bb00-4562-ae8f-c18a13839f0d"},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"user123"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[336,-400],"id":"9654e007-c6e7-4a2b-b48a-7ee7df40a1c0","name":"HTTP Request"},{"parameters":{"values":{"string":[{"name":"apiKey","value":"{{$json[\"apiKey\"] || $env.API_KEY || \"\"}}"},{"name":"username","value":"={{$json[\"username\"] || $json[\"email\"] || $json[\"user\"] || \"user\"}}"},{"name":"plan","value":"={{$json[\"plan\"] || \"basic\"}}"},{"name":"domain","value":"={{$json[\"domain\"] || $env.DEFAULT_DOMAIN || \"inmetech.cloud\"}}"}]},"options":{}},"name":"Set Input","type":"n8n-nodes-base.set","typeVersion":1,"position":[-400,256],"id":"503fad3f-a1b5-4820-a049-48dd916574f5"},{"parameters":{"functionCode":"const payload = items[0].json;\n\n// simple API key check (secure your webhook in production)\nconst providedKey = payload.apiKey || '';\nconst expected = process.env.API_KEY || '';\nif (!expected || providedKey !== expected) {\n throw new Error('Invalid API key');\n}\n\n// sanitize username\nlet raw = (payload.username || 'user').toString();\nlet username = raw.toLowerCase().replace(/[^a-z0-9\\-]/g, '').slice(0, 20) || 'user';\n\n// plan -> resources ma cpus: '2' }\n};\nconst plan = (payload.plan || 'basic').toLowerCase();\nconst res = plans[plan] || plans['basic'];\n\nconst domain = (payload.domain || process.env.DEFAULT_DOMAIN || 'inmetech.cloud').replace(/[^a-z0-9.\\-]/gi,'');\nconst subdomain = `n8n-${username}`;\nconst host = `${subdomain}.${domain}`;\nconst containerName = `n8n-${username}`;\nconst volume = `${containerName}_data`;\n\n// environment variables for each user container (disable dangerous nodes for clients)\nconst envs = [\n `-e N8N_HOST=${host}`,\n `-e N8N_PROTOCOL=https`,\n `-e WEBHOOK_URL=https://${host}/` ,\n `-e N8N_TRUST_PROXY=true`,\n `-e N8N_SECURE_COOKIE=true`,\n `-e NODES_EXCLUDE=[\"n8n-nodes-base.executeCommand\",\"n8n-nodes-base.localFileTrigger\"]`\n];\n\n// labels for Traefik routing\nconst labels = [\n `--label traefik.enable=true`,\n `--label traefik.http.routers.${containerName}.entrypoints=websecure`,\n `--label traefik.http.routers.${containerName}.rule=Host(\\`${host}\\`)`,\n `--label traefik.http.routers.${containerName}.tls.certresolver=letsencrypt`,\n `--label traefik.http.services.${containerName}.loadbalancer.server.port=5678`\n];\n\n// prepare docker commands\nconst cmdCreateVolume = `docker volume create ${volume}`;\nconst cmdRun = `docker run -d --name ${containerName} --restart unless-stopped --memory=${res.ram} --cpus=${res.cpus} -v ${volume}:/home/node/.n8n ${envs.join(' ')} ${labels.join(' ')} docker.n8n.io/n8nio/n8n`;\n\n// check existing container cmd\nconst cmdCheck = `docker ps -a --filter \\\"name=^/${containerName}$\\\" --format \\\"{{.Names}}\\\"`;\n\nreturn [ { json: { username, plan, domain, host, containerName, cmdCreateVolume, cmdRun, cmdCheck } } ];"},"name":"Build Commands","type":"n8n-nodes-base.function","typeVersion":1,"position":[-160,256],"id":"6b4138b5-495d-46a4-8a37-1ef01adb601a"},{"parameters":{"command":"={{$json.commandCheck}}"},"name":"Check Existing","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,192],"id":"33050773-1166-410e-af9a-2629b205483c"},{"parameters":{"functionCode":"const out = items[0].json;\nif (out && out.data && out.data.length) {\n const names = out.data.trim();\n if (names) throw new Error(`Container already exists: ${names}`);\n}\nreturn items;"},"name":"Fail If Exists","type":"n8n-nodes-base.function","typeVersion":1,"position":[336,192],"id":"8b770345-6008-45df-b449-648dc9181903"},{"parameters":{"command":"={{$json.cmdCreateVolume}}"},"name":"Create Volume","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,320],"id":"c3ef5fcd-65be-44ef-a8fa-dc1db8dc1621"},{"parameters":{"command":"={{$json.cmdRun}}"},"name":"Run Container","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[336,320],"id":"749ef316-deab-4898-805c-891900d0fed0"},{"parameters":{"functionCode":"const j = items[0].json;\nreturn [{ json: { success: true, host: j.host, container: j.containerName, message: 'Container creation triggered. Allow 10-30s to boot and acquire TLS.' } }];"},"name":"Prepare Response","type":"n8n-nodes-base.function","typeVersion":1,"position":[608,256],"id":"352f91c6-e900-433c-8d9b-b653cbf5e275"},{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook1","type":"n8n-nodes-base.webhook","typeVersion":1,"position":[-640,256],"id":"8e72c500-0d98-4892-b3bf-16633ffdb18f","webhookId":"91e8d5c0-cb20-4d3a-978a-db8e22e4073b","disabled":true},{"parameters":{"options":{}},"name":"Respond1","type":"n8n-nodes-base.respondToWebhook","typeVersion":1,"position":[864,256],"id":"8d30d07b-7c63-43dd-89cc-fed8ec9d226b"},{"parameters":{"functionCode":""},"id":"9ddf7ecd-9b82-40df-82c7-63fc748fb79c","name":"Prepare Data","type":"n8n-nodes-base.function","position":[-672,1200],"typeVersion":1},{"parameters":{"command":"docker ps -a --format '{{.Names}}'"},"id":"0f259cf3-ccd1-481d-b237-bbb048f9ce3c","name":"List Containers","type":"n8n-nodes-base.executeCommand","position":[-416,1088],"typeVersion":1},{"parameters":{"functionCode":"const existing = $json.stdout || \"\";\nconst user = $items(\"Prepare Data\")[0].json.user;\n\nif (existing.includes(`n8n-${user}`)) {\n throw new Error(\"Container already exists\");\n}\n\nreturn $items(\"Prepare Data\");"},"id":"12aa3069-ada6-4845-ad2f-87af3d31bb85","name":"Check Duplicate","type":"n8n-nodes-base.function","position":[-160,1088],"typeVersion":1},{"parameters":{"httpMethod":"POST","path":"create-n8n1111","options":{}},"id":"fb6697e6-8815-4beb-936d-f16f1814cfdc","name":"Webhook2","type":"n8n-nodes-base.webhook","position":[-912,1200],"typeVersion":1,"webhookId":"c08aedad-597e-4ea4-b647-bccecb2c90f3"},{"parameters":{"functionCode":"const data = $json;\n\nconst cmd = `docker run -d \\\n--name ${data.container} \\\n--memory=${data.ram} \\\n--cpus=${data.cpu} \\\n-v ${data.volume}:/home/node/.n8n \\\n-e N8N_HOST=${data.domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${data.domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \\\"traefik.http.routers.${data.container}.rule=Host('${data.domain}')\\\" \\\n--label traefik.http.routers.${data.container}.entrypoints=websecure \\\n--label traefik.http.routers.${data.container}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.${data.container}.loadbalancer.server.port=5678 \\\n docker.n8n.io/n8nio/n8n`;\n\nreturn [{ json: { command: cmd, url: `https://${data.domain}` } }];"},"id":"36f16652-730e-4ff9-8978-16747fa1d8e3","name":"Build Docker Command1","type":"n8n-nodes-base.function","position":[96,1200],"typeVersion":1},{"parameters":{"command":"={{$json.command}}"},"id":"652ddbd1-09f1-4ac6-84c2-169a34d5016c","name":"Run Docker1","type":"n8n-nodes-base.executeCommand","position":[336,1200],"typeVersion":1},{"parameters":{"options":{}},"id":"2672e437-0f80-43fa-91ad-80805b69d424","name":"Respond2","type":"n8n-nodes-base.respondToWebhook","position":[592,1200],"typeVersion":1},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n1111","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"1234"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[-592,1664],"id":"6699443d-0372-4cbf-958a-e890a12c5381","name":"HTTP Request1"},{"parameters":{"jsCode":"const user = ;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = `n8n.${user}.inmetech.cloud`;\n\nreturn [{\n json: {\n user,\n ram,\n cpu,\n domain,\n container: `n8n-${user}`,\n volume: `n8n_${user}`\n }\n}];"},"type":"n8n-nodes-base.code","typeVersion":2,"position":[-464,1200],"id":"48594458-80cf-442a-be1d-c146a406d631","name":"Code in JavaScript"}]{"Webhook":{"main":[[{"node":"Build Docker Command","type":"main","index":0}]]},"Build Docker Command":{"main":[[{"node":"Run Docker","type":"main","index":0}]]},"Run Docker":{"main":[[{"node":"Respond","type":"main","index":0}]]},"Set Input":{"main":[[{"node":"Build Commands","type":"main","index":0}]]},"Build Commands":{"main":[[{"node":"Check Existing","type":"main","index":0},{"node":"Create Volume","type":"main","index":0}]]},"Check Existing":{"main":[[{"node":"Fail If Exists","type":"main","index":0}]]},"Fail If Exists":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Create Volume":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Run Container":{"main":[[{"node":"Prepare Response","type":"main","index":0}]]},"Prepare Response":{"main":[[{"node":"Respond1","type":"main","index":0}]]},"Webhook1":{"main":[[{"node":"Set Input","type":"main","index":0}]]},"Check Duplicate":{"main":[[{"node":"Build Docker Command1","type":"main","index":0}]]},"Webhook2":{"main":[[{"node":"Prepare Data","type":"main","index":0}]]},"Build Docker Command1":{"main":[[{"node":"Run Docker1","type":"main","index":0}]]},"Run Docker1":{"main":[[{"node":"Respond2","type":"main","index":0}]]},"Prepare Data":{"main":[[{"node":"List Containers","type":"main","index":0}]]},"List Containers":{"main":[[{"node":"Check Duplicate","type":"main","index":0}]]}} ;U-O;;%I 44117e37-f6ac-4327-93f8-eb439bd1a09cioR8eFBEVaKOkjc0RIZOWAN rizowansiddique@gmail.com2026-03-06 05:11:31.5322026-03-06 05:11:31.532[{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook","type":"n8n-nodes-base.webhook","position":[-192,-144],"typeVersion":1,"id":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","webhookId":"a4d792e3-b5b9-425f-b612-c938e71de65d"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = \"n8n.\" + user + \".inmetech.cloud\";\n\nconst cmd = `\ndocker run -d \\\n--name n8n-${user} \\\n--memory=${ram} \\\n--cpus=${cpu} \\\n-v n8n_${user}:/home/node/.n8n \\\n-e N8N_HOST=${domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \"traefik.http.routers.n8n-${user}.rule=Host('${domain}')\" \\\n--label traefik.http.routers.n8n-${user}.entrypoints=websecure \\\n--label traefik.http.routers.n8n-${user}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.n8n-${user}.loadbalancer.server.port=5678 \\\ndocker.n8n.io/n8nio/n8n\n`;\n\nreturn [{\n json: {\n command: cmd,\n url: \"https://\" + domain\n }\n}];"},"name":"Build Docker Command","type":"n8n-nodes-base.function","position":[176,-192],"typeVersion":1,"id":"7c91468e-80ea-4de5-8553-376dc01f0973","disabled":true},{"parameters":{"command":"={{$json.command}}"},"name":"Run Docker","type":"n8n-nodes-base.executeCommand","position":[416,-144],"typeVersion":1,"id":"d049c848-745f-43ce-ad8f-2069344eb356"},{"parameters":{"options":{}},"name":"Respond","type":"n8n-nodes-base.respondToWebhook","position":[672,-144],"typeVersion":1,"id":"c17c8373-bb00-4562-ae8f-c18a13839f0d"},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"user123"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[336,-400],"id":"9654e007-c6e7-4a2b-b48a-7ee7df40a1c0","name":"HTTP Request"},{"parameters":{"values":{"string":[{"name":"apiKey","value":"{{$json[\"apiKey\"] || $env.API_KEY || \"\"}}"},{"name":"username","value":"={{$json[\"username\"] || $json[\"email\"] || $json[\"user\"] || \"user\"}}"},{"name":"plan","value":"={{$json[\"plan\"] || \"basic\"}}"},{"name":"domain","value":"={{$json[\"domain\"] || $env.DEFAULT_DOMAIN || \"inmetech.cloud\"}}"}]},"options":{}},"name":"Set Input","type":"n8n-nodes-base.set","typeVersion":1,"position":[-400,256],"id":"503fad3f-a1b5-4820-a049-48dd916574f5"},{"parameters":{"functionCode":"const payload = items[0].json;\n\n// simple API key check (secure your webhook in production)\nconst providedKey = payload.apiKey || '';\nconst expected = process.env.API_KEY || '';\nif (!expected || providedKey !== expected) {\n throw new Error('Invalid API key');\n}\n\n// sanitize username\nlet raw = (payload.username || 'user').toString();\nlet username = raw.toLowerCase().replace(/[^a-z0-9\\-]/g, '').slice(0, 20) || 'user';\n\n// plan -> resources mapping (restrict to allowed values)\nconst plans = {\n basic: { ram: '1g', cpus: '0.5' },\n pro: { ram: '2g', cpus: '1' },\n agency: { ram: '4g', cpus: '2' }\n};\nconst plan = (payload.plan || 'basic').toLowerCase();\nconst res = plans[plan] || plans['basic'];\n\nconst domain = (payload.domain || process.env.DEFAULT_DOMAIN || 'inmetech.cloud').replace(/[^a-z0-9.\\-]/gi,'');\nconst subdomain = `n8n-${username}`;\nconst host = `${subdomain}.${domain}`;\nconst containerName = `n8n-${username}`;\nconst volume = `${containerName}_data`;\n\n// environment variables for each user container (disable dangerous nodes for clients)\nconst envs = [\n `-e N8N_HOST=${host}`,\n `-e N8N_PROTOCOL=https`,\n `-e WEBHOOK_URL=https://${host}/` ,\n `-e N8N_TRUST_PROXY=true`,\n `-e N8N_SECURE_COOKIE=true`,\n `-e NODES_EXCLUDE=[\"n8n-nodes-base.executeCommand\",\"n8n-nodes-base.localFileTrigger\"]`\n];\n\n// labels for Traefik routing\nconst labels = [\n `--label traefik.enable=true`,\n `--label traefik.http.routers.${containerName}.entrypoints=websecure`,\n `--label traefik.http.routers.${containerName}.rule=Host(\\`${host}\\`)`,\n `--label traefik.http.routers.${containerName}.tls.certresolver=letsencrypt`,\n `--label traefik.http.services.${containerName}.loadbalancer.server.port=5678`\n];\n\n// prepare docker commands\nconst cmdCreateVolume = `docker volume create ${volume}`;\nconst cmdRun = `docker run -d --name ${containerName} --restart unless-stopped --memory=${res.ram} --cpus=${res.cpus} -v ${volume}:/home/node/.n8n ${envs.join(' ')} ${labels.join(' ')} docker.n8n.io/n8nio/n8n`;\n\n// check existing container cmd\nconst cmdCheck = `docker ps -a --filter \\\"name=^/${containerName}$\\\" --format \\\"{{.Names}}\\\"`;\n\nreturn [ { json: { username, plan, domain, host, containerName, cmdCreateVolume, cmdRun, cmdCheck } } ];"},"name":"Build Commands","type":"n8n-nodes-base.function","typeVersion":1,"position":[-160,256],"id":"6b4138b5-495d-46a4-8a37-1ef01adb601a"},{"parameters":{"command":"={{$json.commandCheck}}"},"name":"Check Existing","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,192],"id":"33050773-1166-410e-af9a-2629b205483c"},{"parameters":{"functionCode":"const out = items[0].json;\nif (out && out.data && out.data.length) {\n const names = out.data.trim();\n if (names) throw new Error(`Container already exists: ${names}`);\n}\nreturn items;"},"name":"Fail If Exists","type":"n8n-nodes-base.function","typeVersion":1,"position":[336,192],"id":"8b770345-6008-45df-b449-648dc9181903"},{"parameters":{"command":"={{$json.cmdCreateVolume}}"},"name":"Create Volume","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,320],"id":"c3ef5fcd-65be-44ef-a8fa-dc1db8dc1621"},{"parameters":{"command":"={{$json.cmdRun}}"},"name":"Run Container","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[336,320],"id":"749ef316-deab-4898-805c-891900d0fed0"},{"parameters":{"functionCode":"const j = items[0].json;\nreturn [{ json: { success: true, host: j.host, container: j.containerName, message: 'Container creation triggered. Allow 10-30s to boot and acquire TLS.' } }];"},"name":"Prepare Response","type":"n8n-nodes-base.function","typeVersion":1,"position":[608,256],"id":"352f91c6-e900-433c-8d9b-b653cbf5e275"},{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook1","type":"n8n-nodes-base.webhook","typeVersion":1,"position":[-640,256],"id":"8e72c500-0d98-4892-b3bf-16633ffdb18f","webhookId":"91e8d5c0-cb20-4d3a-978a-db8e22e4073b","disabled":true},{"parameters":{"options":{}},"name":"Respond1","type":"n8n-nodes-base.respondToWebhook","typeVersion":1,"position":[864,256],"id":"8d30d07b-7c63-43dd-89cc-fed8ec9d226b"},{"parameters":{"functionCode":""},"id":"9ddf7ecd-9b82-40df-82c7-63fc748fb79c","name":"Prepare Data","type":"n8n-nodes-base.function","position":[-672,1200],"typeVersion":1},{"parameters":{"command":"docker ps -a --format '{{.Names}}'"},"id":"0f259cf3-ccd1-481d-b237-bbb048f9ce3c","name":"List Containers","type":"n8n-nodes-base.executeCommand","position":[-416,1088],"typeVersion":1},{"parameters":{"functionCode":"const existing = $json.stdout || \"\";\nconst user = $items(\"Prepare Data\")[0].json.user;\n\nif (existing.includes(`n8n-${user}`)) {\n throw new Error(\"Container already exists\");\n}\n\nreturn $items(\"Prepare Data\");"},"id":"12aa3069-ada6-4845-ad2f-87af3d31bb85","name":"Check Duplicate","type":"n8n-nodes-base.function","position":[-160,1088],"typeVersion":1},{"parameters":{"httpMethod":"POST","path":"create-n8n1111","options":{}},"id":"fb6697e6-8815-4beb-936d-f16f1814cfdc","name":"Webhook2","type":"n8n-nodes-base.webhook","position":[-912,1200],"typeVersion":1,"webhookId":"c08aedad-597e-4ea4-b647-bccecb2c90f3"},{"parameters":{"functionCode":"const data = $json;\n\nconst cmd = `docker run -d \\\n--name ${data.container} \\\n--memory=${data.ram} \\\n--cpus=${data.cpu} \\\n-v ${data.volume}:/home/node/.n8n \\\n-e N8N_HOST=${data.domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${data.domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \\\"traefik.http.routers.${data.container}.rule=Host('${data.domain}')\\\" \\\n--label traefik.http.routers.${data.container}.entrypoints=websecure \\\n--label traefik.http.routers.${data.container}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.${data.container}.loadbalancer.server.port=5678 \\\n docker.n8n.io/n8nio/n8n`;\n\nreturn [{ json: { command: cmd, url: `https://${data.domain}` } }];"},"id":"36f16652-730e-4ff9-8978-16747fa1d8e3","name":"Build Docker Command1","type":"n8n-nodes-base.function","position":[96,1200],"typeVersion":1},{"parameters":{"command":"={{$json.command}}"},"id":"652ddbd1-09f1-4ac6-84c2-169a34d5016c","name":"Run Docker1","type":"n8n-nodes-base.executeCommand","position":[336,1200],"typeVersion":1},{"parameters":{"options":{}},"id":"2672e437-0f80-43fa-91ad-80805b69d424","name":"Respond2","type":"n8n-nodes-base.respondToWebhook","position":[592,1200],"typeVersion":1},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n1111","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"1234"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[-592,1664],"id":"6699443d-0372-4cbf-958a-e890a12c5381","name":"HTTP Request1"},{"parameters":{"jsCode":"const user = ;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = `n8n.${user}.inmetech.cloud`;\n\nreturn [{\n json: {\n user,\n ram,\n cpu,\n domain,\n container: `n8n-${user}`,\n volume: `n8n_${user}`\n }\n}];"},"type":"n8n-nodes-base.code","typeVersion":2,"position":[-480,1312],"id":"48594458-80cf-442a-be1d-c146a406d631","name":"Code in JavaScript"}]{"Webhook":{"main":[[{"node":"Build Docker Command","type":"main","index":0}]]},"Build Docker Command":{"main":[[{"node":"Run Docker","type":"main","index":0}]]},"Run Docker":{"main":[[{"node":"Respond","type":"main","index":0}]]},"Set Input":{"main":[[{"node":"Build Commands","type":"main","index":0}]]},"Build Commands":{"main":[[{"node":"Check Existing","type":"main","index":0},{"node":"Create Volume","type":"main","index":0}]]},"Check Existing":{"main":[[{"node":"Fail If Exists","type":"main","index":0}]]},"Fail If Exists":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Create Volume":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Run Container":{"main":[[{"node":"Prepare Response","type":"main","index":0}]]},"Prepare Response":{"main":[[{"node":"Respond1","type":"main","index":0}]]},"Webhook1":{"main":[[{"node":"Set Input","type":"main","index":0}]]},"Check Duplicate":{"main":[[{"node":"Build Docker Command1","type":"main","index":0}]]},"Webhook2":{"main":[[{"node":"Prepare Data","type":"main","index":0}]]},"Build Docker Command1":{"main":[[{"node":"Run Docker1","type":"main","index":0}]]},"Run Docker1":{"main":[[{"node":"Respond2","type":"main","index":0}]]},"Prepare Data":{"main":[[{"node":"List Containers","type":"main","index":0}]]},"List Containers":{"main":[[{"node":"Check Duplicate","type":"main","index":0}]]}} ;U-O;;%I 91ac832d-df1a-46ee-87ad-0aa740ed9f86ioR8eFBEVaKOkjc0RIZOWAN rizowansiddique@gmail.com2026-03-06 05:11:38.1772026-03-06 05:11:38.177[{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook","type":"n8n-nodes-base.webhook","position":[-192,-144],"typeVersion":1,"id":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","webhookId":"a4d792e3-b5b9-425f-b612-c938e71de65d"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = \"n8n.\" + user + \".inmetech.cloud\";\n\nconst cmd = `\ndocker run -d \\\n--name n8n-${user} \\\n--memory=${ram} \\\n--cpus=${cpu} \\\n-v n8n_${user}:/home/node/.n8n \\\n-e N8N_HOST=${domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \"traefik.http.routers.n8n-${user}.rule=Host('${domain}')\" \\\n--label traefik.http.routers.n8n-${user}.entrypoints=websecure \\\n--label traefik.http.routers.n8n-${user}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.n8n-${user}.loadbalancer.server.port=5678 \\\ndocker.n8n.io/n8nio/n8n\n`;\n\nreturn [{\n json: {\n command: cmd,\n url: \"https://\" + domain\n }\n}];"},"name":"Build Docker Command","type":"n8n-nodes-base.function","position":[176,-192],"typeVersion":1,"id":"7c91468e-80ea-4de5-8553-376dc01f0973","disabled":true},{"parameters":{"command":"={{$json.command}}"},"name":"Run Docker","type":"n8n-nodes-base.executeCommand","position":[416,-144],"typeVersion":1,"id":"d049c848-745f-43ce-ad8f-2069344eb356"},{"parameters":{"options":{}},"name":"Respond","type":"n8n-nodes-base.respondToWebhook","position":[672,-144],"typeVersion":1,"id":"c17c8373-bb00-4562-ae8f-c18a13839f0d"},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"user123"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[336,-400],"id":"9654e007-c6e7-4a2b-b48a-7ee7df40a1c0","name":"HTTP Request"},{"parameters":{"values":{"string":[{"name":"apiKey","value":"{{$json[\"apiKey\"] || $env.API_KEY || \"\"}}"},{"name":"username","value":"={{$json[\"username\"] || $json[\"email\"] || $json[\"user\"] || \"user\"}}"},{"name":"plan","value":"={{$json[\"plan\"] || \"basic\"}}"},{"name":"domain","value":"={{$json[\"domain\"] || $env.DEFAULT_DOMAIN || \"inmetech.cloud\"}}"}]},"options":{}},"name":"Set Input","type":"n8n-nodes-base.set","typeVersion":1,"position":[-400,256],"id":"503fad3f-a1b5-4820-a049-48dd916574f5"},{"parameters":{"functionCode":"const payload = items[0].json;\n\n// simple API key check (secure your webhook in production)\nconst providedKey = payload.apiKey || '';\nconst expected = process.env.API_KEY || '';\nif (!expected || providedKey !== expected) {\n throw new Error('Invalid API key');\n}\n\n// sanitize username\nlet raw = (payload.username || 'user').toString();\nlet username = raw.toLowerCase().replace(/[^a-z0-9\\-]/g, '').slice(0, 20) || 'user';\n\n// plan -> resources mapping (restrict to allowed values)\nconst plans = {\n basic: { ram: '1g', cpus: '0.5' },\n pro: { ram: '2g', cpus: '1' },\n agency: { ram: '4g',  -3 %IU;;UioR8eFBEVaKOkjc0Create n8n Instance[{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook","type":"n8n-nodes-base.webhook","position":[-192,-144],"typeVersion":1,"id":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","webhookId":"a4d792e3-b5b9-425f-b612-c938e71de65d"},{"parameters":{"functionCode":"const user = $json.user_id;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = \"n8n.\" + user + \".inmetech.cloud\";\n\nconst cmd = `\ndocker run -d \\\n--name n8n-${user} \\\n--memory=${ram} \\\n--cpus=${cpu} \\\n-v n8n_${user}:/home/node/.n8n \\\n-e N8N_HOST=${domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n-- - ioR8eFBEVaKOkjc0label traefik.enable=true \\\n--label \"traefik.http.routers.n8n-${user}.rule=Host('${domain}')\" \\\n--label traefik.http.routers.n8n-${user}.entrypoints=websecure \\\n--label traefik.http.routers.n8n-${user}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.n8n-${user}.loadbalancer.server.port=5678 \\\ndocker.n8n.io/n8nio/n8n\n`;\n\nreturn [{\n json: {\n command: cmd,\n url: \"https://\" + domain\n }\n}];"},"name":"Build Docker Command","type":"n8n-nodes-base.function","position":[176,-192],"typeVersion":1,"id":"7c91468e-80ea-4de5-8553-376dc01f0973","disabled":true},{"parameters":{"command":"={{$json.command}}"},"name":"Run Docker","type":"n8n-nodes-base.executeCommand","position":[416,-144],"typeVersion":1,"id":"d049c848-745f-43ce-ad8f-2069344eb356"},{"parameters":{"options":{}},"name":"Respond","type":"n8n-nodes-base.respondToWebhook","position":[672,-144],"typeVersion":1,"id":"c17c8373-bb00-4562-ae8f-c18a13839f0d"},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"user123"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[336,-400],"id":"9654e007-c6e7-4a2b-b48a-7ee7df40a1c0","name":"HTTP Request"},{"parameters":{"values":{"string":[{"name":"apiKey","value":"{{$json[\"apiKey\"] || $env.API_KEY || \"\"}}"},{"name":"username","value":"={{$json[\"username\"] || $json[\"email\"] || $json[\"user\"] || \"user\"}}"},{"name":"plan","value":"={{$json[\"plan\"] || \"basic\"}}"},{"name":"domain","value":"={{$json[\"domain\"] || $env.DEFAULT_DOMAIN || \"inmetech.cloud\"}}"}]},"options":{}},"name":"Set Input","type":"n8n-nodes-base.set","typeVersion":1,"position":[-400,256],"id":"503fad3f-a1b5-4820-a049-48dd916574f5"},{"parameters":{"functionCode":"const payload = items[0].json;\n\n// simple API key check (secure your webhook in production)\nconst providedKey = payload.apiKey || '';\nconst expected = process.env.API_KEY || '';\nif (!expected || providedKey !== expected) {\n throw new Error('Invalid API key');\n}\n\n// sanitize username\nlet raw = (payload.username || 'user').toString();\nlet username = raw.toLowerCase().replace(/[^a-z0-9\\-]/g, '').slice(0, 20) || 'user';\n\n// plan -> resources mapping (restrict to allowed values)\nconst plans = {\n basic: { ram: '1g', cpus: '0.5' },\n pro: { ram: '2g', cpus: '1' },\n agency: { ram: '4g', cpus: '2' }\n};\nconst plan = (payload.plan || 'basic').toLowerCase();\nconst res = plans[plan] || plans['basic'];\n\nconst domain = (payload.domain || process.env.DEFAULT_DOMAIN || 'inmetech.cloud').replace(/[^a-z0-9.\\-]/gi,'');\nconst subdomain = `n8n-${username}`;\nconst host = `${subdomain}.${domain}`;\nconst containerName = `n8n-${username}`;\nconst volume = `${containerName}_data`;\n\n// environment variables for each user container (disable dangerous nodes for clients)\nconst envs = [\n `-e N8N_HOST=${host}`,\n `-e N8N_PROTOCOL=https`,\n `-e WEBHOOK_URL=https://${host}/` ,\n `-e N8N_TRUST_PROXY=true`,\n `-e N8N_SECURE_COOKIE=true`,\n `-e NODES_EXCLUDE=[\"n8n-nodes-base.executeCommand\",\"n8n-nodes-base.localFileTrigger\"]`\n];\n\n// labels for Traefik routing\nconst labels = [\n `--label traefik.enable=true`,\n `--label traefik.http.routers.${containerName}.entrypoints=websecure`,\n `--label traefik.http.routers.${containerName}.rule=Host(\\`${host}\\`)`,\n `--label traefik.http.routers.${containerName}.tls.certresolver=letsencrypt`,\n `--label traefik.http.services.${containerName}.loadbalancer.server.port=5678`\n];\n\n// prepare docker commands\nconst cmdCreateVolume = `docker volume create ${volume}`;\nconst cmdRun = `docker run -d --name ${containerName} --restart unless-stopped --memory=${res.ram} --cpus=${res.cpus} -v ${volume}:/home/node/.n8n ${envs.join(' ')} ${labels.join(' ')} docker.n8n.io/n8nio/n8n`;\n\n// check existing container cmd\nconst cmdCheck = `docker ps -a --filter \\\"name=^/${containerName}$\\\" --format \\\"{{.Names}}\\\"`;\n\nreturn [ { json: { username, plan, domain, host, containerName, cmdCreateVolume, cmdRun, cmdCheck } } ];"},"name":"Build Commands","type":"n8n-nodes-base.function","typeVersion":1,"position":[-160,256],"id":"6b4138b5-495d-46a4-8a37-1ef01adb601a"},{"parameters":{"command":"={{$json.commandCheck}}"},"name":"Check Existing","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,192],"id":"33050773-1166-410e-af9a-2629b205483c"},{"parameters":{"functionCode":"const out = items[0].json;\nif (out && out.data && out.data.length) {\n const names = out.data.trim();\n if (names) throw new Error(`Container already exists: ${names}`);\n}\nreturn items;"},"name":"Fail If Exists","type":"n8n-nodes-base.function","typeVersion":1,"position":[336,192],"id":"8b770345-6008-45df-b449-648dc9181903"},{"parameters":{"command":"={{$json.cmdCreateVolume}}"},"name":"Create Volume","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[96,320],"id":"c3ef5fcd-65be-44ef-a8fa-dc1db8dc1621"},{"parameters":{"command":"={{$json.cmdRun}}"},"name":"Run Container","type":"n8n-nodes-base.executeCommand","typeVersion":1,"position":[336,320],"id":"749ef316-deab-4898-805c-891900d0fed0"},{"parameters":{"functionCode":"const j = items[0].json;\nreturn [{ json: { success: true, host: j.host, container: j.containerName, message: 'Container creation triggered. Allow 10-30s to boot and acquire TLS.' } }];"},"name":"Prepare Response","type":"n8n-nodes-base.function","typeVersion":1,"position":[608,256],"id":"352f91c6-e900-433c-8d9b-b653cbf5e275"},{"parameters":{"httpMethod":"POST","path":"create-n8n","options":{}},"name":"Webhook1","type":"n8n-nodes-base.webhook","typeVersion":1,"position":[-640,256],"id":"8e72c500-0d98-4892-b3bf-16633ffdb18f","webhookId":"91e8d5c0-cb20-4d3a-978a-db8e22e4073b","disabled":true},{"parameters":{"options":{}},"name":"Respond1","type":"n8n-nodes-base.respondToWebhook","typeVersion":1,"position":[864,256],"id":"8d30d07b-7c63-43dd-89cc-fed8ec9d226b"},{"parameters":{"functionCode":""},"id":"9ddf7ecd-9b82-40df-82c7-63fc748fb79c","name":"Prepare Data","type":"n8n-nodes-base.function","position":[-672,1200],"typeVersion":1},{"parameters":{"command":"docker ps -a --format '{{.Names}}'"},"id":"0f259cf3-ccd1-481d-b237-bbb048f9ce3c","name":"List Containers","type":"n8n-nodes-base.executeCommand","position":[-416,1088],"typeVersion":1},{"parameters":{"functionCode":"const existing = $json.stdout || \"\";\nconst user = $items(\"Prepare Data\")[0].json.user;\n\nif (existing.includes(`n8n-${user}`)) {\n throw new Error(\"Container already exists\");\n}\n\nreturn $items(\"Prepare Data\");"},"id":"12aa3069-ada6-4845-ad2f-87af3d31bb85","name":"Check Duplicate","type":"n8n-nodes-base.function","position":[-160,1088],"typeVersion":1},{"parameters":{"httpMethod":"POST","path":"create-n8n1111","options":{}},"id":"fb6697e6-8815-4beb-936d-f16f1814cfdc","name":"Webhook2","type":"n8n-nodes-base.webhook","position":[-912,1200],"typeVersion":1,"webhookId":"c08aedad-597e-4ea4-b647-bccecb2c90f3"},{"parameters":{"functionCode":"const data = $json;\n\nconst cmd = `docker run -d \\\n--name ${data.container} \\\n--memory=${data.ram} \\\n--cpus=${data.cpu} \\\n-v ${data.volume}:/home/node/.n8n \\\n-e N8N_HOST=${data.domain} \\\n-e N8N_PROTOCOL=https \\\n-e WEBHOOK_URL=https://${data.domain}/ \\\n-e N8N_TRUST_PROXY=true \\\n--label traefik.enable=true \\\n--label \\\"traefik.http.routers.${data.container}.rule=Host('${data.domain}')\\\" \\\n--label traefik.http.routers.${data.container}.entrypoints=websecure \\\n--label traefik.http.routers.${data.container}.tls.certresolver=letsencrypt \\\n--label traefik.http.services.${data.container}.loadbalancer.server.port=5678 \\\n docker.n8n.io/n8nio/n8n`;\n\nreturn [{ json: { command: cmd, url: `https://${data.domain}` } }];"},"id":"36f16652-730e-4ff9-8978-16747fa1d8e3","name":"Build Docker Command1","type":"n8n-nodes-base.function","position":[96,1200],"typeVersion":1},{"parameters":{"command":"={{$json.command}}"},"id":"652ddbd1-09f1-4ac6-84c2-169a34d5016c","name":"Run Docker1","type":"n8n-nodes-base.executeCommand","position":[336,1200],"typeVersion":1},{"parameters":{"options":{}},"id":"2672e437-0f80-43fa-91ad-80805b69d424","name":"Respond2","type":"n8n-nodes-base.respondToWebhook","position":[592,1200],"typeVersion":1},{"parameters":{"method":"POST","url":"https://admin.n8n.inmetech.cloud/webhook/create-n8n1111","sendBody":true,"bodyParameters":{"parameters":[{"name":"user_id","value":"1234"},{"name":"ram","value":"1g"},{"name":"cpu","value":"1"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.4,"position":[-592,1664],"id":"6699443d-0372-4cbf-958a-e890a12c5381","name":"HTTP Request1"},{"parameters":{"jsCode":"const user = ;\n\nif (!user) {\n throw new Error(\"user_id missing\");\n}\n\nconst ram = $json.ram || \"1g\";\nconst cpu = $json.cpu || \"1\";\n\nconst domain = `n8n.${user}.inmetech.cloud`;\n\nreturn [{\n json: {\n user,\n ram,\n cpu,\n domain,\n container: `n8n-${user}`,\n volume: `n8n_${user}`\n }\n}];"},"type":"n8n-nodes-base.code","typeVersion":2,"position":[-464,1200],"id":"48594458-80cf-442a-be1d-c146a406d631","name":"Code in JavaScript"}]{"Webhook":{"main":[[{"node":"Build Docker Command","type":"main","index":0}]]},"Build Docker Command":{"main":[[{"node":"Run Docker","type":"main","index":0}]]},"Run Docker":{"main":[[{"node":"Respond","type":"main","index":0}]]},"Set Input":{"main":[[{"node":"Build Commands","type":"main","index":0}]]},"Build Commands":{"main":[[{"node":"Check Existing","type":"main","index":0},{"node":"Create Volume","type":"main","index":0}]]},"Check Existing":{"main":[[{"node":"Fail If Exists","type":"main","index":0}]]},"Fail If Exists":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Create Volume":{"main":[[{"node":"Run Container","type":"main","index":0}]]},"Run Container":{"main":[[{"node":"Prepare Response","type":"main","index":0}]]},"Prepare Response":{"main":[[{"node":"Respond1","type":"main","index":0}]]},"Webhook1":{"main":[[{"node":"Set Input","type":"main","index":0}]]},"Check Duplicate":{"main":[[{"node":"Build Docker Command1","type":"main","index":0}]]},"Webhook2":{"main":[[{"node":"Prepare Data","type":"main","index":0}]]},"Build Docker Command1":{"main":[[{"node":"Run Docker1","type":"main","index":0}]]},"Run Docker1":{"main":[[{"node":"Respond2","type":"main","index":0}]]},"Prepare Data":{"main":[[{"node":"List Containers","type":"main","index":0}]]},"List Containers":{"main":[[{"node":"Check Duplicate","type":"main","index":0}]]}}{"executionOrder":"v1","binaryMode":"separate","availableInMCP":false}{"Webhook":[{"json":{"headers":{"host":"admin.n8n.inmetech.cloud","user-agent":"axios/1.13.5","content-length":"42","accept":"application/json,text/html,application/xhtml+xml,application/xml,text/*;q=0.9, image/*;q=0.8, */*;q=0.7","accept-encoding":"gzip, compress, deflate, br","content-type":"application/json","x-forwarded-for":"172.18.0.1","x-forwarded-host":"admin.n8n.inmetech.cloud","x-forwarded-port":"443","x-forwarded-proto":"https","x-forwarded-server":"f431cf187979","x-real-ip":"172.18.0.1"},"params":{},"query":{},"body":{"user_id":"user123","ram":"1g","cpu":"1"},"webhookUrl":"https://admin.n8n.inmetech.cloud/webhook/create-n8n","executionMode":"production"},"pairedItem":{"item":0}}],"Webhook2":[{"json":{"headers":{"host":"admin.n8n.inmetech.cloud","user-agent":"axios/1.13.5","content-length":"39","accept":"application/json,text/html,application/xhtml+xml,application/xml,text/*;q=0.9, image/*;q=0.8, */*;q=0.7","accept-encoding":"gzip, compress, deflate, br","content-type":"application/json","x-forwarded-for":"172.18.0.1","x-forwarded-host":"admin.n8n.inmetech.cloud","x-forwarded-port":"443","x-forwarded-proto":"https","x-forwarded-server":"f431cf187979","x-real-ip":"172.18.0.1"},"params":{},"query":{},"body":{"user_id":"1234","ram":"1g","cpu":"1"},"webhookUrl":"https://admin.n8n.inmetech.cloud/webhook/create-n8n1111","executionMode":"production"},"pairedItem":{"item":0}}]}44117e37-f6ac-4327-93f8-eb439bd1a09c2026-03-06 04:58:21.6802026-03-06 05:11:31.5309d185630-6aca-46e3-b9b4-7ceb8e19d3fb   * n 6)j % %V[iCindexsqlite_autoindex_dynamic_credential_resolver_1dynamic_credential_resolver>RQ+indexsqlite_autoindex_workflow_entity_1workflow_entity ZCCtabledynamic_credential_resolverdynamic_credential_resolverCREATE TABLE "dynamic_credential_resolver" ("id" varchar(16) PRIMARY KEY NOT NULL, "name" varchar(128) NOT NULL, "type" varchar(128) NOT NULL, "config" text NOT NULL, "createdAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "updatedAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW'))).YAindexsqlite_autoindex_project_1projectȃdXtableprojectprojectCREATE TABLE "project" ("id" varchar(36) PRIMARY KEY NOT NULL, "name" varchar(255) NOT NULL, "type" varchar(36) NOT NULL, "createdAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "updatedAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "icon" text, "description" varchar(512), "creatorId" varchar, CONSTRAINT "projects_creatorId_foreign" FOREIGN KEY ("creatorId") REFERENCES "user" ("id") ON DELETE SET NULL)#W==Wtableworkflow_publish_historyworkflow_publish_historyCREATE TABLE "workflow_publish_history" ("id" integer PRIMARY KEY NOT NULL, "workflowId" varchar(36) NOT NULL, "versionId" varchar(36) NOT NULL, "event" varchar(36) NOT NULL, "userId" varchar, "createdAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), CONSTRAINT "CHK_workflow_publish_history_event" CHECK ("event" IN ('activated', 'deactivated')), CONSTRAINT "FK_c01316f8c2d7101ec4fa9809267" FOREIGN KEY ("workflowId") REFERENCES "workflow_entity" ("id") ON DELETE CASCADE, CONSTRAINT "FK_b4cfbc7556d07f36ca177f5e473" FOREIGN KEY ("versionId") REFERENCES "workflow_history" ("versionId") ON DELETE CASCADE, CONSTRAINT "FK_6eab5bd9eedabe9c54bd879fc40" FOREIGN KEY ("userId") REFERENCES "user" ("id") ON DELETE SET NULL)6VI#indexsqlite_autoindex_binary_data_1binary_datańU##}tablebinary_databinary_dataCREATE TABLE "binary_data" ("fileId" varchar PRIMARY KEY NOT NULL, "sourceType" varchar(50) NOT NULL, "sourceId" varchar(255) NOT NULL, "data" blob NOT NULL, "mimeType" varchar(255), "fileName" varchar(255), "fileSize" integer NOT NULL, "createdAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "updatedAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), CONSTRAINT "CHK_binary_data_sourceType" CHECK ("sourceType" IN ('execution', 'chat_message_attachment')))RTe?indexsqlite_autoindex_oauth_authorization_codes_1oauth_authorization_codes†S??Etableoauth_authorization_codesoauth_authorization_codesCREATE TABLE "oauth_authorization_codes" ("code" varchar(255) PRIMARY KEY NOT NULL, "clientId" varchar NOT NULL, "userId" varchar NOT NULL, "redirectUri" varchar NOT NULL, "codeChallenge" varchar NOT NULL, "codeChallengeMethod" varchar(255) NOT NULL, "expiresAt" bigint NOT NULL, "state" varchar, "used" boolean NOT NULL DEFAULT (false), "createdAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "updatedAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), CONSTRAINT "FK_81de58036895ccabf2214c6d99e" FOREIGN KEY ("clientId") REFERENCES "oauth_clients" ("id") ON DELETE CASCADE, CONSTRAINT "FK_e829ca1240b877f73fd5fab14a2" FOREIGN KEY ("userId") REFERENCES "user" ("id") ON DELETE CASCADE)   zz-UU;ioR8eFBEVaKOkjc09d185630-6aca-46e3-b9b4-7ceb8e19d3fbactivated3f77e136-dc7a-4d58-8dc6-817cb2b888662026-03-06 05:06:29.595-U#U;ioR8eFBEVaKOkjc0370acd9f-8c23-404f-be77-ec179f6ec858deactivated3f77e136-dc7a-4d58-8dc6-817cb2b888662026-03-06 05:06:29.582-UU;ioR8eFBEVaKOkjc0370acd9f-8c23-404f-be77-ec179f6ec858activated3f77e136-dc7a-4d58-8dc6-817cb2b888662026-03-06 04:59:39.278 LL1 -;;UcZz5fzaW49pCUs3CRIZOWAN rizowansiddique@gmail.com personal2026-03-06 04:57:51.0852026-03-06 04:58:02.4043f77e136-dc7a-4d58-8dc6-817cb2b88866 - cZz5fzaW49pCUs3C       [=P`33Etableworkflow_statisticsworkflow_statisticsCREATE TABLE "workflow_statistics" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT, "count" INTEGER DEFAULT 0, "latestEvent" DATETIME, "name" VARCHAR(128) NOT NULL, "workflowId" VARCHAR(36) NOT NULL, "workflowName" VARCHAR(128), "rootCount" INTEGER DEFAULT 0 )$^//utablechat_hub_messageschat_hub_messagesCREATE TABLE "chat_hub_messages" ("id" varchar PRIMARY KEY NOT NULL, "sessionId" varchar NOT NULL, "previousMessageId" varchar, "revisionOfMessageId" varchar, "retryOfMessageId" varchar, "type" varchar(16) NOT NULL, "name" varchar(128) NOT NULL, "content" text NOT NULL, "provider" varchar(16), "workflowId" varchar(36), "executionId" integer, "createdAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "updatedAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "agentId" varchar(36), "status" varchar(16) NOT NULL DEFAULT ('success'), "attachments" text, "model" VARCHAR(256), CONSTRAINT "FK_e22538eb50a71a17954cd7e076c" FOREIGN KEY ("sessionId") REFERENCES "chat_hub_sessions" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, CONSTRAINT "FK_e5d1fa722c5a8d38ac204746662" FOREIGN KEY ("previousMessageId") REFERENCES "chat_hub_messages" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, CONSTRAINT "FK_acf8926098f063cdbbad8497fd1" FOREIGN KEY ("workflowId") REFERENCES "workflow_entity" ("id") ON DELETE SET NULL ON UPDATE NO ACTION, CONSTRAINT "FK_25c9736e7f769f3a005eef4b372" FOREIGN KEY ("retryOfMessageId") REFERENCES "chat_hub_messages" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, CONSTRAINT "FK_1f4998c8a7dec9e00a9ab15550e" FOREIGN KEY ("revisionOfMessageId") REFERENCES "chat_hub_messages" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, CONSTRAINT "FK_6afb260449dd7a9b85355d4e0c9" FOREIGN KEY ("executionId") REFERENCES "execution_entity" ("id") ON DELETE SET NULL ON UPDATE NO ACTION, CONSTRAINT "FK_chat_hub_messages_agentId" FOREIGN KEY ("agentId") REFERENCES "chat_hub_agents" ("id") ON DELETE SET NULL)B_U/indexsqlite_autoindex_chat_hub_messages_1chat_hub_messages %D]W1indexsqlite_autoindex_credentials_entity_1credentials_entityaBaGGtabledynamic_credential_user_entrydynamic_credential_user_entryCREATE TABLE "dynamic_credential_user_entry" ("credentialId" varchar(16) NOT NULL, "userId" varchar NOT NULL, "resolverId" varchar(16) NOT NULL, "data" text NOT NULL, "createdAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "updatedAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), CONSTRAINT "FK_945ba70b342a066d1306b12ccd2" FOREIGN KEY ("credentialId") REFERENCES "credentials_entity" ("id") ON DELETE CASCADE, CONSTRAINT "FK_6edec973a6450990977bb854c38" FOREIGN KEY ("resolverId") REFERENCES "dynamic_credential_resolver" ("id") ON DELETE CASCADE, CONSTRAINT "FK_a36dc616fabc3f736bb82410a22" FOREIGN KEY ("userId") REFERENCES "user" ("id") ON DELETE CASCADE, PRIMARY KEY ("credentialId", "userId", "resolverId"))Z\11]tablecredentials_entitycredentials_entityCREATE TABLE "credentials_entity" ("id" varchar(36) PRIMARY KEY NOT NULL, "name" varchar(128) NOT NULL, "data" text NOT NULL, "type" varchar(32) NOT NULL, "createdAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "updatedAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "isManaged" boolean NOT NULL DEFAULT (0), "isGlobal" boolean NOT NULL DEFAULT (0), "isResolvable" boolean NOT NULL DEFAULT (false), "resolvableAllowFallback" boolean NOT NULL DEFAULT (false), "resolverId" varchar(16), CONSTRAINT "credentials_entity_resolverId_foreign" FOREIGN KEY ("resolverId") REFERENCES "dynamic_credential_resolver" ("id") ON DELETE SET NULL)X   u#M 3%-92026-03-06 05:01:35manual_errorioR8eFBEVaKOkjc0Create User n8n ServerP3--32026-03-06 05:07:04production_errorioR8eFBEVaKOkjc0Create n8n InstanceM3)-32026-03-06 05:07:04manual_successioR8eFBEVaKOkjc0Create n8n Instance: ;#- 2026-03-06 05:00:11.863data_loadedioR8eFBEVaKOkjc0  Q8 G  [ - m3yNa18 -#) ;UioR8eFBEVaKOkjc0webhookPathcreate-n8n11112026-03-06 05:06:29.599{"nodeId":"fb6697e6-8815-4beb-936d-f16f1814cfdc","nodeVersion":1}9d185630-6aca-46e3-b9b4-7ceb8e19d3fb67 -9 ;UioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.webhook2026-03-06 05:06:29.599{"nodeId":"fb6697e6-8815-4beb-936d-f16f1814cfdc","nodeVersion":1}9d185630-6aca-46e3-b9b4-7ceb8e19d3fb76 -; ;UioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.function2026-03-06 05:06:29.599{"nodeId":"12aa3069-ada6-4845-ad2f-87af3d31bb85","nodeVersion":1}9d185630-6aca-46e3-b9b4-7ceb8e19d3fb=5 -G ;UioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.executeCommand2026-03-06 05:06:29.599{"nodeId":"0f259cf3-ccd1-481d-b237-bbb048f9ce3c","nodeVersion":1}9d185630-6aca-46e3-b9b4-7ceb8e19d3fb74 -; ;UioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.function2026-03-06 05:06:29.599{"nodeId":"9ddf7ecd-9b82-40df-82c7-63fc748fb79c","nodeVersion":1}9d185630-6aca-46e3-b9b4-7ceb8e19d3fb?3 -K ;UioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.respondToWebhook2026-03-06 05:06:29.599{"nodeId":"8d30d07b-7c63-43dd-89cc-fed8ec9d226b","nodeVersion":1}9d185630-6aca-46e3-b9b4-7ceb8e19d3fb-2 -#! ;UioR8eFBEVaKOkjc0webhookPathcreate-n8n2026-03-06 05:06:29.599{"nodeId":"8e72c500-0d98-4892-b3bf-16633ffdb18f","nodeVersion":1}9d185630-6aca-46e3-b9b4-7ceb8e19d3fb61 -9 ;UioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.webhook2026-03-06 05:06:29.599{"nodeId":"8e72c500-0d98-4892-b3bf-16633ffdb18f","nodeVersion":1}9d185630-6aca-46e3-b9b4-7ceb8e19d3fb70 -; ;UioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.function2026-03-06 05:06:29.599{"nodeId":"352f91c6-e900-433c-8d9b-b653cbf5e275","nodeVersion":1}9d185630-6aca-46e3-b9b4-7ceb8e19d3fb=/ -G ;UioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.executeCommand2026-03-06 05:06:29.599{"nodeId":"749ef316-deab-4898-805c-891900d0fed0","nodeVersion":1}9d185630-6aca-46e3-b9b4-7ceb8e19d3fb=. -G ;UioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.executeCommand2026-03-06 05:06:29.599{"nodeId":"c3ef5fcd-65be-44ef-a8fa-dc1db8dc1621","nodeVersion":1}9d185630-6aca-46e3-b9b4-7ceb8e19d3fb7- -; ;UioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.function2026-03-06 05:06:29.599{"nodeId":"8b770345-6008-45df-b449-648dc9181903","nodeVersion":1}9d185630-6aca-46e3-b9b4-7ceb8e19d3fb=, -G ;UioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.executeCommand2026-03-06 05:06:29.599{"nodeId":"33050773-1166-410e-af9a-2629b205483c","nodeVersion":1}9d185630-6aca-46e3-b9b4-7ceb8e19d3fb7+ -; ;UioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.function2026-03-06 05:06:29.599{"nodeId":"6b4138b5-495d-46a4-8a37-1ef01adb601a","nodeVersion":1}9d185630-6aca-46e3-b9b4-7ceb8e19d3fb2* -1 ;UioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.set2026-03-06 05:06:29.599{"nodeId":"503fad3f-a1b5-4820-a049-48dd916574f5","nodeVersion":1}9d185630-6aca-46e3-b9b4-7ceb8e19d3fb<) -A ;UioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.httpRequest2026-03-06 05:06:29.599{"nodeId":"9654e007-c6e7-4a2b-b48a-7ee7df40a1c0","nodeVersion":4.4}9d185630-6aca-46e3-b9b4-7ceb8e19d3fb?( -K ;UioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.respondToWebhook2026-03-06 05:06:29.599{"nodeId":"c17c8373-bb00-4562-ae8f-c18a13839f0d","nodeVersion":1}9d185630-6aca-46e3-b9b4-7ceb8e19d3fb=' -G ;UioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.executeCommand2026-03-06 05:06:29.599{"nodeId":"d049c848-745f-43ce-ad8f-2069344eb356","nodeVersion":1}9d185630-6aca-46e3-b9b4-7ceb8e19d3fb7& -; ;UioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.function2026-03-06 05:06:29.599{"nodeId":"7c91468e-80ea-4de5-8553-376dc01f0973","nodeVersion":1}9d185630-6aca-46e3-b9b4-7ceb8e19d3fb-% -#! ;UioR8eFBEVaKOkjc0webhookPathcreate-n8n2026-03-06 05:06:29.599{"nodeId":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","nodeVersion":1}9d185630-6aca-46e3-b9b4-7ceb8e19d3fb6$ -9 ;UioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.webhook2026-03-06 05:06:29.599{"nodeId":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","nodeVersion":1}9d185630-6aca-46e3-b9b4-7ceb8e19d3fb F  p N  yR R1a6 Q -#) ;ioR8eFBEVaKOkjc0webhookPathcreate-n8n11112026-03-06 05:11:31.544{"nodeId":"fb6697e6-8815-4beb-936d-f16f1814cfdc","nodeVersion":1}P -9 ;ioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.webhook2026-03-06 05:11:31.544{"nodeId":"fb6697e6-8815-4beb-936d-f16f1814cfdc","nodeVersion":1}O -; ;ioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.function2026-03-06 05:11:31.544{"nodeId":"12aa3069-ada6-4845-ad2f-87af3d31bb85","nodeVersion":1}N -G ;ioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.executeCommand2026-03-06 05:11:31.544{"nodeId":"0f259cf3-ccd1-481d-b237-bbb048f9ce3c","nodeVersion":1}M -; ;ioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.function2026-03-06 05:11:31.544{"nodeId":"9ddf7ecd-9b82-40df-82c7-63fc748fb79c","nodeVersion":1}L -K ;ioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.respondToWebhook2026-03-06 05:11:31.544{"nodeId":"8d30d07b-7c63-43dd-89cc-fed8ec9d226b","nodeVersion":1} K -#! ;ioR8eFBEVaKOkjc0webhookPathcreate-n8n2026-03-06 05:11:31.544{"nodeId":"8e72c500-0d98-4892-b3bf-16633ffdb18f","nodeVersion":1}J -9 ;ioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.webhook2026-03-06 05:11:31.544{"nodeId":"8e72c500-0d98-4892-b3bf-16633ffdb18f","nodeVersion":1}I -; ;ioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.function2026-03-06 05:11:31.544{"nodeId":"352f91c6-e900-433c-8d9b-b653cbf5e275","nodeVersion":1}H -G ;ioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.executeCommand2026-03-06 05:11:31.544{"nodeId":"749ef316-deab-4898-805c-891900d0fed0","nodeVersion":1}G -G ;ioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.executeCommand2026-03-06 05:11:31.544{"nodeId":"c3ef5fcd-65be-44ef-a8fa-dc1db8dc1621","nodeVersion":1}F -; ;ioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.function2026-03-06 05:11:31.544{"nodeId":"8b770345-6008-45df-b449-648dc9181903","nodeVersion":1}E -G ;ioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.executeCommand2026-03-06 05:11:31.544{"nodeId":"33050773-1166-410e-af9a-2629b205483c","nodeVersion":1}D -; ;ioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.function2026-03-06 05:11:31.544{"nodeId":"6b4138b5-495d-46a4-8a37-1ef01adb601a","nodeVersion":1}C -1 ;ioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.set2026-03-06 05:11:31.544{"nodeId":"503fad3f-a1b5-4820-a049-48dd916574f5","nodeVersion":1}B -A ;ioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.httpRequest2026-03-06 05:11:31.544{"nodeId":"9654e007-c6e7-4a2b-b48a-7ee7df40a1c0","nodeVersion":4.4}A -K ;ioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.respondToWebhook2026-03-06 05:11:31.544{"nodeId":"c17c8373-bb00-4562-ae8f-c18a13839f0d","nodeVersion":1}@ -G ;ioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.executeCommand2026-03-06 05:11:31.544{"nodeId":"d049c848-745f-43ce-ad8f-2069344eb356","nodeVersion":1}? -; ;ioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.function2026-03-06 05:11:31.544{"nodeId":"7c91468e-80ea-4de5-8553-376dc01f0973","nodeVersion":1} > -#! ;ioR8eFBEVaKOkjc0webhookPathcreate-n8n2026-03-06 05:11:31.544{"nodeId":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","nodeVersion":1}= -9 ;ioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.webhook2026-03-06 05:11:31.544{"nodeId":"026a9c89-93a9-4dc5-9af4-701d31b89ae6","nodeVersion":1}<< -A ;UioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.httpRequest2026-03-06 05:06:29.599{"nodeId":"6699443d-0372-4cbf-958a-e890a12c5381","nodeVersion":4.4}9d185630-6aca-46e3-b9b4-7ceb8e19d3fb?; -K ;UioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.respondToWebhook2026-03-06 05:06:29.599{"nodeId":"2672e437-0f80-43fa-91ad-80805b69d424","nodeVersion":1}9d185630-6aca-46e3-b9b4-7ceb8e19d3fb=: -G ;UioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.executeCommand2026-03-06 05:06:29.599{"nodeId":"652ddbd1-09f1-4ac6-84c2-169a34d5016c","nodeVersion":1}9d185630-6aca-46e3-b9b4-7ceb8e19d3fb79 -; ;UioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.function2026-03-06 05:06:29.599{"nodeId":"36f16652-730e-4ff9-8978-16747fa1d8e3","nodeVersion":1}9d185630-6aca-46e3-b9b4-7ceb8e19d3fb  j0 V -3 ;ioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.code2026-03-06 05:11:31.544{"nodeId":"48594458-80cf-442a-be1d-c146a406d631","nodeVersion":2}U -A ;ioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.httpRequest2026-03-06 05:11:31.544{"nodeId":"6699443d-0372-4cbf-958a-e890a12c5381","nodeVersion":4.4}T -K ;ioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.respondToWebhook2026-03-06 05:11:31.544{"nodeId":"2672e437-0f80-43fa-91ad-80805b69d424","nodeVersion":1}S -G ;ioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.executeCommand2026-03-06 05:11:31.544{"nodeId":"652ddbd1-09f1-4ac6-84c2-169a34d5016c","nodeVersion":1}R -; ;ioR8eFBEVaKOkjc0nodeTypen8n-nodes-base.function2026-03-06 05:11:31.544{"nodeId":"36f16652-730e-4ff9-8978-16747fa1d8e3","nodeVersion":1}  - _ 5G  (k55qtablechat_hub_agent_toolschat_hub_agent_toolsCREATE TABLE "chat_hub_agent_tools" ("agentId" varchar NOT NULL, "toolId" varchar NOT NULL, CONSTRAINT "FK_2b53d796b3dbae91b1a9553c048" FOREIGN KEY ("agentId") REFERENCES "chat_hub_agents" ("id") ON DELETE CASCADE, CONSTRAINT "FK_43e70f04c53344f82483d0570f6" FOREIGN KEY ("toolId") REFERENCES "chat_hub_tools" ("id") ON DELETE CASCADE, PRIMARY KEY ("agentId", "toolId"))9g))+tablechat_hub_toolschat_hub_toolsCREATE TABLE "chat_hub_tools" ("id" varchar PRIMARY KEY NOT NULL, "name" varchar(255) NOT NULL, "type" varchar(255) NOT NULL, "typeVersion" real NOT NULL, "ownerId" varchar NOT NULL, "definition" text NOT NULL, "enabled" boolean NOT NULL DEFAULT (true), "createdAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "updatedAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), CONSTRAINT "FK_b8030b47af9213f1fd15450fb7f" FOREIGN KEY ("ownerId") REFERENCES "user" ("id") ON DELETE CASCADE)qQ+indexsqlite_autoindex_chat_hub_agents_1chat_hub_agentsPoc=indexsqlite_autoindex_workflow_builder_session_2workflow_builder_sessionPnc=indexsqlite_autoindex_workflow_builder_session_1workflow_builder_sessiondm==Ytableworkflow_builder_sessionworkflow_builder_sessionCREATE TABLE "workflow_builder_session" ("id" varchar PRIMARY KEY NOT NULL, "workflowId" varchar(36) NOT NULL, "userId" varchar NOT NULL, "messages" text NOT NULL DEFAULT ('[]'), "previousSummary" text, "createdAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "updatedAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), CONSTRAINT "UQ_ec2aa73632932d485a1d5192ce1" UNIQUE ("workflowId", "userId"), CONSTRAINT "FK_7983c618db48f47bf5a4cc1e1e4" FOREIGN KEY ("workflowId") REFERENCES "workflow_entity" ("id") ON DELETE CASCADE, CONSTRAINT "FK_00290cdeee4d4d7db84709be936" FOREIGN KEY ("userId") REFERENCES "user" ("id") ON DELETE CASCADE)         U - 0jo.U8_I-1indexIDX_execution_entity_stoppedAtexecution_entityCREATE INDEX "IDX_execution_entity_stoppedAt" ON "execution_entity" ("stoppedAt") #I?IindexIDX_c1519757391996eb06064f0e7cexecution_annotation_tagsCREATE INDEX "IDX_c1519757391996eb06064f0e7c" ON "execution_annotation_tags" ("annotationId") I?;indexIDX_a3697779b366e131b2bbdae297execution_annotation_tagsCREATE INDEX "IDX_a3697779b366e131b2bbdae297" ON "execution_annotation_tags" ("tagId") I7?indexIDX_ae51b54c4bb430cf92f48b623fannotation_tag_entityCREATE UNIQUE INDEX "IDX_ae51b54c4bb430cf92f48b623f" ON "annotation_tag_entity" ("name") !~I7MindexIDX_97f863fa83c4786f1956508496execution_annotationsCREATE UNIQUE INDEX "IDX_97f863fa83c4786f1956508496" ON "execution_annotations" ("executionId") "}I1UindexIDX_cec8eea3bf49551482ccb4933eexecution_metadataCREATE UNIQUE INDEX "IDX_cec8eea3bf49551482ccb4933e" ON "execution_metadata" ("executionId", "key") TugAindexsqlite_autoindex_workflow_published_version_1workflow_published_version|I!)indexIDX_8f949d7a3a984759044054e89btag_entityCREATE UNIQUE INDEX "IDX_8f949d7a3a984759044054e89b" ON "tag_entity" ("name") /{Y)gindexidx_webhook_entity_webhook_path_methodwebhook_entityCREATE INDEX "idx_webhook_entity_webhook_path_method" ON "webhook_entity" ("webhookId","method","pathLength") zI)-indexidx_workflows_tags_workflow_idworkflows_tagsCREATE INDEX "idx_workflows_tags_workflow_id" ON "workflows_tags" ("workflowId"){y?)indexidx_workflows_tags_tag_idworkflows_tagsCREATE INDEX "idx_workflows_tags_tag_id" ON "workflows_tags" ("tagId")9xA+triggerworkflow_version_incrementworkflow_entityCREATE TRIGGER workflow_version_increment AFTER UPDATE ON workflow_entity FOR EACH ROW WHEN OLD."versionCounter" = NEW."versionCounter" BEGIN UPDATE workflow_entity SET "versionCounter" = "versionCounter" + 1 WHERE id = NEW.id; ENDBwU/indexsqlite_autoindex_chat_hub_sessions_1chat_hub_sessionsPv//Mtablechat_hub_sessionschat_hub_sessionsCREATE TABLE "chat_hub_sessions" ("id" varchar PRIMARY KEY NOT NULL, "title" varchar(256) NOT NULL, "ownerId" varchar NOT NULL, "lastMessageAt" datetime(3) NOT NULL, "credentialId" varchar(36), "provider" varchar(16), "model" varchar(64), "workflowId" varchar(36), "createdAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "updatedAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "agentId" varchar(36), "agentName" varchar(128), "type" varchar(16) NOT NULL DEFAULT ('production'), CONSTRAINT "CHK_chat_hub_sessions_type" CHECK ("type" IN ('production', 'manual')), CONSTRAINT "FK_e9ecf8ede7d989fcd18790fe36a" FOREIGN KEY ("ownerId") REFERENCES "user" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, CONSTRAINT "FK_7bc13b4c7e6afbfaf9be326c189" FOREIGN KEY ("credentialId") REFERENCES "credentials_entity" ("id") ON DELETE SET NULL ON UPDATE NO ACTION, CONSTRAINT "FK_9f9293d9f552496c40e0d1a8f80" FOREIGN KEY ("workflowId") REFERENCES "workflow_entity" ("id") ON DELETE SET NULL ON UPDATE NO ACTION, CONSTRAINT "FK_chat_hub_sessions_agentId" FOREIGN KEY ("agentId") REFERENCES "chat_hub_agents" ("id") ON DELETE SET NULL ON UPDATE NO ACTION)    POST  POST       uu;2026-03-06 05:07:04.381;2026-03-06 05:07:04.353;2026-03-06 05:01:35.496;2026-03-06 05:00:11.973; 2026-03-06 05:00:11.942   - ioR8eFBEVaKOkjc0 !tag:delete1dataTable:writeRowG VnU;$ }cQ>+  k V A ,   f P 9 "  f M 6   o S 6 i R ; ' kVB-nXB%ybK4pS6iS>(v[@% }fO8! nV1dataTable:writeRow1dataTable:writeRow1dataTable:writeRow+-dataTable:updatee-dataTable:updateF-dataTable:update-dataTable:update-dataTable:update*/dataTable:readRow/dataTable:readRowd/dataTable:readRowE/dataTable:readRow/dataTable:readRow/dataTable:readRow))dataTable:read)dataTable:readc)dataTable:readD)dataTable:read)dataTable:read)dataTable:read(7dataTable:listProject~7dataTable:listProjectb7dataTable:listProjectC7dataTable:listProject7dataTable:listProject7dataTable:listProject')dataTable:list)dataTable:list)dataTable:list&-dataTable:deletea-dataTable:deleteB-dataTable:delete-dataTable:delete-dataTable:delete%-dataTable:create`-dataTable:createA-dataTable:create-dataTable:create-dataTable:create$?credentialResolver:update?credentialResolver:update#;credentialResolver:read;credentialResolver:read";credentialResolver:list;credentialResolver:list;credentialResolver:list!?credentialResolver:delete?credentialResolver:delete ?credentialResolver:create?credentialResolver:create/credential:update/credential:update_/credential:update@/credential:update/credential:update/credential:update1credential:unshare1credential:unshare1credential:unshare1credential:unshare1credential:unshare=credential:shareGlobally=credential:shareGlobally-credential:share-credential:share?-credential:share-credential:share-credential:share+credential:read+credential:read+credential:read}+credential:read^+credential:read>+credential:read+credential:read+credential:read+credential:move+credential:move=+credential:move+credential:move+credential:move+credential:list|+credential:list]+credential:list<+credential:list+credential:list+credential:list/credential:delete/credential:delete\/credential:delete;/credential:delete/credential:delete/credential:delete/credential:create[/credential:create:/credential:create/credential:create/credential:create;communityPackage:update;communityPackage:updateAcommunityPackage:uninstallAcommunityPackage:uninstall7communityPackage:list7communityPackage:list=communityPackage:install=communityPackage:install1community:register1community:register3chatHubAgent:update3chatHubAgent:update3chatHubAgent:update3chatHubAgent:update/chatHubAgent:read/chatHubAgent:read/chatHubAgent:read/chatHubAgent:read/chatHubAgent:list/chatHubAgent:list/chatHubAgent:list/chatHubAgent:list3chatHubAgent:delete3chatHubAgent:delete3chatHubAgent:delete3chatHubAgent:delete3chatHubAgent:create 3chatHubAgent:create3chatHubAgent:create3chatHubAgent:create +chatHub:message +chatHub:message+chatHub:message+chatHub:message )chatHub:manage)chatHub:manage 5breakingChanges:list5breakingChanges:list )banner:dismiss)banner:dismiss -auditLogs:manage-auditLogs:manage'apiKey:manage'apiKey:manage'apiKey:manage5annotationTag:update5annotationTag:update5annotationTag:update1annotationTag:read1annotationTag:read~1annotationTag:read1annotationTag:list1annotationTag:list}1annotationTag:list5annotationTag:delete5annotationTag:delete|5annotationTag:delete5annotationTag:create5annotationTag:create{5annotationTag:create1aiAssistant:managez1 aiAssistant:manage PrR5eF& k H $  v T 2  h F # } k X E 2   w g V E 4 #  n`Q>*mXB, ziWE3!}iN2rX>$ nR6pT7o_P!tag:delete]!tag:create!tag:create!tag:create\1sourceControl:push/1sourceControl:push1sourceControl:push[1sourceControl:pull1sourceControl:pullZ5sourceControl:manage5sourceControl:manageY;securitySettings:manage;securitySettings:manageX9securityAudit:generate9securityAudit:generateW#saml:manage#saml:manageV#role:manage#role:manageU3provisioning:manage3provisioning:manageT9projectVariable:updater9projectVariable:update.9projectVariable:update9projectVariable:updateS5projectVariable:read5projectVariable:readq5projectVariable:read-5projectVariable:read5projectVariable:readR5projectVariable:list5projectVariable:listp5projectVariable:list,5projectVariable:list5projectVariable:listQ9projectVariable:deleteo9projectVariable:delete+9projectVariable:delete9projectVariable:deleteP9projectVariable:createn9projectVariable:create*9projectVariable:create9projectVariable:createO)project:update))project:update)project:updateN%project:read%project:readm%project:readO%project:read(%project:read%project:readM%project:list%project:listl%project:listN%project:list'%project:list%project:listL)project:delete&)project:delete)project:deleteK)project:create)project:createJ1orchestration:read1orchestration:readI#oidc:manage#oidc:manageH-mcpApiKey:rotate-mcpApiKey:rotate-mcpApiKey:rotateG-mcpApiKey:create-mcpApiKey:create-mcpApiKey:createFmcp:oauthmcp:oauth mcp:oauthE!mcp:manage!mcp:manageD3logStreaming:manage3logStreaming:manageC)license:manage)license:manageBldap:sync ldap:syncA#ldap:manage#ldap:manage@'insights:list'insights:list?'folder:updatek'folder:updateM'folder:update%'folder:update'folder:update>#folder:read#folder:readj#folder:readL#folder:read$#folder:read#folder:read=#folder:moveK#folder:move##folder:move#folder:move<#folder:list#folder:listi#folder:listJ#folder:list"#folder:list#folder:list;'folder:deleteh'folder:deleteI'folder:delete!'folder:delete'folder:delete:'folder:createg'folder:createH'folder:create 'folder:create'folder:create9#IexternalSecretsProvider:update#IexternalSecretsProvider:update"IexternalSecretsProvider:update8!EexternalSecretsProvider:sync!EexternalSecretsProvider:sync EexternalSecretsProvider:sync7!EexternalSecretsProvider:read!EexternalSecretsProvider:read!EexternalSecretsProvider:read EexternalSecretsProvider:read6!EexternalSecretsProvider:list!EexternalSecretsProvider:list!EexternalSecretsProvider:list EexternalSecretsProvider:list5#IexternalSecretsProvider:delete#IexternalSecretsProvider:delete"IexternalSecretsProvider:delete4#IexternalSecretsProvider:create"IexternalSecretsProvider:create33externalSecret:list3externalSecret:list3externalSecret:list3externalSecret:list2-execution:reveal-execution:reveal-execution:reveal-execution:revealAeventBusDestination:updateAeventBusDestination:update1=eventBusDestination:test=eventBusDestination:test=eventBusDestination:test0=eventBusDestination:read=eventBusDestination:read/=eventBusDestination:list=eventBusDestination:list=eventBusDestination:list.AeventBusDestination:deleteAeventBusDestination:delete-AeventBusDestination:createAeventBusDestination:create,1dataTable:writeRowf ykVF5%xiR:* } j W C .  n Y D /   g L 1  } j W D 1   i S = '  }iUA)mWA-e@$Kworkflow:updateRedactionSetting$Kworkflow:updateRedactionSetting$Kworkflow:updateRedactionSetting$Kworkflow:updateRedactionSetting+workflow:update+workflow:update+workflow:update{+workflow:updateZ+workflow:update9+workflow:update+workflow:updatey-workflow:unshare-workflow:unshare-workflow:unshare-workflow:unshare1workflow:unpublish1workflow:unpublish1workflow:unpublish1workflow:unpublish1workflow:unpublishz1workflow:unpublishY1workflow:unpublish8)workflow:share)workflow:shareX)workflow:share)workflow:sharex'workflow:read'workflow:read'workflow:read'workflow:ready'workflow:readW'workflow:read7'workflow:read'workflow:readw-workflow:publish-workflow:publish-workflow:publishx-workflow:publishV-workflow:publish6-workflow:publish-workflow:publishv'workflow:move'workflow:moveU'workflow:move5'workflow:move'workflow:moveu'workflow:list'workflow:listw'workflow:listT'workflow:list4'workflow:list'workflow:listt7workflow:execute-chat7workflow:execute-chat7workflow:execute-chat7workflow:execute-chat7workflow:execute-chatv7workflow:execute-chatS7workflow:execute-chat37workflow:execute-chat7workflow:execute-chats-workflow:execute-workflow:execute-workflow:executeu-workflow:executeR-workflow:execute2-workflow:execute-workflow:executer+workflow:delete+workflow:deletet+workflow:deleteQ+workflow:delete1+workflow:delete+workflow:deleteq+workflow:creates+workflow:createP+workflow:create0+workflow:create+workflow:createp1workersView:manage1workersView:manageo+variable:update+variable:updaten'variable:read 'variable:read'variable:readm'variable:list 'variable:list'variable:listl+variable:delete+variable:deletek+variable:create+variable:createj#user:update#user:updatei1user:resetPassword1user:resetPasswordhuser:read user:readguser:list user:list user:listf;user:generateInviteLink;user:generateInviteLinke+user:enforceMfa+user:enforceMfad#user:delete#user:deletec#user:create#user:createb+user:changeRole+user:changeRolea!tag:update!tag:update!tag:update` tag:read tag:read tag:read_ tag:list tag:list tag:list^  'U 3f77e136-dc7a-4d58-8dc6-817cb2b88866  nG L zfqE|\ % l BIC=indexIDX_9c9ee9df586e60bb723234e499dynamic_credential_resolverCREATE INDEX "IDX_9c9ee9df586e60bb723234e499" ON "dynamic_credential_resolver" ("type") ,I=]indexIDX_070b5de842ece9ccdda0d9738bworkflow_publish_historyCREATE INDEX "IDX_070b5de842ece9ccdda0d9738b" ON "workflow_publish_history" ("workflowId", "versionId") I#AindexIDX_56900edc3cfd16612e2ef2c6a8binary_data CREATE INDEX "IDX_56900edc3cfd16612e2ef2c6a8" ON "binary_data" ("sourceType", "sourceId") I+%indexIDX_e10425f6ab9964c4c1623a4a03workflow_entity CREATE INDEX "IDX_e10425f6ab9964c4c1623a4a03" ON "workflow_entity" ("name") I-3indexIDX_1e31657f5fe46816c34be7c1b4workflow_history CREATE INDEX "IDX_1e31657f5fe46816c34be7c1b4" ON "workflow_history" ("workflowId") t?indexIDX_UniqueRoleDisplayNamerole CREATE UNIQUE INDEX "IDX_UniqueRoleDisplayName" ON "role" ("displayName");I1indexIDX_a4da41795da1422f680c723e80insights_by_period CREATE UNIQUE INDEX "IDX_a4da41795da1422f680c723e80" ON "insights_by_period" ("periodStart", "type", "periodUnit", "metaId") C]indexvariables_global_key_uniquevariablesCREATE UNIQUE INDEX "variables_global_key_unique" ON "variables" ("key") WHERE projectId IS NULL E;indexvariables_project_key_uniquevariablesCREATE UNIQUE INDEX "variables_project_key_unique" ON "variables" ("projectId", "key") R 'uindexuser_role_idxuserCREATE INDEX "user_role_idx" ON "user" ("roleSlug")  O-Gindexproject_relation_role_project_idxproject_relationCREATE INDEX "project_relation_role_project_idx" ON "project_relation" ("projectId", "role")  ?-indexproject_relation_role_idxproject_relationCREATE INDEX "project_relation_role_idx" ON "project_relation" ("role")  I-1indexIDX_61448d56d61802b5dfde5cdb00project_relationCREATE INDEX "IDX_61448d56d61802b5dfde5cdb00" ON "project_relation" ("projectId") I-+indexIDX_5f0643f6717905a05164090ddeproject_relationCREATE INDEX "IDX_5f0643f6717905a05164090dde" ON "project_relation" ("userId") I37indexIDX_8e4b4774db42f1e6dda3452b2atest_case_executionCREATE INDEX "IDX_8e4b4774db42f1e6dda3452b2a" ON "test_case_execution" ("testRunId") v=!indexIDX_role_scope_scopeSlugrole_scopeCREATE INDEX "IDX_role_scope_scopeSlug" ON "role_scope" ("scopeSlug") I#indexIDX_d6870d3b6e4c185d33926f423ctest_runCREATE INDEX "IDX_d6870d3b6e4c185d33926f423c" ON "test_run" ("workflowId") I/CindexIDX_1d8ab99d5861c9388d2dc1cf73insights_metadataCREATE UNIQUE INDEX "IDX_1d8ab99d5861c9388d2dc1cf73" ON "insights_metadata" ("workflowId") I7indexIDX_14f68deffaf858465715995508folderCREATE UNIQUE INDEX "IDX_14f68deffaf858465715995508" ON "folder" ("projectId", "id") I-1indexIDX_execution_entity_deletedAtexecution_entityCREATE INDEX "IDX_execution_entity_deletedAt" ON "execution_entity" ("deletedAt") - cZz5fzaW49pCUs3C 7 project:personalOwner )-7 cZz5fzaW49pCUs3Cproject:personalOwner % global:owner    p^K%)Workflow Owner +Workflow Editor $MSecrets Provider Connection User%OSecrets Provider Connection Owner)Project Viewer'Project Owner)Project Editor/Project Chat User'Project Admin Owner Member+Credential User -Credential Owner Chat User Admin  nYD/r]H3 -ioR8eFBEVaKOkjc0-ioR8eFBEVaKOkjc0-ioR8eFBEVaKOkjc0-ioR8eFBEVaKOkjc0-ioR8eFBEVaKOkjc0-ioR8eFBEVaKOkjc0-ioR8eFBEVaKOkjc0-ioR8eFBEVaKOkjc0-ioR8eFBEVaKOkjc0-ioR8eFBEVaKOkjc0-ioR8eFBEVaKOkjc0-ioR8eFBEVaKOkjc0-ioR8eFBEVaKOkjc0-ioR8eFBEVaKOkjc0-ioR8eFBEVaKOkjc0 -ioR8eFBEVaKOkjc0 -ioR8eFBEVaKOkjc0 -ioR8eFBEVaKOkjc0 -ioR8eFBEVaKOkjc0 -ioR8eFBEVaKOkjc0-ioR8eFBEVaKOkjc0-ioR8eFBEVaKOkjc0-ioR8eFBEVaKOkjc0-ioR8eFBEVaKOkjc0-ioR8eFBEVaKOkjc0-ioR8eFBEVaKOkjc0- ioR8eFBEVaKOkjc0 3 Create n8n Instance  SS9-UioR8eFBEVaKOkjc09d185630-6aca-46e3-b9b4-7ceb8e19d3fb9-UioR8eFBEVaKOkjc0370acd9f-8c23-404f-be77-ec179f6ec8588-U ioR8eFBEVaKOkjc0370acd9f-8c23-404f-be77-ec179f6ec858    tt%--ioR8eFBEVaKOkjc0production_error#-)ioR8eFBEVaKOkjc0manual_success!-%ioR8eFBEVaKOkjc0manual_error-# ioR8eFBEVaKOkjc0data_loaded   3 BdB vT2 ~ b F *  f G ( ~ Z 6  x ] B9n8n-nodes-base.webhookP9n8n-nodes-base.webhookJ9n8n-nodes-base.webhook=9n8n-nodes-base.webhook79n8n-nodes-base.webhook19n8n-nodes-base.webhook$1n8n-nodes-base.setC1n8n-nodes-base.set*#Kn8n-nodes-base.respondToWebhookT#Kn8n-nodes-base.respondToWebhookL#Kn8n-nodes-base.respondToWebhookA#Kn8n-nodes-base.respondToWebhook;#Kn8n-nodes-base.respondToWebhook3#Kn8n-nodes-base.respondToWebhook(An8n-nodes-base.httpRequestUAn8n-nodes-base.httpRequestBAn8n-nodes-base.httpRequest<An8n-nodes-base.httpRequest);n8n-nodes-base.functionR;n8n-nodes-base.functionO;n8n-nodes-base.functionM;n8n-nodes-base.functionI;n8n-nodes-base.functionF;n8n-nodes-base.functionD;n8n-nodes-base.function?;n8n-nodes-base.function9;n8n-nodes-base.function6;n8n-nodes-base.function4;n8n-nodes-base.function0;n8n-nodes-base.function-;n8n-nodes-base.function+;n8n-nodes-base.function&!Gn8n-nodes-base.executeCommandS!Gn8n-nodes-base.executeCommandN!Gn8n-nodes-base.executeCommandH!Gn8n-nodes-base.executeCommandG!Gn8n-nodes-base.executeCommandE!Gn8n-nodes-base.executeCommand@!Gn8n-nodes-base.executeCommand:!Gn8n-nodes-base.executeCommand5!Gn8n-nodes-base.executeCommand/!Gn8n-nodes-base.executeCommand.!Gn8n-nodes-base.executeCommand,!Gn8n-nodes-base.executeCommand'3n8n-nodes-base.codeV)create-n8n1111Q)create-n8n11118!create-n8nK!create-n8n>!create-n8n2!create-n8n% 3 W~qdWJ=0# zm`SF9, w g W#webhookPathQ#webhookPathK#webhookPath>#webhookPath8#webhookPath2#webhookPath% nodeTypeV nodeTypeU nodeTypeT nodeTypeS nodeTypeR nodeTypeP nodeTypeO nodeTypeN nodeTypeM nodeTypeL nodeTypeJ nodeTypeI nodeTypeH nodeTypeG nodeTypeF nodeTypeE nodeTypeD nodeTypeC nodeTypeB nodeTypeA nodeType@ nodeType? nodeType= nodeType< nodeType; nodeType: nodeType9 nodeType7 nodeType6 nodeType5 nodeType4 nodeType3 nodeType1 nodeType0 nodeType/ nodeType. nodeType- nodeType, nodeType+ nodeType* nodeType) nodeType( nodeType' nodeType& nodeType$ 3 mXC.q\G2 u ` K 6 ! y d O : %  -ioR8eFBEVaKOkjc0V-ioR8eFBEVaKOkjc0U-ioR8eFBEVaKOkjc0T-ioR8eFBEVaKOkjc0S-ioR8eFBEVaKOkjc0R-ioR8eFBEVaKOkjc0Q-ioR8eFBEVaKOkjc0P-ioR8eFBEVaKOkjc0O-ioR8eFBEVaKOkjc0N-ioR8eFBEVaKOkjc0M-ioR8eFBEVaKOkjc0L-ioR8eFBEVaKOkjc0K-ioR8eFBEVaKOkjc0J-ioR8eFBEVaKOkjc0I-ioR8eFBEVaKOkjc0H-ioR8eFBEVaKOkjc0G-ioR8eFBEVaKOkjc0F-ioR8eFBEVaKOkjc0E-ioR8eFBEVaKOkjc0D-ioR8eFBEVaKOkjc0C-ioR8eFBEVaKOkjc0B-ioR8eFBEVaKOkjc0A-ioR8eFBEVaKOkjc0@-ioR8eFBEVaKOkjc0?-ioR8eFBEVaKOkjc0>-ioR8eFBEVaKOkjc0=-ioR8eFBEVaKOkjc0<-ioR8eFBEVaKOkjc0;-ioR8eFBEVaKOkjc0:-ioR8eFBEVaKOkjc09-ioR8eFBEVaKOkjc08-ioR8eFBEVaKOkjc07-ioR8eFBEVaKOkjc06-ioR8eFBEVaKOkjc05-ioR8eFBEVaKOkjc04-ioR8eFBEVaKOkjc03-ioR8eFBEVaKOkjc02-ioR8eFBEVaKOkjc01-ioR8eFBEVaKOkjc00-ioR8eFBEVaKOkjc0/-ioR8eFBEVaKOkjc0.-ioR8eFBEVaKOkjc0--ioR8eFBEVaKOkjc0,-ioR8eFBEVaKOkjc0+-ioR8eFBEVaKOkjc0*-ioR8eFBEVaKOkjc0)-ioR8eFBEVaKOkjc0(-ioR8eFBEVaKOkjc0'-ioR8eFBEVaKOkjc0&-ioR8eFBEVaKOkjc0%-ioR8eFBEVaKOkjc0$ 3 }~U,_6 i @  s J ! }(U9d185630-6aca-46e3-b9b4-7ceb8e19d3fb<(U9d185630-6aca-46e3-b9b4-7ceb8e19d3fb;(U9d185630-6aca-46e3-b9b4-7ceb8e19d3fb:(U9d185630-6aca-46e3-b9b4-7ceb8e19d3fb9(U9d185630-6aca-46e3-b9b4-7ceb8e19d3fb8(U9d185630-6aca-46e3-b9b4-7ceb8e19d3fb7(U9d185630-6aca-46e3-b9b4-7ceb8e19d3fb6(U9d185630-6aca-46e3-b9b4-7ceb8e19d3fb5(U9d185630-6aca-46e3-b9b4-7ceb8e19d3fb4(U9d185630-6aca-46e3-b9b4-7ceb8e19d3fb3(U9d185630-6aca-46e3-b9b4-7ceb8e19d3fb2(U9d185630-6aca-46e3-b9b4-7ceb8e19d3fb1(U9d185630-6aca-46e3-b9b4-7ceb8e19d3fb0(U9d185630-6aca-46e3-b9b4-7ceb8e19d3fb/(U9d185630-6aca-46e3-b9b4-7ceb8e19d3fb.(U9d185630-6aca-46e3-b9b4-7ceb8e19d3fb-(U9d185630-6aca-46e3-b9b4-7ceb8e19d3fb,(U9d185630-6aca-46e3-b9b4-7ceb8e19d3fb+(U9d185630-6aca-46e3-b9b4-7ceb8e19d3fb*(U9d185630-6aca-46e3-b9b4-7ceb8e19d3fb)(U9d185630-6aca-46e3-b9b4-7ceb8e19d3fb((U9d185630-6aca-46e3-b9b4-7ceb8e19d3fb'(U9d185630-6aca-46e3-b9b4-7ceb8e19d3fb&(U9d185630-6aca-46e3-b9b4-7ceb8e19d3fb%(U9d185630-6aca-46e3-b9b4-7ceb8e19d3fb$VUTSRQPONMLKJIHGFEDCBA@?>=    u) 7  H }6#I)GindexIDX_4c72ebdb265d1775bf61147af0chat_hub_toolsCREATE UNIQUE INDEX "IDX_4c72ebdb265d1775bf61147af0" ON "chat_hub_tools" ("ownerId", "name") "I=EindexIDX_d61a12235d268a49af6a3c09c1dynamic_credential_entryCREATE INDEX "IDX_d61a12235d268a49af6a3c09c1" ON "dynamic_credential_entry" ("resolver_id") !I=CindexIDX_62476b94b56d9dc7ed9ed75d3ddynamic_credential_entryCREATE INDEX "IDX_62476b94b56d9dc7ed9ed75d3d" ON "dynamic_credential_entry" ("subject_id") G cCsindexIDX_secrets_provider_connection_providerKeysecrets_provider_connectionCREATE UNIQUE INDEX "IDX_secrets_provider_connection_providerKey" ON "secrets_provider_connection" ("providerKey") 5a3aindexIDX_workflow_dependency_publishedVersionIdworkflow_dependencyCREATE INDEX "IDX_workflow_dependency_publishedVersionId" ON "workflow_dependency" ("publishedVersionId") I39indexIDX_a4ff2d9b9628ea988fa9e7d0bfworkflow_dependencyCREATE INDEX "IDX_a4ff2d9b9628ea988fa9e7d0bf" ON "workflow_dependency" ("workflowId") I3AindexIDX_e7fe1cfda990c14a445937d0b9workflow_dependencyCREATE INDEX "IDX_e7fe1cfda990c14a445937d0b9" ON "workflow_dependency" ("dependencyType") I3?indexIDX_e48a201071ab85d9d09119d640workflow_dependencyCREATE INDEX "IDX_e48a201071ab85d9d09119d640" ON "workflow_dependency" ("dependencyKey") )IGMindexIDX_6edec973a6450990977bb854c3dynamic_credential_user_entryCREATE INDEX "IDX_6edec973a6450990977bb854c3" ON "dynamic_credential_user_entry" ("resolverId") %IGEindexIDX_a36dc616fabc3f736bb82410a2dynamic_credential_user_entryCREATE INDEX "IDX_a36dc616fabc3f736bb82410a2" ON "dynamic_credential_user_entry" ("userId") 1W3cindexIDX_workflow_statistics_workflow_nameworkflow_statisticsCREATE UNIQUE INDEX "IDX_workflow_statistics_workflow_name" ON "workflow_statistics" ("workflowId", "name")K/7indexIDX_chat_hub_messages_sessionIdchat_hub_messagesCREATE INDEX "IDX_chat_hub_messages_sessionId" ON "chat_hub_messages"("sessionId")C1%indexidx_credentials_entity_typecredentials_entityCREATE INDEX "idx_credentials_entity_type" ON "credentials_entity" ("type")