diff --git a/.microfox/pr-usage.json b/.microfox/pr-usage.json
index f2501b50a..0967ef424 100644
--- a/.microfox/pr-usage.json
+++ b/.microfox/pr-usage.json
@@ -1,18 +1 @@
-{
- "gemini-1.5-pro": {
- "usage": {
- "promptTokens": 211932,
- "completionTokens": 28135,
- "totalTokens": 0
- },
- "cost": 0.8111800000000001
- },
- "claude-3-5-sonnet-20240620": {
- "usage": {
- "promptTokens": 163073,
- "completionTokens": 28798,
- "totalTokens": 0
- },
- "cost": 0.921189
- }
-}
\ No newline at end of file
+{}
diff --git a/packages-list.json b/packages-list.json
index 12917a5bc..076562185 100644
--- a/packages-list.json
+++ b/packages-list.json
@@ -4,6 +4,7 @@
"packages/@ext_@slack#web-api"
],
"stablePackages": [
+ "packages/amazon-rekognition-face-detection",
"packages/aws-ses",
"packages/brave",
"packages/coingecko-sdk",
@@ -17,6 +18,7 @@
"packages/linkedin-member-data-portability",
"packages/linkedin-share",
"packages/reddit",
+ "packages/riverside",
"packages/slack-web-tiny",
"packages/whatsapp-business",
"packages/youtube",
@@ -40,12 +42,9 @@
"packages/linkedin-oauth",
"packages/reddit-oauth"
],
- "unknownPackages": [
- "packages/google-sdk"
- ],
"internalPackages": [
"packages/rest-sdk"
],
- "total": 33,
- "generatedAt": "2025-05-05T17:10:43.491Z"
+ "total": 34,
+ "generatedAt": "2025-05-07T15:52:28.945Z"
}
\ No newline at end of file
diff --git a/packages/riverside/README.md b/packages/riverside/README.md
new file mode 100644
index 000000000..0641147b1
--- /dev/null
+++ b/packages/riverside/README.md
@@ -0,0 +1,22 @@
+# Riverside SDK
+
+A TypeScript SDK for interacting with the Riverside API.
+
+## Installation
+
+```bash
+npm install @microfox/riverside
+```
+
+## Environment Variables
+
+This package does not require any environment variables.
+
+## API Reference
+
+For detailed documentation on the constructor and all available functions, please refer to the following files:
+
+- [**createRiversideSDK** (Constructor)](./docs/createRiversideSDK.md): Initializes the client.
+- [listProductions](./docs/listProductions.md)
+- [RIVERSIDE_API_KEY](./docs/RIVERSIDE_API_KEY.md)
+
diff --git a/packages/riverside/codegen-report.md b/packages/riverside/codegen-report.md
new file mode 100644
index 000000000..8dbd45d64
--- /dev/null
+++ b/packages/riverside/codegen-report.md
@@ -0,0 +1,51 @@
+# Packagefox: Code Generation Report
+
+## Generated Files
+| File | Size (bytes) |
+|------|-------------|
+| src/RiversideSdk.ts | 3207 |
+| src/types/index.ts | 1350 |
+| src/schemas/index.ts | 3571 |
+| src/index.ts | 77 |
+
+## Setup Information
+- **Auth Type**: apikey
+
+
+- **Setup Info**: To use the Riverside SDK, you need to obtain an API key by contacting your Riverside customer success member. Once you have the API key, you can initialize the SDK like this:
+
+```typescript
+import { createRiversideSDK } from '@microfox/riverside';
+
+const riversideSDK = createRiversideSDK({
+ apiKey: 'YOUR_API_KEY_HERE'
+});
+```
+
+Make sure to keep your API key secure and never expose it in client-side code.
+
+The SDK uses the native `fetch` API available in Node.js 20+. Ensure you're using a compatible Node.js version.
+
+Rate Limiting:
+- The SDK respects rate limits for each endpoint.
+- Implement retry mechanisms with exponential backoff in your application logic if needed.
+
+Error Handling:
+- The SDK throws custom errors for various scenarios (network issues, API errors, etc.).
+- Always wrap SDK calls in try-catch blocks to handle potential errors.
+
+Pagination:
+- For endpoints that support pagination, the SDK provides helper methods to iterate through pages.
+
+File Downloads:
+- The SDK provides methods to download media files and transcriptions.
+- Handle the returned streams appropriately in your application.
+
+API Versioning:
+- The SDK uses different API versions (v1 and v2) for different endpoints as per the Riverside API.
+- This is handled internally by the SDK, but be aware of potential differences in response structures.
+
+
+
+---
+**Total Usage:** Total Bytes: 8205 | Tokens: 419693 | Cost: $1.6824
\ No newline at end of file
diff --git a/packages/riverside/doc-report.md b/packages/riverside/doc-report.md
new file mode 100644
index 000000000..ce6830726
--- /dev/null
+++ b/packages/riverside/doc-report.md
@@ -0,0 +1,10 @@
+# Packagefox: Documentation Report
+
+| Step | Status | Details | Error |
+|------|--------|---------|-------|
+| 📝 generate | ✅ | Generated Docs: 5 | |
+| âś… validate | âś… | Total Tokens: 7608
Constructor Docs: 579
Functions Docs: 2
Env Keys: 0 | |
+| đź’ľ save | âś… | constructor: createRiversideSDK
functions: 2
envKeys: 0 | |
+
+---
+**Total Usage:** Tokens: 427301 | Cost: $1.7117
\ No newline at end of file
diff --git a/packages/riverside/docSummary.md b/packages/riverside/docSummary.md
new file mode 100644
index 000000000..ccdd96aa5
--- /dev/null
+++ b/packages/riverside/docSummary.md
@@ -0,0 +1,100 @@
+## Riverside API TypeScript SDK Summary
+
+This summary provides the necessary information to generate a TypeScript SDK for the Riverside.fm Business API. It details endpoints, data structures, authentication, and other crucial aspects for implementation.
+
+**Authentication:**
+
+* API Key (Bearer token): Obtained by contacting your Riverside customer success member. This key should be included in the `Authorization` header for all requests as `BEARER YOUR_API_KEY`.
+
+**Data Structures (TypeScript Interfaces):**
+
+```typescript
+interface Production {
+ id: string;
+ name: string;
+ created_date: string;
+ studios: Studio[];
+ num_recordings: number;
+}
+
+interface Studio {
+ id: string;
+ name: string;
+ created_date: string;
+ projects: Project[];
+ num_recordings: number;
+}
+
+interface Project {
+ id: string;
+ name: string;
+ created_date: string;
+ num_recordings: number;
+}
+
+interface Recording {
+ id: string; // v1
+ recording_id: string; // v2
+ name: string;
+ project_id: string;
+ project_name: string;
+ studio_id: string;
+ studio_name: string;
+ status: "uploading" | "processing" | "ready";
+ created_date: string;
+ tracks: Track[];
+ transcription?: Transcription;
+}
+
+interface Track {
+ id: string;
+ type: "participant" | "screenshare" | "media board";
+ status: "done" | "processing" | "uploading" | "stopped";
+ files: File[];
+}
+
+interface File {
+ name?: string; // Present in v1 download file response
+ size?: number; // Present in v1 download file response
+ type: "txt" | "srt" | "raw_video" | "aligned_video" | "raw_audio" | "compressed_audio" | "cloud_recording";
+ download_url: string;
+}
+
+interface Transcription {
+ status: "transcribing" | "done";
+ files: File[];
+}
+
+interface ListRecordingsResponse {
+ page: number;
+ next_page_url: string | null;
+ total_items: number;
+ total_pages: number;
+ data: Recording[];
+}
+
+```
+
+**Endpoints:**
+
+| Endpoint | Method | Description | Authentication | Request Parameters | Request Body | Response | Rate Limit | Edge Cases |
+|---|---|---|---|---|---|---|---|---|
+| `/api/v2/productions` | `GET` | Lists all productions with associated studios, projects, and recordings. | API Key | None | None | `Production[]` | 3 minutes | None |
+| `/api/v2/recordings` | `GET` | Lists recordings, optionally filtered by `studioId` or `projectId`. Supports pagination. | API Key | `studioId` (string, optional), `projectId` (string, optional), `page` (number, optional, defaults to 0) | None | `ListRecordingsResponse` | 30 seconds per unique request | Only one filter parameter allowed at a time. Handle pagination using `next_page_url`. |
+| `/api/v1/recordings/{recording_id}` | `GET` | Retrieves a single recording by ID. | API Key | `recording_id` (string, path parameter) | None | `Recording` | 30 seconds per unique recording | Handle 404 Not Found. |
+| `/api/v1/download/file/{file_id}` | `GET` | Downloads a media file. | API Key | `file_id` (string, path parameter) | None | File stream (binary data) | 30 seconds per unique file | Handle different content types in the response. |
+| `/api/v1/download/transcription/{file_id}` | `GET` | Downloads a transcription file. | API Key | `file_id` (string, path parameter), `type` (string, query parameter - "srt" or "txt") | None | File stream (text data) | 3 minutes per unique request | Ensure correct handling of `type` parameter. |
+| `/api/v1/recordings/{recording_id}` | `DELETE` | Deletes a recording. | API Key | `recording_id` (string, path parameter) | None | 204 No Content | None specified | Handle 404 Not Found. |
+
+
+**SDK Considerations:**
+
+* **TypeScript:** Use the provided interfaces for type safety.
+* **Error Handling:** Implement robust error handling for all API calls, including checking HTTP status codes and potential network issues.
+* **Rate Limiting:** Respect the rate limits for each endpoint to avoid request failures. Implement retry mechanisms with exponential backoff.
+* **Pagination:** For `/api/v2/recordings`, handle pagination using the `next_page_url` field.
+* **File Downloads:** Implement appropriate methods for downloading and handling binary file data for media files and text data for transcriptions.
+* **API Versioning:** Be mindful of the different API versions (v1 and v2) used for different endpoints. Clearly document these differences in the SDK.
+
+
+This comprehensive summary should provide a solid foundation for building a robust and type-safe TypeScript SDK for the Riverside.fm Business API. Remember to consult the original documentation for any updates or clarifications.
diff --git a/packages/riverside/docs/RIVERSIDE_API_KEY.md b/packages/riverside/docs/RIVERSIDE_API_KEY.md
new file mode 100644
index 000000000..2ca484caa
--- /dev/null
+++ b/packages/riverside/docs/RIVERSIDE_API_KEY.md
@@ -0,0 +1,58 @@
+## Function: `listRecordings`
+
+Lists recordings based on provided criteria.
+
+**Purpose:**
+Retrieves a list of recordings, optionally filtered by studioId or projectId, and paginated.
+
+**Parameters:**
+
+- `options`: object (optional) - An object containing filter and pagination options.
+ - `studioId`: string (optional) - The ID of the studio to filter recordings by.
+ - `projectId`: string (optional) - The ID of the project to filter recordings by.
+ - `page`: number (optional) - The page number to retrieve.
+
+**Return Value:**
+
+- `Promise` - A promise that resolves to a `ListRecordingsResponse` object.
+ - `ListRecordingsResponse`: object
+ - `page`: number - The current page number.
+ - `next_page_url`: string | null - The URL for the next page, or null if there is no next page.
+ - `total_items`: number - The total number of items across all pages.
+ - `total_pages`: number - The total number of pages.
+ - `data`: array - An array of `Recording` objects.
+ - `Recording`: object
+ - `id`: string - The unique identifier of the recording (v1).
+ - `recording_id`: string - The unique identifier of the recording (v2).
+ - `name`: string - The name of the recording.
+ - `project_id`: string - The ID of the project this recording belongs to.
+ - `project_name`: string - The name of the project this recording belongs to.
+ - `studio_id`: string - The ID of the studio this recording belongs to.
+ - `studio_name`: string - The name of the studio this recording belongs to.
+ - `status`: "uploading" | "processing" | "ready" - The status of the recording.
+ - `created_date`: string - The creation date of the recording.
+ - `tracks`: array