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.
- package/README.md +160 -0
- package/dist/api/rampkit.d.ts +96 -0
- package/dist/api/rampkit.d.ts.map +1 -0
- package/dist/api/rampkit.js +391 -0
- package/dist/api/rampkit.js.map +1 -0
- package/dist/detection/platform.d.ts +11 -0
- package/dist/detection/platform.d.ts.map +1 -0
- package/dist/detection/platform.js +420 -0
- package/dist/detection/platform.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/index.d.ts +24 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +183 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/resources/authoring-guide.d.ts +9 -0
- package/dist/resources/authoring-guide.d.ts.map +1 -0
- package/dist/resources/authoring-guide.js +487 -0
- package/dist/resources/authoring-guide.js.map +1 -0
- package/dist/resources/best-practices.d.ts +8 -0
- package/dist/resources/best-practices.d.ts.map +1 -0
- package/dist/resources/best-practices.js +92 -0
- package/dist/resources/best-practices.js.map +1 -0
- package/dist/resources/index.d.ts +19 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +236 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/schema.d.ts +42 -0
- package/dist/resources/schema.d.ts.map +1 -0
- package/dist/resources/schema.js +239 -0
- package/dist/resources/schema.js.map +1 -0
- package/dist/resources/sdk-guide.d.ts +7 -0
- package/dist/resources/sdk-guide.d.ts.map +1 -0
- package/dist/resources/sdk-guide.js +368 -0
- package/dist/resources/sdk-guide.js.map +1 -0
- package/dist/resources/templates.d.ts +9 -0
- package/dist/resources/templates.d.ts.map +1 -0
- package/dist/resources/templates.js +874 -0
- package/dist/resources/templates.js.map +1 -0
- package/dist/server.d.ts +10 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +109 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/instructions.d.ts +23 -0
- package/dist/tools/instructions.d.ts.map +1 -0
- package/dist/tools/instructions.js +74 -0
- package/dist/tools/instructions.js.map +1 -0
- package/dist/tools/onboarding.d.ts +211 -0
- package/dist/tools/onboarding.d.ts.map +1 -0
- package/dist/tools/onboarding.js +452 -0
- package/dist/tools/onboarding.js.map +1 -0
- package/dist/tools/setup.d.ts +61 -0
- package/dist/tools/setup.d.ts.map +1 -0
- package/dist/tools/setup.js +543 -0
- package/dist/tools/setup.js.map +1 -0
- package/dist/types.d.ts +280 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- 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":"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"}
|
|
@@ -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"}
|