@lumeweb/pinner 0.1.0 → 0.1.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/README.md +35 -18
- package/dist/cjs/adapters/pinata/index.cjs +6 -3
- package/dist/cjs/adapters/pinata/legacy/adapter.cjs +83 -0
- package/dist/cjs/adapters/pinata/legacy/adapter.cjs.map +1 -0
- package/dist/cjs/adapters/pinata/legacy/adapter.d.cts +74 -0
- package/dist/cjs/adapters/pinata/legacy/index.cjs +1 -0
- package/dist/cjs/adapters/pinata/shared/index.cjs +1 -0
- package/dist/cjs/adapters/pinata/shared/types.d.cts +218 -0
- package/dist/cjs/adapters/pinata/shared/utils.cjs +83 -0
- package/dist/cjs/adapters/pinata/shared/utils.cjs.map +1 -0
- package/dist/cjs/adapters/pinata/v2/adapter-interface.d.cts +198 -0
- package/dist/cjs/adapters/pinata/v2/adapter.cjs +636 -0
- package/dist/cjs/adapters/pinata/v2/adapter.cjs.map +1 -0
- package/dist/cjs/adapters/pinata/v2/adapter.d.cts +17 -0
- package/dist/cjs/adapters/pinata/v2/index.cjs +1 -0
- package/dist/cjs/adapters/pinata/v2/types.d.cts +308 -0
- package/dist/cjs/index.cjs +3 -1
- package/dist/cjs/index.d.cts +5 -3
- package/dist/cjs/pin/client.cjs +5 -3
- package/dist/cjs/pin/client.cjs.map +1 -1
- package/dist/cjs/pinner.cjs +6 -0
- package/dist/cjs/pinner.cjs.map +1 -1
- package/dist/cjs/pinner.d.cts +4 -0
- package/dist/cjs/types/constants.cjs +6 -1
- package/dist/cjs/types/constants.cjs.map +1 -1
- package/dist/cjs/types/pin.d.cts +4 -0
- package/dist/esm/adapters/pinata/index.d.ts +7 -4
- package/dist/esm/adapters/pinata/index.js +6 -3
- package/dist/esm/adapters/pinata/legacy/adapter.d.ts +74 -0
- package/dist/esm/adapters/pinata/legacy/adapter.js +83 -0
- package/dist/esm/adapters/pinata/legacy/adapter.js.map +1 -0
- package/dist/esm/adapters/pinata/legacy/index.d.ts +1 -0
- package/dist/esm/adapters/pinata/legacy/index.js +1 -0
- package/dist/esm/adapters/pinata/shared/index.d.ts +2 -0
- package/dist/esm/adapters/pinata/shared/index.js +1 -0
- package/dist/esm/adapters/pinata/shared/types.d.ts +218 -0
- package/dist/esm/adapters/pinata/shared/utils.d.ts +1 -0
- package/dist/esm/adapters/pinata/shared/utils.js +78 -0
- package/dist/esm/adapters/pinata/shared/utils.js.map +1 -0
- package/dist/esm/adapters/pinata/v2/adapter-interface.d.ts +198 -0
- package/dist/esm/adapters/pinata/v2/adapter.d.ts +17 -0
- package/dist/esm/adapters/pinata/v2/adapter.js +636 -0
- package/dist/esm/adapters/pinata/v2/adapter.js.map +1 -0
- package/dist/esm/adapters/pinata/v2/index.d.ts +3 -0
- package/dist/esm/adapters/pinata/v2/index.js +1 -0
- package/dist/esm/adapters/pinata/v2/types.d.ts +308 -0
- package/dist/esm/index.d.ts +5 -3
- package/dist/esm/index.js +3 -2
- package/dist/esm/pin/client.js +5 -3
- package/dist/esm/pin/client.js.map +1 -1
- package/dist/esm/pinner.d.ts +4 -0
- package/dist/esm/pinner.js +6 -0
- package/dist/esm/pinner.js.map +1 -1
- package/dist/esm/types/constants.js +6 -2
- package/dist/esm/types/constants.js.map +1 -1
- package/dist/esm/types/pin.d.ts +4 -0
- package/package.json +3 -3
- package/dist/cjs/adapters/pinata/adapter.cjs +0 -88
- package/dist/cjs/adapters/pinata/adapter.cjs.map +0 -1
- package/dist/cjs/adapters/pinata/adapter.d.cts +0 -35
- package/dist/cjs/adapters/pinata/builder.cjs +0 -194
- package/dist/cjs/adapters/pinata/builder.cjs.map +0 -1
- package/dist/cjs/adapters/pinata/list-builder.cjs +0 -52
- package/dist/cjs/adapters/pinata/list-builder.cjs.map +0 -1
- package/dist/cjs/types/pinata.d.cts +0 -99
- package/dist/esm/adapters/pinata/adapter.d.ts +0 -35
- package/dist/esm/adapters/pinata/adapter.js +0 -87
- package/dist/esm/adapters/pinata/adapter.js.map +0 -1
- package/dist/esm/adapters/pinata/builder.d.ts +0 -1
- package/dist/esm/adapters/pinata/builder.js +0 -187
- package/dist/esm/adapters/pinata/builder.js.map +0 -1
- package/dist/esm/adapters/pinata/list-builder.d.ts +0 -1
- package/dist/esm/adapters/pinata/list-builder.js +0 -51
- package/dist/esm/adapters/pinata/list-builder.js.map +0 -1
- package/dist/esm/types/pinata.d.ts +0 -99
package/README.md
CHANGED
|
@@ -293,22 +293,39 @@ See [blockstore/README.md](./src/blockstore/README.md) for detailed blockstore d
|
|
|
293
293
|
|
|
294
294
|
## Adapters
|
|
295
295
|
|
|
296
|
-
### Pinata
|
|
296
|
+
### Pinata Adapters
|
|
297
297
|
|
|
298
|
-
The Pinata
|
|
298
|
+
The Pinata adapters provide Pinata SDK API compatibility for the Pinner client, allowing applications written for the Pinata SDK to work with Lume's IPFS pinning infrastructure with minimal code changes.
|
|
299
|
+
|
|
300
|
+
**Attribution**: These adapters include TypeScript type definitions and API interfaces adapted from the Pinata SDK for compatibility purposes. The original Pinata SDK is available at:
|
|
301
|
+
- **Pinata SDK 2.x**: https://github.com/PinataCloud/pinata/commit/cdc0c06116aaadaf7c4b287a2673cd23b6ba1125
|
|
302
|
+
- **Pinata SDK 1.x**: https://github.com/PinataCloud/pinata/commit/c141177ff3036e46fa7b95fcc68c159b58817836
|
|
303
|
+
|
|
304
|
+
The adapters provide Pinata SDK API compatibility but route all operations through Lume's IPFS pinning infrastructure. They do NOT use Pinata's servers or services.
|
|
305
|
+
|
|
306
|
+
#### Available Adapters
|
|
307
|
+
|
|
308
|
+
- **V2 Adapter** (`pinataAdapter`): Compatible with Pinata SDK 2.x API (recommended, latest)
|
|
309
|
+
- **Legacy Adapter** (`pinataLegacyAdapter`): Compatible with Pinata SDK 1.x API
|
|
310
|
+
|
|
311
|
+
See [adapters/README.md](./src/adapters/README.md) for comprehensive documentation including migration guides, feature support tables, and detailed examples.
|
|
299
312
|
|
|
300
313
|
#### Setup
|
|
301
314
|
|
|
302
315
|
```typescript
|
|
303
|
-
import { Pinner, pinataAdapter } from "@lumeweb/pinner";
|
|
316
|
+
import { Pinner, pinataAdapter, pinataLegacyAdapter } from "@lumeweb/pinner";
|
|
304
317
|
|
|
305
318
|
// Initialize Pinner
|
|
306
319
|
const pinner = new Pinner({
|
|
307
|
-
jwt: "your-jwt-token"
|
|
320
|
+
jwt: "your-jwt-token",
|
|
321
|
+
endpoint: "https://your-pinning-service-endpoint.com"
|
|
308
322
|
});
|
|
309
323
|
|
|
310
|
-
// Create Pinata adapter
|
|
324
|
+
// Create Pinata V2 adapter (recommended)
|
|
311
325
|
const pinata = pinataAdapter(pinner);
|
|
326
|
+
|
|
327
|
+
// Or use the legacy adapter
|
|
328
|
+
const pinataLegacy = pinataLegacyAdapter(pinner);
|
|
312
329
|
```
|
|
313
330
|
|
|
314
331
|
#### Upload Methods
|
|
@@ -319,12 +336,12 @@ The Pinata adapter provides multiple upload methods with a fluent builder patter
|
|
|
319
336
|
|
|
320
337
|
```typescript
|
|
321
338
|
// Simple file upload
|
|
322
|
-
const result = await pinata.upload.file(file).execute();
|
|
339
|
+
const result = await pinata.upload.public.file(file).execute();
|
|
323
340
|
console.log("CID:", result.IpfsHash);
|
|
324
341
|
console.log("Size:", result.PinSize);
|
|
325
342
|
|
|
326
343
|
// Upload with metadata
|
|
327
|
-
const result = await pinata.upload.file(file)
|
|
344
|
+
const result = await pinata.upload.public.file(file)
|
|
328
345
|
.name("My File")
|
|
329
346
|
.keyvalues({ key: "value" })
|
|
330
347
|
.execute();
|
|
@@ -338,7 +355,7 @@ const files = [
|
|
|
338
355
|
new File(["content2"], "file2.txt")
|
|
339
356
|
];
|
|
340
357
|
|
|
341
|
-
const result = await pinata.upload.fileArray(files)
|
|
358
|
+
const result = await pinata.upload.public.fileArray(files)
|
|
342
359
|
.name("My Directory")
|
|
343
360
|
.keyvalues({ type: "directory" })
|
|
344
361
|
.execute();
|
|
@@ -349,7 +366,7 @@ const result = await pinata.upload.fileArray(files)
|
|
|
349
366
|
```typescript
|
|
350
367
|
const data = { foo: "bar", number: 42 };
|
|
351
368
|
|
|
352
|
-
const result = await pinata.upload.json(data)
|
|
369
|
+
const result = await pinata.upload.public.json(data)
|
|
353
370
|
.name("data.json")
|
|
354
371
|
.keyvalues({ format: "json" })
|
|
355
372
|
.execute();
|
|
@@ -360,7 +377,7 @@ const result = await pinata.upload.json(data)
|
|
|
360
377
|
```typescript
|
|
361
378
|
const base64String = "SGVsbG8sIHdvcmxkIQ==";
|
|
362
379
|
|
|
363
|
-
const result = await pinata.upload.base64(base64String)
|
|
380
|
+
const result = await pinata.upload.public.base64(base64String)
|
|
364
381
|
.name("base64-file.txt")
|
|
365
382
|
.execute();
|
|
366
383
|
```
|
|
@@ -368,7 +385,7 @@ const result = await pinata.upload.base64(base64String)
|
|
|
368
385
|
##### Upload from URL
|
|
369
386
|
|
|
370
387
|
```typescript
|
|
371
|
-
const result = await pinata.upload.url("https://example.com/data.json")
|
|
388
|
+
const result = await pinata.upload.public.url("https://example.com/data.json")
|
|
372
389
|
.name("downloaded-file.json")
|
|
373
390
|
.execute();
|
|
374
391
|
```
|
|
@@ -377,10 +394,10 @@ const result = await pinata.upload.url("https://example.com/data.json")
|
|
|
377
394
|
|
|
378
395
|
```typescript
|
|
379
396
|
// Pin existing content
|
|
380
|
-
await pinata.upload.cid("Qm...").execute();
|
|
397
|
+
await pinata.upload.public.cid("Qm...").execute();
|
|
381
398
|
|
|
382
399
|
// Pin with metadata
|
|
383
|
-
await pinata.upload.cid("Qm...")
|
|
400
|
+
await pinata.upload.public.cid("Qm...")
|
|
384
401
|
.name("Existing Content")
|
|
385
402
|
.keyvalues({ source: "external" })
|
|
386
403
|
.execute();
|
|
@@ -438,10 +455,10 @@ await pinata.setPinMetadata("Qm...", {
|
|
|
438
455
|
|
|
439
456
|
```typescript
|
|
440
457
|
// List all files
|
|
441
|
-
const files = await pinata.files.list().execute();
|
|
458
|
+
const files = await pinata.files.public.list().execute();
|
|
442
459
|
|
|
443
460
|
// List with pagination
|
|
444
|
-
const files = await pinata.files.list()
|
|
461
|
+
const files = await pinata.files.public.list()
|
|
445
462
|
.limit(10)
|
|
446
463
|
.pageToken("next-page-token")
|
|
447
464
|
.execute();
|
|
@@ -458,7 +475,7 @@ files.forEach(file => {
|
|
|
458
475
|
##### Get File by ID
|
|
459
476
|
|
|
460
477
|
```typescript
|
|
461
|
-
const file = await pinata.files.get("Qm...");
|
|
478
|
+
const file = await pinata.files.public.get("Qm...");
|
|
462
479
|
console.log("File details:", file);
|
|
463
480
|
```
|
|
464
481
|
|
|
@@ -484,7 +501,7 @@ import { Pinner, pinataAdapter } from '@lumeweb/pinner';
|
|
|
484
501
|
const pinner = new Pinner({ jwt: 'your-jwt-token' });
|
|
485
502
|
const pinata = pinataAdapter(pinner);
|
|
486
503
|
|
|
487
|
-
const result = await pinata.upload.file(file)
|
|
504
|
+
const result = await pinata.upload.public.file(file)
|
|
488
505
|
.name('My File')
|
|
489
506
|
.execute();
|
|
490
507
|
```
|
|
@@ -690,7 +707,7 @@ import {
|
|
|
690
707
|
} from "@lumeweb/pinner";
|
|
691
708
|
|
|
692
709
|
// Adapters
|
|
693
|
-
import { pinataAdapter } from "@lumeweb/pinner
|
|
710
|
+
import { pinataAdapter, pinataLegacyAdapter } from "@lumeweb/pinner";
|
|
694
711
|
|
|
695
712
|
// Blockstore module
|
|
696
713
|
import { UnstorageBlockstore } from "@lumeweb/pinner/blockstore";
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
-
const
|
|
2
|
-
const
|
|
3
|
-
|
|
1
|
+
const require_utils = require('./shared/utils.cjs');
|
|
2
|
+
const require_adapter = require('./v2/adapter.cjs');
|
|
3
|
+
require('./v2/index.cjs');
|
|
4
|
+
const require_adapter$1 = require('./legacy/adapter.cjs');
|
|
5
|
+
require('./legacy/index.cjs');
|
|
6
|
+
require('./shared/index.cjs');
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
const require_constants = require('../../../types/constants.cjs');
|
|
2
|
+
const require_utils = require('../shared/utils.cjs');
|
|
3
|
+
|
|
4
|
+
//#region src/adapters/pinata/legacy/adapter.ts
|
|
5
|
+
/**
|
|
6
|
+
* Create Pinata 1.x Legacy Adapter
|
|
7
|
+
*
|
|
8
|
+
* @param pinner - Pinner client instance
|
|
9
|
+
* @param config - Pinata configuration
|
|
10
|
+
* @returns PinataLegacyAdapter
|
|
11
|
+
*/
|
|
12
|
+
function pinataLegacyAdapter(pinner, config) {
|
|
13
|
+
return {
|
|
14
|
+
async pinFileToIPFS(file, options) {
|
|
15
|
+
return require_utils.createUploadResponse(await pinner.uploadAndWait(file, {
|
|
16
|
+
name: options?.metadata?.name,
|
|
17
|
+
keyvalues: options?.metadata?.keyvalues
|
|
18
|
+
}), file.name);
|
|
19
|
+
},
|
|
20
|
+
async pinJSONToIPFS(data, options) {
|
|
21
|
+
const jsonString = JSON.stringify(data);
|
|
22
|
+
const file = new File([jsonString], options?.metadata?.name || "data.json", { type: "application/json" });
|
|
23
|
+
return require_utils.createUploadResponse(await pinner.uploadAndWait(file, {
|
|
24
|
+
name: options?.metadata?.name,
|
|
25
|
+
keyvalues: options?.metadata?.keyvalues
|
|
26
|
+
}), file.name);
|
|
27
|
+
},
|
|
28
|
+
async pinByHash(cid, options) {
|
|
29
|
+
const cidObj = require_utils.parseCID(cid);
|
|
30
|
+
const generator = await pinner.pinByHash(cidObj, {
|
|
31
|
+
name: options?.metadata?.name,
|
|
32
|
+
metadata: options?.metadata?.keyvalues
|
|
33
|
+
});
|
|
34
|
+
for await (const _ of generator);
|
|
35
|
+
const pin = await pinner.getPinStatus(cidObj);
|
|
36
|
+
return require_utils.createUploadResponse({
|
|
37
|
+
cid: pin.cid.toString(),
|
|
38
|
+
size: pin.size || 0,
|
|
39
|
+
createdAt: pin.created
|
|
40
|
+
}, pin.name || "");
|
|
41
|
+
},
|
|
42
|
+
async pinList(query) {
|
|
43
|
+
return {
|
|
44
|
+
files: (await pinner.listPins({ limit: query?.limit })).map(require_utils.createFileListItem),
|
|
45
|
+
next_page_token: ""
|
|
46
|
+
};
|
|
47
|
+
},
|
|
48
|
+
async unpin(cid) {
|
|
49
|
+
await pinner.unpin(cid);
|
|
50
|
+
return { message: `Unpinned ${cid}` };
|
|
51
|
+
},
|
|
52
|
+
async hashMetadata(cid, metadata) {
|
|
53
|
+
await pinner.setPinMetadata(cid, metadata);
|
|
54
|
+
return { message: `Updated metadata for ${cid}` };
|
|
55
|
+
},
|
|
56
|
+
async createSignedURL(options) {
|
|
57
|
+
return `${config?.pinataGateway || require_constants.DEFAULT_GATEWAY}/ipfs/${options.cid}`;
|
|
58
|
+
},
|
|
59
|
+
async pinJobs(query) {
|
|
60
|
+
return { rows: (await pinner.listPins({ limit: query?.limit })).map(require_utils.createPinJobItem) };
|
|
61
|
+
},
|
|
62
|
+
async topUsageAnalytics(query) {
|
|
63
|
+
return { data: [] };
|
|
64
|
+
},
|
|
65
|
+
async dateIntervalAnalytics(query) {
|
|
66
|
+
return {
|
|
67
|
+
total_requests: 0,
|
|
68
|
+
total_bandwidth: 0,
|
|
69
|
+
time_periods: []
|
|
70
|
+
};
|
|
71
|
+
},
|
|
72
|
+
async swapCid(options) {
|
|
73
|
+
require_utils.notSupported("Swap CID");
|
|
74
|
+
},
|
|
75
|
+
async swapHistory(options) {
|
|
76
|
+
return [];
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
//#endregion
|
|
82
|
+
exports.pinataLegacyAdapter = pinataLegacyAdapter;
|
|
83
|
+
//# sourceMappingURL=adapter.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.cjs","names":["createUploadResponse","parseCID","createFileListItem","DEFAULT_GATEWAY","createPinJobItem"],"sources":["../../../../../src/adapters/pinata/legacy/adapter.ts"],"sourcesContent":["/**\n * Pinata SDK 1.x Legacy Adapter\n * Provides compatibility with Pinata SDK 1.x API\n *\n * Source: https://github.com/PinataCloud/pinata/commit/c141177ff3036e46fa7b95fcc68c159b58817836\n * - src/core/pinataSDK.ts\n * - src/core/types.ts\n *\n * Copyright © 2024 Pinata Cloud Technologies\n * Type definitions and API interfaces adapted from Pinata SDK for compatibility.\n * Original Pinata SDK: https://github.com/PinataCloud/pinata\n */\n\nimport type { Pinner } from \"@/pinner\";\nimport type {\n\tPinataConfig,\n\tUploadResponse,\n\tUploadOptions,\n\tFileListResponse,\n\tFileListQuery,\n\tPinJobResponse,\n\tPinJobQuery,\n\tDeleteResponse,\n\tPinataMetadata,\n\tSignedUrlOptions,\n\tTopAnalyticsQuery,\n\tTopAnalyticsResponse,\n\tTimeIntervalAnalyticsQuery,\n\tTimeIntervalAnalyticsResponse,\n\tSwapCidOptions,\n\tSwapCidResponse,\n\tSwapHistoryOptions,\n} from \"../shared/types\";\nimport { parseCID, createUploadResponse, createFileListItem, createPinJobItem, notSupported } from \"../shared/utils\";\nimport { DEFAULT_GATEWAY } from \"@/types/constants\";\n\n/**\n * Pinata 1.x Legacy Adapter Interface\n * Matches Pinata SDK 1.x API exactly\n */\nexport interface PinataLegacyAdapter {\n\t/**\n\t * Upload a file to IPFS\n\t */\n\tpinFileToIPFS(file: File, options?: UploadOptions): Promise<UploadResponse>;\n\n\t/**\n\t * Upload JSON data to IPFS\n\t */\n\tpinJSONToIPFS(data: any, options?: UploadOptions): Promise<UploadResponse>;\n\n\t/**\n\t * Pin content by CID\n\t */\n\tpinByHash(cid: string, options?: UploadOptions): Promise<UploadResponse>;\n\n\t/**\n\t * List pinned files\n\t */\n\tpinList(query?: FileListQuery): Promise<FileListResponse>;\n\n\t/**\n\t * Unpin content by CID\n\t */\n\tunpin(cid: string): Promise<{ message: string }>;\n\n\t/**\n\t * Update pin metadata\n\t */\n\thashMetadata(cid: string, metadata: Record<string, string>): Promise<{ message: string }>;\n\n\t/**\n\t * Create signed URL for private IPFS files\n\t */\n\tcreateSignedURL(options: SignedUrlOptions): Promise<string>;\n\n\t/**\n\t * Get pin jobs\n\t */\n\tpinJobs(query?: PinJobQuery): Promise<PinJobResponse>;\n\n\t/**\n\t * Get top usage analytics\n\t */\n\ttopUsageAnalytics(query: TopAnalyticsQuery): Promise<TopAnalyticsResponse>;\n\n\t/**\n\t * Get date interval analytics\n\t */\n\tdateIntervalAnalytics(\n\t\tquery: TimeIntervalAnalyticsQuery,\n\t): Promise<TimeIntervalAnalyticsResponse>;\n\n\t/**\n\t * Swap CID\n\t */\n\tswapCid(options: SwapCidOptions): Promise<SwapCidResponse>;\n\n\t/**\n\t * Get swap history\n\t */\n\tswapHistory(options: SwapHistoryOptions): Promise<SwapCidResponse[]>;\n}\n\n/**\n * Create Pinata 1.x Legacy Adapter\n *\n * @param pinner - Pinner client instance\n * @param config - Pinata configuration\n * @returns PinataLegacyAdapter\n */\nexport function pinataLegacyAdapter(\n\tpinner: Pinner,\n\tconfig?: PinataConfig,\n): PinataLegacyAdapter {\n\treturn {\n\t\t/**\n\t\t * Pin a file to IPFS\n\t\t */\n\t\tasync pinFileToIPFS(\n\t\t\tfile: File,\n\t\t\toptions?: UploadOptions,\n\t\t): Promise<UploadResponse> {\n\t\t\tconst result = await pinner.uploadAndWait(file, {\n\t\t\t\tname: options?.metadata?.name,\n\t\t\t\tkeyvalues: options?.metadata?.keyvalues,\n\t\t\t});\n\n\t\t\treturn createUploadResponse(result, file.name);\n\t\t},\n\n\t\t/**\n\t\t * Pin JSON data to IPFS\n\t\t */\n\t\tasync pinJSONToIPFS(\n\t\t\tdata: any,\n\t\t\toptions?: UploadOptions,\n\t\t): Promise<UploadResponse> {\n\t\t\t// Convert JSON to File\n\t\t\tconst jsonString = JSON.stringify(data);\n\t\t\tconst file = new File(\n\t\t\t\t[jsonString],\n\t\t\t\toptions?.metadata?.name || \"data.json\",\n\t\t\t\t{ type: \"application/json\" },\n\t\t\t);\n\n\t\t\tconst result = await pinner.uploadAndWait(file, {\n\t\t\t\tname: options?.metadata?.name,\n\t\t\t\tkeyvalues: options?.metadata?.keyvalues,\n\t\t\t});\n\n\t\t\treturn createUploadResponse(result, file.name);\n\t\t},\n\n\t\t/**\n\t\t * Pin content by CID\n\t\t */\n\t\tasync pinByHash(\n\t\t\tcid: string,\n\t\t\toptions?: UploadOptions,\n\t\t): Promise<UploadResponse> {\n\t\t\tconst cidObj = parseCID(cid);\n\t\t\tconst generator = await pinner.pinByHash(cidObj, {\n\t\t\t\tname: options?.metadata?.name,\n\t\t\t\tmetadata: options?.metadata?.keyvalues,\n\t\t\t});\n\n\t\t\tfor await (const _ of generator) {\n\t\t\t\t// Wait for pin to complete\n\t\t\t}\n\n\t\t\tconst pin = await pinner.getPinStatus(cidObj);\n\t\t\treturn createUploadResponse(\n\t\t\t\t{\n\t\t\t\t\tcid: pin.cid.toString(),\n\t\t\t\t\tsize: pin.size || 0,\n\t\t\t\t\tcreatedAt: pin.created,\n\t\t\t\t},\n\t\t\t\tpin.name || \"\",\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * List pinned files\n\t\t */\n\t\tasync pinList(query?: FileListQuery): Promise<FileListResponse> {\n\t\t\tconst pins = await pinner.listPins({\n\t\t\t\tlimit: query?.limit,\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tfiles: pins.map(createFileListItem),\n\t\t\t\tnext_page_token: \"\",\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * Unpin content\n\t\t */\n\t\tasync unpin(cid: string): Promise<{ message: string }> {\n\t\t\tawait pinner.unpin(cid);\n\t\t\treturn { message: `Unpinned ${cid}` };\n\t\t},\n\n\t\t/**\n\t\t * Update pin metadata\n\t\t */\n\t\tasync hashMetadata(\n\t\t\tcid: string,\n\t\t\tmetadata: Record<string, string>,\n\t\t): Promise<{ message: string }> {\n\t\t\tawait pinner.setPinMetadata(cid, metadata);\n\t\t\treturn { message: `Updated metadata for ${cid}` };\n\t\t},\n\n\t\t/**\n\t\t * Create signed URL (not fully supported in Pinner)\n\t\t * Returns a gateway URL instead\n\t\t */\n\t\tasync createSignedURL(options: SignedUrlOptions): Promise<string> {\n\t\t\t// Pinner doesn't support signed URLs for private files\n\t\t\t// Return a gateway URL as fallback\n\t\t\tconst gateway = config?.pinataGateway || DEFAULT_GATEWAY;\n\t\t\treturn `${gateway}/ipfs/${options.cid}`;\n\t\t},\n\n\t\t/**\n\t\t * Get pin jobs\n\t\t */\n\t\tasync pinJobs(query?: PinJobQuery): Promise<PinJobResponse> {\n\t\t\tconst pins = await pinner.listPins({\n\t\t\t\tlimit: query?.limit,\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\trows: pins.map(createPinJobItem),\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * Get top usage analytics (not supported in Pinner)\n\t\t * Returns empty data\n\t\t */\n\t\tasync topUsageAnalytics(\n\t\t\tquery: TopAnalyticsQuery,\n\t\t): Promise<TopAnalyticsResponse> {\n\t\t\t// Pinner doesn't support analytics\n\t\t\treturn {\n\t\t\t\tdata: [],\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * Get date interval analytics (not supported in Pinner)\n\t\t * Returns empty data\n\t\t */\n\t\tasync dateIntervalAnalytics(\n\t\t\tquery: TimeIntervalAnalyticsQuery,\n\t\t): Promise<TimeIntervalAnalyticsResponse> {\n\t\t\t// Pinner doesn't support analytics\n\t\t\treturn {\n\t\t\t\ttotal_requests: 0,\n\t\t\t\ttotal_bandwidth: 0,\n\t\t\t\ttime_periods: [],\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * Swap CID (not supported in Pinner)\n\t\t * Returns error\n\t\t */\n\t\tasync swapCid(options: SwapCidOptions): Promise<SwapCidResponse> {\n\t\t\tnotSupported(\"Swap CID\");\n\t\t},\n\n\t\t/**\n\t\t * Get swap history (not supported in Pinner)\n\t\t * Returns empty array\n\t\t */\n\t\tasync swapHistory(options: SwapHistoryOptions): Promise<SwapCidResponse[]> {\n\t\t\t// Pinner doesn't support swaps\n\t\t\treturn [];\n\t\t},\n\t};\n}\n"],"mappings":";;;;;;;;;;;AA+GA,SAAgB,oBACf,QACA,QACsB;AACtB,QAAO;EAIN,MAAM,cACL,MACA,SAC0B;AAM1B,UAAOA,mCALQ,MAAM,OAAO,cAAc,MAAM;IAC/C,MAAM,SAAS,UAAU;IACzB,WAAW,SAAS,UAAU;IAC9B,CAAC,EAEkC,KAAK,KAAK;;EAM/C,MAAM,cACL,MACA,SAC0B;GAE1B,MAAM,aAAa,KAAK,UAAU,KAAK;GACvC,MAAM,OAAO,IAAI,KAChB,CAAC,WAAW,EACZ,SAAS,UAAU,QAAQ,aAC3B,EAAE,MAAM,oBAAoB,CAC5B;AAOD,UAAOA,mCALQ,MAAM,OAAO,cAAc,MAAM;IAC/C,MAAM,SAAS,UAAU;IACzB,WAAW,SAAS,UAAU;IAC9B,CAAC,EAEkC,KAAK,KAAK;;EAM/C,MAAM,UACL,KACA,SAC0B;GAC1B,MAAM,SAASC,uBAAS,IAAI;GAC5B,MAAM,YAAY,MAAM,OAAO,UAAU,QAAQ;IAChD,MAAM,SAAS,UAAU;IACzB,UAAU,SAAS,UAAU;IAC7B,CAAC;AAEF,cAAW,MAAM,KAAK;GAItB,MAAM,MAAM,MAAM,OAAO,aAAa,OAAO;AAC7C,UAAOD,mCACN;IACC,KAAK,IAAI,IAAI,UAAU;IACvB,MAAM,IAAI,QAAQ;IAClB,WAAW,IAAI;IACf,EACD,IAAI,QAAQ,GACZ;;EAMF,MAAM,QAAQ,OAAkD;AAK/D,UAAO;IACN,QALY,MAAM,OAAO,SAAS,EAClC,OAAO,OAAO,OACd,CAAC,EAGW,IAAIE,iCAAmB;IACnC,iBAAiB;IACjB;;EAMF,MAAM,MAAM,KAA2C;AACtD,SAAM,OAAO,MAAM,IAAI;AACvB,UAAO,EAAE,SAAS,YAAY,OAAO;;EAMtC,MAAM,aACL,KACA,UAC+B;AAC/B,SAAM,OAAO,eAAe,KAAK,SAAS;AAC1C,UAAO,EAAE,SAAS,wBAAwB,OAAO;;EAOlD,MAAM,gBAAgB,SAA4C;AAIjE,UAAO,GADS,QAAQ,iBAAiBC,kCACvB,QAAQ,QAAQ;;EAMnC,MAAM,QAAQ,OAA8C;AAK3D,UAAO,EACN,OALY,MAAM,OAAO,SAAS,EAClC,OAAO,OAAO,OACd,CAAC,EAGU,IAAIC,+BAAiB,EAChC;;EAOF,MAAM,kBACL,OACgC;AAEhC,UAAO,EACN,MAAM,EAAE,EACR;;EAOF,MAAM,sBACL,OACyC;AAEzC,UAAO;IACN,gBAAgB;IAChB,iBAAiB;IACjB,cAAc,EAAE;IAChB;;EAOF,MAAM,QAAQ,SAAmD;AAChE,8BAAa,WAAW;;EAOzB,MAAM,YAAY,SAAyD;AAE1E,UAAO,EAAE;;EAEV"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Pinner } from "../../../pinner.cjs";
|
|
2
|
+
import { FileListQuery, FileListResponse, PinJobQuery, PinJobResponse, PinataConfig, SignedUrlOptions, SwapCidOptions, SwapCidResponse, SwapHistoryOptions, TimeIntervalAnalyticsQuery, TimeIntervalAnalyticsResponse, TopAnalyticsQuery, TopAnalyticsResponse, UploadOptions, UploadResponse } from "../shared/types.cjs";
|
|
3
|
+
|
|
4
|
+
//#region src/adapters/pinata/legacy/adapter.d.ts
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Pinata 1.x Legacy Adapter Interface
|
|
8
|
+
* Matches Pinata SDK 1.x API exactly
|
|
9
|
+
*/
|
|
10
|
+
interface PinataLegacyAdapter {
|
|
11
|
+
/**
|
|
12
|
+
* Upload a file to IPFS
|
|
13
|
+
*/
|
|
14
|
+
pinFileToIPFS(file: File, options?: UploadOptions): Promise<UploadResponse>;
|
|
15
|
+
/**
|
|
16
|
+
* Upload JSON data to IPFS
|
|
17
|
+
*/
|
|
18
|
+
pinJSONToIPFS(data: any, options?: UploadOptions): Promise<UploadResponse>;
|
|
19
|
+
/**
|
|
20
|
+
* Pin content by CID
|
|
21
|
+
*/
|
|
22
|
+
pinByHash(cid: string, options?: UploadOptions): Promise<UploadResponse>;
|
|
23
|
+
/**
|
|
24
|
+
* List pinned files
|
|
25
|
+
*/
|
|
26
|
+
pinList(query?: FileListQuery): Promise<FileListResponse>;
|
|
27
|
+
/**
|
|
28
|
+
* Unpin content by CID
|
|
29
|
+
*/
|
|
30
|
+
unpin(cid: string): Promise<{
|
|
31
|
+
message: string;
|
|
32
|
+
}>;
|
|
33
|
+
/**
|
|
34
|
+
* Update pin metadata
|
|
35
|
+
*/
|
|
36
|
+
hashMetadata(cid: string, metadata: Record<string, string>): Promise<{
|
|
37
|
+
message: string;
|
|
38
|
+
}>;
|
|
39
|
+
/**
|
|
40
|
+
* Create signed URL for private IPFS files
|
|
41
|
+
*/
|
|
42
|
+
createSignedURL(options: SignedUrlOptions): Promise<string>;
|
|
43
|
+
/**
|
|
44
|
+
* Get pin jobs
|
|
45
|
+
*/
|
|
46
|
+
pinJobs(query?: PinJobQuery): Promise<PinJobResponse>;
|
|
47
|
+
/**
|
|
48
|
+
* Get top usage analytics
|
|
49
|
+
*/
|
|
50
|
+
topUsageAnalytics(query: TopAnalyticsQuery): Promise<TopAnalyticsResponse>;
|
|
51
|
+
/**
|
|
52
|
+
* Get date interval analytics
|
|
53
|
+
*/
|
|
54
|
+
dateIntervalAnalytics(query: TimeIntervalAnalyticsQuery): Promise<TimeIntervalAnalyticsResponse>;
|
|
55
|
+
/**
|
|
56
|
+
* Swap CID
|
|
57
|
+
*/
|
|
58
|
+
swapCid(options: SwapCidOptions): Promise<SwapCidResponse>;
|
|
59
|
+
/**
|
|
60
|
+
* Get swap history
|
|
61
|
+
*/
|
|
62
|
+
swapHistory(options: SwapHistoryOptions): Promise<SwapCidResponse[]>;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Create Pinata 1.x Legacy Adapter
|
|
66
|
+
*
|
|
67
|
+
* @param pinner - Pinner client instance
|
|
68
|
+
* @param config - Pinata configuration
|
|
69
|
+
* @returns PinataLegacyAdapter
|
|
70
|
+
*/
|
|
71
|
+
declare function pinataLegacyAdapter(pinner: Pinner, config?: PinataConfig): PinataLegacyAdapter;
|
|
72
|
+
//#endregion
|
|
73
|
+
export { PinataLegacyAdapter, pinataLegacyAdapter };
|
|
74
|
+
//# sourceMappingURL=adapter.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const require_adapter = require('./adapter.cjs');
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const require_utils = require('./utils.cjs');
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
//#region src/adapters/pinata/shared/types.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Pinata SDK 1.x Types
|
|
4
|
+
* Source: https://github.com/PinataCloud/pinata/commit/c141177ff3036e46fa7b95fcc68c159b58817836
|
|
5
|
+
* - src/core/types.ts
|
|
6
|
+
*
|
|
7
|
+
* Copyright © 2024 Pinata Cloud Technologies
|
|
8
|
+
* Type definitions adapted from Pinata SDK for compatibility.
|
|
9
|
+
* Original Pinata SDK: https://github.com/PinataCloud/pinata
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Pinata configuration options
|
|
13
|
+
*/
|
|
14
|
+
type PinataConfig = {
|
|
15
|
+
pinataJwt?: string;
|
|
16
|
+
pinataGateway?: string;
|
|
17
|
+
pinataGatewayKey?: string;
|
|
18
|
+
customHeaders?: Record<string, string>;
|
|
19
|
+
endpointUrl?: string;
|
|
20
|
+
uploadUrl?: string;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Upload response from Pinata
|
|
24
|
+
*/
|
|
25
|
+
type UploadResponse = {
|
|
26
|
+
id: string;
|
|
27
|
+
name: string;
|
|
28
|
+
cid: string;
|
|
29
|
+
size: number;
|
|
30
|
+
created_at: string;
|
|
31
|
+
number_of_files: number;
|
|
32
|
+
mime_type: string;
|
|
33
|
+
user_id: string;
|
|
34
|
+
group_id: string | null;
|
|
35
|
+
is_duplicate: true | null;
|
|
36
|
+
vectorized: true | null;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Pinata metadata options
|
|
40
|
+
*/
|
|
41
|
+
type PinataMetadata = {
|
|
42
|
+
name?: string;
|
|
43
|
+
keyvalues?: Record<string, string>;
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Upload options
|
|
47
|
+
*/
|
|
48
|
+
type UploadOptions = {
|
|
49
|
+
metadata?: PinataMetadata;
|
|
50
|
+
keys?: string;
|
|
51
|
+
groupId?: string;
|
|
52
|
+
vectorize?: boolean;
|
|
53
|
+
url?: string;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* File list item
|
|
57
|
+
*/
|
|
58
|
+
type FileListItem = {
|
|
59
|
+
id: string;
|
|
60
|
+
name: string | null;
|
|
61
|
+
cid: "pending" | string;
|
|
62
|
+
size: number;
|
|
63
|
+
number_of_files: number;
|
|
64
|
+
mime_type: string;
|
|
65
|
+
keyvalues: Record<string, string>;
|
|
66
|
+
group_id: string | null;
|
|
67
|
+
created_at: string;
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* File list response
|
|
71
|
+
*/
|
|
72
|
+
type FileListResponse = {
|
|
73
|
+
files: FileListItem[];
|
|
74
|
+
next_page_token: string;
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* File list query options
|
|
78
|
+
*/
|
|
79
|
+
type FileListQuery = {
|
|
80
|
+
name?: string;
|
|
81
|
+
group?: string;
|
|
82
|
+
noGroup?: boolean;
|
|
83
|
+
mimeType?: string;
|
|
84
|
+
cid?: string;
|
|
85
|
+
cidPending?: boolean;
|
|
86
|
+
metadata?: Record<string, string>;
|
|
87
|
+
order?: "ASC" | "DESC";
|
|
88
|
+
limit?: number;
|
|
89
|
+
pageToken?: number;
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* Pin job query options
|
|
93
|
+
*/
|
|
94
|
+
type PinJobQuery = {
|
|
95
|
+
sort?: "ASC" | "DSC";
|
|
96
|
+
status?: "prechecking" | "retrieving" | "expired" | "over_free_limit" | "over_max_size" | "invalid_object" | "bad_host_node";
|
|
97
|
+
ipfs_pin_hash?: string;
|
|
98
|
+
limit?: number;
|
|
99
|
+
offset?: number;
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* Pin job item
|
|
103
|
+
*/
|
|
104
|
+
type PinJobItem = {
|
|
105
|
+
id: string;
|
|
106
|
+
ipfs_pin_hash: string;
|
|
107
|
+
date_queued: string;
|
|
108
|
+
name: string;
|
|
109
|
+
status: string;
|
|
110
|
+
keyvalues: any;
|
|
111
|
+
host_nodes: string[];
|
|
112
|
+
pin_policy: {
|
|
113
|
+
regions: {
|
|
114
|
+
id: string;
|
|
115
|
+
desiredReplicationCount: number;
|
|
116
|
+
}[];
|
|
117
|
+
version: number;
|
|
118
|
+
};
|
|
119
|
+
};
|
|
120
|
+
/**
|
|
121
|
+
* Pin job response
|
|
122
|
+
*/
|
|
123
|
+
type PinJobResponse = {
|
|
124
|
+
rows: PinJobItem[];
|
|
125
|
+
};
|
|
126
|
+
/**
|
|
127
|
+
* Signed URL options
|
|
128
|
+
*/
|
|
129
|
+
type SignedUrlOptions = {
|
|
130
|
+
cid: string;
|
|
131
|
+
date?: number;
|
|
132
|
+
expires: number;
|
|
133
|
+
gateway?: string;
|
|
134
|
+
};
|
|
135
|
+
/**
|
|
136
|
+
* Analytics query options
|
|
137
|
+
*/
|
|
138
|
+
type AnalyticsQuery = {
|
|
139
|
+
gateway_domain: string;
|
|
140
|
+
start_date: string;
|
|
141
|
+
end_date: string;
|
|
142
|
+
cid?: string;
|
|
143
|
+
file_name?: string;
|
|
144
|
+
user_agent?: string;
|
|
145
|
+
country?: string;
|
|
146
|
+
region?: string;
|
|
147
|
+
referer?: string;
|
|
148
|
+
limit?: number;
|
|
149
|
+
sort_order?: "asc" | "desc";
|
|
150
|
+
};
|
|
151
|
+
/**
|
|
152
|
+
* Top analytics query options
|
|
153
|
+
*/
|
|
154
|
+
type TopAnalyticsQuery = AnalyticsQuery & {
|
|
155
|
+
sort_by: "requests" | "bandwidth";
|
|
156
|
+
attribute: "cid" | "country" | "region" | "user_agent" | "referer" | "file_name";
|
|
157
|
+
};
|
|
158
|
+
/**
|
|
159
|
+
* Top analytics response
|
|
160
|
+
*/
|
|
161
|
+
type TopAnalyticsResponse = {
|
|
162
|
+
data: TopAnalyticsItem[];
|
|
163
|
+
};
|
|
164
|
+
/**
|
|
165
|
+
* Top analytics item
|
|
166
|
+
*/
|
|
167
|
+
type TopAnalyticsItem = {
|
|
168
|
+
value: string;
|
|
169
|
+
requests: number;
|
|
170
|
+
bandwidth: number;
|
|
171
|
+
};
|
|
172
|
+
/**
|
|
173
|
+
* Time interval analytics query options
|
|
174
|
+
*/
|
|
175
|
+
type TimeIntervalAnalyticsQuery = AnalyticsQuery & {
|
|
176
|
+
sort_by?: "requests" | "bandwidth";
|
|
177
|
+
date_interval: "day" | "week";
|
|
178
|
+
};
|
|
179
|
+
/**
|
|
180
|
+
* Time period item
|
|
181
|
+
*/
|
|
182
|
+
type TimePeriodItem = {
|
|
183
|
+
period_start_time: string;
|
|
184
|
+
requests: number;
|
|
185
|
+
bandwidth: number;
|
|
186
|
+
};
|
|
187
|
+
/**
|
|
188
|
+
* Time interval analytics response
|
|
189
|
+
*/
|
|
190
|
+
type TimeIntervalAnalyticsResponse = {
|
|
191
|
+
total_requests: number;
|
|
192
|
+
total_bandwidth: number;
|
|
193
|
+
time_periods: TimePeriodItem[];
|
|
194
|
+
};
|
|
195
|
+
/**
|
|
196
|
+
* Swap CID options
|
|
197
|
+
*/
|
|
198
|
+
type SwapCidOptions = {
|
|
199
|
+
cid: string;
|
|
200
|
+
swapCid: string;
|
|
201
|
+
};
|
|
202
|
+
/**
|
|
203
|
+
* Swap history options
|
|
204
|
+
*/
|
|
205
|
+
type SwapHistoryOptions = {
|
|
206
|
+
cid: string;
|
|
207
|
+
domain: string;
|
|
208
|
+
};
|
|
209
|
+
/**
|
|
210
|
+
* Swap CID response
|
|
211
|
+
*/
|
|
212
|
+
type SwapCidResponse = {
|
|
213
|
+
mapped_cid: string;
|
|
214
|
+
created_at: string;
|
|
215
|
+
};
|
|
216
|
+
//#endregion
|
|
217
|
+
export { FileListQuery, FileListResponse, PinJobQuery, PinJobResponse, PinataConfig, SignedUrlOptions, SwapCidOptions, SwapCidResponse, SwapHistoryOptions, TimeIntervalAnalyticsQuery, TimeIntervalAnalyticsResponse, TopAnalyticsQuery, TopAnalyticsResponse, UploadOptions, UploadResponse };
|
|
218
|
+
//# sourceMappingURL=types.d.cts.map
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
const require_rolldown_runtime = require('../../../_virtual/rolldown_runtime.cjs');
|
|
2
|
+
let multiformats_cid = require("multiformats/cid");
|
|
3
|
+
|
|
4
|
+
//#region src/adapters/pinata/shared/utils.ts
|
|
5
|
+
/**
|
|
6
|
+
* Shared utilities for Pinata adapters
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Parse CID string to CID object
|
|
10
|
+
*/
|
|
11
|
+
function parseCID(cidString) {
|
|
12
|
+
try {
|
|
13
|
+
return multiformats_cid.CID.parse(cidString);
|
|
14
|
+
} catch (error) {
|
|
15
|
+
throw new Error(`Invalid CID: ${cidString}`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Create upload response object
|
|
20
|
+
*/
|
|
21
|
+
function createUploadResponse(result, name) {
|
|
22
|
+
return {
|
|
23
|
+
id: result.cid,
|
|
24
|
+
name: name || "",
|
|
25
|
+
cid: result.cid,
|
|
26
|
+
size: result.size,
|
|
27
|
+
created_at: result.createdAt.toISOString(),
|
|
28
|
+
number_of_files: 1,
|
|
29
|
+
mime_type: "application/octet-stream",
|
|
30
|
+
user_id: "",
|
|
31
|
+
group_id: null,
|
|
32
|
+
is_duplicate: null,
|
|
33
|
+
vectorized: null
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Create file list item from remote pin
|
|
38
|
+
*/
|
|
39
|
+
function createFileListItem(remotePin) {
|
|
40
|
+
return {
|
|
41
|
+
id: remotePin.cid.toString(),
|
|
42
|
+
name: remotePin.name || null,
|
|
43
|
+
cid: remotePin.cid.toString(),
|
|
44
|
+
size: remotePin.size || 0,
|
|
45
|
+
number_of_files: 1,
|
|
46
|
+
mime_type: "application/octet-stream",
|
|
47
|
+
keyvalues: remotePin.metadata || {},
|
|
48
|
+
group_id: null,
|
|
49
|
+
created_at: remotePin.created.toISOString()
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Create pin job item from remote pin
|
|
54
|
+
*/
|
|
55
|
+
function createPinJobItem(remotePin) {
|
|
56
|
+
return {
|
|
57
|
+
id: remotePin.cid.toString(),
|
|
58
|
+
ipfs_pin_hash: remotePin.cid.toString(),
|
|
59
|
+
date_queued: remotePin.created.toISOString(),
|
|
60
|
+
name: remotePin.name || "",
|
|
61
|
+
status: remotePin.status || "pinned",
|
|
62
|
+
keyvalues: remotePin.metadata || {},
|
|
63
|
+
host_nodes: [],
|
|
64
|
+
pin_policy: {
|
|
65
|
+
regions: [],
|
|
66
|
+
version: 1
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Throw error for unsupported features
|
|
72
|
+
*/
|
|
73
|
+
function notSupported(feature) {
|
|
74
|
+
throw new Error(`${feature} are not supported by Pinner`);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
//#endregion
|
|
78
|
+
exports.createFileListItem = createFileListItem;
|
|
79
|
+
exports.createPinJobItem = createPinJobItem;
|
|
80
|
+
exports.createUploadResponse = createUploadResponse;
|
|
81
|
+
exports.notSupported = notSupported;
|
|
82
|
+
exports.parseCID = parseCID;
|
|
83
|
+
//# sourceMappingURL=utils.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.cjs","names":["CID"],"sources":["../../../../../src/adapters/pinata/shared/utils.ts"],"sourcesContent":["/**\n * Shared utilities for Pinata adapters\n */\n\nimport { CID } from \"multiformats/cid\";\n\n/**\n * Parse CID string to CID object\n */\nexport function parseCID(cidString: string): CID {\n\ttry {\n\t\treturn CID.parse(cidString);\n\t} catch (error) {\n\t\tthrow new Error(`Invalid CID: ${cidString}`);\n\t}\n}\n\n/**\n * Convert Date to ISO string\n */\nexport function toISOString(date: Date): string {\n\treturn date.toISOString();\n}\n\n/**\n * Create upload response object\n */\nexport function createUploadResponse(\n\tresult: {\n\t\tcid: string;\n\t\tsize: number;\n\t\tcreatedAt: Date;\n\t},\n\tname?: string,\n): any {\n\treturn {\n\t\tid: result.cid,\n\t\tname: name || \"\",\n\t\tcid: result.cid,\n\t\tsize: result.size,\n\t\tcreated_at: result.createdAt.toISOString(),\n\t\tnumber_of_files: 1,\n\t\tmime_type: \"application/octet-stream\",\n\t\tuser_id: \"\",\n\t\tgroup_id: null,\n\t\tis_duplicate: null,\n\t\tvectorized: null,\n\t};\n}\n\n/**\n * Create file list item from remote pin\n */\nexport function createFileListItem(\n\tremotePin: any,\n): any {\n\treturn {\n\t\tid: remotePin.cid.toString(),\n\t\tname: remotePin.name || null,\n\t\tcid: remotePin.cid.toString(),\n\t\tsize: remotePin.size || 0,\n\t\tnumber_of_files: 1,\n\t\tmime_type: \"application/octet-stream\",\n\t\tkeyvalues: remotePin.metadata || {},\n\t\tgroup_id: null,\n\t\tcreated_at: remotePin.created.toISOString(),\n\t};\n}\n\n/**\n * Create pin job item from remote pin\n */\nexport function createPinJobItem(\n\tremotePin: any,\n): any {\n\treturn {\n\t\tid: remotePin.cid.toString(),\n\t\tipfs_pin_hash: remotePin.cid.toString(),\n\t\tdate_queued: remotePin.created.toISOString(),\n\t\tname: remotePin.name || \"\",\n\t\tstatus: remotePin.status || \"pinned\",\n\t\tkeyvalues: remotePin.metadata || {},\n\t\thost_nodes: [],\n\t\tpin_policy: {\n\t\t\tregions: [],\n\t\t\tversion: 1,\n\t\t},\n\t};\n}\n\n/**\n * Throw error for unsupported features\n */\nexport function notSupported(feature: string): never {\n\tthrow new Error(`${feature} are not supported by Pinner`);\n}\n"],"mappings":";;;;;;;;;;AASA,SAAgB,SAAS,WAAwB;AAChD,KAAI;AACH,SAAOA,qBAAI,MAAM,UAAU;UACnB,OAAO;AACf,QAAM,IAAI,MAAM,gBAAgB,YAAY;;;;;;AAc9C,SAAgB,qBACf,QAKA,MACM;AACN,QAAO;EACN,IAAI,OAAO;EACX,MAAM,QAAQ;EACd,KAAK,OAAO;EACZ,MAAM,OAAO;EACb,YAAY,OAAO,UAAU,aAAa;EAC1C,iBAAiB;EACjB,WAAW;EACX,SAAS;EACT,UAAU;EACV,cAAc;EACd,YAAY;EACZ;;;;;AAMF,SAAgB,mBACf,WACM;AACN,QAAO;EACN,IAAI,UAAU,IAAI,UAAU;EAC5B,MAAM,UAAU,QAAQ;EACxB,KAAK,UAAU,IAAI,UAAU;EAC7B,MAAM,UAAU,QAAQ;EACxB,iBAAiB;EACjB,WAAW;EACX,WAAW,UAAU,YAAY,EAAE;EACnC,UAAU;EACV,YAAY,UAAU,QAAQ,aAAa;EAC3C;;;;;AAMF,SAAgB,iBACf,WACM;AACN,QAAO;EACN,IAAI,UAAU,IAAI,UAAU;EAC5B,eAAe,UAAU,IAAI,UAAU;EACvC,aAAa,UAAU,QAAQ,aAAa;EAC5C,MAAM,UAAU,QAAQ;EACxB,QAAQ,UAAU,UAAU;EAC5B,WAAW,UAAU,YAAY,EAAE;EACnC,YAAY,EAAE;EACd,YAAY;GACX,SAAS,EAAE;GACX,SAAS;GACT;EACD;;;;;AAMF,SAAgB,aAAa,SAAwB;AACpD,OAAM,IAAI,MAAM,GAAG,QAAQ,8BAA8B"}
|