@ardrive/turbo-sdk 1.10.0-alpha.1 → 1.10.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/bundles/web.bundle.min.js +49671 -58308
  2. package/lib/cjs/common/factory.js +5 -116
  3. package/lib/cjs/common/logger.js +42 -9
  4. package/lib/cjs/common/payment.js +4 -3
  5. package/lib/cjs/common/signer.js +4 -3
  6. package/lib/cjs/common/token/arweave.js +3 -2
  7. package/lib/cjs/common/token/ethereum.js +1 -1
  8. package/lib/cjs/common/token/solana.js +3 -2
  9. package/lib/cjs/common/upload.js +26 -3
  10. package/lib/cjs/node/factory.js +63 -0
  11. package/lib/cjs/node/signer.js +2 -1
  12. package/lib/cjs/node/upload.js +3 -3
  13. package/lib/cjs/utils/axiosClient.js +1 -1
  14. package/lib/cjs/utils/base64.js +2 -1
  15. package/lib/cjs/utils/common.js +30 -3
  16. package/lib/cjs/utils/readableStream.js +18 -1
  17. package/lib/cjs/version.js +1 -1
  18. package/lib/cjs/web/factory.js +7 -27
  19. package/lib/cjs/web/upload.js +3 -3
  20. package/lib/esm/common/factory.js +5 -116
  21. package/lib/esm/common/logger.js +42 -9
  22. package/lib/esm/common/payment.js +3 -2
  23. package/lib/esm/common/signer.js +1 -0
  24. package/lib/esm/common/token/arweave.js +2 -1
  25. package/lib/esm/common/token/ethereum.js +1 -1
  26. package/lib/esm/common/token/solana.js +2 -1
  27. package/lib/esm/common/upload.js +25 -2
  28. package/lib/esm/node/factory.js +63 -0
  29. package/lib/esm/node/signer.js +1 -0
  30. package/lib/esm/node/upload.js +1 -1
  31. package/lib/esm/utils/axiosClient.js +1 -1
  32. package/lib/esm/utils/base64.js +1 -0
  33. package/lib/esm/utils/common.js +26 -0
  34. package/lib/esm/utils/readableStream.js +17 -0
  35. package/lib/esm/version.js +1 -1
  36. package/lib/esm/web/factory.js +9 -29
  37. package/lib/esm/web/upload.js +1 -1
  38. package/lib/types/common/factory.d.ts +19 -6
  39. package/lib/types/common/factory.d.ts.map +1 -1
  40. package/lib/types/common/logger.d.ts +3 -1
  41. package/lib/types/common/logger.d.ts.map +1 -1
  42. package/lib/types/common/payment.d.ts.map +1 -1
  43. package/lib/types/common/signer.d.ts +1 -0
  44. package/lib/types/common/signer.d.ts.map +1 -1
  45. package/lib/types/common/token/arweave.d.ts.map +1 -1
  46. package/lib/types/common/token/ethereum.d.ts.map +1 -1
  47. package/lib/types/common/token/solana.d.ts.map +1 -1
  48. package/lib/types/common/upload.d.ts +1 -0
  49. package/lib/types/common/upload.d.ts.map +1 -1
  50. package/lib/types/node/factory.d.ts +5 -16
  51. package/lib/types/node/factory.d.ts.map +1 -1
  52. package/lib/types/node/signer.d.ts.map +1 -1
  53. package/lib/types/node/upload.d.ts +1 -1
  54. package/lib/types/node/upload.d.ts.map +1 -1
  55. package/lib/types/utils/base64.d.ts +1 -0
  56. package/lib/types/utils/base64.d.ts.map +1 -1
  57. package/lib/types/utils/common.d.ts +6 -16
  58. package/lib/types/utils/common.d.ts.map +1 -1
  59. package/lib/types/utils/readableStream.d.ts +1 -0
  60. package/lib/types/utils/readableStream.d.ts.map +1 -1
  61. package/lib/types/version.d.ts +1 -1
  62. package/lib/types/version.d.ts.map +1 -1
  63. package/lib/types/web/factory.d.ts.map +1 -1
  64. package/lib/types/web/upload.d.ts +1 -1
  65. package/lib/types/web/upload.d.ts.map +1 -1
  66. package/package.json +2 -2
