@suiftly/core
TypeScript icon, indicating that this package has built-in type declarations

0.1.0 • Public • Published

Discord chat Active Development

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 ID
  • options - Optional parameters
    • options.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');

Readme

Keywords

Package Sidebar

Install

npm i @suiftly/core

Homepage

suiftly.io

Weekly Downloads

0

Version

0.1.0

License

Apache-2.0

Unpacked Size

76 kB

Total Files

17

Last publish

Collaborators

  • mario4tier