@shivam995364/uplink-nodejs-test 0.1.0-beta.0

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.
Files changed (73) hide show
  1. package/Makefile +945 -0
  2. package/README.md +281 -0
  3. package/binding.gyp +105 -0
  4. package/dist/access/index.d.ts +102 -0
  5. package/dist/access/index.d.ts.map +1 -0
  6. package/dist/access/index.js +168 -0
  7. package/dist/access/index.js.map +1 -0
  8. package/dist/debug/index.d.ts +54 -0
  9. package/dist/debug/index.d.ts.map +1 -0
  10. package/dist/debug/index.js +61 -0
  11. package/dist/debug/index.js.map +1 -0
  12. package/dist/download/index.d.ts +106 -0
  13. package/dist/download/index.d.ts.map +1 -0
  14. package/dist/download/index.js +153 -0
  15. package/dist/download/index.js.map +1 -0
  16. package/dist/edge/index.d.ts +101 -0
  17. package/dist/edge/index.d.ts.map +1 -0
  18. package/dist/edge/index.js +128 -0
  19. package/dist/edge/index.js.map +1 -0
  20. package/dist/errors/codes.d.ts +29 -0
  21. package/dist/errors/codes.d.ts.map +1 -0
  22. package/dist/errors/codes.js +35 -0
  23. package/dist/errors/codes.js.map +1 -0
  24. package/dist/errors/exceptions.d.ts +135 -0
  25. package/dist/errors/exceptions.d.ts.map +1 -0
  26. package/dist/errors/exceptions.js +203 -0
  27. package/dist/errors/exceptions.js.map +1 -0
  28. package/dist/errors/factory.d.ts +69 -0
  29. package/dist/errors/factory.d.ts.map +1 -0
  30. package/dist/errors/factory.js +121 -0
  31. package/dist/errors/factory.js.map +1 -0
  32. package/dist/errors/index.d.ts +35 -0
  33. package/dist/errors/index.d.ts.map +1 -0
  34. package/dist/errors/index.js +69 -0
  35. package/dist/errors/index.js.map +1 -0
  36. package/dist/index.d.ts +22 -0
  37. package/dist/index.d.ts.map +1 -0
  38. package/dist/index.js +61 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/multipart/index.d.ts +146 -0
  41. package/dist/multipart/index.d.ts.map +1 -0
  42. package/dist/multipart/index.js +244 -0
  43. package/dist/multipart/index.js.map +1 -0
  44. package/dist/native/index.d.ts +72 -0
  45. package/dist/native/index.d.ts.map +1 -0
  46. package/dist/native/index.js +34 -0
  47. package/dist/native/index.js.map +1 -0
  48. package/dist/project/index.d.ts +409 -0
  49. package/dist/project/index.d.ts.map +1 -0
  50. package/dist/project/index.js +529 -0
  51. package/dist/project/index.js.map +1 -0
  52. package/dist/types/index.d.ts +299 -0
  53. package/dist/types/index.d.ts.map +1 -0
  54. package/dist/types/index.js +59 -0
  55. package/dist/types/index.js.map +1 -0
  56. package/dist/uplink.d.ts +99 -0
  57. package/dist/uplink.d.ts.map +1 -0
  58. package/dist/uplink.js +135 -0
  59. package/dist/uplink.js.map +1 -0
  60. package/dist/upload/index.d.ts +153 -0
  61. package/dist/upload/index.d.ts.map +1 -0
  62. package/dist/upload/index.js +206 -0
  63. package/dist/upload/index.js.map +1 -0
  64. package/native/include/uplink.h +545 -0
  65. package/native/include/uplink_compat.h +111 -0
  66. package/native/include/uplink_definitions.h +344 -0
  67. package/native/include/uplink_msvc_compat.h +0 -0
  68. package/native/prebuilds/darwin-arm64/libuplink.dylib +0 -0
  69. package/native/prebuilds/darwin-arm64/uplink_native.node +0 -0
  70. package/native/prebuilds/win32-x64/libuplink.dll +0 -0
  71. package/native/prebuilds/win32-x64/uplink.def +87 -0
  72. package/native/prebuilds/win32-x64/uplink.lib +0 -0
  73. package/package.json +94 -0
