UNPKG

upup-react-file-uploader

Version:
21 lines 9.49 kB
"use strict";var D=Object.defineProperty;var pe=Object.getOwnPropertyDescriptor;var me=Object.getOwnPropertyNames;var ce=Object.prototype.hasOwnProperty;var de=(t,r)=>{for(var e in r)D(t,e,{get:r[e],enumerable:!0})},ue=(t,r,e,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of me(r))!ce.call(t,n)&&n!==e&&D(t,n,{get:()=>r[n],enumerable:!(o=pe(r,n))||o.enumerable});return t};var ge=t=>ue(D({},"__esModule",{value:!0}),t);var Ie={};de(Ie,{UpupProvider:()=>U,azureGenerateSasUrl:()=>H,s3AbortMultipartUpload:()=>T,s3CompleteMultipartUpload:()=>N,s3GeneratePresignedPartUrl:()=>L,s3GeneratePresignedUrl:()=>z,s3GenerateSignedUrl:()=>E,s3InitiateMultipartUpload:()=>$,s3ListMultipartParts:()=>G});module.exports=ge(Ie);var w=require("@aws-sdk/client-s3");var U=(n=>(n.AWS="aws",n.Azure="azure",n.BackBlaze="backblaze",n.DigitalOcean="digitalocean",n))(U||{});var l=class extends Error{constructor(e,o="UNKNOWN_UPLOAD_ERROR",n=!1,i){super(e);this.type=o;this.retryable=n;this.status=i;this.DEFAULT_ERROR_STATUS_CODE=500;this.name="UploadError",this.status=i??this.DEFAULT_ERROR_STATUS_CODE}};async function T({bucketName:t,s3ClientConfig:r,key:e,uploadId:o}){try{let n=new w.S3Client(r),i=new w.AbortMultipartUploadCommand({Bucket:t,Key:e,UploadId:o});return await n.send(i),{ok:!0}}catch(n){if(n instanceof l)throw n;let i=(n==null?void 0:n.Message)??n.message;throw new l(i,"PRESIGNED_URL_ERROR",!1,500)}}var I=require("@aws-sdk/client-s3");var h=require("@aws-sdk/client-s3"),q=require("@aws-sdk/s3-request-presigner");var fe=3600*24*3;async function E(t,r,e,o=fe){try{let n=new h.S3Client(t);return await(0,q.getSignedUrl)(n,new h.GetObjectCommand({Bucket:e,Key:r}),{expiresIn:o})}catch(n){throw new l(n.message,"SIGNED_URL_ERROR",!1)}}async function N({bucketName:t,s3ClientConfig:r,key:e,uploadId:o,parts:n}){try{let i=new I.S3Client(r),a=new I.CompleteMultipartUploadCommand({Bucket:t,Key:e,UploadId:o,MultipartUpload:{Parts:n.sort((s,d)=>s.partNumber-d.partNumber).map(s=>({PartNumber:s.partNumber,ETag:s.eTag}))}});await i.send(a);let p=await E(r,e,t);return{key:e,publicUrl:p}}catch(i){if(i instanceof l)throw i;let a=(i==null?void 0:i.Message)??i.message;throw new l(a,"PRESIGNED_URL_ERROR",!1,500)}}var _=require("@aws-sdk/client-s3"),X=require("@aws-sdk/s3-request-presigner");var Re=3600;async function L({bucketName:t,s3ClientConfig:r,expiresIn:e=Re,key:o,uploadId:n,partNumber:i,contentLength:a}){try{let p=new _.S3Client(r),s=new _.UploadPartCommand({Bucket:t,Key:o,UploadId:n,PartNumber:i,ContentLength:a});return{uploadUrl:await(0,X.getSignedUrl)(p,s,{expiresIn:e,signableHeaders:new Set(["content-length"])}),expiresIn:e}}catch(p){if(p instanceof l)throw p;let s=(p==null?void 0:p.Message)??p.message;throw new l(s,"PRESIGNED_URL_ERROR",!1,500)}}var O=require("@aws-sdk/client-s3"),Y=require("@aws-sdk/s3-request-presigner"),Z=require("uuid");function v(t,r){var i;let e=r.type;if(!t)return!1;if(e){let[a,p]=e.split("/");if(a&&p){let s=t.split(",").map(c=>c.trim());if(s.includes("*")||s.some(c=>{if(c.includes("/*")){let[m]=c.split("/");return e.startsWith(m)}return c.toLowerCase()===e.toLowerCase()}))return!0}}let o=r.name??"";if(!o)return!1;let n=((i=o.split(".").pop())==null?void 0:i.toLowerCase())||"";return!!(n&&t.split(",").map(s=>s.trim().toLowerCase()).some(s=>s.startsWith(".")?s.slice(1)===n:!1))}function P(t){let e=["name","type","size"].filter(p=>!t[p]);if(e.length>0)throw new l(`Missing required file param: ${e.join(", ")}`,"FILE_VALIDATION_ERROR",!1,400);let{type:o,accept:n="*",size:i,maxFileSize:a=t.maxFileSize}=t;if(!v(n,t))throw new l(`File type ${o} not allowed. Accepted types: ${n}`,"FILE_VALIDATION_ERROR",!1,400);if(a&&i>a)throw new l(`File size: ${i} exceeds maximum limit of ${a/(1024*1024)}MB`,"FILE_VALIDATION_ERROR",!1,413)}var S=require("crypto");function b(t,r){return(0,S.createHmac)("sha256",t).update(r).digest()}function Q(t){return(0,S.createHash)("sha256").update(t).digest("hex")}function Ee(t,r,e,o){let n=b(`AWS4${t}`,r),i=b(n,e),a=b(i,o);return b(a,"aws4_request")}function Pe(t){return(0,S.createHash)("md5").update(t).digest("base64")}function Se(t,r,{endpoint:e,region:o}){switch(r){case"aws":return`${t}.s3.${o}.amazonaws.com`;case"backblaze":return e.split("https://")[1];case"digitalocean":return`${t}.${o}.digitaloceanspaces.com`;default:return""}}function B(t,r,{region:e,credentials:{accessKeyId:o,secretAccessKey:n},endpoint:i},a){let s=Se(r,a,{endpoint:i,region:e}),d=Pe(t),m=new Date().toISOString().replace(/[:-]|\.\d{3}/g,""),u=m.slice(0,8),R="PUT",x={aws:"/",backblaze:`/${r}/`,digitalocean:"/",azure:""}[a],re={aws:"cors=",backblaze:"cors=null",digitalocean:"cors=",azure:""}[a],A=Q(t),ne=`content-md5:${d} content-type:application/xml host:${s} x-amz-content-sha256:${A} x-amz-date:${m} `,V="content-md5;content-type;host;x-amz-content-sha256;x-amz-date",oe=[R,x,re,ne,V,A].join(` `),K="AWS4-HMAC-SHA256",j=`${u}/${e}/s3/aws4_request`,ie=[K,m,j,Q(oe)].join(` `),ae=Ee(n,u,e,"s3"),se=(0,S.createHmac)("sha256",ae).update(ie).digest("hex"),le=`${K} Credential=${o}/${j}, SignedHeaders=${V}, Signature=${se}`;return{"Content-Type":"application/xml","Content-MD5":d,Authorization:le,"x-amz-content-sha256":A,"x-amz-date":m,Host:s}}async function C(t,r,e,o){let i={aws:`https://${r}.s3.${e.region}.amazonaws.com/?cors`,backblaze:`${e.endpoint}/${r}/?cors=null`,digitalocean:`https://${r}.${e.region}.digitaloceanspaces.com/?cors`,azure:""}[o],a=`<?xml version="1.0" encoding="UTF-8"?><CORSConfiguration> <CORSRule> <ID>Allow S3 Operations from my site: ${t}</ID> <AllowedOrigin>${t}</AllowedOrigin> <AllowedHeader>*</AllowedHeader> <AllowedMethod>HEAD</AllowedMethod> <AllowedMethod>PUT</AllowedMethod> <AllowedMethod>GET</AllowedMethod> <AllowedMethod>POST</AllowedMethod> <ExposeHeader>ETag</ExposeHeader> <MaxAgeSeconds>3600</MaxAgeSeconds> </CORSRule> </CORSConfiguration>`,p=B(a,r,e,o),s=await fetch(i,{method:"PUT",body:a,headers:p});if(!s.ok){let c=await s.text();throw new l(c,"CORS_CONFIG_ERROR",!1,s.status)}return await s.text()}var ye=3600;function Ue(t){let r=(t==null?void 0:t.Message)??t.message,e=(t==null?void 0:t.Code)??"PRESIGNED_URL_ERROR";return{message:r,errorType:e}}async function z({fileParams:t,bucketName:r,s3ClientConfig:e,expiresIn:o=ye,origin:n,provider:i,enableAutoCorsConfig:a=!1}){let{name:p,type:s,size:d}=t;try{P(t),a&&await C(n,r,e,i);let c=new O.S3Client(e),m=`${(0,Z.v4)()}-${p}`,u=new O.PutObjectCommand({Bucket:r,Key:m,ContentType:s,ContentLength:d}),R=await(0,Y.getSignedUrl)(c,u,{expiresIn:o,signableHeaders:new Set(["content-type","content-length"])}),y=await E(e,m,r);return{key:m,publicUrl:y,uploadUrl:R,expiresIn:o}}catch(c){if(c instanceof l)throw c;let{message:m,errorType:u}=Ue(c);throw new l(m,u,!1,500)}}var M=require("@aws-sdk/client-s3"),J=require("uuid");var Ce=3600,k=5*1024*1024,we=1e4;function he(t,r){let e=r??k;e<k&&(e=k);let o=Math.ceil(t/we);return e<o&&(e=o),e}async function $({fileParams:t,bucketName:r,s3ClientConfig:e,expiresIn:o=Ce,origin:n,provider:i,enableAutoCorsConfig:a=!1,chunkSizeBytes:p}){let{name:s,type:d,size:c}=t;try{P(t),a&&await C(n,r,e,i);let m=new M.S3Client(e),u=`${(0,J.v4)()}-${s}`,R=new M.CreateMultipartUploadCommand({Bucket:r,Key:u,ContentType:d}),y=await m.send(R);if(!y.UploadId)throw new Error("Failed to initiate multipart upload: no UploadId");let x=he(c,p);return{key:u,uploadId:y.UploadId,partSize:x,expiresIn:o}}catch(m){if(m instanceof l)throw m;let u=(m==null?void 0:m.Message)??m.message;throw new l(u,"PRESIGNED_URL_ERROR",!1,500)}}var F=require("@aws-sdk/client-s3");async function G({bucketName:t,s3ClientConfig:r,key:e,uploadId:o}){var n,i;try{let a=new F.S3Client(r),p=[],s;for(;;){let d=new F.ListPartsCommand({Bucket:t,Key:e,UploadId:o,PartNumberMarker:s}),c=await a.send(d);if(c.Parts)for(let m of c.Parts)m.PartNumber!=null&&m.ETag&&p.push({partNumber:m.PartNumber,eTag:m.ETag});if(!c.IsTruncated)break;s=String((i=(n=c.Parts)==null?void 0:n[c.Parts.length-1])==null?void 0:i.PartNumber)}return{parts:p}}catch(a){if(a instanceof l)throw a;let p=(a==null?void 0:a.Message)??a.message;throw new l(p,"PRESIGNED_URL_ERROR",!1,500)}}var ee=require("@azure/identity"),f=require("@azure/storage-blob"),te=require("uuid");async function W(t,r=3600){try{let e=new Date,o=new Date(e);return o.setMinutes(e.getMinutes()+r/60),await t.getUserDelegationKey(e,o)}catch(e){throw new l(e.message,"TEMPORARY_CREDENTIALS_ERROR",!1,500)}}async function H({fileParams:t,containerName:r,credentials:e,expiresIn:o=3600}){try{P(t);let n=new ee.ClientSecretCredential(e.tenantId,e.clientId,e.clientSecret),i=new f.BlobServiceClient(`https://${e.storageAccount}.blob.core.windows.net`,n),a=await W(i),{name:p,type:s}=t,d=`${(0,te.v4)()}-${p}`,m=i.getContainerClient(r).getBlobClient(d),u=(0,f.generateBlobSASQueryParameters)({containerName:r,blobName:d,permissions:f.BlobSASPermissions.parse("racw"),startsOn:new Date,expiresOn:new Date(Date.now()+o*1e3),protocol:f.SASProtocol.Https,contentType:s},a,e.storageAccount).toString(),R=`${m.url}?${u}`;return{key:d,publicUrl:m.url,uploadUrl:R,expiresIn:o}}catch(n){throw n instanceof l?n:new l(n.message,"PRESIGNED_URL_ERROR",!1,500)}}0&&(module.exports={UpupProvider,azureGenerateSasUrl,s3AbortMultipartUpload,s3CompleteMultipartUpload,s3GeneratePresignedPartUrl,s3GeneratePresignedUrl,s3GenerateSignedUrl,s3InitiateMultipartUpload,s3ListMultipartParts}); //# sourceMappingURL=index.node.js.map