diff --git a/content/api/ar-io-node/admin.mdx b/content/api/ar-io-node/admin.mdx
new file mode 100644
index 000000000..78aa03b34
--- /dev/null
+++ b/content/api/ar-io-node/admin.mdx
@@ -0,0 +1,134 @@
+---
+title: Admin
+full: true
+_openapi:
+ toc:
+ - depth: 2
+ title: Admin debugging information.
+ url: '#admin-debugging-information'
+ - depth: 2
+ title: Prioritize a transaction or bundle in the queue.
+ url: '#prioritize-a-transaction-or-bundle-in-the-queue'
+ - depth: 2
+ title: Queue a bundle for indexing, bypassing any filter settings by default.
+ url: '#queue-a-bundle-for-indexing-bypassing-any-filter-settings-by-default'
+ - depth: 2
+ title: Queue data items for indexing
+ url: '#queue-data-items-for-indexing'
+ - depth: 2
+ title: Get bundle processing status
+ url: '#get-bundle-processing-status'
+ - depth: 2
+ title: >-
+ Blocks transactions or data-items so your AR.IO Gateway will not serve
+ them.
+ url: >-
+ #blocks-transactions-or-data-items-so-your-ario-gateway-will-not-serve-them
+ - depth: 2
+ title: Blocks an ARNS name so your AR.IO Gateway will not serve it.
+ url: '#blocks-an-arns-name-so-your-ario-gateway-will-not-serve-it'
+ - depth: 2
+ title: Unblock an ARNS name.
+ url: '#unblock-an-arns-name'
+ - depth: 2
+ title: Export data to Parquet format
+ url: '#export-data-to-parquet-format'
+ - depth: 2
+ title: Get Parquet export status
+ url: '#get-parquet-export-status'
+ - depth: 2
+ title: Prune stable data items
+ url: '#prune-stable-data-items'
+ structuredData:
+ headings:
+ - content: Admin debugging information.
+ id: admin-debugging-information
+ - content: Prioritize a transaction or bundle in the queue.
+ id: prioritize-a-transaction-or-bundle-in-the-queue
+ - content: Queue a bundle for indexing, bypassing any filter settings by default.
+ id: queue-a-bundle-for-indexing-bypassing-any-filter-settings-by-default
+ - content: Queue data items for indexing
+ id: queue-data-items-for-indexing
+ - content: Get bundle processing status
+ id: get-bundle-processing-status
+ - content: >-
+ Blocks transactions or data-items so your AR.IO Gateway will not serve
+ them.
+ id: >-
+ blocks-transactions-or-data-items-so-your-ario-gateway-will-not-serve-them
+ - content: Blocks an ARNS name so your AR.IO Gateway will not serve it.
+ id: blocks-an-arns-name-so-your-ario-gateway-will-not-serve-it
+ - content: Unblock an ARNS name.
+ id: unblock-an-arns-name
+ - content: Export data to Parquet format
+ id: export-data-to-parquet-format
+ - content: Get Parquet export status
+ id: get-parquet-export-status
+ - content: Prune stable data items
+ id: prune-stable-data-items
+ contents:
+ - content: >-
+ Get detailed information about the current operational state of your
+ AR.IO Gateway, including information about any current warnings or
+ errors.
+ heading: admin-debugging-information
+ - content: >-
+ Stage a specific TX ID as priority for your Gateway to locate and
+ index. This will trigger and queue bundle processing if the
+ transaction is a bundle, and your Gateway is configured to unbundle
+ and index.
+ heading: prioritize-a-transaction-or-bundle-in-the-queue
+ - content: Queue a bundle for indexing, bypassing any filter settings by default.
+ heading: queue-a-bundle-for-indexing-bypassing-any-filter-settings-by-default
+ - content: >
+ Queue one or more data items for indexing. This endpoint
+
+ accepts an array of data item headers and prioritizes them for
+ processing.
+ heading: queue-data-items-for-indexing
+ - content: >
+ Returns detailed status information about a bundle's processing state,
+ including counts of data items,
+
+ processing timestamps, and retry attempts. This endpoint helps monitor
+ the progress and state of bundle
+
+ processing through the gateway's pipeline.
+ heading: get-bundle-processing-status
+ - content: >
+ Submits a TX ID/data-item ID or sha-256 content hash for content you
+ do not want your AR.IO Gateway to serve. Once submitted, your Gateway
+ will not respond to requests for these transactions or data-items.
+
+
+
+ WARNING - Testing a TX ID here WILL result in that data being blocked
+ by your Gateway.
+ heading: >-
+ blocks-transactions-or-data-items-so-your-ario-gateway-will-not-serve-them
+ - content: Blocks an ARNS name so your AR.IO Gateway will not serve it.
+ heading: blocks-an-arns-name-so-your-ario-gateway-will-not-serve-it
+ - content: Unblock an ARNS name so your AR.IO Gateway will serve it again.
+ heading: unblock-an-arns-name
+ - content: >
+ Initiates an export of data to Parquet format files. This process runs
+ in the background
+
+ and exports data for the specified block height range.
+ heading: export-data-to-parquet-format
+ - content: Returns the current status of the Parquet export process
+ heading: get-parquet-export-status
+ - content: >
+ Removes stable data items from the database that were indexed before
+ the specified timestamp.
+
+ This helps manage database size by removing older, stable data items.
+ heading: prune-stable-data-items
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Access several password protected features and functions specific to your AR.IO Gateway.
+
+
+
\ No newline at end of file
diff --git a/content/api/ar-io-node/arns.mdx b/content/api/ar-io-node/arns.mdx
new file mode 100644
index 000000000..058d07f2e
--- /dev/null
+++ b/content/api/ar-io-node/arns.mdx
@@ -0,0 +1,19 @@
+---
+title: ArNS
+full: true
+_openapi:
+ method: GET
+ route: /ar-io/resolver/{name}
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Get detailed information of a specified ArNS name.
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Get data from the AR.IO Gateway Arweave Name System
+
+
+
\ No newline at end of file
diff --git a/content/api/ar-io-node/blocks.mdx b/content/api/ar-io-node/blocks.mdx
new file mode 100644
index 000000000..7f654fb8a
--- /dev/null
+++ b/content/api/ar-io-node/blocks.mdx
@@ -0,0 +1,24 @@
+---
+title: Blocks
+full: true
+_openapi:
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: >-
+ Get detailed information about the current block on the Arweave
+ network.
+ - content: Gets the current block height of the Arweave network.
+ - content: Get block information based on a block's hash.
+ - content: >-
+ Alternative endpoint to `/current_block`, gets current block
+ information.
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Get current or historical Arweave block information
+
+
+
\ No newline at end of file
diff --git a/content/api/ar-io-node/chunks.mdx b/content/api/ar-io-node/chunks.mdx
new file mode 100644
index 000000000..87e86fdd1
--- /dev/null
+++ b/content/api/ar-io-node/chunks.mdx
@@ -0,0 +1,20 @@
+---
+title: Chunks
+full: true
+_openapi:
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Fetches information about the size and offset of a specified chunk.
+ - content: >-
+ Returns the same headers as GET but without the response body. Useful
+ for checking chunk existence and metadata.
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Upload Arweave data chunks or get existing chunk offset information
+
+
+
\ No newline at end of file
diff --git a/content/api/ar-io-node/data.mdx b/content/api/ar-io-node/data.mdx
new file mode 100644
index 000000000..341b17bfd
--- /dev/null
+++ b/content/api/ar-io-node/data.mdx
@@ -0,0 +1,33 @@
+---
+title: Data
+full: true
+_openapi:
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: >
+ Get the content of a specified transaction or data item. Supports
+ manifest path resolution,
+
+ range requests, and returns various informational headers about data
+ verification and caching status.
+ - content: >
+ Get the headers for a specified transaction or data item without the
+ content.
+
+ Returns the same headers as the GET request.
+ - content: >-
+ Get the raw content of a specified transaction without manifest
+ resolution
+ - content: Get the headers for raw transaction data without manifest resolution
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Core data retrieval operations for accessing transaction and data item content. Supports manifest resolution,
+range requests, caching, and verification status. These endpoints serve as the primary interface for retrieving
+data from the Permaweb.
+
+
+
\ No newline at end of file
diff --git a/content/api/ar-io-node/farcaster-frames.mdx b/content/api/ar-io-node/farcaster-frames.mdx
new file mode 100644
index 000000000..fc28c29e1
--- /dev/null
+++ b/content/api/ar-io-node/farcaster-frames.mdx
@@ -0,0 +1,22 @@
+---
+title: Farcaster Frames
+full: true
+_openapi:
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: >-
+ Responds to a Farcaster initial Frame GET request by returning the
+ content of a specified Arweave transaction or data item.
+ - content: >-
+ Responds to a Farcaster response Frame POST request by returning the
+ content of a specified Arweave transaction or data item.
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Retrieve and interact with Farcaster Frames using Arweave transactions.
+
+
+
\ No newline at end of file
diff --git a/content/api/ar-io-node/gateway.mdx b/content/api/ar-io-node/gateway.mdx
new file mode 100644
index 000000000..d375bda06
--- /dev/null
+++ b/content/api/ar-io-node/gateway.mdx
@@ -0,0 +1,65 @@
+---
+title: Gateway
+full: true
+_openapi:
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: >
+ Returns either gateway information or serves content based on
+ configuration:
+
+
+ - If neither APEX_TX_ID nor APEX_ARNS_NAME is set, returns gateway
+ information
+
+ - If APEX_TX_ID is set, serves that transaction's content
+
+ - If APEX_ARNS_NAME is set, resolves and serves that ArNS name's
+ content
+
+
+ The Content-Type of the response will match the content type of the
+ transaction or ArNS-resolved data (e.g., text/html for HTML documents,
+ application/json for JSON documents, application/octet-stream for
+ binary data, etc.).
+ - content: Get the current health status of the AR.IO Gateway.
+ - content: |
+ Returns information about the AR.IO Gateway, including:
+ - Gateway wallet address
+ - Process ID
+ - ANS-104 filter configurations
+ - Supported manifest versions
+ - Gateway software release version
+ - content: >
+ Returns information about AR.IO Gateway peers and Arweave node peers.
+
+ For gateways, includes both data and chunk weights used for peer
+ selection.
+
+ Peer keys are formatted as host:port.
+ - content: >
+ Returns metrics in Prometheus format for monitoring the Gateway's
+ performance and status.
+
+ These metrics include various counters, gauges, and histograms
+ tracking:
+
+ - HTTP request statistics
+
+ - Transaction processing metrics
+
+ - System resource usage
+
+ - Cache performance
+
+ - Bundle processing statistics
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Operations related to the AR.IO Gateway server itself, including health checks, metrics, and gateway-specific information
+
+
+
\ No newline at end of file
diff --git a/content/api/ar-io-node/index-querying.mdx b/content/api/ar-io-node/index-querying.mdx
new file mode 100644
index 000000000..a7560022a
--- /dev/null
+++ b/content/api/ar-io-node/index-querying.mdx
@@ -0,0 +1,33 @@
+---
+title: Index Querying
+full: true
+_openapi:
+ method: POST
+ route: /graphql
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: >
+ GraphQL endpoint for querying indexed transaction and block data.
+ Supports:
+
+ - Transaction queries by ID, owner, recipient, tags, and bundle
+
+ - Block queries by ID and height
+
+ - Pagination and sorting
+
+ - Rich metadata including sizes, content types, and signatures
+
+
+ See the GraphQL Playground at `/graphql` for full schema documentation
+ and interactive querying.
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Get data from the AR.IO Gateway index using GQL
+
+
+
\ No newline at end of file
diff --git a/content/api/ar-io-node/network.mdx b/content/api/ar-io-node/network.mdx
new file mode 100644
index 000000000..1175edbb4
--- /dev/null
+++ b/content/api/ar-io-node/network.mdx
@@ -0,0 +1,22 @@
+---
+title: Network
+full: true
+_openapi:
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: An alternative option for accessing network and Gateway status.
+ - content: >-
+ Gets a list of ip addresses for peers your Gateway is currently
+ connected with.
+ - content: Gets the current block height of the Arweave network.
+ - content: Get the current transaction anchor of the Arweave network.
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Get Arweave node info, peers and nework status
+
+
+
\ No newline at end of file
diff --git a/content/api/ar-io-node/pricing.mdx b/content/api/ar-io-node/pricing.mdx
new file mode 100644
index 000000000..e870b1f0b
--- /dev/null
+++ b/content/api/ar-io-node/pricing.mdx
@@ -0,0 +1,22 @@
+---
+title: Pricing
+full: true
+_openapi:
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: >-
+ Get the price, in Winston, required to store a specified amount of
+ data, in bytes, on the Arweave network.
+ - content: >
+ Get the price, in Winston, required to transfer AR into a wallet and
+ store a specified amount of data, in bytes, on the Arweave network.
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Get the price (in winston) for an amount of bytes
+
+
+
\ No newline at end of file
diff --git a/content/api/ar-io-node/transactions.mdx b/content/api/ar-io-node/transactions.mdx
new file mode 100644
index 000000000..ef03e1c39
--- /dev/null
+++ b/content/api/ar-io-node/transactions.mdx
@@ -0,0 +1,20 @@
+---
+title: Transactions
+full: true
+_openapi:
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Get list of transactions that are currently pending.
+ - content: Get detailed information about a specific transaction.
+ - content: Get information about the size and offset of a specified transaction.
+ - content: Get the status of a specified transaction.
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Submit a new Arweave transaction or get existing transaction information
+
+
+
\ No newline at end of file
diff --git a/content/api/ar-io-node/wallets.mdx b/content/api/ar-io-node/wallets.mdx
new file mode 100644
index 000000000..2bc041f9e
--- /dev/null
+++ b/content/api/ar-io-node/wallets.mdx
@@ -0,0 +1,22 @@
+---
+title: Wallets
+full: true
+_openapi:
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: >-
+ Get the current balance of AR, in Winston, of a specified wallet
+ address.
+ - content: >-
+ Get the TX ID from the most recent transaction a specified wallet
+ completed.
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Get Arweave wallet balance and last transaction information
+
+
+
\ No newline at end of file
diff --git a/content/api/turbo/payment-service/approvals.mdx b/content/api/turbo/payment-service/approvals.mdx
new file mode 100644
index 000000000..1b4206d78
--- /dev/null
+++ b/content/api/turbo/payment-service/approvals.mdx
@@ -0,0 +1,19 @@
+---
+title: Approvals
+full: true
+_openapi:
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: >-
+ Get credit share approvals for a given payingAddress and
+ approvedAddress
+ - content: Get all credit share approvals for a given userAddress
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Credit sharing and approval management
+
+
\ No newline at end of file
diff --git a/content/api/turbo/payment-service/balance.mdx b/content/api/turbo/payment-service/balance.mdx
new file mode 100644
index 000000000..299cb01a3
--- /dev/null
+++ b/content/api/turbo/payment-service/balance.mdx
@@ -0,0 +1,20 @@
+---
+title: Balance
+full: true
+_openapi:
+ method: GET
+ route: /balance
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: >-
+ Use a signed request or a previously obtained JWT to get the signing
+ wallet's current service balance in winc
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Account balance and credit management
+
+
\ No newline at end of file
diff --git a/content/api/turbo/payment-service/currencies.mdx b/content/api/turbo/payment-service/currencies.mdx
new file mode 100644
index 000000000..99c3d562c
--- /dev/null
+++ b/content/api/turbo/payment-service/currencies.mdx
@@ -0,0 +1,23 @@
+---
+title: Currencies
+full: true
+_openapi:
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Returns the current list of currency types supported by this service
+ - content: Returns the current list of currency types supported by this service
+ - content: >-
+ Returns the supported fiat currency conversion rates for 1GB of
+ storage based on current market prices.
+ - content: >-
+ Returns the supported fiat currency conversion rate for 1AR based on
+ current market prices.
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Supported currencies and exchange rates
+
+
\ No newline at end of file
diff --git a/content/api/turbo/payment-service/info.mdx b/content/api/turbo/payment-service/info.mdx
new file mode 100644
index 000000000..25b867bc3
--- /dev/null
+++ b/content/api/turbo/payment-service/info.mdx
@@ -0,0 +1,20 @@
+---
+title: Info
+full: true
+_openapi:
+ method: GET
+ route: /info
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: >-
+ Get the current version of the service and the addresses for the
+ supported blockchains
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Service information and metadata
+
+
\ No newline at end of file
diff --git a/content/api/turbo/payment-service/payments.mdx b/content/api/turbo/payment-service/payments.mdx
new file mode 100644
index 000000000..61bf2eeab
--- /dev/null
+++ b/content/api/turbo/payment-service/payments.mdx
@@ -0,0 +1,25 @@
+---
+title: Payments
+full: true
+_openapi:
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: >-
+ Get a top up quote and payment session for a given method
+ (payment-intent or checkout-session), destination address, currency
+ type, and payment amount
+ - content: >-
+ Post a transaction ID that has been sent to the payment service's
+ wallet
+ - content: >-
+ Top-up credits using the X402 Payment Protocol. If no payment is
+ provided, returns payment requirements.
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Payment processing and top-up operations
+
+
\ No newline at end of file
diff --git a/content/api/turbo/payment-service/pricing.mdx b/content/api/turbo/payment-service/pricing.mdx
new file mode 100644
index 000000000..79af62f92
--- /dev/null
+++ b/content/api/turbo/payment-service/pricing.mdx
@@ -0,0 +1,21 @@
+---
+title: Pricing
+full: true
+_openapi:
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: >-
+ Returns the current amount of winc it will cost to upload a given byte
+ count worth of data items
+ - content: >-
+ Returns the current amount of winc this service will quote for a given
+ payment type and amount
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Pricing and cost calculation endpoints
+
+
\ No newline at end of file
diff --git a/content/api/turbo/payment-service/redemption.mdx b/content/api/turbo/payment-service/redemption.mdx
new file mode 100644
index 000000000..422da6a81
--- /dev/null
+++ b/content/api/turbo/payment-service/redemption.mdx
@@ -0,0 +1,21 @@
+---
+title: Redemption
+full: true
+_openapi:
+ method: GET
+ route: /redeem
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: >-
+ Redeem credits gifted via email by providing the destination wallet
+ address for the credits, the redemption ID, and recipient email
+ address
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Credit redemption and gift processing
+
+
\ No newline at end of file
diff --git a/content/api/turbo/upload-service/account.mdx b/content/api/turbo/upload-service/account.mdx
new file mode 100644
index 000000000..777d564f0
--- /dev/null
+++ b/content/api/turbo/upload-service/account.mdx
@@ -0,0 +1,17 @@
+---
+title: Account
+full: true
+_openapi:
+ method: GET
+ route: /account/balance/:id
+ toc: []
+ structuredData:
+ headings: []
+ contents: []
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Account balance and wallet information
+
+
\ No newline at end of file
diff --git a/content/api/turbo/upload-service/pricing.mdx b/content/api/turbo/upload-service/pricing.mdx
new file mode 100644
index 000000000..00972d50d
--- /dev/null
+++ b/content/api/turbo/upload-service/pricing.mdx
@@ -0,0 +1,15 @@
+---
+title: Pricing
+full: true
+_openapi:
+ toc: []
+ structuredData:
+ headings: []
+ contents: []
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Pricing calculation endpoints
+
+
\ No newline at end of file
diff --git a/content/api/turbo/upload-service/service-info.mdx b/content/api/turbo/upload-service/service-info.mdx
new file mode 100644
index 000000000..8f4c22315
--- /dev/null
+++ b/content/api/turbo/upload-service/service-info.mdx
@@ -0,0 +1,15 @@
+---
+title: Service Info
+full: true
+_openapi:
+ toc: []
+ structuredData:
+ headings: []
+ contents: []
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Service information and health endpoints
+
+
\ No newline at end of file
diff --git a/content/api/turbo/upload-service/transaction-data.mdx b/content/api/turbo/upload-service/transaction-data.mdx
new file mode 100644
index 000000000..651d710a8
--- /dev/null
+++ b/content/api/turbo/upload-service/transaction-data.mdx
@@ -0,0 +1,15 @@
+---
+title: Transaction Data
+full: true
+_openapi:
+ toc: []
+ structuredData:
+ headings: []
+ contents: []
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Transaction status and metadata retrieval
+
+
\ No newline at end of file
diff --git a/content/api/turbo/upload-service/upload.mdx b/content/api/turbo/upload-service/upload.mdx
new file mode 100644
index 000000000..ed7688ca9
--- /dev/null
+++ b/content/api/turbo/upload-service/upload.mdx
@@ -0,0 +1,15 @@
+---
+title: Upload
+full: true
+_openapi:
+ toc: []
+ structuredData:
+ headings: []
+ contents: []
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Data item upload endpoints (single and multi-part)
+
+
\ No newline at end of file
diff --git a/content/apis/turbo/index.mdx b/content/apis/turbo/index.mdx
index f9f3be1e5..e71c27e13 100644
--- a/content/apis/turbo/index.mdx
+++ b/content/apis/turbo/index.mdx
@@ -64,7 +64,7 @@ For a more convenient integration experience, consider using the Turbo SDK inste
icon={}
title="Interact with Turbo via the SDK"
description="Use the Turbo SDK for simplified integration with built-in error handling, retries, and TypeScript support"
- href="/sdks/turbo-sdk/events"
+ href="/sdks/turbo-sdk"
/>
The SDK provides a higher-level interface with built-in error handling, automatic retries, and full TypeScript support, making it easier to integrate Turbo services into your applications.
diff --git a/content/build/index.mdx b/content/build/index.mdx
index 9252f0e01..de69e98a5 100644
--- a/content/build/index.mdx
+++ b/content/build/index.mdx
@@ -43,7 +43,7 @@ If you're unfamiliar with Arweave's permanent storage and AR.IO Network we recom
icon={}
title="Turbo SDK Reference"
description="Fast upload service SDK with payment processing and instant confirmation"
- href="/sdks/turbo-sdk/events"
+ href="/sdks/turbo-sdk"
/>
@@ -11,6 +14,174 @@ import { Callout } from "fumadocs-ui/components/callout";
and language models.
-# ArDrive Core JS
+The ArDrive Core JS SDK provides a comprehensive TypeScript library for building applications on ArDrive. It offers type-safe interfaces for drive management, file operations, encryption, and seamless integration with Arweave.
-Please refer to the [source code](https://github.com/ardriveapp/ardrive-core-js) for SDK details.
\ No newline at end of file
+## Quick Start
+
+
+
+
+
+ ### Install the SDK
+
+ ```npm
+ npm install ardrive-core-js
+ ```
+
+
+ ### Initialize with a Wallet
+
+ ```typescript
+ import { readJWKFile, arDriveFactory } from 'ardrive-core-js';
+
+ // Load your Arweave wallet
+ const wallet = readJWKFile('./wallet.json');
+
+ // Create an ArDrive instance
+ const arDrive = arDriveFactory({ wallet });
+ ```
+
+
+ ### Create a Drive and Upload Files
+
+ ```typescript
+ import { wrapFileOrFolder } from 'ardrive-core-js';
+
+ // Create a new public drive
+ const { driveId, rootFolderId } = await arDrive.createPublicDrive({
+ driveName: 'My-Drive'
+ });
+
+ console.log('Drive created:', driveId.toString());
+ console.log('Root folder:', rootFolderId.toString());
+
+ // Upload a file to the drive
+ const wrappedFile = wrapFileOrFolder('./my-file.pdf');
+ const uploadResult = await arDrive.uploadPublicFile({
+ parentFolderId: rootFolderId,
+ wrappedFile
+ });
+
+ console.log('File uploaded:', uploadResult.fileId.toString());
+ ```
+
+
+
+
+
+
+ ### Install the SDK
+
+ ```npm
+ npm install ardrive-core-js
+ ```
+
+
+ ### Configure Polyfills
+
+
+ Polyfills are required for web environments due to Node.js dependencies used by the SDK.
+
+
+ ```npm
+ npm install --save-dev vite-plugin-node-polyfills
+ ```
+
+ ```js
+ // vite.config.js
+ import { defineConfig } from 'vite';
+ import { nodePolyfills } from 'vite-plugin-node-polyfills';
+
+ export default defineConfig({
+ plugins: [
+ nodePolyfills({
+ globals: {
+ Buffer: true,
+ global: true,
+ process: true,
+ },
+ }),
+ ],
+ });
+ ```
+
+ Configure your bundler (Webpack, Vite, Rollup, etc.) to provide polyfills for `crypto`, `process`, and `buffer`. Refer to your bundler's documentation for polyfill configuration.
+
+
+ ### Use the SDK
+
+ ```typescript
+ import { arDriveFactory } from 'ardrive-core-js/web';
+
+ // Initialize with a JWK wallet object
+ const arDrive = arDriveFactory({ wallet: jwkWallet });
+
+ // Create a public drive
+ const { driveId, rootFolderId } = await arDrive.createPublicDrive({
+ driveName: 'My-Drive'
+ });
+
+ console.log('Drive created:', driveId.toString());
+ ```
+
+
+
+
+
+## Documentation
+
+
+ }
+ title="Source Code"
+ description="View the complete source code and contribute on GitHub"
+ href="https://github.com/ardriveapp/ardrive-core-js"
+ />
+ }
+ title="API Reference"
+ description="Detailed documentation for all SDK methods and classes"
+ href="/sdks/ardrive-core-js/drive-operations"
+ />
+
+
+## Core Features
+
+
+ }
+ title="Drive Operations"
+ description="Create and manage public and private drives"
+ href="/sdks/ardrive-core-js/drive-operations"
+ />
+ }
+ title="Folder Operations"
+ description="Create folders, list contents, and organize your data"
+ href="/sdks/ardrive-core-js/folder-operations"
+ />
+ }
+ title="File Operations"
+ description="Upload, download, and manage files on Arweave"
+ href="/sdks/ardrive-core-js/file-operations"
+ />
+ }
+ title="Encryption & Security"
+ description="End-to-end encryption for private drives and files"
+ href="/sdks/ardrive-core-js/encryption-security"
+ />
+ }
+ title="Pricing & Cost Estimation"
+ description="Estimate upload costs before committing transactions"
+ href="/sdks/ardrive-core-js/pricing-cost-estimation"
+ />
+ }
+ title="Advanced Features"
+ description="Turbo integration, bundling, manifests, and more"
+ href="/sdks/ardrive-core-js/turbo-integration"
+ />
+
diff --git a/content/sdks/turbo-sdk/(apis)/turboauthenticatedclient.mdx b/content/sdks/turbo-sdk/(apis)/turboauthenticatedclient.mdx
index e82ddcdc6..b8e69d069 100644
--- a/content/sdks/turbo-sdk/(apis)/turboauthenticatedclient.mdx
+++ b/content/sdks/turbo-sdk/(apis)/turboauthenticatedclient.mdx
@@ -162,7 +162,7 @@ With the upload methods, you can choose to Top Up with selected crypto token on
This is done by providing the `OnDemandFunding` class to the `fundingMode` parameter on upload methods. The `maxTokenAmount` (optional) is the maximum amount of tokens in the token type's smallest unit value (e.g: Winston for arweave token type) to fund the wallet with. The `topUpBufferMultiplier` (optional) is the multiplier to apply to the estimated top-up amount to avoid underpayment during on-demand top-ups due to price fluctuations on longer uploads. Defaults to 1.1, meaning a 10% buffer.
-Note: On demand API currently only available for $ARIO (`ario`), $SOL (`solana`), and $ETH on Base Network (`base-eth`) token types.
+Note: On demand API currently only available for $ARIO (`ario`), $SOL (`solana`), $ETH on Base Network (`base-eth`) and $USDC on Base Network (`base-usdc`) token types.
```typescript
const turbo = TurboFactory.authenticated({
@@ -178,6 +178,21 @@ await turbo.upload({
});
```
+#### x402 Uploads
+
+Another method of uploading files is via the x402 protocol. This method is optimized for agent workflows and allows for direct uploads to Arweave gateways that support the x402 protocol using an EVM wallet and base-usdc token type.
+
+```typescript
+const turbo = TurboFactory.authenticated({
+ signer: ethereumSignerWithBaseUSDC,
+ token: 'base-usdc',
+});
+await turbo.uploadFile({
+ ...params,
+ fundingMode: new X402Funding({ maxMUSDCAmount: 1_000_000 }), // Max 1 USDC. Opt out if too expensive
+});
+```
+
#### uploadFolder()
Signs and uploads a folder of files. For NodeJS, the `folderPath` of the folder to upload is required. For the browser, an array of `files` is required. The `dataItemOpts` is an optional object that can be used to configure tags, target, and anchor for the data item upload. The `signal` is an optional [AbortSignal] that can be used to cancel the upload or timeout the request. The `maxConcurrentUploads` is an optional number that can be used to limit the number of concurrent uploads. The `throwOnFailure` is an optional boolean that can be used to throw an error if any upload fails. The `manifestOptions` is an optional object that can be used to configure the manifest file, including a custom index file, fallback file, or whether to disable manifests altogether. Manifests are enabled by default.
@@ -307,6 +322,7 @@ Tops up the connected wallet with Credits by submitting a payment transaction fo
- The `tokenAmount` is the amount of tokens in the token type's smallest unit value (e.g: Winston for arweave token type) to fund the wallet with.
- The `feeMultiplier` (optional) is the multiplier to apply to the reward for the transaction to modify its chances of being mined. Credits will be added to the wallet balance after the transaction is confirmed on the given blockchain. Defaults to 1.0, meaning no multiplier.
+- The `turboCreditDestinationAddress` (optional) is the native address to credit the funds to. If not provided, the connected wallet's native address will be used. Note: Not available for KYVE token type.
##### Arweave (AR) Crypto Top Up
@@ -316,6 +332,7 @@ const turbo = TurboFactory.authenticated({ signer, token: 'arweave' });
const { winc, status, id, ...fundResult } = await turbo.topUpWithTokens({
tokenAmount: WinstonToTokenAmount(100_000_000), // 0.0001 AR
feeMultiplier: 1.1, // 10% increase in reward for improved mining chances
+ turboCreditDestinationAddress: '0xabc...123', // Any custom EVM / SOL / AR / KYVE native destination address
});
```
@@ -327,6 +344,45 @@ const turbo = TurboFactory.authenticated({ signer, token: 'ario' });
const { winc, status, id, ...fundResult } = await turbo.topUpWithTokens({
tokenAmount: ARIOToTokenAmount(100), // 100 $ARIO
});
+
+
+// ARIO on Base Network
+const { winc, status, id, ...fundResult } = await TurboFactory.authenticated({
+ signer,
+ token: 'base-ario',
+}).topUpWithTokens({
+ tokenAmount: ARIOToTokenAmount(100), // 100 $ARIO
+});
+```
+
+##### USDC Crypto Top Up
+
+```typescript
+
+// USDC on Ethereum Mainnet
+const { winc, status, id, ...fundResult } = await TurboFactory.authenticated({
+ signer,
+ token: 'usdc',
+}).topUpWithTokens({
+ tokenAmount: USDCToTokenAmount(1), // 1 USDC
+});
+
+// USDC on Base Network
+const { winc, status, id, ...fundResult } = await TurboFactory.authenticated({
+ signer,
+ token: 'base-usdc',
+}).topUpWithTokens({
+ tokenAmount: USDCToTokenAmount(1), // 1 USDC
+});
+
+
+// USDC on Polygon Network
+const { winc, status, id, ...fundResult } = await TurboFactory.authenticated({
+ signer,
+ token: 'polygon-usdc',
+}).topUpWithTokens({
+ tokenAmount: USDCToTokenAmount(1), // 1 USDC
+});
```
##### Ethereum (ETH) Crypto Top Up
diff --git a/content/sdks/turbo-sdk/(apis)/turbofactory.mdx b/content/sdks/turbo-sdk/(apis)/turbofactory.mdx
index bdd04a8cc..6d0a7ed24 100644
--- a/content/sdks/turbo-sdk/(apis)/turbofactory.mdx
+++ b/content/sdks/turbo-sdk/(apis)/turbofactory.mdx
@@ -13,99 +13,13 @@ const turbo = TurboFactory.unauthenticated();
#### authenticated()
-Creates an instance of a client that accesses Turbo's authenticated and unauthenticated services. Requires either a signer, or private key to be provided.
-
-##### Arweave JWK
-
-```typescript
-const jwk = await arweave.crypto.generateJWK();
-const turbo = TurboFactory.authenticated({ privateKey: jwk });
-```
-
-##### ArweaveSigner
+Creates an instance of a client that accesses Turbo's authenticated and unauthenticated services. Requires either a signer, or private key to be provided. See the [Signers] section for all supported signers and authentication methods.
```typescript
const signer = new ArweaveSigner(jwk);
const turbo = TurboFactory.authenticated({ signer });
```
-##### ArconnectSigner
-
-```typescript
-const signer = new ArconnectSigner(window.arweaveWallet);
-const turbo = TurboFactory.authenticated({ signer });
-```
-
-##### EthereumSigner
-
-```typescript
-const signer = new EthereumSigner(privateKey);
-const turbo = TurboFactory.authenticated({ signer });
-```
-
-##### Ethereum Private Key
-
-```typescript
-const turbo = TurboFactory.authenticated({
- privateKey: ethHexadecimalPrivateKey,
- token: 'ethereum',
-});
-```
-
-##### POL (MATIC) Private Key
-
-```typescript
-const turbo = TurboFactory.authenticated({
- privateKey: ethHexadecimalPrivateKey,
- token: 'pol',
-});
-```
-
-##### HexSolanaSigner
-
-```typescript
-const signer = new HexSolanaSigner(bs58.encode(secretKey));
-const turbo = TurboFactory.authenticated({ signer });
-```
-
-##### Solana Web Wallet Adapter
-
-```typescript
-const turbo = TurboFactory.authenticated({
- walletAdapter: window.solana,
- token: 'solana',
-});
-```
-
-##### Solana Secret Key
-
-```typescript
-const turbo = TurboFactory.authenticated({
- privateKey: bs58.encode(secretKey),
- token: 'solana',
-});
-```
-
-##### KYVE Private Key
-
-```typescript
-const turbo = TurboFactory.authenticated({
- privateKey: kyveHexadecimalPrivateKey,
- token: 'kyve',
-});
-```
-
-##### KYVE Mnemonic
-
-```typescript
-import { privateKeyFromKyveMnemonic } from '@ardrive/turbo-sdk';
-
-const turbo = TurboFactory.authenticated({
- privateKey: privateKeyFromKyveMnemonic(mnemonic),
- token: 'kyve',
-});
-```
-
#### Testnet Configuration
For development and testing, you can configure the SDK to use blockchain testnets. This allows you to test your integration with free testnet tokens without spending real cryptocurrency.
@@ -139,11 +53,11 @@ const turbo = TurboFactory.authenticated({
}
});
-// Ethereum Holesky
+// Ethereum Sepolia
const turbo = TurboFactory.authenticated({
- privateKey: process.env.HOLESKY_PRIVATE_KEY,
+ privateKey: process.env.SEPOLIA_PRIVATE_KEY,
token: 'ethereum',
- gatewayUrl: 'https://ethereum-holesky-rpc.publicnode.com',
+ gatewayUrl: 'https://sepolia.gateway.tenderly.co',
paymentServiceConfig: {
url: 'https://payment.ardrive.dev',
},
@@ -157,5 +71,5 @@ const turbo = TurboFactory.authenticated({
- **Base Sepolia** (`base-eth`) - Supports on-demand funding
- **Solana Devnet** (`solana`) - Supports on-demand funding
-- **Ethereum Holesky** (`ethereum`) - Manual top-up only
+- **Ethereum Sepolia** (`ethereum`) - Manual top-up only
- **Polygon Amoy** (`pol`) - Manual top-up only
\ No newline at end of file
diff --git a/content/sdks/turbo-sdk/(apis)/turbounauthenticatedclient.mdx b/content/sdks/turbo-sdk/(apis)/turbounauthenticatedclient.mdx
index f5031f865..fc46a3363 100644
--- a/content/sdks/turbo-sdk/(apis)/turbounauthenticatedclient.mdx
+++ b/content/sdks/turbo-sdk/(apis)/turbounauthenticatedclient.mdx
@@ -24,7 +24,7 @@ const countries = await turbo.getSupportedCountries();
Returns the current raw fiat to AR conversion rate for a specific currency as reported by third-party pricing oracles.
```typescript
-const fiatToAR = await turbo.getFiatToAR({ currency: 'usd' });
+const fiatToAR = await turbo.getFiatToAR({ currency: 'USD' });
```
#### getFiatRates()
diff --git a/content/sdks/turbo-sdk/(events)/file-upload-events.mdx b/content/sdks/turbo-sdk/(events)/file-upload-events.mdx
index 216066179..451f7ce02 100644
--- a/content/sdks/turbo-sdk/(events)/file-upload-events.mdx
+++ b/content/sdks/turbo-sdk/(events)/file-upload-events.mdx
@@ -13,4 +13,43 @@ These events are available for `upload`, `uploadFile`, and `uploadSignedDataItem
- `onSigningSuccess` - emitted when the signing succeeds
- `onUploadProgress` - emitted when the upload progress changes
- `onUploadError` - emitted when the upload fails
-- `onUploadSuccess` - emitted when the upload succeeds
\ No newline at end of file
+- `onUploadSuccess` - emitted when the upload succeeds
+
+```typescript
+const uploadResult = await turbo.uploadFile({
+ fileStreamFactory: () => fs.createReadStream(filePath),
+ fileSizeFactory: () => fileSize,
+ events: {
+ // overall events (includes signing and upload events)
+ onProgress: ({ totalBytes, processedBytes, step }) => {
+ console.log('Overall progress:', { totalBytes, processedBytes, step });
+ },
+ onError: ({ error, step }) => {
+ console.log('Overall error:', { error, step });
+ },
+ onSuccess: () => {
+ console.log('Overall success!');
+ },
+ // signing events
+ onSigningProgress: ({ totalBytes, processedBytes }) => {
+ console.log('Signing progress:', { totalBytes, processedBytes });
+ },
+ onSigningError: (error) => {
+ console.log('Signing error:', { error });
+ },
+ onSigningSuccess: () => {
+ console.log('Signing success!');
+ },
+ // upload events
+ onUploadProgress: ({ totalBytes, processedBytes }) => {
+ console.log('Upload progress:', { totalBytes, processedBytes });
+ },
+ onUploadError: (error) => {
+ console.log('Upload error:', { error });
+ },
+ onUploadSuccess: () => {
+ console.log('Upload success!');
+ },
+ },
+});
+```
\ No newline at end of file
diff --git a/content/sdks/turbo-sdk/(signers)/arweave.mdx b/content/sdks/turbo-sdk/(signers)/arweave.mdx
new file mode 100644
index 000000000..181d0e00f
--- /dev/null
+++ b/content/sdks/turbo-sdk/(signers)/arweave.mdx
@@ -0,0 +1,25 @@
+---
+title: "Arweave"
+description: "SDK for interacting with Turbo, a fast and efficient data upload service for Arweave"
+---
+
+#### Arweave JWK
+
+```typescript
+const jwk = await arweave.crypto.generateJWK();
+const turbo = TurboFactory.authenticated({ privateKey: jwk });
+```
+
+#### ArweaveSigner
+
+```typescript
+const signer = new ArweaveSigner(jwk);
+const turbo = TurboFactory.authenticated({ signer });
+```
+
+#### ArconnectSigner
+
+```typescript
+const signer = new ArconnectSigner(window.arweaveWallet);
+const turbo = TurboFactory.authenticated({ signer });
+```
\ No newline at end of file
diff --git a/content/sdks/turbo-sdk/(signers)/base.mdx b/content/sdks/turbo-sdk/(signers)/base.mdx
new file mode 100644
index 000000000..ab0871206
--- /dev/null
+++ b/content/sdks/turbo-sdk/(signers)/base.mdx
@@ -0,0 +1,31 @@
+---
+title: "Base"
+description: "SDK for interacting with Turbo, a fast and efficient data upload service for Arweave"
+---
+
+#### Base ETH Private Key
+
+```typescript
+const turbo = TurboFactory.authenticated({
+ privateKey: ethHexadecimalPrivateKey,
+ token: 'base-eth',
+});
+```
+
+#### Base USDC Private Key
+
+```typescript
+const turbo = TurboFactory.authenticated({
+ privateKey: ethHexadecimalPrivateKey,
+ token: 'base-usdc',
+});
+```
+
+#### Base ARIO Private Key
+
+```typescript
+const turbo = TurboFactory.authenticated({
+ privateKey: ethHexadecimalPrivateKey,
+ token: 'base-ario',
+});
+```
\ No newline at end of file
diff --git a/content/sdks/turbo-sdk/(signers)/ethereum.mdx b/content/sdks/turbo-sdk/(signers)/ethereum.mdx
new file mode 100644
index 000000000..f06e5f33f
--- /dev/null
+++ b/content/sdks/turbo-sdk/(signers)/ethereum.mdx
@@ -0,0 +1,29 @@
+---
+title: "Ethereum"
+description: "SDK for interacting with Turbo, a fast and efficient data upload service for Arweave"
+---
+
+#### EthereumSigner
+
+```typescript
+const signer = new EthereumSigner(privateKey);
+const turbo = TurboFactory.authenticated({ signer });
+```
+
+#### Ethereum Private Key
+
+```typescript
+const turbo = TurboFactory.authenticated({
+ privateKey: ethHexadecimalPrivateKey,
+ token: 'ethereum',
+});
+```
+
+#### POL (MATIC) Private Key
+
+```typescript
+const turbo = TurboFactory.authenticated({
+ privateKey: ethHexadecimalPrivateKey,
+ token: 'pol',
+});
+```
\ No newline at end of file
diff --git a/content/sdks/turbo-sdk/(signers)/kyve.mdx b/content/sdks/turbo-sdk/(signers)/kyve.mdx
new file mode 100644
index 000000000..3030ab668
--- /dev/null
+++ b/content/sdks/turbo-sdk/(signers)/kyve.mdx
@@ -0,0 +1,24 @@
+---
+title: "KYVE"
+description: "SDK for interacting with Turbo, a fast and efficient data upload service for Arweave"
+---
+
+#### KYVE Private Key
+
+```typescript
+const turbo = TurboFactory.authenticated({
+ privateKey: kyveHexadecimalPrivateKey,
+ token: 'kyve',
+});
+```
+
+#### KYVE Mnemonic
+
+```typescript
+import { privateKeyFromKyveMnemonic } from '@ardrive/turbo-sdk';
+
+const turbo = TurboFactory.authenticated({
+ privateKey: privateKeyFromKyveMnemonic(mnemonic),
+ token: 'kyve',
+});
+```
\ No newline at end of file
diff --git a/content/sdks/turbo-sdk/(signers)/meta.json b/content/sdks/turbo-sdk/(signers)/meta.json
new file mode 100644
index 000000000..6de1fc91c
--- /dev/null
+++ b/content/sdks/turbo-sdk/(signers)/meta.json
@@ -0,0 +1,11 @@
+{
+ "title": "Signers",
+ "pages": [
+ "arweave",
+ "ethereum",
+ "base",
+ "solana",
+ "kyve"
+ ],
+ "defaultOpen": false
+}
\ No newline at end of file
diff --git a/content/sdks/turbo-sdk/(signers)/solana.mdx b/content/sdks/turbo-sdk/(signers)/solana.mdx
new file mode 100644
index 000000000..c33102f4f
--- /dev/null
+++ b/content/sdks/turbo-sdk/(signers)/solana.mdx
@@ -0,0 +1,29 @@
+---
+title: "Solana"
+description: "SDK for interacting with Turbo, a fast and efficient data upload service for Arweave"
+---
+
+#### HexSolanaSigner
+
+```typescript
+const signer = new HexSolanaSigner(bs58.encode(secretKey));
+const turbo = TurboFactory.authenticated({ signer });
+```
+
+#### Solana Web Wallet Adapter
+
+```typescript
+const turbo = TurboFactory.authenticated({
+ walletAdapter: window.solana,
+ token: 'solana',
+});
+```
+
+#### Solana Secret Key
+
+```typescript
+const turbo = TurboFactory.authenticated({
+ privateKey: bs58.encode(secretKey),
+ token: 'solana',
+});
+```
\ No newline at end of file
diff --git a/content/sdks/turbo-sdk/index.mdx b/content/sdks/turbo-sdk/index.mdx
index c02987ca7..edebe034c 100644
--- a/content/sdks/turbo-sdk/index.mdx
+++ b/content/sdks/turbo-sdk/index.mdx
@@ -205,7 +205,7 @@ The Turbo SDK provides a high-level interface for uploading data to Arweave thro
icon={}
title="SDK Details"
description="Advanced features, events, logging, and credit sharing"
- href="/sdks/turbo-sdk/events"
+ href="/sdks/turbo-sdk"
/>
@@ -222,7 +222,7 @@ The Turbo SDK provides a high-level interface for uploading data to Arweave thro
icon={}
title="Events & Monitoring"
description="Monitor upload progress and handle events in real-time"
- href="/sdks/turbo-sdk/events"
+ href="/sdks/turbo-sdk/file-upload-events/"
/>
}
diff --git a/content/sdks/turbo-sdk/llm.txt b/content/sdks/turbo-sdk/llm.txt
deleted file mode 100644
index a029bbe78..000000000
--- a/content/sdks/turbo-sdk/llm.txt
+++ /dev/null
@@ -1,891 +0,0 @@
-# TurboAuthenticatedClient (/(apis)/turboauthenticatedclient)
-
-#### getBalance()
-
-Issues a signed request to get the credit balance of a wallet measured in AR (measured in Winston Credits, or winc).
-
-```typescript
-const { winc: balance } = await turbo.getBalance();
-```
-
-#### signer.getNativeAddress()
-
-Returns the [native address][docs/native-address] of the connected signer.
-
-```typescript
-const address = await turbo.signer.getNativeAddress();
-```
-
-#### getWincForFiat()
-
-Returns the current amount of Winston Credits including all adjustments for the provided fiat currency, amount, and optional promo codes.
-
-```typescript
-const { winc, paymentAmount, quotedPaymentAmount, adjustments } =
- await turbo.getWincForFiat({
- amount: USD(100),
- promoCodes: ['MY_PROMO_CODE'], // promo codes require an authenticated client
- });
-```
-
-#### createCheckoutSession()
-
-Creates a Stripe checkout session for a Turbo Top Up with the provided amount, currency, owner, and optional promo codes. The returned URL can be opened in the browser, all payments are processed by Stripe. Promo codes require an authenticated client.
-
-```typescript
-const { url, winc, paymentAmount, quotedPaymentAmount, adjustments } =
- await turbo.createCheckoutSession({
- amount: USD(10.0), // $10.00 USD
- owner: publicArweaveAddress,
- promoCodes: ['MY_PROMO_CODE'], // promo codes require an authenticated client
- });
-
-// open checkout session in a browser
-window.open(url, '_blank');
-```
-
-#### upload()
-
-The easiest way to upload data to Turbo. The `signal` is an optional [AbortSignal] that can be used to cancel the upload or timeout the request. `dataItemOpts` is an optional object that can be used to configure tags, target, and anchor for the data item upload.
-
-```typescript
-const uploadResult = await turbo.upload({
- data: 'The contents of my file!',
- signal: AbortSignal.timeout(10_000), // cancel the upload after 10 seconds
- dataItemOpts: {
- // optional
- },
- events: {
- // optional
- },
-});
-```
-
-#### uploadFile()
-
-Signs and uploads a raw file. There are two ways to provide the file to the SDK:
-
-1. Using a `file` parameter
-2. Using a `fileStreamFactory` and `fileSizeFactory`
-
-##### Using file`
-
-In Web with a file input:
-
-```typescript
-const selectedFile = e.target.files[0];
-const uploadResult = await turbo.uploadFile({
- file: selectedFile,
- dataItemOpts: {
- tags: [{ name: 'Content-Type', value: 'text/plain' }],
- },
- events: {
- onUploadProgress: ({ totalBytes, processedBytes }) => {
- console.log('Upload progress:', { totalBytes, processedBytes });
- },
- onUploadError: (error) => {
- console.log('Upload error:', { error });
- },
- onUploadSuccess: () => {
- console.log('Upload success!');
- },
- },
-});
-```
-
-In NodeJS with a file path:
-
-```typescript
-const filePath = path.join(__dirname, './my-unsigned-file.txt');
-const fileSize = fs.stateSync(filePath).size;
-const uploadResult = await turbo.uploadFile({
- file: filePath,
- dataItemOpts: {
- tags: [{ name: 'Content-Type', value: 'text/plain' }],
- },
-});
-```
-
-##### Using fileStreamFactory` and `fileSizeFactory`
-
-Note: The provided `fileStreamFactory` should produce a NEW file data stream each time it is invoked. The `fileSizeFactory` is a function that returns the size of the file. The `signal` is an optional [AbortSignal] that can be used to cancel the upload or timeout the request. `dataItemOpts` is an optional object that can be used to configure tags, target, and anchor for the data item upload.
-
-```typescript
-const filePath = path.join(__dirname, './my-unsigned-file.txt');
-const fileSize = fs.stateSync(filePath).size;
-const uploadResult = await turbo.uploadFile({
- fileStreamFactory: () => fs.createReadStream(filePath),
- fileSizeFactory: () => fileSize,
-});
-```
-
-##### Customize Multi-Part Upload Behavior
-
-By default, the Turbo upload methods will split files that are larger than 10 MiB into chunks and send them to the upload service multi-part endpoints. This behavior can be customized with the following inputs:
-
-- `chunkByteCount`: The maximum size in bytes for each chunk. Must be between 5 MiB and 500 MiB. Defaults to 5 MiB.
-- `maxChunkConcurrency`: The maximum number of chunks to upload concurrently. Defaults to 5. Reducing concurrency will slow down uploads, but reduce memory utilization and serialize network calls. Increasing it will upload faster, but can strain available resources.
-- `chunkingMode`: The chunking mode to use. Can be 'auto', 'force', or 'disabled'. Defaults to 'auto'. Auto behavior means chunking is enabled if the file would be split into at least three chunks.
-- `maxFinalizeMs`: The maximum time in milliseconds to wait for the finalization of all chunks after the last chunk is uploaded. Defaults to 1 minute per GiB of the total file size.
-
-```typescript
-// Customize chunking behavior
-await turbo.upload({
- ...params,
- chunkByteCount: 1024 * 1024 * 500, // Max chunk size
- maxChunkConcurrency: 1, // Minimize concurrency
-});
-```
-
-```typescript
-// Disable chunking behavior
-await turbo.upload({
- ...params,
- chunkingMode: 'disabled',
-});
-```
-
-```typescript
-// Force chunking behavior
-await turbo.upload({
- ...params,
- chunkingMode: 'force',
-});
-```
-
-#### On Demand Uploads
-
-With the upload methods, you can choose to Top Up with selected crypto token on demand if the connected wallet does not have enough credits to complete the upload.
-
-This is done by providing the `OnDemandFunding` class to the `fundingMode` parameter on upload methods. The `maxTokenAmount` (optional) is the maximum amount of tokens in the token type's smallest unit value (e.g: Winston for arweave token type) to fund the wallet with. The `topUpBufferMultiplier` (optional) is the multiplier to apply to the estimated top-up amount to avoid underpayment during on-demand top-ups due to price fluctuations on longer uploads. Defaults to 1.1, meaning a 10% buffer.
-
-Note: On demand API currently only available for $ARIO (`ario`), $SOL (`solana`), and $ETH on Base Network (`base-eth`) token types.
-
-```typescript
-const turbo = TurboFactory.authenticated({
- signer: arweaveSignerWithARIO,
- token: 'ario',
-});
-await turbo.upload({
- ...params,
- fundingMode: new OnDemandFunding({
- maxTokenAmount: ARIOToTokenAmount(500), // Max 500 $ARIO
- topUpBufferMultiplier: 1.1, // 10% buffer to avoid underpayment
- }),
-});
-```
-
-#### uploadFolder()
-
-Signs and uploads a folder of files. For NodeJS, the `folderPath` of the folder to upload is required. For the browser, an array of `files` is required. The `dataItemOpts` is an optional object that can be used to configure tags, target, and anchor for the data item upload. The `signal` is an optional [AbortSignal] that can be used to cancel the upload or timeout the request. The `maxConcurrentUploads` is an optional number that can be used to limit the number of concurrent uploads. The `throwOnFailure` is an optional boolean that can be used to throw an error if any upload fails. The `manifestOptions` is an optional object that can be used to configure the manifest file, including a custom index file, fallback file, or whether to disable manifests altogether. Manifests are enabled by default.
-
-##### NodeJS Upload Folder
-
-```typescript
-const folderPath = path.join(__dirname, './my-folder');
-const { manifest, fileResponses, manifestResponse } = await turbo.uploadFolder({
- folderPath,
- dataItemOpts: {
- // optional
- tags: [
- {
- // User defined content type will overwrite file content type
- name: 'Content-Type',
- value: 'text/plain',
- },
- {
- name: 'My-Custom-Tag',
- value: 'my-custom-value',
- },
- ],
- // no timeout or AbortSignal provided
- },
- manifestOptions: {
- // optional
- indexFile: 'custom-index.html',
- fallbackFile: 'custom-fallback.html',
- disableManifests: false,
- },
-});
-```
-
-##### Browser Upload Folder
-
-```html
-
- const folderInput = document.getElementById('folder');
-
- folderInput.addEventListener('change', async (event) => {
- const selectedFiles = folderInput.files;
- console.log('Folder selected:', selectedFiles);
-
- const { manifest, fileResponses, manifestResponse } =
- await turbo.uploadFolder({
- files: Array.from(selectedFiles).map((file) => file),
- });
-
- console.log(manifest, fileResponses, manifestResponse);
- });
-
-```
-
-##### Upload Folder with Progress Events
-
-The `uploadFolder` method supports folder-level and per-file events for tracking upload progress. This is useful for building progress bars or providing feedback to users during folder uploads.
-
-```typescript
-const folderPath = path.join(__dirname, './my-folder');
-const { manifest, fileResponses, manifestResponse } = await turbo.uploadFolder({
- folderPath,
- events: {
- // Per-file events
- onFileStart: ({ fileName, fileSize, fileIndex, totalFiles }) => {
- console.log(
- `Starting file ${
- fileIndex + 1
- }/${totalFiles}: ${fileName} (${fileSize} bytes)`,
- );
- },
- onFileProgress: ({
- fileName,
- fileIndex,
- totalFiles,
- fileProcessedBytes,
- fileTotalBytes,
- step,
- }) => {
- const percentComplete = (fileProcessedBytes / fileTotalBytes) * 100;
- console.log(
- `File ${
- fileIndex + 1
- }/${totalFiles} (${fileName}) ${step}: ${percentComplete.toFixed(2)}%`,
- );
- },
- onFileComplete: ({ fileName, fileIndex, totalFiles, id }) => {
- console.log(
- `Completed file ${fileIndex + 1}/${totalFiles}: ${fileName} (${id})`,
- );
- },
- onFileError: ({ fileName, fileIndex, totalFiles, error }) => {
- console.error(
- `Error uploading file ${fileIndex + 1}/${totalFiles}: ${fileName}`,
- error,
- );
- },
- // Folder-level aggregate events
- onFolderProgress: ({
- processedFiles,
- totalFiles,
- processedBytes,
- totalBytes,
- currentPhase,
- }) => {
- const percentComplete = (processedBytes / totalBytes) * 100;
- console.log(
- `Folder progress (${currentPhase}): ${processedFiles}/${totalFiles} files, ${percentComplete.toFixed(
- 2,
- )}%`,
- );
- },
- onFolderError: (error) => {
- console.error('Folder upload error:', error);
- },
- onFolderSuccess: () => {
- console.log('Folder upload complete!');
- },
- },
-});
-```
-
-#### topUpWithTokens()
-
-Tops up the connected wallet with Credits by submitting a payment transaction for the token amount to the Turbo wallet and then submitting that transaction id to Turbo Payment Service for top up processing.
-
-- The `tokenAmount` is the amount of tokens in the token type's smallest unit value (e.g: Winston for arweave token type) to fund the wallet with.
-- The `feeMultiplier` (optional) is the multiplier to apply to the reward for the transaction to modify its chances of being mined. Credits will be added to the wallet balance after the transaction is confirmed on the given blockchain. Defaults to 1.0, meaning no multiplier.
-
-##### Arweave (AR) Crypto Top Up
-
-```typescript
-const turbo = TurboFactory.authenticated({ signer, token: 'arweave' });
-
-const { winc, status, id, ...fundResult } = await turbo.topUpWithTokens({
- tokenAmount: WinstonToTokenAmount(100_000_000), // 0.0001 AR
- feeMultiplier: 1.1, // 10% increase in reward for improved mining chances
-});
-```
-
-##### AR.IO Network (ARIO) Crypto Top Up
-
-```typescript
-const turbo = TurboFactory.authenticated({ signer, token: 'ario' });
-
-const { winc, status, id, ...fundResult } = await turbo.topUpWithTokens({
- tokenAmount: ARIOToTokenAmount(100), // 100 $ARIO
-});
-```
-
-##### Ethereum (ETH) Crypto Top Up
-
-```typescript
-const turbo = TurboFactory.authenticated({ signer, token: 'ethereum' });
-
-const { winc, status, id, ...fundResult } = await turbo.topUpWithTokens({
- tokenAmount: ETHToTokenAmount(0.00001), // 0.00001 ETH
-});
-```
-
-##### Polygon (POL / MATIC) Crypto Top Up
-
-```typescript
-const turbo = TurboFactory.authenticated({ signer, token: 'pol' });
-
-const { winc, status, id, ...fundResult } = await turbo.topUpWithTokens({
- tokenAmount: POLToTokenAmount(0.00001), // 0.00001 POL
-});
-```
-
-##### Eth on Base Network Crypto Top Up
-
-```typescript
-const turbo = TurboFactory.authenticated({ signer, token: 'base-eth' });
-
-const { winc, status, id, ...fundResult } = await turbo.topUpWithTokens({
- tokenAmount: ETHToTokenAmount(0.00001), // 0.00001 ETH bridged on Base Network
-});
-```
-
-##### Solana (SOL) Crypto Top Up
-
-```typescript
-const turbo = TurboFactory.authenticated({ signer, token: 'solana' });
-
-const { winc, status, id, ...fundResult } = await turbo.topUpWithTokens({
- tokenAmount: SOLToTokenAmount(0.00001), // 0.00001 SOL
-});
-```
-
-##### KYVE Crypto Top Up
-
-```typescript
-const turbo = TurboFactory.authenticated({ signer, token: 'kyve' });
-
-const { winc, status, id, ...fundResult } = await turbo.topUpWithTokens({
- tokenAmount: KYVEToTokenAmount(0.00001), // 0.00001 KYVE
-});
-```
-
-#### shareCredits()
-
-Shares credits from the connected wallet to the provided native address and approved winc amount. This action will create a signed data item for the approval
-
-```typescript
-const { approvalDataItemId, approvedWincAmount } = await turbo.shareCredits({
- approvedAddress: '2cor...VUa',
- approvedWincAmount: 800_000_000_000, // 0.8 Credits
- expiresBySeconds: 3600, // Credits will expire back to original wallet in 1 hour
-});
-```
-
-#### revokeCredits()
-
-Revokes all credits shared from the connected wallet to the provided native address.
-
-```typescript
-const revokedApprovals = await turbo.revokeCredits({
- revokedAddress: '2cor...VUa',
-});
-```
-
-#### getCreditShareApprovals()
-
-Returns all given or received credit share approvals for the connected wallet or the provided native address.
-
-```typescript
-const { givenApprovals, receivedApprovals } =
- await turbo.getCreditShareApprovals({
- userAddress: '2cor...VUa',
- });
-```
-
-# TurboFactory (/(apis)/turbofactory)
-
-#### unauthenticated()
-
-Creates an instance of a client that accesses Turbo's unauthenticated services.
-
-```typescript
-const turbo = TurboFactory.unauthenticated();
-```
-
-#### authenticated()
-
-Creates an instance of a client that accesses Turbo's authenticated and unauthenticated services. Requires either a signer, or private key to be provided.
-
-##### Arweave JWK
-
-```typescript
-const jwk = await arweave.crypto.generateJWK();
-const turbo = TurboFactory.authenticated({ privateKey: jwk });
-```
-
-##### ArweaveSigner
-
-```typescript
-const signer = new ArweaveSigner(jwk);
-const turbo = TurboFactory.authenticated({ signer });
-```
-
-##### ArconnectSigner
-
-```typescript
-const signer = new ArconnectSigner(window.arweaveWallet);
-const turbo = TurboFactory.authenticated({ signer });
-```
-
-##### EthereumSigner
-
-```typescript
-const signer = new EthereumSigner(privateKey);
-const turbo = TurboFactory.authenticated({ signer });
-```
-
-##### Ethereum Private Key
-
-```typescript
-const turbo = TurboFactory.authenticated({
- privateKey: ethHexadecimalPrivateKey,
- token: 'ethereum',
-});
-```
-
-##### POL (MATIC) Private Key
-
-```typescript
-const turbo = TurboFactory.authenticated({
- privateKey: ethHexadecimalPrivateKey,
- token: 'pol',
-});
-```
-
-##### HexSolanaSigner
-
-```typescript
-const signer = new HexSolanaSigner(bs58.encode(secretKey));
-const turbo = TurboFactory.authenticated({ signer });
-```
-
-##### Solana Web Wallet Adapter
-
-```typescript
-const turbo = TurboFactory.authenticated({
- walletAdapter: window.solana,
- token: 'solana',
-});
-```
-
-##### Solana Secret Key
-
-```typescript
-const turbo = TurboFactory.authenticated({
- privateKey: bs58.encode(secretKey),
- token: 'solana',
-});
-```
-
-##### KYVE Private Key
-
-```typescript
-const turbo = TurboFactory.authenticated({
- privateKey: kyveHexadecimalPrivateKey,
- token: 'kyve',
-});
-```
-
-##### KYVE Mnemonic
-
-```typescript
-
-const turbo = TurboFactory.authenticated({
- privateKey: privateKeyFromKyveMnemonic(mnemonic),
- token: 'kyve',
-});
-```
-
-#### Testnet Configuration
-
-For development and testing, you can configure the SDK to use blockchain testnets. This allows you to test your integration with free testnet tokens without spending real cryptocurrency.
-
-**Important**: The SDK defaults to mainnet. You must explicitly set the `gatewayUrl` parameter to use a testnet.
-
-```typescript
-// Base Sepolia (recommended for testing)
-const turbo = TurboFactory.authenticated({
- privateKey: process.env.BASE_SEPOLIA_PRIVATE_KEY,
- token: 'base-eth',
- gatewayUrl: 'https://sepolia.base.org', // Required for testnet
- paymentServiceConfig: {
- url: 'https://payment.ardrive.dev', // Dev payment service
- },
- uploadServiceConfig: {
- url: 'https://upload.ardrive.dev', // Dev upload service
- }
-});
-
-// Solana Devnet
-const turbo = TurboFactory.authenticated({
- privateKey: bs58.encode(secretKey),
- token: 'solana',
- gatewayUrl: 'https://api.devnet.solana.com',
- paymentServiceConfig: {
- url: 'https://payment.ardrive.dev',
- },
- uploadServiceConfig: {
- url: 'https://upload.ardrive.dev',
- }
-});
-
-// Ethereum Holesky
-const turbo = TurboFactory.authenticated({
- privateKey: process.env.HOLESKY_PRIVATE_KEY,
- token: 'ethereum',
- gatewayUrl: 'https://ethereum-holesky-rpc.publicnode.com',
- paymentServiceConfig: {
- url: 'https://payment.ardrive.dev',
- },
- uploadServiceConfig: {
- url: 'https://upload.ardrive.dev',
-
-});
-```
-
-**Supported Testnets**:
-
-- **Base Sepolia** (`base-eth`) - Supports on-demand funding
-- **Solana Devnet** (`solana`) - Supports on-demand funding
-- **Ethereum Holesky** (`ethereum`) - Manual top-up only
-- **Polygon Amoy** (`pol`) - Manual top-up only
-
-# TurboUnauthenticatedClient (/(apis)/turbounauthenticatedclient)
-
-#### getSupportedCurrencies()
-
-Returns the list of currencies supported by the Turbo Payment Service for topping up a user balance of AR Credits (measured in Winston Credits, or winc).
-
-```typescript
-const currencies = await turbo.getSupportedCurrencies();
-```
-
-#### getSupportedCountries()
-
-Returns the list of countries supported by the Turbo Payment Service's top up workflow.
-
-```typescript
-const countries = await turbo.getSupportedCountries();
-```
-
-#### getFiatToAR()
-
-Returns the current raw fiat to AR conversion rate for a specific currency as reported by third-party pricing oracles.
-
-```typescript
-const fiatToAR = await turbo.getFiatToAR({ currency: 'usd' });
-```
-
-#### getFiatRates()
-
-Returns the current fiat rates for 1 GiB of data for supported currencies, including all top-up adjustments and fees.
-
-```typescript
-const rates = await turbo.getFiatRates();
-```
-
-#### getWincForFiat()
-
-Returns the current amount of Winston Credits including all adjustments for the provided fiat currency.
-
-```typescript
-const { winc, actualPaymentAmount, quotedPaymentAmount, adjustments } =
- await turbo.getWincForFiat({
- amount: USD(100),
- });
-```
-
-#### getWincForToken()
-
-Returns the current amount of Winston Credits including all adjustments for the provided token amount.
-
-```typescript
-const { winc, actualTokenAmount, equivalentWincTokenAmount } =
- await turbo.getWincForToken({
- tokenAmount: WinstonToTokenAmount(100_000_000),
- });
-```
-
-#### getFiatEstimateForBytes()
-
-Get the current price from the Turbo Payment Service, denominated in the specified fiat currency, for uploading a specified number of bytes to Turbo.
-
-```typescript
-const turbo = TurboFactory.unauthenticated();
-const { amount } = await turbo.getFiatEstimateForBytes({
- byteCount: 1024 * 1024 * 1024,
- currency: 'usd', // specify the currency for the price
-});
-
-console.log(amount); // Estimated usd price for 1 GiB
-```
-
-**Output:**
-
-```json
-{
- "byteCount": 1073741824,
- "amount": 20.58,
- "currency": "usd",
- "winc": "2402378997310"
-}
-```
-
-#### getTokenPriceForBytes()
-
-Get the current price from the Turbo Payment Service, denominated in the specified token, for uploading a specified number of bytes to Turbo.
-
-```typescript
-const turbo = TurboFactory.unauthenticated({ token: 'solana' });
-const { tokenPrice } = await turbo.getTokenPriceForBytes({
- byteCount: 1024 * 1024 * 100,
-});
-
-console.log(tokenPrice); // Estimated SOL Price for 100 MiB
-```
-
-#### getUploadCosts()
-
-Returns the estimated cost in Winston Credits for the provided file sizes, including all upload adjustments and fees.
-
-```typescript
-const [uploadCostForFile] = await turbo.getUploadCosts({ bytes: [1024] });
-const { winc, adjustments } = uploadCostForFile;
-```
-
-#### uploadSignedDataItem()
-
-Uploads a signed data item. The provided `dataItemStreamFactory` should produce a NEW signed data item stream each time is it invoked. The `dataItemSizeFactory` is a function that returns the size of the file. The `signal` is an optional [AbortSignal] that can be used to cancel the upload or timeout the request. The `events` parameter is an optional object that can be used to listen to upload progress, errors, and success (refer to the [Events] section for more details).
-
-```typescript
-const filePath = path.join(__dirname, './my-signed-data-item');
-const dataItemSize = fs.statSync(filePath).size;
-const uploadResponse = await turbo.uploadSignedDataItem({
- dataItemStreamFactory: () => fs.createReadStream(filePath),
- dataItemSizeFactory: () => dataItemSize,
- signal: AbortSignal.timeout(10_000), // cancel the upload after 10 seconds
- events: {
- // track upload events only
- onUploadProgress: ({ totalBytes, processedBytes }) => {
- console.log('Upload progress:', { totalBytes, processedBytes });
- },
- onUploadError: (error) => {
- console.log('Upload error:', { error });
- },
- onUploadSuccess: () => {
- console.log('Upload success!');
- },
- },
-});
-```
-
-#### createCheckoutSession()
-
-Creates a Stripe checkout session for a Turbo Top Up with the provided amount, currency, owner. The returned URL can be opened in the browser, all payments are processed by Stripe. To leverage promo codes, see [TurboAuthenticatedClient].
-
-##### Arweave (AR) Fiat Top Up
-
-```typescript
-const { url, winc, paymentAmount, quotedPaymentAmount, adjustments } =
- await turbo.createCheckoutSession({
- amount: USD(10.0), // $10.00 USD
- owner: publicArweaveAddress,
- // promo codes require an authenticated client
- });
-
-// Open checkout session in a browser
-window.open(url, '_blank');
-```
-
-##### Ethereum (ETH) Fiat Top Up
-
-```typescript
-const turbo = TurboFactory.unauthenticated({ token: 'ethereum' });
-
-const { url, winc, paymentAmount } = await turbo.createCheckoutSession({
- amount: USD(10.0), // $10.00 USD
- owner: publicEthereumAddress,
-});
-```
-
-##### Solana (SOL) Fiat Top Up
-
-```typescript
-const turbo = TurboFactory.unauthenticated({ token: 'solana' });
-
-const { url, winc, paymentAmount } = await turbo.createCheckoutSession({
- amount: USD(10.0), // $10.00 USD
- owner: publicSolanaAddress,
-});
-```
-
-##### Polygon (POL / MATIC) Fiat Top Up
-
-```typescript
-const turbo = TurboFactory.unauthenticated({ token: 'pol' });
-
-const { url, winc, paymentAmount } = await turbo.createCheckoutSession({
- amount: USD(10.0), // $10.00 USD
- owner: publicPolygonAddress,
-});
-```
-
-##### KYVE Fiat Top Up
-
-```typescript
-const turbo = TurboFactory.unauthenticated({ token: 'kyve' });
-
-const { url, winc, paymentAmount } = await turbo.createCheckoutSession({
- amount: USD(10.0), // $10.00 USD
- owner: publicKyveAddress,
-});
-```
-
-#### submitFundTransaction()
-
-Submits the transaction ID of a funding transaction to Turbo Payment Service for top up processing. The `txId` is the transaction ID of the transaction to be submitted.
-
-Use this API if you've already executed your token transfer to the Turbo wallet. Otherwise, consider using `topUpWithTokens` to execute a new token transfer to the Turbo wallet and submit its resulting transaction ID for top up processing all in one go
-
-```typescript
-const turbo = TurboFactory.unauthenticated(); // defaults to arweave token type
-const { status, id, ...fundResult } = await turbo.submitFundTransaction({
- txId: 'my-valid-arweave-fund-transaction-id',
-});
-```
-
-# File Upload Events (/(events)/file-upload-events)
-
-These events are available for `upload`, `uploadFile`, and `uploadSignedDataItem` methods:
-
-- `onProgress` - emitted when the overall progress changes (includes both upload and signing). Each event consists of the total bytes, processed bytes, and the step (upload or signing)
-- `onError` - emitted when the overall upload or signing fails (includes both upload and signing)
-- `onSuccess` - emitted when the overall upload or signing succeeds (includes both upload and signing) - this is the last event emitted for the upload or signing process
-- `onSigningProgress` - emitted when the signing progress changes.
-- `onSigningError` - emitted when the signing fails.
-- `onSigningSuccess` - emitted when the signing succeeds
-- `onUploadProgress` - emitted when the upload progress changes
-- `onUploadError` - emitted when the upload fails
-- `onUploadSuccess` - emitted when the upload succeeds
-
-# Folder Upload Events (/(events)/folder-upload-events)
-
-These events are available for the `uploadFolder` method:
-
-- `onFileStart` - emitted when a file in the folder starts uploading. Includes the file name, file size, file index, and total number of files
-- `onFileProgress` - emitted when a file's upload or signing progress changes. Includes the file name, file index, total files, processed bytes for the file, total bytes for the file, and the current step (signing or upload)
-- `onFileComplete` - emitted when a file successfully completes uploading. Includes the file name, file index, total files, and the data item ID
-- `onFileError` - emitted when a file upload fails. Includes the file name, file index, total files, and the error
-- `onFolderProgress` - emitted when the overall folder upload progress changes. Includes the number of processed files, total files, processed bytes across all files, total bytes across all files, and the current phase (files or manifest)
-- `onFolderError` - emitted when the overall folder upload fails
-- `onFolderSuccess` - emitted when the folder upload successfully completes (including manifest generation) - this is the last event emitted for the folder upload process
-
-```typescript
-const uploadResult = await turbo.upload({
- data: 'The contents of my file!',
- signal: AbortSignal.timeout(10_000), // cancel the upload after 10 seconds
- dataItemOpts: {
- // optional
- },
- events: {
- // overall events (includes signing and upload events)
- onProgress: ({ totalBytes, processedBytes, step }) => {
- const percentComplete = (processedBytes / totalBytes) * 100;
- console.log('Overall progress:', {
- totalBytes,
- processedBytes,
- step,
- percentComplete: percentComplete.toFixed(2) + '%', // eg 50.68%
- });
- },
- onError: (error) => {
- console.log('Overall error:', { error });
- },
- onSuccess: () => {
- console.log('Signed and upload data item!');
- },
- // upload events
- onUploadProgress: ({ totalBytes, processedBytes }) => {
- console.log('Upload progress:', { totalBytes, processedBytes });
- },
- onUploadError: (error) => {
- console.log('Upload error:', { error });
- },
- onUploadSuccess: () => {
- console.log('Upload success!');
- },
- // signing events
- onSigningProgress: ({ totalBytes, processedBytes }) => {
- console.log('Signing progress:', { totalBytes, processedBytes });
- },
- onSigningError: (error) => {
- console.log('Signing error:', { error });
- },
- onSigningSuccess: () => {
- console.log('Signing success!');
- },
- },
-});
-```
-
-# Turbo SDK (/index)
-
-**For AI and LLM users**: Access the complete Turbo SDK documentation in plain text
- format at llm.txt for easy consumption by AI agents
- and language models.
-
-# Turbo SDK
-
-Please refer to the [source code](https://github.com/ardriveapp/turbo-sdk) for SDK details.
-
-# Logging (/logging)
-
-The SDK uses winston for logging. You can set the log level using the `setLogLevel` method.
-
-```typescript
-TurboFactory.setLogLevel('debug');
-```
-
-# Turbo Credit Sharing (/turbo-credit-sharing)
-
-Users can share their purchased Credits with other users' wallets by creating Credit Share Approvals. These approvals are created by uploading a signed data item with tags indicating the recipient's wallet address, the amount of Credits to share, and an optional amount of seconds that the approval will expire in. The recipient can then use the shared Credits to pay for their own uploads to Turbo.
-
-Shared Credits cannot be re-shared by the recipient to other recipients. Only the original owner of the Credits can share or revoke Credit Share Approvals. Credits that are shared to other wallets may not be used by the original owner of the Credits for sharing or uploading unless the Credit Share Approval is revoked or expired.
-
-Approvals can be revoked at any time by similarly uploading a signed data item with tags indicating the recipient's wallet address. This will remove all approvals and prevent the recipient from using the shared Credits. All unused Credits from expired or revoked approvals are returned to the original owner of the Credits.
-
-To use the shared Credits, recipient users must provide the wallet address of the user who shared the Credits with them in the `x-paid-by` HTTP header when uploading data. This tells Turbo services to look for and use Credit Share Approvals to pay for the upload before using the signer's balance.
-
-For user convenience, during upload the Turbo CLI will use any available Credit Share Approvals found for the connected wallet before using the signing wallet's balance. To instead ignore all Credit shares and only use the signer's balance, use the `--ignore-approvals` flag. To use the signer's balance first before using Credit shares, use the `--use-signer-balance-first` flag. In contrast, the Turbo SDK layer does not provide this functionality and will only use approvals when `paidBy` is provided.
-
-The Turbo SDK provides the following methods to manage Credit Share Approvals:
-
-- `shareCredits`: Creates a Credit Share Approval for the specified wallet address and amount of Credits.
-- `revokeCredits`: Revokes all Credit Share Approvals for the specified wallet address.
-- `listShares`: Lists all Credit Share Approvals for the specified wallet address or connected wallet.
-- `dataItemOpts: { ...opts, paidBy: string[] }`: Upload methods now accept 'paidBy', an array of wallet addresses that have provided credit share approvals to the user from which to pay, in the order provided and as necessary, for the upload.
-
-The Turbo CLI provides the following commands to manage Credit Share Approvals:
-
-- `share-credits`: Creates a Credit Share Approval for the specified wallet address and amount of Credits.
-- `revoke-credits`: Revokes all Credit Share Approvals for the specified wallet address.
-- `list-shares`: Lists all Credit Share Approvals for the specified wallet address or connected wallet.
-- `paidBy: --paid-by `: Upload commands now accept '--paid-by', an array of wallet addresses that have provided credit share approvals to the user from which to pay, in the order provided and as necessary, for the upload.
-- `--ignore-approvals`: Ignore all Credit Share Approvals and only use the signer's balance.
-- `--use-signer-balance-first`: Use the signer's balance first before using Credit Share Approvals.
\ No newline at end of file
diff --git a/content/sdks/turbo-sdk/meta.json b/content/sdks/turbo-sdk/meta.json
index 36a00f1d5..28a64f91f 100644
--- a/content/sdks/turbo-sdk/meta.json
+++ b/content/sdks/turbo-sdk/meta.json
@@ -3,6 +3,7 @@
"icon": "/turbo.svg",
"pages": [
"(apis)",
+ "(signers)",
"(events)",
"logging",
"turbo-credit-sharing"
diff --git a/public/llms-full.txt b/public/llms-full.txt
index 5219bd5fe..39fc3b9cd 100644
--- a/public/llms-full.txt
+++ b/public/llms-full.txt
@@ -297,7 +297,7 @@ For a more convenient integration experience, consider using the Turbo SDK inste
}
title="Interact with Turbo via the SDK"
description="Use the Turbo SDK for simplified integration with built-in error handling, retries, and TypeScript support"
- href="/sdks/turbo-sdk/events"
+ href="/sdks/turbo-sdk"
/>
The SDK provides a higher-level interface with built-in error handling, automatic retries, and full TypeScript support, making it easier to integrate Turbo services into your applications.
@@ -7470,7 +7470,7 @@ If you're unfamiliar with Arweave's permanent storage and AR.IO Network we recom
}
title="Turbo SDK Reference"
description="Fast upload service SDK with payment processing and instant confirmation"
- href="/sdks/turbo-sdk/events"
+ href="/sdks/turbo-sdk"
/>
}
@@ -21000,7 +21000,7 @@ const { status, id, ...fundResult } = await turbo.submitFundTransaction({
});
```
-# Events (/sdks/turbo-sdk/events)
+# Events (/sdks/turbo-sdk/file-upload-events)
The SDK provides events for tracking the state signing and uploading data to Turbo. You can listen to these events by providing a callback function to the `events` parameter of the `upload`, `uploadFile`, and `uploadSignedDataItem` methods.
diff --git a/scripts/generate-sdk-docs.ts b/scripts/generate-sdk-docs.ts
index ad088d8e4..63b2e7472 100644
--- a/scripts/generate-sdk-docs.ts
+++ b/scripts/generate-sdk-docs.ts
@@ -27,7 +27,7 @@ const PACKAGES: {
{
name: "turbo-sdk",
readmeUrl:
- "https://raw.githubusercontent.com/ardriveapp/turbo-sdk/main/README.md",
+ "https://raw.githubusercontent.com/ardriveapp/turbo-sdk/alpha/README.md",
dest: path.resolve("content/sdks/turbo-sdk"),
title: "Turbo SDK",
description:
@@ -466,17 +466,6 @@ async function main() {
await fs.writeFile(sdksMetaPath, JSON.stringify(sdksMeta, null, 2));
console.log("Created top-level SDKs meta.json");
-
- // Generate LLM text files for all SDKs
- console.log("Generating LLM text files...");
- const { execSync } = await import("child_process");
- try {
- execSync("npm run generate-sdk-llm-texts", { stdio: "inherit" });
- console.log("LLM text files generated successfully!");
- } catch (error) {
- console.error("Error generating LLM text files:", error);
- }
-
console.log("SDK documentation generated successfully!");
}