UNPKG

@sourceloop/ctrl-plane-subscription-service

Version:

Subscription management microservice for SaaS control plane.

126 lines 6 kB
"use strict"; // Copyright (c) 2023 Sourcefuse Technologies // // This software is released under the MIT License. // https://opensource.org/licenses/MIT var SubscriptionSequelizeServiceComponent_1; Object.defineProperty(exports, "__esModule", { value: true }); exports.SubscriptionSequelizeServiceComponent = 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 keys_1 = require("./keys"); const models_1 = require("./models"); const sequelize_1 = require("./repositories/sequelize"); const webhook_verifier_interceptor_1 = require("./interceptors/webhook-verifier.interceptor"); const providers_1 = require("./providers"); const services_1 = require("./services"); let SubscriptionSequelizeServiceComponent = SubscriptionSequelizeServiceComponent_1 = class SubscriptionSequelizeServiceComponent { 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.booters = [ (0, core_2.BooterBasePathMixin)(core_2.CoreModelBooter, __dirname, { interface: SubscriptionSequelizeServiceComponent_1.name, }), (0, core_2.BooterBasePathMixin)(core_2.CoreControllerBooter, __dirname, { dirs: ['controllers'], extensions: ['.controller.js'], nested: true, interface: SubscriptionSequelizeServiceComponent_1.name, }), ]; this.repositories = [ sequelize_1.BillingCustomerRepository, sequelize_1.BillingCycleRepository, sequelize_1.PlanRepository, sequelize_1.PlanSizesRepository, sequelize_1.InvoiceRepository, sequelize_1.ResourceRepository, sequelize_1.SubscriptionRepository, sequelize_1.ServiceRepository, sequelize_1.CurrencyRepository, ]; 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), (0, core_1.createServiceBinding)(services_1.BillingPaymentSourceService), (0, core_1.createServiceBinding)(services_1.BillingInvoiceService), (0, core_1.createServiceBinding)(services_1.SubscriptionService), (0, core_1.createServiceBinding)(services_1.PlanFeaturesService), (0, core_1.createServiceBinding)(services_1.BillingCustomerService), ]; } /** * 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.SubscriptionSequelizeServiceComponent = SubscriptionSequelizeServiceComponent; exports.SubscriptionSequelizeServiceComponent = SubscriptionSequelizeServiceComponent = SubscriptionSequelizeServiceComponent_1 = 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]) ], SubscriptionSequelizeServiceComponent); //# sourceMappingURL=sequelize-component.js.map