rampkit-mcp-server 0.1.0

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 (62) hide show
  1. package/README.md +160 -0
  2. package/dist/api/rampkit.d.ts +96 -0
  3. package/dist/api/rampkit.d.ts.map +1 -0
  4. package/dist/api/rampkit.js +391 -0
  5. package/dist/api/rampkit.js.map +1 -0
  6. package/dist/detection/platform.d.ts +11 -0
  7. package/dist/detection/platform.d.ts.map +1 -0
  8. package/dist/detection/platform.js +420 -0
  9. package/dist/detection/platform.js.map +1 -0
  10. package/dist/index.d.ts +9 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +13 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/prompts/index.d.ts +24 -0
  15. package/dist/prompts/index.d.ts.map +1 -0
  16. package/dist/prompts/index.js +183 -0
  17. package/dist/prompts/index.js.map +1 -0
  18. package/dist/resources/authoring-guide.d.ts +9 -0
  19. package/dist/resources/authoring-guide.d.ts.map +1 -0
  20. package/dist/resources/authoring-guide.js +487 -0
  21. package/dist/resources/authoring-guide.js.map +1 -0
  22. package/dist/resources/best-practices.d.ts +8 -0
  23. package/dist/resources/best-practices.d.ts.map +1 -0
  24. package/dist/resources/best-practices.js +92 -0
  25. package/dist/resources/best-practices.js.map +1 -0
  26. package/dist/resources/index.d.ts +19 -0
  27. package/dist/resources/index.d.ts.map +1 -0
  28. package/dist/resources/index.js +236 -0
  29. package/dist/resources/index.js.map +1 -0
  30. package/dist/resources/schema.d.ts +42 -0
  31. package/dist/resources/schema.d.ts.map +1 -0
  32. package/dist/resources/schema.js +239 -0
  33. package/dist/resources/schema.js.map +1 -0
  34. package/dist/resources/sdk-guide.d.ts +7 -0
  35. package/dist/resources/sdk-guide.d.ts.map +1 -0
  36. package/dist/resources/sdk-guide.js +368 -0
  37. package/dist/resources/sdk-guide.js.map +1 -0
  38. package/dist/resources/templates.d.ts +9 -0
  39. package/dist/resources/templates.d.ts.map +1 -0
  40. package/dist/resources/templates.js +874 -0
  41. package/dist/resources/templates.js.map +1 -0
  42. package/dist/server.d.ts +10 -0
  43. package/dist/server.d.ts.map +1 -0
  44. package/dist/server.js +109 -0
  45. package/dist/server.js.map +1 -0
  46. package/dist/tools/instructions.d.ts +23 -0
  47. package/dist/tools/instructions.d.ts.map +1 -0
  48. package/dist/tools/instructions.js +74 -0
  49. package/dist/tools/instructions.js.map +1 -0
  50. package/dist/tools/onboarding.d.ts +211 -0
  51. package/dist/tools/onboarding.d.ts.map +1 -0
  52. package/dist/tools/onboarding.js +452 -0
  53. package/dist/tools/onboarding.js.map +1 -0
  54. package/dist/tools/setup.d.ts +61 -0
  55. package/dist/tools/setup.d.ts.map +1 -0
  56. package/dist/tools/setup.js +543 -0
  57. package/dist/tools/setup.js.map +1 -0
  58. package/dist/types.d.ts +280 -0
  59. package/dist/types.d.ts.map +1 -0
  60. package/dist/types.js +5 -0
  61. package/dist/types.js.map +1 -0
  62. package/package.json +51 -0
