'use strict'; angular.module('copayApp.services').factory('amazonService', function($http, $log, lodash, moment, storageService, configService, platformInfo, nextStepsService, homeIntegrationsService) { var root = {}; var credentials = {}; var setCredentials = function() { /* * Development: 'testnet' * Production: 'livenet' */ //credentials.NETWORK = 'livenet'; credentials.NETWORK = 'testnet'; if (credentials.NETWORK == 'testnet') { credentials.BITPAY_API_URL = "https://test.bitpay.com"; } else { credentials.BITPAY_API_URL = "https://bitpay.com"; }; }; var _getBitPay = function(endpoint) { return { method: 'GET', url: credentials.BITPAY_API_URL + endpoint, headers: { 'content-type': 'application/json' } }; }; var _postBitPay = function(endpoint, data) { return { method: 'POST', url: credentials.BITPAY_API_URL + endpoint, headers: { 'content-type': 'application/json' }, data: data }; }; root.getNetwork = function() { return credentials.NETWORK; }; root.savePendingGiftCard = function(gc, opts, cb) { var network = root.getNetwork(); storageService.getAmazonGiftCards(network, function(err, oldGiftCards) { if (lodash.isString(oldGiftCards)) { oldGiftCards = JSON.parse(oldGiftCards); } if (lodash.isString(gc)) { gc = JSON.parse(gc); } var inv = oldGiftCards || {}; inv[gc.invoiceId] = gc; if (opts && (opts.error || opts.status)) { inv[gc.invoiceId] = lodash.assign(inv[gc.invoiceId], opts); } if (opts && opts.remove) { delete(inv[gc.invoiceId]); } inv = JSON.stringify(inv); storageService.setAmazonGiftCards(network, inv, function(err) { return cb(err); }); }); }; root.getPendingGiftCards = function(cb) { var network = root.getNetwork(); storageService.getAmazonGiftCards(network, function(err, giftCards) { var _gcds = giftCards ? JSON.parse(giftCards) : null; return cb(err, _gcds); }); }; root.createBitPayInvoice = function(data, cb) { var dataSrc = { currency: data.currency, amount: data.amount, clientId: data.uuid }; $http(_postBitPay('/amazon-gift/pay', dataSrc)).then(function(data) { $log.info('BitPay Create Invoice: SUCCESS'); return cb(null, data.data); }, function(data) { $log.error('BitPay Create Invoice: ERROR ' + data.data.message); return cb(data.data); }); }; root.getBitPayInvoice = function(id, cb) { $http(_getBitPay('/invoices/' + id)).then(function(data) { $log.info('BitPay Get Invoice: SUCCESS'); return cb(null, data.data.data); }, function(data) { $log.error('BitPay Get Invoice: ERROR ' + data.data.error); return cb(data.data.error); }); }; root.createGiftCard = function(data, cb) { var dataSrc = { "clientId": data.uuid, "invoiceId": data.invoiceId, "accessKey": data.accessKey }; $http(_postBitPay('/amazon-gift/redeem', dataSrc)).then(function(data) { var status = data.data.status == 'new' ? 'PENDING' : (data.data.status == 'paid') ? 'PENDING' : data.data.status; data.data.status = status; $log.info('Amazon.com Gift Card Create/Update: ' + status); return cb(null, data.data); }, function(data) { $log.error('Amazon.com Gift Card Create/Update: ' + data.data.message); return cb(data.data); }); }; root.cancelGiftCard = function(data, cb) { var dataSrc = { "clientId": data.uuid, "invoiceId": data.invoiceId, "accessKey": data.accessKey }; $http(_postBitPay('/amazon-gift/cancel', dataSrc)).then(function(data) { $log.info('Amazon.com Gift Card Cancel: SUCCESS'); return cb(null, data.data); }, function(data) { $log.error('Amazon.com Gift Card Cancel: ' + data.data.message); return cb(data.data); }); }; var register = function () { storageService.getAmazonGiftCards(root.getNetwork(), function(err, giftCards) { if (giftCards) { homeIntegrationsService.register({ name: 'amazon', title: 'Amazon Gift Cards', icon: 'icon-amazon', sref: 'tabs.giftcards.amazon', }); } else { nextStepsService.register({ name: 'amazon', title: 'Buy a gift card', icon: 'icon-amazon', sref: 'tabs.giftcards.amazon', }); } }); }; setCredentials(); register(); return root; });