@lumeweb/pinner 0.0.1 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +9 -0
- package/README.md +707 -28
- package/dist/cjs/_virtual/rolldown_runtime.cjs +29 -0
- package/dist/cjs/adapters/pinata/index.cjs +6 -0
- package/dist/cjs/adapters/pinata/legacy/adapter.cjs +83 -0
- package/dist/cjs/adapters/pinata/legacy/adapter.cjs.map +1 -0
- package/dist/cjs/adapters/pinata/legacy/adapter.d.cts +74 -0
- package/dist/cjs/adapters/pinata/legacy/index.cjs +1 -0
- package/dist/cjs/adapters/pinata/shared/index.cjs +1 -0
- package/dist/cjs/adapters/pinata/shared/types.d.cts +218 -0
- package/dist/cjs/adapters/pinata/shared/utils.cjs +83 -0
- package/dist/cjs/adapters/pinata/shared/utils.cjs.map +1 -0
- package/dist/cjs/adapters/pinata/v2/adapter-interface.d.cts +198 -0
- package/dist/cjs/adapters/pinata/v2/adapter.cjs +636 -0
- package/dist/cjs/adapters/pinata/v2/adapter.cjs.map +1 -0
- package/dist/cjs/adapters/pinata/v2/adapter.d.cts +17 -0
- package/dist/cjs/adapters/pinata/v2/index.cjs +1 -0
- package/dist/cjs/adapters/pinata/v2/types.d.cts +308 -0
- package/dist/cjs/blockstore/index.cjs +2 -0
- package/dist/cjs/blockstore/unstorage-base.cjs +240 -0
- package/dist/cjs/blockstore/unstorage-base.cjs.map +1 -0
- package/dist/cjs/blockstore/unstorage-base.d.cts +23 -0
- package/dist/cjs/blockstore/unstorage.cjs +39 -0
- package/dist/cjs/blockstore/unstorage.cjs.map +1 -0
- package/dist/cjs/blockstore/unstorage.d.cts +36 -0
- package/dist/cjs/config.d.cts +51 -0
- package/dist/cjs/encoder/base64.cjs +38 -0
- package/dist/cjs/encoder/base64.cjs.map +1 -0
- package/dist/cjs/encoder/csv/csv-formatter.cjs +81 -0
- package/dist/cjs/encoder/csv/csv-formatter.cjs.map +1 -0
- package/dist/cjs/encoder/csv/field-formatter.cjs +76 -0
- package/dist/cjs/encoder/csv/field-formatter.cjs.map +1 -0
- package/dist/cjs/encoder/csv/row-formatter.cjs +159 -0
- package/dist/cjs/encoder/csv/row-formatter.cjs.map +1 -0
- package/dist/cjs/encoder/csv.cjs +44 -0
- package/dist/cjs/encoder/csv.cjs.map +1 -0
- package/dist/cjs/encoder/error.cjs +19 -0
- package/dist/cjs/encoder/error.cjs.map +1 -0
- package/dist/cjs/encoder/index.cjs +6 -0
- package/dist/cjs/encoder/json.cjs +36 -0
- package/dist/cjs/encoder/json.cjs.map +1 -0
- package/dist/cjs/encoder/text.cjs +35 -0
- package/dist/cjs/encoder/text.cjs.map +1 -0
- package/dist/cjs/encoder/url.cjs +39 -0
- package/dist/cjs/encoder/url.cjs.map +1 -0
- package/dist/cjs/errors/index.cjs +104 -0
- package/dist/cjs/errors/index.cjs.map +1 -0
- package/dist/cjs/errors/index.d.cts +47 -0
- package/dist/cjs/index.cjs +44 -0
- package/dist/cjs/index.d.cts +16 -0
- package/dist/cjs/pin/client.cjs +98 -0
- package/dist/cjs/pin/client.cjs.map +1 -0
- package/dist/cjs/pin/index.cjs +1 -0
- package/dist/cjs/pinner.cjs +132 -0
- package/dist/cjs/pinner.cjs.map +1 -0
- package/dist/cjs/pinner.d.cts +81 -0
- package/dist/cjs/types/constants.cjs +39 -0
- package/dist/cjs/types/constants.cjs.map +1 -0
- package/dist/cjs/types/mime-types.cjs +11 -0
- package/dist/cjs/types/mime-types.cjs.map +1 -0
- package/dist/cjs/types/mime-types.d.cts +7 -0
- package/dist/cjs/types/pin.d.cts +78 -0
- package/dist/cjs/types/type-guards.cjs +20 -0
- package/dist/cjs/types/type-guards.cjs.map +1 -0
- package/dist/cjs/types/type-guards.d.cts +15 -0
- package/dist/cjs/types/upload.cjs +18 -0
- package/dist/cjs/types/upload.cjs.map +1 -0
- package/dist/cjs/types/upload.d.cts +189 -0
- package/dist/cjs/upload/base-upload.cjs +135 -0
- package/dist/cjs/upload/base-upload.cjs.map +1 -0
- package/dist/cjs/upload/builder.cjs +174 -0
- package/dist/cjs/upload/builder.cjs.map +1 -0
- package/dist/cjs/upload/builder.d.cts +60 -0
- package/dist/cjs/upload/car.cjs +129 -0
- package/dist/cjs/upload/car.cjs.map +1 -0
- package/dist/cjs/upload/car.d.cts +19 -0
- package/dist/cjs/upload/constants.cjs +9 -0
- package/dist/cjs/upload/constants.cjs.map +1 -0
- package/dist/cjs/upload/index.cjs +8 -0
- package/dist/cjs/upload/manager.cjs +249 -0
- package/dist/cjs/upload/manager.cjs.map +1 -0
- package/dist/cjs/upload/manager.d.cts +35 -0
- package/dist/cjs/upload/normalize.cjs +28 -0
- package/dist/cjs/upload/normalize.cjs.map +1 -0
- package/dist/cjs/upload/tus-upload.cjs +74 -0
- package/dist/cjs/upload/tus-upload.cjs.map +1 -0
- package/dist/cjs/upload/xhr-upload.cjs +41 -0
- package/dist/cjs/upload/xhr-upload.cjs.map +1 -0
- package/dist/cjs/utils/env.cjs +12 -0
- package/dist/cjs/utils/env.cjs.map +1 -0
- package/dist/cjs/utils/stream.cjs +141 -0
- package/dist/cjs/utils/stream.cjs.map +1 -0
- package/dist/cjs/utils/stream.d.cts +23 -0
- package/dist/cjs/utils/tus-patch.cjs +50 -0
- package/dist/cjs/utils/tus-patch.cjs.map +1 -0
- package/dist/cjs/utils/validation.cjs +62 -0
- package/dist/cjs/utils/validation.cjs.map +1 -0
- package/dist/esm/_virtual/rolldown_runtime.js +8 -0
- package/dist/esm/adapters/pinata/index.d.ts +7 -0
- package/dist/esm/adapters/pinata/index.js +6 -0
- package/dist/esm/adapters/pinata/legacy/adapter.d.ts +74 -0
- package/dist/esm/adapters/pinata/legacy/adapter.js +83 -0
- package/dist/esm/adapters/pinata/legacy/adapter.js.map +1 -0
- package/dist/esm/adapters/pinata/legacy/index.d.ts +1 -0
- package/dist/esm/adapters/pinata/legacy/index.js +1 -0
- package/dist/esm/adapters/pinata/shared/index.d.ts +2 -0
- package/dist/esm/adapters/pinata/shared/index.js +1 -0
- package/dist/esm/adapters/pinata/shared/types.d.ts +218 -0
- package/dist/esm/adapters/pinata/shared/utils.d.ts +1 -0
- package/dist/esm/adapters/pinata/shared/utils.js +78 -0
- package/dist/esm/adapters/pinata/shared/utils.js.map +1 -0
- package/dist/esm/adapters/pinata/v2/adapter-interface.d.ts +198 -0
- package/dist/esm/adapters/pinata/v2/adapter.d.ts +17 -0
- package/dist/esm/adapters/pinata/v2/adapter.js +636 -0
- package/dist/esm/adapters/pinata/v2/adapter.js.map +1 -0
- package/dist/esm/adapters/pinata/v2/index.d.ts +3 -0
- package/dist/esm/adapters/pinata/v2/index.js +1 -0
- package/dist/esm/adapters/pinata/v2/types.d.ts +308 -0
- package/dist/esm/blockstore/index.d.ts +2 -0
- package/dist/esm/blockstore/index.js +2 -0
- package/dist/esm/blockstore/unstorage-base.d.ts +23 -0
- package/dist/esm/blockstore/unstorage-base.js +231 -0
- package/dist/esm/blockstore/unstorage-base.js.map +1 -0
- package/dist/esm/blockstore/unstorage.d.ts +36 -0
- package/dist/esm/blockstore/unstorage.js +38 -0
- package/dist/esm/blockstore/unstorage.js.map +1 -0
- package/dist/esm/config.d.ts +51 -0
- package/dist/esm/encoder/base64.js +37 -0
- package/dist/esm/encoder/base64.js.map +1 -0
- package/dist/esm/encoder/csv/csv-formatter.js +81 -0
- package/dist/esm/encoder/csv/csv-formatter.js.map +1 -0
- package/dist/esm/encoder/csv/field-formatter.js +75 -0
- package/dist/esm/encoder/csv/field-formatter.js.map +1 -0
- package/dist/esm/encoder/csv/row-formatter.js +159 -0
- package/dist/esm/encoder/csv/row-formatter.js.map +1 -0
- package/dist/esm/encoder/csv.js +43 -0
- package/dist/esm/encoder/csv.js.map +1 -0
- package/dist/esm/encoder/error.js +18 -0
- package/dist/esm/encoder/error.js.map +1 -0
- package/dist/esm/encoder/index.js +6 -0
- package/dist/esm/encoder/json.js +35 -0
- package/dist/esm/encoder/json.js.map +1 -0
- package/dist/esm/encoder/text.js +34 -0
- package/dist/esm/encoder/text.js.map +1 -0
- package/dist/esm/encoder/url.js +36 -0
- package/dist/esm/encoder/url.js.map +1 -0
- package/dist/esm/errors/index.d.ts +47 -0
- package/dist/esm/errors/index.js +93 -0
- package/dist/esm/errors/index.js.map +1 -0
- package/dist/esm/index.d.ts +18 -0
- package/dist/esm/index.js +15 -0
- package/dist/esm/pin/client.js +97 -0
- package/dist/esm/pin/client.js.map +1 -0
- package/dist/esm/pin/index.js +1 -0
- package/dist/esm/pinner.d.ts +81 -0
- package/dist/esm/pinner.js +131 -0
- package/dist/esm/pinner.js.map +1 -0
- package/dist/esm/types/constants.js +33 -0
- package/dist/esm/types/constants.js.map +1 -0
- package/dist/esm/types/mime-types.d.ts +7 -0
- package/dist/esm/types/mime-types.js +8 -0
- package/dist/esm/types/mime-types.js.map +1 -0
- package/dist/esm/types/pin.d.ts +78 -0
- package/dist/esm/types/type-guards.d.ts +15 -0
- package/dist/esm/types/type-guards.js +19 -0
- package/dist/esm/types/type-guards.js.map +1 -0
- package/dist/esm/types/upload.d.ts +189 -0
- package/dist/esm/types/upload.js +16 -0
- package/dist/esm/types/upload.js.map +1 -0
- package/dist/esm/upload/base-upload.js +132 -0
- package/dist/esm/upload/base-upload.js.map +1 -0
- package/dist/esm/upload/builder.d.ts +60 -0
- package/dist/esm/upload/builder.js +173 -0
- package/dist/esm/upload/builder.js.map +1 -0
- package/dist/esm/upload/car.d.ts +19 -0
- package/dist/esm/upload/car.js +125 -0
- package/dist/esm/upload/car.js.map +1 -0
- package/dist/esm/upload/constants.js +7 -0
- package/dist/esm/upload/constants.js.map +1 -0
- package/dist/esm/upload/index.js +8 -0
- package/dist/esm/upload/manager.d.ts +35 -0
- package/dist/esm/upload/manager.js +248 -0
- package/dist/esm/upload/manager.js.map +1 -0
- package/dist/esm/upload/normalize.js +28 -0
- package/dist/esm/upload/normalize.js.map +1 -0
- package/dist/esm/upload/tus-upload.js +72 -0
- package/dist/esm/upload/tus-upload.js.map +1 -0
- package/dist/esm/upload/xhr-upload.js +39 -0
- package/dist/esm/upload/xhr-upload.js.map +1 -0
- package/dist/esm/utils/env.js +11 -0
- package/dist/esm/utils/env.js.map +1 -0
- package/dist/esm/utils/stream.d.ts +23 -0
- package/dist/esm/utils/stream.js +134 -0
- package/dist/esm/utils/stream.js.map +1 -0
- package/dist/esm/utils/tus-patch.js +51 -0
- package/dist/esm/utils/tus-patch.js.map +1 -0
- package/dist/esm/utils/validation.js +60 -0
- package/dist/esm/utils/validation.js.map +1 -0
- package/package.json +95 -8
- package/public/mockServiceWorker.js +349 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
const require_error = require('./error.cjs');
|
|
2
|
+
const require_json = require('./json.cjs');
|
|
3
|
+
const require_base64 = require('./base64.cjs');
|
|
4
|
+
const require_url = require('./url.cjs');
|
|
5
|
+
const require_csv = require('./csv.cjs');
|
|
6
|
+
const require_text = require('./text.cjs');
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
const require_error = require('./error.cjs');
|
|
2
|
+
|
|
3
|
+
//#region src/encoder/json.ts
|
|
4
|
+
/**
|
|
5
|
+
* JSON encoder - converts JSON objects to File objects.
|
|
6
|
+
*/
|
|
7
|
+
var JsonEncoder = class {
|
|
8
|
+
async encode(data, options) {
|
|
9
|
+
try {
|
|
10
|
+
const json = JSON.stringify(data, null, 2);
|
|
11
|
+
const blob = new Blob([json], { type: "application/json" });
|
|
12
|
+
const filename = options?.name || "data.json";
|
|
13
|
+
return {
|
|
14
|
+
file: new File([blob], filename, { type: "application/json" }),
|
|
15
|
+
options: {
|
|
16
|
+
name: options?.name,
|
|
17
|
+
keyvalues: options?.keyvalues
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
} catch (error) {
|
|
21
|
+
if (error instanceof Error) throw new require_error.EncoderError(`JSON encoding failed: ${error.message}`, "INVALID_JSON", error);
|
|
22
|
+
throw new require_error.EncoderError("JSON encoding failed: unknown error", "INVALID_JSON");
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Encode a JSON object to a File object.
|
|
28
|
+
*/
|
|
29
|
+
async function jsonToFile(data, options) {
|
|
30
|
+
return new JsonEncoder().encode(data, options);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
//#endregion
|
|
34
|
+
exports.JsonEncoder = JsonEncoder;
|
|
35
|
+
exports.jsonToFile = jsonToFile;
|
|
36
|
+
//# sourceMappingURL=json.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.cjs","names":["EncoderError"],"sources":["../../../src/encoder/json.ts"],"sourcesContent":["import type { Encoder, EncoderResult, UploadOptions } from \"./types\";\nimport { EncoderError } from \"./error\";\n\n/**\n * JSON encoder - converts JSON objects to File objects.\n */\nexport class JsonEncoder implements Encoder<object> {\n async encode(data: object, options?: UploadOptions): Promise<EncoderResult> {\n try {\n const json = JSON.stringify(data, null, 2);\n const blob = new Blob([json], { type: \"application/json\" });\n const filename = options?.name || \"data.json\";\n const file = new File([blob], filename, { type: \"application/json\" });\n\n return {\n file,\n options: {\n name: options?.name,\n keyvalues: options?.keyvalues,\n },\n };\n } catch (error) {\n if (error instanceof Error) {\n throw new EncoderError(\n `JSON encoding failed: ${error.message}`,\n \"INVALID_JSON\",\n error,\n );\n }\n throw new EncoderError(\n \"JSON encoding failed: unknown error\",\n \"INVALID_JSON\",\n );\n }\n }\n}\n\n/**\n * Encode a JSON object to a File object.\n */\nexport async function jsonToFile(\n data: object,\n options?: UploadOptions,\n): Promise<EncoderResult> {\n const encoder = new JsonEncoder();\n return encoder.encode(data, options);\n}\n"],"mappings":";;;;;;AAMA,IAAa,cAAb,MAAoD;CAClD,MAAM,OAAO,MAAc,SAAiD;AAC1E,MAAI;GACF,MAAM,OAAO,KAAK,UAAU,MAAM,MAAM,EAAE;GAC1C,MAAM,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,oBAAoB,CAAC;GAC3D,MAAM,WAAW,SAAS,QAAQ;AAGlC,UAAO;IACL,MAHW,IAAI,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;IAInE,SAAS;KACP,MAAM,SAAS;KACf,WAAW,SAAS;KACrB;IACF;WACM,OAAO;AACd,OAAI,iBAAiB,MACnB,OAAM,IAAIA,2BACR,yBAAyB,MAAM,WAC/B,gBACA,MACD;AAEH,SAAM,IAAIA,2BACR,uCACA,eACD;;;;;;;AAQP,eAAsB,WACpB,MACA,SACwB;AAExB,QADgB,IAAI,aAAa,CAClB,OAAO,MAAM,QAAQ"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
const require_error = require('./error.cjs');
|
|
2
|
+
|
|
3
|
+
//#region src/encoder/text.ts
|
|
4
|
+
/**
|
|
5
|
+
* Text encoder - converts text strings to File objects.
|
|
6
|
+
*/
|
|
7
|
+
var TextEncoder = class {
|
|
8
|
+
async encode(data, options) {
|
|
9
|
+
try {
|
|
10
|
+
const blob = new Blob([data], { type: "text/plain" });
|
|
11
|
+
const filename = options?.name || "data.txt";
|
|
12
|
+
return {
|
|
13
|
+
file: new File([blob], filename, { type: "text/plain" }),
|
|
14
|
+
options: {
|
|
15
|
+
name: options?.name,
|
|
16
|
+
keyvalues: options?.keyvalues
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
} catch (error) {
|
|
20
|
+
if (error instanceof Error) throw new require_error.EncoderError(`Text encoding failed: ${error.message}`, "INVALID_TEXT", error);
|
|
21
|
+
throw new require_error.EncoderError("Text encoding failed: unknown error", "INVALID_TEXT");
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Encode a text string to a File object.
|
|
27
|
+
*/
|
|
28
|
+
async function textToFile(data, options) {
|
|
29
|
+
return new TextEncoder().encode(data, options);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
//#endregion
|
|
33
|
+
exports.TextEncoder = TextEncoder;
|
|
34
|
+
exports.textToFile = textToFile;
|
|
35
|
+
//# sourceMappingURL=text.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.cjs","names":["EncoderError"],"sources":["../../../src/encoder/text.ts"],"sourcesContent":["import type { Encoder, EncoderResult, UploadOptions } from \"./types\";\nimport { EncoderError } from \"./error\";\n\n/**\n * Text encoder - converts text strings to File objects.\n */\nexport class TextEncoder implements Encoder<string> {\n async encode(data: string, options?: UploadOptions): Promise<EncoderResult> {\n try {\n const blob = new Blob([data], { type: \"text/plain\" });\n const filename = options?.name || \"data.txt\";\n const file = new File([blob], filename, { type: \"text/plain\" });\n\n return {\n file,\n options: {\n name: options?.name,\n keyvalues: options?.keyvalues,\n },\n };\n } catch (error) {\n if (error instanceof Error) {\n throw new EncoderError(\n `Text encoding failed: ${error.message}`,\n \"INVALID_TEXT\",\n error,\n );\n }\n throw new EncoderError(\n \"Text encoding failed: unknown error\",\n \"INVALID_TEXT\",\n );\n }\n }\n}\n\n/**\n * Encode a text string to a File object.\n */\nexport async function textToFile(\n data: string,\n options?: UploadOptions,\n): Promise<EncoderResult> {\n const encoder = new TextEncoder();\n return encoder.encode(data, options);\n}\n"],"mappings":";;;;;;AAMA,IAAa,cAAb,MAAoD;CAClD,MAAM,OAAO,MAAc,SAAiD;AAC1E,MAAI;GACF,MAAM,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,cAAc,CAAC;GACrD,MAAM,WAAW,SAAS,QAAQ;AAGlC,UAAO;IACL,MAHW,IAAI,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;IAI7D,SAAS;KACP,MAAM,SAAS;KACf,WAAW,SAAS;KACrB;IACF;WACM,OAAO;AACd,OAAI,iBAAiB,MACnB,OAAM,IAAIA,2BACR,yBAAyB,MAAM,WAC/B,gBACA,MACD;AAEH,SAAM,IAAIA,2BACR,uCACA,eACD;;;;;;;AAQP,eAAsB,WACpB,MACA,SACwB;AAExB,QADgB,IAAI,aAAa,CAClB,OAAO,MAAM,QAAQ"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
|
|
2
|
+
const require_error = require('./error.cjs');
|
|
3
|
+
let ky = require("ky");
|
|
4
|
+
ky = require_rolldown_runtime.__toESM(ky);
|
|
5
|
+
|
|
6
|
+
//#region src/encoder/url.ts
|
|
7
|
+
/**
|
|
8
|
+
* URL encoder - fetches content from URLs and converts to File objects.
|
|
9
|
+
*/
|
|
10
|
+
var UrlEncoder = class {
|
|
11
|
+
async encode(urlString, options) {
|
|
12
|
+
try {
|
|
13
|
+
const blob = await (0, ky.default)(urlString, { fetch: options?.fetch }).blob();
|
|
14
|
+
const filename = options?.name || new URL(urlString).pathname.split("/").pop() || "file";
|
|
15
|
+
return {
|
|
16
|
+
file: new File([blob], filename, { type: blob.type }),
|
|
17
|
+
options: {
|
|
18
|
+
name: options?.name,
|
|
19
|
+
keyvalues: options?.keyvalues
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
} catch (error) {
|
|
23
|
+
if ((0, ky.isHTTPError)(error) || (0, ky.isTimeoutError)(error)) throw new require_error.EncoderError(`URL encoding failed: ${error.message}`, "NETWORK_ERROR", error);
|
|
24
|
+
if (error instanceof Error) throw new require_error.EncoderError(`URL encoding failed: ${error.message}`, "NETWORK_ERROR", error);
|
|
25
|
+
throw new require_error.EncoderError("URL encoding failed: unknown error", "UNKNOWN");
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Encode a URL to a File object by fetching the content.
|
|
31
|
+
*/
|
|
32
|
+
async function urlToFile(urlString, options) {
|
|
33
|
+
return new UrlEncoder().encode(urlString, options);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
//#endregion
|
|
37
|
+
exports.UrlEncoder = UrlEncoder;
|
|
38
|
+
exports.urlToFile = urlToFile;
|
|
39
|
+
//# sourceMappingURL=url.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.cjs","names":["EncoderError"],"sources":["../../../src/encoder/url.ts"],"sourcesContent":["import ky, { isHTTPError, isTimeoutError } from \"ky\";\nimport type { Encoder, EncoderResult, UploadOptions } from \"./types\";\nimport { EncoderError } from \"./error\";\n\n/**\n * URL encoder - fetches content from URLs and converts to File objects.\n */\nexport class UrlEncoder implements Encoder<string> {\n async encode(\n urlString: string,\n options?: UploadOptions,\n ): Promise<EncoderResult> {\n try {\n const blob = await ky(urlString, { fetch: options?.fetch }).blob();\n const filename =\n options?.name || new URL(urlString).pathname.split(\"/\").pop() || \"file\";\n const file = new File([blob], filename, { type: blob.type });\n\n return {\n file,\n options: {\n name: options?.name,\n keyvalues: options?.keyvalues,\n },\n };\n } catch (error) {\n if (isHTTPError(error) || isTimeoutError(error)) {\n throw new EncoderError(\n `URL encoding failed: ${error.message}`,\n \"NETWORK_ERROR\",\n error,\n );\n }\n\n if (error instanceof Error) {\n throw new EncoderError(\n `URL encoding failed: ${error.message}`,\n \"NETWORK_ERROR\",\n error,\n );\n }\n\n throw new EncoderError(\"URL encoding failed: unknown error\", \"UNKNOWN\");\n }\n }\n}\n\n/**\n * Encode a URL to a File object by fetching the content.\n */\nexport async function urlToFile(\n urlString: string,\n options?: UploadOptions,\n): Promise<EncoderResult> {\n const encoder = new UrlEncoder();\n return encoder.encode(urlString, options);\n}\n"],"mappings":";;;;;;;;;AAOA,IAAa,aAAb,MAAmD;CACjD,MAAM,OACJ,WACA,SACwB;AACxB,MAAI;GACF,MAAM,OAAO,sBAAS,WAAW,EAAE,OAAO,SAAS,OAAO,CAAC,CAAC,MAAM;GAClE,MAAM,WACJ,SAAS,QAAQ,IAAI,IAAI,UAAU,CAAC,SAAS,MAAM,IAAI,CAAC,KAAK,IAAI;AAGnE,UAAO;IACL,MAHW,IAAI,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC;IAI1D,SAAS;KACP,MAAM,SAAS;KACf,WAAW,SAAS;KACrB;IACF;WACM,OAAO;AACd,2BAAgB,MAAM,2BAAmB,MAAM,CAC7C,OAAM,IAAIA,2BACR,wBAAwB,MAAM,WAC9B,iBACA,MACD;AAGH,OAAI,iBAAiB,MACnB,OAAM,IAAIA,2BACR,wBAAwB,MAAM,WAC9B,iBACA,MACD;AAGH,SAAM,IAAIA,2BAAa,sCAAsC,UAAU;;;;;;;AAQ7E,eAAsB,UACpB,WACA,SACwB;AAExB,QADgB,IAAI,YAAY,CACjB,OAAO,WAAW,QAAQ"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
|
|
2
|
+
//#region src/errors/index.ts
|
|
3
|
+
var PinnerError = class extends Error {
|
|
4
|
+
constructor(code, message, retryable, cause) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.code = code;
|
|
7
|
+
this.retryable = retryable;
|
|
8
|
+
this.cause = cause;
|
|
9
|
+
this.name = "PinnerError";
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
var ConfigurationError = class extends PinnerError {
|
|
13
|
+
constructor(message, cause) {
|
|
14
|
+
super("CONFIGURATION_ERROR", message, false, cause);
|
|
15
|
+
this.name = "ConfigurationError";
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
var AuthenticationError = class extends PinnerError {
|
|
19
|
+
constructor(message = "Authentication failed", cause) {
|
|
20
|
+
super("AUTHENTICATION_ERROR", message, false, cause);
|
|
21
|
+
this.name = "AuthenticationError";
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
var UploadError = class extends PinnerError {
|
|
25
|
+
code = "UPLOAD_ERROR";
|
|
26
|
+
constructor(message, retryable = false, cause) {
|
|
27
|
+
super("UPLOAD_ERROR", message, retryable, cause);
|
|
28
|
+
this.retryable = retryable;
|
|
29
|
+
this.name = "UploadError";
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
var NetworkError = class extends UploadError {
|
|
33
|
+
constructor(message = "Network request failed", cause) {
|
|
34
|
+
super(message, true, cause);
|
|
35
|
+
this.name = "NetworkError";
|
|
36
|
+
this.code = "NETWORK_ERROR";
|
|
37
|
+
this.retryable = true;
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
var ValidationError = class extends UploadError {
|
|
41
|
+
constructor(message, field, cause) {
|
|
42
|
+
super(message, false, cause);
|
|
43
|
+
this.field = field;
|
|
44
|
+
this.name = "ValidationError";
|
|
45
|
+
this.code = "VALIDATION_ERROR";
|
|
46
|
+
this.retryable = false;
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
var EmptyFileError = class extends ValidationError {
|
|
50
|
+
constructor(message = "Cannot upload empty file", cause) {
|
|
51
|
+
super(message, "file", cause);
|
|
52
|
+
this.name = "EmptyFileError";
|
|
53
|
+
this.code = "EMPTY_FILE_ERROR";
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
var TimeoutError = class extends UploadError {
|
|
57
|
+
constructor(message = "Request timed out", cause) {
|
|
58
|
+
super(message, true, cause);
|
|
59
|
+
this.name = "TimeoutError";
|
|
60
|
+
this.code = "TIMEOUT_ERROR";
|
|
61
|
+
this.retryable = true;
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
var PinError = class extends PinnerError {
|
|
65
|
+
constructor(message = "Pin operation failed", retryable = false, cause) {
|
|
66
|
+
super("PIN_ERROR", message, retryable, cause);
|
|
67
|
+
this.name = "PinError";
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
var NotFoundError = class extends PinError {
|
|
71
|
+
constructor(message = "Resource not found", cause) {
|
|
72
|
+
super(message, false, cause);
|
|
73
|
+
this.name = "NotFoundError";
|
|
74
|
+
this.code = "NOT_FOUND";
|
|
75
|
+
this.retryable = false;
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
var RateLimitError = class extends PinError {
|
|
79
|
+
/**
|
|
80
|
+
* Seconds to wait before retry.
|
|
81
|
+
*/
|
|
82
|
+
retryAfter;
|
|
83
|
+
constructor(message = "Rate limit exceeded", retryAfter, cause) {
|
|
84
|
+
super(message, true, cause);
|
|
85
|
+
this.name = "RateLimitError";
|
|
86
|
+
this.code = "RATE_LIMIT_EXCEEDED";
|
|
87
|
+
this.retryable = true;
|
|
88
|
+
this.retryAfter = retryAfter;
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
//#endregion
|
|
93
|
+
exports.AuthenticationError = AuthenticationError;
|
|
94
|
+
exports.ConfigurationError = ConfigurationError;
|
|
95
|
+
exports.EmptyFileError = EmptyFileError;
|
|
96
|
+
exports.NetworkError = NetworkError;
|
|
97
|
+
exports.NotFoundError = NotFoundError;
|
|
98
|
+
exports.PinError = PinError;
|
|
99
|
+
exports.PinnerError = PinnerError;
|
|
100
|
+
exports.RateLimitError = RateLimitError;
|
|
101
|
+
exports.TimeoutError = TimeoutError;
|
|
102
|
+
exports.UploadError = UploadError;
|
|
103
|
+
exports.ValidationError = ValidationError;
|
|
104
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../../../src/errors/index.ts"],"sourcesContent":["export class PinnerError extends Error {\n constructor(\n public code: string,\n message: string,\n public retryable: boolean,\n public cause?: Error\n ) {\n super(message);\n this.name = \"PinnerError\";\n }\n}\n\nexport class ConfigurationError extends PinnerError {\n constructor(message: string, cause?: Error) {\n super(\"CONFIGURATION_ERROR\", message, false, cause);\n this.name = \"ConfigurationError\";\n }\n}\n\nexport class AuthenticationError extends PinnerError {\n constructor(message: string = \"Authentication failed\", cause?: Error) {\n super(\"AUTHENTICATION_ERROR\", message, false, cause);\n this.name = \"AuthenticationError\";\n }\n}\n\nexport class UploadError extends PinnerError {\n code = \"UPLOAD_ERROR\";\n\n constructor(\n message: string,\n public override retryable: boolean = false,\n cause?: Error\n ) {\n super(\"UPLOAD_ERROR\", message, retryable, cause);\n this.name = \"UploadError\";\n }\n}\n\nexport class NetworkError extends UploadError {\n constructor(message: string = \"Network request failed\", cause?: Error) {\n super(message, true, cause);\n this.name = \"NetworkError\";\n this.code = \"NETWORK_ERROR\";\n this.retryable = true;\n }\n}\n\nexport class ValidationError extends UploadError {\n constructor(message: string, public field?: string, cause?: Error) {\n super(message, false, cause);\n this.name = \"ValidationError\";\n this.code = \"VALIDATION_ERROR\";\n this.retryable = false;\n }\n}\n\nexport class EmptyFileError extends ValidationError {\n constructor(message: string = \"Cannot upload empty file\", cause?: Error) {\n super(message, \"file\", cause);\n this.name = \"EmptyFileError\";\n this.code = \"EMPTY_FILE_ERROR\";\n }\n}\n\nexport class TimeoutError extends UploadError {\n constructor(message: string = \"Request timed out\", cause?: Error) {\n super(message, true, cause);\n this.name = \"TimeoutError\";\n this.code = \"TIMEOUT_ERROR\";\n this.retryable = true;\n }\n}\n\nexport class PinError extends PinnerError {\n constructor(message: string = \"Pin operation failed\", retryable: boolean = false, cause?: Error) {\n super(\"PIN_ERROR\", message, retryable, cause);\n this.name = \"PinError\";\n }\n}\n\nexport class NotFoundError extends PinError {\n constructor(message: string = \"Resource not found\", cause?: Error) {\n super(message, false, cause);\n this.name = \"NotFoundError\";\n this.code = \"NOT_FOUND\";\n this.retryable = false;\n }\n}\n\nexport class RateLimitError extends PinError {\n /**\n * Seconds to wait before retry.\n */\n retryAfter?: number;\n\n constructor(message: string = \"Rate limit exceeded\", retryAfter?: number, cause?: Error) {\n super(message, true, cause);\n this.name = \"RateLimitError\";\n this.code = \"RATE_LIMIT_EXCEEDED\";\n this.retryable = true;\n this.retryAfter = retryAfter;\n }\n}\n\nexport class EnvironmentError extends PinnerError {\n constructor(message: string = \"Unsupported environment\", cause?: Error) {\n super(\"ENVIRONMENT_ERROR\", message, false, cause);\n this.name = \"EnvironmentError\";\n }\n}"],"mappings":";;AAAA,IAAa,cAAb,cAAiC,MAAM;CACrC,YACE,AAAO,MACP,SACA,AAAO,WACP,AAAO,OACP;AACA,QAAM,QAAQ;EALP;EAEA;EACA;AAGP,OAAK,OAAO;;;AAIhB,IAAa,qBAAb,cAAwC,YAAY;CAClD,YAAY,SAAiB,OAAe;AAC1C,QAAM,uBAAuB,SAAS,OAAO,MAAM;AACnD,OAAK,OAAO;;;AAIhB,IAAa,sBAAb,cAAyC,YAAY;CACnD,YAAY,UAAkB,yBAAyB,OAAe;AACpE,QAAM,wBAAwB,SAAS,OAAO,MAAM;AACpD,OAAK,OAAO;;;AAIhB,IAAa,cAAb,cAAiC,YAAY;CAC3C,OAAO;CAEP,YACE,SACA,AAAgB,YAAqB,OACrC,OACA;AACA,QAAM,gBAAgB,SAAS,WAAW,MAAM;EAHhC;AAIhB,OAAK,OAAO;;;AAIhB,IAAa,eAAb,cAAkC,YAAY;CAC5C,YAAY,UAAkB,0BAA0B,OAAe;AACrE,QAAM,SAAS,MAAM,MAAM;AAC3B,OAAK,OAAO;AACZ,OAAK,OAAO;AACZ,OAAK,YAAY;;;AAIrB,IAAa,kBAAb,cAAqC,YAAY;CAC/C,YAAY,SAAiB,AAAO,OAAgB,OAAe;AACjE,QAAM,SAAS,OAAO,MAAM;EADM;AAElC,OAAK,OAAO;AACZ,OAAK,OAAO;AACZ,OAAK,YAAY;;;AAIrB,IAAa,iBAAb,cAAoC,gBAAgB;CAClD,YAAY,UAAkB,4BAA4B,OAAe;AACvE,QAAM,SAAS,QAAQ,MAAM;AAC7B,OAAK,OAAO;AACZ,OAAK,OAAO;;;AAIhB,IAAa,eAAb,cAAkC,YAAY;CAC5C,YAAY,UAAkB,qBAAqB,OAAe;AAChE,QAAM,SAAS,MAAM,MAAM;AAC3B,OAAK,OAAO;AACZ,OAAK,OAAO;AACZ,OAAK,YAAY;;;AAIrB,IAAa,WAAb,cAA8B,YAAY;CACxC,YAAY,UAAkB,wBAAwB,YAAqB,OAAO,OAAe;AAC/F,QAAM,aAAa,SAAS,WAAW,MAAM;AAC7C,OAAK,OAAO;;;AAIhB,IAAa,gBAAb,cAAmC,SAAS;CAC1C,YAAY,UAAkB,sBAAsB,OAAe;AACjE,QAAM,SAAS,OAAO,MAAM;AAC5B,OAAK,OAAO;AACZ,OAAK,OAAO;AACZ,OAAK,YAAY;;;AAIrB,IAAa,iBAAb,cAAoC,SAAS;;;;CAI3C;CAEA,YAAY,UAAkB,uBAAuB,YAAqB,OAAe;AACvF,QAAM,SAAS,MAAM,MAAM;AAC3B,OAAK,OAAO;AACZ,OAAK,OAAO;AACZ,OAAK,YAAY;AACjB,OAAK,aAAa"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
//#region src/errors/index.d.ts
|
|
2
|
+
declare class PinnerError extends Error {
|
|
3
|
+
code: string;
|
|
4
|
+
retryable: boolean;
|
|
5
|
+
cause?: Error | undefined;
|
|
6
|
+
constructor(code: string, message: string, retryable: boolean, cause?: Error | undefined);
|
|
7
|
+
}
|
|
8
|
+
declare class ConfigurationError extends PinnerError {
|
|
9
|
+
constructor(message: string, cause?: Error);
|
|
10
|
+
}
|
|
11
|
+
declare class AuthenticationError extends PinnerError {
|
|
12
|
+
constructor(message?: string, cause?: Error);
|
|
13
|
+
}
|
|
14
|
+
declare class UploadError extends PinnerError {
|
|
15
|
+
retryable: boolean;
|
|
16
|
+
code: string;
|
|
17
|
+
constructor(message: string, retryable?: boolean, cause?: Error);
|
|
18
|
+
}
|
|
19
|
+
declare class NetworkError extends UploadError {
|
|
20
|
+
constructor(message?: string, cause?: Error);
|
|
21
|
+
}
|
|
22
|
+
declare class ValidationError extends UploadError {
|
|
23
|
+
field?: string | undefined;
|
|
24
|
+
constructor(message: string, field?: string | undefined, cause?: Error);
|
|
25
|
+
}
|
|
26
|
+
declare class EmptyFileError extends ValidationError {
|
|
27
|
+
constructor(message?: string, cause?: Error);
|
|
28
|
+
}
|
|
29
|
+
declare class TimeoutError extends UploadError {
|
|
30
|
+
constructor(message?: string, cause?: Error);
|
|
31
|
+
}
|
|
32
|
+
declare class PinError extends PinnerError {
|
|
33
|
+
constructor(message?: string, retryable?: boolean, cause?: Error);
|
|
34
|
+
}
|
|
35
|
+
declare class NotFoundError extends PinError {
|
|
36
|
+
constructor(message?: string, cause?: Error);
|
|
37
|
+
}
|
|
38
|
+
declare class RateLimitError extends PinError {
|
|
39
|
+
/**
|
|
40
|
+
* Seconds to wait before retry.
|
|
41
|
+
*/
|
|
42
|
+
retryAfter?: number;
|
|
43
|
+
constructor(message?: string, retryAfter?: number, cause?: Error);
|
|
44
|
+
}
|
|
45
|
+
//#endregion
|
|
46
|
+
export { AuthenticationError, ConfigurationError, EmptyFileError, NetworkError, NotFoundError, PinError, PinnerError, RateLimitError, TimeoutError, UploadError, ValidationError };
|
|
47
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
const require_mime_types = require('./types/mime-types.cjs');
|
|
2
|
+
const require_stream = require('./utils/stream.cjs');
|
|
3
|
+
const require_unstorage_base = require('./blockstore/unstorage-base.cjs');
|
|
4
|
+
const require_unstorage = require('./blockstore/unstorage.cjs');
|
|
5
|
+
require('./blockstore/index.cjs');
|
|
6
|
+
const require_car = require('./upload/car.cjs');
|
|
7
|
+
const require_index$1 = require('./errors/index.cjs');
|
|
8
|
+
const require_manager = require('./upload/manager.cjs');
|
|
9
|
+
const require_pinner = require('./pinner.cjs');
|
|
10
|
+
const require_type_guards = require('./types/type-guards.cjs');
|
|
11
|
+
const require_adapter = require('./adapters/pinata/v2/adapter.cjs');
|
|
12
|
+
const require_adapter$1 = require('./adapters/pinata/legacy/adapter.cjs');
|
|
13
|
+
require('./adapters/pinata/index.cjs');
|
|
14
|
+
|
|
15
|
+
exports.AuthenticationError = require_index$1.AuthenticationError;
|
|
16
|
+
exports.ConfigurationError = require_index$1.ConfigurationError;
|
|
17
|
+
exports.EmptyFileError = require_index$1.EmptyFileError;
|
|
18
|
+
exports.FILE_EXTENSION_CAR = require_mime_types.FILE_EXTENSION_CAR;
|
|
19
|
+
exports.MIME_TYPE_CAR = require_mime_types.MIME_TYPE_CAR;
|
|
20
|
+
exports.MIME_TYPE_OCTET_STREAM = require_mime_types.MIME_TYPE_OCTET_STREAM;
|
|
21
|
+
exports.NetworkError = require_index$1.NetworkError;
|
|
22
|
+
exports.NotFoundError = require_index$1.NotFoundError;
|
|
23
|
+
exports.PinError = require_index$1.PinError;
|
|
24
|
+
exports.Pinner = require_pinner.Pinner;
|
|
25
|
+
exports.PinnerError = require_index$1.PinnerError;
|
|
26
|
+
exports.RateLimitError = require_index$1.RateLimitError;
|
|
27
|
+
exports.TimeoutError = require_index$1.TimeoutError;
|
|
28
|
+
exports.UploadError = require_index$1.UploadError;
|
|
29
|
+
exports.UploadManager = require_manager.UploadManager;
|
|
30
|
+
exports.ValidationError = require_index$1.ValidationError;
|
|
31
|
+
exports.asyncGeneratorToReadableStream = require_stream.asyncGeneratorToReadableStream;
|
|
32
|
+
exports.calculateStreamSize = require_stream.calculateStreamSize;
|
|
33
|
+
exports.createBlockstore = require_unstorage.createBlockstore;
|
|
34
|
+
exports.createDatastore = require_unstorage.createDatastore;
|
|
35
|
+
exports.destroyCarPreprocessor = require_car.destroyCarPreprocessor;
|
|
36
|
+
exports.isAuthenticationError = require_type_guards.isAuthenticationError;
|
|
37
|
+
exports.isCarFile = require_car.isCarFile;
|
|
38
|
+
exports.isRetryable = require_type_guards.isRetryable;
|
|
39
|
+
exports.pinataAdapter = require_adapter.pinataAdapter;
|
|
40
|
+
exports.pinataLegacyAdapter = require_adapter$1.pinataLegacyAdapter;
|
|
41
|
+
exports.preprocessToCar = require_car.preprocessToCar;
|
|
42
|
+
exports.readableStreamToAsyncIterable = require_stream.readableStreamToAsyncIterable;
|
|
43
|
+
exports.setDriverFactory = require_unstorage_base.setDriverFactory;
|
|
44
|
+
exports.streamToBlob = require_stream.streamToBlob;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { PinnerConfig } from "./config.cjs";
|
|
2
|
+
import { UploadInput, UploadOperation, UploadOptions, UploadProgress, UploadResult } from "./types/upload.cjs";
|
|
3
|
+
import { AbortOptions, RemoteAddOptions, RemoteLsOptions, RemotePin, RemotePins } from "./types/pin.cjs";
|
|
4
|
+
import { Pinner } from "./pinner.cjs";
|
|
5
|
+
import { UploadManager } from "./upload/manager.cjs";
|
|
6
|
+
import { CarPreprocessOptions, CarPreprocessResult, destroyCarPreprocessor, isCarFile, preprocessToCar } from "./upload/car.cjs";
|
|
7
|
+
import { AuthenticationError, ConfigurationError, EmptyFileError, NetworkError, NotFoundError, PinError, PinnerError, RateLimitError, TimeoutError, UploadError, ValidationError } from "./errors/index.cjs";
|
|
8
|
+
import { isAuthenticationError, isRetryable } from "./types/type-guards.cjs";
|
|
9
|
+
import { FILE_EXTENSION_CAR, MIME_TYPE_CAR, MIME_TYPE_OCTET_STREAM } from "./types/mime-types.cjs";
|
|
10
|
+
import { UnstorageBlockstoreOptions, setDriverFactory } from "./blockstore/unstorage-base.cjs";
|
|
11
|
+
import { createBlockstore, createDatastore } from "./blockstore/unstorage.cjs";
|
|
12
|
+
import { asyncGeneratorToReadableStream, calculateStreamSize, readableStreamToAsyncIterable, streamToBlob } from "./utils/stream.cjs";
|
|
13
|
+
import { PinataAdapter } from "./adapters/pinata/v2/adapter-interface.cjs";
|
|
14
|
+
import { pinataAdapter } from "./adapters/pinata/v2/adapter.cjs";
|
|
15
|
+
import { PinataLegacyAdapter, pinataLegacyAdapter } from "./adapters/pinata/legacy/adapter.cjs";
|
|
16
|
+
export { type AbortOptions, AuthenticationError, type CarPreprocessOptions, type CarPreprocessResult, ConfigurationError, EmptyFileError, FILE_EXTENSION_CAR, MIME_TYPE_CAR, MIME_TYPE_OCTET_STREAM, NetworkError, NotFoundError, PinError, type PinataAdapter, type PinataLegacyAdapter, Pinner, type PinnerConfig, PinnerError, RateLimitError, type RemoteAddOptions, type RemoteLsOptions, type RemotePin, type RemotePins, TimeoutError, type UnstorageBlockstoreOptions, UploadError, type UploadInput, UploadManager, type UploadOperation, type UploadOptions, type UploadProgress, type UploadResult, ValidationError, asyncGeneratorToReadableStream, calculateStreamSize, createBlockstore, createDatastore, destroyCarPreprocessor, isAuthenticationError, isCarFile, isRetryable, pinataAdapter, pinataLegacyAdapter, preprocessToCar, readableStreamToAsyncIterable, setDriverFactory, streamToBlob };
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
|
|
2
|
+
const require_index = require('../errors/index.cjs');
|
|
3
|
+
let multiformats_cid = require("multiformats/cid");
|
|
4
|
+
let _ipfs_shipyard_pinning_service_client = require("@ipfs-shipyard/pinning-service-client");
|
|
5
|
+
|
|
6
|
+
//#region src/pin/client.ts
|
|
7
|
+
var PinClient = class {
|
|
8
|
+
client = null;
|
|
9
|
+
config;
|
|
10
|
+
constructor(config) {
|
|
11
|
+
this.config = config;
|
|
12
|
+
}
|
|
13
|
+
getClient() {
|
|
14
|
+
if (this.client) return this.client;
|
|
15
|
+
if (!this.config.jwt) throw new require_index.ConfigurationError("JWT token is required");
|
|
16
|
+
this.client = new _ipfs_shipyard_pinning_service_client.RemotePinningServiceClient(new _ipfs_shipyard_pinning_service_client.Configuration({
|
|
17
|
+
endpointUrl: this.config.endpoint,
|
|
18
|
+
accessToken: this.config.jwt,
|
|
19
|
+
fetchApi: this.config.fetch ?? fetch
|
|
20
|
+
}));
|
|
21
|
+
return this.client;
|
|
22
|
+
}
|
|
23
|
+
async *add(cid, options) {
|
|
24
|
+
const client = this.getClient();
|
|
25
|
+
const pin = {
|
|
26
|
+
cid: cid.toString(),
|
|
27
|
+
name: options?.name,
|
|
28
|
+
meta: options?.metadata,
|
|
29
|
+
origins: options?.origins
|
|
30
|
+
};
|
|
31
|
+
await client.pinsPost({ pin }, { signal: options?.signal });
|
|
32
|
+
yield cid;
|
|
33
|
+
}
|
|
34
|
+
async *ls(options) {
|
|
35
|
+
const response = await this.getClient().pinsGet(this.normalizeListOptions(options), { signal: options?.signal });
|
|
36
|
+
for (const result of response.results) yield this.mapResponse(result);
|
|
37
|
+
}
|
|
38
|
+
async isPinned(cid, options) {
|
|
39
|
+
try {
|
|
40
|
+
await this.get(cid, options);
|
|
41
|
+
return true;
|
|
42
|
+
} catch {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
async get(cid, options) {
|
|
47
|
+
const response = await this.getClient().pinsGet({ cid: [cid.toString()] }, { signal: options?.signal });
|
|
48
|
+
if (response.results.length === 0) throw new require_index.NotFoundError(`Pin not found for CID: ${cid.toString()}`);
|
|
49
|
+
return this.mapResponse(response.results[0]);
|
|
50
|
+
}
|
|
51
|
+
async setMetadata(cid, metadata, options) {
|
|
52
|
+
const client = this.getClient();
|
|
53
|
+
const response = await client.pinsGet({ cid: [cid.toString()] }, { signal: options?.signal });
|
|
54
|
+
if (response.results.length === 0) throw new require_index.NotFoundError(`Pin not found for CID: ${cid.toString()}`);
|
|
55
|
+
const pin = response.results[0];
|
|
56
|
+
await client.pinsRequestidPost({
|
|
57
|
+
requestid: pin.requestid,
|
|
58
|
+
pin: {
|
|
59
|
+
cid: pin.pin.cid,
|
|
60
|
+
name: pin.pin.name,
|
|
61
|
+
meta: metadata,
|
|
62
|
+
origins: pin.pin.origins
|
|
63
|
+
}
|
|
64
|
+
}, { signal: options?.signal });
|
|
65
|
+
}
|
|
66
|
+
async *rm(cid, options) {
|
|
67
|
+
const response = await this.getClient().pinsGet({ cid: [cid.toString()] }, { signal: options?.signal });
|
|
68
|
+
await Promise.all([...response.results].map(async (result) => {
|
|
69
|
+
return this.rmByRequestId(result.requestid, options);
|
|
70
|
+
}));
|
|
71
|
+
yield cid;
|
|
72
|
+
}
|
|
73
|
+
async rmByRequestId(requestId, options) {
|
|
74
|
+
await this.getClient().pinsRequestidDelete({ requestid: requestId }, { signal: options?.signal });
|
|
75
|
+
}
|
|
76
|
+
mapResponse(response) {
|
|
77
|
+
return {
|
|
78
|
+
cid: multiformats_cid.CID.parse(response.pin.cid),
|
|
79
|
+
name: response.pin.name,
|
|
80
|
+
status: response.status,
|
|
81
|
+
created: response.created,
|
|
82
|
+
size: response.pin.meta?.size ? parseInt(response.pin.meta.size, 10) : void 0,
|
|
83
|
+
metadata: response.pin.meta
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
normalizeListOptions(options) {
|
|
87
|
+
const request = {};
|
|
88
|
+
if (options?.limit !== void 0) request.limit = options.limit;
|
|
89
|
+
if (options?.cursor !== void 0) request.after = options.cursor;
|
|
90
|
+
if (options?.status !== void 0) request.status = options.status;
|
|
91
|
+
if (options?.name !== void 0) request.name = options.name;
|
|
92
|
+
return request;
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
//#endregion
|
|
97
|
+
exports.PinClient = PinClient;
|
|
98
|
+
//# sourceMappingURL=client.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.cjs","names":["ConfigurationError","RemotePinningServiceClient","Configuration","NotFoundError","CID"],"sources":["../../../src/pin/client.ts"],"sourcesContent":["import {\n Configuration,\n type Pin,\n type PinStatus,\n RemotePinningServiceClient,\n} from \"@ipfs-shipyard/pinning-service-client\";\nimport type { PinnerConfig } from \"../config\";\nimport type {\n AbortOptions,\n RemoteAddOptions,\n RemoteLsOptions,\n RemotePin,\n RemotePins,\n} from \"@/types/pin\";\nimport { CID } from \"multiformats/cid\";\nimport { ConfigurationError, NotFoundError } from \"@/errors\";\n\nexport class PinClient implements RemotePins {\n private client: RemotePinningServiceClient | null = null;\n private config: PinnerConfig;\n\n constructor(config: PinnerConfig) {\n this.config = config;\n }\n\n protected getClient(): RemotePinningServiceClient {\n if (this.client) {\n return this.client;\n }\n\n if (!this.config.jwt) {\n throw new ConfigurationError(\"JWT token is required\");\n }\n\n const configuration = new Configuration({\n endpointUrl: this.config.endpoint,\n accessToken: this.config.jwt,\n fetchApi: this.config.fetch ?? fetch,\n });\n\n this.client = new RemotePinningServiceClient(configuration);\n return this.client;\n }\n\n async *add(\n cid: CID,\n options?: RemoteAddOptions,\n ): AsyncGenerator<CID, void, undefined> {\n const client = this.getClient();\n\n const pin: Pin = {\n cid: cid.toString(),\n name: options?.name,\n meta: options?.metadata,\n origins: options?.origins,\n };\n\n await client.pinsPost({ pin }, { signal: options?.signal });\n\n yield cid;\n }\n\n async *ls(\n options?: RemoteLsOptions,\n ): AsyncGenerator<RemotePin, void, undefined> {\n const client = this.getClient();\n const response = await client.pinsGet(this.normalizeListOptions(options), {\n signal: options?.signal,\n });\n\n for (const result of response.results) {\n yield this.mapResponse(result);\n }\n }\n\n async isPinned(cid: CID, options?: AbortOptions): Promise<boolean> {\n try {\n await this.get(cid, options);\n return true;\n } catch {\n return false;\n }\n }\n\n async get(cid: CID, options?: AbortOptions): Promise<RemotePin> {\n const client = this.getClient();\n const response = await client.pinsGet(\n { cid: [cid.toString()] },\n {\n signal: options?.signal,\n },\n );\n\n if (response.results.length === 0) {\n throw new NotFoundError(`Pin not found for CID: ${cid.toString()}`);\n }\n\n return this.mapResponse(response.results[0]);\n }\n\n async setMetadata(\n cid: CID,\n metadata: Record<string, string> | undefined,\n options?: AbortOptions,\n ): Promise<void> {\n const client = this.getClient();\n const response = await client.pinsGet(\n { cid: [cid.toString()] },\n {\n signal: options?.signal,\n },\n );\n\n if (response.results.length === 0) {\n throw new NotFoundError(`Pin not found for CID: ${cid.toString()}`);\n }\n\n const pin = response.results[0];\n await client.pinsRequestidPost(\n {\n requestid: pin.requestid,\n pin: {\n cid: pin.pin.cid,\n name: pin.pin.name,\n meta: metadata,\n origins: pin.pin.origins,\n },\n },\n { signal: options?.signal },\n );\n }\n\n async *rm(\n cid: CID,\n options?: AbortOptions,\n ): AsyncGenerator<CID, void, undefined> {\n const client = this.getClient();\n const response = await client.pinsGet(\n { cid: [cid.toString()] },\n { signal: options?.signal },\n );\n\n // Delete all pins for this CID by their request IDs\n await Promise.all(\n [...response.results].map(async (result) => {\n return this.rmByRequestId(result.requestid, options);\n }),\n );\n\n yield cid;\n }\n\n async rmByRequestId(requestId: string, options?: AbortOptions): Promise<void> {\n const client = this.getClient();\n await client.pinsRequestidDelete(\n { requestid: requestId },\n { signal: options?.signal },\n );\n }\n\n private mapResponse(response: PinStatus): RemotePin {\n return {\n cid: CID.parse(response.pin.cid),\n name: response.pin.name,\n status: response.status,\n created: response.created,\n size: response.pin.meta?.size\n ? parseInt(response.pin.meta.size, 10)\n : undefined,\n metadata: response.pin.meta,\n };\n }\n\n private normalizeListOptions(\n options?: RemoteLsOptions,\n ): Record<string, unknown> {\n const request: Record<string, unknown> = {};\n\n if (options?.limit !== undefined) {\n request.limit = options.limit;\n }\n if (options?.cursor !== undefined) {\n request.after = options.cursor;\n }\n if (options?.status !== undefined) {\n request.status = options.status;\n }\n if (options?.name !== undefined) {\n request.name = options.name;\n }\n\n return request;\n }\n}\n"],"mappings":";;;;;;AAiBA,IAAa,YAAb,MAA6C;CAC3C,AAAQ,SAA4C;CACpD,AAAQ;CAER,YAAY,QAAsB;AAChC,OAAK,SAAS;;CAGhB,AAAU,YAAwC;AAChD,MAAI,KAAK,OACP,QAAO,KAAK;AAGd,MAAI,CAAC,KAAK,OAAO,IACf,OAAM,IAAIA,iCAAmB,wBAAwB;AASvD,OAAK,SAAS,IAAIC,iEANI,IAAIC,oDAAc;GACtC,aAAa,KAAK,OAAO;GACzB,aAAa,KAAK,OAAO;GACzB,UAAU,KAAK,OAAO,SAAS;GAChC,CAAC,CAEyD;AAC3D,SAAO,KAAK;;CAGd,OAAO,IACL,KACA,SACsC;EACtC,MAAM,SAAS,KAAK,WAAW;EAE/B,MAAM,MAAW;GACf,KAAK,IAAI,UAAU;GACnB,MAAM,SAAS;GACf,MAAM,SAAS;GACf,SAAS,SAAS;GACnB;AAED,QAAM,OAAO,SAAS,EAAE,KAAK,EAAE,EAAE,QAAQ,SAAS,QAAQ,CAAC;AAE3D,QAAM;;CAGR,OAAO,GACL,SAC4C;EAE5C,MAAM,WAAW,MADF,KAAK,WAAW,CACD,QAAQ,KAAK,qBAAqB,QAAQ,EAAE,EACxE,QAAQ,SAAS,QAClB,CAAC;AAEF,OAAK,MAAM,UAAU,SAAS,QAC5B,OAAM,KAAK,YAAY,OAAO;;CAIlC,MAAM,SAAS,KAAU,SAA0C;AACjE,MAAI;AACF,SAAM,KAAK,IAAI,KAAK,QAAQ;AAC5B,UAAO;UACD;AACN,UAAO;;;CAIX,MAAM,IAAI,KAAU,SAA4C;EAE9D,MAAM,WAAW,MADF,KAAK,WAAW,CACD,QAC5B,EAAE,KAAK,CAAC,IAAI,UAAU,CAAC,EAAE,EACzB,EACE,QAAQ,SAAS,QAClB,CACF;AAED,MAAI,SAAS,QAAQ,WAAW,EAC9B,OAAM,IAAIC,4BAAc,0BAA0B,IAAI,UAAU,GAAG;AAGrE,SAAO,KAAK,YAAY,SAAS,QAAQ,GAAG;;CAG9C,MAAM,YACJ,KACA,UACA,SACe;EACf,MAAM,SAAS,KAAK,WAAW;EAC/B,MAAM,WAAW,MAAM,OAAO,QAC5B,EAAE,KAAK,CAAC,IAAI,UAAU,CAAC,EAAE,EACzB,EACE,QAAQ,SAAS,QAClB,CACF;AAED,MAAI,SAAS,QAAQ,WAAW,EAC9B,OAAM,IAAIA,4BAAc,0BAA0B,IAAI,UAAU,GAAG;EAGrE,MAAM,MAAM,SAAS,QAAQ;AAC7B,QAAM,OAAO,kBACX;GACE,WAAW,IAAI;GACf,KAAK;IACH,KAAK,IAAI,IAAI;IACb,MAAM,IAAI,IAAI;IACd,MAAM;IACN,SAAS,IAAI,IAAI;IAClB;GACF,EACD,EAAE,QAAQ,SAAS,QAAQ,CAC5B;;CAGH,OAAO,GACL,KACA,SACsC;EAEtC,MAAM,WAAW,MADF,KAAK,WAAW,CACD,QAC5B,EAAE,KAAK,CAAC,IAAI,UAAU,CAAC,EAAE,EACzB,EAAE,QAAQ,SAAS,QAAQ,CAC5B;AAGD,QAAM,QAAQ,IACZ,CAAC,GAAG,SAAS,QAAQ,CAAC,IAAI,OAAO,WAAW;AAC1C,UAAO,KAAK,cAAc,OAAO,WAAW,QAAQ;IACpD,CACH;AAED,QAAM;;CAGR,MAAM,cAAc,WAAmB,SAAuC;AAE5E,QADe,KAAK,WAAW,CAClB,oBACX,EAAE,WAAW,WAAW,EACxB,EAAE,QAAQ,SAAS,QAAQ,CAC5B;;CAGH,AAAQ,YAAY,UAAgC;AAClD,SAAO;GACL,KAAKC,qBAAI,MAAM,SAAS,IAAI,IAAI;GAChC,MAAM,SAAS,IAAI;GACnB,QAAQ,SAAS;GACjB,SAAS,SAAS;GAClB,MAAM,SAAS,IAAI,MAAM,OACrB,SAAS,SAAS,IAAI,KAAK,MAAM,GAAG,GACpC;GACJ,UAAU,SAAS,IAAI;GACxB;;CAGH,AAAQ,qBACN,SACyB;EACzB,MAAM,UAAmC,EAAE;AAE3C,MAAI,SAAS,UAAU,OACrB,SAAQ,QAAQ,QAAQ;AAE1B,MAAI,SAAS,WAAW,OACtB,SAAQ,QAAQ,QAAQ;AAE1B,MAAI,SAAS,WAAW,OACtB,SAAQ,SAAS,QAAQ;AAE3B,MAAI,SAAS,SAAS,OACpB,SAAQ,OAAO,QAAQ;AAGzB,SAAO"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const require_client = require('./client.cjs');
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
const require_rolldown_runtime = require('./_virtual/rolldown_runtime.cjs');
|
|
2
|
+
const require_manager = require('./upload/manager.cjs');
|
|
3
|
+
const require_builder = require('./upload/builder.cjs');
|
|
4
|
+
require('./upload/index.cjs');
|
|
5
|
+
const require_client = require('./pin/client.cjs');
|
|
6
|
+
require('./pin/index.cjs');
|
|
7
|
+
let multiformats_cid = require("multiformats/cid");
|
|
8
|
+
|
|
9
|
+
//#region src/pinner.ts
|
|
10
|
+
var Pinner = class {
|
|
11
|
+
uploadManager;
|
|
12
|
+
_pins;
|
|
13
|
+
_upload;
|
|
14
|
+
constructor(config) {
|
|
15
|
+
this.uploadManager = new require_manager.UploadManager(config);
|
|
16
|
+
this._pins = new require_client.PinClient(config);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Access the remote pins interface.
|
|
20
|
+
*/
|
|
21
|
+
get pins() {
|
|
22
|
+
return this._pins;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Upload interface that works as both a method and a builder namespace.
|
|
26
|
+
*
|
|
27
|
+
* As a method: upload(file, options) -> UploadOperation
|
|
28
|
+
* As a property: upload.file(), upload.json(), etc. -> Builder
|
|
29
|
+
*/
|
|
30
|
+
get upload() {
|
|
31
|
+
if (!this._upload) {
|
|
32
|
+
const builderNamespace = require_builder.createUploadBuilderNamespace(this);
|
|
33
|
+
const uploadMethod = async (file, options) => {
|
|
34
|
+
return this.uploadManager.upload(file, options);
|
|
35
|
+
};
|
|
36
|
+
this._upload = new Proxy(uploadMethod, { get(target, prop) {
|
|
37
|
+
if (prop in builderNamespace) return Reflect.get(builderNamespace, prop);
|
|
38
|
+
return Reflect.get(target, prop);
|
|
39
|
+
} });
|
|
40
|
+
}
|
|
41
|
+
return this._upload;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Upload a file and wait for completion.
|
|
45
|
+
* Convenience method for simple use cases where controls aren't needed.
|
|
46
|
+
*/
|
|
47
|
+
async uploadAndWait(file, options) {
|
|
48
|
+
return (await this.upload(file, options)).result;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Wait for an operation to complete or reach a settled state.
|
|
52
|
+
* @param input Either an operation ID (number) or an UploadResult
|
|
53
|
+
* @param options Polling options (interval, timeout, settledStates)
|
|
54
|
+
* @returns UploadResult with operation status merged in
|
|
55
|
+
*/
|
|
56
|
+
async waitForOperation(input, options) {
|
|
57
|
+
return this.uploadManager.waitForOperation(input, options);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Upload a directory to IPFS.
|
|
61
|
+
*/
|
|
62
|
+
async uploadDirectory(files, options) {
|
|
63
|
+
return this.uploadManager.uploadDirectory(files, options);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Upload a CAR file without preprocessing.
|
|
67
|
+
* This is useful for passthrough of pre-generated CAR files.
|
|
68
|
+
*/
|
|
69
|
+
async uploadCar(file, options) {
|
|
70
|
+
return this.uploadManager.uploadCar(file, options);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Pin existing content by CID.
|
|
74
|
+
*/
|
|
75
|
+
async pinByHash(cid, options) {
|
|
76
|
+
const cidObj = typeof cid === "string" ? multiformats_cid.CID.parse(cid) : cid;
|
|
77
|
+
return this.pins.add(cidObj, options);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* List pinned content.
|
|
81
|
+
*/
|
|
82
|
+
async listPins(options) {
|
|
83
|
+
const pins = [];
|
|
84
|
+
for await (const pin of this.pins.ls(options)) pins.push(pin);
|
|
85
|
+
return pins;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Get pin status.
|
|
89
|
+
*/
|
|
90
|
+
async getPinStatus(cid) {
|
|
91
|
+
const cidObj = typeof cid === "string" ? multiformats_cid.CID.parse(cid) : cid;
|
|
92
|
+
return this.pins.get(cidObj);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Check if content is pinned.
|
|
96
|
+
*/
|
|
97
|
+
async isPinned(cid) {
|
|
98
|
+
const cidObj = typeof cid === "string" ? multiformats_cid.CID.parse(cid) : cid;
|
|
99
|
+
return this.pins.isPinned(cidObj);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Update pin metadata.
|
|
103
|
+
*/
|
|
104
|
+
async setPinMetadata(cid, metadata) {
|
|
105
|
+
const cidObj = typeof cid === "string" ? multiformats_cid.CID.parse(cid) : cid;
|
|
106
|
+
return this.pins.setMetadata(cidObj, metadata);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Remove a pin. The block may be deleted when garbage collection is run.
|
|
110
|
+
*/
|
|
111
|
+
async unpin(cid, options) {
|
|
112
|
+
const cidObj = typeof cid === "string" ? multiformats_cid.CID.parse(cid) : cid;
|
|
113
|
+
const generator = this.pins.rm(cidObj, options);
|
|
114
|
+
for await (const _ of generator);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Remove a pin by request ID. The block may be deleted when garbage collection is run.
|
|
118
|
+
*/
|
|
119
|
+
async unpinByRequestId(requestId, options) {
|
|
120
|
+
return this.pins.rmByRequestId(requestId, options);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Destroy the client and cleanup resources.
|
|
124
|
+
*/
|
|
125
|
+
destroy() {
|
|
126
|
+
this.uploadManager.destroy();
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
//#endregion
|
|
131
|
+
exports.Pinner = Pinner;
|
|
132
|
+
//# sourceMappingURL=pinner.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pinner.cjs","names":["UploadManager","PinClient","createUploadBuilderNamespace","CID"],"sources":["../../src/pinner.ts"],"sourcesContent":["import type { PinnerConfig } from \"./config\";\nimport { UploadManager } from \"./upload\";\nimport { PinClient } from \"./pin\";\nimport type { UploadMethodAndBuilder } from \"@/upload/builder\";\nimport { createUploadBuilderNamespace } from \"@/upload/builder\";\nimport type {\n UploadOperation,\n UploadOptions,\n UploadResult,\n} from \"@/types/upload\";\nimport type { OperationPollingOptions } from \"@lumeweb/portal-sdk\";\nimport type {\n AbortOptions,\n RemoteAddOptions,\n RemoteLsOptions,\n RemotePin,\n RemotePins,\n} from \"@/types/pin\";\nimport { CID } from \"multiformats/cid\";\n\nexport class Pinner {\n private uploadManager: UploadManager;\n private _pins: RemotePins;\n private _upload?: UploadMethodAndBuilder;\n\n constructor(config: PinnerConfig) {\n this.uploadManager = new UploadManager(config);\n this._pins = new PinClient(config);\n }\n\n /**\n * Access the remote pins interface.\n */\n get pins(): RemotePins {\n return this._pins;\n }\n\n /**\n * Upload interface that works as both a method and a builder namespace.\n *\n * As a method: upload(file, options) -> UploadOperation\n * As a property: upload.file(), upload.json(), etc. -> Builder\n */\n get upload(): UploadMethodAndBuilder {\n if (!this._upload) {\n const builderNamespace = createUploadBuilderNamespace(this);\n const uploadMethod = async (\n file: File,\n options?: UploadOptions,\n ): Promise<UploadOperation> => {\n return this.uploadManager.upload(file, options);\n };\n\n this._upload = new Proxy(uploadMethod, {\n get(target, prop) {\n if (prop in builderNamespace) {\n return Reflect.get(builderNamespace, prop);\n }\n return Reflect.get(target, prop);\n },\n }) as UploadMethodAndBuilder;\n }\n return this._upload;\n }\n\n /**\n * Upload a file and wait for completion.\n * Convenience method for simple use cases where controls aren't needed.\n */\n async uploadAndWait(\n file: File,\n options?: UploadOptions,\n ): Promise<UploadResult> {\n const operation = await this.upload(file, options);\n return operation.result;\n }\n\n /**\n * Wait for an operation to complete or reach a settled state.\n * @param input Either an operation ID (number) or an UploadResult\n * @param options Polling options (interval, timeout, settledStates)\n * @returns UploadResult with operation status merged in\n */\n async waitForOperation(\n input: number | UploadResult,\n options?: OperationPollingOptions,\n ): Promise<UploadResult> {\n return this.uploadManager.waitForOperation(input, options);\n }\n\n /**\n * Upload a directory to IPFS.\n */\n async uploadDirectory(\n files: File[],\n options?: UploadOptions,\n ): Promise<UploadOperation> {\n return this.uploadManager.uploadDirectory(files, options);\n }\n\n /**\n * Upload a CAR file without preprocessing.\n * This is useful for passthrough of pre-generated CAR files.\n */\n async uploadCar(\n file: File | ReadableStream<Uint8Array>,\n options?: UploadOptions,\n ): Promise<UploadOperation> {\n return this.uploadManager.uploadCar(file, options);\n }\n\n /**\n * Pin existing content by CID.\n */\n async pinByHash(\n cid: string | CID,\n options?: RemoteAddOptions,\n ): Promise<AsyncGenerator<CID, void, undefined>> {\n const cidObj = typeof cid === \"string\" ? CID.parse(cid) : cid;\n return this.pins.add(cidObj, options);\n }\n\n /**\n * List pinned content.\n */\n async listPins(options?: RemoteLsOptions): Promise<RemotePin[]> {\n const pins: RemotePin[] = [];\n for await (const pin of this.pins.ls(options)) {\n pins.push(pin);\n }\n return pins;\n }\n\n /**\n * Get pin status.\n */\n async getPinStatus(cid: string | CID): Promise<RemotePin> {\n const cidObj = typeof cid === \"string\" ? CID.parse(cid) : cid;\n return this.pins.get(cidObj);\n }\n\n /**\n * Check if content is pinned.\n */\n async isPinned(cid: string | CID): Promise<boolean> {\n const cidObj = typeof cid === \"string\" ? CID.parse(cid) : cid;\n return this.pins.isPinned(cidObj);\n }\n\n /**\n * Update pin metadata.\n */\n async setPinMetadata(\n cid: string | CID,\n metadata: Record<string, string> | undefined,\n ): Promise<void> {\n const cidObj = typeof cid === \"string\" ? CID.parse(cid) : cid;\n return this.pins.setMetadata(cidObj, metadata);\n }\n\n /**\n * Remove a pin. The block may be deleted when garbage collection is run.\n */\n async unpin(cid: string | CID, options?: AbortOptions): Promise<void> {\n const cidObj = typeof cid === \"string\" ? CID.parse(cid) : cid;\n const generator = this.pins.rm(cidObj, options);\n for await (const _ of generator) {\n // Consume the generator to complete the unpin operation\n }\n }\n\n /**\n * Remove a pin by request ID. The block may be deleted when garbage collection is run.\n */\n async unpinByRequestId(requestId: string, options?: AbortOptions): Promise<void> {\n return this.pins.rmByRequestId(requestId, options);\n }\n\n /**\n * Destroy the client and cleanup resources.\n */\n destroy(): void {\n this.uploadManager.destroy();\n }\n}\n"],"mappings":";;;;;;;;;AAoBA,IAAa,SAAb,MAAoB;CAClB,AAAQ;CACR,AAAQ;CACR,AAAQ;CAER,YAAY,QAAsB;AAChC,OAAK,gBAAgB,IAAIA,8BAAc,OAAO;AAC9C,OAAK,QAAQ,IAAIC,yBAAU,OAAO;;;;;CAMpC,IAAI,OAAmB;AACrB,SAAO,KAAK;;;;;;;;CASd,IAAI,SAAiC;AACnC,MAAI,CAAC,KAAK,SAAS;GACjB,MAAM,mBAAmBC,6CAA6B,KAAK;GAC3D,MAAM,eAAe,OACnB,MACA,YAC6B;AAC7B,WAAO,KAAK,cAAc,OAAO,MAAM,QAAQ;;AAGjD,QAAK,UAAU,IAAI,MAAM,cAAc,EACrC,IAAI,QAAQ,MAAM;AAChB,QAAI,QAAQ,iBACV,QAAO,QAAQ,IAAI,kBAAkB,KAAK;AAE5C,WAAO,QAAQ,IAAI,QAAQ,KAAK;MAEnC,CAAC;;AAEJ,SAAO,KAAK;;;;;;CAOd,MAAM,cACJ,MACA,SACuB;AAEvB,UADkB,MAAM,KAAK,OAAO,MAAM,QAAQ,EACjC;;;;;;;;CASnB,MAAM,iBACJ,OACA,SACuB;AACvB,SAAO,KAAK,cAAc,iBAAiB,OAAO,QAAQ;;;;;CAM5D,MAAM,gBACJ,OACA,SAC0B;AAC1B,SAAO,KAAK,cAAc,gBAAgB,OAAO,QAAQ;;;;;;CAO3D,MAAM,UACJ,MACA,SAC0B;AAC1B,SAAO,KAAK,cAAc,UAAU,MAAM,QAAQ;;;;;CAMpD,MAAM,UACJ,KACA,SAC+C;EAC/C,MAAM,SAAS,OAAO,QAAQ,WAAWC,qBAAI,MAAM,IAAI,GAAG;AAC1D,SAAO,KAAK,KAAK,IAAI,QAAQ,QAAQ;;;;;CAMvC,MAAM,SAAS,SAAiD;EAC9D,MAAM,OAAoB,EAAE;AAC5B,aAAW,MAAM,OAAO,KAAK,KAAK,GAAG,QAAQ,CAC3C,MAAK,KAAK,IAAI;AAEhB,SAAO;;;;;CAMT,MAAM,aAAa,KAAuC;EACxD,MAAM,SAAS,OAAO,QAAQ,WAAWA,qBAAI,MAAM,IAAI,GAAG;AAC1D,SAAO,KAAK,KAAK,IAAI,OAAO;;;;;CAM9B,MAAM,SAAS,KAAqC;EAClD,MAAM,SAAS,OAAO,QAAQ,WAAWA,qBAAI,MAAM,IAAI,GAAG;AAC1D,SAAO,KAAK,KAAK,SAAS,OAAO;;;;;CAMnC,MAAM,eACJ,KACA,UACe;EACf,MAAM,SAAS,OAAO,QAAQ,WAAWA,qBAAI,MAAM,IAAI,GAAG;AAC1D,SAAO,KAAK,KAAK,YAAY,QAAQ,SAAS;;;;;CAMhD,MAAM,MAAM,KAAmB,SAAuC;EACpE,MAAM,SAAS,OAAO,QAAQ,WAAWA,qBAAI,MAAM,IAAI,GAAG;EAC1D,MAAM,YAAY,KAAK,KAAK,GAAG,QAAQ,QAAQ;AAC/C,aAAW,MAAM,KAAK;;;;;CAQxB,MAAM,iBAAiB,WAAmB,SAAuC;AAC/E,SAAO,KAAK,KAAK,cAAc,WAAW,QAAQ;;;;;CAMpD,UAAgB;AACd,OAAK,cAAc,SAAS"}
|