@chrono-os/digital-products
v0.1.0
Published
Catálogo de produtos digitais (Product/Asset/Membership/DownloadLog) + presigned URLs R2/S3 + access gate por user+productSlug. Reaproveitável em qualquer site de venda de PDFs/cursos
Maintainers
Readme
@chrono-os/digital-products
Catálogo de produtos digitais (Product + Asset + Membership + DownloadLog) com presigned URLs R2/S3 (TTL configurável) + access gate por user+productSlug + audit de downloads (IP hash). Reaproveitável em qualquer site de venda de PDFs, cursos, ou conteúdo digital protegido.
Status
🚧 0.1.0 em construção — código será extraído do SVA na Fase 1 da Trilha C.
Install
yarn add @chrono-os/digital-productsAplicar template Prisma:
cat node_modules/@chrono-os/digital-products/prisma/schema.template.prisma >> prisma/schema.prisma
yarn prisma migrate dev --name add_digital_productsUso
import { digitalProductsPlugin } from '@chrono-os/digital-products/fastify'
await server.register(digitalProductsPlugin, {
storage: {
endpoint: process.env.R2_ENDPOINT,
accessKeyId: process.env.R2_ACCESS_KEY_ID,
secretAccessKey: process.env.R2_SECRET_ACCESS_KEY,
bucket: process.env.R2_BUCKET_NAME,
},
fallbackPublicBaseUrl: process.env.EBOOK_FILES_BASE_URL, // bootstrap mode
signedUrlTtlMinutes: 15,
})
// Rotas expostas (todas auth-gated):
// GET /members/library → lista produtos do user
// POST /members/download/:productSlug → presigned URL + logAPI
digitalProductsPlugin(opts)— Fastify plugingrantMembershipForOrder,listMembershipsForUser,userHasAccess— servicessignObjectUrl(fileKey, opts)— wrapper R2/S3 com TTL- Models Prisma:
Product,Asset,Membership,DownloadLog,BundleItem(self-rel)
Bootstrap mode
Sem credenciais R2: retorna { kind: 'public', url: <fallback> } usando fallbackPublicBaseUrl. Útil em dev.
Versionamento
SemVer. Tag v* → npmjs.org.
Origem
Extraído de apps/api/src/services/membership.service.ts, apps/api/src/lib/storage.ts, apps/api/src/routes/members.ts do SVA. Catálogo (lib/ebooks.ts) NÃO faz parte — o pacote oferece o shape, o consumer provê os dados.
