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

@technik-sde/foxy

v1.1.1

Published

> Customizable frontend-proxy, supporting multiple handlers for input-urls

Downloads

27

Readme

simple frontend proxy

Customizable frontend-proxy, supporting multiple handlers for input-urls

Motivation Our infrastructure may contain different media-services and on different environments. Having a set of nested widgets, libraries and applications they all access the same services within an environment. This frontend-proxy helps to open source applications, since internal ressources and behaviour can be configured, but its public api is consistent and has default handlers for the normal use-case.

yarn add @technik-sde/foxy

Handler A handler registers its methods for a specific request-object, containing a source-property. The handler will be selected for the exposed request-method, when its function use(RequestObject):boolean returns true.

Usage

import { Foxy, utils } from "technik-sde/foxy";

const proxy = new Foxy({
  handlers: [
  {
    use({ source }) {
      return myUrlFormat.test(source);
    },
    getImageURL({ source }) {
      return Promise.resolve(buildMyUrlScheme(source));
    },
    getImageInfo({ source }) {
      return utils.loadImage(buildMyUrlScheme(source))
    }
  }
  ]
});

const finalUrl = await proxy.getImageURL({ source: 1234 });
const imageMetadata = await proxy.getImageInfo({ source: 1234 });

Multiple handlers are supported and are resolved from first to last index. The first handler returning true on use, will be selected, if the given method-name is defined:

import { Foxy } from "technik-sde/foxy";

const proxy = new Foxy({
  handlers: [
  {
    use({ source }) {
      return myUrlFormat.test(source);
    },
    getImageURL({ source }) {
      return Promise.resolve(buildMyUrlScheme(source));
    }
  },
  {
    use: () => true,
    // overwrites default exception to always return false
    getImageURL({ source }) { return Promise.resolve(false); } 
  }
  ]
});

const finalUrl = await proxy.getImageURL({ source: "abc" }); // false, when not myUrlFormat

Per default the following methods are supported via api: getImageURL, getImageInfo, getVideoURL, getVideoInfo, getURL and getJSON. The generic method get(methodName: string, requestData: AnyObject) may be used to access any custom methods defined on handlers. e.g.

import { Foxy } from "technik-sde/foxy";

const proxy = new Foxy({
  handlers: [
  {
    use({ source }) {
      return myUrlFormat.test(source);
    },
    getArticles({ source }) {
      return fetch(buildMyUrlScheme(source)).then(response => response.json().data);
    }
  }
  ]
});

const json = await proxy.get("getArticles", { source: "my-json-url" });

Handlers

Currently three example handlers are exported with this module. They probably should not be used in production:

  • unsplash: allowing modification of query params to load images from unsplash.com
  • image: default image handler, to load image-urls and metadata
  • video: crude video handler to get video-type, dimensions and duration as metadata

Import these handlers with

import { handler } from "technik-sde/foxy";

// handler.unsplash
// handler.image
// handler.video