uploadkit-sdk 1.0.1

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 ADDED
@@ -0,0 +1,13 @@
1
+ # @uploadnest/sdk
2
+
3
+ ## 1.0.1
4
+
5
+ ### Patch Changes
6
+
7
+ - Update package.json
8
+
9
+ ## 1.0.1
10
+
11
+ ### Patch Changes
12
+
13
+ - Initial release with full TypeScript support and cross-platform file upload capabilities
package/README.md ADDED
@@ -0,0 +1,128 @@
1
+ # @uploadnest/sdk
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)
5
+
6
+ TypeScript library for uploading files to Uploadnest API. Works in Node.js, Next.js, and browsers.
7
+
8
+ ## Installation
9
+
10
+ ```bash
11
+ npm install @uploadnest/sdk
12
+ # or
13
+ pnpm add @uploadnest/sdk
14
+ ```
15
+
16
+ ## Quick Start
17
+
18
+ ```typescript
19
+ import { UploadNestClient } from "@uploadnest/sdk";
20
+
21
+ const client = new UploadNestClient({
22
+ apiKey: "your-api-key",
23
+ });
24
+
25
+ // Upload files
26
+ const result = await client.uploadFiles(files);
27
+ console.log(result.files);
28
+ ```
29
+
30
+ ## Usage Examples
31
+
32
+ ### Node.js - File Paths
33
+
34
+ ```typescript
35
+ // Upload from file path
36
+ await client.uploadFiles("/path/to/file.jpg");
37
+
38
+ // Multiple files
39
+ await client.uploadFiles(["/path/to/file1.jpg", "/path/to/file2.pdf"]);
40
+ ```
41
+
42
+ ### Node.js - Buffers
43
+
44
+ ```typescript
45
+ import fs from "fs";
46
+
47
+ const buffer = fs.readFileSync("image.jpg");
48
+ // Add metadata to buffer
49
+ buffer.name = "image.jpg";
50
+ buffer.type = "image/jpeg";
51
+
52
+ await client.uploadFiles(buffer);
53
+ ```
54
+
55
+ ### Browser/Next.js - File Objects
56
+
57
+ ```typescript
58
+ // From file input
59
+ const fileInput = document.querySelector('input[type="file"]');
60
+ await client.uploadFiles(fileInput.files[0]);
61
+
62
+ // Multiple files
63
+ await client.uploadFiles(Array.from(fileInput.files));
64
+ ```
65
+
66
+ ### Next.js Server Actions
67
+
68
+ ```typescript
69
+ // app/upload/page.tsx
70
+ import { UploadNestClient } from "@uploadnest/sdk";
71
+
72
+ async function uploadAction(formData: FormData) {
73
+ "use server";
74
+
75
+ const client = new UploadNestClient({
76
+ apiKey: process.env.UPLOADNEST_API_KEY!,
77
+ isBrowser: true,
78
+ });
79
+
80
+ const file = formData.get("file") as File;
81
+ const result = await client.uploadFiles(file);
82
+
83
+ return result;
84
+ }
85
+ ```
86
+
87
+ ## Supported File Types
88
+
89
+ - **Node.js**: File paths (strings), Buffers
90
+ - **Browser**: File objects, Blob objects
91
+ - **Next.js**: File objects, Blob objects (server actions/API routes)
92
+
93
+ ## Error Handling
94
+
95
+ ```typescript
96
+ import { ValidationError, UploadError } from "@uploadnest/sdk/errors";
97
+
98
+ try {
99
+ await client.uploadFiles(files);
100
+ } catch (error) {
101
+ if (error instanceof ValidationError) {
102
+ console.log("Invalid file type:", error.message);
103
+ } else if (error instanceof UploadError) {
104
+ console.log("Upload failed:", error.message);
105
+ }
106
+ }
107
+ ```
108
+
109
+ ## TypeScript Support
110
+
111
+ Full TypeScript support with type definitions:
112
+
113
+ ```typescript
114
+ import type { UploadFileResponse } from "@uploadnest/sdk/types";
115
+
116
+ const result: UploadFileResponse = await client.uploadFiles(files);
117
+ ```
118
+
119
+ ## Requirements
120
+
121
+ - **Node.js**: 18+
122
+ - **TypeScript**: 4.5+ (optional)
123
+ - **Browsers**: Modern browsers with fetch support
124
+ - **Next.js**: 13+ (App Router recommended)
125
+
126
+ ## License
127
+
128
+ Apache-2.0
@@ -0,0 +1,2 @@
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
@@ -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 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"]}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=chunk-JZJWUVD7.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,30 @@
1
+ declare enum UploadErrorCode {
2
+ VALIDATION_ERROR = "VALIDATION_ERROR",
3
+ UNAUTHORIZED = "UNAUTHORIZED",
4
+ UPLOAD_FAILED = "UPLOAD_FAILED",
5
+ REQUEST_FAILED = "REQUEST_FAILED",
6
+ INVALID_FILE = "INVALID_FILE",
7
+ NETWORK_ERROR = "NETWORK_ERROR"
8
+ }
9
+ declare class UploadNestError extends Error {
10
+ statusCode: number;
11
+ errorCode: UploadErrorCode;
12
+ constructor(message: string, statusCode: number | undefined, errorCode: UploadErrorCode);
13
+ }
14
+ declare class ValidationError extends UploadNestError {
15
+ constructor(message?: string);
16
+ }
17
+ declare class UnauthorizedError extends UploadNestError {
18
+ constructor(message?: string);
19
+ }
20
+ declare class UploadError extends UploadNestError {
21
+ constructor(message?: string);
22
+ }
23
+ declare class NetworkError extends UploadNestError {
24
+ constructor(message?: string);
25
+ }
26
+ declare class InvalidFileError extends UploadNestError {
27
+ constructor(message?: string);
28
+ }
29
+
30
+ export { InvalidFileError, NetworkError, UnauthorizedError, UploadError, UploadErrorCode, UploadNestError, ValidationError };
@@ -0,0 +1,30 @@
1
+ declare enum UploadErrorCode {
2
+ VALIDATION_ERROR = "VALIDATION_ERROR",
3
+ UNAUTHORIZED = "UNAUTHORIZED",
4
+ UPLOAD_FAILED = "UPLOAD_FAILED",
5
+ REQUEST_FAILED = "REQUEST_FAILED",
6
+ INVALID_FILE = "INVALID_FILE",
7
+ NETWORK_ERROR = "NETWORK_ERROR"
8
+ }
9
+ declare class UploadNestError extends Error {
10
+ statusCode: number;
11
+ errorCode: UploadErrorCode;
12
+ constructor(message: string, statusCode: number | undefined, errorCode: UploadErrorCode);
13
+ }
14
+ declare class ValidationError extends UploadNestError {
15
+ constructor(message?: string);
16
+ }
17
+ declare class UnauthorizedError extends UploadNestError {
18
+ constructor(message?: string);
19
+ }
20
+ declare class UploadError extends UploadNestError {
21
+ constructor(message?: string);
22
+ }
23
+ declare class NetworkError extends UploadNestError {
24
+ constructor(message?: string);
25
+ }
26
+ declare class InvalidFileError extends UploadNestError {
27
+ constructor(message?: string);
28
+ }
29
+
30
+ export { InvalidFileError, NetworkError, UnauthorizedError, UploadError, UploadErrorCode, UploadNestError, ValidationError };
package/dist/errors.js ADDED
@@ -0,0 +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});
2
+ //# sourceMappingURL=errors.js.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 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"]}
@@ -0,0 +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};
2
+ //# sourceMappingURL=errors.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,16 @@
1
+ import { UploadNestClientOptions, UploadInput, UploadResponseType } from './types.mjs';
2
+ export { UploadRequestOptions } from './types.mjs';
3
+ export { InvalidFileError, NetworkError, UnauthorizedError, UploadError, UploadErrorCode, UploadNestError, ValidationError } from './errors.mjs';
4
+ import 'form-data';
5
+
6
+ declare class UploadNestClient {
7
+ private apiKey;
8
+ private shouldUseBrowser;
9
+ constructor(options: UploadNestClientOptions);
10
+ uploadFiles(files: UploadInput | UploadInput[]): Promise<UploadResponseType>;
11
+ }
12
+
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
+ type AllowedMimeType = (typeof ALLOWED_MIME_TYPES)[number];
15
+
16
+ export { ALLOWED_MIME_TYPES, type AllowedMimeType, UploadInput, UploadNestClient, UploadNestClientOptions, UploadResponseType, UploadNestClient as default };
@@ -0,0 +1,16 @@
1
+ import { UploadNestClientOptions, UploadInput, UploadResponseType } from './types.js';
2
+ export { UploadRequestOptions } from './types.js';
3
+ export { InvalidFileError, NetworkError, UnauthorizedError, UploadError, UploadErrorCode, UploadNestError, ValidationError } from './errors.js';
4
+ import 'form-data';
5
+
6
+ declare class UploadNestClient {
7
+ private apiKey;
8
+ private shouldUseBrowser;
9
+ constructor(options: UploadNestClientOptions);
10
+ uploadFiles(files: UploadInput | UploadInput[]): Promise<UploadResponseType>;
11
+ }
12
+
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
+ type AllowedMimeType = (typeof ALLOWED_MIME_TYPES)[number];
15
+
16
+ export { ALLOWED_MIME_TYPES, type AllowedMimeType, UploadInput, UploadNestClient, UploadNestClientOptions, UploadResponseType, UploadNestClient as default };
package/dist/index.js ADDED
@@ -0,0 +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.
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});
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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"]}
package/dist/index.mjs ADDED
@@ -0,0 +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.
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};
5
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +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"]}
@@ -0,0 +1,24 @@
1
+ import NodeFormData from 'form-data';
2
+
3
+ interface UploadNestClientOptions {
4
+ apiKey: string;
5
+ shouldUseBrowser?: boolean;
6
+ }
7
+ type UploadInput = File | Blob | Buffer | string;
8
+ interface UploadResponseType {
9
+ message: string;
10
+ data: {
11
+ fileId: string;
12
+ originalName: string;
13
+ size: number;
14
+ ext: string;
15
+ mimeType: string;
16
+ }[];
17
+ }
18
+ interface UploadRequestOptions {
19
+ method: string;
20
+ headers: Record<string, string>;
21
+ body: FormData | NodeFormData;
22
+ }
23
+
24
+ export type { UploadInput, UploadNestClientOptions, UploadRequestOptions, UploadResponseType };
@@ -0,0 +1,24 @@
1
+ import NodeFormData from 'form-data';
2
+
3
+ interface UploadNestClientOptions {
4
+ apiKey: string;
5
+ shouldUseBrowser?: boolean;
6
+ }
7
+ type UploadInput = File | Blob | Buffer | string;
8
+ interface UploadResponseType {
9
+ message: string;
10
+ data: {
11
+ fileId: string;
12
+ originalName: string;
13
+ size: number;
14
+ ext: string;
15
+ mimeType: string;
16
+ }[];
17
+ }
18
+ interface UploadRequestOptions {
19
+ method: string;
20
+ headers: Record<string, string>;
21
+ body: FormData | NodeFormData;
22
+ }
23
+
24
+ export type { UploadInput, UploadNestClientOptions, UploadRequestOptions, UploadResponseType };
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";var i=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var n=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var d=(t,e,s,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of n(e))!p.call(t,r)&&r!==s&&i(t,r,{get:()=>e[r],enumerable:!(o=a(e,r))||o.enumerable});return t};var g=t=>d(i({},"__esModule",{value:!0}),t);var l={};module.exports=g(l);
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +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"]}
package/dist/types.mjs ADDED
@@ -0,0 +1,2 @@
1
+ import"./chunk-JZJWUVD7.mjs";
2
+ //# sourceMappingURL=types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "uploadkit-sdk",
3
+ "version": "1.0.1",
4
+ "description": "The official TypeScript library for the Uploadkit API",
5
+ "main": "./dist/index.cjs",
6
+ "module": "./dist/index.mjs",
7
+ "types": "/dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.mjs",
11
+ "require": "./dist/index.cjs"
12
+ },
13
+ "./errors": {
14
+ "import": "./dist/errors.mjs",
15
+ "require": "./dist/errors.cjs"
16
+ },
17
+ "./types": {
18
+ "import": "./dist/types.mjs",
19
+ "require": "./dist/types.cjs"
20
+ }
21
+ },
22
+ "scripts": {
23
+ "build": "tsup",
24
+ "clean": "rimraf dist",
25
+ "changeset": "npx changeset",
26
+ "version-packages": "npx changeset version",
27
+ "release": "npm run build && npm run version-packages && npx changeset publish",
28
+ "prepublishOnly": "npm run clean && npm run build"
29
+ },
30
+ "repository": {
31
+ "url": "https://github.com/clemdevlin/uploadkit"
32
+ },
33
+ "publishConfig": {
34
+ "access": "public"
35
+ },
36
+ "keywords": [
37
+ "uploadkit",
38
+ "file-upload",
39
+ "storage",
40
+ "typescript",
41
+ "nodejs",
42
+ "nextjs"
43
+ ],
44
+ "author": "Clement",
45
+ "license": "Apache-2.0",
46
+ "dependencies": {
47
+ "form-data": "^4.0.4"
48
+ },
49
+ "devDependencies": {
50
+ "@types/node": "^24.3.0",
51
+ "rimraf": "^6.0.1",
52
+ "tsup": "^8.5.0",
53
+ "typescript": "^5.9.2"
54
+ }
55
+ }
Binary file