@lumeweb/pinner 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/LICENSE +9 -0
  2. package/README.md +690 -28
  3. package/dist/cjs/_virtual/rolldown_runtime.cjs +29 -0
  4. package/dist/cjs/adapters/pinata/adapter.cjs +88 -0
  5. package/dist/cjs/adapters/pinata/adapter.cjs.map +1 -0
  6. package/dist/cjs/adapters/pinata/adapter.d.cts +35 -0
  7. package/dist/cjs/adapters/pinata/builder.cjs +194 -0
  8. package/dist/cjs/adapters/pinata/builder.cjs.map +1 -0
  9. package/dist/cjs/adapters/pinata/index.cjs +3 -0
  10. package/dist/cjs/adapters/pinata/list-builder.cjs +52 -0
  11. package/dist/cjs/adapters/pinata/list-builder.cjs.map +1 -0
  12. package/dist/cjs/blockstore/index.cjs +2 -0
  13. package/dist/cjs/blockstore/unstorage-base.cjs +240 -0
  14. package/dist/cjs/blockstore/unstorage-base.cjs.map +1 -0
  15. package/dist/cjs/blockstore/unstorage-base.d.cts +23 -0
  16. package/dist/cjs/blockstore/unstorage.cjs +39 -0
  17. package/dist/cjs/blockstore/unstorage.cjs.map +1 -0
  18. package/dist/cjs/blockstore/unstorage.d.cts +36 -0
  19. package/dist/cjs/config.d.cts +51 -0
  20. package/dist/cjs/encoder/base64.cjs +38 -0
  21. package/dist/cjs/encoder/base64.cjs.map +1 -0
  22. package/dist/cjs/encoder/csv/csv-formatter.cjs +81 -0
  23. package/dist/cjs/encoder/csv/csv-formatter.cjs.map +1 -0
  24. package/dist/cjs/encoder/csv/field-formatter.cjs +76 -0
  25. package/dist/cjs/encoder/csv/field-formatter.cjs.map +1 -0
  26. package/dist/cjs/encoder/csv/row-formatter.cjs +159 -0
  27. package/dist/cjs/encoder/csv/row-formatter.cjs.map +1 -0
  28. package/dist/cjs/encoder/csv.cjs +44 -0
  29. package/dist/cjs/encoder/csv.cjs.map +1 -0
  30. package/dist/cjs/encoder/error.cjs +19 -0
  31. package/dist/cjs/encoder/error.cjs.map +1 -0
  32. package/dist/cjs/encoder/index.cjs +6 -0
  33. package/dist/cjs/encoder/json.cjs +36 -0
  34. package/dist/cjs/encoder/json.cjs.map +1 -0
  35. package/dist/cjs/encoder/text.cjs +35 -0
  36. package/dist/cjs/encoder/text.cjs.map +1 -0
  37. package/dist/cjs/encoder/url.cjs +39 -0
  38. package/dist/cjs/encoder/url.cjs.map +1 -0
  39. package/dist/cjs/errors/index.cjs +104 -0
  40. package/dist/cjs/errors/index.cjs.map +1 -0
  41. package/dist/cjs/errors/index.d.cts +47 -0
  42. package/dist/cjs/index.cjs +42 -0
  43. package/dist/cjs/index.d.cts +14 -0
  44. package/dist/cjs/pin/client.cjs +96 -0
  45. package/dist/cjs/pin/client.cjs.map +1 -0
  46. package/dist/cjs/pin/index.cjs +1 -0
  47. package/dist/cjs/pinner.cjs +126 -0
  48. package/dist/cjs/pinner.cjs.map +1 -0
  49. package/dist/cjs/pinner.d.cts +77 -0
  50. package/dist/cjs/types/constants.cjs +34 -0
  51. package/dist/cjs/types/constants.cjs.map +1 -0
  52. package/dist/cjs/types/mime-types.cjs +11 -0
  53. package/dist/cjs/types/mime-types.cjs.map +1 -0
  54. package/dist/cjs/types/mime-types.d.cts +7 -0
  55. package/dist/cjs/types/pin.d.cts +74 -0
  56. package/dist/cjs/types/pinata.d.cts +99 -0
  57. package/dist/cjs/types/type-guards.cjs +20 -0
  58. package/dist/cjs/types/type-guards.cjs.map +1 -0
  59. package/dist/cjs/types/type-guards.d.cts +15 -0
  60. package/dist/cjs/types/upload.cjs +18 -0
  61. package/dist/cjs/types/upload.cjs.map +1 -0
  62. package/dist/cjs/types/upload.d.cts +189 -0
  63. package/dist/cjs/upload/base-upload.cjs +135 -0
  64. package/dist/cjs/upload/base-upload.cjs.map +1 -0
  65. package/dist/cjs/upload/builder.cjs +174 -0
  66. package/dist/cjs/upload/builder.cjs.map +1 -0
  67. package/dist/cjs/upload/builder.d.cts +60 -0
  68. package/dist/cjs/upload/car.cjs +129 -0
  69. package/dist/cjs/upload/car.cjs.map +1 -0
  70. package/dist/cjs/upload/car.d.cts +19 -0
  71. package/dist/cjs/upload/constants.cjs +9 -0
  72. package/dist/cjs/upload/constants.cjs.map +1 -0
  73. package/dist/cjs/upload/index.cjs +8 -0
  74. package/dist/cjs/upload/manager.cjs +249 -0
  75. package/dist/cjs/upload/manager.cjs.map +1 -0
  76. package/dist/cjs/upload/manager.d.cts +35 -0
  77. package/dist/cjs/upload/normalize.cjs +28 -0
  78. package/dist/cjs/upload/normalize.cjs.map +1 -0
  79. package/dist/cjs/upload/tus-upload.cjs +74 -0
  80. package/dist/cjs/upload/tus-upload.cjs.map +1 -0
  81. package/dist/cjs/upload/xhr-upload.cjs +41 -0
  82. package/dist/cjs/upload/xhr-upload.cjs.map +1 -0
  83. package/dist/cjs/utils/env.cjs +12 -0
  84. package/dist/cjs/utils/env.cjs.map +1 -0
  85. package/dist/cjs/utils/stream.cjs +141 -0
  86. package/dist/cjs/utils/stream.cjs.map +1 -0
  87. package/dist/cjs/utils/stream.d.cts +23 -0
  88. package/dist/cjs/utils/tus-patch.cjs +50 -0
  89. package/dist/cjs/utils/tus-patch.cjs.map +1 -0
  90. package/dist/cjs/utils/validation.cjs +62 -0
  91. package/dist/cjs/utils/validation.cjs.map +1 -0
  92. package/dist/esm/_virtual/rolldown_runtime.js +8 -0
  93. package/dist/esm/adapters/pinata/adapter.d.ts +35 -0
  94. package/dist/esm/adapters/pinata/adapter.js +87 -0
  95. package/dist/esm/adapters/pinata/adapter.js.map +1 -0
  96. package/dist/esm/adapters/pinata/builder.d.ts +1 -0
  97. package/dist/esm/adapters/pinata/builder.js +187 -0
  98. package/dist/esm/adapters/pinata/builder.js.map +1 -0
  99. package/dist/esm/adapters/pinata/index.d.ts +4 -0
  100. package/dist/esm/adapters/pinata/index.js +3 -0
  101. package/dist/esm/adapters/pinata/list-builder.d.ts +1 -0
  102. package/dist/esm/adapters/pinata/list-builder.js +51 -0
  103. package/dist/esm/adapters/pinata/list-builder.js.map +1 -0
  104. package/dist/esm/blockstore/index.d.ts +2 -0
  105. package/dist/esm/blockstore/index.js +2 -0
  106. package/dist/esm/blockstore/unstorage-base.d.ts +23 -0
  107. package/dist/esm/blockstore/unstorage-base.js +231 -0
  108. package/dist/esm/blockstore/unstorage-base.js.map +1 -0
  109. package/dist/esm/blockstore/unstorage.d.ts +36 -0
  110. package/dist/esm/blockstore/unstorage.js +38 -0
  111. package/dist/esm/blockstore/unstorage.js.map +1 -0
  112. package/dist/esm/config.d.ts +51 -0
  113. package/dist/esm/encoder/base64.js +37 -0
  114. package/dist/esm/encoder/base64.js.map +1 -0
  115. package/dist/esm/encoder/csv/csv-formatter.js +81 -0
  116. package/dist/esm/encoder/csv/csv-formatter.js.map +1 -0
  117. package/dist/esm/encoder/csv/field-formatter.js +75 -0
  118. package/dist/esm/encoder/csv/field-formatter.js.map +1 -0
  119. package/dist/esm/encoder/csv/row-formatter.js +159 -0
  120. package/dist/esm/encoder/csv/row-formatter.js.map +1 -0
  121. package/dist/esm/encoder/csv.js +43 -0
  122. package/dist/esm/encoder/csv.js.map +1 -0
  123. package/dist/esm/encoder/error.js +18 -0
  124. package/dist/esm/encoder/error.js.map +1 -0
  125. package/dist/esm/encoder/index.js +6 -0
  126. package/dist/esm/encoder/json.js +35 -0
  127. package/dist/esm/encoder/json.js.map +1 -0
  128. package/dist/esm/encoder/text.js +34 -0
  129. package/dist/esm/encoder/text.js.map +1 -0
  130. package/dist/esm/encoder/url.js +36 -0
  131. package/dist/esm/encoder/url.js.map +1 -0
  132. package/dist/esm/errors/index.d.ts +47 -0
  133. package/dist/esm/errors/index.js +93 -0
  134. package/dist/esm/errors/index.js.map +1 -0
  135. package/dist/esm/index.d.ts +16 -0
  136. package/dist/esm/index.js +14 -0
  137. package/dist/esm/pin/client.js +95 -0
  138. package/dist/esm/pin/client.js.map +1 -0
  139. package/dist/esm/pin/index.js +1 -0
  140. package/dist/esm/pinner.d.ts +77 -0
  141. package/dist/esm/pinner.js +125 -0
  142. package/dist/esm/pinner.js.map +1 -0
  143. package/dist/esm/types/constants.js +29 -0
  144. package/dist/esm/types/constants.js.map +1 -0
  145. package/dist/esm/types/mime-types.d.ts +7 -0
  146. package/dist/esm/types/mime-types.js +8 -0
  147. package/dist/esm/types/mime-types.js.map +1 -0
  148. package/dist/esm/types/pin.d.ts +74 -0
  149. package/dist/esm/types/pinata.d.ts +99 -0
  150. package/dist/esm/types/type-guards.d.ts +15 -0
  151. package/dist/esm/types/type-guards.js +19 -0
  152. package/dist/esm/types/type-guards.js.map +1 -0
  153. package/dist/esm/types/upload.d.ts +189 -0
  154. package/dist/esm/types/upload.js +16 -0
  155. package/dist/esm/types/upload.js.map +1 -0
  156. package/dist/esm/upload/base-upload.js +132 -0
  157. package/dist/esm/upload/base-upload.js.map +1 -0
  158. package/dist/esm/upload/builder.d.ts +60 -0
  159. package/dist/esm/upload/builder.js +173 -0
  160. package/dist/esm/upload/builder.js.map +1 -0
  161. package/dist/esm/upload/car.d.ts +19 -0
  162. package/dist/esm/upload/car.js +125 -0
  163. package/dist/esm/upload/car.js.map +1 -0
  164. package/dist/esm/upload/constants.js +7 -0
  165. package/dist/esm/upload/constants.js.map +1 -0
  166. package/dist/esm/upload/index.js +8 -0
  167. package/dist/esm/upload/manager.d.ts +35 -0
  168. package/dist/esm/upload/manager.js +248 -0
  169. package/dist/esm/upload/manager.js.map +1 -0
  170. package/dist/esm/upload/normalize.js +28 -0
  171. package/dist/esm/upload/normalize.js.map +1 -0
  172. package/dist/esm/upload/tus-upload.js +72 -0
  173. package/dist/esm/upload/tus-upload.js.map +1 -0
  174. package/dist/esm/upload/xhr-upload.js +39 -0
  175. package/dist/esm/upload/xhr-upload.js.map +1 -0
  176. package/dist/esm/utils/env.js +11 -0
  177. package/dist/esm/utils/env.js.map +1 -0
  178. package/dist/esm/utils/stream.d.ts +23 -0
  179. package/dist/esm/utils/stream.js +134 -0
  180. package/dist/esm/utils/stream.js.map +1 -0
  181. package/dist/esm/utils/tus-patch.js +51 -0
  182. package/dist/esm/utils/tus-patch.js.map +1 -0
  183. package/dist/esm/utils/validation.js +60 -0
  184. package/dist/esm/utils/validation.js.map +1 -0
  185. package/package.json +95 -8
  186. package/public/mockServiceWorker.js +349 -0
