JSPM

appwrite-webhook-restreamer

1.0.3
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 8
  • Score
    100M100P100Q31026F
  • License MIT

The Appwrite event restreamer

Package Exports

  • appwrite-webhook-restreamer
  • appwrite-webhook-restreamer/index.mjs

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (appwrite-webhook-restreamer) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

appwrite-webhook-restreamer

Appwrite Server SDK does not support realtime through WebSocket. Due to the limitations of automatic SDK generator, looks like It would not ever support It. I am solved that problem by using SockJS

Contribute

[!IMPORTANT] There is another project named react-declarative build especially for AppWrite Realtime development. ⭐Star and 💻Fork It on github will be appreciated

Setup

  1. Start this microservice by using the next command
npx -y appwrite-webhook-restreamer
  1. Setup webhook in the Appwrite instance settings. Use the next POST URL: http://127.0.0.1:9999/emit

appwrite-webhook-settings

  1. Listen for events by using any SockJS Client with the next url: http://127.0.0.1:9999/listen. The following code might be useful
import Socket from "sockjs-client";

import { Subject, singleshot } from "react-declarative";

...

export class RealtimeService {

  private readonly _sockjsSubject = new Subject<object>();

  constructor() {
    makeObservable(this, {});
  }

  private _init = singleshot(() => {
    new Socket("http://127.0.0.1:9999/listen").onmessage = (msg) => {
      const chunk = JSON.parse(msg.data);
      const data = {
        payload: chunk.payload,
        channels: [],
        events: chunk.events.split(","),
        timestamp: chusnk.timestamp,
      };
      this._sockjsSubject.next(data);
    };
  });

  subscribe = <T extends unknown>(
    channel: string,
    callback: (payload: RealtimeResponseEvent<T>) => void,
  ) => {
      this._init();
      return this._sockjsSubject.subscribe((payload) => {
        if (payload.events.some((event: string) => event.includes(channel))) {
          callback(payload);
        }
      });
  };
}

CLI

The first command line argument is always a port. The second is the disallowWs flag (optional)

appwrite-webhook-restream 9999 [--disallowWs]