@yawlabs/npmjs-mcp 0.11.12 → 0.11.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +50 -4
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -31105,8 +31105,12 @@ async function request(baseUrl, path, options) {
31105
31105
  debug(`${method} ${url2} -> ${res.status} ${elapsed}ms`);
31106
31106
  return { ok: true, status: res.status };
31107
31107
  }
31108
- const data = await res.json();
31108
+ const text = await res.text();
31109
31109
  debug(`${method} ${url2} -> ${res.status} ${elapsed}ms`);
31110
+ if (text.length === 0) {
31111
+ return { ok: true, status: res.status };
31112
+ }
31113
+ const data = JSON.parse(text);
31110
31114
  return { ok: true, status: res.status, data };
31111
31115
  } catch (err) {
31112
31116
  const message = err instanceof Error ? err.message : String(err);
@@ -32153,6 +32157,15 @@ function classifyHookTarget(target) {
32153
32157
  return { type: "package", name: target };
32154
32158
  }
32155
32159
  function validateHookTarget(target) {
32160
+ if (typeof target !== "string" || target.length === 0) {
32161
+ return "Hook target is empty.";
32162
+ }
32163
+ if (target === "~") {
32164
+ return "Hook target '~' is missing the username (use '~your-username').";
32165
+ }
32166
+ if (target === "@") {
32167
+ return "Hook target '@' is missing the scope (use '@scope' or '@scope/pkg').";
32168
+ }
32156
32169
  const { type, name } = classifyHookTarget(target);
32157
32170
  if (type === "owner") return validateUsername(name);
32158
32171
  if (type === "scope") return validateScope(name);
@@ -32675,6 +32688,8 @@ var packageTools = [
32675
32688
  version: external_exports.string().optional().describe("Semver version or dist-tag (default: 'latest')")
32676
32689
  }),
32677
32690
  handler: async (input) => {
32691
+ const nameErr = validatePackageName(input.name);
32692
+ if (nameErr) return { ok: false, status: 400, error: nameErr };
32678
32693
  const ver = input.version ?? "latest";
32679
32694
  let typesPackage;
32680
32695
  if (input.name.startsWith("@")) {
@@ -33254,6 +33269,13 @@ var workflowTools = [
33254
33269
  });
33255
33270
  canPublishHeadless = false;
33256
33271
  }
33272
+ } else if (twoFactorAuth === "disabled" && readWriteTokens.length === 0) {
33273
+ checks.push({
33274
+ check: "Token capability",
33275
+ status: "fail",
33276
+ detail: `2FA is disabled but no read-write tokens found out of ${totalTokens} total. Need a token with publish permissions.`
33277
+ });
33278
+ canPublishHeadless = false;
33257
33279
  }
33258
33280
  if (isScoped && scope) {
33259
33281
  checks.push({
@@ -33425,7 +33447,19 @@ var writeTools = [
33425
33447
  for (const v of affected) {
33426
33448
  packument.versions[v].deprecated = input.message;
33427
33449
  }
33428
- const putRes = await registryPutAuth(`/${encPkg(input.name)}`, packument);
33450
+ if (!packument._rev) {
33451
+ return {
33452
+ ok: false,
33453
+ status: 500,
33454
+ error: `Packument for ${input.name} missing _rev -- cannot deprecate. Try again; this is usually transient.`
33455
+ };
33456
+ }
33457
+ delete packument._revisions;
33458
+ delete packument._attachments;
33459
+ const putRes = await registryPutAuth(
33460
+ `/${encPkg(input.name)}/-rev/${encodeURIComponent(packument._rev)}`,
33461
+ packument
33462
+ );
33429
33463
  if (!putRes.ok) return translateError(putRes, { pkg: input.name, op: "deprecate (write)" });
33430
33464
  return {
33431
33465
  ok: true,
@@ -33475,7 +33509,19 @@ var writeTools = [
33475
33509
  for (const v of affected) {
33476
33510
  packument.versions[v].deprecated = "";
33477
33511
  }
33478
- const putRes = await registryPutAuth(`/${encPkg(input.name)}`, packument);
33512
+ if (!packument._rev) {
33513
+ return {
33514
+ ok: false,
33515
+ status: 500,
33516
+ error: `Packument for ${input.name} missing _rev -- cannot undeprecate. Try again; this is usually transient.`
33517
+ };
33518
+ }
33519
+ delete packument._revisions;
33520
+ delete packument._attachments;
33521
+ const putRes = await registryPutAuth(
33522
+ `/${encPkg(input.name)}/-rev/${encodeURIComponent(packument._rev)}`,
33523
+ packument
33524
+ );
33479
33525
  if (!putRes.ok) return translateError(putRes, { pkg: input.name, op: "undeprecate (write)" });
33480
33526
  return {
33481
33527
  ok: true,
@@ -34247,7 +34293,7 @@ var writeTools = [
34247
34293
  ];
34248
34294
 
34249
34295
  // src/index.ts
34250
- var version2 = true ? "0.11.12" : (await null).createRequire(import.meta.url)("../package.json").version;
34296
+ var version2 = true ? "0.11.13" : (await null).createRequire(import.meta.url)("../package.json").version;
34251
34297
  var subcommand = process.argv[2];
34252
34298
  if (subcommand === "version" || subcommand === "--version" || subcommand === "-v" || subcommand === "-V") {
34253
34299
  console.log(version2);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yawlabs/npmjs-mcp",
3
- "version": "0.11.12",
3
+ "version": "0.11.13",
4
4
  "mcpName": "io.github.YawLabs/npmjs-mcp",
5
5
  "description": "npm registry MCP server — package intelligence, security audits, and dependency analysis for AI assistants",
6
6
  "license": "MIT",