201 lines
4.7 KiB
Markdown
201 lines
4.7 KiB
Markdown
|
|
# Manual Upload Capture Instructions
|
||
|
|
|
||
|
|
Since the Playwright browser may have restrictions, here's how to capture the upload protocol using your normal browser's Developer Tools.
|
||
|
|
|
||
|
|
## Method 1: Chrome/Chromium DevTools (Recommended)
|
||
|
|
|
||
|
|
### Step 1: Open DevTools
|
||
|
|
1. Open Chrome/Chromium
|
||
|
|
2. Navigate to https://app.kosmi.io/room/@hyperspaceout
|
||
|
|
3. Press `F12` or `Cmd+Option+I` (Mac) to open DevTools
|
||
|
|
4. Click the **Network** tab
|
||
|
|
|
||
|
|
### Step 2: Filter and Prepare
|
||
|
|
1. In the Network tab, check the **Preserve log** checkbox (important!)
|
||
|
|
2. Click the filter icon and select:
|
||
|
|
- **Fetch/XHR** (for API calls)
|
||
|
|
- **WS** (for WebSocket messages)
|
||
|
|
3. Clear the log (trash icon) to start fresh
|
||
|
|
|
||
|
|
### Step 3: Upload Image
|
||
|
|
1. In the Kosmi chat, click the attachment/upload button
|
||
|
|
2. Select `blurt.jpg` (or any small image)
|
||
|
|
3. Wait for the upload to complete
|
||
|
|
4. Watch the Network tab for new entries
|
||
|
|
|
||
|
|
### Step 4: Find Upload Request
|
||
|
|
Look for requests that might be the upload:
|
||
|
|
- URL contains: `upload`, `media`, `file`, `attachment`, `image`, `cdn`, `s3`
|
||
|
|
- Method: `POST` or `PUT`
|
||
|
|
- Type: `fetch`, `xhr`, or `other`
|
||
|
|
|
||
|
|
### Step 5: Capture Details
|
||
|
|
|
||
|
|
**For HTTP Upload:**
|
||
|
|
1. Click on the upload request
|
||
|
|
2. Go to the **Headers** tab:
|
||
|
|
- Copy the **Request URL**
|
||
|
|
- Copy **Request Method**
|
||
|
|
- Copy **Request Headers** (especially `Authorization`, `Content-Type`)
|
||
|
|
3. Go to the **Payload** tab:
|
||
|
|
- Note the format (Form Data, Request Payload, etc.)
|
||
|
|
- Copy the structure
|
||
|
|
4. Go to the **Response** tab:
|
||
|
|
- Copy the entire response (usually JSON with image URL)
|
||
|
|
|
||
|
|
**For WebSocket Message:**
|
||
|
|
1. Click on the **WS** filter
|
||
|
|
2. Click on the WebSocket connection (usually `wss://engine.kosmi.io/gql-ws`)
|
||
|
|
3. Click the **Messages** tab
|
||
|
|
4. Look for messages sent around the time of upload
|
||
|
|
5. Look for GraphQL mutations like `uploadFile`, `uploadImage`, `sendMedia`
|
||
|
|
6. Copy the entire message (both request and response)
|
||
|
|
|
||
|
|
### Step 6: Save Information
|
||
|
|
|
||
|
|
Create a file `upload-capture.txt` with this information:
|
||
|
|
|
||
|
|
```
|
||
|
|
=== UPLOAD CAPTURE ===
|
||
|
|
|
||
|
|
Method: [HTTP or WebSocket]
|
||
|
|
|
||
|
|
--- If HTTP ---
|
||
|
|
URL: [full URL]
|
||
|
|
Method: [POST/PUT]
|
||
|
|
Headers:
|
||
|
|
Authorization: [value]
|
||
|
|
Content-Type: [value]
|
||
|
|
[other headers]
|
||
|
|
|
||
|
|
Request Body Format: [multipart/form-data, JSON, binary, etc.]
|
||
|
|
Request Body:
|
||
|
|
[paste the payload structure]
|
||
|
|
|
||
|
|
Response:
|
||
|
|
[paste the full response]
|
||
|
|
|
||
|
|
--- If WebSocket ---
|
||
|
|
Message Sent:
|
||
|
|
[paste the GraphQL mutation or message]
|
||
|
|
|
||
|
|
Message Received:
|
||
|
|
[paste the response]
|
||
|
|
|
||
|
|
--- Additional Notes ---
|
||
|
|
[any other observations]
|
||
|
|
```
|
||
|
|
|
||
|
|
## Method 2: Firefox DevTools
|
||
|
|
|
||
|
|
Same process as Chrome, but:
|
||
|
|
1. Press `F12` or `Cmd+Option+I`
|
||
|
|
2. Click **Network** tab
|
||
|
|
3. Right-click on the upload request → **Copy** → **Copy All As HAR**
|
||
|
|
4. Save to `upload-capture.har` and share that file
|
||
|
|
|
||
|
|
## Method 3: Use the Monitor (Fixed)
|
||
|
|
|
||
|
|
The monitor has been updated with:
|
||
|
|
- ✅ Better permissions handling
|
||
|
|
- ✅ Proper Ctrl+C cleanup
|
||
|
|
- ✅ Fallback message if upload doesn't work
|
||
|
|
|
||
|
|
Try running it again:
|
||
|
|
```bash
|
||
|
|
./monitor-ws
|
||
|
|
```
|
||
|
|
|
||
|
|
If upload still doesn't work in the Playwright browser, that's okay - just use Method 1 or 2 above.
|
||
|
|
|
||
|
|
## What We Need
|
||
|
|
|
||
|
|
At minimum, we need to know:
|
||
|
|
|
||
|
|
1. **Upload Method:**
|
||
|
|
- [ ] HTTP POST/PUT to an endpoint
|
||
|
|
- [ ] GraphQL mutation via WebSocket
|
||
|
|
- [ ] Something else
|
||
|
|
|
||
|
|
2. **Endpoint/Mutation:**
|
||
|
|
- URL or mutation name
|
||
|
|
|
||
|
|
3. **Authentication:**
|
||
|
|
- How is the JWT token passed? (Header? Payload?)
|
||
|
|
|
||
|
|
4. **Request Format:**
|
||
|
|
- Multipart form-data?
|
||
|
|
- Base64 encoded in JSON?
|
||
|
|
- Binary?
|
||
|
|
|
||
|
|
5. **Response Format:**
|
||
|
|
- JSON with `{ url: "..." }`?
|
||
|
|
- Something else?
|
||
|
|
|
||
|
|
## Example: What Good Capture Looks Like
|
||
|
|
|
||
|
|
### Example HTTP Upload:
|
||
|
|
```
|
||
|
|
URL: https://cdn.kosmi.io/upload
|
||
|
|
Method: POST
|
||
|
|
Headers:
|
||
|
|
Authorization: Bearer eyJhbGc...
|
||
|
|
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary...
|
||
|
|
|
||
|
|
Body:
|
||
|
|
------WebKitFormBoundary...
|
||
|
|
Content-Disposition: form-data; name="file"; filename="blurt.jpg"
|
||
|
|
Content-Type: image/jpeg
|
||
|
|
|
||
|
|
[binary data]
|
||
|
|
------WebKitFormBoundary...--
|
||
|
|
|
||
|
|
Response:
|
||
|
|
{
|
||
|
|
"url": "https://cdn.kosmi.io/files/abc123.jpg",
|
||
|
|
"id": "abc123"
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### Example WebSocket Upload:
|
||
|
|
```
|
||
|
|
Sent:
|
||
|
|
{
|
||
|
|
"id": "upload-123",
|
||
|
|
"type": "subscribe",
|
||
|
|
"payload": {
|
||
|
|
"query": "mutation UploadFile($file: Upload!) { uploadFile(file: $file) { url } }",
|
||
|
|
"variables": {
|
||
|
|
"file": "data:image/jpeg;base64,/9j/4AAQSkZJRg..."
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
Received:
|
||
|
|
{
|
||
|
|
"id": "upload-123",
|
||
|
|
"type": "next",
|
||
|
|
"payload": {
|
||
|
|
"data": {
|
||
|
|
"uploadFile": {
|
||
|
|
"url": "https://cdn.kosmi.io/files/abc123.jpg"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
## After Capture
|
||
|
|
|
||
|
|
Once you have the information, either:
|
||
|
|
1. Paste it in a message to me
|
||
|
|
2. Save to `upload-capture.txt` and share
|
||
|
|
3. Share the HAR file if using Firefox
|
||
|
|
|
||
|
|
I'll then:
|
||
|
|
1. Analyze the protocol
|
||
|
|
2. Document it in `KOSMI_IMAGE_UPLOAD.md`
|
||
|
|
3. Implement the Go client
|
||
|
|
4. Complete the integration
|
||
|
|
|