Skip to content

rixlhq/rixl-js

Repository files navigation

@rixl/sdk

Official TypeScript / JavaScript SDK for the Rixl REST API.

Published on npm as @rixl/sdk.

npm

Install

Tool Command
npm npm i @rixl/sdk
pnpm pnpm i @rixl/sdk
bun bun i @rixl/sdk
vite plus vp i @rixl/sdk

Requires Node.js 18+. ESM only.

Quick Start

import {createClient, getImages} from "@rixl/sdk";

const client = createClient({
  baseUrl: "https://api.rixl.com",
  auth: process.env.RIXL_API_KEY,
  responseStyle: "data",
});

const page = await getImages({
  client,
  query: {limit: 10},
});

console.log(page.data?.map((image) => image.id));

auth can be either a string or a function, so you can plug in API keys, bearer tokens, or runtime token refresh logic.

Feed API

Fetch a feed and read posts:

import {createClient, getFeedsByFeedId} from "@rixl/sdk";

const client = createClient({
  baseUrl: "https://api.rixl.com",
  auth: process.env.RIXL_API_KEY,
  responseStyle: "data",
});

const feed = await getFeedsByFeedId({
  client,
  path: {feedId: "FD4y3QB38S"},
  query: {limit: 20, offset: 0},
});

for (const post of feed.data ?? []) {
  console.log(post.id, post.type);
}

Image API

List images and fetch one by ID:

import {createClient, getImages, getImagesByImageId} from "@rixl/sdk";

const client = createClient({
  baseUrl: "https://api.rixl.com",
  auth: process.env.RIXL_API_KEY,
  responseStyle: "data",
});

const page = await getImages({
  client,
  query: {limit: 25, offset: 0},
});

const image = await getImagesByImageId({
  client,
  path: {imageId: "PS5IMKoFLm"},
});

console.log(page.data?.length, image.id, image.width, image.height);

Initialize an upload, PUT the bytes to storage, then complete the upload:

import {createClient, postImagesUploadComplete, postImagesUploadInit} from "@rixl/sdk";

const client = createClient({
  baseUrl: "https://api.rixl.com",
  auth: process.env.RIXL_API_KEY,
  responseStyle: "data",
});

const init = await postImagesUploadInit({
  client,
  body: {
    name: "photo.jpg",
    format: "jpeg",
  },
});

await fetch(init.presigned_url!, {
  method: "PUT",
  body: imageBytes,
  headers: {"Content-Type": "image/jpeg"},
});

const image = await postImagesUploadComplete({
  client,
  body: {
    image_id: init.image_id,
    attached_to_video: false,
  },
});

console.log(image.id);

Video API

List videos and fetch one by ID:

import {createClient, getVideos, getVideosByVideoId} from "@rixl/sdk";

const client = createClient({
  baseUrl: "https://api.rixl.com",
  auth: process.env.RIXL_API_KEY,
  responseStyle: "data",
});

const page = await getVideos({
  client,
  query: {limit: 25, offset: 0},
});

const video = await getVideosByVideoId({
  client,
  path: {videoId: "VI9VXQxWXQ"},
});

console.log(page.data?.length, video.id, video.duration);

Video uploads follow the same pattern, but init returns both video and poster upload URLs:

import {createClient, postVideosUploadComplete, postVideosUploadInit} from "@rixl/sdk";

const client = createClient({
  baseUrl: "https://api.rixl.com",
  auth: process.env.RIXL_API_KEY,
  responseStyle: "data",
});

const init = await postVideosUploadInit({
  client,
  body: {
    file_name: "clip.mp4",
    image_format: "jpeg",
  },
});

await Promise.all([
  fetch(init.video_presigned_url!, {
    method: "PUT",
    body: videoBytes,
    headers: {"Content-Type": "video/mp4"},
  }),
  fetch(init.poster_presigned_url!, {
    method: "PUT",
    body: posterBytes,
    headers: {"Content-Type": "image/jpeg"},
  }),
]);

const video = await postVideosUploadComplete({
  client,
  body: {
    video_id: init.video_id,
  },
});

console.log(video.id);

Development

This repository uses Vite+ as the unified toolchain and package manager wrapper, with Bun underneath.

vp install # Install dependencies
vp run pack    # Build the library
vp check   # Run formatting, linting, and type checks

Issues

github.com/rixlhq/rixl-js/issues

About

No description, website, or topics provided.

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors