@xstbot/cloudku 1.0.1 → 1.0.2

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/README.md CHANGED
@@ -1,185 +1,184 @@
1
1
  # @xstbot/cloudku
2
2
 
3
- > **CloudKu Official SDK** Solusi integrasi CDN yang cepat, aman, dan dirancang khusus untuk pengembang modern.
3
+ > **CloudKu Official SDK** — Solusi integrasi CDN yang cepat, aman, dan dirancang khusus untuk pengembang modern.
4
4
 
5
5
  [![NPM Version](https://img.shields.io/npm/v/@xstbot/cloudku)](https://www.npmjs.com/package/@xstbot/cloudku)
6
6
  [![License](https://img.shields.io/npm/l/@xstbot/cloudku)](https://www.npmjs.com/package/@xstbot/cloudku)
7
+ [![TypeScript](https://img.shields.io/badge/TypeScript-Ready-blue?logo=typescript)](https://www.typescriptlang.org/)
7
8
  [![Status](https://img.shields.io/badge/status-stable-brightgreen)]()
8
9
 
9
- 📦 NPM Package : https://www.npmjs.com/package/@xstbot/cloudku
10
- 📖 Dokumentasi : https://cloudku.sbs/npm
10
+ 📦 NPM Package : https://www.npmjs.com/package/@xstbot/cloudku
11
+ 📖 Dokumentasi : https://cloudku.sbs/docs
11
12
 
12
13
  ---
13
14
 
14
- ## 📋 Daftar Isi
15
+ ## 📋 Daftar Isi
15
16
 
16
17
  - [Tentang](#tentang)
17
18
  - [Instalasi](#instalasi)
18
19
  - [Penggunaan](#penggunaan)
19
20
  - [JavaScript (CommonJS)](#javascript-commonjs)
20
- - [TypeScript](#typescript)
21
+ - [TypeScript / ESM](#typescript--esm)
22
+ - [API Reference](#api-reference)
21
23
  - [Response Schema](#response-schema)
22
- - [Contoh Lengkap](#contoh-lengkap)
23
24
  - [Error Handling](#error-handling)
24
25
  - [Lisensi](#lisensi)
25
26
 
26
27
  ---
27
28
 
28
- ## 📌 Tentang
29
+ ## 📌 Tentang
29
30
 
30
- `@xstbot/cloudku` adalah SDK resmi dari **CloudKu CDN** yang memungkinkan pengembang mengunggah file ke jaringan CDN secara mudah dan cepat. Library ini mendukung JavaScript (CommonJS) dan TypeScript, sehingga cocok digunakan di berbagai lingkungan pengembangan modern.
31
+ `@xstbot/cloudku` adalah SDK resmi dari **CloudKu CDN** yang memungkinkan pengembang mengunggah file ke jaringan CDN secara mudah dan cepat. Library ini mendukung **JavaScript** (CJS & ESM) dan **TypeScript** dengan type definitions bawaan.
31
32
 
32
33
  ---
33
34
 
34
- ## 🚀 Instalasi
35
+ ## 🚀 Instalasi
35
36
 
36
- Pasang library melalui NPM dengan perintah berikut:
37
-
38
- ```bash
39
37
  npm install @xstbot/cloudku
40
- ```
41
-
42
- Atau menggunakan Yarn:
43
-
44
- ```bash
38
+ # atau
45
39
  yarn add @xstbot/cloudku
46
- ```
47
40
 
48
41
  ---
49
42
 
50
- ## 📖 Penggunaan
43
+ ## 📖 Penggunaan
51
44
 
52
45
  ### JavaScript (CommonJS)
53
46
 
54
- Gunakan `require` untuk integrasi cepat pada proyek Node.js atau Express.
47
+ const { CloudKu, uploadFile } = require('@xstbot/cloudku');
48
+ const fs = require('fs');
55
49
 
56
- ```js
57
- const { CloudKu } = require('@xstbot/cloudku');
50
+ const buffer = fs.readFileSync('./photo.jpg');
58
51
 
59
- /**
60
- * Fungsi untuk menangani upload file
61
- * @param {Buffer} fileBuffer - Data buffer dari file
62
- * @param {String} fileName - Nama file yang diinginkan
63
- */
64
- async function handleFileUpload(fileBuffer, fileName) {
65
- try {
66
- const result = await CloudKu(fileBuffer, fileName);
52
+ // Menggunakan Class (dengan konfigurasi)
53
+ const client = new CloudKu({ timeout: 60_000 });
67
54
 
55
+ async function handleUpload() {
56
+ try {
57
+ const result = await client.upload(buffer, 'photo.jpg');
68
58
  if (result.status === 'success') {
69
- console.log(' File Berhasil Diunggah:', result.url);
59
+ console.log('✅ File berhasil diunggah:', result.url);
70
60
  } else {
71
- console.error(' API Error:', result.message);
61
+ console.error('❌ API Error:', result.message);
72
62
  }
73
63
  } catch (err) {
74
- console.error('🔥 System Error:', err.message);
64
+ console.error('🔥 System Error:', err.message);
75
65
  }
76
66
  }
77
- ```
67
+
68
+ // Menggunakan Fungsi Langsung (tanpa konfigurasi)
69
+ async function quickUpload() {
70
+ const result = await uploadFile(buffer, 'photo.jpg');
71
+ console.log(result);
72
+ }
78
73
 
79
74
  ---
80
75
 
81
- ### TypeScript
76
+ ### TypeScript / ESM
82
77
 
83
- Dukungan penuh tipe data untuk pengalaman pengembangan yang lebih aman dan terstruktur.
78
+ import { CloudKu, uploadFile } from '@xstbot/cloudku';
79
+ import type { CloudKuResponse, CloudKuOptions } from '@xstbot/cloudku';
80
+ import fs from 'fs';
84
81
 
85
- ```ts
86
- import { CloudKu, CloudKuResponse } from '@xstbot/cloudku';
82
+ const buffer = fs.readFileSync('./photo.jpg');
87
83
 
88
- const uploadToCDN = async (buffer: Buffer, name: string): Promise<void> => {
89
- const response: CloudKuResponse = await CloudKu(buffer, name);
84
+ // Menggunakan Class
85
+ const options: CloudKuOptions = { timeout: 60_000 };
86
+ const client = new CloudKu(options);
90
87
 
88
+ const uploadWithClass = async (): Promise<void> => {
89
+ const response: CloudKuResponse = await client.upload(buffer, 'photo.jpg');
91
90
  if (response.status === 'success') {
92
- // Properti 'url' sudah terdefinisi secara otomatis
93
- process.stdout.write(`✅ File live at: ${response.url}`);
91
+ console.log(`✅ File live at: ${response.url}`);
94
92
  }
95
93
  };
96
- ```
94
+
95
+ // Menggunakan Fungsi Langsung
96
+ const quickUpload = async (): Promise<void> => {
97
+ const response = await uploadFile(buffer, 'photo.jpg');
98
+ console.log(response);
99
+ };
97
100
 
98
101
  ---
99
102
 
100
- ## 📊 Response Schema
103
+ ## 📚 API Reference
104
+
105
+ ### uploadFile(fileBuffer, fileName, options?)
101
106
 
102
- Struktur data yang dikembalikan oleh setiap permintaan API:
107
+ Fungsi langsung untuk upload file tanpa perlu membuat instance.
103
108
 
104
- | Property | Type | Description |
105
- |-----------|-----------------------|-----------------------------------------------------|
106
- | `status` | `string` | Mengembalikan `"success"` atau `"error"` |
107
- | `message` | `string` | Detail pesan respons atau informasi error |
108
- | `url` | `string \| undefined` | URL publik permanen file (hanya jika status sukses) |
109
+ | Parameter | Type | Required | Description |
110
+ |-------------------|----------|----------|-------------------------------------|
111
+ | fileBuffer | Buffer | YES | Isi file sebagai Node.js Buffer |
112
+ | fileName | string | YES | Nama file beserta ekstensi |
113
+ | options.apiUrl | string | NO | Custom API URL |
114
+ | options.timeout | number | NO | Timeout dalam ms (default: 30000) |
109
115
 
110
116
  ---
111
117
 
112
- ## 💡 Contoh Lengkap
118
+ ### new CloudKu(options?)
113
119
 
114
- Berikut contoh penggunaan lengkap untuk upload file dari sistem lokal:
120
+ Instance-based client dengan konfigurasi persisten.
115
121
 
116
- ```js
117
- const { CloudKu } = require('@xstbot/cloudku');
118
- const fs = require('fs');
119
- const path = require('path');
122
+ | Option | Type | Default | Description |
123
+ |-----------|----------|-----------------------------------|---------------------|
124
+ | apiUrl | string | https://cloudku.sbs/cdn/api.php | Custom API endpoint |
125
+ | timeout | number | 30000 | Timeout dalam ms |
120
126
 
121
- async function uploadLocalFile(filePath) {
122
- const fileBuffer = fs.readFileSync(filePath);
123
- const fileName = path.basename(filePath);
127
+ Methods:
124
128
 
125
- console.log(`📤 Mengupload: ${fileName}`);
129
+ | Method | Return | Description |
130
+ |--------------------------------|----------------------------|------------------------------------|
131
+ | upload(fileBuffer, fileName) | Promise<CloudKuResponse> | Upload file ke CDN |
132
+ | getOptions() | CloudKuOptions | Melihat konfigurasi aktif instance |
126
133
 
127
- const result = await CloudKu(fileBuffer, fileName);
134
+ ---
128
135
 
129
- if (result.status === 'success') {
130
- console.log('✅ Upload berhasil!');
131
- console.log('🔗 URL File:', result.url);
132
- } else {
133
- console.error('❌ Upload gagal:', result.message);
134
- }
135
- }
136
+ ## 📊 Response Schema
136
137
 
137
- // Contoh pemanggilan
138
- uploadLocalFile('./foto.jpg');
139
- ```
138
+ | Property | Type | Description |
139
+ |------------|------------------------|-------------------------------------------------|
140
+ | status | "success" or "error" | Status hasil operasi |
141
+ | message | string | Detail pesan atau informasi error |
142
+ | url | string or undefined | URL publik file (hanya tersedia jika success) |
143
+ | fileName | string or undefined | Nama file yang tersimpan di CDN |
140
144
 
141
145
  ---
142
146
 
143
- ## ⚠️ Error Handling
147
+ ## ⚠️ Error Handling
144
148
 
145
- Selalu gunakan `try/catch` untuk menangani error yang mungkin terjadi:
149
+ import { uploadFile } from '@xstbot/cloudku';
146
150
 
147
- ```js
148
- const { CloudKu } = require('@xstbot/cloudku');
149
-
150
- async function safeUpload(buffer, filename) {
151
+ async function safeUpload(buffer: Buffer, filename: string) {
151
152
  try {
152
- const result = await CloudKu(buffer, filename);
153
-
153
+ const result = await uploadFile(buffer, filename);
154
154
  if (result.status === 'success') {
155
155
  return result.url;
156
156
  } else {
157
157
  throw new Error(result.message);
158
158
  }
159
159
  } catch (error) {
160
- console.error('Upload gagal:', error.message);
160
+ console.error('Upload gagal:', (error as Error).message);
161
161
  return null;
162
162
  }
163
163
  }
164
- ```
165
164
 
166
165
  ---
167
166
 
168
- ## 🔗 Tautan Penting
167
+ ## 🔗 Tautan Penting
169
168
 
170
- | Sumber | URL |
171
- |----------------|---------------------------------------------------|
172
- | NPM Package | https://www.npmjs.com/package/@xstbot/cloudku |
173
- | Dokumentasi | https://cloudku.sbs/npm |
174
- | CloudKu Utama | https://cloudku.sbs |
169
+ | Sumber | URL |
170
+ |---------------|-----------------------------------------------|
171
+ | NPM Package | https://www.npmjs.com/package/@xstbot/cloudku |
172
+ | Dokumentasi | https://cloudku.sbs/docs |
173
+ | CloudKu Utama | https://cloudku.sbs |
175
174
 
176
175
  ---
177
176
 
178
- ## 📄 Lisensi
177
+ ## 📄 Lisensi
179
178
 
180
- Proyek ini dilisensikan di bawah lisensi yang tercantum pada halaman NPM resmi.
179
+ Proyek ini dilisensikan di bawah lisensi yang tercantum pada halaman NPM resmi.
181
180
  Kunjungi: https://www.npmjs.com/package/@xstbot/cloudku
182
181
 
183
182
  ---
184
183
 
185
- > © 2026 CloudKu CDN API Developed for Modern Apps
184
+ > © 2026 CloudKu CDN API • Developed for Modern Apps
@@ -0,0 +1,78 @@
1
+ import axios from 'axios';
2
+ import FormData from 'form-data';
3
+ export const CloudKu_URL = 'https://cloudku.sbs/cdn/api.php';
4
+ // ─── Core Upload Function ─────────────────────────────────────────────────────
5
+ /**
6
+ * Upload a file Buffer to CloudKu CDN.
7
+ *
8
+ * @param fileBuffer - File content as a Node.js Buffer
9
+ * @param fileName - File name including extension (e.g. `photo.jpg`)
10
+ * @param options - Optional configuration (apiUrl, timeout)
11
+ * @returns CDN response object
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * import { uploadFile } from 'cloudku-uploader';
16
+ * import fs from 'fs';
17
+ *
18
+ * const buffer = fs.readFileSync('./photo.jpg');
19
+ * const result = await uploadFile(buffer, 'photo.jpg');
20
+ * console.log(result);
21
+ * ```
22
+ */
23
+ export const uploadFile = async (fileBuffer, fileName, options = {}) => {
24
+ var _a, _b;
25
+ if (!fileBuffer || !Buffer.isBuffer(fileBuffer)) {
26
+ throw new TypeError('fileBuffer must be a valid Buffer');
27
+ }
28
+ if (!fileName || typeof fileName !== 'string' || fileName.trim() === '') {
29
+ throw new TypeError('fileName must be a non-empty string');
30
+ }
31
+ const apiUrl = (_a = options.apiUrl) !== null && _a !== void 0 ? _a : CloudKu_URL;
32
+ const timeout = (_b = options.timeout) !== null && _b !== void 0 ? _b : 30000;
33
+ const form = new FormData();
34
+ form.append('file', fileBuffer, { filename: fileName });
35
+ const response = await axios.post(apiUrl, form, {
36
+ headers: { ...form.getHeaders() },
37
+ timeout,
38
+ maxContentLength: Infinity,
39
+ maxBodyLength: Infinity,
40
+ });
41
+ return response.data;
42
+ };
43
+ // ─── Class API ────────────────────────────────────────────────────────────────
44
+ /**
45
+ * CloudKu class — instance-based client with persistent configuration.
46
+ *
47
+ * @example
48
+ * ```ts
49
+ * import { CloudKu } from 'cloudku-uploader';
50
+ *
51
+ * const client = new CloudKu({ timeout: 60_000 });
52
+ * const result = await client.upload(buffer, 'video.mp4');
53
+ * ```
54
+ */
55
+ export class CloudKu {
56
+ constructor(options = {}) {
57
+ var _a, _b;
58
+ this.options = {
59
+ apiUrl: (_a = options.apiUrl) !== null && _a !== void 0 ? _a : CloudKu_URL,
60
+ timeout: (_b = options.timeout) !== null && _b !== void 0 ? _b : 30000,
61
+ };
62
+ }
63
+ /**
64
+ * Upload a file to CloudKu CDN.
65
+ * @param fileBuffer - File content as a Buffer
66
+ * @param fileName - File name with extension
67
+ */
68
+ async upload(fileBuffer, fileName) {
69
+ return uploadFile(fileBuffer, fileName, this.options);
70
+ }
71
+ /** Returns the active configuration of this client instance */
72
+ getOptions() {
73
+ return { ...this.options };
74
+ }
75
+ }
76
+ // ─── Default Export ───────────────────────────────────────────────────────────
77
+ export default CloudKu;
78
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,MAAM,WAAW,GAAG,iCAAiC,CAAC;AAyB7D,iFAAiF;AAEjF;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAC3B,UAAkB,EAClB,QAAgB,EAChB,UAA0B,EAAE,EACJ,EAAE;;IAC1B,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACtE,MAAM,IAAI,SAAS,CAAC,qCAAqC,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,MAAM,GAAG,MAAA,OAAO,CAAC,MAAM,mCAAI,WAAW,CAAC;IAC7C,MAAM,OAAO,GAAG,MAAA,OAAO,CAAC,OAAO,mCAAI,KAAM,CAAC;IAE1C,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IAExD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAkB,MAAM,EAAE,IAAI,EAAE;QAC7D,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE;QACjC,OAAO;QACP,gBAAgB,EAAE,QAAQ;QAC1B,aAAa,EAAE,QAAQ;KAC1B,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC,IAAI,CAAC;AACzB,CAAC,CAAC;AAEF,iFAAiF;AAEjF;;;;;;;;;;GAUG;AACH,MAAM,OAAO,OAAO;IAGhB,YAAY,UAA0B,EAAE;;QACpC,IAAI,CAAC,OAAO,GAAG;YACX,MAAM,EAAE,MAAA,OAAO,CAAC,MAAM,mCAAI,WAAW;YACrC,OAAO,EAAE,MAAA,OAAO,CAAC,OAAO,mCAAI,KAAM;SACrC,CAAC;IACN,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,UAAkB,EAAE,QAAgB;QAC7C,OAAO,UAAU,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1D,CAAC;IAED,+DAA+D;IAC/D,UAAU;QACN,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC/B,CAAC;CACJ;AAED,iFAAiF;AAEjF,eAAe,OAAO,CAAC"}
@@ -0,0 +1,62 @@
1
+ export declare const CloudKu_URL = "https://cloudku.sbs/cdn/api.php";
2
+ export interface CloudKuOptions {
3
+ /** Custom API endpoint. Default: CloudKu CDN */
4
+ apiUrl?: string;
5
+ /** Request timeout in milliseconds. Default: 30000 */
6
+ timeout?: number;
7
+ }
8
+ export interface CloudKuSuccessResponse {
9
+ status: 'success' | string;
10
+ url?: string;
11
+ fileName?: string;
12
+ [key: string]: unknown;
13
+ }
14
+ export interface CloudKuErrorResponse {
15
+ status: 'error';
16
+ message: string;
17
+ }
18
+ export type CloudKuResponse = CloudKuSuccessResponse | CloudKuErrorResponse;
19
+ /**
20
+ * Upload a file Buffer to CloudKu CDN.
21
+ *
22
+ * @param fileBuffer - File content as a Node.js Buffer
23
+ * @param fileName - File name including extension (e.g. `photo.jpg`)
24
+ * @param options - Optional configuration (apiUrl, timeout)
25
+ * @returns CDN response object
26
+ *
27
+ * @example
28
+ * ```ts
29
+ * import { uploadFile } from 'cloudku-uploader';
30
+ * import fs from 'fs';
31
+ *
32
+ * const buffer = fs.readFileSync('./photo.jpg');
33
+ * const result = await uploadFile(buffer, 'photo.jpg');
34
+ * console.log(result);
35
+ * ```
36
+ */
37
+ export declare const uploadFile: (fileBuffer: Buffer, fileName: string, options?: CloudKuOptions) => Promise<CloudKuResponse>;
38
+ /**
39
+ * CloudKu class — instance-based client with persistent configuration.
40
+ *
41
+ * @example
42
+ * ```ts
43
+ * import { CloudKu } from 'cloudku-uploader';
44
+ *
45
+ * const client = new CloudKu({ timeout: 60_000 });
46
+ * const result = await client.upload(buffer, 'video.mp4');
47
+ * ```
48
+ */
49
+ export declare class CloudKu {
50
+ private readonly options;
51
+ constructor(options?: CloudKuOptions);
52
+ /**
53
+ * Upload a file to CloudKu CDN.
54
+ * @param fileBuffer - File content as a Buffer
55
+ * @param fileName - File name with extension
56
+ */
57
+ upload(fileBuffer: Buffer, fileName: string): Promise<CloudKuResponse>;
58
+ /** Returns the active configuration of this client instance */
59
+ getOptions(): Readonly<Required<CloudKuOptions>>;
60
+ }
61
+ export default CloudKu;
62
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,WAAW,oCAAoC,CAAC;AAI7D,MAAM,WAAW,cAAc;IAC3B,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACnC,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,eAAe,GAAG,sBAAsB,GAAG,oBAAoB,CAAC;AAI5E;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,UAAU,GACnB,YAAY,MAAM,EAClB,UAAU,MAAM,EAChB,UAAS,cAAmB,KAC7B,OAAO,CAAC,eAAe,CAsBzB,CAAC;AAIF;;;;;;;;;;GAUG;AACH,qBAAa,OAAO;IAChB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;gBAEvC,OAAO,GAAE,cAAmB;IAOxC;;;;OAIG;IACG,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAI5E,+DAA+D;IAC/D,UAAU,IAAI,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;CAGnD;AAID,eAAe,OAAO,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.CloudKu = exports.uploadFile = exports.CloudKu_URL = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const form_data_1 = __importDefault(require("form-data"));
9
+ exports.CloudKu_URL = 'https://cloudku.sbs/cdn/api.php';
10
+ // ─── Core Upload Function ─────────────────────────────────────────────────────
11
+ /**
12
+ * Upload a file Buffer to CloudKu CDN.
13
+ *
14
+ * @param fileBuffer - File content as a Node.js Buffer
15
+ * @param fileName - File name including extension (e.g. `photo.jpg`)
16
+ * @param options - Optional configuration (apiUrl, timeout)
17
+ * @returns CDN response object
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * import { uploadFile } from 'cloudku-uploader';
22
+ * import fs from 'fs';
23
+ *
24
+ * const buffer = fs.readFileSync('./photo.jpg');
25
+ * const result = await uploadFile(buffer, 'photo.jpg');
26
+ * console.log(result);
27
+ * ```
28
+ */
29
+ const uploadFile = async (fileBuffer, fileName, options = {}) => {
30
+ var _a, _b;
31
+ if (!fileBuffer || !Buffer.isBuffer(fileBuffer)) {
32
+ throw new TypeError('fileBuffer must be a valid Buffer');
33
+ }
34
+ if (!fileName || typeof fileName !== 'string' || fileName.trim() === '') {
35
+ throw new TypeError('fileName must be a non-empty string');
36
+ }
37
+ const apiUrl = (_a = options.apiUrl) !== null && _a !== void 0 ? _a : exports.CloudKu_URL;
38
+ const timeout = (_b = options.timeout) !== null && _b !== void 0 ? _b : 30000;
39
+ const form = new form_data_1.default();
40
+ form.append('file', fileBuffer, { filename: fileName });
41
+ const response = await axios_1.default.post(apiUrl, form, {
42
+ headers: { ...form.getHeaders() },
43
+ timeout,
44
+ maxContentLength: Infinity,
45
+ maxBodyLength: Infinity,
46
+ });
47
+ return response.data;
48
+ };
49
+ exports.uploadFile = uploadFile;
50
+ // ─── Class API ────────────────────────────────────────────────────────────────
51
+ /**
52
+ * CloudKu class — instance-based client with persistent configuration.
53
+ *
54
+ * @example
55
+ * ```ts
56
+ * import { CloudKu } from 'cloudku-uploader';
57
+ *
58
+ * const client = new CloudKu({ timeout: 60_000 });
59
+ * const result = await client.upload(buffer, 'video.mp4');
60
+ * ```
61
+ */
62
+ class CloudKu {
63
+ constructor(options = {}) {
64
+ var _a, _b;
65
+ this.options = {
66
+ apiUrl: (_a = options.apiUrl) !== null && _a !== void 0 ? _a : exports.CloudKu_URL,
67
+ timeout: (_b = options.timeout) !== null && _b !== void 0 ? _b : 30000,
68
+ };
69
+ }
70
+ /**
71
+ * Upload a file to CloudKu CDN.
72
+ * @param fileBuffer - File content as a Buffer
73
+ * @param fileName - File name with extension
74
+ */
75
+ async upload(fileBuffer, fileName) {
76
+ return (0, exports.uploadFile)(fileBuffer, fileName, this.options);
77
+ }
78
+ /** Returns the active configuration of this client instance */
79
+ getOptions() {
80
+ return { ...this.options };
81
+ }
82
+ }
83
+ exports.CloudKu = CloudKu;
84
+ // ─── Default Export ───────────────────────────────────────────────────────────
85
+ exports.default = CloudKu;
86
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,0DAAiC;AAEpB,QAAA,WAAW,GAAG,iCAAiC,CAAC;AAyB7D,iFAAiF;AAEjF;;;;;;;;;;;;;;;;;GAiBG;AACI,MAAM,UAAU,GAAG,KAAK,EAC3B,UAAkB,EAClB,QAAgB,EAChB,UAA0B,EAAE,EACJ,EAAE;;IAC1B,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACtE,MAAM,IAAI,SAAS,CAAC,qCAAqC,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,MAAM,GAAG,MAAA,OAAO,CAAC,MAAM,mCAAI,mBAAW,CAAC;IAC7C,MAAM,OAAO,GAAG,MAAA,OAAO,CAAC,OAAO,mCAAI,KAAM,CAAC;IAE1C,MAAM,IAAI,GAAG,IAAI,mBAAQ,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IAExD,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAAkB,MAAM,EAAE,IAAI,EAAE;QAC7D,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE;QACjC,OAAO;QACP,gBAAgB,EAAE,QAAQ;QAC1B,aAAa,EAAE,QAAQ;KAC1B,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC,IAAI,CAAC;AACzB,CAAC,CAAC;AA1BW,QAAA,UAAU,cA0BrB;AAEF,iFAAiF;AAEjF;;;;;;;;;;GAUG;AACH,MAAa,OAAO;IAGhB,YAAY,UAA0B,EAAE;;QACpC,IAAI,CAAC,OAAO,GAAG;YACX,MAAM,EAAE,MAAA,OAAO,CAAC,MAAM,mCAAI,mBAAW;YACrC,OAAO,EAAE,MAAA,OAAO,CAAC,OAAO,mCAAI,KAAM;SACrC,CAAC;IACN,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,UAAkB,EAAE,QAAgB;QAC7C,OAAO,IAAA,kBAAU,EAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1D,CAAC;IAED,+DAA+D;IAC/D,UAAU;QACN,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC/B,CAAC;CACJ;AAvBD,0BAuBC;AAED,iFAAiF;AAEjF,kBAAe,OAAO,CAAC"}
package/package.json CHANGED
@@ -1,20 +1,70 @@
1
1
  {
2
- "name": "@xstbot/cloudku",
3
- "version": "1.0.1",
4
- "description": "CloudKu CDN Uploader Library",
5
- "main": "index.js",
6
- "types": "index.d.ts",
7
- "scripts": {
8
- "build": "npx tsc src/index.ts --declaration --outDir ./ --esModuleInterop --skipLibCheck --target ES6 --module CommonJS"
9
- },
10
- "author": "xstbot",
11
- "license": "MIT",
12
- "dependencies": {
13
- "axios": "^1.6.0",
14
- "form-data": "^4.0.0"
15
- },
16
- "devDependencies": {
17
- "typescript": "^5.0.0",
18
- "@types/node": "^20.0.0"
19
- }
20
- }
2
+ "name": "@xstbot/cloudku",
3
+ "version": "1.0.2",
4
+ "description": "CloudKu CDN Uploader Library",
5
+ "author": "xstbot",
6
+ "license": "MIT",
7
+ "main": "dist/index.js",
8
+ "module": "dist/esm/index.js",
9
+ "types": "dist/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "import": "./dist/esm/index.js",
13
+ "require": "./dist/index.js",
14
+ "types": "./dist/index.d.ts"
15
+ }
16
+ },
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "scripts": {
21
+ "build:cjs": "tsc --project tsconfig.json",
22
+ "build:esm": "tsc --project tsconfig.esm.json",
23
+ "build": "npm run build:cjs && npm run build:esm",
24
+ "prepare": "npm run build",
25
+ "clean": "rimraf dist"
26
+ },
27
+ "keywords": [
28
+ "cloudku",
29
+ "cloudku-cdn",
30
+ "cdn",
31
+ "free-cdn",
32
+ "cloud-storage",
33
+ "file-upload",
34
+ "upload-file",
35
+ "uploader",
36
+ "cloud-uploader",
37
+ "storage",
38
+ "object-storage",
39
+ "media-upload",
40
+ "image-upload",
41
+ "video-upload",
42
+ "nodejs",
43
+ "typescript",
44
+ "javascript",
45
+ "api-client",
46
+ "rest-api",
47
+ "cdn-uploader",
48
+ "file-hosting",
49
+ "hosting",
50
+ "cloud-service",
51
+ "free-cloud"
52
+ ],
53
+ "dependencies": {
54
+ "axios": "^1.6.0",
55
+ "form-data": "^4.0.0"
56
+ },
57
+ "devDependencies": {
58
+ "@types/node": "^20.0.0",
59
+ "@types/form-data": "^2.5.0",
60
+ "typescript": "^5.3.0",
61
+ "rimraf": "^5.0.0"
62
+ },
63
+ "engines": {
64
+ "node": ">=14.0.0"
65
+ },
66
+ "repository": {
67
+ "type": "git",
68
+ "url": "https://github.com/xstbot-cloudku/cloudku.git"
69
+ }
70
+ }
package/index.d.ts DELETED
@@ -1,7 +0,0 @@
1
- export interface CloudKuResponse {
2
- status: string;
3
- message: string;
4
- url?: string;
5
- [key: string]: any;
6
- }
7
- export declare const CloudKu: (fileBuffer: Buffer, fileName: string) => Promise<CloudKuResponse>;
package/index.js DELETED
@@ -1,39 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.CloudKu = void 0;
16
- const axios_1 = __importDefault(require("axios"));
17
- const form_data_1 = __importDefault(require("form-data"));
18
- const CloudKu = (fileBuffer, fileName) => __awaiter(void 0, void 0, void 0, function* () {
19
- var _a, _b, _c;
20
- try {
21
- const url = 'https://cloudku.sbs/cdn/api.php';
22
- const form = new form_data_1.default();
23
- form.append('file', fileBuffer, { filename: fileName });
24
- const response = yield axios_1.default.post(url, form, {
25
- headers: Object.assign({}, form.getHeaders()),
26
- maxContentLength: Infinity,
27
- maxBodyLength: Infinity
28
- });
29
- return response.data;
30
- }
31
- catch (error) {
32
- console.error('❌ CloudKu Upload Error:', ((_a = error.response) === null || _a === void 0 ? void 0 : _a.data) || error.message);
33
- return {
34
- status: 'error',
35
- message: ((_c = (_b = error.response) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.message) || error.message
36
- };
37
- }
38
- });
39
- exports.CloudKu = CloudKu;
package/src/index.ts DELETED
@@ -1,29 +0,0 @@
1
- import axios from 'axios';
2
- import FormData from 'form-data';
3
-
4
- export interface CloudKuResponse {
5
- status: string;
6
- message: string;
7
- url?: string;
8
- [key: string]: any;
9
- }
10
-
11
- export const CloudKu = async (fileBuffer: Buffer, fileName: string): Promise<CloudKuResponse> => {
12
- try {
13
- const url = 'https://cloudku.sbs/cdn/api.php';
14
- const form = new FormData();
15
- form.append('file', fileBuffer, { filename: fileName });
16
- const response = await axios.post(url, form, {
17
- headers: { ...form.getHeaders() },
18
- maxContentLength: Infinity,
19
- maxBodyLength: Infinity
20
- });
21
- return response.data;
22
- } catch (error: any) {
23
- console.error('❌ CloudKu Upload Error:', error.response?.data || error.message);
24
- return {
25
- status: 'error',
26
- message: error.response?.data?.message || error.message
27
- };
28
- }
29
- };