@@ -1,38 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TurboBaseFactory = void 0;
4
- /**
5
- * Copyright (C) 2022-2024 Permanent Data Solutions, Inc. All Rights Reserved.
6
- *
7
- * This program is free software: you can redistribute it and/or modify
8
- * it under the terms of the GNU Affero General Public License as published by
9
- * the Free Software Foundation, either version 3 of the License, or
10
- * (at your option) any later version.
11
- *
12
- * This program is distributed in the hope that it will be useful,
13
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
- * GNU Affero General Public License for more details.
16
- *
17
- * You should have received a copy of the GNU Affero General Public License
18
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
19
- */
20
- const arbundles_1 = require("arbundles");
21
- const signer_js_1 = require("../node/signer.js");
22
- const upload_js_1 = require("../node/upload.js");
23
- const types_js_1 = require("../types.js");
24
- const common_js_1 = require("../utils/common.js");
25
- const signer_js_2 = require("../web/signer.js");
26
- const upload_js_2 = require("../web/upload.js");
27
4
  const logger_js_1 = require("./logger.js");
28
5
  const payment_js_1 = require("./payment.js");
29
- const index_js_1 = require("./token/index.js");
30
6
  const turbo_js_1 = require("./turbo.js");
31
- const upload_js_3 = require("./upload.js");
7
+ const upload_js_1 = require("./upload.js");
32
8
  class TurboBaseFactory {
9
+ /* @deprecated - use TurboWinstonLogger directly */
33
10
  static setLogLevel(level) {
34
11
  this.logger.setLogLevel(level);
35
12
  }
13
+ /* @deprecated - use TurboWinstonLogger directly */
36
14
  static setLogFormat(format) {
37
15
  this.logger.setLogFormat(format);
38
16
  }
@@ -41,7 +19,7 @@ class TurboBaseFactory {
41
19
  ...paymentServiceConfig,
42
20
  logger: this.logger,
43
21
  });
44
- const uploadService = new upload_js_3.TurboUnauthenticatedUploadService({
22
+ const uploadService = new upload_js_1.TurboUnauthenticatedUploadService({
45
23
  ...uploadServiceConfig,
46
24
  logger: this.logger,
47
25
  });
@@ -50,95 +28,6 @@ class TurboBaseFactory {
50
28
  paymentService,
51
29
  });
52
30
  }
53
- static getSigner(providedSigner, providedPrivateKey, token) {
54
- let signer;
55
- if (providedSigner !== undefined) {
56
- signer = providedSigner;
57
- }
58
- else if (providedPrivateKey !== undefined) {
59
- if (token === 'solana') {
60
- signer = new arbundles_1.HexSolanaSigner(providedPrivateKey);
61
- }
62
- else if (token === 'ethereum') {
63
- if (!(0, types_js_1.isEthPrivateKey)(providedPrivateKey)) {
64
- throw new Error('An Ethereum private key must be provided for EthereumSigner.');
65
- }
66
- signer = new arbundles_1.EthereumSigner(providedPrivateKey);
67
- }
68
- else {
69
- if (!(0, types_js_1.isJWK)(providedPrivateKey)) {
70
- throw new Error('A JWK must be provided for ArweaveSigner.');
71
- }
72
- signer = new arbundles_1.ArweaveSigner(providedPrivateKey);
73
- }
74
- }
75
- else {
76
- throw new Error('A privateKey or signer must be provided.');
77
- }
78
- if ((0, common_js_1.isWeb)()) {
79
- return new signer_js_2.TurboWebArweaveSigner({
80
- signer,
81
- logger: this.logger,
82
- });
83
- }
84
- return new signer_js_1.TurboNodeSigner({
85
- signer,
86
- logger: this.logger,
87
- });
88
- }
89
- static authenticated({ privateKey, signer: providedSigner, paymentServiceConfig = {}, uploadServiceConfig = {}, token, tokenMap, gatewayUrl, tokenTools, }) {
90
- if (!token) {
91
- if (providedSigner) {
92
- // Derive token from signer if not provided
93
- if (providedSigner instanceof arbundles_1.EthereumSigner) {
94
- token = 'ethereum';
95
- }
96
- else if (providedSigner instanceof arbundles_1.HexSolanaSigner) {
97
- token = 'solana';
98
- }
99
- else {
100
- token = 'arweave';
101
- }
102
- }
103
- else {
104
- token = 'arweave';
105
- }
106
- }
107
- const turboSigner = this.getSigner(providedSigner, privateKey, token);
108
- if (!tokenTools) {
109
- if (tokenMap && token === 'arweave') {
110
- tokenTools = tokenMap.arweave;
111
- }
112
- tokenTools = index_js_1.defaultTokenMap[token]?.({
113
- gatewayUrl,
114
- logger: this.logger,
115
- });
116
- }
117
- const paymentService = new payment_js_1.TurboAuthenticatedPaymentService({
118
- ...paymentServiceConfig,
119
- signer: turboSigner,
120
- logger: this.logger,
121
- token,
122
- tokenTools,
123
- });
124
- const uploadService = (0, common_js_1.isWeb)()
125
- ? new upload_js_2.TurboAuthenticatedWebUploadService({
126
- ...uploadServiceConfig,
127
- signer: turboSigner,
128
- logger: this.logger,
129
- token,
130
- })
131
- : new upload_js_1.TurboAuthenticatedNodeUploadService({
132
- ...uploadServiceConfig,
133
- signer: turboSigner,
134
- logger: this.logger,
135
- token,
136
- });
137
- return new turbo_js_1.TurboAuthenticatedClient({
138
- uploadService,
139
- paymentService,
140
- });
141
- }
142
31
  }
