{"record":{"id":"caa3888e37e26ee4","repo":"n8n-io/n8n","slug":"unsupported-syntax-super-keyword-is-not-supporte","errorCode":null,"errorMessage":"Unsupported syntax: 'super keyword is not supported in SDK code' is not allowed in SDK code","messagePattern":"Unsupported syntax: 'super keyword is not supported in SDK code' is not allowed in SDK code","errorType":"exception","errorClass":"UnsupportedNodeError","httpStatus":null,"severity":"error","filePath":"packages/@n8n/workflow-sdk/src/ast-interpreter/interpreter.ts","lineNumber":228,"sourceCode":"\t\t\tif (this.sdkFunctions.has(name)) {\n\t\t\t\tfunc = this.sdkFunctions.get(name);\n\t\t\t} else {\n\t\t\t\t// Check variables, including auto-renamed ones\n\t\t\t\tconst resolvedName = this.renamedVariables.get(name) ?? name;\n\t\t\t\tif (this.variables.has(resolvedName)) {\n\t\t\t\t\tfunc = this.variables.get(resolvedName);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new UnknownIdentifierError(name, node.callee.loc ?? undefined, this.sourceCode);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (node.callee.type === 'MemberExpression') {\n\t\t\t// Method call: wf.add(...), node.to(...), etc.\n\t\t\tconst memberExpr = node.callee;\n\t\t\tvalidateMemberExpression(memberExpr, this.sourceCode);\n\n\t\t\t// Handle Super type (super keyword) - not supported in SDK code\n\t\t\tif (memberExpr.object.type === 'Super') {\n\t\t\t\tthrow new UnsupportedNodeError(\n\t\t\t\t\t'super keyword is not supported in SDK code',\n\t\t\t\t\tmemberExpr.object.loc ?? undefined,\n\t\t\t\t\tthis.sourceCode,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Get method name\n\t\t\tlet methodName: string;\n\t\t\tif (memberExpr.property.type === 'Identifier') {\n\t\t\t\tmethodName = memberExpr.property.name;\n\t\t\t} else if (\n\t\t\t\tmemberExpr.property.type === 'Literal' &&\n\t\t\t\ttypeof memberExpr.property.value === 'string'\n\t\t\t) {\n\t\t\t\tmethodName = memberExpr.property.value;\n\t\t\t} else {\n\t\t\t\tthrow new UnsupportedNodeError(\n\t\t\t\t\t'Dynamic method name',","sourceCodeStart":210,"sourceCodeEnd":246,"githubUrl":"https://github.com/n8n-io/n8n/blob/5ac6606e81f67bb9534255570cd4e86fd8101eee/packages/@n8n/workflow-sdk/src/ast-interpreter/interpreter.ts#L210-L246","documentation":"The `super` keyword (class inheritance) has no meaning in SDK builder code — there are no classes — and is explicitly rejected when it appears as the object of a member expression call (`super.method()`). This check at interpreter.ts:227 is defense-in-depth: `ClassDeclaration` and `ClassExpression` are already in `FORBIDDEN_NODE_TYPES`, so `super` should never reach the call visitor, but this catches any path that slips through.","triggerScenarios":"Writing `super.configure()` in SDK code. In practice unreachable through valid SDK code because class syntax is blocked at the `validateNodeType` stage, but serves as a secondary guard.","commonSituations":"Copying code from a class-based TypeScript snippet into SDK builder code; generated code that includes class inheritance patterns.","solutions":["Remove the `super` call entirely — SDK code has no class hierarchy","If you need the inherited behavior, inline the logic directly or move it to a Code node"],"exampleFix":"// before\nsuper.configure();\n\n// after\n// (remove — SDK code supports no classes or super keyword)","handlingStrategy":"validation","validationCode":"// Reject class syntax (which produces super) before interpreting\nfunction hasSuperKeyword(code: string): boolean {\n  const ast = parse(code, { ecmaVersion: 'latest', sourceType: 'module' });\n  let found = false;\n  walk(ast, (node) => {\n    if (node.type === 'Super') found = true;\n  });\n  return found;\n}\n\nif (hasSuperKeyword(sdkCode)) {\n  // reject — SDK code supports no classes","typeGuard":null,"tryCatchPattern":"import { UnsupportedNodeError } from '@n8n/workflow-sdk/ast-interpreter/errors';\n\ntry {\n  interpretSDKCode(sdkCode, sdkFunctions);\n} catch (e) {\n  if (e instanceof UnsupportedNodeError && e.message.includes('super keyword')) {\n    // instruct user to remove class/super usage\n  }\n  throw e;\n}","preventionTips":["Never use `class`, `extends`, or `super` in SDK builder code","SDK code is functional/declarative — use builder functions, not OOP"],"tags":["sdk-interpreter","super","class","defense-in-depth"],"backgroundTag":null,"analyzedSha":"5ac6606e81f67bb9534255570cd4e86fd8101eee","analyzedAt":"2026-08-12T05:26:35.080Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}