@lumeweb/pinner 0.1.0 → 0.1.3
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 +197 -18
- package/dist/esm/_virtual/{rolldown_runtime.js → _rolldown/runtime.js} +2 -2
- package/dist/esm/adapters/pinata/index.d.ts +4 -4
- package/dist/esm/adapters/pinata/index.js +6 -3
- package/dist/esm/adapters/pinata/legacy/adapter.d.ts +73 -0
- package/dist/esm/adapters/pinata/legacy/adapter.js +124 -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 +1 -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 +197 -0
- package/dist/esm/adapters/pinata/v2/adapter.d.ts +16 -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/api/generated/schemas/iPNSKeyListResponse.d.ts +46 -0
- package/dist/esm/api/generated/schemas/iPNSKeyListResponseResponse.d.ts +10 -0
- package/dist/esm/api/generated/schemas/iPNSKeyRequest.d.ts +43 -0
- package/dist/esm/api/generated/schemas/iPNSKeyResponse.d.ts +46 -0
- package/dist/esm/api/generated/schemas/iPNSPublishRequest.d.ts +44 -0
- package/dist/esm/api/generated/schemas/iPNSPublishResponse.d.ts +46 -0
- package/dist/esm/api/generated/schemas/iPNSResolveResponse.d.ts +47 -0
- package/dist/esm/api/generated/schemas/sSLStatusInfo.d.ts +45 -0
- package/dist/esm/api/generated/schemas/websiteConfigResponse.d.ts +43 -0
- package/dist/esm/api/generated/schemas/websiteItem.d.ts +23 -0
- package/dist/esm/api/generated/schemas/websiteItemResponse.d.ts +10 -0
- package/dist/esm/api/generated/schemas/websiteRequest.d.ts +45 -0
- package/dist/esm/api/generated/schemas/websiteResponse.d.ts +23 -0
- package/dist/esm/api/generated/schemas/websiteUpdateRequest.d.ts +45 -0
- package/dist/esm/api/generated/schemas/websiteValidateResponse.d.ts +45 -0
- package/dist/esm/api/ipns.d.ts +28 -0
- package/dist/esm/api/ipns.js +83 -0
- package/dist/esm/api/ipns.js.map +1 -0
- package/dist/esm/api/websites.d.ts +48 -0
- package/dist/esm/api/websites.js +168 -0
- package/dist/esm/api/websites.js.map +1 -0
- package/dist/esm/blockstore/unstorage-base.d.ts +4 -1
- package/dist/esm/blockstore/unstorage-base.js +3 -3
- package/dist/esm/blockstore/unstorage-base.js.map +1 -1
- package/dist/esm/blockstore/unstorage.d.ts +3 -31
- package/dist/esm/blockstore/unstorage.js +2 -2
- package/dist/esm/blockstore/unstorage.js.map +1 -1
- package/dist/esm/encoder/base64.js.map +1 -1
- package/dist/esm/encoder/csv/row-formatter.js.map +1 -1
- package/dist/esm/encoder/csv.js.map +1 -1
- package/dist/esm/encoder/json.js.map +1 -1
- package/dist/esm/encoder/text.js.map +1 -1
- package/dist/esm/encoder/url.js.map +1 -1
- package/dist/esm/index.d.ts +7 -5
- package/dist/esm/index.js +5 -2
- package/dist/esm/pin/client.js +8 -5
- package/dist/esm/pin/client.js.map +1 -1
- package/dist/esm/pinner.d.ts +16 -0
- package/dist/esm/pinner.js +24 -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 -1
- package/dist/esm/types/type-guards.d.ts +0 -1
- package/dist/esm/types/upload.d.ts +0 -1
- package/dist/esm/upload/base-upload.js +3 -3
- package/dist/esm/upload/base-upload.js.map +1 -1
- package/dist/esm/upload/builder.d.ts +0 -1
- package/dist/esm/upload/car.js +3 -3
- package/dist/esm/upload/car.js.map +1 -1
- package/dist/esm/upload/manager.js +5 -5
- package/dist/esm/upload/manager.js.map +1 -1
- package/dist/esm/upload/normalize.js +1 -1
- package/dist/esm/upload/normalize.js.map +1 -1
- package/dist/esm/utils/stream.d.ts +0 -3
- package/dist/esm/utils/tus-patch.js +2 -2
- package/dist/esm/utils/tus-patch.js.map +1 -1
- package/dist/esm/utils/validation.js.map +1 -1
- package/package.json +33 -32
- package/dist/cjs/_virtual/rolldown_runtime.cjs +0 -29
- 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/index.cjs +0 -3
- package/dist/cjs/adapters/pinata/list-builder.cjs +0 -52
- package/dist/cjs/adapters/pinata/list-builder.cjs.map +0 -1
- package/dist/cjs/blockstore/index.cjs +0 -2
- package/dist/cjs/blockstore/unstorage-base.cjs +0 -240
- package/dist/cjs/blockstore/unstorage-base.cjs.map +0 -1
- package/dist/cjs/blockstore/unstorage-base.d.cts +0 -23
- package/dist/cjs/blockstore/unstorage.cjs +0 -39
- package/dist/cjs/blockstore/unstorage.cjs.map +0 -1
- package/dist/cjs/blockstore/unstorage.d.cts +0 -36
- package/dist/cjs/config.d.cts +0 -51
- package/dist/cjs/encoder/base64.cjs +0 -38
- package/dist/cjs/encoder/base64.cjs.map +0 -1
- package/dist/cjs/encoder/csv/csv-formatter.cjs +0 -81
- package/dist/cjs/encoder/csv/csv-formatter.cjs.map +0 -1
- package/dist/cjs/encoder/csv/field-formatter.cjs +0 -76
- package/dist/cjs/encoder/csv/field-formatter.cjs.map +0 -1
- package/dist/cjs/encoder/csv/row-formatter.cjs +0 -159
- package/dist/cjs/encoder/csv/row-formatter.cjs.map +0 -1
- package/dist/cjs/encoder/csv.cjs +0 -44
- package/dist/cjs/encoder/csv.cjs.map +0 -1
- package/dist/cjs/encoder/error.cjs +0 -19
- package/dist/cjs/encoder/error.cjs.map +0 -1
- package/dist/cjs/encoder/index.cjs +0 -6
- package/dist/cjs/encoder/json.cjs +0 -36
- package/dist/cjs/encoder/json.cjs.map +0 -1
- package/dist/cjs/encoder/text.cjs +0 -35
- package/dist/cjs/encoder/text.cjs.map +0 -1
- package/dist/cjs/encoder/url.cjs +0 -39
- package/dist/cjs/encoder/url.cjs.map +0 -1
- package/dist/cjs/errors/index.cjs +0 -104
- package/dist/cjs/errors/index.cjs.map +0 -1
- package/dist/cjs/errors/index.d.cts +0 -47
- package/dist/cjs/index.cjs +0 -42
- package/dist/cjs/index.d.cts +0 -14
- package/dist/cjs/pin/client.cjs +0 -96
- package/dist/cjs/pin/client.cjs.map +0 -1
- package/dist/cjs/pin/index.cjs +0 -1
- package/dist/cjs/pinner.cjs +0 -126
- package/dist/cjs/pinner.cjs.map +0 -1
- package/dist/cjs/pinner.d.cts +0 -77
- package/dist/cjs/types/constants.cjs +0 -34
- package/dist/cjs/types/constants.cjs.map +0 -1
- package/dist/cjs/types/mime-types.cjs +0 -11
- package/dist/cjs/types/mime-types.cjs.map +0 -1
- package/dist/cjs/types/mime-types.d.cts +0 -7
- package/dist/cjs/types/pin.d.cts +0 -74
- package/dist/cjs/types/pinata.d.cts +0 -99
- package/dist/cjs/types/type-guards.cjs +0 -20
- package/dist/cjs/types/type-guards.cjs.map +0 -1
- package/dist/cjs/types/type-guards.d.cts +0 -15
- package/dist/cjs/types/upload.cjs +0 -18
- package/dist/cjs/types/upload.cjs.map +0 -1
- package/dist/cjs/types/upload.d.cts +0 -189
- package/dist/cjs/upload/base-upload.cjs +0 -135
- package/dist/cjs/upload/base-upload.cjs.map +0 -1
- package/dist/cjs/upload/builder.cjs +0 -174
- package/dist/cjs/upload/builder.cjs.map +0 -1
- package/dist/cjs/upload/builder.d.cts +0 -60
- package/dist/cjs/upload/car.cjs +0 -129
- package/dist/cjs/upload/car.cjs.map +0 -1
- package/dist/cjs/upload/car.d.cts +0 -19
- package/dist/cjs/upload/constants.cjs +0 -9
- package/dist/cjs/upload/constants.cjs.map +0 -1
- package/dist/cjs/upload/index.cjs +0 -8
- package/dist/cjs/upload/manager.cjs +0 -249
- package/dist/cjs/upload/manager.cjs.map +0 -1
- package/dist/cjs/upload/manager.d.cts +0 -35
- package/dist/cjs/upload/normalize.cjs +0 -28
- package/dist/cjs/upload/normalize.cjs.map +0 -1
- package/dist/cjs/upload/tus-upload.cjs +0 -74
- package/dist/cjs/upload/tus-upload.cjs.map +0 -1
- package/dist/cjs/upload/xhr-upload.cjs +0 -41
- package/dist/cjs/upload/xhr-upload.cjs.map +0 -1
- package/dist/cjs/utils/env.cjs +0 -12
- package/dist/cjs/utils/env.cjs.map +0 -1
- package/dist/cjs/utils/stream.cjs +0 -141
- package/dist/cjs/utils/stream.cjs.map +0 -1
- package/dist/cjs/utils/stream.d.cts +0 -23
- package/dist/cjs/utils/tus-patch.cjs +0 -50
- package/dist/cjs/utils/tus-patch.cjs.map +0 -1
- package/dist/cjs/utils/validation.cjs +0 -62
- package/dist/cjs/utils/validation.cjs.map +0 -1
- 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
|
@@ -7,6 +7,7 @@ A TypeScript library for uploading files to IPFS and managing pinning operations
|
|
|
7
7
|
- **Multiple Upload Methods**: TUS resumable uploads, XHR uploads, and direct CAR file uploads
|
|
8
8
|
- **Directory Support**: Upload multiple files as a directory to IPFS
|
|
9
9
|
- **Pin Management**: Add, list, remove, and check status of pinned content
|
|
10
|
+
- **Websites & IPNS**: Manage decentralized websites and IPNS name resolution entries
|
|
10
11
|
- **Custom Blockstore**: Flexible storage backend using unstorage (IndexedDB, filesystem, Redis, etc.)
|
|
11
12
|
- **Adapters**: Built-in Pinata adapter with extensible adapter pattern
|
|
12
13
|
- **Encoders**: Support for CSV, JSON, text, base64, and URL encoding
|
|
@@ -160,6 +161,157 @@ operation.on("error", (error) => {
|
|
|
160
161
|
const result = await operation.result;
|
|
161
162
|
```
|
|
162
163
|
|
|
164
|
+
## Websites & IPNS APIs
|
|
165
|
+
|
|
166
|
+
The Pinner client supports managing Websites and IPNS (InterPlanetary Name System) entries for decentralized website hosting and name resolution.
|
|
167
|
+
|
|
168
|
+
### Websites API
|
|
169
|
+
|
|
170
|
+
The WebsitesClient provides methods for managing website configurations that link domains to IPFS or IPNS content.
|
|
171
|
+
|
|
172
|
+
#### List Websites
|
|
173
|
+
|
|
174
|
+
```typescript
|
|
175
|
+
// List all websites
|
|
176
|
+
const websites = await pinner.websites.listWebsites();
|
|
177
|
+
|
|
178
|
+
websites.data.forEach(website => {
|
|
179
|
+
console.log("ID:", website.id);
|
|
180
|
+
console.log("Domain:", website.domain);
|
|
181
|
+
console.log("Target Type:", website.target_type); // "ipfs" or "ipns"
|
|
182
|
+
console.log("Target Hash:", website.target_hash);
|
|
183
|
+
console.log("Status:", website.status);
|
|
184
|
+
console.log("Created:", website.created);
|
|
185
|
+
});
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
#### Get Website by ID
|
|
189
|
+
|
|
190
|
+
```typescript
|
|
191
|
+
const website = await pinner.websites.getWebsite(websiteId);
|
|
192
|
+
console.log("Website details:", website);
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
#### Create Website
|
|
196
|
+
|
|
197
|
+
```typescript
|
|
198
|
+
// Create a new website with IPFS target
|
|
199
|
+
const website = await pinner.websites.createWebsite({
|
|
200
|
+
domain: "example.com",
|
|
201
|
+
target_type: "ipfs",
|
|
202
|
+
target_hash: "Qm..."
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
// Create a new website with IPNS target
|
|
206
|
+
const website = await pinner.websites.createWebsite({
|
|
207
|
+
domain: "example.com",
|
|
208
|
+
target_type: "ipns",
|
|
209
|
+
target_hash: "k51qzi5uqu5dj14p8d8q8y4e8y4e8y4e8y4e8y4e8y4e8y4e8y4e8y4e8y4e"
|
|
210
|
+
});
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
#### Update Website
|
|
214
|
+
|
|
215
|
+
```typescript
|
|
216
|
+
// Update website details (domain, target_type, or target_hash)
|
|
217
|
+
const website = await pinner.websites.updateWebsite(websiteId, {
|
|
218
|
+
domain: "new-domain.com",
|
|
219
|
+
target_type: "ipfs",
|
|
220
|
+
target_hash: "QmNew..."
|
|
221
|
+
});
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
#### Delete Website
|
|
225
|
+
|
|
226
|
+
```typescript
|
|
227
|
+
await pinner.websites.deleteWebsite(websiteId);
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
#### Validate Website DNS
|
|
231
|
+
|
|
232
|
+
```typescript
|
|
233
|
+
// Trigger DNS TXT record validation for a website domain
|
|
234
|
+
const validation = await pinner.websites.validateWebsite(websiteId);
|
|
235
|
+
console.log("Valid:", validation.valid);
|
|
236
|
+
console.log("Message:", validation.message);
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### IPNS API
|
|
240
|
+
|
|
241
|
+
The IpnsClient provides methods for managing IPNS keys and publishing content to IPNS names.
|
|
242
|
+
|
|
243
|
+
#### List IPNS Keys
|
|
244
|
+
|
|
245
|
+
```typescript
|
|
246
|
+
// List all IPNS keys
|
|
247
|
+
const keys = await pinner.ipns.listKeys();
|
|
248
|
+
|
|
249
|
+
keys.forEach(key => {
|
|
250
|
+
console.log("ID:", key.id);
|
|
251
|
+
console.log("Name:", key.name);
|
|
252
|
+
console.log("IPNS Name:", key.ipns_name);
|
|
253
|
+
console.log("Peer ID:", key.peer_id);
|
|
254
|
+
console.log("Created:", key.created);
|
|
255
|
+
});
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
#### Get IPNS Key by ID
|
|
259
|
+
|
|
260
|
+
```typescript
|
|
261
|
+
const key = await pinner.ipns.getKey(keyId);
|
|
262
|
+
console.log("IPNS key details:", key);
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
#### Create IPNS Key
|
|
266
|
+
|
|
267
|
+
```typescript
|
|
268
|
+
// Create a new IPNS key
|
|
269
|
+
const key = await pinner.ipns.createKey({
|
|
270
|
+
name: "my-website",
|
|
271
|
+
key: "optional-key-value"
|
|
272
|
+
});
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
#### Delete IPNS Key
|
|
276
|
+
|
|
277
|
+
```typescript
|
|
278
|
+
await pinner.ipns.deleteKey(keyId);
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
#### Publish to IPNS
|
|
282
|
+
|
|
283
|
+
```typescript
|
|
284
|
+
// Publish a CID to an IPNS key
|
|
285
|
+
const result = await pinner.ipns.publish({
|
|
286
|
+
key_id: keyId,
|
|
287
|
+
cid: "Qm...",
|
|
288
|
+
ttl: "24h" // optional time-to-live
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
console.log("Published:", result.name);
|
|
292
|
+
console.log("Value:", result.value);
|
|
293
|
+
console.log("Sequence:", result.sequence);
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
#### Republish IPNS Records
|
|
297
|
+
|
|
298
|
+
```typescript
|
|
299
|
+
// Manually trigger IPNS record republishing for all keys
|
|
300
|
+
await pinner.ipns.republish();
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
#### Resolve IPNS Name
|
|
304
|
+
|
|
305
|
+
```typescript
|
|
306
|
+
// Resolve an IPNS name to its current CID
|
|
307
|
+
const result = await pinner.ipns.resolve("k51qzi5uqu5dj14p8d8q8y4e8y4e8y4e8y4e8y4e8y4e8y4e8y4e8y4e8y4e8y4e");
|
|
308
|
+
|
|
309
|
+
console.log("Value:", result.value);
|
|
310
|
+
console.log("Path:", result.path);
|
|
311
|
+
console.log("Sequence:", result.sequence);
|
|
312
|
+
console.log("Expired:", result.expired);
|
|
313
|
+
```
|
|
314
|
+
|
|
163
315
|
## Pin Management
|
|
164
316
|
|
|
165
317
|
### Pin by CID
|
|
@@ -293,22 +445,39 @@ See [blockstore/README.md](./src/blockstore/README.md) for detailed blockstore d
|
|
|
293
445
|
|
|
294
446
|
## Adapters
|
|
295
447
|
|
|
296
|
-
### Pinata
|
|
448
|
+
### Pinata Adapters
|
|
297
449
|
|
|
298
|
-
The Pinata
|
|
450
|
+
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.
|
|
451
|
+
|
|
452
|
+
**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:
|
|
453
|
+
- **Pinata SDK 2.x**: https://github.com/PinataCloud/pinata/commit/cdc0c06116aaadaf7c4b287a2673cd23b6ba1125
|
|
454
|
+
- **Pinata SDK 1.x**: https://github.com/PinataCloud/pinata/commit/c141177ff3036e46fa7b95fcc68c159b58817836
|
|
455
|
+
|
|
456
|
+
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.
|
|
457
|
+
|
|
458
|
+
#### Available Adapters
|
|
459
|
+
|
|
460
|
+
- **V2 Adapter** (`pinataAdapter`): Compatible with Pinata SDK 2.x API (recommended, latest)
|
|
461
|
+
- **Legacy Adapter** (`pinataLegacyAdapter`): Compatible with Pinata SDK 1.x API
|
|
462
|
+
|
|
463
|
+
See [adapters/README.md](./src/adapters/README.md) for comprehensive documentation including migration guides, feature support tables, and detailed examples.
|
|
299
464
|
|
|
300
465
|
#### Setup
|
|
301
466
|
|
|
302
467
|
```typescript
|
|
303
|
-
import { Pinner, pinataAdapter } from "@lumeweb/pinner";
|
|
468
|
+
import { Pinner, pinataAdapter, pinataLegacyAdapter } from "@lumeweb/pinner";
|
|
304
469
|
|
|
305
470
|
// Initialize Pinner
|
|
306
471
|
const pinner = new Pinner({
|
|
307
|
-
jwt: "your-jwt-token"
|
|
472
|
+
jwt: "your-jwt-token",
|
|
473
|
+
endpoint: "https://your-pinning-service-endpoint.com"
|
|
308
474
|
});
|
|
309
475
|
|
|
310
|
-
// Create Pinata adapter
|
|
476
|
+
// Create Pinata V2 adapter (recommended)
|
|
311
477
|
const pinata = pinataAdapter(pinner);
|
|
478
|
+
|
|
479
|
+
// Or use the legacy adapter
|
|
480
|
+
const pinataLegacy = pinataLegacyAdapter(pinner);
|
|
312
481
|
```
|
|
313
482
|
|
|
314
483
|
#### Upload Methods
|
|
@@ -319,12 +488,12 @@ The Pinata adapter provides multiple upload methods with a fluent builder patter
|
|
|
319
488
|
|
|
320
489
|
```typescript
|
|
321
490
|
// Simple file upload
|
|
322
|
-
const result = await pinata.upload.file(file).execute();
|
|
491
|
+
const result = await pinata.upload.public.file(file).execute();
|
|
323
492
|
console.log("CID:", result.IpfsHash);
|
|
324
493
|
console.log("Size:", result.PinSize);
|
|
325
494
|
|
|
326
495
|
// Upload with metadata
|
|
327
|
-
const result = await pinata.upload.file(file)
|
|
496
|
+
const result = await pinata.upload.public.file(file)
|
|
328
497
|
.name("My File")
|
|
329
498
|
.keyvalues({ key: "value" })
|
|
330
499
|
.execute();
|
|
@@ -338,7 +507,7 @@ const files = [
|
|
|
338
507
|
new File(["content2"], "file2.txt")
|
|
339
508
|
];
|
|
340
509
|
|
|
341
|
-
const result = await pinata.upload.fileArray(files)
|
|
510
|
+
const result = await pinata.upload.public.fileArray(files)
|
|
342
511
|
.name("My Directory")
|
|
343
512
|
.keyvalues({ type: "directory" })
|
|
344
513
|
.execute();
|
|
@@ -349,7 +518,7 @@ const result = await pinata.upload.fileArray(files)
|
|
|
349
518
|
```typescript
|
|
350
519
|
const data = { foo: "bar", number: 42 };
|
|
351
520
|
|
|
352
|
-
const result = await pinata.upload.json(data)
|
|
521
|
+
const result = await pinata.upload.public.json(data)
|
|
353
522
|
.name("data.json")
|
|
354
523
|
.keyvalues({ format: "json" })
|
|
355
524
|
.execute();
|
|
@@ -360,7 +529,7 @@ const result = await pinata.upload.json(data)
|
|
|
360
529
|
```typescript
|
|
361
530
|
const base64String = "SGVsbG8sIHdvcmxkIQ==";
|
|
362
531
|
|
|
363
|
-
const result = await pinata.upload.base64(base64String)
|
|
532
|
+
const result = await pinata.upload.public.base64(base64String)
|
|
364
533
|
.name("base64-file.txt")
|
|
365
534
|
.execute();
|
|
366
535
|
```
|
|
@@ -368,7 +537,7 @@ const result = await pinata.upload.base64(base64String)
|
|
|
368
537
|
##### Upload from URL
|
|
369
538
|
|
|
370
539
|
```typescript
|
|
371
|
-
const result = await pinata.upload.url("https://example.com/data.json")
|
|
540
|
+
const result = await pinata.upload.public.url("https://example.com/data.json")
|
|
372
541
|
.name("downloaded-file.json")
|
|
373
542
|
.execute();
|
|
374
543
|
```
|
|
@@ -377,10 +546,10 @@ const result = await pinata.upload.url("https://example.com/data.json")
|
|
|
377
546
|
|
|
378
547
|
```typescript
|
|
379
548
|
// Pin existing content
|
|
380
|
-
await pinata.upload.cid("Qm...").execute();
|
|
549
|
+
await pinata.upload.public.cid("Qm...").execute();
|
|
381
550
|
|
|
382
551
|
// Pin with metadata
|
|
383
|
-
await pinata.upload.cid("Qm...")
|
|
552
|
+
await pinata.upload.public.cid("Qm...")
|
|
384
553
|
.name("Existing Content")
|
|
385
554
|
.keyvalues({ source: "external" })
|
|
386
555
|
.execute();
|
|
@@ -438,10 +607,10 @@ await pinata.setPinMetadata("Qm...", {
|
|
|
438
607
|
|
|
439
608
|
```typescript
|
|
440
609
|
// List all files
|
|
441
|
-
const files = await pinata.files.list().execute();
|
|
610
|
+
const files = await pinata.files.public.list().execute();
|
|
442
611
|
|
|
443
612
|
// List with pagination
|
|
444
|
-
const files = await pinata.files.list()
|
|
613
|
+
const files = await pinata.files.public.list()
|
|
445
614
|
.limit(10)
|
|
446
615
|
.pageToken("next-page-token")
|
|
447
616
|
.execute();
|
|
@@ -458,7 +627,7 @@ files.forEach(file => {
|
|
|
458
627
|
##### Get File by ID
|
|
459
628
|
|
|
460
629
|
```typescript
|
|
461
|
-
const file = await pinata.files.get("Qm...");
|
|
630
|
+
const file = await pinata.files.public.get("Qm...");
|
|
462
631
|
console.log("File details:", file);
|
|
463
632
|
```
|
|
464
633
|
|
|
@@ -484,7 +653,7 @@ import { Pinner, pinataAdapter } from '@lumeweb/pinner';
|
|
|
484
653
|
const pinner = new Pinner({ jwt: 'your-jwt-token' });
|
|
485
654
|
const pinata = pinataAdapter(pinner);
|
|
486
655
|
|
|
487
|
-
const result = await pinata.upload.file(file)
|
|
656
|
+
const result = await pinata.upload.public.file(file)
|
|
488
657
|
.name('My File')
|
|
489
658
|
.execute();
|
|
490
659
|
```
|
|
@@ -682,6 +851,16 @@ import type {
|
|
|
682
851
|
RemoteLsOptions
|
|
683
852
|
} from "@lumeweb/pinner";
|
|
684
853
|
|
|
854
|
+
// Websites & IPNS APIs
|
|
855
|
+
import type {
|
|
856
|
+
Website,
|
|
857
|
+
WebsiteCreateRequest,
|
|
858
|
+
WebsiteUpdateRequest,
|
|
859
|
+
IPNSEntry,
|
|
860
|
+
IPNSEntryCreateRequest,
|
|
861
|
+
IPNSEntryUpdateRequest
|
|
862
|
+
} from "@lumeweb/pinner";
|
|
863
|
+
|
|
685
864
|
// Blockstore
|
|
686
865
|
import {
|
|
687
866
|
createBlockstore,
|
|
@@ -690,7 +869,7 @@ import {
|
|
|
690
869
|
} from "@lumeweb/pinner";
|
|
691
870
|
|
|
692
871
|
// Adapters
|
|
693
|
-
import { pinataAdapter } from "@lumeweb/pinner
|
|
872
|
+
import { pinataAdapter, pinataLegacyAdapter } from "@lumeweb/pinner";
|
|
694
873
|
|
|
695
874
|
// Blockstore module
|
|
696
875
|
import { UnstorageBlockstore } from "@lumeweb/pinner/blockstore";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
//#region
|
|
1
|
+
//#region \0rolldown/runtime.js
|
|
2
2
|
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, { get: (a, b) => (typeof require !== "undefined" ? require : a)[b] }) : x)(function(x) {
|
|
3
3
|
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
4
|
-
throw Error("Calling `require` for \"" + x + "\" in an environment that doesn't expose the `require` function.");
|
|
4
|
+
throw Error("Calling `require` for \"" + x + "\" in an environment that doesn't expose the `require` function. See https://rolldown.rs/in-depth/bundling-cjs#require-external-modules for more details.");
|
|
5
5
|
});
|
|
6
6
|
|
|
7
7
|
//#endregion
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import "./
|
|
4
|
-
import "./
|
|
1
|
+
import { PinataAdapter } from "./v2/adapter-interface.js";
|
|
2
|
+
import { pinataAdapter } from "./v2/adapter.js";
|
|
3
|
+
import { AnalyticsQuery, FileListItem, FileListQuery, FileListResponse, PinJobItem, PinJobQuery, PinJobResponse, PinataConfig, PinataMetadata, SignedUrlOptions, SwapCidOptions, SwapCidResponse, SwapHistoryOptions, TimeIntervalAnalyticsQuery, TimeIntervalAnalyticsResponse, TimePeriodItem, TopAnalyticsItem, TopAnalyticsQuery, TopAnalyticsResponse, UploadOptions, UploadResponse } from "./shared/types.js";
|
|
4
|
+
import { PinataLegacyAdapter, pinataLegacyAdapter } from "./legacy/adapter.js";
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
1
|
+
import { createFileListItem, createPinJobItem, createUploadResponse, notSupported, parseCID } from "./shared/utils.js";
|
|
2
|
+
import { pinataAdapter } from "./v2/adapter.js";
|
|
3
|
+
import "./v2/index.js";
|
|
4
|
+
import { pinataLegacyAdapter } from "./legacy/adapter.js";
|
|
5
|
+
import "./legacy/index.js";
|
|
6
|
+
import "./shared/index.js";
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { Pinner } from "../../../pinner.js";
|
|
2
|
+
import { FileListQuery, FileListResponse, PinJobQuery, PinJobResponse, PinataConfig, SignedUrlOptions, SwapCidOptions, SwapCidResponse, SwapHistoryOptions, TimeIntervalAnalyticsQuery, TimeIntervalAnalyticsResponse, TopAnalyticsQuery, TopAnalyticsResponse, UploadOptions, UploadResponse } from "../shared/types.js";
|
|
3
|
+
|
|
4
|
+
//#region src/adapters/pinata/legacy/adapter.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* Pinata 1.x Legacy Adapter Interface
|
|
7
|
+
* Matches Pinata SDK 1.x API exactly
|
|
8
|
+
*/
|
|
9
|
+
interface PinataLegacyAdapter {
|
|
10
|
+
/**
|
|
11
|
+
* Upload a file to IPFS
|
|
12
|
+
*/
|
|
13
|
+
pinFileToIPFS(file: File, options?: UploadOptions): Promise<UploadResponse>;
|
|
14
|
+
/**
|
|
15
|
+
* Upload JSON data to IPFS
|
|
16
|
+
*/
|
|
17
|
+
pinJSONToIPFS(data: any, options?: UploadOptions): Promise<UploadResponse>;
|
|
18
|
+
/**
|
|
19
|
+
* Pin content by CID
|
|
20
|
+
*/
|
|
21
|
+
pinByHash(cid: string, options?: UploadOptions): Promise<UploadResponse>;
|
|
22
|
+
/**
|
|
23
|
+
* List pinned files
|
|
24
|
+
*/
|
|
25
|
+
pinList(query?: FileListQuery): Promise<FileListResponse>;
|
|
26
|
+
/**
|
|
27
|
+
* Unpin content by CID
|
|
28
|
+
*/
|
|
29
|
+
unpin(cid: string): Promise<{
|
|
30
|
+
message: string;
|
|
31
|
+
}>;
|
|
32
|
+
/**
|
|
33
|
+
* Update pin metadata
|
|
34
|
+
*/
|
|
35
|
+
hashMetadata(cid: string, metadata: Record<string, string>): Promise<{
|
|
36
|
+
message: string;
|
|
37
|
+
}>;
|
|
38
|
+
/**
|
|
39
|
+
* Create signed URL for private IPFS files
|
|
40
|
+
*/
|
|
41
|
+
createSignedURL(options: SignedUrlOptions): Promise<string>;
|
|
42
|
+
/**
|
|
43
|
+
* Get pin jobs
|
|
44
|
+
*/
|
|
45
|
+
pinJobs(query?: PinJobQuery): Promise<PinJobResponse>;
|
|
46
|
+
/**
|
|
47
|
+
* Get top usage analytics
|
|
48
|
+
*/
|
|
49
|
+
topUsageAnalytics(query: TopAnalyticsQuery): Promise<TopAnalyticsResponse>;
|
|
50
|
+
/**
|
|
51
|
+
* Get date interval analytics
|
|
52
|
+
*/
|
|
53
|
+
dateIntervalAnalytics(query: TimeIntervalAnalyticsQuery): Promise<TimeIntervalAnalyticsResponse>;
|
|
54
|
+
/**
|
|
55
|
+
* Swap CID
|
|
56
|
+
*/
|
|
57
|
+
swapCid(options: SwapCidOptions): Promise<SwapCidResponse>;
|
|
58
|
+
/**
|
|
59
|
+
* Get swap history
|
|
60
|
+
*/
|
|
61
|
+
swapHistory(options: SwapHistoryOptions): Promise<SwapCidResponse[]>;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Create Pinata 1.x Legacy Adapter
|
|
65
|
+
*
|
|
66
|
+
* @param pinner - Pinner client instance
|
|
67
|
+
* @param config - Pinata configuration
|
|
68
|
+
* @returns PinataLegacyAdapter
|
|
69
|
+
*/
|
|
70
|
+
declare function pinataLegacyAdapter(pinner: Pinner, config?: PinataConfig): PinataLegacyAdapter;
|
|
71
|
+
//#endregion
|
|
72
|
+
export { PinataLegacyAdapter, pinataLegacyAdapter };
|
|
73
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { DEFAULT_GATEWAY } from "../../../types/constants.js";
|
|
2
|
+
import { createFileListItem, createPinJobItem, createUploadResponse, notSupported, parseCID } from "../shared/utils.js";
|
|
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
|
+
/**
|
|
15
|
+
* Pin a file to IPFS
|
|
16
|
+
*/
|
|
17
|
+
async pinFileToIPFS(file, options) {
|
|
18
|
+
return createUploadResponse(await pinner.uploadAndWait(file, {
|
|
19
|
+
name: options?.metadata?.name,
|
|
20
|
+
keyvalues: options?.metadata?.keyvalues
|
|
21
|
+
}), file.name);
|
|
22
|
+
},
|
|
23
|
+
/**
|
|
24
|
+
* Pin JSON data to IPFS
|
|
25
|
+
*/
|
|
26
|
+
async pinJSONToIPFS(data, options) {
|
|
27
|
+
const jsonString = JSON.stringify(data);
|
|
28
|
+
const file = new File([jsonString], options?.metadata?.name || "data.json", { type: "application/json" });
|
|
29
|
+
return createUploadResponse(await pinner.uploadAndWait(file, {
|
|
30
|
+
name: options?.metadata?.name,
|
|
31
|
+
keyvalues: options?.metadata?.keyvalues
|
|
32
|
+
}), file.name);
|
|
33
|
+
},
|
|
34
|
+
/**
|
|
35
|
+
* Pin content by CID
|
|
36
|
+
*/
|
|
37
|
+
async pinByHash(cid, options) {
|
|
38
|
+
const cidObj = parseCID(cid);
|
|
39
|
+
const generator = await pinner.pinByHash(cidObj, {
|
|
40
|
+
name: options?.metadata?.name,
|
|
41
|
+
metadata: options?.metadata?.keyvalues
|
|
42
|
+
});
|
|
43
|
+
for await (const _ of generator);
|
|
44
|
+
const pin = await pinner.getPinStatus(cidObj);
|
|
45
|
+
return createUploadResponse({
|
|
46
|
+
cid: pin.cid.toString(),
|
|
47
|
+
size: pin.size || 0,
|
|
48
|
+
createdAt: pin.created
|
|
49
|
+
}, pin.name || "");
|
|
50
|
+
},
|
|
51
|
+
/**
|
|
52
|
+
* List pinned files
|
|
53
|
+
*/
|
|
54
|
+
async pinList(query) {
|
|
55
|
+
return {
|
|
56
|
+
files: (await pinner.listPins({ limit: query?.limit })).map(createFileListItem),
|
|
57
|
+
next_page_token: ""
|
|
58
|
+
};
|
|
59
|
+
},
|
|
60
|
+
/**
|
|
61
|
+
* Unpin content
|
|
62
|
+
*/
|
|
63
|
+
async unpin(cid) {
|
|
64
|
+
await pinner.unpin(cid);
|
|
65
|
+
return { message: `Unpinned ${cid}` };
|
|
66
|
+
},
|
|
67
|
+
/**
|
|
68
|
+
* Update pin metadata
|
|
69
|
+
*/
|
|
70
|
+
async hashMetadata(cid, metadata) {
|
|
71
|
+
await pinner.setPinMetadata(cid, metadata);
|
|
72
|
+
return { message: `Updated metadata for ${cid}` };
|
|
73
|
+
},
|
|
74
|
+
/**
|
|
75
|
+
* Create signed URL (not fully supported in Pinner)
|
|
76
|
+
* Returns a gateway URL instead
|
|
77
|
+
*/
|
|
78
|
+
async createSignedURL(options) {
|
|
79
|
+
return `${config?.pinataGateway || "https://dweb.link"}/ipfs/${options.cid}`;
|
|
80
|
+
},
|
|
81
|
+
/**
|
|
82
|
+
* Get pin jobs
|
|
83
|
+
*/
|
|
84
|
+
async pinJobs(query) {
|
|
85
|
+
return { rows: (await pinner.listPins({ limit: query?.limit })).map(createPinJobItem) };
|
|
86
|
+
},
|
|
87
|
+
/**
|
|
88
|
+
* Get top usage analytics (not supported in Pinner)
|
|
89
|
+
* Returns empty data
|
|
90
|
+
*/
|
|
91
|
+
async topUsageAnalytics(query) {
|
|
92
|
+
return { data: [] };
|
|
93
|
+
},
|
|
94
|
+
/**
|
|
95
|
+
* Get date interval analytics (not supported in Pinner)
|
|
96
|
+
* Returns empty data
|
|
97
|
+
*/
|
|
98
|
+
async dateIntervalAnalytics(query) {
|
|
99
|
+
return {
|
|
100
|
+
total_requests: 0,
|
|
101
|
+
total_bandwidth: 0,
|
|
102
|
+
time_periods: []
|
|
103
|
+
};
|
|
104
|
+
},
|
|
105
|
+
/**
|
|
106
|
+
* Swap CID (not supported in Pinner)
|
|
107
|
+
* Returns error
|
|
108
|
+
*/
|
|
109
|
+
async swapCid(options) {
|
|
110
|
+
notSupported("Swap CID");
|
|
111
|
+
},
|
|
112
|
+
/**
|
|
113
|
+
* Get swap history (not supported in Pinner)
|
|
114
|
+
* Returns empty array
|
|
115
|
+
*/
|
|
116
|
+
async swapHistory(options) {
|
|
117
|
+
return [];
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
//#endregion
|
|
123
|
+
export { pinataLegacyAdapter };
|
|
124
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","names":[],"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,UAAO,qBAAqB,MALP,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,UAAO,qBAAqB,MALP,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,SAAS,SAAS,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,UAAO,qBACN;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,QAAO,MALW,OAAO,SAAS,EAClC,OAAO,OAAO,OACd,CAAC,EAGW,IAAI,mBAAmB;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,qCACN,QAAQ,QAAQ;;;;;EAMnC,MAAM,QAAQ,OAA8C;AAK3D,UAAO,EACN,OAAM,MALY,OAAO,SAAS,EAClC,OAAO,OAAO,OACd,CAAC,EAGU,IAAI,iBAAiB,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,gBAAa,WAAW;;;;;;EAOzB,MAAM,YAAY,SAAyD;AAE1E,UAAO,EAAE;;EAEV"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import { PinataLegacyAdapter, pinataLegacyAdapter } from "./adapter.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import { pinataLegacyAdapter } from "./adapter.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import { AnalyticsQuery, FileListItem, FileListQuery, FileListResponse, PinJobItem, PinJobQuery, PinJobResponse, PinataConfig, PinataMetadata, SignedUrlOptions, SwapCidOptions, SwapCidResponse, SwapHistoryOptions, TimeIntervalAnalyticsQuery, TimeIntervalAnalyticsResponse, TimePeriodItem, TopAnalyticsItem, TopAnalyticsQuery, TopAnalyticsResponse, UploadOptions, UploadResponse } from "./types.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import { createFileListItem, createPinJobItem, createUploadResponse, notSupported, parseCID } from "./utils.js";
|