Integration Runtime Layer
uploads
Large-file uploads — S3 / R2 multipart, Tus resumable, presigned URLs. Picks the right strategy by file size automatically.
report-Q4-2025.pdf48.2 MB
62% · part 6 of 1000:14
S3multipart · resumable
In code
uploads.ts
1import { getUploadProvider } from "@nebutra/uploads";
2
3const uploads = await getUploadProvider();
4
5// Small file — presigned PUT.
6const { url, headers } = await uploads.createPresignedUpload({
7 bucket: "nebutra-uploads",
8 key: `docs/${file.name}`,
9 contentType: file.type,
10 tenantId: org.id,
11});
12
13// Large file — resumable multipart.
14const mp = await uploads.createMultipartUpload({ bucket, key }, 10);More in nebutra.com
- admin-toolingSelf-serve operator dashboards — tenants, billing overrides, feature-flag flips — all gated by @nebutra/permissions.
- cacheTag-based cache with Redis, Upstash, or in-memory backend. Same get/set/invalidate(tags) for serverless and self-hosted.
- collabRealtime co-editing primitives — Yjs CRDT, WebSocket transport, presence cursors. The piece every multi-user app eventually needs.
- emailRender React Email templates, dispatch through Resend / SES / SMTP. One sendEmail(template, props, recipient) for every transactional flow.
- event-busIn-process pub/sub with cross-app fanout. Used by audit, billing, and notifications to react to commerce events without circular imports.
- integration-vaultPer-tenant credential store for OAuth integrations and API keys — Creem, Gmail OAuth, Notion API. KMS-wrapped, refresh-rotated.