UNPKG

apa-api

Version:

Amazon Product Advertising API client

38 lines (31 loc) 885 B
_ = require 'lodash' URI = require 'URIjs' crypto = require 'crypto' class RequestSigner sign: (request) -> am = request.apiMeta params = request.asParams() normalized = normalize(params) source = prefix(am).concat([normalized]).join('\n') signature = digest(source, request.credential) "#{am.protocol}://#{am.endPoint}#{am.uri}?#{normalized}&Signature=#{signature}" module.exports = RequestSigner ################## # PRIVATE ################## normalize = (params) -> encoded = _.map params, (value, key) -> [escape(key), escape(value)].join('=') encoded.sort().join('&') prefix = (apiMeta) -> [ apiMeta.method apiMeta.endPoint apiMeta.uri ] escape = (value) -> URI.encode(value) digest = (source, credential) -> hmac = crypto.createHmac('sha256', credential.secretKey) hmac.update(source) escape hmac.digest('base64')