@nhost/hasura-storage-js
Advanced tools
Comparing version 0.5.3 to 0.6.0
@@ -1,2 +0,2 @@ | ||
import { StorageDeleteParams, StorageDeleteResponse, StorageGetPresignedUrlParams, StorageGetPresignedUrlResponse, StorageGetUrlParams, StorageUploadParams, StorageUploadResponse } from './utils/types'; | ||
import { StorageDeleteParams, StorageDeleteResponse, StorageGetPresignedUrlParams, StorageGetPresignedUrlResponse, StorageGetUrlParams, StorageUploadFileParams, StorageUploadFormDataParams, StorageUploadResponse } from './utils/types'; | ||
interface NhostStorageConstructorParams { | ||
@@ -20,7 +20,12 @@ /** | ||
/** | ||
* Use `nhost.storage.upload` to upload a file. The `file` must be of type [`File`](https://developer.mozilla.org/en-US/docs/Web/API/File). | ||
* Use `nhost.storage.upload` to upload a file. | ||
* | ||
* If no `bucket` is specified the `default` bucket will be used. | ||
* It's possible to use [`File`](https://developer.mozilla.org/en-US/docs/Web/API/File) or [`FormData`](https://developer.mozilla.org/en-US/docs/Web/API/FormData) to upload a file. The `File` instance is only available in the browser while `FormData` with [`form-data`](https://www.npmjs.com/package/form-data) works both in the browser and in NodeJS (server). | ||
* | ||
* If no `bucketId` is specified the bucket `default` is used. | ||
* | ||
* @example | ||
* | ||
* Upload a file from a browser using `File`. | ||
* | ||
* ```ts | ||
@@ -30,2 +35,4 @@ * await nhost.storage.upload({ file }) | ||
* | ||
* Upload a file from a browser using `File` to a specific Bucket. | ||
* | ||
@example | ||
@@ -36,5 +43,18 @@ * ```ts | ||
* | ||
* Upload a file from a server using `FormData` with [`form-data`](https://www.npmjs.com/package/form-data). | ||
* | ||
* @example | ||
* ```ts | ||
* const fd = new FormData() | ||
* fd.append('file', fs.createReadStream('./tests/assets/sample.pdf')) | ||
* | ||
* await storage.upload({ | ||
* formData: fd | ||
* }) | ||
* ``` | ||
* | ||
* @docs https://docs.nhost.io/reference/javascript/storage/upload | ||
*/ | ||
upload(params: StorageUploadParams): Promise<StorageUploadResponse>; | ||
upload(params: StorageUploadFileParams): Promise<StorageUploadResponse>; | ||
upload(params: StorageUploadFormDataParams): Promise<StorageUploadResponse>; | ||
/** | ||
@@ -41,0 +61,0 @@ * @deprecated Use `nhost.storage.getPublicUrl()` instead. |
@@ -1,2 +0,2 @@ | ||
"use strict";var I=Object.defineProperty,R=Object.defineProperties;var M=Object.getOwnPropertyDescriptors;var D=Object.getOwnPropertySymbols;var k=Object.prototype.hasOwnProperty,C=Object.prototype.propertyIsEnumerable;var S=(r,e,t)=>e in r?I(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,d=(r,e)=>{for(var t in e||(e={}))k.call(e,t)&&S(r,t,e[t]);if(D)for(var t of D(e))C.call(e,t)&&S(r,t,e[t]);return r},g=(r,e)=>R(r,M(e));Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});var F=require("axios"),i=require("xstate");function b(r){return r&&typeof r=="object"&&"default"in r?r:{default:r}}var _=b(F);class L{constructor({url:e}){this.url=e,this.httpClient=_.default.create({baseURL:this.url})}async upload(e){try{return{fileMetadata:(await this.httpClient.post("/files",e.file,{headers:g(d(d({},this.generateUploadHeaders(e)),this.generateAuthHeaders()),{"Content-Type":"multipart/form-data"})})).data,error:null}}catch(t){return{fileMetadata:null,error:t}}}async getPresignedUrl(e){try{const{fileId:t}=e;return{presignedUrl:(await this.httpClient.get(`/files/${t}/presignedurl`,{headers:d({},this.generateAuthHeaders())})).data,error:null}}catch(t){return{presignedUrl:null,error:t}}}async delete(e){try{const{fileId:t}=e;return await this.httpClient.delete(`/files/${t}`,{headers:d({},this.generateAuthHeaders())}),{error:null}}catch(t){return{error:t}}}setAccessToken(e){return this.accessToken=e,this}setAdminSecret(e){return this.adminSecret=e,this}generateUploadHeaders(e){const{bucketId:t,name:s,id:a}=e,n={};return t&&(n["x-nhost-bucket-id"]=t),a&&(n["x-nhost-file-id"]=a),s&&(n["x-nhost-file-name"]=s),n}generateAuthHeaders(){return!this.adminSecret&&!this.accessToken?null:this.adminSecret?{"x-hasura-admin-secret":this.adminSecret}:{Authorization:`Bearer ${this.accessToken}`}}}class x{constructor({url:e,adminSecret:t}){this.url=e,this.api=new L({url:e}),this.setAdminSecret(t)}async upload(e){const t=new FormData;t.append("file",e.file);const{fileMetadata:s,error:a}=await this.api.upload(g(d({},e),{file:t}));return a?{fileMetadata:null,error:a}:s?{fileMetadata:s,error:null}:{fileMetadata:null,error:new Error("Invalid file returned")}}getUrl(e){return this.getPublicUrl(e)}getPublicUrl(e){const{fileId:t}=e;return`${this.url}/files/${t}`}async getPresignedUrl(e){const{presignedUrl:t,error:s}=await this.api.getPresignedUrl(e);return s?{presignedUrl:null,error:s}:t?{presignedUrl:t,error:null}:{presignedUrl:null,error:new Error("Invalid file id")}}async delete(e){const{error:t}=await this.api.delete(e);return t?{error:t}:{error:null}}setAccessToken(e){return this.api.setAccessToken(e),this}setAdminSecret(e){return this.api.setAdminSecret(e),this}}const A={progress:null,loaded:0,error:null},T=()=>i.createMachine({preserveActionOrder:!0,schema:{context:{},events:{}},tsTypes:{},context:d({},A),initial:"idle",on:{DESTROY:{actions:"sendDestroy",target:"stopped"}},states:{idle:{on:{ADD:{actions:"addFile"},UPLOAD:{cond:"hasFile",target:"uploading"}}},uploading:{entry:"resetProgress",on:{UPLOAD_PROGRESS:{actions:["incrementProgress","sendProgress"]},UPLOAD_DONE:"uploaded",UPLOAD_ERROR:"error",CANCEL:"idle"},invoke:{src:"uploadFile"}},uploaded:{entry:["setFileMetadata","sendDone"]},error:{entry:["setError","sendError"]},stopped:{type:"final"}}},{guards:{hasFile:(r,e)=>!!r.file||!!e.file},actions:{incrementProgress:i.assign({loaded:(r,{loaded:e})=>e,progress:(r,{progress:e})=>e}),setFileMetadata:i.assign({id:(r,{id:e})=>e,bucketId:(r,{bucketId:e})=>e,progress:r=>100}),setError:i.assign({error:(r,{error:e})=>e}),sendProgress:()=>{},sendError:()=>{},sendDestroy:()=>{},sendDone:()=>{},resetProgress:i.assign({progress:r=>null,loaded:r=>0}),addFile:i.assign({file:(r,{file:e})=>e,bucketId:(r,{bucketId:e})=>e,id:(r,{id:e})=>e})},services:{uploadFile:(r,e)=>t=>{const s={"Content-Type":"multipart/form-data"},a=e.id||r.id;a&&(s["x-nhost-file-id"]=a);const n=e.bucketId||r.bucketId;n&&(s["x-nhost-bucket-id"]=n);const l=e.file||r.file;s["x-nhost-file-name"]=e.name||l.name;const u=new FormData;u.append("file",l),e.adminSecret&&(s["x-hasura-admin-secret"]=e.adminSecret),e.accessToken&&(s.Authorization=`Bearer ${e.accessToken}`);let p=0;const P=new AbortController;return _.default.post(e.url+"/files",u,{headers:s,signal:P.signal,onUploadProgress:o=>{const c=Math.round(o.loaded*l.size/o.total),h=c-p;p=c,t({type:"UPLOAD_PROGRESS",progress:Math.round(c*100/o.total),loaded:c,additions:h})}}).then(({data:{id:o,bucketId:c}})=>{t({type:"UPLOAD_DONE",id:o,bucketId:c})}).catch(({response:o,message:c})=>{var h,U,y,E,O;t({type:"UPLOAD_ERROR",error:{status:(h=o==null?void 0:o.status)!=null?h:0,message:((y=(U=o==null?void 0:o.data)==null?void 0:U.error)==null?void 0:y.message)||c,error:((O=(E=o==null?void 0:o.data)==null?void 0:E.error)==null?void 0:O.message)||c}})}),()=>{P.abort()}}}}),{pure:m,sendParent:f}=i.actions,w=()=>i.createMachine({id:"files-list",schema:{context:{},events:{}},tsTypes:{},context:{progress:null,files:[],loaded:0,total:0},initial:"idle",on:{UPLOAD:{cond:"hasFileToDownload",actions:"addItem",target:"uploading"},ADD:{actions:"addItem"},REMOVE:{actions:"removeItem"}},states:{idle:{entry:["resetProgress","resetLoaded","resetTotal"],on:{CLEAR:{actions:"clearList",target:"idle"}}},uploading:{entry:["upload","startProgress","resetLoaded","resetTotal"],on:{UPLOAD_PROGRESS:{actions:["incrementProgress"]},UPLOAD_DONE:[{cond:"isAllUploaded",target:"uploaded"},{cond:"isAllUploadedOrError",target:"error"}],UPLOAD_ERROR:[{cond:"isAllUploaded",target:"uploaded"},{cond:"isAllUploadedOrError",target:"error"}],CANCEL:{actions:"cancel",target:"idle"}}},uploaded:{entry:"setUploaded",on:{CLEAR:{actions:"clearList",target:"idle"}}},error:{on:{CLEAR:{actions:"clearList",target:"idle"}}}}},{guards:{hasFileToDownload:(r,e)=>r.files.some(t=>t.getSnapshot().matches("idle"))||!!e.files,isAllUploaded:r=>r.files.every(e=>{var t;return(t=e.getSnapshot())==null?void 0:t.matches("uploaded")}),isAllUploadedOrError:r=>r.files.every(e=>{const t=e.getSnapshot();return(t==null?void 0:t.matches("error"))||(t==null?void 0:t.matches("uploaded"))})},actions:{incrementProgress:i.assign((r,e)=>{const t=r.loaded+e.additions,s=Math.round(t*100/r.total);return g(d({},r),{loaded:t,progress:s})}),setUploaded:i.assign({progress:r=>100,loaded:({files:r})=>r.map(e=>e.getSnapshot()).filter(e=>e.matches("uploaded")).reduce((e,t)=>{var s;return e+((s=t.context.file)==null?void 0:s.size)},0)}),resetTotal:i.assign({total:({files:r})=>r.map(e=>e.getSnapshot()).filter(e=>!e.matches("uploaded")).reduce((e,t)=>{var s;return e+((s=t.context.file)==null?void 0:s.size)},0)}),resetLoaded:i.assign({loaded:r=>0}),startProgress:i.assign({progress:r=>0}),resetProgress:i.assign({progress:r=>null}),addItem:i.assign((r,{files:e,bucketId:t})=>{const s=e?Array.isArray(e)?e:"length"in e?Array.from(e):[e]:[],a=r.total+s.reduce((l,u)=>l+u.size,0),n=Math.round(r.loaded*100/a);return{files:[...r.files,...s.map(l=>i.spawn(T().withConfig({actions:{sendProgress:f((u,{additions:p})=>({type:"UPLOAD_PROGRESS",additions:p})),sendDone:f("UPLOAD_DONE"),sendError:f("UPLOAD_ERROR"),sendDestroy:f("REMOVE")}}).withContext(g(d({},A),{file:l,bucketId:t})),{sync:!0}))],total:a,loaded:r.loaded,progress:n}}),removeItem:i.assign({files:r=>r.files.filter(e=>{var s,a;const t=(s=e.getSnapshot())==null?void 0:s.matches("stopped");return t&&((a=e.stop)==null||a.call(e)),!t})}),clearList:m(r=>r.files.map(e=>i.send({type:"DESTROY"},{to:e.id}))),upload:m((r,e)=>r.files.map(t=>i.send(e,{to:t.id}))),cancel:m(r=>r.files.map(e=>i.send({type:"CANCEL"},{to:e.id})))}}),N=async(r,e,t)=>new Promise(s=>{e.send(d({type:"UPLOAD",url:r.storage.url,accessToken:r.auth.getAccessToken(),adminSecret:r.adminSecret},t)),e.subscribe(a=>{var n;a.matches("error")?s({error:a.context.error,isError:!0,isUploaded:!1}):a.matches("uploaded")&&s({error:null,isError:!1,isUploaded:!0,id:a.context.id,bucketId:a.context.id,name:(n=a.context.file)==null?void 0:n.name})})}),H=async(r,e,t)=>new Promise(s=>{e.send({type:"UPLOAD",url:r.storage.url,accessToken:r.auth.getAccessToken(),adminSecret:r.adminSecret,bucketId:t==null?void 0:t.bucketId,files:t==null?void 0:t.files}),e.onTransition(a=>{a.matches("error")?s({errors:a.context.files.filter(n=>{var l;return(l=n.getSnapshot())==null?void 0:l.context.error}),isError:!0,files:[]}):a.matches("uploaded")&&s({errors:[],isError:!1,files:a.context.files})})});exports.HasuraStorageApi=L;exports.HasuraStorageClient=x;exports.INITIAL_FILE_CONTEXT=A;exports.createFileUploadMachine=T;exports.createMultipleFilesUploadMachine=w;exports.uploadFilePromise=N;exports.uploadMultipleFilesPromise=H; | ||
"use strict";var R=Object.defineProperty,M=Object.defineProperties;var k=Object.getOwnPropertyDescriptors;var O=Object.getOwnPropertySymbols;var F=Object.prototype.hasOwnProperty,C=Object.prototype.propertyIsEnumerable;var _=(r,e,t)=>e in r?R(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,d=(r,e)=>{for(var t in e||(e={}))F.call(e,t)&&_(r,t,e[t]);if(O)for(var t of O(e))C.call(e,t)&&_(r,t,e[t]);return r},g=(r,e)=>M(r,k(e));Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});var b=require("axios"),x=require("form-data"),i=require("xstate");function S(r){return r&&typeof r=="object"&&"default"in r?r:{default:r}}var L=S(b),w=S(x);class T{constructor({url:e}){this.url=e,this.httpClient=L.default.create({baseURL:this.url})}async upload(e){const{formData:t}=e;try{return{fileMetadata:(await this.httpClient.post("/files",t,{headers:g(d(d({},this.generateUploadHeaders(e)),this.generateAuthHeaders()),{"Content-Type":"multipart/form-data"})})).data,error:null}}catch(s){return{fileMetadata:null,error:s}}}async getPresignedUrl(e){try{const{fileId:t}=e;return{presignedUrl:(await this.httpClient.get(`/files/${t}/presignedurl`,{headers:d({},this.generateAuthHeaders())})).data,error:null}}catch(t){return{presignedUrl:null,error:t}}}async delete(e){try{const{fileId:t}=e;return await this.httpClient.delete(`/files/${t}`,{headers:d({},this.generateAuthHeaders())}),{error:null}}catch(t){return{error:t}}}setAccessToken(e){return this.accessToken=e,this}setAdminSecret(e){return this.adminSecret=e,this}generateUploadHeaders(e){const{bucketId:t,name:s,id:a}=e,n={};return t&&(n["x-nhost-bucket-id"]=t),a&&(n["x-nhost-file-id"]=a),s&&(n["x-nhost-file-name"]=s),n}generateAuthHeaders(){return!this.adminSecret&&!this.accessToken?null:this.adminSecret?{"x-hasura-admin-secret":this.adminSecret}:{Authorization:`Bearer ${this.accessToken}`}}}class N{constructor({url:e,adminSecret:t}){this.url=e,this.api=new T({url:e}),this.setAdminSecret(t)}async upload(e){let t;"file"in e?(t=new w.default,t.append("file",e.file)):t=e.formData;const{fileMetadata:s,error:a}=await this.api.upload(g(d({},e),{formData:t}));return a?{fileMetadata:null,error:a}:s?{fileMetadata:s,error:null}:{fileMetadata:null,error:new Error("Invalid file returned")}}getUrl(e){return this.getPublicUrl(e)}getPublicUrl(e){const{fileId:t}=e;return`${this.url}/files/${t}`}async getPresignedUrl(e){const{presignedUrl:t,error:s}=await this.api.getPresignedUrl(e);return s?{presignedUrl:null,error:s}:t?{presignedUrl:t,error:null}:{presignedUrl:null,error:new Error("Invalid file id")}}async delete(e){const{error:t}=await this.api.delete(e);return t?{error:t}:{error:null}}setAccessToken(e){return this.api.setAccessToken(e),this}setAdminSecret(e){return this.api.setAdminSecret(e),this}}const A={progress:null,loaded:0,error:null},I=()=>i.createMachine({preserveActionOrder:!0,schema:{context:{},events:{}},tsTypes:{},context:d({},A),initial:"idle",on:{DESTROY:{actions:"sendDestroy",target:"stopped"}},states:{idle:{on:{ADD:{actions:"addFile"},UPLOAD:{cond:"hasFile",target:"uploading"}}},uploading:{entry:"resetProgress",on:{UPLOAD_PROGRESS:{actions:["incrementProgress","sendProgress"]},UPLOAD_DONE:"uploaded",UPLOAD_ERROR:"error",CANCEL:"idle"},invoke:{src:"uploadFile"}},uploaded:{entry:["setFileMetadata","sendDone"]},error:{entry:["setError","sendError"]},stopped:{type:"final"}}},{guards:{hasFile:(r,e)=>!!r.file||!!e.file},actions:{incrementProgress:i.assign({loaded:(r,{loaded:e})=>e,progress:(r,{progress:e})=>e}),setFileMetadata:i.assign({id:(r,{id:e})=>e,bucketId:(r,{bucketId:e})=>e,progress:r=>100}),setError:i.assign({error:(r,{error:e})=>e}),sendProgress:()=>{},sendError:()=>{},sendDestroy:()=>{},sendDone:()=>{},resetProgress:i.assign({progress:r=>null,loaded:r=>0}),addFile:i.assign({file:(r,{file:e})=>e,bucketId:(r,{bucketId:e})=>e,id:(r,{id:e})=>e})},services:{uploadFile:(r,e)=>t=>{const s={"Content-Type":"multipart/form-data"},a=e.id||r.id;a&&(s["x-nhost-file-id"]=a);const n=e.bucketId||r.bucketId;n&&(s["x-nhost-bucket-id"]=n);const l=e.file||r.file;s["x-nhost-file-name"]=e.name||l.name;const u=new FormData;u.append("file",l),e.adminSecret&&(s["x-hasura-admin-secret"]=e.adminSecret),e.accessToken&&(s.Authorization=`Bearer ${e.accessToken}`);let p=0;const P=new AbortController;return L.default.post(e.url+"/files",u,{headers:s,signal:P.signal,onUploadProgress:o=>{const c=Math.round(o.loaded*l.size/o.total),h=c-p;p=c,t({type:"UPLOAD_PROGRESS",progress:Math.round(c*100/o.total),loaded:c,additions:h})}}).then(({data:{id:o,bucketId:c}})=>{t({type:"UPLOAD_DONE",id:o,bucketId:c})}).catch(({response:o,message:c})=>{var h,U,y,E,D;t({type:"UPLOAD_ERROR",error:{status:(h=o==null?void 0:o.status)!=null?h:0,message:((y=(U=o==null?void 0:o.data)==null?void 0:U.error)==null?void 0:y.message)||c,error:((D=(E=o==null?void 0:o.data)==null?void 0:E.error)==null?void 0:D.message)||c}})}),()=>{P.abort()}}}}),{pure:m,sendParent:f}=i.actions,H=()=>i.createMachine({id:"files-list",schema:{context:{},events:{}},tsTypes:{},context:{progress:null,files:[],loaded:0,total:0},initial:"idle",on:{UPLOAD:{cond:"hasFileToDownload",actions:"addItem",target:"uploading"},ADD:{actions:"addItem"},REMOVE:{actions:"removeItem"}},states:{idle:{entry:["resetProgress","resetLoaded","resetTotal"],on:{CLEAR:{actions:"clearList",target:"idle"}}},uploading:{entry:["upload","startProgress","resetLoaded","resetTotal"],on:{UPLOAD_PROGRESS:{actions:["incrementProgress"]},UPLOAD_DONE:[{cond:"isAllUploaded",target:"uploaded"},{cond:"isAllUploadedOrError",target:"error"}],UPLOAD_ERROR:[{cond:"isAllUploaded",target:"uploaded"},{cond:"isAllUploadedOrError",target:"error"}],CANCEL:{actions:"cancel",target:"idle"}}},uploaded:{entry:"setUploaded",on:{CLEAR:{actions:"clearList",target:"idle"}}},error:{on:{CLEAR:{actions:"clearList",target:"idle"}}}}},{guards:{hasFileToDownload:(r,e)=>r.files.some(t=>t.getSnapshot().matches("idle"))||!!e.files,isAllUploaded:r=>r.files.every(e=>{var t;return(t=e.getSnapshot())==null?void 0:t.matches("uploaded")}),isAllUploadedOrError:r=>r.files.every(e=>{const t=e.getSnapshot();return(t==null?void 0:t.matches("error"))||(t==null?void 0:t.matches("uploaded"))})},actions:{incrementProgress:i.assign((r,e)=>{const t=r.loaded+e.additions,s=Math.round(t*100/r.total);return g(d({},r),{loaded:t,progress:s})}),setUploaded:i.assign({progress:r=>100,loaded:({files:r})=>r.map(e=>e.getSnapshot()).filter(e=>e.matches("uploaded")).reduce((e,t)=>{var s;return e+((s=t.context.file)==null?void 0:s.size)},0)}),resetTotal:i.assign({total:({files:r})=>r.map(e=>e.getSnapshot()).filter(e=>!e.matches("uploaded")).reduce((e,t)=>{var s;return e+((s=t.context.file)==null?void 0:s.size)},0)}),resetLoaded:i.assign({loaded:r=>0}),startProgress:i.assign({progress:r=>0}),resetProgress:i.assign({progress:r=>null}),addItem:i.assign((r,{files:e,bucketId:t})=>{const s=e?Array.isArray(e)?e:"length"in e?Array.from(e):[e]:[],a=r.total+s.reduce((l,u)=>l+u.size,0),n=Math.round(r.loaded*100/a);return{files:[...r.files,...s.map(l=>i.spawn(I().withConfig({actions:{sendProgress:f((u,{additions:p})=>({type:"UPLOAD_PROGRESS",additions:p})),sendDone:f("UPLOAD_DONE"),sendError:f("UPLOAD_ERROR"),sendDestroy:f("REMOVE")}}).withContext(g(d({},A),{file:l,bucketId:t})),{sync:!0}))],total:a,loaded:r.loaded,progress:n}}),removeItem:i.assign({files:r=>r.files.filter(e=>{var s,a;const t=(s=e.getSnapshot())==null?void 0:s.matches("stopped");return t&&((a=e.stop)==null||a.call(e)),!t})}),clearList:m(r=>r.files.map(e=>i.send({type:"DESTROY"},{to:e.id}))),upload:m((r,e)=>r.files.map(t=>i.send(e,{to:t.id}))),cancel:m(r=>r.files.map(e=>i.send({type:"CANCEL"},{to:e.id})))}}),$=async(r,e,t)=>new Promise(s=>{e.send(d({type:"UPLOAD",url:r.storage.url,accessToken:r.auth.getAccessToken(),adminSecret:r.adminSecret},t)),e.subscribe(a=>{var n;a.matches("error")?s({error:a.context.error,isError:!0,isUploaded:!1}):a.matches("uploaded")&&s({error:null,isError:!1,isUploaded:!0,id:a.context.id,bucketId:a.context.id,name:(n=a.context.file)==null?void 0:n.name})})}),z=async(r,e,t)=>new Promise(s=>{e.send({type:"UPLOAD",url:r.storage.url,accessToken:r.auth.getAccessToken(),adminSecret:r.adminSecret,bucketId:t==null?void 0:t.bucketId,files:t==null?void 0:t.files}),e.onTransition(a=>{a.matches("error")?s({errors:a.context.files.filter(n=>{var l;return(l=n.getSnapshot())==null?void 0:l.context.error}),isError:!0,files:[]}):a.matches("uploaded")&&s({errors:[],isError:!1,files:a.context.files})})});exports.HasuraStorageApi=T;exports.HasuraStorageClient=N;exports.INITIAL_FILE_CONTEXT=A;exports.createFileUploadMachine=I;exports.createMultipleFilesUploadMachine=H;exports.uploadFilePromise=$;exports.uploadMultipleFilesPromise=z; | ||
//# sourceMappingURL=index.cjs.js.map |
@@ -21,2 +21,3 @@ var __defProp = Object.defineProperty; | ||
import axios from "axios"; | ||
import FormData$1 from "form-data"; | ||
import { createMachine, assign, spawn, send, actions } from "xstate"; | ||
@@ -31,4 +32,5 @@ class HasuraStorageApi { | ||
async upload(params) { | ||
const { formData } = params; | ||
try { | ||
const res = await this.httpClient.post("/files", params.file, { | ||
const res = await this.httpClient.post("/files", formData, { | ||
headers: __spreadProps(__spreadValues(__spreadValues({}, this.generateUploadHeaders(params)), this.generateAuthHeaders()), { | ||
@@ -108,6 +110,11 @@ "Content-Type": "multipart/form-data" | ||
async upload(params) { | ||
const file = new FormData(); | ||
file.append("file", params.file); | ||
let formData; | ||
if ("file" in params) { | ||
formData = new FormData$1(); | ||
formData.append("file", params.file); | ||
} else { | ||
formData = params.formData; | ||
} | ||
const { fileMetadata, error } = await this.api.upload(__spreadProps(__spreadValues({}, params), { | ||
file | ||
formData | ||
})); | ||
@@ -114,0 +121,0 @@ if (error) { |
import { InterpreterFrom } from 'xstate'; | ||
import { ActionErrorState } from '@nhost/core'; | ||
import { FileItemRef, FileUploadMachine } from '../machines'; | ||
import { NhostClientReturnType, StorageUploadParams } from '../utils/types'; | ||
import { NhostClientReturnType, StorageUploadFileParams } from '../utils/types'; | ||
export interface UploadProgressState { | ||
@@ -35,3 +35,3 @@ /** | ||
} | ||
export declare const uploadFilePromise: (nhost: NhostClientReturnType, interpreter: FileItemRef | InterpreterFrom<FileUploadMachine>, params: Partial<StorageUploadParams>) => Promise<UploadFileHandlerResult>; | ||
export declare const uploadFilePromise: (nhost: NhostClientReturnType, interpreter: FileItemRef | InterpreterFrom<FileUploadMachine>, params: Partial<StorageUploadFileParams>) => Promise<UploadFileHandlerResult>; | ||
//# sourceMappingURL=file-upload.d.ts.map |
@@ -0,1 +1,2 @@ | ||
import FormData from 'form-data'; | ||
import { HasuraAuthClient } from '@nhost/hasura-auth-js'; | ||
@@ -9,3 +10,3 @@ export interface NhostClientReturnType { | ||
} | ||
export interface StorageUploadParams { | ||
export interface StorageUploadFileParams { | ||
file: File; | ||
@@ -16,2 +17,9 @@ id?: string; | ||
} | ||
export interface StorageUploadFormDataParams { | ||
formData: FormData; | ||
id?: string; | ||
name?: string; | ||
bucketId?: string; | ||
} | ||
export declare type StorageUploadParams = StorageUploadFileParams | StorageUploadFormDataParams; | ||
export declare type StorageUploadResponse = { | ||
@@ -56,3 +64,3 @@ fileMetadata: FileResponse; | ||
export interface ApiUploadParams { | ||
file: FormData; | ||
formData: FormData; | ||
id?: string; | ||
@@ -59,0 +67,0 @@ name?: string; |
{ | ||
"name": "@nhost/hasura-storage-js", | ||
"version": "0.5.3", | ||
"version": "0.6.0", | ||
"description": "Hasura-storage client", | ||
@@ -44,2 +44,3 @@ "license": "MIT", | ||
"axios": "^0.27.2", | ||
"form-data": "^4.0.0", | ||
"xstate": "^4.32.1" | ||
@@ -53,3 +54,6 @@ }, | ||
"@nhost/docgen": "0.1.2", | ||
"msw": "^0.39.2" | ||
"cross-fetch": "^3.1.5", | ||
"msw": "^0.39.2", | ||
"start-server-and-test": "^1.14.0", | ||
"uuid": "^8.3.2" | ||
}, | ||
@@ -59,7 +63,9 @@ "scripts": { | ||
"build": "run-p build:lib build:umd", | ||
"build:lib": "vite build --config ../../config/vite.lib.config.js", | ||
"build:lib": "vite build", | ||
"build:umd": "vite build --config ../../config/vite.lib.umd.config.js", | ||
"test": "vitest run --config ../../config/vite.lib.config.js", | ||
"test:watch": "vitest --config ../../config/vite.lib.config.js", | ||
"test:coverage": "vitest run --coverage --config ../../config/vite.lib.config.js", | ||
"e2e": "start-test e2e:backend http-get://localhost:9695 ci:test", | ||
"ci:test": "vitest run", | ||
"e2e:backend": "nhost dev --no-browser", | ||
"test:watch": "vitest", | ||
"test:coverage": "vitest run --coverage", | ||
"prettier": "prettier --check src/", | ||
@@ -74,3 +80,3 @@ "prettier:fix": "prettier --write src/", | ||
}, | ||
"readme": "<h1 align=\"center\">@nhost/hasura-storage-js</h1>\n<h2 align=\"center\">Hasura Storage SDK</h2>\n\n<p align=\"center\">\n <img alt=\"npm\" src=\"https://img.shields.io/npm/v/@nhost/hasura-storage-js\">\n <img alt=\"npm\" src=\"https://img.shields.io/npm/dm/@nhost/hasura-storage-js\">\n <a href=\"LICENSE\">\n <img src=\"https://img.shields.io/badge/license-MIT-yellow.svg\" alt=\"license: MIT\" />\n </a>\n</p>\n\nHasura JS SDK to handle **Storage** with [Hasura](https://hasura.io/).\n## Install\n\n`$ npm install @nhost/hasura-storage-js`\n\n## Documentation\n\n[https://docs.nhost.io/reference/javascript/storage](https://docs.nhost.io/reference/javascript/storage)\n" | ||
"readme": "<h1 align=\"center\">@nhost/hasura-storage-js</h1>\n<h2 align=\"center\">Hasura Storage SDK</h2>\n\n<p align=\"center\">\n <img alt=\"npm\" src=\"https://img.shields.io/npm/v/@nhost/hasura-storage-js\">\n <img alt=\"npm\" src=\"https://img.shields.io/npm/dm/@nhost/hasura-storage-js\">\n <a href=\"LICENSE\">\n <img src=\"https://img.shields.io/badge/license-MIT-yellow.svg\" alt=\"license: MIT\" />\n </a>\n</p>\n\nHasura JavaScript SDK to handle **Storage** with [Hasura](https://hasura.io/).\n\n## Install\n\n`$ npm install @nhost/hasura-storage-js`\n\n## Documentation\n\n[https://docs.nhost.io/reference/javascript/storage](https://docs.nhost.io/reference/javascript/storage)\n" | ||
} |
@@ -12,3 +12,4 @@ <h1 align="center">@nhost/hasura-storage-js</h1> | ||
Hasura JS SDK to handle **Storage** with [Hasura](https://hasura.io/). | ||
Hasura JavaScript SDK to handle **Storage** with [Hasura](https://hasura.io/). | ||
## Install | ||
@@ -15,0 +16,0 @@ |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
525120
1377
21
4
6
+ Addedform-data@^4.0.0