143
32
  exports.TurboBaseFactory = TurboBaseFactory;
144
- TurboBaseFactory.logger = new logger_js_1.TurboWinstonLogger();
33
+ TurboBaseFactory.logger = logger_js_1.TurboWinstonLogger.default;
@@ -21,34 +21,67 @@ const winston_1 = require("winston");
21
21
  const version_js_1 = require("../version.js");
22
22
  class TurboWinstonLogger {
23
23
  constructor({ level = 'info', logFormat = 'simple', } = {}) {
24
- this.logger = (0, winston_1.createLogger)({
25
- level,
26
- defaultMeta: { client: 'turbo-sdk', version: version_js_1.version },
27
- silent: level === 'none',
28
- format: getLogFormat(logFormat),
29
- transports: [new winston_1.transports.Console()],
30
- });
24
+ this.silent = false;
25
+ if (level === 'none') {
26
+ this.silent = true;
27
+ }
28
+ if (typeof window !== 'undefined') {
29
+ this.logger = console;
30
+ }
31
+ else {
32
+ this.logger = (0, winston_1.createLogger)({
33
+ level,
34
+ silent: this.silent,
35
+ defaultMeta: {
36
+ name: 'turbo-sdk',
37
+ version: version_js_1.version,
38
+ },
39
+ format: winston_1.format.combine(winston_1.format.timestamp(), winston_1.format.json()),
40
+ transports: [
41
+ new winston_1.transports.Console({
42
+ format: getLogFormat(logFormat),
43
+ }),
44
+ ],
45
+ });
46
+ }
31
47
  }
32
48
  info(message, ...args) {
49
+ if (this.silent)
50
+ return;
33
51
  this.logger.info(message, ...args);
34
52
  }
35
53
  warn(message, ...args) {
54
+ if (this.silent)
55
+ return;
36
56
  this.logger.warn(message, ...args);
37
57
  }
38
58
  error(message, ...args) {
59
+ if (this.silent)
60
+ return;
39
61
  this.logger.error(message, ...args);
40
62
  }
41
63
  debug(message, ...args) {
64
+ if (this.silent)
65
+ return;
42
66
  this.logger.debug(message, ...args);
43
67
  }
44
68
  setLogLevel(level) {
45
- this.logger.level = level;
69
+ this.silent = level === 'none';
70
+ if ('silent' in this.logger) {
71
+ this.logger.silent = level === 'none';
72
+ }
73
+ if ('level' in this.logger) {
74
+ this.logger.level = level;
75
+ }
46
76
  }
47
77
  setLogFormat(logFormat) {
48
- this.logger.format = getLogFormat(logFormat);
78
+ if ('format' in this.logger) {
79
+ this.logger.format = getLogFormat(logFormat);
80
+ }
49
81
  }
50
82
  }
51
83
  exports.TurboWinstonLogger = TurboWinstonLogger;
