jorgenvatle:coinbase-commerce-meteor

v1.3.1Published 10 months ago

Coinbase Commerce Meteor

A wrapper package for enabling synchronous usage of Coinbase Commerce's REST API.

This package was written up primarily due to scoping issues with the official package (coinbase-commerce-node) when used in combination with Meteor.wrapAsync

Installation

meteor add jorgenvatle:coinbase-commerce-meteor

Setup

Import library:

1import CoinbaseCommerce from 'meteor/jorgenvatle:coinbase-commerce-meteor';
2
3const Commerce = new CoinbaseCommerce('your-api-key', 'your-webhook-shared-secret');

If you add a coinbase object to your project's settings.json, you can skip the above constructor arguments.

settings.json

1{
2  "coinbase": {
3    "key": "Your API key",
4    "secret": "Your shared secret"
5  }
6}

your-script.js

1const Commerce = new CoinbaseCommerce();

Charges

Create charge

1const charge = Commerce.createCharge({
2    name: 'The Sovereign Individual',
3    description: 'Mastering the Transition to the Information Age',
4    pricing_type: 'fixed_price',
5    local_price: {
6        amount: '100.00',
7        currency: 'USD'
8    },
9});

Show a charge

1const charge = Commerce.showCharge('charge-id-goes-here');

Invoices

Create invoice

1const invoice = Commerce.createIncoice({
2    business_name: 'My Business',
3    customer_email: 'john@doe.com',
4    customer_name: 'John Doe',
5    local_price: {
6        currency: 'USD',
7        amount: '499.00',
8    },
9    memo: 'License Renewal (1 year)'
10})

Webhooks

It's important that you validate webhooks to ensure the authenticity of the webhook data. Without validation, an attacker may be able to spoof webhooks in turn allowing them to fulfill orders that aren't paid for yet.

Validate webhook

The webhook validator throws a Meteor.Error for webhooks that don't pass the validation.

1Commerce.validateWebhook(req);

Validating with Picker:

1Picker.route('/listeners/coinbase', (params, req, res) => {
2    Commerce.validateWebhook(req);
3    
4    // Handle the webhook
5});

If you'd rather not have exceptions thrown for invalid/unauthorized webhooks, use the boolean equivalent:

1if (Commerce.isValidWebhook(req)) {
2    // Webhook is valid!
3}

Contributing

To start the development environment, you need to copy settings.example.json to settings.json and add in keys to your Coinbase Commerce application.

When adding new features, please include tests for them.

Build & Test

Running the following command will start up both the TypeScript watcher as well as the test environment.

npm start

License

This repository is licensed under the ISC license.

Copyright (c) 2018, Jørgen Vatle.