From c25ad7c8837466e96194bcc2b3e76b2033f3b14c Mon Sep 17 00:00:00 2001 From: Bobinstein Date: Tue, 3 Sep 2024 19:41:38 +0000 Subject: [PATCH] deploy: f8038da7b6f34e40c2e4d0058d96cb4aa3fe0980 --- 404.html | 4 +- assets/js/{20.f81d2908.js => 20.52e5843b.js} | 2 +- assets/js/{21.2493ed7e.js => 21.0b8a84f4.js} | 2 +- assets/js/{25.b47d5571.js => 25.302b4487.js} | 2 +- assets/js/{27.d65607d9.js => 27.f4b16956.js} | 2 +- assets/js/{28.6cb27a6f.js => 28.f732f00d.js} | 2 +- assets/js/{29.d82aae63.js => 29.6828cc78.js} | 2 +- assets/js/{30.0cd3f326.js => 30.06ab7fce.js} | 2 +- assets/js/{33.9f9fe4ee.js => 33.58d20ff8.js} | 2 +- assets/js/{35.99917f3f.js => 35.c5fec53e.js} | 2 +- assets/js/{36.2ee78b70.js => 36.fef6255c.js} | 2 +- assets/js/{37.e4f0c338.js => 37.e5209429.js} | 2 +- assets/js/{38.280c683a.js => 38.e3fed557.js} | 2 +- assets/js/{39.99eb1c7e.js => 39.ac0f94d7.js} | 2 +- assets/js/{42.bc7ce646.js => 42.aee56198.js} | 2 +- assets/js/43.13c41e00.js | 1 + assets/js/43.c75c4e5d.js | 1 - assets/js/{44.dffe1a60.js => 44.39ec880c.js} | 2 +- assets/js/{45.474a923e.js => 45.df6982d4.js} | 2 +- assets/js/app.514c89a5.js | 21 +++++ assets/js/app.fb20e6be.js | 21 ----- docs/arfs/content-types.html | 4 +- docs/arfs/data-model.html | 4 +- docs/arfs/entity-types.html | 4 +- docs/arfs/index.html | 4 +- docs/arfs/privacy.html | 4 +- docs/arfs/schema-diagrams.html | 4 +- docs/arfs/usage/change/drives.html | 4 +- docs/arfs/usage/change/files.html | 4 +- docs/arfs/usage/change/folders.html | 4 +- docs/arfs/usage/change/snapshots.html | 4 +- docs/arfs/usage/create/create-file.html | 4 +- docs/arfs/usage/create/create-folder.html | 4 +- docs/arfs/usage/create/create-snapshot.html | 4 +- docs/arfs/usage/create/index.html | 4 +- docs/arfs/usage/extending-schemas.html | 4 +- docs/arfs/usage/read/index.html | 4 +- docs/cli/all-commands.html | 4 +- docs/cli/getting-help.html | 4 +- docs/cli/getting-started.html | 4 +- docs/cli/index.html | 4 +- docs/cli/using-the-cli.html | 4 +- docs/core-sdk.html | 4 +- docs/index.html | 4 +- docs/misc/deploy/deploy.html | 4 +- docs/misc/deploy/examples.html | 4 +- docs/misc/deploy/index.html | 4 +- docs/misc/deploy/paths.html | 4 +- docs/misc/deploy/routing.html | 4 +- docs/misc/ethareum/index.html | 4 +- docs/misc/permasite.html | 4 +- docs/misc/price-calculator.html | 4 +- docs/turbo/api/payment.html | 4 +- docs/turbo/api/upload.html | 4 +- docs/turbo/migrating.html | 4 +- docs/turbo/turbo-sdk/index.html | 81 ++++++++++++++------ docs/turbo/turbo-sdk/release-notes.html | 6 +- docs/turbo/turbo-sdk/turbo-web.html | 4 +- docs/turbo/what-is-turbo.html | 4 +- index.html | 4 +- 60 files changed, 173 insertions(+), 142 deletions(-) rename assets/js/{20.f81d2908.js => 20.52e5843b.js} (97%) rename assets/js/{21.2493ed7e.js => 21.0b8a84f4.js} (77%) rename assets/js/{25.b47d5571.js => 25.302b4487.js} (89%) rename assets/js/{27.d65607d9.js => 27.f4b16956.js} (99%) rename assets/js/{28.6cb27a6f.js => 28.f732f00d.js} (99%) rename assets/js/{29.d82aae63.js => 29.6828cc78.js} (99%) rename assets/js/{30.0cd3f326.js => 30.06ab7fce.js} (98%) rename assets/js/{33.9f9fe4ee.js => 33.58d20ff8.js} (95%) rename assets/js/{35.99917f3f.js => 35.c5fec53e.js} (98%) rename assets/js/{36.2ee78b70.js => 36.fef6255c.js} (99%) rename assets/js/{37.e4f0c338.js => 37.e5209429.js} (99%) rename assets/js/{38.280c683a.js => 38.e3fed557.js} (88%) rename assets/js/{39.99eb1c7e.js => 39.ac0f94d7.js} (99%) rename assets/js/{42.bc7ce646.js => 42.aee56198.js} (55%) create mode 100644 assets/js/43.13c41e00.js delete mode 100644 assets/js/43.c75c4e5d.js rename assets/js/{44.dffe1a60.js => 44.39ec880c.js} (94%) rename assets/js/{45.474a923e.js => 45.df6982d4.js} (98%) create mode 100644 assets/js/app.514c89a5.js delete mode 100644 assets/js/app.fb20e6be.js diff --git a/404.html b/404.html index e78e187..ba592d3 100644 --- a/404.html +++ b/404.html @@ -18,13 +18,13 @@ - +

404

There's nothing here.
Take me home.
- + diff --git a/assets/js/20.f81d2908.js b/assets/js/20.52e5843b.js similarity index 97% rename from assets/js/20.f81d2908.js rename to assets/js/20.52e5843b.js index 1f9037f..3acae1a 100644 --- a/assets/js/20.f81d2908.js +++ b/assets/js/20.52e5843b.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{316:function(e,t,a){"use strict";a.r(t);var r=a(10),n=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"create-folder"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#create-folder"}},[e._v("#")]),e._v(" Create Folder")]),e._v(" "),t("h2",{attrs:{id:"new-folder-entity"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#new-folder-entity"}},[e._v("#")]),e._v(" New Folder Entity")]),e._v(" "),t("p",[e._v("Folders can be created to organize files.")]),e._v(" "),t("ul",[t("li",[e._v("A new Folder Entity Metadata is created when a user wants to create a new folder.")]),e._v(" "),t("li",[e._v("Folders can only be created in existing drives, and must have a valid "),t("code",[e._v("Drive-Id")]),e._v(".")]),e._v(" "),t("li",[e._v("Folders can only be created in existing parent folders, and must have a valid "),t("code",[e._v("Parent-Folder-Id")]),e._v(".")]),e._v(" "),t("li",[e._v("The new folder metadata transaction must generate a new UUIDv4 for the "),t("code",[e._v("Folder-Id")]),e._v(".")]),e._v(" "),t("li",[e._v("Folder Entity Metadata transactions must have "),t("code",[e._v('Entity-Type: "folder"')]),e._v(".")]),e._v(" "),t("li",[e._v("The client gets the user’s local time for the "),t("code",[e._v("Unix-Time")]),e._v(" tag, represented as Seconds Since Unix Epoch.")]),e._v(" "),t("li",[e._v("The user defined folder name is added to the "),t("code",[e._v("name")]),e._v(" property in the folder’s metadata transaction Data JSON.")]),e._v(" "),t("li",[e._v("Public folders must have the content type "),t("code",[e._v('Content-Type: ""')]),e._v(".")]),e._v(" "),t("li",[e._v("If the folder is private:\n"),t("ul",[t("li",[e._v("Its "),t("code",[e._v("Cipher")]),e._v(" tag must be filled out with the respective encryption algorithm (currently "),t("code",[e._v("AES256-GCM")]),e._v(").")]),e._v(" "),t("li",[e._v("Its "),t("code",[e._v("Cipher-IV")]),e._v(" tag must be filled out with the generated Initialization Vector for the private folder.")]),e._v(" "),t("li",[e._v("It must have the content type "),t("code",[e._v('Content-Type: "application/octet-stream"')]),e._v(".")]),e._v(" "),t("li",[e._v("The ArFS client must encrypt the Folder entity’s metadata JSON using the assigned "),t("code",[e._v("Cipher")]),e._v(" and "),t("code",[e._v("Cipher-IV")]),e._v(".")])])])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{315:function(e,t,a){"use strict";a.r(t);var r=a(10),n=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"create-folder"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#create-folder"}},[e._v("#")]),e._v(" Create Folder")]),e._v(" "),t("h2",{attrs:{id:"new-folder-entity"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#new-folder-entity"}},[e._v("#")]),e._v(" New Folder Entity")]),e._v(" "),t("p",[e._v("Folders can be created to organize files.")]),e._v(" "),t("ul",[t("li",[e._v("A new Folder Entity Metadata is created when a user wants to create a new folder.")]),e._v(" "),t("li",[e._v("Folders can only be created in existing drives, and must have a valid "),t("code",[e._v("Drive-Id")]),e._v(".")]),e._v(" "),t("li",[e._v("Folders can only be created in existing parent folders, and must have a valid "),t("code",[e._v("Parent-Folder-Id")]),e._v(".")]),e._v(" "),t("li",[e._v("The new folder metadata transaction must generate a new UUIDv4 for the "),t("code",[e._v("Folder-Id")]),e._v(".")]),e._v(" "),t("li",[e._v("Folder Entity Metadata transactions must have "),t("code",[e._v('Entity-Type: "folder"')]),e._v(".")]),e._v(" "),t("li",[e._v("The client gets the user’s local time for the "),t("code",[e._v("Unix-Time")]),e._v(" tag, represented as Seconds Since Unix Epoch.")]),e._v(" "),t("li",[e._v("The user defined folder name is added to the "),t("code",[e._v("name")]),e._v(" property in the folder’s metadata transaction Data JSON.")]),e._v(" "),t("li",[e._v("Public folders must have the content type "),t("code",[e._v('Content-Type: ""')]),e._v(".")]),e._v(" "),t("li",[e._v("If the folder is private:\n"),t("ul",[t("li",[e._v("Its "),t("code",[e._v("Cipher")]),e._v(" tag must be filled out with the respective encryption algorithm (currently "),t("code",[e._v("AES256-GCM")]),e._v(").")]),e._v(" "),t("li",[e._v("Its "),t("code",[e._v("Cipher-IV")]),e._v(" tag must be filled out with the generated Initialization Vector for the private folder.")]),e._v(" "),t("li",[e._v("It must have the content type "),t("code",[e._v('Content-Type: "application/octet-stream"')]),e._v(".")]),e._v(" "),t("li",[e._v("The ArFS client must encrypt the Folder entity’s metadata JSON using the assigned "),t("code",[e._v("Cipher")]),e._v(" and "),t("code",[e._v("Cipher-IV")]),e._v(".")])])])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/21.2493ed7e.js b/assets/js/21.0b8a84f4.js similarity index 77% rename from assets/js/21.2493ed7e.js rename to assets/js/21.0b8a84f4.js index d72a87b..a3cffff 100644 --- a/assets/js/21.2493ed7e.js +++ b/assets/js/21.0b8a84f4.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{315:function(t,n,s){"use strict";s.r(n);var e=s(10),o=Object(e.a)({},(function(){return(0,this._self._c)("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}})}),[],!1,null,null,null);n.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{316:function(t,n,s){"use strict";s.r(n);var e=s(10),o=Object(e.a)({},(function(){return(0,this._self._c)("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}})}),[],!1,null,null,null);n.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/25.b47d5571.js b/assets/js/25.302b4487.js similarity index 89% rename from assets/js/25.b47d5571.js rename to assets/js/25.302b4487.js index 1feebc3..a87b96b 100644 --- a/assets/js/25.b47d5571.js +++ b/assets/js/25.302b4487.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{320:function(t,e,r){"use strict";r.r(e);var s=r(10),n=Object(s.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"getting-help"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#getting-help"}},[this._v("#")]),this._v(" Getting Help")]),this._v(" "),t("p",[t("a",{attrs:{href:"https://discord.gg/w4vvrezD",target:"_blank",rel:"noopener noreferrer"}},[this._v("ArDrive Community Discord"),t("OutboundLink")],1)])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{322:function(t,e,r){"use strict";r.r(e);var s=r(10),n=Object(s.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"getting-help"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#getting-help"}},[this._v("#")]),this._v(" Getting Help")]),this._v(" "),t("p",[t("a",{attrs:{href:"https://discord.gg/w4vvrezD",target:"_blank",rel:"noopener noreferrer"}},[this._v("ArDrive Community Discord"),t("OutboundLink")],1)])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/27.d65607d9.js b/assets/js/27.f4b16956.js similarity index 99% rename from assets/js/27.d65607d9.js rename to assets/js/27.f4b16956.js index b2beb94..0a89259 100644 --- a/assets/js/27.d65607d9.js +++ b/assets/js/27.f4b16956.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{322:function(t,s,a){"use strict";a.r(s);var n=a(10),e=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"cli"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#cli"}},[t._v("#")]),t._v(" CLI")]),t._v(" "),s("p",[t._v("The "),s("em",[t._v("ArDrive Command Line Interface (CLI)")]),t._v(" is a Node.js application for terminal-based "),s("a",{attrs:{href:"https://ardrive.io",target:"_blank",rel:"noopener noreferrer"}},[t._v("ArDrive"),s("OutboundLink")],1),t._v(" workflows. It also offers utility operations for securely interacting with Arweave wallets and inspecting various "),s("a",{attrs:{href:"https://ardrive.io/what-is-arweave/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Arweave"),s("OutboundLink")],1),t._v(" blockchain conditions.")]),t._v(" "),s("p",[t._v("Create your first drive and permanently store your first file on the permaweb with a series of simple CLI commands like so:")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[t._v("ardrive create-drive --wallet-file /path/to/my/wallet.json --drive-name "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Teenage Love Poetry"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"created"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"type"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"drive"')]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"metadataTxId"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"giv2R8Xj0bbe6l5taBTQJk_38zwIrMH_g1-knSCisjU"')]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"entityId"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"898687ea-b678-4f86-b4e7-49560b190356"')]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bundledIn"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Vj2x4IBEAezBvhj5RgtA247W_q3S10suI6l0E30GPoE"')]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"entityName"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Teenage Love Poetry"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"type"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"folder"')]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"metadataTxId"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"VljnttwUxRStnVuPYakF9e2whjhYJVWB0nSxD5dVyJ8"')]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"entityId"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"f0c58c11-430c-4383-8e54-4d864cc7e927"')]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bundledIn"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Vj2x4IBEAezBvhj5RgtA247W_q3S10suI6l0E30GPoE"')]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"entityName"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Teenage Love Poetry"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"type"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bundle"')]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bundleTxId"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Vj2x4IBEAezBvhj5RgtA247W_q3S10suI6l0E30GPoE"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"tips"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fees"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Vj2x4IBEAezBvhj5RgtA247W_q3S10suI6l0E30GPoE"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"44579472"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\nardrive upload-file --wallet-file /path/to/my/wallet.json --parent-folder-id "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"f0c58c11-430c-4383-8e54-4d864cc7e927"')]),t._v(" --local-path ./helloworld.txt --dest-file-name "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ode_to_ardrive.txt"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"created"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"type"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"file"')]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"entityName"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ode_to_ardrive.txt"')]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"entityId"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bd2ce978-6ede-4b0d-8f79-2d7bc235a0e0"')]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"dataTxId"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"tSMcfvAQu_tKLUkdvRRbqdX93oAf3h6c9eJsSj8mXL4"')]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"metadataTxId"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"EvE06MmE9IKeUzFMnxSgY1M5tJX4uHU64-n8Pf_lZfU"')]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bundledIn"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"qjdHiQoWlSjCvhj5RgtA247W_q3S10suI6l0E30GPoE"')]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sourceUri"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"file://Users/BestArDriver/Uploads/helloworld.txt"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"type"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bundle"')]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bundleTxId"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"qjdHiQoWlSjCvhj5RgtA247W_q3S10suI6l0E30GPoE"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"tips"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"txId"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"qjdHiQoWlSjCvhj5RgtA247W_q3S10suI6l0E30GPoE"')]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"recipient"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"address"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"i325n3L2UvgcavEM8UnFfY0OWBiyf2RrbNsLStPI73o"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"winston"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"10000000"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fees"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"qjdHiQoWlSjCvhj5RgtA247W_q3S10suI6l0E30GPoE"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("44579472")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[s("strong",[t._v("This project is in a state of active development. Use at your own risk!")])]),t._v(" "),s("h1",{attrs:{id:"ardrive"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#ardrive"}},[t._v("#")]),t._v(" ArDrive")]),t._v(" "),s("p",[s("a",{attrs:{href:"https://ardrive.io",target:"_blank",rel:"noopener noreferrer"}},[t._v("ArDrive"),s("OutboundLink")],1),t._v(" is a permanent storage platform whose "),s("a",{attrs:{href:"https://github.com/ardriveapp/",target:"_blank",rel:"noopener noreferrer"}},[t._v("applications and core libraries"),s("OutboundLink")],1),t._v(" offer hierarchical organization, privacy via complete end-to-end encryption, flexibility, extensibility, and access control over your most valuable data, all made possible by its innovative core technology, the "),s("a",{attrs:{href:"https://ardrive.atlassian.net/l/c/m6P1vJDo",target:"_blank",rel:"noopener noreferrer"}},[t._v("Arweave File System (ArFS) Protocol"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("h2",{attrs:{id:"arfs"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#arfs"}},[t._v("#")]),t._v(" ArFS")]),t._v(" "),s("p",[s("a",{attrs:{href:"https://ardrive.atlassian.net/l/c/m6P1vJDo",target:"_blank",rel:"noopener noreferrer"}},[t._v("ArFS"),s("OutboundLink")],1),t._v(" is a data modeling, storage, and retrieval protocol designed to emulate common file system operations and to provide aspects of mutability to your data hierarchy on "),s("a",{attrs:{href:"https://ardrive.io/what-is-arweave/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Arweave"),s("OutboundLink")],1),t._v("'s otherwise permanent, immutable data storage blockweave.")]),t._v(" "),s("h2",{attrs:{id:"data-portability"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#data-portability"}},[t._v("#")]),t._v(" Data Portability")]),t._v(" "),s("p",[t._v("Data uploaded via the ArDrive CLI, once indexed by Arweave's Gateways and sufficiently seeded across enough nodes on the network, can be accessed via all other ArDrive applications including the "),s("a",{attrs:{href:"https://app.ardrive.io",target:"_blank",rel:"noopener noreferrer"}},[t._v("ArDrive Web application"),s("OutboundLink")],1),t._v(" at https://app.ardrive.io.")]),t._v(" "),s("p",[t._v("All transactions successfully executed by ArDrive can always be inspected in the "),s("a",{attrs:{href:"https://viewblock.io/arweave/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Viewblock blockchain explorer"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("h2",{attrs:{id:"intended-audience"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#intended-audience"}},[t._v("#")]),t._v(" Intended Audience")]),t._v(" "),s("p",[t._v("This tool is intended for use by:")]),t._v(" "),s("ul",[s("li",[t._v("ArDrive power users with advanced workflows and resource efficiency in mind: bulk uploaders, those with larger storage demand, game developers, nft creators, storage/db admins, etc.")]),t._v(" "),s("li",[t._v("Automation tools")]),t._v(" "),s("li",[t._v("Services")]),t._v(" "),s("li",[t._v("Terminal aficionados")]),t._v(" "),s("li",[t._v("Extant and aspiring cypherpunks")])]),t._v(" "),s("p",[t._v("For deeper integrations with the "),s("a",{attrs:{href:"https://ardrive.io",target:"_blank",rel:"noopener noreferrer"}},[t._v("ArDrive"),s("OutboundLink")],1),t._v(" platform, consider using the "),s("a",{attrs:{href:"https://github.com/ardriveapp/ardrive-core-js",target:"_blank",rel:"noopener noreferrer"}},[t._v("ArDrive Core"),s("OutboundLink")],1),t._v(" (Node) library's configurable and intuitive class interfaces directly within your application.")])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{320:function(t,s,a){"use strict";a.r(s);var n=a(10),e=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"cli"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#cli"}},[t._v("#")]),t._v(" CLI")]),t._v(" "),s("p",[t._v("The "),s("em",[t._v("ArDrive Command Line Interface (CLI)")]),t._v(" is a Node.js application for terminal-based "),s("a",{attrs:{href:"https://ardrive.io",target:"_blank",rel:"noopener noreferrer"}},[t._v("ArDrive"),s("OutboundLink")],1),t._v(" workflows. It also offers utility operations for securely interacting with Arweave wallets and inspecting various "),s("a",{attrs:{href:"https://ardrive.io/what-is-arweave/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Arweave"),s("OutboundLink")],1),t._v(" blockchain conditions.")]),t._v(" "),s("p",[t._v("Create your first drive and permanently store your first file on the permaweb with a series of simple CLI commands like so:")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[t._v("ardrive create-drive --wallet-file /path/to/my/wallet.json --drive-name "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Teenage Love Poetry"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"created"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"type"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"drive"')]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"metadataTxId"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"giv2R8Xj0bbe6l5taBTQJk_38zwIrMH_g1-knSCisjU"')]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"entityId"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"898687ea-b678-4f86-b4e7-49560b190356"')]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bundledIn"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Vj2x4IBEAezBvhj5RgtA247W_q3S10suI6l0E30GPoE"')]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"entityName"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Teenage Love Poetry"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"type"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"folder"')]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"metadataTxId"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"VljnttwUxRStnVuPYakF9e2whjhYJVWB0nSxD5dVyJ8"')]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"entityId"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"f0c58c11-430c-4383-8e54-4d864cc7e927"')]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bundledIn"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Vj2x4IBEAezBvhj5RgtA247W_q3S10suI6l0E30GPoE"')]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"entityName"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Teenage Love Poetry"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"type"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bundle"')]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bundleTxId"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Vj2x4IBEAezBvhj5RgtA247W_q3S10suI6l0E30GPoE"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"tips"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fees"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Vj2x4IBEAezBvhj5RgtA247W_q3S10suI6l0E30GPoE"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"44579472"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\nardrive upload-file --wallet-file /path/to/my/wallet.json --parent-folder-id "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"f0c58c11-430c-4383-8e54-4d864cc7e927"')]),t._v(" --local-path ./helloworld.txt --dest-file-name "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ode_to_ardrive.txt"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"created"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"type"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"file"')]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"entityName"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ode_to_ardrive.txt"')]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"entityId"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bd2ce978-6ede-4b0d-8f79-2d7bc235a0e0"')]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"dataTxId"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"tSMcfvAQu_tKLUkdvRRbqdX93oAf3h6c9eJsSj8mXL4"')]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"metadataTxId"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"EvE06MmE9IKeUzFMnxSgY1M5tJX4uHU64-n8Pf_lZfU"')]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bundledIn"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"qjdHiQoWlSjCvhj5RgtA247W_q3S10suI6l0E30GPoE"')]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sourceUri"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"file://Users/BestArDriver/Uploads/helloworld.txt"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"type"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bundle"')]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bundleTxId"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"qjdHiQoWlSjCvhj5RgtA247W_q3S10suI6l0E30GPoE"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"tips"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"txId"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"qjdHiQoWlSjCvhj5RgtA247W_q3S10suI6l0E30GPoE"')]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"recipient"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"address"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"i325n3L2UvgcavEM8UnFfY0OWBiyf2RrbNsLStPI73o"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"winston"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"10000000"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(",\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fees"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"qjdHiQoWlSjCvhj5RgtA247W_q3S10suI6l0E30GPoE"')]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("44579472")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[s("strong",[t._v("This project is in a state of active development. Use at your own risk!")])]),t._v(" "),s("h1",{attrs:{id:"ardrive"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#ardrive"}},[t._v("#")]),t._v(" ArDrive")]),t._v(" "),s("p",[s("a",{attrs:{href:"https://ardrive.io",target:"_blank",rel:"noopener noreferrer"}},[t._v("ArDrive"),s("OutboundLink")],1),t._v(" is a permanent storage platform whose "),s("a",{attrs:{href:"https://github.com/ardriveapp/",target:"_blank",rel:"noopener noreferrer"}},[t._v("applications and core libraries"),s("OutboundLink")],1),t._v(" offer hierarchical organization, privacy via complete end-to-end encryption, flexibility, extensibility, and access control over your most valuable data, all made possible by its innovative core technology, the "),s("a",{attrs:{href:"https://ardrive.atlassian.net/l/c/m6P1vJDo",target:"_blank",rel:"noopener noreferrer"}},[t._v("Arweave File System (ArFS) Protocol"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("h2",{attrs:{id:"arfs"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#arfs"}},[t._v("#")]),t._v(" ArFS")]),t._v(" "),s("p",[s("a",{attrs:{href:"https://ardrive.atlassian.net/l/c/m6P1vJDo",target:"_blank",rel:"noopener noreferrer"}},[t._v("ArFS"),s("OutboundLink")],1),t._v(" is a data modeling, storage, and retrieval protocol designed to emulate common file system operations and to provide aspects of mutability to your data hierarchy on "),s("a",{attrs:{href:"https://ardrive.io/what-is-arweave/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Arweave"),s("OutboundLink")],1),t._v("'s otherwise permanent, immutable data storage blockweave.")]),t._v(" "),s("h2",{attrs:{id:"data-portability"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#data-portability"}},[t._v("#")]),t._v(" Data Portability")]),t._v(" "),s("p",[t._v("Data uploaded via the ArDrive CLI, once indexed by Arweave's Gateways and sufficiently seeded across enough nodes on the network, can be accessed via all other ArDrive applications including the "),s("a",{attrs:{href:"https://app.ardrive.io",target:"_blank",rel:"noopener noreferrer"}},[t._v("ArDrive Web application"),s("OutboundLink")],1),t._v(" at https://app.ardrive.io.")]),t._v(" "),s("p",[t._v("All transactions successfully executed by ArDrive can always be inspected in the "),s("a",{attrs:{href:"https://viewblock.io/arweave/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Viewblock blockchain explorer"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("h2",{attrs:{id:"intended-audience"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#intended-audience"}},[t._v("#")]),t._v(" Intended Audience")]),t._v(" "),s("p",[t._v("This tool is intended for use by:")]),t._v(" "),s("ul",[s("li",[t._v("ArDrive power users with advanced workflows and resource efficiency in mind: bulk uploaders, those with larger storage demand, game developers, nft creators, storage/db admins, etc.")]),t._v(" "),s("li",[t._v("Automation tools")]),t._v(" "),s("li",[t._v("Services")]),t._v(" "),s("li",[t._v("Terminal aficionados")]),t._v(" "),s("li",[t._v("Extant and aspiring cypherpunks")])]),t._v(" "),s("p",[t._v("For deeper integrations with the "),s("a",{attrs:{href:"https://ardrive.io",target:"_blank",rel:"noopener noreferrer"}},[t._v("ArDrive"),s("OutboundLink")],1),t._v(" platform, consider using the "),s("a",{attrs:{href:"https://github.com/ardriveapp/ardrive-core-js",target:"_blank",rel:"noopener noreferrer"}},[t._v("ArDrive Core"),s("OutboundLink")],1),t._v(" (Node) library's configurable and intuitive class interfaces directly within your application.")])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/28.6cb27a6f.js b/assets/js/28.f732f00d.js similarity index 99% rename from assets/js/28.6cb27a6f.js rename to assets/js/28.f732f00d.js index 2385e65..821ae66 100644 --- a/assets/js/28.6cb27a6f.js +++ b/assets/js/28.f732f00d.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{324:function(a,t,e){"use strict";e.r(t);var s=e(10),n=Object(s.a)({},(function(){var a=this,t=a._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[t("h1",{attrs:{id:"using-the-cli"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#using-the-cli"}},[a._v("#")]),a._v(" Using the CLI")]),a._v(" "),t("h2",{attrs:{id:"cli-help"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#cli-help"}},[a._v("#")]),a._v(" CLI Help")]),a._v(" "),t("p",[a._v("Learn to use any command:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--help")]),a._v("\n")])])]),t("h2",{attrs:{id:"cli-version"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#cli-version"}},[a._v("#")]),a._v(" CLI Version")]),a._v(" "),t("p",[a._v("You can print out the version by running any of:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--version")]),a._v("\nardrive "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-V")]),a._v("\n")])])]),t("h2",{attrs:{id:"wallet-operations"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#wallet-operations"}},[a._v("#")]),a._v(" Wallet Operations")]),a._v(" "),t("p",[a._v("Browsing of ArDrive public data is possible without the need for an "),t("a",{attrs:{href:"https://ardrive.atlassian.net/l/c/FpK8FuoQ",target:"_blank",rel:"noopener noreferrer"}},[a._v("Arweave wallet"),t("OutboundLink")],1),a._v(". However, for all write operations, or read operations without encryption/decryption keys, you'll need a wallet.")]),a._v(" "),t("p",[a._v("As you utilize the CLI, you can use either your wallet file or your seed phrase interchangeably. Consider the security implications of each approach for your particular use case carefully. If at any time you'd like to generate a new wallet altogether, start by generating a new seed phase. And if you'd like to use that seed phrase in the form of a wallet file, or if you'd like to recover an existing wallet via its seed phrase, use either or both of the following commands:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Generate seed-phrase")]),a._v("\nardrive generate-seedphrase\n"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"this is an example twelve word seed phrase that you could use"')]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Generate/recover wallet file (with example output file path)")]),a._v("\nardrive generate-wallet "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-s")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"this is an example twelve word seed phrase that you could use"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" /path/to/wallet/file.json\n")])])]),t("p",[a._v("Public attributes of Arweave wallets can be retrieved via their 43-character Arweave wallet address. You can retrieve the wallet address associated with "),t("a",{attrs:{href:"https://ardrive.atlassian.net/l/c/FpK8FuoQ",target:"_blank",rel:"noopener noreferrer"}},[a._v("your wallet file or 12-word seed phrase"),t("OutboundLink")],1),a._v(" (e.g. wallets generated by "),t("a",{attrs:{href:"https://arconnect.io/",target:"_blank",rel:"noopener noreferrer"}},[a._v("ArConnect"),t("OutboundLink")],1),a._v(") like so:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Wallet file")]),a._v("\nardrive get-address "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet/file.json\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Seed Phrase (with sample output)")]),a._v("\nardrive get-address "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-s")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"this is an example twelve word seed phrase that you could use"')]),a._v("\nHTTn8F92tR32N8wuo-NIDkjmqPknrbl10JWo5MZ9x2k\n")])])]),t("p",[a._v("You'll need AR in your wallet for any write operations you perform in ArDrive. You can always check your wallet balance (in both AR and Winston units) by performing:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Getting the balance for your own wallet")]),a._v("\nardrive get-balance "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet/file.json\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Getting the balance for ANY wallet (with sample output)")]),a._v("\nardrive get-balance "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-a")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"HTTn8F92tR32N8wuo-NIDkjmqPknrbl10JWo5MZ9x2k"')]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1500000000000")]),a._v(" Winston\n"),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1.5")]),a._v(" AR\n")])])]),t("p",[a._v("If, at any time, you need to send AR out of your wallet to another wallet address, you may perform:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Using our previously generated wallet as the destination...")]),a._v("\nardrive send-ar "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet/file.json --dest-address "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"HTTn8F92tR32N8wuo-NIDkjmqPknrbl10JWo5MZ9x2k"')]),a._v(" --ar-amount "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("2.12345")]),a._v("\n")])])]),t("h2",{attrs:{id:"working-with-entities"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#working-with-entities"}},[a._v("#")]),a._v(" Working With Entities")]),a._v(" "),t("p",[t("a",{attrs:{href:"https://ardrive.io",target:"_blank",rel:"noopener noreferrer"}},[a._v("ArDrive"),t("OutboundLink")],1),a._v("'s "),t("a",{attrs:{href:"https://ardrive.atlassian.net/l/c/m6P1vJDo",target:"_blank",rel:"noopener noreferrer"}},[a._v("ArFS"),t("OutboundLink")],1),a._v(" integration provides for hierarchical organization of your file and folder data on Arweave.")]),a._v(" "),t("p",[a._v("The fundamental entity types specified by ArFS are:")]),a._v(" "),t("ul",[t("li",[a._v("Drives")]),a._v(" "),t("li",[a._v("Folders")]),a._v(" "),t("li",[a._v("Files")])]),a._v(" "),t("p",[a._v("Each instance of these entities have a Version 4 UUID entity ID that is commonly referred to by its entity type, i.e. drive ID, folder ID, and file ID.")]),a._v(" "),t("p",[a._v("When you execute write functions with the CLI, the JSON output will contain information about the Arweave Transaction IDs that were registered when writing your entities to the blockweave, any miner rewards or "),t("a",{attrs:{href:"https://ardrive.io/community/",target:"_blank",rel:"noopener noreferrer"}},[a._v("ArDrive Community"),t("OutboundLink")],1),a._v(" tips that were disbursed from your wallet, and any new entity IDs and, when applicable, encryption keys that were generated in the process of creating the entities. Typically, you'll want to keep track of those and get proficient with retrieving them in order to build your drive hierarchy to your liking. See "),t("a",{attrs:{href:"#understanding-drive-and-file-keys"}},[a._v("Understanding Drive and File Keys")]),a._v(" for more info.")]),a._v(" "),t("h3",{attrs:{id:"dry-run"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#dry-run"}},[a._v("#")]),a._v(" Dry Run")]),a._v(" "),t("p",[a._v("An important feature of the ArDrive CLI is the "),t("code",[a._v("--dry-run")]),a._v(' flag. On each command that would write an ArFS entity, there is the option to run it as a "dry run". This will run all of the steps and print the outputs of a regular ArFS write, but will skip sending the actual transaction:')]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("my-command"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("other-options"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" --dry-run\n")])])]),t("p",[a._v("This can be very useful for gathering price estimations or to confirm that you've copy-pasted your entity IDs correctly before committing to an upload.")]),a._v(" "),t("h3",{attrs:{id:"uploading-to-turbo-beta"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#uploading-to-turbo-beta"}},[a._v("#")]),a._v(" Uploading to Turbo (BETA) "),t("a",{attrs:{id:"upload-to-turbo"}})]),a._v(" "),t("p",[a._v("Users can optionally choose to send each ArFS entities created to "),t("a",{attrs:{href:"https://ardrive.io/turbo/",target:"_blank",rel:"noopener noreferrer"}},[a._v("ArDrive Turbo"),t("OutboundLink")],1),a._v(" using the "),t("code",[a._v("--turbo")]),a._v(" flag. Instead of using AR from an Arweave wallet, you can use Turbo Credits or take advantage of free/discounted upload promotions.")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("my-command"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("other-options"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--turbo")]),a._v("\n")])])]),t("p",[a._v("This flag will skip any balance check on the CLI side. Turbo will check a user's balance and accept/reject a data item at the time of upload. The "),t("code",[a._v("--turbo")]),a._v(" flag by default will send your files to "),t("code",[a._v("upload.ardrive.io")]),a._v(" to be bundled. To change the Turbo destination, users can use the "),t("code",[a._v("--turbo-url")]),a._v(" flag.")]),a._v(" "),t("h2",{attrs:{id:"working-with-drives"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#working-with-drives"}},[a._v("#")]),a._v(" Working With Drives")]),a._v(" "),t("h3",{attrs:{id:"understanding-drive-hierarchies"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#understanding-drive-hierarchies"}},[a._v("#")]),a._v(" Understanding Drive Hierarchies")]),a._v(" "),t("p",[a._v('At the root of every data tree is a "Drive" entity. When a drive is created, a Root Folder is also created for it. The entity IDs for both are generated and returned when you create a new drive:')]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Use `tee` to keep a receipt of the full set of transactions info and `jq` to focus on the data of interest")]),a._v("\nardrive create-drive --wallet-file /path/to/my/wallet.json --drive-name "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Teenage Love Poetry"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("tee")]),a._v(" created_drive.json "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v("\njq "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v("'[.created[] | del(.metadataTxId, .entityName, .bundledIn)]'")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"type"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"drive"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"6939b9e0-cc98-42cb-bae0-5888eca78885"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"type"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"folder"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"d1535126-fded-4990-809f-83a06f2a1118"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n")])])]),t("p",[a._v("The relationship between the drive and its root folder is clearly visible when retrieving the drive's info:"),t("a",{attrs:{id:"drive-info"}})]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive drive-info "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"6939b9e0-cc98-42cb-bae0-5888eca78885"')]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" jq "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v("'{driveId, rootFolderId}'")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"driveId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"6939b9e0-cc98-42cb-bae0-5888eca78885"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"rootFolderId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"d1535126-fded-4990-809f-83a06f2a1118"')]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n\n")])])]),t("p",[a._v('All file and folder entities in the drive will be anchored to it by a "Drive-ID" GQL Tag. And they\'ll each be anchored to a parent folder ID, tracked via the "Parent-Folder-ID" GQL tag, forming a tree structure whose base terminates at the Root Folder.')]),a._v(" "),t("h3",{attrs:{id:"understanding-drive-and-file-keys"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#understanding-drive-and-file-keys"}},[a._v("#")]),a._v(" Understanding Drive and File Keys")]),a._v(" "),t("p",[a._v('Private Drives achieve privacy via end-to-end encryption facilitated by hash-derived "Keys". Drive Keys encrypt/decrypt Drive and Folder data, and File Keys encrypt/decrypt File Data.')]),a._v(" "),t("p",[a._v("The relationships among your data and their keys is as follows:")]),a._v(" "),t("ul",[t("li",[a._v("Drive Key = functionOf(Wallet Signature, Randomly Generated Drive ID, User-specified Drive Password)")]),a._v(" "),t("li",[a._v("File Key = functionOf(Randomly Generated File ID, Drive Key)")])]),a._v(" "),t("p",[a._v("When you create private entities, the returned JSON data from the ArDrive CLI will contain the keys needed to decrypt the encrypted representation of your entity that is now securely and permanently stored on the blockweave.")]),a._v(" "),t("p",[a._v("To derive the drive key again for a drive, perform the following:"),t("a",{attrs:{id:"derive-drive-key"}})]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Will throw an error if the wallet or password specified can't be used to decrypt the on-chain drive")]),a._v("\nardrive get-drive-key "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/my/wallet.json "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"6939b9e0-cc98-42cb-bae0-5888eca78885"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-P")]),a._v("\n")])])]),t("p",[a._v("To derive the file key again for a file, perform the following:"),t("a",{attrs:{id:"derive-file-key"}})]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Will throw an error if the drive key or drive-key-derivation data specified can't be used to decrypt the on-chain file")]),a._v("\nardrive get-file-key --file-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"bd2ce978-6ede-4b0d-8f79-2d7bc235a0e0"')]),a._v(" --drive-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"6939b9e0-cc98-42cb-bae0-5888eca78885"')]),a._v(" --drive-key "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"yHdCjpCK3EcuhQcKNx2d/NN5ReEjoKfZVqKunlCnPEo"')]),a._v("\n")])])]),t("h3",{attrs:{id:"managing-drive-passwords"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#managing-drive-passwords"}},[a._v("#")]),a._v(" Managing Drive Passwords")]),a._v(" "),t("p",[a._v("The ArDrive CLI's private drive and folder functions all require either a drive password OR a drive key. Private file functions require either the drive password or the file key. "),t("strong",[a._v("Keys and passwords are sensitive data, so manage the entry, display, storage, and transmission of them very carefully.")])]),a._v(" "),t("p",[a._v("Drive passwords are the most portable, and fundamental, encryption facet, so a few options are available during private drive operations for supplying them:")]),a._v(" "),t("ul",[t("li",[a._v("Environment Variable")]),a._v(" "),t("li",[a._v("STDIN")]),a._v(" "),t("li",[a._v("Secure Prompt")])]),a._v(" "),t("h4",{attrs:{id:"supplying-your-password-environment-variable"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#supplying-your-password-environment-variable"}},[a._v("#")]),a._v(" Supplying Your Password: Environment Variable"),t("a",{attrs:{id:"pw-environment-variable"}})]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Securely type your password into a read prompt, store it to TMP_ARDRIVE_PW, and export it for the shell session")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("read")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-rs")]),a._v(" TMP_ARDRIVE_PW\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("export")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("ARDRIVE_DRIVE_PW")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),a._v("TMP_ARDRIVE_PW"),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v("\nardrive "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("some private command"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-P")]),a._v("\n")])])]),t("h4",{attrs:{id:"supplying-your-password-stdin"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#supplying-your-password-stdin"}},[a._v("#")]),a._v(" Supplying Your Password: STDIN"),t("a",{attrs:{id:"pw-stdin"}})]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Pipe your drive password to the ArDrive CLI")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("cat")]),a._v(" /path/to/my/drive/password.txt "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" ardrive "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("some private command"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-P")]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Redirect your drive password to the ArDrive CLI")]),a._v("\nardrive "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("some private command"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-P")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v(" /path/to/my/drive/password.txt\n")])])]),t("h4",{attrs:{id:"supplying-your-password-prompt"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#supplying-your-password-prompt"}},[a._v("#")]),a._v(" Supplying Your Password: Prompt"),t("a",{attrs:{id:"pw-prompt"}})]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# When all other options fail, the CLI will prompt for your password (NOT COMPATIBLE WITH PIPES AND REDIRECTS!)")]),a._v("\nardrive "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("some private command"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-P")]),a._v("\n? Enter drive password: › ********\n")])])]),t("h3",{attrs:{id:"creating-drives"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#creating-drives"}},[a._v("#")]),a._v(" Creating Drives")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Public drive")]),a._v("\nardrive create-drive --wallet-file /path/to/my/wallet.json --drive-name "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"My Public Archive"')]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Private drive")]),a._v("\nardrive create-drive --wallet-file /path/to/my/wallet.json --drive-name "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Teenage Love Poetry"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-P")]),a._v("\n")])])]),t("h3",{attrs:{id:"listing-drives-for-an-address"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#listing-drives-for-an-address"}},[a._v("#")]),a._v(" Listing Drives for an Address")]),a._v(" "),t("p",[a._v("You can list all the drives associated with any Arweave wallet address, though the details of private drives will be obfuscated from you unless you provide the necessary decryption data.")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# List all your own drives")]),a._v("\nardrive list-all-drives "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/my/wallet.json "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-P")]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# List any address's drives")]),a._v("\nardrive list-all-drives "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--address")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"HTTn8F92tR32N8wuo-NIDkjmqPknrbl10JWo5MZ9x2k"')]),a._v("\n")])])]),t("h3",{attrs:{id:"listing-every-entity-in-a-drive"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#listing-every-entity-in-a-drive"}},[a._v("#")]),a._v(" Listing Every Entity in a Drive"),t("a",{attrs:{id:"list-drive"}})]),a._v(" "),t("p",[a._v("Useful notes on listing the contents of drives:")]),a._v(" "),t("ul",[t("li",[a._v("Listing a drive is effectively the same as listing its root folder.")]),a._v(" "),t("li",[a._v("You can control the tree depth of the data returned.")]),a._v(" "),t("li",[a._v("path, txPath, and entityIdPath properties on entities can provide useful handholds for other forms of data navigation")])]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# List everything in a private drive")]),a._v("\nardrive list-drive "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"c7f87712-b54e-4491-bc96-1c5fa7b1da50"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/my/wallet.json "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-P")]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# List a private drive including the `fileKey` and/or `driveKey` of all listed entitites")]),a._v("\nardrive list-drive "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"c7f87712-b54e-4491-bc96-1c5fa7b1da50"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/my/wallet.json "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-P")]),a._v(" --with-keys\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# List the contents of a public drive up to and including those in the grandchild folders of the root folder")]),a._v("\nardrive list-drive "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"c7f87712-b54e-4491-bc96-1c5fa7b1da50"')]),a._v(" --max-depth "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("2")]),a._v("\n")])])]),t("h3",{attrs:{id:"list-drive-pipeline-examples"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#list-drive-pipeline-examples"}},[a._v("#")]),a._v(" List Drive Pipeline Examples")]),a._v(" "),t("p",[a._v("You can utilize "),t("code",[a._v("jq")]),a._v(" and the list commands to reshape the commands' output data into useful forms and stats for many use cases. Here are a few examples:")]),a._v(" "),t("p",[t("a",{attrs:{id:"get-share-links"}})]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Get share links for a PUBLIC drive")]),a._v("\nardrive list-drive "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" a44482fd-592e-45fa-a08a-e526c31b87f1 "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" jq "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'.[] | select(.entityType == "file") | "https://app.ardrive.io/#/file/" + .entityId + "/view"\'')]),a._v("\n")])])]),t("p",[a._v("Example output:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"https://app.ardrive.io/#/file/1337babe-f000-dead-beef-ffffffffffff/view"')]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"https://app.ardrive.io/#/file/cdbc9ddd-1cab-41d9-acbd-fd4328929de3/view"')]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"https://app.ardrive.io/#/file/f19bc712-b57a-4e0d-8e5c-b7f1786b34a1/view"')]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"https://app.ardrive.io/#/file/4f8e081b-42f2-442d-be41-57f6f906e1c8/view"')]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"https://app.ardrive.io/#/file/0e02d254-c853-4ff0-9b6e-c4d23d2a95f5/view"')]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"https://app.ardrive.io/#/file/c098b869-29d1-4a86-960f-a9e10433f0b0/view"')]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"https://app.ardrive.io/#/file/4afc8cdf-4d27-408a-bfb9-0a2ec21eebf8/view"')]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"https://app.ardrive.io/#/file/85fe488d-fcf7-48ca-9df8-2b39958bbf15/view"')]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("..")]),a._v(".\n")])])]),t("p",[t("a",{attrs:{id:"get-total-size"}})]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Get total size of all files within drive")]),a._v("\nardrive list-drive "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" 13c3c232-6687-4d11-8ac1-35284102c7db "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" jq "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v("' map(select(.entityType == \"file\") | .size) | add'")]),a._v("\n")])])]),t("p",[t("a",{attrs:{id:"get-file-count"}})]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Get total number of files within drive")]),a._v("\nardrive list-drive "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" 01ea6ba3-9e58-42e7-899d-622fd110211c "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" jq "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v("'[ .[] | select(.entityType == \"file\") ] | length'")]),a._v("\n")])])]),t("h2",{attrs:{id:"working-with-folders"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#working-with-folders"}},[a._v("#")]),a._v(" Working With Folders")]),a._v(" "),t("p",[a._v("As discussed previously, all folders in a drive are linked by way of parent folder references back to the root folder of a drive. Folders can be moved into any folder in the hierarchy that's not in their own subtree.")]),a._v(" "),t("h3",{attrs:{id:"creating-folders"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#creating-folders"}},[a._v("#")]),a._v(" Creating Folders")]),a._v(" "),t("p",[a._v("Creating folders manually is straightforward:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive create-folder --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"63153bb3-2ca9-4d42-9106-0ce82e793321"')]),a._v(" --folder-name "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"My Awesome Folder"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json\n")])])]),t("p",[a._v("Example output:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"created"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"type"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"folder"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"metadataTxId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"AYFMBVmwqhbg9y5Fbj3Iasy5oxUqhauOW7PcS1sl4Dk"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"d1b7c514-fb12-4603-aad8-002cf63015d3"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"key"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"yHdCjpCKD2cuhQcKNx2d/XF5ReEjoKfZVqKunlCnPEk"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityName"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"My Awesome Folder"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"tips"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"fees"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"AYFMBVmwqhbg9y5Fbj3Iasy5oxUqhauOW7PcS1sl4Dk"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1378052")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("p",[a._v("Note: Folders can also be created by supplying a folder as the --local-path of an upload-file command. In this case, the folder hierarchy on the local disk will be reconstructed on chain during the course of the recursive bulk upload.")]),a._v(" "),t("h3",{attrs:{id:"moving-folders"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#moving-folders"}},[a._v("#")]),a._v(" Moving Folders")]),a._v(" "),t("p",[a._v("Moving a folder is as simple as supplying a new parent folder ID. Note that naming collisions among entities within a folder are not allowed.")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive move-folder --folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"9af694f6-4cfc-4eee-88a8-1b02704760c0"')]),a._v(" --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"29850ab7-56d4-4e1f-a5be-cb86d5513921"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json\n")])])]),t("h3",{attrs:{id:"renaming-folders"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#renaming-folders"}},[a._v("#")]),a._v(" Renaming Folders"),t("a",{attrs:{id:"rename-folder"}})]),a._v(" "),t("p",[a._v("In order to rename a folder you must provide a name different from its current one, and it must not create naming conflicts with its sibling entities.")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive rename-folder --folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"568d5eba-dbf3-4a49-8129-1c58f7fd35bc"')]),a._v(" --folder-name "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Folder with cool stuff"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"./wallet.json"')]),a._v("\n")])])]),t("h3",{attrs:{id:"viewing-folder-metadata"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#viewing-folder-metadata"}},[a._v("#")]),a._v(" Viewing Folder Metadata")]),a._v(" "),t("p",[a._v("To view the metadata of a folder, users can use the "),t("code",[a._v("folder-info")]),a._v(" command:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive folder-info --folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"9af694f6-4cfc-4eee-88a8-1b02704760c0"')]),a._v("\n")])])]),t("h3",{attrs:{id:"listing-contents-of-a-folder"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#listing-contents-of-a-folder"}},[a._v("#")]),a._v(" Listing Contents of a Folder")]),a._v(" "),t("p",[a._v("Similar to drives, the "),t("code",[a._v("list-folder")]),a._v(" command can be used to fetch the metadata of each entity within a folder. But by default, the command will fetch only the immediate children of that folder ("),t("code",[a._v("--max-depth 0")]),a._v("):")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v('# List immediate children of folder "My Public Folder"')]),a._v("\nardrive list-folder --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"29850ab7-56d4-4e1f-a5be-cb86d5513940"')]),a._v("\n")])])]),t("p",[a._v("Example output:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"appName"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"ArDrive-CLI"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"appVersion"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"2.0"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"arFS"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"0.11"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"contentType"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"application/json"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"driveId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"01ea6ba3-9e58-42e7-899d-622fd110211a"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityType"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"folder"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"name"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"mytestfolder"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"txId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"HYiKyfLwY7PT9NleTQoTiM_-qPVUwf4ClDhx1sjUAEU"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"unixTime"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1635102772")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"parentFolderId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"29850ab7-56d4-4e1f-a5be-cb86d5513940"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"03df2929-1440-4ab4-bbf0-9dc776e1ed96"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"path"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/My Public Folder/mytestfolder"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"txIdPath"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/09_x0X2eZ3flXXLS72WdTDq6uaa5g2LjsT-QH1m0zhU/HYiKyfLwY7PT9NleTQoTiM_-qPVUwf4ClDhx1sjUAEU"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityIdPath"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/29850ab7-56d4-4e1f-a5be-cb86d5513940/03df2929-1440-4ab4-bbf0-9dc776e1ed96"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"appName"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"ArDrive-CLI"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"appVersion"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"2.0"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"arFS"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"0.11"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"contentType"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"application/json"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"driveId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"01ea6ba3-9e58-42e7-899d-622fd110211a"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityType"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"folder"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"name"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Super sonic public folder"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"txId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"VUk1B_vo1va2-EHLtqjsotzy0Rdn6lU4hQo3RD2xoTI"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"unixTime"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1631283259")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"parentFolderId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"29850ab7-56d4-4e1f-a5be-cb86d5513940"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"452c6aec-43dc-4015-9abd-20083068d432"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"path"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/My Public Folder/Super sonic sub folder"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"txIdPath"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/09_x0X2eZ3flXXLS72WdTDq6uaa5g2LjsT-QH1m0zhU/VUk1B_vo1va2-EHLtqjsotzy0Rdn6lU4hQo3RD2xoTI"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityIdPath"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/29850ab7-56d4-4e1f-a5be-cb86d5513940/452c6aec-43dc-4015-9abd-20083068d432"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"appName"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"ArDrive-CLI"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"appVersion"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"2.0"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"arFS"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"0.11"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"contentType"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"application/json"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"driveId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"01ea6ba3-9e58-42e7-899d-622fd110211a"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityType"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"file"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"name"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"test-number-twelve.txt"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"txId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"429zBqnd7ZBNzgukaix26RYz3g5SeXCCo_oIY6CPZLg"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"unixTime"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1631722234")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"size"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("47")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"lastModifiedDate"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1631722217028")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"dataTxId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"vA-BxAS7I6n90cH4Fzsk4cWS3EOPb1KOhj8yeI88dj0"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"dataContentType"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"text/plain"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"parentFolderId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"29850ab7-56d4-4e1f-a5be-cb86d5513940"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"e5948327-d6de-4acf-a6fe-e091ecf78d71"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"path"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/My Public Folder/test-number-twelve.txt"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"txIdPath"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/09_x0X2eZ3flXXLS72WdTDq6uaa5g2LjsT-QH1m0zhU/429zBqnd7ZBNzgukaix26RYz3g5SeXCCo_oIY6CPZLg"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityIdPath"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/29850ab7-56d4-4e1f-a5be-cb86d5513940/e5948327-d6de-4acf-a6fe-e091ecf78d71"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"appName"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"ArDrive-CLI"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"appVersion"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"2.0"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"arFS"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"0.11"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"contentType"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"application/json"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"driveId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"01ea6ba3-9e58-42e7-899d-622fd110211a"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityType"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"file"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"name"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"wonderful-test-file.txt"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"txId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"6CokwlzB81Fx7dq-lB654VM0XQykdU6eYohDmEJ2gk4"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"unixTime"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1631671275")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"size"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("23")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"lastModifiedDate"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1631283389232")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"dataTxId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"UP8THwA_1gvyRqNRqYmTpWvU4-UzNWBN7SiX_AIihg4"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"dataContentType"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"text/plain"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"parentFolderId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"29850ab7-56d4-4e1f-a5be-cb86d5513940"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"3274dae9-3487-41eb-94d5-8d5d3d8bc343"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"path"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/My Public Folder/wonderful-test-file.txt"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"txIdPath"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/09_x0X2eZ3flXXLS72WdTDq6uaa5g2LjsT-QH1m0zhU/6CokwlzB81Fx7dq-lB654VM0XQykdU6eYohDmEJ2gk4"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityIdPath"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/29850ab7-56d4-4e1f-a5be-cb86d5513940/3274dae9-3487-41eb-94d5-8d5d3d8bc343"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n")])])]),t("p",[a._v("To list further than the immediate children, you can make use of the flags: "),t("code",[a._v("--all")]),a._v(" and "),t("code",[a._v("--max-depth")]),a._v(".")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# List all contents of a public folder")]),a._v("\nardrive list-folder --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"9af694f6-4cfc-4eee-88a8-1b02704760c0"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--all")]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# List the contents of a public folder with custom depth")]),a._v("\nardrive list-folder --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"9af694f6-4cfc-4eee-88a8-1b02704760c0"')]),a._v(" --max-depth "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("2")]),a._v("\n")])])]),t("p",[a._v("In the case of private entitites, the "),t("code",[a._v("--with-keys")]),a._v(" flag will make the command to include the keys in the output.")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# List all contents of a private folder including the `fileKey` and/or `driveKey` of all listed entitites")]),a._v("\nardrive list-folder --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"1b027047-4cfc-4eee-88a8-9af694f660c0"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /my/wallet.json --with-keys\n")])])]),t("h2",{attrs:{id:"working-with-files"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#working-with-files"}},[a._v("#")]),a._v(" Working With Files")]),a._v(" "),t("p",[a._v("Similar to folders, files are linked to a parent folder which ultimately chains the file back to the root folder of its parent drive. As such, a parent folder ID is required in order to upload files. Files can be freely moved to other folders within their original drive.")]),a._v(" "),t("p",[a._v("The important difference for file entities is that they also hold a reference to their data transaction ID, which is the "),t("code",[a._v("dataTxId")]),a._v(" as returned by the "),t("code",[a._v("file-info")]),a._v(" command. This is where your uploaded data lives on the permaweb.")]),a._v(" "),t("p",[t("strong",[a._v("NOTE: The CLI currently (v1.0.0) has progress logging on uploads DISABLED for producing clean JSON outputs that can be piped in the terminal. On larger uploads, remember to be patient. You can check your system's "),t("code",[a._v("node")]),a._v(" process to confirm the process is still uploading.")])]),a._v(" "),t("h3",{attrs:{id:"uploading-a-single-file"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#uploading-a-single-file"}},[a._v("#")]),a._v(" Uploading a Single File")]),a._v(" "),t("p",[a._v("To upload a file, you'll need a parent folder id, the file to upload's file path, and the path to your wallet:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Supply the parent folder ID to upload-file")]),a._v("\nardrive upload-file --local-path /path/to/file.txt --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"9af694f6-4cfc-4eee-88a8-1b02704760c0"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json\n")])])]),t("p",[a._v("Example output:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"created"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"type"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"file"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityName"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"file.txt"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"6613395a-cf19-4420-846a-f88b7b765c05"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"dataTxId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"l4iNWyBapfAIj7OU-nB8z9XrBhawyqzs5O9qhk-3EnI"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"metadataTxId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"YfdDXUyerPCpBbGTm_gv_x5hR3tu5fnz8bM-jPL__JE"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"bundledIn"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"1zwdfZAIV8E26YjBs2ZQ4xjjP_1ewalvRgD_GyYw7f8"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"sourceUri"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"file:///path/to/file.txt"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"type"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"bundle"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"bundleTxId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"1zwdfZAIV8E26YjBs2ZQ4xjjP_1ewalvRgD_GyYw7f8"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"tips"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"txId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"1zwdfZAIV8E26YjBs2ZQ4xjjP_1ewalvRgD_GyYw7f8"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"recipient"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"address"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"3mxGJ4xLcQQNv6_TiKx0F0d5XVE0mNvONQI5GZXJXkt"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"winston"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"10000000"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"fees"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"1zwdfZAIV8E26YjBs2ZQ4xjjP_1ewalvRgD_GyYw7f8"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("42819829")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("p",[a._v("NOTE: To upload to the root of a drive, specify its root folder ID as the parent folder ID for the upload destination. You can retrieve it like so:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive drive-info "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"c7f87712-b54e-4491-bc96-1c5fa7b1da50"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" jq "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-r")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v("'.rootFolderId'")]),a._v("\n")])])]),t("h3",{attrs:{id:"ipfs-cid-tagging"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ipfs-cid-tagging"}},[a._v("#")]),a._v(" IPFS CID Tagging")]),a._v(" "),t("p",[a._v("Certain nodes on the Arweave network may be running the "),t("a",{attrs:{href:"https://arweave.medium.com/arweave-ipfs-persistence-for-the-interplanetary-file-system-9f12981c36c3",target:"_blank",rel:"noopener noreferrer"}},[a._v("IPFS+Arweave bridge"),t("OutboundLink")],1),a._v(". Tagging your file upload transaction with its IPFS v1 CID value in the 'IPFS-Add' tag may allow you to take advantage of this system. It can also be helpful for finding data on Arweave via GQL based on its CID. To include the CID tag on your "),t("strong",[a._v("PUBLIC")]),a._v(" file uploads, you may use the '--add-ipfs-tag' flag:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive upload-file --add-ipfs-tag --local-path /path/to/file.txt --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"9af694f6-4cfc-4eee-88a8-1b02704760c0"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json\n")])])]),t("h3",{attrs:{id:"progress-logging-of-transaction-uploads"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#progress-logging-of-transaction-uploads"}},[a._v("#")]),a._v(" Progress Logging of Transaction Uploads")]),a._v(" "),t("p",[a._v("Progress logging of transaction uploads to stderr can be enabled by setting the "),t("code",[a._v("ARDRIVE_PROGRESS_LOG")]),a._v(" environment variable to "),t("code",[a._v("1")]),a._v(":")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("Uploading "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("file")]),a._v(" transaction "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v(" of total "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("2")]),a._v(" transactions"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("..")]),a._v(".\nTransaction _GKQasQX194a364Hph8Oe-oku1AdfHwxWOw9_JC1yjc Upload Progress: "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),a._v("%\nTransaction _GKQasQX194a364Hph8Oe-oku1AdfHwxWOw9_JC1yjc Upload Progress: "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("35")]),a._v("%\nTransaction _GKQasQX194a364Hph8Oe-oku1AdfHwxWOw9_JC1yjc Upload Progress: "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("66")]),a._v("%\nTransaction _GKQasQX194a364Hph8Oe-oku1AdfHwxWOw9_JC1yjc Upload Progress: "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("100")]),a._v("%\nUploading "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("file")]),a._v(" transaction "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("2")]),a._v(" of total "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("2")]),a._v(" transactions"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("..")]),a._v(".\nTransaction nA1stCdTkuf290k0qsqvmJ78isEC0bwgrAi3D8Cl1LU Upload Progress: "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),a._v("%\nTransaction nA1stCdTkuf290k0qsqvmJ78isEC0bwgrAi3D8Cl1LU Upload Progress: "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("13")]),a._v("%\nTransaction nA1stCdTkuf290k0qsqvmJ78isEC0bwgrAi3D8Cl1LU Upload Progress: "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("28")]),a._v("%\nTransaction nA1stCdTkuf290k0qsqvmJ78isEC0bwgrAi3D8Cl1LU Upload Progress: "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("42")]),a._v("%\nTransaction nA1stCdTkuf290k0qsqvmJ78isEC0bwgrAi3D8Cl1LU Upload Progress: "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("60")]),a._v("%\nTransaction nA1stCdTkuf290k0qsqvmJ78isEC0bwgrAi3D8Cl1LU Upload Progress: "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("76")]),a._v("%\nTransaction nA1stCdTkuf290k0qsqvmJ78isEC0bwgrAi3D8Cl1LU Upload Progress: "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("91")]),a._v("%\nTransaction nA1stCdTkuf290k0qsqvmJ78isEC0bwgrAi3D8Cl1LU Upload Progress: "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("100")]),a._v("%\n")])])]),t("h3",{attrs:{id:"download-a-single-file-beta"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#download-a-single-file-beta"}},[a._v("#")]),a._v(" Download a Single file (BETA)"),t("a",{attrs:{id:"download-file"}})]),a._v(" "),t("p",[a._v("By using the "),t("code",[a._v("download-file")]),a._v(" command you can download a file on chain to a folder in your local storage specified by --local-path (or to your current working directory if not specified):")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive download-file "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json --file-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"ff450770-a9cb-46a5-9234-89cbd9796610"')]),a._v(" --local-path /my_ardrive_downloads/\n")])])]),t("p",[a._v("Specify a filename in the --local-path if you'd like to use a different name than the one that's used in your drive:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive download-file "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json --file-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"ff450770-a9cb-46a5-9234-89cbd9796610"')]),a._v(" --local-path /my_ardrive_downloads/my_pic.png\n")])])]),t("h3",{attrs:{id:"rename-a-single-file"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rename-a-single-file"}},[a._v("#")]),a._v(" Rename a Single File"),t("a",{attrs:{id:"rename-file"}})]),a._v(" "),t("p",[a._v("To rename an on-chain file you can make use of the "),t("code",[a._v("rename-file")]),a._v(" command. The required parameters are the file ID and the new name, as well as the owner wallet or seed phrase.")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive rename-file --file-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"290a3f9a-37b2-4f0f-a899-6fac983833b3"')]),a._v(" --file-name "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"My custom file name.txt"')]),a._v(" --wallet-file "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"wallet.json"')]),a._v("\n")])])]),t("h3",{attrs:{id:"uploading-a-folder-with-files-bulk-upload"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#uploading-a-folder-with-files-bulk-upload"}},[a._v("#")]),a._v(" Uploading a Folder with Files (Bulk Upload)"),t("a",{attrs:{id:"bulk-upload"}})]),a._v(" "),t("p",[a._v("Users can perform a bulk upload by using the upload-file command on a target folder. The command will reconstruct the folder hierarchy on local disk as ArFS folders on the permaweb and upload each file into their corresponding folders:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive upload-file --local-path /path/to/folder --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"9af694f6-4cfc-4eee-88a8-1b02704760c0"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json\n")])])]),t("h3",{attrs:{id:"downloading-a-folder-with-files"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#downloading-a-folder-with-files"}},[a._v("#")]),a._v(" Downloading a Folder with Files"),t("a",{attrs:{id:"download-folder"}})]),a._v(" "),t("p",[a._v("You can download a folder from ArDrive to your local machine with the "),t("code",[a._v("download-folder")]),a._v(' command. In the following examples, assume that a folder with ID "47f5bde9-61ba-49c7-b409-1aa4a9e250f6" exists in your drive and is named "MyArDriveFolder".')]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v('# Downloads "MyArDriveFolder" into the current working directory, i.e. ./MyArDriveFolder/')]),a._v("\nardrive download-folder "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"47f5bde9-61ba-49c7-b409-1aa4a9e250f6"')]),a._v("\n")])])]),t("p",[a._v("By specifying the "),t("code",[a._v("--local-path")]),a._v(" option, you can choose the local parent folder into which the on-chain folder will be downloaded. When the parameter is omitted, its value defaults to the current working directory (i.e. "),t("code",[a._v("./")]),a._v(").")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v('# Downloads "MyArDriveFolder" into /my_ardrive_downloads/MyArDriveFolder')]),a._v("\nardrive download-folder "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"47f5bde9-61ba-49c7-b409-1aa4a9e250f6"')]),a._v(" --local-path /my_ardrive_downloads/\n")])])]),t("p",[a._v("The "),t("code",[a._v("--max-depth")]),a._v(" parameter lets you to choose a custom folder depth to download. When omitted, the entire subtree of the folder will be downloaded. In the following example, only the immediate children of the folder will be downloaded:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive download-folder "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"47f5bde9-61ba-49c7-b409-1aa4a9e250f6"')]),a._v(" --max-depth "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),a._v("\n")])])]),t("p",[a._v("The behaviors of "),t("code",[a._v("--local-path")]),a._v(" are similar to those of "),t("code",[a._v("cp")]),a._v(" and "),t("code",[a._v("mv")]),a._v(" in Unix systems, e.g.:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v('# folder downloaded to "/existing_folder/MyArDriveFolder"')]),a._v("\nardrive download-folder "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"47f5bde9-61ba-49c7-b409-1aa4a9e250f6"')]),a._v(" --local-path "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/existing_folder"')]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v('# folder downloaded to "/existing_folder/MyArDriveFolder/MyArDriveFolder" as "/existing_folder/MyArDriveFolder" already exists')]),a._v("\nardrive download-folder "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"47f5bde9-61ba-49c7-b409-1aa4a9e250f6"')]),a._v(" --local-path "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/existing_folder/MyArDriveFolder"')]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v('# folder downloaded to "/existing_folder/non_existent_folder"')]),a._v("\nardrive download-folder "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"47f5bde9-61ba-49c7-b409-1aa4a9e250f6"')]),a._v(" --local-path "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/existing_folder/non_existent_folder"')]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# ERROR!")]),a._v("\nardrive download-folder "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"47f5bde9-61ba-49c7-b409-1aa4a9e250f6"')]),a._v(" --local-path "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/non_existent_folder_1/non_existent_folder_2"')]),a._v("\n")])])]),t("h3",{attrs:{id:"downloading-a-drive"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#downloading-a-drive"}},[a._v("#")]),a._v(" Downloading a Drive"),t("a",{attrs:{id:"download-drive"}})]),a._v(" "),t("p",[a._v("To download the whole drive you can use the "),t("code",[a._v("download-drive")]),a._v(" command.")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive download-drive "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"c0c8ba1c-efc5-420d-a07c-a755dc67f6b2"')]),a._v("\n")])])]),t("p",[a._v("This is equivalent to running the "),t("code",[a._v("download-folder")]),a._v(" command against the root folder of the drive.")]),a._v(" "),t("h3",{attrs:{id:"uploading-multiple-files"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#uploading-multiple-files"}},[a._v("#")]),a._v(" Uploading Multiple Files"),t("a",{attrs:{id:"multi-file-upload"}})]),a._v(" "),t("p",[a._v("To upload an arbitrary number of files or folders, pass a space-separated list of paths to "),t("code",[a._v("--local-paths")]),a._v(":")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Specifying a mixed set of file and folder paths")]),a._v("\nardrive upload-file "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" wallet.json "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-F")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"6939b9e0-cc98-42cb-bae0-5888eca78885"')]),a._v(" --local-paths ./image.png ~/backups/ "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("..")]),a._v("/another_file.txt\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Example using glob expansion to upload all .json files in the current folder")]),a._v("\nardrive upload-file "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" wallet.json "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-F")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"6939b9e0-cc98-42cb-bae0-5888eca78885"')]),a._v(" --local-paths ./*.json\n")])])]),t("h3",{attrs:{id:"name-conflict-resolution-on-upload"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#name-conflict-resolution-on-upload"}},[a._v("#")]),a._v(" Name Conflict Resolution on Upload"),t("a",{attrs:{id:"conflict-resolution"}})]),a._v(" "),t("p",[a._v("By default, the "),t("code",[a._v("upload-file")]),a._v(" command will use the upsert behavior if existing entities are encountered in the destination folder tree that would cause naming conflicts.")]),a._v(" "),t("p",[a._v("Expect the behaviors from the following table for each of these resolution settings:")]),a._v(" "),t("div",{staticStyle:{"text-align":"center"}},[t("table",{staticClass:"inline-table"},[t("tr",[t("th",[a._v("Source Type")]),a._v(" "),t("th",[a._v("Conflict at Dest")]),a._v(" "),t("th",[a._v("`skip`")]),a._v(" "),t("th",[a._v("`replace`")]),a._v(" "),t("th",[a._v("`upsert` (default)")])]),a._v(" "),t("tr",[t("td",[a._v("File")]),a._v(" "),t("td",[a._v("None")]),a._v(" "),t("td",[a._v("Insert")]),a._v(" "),t("td",[a._v("Insert")]),a._v(" "),t("td",[a._v("Insert")])]),a._v(" "),t("tr",[t("td",[a._v("File")]),a._v(" "),t("td",[a._v("Matching File")]),a._v(" "),t("td",[a._v("Skip")]),a._v(" "),t("td",[a._v("Update")]),a._v(" "),t("td",[a._v("Skip")])]),a._v(" "),t("tr",[t("td",[a._v("File")]),a._v(" "),t("td",[a._v("Different File")]),a._v(" "),t("td",[a._v("Skip")]),a._v(" "),t("td",[a._v("Update")]),a._v(" "),t("td",[a._v("Update")])]),a._v(" "),t("tr",[t("td",[a._v("File")]),a._v(" "),t("td",[a._v("Folder")]),a._v(" "),t("td",[a._v("Skip")]),a._v(" "),t("td",[a._v("Fail")]),a._v(" "),t("td",[a._v("Fail")])]),a._v(" "),t("tr",[t("td",[a._v("Folder")]),a._v(" "),t("td",[a._v("None")]),a._v(" "),t("td",[a._v("Insert")]),a._v(" "),t("td",[a._v("Insert")]),a._v(" "),t("td",[a._v("Insert")])]),a._v(" "),t("tr",[t("td",[a._v("Folder")]),a._v(" "),t("td",[a._v("File")]),a._v(" "),t("td",[a._v("Skip")]),a._v(" "),t("td",[a._v("Fail")]),a._v(" "),t("td",[a._v("Fail")])]),a._v(" "),t("tr",[t("td",[a._v("Folder")]),a._v(" "),t("td",[a._v("Folder")]),a._v(" "),t("td",[a._v("Re-use")]),a._v(" "),t("td",[a._v("Re-use")]),a._v(" "),t("td",[a._v("Re-use")])])])]),a._v(" "),t("p",[a._v("The default upsert behavior will check the destination folder for a file with a conflicting name. If no conflicts are found, it will insert (upload) the file.")]),a._v(" "),t("p",[a._v("In the case that there is a FILE to FILE name conflict found, it will only update it if necessary. To determine if an update is necessary, upsert will compare the last modified dates of conflicting file and the file being uploaded. When they are matching, the upload will be skipped. Otherwise the file will be updated as a new revision.")]),a._v(" "),t("p",[a._v("To override the upsert behavior, use the "),t("code",[a._v("--replace")]),a._v(" option to always make new revisions of a file or the "),t("code",[a._v("--skip")]),a._v(" option to always skip the upload on name conflicts:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive upload-file "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--replace")]),a._v(" --local-path /path/to/file.txt --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"9af694f6-4cfc-4eee-88a8-1b02704760c0"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json\n")])])]),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive upload-file "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--skip")]),a._v(" --local-path /path/to/file.txt --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"9af694f6-4cfc-4eee-88a8-1b02704760c0"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json\n")])])]),t("p",[a._v("Alternatively, the upload-file commands now also supports the "),t("code",[a._v("--ask")]),a._v(" conflict resolution option. This setting will always provide an interactive prompt on name conflicts that allows users to decide how to resolve each conflict found:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive upload-file "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--ask")]),a._v(" --local-file-path /path/to/file.txt --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"9af694f6-4cfc-4eee-88a8-1b02704760c0"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json\n\nDestination folder has a "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("file")]),a._v(" to "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("file")]),a._v(" name conflict"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("!")]),a._v("\n\nFile name: "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("2")]),a._v(".png\nFile ID: efbc0370-b69f-44d9-812c-0d272b019027\nThis "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("file")]),a._v(" has a DIFFERENT last modified "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("date")]),a._v("\n\nPlease "),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("select")]),a._v(" how to proceed:\n › - Use arrow-keys. Return to submit.\n❯ Replace as new "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("file")]),a._v(" revision\n Upload with a different "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("file")]),a._v(" name\n Skip this "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("file")]),a._v(" upload\n")])])]),t("h3",{attrs:{id:"understanding-bundled-transactions"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#understanding-bundled-transactions"}},[a._v("#")]),a._v(" Understanding Bundled Transactions"),t("a",{attrs:{id:"bundles"}})]),a._v(" "),t("p",[a._v("The ArDrive CLI currently uses two different methods for uploading transactions to the Arweave network: standard transactions and Direct to Network (D2N) bundled transactions. By default, the CLI will send a D2N bundled transaction for any action that would result in multiple transactions. This bundling functionality is currently used on the "),t("code",[a._v("upload-file")]),a._v(" and "),t("code",[a._v("create-drive")]),a._v(" commands.")]),a._v(" "),t("p",[a._v("D2N bundled transactions come with several benefits and implications:")]),a._v(" "),t("ul",[t("li",[a._v("Bundling saves AR and enhances ArFS reliability by sending associated ArFS transactions up as one atomic bundle.")]),a._v(" "),t("li",[a._v('Bundled transactions are treated as a single data transaction by the Arweave network, but can be presented as separate transactions by the Arweave Gateway once they have been "unbundled".')]),a._v(" "),t("li",[a._v("Un-bundling can take anywhere from a few minutes up to an hour. During that time, the files in the bundle will neither appear in list- commands nor be downloadable. Similarly, they will not appear in the web app after syncs until un-bundling is complete. "),t("strong",[a._v("This can negatively affect the accuracy of upsert operations")]),a._v(", so it's best to wait before retrying bulk uploads.")]),a._v(" "),t("li",[a._v("Bundling reliability on the gateway side degrades once bundles reach either 500 data items (or ~250 files) or 500 MiB, so the CLI will create and upload multiple bundles as necessary, or will send files that are simply too large for reliable bundling as unbundled txs.")])]),a._v(" "),t("h3",{attrs:{id:"uploading-a-non-bundled-transaction-not-recommended"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#uploading-a-non-bundled-transaction-not-recommended"}},[a._v("#")]),a._v(" Uploading a Non-Bundled Transaction (NOT RECOMMENDED)"),t("a",{attrs:{id:"no-bundle"}})]),a._v(" "),t("p",[a._v("While not recommended, the CLI does provide the option to forcibly send all transactions as standard transactions rather than attempting to bundle them together. To do this, simply add the "),t("code",[a._v("--no-bundle")]),a._v(" flag to the "),t("code",[a._v("upload-file")]),a._v(" or "),t("code",[a._v("create-drive")]),a._v(" command:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive upload-file --no-bundle --local-path /path/to/file --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"9af694f6-4cfc-4eee-88a8-1b02704760c0"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json\n")])])]),t("h3",{attrs:{id:"fetching-the-metadata-of-a-file-entity"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#fetching-the-metadata-of-a-file-entity"}},[a._v("#")]),a._v(" Fetching the Metadata of a File Entity")]),a._v(" "),t("p",[a._v("Simply perform the file-info command to retrieve the metadata of a file:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive file-info --file-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"e5ebc14c-5b2d-4462-8f59-7f4a62e7770f"')]),a._v("\n")])])]),t("p",[a._v("Example output:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"appName"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"ArDrive-Web"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"appVersion"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"0.1.0"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"arFS"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"0.11"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"contentType"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"application/json"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"driveId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"51062487-2e8b-4af7-bd81-4345dc28ea5d"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityType"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"file"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"name"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"2_depth.png"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"txId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"CZKdjqwnmxbWchGA1hjSO5ZH--4OYodIGWzI-FmX28U"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"unixTime"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1633625081")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"size"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("41946")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"lastModifiedDate"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1605157729000")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"parentFolderId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"a2c8a0cb-0ca7-4dbb-8bf8-93f75f308e63"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"e5ebc14c-5b2d-4462-8f59-7f4a62e7770f"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"fileId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"e5ebc14c-5b2d-4462-8f59-7f4a62e7770f"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"dataTxId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Jz0WsWyAGVc0aE3UzACo-YJqG8OPrN3UucmDdt8Fbjc"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"dataContentType"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"image/png"')]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("h3",{attrs:{id:"retrying-a-failed-file-data-transaction-public-unbundled-files-only"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#retrying-a-failed-file-data-transaction-public-unbundled-files-only"}},[a._v("#")]),a._v(" Retrying a Failed File Data Transaction (Public Unbundled Files Only)"),t("a",{attrs:{id:"retry-tx"}})]),a._v(" "),t("p",[a._v("Arweave data upload transactions are split into two phases: transaction posting and chunks uploading. Once the transaction post phase has been completed, you've effectively \"paid\" the network for storage of the data chunks that you'll send in the next stage.")]),a._v(" "),t("p",[a._v("If your system encounters an error while posting the transaction, you can retry posting the transaction for as long as your tx_anchor is valid ("),t("a",{attrs:{href:"https://docs.arweave.org/developers/server/http-api#field-definitions",target:"_blank",rel:"noopener noreferrer"}},[a._v("learn more about tx_anchors here"),t("OutboundLink")],1),a._v("). You may retry and/or resume posting chunks at any time after your transaction has posted. The ArDrive CLI allows you to take advantage of this Arweave protocol capability.")]),a._v(" "),t("p",[a._v("Using the CLI, when the transaction post has succeeded but the chunk upload step fails, the data transaction's ID could be lost. There are a few options to recover this ID. If the failed transaction is the most recent one sent from a wallet, the transaction ID can be recovered with the "),t("code",[a._v("ardrive last-tx -w /path/to/wallet")]),a._v(" command AFTER the transaction's headers have been mined (It can take 5-10 minutes for the tx-id to become available with the last-tx approach). Other options for finding the partially uploaded transaction's ID include:")]),a._v(" "),t("ul",[t("li",[a._v("Using an Arweave gateway GQL http endpoint to search for transactions that belong to the wallet. See this "),t("a",{attrs:{href:"https://gql-guide.vercel.app/#owners",target:"_blank",rel:"noopener noreferrer"}},[a._v("Arweave GQL Guide"),t("OutboundLink")],1),a._v(" for more info.")]),a._v(" "),t("li",[a._v("Browse the recent transactions associated with the wallet via a block explorer tool like "),t("a",{attrs:{href:"https://viewblock.io/arweave/",target:"_blank",rel:"noopener noreferrer"}},[a._v("ViewBlock"),t("OutboundLink")],1),a._v(".")])]),a._v(" "),t("p",[a._v("In order to re-seed the chunks for an unbundled ArFS data transaction, a user must have the data transaction ID, the original file data, and either a destination folder ID or a valid file ID for the file. Supply that information to the "),t("code",[a._v("retry-tx")]),a._v(" command like so:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive retry-tx --tx-id "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" Data Transaction ID "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" Destination Folder ID "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" --local-path /path/to/file --wallet-file /path/to/wallet\n")])])]),t("p",[t("strong",[a._v("Note: Retry feature is currently only available for PUBLIC unbundled file transactions. It is also perfectly safe to mistakenly re-seed the chunks of a healthy transaction, the transaction will remain stable and the wallet balance will not be affected.")])]),a._v(" "),t("h3",{attrs:{id:"moving-files"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#moving-files"}},[a._v("#")]),a._v(" Moving Files"),t("a",{attrs:{id:"moving-files"}})]),a._v(" "),t("p",[a._v("Files can be moved from one folder to another within the same drive. Moving a file is simply the process of uploading a new file metadata revision with an updated File ID <> Parent Folder ID relationship. The following command will move a file from its current location in a public drive to a new parent folder in that drive:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive move-file --file-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"e5ebc14c-5b2d-4462-8f59-7f4a62e7770f"')]),a._v(" --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"a2c8a0cb-0ca7-4dbb-8bf8-93f75f308e63"')]),a._v("\n")])])]),t("h3",{attrs:{id:"uploading-manifests"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#uploading-manifests"}},[a._v("#")]),a._v(" Uploading Manifests")]),a._v(" "),t("p",[t("a",{attrs:{href:"https://github.com/ArweaveTeam/arweave/wiki/Path-Manifests",target:"_blank",rel:"noopener noreferrer"}},[a._v("Arweave Path Manifests"),t("OutboundLink")],1),a._v(" are are special "),t("code",[a._v(".json")]),a._v(" files that instruct Arweave Gateways to map file data associated with specific, unique transaction IDs to customized, hosted paths relative to that of the manifest file itself. So if, for example, your manifest file had an arweave.net URL like:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("https://arweave.net/"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("manifest tx id"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("p",[a._v("Then, all the mapped transactions and paths in the manifest file would be addressable at URLs like:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("https://arweave.net/"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("manifest tx id"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("/foo.txt\nhttps://arweave.net/"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("manifest tx id"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("/bar/baz.png\n")])])]),t("p",[a._v("ArDrive supports the creation of these Arweave manifests using any of your PUBLIC folders. The generated manifest paths will be links to each of the file entities within the specified folder. The manifest file entity will be created at the root of the folder.")]),a._v(" "),t("p",[a._v("To create a manifest of an entire public drive, specify the root folder of that drive:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive create-manifest "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"bc9af866-6421-40f1-ac89-202bddb5c487"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/path/to/wallet"')]),a._v("\n")])])]),t("p",[a._v("You can also create a manifest of a folder's file entities at a custom depth by using the "),t("code",[a._v("--max-depth")]),a._v(" option:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Create manifest of a folder's local file contents, excluding all sub-folders")]),a._v("\nardrive create-manifest --max-depth "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"867228d8-4413-4c0e-a499-e1decbf2ea38"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/path/to/wallet"')]),a._v("\n")])])]),t("p",[a._v("Creating a "),t("code",[a._v(".json")]),a._v(" file of your manifest links output can be accomplished here with some "),t("code",[a._v("jq")]),a._v(" parsing and piping to a file:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive create-manifest "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"6c312b3e-4778-4a18-8243-f2b346f5e7cb"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" jq "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v("'{links}'")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" links.json\n")])])]),t("p",[a._v("If you'd like to preview the contents of your manifest before uploading, you can perform a dry run and do some lightweight post processing to isolate the data:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive create-manifest "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"6c312b3e-4778-4a18-8243-f2b346f5e7cb"')]),a._v(" --dry-run "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" jq "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v("'{manifest}.manifest'")]),a._v("\n")])])]),t("p",[t("a",{attrs:{id:"manifest-json"}})]),a._v(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"manifest"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"arweave/paths"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"version"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"0.1.0"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"index"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"path"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"index.html"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"paths"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"hello_world.txt"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"id"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Y7GFF8r9y0MEU_oi1aZeD87vrmai97JdRQ2L0cbGJ68"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"index.html"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"id"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"pELonjVebHyBsdxVymvxbGTmHD96v9PuuUXj8GUHGoY"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("p",[a._v("The manifest data transaction is tagged with a unique content-type, "),t("code",[a._v("application/x.arweave-manifest+json")]),a._v(", which tells the gateway to treat this file as a manifest. The manifest file itself is a "),t("code",[a._v(".json")]),a._v(" file that holds the paths (the data transaction ids) to each file within the specified folder.")]),a._v(" "),t("p",[a._v("When your folder is later changed by adding files or updating them with new revisions, the original manifest will NOT be updated on its own. A manifest is a permanent record of your files in their current state.")]),a._v(" "),t("p",[a._v("However, creating a subsequent manifest with the same manifest name will create a new revision of that manifest in its new current state. Manifests follow the same name conflict resolution as outlined for files above (upsert by default).")]),a._v(" "),t("h4",{attrs:{id:"hosting-a-webpage-with-manifest"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#hosting-a-webpage-with-manifest"}},[a._v("#")]),a._v(" Hosting a Webpage with Manifest")]),a._v(" "),t("p",[a._v("When creating a manifest, it is possible to host a webpage or web app. You can do this by creating a manifest on a folder that has an "),t("code",[a._v("index.html")]),a._v(" file in its root.")]),a._v(" "),t("p",[a._v("Using generated build folders from popular frameworks works as well. One requirement here to note is that the "),t("code",[a._v("href=")]),a._v(" paths from your generated "),t("code",[a._v("index.html")]),a._v(" file must not have leading a "),t("code",[a._v("/")]),a._v(". This means that the manifest will not resolve a path of "),t("code",[a._v("/dist/index.js")]),a._v(" but it will resolve "),t("code",[a._v("dist/index.js")]),a._v(" or "),t("code",[a._v("./dist/index.js")]),a._v(".")]),a._v(" "),t("p",[a._v("As an example, here is a flow of creating a React app and hosting it with an ArDrive Manifest. First, generate a React app:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("yarn")]),a._v(" create react-app my-app\n")])])]),t("p",[a._v("Next, add this field to the generated "),t("code",[a._v("package.json")]),a._v(" so that the paths will resolve correctly:")]),a._v(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"homepage"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"."')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n")])])]),t("p",[a._v("Then, create an optimized production build from within the app's directory:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("yarn")]),a._v(" build\n")])])]),t("p",[a._v("Now, we can create and upload that produced build folder on ArDrive to any of your existing ArFS folder entities:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive upload-file "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-l")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/build"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/path/to/wallet"')]),a._v(" --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"bc9af866-6421-40f1-ac89-202bddb5c487"')]),a._v("\n")])])]),t("p",[a._v("And finally, create the manifest using the generated Folder ID from the build folder creation:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Create manifest using the Folder ID of the `/build` folder")]),a._v("\nardrive create-manifest "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"41759f05-614d-45ad-846b-63f3767504a4"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/path/to/wallet"')]),a._v("\n")])])]),t("p",[a._v("In the return output, the top link will be a link to the deployed web app:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"links"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"https://arweave.net/0MK68J8TqGhaaOpPe713Zn0jdpczMt2NGS2CtRYiuAg"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"https://arweave.net/0MK68J8TqGhaaOpPe713Zn0jdpczMt2NGS2CtRYiuAg/asset-manifest.json"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"https://arweave.net/0MK68J8TqGhaaOpPe713Zn0jdpczMt2NGS2CtRYiuAg/favicon.ico"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"https://arweave.net/0MK68J8TqGhaaOpPe713Zn0jdpczMt2NGS2CtRYiuAg/index.html"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# ...")]),a._v("\n")])])]),t("p",[a._v("This is effectively hosting a web app with ArDrive. Check out the ArDrive Price Calculator React App hosted as an "),t("a",{attrs:{href:"https://arweave.net/qozq9YIUPEHfZhoTp9DkBpJuA_KNULBnfLiMroj5pZI",target:"_blank",rel:"noopener noreferrer"}},[a._v("ArDrive Manifest"),t("OutboundLink")],1),a._v(".")]),a._v(" "),t("h3",{attrs:{id:"uploading-with-a-custom-content-type"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#uploading-with-a-custom-content-type"}},[a._v("#")]),a._v(" Uploading With a Custom Content Type"),t("a",{attrs:{id:"custom-content-type"}})]),a._v(" "),t("p",[a._v("Each file uploaded to the Arweave network receives a "),t("code",[a._v('"Content-Type"')]),a._v(" GraphQL tag that contains the MIME type for the file. The gateway will use this content type to determine how to serve that file's data transaction at the "),t("code",[a._v("arweave.net/{data tx id}")]),a._v(" endpoint.")]),a._v(" "),t("p",[a._v("By default, the CLI will attempt to derive this content type from the file extension of the provided file. In most cases, the content type that is derived will be correct and the gateway will properly serve the file.")]),a._v(" "),t("p",[a._v("The CLI also provides the option for users to upload files with a custom content type using the "),t("code",[a._v("--content-type")]),a._v(" flag:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive upload-file --content-type "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"application/json"')]),a._v(" --local-path /path/to/file --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"9af694f6-4cfc-4eee-88a8-1b02704760c0"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json\n")])])]),t("p",[a._v("It is currently possible to set this value to any given string, but the gateway will still only serve valid content types. Check out this list of commonly used MIME types to ensure you're providing a valid content type: "),t("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types",target:"_blank",rel:"noopener noreferrer"}},[a._v("Common MIME types"),t("OutboundLink")],1),a._v(".")]),a._v(" "),t("p",[a._v("Note: In the case of multi-file uploads or recursive folder uploads, setting this "),t("code",[a._v("--content-type")]),a._v(" flag will set the provided custom content type on EVERY file entity within a given upload.")]),a._v(" "),t("h3",{attrs:{id:"uploading-from-a-remote-url"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#uploading-from-a-remote-url"}},[a._v("#")]),a._v(" Uploading From a Remote URL"),t("a",{attrs:{id:"remote-path"}})]),a._v(" "),t("p",[a._v("You can upload a file from an existing url using the "),t("code",[a._v("--remote-path")]),a._v(" flag. This must be used in conjunction with "),t("code",[a._v("--dest-file-name")]),a._v(".")]),a._v(" "),t("p",[a._v("You can use a custom content type using the "),t("code",[a._v("--content-type")]),a._v(" flag, but if this isn't used the app will use the content type from the response header of the request for the remote data.")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive upload-file --remote-path "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"https://url/to/file"')]),a._v(" --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"9af694f6-4cfc-4eee-88a8-1b02704760c0"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"example.jpg"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json\n")])])]),t("h3",{attrs:{id:"uploading-a-custom-manifest"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#uploading-a-custom-manifest"}},[a._v("#")]),a._v(" Uploading a Custom Manifest"),t("a",{attrs:{id:"custom-manifest"}})]),a._v(" "),t("p",[a._v("Using the custom content type feature, it is possible for users to upload their own custom manifests. The Arweave gateways use this special content type in order to identify an uploaded file as a manifest:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("application/x.arweave-manifest+json\n")])])]),t("p",[a._v("In addition to this content type, the manifest must also adhere to the "),t("a",{attrs:{href:"#manifest-json"}},[a._v("correct JSON structure")]),a._v(" of an Arweave manifest. A user can create their own manifest from scratch, or start by piping a generated manifest to a JSON file and editing it to their specifications:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive create-manifest "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"6c312b3e-4778-4a18-8243-f2b346f5e7cb"')]),a._v(" --dry-run "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" jq "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v("'{manifest}.manifest'")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" my-custom-manifest.json\n")])])]),t("p",[a._v("After editing the generated manifest, simply perform an "),t("code",[a._v("upload-file")]),a._v(" command with the custom Arweave manifest content type to any PUBLIC folder:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive upload-file --content-type "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"application/x.arweave-manifest+json"')]),a._v(" --local-path my-custom-manifest.json --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"9af694f6-4cfc-4eee-88a8-1b02704760c0"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json\n")])])]),t("p",[a._v("The returned "),t("code",[a._v("dataTxId")]),a._v(" field on the created "),t("code",[a._v("file")]),a._v(" entity will be the endpoint that the manifest can be found on Arweave, just as explained in the "),t("a",{attrs:{href:"#uploading-manifests"}},[a._v("manifest sections")]),a._v(" above:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("https://arweave.net/"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("dataTxId"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\nhttps://arweave.net/"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("dataTxId"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("/custom-file-1\nhttps://arweave.net/"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("dataTxId"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("/custom-file-2\n")])])]),t("h3",{attrs:{id:"uploading-files-with-custom-metadata"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#uploading-files-with-custom-metadata"}},[a._v("#")]),a._v(" Uploading Files with Custom MetaData")]),a._v(" "),t("p",[a._v("ArDrive CLI has the capability of attaching custom metadata to ArFS File and Folder MetaData Transactions during the "),t("code",[a._v("upload-file")]),a._v(" command. This metadata can be applied to either the GQL tags on the MetaData Transaction and/or into the MetaData Transaction's Data JSON.")]),a._v(" "),t("p",[a._v("All custom metadata applied must ultimately adhere to the following JSON shapes:")]),a._v(" "),t("div",{staticClass:"language-ts extra-class"},[t("pre",{pre:!0,attrs:{class:"language-ts"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("// GQL Tags")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("type")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("CustomMetaDataGqlTags")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" Record"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),t("span",{pre:!0,attrs:{class:"token builtin"}},[a._v("string")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token builtin"}},[a._v("string")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token builtin"}},[a._v("string")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("// Data JSON Fields")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("type")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("CustomMetaDataJsonFields")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" Record"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),t("span",{pre:!0,attrs:{class:"token builtin"}},[a._v("string")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v(" JsonSerializable"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("export")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("type")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("JsonSerializable")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token builtin"}},[a._v("string")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token builtin"}},[a._v("number")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token builtin"}},[a._v("boolean")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("null")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("member"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token builtin"}},[a._v("string")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" JsonSerializable "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" JsonSerializable"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n")])])]),t("p",[a._v("e.g:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" IPFS-Add: "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v("'MY_HASH'")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# or")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Custom Name'")]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Val 1'")]),a._v(", "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Val 2'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("p",[a._v("When the custom metadata is attached to the MetaData Transaction's GQL tags, they will become visible on any Arweave GQL gateway and also third party tools that read GQL data.")]),a._v(" "),t("p",[a._v("When these tags are added to the MetaData Transaction's Data JSON they can be read by downloading the JSON data directly from "),t("code",[a._v("https://arweave.net/METADATA_TX_ID")]),a._v(".")]),a._v(" "),t("p",[a._v("To add this custom metadata to your file metadata transactions, CLI users can pass custom metadata these parameters:")]),a._v(" "),t("ul",[t("li",[t("code",[a._v("--metadata-file path/to/json/schema")])]),a._v(" "),t("li",[t("code",[a._v('--metadata-json \'{"key": "val", "key-2": true, "key-3": 420, "key-4": ["more", 1337]}\'')])]),a._v(" "),t("li",[t("code",[a._v('--metadata-gql-tags "Tag-Name" "Tag Val"')])])]),a._v(" "),t("p",[a._v("The "),t("code",[a._v("--metadata-file")]),a._v(" will accept a file path to JSON file containing custom metadata:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive upload-file --metadata-file path/to/metadata/json "),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# ...")]),a._v("\n")])])]),t("p",[a._v("This JSON schema object must contain instructions on where to put this metadata with the "),t("code",[a._v("metaDataJson")]),a._v(" and "),t("code",[a._v("metaDataGqlTags")]),a._v(" keys. e.g:")]),a._v(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"metaDataJson"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"Tag-Name"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Value-1"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Value-2"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"metaDataGqlTags"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"GQL Tag Name"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Tag Value"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("p",[a._v("The "),t("code",[a._v("--metadata-gql-tags")]),a._v(" parameter accepts an array of string values to be applied to the MetaData Tx GQL Tags. This method of CLI input does not support multiple tag values for a given tag name and the input must be an EVEN number of string values. (Known bug: String values starting with the "),t("code",[a._v('"-"')]),a._v(" character are currently not supported. Use --metadata-file parameter instead.) e.g:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("upload-file --metadata-gql-tags "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Custom Tag Name"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Custom Value"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# ...")]),a._v("\n")])])]),t("p",[a._v("And the "),t("code",[a._v("--metadata-json")]),a._v(" parameter will accept a stringified JSON input. It will apply all declared JSON fields directly to the MetaData Tx's Data JSON. e.g:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v(" upload-file --metadata-json "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('\' { "json field": "value", "another fields": false } \'')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# ...")]),a._v("\n")])])]),t("p",[a._v("Custom metadata applied to files and/or folders during the "),t("code",[a._v("upload-file")]),a._v(" command will be read back through all existing read commands. e.g:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive file-info "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" 067c4008-9cbe-422e-b697-05442f73da2b\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"appName"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"ArDrive-CLI"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"appVersion"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"1.17.0"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"arFS"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"0.11"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"contentType"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"application/json"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"driveId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"967215ca-a489-494b-97ec-0dd428d7be34"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityType"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"file"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"name"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"unique-name-9718"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"txId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"sxg8bNu6_bbaHkJTxAINVVoz_F-LiFe6s7OnxzoJJk4"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"unixTime"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1657655070")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"size"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("262148")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"lastModifiedDate"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1655409872705")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"dataTxId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"ublZcIff77ejl3m0uEA8lXEfnTWmSBOFoz-HibqKeyk"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"dataContentType"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"text/plain"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"parentFolderId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"97bc4fb5-aca4-4ffe-938f-1285153d98ca"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"067c4008-9cbe-422e-b697-05442f73da2b"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"fileId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"067c4008-9cbe-422e-b697-05442f73da2b"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"IPFS-Add"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"MY_HASH"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Tag-1"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Val"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Tag-2"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Val"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Tag-3"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Val"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Boost"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"1.05"')]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("h4",{attrs:{id:"applying-unique-custom-metadata-during-bulk-workflows"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#applying-unique-custom-metadata-during-bulk-workflows"}},[a._v("#")]),a._v(" Applying Unique Custom MetaData During Bulk Workflows")]),a._v(" "),t("p",[a._v("With some custom scripting and the "),t("code",[a._v("--metadata-file")]),a._v(" parameter, the ArDrive CLI can be used to apply custom metadata to each file individually in a bulk workflow. For example, if you choose a numbered file naming pattern you can make use of a "),t("code",[a._v("for")]),a._v(" loop:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("for")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token for-or-select variable"}},[a._v("i")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("in")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("..")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("5")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("do")]),a._v("\nardrive upload-file "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-F")]),a._v(" f0c58c11-430c-4383-8e54-4d864cc7e927 --local-path "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"../uploads/test-file-'),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$i")]),a._v('.txt"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/path/to/wallet.json"')]),a._v(" --metadata-file "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"../custom/metadata-'),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$i")]),a._v('.json"')]),a._v(" --dry-run "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"file-result-'),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$i")]),a._v('.json"')]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("done")]),a._v("\n")])])]),t("h2",{attrs:{id:"other-utility-operations"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#other-utility-operations"}},[a._v("#")]),a._v(" Other Utility Operations")]),a._v(" "),t("h3",{attrs:{id:"monitoring-transactions"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#monitoring-transactions"}},[a._v("#")]),a._v(" Monitoring Transactions")]),a._v(" "),t("p",[a._v("Block time on Arweave is typically between 2-3 minutes in duration, so transactions can be mined within that time frame when "),t("a",{attrs:{href:"#dealing-with-network-congestion"}},[a._v("network congestion")]),a._v(" is low. Transactions, in the general case, proceed through the following set of states:")]),a._v(" "),t("ul",[t("li",[a._v('Pending: the transaction is waiting the "mempool" to be mined')]),a._v(" "),t("li",[a._v("Confirming: the transaction was mined on an Arweave Node, but has not yet been confirmed by at least 15 total nodes on the network")]),a._v(" "),t("li",[a._v("Confirmed: the transaction was mined on an Arweave Node and confirmed by at least 15 total nodes on the network")]),a._v(" "),t("li",[a._v("Not Found: the transaction is not available for any of the following reasons:\n"),t("ul",[t("li",[a._v("Insufficient reward to join the mempool")]),a._v(" "),t("li",[a._v("Insufficient reward to be mined within 50 blocks during a period of network congestion")]),a._v(" "),t("li",[a._v("Transaction is transitioning between states")]),a._v(" "),t("li",[a._v("Transaction ID is invalid")])])])]),a._v(" "),t("p",[a._v("Monitor any Arweave transaction's status via its transaction ID by performing:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Peek at the status:")]),a._v("\nardrive tx-status "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-t")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"ekSMckikdRJ8RGIkFa-X3xq3427tvM7J9adv8HP3Bzs"')]),a._v("\n")])])]),t("p",[a._v("Example output:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ekSMckikdRJ8RGIkFa-X3xq3427tvM7J9adv8HP3Bzs: Mined at block height "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("775810")]),a._v(" with "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("22439")]),a._v(" confirmations\n")])])]),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Reprint the status every 10 seconds:")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("watch")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-n")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("10")]),a._v(" ardrive tx-status "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-t")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"ekSMckikdRJ8RGIkFa-X3xq3427tvM7J9adv8HP3Bzs"')]),a._v("\n")])])]),t("h3",{attrs:{id:"dealing-with-network-congestion"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#dealing-with-network-congestion"}},[a._v("#")]),a._v(" Dealing With Network Congestion")]),a._v(" "),t("p",[a._v("Currently, Arweave blocks hold up to 1000 transactions per block. The \"mempool\", where pending transactions reside until they've been included into a block, will only hold a transaction for 50 blocks (~100-150 minutes) before it's discarded by the network resulting in no fees or data being transacted. During periods of network congestion (i.e. those where the mempool contains 1000 or more pending transactions), it may make sense to either:")]),a._v(" "),t("p",[a._v("a) wait for congestion to dissipate before attempting your transactions.")]),a._v(" "),t("p",[a._v("b) apply the fee boost multiplier to your transactions rewards with the --boost parameter during write operations in order to front-run some of the congestion.")]),a._v(" "),t("h4",{attrs:{id:"check-for-network-congestion-before-uploading"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#check-for-network-congestion-before-uploading"}},[a._v("#")]),a._v(" Check for network congestion before uploading"),t("a",{attrs:{id:"check-congestion"}})]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# See all the transactions in the mempool")]),a._v("\nardrive get-mempool\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Return the count of the transactions in the mempool")]),a._v("\nardrive get-mempool "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" jq "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v("'length'")]),a._v("\n")])])]),t("h4",{attrs:{id:"front-run-congestion-by-boosting-miner-rewards"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#front-run-congestion-by-boosting-miner-rewards"}},[a._v("#")]),a._v(" Front-run Congestion By Boosting Miner Rewards"),t("a",{attrs:{id:"boost"}})]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Increase the miner reward on your transactions by 50%")]),a._v("\nardrive upload-file --wallet-file /path/to/my/wallet.json --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"f0c58c11-430c-4383-8e54-4d864cc7e927"')]),a._v(" --local-path ./helloworld.txt "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--boost")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1.5")]),a._v("\n")])])]),t("h4",{attrs:{id:"send-ar-transactions-from-a-cold-wallet"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#send-ar-transactions-from-a-cold-wallet"}},[a._v("#")]),a._v(" Send AR Transactions From a Cold Wallet"),t("a",{attrs:{id:"cold-tx"}})]),a._v(" "),t("p",[a._v("The best cold wallet storage never exposes your seed phrase and/or private keys to the Internet or a compromised system interface. You can use the ArDrive CLI to facilitate cold storage and transfer of AR.")]),a._v(" "),t("p",[a._v("If you need a new cold AR wallet, generate one from an air-gapped machine capable of running the ArDrive CLI by following the instructions in the "),t("a",{attrs:{href:"#wallet-operations"}},[a._v("Wallet Operations")]),a._v(" section. Fund your cold wallet from whatever external sources you'd like. NOTE: Your cold wallet won't appear on chain until it has received AR.")]),a._v(" "),t("p",[a._v("The workflow to send the AR out from your cold wallet requires you to generate a signed transaction with your cold wallet on your air-gapped machine via the ArDrive CLI, and then to transfer the signed transaction (e.g. by a file on a clean thumb drive) to an Internet-connected machine and send the transaction to the network via the ArDrive CLI. You'll need two inputs from the Internet-connected machine:")]),a._v(" "),t("ul",[t("li",[a._v("the last transaction sent OUT from the cold wallet (or an empty string if none has ever been sent out)")]),a._v(" "),t("li",[a._v("the base fee for an Arweave transaction (i.e. a zero bye transaction). Note that this value could change if a sufficient amount of time passes between the time you fetch this value, create the transaction, and send the transaction.")])]),a._v(" "),t("p",[a._v("To get the last transaction sent from your cold wallet, use the "),t("code",[a._v("last-tx")]),a._v(" command and specify your wallet address e.g.:")]),a._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v("ardrive last-tx -a \n")])])]),t("p",[a._v("To get the base transaction reward required for an AR transaction, use the "),t("code",[a._v("base-reward")]),a._v(" function, optionally applying a reward boost multiple if you're looking to front-run network congestion:")]),a._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v("ardrive base-reward --boost 1.5\n")])])]),t("p",[a._v("Write down or securely copy the values you derived from the Internet-connected machine and run the following commands on the airgapped machine, piping the outputted signed transaction data to a file in the process, e.g. "),t("code",[a._v("sendme.json")]),a._v(" (if that's your signed transaction transfer medium preference):")]),a._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v('ardrive create-tx -w /path/to/wallet/file.json -d -a --last-tx --reward "" > sendme.json\n')])])]),t("p",[a._v("Transport your signed transaction to the Internet-connected machine and run the following command to send your transaction to the Arweave network:")]),a._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v("ardrive send-tx -x /path/to/sendme.json\n")])])]),t("h3",{attrs:{id:"using-a-custom-arweave-gateway"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#using-a-custom-arweave-gateway"}},[a._v("#")]),a._v(" Using a Custom Arweave Gateway")]),a._v(" "),t("p",[a._v("On each command that uses a gateway, it is possible to supply your own custom Arweave gateway using the flag "),t("code",[a._v("--gateway")]),a._v(" or by setting an environment variable named "),t("code",[a._v("ARWEAVE_GATEWAY")]),a._v(".")]),a._v(" "),t("p",[a._v("For example, you could test out that your ArFS transactions are working as expected on a local test network such as "),t("a",{attrs:{href:"https://github.com/textury/arlocal",target:"_blank",rel:"noopener noreferrer"}},[a._v("ArLocal"),t("OutboundLink")],1),a._v(" with this flow:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Setup ArLocal instance on port 1984")]),a._v("\nnpx arlocal\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# In another terminal, fund your wallet with AR")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" http://localhost:1984/mint/"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" your public wallet address "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("/99999999999999\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Create drive and root folder on ArLocal using `--gateway` flag")]),a._v("\nardrive create-drive "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--gateway")]),a._v(" http://127.0.0.1:1984 "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-n")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v("'my-test-drive'")]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Setup ARWEAVE_GATEWAY as ENV variable")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("export")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("ARWEAVE_GATEWAY")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"http://localhost:1984"')]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Mine block with drive + root folder transactions")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$ARWEAVE_GATEWAY")]),a._v('/mine"')]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Upload file to ArLocal with ENV var")]),a._v("\nardrive upload-file "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-F")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" root folder "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("id")]),a._v(" from create drive "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-l")]),a._v(" /path/to/file "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Mine block with file transaction")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$ARWEAVE_GATEWAY")]),a._v('/mine"')]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Inspect meta data of created entities")]),a._v("\nardrive list-drive "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" drive "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("id")]),a._v(" from create drive "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Download file to verify integrity")]),a._v("\nardrive download-file "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("file")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("id")]),a._v(" from upload "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("file")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("h3",{attrs:{id:"persistent-caching-of-arfs-entity-metadata"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#persistent-caching-of-arfs-entity-metadata"}},[a._v("#")]),a._v(" Persistent Caching of ArFS Entity Metadata"),t("a",{attrs:{id:"metadata-caching"}})]),a._v(" "),t("p",[a._v("To avoid redundant requests to the Arweave network for immutable ArFS entity metadata, a persistent file cache is created and maintained at:")]),a._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v("Windows: /ardrive-caches/metadata\nNon-Windows: /.ardrive/caches/metadata\n")])])]),t("p",[a._v("The "),t("code",[a._v("XDG_CACHE_HOME")]),a._v(" environment variable is honored, where applicable, and will be used in place of "),t("code",[a._v("os.homedir()")]),a._v(" in the scenarios described above.")]),a._v(" "),t("p",[a._v("Metadata cache logging to stderr can be enabled by setting the "),t("code",[a._v("ARDRIVE_CACHE_LOG")]),a._v(" environment variable to "),t("code",[a._v("1")]),a._v(".")]),a._v(" "),t("p",[a._v("Cache performance is UNDEFINED for multi-process scenarios, but is presumed to be generally usable.")]),a._v(" "),t("p",[a._v("The cache can be manually cleared safely at any time that any integrating app is not in operation.")])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{323:function(a,t,e){"use strict";e.r(t);var s=e(10),n=Object(s.a)({},(function(){var a=this,t=a._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[t("h1",{attrs:{id:"using-the-cli"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#using-the-cli"}},[a._v("#")]),a._v(" Using the CLI")]),a._v(" "),t("h2",{attrs:{id:"cli-help"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#cli-help"}},[a._v("#")]),a._v(" CLI Help")]),a._v(" "),t("p",[a._v("Learn to use any command:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--help")]),a._v("\n")])])]),t("h2",{attrs:{id:"cli-version"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#cli-version"}},[a._v("#")]),a._v(" CLI Version")]),a._v(" "),t("p",[a._v("You can print out the version by running any of:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--version")]),a._v("\nardrive "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-V")]),a._v("\n")])])]),t("h2",{attrs:{id:"wallet-operations"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#wallet-operations"}},[a._v("#")]),a._v(" Wallet Operations")]),a._v(" "),t("p",[a._v("Browsing of ArDrive public data is possible without the need for an "),t("a",{attrs:{href:"https://ardrive.atlassian.net/l/c/FpK8FuoQ",target:"_blank",rel:"noopener noreferrer"}},[a._v("Arweave wallet"),t("OutboundLink")],1),a._v(". However, for all write operations, or read operations without encryption/decryption keys, you'll need a wallet.")]),a._v(" "),t("p",[a._v("As you utilize the CLI, you can use either your wallet file or your seed phrase interchangeably. Consider the security implications of each approach for your particular use case carefully. If at any time you'd like to generate a new wallet altogether, start by generating a new seed phase. And if you'd like to use that seed phrase in the form of a wallet file, or if you'd like to recover an existing wallet via its seed phrase, use either or both of the following commands:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Generate seed-phrase")]),a._v("\nardrive generate-seedphrase\n"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"this is an example twelve word seed phrase that you could use"')]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Generate/recover wallet file (with example output file path)")]),a._v("\nardrive generate-wallet "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-s")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"this is an example twelve word seed phrase that you could use"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" /path/to/wallet/file.json\n")])])]),t("p",[a._v("Public attributes of Arweave wallets can be retrieved via their 43-character Arweave wallet address. You can retrieve the wallet address associated with "),t("a",{attrs:{href:"https://ardrive.atlassian.net/l/c/FpK8FuoQ",target:"_blank",rel:"noopener noreferrer"}},[a._v("your wallet file or 12-word seed phrase"),t("OutboundLink")],1),a._v(" (e.g. wallets generated by "),t("a",{attrs:{href:"https://arconnect.io/",target:"_blank",rel:"noopener noreferrer"}},[a._v("ArConnect"),t("OutboundLink")],1),a._v(") like so:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Wallet file")]),a._v("\nardrive get-address "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet/file.json\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Seed Phrase (with sample output)")]),a._v("\nardrive get-address "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-s")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"this is an example twelve word seed phrase that you could use"')]),a._v("\nHTTn8F92tR32N8wuo-NIDkjmqPknrbl10JWo5MZ9x2k\n")])])]),t("p",[a._v("You'll need AR in your wallet for any write operations you perform in ArDrive. You can always check your wallet balance (in both AR and Winston units) by performing:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Getting the balance for your own wallet")]),a._v("\nardrive get-balance "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet/file.json\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Getting the balance for ANY wallet (with sample output)")]),a._v("\nardrive get-balance "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-a")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"HTTn8F92tR32N8wuo-NIDkjmqPknrbl10JWo5MZ9x2k"')]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1500000000000")]),a._v(" Winston\n"),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1.5")]),a._v(" AR\n")])])]),t("p",[a._v("If, at any time, you need to send AR out of your wallet to another wallet address, you may perform:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Using our previously generated wallet as the destination...")]),a._v("\nardrive send-ar "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet/file.json --dest-address "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"HTTn8F92tR32N8wuo-NIDkjmqPknrbl10JWo5MZ9x2k"')]),a._v(" --ar-amount "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("2.12345")]),a._v("\n")])])]),t("h2",{attrs:{id:"working-with-entities"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#working-with-entities"}},[a._v("#")]),a._v(" Working With Entities")]),a._v(" "),t("p",[t("a",{attrs:{href:"https://ardrive.io",target:"_blank",rel:"noopener noreferrer"}},[a._v("ArDrive"),t("OutboundLink")],1),a._v("'s "),t("a",{attrs:{href:"https://ardrive.atlassian.net/l/c/m6P1vJDo",target:"_blank",rel:"noopener noreferrer"}},[a._v("ArFS"),t("OutboundLink")],1),a._v(" integration provides for hierarchical organization of your file and folder data on Arweave.")]),a._v(" "),t("p",[a._v("The fundamental entity types specified by ArFS are:")]),a._v(" "),t("ul",[t("li",[a._v("Drives")]),a._v(" "),t("li",[a._v("Folders")]),a._v(" "),t("li",[a._v("Files")])]),a._v(" "),t("p",[a._v("Each instance of these entities have a Version 4 UUID entity ID that is commonly referred to by its entity type, i.e. drive ID, folder ID, and file ID.")]),a._v(" "),t("p",[a._v("When you execute write functions with the CLI, the JSON output will contain information about the Arweave Transaction IDs that were registered when writing your entities to the blockweave, any miner rewards or "),t("a",{attrs:{href:"https://ardrive.io/community/",target:"_blank",rel:"noopener noreferrer"}},[a._v("ArDrive Community"),t("OutboundLink")],1),a._v(" tips that were disbursed from your wallet, and any new entity IDs and, when applicable, encryption keys that were generated in the process of creating the entities. Typically, you'll want to keep track of those and get proficient with retrieving them in order to build your drive hierarchy to your liking. See "),t("a",{attrs:{href:"#understanding-drive-and-file-keys"}},[a._v("Understanding Drive and File Keys")]),a._v(" for more info.")]),a._v(" "),t("h3",{attrs:{id:"dry-run"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#dry-run"}},[a._v("#")]),a._v(" Dry Run")]),a._v(" "),t("p",[a._v("An important feature of the ArDrive CLI is the "),t("code",[a._v("--dry-run")]),a._v(' flag. On each command that would write an ArFS entity, there is the option to run it as a "dry run". This will run all of the steps and print the outputs of a regular ArFS write, but will skip sending the actual transaction:')]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("my-command"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("other-options"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" --dry-run\n")])])]),t("p",[a._v("This can be very useful for gathering price estimations or to confirm that you've copy-pasted your entity IDs correctly before committing to an upload.")]),a._v(" "),t("h3",{attrs:{id:"uploading-to-turbo-beta"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#uploading-to-turbo-beta"}},[a._v("#")]),a._v(" Uploading to Turbo (BETA) "),t("a",{attrs:{id:"upload-to-turbo"}})]),a._v(" "),t("p",[a._v("Users can optionally choose to send each ArFS entities created to "),t("a",{attrs:{href:"https://ardrive.io/turbo/",target:"_blank",rel:"noopener noreferrer"}},[a._v("ArDrive Turbo"),t("OutboundLink")],1),a._v(" using the "),t("code",[a._v("--turbo")]),a._v(" flag. Instead of using AR from an Arweave wallet, you can use Turbo Credits or take advantage of free/discounted upload promotions.")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("my-command"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("other-options"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--turbo")]),a._v("\n")])])]),t("p",[a._v("This flag will skip any balance check on the CLI side. Turbo will check a user's balance and accept/reject a data item at the time of upload. The "),t("code",[a._v("--turbo")]),a._v(" flag by default will send your files to "),t("code",[a._v("upload.ardrive.io")]),a._v(" to be bundled. To change the Turbo destination, users can use the "),t("code",[a._v("--turbo-url")]),a._v(" flag.")]),a._v(" "),t("h2",{attrs:{id:"working-with-drives"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#working-with-drives"}},[a._v("#")]),a._v(" Working With Drives")]),a._v(" "),t("h3",{attrs:{id:"understanding-drive-hierarchies"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#understanding-drive-hierarchies"}},[a._v("#")]),a._v(" Understanding Drive Hierarchies")]),a._v(" "),t("p",[a._v('At the root of every data tree is a "Drive" entity. When a drive is created, a Root Folder is also created for it. The entity IDs for both are generated and returned when you create a new drive:')]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Use `tee` to keep a receipt of the full set of transactions info and `jq` to focus on the data of interest")]),a._v("\nardrive create-drive --wallet-file /path/to/my/wallet.json --drive-name "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Teenage Love Poetry"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("tee")]),a._v(" created_drive.json "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v("\njq "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v("'[.created[] | del(.metadataTxId, .entityName, .bundledIn)]'")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"type"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"drive"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"6939b9e0-cc98-42cb-bae0-5888eca78885"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"type"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"folder"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"d1535126-fded-4990-809f-83a06f2a1118"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n")])])]),t("p",[a._v("The relationship between the drive and its root folder is clearly visible when retrieving the drive's info:"),t("a",{attrs:{id:"drive-info"}})]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive drive-info "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"6939b9e0-cc98-42cb-bae0-5888eca78885"')]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" jq "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v("'{driveId, rootFolderId}'")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"driveId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"6939b9e0-cc98-42cb-bae0-5888eca78885"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"rootFolderId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"d1535126-fded-4990-809f-83a06f2a1118"')]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n\n")])])]),t("p",[a._v('All file and folder entities in the drive will be anchored to it by a "Drive-ID" GQL Tag. And they\'ll each be anchored to a parent folder ID, tracked via the "Parent-Folder-ID" GQL tag, forming a tree structure whose base terminates at the Root Folder.')]),a._v(" "),t("h3",{attrs:{id:"understanding-drive-and-file-keys"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#understanding-drive-and-file-keys"}},[a._v("#")]),a._v(" Understanding Drive and File Keys")]),a._v(" "),t("p",[a._v('Private Drives achieve privacy via end-to-end encryption facilitated by hash-derived "Keys". Drive Keys encrypt/decrypt Drive and Folder data, and File Keys encrypt/decrypt File Data.')]),a._v(" "),t("p",[a._v("The relationships among your data and their keys is as follows:")]),a._v(" "),t("ul",[t("li",[a._v("Drive Key = functionOf(Wallet Signature, Randomly Generated Drive ID, User-specified Drive Password)")]),a._v(" "),t("li",[a._v("File Key = functionOf(Randomly Generated File ID, Drive Key)")])]),a._v(" "),t("p",[a._v("When you create private entities, the returned JSON data from the ArDrive CLI will contain the keys needed to decrypt the encrypted representation of your entity that is now securely and permanently stored on the blockweave.")]),a._v(" "),t("p",[a._v("To derive the drive key again for a drive, perform the following:"),t("a",{attrs:{id:"derive-drive-key"}})]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Will throw an error if the wallet or password specified can't be used to decrypt the on-chain drive")]),a._v("\nardrive get-drive-key "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/my/wallet.json "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"6939b9e0-cc98-42cb-bae0-5888eca78885"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-P")]),a._v("\n")])])]),t("p",[a._v("To derive the file key again for a file, perform the following:"),t("a",{attrs:{id:"derive-file-key"}})]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Will throw an error if the drive key or drive-key-derivation data specified can't be used to decrypt the on-chain file")]),a._v("\nardrive get-file-key --file-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"bd2ce978-6ede-4b0d-8f79-2d7bc235a0e0"')]),a._v(" --drive-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"6939b9e0-cc98-42cb-bae0-5888eca78885"')]),a._v(" --drive-key "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"yHdCjpCK3EcuhQcKNx2d/NN5ReEjoKfZVqKunlCnPEo"')]),a._v("\n")])])]),t("h3",{attrs:{id:"managing-drive-passwords"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#managing-drive-passwords"}},[a._v("#")]),a._v(" Managing Drive Passwords")]),a._v(" "),t("p",[a._v("The ArDrive CLI's private drive and folder functions all require either a drive password OR a drive key. Private file functions require either the drive password or the file key. "),t("strong",[a._v("Keys and passwords are sensitive data, so manage the entry, display, storage, and transmission of them very carefully.")])]),a._v(" "),t("p",[a._v("Drive passwords are the most portable, and fundamental, encryption facet, so a few options are available during private drive operations for supplying them:")]),a._v(" "),t("ul",[t("li",[a._v("Environment Variable")]),a._v(" "),t("li",[a._v("STDIN")]),a._v(" "),t("li",[a._v("Secure Prompt")])]),a._v(" "),t("h4",{attrs:{id:"supplying-your-password-environment-variable"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#supplying-your-password-environment-variable"}},[a._v("#")]),a._v(" Supplying Your Password: Environment Variable"),t("a",{attrs:{id:"pw-environment-variable"}})]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Securely type your password into a read prompt, store it to TMP_ARDRIVE_PW, and export it for the shell session")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("read")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-rs")]),a._v(" TMP_ARDRIVE_PW\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("export")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("ARDRIVE_DRIVE_PW")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),a._v("TMP_ARDRIVE_PW"),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v("\nardrive "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("some private command"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-P")]),a._v("\n")])])]),t("h4",{attrs:{id:"supplying-your-password-stdin"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#supplying-your-password-stdin"}},[a._v("#")]),a._v(" Supplying Your Password: STDIN"),t("a",{attrs:{id:"pw-stdin"}})]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Pipe your drive password to the ArDrive CLI")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("cat")]),a._v(" /path/to/my/drive/password.txt "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" ardrive "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("some private command"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-P")]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Redirect your drive password to the ArDrive CLI")]),a._v("\nardrive "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("some private command"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-P")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v(" /path/to/my/drive/password.txt\n")])])]),t("h4",{attrs:{id:"supplying-your-password-prompt"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#supplying-your-password-prompt"}},[a._v("#")]),a._v(" Supplying Your Password: Prompt"),t("a",{attrs:{id:"pw-prompt"}})]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# When all other options fail, the CLI will prompt for your password (NOT COMPATIBLE WITH PIPES AND REDIRECTS!)")]),a._v("\nardrive "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("some private command"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-P")]),a._v("\n? Enter drive password: › ********\n")])])]),t("h3",{attrs:{id:"creating-drives"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#creating-drives"}},[a._v("#")]),a._v(" Creating Drives")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Public drive")]),a._v("\nardrive create-drive --wallet-file /path/to/my/wallet.json --drive-name "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"My Public Archive"')]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Private drive")]),a._v("\nardrive create-drive --wallet-file /path/to/my/wallet.json --drive-name "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Teenage Love Poetry"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-P")]),a._v("\n")])])]),t("h3",{attrs:{id:"listing-drives-for-an-address"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#listing-drives-for-an-address"}},[a._v("#")]),a._v(" Listing Drives for an Address")]),a._v(" "),t("p",[a._v("You can list all the drives associated with any Arweave wallet address, though the details of private drives will be obfuscated from you unless you provide the necessary decryption data.")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# List all your own drives")]),a._v("\nardrive list-all-drives "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/my/wallet.json "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-P")]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# List any address's drives")]),a._v("\nardrive list-all-drives "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--address")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"HTTn8F92tR32N8wuo-NIDkjmqPknrbl10JWo5MZ9x2k"')]),a._v("\n")])])]),t("h3",{attrs:{id:"listing-every-entity-in-a-drive"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#listing-every-entity-in-a-drive"}},[a._v("#")]),a._v(" Listing Every Entity in a Drive"),t("a",{attrs:{id:"list-drive"}})]),a._v(" "),t("p",[a._v("Useful notes on listing the contents of drives:")]),a._v(" "),t("ul",[t("li",[a._v("Listing a drive is effectively the same as listing its root folder.")]),a._v(" "),t("li",[a._v("You can control the tree depth of the data returned.")]),a._v(" "),t("li",[a._v("path, txPath, and entityIdPath properties on entities can provide useful handholds for other forms of data navigation")])]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# List everything in a private drive")]),a._v("\nardrive list-drive "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"c7f87712-b54e-4491-bc96-1c5fa7b1da50"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/my/wallet.json "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-P")]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# List a private drive including the `fileKey` and/or `driveKey` of all listed entitites")]),a._v("\nardrive list-drive "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"c7f87712-b54e-4491-bc96-1c5fa7b1da50"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/my/wallet.json "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-P")]),a._v(" --with-keys\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# List the contents of a public drive up to and including those in the grandchild folders of the root folder")]),a._v("\nardrive list-drive "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"c7f87712-b54e-4491-bc96-1c5fa7b1da50"')]),a._v(" --max-depth "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("2")]),a._v("\n")])])]),t("h3",{attrs:{id:"list-drive-pipeline-examples"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#list-drive-pipeline-examples"}},[a._v("#")]),a._v(" List Drive Pipeline Examples")]),a._v(" "),t("p",[a._v("You can utilize "),t("code",[a._v("jq")]),a._v(" and the list commands to reshape the commands' output data into useful forms and stats for many use cases. Here are a few examples:")]),a._v(" "),t("p",[t("a",{attrs:{id:"get-share-links"}})]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Get share links for a PUBLIC drive")]),a._v("\nardrive list-drive "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" a44482fd-592e-45fa-a08a-e526c31b87f1 "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" jq "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'.[] | select(.entityType == "file") | "https://app.ardrive.io/#/file/" + .entityId + "/view"\'')]),a._v("\n")])])]),t("p",[a._v("Example output:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"https://app.ardrive.io/#/file/1337babe-f000-dead-beef-ffffffffffff/view"')]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"https://app.ardrive.io/#/file/cdbc9ddd-1cab-41d9-acbd-fd4328929de3/view"')]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"https://app.ardrive.io/#/file/f19bc712-b57a-4e0d-8e5c-b7f1786b34a1/view"')]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"https://app.ardrive.io/#/file/4f8e081b-42f2-442d-be41-57f6f906e1c8/view"')]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"https://app.ardrive.io/#/file/0e02d254-c853-4ff0-9b6e-c4d23d2a95f5/view"')]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"https://app.ardrive.io/#/file/c098b869-29d1-4a86-960f-a9e10433f0b0/view"')]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"https://app.ardrive.io/#/file/4afc8cdf-4d27-408a-bfb9-0a2ec21eebf8/view"')]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"https://app.ardrive.io/#/file/85fe488d-fcf7-48ca-9df8-2b39958bbf15/view"')]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("..")]),a._v(".\n")])])]),t("p",[t("a",{attrs:{id:"get-total-size"}})]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Get total size of all files within drive")]),a._v("\nardrive list-drive "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" 13c3c232-6687-4d11-8ac1-35284102c7db "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" jq "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v("' map(select(.entityType == \"file\") | .size) | add'")]),a._v("\n")])])]),t("p",[t("a",{attrs:{id:"get-file-count"}})]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Get total number of files within drive")]),a._v("\nardrive list-drive "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" 01ea6ba3-9e58-42e7-899d-622fd110211c "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" jq "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v("'[ .[] | select(.entityType == \"file\") ] | length'")]),a._v("\n")])])]),t("h2",{attrs:{id:"working-with-folders"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#working-with-folders"}},[a._v("#")]),a._v(" Working With Folders")]),a._v(" "),t("p",[a._v("As discussed previously, all folders in a drive are linked by way of parent folder references back to the root folder of a drive. Folders can be moved into any folder in the hierarchy that's not in their own subtree.")]),a._v(" "),t("h3",{attrs:{id:"creating-folders"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#creating-folders"}},[a._v("#")]),a._v(" Creating Folders")]),a._v(" "),t("p",[a._v("Creating folders manually is straightforward:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive create-folder --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"63153bb3-2ca9-4d42-9106-0ce82e793321"')]),a._v(" --folder-name "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"My Awesome Folder"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json\n")])])]),t("p",[a._v("Example output:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"created"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"type"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"folder"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"metadataTxId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"AYFMBVmwqhbg9y5Fbj3Iasy5oxUqhauOW7PcS1sl4Dk"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"d1b7c514-fb12-4603-aad8-002cf63015d3"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"key"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"yHdCjpCKD2cuhQcKNx2d/XF5ReEjoKfZVqKunlCnPEk"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityName"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"My Awesome Folder"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"tips"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"fees"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"AYFMBVmwqhbg9y5Fbj3Iasy5oxUqhauOW7PcS1sl4Dk"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1378052")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("p",[a._v("Note: Folders can also be created by supplying a folder as the --local-path of an upload-file command. In this case, the folder hierarchy on the local disk will be reconstructed on chain during the course of the recursive bulk upload.")]),a._v(" "),t("h3",{attrs:{id:"moving-folders"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#moving-folders"}},[a._v("#")]),a._v(" Moving Folders")]),a._v(" "),t("p",[a._v("Moving a folder is as simple as supplying a new parent folder ID. Note that naming collisions among entities within a folder are not allowed.")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive move-folder --folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"9af694f6-4cfc-4eee-88a8-1b02704760c0"')]),a._v(" --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"29850ab7-56d4-4e1f-a5be-cb86d5513921"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json\n")])])]),t("h3",{attrs:{id:"renaming-folders"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#renaming-folders"}},[a._v("#")]),a._v(" Renaming Folders"),t("a",{attrs:{id:"rename-folder"}})]),a._v(" "),t("p",[a._v("In order to rename a folder you must provide a name different from its current one, and it must not create naming conflicts with its sibling entities.")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive rename-folder --folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"568d5eba-dbf3-4a49-8129-1c58f7fd35bc"')]),a._v(" --folder-name "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Folder with cool stuff"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"./wallet.json"')]),a._v("\n")])])]),t("h3",{attrs:{id:"viewing-folder-metadata"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#viewing-folder-metadata"}},[a._v("#")]),a._v(" Viewing Folder Metadata")]),a._v(" "),t("p",[a._v("To view the metadata of a folder, users can use the "),t("code",[a._v("folder-info")]),a._v(" command:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive folder-info --folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"9af694f6-4cfc-4eee-88a8-1b02704760c0"')]),a._v("\n")])])]),t("h3",{attrs:{id:"listing-contents-of-a-folder"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#listing-contents-of-a-folder"}},[a._v("#")]),a._v(" Listing Contents of a Folder")]),a._v(" "),t("p",[a._v("Similar to drives, the "),t("code",[a._v("list-folder")]),a._v(" command can be used to fetch the metadata of each entity within a folder. But by default, the command will fetch only the immediate children of that folder ("),t("code",[a._v("--max-depth 0")]),a._v("):")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v('# List immediate children of folder "My Public Folder"')]),a._v("\nardrive list-folder --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"29850ab7-56d4-4e1f-a5be-cb86d5513940"')]),a._v("\n")])])]),t("p",[a._v("Example output:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"appName"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"ArDrive-CLI"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"appVersion"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"2.0"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"arFS"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"0.11"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"contentType"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"application/json"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"driveId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"01ea6ba3-9e58-42e7-899d-622fd110211a"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityType"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"folder"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"name"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"mytestfolder"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"txId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"HYiKyfLwY7PT9NleTQoTiM_-qPVUwf4ClDhx1sjUAEU"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"unixTime"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1635102772")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"parentFolderId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"29850ab7-56d4-4e1f-a5be-cb86d5513940"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"03df2929-1440-4ab4-bbf0-9dc776e1ed96"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"path"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/My Public Folder/mytestfolder"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"txIdPath"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/09_x0X2eZ3flXXLS72WdTDq6uaa5g2LjsT-QH1m0zhU/HYiKyfLwY7PT9NleTQoTiM_-qPVUwf4ClDhx1sjUAEU"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityIdPath"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/29850ab7-56d4-4e1f-a5be-cb86d5513940/03df2929-1440-4ab4-bbf0-9dc776e1ed96"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"appName"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"ArDrive-CLI"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"appVersion"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"2.0"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"arFS"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"0.11"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"contentType"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"application/json"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"driveId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"01ea6ba3-9e58-42e7-899d-622fd110211a"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityType"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"folder"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"name"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Super sonic public folder"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"txId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"VUk1B_vo1va2-EHLtqjsotzy0Rdn6lU4hQo3RD2xoTI"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"unixTime"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1631283259")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"parentFolderId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"29850ab7-56d4-4e1f-a5be-cb86d5513940"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"452c6aec-43dc-4015-9abd-20083068d432"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"path"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/My Public Folder/Super sonic sub folder"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"txIdPath"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/09_x0X2eZ3flXXLS72WdTDq6uaa5g2LjsT-QH1m0zhU/VUk1B_vo1va2-EHLtqjsotzy0Rdn6lU4hQo3RD2xoTI"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityIdPath"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/29850ab7-56d4-4e1f-a5be-cb86d5513940/452c6aec-43dc-4015-9abd-20083068d432"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"appName"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"ArDrive-CLI"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"appVersion"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"2.0"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"arFS"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"0.11"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"contentType"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"application/json"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"driveId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"01ea6ba3-9e58-42e7-899d-622fd110211a"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityType"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"file"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"name"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"test-number-twelve.txt"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"txId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"429zBqnd7ZBNzgukaix26RYz3g5SeXCCo_oIY6CPZLg"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"unixTime"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1631722234")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"size"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("47")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"lastModifiedDate"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1631722217028")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"dataTxId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"vA-BxAS7I6n90cH4Fzsk4cWS3EOPb1KOhj8yeI88dj0"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"dataContentType"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"text/plain"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"parentFolderId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"29850ab7-56d4-4e1f-a5be-cb86d5513940"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"e5948327-d6de-4acf-a6fe-e091ecf78d71"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"path"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/My Public Folder/test-number-twelve.txt"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"txIdPath"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/09_x0X2eZ3flXXLS72WdTDq6uaa5g2LjsT-QH1m0zhU/429zBqnd7ZBNzgukaix26RYz3g5SeXCCo_oIY6CPZLg"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityIdPath"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/29850ab7-56d4-4e1f-a5be-cb86d5513940/e5948327-d6de-4acf-a6fe-e091ecf78d71"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"appName"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"ArDrive-CLI"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"appVersion"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"2.0"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"arFS"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"0.11"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"contentType"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"application/json"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"driveId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"01ea6ba3-9e58-42e7-899d-622fd110211a"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityType"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"file"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"name"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"wonderful-test-file.txt"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"txId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"6CokwlzB81Fx7dq-lB654VM0XQykdU6eYohDmEJ2gk4"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"unixTime"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1631671275")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"size"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("23")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"lastModifiedDate"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1631283389232")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"dataTxId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"UP8THwA_1gvyRqNRqYmTpWvU4-UzNWBN7SiX_AIihg4"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"dataContentType"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"text/plain"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"parentFolderId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"29850ab7-56d4-4e1f-a5be-cb86d5513940"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"3274dae9-3487-41eb-94d5-8d5d3d8bc343"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"path"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/My Public Folder/wonderful-test-file.txt"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"txIdPath"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/09_x0X2eZ3flXXLS72WdTDq6uaa5g2LjsT-QH1m0zhU/6CokwlzB81Fx7dq-lB654VM0XQykdU6eYohDmEJ2gk4"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityIdPath"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/29850ab7-56d4-4e1f-a5be-cb86d5513940/3274dae9-3487-41eb-94d5-8d5d3d8bc343"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n")])])]),t("p",[a._v("To list further than the immediate children, you can make use of the flags: "),t("code",[a._v("--all")]),a._v(" and "),t("code",[a._v("--max-depth")]),a._v(".")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# List all contents of a public folder")]),a._v("\nardrive list-folder --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"9af694f6-4cfc-4eee-88a8-1b02704760c0"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--all")]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# List the contents of a public folder with custom depth")]),a._v("\nardrive list-folder --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"9af694f6-4cfc-4eee-88a8-1b02704760c0"')]),a._v(" --max-depth "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("2")]),a._v("\n")])])]),t("p",[a._v("In the case of private entitites, the "),t("code",[a._v("--with-keys")]),a._v(" flag will make the command to include the keys in the output.")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# List all contents of a private folder including the `fileKey` and/or `driveKey` of all listed entitites")]),a._v("\nardrive list-folder --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"1b027047-4cfc-4eee-88a8-9af694f660c0"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /my/wallet.json --with-keys\n")])])]),t("h2",{attrs:{id:"working-with-files"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#working-with-files"}},[a._v("#")]),a._v(" Working With Files")]),a._v(" "),t("p",[a._v("Similar to folders, files are linked to a parent folder which ultimately chains the file back to the root folder of its parent drive. As such, a parent folder ID is required in order to upload files. Files can be freely moved to other folders within their original drive.")]),a._v(" "),t("p",[a._v("The important difference for file entities is that they also hold a reference to their data transaction ID, which is the "),t("code",[a._v("dataTxId")]),a._v(" as returned by the "),t("code",[a._v("file-info")]),a._v(" command. This is where your uploaded data lives on the permaweb.")]),a._v(" "),t("p",[t("strong",[a._v("NOTE: The CLI currently (v1.0.0) has progress logging on uploads DISABLED for producing clean JSON outputs that can be piped in the terminal. On larger uploads, remember to be patient. You can check your system's "),t("code",[a._v("node")]),a._v(" process to confirm the process is still uploading.")])]),a._v(" "),t("h3",{attrs:{id:"uploading-a-single-file"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#uploading-a-single-file"}},[a._v("#")]),a._v(" Uploading a Single File")]),a._v(" "),t("p",[a._v("To upload a file, you'll need a parent folder id, the file to upload's file path, and the path to your wallet:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Supply the parent folder ID to upload-file")]),a._v("\nardrive upload-file --local-path /path/to/file.txt --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"9af694f6-4cfc-4eee-88a8-1b02704760c0"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json\n")])])]),t("p",[a._v("Example output:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"created"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"type"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"file"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityName"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"file.txt"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"6613395a-cf19-4420-846a-f88b7b765c05"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"dataTxId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"l4iNWyBapfAIj7OU-nB8z9XrBhawyqzs5O9qhk-3EnI"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"metadataTxId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"YfdDXUyerPCpBbGTm_gv_x5hR3tu5fnz8bM-jPL__JE"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"bundledIn"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"1zwdfZAIV8E26YjBs2ZQ4xjjP_1ewalvRgD_GyYw7f8"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"sourceUri"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"file:///path/to/file.txt"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"type"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"bundle"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"bundleTxId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"1zwdfZAIV8E26YjBs2ZQ4xjjP_1ewalvRgD_GyYw7f8"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"tips"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"txId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"1zwdfZAIV8E26YjBs2ZQ4xjjP_1ewalvRgD_GyYw7f8"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"recipient"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"address"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"3mxGJ4xLcQQNv6_TiKx0F0d5XVE0mNvONQI5GZXJXkt"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"winston"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"10000000"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"fees"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"1zwdfZAIV8E26YjBs2ZQ4xjjP_1ewalvRgD_GyYw7f8"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("42819829")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("p",[a._v("NOTE: To upload to the root of a drive, specify its root folder ID as the parent folder ID for the upload destination. You can retrieve it like so:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive drive-info "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"c7f87712-b54e-4491-bc96-1c5fa7b1da50"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" jq "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-r")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v("'.rootFolderId'")]),a._v("\n")])])]),t("h3",{attrs:{id:"ipfs-cid-tagging"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ipfs-cid-tagging"}},[a._v("#")]),a._v(" IPFS CID Tagging")]),a._v(" "),t("p",[a._v("Certain nodes on the Arweave network may be running the "),t("a",{attrs:{href:"https://arweave.medium.com/arweave-ipfs-persistence-for-the-interplanetary-file-system-9f12981c36c3",target:"_blank",rel:"noopener noreferrer"}},[a._v("IPFS+Arweave bridge"),t("OutboundLink")],1),a._v(". Tagging your file upload transaction with its IPFS v1 CID value in the 'IPFS-Add' tag may allow you to take advantage of this system. It can also be helpful for finding data on Arweave via GQL based on its CID. To include the CID tag on your "),t("strong",[a._v("PUBLIC")]),a._v(" file uploads, you may use the '--add-ipfs-tag' flag:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive upload-file --add-ipfs-tag --local-path /path/to/file.txt --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"9af694f6-4cfc-4eee-88a8-1b02704760c0"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json\n")])])]),t("h3",{attrs:{id:"progress-logging-of-transaction-uploads"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#progress-logging-of-transaction-uploads"}},[a._v("#")]),a._v(" Progress Logging of Transaction Uploads")]),a._v(" "),t("p",[a._v("Progress logging of transaction uploads to stderr can be enabled by setting the "),t("code",[a._v("ARDRIVE_PROGRESS_LOG")]),a._v(" environment variable to "),t("code",[a._v("1")]),a._v(":")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("Uploading "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("file")]),a._v(" transaction "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v(" of total "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("2")]),a._v(" transactions"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("..")]),a._v(".\nTransaction _GKQasQX194a364Hph8Oe-oku1AdfHwxWOw9_JC1yjc Upload Progress: "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),a._v("%\nTransaction _GKQasQX194a364Hph8Oe-oku1AdfHwxWOw9_JC1yjc Upload Progress: "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("35")]),a._v("%\nTransaction _GKQasQX194a364Hph8Oe-oku1AdfHwxWOw9_JC1yjc Upload Progress: "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("66")]),a._v("%\nTransaction _GKQasQX194a364Hph8Oe-oku1AdfHwxWOw9_JC1yjc Upload Progress: "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("100")]),a._v("%\nUploading "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("file")]),a._v(" transaction "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("2")]),a._v(" of total "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("2")]),a._v(" transactions"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("..")]),a._v(".\nTransaction nA1stCdTkuf290k0qsqvmJ78isEC0bwgrAi3D8Cl1LU Upload Progress: "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),a._v("%\nTransaction nA1stCdTkuf290k0qsqvmJ78isEC0bwgrAi3D8Cl1LU Upload Progress: "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("13")]),a._v("%\nTransaction nA1stCdTkuf290k0qsqvmJ78isEC0bwgrAi3D8Cl1LU Upload Progress: "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("28")]),a._v("%\nTransaction nA1stCdTkuf290k0qsqvmJ78isEC0bwgrAi3D8Cl1LU Upload Progress: "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("42")]),a._v("%\nTransaction nA1stCdTkuf290k0qsqvmJ78isEC0bwgrAi3D8Cl1LU Upload Progress: "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("60")]),a._v("%\nTransaction nA1stCdTkuf290k0qsqvmJ78isEC0bwgrAi3D8Cl1LU Upload Progress: "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("76")]),a._v("%\nTransaction nA1stCdTkuf290k0qsqvmJ78isEC0bwgrAi3D8Cl1LU Upload Progress: "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("91")]),a._v("%\nTransaction nA1stCdTkuf290k0qsqvmJ78isEC0bwgrAi3D8Cl1LU Upload Progress: "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("100")]),a._v("%\n")])])]),t("h3",{attrs:{id:"download-a-single-file-beta"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#download-a-single-file-beta"}},[a._v("#")]),a._v(" Download a Single file (BETA)"),t("a",{attrs:{id:"download-file"}})]),a._v(" "),t("p",[a._v("By using the "),t("code",[a._v("download-file")]),a._v(" command you can download a file on chain to a folder in your local storage specified by --local-path (or to your current working directory if not specified):")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive download-file "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json --file-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"ff450770-a9cb-46a5-9234-89cbd9796610"')]),a._v(" --local-path /my_ardrive_downloads/\n")])])]),t("p",[a._v("Specify a filename in the --local-path if you'd like to use a different name than the one that's used in your drive:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive download-file "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json --file-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"ff450770-a9cb-46a5-9234-89cbd9796610"')]),a._v(" --local-path /my_ardrive_downloads/my_pic.png\n")])])]),t("h3",{attrs:{id:"rename-a-single-file"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rename-a-single-file"}},[a._v("#")]),a._v(" Rename a Single File"),t("a",{attrs:{id:"rename-file"}})]),a._v(" "),t("p",[a._v("To rename an on-chain file you can make use of the "),t("code",[a._v("rename-file")]),a._v(" command. The required parameters are the file ID and the new name, as well as the owner wallet or seed phrase.")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive rename-file --file-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"290a3f9a-37b2-4f0f-a899-6fac983833b3"')]),a._v(" --file-name "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"My custom file name.txt"')]),a._v(" --wallet-file "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"wallet.json"')]),a._v("\n")])])]),t("h3",{attrs:{id:"uploading-a-folder-with-files-bulk-upload"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#uploading-a-folder-with-files-bulk-upload"}},[a._v("#")]),a._v(" Uploading a Folder with Files (Bulk Upload)"),t("a",{attrs:{id:"bulk-upload"}})]),a._v(" "),t("p",[a._v("Users can perform a bulk upload by using the upload-file command on a target folder. The command will reconstruct the folder hierarchy on local disk as ArFS folders on the permaweb and upload each file into their corresponding folders:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive upload-file --local-path /path/to/folder --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"9af694f6-4cfc-4eee-88a8-1b02704760c0"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json\n")])])]),t("h3",{attrs:{id:"downloading-a-folder-with-files"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#downloading-a-folder-with-files"}},[a._v("#")]),a._v(" Downloading a Folder with Files"),t("a",{attrs:{id:"download-folder"}})]),a._v(" "),t("p",[a._v("You can download a folder from ArDrive to your local machine with the "),t("code",[a._v("download-folder")]),a._v(' command. In the following examples, assume that a folder with ID "47f5bde9-61ba-49c7-b409-1aa4a9e250f6" exists in your drive and is named "MyArDriveFolder".')]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v('# Downloads "MyArDriveFolder" into the current working directory, i.e. ./MyArDriveFolder/')]),a._v("\nardrive download-folder "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"47f5bde9-61ba-49c7-b409-1aa4a9e250f6"')]),a._v("\n")])])]),t("p",[a._v("By specifying the "),t("code",[a._v("--local-path")]),a._v(" option, you can choose the local parent folder into which the on-chain folder will be downloaded. When the parameter is omitted, its value defaults to the current working directory (i.e. "),t("code",[a._v("./")]),a._v(").")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v('# Downloads "MyArDriveFolder" into /my_ardrive_downloads/MyArDriveFolder')]),a._v("\nardrive download-folder "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"47f5bde9-61ba-49c7-b409-1aa4a9e250f6"')]),a._v(" --local-path /my_ardrive_downloads/\n")])])]),t("p",[a._v("The "),t("code",[a._v("--max-depth")]),a._v(" parameter lets you to choose a custom folder depth to download. When omitted, the entire subtree of the folder will be downloaded. In the following example, only the immediate children of the folder will be downloaded:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive download-folder "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"47f5bde9-61ba-49c7-b409-1aa4a9e250f6"')]),a._v(" --max-depth "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),a._v("\n")])])]),t("p",[a._v("The behaviors of "),t("code",[a._v("--local-path")]),a._v(" are similar to those of "),t("code",[a._v("cp")]),a._v(" and "),t("code",[a._v("mv")]),a._v(" in Unix systems, e.g.:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v('# folder downloaded to "/existing_folder/MyArDriveFolder"')]),a._v("\nardrive download-folder "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"47f5bde9-61ba-49c7-b409-1aa4a9e250f6"')]),a._v(" --local-path "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/existing_folder"')]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v('# folder downloaded to "/existing_folder/MyArDriveFolder/MyArDriveFolder" as "/existing_folder/MyArDriveFolder" already exists')]),a._v("\nardrive download-folder "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"47f5bde9-61ba-49c7-b409-1aa4a9e250f6"')]),a._v(" --local-path "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/existing_folder/MyArDriveFolder"')]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v('# folder downloaded to "/existing_folder/non_existent_folder"')]),a._v("\nardrive download-folder "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"47f5bde9-61ba-49c7-b409-1aa4a9e250f6"')]),a._v(" --local-path "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/existing_folder/non_existent_folder"')]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# ERROR!")]),a._v("\nardrive download-folder "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"47f5bde9-61ba-49c7-b409-1aa4a9e250f6"')]),a._v(" --local-path "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/non_existent_folder_1/non_existent_folder_2"')]),a._v("\n")])])]),t("h3",{attrs:{id:"downloading-a-drive"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#downloading-a-drive"}},[a._v("#")]),a._v(" Downloading a Drive"),t("a",{attrs:{id:"download-drive"}})]),a._v(" "),t("p",[a._v("To download the whole drive you can use the "),t("code",[a._v("download-drive")]),a._v(" command.")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive download-drive "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"c0c8ba1c-efc5-420d-a07c-a755dc67f6b2"')]),a._v("\n")])])]),t("p",[a._v("This is equivalent to running the "),t("code",[a._v("download-folder")]),a._v(" command against the root folder of the drive.")]),a._v(" "),t("h3",{attrs:{id:"uploading-multiple-files"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#uploading-multiple-files"}},[a._v("#")]),a._v(" Uploading Multiple Files"),t("a",{attrs:{id:"multi-file-upload"}})]),a._v(" "),t("p",[a._v("To upload an arbitrary number of files or folders, pass a space-separated list of paths to "),t("code",[a._v("--local-paths")]),a._v(":")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Specifying a mixed set of file and folder paths")]),a._v("\nardrive upload-file "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" wallet.json "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-F")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"6939b9e0-cc98-42cb-bae0-5888eca78885"')]),a._v(" --local-paths ./image.png ~/backups/ "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("..")]),a._v("/another_file.txt\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Example using glob expansion to upload all .json files in the current folder")]),a._v("\nardrive upload-file "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" wallet.json "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-F")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"6939b9e0-cc98-42cb-bae0-5888eca78885"')]),a._v(" --local-paths ./*.json\n")])])]),t("h3",{attrs:{id:"name-conflict-resolution-on-upload"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#name-conflict-resolution-on-upload"}},[a._v("#")]),a._v(" Name Conflict Resolution on Upload"),t("a",{attrs:{id:"conflict-resolution"}})]),a._v(" "),t("p",[a._v("By default, the "),t("code",[a._v("upload-file")]),a._v(" command will use the upsert behavior if existing entities are encountered in the destination folder tree that would cause naming conflicts.")]),a._v(" "),t("p",[a._v("Expect the behaviors from the following table for each of these resolution settings:")]),a._v(" "),t("div",{staticStyle:{"text-align":"center"}},[t("table",{staticClass:"inline-table"},[t("tr",[t("th",[a._v("Source Type")]),a._v(" "),t("th",[a._v("Conflict at Dest")]),a._v(" "),t("th",[a._v("`skip`")]),a._v(" "),t("th",[a._v("`replace`")]),a._v(" "),t("th",[a._v("`upsert` (default)")])]),a._v(" "),t("tr",[t("td",[a._v("File")]),a._v(" "),t("td",[a._v("None")]),a._v(" "),t("td",[a._v("Insert")]),a._v(" "),t("td",[a._v("Insert")]),a._v(" "),t("td",[a._v("Insert")])]),a._v(" "),t("tr",[t("td",[a._v("File")]),a._v(" "),t("td",[a._v("Matching File")]),a._v(" "),t("td",[a._v("Skip")]),a._v(" "),t("td",[a._v("Update")]),a._v(" "),t("td",[a._v("Skip")])]),a._v(" "),t("tr",[t("td",[a._v("File")]),a._v(" "),t("td",[a._v("Different File")]),a._v(" "),t("td",[a._v("Skip")]),a._v(" "),t("td",[a._v("Update")]),a._v(" "),t("td",[a._v("Update")])]),a._v(" "),t("tr",[t("td",[a._v("File")]),a._v(" "),t("td",[a._v("Folder")]),a._v(" "),t("td",[a._v("Skip")]),a._v(" "),t("td",[a._v("Fail")]),a._v(" "),t("td",[a._v("Fail")])]),a._v(" "),t("tr",[t("td",[a._v("Folder")]),a._v(" "),t("td",[a._v("None")]),a._v(" "),t("td",[a._v("Insert")]),a._v(" "),t("td",[a._v("Insert")]),a._v(" "),t("td",[a._v("Insert")])]),a._v(" "),t("tr",[t("td",[a._v("Folder")]),a._v(" "),t("td",[a._v("File")]),a._v(" "),t("td",[a._v("Skip")]),a._v(" "),t("td",[a._v("Fail")]),a._v(" "),t("td",[a._v("Fail")])]),a._v(" "),t("tr",[t("td",[a._v("Folder")]),a._v(" "),t("td",[a._v("Folder")]),a._v(" "),t("td",[a._v("Re-use")]),a._v(" "),t("td",[a._v("Re-use")]),a._v(" "),t("td",[a._v("Re-use")])])])]),a._v(" "),t("p",[a._v("The default upsert behavior will check the destination folder for a file with a conflicting name. If no conflicts are found, it will insert (upload) the file.")]),a._v(" "),t("p",[a._v("In the case that there is a FILE to FILE name conflict found, it will only update it if necessary. To determine if an update is necessary, upsert will compare the last modified dates of conflicting file and the file being uploaded. When they are matching, the upload will be skipped. Otherwise the file will be updated as a new revision.")]),a._v(" "),t("p",[a._v("To override the upsert behavior, use the "),t("code",[a._v("--replace")]),a._v(" option to always make new revisions of a file or the "),t("code",[a._v("--skip")]),a._v(" option to always skip the upload on name conflicts:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive upload-file "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--replace")]),a._v(" --local-path /path/to/file.txt --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"9af694f6-4cfc-4eee-88a8-1b02704760c0"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json\n")])])]),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive upload-file "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--skip")]),a._v(" --local-path /path/to/file.txt --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"9af694f6-4cfc-4eee-88a8-1b02704760c0"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json\n")])])]),t("p",[a._v("Alternatively, the upload-file commands now also supports the "),t("code",[a._v("--ask")]),a._v(" conflict resolution option. This setting will always provide an interactive prompt on name conflicts that allows users to decide how to resolve each conflict found:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive upload-file "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--ask")]),a._v(" --local-file-path /path/to/file.txt --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"9af694f6-4cfc-4eee-88a8-1b02704760c0"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json\n\nDestination folder has a "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("file")]),a._v(" to "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("file")]),a._v(" name conflict"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("!")]),a._v("\n\nFile name: "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("2")]),a._v(".png\nFile ID: efbc0370-b69f-44d9-812c-0d272b019027\nThis "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("file")]),a._v(" has a DIFFERENT last modified "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("date")]),a._v("\n\nPlease "),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("select")]),a._v(" how to proceed:\n › - Use arrow-keys. Return to submit.\n❯ Replace as new "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("file")]),a._v(" revision\n Upload with a different "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("file")]),a._v(" name\n Skip this "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("file")]),a._v(" upload\n")])])]),t("h3",{attrs:{id:"understanding-bundled-transactions"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#understanding-bundled-transactions"}},[a._v("#")]),a._v(" Understanding Bundled Transactions"),t("a",{attrs:{id:"bundles"}})]),a._v(" "),t("p",[a._v("The ArDrive CLI currently uses two different methods for uploading transactions to the Arweave network: standard transactions and Direct to Network (D2N) bundled transactions. By default, the CLI will send a D2N bundled transaction for any action that would result in multiple transactions. This bundling functionality is currently used on the "),t("code",[a._v("upload-file")]),a._v(" and "),t("code",[a._v("create-drive")]),a._v(" commands.")]),a._v(" "),t("p",[a._v("D2N bundled transactions come with several benefits and implications:")]),a._v(" "),t("ul",[t("li",[a._v("Bundling saves AR and enhances ArFS reliability by sending associated ArFS transactions up as one atomic bundle.")]),a._v(" "),t("li",[a._v('Bundled transactions are treated as a single data transaction by the Arweave network, but can be presented as separate transactions by the Arweave Gateway once they have been "unbundled".')]),a._v(" "),t("li",[a._v("Un-bundling can take anywhere from a few minutes up to an hour. During that time, the files in the bundle will neither appear in list- commands nor be downloadable. Similarly, they will not appear in the web app after syncs until un-bundling is complete. "),t("strong",[a._v("This can negatively affect the accuracy of upsert operations")]),a._v(", so it's best to wait before retrying bulk uploads.")]),a._v(" "),t("li",[a._v("Bundling reliability on the gateway side degrades once bundles reach either 500 data items (or ~250 files) or 500 MiB, so the CLI will create and upload multiple bundles as necessary, or will send files that are simply too large for reliable bundling as unbundled txs.")])]),a._v(" "),t("h3",{attrs:{id:"uploading-a-non-bundled-transaction-not-recommended"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#uploading-a-non-bundled-transaction-not-recommended"}},[a._v("#")]),a._v(" Uploading a Non-Bundled Transaction (NOT RECOMMENDED)"),t("a",{attrs:{id:"no-bundle"}})]),a._v(" "),t("p",[a._v("While not recommended, the CLI does provide the option to forcibly send all transactions as standard transactions rather than attempting to bundle them together. To do this, simply add the "),t("code",[a._v("--no-bundle")]),a._v(" flag to the "),t("code",[a._v("upload-file")]),a._v(" or "),t("code",[a._v("create-drive")]),a._v(" command:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive upload-file --no-bundle --local-path /path/to/file --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"9af694f6-4cfc-4eee-88a8-1b02704760c0"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json\n")])])]),t("h3",{attrs:{id:"fetching-the-metadata-of-a-file-entity"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#fetching-the-metadata-of-a-file-entity"}},[a._v("#")]),a._v(" Fetching the Metadata of a File Entity")]),a._v(" "),t("p",[a._v("Simply perform the file-info command to retrieve the metadata of a file:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive file-info --file-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"e5ebc14c-5b2d-4462-8f59-7f4a62e7770f"')]),a._v("\n")])])]),t("p",[a._v("Example output:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"appName"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"ArDrive-Web"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"appVersion"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"0.1.0"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"arFS"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"0.11"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"contentType"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"application/json"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"driveId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"51062487-2e8b-4af7-bd81-4345dc28ea5d"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityType"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"file"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"name"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"2_depth.png"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"txId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"CZKdjqwnmxbWchGA1hjSO5ZH--4OYodIGWzI-FmX28U"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"unixTime"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1633625081")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"size"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("41946")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"lastModifiedDate"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1605157729000")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"parentFolderId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"a2c8a0cb-0ca7-4dbb-8bf8-93f75f308e63"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"e5ebc14c-5b2d-4462-8f59-7f4a62e7770f"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"fileId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"e5ebc14c-5b2d-4462-8f59-7f4a62e7770f"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"dataTxId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Jz0WsWyAGVc0aE3UzACo-YJqG8OPrN3UucmDdt8Fbjc"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"dataContentType"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"image/png"')]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("h3",{attrs:{id:"retrying-a-failed-file-data-transaction-public-unbundled-files-only"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#retrying-a-failed-file-data-transaction-public-unbundled-files-only"}},[a._v("#")]),a._v(" Retrying a Failed File Data Transaction (Public Unbundled Files Only)"),t("a",{attrs:{id:"retry-tx"}})]),a._v(" "),t("p",[a._v("Arweave data upload transactions are split into two phases: transaction posting and chunks uploading. Once the transaction post phase has been completed, you've effectively \"paid\" the network for storage of the data chunks that you'll send in the next stage.")]),a._v(" "),t("p",[a._v("If your system encounters an error while posting the transaction, you can retry posting the transaction for as long as your tx_anchor is valid ("),t("a",{attrs:{href:"https://docs.arweave.org/developers/server/http-api#field-definitions",target:"_blank",rel:"noopener noreferrer"}},[a._v("learn more about tx_anchors here"),t("OutboundLink")],1),a._v("). You may retry and/or resume posting chunks at any time after your transaction has posted. The ArDrive CLI allows you to take advantage of this Arweave protocol capability.")]),a._v(" "),t("p",[a._v("Using the CLI, when the transaction post has succeeded but the chunk upload step fails, the data transaction's ID could be lost. There are a few options to recover this ID. If the failed transaction is the most recent one sent from a wallet, the transaction ID can be recovered with the "),t("code",[a._v("ardrive last-tx -w /path/to/wallet")]),a._v(" command AFTER the transaction's headers have been mined (It can take 5-10 minutes for the tx-id to become available with the last-tx approach). Other options for finding the partially uploaded transaction's ID include:")]),a._v(" "),t("ul",[t("li",[a._v("Using an Arweave gateway GQL http endpoint to search for transactions that belong to the wallet. See this "),t("a",{attrs:{href:"https://gql-guide.vercel.app/#owners",target:"_blank",rel:"noopener noreferrer"}},[a._v("Arweave GQL Guide"),t("OutboundLink")],1),a._v(" for more info.")]),a._v(" "),t("li",[a._v("Browse the recent transactions associated with the wallet via a block explorer tool like "),t("a",{attrs:{href:"https://viewblock.io/arweave/",target:"_blank",rel:"noopener noreferrer"}},[a._v("ViewBlock"),t("OutboundLink")],1),a._v(".")])]),a._v(" "),t("p",[a._v("In order to re-seed the chunks for an unbundled ArFS data transaction, a user must have the data transaction ID, the original file data, and either a destination folder ID or a valid file ID for the file. Supply that information to the "),t("code",[a._v("retry-tx")]),a._v(" command like so:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive retry-tx --tx-id "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" Data Transaction ID "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" Destination Folder ID "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" --local-path /path/to/file --wallet-file /path/to/wallet\n")])])]),t("p",[t("strong",[a._v("Note: Retry feature is currently only available for PUBLIC unbundled file transactions. It is also perfectly safe to mistakenly re-seed the chunks of a healthy transaction, the transaction will remain stable and the wallet balance will not be affected.")])]),a._v(" "),t("h3",{attrs:{id:"moving-files"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#moving-files"}},[a._v("#")]),a._v(" Moving Files"),t("a",{attrs:{id:"moving-files"}})]),a._v(" "),t("p",[a._v("Files can be moved from one folder to another within the same drive. Moving a file is simply the process of uploading a new file metadata revision with an updated File ID <> Parent Folder ID relationship. The following command will move a file from its current location in a public drive to a new parent folder in that drive:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive move-file --file-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"e5ebc14c-5b2d-4462-8f59-7f4a62e7770f"')]),a._v(" --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"a2c8a0cb-0ca7-4dbb-8bf8-93f75f308e63"')]),a._v("\n")])])]),t("h3",{attrs:{id:"uploading-manifests"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#uploading-manifests"}},[a._v("#")]),a._v(" Uploading Manifests")]),a._v(" "),t("p",[t("a",{attrs:{href:"https://github.com/ArweaveTeam/arweave/wiki/Path-Manifests",target:"_blank",rel:"noopener noreferrer"}},[a._v("Arweave Path Manifests"),t("OutboundLink")],1),a._v(" are are special "),t("code",[a._v(".json")]),a._v(" files that instruct Arweave Gateways to map file data associated with specific, unique transaction IDs to customized, hosted paths relative to that of the manifest file itself. So if, for example, your manifest file had an arweave.net URL like:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("https://arweave.net/"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("manifest tx id"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("p",[a._v("Then, all the mapped transactions and paths in the manifest file would be addressable at URLs like:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("https://arweave.net/"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("manifest tx id"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("/foo.txt\nhttps://arweave.net/"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("manifest tx id"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("/bar/baz.png\n")])])]),t("p",[a._v("ArDrive supports the creation of these Arweave manifests using any of your PUBLIC folders. The generated manifest paths will be links to each of the file entities within the specified folder. The manifest file entity will be created at the root of the folder.")]),a._v(" "),t("p",[a._v("To create a manifest of an entire public drive, specify the root folder of that drive:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive create-manifest "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"bc9af866-6421-40f1-ac89-202bddb5c487"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/path/to/wallet"')]),a._v("\n")])])]),t("p",[a._v("You can also create a manifest of a folder's file entities at a custom depth by using the "),t("code",[a._v("--max-depth")]),a._v(" option:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Create manifest of a folder's local file contents, excluding all sub-folders")]),a._v("\nardrive create-manifest --max-depth "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"867228d8-4413-4c0e-a499-e1decbf2ea38"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/path/to/wallet"')]),a._v("\n")])])]),t("p",[a._v("Creating a "),t("code",[a._v(".json")]),a._v(" file of your manifest links output can be accomplished here with some "),t("code",[a._v("jq")]),a._v(" parsing and piping to a file:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive create-manifest "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"6c312b3e-4778-4a18-8243-f2b346f5e7cb"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" jq "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v("'{links}'")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" links.json\n")])])]),t("p",[a._v("If you'd like to preview the contents of your manifest before uploading, you can perform a dry run and do some lightweight post processing to isolate the data:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive create-manifest "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"6c312b3e-4778-4a18-8243-f2b346f5e7cb"')]),a._v(" --dry-run "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" jq "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v("'{manifest}.manifest'")]),a._v("\n")])])]),t("p",[t("a",{attrs:{id:"manifest-json"}})]),a._v(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"manifest"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"arweave/paths"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"version"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"0.1.0"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"index"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"path"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"index.html"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"paths"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"hello_world.txt"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"id"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Y7GFF8r9y0MEU_oi1aZeD87vrmai97JdRQ2L0cbGJ68"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"index.html"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"id"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"pELonjVebHyBsdxVymvxbGTmHD96v9PuuUXj8GUHGoY"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("p",[a._v("The manifest data transaction is tagged with a unique content-type, "),t("code",[a._v("application/x.arweave-manifest+json")]),a._v(", which tells the gateway to treat this file as a manifest. The manifest file itself is a "),t("code",[a._v(".json")]),a._v(" file that holds the paths (the data transaction ids) to each file within the specified folder.")]),a._v(" "),t("p",[a._v("When your folder is later changed by adding files or updating them with new revisions, the original manifest will NOT be updated on its own. A manifest is a permanent record of your files in their current state.")]),a._v(" "),t("p",[a._v("However, creating a subsequent manifest with the same manifest name will create a new revision of that manifest in its new current state. Manifests follow the same name conflict resolution as outlined for files above (upsert by default).")]),a._v(" "),t("h4",{attrs:{id:"hosting-a-webpage-with-manifest"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#hosting-a-webpage-with-manifest"}},[a._v("#")]),a._v(" Hosting a Webpage with Manifest")]),a._v(" "),t("p",[a._v("When creating a manifest, it is possible to host a webpage or web app. You can do this by creating a manifest on a folder that has an "),t("code",[a._v("index.html")]),a._v(" file in its root.")]),a._v(" "),t("p",[a._v("Using generated build folders from popular frameworks works as well. One requirement here to note is that the "),t("code",[a._v("href=")]),a._v(" paths from your generated "),t("code",[a._v("index.html")]),a._v(" file must not have leading a "),t("code",[a._v("/")]),a._v(". This means that the manifest will not resolve a path of "),t("code",[a._v("/dist/index.js")]),a._v(" but it will resolve "),t("code",[a._v("dist/index.js")]),a._v(" or "),t("code",[a._v("./dist/index.js")]),a._v(".")]),a._v(" "),t("p",[a._v("As an example, here is a flow of creating a React app and hosting it with an ArDrive Manifest. First, generate a React app:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("yarn")]),a._v(" create react-app my-app\n")])])]),t("p",[a._v("Next, add this field to the generated "),t("code",[a._v("package.json")]),a._v(" so that the paths will resolve correctly:")]),a._v(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"homepage"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"."')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n")])])]),t("p",[a._v("Then, create an optimized production build from within the app's directory:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("yarn")]),a._v(" build\n")])])]),t("p",[a._v("Now, we can create and upload that produced build folder on ArDrive to any of your existing ArFS folder entities:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive upload-file "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-l")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/build"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/path/to/wallet"')]),a._v(" --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"bc9af866-6421-40f1-ac89-202bddb5c487"')]),a._v("\n")])])]),t("p",[a._v("And finally, create the manifest using the generated Folder ID from the build folder creation:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Create manifest using the Folder ID of the `/build` folder")]),a._v("\nardrive create-manifest "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"41759f05-614d-45ad-846b-63f3767504a4"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/path/to/wallet"')]),a._v("\n")])])]),t("p",[a._v("In the return output, the top link will be a link to the deployed web app:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"links"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"https://arweave.net/0MK68J8TqGhaaOpPe713Zn0jdpczMt2NGS2CtRYiuAg"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"https://arweave.net/0MK68J8TqGhaaOpPe713Zn0jdpczMt2NGS2CtRYiuAg/asset-manifest.json"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"https://arweave.net/0MK68J8TqGhaaOpPe713Zn0jdpczMt2NGS2CtRYiuAg/favicon.ico"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"https://arweave.net/0MK68J8TqGhaaOpPe713Zn0jdpczMt2NGS2CtRYiuAg/index.html"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# ...")]),a._v("\n")])])]),t("p",[a._v("This is effectively hosting a web app with ArDrive. Check out the ArDrive Price Calculator React App hosted as an "),t("a",{attrs:{href:"https://arweave.net/qozq9YIUPEHfZhoTp9DkBpJuA_KNULBnfLiMroj5pZI",target:"_blank",rel:"noopener noreferrer"}},[a._v("ArDrive Manifest"),t("OutboundLink")],1),a._v(".")]),a._v(" "),t("h3",{attrs:{id:"uploading-with-a-custom-content-type"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#uploading-with-a-custom-content-type"}},[a._v("#")]),a._v(" Uploading With a Custom Content Type"),t("a",{attrs:{id:"custom-content-type"}})]),a._v(" "),t("p",[a._v("Each file uploaded to the Arweave network receives a "),t("code",[a._v('"Content-Type"')]),a._v(" GraphQL tag that contains the MIME type for the file. The gateway will use this content type to determine how to serve that file's data transaction at the "),t("code",[a._v("arweave.net/{data tx id}")]),a._v(" endpoint.")]),a._v(" "),t("p",[a._v("By default, the CLI will attempt to derive this content type from the file extension of the provided file. In most cases, the content type that is derived will be correct and the gateway will properly serve the file.")]),a._v(" "),t("p",[a._v("The CLI also provides the option for users to upload files with a custom content type using the "),t("code",[a._v("--content-type")]),a._v(" flag:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive upload-file --content-type "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"application/json"')]),a._v(" --local-path /path/to/file --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"9af694f6-4cfc-4eee-88a8-1b02704760c0"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json\n")])])]),t("p",[a._v("It is currently possible to set this value to any given string, but the gateway will still only serve valid content types. Check out this list of commonly used MIME types to ensure you're providing a valid content type: "),t("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types",target:"_blank",rel:"noopener noreferrer"}},[a._v("Common MIME types"),t("OutboundLink")],1),a._v(".")]),a._v(" "),t("p",[a._v("Note: In the case of multi-file uploads or recursive folder uploads, setting this "),t("code",[a._v("--content-type")]),a._v(" flag will set the provided custom content type on EVERY file entity within a given upload.")]),a._v(" "),t("h3",{attrs:{id:"uploading-from-a-remote-url"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#uploading-from-a-remote-url"}},[a._v("#")]),a._v(" Uploading From a Remote URL"),t("a",{attrs:{id:"remote-path"}})]),a._v(" "),t("p",[a._v("You can upload a file from an existing url using the "),t("code",[a._v("--remote-path")]),a._v(" flag. This must be used in conjunction with "),t("code",[a._v("--dest-file-name")]),a._v(".")]),a._v(" "),t("p",[a._v("You can use a custom content type using the "),t("code",[a._v("--content-type")]),a._v(" flag, but if this isn't used the app will use the content type from the response header of the request for the remote data.")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive upload-file --remote-path "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"https://url/to/file"')]),a._v(" --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"9af694f6-4cfc-4eee-88a8-1b02704760c0"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"example.jpg"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json\n")])])]),t("h3",{attrs:{id:"uploading-a-custom-manifest"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#uploading-a-custom-manifest"}},[a._v("#")]),a._v(" Uploading a Custom Manifest"),t("a",{attrs:{id:"custom-manifest"}})]),a._v(" "),t("p",[a._v("Using the custom content type feature, it is possible for users to upload their own custom manifests. The Arweave gateways use this special content type in order to identify an uploaded file as a manifest:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("application/x.arweave-manifest+json\n")])])]),t("p",[a._v("In addition to this content type, the manifest must also adhere to the "),t("a",{attrs:{href:"#manifest-json"}},[a._v("correct JSON structure")]),a._v(" of an Arweave manifest. A user can create their own manifest from scratch, or start by piping a generated manifest to a JSON file and editing it to their specifications:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive create-manifest "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"6c312b3e-4778-4a18-8243-f2b346f5e7cb"')]),a._v(" --dry-run "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" jq "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v("'{manifest}.manifest'")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" my-custom-manifest.json\n")])])]),t("p",[a._v("After editing the generated manifest, simply perform an "),t("code",[a._v("upload-file")]),a._v(" command with the custom Arweave manifest content type to any PUBLIC folder:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive upload-file --content-type "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"application/x.arweave-manifest+json"')]),a._v(" --local-path my-custom-manifest.json --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"9af694f6-4cfc-4eee-88a8-1b02704760c0"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet.json\n")])])]),t("p",[a._v("The returned "),t("code",[a._v("dataTxId")]),a._v(" field on the created "),t("code",[a._v("file")]),a._v(" entity will be the endpoint that the manifest can be found on Arweave, just as explained in the "),t("a",{attrs:{href:"#uploading-manifests"}},[a._v("manifest sections")]),a._v(" above:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("https://arweave.net/"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("dataTxId"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\nhttps://arweave.net/"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("dataTxId"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("/custom-file-1\nhttps://arweave.net/"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("dataTxId"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("/custom-file-2\n")])])]),t("h3",{attrs:{id:"uploading-files-with-custom-metadata"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#uploading-files-with-custom-metadata"}},[a._v("#")]),a._v(" Uploading Files with Custom MetaData")]),a._v(" "),t("p",[a._v("ArDrive CLI has the capability of attaching custom metadata to ArFS File and Folder MetaData Transactions during the "),t("code",[a._v("upload-file")]),a._v(" command. This metadata can be applied to either the GQL tags on the MetaData Transaction and/or into the MetaData Transaction's Data JSON.")]),a._v(" "),t("p",[a._v("All custom metadata applied must ultimately adhere to the following JSON shapes:")]),a._v(" "),t("div",{staticClass:"language-ts extra-class"},[t("pre",{pre:!0,attrs:{class:"language-ts"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("// GQL Tags")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("type")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("CustomMetaDataGqlTags")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" Record"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),t("span",{pre:!0,attrs:{class:"token builtin"}},[a._v("string")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token builtin"}},[a._v("string")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token builtin"}},[a._v("string")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("// Data JSON Fields")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("type")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("CustomMetaDataJsonFields")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" Record"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),t("span",{pre:!0,attrs:{class:"token builtin"}},[a._v("string")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v(" JsonSerializable"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("export")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("type")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("JsonSerializable")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token builtin"}},[a._v("string")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token builtin"}},[a._v("number")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token builtin"}},[a._v("boolean")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("null")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("member"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token builtin"}},[a._v("string")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" JsonSerializable "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" JsonSerializable"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n")])])]),t("p",[a._v("e.g:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" IPFS-Add: "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v("'MY_HASH'")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# or")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Custom Name'")]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Val 1'")]),a._v(", "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Val 2'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("p",[a._v("When the custom metadata is attached to the MetaData Transaction's GQL tags, they will become visible on any Arweave GQL gateway and also third party tools that read GQL data.")]),a._v(" "),t("p",[a._v("When these tags are added to the MetaData Transaction's Data JSON they can be read by downloading the JSON data directly from "),t("code",[a._v("https://arweave.net/METADATA_TX_ID")]),a._v(".")]),a._v(" "),t("p",[a._v("To add this custom metadata to your file metadata transactions, CLI users can pass custom metadata these parameters:")]),a._v(" "),t("ul",[t("li",[t("code",[a._v("--metadata-file path/to/json/schema")])]),a._v(" "),t("li",[t("code",[a._v('--metadata-json \'{"key": "val", "key-2": true, "key-3": 420, "key-4": ["more", 1337]}\'')])]),a._v(" "),t("li",[t("code",[a._v('--metadata-gql-tags "Tag-Name" "Tag Val"')])])]),a._v(" "),t("p",[a._v("The "),t("code",[a._v("--metadata-file")]),a._v(" will accept a file path to JSON file containing custom metadata:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive upload-file --metadata-file path/to/metadata/json "),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# ...")]),a._v("\n")])])]),t("p",[a._v("This JSON schema object must contain instructions on where to put this metadata with the "),t("code",[a._v("metaDataJson")]),a._v(" and "),t("code",[a._v("metaDataGqlTags")]),a._v(" keys. e.g:")]),a._v(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"metaDataJson"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"Tag-Name"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Value-1"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Value-2"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"metaDataGqlTags"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"GQL Tag Name"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Tag Value"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("p",[a._v("The "),t("code",[a._v("--metadata-gql-tags")]),a._v(" parameter accepts an array of string values to be applied to the MetaData Tx GQL Tags. This method of CLI input does not support multiple tag values for a given tag name and the input must be an EVEN number of string values. (Known bug: String values starting with the "),t("code",[a._v('"-"')]),a._v(" character are currently not supported. Use --metadata-file parameter instead.) e.g:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("upload-file --metadata-gql-tags "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Custom Tag Name"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Custom Value"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# ...")]),a._v("\n")])])]),t("p",[a._v("And the "),t("code",[a._v("--metadata-json")]),a._v(" parameter will accept a stringified JSON input. It will apply all declared JSON fields directly to the MetaData Tx's Data JSON. e.g:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v(" upload-file --metadata-json "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('\' { "json field": "value", "another fields": false } \'')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# ...")]),a._v("\n")])])]),t("p",[a._v("Custom metadata applied to files and/or folders during the "),t("code",[a._v("upload-file")]),a._v(" command will be read back through all existing read commands. e.g:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ardrive file-info "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" 067c4008-9cbe-422e-b697-05442f73da2b\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"appName"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"ArDrive-CLI"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"appVersion"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"1.17.0"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"arFS"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"0.11"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"contentType"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"application/json"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"driveId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"967215ca-a489-494b-97ec-0dd428d7be34"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityType"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"file"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"name"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"unique-name-9718"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"txId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"sxg8bNu6_bbaHkJTxAINVVoz_F-LiFe6s7OnxzoJJk4"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"unixTime"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1657655070")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"size"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("262148")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"lastModifiedDate"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1655409872705")]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"dataTxId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"ublZcIff77ejl3m0uEA8lXEfnTWmSBOFoz-HibqKeyk"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"dataContentType"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"text/plain"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"parentFolderId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"97bc4fb5-aca4-4ffe-938f-1285153d98ca"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"entityId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"067c4008-9cbe-422e-b697-05442f73da2b"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"fileId"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"067c4008-9cbe-422e-b697-05442f73da2b"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"IPFS-Add"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"MY_HASH"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Tag-1"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Val"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Tag-2"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Val"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Tag-3"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Val"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Boost"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"1.05"')]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("h4",{attrs:{id:"applying-unique-custom-metadata-during-bulk-workflows"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#applying-unique-custom-metadata-during-bulk-workflows"}},[a._v("#")]),a._v(" Applying Unique Custom MetaData During Bulk Workflows")]),a._v(" "),t("p",[a._v("With some custom scripting and the "),t("code",[a._v("--metadata-file")]),a._v(" parameter, the ArDrive CLI can be used to apply custom metadata to each file individually in a bulk workflow. For example, if you choose a numbered file naming pattern you can make use of a "),t("code",[a._v("for")]),a._v(" loop:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("for")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token for-or-select variable"}},[a._v("i")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("in")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("..")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("5")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("do")]),a._v("\nardrive upload-file "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-F")]),a._v(" f0c58c11-430c-4383-8e54-4d864cc7e927 --local-path "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"../uploads/test-file-'),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$i")]),a._v('.txt"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/path/to/wallet.json"')]),a._v(" --metadata-file "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"../custom/metadata-'),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$i")]),a._v('.json"')]),a._v(" --dry-run "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"file-result-'),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$i")]),a._v('.json"')]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("done")]),a._v("\n")])])]),t("h2",{attrs:{id:"other-utility-operations"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#other-utility-operations"}},[a._v("#")]),a._v(" Other Utility Operations")]),a._v(" "),t("h3",{attrs:{id:"monitoring-transactions"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#monitoring-transactions"}},[a._v("#")]),a._v(" Monitoring Transactions")]),a._v(" "),t("p",[a._v("Block time on Arweave is typically between 2-3 minutes in duration, so transactions can be mined within that time frame when "),t("a",{attrs:{href:"#dealing-with-network-congestion"}},[a._v("network congestion")]),a._v(" is low. Transactions, in the general case, proceed through the following set of states:")]),a._v(" "),t("ul",[t("li",[a._v('Pending: the transaction is waiting the "mempool" to be mined')]),a._v(" "),t("li",[a._v("Confirming: the transaction was mined on an Arweave Node, but has not yet been confirmed by at least 15 total nodes on the network")]),a._v(" "),t("li",[a._v("Confirmed: the transaction was mined on an Arweave Node and confirmed by at least 15 total nodes on the network")]),a._v(" "),t("li",[a._v("Not Found: the transaction is not available for any of the following reasons:\n"),t("ul",[t("li",[a._v("Insufficient reward to join the mempool")]),a._v(" "),t("li",[a._v("Insufficient reward to be mined within 50 blocks during a period of network congestion")]),a._v(" "),t("li",[a._v("Transaction is transitioning between states")]),a._v(" "),t("li",[a._v("Transaction ID is invalid")])])])]),a._v(" "),t("p",[a._v("Monitor any Arweave transaction's status via its transaction ID by performing:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Peek at the status:")]),a._v("\nardrive tx-status "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-t")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"ekSMckikdRJ8RGIkFa-X3xq3427tvM7J9adv8HP3Bzs"')]),a._v("\n")])])]),t("p",[a._v("Example output:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[a._v("ekSMckikdRJ8RGIkFa-X3xq3427tvM7J9adv8HP3Bzs: Mined at block height "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("775810")]),a._v(" with "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("22439")]),a._v(" confirmations\n")])])]),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Reprint the status every 10 seconds:")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("watch")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-n")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("10")]),a._v(" ardrive tx-status "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-t")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"ekSMckikdRJ8RGIkFa-X3xq3427tvM7J9adv8HP3Bzs"')]),a._v("\n")])])]),t("h3",{attrs:{id:"dealing-with-network-congestion"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#dealing-with-network-congestion"}},[a._v("#")]),a._v(" Dealing With Network Congestion")]),a._v(" "),t("p",[a._v("Currently, Arweave blocks hold up to 1000 transactions per block. The \"mempool\", where pending transactions reside until they've been included into a block, will only hold a transaction for 50 blocks (~100-150 minutes) before it's discarded by the network resulting in no fees or data being transacted. During periods of network congestion (i.e. those where the mempool contains 1000 or more pending transactions), it may make sense to either:")]),a._v(" "),t("p",[a._v("a) wait for congestion to dissipate before attempting your transactions.")]),a._v(" "),t("p",[a._v("b) apply the fee boost multiplier to your transactions rewards with the --boost parameter during write operations in order to front-run some of the congestion.")]),a._v(" "),t("h4",{attrs:{id:"check-for-network-congestion-before-uploading"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#check-for-network-congestion-before-uploading"}},[a._v("#")]),a._v(" Check for network congestion before uploading"),t("a",{attrs:{id:"check-congestion"}})]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# See all the transactions in the mempool")]),a._v("\nardrive get-mempool\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Return the count of the transactions in the mempool")]),a._v("\nardrive get-mempool "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" jq "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v("'length'")]),a._v("\n")])])]),t("h4",{attrs:{id:"front-run-congestion-by-boosting-miner-rewards"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#front-run-congestion-by-boosting-miner-rewards"}},[a._v("#")]),a._v(" Front-run Congestion By Boosting Miner Rewards"),t("a",{attrs:{id:"boost"}})]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Increase the miner reward on your transactions by 50%")]),a._v("\nardrive upload-file --wallet-file /path/to/my/wallet.json --parent-folder-id "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"f0c58c11-430c-4383-8e54-4d864cc7e927"')]),a._v(" --local-path ./helloworld.txt "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--boost")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1.5")]),a._v("\n")])])]),t("h4",{attrs:{id:"send-ar-transactions-from-a-cold-wallet"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#send-ar-transactions-from-a-cold-wallet"}},[a._v("#")]),a._v(" Send AR Transactions From a Cold Wallet"),t("a",{attrs:{id:"cold-tx"}})]),a._v(" "),t("p",[a._v("The best cold wallet storage never exposes your seed phrase and/or private keys to the Internet or a compromised system interface. You can use the ArDrive CLI to facilitate cold storage and transfer of AR.")]),a._v(" "),t("p",[a._v("If you need a new cold AR wallet, generate one from an air-gapped machine capable of running the ArDrive CLI by following the instructions in the "),t("a",{attrs:{href:"#wallet-operations"}},[a._v("Wallet Operations")]),a._v(" section. Fund your cold wallet from whatever external sources you'd like. NOTE: Your cold wallet won't appear on chain until it has received AR.")]),a._v(" "),t("p",[a._v("The workflow to send the AR out from your cold wallet requires you to generate a signed transaction with your cold wallet on your air-gapped machine via the ArDrive CLI, and then to transfer the signed transaction (e.g. by a file on a clean thumb drive) to an Internet-connected machine and send the transaction to the network via the ArDrive CLI. You'll need two inputs from the Internet-connected machine:")]),a._v(" "),t("ul",[t("li",[a._v("the last transaction sent OUT from the cold wallet (or an empty string if none has ever been sent out)")]),a._v(" "),t("li",[a._v("the base fee for an Arweave transaction (i.e. a zero bye transaction). Note that this value could change if a sufficient amount of time passes between the time you fetch this value, create the transaction, and send the transaction.")])]),a._v(" "),t("p",[a._v("To get the last transaction sent from your cold wallet, use the "),t("code",[a._v("last-tx")]),a._v(" command and specify your wallet address e.g.:")]),a._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v("ardrive last-tx -a \n")])])]),t("p",[a._v("To get the base transaction reward required for an AR transaction, use the "),t("code",[a._v("base-reward")]),a._v(" function, optionally applying a reward boost multiple if you're looking to front-run network congestion:")]),a._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v("ardrive base-reward --boost 1.5\n")])])]),t("p",[a._v("Write down or securely copy the values you derived from the Internet-connected machine and run the following commands on the airgapped machine, piping the outputted signed transaction data to a file in the process, e.g. "),t("code",[a._v("sendme.json")]),a._v(" (if that's your signed transaction transfer medium preference):")]),a._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v('ardrive create-tx -w /path/to/wallet/file.json -d -a --last-tx --reward "" > sendme.json\n')])])]),t("p",[a._v("Transport your signed transaction to the Internet-connected machine and run the following command to send your transaction to the Arweave network:")]),a._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v("ardrive send-tx -x /path/to/sendme.json\n")])])]),t("h3",{attrs:{id:"using-a-custom-arweave-gateway"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#using-a-custom-arweave-gateway"}},[a._v("#")]),a._v(" Using a Custom Arweave Gateway")]),a._v(" "),t("p",[a._v("On each command that uses a gateway, it is possible to supply your own custom Arweave gateway using the flag "),t("code",[a._v("--gateway")]),a._v(" or by setting an environment variable named "),t("code",[a._v("ARWEAVE_GATEWAY")]),a._v(".")]),a._v(" "),t("p",[a._v("For example, you could test out that your ArFS transactions are working as expected on a local test network such as "),t("a",{attrs:{href:"https://github.com/textury/arlocal",target:"_blank",rel:"noopener noreferrer"}},[a._v("ArLocal"),t("OutboundLink")],1),a._v(" with this flow:")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Setup ArLocal instance on port 1984")]),a._v("\nnpx arlocal\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# In another terminal, fund your wallet with AR")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" http://localhost:1984/mint/"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" your public wallet address "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("/99999999999999\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Create drive and root folder on ArLocal using `--gateway` flag")]),a._v("\nardrive create-drive "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--gateway")]),a._v(" http://127.0.0.1:1984 "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-n")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v("'my-test-drive'")]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Setup ARWEAVE_GATEWAY as ENV variable")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("export")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("ARWEAVE_GATEWAY")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"http://localhost:1984"')]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Mine block with drive + root folder transactions")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$ARWEAVE_GATEWAY")]),a._v('/mine"')]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Upload file to ArLocal with ENV var")]),a._v("\nardrive upload-file "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-F")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" root folder "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("id")]),a._v(" from create drive "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-l")]),a._v(" /path/to/file "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" /path/to/wallet\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Mine block with file transaction")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$ARWEAVE_GATEWAY")]),a._v('/mine"')]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Inspect meta data of created entities")]),a._v("\nardrive list-drive "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" drive "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("id")]),a._v(" from create drive "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Download file to verify integrity")]),a._v("\nardrive download-file "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("file")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("id")]),a._v(" from upload "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("file")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("h3",{attrs:{id:"persistent-caching-of-arfs-entity-metadata"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#persistent-caching-of-arfs-entity-metadata"}},[a._v("#")]),a._v(" Persistent Caching of ArFS Entity Metadata"),t("a",{attrs:{id:"metadata-caching"}})]),a._v(" "),t("p",[a._v("To avoid redundant requests to the Arweave network for immutable ArFS entity metadata, a persistent file cache is created and maintained at:")]),a._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v("Windows: /ardrive-caches/metadata\nNon-Windows: /.ardrive/caches/metadata\n")])])]),t("p",[a._v("The "),t("code",[a._v("XDG_CACHE_HOME")]),a._v(" environment variable is honored, where applicable, and will be used in place of "),t("code",[a._v("os.homedir()")]),a._v(" in the scenarios described above.")]),a._v(" "),t("p",[a._v("Metadata cache logging to stderr can be enabled by setting the "),t("code",[a._v("ARDRIVE_CACHE_LOG")]),a._v(" environment variable to "),t("code",[a._v("1")]),a._v(".")]),a._v(" "),t("p",[a._v("Cache performance is UNDEFINED for multi-process scenarios, but is presumed to be generally usable.")]),a._v(" "),t("p",[a._v("The cache can be manually cleared safely at any time that any integrating app is not in operation.")])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/29.d82aae63.js b/assets/js/29.6828cc78.js similarity index 99% rename from assets/js/29.d82aae63.js rename to assets/js/29.6828cc78.js index d18bc6d..b1e4843 100644 --- a/assets/js/29.d82aae63.js +++ b/assets/js/29.6828cc78.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{325:function(t,a,s){"use strict";s.r(a);var e=s(10),n=Object(e.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h2",{attrs:{id:"overview"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[t._v("#")]),t._v(" Overview")]),t._v(" "),a("p",[t._v("ArDrive Core is a TypeScript library that contains the essential back end application features to support the ArDrive CLI and Desktop apps, such as file management, Permaweb upload/download, wallet management, and other common functions.")]),t._v(" "),a("p",[t._v("Engage with the community in "),a("a",{attrs:{href:"https://discord.gg/7RuTBckX",target:"_blank",rel:"noopener noreferrer"}},[t._v("Discord"),a("OutboundLink")],1),t._v(" for more information.")]),t._v(" "),a("h2",{attrs:{id:"integrating-with-ardrive-core"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#integrating-with-ardrive-core"}},[t._v("#")]),t._v(" Integrating with ArDrive Core")]),t._v(" "),a("p",[t._v("To add the ArDrive Core library to your project, simply add it as a dependency:")]),t._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("yarn")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("add")]),t._v(" ardrive-core-js\n")])])]),a("p",[t._v("The recommended approach for integrating with ArDrive Core as a dependency in your project is to construct and use the methods provided on the "),a("code",[t._v("ArDrive")]),t._v(" class. Developers can use the convenience function "),a("code",[t._v("arDriveFactory")]),t._v(" to construct the "),a("code",[t._v("ArDrive")]),t._v(" class.")]),t._v(" "),a("p",[t._v("Below are a few common examples of interacting with Core:")]),t._v(" "),a("div",{staticClass:"language-ts extra-class"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" readJWKFile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" arDriveFactory "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ardrive-core-js'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Read wallet from file")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" myWallet "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("readJWKFile")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/path/to/wallet'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Construct ArDrive class")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")])]),t._v(" arDrive "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("arDriveFactory")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" wallet"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" myWallet "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Create a public drive and its root folder")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" createDriveResult "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" arDrive"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("createPublicDrive")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" driveName"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Drive'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("div",{staticClass:"language-ts extra-class"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" wrapFileOrFolder"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("EID")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ardrive-core-js'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Wrap file for upload")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" wrappedEntity "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("wrapFileOrFolder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'path/to/file'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Construct a safe Entity ID Type")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" destFolderId "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("EID")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'10108b54a-eb5e-4134-8ae2-a3946a428ec7'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Upload a public file to destination folder")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" uploadFileResult "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" arDrive"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("uploadAllEntities")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n entitiesToUpload"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" wrappedEntity"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" destFolderId "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("div",{staticClass:"language-ts extra-class"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" deriveDriveKey "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ardrive-core-js'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Derive a private drive key from password, wallet, and drive ID")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" driveKey "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("deriveDriveKey")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'mySecretPassWord'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'12345674a-eb5e-4134-8ae2-a3946a428ec7'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("JSON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stringify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("myWallet "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" JWKWallet"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getPrivateKey")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Create a private folder")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" createFolderResult "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" arDrive"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("createPrivateFolder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n folderName"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My New Private Folder'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n driveKey"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n parentFolderId"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("EID")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'47162534a-eb5e-4134-8ae2-a3946a428ec7'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("div",{staticClass:"language-ts extra-class"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" wrapFileOrFolder"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" EntityKey"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("EID")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ardrive-core-js'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Derive a private drive key from raw drive key string")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" driveKey "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("EntityKey")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Buffer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("from")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'MyAwesomeDriveKeyZZZZZZZZZZZZZZZZZZZZFAKE/s'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'base64'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Wrap folder and all of its contents for upload")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" wrappedFolder "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("wrapFileOrFolder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'path/to/folder'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Upload a private folder and all its contents")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" uploadFileResult "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" arDrive"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("uploadAllEntities")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n entitiesToUpload"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n wrappedEntity"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" wrappedFolder"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n destFolderId"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("EID")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'76543214a-eb5e-4134-8ae2-a3946a428ec7'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n driveKey\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// And some other public file to a different destination 🤯")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n wrappedEntity"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" someOtherWrappedFile\n destFolderId"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("EID")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'675489321-eb5e-4134-8ae2-a3946a428ec7'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("div",{staticClass:"language-ts extra-class"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Upload ArFS Entities To Turbo (BETA)")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// The presence of `turboSettings` in `arDriveFactory` enables sending to Turbo")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" arDrive "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("arDriveFactory")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" wallet"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" myWallet"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" turboSettings"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" uploadFileResult "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" arDrive"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("uploadAllEntities")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n entitiesToUpload"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" wrappedEntity"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" destFolderId "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("h2",{attrs:{id:"development-environment-setup"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#development-environment-setup"}},[t._v("#")]),t._v(" Development Environment Setup")]),t._v(" "),a("p",[t._v("We use nvm to manage our Node engine version and, if necessary, to install an npm version that we can then use to install Yarn.")]),t._v(" "),a("p",[t._v("Note for Windows: "),a("strong",[t._v("We recommend using WSL")]),t._v(" for setting up NVM on Windows using the "),a("a",{attrs:{href:"https://code.visualstudio.com/docs/remote/wsl",target:"_blank",rel:"noopener noreferrer"}},[t._v("instructions described here"),a("OutboundLink")],1),t._v(" then continue the steps below.")]),t._v(" "),a("ol",[a("li",[a("p",[t._v("Install nvm "),a("a",{attrs:{href:"https://github.com/nvm-sh/nvm#installing-and-updating",target:"_blank",rel:"noopener noreferrer"}},[t._v("using their instructions"),a("OutboundLink")],1),t._v(".")])]),t._v(" "),a("li",[a("p",[t._v("We use Node 18.x -- ensure that the correct Node version is installed and activated by performing "),a("code",[t._v("nvm install")]),t._v(" and then "),a("code",[t._v("nvm use")])])]),t._v(" "),a("li",[a("p",[t._v("We use Yarn 3.x please "),a("a",{attrs:{href:"https://yarnpkg.com/getting-started/install",target:"_blank",rel:"noopener noreferrer"}},[t._v("follow the installation guidelines here"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("p",[t._v("We use husky 6.x to manage the git commit hooks that help to improve the quality of our commits. Please run:\n"),a("code",[t._v("yarn husky install")]),t._v("\nto enable git hooks for this local repository. Without doing so, you risk committing non-compliant code to the repository.")])]),t._v(" "),a("li",[a("p",[t._v("Install all node package dependencies by running "),a("code",[t._v("yarn install --check-cache")])])])]),t._v(" "),a("h3",{attrs:{id:"recommended-visual-studio-code-extensions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#recommended-visual-studio-code-extensions"}},[t._v("#")]),t._v(" Recommended Visual Studio Code extensions")]),t._v(" "),a("p",[t._v("To ensure your environment is compatible, we also recommend the following VSCode extensions:")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint",target:"_blank",rel:"noopener noreferrer"}},[t._v("ES-Lint"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig",target:"_blank",rel:"noopener noreferrer"}},[t._v("Editor-Config"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode",target:"_blank",rel:"noopener noreferrer"}},[t._v("Prettier"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://marketplace.visualstudio.com/items?itemName=arcanis.vscode-zipfs",target:"_blank",rel:"noopener noreferrer"}},[t._v("ZipFS"),a("OutboundLink")],1)])]),t._v(" "),a("h2",{attrs:{id:"building-the-library"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#building-the-library"}},[t._v("#")]),t._v(" Building the Library")]),t._v(" "),a("p",[t._v("Simply run "),a("code",[t._v("yarn build")]),t._v(". This will clean the project and compile the TypeScript library.")]),t._v(" "),a("h2",{attrs:{id:"testing-the-library"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#testing-the-library"}},[t._v("#")]),t._v(" Testing the Library")]),t._v(" "),a("p",[t._v("This library is setup for "),a("a",{attrs:{href:"https://github.com/mochajs/mocha",target:"_blank",rel:"noopener noreferrer"}},[t._v("Mocha"),a("OutboundLink")],1),t._v(" testing with "),a("a",{attrs:{href:"https://github.com/chaijs/chai",target:"_blank",rel:"noopener noreferrer"}},[t._v("Chai"),a("OutboundLink")],1),t._v(" and "),a("a",{attrs:{href:"https://github.com/sinonjs/sinon",target:"_blank",rel:"noopener noreferrer"}},[t._v("Sinon"),a("OutboundLink")],1),t._v(". Configuration for Mocha can be found in "),a("code",[t._v(".mocharc.js")])]),t._v(" "),a("p",[t._v("To run all of the tests use:")]),t._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("yarn")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("test")]),t._v("\n")])])]),a("p",[t._v("To run a specific test, use Mocha's "),a("a",{attrs:{href:"https://mochajs.org/#-grep-regexp-g-regexp",target:"_blank",rel:"noopener noreferrer"}},[t._v("grep"),a("OutboundLink")],1),t._v(" command. This will cause Mocha to only run the tests that contain the provided RegExp.")]),t._v(" "),a("p",[t._v("The "),a("code",[t._v("-g")]),t._v(" command will "),a("strong",[t._v("only")]),t._v(" match the characters used in the "),a("code",[t._v("describe()")]),t._v(" and "),a("code",[t._v("it()")]),t._v(" title arguments. It will "),a("strong",[t._v("not")]),t._v(" match files names or folders.")]),t._v(" "),a("p",[t._v("For example:")]),t._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("yarn")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("test")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-g")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My specific unit test'")]),t._v("\n")])])]),a("p",[t._v("Will run this test:")]),t._v(" "),a("div",{staticClass:"language-ts extra-class"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My specific unit test'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'functions correctly'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// ...")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("h3",{attrs:{id:"coverage"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#coverage"}},[t._v("#")]),t._v(" Coverage")]),t._v(" "),a("p",[a("a",{attrs:{href:"https://github.com/istanbuljs/nyc",target:"_blank",rel:"noopener noreferrer"}},[t._v("Istanbul.js (nyc)"),a("OutboundLink")],1),t._v(" has been added for code coverage reporting. Configuration for the nyc package can be found in "),a("code",[t._v("nyc.config.js")])]),t._v(" "),a("p",[t._v("On each "),a("code",[t._v("yarn test")]),t._v(" command, nyc will output a code coverage summary in the terminal. In addition, a more detailed HTML version will output to the "),a("code",[t._v("/coverage")]),t._v(" directory. Simply run "),a("code",[t._v("/coverage/index.html")]),t._v(" in your browser to view the HTML version.")]),t._v(" "),a("p",[t._v("Alternatively, you can view a verbose coverage output in the terminal by running:")]),t._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("yarn")]),t._v(" coverage\n")])])]),a("h3",{attrs:{id:"adding-tests"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#adding-tests"}},[t._v("#")]),t._v(" Adding tests")]),t._v(" "),a("p",[t._v("There are many different syntax options available with the Chai library, which can be found in their "),a("a",{attrs:{href:"https://www.chaijs.com/api/bdd/",target:"_blank",rel:"noopener noreferrer"}},[t._v("documentation"),a("OutboundLink")],1),t._v(". For examples on unit testing, visit "),a("code",[t._v("src/example.test.ts")]),t._v(", and for integration testing: "),a("code",[t._v("tests/example.test.ts")]),t._v(".")]),t._v(" "),a("p",[t._v("Unit tests should be located adjacent (or right next to) the file they are referencing. They should also be named the same with the "),a("code",[t._v(".test.ts")]),t._v(" extension. In contrast, integration tests will live in the "),a("code",[t._v("/tests")]),t._v(" directory.")]),t._v(" "),a("p",[t._v("For example:")]),t._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[t._v("ardrive-core-js/\n├── src\n│ ├── fileToTest.ts\n│ └── fileToTest.test.ts "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("-- Unit "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("test")]),t._v("\n└── tests\n └── bestApi.test.ts "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("----- Integration "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("test")]),t._v("\n")])])]),a("h3",{attrs:{id:"using-sinon"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#using-sinon"}},[t._v("#")]),t._v(" Using Sinon")]),t._v(" "),a("p",[t._v("Sinon can be used to create spies, mocks, fakes, stubs, and more. There are some basic examples of using the library shown in the example test files shared above.")]),t._v(" "),a("p",[t._v("For more information on what you can do with Sinon, visit their "),a("a",{attrs:{href:"https://sinonjs.org/releases/latest",target:"_blank",rel:"noopener noreferrer"}},[t._v("documentation"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("h3",{attrs:{id:"debugging-with-power-assert"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#debugging-with-power-assert"}},[t._v("#")]),t._v(" Debugging with Power-Assert")]),t._v(" "),a("p",[a("a",{attrs:{href:"https://github.com/power-assert-js/power-assert",target:"_blank",rel:"noopener noreferrer"}},[t._v("Power-Assert"),a("OutboundLink")],1),t._v(" is setup as another testing tool. The library can be used to provide a very detailed output of your failing test cases. This can become super useful while debugging a test.")]),t._v(" "),a("p",[t._v("To use this tool, it must be imported using this syntax:")]),t._v(" "),a("div",{staticClass:"language-ts extra-class"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" assert "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("require")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'assert'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("p",[t._v("Then use "),a("code",[t._v("assert")]),t._v(" in your error throwing test case. Commenting out the Chai assertion will produce a cleaner output:")]),t._v(" "),a("div",{staticClass:"language-ts extra-class"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// expect(failingOutput).to.equal(expectedOutput);")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("assert")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("failingOutput "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("===")]),t._v(" expectedOutput"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("p",[t._v("And finally, to view the detailed error messages in your terminal:")]),t._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("yarn")]),t._v(" power-assert "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-g")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My test case'")]),t._v("\n")])])]),a("h3",{attrs:{id:"progress-logging-of-transaction-uploads"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#progress-logging-of-transaction-uploads"}},[t._v("#")]),t._v(" Progress Logging of Transaction Uploads")]),t._v(" "),a("p",[t._v("Progress logging of transaction uploads to stderr can be enabled by setting the "),a("code",[t._v("ARDRIVE_PROGRESS_LOG")]),t._v(" environment variable to "),a("code",[t._v("1")]),t._v(":")]),t._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[t._v("Uploading "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" transaction "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" of total "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" transactions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("..")]),t._v(".\nTransaction _GKQasQX194a364Hph8Oe-oku1AdfHwxWOw9_JC1yjc Upload Progress: "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("%\nTransaction _GKQasQX194a364Hph8Oe-oku1AdfHwxWOw9_JC1yjc Upload Progress: "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("35")]),t._v("%\nTransaction _GKQasQX194a364Hph8Oe-oku1AdfHwxWOw9_JC1yjc Upload Progress: "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("66")]),t._v("%\nTransaction _GKQasQX194a364Hph8Oe-oku1AdfHwxWOw9_JC1yjc Upload Progress: "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),t._v("%\nUploading "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" transaction "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" of total "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" transactions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("..")]),t._v(".\nTransaction nA1stCdTkuf290k0qsqvmJ78isEC0bwgrAi3D8Cl1LU Upload Progress: "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("%\nTransaction nA1stCdTkuf290k0qsqvmJ78isEC0bwgrAi3D8Cl1LU Upload Progress: "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("13")]),t._v("%\nTransaction nA1stCdTkuf290k0qsqvmJ78isEC0bwgrAi3D8Cl1LU Upload Progress: "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("28")]),t._v("%\nTransaction nA1stCdTkuf290k0qsqvmJ78isEC0bwgrAi3D8Cl1LU Upload Progress: "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("42")]),t._v("%\nTransaction nA1stCdTkuf290k0qsqvmJ78isEC0bwgrAi3D8Cl1LU Upload Progress: "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("60")]),t._v("%\nTransaction nA1stCdTkuf290k0qsqvmJ78isEC0bwgrAi3D8Cl1LU Upload Progress: "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("76")]),t._v("%\nTransaction nA1stCdTkuf290k0qsqvmJ78isEC0bwgrAi3D8Cl1LU Upload Progress: "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("91")]),t._v("%\nTransaction nA1stCdTkuf290k0qsqvmJ78isEC0bwgrAi3D8Cl1LU Upload Progress: "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),t._v("%\n")])])]),a("h3",{attrs:{id:"persistent-caching-of-arfs-entity-metadata"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#persistent-caching-of-arfs-entity-metadata"}},[t._v("#")]),t._v(" Persistent Caching of ArFS Entity Metadata")]),t._v(" "),a("p",[t._v("To avoid redundant requests to the Arweave network for immutable ArFS entity metadata, a persistent file cache is created and maintained at:")]),t._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[t._v("Windows: "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("os.homedir"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("/ardrive-caches/metadata\nNon-Windows: "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("os.homedir"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("/.ardrive/caches/metadata\n")])])]),a("p",[t._v("The "),a("code",[t._v("XDG_CACHE_HOME")]),t._v(" environment variable is honored, where applicable, and will be used in place of "),a("code",[t._v("os.homedir()")]),t._v(" in the scenarios described above.")]),t._v(" "),a("p",[t._v("Metadata cache logging to stderr can be enabled by setting the "),a("code",[t._v("ARDRIVE_CACHE_LOG")]),t._v(" environment variable to "),a("code",[t._v("1")]),t._v(".")]),t._v(" "),a("p",[t._v("Cache performance is UNDEFINED for multi-process scenarios, but is presumed to be generally usable.")]),t._v(" "),a("p",[t._v("The cache can be manually cleared safely at any time that any integrating app is not in operation.")]),t._v(" "),a("h3",{attrs:{id:"applying-custom-metadata-to-arfs-file-transactions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#applying-custom-metadata-to-arfs-file-transactions"}},[t._v("#")]),t._v(" Applying Custom MetaData to ArFS File Transactions")]),t._v(" "),a("p",[t._v("Custom metadata can be attached to ArFS File Transactions. Metadata can be applied to either the GQL tags on the MetaData Transaction, the MetaData Transaction's Data JSON, or both.")]),t._v(" "),a("p",[t._v("All custom tags can be accessed by using by using "),a("code",[t._v("ArDrive")]),t._v(" class read methods such as "),a("code",[t._v("getPublicFile")]),t._v(", "),a("code",[t._v("getPrivateFile")]),t._v(", "),a("code",[t._v("listPrivateFolder")]),t._v(", etc.")]),t._v(" "),a("div",{staticClass:"language-ts extra-class"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" arDrive "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("arDriveAnonymousFactory")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" fileInfo "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" arDrive"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getPublicFile")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" fileId "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" myMetaDataGqlTags "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" fileInfo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("customMetaDataGqlTags"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" myMetaDataJsonFields "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" fileInfo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("customMetaDataJson"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("p",[t._v("When the custom metadata is attached to the MetaData Transaction's GQL tags, they will become visible on any Arweave GQL gateway and also third party tools that read GQL data.")]),t._v(" "),a("p",[t._v("When these tags are added to the MetaData Transaction's Data JSON they can be read by downloading the JSON data directly from "),a("code",[t._v("https://arweave.net/")]),t._v(".")]),t._v(" "),a("p",[t._v("To add this custom metadata to your file metadata transactions, users can pass an object containing custom tags when wrapping content to upload:")]),t._v(" "),a("div",{staticClass:"language-ts extra-class"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" fileToUpload "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("wrapFileOrFolder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'path/to/file/on/system'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// File or Folder Path")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'application/custom-content-type'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Custom Content Type")]),t._v("\n customMetaData"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Custom MetaData")]),t._v("\n metaDataJson"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Custom-Tag-Name'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Single-Custom-Value'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n metaDataGqlTags"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Another-Custom-Tag'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'First-Custom-Value'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Second-Custom-Value'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Third-Custom-Value'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{324:function(t,a,s){"use strict";s.r(a);var e=s(10),n=Object(e.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h2",{attrs:{id:"overview"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[t._v("#")]),t._v(" Overview")]),t._v(" "),a("p",[t._v("ArDrive Core is a TypeScript library that contains the essential back end application features to support the ArDrive CLI and Desktop apps, such as file management, Permaweb upload/download, wallet management, and other common functions.")]),t._v(" "),a("p",[t._v("Engage with the community in "),a("a",{attrs:{href:"https://discord.gg/7RuTBckX",target:"_blank",rel:"noopener noreferrer"}},[t._v("Discord"),a("OutboundLink")],1),t._v(" for more information.")]),t._v(" "),a("h2",{attrs:{id:"integrating-with-ardrive-core"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#integrating-with-ardrive-core"}},[t._v("#")]),t._v(" Integrating with ArDrive Core")]),t._v(" "),a("p",[t._v("To add the ArDrive Core library to your project, simply add it as a dependency:")]),t._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("yarn")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("add")]),t._v(" ardrive-core-js\n")])])]),a("p",[t._v("The recommended approach for integrating with ArDrive Core as a dependency in your project is to construct and use the methods provided on the "),a("code",[t._v("ArDrive")]),t._v(" class. Developers can use the convenience function "),a("code",[t._v("arDriveFactory")]),t._v(" to construct the "),a("code",[t._v("ArDrive")]),t._v(" class.")]),t._v(" "),a("p",[t._v("Below are a few common examples of interacting with Core:")]),t._v(" "),a("div",{staticClass:"language-ts extra-class"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" readJWKFile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" arDriveFactory "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ardrive-core-js'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Read wallet from file")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" myWallet "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("readJWKFile")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/path/to/wallet'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Construct ArDrive class")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")])]),t._v(" arDrive "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("arDriveFactory")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" wallet"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" myWallet "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Create a public drive and its root folder")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" createDriveResult "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" arDrive"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("createPublicDrive")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" driveName"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Drive'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("div",{staticClass:"language-ts extra-class"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" wrapFileOrFolder"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("EID")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ardrive-core-js'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Wrap file for upload")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" wrappedEntity "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("wrapFileOrFolder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'path/to/file'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Construct a safe Entity ID Type")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" destFolderId "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("EID")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'10108b54a-eb5e-4134-8ae2-a3946a428ec7'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Upload a public file to destination folder")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" uploadFileResult "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" arDrive"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("uploadAllEntities")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n entitiesToUpload"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" wrappedEntity"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" destFolderId "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("div",{staticClass:"language-ts extra-class"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" deriveDriveKey "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ardrive-core-js'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Derive a private drive key from password, wallet, and drive ID")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" driveKey "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("deriveDriveKey")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'mySecretPassWord'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'12345674a-eb5e-4134-8ae2-a3946a428ec7'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("JSON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stringify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("myWallet "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" JWKWallet"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getPrivateKey")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Create a private folder")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" createFolderResult "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" arDrive"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("createPrivateFolder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n folderName"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My New Private Folder'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n driveKey"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n parentFolderId"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("EID")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'47162534a-eb5e-4134-8ae2-a3946a428ec7'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("div",{staticClass:"language-ts extra-class"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" wrapFileOrFolder"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" EntityKey"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("EID")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ardrive-core-js'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Derive a private drive key from raw drive key string")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" driveKey "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("EntityKey")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Buffer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("from")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'MyAwesomeDriveKeyZZZZZZZZZZZZZZZZZZZZFAKE/s'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'base64'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Wrap folder and all of its contents for upload")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" wrappedFolder "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("wrapFileOrFolder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'path/to/folder'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Upload a private folder and all its contents")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" uploadFileResult "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" arDrive"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("uploadAllEntities")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n entitiesToUpload"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n wrappedEntity"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" wrappedFolder"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n destFolderId"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("EID")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'76543214a-eb5e-4134-8ae2-a3946a428ec7'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n driveKey\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// And some other public file to a different destination 🤯")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n wrappedEntity"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" someOtherWrappedFile\n destFolderId"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("EID")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'675489321-eb5e-4134-8ae2-a3946a428ec7'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("div",{staticClass:"language-ts extra-class"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Upload ArFS Entities To Turbo (BETA)")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// The presence of `turboSettings` in `arDriveFactory` enables sending to Turbo")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" arDrive "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("arDriveFactory")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" wallet"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" myWallet"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" turboSettings"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" uploadFileResult "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" arDrive"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("uploadAllEntities")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n entitiesToUpload"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" wrappedEntity"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" destFolderId "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("h2",{attrs:{id:"development-environment-setup"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#development-environment-setup"}},[t._v("#")]),t._v(" Development Environment Setup")]),t._v(" "),a("p",[t._v("We use nvm to manage our Node engine version and, if necessary, to install an npm version that we can then use to install Yarn.")]),t._v(" "),a("p",[t._v("Note for Windows: "),a("strong",[t._v("We recommend using WSL")]),t._v(" for setting up NVM on Windows using the "),a("a",{attrs:{href:"https://code.visualstudio.com/docs/remote/wsl",target:"_blank",rel:"noopener noreferrer"}},[t._v("instructions described here"),a("OutboundLink")],1),t._v(" then continue the steps below.")]),t._v(" "),a("ol",[a("li",[a("p",[t._v("Install nvm "),a("a",{attrs:{href:"https://github.com/nvm-sh/nvm#installing-and-updating",target:"_blank",rel:"noopener noreferrer"}},[t._v("using their instructions"),a("OutboundLink")],1),t._v(".")])]),t._v(" "),a("li",[a("p",[t._v("We use Node 18.x -- ensure that the correct Node version is installed and activated by performing "),a("code",[t._v("nvm install")]),t._v(" and then "),a("code",[t._v("nvm use")])])]),t._v(" "),a("li",[a("p",[t._v("We use Yarn 3.x please "),a("a",{attrs:{href:"https://yarnpkg.com/getting-started/install",target:"_blank",rel:"noopener noreferrer"}},[t._v("follow the installation guidelines here"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("p",[t._v("We use husky 6.x to manage the git commit hooks that help to improve the quality of our commits. Please run:\n"),a("code",[t._v("yarn husky install")]),t._v("\nto enable git hooks for this local repository. Without doing so, you risk committing non-compliant code to the repository.")])]),t._v(" "),a("li",[a("p",[t._v("Install all node package dependencies by running "),a("code",[t._v("yarn install --check-cache")])])])]),t._v(" "),a("h3",{attrs:{id:"recommended-visual-studio-code-extensions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#recommended-visual-studio-code-extensions"}},[t._v("#")]),t._v(" Recommended Visual Studio Code extensions")]),t._v(" "),a("p",[t._v("To ensure your environment is compatible, we also recommend the following VSCode extensions:")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint",target:"_blank",rel:"noopener noreferrer"}},[t._v("ES-Lint"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig",target:"_blank",rel:"noopener noreferrer"}},[t._v("Editor-Config"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode",target:"_blank",rel:"noopener noreferrer"}},[t._v("Prettier"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://marketplace.visualstudio.com/items?itemName=arcanis.vscode-zipfs",target:"_blank",rel:"noopener noreferrer"}},[t._v("ZipFS"),a("OutboundLink")],1)])]),t._v(" "),a("h2",{attrs:{id:"building-the-library"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#building-the-library"}},[t._v("#")]),t._v(" Building the Library")]),t._v(" "),a("p",[t._v("Simply run "),a("code",[t._v("yarn build")]),t._v(". This will clean the project and compile the TypeScript library.")]),t._v(" "),a("h2",{attrs:{id:"testing-the-library"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#testing-the-library"}},[t._v("#")]),t._v(" Testing the Library")]),t._v(" "),a("p",[t._v("This library is setup for "),a("a",{attrs:{href:"https://github.com/mochajs/mocha",target:"_blank",rel:"noopener noreferrer"}},[t._v("Mocha"),a("OutboundLink")],1),t._v(" testing with "),a("a",{attrs:{href:"https://github.com/chaijs/chai",target:"_blank",rel:"noopener noreferrer"}},[t._v("Chai"),a("OutboundLink")],1),t._v(" and "),a("a",{attrs:{href:"https://github.com/sinonjs/sinon",target:"_blank",rel:"noopener noreferrer"}},[t._v("Sinon"),a("OutboundLink")],1),t._v(". Configuration for Mocha can be found in "),a("code",[t._v(".mocharc.js")])]),t._v(" "),a("p",[t._v("To run all of the tests use:")]),t._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("yarn")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("test")]),t._v("\n")])])]),a("p",[t._v("To run a specific test, use Mocha's "),a("a",{attrs:{href:"https://mochajs.org/#-grep-regexp-g-regexp",target:"_blank",rel:"noopener noreferrer"}},[t._v("grep"),a("OutboundLink")],1),t._v(" command. This will cause Mocha to only run the tests that contain the provided RegExp.")]),t._v(" "),a("p",[t._v("The "),a("code",[t._v("-g")]),t._v(" command will "),a("strong",[t._v("only")]),t._v(" match the characters used in the "),a("code",[t._v("describe()")]),t._v(" and "),a("code",[t._v("it()")]),t._v(" title arguments. It will "),a("strong",[t._v("not")]),t._v(" match files names or folders.")]),t._v(" "),a("p",[t._v("For example:")]),t._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("yarn")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("test")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-g")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My specific unit test'")]),t._v("\n")])])]),a("p",[t._v("Will run this test:")]),t._v(" "),a("div",{staticClass:"language-ts extra-class"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My specific unit test'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'functions correctly'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// ...")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("h3",{attrs:{id:"coverage"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#coverage"}},[t._v("#")]),t._v(" Coverage")]),t._v(" "),a("p",[a("a",{attrs:{href:"https://github.com/istanbuljs/nyc",target:"_blank",rel:"noopener noreferrer"}},[t._v("Istanbul.js (nyc)"),a("OutboundLink")],1),t._v(" has been added for code coverage reporting. Configuration for the nyc package can be found in "),a("code",[t._v("nyc.config.js")])]),t._v(" "),a("p",[t._v("On each "),a("code",[t._v("yarn test")]),t._v(" command, nyc will output a code coverage summary in the terminal. In addition, a more detailed HTML version will output to the "),a("code",[t._v("/coverage")]),t._v(" directory. Simply run "),a("code",[t._v("/coverage/index.html")]),t._v(" in your browser to view the HTML version.")]),t._v(" "),a("p",[t._v("Alternatively, you can view a verbose coverage output in the terminal by running:")]),t._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("yarn")]),t._v(" coverage\n")])])]),a("h3",{attrs:{id:"adding-tests"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#adding-tests"}},[t._v("#")]),t._v(" Adding tests")]),t._v(" "),a("p",[t._v("There are many different syntax options available with the Chai library, which can be found in their "),a("a",{attrs:{href:"https://www.chaijs.com/api/bdd/",target:"_blank",rel:"noopener noreferrer"}},[t._v("documentation"),a("OutboundLink")],1),t._v(". For examples on unit testing, visit "),a("code",[t._v("src/example.test.ts")]),t._v(", and for integration testing: "),a("code",[t._v("tests/example.test.ts")]),t._v(".")]),t._v(" "),a("p",[t._v("Unit tests should be located adjacent (or right next to) the file they are referencing. They should also be named the same with the "),a("code",[t._v(".test.ts")]),t._v(" extension. In contrast, integration tests will live in the "),a("code",[t._v("/tests")]),t._v(" directory.")]),t._v(" "),a("p",[t._v("For example:")]),t._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[t._v("ardrive-core-js/\n├── src\n│ ├── fileToTest.ts\n│ └── fileToTest.test.ts "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("-- Unit "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("test")]),t._v("\n└── tests\n └── bestApi.test.ts "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("----- Integration "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("test")]),t._v("\n")])])]),a("h3",{attrs:{id:"using-sinon"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#using-sinon"}},[t._v("#")]),t._v(" Using Sinon")]),t._v(" "),a("p",[t._v("Sinon can be used to create spies, mocks, fakes, stubs, and more. There are some basic examples of using the library shown in the example test files shared above.")]),t._v(" "),a("p",[t._v("For more information on what you can do with Sinon, visit their "),a("a",{attrs:{href:"https://sinonjs.org/releases/latest",target:"_blank",rel:"noopener noreferrer"}},[t._v("documentation"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("h3",{attrs:{id:"debugging-with-power-assert"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#debugging-with-power-assert"}},[t._v("#")]),t._v(" Debugging with Power-Assert")]),t._v(" "),a("p",[a("a",{attrs:{href:"https://github.com/power-assert-js/power-assert",target:"_blank",rel:"noopener noreferrer"}},[t._v("Power-Assert"),a("OutboundLink")],1),t._v(" is setup as another testing tool. The library can be used to provide a very detailed output of your failing test cases. This can become super useful while debugging a test.")]),t._v(" "),a("p",[t._v("To use this tool, it must be imported using this syntax:")]),t._v(" "),a("div",{staticClass:"language-ts extra-class"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" assert "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("require")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'assert'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("p",[t._v("Then use "),a("code",[t._v("assert")]),t._v(" in your error throwing test case. Commenting out the Chai assertion will produce a cleaner output:")]),t._v(" "),a("div",{staticClass:"language-ts extra-class"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// expect(failingOutput).to.equal(expectedOutput);")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("assert")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("failingOutput "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("===")]),t._v(" expectedOutput"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("p",[t._v("And finally, to view the detailed error messages in your terminal:")]),t._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("yarn")]),t._v(" power-assert "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-g")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My test case'")]),t._v("\n")])])]),a("h3",{attrs:{id:"progress-logging-of-transaction-uploads"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#progress-logging-of-transaction-uploads"}},[t._v("#")]),t._v(" Progress Logging of Transaction Uploads")]),t._v(" "),a("p",[t._v("Progress logging of transaction uploads to stderr can be enabled by setting the "),a("code",[t._v("ARDRIVE_PROGRESS_LOG")]),t._v(" environment variable to "),a("code",[t._v("1")]),t._v(":")]),t._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[t._v("Uploading "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" transaction "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" of total "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" transactions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("..")]),t._v(".\nTransaction _GKQasQX194a364Hph8Oe-oku1AdfHwxWOw9_JC1yjc Upload Progress: "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("%\nTransaction _GKQasQX194a364Hph8Oe-oku1AdfHwxWOw9_JC1yjc Upload Progress: "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("35")]),t._v("%\nTransaction _GKQasQX194a364Hph8Oe-oku1AdfHwxWOw9_JC1yjc Upload Progress: "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("66")]),t._v("%\nTransaction _GKQasQX194a364Hph8Oe-oku1AdfHwxWOw9_JC1yjc Upload Progress: "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),t._v("%\nUploading "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" transaction "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" of total "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" transactions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("..")]),t._v(".\nTransaction nA1stCdTkuf290k0qsqvmJ78isEC0bwgrAi3D8Cl1LU Upload Progress: "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("%\nTransaction nA1stCdTkuf290k0qsqvmJ78isEC0bwgrAi3D8Cl1LU Upload Progress: "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("13")]),t._v("%\nTransaction nA1stCdTkuf290k0qsqvmJ78isEC0bwgrAi3D8Cl1LU Upload Progress: "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("28")]),t._v("%\nTransaction nA1stCdTkuf290k0qsqvmJ78isEC0bwgrAi3D8Cl1LU Upload Progress: "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("42")]),t._v("%\nTransaction nA1stCdTkuf290k0qsqvmJ78isEC0bwgrAi3D8Cl1LU Upload Progress: "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("60")]),t._v("%\nTransaction nA1stCdTkuf290k0qsqvmJ78isEC0bwgrAi3D8Cl1LU Upload Progress: "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("76")]),t._v("%\nTransaction nA1stCdTkuf290k0qsqvmJ78isEC0bwgrAi3D8Cl1LU Upload Progress: "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("91")]),t._v("%\nTransaction nA1stCdTkuf290k0qsqvmJ78isEC0bwgrAi3D8Cl1LU Upload Progress: "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),t._v("%\n")])])]),a("h3",{attrs:{id:"persistent-caching-of-arfs-entity-metadata"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#persistent-caching-of-arfs-entity-metadata"}},[t._v("#")]),t._v(" Persistent Caching of ArFS Entity Metadata")]),t._v(" "),a("p",[t._v("To avoid redundant requests to the Arweave network for immutable ArFS entity metadata, a persistent file cache is created and maintained at:")]),t._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[t._v("Windows: "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("os.homedir"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("/ardrive-caches/metadata\nNon-Windows: "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("os.homedir"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("/.ardrive/caches/metadata\n")])])]),a("p",[t._v("The "),a("code",[t._v("XDG_CACHE_HOME")]),t._v(" environment variable is honored, where applicable, and will be used in place of "),a("code",[t._v("os.homedir()")]),t._v(" in the scenarios described above.")]),t._v(" "),a("p",[t._v("Metadata cache logging to stderr can be enabled by setting the "),a("code",[t._v("ARDRIVE_CACHE_LOG")]),t._v(" environment variable to "),a("code",[t._v("1")]),t._v(".")]),t._v(" "),a("p",[t._v("Cache performance is UNDEFINED for multi-process scenarios, but is presumed to be generally usable.")]),t._v(" "),a("p",[t._v("The cache can be manually cleared safely at any time that any integrating app is not in operation.")]),t._v(" "),a("h3",{attrs:{id:"applying-custom-metadata-to-arfs-file-transactions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#applying-custom-metadata-to-arfs-file-transactions"}},[t._v("#")]),t._v(" Applying Custom MetaData to ArFS File Transactions")]),t._v(" "),a("p",[t._v("Custom metadata can be attached to ArFS File Transactions. Metadata can be applied to either the GQL tags on the MetaData Transaction, the MetaData Transaction's Data JSON, or both.")]),t._v(" "),a("p",[t._v("All custom tags can be accessed by using by using "),a("code",[t._v("ArDrive")]),t._v(" class read methods such as "),a("code",[t._v("getPublicFile")]),t._v(", "),a("code",[t._v("getPrivateFile")]),t._v(", "),a("code",[t._v("listPrivateFolder")]),t._v(", etc.")]),t._v(" "),a("div",{staticClass:"language-ts extra-class"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" arDrive "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("arDriveAnonymousFactory")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" fileInfo "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" arDrive"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getPublicFile")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" fileId "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" myMetaDataGqlTags "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" fileInfo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("customMetaDataGqlTags"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" myMetaDataJsonFields "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" fileInfo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("customMetaDataJson"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("p",[t._v("When the custom metadata is attached to the MetaData Transaction's GQL tags, they will become visible on any Arweave GQL gateway and also third party tools that read GQL data.")]),t._v(" "),a("p",[t._v("When these tags are added to the MetaData Transaction's Data JSON they can be read by downloading the JSON data directly from "),a("code",[t._v("https://arweave.net/")]),t._v(".")]),t._v(" "),a("p",[t._v("To add this custom metadata to your file metadata transactions, users can pass an object containing custom tags when wrapping content to upload:")]),t._v(" "),a("div",{staticClass:"language-ts extra-class"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" fileToUpload "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("wrapFileOrFolder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'path/to/file/on/system'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// File or Folder Path")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'application/custom-content-type'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Custom Content Type")]),t._v("\n customMetaData"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Custom MetaData")]),t._v("\n metaDataJson"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Custom-Tag-Name'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Single-Custom-Value'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n metaDataGqlTags"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Another-Custom-Tag'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'First-Custom-Value'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Second-Custom-Value'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Third-Custom-Value'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/30.0cd3f326.js b/assets/js/30.06ab7fce.js similarity index 98% rename from assets/js/30.0cd3f326.js rename to assets/js/30.06ab7fce.js index b2a1d3a..be85f9f 100644 --- a/assets/js/30.0cd3f326.js +++ b/assets/js/30.06ab7fce.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{323:function(e,t,a){"use strict";a.r(t);var o=a(10),r=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"deploying-your-dapp"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#deploying-your-dapp"}},[e._v("#")]),e._v(" Deploying your dApp")]),e._v(" "),t("h2",{attrs:{id:"overview"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),t("p",[e._v("This guide will outline the steps needed to deploy your dApp onto the Arweave blockchain using the ArDrive web app. It assumes you have already prepared your dApp to use hash routing and relative file paths, and built static files for any dApp in a language or framework that requires it (like React).")]),e._v(" "),t("h2",{attrs:{id:"deploying"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#deploying"}},[e._v("#")]),e._v(" Deploying")]),e._v(" "),t("h3",{attrs:{id:"step-1-log-into-ardrive"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#step-1-log-into-ardrive"}},[e._v("#")]),e._v(" Step 1: Log into ArDrive")]),e._v(" "),t("p",[e._v("Go to the "),t("a",{attrs:{href:"https://app.ardrive.io/#/sign-in",target:"_blank",rel:"noopener noreferrer"}},[e._v("ArDrive web app"),t("OutboundLink")],1),e._v(" and log in using the method of your choosing. If you don't already have an account, you will need to follow the instructions to set one up.")]),e._v(" "),t("h3",{attrs:{id:"step-2-select-or-create-a-drive"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#step-2-select-or-create-a-drive"}},[e._v("#")]),e._v(" Step 2: Select or Create a Drive")]),e._v(" "),t("p",[e._v('Once logged in, navigate to the drive where you want your project to be hosted. If you haven\'t created a drive yet, or if you want a new one specifically for this project, click the big red "New" button at the top left and create a new drive. Remember, the drive needs to be set to public for your dApp to be accessible to others.')]),e._v(" "),t("h3",{attrs:{id:"step-3-upload-your-project"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#step-3-upload-your-project"}},[e._v("#")]),e._v(" Step 3: Upload your project")]),e._v(" "),t("p",[e._v('With your drive selected, click the big red "New" button again, but this time, select "Upload Folder". Navigate to your project\'s root directory, or the built directory if required, and select it. This will upload the entire directory, maintaining your project\'s file structure.')]),e._v(" "),t("h3",{attrs:{id:"step-4-confirm-upload"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#step-4-confirm-upload"}},[e._v("#")]),e._v(" Step 4: Confirm Upload")]),e._v(" "),t("p",[e._v('You\'ll be given a chance to review the upload and the associated cost. If everything looks right, click "Confirm". Remember, uploading to Arweave isnt free, but the cost is usually quite small and the benefits of having your dApp hosted on the permaweb are significant.')]),e._v(" "),t("h3",{attrs:{id:"step-5-create-the-manifest"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#step-5-create-the-manifest"}},[e._v("#")]),e._v(" Step 5: Create the Manifest")]),e._v(" "),t("p",[e._v('While ArDrive displays your uploaded files as a traditional file structure, with files and folders inside other folders, thats not how they actually exist on Arweave. The manifest acts as a map to all the files your dApp needs to function. After you confirm your upload, navigate into your newly created folder by double clicking on it. Click the big red "New" button again and select "Create manifest". You\'ll be prompted to name the manifest and choose where to save it. Be sure to save it inside the folder you just created.')]),e._v(" "),t("h3",{attrs:{id:"step-6-get-the-data-tx-id"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#step-6-get-the-data-tx-id"}},[e._v("#")]),e._v(" Step 6: Get the Data TX ID")]),e._v(" "),t("p",[e._v('Once the manifest is created, click on it to expand its details. On the bottom right, there\'s a line labeled "Data TX ID". This is the unique identifier for your uploaded dApp on Arweave. Copy this value.')]),e._v(" "),t("h3",{attrs:{id:"step-7-view-and-share-your-dapp"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#step-7-view-and-share-your-dapp"}},[e._v("#")]),e._v(" Step 7: View and Share your dApp")]),e._v(" "),t("p",[e._v("Your dApp is now available on the permaweb forever! Append the Data TX ID you just copied to the end of an Arweave gateway URL, like "),t("code",[e._v("https://arweave.net/")]),e._v(" . It might take a few minutes for all of your files to finish propagating through the network, but once they do your dApp will be accessible to anyone, anywhere, at any time.")]),e._v(" "),t("h2",{attrs:{id:"updating-your-dapp"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#updating-your-dapp"}},[e._v("#")]),e._v(" Updating your dApp")]),e._v(" "),t("p",[e._v("Files uploaded to Arweave are permanent and immutable. They cannot be changed. However, the "),t("RouterLink",{attrs:{to:"/docs/arfs/overview.html"}},[e._v("Arweave File System (ArFS)")]),e._v(' protocol used (and created) by ArDrive lets you "replace" them with new versions while still being able to access the old ones. You can do this with entire dApps as well. The old files won\'t be displayed in the ArDrive web app unless you click on a file to view its history.')],1),e._v(" "),t("p",[e._v('Once you have made changes to your dApp, and built the static directory for it, you can upload the entire folder again to the same location where you uploaded the original. Follow all the same steps listed above for uploading your dApp. You will need to create a new manifest to correctly point to the updated files. Give it the same name as the old manifest in order to "replace" it. Creating the new manifest will generate a new TX ID used to view the updated dApp.')]),e._v(" "),t("p",[e._v("The old version of the dApp will always be available to anyone who has the correct TX ID")])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{325:function(e,t,a){"use strict";a.r(t);var o=a(10),r=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"deploying-your-dapp"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#deploying-your-dapp"}},[e._v("#")]),e._v(" Deploying your dApp")]),e._v(" "),t("h2",{attrs:{id:"overview"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),t("p",[e._v("This guide will outline the steps needed to deploy your dApp onto the Arweave blockchain using the ArDrive web app. It assumes you have already prepared your dApp to use hash routing and relative file paths, and built static files for any dApp in a language or framework that requires it (like React).")]),e._v(" "),t("h2",{attrs:{id:"deploying"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#deploying"}},[e._v("#")]),e._v(" Deploying")]),e._v(" "),t("h3",{attrs:{id:"step-1-log-into-ardrive"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#step-1-log-into-ardrive"}},[e._v("#")]),e._v(" Step 1: Log into ArDrive")]),e._v(" "),t("p",[e._v("Go to the "),t("a",{attrs:{href:"https://app.ardrive.io/#/sign-in",target:"_blank",rel:"noopener noreferrer"}},[e._v("ArDrive web app"),t("OutboundLink")],1),e._v(" and log in using the method of your choosing. If you don't already have an account, you will need to follow the instructions to set one up.")]),e._v(" "),t("h3",{attrs:{id:"step-2-select-or-create-a-drive"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#step-2-select-or-create-a-drive"}},[e._v("#")]),e._v(" Step 2: Select or Create a Drive")]),e._v(" "),t("p",[e._v('Once logged in, navigate to the drive where you want your project to be hosted. If you haven\'t created a drive yet, or if you want a new one specifically for this project, click the big red "New" button at the top left and create a new drive. Remember, the drive needs to be set to public for your dApp to be accessible to others.')]),e._v(" "),t("h3",{attrs:{id:"step-3-upload-your-project"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#step-3-upload-your-project"}},[e._v("#")]),e._v(" Step 3: Upload your project")]),e._v(" "),t("p",[e._v('With your drive selected, click the big red "New" button again, but this time, select "Upload Folder". Navigate to your project\'s root directory, or the built directory if required, and select it. This will upload the entire directory, maintaining your project\'s file structure.')]),e._v(" "),t("h3",{attrs:{id:"step-4-confirm-upload"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#step-4-confirm-upload"}},[e._v("#")]),e._v(" Step 4: Confirm Upload")]),e._v(" "),t("p",[e._v('You\'ll be given a chance to review the upload and the associated cost. If everything looks right, click "Confirm". Remember, uploading to Arweave isnt free, but the cost is usually quite small and the benefits of having your dApp hosted on the permaweb are significant.')]),e._v(" "),t("h3",{attrs:{id:"step-5-create-the-manifest"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#step-5-create-the-manifest"}},[e._v("#")]),e._v(" Step 5: Create the Manifest")]),e._v(" "),t("p",[e._v('While ArDrive displays your uploaded files as a traditional file structure, with files and folders inside other folders, thats not how they actually exist on Arweave. The manifest acts as a map to all the files your dApp needs to function. After you confirm your upload, navigate into your newly created folder by double clicking on it. Click the big red "New" button again and select "Create manifest". You\'ll be prompted to name the manifest and choose where to save it. Be sure to save it inside the folder you just created.')]),e._v(" "),t("h3",{attrs:{id:"step-6-get-the-data-tx-id"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#step-6-get-the-data-tx-id"}},[e._v("#")]),e._v(" Step 6: Get the Data TX ID")]),e._v(" "),t("p",[e._v('Once the manifest is created, click on it to expand its details. On the bottom right, there\'s a line labeled "Data TX ID". This is the unique identifier for your uploaded dApp on Arweave. Copy this value.')]),e._v(" "),t("h3",{attrs:{id:"step-7-view-and-share-your-dapp"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#step-7-view-and-share-your-dapp"}},[e._v("#")]),e._v(" Step 7: View and Share your dApp")]),e._v(" "),t("p",[e._v("Your dApp is now available on the permaweb forever! Append the Data TX ID you just copied to the end of an Arweave gateway URL, like "),t("code",[e._v("https://arweave.net/")]),e._v(" . It might take a few minutes for all of your files to finish propagating through the network, but once they do your dApp will be accessible to anyone, anywhere, at any time.")]),e._v(" "),t("h2",{attrs:{id:"updating-your-dapp"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#updating-your-dapp"}},[e._v("#")]),e._v(" Updating your dApp")]),e._v(" "),t("p",[e._v("Files uploaded to Arweave are permanent and immutable. They cannot be changed. However, the "),t("RouterLink",{attrs:{to:"/docs/arfs/overview.html"}},[e._v("Arweave File System (ArFS)")]),e._v(' protocol used (and created) by ArDrive lets you "replace" them with new versions while still being able to access the old ones. You can do this with entire dApps as well. The old files won\'t be displayed in the ArDrive web app unless you click on a file to view its history.')],1),e._v(" "),t("p",[e._v('Once you have made changes to your dApp, and built the static directory for it, you can upload the entire folder again to the same location where you uploaded the original. Follow all the same steps listed above for uploading your dApp. You will need to create a new manifest to correctly point to the updated files. Give it the same name as the old manifest in order to "replace" it. Creating the new manifest will generate a new TX ID used to view the updated dApp.')]),e._v(" "),t("p",[e._v("The old version of the dApp will always be available to anyone who has the correct TX ID")])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/33.9f9fe4ee.js b/assets/js/33.58d20ff8.js similarity index 95% rename from assets/js/33.9f9fe4ee.js rename to assets/js/33.58d20ff8.js index fb61a3e..c4a34f2 100644 --- a/assets/js/33.9f9fe4ee.js +++ b/assets/js/33.58d20ff8.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[33],{330:function(e,t,r){"use strict";r.r(t);var o=r(10),n=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"preparing-your-dapp"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#preparing-your-dapp"}},[e._v("#")]),e._v(" Preparing Your dApp")]),e._v(" "),t("p",[e._v("To make sure dApps work correctly on the Arweave blockchain, they need to be set up in a specific manner. This is because, unlike traditional web hosting, there are no centralized servers for browsers to request files from. Your dApp needs to be able to handle navigation inside the client's browser instead of relying on communication between the client and a server, and not rely on a server as a point of origin for file paths. This is done by ensuring the following:")]),e._v(" "),t("ul",[t("li",[e._v("Your dApp must use "),t("RouterLink",{attrs:{to:"/docs/misc/deploy/routing.html"}},[e._v("hash routing")])],1),e._v(" "),t("li",[e._v("All internal links in your dApp must use "),t("RouterLink",{attrs:{to:"/docs/misc/deploy/paths.html"}},[e._v("relative file paths")]),e._v(".")],1)]),e._v(" "),t("p",[e._v("Failure to properly implement either will result in your dApp not working the way it should once it is deployed onto Arweave.")])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[33],{328:function(e,t,r){"use strict";r.r(t);var o=r(10),n=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"preparing-your-dapp"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#preparing-your-dapp"}},[e._v("#")]),e._v(" Preparing Your dApp")]),e._v(" "),t("p",[e._v("To make sure dApps work correctly on the Arweave blockchain, they need to be set up in a specific manner. This is because, unlike traditional web hosting, there are no centralized servers for browsers to request files from. Your dApp needs to be able to handle navigation inside the client's browser instead of relying on communication between the client and a server, and not rely on a server as a point of origin for file paths. This is done by ensuring the following:")]),e._v(" "),t("ul",[t("li",[e._v("Your dApp must use "),t("RouterLink",{attrs:{to:"/docs/misc/deploy/routing.html"}},[e._v("hash routing")])],1),e._v(" "),t("li",[e._v("All internal links in your dApp must use "),t("RouterLink",{attrs:{to:"/docs/misc/deploy/paths.html"}},[e._v("relative file paths")]),e._v(".")],1)]),e._v(" "),t("p",[e._v("Failure to properly implement either will result in your dApp not working the way it should once it is deployed onto Arweave.")])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/35.99917f3f.js b/assets/js/35.c5fec53e.js similarity index 98% rename from assets/js/35.99917f3f.js rename to assets/js/35.c5fec53e.js index 28a3dd9..aea6217 100644 --- a/assets/js/35.99917f3f.js +++ b/assets/js/35.c5fec53e.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[35],{328:function(e,t,r){"use strict";r.r(t);var a=r(10),s=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"ethareum"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ethareum"}},[e._v("#")]),e._v(" EthAReum")]),e._v(" "),t("h2",{attrs:{id:"overview"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),t("p",[e._v("EthAReum is a new key derivation protocol that enables the generation of private keys for an Arweave wallet using a signature from an Ethereum wallet. This allows users to create an Arweave wallet directly through an Ethereum wallet provider like "),t("a",{attrs:{href:"https://metamask.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("MetaMask"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("These generated private keys provide a fully functional Arweave wallet, equipped to perform all standard operations, including holding AR tokens and "),t("RouterLink",{attrs:{to:"/docs/turbo/what-is-turbo.html"}},[e._v("Turbo Credits")]),e._v(", and uploading data to the Arweave network.")],1),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Recommended Browser")]),e._v(" "),t("p",[e._v("For optimal performance, it is recommended MetaMask users access ArDrive using the Chrome browser. While EthAReum functions correctly in most browsers, there are ongoing efforts to resolve some edge case compatibility issues in other environments.")])]),e._v(" "),t("h2",{attrs:{id:"password"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#password"}},[e._v("#")]),e._v(" Password")]),e._v(" "),t("p",[e._v("The EthAReum protocol incorporates a user-generated password in the process of deriving an Arweave wallet from an Ethereum wallet. This password provides an extra layer of security by contributing additional entropy to the wallet's derivation. It also serves as a critical verification step for wallet access.")]),e._v(" "),t("p",[e._v("For instance, when creating a new account with ArDrive, users are required to set a password for their wallet. This password is then used for subsequent logins and for encrypting private uploads. The password established during the wallet derivation process on ArDrive will be the same password used for future logins.")]),e._v(" "),t("p",[t("strong",[e._v("NOTE")]),e._v(": The password used during the derivation of private keys is permanent and "),t("em",[t("strong",[e._v("CAN NOT")])]),e._v(" be changed or recovered by an administrator (ArDrive is a decentralized platform and has no account administration). It is crucial to keep this password secure.")]),e._v(" "),t("h2",{attrs:{id:"public-address"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#public-address"}},[e._v("#")]),e._v(" Public Address")]),e._v(" "),t("p",[e._v("The Public address of the generated Arweave wallet is derived from its public key. The public address of the generated wallet will be different from the public address of the Ethereum wallet used to generate it.")]),e._v(" "),t("p",[e._v("The exact steps needed to obtain the public address of the generated wallet will differ depending on the user interface of the dApp you use for interacting with the protocol. With ArDrive, the information can be viewed at any time you are logged in to the app by clicking on the user profile icon at the top right of the screen.")]),e._v(" "),t("h2",{attrs:{id:"keyfile-and-seed-phrase"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#keyfile-and-seed-phrase"}},[e._v("#")]),e._v(" Keyfile and Seed Phrase")]),e._v(" "),t("p",[e._v("The primary method used in the Arweave ecosystem for accessing or importing a wallet is through the use of a keyfile, rather than a seed phrase like is commonplace in Ethereum wallet providers. Seed phrases are supported though, so you will be able to obtain a seed phrase for your generated Arweave wallet and use it to import the wallet into other dApps or wallet providers in the Arweave ecosystem. Just be aware that not every dApp in the ecosystem has an interface that can facilitate this.")]),e._v(" "),t("p",[e._v("A keyfile is a json file that contains a Json Web Key (JWK) which act as the private keys for a wallet. Always be sure to treat your keyfile with the same care as you would the private keys for an Ethereum wallet. Find out more about keyfiles from the "),t("a",{attrs:{href:"https://cookbook.arweave.dev/concepts/keyfiles-and-wallets.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("Arweave Cookbook"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("Similar to the public address of your generated wallet, the method used to access your new keyfile or seed phrase will differ based on the dApp you used to generate your wallet. With ArDrive, both are available for download at any time you are logged in to the app by clicking on the user profile icon at the top right of the screen.")]),e._v(" "),t("h2",{attrs:{id:"security"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#security"}},[e._v("#")]),e._v(" Security")]),e._v(" "),t("p",[e._v("EthAReum generates the private keys of an Arweave wallet using a signature from your Ethereum wallet, ensuring that control only extends in one direction. The EthAReum protocol does not access or control the Ethereum wallet used for generation, thereby safeguarding your Ethereum assets.")]),e._v(" "),t("p",[e._v("However, it's important to be vigilant as some malicious dApps or websites may disguise a high-risk authorization transaction as a simple signature request. Always ensure that you only provide signatures to reputable and trusted dApps like "),t("a",{attrs:{href:"https://app.ardrive.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("ArDrive"),t("OutboundLink")],1),e._v(".")])])}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[35],{331:function(e,t,r){"use strict";r.r(t);var a=r(10),s=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"ethareum"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ethareum"}},[e._v("#")]),e._v(" EthAReum")]),e._v(" "),t("h2",{attrs:{id:"overview"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),t("p",[e._v("EthAReum is a new key derivation protocol that enables the generation of private keys for an Arweave wallet using a signature from an Ethereum wallet. This allows users to create an Arweave wallet directly through an Ethereum wallet provider like "),t("a",{attrs:{href:"https://metamask.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("MetaMask"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("These generated private keys provide a fully functional Arweave wallet, equipped to perform all standard operations, including holding AR tokens and "),t("RouterLink",{attrs:{to:"/docs/turbo/what-is-turbo.html"}},[e._v("Turbo Credits")]),e._v(", and uploading data to the Arweave network.")],1),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Recommended Browser")]),e._v(" "),t("p",[e._v("For optimal performance, it is recommended MetaMask users access ArDrive using the Chrome browser. While EthAReum functions correctly in most browsers, there are ongoing efforts to resolve some edge case compatibility issues in other environments.")])]),e._v(" "),t("h2",{attrs:{id:"password"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#password"}},[e._v("#")]),e._v(" Password")]),e._v(" "),t("p",[e._v("The EthAReum protocol incorporates a user-generated password in the process of deriving an Arweave wallet from an Ethereum wallet. This password provides an extra layer of security by contributing additional entropy to the wallet's derivation. It also serves as a critical verification step for wallet access.")]),e._v(" "),t("p",[e._v("For instance, when creating a new account with ArDrive, users are required to set a password for their wallet. This password is then used for subsequent logins and for encrypting private uploads. The password established during the wallet derivation process on ArDrive will be the same password used for future logins.")]),e._v(" "),t("p",[t("strong",[e._v("NOTE")]),e._v(": The password used during the derivation of private keys is permanent and "),t("em",[t("strong",[e._v("CAN NOT")])]),e._v(" be changed or recovered by an administrator (ArDrive is a decentralized platform and has no account administration). It is crucial to keep this password secure.")]),e._v(" "),t("h2",{attrs:{id:"public-address"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#public-address"}},[e._v("#")]),e._v(" Public Address")]),e._v(" "),t("p",[e._v("The Public address of the generated Arweave wallet is derived from its public key. The public address of the generated wallet will be different from the public address of the Ethereum wallet used to generate it.")]),e._v(" "),t("p",[e._v("The exact steps needed to obtain the public address of the generated wallet will differ depending on the user interface of the dApp you use for interacting with the protocol. With ArDrive, the information can be viewed at any time you are logged in to the app by clicking on the user profile icon at the top right of the screen.")]),e._v(" "),t("h2",{attrs:{id:"keyfile-and-seed-phrase"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#keyfile-and-seed-phrase"}},[e._v("#")]),e._v(" Keyfile and Seed Phrase")]),e._v(" "),t("p",[e._v("The primary method used in the Arweave ecosystem for accessing or importing a wallet is through the use of a keyfile, rather than a seed phrase like is commonplace in Ethereum wallet providers. Seed phrases are supported though, so you will be able to obtain a seed phrase for your generated Arweave wallet and use it to import the wallet into other dApps or wallet providers in the Arweave ecosystem. Just be aware that not every dApp in the ecosystem has an interface that can facilitate this.")]),e._v(" "),t("p",[e._v("A keyfile is a json file that contains a Json Web Key (JWK) which act as the private keys for a wallet. Always be sure to treat your keyfile with the same care as you would the private keys for an Ethereum wallet. Find out more about keyfiles from the "),t("a",{attrs:{href:"https://cookbook.arweave.dev/concepts/keyfiles-and-wallets.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("Arweave Cookbook"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("Similar to the public address of your generated wallet, the method used to access your new keyfile or seed phrase will differ based on the dApp you used to generate your wallet. With ArDrive, both are available for download at any time you are logged in to the app by clicking on the user profile icon at the top right of the screen.")]),e._v(" "),t("h2",{attrs:{id:"security"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#security"}},[e._v("#")]),e._v(" Security")]),e._v(" "),t("p",[e._v("EthAReum generates the private keys of an Arweave wallet using a signature from your Ethereum wallet, ensuring that control only extends in one direction. The EthAReum protocol does not access or control the Ethereum wallet used for generation, thereby safeguarding your Ethereum assets.")]),e._v(" "),t("p",[e._v("However, it's important to be vigilant as some malicious dApps or websites may disguise a high-risk authorization transaction as a simple signature request. Always ensure that you only provide signatures to reputable and trusted dApps like "),t("a",{attrs:{href:"https://app.ardrive.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("ArDrive"),t("OutboundLink")],1),e._v(".")])])}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/36.2ee78b70.js b/assets/js/36.fef6255c.js similarity index 99% rename from assets/js/36.2ee78b70.js rename to assets/js/36.fef6255c.js index fcd40fb..48c1306 100644 --- a/assets/js/36.2ee78b70.js +++ b/assets/js/36.fef6255c.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[36],{332:function(e,t,a){"use strict";a.r(t);var r=a(10),s=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"how-to-save-a-website-permanently"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#how-to-save-a-website-permanently"}},[e._v("#")]),e._v(" How to Save a Website Permanently")]),e._v(" "),t("h2",{attrs:{id:"overview"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),t("p",[e._v("ArDrive offers the ability to save working copies of static websites permanently on "),t("a",{attrs:{href:"https://www.arweave.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Arweave"),t("OutboundLink")],1),e._v(". This means that websites made on WordPress, Wix, SquareSpace and other CMS platforms can now be archived for hundreds of years without the need to pay for ongoing data storage.")]),e._v(" "),t("p",[e._v("Resources like the "),t("a",{attrs:{href:"https://archive.org/web/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Wayback Machine"),t("OutboundLink")],1),e._v(" are useful to research the past life of old websites. But the Wayback Machine’s archives are not comprehensive and often only capture partial copies of historic sites. By leveraging the utility of Arweave manifests, ArDrive offers the ability to save full working copies of websites in an unchanging, permanent state without needing to code.")]),e._v(" "),t("p",[e._v("The process to make a ‘permasite’ takes 10 steps which are outlined below. Advanced users can accomplish similar results by using manifests within the "),t("RouterLink",{attrs:{to:"/docs/cli/intro.html"}},[e._v("ArDrive CLI")]),e._v(".")],1),e._v(" "),t("p",[e._v("You can view a permasite version of this information at "),t("a",{attrs:{href:"https://permasite.arweave.dev",target:"_blank",rel:"noopener noreferrer"}},[e._v("permasite.arweave.dev"),t("OutboundLink")],1)]),e._v(" "),t("h2",{attrs:{id:"_1-download-static-site-files"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_1-download-static-site-files"}},[e._v("#")]),e._v(" 1. Download Static Site Files")]),e._v(" "),t("p",[e._v("ArDrive allows you to preserve full working copies of the static content of existing websites but there are a few limitations to be aware of:")]),e._v(" "),t("ul",[t("li",[e._v("Permanent sites will not enable backend interaction with your website’s CMS,")]),e._v(" "),t("li",[e._v("nor allow you to make further changes to the content of your site,")]),e._v(" "),t("li",[e._v("nor support dynamic functionality like contact forms and eCommerce.")])]),e._v(" "),t("p",[e._v("To generate your static site files, we recommend:")]),e._v(" "),t("h3",{attrs:{id:"windows-users"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#windows-users"}},[e._v("#")]),e._v(" Windows Users")]),e._v(" "),t("p",[t("a",{attrs:{href:"https://www.cyotek.com/cyotek-webcopy",target:"_blank",rel:"noopener noreferrer"}},[e._v("WebCopy"),t("OutboundLink")],1),e._v(" and "),t("a",{attrs:{href:"https://www.httrack.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("HtTrack"),t("OutboundLink")],1),e._v(" enable Windows users to download static copies of entire websites.")]),e._v(" "),t("h3",{attrs:{id:"mac-users"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#mac-users"}},[e._v("#")]),e._v(" Mac Users")]),e._v(" "),t("p",[t("a",{attrs:{href:"https://apps.apple.com/us/app/offline-pages-pro/id391462107",target:"_blank",rel:"noopener noreferrer"}},[e._v("Offline Pages Pro"),t("OutboundLink")],1),e._v(" (Mac users only), which creates files that work well with this process. After saving your site with Offline Pages Pro, go to File > Export > Local Website to download the local static files."),t("br"),e._v(" "),t("a",{attrs:{href:"https://ricks-apps.com/osx/sitesucker/index.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("SiteSucker"),t("OutboundLink")],1),e._v(" is another option for Mac users.")]),e._v(" "),t("h3",{attrs:{id:"command-line-utility"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#command-line-utility"}},[e._v("#")]),e._v(" Command Line Utility")]),e._v(" "),t("p",[t("a",{attrs:{href:"https://www.gnu.org/software/wget/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Wget"),t("OutboundLink")],1),e._v(" is a free tool that helps capture static versions of websites. While Wget isn't a traditional static site generator, it's great for downloading whole websites for offline use. It offers a simple way to save your site's current look and feel as static files at no cost.")]),e._v(" "),t("h3",{attrs:{id:"wordpress"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#wordpress"}},[e._v("#")]),e._v(" WordPress")]),e._v(" "),t("p",[t("a",{attrs:{href:"https://wordpress.org/plugins/simply-static/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Simply Static"),t("OutboundLink")],1),e._v(" is a plugin that generates static files for WordPress websites. Some users note that Simply Static fails to properly associate CSS and JS files with your static site, but others have had success with this free WordPress plugin.")]),e._v(" "),t("h2",{attrs:{id:"_2-create-an-account-on-ardrive"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_2-create-an-account-on-ardrive"}},[e._v("#")]),e._v(" 2. Create an Account on ArDrive")]),e._v(" "),t("p",[e._v("Account creation is free as are uploads of small files (currently up to 500 KB). Remember that ArDrive empowers you to be in control of your data; no one else has your password but you. Therefore, it is very important that you safely record your password and seed phrase as they cannot be recovered later.")]),e._v(" "),t("h2",{attrs:{id:"_3-create-a-new-public-drive"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_3-create-a-new-public-drive"}},[e._v("#")]),e._v(" 3. Create a New Public Drive")]),e._v(" "),t("p",[e._v("Click on the red +New button and create a Drive. Name your Drive and set it as “Public”. ArDrive also offers “Private” file storage; however, permanent websites must be public in order to maintain functionality.")]),e._v(" "),t("h2",{attrs:{id:"_4-top-up"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_4-top-up"}},[e._v("#")]),e._v(" 4. Top Up")]),e._v(" "),t("p",[e._v("To pay for permanent storage on the Arweave network you must either purchase ArDrive Turbo credits with a credit card or (or the advanced option) ensure your wallet has $AR, the native token of the Arweave ecosystem. Most websites will cost less than $1 to save permanently. "),t("a",{attrs:{href:"https://ardrive.io/pricing/",target:"_blank",rel:"noopener noreferrer"}},[e._v("See current prices"),t("OutboundLink")],1)]),e._v(" "),t("h2",{attrs:{id:"_5-upload-static-files"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_5-upload-static-files"}},[e._v("#")]),e._v(" 5. Upload Static Files")]),e._v(" "),t("p",[e._v("Upload the static files to your new Public Drive. Offline Pages Pro will generate an index.html file that is "),t("em",[e._v("separate")]),e._v(" from a large folder of assets (images, css, fonts, etc). Simply Static will add the index.html file to the rest of your assets. Either way, upload all the files you receive from your static site generator to your new Public Drive.")]),e._v(" "),t("h2",{attrs:{id:"_6-wait"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_6-wait"}},[e._v("#")]),e._v(" 6. Wait")]),e._v(" "),t("p",[e._v("Permanence takes patience. Once static files have been uploaded, they need to be sent to the Arweave network before being assembled together. This process can take as little as 5 seconds (when using Turbo credits) or up to 30 minutes or more (when using $AR). Make sure to keep your browser tab open and do not refresh your browser while you wait.")]),e._v(" "),t("p",[e._v("To check on the status of your files, you can click the refresh icon in the top right of ArDrive. You’ll know your file is ready when the light on the icon turns from yellow to green. (Pro Tip: some files uploaded with Turbo are ready before they are green.)")]),e._v(" "),t("h2",{attrs:{id:"_7-create-a-manifest"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_7-create-a-manifest"}},[e._v("#")]),e._v(" 7. Create a Manifest")]),e._v(" "),t("p",[t("a",{attrs:{href:"https://ardrive.io/manifests/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Manifests"),t("OutboundLink")],1),e._v(" are special "),t("code",[e._v(".json")]),e._v(" files that instruct Arweave Gateways to map file data associated with specific, unique transaction IDs to customized, hosted paths relative to that of the manifest file itself. In other words, they are the secret sauce that brings a permasite together.")]),e._v(" "),t("p",[e._v("Click on the red +New button and select Advanced > New Manifest. Select the location for your manifest, ensuring it is in the same place as your index.html file.")]),e._v(" "),t("p",[e._v("Give your Manifest a name like “permasite”, it will be the main way you access your permanent website from ArDrive.")]),e._v(" "),t("h2",{attrs:{id:"_8-wait-again"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_8-wait-again"}},[e._v("#")]),e._v(" 8. Wait Again")]),e._v(" "),t("p",[e._v("Now the manifest needs to be sent to the Arweave network. Again, this process can take just a few seconds or up to 30 minutes or more.")]),e._v(" "),t("p",[e._v("After a bit, you can refresh your Drive by clicking on the icon in the upper right – and see if your manifest icon turns from yellow to green.")]),e._v(" "),t("h2",{attrs:{id:"_9-preview-the-manifest"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_9-preview-the-manifest"}},[e._v("#")]),e._v(" 9. Preview the Manifest")]),e._v(" "),t("p",[e._v("Got a green light? You’re ready to go. Click on your manifest file and you will see a panel of options appear on the right side of your screen. Click on the Preview icon in the top right and it will open a new tab with your permasite.")]),e._v(" "),t("p",[e._v("If a website appears with a long, random-looking URL in the browser bar, then congrats, you made a permasite!")]),e._v(" "),t("p",[e._v("Try clicking around and make sure all your pages are preserved. If they are not it could be a limitation of your static site generator or an issue with the manifest (see Notes below).")]),e._v(" "),t("h2",{attrs:{id:"_10-add-a-redirect-or-domain-masking"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_10-add-a-redirect-or-domain-masking"}},[e._v("#")]),e._v(" 10. Add a Redirect or Domain Masking")]),e._v(" "),t("p",[e._v("You’ll notice that your permasite has a long, random-looking URL generated by Arweave. These long URLs are designed to remain for decades, but they also are not very memorable.")]),e._v(" "),t("p",[e._v("Try redirecting another domain to your permasite, or mask your permasite domain with a domain of your choosing. You can also acquire an "),t("a",{attrs:{href:"https://ar.io/docs/arns/",target:"_blank",rel:"noopener noreferrer"}},[e._v("ArNS name"),t("OutboundLink")],1),e._v(" that enables you to create a custom, permanent name for your permasite.")]),e._v(" "),t("h2",{attrs:{id:"notes"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#notes"}},[e._v("#")]),e._v(" Notes")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("There’s no delete button with Arweave. Once your permasite is up, it’s up forever. Make sure your content is something you want future humanity to have.")])]),e._v(" "),t("li",[t("p",[e._v("Only static sites can become permasites through the ArDrive web app. Advanced functionality is available for developers who use the "),t("a",{attrs:{href:"https://app.ardrive.io",target:"_blank",rel:"noopener noreferrer"}},[e._v("ArDrive CLI"),t("OutboundLink")],1),e._v(".")])]),e._v(" "),t("li",[t("p",[e._v("Links to content on external websites will not be permanent (unless they are also permasites) and if that external content becomes inaccessible or moves, you will not be able to update the links within your permasite.")])]),e._v(" "),t("li",[t("p",[e._v("Non-English characters in the URLs of your permasite can be problematic for ArDrive manifests, but non-English characters should work well on the permasite itself.")])])]),e._v(" "),t("h2",{attrs:{id:"other-use-cases"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#other-use-cases"}},[e._v("#")]),e._v(" Other Use Cases")]),e._v(" "),t("p",[e._v("Permasites can be used to archive web content before it disappears from the internet. Or they can be used to create working copies of websites before it a particular site is replaced by new versions.")]),e._v(" "),t("p",[e._v("Manifests can also be used to make reliable perma-backups. Many web hosts offer good daily backups and some offer reliable offsite backups as well. Permasites enable you to have decentralized, highly-redundant backups of your website’s content for a very low cost.")]),e._v(" "),t("h2",{attrs:{id:"example"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#example"}},[e._v("#")]),e._v(" Example")]),e._v(" "),t("p",[e._v("You can view a permasite version of this information at "),t("a",{attrs:{href:"https://permasite.arweave.dev",target:"_blank",rel:"noopener noreferrer"}},[e._v("permasite.arweave.dev"),t("OutboundLink")],1)])])}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[36],{330:function(e,t,a){"use strict";a.r(t);var r=a(10),s=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"how-to-save-a-website-permanently"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#how-to-save-a-website-permanently"}},[e._v("#")]),e._v(" How to Save a Website Permanently")]),e._v(" "),t("h2",{attrs:{id:"overview"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),t("p",[e._v("ArDrive offers the ability to save working copies of static websites permanently on "),t("a",{attrs:{href:"https://www.arweave.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Arweave"),t("OutboundLink")],1),e._v(". This means that websites made on WordPress, Wix, SquareSpace and other CMS platforms can now be archived for hundreds of years without the need to pay for ongoing data storage.")]),e._v(" "),t("p",[e._v("Resources like the "),t("a",{attrs:{href:"https://archive.org/web/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Wayback Machine"),t("OutboundLink")],1),e._v(" are useful to research the past life of old websites. But the Wayback Machine’s archives are not comprehensive and often only capture partial copies of historic sites. By leveraging the utility of Arweave manifests, ArDrive offers the ability to save full working copies of websites in an unchanging, permanent state without needing to code.")]),e._v(" "),t("p",[e._v("The process to make a ‘permasite’ takes 10 steps which are outlined below. Advanced users can accomplish similar results by using manifests within the "),t("RouterLink",{attrs:{to:"/docs/cli/intro.html"}},[e._v("ArDrive CLI")]),e._v(".")],1),e._v(" "),t("p",[e._v("You can view a permasite version of this information at "),t("a",{attrs:{href:"https://permasite.arweave.dev",target:"_blank",rel:"noopener noreferrer"}},[e._v("permasite.arweave.dev"),t("OutboundLink")],1)]),e._v(" "),t("h2",{attrs:{id:"_1-download-static-site-files"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_1-download-static-site-files"}},[e._v("#")]),e._v(" 1. Download Static Site Files")]),e._v(" "),t("p",[e._v("ArDrive allows you to preserve full working copies of the static content of existing websites but there are a few limitations to be aware of:")]),e._v(" "),t("ul",[t("li",[e._v("Permanent sites will not enable backend interaction with your website’s CMS,")]),e._v(" "),t("li",[e._v("nor allow you to make further changes to the content of your site,")]),e._v(" "),t("li",[e._v("nor support dynamic functionality like contact forms and eCommerce.")])]),e._v(" "),t("p",[e._v("To generate your static site files, we recommend:")]),e._v(" "),t("h3",{attrs:{id:"windows-users"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#windows-users"}},[e._v("#")]),e._v(" Windows Users")]),e._v(" "),t("p",[t("a",{attrs:{href:"https://www.cyotek.com/cyotek-webcopy",target:"_blank",rel:"noopener noreferrer"}},[e._v("WebCopy"),t("OutboundLink")],1),e._v(" and "),t("a",{attrs:{href:"https://www.httrack.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("HtTrack"),t("OutboundLink")],1),e._v(" enable Windows users to download static copies of entire websites.")]),e._v(" "),t("h3",{attrs:{id:"mac-users"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#mac-users"}},[e._v("#")]),e._v(" Mac Users")]),e._v(" "),t("p",[t("a",{attrs:{href:"https://apps.apple.com/us/app/offline-pages-pro/id391462107",target:"_blank",rel:"noopener noreferrer"}},[e._v("Offline Pages Pro"),t("OutboundLink")],1),e._v(" (Mac users only), which creates files that work well with this process. After saving your site with Offline Pages Pro, go to File > Export > Local Website to download the local static files."),t("br"),e._v(" "),t("a",{attrs:{href:"https://ricks-apps.com/osx/sitesucker/index.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("SiteSucker"),t("OutboundLink")],1),e._v(" is another option for Mac users.")]),e._v(" "),t("h3",{attrs:{id:"command-line-utility"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#command-line-utility"}},[e._v("#")]),e._v(" Command Line Utility")]),e._v(" "),t("p",[t("a",{attrs:{href:"https://www.gnu.org/software/wget/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Wget"),t("OutboundLink")],1),e._v(" is a free tool that helps capture static versions of websites. While Wget isn't a traditional static site generator, it's great for downloading whole websites for offline use. It offers a simple way to save your site's current look and feel as static files at no cost.")]),e._v(" "),t("h3",{attrs:{id:"wordpress"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#wordpress"}},[e._v("#")]),e._v(" WordPress")]),e._v(" "),t("p",[t("a",{attrs:{href:"https://wordpress.org/plugins/simply-static/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Simply Static"),t("OutboundLink")],1),e._v(" is a plugin that generates static files for WordPress websites. Some users note that Simply Static fails to properly associate CSS and JS files with your static site, but others have had success with this free WordPress plugin.")]),e._v(" "),t("h2",{attrs:{id:"_2-create-an-account-on-ardrive"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_2-create-an-account-on-ardrive"}},[e._v("#")]),e._v(" 2. Create an Account on ArDrive")]),e._v(" "),t("p",[e._v("Account creation is free as are uploads of small files (currently up to 500 KB). Remember that ArDrive empowers you to be in control of your data; no one else has your password but you. Therefore, it is very important that you safely record your password and seed phrase as they cannot be recovered later.")]),e._v(" "),t("h2",{attrs:{id:"_3-create-a-new-public-drive"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_3-create-a-new-public-drive"}},[e._v("#")]),e._v(" 3. Create a New Public Drive")]),e._v(" "),t("p",[e._v("Click on the red +New button and create a Drive. Name your Drive and set it as “Public”. ArDrive also offers “Private” file storage; however, permanent websites must be public in order to maintain functionality.")]),e._v(" "),t("h2",{attrs:{id:"_4-top-up"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_4-top-up"}},[e._v("#")]),e._v(" 4. Top Up")]),e._v(" "),t("p",[e._v("To pay for permanent storage on the Arweave network you must either purchase ArDrive Turbo credits with a credit card or (or the advanced option) ensure your wallet has $AR, the native token of the Arweave ecosystem. Most websites will cost less than $1 to save permanently. "),t("a",{attrs:{href:"https://ardrive.io/pricing/",target:"_blank",rel:"noopener noreferrer"}},[e._v("See current prices"),t("OutboundLink")],1)]),e._v(" "),t("h2",{attrs:{id:"_5-upload-static-files"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_5-upload-static-files"}},[e._v("#")]),e._v(" 5. Upload Static Files")]),e._v(" "),t("p",[e._v("Upload the static files to your new Public Drive. Offline Pages Pro will generate an index.html file that is "),t("em",[e._v("separate")]),e._v(" from a large folder of assets (images, css, fonts, etc). Simply Static will add the index.html file to the rest of your assets. Either way, upload all the files you receive from your static site generator to your new Public Drive.")]),e._v(" "),t("h2",{attrs:{id:"_6-wait"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_6-wait"}},[e._v("#")]),e._v(" 6. Wait")]),e._v(" "),t("p",[e._v("Permanence takes patience. Once static files have been uploaded, they need to be sent to the Arweave network before being assembled together. This process can take as little as 5 seconds (when using Turbo credits) or up to 30 minutes or more (when using $AR). Make sure to keep your browser tab open and do not refresh your browser while you wait.")]),e._v(" "),t("p",[e._v("To check on the status of your files, you can click the refresh icon in the top right of ArDrive. You’ll know your file is ready when the light on the icon turns from yellow to green. (Pro Tip: some files uploaded with Turbo are ready before they are green.)")]),e._v(" "),t("h2",{attrs:{id:"_7-create-a-manifest"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_7-create-a-manifest"}},[e._v("#")]),e._v(" 7. Create a Manifest")]),e._v(" "),t("p",[t("a",{attrs:{href:"https://ardrive.io/manifests/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Manifests"),t("OutboundLink")],1),e._v(" are special "),t("code",[e._v(".json")]),e._v(" files that instruct Arweave Gateways to map file data associated with specific, unique transaction IDs to customized, hosted paths relative to that of the manifest file itself. In other words, they are the secret sauce that brings a permasite together.")]),e._v(" "),t("p",[e._v("Click on the red +New button and select Advanced > New Manifest. Select the location for your manifest, ensuring it is in the same place as your index.html file.")]),e._v(" "),t("p",[e._v("Give your Manifest a name like “permasite”, it will be the main way you access your permanent website from ArDrive.")]),e._v(" "),t("h2",{attrs:{id:"_8-wait-again"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_8-wait-again"}},[e._v("#")]),e._v(" 8. Wait Again")]),e._v(" "),t("p",[e._v("Now the manifest needs to be sent to the Arweave network. Again, this process can take just a few seconds or up to 30 minutes or more.")]),e._v(" "),t("p",[e._v("After a bit, you can refresh your Drive by clicking on the icon in the upper right – and see if your manifest icon turns from yellow to green.")]),e._v(" "),t("h2",{attrs:{id:"_9-preview-the-manifest"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_9-preview-the-manifest"}},[e._v("#")]),e._v(" 9. Preview the Manifest")]),e._v(" "),t("p",[e._v("Got a green light? You’re ready to go. Click on your manifest file and you will see a panel of options appear on the right side of your screen. Click on the Preview icon in the top right and it will open a new tab with your permasite.")]),e._v(" "),t("p",[e._v("If a website appears with a long, random-looking URL in the browser bar, then congrats, you made a permasite!")]),e._v(" "),t("p",[e._v("Try clicking around and make sure all your pages are preserved. If they are not it could be a limitation of your static site generator or an issue with the manifest (see Notes below).")]),e._v(" "),t("h2",{attrs:{id:"_10-add-a-redirect-or-domain-masking"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_10-add-a-redirect-or-domain-masking"}},[e._v("#")]),e._v(" 10. Add a Redirect or Domain Masking")]),e._v(" "),t("p",[e._v("You’ll notice that your permasite has a long, random-looking URL generated by Arweave. These long URLs are designed to remain for decades, but they also are not very memorable.")]),e._v(" "),t("p",[e._v("Try redirecting another domain to your permasite, or mask your permasite domain with a domain of your choosing. You can also acquire an "),t("a",{attrs:{href:"https://ar.io/docs/arns/",target:"_blank",rel:"noopener noreferrer"}},[e._v("ArNS name"),t("OutboundLink")],1),e._v(" that enables you to create a custom, permanent name for your permasite.")]),e._v(" "),t("h2",{attrs:{id:"notes"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#notes"}},[e._v("#")]),e._v(" Notes")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("There’s no delete button with Arweave. Once your permasite is up, it’s up forever. Make sure your content is something you want future humanity to have.")])]),e._v(" "),t("li",[t("p",[e._v("Only static sites can become permasites through the ArDrive web app. Advanced functionality is available for developers who use the "),t("a",{attrs:{href:"https://app.ardrive.io",target:"_blank",rel:"noopener noreferrer"}},[e._v("ArDrive CLI"),t("OutboundLink")],1),e._v(".")])]),e._v(" "),t("li",[t("p",[e._v("Links to content on external websites will not be permanent (unless they are also permasites) and if that external content becomes inaccessible or moves, you will not be able to update the links within your permasite.")])]),e._v(" "),t("li",[t("p",[e._v("Non-English characters in the URLs of your permasite can be problematic for ArDrive manifests, but non-English characters should work well on the permasite itself.")])])]),e._v(" "),t("h2",{attrs:{id:"other-use-cases"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#other-use-cases"}},[e._v("#")]),e._v(" Other Use Cases")]),e._v(" "),t("p",[e._v("Permasites can be used to archive web content before it disappears from the internet. Or they can be used to create working copies of websites before it a particular site is replaced by new versions.")]),e._v(" "),t("p",[e._v("Manifests can also be used to make reliable perma-backups. Many web hosts offer good daily backups and some offer reliable offsite backups as well. Permasites enable you to have decentralized, highly-redundant backups of your website’s content for a very low cost.")]),e._v(" "),t("h2",{attrs:{id:"example"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#example"}},[e._v("#")]),e._v(" Example")]),e._v(" "),t("p",[e._v("You can view a permasite version of this information at "),t("a",{attrs:{href:"https://permasite.arweave.dev",target:"_blank",rel:"noopener noreferrer"}},[e._v("permasite.arweave.dev"),t("OutboundLink")],1)])])}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/37.e4f0c338.js b/assets/js/37.e5209429.js similarity index 99% rename from assets/js/37.e4f0c338.js rename to assets/js/37.e5209429.js index 41e083f..b8c465a 100644 --- a/assets/js/37.e4f0c338.js +++ b/assets/js/37.e5209429.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[37],{331:function(e,t,r){"use strict";r.r(t);var a=r(10),s=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"ardrive-price-calculator"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ardrive-price-calculator"}},[e._v("#")]),e._v(" ArDrive Price Calculator")]),e._v(" "),t("h2",{attrs:{id:"overview"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),t("p",[e._v("The "),t("a",{attrs:{href:"https://ardrive.io/pricing/",target:"_blank",rel:"noopener noreferrer"}},[e._v("ArDrive Price Calculator website"),t("OutboundLink")],1),e._v(" is open source, and its code can be viewed "),t("a",{attrs:{href:"https://github.com/ardriveapp/price-calculator",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),t("OutboundLink")],1)]),e._v(" "),t("p",[e._v("This website is intended to calculate the cost, in a wide variety of denominations and cryptocurrencies, of uploading data to Arweave. You can spin up your own version by cloning the code from Github and following these steps.")]),e._v(" "),t("h2",{attrs:{id:"developer-setup"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#developer-setup"}},[e._v("#")]),e._v(" Developer Setup")]),e._v(" "),t("p",[e._v("Follow these steps to get the developer environment up and running:")]),e._v(" "),t("h3",{attrs:{id:"install-yarn-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#install-yarn-2"}},[e._v("#")]),e._v(" Install Yarn 2")]),e._v(" "),t("p",[e._v("The ArDrive Price Calculator uses Yarn 2, so install the latest version with the "),t("a",{attrs:{href:"https://yarnpkg.com/getting-started/install",target:"_blank",rel:"noopener noreferrer"}},[e._v("yarn installation instructions"),t("OutboundLink")],1),e._v(". In most cases:")]),e._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Brew:")]),e._v("\nbrew "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Or with NPM:")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("npm")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-g")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v("\n")])])]),t("p",[e._v("We also use husky to manage the git commit hooks that help to improve the quality of our commits. Without installing husky, you risk committing non-compliant code to the repository.")]),e._v(" "),t("p",[e._v("Using husky triggers two pre-commit hooks. The first will run "),t("code",[e._v("lint-staged")]),e._v(" on each staged file, which includes running prettier to format, eslint for linting, and also tsc-files for quickly checking that TypeScript can compile the code. The second hook will test the codebase prior to committing, ensuring that all tests must pass.")]),e._v(" "),t("p",[e._v("To enable hooks locally, you will need to run:")]),e._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" husky "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v("\n")])])]),t("h3",{attrs:{id:"nvm"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#nvm"}},[e._v("#")]),e._v(" NVM")]),e._v(" "),t("p",[e._v("This repository uses NVM and an "),t("code",[e._v(".nvmrc")]),e._v(" file to lock the Node version to the current version used by "),t("code",[e._v("ardrive-core-js")]),e._v(".")]),e._v(" "),t("p",[e._v("Note for Windows: "),t("strong",[e._v("We recommend using WSL")]),e._v(" for setting up NVM on Windows using the "),t("a",{attrs:{href:"https://code.visualstudio.com/docs/remote/wsl",target:"_blank",rel:"noopener noreferrer"}},[e._v("instructions described here"),t("OutboundLink")],1)]),e._v(" "),t("p",[e._v("Follow these steps to get NVM up and running on your system:")]),e._v(" "),t("ol",[t("li",[e._v("Install NVM using "),t("a",{attrs:{href:"https://github.com/nvm-sh/nvm#installing-and-updating",target:"_blank",rel:"noopener noreferrer"}},[e._v("these installation instructions"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("li",[e._v("Navigate to this project's root directory")]),e._v(" "),t("li",[e._v("Ensure that the correct version of Node is installed by performing: "),t("code",[e._v("nvm install")])]),e._v(" "),t("li",[t("strong",[e._v("Every time you start a new terminal session or switch to this project from another NPM project")]),e._v(", you should set the correct version of Node by running: "),t("code",[e._v("nvm use")])])]),e._v(" "),t("h3",{attrs:{id:"recommended-visual-studio-code-extensions"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#recommended-visual-studio-code-extensions"}},[e._v("#")]),e._v(" Recommended Visual Studio Code extensions")]),e._v(" "),t("p",[e._v("To ensure your environment is compatible, we also recommend the following VSCode extensions:")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint",target:"_blank",rel:"noopener noreferrer"}},[e._v("ES-Lint"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig",target:"_blank",rel:"noopener noreferrer"}},[e._v("Editor-Config"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode",target:"_blank",rel:"noopener noreferrer"}},[e._v("Prettier"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://marketplace.visualstudio.com/items?itemName=arcanis.vscode-zipfs",target:"_blank",rel:"noopener noreferrer"}},[e._v("ZipFS"),t("OutboundLink")],1)])]),e._v(" "),t("h2",{attrs:{id:"available-scripts"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#available-scripts"}},[e._v("#")]),e._v(" Available Scripts")]),e._v(" "),t("h3",{attrs:{id:"yarn-start"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#yarn-start"}},[e._v("#")]),e._v(" yarn start")]),e._v(" "),t("p",[e._v("Runs the app in the development mode.\nOpen http://localhost:8080 to view it in the browser.")]),e._v(" "),t("p",[e._v("The page will reload if you make edits.\nYou will also see any lint errors in the console.")]),e._v(" "),t("h3",{attrs:{id:"yarn-build"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#yarn-build"}},[e._v("#")]),e._v(" yarn build")]),e._v(" "),t("p",[e._v("Builds a static copy of your site to the "),t("code",[e._v("build/")]),e._v(" folder.\nYour app is ready to be deployed!")]),e._v(" "),t("h3",{attrs:{id:"yarn-test"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#yarn-test"}},[e._v("#")]),e._v(" yarn test")]),e._v(" "),t("p",[e._v("Launches the application test runner.\nRun with the "),t("code",[e._v("--watch")]),e._v(" flag ("),t("code",[e._v("yarn test -- --watch")]),e._v(") to run in interactive watch mode.")]),e._v(" "),t("h3",{attrs:{id:"yarn-run-prod"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#yarn-run-prod"}},[e._v("#")]),e._v(" yarn run:prod")]),e._v(" "),t("p",[e._v("Builds a fresh snowpack production build to the "),t("code",[e._v("build/")]),e._v(" folder\nThen launches that copy with "),t("code",[e._v("http-server-spa")]),e._v(" for local testing\nThe build will be available for preview at: "),t("a",{attrs:{href:"http://localhost:8080",target:"_blank",rel:"noopener noreferrer"}},[e._v("http://localhost:8080"),t("OutboundLink")],1)])])}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[37],{334:function(e,t,r){"use strict";r.r(t);var a=r(10),s=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"ardrive-price-calculator"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ardrive-price-calculator"}},[e._v("#")]),e._v(" ArDrive Price Calculator")]),e._v(" "),t("h2",{attrs:{id:"overview"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),t("p",[e._v("The "),t("a",{attrs:{href:"https://ardrive.io/pricing/",target:"_blank",rel:"noopener noreferrer"}},[e._v("ArDrive Price Calculator website"),t("OutboundLink")],1),e._v(" is open source, and its code can be viewed "),t("a",{attrs:{href:"https://github.com/ardriveapp/price-calculator",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),t("OutboundLink")],1)]),e._v(" "),t("p",[e._v("This website is intended to calculate the cost, in a wide variety of denominations and cryptocurrencies, of uploading data to Arweave. You can spin up your own version by cloning the code from Github and following these steps.")]),e._v(" "),t("h2",{attrs:{id:"developer-setup"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#developer-setup"}},[e._v("#")]),e._v(" Developer Setup")]),e._v(" "),t("p",[e._v("Follow these steps to get the developer environment up and running:")]),e._v(" "),t("h3",{attrs:{id:"install-yarn-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#install-yarn-2"}},[e._v("#")]),e._v(" Install Yarn 2")]),e._v(" "),t("p",[e._v("The ArDrive Price Calculator uses Yarn 2, so install the latest version with the "),t("a",{attrs:{href:"https://yarnpkg.com/getting-started/install",target:"_blank",rel:"noopener noreferrer"}},[e._v("yarn installation instructions"),t("OutboundLink")],1),e._v(". In most cases:")]),e._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Brew:")]),e._v("\nbrew "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Or with NPM:")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("npm")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-g")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v("\n")])])]),t("p",[e._v("We also use husky to manage the git commit hooks that help to improve the quality of our commits. Without installing husky, you risk committing non-compliant code to the repository.")]),e._v(" "),t("p",[e._v("Using husky triggers two pre-commit hooks. The first will run "),t("code",[e._v("lint-staged")]),e._v(" on each staged file, which includes running prettier to format, eslint for linting, and also tsc-files for quickly checking that TypeScript can compile the code. The second hook will test the codebase prior to committing, ensuring that all tests must pass.")]),e._v(" "),t("p",[e._v("To enable hooks locally, you will need to run:")]),e._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" husky "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v("\n")])])]),t("h3",{attrs:{id:"nvm"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#nvm"}},[e._v("#")]),e._v(" NVM")]),e._v(" "),t("p",[e._v("This repository uses NVM and an "),t("code",[e._v(".nvmrc")]),e._v(" file to lock the Node version to the current version used by "),t("code",[e._v("ardrive-core-js")]),e._v(".")]),e._v(" "),t("p",[e._v("Note for Windows: "),t("strong",[e._v("We recommend using WSL")]),e._v(" for setting up NVM on Windows using the "),t("a",{attrs:{href:"https://code.visualstudio.com/docs/remote/wsl",target:"_blank",rel:"noopener noreferrer"}},[e._v("instructions described here"),t("OutboundLink")],1)]),e._v(" "),t("p",[e._v("Follow these steps to get NVM up and running on your system:")]),e._v(" "),t("ol",[t("li",[e._v("Install NVM using "),t("a",{attrs:{href:"https://github.com/nvm-sh/nvm#installing-and-updating",target:"_blank",rel:"noopener noreferrer"}},[e._v("these installation instructions"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("li",[e._v("Navigate to this project's root directory")]),e._v(" "),t("li",[e._v("Ensure that the correct version of Node is installed by performing: "),t("code",[e._v("nvm install")])]),e._v(" "),t("li",[t("strong",[e._v("Every time you start a new terminal session or switch to this project from another NPM project")]),e._v(", you should set the correct version of Node by running: "),t("code",[e._v("nvm use")])])]),e._v(" "),t("h3",{attrs:{id:"recommended-visual-studio-code-extensions"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#recommended-visual-studio-code-extensions"}},[e._v("#")]),e._v(" Recommended Visual Studio Code extensions")]),e._v(" "),t("p",[e._v("To ensure your environment is compatible, we also recommend the following VSCode extensions:")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint",target:"_blank",rel:"noopener noreferrer"}},[e._v("ES-Lint"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig",target:"_blank",rel:"noopener noreferrer"}},[e._v("Editor-Config"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode",target:"_blank",rel:"noopener noreferrer"}},[e._v("Prettier"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://marketplace.visualstudio.com/items?itemName=arcanis.vscode-zipfs",target:"_blank",rel:"noopener noreferrer"}},[e._v("ZipFS"),t("OutboundLink")],1)])]),e._v(" "),t("h2",{attrs:{id:"available-scripts"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#available-scripts"}},[e._v("#")]),e._v(" Available Scripts")]),e._v(" "),t("h3",{attrs:{id:"yarn-start"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#yarn-start"}},[e._v("#")]),e._v(" yarn start")]),e._v(" "),t("p",[e._v("Runs the app in the development mode.\nOpen http://localhost:8080 to view it in the browser.")]),e._v(" "),t("p",[e._v("The page will reload if you make edits.\nYou will also see any lint errors in the console.")]),e._v(" "),t("h3",{attrs:{id:"yarn-build"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#yarn-build"}},[e._v("#")]),e._v(" yarn build")]),e._v(" "),t("p",[e._v("Builds a static copy of your site to the "),t("code",[e._v("build/")]),e._v(" folder.\nYour app is ready to be deployed!")]),e._v(" "),t("h3",{attrs:{id:"yarn-test"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#yarn-test"}},[e._v("#")]),e._v(" yarn test")]),e._v(" "),t("p",[e._v("Launches the application test runner.\nRun with the "),t("code",[e._v("--watch")]),e._v(" flag ("),t("code",[e._v("yarn test -- --watch")]),e._v(") to run in interactive watch mode.")]),e._v(" "),t("h3",{attrs:{id:"yarn-run-prod"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#yarn-run-prod"}},[e._v("#")]),e._v(" yarn run:prod")]),e._v(" "),t("p",[e._v("Builds a fresh snowpack production build to the "),t("code",[e._v("build/")]),e._v(" folder\nThen launches that copy with "),t("code",[e._v("http-server-spa")]),e._v(" for local testing\nThe build will be available for preview at: "),t("a",{attrs:{href:"http://localhost:8080",target:"_blank",rel:"noopener noreferrer"}},[e._v("http://localhost:8080"),t("OutboundLink")],1)])])}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/38.280c683a.js b/assets/js/38.e3fed557.js similarity index 88% rename from assets/js/38.280c683a.js rename to assets/js/38.e3fed557.js index e0a0e3f..ddb6df7 100644 --- a/assets/js/38.280c683a.js +++ b/assets/js/38.e3fed557.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[38],{333:function(t,e,s){"use strict";s.r(e);var i=s(10),a=Object(i.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"placeholder"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#placeholder"}},[this._v("#")]),this._v(" placeholder")]),this._v(" "),t("p",[this._v("Exercitation proident duis qui est veniam duis ullamco proident et veniam.")])])}),[],!1,null,null,null);e.default=a.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[38],{332:function(t,e,s){"use strict";s.r(e);var i=s(10),a=Object(i.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"placeholder"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#placeholder"}},[this._v("#")]),this._v(" placeholder")]),this._v(" "),t("p",[this._v("Exercitation proident duis qui est veniam duis ullamco proident et veniam.")])])}),[],!1,null,null,null);e.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/39.99eb1c7e.js b/assets/js/39.ac0f94d7.js similarity index 99% rename from assets/js/39.99eb1c7e.js rename to assets/js/39.ac0f94d7.js index 0ddce1c..e954487 100644 --- a/assets/js/39.99eb1c7e.js +++ b/assets/js/39.ac0f94d7.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[39],{334:function(n,a,e){"use strict";e.r(a);var t=e(10),r=Object(t.a)({},(function(){var n=this,a=n._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":n.$parent.slotKey}},[a("h1",{attrs:{id:"payment-api"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#payment-api"}},[n._v("#")]),n._v(" Payment API")]),n._v(" "),a("h2",{attrs:{id:"overview"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[n._v("#")]),n._v(" Overview")]),n._v(" "),a("p",[n._v('ArDrive offers several API endpoints to help manage and determine costs associated with converting currencies into Turbo credits. The below endpoints offer access to useful information that can help stay in control when uploading data to Arweave using Turbo. "winc" refers to "winston credits", the smallest denomination of a Turbo credit.')]),n._v(" "),a("p",[a("strong",[n._v("Note")]),n._v(": This service is still evolving and the information provided below may be out of date. You can view the most up to date information about the available endpoints "),a("a",{attrs:{href:"https://payment.ardrive.io/api-docs",target:"_blank",rel:"noopener noreferrer"}},[n._v("here"),a("OutboundLink")],1),n._v(", or view the raw json for that documentation "),a("a",{attrs:{href:"https://payment.ardrive.io/openapi.json",target:"_blank",rel:"noopener noreferrer"}},[n._v("here"),a("OutboundLink")],1),n._v(".")]),n._v(" "),a("h2",{attrs:{id:"endpoints"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#endpoints"}},[n._v("#")]),n._v(" Endpoints")]),n._v(" "),a("p",[n._v("The host url for all below endpoints is:")]),n._v(" "),a("p",[a("code",[n._v("https://payment.ardrive.io/v1")])]),n._v(" "),a("p",[n._v("All of these endpoints use GET requests")]),n._v(" "),a("h3",{attrs:{id:"get-amount-of-credits-for-byte-count"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#get-amount-of-credits-for-byte-count"}},[n._v("#")]),n._v(" Get Amount of Credits for Byte Count")]),n._v(" "),a("p",[n._v("Returns the current amount of winc it will cost to upload a provided byte count worth of data.")]),n._v(" "),a("p",[a("code",[n._v("/price/bytes/{byteCount}")])]),n._v(" "),a("h4",{attrs:{id:"parameters"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#parameters"}},[n._v("#")]),n._v(" Parameters")]),n._v(" "),a("p",[a("code",[n._v("byteCount")]),n._v("*: integer - (path)")]),n._v(" "),a("h4",{attrs:{id:"example"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example"}},[n._v("#")]),n._v(" Example")]),n._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[n._v("https://payment.ardrive.io/v1/price/bytes/5242880\n")])])]),a("details",[a("summary",[n._v("Response Body (JSON)")]),n._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[n._v('{\n "winc": "1676650364",\n "adjustments": [\n {\n "name": "FWD Research July 2023 Subsidy",\n "description": "A 60% discount for uploads over 500KiB",\n "operator": "multiply",\n "value": 0.6,\n "adjustmentAmount": "-2514975546"\n }\n ]\n}\n')])])])]),n._v(" "),a("h3",{attrs:{id:"get-winc-for-payment-type-and-amount"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#get-winc-for-payment-type-and-amount"}},[n._v("#")]),n._v(" Get winc for Payment Type and Amount")]),n._v(" "),a("p",[n._v("Returns the current amount of winc Turbo will quote for a given payment type and amount.")]),n._v(" "),a("p",[a("code",[n._v("/price/{type}/{amount}")])]),n._v(" "),a("h4",{attrs:{id:"parameters-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#parameters-2"}},[n._v("#")]),n._v(" Parameters")]),n._v(" "),a("p",[a("code",[n._v("type")]),n._v('*: string - must match a supported currency, such as "usd" - (path)')]),n._v(" "),a("p",[a("code",[n._v("amount")]),n._v("*: integer - (path)")]),n._v(" "),a("h4",{attrs:{id:"example-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-2"}},[n._v("#")]),n._v(" Example")]),n._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[n._v("https://payment.ardrive.io/v1/price/usd/1000\n")])])]),a("details",[a("summary",[n._v("Response Body (JSON)")]),n._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[n._v('{\n "winc": "1365248226950"\n}\n')])])])]),n._v(" "),a("h3",{attrs:{id:"get-current-balance-of-winc"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#get-current-balance-of-winc"}},[n._v("#")]),n._v(" Get Current Balance of winc")]),n._v(" "),a("p",[n._v("use a signed request of a previously obtained JWT to get the signing wallet's current service balance in winc.")]),n._v(" "),a("p",[a("code",[n._v("/balance")])]),n._v(" "),a("h4",{attrs:{id:"parameters-3"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#parameters-3"}},[n._v("#")]),n._v(" Parameters")]),n._v(" "),a("p",[a("code",[n._v("x-signature")]),n._v("*: string - (header)")]),n._v(" "),a("p",[a("code",[n._v("x-nonce")]),n._v("*: string - (header)")]),n._v(" "),a("p",[a("code",[n._v("x-public-key")]),n._v("*: string - (header)")]),n._v(" "),a("h3",{attrs:{id:"get-quote-for-credits"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#get-quote-for-credits"}},[n._v("#")]),n._v(" Get Quote for Credits")]),n._v(" "),a("p",[n._v("Gets a quote and payment session for a given payment method, destination address, currency type, and payment amount")]),n._v(" "),a("p",[a("code",[n._v("/top-up/{method}/{address}/{currency}/{amount}")])]),n._v(" "),a("h4",{attrs:{id:"parameters-4"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#parameters-4"}},[n._v("#")]),n._v(" Parameters")]),n._v(" "),a("p",[a("code",[n._v("method")]),n._v("*: string - payment-intent | checkout-session - (path)")]),n._v(" "),a("p",[a("code",[n._v("address")]),n._v("*: string - public address of wallet - (path)")]),n._v(" "),a("p",[a("code",[n._v("currency")]),n._v("*: string - must match supported currency, such as usd - (path)")]),n._v(" "),a("p",[a("code",[n._v("amount")]),n._v("*: integer - amount of the currency to convert to winc, usd has a minimum transaction amount of 1000 ($10.00) - (path)")]),n._v(" "),a("h4",{attrs:{id:"example-3"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-3"}},[n._v("#")]),n._v(" Example")]),n._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[n._v("https://payment.ardrive.io/v1/top-up/checkout-session/cF0H0SKdnaDTqWKY9iJKBktTpdEWgb3GnlndE7ABv0Q/usd/1000\n")])])]),a("details",[a("summary",[a("b",[n._v("Response Body (JSON)")])]),n._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[n._v('{\n "topUpQuote": {\n "topUpQuoteId": "54f57b67-4fcf-47fb-85e6-85d4a8c96f25",\n "destinationAddressType": "arweave",\n "paymentAmount": 1000,\n "winstonCreditAmount": "1360424028269",\n "destinationAddress": "cF0H0SKdnaDTqWKY9iJKBktTpdEWgb3GnlndE7ABv0Q",\n "currencyType": "usd",\n "quoteExpirationDate": "2023-07-27T01:56:26.436Z",\n "paymentProvider": "stripe"\n },\n "paymentSession": {\n "id": "cs_live_a1p47UpvijHGe7sI8AI1kScZdd5qKzdyaHUWRaeuFVvVvDHXeuck68Pf51",\n "object": "checkout.session",\n "after_expiration": null,\n "allow_promotion_codes": null,\n "amount_subtotal": 1000,\n "amount_total": 1000,\n "automatic_tax": {\n "enabled": false,\n "status": null\n },\n "billing_address_collection": null,\n "cancel_url": "https://app.ardrive.io",\n "client_reference_id": null,\n "consent": null,\n "consent_collection": null,\n "created": 1690422686,\n "currency": "usd",\n "currency_conversion": null,\n "custom_fields": [],\n "custom_text": {\n "shipping_address": null,\n "submit": null\n },\n "customer": null,\n "customer_creation": "if_required",\n "customer_details": null,\n "customer_email": null,\n "expires_at": 1690509086,\n "invoice": null,\n "invoice_creation": {\n "enabled": false,\n "invoice_data": {\n "account_tax_ids": null,\n "custom_fields": null,\n "description": null,\n "footer": null,\n "metadata": {},\n "rendering_options": null\n }\n },\n "livemode": true,\n "locale": null,\n "metadata": {},\n "mode": "payment",\n "payment_intent": null,\n "payment_link": null,\n "payment_method_collection": "always",\n "payment_method_options": {},\n "payment_method_types": [\n "card"\n ],\n "payment_status": "unpaid",\n "phone_number_collection": {\n "enabled": false\n },\n "recovered_from": null,\n "setup_intent": null,\n "shipping_address_collection": null,\n "shipping_cost": null,\n "shipping_details": null,\n "shipping_options": [],\n "status": "open",\n "submit_type": null,\n "subscription": null,\n "success_url": "https://app.ardrive.io",\n "total_details": {\n "amount_discount": 0,\n "amount_shipping": 0,\n "amount_tax": 0\n },\n "url": "https://checkout.stripe.com/c/pay/cs_live_a1p47UpvijHGe7sI8AI1kScZdd5qKzdyaHUWRaeuFVvVvDHXeuck68Pf51#fidkdWxOYHwnPyd1blppbHNgWjA0T1BEcXJGPWR1VUpSbkFJSFR0S0M8dlV1Y2tgS1ZVa3JdPVxfPXw0Q0tBaTNzPDFtX0xyf2JDVlxpNzJnUkAxSmp2PUZJdHBwa1B2ck53TmZkQW1BSjNoNTU3XG88RGBObycpJ2N3amhWYHdzYHcnP3F3cGApJ2lkfGpwcVF8dWAnPyd2bGtiaWBabHFgaCcpJ2BrZGdpYFVpZGZgbWppYWB3dic%2FcXdwYHgl"\n }\n}\n')])])])]),n._v(" "),a("h3",{attrs:{id:"get-supported-currencies"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#get-supported-currencies"}},[n._v("#")]),n._v(" Get Supported Currencies")]),n._v(" "),a("p",[n._v("Returns a list of currency types supported by Turbo")]),n._v(" "),a("p",[a("code",[n._v("/currencies")])]),n._v(" "),a("h4",{attrs:{id:"parameters-5"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#parameters-5"}},[n._v("#")]),n._v(" Parameters")]),n._v(" "),a("p",[n._v("None")]),n._v(" "),a("h4",{attrs:{id:"example-4"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-4"}},[n._v("#")]),n._v(" Example")]),n._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[n._v("https://payment.ardrive.io/v1/currencies\n")])])]),a("details",[a("summary",[a("b",[n._v("Response Body (JSON)")])]),n._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[n._v('{\n "supportedCurrencies": [\n "aud",\n "brl",\n "cad",\n "eur",\n "gbp",\n "hkd",\n "inr",\n "jpy",\n "sgd",\n "usd"\n ],\n "limits": {\n "aud": {\n "maximumPaymentAmount": 1500000,\n "minimumPaymentAmount": 1500,\n "suggestedPaymentAmounts": [\n 2500,\n 7500,\n 15000\n ],\n "zeroDecimalCurrency": false\n },\n "brl": {\n "maximumPaymentAmount": 5000000,\n "minimumPaymentAmount": 5000,\n "suggestedPaymentAmounts": [\n 12500,\n 25000,\n 50000\n ],\n "zeroDecimalCurrency": false\n },\n "cad": {\n "maximumPaymentAmount": 1300000,\n "minimumPaymentAmount": 1400,\n "suggestedPaymentAmounts": [\n 2500,\n 5000,\n 10000\n ],\n "zeroDecimalCurrency": false\n },\n "eur": {\n "maximumPaymentAmount": 1000000,\n "minimumPaymentAmount": 1000,\n "suggestedPaymentAmounts": [\n 2500,\n 5000,\n 10000\n ],\n "zeroDecimalCurrency": false\n },\n "gbp": {\n "maximumPaymentAmount": 770000,\n "minimumPaymentAmount": 780,\n "suggestedPaymentAmounts": [\n 2000,\n 4000,\n 8000\n ],\n "zeroDecimalCurrency": false\n },\n "hkd": {\n "maximumPaymentAmount": 7800000,\n "minimumPaymentAmount": 7900,\n "suggestedPaymentAmounts": [\n 20000,\n 40000,\n 80000\n ],\n "zeroDecimalCurrency": false\n },\n "inr": {\n "maximumPaymentAmount": 90000000,\n "minimumPaymentAmount": 83000,\n "suggestedPaymentAmounts": [\n 200000,\n 400000,\n 800000\n ],\n "zeroDecimalCurrency": false\n },\n "jpy": {\n "maximumPaymentAmount": 1500000,\n "minimumPaymentAmount": 1500,\n "suggestedPaymentAmounts": [\n 3500,\n 6500,\n 15000\n ],\n "zeroDecimalCurrency": true\n },\n "sgd": {\n "maximumPaymentAmount": 1300000,\n "minimumPaymentAmount": 1500,\n "suggestedPaymentAmounts": [\n 2500,\n 7500,\n 15000\n ],\n "zeroDecimalCurrency": false\n },\n "usd": {\n "maximumPaymentAmount": 1000000,\n "minimumPaymentAmount": 1000,\n "suggestedPaymentAmounts": [\n 2500,\n 5000,\n 10000\n ],\n "zeroDecimalCurrency": false\n }\n }\n}\n')])])])]),n._v(" "),a("h3",{attrs:{id:"get-supported-countries"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#get-supported-countries"}},[n._v("#")]),n._v(" Get Supported Countries")]),n._v(" "),a("p",[n._v("Returns a list of countries where Turbo is available")]),n._v(" "),a("p",[a("code",[n._v("/countries")])]),n._v(" "),a("h4",{attrs:{id:"parameters-6"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#parameters-6"}},[n._v("#")]),n._v(" Parameters")]),n._v(" "),a("p",[n._v("None")]),n._v(" "),a("h4",{attrs:{id:"example-5"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-5"}},[n._v("#")]),n._v(" Example")]),n._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[n._v("https://payment.ardrive.io/v1/countries\n")])])]),a("details",[a("summary",[a("b",[n._v("Response Body (JSON)")])]),n._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[n._v('[\n "United States",\n "United Kingdom",\n "Afghanistan",\n "Albania",\n "Algeria",\n "Andorra",\n "Angola",\n "Antigua and Barbuda",\n "Argentina",\n "Armenia",\n "Australia",\n "Austria",\n "Azerbaijan",\n "Bahamas",\n "Bahrain",\n "Bangladesh",\n "Barbados",\n "Belarus",\n "Belgium",\n "Belize",\n "Benin",\n "Bhutan",\n "Bolivia",\n "Bosnia and Herzegovina",\n "Botswana",\n "Brazil",\n "Brunei",\n "Bulgaria",\n "Burkina Faso",\n "Burundi",\n "Cabo Verde",\n "Cambodia",\n "Cameroon",\n "Canada",\n "Central African Republic",\n "Chad",\n "Chile",\n "China",\n "Colombia",\n "Comoros",\n "Congo",\n "Costa Rica",\n "Cote d\'Ivoire",\n "Croatia",\n "Cyprus",\n "Czech Republic",\n "Democratic Republic of the Congo",\n "Denmark",\n "Djibouti",\n "Dominica",\n "Dominican Republic",\n "East Timor",\n "Ecuador",\n "Egypt",\n "El Salvador",\n "Equatorial Guinea",\n "Eritrea",\n "Estonia",\n "Eswatini",\n "Ethiopia",\n "Fiji",\n "Finland",\n "France",\n "Gabon",\n "Gambia",\n "Georgia",\n "Germany",\n "Ghana",\n "Greece",\n "Grenada",\n "Guatemala",\n "Guinea",\n "Guinea-Bissau",\n "Guyana",\n "Haiti",\n "Honduras",\n "Hungary",\n "Iceland",\n "India",\n "Indonesia",\n "Iraq",\n "Ireland",\n "Israel",\n "Italy",\n "Jamaica",\n "Japan",\n "Jordan",\n "Kazakhstan",\n "Kenya",\n "Kiribati",\n "Kuwait",\n "Kyrgyzstan",\n "Laos",\n "Latvia",\n "Lebanon",\n "Lesotho",\n "Liberia",\n "Libya",\n "Liechtenstein",\n "Lithuania",\n "Luxembourg",\n "Madagascar",\n "Malawi",\n "Malaysia",\n "Maldives",\n "Mali",\n "Malta",\n "Marshall Islands",\n "Mauritania",\n "Mauritius",\n "Mexico",\n "Micronesia",\n "Moldova",\n "Monaco",\n "Mongolia",\n "Montenegro",\n "Morocco",\n "Mozambique",\n "Myanmar",\n "Namibia",\n "Nauru",\n "Nepal",\n "Netherlands",\n "New Zealand",\n "Nicaragua",\n "Niger",\n "Nigeria",\n "North Macedonia",\n "Norway",\n "Oman",\n "Pakistan",\n "Palau",\n "Palestine",\n "Panama",\n "Papua New Guinea",\n "Paraguay",\n "Peru",\n "Philippines",\n "Poland",\n "Portugal",\n "Qatar",\n "Romania",\n "Russia",\n "Rwanda",\n "Saint Kitts and Nevis",\n "Saint Lucia",\n "Saint Vincent and the Grenadines",\n "Samoa",\n "San Marino",\n "Sao Tome and Principe",\n "Saudi Arabia",\n "Senegal",\n "Serbia",\n "Seychelles",\n "Sierra Leone",\n "Singapore",\n "Slovakia",\n "Slovenia",\n "Solomon Islands",\n "Somalia",\n "South Africa",\n "South Korea",\n "South Sudan",\n "Spain",\n "Sri Lanka",\n "Sudan",\n "Suriname",\n "Sweden",\n "Switzerland",\n "Taiwan",\n "Tajikistan",\n "Tanzania",\n "Thailand",\n "Togo",\n "Tonga",\n "Trinidad and Tobago",\n "Tunisia",\n "Turkey",\n "Turkmenistan",\n "Tuvalu",\n "Uganda",\n "Ukraine",\n "United Arab Emirates",\n "Uruguay",\n "Uzbekistan",\n "Vanuatu",\n "Vatican City",\n "Venezuela",\n "Vietnam",\n "Yemen",\n "Zambia",\n "Zimbabwe"\n]\n')])])])]),n._v(" "),a("h3",{attrs:{id:"get-conversion-rates"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#get-conversion-rates"}},[n._v("#")]),n._v(" Get Conversion Rates")]),n._v(" "),a("p",[n._v("Returns supported fiat conversion rates for 1GB of storage based on current market prices")]),n._v(" "),a("p",[a("code",[n._v("/rates")])]),n._v(" "),a("h4",{attrs:{id:"parameters-7"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#parameters-7"}},[n._v("#")]),n._v(" Parameters")]),n._v(" "),a("p",[n._v("None")]),n._v(" "),a("h4",{attrs:{id:"example-6"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-6"}},[n._v("#")]),n._v(" Example")]),n._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[n._v("https://payment.ardrive.io/v1/rates\n")])])]),a("details",[a("summary",[a("b",[n._v("Response Body (JSON)")])]),n._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[n._v('{\n "winc": "343168912867",\n "fiat": {\n "aud": 3.52873729722864,\n "brl": 11.34598786477272,\n "cad": 3.15729126594135,\n "eur": 2.1569195680425,\n "gbp": 1.8487882011791101,\n "hkd": 18.66938404981161,\n "inr": 196.24591287088242,\n "jpy": 334.744630809484,\n "sgd": 3.16995419882613,\n "usd": 2.39329431522465\n },\n "adjustments": [\n {\n "name": "FWD Research July 2023 Subsidy",\n "description": "A 60% discount for uploads over 500KiB",\n "operator": "multiply",\n "value": 0.6,\n "adjustmentAmount": "-514753369299"\n }\n ]\n}\n')])])])]),n._v(" "),a("p",[n._v("* required")])])}),[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[39],{333:function(n,a,e){"use strict";e.r(a);var t=e(10),r=Object(t.a)({},(function(){var n=this,a=n._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":n.$parent.slotKey}},[a("h1",{attrs:{id:"payment-api"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#payment-api"}},[n._v("#")]),n._v(" Payment API")]),n._v(" "),a("h2",{attrs:{id:"overview"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[n._v("#")]),n._v(" Overview")]),n._v(" "),a("p",[n._v('ArDrive offers several API endpoints to help manage and determine costs associated with converting currencies into Turbo credits. The below endpoints offer access to useful information that can help stay in control when uploading data to Arweave using Turbo. "winc" refers to "winston credits", the smallest denomination of a Turbo credit.')]),n._v(" "),a("p",[a("strong",[n._v("Note")]),n._v(": This service is still evolving and the information provided below may be out of date. You can view the most up to date information about the available endpoints "),a("a",{attrs:{href:"https://payment.ardrive.io/api-docs",target:"_blank",rel:"noopener noreferrer"}},[n._v("here"),a("OutboundLink")],1),n._v(", or view the raw json for that documentation "),a("a",{attrs:{href:"https://payment.ardrive.io/openapi.json",target:"_blank",rel:"noopener noreferrer"}},[n._v("here"),a("OutboundLink")],1),n._v(".")]),n._v(" "),a("h2",{attrs:{id:"endpoints"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#endpoints"}},[n._v("#")]),n._v(" Endpoints")]),n._v(" "),a("p",[n._v("The host url for all below endpoints is:")]),n._v(" "),a("p",[a("code",[n._v("https://payment.ardrive.io/v1")])]),n._v(" "),a("p",[n._v("All of these endpoints use GET requests")]),n._v(" "),a("h3",{attrs:{id:"get-amount-of-credits-for-byte-count"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#get-amount-of-credits-for-byte-count"}},[n._v("#")]),n._v(" Get Amount of Credits for Byte Count")]),n._v(" "),a("p",[n._v("Returns the current amount of winc it will cost to upload a provided byte count worth of data.")]),n._v(" "),a("p",[a("code",[n._v("/price/bytes/{byteCount}")])]),n._v(" "),a("h4",{attrs:{id:"parameters"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#parameters"}},[n._v("#")]),n._v(" Parameters")]),n._v(" "),a("p",[a("code",[n._v("byteCount")]),n._v("*: integer - (path)")]),n._v(" "),a("h4",{attrs:{id:"example"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example"}},[n._v("#")]),n._v(" Example")]),n._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[n._v("https://payment.ardrive.io/v1/price/bytes/5242880\n")])])]),a("details",[a("summary",[n._v("Response Body (JSON)")]),n._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[n._v('{\n "winc": "1676650364",\n "adjustments": [\n {\n "name": "FWD Research July 2023 Subsidy",\n "description": "A 60% discount for uploads over 500KiB",\n "operator": "multiply",\n "value": 0.6,\n "adjustmentAmount": "-2514975546"\n }\n ]\n}\n')])])])]),n._v(" "),a("h3",{attrs:{id:"get-winc-for-payment-type-and-amount"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#get-winc-for-payment-type-and-amount"}},[n._v("#")]),n._v(" Get winc for Payment Type and Amount")]),n._v(" "),a("p",[n._v("Returns the current amount of winc Turbo will quote for a given payment type and amount.")]),n._v(" "),a("p",[a("code",[n._v("/price/{type}/{amount}")])]),n._v(" "),a("h4",{attrs:{id:"parameters-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#parameters-2"}},[n._v("#")]),n._v(" Parameters")]),n._v(" "),a("p",[a("code",[n._v("type")]),n._v('*: string - must match a supported currency, such as "usd" - (path)')]),n._v(" "),a("p",[a("code",[n._v("amount")]),n._v("*: integer - (path)")]),n._v(" "),a("h4",{attrs:{id:"example-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-2"}},[n._v("#")]),n._v(" Example")]),n._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[n._v("https://payment.ardrive.io/v1/price/usd/1000\n")])])]),a("details",[a("summary",[n._v("Response Body (JSON)")]),n._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[n._v('{\n "winc": "1365248226950"\n}\n')])])])]),n._v(" "),a("h3",{attrs:{id:"get-current-balance-of-winc"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#get-current-balance-of-winc"}},[n._v("#")]),n._v(" Get Current Balance of winc")]),n._v(" "),a("p",[n._v("use a signed request of a previously obtained JWT to get the signing wallet's current service balance in winc.")]),n._v(" "),a("p",[a("code",[n._v("/balance")])]),n._v(" "),a("h4",{attrs:{id:"parameters-3"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#parameters-3"}},[n._v("#")]),n._v(" Parameters")]),n._v(" "),a("p",[a("code",[n._v("x-signature")]),n._v("*: string - (header)")]),n._v(" "),a("p",[a("code",[n._v("x-nonce")]),n._v("*: string - (header)")]),n._v(" "),a("p",[a("code",[n._v("x-public-key")]),n._v("*: string - (header)")]),n._v(" "),a("h3",{attrs:{id:"get-quote-for-credits"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#get-quote-for-credits"}},[n._v("#")]),n._v(" Get Quote for Credits")]),n._v(" "),a("p",[n._v("Gets a quote and payment session for a given payment method, destination address, currency type, and payment amount")]),n._v(" "),a("p",[a("code",[n._v("/top-up/{method}/{address}/{currency}/{amount}")])]),n._v(" "),a("h4",{attrs:{id:"parameters-4"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#parameters-4"}},[n._v("#")]),n._v(" Parameters")]),n._v(" "),a("p",[a("code",[n._v("method")]),n._v("*: string - payment-intent | checkout-session - (path)")]),n._v(" "),a("p",[a("code",[n._v("address")]),n._v("*: string - public address of wallet - (path)")]),n._v(" "),a("p",[a("code",[n._v("currency")]),n._v("*: string - must match supported currency, such as usd - (path)")]),n._v(" "),a("p",[a("code",[n._v("amount")]),n._v("*: integer - amount of the currency to convert to winc, usd has a minimum transaction amount of 1000 ($10.00) - (path)")]),n._v(" "),a("h4",{attrs:{id:"example-3"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-3"}},[n._v("#")]),n._v(" Example")]),n._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[n._v("https://payment.ardrive.io/v1/top-up/checkout-session/cF0H0SKdnaDTqWKY9iJKBktTpdEWgb3GnlndE7ABv0Q/usd/1000\n")])])]),a("details",[a("summary",[a("b",[n._v("Response Body (JSON)")])]),n._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[n._v('{\n "topUpQuote": {\n "topUpQuoteId": "54f57b67-4fcf-47fb-85e6-85d4a8c96f25",\n "destinationAddressType": "arweave",\n "paymentAmount": 1000,\n "winstonCreditAmount": "1360424028269",\n "destinationAddress": "cF0H0SKdnaDTqWKY9iJKBktTpdEWgb3GnlndE7ABv0Q",\n "currencyType": "usd",\n "quoteExpirationDate": "2023-07-27T01:56:26.436Z",\n "paymentProvider": "stripe"\n },\n "paymentSession": {\n "id": "cs_live_a1p47UpvijHGe7sI8AI1kScZdd5qKzdyaHUWRaeuFVvVvDHXeuck68Pf51",\n "object": "checkout.session",\n "after_expiration": null,\n "allow_promotion_codes": null,\n "amount_subtotal": 1000,\n "amount_total": 1000,\n "automatic_tax": {\n "enabled": false,\n "status": null\n },\n "billing_address_collection": null,\n "cancel_url": "https://app.ardrive.io",\n "client_reference_id": null,\n "consent": null,\n "consent_collection": null,\n "created": 1690422686,\n "currency": "usd",\n "currency_conversion": null,\n "custom_fields": [],\n "custom_text": {\n "shipping_address": null,\n "submit": null\n },\n "customer": null,\n "customer_creation": "if_required",\n "customer_details": null,\n "customer_email": null,\n "expires_at": 1690509086,\n "invoice": null,\n "invoice_creation": {\n "enabled": false,\n "invoice_data": {\n "account_tax_ids": null,\n "custom_fields": null,\n "description": null,\n "footer": null,\n "metadata": {},\n "rendering_options": null\n }\n },\n "livemode": true,\n "locale": null,\n "metadata": {},\n "mode": "payment",\n "payment_intent": null,\n "payment_link": null,\n "payment_method_collection": "always",\n "payment_method_options": {},\n "payment_method_types": [\n "card"\n ],\n "payment_status": "unpaid",\n "phone_number_collection": {\n "enabled": false\n },\n "recovered_from": null,\n "setup_intent": null,\n "shipping_address_collection": null,\n "shipping_cost": null,\n "shipping_details": null,\n "shipping_options": [],\n "status": "open",\n "submit_type": null,\n "subscription": null,\n "success_url": "https://app.ardrive.io",\n "total_details": {\n "amount_discount": 0,\n "amount_shipping": 0,\n "amount_tax": 0\n },\n "url": "https://checkout.stripe.com/c/pay/cs_live_a1p47UpvijHGe7sI8AI1kScZdd5qKzdyaHUWRaeuFVvVvDHXeuck68Pf51#fidkdWxOYHwnPyd1blppbHNgWjA0T1BEcXJGPWR1VUpSbkFJSFR0S0M8dlV1Y2tgS1ZVa3JdPVxfPXw0Q0tBaTNzPDFtX0xyf2JDVlxpNzJnUkAxSmp2PUZJdHBwa1B2ck53TmZkQW1BSjNoNTU3XG88RGBObycpJ2N3amhWYHdzYHcnP3F3cGApJ2lkfGpwcVF8dWAnPyd2bGtiaWBabHFgaCcpJ2BrZGdpYFVpZGZgbWppYWB3dic%2FcXdwYHgl"\n }\n}\n')])])])]),n._v(" "),a("h3",{attrs:{id:"get-supported-currencies"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#get-supported-currencies"}},[n._v("#")]),n._v(" Get Supported Currencies")]),n._v(" "),a("p",[n._v("Returns a list of currency types supported by Turbo")]),n._v(" "),a("p",[a("code",[n._v("/currencies")])]),n._v(" "),a("h4",{attrs:{id:"parameters-5"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#parameters-5"}},[n._v("#")]),n._v(" Parameters")]),n._v(" "),a("p",[n._v("None")]),n._v(" "),a("h4",{attrs:{id:"example-4"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-4"}},[n._v("#")]),n._v(" Example")]),n._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[n._v("https://payment.ardrive.io/v1/currencies\n")])])]),a("details",[a("summary",[a("b",[n._v("Response Body (JSON)")])]),n._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[n._v('{\n "supportedCurrencies": [\n "aud",\n "brl",\n "cad",\n "eur",\n "gbp",\n "hkd",\n "inr",\n "jpy",\n "sgd",\n "usd"\n ],\n "limits": {\n "aud": {\n "maximumPaymentAmount": 1500000,\n "minimumPaymentAmount": 1500,\n "suggestedPaymentAmounts": [\n 2500,\n 7500,\n 15000\n ],\n "zeroDecimalCurrency": false\n },\n "brl": {\n "maximumPaymentAmount": 5000000,\n "minimumPaymentAmount": 5000,\n "suggestedPaymentAmounts": [\n 12500,\n 25000,\n 50000\n ],\n "zeroDecimalCurrency": false\n },\n "cad": {\n "maximumPaymentAmount": 1300000,\n "minimumPaymentAmount": 1400,\n "suggestedPaymentAmounts": [\n 2500,\n 5000,\n 10000\n ],\n "zeroDecimalCurrency": false\n },\n "eur": {\n "maximumPaymentAmount": 1000000,\n "minimumPaymentAmount": 1000,\n "suggestedPaymentAmounts": [\n 2500,\n 5000,\n 10000\n ],\n "zeroDecimalCurrency": false\n },\n "gbp": {\n "maximumPaymentAmount": 770000,\n "minimumPaymentAmount": 780,\n "suggestedPaymentAmounts": [\n 2000,\n 4000,\n 8000\n ],\n "zeroDecimalCurrency": false\n },\n "hkd": {\n "maximumPaymentAmount": 7800000,\n "minimumPaymentAmount": 7900,\n "suggestedPaymentAmounts": [\n 20000,\n 40000,\n 80000\n ],\n "zeroDecimalCurrency": false\n },\n "inr": {\n "maximumPaymentAmount": 90000000,\n "minimumPaymentAmount": 83000,\n "suggestedPaymentAmounts": [\n 200000,\n 400000,\n 800000\n ],\n "zeroDecimalCurrency": false\n },\n "jpy": {\n "maximumPaymentAmount": 1500000,\n "minimumPaymentAmount": 1500,\n "suggestedPaymentAmounts": [\n 3500,\n 6500,\n 15000\n ],\n "zeroDecimalCurrency": true\n },\n "sgd": {\n "maximumPaymentAmount": 1300000,\n "minimumPaymentAmount": 1500,\n "suggestedPaymentAmounts": [\n 2500,\n 7500,\n 15000\n ],\n "zeroDecimalCurrency": false\n },\n "usd": {\n "maximumPaymentAmount": 1000000,\n "minimumPaymentAmount": 1000,\n "suggestedPaymentAmounts": [\n 2500,\n 5000,\n 10000\n ],\n "zeroDecimalCurrency": false\n }\n }\n}\n')])])])]),n._v(" "),a("h3",{attrs:{id:"get-supported-countries"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#get-supported-countries"}},[n._v("#")]),n._v(" Get Supported Countries")]),n._v(" "),a("p",[n._v("Returns a list of countries where Turbo is available")]),n._v(" "),a("p",[a("code",[n._v("/countries")])]),n._v(" "),a("h4",{attrs:{id:"parameters-6"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#parameters-6"}},[n._v("#")]),n._v(" Parameters")]),n._v(" "),a("p",[n._v("None")]),n._v(" "),a("h4",{attrs:{id:"example-5"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-5"}},[n._v("#")]),n._v(" Example")]),n._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[n._v("https://payment.ardrive.io/v1/countries\n")])])]),a("details",[a("summary",[a("b",[n._v("Response Body (JSON)")])]),n._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[n._v('[\n "United States",\n "United Kingdom",\n "Afghanistan",\n "Albania",\n "Algeria",\n "Andorra",\n "Angola",\n "Antigua and Barbuda",\n "Argentina",\n "Armenia",\n "Australia",\n "Austria",\n "Azerbaijan",\n "Bahamas",\n "Bahrain",\n "Bangladesh",\n "Barbados",\n "Belarus",\n "Belgium",\n "Belize",\n "Benin",\n "Bhutan",\n "Bolivia",\n "Bosnia and Herzegovina",\n "Botswana",\n "Brazil",\n "Brunei",\n "Bulgaria",\n "Burkina Faso",\n "Burundi",\n "Cabo Verde",\n "Cambodia",\n "Cameroon",\n "Canada",\n "Central African Republic",\n "Chad",\n "Chile",\n "China",\n "Colombia",\n "Comoros",\n "Congo",\n "Costa Rica",\n "Cote d\'Ivoire",\n "Croatia",\n "Cyprus",\n "Czech Republic",\n "Democratic Republic of the Congo",\n "Denmark",\n "Djibouti",\n "Dominica",\n "Dominican Republic",\n "East Timor",\n "Ecuador",\n "Egypt",\n "El Salvador",\n "Equatorial Guinea",\n "Eritrea",\n "Estonia",\n "Eswatini",\n "Ethiopia",\n "Fiji",\n "Finland",\n "France",\n "Gabon",\n "Gambia",\n "Georgia",\n "Germany",\n "Ghana",\n "Greece",\n "Grenada",\n "Guatemala",\n "Guinea",\n "Guinea-Bissau",\n "Guyana",\n "Haiti",\n "Honduras",\n "Hungary",\n "Iceland",\n "India",\n "Indonesia",\n "Iraq",\n "Ireland",\n "Israel",\n "Italy",\n "Jamaica",\n "Japan",\n "Jordan",\n "Kazakhstan",\n "Kenya",\n "Kiribati",\n "Kuwait",\n "Kyrgyzstan",\n "Laos",\n "Latvia",\n "Lebanon",\n "Lesotho",\n "Liberia",\n "Libya",\n "Liechtenstein",\n "Lithuania",\n "Luxembourg",\n "Madagascar",\n "Malawi",\n "Malaysia",\n "Maldives",\n "Mali",\n "Malta",\n "Marshall Islands",\n "Mauritania",\n "Mauritius",\n "Mexico",\n "Micronesia",\n "Moldova",\n "Monaco",\n "Mongolia",\n "Montenegro",\n "Morocco",\n "Mozambique",\n "Myanmar",\n "Namibia",\n "Nauru",\n "Nepal",\n "Netherlands",\n "New Zealand",\n "Nicaragua",\n "Niger",\n "Nigeria",\n "North Macedonia",\n "Norway",\n "Oman",\n "Pakistan",\n "Palau",\n "Palestine",\n "Panama",\n "Papua New Guinea",\n "Paraguay",\n "Peru",\n "Philippines",\n "Poland",\n "Portugal",\n "Qatar",\n "Romania",\n "Russia",\n "Rwanda",\n "Saint Kitts and Nevis",\n "Saint Lucia",\n "Saint Vincent and the Grenadines",\n "Samoa",\n "San Marino",\n "Sao Tome and Principe",\n "Saudi Arabia",\n "Senegal",\n "Serbia",\n "Seychelles",\n "Sierra Leone",\n "Singapore",\n "Slovakia",\n "Slovenia",\n "Solomon Islands",\n "Somalia",\n "South Africa",\n "South Korea",\n "South Sudan",\n "Spain",\n "Sri Lanka",\n "Sudan",\n "Suriname",\n "Sweden",\n "Switzerland",\n "Taiwan",\n "Tajikistan",\n "Tanzania",\n "Thailand",\n "Togo",\n "Tonga",\n "Trinidad and Tobago",\n "Tunisia",\n "Turkey",\n "Turkmenistan",\n "Tuvalu",\n "Uganda",\n "Ukraine",\n "United Arab Emirates",\n "Uruguay",\n "Uzbekistan",\n "Vanuatu",\n "Vatican City",\n "Venezuela",\n "Vietnam",\n "Yemen",\n "Zambia",\n "Zimbabwe"\n]\n')])])])]),n._v(" "),a("h3",{attrs:{id:"get-conversion-rates"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#get-conversion-rates"}},[n._v("#")]),n._v(" Get Conversion Rates")]),n._v(" "),a("p",[n._v("Returns supported fiat conversion rates for 1GB of storage based on current market prices")]),n._v(" "),a("p",[a("code",[n._v("/rates")])]),n._v(" "),a("h4",{attrs:{id:"parameters-7"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#parameters-7"}},[n._v("#")]),n._v(" Parameters")]),n._v(" "),a("p",[n._v("None")]),n._v(" "),a("h4",{attrs:{id:"example-6"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-6"}},[n._v("#")]),n._v(" Example")]),n._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[n._v("https://payment.ardrive.io/v1/rates\n")])])]),a("details",[a("summary",[a("b",[n._v("Response Body (JSON)")])]),n._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[n._v('{\n "winc": "343168912867",\n "fiat": {\n "aud": 3.52873729722864,\n "brl": 11.34598786477272,\n "cad": 3.15729126594135,\n "eur": 2.1569195680425,\n "gbp": 1.8487882011791101,\n "hkd": 18.66938404981161,\n "inr": 196.24591287088242,\n "jpy": 334.744630809484,\n "sgd": 3.16995419882613,\n "usd": 2.39329431522465\n },\n "adjustments": [\n {\n "name": "FWD Research July 2023 Subsidy",\n "description": "A 60% discount for uploads over 500KiB",\n "operator": "multiply",\n "value": 0.6,\n "adjustmentAmount": "-514753369299"\n }\n ]\n}\n')])])])]),n._v(" "),a("p",[n._v("* required")])])}),[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/42.bc7ce646.js b/assets/js/42.aee56198.js similarity index 55% rename from assets/js/42.bc7ce646.js rename to assets/js/42.aee56198.js index 4d2fc83..b6f16a6 100644 --- a/assets/js/42.bc7ce646.js +++ b/assets/js/42.aee56198.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[42],{337:function(t,s,a){"use strict";a.r(s);var n=a(10),e=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"ardriveapp-turbo-sdk-🚀"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#ardriveapp-turbo-sdk-🚀"}},[t._v("#")]),t._v(" @ardriveapp/turbo-sdk 🚀")]),t._v(" "),s("p",[t._v("Welcome to the "),s("code",[t._v("@ardrive/turbo-sdk")]),t._v("! This SDK provides functionality for interacting with the Turbo Upload and Payment Services and is available for both NodeJS and Web environments.")]),t._v(" "),s("h2",{attrs:{id:"installation"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[t._v("#")]),t._v(" Installation")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" @ardrive/turbo-sdk\n")])])]),s("p",[t._v("or")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("yarn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("add")]),t._v(" @ardrive/turbo-sdk\n")])])]),s("h2",{attrs:{id:"quick-start"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#quick-start"}},[t._v("#")]),t._v(" Quick Start")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ArweaveSigner "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'@ardrive/turbo-sdk'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// load your JWK directly to authenticate")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" jwk "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" fs"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("readFileSync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'./my-jwk.json'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" address "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" arweave"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("wallets"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("jwkToAddress")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jwk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("authenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" privateKey"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" jwk "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// or provide your own signer")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" signer "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArweaveSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jwk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("authenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// get the wallet balance")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" winc"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" balance "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getBalance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// prep file for upload")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" filePath "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("join")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("__dirname"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'./my-image.png'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" fileSize "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" fs"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("statSync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("filePath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("size"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// get the cost of uploading the file")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" winc"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" fileSizeCost "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getUploadCosts")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n bytes"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("fileSize"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// check if balance greater than upload cost")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("balance "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" fileSizeCost"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" url "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("createCheckoutSession")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n amount"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" fileSizeCost"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n owner"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// add a promo code if you have one")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// open the URL to top-up, continue when done")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("open")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// upload the file")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" owner"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dataCaches"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" fastFinalityIndexes "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("uploadFile")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("fileStreamFactory")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" fs"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("createReadStream")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("filePath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("fileSizeFactory")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" fileSize"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// upload complete!")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Successfully upload data item!'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" owner"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dataCaches"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" fastFinalityIndexes "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("error"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// upload failed")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("error")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Failed to upload data item!'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" error"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("finally")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" winc"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" newBalance "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getBalance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'New balance:'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" newBalance"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h2",{attrs:{id:"usage"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#usage"}},[t._v("#")]),t._v(" Usage")]),t._v(" "),s("p",[t._v("The SDK is provided in both CommonJS and ESM formats, and it's compatible with bundlers such as Webpack, Rollup, and ESbuild. Utilize the appropriate named exports provided by this SDK's "),s("a",{attrs:{href:"https://github.com/ardriveapp/turbo-sdk/blob/main/package.json",target:"_blank",rel:"noopener noreferrer"}},[t._v("package.json"),s("OutboundLink")],1),t._v(" based on your project's configuration. Refer to the "),s("a",{attrs:{href:"https://github.com/ardriveapp/turbo-sdk/tree/main/examples",target:"_blank",rel:"noopener noreferrer"}},[t._v("examples"),s("OutboundLink")],1),t._v(" directory to see how to use the SDK in various environments.")]),t._v(" "),s("h3",{attrs:{id:"web"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#web"}},[t._v("#")]),t._v(" Web")]),t._v(" "),s("h4",{attrs:{id:"bundlers-webpack-rollup-esbuild-etc"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#bundlers-webpack-rollup-esbuild-etc"}},[t._v("#")]),t._v(" Bundlers (Webpack, Rollup, ESbuild, etc.)")]),t._v(" "),s("p",[t._v("CommonJS:")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" TurboFactory "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@ardrive/turbo-sdk"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unauthenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" rates "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getFiatRates")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[t._v("ESM:")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" TurboFactory "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@ardrive/turbo-sdk/"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unauthenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" rates "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getFiatRates")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[t._v("Browser:")]),t._v(" "),s("div",{staticClass:"language-html extra-class"},[s("pre",{pre:!0,attrs:{class:"language-html"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("module"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token script"}},[s("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" TurboFactory "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https://unpkg.com/@ardrive/turbo-sdk"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unauthenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" rates "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getFiatRates")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),s("h3",{attrs:{id:"nodejs"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#nodejs"}},[t._v("#")]),t._v(" NodeJS")]),t._v(" "),s("h4",{attrs:{id:"commonjs"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#commonjs"}},[t._v("#")]),t._v(" CommonJS")]),t._v(" "),s("p",[t._v("Project's "),s("code",[t._v("package.json")]),t._v(":")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"commonjs"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"scripts"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"test"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ts-node ./index.ts"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"dependencies"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"@ardrive/turbo-sdk"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"latest"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"arweave"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"^1.14.4"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"typescript"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"^5.4.2"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"devDependencies"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"ts-node"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"^10.9.2"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("Project's "),s("code",[t._v("tsconfig.json")]),t._v(":")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"compilerOptions"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"module"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"CommonJS"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"moduleResolution"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"node"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"target"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ES2021"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"esModuleInterop"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"include"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./index.ts"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"exclude"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"node_modules"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("Usage:")]),t._v(" "),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("USD")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n WinstonToTokenAmount"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n developmentTurboConfiguration"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@ardrive/turbo-sdk"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" Arweave "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"arweave"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" fs "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fs"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" path "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"path"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Generate a key from the arweave wallet.\n */")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" arweave "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Arweave")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" jwk "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" arweave"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("wallets"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("generate")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Use the arweave key to create an authenticated turbo client\n */")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turboAuthClient "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("authenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("privateKey")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" jwk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("developmentTurboConfiguration"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Fetch the balance for the private key.\n */")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" balance "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turboAuthClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getBalance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n console"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Balance:"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" balance"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Fetch the estimated amount of winc returned for 10 USD (1000 cents).\n */")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" estimatedWinc "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turboAuthClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getWincForFiat")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("amount")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("USD")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n console"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"10 USD to winc:"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" estimatedWinc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Post local files to the Turbo service.\n */")]),t._v("\n console"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Posting raw file to Turbo service..."')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" filePath "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("join")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("__dirname"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../../files/1KB_file"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" fileSize "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" fs"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("statSync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("filePath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("size"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" uploadResult "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turboAuthClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("uploadFile")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("fileStreamFactory")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" fs"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("createReadStream")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("filePath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("fileSizeFactory")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" fileSize"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("signal")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" AbortSignal"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("timeout")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10_000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// cancel the upload after 10 seconds")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n console"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("JSON")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("stringify")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("uploadResult"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Tops up a wallet with Credits using tokens.\n * Default token is AR, using Winston as the unit.\n */")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" topUpResult "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turboAuthClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("topUpWithTokens")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("tokenAmount")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("WinstonToTokenAmount")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100_000_000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 0.0001 AR")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n console"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("JSON")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("stringify")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("topUpResult"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"esm"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#esm"}},[t._v("#")]),t._v(" ESM")]),t._v(" "),s("p",[t._v("Project's "),s("code",[t._v("package.json")]),t._v(":")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"module"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"scripts"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"test"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ts-node ./index.ts"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"dependencies"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"@ardrive/turbo-sdk"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"latest"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"arweave"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"^1.14.4"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"devDependencies"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"ts-node"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"^10.9.2"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("Project's "),s("code",[t._v("tsconfig.json")]),t._v(":")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"compilerOptions"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"module"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"NodeNext"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"moduleResolution"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"NodeNext"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"target"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ESNext"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"include"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./index.ts"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"exclude"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"node_modules"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"ts-node"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"esm"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("Usage:")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// or use @ardrive/turbo-sdk/web depending on your environment")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("USD")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n WinstonToTokenAmount"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n developmentTurboConfiguration"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@ardrive/turbo-sdk/node"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" Arweave "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"arweave"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" fs "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fs"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Generate a key from the arweave wallet.\n */")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" arweave "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Arweave")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" jwk "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" arweave"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("wallets"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("generate")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Use the arweave key to create an authenticated turbo client\n */")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turboAuthClient "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("authenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n privateKey"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" jwk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("developmentTurboConfiguration"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Fetch the balance for the private key.\n */")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" balance "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turboAuthClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getBalance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Balance:"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" balance"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Fetch the estimated amount of winc returned for 10 USD (1000 cents).\n */")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" estimatedWinc "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turboAuthClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getWincForFiat")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n amount"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("USD")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"10 USD to winc:"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" estimatedWinc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Post local files to the Turbo service.\n */")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Posting raw file to Turbo service..."')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" filePath "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("URL")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../../files/1KB_file"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("meta"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pathname"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" fileSize "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" fs"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("statSync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("filePath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("size"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" uploadResult "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turboAuthClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("uploadFile")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("fileStreamFactory")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" fs"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("createReadStream")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("filePath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("fileSizeFactory")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" fileSize"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n signal"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" AbortSignal"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("timeout")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10_000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// cancel the upload after 10 seconds")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("JSON")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("stringify")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("uploadResult"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Tops up a wallet with Credits using tokens.\n * Default token is AR, using Winston as the unit.\n */")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" topUpResult "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turboAuthClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("topUpWithTokens")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n tokenAmount"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("WinstonToTokenAmount")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100_000_000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 0.0001 AR")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("JSON")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("stringify")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("topUpResult"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h3",{attrs:{id:"typescript"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#typescript"}},[t._v("#")]),t._v(" Typescript")]),t._v(" "),s("p",[t._v("The SDK provides TypeScript types. When you import the SDK in a TypeScript project:")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" TurboFactory "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@ardrive/turbo-sdk/web"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// or '@ardrive/turbo-sdk/node' for Node.js projects")]),t._v("\n")])])]),s("p",[t._v("Types are exported from "),s("code",[t._v("./lib/types/[node/web]/index.d.ts")]),t._v(" and should be automatically recognized, offering benefits such as type-checking and autocompletion.")]),t._v(" "),s("p",[t._v("Examples:")]),t._v(" "),s("p",[t._v("Examples are available in the "),s("a",{attrs:{href:"https://github.com/ardriveapp/turbo-sdk/tree/main/examples",target:"_blank",rel:"noopener noreferrer"}},[t._v("examples"),s("OutboundLink")],1),t._v(" directory. To run examples:")]),t._v(" "),s("ul",[s("li",[s("code",[t._v("yarn example:web")]),t._v(" - opens up the example web page")]),t._v(" "),s("li",[s("code",[t._v("yarn example:cjs")]),t._v(" - runs example CJS node script")]),t._v(" "),s("li",[s("code",[t._v("yarn example:esm")]),t._v(" - runs example ESM node script")])]),t._v(" "),s("h2",{attrs:{id:"apis"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#apis"}},[t._v("#")]),t._v(" APIs")]),t._v(" "),s("h3",{attrs:{id:"turbofactory"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#turbofactory"}},[t._v("#")]),t._v(" TurboFactory")]),t._v(" "),s("h4",{attrs:{id:"unauthenticated"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#unauthenticated"}},[t._v("#")]),t._v(" "),s("code",[t._v("unauthenticated()")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Creates an instance of a client that accesses Turbo's unauthenticated services.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unauthenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("h4",{attrs:{id:"authenticated"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#authenticated"}},[t._v("#")]),t._v(" "),s("code",[t._v("authenticated()")])]),t._v(" "),s("p",[t._v("Creates an instance of a client that accesses Turbo's authenticated and unauthenticated services. Requires either a signer, or private key to be provided.")]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Construct Turbo with an Arweave JWK")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" jwk "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" arweave"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("crypto"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("generateJWK")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("authenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" privateKey"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" jwk "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Construct Turbo with an Arweave signer")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" signer "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArweaveSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jwk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("authenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Construct Turbo with an Arconnect signer")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" signer "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArweaveSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jwk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("authenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Construct Turbo with an ETH signer")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" signer "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArconnectSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("window"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("arweaveWallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("authenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Construct Turbo with an ETH private key")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("authenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n privateKey"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" ethHexadecimalPrivateKey"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n token"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ethereum"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Construct Turbo with a SOL signer")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" signer "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("HexSolanaSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("bs58"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("encode")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("secretKey"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("authenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Construct Turbo with a SOL secret Key")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("authenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n privateKey"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" bs58"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("encode")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("secretKey"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n token"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"solana"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("h3",{attrs:{id:"turbounauthenticatedclient"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#turbounauthenticatedclient"}},[t._v("#")]),t._v(" TurboUnauthenticatedClient")]),t._v(" "),s("h4",{attrs:{id:"getsupportedcurrencies"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getsupportedcurrencies"}},[t._v("#")]),t._v(" "),s("code",[t._v("getSupportedCurrencies()")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("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).")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" currencies "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getSupportedCurrencies")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("h4",{attrs:{id:"getsupportedcountries"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getsupportedcountries"}},[t._v("#")]),t._v(" "),s("code",[t._v("getSupportedCountries()")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Returns the list of countries supported by the Turbo Payment Service's top up workflow.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" countries "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getSupportedCountries")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("h4",{attrs:{id:"getfiattoar-currency"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getfiattoar-currency"}},[t._v("#")]),t._v(" "),s("code",[t._v("getFiatToAR({ currency })")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Returns the current raw fiat to AR conversion rate for a specific currency as reported by third-party pricing oracles.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" fiatToAR "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getFiatToAR")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" currency"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"USD"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("h4",{attrs:{id:"getfiatrates"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getfiatrates"}},[t._v("#")]),t._v(" "),s("code",[t._v("getFiatRates()")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Returns the current fiat rates for 1 GiB of data for supported currencies, including all top-up adjustments and fees.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" rates "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getFiatRates")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("h4",{attrs:{id:"getwincforfiat-amount"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getwincforfiat-amount"}},[t._v("#")]),t._v(" "),s("code",[t._v("getWincForFiat({ amount })")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Returns the current amount of Winston Credits including all adjustments for the provided fiat currency, amount. To leverage promo codes, see "),s("a",{attrs:{href:"#turboauthenticatedclient"}},[t._v("TurboAuthenticatedClient")]),t._v(".")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" winc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" paymentAmount"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" quotedPaymentAmount"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" adjustments "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getWincForFiat")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n amount"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("USD")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// promo codes require an authenticated client")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("h4",{attrs:{id:"getuploadcosts-bytes"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getuploadcosts-bytes"}},[t._v("#")]),t._v(" "),s("code",[t._v("getUploadCosts({ bytes })")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Returns the estimated cost in Winston Credits for the provided file sizes, including all upload adjustments and fees.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("uploadCostForFile"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getUploadCosts")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" bytes"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1024")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" winc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" adjustments "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" uploadCostForFile"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("h4",{attrs:{id:"uploadsigneddataitem-dataitemstreamfactory-dataitemsizefactory-signal"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#uploadsigneddataitem-dataitemstreamfactory-dataitemsizefactory-signal"}},[t._v("#")]),t._v(" "),s("code",[t._v("uploadSignedDataItem({ dataItemStreamFactory, dataItemSizeFactory, signal })")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Uploads a signed data item. The provided "),s("code",[t._v("dataItemStreamFactory")]),t._v(" should produce a NEW signed data item stream each time is it invoked. The "),s("code",[t._v("dataItemSizeFactory")]),t._v(" is a function that returns the size of the file. The "),s("code",[t._v("signal")]),t._v(" is an optional "),s("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal",target:"_blank",rel:"noopener noreferrer"}},[t._v("AbortSignal"),s("OutboundLink")],1),t._v(" that can be used to cancel the upload or timeout the request.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" filePath "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("join")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("__dirname"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./my-signed-data-item"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" dataItemSize "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" fs"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("statSync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("filePath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("size"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" uploadResponse "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("uploadSignedDataItem")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("dataItemStreamFactory")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" fs"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("createReadStream")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("filePath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("dataItemSizeFactory")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" dataItemSize"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n signal"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" AbortSignal"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("timeout")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10_000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// cancel the upload after 10 seconds")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("h4",{attrs:{id:"createcheckoutsession-amount-owner"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#createcheckoutsession-amount-owner"}},[t._v("#")]),t._v(" "),s("code",[t._v("createCheckoutSession({ amount, owner })")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("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 "),s("a",{attrs:{href:"#turboauthenticatedclient"}},[t._v("TurboAuthenticatedClient")]),t._v(".")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" winc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" paymentAmount"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" quotedPaymentAmount"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" adjustments "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("createCheckoutSession")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n amount"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("USD")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// $10.00 USD")]),t._v("\n owner"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" publicArweaveAddress"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// promo codes require an authenticated client")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Open checkout session in a browser")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("process"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("platform "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("===")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"darwin"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// macOS")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("exec")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token template-string"}},[s("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("open ")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("url"),s("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("process"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("platform "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("===")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"win32"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Windows")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("exec")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token template-string"}},[s("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('start "" "')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("url"),s("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" shell"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Linux/Unix")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("open")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Top up to ETH or SOL wallets")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unauthenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" token"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ethereum"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" winc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" paymentAmount "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("createCheckoutSession")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n amount"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("USD")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// $10.00 USD")]),t._v("\n owner"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" publicEthereumAddress"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unauthenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" token"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"solana"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" winc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" paymentAmount "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("createCheckoutSession")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n amount"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("USD")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// $10.00 USD")]),t._v("\n owner"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" publicSolanaAddress"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("h4",{attrs:{id:"submitfundtransaction-txid"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#submitfundtransaction-txid"}},[t._v("#")]),t._v(" "),s("code",[t._v("submitFundTransaction({ txId})")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Submits the transaction ID of a funding transaction to Turbo Payment Service for top up processing. The "),s("code",[t._v("txId")]),t._v(" is the transaction ID of the transaction to be submitted.")]),t._v(" "),s("ul",[s("li",[t._v("Note: use this API if you've already executed your token transfer to the Turbo wallet. Otherwise, consider using "),s("code",[t._v("topUpWithTokens")]),t._v(" to execute a new token transfer to the Turbo wallet and submit its resulting transaction ID for top up processing all in one go.")])]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unauthenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// defaults to arweave token type")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token class-name"}},[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" status"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("fundResult "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("submitFundTransaction")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n txId"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"my-valid-arweave-fund-transaction-id"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("h3",{attrs:{id:"turboauthenticatedclient"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#turboauthenticatedclient"}},[t._v("#")]),t._v(" TurboAuthenticatedClient")]),t._v(" "),s("h4",{attrs:{id:"getbalance"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getbalance"}},[t._v("#")]),t._v(" "),s("code",[t._v("getBalance()")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Issues a signed request to get the credit balance of a wallet measured in AR (measured in Winston Credits, or winc).")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" winc"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" balance "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getBalance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("h4",{attrs:{id:"getwincforfiat-amount-promocodes"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getwincforfiat-amount-promocodes"}},[t._v("#")]),t._v(" "),s("code",[t._v("getWincForFiat({ amount, promoCodes })")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Returns the current amount of Winston Credits including all adjustments for the provided fiat currency, amount, and optional promo codes.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" winc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" paymentAmount"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" quotedPaymentAmount"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" adjustments "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getWincForFiat")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n amount"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("USD")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n promoCodes"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"MY_PROMO_CODE"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// promo codes require an authenticated client")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("h4",{attrs:{id:"createcheckoutsession-amount-owner-promocodes"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#createcheckoutsession-amount-owner-promocodes"}},[t._v("#")]),t._v(" "),s("code",[t._v("createCheckoutSession({ amount, owner, promoCodes })")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("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.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" winc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" paymentAmount"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" quotedPaymentAmount"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" adjustments "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("createCheckoutSession")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n amount"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("USD")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// $10.00 USD")]),t._v("\n owner"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" publicArweaveAddress"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n promoCodes"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"MY_PROMO_CODE"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// promo codes require an authenticated client")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Open checkout session in a browser")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("process"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("platform "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("===")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"darwin"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// macOS")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("exec")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token template-string"}},[s("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("open ")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("url"),s("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("process"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("platform "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("===")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"win32"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Windows")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("exec")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token template-string"}},[s("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('start "" "')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("url"),s("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" shell"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Linux/Unix")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("open")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])])]),t._v(" "),s("h4",{attrs:{id:"uploadfile-filestreamfactory-filesizefactory-signal"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#uploadfile-filestreamfactory-filesizefactory-signal"}},[t._v("#")]),t._v(" "),s("code",[t._v("uploadFile({ fileStreamFactory, fileSizeFactory, signal })")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Signs and uploads a raw file. The provided "),s("code",[t._v("fileStreamFactory")]),t._v(" should produce a NEW file data stream each time is it invoked. The "),s("code",[t._v("fileSizeFactory")]),t._v(" is a function that returns the size of the file. The "),s("code",[t._v("signal")]),t._v(" is an optional "),s("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal",target:"_blank",rel:"noopener noreferrer"}},[t._v("AbortSignal"),s("OutboundLink")],1),t._v(" that can be used to cancel the upload or timeout the request. "),s("code",[t._v("dataItemOpts")]),t._v(" is an optional object that can be used to configure tags, target, and anchor for the data item upload.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" filePath "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("join")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("__dirname"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./my-unsigned-file.txt"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" fileSize "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" fs"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("stateSync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("filePath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("size"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" uploadResult "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("uploadFile")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("fileStreamFactory")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" fs"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("createReadStream")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("filePath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("fileSizeFactory")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" fileSize"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n dataItemOpts"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional")]),t._v("\n tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Content-Type"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"text/plain"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"My-Custom-Tag"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"my-custom-value"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// no timeout or AbortSignal provided")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("h4",{attrs:{id:"uploadfolder-folderpath-files-dataitemopts-signal-maxconcurrentuploads-throwonfailure-manifestoptions"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#uploadfolder-folderpath-files-dataitemopts-signal-maxconcurrentuploads-throwonfailure-manifestoptions"}},[t._v("#")]),t._v(" "),s("code",[t._v("uploadFolder({ folderPath, files, dataItemOpts, signal, maxConcurrentUploads, throwOnFailure, manifestOptions})")])]),t._v(" "),s("ul",[s("li",[t._v("Signs and uploads a folder of files. For NodeJS, the "),s("code",[t._v("folderPath")]),t._v(" of the folder to upload is required.")]),t._v(" "),s("li",[t._v("For the browser, an array of "),s("code",[t._v("files")]),t._v(" is required.")]),t._v(" "),s("li",[t._v("The "),s("code",[t._v("dataItemOpts")]),t._v(" is an optional object that can be used to configure tags, target, and anchor for the data item upload.")]),t._v(" "),s("li",[t._v("The "),s("code",[t._v("signal")]),t._v(" is an optional "),s("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal",target:"_blank",rel:"noopener noreferrer"}},[t._v("AbortSignal"),s("OutboundLink")],1),t._v(" that can be used to cancel the upload or timeout the request.")]),t._v(" "),s("li",[t._v("The "),s("code",[t._v("maxConcurrentUploads")]),t._v(" is an optional number that can be used to limit the number of concurrent uploads.")]),t._v(" "),s("li",[t._v("The "),s("code",[t._v("throwOnFailure")]),t._v(" is an optional boolean that can be used to throw an error if any upload fails.")]),t._v(" "),s("li",[t._v("The "),s("code",[t._v("manifestOptions")]),t._v(" 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.")])]),t._v(" "),s("p",[t._v("NodeJS Upload Folder")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" folderPath "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("join")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("__dirname"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'./my-folder'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" manifest"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" fileResponses"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" manifestResponse "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("uploadFolder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n folderPath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n dataItemOpts"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional")]),t._v("\n tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// User defined content type will overwrite file content type")]),t._v("\n name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Content-Type'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'text/plain'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Custom-Tag'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'my-custom-value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// no timeout or AbortSignal provided")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n manifestOptions"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional")]),t._v("\n indexFile"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'custom-index.html'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n fallbackFile"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'custom-fallback.html'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n disableManifests"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[t._v("Browser Upload Folder")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("input type"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"file"')]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"folder"')]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"folder"')]),t._v(" webkitdirectory "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("script type"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"module"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" folderInput "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" document"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getElementById")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'folder'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n folderInput"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("addEventListener")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'change'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("event"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" selectedFiles "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" folderInput"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("files"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Folder selected:'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" selectedFiles"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" manifest"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" fileResponses"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" manifestResponse "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("uploadFolder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n files"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Array")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("from")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("selectedFiles"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("map")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("file"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" file"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("manifest"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" fileResponses"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" manifestResponse"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("script"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n")])])]),s("h4",{attrs:{id:"topupwithtokens-tokenamount-feemultiplier"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#topupwithtokens-tokenamount-feemultiplier"}},[t._v("#")]),t._v(" "),s("code",[t._v("topUpWithTokens({ tokenAmount, feeMultiplier })")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("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.")]),t._v(" "),s("ul",[s("li",[t._v("The "),s("code",[t._v("tokenAmount")]),t._v(" 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.\n"),s("ul",[s("li",[t._v("Note: As of release 1.5.0, only AR tokens are supported with "),s("code",[t._v("topUpWithTokens")]),t._v(".")])])]),t._v(" "),s("li",[t._v("The "),s("code",[t._v("feeMultiplier")]),t._v(" (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.")])]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("authenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" token"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"arweave"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" winc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" status"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("fundResult "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("topUpWithTokens")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n tokenAmount"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("WinstonToTokenAmount")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100_000_000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 0.0001 AR")]),t._v("\n feeMultiplier"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 10% increase in reward for improved mining chances")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Top up ETH tokens to ETH wallet")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("authenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" token"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ethereum"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" winc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" status"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("fundResult "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("topUpWithTokens")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n tokenAmount"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("ETHToTokenAmount")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.00001")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 0.00001 ETH")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Top up Sol tokens to SOL wallet")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("authenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" token"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"solana"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" winc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" status"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("fundResult "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("topUpWithTokens")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n tokenAmount"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("SOLToTokenAmount")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.00001")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 0.00001 SOL")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("h2",{attrs:{id:"developers"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#developers"}},[t._v("#")]),t._v(" Developers")]),t._v(" "),s("h3",{attrs:{id:"requirements"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),s("ul",[s("li",[s("code",[t._v("nvm")])]),t._v(" "),s("li",[s("code",[t._v("node")]),t._v(" (>= 18)")]),t._v(" "),s("li",[s("code",[t._v("yarn")])])]),t._v(" "),s("h3",{attrs:{id:"setup-build"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#setup-build"}},[t._v("#")]),t._v(" Setup & Build")]),t._v(" "),s("ul",[s("li",[s("code",[t._v("yarn install")]),t._v(" - installs dependencies")]),t._v(" "),s("li",[s("code",[t._v("yarn build")]),t._v(" - builds web/node/bundled outputs")])]),t._v(" "),s("h3",{attrs:{id:"testing"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#testing"}},[t._v("#")]),t._v(" Testing")]),t._v(" "),s("ul",[s("li",[s("code",[t._v("yarn test")]),t._v(" - runs integration tests against dev environment (e.g. "),s("code",[t._v("https://payment.ardrive.dev")]),t._v(" and "),s("code",[t._v("https://upload.ardrive.dev")]),t._v(")")]),t._v(" "),s("li",[s("code",[t._v("yarn test:docker")]),t._v(" - runs integration tests against locally running docker containers (recommended)")]),t._v(" "),s("li",[s("code",[t._v("yarn example:web")]),t._v(" - opens up the example web page")]),t._v(" "),s("li",[s("code",[t._v("yarn example:cjs")]),t._v(" - runs example CJS node script")]),t._v(" "),s("li",[s("code",[t._v("yarn example:esm")]),t._v(" - runs example ESM node script")])]),t._v(" "),s("h3",{attrs:{id:"linting-formatting"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#linting-formatting"}},[t._v("#")]),t._v(" Linting & Formatting")]),t._v(" "),s("ul",[s("li",[s("code",[t._v("yarn lint:check")]),t._v(" - checks for linting errors")]),t._v(" "),s("li",[s("code",[t._v("yarn lint:fix")]),t._v(" - fixes linting errors")]),t._v(" "),s("li",[s("code",[t._v("yarn format:check")]),t._v(" - checks for formatting errors")]),t._v(" "),s("li",[s("code",[t._v("yarn format:fix")]),t._v(" - fixes formatting errors")])]),t._v(" "),s("h3",{attrs:{id:"architecture"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#architecture"}},[t._v("#")]),t._v(" Architecture")]),t._v(" "),s("ul",[s("li",[t._v("Code to interfaces.")]),t._v(" "),s("li",[t._v("Prefer type safety over runtime safety.")]),t._v(" "),s("li",[t._v("Prefer composition over inheritance.")]),t._v(" "),s("li",[t._v("Prefer integration tests over unit tests.")])]),t._v(" "),s("h2",{attrs:{id:"contributions"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#contributions"}},[t._v("#")]),t._v(" Contributions")]),t._v(" "),s("p",[t._v("If you encounter any issues or have feature requests, please file an issue on our GitHub repository. Contributions, pull requests, and feedback are both welcome and encouraged.")]),t._v(" "),s("p",[t._v("For more information on how to contribute, please see "),s("a",{attrs:{href:"https://github.com/ardriveapp/turbo-sdk/blob/main/CONTRIBUTING.md",target:"_blank",rel:"noopener noreferrer"}},[t._v("CONTRIBUTING.md"),s("OutboundLink")],1),t._v(".")])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[42],{337:function(t,s,a){"use strict";a.r(s);var n=a(10),e=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"ardriveapp-turbo-sdk-🚀"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#ardriveapp-turbo-sdk-🚀"}},[t._v("#")]),t._v(" @ardriveapp/turbo-sdk 🚀")]),t._v(" "),s("p",[t._v("Welcome to the "),s("code",[t._v("@ardrive/turbo-sdk")]),t._v("! This SDK provides functionality for interacting with the Turbo Upload and Payment Services and is available for both NodeJS and Web environments.")]),t._v(" "),s("h2",{attrs:{id:"installation"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[t._v("#")]),t._v(" Installation")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" @ardrive/turbo-sdk\n")])])]),s("p",[t._v("or")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("yarn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("add")]),t._v(" @ardrive/turbo-sdk\n")])])]),s("h2",{attrs:{id:"quick-start"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#quick-start"}},[t._v("#")]),t._v(" Quick Start")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ArweaveSigner "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'@ardrive/turbo-sdk'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// load your JWK directly to authenticate")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" jwk "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" fs"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("readFileSync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'./my-jwk.json'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" address "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" arweave"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("wallets"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("jwkToAddress")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jwk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("authenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" privateKey"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" jwk "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// or provide your own signer")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" signer "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArweaveSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jwk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("authenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// get the wallet balance")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" winc"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" balance "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getBalance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// prep file for upload")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" filePath "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("join")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("__dirname"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'./my-image.png'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" fileSize "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" fs"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("statSync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("filePath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("size"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// get the cost of uploading the file")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" winc"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" fileSizeCost "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getUploadCosts")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n bytes"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("fileSize"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// check if balance greater than upload cost")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("balance "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" fileSizeCost"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" url "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("createCheckoutSession")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n amount"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" fileSizeCost"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n owner"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// add a promo code if you have one")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// open the URL to top-up, continue when done")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("open")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// upload the file")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" owner"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dataCaches"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" fastFinalityIndexes "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("uploadFile")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("fileStreamFactory")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" fs"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("createReadStream")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("filePath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("fileSizeFactory")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" fileSize"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// upload complete!")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Successfully upload data item!'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" owner"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dataCaches"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" fastFinalityIndexes "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("error"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// upload failed")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("error")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Failed to upload data item!'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" error"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("finally")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" winc"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" newBalance "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getBalance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'New balance:'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" newBalance"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h2",{attrs:{id:"usage"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#usage"}},[t._v("#")]),t._v(" Usage")]),t._v(" "),s("p",[t._v("The SDK is provided in both CommonJS and ESM formats, and it's compatible with bundlers such as Webpack, Rollup, and ESbuild. Utilize the appropriate named exports provided by this SDK's "),s("a",{attrs:{href:"https://github.com/ardriveapp/turbo-sdk/blob/main/package.json",target:"_blank",rel:"noopener noreferrer"}},[t._v("package.json"),s("OutboundLink")],1),t._v(" based on your project's configuration. Refer to the "),s("a",{attrs:{href:"https://github.com/ardriveapp/turbo-sdk/tree/main/examples",target:"_blank",rel:"noopener noreferrer"}},[t._v("examples"),s("OutboundLink")],1),t._v(" directory to see how to use the SDK in various environments.")]),t._v(" "),s("h3",{attrs:{id:"web"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#web"}},[t._v("#")]),t._v(" Web")]),t._v(" "),s("h4",{attrs:{id:"bundlers-webpack-rollup-esbuild-etc"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#bundlers-webpack-rollup-esbuild-etc"}},[t._v("#")]),t._v(" Bundlers (Webpack, Rollup, ESbuild, etc.)")]),t._v(" "),s("p",[t._v("CommonJS:")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" TurboFactory "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@ardrive/turbo-sdk"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unauthenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" rates "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getFiatRates")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[t._v("ESM:")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" TurboFactory "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@ardrive/turbo-sdk/"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unauthenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" rates "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getFiatRates")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[t._v("Browser:")]),t._v(" "),s("div",{staticClass:"language-html extra-class"},[s("pre",{pre:!0,attrs:{class:"language-html"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("module"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token script"}},[s("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" TurboFactory "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https://unpkg.com/@ardrive/turbo-sdk"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unauthenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" rates "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getFiatRates")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),s("h3",{attrs:{id:"nodejs"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#nodejs"}},[t._v("#")]),t._v(" NodeJS")]),t._v(" "),s("h4",{attrs:{id:"commonjs"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#commonjs"}},[t._v("#")]),t._v(" CommonJS")]),t._v(" "),s("p",[t._v("Project's "),s("code",[t._v("package.json")]),t._v(":")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"commonjs"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"scripts"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"test"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ts-node ./index.ts"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"dependencies"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"@ardrive/turbo-sdk"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"latest"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"arweave"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"^1.14.4"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"typescript"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"^5.4.2"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"devDependencies"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"ts-node"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"^10.9.2"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("Project's "),s("code",[t._v("tsconfig.json")]),t._v(":")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"compilerOptions"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"module"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"CommonJS"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"moduleResolution"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"node"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"target"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ES2021"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"esModuleInterop"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"include"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./index.ts"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"exclude"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"node_modules"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("Usage:")]),t._v(" "),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("USD")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n WinstonToTokenAmount"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n developmentTurboConfiguration"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@ardrive/turbo-sdk"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" Arweave "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"arweave"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" fs "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fs"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" path "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"path"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Generate a key from the arweave wallet.\n */")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" arweave "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Arweave")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" jwk "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" arweave"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("wallets"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("generate")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Use the arweave key to create an authenticated turbo client\n */")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turboAuthClient "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("authenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("privateKey")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" jwk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("developmentTurboConfiguration"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Fetch the balance for the private key.\n */")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" balance "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turboAuthClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getBalance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n console"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Balance:"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" balance"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Fetch the estimated amount of winc returned for 10 USD (1000 cents).\n */")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" estimatedWinc "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turboAuthClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getWincForFiat")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("amount")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("USD")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n console"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"10 USD to winc:"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" estimatedWinc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Post local files to the Turbo service.\n */")]),t._v("\n console"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Posting raw file to Turbo service..."')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" filePath "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("join")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("__dirname"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../../files/1KB_file"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" fileSize "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" fs"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("statSync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("filePath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("size"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" uploadResult "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turboAuthClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("uploadFile")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("fileStreamFactory")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" fs"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("createReadStream")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("filePath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("fileSizeFactory")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" fileSize"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("signal")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" AbortSignal"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("timeout")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10_000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// cancel the upload after 10 seconds")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n console"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("JSON")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("stringify")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("uploadResult"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Tops up a wallet with Credits using tokens.\n * Default token is AR, using Winston as the unit.\n */")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" topUpResult "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turboAuthClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("topUpWithTokens")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("tokenAmount")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("WinstonToTokenAmount")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100_000_000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 0.0001 AR")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n console"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("JSON")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("stringify")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("topUpResult"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"esm"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#esm"}},[t._v("#")]),t._v(" ESM")]),t._v(" "),s("p",[t._v("Project's "),s("code",[t._v("package.json")]),t._v(":")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"module"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"scripts"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"test"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ts-node ./index.ts"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"dependencies"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"@ardrive/turbo-sdk"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"latest"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"arweave"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"^1.14.4"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"devDependencies"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"ts-node"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"^10.9.2"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("Project's "),s("code",[t._v("tsconfig.json")]),t._v(":")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"compilerOptions"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"module"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"NodeNext"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"moduleResolution"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"NodeNext"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"target"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ESNext"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"include"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./index.ts"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"exclude"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"node_modules"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"ts-node"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"esm"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("Usage:")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// or use @ardrive/turbo-sdk/web depending on your environment")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("USD")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n WinstonToTokenAmount"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n developmentTurboConfiguration"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@ardrive/turbo-sdk/node"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" Arweave "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"arweave"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" fs "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fs"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Generate a key from the arweave wallet.\n */")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" arweave "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Arweave")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" jwk "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" arweave"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("wallets"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("generate")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Use the arweave key to create an authenticated turbo client\n */")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turboAuthClient "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("authenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n privateKey"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" jwk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("developmentTurboConfiguration"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Fetch the balance for the private key.\n */")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" balance "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turboAuthClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getBalance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Balance:"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" balance"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Fetch the estimated amount of winc returned for 10 USD (1000 cents).\n */")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" estimatedWinc "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turboAuthClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getWincForFiat")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n amount"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("USD")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"10 USD to winc:"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" estimatedWinc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Post local files to the Turbo service.\n */")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Posting raw file to Turbo service..."')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" filePath "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("URL")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../../files/1KB_file"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("meta"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pathname"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" fileSize "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" fs"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("statSync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("filePath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("size"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" uploadResult "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turboAuthClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("uploadFile")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("fileStreamFactory")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" fs"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("createReadStream")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("filePath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("fileSizeFactory")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" fileSize"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n signal"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" AbortSignal"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("timeout")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10_000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// cancel the upload after 10 seconds")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("JSON")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("stringify")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("uploadResult"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Tops up a wallet with Credits using tokens.\n * Default token is AR, using Winston as the unit.\n */")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" topUpResult "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turboAuthClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("topUpWithTokens")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n tokenAmount"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("WinstonToTokenAmount")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100_000_000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 0.0001 AR")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("JSON")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("stringify")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("topUpResult"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h3",{attrs:{id:"typescript"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#typescript"}},[t._v("#")]),t._v(" Typescript")]),t._v(" "),s("p",[t._v("The SDK provides TypeScript types. When you import the SDK in a TypeScript project:")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" TurboFactory "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@ardrive/turbo-sdk/web"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// or '@ardrive/turbo-sdk/node' for Node.js projects")]),t._v("\n")])])]),s("p",[t._v("Types are exported from "),s("code",[t._v("./lib/types/[node/web]/index.d.ts")]),t._v(" and should be automatically recognized, offering benefits such as type-checking and autocompletion.")]),t._v(" "),s("p",[t._v("Examples:")]),t._v(" "),s("p",[t._v("Examples are available in the "),s("a",{attrs:{href:"https://github.com/ardriveapp/turbo-sdk/tree/main/examples",target:"_blank",rel:"noopener noreferrer"}},[t._v("examples"),s("OutboundLink")],1),t._v(" directory. To run examples:")]),t._v(" "),s("ul",[s("li",[s("code",[t._v("yarn example:web")]),t._v(" - opens up the example web page")]),t._v(" "),s("li",[s("code",[t._v("yarn example:cjs")]),t._v(" - runs example CJS node script")]),t._v(" "),s("li",[s("code",[t._v("yarn example:esm")]),t._v(" - runs example ESM node script")])]),t._v(" "),s("h2",{attrs:{id:"apis"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#apis"}},[t._v("#")]),t._v(" APIs")]),t._v(" "),s("h3",{attrs:{id:"turbofactory"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#turbofactory"}},[t._v("#")]),t._v(" TurboFactory")]),t._v(" "),s("h4",{attrs:{id:"unauthenticated"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#unauthenticated"}},[t._v("#")]),t._v(" "),s("code",[t._v("unauthenticated()")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Creates an instance of a client that accesses Turbo's unauthenticated services.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unauthenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("h4",{attrs:{id:"authenticated"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#authenticated"}},[t._v("#")]),t._v(" "),s("code",[t._v("authenticated()")])]),t._v(" "),s("p",[t._v("Creates an instance of a client that accesses Turbo's authenticated and unauthenticated services. Requires either a signer, or private key to be provided.")]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Construct Turbo with an Arweave JWK")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" jwk "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" arweave"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("crypto"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("generateJWK")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("authenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" privateKey"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" jwk "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Construct Turbo with an Arweave signer")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" signer "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArweaveSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jwk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("authenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Construct Turbo with an Arconnect signer")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" signer "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArweaveSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jwk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("authenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Construct Turbo with an ETH signer")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" signer "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArconnectSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("window"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("arweaveWallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("authenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Construct Turbo with an ETH private key")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("authenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n privateKey"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" ethHexadecimalPrivateKey"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n token"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ethereum"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Construct Turbo with a HexSolanaSigner")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" signer "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("HexSolanaSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("bs58"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("encode")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("secretKey"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("authenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Construct Turbo with a SOL secret Key")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("authenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n privateKey"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" bs58"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("encode")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("secretKey"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n token"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"solana"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("KYVE Private Key")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("authenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n privateKey"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" kyveHexadecimalPrivateKey"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n token"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'kyve'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("KYVE Mnemonic")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" privateKeyFromKyveMnemonic "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'@ardrive/turbo-sdk'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("authenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n privateKey"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("privateKeyFromKyveMnemonic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("mnemonic"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n token"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'kyve'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("h3",{attrs:{id:"turbounauthenticatedclient"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#turbounauthenticatedclient"}},[t._v("#")]),t._v(" TurboUnauthenticatedClient")]),t._v(" "),s("h4",{attrs:{id:"getsupportedcurrencies"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getsupportedcurrencies"}},[t._v("#")]),t._v(" "),s("code",[t._v("getSupportedCurrencies()")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("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).")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" currencies "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getSupportedCurrencies")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("h4",{attrs:{id:"getsupportedcountries"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getsupportedcountries"}},[t._v("#")]),t._v(" "),s("code",[t._v("getSupportedCountries()")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Returns the list of countries supported by the Turbo Payment Service's top up workflow.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" countries "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getSupportedCountries")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("h4",{attrs:{id:"getfiattoar-currency"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getfiattoar-currency"}},[t._v("#")]),t._v(" "),s("code",[t._v("getFiatToAR({ currency })")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Returns the current raw fiat to AR conversion rate for a specific currency as reported by third-party pricing oracles.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" fiatToAR "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getFiatToAR")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" currency"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"USD"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("h4",{attrs:{id:"getfiatrates"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getfiatrates"}},[t._v("#")]),t._v(" "),s("code",[t._v("getFiatRates()")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Returns the current fiat rates for 1 GiB of data for supported currencies, including all top-up adjustments and fees.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" rates "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getFiatRates")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("h4",{attrs:{id:"getwincforfiat-amount"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getwincforfiat-amount"}},[t._v("#")]),t._v(" "),s("code",[t._v("getWincForFiat({ amount })")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Returns the current amount of Winston Credits including all adjustments for the provided fiat currency, amount. To leverage promo codes, see "),s("a",{attrs:{href:"#turboauthenticatedclient"}},[t._v("TurboAuthenticatedClient")]),t._v(".")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" winc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" paymentAmount"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" quotedPaymentAmount"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" adjustments "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getWincForFiat")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n amount"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("USD")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// promo codes require an authenticated client")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("h4",{attrs:{id:"getuploadcosts-bytes"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getuploadcosts-bytes"}},[t._v("#")]),t._v(" "),s("code",[t._v("getUploadCosts({ bytes })")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Returns the estimated cost in Winston Credits for the provided file sizes, including all upload adjustments and fees.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("uploadCostForFile"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getUploadCosts")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" bytes"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1024")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" winc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" adjustments "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" uploadCostForFile"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("h4",{attrs:{id:"uploadsigneddataitem-dataitemstreamfactory-dataitemsizefactory-signal"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#uploadsigneddataitem-dataitemstreamfactory-dataitemsizefactory-signal"}},[t._v("#")]),t._v(" "),s("code",[t._v("uploadSignedDataItem({ dataItemStreamFactory, dataItemSizeFactory, signal })")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Uploads a signed data item. The provided "),s("code",[t._v("dataItemStreamFactory")]),t._v(" should produce a NEW signed data item stream each time is it invoked. The "),s("code",[t._v("dataItemSizeFactory")]),t._v(" is a function that returns the size of the file. The "),s("code",[t._v("signal")]),t._v(" is an optional "),s("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal",target:"_blank",rel:"noopener noreferrer"}},[t._v("AbortSignal"),s("OutboundLink")],1),t._v(" that can be used to cancel the upload or timeout the request.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" filePath "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("join")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("__dirname"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./my-signed-data-item"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" dataItemSize "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" fs"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("statSync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("filePath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("size"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" uploadResponse "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("uploadSignedDataItem")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("dataItemStreamFactory")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" fs"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("createReadStream")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("filePath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("dataItemSizeFactory")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" dataItemSize"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n signal"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" AbortSignal"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("timeout")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10_000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// cancel the upload after 10 seconds")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("h4",{attrs:{id:"createcheckoutsession-amount-owner"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#createcheckoutsession-amount-owner"}},[t._v("#")]),t._v(" "),s("code",[t._v("createCheckoutSession({ amount, owner })")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("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 "),s("a",{attrs:{href:"#turboauthenticatedclient"}},[t._v("TurboAuthenticatedClient")]),t._v(".")])]),t._v(" "),s("li",[s("p",[t._v("Arweave (AR) Fiat Top UP")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" winc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" paymentAmount"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" quotedPaymentAmount"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" adjustments "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("createCheckoutSession")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n amount"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("USD")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// $10.00 USD")]),t._v("\n owner"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" publicArweaveAddress"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// promo codes require an authenticated client")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Open checkout session in a browser")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("process"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("platform "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("===")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'darwin'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// macOS")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("exec")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token template-string"}},[s("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("open ")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("url"),s("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("process"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("platform "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("===")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'win32'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Windows")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("exec")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token template-string"}},[s("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('start "" "')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("url"),s("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" shell"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Linux/Unix")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("open")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Ethereum (ETH) Fiat Top Up")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unauthenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" token"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ethereum'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" winc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" paymentAmount "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("createCheckoutSession")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n amount"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("USD")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// $10.00 USD")]),t._v("\n owner"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" publicEthereumAddress"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Solana (SOL) Top Up")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unauthenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" token"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'solana'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" winc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" paymentAmount "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("createCheckoutSession")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n amount"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("USD")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// $10.00 USD")]),t._v("\n owner"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" publicSolanaAddress"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("KYVE Fiat Top Up")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unauthenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" token"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'kyve'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" winc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" paymentAmount "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("createCheckoutSession")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n amount"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("USD")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// $10.00 USD")]),t._v("\n owner"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" publicKyveAddress"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("h4",{attrs:{id:"submitfundtransaction-txid"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#submitfundtransaction-txid"}},[t._v("#")]),t._v(" "),s("code",[t._v("submitFundTransaction({ txId})")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Submits the transaction ID of a funding transaction to Turbo Payment Service for top up processing. The "),s("code",[t._v("txId")]),t._v(" is the transaction ID of the transaction to be submitted.")]),t._v(" "),s("ul",[s("li",[t._v("Note: use this API if you've already executed your token transfer to the Turbo wallet. Otherwise, consider using "),s("code",[t._v("topUpWithTokens")]),t._v(" to execute a new token transfer to the Turbo wallet and submit its resulting transaction ID for top up processing all in one go.")])]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unauthenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// defaults to arweave token type")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token class-name"}},[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" status"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("fundResult "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("submitFundTransaction")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n txId"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"my-valid-arweave-fund-transaction-id"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("h3",{attrs:{id:"turboauthenticatedclient"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#turboauthenticatedclient"}},[t._v("#")]),t._v(" TurboAuthenticatedClient")]),t._v(" "),s("h4",{attrs:{id:"getbalance"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getbalance"}},[t._v("#")]),t._v(" "),s("code",[t._v("getBalance()")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Issues a signed request to get the credit balance of a wallet measured in AR (measured in Winston Credits, or winc).")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" winc"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" balance "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getBalance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("h4",{attrs:{id:"signer-getnativeaddress"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#signer-getnativeaddress"}},[t._v("#")]),t._v(" "),s("code",[t._v("signer.getNativeAddress()")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Returns the native address of the connected signer.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" address "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("signer"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getNativeAddress")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("h4",{attrs:{id:"getwincforfiat-amount-promocodes"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getwincforfiat-amount-promocodes"}},[t._v("#")]),t._v(" "),s("code",[t._v("getWincForFiat({ amount, promoCodes })")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Returns the current amount of Winston Credits including all adjustments for the provided fiat currency, amount, and optional promo codes.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" winc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" paymentAmount"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" quotedPaymentAmount"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" adjustments "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getWincForFiat")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n amount"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("USD")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n promoCodes"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"MY_PROMO_CODE"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// promo codes require an authenticated client")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("h4",{attrs:{id:"createcheckoutsession-amount-owner-promocodes"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#createcheckoutsession-amount-owner-promocodes"}},[t._v("#")]),t._v(" "),s("code",[t._v("createCheckoutSession({ amount, owner, promoCodes })")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("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.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" winc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" paymentAmount"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" quotedPaymentAmount"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" adjustments "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("createCheckoutSession")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n amount"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("USD")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// $10.00 USD")]),t._v("\n owner"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" publicArweaveAddress"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n promoCodes"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'MY_PROMO_CODE'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// promo codes require an authenticated client")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Open checkout session in a browser")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("process"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("platform "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("===")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'darwin'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// macOS")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("exec")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token template-string"}},[s("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("open ")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("url"),s("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("process"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("platform "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("===")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'win32'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Windows")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("exec")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token template-string"}},[s("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('start "" "')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("url"),s("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" shell"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Linux/Unix")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("open")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])])]),t._v(" "),s("h4",{attrs:{id:"uploadfile-filestreamfactory-filesizefactory-signal"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#uploadfile-filestreamfactory-filesizefactory-signal"}},[t._v("#")]),t._v(" "),s("code",[t._v("uploadFile({ fileStreamFactory, fileSizeFactory, signal })")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Signs and uploads a raw file. The provided "),s("code",[t._v("fileStreamFactory")]),t._v(" should produce a NEW file data stream each time is it invoked. The "),s("code",[t._v("fileSizeFactory")]),t._v(" is a function that returns the size of the file. The "),s("code",[t._v("signal")]),t._v(" is an optional "),s("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal",target:"_blank",rel:"noopener noreferrer"}},[t._v("AbortSignal"),s("OutboundLink")],1),t._v(" that can be used to cancel the upload or timeout the request. "),s("code",[t._v("dataItemOpts")]),t._v(" is an optional object that can be used to configure tags, target, and anchor for the data item upload.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" filePath "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("join")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("__dirname"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./my-unsigned-file.txt"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" fileSize "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" fs"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("stateSync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("filePath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("size"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" uploadResult "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("uploadFile")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("fileStreamFactory")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" fs"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("createReadStream")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("filePath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("fileSizeFactory")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" fileSize"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n dataItemOpts"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional")]),t._v("\n tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Content-Type"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"text/plain"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"My-Custom-Tag"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"my-custom-value"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// no timeout or AbortSignal provided")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("h4",{attrs:{id:"uploadfolder-folderpath-files-dataitemopts-signal-maxconcurrentuploads-throwonfailure-manifestoptions"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#uploadfolder-folderpath-files-dataitemopts-signal-maxconcurrentuploads-throwonfailure-manifestoptions"}},[t._v("#")]),t._v(" "),s("code",[t._v("uploadFolder({ folderPath, files, dataItemOpts, signal, maxConcurrentUploads, throwOnFailure, manifestOptions})")])]),t._v(" "),s("ul",[s("li",[t._v("Signs and uploads a folder of files. For NodeJS, the "),s("code",[t._v("folderPath")]),t._v(" of the folder to upload is required.")]),t._v(" "),s("li",[t._v("For the browser, an array of "),s("code",[t._v("files")]),t._v(" is required.")]),t._v(" "),s("li",[t._v("The "),s("code",[t._v("dataItemOpts")]),t._v(" is an optional object that can be used to configure tags, target, and anchor for the data item upload.")]),t._v(" "),s("li",[t._v("The "),s("code",[t._v("signal")]),t._v(" is an optional "),s("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal",target:"_blank",rel:"noopener noreferrer"}},[t._v("AbortSignal"),s("OutboundLink")],1),t._v(" that can be used to cancel the upload or timeout the request.")]),t._v(" "),s("li",[t._v("The "),s("code",[t._v("maxConcurrentUploads")]),t._v(" is an optional number that can be used to limit the number of concurrent uploads.")]),t._v(" "),s("li",[t._v("The "),s("code",[t._v("throwOnFailure")]),t._v(" is an optional boolean that can be used to throw an error if any upload fails.")]),t._v(" "),s("li",[t._v("The "),s("code",[t._v("manifestOptions")]),t._v(" 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.")])]),t._v(" "),s("p",[t._v("NodeJS Upload Folder")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" folderPath "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("join")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("__dirname"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'./my-folder'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" manifest"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" fileResponses"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" manifestResponse "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("uploadFolder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n folderPath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n dataItemOpts"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional")]),t._v("\n tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// User defined content type will overwrite file content type")]),t._v("\n name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Content-Type'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'text/plain'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Custom-Tag'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'my-custom-value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// no timeout or AbortSignal provided")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n manifestOptions"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional")]),t._v("\n indexFile"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'custom-index.html'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n fallbackFile"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'custom-fallback.html'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n disableManifests"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[t._v("Browser Upload Folder")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("input type"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"file"')]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"folder"')]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"folder"')]),t._v(" webkitdirectory "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("script type"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"module"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" folderInput "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" document"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getElementById")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'folder'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n folderInput"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("addEventListener")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'change'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("event"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" selectedFiles "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" folderInput"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("files"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Folder selected:'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" selectedFiles"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" manifest"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" fileResponses"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" manifestResponse "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("uploadFolder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n files"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Array")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("from")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("selectedFiles"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("map")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("file"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" file"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("manifest"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" fileResponses"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" manifestResponse"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("script"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n")])])]),s("h4",{attrs:{id:"topupwithtokens-tokenamount-feemultiplier"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#topupwithtokens-tokenamount-feemultiplier"}},[t._v("#")]),t._v(" "),s("code",[t._v("topUpWithTokens({ tokenAmount, feeMultiplier })")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("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.")]),t._v(" "),s("ul",[s("li",[t._v("The "),s("code",[t._v("tokenAmount")]),t._v(" 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.\n"),s("ul",[s("li",[t._v("Note: As of release 1.5.0, only AR tokens are supported with "),s("code",[t._v("topUpWithTokens")]),t._v(".")])])]),t._v(" "),s("li",[t._v("The "),s("code",[t._v("feeMultiplier")]),t._v(" (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.")])])]),t._v(" "),s("li",[s("p",[t._v("Arweave (AR) Crypto Top Up")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("authenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" token"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'arweave'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" winc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" status"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("fundResult "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("topUpWithTokens")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n tokenAmount"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("WinstonToTokenAmount")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100_000_000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 0.0001 AR")]),t._v("\n feeMultiplier"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 10% increase in reward for improved mining chances")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Ethereum (ETH) Crypto Top Up")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("authenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" token"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ethereum'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" winc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" status"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("fundResult "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("topUpWithTokens")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n tokenAmount"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("ETHToTokenAmount")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.00001")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 0.00001 ETH")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Solana (SOL) Top Up")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("authenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" token"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'solana'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" winc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" status"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("fundResult "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("topUpWithTokens")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n tokenAmount"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("SOLToTokenAmount")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.00001")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 0.00001 SOL")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("KYVE Crypto Top Up")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" TurboFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("authenticated")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" token"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'kyve'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" winc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" status"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("fundResult "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" turbo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("topUpWithTokens")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n tokenAmount"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("KYVEToTokenAmount")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.00001")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 0.00001 KYVE")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("h2",{attrs:{id:"cli"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#cli"}},[t._v("#")]),t._v(" CLI")]),t._v(" "),s("h3",{attrs:{id:"install-cli"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#install-cli"}},[t._v("#")]),t._v(" Install CLI")]),t._v(" "),s("p",[t._v("Global installation:")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-g")]),t._v(" @ardrive/turbo-sdk\n")])])]),s("p",[t._v("or")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("yarn")]),t._v(" global "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("add")]),t._v(" @ardrive/turbo-sdk\n")])])]),s("p",[t._v("or install locally as a dev dependency:")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" --save-dev @ardrive/turbo-sdk\n")])])]),s("p",[t._v("or")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("yarn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("add")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-D")]),t._v(" @ardrive/turbo-sdk\n")])])]),s("h3",{attrs:{id:"cli-usage"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#cli-usage"}},[t._v("#")]),t._v(" CLI Usage")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[t._v("turbo "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--help")]),t._v("\n")])])]),s("p",[t._v("or from local installation:")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("yarn")]),t._v(" turbo "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--help")]),t._v("\n")])])]),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[t._v("npx turbo "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--help")]),t._v("\n")])])]),s("h4",{attrs:{id:"options"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#options"}},[t._v("#")]),t._v(" Options")]),t._v(" "),s("ul",[s("li",[s("p",[s("code",[t._v("-V, --version")]),t._v(" - output the version number")])]),t._v(" "),s("li",[s("p",[s("code",[t._v("-h, --help")]),t._v(" - display help for command")])]),t._v(" "),s("li",[s("p",[s("code",[t._v("--dev")]),t._v(" - Enable development endpoints (default: false)")])]),t._v(" "),s("li",[s("p",[s("code",[t._v("-g, --gateway ")]),t._v(" - Set a custom crypto gateway URL")])]),t._v(" "),s("li",[s("p",[s("code",[t._v("-t, --token ")]),t._v(' - Token type for the command or connected wallet (default: "arweave")')])]),t._v(" "),s("li",[s("p",[s("code",[t._v("-w, --wallet-file ")]),t._v(" - Wallet file to use with the action. Formats accepted: JWK.json, KYVE or ETH private key as a string, or SOL Secret Key as a Uint8Array")])]),t._v(" "),s("li",[s("p",[s("code",[t._v("-m, --mnemonic ")]),t._v(" - Mnemonic to use with the action (KYVE only)")])]),t._v(" "),s("li",[s("p",[s("code",[t._v("-p, --private-key ")]),t._v(" - Private key to use with the action")])])]),t._v(" "),s("h4",{attrs:{id:"commands"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#commands"}},[t._v("#")]),t._v(" Commands")]),t._v(" "),s("h5",{attrs:{id:"crypto-fund"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#crypto-fund"}},[t._v("#")]),t._v(" "),s("code",[t._v("crypto-fund")])]),t._v(" "),s("p",[t._v("Fund a wallet with Turbo Credits by submitting a payment transaction for the crypto amount to the Turbo wallet and then submitting that transaction id to Turbo Payment Service for top up processing.")]),t._v(" "),s("p",[t._v("Command Options:")]),t._v(" "),s("ul",[s("li",[s("code",[t._v("-v, --value ")]),t._v(" - Amount of tokens in the token type's smallest unit value to fund the wallet with")])]),t._v(" "),s("p",[t._v("e.g:")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[t._v("turbo crypto-fund "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--value")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.0001")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--token")]),t._v(" kyve --private-key "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'b27...45c'")]),t._v("\n")])])]),s("h2",{attrs:{id:"developers"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#developers"}},[t._v("#")]),t._v(" Developers")]),t._v(" "),s("h3",{attrs:{id:"requirements"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),s("ul",[s("li",[s("code",[t._v("nvm")])]),t._v(" "),s("li",[s("code",[t._v("node")]),t._v(" (>= 18)")]),t._v(" "),s("li",[s("code",[t._v("yarn")])])]),t._v(" "),s("h3",{attrs:{id:"setup-build"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#setup-build"}},[t._v("#")]),t._v(" Setup & Build")]),t._v(" "),s("ul",[s("li",[s("code",[t._v("yarn install")]),t._v(" - installs dependencies")]),t._v(" "),s("li",[s("code",[t._v("yarn build")]),t._v(" - builds web/node/bundled outputs")])]),t._v(" "),s("h3",{attrs:{id:"testing"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#testing"}},[t._v("#")]),t._v(" Testing")]),t._v(" "),s("ul",[s("li",[s("code",[t._v("yarn test")]),t._v(" - runs integration tests against dev environment (e.g. "),s("code",[t._v("https://payment.ardrive.dev")]),t._v(" and "),s("code",[t._v("https://upload.ardrive.dev")]),t._v(")")]),t._v(" "),s("li",[s("code",[t._v("yarn test:docker")]),t._v(" - runs integration tests against locally running docker containers (recommended)")]),t._v(" "),s("li",[s("code",[t._v("yarn example:web")]),t._v(" - opens up the example web page")]),t._v(" "),s("li",[s("code",[t._v("yarn example:cjs")]),t._v(" - runs example CJS node script")]),t._v(" "),s("li",[s("code",[t._v("yarn example:esm")]),t._v(" - runs example ESM node script")])]),t._v(" "),s("h3",{attrs:{id:"linting-formatting"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#linting-formatting"}},[t._v("#")]),t._v(" Linting & Formatting")]),t._v(" "),s("ul",[s("li",[s("code",[t._v("yarn lint:check")]),t._v(" - checks for linting errors")]),t._v(" "),s("li",[s("code",[t._v("yarn lint:fix")]),t._v(" - fixes linting errors")]),t._v(" "),s("li",[s("code",[t._v("yarn format:check")]),t._v(" - checks for formatting errors")]),t._v(" "),s("li",[s("code",[t._v("yarn format:fix")]),t._v(" - fixes formatting errors")])]),t._v(" "),s("h3",{attrs:{id:"architecture"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#architecture"}},[t._v("#")]),t._v(" Architecture")]),t._v(" "),s("ul",[s("li",[t._v("Code to interfaces.")]),t._v(" "),s("li",[t._v("Prefer type safety over runtime safety.")]),t._v(" "),s("li",[t._v("Prefer composition over inheritance.")]),t._v(" "),s("li",[t._v("Prefer integration tests over unit tests.")])]),t._v(" "),s("h2",{attrs:{id:"contributions"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#contributions"}},[t._v("#")]),t._v(" Contributions")]),t._v(" "),s("p",[t._v("If you encounter any issues or have feature requests, please file an issue on our GitHub repository. Contributions, pull requests, and feedback are both welcome and encouraged.")]),t._v(" "),s("p",[t._v("For more information on how to contribute, please see "),s("a",{attrs:{href:"https://github.com/ardriveapp/turbo-sdk/blob/main/CONTRIBUTING.md",target:"_blank",rel:"noopener noreferrer"}},[t._v("CONTRIBUTING.md"),s("OutboundLink")],1),t._v(".")])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/43.13c41e00.js b/assets/js/43.13c41e00.js new file mode 100644 index 0000000..c250567 --- /dev/null +++ b/assets/js/43.13c41e00.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[43],{338:function(e,t,r){"use strict";r.r(t);var a=r(10),o=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"turbo-sdk-release-notes"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#turbo-sdk-release-notes"}},[e._v("#")]),e._v(" Turbo SDK Release Notes")]),e._v(" "),t("h2",{attrs:{id:"overview"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),t("p",[e._v("Welcome to the documentation page for the Turbo SDK release notes. Here, you will find detailed information about each version of the Turbo SDK, including the enhancements, bug fixes, and any other changes introduced in every release. This page serves as a comprehensive resource to keep you informed about the latest developments and updates in the Turbo SDK. For those interested in exploring the source code, each version's code is readily accessible at our GitHub repository: "),t("a",{attrs:{href:"https://github.com/ardriveapp/turbo-sdk/releases",target:"_blank",rel:"noopener noreferrer"}},[e._v("Turbo SDK Releases"),t("OutboundLink")],1),e._v(". Stay updated with the continuous improvements and advancements in the Turbo SDK by referring to this page for all release-related information.")]),e._v(" "),t("h2",{attrs:{id:"releases"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#releases"}},[e._v("#")]),e._v(" Releases")]),e._v(" "),t("h3",{attrs:{id:"_1-12-0"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_1-12-0"}},[e._v("#")]),e._v(" 1.12.0")]),e._v(" "),t("p",[e._v("(2024-08-30)")]),e._v(" "),t("p",[e._v("Features")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("balance:")]),e._v(" add an unauthenticated getBalance method PE-6630 ("),t("a",{attrs:{href:"https://github.com/ardriveapp/turbo-sdk/commit/63bb4f8b05560848a67016d08f6bbe4d3724cf74",target:"_blank",rel:"noopener noreferrer"}},[e._v("63bb4f8"),t("OutboundLink")],1),e._v(")")]),e._v(" "),t("li",[t("strong",[e._v("native address:")]),e._v(" get native address from connected signer PE-6629 ("),t("a",{attrs:{href:"https://github.com/ardriveapp/turbo-sdk/commit/7432156311811e921eff99254c4c44dfb97ca353",target:"_blank",rel:"noopener noreferrer"}},[e._v("7432156"),t("OutboundLink")],1),e._v(")")])]),e._v(" "),t("h3",{attrs:{id:"_1-11-0"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_1-11-0"}},[e._v("#")]),e._v(" 1.11.0")]),e._v(" "),t("p",[e._v("(2024-08-29)")]),e._v(" "),t("p",[e._v("Bug Fixes")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("cli:")]),e._v(" include bin/turbo in argv check PE-6449 ("),t("a",{attrs:{href:"https://github.com/ardriveapp/turbo-sdk/commit/cf575154a679ea846ff049d3390ca0cea6989a7a",target:"_blank",rel:"noopener noreferrer"}},[e._v("cf57515"),t("OutboundLink")],1),e._v(")")])]),e._v(" "),t("p",[e._v("Features")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("cli:")]),e._v(" init a turbo cli tool featuring KYVE crypto fund PE-6449 ("),t("a",{attrs:{href:"https://github.com/ardriveapp/turbo-sdk/commit/2eff402a7d759a91930d898343a0a97f1c2e9cb2",target:"_blank",rel:"noopener noreferrer"}},[e._v("2eff402"),t("OutboundLink")],1),e._v(")")]),e._v(" "),t("li",[t("strong",[e._v("kyve:")]),e._v(" add exported isTokenType helper PE-6448 ("),t("a",{attrs:{href:"https://github.com/ardriveapp/turbo-sdk/commit/bf70d596e9f3f4e31b63525ae533a166206ad736",target:"_blank",rel:"noopener noreferrer"}},[e._v("bf70d59"),t("OutboundLink")],1),e._v(")")]),e._v(" "),t("li",[t("strong",[e._v("kyve:")]),e._v(" add tokenAmountToBase map PE-6448 ("),t("a",{attrs:{href:"https://github.com/ardriveapp/turbo-sdk/commit/b2864b3ccad2b0488868b1740fbbf3bb55f1e8d0",target:"_blank",rel:"noopener noreferrer"}},[e._v("b2864b3"),t("OutboundLink")],1),e._v(")")]),e._v(" "),t("li",[t("strong",[e._v("kyve:")]),e._v(" allow kyve token type for uploads and top ups PE-6447 ("),t("a",{attrs:{href:"https://github.com/ardriveapp/turbo-sdk/commit/861d542a7198620e94c1e5210e8c18420953749e",target:"_blank",rel:"noopener noreferrer"}},[e._v("861d542"),t("OutboundLink")],1),e._v(")")]),e._v(" "),t("li",[t("strong",[e._v("kyve:")]),e._v(" init KYVE crypto fund PE-6448 ("),t("a",{attrs:{href:"https://github.com/ardriveapp/turbo-sdk/commit/120735f8f0d342d6ebbeb16c05cabcdef2ec20f9",target:"_blank",rel:"noopener noreferrer"}},[e._v("120735f"),t("OutboundLink")],1),e._v(")")]),e._v(" "),t("li",[t("strong",[e._v("kyve:")]),e._v(" update exported types PE-6448 ("),t("a",{attrs:{href:"https://github.com/ardriveapp/turbo-sdk/commit/e06608ccb49e40c8ec0df686838c8ded370c2d2a",target:"_blank",rel:"noopener noreferrer"}},[e._v("e06608c"),t("OutboundLink")],1),e._v(")")])]),e._v(" "),t("h3",{attrs:{id:"_1-10-1"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_1-10-1"}},[e._v("#")]),e._v(" 1.10.1")]),e._v(" "),t("p",[e._v("(2024-08-23)")]),e._v(" "),t("p",[e._v("Bug Fixes")]),e._v(" "),t("ul",[t("li",[e._v("expose "),t("code",[e._v("token")]),e._v(" on unauthenticated turbo factory PE-6569 ("),t("a",{attrs:{href:"https://github.com/ardriveapp/turbo-sdk/commit/7f0c44cfc319d0f303d252d0aa73f0d42a635e03",target:"_blank",rel:"noopener noreferrer"}},[e._v("7f0c44c"),t("OutboundLink")],1),e._v(")")])]),e._v(" "),t("h3",{attrs:{id:"_1-10-0"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_1-10-0"}},[e._v("#")]),e._v(" 1.10.0")]),e._v(" "),t("p",[e._v("(2024-08-15)")]),e._v(" "),t("p",[e._v("Bug Fixes")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("build:")]),e._v(" update build outputs for web and README ("),t("a",{attrs:{href:"https://github.com/ardriveapp/turbo-sdk/commit/74cce094393672b1c96b795f6d1ab642d89b1bc9",target:"_blank",rel:"noopener noreferrer"}},[e._v("74cce09"),t("OutboundLink")],1),e._v(")")]),e._v(" "),t("li",[t("strong",[e._v("logger:")]),e._v(" fix winston setImmediate issue in web export for logger ("),t("a",{attrs:{href:"https://github.com/ardriveapp/turbo-sdk/commit/481cbe6bbe05b542f498f2d68333854259e98497",target:"_blank",rel:"noopener noreferrer"}},[e._v("481cbe6"),t("OutboundLink")],1),e._v(")")]),e._v(" "),t("li",[t("strong",[e._v("upload folder:")]),e._v(" improve node exports PE-4643 ("),t("a",{attrs:{href:"https://github.com/ardriveapp/turbo-sdk/commit/a6c073bb8b8e8bebf818f08b2ae4b4613ae28c9f",target:"_blank",rel:"noopener noreferrer"}},[e._v("a6c073b"),t("OutboundLink")],1),e._v(")")]),e._v(" "),t("li",[t("strong",[e._v("upload folder:")]),e._v(" improve web exports PE-4643 ("),t("a",{attrs:{href:"https://github.com/ardriveapp/turbo-sdk/commit/4b50778707cc74b03058eddd98cf1b8818ec39c4",target:"_blank",rel:"noopener noreferrer"}},[e._v("4b50778"),t("OutboundLink")],1),e._v(")")])]),e._v(" "),t("p",[e._v("Features")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("upload folder:")]),e._v(" add manifest content type PE-4643 ("),t("a",{attrs:{href:"https://github.com/ardriveapp/turbo-sdk/commit/af35d7bb4841822b62bc892e7dcca451b436117c",target:"_blank",rel:"noopener noreferrer"}},[e._v("af35d7b"),t("OutboundLink")],1),e._v(")")]),e._v(" "),t("li",[t("strong",[e._v("upload folder:")]),e._v(" add manifestOptions with disable, index, and fallback parameters PE-4643 ("),t("a",{attrs:{href:"https://github.com/ardriveapp/turbo-sdk/commit/708ea157c17450921de2a4d64989508f52ac6a2c",target:"_blank",rel:"noopener noreferrer"}},[e._v("708ea15"),t("OutboundLink")],1),e._v(")")]),e._v(" "),t("li",[t("strong",[e._v("upload folder:")]),e._v(" add mime types for content type PE-4643 ("),t("a",{attrs:{href:"https://github.com/ardriveapp/turbo-sdk/commit/44d124006089b21f0cc7649f822e16a3c0a259e9",target:"_blank",rel:"noopener noreferrer"}},[e._v("44d1240"),t("OutboundLink")],1),e._v(")")]),e._v(" "),t("li",[t("strong",[e._v("upload folder:")]),e._v(" add throw on failure option PE-4643 ("),t("a",{attrs:{href:"https://github.com/ardriveapp/turbo-sdk/commit/a258aa6d97573233ef44a7e68c5696d19468b55c",target:"_blank",rel:"noopener noreferrer"}},[e._v("a258aa6"),t("OutboundLink")],1),e._v(")")]),e._v(" "),t("li",[t("strong",[e._v("upload folder:")]),e._v(" defer to use user defined content type on files when provided PE-4643 ("),t("a",{attrs:{href:"https://github.com/ardriveapp/turbo-sdk/commit/5d5ef899686a23adcfffcf196824bb00684ceb88",target:"_blank",rel:"noopener noreferrer"}},[e._v("5d5ef89"),t("OutboundLink")],1),e._v(")")]),e._v(" "),t("li",[t("strong",[e._v("upload folder:")]),e._v(" init web and node upload folder with manifest implementations PE-4643 ("),t("a",{attrs:{href:"https://github.com/ardriveapp/turbo-sdk/commit/70d313538cbe522995d742b923459ed39aecc84c",target:"_blank",rel:"noopener noreferrer"}},[e._v("70d3135"),t("OutboundLink")],1),e._v(")")]),e._v(" "),t("li",[t("strong",[e._v("upload folder:")]),e._v(" slice leading "),t("code",[e._v("/")]),e._v(" from relative manifest paths PE-4643 ("),t("a",{attrs:{href:"https://github.com/ardriveapp/turbo-sdk/commit/c6e3b7c961699a57a5b43626f10283dbe9d4b12e",target:"_blank",rel:"noopener noreferrer"}},[e._v("c6e3b7c"),t("OutboundLink")],1),e._v(")")]),e._v(" "),t("li",[t("strong",[e._v("upload folder:")]),e._v(" use concurrency with plimit-lit PE-4643 ("),t("a",{attrs:{href:"https://github.com/ardriveapp/turbo-sdk/commit/110a424db68cfca985303187b318e5a4b1c43b30",target:"_blank",rel:"noopener noreferrer"}},[e._v("110a424"),t("OutboundLink")],1),e._v(")")])]),e._v(" "),t("h3",{attrs:{id:"_1-9-0"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_1-9-0"}},[e._v("#")]),e._v(" 1.9.0")]),e._v(" "),t("p",[e._v("(2024-05-06)")]),e._v(" "),t("p",[e._v("Bug Fixes")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("eth payments")]),e._v(": setup ETH in default constructor, remove default wait()")])]),e._v(" "),t("p",[e._v("Features")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("eth payments")]),e._v(": init eth tx payments")])]),e._v(" "),t("h3",{attrs:{id:"_1-8-0"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_1-8-0"}},[e._v("#")]),e._v(" 1.8.0")]),e._v(" "),t("p",[e._v("(2024-05-02)")]),e._v(" "),t("p",[e._v("Features")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("solana payments")]),e._v(": init solana token tools for sol payment")])]),e._v(" "),t("h3",{attrs:{id:"_1-7-0"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_1-7-0"}},[e._v("#")]),e._v(" 1.7.0")]),e._v(" "),t("p",[e._v("(2024-04-25)")]),e._v(" "),t("p",[e._v("Features")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("upload")]),e._v(": allow eth and sol signing for upload")]),e._v(" "),t("li",[t("strong",[e._v("upload")]),e._v(": allow eth/sol signer types")])]),e._v(" "),t("h3",{attrs:{id:"_1-6-0"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_1-6-0"}},[e._v("#")]),e._v(" 1.6.0")]),e._v(" "),t("p",[e._v("(2024-04-24)")]),e._v(" "),t("p",[e._v("Features")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("top up")]),e._v(": allow eth/sol destination for fiat top up")]),e._v(" "),t("li",[t("strong",[e._v("top up")]),e._v(": allow eth/sol destination for fiat top up")])]),e._v(" "),t("h3",{attrs:{id:"v1-5-0"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#v1-5-0"}},[e._v("#")]),e._v(" V1.5.0")]),e._v(" "),t("p",[e._v("(2024-04-16)")]),e._v(" "),t("p",[e._v("Bug Fixes")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("fund with AR")]),e._v(": add web esm compatible arweave export")]),e._v(" "),t("li",[e._v("export Arconnect and ArweaveSigner from env specific signers")])]),e._v(" "),t("p",[e._v("Features")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("crypto payments")]),e._v(": Init fund methods")]),e._v(" "),t("li",[t("strong",[e._v("crypto payments")]),e._v(": Refactor arweave-js out of signer")]),e._v(" "),t("li",[t("strong",[e._v("fund with AR")]),e._v(": Add ToTokenAmount helper utils")]),e._v(" "),t("li",[t("strong",[e._v("fund with AR")]),e._v(": Catch polling error")]),e._v(" "),t("li",[t("strong",[e._v("fund with AR")]),e._v(": Continue polling on request error")]),e._v(" "),t("li",[t("strong",[e._v("fund with AR")]),e._v(": Throw no wallet found as error")]),e._v(" "),t("li",[t("strong",[e._v("signers")]),e._v(": Exports arbundles ArconnectSigner and ArweaveSigner")])]),e._v(" "),t("h3",{attrs:{id:"v1-4-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#v1-4-2"}},[e._v("#")]),e._v(" V1.4.2")]),e._v(" "),t("p",[e._v("(2024-03-15)")]),e._v(" "),t("p",[e._v("Bug Fixes")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("arbundles")]),e._v(": pin arbundles to v0.9.9 and run tests locally")])]),e._v(" "),t("h3",{attrs:{id:"v1-4-1"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#v1-4-1"}},[e._v("#")]),e._v(" V1.4.1")]),e._v(" "),t("p",[e._v("(2024-01-30)")]),e._v(" "),t("p",[e._v("Bug Fixes")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("checkout session")]),e._v(": correct query param, change type, add coverage")])]),e._v(" "),t("h3",{attrs:{id:"v1-4-0"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#v1-4-0"}},[e._v("#")]),e._v(" V1.4.0")]),e._v(" "),t("p",[e._v("(2024-01-30)")]),e._v(" "),t("p",[e._v("Features")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("ui mode")]),e._v(": support query param for checkout session ui mode")])]),e._v(" "),t("h3",{attrs:{id:"v1-3-0"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#v1-3-0"}},[e._v("#")]),e._v(" V1.3.0")]),e._v(" "),t("p",[e._v("(2024-01-03)")]),e._v(" "),t("p",[e._v("Bug Fixes")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("web")]),e._v(": ensure we have the public key for arconnect wallets when signing data")]),e._v(" "),t("li",[t("strong",[e._v("web")]),e._v(": remove reference to "),t("code",[e._v("node:crypto")]),e._v(" in websigner, use signer to signer to sign header")])]),e._v(" "),t("p",[e._v("Features")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("signer")]),e._v(": allow an optional signer to be passed instead of JWK for signing data items")])]),e._v(" "),t("h3",{attrs:{id:"v1-2-0"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#v1-2-0"}},[e._v("#")]),e._v(" V1.2.0")]),e._v(" "),t("p",[e._v("(2023-12-15)")]),e._v(" "),t("p",[e._v("Features")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("data item opts")]),e._v(": init tags anchor and target support PE-5035")])]),e._v(" "),t("h3",{attrs:{id:"v1-1-1"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#v1-1-1"}},[e._v("#")]),e._v(" V1.1.1")]),e._v(" "),t("p",[e._v("(2023-12-14)")]),e._v(" "),t("p",[e._v("Bug Fixes")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("exports")]),e._v(": use bundled export to avoid issue with polyfilled features needed for web")]),e._v(" "),t("li",[t("strong",[e._v("exports")]),e._v(": web exports reference an invalid build path")]),e._v(" "),t("li",[t("strong",[e._v("polyfills")]),e._v(": update esbuild script to include crypto polyfill")])]),e._v(" "),t("h3",{attrs:{id:"v1-1-0"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#v1-1-0"}},[e._v("#")]),e._v(" V1.1.0")]),e._v(" "),t("p",[e._v("(2023-11-10)")]),e._v(" "),t("p",[e._v("Bug Fixes")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("axios")]),e._v(": set "),t("code",[e._v("maxRedirects")]),e._v(" to "),t("code",[e._v("0")]),e._v(" on our axios instances")])]),e._v(" "),t("p",[e._v("Features")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("logger")]),e._v(": add configurable global logger")])]),e._v(" "),t("h3",{attrs:{id:"v1-0-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#v1-0-2"}},[e._v("#")]),e._v(" V1.0.2")]),e._v(" "),t("p",[e._v("(2023-11-03)")]),e._v(" "),t("p",[e._v("Bug Fixes")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("upload")]),e._v(": update the default upload service URL")])]),e._v(" "),t("h3",{attrs:{id:"v1-0-1"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#v1-0-1"}},[e._v("#")]),e._v(" V1.0.1")]),e._v(" "),t("p",[e._v("(2023-09-27)")]),e._v(" "),t("p",[e._v("Bug Fixes")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("headers")]),e._v(": add default headers for all HTTP requests")]),e._v(" "),t("li",[t("strong",[e._v("release")]),e._v(": use script that updates built version.js files")]),e._v(" "),t("li",[t("strong",[e._v("version")]),e._v(": update version.js to proper version on build and commit it back to git after a release")])]),e._v(" "),t("h3",{attrs:{id:"v1-0-0"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#v1-0-0"}},[e._v("#")]),e._v(" V1.0.0")]),e._v(" "),t("p",[e._v("(2023-09-26)")]),e._v(" "),t("p",[e._v("Bug Fixes")]),e._v(" "),t("ul",[t("li",[e._v("add command that removes type module from package.json")]),e._v(" "),t("li",[e._v("add command that removes type module from package.json")]),e._v(" "),t("li",[e._v("add main import and allow wildcard imports")]),e._v(" "),t("li",[e._v("add module to package.json and tweak types")]),e._v(" "),t("li",[e._v("add one more step to make esm useable")]),e._v(" "),t("li",[e._v("add owner to TurboUploadDataItemResponse and remove byteCount")]),e._v(" "),t("li",[e._v("add separate folder for types, use it in named exports")]),e._v(" "),t("li",[e._v("change name of public facing clients.")]),e._v(" "),t("li",[t("strong",[e._v("cjs")]),e._v(": add separate cjs and esm outputs")]),e._v(" "),t("li",[t("strong",[e._v("content-length")]),e._v(": require content length factory for uploads")]),e._v(" "),t("li",[t("strong",[e._v("exports")]),e._v(": move turbo configurations to turbo.ts so it is available to clients")]),e._v(" "),t("li",[e._v("fix package.json")]),e._v(" "),t("li",[e._v("modify return type of signDataItem function, tweak implementation of ArweaveSigner header")]),e._v(" "),t("li",[e._v("move from getWincPriceForBytes to getUploadCosts")]),e._v(" "),t("li",[t("strong",[e._v("package.json")]),e._v(": add back module to package.json")]),e._v(" "),t("li",[e._v("remove package.json from lib directory")]),e._v(" "),t("li",[e._v("remove postinstall command")]),e._v(" "),t("li",[e._v("replace retry-axios, add additional retry logic")]),e._v(" "),t("li",[t("strong",[e._v("retry-axios")]),e._v(": pin retry-axios to 3.0.0")]),e._v(" "),t("li",[e._v("revert to single file upload/data item upload")]),e._v(" "),t("li",[e._v("swap adding package.json to esm to cjs")]),e._v(" "),t("li",[t("strong",[e._v("top up")]),e._v(": export type PE-4465")]),e._v(" "),t("li",[e._v("type imports for web and node")]),e._v(" "),t("li",[t("strong",[e._v("types")]),e._v(": finalize types, update default payment and upload URLs")]),e._v(" "),t("li",[e._v("update main and types path in package.json")]),e._v(" "),t("li",[e._v("update package.json output for esm")]),e._v(" "),t("li",[e._v("update web signer and cleanup examples")]),e._v(" "),t("li",[e._v("use .cjs as base for types to avoid reference require errors")]),e._v(" "),t("li",[e._v("use declare in sub-classes to overwrite parent class type")]),e._v(" "),t("li",[t("strong",[e._v("wildcard")]),e._v(": allow wildcard exports for older projects")]),e._v(" "),t("li",[e._v("wrong path for types!")])]),e._v(" "),t("p",[e._v("Features")]),e._v(" "),t("ul",[t("li",[e._v("abstract axios to TurboHTTPService class")]),e._v(" "),t("li",[e._v("abstract JWKInterface used in AuthenticatedPayment and AuthenticatedUploadService")]),e._v(" "),t("li",[e._v("add remaining unauthenticated apis for payment service, introduce some new types, add tests")]),e._v(" "),t("li",[e._v("add uploadFiles implementation for node and web")]),e._v(" "),t("li",[e._v("break services into auth vs unauth")]),e._v(" "),t("li",[e._v("initial implementation of TurboWebClient and TurboNodeClient")]),e._v(" "),t("li",[e._v("introduce AbortController")]),e._v(" "),t("li",[e._v("introduce uploadSignedDataItem interface, implement for node")]),e._v(" "),t("li",[e._v("remove TurboDataItemVerifier")]),e._v(" "),t("li",[t("strong",[e._v("sdk")]),e._v(": all uphill from here 🚀 PE-4064")]),e._v(" "),t("li",[t("strong",[e._v("top-up")]),e._v(": init get checkout session PE-4465")]),e._v(" "),t("li",[t("strong",[e._v("winc for fiat")]),e._v(": extend AmountMapper pattern and add promoCode support PE-4465")])])])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/43.c75c4e5d.js b/assets/js/43.c75c4e5d.js deleted file mode 100644 index f6ca33a..0000000 --- a/assets/js/43.c75c4e5d.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[43],{338:function(e,t,a){"use strict";a.r(t);var r=a(10),s=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"turbo-sdk-release-notes"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#turbo-sdk-release-notes"}},[e._v("#")]),e._v(" Turbo SDK Release Notes")]),e._v(" "),t("h2",{attrs:{id:"overview"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),t("p",[e._v("Welcome to the documentation page for the Turbo SDK release notes. Here, you will find detailed information about each version of the Turbo SDK, including the enhancements, bug fixes, and any other changes introduced in every release. This page serves as a comprehensive resource to keep you informed about the latest developments and updates in the Turbo SDK. For those interested in exploring the source code, each version's code is readily accessible at our GitHub repository: "),t("a",{attrs:{href:"https://github.com/ardriveapp/turbo-sdk/releases",target:"_blank",rel:"noopener noreferrer"}},[e._v("Turbo SDK Releases"),t("OutboundLink")],1),e._v(". Stay updated with the continuous improvements and advancements in the Turbo SDK by referring to this page for all release-related information.")]),e._v(" "),t("h2",{attrs:{id:"releases"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#releases"}},[e._v("#")]),e._v(" Releases")]),e._v(" "),t("h3",{attrs:{id:"_1-9-0"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_1-9-0"}},[e._v("#")]),e._v(" 1.9.0")]),e._v(" "),t("p",[e._v("(2024-05-06)")]),e._v(" "),t("p",[e._v("Bug Fixes")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("eth payments")]),e._v(": setup ETH in default constructor, remove default wait()")])]),e._v(" "),t("p",[e._v("Features")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("eth payments")]),e._v(": init eth tx payments")])]),e._v(" "),t("h3",{attrs:{id:"_1-8-0"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_1-8-0"}},[e._v("#")]),e._v(" 1.8.0")]),e._v(" "),t("p",[e._v("(2024-05-02)")]),e._v(" "),t("p",[e._v("Features")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("solana payments")]),e._v(": init solana token tools for sol payment")])]),e._v(" "),t("h3",{attrs:{id:"_1-7-0"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_1-7-0"}},[e._v("#")]),e._v(" 1.7.0")]),e._v(" "),t("p",[e._v("(2024-04-25)")]),e._v(" "),t("p",[e._v("Features")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("upload")]),e._v(": allow eth and sol signing for upload")]),e._v(" "),t("li",[t("strong",[e._v("upload")]),e._v(": allow eth/sol signer types")])]),e._v(" "),t("h3",{attrs:{id:"_1-6-0"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_1-6-0"}},[e._v("#")]),e._v(" 1.6.0")]),e._v(" "),t("p",[e._v("(2024-04-24)")]),e._v(" "),t("p",[e._v("Features")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("top up")]),e._v(": allow eth/sol destination for fiat top up")]),e._v(" "),t("li",[t("strong",[e._v("top up")]),e._v(": allow eth/sol destination for fiat top up")])]),e._v(" "),t("h3",{attrs:{id:"v1-5-0"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#v1-5-0"}},[e._v("#")]),e._v(" V1.5.0")]),e._v(" "),t("p",[e._v("(2024-04-16)")]),e._v(" "),t("p",[e._v("Bug Fixes")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("fund with AR")]),e._v(": add web esm compatible arweave export")]),e._v(" "),t("li",[e._v("export Arconnect and ArweaveSigner from env specific signers")])]),e._v(" "),t("p",[e._v("Features")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("crypto payments")]),e._v(": Init fund methods")]),e._v(" "),t("li",[t("strong",[e._v("crypto payments")]),e._v(": Refactor arweave-js out of signer")]),e._v(" "),t("li",[t("strong",[e._v("fund with AR")]),e._v(": Add ToTokenAmount helper utils")]),e._v(" "),t("li",[t("strong",[e._v("fund with AR")]),e._v(": Catch polling error")]),e._v(" "),t("li",[t("strong",[e._v("fund with AR")]),e._v(": Continue polling on request error")]),e._v(" "),t("li",[t("strong",[e._v("fund with AR")]),e._v(": Throw no wallet found as error")]),e._v(" "),t("li",[t("strong",[e._v("signers")]),e._v(": Exports arbundles ArconnectSigner and ArweaveSigner")])]),e._v(" "),t("h3",{attrs:{id:"v1-4-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#v1-4-2"}},[e._v("#")]),e._v(" V1.4.2")]),e._v(" "),t("p",[e._v("(2024-03-15)")]),e._v(" "),t("p",[e._v("Bug Fixes")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("arbundles")]),e._v(": pin arbundles to v0.9.9 and run tests locally")])]),e._v(" "),t("h3",{attrs:{id:"v1-4-1"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#v1-4-1"}},[e._v("#")]),e._v(" V1.4.1")]),e._v(" "),t("p",[e._v("(2024-01-30)")]),e._v(" "),t("p",[e._v("Bug Fixes")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("checkout session")]),e._v(": correct query param, change type, add coverage")])]),e._v(" "),t("h3",{attrs:{id:"v1-4-0"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#v1-4-0"}},[e._v("#")]),e._v(" V1.4.0")]),e._v(" "),t("p",[e._v("(2024-01-30)")]),e._v(" "),t("p",[e._v("Features")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("ui mode")]),e._v(": support query param for checkout session ui mode")])]),e._v(" "),t("h3",{attrs:{id:"v1-3-0"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#v1-3-0"}},[e._v("#")]),e._v(" V1.3.0")]),e._v(" "),t("p",[e._v("(2024-01-03)")]),e._v(" "),t("p",[e._v("Bug Fixes")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("web")]),e._v(": ensure we have the public key for arconnect wallets when signing data")]),e._v(" "),t("li",[t("strong",[e._v("web")]),e._v(": remove reference to "),t("code",[e._v("node:crypto")]),e._v(" in websigner, use signer to signer to sign header")])]),e._v(" "),t("p",[e._v("Features")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("signer")]),e._v(": allow an optional signer to be passed instead of JWK for signing data items")])]),e._v(" "),t("h3",{attrs:{id:"v1-2-0"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#v1-2-0"}},[e._v("#")]),e._v(" V1.2.0")]),e._v(" "),t("p",[e._v("(2023-12-15)")]),e._v(" "),t("p",[e._v("Features")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("data item opts")]),e._v(": init tags anchor and target support PE-5035")])]),e._v(" "),t("h3",{attrs:{id:"v1-1-1"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#v1-1-1"}},[e._v("#")]),e._v(" V1.1.1")]),e._v(" "),t("p",[e._v("(2023-12-14)")]),e._v(" "),t("p",[e._v("Bug Fixes")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("exports")]),e._v(": use bundled export to avoid issue with polyfilled features needed for web")]),e._v(" "),t("li",[t("strong",[e._v("exports")]),e._v(": web exports reference an invalid build path")]),e._v(" "),t("li",[t("strong",[e._v("polyfills")]),e._v(": update esbuild script to include crypto polyfill")])]),e._v(" "),t("h3",{attrs:{id:"v1-1-0"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#v1-1-0"}},[e._v("#")]),e._v(" V1.1.0")]),e._v(" "),t("p",[e._v("(2023-11-10)")]),e._v(" "),t("p",[e._v("Bug Fixes")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("axios")]),e._v(": set "),t("code",[e._v("maxRedirects")]),e._v(" to "),t("code",[e._v("0")]),e._v(" on our axios instances")])]),e._v(" "),t("p",[e._v("Features")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("logger")]),e._v(": add configurable global logger")])]),e._v(" "),t("h3",{attrs:{id:"v1-0-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#v1-0-2"}},[e._v("#")]),e._v(" V1.0.2")]),e._v(" "),t("p",[e._v("(2023-11-03)")]),e._v(" "),t("p",[e._v("Bug Fixes")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("upload")]),e._v(": update the default upload service URL")])]),e._v(" "),t("h3",{attrs:{id:"v1-0-1"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#v1-0-1"}},[e._v("#")]),e._v(" V1.0.1")]),e._v(" "),t("p",[e._v("(2023-09-27)")]),e._v(" "),t("p",[e._v("Bug Fixes")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("headers")]),e._v(": add default headers for all HTTP requests")]),e._v(" "),t("li",[t("strong",[e._v("release")]),e._v(": use script that updates built version.js files")]),e._v(" "),t("li",[t("strong",[e._v("version")]),e._v(": update version.js to proper version on build and commit it back to git after a release")])]),e._v(" "),t("h3",{attrs:{id:"v1-0-0"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#v1-0-0"}},[e._v("#")]),e._v(" V1.0.0")]),e._v(" "),t("p",[e._v("(2023-09-26)")]),e._v(" "),t("p",[e._v("Bug Fixes")]),e._v(" "),t("ul",[t("li",[e._v("add command that removes type module from package.json")]),e._v(" "),t("li",[e._v("add command that removes type module from package.json")]),e._v(" "),t("li",[e._v("add main import and allow wildcard imports")]),e._v(" "),t("li",[e._v("add module to package.json and tweak types")]),e._v(" "),t("li",[e._v("add one more step to make esm useable")]),e._v(" "),t("li",[e._v("add owner to TurboUploadDataItemResponse and remove byteCount")]),e._v(" "),t("li",[e._v("add separate folder for types, use it in named exports")]),e._v(" "),t("li",[e._v("change name of public facing clients.")]),e._v(" "),t("li",[t("strong",[e._v("cjs")]),e._v(": add separate cjs and esm outputs")]),e._v(" "),t("li",[t("strong",[e._v("content-length")]),e._v(": require content length factory for uploads")]),e._v(" "),t("li",[t("strong",[e._v("exports")]),e._v(": move turbo configurations to turbo.ts so it is available to clients")]),e._v(" "),t("li",[e._v("fix package.json")]),e._v(" "),t("li",[e._v("modify return type of signDataItem function, tweak implementation of ArweaveSigner header")]),e._v(" "),t("li",[e._v("move from getWincPriceForBytes to getUploadCosts")]),e._v(" "),t("li",[t("strong",[e._v("package.json")]),e._v(": add back module to package.json")]),e._v(" "),t("li",[e._v("remove package.json from lib directory")]),e._v(" "),t("li",[e._v("remove postinstall command")]),e._v(" "),t("li",[e._v("replace retry-axios, add additional retry logic")]),e._v(" "),t("li",[t("strong",[e._v("retry-axios")]),e._v(": pin retry-axios to 3.0.0")]),e._v(" "),t("li",[e._v("revert to single file upload/data item upload")]),e._v(" "),t("li",[e._v("swap adding package.json to esm to cjs")]),e._v(" "),t("li",[t("strong",[e._v("top up")]),e._v(": export type PE-4465")]),e._v(" "),t("li",[e._v("type imports for web and node")]),e._v(" "),t("li",[t("strong",[e._v("types")]),e._v(": finalize types, update default payment and upload URLs")]),e._v(" "),t("li",[e._v("update main and types path in package.json")]),e._v(" "),t("li",[e._v("update package.json output for esm")]),e._v(" "),t("li",[e._v("update web signer and cleanup examples")]),e._v(" "),t("li",[e._v("use .cjs as base for types to avoid reference require errors")]),e._v(" "),t("li",[e._v("use declare in sub-classes to overwrite parent class type")]),e._v(" "),t("li",[t("strong",[e._v("wildcard")]),e._v(": allow wildcard exports for older projects")]),e._v(" "),t("li",[e._v("wrong path for types!")])]),e._v(" "),t("p",[e._v("Features")]),e._v(" "),t("ul",[t("li",[e._v("abstract axios to TurboHTTPService class")]),e._v(" "),t("li",[e._v("abstract JWKInterface used in AuthenticatedPayment and AuthenticatedUploadService")]),e._v(" "),t("li",[e._v("add remaining unauthenticated apis for payment service, introduce some new types, add tests")]),e._v(" "),t("li",[e._v("add uploadFiles implementation for node and web")]),e._v(" "),t("li",[e._v("break services into auth vs unauth")]),e._v(" "),t("li",[e._v("initial implementation of TurboWebClient and TurboNodeClient")]),e._v(" "),t("li",[e._v("introduce AbortController")]),e._v(" "),t("li",[e._v("introduce uploadSignedDataItem interface, implement for node")]),e._v(" "),t("li",[e._v("remove TurboDataItemVerifier")]),e._v(" "),t("li",[t("strong",[e._v("sdk")]),e._v(": all uphill from here 🚀 PE-4064")]),e._v(" "),t("li",[t("strong",[e._v("top-up")]),e._v(": init get checkout session PE-4465")]),e._v(" "),t("li",[t("strong",[e._v("winc for fiat")]),e._v(": extend AmountMapper pattern and add promoCode support PE-4465")])])])}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/44.dffe1a60.js b/assets/js/44.39ec880c.js similarity index 94% rename from assets/js/44.dffe1a60.js rename to assets/js/44.39ec880c.js index 0cd1ab6..2426e34 100644 --- a/assets/js/44.dffe1a60.js +++ b/assets/js/44.39ec880c.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[44],{339:function(e,r,t){"use strict";t.r(r);var n=t(10),s=Object(n.a)({},(function(){var e=this,r=e._self._c;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"using-turbo-sdk-in-a-browser-environment"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#using-turbo-sdk-in-a-browser-environment"}},[e._v("#")]),e._v(" Using Turbo SDK in a Browser Environment")]),e._v(" "),r("h2",{attrs:{id:"overview"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),r("p",[e._v("With Turbo-SDK "),r("RouterLink",{attrs:{to:"/docs/turbo/turbo-sdk/release-notes.html#v130"}},[e._v("v1.3.0")]),e._v(", You can authenticate a Turbo instance by passing in an arweave signer instance instead of JWK. This supports the "),r("code",[e._v("ArweaveSigner")]),e._v(" or "),r("code",[e._v("ArconnectSigner")]),e._v(" classes from "),r("a",{attrs:{href:"https://github.com/Irys-xyz/arbundles",target:"_blank",rel:"noopener noreferrer"}},[e._v("arbundles"),r("OutboundLink")],1),e._v(".")],1)])}),[],!1,null,null,null);r.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[44],{340:function(e,r,t){"use strict";t.r(r);var n=t(10),s=Object(n.a)({},(function(){var e=this,r=e._self._c;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"using-turbo-sdk-in-a-browser-environment"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#using-turbo-sdk-in-a-browser-environment"}},[e._v("#")]),e._v(" Using Turbo SDK in a Browser Environment")]),e._v(" "),r("h2",{attrs:{id:"overview"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),r("p",[e._v("With Turbo-SDK "),r("RouterLink",{attrs:{to:"/docs/turbo/turbo-sdk/release-notes.html#v130"}},[e._v("v1.3.0")]),e._v(", You can authenticate a Turbo instance by passing in an arweave signer instance instead of JWK. This supports the "),r("code",[e._v("ArweaveSigner")]),e._v(" or "),r("code",[e._v("ArconnectSigner")]),e._v(" classes from "),r("a",{attrs:{href:"https://github.com/Irys-xyz/arbundles",target:"_blank",rel:"noopener noreferrer"}},[e._v("arbundles"),r("OutboundLink")],1),e._v(".")],1)])}),[],!1,null,null,null);r.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/45.474a923e.js b/assets/js/45.df6982d4.js similarity index 98% rename from assets/js/45.474a923e.js rename to assets/js/45.df6982d4.js index 7711027..56efe6f 100644 --- a/assets/js/45.474a923e.js +++ b/assets/js/45.df6982d4.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[45],{340:function(t,e,a){"use strict";a.r(e);var r=a(10),i=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"what-is-turbo"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#what-is-turbo"}},[t._v("#")]),t._v(" What Is Turbo?")]),t._v(" "),e("p",[t._v("Turbo, offered by ArDrive, is a streamlined service that simplifies permaweb storage, making it more accessible by allowing users to pay for uploads in a variety of ways, including with credit or debit cards, ETH, SOL, or the traditional AR. It integrates two key components: a service that bundles uploads for efficiency and ease, and a payment system designed for straightforward transactions. Turbo Credits, which users can purchase within the ArDrive web app, enable a direct conversion from AR tokens, reflecting the amount of data one can upload. These credits are meticulously calibrated, with the Winston Credit (winc) representing the smallest unit, ensuring users have precise control over their storage needs. As an open-source technology, Turbo encourages community engagement, allowing developers to contribute to its continuous enhancement.")]),t._v(" "),e("div",{staticStyle:{"text-align":"center"}},[e("table",{staticClass:"inline-table"},[e("tr",[e("th",[t._v("Type")]),t._v(" "),e("th",[t._v("Feature")])]),t._v(" "),e("tr",[e("th",[t._v("Access")]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[e("ul",[e("li",[t._v("Optimistic, instant data caching, using arweave.net.")]),t._v(" "),e("li",[t._v("Optimistic, near instant GraphQL indexing including cross-chain token address indexing, using arweave.net.")]),t._v(" "),e("li",[t._v("Irys-compatible transaction status endpoint for checking transaction finality.")])])])]),t._v(" "),e("tr",[e("th",[t._v("Development and Integration")]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[e("ul",[e("li",[t._v("Rich documentation for developer integrations, SDK and Turbo APIs. "),e("ul",[e("li",[e("a",{attrs:{href:"https://upload.ardrive.io/api-docs",target:"_blank"}},[t._v("Swagger UI")]),t._v(" Upload Service API docs.")]),e("li",[e("a",{attrs:{href:"https://payment.ardrive.io/api-docs",target:"_blank"}},[t._v("Swagger UI")]),t._v(" Payment Service API docs.")])])]),t._v(" "),e("li",[t._v("Deploy your own upload and payment service for bundling data and sending it to Arweave. "),e("ul",[e("li",[e("a",{attrs:{target:"_blank",href:"https://github.com/ardriveapp/turbo-upload-service"}},[t._v("GitHub - ardriveapp/turbo-upload-service: Turbo Upload service that allows users to upload data items using fiat currencies.")])]),e("li",[e("a",{attrs:{target:"_blank",href:"https://github.com/ardriveapp/turbo-payment-service"}},[t._v("GitHub - ardriveapp/turbo-payment-service: ArDrive Turbo Payment Service that manages Turbo balances.")])])])]),e("li",[t._v("Flexible typescript SDK for seamless web and NodeJS integration.")]),t._v(" "),e("li",[e("a",{attrs:{target:"_blank",href:"https://github.com/ardriveapp/turbo-sdk"}},[t._v("GitHub - ardriveapp/turbo-sdk: The first SDK on Arweave to bring you programmable fiat top ups, Turbo-powered upload reliability, and fast data and indexing finality for Typescript based Web and Node projects.")])]),t._v(" "),e("li",[t._v("Development and testing environment.")])])])]),t._v(" "),e("tr",[e("th",[t._v("Enterprise")]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[t._v("Built for scale and trusted by enterprises")])]),t._v(" "),e("tr",[e("th",[t._v("Identity")]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[e("ul",[e("li",[t._v("Cryptographic sign in using Arweave, Ethereum, Solana or other Irys-compatible keys.")]),t._v(" "),e("li",[t._v("Arweave ecosystem supported web wallets and providers: "),e("ul",[e("li",[t._v("✅ Arconnect")]),e("li",[t._v("✅ arweave.app")]),e("li",[t._v("✅ ArweaveWalletAdapter")])])])])])]),t._v(" "),e("tr",[e("th",[t._v("Maturity")]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[e("ul",[e("li",[t._v("Run by PDS, the same team that has been operating arweave.net since March 2022, with over 5.55B transactions indexed and accessible.")]),t._v(" "),e("li",[t._v("First bundling services launched in October 2022, with as ArDrive Turbo launching in July 2023. \n "),e("ul",[e("li",[e("a",{attrs:{target:"_blank",href:"https://viewblock.io/arweave/address/yCxjLRyXjzHJ4gMZK8HFYiW146dykI9QgP6CSsVXFwk"}},[t._v("ar.io Meta Bundler | Arweave Explorer | ViewBlock")])]),t._v(" "),e("li",[e("a",{attrs:{target:"_blank",href:"https://viewblock.io/arweave/address/JNC6vBhjHY1EPwV3pEeNmrsgFMxH5d38_LHsZ7jful8"}},[t._v("ArDrive Turbo | Arweave Explorer | ViewBlock")])])])])])])]),t._v(" "),e("tr",[e("th",[t._v("Payments")]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[e("ul",[e("li",[t._v("Instantly fund your Turbo account with your credit card or popular crypto tokens.")]),t._v(" "),e("li",[t._v("ETH, SOL, and AR are supported for funding your Turbo account.")]),t._v(" "),e("li",[t._v("Leverage other Turbo benefits like Gifting and Coupon Codes.")])])])]),t._v(" "),e("tr",[e("th",[t._v("Performance")]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[e("ul",[e("li",[t._v("Irys-compatible single request or multipart uploading.")]),t._v(" "),e("li",[t._v("Proven, high layer 2 transactional throughput with 860/sec sustained on 12/18 and 12/19")])])])]),t._v(" "),e("tr",[e("th",[t._v("Provenance")]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[t._v("Irys-compatible receipts with transaction id, high resolution timestamp, upload price and cryptographic signature.")])]),t._v(" "),e("tr",[e("th",[t._v("Transparency")]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[t._v("Open source infrastructure and software development kit with AGPL3.0 licensing.")])])])])])}),[],!1,null,null,null);e.default=i.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[45],{339:function(t,e,a){"use strict";a.r(e);var r=a(10),i=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"what-is-turbo"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#what-is-turbo"}},[t._v("#")]),t._v(" What Is Turbo?")]),t._v(" "),e("p",[t._v("Turbo, offered by ArDrive, is a streamlined service that simplifies permaweb storage, making it more accessible by allowing users to pay for uploads in a variety of ways, including with credit or debit cards, ETH, SOL, or the traditional AR. It integrates two key components: a service that bundles uploads for efficiency and ease, and a payment system designed for straightforward transactions. Turbo Credits, which users can purchase within the ArDrive web app, enable a direct conversion from AR tokens, reflecting the amount of data one can upload. These credits are meticulously calibrated, with the Winston Credit (winc) representing the smallest unit, ensuring users have precise control over their storage needs. As an open-source technology, Turbo encourages community engagement, allowing developers to contribute to its continuous enhancement.")]),t._v(" "),e("div",{staticStyle:{"text-align":"center"}},[e("table",{staticClass:"inline-table"},[e("tr",[e("th",[t._v("Type")]),t._v(" "),e("th",[t._v("Feature")])]),t._v(" "),e("tr",[e("th",[t._v("Access")]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[e("ul",[e("li",[t._v("Optimistic, instant data caching, using arweave.net.")]),t._v(" "),e("li",[t._v("Optimistic, near instant GraphQL indexing including cross-chain token address indexing, using arweave.net.")]),t._v(" "),e("li",[t._v("Irys-compatible transaction status endpoint for checking transaction finality.")])])])]),t._v(" "),e("tr",[e("th",[t._v("Development and Integration")]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[e("ul",[e("li",[t._v("Rich documentation for developer integrations, SDK and Turbo APIs. "),e("ul",[e("li",[e("a",{attrs:{href:"https://upload.ardrive.io/api-docs",target:"_blank"}},[t._v("Swagger UI")]),t._v(" Upload Service API docs.")]),e("li",[e("a",{attrs:{href:"https://payment.ardrive.io/api-docs",target:"_blank"}},[t._v("Swagger UI")]),t._v(" Payment Service API docs.")])])]),t._v(" "),e("li",[t._v("Deploy your own upload and payment service for bundling data and sending it to Arweave. "),e("ul",[e("li",[e("a",{attrs:{target:"_blank",href:"https://github.com/ardriveapp/turbo-upload-service"}},[t._v("GitHub - ardriveapp/turbo-upload-service: Turbo Upload service that allows users to upload data items using fiat currencies.")])]),e("li",[e("a",{attrs:{target:"_blank",href:"https://github.com/ardriveapp/turbo-payment-service"}},[t._v("GitHub - ardriveapp/turbo-payment-service: ArDrive Turbo Payment Service that manages Turbo balances.")])])])]),e("li",[t._v("Flexible typescript SDK for seamless web and NodeJS integration.")]),t._v(" "),e("li",[e("a",{attrs:{target:"_blank",href:"https://github.com/ardriveapp/turbo-sdk"}},[t._v("GitHub - ardriveapp/turbo-sdk: The first SDK on Arweave to bring you programmable fiat top ups, Turbo-powered upload reliability, and fast data and indexing finality for Typescript based Web and Node projects.")])]),t._v(" "),e("li",[t._v("Development and testing environment.")])])])]),t._v(" "),e("tr",[e("th",[t._v("Enterprise")]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[t._v("Built for scale and trusted by enterprises")])]),t._v(" "),e("tr",[e("th",[t._v("Identity")]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[e("ul",[e("li",[t._v("Cryptographic sign in using Arweave, Ethereum, Solana or other Irys-compatible keys.")]),t._v(" "),e("li",[t._v("Arweave ecosystem supported web wallets and providers: "),e("ul",[e("li",[t._v("✅ Arconnect")]),e("li",[t._v("✅ arweave.app")]),e("li",[t._v("✅ ArweaveWalletAdapter")])])])])])]),t._v(" "),e("tr",[e("th",[t._v("Maturity")]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[e("ul",[e("li",[t._v("Run by PDS, the same team that has been operating arweave.net since March 2022, with over 5.55B transactions indexed and accessible.")]),t._v(" "),e("li",[t._v("First bundling services launched in October 2022, with as ArDrive Turbo launching in July 2023. \n "),e("ul",[e("li",[e("a",{attrs:{target:"_blank",href:"https://viewblock.io/arweave/address/yCxjLRyXjzHJ4gMZK8HFYiW146dykI9QgP6CSsVXFwk"}},[t._v("ar.io Meta Bundler | Arweave Explorer | ViewBlock")])]),t._v(" "),e("li",[e("a",{attrs:{target:"_blank",href:"https://viewblock.io/arweave/address/JNC6vBhjHY1EPwV3pEeNmrsgFMxH5d38_LHsZ7jful8"}},[t._v("ArDrive Turbo | Arweave Explorer | ViewBlock")])])])])])])]),t._v(" "),e("tr",[e("th",[t._v("Payments")]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[e("ul",[e("li",[t._v("Instantly fund your Turbo account with your credit card or popular crypto tokens.")]),t._v(" "),e("li",[t._v("ETH, SOL, and AR are supported for funding your Turbo account.")]),t._v(" "),e("li",[t._v("Leverage other Turbo benefits like Gifting and Coupon Codes.")])])])]),t._v(" "),e("tr",[e("th",[t._v("Performance")]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[e("ul",[e("li",[t._v("Irys-compatible single request or multipart uploading.")]),t._v(" "),e("li",[t._v("Proven, high layer 2 transactional throughput with 860/sec sustained on 12/18 and 12/19")])])])]),t._v(" "),e("tr",[e("th",[t._v("Provenance")]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[t._v("Irys-compatible receipts with transaction id, high resolution timestamp, upload price and cryptographic signature.")])]),t._v(" "),e("tr",[e("th",[t._v("Transparency")]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[t._v("Open source infrastructure and software development kit with AGPL3.0 licensing.")])])])])])}),[],!1,null,null,null);e.default=i.exports}}]); \ No newline at end of file diff --git a/assets/js/app.514c89a5.js b/assets/js/app.514c89a5.js new file mode 100644 index 0000000..68dc8f3 --- /dev/null +++ b/assets/js/app.514c89a5.js @@ -0,0 +1,21 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[]]);!function(e){function t(t){for(var a,o,s=t[0],l=t[1],d=t[2],u=0,p=[];u
'};function r(e,t,n){return en?n:e}function i(e){return 100*(-1+e)}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(a[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=r(e,a.minimum,1),n.status=1===e?null:e;var l=n.render(!t),d=l.querySelector(a.barSelector),c=a.speed,u=a.easing;return l.offsetWidth,o((function(t){""===a.positionUsing&&(a.positionUsing=n.getPositioningCSS()),s(d,function(e,t,n){var r;return(r="translate3d"===a.positionUsing?{transform:"translate3d("+i(e)+"%,0,0)"}:"translate"===a.positionUsing?{transform:"translate("+i(e)+"%,0)"}:{"margin-left":i(e)+"%"}).transition="all "+t+"ms "+n,r}(e,c,u)),1===e?(s(l,{transition:"none",opacity:1}),l.offsetWidth,setTimeout((function(){s(l,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),a.trickleSpeed)};return a.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*r(Math.random()*t,.1,.95)),t=r(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*a.trickleRate)},e=0,t=0,n.promise=function(a){return a&&"resolved"!==a.state()?(0===t&&n.start(),e++,t++,a.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");d(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=a.template;var r,o=t.querySelector(a.barSelector),l=e?"-100":i(n.status||0),c=document.querySelector(a.parent);return s(o,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),a.showSpinner||(r=t.querySelector(a.spinnerSelector))&&p(r),c!=document.body&&d(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){c(document.documentElement,"nprogress-busy"),c(document.querySelector(a.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var o=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(n){return n=n.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()})),t[n]||(t[n]=function(t){var n=document.body.style;if(t in n)return t;for(var a,r=e.length,i=t.charAt(0).toUpperCase()+t.slice(1);r--;)if((a=e[r]+i)in n)return a;return t}(n))}function a(e,t,a){t=n(t),e.style[t]=a}return function(e,t){var n,r,i=arguments;if(2==i.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,i[1],i[2])}}();function l(e,t){return("string"==typeof e?e:u(e)).indexOf(" "+t+" ")>=0}function d(e,t){var n=u(e),a=n+t;l(n,t)||(e.className=a.substring(1))}function c(e,t){var n,a=u(e);l(e,t)&&(n=a.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function u(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n})?a.call(t,n,t,e):a)||(e.exports=r)},function(e,t,n){var a=n(8),r=String,i=TypeError;e.exports=function(e){if(a(e))return e;throw i(r(e)+" is not an object")}},function(e,t,n){var a=n(3),r=n(48).f,i=n(13),o=n(109),s=n(35),l=n(62),d=n(122);e.exports=function(e,t){var n,c,u,p,h,f=e.target,m=e.global,v=e.stat;if(n=m?a:v?a[f]||s(f,{}):(a[f]||{}).prototype)for(c in t){if(p=t[c],u=e.dontCallGetSet?(h=r(n,c))&&h.value:n[c],!d(m?c:f+(v?".":"#")+c,e.forced)&&void 0!==u){if(typeof p==typeof u)continue;l(p,u)}(e.sham||u&&u.sham)&&i(p,"sham",!0),o(n,c,p,e)}}},function(e,t,n){var a=n(2);e.exports=!a((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")}))},function(e,t,n){var a=n(45),r=n(49);e.exports=function(e){return a(r(e))}},function(e,t,n){var a=n(3),r=n(0),i=function(e){return r(e)?e:void 0};e.exports=function(e,t){return arguments.length<2?i(a[e]):a[e]&&a[e][t]}},function(e,t,n){var a=n(0),r=n(107),i=TypeError;e.exports=function(e){if(a(e))return e;throw i(r(e)+" is not a function")}},function(e,t,n){var a=n(3),r=n(58),i=n(7),o=n(60),s=n(56),l=n(55),d=a.Symbol,c=r("wks"),u=l?d.for||d:d&&d.withoutSetter||o;e.exports=function(e){return i(c,e)||(c[e]=s&&i(d,e)?d[e]:u("Symbol."+e)),c[e]}},function(e,t,n){var a=n(49),r=Object;e.exports=function(e){return r(a(e))}},function(e,t,n){var a=n(120);e.exports=function(e){return a(e.length)}},function(e,t,n){var a=n(25),r=Function.prototype.call;e.exports=a?r.bind(r):function(){return r.apply(r,arguments)}},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){var a=n(3),r=n(35),i=a["__core-js_shared__"]||r("__core-js_shared__",{});e.exports=i},function(e,t,n){var a=n(3),r=Object.defineProperty;e.exports=function(e,t){try{r(a,e,{value:t,configurable:!0,writable:!0})}catch(n){a[e]=t}return t}},function(e,t,n){var a=n(146),r=n(11),i=Object.prototype,o=i.hasOwnProperty,s=i.propertyIsEnumerable,l=a(function(){return arguments}())?a:function(e){return r(e)&&o.call(e,"callee")&&!s.call(e,"callee")};e.exports=l},function(e,t,n){var a=n(9)(n(6),"Map");e.exports=a},function(e,t){e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},function(e,t,n){var a=n(166),r=n(173),i=n(175),o=n(176),s=n(177);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t-1&&e%1==0&&e<=9007199254740991}},function(e,t,n){var a=n(5),r=n(43),i=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,o=/^\w*$/;e.exports=function(e,t){if(a(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!r(e))||(o.test(e)||!i.test(e)||null!=t&&e in Object(t))}},function(e,t,n){var a=n(12),r=n(11);e.exports=function(e){return"symbol"==typeof e||r(e)&&"[object Symbol]"==a(e)}},function(e,t){e.exports=function(e){return e}},function(e,t,n){var a=n(1),r=n(2),i=n(16),o=Object,s=a("".split);e.exports=r((function(){return!o("z").propertyIsEnumerable(0)}))?function(e){return"String"==i(e)?s(e,""):o(e)}:o},function(e,t){e.exports={}},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,n){var a=n(4),r=n(32),i=n(103),o=n(33),s=n(26),l=n(51),d=n(7),c=n(61),u=Object.getOwnPropertyDescriptor;t.f=a?u:function(e,t){if(e=s(e),t=l(t),c)try{return u(e,t)}catch(e){}if(d(e,t))return o(!r(i.f,e,t),e[t])}},function(e,t,n){var a=n(50),r=TypeError;e.exports=function(e){if(a(e))throw r("Can't call method on "+e);return e}},function(e,t){e.exports=function(e){return null==e}},function(e,t,n){var a=n(104),r=n(53);e.exports=function(e){var t=a(e,"string");return r(t)?t:t+""}},function(e,t){var n="object"==typeof document&&document.all,a=void 0===n&&void 0!==n;e.exports={all:n,IS_HTMLDDA:a}},function(e,t,n){var a=n(27),r=n(0),i=n(54),o=n(55),s=Object;e.exports=o?function(e){return"symbol"==typeof e}:function(e){var t=a("Symbol");return r(t)&&i(t.prototype,s(e))}},function(e,t,n){var a=n(1);e.exports=a({}.isPrototypeOf)},function(e,t,n){var a=n(56);e.exports=a&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},function(e,t,n){var a=n(57),r=n(2);e.exports=!!Object.getOwnPropertySymbols&&!r((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&a&&a<41}))},function(e,t,n){var a,r,i=n(3),o=n(105),s=i.process,l=i.Deno,d=s&&s.versions||l&&l.version,c=d&&d.v8;c&&(r=(a=c.split("."))[0]>0&&a[0]<4?1:+(a[0]+a[1])),!r&&o&&(!(a=o.match(/Edge\/(\d+)/))||a[1]>=74)&&(a=o.match(/Chrome\/(\d+)/))&&(r=+a[1]),e.exports=r},function(e,t,n){var a=n(59),r=n(34);(e.exports=function(e,t){return r[e]||(r[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.30.1",mode:a?"pure":"global",copyright:"© 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.30.1/LICENSE",source:"https://github.com/zloirock/core-js"})},function(e,t){e.exports=!1},function(e,t,n){var a=n(1),r=0,i=Math.random(),o=a(1..toString);e.exports=function(e){return"Symbol("+(void 0===e?"":e)+")_"+o(++r+i,36)}},function(e,t,n){var a=n(4),r=n(2),i=n(93);e.exports=!a&&!r((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},function(e,t,n){var a=n(7),r=n(115),i=n(48),o=n(15);e.exports=function(e,t,n){for(var s=r(t),l=o.f,d=i.f,c=0;cc))return!1;var p=l.get(e),h=l.get(t);if(p&&h)return p==t&&h==e;var f=-1,m=!0,v=2&n?new a:void 0;for(l.set(e,t),l.set(t,e);++f-1&&e%1==0&&e]/;e.exports=function(e){var t,n=""+e,r=a.exec(n);if(!r)return n;var i="",o=0,s=0;for(o=r.index;o=t||n<0||v&&e-d>=i}function k(){var e=h();if(w(e))return x(e);s=setTimeout(k,function(e){var n=t-(e-l);return v?p(n,i-(e-d)):n}(e))}function x(e){return s=void 0,y&&a?g(e):(a=r=void 0,o)}function T(){var e=h(),n=w(e);if(a=arguments,r=this,l=e,n){if(void 0===s)return b(l);if(v)return s=setTimeout(k,t),g(l)}return void 0===s&&(s=setTimeout(k,t)),o}return t=m(t)||0,f(n)&&(c=!!n.leading,i=(v="maxWait"in n)?u(m(n.maxWait)||0,t):i,y="trailing"in n?!!n.trailing:y),T.cancel=function(){void 0!==s&&clearTimeout(s),d=0,a=l=r=s=void 0},T.flush=function(){return void 0===s?o:x(h())},T}},function(e,t,n){"use strict";var a=n(24),r=n(30),i=n(31),o=n(126),s=n(128);a({target:"Array",proto:!0,arity:1,forced:n(2)((function(){return 4294967297!==[].push.call({length:4294967296},1)}))||!function(){try{Object.defineProperty([],"length",{writable:!1}).push()}catch(e){return e instanceof TypeError}}()},{push:function(e){var t=r(this),n=i(t),a=arguments.length;s(n+a);for(var l=0;ld;)r(a,n=t[d++])&&(~o(c,n)||l(c,n));return c}},function(e,t,n){var a=n(83);e.exports=function(e,t,n){var r=null==e?void 0:a(e,t);return void 0===r?n:r}},function(e,t){e.exports=function(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}},,,function(e,t,n){e.exports=n(243)},function(e,t,n){"use strict";var a=n(24),r=n(123).left,i=n(124),o=n(57);a({target:"Array",proto:!0,forced:!n(125)&&o>79&&o<83||!i("reduce")},{reduce:function(e){var t=arguments.length;return r(this,e,t,t>1?arguments[1]:void 0)}})},function(e,t,n){"use strict";var a={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,i=r&&!a.call({1:2},1);t.f=i?function(e){var t=r(this,e);return!!t&&t.enumerable}:a},function(e,t,n){var a=n(32),r=n(8),i=n(53),o=n(106),s=n(108),l=n(29),d=TypeError,c=l("toPrimitive");e.exports=function(e,t){if(!r(e)||i(e))return e;var n,l=o(e,c);if(l){if(void 0===t&&(t="default"),n=a(l,e,t),!r(n)||i(n))return n;throw d("Can't convert object to primitive value")}return void 0===t&&(t="number"),s(e,t)}},function(e,t){e.exports="undefined"!=typeof navigator&&String(navigator.userAgent)||""},function(e,t,n){var a=n(28),r=n(50);e.exports=function(e,t){var n=e[t];return r(n)?void 0:a(n)}},function(e,t){var n=String;e.exports=function(e){try{return n(e)}catch(e){return"Object"}}},function(e,t,n){var a=n(32),r=n(0),i=n(8),o=TypeError;e.exports=function(e,t){var n,s;if("string"===t&&r(n=e.toString)&&!i(s=a(n,e)))return s;if(r(n=e.valueOf)&&!i(s=a(n,e)))return s;if("string"!==t&&r(n=e.toString)&&!i(s=a(n,e)))return s;throw o("Can't convert object to primitive value")}},function(e,t,n){var a=n(0),r=n(15),i=n(110),o=n(35);e.exports=function(e,t,n,s){s||(s={});var l=s.enumerable,d=void 0!==s.name?s.name:t;if(a(n)&&i(n,d,s),s.global)l?e[t]=n:o(t,n);else{try{s.unsafe?e[t]&&(l=!0):delete e[t]}catch(e){}l?e[t]=n:r.f(e,t,{value:n,enumerable:!1,configurable:!s.nonConfigurable,writable:!s.nonWritable})}return e}},function(e,t,n){var a=n(1),r=n(2),i=n(0),o=n(7),s=n(4),l=n(111).CONFIGURABLE,d=n(112),c=n(113),u=c.enforce,p=c.get,h=String,f=Object.defineProperty,m=a("".slice),v=a("".replace),y=a([].join),g=s&&!r((function(){return 8!==f((function(){}),"length",{value:8}).length})),b=String(String).split("String"),w=e.exports=function(e,t,n){"Symbol("===m(h(t),0,7)&&(t="["+v(h(t),/^Symbol\(([^)]*)\)/,"$1")+"]"),n&&n.getter&&(t="get "+t),n&&n.setter&&(t="set "+t),(!o(e,"name")||l&&e.name!==t)&&(s?f(e,"name",{value:t,configurable:!0}):e.name=t),g&&n&&o(n,"arity")&&e.length!==n.arity&&f(e,"length",{value:n.arity});try{n&&o(n,"constructor")&&n.constructor?s&&f(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(e){}var a=u(e);return o(a,"source")||(a.source=y(b,"string"==typeof t?t:"")),e};Function.prototype.toString=w((function(){return i(this)&&p(this).source||d(this)}),"toString")},function(e,t,n){var a=n(4),r=n(7),i=Function.prototype,o=a&&Object.getOwnPropertyDescriptor,s=r(i,"name"),l=s&&"something"===function(){}.name,d=s&&(!a||a&&o(i,"name").configurable);e.exports={EXISTS:s,PROPER:l,CONFIGURABLE:d}},function(e,t,n){var a=n(1),r=n(0),i=n(34),o=a(Function.toString);r(i.inspectSource)||(i.inspectSource=function(e){return o(e)}),e.exports=i.inspectSource},function(e,t,n){var a,r,i,o=n(114),s=n(3),l=n(8),d=n(13),c=n(7),u=n(34),p=n(95),h=n(46),f=s.TypeError,m=s.WeakMap;if(o||u.state){var v=u.state||(u.state=new m);v.get=v.get,v.has=v.has,v.set=v.set,a=function(e,t){if(v.has(e))throw f("Object already initialized");return t.facade=e,v.set(e,t),t},r=function(e){return v.get(e)||{}},i=function(e){return v.has(e)}}else{var y=p("state");h[y]=!0,a=function(e,t){if(c(e,y))throw f("Object already initialized");return t.facade=e,d(e,y,t),t},r=function(e){return c(e,y)?e[y]:{}},i=function(e){return c(e,y)}}e.exports={set:a,get:r,has:i,enforce:function(e){return i(e)?r(e):a(e,{})},getterFor:function(e){return function(t){var n;if(!l(t)||(n=r(t)).type!==e)throw f("Incompatible receiver, "+e+" required");return n}}}},function(e,t,n){var a=n(3),r=n(0),i=a.WeakMap;e.exports=r(i)&&/native code/.test(String(i))},function(e,t,n){var a=n(27),r=n(1),i=n(116),o=n(121),s=n(23),l=r([].concat);e.exports=a("Reflect","ownKeys")||function(e){var t=i.f(s(e)),n=o.f;return n?l(t,n(e)):t}},function(e,t,n){var a=n(96),r=n(92).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return a(e,r)}},function(e,t,n){var a=n(26),r=n(118),i=n(31),o=function(e){return function(t,n,o){var s,l=a(t),d=i(l),c=r(o,d);if(e&&n!=n){for(;d>c;)if((s=l[c++])!=s)return!0}else for(;d>c;c++)if((e||c in l)&&l[c]===n)return e||c||0;return!e&&-1}};e.exports={includes:o(!0),indexOf:o(!1)}},function(e,t,n){var a=n(63),r=Math.max,i=Math.min;e.exports=function(e,t){var n=a(e);return n<0?r(n+t,0):i(n,t)}},function(e,t){var n=Math.ceil,a=Math.floor;e.exports=Math.trunc||function(e){var t=+e;return(t>0?a:n)(t)}},function(e,t,n){var a=n(63),r=Math.min;e.exports=function(e){return e>0?r(a(e),9007199254740991):0}},function(e,t){t.f=Object.getOwnPropertySymbols},function(e,t,n){var a=n(2),r=n(0),i=/#|\.prototype\./,o=function(e,t){var n=l[s(e)];return n==c||n!=d&&(r(t)?a(t):!!t)},s=o.normalize=function(e){return String(e).replace(i,".").toLowerCase()},l=o.data={},d=o.NATIVE="N",c=o.POLYFILL="P";e.exports=o},function(e,t,n){var a=n(28),r=n(30),i=n(45),o=n(31),s=TypeError,l=function(e){return function(t,n,l,d){a(n);var c=r(t),u=i(c),p=o(c),h=e?p-1:0,f=e?-1:1;if(l<2)for(;;){if(h in u){d=u[h],h+=f;break}if(h+=f,e?h<0:p<=h)throw s("Reduce of empty array with no initial value")}for(;e?h>=0:p>h;h+=f)h in u&&(d=n(d,u[h],h,c));return d}};e.exports={left:l(!1),right:l(!0)}},function(e,t,n){"use strict";var a=n(2);e.exports=function(e,t){var n=[][e];return!!n&&a((function(){n.call(null,t||function(){return 1},1)}))}},function(e,t,n){var a=n(16);e.exports="undefined"!=typeof process&&"process"==a(process)},function(e,t,n){"use strict";var a=n(4),r=n(127),i=TypeError,o=Object.getOwnPropertyDescriptor,s=a&&!function(){if(void 0!==this)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(e){return e instanceof TypeError}}();e.exports=s?function(e,t){if(r(e)&&!o(e,"length").writable)throw i("Cannot set read only .length");return e.length=t}:function(e,t){return e.length=t}},function(e,t,n){var a=n(16);e.exports=Array.isArray||function(e){return"Array"==a(e)}},function(e,t){var n=TypeError;e.exports=function(e){if(e>9007199254740991)throw n("Maximum allowed index exceeded");return e}},function(e,t,n){var a=n(24),r=n(3),i=n(130),o=n(131),s=r.WebAssembly,l=7!==Error("e",{cause:7}).cause,d=function(e,t){var n={};n[e]=o(e,t,l),a({global:!0,constructor:!0,arity:1,forced:l},n)},c=function(e,t){if(s&&s[e]){var n={};n[e]=o("WebAssembly."+e,t,l),a({target:"WebAssembly",stat:!0,constructor:!0,arity:1,forced:l},n)}};d("Error",(function(e){return function(t){return i(e,this,arguments)}})),d("EvalError",(function(e){return function(t){return i(e,this,arguments)}})),d("RangeError",(function(e){return function(t){return i(e,this,arguments)}})),d("ReferenceError",(function(e){return function(t){return i(e,this,arguments)}})),d("SyntaxError",(function(e){return function(t){return i(e,this,arguments)}})),d("TypeError",(function(e){return function(t){return i(e,this,arguments)}})),d("URIError",(function(e){return function(t){return i(e,this,arguments)}})),c("CompileError",(function(e){return function(t){return i(e,this,arguments)}})),c("LinkError",(function(e){return function(t){return i(e,this,arguments)}})),c("RuntimeError",(function(e){return function(t){return i(e,this,arguments)}}))},function(e,t,n){var a=n(25),r=Function.prototype,i=r.apply,o=r.call;e.exports="object"==typeof Reflect&&Reflect.apply||(a?o.bind(i):function(){return o.apply(i,arguments)})},function(e,t,n){"use strict";var a=n(27),r=n(7),i=n(13),o=n(54),s=n(64),l=n(62),d=n(134),c=n(135),u=n(136),p=n(140),h=n(141),f=n(4),m=n(59);e.exports=function(e,t,n,v){var y=v?2:1,g=e.split("."),b=g[g.length-1],w=a.apply(null,g);if(w){var k=w.prototype;if(!m&&r(k,"cause")&&delete k.cause,!n)return w;var x=a("Error"),T=t((function(e,t){var n=u(v?t:e,void 0),a=v?new w(e):new w;return void 0!==n&&i(a,"message",n),h(a,T,a.stack,2),this&&o(k,this)&&c(a,this,T),arguments.length>y&&p(a,arguments[y]),a}));if(T.prototype=k,"Error"!==b?s?s(T,x):l(T,x,{name:!0}):f&&"stackTraceLimit"in w&&(d(T,w,"stackTraceLimit"),d(T,w,"prepareStackTrace")),l(T,w),!m)try{k.name!==b&&i(k,"name",b),k.constructor=T}catch(e){}return T}}},function(e,t,n){var a=n(1),r=n(28);e.exports=function(e,t,n){try{return a(r(Object.getOwnPropertyDescriptor(e,t)[n]))}catch(e){}}},function(e,t,n){var a=n(0),r=String,i=TypeError;e.exports=function(e){if("object"==typeof e||a(e))return e;throw i("Can't set "+r(e)+" as a prototype")}},function(e,t,n){var a=n(15).f;e.exports=function(e,t,n){n in e||a(e,n,{configurable:!0,get:function(){return t[n]},set:function(e){t[n]=e}})}},function(e,t,n){var a=n(0),r=n(8),i=n(64);e.exports=function(e,t,n){var o,s;return i&&a(o=t.constructor)&&o!==n&&r(s=o.prototype)&&s!==n.prototype&&i(e,s),e}},function(e,t,n){var a=n(137);e.exports=function(e,t){return void 0===e?arguments.length<2?"":t:a(e)}},function(e,t,n){var a=n(138),r=String;e.exports=function(e){if("Symbol"===a(e))throw TypeError("Cannot convert a Symbol value to a string");return r(e)}},function(e,t,n){var a=n(139),r=n(0),i=n(16),o=n(29)("toStringTag"),s=Object,l="Arguments"==i(function(){return arguments}());e.exports=a?i:function(e){var t,n,a;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=s(e),o))?n:l?i(t):"Object"==(a=i(t))&&r(t.callee)?"Arguments":a}},function(e,t,n){var a={};a[n(29)("toStringTag")]="z",e.exports="[object z]"===String(a)},function(e,t,n){var a=n(8),r=n(13);e.exports=function(e,t){a(t)&&"cause"in t&&r(e,"cause",t.cause)}},function(e,t,n){var a=n(13),r=n(142),i=n(143),o=Error.captureStackTrace;e.exports=function(e,t,n,s){i&&(o?o(e,t):a(e,"stack",r(n,s)))}},function(e,t,n){var a=n(1),r=Error,i=a("".replace),o=String(r("zxcasd").stack),s=/\n\s*at [^:]*:[^\n]*/,l=s.test(o);e.exports=function(e,t){if(l&&"string"==typeof e&&!r.prepareStackTrace)for(;t--;)e=i(e,s,"");return e}},function(e,t,n){var a=n(2),r=n(33);e.exports=!a((function(){var e=Error("a");return!("stack"in e)||(Object.defineProperty(e,"stack",r(1,7)),7!==e.stack)}))},function(e,t,n){var a=n(65),r=n(145);e.exports=function e(t,n,i,o,s){var l=-1,d=t.length;for(i||(i=r),s||(s=[]);++l0&&i(c)?n>1?e(c,n-1,i,o,s):a(s,c):o||(s[s.length]=c)}return s}},function(e,t,n){var a=n(14),r=n(36),i=n(5),o=a?a.isConcatSpreadable:void 0;e.exports=function(e){return i(e)||r(e)||!!(o&&e&&e[o])}},function(e,t,n){var a=n(12),r=n(11);e.exports=function(e){return r(e)&&"[object Arguments]"==a(e)}},function(e,t,n){var a=n(14),r=Object.prototype,i=r.hasOwnProperty,o=r.toString,s=a?a.toStringTag:void 0;e.exports=function(e){var t=i.call(e,s),n=e[s];try{e[s]=void 0;var a=!0}catch(e){}var r=o.call(e);return a&&(t?e[s]=n:delete e[s]),r}},function(e,t){var n=Object.prototype.toString;e.exports=function(e){return n.call(e)}},function(e,t,n){var a=n(150),r=n(206),i=n(44),o=n(5),s=n(216);e.exports=function(e){return"function"==typeof e?e:null==e?i:"object"==typeof e?o(e)?r(e[0],e[1]):a(e):s(e)}},function(e,t,n){var a=n(151),r=n(205),i=n(82);e.exports=function(e){var t=r(e);return 1==t.length&&t[0][2]?i(t[0][0],t[0][1]):function(n){return n===e||a(n,e,t)}}},function(e,t,n){var a=n(67),r=n(71);e.exports=function(e,t,n,i){var o=n.length,s=o,l=!i;if(null==e)return!s;for(e=Object(e);o--;){var d=n[o];if(l&&d[2]?d[1]!==e[d[0]]:!(d[0]in e))return!1}for(;++o-1}},function(e,t,n){var a=n(18);e.exports=function(e,t){var n=this.__data__,r=a(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}},function(e,t,n){var a=n(17);e.exports=function(){this.__data__=new a,this.size=0}},function(e,t){e.exports=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}},function(e,t){e.exports=function(e){return this.__data__.get(e)}},function(e,t){e.exports=function(e){return this.__data__.has(e)}},function(e,t,n){var a=n(17),r=n(37),i=n(39);e.exports=function(e,t){var n=this.__data__;if(n instanceof a){var o=n.__data__;if(!r||o.length<199)return o.push([e,t]),this.size=++n.size,this;n=this.__data__=new i(o)}return n.set(e,t),this.size=n.size,this}},function(e,t,n){var a=n(69),r=n(163),i=n(38),o=n(70),s=/^\[object .+?Constructor\]$/,l=Function.prototype,d=Object.prototype,c=l.toString,u=d.hasOwnProperty,p=RegExp("^"+c.call(u).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=function(e){return!(!i(e)||r(e))&&(a(e)?p:s).test(o(e))}},function(e,t,n){var a,r=n(164),i=(a=/[^.]+$/.exec(r&&r.keys&&r.keys.IE_PROTO||""))?"Symbol(src)_1."+a:"";e.exports=function(e){return!!i&&i in e}},function(e,t,n){var a=n(6)["__core-js_shared__"];e.exports=a},function(e,t){e.exports=function(e,t){return null==e?void 0:e[t]}},function(e,t,n){var a=n(167),r=n(17),i=n(37);e.exports=function(){this.size=0,this.__data__={hash:new a,map:new(i||r),string:new a}}},function(e,t,n){var a=n(168),r=n(169),i=n(170),o=n(171),s=n(172);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}},function(e,t,n){var a=n(73),r=n(228),i=n(233),o=n(74),s=n(234),l=n(40);e.exports=function(e,t,n){var d=-1,c=r,u=e.length,p=!0,h=[],f=h;if(n)p=!1,c=i;else if(u>=200){var m=t?null:s(e);if(m)return l(m);p=!1,c=o,f=new a}else f=t?[]:h;e:for(;++d-1}},function(e,t,n){var a=n(230),r=n(231),i=n(232);e.exports=function(e,t,n){return t==t?i(e,t,n):a(e,r,n)}},function(e,t){e.exports=function(e,t,n,a){for(var r=e.length,i=n+(a?1:-1);a?i--:++i=0&&Math.floor(t)===t&&isFinite(e)}function m(e){return o(e)&&"function"==typeof e.then&&"function"==typeof e.catch}function v(e){return null==e?"":Array.isArray(e)||p(e)&&e.toString===u?JSON.stringify(e,null,2):String(e)}function y(e){var t=parseFloat(e);return isNaN(t)?e:t}function g(e,t){for(var n=Object.create(null),a=e.split(","),r=0;r-1)return e.splice(a,1)}}var k=Object.prototype.hasOwnProperty;function x(e,t){return k.call(e,t)}function T(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}var _=/-(\w)/g,A=T((function(e){return e.replace(_,(function(e,t){return t?t.toUpperCase():""}))})),j=T((function(e){return e.charAt(0).toUpperCase()+e.slice(1)})),S=/\B([A-Z])/g,I=T((function(e){return e.replace(S,"-$1").toLowerCase()}));var C=Function.prototype.bind?function(e,t){return e.bind(t)}:function(e,t){function n(n){var a=arguments.length;return a?a>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n};function D(e,t){t=t||0;for(var n=e.length-t,a=new Array(n);n--;)a[n]=e[n+t];return a}function F(e,t){for(var n in t)e[n]=t[n];return e}function E(e){for(var t={},n=0;n0,Z=K&&K.indexOf("edge/")>0;K&&K.indexOf("android");var X=K&&/iphone|ipad|ipod|ios/.test(K);K&&/chrome\/\d+/.test(K),K&&/phantomjs/.test(K);var ee,te=K&&K.match(/firefox\/(\d+)/),ne={}.watch,ae=!1;if(J)try{var re={};Object.defineProperty(re,"passive",{get:function(){ae=!0}}),window.addEventListener("test-passive",null,re)}catch(e){}var ie=function(){return void 0===ee&&(ee=!J&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),ee},oe=J&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function se(e){return"function"==typeof e&&/native code/.test(e.toString())}var le,de="undefined"!=typeof Symbol&&se(Symbol)&&"undefined"!=typeof Reflect&&se(Reflect.ownKeys);le="undefined"!=typeof Set&&se(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var ce=null;function ue(e){void 0===e&&(e=null),e||ce&&ce._scope.off(),ce=e,e&&e._scope.on()}var pe=function(){function e(e,t,n,a,r,i,o,s){this.tag=e,this.data=t,this.children=n,this.text=a,this.elm=r,this.ns=void 0,this.context=i,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=t&&t.key,this.componentOptions=o,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}return Object.defineProperty(e.prototype,"child",{get:function(){return this.componentInstance},enumerable:!1,configurable:!0}),e}(),he=function(e){void 0===e&&(e="");var t=new pe;return t.text=e,t.isComment=!0,t};function fe(e){return new pe(void 0,void 0,void 0,String(e))}function me(e){var t=new pe(e.tag,e.data,e.children&&e.children.slice(),e.text,e.elm,e.context,e.componentOptions,e.asyncFactory);return t.ns=e.ns,t.isStatic=e.isStatic,t.key=e.key,t.isComment=e.isComment,t.fnContext=e.fnContext,t.fnOptions=e.fnOptions,t.fnScopeId=e.fnScopeId,t.asyncMeta=e.asyncMeta,t.isCloned=!0,t}var ve=0,ye=[],ge=function(){function e(){this._pending=!1,this.id=ve++,this.subs=[]}return e.prototype.addSub=function(e){this.subs.push(e)},e.prototype.removeSub=function(e){this.subs[this.subs.indexOf(e)]=null,this._pending||(this._pending=!0,ye.push(this))},e.prototype.depend=function(t){e.target&&e.target.addDep(this)},e.prototype.notify=function(e){var t=this.subs.filter((function(e){return e}));for(var n=0,a=t.length;n0&&(at((d=e(d,"".concat(n||"","_").concat(a)))[0])&&at(u)&&(p[c]=fe(u.text+d[0].text),d.shift()),p.push.apply(p,d)):l(d)?at(u)?p[c]=fe(u.text+d):""!==d&&p.push(fe(d)):at(d)&&at(u)?p[c]=fe(u.text+d.text):(s(t._isVList)&&o(d.tag)&&i(d.key)&&o(n)&&(d.key="__vlist".concat(n,"_").concat(a,"__")),p.push(d)));return p}(e):void 0}function at(e){return o(e)&&o(e.text)&&!1===e.isComment}function rt(e,t){var n,a,i,s,l=null;if(r(e)||"string"==typeof e)for(l=new Array(e.length),n=0,a=e.length;n0,s=t?!!t.$stable:!o,l=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(s&&r&&r!==a&&l===r.$key&&!o&&!r.$hasNormal)return r;for(var d in i={},t)t[d]&&"$"!==d[0]&&(i[d]=Tt(e,n,d,t[d]))}else i={};for(var c in n)c in i||(i[c]=_t(n,c));return t&&Object.isExtensible(t)&&(t._normalized=i),B(i,"$stable",s),B(i,"$key",l),B(i,"$hasNormal",o),i}function Tt(e,t,n,a){var i=function(){var t=ce;ue(e);var n=arguments.length?a.apply(null,arguments):a({}),i=(n=n&&"object"==typeof n&&!r(n)?[n]:nt(n))&&n[0];return ue(t),n&&(!i||1===n.length&&i.isComment&&!kt(i))?void 0:n};return a.proxy&&Object.defineProperty(t,n,{get:i,enumerable:!0,configurable:!0}),i}function _t(e,t){return function(){return e[t]}}function At(e){return{get attrs(){if(!e._attrsProxy){var t=e._attrsProxy={};B(t,"_v_attr_proxy",!0),jt(t,e.$attrs,a,e,"$attrs")}return e._attrsProxy},get listeners(){e._listenersProxy||jt(e._listenersProxy={},e.$listeners,a,e,"$listeners");return e._listenersProxy},get slots(){return function(e){e._slotsProxy||It(e._slotsProxy={},e.$scopedSlots);return e._slotsProxy}(e)},emit:C(e.$emit,e),expose:function(t){t&&Object.keys(t).forEach((function(n){return Ne(e,t,n)}))}}}function jt(e,t,n,a,r){var i=!1;for(var o in t)o in e?t[o]!==n[o]&&(i=!0):(i=!0,St(e,o,a,r));for(var o in e)o in t||(i=!0,delete e[o]);return i}function St(e,t,n,a){Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){return n[a][t]}})}function It(e,t){for(var n in t)e[n]=t[n];for(var n in e)n in t||delete e[n]}var Ct=null;function Dt(e,t){return(e.__esModule||de&&"Module"===e[Symbol.toStringTag])&&(e=e.default),c(e)?t.extend(e):e}function Ft(e){if(r(e))for(var t=0;tdocument.createEvent("Event").timeStamp&&(vn=function(){return yn.now()})}var gn=function(e,t){if(e.post){if(!t.post)return 1}else if(t.post)return-1;return e.id-t.id};function bn(){var e,t;for(mn=vn(),hn=!0,dn.sort(gn),fn=0;fnfn&&dn[n].id>e.id;)n--;dn.splice(n+1,0,e)}else dn.push(e);pn||(pn=!0,Gt(bn))}}function kn(e,t){if(e){for(var n=Object.create(null),a=de?Reflect.ownKeys(e):Object.keys(e),r=0;r-1)if(i&&!x(r,"default"))o=!1;else if(""===o||o===I(e)){var l=Wn(String,r.type);(l<0||s-1:"string"==typeof e?e.split(",").indexOf(t)>-1:!!h(e)&&e.test(t)}function ra(e,t){var n=e.cache,a=e.keys,r=e._vnode;for(var i in n){var o=n[i];if(o){var s=o.name;s&&!t(s)&&ia(n,i,a,r)}}}function ia(e,t,n,a){var r=e[t];!r||a&&r.tag===a.tag||r.componentInstance.$destroy(),e[t]=null,w(n,t)}ea.prototype._init=function(e){var t=this;t._uid=Zn++,t._isVue=!0,t.__v_skip=!0,t._scope=new Ke(!0),t._scope._vm=!0,e&&e._isComponent?function(e,t){var n=e.$options=Object.create(e.constructor.options),a=t._parentVnode;n.parent=t.parent,n._parentVnode=a;var r=a.componentOptions;n.propsData=r.propsData,n._parentListeners=r.listeners,n._renderChildren=r.children,n._componentTag=r.tag,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}(t,e):t.$options=Rn(Xn(t.constructor),e||{},t),t._renderProxy=t,t._self=t,function(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._provided=n?n._provided:Object.create(null),e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}(t),function(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&nn(e,t)}(t),function(e){e._vnode=null,e._staticTrees=null;var t=e.$options,n=e.$vnode=t._parentVnode,r=n&&n.context;e.$slots=bt(t._renderChildren,r),e.$scopedSlots=n?xt(e.$parent,n.data.scopedSlots,e.$slots):a,e._c=function(t,n,a,r){return Et(e,t,n,a,r,!1)},e.$createElement=function(t,n,a,r){return Et(e,t,n,a,r,!0)};var i=n&&n.data;Fe(e,"$attrs",i&&i.attrs||a,null,!0),Fe(e,"$listeners",t._parentListeners||a,null,!0)}(t),ln(t,"beforeCreate",void 0,!1),function(e){var t=kn(e.$options.inject,e);t&&(Se(!1),Object.keys(t).forEach((function(n){Fe(e,n,t[n])})),Se(!0))}(t),Gn(t),function(e){var t=e.$options.provide;if(t){var n=d(t)?t.call(e):t;if(!c(n))return;for(var a=Ye(e),r=de?Reflect.ownKeys(n):Object.keys(n),i=0;i1?D(n):n;for(var a=D(arguments,1),r='event handler for "'.concat(e,'"'),i=0,o=n.length;iparseInt(this.max)&&ia(e,t[0],t,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var e in this.cache)ia(this.cache,e,this.keys)},mounted:function(){var e=this;this.cacheVNode(),this.$watch("include",(function(t){ra(e,(function(e){return aa(t,e)}))})),this.$watch("exclude",(function(t){ra(e,(function(e){return!aa(t,e)}))}))},updated:function(){this.cacheVNode()},render:function(){var e=this.$slots.default,t=Ft(e),n=t&&t.componentOptions;if(n){var a=na(n),r=this.include,i=this.exclude;if(r&&(!a||!aa(r,a))||i&&a&&aa(i,a))return t;var o=this.cache,s=this.keys,l=null==t.key?n.Ctor.cid+(n.tag?"::".concat(n.tag):""):t.key;o[l]?(t.componentInstance=o[l].componentInstance,w(s,l),s.push(l)):(this.vnodeToCache=t,this.keyToCache=l),t.data.keepAlive=!0}return t||e&&e[0]}}};!function(e){var t={get:function(){return $}};Object.defineProperty(e,"config",t),e.util={warn:Dn,extend:F,mergeOptions:Rn,defineReactive:Fe},e.set=Ee,e.delete=Pe,e.nextTick=Gt,e.observable=function(e){return De(e),e},e.options=Object.create(null),U.forEach((function(t){e.options[t+"s"]=Object.create(null)})),e.options._base=e,F(e.options.components,sa),function(e){e.use=function(e){var t=this._installedPlugins||(this._installedPlugins=[]);if(t.indexOf(e)>-1)return this;var n=D(arguments,1);return n.unshift(this),d(e.install)?e.install.apply(e,n):d(e)&&e.apply(null,n),t.push(e),this}}(e),function(e){e.mixin=function(e){return this.options=Rn(this.options,e),this}}(e),ta(e),function(e){U.forEach((function(t){e[t]=function(e,n){return n?("component"===t&&p(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&d(n)&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}}))}(e)}(ea),Object.defineProperty(ea.prototype,"$isServer",{get:ie}),Object.defineProperty(ea.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(ea,"FunctionalRenderContext",{value:xn}),ea.version="2.7.14";var la=g("style,class"),da=g("input,textarea,option,select,progress"),ca=g("contenteditable,draggable,spellcheck"),ua=g("events,caret,typing,plaintext-only"),pa=g("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),ha="http://www.w3.org/1999/xlink",fa=function(e){return":"===e.charAt(5)&&"xlink"===e.slice(0,5)},ma=function(e){return fa(e)?e.slice(6,e.length):""},va=function(e){return null==e||!1===e};function ya(e){for(var t=e.data,n=e,a=e;o(a.componentInstance);)(a=a.componentInstance._vnode)&&a.data&&(t=ga(a.data,t));for(;o(n=n.parent);)n&&n.data&&(t=ga(t,n.data));return function(e,t){if(o(e)||o(t))return ba(e,wa(t));return""}(t.staticClass,t.class)}function ga(e,t){return{staticClass:ba(e.staticClass,t.staticClass),class:o(e.class)?[e.class,t.class]:t.class}}function ba(e,t){return e?t?e+" "+t:e:t||""}function wa(e){return Array.isArray(e)?function(e){for(var t,n="",a=0,r=e.length;a-1?Va(e,t,n):pa(t)?va(n)?e.removeAttribute(t):(n="allowfullscreen"===t&&"EMBED"===e.tagName?"true":t,e.setAttribute(t,n)):ca(t)?e.setAttribute(t,function(e,t){return va(t)||"false"===t?"false":"contenteditable"===e&&ua(t)?t:"true"}(t,n)):fa(t)?va(n)?e.removeAttributeNS(ha,ma(t)):e.setAttributeNS(ha,t,n):Va(e,t,n)}function Va(e,t,n){if(va(n))e.removeAttribute(t);else{if(Y&&!Q&&"TEXTAREA"===e.tagName&&"placeholder"===t&&""!==n&&!e.__ieph){var a=function(t){t.stopImmediatePropagation(),e.removeEventListener("input",a)};e.addEventListener("input",a),e.__ieph=!0}e.setAttribute(t,n)}}var Ba={create:$a,update:$a};function Ga(e,t){var n=t.elm,a=t.data,r=e.data;if(!(i(a.staticClass)&&i(a.class)&&(i(r)||i(r.staticClass)&&i(r.class)))){var s=ya(t),l=n._transitionClasses;o(l)&&(s=ba(s,wa(l))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}var Ha,Ja={create:Ga,update:Ga};function Ka(e,t,n){var a=Ha;return function r(){var i=t.apply(null,arguments);null!==i&&Za(e,r,n,a)}}var Ya=Mt&&!(te&&Number(te[1])<=53);function Qa(e,t,n,a){if(Ya){var r=mn,i=t;t=i._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=r||e.timeStamp<=0||e.target.ownerDocument!==document)return i.apply(this,arguments)}}Ha.addEventListener(e,t,ae?{capture:n,passive:a}:n)}function Za(e,t,n,a){(a||Ha).removeEventListener(e,t._wrapper||t,n)}function Xa(e,t){if(!i(e.data.on)||!i(t.data.on)){var n=t.data.on||{},a=e.data.on||{};Ha=t.elm||e.elm,function(e){if(o(e.__r)){var t=Y?"change":"input";e[t]=[].concat(e.__r,e[t]||[]),delete e.__r}o(e.__c)&&(e.change=[].concat(e.__c,e.change||[]),delete e.__c)}(n),Xe(n,a,Qa,Za,Ka,t.context),Ha=void 0}}var er,tr={create:Xa,update:Xa,destroy:function(e){return Xa(e,Fa)}};function nr(e,t){if(!i(e.data.domProps)||!i(t.data.domProps)){var n,a,r=t.elm,l=e.data.domProps||{},d=t.data.domProps||{};for(n in(o(d.__ob__)||s(d._v_attr_proxy))&&(d=t.data.domProps=F({},d)),l)n in d||(r[n]="");for(n in d){if(a=d[n],"textContent"===n||"innerHTML"===n){if(t.children&&(t.children.length=0),a===l[n])continue;1===r.childNodes.length&&r.removeChild(r.childNodes[0])}if("value"===n&&"PROGRESS"!==r.tagName){r._value=a;var c=i(a)?"":String(a);ar(r,c)&&(r.value=c)}else if("innerHTML"===n&&Ta(r.tagName)&&i(r.innerHTML)){(er=er||document.createElement("div")).innerHTML="".concat(a,"");for(var u=er.firstChild;r.firstChild;)r.removeChild(r.firstChild);for(;u.firstChild;)r.appendChild(u.firstChild)}else if(a!==l[n])try{r[n]=a}catch(e){}}}}function ar(e,t){return!e.composing&&("OPTION"===e.tagName||function(e,t){var n=!0;try{n=document.activeElement!==e}catch(e){}return n&&e.value!==t}(e,t)||function(e,t){var n=e.value,a=e._vModifiers;if(o(a)){if(a.number)return y(n)!==y(t);if(a.trim)return n.trim()!==t.trim()}return n!==t}(e,t))}var rr={create:nr,update:nr},ir=T((function(e){var t={},n=/:(.+)/;return e.split(/;(?![^(]*\))/g).forEach((function(e){if(e){var a=e.split(n);a.length>1&&(t[a[0].trim()]=a[1].trim())}})),t}));function or(e){var t=sr(e.style);return e.staticStyle?F(e.staticStyle,t):t}function sr(e){return Array.isArray(e)?E(e):"string"==typeof e?ir(e):e}var lr,dr=/^--/,cr=/\s*!important$/,ur=function(e,t,n){if(dr.test(t))e.style.setProperty(t,n);else if(cr.test(n))e.style.setProperty(I(t),n.replace(cr,""),"important");else{var a=hr(t);if(Array.isArray(n))for(var r=0,i=n.length;r-1?t.split(vr).forEach((function(t){return e.classList.add(t)})):e.classList.add(t);else{var n=" ".concat(e.getAttribute("class")||""," ");n.indexOf(" "+t+" ")<0&&e.setAttribute("class",(n+t).trim())}}function gr(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(vr).forEach((function(t){return e.classList.remove(t)})):e.classList.remove(t),e.classList.length||e.removeAttribute("class");else{for(var n=" ".concat(e.getAttribute("class")||""," "),a=" "+t+" ";n.indexOf(a)>=0;)n=n.replace(a," ");(n=n.trim())?e.setAttribute("class",n):e.removeAttribute("class")}}function br(e){if(e){if("object"==typeof e){var t={};return!1!==e.css&&F(t,wr(e.name||"v")),F(t,e),t}return"string"==typeof e?wr(e):void 0}}var wr=T((function(e){return{enterClass:"".concat(e,"-enter"),enterToClass:"".concat(e,"-enter-to"),enterActiveClass:"".concat(e,"-enter-active"),leaveClass:"".concat(e,"-leave"),leaveToClass:"".concat(e,"-leave-to"),leaveActiveClass:"".concat(e,"-leave-active")}})),kr=J&&!Q,xr="transition",Tr="transitionend",_r="animation",Ar="animationend";kr&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(xr="WebkitTransition",Tr="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(_r="WebkitAnimation",Ar="webkitAnimationEnd"));var jr=J?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function Sr(e){jr((function(){jr(e)}))}function Ir(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n.indexOf(t)<0&&(n.push(t),yr(e,t))}function Cr(e,t){e._transitionClasses&&w(e._transitionClasses,t),gr(e,t)}function Dr(e,t,n){var a=Er(e,t),r=a.type,i=a.timeout,o=a.propCount;if(!r)return n();var s="transition"===r?Tr:Ar,l=0,d=function(){e.removeEventListener(s,c),n()},c=function(t){t.target===e&&++l>=o&&d()};setTimeout((function(){l0&&(n="transition",c=o,u=i.length):"animation"===t?d>0&&(n="animation",c=d,u=l.length):u=(n=(c=Math.max(o,d))>0?o>d?"transition":"animation":null)?"transition"===n?i.length:l.length:0,{type:n,timeout:c,propCount:u,hasTransform:"transition"===n&&Fr.test(a[xr+"Property"])}}function Pr(e,t){for(;e.length1}function Lr(e,t){!0!==t.data.show&&Or(t)}var Ur=function(e){var t,n,a={},d=e.modules,c=e.nodeOps;for(t=0;tf?w(e,i(n[y+1])?null:n[y+1].elm,n,h,y,a):h>y&&x(t,u,f)}(u,m,y,n,d):o(y)?(o(e.text)&&c.setTextContent(u,""),w(u,null,y,0,y.length-1,n)):o(m)?x(m,0,m.length-1):o(e.text)&&c.setTextContent(u,""):e.text!==t.text&&c.setTextContent(u,t.text),o(f)&&o(h=f.hook)&&o(h=h.postpatch)&&h(e,t)}}}function j(e,t,n){if(s(n)&&o(e.parent))e.parent.data.pendingInsert=t;else for(var a=0;a-1,o.selected!==i&&(o.selected=i);else if(q(Br(o),a))return void(e.selectedIndex!==s&&(e.selectedIndex=s));r||(e.selectedIndex=-1)}}function Vr(e,t){return t.every((function(t){return!q(t,e)}))}function Br(e){return"_value"in e?e._value:e.value}function Gr(e){e.target.composing=!0}function Hr(e){e.target.composing&&(e.target.composing=!1,Jr(e.target,"input"))}function Jr(e,t){var n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function Kr(e){return!e.componentInstance||e.data&&e.data.transition?e:Kr(e.componentInstance._vnode)}var Yr={model:Nr,show:{bind:function(e,t,n){var a=t.value,r=(n=Kr(n)).data&&n.data.transition,i=e.__vOriginalDisplay="none"===e.style.display?"":e.style.display;a&&r?(n.data.show=!0,Or(n,(function(){e.style.display=i}))):e.style.display=a?i:"none"},update:function(e,t,n){var a=t.value;!a!=!t.oldValue&&((n=Kr(n)).data&&n.data.transition?(n.data.show=!0,a?Or(n,(function(){e.style.display=e.__vOriginalDisplay})):qr(n,(function(){e.style.display="none"}))):e.style.display=a?e.__vOriginalDisplay:"none")},unbind:function(e,t,n,a,r){r||(e.style.display=e.__vOriginalDisplay)}}},Qr={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Zr(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?Zr(Ft(t.children)):e}function Xr(e){var t={},n=e.$options;for(var a in n.propsData)t[a]=e[a];var r=n._parentListeners;for(var a in r)t[A(a)]=r[a];return t}function ei(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{props:t.componentOptions.propsData})}var ti=function(e){return e.tag||kt(e)},ni=function(e){return"show"===e.name},ai={name:"transition",props:Qr,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(ti)).length){0;var a=this.mode;0;var r=n[0];if(function(e){for(;e=e.parent;)if(e.data.transition)return!0}(this.$vnode))return r;var i=Zr(r);if(!i)return r;if(this._leaving)return ei(e,r);var o="__transition-".concat(this._uid,"-");i.key=null==i.key?i.isComment?o+"comment":o+i.tag:l(i.key)?0===String(i.key).indexOf(o)?i.key:o+i.key:i.key;var s=(i.data||(i.data={})).transition=Xr(this),d=this._vnode,c=Zr(d);if(i.data.directives&&i.data.directives.some(ni)&&(i.data.show=!0),c&&c.data&&!function(e,t){return t.key===e.key&&t.tag===e.tag}(i,c)&&!kt(c)&&(!c.componentInstance||!c.componentInstance._vnode.isComment)){var u=c.data.transition=F({},s);if("out-in"===a)return this._leaving=!0,et(u,"afterLeave",(function(){t._leaving=!1,t.$forceUpdate()})),ei(e,r);if("in-out"===a){if(kt(i))return d;var p,h=function(){p()};et(s,"afterEnter",h),et(s,"enterCancelled",h),et(u,"delayLeave",(function(e){p=e}))}}return r}}},ri=F({tag:String,moveClass:String},Qr);function ii(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._enterCb()}function oi(e){e.data.newPos=e.elm.getBoundingClientRect()}function si(e){var t=e.data.pos,n=e.data.newPos,a=t.left-n.left,r=t.top-n.top;if(a||r){e.data.moved=!0;var i=e.elm.style;i.transform=i.WebkitTransform="translate(".concat(a,"px,").concat(r,"px)"),i.transitionDuration="0s"}}delete ri.mode;var li={Transition:ai,TransitionGroup:{props:ri,beforeMount:function(){var e=this,t=this._update;this._update=function(n,a){var r=rn(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,r(),t.call(e,n,a)}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),a=this.prevChildren=this.children,r=this.$slots.default||[],i=this.children=[],o=Xr(this),s=0;s-1?Aa[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:Aa[e]=/HTMLUnknownElement/.test(t.toString())},F(ea.options.directives,Yr),F(ea.options.components,li),ea.prototype.__patch__=J?Ur:P,ea.prototype.$mount=function(e,t){return function(e,t,n){var a;e.$el=t,e.$options.render||(e.$options.render=he),ln(e,"beforeMount"),a=function(){e._update(e._render(),n)},new Zt(e,a,P,{before:function(){e._isMounted&&!e._isDestroyed&&ln(e,"beforeUpdate")}},!0),n=!1;var r=e._preWatchers;if(r)for(var i=0;i=0&&(t=e.slice(a),e=e.slice(0,a));var r=e.indexOf("?");return r>=0&&(n=e.slice(r+1),e=e.slice(0,r)),{path:e,query:n,hash:t}}(r.path||""),d=t&&t.path||"/",c=l.path?Ci(l.path,d,n||r.append):d,u=function(e,t,n){void 0===t&&(t={});var a,r=n||vi;try{a=r(e||"")}catch(e){a={}}for(var i in t){var o=t[i];a[i]=Array.isArray(o)?o.map(mi):mi(o)}return a}(l.query,r.query,a&&a.options.parseQuery),p=r.hash||l.hash;return p&&"#"!==p.charAt(0)&&(p="#"+p),{_normalized:!0,path:c,query:u,hash:p}}var Yi,Qi=function(){},Zi={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render:function(e){var t=this,n=this.$router,a=this.$route,r=n.resolve(this.to,a,this.append),i=r.location,o=r.route,s=r.href,l={},d=n.options.linkActiveClass,c=n.options.linkExactActiveClass,u=null==d?"router-link-active":d,p=null==c?"router-link-exact-active":c,h=null==this.activeClass?u:this.activeClass,f=null==this.exactActiveClass?p:this.exactActiveClass,m=o.redirectedFrom?bi(null,Ki(o.redirectedFrom),null,n):o;l[f]=_i(a,m,this.exactPath),l[h]=this.exact||this.exactPath?l[f]:function(e,t){return 0===e.path.replace(gi,"/").indexOf(t.path.replace(gi,"/"))&&(!t.hash||e.hash===t.hash)&&function(e,t){for(var n in t)if(!(n in e))return!1;return!0}(e.query,t.query)}(a,m);var v=l[f]?this.ariaCurrentValue:null,y=function(e){Xi(e)&&(t.replace?n.replace(i,Qi):n.push(i,Qi))},g={click:Xi};Array.isArray(this.event)?this.event.forEach((function(e){g[e]=y})):g[this.event]=y;var b={class:l},w=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:s,route:o,navigate:y,isActive:l[h],isExactActive:l[f]});if(w){if(1===w.length)return w[0];if(w.length>1||!w.length)return 0===w.length?e():e("span",{},w)}if("a"===this.tag)b.on=g,b.attrs={href:s,"aria-current":v};else{var k=function e(t){var n;if(t)for(var a=0;a-1&&(s.params[p]=n.params[p]);return s.path=Ji(c.path,s.params),l(c,s,o)}if(s.path){s.params={};for(var h=0;h-1}function Fo(e,t){return Do(e)&&e._isRouter&&(null==t||e.type===t)}function Eo(e,t,n){var a=function(r){r>=e.length?n():e[r]?t(e[r],(function(){a(r+1)})):a(r+1)};a(0)}function Po(e){return function(t,n,a){var r=!1,i=0,o=null;zo(e,(function(e,t,n,s){if("function"==typeof e&&void 0===e.cid){r=!0,i++;var l,d=Ro((function(t){var r;((r=t).__esModule||qo&&"Module"===r[Symbol.toStringTag])&&(t=t.default),e.resolved="function"==typeof t?t:Yi.extend(t),n.components[s]=t,--i<=0&&a()})),c=Ro((function(e){var t="Failed to resolve async component "+s+": "+e;o||(o=Do(e)?e:new Error(t),a(o))}));try{l=e(d,c)}catch(e){c(e)}if(l)if("function"==typeof l.then)l.then(d,c);else{var u=l.component;u&&"function"==typeof u.then&&u.then(d,c)}}})),r||a()}}function zo(e,t){return Oo(e.map((function(e){return Object.keys(e.components).map((function(n){return t(e.components[n],e.instances[n],e,n)}))})))}function Oo(e){return Array.prototype.concat.apply([],e)}var qo="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function Ro(e){var t=!1;return function(){for(var n=[],a=arguments.length;a--;)n[a]=arguments[a];if(!t)return t=!0,e.apply(this,n)}}var Mo=function(e,t){this.router=e,this.base=function(e){if(!e)if(eo){var t=document.querySelector("base");e=(e=t&&t.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else e="/";"/"!==e.charAt(0)&&(e="/"+e);return e.replace(/\/$/,"")}(t),this.current=ki,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function Lo(e,t,n,a){var r=zo(e,(function(e,a,r,i){var o=function(e,t){"function"!=typeof e&&(e=Yi.extend(e));return e.options[t]}(e,t);if(o)return Array.isArray(o)?o.map((function(e){return n(e,a,r,i)})):n(o,a,r,i)}));return Oo(a?r.reverse():r)}function Uo(e,t){if(t)return function(){return e.apply(t,arguments)}}Mo.prototype.listen=function(e){this.cb=e},Mo.prototype.onReady=function(e,t){this.ready?e():(this.readyCbs.push(e),t&&this.readyErrorCbs.push(t))},Mo.prototype.onError=function(e){this.errorCbs.push(e)},Mo.prototype.transitionTo=function(e,t,n){var a,r=this;try{a=this.router.match(e,this.current)}catch(e){throw this.errorCbs.forEach((function(t){t(e)})),e}var i=this.current;this.confirmTransition(a,(function(){r.updateRoute(a),t&&t(a),r.ensureURL(),r.router.afterHooks.forEach((function(e){e&&e(a,i)})),r.ready||(r.ready=!0,r.readyCbs.forEach((function(e){e(a)})))}),(function(e){n&&n(e),e&&!r.ready&&(Fo(e,Ao.redirected)&&i===ki||(r.ready=!0,r.readyErrorCbs.forEach((function(t){t(e)}))))}))},Mo.prototype.confirmTransition=function(e,t,n){var a=this,r=this.current;this.pending=e;var i,o,s=function(e){!Fo(e)&&Do(e)&&(a.errorCbs.length?a.errorCbs.forEach((function(t){t(e)})):console.error(e)),n&&n(e)},l=e.matched.length-1,d=r.matched.length-1;if(_i(e,r)&&l===d&&e.matched[l]===r.matched[d])return this.ensureURL(),e.hash&&ho(this.router,r,e,!1),s(((o=Io(i=r,e,Ao.duplicated,'Avoided redundant navigation to current location: "'+i.fullPath+'".')).name="NavigationDuplicated",o));var c=function(e,t){var n,a=Math.max(e.length,t.length);for(n=0;n0)){var t=this.router,n=t.options.scrollBehavior,a=xo&&n;a&&this.listeners.push(po());var r=function(){var n=e.current,r=$o(e.base);e.current===ki&&r===e._startLocation||e.transitionTo(r,(function(e){a&&ho(t,e,n,!0)}))};window.addEventListener("popstate",r),this.listeners.push((function(){window.removeEventListener("popstate",r)}))}},t.prototype.go=function(e){window.history.go(e)},t.prototype.push=function(e,t,n){var a=this,r=this.current;this.transitionTo(e,(function(e){To(Di(a.base+e.fullPath)),ho(a.router,e,r,!1),t&&t(e)}),n)},t.prototype.replace=function(e,t,n){var a=this,r=this.current;this.transitionTo(e,(function(e){_o(Di(a.base+e.fullPath)),ho(a.router,e,r,!1),t&&t(e)}),n)},t.prototype.ensureURL=function(e){if($o(this.base)!==this.current.fullPath){var t=Di(this.base+this.current.fullPath);e?To(t):_o(t)}},t.prototype.getCurrentLocation=function(){return $o(this.base)},t}(Mo);function $o(e){var t=window.location.pathname,n=t.toLowerCase(),a=e.toLowerCase();return!e||n!==a&&0!==n.indexOf(Di(a+"/"))||(t=t.slice(e.length)),(t||"/")+window.location.search+window.location.hash}var Wo=function(e){function t(t,n,a){e.call(this,t,n),a&&function(e){var t=$o(e);if(!/^\/#/.test(t))return window.location.replace(Di(e+"/#"+t)),!0}(this.base)||Vo()}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.setupListeners=function(){var e=this;if(!(this.listeners.length>0)){var t=this.router.options.scrollBehavior,n=xo&&t;n&&this.listeners.push(po());var a=function(){var t=e.current;Vo()&&e.transitionTo(Bo(),(function(a){n&&ho(e.router,a,t,!0),xo||Jo(a.fullPath)}))},r=xo?"popstate":"hashchange";window.addEventListener(r,a),this.listeners.push((function(){window.removeEventListener(r,a)}))}},t.prototype.push=function(e,t,n){var a=this,r=this.current;this.transitionTo(e,(function(e){Ho(e.fullPath),ho(a.router,e,r,!1),t&&t(e)}),n)},t.prototype.replace=function(e,t,n){var a=this,r=this.current;this.transitionTo(e,(function(e){Jo(e.fullPath),ho(a.router,e,r,!1),t&&t(e)}),n)},t.prototype.go=function(e){window.history.go(e)},t.prototype.ensureURL=function(e){var t=this.current.fullPath;Bo()!==t&&(e?Ho(t):Jo(t))},t.prototype.getCurrentLocation=function(){return Bo()},t}(Mo);function Vo(){var e=Bo();return"/"===e.charAt(0)||(Jo("/"+e),!1)}function Bo(){var e=window.location.href,t=e.indexOf("#");return t<0?"":e=e.slice(t+1)}function Go(e){var t=window.location.href,n=t.indexOf("#");return(n>=0?t.slice(0,n):t)+"#"+e}function Ho(e){xo?To(Go(e)):window.location.hash=e}function Jo(e){xo?_o(Go(e)):window.location.replace(Go(e))}var Ko=function(e){function t(t,n){e.call(this,t,n),this.stack=[],this.index=-1}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.push=function(e,t,n){var a=this;this.transitionTo(e,(function(e){a.stack=a.stack.slice(0,a.index+1).concat(e),a.index++,t&&t(e)}),n)},t.prototype.replace=function(e,t,n){var a=this;this.transitionTo(e,(function(e){a.stack=a.stack.slice(0,a.index).concat(e),t&&t(e)}),n)},t.prototype.go=function(e){var t=this,n=this.index+e;if(!(n<0||n>=this.stack.length)){var a=this.stack[n];this.confirmTransition(a,(function(){var e=t.current;t.index=n,t.updateRoute(a),t.router.afterHooks.forEach((function(t){t&&t(a,e)}))}),(function(e){Fo(e,Ao.duplicated)&&(t.index=n)}))}},t.prototype.getCurrentLocation=function(){var e=this.stack[this.stack.length-1];return e?e.fullPath:"/"},t.prototype.ensureURL=function(){},t}(Mo),Yo=function(e){void 0===e&&(e={}),this.app=null,this.apps=[],this.options=e,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=ao(e.routes||[],this);var t=e.mode||"hash";switch(this.fallback="history"===t&&!xo&&!1!==e.fallback,this.fallback&&(t="hash"),eo||(t="abstract"),this.mode=t,t){case"history":this.history=new No(this,e.base);break;case"hash":this.history=new Wo(this,e.base,this.fallback);break;case"abstract":this.history=new Ko(this,e.base);break;default:0}},Qo={currentRoute:{configurable:!0}};Yo.prototype.match=function(e,t,n){return this.matcher.match(e,t,n)},Qo.currentRoute.get=function(){return this.history&&this.history.current},Yo.prototype.init=function(e){var t=this;if(this.apps.push(e),e.$once("hook:destroyed",(function(){var n=t.apps.indexOf(e);n>-1&&t.apps.splice(n,1),t.app===e&&(t.app=t.apps[0]||null),t.app||t.history.teardown()})),!this.app){this.app=e;var n=this.history;if(n instanceof No||n instanceof Wo){var a=function(e){n.setupListeners(),function(e){var a=n.current,r=t.options.scrollBehavior;xo&&r&&"fullPath"in e&&ho(t,e,a,!1)}(e)};n.transitionTo(n.getCurrentLocation(),a,a)}n.listen((function(e){t.apps.forEach((function(t){t._route=e}))}))}},Yo.prototype.beforeEach=function(e){return Xo(this.beforeHooks,e)},Yo.prototype.beforeResolve=function(e){return Xo(this.resolveHooks,e)},Yo.prototype.afterEach=function(e){return Xo(this.afterHooks,e)},Yo.prototype.onReady=function(e,t){this.history.onReady(e,t)},Yo.prototype.onError=function(e){this.history.onError(e)},Yo.prototype.push=function(e,t,n){var a=this;if(!t&&!n&&"undefined"!=typeof Promise)return new Promise((function(t,n){a.history.push(e,t,n)}));this.history.push(e,t,n)},Yo.prototype.replace=function(e,t,n){var a=this;if(!t&&!n&&"undefined"!=typeof Promise)return new Promise((function(t,n){a.history.replace(e,t,n)}));this.history.replace(e,t,n)},Yo.prototype.go=function(e){this.history.go(e)},Yo.prototype.back=function(){this.go(-1)},Yo.prototype.forward=function(){this.go(1)},Yo.prototype.getMatchedComponents=function(e){var t=e?e.matched?e:this.resolve(e).route:this.currentRoute;return t?[].concat.apply([],t.matched.map((function(e){return Object.keys(e.components).map((function(t){return e.components[t]}))}))):[]},Yo.prototype.resolve=function(e,t,n){var a=Ki(e,t=t||this.history.current,n,this),r=this.match(a,t),i=r.redirectedFrom||r.fullPath;return{location:a,route:r,href:function(e,t,n){var a="hash"===n?"#"+t:t;return e?Di(e+"/"+a):a}(this.history.base,i,this.mode),normalizedTo:a,resolved:r}},Yo.prototype.getRoutes=function(){return this.matcher.getRoutes()},Yo.prototype.addRoute=function(e,t){this.matcher.addRoute(e,t),this.history.current!==ki&&this.history.transitionTo(this.history.getCurrentLocation())},Yo.prototype.addRoutes=function(e){this.matcher.addRoutes(e),this.history.current!==ki&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(Yo.prototype,Qo);var Zo=Yo;function Xo(e,t){return e.push(t),function(){var n=e.indexOf(t);n>-1&&e.splice(n,1)}}Yo.install=function e(t){if(!e.installed||Yi!==t){e.installed=!0,Yi=t;var n=function(e){return void 0!==e},a=function(e,t){var a=e.$options._parentVnode;n(a)&&n(a=a.data)&&n(a=a.registerRouteInstance)&&a(e,t)};t.mixin({beforeCreate:function(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),t.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,a(this,this)},destroyed:function(){a(this)}}),Object.defineProperty(t.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(t.prototype,"$route",{get:function(){return this._routerRoot._route}}),t.component("RouterView",Si),t.component("RouterLink",Zi);var r=t.config.optionMergeStrategies;r.beforeRouteEnter=r.beforeRouteLeave=r.beforeRouteUpdate=r.created}},Yo.version="3.6.5",Yo.isNavigationFailure=Fo,Yo.NavigationFailureType=Ao,Yo.START_LOCATION=ki,eo&&window.Vue&&window.Vue.use(Yo);n(102);n(91),n(129);var es={NotFound:()=>n.e(7).then(n.bind(null,300)),Layout:()=>Promise.all([n.e(0),n.e(3),n.e(2)]).then(n.bind(null,299))},ts={"v-5e1e685a":()=>n.e(8).then(n.bind(null,303)),"v-c97ca880":()=>n.e(9).then(n.bind(null,304)),"v-0d609624":()=>n.e(10).then(n.bind(null,305)),"v-4f037d1a":()=>n.e(11).then(n.bind(null,306)),"v-18d0587a":()=>n.e(12).then(n.bind(null,307)),"v-3120da0c":()=>n.e(13).then(n.bind(null,308)),"v-2f7f848c":()=>n.e(14).then(n.bind(null,309)),"v-2eaf1140":()=>n.e(15).then(n.bind(null,310)),"v-09d6f550":()=>n.e(17).then(n.bind(null,311)),"v-18c2b964":()=>n.e(16).then(n.bind(null,312)),"v-9356a30c":()=>n.e(18).then(n.bind(null,313)),"v-7cc0117c":()=>n.e(19).then(n.bind(null,314)),"v-690a4650":()=>n.e(20).then(n.bind(null,315)),"v-58f7366c":()=>n.e(21).then(n.bind(null,316)),"v-0877efcc":()=>n.e(22).then(n.bind(null,317)),"v-950c4d48":()=>n.e(23).then(n.bind(null,318)),"v-47c1f97a":()=>n.e(24).then(n.bind(null,319)),"v-31657474":()=>n.e(27).then(n.bind(null,320)),"v-4fc0d1c8":()=>n.e(26).then(n.bind(null,321)),"v-4fad50ba":()=>n.e(25).then(n.bind(null,322)),"v-e2784654":()=>n.e(28).then(n.bind(null,323)),"v-0c3bd15a":()=>n.e(29).then(n.bind(null,324)),"v-84e0b14c":()=>n.e(30).then(n.bind(null,325)),"v-074d53cc":()=>n.e(31).then(n.bind(null,326)),"v-0d650648":()=>n.e(32).then(n.bind(null,327)),"v-3e6ef1ac":()=>n.e(33).then(n.bind(null,328)),"v-6dd912ec":()=>n.e(34).then(n.bind(null,329)),"v-3258450c":()=>n.e(36).then(n.bind(null,330)),"v-52bf2fcc":()=>n.e(35).then(n.bind(null,331)),"v-35b0f3b1":()=>n.e(38).then(n.bind(null,332)),"v-e65ea9a4":()=>n.e(39).then(n.bind(null,333)),"v-a6e64848":()=>n.e(37).then(n.bind(null,334)),"v-57c590fa":()=>n.e(40).then(n.bind(null,335)),"v-45095440":()=>n.e(41).then(n.bind(null,336)),"v-d297eaa6":()=>n.e(42).then(n.bind(null,337)),"v-f81e553c":()=>n.e(43).then(n.bind(null,338)),"v-5d3101c8":()=>n.e(45).then(n.bind(null,339)),"v-7cc2c9e4":()=>n.e(44).then(n.bind(null,340)),"v-501d8193":()=>n.e(46).then(n.bind(null,341))};function ns(e){const t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}const as=/-(\w)/g,rs=ns(e=>e.replace(as,(e,t)=>t?t.toUpperCase():"")),is=/\B([A-Z])/g,os=ns(e=>e.replace(is,"-$1").toLowerCase()),ss=ns(e=>e.charAt(0).toUpperCase()+e.slice(1));function ls(e,t){if(!t)return;if(e(t))return e(t);return t.includes("-")?e(ss(rs(t))):e(ss(t))||e(os(t))}const ds=Object.assign({},es,ts),cs=e=>ds[e],us=e=>ts[e],ps=e=>es[e],hs=e=>ea.component(e);function fs(e){return ls(us,e)}function ms(e){return ls(ps,e)}function vs(e){return ls(cs,e)}function ys(e){return ls(hs,e)}function gs(...e){return Promise.all(e.filter(e=>e).map(async e=>{if(!ys(e)&&vs(e)){const t=await vs(e)();ea.component(e,t.default)}}))}function bs(e,t){"undefined"!=typeof window&&window.__VUEPRESS__&&(window.__VUEPRESS__[e]=t)}var ws=n(88),ks=n.n(ws),xs=n(89),Ts=n.n(xs),_s={created(){if(this.siteMeta=this.$site.headTags.filter(([e])=>"meta"===e).map(([e,t])=>t),this.$ssrContext){const t=this.getMergedMetaTags();this.$ssrContext.title=this.$title,this.$ssrContext.lang=this.$lang,this.$ssrContext.pageMeta=(e=t)?e.map(e=>{let t="{t+=` ${n}="${Ts()(e[n])}"`}),t+">"}).join("\n "):"",this.$ssrContext.canonicalLink=js(this.$canonicalUrl)}var e},mounted(){this.currentMetaTags=[...document.querySelectorAll("meta")],this.updateMeta(),this.updateCanonicalLink()},methods:{updateMeta(){document.title=this.$title,document.documentElement.lang=this.$lang;const e=this.getMergedMetaTags();this.currentMetaTags=Ss(e,this.currentMetaTags)},getMergedMetaTags(){const e=this.$page.frontmatter.meta||[];return ks()([{name:"description",content:this.$description}],e,this.siteMeta,Is)},updateCanonicalLink(){As(),this.$canonicalUrl&&document.head.insertAdjacentHTML("beforeend",js(this.$canonicalUrl))}},watch:{$page(){this.updateMeta(),this.updateCanonicalLink()}},beforeDestroy(){Ss(null,this.currentMetaTags),As()}};function As(){const e=document.querySelector("link[rel='canonical']");e&&e.remove()}function js(e=""){return e?``:""}function Ss(e,t){if(t&&[...t].filter(e=>e.parentNode===document.head).forEach(e=>document.head.removeChild(e)),e)return e.map(e=>{const t=document.createElement("meta");return Object.keys(e).forEach(n=>{t.setAttribute(n,e[n])}),document.head.appendChild(t),t})}function Is(e){for(const t of["name","property","itemprop"])if(e.hasOwnProperty(t))return e[t]+t;return JSON.stringify(e)}var Cs=n(90),Ds={mounted(){window.addEventListener("scroll",this.onScroll)},methods:{onScroll:n.n(Cs)()((function(){this.setActiveHash()}),300),setActiveHash(){const e=[].slice.call(document.querySelectorAll(".sidebar-link")),t=[].slice.call(document.querySelectorAll(".header-anchor")).filter(t=>e.some(e=>e.hash===t.hash)),n=Math.max(window.pageYOffset,document.documentElement.scrollTop,document.body.scrollTop),a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),r=window.innerHeight+n;for(let e=0;e=i.parentElement.offsetTop+10&&(!o||n{this.$nextTick(()=>{this.$vuepress.$set("disableScrollBehavior",!1)})})}}}},beforeDestroy(){window.removeEventListener("scroll",this.onScroll)}},Fs=n(22),Es=n.n(Fs),Ps={mounted(){Es.a.configure({showSpinner:!1}),this.$router.beforeEach((e,t,n)=>{e.path===t.path||ea.component(e.name)||Es.a.start(),n()}),this.$router.afterEach(()=>{Es.a.done(),this.isSidebarOpen=!1})}},zs={props:{parent:Object,code:String,options:{align:String,color:String,backgroundTransition:Boolean,backgroundColor:String,successText:String,staticIcon:Boolean}},data:()=>({success:!1,originalBackground:null,originalTransition:null}),computed:{alignStyle(){let e={};return e[this.options.align]="7.5px",e},iconClass(){return this.options.staticIcon?"":"hover"}},mounted(){this.originalTransition=this.parent.style.transition,this.originalBackground=this.parent.style.background},beforeDestroy(){this.parent.style.transition=this.originalTransition,this.parent.style.background=this.originalBackground},methods:{hexToRgb(e){let t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return t?{r:parseInt(t[1],16),g:parseInt(t[2],16),b:parseInt(t[3],16)}:null},copyToClipboard(e){if(navigator.clipboard)navigator.clipboard.writeText(this.code).then(()=>{this.setSuccessTransitions()},()=>{});else{let e=document.createElement("textarea");document.body.appendChild(e),e.value=this.code,e.select(),document.execCommand("Copy"),e.remove(),this.setSuccessTransitions()}},setSuccessTransitions(){if(clearTimeout(this.successTimeout),this.options.backgroundTransition){this.parent.style.transition="background 350ms";let e=this.hexToRgb(this.options.backgroundColor);this.parent.style.background=`rgba(${e.r}, ${e.g}, ${e.b}, 0.1)`}this.success=!0,this.successTimeout=setTimeout(()=>{this.options.backgroundTransition&&(this.parent.style.background=this.originalBackground,this.parent.style.transition=this.originalTransition),this.success=!1},500)}}},Os=(n(237),n(10)),qs=Object(Os.a)(zs,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"code-copy"},[t("svg",{class:e.iconClass,style:e.alignStyle,attrs:{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},on:{click:e.copyToClipboard}},[t("path",{attrs:{fill:"none",d:"M0 0h24v24H0z"}}),e._v(" "),t("path",{attrs:{fill:e.options.color,d:"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z"}})]),e._v(" "),t("span",{class:e.success?"success":"",style:e.alignStyle},[e._v("\n "+e._s(e.options.successText)+"\n ")])])}),[],!1,null,"49140617",null).exports,Rs=(n(238),[_s,Ds,Ps,{updated(){this.update()},methods:{update(){setTimeout(()=>{document.querySelectorAll('div[class*="language-"] pre').forEach(e=>{if(e.classList.contains("code-copy-added"))return;let t=new(ea.extend(qs));t.options={align:"bottom",color:"#27b1ff",backgroundTransition:!0,backgroundColor:"#0075b8",successText:"Copied!",staticIcon:!1},t.code=e.innerText,t.parent=e,t.$mount(),e.classList.add("code-copy-added"),e.appendChild(t.$el)})},100)}}}]),Ms={name:"GlobalLayout",computed:{layout(){const e=this.getLayout();return bs("layout",e),ea.component(e)}},methods:{getLayout(){if(this.$page.path){const e=this.$page.frontmatter.layout;return e&&(this.$vuepress.getLayoutAsyncComponent(e)||this.$vuepress.getVueComponent(e))?e:"Layout"}return"NotFound"}}},Ls=Object(Os.a)(Ms,(function(){return(0,this._self._c)(this.layout,{tag:"component"})}),[],!1,null,null,null).exports;!function(e,t,n){switch(t){case"components":e[t]||(e[t]={}),Object.assign(e[t],n);break;case"mixins":e[t]||(e[t]=[]),e[t].push(...n);break;default:throw new Error("Unknown option name.")}}(Ls,"mixins",Rs);const Us=[{name:"v-5e1e685a",path:"/docs/arfs/content-types.html",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-5e1e685a").then(n)}},{name:"v-c97ca880",path:"/docs/arfs/data-model.html",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-c97ca880").then(n)}},{name:"v-0d609624",path:"/docs/arfs/entity-types.html",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-0d609624").then(n)}},{name:"v-4f037d1a",path:"/docs/arfs/",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-4f037d1a").then(n)}},{path:"/docs/arfs/index.html",redirect:"/docs/arfs/"},{path:"/docs/arfs/overview.html",redirect:"/docs/arfs/"},{name:"v-18d0587a",path:"/docs/arfs/privacy.html",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-18d0587a").then(n)}},{name:"v-3120da0c",path:"/docs/arfs/schema-diagrams.html",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-3120da0c").then(n)}},{name:"v-2f7f848c",path:"/docs/arfs/usage/change/drives.html",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-2f7f848c").then(n)}},{name:"v-2eaf1140",path:"/docs/arfs/usage/change/files.html",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-2eaf1140").then(n)}},{name:"v-09d6f550",path:"/docs/arfs/usage/change/snapshots.html",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-09d6f550").then(n)}},{name:"v-18c2b964",path:"/docs/arfs/usage/change/folders.html",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-18c2b964").then(n)}},{name:"v-9356a30c",path:"/docs/arfs/usage/create/",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-9356a30c").then(n)}},{path:"/docs/arfs/usage/create/index.html",redirect:"/docs/arfs/usage/create/"},{path:"/docs/arfs/usage/create/create-drive.html",redirect:"/docs/arfs/usage/create/"},{name:"v-7cc0117c",path:"/docs/arfs/usage/create/create-file.html",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-7cc0117c").then(n)}},{name:"v-690a4650",path:"/docs/arfs/usage/create/create-folder.html",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-690a4650").then(n)}},{name:"v-58f7366c",path:"/docs/arfs/usage/create/create-snapshot.html",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-58f7366c").then(n)}},{name:"v-0877efcc",path:"/docs/arfs/usage/extending-schemas.html",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-0877efcc").then(n)}},{name:"v-950c4d48",path:"/docs/arfs/usage/read/",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-950c4d48").then(n)}},{path:"/docs/arfs/usage/read/index.html",redirect:"/docs/arfs/usage/read/"},{path:"/docs/arfs/usage/read/read-operations.html",redirect:"/docs/arfs/usage/read/"},{name:"v-47c1f97a",path:"/docs/cli/all-commands.html",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-47c1f97a").then(n)}},{name:"v-31657474",path:"/docs/cli/",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-31657474").then(n)}},{path:"/docs/cli/index.html",redirect:"/docs/cli/"},{path:"/docs/cli/intro.html",redirect:"/docs/cli/"},{name:"v-4fc0d1c8",path:"/docs/cli/getting-started.html",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-4fc0d1c8").then(n)}},{name:"v-4fad50ba",path:"/docs/cli/getting-help.html",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-4fad50ba").then(n)}},{name:"v-e2784654",path:"/docs/cli/using-the-cli.html",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-e2784654").then(n)}},{name:"v-0c3bd15a",path:"/docs/core-sdk.html",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-0c3bd15a").then(n)}},{name:"v-84e0b14c",path:"/docs/misc/deploy/deploy.html",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-84e0b14c").then(n)}},{name:"v-074d53cc",path:"/docs/misc/deploy/examples.html",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-074d53cc").then(n)}},{name:"v-0d650648",path:"/docs/misc/deploy/paths.html",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-0d650648").then(n)}},{name:"v-3e6ef1ac",path:"/docs/misc/deploy/",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-3e6ef1ac").then(n)}},{path:"/docs/misc/deploy/index.html",redirect:"/docs/misc/deploy/"},{path:"/docs/misc/deploy/prepare.html",redirect:"/docs/misc/deploy/"},{name:"v-6dd912ec",path:"/docs/misc/deploy/routing.html",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-6dd912ec").then(n)}},{name:"v-3258450c",path:"/docs/misc/permasite.html",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-3258450c").then(n)}},{name:"v-52bf2fcc",path:"/docs/misc/ethareum/",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-52bf2fcc").then(n)}},{path:"/docs/misc/ethareum/index.html",redirect:"/docs/misc/ethareum/"},{path:"/docs/misc/eth.html",redirect:"/docs/misc/ethareum/"},{name:"v-35b0f3b1",path:"/docs/",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-35b0f3b1").then(n)}},{path:"/docs/index.html",redirect:"/docs/"},{name:"v-e65ea9a4",path:"/docs/turbo/api/payment.html",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-e65ea9a4").then(n)}},{name:"v-a6e64848",path:"/docs/misc/price-calculator.html",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-a6e64848").then(n)}},{name:"v-57c590fa",path:"/docs/turbo/api/upload.html",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-57c590fa").then(n)}},{name:"v-45095440",path:"/docs/turbo/migrating.html",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-45095440").then(n)}},{name:"v-d297eaa6",path:"/docs/turbo/turbo-sdk/",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-d297eaa6").then(n)}},{path:"/docs/turbo/turbo-sdk/index.html",redirect:"/docs/turbo/turbo-sdk/"},{name:"v-f81e553c",path:"/docs/turbo/turbo-sdk/release-notes.html",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-f81e553c").then(n)}},{name:"v-5d3101c8",path:"/docs/turbo/what-is-turbo.html",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-5d3101c8").then(n)}},{name:"v-7cc2c9e4",path:"/docs/turbo/turbo-sdk/turbo-web.html",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-7cc2c9e4").then(n)}},{name:"v-501d8193",path:"/",component:Ls,beforeEnter:(e,t,n)=>{gs("Layout","v-501d8193").then(n)}},{path:"/index.html",redirect:"/"},{path:"*",component:Ls}],Ns={title:"ArDrive Docs",description:"ArDrive documentation",base:"/",headTags:[["link",{rel:"icon",href:"/images/ArDrive-Logo.png"}],["meta",{property:"og:title",content:"ArDrive Docs Portal"}],["meta",{name:"twitter:title",content:"ArDrive Docs Portal"}],["meta",{name:"twitter:card",content:"summary_large_image"}],["meta",{name:"twitter:image",content:"https://docs.ardrive.io/images/card-image.png"}],["meta",{name:"twitter:site",content:"@ardriveapp"}],["meta",{property:"og:image",content:"https://docs.ardrive.io/images/card-image.png"}],["meta",{name:"theme-color",content:"#3eaf7c"}],["meta",{name:"apple-mobile-web-app-capable",content:"yes"}],["meta",{name:"apple-mobile-web-app-status-bar-style",content:"black"}],["script",{src:"https://plausible.io/js/script.js",defer:!0,"data-domain":"docs.ardrive.io"}]],pages:[{title:"Content Types",frontmatter:{},regularPath:"/docs/arfs/content-types.html",relativePath:"docs/arfs/content-types.md",key:"v-5e1e685a",path:"/docs/arfs/content-types.html",headers:[{level:2,title:"Other Tags",slug:"other-tags",normalizedTitle:"other tags",charIndex:1007}],headersStr:"Other Tags",content:"# Content Types\n\nAll transaction types in ArFS leverage a specific metadata tag for the Content-Type (also known as mime-type) of the data that is included in the transaction. ArFS clients must determine what the mime-type of the data is, in order for Arweave gateways and browsers to render this content appropriately.\n\nAll public drive, folder, and file (metadata only) entity transactions all use a JSON standard, therefore they must have the following content type tag:\n\nContent-Type: ''\n\n\nHowever, a file's data transaction must have its mime-type determined. This is stored in the file's corresponding metadata transaction JSON's dataContentType as well as the content type tag in the data transaction itself.\n\nContent-Type: \"\"\n\n\nAll private drive, folder, and file entity transactions must have the following content type, since they are encrypted:\n\nContent-Type: ''\n\n\nArDrive-Core includes methods to determine a file's content type\n\n\n# Other Tags\n\nArFS enabled clients should include the following tags on their transactions to identify their application\n\nApp-Name: \"'\n\n\nhowever, a file's data transaction must have its mime-type determined. this is stored in the file's corresponding metadata transaction json's datacontenttype as well as the content type tag in the data transaction itself.\n\ncontent-type: \"\"\n\n\nall private drive, folder, and file entity transactions must have the following content type, since they are encrypted:\n\ncontent-type: ''\n\n\nardrive-core includes methods to determine a file's content type\n\n\n# other tags\n\narfs enabled clients should include the following tags on their transactions to identify their application\n\napp-name: \"