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

7digital-api-promisified

v0.39.0

Published

Promisified 7digital API client for nodeJS

Downloads

14

Readme

7digital

Node.js API Client

Current head build status:

Build Status

About 7digital

7digital.com is an online music store operating in over 16 countries and offering more than 11 million high quality DRM free MP3s (320kbps) from all major labels and wide range of idependent labels and distributors. 7digital API will give you access to the full catalogue including high quality album art, 30s preview clips for all tracks, commissions on sales, integrated purchasing and full length streaming. More details at developer.7digital.net

What is this?

A serverside javascript client for the 7digital API . Full code documentation for the most recent release can be found here.

To map documentation endpoints with this library's methods, it's best to look at the API definition file.

Installation

NPM

Install it via npm

npm install --save 7digital-api

Usage

Note: this is a fork of original library that adds promisified versions of all API methods

To use promisified version, just add suffix Promise to the name of the method and don't pass callback function:

const api = require('7digital-api');
const artists = new api.Artists();

async function printData() {
    const data = await artists.getReleasesPromise({ artistid: 1 });
    console.dir(data);
}

See the examples folder for examples of how to use this. If you have included 7digital-api in your dependencies in the package.json file, you can use the like so:

var api = require('7digital-api'),
	artists = new api.Artists();

artists.getReleases({ artistid: 1 }, function(err, data) {
	console.dir(data);
});

To supply your OAuth credentials or if you want XML responses, you can use the configure function. Here is how you can do so:

var api, artists;

api = require('7digital-api').configure({
	format: 'XML',
	consumerkey: 'MY_KEY_HERE',
	consumersecret: 'MY_SECRET_HERE',
	defaultParams: { country: 'fr' }
});

artists = new api.Artists();

artists.getReleases({ artistid: 1 }, function(err, data) {
	console.dir(data);
});

You can specify default parameters on a per resource basis also:

var api, artists;

api = require('7digital-api').configure({
	defaultParams: {
		country: 'fr'
	}
});

artists = new api.Artists({ defaultParams: { pageSize: 15 } });

artists.getReleases({ artistid: 1 }, function(err, data) {
	// 15 releases in france
	console.dir(data);
});

See developer.7digital.net for full details of the API endpoints and the parameters they accept.

OAuth protected endpoints

NOTE: The oauth access method changed considerably in 0.19.0, updating to the latest version is highly recommended

Accessing the media delivery api

The media delivery endpoints behave differently from the other endpoints as they return you the bytes to the content. You must sign all your requests like so:

var api = require('7digital-api').configure({
	consumerkey: 'YOUR_KEY_HERE',
	consumersecret: 'YOUR_SECRET_HERE',
	defaultParams: {
		country: 'es'
	}
});

var oauth = new api.OAuth();
var previewUrl = oauth.sign('http://previews.7digital.com/clip/12345');

// For access to locker / subscription streaming without managed users you
// will need to provide the accesstoken and secret for the user
var signedUrl = oauth.sign('https://stream.svc.7digital.net/stream/locker', {
	trackId: 1234,
	formatId: 26,
	accesstoken: 'ACCESS_TOKEN',
	accesssecret: 'ACCESS_SECRET'
});
// Requesting this URL will now respond with the media data (or redirect to
// an error).

Making requests on behalf of a user to OAuth protected endpoints

NOTE: The oauth access method changed considerably in 0.19.0

This example assumes you have access to the oauth/requestToken/authorise endpoint to authenticate users. If you do not have this access you will need to send the user to the authoriseUrl provided by getRequestToken and complete the auth flow when your callbackUrl is hit.

var api = require('7digital-api').configure({
	consumerkey: 'YOUR_KEY_HERE',
	consumersecret: 'YOUR_SECRET_HERE',
	defaultParams: {
		country: 'fr'
	}
});

var oauth = new api.OAuth();
oauth.getRequestToken('http://callbackurl.com/', authoriseToken);
function authoriseToken(err, requesttoken, requestsecret) {
	oauth.authoriseRequestToken({
		username: '[email protected]',
		password: 'top-secret',
		token: requesttoken
	}, function (err) {
		oauth.getAccessToken({
			requesttoken: requesttoken,
			requestsecret: requestsecret
		}, function (err, accesstoken, accesssecret) {
			// use the token and secret to call secure endpoints.
			var apiForJoeBloggs = api.reconfigure({
				defaultParams: {
					accesstoken: accesstoken,
					accesssecret: accesssecret
				}
			});
			var user = new apiForJoeBloggs.User();
			user.getLocker({
				pageSize: 1
			}, function (err, response) {
				// Do something with the locker
			});
		});
	});

See oauth.js and create-user.js in the examples folder for examples of the OAuth flow for acquiring an authorised access token and secret that you will need to access any of the protected endpoints on behalf of a user.

Partner users (3rd party user management)

If your key has permissions to create 3rd-party (partner) users, you must configure the client to allow you to access protected enpoints with your user ids instead of access tokens. This can be done like so:

var api = require('7digital-api').configure({
	consumerkey: 'YOUR_KEY_HERE',
	consumersecret: 'YOUR_SECRET_HERE',
	userManagement: true,
	defaultParams: {
		country: 'fr'
	}
});

// You can now access user endpoints for your users without an access token or
// secret and with your external user id instead
api.User().create({
	userId: 'external-user-12345',
	emailAddress: '[email protected]'
	}, function (err, userResponse) {
		api.User().getLocker({
			userId: 'external-user-12345',
			pageSize: 1
		}, function (err, response) {
		// Do something with the user's (empty!) locker
	});
});

Using the environment to configure the client

The client will check the environment for the following variables which makes it possible to keep your key and secret actually secret:

  • _7D_API_CLIENT_CONSUMER_KEY - defaults to 'YOUR_KEY_HERE'
  • _7D_API_CLIENT_CONSUMER_SECRET - defaults to 'YOUR_SECRET_HERE'
  • _7D_API_CLIENT_USER_TOKEN - is not set by default
  • _7D_API_CLIENT_USER_SECRET - is not set by default

The client will check the environment for the following variables which makes controlling the behaviour per-environment easier (e.g. in tests) with out having to branch in your application code:

  • _7D_API_CLIENT_HOST - defaults to 'api.7digital.com'
  • _7D_API_CLIENT_SSL_HOST - defaults to 'api.7digital.com'
  • _7D_API_CLIENT_PORT - defaults to 80
  • _7D_API_CLIENT_PREFIX - defaults to '1.2'

Note that these variables have the lowest precedence (apart from defaults). I.E. overriding them in application code will take precendence.

Running the tests

To run the unit tests:

npm test

There are also integration tests. Tests for various error handling scenarios are run against a stub 7d api. It can be installed with:

npm install git://github.com/7digital/api-stub.git

Some of the integration tests (around the client's handling of OAuth) run against the real 7d api. In order for these tests to work, you'll need to set the environment variables outlined above. As well as the following:

  • _7D_API_CLIENT_TEST_VOUCHER_CODE

The code for a voucher which can be applied to a basket containing an item of 1p, used for a two-legged OAuth test.

The tests can then be run with:

npm run integration-test