Ingestion Strategies
S3 Strategy
Features
- Products
- Usage Based Billing
- Benefits
- Checkout
- Discounts
- Orders & Subscriptions
- Refunds
- Analytics
- Customer Management
- Customer Portal
- Finance & Payouts
- Integrations
Integrate
- Authentication
- Sandbox Environment
- Customer State
- Model Context Protocol (MCP)
- SDKs
- Framework Adapters
- Framework Guides
- Webhooks
- OAuth 2.0
Merchant of Record (MoR)
Ingestion Strategies
S3 Strategy
Ingestion strategy for S3 Operations
Javascript SDK
Wrap the official AWS S3 Client with our S3 Ingestion Strategy to automatically ingest bytes uploaded.
pnpm add @polar-sh/ingestion @aws-sdk/client-s3
import { Ingestion } from "@polar-sh/ingestion";
import { S3Strategy } from "@polar-sh/ingestion/strategies/S3";
import { PutObjectCommand, S3Client } from "@aws-sdk/client-s3";
const s3Client = new S3Client({
region: process.env.AWS_REGION,
endpoint: process.env.AWS_ENDPOINT_URL,
credentials: {
accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
},
});
// Setup the S3 Ingestion Strategy
const s3Ingestion = Ingestion({ accessToken: process.env.POLAR_ACCESS_TOKEN })
.strategy(new S3Strategy(s3Client))
.ingest("s3-uploads");
export async function POST(request: Request) {
try {
// Get the wrapped S3 Client
// Pass Customer Id to properly annotate the ingestion events with a specific customer
const s3 = s3Ingestion.client({
customerId: request.headers.get("X-Polar-Customer-Id") ?? "",
});
await s3.send(
new PutObjectCommand({
Bucket: process.env.AWS_BUCKET_NAME,
Key: "a-random-key",
Body: JSON.stringify({
name: "John Doe",
age: 30,
}),
ContentType: "application/json",
})
);
return Response.json({});
} catch (error) {
return Response.json({ error: error.message });
}
}
Ingestion Payload
{
"customerId": "123",
"name": "s3-uploads",
"metadata": {
"bytes": 100,
"bucket": "my-bucket",
"key": "my-key",
"contentType": "application/text"
}
}
Was this page helpful?
On this page