{"record":{"id":"34eeb4a21f07abac","repo":"nodejs/node","slug":"third-argument-role-must-be-one-of-owner-adm","errorCode":null,"errorMessage":"Third argument `role` must be one of `owner`, `admin`, or `developer`, with `developer` being the default value if omitted.","messagePattern":"Third argument `role` must be one of `owner`, `admin`, or `developer`, with `developer` being the default value if omitted\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"deps/npm/lib/commands/org.js","lineNumber":63,"sourceCode":"          return this.ls(orgname, username, opts)\n        default:\n          throw this.usageError()\n      }\n    })\n  }\n\n  async set (org, user, role, opts) {\n    role = role || 'developer'\n    if (!org) {\n      throw new Error('First argument `orgname` is required.')\n    }\n\n    if (!user) {\n      throw new Error('Second argument `username` is required.')\n    }\n\n    if (!['owner', 'admin', 'developer'].find(x => x === role)) {\n      throw new Error(\n        'Third argument `role` must be one of `owner`, `admin`, or `developer`, with `developer` being the default value if omitted.'\n      )\n    }\n\n    const memDeets = await liborg.set(org, user, role, opts)\n    if (opts.json) {\n      output.standard(JSON.stringify(memDeets, null, 2))\n    } else if (opts.parseable) {\n      output.standard(['org', 'orgsize', 'user', 'role'].join('\\t'))\n      output.standard(\n        [memDeets.org.name, memDeets.org.size, memDeets.user, memDeets.role].join('\\t')\n      )\n    } else if (!this.npm.silent) {\n      output.standard(\n        `Added ${memDeets.user} as ${memDeets.role} to ${memDeets.org.name}. You now have ${\n            memDeets.org.size\n          } member${memDeets.org.size === 1 ? '' : 's'} in this org.`\n      )","sourceCodeStart":45,"sourceCodeEnd":81,"githubUrl":"https://github.com/nodejs/node/blob/1b2de5e052fc0fb95fd7fb6846dcec4ade598e9e/deps/npm/lib/commands/org.js#L45-L81","documentation":"Thrown by the `org set` method when the optional `role` argument is present but not one of the three allowed values: 'owner', 'admin', or 'developer'. If the role argument is omitted entirely it defaults to 'developer', so this error only fires when an explicit invalid role string is passed.","triggerScenarios":"Passing a role argument that is not in the set ['owner', 'admin', 'developer']. For example `npm org set my-org someuser admin` works, but `npm org set my-org someuser superadmin` throws. The check uses `['owner','admin','developer'].find(x => x === role)`.","commonSituations":"Misspelling the role name, using a role from a different system (e.g., 'member' or 'write'), or assuming case-insensitivity (the check is case-sensitive). Using 'dev' instead of 'developer'.","solutions":["Use one of the three valid roles: owner, admin, or developer (case-sensitive)","If you want the default, simply omit the role argument — it defaults to 'developer'","Double-check spelling: 'developer' not 'dev', 'admin' not 'administrator'"],"exampleFix":"// before\nnpm org set my-org someuser member\n\n// after\nnpm org set my-org someuser developer","handlingStrategy":"validation","validationCode":"const VALID_ROLES = ['owner', 'admin', 'developer']\nfunction isValidRole(role) {\n  return role === undefined || VALID_ROLES.includes(role)\n}\n// Before calling:\nif (!isValidRole(role)) {\n  throw new Error(`Role must be one of: ${VALID_ROLES.join(', ')} (or omit for default 'developer')`)\n}","typeGuard":"function isOrgRole(role) {\n  return typeof role === 'string' && ['owner', 'admin', 'developer'].includes(role)\n}","tryCatchPattern":"try {\n  await exec(['set', orgName, userName, role])\n} catch (e) {\n  if (e.message.includes('role')) {\n    console.error('Valid roles: owner, admin, developer (default: developer)')\n  }\n  throw e\n}","preventionTips":["Use only 'owner', 'admin', or 'developer' — these are case-sensitive","Omit the role argument entirely to default to 'developer'","Do not use abbreviations like 'dev' or 'adm' — spell the full word"],"tags":["npm","org","argument-validation","cli"],"backgroundTag":null,"analyzedSha":"1b2de5e052fc0fb95fd7fb6846dcec4ade598e9e","analyzedAt":"2026-08-13T00:53:24.642Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}