UNPKG

@sourceloop/ctrl-plane-subscription-service

Version:

Subscription management microservice for SaaS control plane.

130 lines 6.1 kB
"use strict"; // Copyright (c) 2023 Sourcefuse Technologies // // This software is released under the MIT License. // https://opensource.org/licenses/MIT Object.defineProperty(exports, "__esModule", { value: true }); exports.SubscriptionServiceComponent = void 0; const tslib_1 = require("tslib"); const context_1 = require("@loopback/context"); const core_1 = require("@loopback/core"); const rest_1 = require("@loopback/rest"); const core_2 = require("@sourceloop/core"); const feature_toggle_service_1 = require("@sourceloop/feature-toggle-service"); const loopback4_billing_1 = require("loopback4-billing"); const loopback4_authentication_1 = require("loopback4-authentication"); const loopback4_authorization_1 = require("loopback4-authorization"); const controllers_1 = require("./controllers"); const keys_1 = require("./keys"); const models_1 = require("./models"); const repositories_1 = require("./repositories"); const webhook_verifier_interceptor_1 = require("./interceptors/webhook-verifier.interceptor"); const providers_1 = require("./providers"); const billing_customer_controller_1 = require("./controllers/billing-customer.controller"); const billing_invoice_controller_1 = require("./controllers/billing-invoice.controller"); const billing_payment_source_controller_1 = require("./controllers/billing-payment-source.controller"); const webhook_controller_1 = require("./controllers/webhook.controller"); let SubscriptionServiceComponent = class SubscriptionServiceComponent { constructor(application, subscriptionConfig) { var _a; this.application = application; this.subscriptionConfig = subscriptionConfig; this.providers = {}; this.bindings = []; this.providers = {}; // Mount core component this.application.component(core_2.CoreComponent); /**Bind the feature toggle service to main the list of features */ this.application .bind(feature_toggle_service_1.FeatureToggleBindings.Config) .to({ bindControllers: true, useCustomSequence: true }); this.application.component(feature_toggle_service_1.FeatureToggleServiceComponent); this.application.component(loopback4_billing_1.BillingComponent); this.application.api({ openapi: '3.0.0', info: { title: 'Subscription Service', version: '1.0.0', }, paths: {}, components: { securitySchemes: core_2.SECURITY_SCHEME_SPEC, }, servers: [{ url: '/' }], }); if (!((_a = this.subscriptionConfig) === null || _a === void 0 ? void 0 : _a.useCustomSequence)) { // Mount default sequence if needed this.setupSequence(); } this.repositories = [ repositories_1.BillingCycleRepository, repositories_1.CurrencyRepository, repositories_1.PlanRepository, repositories_1.ResourceRepository, repositories_1.ServiceRepository, repositories_1.SubscriptionRepository, repositories_1.PlanSizesRepository, repositories_1.BillingCustomerRepository, repositories_1.InvoiceRepository, ]; this.models = [ models_1.BillingCycle, models_1.Currency, models_1.Plan, models_1.Resource, models_1.BillingCustomer, models_1.Invoice, models_1.Service, models_1.Subscription, models_1.PlanSizes, ]; this.bindings = [ context_1.Binding.bind(keys_1.WEBHOOK_VERIFIER).toProvider(webhook_verifier_interceptor_1.WebhookVerifierProvider), context_1.Binding.bind(keys_1.SYSTEM_USER).toProvider(providers_1.SystemUserProvider), ]; this.controllers = [ controllers_1.BillinCycleController, controllers_1.HomePageController, controllers_1.PingController, controllers_1.CurrencyController, controllers_1.PlanController, controllers_1.ResourceController, controllers_1.ServiceController, controllers_1.SubscriptionController, controllers_1.PlanSubscriptionController, controllers_1.PlanSizesController, controllers_1.PlanFeaturesController, billing_customer_controller_1.BillingCustomerController, billing_invoice_controller_1.BillingInvoiceController, billing_payment_source_controller_1.BillingPaymentSourceController, webhook_controller_1.WebhookController, ]; } /** * Setup ServiceSequence by default if no other sequnce provided * */ setupSequence() { this.application.sequence(core_2.ServiceSequence); // Mount authentication component for default sequence this.application.component(loopback4_authentication_1.AuthenticationComponent); // Mount bearer verifier component this.application.bind(core_2.BearerVerifierBindings.Config).to({ authServiceUrl: '', type: core_2.BearerVerifierType.service, }); this.application.component(core_2.BearerVerifierComponent); // Mount authorization component for default sequence this.application.bind(loopback4_authorization_1.AuthorizationBindings.CONFIG).to({ allowAlwaysPaths: ['/explorer'], }); this.application.component(loopback4_authorization_1.AuthorizationComponent); } }; exports.SubscriptionServiceComponent = SubscriptionServiceComponent; exports.SubscriptionServiceComponent = SubscriptionServiceComponent = tslib_1.__decorate([ tslib_1.__param(0, (0, context_1.inject)(core_1.CoreBindings.APPLICATION_INSTANCE)), tslib_1.__param(1, (0, context_1.inject)(keys_1.SubscriptionServiceBindings.Config, { optional: true })), tslib_1.__metadata("design:paramtypes", [rest_1.RestApplication, Object]) ], SubscriptionServiceComponent); //# sourceMappingURL=component.js.map