@@ -0,0 +1,529 @@
1
+ "use strict";
2
+ /**
3
+ * @file project/index.ts
4
+ * @brief ProjectResultStruct class for uplink-nodejs
5
+ *
6
+ * Provides TypeScript wrapper for project operations.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ProjectResultStruct = void 0;
10
+ const upload_1 = require("../upload");
11
+ const download_1 = require("../download");
12
+ const native_1 = require("../native");
13
+ /**
14
+ * Represents an open project on Storj.
15
+ *
16
+ * A project is the main entry point for bucket and object operations.
17
+ * Always call `close()` when done to free resources.
18
+ */
19
+ class ProjectResultStruct {
20
+ _handle;
21
+ _isOpen = true;
22
+ /**
23
+ * Create a new ProjectResultStruct from a native handle
24
+ * @internal
25
+ */
26
+ constructor(handle) {
27
+ if (handle == null) {
28
+ throw new TypeError('Invalid project handle');
29
+ }
30
+ this._handle = handle;
31
+ }
32
+ /**
33
+ * Get the internal handle (for internal use only)
34
+ * @internal
35
+ */
36
+ get _nativeHandle() {
37
+ this.validateOpen();
38
+ return this._handle;
39
+ }
40
+ /**
41
+ * Check if the project is still open
42
+ */
43
+ get isOpen() {
44
+ return this._isOpen;
45
+ }
46
+ /**
47
+ * Close the project and release resources.
48
+ *
49
+ * After calling this method, no other methods should be called
50
+ * on this project instance.
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * const project = await access.openProject();
55
+ * try {
56
+ * // Use project...
57
+ * } finally {
58
+ * await project.close();
59
+ * }
60
+ * ```
61
+ */
62
+ async close() {
63
+ if (!this._isOpen) {
64
+ return; // Already closed
65
+ }
66
+ await native_1.native.closeProject(this._handle);
67
+ this._isOpen = false;
68
+ }
69
+ /**
70
+ * Revoke an access grant.
71
+ *
72
+ * Revokes the API key embedded in the provided access grant.
73
+ * This is useful when you want to invalidate a previously shared access.
74
+ *
75
+ * @param access - The access grant to revoke (AccessResultStruct)
76
+ * @returns Promise resolving when the access is revoked
77
+ * @throws Error if revocation fails
78
+ *
79
+ * @example
80
+ * ```typescript
81
+ * // Create a shared access with limited permissions
82
+ * const sharedAccess = await access.share(permission, prefixes);
83
+ *
84
+ * // Give the shared access to someone...
85
+ *
86
+ * // Later, revoke the access when no longer needed
87
+ * await project.revokeAccess(sharedAccess);
88
+ * ```
89
+ */
90
+ async revokeAccess(access) {
91
+ this.validateOpen();
92
+ if (access == null || access._nativeHandle == null) {
93
+ throw new TypeError('Invalid access: must be an AccessResultStruct');
94
+ }
95
+ await native_1.native.revokeAccess(this._handle, access._nativeHandle);
96
+ }
97
+ /**
98
+ * Validate that the project is still open
99
+ * @throws Error if project is closed
100
+ */
101
+ validateOpen() {
102
+ if (!this._isOpen) {
103
+ throw new Error('Project is closed');
104
+ }
105
+ }
106
+ /**
107
+ * Validate a bucket name
108
+ * @param name - Bucket name to validate
109
+ * @throws TypeError if bucket name is invalid
110
+ */
111
+ validateBucketName(name) {
112
+ if (!name || typeof name !== 'string') {
113
+ throw new TypeError('Bucket name must be a non-empty string');
114
+ }
115
+ if (name.length < 3 || name.length > 63) {
116
+ throw new TypeError('Bucket name must be 3-63 characters');
117
+ }
118
+ // Bucket names must be lowercase alphanumeric or hyphens
119
+ // Must start and end with alphanumeric
120
+ if (!/^[a-z0-9][a-z0-9-]*[a-z0-9]$/.test(name) && name.length > 2) {
121
+ throw new TypeError('Bucket name must be lowercase alphanumeric or hyphens, ' +
122
+ 'starting and ending with alphanumeric');
123
+ }
124
+ // Single character names need special handling
125
+ if (name.length <= 2 && !/^[a-z0-9]+$/.test(name)) {
126
+ throw new TypeError('Bucket name must be lowercase alphanumeric');
127
+ }
128
+ }
129
+ // ========== Bucket Operations ==========
130
+ /**
131
+ * Create a new bucket.
132
+ *
133
+ * @param name - Bucket name (3-63 lowercase alphanumeric chars or hyphens)
134
+ * @returns Promise resolving to the created bucket info
135
+ * @throws TypeError if bucket name is invalid
136
+ * @throws Error if bucket already exists
137
+ *
138
+ * @example
139
+ * ```typescript
140
+ * const bucket = await project.createBucket('my-bucket');
141
+ * console.log(`Created bucket: ${bucket.name}`);
142
+ * ```
143
+ */
144
+ async createBucket(name) {
145
+ this.validateOpen();
146
+ this.validateBucketName(name);
147
+ return native_1.native.createBucket(this._handle, name);
148
+ }
149
+ /**
150
+ * Ensure a bucket exists, creating it if necessary.
151
+ *
152
+ * This is idempotent - calling it multiple times has the same effect
153
+ * as calling it once.
154
+ *
155
+ * @param name - Bucket name (3-63 lowercase alphanumeric chars or hyphens)
156
+ * @returns Promise resolving to the bucket info
157
+ * @throws TypeError if bucket name is invalid
158
+ *
159
+ * @example
160
+ * ```typescript
161
+ * const bucket = await project.ensureBucket('my-bucket');
162
+ * // Bucket now exists, whether it was just created or already existed
163
+ * ```
164
+ */
165
+ async ensureBucket(name) {
166
+ this.validateOpen();
167
+ this.validateBucketName(name);
168
+ return native_1.native.ensureBucket(this._handle, name);
169
+ }
170
+ /**
171
+ * Get information about a bucket.
172
+ *
173
+ * @param name - Bucket name
174
+ * @returns Promise resolving to the bucket info
175
+ * @throws TypeError if bucket name is invalid
176
+ * @throws Error if bucket does not exist
177
+ *
178
+ * @example
179
+ * ```typescript
180
+ * const bucket = await project.statBucket('my-bucket');
181
+ * console.log(`Bucket created: ${bucket.created}`);
182
+ * ```
183
+ */
184
+ async statBucket(name) {
185
+ this.validateOpen();
186
+ this.validateBucketName(name);
187
+ return native_1.native.statBucket(this._handle, name);
188
+ }
189
+ /**
190
+ * Delete an empty bucket.
191
+ *
192
+ * The bucket must be empty before it can be deleted.
193
+ * Use `deleteBucketWithObjects` to delete a bucket and all its contents.
194
+ *
195
+ * @param name - Bucket name
196
+ * @returns Promise resolving when the bucket is deleted
197
+ * @throws TypeError if bucket name is invalid
198
+ * @throws Error if bucket does not exist or is not empty
199
+ *
200
+ * @example
201
+ * ```typescript
202
+ * await project.deleteBucket('my-bucket');
203
+ * ```
204
+ */
205
+ async deleteBucket(name) {
206
+ this.validateOpen();
207
+ this.validateBucketName(name);
208
+ return native_1.native.deleteBucket(this._handle, name);
209
+ }
210
+ /**
211
+ * Delete a bucket and all its objects.
212
+ *
213
+ * WARNING: This will permanently delete all objects in the bucket!
214
+ *
215
+ * @param name - Bucket name
216
+ * @returns Promise resolving when the bucket and all objects are deleted
217
+ * @throws TypeError if bucket name is invalid
218
+ * @throws Error if bucket does not exist
219
+ *
220
+ * @example
221
+ * ```typescript
222
+ * // Delete bucket and all its contents
223
+ * await project.deleteBucketWithObjects('my-bucket');
224
+ * ```
225
+ */
226
+ async deleteBucketWithObjects(name) {
227
+ this.validateOpen();
228
+ this.validateBucketName(name);
229
+ return native_1.native.deleteBucketWithObjects(this._handle, name);
230
+ }
231
+ /**
232
+ * List all buckets in the project.
233
+ *
234
+ * @param options - Optional listing options
235
+ * @returns Promise resolving to an array of bucket info
236
+ *
237
+ * @example
238
+ * ```typescript
239
+ * const buckets = await project.listBuckets();
240
+ * for (const bucket of buckets) {
241
+ * console.log(`- ${bucket.name} (created: ${bucket.created})`);
242
+ * }
243
+ * ```
244
+ */
245
+ async listBuckets(options) {
246
+ this.validateOpen();
247
+ return native_1.native.listBuckets(this._handle, options);
248
+ }
249
+ // ========== Object Operations ==========
250
+ /**
251
+ * Validate an object key
252
+ * @param key - Object key to validate
253
+ * @throws TypeError if object key is invalid
254
+ */
255
+ validateObjectKey(key) {
256
+ if (!key || typeof key !== 'string') {
257
+ throw new TypeError('Object key must be a non-empty string');
258
+ }
259
+ }
260
+ /**
261
+ * Get information about an object.
262
+ *
263
+ * @param bucketName - Name of the bucket containing the object
264
+ * @param objectKey - Object key (path)
265
+ * @returns Promise resolving to the object info
266
+ * @throws TypeError if bucket name or object key is invalid
267
+ * @throws Error if object does not exist
268
+ *
269
+ * @example
270
+ * ```typescript
271
+ * const info = await project.statObject('my-bucket', 'path/to/file.txt');
272
+ * console.log(`Size: ${info.system.contentLength} bytes`);
273
+ * console.log(`Created: ${info.system.created}`);
274
+ * ```
275
+ */
276
+ async statObject(bucketName, objectKey) {
277
+ this.validateOpen();
278
+ this.validateBucketName(bucketName);
279
+ this.validateObjectKey(objectKey);
280
+ return native_1.native.statObject(this._handle, bucketName, objectKey);
281
+ }
282
+ /**
283
+ * Delete an object.
284
+ *
285
+ * @param bucketName - Name of the bucket containing the object
286
+ * @param objectKey - Object key (path)
287
+ * @returns Promise resolving when the object is deleted
288
+ * @throws TypeError if bucket name or object key is invalid
289
+ * @throws Error if object does not exist
290
+ *
291
+ * @example
292
+ * ```typescript
293
+ * await project.deleteObject('my-bucket', 'path/to/file.txt');
294
+ * ```
295
+ */
296
+ async deleteObject(bucketName, objectKey) {
297
+ this.validateOpen();
298
+ this.validateBucketName(bucketName);
299
+ this.validateObjectKey(objectKey);
300
+ return native_1.native.deleteObject(this._handle, bucketName, objectKey);
301
+ }
302
+ /**
303
+ * List objects in a bucket.
304
+ *
305
+ * @param bucketName - Name of the bucket to list objects from
306
+ * @param options - Optional listing options
307
+ * @returns Promise resolving to an array of object info
308
+ * @throws TypeError if bucket name is invalid
309
+ *
310
+ * @example
311
+ * ```typescript
312
+ * // List all objects
313
+ * const objects = await project.listObjects('my-bucket');
314
+ *
315
+ * // List with prefix and pagination
316
+ * const objects = await project.listObjects('my-bucket', {
317
+ * prefix: 'photos/',
318
+ * recursive: true,
319
+ * system: true,
320
+ * custom: true
321
+ * });
322
+ *
323
+ * for (const obj of objects) {
324
+ * if (obj.isPrefix) {
325
+ * console.log(`[DIR] ${obj.key}`);
326
+ * } else {
327
+ * console.log(`${obj.key} (${obj.system.contentLength} bytes)`);
328
+ * }
329
+ * }
330
+ * ```
331
+ */
332
+ async listObjects(bucketName, options) {
333
+ this.validateOpen();
334
+ this.validateBucketName(bucketName);
335
+ return native_1.native.listObjects(this._handle, bucketName, options);
336
+ }
337
+ /**
338
+ * Copy an object to a new location.
339
+ *
340
+ * @param oldBucket - Source bucket name
341
+ * @param oldKey - Source object key
342
+ * @param newBucket - Destination bucket name
343
+ * @param newKey - Destination object key
344
+ * @param options - Optional copy options
345
+ * @returns Promise resolving to the new object info
346
+ * @throws TypeError if bucket name or object key is invalid
347
+ * @throws Error if source object does not exist
348
+ *
349
+ * @example
350
+ * ```typescript
351
+ * // Copy within same bucket
352
+ * const copied = await project.copyObject(
353
+ * 'my-bucket', 'original.txt',
354
+ * 'my-bucket', 'copy.txt'
355
+ * );
356
+ *
357
+ * // Copy to different bucket
358
+ * const copied = await project.copyObject(
359
+ * 'source-bucket', 'file.txt',
360
+ * 'dest-bucket', 'backup/file.txt'
361
+ * );
362
+ * ```
363
+ */
364
+ async copyObject(oldBucket, oldKey, newBucket, newKey, options) {
365
+ this.validateOpen();
366
+ this.validateBucketName(oldBucket);
367
+ this.validateObjectKey(oldKey);
368
+ this.validateBucketName(newBucket);
369
+ this.validateObjectKey(newKey);
370
+ return native_1.native.copyObject(this._handle, oldBucket, oldKey, newBucket, newKey, options);
371
+ }
372
+ /**
373
+ * Move (rename) an object to a new location.
374
+ *
375
+ * @param oldBucket - Source bucket name
376
+ * @param oldKey - Source object key
377
+ * @param newBucket - Destination bucket name
378
+ * @param newKey - Destination object key
379
+ * @param options - Optional move options
380
+ * @returns Promise resolving when the move is complete
381
+ * @throws TypeError if bucket name or object key is invalid
382
+ * @throws Error if source object does not exist
383
+ *
384
+ * @example
385
+ * ```typescript
386
+ * // Rename within same bucket
387
+ * await project.moveObject(
388
+ * 'my-bucket', 'old-name.txt',
389
+ * 'my-bucket', 'new-name.txt'
390
+ * );
391
+ *
392
+ * // Move to different bucket
393
+ * await project.moveObject(
394
+ * 'source-bucket', 'file.txt',
395
+ * 'archive-bucket', 'archived/file.txt'
396
+ * );
397
+ * ```
398
+ */
399
+ async moveObject(oldBucket, oldKey, newBucket, newKey, options) {
400
+ this.validateOpen();
401
+ this.validateBucketName(oldBucket);
402
+ this.validateObjectKey(oldKey);
403
+ this.validateBucketName(newBucket);
404
+ this.validateObjectKey(newKey);
405
+ return native_1.native.moveObject(this._handle, oldBucket, oldKey, newBucket, newKey, options);
406
+ }
407
+ /**
408
+ * Update object custom metadata.
409
+ *
410
+ * Replaces the existing custom metadata with new metadata.
411
+ * System metadata (created, expires, contentLength) cannot be modified.
412
+ *
413
+ * @param bucketName - Bucket name containing the object
414
+ * @param objectKey - Object key to update
415
+ * @param metadata - New custom metadata (replaces existing)
416
+ * @returns Promise resolving when metadata is updated
417
+ * @throws TypeError if bucket name or object key is invalid
418
+ * @throws Error if object does not exist
419
+ *
420
+ * @example
421
+ * ```typescript
422
+ * // Update custom metadata
423
+ * await project.updateObjectMetadata('my-bucket', 'file.txt', {
424
+ * 'Content-Type': 'text/plain',
425
+ * 'X-Author': 'John Doe',
426
+ * 'X-Version': '2'
427
+ * });
428
+ *
429
+ * // Clear custom metadata by passing empty object
430
+ * await project.updateObjectMetadata('my-bucket', 'file.txt', {});
431
+ * ```
432
+ */
433
+ async updateObjectMetadata(bucketName, objectKey, metadata) {
434
+ this.validateOpen();
435
+ this.validateBucketName(bucketName);
436
+ this.validateObjectKey(objectKey);
437
+ if (metadata == null || typeof metadata !== 'object') {
438
+ throw new TypeError('metadata must be an object');
439
+ }
440
+ return native_1.native.updateObjectMetadata(this._handle, bucketName, objectKey, metadata);
441
+ }
442
+ // ========== Upload Operations ==========
443
+ /**
444
+ * Start uploading an object.
445
+ *
446
+ * Returns an UploadResultStruct for writing data and finalizing the upload.
447
+ *
448
+ * @param bucketName - Name of the bucket to upload to
449
+ * @param objectKey - Object key (path) for the uploaded object
450
+ * @param options - Optional upload options (e.g., expiration)
451
+ * @returns Promise resolving to an UploadResultStruct
452
+ * @throws TypeError if bucket name or object key is invalid
453
+ *
454
+ * @example
455
+ * ```typescript
456
+ * // Simple upload
457
+ * const upload = await project.uploadObject('my-bucket', 'file.txt');
458
+ * await upload.write(Buffer.from('Hello, World!'), 13);
459
+ * await upload.commit();
460
+ *
461
+ * // Upload with expiration
462
+ * const upload = await project.uploadObject('my-bucket', 'temp.txt', {
463
+ * expires: new Date(Date.now() + 24 * 60 * 60 * 1000) // 24 hours
464
+ * });
465
+ * await upload.write(data, data.length);
466
+ * await upload.commit();
467
+ *
468
+ * // Upload with custom metadata
469
+ * const upload = await project.uploadObject('my-bucket', 'photo.jpg');
470
+ * await upload.setCustomMetadata({
471
+ * 'Content-Type': 'image/jpeg',
472
+ * 'X-Custom-Tag': 'vacation'
473
+ * });
474
+ * await upload.write(imageBuffer, imageBuffer.length);
475
+ * await upload.commit();
476
+ * ```
477
+ */
478
+ async uploadObject(bucketName, objectKey, options) {
479
+ this.validateOpen();
480
+ this.validateBucketName(bucketName);
481
+ this.validateObjectKey(objectKey);
482
+ const handle = await native_1.native.uploadObject(this._handle, bucketName, objectKey, options);
483
+ return new upload_1.UploadResultStruct(handle);
484
+ }
485
+ /**
486
+ * Start a download from a bucket.
487
+ *
488
+ * Opens a download stream for the specified object. Use the returned
489
+ * DownloadResultStruct to read data and close the download when done.
490
+ *
491
+ * @param bucketName - Name of the bucket to download from
492
+ * @param objectKey - Object key (path) to download
493
+ * @param options - Optional download options (offset, length)
494
+ * @returns Promise resolving to a DownloadResultStruct
495
+ * @throws TypeError if bucket name or object key is invalid
496
+ *
497
+ * @example
498
+ * ```typescript
499
+ * // Download entire object
500
+ * const download = await project.downloadObject('my-bucket', 'file.txt');
501
+ * const buffer = Buffer.alloc(1024);
502
+ * let totalBytes = 0;
503
+ * let result;
504
+ * do {
505
+ * result = await download.read(buffer, buffer.length);
506
+ * totalBytes += result.bytesRead;
507
+ * } while (result.bytesRead > 0);
508
+ * await download.close();
509
+ *
510
+ * // Download with offset and length (partial download)
511
+ * const download = await project.downloadObject('my-bucket', 'large-file.bin', {
512
+ * offset: 1000,
513
+ * length: 500
514
+ * });
515
+ * const chunk = Buffer.alloc(500);
516
+ * await download.read(chunk, chunk.length);
517
+ * await download.close();
518
+ * ```
519
+ */
520
+ async downloadObject(bucketName, objectKey, options) {
521
+ this.validateOpen();
522
+ this.validateBucketName(bucketName);
523
+ this.validateObjectKey(objectKey);
524
+ const result = (await native_1.native.downloadObject(this._handle, bucketName, objectKey, options));
525
+ return new download_1.DownloadResultStruct(result.downloadHandle);
526
+ }
527
+ }
528
+ exports.ProjectResultStruct = ProjectResultStruct;
529
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/project/index.ts"],"names":[],"mappings":"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"}