npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@open-ic/openchat-xframe

v1.0.6

Published

Client library for hosting OpenChat in an iframe

Downloads

321

Readme

OpenChat XFrame library

OpenChat can be hosted in an iframe to easily add chat functionality to your own site.

This library makes it easier to communicate with OpenChat via the iframe.

Pre-requisites

OpenChat can only be hosted in an iframe by agreement. By default OpenChat will not render in an iframe. To proceed you will need to request access to the origin you will be using to host OpenChat. You may wish to provide a test origin and a live origin for us to whitelist.

Installation

Install the library into your site in the normal way:

npm i @open-ic/openchat-xframe

Usage

The library provides an initialise function which accepts a reference to the iframe in which you wish to host OpenChat. This function will return a Promise<OpenChatXFrame> which is a client that can be used for subsequent interaction with OpenChat.

The initialise function expects the following parameters:

iframe (HTMLIFrameElement)

This should be a referrence to the iframe in which you wish to host OpenChat

options (OpenChatXFrameOptions)

type OpenChatXFrameOptions = {
    theme?: ThemeOverride;
    targetOrigin: string;
    initialPath?: string;
    onUserIdentified?: (userId: string) => void;
    settings?: {
        disableLeftNav: boolean;
    };
};

You must provide the targetOrigin. This is origin where you expect OpenChat to be hosted. To target the live OpenChat site this would be https://oc.app but it is also possible that you will want to run OpenChat locally while testing.

You may provide an initial path (without the origin) if you want to navigate to a specific community or chat on initalisation.

You may provide some theme overrides so that OpenChat more closely resembles the look and feel of your own site. If you really want to change the style of something but can't work out how to do it, then get in touch and we can help.

You can provide a callback function that will be called at the earliest point when the OpenChat system knows who the logged in user is. This callback will be called with the user's userId.

If you do not expect to be allowing users to navigate the full OpenChat user interface, you may also wish to set the disableLeftNav flag to true.

The interface of the client library returned by the initialise function is extremely limited at the moment and provides the following functions:

changePath: (path: string) => void;
logout: () => void;

This allows you to delegate routing from your site to the OpenChat instance.

We may add more functions to this interface in future.

Example Usage

<div class="chat">
    <div class="header">
        <h3>Chat</h3>
    </div>

    <iframe bind:this="{iframe}" title="OpenChat" frameborder="0" />
</div>
import { initialise } from '@open-ic/openchat-xframe';

const client = await initialise(iframe, {
    targetOrigin: 'https://oc.app',
    initialPath:
        '/community/rfeib-riaaa-aaaar-ar3oq-cai/channel/334961401678552956581044255076222828441',
    theme: {
        name: 'my-app-theme',
        base: 'dark',
        overrides: {
            primary: "green",
            bd: 'rgb(91, 243, 190)',
            bg: 'transparent',
            txt: "black",
            placeholder: "green",
            'txt-light': '#75c8af',
            timeline: {
                txt: "yellow"
            },
            ... // more theme overrides
        }
    }
});

Limitations

User mapping

At the moment this is simply a window onto the existing OpenChat site. This means that to use it, the user must have an OpenChat account and that account will have no relationship with any user account that the user may have on your site. This might mean that your user has to effectively log in twice - once to your site and once to OpenChat.

Of course, this is not good enough for everyone and some sort of link / mapping between the users would be ideal. What we are delivering is a minimun viable product and we will continue to improve it over time.

Look and feel

Integrating via iframe doesn't give me enough control over the features and the look and feel - why can't you just give me an api? There are many ways that integration can be achieved. Integrating via iframe has a number of key advantages. Firstly, it is simple. You don't need to worry about writing the UI code yourself (and trust me - it's complicated). Secondly, it's always up to date. If we update OpenChat then that's the version that gets rendered in your iframe. This way we minimise the risk of breaking changes to downstream users. Finally, it is more secure. The smaller the surface area we expose to third parties the better. We don't want to have to trust the practices of all of the teams that choose to embed OpenChat.

That said - it is also possible that we may develop a set of more flexible web components or indeed a full api in the future. Those future developments will need to be driven by concrete use-cases that emerge.