@settlemint/sdk-ipfs
Version:
IPFS integration module for SettleMint SDK, enabling decentralized storage and content addressing
75 lines (72 loc) • 2.93 kB
JavaScript
/* SettleMint IPFS SDK - Distributed Storage */
let _settlemint_sdk_utils_runtime = require("@settlemint/sdk-utils/runtime");
let _settlemint_sdk_utils_validation = require("@settlemint/sdk-utils/validation");
let kubo_rpc_client = require("kubo-rpc-client");
let zod = require("zod");
//#region src/helpers/client-options.schema.ts
/**
* Schema for validating client options for the IPFS client.
*/
const ClientOptionsSchema = zod.z.object({ instance: _settlemint_sdk_utils_validation.UrlSchema });
/**
* Schema for validating server client options for the IPFS client.
* Extends the ClientOptionsSchema with additional server-specific fields.
*/
const ServerClientOptionsSchema = ClientOptionsSchema.extend({ accessToken: _settlemint_sdk_utils_validation.AccessTokenSchema.optional() });
//#endregion
//#region src/ipfs.ts
/**
* Creates an IPFS client for client-side use
*
* @param options - Configuration options for the client
* @returns An object containing the configured IPFS client instance
* @throws Will throw an error if the options fail validation
* @example
* ```ts
* import { createIpfsClient } from '@settlemint/sdk-ipfs';
*
* const { client } = createIpfsClient({
* instance: 'https://ipfs.settlemint.com'
* });
*
* // Upload a file using Blob
* const blob = new Blob(['Hello, world!'], { type: 'text/plain' });
* const result = await client.add(blob);
* console.log(result.cid.toString());
* ```
*/
function createIpfsClient(options) {
const validatedOptions = (0, _settlemint_sdk_utils_validation.validate)(ClientOptionsSchema, options);
return { client: (0, kubo_rpc_client.create)({ url: validatedOptions.instance }) };
}
/**
* Creates an IPFS client for server-side use with authentication
*
* @param options - Configuration options for the client including authentication
* @returns An object containing the authenticated IPFS client instance
* @throws Will throw an error if called on the client side or if options validation fails
* @example
* import { createServerIpfsClient } from '@settlemint/sdk-ipfs';
*
* const { client } = createServerIpfsClient({
* instance: process.env.SETTLEMINT_IPFS_ENDPOINT,
* accessToken: process.env.SETTLEMINT_ACCESS_TOKEN
* });
*
* // Upload a file using Blob
* const blob = new Blob(['Hello, world!'], { type: 'text/plain' });
* const result = await client.add(blob);
* console.log(result.cid.toString());
*/
function createServerIpfsClient(options) {
(0, _settlemint_sdk_utils_runtime.ensureServer)();
const validatedOptions = (0, _settlemint_sdk_utils_validation.validate)(ServerClientOptionsSchema, options);
return { client: (0, kubo_rpc_client.create)({
url: validatedOptions.instance,
headers: validatedOptions.accessToken ? { "x-auth-token": validatedOptions.accessToken } : undefined
}) };
}
//#endregion
exports.createIpfsClient = createIpfsClient;
exports.createServerIpfsClient = createServerIpfsClient;
//# sourceMappingURL=ipfs.cjs.map