@extentos/mcp-server 0.0.1
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/README.md +56 -0
- package/dist/cli/login.d.ts +2 -0
- package/dist/cli/login.d.ts.map +1 -0
- package/dist/cli/login.js +71 -0
- package/dist/cli/login.js.map +1 -0
- package/dist/cli/logout.d.ts +2 -0
- package/dist/cli/logout.d.ts.map +1 -0
- package/dist/cli/logout.js +65 -0
- package/dist/cli/logout.js.map +1 -0
- package/dist/cli/privacy.d.ts +3 -0
- package/dist/cli/privacy.d.ts.map +1 -0
- package/dist/cli/privacy.js +39 -0
- package/dist/cli/privacy.js.map +1 -0
- package/dist/cli/status.d.ts +2 -0
- package/dist/cli/status.d.ts.map +1 -0
- package/dist/cli/status.js +9 -0
- package/dist/cli/status.js.map +1 -0
- package/dist/cli/update.d.ts +2 -0
- package/dist/cli/update.d.ts.map +1 -0
- package/dist/cli/update.js +8 -0
- package/dist/cli/update.js.map +1 -0
- package/dist/cli/whoami.d.ts +2 -0
- package/dist/cli/whoami.d.ts.map +1 -0
- package/dist/cli/whoami.js +8 -0
- package/dist/cli/whoami.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +69 -0
- package/dist/cli.js.map +1 -0
- package/dist/generated/schemas.d.ts +4 -0
- package/dist/generated/schemas.d.ts.map +1 -0
- package/dist/generated/schemas.js +2697 -0
- package/dist/generated/schemas.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +69 -0
- package/dist/index.js.map +1 -0
- package/dist/stub.d.ts +15 -0
- package/dist/stub.d.ts.map +1 -0
- package/dist/stub.js +20 -0
- package/dist/stub.js.map +1 -0
- package/dist/telemetry/client.d.ts +73 -0
- package/dist/telemetry/client.d.ts.map +1 -0
- package/dist/telemetry/client.js +207 -0
- package/dist/telemetry/client.js.map +1 -0
- package/dist/telemetry/consent.d.ts +19 -0
- package/dist/telemetry/consent.d.ts.map +1 -0
- package/dist/telemetry/consent.js +68 -0
- package/dist/telemetry/consent.js.map +1 -0
- package/dist/telemetry/index.d.ts +56 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +151 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/installRegistry.d.ts +18 -0
- package/dist/telemetry/installRegistry.d.ts.map +1 -0
- package/dist/telemetry/installRegistry.js +102 -0
- package/dist/telemetry/installRegistry.js.map +1 -0
- package/dist/tools/data/capabilities.d.ts +566 -0
- package/dist/tools/data/capabilities.d.ts.map +1 -0
- package/dist/tools/data/capabilities.js +243 -0
- package/dist/tools/data/capabilities.js.map +1 -0
- package/dist/tools/data/examplePatterns.d.ts +4 -0
- package/dist/tools/data/examplePatterns.d.ts.map +1 -0
- package/dist/tools/data/examplePatterns.js +546 -0
- package/dist/tools/data/examplePatterns.js.map +1 -0
- package/dist/tools/data/presetTriggers.d.ts +4 -0
- package/dist/tools/data/presetTriggers.d.ts.map +1 -0
- package/dist/tools/data/presetTriggers.js +47 -0
- package/dist/tools/data/presetTriggers.js.map +1 -0
- package/dist/tools/data/version.d.ts +31 -0
- package/dist/tools/data/version.d.ts.map +1 -0
- package/dist/tools/data/version.js +34 -0
- package/dist/tools/data/version.js.map +1 -0
- package/dist/tools/definitions.d.ts +13 -0
- package/dist/tools/definitions.d.ts.map +1 -0
- package/dist/tools/definitions.js +347 -0
- package/dist/tools/definitions.js.map +1 -0
- package/dist/tools/docs/index.d.ts +10 -0
- package/dist/tools/docs/index.d.ts.map +1 -0
- package/dist/tools/docs/index.js +220 -0
- package/dist/tools/docs/index.js.map +1 -0
- package/dist/tools/handlers/completeAuthLink.d.ts +3 -0
- package/dist/tools/handlers/completeAuthLink.d.ts.map +1 -0
- package/dist/tools/handlers/completeAuthLink.js +152 -0
- package/dist/tools/handlers/completeAuthLink.js.map +1 -0
- package/dist/tools/handlers/createSimulatorSession.d.ts +3 -0
- package/dist/tools/handlers/createSimulatorSession.d.ts.map +1 -0
- package/dist/tools/handlers/createSimulatorSession.js +231 -0
- package/dist/tools/handlers/createSimulatorSession.js.map +1 -0
- package/dist/tools/handlers/generateConnectionModule.d.ts +3 -0
- package/dist/tools/handlers/generateConnectionModule.d.ts.map +1 -0
- package/dist/tools/handlers/generateConnectionModule.js +222 -0
- package/dist/tools/handlers/generateConnectionModule.js.map +1 -0
- package/dist/tools/handlers/generateConsumer.d.ts +3 -0
- package/dist/tools/handlers/generateConsumer.d.ts.map +1 -0
- package/dist/tools/handlers/generateConsumer.js +257 -0
- package/dist/tools/handlers/generateConsumer.js.map +1 -0
- package/dist/tools/handlers/getCredentialGuide.d.ts +3 -0
- package/dist/tools/handlers/getCredentialGuide.d.ts.map +1 -0
- package/dist/tools/handlers/getCredentialGuide.js +296 -0
- package/dist/tools/handlers/getCredentialGuide.js.map +1 -0
- package/dist/tools/handlers/getEventLog.d.ts +3 -0
- package/dist/tools/handlers/getEventLog.d.ts.map +1 -0
- package/dist/tools/handlers/getEventLog.js +90 -0
- package/dist/tools/handlers/getEventLog.js.map +1 -0
- package/dist/tools/handlers/getExampleSpec.d.ts +3 -0
- package/dist/tools/handlers/getExampleSpec.d.ts.map +1 -0
- package/dist/tools/handlers/getExampleSpec.js +44 -0
- package/dist/tools/handlers/getExampleSpec.js.map +1 -0
- package/dist/tools/handlers/getPermissions.d.ts +3 -0
- package/dist/tools/handlers/getPermissions.d.ts.map +1 -0
- package/dist/tools/handlers/getPermissions.js +50 -0
- package/dist/tools/handlers/getPermissions.js.map +1 -0
- package/dist/tools/handlers/getPlatformInfo.d.ts +3 -0
- package/dist/tools/handlers/getPlatformInfo.d.ts.map +1 -0
- package/dist/tools/handlers/getPlatformInfo.js +78 -0
- package/dist/tools/handlers/getPlatformInfo.js.map +1 -0
- package/dist/tools/handlers/getProductionChecklist.d.ts +3 -0
- package/dist/tools/handlers/getProductionChecklist.d.ts.map +1 -0
- package/dist/tools/handlers/getProductionChecklist.js +238 -0
- package/dist/tools/handlers/getProductionChecklist.js.map +1 -0
- package/dist/tools/handlers/getSimulatorStatus.d.ts +3 -0
- package/dist/tools/handlers/getSimulatorStatus.d.ts.map +1 -0
- package/dist/tools/handlers/getSimulatorStatus.js +56 -0
- package/dist/tools/handlers/getSimulatorStatus.js.map +1 -0
- package/dist/tools/handlers/getVoiceCommandGuidance.d.ts +3 -0
- package/dist/tools/handlers/getVoiceCommandGuidance.d.ts.map +1 -0
- package/dist/tools/handlers/getVoiceCommandGuidance.js +200 -0
- package/dist/tools/handlers/getVoiceCommandGuidance.js.map +1 -0
- package/dist/tools/handlers/initSpec.d.ts +3 -0
- package/dist/tools/handlers/initSpec.d.ts.map +1 -0
- package/dist/tools/handlers/initSpec.js +234 -0
- package/dist/tools/handlers/initSpec.js.map +1 -0
- package/dist/tools/handlers/inspectIntegration.d.ts +3 -0
- package/dist/tools/handlers/inspectIntegration.d.ts.map +1 -0
- package/dist/tools/handlers/inspectIntegration.js +204 -0
- package/dist/tools/handlers/inspectIntegration.js.map +1 -0
- package/dist/tools/handlers/planIntegration.d.ts +3 -0
- package/dist/tools/handlers/planIntegration.d.ts.map +1 -0
- package/dist/tools/handlers/planIntegration.js +279 -0
- package/dist/tools/handlers/planIntegration.js.map +1 -0
- package/dist/tools/handlers/searchDocs.d.ts +3 -0
- package/dist/tools/handlers/searchDocs.d.ts.map +1 -0
- package/dist/tools/handlers/searchDocs.js +41 -0
- package/dist/tools/handlers/searchDocs.js.map +1 -0
- package/dist/tools/handlers/updateSpec.d.ts +3 -0
- package/dist/tools/handlers/updateSpec.d.ts.map +1 -0
- package/dist/tools/handlers/updateSpec.js +453 -0
- package/dist/tools/handlers/updateSpec.js.map +1 -0
- package/dist/tools/handlers/validateIntegration.d.ts +3 -0
- package/dist/tools/handlers/validateIntegration.d.ts.map +1 -0
- package/dist/tools/handlers/validateIntegration.js +546 -0
- package/dist/tools/handlers/validateIntegration.js.map +1 -0
- package/dist/tools/handlers/validateSpec.d.ts +3 -0
- package/dist/tools/handlers/validateSpec.d.ts.map +1 -0
- package/dist/tools/handlers/validateSpec.js +26 -0
- package/dist/tools/handlers/validateSpec.js.map +1 -0
- package/dist/tools/registry.d.ts +4 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +43 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/response.d.ts +12 -0
- package/dist/tools/response.d.ts.map +1 -0
- package/dist/tools/response.js +19 -0
- package/dist/tools/response.js.map +1 -0
- package/dist/tools/templates/androidBootstrap.d.ts +2 -0
- package/dist/tools/templates/androidBootstrap.d.ts.map +1 -0
- package/dist/tools/templates/androidBootstrap.js +40 -0
- package/dist/tools/templates/androidBootstrap.js.map +1 -0
- package/dist/tools/templates/callbackHandler.d.ts +11 -0
- package/dist/tools/templates/callbackHandler.d.ts.map +1 -0
- package/dist/tools/templates/callbackHandler.js +177 -0
- package/dist/tools/templates/callbackHandler.js.map +1 -0
- package/dist/tools/templates/iosBootstrap.d.ts +3 -0
- package/dist/tools/templates/iosBootstrap.d.ts.map +1 -0
- package/dist/tools/templates/iosBootstrap.js +50 -0
- package/dist/tools/templates/iosBootstrap.js.map +1 -0
- package/dist/tools/templates/streamConsumer.d.ts +8 -0
- package/dist/tools/templates/streamConsumer.d.ts.map +1 -0
- package/dist/tools/templates/streamConsumer.js +248 -0
- package/dist/tools/templates/streamConsumer.js.map +1 -0
- package/dist/tools/util/appPackage.d.ts +4 -0
- package/dist/tools/util/appPackage.d.ts.map +1 -0
- package/dist/tools/util/appPackage.js +16 -0
- package/dist/tools/util/appPackage.js.map +1 -0
- package/dist/tools/util/backendClient.d.ts +25 -0
- package/dist/tools/util/backendClient.d.ts.map +1 -0
- package/dist/tools/util/backendClient.js +144 -0
- package/dist/tools/util/backendClient.js.map +1 -0
- package/dist/tools/util/manifest.d.ts +9 -0
- package/dist/tools/util/manifest.d.ts.map +1 -0
- package/dist/tools/util/manifest.js +62 -0
- package/dist/tools/util/manifest.js.map +1 -0
- package/dist/tools/util/permissions.d.ts +32 -0
- package/dist/tools/util/permissions.d.ts.map +1 -0
- package/dist/tools/util/permissions.js +165 -0
- package/dist/tools/util/permissions.js.map +1 -0
- package/dist/tools/validation/validateSpec.d.ts +22 -0
- package/dist/tools/validation/validateSpec.d.ts.map +1 -0
- package/dist/tools/validation/validateSpec.js +370 -0
- package/dist/tools/validation/validateSpec.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
// createSimulatorSession — provision a browser simulator session via the backend.
|
|
2
|
+
// Spec: docs/mcp/MCP_TOOLS.md § createSimulatorSession
|
|
3
|
+
// docs/mcp/SIMULATOR_PROTOCOL.md § Session Lifecycle
|
|
4
|
+
import { writeFileSync, existsSync, readFileSync, appendFileSync } from "node:fs";
|
|
5
|
+
import { resolve, join } from "node:path";
|
|
6
|
+
import { okResponse, errorResponse } from "../response.js";
|
|
7
|
+
import { backendFetch } from "../util/backendClient.js";
|
|
8
|
+
import { emitSessionCreated, emitLoginInitiated } from "../../telemetry/index.js";
|
|
9
|
+
export async function handleCreateSimulatorSession(raw) {
|
|
10
|
+
const parsed = parseArgs(raw);
|
|
11
|
+
if ("error" in parsed)
|
|
12
|
+
return parsed.error;
|
|
13
|
+
const res = await backendFetch("/api/sessions", {
|
|
14
|
+
method: "POST",
|
|
15
|
+
body: {
|
|
16
|
+
glasses: parsed.glasses,
|
|
17
|
+
spec: parsed.spec,
|
|
18
|
+
platform: parsed.platform,
|
|
19
|
+
recordBinary: parsed.recordBinary,
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
const body = res.data;
|
|
23
|
+
// HTTP 402 (meter exhausted) returns a structured auth_required body. res.ok
|
|
24
|
+
// is false on 402 but res.data is populated — handle before the generic
|
|
25
|
+
// !res.ok branch so we don't mask the auth signal as "backend_unreachable".
|
|
26
|
+
if (body && body.status === "auth_required" && body.error) {
|
|
27
|
+
emitLoginInitiated("meter_exhausted");
|
|
28
|
+
return errorResponse({
|
|
29
|
+
code: body.error.code,
|
|
30
|
+
message: body.error.message,
|
|
31
|
+
fixHint: body.error.fixHint ?? "Sign in to continue.",
|
|
32
|
+
retryable: body.error.retryable ?? true,
|
|
33
|
+
}, {
|
|
34
|
+
status: "auth_required",
|
|
35
|
+
userCode: body.userCode,
|
|
36
|
+
verificationUrl: body.verificationUrl,
|
|
37
|
+
deviceCode: body.deviceCode,
|
|
38
|
+
expiresInSeconds: body.expiresInSeconds,
|
|
39
|
+
pollIntervalSeconds: body.pollIntervalSeconds,
|
|
40
|
+
tier: body.tier,
|
|
41
|
+
meterRemaining: body.meterRemaining,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
if (!res.ok || !body) {
|
|
45
|
+
return errorResponse({
|
|
46
|
+
code: "backend_unreachable",
|
|
47
|
+
message: `Backend /api/sessions failed: ${res.errorText ?? `HTTP ${res.status}`}.`,
|
|
48
|
+
fixHint: "Ensure the Extentos backend is running (EXTENTOS_BACKEND_URL env var, or api.extentos.com). For local dev: `cd backend && npm run dev`.",
|
|
49
|
+
retryable: true,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
if (!body.sessionId || !body.transportEndpoint || !body.expiresAt) {
|
|
53
|
+
return errorResponse({
|
|
54
|
+
code: "backend_invalid_response",
|
|
55
|
+
message: "Backend create-session response is missing required fields.",
|
|
56
|
+
fixHint: "Check backend version compatibility.",
|
|
57
|
+
retryable: false,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
const sessionValues = {
|
|
61
|
+
url: body.transportEndpoint,
|
|
62
|
+
id: body.sessionId,
|
|
63
|
+
expiresAt: body.expiresAt,
|
|
64
|
+
};
|
|
65
|
+
const warnings = [];
|
|
66
|
+
emitSessionCreated({
|
|
67
|
+
glasses: parsed.glasses,
|
|
68
|
+
recordingEnabled: body.recording?.enabled ?? true,
|
|
69
|
+
platform: parsed.platform,
|
|
70
|
+
tier: body.tier ?? null,
|
|
71
|
+
});
|
|
72
|
+
const baseResponse = {
|
|
73
|
+
status: "active",
|
|
74
|
+
sessionId: body.sessionId,
|
|
75
|
+
sessionState: body.sessionState ?? "waiting",
|
|
76
|
+
sessionUrl: body.sessionUrl,
|
|
77
|
+
transportEndpoint: body.transportEndpoint,
|
|
78
|
+
expiresAt: body.expiresAt,
|
|
79
|
+
protocolVersion: body.protocolVersion ?? 1,
|
|
80
|
+
tier: body.tier ?? "anonymous",
|
|
81
|
+
meterRemaining: body.meterRemaining ?? null,
|
|
82
|
+
meterWarning: body.meterWarning ?? false,
|
|
83
|
+
autoOpenAttempted: false,
|
|
84
|
+
autoOpenPlatform: process.platform,
|
|
85
|
+
capabilities: body.capabilities,
|
|
86
|
+
recording: body.recording ?? { enabled: true, recordBinary: parsed.recordBinary },
|
|
87
|
+
developerInstructions: instructionsFor(parsed.platform),
|
|
88
|
+
warnings,
|
|
89
|
+
summary: `Session ${body.sessionId} ready. Rebuild ${parsed.platform} project to bake URL into the binary.`,
|
|
90
|
+
};
|
|
91
|
+
if (parsed.platform === "ios") {
|
|
92
|
+
const filePlan = writeSessionFile("ios", parsed.projectPath, sessionValues);
|
|
93
|
+
const gitignoreResult = ensureGitignore(parsed.projectPath, filePlan.relativePath);
|
|
94
|
+
return okResponse({
|
|
95
|
+
...baseResponse,
|
|
96
|
+
sessionPropertiesFile: {
|
|
97
|
+
path: filePlan.relativePath,
|
|
98
|
+
action: filePlan.action,
|
|
99
|
+
content: filePlan.content,
|
|
100
|
+
},
|
|
101
|
+
gitignoreGuarantee: gitignoreResult.summary,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
return okResponse({
|
|
105
|
+
...baseResponse,
|
|
106
|
+
androidBuildConfigPatch: buildAndroidPatch(sessionValues.url),
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
function buildAndroidPatch(url) {
|
|
110
|
+
const escapedUrl = url.replace(/"/g, '\\"');
|
|
111
|
+
return {
|
|
112
|
+
target: "app/build.gradle.kts",
|
|
113
|
+
field: {
|
|
114
|
+
type: "String",
|
|
115
|
+
name: "EXTENTOS_SESSION_URL",
|
|
116
|
+
value: `"${escapedUrl}"`,
|
|
117
|
+
location: "android.defaultConfig",
|
|
118
|
+
snippet: `buildConfigField("String", "EXTENTOS_SESSION_URL", "\\"${escapedUrl}\\"")`,
|
|
119
|
+
},
|
|
120
|
+
prerequisite: {
|
|
121
|
+
location: "android.buildFeatures",
|
|
122
|
+
snippet: "buildConfig = true",
|
|
123
|
+
purpose: "Required for buildConfigField() to generate the field into BuildConfig. Harmless no-op if already enabled.",
|
|
124
|
+
},
|
|
125
|
+
purpose: "The library discovers BuildConfig.EXTENTOS_SESSION_URL via reflection at startup and routes to this browser simulator session. Re-run createSimulatorSession to rotate; nothing persisted to disk.",
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
function parseArgs(raw) {
|
|
129
|
+
if (!raw || typeof raw !== "object") {
|
|
130
|
+
return {
|
|
131
|
+
error: errorResponse({
|
|
132
|
+
code: "invalid_arguments",
|
|
133
|
+
message: "createSimulatorSession requires { glasses, spec }.",
|
|
134
|
+
fixHint: "Pass { glasses: 'meta_rayban', spec: <AppSpec>, platform?: 'android'|'ios' }.",
|
|
135
|
+
retryable: false,
|
|
136
|
+
}),
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
const o = raw;
|
|
140
|
+
if (o.glasses !== "meta_rayban") {
|
|
141
|
+
return {
|
|
142
|
+
error: errorResponse({
|
|
143
|
+
code: "invalid_arguments",
|
|
144
|
+
message: "glasses must be 'meta_rayban'.",
|
|
145
|
+
fixHint: "Only 'meta_rayban' is supported in MVP.",
|
|
146
|
+
retryable: false,
|
|
147
|
+
}),
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
if (!o.spec || typeof o.spec !== "object") {
|
|
151
|
+
return {
|
|
152
|
+
error: errorResponse({
|
|
153
|
+
code: "invalid_arguments",
|
|
154
|
+
message: "spec (object) is required.",
|
|
155
|
+
fixHint: "Pass the current AppSpec object.",
|
|
156
|
+
retryable: false,
|
|
157
|
+
}),
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
const platform = o.platform === "ios" ? "ios" : "android";
|
|
161
|
+
const projectPath = typeof o.projectPath === "string" && o.projectPath ? o.projectPath : process.cwd();
|
|
162
|
+
const recordBinary = o.recordBinary === true;
|
|
163
|
+
const autoOpenBrowser = o.autoOpenBrowser !== false;
|
|
164
|
+
return {
|
|
165
|
+
glasses: "meta_rayban",
|
|
166
|
+
spec: o.spec,
|
|
167
|
+
platform,
|
|
168
|
+
projectPath: resolve(projectPath),
|
|
169
|
+
recordBinary,
|
|
170
|
+
autoOpenBrowser,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
function writeSessionFile(platform, projectPath, values) {
|
|
174
|
+
// Android no longer writes a session file — the URL is delivered as a
|
|
175
|
+
// buildConfigField patch that the agent pastes into app/build.gradle.kts.
|
|
176
|
+
// iOS still uses a plist because the SPM build-phase script reads it.
|
|
177
|
+
if (platform !== "ios") {
|
|
178
|
+
throw new Error(`writeSessionFile: unsupported platform ${platform}`);
|
|
179
|
+
}
|
|
180
|
+
const rel = "extentos.session.plist";
|
|
181
|
+
const abs = join(projectPath, rel);
|
|
182
|
+
const content = `<?xml version="1.0" encoding="UTF-8"?>\n` +
|
|
183
|
+
`<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\n` +
|
|
184
|
+
`<plist version="1.0">\n<dict>\n` +
|
|
185
|
+
` <key>EXTENTOSSessionURL</key>\n <string>${values.url}</string>\n` +
|
|
186
|
+
` <key>EXTENTOSSessionID</key>\n <string>${values.id}</string>\n` +
|
|
187
|
+
` <key>EXTENTOSSessionExpiresAt</key>\n <string>${values.expiresAt}</string>\n` +
|
|
188
|
+
`</dict>\n</plist>\n`;
|
|
189
|
+
try {
|
|
190
|
+
writeFileSync(abs, content);
|
|
191
|
+
}
|
|
192
|
+
catch {
|
|
193
|
+
// best-effort — the agent still gets the planned content in the response
|
|
194
|
+
}
|
|
195
|
+
return { relativePath: rel, absolutePath: abs, content, action: "write" };
|
|
196
|
+
}
|
|
197
|
+
function ensureGitignore(projectPath, relativePath) {
|
|
198
|
+
const gitignorePath = join(projectPath, ".gitignore");
|
|
199
|
+
if (!existsSync(gitignorePath)) {
|
|
200
|
+
try {
|
|
201
|
+
writeFileSync(gitignorePath, `${relativePath}\n`);
|
|
202
|
+
return { summary: `${relativePath} added to newly-created .gitignore.` };
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
return { summary: `.gitignore absent and could not be created. Manually add ${relativePath}.` };
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
try {
|
|
209
|
+
const contents = readFileSync(gitignorePath, "utf-8");
|
|
210
|
+
if (contents.split(/\r?\n/).some((l) => l.trim() === relativePath)) {
|
|
211
|
+
return { summary: `${relativePath} already present in .gitignore.` };
|
|
212
|
+
}
|
|
213
|
+
appendFileSync(gitignorePath, contents.endsWith("\n") ? `${relativePath}\n` : `\n${relativePath}\n`);
|
|
214
|
+
return { summary: `${relativePath} appended to .gitignore.` };
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
return { summary: `Could not update .gitignore. Manually add ${relativePath}.` };
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
function instructionsFor(platform) {
|
|
221
|
+
if (platform === "ios") {
|
|
222
|
+
return ("1. The session URL has been written to extentos.session.plist. " +
|
|
223
|
+
"2. Rebuild the Xcode project — the SPM build-phase script bakes the URL into ExtentosSession.url. " +
|
|
224
|
+
"3. Run the app — it auto-connects via BrowserSimTransport. Open sessionUrl in a browser to drive the hardware surrogate.");
|
|
225
|
+
}
|
|
226
|
+
return ("1. Open app/build.gradle.kts and paste androidBuildConfigPatch.field.snippet into the android.defaultConfig { ... } block. If android.buildFeatures.buildConfig isn't already true, add buildFeatures { buildConfig = true } to the android block (see prerequisite). " +
|
|
227
|
+
"2. Rebuild the app — Gradle emits BuildConfig.EXTENTOS_SESSION_URL; the library picks it up by reflection at startup. " +
|
|
228
|
+
"3. Run the app — it auto-connects via BrowserSimTransport. Open sessionUrl in a browser to drive the hardware surrogate. " +
|
|
229
|
+
"Re-run createSimulatorSession to rotate the URL; replace the buildConfigField line with the new snippet and rebuild.");
|
|
230
|
+
}
|
|
231
|
+
//# sourceMappingURL=createSimulatorSession.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createSimulatorSession.js","sourceRoot":"","sources":["../../../src/tools/handlers/createSimulatorSession.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateConnectionModule.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/generateConnectionModule.ts"],"names":[],"mappings":"AAQA,OAAO,EAA6B,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AA2B5E,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CAcvE"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
// generateConnectionModule — project scaffold tool.
|
|
2
|
+
// Spec: docs/mcp/MCP_TOOLS.md § generateConnectionModule
|
|
3
|
+
// Output shapes: Android (Gradle+Kotlin) vs iOS (SPM+Swift) differ per that spec.
|
|
4
|
+
import { androidSourcePath, iosModuleName } from "../util/appPackage.js";
|
|
5
|
+
import { buildEmptyManifest, EMPTY_SPEC_CONTENT } from "../util/manifest.js";
|
|
6
|
+
import { renderAndroidBootstrap } from "../templates/androidBootstrap.js";
|
|
7
|
+
import { renderIosBootstrap, renderIosAppPatchHint } from "../templates/iosBootstrap.js";
|
|
8
|
+
import { okResponse, errorResponse } from "../response.js";
|
|
9
|
+
const DEFAULT_LIBRARY_VERSION = "1.0.0";
|
|
10
|
+
const PLACEMENT_OPTIONS = [
|
|
11
|
+
{ id: "dedicated_route", label: "Dedicated route (e.g. 'connection' or 'glasses')" },
|
|
12
|
+
{ id: "settings_subscreen", label: "Subscreen inside Settings" },
|
|
13
|
+
{ id: "bottom_tab", label: "Bottom-nav tab" },
|
|
14
|
+
{ id: "modal_sheet", label: "Modal bottom sheet from a Settings row" },
|
|
15
|
+
{ id: "headless", label: "No UI (headless) — glasses run in background only" },
|
|
16
|
+
];
|
|
17
|
+
const PLACEMENT_SNIPPET_LINK = {
|
|
18
|
+
uri: "extentos://docs/connection_ui#placement_snippets",
|
|
19
|
+
mimeType: "text/markdown",
|
|
20
|
+
description: "Full Compose / SwiftUI snippets for each placement option, fetched on demand once the developer picks one. Use searchDocs(topic: \"connection_ui\") to load.",
|
|
21
|
+
};
|
|
22
|
+
export function handleGenerateConnectionModule(raw) {
|
|
23
|
+
const parsed = parseArgs(raw);
|
|
24
|
+
if ("error" in parsed)
|
|
25
|
+
return parsed.error;
|
|
26
|
+
const args = parsed.args;
|
|
27
|
+
const libraryVersion = args.libraryVersion ?? DEFAULT_LIBRARY_VERSION;
|
|
28
|
+
const concise = args.responseFormat === "concise";
|
|
29
|
+
const payload = args.platform === "android"
|
|
30
|
+
? buildAndroid(args.appPackage, libraryVersion, concise)
|
|
31
|
+
: buildIos(args.appPackage, libraryVersion, concise);
|
|
32
|
+
return okResponse(payload);
|
|
33
|
+
}
|
|
34
|
+
function parseArgs(raw) {
|
|
35
|
+
if (!raw || typeof raw !== "object") {
|
|
36
|
+
return {
|
|
37
|
+
error: errorResponse({
|
|
38
|
+
code: "invalid_arguments",
|
|
39
|
+
message: "generateConnectionModule requires an object argument.",
|
|
40
|
+
fixHint: "Pass { platform, glasses, appPackage, ... }.",
|
|
41
|
+
retryable: false,
|
|
42
|
+
}),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
const obj = raw;
|
|
46
|
+
const platform = obj.platform;
|
|
47
|
+
if (platform !== "android" && platform !== "ios") {
|
|
48
|
+
return {
|
|
49
|
+
error: errorResponse({
|
|
50
|
+
code: "invalid_arguments",
|
|
51
|
+
message: `platform must be "android" or "ios" (got ${JSON.stringify(platform)}).`,
|
|
52
|
+
fixHint: "Pass platform: \"android\" or \"ios\".",
|
|
53
|
+
retryable: false,
|
|
54
|
+
}),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
if (obj.glasses !== "meta_rayban") {
|
|
58
|
+
return {
|
|
59
|
+
error: errorResponse({
|
|
60
|
+
code: "invalid_arguments",
|
|
61
|
+
message: `glasses must be "meta_rayban" for MVP (got ${JSON.stringify(obj.glasses)}).`,
|
|
62
|
+
fixHint: "Pass glasses: \"meta_rayban\".",
|
|
63
|
+
retryable: false,
|
|
64
|
+
}),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
if (typeof obj.appPackage !== "string" || obj.appPackage.length === 0) {
|
|
68
|
+
return {
|
|
69
|
+
error: errorResponse({
|
|
70
|
+
code: "invalid_arguments",
|
|
71
|
+
message: "appPackage is required and must be a non-empty string.",
|
|
72
|
+
fixHint: "Pass the developer's package/bundle id, e.g. com.example.myapp.",
|
|
73
|
+
retryable: false,
|
|
74
|
+
}),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
const args = {
|
|
78
|
+
platform,
|
|
79
|
+
glasses: "meta_rayban",
|
|
80
|
+
appPackage: obj.appPackage,
|
|
81
|
+
libraryVersion: typeof obj.libraryVersion === "string" ? obj.libraryVersion : undefined,
|
|
82
|
+
responseFormat: obj.responseFormat === "concise" || obj.responseFormat === "detailed"
|
|
83
|
+
? obj.responseFormat
|
|
84
|
+
: undefined,
|
|
85
|
+
};
|
|
86
|
+
return { args };
|
|
87
|
+
}
|
|
88
|
+
function buildAndroid(appPackage, libraryVersion, concise) {
|
|
89
|
+
const sourcePath = androidSourcePath(appPackage);
|
|
90
|
+
const specPath = "app/src/main/assets/extentos.spec.json";
|
|
91
|
+
const bootstrapPath = `app/src/main/java/${sourcePath}/extentos/ExtentosBootstrap.kt`;
|
|
92
|
+
const manifest = buildEmptyManifest({ platform: "android", appPackage, libraryVersion, specPath }, new Date().toISOString());
|
|
93
|
+
const files = [
|
|
94
|
+
{ path: bootstrapPath, action: "create", content: renderAndroidBootstrap(appPackage) },
|
|
95
|
+
];
|
|
96
|
+
const payload = {
|
|
97
|
+
files,
|
|
98
|
+
spec: { path: specPath, content: EMPTY_SPEC_CONTENT },
|
|
99
|
+
manifest: { path: "extentos.manifest.json", content: manifest },
|
|
100
|
+
dependencies: [
|
|
101
|
+
{ notation: `com.extentos:glasses:${libraryVersion}`, configuration: "implementation" },
|
|
102
|
+
{ notation: `com.extentos:glasses-ui:${libraryVersion}`, configuration: "implementation" },
|
|
103
|
+
{ notation: `com.extentos:glasses-debug:${libraryVersion}`, configuration: "debugImplementation" },
|
|
104
|
+
],
|
|
105
|
+
repositories: [
|
|
106
|
+
{
|
|
107
|
+
notation: "mavenLocal()",
|
|
108
|
+
appliedIn: "settings.gradle.kts",
|
|
109
|
+
purpose: "Pre-1.0 the library is published to the developer's local Maven cache (~/.m2) via ./gradlew publishToMavenLocal in the vibe-hardware repo. Add inside dependencyResolutionManagement.repositories.",
|
|
110
|
+
},
|
|
111
|
+
],
|
|
112
|
+
buildConfigFields: [
|
|
113
|
+
{
|
|
114
|
+
type: "String",
|
|
115
|
+
name: "EXTENTOS_SESSION_URL",
|
|
116
|
+
placeholder: `"<paste-session-url-from-createSimulatorSession>"`,
|
|
117
|
+
appliedIn: "app/build.gradle.kts",
|
|
118
|
+
purpose: "Injected into the app's BuildConfig; the library discovers it via reflection at startup and routes to the browser simulator. Leave null (or omit the field) for real-device / local-sim runs.",
|
|
119
|
+
requires: "android.buildFeatures.buildConfig = true",
|
|
120
|
+
},
|
|
121
|
+
],
|
|
122
|
+
permissions: [
|
|
123
|
+
"android.permission.BLUETOOTH_CONNECT",
|
|
124
|
+
"android.permission.BLUETOOTH_SCAN",
|
|
125
|
+
"android.permission.INTERNET",
|
|
126
|
+
],
|
|
127
|
+
suggestedRendering: `composable("connection") { ExtentosConnectionPage(glasses) }`,
|
|
128
|
+
placementGuidance: {
|
|
129
|
+
instruction: "Before writing navigation code, ask the developer where ExtentosConnectionPage should live. Do not guess.",
|
|
130
|
+
question: "Where should the glasses connection page live in your app?",
|
|
131
|
+
optionsSummary: PLACEMENT_OPTIONS,
|
|
132
|
+
snippetsResourceLink: PLACEMENT_SNIPPET_LINK,
|
|
133
|
+
},
|
|
134
|
+
summary: `Scaffolded Extentos ${libraryVersion} for Android app ${appPackage}. Wrote 1 generated file, 1 empty spec, and 1 manifest. 3 Gradle dependencies, 3 permissions, 1 repository (mavenLocal), and 1 BuildConfig field to wire.`,
|
|
135
|
+
};
|
|
136
|
+
if (!concise) {
|
|
137
|
+
payload.wireInstructions =
|
|
138
|
+
"1. Add mavenLocal() to settings.gradle.kts inside dependencyResolutionManagement.repositories (pre-1.0 the library resolves from the dev's local Maven cache)\n" +
|
|
139
|
+
"2. Add dependencies to app/build.gradle.kts\n" +
|
|
140
|
+
"3. In app/build.gradle.kts android { ... }: enable buildFeatures { buildConfig = true } and add buildConfigField(\"String\", \"EXTENTOS_SESSION_URL\", \"\\\"<paste-session-url-from-createSimulatorSession>\\\"\") inside defaultConfig (omit entirely for real-device / local-sim runs)\n" +
|
|
141
|
+
"4. Add permissions to AndroidManifest.xml\n" +
|
|
142
|
+
"5. Write ExtentosBootstrap.kt\n" +
|
|
143
|
+
`6. Set android:name=\"${appPackage}.extentos.ExtentosBootstrap\" on <application> in AndroidManifest.xml\n` +
|
|
144
|
+
"7. Add ExtentosConnectionPage(glasses) to your navigation graph (typical) or skip it for headless apps\n" +
|
|
145
|
+
"8. Build and verify";
|
|
146
|
+
payload.notes =
|
|
147
|
+
"GlassesUI is linked unconditionally; skip ExtentosConnectionPage in your navigation graph for a headless app. GlassesDebug is debug-only. Populate the spec next via initSpec. Callback handler registration is emitted later by generateConsumer(kind: \"callback\"). The library auto-discovers BuildConfig.EXTENTOS_SESSION_URL by reflecting on the consumer's BuildConfig class — no bootstrap wiring required.";
|
|
148
|
+
}
|
|
149
|
+
return payload;
|
|
150
|
+
}
|
|
151
|
+
function buildIos(appPackage, libraryVersion, concise) {
|
|
152
|
+
const moduleName = iosModuleName(appPackage);
|
|
153
|
+
const specPath = `Sources/${moduleName}/Resources/extentos.spec.json`;
|
|
154
|
+
const bootstrapPath = `Sources/${moduleName}/Extentos/ExtentosBootstrap.swift`;
|
|
155
|
+
const appPatchPath = `Sources/${moduleName}/${moduleName}App.swift`;
|
|
156
|
+
const manifest = buildEmptyManifest({ platform: "ios", appPackage, libraryVersion, specPath }, new Date().toISOString());
|
|
157
|
+
const files = [
|
|
158
|
+
{ path: bootstrapPath, action: "create", content: renderIosBootstrap(appPackage) },
|
|
159
|
+
{ path: appPatchPath, action: "patch", content: renderIosAppPatchHint(appPackage) },
|
|
160
|
+
];
|
|
161
|
+
const payload = {
|
|
162
|
+
files,
|
|
163
|
+
spec: { path: specPath, content: EMPTY_SPEC_CONTENT },
|
|
164
|
+
manifest: { path: "extentos.manifest.json", content: manifest },
|
|
165
|
+
dependencies: [
|
|
166
|
+
{
|
|
167
|
+
package: "https://github.com/extentos/swift-glasses",
|
|
168
|
+
version: libraryVersion,
|
|
169
|
+
products: ["GlassesCore", "GlassesUI", "GlassesDebug"],
|
|
170
|
+
},
|
|
171
|
+
],
|
|
172
|
+
spmBuildPhase: {
|
|
173
|
+
name: "Extentos Session Inject",
|
|
174
|
+
stage: "pre-build",
|
|
175
|
+
script: "if [ \"$CONFIGURATION\" = \"Debug\" ] && [ -f \"$SRCROOT/extentos.session.plist\" ]; then cp \"$SRCROOT/extentos.session.plist\" \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/extentos.session.plist\"; fi",
|
|
176
|
+
purpose: "Copies extentos.session.plist into the app bundle on debug builds so ExtentosConfig can read the session URL at launch. Release builds omit the file entirely.",
|
|
177
|
+
},
|
|
178
|
+
gitignoreAdditions: ["extentos.session.plist"],
|
|
179
|
+
permissions: [],
|
|
180
|
+
infoPlistAdditions: {
|
|
181
|
+
MWDAT: {
|
|
182
|
+
AppLinkURLScheme: "REPLACE_ME://",
|
|
183
|
+
MetaAppID: "REPLACE_ME",
|
|
184
|
+
ClientToken: "REPLACE_ME",
|
|
185
|
+
TeamID: "REPLACE_ME",
|
|
186
|
+
},
|
|
187
|
+
CFBundleURLTypes: [
|
|
188
|
+
{ CFBundleURLName: appPackage, CFBundleURLSchemes: ["REPLACE_ME"] },
|
|
189
|
+
],
|
|
190
|
+
LSApplicationQueriesSchemes: ["fb-viewapp"],
|
|
191
|
+
UISupportedExternalAccessoryProtocols: ["com.meta.ar.wearable"],
|
|
192
|
+
UIBackgroundModes: ["bluetooth-central", "bluetooth-peripheral", "external-accessory"],
|
|
193
|
+
NSCameraUsageDescription: "Used to capture photos and video from your glasses.",
|
|
194
|
+
NSMicrophoneUsageDescription: "Used to capture audio from your glasses for voice commands.",
|
|
195
|
+
NSSpeechRecognitionUsageDescription: "Used to transcribe voice commands from your glasses.",
|
|
196
|
+
NSBluetoothAlwaysUsageDescription: "Required to connect to your glasses over Bluetooth.",
|
|
197
|
+
},
|
|
198
|
+
suggestedRendering: "NavigationStack { ExtentosConnectionPage() }",
|
|
199
|
+
placementGuidance: {
|
|
200
|
+
instruction: "Before writing navigation code, ask the developer where ExtentosConnectionPage should live. Do not guess.",
|
|
201
|
+
question: "Where should the glasses connection page live in your app?",
|
|
202
|
+
optionsSummary: PLACEMENT_OPTIONS,
|
|
203
|
+
snippetsResourceLink: PLACEMENT_SNIPPET_LINK,
|
|
204
|
+
},
|
|
205
|
+
summary: `Scaffolded Extentos ${libraryVersion} for iOS bundle ${appPackage}. Wrote 1 generated file, 1 app-entry patch hint, 1 empty spec, and 1 manifest. 1 SPM dependency, Info.plist additions listed, and 1 Xcode build phase to add.`,
|
|
206
|
+
};
|
|
207
|
+
if (!concise) {
|
|
208
|
+
payload.wireInstructions =
|
|
209
|
+
`1. Add SPM package https://github.com/extentos/swift-glasses @ ${libraryVersion} with products GlassesCore, GlassesUI, GlassesDebug (GlassesDebug on debug config only)\n` +
|
|
210
|
+
"2. Add Info.plist entries listed in infoPlistAdditions (replace REPLACE_ME placeholders with values from your Meta Developer Center project)\n" +
|
|
211
|
+
"3. Append extentos.session.plist to .gitignore\n" +
|
|
212
|
+
"4. Write ExtentosBootstrap.swift\n" +
|
|
213
|
+
`5. Patch ${moduleName}App.swift: add .onOpenURL and .onChange(of: scenePhase) to the root view (see files[] patch content)\n` +
|
|
214
|
+
"6. Add the spmBuildPhase pre-build script in the Xcode target's Build Phases\n" +
|
|
215
|
+
"7. Render ExtentosConnectionPage() in your navigation (or skip for headless apps)\n" +
|
|
216
|
+
"8. Build and verify";
|
|
217
|
+
payload.notes =
|
|
218
|
+
"The MWDAT dict, CFBundleURLTypes, and Team ID must be filled in from your Meta Developer Center project — the scaffold emits REPLACE_ME placeholders. GlassesDebug is debug-only. Populate the spec next via initSpec. Callback handler registration is emitted later by generateConsumer(kind: \"callback\").";
|
|
219
|
+
}
|
|
220
|
+
return payload;
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=generateConnectionModule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateConnectionModule.js","sourceRoot":"","sources":["../../../src/tools/handlers/generateConnectionModule.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,yDAAyD;AACzD,kFAAkF;AAElF,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACzF,OAAO,EAAE,UAAU,EAAE,aAAa,EAAmB,MAAM,gBAAgB,CAAC;AAE5E,MAAM,uBAAuB,GAAG,OAAO,CAAC;AAUxC,MAAM,iBAAiB,GAAG;IACxB,EAAE,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,kDAAkD,EAAE;IACpF,EAAE,EAAE,EAAE,oBAAoB,EAAE,KAAK,EAAE,2BAA2B,EAAE;IAChE,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE;IAC7C,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,wCAAwC,EAAE;IACtE,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,mDAAmD,EAAE;CAC/E,CAAC;AAEF,MAAM,sBAAsB,GAAG;IAC7B,GAAG,EAAE,kDAAkD;IACvD,QAAQ,EAAE,eAAe;IACzB,WAAW,EACT,8JAA8J;CACjK,CAAC;AAEF,MAAM,UAAU,8BAA8B,CAAC,GAAY;IACzD,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,OAAO,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC;IAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IAEzB,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,uBAAuB,CAAC;IACtE,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,KAAK,SAAS,CAAC;IAElD,MAAM,OAAO,GACX,IAAI,CAAC,QAAQ,KAAK,SAAS;QACzB,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC;QACxD,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;IAEzD,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,SAAS,CAAC,GAAY;IAC7B,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO;YACL,KAAK,EAAE,aAAa,CAAC;gBACnB,IAAI,EAAE,mBAAmB;gBACzB,OAAO,EAAE,uDAAuD;gBAChE,OAAO,EAAE,8CAA8C;gBACvD,SAAS,EAAE,KAAK;aACjB,CAAC;SACH,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,GAA8B,CAAC;IAE3C,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IAC9B,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QACjD,OAAO;YACL,KAAK,EAAE,aAAa,CAAC;gBACnB,IAAI,EAAE,mBAAmB;gBACzB,OAAO,EAAE,4CAA4C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI;gBACjF,OAAO,EAAE,wCAAwC;gBACjD,SAAS,EAAE,KAAK;aACjB,CAAC;SACH,CAAC;IACJ,CAAC;IACD,IAAI,GAAG,CAAC,OAAO,KAAK,aAAa,EAAE,CAAC;QAClC,OAAO;YACL,KAAK,EAAE,aAAa,CAAC;gBACnB,IAAI,EAAE,mBAAmB;gBACzB,OAAO,EAAE,8CAA8C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI;gBACtF,OAAO,EAAE,gCAAgC;gBACzC,SAAS,EAAE,KAAK;aACjB,CAAC;SACH,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtE,OAAO;YACL,KAAK,EAAE,aAAa,CAAC;gBACnB,IAAI,EAAE,mBAAmB;gBACzB,OAAO,EAAE,wDAAwD;gBACjE,OAAO,EAAE,iEAAiE;gBAC1E,SAAS,EAAE,KAAK;aACjB,CAAC;SACH,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAS;QACjB,QAAQ;QACR,OAAO,EAAE,aAAa;QACtB,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,cAAc,EAAE,OAAO,GAAG,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;QACvF,cAAc,EACZ,GAAG,CAAC,cAAc,KAAK,SAAS,IAAI,GAAG,CAAC,cAAc,KAAK,UAAU;YACnE,CAAC,CAAC,GAAG,CAAC,cAAc;YACpB,CAAC,CAAC,SAAS;KAChB,CAAC;IACF,OAAO,EAAE,IAAI,EAAE,CAAC;AAClB,CAAC;AAED,SAAS,YAAY,CAAC,UAAkB,EAAE,cAAsB,EAAE,OAAgB;IAChF,MAAM,UAAU,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,wCAAwC,CAAC;IAC1D,MAAM,aAAa,GAAG,qBAAqB,UAAU,gCAAgC,CAAC;IAEtF,MAAM,QAAQ,GAAG,kBAAkB,CACjC,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,EAC7D,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CACzB,CAAC;IAEF,MAAM,KAAK,GAAG;QACZ,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,QAAiB,EAAE,OAAO,EAAE,sBAAsB,CAAC,UAAU,CAAC,EAAE;KAChG,CAAC;IAEF,MAAM,OAAO,GAA4B;QACvC,KAAK;QACL,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,kBAAkB,EAAE;QACrD,QAAQ,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,QAAQ,EAAE;QAC/D,YAAY,EAAE;YACZ,EAAE,QAAQ,EAAE,wBAAwB,cAAc,EAAE,EAAE,aAAa,EAAE,gBAAgB,EAAE;YACvF,EAAE,QAAQ,EAAE,2BAA2B,cAAc,EAAE,EAAE,aAAa,EAAE,gBAAgB,EAAE;YAC1F,EAAE,QAAQ,EAAE,8BAA8B,cAAc,EAAE,EAAE,aAAa,EAAE,qBAAqB,EAAE;SACnG;QACD,YAAY,EAAE;YACZ;gBACE,QAAQ,EAAE,cAAc;gBACxB,SAAS,EAAE,qBAAqB;gBAChC,OAAO,EACL,oMAAoM;aACvM;SACF;QACD,iBAAiB,EAAE;YACjB;gBACE,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,sBAAsB;gBAC5B,WAAW,EAAE,mDAAmD;gBAChE,SAAS,EAAE,sBAAsB;gBACjC,OAAO,EACL,+LAA+L;gBACjM,QAAQ,EAAE,0CAA0C;aACrD;SACF;QACD,WAAW,EAAE;YACX,sCAAsC;YACtC,mCAAmC;YACnC,6BAA6B;SAC9B;QACD,kBAAkB,EAAE,8DAA8D;QAClF,iBAAiB,EAAE;YACjB,WAAW,EACT,2GAA2G;YAC7G,QAAQ,EAAE,4DAA4D;YACtE,cAAc,EAAE,iBAAiB;YACjC,oBAAoB,EAAE,sBAAsB;SAC7C;QACD,OAAO,EAAE,uBAAuB,cAAc,oBAAoB,UAAU,2JAA2J;KACxO,CAAC;IAEF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,gBAAgB;YACtB,iKAAiK;gBACjK,+CAA+C;gBAC/C,6RAA6R;gBAC7R,6CAA6C;gBAC7C,iCAAiC;gBACjC,yBAAyB,UAAU,yEAAyE;gBAC5G,0GAA0G;gBAC1G,qBAAqB,CAAC;QACxB,OAAO,CAAC,KAAK;YACX,sZAAsZ,CAAC;IAC3Z,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,QAAQ,CAAC,UAAkB,EAAE,cAAsB,EAAE,OAAgB;IAC5E,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,WAAW,UAAU,+BAA+B,CAAC;IACtE,MAAM,aAAa,GAAG,WAAW,UAAU,mCAAmC,CAAC;IAC/E,MAAM,YAAY,GAAG,WAAW,UAAU,IAAI,UAAU,WAAW,CAAC;IAEpE,MAAM,QAAQ,GAAG,kBAAkB,CACjC,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,EACzD,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CACzB,CAAC;IAEF,MAAM,KAAK,GAAG;QACZ,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,QAAiB,EAAE,OAAO,EAAE,kBAAkB,CAAC,UAAU,CAAC,EAAE;QAC3F,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,OAAgB,EAAE,OAAO,EAAE,qBAAqB,CAAC,UAAU,CAAC,EAAE;KAC7F,CAAC;IAEF,MAAM,OAAO,GAA4B;QACvC,KAAK;QACL,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,kBAAkB,EAAE;QACrD,QAAQ,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,QAAQ,EAAE;QAC/D,YAAY,EAAE;YACZ;gBACE,OAAO,EAAE,2CAA2C;gBACpD,OAAO,EAAE,cAAc;gBACvB,QAAQ,EAAE,CAAC,aAAa,EAAE,WAAW,EAAE,cAAc,CAAC;aACvD;SACF;QACD,aAAa,EAAE;YACb,IAAI,EAAE,yBAAyB;YAC/B,KAAK,EAAE,WAAW;YAClB,MAAM,EACJ,qMAAqM;YACvM,OAAO,EACL,gKAAgK;SACnK;QACD,kBAAkB,EAAE,CAAC,wBAAwB,CAAC;QAC9C,WAAW,EAAE,EAAE;QACf,kBAAkB,EAAE;YAClB,KAAK,EAAE;gBACL,gBAAgB,EAAE,eAAe;gBACjC,SAAS,EAAE,YAAY;gBACvB,WAAW,EAAE,YAAY;gBACzB,MAAM,EAAE,YAAY;aACrB;YACD,gBAAgB,EAAE;gBAChB,EAAE,eAAe,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC,YAAY,CAAC,EAAE;aACpE;YACD,2BAA2B,EAAE,CAAC,YAAY,CAAC;YAC3C,qCAAqC,EAAE,CAAC,sBAAsB,CAAC;YAC/D,iBAAiB,EAAE,CAAC,mBAAmB,EAAE,sBAAsB,EAAE,oBAAoB,CAAC;YACtF,wBAAwB,EAAE,qDAAqD;YAC/E,4BAA4B,EAAE,6DAA6D;YAC3F,mCAAmC,EAAE,sDAAsD;YAC3F,iCAAiC,EAAE,qDAAqD;SACzF;QACD,kBAAkB,EAAE,8CAA8C;QAClE,iBAAiB,EAAE;YACjB,WAAW,EACT,2GAA2G;YAC7G,QAAQ,EAAE,4DAA4D;YACtE,cAAc,EAAE,iBAAiB;YACjC,oBAAoB,EAAE,sBAAsB;SAC7C;QACD,OAAO,EAAE,uBAAuB,cAAc,mBAAmB,UAAU,gKAAgK;KAC5O,CAAC;IAEF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,gBAAgB;YACtB,kEAAkE,cAAc,2FAA2F;gBAC3K,gJAAgJ;gBAChJ,kDAAkD;gBAClD,oCAAoC;gBACpC,YAAY,UAAU,wGAAwG;gBAC9H,gFAAgF;gBAChF,qFAAqF;gBACrF,qBAAqB,CAAC;QACxB,OAAO,CAAC,KAAK;YACX,gTAAgT,CAAC;IACrT,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateConsumer.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/generateConsumer.ts"],"names":[],"mappings":"AAiBA,OAAO,EAA6B,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAwB5E,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CAK/D"}
|