@ardrive/turbo-sdk 1.26.0 → 1.27.0-alpha.2
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/bundles/web.bundle.min.js +261 -90
- package/lib/cjs/common/events.js +4 -4
- package/lib/cjs/common/factory.js +17 -11
- package/lib/cjs/common/upload.js +8 -7
- package/lib/cjs/utils/readableStream.js +100 -2
- package/lib/cjs/version.js +1 -1
- package/lib/cjs/web/index.js +1 -0
- package/lib/cjs/web/signer.js +128 -56
- package/lib/esm/common/events.js +4 -4
- package/lib/esm/common/factory.js +18 -12
- package/lib/esm/common/upload.js +8 -7
- package/lib/esm/utils/readableStream.js +95 -0
- package/lib/esm/version.js +1 -1
- package/lib/esm/web/index.js +1 -0
- package/lib/esm/web/signer.js +126 -57
- package/lib/types/common/events.d.ts.map +1 -1
- package/lib/types/common/factory.d.ts.map +1 -1
- package/lib/types/common/upload.d.ts.map +1 -1
- package/lib/types/utils/readableStream.d.ts +6 -0
- package/lib/types/utils/readableStream.d.ts.map +1 -1
- package/lib/types/version.d.ts +1 -1
- package/lib/types/web/index.d.ts +1 -0
- package/lib/types/web/index.d.ts.map +1 -1
- package/lib/types/web/signer.d.ts +16 -6
- package/lib/types/web/signer.d.ts.map +1 -1
- package/package.json +2 -2
- package/lib/cjs/common/events.test.js +0 -470
- package/lib/esm/common/events.test.js +0 -468
- package/lib/types/common/events.test.d.ts +0 -2
- package/lib/types/common/events.test.d.ts.map +0 -1
@@ -114609,7 +114609,7 @@ var require_wrapAsync = __commonJS({
|
|
114609
114609
|
function isAsyncGenerator(fn2) {
|
114610
114610
|
return fn2[Symbol.toStringTag] === "AsyncGenerator";
|
114611
114611
|
}
|
114612
|
-
function
|
114612
|
+
function isAsyncIterable2(obj) {
|
114613
114613
|
return typeof obj[Symbol.asyncIterator] === "function";
|
114614
114614
|
}
|
114615
114615
|
function wrapAsync(asyncFn) {
|
@@ -114620,7 +114620,7 @@ var require_wrapAsync = __commonJS({
|
|
114620
114620
|
exports15.default = wrapAsync;
|
114621
114621
|
exports15.isAsync = isAsync2;
|
114622
114622
|
exports15.isAsyncGenerator = isAsyncGenerator;
|
114623
|
-
exports15.isAsyncIterable =
|
114623
|
+
exports15.isAsyncIterable = isAsyncIterable2;
|
114624
114624
|
}
|
114625
114625
|
});
|
114626
114626
|
|
@@ -313540,9 +313540,9 @@ var DataItem = class _DataItem {
|
|
313540
313540
|
return false;
|
313541
313541
|
}
|
313542
313542
|
}
|
313543
|
-
const
|
313543
|
+
const Signer4 = indexToType[sigType];
|
313544
313544
|
const signatureData = await ar_data_base_default(item);
|
313545
|
-
return await
|
313545
|
+
return await Signer4.verify(item.rawOwner, signatureData, item.rawSignature);
|
313546
313546
|
}
|
313547
313547
|
async getSignatureData() {
|
313548
313548
|
return ar_data_base_default(this);
|
@@ -313953,8 +313953,8 @@ async function processStream(stream2) {
|
|
313953
313953
|
transform.end();
|
313954
313954
|
if (id3 !== (0, import_base64url11.default)(createHash("sha256").update(signature2).digest()))
|
313955
313955
|
throw new Error("ID doesn't match signature");
|
313956
|
-
const
|
313957
|
-
if (!await
|
313956
|
+
const Signer4 = indexToType[signatureType];
|
313957
|
+
if (!await Signer4.verify(owner, await signatureData, signature2))
|
313958
313958
|
throw new Error("Invalid signature");
|
313959
313959
|
items.push({
|
313960
313960
|
id: id3,
|
@@ -314072,7 +314072,7 @@ var import_winston = __toESM(require_winston(), 1);
|
|
314072
314072
|
init_dirname();
|
314073
314073
|
init_buffer2();
|
314074
314074
|
init_process2();
|
314075
|
-
var version16 = "1.
|
314075
|
+
var version16 = "1.27.0-alpha.1";
|
314076
314076
|
|
314077
314077
|
// src/common/logger.ts
|
314078
314078
|
var TurboWinstonLogger = class _TurboWinstonLogger {
|
@@ -367315,7 +367315,9 @@ function createReadableStreamWithEvents({
|
|
367315
367315
|
}) {
|
367316
367316
|
const originalStream = data instanceof ReadableStream ? data : new ReadableStream({
|
367317
367317
|
start: (controller) => {
|
367318
|
-
controller.enqueue(
|
367318
|
+
controller.enqueue(
|
367319
|
+
new Uint8Array(data.buffer, data.byteOffset, data.byteLength)
|
367320
|
+
);
|
367319
367321
|
controller.close();
|
367320
367322
|
}
|
367321
367323
|
});
|
@@ -367333,12 +367335,14 @@ function createReadableStreamWithEvents({
|
|
367333
367335
|
controller.close();
|
367334
367336
|
return;
|
367335
367337
|
}
|
367336
|
-
processedBytes += value.
|
367338
|
+
processedBytes += value.byteLength;
|
367337
367339
|
emitter.emit(eventNamesMap["on-progress"], {
|
367338
367340
|
processedBytes,
|
367339
367341
|
totalBytes: dataSize
|
367340
367342
|
});
|
367341
|
-
controller.enqueue(
|
367343
|
+
controller.enqueue(
|
367344
|
+
new Uint8Array(value.buffer, value.byteOffset, value.byteLength)
|
367345
|
+
);
|
367342
367346
|
} catch (error) {
|
367343
367347
|
emitter.emit(eventNamesMap["on-error"], error);
|
367344
367348
|
controller.error(error);
|
@@ -367366,7 +367370,7 @@ function createReadableWithEvents({
|
|
367366
367370
|
let processedBytes = 0;
|
367367
367371
|
existingStream.on("data", (chunk) => {
|
367368
367372
|
eventingStream.write(chunk);
|
367369
|
-
processedBytes += chunk.
|
367373
|
+
processedBytes += chunk.byteLength;
|
367370
367374
|
emitter.emit(eventNamesMap["on-progress"], {
|
367371
367375
|
processedBytes,
|
367372
367376
|
totalBytes: dataSize
|
@@ -367495,6 +367499,22 @@ function createStreamWithUploadEvents({
|
|
367495
367499
|
}
|
367496
367500
|
});
|
367497
367501
|
}
|
367502
|
+
function createStreamWithSigningEvents({
|
367503
|
+
data,
|
367504
|
+
dataSize,
|
367505
|
+
emitter = new TurboEventEmitter()
|
367506
|
+
}) {
|
367507
|
+
return createStreamWithEvents({
|
367508
|
+
data,
|
367509
|
+
dataSize,
|
367510
|
+
emitter,
|
367511
|
+
eventNamesMap: {
|
367512
|
+
"on-progress": "signing-progress",
|
367513
|
+
"on-error": "signing-error",
|
367514
|
+
"on-end": "signing-success"
|
367515
|
+
}
|
367516
|
+
});
|
367517
|
+
}
|
367498
367518
|
|
367499
367519
|
// src/common/upload.ts
|
367500
367520
|
var creditSharingTagNames = {
|
@@ -367528,17 +367548,17 @@ var TurboUnauthenticatedUploadService = class {
|
|
367528
367548
|
signal,
|
367529
367549
|
events = {}
|
367530
367550
|
}) {
|
367531
|
-
const
|
367551
|
+
const dataItemSize = dataItemSizeFactory();
|
367532
367552
|
this.logger.debug("Uploading signed data item...");
|
367533
367553
|
const emitter = new TurboEventEmitter(events);
|
367534
367554
|
const { stream: streamWithUploadEvents, resume } = createStreamWithUploadEvents({
|
367535
367555
|
data: dataItemStreamFactory(),
|
367536
|
-
dataSize:
|
367556
|
+
dataSize: dataItemSize,
|
367537
367557
|
emitter
|
367538
367558
|
});
|
367539
367559
|
const headers = {
|
367540
367560
|
"content-type": "application/octet-stream",
|
367541
|
-
"content-length": `${
|
367561
|
+
"content-length": `${dataItemSize}`
|
367542
367562
|
};
|
367543
367563
|
if (dataItemOpts !== void 0 && dataItemOpts.paidBy !== void 0) {
|
367544
367564
|
const paidBy = Array.isArray(dataItemOpts.paidBy) ? dataItemOpts.paidBy : [dataItemOpts.paidBy];
|
@@ -367627,7 +367647,6 @@ var TurboAuthenticatedBaseUploadService = class extends TurboUnauthenticatedUplo
|
|
367627
367647
|
throw new CanceledError2();
|
367628
367648
|
}
|
367629
367649
|
try {
|
367630
|
-
this.logger.debug("Uploading signed data item...");
|
367631
367650
|
const response = await this.uploadSignedDataItem({
|
367632
367651
|
dataItemStreamFactory,
|
367633
367652
|
dataItemSizeFactory,
|
@@ -367747,6 +367766,7 @@ ${lastError instanceof Error ? lastError.message : lastError}`;
|
|
367747
367766
|
};
|
367748
367767
|
try {
|
367749
367768
|
const result2 = await this.uploadFile({
|
367769
|
+
// TODO: can fix this type by passing a class generic and specifying in the node/web abstracts which stream type to use
|
367750
367770
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
367751
367771
|
fileStreamFactory: () => this.getFileStreamForFile(file),
|
367752
367772
|
fileSizeFactory: () => this.getFileSize(file),
|
@@ -367789,6 +367809,7 @@ ${lastError instanceof Error ? lastError.message : lastError}`;
|
|
367789
367809
|
];
|
367790
367810
|
const manifestBuffer = Buffer.from(JSON.stringify(manifest));
|
367791
367811
|
const manifestResponse = await this.uploadFile({
|
367812
|
+
// TODO: can fix this type by passing a class generic and specifying in the node/web abstracts which stream type to use
|
367792
367813
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
367793
367814
|
fileStreamFactory: () => this.createManifestStream(manifestBuffer),
|
367794
367815
|
fileSizeFactory: () => manifestBuffer.byteLength,
|
@@ -368124,15 +368145,24 @@ var TurboBaseFactory = class {
|
|
368124
368145
|
token = token === "pol" ? "matic" : token;
|
368125
368146
|
if (!token) {
|
368126
368147
|
if (providedSigner) {
|
368127
|
-
|
368128
|
-
|
368129
|
-
|
368130
|
-
|
368131
|
-
|
368132
|
-
|
368148
|
+
switch (providedSigner.signatureType) {
|
368149
|
+
case SignatureConfig.ETHEREUM:
|
368150
|
+
case SignatureConfig.TYPEDETHEREUM:
|
368151
|
+
token = "ethereum";
|
368152
|
+
break;
|
368153
|
+
case SignatureConfig.SOLANA:
|
368154
|
+
case SignatureConfig.ED25519:
|
368155
|
+
token = "solana";
|
368156
|
+
break;
|
368157
|
+
case SignatureConfig.ARWEAVE:
|
368158
|
+
token = "arweave";
|
368159
|
+
break;
|
368160
|
+
case SignatureConfig.KYVE:
|
368161
|
+
token = "kyve";
|
368162
|
+
break;
|
368163
|
+
default:
|
368164
|
+
break;
|
368133
368165
|
}
|
368134
|
-
} else {
|
368135
|
-
token = "arweave";
|
368136
368166
|
}
|
368137
368167
|
}
|
368138
368168
|
token ??= "arweave";
|
@@ -368345,23 +368375,87 @@ var TurboDataItemAbstractSigner = class {
|
|
368345
368375
|
init_dirname();
|
368346
368376
|
init_buffer2();
|
368347
368377
|
init_process2();
|
368348
|
-
|
368349
|
-
|
368350
|
-
|
368351
|
-
|
368352
|
-
|
368353
|
-
|
368354
|
-
|
368355
|
-
|
368356
|
-
|
368357
|
-
|
368358
|
-
|
368359
|
-
|
368360
|
-
|
368361
|
-
|
368378
|
+
var DEFAULT_STREAM_CHUNK_SIZE = 20 * 1024 * 1024;
|
368379
|
+
function ensureChunkedStream(input, maxChunkSize = DEFAULT_STREAM_CHUNK_SIZE) {
|
368380
|
+
const reader = input.getReader();
|
368381
|
+
let leftover = null;
|
368382
|
+
return new ReadableStream({
|
368383
|
+
async pull(controller) {
|
368384
|
+
if (leftover) {
|
368385
|
+
const chunk = leftover.subarray(0, maxChunkSize);
|
368386
|
+
leftover = leftover.subarray(chunk.length);
|
368387
|
+
if (leftover.length === 0)
|
368388
|
+
leftover = null;
|
368389
|
+
controller.enqueue(chunk);
|
368390
|
+
return;
|
368391
|
+
}
|
368392
|
+
const { value, done } = await reader.read();
|
368393
|
+
if (done) {
|
368394
|
+
controller.close();
|
368395
|
+
return;
|
368396
|
+
}
|
368397
|
+
if (!(value instanceof Uint8Array)) {
|
368398
|
+
throw new TypeError("Expected Uint8Array from source stream");
|
368399
|
+
}
|
368400
|
+
if (value.byteLength <= maxChunkSize) {
|
368401
|
+
controller.enqueue(value);
|
368402
|
+
} else {
|
368403
|
+
controller.enqueue(value.subarray(0, maxChunkSize));
|
368404
|
+
leftover = value.subarray(maxChunkSize);
|
368405
|
+
}
|
368362
368406
|
}
|
368407
|
+
});
|
368408
|
+
}
|
368409
|
+
function createUint8ArrayReadableStreamFactory({
|
368410
|
+
data,
|
368411
|
+
maxChunkSize = DEFAULT_STREAM_CHUNK_SIZE
|
368412
|
+
}) {
|
368413
|
+
if (data instanceof Blob) {
|
368414
|
+
return () => ensureChunkedStream(data.stream());
|
368363
368415
|
}
|
368364
|
-
|
368416
|
+
if (data instanceof ReadableStream) {
|
368417
|
+
return () => {
|
368418
|
+
const reader = data.getReader();
|
368419
|
+
const stream2 = new ReadableStream({
|
368420
|
+
async pull(controller) {
|
368421
|
+
const { value, done } = await reader.read();
|
368422
|
+
if (done) {
|
368423
|
+
controller.close();
|
368424
|
+
return;
|
368425
|
+
}
|
368426
|
+
if (ArrayBuffer.isView(value)) {
|
368427
|
+
controller.enqueue(
|
368428
|
+
new Uint8Array(value.buffer, value.byteOffset, value.byteLength)
|
368429
|
+
);
|
368430
|
+
} else if (value instanceof ArrayBuffer || value instanceof SharedArrayBuffer) {
|
368431
|
+
controller.enqueue(new Uint8Array(value));
|
368432
|
+
} else {
|
368433
|
+
throw new TypeError("Unsupported chunk type in ReadableStream");
|
368434
|
+
}
|
368435
|
+
}
|
368436
|
+
});
|
368437
|
+
return ensureChunkedStream(stream2, maxChunkSize);
|
368438
|
+
};
|
368439
|
+
}
|
368440
|
+
return () => {
|
368441
|
+
let uint8;
|
368442
|
+
if (typeof data === "string") {
|
368443
|
+
uint8 = new TextEncoder().encode(data);
|
368444
|
+
} else if (ArrayBuffer.isView(data)) {
|
368445
|
+
uint8 = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
|
368446
|
+
} else if (data instanceof ArrayBuffer || data instanceof SharedArrayBuffer) {
|
368447
|
+
uint8 = new Uint8Array(data);
|
368448
|
+
} else {
|
368449
|
+
throw new TypeError("Unsupported input type for stream");
|
368450
|
+
}
|
368451
|
+
const stream2 = new ReadableStream({
|
368452
|
+
start(controller) {
|
368453
|
+
controller.enqueue(uint8);
|
368454
|
+
controller.close();
|
368455
|
+
}
|
368456
|
+
});
|
368457
|
+
return ensureChunkedStream(stream2, maxChunkSize);
|
368458
|
+
};
|
368365
368459
|
}
|
368366
368460
|
|
368367
368461
|
// src/web/signer.ts
|
@@ -368386,58 +368480,21 @@ var TurboWebArweaveSigner = class extends TurboDataItemAbstractSigner {
|
|
368386
368480
|
}) {
|
368387
368481
|
await this.setPublicKey();
|
368388
368482
|
const fileSize = fileSizeFactory();
|
368389
|
-
|
368390
|
-
|
368391
|
-
|
368392
|
-
|
368393
|
-
|
368394
|
-
|
368395
|
-
|
368396
|
-
|
368397
|
-
|
368398
|
-
|
368399
|
-
|
368400
|
-
|
368401
|
-
|
368402
|
-
|
368403
|
-
|
368404
|
-
this.logger.debug("Signing data item...");
|
368405
|
-
if (this.signer instanceof InjectedArweaveSigner) {
|
368406
|
-
this.logger.debug(
|
368407
|
-
"Arconnect signer detected, signing with Arconnect signData Item API..."
|
368408
|
-
);
|
368409
|
-
const sign6 = Buffer.from(
|
368410
|
-
await this.signer["signer"].signDataItem({
|
368411
|
-
data: Uint8Array.from(buffer2),
|
368412
|
-
tags: dataItemOpts?.tags,
|
368413
|
-
target: dataItemOpts?.target,
|
368414
|
-
anchor: dataItemOpts?.anchor
|
368415
|
-
})
|
368416
|
-
);
|
368417
|
-
signedDataItem = new DataItem(sign6);
|
368418
|
-
} else {
|
368419
|
-
signedDataItem = createData(
|
368420
|
-
Uint8Array.from(buffer2),
|
368421
|
-
this.signer,
|
368422
|
-
dataItemOpts
|
368423
|
-
);
|
368424
|
-
await signedDataItem.sign(this.signer);
|
368425
|
-
}
|
368426
|
-
emitter?.emit("signing-progress", {
|
368427
|
-
processedBytes: fileSize,
|
368428
|
-
totalBytes: fileSize
|
368429
|
-
});
|
368430
|
-
emitter?.emit("signing-success");
|
368431
|
-
this.logger.debug("Successfully signed data item...");
|
368432
|
-
return {
|
368433
|
-
// while this returns a Buffer - it needs to match our return type for uploading
|
368434
|
-
dataItemStreamFactory: () => signedDataItem.getRaw(),
|
368435
|
-
dataItemSizeFactory: () => signedDataItem.getRaw().length
|
368436
|
-
};
|
368437
|
-
} catch (error) {
|
368438
|
-
emitter?.emit("signing-error", error);
|
368439
|
-
throw error;
|
368440
|
-
}
|
368483
|
+
this.logger.debug("Signing data item...");
|
368484
|
+
const { signedDataItemFactory, signedDataItemSize } = await streamSignerReadableStream({
|
368485
|
+
streamFactory: createUint8ArrayReadableStreamFactory({
|
368486
|
+
data: fileStreamFactory()
|
368487
|
+
}),
|
368488
|
+
signer: this.signer,
|
368489
|
+
dataItemOpts,
|
368490
|
+
fileSize,
|
368491
|
+
emitter
|
368492
|
+
});
|
368493
|
+
this.logger.debug("Successfully signed data item...");
|
368494
|
+
return {
|
368495
|
+
dataItemStreamFactory: signedDataItemFactory,
|
368496
|
+
dataItemSizeFactory: () => signedDataItemSize
|
368497
|
+
};
|
368441
368498
|
}
|
368442
368499
|
async generateSignedRequestHeaders() {
|
368443
368500
|
await this.setPublicKey();
|
@@ -368448,6 +368505,113 @@ var TurboWebArweaveSigner = class extends TurboDataItemAbstractSigner {
|
|
368448
368505
|
return super.signData(dataToSign);
|
368449
368506
|
}
|
368450
368507
|
};
|
368508
|
+
var readableStreamToAsyncIterable = (stream2) => ({
|
368509
|
+
async *[Symbol.asyncIterator]() {
|
368510
|
+
const reader = stream2.getReader();
|
368511
|
+
try {
|
368512
|
+
while (true) {
|
368513
|
+
const { done, value } = await reader.read();
|
368514
|
+
if (done)
|
368515
|
+
break;
|
368516
|
+
if (value !== void 0)
|
368517
|
+
yield Buffer.from(value);
|
368518
|
+
}
|
368519
|
+
} finally {
|
368520
|
+
reader.releaseLock();
|
368521
|
+
}
|
368522
|
+
}
|
368523
|
+
});
|
368524
|
+
async function streamSignerReadableStream({
|
368525
|
+
streamFactory,
|
368526
|
+
signer,
|
368527
|
+
dataItemOpts,
|
368528
|
+
fileSize,
|
368529
|
+
emitter
|
368530
|
+
}) {
|
368531
|
+
try {
|
368532
|
+
const header = createData("", signer, dataItemOpts);
|
368533
|
+
const headerSize = header.getRaw().byteLength;
|
368534
|
+
const totalDataItemSizeWithHeader = fileSize + headerSize;
|
368535
|
+
const [stream1, stream2] = streamFactory().tee();
|
368536
|
+
const reader1 = stream1.getReader();
|
368537
|
+
let bytesProcessed = 0;
|
368538
|
+
const eventingStream = new ReadableStream({
|
368539
|
+
start() {
|
368540
|
+
bytesProcessed = headerSize;
|
368541
|
+
emitter?.emit("signing-progress", {
|
368542
|
+
processedBytes: bytesProcessed,
|
368543
|
+
totalBytes: totalDataItemSizeWithHeader
|
368544
|
+
});
|
368545
|
+
},
|
368546
|
+
async pull(controller) {
|
368547
|
+
const { done, value } = await reader1.read();
|
368548
|
+
if (done) {
|
368549
|
+
controller.close();
|
368550
|
+
return;
|
368551
|
+
}
|
368552
|
+
bytesProcessed += value.byteLength;
|
368553
|
+
controller.enqueue(value);
|
368554
|
+
emitter?.emit("signing-progress", {
|
368555
|
+
processedBytes: bytesProcessed,
|
368556
|
+
totalBytes: totalDataItemSizeWithHeader
|
368557
|
+
});
|
368558
|
+
},
|
368559
|
+
cancel() {
|
368560
|
+
reader1.cancel();
|
368561
|
+
}
|
368562
|
+
});
|
368563
|
+
const asyncIterableReadableStream = readableStreamToAsyncIterable(eventingStream);
|
368564
|
+
const parts = [
|
368565
|
+
(0, import_utils.stringToBuffer)("dataitem"),
|
368566
|
+
(0, import_utils.stringToBuffer)("1"),
|
368567
|
+
(0, import_utils.stringToBuffer)(header.signatureType.toString()),
|
368568
|
+
Uint8Array.from(header.rawOwner),
|
368569
|
+
Uint8Array.from(header.rawTarget),
|
368570
|
+
Uint8Array.from(header.rawAnchor),
|
368571
|
+
Uint8Array.from(header.rawTags),
|
368572
|
+
asyncIterableReadableStream
|
368573
|
+
];
|
368574
|
+
const hash6 = await deepHash(parts);
|
368575
|
+
const sigBytes = Buffer.from(await signer.sign(hash6));
|
368576
|
+
emitter?.emit("signing-success");
|
368577
|
+
header.setSignature(sigBytes);
|
368578
|
+
const headerBytes = header.getRaw();
|
368579
|
+
const signedDataItemFactory = () => {
|
368580
|
+
const reader = stream2.getReader();
|
368581
|
+
return new ReadableStream({
|
368582
|
+
start(controller) {
|
368583
|
+
controller.enqueue(Uint8Array.from(headerBytes));
|
368584
|
+
bytesProcessed += headerBytes.byteLength;
|
368585
|
+
},
|
368586
|
+
async pull(controller) {
|
368587
|
+
try {
|
368588
|
+
const { done, value } = await reader.read();
|
368589
|
+
if (done) {
|
368590
|
+
controller.close();
|
368591
|
+
return;
|
368592
|
+
}
|
368593
|
+
controller.enqueue(value);
|
368594
|
+
} catch (error) {
|
368595
|
+
controller.error(error);
|
368596
|
+
}
|
368597
|
+
},
|
368598
|
+
cancel() {
|
368599
|
+
reader.cancel();
|
368600
|
+
}
|
368601
|
+
});
|
368602
|
+
};
|
368603
|
+
return {
|
368604
|
+
signedDataItemSize: totalDataItemSizeWithHeader,
|
368605
|
+
signedDataItemFactory
|
368606
|
+
};
|
368607
|
+
} catch (error) {
|
368608
|
+
emitter?.emit("signing-error", error);
|
368609
|
+
throw error;
|
368610
|
+
}
|
368611
|
+
}
|
368612
|
+
function isAsyncIterable(data) {
|
368613
|
+
return typeof data[Symbol.asyncIterator] === "function";
|
368614
|
+
}
|
368451
368615
|
|
368452
368616
|
// src/web/upload.ts
|
368453
368617
|
init_dirname();
|
@@ -368649,6 +368813,7 @@ export {
|
|
368649
368813
|
TurboAuthenticatedClient,
|
368650
368814
|
TurboAuthenticatedPaymentService,
|
368651
368815
|
TurboAuthenticatedUploadService,
|
368816
|
+
TurboEventEmitter,
|
368652
368817
|
TurboFactory,
|
368653
368818
|
TurboUnauthenticatedClient,
|
368654
368819
|
TurboUnauthenticatedPaymentService,
|
@@ -368658,6 +368823,9 @@ export {
|
|
368658
368823
|
USD,
|
368659
368824
|
WinstonToTokenAmount,
|
368660
368825
|
ZeroDecimalCurrency,
|
368826
|
+
createStreamWithEvents,
|
368827
|
+
createStreamWithSigningEvents,
|
368828
|
+
createStreamWithUploadEvents,
|
368661
368829
|
creditSharingTagNames,
|
368662
368830
|
currencyMap,
|
368663
368831
|
defaultPaymentServiceURL,
|
@@ -368669,6 +368837,7 @@ export {
|
|
368669
368837
|
developmentUploadServiceURL,
|
368670
368838
|
exponentMap,
|
368671
368839
|
fiatCurrencyTypes,
|
368840
|
+
isAsyncIterable,
|
368672
368841
|
isCurrency,
|
368673
368842
|
isEthPrivateKey,
|
368674
368843
|
isEthereumWalletAdapter,
|
@@ -368681,8 +368850,10 @@ export {
|
|
368681
368850
|
lamportToTokenAmount,
|
368682
368851
|
mARIOToTokenAmount,
|
368683
368852
|
privateKeyFromKyveMnemonic,
|
368853
|
+
readableStreamToAsyncIterable,
|
368684
368854
|
signerFromKyveMnemonic,
|
368685
368855
|
signerFromKyvePrivateKey2 as signerFromKyvePrivateKey,
|
368856
|
+
streamSignerReadableStream,
|
368686
368857
|
tokenToBaseMap,
|
368687
368858
|
tokenTypes,
|
368688
368859
|
ukyveToTokenAmount,
|
package/lib/cjs/common/events.js
CHANGED
@@ -46,7 +46,7 @@ function createReadableStreamWithEvents({ data, dataSize, emitter, eventNamesMap
|
|
46
46
|
? data
|
47
47
|
: new ReadableStream({
|
48
48
|
start: (controller) => {
|
49
|
-
controller.enqueue(data);
|
49
|
+
controller.enqueue(new Uint8Array(data.buffer, data.byteOffset, data.byteLength));
|
50
50
|
controller.close();
|
51
51
|
},
|
52
52
|
});
|
@@ -64,12 +64,12 @@ function createReadableStreamWithEvents({ data, dataSize, emitter, eventNamesMap
|
|
64
64
|
controller.close();
|
65
65
|
return;
|
66
66
|
}
|
67
|
-
processedBytes += value.
|
67
|
+
processedBytes += value.byteLength;
|
68
68
|
emitter.emit(eventNamesMap['on-progress'], {
|
69
69
|
processedBytes,
|
70
70
|
totalBytes: dataSize,
|
71
71
|
});
|
72
|
-
controller.enqueue(value);
|
72
|
+
controller.enqueue(new Uint8Array(value.buffer, value.byteOffset, value.byteLength));
|
73
73
|
}
|
74
74
|
catch (error) {
|
75
75
|
emitter.emit(eventNamesMap['on-error'], error);
|
@@ -125,7 +125,7 @@ function createReadableWithEvents({ data, dataSize, emitter, eventNamesMap, }) {
|
|
125
125
|
let processedBytes = 0;
|
126
126
|
existingStream.on('data', (chunk) => {
|
127
127
|
eventingStream.write(chunk);
|
128
|
-
processedBytes += chunk.
|
128
|
+
processedBytes += chunk.byteLength;
|
129
129
|
emitter.emit(eventNamesMap['on-progress'], {
|
130
130
|
processedBytes,
|
131
131
|
totalBytes: dataSize,
|
@@ -55,18 +55,24 @@ class TurboBaseFactory {
|
|
55
55
|
if (!token) {
|
56
56
|
if (providedSigner) {
|
57
57
|
// Derive token from signer if not provided
|
58
|
-
|
59
|
-
|
58
|
+
switch (providedSigner.signatureType) {
|
59
|
+
case arbundles_1.SignatureConfig.ETHEREUM:
|
60
|
+
case arbundles_1.SignatureConfig.TYPEDETHEREUM:
|
61
|
+
token = 'ethereum';
|
62
|
+
break;
|
63
|
+
case arbundles_1.SignatureConfig.SOLANA:
|
64
|
+
case arbundles_1.SignatureConfig.ED25519:
|
65
|
+
token = 'solana';
|
66
|
+
break;
|
67
|
+
case arbundles_1.SignatureConfig.ARWEAVE:
|
68
|
+
token = 'arweave';
|
69
|
+
break;
|
70
|
+
case arbundles_1.SignatureConfig.KYVE:
|
71
|
+
token = 'kyve';
|
72
|
+
break;
|
73
|
+
default:
|
74
|
+
break;
|
60
75
|
}
|
61
|
-
else if (providedSigner instanceof arbundles_1.HexSolanaSigner) {
|
62
|
-
token = 'solana';
|
63
|
-
}
|
64
|
-
else {
|
65
|
-
token = 'arweave';
|
66
|
-
}
|
67
|
-
}
|
68
|
-
else {
|
69
|
-
token = 'arweave';
|
70
76
|
}
|
71
77
|
}
|
72
78
|
token ??= 'arweave'; // default to arweave if token is not provided
|
package/lib/cjs/common/upload.js
CHANGED
@@ -44,19 +44,19 @@ class TurboUnauthenticatedUploadService {
|
|
44
44
|
this.retryConfig = retryConfig;
|
45
45
|
}
|
46
46
|
async uploadSignedDataItem({ dataItemStreamFactory, dataItemSizeFactory, dataItemOpts, signal, events = {}, }) {
|
47
|
-
const
|
47
|
+
const dataItemSize = dataItemSizeFactory();
|
48
48
|
this.logger.debug('Uploading signed data item...');
|
49
49
|
// create the tapped stream with events
|
50
50
|
const emitter = new events_js_1.TurboEventEmitter(events);
|
51
51
|
// create the stream with upload events
|
52
52
|
const { stream: streamWithUploadEvents, resume } = (0, events_js_1.createStreamWithUploadEvents)({
|
53
53
|
data: dataItemStreamFactory(),
|
54
|
-
dataSize:
|
54
|
+
dataSize: dataItemSize,
|
55
55
|
emitter,
|
56
56
|
});
|
57
57
|
const headers = {
|
58
58
|
'content-type': 'application/octet-stream',
|
59
|
-
'content-length': `${
|
59
|
+
'content-length': `${dataItemSize}`,
|
60
60
|
};
|
61
61
|
if (dataItemOpts !== undefined && dataItemOpts.paidBy !== undefined) {
|
62
62
|
const paidBy = Array.isArray(dataItemOpts.paidBy)
|
@@ -140,11 +140,10 @@ class TurboAuthenticatedBaseUploadService extends TurboUnauthenticatedUploadServ
|
|
140
140
|
if (signal?.aborted) {
|
141
141
|
throw new axios_1.CanceledError();
|
142
142
|
}
|
143
|
+
// Now that we have the signed data item, we can upload it using the uploadSignedDataItem method
|
144
|
+
// which will create a new emitter with upload events. We await
|
145
|
+
// this result due to the wrapped retry logic of this method.
|
143
146
|
try {
|
144
|
-
this.logger.debug('Uploading signed data item...');
|
145
|
-
// Now that we have the signed data item, we can upload it using the uploadSignedDataItem method
|
146
|
-
// which will create a new emitter with upload events. We await
|
147
|
-
// this result due to the wrapped retry logic of this method.
|
148
147
|
const response = await this.uploadSignedDataItem({
|
149
148
|
dataItemStreamFactory,
|
150
149
|
dataItemSizeFactory,
|
@@ -250,6 +249,7 @@ class TurboAuthenticatedBaseUploadService extends TurboUnauthenticatedUploadServ
|
|
250
249
|
};
|
251
250
|
try {
|
252
251
|
const result = await this.uploadFile({
|
252
|
+
// TODO: can fix this type by passing a class generic and specifying in the node/web abstracts which stream type to use
|
253
253
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
254
254
|
fileStreamFactory: () => this.getFileStreamForFile(file),
|
255
255
|
fileSizeFactory: () => this.getFileSize(file),
|
@@ -294,6 +294,7 @@ class TurboAuthenticatedBaseUploadService extends TurboUnauthenticatedUploadServ
|
|
294
294
|
];
|
295
295
|
const manifestBuffer = Buffer.from(JSON.stringify(manifest));
|
296
296
|
const manifestResponse = await this.uploadFile({
|
297
|
+
// TODO: can fix this type by passing a class generic and specifying in the node/web abstracts which stream type to use
|
297
298
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
298
299
|
fileStreamFactory: () => this.createManifestStream(manifestBuffer),
|
299
300
|
fileSizeFactory: () => manifestBuffer.byteLength,
|