@suiftly/core
v0.1.0
Published
Common low level functions for Suiftly.io
Downloads
665
Readme
Suiftly - CDN Optimizations for Sui Walrus
Fast and robust loading of any Walrus blobs.
Simple use: fetchBlob(blobID)
Works for any Web2/Web3 and NodeJS apps.
Useful for loading (and authenticate the data) even when not hosted on walrus.site
You can alternatively download any blob (without data authentication) with a direct link: https://cdn.suiftly.io/blob/{blobID}
Example: https://cdn.suiftly.io/blob/fK7v0bft1JqVbxQaM_KJAYkejbY9FgU9doqZwg7smw8
More Info
Video Demo: https://youtu.be/ldTN7w4Du8o
Walrus Demo: https://suiftly.walrus.site
https://suiftly.io
MIME Content-Type header is properly generated by Suiftly
Important: Blob encoding has not been finalized and published by Mysten Labs, therefore fetchBlob() skips validation for now.
Functions
fetchBlob
function fetchBlob(
blobID: string,
options?: {
mimeType?: string;
allowSuiftly?: boolean;
allowWalrus?: boolean;
},
): Promise<Blob>;
Fetches a Walrus blob
Parameters
blobID
- Walrus blob IDoptions
- Optional parametersoptions.allowSuiftly
- Whether to allow fetching from Suiftly CDN as the primary source. Default is true.options.allowWalrus
- Whether to allow fallback to Walrus if the primary fetch fails. Default is true.options.mimeType
- Force the MIME type (e.g. image/png) in the returned Blob. By default, will be properly set when retrieving from Suiftly. Will be an empty string when retrieving from Walrus.
Returns
A promise that resolves to a standard Blob object. Returned data is verified to match blobID
.
Throws
Will throw an error if the fetch or blob integrity check fails.
Example 1
import { fetchBlob } from '@suiftly/core';
async function getAnyBlob(blobId: string) {
try {
const blob = await fetchBlob(blobId);
console.log(blob);
} catch (error) {
console.error('Error fetching blob:', error);
}
}
getAnyBlob('fK7v0bft1JqVbxQaM_KJAYkejbY9FgU9doqZwg7smw8');
Example 2
import { fetchBlob } from '@suiftly/core';
async function setImage(blobId: string) {
try {
// Fetch the blob.
// Force the type (not really needed, done here just to demo).
const blob = await fetchBlob(blobId, { mimeType: 'image/png' });
// Display as an HTML image element
const url = URL.createObjectURL(blob);
const imageContainer = document.getElementById('image-container');
if (imageContainer) {
const img = document.createElement('img');
img.src = url;
imageContainer.appendChild(img);
}
} catch (error) {
console.error('Error fetching blob:', error);
}
}
setImage('fK7v0bft1JqVbxQaM_KJAYkejbY9FgU9doqZwg7smw8');