mobile-device-mcp 0.2.5 → 0.2.6

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.
package/dist/license.d.ts CHANGED
@@ -14,12 +14,14 @@ export declare const PRO_UPGRADE_MESSAGE: {
14
14
  isError: boolean;
15
15
  };
16
16
  /**
17
- * Validate the license key.
18
- *
19
- * Current implementation: presence check.
20
- * Future: integrate with Keygen.sh or xPay for real validation.
17
+ * Validate a license key offline.
21
18
  */
22
19
  export declare function validateLicense(): LicenseInfo;
20
+ /**
21
+ * Generate a license key (for internal use — run via: node -e "...")
22
+ * Usage: SALT must match the one compiled in the server.
23
+ */
24
+ export declare function generateLicenseKey(): string;
23
25
  /** Log the license tier on startup */
24
26
  export declare function logLicenseStatus(info: LicenseInfo): void;
25
27
  //# sourceMappingURL=license.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"license.d.ts","sourceRoot":"","sources":["../src/license.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,KAAK,CAAC;AAEzC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,sCAAsC;AACtC,eAAO,MAAM,UAAU,aAoBrB,CAAC;AAEH,8DAA8D;AAC9D,eAAO,MAAM,mBAAmB;;;;;;CAiB/B,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,WAAW,CAU7C;AAED,sCAAsC;AACtC,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAMxD"}
