@lumeweb/pinner 0.1.1 → 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 +162 -0
- package/dist/esm/_virtual/{rolldown_runtime.js → _rolldown/runtime.js} +2 -2
- package/dist/esm/adapters/pinata/index.d.ts +1 -4
- package/dist/esm/adapters/pinata/legacy/adapter.d.ts +0 -1
- package/dist/esm/adapters/pinata/legacy/adapter.js +42 -1
- package/dist/esm/adapters/pinata/legacy/adapter.js.map +1 -1
- package/dist/esm/adapters/pinata/shared/index.d.ts +1 -2
- package/dist/esm/adapters/pinata/v2/adapter-interface.d.ts +0 -1
- package/dist/esm/adapters/pinata/v2/adapter.d.ts +0 -1
- package/dist/esm/adapters/pinata/v2/adapter.js +3 -3
- package/dist/esm/adapters/pinata/v2/adapter.js.map +1 -1
- 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 +3 -3
- package/dist/esm/index.js +3 -1
- package/dist/esm/pin/client.js +3 -2
- package/dist/esm/pin/client.js.map +1 -1
- package/dist/esm/pinner.d.ts +12 -0
- package/dist/esm/pinner.js +18 -0
- package/dist/esm/pinner.js.map +1 -1
- package/dist/esm/types/pin.d.ts +0 -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/index.cjs +0 -6
- package/dist/cjs/adapters/pinata/legacy/adapter.cjs +0 -83
- package/dist/cjs/adapters/pinata/legacy/adapter.cjs.map +0 -1
- package/dist/cjs/adapters/pinata/legacy/adapter.d.cts +0 -74
- package/dist/cjs/adapters/pinata/legacy/index.cjs +0 -1
- package/dist/cjs/adapters/pinata/shared/index.cjs +0 -1
- package/dist/cjs/adapters/pinata/shared/types.d.cts +0 -218
- package/dist/cjs/adapters/pinata/shared/utils.cjs +0 -83
- package/dist/cjs/adapters/pinata/shared/utils.cjs.map +0 -1
- package/dist/cjs/adapters/pinata/v2/adapter-interface.d.cts +0 -198
- package/dist/cjs/adapters/pinata/v2/adapter.cjs +0 -636
- package/dist/cjs/adapters/pinata/v2/adapter.cjs.map +0 -1
- package/dist/cjs/adapters/pinata/v2/adapter.d.cts +0 -17
- package/dist/cjs/adapters/pinata/v2/index.cjs +0 -1
- package/dist/cjs/adapters/pinata/v2/types.d.cts +0 -308
- 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 -44
- package/dist/cjs/index.d.cts +0 -16
- package/dist/cjs/pin/client.cjs +0 -98
- package/dist/cjs/pin/client.cjs.map +0 -1
- package/dist/cjs/pin/index.cjs +0 -1
- package/dist/cjs/pinner.cjs +0 -132
- package/dist/cjs/pinner.cjs.map +0 -1
- package/dist/cjs/pinner.d.cts +0 -81
- package/dist/cjs/types/constants.cjs +0 -39
- 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 -78
- 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/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
|
|
@@ -699,6 +851,16 @@ import type {
|
|
|
699
851
|
RemoteLsOptions
|
|
700
852
|
} from "@lumeweb/pinner";
|
|
701
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
|
+
|
|
702
864
|
// Blockstore
|
|
703
865
|
import {
|
|
704
866
|
createBlockstore,
|
|
@@ -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,7 +1,4 @@
|
|
|
1
1
|
import { PinataAdapter } from "./v2/adapter-interface.js";
|
|
2
2
|
import { pinataAdapter } from "./v2/adapter.js";
|
|
3
|
-
import "./v2/index.js";
|
|
4
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";
|
|
5
|
-
import { PinataLegacyAdapter, pinataLegacyAdapter } from "./legacy/adapter.js";
|
|
6
|
-
import "./legacy/index.js";
|
|
7
|
-
import "./shared/index.js";
|
|
4
|
+
import { PinataLegacyAdapter, pinataLegacyAdapter } from "./legacy/adapter.js";
|
|
@@ -2,7 +2,6 @@ import { Pinner } from "../../../pinner.js";
|
|
|
2
2
|
import { FileListQuery, FileListResponse, PinJobQuery, PinJobResponse, PinataConfig, SignedUrlOptions, SwapCidOptions, SwapCidResponse, SwapHistoryOptions, TimeIntervalAnalyticsQuery, TimeIntervalAnalyticsResponse, TopAnalyticsQuery, TopAnalyticsResponse, UploadOptions, UploadResponse } from "../shared/types.js";
|
|
3
3
|
|
|
4
4
|
//#region src/adapters/pinata/legacy/adapter.d.ts
|
|
5
|
-
|
|
6
5
|
/**
|
|
7
6
|
* Pinata 1.x Legacy Adapter Interface
|
|
8
7
|
* Matches Pinata SDK 1.x API exactly
|
|
@@ -11,12 +11,18 @@ import { createFileListItem, createPinJobItem, createUploadResponse, notSupporte
|
|
|
11
11
|
*/
|
|
12
12
|
function pinataLegacyAdapter(pinner, config) {
|
|
13
13
|
return {
|
|
14
|
+
/**
|
|
15
|
+
* Pin a file to IPFS
|
|
16
|
+
*/
|
|
14
17
|
async pinFileToIPFS(file, options) {
|
|
15
18
|
return createUploadResponse(await pinner.uploadAndWait(file, {
|
|
16
19
|
name: options?.metadata?.name,
|
|
17
20
|
keyvalues: options?.metadata?.keyvalues
|
|
18
21
|
}), file.name);
|
|
19
22
|
},
|
|
23
|
+
/**
|
|
24
|
+
* Pin JSON data to IPFS
|
|
25
|
+
*/
|
|
20
26
|
async pinJSONToIPFS(data, options) {
|
|
21
27
|
const jsonString = JSON.stringify(data);
|
|
22
28
|
const file = new File([jsonString], options?.metadata?.name || "data.json", { type: "application/json" });
|
|
@@ -25,6 +31,9 @@ function pinataLegacyAdapter(pinner, config) {
|
|
|
25
31
|
keyvalues: options?.metadata?.keyvalues
|
|
26
32
|
}), file.name);
|
|
27
33
|
},
|
|
34
|
+
/**
|
|
35
|
+
* Pin content by CID
|
|
36
|
+
*/
|
|
28
37
|
async pinByHash(cid, options) {
|
|
29
38
|
const cidObj = parseCID(cid);
|
|
30
39
|
const generator = await pinner.pinByHash(cidObj, {
|
|
@@ -39,29 +48,53 @@ function pinataLegacyAdapter(pinner, config) {
|
|
|
39
48
|
createdAt: pin.created
|
|
40
49
|
}, pin.name || "");
|
|
41
50
|
},
|
|
51
|
+
/**
|
|
52
|
+
* List pinned files
|
|
53
|
+
*/
|
|
42
54
|
async pinList(query) {
|
|
43
55
|
return {
|
|
44
56
|
files: (await pinner.listPins({ limit: query?.limit })).map(createFileListItem),
|
|
45
57
|
next_page_token: ""
|
|
46
58
|
};
|
|
47
59
|
},
|
|
60
|
+
/**
|
|
61
|
+
* Unpin content
|
|
62
|
+
*/
|
|
48
63
|
async unpin(cid) {
|
|
49
64
|
await pinner.unpin(cid);
|
|
50
65
|
return { message: `Unpinned ${cid}` };
|
|
51
66
|
},
|
|
67
|
+
/**
|
|
68
|
+
* Update pin metadata
|
|
69
|
+
*/
|
|
52
70
|
async hashMetadata(cid, metadata) {
|
|
53
71
|
await pinner.setPinMetadata(cid, metadata);
|
|
54
72
|
return { message: `Updated metadata for ${cid}` };
|
|
55
73
|
},
|
|
74
|
+
/**
|
|
75
|
+
* Create signed URL (not fully supported in Pinner)
|
|
76
|
+
* Returns a gateway URL instead
|
|
77
|
+
*/
|
|
56
78
|
async createSignedURL(options) {
|
|
57
|
-
return `${config?.pinataGateway ||
|
|
79
|
+
return `${config?.pinataGateway || "https://dweb.link"}/ipfs/${options.cid}`;
|
|
58
80
|
},
|
|
81
|
+
/**
|
|
82
|
+
* Get pin jobs
|
|
83
|
+
*/
|
|
59
84
|
async pinJobs(query) {
|
|
60
85
|
return { rows: (await pinner.listPins({ limit: query?.limit })).map(createPinJobItem) };
|
|
61
86
|
},
|
|
87
|
+
/**
|
|
88
|
+
* Get top usage analytics (not supported in Pinner)
|
|
89
|
+
* Returns empty data
|
|
90
|
+
*/
|
|
62
91
|
async topUsageAnalytics(query) {
|
|
63
92
|
return { data: [] };
|
|
64
93
|
},
|
|
94
|
+
/**
|
|
95
|
+
* Get date interval analytics (not supported in Pinner)
|
|
96
|
+
* Returns empty data
|
|
97
|
+
*/
|
|
65
98
|
async dateIntervalAnalytics(query) {
|
|
66
99
|
return {
|
|
67
100
|
total_requests: 0,
|
|
@@ -69,9 +102,17 @@ function pinataLegacyAdapter(pinner, config) {
|
|
|
69
102
|
time_periods: []
|
|
70
103
|
};
|
|
71
104
|
},
|
|
105
|
+
/**
|
|
106
|
+
* Swap CID (not supported in Pinner)
|
|
107
|
+
* Returns error
|
|
108
|
+
*/
|
|
72
109
|
async swapCid(options) {
|
|
73
110
|
notSupported("Swap CID");
|
|
74
111
|
},
|
|
112
|
+
/**
|
|
113
|
+
* Get swap history (not supported in Pinner)
|
|
114
|
+
* Returns empty array
|
|
115
|
+
*/
|
|
75
116
|
async swapHistory(options) {
|
|
76
117
|
return [];
|
|
77
118
|
}
|
|
@@ -1 +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
|
|
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"}
|
|
@@ -1,2 +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";
|
|
2
|
-
import "./utils.js";
|
|
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";
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { AccessLinkOptions, DeleteResponse, FileListItem, FileListResponse, GetGroupOptions, GroupCIDOptions, GroupListResponse, GroupOptions, GroupResponseItem, PinByCIDResponse, PinQueueItem, PinQueueResponse, PinataConfig, SignedUploadUrlOptions, SwapCidOptions, SwapCidResponse, SwapHistoryOptions, TimeIntervalAnalyticsQuery, TimeIntervalAnalyticsResponse, TopAnalyticsQuery, TopAnalyticsResponse, UpdateFileOptions, UpdateGroupFilesResponse, UpdateGroupOptions, UploadCIDOptions, UploadOptions, UploadResponse } from "./types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/adapters/pinata/v2/adapter-interface.d.ts
|
|
4
|
-
|
|
5
4
|
/**
|
|
6
5
|
* Upload builder interface
|
|
7
6
|
*/
|
|
@@ -498,12 +498,12 @@ var PublicGatewaysImpl = class {
|
|
|
498
498
|
get(cid) {
|
|
499
499
|
return {
|
|
500
500
|
cid,
|
|
501
|
-
gateway: this.config?.pinataGateway ||
|
|
502
|
-
url: `${this.config?.pinataGateway ||
|
|
501
|
+
gateway: this.config?.pinataGateway || "https://dweb.link",
|
|
502
|
+
url: `${this.config?.pinataGateway || "https://dweb.link"}/ipfs/${cid}`
|
|
503
503
|
};
|
|
504
504
|
}
|
|
505
505
|
async convert(url, gatewayPrefix) {
|
|
506
|
-
const gateway = gatewayPrefix || this.config?.pinataGateway ||
|
|
506
|
+
const gateway = gatewayPrefix || this.config?.pinataGateway || "https://dweb.link";
|
|
507
507
|
return url.replace("ipfs://", `${gateway}/ipfs/`);
|
|
508
508
|
}
|
|
509
509
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","names":[],"sources":["../../../../../src/adapters/pinata/v2/adapter.ts"],"sourcesContent":["/**\n * Pinata SDK 2.x Adapter Implementation\n * Provides compatibility with Pinata SDK 2.x API\n *\n * Source: https://github.com/PinataCloud/pinata/commit/cdc0c06116aaadaf7c4b287a2673cd23b6ba1125\n * - src/core/pinataSDK.ts\n * - src/core/types/index.ts\n * - src/core/classes/index.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\tUploadCIDOptions,\n\tPinByCIDResponse,\n\tSignedUploadUrlOptions,\n\tFileListItem,\n\tFileListQuery,\n\tFileListResponse,\n\tUpdateFileOptions,\n\tDeleteResponse,\n\tPinQueueQuery,\n\tPinQueueResponse,\n\tSwapCidOptions,\n\tSwapCidResponse,\n\tSwapHistoryOptions,\n\tAccessLinkOptions,\n\tGroupOptions,\n\tUpdateGroupOptions,\n\tGetGroupOptions,\n\tGroupResponseItem,\n\tGroupCIDOptions,\n\tUpdateGroupFilesResponse,\n\tTopAnalyticsQuery,\n\tTopAnalyticsResponse,\n\tTimeIntervalAnalyticsQuery,\n\tTimeIntervalAnalyticsResponse,\n} from \"./types\";\nimport type {\n\tPinataAdapter,\n\tPublicUpload,\n\tPrivateUpload,\n\tPublicFiles,\n\tPrivateFiles,\n\tPublicGateways,\n\tPrivateGateways,\n\tPublicGroups,\n\tPrivateGroups,\n\tAnalytics,\n\tUploadBuilder,\n\tFilterFiles,\n\tFilterQueue,\n\tFilterGroups,\n} from \"./adapter-interface\";\nimport { parseCID, notSupported } from \"../shared/utils\";\nimport { DEFAULT_GATEWAY } from \"@/types/constants\";\n\n/**\n * Implementation of UploadBuilder\n */\nclass UploadBuilderImpl<TResult> implements UploadBuilder<TResult> {\n\tprivate _name?: string;\n\tprivate _keyvalues?: Record<string, string>;\n\n\tconstructor(\n\t\tprivate pinner: Pinner,\n\t\tprivate executeFn: (name?: string, keyvalues?: Record<string, string>) => Promise<TResult>,\n\t) {}\n\n\tname(name: string): this {\n\t\tthis._name = name;\n\t\treturn this;\n\t}\n\n\tkeyvalues(keyvalues: Record<string, string>): this {\n\t\tthis._keyvalues = keyvalues;\n\t\treturn this;\n\t}\n\n\tasync execute(): Promise<TResult> {\n\t\treturn this.executeFn(this._name, this._keyvalues);\n\t}\n}\n\n/**\n * Implementation of FilterFiles\n */\nclass FilterFilesImpl implements FilterFiles {\n\tprivate query: FileListQuery = {};\n\tprivate currentPageToken: string | undefined;\n\tprivate privacy: \"public\" | \"private\";\n\n\tconstructor(\n\t\tprivate pinner: Pinner,\n\t\tprivacy: \"public\" | \"private\",\n\t) {\n\t\tthis.privacy = privacy;\n\t}\n\n\tname(name: string): FilterFiles {\n\t\tthis.query.name = name;\n\t\treturn this;\n\t}\n\n\tgroup(group: string): FilterFiles {\n\t\tthis.query.group = group;\n\t\treturn this;\n\t}\n\n\tcid(cid: string): FilterFiles {\n\t\tthis.query.cid = cid;\n\t\treturn this;\n\t}\n\n\tmimeType(mimeType: string): FilterFiles {\n\t\tthis.query.mimeType = mimeType;\n\t\treturn this;\n\t}\n\n\torder(order: \"ASC\" | \"DESC\"): FilterFiles {\n\t\tthis.query.order = order;\n\t\treturn this;\n\t}\n\n\tlimit(limit: number): FilterFiles {\n\t\tthis.query.limit = limit;\n\t\treturn this;\n\t}\n\n\tcidPending(cidPending: boolean): FilterFiles {\n\t\tthis.query.cidPending = cidPending;\n\t\treturn this;\n\t}\n\n\tkeyvalues(keyvalues: Record<string, string>): FilterFiles {\n\t\tthis.query.metadata = keyvalues;\n\t\treturn this;\n\t}\n\n\tnoGroup(noGroup: boolean): FilterFiles {\n\t\tthis.query.noGroup = noGroup;\n\t\treturn this;\n\t}\n\n\tpageToken(pageToken: string): FilterFiles {\n\t\tthis.query.pageToken = Number.parseInt(pageToken, 10);\n\t\treturn this;\n\t}\n\n\tthen(\n\t\tonfulfilled?: ((value: FileListResponse) => any) | null,\n\t\tonrejected?: ((reason: any) => any) | null,\n\t): Promise<any> {\n\t\treturn this.fetchPage().then(onfulfilled, onrejected);\n\t}\n\n\tprivate async fetchPage(): Promise<FileListResponse> {\n\t\tconst pins = await this.pinner.listPins({\n\t\t\tlimit: this.query.limit,\n\t\t});\n\n\t\treturn {\n\t\t\tfiles: pins.map((pin) => ({\n\t\t\t\tid: pin.cid.toString(),\n\t\t\t\tname: pin.name || null,\n\t\t\t\tcid: pin.cid.toString(),\n\t\t\t\tsize: pin.size || 0,\n\t\t\t\tnumber_of_files: 1,\n\t\t\t\tmime_type: \"application/octet-stream\",\n\t\t\t\tkeyvalues: pin.metadata || {},\n\t\t\t\tgroup_id: null,\n\t\t\t\tcreated_at: pin.created.toISOString(),\n\t\t\t})),\n\t\t\tnext_page_token: this.currentPageToken || \"\",\n\t\t};\n\t}\n\n\tasync *[Symbol.asyncIterator](): AsyncGenerator<FileListItem, void, unknown> {\n\t\twhile (true) {\n\t\t\tconst items = await this.fetchPage();\n\t\t\tfor (const item of items.files) {\n\t\t\t\tyield item;\n\t\t\t}\n\t\t\tif (!this.currentPageToken) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tasync all(): Promise<FileListItem[]> {\n\t\tconst allItems: FileListItem[] = [];\n\t\tfor await (const item of this) {\n\t\t\tallItems.push(item);\n\t\t}\n\t\treturn allItems;\n\t}\n}\n\n/**\n * Implementation of FilterQueue\n */\nclass FilterQueueImpl implements FilterQueue {\n\tprivate query: PinQueueQuery = {};\n\tprivate currentPageToken: string | undefined;\n\n\tconstructor(private pinner: Pinner) {}\n\n\tcid(cid: string): FilterQueue {\n\t\tthis.query.cid = cid;\n\t\treturn this;\n\t}\n\n\tstatus(\n\t\tstatus:\n\t\t\t| \"prechecking\"\n\t\t\t| \"retrieving\"\n\t\t\t| \"expired\"\n\t\t\t| \"backfilled\"\n\t\t\t| \"over_free_limit\"\n\t\t\t| \"over_max_size\"\n\t\t\t| \"invalid_object\"\n\t\t\t| \"bad_host_node\",\n\t): FilterQueue {\n\t\tthis.query.status = status;\n\t\treturn this;\n\t}\n\n\tpageLimit(limit: number): FilterQueue {\n\t\tthis.query.limit = limit;\n\t\treturn this;\n\t}\n\n\tpageToken(pageToken: string): FilterQueue {\n\t\tthis.query.pageToken = pageToken;\n\t\treturn this;\n\t}\n\n\tsort(sort: \"ASC\" | \"DSC\"): FilterQueue {\n\t\tthis.query.sort = sort;\n\t\treturn this;\n\t}\n\n\tthen(\n\t\tonfulfilled?: ((value: PinQueueResponse) => any) | null,\n\t\tonrejected?: ((reason: any) => any) | null,\n\t): Promise<any> {\n\t\treturn this.fetchPage().then(onfulfilled, onrejected);\n\t}\n\n\tprivate async fetchPage(): Promise<PinQueueResponse> {\n\t\tconst pins = await this.pinner.listPins({\n\t\t\tlimit: this.query.limit,\n\t\t});\n\n\t\treturn {\n\t\t\tjobs: pins.map((pin) => ({\n\t\t\t\tid: pin.cid.toString(),\n\t\t\t\tcid: pin.cid.toString(),\n\t\t\t\tdate_queued: pin.created.toISOString(),\n\t\t\t\tname: pin.name || \"\",\n\t\t\t\tstatus: pin.status || \"pinned\",\n\t\t\t\tkeyvalues: pin.metadata || {},\n\t\t\t\thost_nodes: [],\n\t\t\t\tpin_policy: {\n\t\t\t\t\tregions: [],\n\t\t\t\t\tversion: 1,\n\t\t\t\t},\n\t\t\t})),\n\t\t\tnext_page_token: this.currentPageToken || \"\",\n\t\t};\n\t}\n\n\tasync *[Symbol.asyncIterator](): AsyncGenerator<\n\t\timport(\"./types\").PinQueueItem,\n\t\tvoid,\n\t\tunknown\n\t> {\n\t\twhile (true) {\n\t\t\tconst items = await this.fetchPage();\n\t\t\tfor (const item of items.jobs) {\n\t\t\t\tyield item;\n\t\t\t}\n\t\t\tif (!this.currentPageToken) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tasync all(): Promise<import(\"./types\").PinQueueItem[]> {\n\t\tconst allItems: import(\"./types\").PinQueueItem[] = [];\n\t\tfor await (const item of this) {\n\t\t\tallItems.push(item);\n\t\t}\n\t\treturn allItems;\n\t}\n}\n\n/**\n * Implementation of FilterGroups\n */\nclass FilterGroupsImpl implements FilterGroups {\n\tprivate currentPageToken: string | undefined;\n\tprivate privacy: \"public\" | \"private\";\n\n\tconstructor(private pinner: Pinner, privacy: \"public\" | \"private\") {\n\t\tthis.privacy = privacy;\n\t}\n\n\tname(name: string): FilterGroups {\n\t\t// Pinner doesn't support groups, return empty\n\t\treturn this;\n\t}\n\n\tlimit(limit: number): FilterGroups {\n\t\treturn this;\n\t}\n\n\tpageToken(pageToken: string): FilterGroups {\n\t\tthis.currentPageToken = pageToken;\n\t\treturn this;\n\t}\n\n\tisPublic(isPublic: boolean): FilterGroups {\n\t\treturn this;\n\t}\n\n\tthen(\n\t\tonfulfilled?: ((value: import(\"./types\").GroupListResponse) => any) | null,\n\t\tonrejected?: ((reason: any) => any) | null,\n\t): Promise<any> {\n\t\treturn this.fetchPage().then(onfulfilled, onrejected);\n\t}\n\n\tprivate async fetchPage(): Promise<import(\"./types\").GroupListResponse> {\n\t\t// Pinner doesn't support groups\n\t\treturn {\n\t\t\tgroups: [],\n\t\t\tnext_page_token: this.currentPageToken || \"\",\n\t\t};\n\t}\n\n\tasync *[Symbol.asyncIterator](): AsyncGenerator<GroupResponseItem, void, unknown> {\n\t\tconst items = await this.fetchPage();\n\t\tfor (const item of items.groups) {\n\t\t\tyield item;\n\t\t}\n\t}\n\n\tasync all(): Promise<GroupResponseItem[]> {\n\t\tconst allItems: GroupResponseItem[] = [];\n\t\tfor await (const item of this) {\n\t\t\tallItems.push(item);\n\t\t}\n\t\treturn allItems;\n\t}\n}\n\n/**\n * Implementation of PublicUpload\n */\nclass PublicUploadImpl implements PublicUpload {\n\tconstructor(\n\t\tprivate pinner: Pinner,\n\t\tprivate config?: PinataConfig,\n\t) {}\n\n\tfile(file: File, options?: UploadOptions): UploadBuilder<UploadResponse> {\n\t\treturn new UploadBuilderImpl(this.pinner, async (name, keyvalues) => {\n\t\t\tconst result = await this.pinner.uploadAndWait(file, {\n\t\t\t\tname: name || options?.metadata?.name,\n\t\t\t\tkeyvalues: keyvalues || options?.metadata?.keyvalues,\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tid: result.cid,\n\t\t\t\tname: file.name,\n\t\t\t\tcid: result.cid,\n\t\t\t\tsize: result.size,\n\t\t\t\tcreated_at: result.createdAt.toISOString(),\n\t\t\t\tnumber_of_files: 1,\n\t\t\t\tmime_type: file.type || \"application/octet-stream\",\n\t\t\t\tgroup_id: null,\n\t\t\t\tkeyvalues: keyvalues || options?.metadata?.keyvalues || {},\n\t\t\t\tvectorized: false,\n\t\t\t\tnetwork: \"public\",\n\t\t\t};\n\t\t});\n\t}\n\n\tfileArray(\n\t\tfiles: File[],\n\t\toptions?: UploadOptions,\n\t): UploadBuilder<UploadResponse> {\n\t\treturn new UploadBuilderImpl(this.pinner, async (name, keyvalues) => {\n\t\t\tconst operation = await this.pinner.uploadDirectory(files, {\n\t\t\t\tname: name || options?.metadata?.name,\n\t\t\t\tkeyvalues: keyvalues || options?.metadata?.keyvalues,\n\t\t\t});\n\t\t\tconst result = await operation.result;\n\n\t\t\treturn {\n\t\t\t\tid: result.cid,\n\t\t\t\tname: name || options?.metadata?.name || \"directory\",\n\t\t\t\tcid: result.cid,\n\t\t\t\tsize: result.size,\n\t\t\t\tcreated_at: result.createdAt.toISOString(),\n\t\t\t\tnumber_of_files: files.length,\n\t\t\t\tmime_type: \"application/octet-stream\",\n\t\t\t\tgroup_id: null,\n\t\t\t\tkeyvalues: keyvalues || options?.metadata?.keyvalues || {},\n\t\t\t\tvectorized: false,\n\t\t\t\tnetwork: \"public\",\n\t\t\t};\n\t\t});\n\t}\n\n\tbase64(\n\t\tbase64String: string,\n\t\toptions?: UploadOptions,\n\t): UploadBuilder<UploadResponse> {\n\t\treturn new UploadBuilderImpl(this.pinner, async (name, keyvalues) => {\n\t\t\t// Convert base64 to file\n\t\t\tconst binaryString = atob(base64String);\n\t\t\tconst bytes = new Uint8Array(binaryString.length);\n\t\t\tfor (let i = 0; i < binaryString.length; i++) {\n\t\t\t\tbytes[i] = binaryString.charCodeAt(i);\n\t\t\t}\n\t\t\tconst blob = new Blob([bytes], {\n\t\t\t\ttype: \"application/octet-stream\",\n\t\t\t});\n\t\t\tconst file = new File(\n\t\t\t\t[blob],\n\t\t\t\tname || options?.metadata?.name || \"file.bin\",\n\t\t\t\t{ type: \"application/octet-stream\" },\n\t\t\t);\n\n\t\t\tconst result = await this.pinner.uploadAndWait(file, {\n\t\t\t\tname: name || options?.metadata?.name,\n\t\t\t\tkeyvalues: keyvalues || options?.metadata?.keyvalues,\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tid: result.cid,\n\t\t\t\tname: file.name,\n\t\t\t\tcid: result.cid,\n\t\t\t\tsize: result.size,\n\t\t\t\tcreated_at: result.createdAt.toISOString(),\n\t\t\t\tnumber_of_files: 1,\n\t\t\t\tmime_type: \"application/octet-stream\",\n\t\t\t\tgroup_id: null,\n\t\t\t\tkeyvalues: keyvalues || options?.metadata?.keyvalues || {},\n\t\t\t\tvectorized: false,\n\t\t\t\tnetwork: \"public\",\n\t\t\t};\n\t\t});\n\t}\n\n\turl(url: string, options?: UploadOptions): UploadBuilder<UploadResponse> {\n\t\treturn new UploadBuilderImpl(this.pinner, async () => {\n\t\t\tnotSupported(\"URL upload\");\n\t\t});\n\t}\n\n\tjson(data: object, options?: UploadOptions): UploadBuilder<UploadResponse> {\n\t\treturn new UploadBuilderImpl(this.pinner, async (name, keyvalues) => {\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\tname || options?.metadata?.name || \"data.json\",\n\t\t\t\t{ type: \"application/json\" },\n\t\t\t);\n\n\t\t\tconst result = await this.pinner.uploadAndWait(file, {\n\t\t\t\tname: name || options?.metadata?.name,\n\t\t\t\tkeyvalues: keyvalues || options?.metadata?.keyvalues,\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tid: result.cid,\n\t\t\t\tname: file.name,\n\t\t\t\tcid: result.cid,\n\t\t\t\tsize: result.size,\n\t\t\t\tcreated_at: result.createdAt.toISOString(),\n\t\t\t\tnumber_of_files: 1,\n\t\t\t\tmime_type: \"application/json\",\n\t\t\t\tgroup_id: null,\n\t\t\t\tkeyvalues: keyvalues || options?.metadata?.keyvalues || {},\n\t\t\t\tvectorized: false,\n\t\t\t\tnetwork: \"public\",\n\t\t\t};\n\t\t});\n\t}\n\n\tcid(cid: string, options?: UploadCIDOptions): UploadBuilder<PinByCIDResponse> {\n\t\treturn new UploadBuilderImpl(this.pinner, async () => {\n\t\t\tconst cidObj = parseCID(cid);\n\t\t\tconst generator = await this.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\treturn {\n\t\t\t\tid: cid,\n\t\t\t\tcid: cid,\n\t\t\t\tdate_queued: new Date().toISOString(),\n\t\t\t\tname: options?.metadata?.name || \"\",\n\t\t\t\tstatus: \"pinned\",\n\t\t\t\tkeyvalues: options?.metadata?.keyvalues || null,\n\t\t\t\thost_nodes: null,\n\t\t\t\tgroup_id: options?.groupId || null,\n\t\t\t};\n\t\t});\n\t}\n\n\tasync createSignedURL(\n\t\toptions: SignedUploadUrlOptions,\n\t): Promise<string> {\n\t\tnotSupported(\"Signed upload URLs\");\n\t}\n}\n\n/**\n * Implementation of PrivateUpload\n */\nclass PrivateUploadImpl implements PrivateUpload {\n\tconstructor(\n\t\tprivate pinner: Pinner,\n\t\tprivate config?: PinataConfig,\n\t) {}\n\n\tfile(file: File, options?: UploadOptions): UploadBuilder<UploadResponse> {\n\t\treturn new UploadBuilderImpl(this.pinner, async () => {\n\t\t\tnotSupported(\"Private upload\");\n\t\t});\n\t}\n\n\tfileArray(\n\t\tfiles: File[],\n\t\toptions?: UploadOptions,\n\t): UploadBuilder<UploadResponse> {\n\t\treturn new UploadBuilderImpl(this.pinner, async () => {\n\t\t\tnotSupported(\"Private upload\");\n\t\t});\n\t}\n\n\tbase64(\n\t\tbase64String: string,\n\t\toptions?: UploadOptions,\n\t): UploadBuilder<UploadResponse> {\n\t\treturn new UploadBuilderImpl(this.pinner, async () => {\n\t\t\tnotSupported(\"Private upload\");\n\t\t});\n\t}\n\n\turl(url: string, options?: UploadOptions): UploadBuilder<UploadResponse> {\n\t\treturn new UploadBuilderImpl(this.pinner, async () => {\n\t\t\tnotSupported(\"Private upload\");\n\t\t});\n\t}\n\n\tjson(data: object, options?: UploadOptions): UploadBuilder<UploadResponse> {\n\t\treturn new UploadBuilderImpl(this.pinner, async () => {\n\t\t\tnotSupported(\"Private upload\");\n\t\t});\n\t}\n\n\tcid(cid: string, options?: UploadCIDOptions): UploadBuilder<PinByCIDResponse> {\n\t\treturn new UploadBuilderImpl(this.pinner, async () => {\n\t\t\tnotSupported(\"Private upload\");\n\t\t});\n\t}\n\n\tasync createSignedURL(\n\t\toptions: SignedUploadUrlOptions,\n\t): Promise<string> {\n\t\tnotSupported(\"Private upload\");\n\t}\n}\n\n/**\n * Implementation of PublicFiles\n */\nclass PublicFilesImpl implements PublicFiles {\n\tconstructor(\n\t\tprivate pinner: Pinner,\n\t\tprivate config?: PinataConfig,\n\t) {}\n\n\tlist(): FilterFiles {\n\t\treturn new FilterFilesImpl(this.pinner, \"public\");\n\t}\n\n\tasync get(id: string): Promise<FileListItem> {\n\t\tconst cidObj = parseCID(id);\n\t\tconst pin = await this.pinner.getPinStatus(cidObj);\n\n\t\treturn {\n\t\t\tid: pin.cid.toString(),\n\t\t\tname: pin.name || null,\n\t\t\tcid: pin.cid.toString(),\n\t\t\tsize: pin.size || 0,\n\t\t\tnumber_of_files: 1,\n\t\t\tmime_type: \"application/octet-stream\",\n\t\t\tkeyvalues: pin.metadata || {},\n\t\t\tgroup_id: null,\n\t\t\tcreated_at: pin.created.toISOString(),\n\t\t};\n\t}\n\n\tasync delete(files: string[]): Promise<DeleteResponse[]> {\n\t\tconst results: DeleteResponse[] = [];\n\t\tfor (const file of files) {\n\t\t\tawait this.pinner.unpin(file);\n\t\t\tresults.push({ id: file, status: \"deleted\" });\n\t\t}\n\t\treturn results;\n\t}\n\n\tasync update(options: UpdateFileOptions): Promise<FileListItem> {\n\t\tawait this.pinner.setPinMetadata(options.id, options.keyvalues || {});\n\n\t\tconst pin = await this.pinner.getPinStatus(parseCID(options.id));\n\t\treturn {\n\t\t\tid: pin.cid.toString(),\n\t\t\tname: pin.name || null,\n\t\t\tcid: pin.cid.toString(),\n\t\t\tsize: pin.size || 0,\n\t\t\tnumber_of_files: 1,\n\t\t\tmime_type: \"application/octet-stream\",\n\t\t\tkeyvalues: pin.metadata || {},\n\t\t\tgroup_id: null,\n\t\t\tcreated_at: pin.created.toISOString(),\n\t\t};\n\t}\n\n\tasync addSwap(options: SwapCidOptions): Promise<SwapCidResponse> {\n\t\tnotSupported(\"Swap CID\");\n\t}\n\n\tasync getSwapHistory(\n\t\toptions: SwapHistoryOptions,\n\t): Promise<SwapCidResponse[]> {\n\t\treturn [];\n\t}\n\n\tasync deleteSwap(cid: string): Promise<string> {\n\t\tnotSupported(\"Swap CID\");\n\t}\n\n\tqueue(): FilterQueue {\n\t\treturn new FilterQueueImpl(this.pinner);\n\t}\n\n\tasync deletePinRequest(requestId: string): Promise<string> {\n\t\t// Delete pin by request ID (not CID)\n\t\tawait this.pinner.unpinByRequestId(requestId);\n\t\treturn requestId;\n\t}\n}\n\n/**\n * Implementation of PrivateFiles\n */\nclass PrivateFilesImpl implements PrivateFiles {\n\tconstructor(\n\t\tprivate pinner: Pinner,\n\t\tprivate config?: PinataConfig,\n\t) {}\n\n\tlist(): FilterFiles {\n\t\tnotSupported(\"Private files\");\n\t}\n\n\tasync get(id: string): Promise<FileListItem> {\n\t\tnotSupported(\"Private files\");\n\t}\n\n\tasync delete(files: string[]): Promise<DeleteResponse[]> {\n\t\tnotSupported(\"Private files\");\n\t}\n\n\tasync update(options: UpdateFileOptions): Promise<FileListItem> {\n\t\tnotSupported(\"Private files\");\n\t}\n\n\tasync addSwap(options: SwapCidOptions): Promise<SwapCidResponse> {\n\t\tnotSupported(\"Private files\");\n\t}\n\n\tasync getSwapHistory(\n\t\toptions: SwapHistoryOptions,\n\t): Promise<SwapCidResponse[]> {\n\t\tnotSupported(\"Private files\");\n\t}\n\n\tasync deleteSwap(cid: string): Promise<string> {\n\t\tnotSupported(\"Private files\");\n\t}\n\n\tqueue(): FilterQueue {\n\t\tnotSupported(\"Private files\");\n\t}\n\n\tasync deletePinRequest(requestId: string): Promise<string> {\n\t\tnotSupported(\"Private files\");\n\t}\n}\n\n/**\n * Implementation of PublicGateways\n */\nclass PublicGatewaysImpl implements PublicGateways {\n\tconstructor(\n\t\tprivate pinner: Pinner,\n\t\tprivate config?: PinataConfig,\n\t) {}\n\n\tget(cid: string): any {\n\t\t// Return an object that can be used to fetch CID\n\t\treturn {\n\t\t\tcid,\n\t\t\tgateway: this.config?.pinataGateway || DEFAULT_GATEWAY,\n\t\t\turl: `${this.config?.pinataGateway || DEFAULT_GATEWAY}/ipfs/${cid}`,\n\t\t};\n\t}\n\n\tasync convert(\n\t\turl: string,\n\t\tgatewayPrefix?: string,\n\t): Promise<string> {\n\t\t// Convert IPFS URL to gateway URL\n\t\tconst gateway = gatewayPrefix || this.config?.pinataGateway || DEFAULT_GATEWAY;\n\t\treturn url.replace(\"ipfs://\", `${gateway}/ipfs/`);\n\t}\n}\n\n/**\n * Implementation of PrivateGateways\n */\nclass PrivateGatewaysImpl implements PrivateGateways {\n\tconstructor(\n\t\tprivate pinner: Pinner,\n\t\tprivate config?: PinataConfig,\n\t) {}\n\n\tget(cid: string): any {\n\t\tnotSupported(\"Private gateways\");\n\t}\n\n\tcreateAccessLink(options: AccessLinkOptions): any {\n\t\tnotSupported(\"Private gateways\");\n\t}\n}\n\n/**\n * Implementation of PublicGroups\n */\nclass PublicGroupsImpl implements PublicGroups {\n\tconstructor(\n\t\tprivate pinner: Pinner,\n\t\tprivate config?: PinataConfig,\n\t) {}\n\n\tasync create(options: GroupOptions): Promise<GroupResponseItem> {\n\t\tnotSupported(\"Groups\");\n\t}\n\n\tlist(): FilterGroups {\n\t\treturn new FilterGroupsImpl(this.pinner, \"public\");\n\t}\n\n\tasync get(options: GetGroupOptions): Promise<GroupResponseItem> {\n\t\tnotSupported(\"Groups\");\n\t}\n\n\tasync addFiles(\n\t\toptions: GroupCIDOptions,\n\t): Promise<UpdateGroupFilesResponse[]> {\n\t\tnotSupported(\"Groups\");\n\t}\n\n\tasync removeFiles(\n\t\toptions: GroupCIDOptions,\n\t): Promise<UpdateGroupFilesResponse[]> {\n\t\tnotSupported(\"Groups\");\n\t}\n\n\tasync update(options: UpdateGroupOptions): Promise<GroupResponseItem> {\n\t\tnotSupported(\"Groups\");\n\t}\n\n\tasync delete(options: GetGroupOptions): Promise<string> {\n\t\tnotSupported(\"Groups\");\n\t}\n}\n\n/**\n * Implementation of PrivateGroups\n */\nclass PrivateGroupsImpl implements PrivateGroups {\n\tconstructor(\n\t\tprivate pinner: Pinner,\n\t\tprivate config?: PinataConfig,\n\t) {}\n\n\tasync create(options: GroupOptions): Promise<GroupResponseItem> {\n\t\tnotSupported(\"Private groups\");\n\t}\n\n\tlist(): FilterGroups {\n\t\tnotSupported(\"Private groups\");\n\t}\n\n\tasync get(options: GetGroupOptions): Promise<GroupResponseItem> {\n\t\tnotSupported(\"Private groups\");\n\t}\n\n\tasync addFiles(\n\t\toptions: GroupCIDOptions,\n\t): Promise<UpdateGroupFilesResponse[]> {\n\t\tnotSupported(\"Private groups\");\n\t}\n\n\tasync removeFiles(\n\t\toptions: GroupCIDOptions,\n\t): Promise<UpdateGroupFilesResponse[]> {\n\t\tnotSupported(\"Private groups\");\n\t}\n\n\tasync update(options: UpdateGroupOptions): Promise<GroupResponseItem> {\n\t\tnotSupported(\"Private groups\");\n\t}\n\n\tasync delete(options: GetGroupOptions): Promise<string> {\n\t\tnotSupported(\"Private groups\");\n\t}\n}\n\n/**\n * Implementation of Analytics\n */\nclass AnalyticsImpl implements Analytics {\n\tasync requests(query: TopAnalyticsQuery): Promise<TopAnalyticsResponse> {\n\t\t// Pinner doesn't support analytics\n\t\treturn {\n\t\t\tdata: [],\n\t\t};\n\t}\n\n\tasync bandwidth(\n\t\tquery: TimeIntervalAnalyticsQuery,\n\t): Promise<TimeIntervalAnalyticsResponse> {\n\t\t// Pinner doesn't support analytics\n\t\treturn {\n\t\t\ttotal_requests: 0,\n\t\t\ttotal_bandwidth: 0,\n\t\t\ttime_periods: [],\n\t\t};\n\t}\n}\n\n/**\n * Create Pinata Adapter\n *\n * @param pinner - Pinner client instance\n * @param config - Pinata configuration\n * @returns PinataAdapter\n */\nexport function pinataAdapter(\n\tpinner: Pinner,\n\tconfig?: PinataConfig,\n): PinataAdapter {\n\tconst effectiveConfig: PinataConfig = config || {};\n\n\treturn {\n\t\tconfig: effectiveConfig,\n\t\tupdateConfig(newConfig: PinataConfig): void {\n\t\t\tObject.assign(effectiveConfig, newConfig);\n\t\t},\n\n\t\tupload: {\n\t\t\tpublic: new PublicUploadImpl(pinner, effectiveConfig),\n\t\t\tprivate: new PrivateUploadImpl(pinner, effectiveConfig),\n\t\t},\n\n\t\tfiles: {\n\t\t\tpublic: new PublicFilesImpl(pinner, effectiveConfig),\n\t\t\tprivate: new PrivateFilesImpl(pinner, effectiveConfig),\n\t\t},\n\n\t\tgateways: {\n\t\t\tpublic: new PublicGatewaysImpl(pinner, effectiveConfig),\n\t\t\tprivate: new PrivateGatewaysImpl(pinner, effectiveConfig),\n\t\t},\n\n\t\tgroups: {\n\t\t\tpublic: new PublicGroupsImpl(pinner, effectiveConfig),\n\t\t\tprivate: new PrivateGroupsImpl(pinner, effectiveConfig),\n\t\t},\n\n\t\tanalytics: new AnalyticsImpl(),\n\t};\n}\n\n// Re-export interface\nexport type { PinataAdapter } from \"./adapter-interface\";\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"adapter.js","names":[],"sources":["../../../../../src/adapters/pinata/v2/adapter.ts"],"sourcesContent":["/**\n * Pinata SDK 2.x Adapter Implementation\n * Provides compatibility with Pinata SDK 2.x API\n *\n * Source: https://github.com/PinataCloud/pinata/commit/cdc0c06116aaadaf7c4b287a2673cd23b6ba1125\n * - src/core/pinataSDK.ts\n * - src/core/types/index.ts\n * - src/core/classes/index.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\tUploadCIDOptions,\n\tPinByCIDResponse,\n\tSignedUploadUrlOptions,\n\tFileListItem,\n\tFileListQuery,\n\tFileListResponse,\n\tUpdateFileOptions,\n\tDeleteResponse,\n\tPinQueueQuery,\n\tPinQueueResponse,\n\tSwapCidOptions,\n\tSwapCidResponse,\n\tSwapHistoryOptions,\n\tAccessLinkOptions,\n\tGroupOptions,\n\tUpdateGroupOptions,\n\tGetGroupOptions,\n\tGroupResponseItem,\n\tGroupCIDOptions,\n\tUpdateGroupFilesResponse,\n\tTopAnalyticsQuery,\n\tTopAnalyticsResponse,\n\tTimeIntervalAnalyticsQuery,\n\tTimeIntervalAnalyticsResponse,\n} from \"./types\";\nimport type {\n\tPinataAdapter,\n\tPublicUpload,\n\tPrivateUpload,\n\tPublicFiles,\n\tPrivateFiles,\n\tPublicGateways,\n\tPrivateGateways,\n\tPublicGroups,\n\tPrivateGroups,\n\tAnalytics,\n\tUploadBuilder,\n\tFilterFiles,\n\tFilterQueue,\n\tFilterGroups,\n} from \"./adapter-interface\";\nimport { parseCID, notSupported } from \"../shared/utils\";\nimport { DEFAULT_GATEWAY } from \"@/types/constants\";\n\n/**\n * Implementation of UploadBuilder\n */\nclass UploadBuilderImpl<TResult> implements UploadBuilder<TResult> {\n\tprivate _name?: string;\n\tprivate _keyvalues?: Record<string, string>;\n\n\tconstructor(\n\t\tprivate pinner: Pinner,\n\t\tprivate executeFn: (name?: string, keyvalues?: Record<string, string>) => Promise<TResult>,\n\t) {}\n\n\tname(name: string): this {\n\t\tthis._name = name;\n\t\treturn this;\n\t}\n\n\tkeyvalues(keyvalues: Record<string, string>): this {\n\t\tthis._keyvalues = keyvalues;\n\t\treturn this;\n\t}\n\n\tasync execute(): Promise<TResult> {\n\t\treturn this.executeFn(this._name, this._keyvalues);\n\t}\n}\n\n/**\n * Implementation of FilterFiles\n */\nclass FilterFilesImpl implements FilterFiles {\n\tprivate query: FileListQuery = {};\n\tprivate currentPageToken: string | undefined;\n\tprivate privacy: \"public\" | \"private\";\n\n\tconstructor(\n\t\tprivate pinner: Pinner,\n\t\tprivacy: \"public\" | \"private\",\n\t) {\n\t\tthis.privacy = privacy;\n\t}\n\n\tname(name: string): FilterFiles {\n\t\tthis.query.name = name;\n\t\treturn this;\n\t}\n\n\tgroup(group: string): FilterFiles {\n\t\tthis.query.group = group;\n\t\treturn this;\n\t}\n\n\tcid(cid: string): FilterFiles {\n\t\tthis.query.cid = cid;\n\t\treturn this;\n\t}\n\n\tmimeType(mimeType: string): FilterFiles {\n\t\tthis.query.mimeType = mimeType;\n\t\treturn this;\n\t}\n\n\torder(order: \"ASC\" | \"DESC\"): FilterFiles {\n\t\tthis.query.order = order;\n\t\treturn this;\n\t}\n\n\tlimit(limit: number): FilterFiles {\n\t\tthis.query.limit = limit;\n\t\treturn this;\n\t}\n\n\tcidPending(cidPending: boolean): FilterFiles {\n\t\tthis.query.cidPending = cidPending;\n\t\treturn this;\n\t}\n\n\tkeyvalues(keyvalues: Record<string, string>): FilterFiles {\n\t\tthis.query.metadata = keyvalues;\n\t\treturn this;\n\t}\n\n\tnoGroup(noGroup: boolean): FilterFiles {\n\t\tthis.query.noGroup = noGroup;\n\t\treturn this;\n\t}\n\n\tpageToken(pageToken: string): FilterFiles {\n\t\tthis.query.pageToken = Number.parseInt(pageToken, 10);\n\t\treturn this;\n\t}\n\n\tthen(\n\t\tonfulfilled?: ((value: FileListResponse) => any) | null,\n\t\tonrejected?: ((reason: any) => any) | null,\n\t): Promise<any> {\n\t\treturn this.fetchPage().then(onfulfilled, onrejected);\n\t}\n\n\tprivate async fetchPage(): Promise<FileListResponse> {\n\t\tconst pins = await this.pinner.listPins({\n\t\t\tlimit: this.query.limit,\n\t\t});\n\n\t\treturn {\n\t\t\tfiles: pins.map((pin) => ({\n\t\t\t\tid: pin.cid.toString(),\n\t\t\t\tname: pin.name || null,\n\t\t\t\tcid: pin.cid.toString(),\n\t\t\t\tsize: pin.size || 0,\n\t\t\t\tnumber_of_files: 1,\n\t\t\t\tmime_type: \"application/octet-stream\",\n\t\t\t\tkeyvalues: pin.metadata || {},\n\t\t\t\tgroup_id: null,\n\t\t\t\tcreated_at: pin.created.toISOString(),\n\t\t\t})),\n\t\t\tnext_page_token: this.currentPageToken || \"\",\n\t\t};\n\t}\n\n\tasync *[Symbol.asyncIterator](): AsyncGenerator<FileListItem, void, unknown> {\n\t\twhile (true) {\n\t\t\tconst items = await this.fetchPage();\n\t\t\tfor (const item of items.files) {\n\t\t\t\tyield item;\n\t\t\t}\n\t\t\tif (!this.currentPageToken) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tasync all(): Promise<FileListItem[]> {\n\t\tconst allItems: FileListItem[] = [];\n\t\tfor await (const item of this) {\n\t\t\tallItems.push(item);\n\t\t}\n\t\treturn allItems;\n\t}\n}\n\n/**\n * Implementation of FilterQueue\n */\nclass FilterQueueImpl implements FilterQueue {\n\tprivate query: PinQueueQuery = {};\n\tprivate currentPageToken: string | undefined;\n\n\tconstructor(private pinner: Pinner) {}\n\n\tcid(cid: string): FilterQueue {\n\t\tthis.query.cid = cid;\n\t\treturn this;\n\t}\n\n\tstatus(\n\t\tstatus:\n\t\t\t| \"prechecking\"\n\t\t\t| \"retrieving\"\n\t\t\t| \"expired\"\n\t\t\t| \"backfilled\"\n\t\t\t| \"over_free_limit\"\n\t\t\t| \"over_max_size\"\n\t\t\t| \"invalid_object\"\n\t\t\t| \"bad_host_node\",\n\t): FilterQueue {\n\t\tthis.query.status = status;\n\t\treturn this;\n\t}\n\n\tpageLimit(limit: number): FilterQueue {\n\t\tthis.query.limit = limit;\n\t\treturn this;\n\t}\n\n\tpageToken(pageToken: string): FilterQueue {\n\t\tthis.query.pageToken = pageToken;\n\t\treturn this;\n\t}\n\n\tsort(sort: \"ASC\" | \"DSC\"): FilterQueue {\n\t\tthis.query.sort = sort;\n\t\treturn this;\n\t}\n\n\tthen(\n\t\tonfulfilled?: ((value: PinQueueResponse) => any) | null,\n\t\tonrejected?: ((reason: any) => any) | null,\n\t): Promise<any> {\n\t\treturn this.fetchPage().then(onfulfilled, onrejected);\n\t}\n\n\tprivate async fetchPage(): Promise<PinQueueResponse> {\n\t\tconst pins = await this.pinner.listPins({\n\t\t\tlimit: this.query.limit,\n\t\t});\n\n\t\treturn {\n\t\t\tjobs: pins.map((pin) => ({\n\t\t\t\tid: pin.cid.toString(),\n\t\t\t\tcid: pin.cid.toString(),\n\t\t\t\tdate_queued: pin.created.toISOString(),\n\t\t\t\tname: pin.name || \"\",\n\t\t\t\tstatus: pin.status || \"pinned\",\n\t\t\t\tkeyvalues: pin.metadata || {},\n\t\t\t\thost_nodes: [],\n\t\t\t\tpin_policy: {\n\t\t\t\t\tregions: [],\n\t\t\t\t\tversion: 1,\n\t\t\t\t},\n\t\t\t})),\n\t\t\tnext_page_token: this.currentPageToken || \"\",\n\t\t};\n\t}\n\n\tasync *[Symbol.asyncIterator](): AsyncGenerator<\n\t\timport(\"./types\").PinQueueItem,\n\t\tvoid,\n\t\tunknown\n\t> {\n\t\twhile (true) {\n\t\t\tconst items = await this.fetchPage();\n\t\t\tfor (const item of items.jobs) {\n\t\t\t\tyield item;\n\t\t\t}\n\t\t\tif (!this.currentPageToken) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tasync all(): Promise<import(\"./types\").PinQueueItem[]> {\n\t\tconst allItems: import(\"./types\").PinQueueItem[] = [];\n\t\tfor await (const item of this) {\n\t\t\tallItems.push(item);\n\t\t}\n\t\treturn allItems;\n\t}\n}\n\n/**\n * Implementation of FilterGroups\n */\nclass FilterGroupsImpl implements FilterGroups {\n\tprivate currentPageToken: string | undefined;\n\tprivate privacy: \"public\" | \"private\";\n\n\tconstructor(private pinner: Pinner, privacy: \"public\" | \"private\") {\n\t\tthis.privacy = privacy;\n\t}\n\n\tname(name: string): FilterGroups {\n\t\t// Pinner doesn't support groups, return empty\n\t\treturn this;\n\t}\n\n\tlimit(limit: number): FilterGroups {\n\t\treturn this;\n\t}\n\n\tpageToken(pageToken: string): FilterGroups {\n\t\tthis.currentPageToken = pageToken;\n\t\treturn this;\n\t}\n\n\tisPublic(isPublic: boolean): FilterGroups {\n\t\treturn this;\n\t}\n\n\tthen(\n\t\tonfulfilled?: ((value: import(\"./types\").GroupListResponse) => any) | null,\n\t\tonrejected?: ((reason: any) => any) | null,\n\t): Promise<any> {\n\t\treturn this.fetchPage().then(onfulfilled, onrejected);\n\t}\n\n\tprivate async fetchPage(): Promise<import(\"./types\").GroupListResponse> {\n\t\t// Pinner doesn't support groups\n\t\treturn {\n\t\t\tgroups: [],\n\t\t\tnext_page_token: this.currentPageToken || \"\",\n\t\t};\n\t}\n\n\tasync *[Symbol.asyncIterator](): AsyncGenerator<GroupResponseItem, void, unknown> {\n\t\tconst items = await this.fetchPage();\n\t\tfor (const item of items.groups) {\n\t\t\tyield item;\n\t\t}\n\t}\n\n\tasync all(): Promise<GroupResponseItem[]> {\n\t\tconst allItems: GroupResponseItem[] = [];\n\t\tfor await (const item of this) {\n\t\t\tallItems.push(item);\n\t\t}\n\t\treturn allItems;\n\t}\n}\n\n/**\n * Implementation of PublicUpload\n */\nclass PublicUploadImpl implements PublicUpload {\n\tconstructor(\n\t\tprivate pinner: Pinner,\n\t\tprivate config?: PinataConfig,\n\t) {}\n\n\tfile(file: File, options?: UploadOptions): UploadBuilder<UploadResponse> {\n\t\treturn new UploadBuilderImpl(this.pinner, async (name, keyvalues) => {\n\t\t\tconst result = await this.pinner.uploadAndWait(file, {\n\t\t\t\tname: name || options?.metadata?.name,\n\t\t\t\tkeyvalues: keyvalues || options?.metadata?.keyvalues,\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tid: result.cid,\n\t\t\t\tname: file.name,\n\t\t\t\tcid: result.cid,\n\t\t\t\tsize: result.size,\n\t\t\t\tcreated_at: result.createdAt.toISOString(),\n\t\t\t\tnumber_of_files: 1,\n\t\t\t\tmime_type: file.type || \"application/octet-stream\",\n\t\t\t\tgroup_id: null,\n\t\t\t\tkeyvalues: keyvalues || options?.metadata?.keyvalues || {},\n\t\t\t\tvectorized: false,\n\t\t\t\tnetwork: \"public\",\n\t\t\t};\n\t\t});\n\t}\n\n\tfileArray(\n\t\tfiles: File[],\n\t\toptions?: UploadOptions,\n\t): UploadBuilder<UploadResponse> {\n\t\treturn new UploadBuilderImpl(this.pinner, async (name, keyvalues) => {\n\t\t\tconst operation = await this.pinner.uploadDirectory(files, {\n\t\t\t\tname: name || options?.metadata?.name,\n\t\t\t\tkeyvalues: keyvalues || options?.metadata?.keyvalues,\n\t\t\t});\n\t\t\tconst result = await operation.result;\n\n\t\t\treturn {\n\t\t\t\tid: result.cid,\n\t\t\t\tname: name || options?.metadata?.name || \"directory\",\n\t\t\t\tcid: result.cid,\n\t\t\t\tsize: result.size,\n\t\t\t\tcreated_at: result.createdAt.toISOString(),\n\t\t\t\tnumber_of_files: files.length,\n\t\t\t\tmime_type: \"application/octet-stream\",\n\t\t\t\tgroup_id: null,\n\t\t\t\tkeyvalues: keyvalues || options?.metadata?.keyvalues || {},\n\t\t\t\tvectorized: false,\n\t\t\t\tnetwork: \"public\",\n\t\t\t};\n\t\t});\n\t}\n\n\tbase64(\n\t\tbase64String: string,\n\t\toptions?: UploadOptions,\n\t): UploadBuilder<UploadResponse> {\n\t\treturn new UploadBuilderImpl(this.pinner, async (name, keyvalues) => {\n\t\t\t// Convert base64 to file\n\t\t\tconst binaryString = atob(base64String);\n\t\t\tconst bytes = new Uint8Array(binaryString.length);\n\t\t\tfor (let i = 0; i < binaryString.length; i++) {\n\t\t\t\tbytes[i] = binaryString.charCodeAt(i);\n\t\t\t}\n\t\t\tconst blob = new Blob([bytes], {\n\t\t\t\ttype: \"application/octet-stream\",\n\t\t\t});\n\t\t\tconst file = new File(\n\t\t\t\t[blob],\n\t\t\t\tname || options?.metadata?.name || \"file.bin\",\n\t\t\t\t{ type: \"application/octet-stream\" },\n\t\t\t);\n\n\t\t\tconst result = await this.pinner.uploadAndWait(file, {\n\t\t\t\tname: name || options?.metadata?.name,\n\t\t\t\tkeyvalues: keyvalues || options?.metadata?.keyvalues,\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tid: result.cid,\n\t\t\t\tname: file.name,\n\t\t\t\tcid: result.cid,\n\t\t\t\tsize: result.size,\n\t\t\t\tcreated_at: result.createdAt.toISOString(),\n\t\t\t\tnumber_of_files: 1,\n\t\t\t\tmime_type: \"application/octet-stream\",\n\t\t\t\tgroup_id: null,\n\t\t\t\tkeyvalues: keyvalues || options?.metadata?.keyvalues || {},\n\t\t\t\tvectorized: false,\n\t\t\t\tnetwork: \"public\",\n\t\t\t};\n\t\t});\n\t}\n\n\turl(url: string, options?: UploadOptions): UploadBuilder<UploadResponse> {\n\t\treturn new UploadBuilderImpl(this.pinner, async () => {\n\t\t\tnotSupported(\"URL upload\");\n\t\t});\n\t}\n\n\tjson(data: object, options?: UploadOptions): UploadBuilder<UploadResponse> {\n\t\treturn new UploadBuilderImpl(this.pinner, async (name, keyvalues) => {\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\tname || options?.metadata?.name || \"data.json\",\n\t\t\t\t{ type: \"application/json\" },\n\t\t\t);\n\n\t\t\tconst result = await this.pinner.uploadAndWait(file, {\n\t\t\t\tname: name || options?.metadata?.name,\n\t\t\t\tkeyvalues: keyvalues || options?.metadata?.keyvalues,\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tid: result.cid,\n\t\t\t\tname: file.name,\n\t\t\t\tcid: result.cid,\n\t\t\t\tsize: result.size,\n\t\t\t\tcreated_at: result.createdAt.toISOString(),\n\t\t\t\tnumber_of_files: 1,\n\t\t\t\tmime_type: \"application/json\",\n\t\t\t\tgroup_id: null,\n\t\t\t\tkeyvalues: keyvalues || options?.metadata?.keyvalues || {},\n\t\t\t\tvectorized: false,\n\t\t\t\tnetwork: \"public\",\n\t\t\t};\n\t\t});\n\t}\n\n\tcid(cid: string, options?: UploadCIDOptions): UploadBuilder<PinByCIDResponse> {\n\t\treturn new UploadBuilderImpl(this.pinner, async () => {\n\t\t\tconst cidObj = parseCID(cid);\n\t\t\tconst generator = await this.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\treturn {\n\t\t\t\tid: cid,\n\t\t\t\tcid: cid,\n\t\t\t\tdate_queued: new Date().toISOString(),\n\t\t\t\tname: options?.metadata?.name || \"\",\n\t\t\t\tstatus: \"pinned\",\n\t\t\t\tkeyvalues: options?.metadata?.keyvalues || null,\n\t\t\t\thost_nodes: null,\n\t\t\t\tgroup_id: options?.groupId || null,\n\t\t\t};\n\t\t});\n\t}\n\n\tasync createSignedURL(\n\t\toptions: SignedUploadUrlOptions,\n\t): Promise<string> {\n\t\tnotSupported(\"Signed upload URLs\");\n\t}\n}\n\n/**\n * Implementation of PrivateUpload\n */\nclass PrivateUploadImpl implements PrivateUpload {\n\tconstructor(\n\t\tprivate pinner: Pinner,\n\t\tprivate config?: PinataConfig,\n\t) {}\n\n\tfile(file: File, options?: UploadOptions): UploadBuilder<UploadResponse> {\n\t\treturn new UploadBuilderImpl(this.pinner, async () => {\n\t\t\tnotSupported(\"Private upload\");\n\t\t});\n\t}\n\n\tfileArray(\n\t\tfiles: File[],\n\t\toptions?: UploadOptions,\n\t): UploadBuilder<UploadResponse> {\n\t\treturn new UploadBuilderImpl(this.pinner, async () => {\n\t\t\tnotSupported(\"Private upload\");\n\t\t});\n\t}\n\n\tbase64(\n\t\tbase64String: string,\n\t\toptions?: UploadOptions,\n\t): UploadBuilder<UploadResponse> {\n\t\treturn new UploadBuilderImpl(this.pinner, async () => {\n\t\t\tnotSupported(\"Private upload\");\n\t\t});\n\t}\n\n\turl(url: string, options?: UploadOptions): UploadBuilder<UploadResponse> {\n\t\treturn new UploadBuilderImpl(this.pinner, async () => {\n\t\t\tnotSupported(\"Private upload\");\n\t\t});\n\t}\n\n\tjson(data: object, options?: UploadOptions): UploadBuilder<UploadResponse> {\n\t\treturn new UploadBuilderImpl(this.pinner, async () => {\n\t\t\tnotSupported(\"Private upload\");\n\t\t});\n\t}\n\n\tcid(cid: string, options?: UploadCIDOptions): UploadBuilder<PinByCIDResponse> {\n\t\treturn new UploadBuilderImpl(this.pinner, async () => {\n\t\t\tnotSupported(\"Private upload\");\n\t\t});\n\t}\n\n\tasync createSignedURL(\n\t\toptions: SignedUploadUrlOptions,\n\t): Promise<string> {\n\t\tnotSupported(\"Private upload\");\n\t}\n}\n\n/**\n * Implementation of PublicFiles\n */\nclass PublicFilesImpl implements PublicFiles {\n\tconstructor(\n\t\tprivate pinner: Pinner,\n\t\tprivate config?: PinataConfig,\n\t) {}\n\n\tlist(): FilterFiles {\n\t\treturn new FilterFilesImpl(this.pinner, \"public\");\n\t}\n\n\tasync get(id: string): Promise<FileListItem> {\n\t\tconst cidObj = parseCID(id);\n\t\tconst pin = await this.pinner.getPinStatus(cidObj);\n\n\t\treturn {\n\t\t\tid: pin.cid.toString(),\n\t\t\tname: pin.name || null,\n\t\t\tcid: pin.cid.toString(),\n\t\t\tsize: pin.size || 0,\n\t\t\tnumber_of_files: 1,\n\t\t\tmime_type: \"application/octet-stream\",\n\t\t\tkeyvalues: pin.metadata || {},\n\t\t\tgroup_id: null,\n\t\t\tcreated_at: pin.created.toISOString(),\n\t\t};\n\t}\n\n\tasync delete(files: string[]): Promise<DeleteResponse[]> {\n\t\tconst results: DeleteResponse[] = [];\n\t\tfor (const file of files) {\n\t\t\tawait this.pinner.unpin(file);\n\t\t\tresults.push({ id: file, status: \"deleted\" });\n\t\t}\n\t\treturn results;\n\t}\n\n\tasync update(options: UpdateFileOptions): Promise<FileListItem> {\n\t\tawait this.pinner.setPinMetadata(options.id, options.keyvalues || {});\n\n\t\tconst pin = await this.pinner.getPinStatus(parseCID(options.id));\n\t\treturn {\n\t\t\tid: pin.cid.toString(),\n\t\t\tname: pin.name || null,\n\t\t\tcid: pin.cid.toString(),\n\t\t\tsize: pin.size || 0,\n\t\t\tnumber_of_files: 1,\n\t\t\tmime_type: \"application/octet-stream\",\n\t\t\tkeyvalues: pin.metadata || {},\n\t\t\tgroup_id: null,\n\t\t\tcreated_at: pin.created.toISOString(),\n\t\t};\n\t}\n\n\tasync addSwap(options: SwapCidOptions): Promise<SwapCidResponse> {\n\t\tnotSupported(\"Swap CID\");\n\t}\n\n\tasync getSwapHistory(\n\t\toptions: SwapHistoryOptions,\n\t): Promise<SwapCidResponse[]> {\n\t\treturn [];\n\t}\n\n\tasync deleteSwap(cid: string): Promise<string> {\n\t\tnotSupported(\"Swap CID\");\n\t}\n\n\tqueue(): FilterQueue {\n\t\treturn new FilterQueueImpl(this.pinner);\n\t}\n\n\tasync deletePinRequest(requestId: string): Promise<string> {\n\t\t// Delete pin by request ID (not CID)\n\t\tawait this.pinner.unpinByRequestId(requestId);\n\t\treturn requestId;\n\t}\n}\n\n/**\n * Implementation of PrivateFiles\n */\nclass PrivateFilesImpl implements PrivateFiles {\n\tconstructor(\n\t\tprivate pinner: Pinner,\n\t\tprivate config?: PinataConfig,\n\t) {}\n\n\tlist(): FilterFiles {\n\t\tnotSupported(\"Private files\");\n\t}\n\n\tasync get(id: string): Promise<FileListItem> {\n\t\tnotSupported(\"Private files\");\n\t}\n\n\tasync delete(files: string[]): Promise<DeleteResponse[]> {\n\t\tnotSupported(\"Private files\");\n\t}\n\n\tasync update(options: UpdateFileOptions): Promise<FileListItem> {\n\t\tnotSupported(\"Private files\");\n\t}\n\n\tasync addSwap(options: SwapCidOptions): Promise<SwapCidResponse> {\n\t\tnotSupported(\"Private files\");\n\t}\n\n\tasync getSwapHistory(\n\t\toptions: SwapHistoryOptions,\n\t): Promise<SwapCidResponse[]> {\n\t\tnotSupported(\"Private files\");\n\t}\n\n\tasync deleteSwap(cid: string): Promise<string> {\n\t\tnotSupported(\"Private files\");\n\t}\n\n\tqueue(): FilterQueue {\n\t\tnotSupported(\"Private files\");\n\t}\n\n\tasync deletePinRequest(requestId: string): Promise<string> {\n\t\tnotSupported(\"Private files\");\n\t}\n}\n\n/**\n * Implementation of PublicGateways\n */\nclass PublicGatewaysImpl implements PublicGateways {\n\tconstructor(\n\t\tprivate pinner: Pinner,\n\t\tprivate config?: PinataConfig,\n\t) {}\n\n\tget(cid: string): any {\n\t\t// Return an object that can be used to fetch CID\n\t\treturn {\n\t\t\tcid,\n\t\t\tgateway: this.config?.pinataGateway || DEFAULT_GATEWAY,\n\t\t\turl: `${this.config?.pinataGateway || DEFAULT_GATEWAY}/ipfs/${cid}`,\n\t\t};\n\t}\n\n\tasync convert(\n\t\turl: string,\n\t\tgatewayPrefix?: string,\n\t): Promise<string> {\n\t\t// Convert IPFS URL to gateway URL\n\t\tconst gateway = gatewayPrefix || this.config?.pinataGateway || DEFAULT_GATEWAY;\n\t\treturn url.replace(\"ipfs://\", `${gateway}/ipfs/`);\n\t}\n}\n\n/**\n * Implementation of PrivateGateways\n */\nclass PrivateGatewaysImpl implements PrivateGateways {\n\tconstructor(\n\t\tprivate pinner: Pinner,\n\t\tprivate config?: PinataConfig,\n\t) {}\n\n\tget(cid: string): any {\n\t\tnotSupported(\"Private gateways\");\n\t}\n\n\tcreateAccessLink(options: AccessLinkOptions): any {\n\t\tnotSupported(\"Private gateways\");\n\t}\n}\n\n/**\n * Implementation of PublicGroups\n */\nclass PublicGroupsImpl implements PublicGroups {\n\tconstructor(\n\t\tprivate pinner: Pinner,\n\t\tprivate config?: PinataConfig,\n\t) {}\n\n\tasync create(options: GroupOptions): Promise<GroupResponseItem> {\n\t\tnotSupported(\"Groups\");\n\t}\n\n\tlist(): FilterGroups {\n\t\treturn new FilterGroupsImpl(this.pinner, \"public\");\n\t}\n\n\tasync get(options: GetGroupOptions): Promise<GroupResponseItem> {\n\t\tnotSupported(\"Groups\");\n\t}\n\n\tasync addFiles(\n\t\toptions: GroupCIDOptions,\n\t): Promise<UpdateGroupFilesResponse[]> {\n\t\tnotSupported(\"Groups\");\n\t}\n\n\tasync removeFiles(\n\t\toptions: GroupCIDOptions,\n\t): Promise<UpdateGroupFilesResponse[]> {\n\t\tnotSupported(\"Groups\");\n\t}\n\n\tasync update(options: UpdateGroupOptions): Promise<GroupResponseItem> {\n\t\tnotSupported(\"Groups\");\n\t}\n\n\tasync delete(options: GetGroupOptions): Promise<string> {\n\t\tnotSupported(\"Groups\");\n\t}\n}\n\n/**\n * Implementation of PrivateGroups\n */\nclass PrivateGroupsImpl implements PrivateGroups {\n\tconstructor(\n\t\tprivate pinner: Pinner,\n\t\tprivate config?: PinataConfig,\n\t) {}\n\n\tasync create(options: GroupOptions): Promise<GroupResponseItem> {\n\t\tnotSupported(\"Private groups\");\n\t}\n\n\tlist(): FilterGroups {\n\t\tnotSupported(\"Private groups\");\n\t}\n\n\tasync get(options: GetGroupOptions): Promise<GroupResponseItem> {\n\t\tnotSupported(\"Private groups\");\n\t}\n\n\tasync addFiles(\n\t\toptions: GroupCIDOptions,\n\t): Promise<UpdateGroupFilesResponse[]> {\n\t\tnotSupported(\"Private groups\");\n\t}\n\n\tasync removeFiles(\n\t\toptions: GroupCIDOptions,\n\t): Promise<UpdateGroupFilesResponse[]> {\n\t\tnotSupported(\"Private groups\");\n\t}\n\n\tasync update(options: UpdateGroupOptions): Promise<GroupResponseItem> {\n\t\tnotSupported(\"Private groups\");\n\t}\n\n\tasync delete(options: GetGroupOptions): Promise<string> {\n\t\tnotSupported(\"Private groups\");\n\t}\n}\n\n/**\n * Implementation of Analytics\n */\nclass AnalyticsImpl implements Analytics {\n\tasync requests(query: TopAnalyticsQuery): Promise<TopAnalyticsResponse> {\n\t\t// Pinner doesn't support analytics\n\t\treturn {\n\t\t\tdata: [],\n\t\t};\n\t}\n\n\tasync bandwidth(\n\t\tquery: TimeIntervalAnalyticsQuery,\n\t): Promise<TimeIntervalAnalyticsResponse> {\n\t\t// Pinner doesn't support analytics\n\t\treturn {\n\t\t\ttotal_requests: 0,\n\t\t\ttotal_bandwidth: 0,\n\t\t\ttime_periods: [],\n\t\t};\n\t}\n}\n\n/**\n * Create Pinata Adapter\n *\n * @param pinner - Pinner client instance\n * @param config - Pinata configuration\n * @returns PinataAdapter\n */\nexport function pinataAdapter(\n\tpinner: Pinner,\n\tconfig?: PinataConfig,\n): PinataAdapter {\n\tconst effectiveConfig: PinataConfig = config || {};\n\n\treturn {\n\t\tconfig: effectiveConfig,\n\t\tupdateConfig(newConfig: PinataConfig): void {\n\t\t\tObject.assign(effectiveConfig, newConfig);\n\t\t},\n\n\t\tupload: {\n\t\t\tpublic: new PublicUploadImpl(pinner, effectiveConfig),\n\t\t\tprivate: new PrivateUploadImpl(pinner, effectiveConfig),\n\t\t},\n\n\t\tfiles: {\n\t\t\tpublic: new PublicFilesImpl(pinner, effectiveConfig),\n\t\t\tprivate: new PrivateFilesImpl(pinner, effectiveConfig),\n\t\t},\n\n\t\tgateways: {\n\t\t\tpublic: new PublicGatewaysImpl(pinner, effectiveConfig),\n\t\t\tprivate: new PrivateGatewaysImpl(pinner, effectiveConfig),\n\t\t},\n\n\t\tgroups: {\n\t\t\tpublic: new PublicGroupsImpl(pinner, effectiveConfig),\n\t\t\tprivate: new PrivateGroupsImpl(pinner, effectiveConfig),\n\t\t},\n\n\t\tanalytics: new AnalyticsImpl(),\n\t};\n}\n\n// Re-export interface\nexport type { PinataAdapter } from \"./adapter-interface\";\n"],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
//#region src/api/generated/schemas/iPNSKeyListResponse.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Generated by orval v8.10.0 🍺
|
|
4
|
+
* Do not edit manually.
|
|
5
|
+
* Portal IPFS Plugin API
|
|
6
|
+
*
|
|
7
|
+
## Portal IPFS Plugin API
|
|
8
|
+
|
|
9
|
+
A comprehensive API for IPFS content management, including pinning services, file operations, IPNS key management, and website hosting.
|
|
10
|
+
|
|
11
|
+
### IPFS Pinning Service API Compatibility
|
|
12
|
+
|
|
13
|
+
This API is fully compatible with the [IPFS Pinning Service API specification](https://github.com/ipfs/pinning-services-api-spec), an implementation-agnostic API standard for pinning service providers. This ensures interoperability with existing IPFS pinning clients and tools.
|
|
14
|
+
|
|
15
|
+
### Features
|
|
16
|
+
|
|
17
|
+
- **Pinning**: Add, list, update, and remove pinned content
|
|
18
|
+
- **Content**: Upload files, retrieve IPFS content, and manage metadata
|
|
19
|
+
- **IPNS**: Manage IPNS keys and publish content
|
|
20
|
+
- **Files**: Browse and manage pinned files with directory navigation
|
|
21
|
+
- **Websites**: Create and manage website hosting with DNS and SSL automation
|
|
22
|
+
|
|
23
|
+
### Authentication
|
|
24
|
+
|
|
25
|
+
All API endpoints require authentication using JWT tokens obtained from the Portal authentication service.
|
|
26
|
+
|
|
27
|
+
### Rate Limiting
|
|
28
|
+
|
|
29
|
+
API requests are rate-limited based on user account tier. See Portal documentation for current limits.
|
|
30
|
+
|
|
31
|
+
### Documentation
|
|
32
|
+
|
|
33
|
+
For detailed API usage examples and integration guides, visit the Portal documentation website.
|
|
34
|
+
|
|
35
|
+
* OpenAPI spec version: 1.0.0
|
|
36
|
+
*/
|
|
37
|
+
interface IPNSKeyListResponse {
|
|
38
|
+
created: string;
|
|
39
|
+
id: number;
|
|
40
|
+
ipns_name: string;
|
|
41
|
+
name: string;
|
|
42
|
+
peer_id: string;
|
|
43
|
+
}
|
|
44
|
+
//#endregion
|
|
45
|
+
export { IPNSKeyListResponse };
|
|
46
|
+
//# sourceMappingURL=iPNSKeyListResponse.d.ts.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { IPNSKeyListResponse } from "./iPNSKeyListResponse.js";
|
|
2
|
+
|
|
3
|
+
//#region src/api/generated/schemas/iPNSKeyListResponseResponse.d.ts
|
|
4
|
+
interface IPNSKeyListResponseResponse {
|
|
5
|
+
data: IPNSKeyListResponse[];
|
|
6
|
+
total: number;
|
|
7
|
+
}
|
|
8
|
+
//#endregion
|
|
9
|
+
export { IPNSKeyListResponseResponse };
|
|
10
|
+
//# sourceMappingURL=iPNSKeyListResponseResponse.d.ts.map
|