🚀 Migration to the New SDK: @aioznetwork/aioz-pin-sdk
Experience seamless file management on our IPFS host with our SDK. Utilize API keys to effortlessly pin, unpin, retrieve, and securely access files through the gateway, ensuring efficient and secure file operations. Simplify decentralized file management with ease and confidence.
npm install aioz-w3ipfs-sdk
To start, simply require the W3IPFS SDK and set up an instance with your W3IPFS API Keys or your JWT key. Don't know what your keys are? Check out your Account Page. In the example below we provided with 2 ways to call the W3IPFS SDK.
// Use the api keys by providing the strings directly
import W3IpfsClient from 'aioz-w3ipfs-sdk'
const client = new W3IpfsClient('key', 'secret-key')
// Use the api keys by specifying your api key and api secret
import W3IpfsClient from 'aioz-w3ipfs-sdk'
const client = new W3IpfsClient({ pinningApiKey: 'key', pinningSecretApiKey: 'secret-key' })
Quickly test that you can connect to the API with the following call:
client
.testAuthentication()
.then((result) => {
//handle successful authentication here
console.log(result)
})
.catch((err) => {
//handle error here
console.log(err)
})
Once you've set up your instance, using the W3IPFS SDK is easy. Simply call your desired function and handle the results of the promise.
-
Pinning
-
Nft
-
Data
The request body when pin a file by CID will look like this:
{
hash_to_pin: CID,
metadata: {
name: string,
keyvalues: {
key1: value1,
key2: value2
}
}
}
{
"data": {
"id": "string",
"file_record_id": "string",
"root_hash": "string",
"cid": "string",
"user_id": "string",
"date_pinned": "2023-01-01T11:11:11.111111Z",
"date_unpinned": "2023-11-11T11:11:11.111111Z",
"pinned": false,
"is_pin_by_hash": true,
"is_dir": false,
"metadata": {
"name": "string"
},
"status": "string"
},
"status": "success"
}
client
.pinByHash({
hashToPin: 'bafyb...2goq',
options: {
metadata: {
name: 'bafyb...2goq',
keyvalues: {
description1: 'this is description1',
description2: 'this is description2',
},
},
},
})
.then((res) => console.log({ res }))
.catch((err) => console.log({ err }))
This API allows you to pin a files to IPFS using the provided pinning API key and secret key.
Example metadata:
{"name": "sample name", "keyvalues":{"key1": "value1","key2": "value2"}}
{
"data": {
"id": "string",
"file_record_id": "string",
"root_hash": "string",
"cid": "string",
"user_id": "string",
"date_pinned": "2023-01-01T11:11:11.111111Z",
"date_unpinned": "2023-11-11T11:11:11.111111Z",
"pinned": false,
"is_pin_by_hash": false,
"sub_hash_status": "string",
"is_dir": false,
"metadata": {
"name": "string",
"type": "string"
},
"status": "string"
},
"status": "success"
}
import path, { dirname } from 'path'
import { fileURLToPath } from 'url'
const __filename = fileURLToPath(import.meta.url)
const __dirname = dirname(__filename)
const filePath01 = path.join(__dirname, '../assets/file.txt')
const filePath02 = path.join(__dirname, '../assets/sample.json')
client
.pinFilesToIPFS({
filePaths: [filePath01, filePath02],
options: {
metadata: {
name: 'pin name',
keyvalues: {
description: 'This is a ipfs files',
},
},
},
})
.then((res) => console.log({ res }))
.catch((err) => console.log({ err }))
This API allows you to pin a folder to IPFS using the provided pinning API key and secret key.
{
"data": {
"id": "string",
"file_record_id": "string",
"root_hash": "string",
"cid": "string",
"user_id": "string",
"date_pinned": "2023-01-01T11:11:11.111111Z",
"date_unpinned": "2023-11-11T11:11:11.111111Z",
"pinned": false,
"is_pin_by_hash": false,
"sub_hash_status": "string",
"is_dir": true,
"metadata": {
"name": "string",
"type": "string"
},
"status": "string"
},
"status": "success"
}
NOTE
The depth
parameter in the pinFolderToIPFS
function dictates the pinning behavior for files and subdirectories within the specified folder.
- When
depth
is set toall
, all files within the folder and its subdirectories will be pinned. - Setting
depth
to0
will directly pin files within the specified folder without considering its subdirectories. - If
depth
is set to1
, only one level of subdirectories will be pinned along with the files within the main folder.
Ensure to adjust the depth
parameter based on your desired pinning depth.
const folderPath = 'c:/users/pin/folder'
client
.pinFolderToIPFS({
depth: 'all',
sourcePath: folderPath,
options: {
metadata: {
name: 'pin-name',
keyvalues: {
description: 'This is a folder',
},
},
},
})
.then((res) => console.log({ res }))
.catch((err) => console.log({ err }))
{
"data": {
"id": "string",
"file_record_id": "string",
"root_hash": "string",
"cid": "string",
"size": number,
"user_id": "string",
"date_pinned": "2023-01-01T11:11:11.111111Z",
"date_unpinned": "2023-11-11T11:11:11.111111Z",
"pinned": true,
"is_pin_by_hash": true,
"is_dir": false,
"metadata": {
"name": "string"
},
"status": "string"
},
"status": "success"
}
client
.unpin('file-id')
.then((result) => {
//handle results here
console.log(result)
})
.catch((err) => {
//handle error here
console.log(err)
})
The metadata JSON file will look like this:
{
"name": "My Awesome NFT",
"description": "This is an NFT that represents my creativity as a digital artist!",
"properties": [
{
"trait_type": "Color",
"value": "Red"
},
{
"trait_type": "Rarity",
"value": "Medium"
}
]
}
{
"data": {
"id": "string",
"asset_cid": "string",
"metadata_cid": "string",
"asset_pin_id": "string",
"metadata_pin_id": "string",
"size": number,
"user_id": "string",
"created_at": "2023-01-01T11:11:11.111111Z",
"updated_at": "2023-11-11T11:11:11.111111Z",
"pinned": true,
"metadata_asset": {
"name": "string",
"type": "string"
},
"status": "string"
},
"status": "success"
}
import * as fs from 'fs'
import path, { dirname } from 'path'
import { fileURLToPath } from 'url'
const __filename = fileURLToPath(import.meta.url)
const __dirname = dirname(__filename)
const imagePath = path.join(__dirname, './file.txt')
const metadataPath = path.join(__dirname, './sample.json')
const readableStreamForFile = fs.createReadStream(imagePath)
const readableStreamMetadataFile = fs.createReadStream(metadataPath)
// pin Nft by metadata object
client.pinNft({
fileStream: readableStreamForFile,
metadata: {
name: 'test',
description: 'test',
properties: [
{
trait_type: 'Color',
value: 'Red',
},
{
trait_type: 'Size',
value: 'M',
},
],
},
})
// pin Nft by file.json
client
.pinNftByStreamMetadata({
fileStream: readableStreamForFile,
metadataStream: readableStreamMetadataFile,
})
.then((res) => console.log({ res }))
.catch((err) => console.log({ err }))
The metadata JSON file will look like this:
{
"name": "My Awesome NFT",
"description": "This is an NFT that represents my creativity as a digital artist!",
"properties": [
{
"trait_type": "Color",
"value": "Red"
},
{
"trait_type": "Rarity",
"value": "Medium"
}
]
}
{
"data": {
"id": "string",
"asset_cid": "string",
"metadata_cid": "string",
"asset_pin_id": "string",
"metadata_pin_id": "string",
"size": number,
"user_id": "string",
"created_at": "2023-01-01T11:11:11.111111Z",
"updated_at": "2023-11-11T11:11:11.111111Z",
"pinned": true,
"metadata_asset": {
"name": "string",
"type": "string"
},
"status": "string"
},
"status": "success"
}
import * as fs from 'fs'
import path, { dirname } from 'path'
import { fileURLToPath } from 'url'
const __filename = fileURLToPath(import.meta.url)
const __dirname = dirname(__filename)
const filePath = path.join(__dirname, '../assets/sample.json')
const readableStreamMetadataFile = fs.createReadStream(filePath)
client
.pinNftByHash({
hashToPin: 'bafkr...w7m',
metadata: {
name: 'My Awesome NFT',
description: 'This is an NFT that represents my creativity as a digital artist!',
properties: [
{
trait_type: 'Color',
value: 'Red',
},
{
trait_type: 'Rarity',
value: 'Medium',
},
],
},
})
.then((res) => console.log({ res }))
.catch((err) => console.log({ err }))
// pin nft by hash with metadata stream
client
.pinNftByHashAndMetadataStream({
hashToPin: 'bafk...f73u',
metadataStream: readableStreamMetadataFile,
})
.then((res) => console.log({ res }))
.catch((err) => console.log({ err }))
client
.unpinNft('nft-id')
.then((result) => {
//handle results here
console.log(result)
})
.catch((err) => {
//handle error here
console.log(err)
})
{
"message": "Congratulations! You are communicating with the Web3 IPFS API!"
}
client
.testAuthentication()
.then((result) => {
//handle successful authentication here
console.log(result)
})
.catch((err) => {
//handle error here
console.log(err)
})
{
"data": {
"totals": {
"files": number,
"size": number
},
"pins": [
{
"id": "string",
"file_record_id": "string",
"root_hash": "string",
"cid": "string",
"size": number,
"user_id": "string",
"date_pinned": "2023-01-01T11:11:11.111111Z",
"date_unpinned": "2023-11-11T11:11:11.111111Z",
"pinned": true,
"is_pin_by_hash": true,
"sub_hash_status": "string",
"is_dir": false,
"metadata": {
"name": "string"
},
"status": "string"
}
]
},
"status": "success"
}
client
.getPinList({
offset: 0,
limit: 10,
pinned: 'true',
sortBy: 'size',
sortOrder: 'DESC',
metadata: {
keyvalues: {
bbbn: '',
},
},
})
.then((result: PinListResponse) => {
console.log({ result: result.data })
})
.catch((error) => {
console.log(error)
})
{
"data": {
"id": "string",
"file_record_id": "string",
"root_hash": "string",
"cid": "string",
"size": number,
"user_id": "string",
"date_pinned": "2023-01-01T11:11:11.111111Z",
"date_unpinned": "2023-11-11T11:11:11.111111Z",
"pinned": true,
"is_pin_by_hash": true,
"sub_hash_status": "string",
"is_dir": false,
"metadata": {
"name": "string"
},
"status": "string"
},
"status": "success"
}
client
.getPinByID('pin id')
.then((result) => {
console.log({ result })
})
.catch((error) => {
console.log(error)
})
{
"data": {
"id": "string",
"file_record_id": "string",
"root_hash": "string",
"cid": "string",
"size": number,
"user_id": "string",
"date_pinned": "2023-01-01T11:11:11.111111Z",
"date_unpinned": "2023-11-11T11:11:11.111111Z",
"pinned": true,
"is_pin_by_hash": true,
"sub_hash_status": "string",
"is_dir": false,
"metadata": {
"name": "string"
},
"status": "string"
},
"status": "success"
}
client
.getPinByCID('bafy...')
.then((result) => {
//handle results here
console.log(result)
})
.catch((err) => {
//handle error here
console.log(err)
})