package/README.md ADDED
@@ -0,0 +1,160 @@
1
+ # @rampkit/mcp-server
2
+
3
+ MCP (Model Context Protocol) server for RampKit - Connect AI coding assistants to RampKit's onboarding API.
4
+
5
+ ## What is RampKit?
6
+
7
+ RampKit is a visual onboarding platform for mobile apps. Create beautiful onboarding flows with HTML/CSS, deploy without app releases, and run A/B tests to optimize conversions.
8
+
9
+ ## Installation
10
+
11
+ ### Cursor / Windsurf
12
+
13
+ Add to `~/.cursor/mcp.json` (global) or `.cursor/mcp.json` (project):
14
+
15
+ ```json
16
+ {
17
+ "mcpServers": {
18
+ "rampkit": {
19
+ "command": "npx",
20
+ "args": ["@rampkit/mcp-server"],
21
+ "env": {
22
+ "RAMPKIT_API_KEY": "pk_live_your_api_key"
23
+ }
24
+ }
25
+ }
26
+ }
27
+ ```
28
+
29
+ ### Claude Code
30
+
31
+ ```bash
32
+ claude mcp add rampkit --env RAMPKIT_API_KEY=pk_live_your_key -- npx @rampkit/mcp-server
33
+ ```
34
+
35
+ ### VS Code (GitHub Copilot)
36
+
37
+ Add to `.vscode/mcp.json`:
38
+
39
+ ```json
40
+ {
41
+ "mcpServers": {
42
+ "rampkit": {
43
+ "command": "npx",
44
+ "args": ["@rampkit/mcp-server"]
45
+ }
46
+ }
47
+ }
48
+ ```
49
+
50
+ ## Getting Your API Key
51
+
52
+ 1. Sign up at [rampkit.com](https://rampkit.com/signup)
53
+ 2. Create an app in the dashboard
54
+ 3. Copy your API key from Settings → API Key
55
+
56
+ ## Available Tools
57
+
58
+ ### Setup Tools
59
+
60
+ | Tool | Description |
61
+ |------|-------------|
62
+ | `check_rampkit_setup` | Check if RampKit is configured in the current project |
63
+ | `get_setup_instructions` | Get personalized setup instructions |
64
+ | `validate_app_id` | Validate a RampKit App ID |
65
+ | `save_rampkit_config` | Save RampKit config to `.rampkit.json` |
66
+
67
+ ### Onboarding Tools
68
+
69
+ | Tool | Description |
70
+ |------|-------------|
71
+ | `get_instructions` | Get JSON schema, HTML templates, and best practices |
72
+ | `create_onboarding` | Create and upload a new onboarding |
73
+ | `update_onboarding` | Update an existing onboarding |
74
+ | `list_onboardings` | List all onboardings for the app |
75
+ | `get_onboarding` | Get full details of a specific onboarding |
76
+ | `delete_onboarding` | Delete an onboarding |
77
+ | `get_dashboard_links` | Get links to RampKit dashboard |
78
+
79
+ ## Example Usage
80
+
81
+ ### Creating an Onboarding
82
+
83
+ Ask your AI assistant:
84
+
85
+ ```
86
+ Create a RampKit onboarding for my app with:
87
+ - Welcome screen
88
+ - Feature highlights
89
+ - Notification permission request
90
+ - Completion screen
91
+ ```
92
+
93
+ The assistant will:
94
+ 1. Call `get_instructions` to get the schema and templates
95
+ 2. Analyze your codebase for colors and branding
96
+ 3. Generate HTML screens matching your app's style
97
+ 4. Call `create_onboarding` to upload
98
+ 5. Return the editor URL for preview
99
+
100
+ ### Listing Onboardings
101
+
102
+ ```
103
+ Show me all my RampKit onboardings
104
+ ```
105
+
106
+ ### Updating an Onboarding
107
+
108
+ ```
109
+ Update the welcome screen of onboarding [ID] to say "Hello, friend!"
110
+ ```
111
+
112
+ ## Resources
113
+
114
+ The server also exposes these resources:
115
+
116
+ - `rampkit://schema.json` - JSON schema for onboarding format
117
+ - `rampkit://templates/*` - Ready-to-use HTML templates
118
+ - `rampkit://best-practices` - Design guidelines
119
+ - `rampkit://styles/variables` - CSS variable reference
120
+
121
+ ## Prompts
122
+
123
+ Pre-built prompts for common tasks:
124
+
125
+ - `create-from-codebase` - Analyze codebase and generate matching onboarding
126
+ - `convert-onboarding` - Convert native onboarding code to RampKit
127
+ - `optimize-onboarding` - Get suggestions for improving an onboarding
128
+
129
+ ## Environment Variables
130
+
131
+ | Variable | Required | Description |
132
+ |----------|----------|-------------|
133
+ | `RAMPKIT_API_KEY` | Yes | Your RampKit API key (pk_live_xxx) |
134
+ | `RAMPKIT_API_URL` | No | Override API base URL (for development) |
135
+
136
+ ## Development
137
+
138
+ ```bash
139
+ # Install dependencies
140
+ npm install
141
+
142
+ # Run in development mode
143
+ npm run dev
144
+
145
+ # Build
146
+ npm run build
147
+
148
+ # Test with Claude Code
149
+ claude mcp add rampkit-dev -- node ./dist/index.js
150
+ ```
151
+
152
+ ## Support
153
+
154
+ - Documentation: [rampkit.com/docs](https://rampkit.com/docs)
155
+ - Issues: [github.com/rampkit/mcp-server/issues](https://github.com/rampkit/mcp-server/issues)
156
+ - Discord: [discord.gg/rampkit](https://discord.gg/rampkit)
157
+
158
+ ## License
159
+
160
+ MIT
@@ -0,0 +1,96 @@
1
+ /**
2
+ * RampKit API Client
3
+ *
4
+ * Handles all communication with the RampKit backend.
5
+ * API key is loaded from (in order of priority):
6
+ * 1. Constructor argument
7
+ * 2. RAMPKIT_API_KEY environment variable
8
+ * 3. ~/.rampkit/config.json file
9
+ */
10
+ import type { App, ValidateApiKeyResponse, ListOnboardingsResponse, GetOnboardingResponse, CreateOnboardingResponse, UpdateOnboardingResponse, DeleteOnboardingResponse, ScreenInput, OnboardingSettings } from '../types.js';
11
+ /**
12
+ * Save API key to config file
13
+ */
14
+ export declare function saveApiKeyToConfig(apiKey: string): {
15
+ success: boolean;
16
+ error?: string;
17
+ };
18
+ export declare class RampKitClient {
19
+ private apiKey;
20
+ private baseUrl;
21
+ private cachedApp;
22
+ constructor(apiKey?: string, baseUrl?: string);
23
+ /**
24
+ * Check if the client has an API key configured
25
+ */
26
+ hasApiKey(): boolean;
27
+ /**
28
+ * Get the configured API key
29
+ */
30
+ getApiKey(): string | null;
31
+ /**
32
+ * Set the API key
33
+ */
34
+ setApiKey(apiKey: string): void;
35
+ /**
36
+ * Get the cached app info (after validation)
37
+ */
38
+ getCachedApp(): App | null;
39
+ /**
40
+ * Validate the API key and get app information
41
+ */
42
+ validateApiKey(): Promise<ValidateApiKeyResponse>;
43
+ /**
44
+ * List onboardings for the authenticated app
45
+ */
46
+ listOnboardings(status?: string): Promise<ListOnboardingsResponse>;
47
+ /**
48
+ * Get a specific onboarding with its screens
49
+ */
50
+ getOnboarding(onboardingId: string): Promise<GetOnboardingResponse>;
51
+ /**
52
+ * Create a new onboarding
53
+ */
54
+ createOnboarding(name: string, screens: ScreenInput[], settings?: OnboardingSettings): Promise<CreateOnboardingResponse>;
55
+ /**
56
+ * Update an existing onboarding
57
+ */
58
+ updateOnboarding(onboardingId: string, updates: {
59
+ name?: string;
60
+ screens?: ScreenInput[];
61
+ settings?: OnboardingSettings;
62
+ status?: 'draft' | 'active' | 'archived';
63
+ }): Promise<UpdateOnboardingResponse>;
64
+ /**
65
+ * Delete an onboarding
66
+ */
67
+ deleteOnboarding(onboardingId: string): Promise<DeleteOnboardingResponse>;
68
+ /**
69
+ * Get dashboard URLs
70
+ */
71
+ getDashboardLinks(onboardingId?: string): {
72
+ dashboard: string;
73
+ editor: string | null;
74
+ preview: string | null;
75
+ analytics: string;
76
+ settings: string;
77
+ };
78
+ /**
79
+ * Ensure the client is authenticated
80
+ */
81
+ private ensureAuthenticated;
82
+ /**
83
+ * Get headers for API requests
84
+ */
85
+ private getHeaders;
86
+ }
87
+ export declare function getRampKitClient(): RampKitClient;
88
+ /**
89
+ * Reset the client singleton (used after setting a new API key)
90
+ */
91
+ export declare function resetClient(): void;
92
+ /**
93
+ * Quick check if RampKit is configured (no API call, just checks if key exists)
94
+ */
95
+ export declare function isConfigured(): boolean;
96
+ //# sourceMappingURL=rampkit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rampkit.d.ts","sourceRoot":"","sources":["../../src/api/rampkit.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EACV,GAAG,EACH,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,wBAAwB,EACxB,wBAAwB,EACxB,WAAW,EACX,kBAAkB,EACnB,MAAM,aAAa,CAAC;AA2BrB;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CA8BvF;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAoB;gBAEzB,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAM7C;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,SAAS,IAAI,MAAM,GAAG,IAAI;IAI1B;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK/B;;OAEG;IACH,YAAY,IAAI,GAAG,GAAG,IAAI;IAI1B;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,sBAAsB,CAAC;IAuDvD;;OAEG;IACG,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAkCxE;;OAEG;IACG,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAkCzE;;OAEG;IACG,gBAAgB,CACpB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,WAAW,EAAE,EACtB,QAAQ,CAAC,EAAE,kBAAkB,GAC5B,OAAO,CAAC,wBAAwB,CAAC;IAkCpC;;OAEG;IACG,gBAAgB,CACpB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE;QACP,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;QACxB,QAAQ,CAAC,EAAE,kBAAkB,CAAC;QAC9B,MAAM,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;KAC1C,GACA,OAAO,CAAC,wBAAwB,CAAC;IAoCpC;;OAEG;IACG,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAkC/E;;OAEG;IACH,iBAAiB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG;QACxC,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;KAClB;IAaD;;OAEG;YACW,mBAAmB;IAmBjC;;OAEG;IACH,OAAO,CAAC,UAAU;CAOnB;AAKD,wBAAgB,gBAAgB,IAAI,aAAa,CAKhD;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAElC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAGtC"}
@@ -0,0 +1,391 @@
1
+ /**
2
+ * RampKit API Client
3
+ *
4
+ * Handles all communication with the RampKit backend.
5
+ * API key is loaded from (in order of priority):
6
+ * 1. Constructor argument
7
+ * 2. RAMPKIT_API_KEY environment variable
8
+ * 3. ~/.rampkit/config.json file
9
+ */
10
+ import * as fs from 'fs';
11
+ import * as path from 'path';
12
+ import * as os from 'os';
13
+ const DEFAULT_BASE_URL = 'https://uustlzuvjmochxkxatfx.supabase.co/functions/v1';
14
+ const DASHBOARD_URL = 'https://www.rampkit.com';
15
+ // Supabase anon key required for edge function auth
16
+ const SUPABASE_ANON_KEY = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InV1c3RsenV2am1vY2h4a3hhdGZ4Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3NjIxMDM2NTUsImV4cCI6MjA3NzY3OTY1NX0.d5XsIMGnia4n9Pou0IidipyyEfSlwpXFoeDBufMOEwE';
17
+ // Config file path: ~/.rampkit/config.json
18
+ const CONFIG_DIR = path.join(os.homedir(), '.rampkit');
19
+ const CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');
20
+ /**
21
+ * Load API key from config file
22
+ */
23
+ function loadApiKeyFromConfig() {
24
+ try {
25
+ if (fs.existsSync(CONFIG_FILE)) {
26
+ const content = fs.readFileSync(CONFIG_FILE, 'utf-8');
27
+ const config = JSON.parse(content);
28
+ return config.apiKey || null;
29
+ }
30
+ }
31
+ catch {
32
+ // Config file doesn't exist or is invalid
33
+ }
34
+ return null;
35
+ }
36
+ /**
37
+ * Save API key to config file
38
+ */
39
+ export function saveApiKeyToConfig(apiKey) {
40
+ try {
41
+ // Create directory if it doesn't exist
42
+ if (!fs.existsSync(CONFIG_DIR)) {
43
+ fs.mkdirSync(CONFIG_DIR, { recursive: true });
44
+ }
45
+ // Load existing config or create new
46
+ let config = {};
47
+ if (fs.existsSync(CONFIG_FILE)) {
48
+ try {
49
+ config = JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf-8'));
50
+ }
51
+ catch {
52
+ // Start fresh if invalid
53
+ }
54
+ }
55
+ // Update API key
56
+ config.apiKey = apiKey;
57
+ config.updatedAt = new Date().toISOString();
58
+ // Write config
59
+ fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2));
60
+ return { success: true };
61
+ }
62
+ catch (error) {
63
+ return {
64
+ success: false,
65
+ error: `Failed to save config: ${error instanceof Error ? error.message : String(error)}`
66
+ };
67
+ }
68
+ }
69
+ export class RampKitClient {
70
+ apiKey;
71
+ baseUrl;
72
+ cachedApp = null;
73
+ constructor(apiKey, baseUrl) {
74
+ // Priority: constructor arg > env var > config file
75
+ this.apiKey = apiKey || process.env.RAMPKIT_API_KEY || loadApiKeyFromConfig();
76
+ this.baseUrl = baseUrl || process.env.RAMPKIT_API_URL || DEFAULT_BASE_URL;
77
+ }
78
+ /**
79
+ * Check if the client has an API key configured
80
+ */
81
+ hasApiKey() {
82
+ return this.apiKey !== null && this.apiKey.length > 0;
83
+ }
84
+ /**
85
+ * Get the configured API key
86
+ */
87
+ getApiKey() {
88
+ return this.apiKey;
89
+ }
90
+ /**
91
+ * Set the API key
92
+ */
93
+ setApiKey(apiKey) {
94
+ this.apiKey = apiKey;
95
+ this.cachedApp = null; // Clear cache when key changes
96
+ }
97
+ /**
98
+ * Get the cached app info (after validation)
99
+ */
100
+ getCachedApp() {
101
+ return this.cachedApp;
102
+ }
103
+ /**
104
+ * Validate the API key and get app information
105
+ */
106
+ async validateApiKey() {
107
+ if (!this.apiKey) {
108
+ return {
109
+ valid: false,
110
+ app: null,
111
+ error: 'No API key configured. Set RAMPKIT_API_KEY environment variable.',
112
+ };
113
+ }
114
+ try {
115
+ const response = await fetch(`${this.baseUrl}/mcp-auth`, {
116
+ method: 'POST',
117
+ headers: {
118
+ 'Content-Type': 'application/json',
119
+ 'Authorization': `Bearer ${SUPABASE_ANON_KEY}`,
120
+ 'X-RampKit-API-Key': this.apiKey,
121
+ },
122
+ body: JSON.stringify({ action: 'validate' }),
123
+ });
124
+ if (!response.ok) {
125
+ if (response.status === 401) {
126
+ return {
127
+ valid: false,
128
+ app: null,
129
+ error: 'Invalid API key. Check your RAMPKIT_API_KEY.',
130
+ };
131
+ }
132
+ throw new Error(`API error: ${response.status}`);
133
+ }
134
+ const data = await response.json();
135
+ if (data.success && data.app) {
136
+ this.cachedApp = data.app;
137
+ return {
138
+ valid: true,
139
+ app: data.app,
140
+ };
141
+ }
142
+ return {
143
+ valid: false,
144
+ app: null,
145
+ error: data.error || 'Unknown validation error',
146
+ };
147
+ }
148
+ catch (error) {
149
+ return {
150
+ valid: false,
151
+ app: null,
152
+ error: `Connection error: ${error instanceof Error ? error.message : String(error)}`,
153
+ };
154
+ }
155
+ }
156
+ /**
157
+ * List onboardings for the authenticated app
158
+ */
159
+ async listOnboardings(status) {
160
+ const authCheck = await this.ensureAuthenticated();
161
+ if (!authCheck.success) {
162
+ return { success: false, onboardings: [], count: 0, error: authCheck.error };
163
+ }
164
+ try {
165
+ const url = new URL(`${this.baseUrl}/mcp-onboardings`);
166
+ url.searchParams.set('action', 'list');
167
+ if (status) {
168
+ url.searchParams.set('status', status);
169
+ }
170
+ const response = await fetch(url.toString(), {
171
+ method: 'GET',
172
+ headers: this.getHeaders(),
173
+ });
174
+ if (!response.ok) {
175
+ throw new Error(`API error: ${response.status}`);
176
+ }
177
+ const data = await response.json();
178
+ return data;
179
+ }
180
+ catch (error) {
181
+ return {
182
+ success: false,
183
+ onboardings: [],
184
+ count: 0,
185
+ error: `Failed to list onboardings: ${error instanceof Error ? error.message : String(error)}`,
186
+ };
187
+ }
188
+ }
189
+ /**
190
+ * Get a specific onboarding with its screens
191
+ */
192
+ async getOnboarding(onboardingId) {
193
+ const authCheck = await this.ensureAuthenticated();
194
+ if (!authCheck.success) {
195
+ return { success: false, onboarding: null, error: authCheck.error };
196
+ }
197
+ try {
198
+ const url = new URL(`${this.baseUrl}/mcp-onboardings`);
199
+ url.searchParams.set('action', 'get');
200
+ url.searchParams.set('onboarding_id', onboardingId);
201
+ const response = await fetch(url.toString(), {
202
+ method: 'GET',
203
+ headers: this.getHeaders(),
204
+ });
205
+ if (!response.ok) {
206
+ if (response.status === 404) {
207
+ return { success: false, onboarding: null, error: 'Onboarding not found' };
208
+ }
209
+ throw new Error(`API error: ${response.status}`);
210
+ }
211
+ const data = await response.json();
212
+ return data;
213
+ }
214
+ catch (error) {
215
+ return {
216
+ success: false,
217
+ onboarding: null,
218
+ error: `Failed to get onboarding: ${error instanceof Error ? error.message : String(error)}`,
219
+ };
220
+ }
221
+ }
222
+ /**
223
+ * Create a new onboarding
224
+ */
225
+ async createOnboarding(name, screens, settings) {
226
+ const authCheck = await this.ensureAuthenticated();
227
+ if (!authCheck.success) {
228
+ return { success: false, onboarding: null, error: authCheck.error };
229
+ }
230
+ try {
231
+ const response = await fetch(`${this.baseUrl}/mcp-onboardings`, {
232
+ method: 'POST',
233
+ headers: this.getHeaders(),
234
+ body: JSON.stringify({
235
+ action: 'create',
236
+ name,
237
+ screens,
238
+ settings,
239
+ }),
240
+ });
241
+ if (!response.ok) {
242
+ const errorData = await response.json().catch(() => ({}));
243
+ throw new Error(errorData.error || `API error: ${response.status}`);
244
+ }
245
+ const data = await response.json();
246
+ return data;
247
+ }
248
+ catch (error) {
249
+ return {
250
+ success: false,
251
+ onboarding: null,
252
+ error: `Failed to create onboarding: ${error instanceof Error ? error.message : String(error)}`,
253
+ };
254
+ }
255
+ }
256
+ /**
257
+ * Update an existing onboarding
258
+ */
259
+ async updateOnboarding(onboardingId, updates) {
260
+ const authCheck = await this.ensureAuthenticated();
261
+ if (!authCheck.success) {
262
+ return { success: false, onboarding: null, error: authCheck.error };
263
+ }
264
+ try {
265
+ const response = await fetch(`${this.baseUrl}/mcp-onboardings`, {
266
+ method: 'PATCH',
267
+ headers: this.getHeaders(),
268
+ body: JSON.stringify({
269
+ action: 'update',
270
+ onboarding_id: onboardingId,
271
+ ...updates,
272
+ }),
273
+ });
274
+ if (!response.ok) {
275
+ if (response.status === 404) {
276
+ return { success: false, onboarding: null, error: 'Onboarding not found' };
277
+ }
278
+ const errorData = await response.json().catch(() => ({}));
279
+ throw new Error(errorData.error || `API error: ${response.status}`);
280
+ }
281
+ const data = await response.json();
282
+ return data;
283
+ }
284
+ catch (error) {
285
+ return {
286
+ success: false,
287
+ onboarding: null,
288
+ error: `Failed to update onboarding: ${error instanceof Error ? error.message : String(error)}`,
289
+ };
290
+ }
291
+ }
292
+ /**
293
+ * Delete an onboarding
294
+ */
295
+ async deleteOnboarding(onboardingId) {
296
+ const authCheck = await this.ensureAuthenticated();
297
+ if (!authCheck.success) {
298
+ return { success: false, error: authCheck.error };
299
+ }
300
+ try {
301
+ const response = await fetch(`${this.baseUrl}/mcp-onboardings`, {
302
+ method: 'DELETE',
303
+ headers: this.getHeaders(),
304
+ body: JSON.stringify({
305
+ action: 'delete',
306
+ onboarding_id: onboardingId,
307
+ }),
308
+ });
309
+ if (!response.ok) {
310
+ if (response.status === 404) {
311
+ return { success: false, error: 'Onboarding not found' };
312
+ }
313
+ const errorData = await response.json().catch(() => ({}));
314
+ throw new Error(errorData.error || `API error: ${response.status}`);
315
+ }
316
+ const data = await response.json();
317
+ return data;
318
+ }
319
+ catch (error) {
320
+ return {
321
+ success: false,
322
+ error: `Failed to delete onboarding: ${error instanceof Error ? error.message : String(error)}`,
323
+ };
324
+ }
325
+ }
326
+ /**
327
+ * Get dashboard URLs
328
+ */
329
+ getDashboardLinks(onboardingId) {
330
+ const appId = this.cachedApp?.id;
331
+ const baseAppUrl = appId ? `${DASHBOARD_URL}/app/${appId}` : DASHBOARD_URL;
332
+ return {
333
+ dashboard: appId ? `${baseAppUrl}/dashboard` : DASHBOARD_URL,
334
+ editor: onboardingId ? `${baseAppUrl}/editor/${onboardingId}` : null,
335
+ preview: onboardingId ? `${baseAppUrl}/preview/${onboardingId}` : null,
336
+ analytics: `${baseAppUrl}/analytics`,
337
+ settings: `${baseAppUrl}/settings`,
338
+ };
339
+ }
340
+ /**
341
+ * Ensure the client is authenticated
342
+ */
343
+ async ensureAuthenticated() {
344
+ if (!this.apiKey) {
345
+ return {
346
+ success: false,
347
+ error: 'No API key configured. Set RAMPKIT_API_KEY environment variable.',
348
+ };
349
+ }
350
+ // If we haven't validated yet, do it now
351
+ if (!this.cachedApp) {
352
+ const validation = await this.validateApiKey();
353
+ if (!validation.valid) {
354
+ return { success: false, error: validation.error };
355
+ }
356
+ }
357
+ return { success: true };
358
+ }
359
+ /**
360
+ * Get headers for API requests
361
+ */
362
+ getHeaders() {
363
+ return {
364
+ 'Content-Type': 'application/json',
365
+ 'Authorization': `Bearer ${SUPABASE_ANON_KEY}`,
366
+ 'X-RampKit-API-Key': this.apiKey || '',
367
+ };
368
+ }
369
+ }
370
+ // Singleton instance
371
+ let client = null;
372
+ export function getRampKitClient() {
373
+ if (!client) {
374
+ client = new RampKitClient();
375
+ }
376
+ return client;
377
+ }
378
+ /**
379
+ * Reset the client singleton (used after setting a new API key)
380
+ */
381
+ export function resetClient() {
382
+ client = null;
383
+ }
384
+ /**
385
+ * Quick check if RampKit is configured (no API call, just checks if key exists)
386
+ */
387
+ export function isConfigured() {
388
+ const c = getRampKitClient();
389
+ return c.hasApiKey();
390
+ }
391
+ //# sourceMappingURL=rampkit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rampkit.js","sourceRoot":"","sources":["../../src/api/rampkit.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAazB,MAAM,gBAAgB,GAAG,uDAAuD,CAAC;AACjF,MAAM,aAAa,GAAG,yBAAyB,CAAC;AAChD,oDAAoD;AACpD,MAAM,iBAAiB,GAAG,kNAAkN,CAAC;AAE7O,2CAA2C;AAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;AACvD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEzD;;GAEG;AACH,SAAS,oBAAoB;IAC3B,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,OAAO,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC;QAC/B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,0CAA0C;IAC5C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,IAAI,CAAC;QACH,uCAAuC;QACvC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QAED,qCAAqC;QACrC,IAAI,MAAM,GAA4B,EAAE,CAAC;QACzC,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;YAC7D,CAAC;YAAC,MAAM,CAAC;gBACP,yBAAyB;YAC3B,CAAC;QACH,CAAC;QAED,iBAAiB;QACjB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QACvB,MAAM,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAE5C,eAAe;QACf,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;SAC1F,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,OAAO,aAAa;IAChB,MAAM,CAAgB;IACtB,OAAO,CAAS;IAChB,SAAS,GAAe,IAAI,CAAC;IAErC,YAAY,MAAe,EAAE,OAAgB;QAC3C,oDAAoD;QACpD,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,oBAAoB,EAAE,CAAC;QAC9E,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,gBAAgB,CAAC;IAC5E,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,MAAc;QACtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,+BAA+B;IACxD,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc;QAClB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,GAAG,EAAE,IAAI;gBACT,KAAK,EAAE,kEAAkE;aAC1E,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,WAAW,EAAE;gBACvD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,eAAe,EAAE,UAAU,iBAAiB,EAAE;oBAC9C,mBAAmB,EAAE,IAAI,CAAC,MAAM;iBACjC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;aAC7C,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;oBAC5B,OAAO;wBACL,KAAK,EAAE,KAAK;wBACZ,GAAG,EAAE,IAAI;wBACT,KAAK,EAAE,8CAA8C;qBACtD,CAAC;gBACJ,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,cAAc,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACnD,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAqD,CAAC;YAEtF,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC;gBAC1B,OAAO;oBACL,KAAK,EAAE,IAAI;oBACX,GAAG,EAAE,IAAI,CAAC,GAAG;iBACd,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,GAAG,EAAE,IAAI;gBACT,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,0BAA0B;aAChD,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,GAAG,EAAE,IAAI;gBACT,KAAK,EAAE,qBAAqB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;aACrF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,MAAe;QACnC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACnD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACvB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC;QAC/E,CAAC;QAED,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,kBAAkB,CAAC,CAAC;YACvD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACvC,IAAI,MAAM,EAAE,CAAC;gBACX,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACzC,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;gBAC3C,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;aAC3B,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,cAAc,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACnD,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA6B,CAAC;YAC9D,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,WAAW,EAAE,EAAE;gBACf,KAAK,EAAE,CAAC;gBACR,KAAK,EAAE,+BAA+B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;aAC/F,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,YAAoB;QACtC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACnD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACvB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC;QACtE,CAAC;QAED,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,kBAAkB,CAAC,CAAC;YACvD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACtC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;YAEpD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;gBAC3C,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;aAC3B,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;oBAC5B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC;gBAC7E,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,cAAc,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACnD,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA2B,CAAC;YAC5D,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,UAAU,EAAE,IAAI;gBAChB,KAAK,EAAE,6BAA6B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;aAC7F,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CACpB,IAAY,EACZ,OAAsB,EACtB,QAA6B;QAE7B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACnD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACvB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC;QACtE,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,kBAAkB,EAAE;gBAC9D,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;gBAC1B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,MAAM,EAAE,QAAQ;oBAChB,IAAI;oBACJ,OAAO;oBACP,QAAQ;iBACT,CAAC;aACH,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAuB,CAAC;gBAChF,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,IAAI,cAAc,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACtE,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA8B,CAAC;YAC/D,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,UAAU,EAAE,IAAI;gBAChB,KAAK,EAAE,gCAAgC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;aAChG,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CACpB,YAAoB,EACpB,OAKC;QAED,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACnD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACvB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC;QACtE,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,kBAAkB,EAAE;gBAC9D,MAAM,EAAE,OAAO;gBACf,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;gBAC1B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,MAAM,EAAE,QAAQ;oBAChB,aAAa,EAAE,YAAY;oBAC3B,GAAG,OAAO;iBACX,CAAC;aACH,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;oBAC5B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC;gBAC7E,CAAC;gBACD,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAuB,CAAC;gBAChF,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,IAAI,cAAc,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACtE,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA8B,CAAC;YAC/D,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,UAAU,EAAE,IAAI;gBAChB,KAAK,EAAE,gCAAgC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;aAChG,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,YAAoB;QACzC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACnD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACvB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC;QACpD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,kBAAkB,EAAE;gBAC9D,MAAM,EAAE,QAAQ;gBAChB,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;gBAC1B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,MAAM,EAAE,QAAQ;oBAChB,aAAa,EAAE,YAAY;iBAC5B,CAAC;aACH,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;oBAC5B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC;gBAC3D,CAAC;gBACD,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAuB,CAAC;gBAChF,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,IAAI,cAAc,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACtE,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA8B,CAAC;YAC/D,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,gCAAgC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;aAChG,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,YAAqB;QAOrC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;QACjC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,aAAa,QAAQ,KAAK,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC;QAE3E,OAAO;YACL,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU,YAAY,CAAC,CAAC,CAAC,aAAa;YAC5D,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,UAAU,WAAW,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI;YACpE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,UAAU,YAAY,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI;YACtE,SAAS,EAAE,GAAG,UAAU,YAAY;YACpC,QAAQ,EAAE,GAAG,UAAU,WAAW;SACnC,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB;QAC/B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,kEAAkE;aAC1E,CAAC;QACJ,CAAC;QAED,yCAAyC;QACzC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YAC/C,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;gBACtB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC;YACrD,CAAC;QACH,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACK,UAAU;QAChB,OAAO;YACL,cAAc,EAAE,kBAAkB;YAClC,eAAe,EAAE,UAAU,iBAAiB,EAAE;YAC9C,mBAAmB,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;SACvC,CAAC;IACJ,CAAC;CACF;AAED,qBAAqB;AACrB,IAAI,MAAM,GAAyB,IAAI,CAAC;AAExC,MAAM,UAAU,gBAAgB;IAC9B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;IAC/B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,GAAG,IAAI,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,CAAC,GAAG,gBAAgB,EAAE,CAAC;IAC7B,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;AACvB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Platform Detection
3
+ *
4
+ * Automatically detects the project type, bundle ID, app name, and SDK installation.
5
+ */
6
+ import type { ProjectDetection } from '../types.js';
7
+ /**
8
+ * Detect project information from the current working directory
9
+ */
10
+ export declare function detectProject(): Promise<ProjectDetection>;
11
+ //# sourceMappingURL=platform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/detection/platform.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAY,MAAM,aAAa,CAAC;AAE9D;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAmB/D"}