mirror of
https://github.com/supermemoryai/supermemory.git
synced 2026-05-22 03:01:07 +00:00
435 lines
12 KiB
Text
435 lines
12 KiB
Text
---
|
|
title: "Google Drive Connector"
|
|
description: "Connect Google Drive to sync documents into your Supermemory knowledge base"
|
|
icon: "google-drive"
|
|
---
|
|
|
|
Connect Google Drive to sync documents into your Supermemory knowledge base with OAuth authentication and custom app support.
|
|
|
|
## Quick Setup
|
|
|
|
### 1. Create Google Drive Connection
|
|
|
|
<Tabs>
|
|
<Tab title="TypeScript">
|
|
```typescript
|
|
import Supermemory from 'supermemory';
|
|
|
|
const client = new Supermemory({
|
|
apiKey: process.env.SUPERMEMORY_API_KEY!
|
|
});
|
|
|
|
const connection = await client.connections.create('google-drive', {
|
|
redirectUrl: 'https://yourapp.com/auth/google-drive/callback',
|
|
containerTags: ['user-123', 'gdrive-sync'],
|
|
documentLimit: 3000,
|
|
metadata: {
|
|
source: 'google-drive',
|
|
department: 'engineering'
|
|
}
|
|
});
|
|
|
|
// Redirect user to Google OAuth
|
|
window.location.href = connection.authLink;
|
|
console.log('Auth expires in:', connection.expiresIn);
|
|
```
|
|
</Tab>
|
|
<Tab title="Python">
|
|
```python
|
|
from supermemory import Supermemory
|
|
import os
|
|
|
|
client = Supermemory(api_key=os.environ.get("SUPERMEMORY_API_KEY"))
|
|
|
|
connection = client.connections.create(
|
|
'google-drive',
|
|
redirect_url='https://yourapp.com/auth/google-drive/callback',
|
|
container_tags=['user-123', 'gdrive-sync'],
|
|
document_limit=3000,
|
|
metadata={
|
|
'source': 'google-drive',
|
|
'department': 'engineering'
|
|
}
|
|
)
|
|
|
|
# Redirect user to Google OAuth
|
|
print(f'Redirect to: {connection.auth_link}')
|
|
print(f'Expires in: {connection.expires_in}')
|
|
```
|
|
</Tab>
|
|
<Tab title="cURL">
|
|
```bash
|
|
curl -X POST "https://api.supermemory.ai/v3/connections/google-drive" \
|
|
-H "Authorization: Bearer $SUPERMEMORY_API_KEY" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"redirectUrl": "https://yourapp.com/auth/google-drive/callback",
|
|
"containerTags": ["user-123", "gdrive-sync"],
|
|
"documentLimit": 3000,
|
|
"metadata": {
|
|
"source": "google-drive",
|
|
"department": "engineering"
|
|
}
|
|
}'
|
|
```
|
|
</Tab>
|
|
</Tabs>
|
|
|
|
### 2. Handle OAuth Callback
|
|
|
|
After user grants permissions, Google redirects to your callback URL. The connection is automatically established.
|
|
|
|
### 3. Check Connection Status
|
|
|
|
<Tabs>
|
|
<Tab title="TypeScript">
|
|
```typescript
|
|
// Get connection details
|
|
const connection = await client.connections.getByTags('google-drive', {
|
|
containerTags: ['user-123', 'gdrive-sync']
|
|
});
|
|
```
|
|
</Tab>
|
|
<Tab title="Python">
|
|
```python
|
|
# Get connection details
|
|
connection = client.connections.get_by_tags(
|
|
'google-drive',
|
|
container_tags=['user-123', 'gdrive-sync']
|
|
)
|
|
|
|
# List synced documents
|
|
documents = client.connections.list_documents(
|
|
'google-drive',
|
|
container_tags=['user-123', 'gdrive-sync']
|
|
)
|
|
```
|
|
</Tab>
|
|
<Tab title="cURL">
|
|
```bash
|
|
# Get connections by provider and tags
|
|
curl -X POST "https://api.supermemory.ai/v3/connections/list" \
|
|
-H "Authorization: Bearer $SUPERMEMORY_API_KEY" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"containerTags": ["user-123", "gdrive-sync"],
|
|
"provider": "google-drive"
|
|
}'
|
|
|
|
# List synced documents
|
|
curl -X POST "https://api.supermemory.ai/v3/documents/list" \
|
|
-H "Authorization: Bearer $SUPERMEMORY_API_KEY" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"containerTags": ["user-123", "gdrive-sync"],
|
|
"source": "google-drive"
|
|
}'
|
|
```
|
|
</Tab>
|
|
</Tabs>
|
|
|
|
## Supported Document Types
|
|
|
|
Based on the API type definitions, Google Drive documents are identified with these types:
|
|
- `google_doc` - Google Docs
|
|
- `google_slide` - Google Slides
|
|
- `google_sheet` - Google Sheets
|
|
|
|
## Connection Management
|
|
|
|
### List All Connections
|
|
|
|
<Tabs>
|
|
<Tab title="TypeScript">
|
|
```typescript
|
|
// List all connections for specific container tags
|
|
const connections = await client.connections.list({
|
|
containerTags: ['user-123']
|
|
});
|
|
|
|
connections.forEach(conn => {
|
|
console.log(`Provider: ${conn.provider}`);
|
|
console.log(`ID: ${conn.id}`);
|
|
console.log(`Email: ${conn.email}`);
|
|
console.log(`Created: ${conn.createdAt}`);
|
|
console.log(`Document limit: ${conn.documentLimit}`);
|
|
console.log('---');
|
|
});
|
|
```
|
|
</Tab>
|
|
<Tab title="Python">
|
|
```python
|
|
# List all connections for specific container tags
|
|
connections = client.connections.list(
|
|
container_tags=['user-123']
|
|
)
|
|
|
|
for conn in connections:
|
|
print(f'Provider: {conn.provider}')
|
|
print(f'ID: {conn.id}')
|
|
print(f'Email: {conn.email}')
|
|
print(f'Created: {conn.created_at}')
|
|
print(f'Document limit: {conn.document_limit}')
|
|
print('---')
|
|
```
|
|
</Tab>
|
|
<Tab title="cURL">
|
|
```bash
|
|
# List all connections for specific container tags
|
|
curl -X POST "https://api.supermemory.ai/v3/connections/list" \
|
|
-H "Authorization: Bearer $SUPERMEMORY_API_KEY" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"containerTags": ["user-123"]
|
|
}'
|
|
|
|
# Response example:
|
|
# [
|
|
# {
|
|
# "id": "conn_gd123",
|
|
# "provider": "google-drive",
|
|
# "email": "user@example.com",
|
|
# "createdAt": "2024-01-15T10:30:00.000Z",
|
|
# "documentLimit": 3000
|
|
# }
|
|
# ]
|
|
```
|
|
</Tab>
|
|
</Tabs>
|
|
|
|
### Delete Connection
|
|
|
|
<Tabs>
|
|
<Tab title="TypeScript">
|
|
```typescript
|
|
// Delete by connection ID
|
|
const result = await client.connections.deleteByID('connection_id_123');
|
|
console.log('Deleted connection:', result.id);
|
|
|
|
// Delete by provider and container tags
|
|
const providerResult = await client.connections.deleteByProvider('google-drive', {
|
|
containerTags: ['user-123']
|
|
});
|
|
console.log('Deleted provider connection:', providerResult.id);
|
|
```
|
|
</Tab>
|
|
<Tab title="Python">
|
|
```python
|
|
# Delete by connection ID
|
|
result = client.connections.delete_by_id('connection_id_123')
|
|
print(f'Deleted connection: {result.id}')
|
|
|
|
# Delete by provider and container tags
|
|
provider_result = client.connections.delete_by_provider(
|
|
'google-drive',
|
|
container_tags=['user-123']
|
|
)
|
|
print(f'Deleted provider connection: {provider_result.id}')
|
|
```
|
|
</Tab>
|
|
<Tab title="cURL">
|
|
```bash
|
|
# Delete by connection ID
|
|
curl -X DELETE "https://api.supermemory.ai/v3/connections/connection_id_123" \
|
|
-H "Authorization: Bearer $SUPERMEMORY_API_KEY"
|
|
|
|
# Response: {"id": "connection_id_123", "provider": "google-drive"}
|
|
|
|
# Delete by provider and container tags
|
|
curl -X DELETE "https://api.supermemory.ai/v3/connections/google-drive" \
|
|
-H "Authorization: Bearer $SUPERMEMORY_API_KEY" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"containerTags": ["user-123"]
|
|
}'
|
|
|
|
# Response: {"id": "conn_gd123", "provider": "google-drive"}
|
|
```
|
|
</Tab>
|
|
</Tabs>
|
|
|
|
<Note>
|
|
Deleting a connection will:
|
|
- Stop all future syncs from Google Drive
|
|
- Remove the OAuth authorization
|
|
- Keep existing synced documents in Supermemory (they won't be deleted)
|
|
</Note>
|
|
|
|
### Manual Sync
|
|
|
|
Trigger a manual synchronization:
|
|
|
|
<Tabs>
|
|
<Tab title="TypeScript">
|
|
```typescript
|
|
// Trigger sync for Google Drive connections
|
|
await client.connections.import('google-drive');
|
|
|
|
// Trigger sync for specific container tags
|
|
await client.connections.import('google-drive', {
|
|
containerTags: ['user-123']
|
|
});
|
|
|
|
console.log('Manual sync initiated');
|
|
```
|
|
</Tab>
|
|
<Tab title="Python">
|
|
```python
|
|
# Trigger sync for Google Drive connections
|
|
client.connections.import_('google-drive')
|
|
|
|
# Trigger sync for specific container tags
|
|
client.connections.import_(
|
|
'google-drive',
|
|
container_tags=['user-123']
|
|
)
|
|
|
|
print('Manual sync initiated')
|
|
```
|
|
</Tab>
|
|
<Tab title="cURL">
|
|
```bash
|
|
# Trigger sync for all Google Drive connections
|
|
curl -X POST "https://api.supermemory.ai/v3/connections/google-drive/import" \
|
|
-H "Authorization: Bearer $SUPERMEMORY_API_KEY"
|
|
|
|
# Trigger sync for specific container tags
|
|
curl -X POST "https://api.supermemory.ai/v3/connections/google-drive/import" \
|
|
-H "Authorization: Bearer $SUPERMEMORY_API_KEY" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"containerTags": ["user-123"]
|
|
}'
|
|
|
|
# Response: {"message": "Manual sync initiated", "provider": "google-drive"}
|
|
```
|
|
</Tab>
|
|
</Tabs>
|
|
|
|
|
|
|
|
## Advanced Configuration
|
|
|
|
### Custom OAuth Application
|
|
|
|
Configure your own Google OAuth app using the settings API:
|
|
|
|
<Tabs>
|
|
<Tab title="TypeScript">
|
|
```typescript
|
|
// Update organization settings with your Google OAuth app
|
|
await client.settings.update({
|
|
googleDriveCustomKeyEnabled: true,
|
|
googleDriveClientId: 'your-google-client-id.googleusercontent.com',
|
|
googleDriveClientSecret: 'your-google-client-secret'
|
|
});
|
|
|
|
// Get current settings
|
|
const settings = await client.settings.get();
|
|
console.log('Google Drive custom key enabled:', settings.googleDriveCustomKeyEnabled);
|
|
console.log('Client ID configured:', !!settings.googleDriveClientId);
|
|
```
|
|
</Tab>
|
|
<Tab title="Python">
|
|
```python
|
|
# Update organization settings with your Google OAuth app
|
|
client.settings.update(
|
|
google_drive_custom_key_enabled=True,
|
|
google_drive_client_id='your-google-client-id.googleusercontent.com',
|
|
google_drive_client_secret='your-google-client-secret'
|
|
)
|
|
|
|
# Get current settings
|
|
settings = client.settings.get()
|
|
print(f'Google Drive custom key enabled: {settings.google_drive_custom_key_enabled}')
|
|
print(f'Client ID configured: {bool(settings.google_drive_client_id)}')
|
|
```
|
|
</Tab>
|
|
<Tab title="cURL">
|
|
```bash
|
|
# Update organization settings
|
|
curl -X PATCH "https://api.supermemory.ai/v3/settings" \
|
|
-H "Authorization: Bearer $SUPERMEMORY_API_KEY" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"googleDriveCustomKeyEnabled": true,
|
|
"googleDriveClientId": "your-google-client-id.googleusercontent.com",
|
|
"googleDriveClientSecret": "your-google-client-secret"
|
|
}'
|
|
|
|
# Get current settings
|
|
curl -X GET "https://api.supermemory.ai/v3/settings" \
|
|
-H "Authorization: Bearer $SUPERMEMORY_API_KEY"
|
|
```
|
|
</Tab>
|
|
</Tabs>
|
|
|
|
### Document Filtering
|
|
|
|
Configure filtering using the settings API:
|
|
|
|
<Tabs>
|
|
<Tab title="TypeScript">
|
|
```typescript
|
|
await client.settings.update({
|
|
shouldLLMFilter: true,
|
|
filterPrompt: "Only sync important business documents",
|
|
includeItems: {
|
|
// Your include patterns
|
|
},
|
|
excludeItems: {
|
|
// Your exclude patterns
|
|
}
|
|
});
|
|
```
|
|
</Tab>
|
|
<Tab title="Python">
|
|
```python
|
|
client.settings.update(
|
|
should_llm_filter=True,
|
|
filter_prompt="Only sync important business documents",
|
|
include_items={
|
|
# Your include patterns
|
|
},
|
|
exclude_items={
|
|
# Your exclude patterns
|
|
}
|
|
)
|
|
```
|
|
</Tab>
|
|
<Tab title="cURL">
|
|
```bash
|
|
# Configure document filtering
|
|
curl -X PATCH "https://api.supermemory.ai/v3/settings" \
|
|
-H "Authorization: Bearer $SUPERMEMORY_API_KEY" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"shouldLLMFilter": true,
|
|
"filterPrompt": "Only sync important business documents",
|
|
"includeItems": {
|
|
"patterns": ["*.pdf", "*.docx"],
|
|
"folders": ["Important Documents", "Projects"]
|
|
},
|
|
"excludeItems": {
|
|
"patterns": ["*.tmp", "*.backup"],
|
|
"folders": ["Archive", "Trash"]
|
|
}
|
|
}'
|
|
|
|
# Response: {
|
|
# "shouldLLMFilter": true,
|
|
# "filterPrompt": "Only sync important business documents",
|
|
# "includeItems": {...},
|
|
# "excludeItems": {...}
|
|
# }
|
|
```
|
|
</Tab>
|
|
</Tabs>
|
|
|
|
<Warning>
|
|
**Important Notes:**
|
|
- OAuth tokens may expire - check `expiresAt` field
|
|
- Document processing happens asynchronously
|
|
- Use container tags consistently for filtering
|
|
- Monitor document status for failed syncs
|
|
</Warning>
|