84
+ TurboWinstonLogger.default = new TurboWinstonLogger();
52
85
  function getLogFormat(logFormat) {
53
86
  return winston_1.format.combine((0, winston_1.format)((info) => {
54
87
  if (info.stack && info.level !== 'error') {
@@ -18,12 +18,13 @@ exports.TurboAuthenticatedPaymentService = exports.TurboUnauthenticatedPaymentSe
18
18
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19
19
  */
20
20
  const bignumber_js_1 = require("bignumber.js");
21
+ const node_buffer_1 = require("node:buffer");
21
22
  const http_js_1 = require("./http.js");
22
23
  const logger_js_1 = require("./logger.js");
23
24
  exports.developmentPaymentServiceURL = 'https://payment.ardrive.dev';
24
25
  exports.defaultPaymentServiceURL = 'https://payment.ardrive.io';
25
26
  class TurboUnauthenticatedPaymentService {
26
- constructor({ url = exports.defaultPaymentServiceURL, retryConfig, logger = new logger_js_1.TurboWinstonLogger(), token = 'arweave', }) {
27
+ constructor({ url = exports.defaultPaymentServiceURL, retryConfig, logger = logger_js_1.TurboWinstonLogger.default, token = 'arweave', }) {
27
28
  this.logger = logger;
28
29
  this.httpService = new http_js_1.TurboHTTPService({
29
30
  url: `${url}/v1`,
@@ -94,7 +95,7 @@ class TurboUnauthenticatedPaymentService {
94
95
  async submitFundTransaction({ txId, }) {
95
96
  const response = await this.httpService.post({
96
97
  endpoint: `/account/balance/${this.token}`,
97
- data: Buffer.from(JSON.stringify({ tx_id: txId })),
98
+ data: node_buffer_1.Buffer.from(JSON.stringify({ tx_id: txId })),
98
99
  });
99
100
  if ('creditedTransaction' in response) {
100
101
  return {
@@ -133,7 +134,7 @@ class TurboUnauthenticatedPaymentService {
133
134
  exports.TurboUnauthenticatedPaymentService = TurboUnauthenticatedPaymentService;
134
135
  // NOTE: to avoid redundancy, we use inheritance here - but generally prefer composition over inheritance
135
136
  class TurboAuthenticatedPaymentService extends TurboUnauthenticatedPaymentService {
136
- constructor({ url = exports.defaultPaymentServiceURL, retryConfig, signer, logger = new logger_js_1.TurboWinstonLogger(), token = 'arweave', tokenTools, }) {
137
+ constructor({ url = exports.defaultPaymentServiceURL, retryConfig, signer, logger = logger_js_1.TurboWinstonLogger.default, token = 'arweave', tokenTools, }) {
137
138
  super({ url, retryConfig, logger, token });
138
139
  this.signer = signer;
139
140
  this.tokenTools = tokenTools;
@@ -23,6 +23,7 @@ exports.TurboDataItemAbstractSigner = void 0;
23
23
  const arbundles_1 = require("arbundles");
24
24
  const crypto_1 = require("crypto");
25
25
  const ethers_1 = require("ethers");
26
+ const node_buffer_1 = require("node:buffer");
26
27
  const tweetnacl_1 = __importDefault(require("tweetnacl"));
27
28
  const base64_js_1 = require("../utils/base64.js");
28
29
  /**
@@ -54,13 +55,13 @@ class TurboDataItemAbstractSigner {
54
55
  }
55
56
  async generateSignedRequestHeaders() {
56
57
  const nonce = (0, crypto_1.randomBytes)(16).toString('hex');
57
- const buffer = Buffer.from(nonce);
58
+ const buffer = node_buffer_1.Buffer.from(nonce);
58
59
  const signature = await this.signer.sign(buffer);
59
60
  const publicKey = (0, base64_js_1.toB64Url)(this.signer.publicKey);
60
61
  return {
61
62
  'x-public-key': publicKey,
62
63
  'x-nonce': nonce,
63
- 'x-signature': (0, base64_js_1.toB64Url)(Buffer.from(signature)),
64
+ 'x-signature': (0, base64_js_1.toB64Url)(node_buffer_1.Buffer.from(signature)),
64
65
  };
65
66
  }
66
67
  async getPublicKey() {
@@ -71,7 +72,7 @@ class TurboDataItemAbstractSigner {
71
72
  if (!(this.signer instanceof arbundles_1.EthereumSigner)) {
72
73
  throw new Error('Only EthereumSigner is supported for sendTransaction API currently!');
73
74
  }
74
- const keyAsStringFromUint8Array = Buffer.from(this.signer.key).toString('hex');
75
+ const keyAsStringFromUint8Array = node_buffer_1.Buffer.from(this.signer.key).toString('hex');
75
76
  const ethWalletAndProvider = new ethers_1.Wallet(keyAsStringFromUint8Array, provider);
76
77
  const tx = await ethWalletAndProvider.sendTransaction({
77
78
  to: target,
@@ -22,13 +22,14 @@ exports.ARToTokenAmount = exports.WinstonToTokenAmount = exports.ArweaveToken =
22
22
  */
23
23
  const arweave_1 = __importDefault(require("@irys/arweave"));
24
24
  const bignumber_js_1 = require("bignumber.js");
25
+ const node_buffer_1 = require("node:buffer");
25
26
  const base64_js_1 = require("../../utils/base64.js");
26
27
  const common_js_1 = require("../../utils/common.js");
27
28
  const logger_js_1 = require("../logger.js");
28
29
  class ArweaveToken {
29
30
  constructor({ gatewayUrl = 'https://arweave.net', arweave = arweave_1.default.init({
30
31
  url: gatewayUrl,
31
- }), logger = new logger_js_1.TurboWinstonLogger(), mintU = true, pollingOptions = {
32
+ }), logger = logger_js_1.TurboWinstonLogger.default, mintU = true, pollingOptions = {
32
33
  maxAttempts: 10,
33
34
  pollingIntervalMs: 3_000,
34
35
  initialBackoffMs: 7_000,
@@ -59,7 +60,7 @@ class ArweaveToken {
59
60
  tx.setOwner(publicKeyB64Url);
60
61
  const dataToSign = await tx.getSignatureData();
61
62
  const signatureUint8Array = await signer.signData(dataToSign);
62
- const signatureBuffer = Buffer.from(signatureUint8Array);
63
+ const signatureBuffer = node_buffer_1.Buffer.from(signatureUint8Array);
63
64
  const id = (0, base64_js_1.sha256B64Url)(signatureBuffer);
64
65
  tx.setSignature({
65
66
  id: id,
@@ -25,7 +25,7 @@ exports.weiToTokenAmount = weiToTokenAmount;
25
25
  const ETHToTokenAmount = (eth) => new bignumber_js_1.BigNumber(eth).times(1e18).valueOf();
26
26
  exports.ETHToTokenAmount = ETHToTokenAmount;
27
27
  class EthereumToken {
28
- constructor({ logger = new logger_js_1.TurboWinstonLogger(), gatewayUrl = 'https://cloudflare-eth.com/', pollingOptions = {
28
+ constructor({ logger = logger_js_1.TurboWinstonLogger.default, gatewayUrl = 'https://cloudflare-eth.com/', pollingOptions = {
29
29
  maxAttempts: 10,
30
30
  pollingIntervalMs: 4_000,
31
31
  initialBackoffMs: 10_000,
@@ -23,6 +23,7 @@ exports.SolanaToken = exports.SOLToTokenAmount = exports.lamportToTokenAmount =
23
23
  const web3_js_1 = require("@solana/web3.js");
24
24
  const bignumber_js_1 = require("bignumber.js");
25
25
  const bs58_1 = __importDefault(require("bs58"));
26
+ const node_buffer_1 = require("node:buffer");
26
27
  const common_js_1 = require("../../utils/common.js");
27
28
  const logger_js_1 = require("../logger.js");
28
29
  const lamportToTokenAmount = (winston) => winston;
@@ -30,7 +31,7 @@ exports.lamportToTokenAmount = lamportToTokenAmount;
30
31
  const SOLToTokenAmount = (sol) => new bignumber_js_1.BigNumber(sol).times(1e9).valueOf();
31
32
  exports.SOLToTokenAmount = SOLToTokenAmount;
32
33
  class SolanaToken {
33
- constructor({ logger = new logger_js_1.TurboWinstonLogger(), gatewayUrl = 'https://api.mainnet-beta.solana.com', pollingOptions = {
34
+ constructor({ logger = logger_js_1.TurboWinstonLogger.default, gatewayUrl = 'https://api.mainnet-beta.solana.com', pollingOptions = {
34
35
  maxAttempts: 10,
35
36
  pollingIntervalMs: 5_000,
36
37
  initialBackoffMs: 7_000,
@@ -53,7 +54,7 @@ class SolanaToken {
53
54
  }));
54
55
  const serializedTx = tx.serializeMessage();
55
56
  const signature = await signer.signData(serializedTx);
56
- tx.addSignature(publicKey, Buffer.from(signature));
57
+ tx.addSignature(publicKey, node_buffer_1.Buffer.from(signature));
57
58
  const id = bs58_1.default.encode(signature);
58
59
  await this.submitTx(tx, id);
59
60
  return { id, target };
@@ -1,13 +1,30 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TurboAuthenticatedBaseUploadService = exports.TurboUnauthenticatedUploadService = exports.defaultUploadServiceURL = exports.developmentUploadServiceURL = void 0;
4
+ /**
5
+ * Copyright (C) 2022-2024 Permanent Data Solutions, Inc. All Rights Reserved.
6
+ *
7
+ * This program is free software: you can redistribute it and/or modify
8
+ * it under the terms of the GNU Affero General Public License as published by
9
+ * the Free Software Foundation, either version 3 of the License, or
10
+ * (at your option) any later version.
11
+ *
12
+ * This program is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ * GNU Affero General Public License for more details.
16
+ *
17
+ * You should have received a copy of the GNU Affero General Public License
18
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
19
+ */
20
+ const node_buffer_1 = require("node:buffer");
4
21
  const plimit_lit_1 = require("plimit-lit");
5
22
  const http_js_1 = require("./http.js");
6
23
  const logger_js_1 = require("./logger.js");
7
24
  exports.developmentUploadServiceURL = 'https://upload.ardrive.dev';
8
25
  exports.defaultUploadServiceURL = 'https://upload.ardrive.io';
9
26
  class TurboUnauthenticatedUploadService {
10
- constructor({ url = exports.defaultUploadServiceURL, retryConfig, logger = new logger_js_1.TurboWinstonLogger(), token = 'arweave', }) {
27
+ constructor({ url = exports.defaultUploadServiceURL, retryConfig, logger = logger_js_1.TurboWinstonLogger.default, token = 'arweave', }) {
11
28
  this.token = token;
12
29
  this.logger = logger;
13
30
  this.httpService = new http_js_1.TurboHTTPService({
@@ -91,7 +108,8 @@ class TurboAuthenticatedBaseUploadService extends TurboUnauthenticatedUploadServ
91
108
  return this.contentTypeFromFile(file);
92
109
  }
93
110
  async uploadFolder(params) {
94
- const { dataItemOpts, signal, manifestOptions = {}, maxConcurrentUploads = 5, throwOnFailure = true, } = params;
111
+ this.logger.debug('Uploading folder...', { params });
112
+ const { dataItemOpts, signal, manifestOptions = {}, maxConcurrentUploads = 1, throwOnFailure = true, } = params;
95
113
  const { disableManifest, indexFile, fallbackFile } = manifestOptions;
96
114
  const paths = {};
97
115
  const response = {
@@ -130,6 +148,11 @@ class TurboAuthenticatedBaseUploadService extends TurboUnauthenticatedUploadServ
130
148
  const files = await this.getFiles(params);
131
149
  const limit = (0, plimit_lit_1.pLimit)(maxConcurrentUploads);
132
150
  await Promise.all(files.map((file) => limit(() => uploadFile(file))));
151
+ this.logger.debug('Finished uploading files', {
152
+ numFiles: files.length,
153
+ numErrors: errors.length,
154
+ results: response.fileResponses,
155
+ });
133
156
  if (errors.length > 0) {
134
157
  response.errors = errors;
135
158
  }
@@ -146,7 +169,7 @@ class TurboAuthenticatedBaseUploadService extends TurboUnauthenticatedUploadServ
146
169
  []),
147
170
  { name: 'Content-Type', value: 'application/x.arweave-manifest+json' },
148
171
  ];
149
- const manifestBuffer = Buffer.from(JSON.stringify(manifest));
172
+ const manifestBuffer = node_buffer_1.Buffer.from(JSON.stringify(manifest));
150
173
  const manifestResponse = await this.uploadFile({
151
174
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
152
175
  fileStreamFactory: () => this.createManifestStream(manifestBuffer),
@@ -17,7 +17,70 @@ exports.TurboFactory = void 0;
17
17
  * You should have received a copy of the GNU Affero General Public License
18
18
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19
19
  */
20
+ const arbundles_1 = require("arbundles");
20
21
  const factory_js_1 = require("../common/factory.js");
22
+ const index_js_1 = require("../common/index.js");
23
+ const payment_js_1 = require("../common/payment.js");
24
+ const turbo_js_1 = require("../common/turbo.js");
25
+ const common_js_1 = require("../utils/common.js");
26
+ const signer_js_1 = require("./signer.js");
27
+ const upload_js_1 = require("./upload.js");
21
28
  class TurboFactory extends factory_js_1.TurboBaseFactory {
29
+ static getSigner(providedSigner, providedPrivateKey, token) {
30
+ return new signer_js_1.TurboNodeSigner({
31
+ signer: (0, common_js_1.createTurboSigner)({
32
+ signer: providedSigner,
33
+ privateKey: providedPrivateKey,
34
+ token,
35
+ }),
36
+ logger: this.logger,
37
+ });
38
+ }
39
+ static authenticated({ privateKey, signer: providedSigner, paymentServiceConfig = {}, uploadServiceConfig = {}, token, tokenMap, gatewayUrl, tokenTools, }) {
40
+ if (!token) {
41
+ if (providedSigner) {
42
+ // Derive token from signer if not provided
43
+ if (providedSigner instanceof arbundles_1.EthereumSigner) {
44
+ token = 'ethereum';
45
+ }
46
+ else if (providedSigner instanceof arbundles_1.HexSolanaSigner) {
47
+ token = 'solana';
48
+ }
49
+ else {
50
+ token = 'arweave';
51
+ }
52
+ }
53
+ else {
54
+ token = 'arweave';
55
+ }
56
+ }
57
+ const turboSigner = this.getSigner(providedSigner, privateKey, token);
58
+ if (!tokenTools) {
59
+ if (tokenMap && token === 'arweave') {
60
+ tokenTools = tokenMap.arweave;
61
+ }
62
+ tokenTools = index_js_1.defaultTokenMap[token]?.({
63
+ gatewayUrl,
64
+ logger: this.logger,
65
+ });
66
+ }
67
+ const paymentService = new payment_js_1.TurboAuthenticatedPaymentService({
68
+ ...paymentServiceConfig,
69
+ signer: turboSigner,
70
+ logger: this.logger,
71
+ token,
72
+ tokenTools,
73
+ });
74
+ const uploadService = new upload_js_1.TurboAuthenticatedUploadService({
75
+ ...uploadServiceConfig,
76
+ signer: turboSigner,
77
+ logger: this.logger,
78
+ token,
79
+ });
80
+ return new turbo_js_1.TurboAuthenticatedClient({
81
+ uploadService,
82
+ paymentService,
83
+ });
84
+ }
22
85
  }
23
86
  exports.TurboFactory = TurboFactory;
@@ -22,6 +22,7 @@ Object.defineProperty(exports, "ArconnectSigner", { enumerable: true, get: funct
22
22
  Object.defineProperty(exports, "ArweaveSigner", { enumerable: true, get: function () { return arbundles_1.ArweaveSigner; } });
23
23
  Object.defineProperty(exports, "EthereumSigner", { enumerable: true, get: function () { return arbundles_1.EthereumSigner; } });
24
24
  Object.defineProperty(exports, "HexSolanaSigner", { enumerable: true, get: function () { return arbundles_1.HexSolanaSigner; } });
25
+ const node_buffer_1 = require("node:buffer");
25
26
  const signer_js_1 = require("../common/signer.js");
26
27
  const base64_js_1 = require("../utils/base64.js");
27
28
  /**
@@ -54,7 +55,7 @@ class TurboNodeSigner extends signer_js_1.TurboDataItemAbstractSigner {
54
55
  // ref: https://github.com/Irys-xyz/arbundles/blob/master/src/ar-data-create.ts#L18
55
56
  const _target = typeof target === 'string' ? (0, base64_js_1.fromB64Url)(target) : null;
56
57
  const targetLength = 1 + (_target ? _target.byteLength : 0);
57
- const _anchor = typeof anchor === 'string' ? Buffer.from(anchor) : null;
58
+ const _anchor = typeof anchor === 'string' ? node_buffer_1.Buffer.from(anchor) : null;
58
59
  const anchorLength = 1 + (_anchor ? _anchor.byteLength : 0);
59
60
  const serializedTags = tags && tags.length > 0 ? (0, arbundles_1.serializeTags)(tags) : null;
60
61
  const tagsLength = 16 + (serializedTags ? serializedTags.byteLength : 0);
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TurboAuthenticatedNodeUploadService = void 0;
3
+ exports.TurboAuthenticatedUploadService = void 0;
4
4
  /**
5
5
  * Copyright (C) 2022-2024 Permanent Data Solutions, Inc. All Rights Reserved.
6
6
  *
@@ -23,7 +23,7 @@ const node_stream_1 = require("node:stream");
23
23
  const path_1 = require("path");
24
24
  const upload_js_1 = require("../common/upload.js");
25
25
  const types_js_1 = require("../types.js");
26
- class TurboAuthenticatedNodeUploadService extends upload_js_1.TurboAuthenticatedBaseUploadService {
26
+ class TurboAuthenticatedUploadService extends upload_js_1.TurboAuthenticatedBaseUploadService {
27
27
  constructor({ url = upload_js_1.defaultUploadServiceURL, retryConfig, signer, logger, token, }) {
28
28
  super({ url, retryConfig, logger, token, signer });
29
29
  }
@@ -69,4 +69,4 @@ class TurboAuthenticatedNodeUploadService extends upload_js_1.TurboAuthenticated
69
69
  return node_stream_1.Readable.from(manifestBuffer);
70
70
  }
71
71
  }
72
- exports.TurboAuthenticatedNodeUploadService = TurboAuthenticatedNodeUploadService;
72
+ exports.TurboAuthenticatedUploadService = TurboAuthenticatedUploadService;
@@ -51,7 +51,7 @@ exports.defaultRequestHeaders = {
51
51
  'x-turbo-source-version': version_js_1.version,
52
52
  'x-turbo-source-identifier': 'turbo-sdk',
53
53
  };
54
- const createAxiosInstance = ({ logger = new logger_js_1.TurboWinstonLogger(), axiosConfig = {}, retryConfig = {
54
+ const createAxiosInstance = ({ logger = logger_js_1.TurboWinstonLogger.default, axiosConfig = {}, retryConfig = {
55
55
  retryDelay: axios_retry_1.default.exponentialDelay,
56
56
  retries: 3,
57
57
  retryCondition: (error) => {
@@ -24,6 +24,7 @@ exports.sha256B64Url = sha256B64Url;
24
24
  */
25
25
  const utils_js_1 = require("arweave/node/lib/utils.js");
26
26
  const crypto_1 = require("crypto");
27
+ const node_buffer_1 = require("node:buffer");
27
28
  exports.base64URLRegex = /^[a-zA-Z0-9_-]{43}$/;
28
29
  function jwkToPublicArweaveAddress(jwk) {
29
30
  return ownerToAddress(jwk.n);
@@ -37,7 +38,7 @@ function fromB64Url(input) {
37
38
  .replace(/-/g, '+')
38
39
  .replace(/_/g, '/')
39
40
  .concat('='.repeat(paddingLength));
40
- return Buffer.from(base64, 'base64');
41
+ return node_buffer_1.Buffer.from(base64, 'base64');
41
42
  }
42
43
  function toB64Url(buffer) {
43
44
  return (0, utils_js_1.bufferTob64Url)(buffer);
@@ -1,4 +1,8 @@
1
1
  "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sleep = sleep;
4
+ exports.isWeb = isWeb;
5
+ exports.createTurboSigner = createTurboSigner;
2
6
  /**
3
7
  * Copyright (C) 2022-2024 Permanent Data Solutions, Inc. All Rights Reserved.
4
8
  *
@@ -15,12 +19,35 @@
15
19
  * You should have received a copy of the GNU Affero General Public License
16
20
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
17
21
  */
18
- Object.defineProperty(exports, "__esModule", { value: true });
19
- exports.sleep = sleep;
20
- exports.isWeb = isWeb;
22
+ const arbundles_1 = require("arbundles");
23
+ const types_js_1 = require("../types.js");
21
24
  function sleep(ms) {
22
25
  return new Promise((resolve) => setTimeout(resolve, ms));
23
26
  }
24
27
  function isWeb() {
25
28
  return typeof window !== 'undefined';
26
29
  }
30
+ function createTurboSigner({ signer: clientProvidedSigner, privateKey: clientProvidedPrivateKey, token = 'arweave', }) {
31
+ if (clientProvidedSigner !== undefined) {
32
+ return clientProvidedSigner;
33
+ }
34
+ if (clientProvidedPrivateKey === undefined) {
35
+ throw new Error('A privateKey or signer must be provided.');
36
+ }
37
+ if (token === 'solana') {
38
+ // TODO: Add a type check for SOL private keys shape for detailed error message
39
+ return new arbundles_1.HexSolanaSigner(clientProvidedPrivateKey);
40
+ }
41
+ else if (token === 'ethereum') {
42
+ if (!(0, types_js_1.isEthPrivateKey)(clientProvidedPrivateKey)) {
43
+ throw new Error('An Ethereum private key must be provided for EthereumSigner.');
44
+ }
45
+ return new arbundles_1.EthereumSigner(clientProvidedPrivateKey);
46
+ }
47
+ else {
48
+ if (!(0, types_js_1.isJWK)(clientProvidedPrivateKey)) {
49
+ throw new Error('A JWK must be provided for ArweaveSigner.');
50
+ }
51
+ return new arbundles_1.ArweaveSigner(clientProvidedPrivateKey);
52
+ }
53
+ }
@@ -1,9 +1,26 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.readableStreamToBuffer = readableStreamToBuffer;
4
+ /**
5
+ * Copyright (C) 2022-2024 Permanent Data Solutions, Inc. All Rights Reserved.
6
+ *
7
+ * This program is free software: you can redistribute it and/or modify
8
+ * it under the terms of the GNU Affero General Public License as published by
9
+ * the Free Software Foundation, either version 3 of the License, or
10
+ * (at your option) any later version.
11
+ *
12
+ * This program is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ * GNU Affero General Public License for more details.
16
+ *
17
+ * You should have received a copy of the GNU Affero General Public License
18
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
19
+ */
20
+ const node_buffer_1 = require("node:buffer");
4
21
  async function readableStreamToBuffer({ stream, size, }) {
5
22
  const reader = stream.getReader();
6
- const buffer = Buffer.alloc(size);
23
+ const buffer = node_buffer_1.Buffer.alloc(size);
7
24
  let offset = 0;
8
25
  let done = false;
9
26
  while (!done) {
@@ -18,4 +18,4 @@
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
19
  exports.version = void 0;
20
20
  // AUTOMATICALLY GENERATED FILE - DO NOT TOUCH
21
- exports.version = '1.10.0-alpha.1';
21
+ exports.version = '1.10.0-alpha.3';