@lumeweb/pinner 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/README.md +35 -18
  2. package/dist/cjs/adapters/pinata/index.cjs +6 -3
  3. package/dist/cjs/adapters/pinata/legacy/adapter.cjs +83 -0
  4. package/dist/cjs/adapters/pinata/legacy/adapter.cjs.map +1 -0
  5. package/dist/cjs/adapters/pinata/legacy/adapter.d.cts +74 -0
  6. package/dist/cjs/adapters/pinata/legacy/index.cjs +1 -0
  7. package/dist/cjs/adapters/pinata/shared/index.cjs +1 -0
  8. package/dist/cjs/adapters/pinata/shared/types.d.cts +218 -0
  9. package/dist/cjs/adapters/pinata/shared/utils.cjs +83 -0
  10. package/dist/cjs/adapters/pinata/shared/utils.cjs.map +1 -0
  11. package/dist/cjs/adapters/pinata/v2/adapter-interface.d.cts +198 -0
  12. package/dist/cjs/adapters/pinata/v2/adapter.cjs +636 -0
  13. package/dist/cjs/adapters/pinata/v2/adapter.cjs.map +1 -0
  14. package/dist/cjs/adapters/pinata/v2/adapter.d.cts +17 -0
  15. package/dist/cjs/adapters/pinata/v2/index.cjs +1 -0
  16. package/dist/cjs/adapters/pinata/v2/types.d.cts +308 -0
  17. package/dist/cjs/index.cjs +3 -1
  18. package/dist/cjs/index.d.cts +5 -3
  19. package/dist/cjs/pin/client.cjs +5 -3
  20. package/dist/cjs/pin/client.cjs.map +1 -1
  21. package/dist/cjs/pinner.cjs +6 -0
  22. package/dist/cjs/pinner.cjs.map +1 -1
  23. package/dist/cjs/pinner.d.cts +4 -0
  24. package/dist/cjs/types/constants.cjs +6 -1
  25. package/dist/cjs/types/constants.cjs.map +1 -1
  26. package/dist/cjs/types/pin.d.cts +4 -0
  27. package/dist/esm/adapters/pinata/index.d.ts +7 -4
  28. package/dist/esm/adapters/pinata/index.js +6 -3
  29. package/dist/esm/adapters/pinata/legacy/adapter.d.ts +74 -0
  30. package/dist/esm/adapters/pinata/legacy/adapter.js +83 -0
  31. package/dist/esm/adapters/pinata/legacy/adapter.js.map +1 -0
  32. package/dist/esm/adapters/pinata/legacy/index.d.ts +1 -0
  33. package/dist/esm/adapters/pinata/legacy/index.js +1 -0
  34. package/dist/esm/adapters/pinata/shared/index.d.ts +2 -0
  35. package/dist/esm/adapters/pinata/shared/index.js +1 -0
  36. package/dist/esm/adapters/pinata/shared/types.d.ts +218 -0
  37. package/dist/esm/adapters/pinata/shared/utils.d.ts +1 -0
  38. package/dist/esm/adapters/pinata/shared/utils.js +78 -0
  39. package/dist/esm/adapters/pinata/shared/utils.js.map +1 -0
  40. package/dist/esm/adapters/pinata/v2/adapter-interface.d.ts +198 -0
  41. package/dist/esm/adapters/pinata/v2/adapter.d.ts +17 -0
  42. package/dist/esm/adapters/pinata/v2/adapter.js +636 -0
  43. package/dist/esm/adapters/pinata/v2/adapter.js.map +1 -0
  44. package/dist/esm/adapters/pinata/v2/index.d.ts +3 -0
  45. package/dist/esm/adapters/pinata/v2/index.js +1 -0
  46. package/dist/esm/adapters/pinata/v2/types.d.ts +308 -0
  47. package/dist/esm/index.d.ts +5 -3
  48. package/dist/esm/index.js +3 -2
  49. package/dist/esm/pin/client.js +5 -3
  50. package/dist/esm/pin/client.js.map +1 -1
  51. package/dist/esm/pinner.d.ts +4 -0
  52. package/dist/esm/pinner.js +6 -0
  53. package/dist/esm/pinner.js.map +1 -1
  54. package/dist/esm/types/constants.js +6 -2
  55. package/dist/esm/types/constants.js.map +1 -1
  56. package/dist/esm/types/pin.d.ts +4 -0
  57. package/package.json +3 -3
  58. package/dist/cjs/adapters/pinata/adapter.cjs +0 -88
  59. package/dist/cjs/adapters/pinata/adapter.cjs.map +0 -1
  60. package/dist/cjs/adapters/pinata/adapter.d.cts +0 -35
  61. package/dist/cjs/adapters/pinata/builder.cjs +0 -194
  62. package/dist/cjs/adapters/pinata/builder.cjs.map +0 -1
  63. package/dist/cjs/adapters/pinata/list-builder.cjs +0 -52
  64. package/dist/cjs/adapters/pinata/list-builder.cjs.map +0 -1
  65. package/dist/cjs/types/pinata.d.cts +0 -99
  66. package/dist/esm/adapters/pinata/adapter.d.ts +0 -35
  67. package/dist/esm/adapters/pinata/adapter.js +0 -87
  68. package/dist/esm/adapters/pinata/adapter.js.map +0 -1
  69. package/dist/esm/adapters/pinata/builder.d.ts +0 -1
  70. package/dist/esm/adapters/pinata/builder.js +0 -187
  71. package/dist/esm/adapters/pinata/builder.js.map +0 -1
  72. package/dist/esm/adapters/pinata/list-builder.d.ts +0 -1
  73. package/dist/esm/adapters/pinata/list-builder.js +0 -51
  74. package/dist/esm/adapters/pinata/list-builder.js.map +0 -1
  75. package/dist/esm/types/pinata.d.ts +0 -99
