react-native-ai-devtools 1.3.4 → 1.3.5

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.
@@ -0,0 +1,188 @@
1
+ import { z } from "zod";
2
+ import { getInstallationId } from "../core/telemetry.js";
3
+ import { getDeviceFingerprint } from "../core/fingerprint.js";
4
+ import { resetLicense, getDashboardUrl, ensureLicense } from "../core/license.js";
5
+ import { existsSync, unlinkSync } from "fs";
6
+ import { homedir } from "os";
7
+ import { join } from "path";
8
+ import { API_BASE_URL } from "../core/config.js";
9
+ const API_URL = API_BASE_URL;
10
+ const API_KEY = "fb4b5d8f410ff8d0dfe3ade01adc0b2444479ac9380b3f256554dd9d7044f5d2";
11
+ const API_TIMEOUT_MS = 10_000;
12
+ const CONFIG_DIR = join(homedir(), ".rn-ai-debugger");
13
+ const TELEMETRY_FILE = join(CONFIG_DIR, "telemetry.json");
14
+ const LICENSE_FILE = join(CONFIG_DIR, "license.json");
15
+ export function getActivateLicenseConfig() {
16
+ return {
17
+ description: "Activate a Pro license using an activation token from your dashboard. " +
18
+ "Use this if you signed up on the website and need to link your account to this MCP installation.",
19
+ inputSchema: {
20
+ token: z.string().describe("Activation token from your dashboard"),
21
+ },
22
+ };
23
+ }
24
+ export async function handleActivateLicense({ token }) {
25
+ if (!API_URL) {
26
+ return {
27
+ content: [{ type: "text", text: "License activation is not configured yet." }],
28
+ isError: true,
29
+ };
30
+ }
31
+ try {
32
+ const controller = new AbortController();
33
+ const timeout = setTimeout(() => controller.abort(), API_TIMEOUT_MS);
34
+ const response = await fetch(`${API_URL}/api/accounts/activate`, {
35
+ method: "POST",
36
+ headers: {
37
+ "Content-Type": "application/json",
38
+ "X-API-Key": API_KEY,
39
+ },
40
+ body: JSON.stringify({
41
+ installationId: getInstallationId(),
42
+ fingerprint: getDeviceFingerprint(),
43
+ token,
44
+ }),
45
+ signal: controller.signal,
46
+ });
47
+ clearTimeout(timeout);
48
+ const data = await response.json();
49
+ if (response.ok) {
50
+ resetLicense();
51
+ await ensureLicense();
52
+ return {
53
+ content: [{
54
+ type: "text",
55
+ text: `License activated. You're now on the ${data.tier === "pro" ? "Pro" : data.tier} plan.`,
56
+ }],
57
+ };
58
+ }
59
+ if (data.error === "invalid_token") {
60
+ const dashboardUrl = getDashboardUrl();
61
+ return {
62
+ content: [{
63
+ type: "text",
64
+ text: `Invalid or expired token. Generate a new one from your dashboard${dashboardUrl ? ` at ${dashboardUrl}` : ""}.`,
65
+ }],
66
+ isError: true,
67
+ };
68
+ }
69
+ if (data.error === "fingerprint_mismatch") {
70
+ return {
71
+ content: [{ type: "text", text: "Activation failed. This token cannot be used on this device." }],
72
+ isError: true,
73
+ };
74
+ }
75
+ if (data.error === "installation_not_found") {
76
+ return {
77
+ content: [{ type: "text", text: "Installation not found. Please restart your MCP server and try again." }],
78
+ isError: true,
79
+ };
80
+ }
81
+ return {
82
+ content: [{ type: "text", text: `Activation failed: ${data.error || "unknown error"}` }],
83
+ isError: true,
84
+ };
85
+ }
86
+ catch {
87
+ return {
88
+ content: [{ type: "text", text: "Activation failed due to a network error. Please try again." }],
89
+ isError: true,
90
+ };
91
+ }
92
+ }
93
+ export function getDeleteAccountConfig() {
94
+ return {
95
+ description: "Permanently delete your account and reset this MCP installation. " +
96
+ "Removes your server-side data and local cache. You will get a new installation ID on next restart. " +
97
+ "Requires confirm: 'DELETE' to proceed.",
98
+ inputSchema: {
99
+ confirm: z
100
+ .string()
101
+ .optional()
102
+ .describe("Must be exactly 'DELETE' to confirm account deletion"),
103
+ },
104
+ };
105
+ }
106
+ export async function handleDeleteAccount({ confirm }) {
107
+ if (confirm !== "DELETE") {
108
+ return {
109
+ content: [{
110
+ type: "text",
111
+ text: "This will permanently delete your account and all associated data.\n" +
112
+ "Your installation ID, license, and any linked account data will be removed.\n" +
113
+ "Local cache files will be cleared. You will get a new installation ID on next restart.\n\n" +
114
+ "To confirm, call: delete_account({ confirm: 'DELETE' })",
115
+ }],
116
+ };
117
+ }
118
+ if (!API_URL) {
119
+ cleanupLocalFiles();
120
+ return {
121
+ content: [{
122
+ type: "text",
123
+ text: "Local data cleared. You will get a new installation ID on next MCP server restart.",
124
+ }],
125
+ };
126
+ }
127
+ try {
128
+ const controller = new AbortController();
129
+ const timeout = setTimeout(() => controller.abort(), API_TIMEOUT_MS);
130
+ const response = await fetch(`${API_URL}/api/accounts/delete`, {
131
+ method: "POST",
132
+ headers: {
133
+ "Content-Type": "application/json",
134
+ "X-API-Key": API_KEY,
135
+ },
136
+ body: JSON.stringify({
137
+ installationId: getInstallationId(),
138
+ fingerprint: getDeviceFingerprint(),
139
+ }),
140
+ signal: controller.signal,
141
+ });
142
+ clearTimeout(timeout);
143
+ cleanupLocalFiles();
144
+ if (response.ok || response.status === 404) {
145
+ return {
146
+ content: [{
147
+ type: "text",
148
+ text: "Account deleted. You will get a new installation ID on next MCP server restart.",
149
+ }],
150
+ };
151
+ }
152
+ const data = await response.json();
153
+ if (data.error === "fingerprint_mismatch") {
154
+ return {
155
+ content: [{
156
+ type: "text",
157
+ text: "Deletion failed: fingerprint mismatch. Local files have been cleared.",
158
+ }],
159
+ isError: true,
160
+ };
161
+ }
162
+ return {
163
+ content: [{ type: "text", text: "Account deletion may not have completed on the server. Local files have been cleared." }],
164
+ };
165
+ }
166
+ catch {
167
+ cleanupLocalFiles();
168
+ return {
169
+ content: [{
170
+ type: "text",
171
+ text: "Could not reach the server. Local data has been cleared. Server-side data may still exist.",
172
+ }],
173
+ };
174
+ }
175
+ }
176
+ function cleanupLocalFiles() {
177
+ try {
178
+ if (existsSync(LICENSE_FILE))
179
+ unlinkSync(LICENSE_FILE);
180
+ }
181
+ catch { /* best-effort */ }
182
+ try {
183
+ if (existsSync(TELEMETRY_FILE))
184
+ unlinkSync(TELEMETRY_FILE);
185
+ }
186
+ catch { /* best-effort */ }
187
+ }
188
+ //# sourceMappingURL=accountTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accountTools.js","sourceRoot":"","sources":["../../src/tools/accountTools.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-ai-devtools",
3
- "version": "1.3.4",
3
+ "version": "1.3.5",
4
4
  "description": "MCP server for AI-powered React Native debugging - logs, REPL, state inspection",
5
5
  "type": "module",
6
6
  "main": "build/index.js",