{"_id":"@elegantys/s3-sdk","name":"@elegantys/s3-sdk","dist-tags":{"latest":"0.0.1"},"versions":{"0.0.1":{"name":"@elegantys/s3-sdk","version":"0.0.1","description":"SDK para servicio S3 compatible en JavaScript","main":"dist/index.js","module":"dist/index.esm.js","browser":"dist/index.umd.js","types":"dist/types/index.d.ts","type":"module","scripts":{"build":"rollup -c","build:watch":"rollup -c -w","prepublishOnly":"npm run build","test":"jest","test:watch":"jest --watch","lint":"eslint src","format":"prettier --write \"src/**/*.js\"","docs":"jsdoc -c jsdoc.json"},"keywords":["s3","storage","aws-s3","sdk","javascript","nestjs"],"author":{"name":"DevForge"},"license":"MIT","devDependencies":{"@babel/core":"^7.23.0","@babel/preset-env":"^7.23.0","@rollup/plugin-babel":"^6.0.0","@rollup/plugin-commonjs":"^25.0.0","@rollup/plugin-json":"^6.0.0","@rollup/plugin-node-resolve":"^15.0.0","@rollup/plugin-terser":"^0.4.0","@types/node":"^20.0.0","eslint":"^8.0.0","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.0","jest":"^29.0.0","jsdoc":"^4.0.0","prettier":"^3.0.0","rollup":"^4.0.0","rollup-plugin-copy":"^3.0.0","rollup-plugin-dts":"^6.0.0","rollup-plugin-filesize":"^10.0.0","rollup-plugin-peer-deps-external":"^2.2.0","rollup-plugin-typescript2":"^0.36.0"},"dependencies":{"axios":"^1.6.0","axios-retry":"^3.8.0"},"peerDependencies":{"axios":"^1.6.0"},"engines":{"node":">=12.0.0"},"_id":"@elegantys/s3-sdk@0.0.1","_nodeVersion":"20.17.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-YGYLN/a+ydyEwGHoHnInzVvrlEGkQdtvu6jUGCU+z7n58NqHre1x3uej4kDzM/M9lMMoASArpwfZsZBhcne8kw==","shasum":"d43ae25c464892993fddf0c80950c10bf17af8b6","tarball":"https://registry.npmjs.org/@elegantys/s3-sdk/-/s3-sdk-0.0.1.tgz","fileCount":9,"unpackedSize":406626,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCv5U2E6rOaglkE6Vam2cr5w2Nu0E94fRWnzsCQpSB4TwIhAP6kJfQUC4RcXATTR0e0EzKOzAccQnx5uksoiZoQHP6S"}]},"_npmUser":{"name":"williamamed","email":"watamayo90@gmail.com"},"directories":{},"maintainers":[{"name":"williamamed","email":"watamayo90@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/s3-sdk_0.0.1_1782595538092_0.5021279554063676"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-27T21:25:37.967Z","0.0.1":"2026-06-27T21:25:38.247Z","modified":"2026-06-27T21:25:38.440Z"},"maintainers":[{"name":"williamamed","email":"watamayo90@gmail.com"}],"description":"SDK para servicio S3 compatible en JavaScript","keywords":["s3","storage","aws-s3","sdk","javascript","nestjs"],"author":{"name":"DevForge"},"license":"MIT","readme":"# S3 JavaScript SDK\n\nSDK en JavaScript para el servicio S3 compatible de NestJS. Funciona en navegador y Node.js.\n\n## Instalación\n\n```bash\nnpm install s3-javascript-sdk\n```\n\n## Uso básico\n\n### En navegador\n\n```javascript\nimport S3 from 's3-javascript-sdk';\n\nconst s3 = new S3({\n  endpoint: 'http://localhost:3000/s3',\n  bucket: 'mi-bucket'\n});\n\n// Subir archivo\nconst file = document.getElementById('fileInput').files[0];\nconst result = await s3.uploadFile(file, {\n  onProgress: (progress) => {\n    console.log(`${progress.percentage}%`);\n  }\n});\n\nconsole.log('Archivo subido:', result);\n```\n\n### En Node.js\n\n```javascript\nconst S3 = require('s3-javascript-sdk');\nconst fs = require('fs');\n\nconst s3 = new S3({\n  endpoint: 'http://localhost:3000/s3',\n  bucket: 'mi-bucket'\n});\n\n// Subir archivo desde disco\nconst fileBuffer = fs.readFileSync('./archivo.pdf');\nconst result = await s3.uploadBuffer(fileBuffer, 'documentos/archivo.pdf', {\n  contentType: 'application/pdf'\n});\n\nconsole.log('Archivo subido:', result);\n```\n\n## API\n\n### Constructor\n\n```javascript\nconst s3 = new S3(config);\n```\n\n**config**: Objeto con las siguientes propiedades:\n- `endpoint` (string): URL base del servicio S3 (ej: 'http://localhost:3000/s3')\n- `accessKeyId` (string, opcional): Access key ID para autenticación\n- `secretAccessKey` (string, opcional): Secret access key para autenticación\n- `region` (string, opcional): Región (default: 'us-east-1')\n- `bucket` (string, opcional): Bucket por defecto\n- `timeout` (number, opcional): Timeout en ms (default: 30000)\n- `retries` (number, opcional): Número de reintentos (default: 3)\n\n### Métodos principales\n\n#### Buckets\n- `listBuckets()` - Lista todos los buckets\n- `createBucket(name, region?)` - Crea un nuevo bucket\n- `deleteBucket(name)` - Elimina un bucket\n\n#### Objetos\n- `listObjects(bucket, options?)` - Lista objetos en un bucket\n- `uploadFile(file, options?)` - Sube un archivo (File/Blob)\n- `uploadBuffer(buffer, key, options?)` - Sube un buffer (Node.js)\n- `uploadMultipleFiles(files, options?)` - Sube múltiples archivos\n- `downloadFile(bucket, key)` - Descarga un archivo\n- `deleteFile(bucket, key)` - Elimina un archivo\n- `getFileUrl(bucket, key, expiresIn?)` - Obtiene URL pública\n- `copyFile(sourceBucket, sourceKey, destBucket, destKey)` - Copia un archivo\n\n#### URLs presignadas\n- `generatePresignedUrl(bucket, key, options?)` - Genera URL temporal\n- `generatePostPolicy(bucket, key, options?)` - Genera política POST\n\n#### Multipart Uploads\n- `initiateMultipartUpload(bucket, key, metadata?)` - Inicia upload multiparte\n- `uploadPart(bucket, key, uploadId, partNumber, data)` - Sube una parte\n- `completeMultipartUpload(bucket, key, uploadId, parts)` - Completa upload\n- `abortMultipartUpload(bucket, key, uploadId)` - Aborta upload\n\n## Ejemplos completos\n\n### Subida con progreso\n\n```javascript\nconst result = await s3.uploadFile(file, {\n  bucket: 'mi-bucket',\n  key: 'carpeta/' + file.name,\n  metadata: {\n    author: 'usuario',\n    project: 'demo'\n  },\n  onProgress: (progress) => {\n    console.log(`Progreso: ${progress.percentage}%`);\n  }\n});\n```\n\n### Subida múltiple\n\n```javascript\nconst results = await s3.uploadMultipleFiles(files, {\n  bucket: 'mi-bucket',\n  onProgress: (progress) => {\n    console.log(`Archivo ${progress.fileName}: ${progress.percentage}%`);\n  },\n  onFileComplete: (result) => {\n    console.log('Archivo completado:', result.file.name);\n  }\n});\n```\n\n### Generar URL firmada\n\n```javascript\nconst url = await s3.generatePresignedUrl('mi-bucket', 'documento.pdf', {\n  expiresIn: 3600, // 1 hora\n  method: 'GET'\n});\n\n// Usar la URL\nwindow.open(url);\n```\n\n## Licencia\n\nMIT","readmeFilename":"README.md","_rev":"1-4670847fb0bbec8e4e57cc9c3973195c"}