
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
Before using this library, you must have:
const client = new StartClient(API_KEY);
it is also possible to change the key anytime.
client.key = OTHER_KEY;
subsequent calls will use the new key.
This library uses promises, so making calls is usually as follows
// init a client
const client = new StartClient(API_KEY);
// get customer list
client.listCustomers()
.then((customers) => {
// process customers
}, (err) => {
// handle error here
});
in error handlers you can get more information about the error,
// init a client
const client = new StartClient(BAD_KEY);
// get customer list
client.listCustomers()
.then((customers) => {
// not called
}, (err) => {
if (err.isValidationError) {
// a validation error occurs when you provide
// missin or invalid arguments to a functions
console.log(err.details);
}
// check if it is a server (500) error
else if (err.isServerError) {
console.log('Server error!!!');
} else {
// error object exposes debug properties
// error.type can be 'request', 'processing', 'banking' or 'authentication'
console.log('Error type:', err.type);
// error.code is a string that identifies the error
console.log('Error code:', err.code);
// error.message is a human readable explaintion
console.log('Error message:', err.message);
// error.extras is an object that provides bad params if any
console.log('Error extras:', err.extras);
}
});
more on error codes and types here
Information about the card data structure can be found here
Create a card by supplying the card information or a token
const cardData = {
name: 'Abdullah example.com`Ahmed', // optional,
number: '4242424242424242',
ip: '10.10.10.10', // optional
statement_descriptor: 'My store', // optional; What the customer sees on their credit card statement
exp_year: 2018,me: 'Abdullah example.com`Ahmed', // optional,
exp_month: 11,
cvc: '123'
};
// add the card
client.addCard(customerId, cardData)
.then((card) => {
// proceed
}, (err) => {
// handle Error
});
// OR
client.createToken({
number: '4242424242424242',
exp_month: '11',
exp_year: '2016',
cvc: '123'
})
.then(token => {
return client.addCard(customerId, token.id);
})
.then((card) => {
// proceed
}, (err) => {
// handle Error
});
Get a card by specifying customer id and card id
client.getCard(customerId, cardId)
.then((card) => {
// handle card
}, (err) => {
//handle error
})
Delete a card by specifying customer id and card id
client.deleteCard(customerId, cardId)
.then((card) => {
// handle card
}, (err) => {
//handle error
})
List a customer cards
client.listCards(customerId)
.then((cards) => {
// handle the array of cards
}, (err) => {
//handle error
})
Add a charge to a customer
const charge = {
amount: 100, // required; A positive integer in the smallest currency unit
currency: 'SAR', // required: ISO 3 letter country code
customer_id: customerId, // Not required if `email` AND `card` are provided
card: cardId, // Not required if `customer_id` is provided
description: 'some description', // optional
email: 'Abdullah@example.com', // Not required if `customer_id` is provided
ip: '10.10.10.10', // optional
statement_descriptor: 'My store', // optional; What the customer sees on their credit card statement
capture: true, // optional, defaults to true, capture or just authorize and capture later
shopping_cart: { // optional
user_name: 'username',
registered_at: '2015-11-17T11:07:59.257Z',
items: [{
title: 'iPhone',
amount: 150000,
quantity: 1
}],
billing_address: {
first_name: 'Abdullah',
last_name: 'Ahmed',
country: 'UAE',
city: 'Dubai',
address_1: '201, BT Building',
address_2: 'Knowledge Village',
phone: '+97144444444'
},
shipping_address: {
first_name: 'Abdullah',
last_name: 'Ahmed',
country: 'UAE',
city: 'Dubai',
address_1: '201, BT Building',
address_2: 'Knowledge Village',
phone: '+97144444444'
},
}
};
client.addCharge(charge)
.then(charge => {
// handle charge
}, err => {
// handle error
})
the returned charge object details can be viewed here
Get a charge
client.getCharge(chargeId)
.then((charge) => {
// handle charge
}, (err) => {
//handle error
})
Capture an authorized charge and optionally update the amount. note: you can decrease the amount only
client.captureCharge(chargeId, newAmount)
.then((charge) => {
// handle charge
}, (err) => {
//handle error
})
List all authorizations, optionally limit the results and paginate by providing dates
// latest 20 charges
client.ListCharges()
.then(result => {
// note that `result` is an object with `charges` property and `meta` property which holds pagination information
// { charges: [], meta : { pagination: { before : ISODate, after: ISODate }}}
console.log('charges', result.charges)
})
// or get 10 results after a certain date
client.ListCharges(10, '2016-03-11T10:55:47.406144Z')
.then(result => {
// latest 20 charges
console.log('charges', result.charges);
// pagination metadata
// "meta":{
// "pagination":{
// "before":"2016-03-11T10:55:47.406144Z",
// "after":"2016-08-16T14:44:26.660890Z"
// }
// }
console.log('mata', result.mata);
})
// OR get 15 results after a certain date
client.ListCharges(15, false, '2016-03-11T10:55:47.406144Z')
.then(result => {
// latest 20 charges
console.log('charges', result.charges);
// pagination metadata
// "meta":{
// "pagination":{
// "before":"2016-03-11T10:55:47.406144Z",
// "after":"2016-08-16T14:44:26.660890Z"
// }
// }
console.log('mata', result.mata);
})
Request a refund for a payment with an amount
client.addRefund(chargeId, amount)
.then((charge) => {
// handle charge
}, (err) => {
// handle error
});
List refunds for a given charge
client.getRefundsForCharge(testCharge.id)
.then((result) => {
// result is is an object with the refunds as an array under the `refunds` property
console.log(result.refunds)
});
Information about the Customer data structure can be found here
Add a customer
client.addCustomer({
name: 'Abdullah', // optional
email: 'abdullah@msn.com', //required
card: cardId, // optional; card id string or card object
description: 'Signed up at the Trade Show in Dec 2014', // optional
})
.then((customer) => {
// new customer information
});
Get a customer
client.getCustomer(customerId)
.then((customer) => {
// customer information
})
Update a customer by passing an object with updated properties
client.updateCustomer(customerId, { name: 'Muhamed' })
.then((customer) => {
// customer.name === 'Muhamed'
})
Delete a customer by id
client.deleteCustomer(customerId)
.then((result) => {
// result is an object with the deleted customer id and a `deleted` property
// {
// "id": "cus_c1cf34bb962d84f39f729ca3a",
// "deleted": true
// }
})
List all customers with an optional limit, a date before or a date after
client.listCustomers(10 /* beforeDate, afterDate */)
.then((result) => {
// result.customers is an array of customer information with 10 items at most
})
FAQs
start node client
We found that start-node demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.