@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 +89 -90
- package/dist/esm/index.js +78 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/index.d.ts +62 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +86 -0
- package/dist/index.js.map +1 -0
- package/package.json +69 -19
- package/index.d.ts +0 -7
- package/index.js +0 -39
- package/src/index.ts +0 -29
package/README.md
CHANGED
|
@@ -1,185 +1,184 @@
|
|
|
1
1
|
# @xstbot/cloudku
|
|
2
2
|
|
|
3
|
-
> **CloudKu Official SDK**
|
|
3
|
+
> **CloudKu Official SDK** — Solusi integrasi CDN yang cepat, aman, dan dirancang khusus untuk pengembang modern.
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/@xstbot/cloudku)
|
|
6
6
|
[](https://www.npmjs.com/package/@xstbot/cloudku)
|
|
7
|
+
[](https://www.typescriptlang.org/)
|
|
7
8
|
[]()
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
📦 NPM Package : https://www.npmjs.com/package/@xstbot/cloudku
|
|
11
|
+
📖 Dokumentasi : https://cloudku.sbs/docs
|
|
11
12
|
|
|
12
13
|
---
|
|
13
14
|
|
|
14
|
-
##
|
|
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
|
-
##
|
|
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 (
|
|
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
|
-
##
|
|
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
|
-
##
|
|
43
|
+
## 📖 Penggunaan
|
|
51
44
|
|
|
52
45
|
### JavaScript (CommonJS)
|
|
53
46
|
|
|
54
|
-
|
|
47
|
+
const { CloudKu, uploadFile } = require('@xstbot/cloudku');
|
|
48
|
+
const fs = require('fs');
|
|
55
49
|
|
|
56
|
-
|
|
57
|
-
const { CloudKu } = require('@xstbot/cloudku');
|
|
50
|
+
const buffer = fs.readFileSync('./photo.jpg');
|
|
58
51
|
|
|
59
|
-
|
|
60
|
-
|
|
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('
|
|
59
|
+
console.log('✅ File berhasil diunggah:', result.url);
|
|
70
60
|
} else {
|
|
71
|
-
console.error('
|
|
61
|
+
console.error('⌠API Error:', result.message);
|
|
72
62
|
}
|
|
73
63
|
} catch (err) {
|
|
74
|
-
console.error('
|
|
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
|
-
|
|
78
|
+
import { CloudKu, uploadFile } from '@xstbot/cloudku';
|
|
79
|
+
import type { CloudKuResponse, CloudKuOptions } from '@xstbot/cloudku';
|
|
80
|
+
import fs from 'fs';
|
|
84
81
|
|
|
85
|
-
|
|
86
|
-
import { CloudKu, CloudKuResponse } from '@xstbot/cloudku';
|
|
82
|
+
const buffer = fs.readFileSync('./photo.jpg');
|
|
87
83
|
|
|
88
|
-
|
|
89
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
103
|
+
## 📚 API Reference
|
|
104
|
+
|
|
105
|
+
### uploadFile(fileBuffer, fileName, options?)
|
|
101
106
|
|
|
102
|
-
|
|
107
|
+
Fungsi langsung untuk upload file tanpa perlu membuat instance.
|
|
103
108
|
|
|
104
|
-
|
|
|
105
|
-
|
|
106
|
-
|
|
|
107
|
-
|
|
|
108
|
-
|
|
|
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
|
-
|
|
118
|
+
### new CloudKu(options?)
|
|
113
119
|
|
|
114
|
-
|
|
120
|
+
Instance-based client dengan konfigurasi persisten.
|
|
115
121
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
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
|
-
|
|
122
|
-
const fileBuffer = fs.readFileSync(filePath);
|
|
123
|
-
const fileName = path.basename(filePath);
|
|
127
|
+
Methods:
|
|
124
128
|
|
|
125
|
-
|
|
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
|
-
|
|
134
|
+
---
|
|
128
135
|
|
|
129
|
-
|
|
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
|
-
|
|
138
|
-
|
|
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
|
-
##
|
|
147
|
+
## âš ï¸ Error Handling
|
|
144
148
|
|
|
145
|
-
|
|
149
|
+
import { uploadFile } from '@xstbot/cloudku';
|
|
146
150
|
|
|
147
|
-
|
|
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
|
|
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
|
-
##
|
|
167
|
+
## 🔗 Tautan Penting
|
|
169
168
|
|
|
170
|
-
| Sumber
|
|
171
|
-
|
|
172
|
-
| NPM Package
|
|
173
|
-
| Dokumentasi
|
|
174
|
-
| CloudKu Utama
|
|
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
|
-
##
|
|
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
|
-
>
|
|
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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
"
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
"
|
|
18
|
-
|
|
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
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
|
-
};
|