@@ -0,0 +1,29 @@
1
+ //#region rolldown:runtime
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") {
10
+ for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
11
+ key = keys[i];
12
+ if (!__hasOwnProp.call(to, key) && key !== except) {
13
+ __defProp(to, key, {
14
+ get: ((k) => from[k]).bind(null, key),
15
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
16
+ });
17
+ }
18
+ }
19
+ }
20
+ return to;
21
+ };
22
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
23
+ value: mod,
24
+ enumerable: true
25
+ }) : target, mod));
26
+
27
+ //#endregion
28
+
29
+ exports.__toESM = __toESM;
@@ -0,0 +1,88 @@
1
+ const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
+ const require_builder = require('./builder.cjs');
3
+ const require_list_builder = require('./list-builder.cjs');
4
+ let multiformats_cid = require("multiformats/cid");
5
+
6
+ //#region src/adapters/pinata/adapter.ts
7
+ /**
8
+ * Creates a Pinata-compatible adapter for the Pinner client.
9
+ */
10
+ function pinataAdapter(pinner) {
11
+ return {
12
+ upload: {
13
+ file(file) {
14
+ return require_builder.createUploadBuilder(pinner, file);
15
+ },
16
+ fileArray(files) {
17
+ return require_builder.createFileArrayUploadBuilder(pinner, files);
18
+ },
19
+ json(data) {
20
+ return require_builder.createJsonUploadBuilder(pinner, data);
21
+ },
22
+ base64(base64String) {
23
+ return require_builder.createBase64UploadBuilder(pinner, base64String);
24
+ },
25
+ url(urlString) {
26
+ return require_builder.createUrlUploadBuilder(pinner, urlString);
27
+ },
28
+ cid(cidString) {
29
+ return require_builder.createCidUploadBuilder(pinner, cidString);
30
+ }
31
+ },
32
+ async pinByHash(cid, options) {
33
+ const cidObj = multiformats_cid.CID.parse(cid);
34
+ const generator = await pinner.pinByHash(cidObj, {
35
+ name: options?.name,
36
+ metadata: options?.keyvalues
37
+ });
38
+ for await (const _ of generator);
39
+ },
40
+ async unpin(cid) {
41
+ await pinner.unpin(cid);
42
+ },
43
+ async getPinStatus(cid) {
44
+ const cidObj = multiformats_cid.CID.parse(cid);
45
+ const remotePin = await pinner.getPinStatus(cidObj);
46
+ return {
47
+ id: cidObj.toString(),
48
+ ipfsPinHash: cidObj.toString(),
49
+ size: remotePin.size || 0,
50
+ userId: "",
51
+ datePinned: remotePin.created.toISOString(),
52
+ metadata: {
53
+ name: remotePin.name,
54
+ keyvalues: remotePin.metadata
55
+ }
56
+ };
57
+ },
58
+ async isPinned(cid) {
59
+ const cidObj = multiformats_cid.CID.parse(cid);
60
+ return pinner.isPinned(cidObj);
61
+ },
62
+ async setPinMetadata(cid, metadata) {
63
+ const cidObj = multiformats_cid.CID.parse(cid);
64
+ await pinner.setPinMetadata(cidObj, metadata);
65
+ },
66
+ files: {
67
+ list() {
68
+ return require_list_builder.createListBuilder(pinner);
69
+ },
70
+ async get(id) {
71
+ const pin = (await pinner.listPins()).find((p) => p.cid.toString() === id);
72
+ if (!pin) throw new Error(`Pin not found: ${id}`);
73
+ return {
74
+ id: pin.cid.toString(),
75
+ ipfsPinHash: pin.cid.toString(),
76
+ size: pin.size || 0,
77
+ name: pin.name || "",
78
+ cid: pin.cid.toString(),
79
+ createdAt: pin.created.toISOString()
80
+ };
81
+ }
82
+ }
83
+ };
84
+ }
85
+
86
+ //#endregion
87
+ exports.pinataAdapter = pinataAdapter;
88
+ //# sourceMappingURL=adapter.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.cjs","names":["createUploadBuilder","createFileArrayUploadBuilder","createJsonUploadBuilder","createBase64UploadBuilder","createUrlUploadBuilder","createCidUploadBuilder","CID","createListBuilder"],"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,WAAOA,oCAAoB,QAAQ,KAAK;;GAE1C,UAAU,OAAwD;AAChE,WAAOC,6CAA6B,QAAQ,MAAM;;GAEpD,KAAK,MAAuD;AAC1D,WAAOC,wCAAwB,QAAQ,KAAK;;GAE9C,OAAO,cAA+D;AACpE,WAAOC,0CAA0B,QAAQ,aAAa;;GAExD,IAAI,WAA4D;AAC9D,WAAOC,uCAAuB,QAAQ,UAAU;;GAElD,IAAI,WAA8C;AAChD,WAAOC,uCAAuB,QAAQ,UAAU;;GAEnD;EAED,MAAM,UAAU,KAAa,SAA2C;GACtE,MAAM,SAASC,qBAAI,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,SAASA,qBAAI,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,SAASA,qBAAI,MAAM,IAAI;AAC7B,UAAO,OAAO,SAAS,OAAO;;EAGhC,MAAM,eACJ,KACA,UACe;GACf,MAAM,SAASA,qBAAI,MAAM,IAAI;AAC7B,SAAM,OAAO,eAAe,QAAQ,SAAS;;EAG/C,OAAO;GACL,OAAwC;AACtC,WAAOC,uCAAkB,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"}
@@ -0,0 +1,35 @@
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
@@ -0,0 +1,194 @@
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
@@ -0,0 +1 @@
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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"}
@@ -0,0 +1,3 @@
1
+ const require_builder = require('./builder.cjs');
2
+ const require_list_builder = require('./list-builder.cjs');
3
+ const require_adapter = require('./adapter.cjs');
@@ -0,0 +1,52 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,2 @@
1
+ const require_unstorage_base = require('./unstorage-base.cjs');
2
+ const require_unstorage = require('./unstorage.cjs');