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

@mariolazzari/rijks

v0.2.3

Published

Rijksmuseum REST APIs client TypeScript based

Downloads

51

Readme

Rijks


This package is a TypeScript based wrapper around the public REST APIs of Rijksmuseum (Amsterdam).

Prerequisites

In order to use this package, you need an api key: You can read more on how to obtain the API key on this page.

This package requires NodeJS (version 18 or later) and a node package manager (Npm, Yarn, Pnpm or Bun).

To make sure you have them available on your machine, try running the following command.

$ npm -v && node -v
v10.1.0
v18.18.0

Gettting started

These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See deployment for notes on how to deploy the project on a live system.


Installation

BEFORE YOU INSTALL: please read the prerequisites.

Start with cloning this repo on your local machine:

$ git clone https://github.com/mariolazzari/rijks.git
$ cd rijks

To install and set up the library, run:

npm install @mariolazzari/rijks

Usage

Import package

import { Rijks } from "@mariolazzari/rijks"

Watch mode

npm test

Unit testing

npm test

Bulding new version

npm build

This task will create a distribution version of the project inside your local dist/ folder

Rijks class

Rijks class content handles all the requests and the responses to the three main Rijks museum REST APIs.

Constructor

In order to initialize Rijks client:

const rijks = new Rijks(API_KEY, culture?)

Constructor parameters

| Parameter | Type | Required | Default | | --------- | ------- | :------: | ------- | | apiKey | string | Yes | | | culture | Culture | No | en |

Methods

Rijks client includes the following three methods:

getCollection

Description

This asynchronous method handles GET /api/[culture]/collection REST API.

Prototype

async getCollection(params: CollectionRequest): Promise<Result<CollectionResponse>> 

Sample code

const params: CollectionRequest = {searchTerm: "Vermeer"}
const collection: CollectionResponse = await rijks.getCollection(params)
CollectionRequest

This interface contains all the possible parameters handled by getCollection method.

| Parameter | Type | Required | Default | | ------------- | ------- | :------: | ------- | | searchTerm | string | Yes | | | page | number | Yes | 1 | | perPage | number | Yes | 10 | | format | Format | | json | | culture | Culture | | en | | involvedMaker | string | | | | type | string | | | | material | string | | | | technique | string | | | | period | string | | | | hex | string | | | | imageOnly | string | | true | | topPieces | string | | true | | sort | Sort | | |

CollectionResponse

This interface contains all the values returned by getCollection method

| Value | Type | Required | Default | | ------------------- | ------------ | :------: | :-----: | | elapsedMilliseconds | number | Yes | 0 | | count | number | Yes | 0 | | countFacets | CountFacets | | [] | | artObjects | ArtObjects[] | | [] | | facets | Facet[] | | [] |

getCollectionDetails

Description

This method handles GET /api/[culture]/collection/[object-number] REST API.

Prototype

async getCollectionDetails(params:CollectionDetailsRequst) : Promise<Result<CollectionDetailsResponse>>
CollectionDetailsRequst

This interface handles all possible getCollectionDetails parameters.

interface CollectionDetailsRequest {
  objectNumber: string;
  format?: Format;
}

| Parameter | Type | Required | Default | | ------------ | ------ | :------: | ------- | | objectNumber | string | Yes | | | format | Format | | json |

CollectionDetailsResponse

This interface handles getCollectionDetails response.

interface CollectionDetailsResponse {
  elapsedMilliseconds: number;
  artObject: ArtObjectDetails;
  artObjectPage: ArtObjectPage;
}

getCollectionImage

Description

This method handles GET /api/[culture]/collection/[object-number]/tiles REST API.

Prototype

async getCollectionImage(params:CollectionImageRequst) : Promise<Result<CollectionImageResponse>>
CollectionImageRequest

This interface handles all possible getCollectionImage parameters.

interface CollectionImageRequest {
  objectNumber: string;
}

| Parameter | Type | Required | Default | | ------------ | ------ | :------: | ------- | | objectNumber | string | Yes | |

CollectionImageResponse

This interface handles getCollectionImage response.

interface CollectionImageResponse {
  levels: Level[];
}

Interfaces

The following interfaces are used for mapping all API requests and responses. In case of complex structure, interfece are used in order to extends basic features.

Result

This interface handles all REST APIs responses.

interface Result<T extends Respnse> {
  success: boolean;
  status: number;
  data?: T;
  error?: string;
}

Types

In order to implement all features, the following common types have been implemended:

ArtObject

This interface has the following structure:

interface ArtObject {
  links: Link;
  id: string;
  objectNumber: string;
  title: string;
  hasImage: boolean;
  principalOrFirstMaker: string;
  longTitle: string;
  showImage: boolean;
  permitDownload: boolean;
  webImage?: Image;
  headerImage?: Image;
  productionPlaces: string[];
};

ArtObjectDetails

This interface extends ArtObject with the following addon fields:

interface ArtObjectDetails extends ArtObject {
  priref: string;
  language: Culture;
  copyrightHolder?: string;
  colors: Color[];
  colorsWithNormalization: ColorNormalization[];
  normalizedColors: Color[];
  normalized32Colors: Color[];
  materialsThesaurus: string[];
  techniquesThesaurus: string[];
  productionPlacesThesaurus: string[];
  titles: string[];
  description: string;
  labelText?: string;
  objectTypes: string[];
  objectCollection: string[];
  makers: string[];
}

ArtObjectPage

This type handles ArtObjectPage properties.

type ArtObjectPage = {
   id: string;
  similarPages: string[];
  lang: Culture;
  objectNumber: string;
  tags: string[];
  plaqueDescription: string;
  audioFile1?: string;
  audioFileLabel1?: string;
  audioFileLabel2?: string;
  createdOn: string;
  updatedOn: string;
  adlibOverrides: Override;
};

Color

This type handles ArtObjectDetails color properties.

type Color = {
  percentage: number;
  hex: string;
};

CountFacets

This type has the following definition:

type CountFacets = {
  hasimage: number;
  ondisplay: number;
};

Culture

This type contains all supported cultures.

type Culture = "en | nl"

Facet

This type contains facet properties.

type Facet = {
  facets: FacetValue[];
  name: string;
  otherTerms: number;
  prettyName: number;
};

FacetValue

This type contains facet key / value pairs for Facet type.

type FacetValue = {
  key: string;
  value: number;
};

Format

This type contains all supported APU repsonse types.

type Format = "json" | "jsonp" | "xml";

Image

This type contains all images properties.

type Image = {
  guid: string;
  offsetPercentageX: number;
  offsetPercentageY: number;
  width: number;
  height: number;
  url: string;
};

Lavel

This type contains level properties.

type Level = {
  name: string;
  width: number;
  height: number;
  tiles: Tile[];
};

Link

This type contains link properties.

type Link = {
  self?: string;
  web?: string;
  search?: string;
};

Override

This type handles optional overrides in ArtObjectPage type.

type Override = {
  titel?: string;
  maker?: string;
  etiketText?: string;
};

Rsponse

This union type contains all possible API repsonse types.

export type Response =
  | CollectionResponse
  | CollectionDetailsResponse
  | CollectionImageResponse;

Sort

Sort type contains all supported sorting criterias.

type Sort = | "relevance" 
  | "objectYype" 
  | "chronologic" 
  | "achronologic" 
  | "artist" 
  | "artistDesc"

Tile

This type contains all tile properties.

type Tile = {
  x: number;
  y: number;
  url: string;
};

Authors

  • Mario Lazzari - Initial work

Links