diff --git a/src/party/index-browser.js b/src/party/index-browser.js index 38aac8e2..26c7a0db 100644 --- a/src/party/index-browser.js +++ b/src/party/index-browser.js @@ -10,6 +10,7 @@ const CloudDocument = require('./cloud/cloud-document') const EphemeralClient = require('./peer/ephemeral-client') const MatchMakerClient = require('./peer/match-maker-client') const PeerClient = require('./peer/peer-client') +const BillingClient = require('./peer/billing-client') const LokiDb = require('../bouncer/db/loki-db') @@ -17,5 +18,6 @@ module.exports = { IDocument, IParty, DocumentFactory, CloudDocument, CloudParty, LokiParty, ZangoParty, PeerParty, - LokiDb, EphemeralClient, MatchMakerClient, PeerClient + LokiDb, EphemeralClient, MatchMakerClient, PeerClient, + BillingClient } diff --git a/src/party/index-embedded.js b/src/party/index-embedded.js index 78faf740..341ab5fd 100644 --- a/src/party/index-embedded.js +++ b/src/party/index-embedded.js @@ -10,11 +10,12 @@ const CloudDocument = require('./cloud/cloud-document') const EphemeralClient = require('./peer/ephemeral-client') const MatchMakerClient = require('./peer/match-maker-client') const PeerClient = require('./peer/peer-client') +const BillingClient = require('./peer/billing-client') module.exports = { IDocument, IParty, DocumentFactory, CloudDocument, CloudParty, LokiParty, PeerParty, TingoParty, EphemeralClient, MatchMakerClient, - PeerClient + PeerClient, BillingClient } \ No newline at end of file diff --git a/src/party/index.js b/src/party/index.js index 88b5181f..47aaf147 100644 --- a/src/party/index.js +++ b/src/party/index.js @@ -12,3 +12,5 @@ exports.CloudDocument = require('./cloud/cloud-document') exports.EphemeralClient = require('./peer/ephemeral-client') exports.MatchMakerClient = require('./peer/match-maker-client') exports.PeerClient = require('./peer/peer-client') +exports.BillingClient = require('./peer/billing-client') + diff --git a/src/party/peer/billing-client.js b/src/party/peer/billing-client.js new file mode 100644 index 00000000..f634d406 --- /dev/null +++ b/src/party/peer/billing-client.js @@ -0,0 +1,70 @@ +const EventEmitter = require('eventemitter3') + +const debug = require('debug')('dataparty.billing-client') +const EphemeralClient = require('./ephemeral-client') + +class BillingClient extends EventEmitter { + + /** + * Constructor + * @param EphemeralClient client + */ + constructor(identity, domain='buy.dataparty.xyz', clientOptions={}){ + + super() + + this.client = new EphemeralClient({ + identity, + urlOrParty: 'https://'+domain, + wsUrlOrParty: 'wss://'+domain+'/ws', + ...clientOptions + }) + } + + async start(){ + await this.client.start() + } + + + async getProductInfo(service){ + const reqData = { + service + } + + debug('getProductInfo', reqData) + + const result = await this.client.restParty.comms.call('billing/product/info', reqData, { + expectClearTextReply: false, + sendClearTextRequest: false, + useSessions: true + }) + + debug('\tresult', result) + + return result.products + } + + async createPaymentSession(service, productIndex=0, priceIndex=0, payment_type='stripe'){ + const reqData = { + service, + productIndex, + priceIndex, + payment_type + } + + debug('createPaymentSession', reqData) + + const result = await this.client.restParty.comms.call('billing/create/payment', reqData, { + expectClearTextReply: false, + sendClearTextRequest: false, + useSessions: true + }) + + debug('\tresult', result) + + return result.payment_session + } + +} + +module.exports = BillingClient diff --git a/src/venue/bin/commands/billable-service-create.js b/src/venue/bin/commands/billable-service-create.js index c8ee5c81..d3e9f32d 100644 --- a/src/venue/bin/commands/billable-service-create.js +++ b/src/venue/bin/commands/billable-service-create.js @@ -226,12 +226,16 @@ class VenueBillableServiceCreate extends CmdTree.Command { console.log('\tadd stripe price', stripePrice.id) - const itemPrice = { + let itemPrice = { one_time_purchase: stripePrice.type == 'one_time', period_unit: reach(stripePrice, 'recurring.interval'), stripe_price_id: stripePrice.id } + if(!reach(stripePrice, 'recurring.interval')){ + delete itemPrice.period_unit + } + productToAdd.prices.push( itemPrice ) } diff --git a/src/venue/schema/venue_project.js b/src/venue/schema/venue_project.js index e41e3cbc..ded875e5 100644 --- a/src/venue/schema/venue_project.js +++ b/src/venue/schema/venue_project.js @@ -140,4 +140,4 @@ class VenueProject extends ISchema { } -module.exports = VenueProject \ No newline at end of file +module.exports = VenueProject