@@ -1,35 +0,0 @@
1
- import { Pinner } from "../../pinner.cjs";
2
- import { PinByHashOptions, PinataFile, PinataListBuilder, PinataPin, PinataUploadBuilder, PinataUploadResult } from "../../types/pinata.cjs";
3
-
4
- //#region src/adapters/pinata/adapter.d.ts
5
-
6
- /**
7
- * Creates a Pinata-compatible adapter for the Pinner client.
8
- * This allows users to migrate from Pinata SDK with minimal code changes.
9
- */
10
- interface PinataAdapter {
11
- upload: {
12
- file(file: File): PinataUploadBuilder<PinataUploadResult>;
13
- fileArray(files: File[]): PinataUploadBuilder<PinataUploadResult>;
14
- json(data: object): PinataUploadBuilder<PinataUploadResult>;
15
- base64(base64String: string): PinataUploadBuilder<PinataUploadResult>;
16
- url(urlString: string): PinataUploadBuilder<PinataUploadResult>;
17
- cid(cidString: string): PinataUploadBuilder<void>;
18
- };
19
- pinByHash(cid: string, options?: PinByHashOptions): Promise<void>;
20
- unpin(cid: string): Promise<void>;
21
- getPinStatus(cid: string): Promise<PinataPin>;
22
- isPinned(cid: string): Promise<boolean>;
23
- setPinMetadata(cid: string, metadata: Record<string, string>): Promise<void>;
24
- files: {
25
- list(): PinataListBuilder<PinataFile[]>;
26
- get(id: string): Promise<PinataFile>;
27
- };
28
- }
29
- /**
30
- * Creates a Pinata-compatible adapter for the Pinner client.
31
- */
32
- declare function pinataAdapter(pinner: Pinner): PinataAdapter;
33
- //#endregion
34
- export { pinataAdapter };
35
- //# sourceMappingURL=adapter.d.cts.map
@@ -1,194 +0,0 @@
1
- const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
- const require_json = require('../../encoder/json.cjs');
3
- const require_base64 = require('../../encoder/base64.cjs');
4
- const require_url = require('../../encoder/url.cjs');
5
- require('../../encoder/index.cjs');
6
- const require_validation = require('../../utils/validation.cjs');
7
- let multiformats_cid = require("multiformats/cid");
8
-
9
- //#region src/adapters/pinata/builder.ts
10
- /**
11
- * Error wrapper for Pinata adapter operations.
12
- */
13
- var PinataAdapterError = class extends Error {
14
- code;
15
- cause;
16
- constructor(message, code, cause) {
17
- super(message);
18
- this.name = "PinataAdapterError";
19
- this.code = code;
20
- this.cause = cause;
21
- }
22
- };
23
- /**
24
- * Base upload builder with common name/keyvalues functionality.
25
- */
26
- var BaseUploadBuilder = class {
27
- _name;
28
- _keyvalues;
29
- constructor(pinner) {
30
- this.pinner = pinner;
31
- }
32
- name(name) {
33
- this._name = name;
34
- return this;
35
- }
36
- keyvalues(kv) {
37
- this._keyvalues = kv;
38
- return this;
39
- }
40
- toUploadResult(result) {
41
- return {
42
- IpfsHash: result.cid,
43
- PinSize: result.size,
44
- Timestamp: result.createdAt.toISOString(),
45
- isDuplicate: false
46
- };
47
- }
48
- };
49
- /**
50
- * File upload builder.
51
- */
52
- var FileUploadBuilder = class extends BaseUploadBuilder {
53
- constructor(pinner, file) {
54
- super(pinner);
55
- this.file = file;
56
- }
57
- async execute() {
58
- const result = await this.pinner.uploadAndWait(this.file, {
59
- name: this._name,
60
- keyvalues: this._keyvalues
61
- });
62
- return this.toUploadResult(result);
63
- }
64
- };
65
- /**
66
- * File array upload builder.
67
- */
68
- var FileArrayUploadBuilder = class extends BaseUploadBuilder {
69
- constructor(pinner, files) {
70
- super(pinner);
71
- this.files = files;
72
- if (files.length === 0) throw new PinataAdapterError("Cannot upload empty file array", "EMPTY_FILE_ARRAY");
73
- }
74
- async execute() {
75
- try {
76
- const result = await (await this.pinner.uploadDirectory(this.files, {
77
- name: this._name,
78
- keyvalues: this._keyvalues
79
- })).result;
80
- return this.toUploadResult(result);
81
- } catch (error) {
82
- if (error instanceof Error) throw new PinataAdapterError(`File array upload failed: ${error.message}`, "UPLOAD_FAILED", error);
83
- throw error;
84
- }
85
- }
86
- };
87
- /**
88
- * Encoded upload builder - handles JSON, Base64, and URL uploads using encoders.
89
- */
90
- var EncodedUploadBuilder = class extends BaseUploadBuilder {
91
- constructor(pinner, encoderFn) {
92
- super(pinner);
93
- this.encoderFn = encoderFn;
94
- }
95
- async execute() {
96
- try {
97
- const encoded = await this.encoderFn(this._name, this._keyvalues);
98
- const result = await this.pinner.uploadAndWait(encoded.file, encoded.options);
99
- return this.toUploadResult(result);
100
- } catch (error) {
101
- if (error instanceof Error) throw new PinataAdapterError(`Upload failed: ${error.message}`, "UPLOAD_FAILED", error);
102
- throw error;
103
- }
104
- }
105
- };
106
- /**
107
- * CID upload builder (pin by CID).
108
- */
109
- var CidUploadBuilder = class {
110
- _name;
111
- _keyvalues;
112
- constructor(pinner, cidString) {
113
- this.pinner = pinner;
114
- this.cidString = cidString;
115
- }
116
- name(name) {
117
- this._name = name;
118
- return this;
119
- }
120
- keyvalues(kv) {
121
- this._keyvalues = kv;
122
- return this;
123
- }
124
- async execute() {
125
- try {
126
- const cid = multiformats_cid.CID.parse(this.cidString);
127
- const generator = await this.pinner.pinByHash(cid, {
128
- name: this._name,
129
- metadata: this._keyvalues
130
- });
131
- for await (const _ of generator);
132
- } catch (error) {
133
- if (error instanceof Error) throw new PinataAdapterError(`CID upload failed: ${error.message}`, "INVALID_CID", error);
134
- throw error;
135
- }
136
- }
137
- };
138
- /**
139
- * Create a file upload builder.
140
- */
141
- function createUploadBuilder(pinner, file) {
142
- return new FileUploadBuilder(pinner, file);
143
- }
144
- /**
145
- * Create a file array upload builder.
146
- */
147
- function createFileArrayUploadBuilder(pinner, files) {
148
- return new FileArrayUploadBuilder(pinner, files);
149
- }
150
- /**
151
- * Create a JSON upload builder.
152
- */
153
- function createJsonUploadBuilder(pinner, data) {
154
- return new EncodedUploadBuilder(pinner, (name, keyvalues) => require_json.jsonToFile(data, {
155
- name,
156
- keyvalues
157
- }));
158
- }
159
- /**
160
- * Create a base64 upload builder.
161
- */
162
- function createBase64UploadBuilder(pinner, base64String) {
163
- return new EncodedUploadBuilder(pinner, (name, keyvalues) => require_base64.base64ToFile(base64String, {
164
- name,
165
- keyvalues
166
- }));
167
- }
168
- /**
169
- * Create a URL upload builder.
170
- */
171
- function createUrlUploadBuilder(pinner, urlString, options) {
172
- require_validation.validateUrl(urlString);
173
- return new EncodedUploadBuilder(pinner, (name, keyvalues) => require_url.urlToFile(urlString, {
174
- name,
175
- keyvalues,
176
- fetch: options?.fetch
177
- }));
178
- }
179
- /**
180
- * Create a CID upload builder.
181
- */
182
- function createCidUploadBuilder(pinner, cidString) {
183
- return new CidUploadBuilder(pinner, cidString);
184
- }
185
-
186
- //#endregion
187
- exports.PinataAdapterError = PinataAdapterError;
188
- exports.createBase64UploadBuilder = createBase64UploadBuilder;
189
- exports.createCidUploadBuilder = createCidUploadBuilder;
190
- exports.createFileArrayUploadBuilder = createFileArrayUploadBuilder;
191
- exports.createJsonUploadBuilder = createJsonUploadBuilder;
192
- exports.createUploadBuilder = createUploadBuilder;
193
- exports.createUrlUploadBuilder = createUrlUploadBuilder;
194
- //# sourceMappingURL=builder.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"builder.cjs","names":["CID","jsonToFile","base64ToFile","urlToFile"],"sources":["../../../../src/adapters/pinata/builder.ts"],"sourcesContent":["import type { Pinner } from \"@/pinner\";\nimport type {\n PinataUploadBuilder,\n PinataUploadResult,\n UrlUploadBuilderOptions,\n} from \"@/types/pinata\";\nimport type { UploadOptions } from \"@/encoder/types\";\nimport { CID } from \"multiformats/cid\";\nimport { base64ToFile, jsonToFile, urlToFile } from \"@/encoder\";\nimport { validateUrl } from \"@/utils/validation\";\n\n/**\n * Error wrapper for Pinata adapter operations.\n */\nexport class PinataAdapterError extends Error {\n code: \"UPLOAD_FAILED\" | \"EMPTY_FILE_ARRAY\" | \"INVALID_CID\";\n cause?: Error;\n\n constructor(\n message: string,\n code: PinataAdapterError[\"code\"],\n cause?: Error,\n ) {\n super(message);\n this.name = \"PinataAdapterError\";\n this.code = code;\n this.cause = cause;\n }\n}\n\n/**\n * Base upload builder with common name/keyvalues functionality.\n */\nabstract class BaseUploadBuilder<\n TResult,\n> implements PinataUploadBuilder<TResult> {\n protected _name?: string;\n protected _keyvalues?: Record<string, string>;\n\n constructor(protected pinner: Pinner) {}\n\n name(name: string): this {\n this._name = name;\n return this;\n }\n\n keyvalues(kv: Record<string, string>): this {\n this._keyvalues = kv;\n return this;\n }\n\n abstract execute(): Promise<TResult>;\n\n protected toUploadResult(result: {\n cid: string;\n size: number;\n createdAt: Date;\n }): PinataUploadResult {\n return {\n IpfsHash: result.cid,\n PinSize: result.size,\n Timestamp: result.createdAt.toISOString(),\n isDuplicate: false,\n };\n }\n}\n\n/**\n * File upload builder.\n */\nclass FileUploadBuilder extends BaseUploadBuilder<PinataUploadResult> {\n constructor(\n pinner: Pinner,\n private file: File,\n ) {\n super(pinner);\n }\n\n async execute(): Promise<PinataUploadResult> {\n const result = await this.pinner.uploadAndWait(this.file, {\n name: this._name,\n keyvalues: this._keyvalues,\n });\n return this.toUploadResult(result);\n }\n}\n\n/**\n * File array upload builder.\n */\nclass FileArrayUploadBuilder extends BaseUploadBuilder<PinataUploadResult> {\n constructor(\n pinner: Pinner,\n private files: File[],\n ) {\n super(pinner);\n if (files.length === 0) {\n throw new PinataAdapterError(\n \"Cannot upload empty file array\",\n \"EMPTY_FILE_ARRAY\",\n );\n }\n }\n\n async execute(): Promise<PinataUploadResult> {\n try {\n const operation = await this.pinner.uploadDirectory(this.files, {\n name: this._name,\n keyvalues: this._keyvalues,\n });\n const result = await operation.result;\n return this.toUploadResult(result);\n } catch (error) {\n if (error instanceof Error) {\n throw new PinataAdapterError(\n `File array upload failed: ${error.message}`,\n \"UPLOAD_FAILED\",\n error,\n );\n }\n throw error;\n }\n }\n}\n\n/**\n * Encoded upload builder - handles JSON, Base64, and URL uploads using encoders.\n */\nclass EncodedUploadBuilder extends BaseUploadBuilder<PinataUploadResult> {\n constructor(\n pinner: Pinner,\n private encoderFn: (\n name?: string,\n keyvalues?: Record<string, string>,\n ) => Promise<{ file: File; options: UploadOptions }>,\n ) {\n super(pinner);\n }\n\n async execute(): Promise<PinataUploadResult> {\n try {\n const encoded = await this.encoderFn(this._name, this._keyvalues);\n const result = await this.pinner.uploadAndWait(\n encoded.file,\n encoded.options,\n );\n return this.toUploadResult(result);\n } catch (error) {\n if (error instanceof Error) {\n throw new PinataAdapterError(\n `Upload failed: ${error.message}`,\n \"UPLOAD_FAILED\",\n error,\n );\n }\n throw error;\n }\n }\n}\n\n/**\n * CID upload builder (pin by CID).\n */\nclass CidUploadBuilder implements PinataUploadBuilder<void> {\n private _name?: string;\n private _keyvalues?: Record<string, string>;\n\n constructor(\n private pinner: Pinner,\n private cidString: string,\n ) {}\n\n name(name: string): this {\n this._name = name;\n return this;\n }\n\n keyvalues(kv: Record<string, string>): this {\n this._keyvalues = kv;\n return this;\n }\n\n async execute(): Promise<void> {\n try {\n const cid = CID.parse(this.cidString);\n const generator = await this.pinner.pinByHash(cid, {\n name: this._name,\n metadata: this._keyvalues,\n });\n for await (const _ of generator) {\n // Pin operation in progress\n }\n } catch (error) {\n if (error instanceof Error) {\n throw new PinataAdapterError(\n `CID upload failed: ${error.message}`,\n \"INVALID_CID\",\n error,\n );\n }\n throw error;\n }\n }\n}\n\n/**\n * Create a file upload builder.\n */\nexport function createUploadBuilder(\n pinner: Pinner,\n file: File,\n): PinataUploadBuilder<PinataUploadResult> {\n return new FileUploadBuilder(pinner, file);\n}\n\n/**\n * Create a file array upload builder.\n */\nexport function createFileArrayUploadBuilder(\n pinner: Pinner,\n files: File[],\n): PinataUploadBuilder<PinataUploadResult> {\n return new FileArrayUploadBuilder(pinner, files);\n}\n\n/**\n * Create a JSON upload builder.\n */\nexport function createJsonUploadBuilder(\n pinner: Pinner,\n data: object,\n): PinataUploadBuilder<PinataUploadResult> {\n return new EncodedUploadBuilder(pinner, (name, keyvalues) =>\n jsonToFile(data, { name, keyvalues }),\n );\n}\n\n/**\n * Create a base64 upload builder.\n */\nexport function createBase64UploadBuilder(\n pinner: Pinner,\n base64String: string,\n): PinataUploadBuilder<PinataUploadResult> {\n return new EncodedUploadBuilder(pinner, (name, keyvalues) =>\n base64ToFile(base64String, { name, keyvalues }),\n );\n}\n\n/**\n * Create a URL upload builder.\n */\nexport function createUrlUploadBuilder(\n pinner: Pinner,\n urlString: string,\n options?: UrlUploadBuilderOptions,\n): PinataUploadBuilder<PinataUploadResult> {\n // Validate URL to prevent SSRF attacks\n validateUrl(urlString);\n\n return new EncodedUploadBuilder(pinner, (name, keyvalues) =>\n urlToFile(urlString, { name, keyvalues, fetch: options?.fetch }),\n );\n}\n\n/**\n * Create a CID upload builder.\n */\nexport function createCidUploadBuilder(\n pinner: Pinner,\n cidString: string,\n): PinataUploadBuilder<void> {\n return new CidUploadBuilder(pinner, cidString);\n}\n"],"mappings":"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"}
@@ -1,52 +0,0 @@
1
-
2
- //#region src/adapters/pinata/list-builder.ts
3
- /**
4
- * List builder for listing pins.
5
- *
6
- * Note: .pageToken() provides Pinata SDK API compatibility for easier migration.
7
- * The token is passed through to the underlying IPFS Pinning Service cursor parameter.
8
- * The server handles the actual pagination logic according to the IPFS Pinning Service spec.
9
- */
10
- var PinataListBuilderImpl = class {
11
- _limit;
12
- _pageToken;
13
- _offset;
14
- constructor(pinner) {
15
- this.pinner = pinner;
16
- }
17
- limit(limit) {
18
- this._limit = limit;
19
- return this;
20
- }
21
- offset(offset) {
22
- this._offset = offset;
23
- return this;
24
- }
25
- pageToken(pageToken) {
26
- this._pageToken = pageToken;
27
- return this;
28
- }
29
- async execute() {
30
- const options = {};
31
- if (this._limit !== void 0) options.limit = this._limit;
32
- if (this._pageToken !== void 0) options.cursor = this._pageToken;
33
- return (await this.pinner.listPins(options)).map((pin) => ({
34
- id: pin.cid.toString(),
35
- ipfsPinHash: pin.cid.toString(),
36
- size: pin.size || 0,
37
- name: pin.name || "",
38
- cid: pin.cid.toString(),
39
- createdAt: pin.created.toISOString()
40
- }));
41
- }
42
- };
43
- /**
44
- * Create a list builder.
45
- */
46
- function createListBuilder(pinner) {
47
- return new PinataListBuilderImpl(pinner);
48
- }
49
-
50
- //#endregion
51
- exports.createListBuilder = createListBuilder;
52
- //# sourceMappingURL=list-builder.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list-builder.cjs","names":[],"sources":["../../../../src/adapters/pinata/list-builder.ts"],"sourcesContent":["import type { Pinner } from \"@/pinner\";\nimport type { PinataFile, PinataListBuilder } from \"@/types/pinata\";\nimport type { RemoteLsOptions } from \"@/types/pin\";\n\n/**\n * List builder for listing pins.\n *\n * Note: .pageToken() provides Pinata SDK API compatibility for easier migration.\n * The token is passed through to the underlying IPFS Pinning Service cursor parameter.\n * The server handles the actual pagination logic according to the IPFS Pinning Service spec.\n */\nclass PinataListBuilderImpl implements PinataListBuilder<PinataFile[]> {\n private _limit?: number;\n private _pageToken?: string;\n private _offset?: number;\n\n constructor(private pinner: Pinner) {}\n\n limit(limit: number): this {\n this._limit = limit;\n return this;\n }\n\n offset(offset: number): this {\n this._offset = offset;\n return this;\n }\n\n pageToken(pageToken: string): this {\n this._pageToken = pageToken;\n return this;\n }\n\n async execute(): Promise<PinataFile[]> {\n const options: RemoteLsOptions = {};\n\n if (this._limit !== undefined) {\n options.limit = this._limit;\n }\n\n if (this._pageToken !== undefined) {\n options.cursor = this._pageToken;\n }\n\n const remotePins = await this.pinner.listPins(options);\n\n return remotePins.map((pin) => ({\n id: pin.cid.toString(),\n ipfsPinHash: pin.cid.toString(),\n size: pin.size || 0,\n name: pin.name || \"\",\n cid: pin.cid.toString(),\n createdAt: pin.created.toISOString(),\n }));\n }\n}\n\n/**\n * Create a list builder.\n */\nexport function createListBuilder(\n pinner: Pinner,\n): PinataListBuilder<PinataFile[]> {\n return new PinataListBuilderImpl(pinner);\n}\n"],"mappings":";;;;;;;;;AAWA,IAAM,wBAAN,MAAuE;CACrE,AAAQ;CACR,AAAQ;CACR,AAAQ;CAER,YAAY,AAAQ,QAAgB;EAAhB;;CAEpB,MAAM,OAAqB;AACzB,OAAK,SAAS;AACd,SAAO;;CAGT,OAAO,QAAsB;AAC3B,OAAK,UAAU;AACf,SAAO;;CAGT,UAAU,WAAyB;AACjC,OAAK,aAAa;AAClB,SAAO;;CAGT,MAAM,UAAiC;EACrC,MAAM,UAA2B,EAAE;AAEnC,MAAI,KAAK,WAAW,OAClB,SAAQ,QAAQ,KAAK;AAGvB,MAAI,KAAK,eAAe,OACtB,SAAQ,SAAS,KAAK;AAKxB,UAFmB,MAAM,KAAK,OAAO,SAAS,QAAQ,EAEpC,KAAK,SAAS;GAC9B,IAAI,IAAI,IAAI,UAAU;GACtB,aAAa,IAAI,IAAI,UAAU;GAC/B,MAAM,IAAI,QAAQ;GAClB,MAAM,IAAI,QAAQ;GAClB,KAAK,IAAI,IAAI,UAAU;GACvB,WAAW,IAAI,QAAQ,aAAa;GACrC,EAAE;;;;;;AAOP,SAAgB,kBACd,QACiC;AACjC,QAAO,IAAI,sBAAsB,OAAO"}
@@ -1,99 +0,0 @@
1
- //#region src/types/pinata.d.ts
2
- interface PinataUploadResult {
3
- /**
4
- * IPFS CID.
5
- */
6
- IpfsHash: string;
7
- /**
8
- * Pin size in bytes.
9
- */
10
- PinSize: number;
11
- /**
12
- * Timestamp of upload.
13
- */
14
- Timestamp: string;
15
- /**
16
- * Whether content was pinned.
17
- */
18
- isDuplicate: boolean;
19
- }
20
- /**
21
- * Base metadata options - shared across upload and pin operations.
22
- */
23
- interface PinataMetadataOptions {
24
- name?: string;
25
- keyvalues?: Record<string, string>;
26
- }
27
- /**
28
- * Generic upload builder interface.
29
- * All upload methods return this builder with different result types.
30
- */
31
- interface PinataUploadBuilder<T = PinataUploadResult> {
32
- name(name: string): this;
33
- keyvalues(kv: Record<string, string>): this;
34
- execute(): Promise<T>;
35
- }
36
- /**
37
- * Options for pinning content by CID.
38
- */
39
- interface PinByHashOptions extends PinataMetadataOptions {}
40
- /**
41
- * Pin information (Pinata SDK format).
42
- * Note: This differs from RemotePin (@ipfs-shipyard/pinning-service-client format).
43
- */
44
- interface PinataPin {
45
- id: string;
46
- ipfsPinHash: string;
47
- size: number;
48
- userId: string;
49
- datePinned: string;
50
- dateUnpinned?: string;
51
- metadata?: PinataMetadata;
52
- }
53
- /**
54
- * File information (Pinata SDK format).
55
- */
56
- interface PinataFile {
57
- id: string;
58
- ipfsPinHash: string;
59
- size: number;
60
- name: string;
61
- cid: string;
62
- createdAt: string;
63
- }
64
- /**
65
- * List builder interface for listing pins.
66
- * Uses cursor-based pagination compatible with Pinata SDK.
67
- */
68
- interface PinataListBuilder<T = PinataFile[]> {
69
- limit(limit: number): this;
70
- pageToken(pageToken: string): this;
71
- execute(): Promise<T>;
72
- }
73
- /**
74
- * Pin metadata.
75
- */
76
- interface PinataMetadata extends PinataMetadataOptions {}
77
- /**
78
- * File information.
79
- */
80
- interface PinataFile {
81
- id: string;
82
- ipfsPinHash: string;
83
- size: number;
84
- name: string;
85
- mimeType?: string;
86
- cid: string;
87
- createdAt: string;
88
- }
89
- /**
90
- * Generic list builder interface.
91
- */
92
- interface PinataListBuilder<T> {
93
- limit(limit: number): this;
94
- offset(offset: number): this;
95
- execute(): Promise<T>;
96
- }
97
- //#endregion
98
- export { PinByHashOptions, PinataFile, PinataListBuilder, PinataPin, PinataUploadBuilder, PinataUploadResult };
99
- //# sourceMappingURL=pinata.d.cts.map
@@ -1,35 +0,0 @@
1
- import { Pinner } from "../../pinner.js";
2
- import { PinByHashOptions, PinataFile, PinataListBuilder, PinataPin, PinataUploadBuilder, PinataUploadResult } from "../../types/pinata.js";
3
-
4
- //#region src/adapters/pinata/adapter.d.ts
5
-
6
- /**
7
- * Creates a Pinata-compatible adapter for the Pinner client.
8
- * This allows users to migrate from Pinata SDK with minimal code changes.
9
- */
10
- interface PinataAdapter {
11
- upload: {
12
- file(file: File): PinataUploadBuilder<PinataUploadResult>;
13
- fileArray(files: File[]): PinataUploadBuilder<PinataUploadResult>;
14
- json(data: object): PinataUploadBuilder<PinataUploadResult>;
15
- base64(base64String: string): PinataUploadBuilder<PinataUploadResult>;
16
- url(urlString: string): PinataUploadBuilder<PinataUploadResult>;
17
- cid(cidString: string): PinataUploadBuilder<void>;
18
- };
19
- pinByHash(cid: string, options?: PinByHashOptions): Promise<void>;
20
- unpin(cid: string): Promise<void>;
21
- getPinStatus(cid: string): Promise<PinataPin>;
22
- isPinned(cid: string): Promise<boolean>;
23
- setPinMetadata(cid: string, metadata: Record<string, string>): Promise<void>;
24
- files: {
25
- list(): PinataListBuilder<PinataFile[]>;
26
- get(id: string): Promise<PinataFile>;
27
- };
28
- }
29
- /**
30
- * Creates a Pinata-compatible adapter for the Pinner client.
31
- */
32
- declare function pinataAdapter(pinner: Pinner): PinataAdapter;
33
- //#endregion
34
- export { PinataAdapter, pinataAdapter };
35
- //# sourceMappingURL=adapter.d.ts.map
@@ -1,87 +0,0 @@
1
- import { createBase64UploadBuilder, createCidUploadBuilder, createFileArrayUploadBuilder, createJsonUploadBuilder, createUploadBuilder, createUrlUploadBuilder } from "./builder.js";
2
- import { createListBuilder } from "./list-builder.js";
3
- import { CID } from "multiformats/cid";
4
-
5
- //#region src/adapters/pinata/adapter.ts
6
- /**
7
- * Creates a Pinata-compatible adapter for the Pinner client.
8
- */
9
- function pinataAdapter(pinner) {
10
- return {
11
- upload: {
12
- file(file) {
13
- return createUploadBuilder(pinner, file);
14
- },
15
- fileArray(files) {
16
- return createFileArrayUploadBuilder(pinner, files);
17
- },
18
- json(data) {
19
- return createJsonUploadBuilder(pinner, data);
20
- },
21
- base64(base64String) {
22
- return createBase64UploadBuilder(pinner, base64String);
23
- },
24
- url(urlString) {
25
- return createUrlUploadBuilder(pinner, urlString);
26
- },
27
- cid(cidString) {
28
- return createCidUploadBuilder(pinner, cidString);
29
- }
30
- },
31
- async pinByHash(cid, options) {
32
- const cidObj = CID.parse(cid);
33
- const generator = await pinner.pinByHash(cidObj, {
34
- name: options?.name,
35
- metadata: options?.keyvalues
36
- });
37
- for await (const _ of generator);
38
- },
39
- async unpin(cid) {
40
- await pinner.unpin(cid);
41
- },
42
- async getPinStatus(cid) {
43
- const cidObj = CID.parse(cid);
44
- const remotePin = await pinner.getPinStatus(cidObj);
45
- return {
46
- id: cidObj.toString(),
47
- ipfsPinHash: cidObj.toString(),
48
- size: remotePin.size || 0,
49
- userId: "",
50
- datePinned: remotePin.created.toISOString(),
51
- metadata: {
52
- name: remotePin.name,
53
- keyvalues: remotePin.metadata
54
- }
55
- };
56
- },
57
- async isPinned(cid) {
58
- const cidObj = CID.parse(cid);
59
- return pinner.isPinned(cidObj);
60
- },
61
- async setPinMetadata(cid, metadata) {
62
- const cidObj = CID.parse(cid);
63
- await pinner.setPinMetadata(cidObj, metadata);
64
- },
65
- files: {
66
- list() {
67
- return createListBuilder(pinner);
68
- },
69
- async get(id) {
70
- const pin = (await pinner.listPins()).find((p) => p.cid.toString() === id);
71
- if (!pin) throw new Error(`Pin not found: ${id}`);
72
- return {
73
- id: pin.cid.toString(),
74
- ipfsPinHash: pin.cid.toString(),
75
- size: pin.size || 0,
76
- name: pin.name || "",
77
- cid: pin.cid.toString(),
78
- createdAt: pin.created.toISOString()
79
- };
80
- }
81
- }
82
- };
83
- }
84
-
85
- //#endregion
86
- export { pinataAdapter };
87
- //# sourceMappingURL=adapter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"adapter.js","names":[],"sources":["../../../../src/adapters/pinata/adapter.ts"],"sourcesContent":["import type { Pinner } from \"@/pinner\";\nimport {\n createBase64UploadBuilder,\n createCidUploadBuilder,\n createFileArrayUploadBuilder,\n createJsonUploadBuilder,\n createUploadBuilder,\n createUrlUploadBuilder,\n} from \"./builder\";\nimport { createListBuilder } from \"./list-builder\";\nimport type {\n PinataFile,\n PinataListBuilder,\n PinataPin,\n PinataUploadBuilder,\n PinataUploadResult,\n PinByHashOptions,\n} from \"@/types/pinata\";\nimport { CID } from \"multiformats/cid\";\n\n/**\n * Creates a Pinata-compatible adapter for the Pinner client.\n * This allows users to migrate from Pinata SDK with minimal code changes.\n */\nexport interface PinataAdapter {\n upload: {\n file(file: File): PinataUploadBuilder<PinataUploadResult>;\n fileArray(files: File[]): PinataUploadBuilder<PinataUploadResult>;\n json(data: object): PinataUploadBuilder<PinataUploadResult>;\n base64(base64String: string): PinataUploadBuilder<PinataUploadResult>;\n url(urlString: string): PinataUploadBuilder<PinataUploadResult>;\n cid(cidString: string): PinataUploadBuilder<void>;\n };\n\n pinByHash(cid: string, options?: PinByHashOptions): Promise<void>;\n unpin(cid: string): Promise<void>;\n getPinStatus(cid: string): Promise<PinataPin>;\n isPinned(cid: string): Promise<boolean>;\n setPinMetadata(cid: string, metadata: Record<string, string>): Promise<void>;\n\n files: {\n list(): PinataListBuilder<PinataFile[]>;\n get(id: string): Promise<PinataFile>;\n };\n}\n\n/**\n * Creates a Pinata-compatible adapter for the Pinner client.\n */\nexport function pinataAdapter(pinner: Pinner): PinataAdapter {\n return {\n upload: {\n file(file: File): PinataUploadBuilder<PinataUploadResult> {\n return createUploadBuilder(pinner, file);\n },\n fileArray(files: File[]): PinataUploadBuilder<PinataUploadResult> {\n return createFileArrayUploadBuilder(pinner, files);\n },\n json(data: object): PinataUploadBuilder<PinataUploadResult> {\n return createJsonUploadBuilder(pinner, data);\n },\n base64(base64String: string): PinataUploadBuilder<PinataUploadResult> {\n return createBase64UploadBuilder(pinner, base64String);\n },\n url(urlString: string): PinataUploadBuilder<PinataUploadResult> {\n return createUrlUploadBuilder(pinner, urlString);\n },\n cid(cidString: string): PinataUploadBuilder<void> {\n return createCidUploadBuilder(pinner, cidString);\n },\n },\n\n async pinByHash(cid: string, options?: PinByHashOptions): Promise<void> {\n const cidObj = CID.parse(cid);\n const generatorPromise = pinner.pinByHash(cidObj, {\n name: options?.name,\n metadata: options?.keyvalues,\n });\n\n const generator = await generatorPromise;\n for await (const _ of generator) {\n // Pin operation in progress\n }\n },\n\n async unpin(cid: string): Promise<void> {\n await pinner.unpin(cid);\n },\n\n async getPinStatus(cid: string): Promise<PinataPin> {\n const cidObj = CID.parse(cid);\n const remotePin = await pinner.getPinStatus(cidObj);\n\n return {\n id: cidObj.toString(),\n ipfsPinHash: cidObj.toString(),\n size: remotePin.size || 0,\n userId: \"\",\n datePinned: remotePin.created.toISOString(),\n metadata: {\n name: remotePin.name,\n keyvalues: remotePin.metadata,\n },\n };\n },\n\n async isPinned(cid: string): Promise<boolean> {\n const cidObj = CID.parse(cid);\n return pinner.isPinned(cidObj);\n },\n\n async setPinMetadata(\n cid: string,\n metadata: Record<string, string>,\n ): Promise<void> {\n const cidObj = CID.parse(cid);\n await pinner.setPinMetadata(cidObj, metadata);\n },\n\n files: {\n list(): PinataListBuilder<PinataFile[]> {\n return createListBuilder(pinner);\n },\n async get(id: string): Promise<PinataFile> {\n const pins = await pinner.listPins();\n const pin = pins.find((p) => p.cid.toString() === id);\n\n if (!pin) {\n throw new Error(`Pin not found: ${id}`);\n }\n\n return {\n id: pin.cid.toString(),\n ipfsPinHash: pin.cid.toString(),\n size: pin.size || 0,\n name: pin.name || \"\",\n cid: pin.cid.toString(),\n createdAt: pin.created.toISOString(),\n };\n },\n },\n };\n}\n"],"mappings":";;;;;;;;AAiDA,SAAgB,cAAc,QAA+B;AAC3D,QAAO;EACL,QAAQ;GACN,KAAK,MAAqD;AACxD,WAAO,oBAAoB,QAAQ,KAAK;;GAE1C,UAAU,OAAwD;AAChE,WAAO,6BAA6B,QAAQ,MAAM;;GAEpD,KAAK,MAAuD;AAC1D,WAAO,wBAAwB,QAAQ,KAAK;;GAE9C,OAAO,cAA+D;AACpE,WAAO,0BAA0B,QAAQ,aAAa;;GAExD,IAAI,WAA4D;AAC9D,WAAO,uBAAuB,QAAQ,UAAU;;GAElD,IAAI,WAA8C;AAChD,WAAO,uBAAuB,QAAQ,UAAU;;GAEnD;EAED,MAAM,UAAU,KAAa,SAA2C;GACtE,MAAM,SAAS,IAAI,MAAM,IAAI;GAM7B,MAAM,YAAY,MALO,OAAO,UAAU,QAAQ;IAChD,MAAM,SAAS;IACf,UAAU,SAAS;IACpB,CAAC;AAGF,cAAW,MAAM,KAAK;;EAKxB,MAAM,MAAM,KAA4B;AACtC,SAAM,OAAO,MAAM,IAAI;;EAGzB,MAAM,aAAa,KAAiC;GAClD,MAAM,SAAS,IAAI,MAAM,IAAI;GAC7B,MAAM,YAAY,MAAM,OAAO,aAAa,OAAO;AAEnD,UAAO;IACL,IAAI,OAAO,UAAU;IACrB,aAAa,OAAO,UAAU;IAC9B,MAAM,UAAU,QAAQ;IACxB,QAAQ;IACR,YAAY,UAAU,QAAQ,aAAa;IAC3C,UAAU;KACR,MAAM,UAAU;KAChB,WAAW,UAAU;KACtB;IACF;;EAGH,MAAM,SAAS,KAA+B;GAC5C,MAAM,SAAS,IAAI,MAAM,IAAI;AAC7B,UAAO,OAAO,SAAS,OAAO;;EAGhC,MAAM,eACJ,KACA,UACe;GACf,MAAM,SAAS,IAAI,MAAM,IAAI;AAC7B,SAAM,OAAO,eAAe,QAAQ,SAAS;;EAG/C,OAAO;GACL,OAAwC;AACtC,WAAO,kBAAkB,OAAO;;GAElC,MAAM,IAAI,IAAiC;IAEzC,MAAM,OADO,MAAM,OAAO,UAAU,EACnB,MAAM,MAAM,EAAE,IAAI,UAAU,KAAK,GAAG;AAErD,QAAI,CAAC,IACH,OAAM,IAAI,MAAM,kBAAkB,KAAK;AAGzC,WAAO;KACL,IAAI,IAAI,IAAI,UAAU;KACtB,aAAa,IAAI,IAAI,UAAU;KAC/B,MAAM,IAAI,QAAQ;KAClB,MAAM,IAAI,QAAQ;KAClB,KAAK,IAAI,IAAI,UAAU;KACvB,WAAW,IAAI,QAAQ,aAAa;KACrC;;GAEJ;EACF"}
@@ -1 +0,0 @@
1
- import "../../pinner.js";