uploadkit-sdk 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,4 +1,4 @@
1
- # @uploadnest/sdk
1
+ # uploadkit-sdk
2
2
 
3
3
  ## 1.0.1
4
4
 
package/README.md CHANGED
@@ -1,24 +1,24 @@
1
- # @uploadnest/sdk
1
+ # @uploadkit-sdk
2
2
 
3
- [![NPM version](https://img.shields.io/npm/v/@uploadnest/sdk.svg)](https://npmjs.org/package/@uploadnest/sdk)
4
- ![Bundle Size](https://img.shields.io/bundlephobia/minzip/@uploadnest/sdk)
3
+ [![NPM version](https://img.shields.io/npm/v/uploadkit-sdk.svg)](https://npmjs.org/package/uploadkit-sdk)
4
+ ![Bundle Size](https://img.shields.io/bundlephobia/minzip/uploadkit-sdk)
5
5
 
6
- TypeScript library for uploading files to Uploadnest API. Works in Node.js, Next.js, and browsers.
6
+ TypeScript library for uploading files to Uploadkit API. Works in Node.js, Next.js, and browsers.
7
7
 
8
8
  ## Installation
9
9
 
10
10
  ```bash
11
- npm install @uploadnest/sdk
11
+ npm install uploadkit-sdk
12
12
  # or
13
- pnpm add @uploadnest/sdk
13
+ pnpm add uploadkit-sdk
14
14
  ```
15
15
 
16
16
  ## Quick Start
17
17
 
18
18
  ```typescript
19
- import { UploadNestClient } from "@uploadnest/sdk";
19
+ import { UploadKitClient } from "uploadkit-sdk";
20
20
 
21
- const client = new UploadNestClient({
21
+ const client = new UploadKitClient({
22
22
  apiKey: "your-api-key",
23
23
  });
24
24
 
@@ -67,12 +67,12 @@ await client.uploadFiles(Array.from(fileInput.files));
67
67
 
68
68
  ```typescript
69
69
  // app/upload/page.tsx
70
- import { UploadNestClient } from "@uploadnest/sdk";
70
+ import { UploadKitClient } from "uploadkit-sdk";
71
71
 
72
72
  async function uploadAction(formData: FormData) {
73
73
  "use server";
74
74
 
75
- const client = new UploadNestClient({
75
+ const client = new UploadKitClient({
76
76
  apiKey: process.env.UPLOADNEST_API_KEY!,
77
77
  isBrowser: true,
78
78
  });
@@ -93,7 +93,7 @@ async function uploadAction(formData: FormData) {
93
93
  ## Error Handling
94
94
 
95
95
  ```typescript
96
- import { ValidationError, UploadError } from "@uploadnest/sdk/errors";
96
+ import { ValidationError, UploadError } from "uploadkit-sdk/errors";
97
97
 
98
98
  try {
99
99
  await client.uploadFiles(files);
@@ -111,7 +111,7 @@ try {
111
111
  Full TypeScript support with type definitions:
112
112
 
113
113
  ```typescript
114
- import type { UploadFileResponse } from "@uploadnest/sdk/types";
114
+ import type { UploadFileResponse } from "uploadkit-sdk/types";
115
115
 
116
116
  const result: UploadFileResponse = await client.uploadFiles(files);
117
117
  ```
@@ -0,0 +1,2 @@
1
+ var A=(t=>(t.VALIDATION_ERROR="VALIDATION_ERROR",t.UNAUTHORIZED="UNAUTHORIZED",t.UPLOAD_FAILED="UPLOAD_FAILED",t.REQUEST_FAILED="REQUEST_FAILED",t.INVALID_FILE="INVALID_FILE",t.NETWORK_ERROR="NETWORK_ERROR",t))(A||{}),e=class extends Error{statusCode;errorCode;constructor(s,E=500,n){super(s),this.statusCode=E,this.errorCode=n,this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor)}},o=class extends e{constructor(s="Validation Error"){super(s,400,"VALIDATION_ERROR")}},c=class extends e{constructor(s="Unauthorized - Invalid API Key"){super(s,401,"UNAUTHORIZED")}},R=class extends e{constructor(s="Upload failed"){super(s,500,"UPLOAD_FAILED")}},I=class extends e{constructor(s="Network request failed"){super(s,503,"NETWORK_ERROR")}},u=class extends e{constructor(s="Invalid file input"){super(s,400,"INVALID_FILE")}};export{A as a,e as b,o as c,c as d,R as e,I as f,u as g};
2
+ //# sourceMappingURL=chunk-7JY23M55.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/errors.ts"],"sourcesContent":["export enum UploadErrorCode {\r\n VALIDATION_ERROR = \"VALIDATION_ERROR\",\r\n UNAUTHORIZED = \"UNAUTHORIZED\",\r\n UPLOAD_FAILED = \"UPLOAD_FAILED\",\r\n REQUEST_FAILED = \"REQUEST_FAILED\",\r\n INVALID_FILE = \"INVALID_FILE\",\r\n NETWORK_ERROR = \"NETWORK_ERROR\",\r\n}\r\n\r\nexport class UploadKitError extends Error {\r\n public statusCode: number;\r\n public errorCode: UploadErrorCode;\r\n\r\n constructor(message: string, statusCode = 500, errorCode: UploadErrorCode) {\r\n super(message);\r\n this.statusCode = statusCode;\r\n this.errorCode = errorCode;\r\n this.name = this.constructor.name;\r\n Error.captureStackTrace(this, this.constructor);\r\n }\r\n}\r\n\r\nexport class ValidationError extends UploadKitError {\r\n constructor(message = \"Validation Error\") {\r\n super(message, 400, UploadErrorCode.VALIDATION_ERROR);\r\n }\r\n}\r\n\r\nexport class UnauthorizedError extends UploadKitError {\r\n constructor(message = \"Unauthorized - Invalid API Key\") {\r\n super(message, 401, UploadErrorCode.UNAUTHORIZED);\r\n }\r\n}\r\n\r\nexport class UploadError extends UploadKitError {\r\n constructor(message = \"Upload failed\") {\r\n super(message, 500, UploadErrorCode.UPLOAD_FAILED);\r\n }\r\n}\r\n\r\nexport class NetworkError extends UploadKitError {\r\n constructor(message = \"Network request failed\") {\r\n super(message, 503, UploadErrorCode.NETWORK_ERROR);\r\n }\r\n}\r\n\r\nexport class InvalidFileError extends UploadKitError {\r\n constructor(message = \"Invalid file input\") {\r\n super(message, 400, UploadErrorCode.INVALID_FILE);\r\n }\r\n}\r\n"],"mappings":"AAAO,IAAKA,OACVA,EAAA,iBAAmB,mBACnBA,EAAA,aAAe,eACfA,EAAA,cAAgB,gBAChBA,EAAA,eAAiB,iBACjBA,EAAA,aAAe,eACfA,EAAA,cAAgB,gBANNA,OAAA,IASCC,EAAN,cAA6B,KAAM,CACjC,WACA,UAEP,YAAYC,EAAiBC,EAAa,IAAKC,EAA4B,CACzE,MAAMF,CAAO,EACb,KAAK,WAAaC,EAClB,KAAK,UAAYC,EACjB,KAAK,KAAO,KAAK,YAAY,KAC7B,MAAM,kBAAkB,KAAM,KAAK,WAAW,CAChD,CACF,EAEaC,EAAN,cAA8BJ,CAAe,CAClD,YAAYC,EAAU,mBAAoB,CACxC,MAAMA,EAAS,IAAK,kBAAgC,CACtD,CACF,EAEaI,EAAN,cAAgCL,CAAe,CACpD,YAAYC,EAAU,iCAAkC,CACtD,MAAMA,EAAS,IAAK,cAA4B,CAClD,CACF,EAEaK,EAAN,cAA0BN,CAAe,CAC9C,YAAYC,EAAU,gBAAiB,CACrC,MAAMA,EAAS,IAAK,eAA6B,CACnD,CACF,EAEaM,EAAN,cAA2BP,CAAe,CAC/C,YAAYC,EAAU,yBAA0B,CAC9C,MAAMA,EAAS,IAAK,eAA6B,CACnD,CACF,EAEaO,EAAN,cAA+BR,CAAe,CACnD,YAAYC,EAAU,qBAAsB,CAC1C,MAAMA,EAAS,IAAK,cAA4B,CAClD,CACF","names":["UploadErrorCode","UploadKitError","message","statusCode","errorCode","ValidationError","UnauthorizedError","UploadError","NetworkError","InvalidFileError"]}
package/dist/errors.d.mts CHANGED
@@ -6,25 +6,25 @@ declare enum UploadErrorCode {
6
6
  INVALID_FILE = "INVALID_FILE",
7
7
  NETWORK_ERROR = "NETWORK_ERROR"
8
8
  }
9
- declare class UploadNestError extends Error {
9
+ declare class UploadKitError extends Error {
10
10
  statusCode: number;
11
11
  errorCode: UploadErrorCode;
12
12
  constructor(message: string, statusCode: number | undefined, errorCode: UploadErrorCode);
13
13
  }
14
- declare class ValidationError extends UploadNestError {
14
+ declare class ValidationError extends UploadKitError {
15
15
  constructor(message?: string);
16
16
  }
17
- declare class UnauthorizedError extends UploadNestError {
17
+ declare class UnauthorizedError extends UploadKitError {
18
18
  constructor(message?: string);
19
19
  }
20
- declare class UploadError extends UploadNestError {
20
+ declare class UploadError extends UploadKitError {
21
21
  constructor(message?: string);
22
22
  }
23
- declare class NetworkError extends UploadNestError {
23
+ declare class NetworkError extends UploadKitError {
24
24
  constructor(message?: string);
25
25
  }
26
- declare class InvalidFileError extends UploadNestError {
26
+ declare class InvalidFileError extends UploadKitError {
27
27
  constructor(message?: string);
28
28
  }
29
29
 
30
- export { InvalidFileError, NetworkError, UnauthorizedError, UploadError, UploadErrorCode, UploadNestError, ValidationError };
30
+ export { InvalidFileError, NetworkError, UnauthorizedError, UploadError, UploadErrorCode, UploadKitError, ValidationError };
package/dist/errors.d.ts CHANGED
@@ -6,25 +6,25 @@ declare enum UploadErrorCode {
6
6
  INVALID_FILE = "INVALID_FILE",
7
7
  NETWORK_ERROR = "NETWORK_ERROR"
8
8
  }
9
- declare class UploadNestError extends Error {
9
+ declare class UploadKitError extends Error {
10
10
  statusCode: number;
11
11
  errorCode: UploadErrorCode;
12
12
  constructor(message: string, statusCode: number | undefined, errorCode: UploadErrorCode);
13
13
  }
14
- declare class ValidationError extends UploadNestError {
14
+ declare class ValidationError extends UploadKitError {
15
15
  constructor(message?: string);
16
16
  }
17
- declare class UnauthorizedError extends UploadNestError {
17
+ declare class UnauthorizedError extends UploadKitError {
18
18
  constructor(message?: string);
19
19
  }
20
- declare class UploadError extends UploadNestError {
20
+ declare class UploadError extends UploadKitError {
21
21
  constructor(message?: string);
22
22
  }
23
- declare class NetworkError extends UploadNestError {
23
+ declare class NetworkError extends UploadKitError {
24
24
  constructor(message?: string);
25
25
  }
26
- declare class InvalidFileError extends UploadNestError {
26
+ declare class InvalidFileError extends UploadKitError {
27
27
  constructor(message?: string);
28
28
  }
29
29
 
30
- export { InvalidFileError, NetworkError, UnauthorizedError, UploadError, UploadErrorCode, UploadNestError, ValidationError };
30
+ export { InvalidFileError, NetworkError, UnauthorizedError, UploadError, UploadErrorCode, UploadKitError, ValidationError };
package/dist/errors.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var I=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var L=Object.getOwnPropertyNames;var a=Object.prototype.hasOwnProperty;var d=(t,s)=>{for(var r in s)I(t,r,{get:s[r],enumerable:!0})},_=(t,s,r,R)=>{if(s&&typeof s=="object"||typeof s=="function")for(let c of L(s))!a.call(t,c)&&c!==r&&I(t,c,{get:()=>s[c],enumerable:!(R=D(s,c))||R.enumerable});return t};var i=t=>_(I({},"__esModule",{value:!0}),t);var x={};d(x,{InvalidFileError:()=>O,NetworkError:()=>A,UnauthorizedError:()=>E,UploadError:()=>n,UploadErrorCode:()=>p,UploadNestError:()=>e,ValidationError:()=>u});module.exports=i(x);var p=(o=>(o.VALIDATION_ERROR="VALIDATION_ERROR",o.UNAUTHORIZED="UNAUTHORIZED",o.UPLOAD_FAILED="UPLOAD_FAILED",o.REQUEST_FAILED="REQUEST_FAILED",o.INVALID_FILE="INVALID_FILE",o.NETWORK_ERROR="NETWORK_ERROR",o))(p||{}),e=class extends Error{statusCode;errorCode;constructor(s,r=500,R){super(s),this.statusCode=r,this.errorCode=R,this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor)}},u=class extends e{constructor(s="Validation Error"){super(s,400,"VALIDATION_ERROR")}},E=class extends e{constructor(s="Unauthorized - Invalid API Key"){super(s,401,"UNAUTHORIZED")}},n=class extends e{constructor(s="Upload failed"){super(s,500,"UPLOAD_FAILED")}},A=class extends e{constructor(s="Network request failed"){super(s,503,"NETWORK_ERROR")}},O=class extends e{constructor(s="Invalid file input"){super(s,400,"INVALID_FILE")}};0&&(module.exports={InvalidFileError,NetworkError,UnauthorizedError,UploadError,UploadErrorCode,UploadNestError,ValidationError});
1
+ "use strict";var I=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var L=Object.getOwnPropertyNames;var a=Object.prototype.hasOwnProperty;var d=(e,s)=>{for(var r in s)I(e,r,{get:s[r],enumerable:!0})},_=(e,s,r,R)=>{if(s&&typeof s=="object"||typeof s=="function")for(let c of L(s))!a.call(e,c)&&c!==r&&I(e,c,{get:()=>s[c],enumerable:!(R=D(s,c))||R.enumerable});return e};var x=e=>_(I({},"__esModule",{value:!0}),e);var i={};d(i,{InvalidFileError:()=>O,NetworkError:()=>A,UnauthorizedError:()=>E,UploadError:()=>n,UploadErrorCode:()=>p,UploadKitError:()=>t,ValidationError:()=>u});module.exports=x(i);var p=(o=>(o.VALIDATION_ERROR="VALIDATION_ERROR",o.UNAUTHORIZED="UNAUTHORIZED",o.UPLOAD_FAILED="UPLOAD_FAILED",o.REQUEST_FAILED="REQUEST_FAILED",o.INVALID_FILE="INVALID_FILE",o.NETWORK_ERROR="NETWORK_ERROR",o))(p||{}),t=class extends Error{statusCode;errorCode;constructor(s,r=500,R){super(s),this.statusCode=r,this.errorCode=R,this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor)}},u=class extends t{constructor(s="Validation Error"){super(s,400,"VALIDATION_ERROR")}},E=class extends t{constructor(s="Unauthorized - Invalid API Key"){super(s,401,"UNAUTHORIZED")}},n=class extends t{constructor(s="Upload failed"){super(s,500,"UPLOAD_FAILED")}},A=class extends t{constructor(s="Network request failed"){super(s,503,"NETWORK_ERROR")}},O=class extends t{constructor(s="Invalid file input"){super(s,400,"INVALID_FILE")}};0&&(module.exports={InvalidFileError,NetworkError,UnauthorizedError,UploadError,UploadErrorCode,UploadKitError,ValidationError});
2
2
  //# sourceMappingURL=errors.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/errors.ts"],"sourcesContent":["export enum UploadErrorCode {\r\n VALIDATION_ERROR = \"VALIDATION_ERROR\",\r\n UNAUTHORIZED = \"UNAUTHORIZED\",\r\n UPLOAD_FAILED = \"UPLOAD_FAILED\",\r\n REQUEST_FAILED = \"REQUEST_FAILED\",\r\n INVALID_FILE = \"INVALID_FILE\",\r\n NETWORK_ERROR = \"NETWORK_ERROR\",\r\n}\r\n\r\nexport class UploadNestError extends Error {\r\n public statusCode: number;\r\n public errorCode: UploadErrorCode;\r\n\r\n constructor(message: string, statusCode = 500, errorCode: UploadErrorCode) {\r\n super(message);\r\n this.statusCode = statusCode;\r\n this.errorCode = errorCode;\r\n this.name = this.constructor.name;\r\n Error.captureStackTrace(this, this.constructor);\r\n }\r\n}\r\n\r\nexport class ValidationError extends UploadNestError {\r\n constructor(message = \"Validation Error\") {\r\n super(message, 400, UploadErrorCode.VALIDATION_ERROR);\r\n }\r\n}\r\n\r\nexport class UnauthorizedError extends UploadNestError {\r\n constructor(message = \"Unauthorized - Invalid API Key\") {\r\n super(message, 401, UploadErrorCode.UNAUTHORIZED);\r\n }\r\n}\r\n\r\nexport class UploadError extends UploadNestError {\r\n constructor(message = \"Upload failed\") {\r\n super(message, 500, UploadErrorCode.UPLOAD_FAILED);\r\n }\r\n}\r\n\r\nexport class NetworkError extends UploadNestError {\r\n constructor(message = \"Network request failed\") {\r\n super(message, 503, UploadErrorCode.NETWORK_ERROR);\r\n }\r\n}\r\n\r\nexport class InvalidFileError extends UploadNestError {\r\n constructor(message = \"Invalid file input\") {\r\n super(message, 400, UploadErrorCode.INVALID_FILE);\r\n }\r\n}\r\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,sBAAAE,EAAA,iBAAAC,EAAA,sBAAAC,EAAA,gBAAAC,EAAA,oBAAAC,EAAA,oBAAAC,EAAA,oBAAAC,IAAA,eAAAC,EAAAT,GAAO,IAAKU,OACVA,EAAA,iBAAmB,mBACnBA,EAAA,aAAe,eACfA,EAAA,cAAgB,gBAChBA,EAAA,eAAiB,iBACjBA,EAAA,aAAe,eACfA,EAAA,cAAgB,gBANNA,OAAA,IASCC,EAAN,cAA8B,KAAM,CAClC,WACA,UAEP,YAAYC,EAAiBC,EAAa,IAAKC,EAA4B,CACzE,MAAMF,CAAO,EACb,KAAK,WAAaC,EAClB,KAAK,UAAYC,EACjB,KAAK,KAAO,KAAK,YAAY,KAC7B,MAAM,kBAAkB,KAAM,KAAK,WAAW,CAChD,CACF,EAEaC,EAAN,cAA8BJ,CAAgB,CACnD,YAAYC,EAAU,mBAAoB,CACxC,MAAMA,EAAS,IAAK,kBAAgC,CACtD,CACF,EAEaI,EAAN,cAAgCL,CAAgB,CACrD,YAAYC,EAAU,iCAAkC,CACtD,MAAMA,EAAS,IAAK,cAA4B,CAClD,CACF,EAEaK,EAAN,cAA0BN,CAAgB,CAC/C,YAAYC,EAAU,gBAAiB,CACrC,MAAMA,EAAS,IAAK,eAA6B,CACnD,CACF,EAEaM,EAAN,cAA2BP,CAAgB,CAChD,YAAYC,EAAU,yBAA0B,CAC9C,MAAMA,EAAS,IAAK,eAA6B,CACnD,CACF,EAEaO,EAAN,cAA+BR,CAAgB,CACpD,YAAYC,EAAU,qBAAsB,CAC1C,MAAMA,EAAS,IAAK,cAA4B,CAClD,CACF","names":["errors_exports","__export","InvalidFileError","NetworkError","UnauthorizedError","UploadError","UploadErrorCode","UploadNestError","ValidationError","__toCommonJS","UploadErrorCode","UploadNestError","message","statusCode","errorCode","ValidationError","UnauthorizedError","UploadError","NetworkError","InvalidFileError"]}
1
+ {"version":3,"sources":["../src/errors.ts"],"sourcesContent":["export enum UploadErrorCode {\r\n VALIDATION_ERROR = \"VALIDATION_ERROR\",\r\n UNAUTHORIZED = \"UNAUTHORIZED\",\r\n UPLOAD_FAILED = \"UPLOAD_FAILED\",\r\n REQUEST_FAILED = \"REQUEST_FAILED\",\r\n INVALID_FILE = \"INVALID_FILE\",\r\n NETWORK_ERROR = \"NETWORK_ERROR\",\r\n}\r\n\r\nexport class UploadKitError extends Error {\r\n public statusCode: number;\r\n public errorCode: UploadErrorCode;\r\n\r\n constructor(message: string, statusCode = 500, errorCode: UploadErrorCode) {\r\n super(message);\r\n this.statusCode = statusCode;\r\n this.errorCode = errorCode;\r\n this.name = this.constructor.name;\r\n Error.captureStackTrace(this, this.constructor);\r\n }\r\n}\r\n\r\nexport class ValidationError extends UploadKitError {\r\n constructor(message = \"Validation Error\") {\r\n super(message, 400, UploadErrorCode.VALIDATION_ERROR);\r\n }\r\n}\r\n\r\nexport class UnauthorizedError extends UploadKitError {\r\n constructor(message = \"Unauthorized - Invalid API Key\") {\r\n super(message, 401, UploadErrorCode.UNAUTHORIZED);\r\n }\r\n}\r\n\r\nexport class UploadError extends UploadKitError {\r\n constructor(message = \"Upload failed\") {\r\n super(message, 500, UploadErrorCode.UPLOAD_FAILED);\r\n }\r\n}\r\n\r\nexport class NetworkError extends UploadKitError {\r\n constructor(message = \"Network request failed\") {\r\n super(message, 503, UploadErrorCode.NETWORK_ERROR);\r\n }\r\n}\r\n\r\nexport class InvalidFileError extends UploadKitError {\r\n constructor(message = \"Invalid file input\") {\r\n super(message, 400, UploadErrorCode.INVALID_FILE);\r\n }\r\n}\r\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,sBAAAE,EAAA,iBAAAC,EAAA,sBAAAC,EAAA,gBAAAC,EAAA,oBAAAC,EAAA,mBAAAC,EAAA,oBAAAC,IAAA,eAAAC,EAAAT,GAAO,IAAKU,OACVA,EAAA,iBAAmB,mBACnBA,EAAA,aAAe,eACfA,EAAA,cAAgB,gBAChBA,EAAA,eAAiB,iBACjBA,EAAA,aAAe,eACfA,EAAA,cAAgB,gBANNA,OAAA,IASCC,EAAN,cAA6B,KAAM,CACjC,WACA,UAEP,YAAYC,EAAiBC,EAAa,IAAKC,EAA4B,CACzE,MAAMF,CAAO,EACb,KAAK,WAAaC,EAClB,KAAK,UAAYC,EACjB,KAAK,KAAO,KAAK,YAAY,KAC7B,MAAM,kBAAkB,KAAM,KAAK,WAAW,CAChD,CACF,EAEaC,EAAN,cAA8BJ,CAAe,CAClD,YAAYC,EAAU,mBAAoB,CACxC,MAAMA,EAAS,IAAK,kBAAgC,CACtD,CACF,EAEaI,EAAN,cAAgCL,CAAe,CACpD,YAAYC,EAAU,iCAAkC,CACtD,MAAMA,EAAS,IAAK,cAA4B,CAClD,CACF,EAEaK,EAAN,cAA0BN,CAAe,CAC9C,YAAYC,EAAU,gBAAiB,CACrC,MAAMA,EAAS,IAAK,eAA6B,CACnD,CACF,EAEaM,EAAN,cAA2BP,CAAe,CAC/C,YAAYC,EAAU,yBAA0B,CAC9C,MAAMA,EAAS,IAAK,eAA6B,CACnD,CACF,EAEaO,EAAN,cAA+BR,CAAe,CACnD,YAAYC,EAAU,qBAAsB,CAC1C,MAAMA,EAAS,IAAK,cAA4B,CAClD,CACF","names":["errors_exports","__export","InvalidFileError","NetworkError","UnauthorizedError","UploadError","UploadErrorCode","UploadKitError","ValidationError","__toCommonJS","UploadErrorCode","UploadKitError","message","statusCode","errorCode","ValidationError","UnauthorizedError","UploadError","NetworkError","InvalidFileError"]}
package/dist/errors.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import{a,b,c,d,e,f,g}from"./chunk-E3AP57KG.mjs";export{g as InvalidFileError,f as NetworkError,d as UnauthorizedError,e as UploadError,a as UploadErrorCode,b as UploadNestError,c as ValidationError};
1
+ import{a,b,c,d,e,f,g}from"./chunk-7JY23M55.mjs";export{g as InvalidFileError,f as NetworkError,d as UnauthorizedError,e as UploadError,a as UploadErrorCode,b as UploadKitError,c as ValidationError};
2
2
  //# sourceMappingURL=errors.mjs.map
package/dist/index.d.mts CHANGED
@@ -1,16 +1,16 @@
1
- import { UploadNestClientOptions, UploadInput, UploadResponseType } from './types.mjs';
1
+ import { UploadKitClientOptions, UploadInput, UploadResponseType } from './types.mjs';
2
2
  export { UploadRequestOptions } from './types.mjs';
3
- export { InvalidFileError, NetworkError, UnauthorizedError, UploadError, UploadErrorCode, UploadNestError, ValidationError } from './errors.mjs';
3
+ export { InvalidFileError, NetworkError, UnauthorizedError, UploadError, UploadErrorCode, UploadKitError, ValidationError } from './errors.mjs';
4
4
  import 'form-data';
5
5
 
6
- declare class UploadNestClient {
6
+ declare class UploadKitClient {
7
7
  private apiKey;
8
8
  private shouldUseBrowser;
9
- constructor(options: UploadNestClientOptions);
9
+ constructor(options: UploadKitClientOptions);
10
10
  uploadFiles(files: UploadInput | UploadInput[]): Promise<UploadResponseType>;
11
11
  }
12
12
 
13
13
  declare const ALLOWED_MIME_TYPES: readonly ["image/jpeg", "image/png", "image/webp", "image/svg+xml", "image/gif", "application/pdf", "application/msword", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "text/plain", "text/csv", "application/zip", "application/x-zip-compressed", "application/x-tar", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "application/vnd.ms-excel", "application/vnd.openxmlformats-officedocument.presentationml.presentation", "audio/wav", "audio/webm", "video/mp4", "video/webm"];
14
14
  type AllowedMimeType = (typeof ALLOWED_MIME_TYPES)[number];
15
15
 
16
- export { ALLOWED_MIME_TYPES, type AllowedMimeType, UploadInput, UploadNestClient, UploadNestClientOptions, UploadResponseType, UploadNestClient as default };
16
+ export { ALLOWED_MIME_TYPES, type AllowedMimeType, UploadInput, UploadKitClient, UploadKitClientOptions, UploadResponseType, UploadKitClient as default };
package/dist/index.d.ts CHANGED
@@ -1,16 +1,16 @@
1
- import { UploadNestClientOptions, UploadInput, UploadResponseType } from './types.js';
1
+ import { UploadKitClientOptions, UploadInput, UploadResponseType } from './types.js';
2
2
  export { UploadRequestOptions } from './types.js';
3
- export { InvalidFileError, NetworkError, UnauthorizedError, UploadError, UploadErrorCode, UploadNestError, ValidationError } from './errors.js';
3
+ export { InvalidFileError, NetworkError, UnauthorizedError, UploadError, UploadErrorCode, UploadKitError, ValidationError } from './errors.js';
4
4
  import 'form-data';
5
5
 
6
- declare class UploadNestClient {
6
+ declare class UploadKitClient {
7
7
  private apiKey;
8
8
  private shouldUseBrowser;
9
- constructor(options: UploadNestClientOptions);
9
+ constructor(options: UploadKitClientOptions);
10
10
  uploadFiles(files: UploadInput | UploadInput[]): Promise<UploadResponseType>;
11
11
  }
12
12
 
13
13
  declare const ALLOWED_MIME_TYPES: readonly ["image/jpeg", "image/png", "image/webp", "image/svg+xml", "image/gif", "application/pdf", "application/msword", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "text/plain", "text/csv", "application/zip", "application/x-zip-compressed", "application/x-tar", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "application/vnd.ms-excel", "application/vnd.openxmlformats-officedocument.presentationml.presentation", "audio/wav", "audio/webm", "video/mp4", "video/webm"];
14
14
  type AllowedMimeType = (typeof ALLOWED_MIME_TYPES)[number];
15
15
 
16
- export { ALLOWED_MIME_TYPES, type AllowedMimeType, UploadInput, UploadNestClient, UploadNestClientOptions, UploadResponseType, UploadNestClient as default };
16
+ export { ALLOWED_MIME_TYPES, type AllowedMimeType, UploadInput, UploadKitClient, UploadKitClientOptions, UploadResponseType, UploadKitClient as default };
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- "use strict";var _=Object.create;var y=Object.defineProperty;var q=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var v=Object.getPrototypeOf,M=Object.prototype.hasOwnProperty;var C=(t,e)=>{for(var s in e)y(t,s,{get:e[s],enumerable:!0})},O=(t,e,s,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let p of B(e))!M.call(t,p)&&p!==s&&y(t,p,{get:()=>e[p],enumerable:!(r=q(e,p))||r.enumerable});return t};var R=(t,e,s)=>(s=t!=null?_(v(t)):{},O(e||!t||!t.__esModule?y(s,"default",{value:t,enumerable:!0}):s,t)),P=t=>O(y({},"__esModule",{value:!0}),t);var K={};C(K,{ALLOWED_MIME_TYPES:()=>w,InvalidFileError:()=>c,NetworkError:()=>h,UnauthorizedError:()=>d,UploadError:()=>m,UploadErrorCode:()=>F,UploadNestClient:()=>U,UploadNestError:()=>i,ValidationError:()=>f,default:()=>U});module.exports=P(K);var F=(a=>(a.VALIDATION_ERROR="VALIDATION_ERROR",a.UNAUTHORIZED="UNAUTHORIZED",a.UPLOAD_FAILED="UPLOAD_FAILED",a.REQUEST_FAILED="REQUEST_FAILED",a.INVALID_FILE="INVALID_FILE",a.NETWORK_ERROR="NETWORK_ERROR",a))(F||{}),i=class extends Error{statusCode;errorCode;constructor(e,s=500,r){super(e),this.statusCode=s,this.errorCode=r,this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor)}},f=class extends i{constructor(e="Validation Error"){super(e,400,"VALIDATION_ERROR")}},d=class extends i{constructor(e="Unauthorized - Invalid API Key"){super(e,401,"UNAUTHORIZED")}},m=class extends i{constructor(e="Upload failed"){super(e,500,"UPLOAD_FAILED")}},h=class extends i{constructor(e="Network request failed"){super(e,503,"NETWORK_ERROR")}},c=class extends i{constructor(e="Invalid file input"){super(e,400,"INVALID_FILE")}};var g=R(require("form-data"));var w=["image/jpeg","image/png","image/webp","image/svg+xml","image/gif","application/pdf","application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document","text/plain","text/csv","application/zip","application/x-zip-compressed","application/x-tar","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.ms-excel","application/vnd.openxmlformats-officedocument.presentationml.presentation","audio/wav","audio/webm","video/mp4","video/webm"];var L=R(require("http")),N=R(require("https"));async function x(t,e){let s=e.body,r=new URL(t);return new Promise((p,o)=>{let a={method:e.method,hostname:r.hostname,path:r.pathname+r.search,port:r.port||(r.protocol==="https: "?443:80),headers:{...e.headers,...s.getHeaders?s.getHeaders():{}}},u=(t.startsWith("https")?N.default:L.default).request(a,n=>{let A="";n.on("data",E=>{A+=E}),n.on("end",()=>{let E={ok:n.statusCode?n.statusCode>=200&&n.statusCode<300:!1,status:n.statusCode||500,statusText:n.statusMessage||"",json:async()=>JSON.parse(A)};p(E)})});u.on("error",n=>{o(new Error(`Request failed: ${n.message}`))}),s&&typeof s.pipe=="function"?(s.on("end",()=>{}),u.on("finish",()=>{}),s.pipe(u)):u.end(),s.on("error",n=>{u.destroy(),o(new Error(`FormData error: ${n.message}`))})})}async function I(t,e){return fetch(t,{method:e.method,headers:{...e.headers},body:e.body})}function T(t){if(t&&!w.includes(t))throw new c(`File type '${t}' is not allowed.
1
+ "use strict";var q=Object.create;var y=Object.defineProperty;var N=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var K=Object.getPrototypeOf,v=Object.prototype.hasOwnProperty;var M=(t,e)=>{for(var r in e)y(t,r,{get:e[r],enumerable:!0})},O=(t,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let p of B(e))!v.call(t,p)&&p!==r&&y(t,p,{get:()=>e[p],enumerable:!(s=N(e,p))||s.enumerable});return t};var R=(t,e,r)=>(r=t!=null?q(K(t)):{},O(e||!t||!t.__esModule?y(r,"default",{value:t,enumerable:!0}):r,t)),C=t=>O(y({},"__esModule",{value:!0}),t);var S={};M(S,{ALLOWED_MIME_TYPES:()=>w,InvalidFileError:()=>c,NetworkError:()=>h,UnauthorizedError:()=>l,UploadError:()=>m,UploadErrorCode:()=>F,UploadKitClient:()=>U,UploadKitError:()=>i,ValidationError:()=>f,default:()=>U});module.exports=C(S);var F=(a=>(a.VALIDATION_ERROR="VALIDATION_ERROR",a.UNAUTHORIZED="UNAUTHORIZED",a.UPLOAD_FAILED="UPLOAD_FAILED",a.REQUEST_FAILED="REQUEST_FAILED",a.INVALID_FILE="INVALID_FILE",a.NETWORK_ERROR="NETWORK_ERROR",a))(F||{}),i=class extends Error{statusCode;errorCode;constructor(e,r=500,s){super(e),this.statusCode=r,this.errorCode=s,this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor)}},f=class extends i{constructor(e="Validation Error"){super(e,400,"VALIDATION_ERROR")}},l=class extends i{constructor(e="Unauthorized - Invalid API Key"){super(e,401,"UNAUTHORIZED")}},m=class extends i{constructor(e="Upload failed"){super(e,500,"UPLOAD_FAILED")}},h=class extends i{constructor(e="Network request failed"){super(e,503,"NETWORK_ERROR")}},c=class extends i{constructor(e="Invalid file input"){super(e,400,"INVALID_FILE")}};var g=R(require("form-data"));var w=["image/jpeg","image/png","image/webp","image/svg+xml","image/gif","application/pdf","application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document","text/plain","text/csv","application/zip","application/x-zip-compressed","application/x-tar","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.ms-excel","application/vnd.openxmlformats-officedocument.presentationml.presentation","audio/wav","audio/webm","video/mp4","video/webm"];var L=R(require("http")),T=R(require("https"));async function x(t,e){let r=e.body,s=new URL(t);return new Promise((p,o)=>{let a={method:e.method,hostname:s.hostname,path:s.pathname+s.search,port:s.port||(s.protocol==="https:"?443:80),headers:{...e.headers,...r.getHeaders?r.getHeaders():{}}},u=(t.startsWith("https")?T.default:L.default).request(a,n=>{let A="";n.on("data",E=>{A+=E}),n.on("end",()=>{let E={ok:n.statusCode?n.statusCode>=200&&n.statusCode<300:!1,status:n.statusCode||500,statusText:n.statusMessage||"",json:async()=>JSON.parse(A)};p(E)})});u.on("error",n=>{o(new Error(`Request failed: ${n.message}`))}),r&&typeof r.pipe=="function"?(r.on("end",()=>{}),u.on("finish",()=>{}),r.pipe(u)):u.end(),r.on("error",n=>{u.destroy(),o(new Error(`FormData error: ${n.message}`))})})}async function I(t,e){return fetch(t,{method:e.method,headers:{...e.headers},body:e.body})}function b(t){if(t&&!w.includes(t))throw new c(`File type '${t}' is not allowed.
2
2
  Allowed types: ${w.join(", ")}
3
- `)}async function b(t,e){let{shouldUseBrowser:s}=e,r;s?r=new FormData:r=new g.default;let p=Array.isArray(t)?t:[t];for(let o of p)if(typeof o=="string"&&!s){let{createReadStream:a}=await import("fs"),D=a(o);r.append("files",D)}else if(Buffer.isBuffer(o)&&!s&&r instanceof g.default){let a=o;a.type&&T(a.type),r.append("files",o,{filename:a.name||"file.bin",contentType:a.type||"application/octet-stream",knownLength:a.size})}else if(o instanceof Blob||o instanceof File)o instanceof File&&T(o.type),r.append("files",o);else{if(s&&typeof o=="string")throw new c("File paths are not supported when isBrowser is enabled. Use File objects instead.");if(s&&o instanceof Buffer)throw new c("Buffers are not supported when isBrowser is enabled")}try{let o=await(s?I:x)(`${e.apiUrl}/files/upload`,{method:"POST",headers:{Authorization:`Bearer ${e.apiKey}`},body:r});if(!o.ok)switch(o.status){case 400:throw new f("Invalid request format");case 401:throw new d("Unathorized Access");case 413:throw new m("File size too large");case 503:throw new h("Service temporarily unavailable");default:throw new m(`Upload failed: ${o.status}
4
- ${o.statusText}`)}return o.json()}catch(o){throw o instanceof i?o:new m(o instanceof Error?o.message:"Unknown error occurred")}}var U=class{apiKey;shouldUseBrowser;constructor(e){if(!e.apiKey)throw new d("API Key is required");this.apiKey=e.apiKey,this.shouldUseBrowser=e.shouldUseBrowser||!1}async uploadFiles(e){return b(e,{apiKey:this.apiKey,apiUrl:"http://localhost:3000/api/v1",shouldUseBrowser:this.shouldUseBrowser})}};0&&(module.exports={ALLOWED_MIME_TYPES,InvalidFileError,NetworkError,UnauthorizedError,UploadError,UploadErrorCode,UploadNestClient,UploadNestError,ValidationError});
3
+ `)}async function _(t,e){let{shouldUseBrowser:r}=e,s;r?s=new FormData:s=new g.default;let p=Array.isArray(t)?t:[t];for(let o of p)if(typeof o=="string"&&!r){let{createReadStream:a}=await import("fs"),D=a(o);s.append("files",D)}else if(Buffer.isBuffer(o)&&!r&&s instanceof g.default){let a=o;a.type&&b(a.type),s.append("files",o,{filename:a.name||"file.bin",contentType:a.type||"application/octet-stream",knownLength:a.size})}else if(o instanceof Blob||o instanceof File)o instanceof File&&b(o.type),s.append("files",o);else{if(r&&typeof o=="string")throw new c("File paths are not supported when isBrowser is enabled. Use File objects instead.");if(r&&o instanceof Buffer)throw new c("Buffers are not supported when isBrowser is enabled")}try{let o=await(r?I:x)(`${e.apiUrl}/files/upload`,{method:"POST",headers:{Authorization:`Bearer ${e.apiKey}`},body:s});if(!o.ok)switch(o.status){case 400:throw new f("Invalid request format");case 401:throw new l("Unathorized Access");case 413:throw new m("File size too large");case 503:throw new h("Service temporarily unavailable");default:throw new m(`Upload failed: ${o.status}
4
+ ${o.statusText}`)}return o.json()}catch(o){throw o instanceof i?o:new m(o instanceof Error?o.message:"Unknown error occurred")}}var P="https://uploadkit.onrender.com/api/v1",U=class{apiKey;shouldUseBrowser;constructor(e){if(!e.apiKey)throw new l("API Key is required");this.apiKey=e.apiKey,this.shouldUseBrowser=e.shouldUseBrowser||!1}async uploadFiles(e){return _(e,{apiKey:this.apiKey,apiUrl:P,shouldUseBrowser:this.shouldUseBrowser})}};0&&(module.exports={ALLOWED_MIME_TYPES,InvalidFileError,NetworkError,UnauthorizedError,UploadError,UploadErrorCode,UploadKitClient,UploadKitError,ValidationError});
5
5
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/errors.ts","../src/uploadFile/index.ts","../src/constants/file-types.ts","../src/request/node.ts","../src/request/browser.ts","../src/upload-client.ts"],"sourcesContent":["// Main client class\r\nexport { UploadNestClient } from \"./upload-client\";\r\n\r\n// Error classes\r\nexport * from \"./errors\";\r\n\r\n// Types\r\nexport * from \"./types\";\r\n\r\n// Constants users might need\r\nexport { ALLOWED_MIME_TYPES, AllowedMimeType } from \"./constants/file-types\";\r\n\r\n// Default export\r\nexport { UploadNestClient as default } from \"./upload-client\";\r\n","export enum UploadErrorCode {\r\n VALIDATION_ERROR = \"VALIDATION_ERROR\",\r\n UNAUTHORIZED = \"UNAUTHORIZED\",\r\n UPLOAD_FAILED = \"UPLOAD_FAILED\",\r\n REQUEST_FAILED = \"REQUEST_FAILED\",\r\n INVALID_FILE = \"INVALID_FILE\",\r\n NETWORK_ERROR = \"NETWORK_ERROR\",\r\n}\r\n\r\nexport class UploadNestError extends Error {\r\n public statusCode: number;\r\n public errorCode: UploadErrorCode;\r\n\r\n constructor(message: string, statusCode = 500, errorCode: UploadErrorCode) {\r\n super(message);\r\n this.statusCode = statusCode;\r\n this.errorCode = errorCode;\r\n this.name = this.constructor.name;\r\n Error.captureStackTrace(this, this.constructor);\r\n }\r\n}\r\n\r\nexport class ValidationError extends UploadNestError {\r\n constructor(message = \"Validation Error\") {\r\n super(message, 400, UploadErrorCode.VALIDATION_ERROR);\r\n }\r\n}\r\n\r\nexport class UnauthorizedError extends UploadNestError {\r\n constructor(message = \"Unauthorized - Invalid API Key\") {\r\n super(message, 401, UploadErrorCode.UNAUTHORIZED);\r\n }\r\n}\r\n\r\nexport class UploadError extends UploadNestError {\r\n constructor(message = \"Upload failed\") {\r\n super(message, 500, UploadErrorCode.UPLOAD_FAILED);\r\n }\r\n}\r\n\r\nexport class NetworkError extends UploadNestError {\r\n constructor(message = \"Network request failed\") {\r\n super(message, 503, UploadErrorCode.NETWORK_ERROR);\r\n }\r\n}\r\n\r\nexport class InvalidFileError extends UploadNestError {\r\n constructor(message = \"Invalid file input\") {\r\n super(message, 400, UploadErrorCode.INVALID_FILE);\r\n }\r\n}\r\n","import NodeFormData from \"form-data\";\r\nimport { ALLOWED_MIME_TYPES, AllowedMimeType } from \"../constants/file-types\";\r\nimport {\r\n InvalidFileError,\r\n NetworkError,\r\n UnauthorizedError,\r\n UploadError,\r\n UploadNestError,\r\n ValidationError,\r\n} from \"../errors\";\r\nimport { UploadInput, UploadNestClientOptions } from \"../types\";\r\nimport { browserRequest, nodeRequest } from \"../request\";\r\n\r\ninterface UploadOptions extends UploadNestClientOptions {\r\n apiUrl: string;\r\n shouldUseBrowser?: boolean; // Ensure it's explicitly here if needed\r\n}\r\n\r\ntype BrowserFormData = FormData;\r\n\r\nfunction validateFileType(mimeType: string) {\r\n if (mimeType && !ALLOWED_MIME_TYPES.includes(mimeType as AllowedMimeType)) {\r\n throw new InvalidFileError(\r\n `File type '${mimeType}' is not allowed.\r\n Allowed types: ${ALLOWED_MIME_TYPES.join(\", \")}\r\n `,\r\n );\r\n }\r\n}\r\n\r\nexport async function uploadFiles(\r\n files: UploadInput | UploadInput[],\r\n options: UploadOptions,\r\n) {\r\n const { shouldUseBrowser } = options;\r\n\r\n let formData: BrowserFormData | NodeFormData;\r\n\r\n if (shouldUseBrowser) {\r\n formData = new FormData();\r\n } else {\r\n formData = new NodeFormData();\r\n }\r\n\r\n const fileArray = Array.isArray(files) ? files : [files];\r\n\r\n for (const file of fileArray) {\r\n if (typeof file === \"string\" && !shouldUseBrowser) {\r\n // For paths, validation will happen on the server or we need to infer mime type.\r\n // Removing validateFileType(file) as it expects a mime type, not a path.\r\n\r\n const { createReadStream } = await import(\"fs\");\r\n const stream = createReadStream(file);\r\n (formData as NodeFormData).append(\"files\", stream);\r\n } else if (\r\n Buffer.isBuffer(file) &&\r\n !shouldUseBrowser &&\r\n formData instanceof NodeFormData\r\n ) {\r\n const fileMetadata = file as any;\r\n if (fileMetadata.type) {\r\n validateFileType(fileMetadata.type);\r\n }\r\n\r\n formData.append(\"files\", file, {\r\n filename: fileMetadata.name || \"file.bin\",\r\n contentType: fileMetadata.type || \"application/octet-stream\",\r\n knownLength: fileMetadata.size,\r\n });\r\n } else if (file instanceof Blob || file instanceof File) {\r\n if (file instanceof File) {\r\n validateFileType(file.type);\r\n }\r\n (formData as FormData).append(\"files\", file);\r\n } else {\r\n if (shouldUseBrowser && typeof file === \"string\") {\r\n throw new InvalidFileError(\r\n \"File paths are not supported when isBrowser is enabled. Use File objects instead.\",\r\n );\r\n } else if (shouldUseBrowser && file instanceof Buffer) {\r\n throw new InvalidFileError(\r\n \"Buffers are not supported when isBrowser is enabled\",\r\n );\r\n }\r\n //throw new InvalidFileError(\"Invalid File\")\r\n }\r\n }\r\n\r\n try {\r\n const response = await (shouldUseBrowser ? browserRequest : nodeRequest)(\r\n `${options.apiUrl}/files/upload`,\r\n {\r\n method: \"POST\",\r\n headers: {\r\n Authorization: `Bearer ${options.apiKey}`,\r\n },\r\n body: formData,\r\n },\r\n );\r\n\r\n if (!response.ok) {\r\n switch (response.status) {\r\n case 400:\r\n throw new ValidationError(\"Invalid request format\");\r\n case 401:\r\n throw new UnauthorizedError(\"Unathorized Access\");\r\n case 413:\r\n throw new UploadError(\"File size too large\");\r\n case 503:\r\n throw new NetworkError(\"Service temporarily unavailable\");\r\n default:\r\n throw new UploadError(\r\n `Upload failed: ${response.status}\r\n ${response.statusText}`,\r\n );\r\n }\r\n }\r\n\r\n return response.json();\r\n } catch (error) {\r\n if (error instanceof UploadNestError) {\r\n throw error;\r\n }\r\n throw new UploadError(\r\n error instanceof Error ? error.message : \"Unknown error occurred\",\r\n );\r\n }\r\n}\r\n","export const ALLOWED_MIME_TYPES = [\r\n // Images\r\n \"image/jpeg\",\r\n \"image/png\",\r\n \"image/webp\",\r\n \"image/svg+xml\",\r\n \"image/gif\",\r\n\r\n // Documents\r\n \"application/pdf\", // PDF files\r\n \"application/msword\", // .doc files\r\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\", // .docx files\r\n\r\n // Text files\r\n \"text/plain\",\r\n \"text/csv\",\r\n\r\n // Archives\r\n \"application/zip\",\r\n \"application/x-zip-compressed\",\r\n \"application/x-tar\",\r\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\", // .xlsx\r\n \"application/vnd.ms-excel\", // .xls\r\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\", // .pptx\r\n\r\n // Audio\r\n \"audio/wav\",\r\n \"audio/webm\",\r\n\r\n // Video\r\n \"video/mp4\",\r\n \"video/webm\",\r\n] as const;\r\n\r\nexport type AllowedMimeType = (typeof ALLOWED_MIME_TYPES)[number];\r\n","import NodeFormData from \"form-data\";\r\nimport http, { IncomingMessage } from \"http\";\r\nimport https from \"https\";\r\nimport { UploadRequestOptions } from \"../types\";\r\n\r\nexport async function request(\r\n url: string,\r\n options: UploadRequestOptions\r\n): Promise<Response> {\r\n const formData = options.body as NodeFormData;\r\n\r\n const parsedUrl = new URL(url);\r\n\r\n return new Promise((resolve, reject) => {\r\n const requestOptions = {\r\n method: options.method, //POST\r\n hostname: parsedUrl.hostname, //\r\n path: parsedUrl.pathname + parsedUrl.search,\r\n port: parsedUrl.port || (parsedUrl.protocol === \"https: \" ? 443 : 80),\r\n headers: {\r\n ...options.headers,\r\n ...(formData.getHeaders ? formData.getHeaders() : {}),\r\n },\r\n };\r\n\r\n const isHttps = url.startsWith(\"https\");\r\n const requestModule = isHttps ? https : http;\r\n\r\n const req = requestModule.request(\r\n requestOptions,\r\n (res: IncomingMessage) => {\r\n let data = \"\";\r\n\r\n res.on(\"data\", (chunk) => {\r\n data += chunk;\r\n });\r\n\r\n res.on(\"end\", () => {\r\n const response = {\r\n ok: res.statusCode\r\n ? res.statusCode >= 200 && res.statusCode < 300\r\n : false,\r\n status: res.statusCode || 500,\r\n statusText: res.statusMessage || \"\",\r\n json: async () => JSON.parse(data),\r\n } as Response;\r\n\r\n resolve(response);\r\n });\r\n }\r\n );\r\n\r\n req.on(\"error\", (err) => {\r\n reject(new Error(`Request failed: ${err.message}`));\r\n });\r\n\r\n if (formData && typeof formData.pipe === \"function\") {\r\n formData.on(\"end\", () => {});\r\n\r\n req.on(\"finish\", () => {});\r\n\r\n formData.pipe(req);\r\n } else {\r\n req.end();\r\n }\r\n\r\n formData.on(\"error\", (err) => {\r\n //console.error(\"FormData error\", err);\r\n req.destroy();\r\n reject(new Error(`FormData error: ${err.message}`));\r\n });\r\n });\r\n}\r\n","import type { UploadRequestOptions } from \"../types\";\r\n\r\nexport async function request(\r\n url: string,\r\n options: UploadRequestOptions\r\n): Promise<Response> {\r\n return fetch(url, {\r\n method: options.method,\r\n headers: {\r\n ...options.headers,\r\n },\r\n body: options.body as FormData, // Browser's native FormData\r\n });\r\n}\r\n","import { UnauthorizedError } from \"./errors\";\r\nimport {\r\n UploadInput,\r\n UploadNestClientOptions,\r\n UploadResponseType,\r\n} from \"./types\";\r\nimport { uploadFiles } from \"./uploadFile\";\r\n\r\nconst DEFAULT_API_URL = \"https://uploadnest.onrender.com/api/v1\";\r\n\r\nexport class UploadNestClient {\r\n private apiKey: string;\r\n private shouldUseBrowser: boolean;\r\n\r\n constructor(options: UploadNestClientOptions) {\r\n if (!options.apiKey) throw new UnauthorizedError(\"API Key is required\");\r\n this.apiKey = options.apiKey;\r\n this.shouldUseBrowser = options.shouldUseBrowser || false;\r\n }\r\n\r\n async uploadFiles(\r\n files: UploadInput | UploadInput[],\r\n ): Promise<UploadResponseType> {\r\n return uploadFiles(files, {\r\n apiKey: this.apiKey,\r\n apiUrl: \"http://localhost:3000/api/v1\",\r\n shouldUseBrowser: this.shouldUseBrowser,\r\n });\r\n }\r\n}\r\n"],"mappings":"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","names":["index_exports","__export","ALLOWED_MIME_TYPES","InvalidFileError","NetworkError","UnauthorizedError","UploadError","UploadErrorCode","UploadNestClient","UploadNestError","ValidationError","__toCommonJS","UploadErrorCode","UploadNestError","message","statusCode","errorCode","ValidationError","UnauthorizedError","UploadError","NetworkError","InvalidFileError","import_form_data","ALLOWED_MIME_TYPES","import_http","import_https","request","url","options","formData","parsedUrl","resolve","reject","requestOptions","req","https","http","res","data","chunk","response","err","request","url","options","validateFileType","mimeType","ALLOWED_MIME_TYPES","InvalidFileError","uploadFiles","files","options","shouldUseBrowser","formData","NodeFormData","fileArray","file","createReadStream","stream","fileMetadata","response","request","ValidationError","UnauthorizedError","UploadError","NetworkError","error","UploadNestError","UploadNestClient","options","UnauthorizedError","files","uploadFiles"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/errors.ts","../src/uploadFile/index.ts","../src/constants/file-types.ts","../src/request/node.ts","../src/request/browser.ts","../src/upload-client.ts"],"sourcesContent":["// Main client class\r\nexport { UploadKitClient } from \"./upload-client\";\r\n\r\n// Error classes\r\nexport * from \"./errors\";\r\n\r\n// Types\r\nexport * from \"./types\";\r\n\r\n// Constants users might need\r\nexport { ALLOWED_MIME_TYPES, AllowedMimeType } from \"./constants/file-types\";\r\n\r\n// Default export\r\nexport { UploadKitClient as default } from \"./upload-client\";\r\n","export enum UploadErrorCode {\r\n VALIDATION_ERROR = \"VALIDATION_ERROR\",\r\n UNAUTHORIZED = \"UNAUTHORIZED\",\r\n UPLOAD_FAILED = \"UPLOAD_FAILED\",\r\n REQUEST_FAILED = \"REQUEST_FAILED\",\r\n INVALID_FILE = \"INVALID_FILE\",\r\n NETWORK_ERROR = \"NETWORK_ERROR\",\r\n}\r\n\r\nexport class UploadKitError extends Error {\r\n public statusCode: number;\r\n public errorCode: UploadErrorCode;\r\n\r\n constructor(message: string, statusCode = 500, errorCode: UploadErrorCode) {\r\n super(message);\r\n this.statusCode = statusCode;\r\n this.errorCode = errorCode;\r\n this.name = this.constructor.name;\r\n Error.captureStackTrace(this, this.constructor);\r\n }\r\n}\r\n\r\nexport class ValidationError extends UploadKitError {\r\n constructor(message = \"Validation Error\") {\r\n super(message, 400, UploadErrorCode.VALIDATION_ERROR);\r\n }\r\n}\r\n\r\nexport class UnauthorizedError extends UploadKitError {\r\n constructor(message = \"Unauthorized - Invalid API Key\") {\r\n super(message, 401, UploadErrorCode.UNAUTHORIZED);\r\n }\r\n}\r\n\r\nexport class UploadError extends UploadKitError {\r\n constructor(message = \"Upload failed\") {\r\n super(message, 500, UploadErrorCode.UPLOAD_FAILED);\r\n }\r\n}\r\n\r\nexport class NetworkError extends UploadKitError {\r\n constructor(message = \"Network request failed\") {\r\n super(message, 503, UploadErrorCode.NETWORK_ERROR);\r\n }\r\n}\r\n\r\nexport class InvalidFileError extends UploadKitError {\r\n constructor(message = \"Invalid file input\") {\r\n super(message, 400, UploadErrorCode.INVALID_FILE);\r\n }\r\n}\r\n","import NodeFormData from \"form-data\";\r\nimport { ALLOWED_MIME_TYPES, AllowedMimeType } from \"../constants/file-types\";\r\nimport {\r\n InvalidFileError,\r\n NetworkError,\r\n UnauthorizedError,\r\n UploadError,\r\n UploadKitError,\r\n ValidationError,\r\n} from \"../errors\";\r\nimport { UploadInput, UploadKitClientOptions } from \"../types\";\r\nimport { browserRequest, nodeRequest } from \"../request\";\r\n\r\ninterface UploadOptions extends UploadKitClientOptions {\r\n apiUrl: string;\r\n shouldUseBrowser?: boolean; // Ensure it's explicitly here if needed\r\n}\r\n\r\ntype BrowserFormData = FormData;\r\n\r\nfunction validateFileType(mimeType: string) {\r\n if (mimeType && !ALLOWED_MIME_TYPES.includes(mimeType as AllowedMimeType)) {\r\n throw new InvalidFileError(\r\n `File type '${mimeType}' is not allowed.\r\n Allowed types: ${ALLOWED_MIME_TYPES.join(\", \")}\r\n `,\r\n );\r\n }\r\n}\r\n\r\nexport async function uploadFiles(\r\n files: UploadInput | UploadInput[],\r\n options: UploadOptions,\r\n) {\r\n const { shouldUseBrowser } = options;\r\n\r\n let formData: BrowserFormData | NodeFormData;\r\n\r\n if (shouldUseBrowser) {\r\n formData = new FormData();\r\n } else {\r\n formData = new NodeFormData();\r\n }\r\n\r\n const fileArray = Array.isArray(files) ? files : [files];\r\n\r\n for (const file of fileArray) {\r\n if (typeof file === \"string\" && !shouldUseBrowser) {\r\n // For paths, validation will happen on the server or we need to infer mime type.\r\n // Removing validateFileType(file) as it expects a mime type, not a path.\r\n\r\n const { createReadStream } = await import(\"fs\");\r\n const stream = createReadStream(file);\r\n (formData as NodeFormData).append(\"files\", stream);\r\n } else if (\r\n Buffer.isBuffer(file) &&\r\n !shouldUseBrowser &&\r\n formData instanceof NodeFormData\r\n ) {\r\n const fileMetadata = file as any;\r\n if (fileMetadata.type) {\r\n validateFileType(fileMetadata.type);\r\n }\r\n\r\n formData.append(\"files\", file, {\r\n filename: fileMetadata.name || \"file.bin\",\r\n contentType: fileMetadata.type || \"application/octet-stream\",\r\n knownLength: fileMetadata.size,\r\n });\r\n } else if (file instanceof Blob || file instanceof File) {\r\n if (file instanceof File) {\r\n validateFileType(file.type);\r\n }\r\n (formData as FormData).append(\"files\", file);\r\n } else {\r\n if (shouldUseBrowser && typeof file === \"string\") {\r\n throw new InvalidFileError(\r\n \"File paths are not supported when isBrowser is enabled. Use File objects instead.\",\r\n );\r\n } else if (shouldUseBrowser && file instanceof Buffer) {\r\n throw new InvalidFileError(\r\n \"Buffers are not supported when isBrowser is enabled\",\r\n );\r\n }\r\n //throw new InvalidFileError(\"Invalid File\")\r\n }\r\n }\r\n\r\n try {\r\n const response = await (shouldUseBrowser ? browserRequest : nodeRequest)(\r\n `${options.apiUrl}/files/upload`,\r\n {\r\n method: \"POST\",\r\n headers: {\r\n Authorization: `Bearer ${options.apiKey}`,\r\n },\r\n body: formData,\r\n },\r\n );\r\n\r\n if (!response.ok) {\r\n switch (response.status) {\r\n case 400:\r\n throw new ValidationError(\"Invalid request format\");\r\n case 401:\r\n throw new UnauthorizedError(\"Unathorized Access\");\r\n case 413:\r\n throw new UploadError(\"File size too large\");\r\n case 503:\r\n throw new NetworkError(\"Service temporarily unavailable\");\r\n default:\r\n throw new UploadError(\r\n `Upload failed: ${response.status}\r\n ${response.statusText}`,\r\n );\r\n }\r\n }\r\n\r\n return response.json();\r\n } catch (error) {\r\n if (error instanceof UploadKitError) {\r\n throw error;\r\n }\r\n throw new UploadError(\r\n error instanceof Error ? error.message : \"Unknown error occurred\",\r\n );\r\n }\r\n}\r\n","export const ALLOWED_MIME_TYPES = [\r\n // Images\r\n \"image/jpeg\",\r\n \"image/png\",\r\n \"image/webp\",\r\n \"image/svg+xml\",\r\n \"image/gif\",\r\n\r\n // Documents\r\n \"application/pdf\", // PDF files\r\n \"application/msword\", // .doc files\r\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\", // .docx files\r\n\r\n // Text files\r\n \"text/plain\",\r\n \"text/csv\",\r\n\r\n // Archives\r\n \"application/zip\",\r\n \"application/x-zip-compressed\",\r\n \"application/x-tar\",\r\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\", // .xlsx\r\n \"application/vnd.ms-excel\", // .xls\r\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\", // .pptx\r\n\r\n // Audio\r\n \"audio/wav\",\r\n \"audio/webm\",\r\n\r\n // Video\r\n \"video/mp4\",\r\n \"video/webm\",\r\n] as const;\r\n\r\nexport type AllowedMimeType = (typeof ALLOWED_MIME_TYPES)[number];\r\n","import NodeFormData from \"form-data\";\r\nimport http, { IncomingMessage } from \"http\";\r\nimport https from \"https\";\r\nimport { UploadRequestOptions } from \"../types\";\r\n\r\nexport async function request(\r\n url: string,\r\n options: UploadRequestOptions,\r\n): Promise<Response> {\r\n const formData = options.body as NodeFormData;\r\n\r\n const parsedUrl = new URL(url);\r\n\r\n return new Promise((resolve, reject) => {\r\n const requestOptions = {\r\n method: options.method, //POST\r\n hostname: parsedUrl.hostname, //\r\n path: parsedUrl.pathname + parsedUrl.search,\r\n port: parsedUrl.port || (parsedUrl.protocol === \"https:\" ? 443 : 80),\r\n headers: {\r\n ...options.headers,\r\n ...(formData.getHeaders ? formData.getHeaders() : {}),\r\n },\r\n };\r\n\r\n const isHttps = url.startsWith(\"https\");\r\n const requestModule = isHttps ? https : http;\r\n\r\n const req = requestModule.request(\r\n requestOptions,\r\n (res: IncomingMessage) => {\r\n let data = \"\";\r\n\r\n res.on(\"data\", (chunk) => {\r\n data += chunk;\r\n });\r\n\r\n res.on(\"end\", () => {\r\n const response = {\r\n ok: res.statusCode\r\n ? res.statusCode >= 200 && res.statusCode < 300\r\n : false,\r\n status: res.statusCode || 500,\r\n statusText: res.statusMessage || \"\",\r\n json: async () => JSON.parse(data),\r\n } as Response;\r\n\r\n resolve(response);\r\n });\r\n },\r\n );\r\n\r\n req.on(\"error\", (err) => {\r\n reject(new Error(`Request failed: ${err.message}`));\r\n });\r\n\r\n if (formData && typeof formData.pipe === \"function\") {\r\n formData.on(\"end\", () => {});\r\n\r\n req.on(\"finish\", () => {});\r\n\r\n formData.pipe(req);\r\n } else {\r\n req.end();\r\n }\r\n\r\n formData.on(\"error\", (err) => {\r\n //console.error(\"FormData error\", err);\r\n req.destroy();\r\n reject(new Error(`FormData error: ${err.message}`));\r\n });\r\n });\r\n}\r\n","import type { UploadRequestOptions } from \"../types\";\r\n\r\nexport async function request(\r\n url: string,\r\n options: UploadRequestOptions\r\n): Promise<Response> {\r\n return fetch(url, {\r\n method: options.method,\r\n headers: {\r\n ...options.headers,\r\n },\r\n body: options.body as FormData, // Browser's native FormData\r\n });\r\n}\r\n","import { UnauthorizedError } from \"./errors\";\r\nimport {\r\n UploadInput,\r\n UploadKitClientOptions,\r\n UploadResponseType,\r\n} from \"./types\";\r\nimport { uploadFiles } from \"./uploadFile\";\r\n\r\nconst DEFAULT_API_URL = \"https://uploadkit.onrender.com/api/v1\";\r\n\r\nexport class UploadKitClient {\r\n private apiKey: string;\r\n private shouldUseBrowser: boolean;\r\n\r\n constructor(options: UploadKitClientOptions) {\r\n if (!options.apiKey) throw new UnauthorizedError(\"API Key is required\");\r\n this.apiKey = options.apiKey;\r\n this.shouldUseBrowser = options.shouldUseBrowser || false;\r\n }\r\n\r\n async uploadFiles(\r\n files: UploadInput | UploadInput[],\r\n ): Promise<UploadResponseType> {\r\n return uploadFiles(files, {\r\n apiKey: this.apiKey,\r\n apiUrl: DEFAULT_API_URL,\r\n shouldUseBrowser: this.shouldUseBrowser,\r\n });\r\n }\r\n}\r\n"],"mappings":"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","names":["index_exports","__export","ALLOWED_MIME_TYPES","InvalidFileError","NetworkError","UnauthorizedError","UploadError","UploadErrorCode","UploadKitClient","UploadKitError","ValidationError","__toCommonJS","UploadErrorCode","UploadKitError","message","statusCode","errorCode","ValidationError","UnauthorizedError","UploadError","NetworkError","InvalidFileError","import_form_data","ALLOWED_MIME_TYPES","import_http","import_https","request","url","options","formData","parsedUrl","resolve","reject","requestOptions","req","https","http","res","data","chunk","response","err","request","url","options","validateFileType","mimeType","ALLOWED_MIME_TYPES","InvalidFileError","uploadFiles","files","options","shouldUseBrowser","formData","NodeFormData","fileArray","file","createReadStream","stream","fileMetadata","response","request","ValidationError","UnauthorizedError","UploadError","NetworkError","error","UploadKitError","DEFAULT_API_URL","UploadKitClient","options","UnauthorizedError","files","uploadFiles"]}
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
- import{a as O,b as F,c as E,d,e as m,f as q,g as f}from"./chunk-E3AP57KG.mjs";import"./chunk-JZJWUVD7.mjs";import D from"form-data";var c=["image/jpeg","image/png","image/webp","image/svg+xml","image/gif","application/pdf","application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document","text/plain","text/csv","application/zip","application/x-zip-compressed","application/x-tar","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.ms-excel","application/vnd.openxmlformats-officedocument.presentationml.presentation","audio/wav","audio/webm","video/mp4","video/webm"];import M from"http";import A from"https";async function y(r,o){let t=o.body,s=new URL(r);return new Promise((w,e)=>{let n={method:o.method,hostname:s.hostname,path:s.pathname+s.search,port:s.port||(s.protocol==="https: "?443:80),headers:{...o.headers,...t.getHeaders?t.getHeaders():{}}},l=(r.startsWith("https")?A:M).request(n,a=>{let x="";a.on("data",h=>{x+=h}),a.on("end",()=>{let h={ok:a.statusCode?a.statusCode>=200&&a.statusCode<300:!1,status:a.statusCode||500,statusText:a.statusMessage||"",json:async()=>JSON.parse(x)};w(h)})});l.on("error",a=>{e(new Error(`Request failed: ${a.message}`))}),t&&typeof t.pipe=="function"?(t.on("end",()=>{}),l.on("finish",()=>{}),t.pipe(l)):l.end(),t.on("error",a=>{l.destroy(),e(new Error(`FormData error: ${a.message}`))})})}async function U(r,o){return fetch(r,{method:o.method,headers:{...o.headers},body:o.body})}function b(r){if(r&&!c.includes(r))throw new f(`File type '${r}' is not allowed.
1
+ import{a as R,b as F,c as E,d,e as m,f as q,g as f}from"./chunk-7JY23M55.mjs";import"./chunk-JZJWUVD7.mjs";import D from"form-data";var c=["image/jpeg","image/png","image/webp","image/svg+xml","image/gif","application/pdf","application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document","text/plain","text/csv","application/zip","application/x-zip-compressed","application/x-tar","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.ms-excel","application/vnd.openxmlformats-officedocument.presentationml.presentation","audio/wav","audio/webm","video/mp4","video/webm"];import v from"http";import A from"https";async function y(r,o){let t=o.body,s=new URL(r);return new Promise((w,e)=>{let i={method:o.method,hostname:s.hostname,path:s.pathname+s.search,port:s.port||(s.protocol==="https:"?443:80),headers:{...o.headers,...t.getHeaders?t.getHeaders():{}}},l=(r.startsWith("https")?A:v).request(i,a=>{let x="";a.on("data",h=>{x+=h}),a.on("end",()=>{let h={ok:a.statusCode?a.statusCode>=200&&a.statusCode<300:!1,status:a.statusCode||500,statusText:a.statusMessage||"",json:async()=>JSON.parse(x)};w(h)})});l.on("error",a=>{e(new Error(`Request failed: ${a.message}`))}),t&&typeof t.pipe=="function"?(t.on("end",()=>{}),l.on("finish",()=>{}),t.pipe(l)):l.end(),t.on("error",a=>{l.destroy(),e(new Error(`FormData error: ${a.message}`))})})}async function U(r,o){return fetch(r,{method:o.method,headers:{...o.headers},body:o.body})}function b(r){if(r&&!c.includes(r))throw new f(`File type '${r}' is not allowed.
2
2
  Allowed types: ${c.join(", ")}
3
- `)}async function v(r,o){let{shouldUseBrowser:t}=o,s;t?s=new FormData:s=new D;let w=Array.isArray(r)?r:[r];for(let e of w)if(typeof e=="string"&&!t){let{createReadStream:n}=await import("fs"),g=n(e);s.append("files",g)}else if(Buffer.isBuffer(e)&&!t&&s instanceof D){let n=e;n.type&&b(n.type),s.append("files",e,{filename:n.name||"file.bin",contentType:n.type||"application/octet-stream",knownLength:n.size})}else if(e instanceof Blob||e instanceof File)e instanceof File&&b(e.type),s.append("files",e);else{if(t&&typeof e=="string")throw new f("File paths are not supported when isBrowser is enabled. Use File objects instead.");if(t&&e instanceof Buffer)throw new f("Buffers are not supported when isBrowser is enabled")}try{let e=await(t?U:y)(`${o.apiUrl}/files/upload`,{method:"POST",headers:{Authorization:`Bearer ${o.apiKey}`},body:s});if(!e.ok)switch(e.status){case 400:throw new E("Invalid request format");case 401:throw new d("Unathorized Access");case 413:throw new m("File size too large");case 503:throw new q("Service temporarily unavailable");default:throw new m(`Upload failed: ${e.status}
4
- ${e.statusText}`)}return e.json()}catch(e){throw e instanceof F?e:new m(e instanceof Error?e.message:"Unknown error occurred")}}var u=class{apiKey;shouldUseBrowser;constructor(o){if(!o.apiKey)throw new d("API Key is required");this.apiKey=o.apiKey,this.shouldUseBrowser=o.shouldUseBrowser||!1}async uploadFiles(o){return v(o,{apiKey:this.apiKey,apiUrl:"http://localhost:3000/api/v1",shouldUseBrowser:this.shouldUseBrowser})}};export{c as ALLOWED_MIME_TYPES,f as InvalidFileError,q as NetworkError,d as UnauthorizedError,m as UploadError,O as UploadErrorCode,u as UploadNestClient,F as UploadNestError,E as ValidationError,u as default};
3
+ `)}async function M(r,o){let{shouldUseBrowser:t}=o,s;t?s=new FormData:s=new D;let w=Array.isArray(r)?r:[r];for(let e of w)if(typeof e=="string"&&!t){let{createReadStream:i}=await import("fs"),g=i(e);s.append("files",g)}else if(Buffer.isBuffer(e)&&!t&&s instanceof D){let i=e;i.type&&b(i.type),s.append("files",e,{filename:i.name||"file.bin",contentType:i.type||"application/octet-stream",knownLength:i.size})}else if(e instanceof Blob||e instanceof File)e instanceof File&&b(e.type),s.append("files",e);else{if(t&&typeof e=="string")throw new f("File paths are not supported when isBrowser is enabled. Use File objects instead.");if(t&&e instanceof Buffer)throw new f("Buffers are not supported when isBrowser is enabled")}try{let e=await(t?U:y)(`${o.apiUrl}/files/upload`,{method:"POST",headers:{Authorization:`Bearer ${o.apiKey}`},body:s});if(!e.ok)switch(e.status){case 400:throw new E("Invalid request format");case 401:throw new d("Unathorized Access");case 413:throw new m("File size too large");case 503:throw new q("Service temporarily unavailable");default:throw new m(`Upload failed: ${e.status}
4
+ ${e.statusText}`)}return e.json()}catch(e){throw e instanceof F?e:new m(e instanceof Error?e.message:"Unknown error occurred")}}var B="https://uploadkit.onrender.com/api/v1",u=class{apiKey;shouldUseBrowser;constructor(o){if(!o.apiKey)throw new d("API Key is required");this.apiKey=o.apiKey,this.shouldUseBrowser=o.shouldUseBrowser||!1}async uploadFiles(o){return M(o,{apiKey:this.apiKey,apiUrl:B,shouldUseBrowser:this.shouldUseBrowser})}};export{c as ALLOWED_MIME_TYPES,f as InvalidFileError,q as NetworkError,d as UnauthorizedError,m as UploadError,R as UploadErrorCode,u as UploadKitClient,F as UploadKitError,E as ValidationError,u as default};
5
5
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/uploadFile/index.ts","../src/constants/file-types.ts","../src/request/node.ts","../src/request/browser.ts","../src/upload-client.ts"],"sourcesContent":["import NodeFormData from \"form-data\";\r\nimport { ALLOWED_MIME_TYPES, AllowedMimeType } from \"../constants/file-types\";\r\nimport {\r\n InvalidFileError,\r\n NetworkError,\r\n UnauthorizedError,\r\n UploadError,\r\n UploadNestError,\r\n ValidationError,\r\n} from \"../errors\";\r\nimport { UploadInput, UploadNestClientOptions } from \"../types\";\r\nimport { browserRequest, nodeRequest } from \"../request\";\r\n\r\ninterface UploadOptions extends UploadNestClientOptions {\r\n apiUrl: string;\r\n shouldUseBrowser?: boolean; // Ensure it's explicitly here if needed\r\n}\r\n\r\ntype BrowserFormData = FormData;\r\n\r\nfunction validateFileType(mimeType: string) {\r\n if (mimeType && !ALLOWED_MIME_TYPES.includes(mimeType as AllowedMimeType)) {\r\n throw new InvalidFileError(\r\n `File type '${mimeType}' is not allowed.\r\n Allowed types: ${ALLOWED_MIME_TYPES.join(\", \")}\r\n `,\r\n );\r\n }\r\n}\r\n\r\nexport async function uploadFiles(\r\n files: UploadInput | UploadInput[],\r\n options: UploadOptions,\r\n) {\r\n const { shouldUseBrowser } = options;\r\n\r\n let formData: BrowserFormData | NodeFormData;\r\n\r\n if (shouldUseBrowser) {\r\n formData = new FormData();\r\n } else {\r\n formData = new NodeFormData();\r\n }\r\n\r\n const fileArray = Array.isArray(files) ? files : [files];\r\n\r\n for (const file of fileArray) {\r\n if (typeof file === \"string\" && !shouldUseBrowser) {\r\n // For paths, validation will happen on the server or we need to infer mime type.\r\n // Removing validateFileType(file) as it expects a mime type, not a path.\r\n\r\n const { createReadStream } = await import(\"fs\");\r\n const stream = createReadStream(file);\r\n (formData as NodeFormData).append(\"files\", stream);\r\n } else if (\r\n Buffer.isBuffer(file) &&\r\n !shouldUseBrowser &&\r\n formData instanceof NodeFormData\r\n ) {\r\n const fileMetadata = file as any;\r\n if (fileMetadata.type) {\r\n validateFileType(fileMetadata.type);\r\n }\r\n\r\n formData.append(\"files\", file, {\r\n filename: fileMetadata.name || \"file.bin\",\r\n contentType: fileMetadata.type || \"application/octet-stream\",\r\n knownLength: fileMetadata.size,\r\n });\r\n } else if (file instanceof Blob || file instanceof File) {\r\n if (file instanceof File) {\r\n validateFileType(file.type);\r\n }\r\n (formData as FormData).append(\"files\", file);\r\n } else {\r\n if (shouldUseBrowser && typeof file === \"string\") {\r\n throw new InvalidFileError(\r\n \"File paths are not supported when isBrowser is enabled. Use File objects instead.\",\r\n );\r\n } else if (shouldUseBrowser && file instanceof Buffer) {\r\n throw new InvalidFileError(\r\n \"Buffers are not supported when isBrowser is enabled\",\r\n );\r\n }\r\n //throw new InvalidFileError(\"Invalid File\")\r\n }\r\n }\r\n\r\n try {\r\n const response = await (shouldUseBrowser ? browserRequest : nodeRequest)(\r\n `${options.apiUrl}/files/upload`,\r\n {\r\n method: \"POST\",\r\n headers: {\r\n Authorization: `Bearer ${options.apiKey}`,\r\n },\r\n body: formData,\r\n },\r\n );\r\n\r\n if (!response.ok) {\r\n switch (response.status) {\r\n case 400:\r\n throw new ValidationError(\"Invalid request format\");\r\n case 401:\r\n throw new UnauthorizedError(\"Unathorized Access\");\r\n case 413:\r\n throw new UploadError(\"File size too large\");\r\n case 503:\r\n throw new NetworkError(\"Service temporarily unavailable\");\r\n default:\r\n throw new UploadError(\r\n `Upload failed: ${response.status}\r\n ${response.statusText}`,\r\n );\r\n }\r\n }\r\n\r\n return response.json();\r\n } catch (error) {\r\n if (error instanceof UploadNestError) {\r\n throw error;\r\n }\r\n throw new UploadError(\r\n error instanceof Error ? error.message : \"Unknown error occurred\",\r\n );\r\n }\r\n}\r\n","export const ALLOWED_MIME_TYPES = [\r\n // Images\r\n \"image/jpeg\",\r\n \"image/png\",\r\n \"image/webp\",\r\n \"image/svg+xml\",\r\n \"image/gif\",\r\n\r\n // Documents\r\n \"application/pdf\", // PDF files\r\n \"application/msword\", // .doc files\r\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\", // .docx files\r\n\r\n // Text files\r\n \"text/plain\",\r\n \"text/csv\",\r\n\r\n // Archives\r\n \"application/zip\",\r\n \"application/x-zip-compressed\",\r\n \"application/x-tar\",\r\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\", // .xlsx\r\n \"application/vnd.ms-excel\", // .xls\r\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\", // .pptx\r\n\r\n // Audio\r\n \"audio/wav\",\r\n \"audio/webm\",\r\n\r\n // Video\r\n \"video/mp4\",\r\n \"video/webm\",\r\n] as const;\r\n\r\nexport type AllowedMimeType = (typeof ALLOWED_MIME_TYPES)[number];\r\n","import NodeFormData from \"form-data\";\r\nimport http, { IncomingMessage } from \"http\";\r\nimport https from \"https\";\r\nimport { UploadRequestOptions } from \"../types\";\r\n\r\nexport async function request(\r\n url: string,\r\n options: UploadRequestOptions\r\n): Promise<Response> {\r\n const formData = options.body as NodeFormData;\r\n\r\n const parsedUrl = new URL(url);\r\n\r\n return new Promise((resolve, reject) => {\r\n const requestOptions = {\r\n method: options.method, //POST\r\n hostname: parsedUrl.hostname, //\r\n path: parsedUrl.pathname + parsedUrl.search,\r\n port: parsedUrl.port || (parsedUrl.protocol === \"https: \" ? 443 : 80),\r\n headers: {\r\n ...options.headers,\r\n ...(formData.getHeaders ? formData.getHeaders() : {}),\r\n },\r\n };\r\n\r\n const isHttps = url.startsWith(\"https\");\r\n const requestModule = isHttps ? https : http;\r\n\r\n const req = requestModule.request(\r\n requestOptions,\r\n (res: IncomingMessage) => {\r\n let data = \"\";\r\n\r\n res.on(\"data\", (chunk) => {\r\n data += chunk;\r\n });\r\n\r\n res.on(\"end\", () => {\r\n const response = {\r\n ok: res.statusCode\r\n ? res.statusCode >= 200 && res.statusCode < 300\r\n : false,\r\n status: res.statusCode || 500,\r\n statusText: res.statusMessage || \"\",\r\n json: async () => JSON.parse(data),\r\n } as Response;\r\n\r\n resolve(response);\r\n });\r\n }\r\n );\r\n\r\n req.on(\"error\", (err) => {\r\n reject(new Error(`Request failed: ${err.message}`));\r\n });\r\n\r\n if (formData && typeof formData.pipe === \"function\") {\r\n formData.on(\"end\", () => {});\r\n\r\n req.on(\"finish\", () => {});\r\n\r\n formData.pipe(req);\r\n } else {\r\n req.end();\r\n }\r\n\r\n formData.on(\"error\", (err) => {\r\n //console.error(\"FormData error\", err);\r\n req.destroy();\r\n reject(new Error(`FormData error: ${err.message}`));\r\n });\r\n });\r\n}\r\n","import type { UploadRequestOptions } from \"../types\";\r\n\r\nexport async function request(\r\n url: string,\r\n options: UploadRequestOptions\r\n): Promise<Response> {\r\n return fetch(url, {\r\n method: options.method,\r\n headers: {\r\n ...options.headers,\r\n },\r\n body: options.body as FormData, // Browser's native FormData\r\n });\r\n}\r\n","import { UnauthorizedError } from \"./errors\";\r\nimport {\r\n UploadInput,\r\n UploadNestClientOptions,\r\n UploadResponseType,\r\n} from \"./types\";\r\nimport { uploadFiles } from \"./uploadFile\";\r\n\r\nconst DEFAULT_API_URL = \"https://uploadnest.onrender.com/api/v1\";\r\n\r\nexport class UploadNestClient {\r\n private apiKey: string;\r\n private shouldUseBrowser: boolean;\r\n\r\n constructor(options: UploadNestClientOptions) {\r\n if (!options.apiKey) throw new UnauthorizedError(\"API Key is required\");\r\n this.apiKey = options.apiKey;\r\n this.shouldUseBrowser = options.shouldUseBrowser || false;\r\n }\r\n\r\n async uploadFiles(\r\n files: UploadInput | UploadInput[],\r\n ): Promise<UploadResponseType> {\r\n return uploadFiles(files, {\r\n apiKey: this.apiKey,\r\n apiUrl: \"http://localhost:3000/api/v1\",\r\n shouldUseBrowser: this.shouldUseBrowser,\r\n });\r\n }\r\n}\r\n"],"mappings":"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","names":["NodeFormData","ALLOWED_MIME_TYPES","http","https","request","url","options","formData","parsedUrl","resolve","reject","requestOptions","req","res","data","chunk","response","err","request","url","options","validateFileType","mimeType","ALLOWED_MIME_TYPES","InvalidFileError","uploadFiles","files","options","shouldUseBrowser","formData","NodeFormData","fileArray","file","createReadStream","stream","fileMetadata","response","request","ValidationError","UnauthorizedError","UploadError","NetworkError","error","UploadNestError","UploadNestClient","options","UnauthorizedError","files","uploadFiles"]}
1
+ {"version":3,"sources":["../src/uploadFile/index.ts","../src/constants/file-types.ts","../src/request/node.ts","../src/request/browser.ts","../src/upload-client.ts"],"sourcesContent":["import NodeFormData from \"form-data\";\r\nimport { ALLOWED_MIME_TYPES, AllowedMimeType } from \"../constants/file-types\";\r\nimport {\r\n InvalidFileError,\r\n NetworkError,\r\n UnauthorizedError,\r\n UploadError,\r\n UploadKitError,\r\n ValidationError,\r\n} from \"../errors\";\r\nimport { UploadInput, UploadKitClientOptions } from \"../types\";\r\nimport { browserRequest, nodeRequest } from \"../request\";\r\n\r\ninterface UploadOptions extends UploadKitClientOptions {\r\n apiUrl: string;\r\n shouldUseBrowser?: boolean; // Ensure it's explicitly here if needed\r\n}\r\n\r\ntype BrowserFormData = FormData;\r\n\r\nfunction validateFileType(mimeType: string) {\r\n if (mimeType && !ALLOWED_MIME_TYPES.includes(mimeType as AllowedMimeType)) {\r\n throw new InvalidFileError(\r\n `File type '${mimeType}' is not allowed.\r\n Allowed types: ${ALLOWED_MIME_TYPES.join(\", \")}\r\n `,\r\n );\r\n }\r\n}\r\n\r\nexport async function uploadFiles(\r\n files: UploadInput | UploadInput[],\r\n options: UploadOptions,\r\n) {\r\n const { shouldUseBrowser } = options;\r\n\r\n let formData: BrowserFormData | NodeFormData;\r\n\r\n if (shouldUseBrowser) {\r\n formData = new FormData();\r\n } else {\r\n formData = new NodeFormData();\r\n }\r\n\r\n const fileArray = Array.isArray(files) ? files : [files];\r\n\r\n for (const file of fileArray) {\r\n if (typeof file === \"string\" && !shouldUseBrowser) {\r\n // For paths, validation will happen on the server or we need to infer mime type.\r\n // Removing validateFileType(file) as it expects a mime type, not a path.\r\n\r\n const { createReadStream } = await import(\"fs\");\r\n const stream = createReadStream(file);\r\n (formData as NodeFormData).append(\"files\", stream);\r\n } else if (\r\n Buffer.isBuffer(file) &&\r\n !shouldUseBrowser &&\r\n formData instanceof NodeFormData\r\n ) {\r\n const fileMetadata = file as any;\r\n if (fileMetadata.type) {\r\n validateFileType(fileMetadata.type);\r\n }\r\n\r\n formData.append(\"files\", file, {\r\n filename: fileMetadata.name || \"file.bin\",\r\n contentType: fileMetadata.type || \"application/octet-stream\",\r\n knownLength: fileMetadata.size,\r\n });\r\n } else if (file instanceof Blob || file instanceof File) {\r\n if (file instanceof File) {\r\n validateFileType(file.type);\r\n }\r\n (formData as FormData).append(\"files\", file);\r\n } else {\r\n if (shouldUseBrowser && typeof file === \"string\") {\r\n throw new InvalidFileError(\r\n \"File paths are not supported when isBrowser is enabled. Use File objects instead.\",\r\n );\r\n } else if (shouldUseBrowser && file instanceof Buffer) {\r\n throw new InvalidFileError(\r\n \"Buffers are not supported when isBrowser is enabled\",\r\n );\r\n }\r\n //throw new InvalidFileError(\"Invalid File\")\r\n }\r\n }\r\n\r\n try {\r\n const response = await (shouldUseBrowser ? browserRequest : nodeRequest)(\r\n `${options.apiUrl}/files/upload`,\r\n {\r\n method: \"POST\",\r\n headers: {\r\n Authorization: `Bearer ${options.apiKey}`,\r\n },\r\n body: formData,\r\n },\r\n );\r\n\r\n if (!response.ok) {\r\n switch (response.status) {\r\n case 400:\r\n throw new ValidationError(\"Invalid request format\");\r\n case 401:\r\n throw new UnauthorizedError(\"Unathorized Access\");\r\n case 413:\r\n throw new UploadError(\"File size too large\");\r\n case 503:\r\n throw new NetworkError(\"Service temporarily unavailable\");\r\n default:\r\n throw new UploadError(\r\n `Upload failed: ${response.status}\r\n ${response.statusText}`,\r\n );\r\n }\r\n }\r\n\r\n return response.json();\r\n } catch (error) {\r\n if (error instanceof UploadKitError) {\r\n throw error;\r\n }\r\n throw new UploadError(\r\n error instanceof Error ? error.message : \"Unknown error occurred\",\r\n );\r\n }\r\n}\r\n","export const ALLOWED_MIME_TYPES = [\r\n // Images\r\n \"image/jpeg\",\r\n \"image/png\",\r\n \"image/webp\",\r\n \"image/svg+xml\",\r\n \"image/gif\",\r\n\r\n // Documents\r\n \"application/pdf\", // PDF files\r\n \"application/msword\", // .doc files\r\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\", // .docx files\r\n\r\n // Text files\r\n \"text/plain\",\r\n \"text/csv\",\r\n\r\n // Archives\r\n \"application/zip\",\r\n \"application/x-zip-compressed\",\r\n \"application/x-tar\",\r\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\", // .xlsx\r\n \"application/vnd.ms-excel\", // .xls\r\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\", // .pptx\r\n\r\n // Audio\r\n \"audio/wav\",\r\n \"audio/webm\",\r\n\r\n // Video\r\n \"video/mp4\",\r\n \"video/webm\",\r\n] as const;\r\n\r\nexport type AllowedMimeType = (typeof ALLOWED_MIME_TYPES)[number];\r\n","import NodeFormData from \"form-data\";\r\nimport http, { IncomingMessage } from \"http\";\r\nimport https from \"https\";\r\nimport { UploadRequestOptions } from \"../types\";\r\n\r\nexport async function request(\r\n url: string,\r\n options: UploadRequestOptions,\r\n): Promise<Response> {\r\n const formData = options.body as NodeFormData;\r\n\r\n const parsedUrl = new URL(url);\r\n\r\n return new Promise((resolve, reject) => {\r\n const requestOptions = {\r\n method: options.method, //POST\r\n hostname: parsedUrl.hostname, //\r\n path: parsedUrl.pathname + parsedUrl.search,\r\n port: parsedUrl.port || (parsedUrl.protocol === \"https:\" ? 443 : 80),\r\n headers: {\r\n ...options.headers,\r\n ...(formData.getHeaders ? formData.getHeaders() : {}),\r\n },\r\n };\r\n\r\n const isHttps = url.startsWith(\"https\");\r\n const requestModule = isHttps ? https : http;\r\n\r\n const req = requestModule.request(\r\n requestOptions,\r\n (res: IncomingMessage) => {\r\n let data = \"\";\r\n\r\n res.on(\"data\", (chunk) => {\r\n data += chunk;\r\n });\r\n\r\n res.on(\"end\", () => {\r\n const response = {\r\n ok: res.statusCode\r\n ? res.statusCode >= 200 && res.statusCode < 300\r\n : false,\r\n status: res.statusCode || 500,\r\n statusText: res.statusMessage || \"\",\r\n json: async () => JSON.parse(data),\r\n } as Response;\r\n\r\n resolve(response);\r\n });\r\n },\r\n );\r\n\r\n req.on(\"error\", (err) => {\r\n reject(new Error(`Request failed: ${err.message}`));\r\n });\r\n\r\n if (formData && typeof formData.pipe === \"function\") {\r\n formData.on(\"end\", () => {});\r\n\r\n req.on(\"finish\", () => {});\r\n\r\n formData.pipe(req);\r\n } else {\r\n req.end();\r\n }\r\n\r\n formData.on(\"error\", (err) => {\r\n //console.error(\"FormData error\", err);\r\n req.destroy();\r\n reject(new Error(`FormData error: ${err.message}`));\r\n });\r\n });\r\n}\r\n","import type { UploadRequestOptions } from \"../types\";\r\n\r\nexport async function request(\r\n url: string,\r\n options: UploadRequestOptions\r\n): Promise<Response> {\r\n return fetch(url, {\r\n method: options.method,\r\n headers: {\r\n ...options.headers,\r\n },\r\n body: options.body as FormData, // Browser's native FormData\r\n });\r\n}\r\n","import { UnauthorizedError } from \"./errors\";\r\nimport {\r\n UploadInput,\r\n UploadKitClientOptions,\r\n UploadResponseType,\r\n} from \"./types\";\r\nimport { uploadFiles } from \"./uploadFile\";\r\n\r\nconst DEFAULT_API_URL = \"https://uploadkit.onrender.com/api/v1\";\r\n\r\nexport class UploadKitClient {\r\n private apiKey: string;\r\n private shouldUseBrowser: boolean;\r\n\r\n constructor(options: UploadKitClientOptions) {\r\n if (!options.apiKey) throw new UnauthorizedError(\"API Key is required\");\r\n this.apiKey = options.apiKey;\r\n this.shouldUseBrowser = options.shouldUseBrowser || false;\r\n }\r\n\r\n async uploadFiles(\r\n files: UploadInput | UploadInput[],\r\n ): Promise<UploadResponseType> {\r\n return uploadFiles(files, {\r\n apiKey: this.apiKey,\r\n apiUrl: DEFAULT_API_URL,\r\n shouldUseBrowser: this.shouldUseBrowser,\r\n });\r\n }\r\n}\r\n"],"mappings":"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","names":["NodeFormData","ALLOWED_MIME_TYPES","http","https","request","url","options","formData","parsedUrl","resolve","reject","requestOptions","req","res","data","chunk","response","err","request","url","options","validateFileType","mimeType","ALLOWED_MIME_TYPES","InvalidFileError","uploadFiles","files","options","shouldUseBrowser","formData","NodeFormData","fileArray","file","createReadStream","stream","fileMetadata","response","request","ValidationError","UnauthorizedError","UploadError","NetworkError","error","UploadKitError","DEFAULT_API_URL","UploadKitClient","options","UnauthorizedError","files","uploadFiles"]}
package/dist/types.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  import NodeFormData from 'form-data';
2
2
 
3
- interface UploadNestClientOptions {
3
+ interface UploadKitClientOptions {
4
4
  apiKey: string;
5
5
  shouldUseBrowser?: boolean;
6
6
  }
@@ -21,4 +21,4 @@ interface UploadRequestOptions {
21
21
  body: FormData | NodeFormData;
22
22
  }
23
23
 
24
- export type { UploadInput, UploadNestClientOptions, UploadRequestOptions, UploadResponseType };
24
+ export type { UploadInput, UploadKitClientOptions, UploadRequestOptions, UploadResponseType };
package/dist/types.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import NodeFormData from 'form-data';
2
2
 
3
- interface UploadNestClientOptions {
3
+ interface UploadKitClientOptions {
4
4
  apiKey: string;
5
5
  shouldUseBrowser?: boolean;
6
6
  }
@@ -21,4 +21,4 @@ interface UploadRequestOptions {
21
21
  body: FormData | NodeFormData;
22
22
  }
23
23
 
24
- export type { UploadInput, UploadNestClientOptions, UploadRequestOptions, UploadResponseType };
24
+ export type { UploadInput, UploadKitClientOptions, UploadRequestOptions, UploadResponseType };
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types.ts"],"sourcesContent":["import NodeFormData from \"form-data\";\r\n\r\nexport interface UploadNestClientOptions {\r\n apiKey: string;\r\n shouldUseBrowser?: boolean;\r\n}\r\n\r\nexport type UploadInput = File | Blob | Buffer | string;\r\n\r\nexport interface UploadResponseType {\r\n message: string;\r\n data: {\r\n fileId: string;\r\n originalName: string;\r\n size: number;\r\n ext: string;\r\n mimeType: string;\r\n }[];\r\n}\r\n\r\nexport interface UploadRequestOptions {\r\n method: string;\r\n headers: Record<string, string>;\r\n body: FormData | NodeFormData;\r\n}\r\n"],"mappings":"+WAAA,IAAAA,EAAA,kBAAAC,EAAAD","names":["types_exports","__toCommonJS"]}
1
+ {"version":3,"sources":["../src/types.ts"],"sourcesContent":["import NodeFormData from \"form-data\";\r\n\r\nexport interface UploadKitClientOptions {\r\n apiKey: string;\r\n shouldUseBrowser?: boolean;\r\n}\r\n\r\nexport type UploadInput = File | Blob | Buffer | string;\r\n\r\nexport interface UploadResponseType {\r\n message: string;\r\n data: {\r\n fileId: string;\r\n originalName: string;\r\n size: number;\r\n ext: string;\r\n mimeType: string;\r\n }[];\r\n}\r\n\r\nexport interface UploadRequestOptions {\r\n method: string;\r\n headers: Record<string, string>;\r\n body: FormData | NodeFormData;\r\n}\r\n"],"mappings":"+WAAA,IAAAA,EAAA,kBAAAC,EAAAD","names":["types_exports","__toCommonJS"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "uploadkit-sdk",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "The official TypeScript library for the Uploadkit API",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.mjs",
@@ -22,7 +22,7 @@
22
22
  "scripts": {
23
23
  "build": "tsup",
24
24
  "clean": "rimraf dist",
25
- "changeset": "npx changeset",
25
+ "changeset": "npx changeset init",
26
26
  "version-packages": "npx changeset version",
27
27
  "release": "npm run build && npm run version-packages && npx changeset publish",
28
28
  "prepublishOnly": "npm run clean && npm run build"
@@ -1,2 +0,0 @@
1
- var A=(e=>(e.VALIDATION_ERROR="VALIDATION_ERROR",e.UNAUTHORIZED="UNAUTHORIZED",e.UPLOAD_FAILED="UPLOAD_FAILED",e.REQUEST_FAILED="REQUEST_FAILED",e.INVALID_FILE="INVALID_FILE",e.NETWORK_ERROR="NETWORK_ERROR",e))(A||{}),t=class extends Error{statusCode;errorCode;constructor(s,E=500,n){super(s),this.statusCode=E,this.errorCode=n,this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor)}},o=class extends t{constructor(s="Validation Error"){super(s,400,"VALIDATION_ERROR")}},c=class extends t{constructor(s="Unauthorized - Invalid API Key"){super(s,401,"UNAUTHORIZED")}},R=class extends t{constructor(s="Upload failed"){super(s,500,"UPLOAD_FAILED")}},I=class extends t{constructor(s="Network request failed"){super(s,503,"NETWORK_ERROR")}},u=class extends t{constructor(s="Invalid file input"){super(s,400,"INVALID_FILE")}};export{A as a,t as b,o as c,c as d,R as e,I as f,u as g};
2
- //# sourceMappingURL=chunk-E3AP57KG.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/errors.ts"],"sourcesContent":["export enum UploadErrorCode {\r\n VALIDATION_ERROR = \"VALIDATION_ERROR\",\r\n UNAUTHORIZED = \"UNAUTHORIZED\",\r\n UPLOAD_FAILED = \"UPLOAD_FAILED\",\r\n REQUEST_FAILED = \"REQUEST_FAILED\",\r\n INVALID_FILE = \"INVALID_FILE\",\r\n NETWORK_ERROR = \"NETWORK_ERROR\",\r\n}\r\n\r\nexport class UploadNestError extends Error {\r\n public statusCode: number;\r\n public errorCode: UploadErrorCode;\r\n\r\n constructor(message: string, statusCode = 500, errorCode: UploadErrorCode) {\r\n super(message);\r\n this.statusCode = statusCode;\r\n this.errorCode = errorCode;\r\n this.name = this.constructor.name;\r\n Error.captureStackTrace(this, this.constructor);\r\n }\r\n}\r\n\r\nexport class ValidationError extends UploadNestError {\r\n constructor(message = \"Validation Error\") {\r\n super(message, 400, UploadErrorCode.VALIDATION_ERROR);\r\n }\r\n}\r\n\r\nexport class UnauthorizedError extends UploadNestError {\r\n constructor(message = \"Unauthorized - Invalid API Key\") {\r\n super(message, 401, UploadErrorCode.UNAUTHORIZED);\r\n }\r\n}\r\n\r\nexport class UploadError extends UploadNestError {\r\n constructor(message = \"Upload failed\") {\r\n super(message, 500, UploadErrorCode.UPLOAD_FAILED);\r\n }\r\n}\r\n\r\nexport class NetworkError extends UploadNestError {\r\n constructor(message = \"Network request failed\") {\r\n super(message, 503, UploadErrorCode.NETWORK_ERROR);\r\n }\r\n}\r\n\r\nexport class InvalidFileError extends UploadNestError {\r\n constructor(message = \"Invalid file input\") {\r\n super(message, 400, UploadErrorCode.INVALID_FILE);\r\n }\r\n}\r\n"],"mappings":"AAAO,IAAKA,OACVA,EAAA,iBAAmB,mBACnBA,EAAA,aAAe,eACfA,EAAA,cAAgB,gBAChBA,EAAA,eAAiB,iBACjBA,EAAA,aAAe,eACfA,EAAA,cAAgB,gBANNA,OAAA,IASCC,EAAN,cAA8B,KAAM,CAClC,WACA,UAEP,YAAYC,EAAiBC,EAAa,IAAKC,EAA4B,CACzE,MAAMF,CAAO,EACb,KAAK,WAAaC,EAClB,KAAK,UAAYC,EACjB,KAAK,KAAO,KAAK,YAAY,KAC7B,MAAM,kBAAkB,KAAM,KAAK,WAAW,CAChD,CACF,EAEaC,EAAN,cAA8BJ,CAAgB,CACnD,YAAYC,EAAU,mBAAoB,CACxC,MAAMA,EAAS,IAAK,kBAAgC,CACtD,CACF,EAEaI,EAAN,cAAgCL,CAAgB,CACrD,YAAYC,EAAU,iCAAkC,CACtD,MAAMA,EAAS,IAAK,cAA4B,CAClD,CACF,EAEaK,EAAN,cAA0BN,CAAgB,CAC/C,YAAYC,EAAU,gBAAiB,CACrC,MAAMA,EAAS,IAAK,eAA6B,CACnD,CACF,EAEaM,EAAN,cAA2BP,CAAgB,CAChD,YAAYC,EAAU,yBAA0B,CAC9C,MAAMA,EAAS,IAAK,eAA6B,CACnD,CACF,EAEaO,EAAN,cAA+BR,CAAgB,CACpD,YAAYC,EAAU,qBAAsB,CAC1C,MAAMA,EAAS,IAAK,cAA4B,CAClD,CACF","names":["UploadErrorCode","UploadNestError","message","statusCode","errorCode","ValidationError","UnauthorizedError","UploadError","NetworkError","InvalidFileError"]}
Binary file