1
+ {"version":3,"file":"license.d.ts","sourceRoot":"","sources":["../src/license.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,KAAK,CAAC;AAEzC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,sCAAsC;AACtC,eAAO,MAAM,UAAU,aAoBrB,CAAC;AAEH,8DAA8D;AAC9D,eAAO,MAAM,mBAAmB;;;;;;CAiB/B,CAAC;AAsBF;;GAEG;AACH,wBAAgB,eAAe,IAAI,WAAW,CAqB7C;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAK3C;AAED,sCAAsC;AACtC,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAQxD"}
package/dist/license.js CHANGED
@@ -44,25 +44,61 @@ export const PRO_UPGRADE_MESSAGE = {
44
44
  isError: true,
45
45
  };
46
46
  /**
47
- * Validate the license key.
47
+ * License key format: MDMCP-XXXXX-XXXXX-XXXXX-CHECK
48
48
  *
49
- * Current implementation: presence check.
50
- * Future: integrate with Keygen.sh or xPay for real validation.
49
+ * The last segment (CHECK) is a hash of the first 3 segments + a secret salt.
50
+ * This runs offline — no network call needed. Keys are generated by the developer
51
+ * and can't be guessed because the salt is compiled into the binary.
52
+ */
53
+ const SALT = "m0b1l3-d3v1c3-mcp-2026-s4r4nsh";
54
+ function simpleHash(input) {
55
+ let hash = 0;
56
+ for (let i = 0; i < input.length; i++) {
57
+ const char = input.charCodeAt(i);
58
+ hash = ((hash << 5) - hash + char) | 0;
59
+ }
60
+ // Convert to positive 5-char alphanumeric
61
+ const positive = Math.abs(hash);
62
+ return positive.toString(36).toUpperCase().padStart(5, "0").slice(0, 5);
63
+ }
64
+ /**
65
+ * Validate a license key offline.
51
66
  */
52
67
  export function validateLicense() {
53
68
  const key = process.env.MOBILE_MCP_LICENSE_KEY;
54
69
  if (!key || key.trim() === "") {
55
70
  return { tier: "free", valid: true };
56
71
  }
57
- // TODO: Replace with Keygen.sh API validation when payment is set up
58
- // For now, any non-empty key is treated as valid pro license
59
- return { tier: "pro", valid: true };
72
+ // Check format: MDMCP-XXXXX-XXXXX-XXXXX-CHECK
73
+ const parts = key.trim().split("-");
74
+ if (parts.length !== 5 || parts[0] !== "MDMCP") {
75
+ return { tier: "free", valid: false };
76
+ }
77
+ const body = parts.slice(0, 4).join("-");
78
+ const expectedCheck = simpleHash(body + SALT);
79
+ if (parts[4] === expectedCheck) {
80
+ return { tier: "pro", valid: true };
81
+ }
82
+ return { tier: "free", valid: false };
83
+ }
84
+ /**
85
+ * Generate a license key (for internal use — run via: node -e "...")
86
+ * Usage: SALT must match the one compiled in the server.
87
+ */
88
+ export function generateLicenseKey() {
89
+ const seg = () => Math.random().toString(36).substring(2, 7).toUpperCase();
90
+ const body = `MDMCP-${seg()}-${seg()}-${seg()}`;
91
+ const check = simpleHash(body + SALT);
92
+ return `${body}-${check}`;
60
93
  }
61
94
  /** Log the license tier on startup */
62
95
  export function logLicenseStatus(info) {
63
96
  if (info.tier === "pro") {
64
97
  process.stderr.write(`${PREFIX} License: Pro (all 49 tools enabled)\n`);
65
98
  }
99
+ else if (!info.valid) {
100
+ process.stderr.write(`${PREFIX} License: Invalid key. Get a valid Pro key at https://rzp.io/rzp/r4ijQsJY\n`);
101
+ }
66
102
  else {
67
103
  process.stderr.write(`${PREFIX} License: Free (14 tools — upgrade to Pro for all 49)\n`);
68
104
  }
@@ -1 +1 @@
1
- {"version":3,"file":"license.js","sourceRoot":"","sources":["../src/license.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,6CAA6C;AAC7C,+DAA+D;AAE/D,MAAM,MAAM,GAAG,qBAAqB,CAAC;AASrC,sCAAsC;AACtC,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC;IAChC,kBAAkB;IAClB,cAAc;IACd,iBAAiB;IACjB,iBAAiB;IACjB,4BAA4B;IAC5B,iBAAiB;IACjB,iBAAiB;IACjB,wBAAwB;IACxB,KAAK;IACL,YAAY;IACZ,YAAY;IACZ,OAAO;IACP,WAAW;IACX,WAAW;IACX,2BAA2B;IAC3B,WAAW;IACX,iBAAiB;IACjB,WAAW;IACX,UAAU;CACX,CAAC,CAAC;AAEH,8DAA8D;AAC9D,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,OAAO,EAAE;QACP;YACE,IAAI,EAAE,MAAe;YACrB,IAAI,EAAE;gBACJ,+DAA+D;gBAC/D,EAAE;gBACF,yGAAyG;gBACzG,EAAE;gBACF,sCAAsC;gBACtC,EAAE;gBACF,wEAAwE;gBACxE,6CAA6C;aAC9C,CAAC,IAAI,CAAC,IAAI,CAAC;SACb;KACF;IACD,OAAO,EAAE,IAAI;CACd,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;IAE/C,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACvC,CAAC;IAED,qEAAqE;IACrE,6DAA6D;IAC7D,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACtC,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,gBAAgB,CAAC,IAAiB;IAChD,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,wCAAwC,CAAC,CAAC;IAC1E,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,yDAAyD,CAAC,CAAC;IAC3F,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"license.js","sourceRoot":"","sources":["../src/license.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,6CAA6C;AAC7C,+DAA+D;AAE/D,MAAM,MAAM,GAAG,qBAAqB,CAAC;AASrC,sCAAsC;AACtC,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC;IAChC,kBAAkB;IAClB,cAAc;IACd,iBAAiB;IACjB,iBAAiB;IACjB,4BAA4B;IAC5B,iBAAiB;IACjB,iBAAiB;IACjB,wBAAwB;IACxB,KAAK;IACL,YAAY;IACZ,YAAY;IACZ,OAAO;IACP,WAAW;IACX,WAAW;IACX,2BAA2B;IAC3B,WAAW;IACX,iBAAiB;IACjB,WAAW;IACX,UAAU;CACX,CAAC,CAAC;AAEH,8DAA8D;AAC9D,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,OAAO,EAAE;QACP;YACE,IAAI,EAAE,MAAe;YACrB,IAAI,EAAE;gBACJ,+DAA+D;gBAC/D,EAAE;gBACF,yGAAyG;gBACzG,EAAE;gBACF,sCAAsC;gBACtC,EAAE;gBACF,wEAAwE;gBACxE,6CAA6C;aAC9C,CAAC,IAAI,CAAC,IAAI,CAAC;SACb;KACF;IACD,OAAO,EAAE,IAAI;CACd,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,IAAI,GAAG,gCAAgC,CAAC;AAE9C,SAAS,UAAU,CAAC,KAAa;IAC/B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC;IACD,0CAA0C;IAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;IAE/C,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACvC,CAAC;IAED,8CAA8C;IAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;QAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IACxC,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,aAAa,GAAG,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAE9C,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,aAAa,EAAE,CAAC;QAC/B,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACtC,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC3E,MAAM,IAAI,GAAG,SAAS,GAAG,EAAE,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;IAChD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IACtC,OAAO,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC;AAC5B,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,gBAAgB,CAAC,IAAiB;IAChD,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,wCAAwC,CAAC,CAAC;IAC1E,CAAC;SAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,6EAA6E,CAAC,CAAC;IAC/G,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,yDAAyD,CAAC,CAAC;IAC3F,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mobile-device-mcp",
3
- "version": "0.2.5",
3
+ "version": "0.2.6",
4
4
  "description": "MCP server that gives AI coding assistants (Claude, Cursor, Windsurf) the ability to see and interact with Android mobile devices via ADB — AI-powered visual inspection, element finding, and device automation",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",