@lyxa.ai/core 1.0.15-debug-0.12 → 1.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +4 -4
- package/dist/index.js +6 -7
- package/dist/index.js.map +1 -1
- package/dist/libraries/auth/index.d.ts +3 -3
- package/dist/libraries/auth/index.js +26 -26
- package/dist/libraries/auth/index.js.map +1 -1
- package/dist/libraries/auth/refreshtoken.d.ts +1 -1
- package/dist/libraries/auth/refreshtoken.js +6 -10
- package/dist/libraries/auth/refreshtoken.js.map +1 -1
- package/dist/libraries/auth/repository.d.ts +3 -3
- package/dist/libraries/auth/repository.js +1 -5
- package/dist/libraries/auth/repository.js.map +1 -1
- package/dist/libraries/configuration/index.d.ts +2 -2
- package/dist/libraries/configuration/index.js +20 -20
- package/dist/libraries/configuration/index.js.map +1 -1
- package/dist/libraries/configuration/types/EnvironmentConfigurationType.js.map +1 -1
- package/dist/libraries/dispatcher/index.d.ts +2 -2
- package/dist/libraries/dispatcher/index.js +2 -2
- package/dist/libraries/dispatcher/index.js.map +1 -1
- package/dist/libraries/event/BaseEvent.js.map +1 -1
- package/dist/libraries/event/decorators/metadata.d.ts +1 -1
- package/dist/libraries/event/decorators/metadata.js.map +1 -1
- package/dist/libraries/event/decorators/subscribe.js.map +1 -1
- package/dist/libraries/event/index.d.ts +1 -1
- package/dist/libraries/event/index.js +6 -6
- package/dist/libraries/event/index.js.map +1 -1
- package/dist/libraries/event/registry/SubscriptionRegistry.js.map +1 -1
- package/dist/libraries/event/test/OrderCreationEvent.d.ts +1 -1
- package/dist/libraries/event/test/OrderCreationEvent.js +9 -6
- package/dist/libraries/event/test/OrderCreationEvent.js.map +1 -1
- package/dist/libraries/firebase/index.d.ts +1 -1
- package/dist/libraries/firebase/index.js.map +1 -1
- package/dist/libraries/index.d.ts +9 -9
- package/dist/libraries/index.js +1 -1
- package/dist/libraries/index.js.map +1 -1
- package/dist/libraries/logger/index.d.ts +1 -1
- package/dist/libraries/logger/index.js +9 -9
- package/dist/libraries/logger/index.js.map +1 -1
- package/dist/libraries/mongo/index.d.ts +1 -1
- package/dist/libraries/mongo/index.js +11 -11
- package/dist/libraries/mongo/index.js.map +1 -1
- package/dist/libraries/mongo/models/activity-log.model.d.ts +1 -2
- package/dist/libraries/mongo/models/activity-log.model.js +1 -2
- package/dist/libraries/mongo/models/activity-log.model.js.map +1 -1
- package/dist/libraries/mongo/models/admin-access-control.model.js.map +1 -1
- package/dist/libraries/mongo/models/admin.model.d.ts +3 -3
- package/dist/libraries/mongo/models/admin.model.js +4 -3
- package/dist/libraries/mongo/models/admin.model.js.map +1 -1
- package/dist/libraries/mongo/models/app-screen-setting.model.d.ts +0 -2
- package/dist/libraries/mongo/models/app-screen-setting.model.js +1 -2
- package/dist/libraries/mongo/models/app-screen-setting.model.js.map +1 -1
- package/dist/libraries/mongo/models/attribute.model.d.ts +1 -2
- package/dist/libraries/mongo/models/attribute.model.js +1 -2
- package/dist/libraries/mongo/models/attribute.model.js.map +1 -1
- package/dist/libraries/mongo/models/banner.model.d.ts +1 -2
- package/dist/libraries/mongo/models/banner.model.js +1 -2
- package/dist/libraries/mongo/models/banner.model.js.map +1 -1
- package/dist/libraries/mongo/models/base/base-coupon.model.js.map +1 -1
- package/dist/libraries/mongo/models/base/base-review.model.js.map +1 -1
- package/dist/libraries/mongo/models/bob-finance.model.d.ts +2 -3
- package/dist/libraries/mongo/models/bob-finance.model.js +2 -3
- package/dist/libraries/mongo/models/bob-finance.model.js.map +1 -1
- package/dist/libraries/mongo/models/brand.model.d.ts +0 -2
- package/dist/libraries/mongo/models/brand.model.js +1 -2
- package/dist/libraries/mongo/models/brand.model.js.map +1 -1
- package/dist/libraries/mongo/models/category.model.d.ts +1 -2
- package/dist/libraries/mongo/models/category.model.js +1 -2
- package/dist/libraries/mongo/models/category.model.js.map +1 -1
- package/dist/libraries/mongo/models/core-auth-identity.model.js.map +1 -1
- package/dist/libraries/mongo/models/core-user.model.js.map +1 -1
- package/dist/libraries/mongo/models/counter.model.d.ts +0 -2
- package/dist/libraries/mongo/models/counter.model.js +1 -2
- package/dist/libraries/mongo/models/counter.model.js.map +1 -1
- package/dist/libraries/mongo/models/coupon.model.d.ts +0 -2
- package/dist/libraries/mongo/models/coupon.model.js +4 -3
- package/dist/libraries/mongo/models/coupon.model.js.map +1 -1
- package/dist/libraries/mongo/models/deal-setting.model.d.ts +0 -2
- package/dist/libraries/mongo/models/deal-setting.model.js +1 -2
- package/dist/libraries/mongo/models/deal-setting.model.js.map +1 -1
- package/dist/libraries/mongo/models/dish.model.d.ts +1 -2
- package/dist/libraries/mongo/models/dish.model.js +1 -2
- package/dist/libraries/mongo/models/dish.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/attribute-item.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/attribute-map.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/business-development-setting.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/charge-setting.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/charge.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/courier-setting.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/currency-setting.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/currency.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/featured-item.mode.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/otp-fields.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/package.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/parent-document.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/payout-setting.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/price.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/product-nutrition.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/referral-discount-config.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/rider-setting.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/service-fee-setting.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/shop-document.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/subscription-summary.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/zone-geometry.mode.js.map +1 -1
- package/dist/libraries/mongo/models/faq.model.d.ts +0 -2
- package/dist/libraries/mongo/models/faq.model.js +1 -2
- package/dist/libraries/mongo/models/faq.model.js.map +1 -1
- package/dist/libraries/mongo/models/favourite.model.d.ts +3 -4
- package/dist/libraries/mongo/models/favourite.model.js +3 -4
- package/dist/libraries/mongo/models/favourite.model.js.map +1 -1
- package/dist/libraries/mongo/models/featured-setting.model.d.ts +0 -2
- package/dist/libraries/mongo/models/featured-setting.model.js +1 -2
- package/dist/libraries/mongo/models/featured-setting.model.js.map +1 -1
- package/dist/libraries/mongo/models/filter-container.model.d.ts +0 -1
- package/dist/libraries/mongo/models/filter-container.model.js +1 -2
- package/dist/libraries/mongo/models/filter-container.model.js.map +1 -1
- package/dist/libraries/mongo/models/index.d.ts +170 -63
- package/dist/libraries/mongo/models/index.js +113 -3
- package/dist/libraries/mongo/models/index.js.map +1 -1
- package/dist/libraries/mongo/models/list-container.model.d.ts +2 -3
- package/dist/libraries/mongo/models/list-container.model.js +2 -3
- package/dist/libraries/mongo/models/list-container.model.js.map +1 -1
- package/dist/libraries/mongo/models/loyalty-point-category.model.d.ts +0 -2
- package/dist/libraries/mongo/models/loyalty-point-category.model.js +1 -2
- package/dist/libraries/mongo/models/loyalty-point-category.model.js.map +1 -1
- package/dist/libraries/mongo/models/loyalty-point-setting.model.d.ts +0 -2
- package/dist/libraries/mongo/models/loyalty-point-setting.model.js +1 -2
- package/dist/libraries/mongo/models/loyalty-point-setting.model.js.map +1 -1
- package/dist/libraries/mongo/models/marketing.model.d.ts +2 -3
- package/dist/libraries/mongo/models/marketing.model.js +13 -5
- package/dist/libraries/mongo/models/marketing.model.js.map +1 -1
- package/dist/libraries/mongo/models/meal-plan.model.d.ts +0 -2
- package/dist/libraries/mongo/models/meal-plan.model.js +1 -2
- package/dist/libraries/mongo/models/meal-plan.model.js.map +1 -1
- package/dist/libraries/mongo/models/notification.model.d.ts +8 -9
- package/dist/libraries/mongo/models/notification.model.js +8 -9
- package/dist/libraries/mongo/models/notification.model.js.map +1 -1
- package/dist/libraries/mongo/models/nutrition.model.d.ts +0 -2
- package/dist/libraries/mongo/models/nutrition.model.js +1 -2
- package/dist/libraries/mongo/models/nutrition.model.js.map +1 -1
- package/dist/libraries/mongo/models/order.model.js.map +1 -1
- package/dist/libraries/mongo/models/parent.model.d.ts +3 -4
- package/dist/libraries/mongo/models/parent.model.js +8 -5
- package/dist/libraries/mongo/models/parent.model.js.map +1 -1
- package/dist/libraries/mongo/models/payout.model.js.map +1 -1
- package/dist/libraries/mongo/models/product-marketing.model.d.ts +3 -4
- package/dist/libraries/mongo/models/product-marketing.model.js +3 -4
- package/dist/libraries/mongo/models/product-marketing.model.js.map +1 -1
- package/dist/libraries/mongo/models/product.model.d.ts +1 -3
- package/dist/libraries/mongo/models/product.model.js +8 -4
- package/dist/libraries/mongo/models/product.model.js.map +1 -1
- package/dist/libraries/mongo/models/providers/buy1-get1-marketing.model.d.ts +1 -2
- package/dist/libraries/mongo/models/providers/buy1-get1-marketing.model.js +1 -2
- package/dist/libraries/mongo/models/providers/buy1-get1-marketing.model.js.map +1 -1
- package/dist/libraries/mongo/models/providers/core-apple-auth-identity.model.js.map +1 -1
- package/dist/libraries/mongo/models/providers/core-email-auth-identity.model.js.map +1 -1
- package/dist/libraries/mongo/models/providers/core-google-auth-identity.model.js.map +1 -1
- package/dist/libraries/mongo/models/providers/core-phone-auth-identity.model.js.map +1 -1
- package/dist/libraries/mongo/models/providers/custom-coupon.model.d.ts +1 -2
- package/dist/libraries/mongo/models/providers/custom-coupon.model.js +1 -3
- package/dist/libraries/mongo/models/providers/custom-coupon.model.js.map +1 -1
- package/dist/libraries/mongo/models/providers/discount-marketing.model.d.ts +1 -2
- package/dist/libraries/mongo/models/providers/discount-marketing.model.js +1 -2
- package/dist/libraries/mongo/models/providers/discount-marketing.model.js.map +1 -1
- package/dist/libraries/mongo/models/providers/featured-marketing.model.d.ts +0 -2
- package/dist/libraries/mongo/models/providers/featured-marketing.model.js +1 -2
- package/dist/libraries/mongo/models/providers/featured-marketing.model.js.map +1 -1
- package/dist/libraries/mongo/models/providers/free-delivery-marketing.model.d.ts +0 -2
- package/dist/libraries/mongo/models/providers/free-delivery-marketing.model.js +1 -2
- package/dist/libraries/mongo/models/providers/free-delivery-marketing.model.js.map +1 -1
- package/dist/libraries/mongo/models/providers/global-coupon.model.d.ts +0 -2
- package/dist/libraries/mongo/models/providers/global-coupon.model.js +1 -4
- package/dist/libraries/mongo/models/providers/global-coupon.model.js.map +1 -1
- package/dist/libraries/mongo/models/providers/individual-store-coupon.model.d.ts +1 -2
- package/dist/libraries/mongo/models/providers/individual-store-coupon.model.js +1 -3
- package/dist/libraries/mongo/models/providers/individual-store-coupon.model.js.map +1 -1
- package/dist/libraries/mongo/models/providers/individual-user-coupon.model.d.ts +1 -2
- package/dist/libraries/mongo/models/providers/individual-user-coupon.model.js +1 -3
- package/dist/libraries/mongo/models/providers/individual-user-coupon.model.js.map +1 -1
- package/dist/libraries/mongo/models/providers/loyalty-point-marketing.model.d.ts +1 -2
- package/dist/libraries/mongo/models/providers/loyalty-point-marketing.model.js +1 -2
- package/dist/libraries/mongo/models/providers/loyalty-point-marketing.model.js.map +1 -1
- package/dist/libraries/mongo/models/providers/punch-marketing.model.d.ts +0 -2
- package/dist/libraries/mongo/models/providers/punch-marketing.model.js +1 -2
- package/dist/libraries/mongo/models/providers/punch-marketing.model.js.map +1 -1
- package/dist/libraries/mongo/models/providers/referral-code-coupon.model.d.ts +1 -2
- package/dist/libraries/mongo/models/providers/referral-code-coupon.model.js +1 -2
- package/dist/libraries/mongo/models/providers/referral-code-coupon.model.js.map +1 -1
- package/dist/libraries/mongo/models/providers/referral-reward-coupon.model.d.ts +1 -2
- package/dist/libraries/mongo/models/providers/referral-reward-coupon.model.js +1 -3
- package/dist/libraries/mongo/models/providers/referral-reward-coupon.model.js.map +1 -1
- package/dist/libraries/mongo/models/punch-marketing-history.model.d.ts +1 -2
- package/dist/libraries/mongo/models/punch-marketing-history.model.js +1 -2
- package/dist/libraries/mongo/models/punch-marketing-history.model.js.map +1 -1
- package/dist/libraries/mongo/models/rating-setting.model.d.ts +0 -2
- package/dist/libraries/mongo/models/rating-setting.model.js +1 -2
- package/dist/libraries/mongo/models/rating-setting.model.js.map +1 -1
- package/dist/libraries/mongo/models/referral-setting.model.d.ts +0 -2
- package/dist/libraries/mongo/models/referral-setting.model.js +1 -2
- package/dist/libraries/mongo/models/referral-setting.model.js.map +1 -1
- package/dist/libraries/mongo/models/request-area.model.d.ts +1 -2
- package/dist/libraries/mongo/models/request-area.model.js +1 -2
- package/dist/libraries/mongo/models/request-area.model.js.map +1 -1
- package/dist/libraries/mongo/models/rider-review.model.d.ts +1 -2
- package/dist/libraries/mongo/models/rider-review.model.js +1 -2
- package/dist/libraries/mongo/models/rider-review.model.js.map +1 -1
- package/dist/libraries/mongo/models/rider.model.js.map +1 -1
- package/dist/libraries/mongo/models/role.model.d.ts +0 -2
- package/dist/libraries/mongo/models/role.model.js +1 -3
- package/dist/libraries/mongo/models/role.model.js.map +1 -1
- package/dist/libraries/mongo/models/setting.model.d.ts +6 -8
- package/dist/libraries/mongo/models/setting.model.js +7 -8
- package/dist/libraries/mongo/models/setting.model.js.map +1 -1
- package/dist/libraries/mongo/models/shared/address.model.d.ts +1 -1
- package/dist/libraries/mongo/models/shared/address.model.js.map +1 -1
- package/dist/libraries/mongo/models/shared/duration.model.js.map +1 -1
- package/dist/libraries/mongo/models/shared/work-hour.model.d.ts +1 -1
- package/dist/libraries/mongo/models/shared/work-hour.model.js +1 -1
- package/dist/libraries/mongo/models/shared/work-hour.model.js.map +1 -1
- package/dist/libraries/mongo/models/shop-access-control.model.d.ts +1 -2
- package/dist/libraries/mongo/models/shop-access-control.model.js +1 -2
- package/dist/libraries/mongo/models/shop-access-control.model.js.map +1 -1
- package/dist/libraries/mongo/models/shop-category.model.d.ts +2 -3
- package/dist/libraries/mongo/models/shop-category.model.js +2 -3
- package/dist/libraries/mongo/models/shop-category.model.js.map +1 -1
- package/dist/libraries/mongo/models/shop-meal-plan.model.d.ts +2 -3
- package/dist/libraries/mongo/models/shop-meal-plan.model.js +2 -3
- package/dist/libraries/mongo/models/shop-meal-plan.model.js.map +1 -1
- package/dist/libraries/mongo/models/shop-product.model.d.ts +4 -5
- package/dist/libraries/mongo/models/shop-product.model.js +4 -5
- package/dist/libraries/mongo/models/shop-product.model.js.map +1 -1
- package/dist/libraries/mongo/models/shop-review.model.d.ts +1 -2
- package/dist/libraries/mongo/models/shop-review.model.js +1 -2
- package/dist/libraries/mongo/models/shop-review.model.js.map +1 -1
- package/dist/libraries/mongo/models/shop.model.d.ts +3 -4
- package/dist/libraries/mongo/models/shop.model.js +12 -6
- package/dist/libraries/mongo/models/shop.model.js.map +1 -1
- package/dist/libraries/mongo/models/subscription-setting.model.d.ts +0 -2
- package/dist/libraries/mongo/models/subscription-setting.model.js +7 -3
- package/dist/libraries/mongo/models/subscription-setting.model.js.map +1 -1
- package/dist/libraries/mongo/models/subscription.model.d.ts +3 -4
- package/dist/libraries/mongo/models/subscription.model.js +13 -6
- package/dist/libraries/mongo/models/subscription.model.js.map +1 -1
- package/dist/libraries/mongo/models/tag.model.d.ts +0 -2
- package/dist/libraries/mongo/models/tag.model.js +1 -2
- package/dist/libraries/mongo/models/tag.model.js.map +1 -1
- package/dist/libraries/mongo/models/transaction.model.js.map +1 -1
- package/dist/libraries/mongo/models/zone.model.d.ts +0 -2
- package/dist/libraries/mongo/models/zone.model.js +1 -2
- package/dist/libraries/mongo/models/zone.model.js.map +1 -1
- package/dist/libraries/mongo/plugins/soft-delete-plugin.d.ts +4 -4
- package/dist/libraries/mongo/plugins/soft-delete-plugin.js +11 -11
- package/dist/libraries/mongo/plugins/soft-delete-plugin.js.map +1 -1
- package/dist/libraries/redis/index.d.ts +1 -1
- package/dist/libraries/redis/index.js +4 -1
- package/dist/libraries/redis/index.js.map +1 -1
- package/dist/libraries/secrets/index.d.ts +2 -2
- package/dist/libraries/secrets/index.js +13 -13
- package/dist/libraries/secrets/index.js.map +1 -1
- package/dist/libraries/trpc/context.d.ts +4 -4
- package/dist/libraries/trpc/context.js +1 -1
- package/dist/libraries/trpc/context.js.map +1 -1
- package/dist/libraries/trpc/index.js.map +1 -1
- package/dist/libraries/trpc/middlewares/auth.d.ts +1 -1
- package/dist/libraries/trpc/middlewares/auth.js +12 -13
- package/dist/libraries/trpc/middlewares/auth.js.map +1 -1
- package/dist/libraries/trpc/middlewares/cors.js +7 -3
- package/dist/libraries/trpc/middlewares/cors.js.map +1 -1
- package/dist/libraries/twilio/index.d.ts +1 -1
- package/dist/libraries/twilio/index.js +2 -3
- package/dist/libraries/twilio/index.js.map +1 -1
- package/dist/libraries/upload/index.js +3 -3
- package/dist/libraries/upload/index.js.map +1 -1
- package/dist/utilities/enum.js.map +1 -1
- package/dist/utilities/error-handler.js.map +1 -1
- package/dist/utilities/error-middleware.js.map +1 -1
- package/dist/utilities/pagination.d.ts +4 -4
- package/dist/utilities/pagination.js +3 -8
- package/dist/utilities/pagination.js.map +1 -1
- package/dist/utilities/transformers.d.ts +2 -2
- package/dist/utilities/transformers.js +6 -6
- package/dist/utilities/transformers.js.map +1 -1
- package/dist/utilities/validation/common-validation.js.map +1 -1
- package/dist/utilities/validation/global-validation.js.map +1 -1
- package/dist/utilities/validation/index.js.map +1 -1
- package/package.json +44 -41
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscription-setting.model.js","sourceRoot":"/","sources":["libraries/mongo/models/subscription-setting.model.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"subscription-setting.model.js","sourceRoot":"/","sources":["libraries/mongo/models/subscription-setting.model.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAA0D;AAC1D,4EAAqE;AACrE,kDAAsE;AAG/D,IAAM,mBAAmB,GAAzB,MAAM,mBAAoB,SAAQ,2BAAU;IAO3C,OAAO,CAAuB;IAG9B,MAAM,CAAU;IAGhB,MAAM,CAAU;CACvB,CAAA;AAdY,kDAAmB;AAOxB;IANN,IAAA,gBAAI,EAAC;QACL,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,0BAAmB;KACzB,CAAC;;oDACmC;AAG9B;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;mDAChB;AAGhB;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAM,EAAE,OAAO,EAAE,aAAM,CAAC,MAAM,EAAE,CAAC;;mDACtC;8BAbX,mBAAmB;IAD/B,IAAA,wBAAY,EAAC,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,sBAAsB,EAAE,EAAE,CAAC;GAC3D,mBAAmB,CAc/B","sourcesContent":["import { modelOptions, prop } from '@typegoose/typegoose';\r\nimport { TimeStamps } from '@typegoose/typegoose/lib/defaultClasses';\r\nimport { Status, SubscriptionPackage } from '../../../utilities/enum';\r\n\r\n@modelOptions({ schemaOptions: { collection: 'subscriptionSettings' } })\r\nexport class SubscriptionSetting extends TimeStamps {\r\n\t@prop({\r\n\t\trequired: true,\r\n\t\tunique: true,\r\n\t\ttype: String,\r\n\t\tenum: SubscriptionPackage,\r\n\t})\r\n\tpublic package!: SubscriptionPackage;\r\n\r\n\t@prop({ required: true, type: Number })\r\n\tpublic amount!: number;\r\n\r\n\t@prop({ type: String, enum: Status, default: Status.ACTIVE })\r\n\tpublic status?: Status;\r\n}\r\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { Ref
|
|
1
|
+
import { Ref } from '@typegoose/typegoose';
|
|
2
2
|
import { TimeStamps } from '@typegoose/typegoose/lib/defaultClasses';
|
|
3
3
|
import { PaidCurrency, PaymentMethod, PaymentStatus, SubscriptionPackage, SubscriptionStatus } from '../../../utilities/enum';
|
|
4
|
-
import { Duration } from './shared/duration.model';
|
|
5
|
-
import { SubscriptionSummary } from './embedded/subscription-summary.model';
|
|
6
4
|
import { CoreUser } from './core-user.model';
|
|
5
|
+
import { SubscriptionSummary } from './embedded/subscription-summary.model';
|
|
6
|
+
import { Duration } from './shared/duration.model';
|
|
7
7
|
import { Transaction } from './transaction.model';
|
|
8
8
|
export declare class Subscription extends TimeStamps {
|
|
9
9
|
user: Ref<CoreUser>;
|
|
@@ -20,4 +20,3 @@ export declare class Subscription extends TimeStamps {
|
|
|
20
20
|
transactions?: Ref<Transaction>[];
|
|
21
21
|
paidCurrency?: PaidCurrency;
|
|
22
22
|
}
|
|
23
|
-
export declare const SubscriptionModel: ReturnModelType<typeof Subscription>;
|
|
@@ -9,13 +9,13 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.
|
|
12
|
+
exports.Subscription = void 0;
|
|
13
13
|
const typegoose_1 = require("@typegoose/typegoose");
|
|
14
14
|
const defaultClasses_1 = require("@typegoose/typegoose/lib/defaultClasses");
|
|
15
15
|
const enum_1 = require("../../../utilities/enum");
|
|
16
|
-
const duration_model_1 = require("./shared/duration.model");
|
|
17
|
-
const subscription_summary_model_1 = require("./embedded/subscription-summary.model");
|
|
18
16
|
const core_user_model_1 = require("./core-user.model");
|
|
17
|
+
const subscription_summary_model_1 = require("./embedded/subscription-summary.model");
|
|
18
|
+
const duration_model_1 = require("./shared/duration.model");
|
|
19
19
|
const transaction_model_1 = require("./transaction.model");
|
|
20
20
|
let Subscription = class Subscription extends defaultClasses_1.TimeStamps {
|
|
21
21
|
user;
|
|
@@ -38,7 +38,11 @@ __decorate([
|
|
|
38
38
|
__metadata("design:type", Object)
|
|
39
39
|
], Subscription.prototype, "user", void 0);
|
|
40
40
|
__decorate([
|
|
41
|
-
(0, typegoose_1.prop)({
|
|
41
|
+
(0, typegoose_1.prop)({
|
|
42
|
+
type: String,
|
|
43
|
+
enum: enum_1.SubscriptionPackage,
|
|
44
|
+
default: enum_1.SubscriptionPackage.MONTHLY,
|
|
45
|
+
}),
|
|
42
46
|
__metadata("design:type", String)
|
|
43
47
|
], Subscription.prototype, "package", void 0);
|
|
44
48
|
__decorate([
|
|
@@ -58,7 +62,11 @@ __decorate([
|
|
|
58
62
|
__metadata("design:type", duration_model_1.Duration)
|
|
59
63
|
], Subscription.prototype, "duration", void 0);
|
|
60
64
|
__decorate([
|
|
61
|
-
(0, typegoose_1.prop)({
|
|
65
|
+
(0, typegoose_1.prop)({
|
|
66
|
+
type: String,
|
|
67
|
+
enum: enum_1.SubscriptionStatus,
|
|
68
|
+
default: enum_1.SubscriptionStatus.ONGOING,
|
|
69
|
+
}),
|
|
62
70
|
__metadata("design:type", String)
|
|
63
71
|
], Subscription.prototype, "status", void 0);
|
|
64
72
|
__decorate([
|
|
@@ -88,5 +96,4 @@ __decorate([
|
|
|
88
96
|
exports.Subscription = Subscription = __decorate([
|
|
89
97
|
(0, typegoose_1.modelOptions)({ schemaOptions: { collection: 'subscriptions' } })
|
|
90
98
|
], Subscription);
|
|
91
|
-
exports.SubscriptionModel = (0, typegoose_1.getModelForClass)(Subscription);
|
|
92
99
|
//# sourceMappingURL=subscription.model.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscription.model.js","sourceRoot":"/","sources":["libraries/mongo/models/subscription.model.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"subscription.model.js","sourceRoot":"/","sources":["libraries/mongo/models/subscription.model.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAA+D;AAC/D,4EAAqE;AACrE,kDAMiC;AACjC,uDAA6C;AAC7C,sFAA4E;AAC5E,4DAAmD;AACnD,2DAAkD;AAG3C,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,2BAAU;IAEpC,IAAI,CAAiB;IAOrB,OAAO,CAAuB;IAG9B,GAAG,CAAU;IAGb,YAAY,CAAU;IAGtB,OAAO,CAAuB;IAG9B,QAAQ,CAAY;IAOpB,MAAM,CAAsB;IAG5B,SAAS,CAAW;IAGpB,YAAY,CAAU;IAGtB,aAAa,CAAiB;IAG9B,aAAa,CAAiB;IAG9B,YAAY,CAAsB;IAGlC,YAAY,CAAgB;CACnC,CAAA;AA/CY,oCAAY;AAEjB;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,0BAAQ,EAAE,CAAC;;0CAClB;AAOrB;IALN,IAAA,gBAAI,EAAC;QACL,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,0BAAmB;QACzB,OAAO,EAAE,0BAAmB,CAAC,OAAO;KACpC,CAAC;;6CACmC;AAG9B;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;yCACnB;AAGb;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;kDACV;AAGtB;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,gDAAmB,EAAE,CAAC;8BACnB,gDAAmB;6CAAC;AAG9B;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,yBAAQ,EAAE,CAAC;8BACvB,yBAAQ;8CAAC;AAOpB;IALN,IAAA,gBAAI,EAAC;QACL,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,yBAAkB;QACxB,OAAO,EAAE,yBAAkB,CAAC,OAAO;KACnC,CAAC;;4CACiC;AAG5B;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;+CACZ;AAGpB;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;kDACM;AAGtB;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAa,EAAE,CAAC;;mDACvB;AAG9B;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAa,EAAE,OAAO,EAAE,oBAAa,CAAC,OAAO,EAAE,CAAC;;mDACvC;AAG9B;IADN,IAAA,gBAAI,EAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,+BAAW,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;;kDACL;AAGlC;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAY,EAAE,OAAO,EAAE,mBAAY,CAAC,IAAI,EAAE,CAAC;;kDACpC;uBA9CvB,YAAY;IADxB,IAAA,wBAAY,EAAC,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,eAAe,EAAE,EAAE,CAAC;GACpD,YAAY,CA+CxB","sourcesContent":["import { modelOptions, prop, Ref } from '@typegoose/typegoose';\r\nimport { TimeStamps } from '@typegoose/typegoose/lib/defaultClasses';\r\nimport {\r\n\tPaidCurrency,\r\n\tPaymentMethod,\r\n\tPaymentStatus,\r\n\tSubscriptionPackage,\r\n\tSubscriptionStatus,\r\n} from '../../../utilities/enum';\r\nimport { CoreUser } from './core-user.model';\r\nimport { SubscriptionSummary } from './embedded/subscription-summary.model';\r\nimport { Duration } from './shared/duration.model';\r\nimport { Transaction } from './transaction.model';\r\n\r\n@modelOptions({ schemaOptions: { collection: 'subscriptions' } })\r\nexport class Subscription extends TimeStamps {\r\n\t@prop({ required: true, ref: () => CoreUser })\r\n\tpublic user!: Ref<CoreUser>;\r\n\r\n\t@prop({\r\n\t\ttype: String,\r\n\t\tenum: SubscriptionPackage,\r\n\t\tdefault: SubscriptionPackage.MONTHLY,\r\n\t})\r\n\tpublic package?: SubscriptionPackage;\r\n\r\n\t@prop({ required: true, type: Number })\r\n\tpublic fee!: number;\r\n\r\n\t@prop({ required: true, type: Number })\r\n\tpublic secondaryFee!: number;\r\n\r\n\t@prop({ type: SubscriptionSummary })\r\n\tpublic summary?: SubscriptionSummary;\r\n\r\n\t@prop({ required: true, type: Duration })\r\n\tpublic duration!: Duration;\r\n\r\n\t@prop({\r\n\t\ttype: String,\r\n\t\tenum: SubscriptionStatus,\r\n\t\tdefault: SubscriptionStatus.ONGOING,\r\n\t})\r\n\tpublic status?: SubscriptionStatus;\r\n\r\n\t@prop({ type: Boolean, default: true })\r\n\tpublic autoRenew?: boolean;\r\n\r\n\t@prop({ type: String })\r\n\tpublic cancelReason?: string;\r\n\r\n\t@prop({ required: true, type: String, enum: PaymentMethod })\r\n\tpublic paymentMethod!: PaymentMethod;\r\n\r\n\t@prop({ type: String, enum: PaymentStatus, default: PaymentStatus.PENDING })\r\n\tpublic paymentStatus?: PaymentStatus;\r\n\r\n\t@prop({ ref: () => Transaction, default: [] })\r\n\tpublic transactions?: Ref<Transaction>[];\r\n\r\n\t@prop({ type: String, enum: PaidCurrency, default: PaidCurrency.BASE })\r\n\tpublic paidCurrency?: PaidCurrency;\r\n}\r\n"]}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { ReturnModelType } from '@typegoose/typegoose';
|
|
2
1
|
import { ItemType, Status } from '../../../utilities/enum';
|
|
3
2
|
export declare class Tag {
|
|
4
3
|
name: string;
|
|
@@ -8,4 +7,3 @@ export declare class Tag {
|
|
|
8
7
|
isVisible?: boolean;
|
|
9
8
|
sortingOrder?: number;
|
|
10
9
|
}
|
|
11
|
-
export declare const TagModel: ReturnModelType<typeof Tag>;
|
|
@@ -9,7 +9,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.
|
|
12
|
+
exports.Tag = void 0;
|
|
13
13
|
const typegoose_1 = require("@typegoose/typegoose");
|
|
14
14
|
const enum_1 = require("../../../utilities/enum");
|
|
15
15
|
let Tag = class Tag {
|
|
@@ -48,5 +48,4 @@ __decorate([
|
|
|
48
48
|
exports.Tag = Tag = __decorate([
|
|
49
49
|
(0, typegoose_1.modelOptions)({ schemaOptions: { collection: 'tags' } })
|
|
50
50
|
], Tag);
|
|
51
|
-
exports.TagModel = (0, typegoose_1.getModelForClass)(Tag);
|
|
52
51
|
//# sourceMappingURL=tag.model.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tag.model.js","sourceRoot":"/","sources":["libraries/mongo/models/tag.model.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"tag.model.js","sourceRoot":"/","sources":["libraries/mongo/models/tag.model.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAA0D;AAC1D,kDAA2D;AAGpD,IAAM,GAAG,GAAT,MAAM,GAAG;IAER,IAAI,CAAU;IAGd,KAAK,CAAU;IAGf,QAAQ,CAAY;IAGpB,MAAM,CAAU;IAGhB,SAAS,CAAW;IAGpB,YAAY,CAAU;CAC7B,CAAA;AAlBY,kBAAG;AAER;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;iCAClB;AAGd;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;kCACD;AAGf;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAQ,EAAE,CAAC;;qCAC5B;AAGpB;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAM,EAAE,OAAO,EAAE,aAAM,CAAC,MAAM,EAAE,CAAC;;mCACtC;AAGhB;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;sCACZ;AAGpB;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;yCACN;cAjBjB,GAAG;IADf,IAAA,wBAAY,EAAC,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,CAAC;GAC3C,GAAG,CAkBf","sourcesContent":["import { modelOptions, prop } from '@typegoose/typegoose';\r\nimport { ItemType, Status } from '../../../utilities/enum';\r\n\r\n@modelOptions({ schemaOptions: { collection: 'tags' } })\r\nexport class Tag {\r\n\t@prop({ required: true, type: String })\r\n\tpublic name!: string;\r\n\r\n\t@prop({ type: String })\r\n\tpublic image?: string;\r\n\r\n\t@prop({ required: true, type: String, enum: ItemType })\r\n\tpublic itemType?: ItemType;\r\n\r\n\t@prop({ type: String, enum: Status, default: Status.ACTIVE })\r\n\tpublic status?: Status;\r\n\r\n\t@prop({ type: Boolean, default: true })\r\n\tpublic isVisible?: boolean;\r\n\r\n\t@prop({ type: Number, default: 0 })\r\n\tpublic sortingOrder?: number;\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.model.js","sourceRoot":"/","sources":["libraries/mongo/models/transaction.model.ts"],"names":[],"mappings":";;;AAAA,MAAa,WAAW;CAAG;AAA3B,kCAA2B","sourcesContent":["export class Transaction {}\
|
|
1
|
+
{"version":3,"file":"transaction.model.js","sourceRoot":"/","sources":["libraries/mongo/models/transaction.model.ts"],"names":[],"mappings":";;;AAAA,MAAa,WAAW;CAAG;AAA3B,kCAA2B","sourcesContent":["export class Transaction {}\n"]}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { ReturnModelType } from '@typegoose/typegoose';
|
|
2
1
|
import { TimeStamps } from '@typegoose/typegoose/lib/defaultClasses';
|
|
3
2
|
import { ZoneStatus } from '../../../utilities/enum';
|
|
4
3
|
import { ZoneGeometry } from './embedded/zone-geometry.mode';
|
|
@@ -12,4 +11,3 @@ export declare class Zone extends TimeStamps {
|
|
|
12
11
|
riderWeeklyTarget?: number;
|
|
13
12
|
riderWeeklyReward?: number;
|
|
14
13
|
}
|
|
15
|
-
export declare const ZoneModel: ReturnModelType<typeof Zone>;
|
|
@@ -9,7 +9,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.
|
|
12
|
+
exports.Zone = void 0;
|
|
13
13
|
const typegoose_1 = require("@typegoose/typegoose");
|
|
14
14
|
const defaultClasses_1 = require("@typegoose/typegoose/lib/defaultClasses");
|
|
15
15
|
const enum_1 = require("../../../utilities/enum");
|
|
@@ -60,5 +60,4 @@ __decorate([
|
|
|
60
60
|
exports.Zone = Zone = __decorate([
|
|
61
61
|
(0, typegoose_1.modelOptions)({ schemaOptions: { collection: 'zones' } })
|
|
62
62
|
], Zone);
|
|
63
|
-
exports.ZoneModel = (0, typegoose_1.getModelForClass)(Zone);
|
|
64
63
|
//# sourceMappingURL=zone.model.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zone.model.js","sourceRoot":"/","sources":["libraries/mongo/models/zone.model.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"zone.model.js","sourceRoot":"/","sources":["libraries/mongo/models/zone.model.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAA0D;AAC1D,4EAAqE;AACrE,kDAAqD;AACrD,sEAA6D;AAGtD,IAAM,IAAI,GAAV,MAAM,IAAK,SAAQ,2BAAU;IAE5B,QAAQ,CAAU;IAGlB,QAAQ,CAAU;IAGlB,YAAY,CAAgB;IAG5B,MAAM,CAAc;IAGpB,aAAa,CAAU;IAGvB,mBAAmB,CAAU;IAI7B,iBAAiB,CAAU;IAG3B,iBAAiB,CAAU;CAClC,CAAA;AAzBY,oBAAI;AAET;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;sCACd;AAGlB;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;sCACE;AAGlB;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,iCAAY,EAAE,CAAC;8BACvB,iCAAY;0CAAC;AAG5B;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAU,EAAE,OAAO,EAAE,iBAAU,CAAC,MAAM,EAAE,CAAC;;oCAC1C;AAGpB;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;2CACO;AAGvB;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;iDACa;AAI7B;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;+CACD;AAG3B;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;+CACD;eAxBtB,IAAI;IADhB,IAAA,wBAAY,EAAC,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;GAC5C,IAAI,CAyBhB","sourcesContent":["import { modelOptions, prop } from '@typegoose/typegoose';\r\nimport { TimeStamps } from '@typegoose/typegoose/lib/defaultClasses';\r\nimport { ZoneStatus } from '../../../utilities/enum';\r\nimport { ZoneGeometry } from './embedded/zone-geometry.mode';\r\n\r\n@modelOptions({ schemaOptions: { collection: 'zones' } })\r\nexport class Zone extends TimeStamps {\r\n\t@prop({ required: true, type: String })\r\n\tpublic zoneName!: string;\r\n\r\n\t@prop({ type: String })\r\n\tpublic zoneArea?: string;\r\n\r\n\t@prop({ required: true, type: ZoneGeometry })\r\n\tpublic zoneGeometry!: ZoneGeometry;\r\n\r\n\t@prop({ type: String, enum: ZoneStatus, default: ZoneStatus.ACTIVE })\r\n\tpublic status?: ZoneStatus;\r\n\r\n\t@prop({ type: String })\r\n\tpublic zoneBusyTitle?: string;\r\n\r\n\t@prop({ type: String })\r\n\tpublic zoneBusyDescription?: string;\r\n\r\n\t// Rider reward feature when he reached the target\r\n\t@prop({ type: Number, default: 0 })\r\n\tpublic riderWeeklyTarget?: number;\r\n\r\n\t@prop({ type: Number, default: 0 })\r\n\tpublic riderWeeklyReward?: number;\r\n}\r\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Schema, Model } from
|
|
2
|
-
import { ReturnModelType, mongoose } from
|
|
3
|
-
import { AnyParamConstructor } from
|
|
4
|
-
import { FilterDTO } from
|
|
1
|
+
import { Schema, Model } from 'mongoose';
|
|
2
|
+
import { ReturnModelType, mongoose } from '@typegoose/typegoose';
|
|
3
|
+
import { AnyParamConstructor } from '@typegoose/typegoose/lib/types';
|
|
4
|
+
import { FilterDTO } from '../../../utilities/validation';
|
|
5
5
|
export interface SoftDeleteModel<T> extends Model<T> {
|
|
6
6
|
softDelete(_id: mongoose.Types.ObjectId): Promise<any>;
|
|
7
7
|
softDeleteMany(filter?: FilterDTO): Promise<any>;
|
|
@@ -8,7 +8,7 @@ class SoftDeleteBase {
|
|
|
8
8
|
exports.SoftDeleteBase = SoftDeleteBase;
|
|
9
9
|
class SoftDelete {
|
|
10
10
|
static applyToSchema(schema) {
|
|
11
|
-
if (!schema.path(
|
|
11
|
+
if (!schema.path('deletedAt')) {
|
|
12
12
|
schema.add({
|
|
13
13
|
deletedAt: {
|
|
14
14
|
type: Date,
|
|
@@ -22,7 +22,7 @@ class SoftDelete {
|
|
|
22
22
|
this.addStaticMethods(schema);
|
|
23
23
|
}
|
|
24
24
|
static applyGlobally() {
|
|
25
|
-
const mongoose = require(
|
|
25
|
+
const mongoose = require('mongoose');
|
|
26
26
|
mongoose.plugin((schema) => this.applyToSchema(schema));
|
|
27
27
|
}
|
|
28
28
|
static createModel(modelClass) {
|
|
@@ -35,15 +35,15 @@ class SoftDelete {
|
|
|
35
35
|
this.where({ deletedAt: null });
|
|
36
36
|
}
|
|
37
37
|
};
|
|
38
|
-
schema.pre(
|
|
39
|
-
schema.pre(
|
|
40
|
-
schema.pre(
|
|
41
|
-
schema.pre(
|
|
42
|
-
schema.pre(
|
|
43
|
-
schema.pre(
|
|
44
|
-
schema.pre(
|
|
45
|
-
schema.pre(
|
|
46
|
-
schema.pre(
|
|
38
|
+
schema.pre('find', queryMiddleware);
|
|
39
|
+
schema.pre('findOne', queryMiddleware);
|
|
40
|
+
schema.pre('findOneAndUpdate', queryMiddleware);
|
|
41
|
+
schema.pre('findOneAndDelete', queryMiddleware);
|
|
42
|
+
schema.pre('findOneAndReplace', queryMiddleware);
|
|
43
|
+
schema.pre('updateOne', queryMiddleware);
|
|
44
|
+
schema.pre('updateMany', queryMiddleware);
|
|
45
|
+
schema.pre('count', queryMiddleware);
|
|
46
|
+
schema.pre('countDocuments', queryMiddleware);
|
|
47
47
|
schema.statics.findById = function (_id, projection, options) {
|
|
48
48
|
return this.findOne({ _id, deletedAt: null }, projection, options);
|
|
49
49
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"soft-delete-plugin.js","sourceRoot":"/","sources":["libraries/mongo/plugins/soft-delete-plugin.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"soft-delete-plugin.js","sourceRoot":"/","sources":["libraries/mongo/plugins/soft-delete-plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import { Schema, Query, Model } from 'mongoose';\r\nimport { getModelForClass, ReturnModelType, mongoose } from '@typegoose/typegoose';\r\nimport { AnyParamConstructor } from '@typegoose/typegoose/lib/types';\r\nimport { FilterDTO } from '../../../utilities/validation';\r\n\r\n/**\r\n * Interface for models with soft delete capabilities\r\n */\r\nexport interface SoftDeleteModel<T> extends Model<T> {\r\n\tsoftDelete(_id: mongoose.Types.ObjectId): Promise<any>;\r\n\tsoftDeleteMany(filter?: FilterDTO): Promise<any>;\r\n\trestore(_id: mongoose.Types.ObjectId): Promise<any>;\r\n\trestoreMany(filter?: FilterDTO): Promise<any>;\r\n\tfindWithDeleted(filter?: FilterDTO): any;\r\n\tfindDeleted(filter?: FilterDTO): any;\r\n}\r\n\r\n/**\r\n * Base class for models with soft delete functionality\r\n */\r\nexport class SoftDeleteBase {\r\n\tdeletedAt?: Date | null;\r\n}\r\n\r\n/**\r\n * SoftDelete class providing soft deletion functionality for mongoose models\r\n */\r\nexport class SoftDelete {\r\n\t/**\r\n\t * Apply soft delete plugin to a specific schema\r\n\t * @param schema Mongoose schema to enhance with soft delete functionality\r\n\t */\r\n\tpublic static applyToSchema(schema: Schema): void {\r\n\t\t// Add deletedAt field if it doesn't exist\r\n\t\tif (!schema.path('deletedAt')) {\r\n\t\t\tschema.add({\r\n\t\t\t\tdeletedAt: {\r\n\t\t\t\t\ttype: Date,\r\n\t\t\t\t\tdefault: null,\r\n\t\t\t\t\tindex: true,\r\n\t\t\t\t},\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t// Add schema middleware\r\n\t\tthis.addQueryMiddleware(schema);\r\n\r\n\t\t// Add instance methods\r\n\t\tthis.addInstanceMethods(schema);\r\n\r\n\t\t// Add static methods\r\n\t\tthis.addStaticMethods(schema);\r\n\t}\r\n\r\n\t/**\r\n\t * Apply soft delete plugin globally to all mongoose schemas\r\n\t */\r\n\tpublic static applyGlobally(): void {\r\n\t\tconst mongoose = require('mongoose');\r\n\t\tmongoose.plugin((schema: Schema) => this.applyToSchema(schema));\r\n\t}\r\n\r\n\t/**\r\n\t * Create a model with soft delete capabilities and proper TypeScript types\r\n\t * @param modelClass The class to create a model from\r\n\t * @returns A model with soft delete functionality\r\n\t */\r\n\tpublic static createModel<T extends SoftDeleteBase>(\r\n\t\tmodelClass: AnyParamConstructor<T>\r\n\t): SoftDeleteModel<T> & ReturnModelType<AnyParamConstructor<T>> {\r\n\t\tconst model = getModelForClass(modelClass);\r\n\t\treturn model as any; // The plugin adds the methods, we just need to tell TypeScript they exist\r\n\t}\r\n\r\n\t/**\r\n\t * Add query middleware to filter out soft-deleted documents\r\n\t * @param schema Schema to add middleware to\r\n\t */\r\n\tprivate static addQueryMiddleware(schema: Schema): void {\r\n\t\tconst queryMiddleware = function (this: Query<any, any>) {\r\n\t\t\tif (!this.getQuery().deletedAt) {\r\n\t\t\t\tthis.where({ deletedAt: null });\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Apply middleware to relevant query methods\r\n\t\tschema.pre('find', queryMiddleware);\r\n\t\tschema.pre('findOne', queryMiddleware);\r\n\t\tschema.pre('findOneAndUpdate', queryMiddleware);\r\n\t\tschema.pre('findOneAndDelete', queryMiddleware);\r\n\t\tschema.pre('findOneAndReplace', queryMiddleware);\r\n\t\tschema.pre('updateOne', queryMiddleware);\r\n\t\tschema.pre('updateMany', queryMiddleware);\r\n\t\t// TypeScript workaround for count hook\r\n\t\t(schema as any).pre('count', queryMiddleware);\r\n\t\tschema.pre('countDocuments', queryMiddleware);\r\n\r\n\t\t// Override findById to respect soft delete\r\n\t\tschema.statics.findById = function (_id: mongoose.Types.ObjectId, projection?: any, options?: any) {\r\n\t\t\treturn this.findOne({ _id, deletedAt: null }, projection, options);\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Add instance methods for soft delete operations\r\n\t * @param schema Schema to add methods to\r\n\t */\r\n\tprivate static addInstanceMethods(schema: Schema): void {\r\n\t\tschema.methods.softDelete = function () {\r\n\t\t\tthis.deletedAt = new Date();\r\n\t\t\treturn this.save();\r\n\t\t};\r\n\r\n\t\tschema.methods.restore = function () {\r\n\t\t\tthis.deletedAt = null;\r\n\t\t\treturn this.save();\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Add static methods for soft delete operations\r\n\t * @param schema Schema to add methods to\r\n\t */\r\n\tprivate static addStaticMethods(schema: Schema): void {\r\n\t\tschema.statics.softDelete = async function (_id: mongoose.Types.ObjectId) {\r\n\t\t\tconst result = await this.updateOne({ _id }, { deletedAt: new Date() });\r\n\t\t\treturn result.modifiedCount > 0;\r\n\t\t};\r\n\r\n\t\tschema.statics.softDeleteMany = function (filter = {}) {\r\n\t\t\treturn this.updateMany(filter, { deletedAt: new Date() });\r\n\t\t};\r\n\r\n\t\tschema.statics.restore = function (_id: mongoose.Types.ObjectId) {\r\n\t\t\treturn this.updateOne({ _id }, { deletedAt: null });\r\n\t\t};\r\n\r\n\t\tschema.statics.restoreMany = function (filter = {}) {\r\n\t\t\treturn this.updateMany(filter, { deletedAt: null });\r\n\t\t};\r\n\r\n\t\tschema.statics.findWithDeleted = function (filter = {}) {\r\n\t\t\treturn this.find(filter);\r\n\t\t};\r\n\r\n\t\tschema.statics.findDeleted = function (filter = {}) {\r\n\t\t\treturn this.find({ ...filter, deletedAt: { $ne: null } });\r\n\t\t};\r\n\t}\r\n}\r\n\r\n// Export convenience functions with the same names as before for backward compatibility\r\nexport const softDeletePlugin = (schema: Schema): void => SoftDelete.applyToSchema(schema);\r\nexport const applySoftDeletePlugin = (): void => SoftDelete.applyGlobally();\r\nexport const createSoftDeleteModel = <T extends SoftDeleteBase>(\r\n\tmodelClass: AnyParamConstructor<T>\r\n): SoftDeleteModel<T> & ReturnModelType<AnyParamConstructor<T>> => SoftDelete.createModel(modelClass);\r\n"]}
|
|
@@ -61,7 +61,10 @@ let RedisService = class RedisService {
|
|
|
61
61
|
return true;
|
|
62
62
|
}
|
|
63
63
|
sanitizeKey(key) {
|
|
64
|
-
return key
|
|
64
|
+
return key
|
|
65
|
+
.replace(/[^\w\s]/gi, '')
|
|
66
|
+
.replace(/\s+/g, '-')
|
|
67
|
+
.toLowerCase();
|
|
65
68
|
}
|
|
66
69
|
};
|
|
67
70
|
exports.RedisService = RedisService;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"/","sources":["libraries/redis/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"/","sources":["libraries/redis/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,sDAA4B;AAC5B,mCAAiC;AAG1B,IAAM,YAAY,GAAlB,MAAM,YAAY;IAChB,YAAY,CAAS;IAE7B,YAAY,QAAgB;QAC3B,IAAI,CAAC,YAAY,GAAG,IAAI,iBAAK,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,WAAW;QACd,OAAO,IAAI,CAAC,YAAY,CAAC;IAC1B,CAAC;IAEM,KAAK,CAAC,eAAe,CAAI,GAAW;QAC1C,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEvD,IAAI,aAAa,IAAI,SAAS,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAM,CAAC;QACvC,CAAC;QAED,OAAO,SAAS,CAAC;IAClB,CAAC;IAEM,KAAK,CAAC,WAAW,CAAI,GAAW,EAAE,MAAS,EAAE,MAAe;QAClE,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAEjD,IAAI,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACP,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,KAAK,CAAC,kBAAkB,CAAC,GAAW;QAC1C,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,KAAK,CAAC,sBAAsB,CAAI,KAAa,EAAE,GAAW;QAChE,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAE/D,IAAI,aAAa,IAAI,SAAS,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAM,CAAC;QACvC,CAAC;QAED,OAAO,SAAS,CAAC;IAClB,CAAC;IAEM,KAAK,CAAC,sBAAsB,CAAI,KAAa,EAAE,GAAW,EAAE,MAAS;QAC3E,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC;QAE5D,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,KAAK,CAAC,yBAAyB,CAAI,KAAa,EAAE,GAAW;QACnE,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,WAAW,CAAC,GAAW;QAC7B,OAAO,GAAG;aACR,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;aACxB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;aACpB,WAAW,EAAE,CAAC;IACjB,CAAC;CACD,CAAA;AAlEY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,gBAAO,GAAE;;GACG,YAAY,CAkExB","sourcesContent":["import Redis from 'ioredis';\r\nimport { Service } from 'typedi';\r\n\r\n@Service()\r\nexport class RedisService {\r\n\tprivate _redisClient!: Redis;\r\n\r\n\tconstructor(redisURL: string) {\r\n\t\tthis._redisClient = new Redis(redisURL);\r\n\t}\r\n\r\n\tget redisClient(): Redis {\r\n\t\treturn this._redisClient;\r\n\t}\r\n\r\n\tpublic async getCachedObject<T>(key: string): Promise<T | undefined> {\r\n\t\tconst usageResponse = await this._redisClient.get(key);\r\n\r\n\t\tif (usageResponse != undefined) {\r\n\t\t\treturn JSON.parse(usageResponse) as T;\r\n\t\t}\r\n\r\n\t\treturn undefined;\r\n\t}\r\n\r\n\tpublic async cacheObject<T>(key: string, object: T, expiry?: number): Promise<boolean> {\r\n\t\tconst stringifiedObject = JSON.stringify(object);\r\n\r\n\t\tif (expiry) {\r\n\t\t\tawait this._redisClient.setex(key, expiry, stringifiedObject);\r\n\t\t} else {\r\n\t\t\tawait this._redisClient.set(key, stringifiedObject);\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\tpublic async deleteCachedObject(key: string): Promise<boolean> {\r\n\t\tawait this._redisClient.del(key);\r\n\t\treturn true;\r\n\t}\r\n\r\n\tpublic async getCachedObjectByGroup<T>(group: string, key: string): Promise<T | undefined> {\r\n\t\tconst usageResponse = await this._redisClient.hget(group, key);\r\n\r\n\t\tif (usageResponse != undefined) {\r\n\t\t\treturn JSON.parse(usageResponse) as T;\r\n\t\t}\r\n\r\n\t\treturn undefined;\r\n\t}\r\n\r\n\tpublic async setCachedObjectByGroup<T>(group: string, key: string, object: T): Promise<boolean> {\r\n\t\tconst stringifiedObject = JSON.stringify(object);\r\n\t\tawait this._redisClient.hset(group, key, stringifiedObject);\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\tpublic async deleteCachedObjectByGroup<T>(group: string, key: string): Promise<boolean> {\r\n\t\tawait this._redisClient.hdel(group, key);\r\n\t\treturn true;\r\n\t}\r\n\r\n\tpublic sanitizeKey(key: string) {\r\n\t\treturn key\r\n\t\t\t.replace(/[^\\w\\s]/gi, '')\r\n\t\t\t.replace(/\\s+/g, '-')\r\n\t\t\t.toLowerCase();\r\n\t}\r\n}\r\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { RedisService } from
|
|
2
|
-
import { ConfigurationService } from
|
|
1
|
+
import { RedisService } from '../redis';
|
|
2
|
+
import { ConfigurationService } from '../configuration';
|
|
3
3
|
export declare class SecretManagerService {
|
|
4
4
|
private _configurationService;
|
|
5
5
|
private _redisManager;
|
|
@@ -23,26 +23,26 @@ let SecretManagerService = class SecretManagerService {
|
|
|
23
23
|
this._redisManager = redisManager;
|
|
24
24
|
this._client = new secret_manager_1.SecretManagerServiceClient({
|
|
25
25
|
credentials: {
|
|
26
|
-
client_id:
|
|
27
|
-
private_key_id:
|
|
28
|
-
type:
|
|
29
|
-
universe_domain:
|
|
30
|
-
projectId:
|
|
31
|
-
private_key:
|
|
32
|
-
client_email:
|
|
33
|
-
}
|
|
26
|
+
client_id: '107840895824406590900',
|
|
27
|
+
private_key_id: 'ece1ebdfde57414700f23f1f4014f5e83d4f7644',
|
|
28
|
+
type: 'service_account',
|
|
29
|
+
universe_domain: 'googleapis.com',
|
|
30
|
+
projectId: 'for-poc-325210',
|
|
31
|
+
private_key: '-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDPTk9M5nCDYJhC\nLuyP+gqBXIHPrXegygco5tB50Y7Q9s/f4hm+xp/usYy5UCYyFVNjZ2mdjWQcr3Ta\nT3GZV9OiHej8ejveY0iyFBi0IlfGNm9blYlOIyQT4i6MoevNul7u4EQL8bid/sp/\nJ/XPNC+Jnk8Ke2G9FdfDYs+1O6Nf37HuPUmMwLAzcyl+k1v9UzInrgNPj+nactY7\nEPCVSM6XcZI3UL86n574iQBvUXsMpUt3csYVOxPap1Vd1TBEo1k85jZepMvaXHoK\nJUwQT7p1F1D0weVKJ1BjwQgmADZWfUKdwRyS8zFPbUGeptlA2XlxyVMasGzCCMi4\n6jzJGC81AgMBAAECggEAXoaLnDn7Fbym0I7K6T+PKLtAqaykPpnAOAM/DjzijR/t\nW12idZ3l8RXeX+VO9UlKE6pkuyVsf7P1aVIOL2ifpG1U/kLSJ65HyINnXEPImCXc\nEvuVdx6I5dQde5ydg9o2TV/PR0756njyZpaW+9sEzhB0ZAgsYeai0oGsyiuebCkm\nqlOnf5DO/kWlNvf8yZ7GMEa0WBYyan4O7YcVF13c7oM19XZfvw+lliU/geOwVNW5\nEfSn91UWIEMB60Q5XKHg11LAvbq8mvcHD+6ujeoPMfoZJrHZj5ucBP5auyRNFCUM\nWE2IILLpgdhDfE5I323xHIyMblMSc1OOkZzjhuNYRQKBgQDuEa/jMqEDu7ZpDo/g\nf+M4Qmmyh1WIjnORwqbf8INi5oN1NoIv6tcJ++COAWcBpyerW9aknLRMX9FXrNH5\nAPyRvHQt2IpRCqjdcEr2b3VwZmcjRVbpsISwqE0RBvXSXOnvbDzZ53bC70anL5OY\n7UYwOotbQXpcEGC57wy8G+VVlwKBgQDe63bcubV1W2+WPbdtzb7tzIS5PPz19U5i\n5PjVQ4E34FH0ZBnk2v1fjtVxR72mrzCg2xz72rWgdsHJ/1QZAfw+4troJV9LI9SG\nYRMeh86NSfNObdkY+LmCSH4eiFe83kFLUUzhnYE6DU/17i6T4V+ofawToasu3wag\nf7LzT2BzEwKBgQDlVD5lktDOQtWtj+yC607bVAZzhrCbUfX8FFEh6ZL3A2zgzXhN\nZmBtaqfew3URf47UICy894MrCyYi2gSOZCfoz2vu+egLt0QBw/lCOQ4dD1gM/u+B\nP5wifI14eIb2dLCZBV/83F5n24zo4gjBSNfS/6Jcbs/KvbAfjCptTkX10wKBgDxb\nwy5WtlRVcqxaf50ilWzr8I/7fH7YceYDG4EbKxTHD0m+BOjbhrlmAlMO2sIUM3WK\nfpmPCZiuLyCTmuC+kd8xK5ap79h3libgh/2/ReUpvdBhm+PQDOLC4CtCPYdtIn7T\nP57jN8dRLXJokIIIBw+nH32dS62AQ9oXWYvZ1UKzAoGBAOWOSphZMnPlLeLN54/4\nwKPI+D6G1JhzqQrUf8Z99J7m3r3ya+0ug5gRGQCoSRfqz9o87+fLCdSdc38L+j4T\nBnuwIcY6n4LF+3yAPIF1rnrIBFRqzPta7epYPXHtUTvWOkEkKzNmsFVCZKF7nQjS\ns/ucyyfUssPsTznYW3gXf3To\n-----END PRIVATE KEY-----\n',
|
|
32
|
+
client_email: 'lyxa-core@for-poc-325210.iam.gserviceaccount.com',
|
|
33
|
+
},
|
|
34
34
|
});
|
|
35
35
|
}
|
|
36
36
|
async getKey(key) {
|
|
37
|
-
const environmentTransformedKey = this._configurationService.options.environment +
|
|
38
|
-
console.log(
|
|
37
|
+
const environmentTransformedKey = this._configurationService.options.environment + '_' + key;
|
|
38
|
+
console.log('Attempting to fetch the following secret key: ' + environmentTransformedKey);
|
|
39
39
|
try {
|
|
40
|
-
const data = await this._redisManager.getCachedObjectByGroup(this._configurationService.options.environment +
|
|
40
|
+
const data = await this._redisManager.getCachedObjectByGroup(this._configurationService.options.environment + '_KEYS', key);
|
|
41
41
|
if (data != undefined) {
|
|
42
42
|
return data;
|
|
43
43
|
}
|
|
44
44
|
const [accessResponse] = await this._client.accessSecretVersion({
|
|
45
|
-
name:
|
|
45
|
+
name: 'projects/899369746265/secrets/' + environmentTransformedKey + '/versions/latest',
|
|
46
46
|
});
|
|
47
47
|
const val = accessResponse.payload.data.toString();
|
|
48
48
|
await this.setKey(key, val);
|
|
@@ -53,7 +53,7 @@ let SecretManagerService = class SecretManagerService {
|
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
async setKey(key, value) {
|
|
56
|
-
await this._redisManager.setCachedObjectByGroup(this._configurationService.options.environment +
|
|
56
|
+
await this._redisManager.setCachedObjectByGroup(this._configurationService.options.environment + '_KEYS', key, value);
|
|
57
57
|
return value;
|
|
58
58
|
}
|
|
59
59
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"/","sources":["libraries/secrets/index.ts"],"names":[],"mappings":";;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"/","sources":["libraries/secrets/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iEAA0E;AAC1E,mCAAiC;AACjC,oCAAwC;AACxC,oDAAwD;AAGjD,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IACxB,qBAAqB,CAAwB;IAC7C,aAAa,CAAgB;IAC7B,OAAO,CAA8B;IAE7C,YAAY,oBAA0C,EAAE,YAA0B;QACjF,IAAI,CAAC,qBAAqB,GAAG,oBAAoB,CAAC;QAClD,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,IAAI,2CAA0B,CAAC;YAC7C,WAAW,EAAE;gBACZ,SAAS,EAAE,uBAAuB;gBAClC,cAAc,EAAE,0CAA0C;gBAC1D,IAAI,EAAE,iBAAiB;gBACvB,eAAe,EAAE,gBAAgB;gBACjC,SAAS,EAAE,gBAAgB;gBAC3B,WAAW,EACV,ssDAAssD;gBACvsD,YAAY,EAAE,kDAAkD;aAChE;SACD,CAAC,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,GAAW;QAC9B,MAAM,yBAAyB,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,WAAW,GAAG,GAAG,GAAG,GAAG,CAAC;QAE7F,OAAO,CAAC,GAAG,CAAC,gDAAgD,GAAG,yBAAyB,CAAC,CAAC;QAE1F,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAC3D,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,WAAW,GAAG,OAAO,EACxD,GAAG,CACH,CAAC;YAEF,IAAI,IAAI,IAAI,SAAS,EAAE,CAAC;gBACvB,OAAO,IAAI,CAAC;YACb,CAAC;YAED,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC;gBAC/D,IAAI,EAAE,gCAAgC,GAAG,yBAAyB,GAAG,kBAAkB;aACvF,CAAC,CAAC;YAEH,MAAM,GAAG,GAAG,cAAc,CAAC,OAAQ,CAAC,IAAK,CAAC,QAAQ,EAAE,CAAC;YACrD,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAE5B,OAAO,GAAG,CAAC;QACZ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACF,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,GAAW,EAAE,KAAa;QAC7C,MAAM,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAC9C,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,WAAW,GAAG,OAAO,EACxD,GAAG,EACH,KAAK,CACL,CAAC;QACF,OAAO,KAAK,CAAC;IACd,CAAC;CACD,CAAA;AA1DY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,gBAAO,GAAE;qCAMyB,oCAAoB,EAAgB,oBAAY;GALtE,oBAAoB,CA0DhC","sourcesContent":["import { SecretManagerServiceClient } from '@google-cloud/secret-manager';\r\nimport { Service } from 'typedi';\r\nimport { RedisService } from '../redis';\r\nimport { ConfigurationService } from '../configuration';\r\n\r\n@Service()\r\nexport class SecretManagerService {\r\n\tprivate _configurationService!: ConfigurationService;\r\n\tprivate _redisManager!: RedisService;\r\n\tprivate _client!: SecretManagerServiceClient;\r\n\r\n\tconstructor(configurationService: ConfigurationService, redisManager: RedisService) {\r\n\t\tthis._configurationService = configurationService;\r\n\t\tthis._redisManager = redisManager;\r\n\t\tthis._client = new SecretManagerServiceClient({\r\n\t\t\tcredentials: {\r\n\t\t\t\tclient_id: '107840895824406590900',\r\n\t\t\t\tprivate_key_id: 'ece1ebdfde57414700f23f1f4014f5e83d4f7644',\r\n\t\t\t\ttype: 'service_account',\r\n\t\t\t\tuniverse_domain: 'googleapis.com',\r\n\t\t\t\tprojectId: 'for-poc-325210',\r\n\t\t\t\tprivate_key:\r\n\t\t\t\t\t'-----BEGIN PRIVATE KEY-----\\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDPTk9M5nCDYJhC\\nLuyP+gqBXIHPrXegygco5tB50Y7Q9s/f4hm+xp/usYy5UCYyFVNjZ2mdjWQcr3Ta\\nT3GZV9OiHej8ejveY0iyFBi0IlfGNm9blYlOIyQT4i6MoevNul7u4EQL8bid/sp/\\nJ/XPNC+Jnk8Ke2G9FdfDYs+1O6Nf37HuPUmMwLAzcyl+k1v9UzInrgNPj+nactY7\\nEPCVSM6XcZI3UL86n574iQBvUXsMpUt3csYVOxPap1Vd1TBEo1k85jZepMvaXHoK\\nJUwQT7p1F1D0weVKJ1BjwQgmADZWfUKdwRyS8zFPbUGeptlA2XlxyVMasGzCCMi4\\n6jzJGC81AgMBAAECggEAXoaLnDn7Fbym0I7K6T+PKLtAqaykPpnAOAM/DjzijR/t\\nW12idZ3l8RXeX+VO9UlKE6pkuyVsf7P1aVIOL2ifpG1U/kLSJ65HyINnXEPImCXc\\nEvuVdx6I5dQde5ydg9o2TV/PR0756njyZpaW+9sEzhB0ZAgsYeai0oGsyiuebCkm\\nqlOnf5DO/kWlNvf8yZ7GMEa0WBYyan4O7YcVF13c7oM19XZfvw+lliU/geOwVNW5\\nEfSn91UWIEMB60Q5XKHg11LAvbq8mvcHD+6ujeoPMfoZJrHZj5ucBP5auyRNFCUM\\nWE2IILLpgdhDfE5I323xHIyMblMSc1OOkZzjhuNYRQKBgQDuEa/jMqEDu7ZpDo/g\\nf+M4Qmmyh1WIjnORwqbf8INi5oN1NoIv6tcJ++COAWcBpyerW9aknLRMX9FXrNH5\\nAPyRvHQt2IpRCqjdcEr2b3VwZmcjRVbpsISwqE0RBvXSXOnvbDzZ53bC70anL5OY\\n7UYwOotbQXpcEGC57wy8G+VVlwKBgQDe63bcubV1W2+WPbdtzb7tzIS5PPz19U5i\\n5PjVQ4E34FH0ZBnk2v1fjtVxR72mrzCg2xz72rWgdsHJ/1QZAfw+4troJV9LI9SG\\nYRMeh86NSfNObdkY+LmCSH4eiFe83kFLUUzhnYE6DU/17i6T4V+ofawToasu3wag\\nf7LzT2BzEwKBgQDlVD5lktDOQtWtj+yC607bVAZzhrCbUfX8FFEh6ZL3A2zgzXhN\\nZmBtaqfew3URf47UICy894MrCyYi2gSOZCfoz2vu+egLt0QBw/lCOQ4dD1gM/u+B\\nP5wifI14eIb2dLCZBV/83F5n24zo4gjBSNfS/6Jcbs/KvbAfjCptTkX10wKBgDxb\\nwy5WtlRVcqxaf50ilWzr8I/7fH7YceYDG4EbKxTHD0m+BOjbhrlmAlMO2sIUM3WK\\nfpmPCZiuLyCTmuC+kd8xK5ap79h3libgh/2/ReUpvdBhm+PQDOLC4CtCPYdtIn7T\\nP57jN8dRLXJokIIIBw+nH32dS62AQ9oXWYvZ1UKzAoGBAOWOSphZMnPlLeLN54/4\\nwKPI+D6G1JhzqQrUf8Z99J7m3r3ya+0ug5gRGQCoSRfqz9o87+fLCdSdc38L+j4T\\nBnuwIcY6n4LF+3yAPIF1rnrIBFRqzPta7epYPXHtUTvWOkEkKzNmsFVCZKF7nQjS\\ns/ucyyfUssPsTznYW3gXf3To\\n-----END PRIVATE KEY-----\\n',\r\n\t\t\t\tclient_email: 'lyxa-core@for-poc-325210.iam.gserviceaccount.com',\r\n\t\t\t},\r\n\t\t});\r\n\t}\r\n\r\n\tpublic async getKey(key: string): Promise<string | undefined> {\r\n\t\tconst environmentTransformedKey = this._configurationService.options.environment + '_' + key;\r\n\r\n\t\tconsole.log('Attempting to fetch the following secret key: ' + environmentTransformedKey);\r\n\r\n\t\ttry {\r\n\t\t\tconst data = await this._redisManager.getCachedObjectByGroup<string>(\r\n\t\t\t\tthis._configurationService.options.environment + '_KEYS',\r\n\t\t\t\tkey\r\n\t\t\t);\r\n\r\n\t\t\tif (data != undefined) {\r\n\t\t\t\treturn data;\r\n\t\t\t}\r\n\r\n\t\t\tconst [accessResponse] = await this._client.accessSecretVersion({\r\n\t\t\t\tname: 'projects/899369746265/secrets/' + environmentTransformedKey + '/versions/latest',\r\n\t\t\t});\r\n\r\n\t\t\tconst val = accessResponse.payload!.data!.toString();\r\n\t\t\tawait this.setKey(key, val);\r\n\r\n\t\t\treturn val;\r\n\t\t} catch (e) {\r\n\t\t\tconsole.error(e);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic async setKey(key: string, value: string): Promise<string> {\r\n\t\tawait this._redisManager.setCachedObjectByGroup<string>(\r\n\t\t\tthis._configurationService.options.environment + '_KEYS',\r\n\t\t\tkey,\r\n\t\t\tvalue\r\n\t\t);\r\n\t\treturn value;\r\n\t}\r\n}\r\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { CreateHTTPContextOptions } from
|
|
2
|
-
import { AuthEntityType } from
|
|
3
|
-
import jwt from
|
|
4
|
-
import { TokenType } from
|
|
1
|
+
import { CreateHTTPContextOptions } from '@trpc/server/dist/adapters/standalone';
|
|
2
|
+
import { AuthEntityType } from '../auth';
|
|
3
|
+
import jwt from 'jsonwebtoken';
|
|
4
|
+
import { TokenType } from '../auth';
|
|
5
5
|
export interface EntityContext extends jwt.JwtPayload {
|
|
6
6
|
id: string;
|
|
7
7
|
type: AuthEntityType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"/","sources":["libraries/trpc/context.ts"],"names":[],"mappings":";;;AAmBO,MAAM,iBAAiB,GAAG,KAAK,
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"/","sources":["libraries/trpc/context.ts"],"names":[],"mappings":";;;AAmBO,MAAM,iBAAiB,GAAG,KAAK,EACrC,IAA8B,EAC0B,EAAE;IAC1D,OAAO;QACN,GAAG,IAAI;QACP,MAAM,EAAE,SAAS;QACjB,SAAS,EAAE,SAAS;QACpB,SAAS,EAAE,SAAS;QACpB,gBAAgB,EAAE,KAAK;QACvB,YAAY,EAAE,KAAK;KACnB,CAAC;AACH,CAAC,CAAC;AAXW,QAAA,iBAAiB,qBAW5B","sourcesContent":["import { CreateHTTPContextOptions } from '@trpc/server/dist/adapters/standalone';\r\nimport { AuthEntityType } from '../auth';\r\nimport jwt from 'jsonwebtoken';\r\nimport { TokenType } from '../auth';\r\n\r\nexport interface EntityContext extends jwt.JwtPayload {\r\n\tid: string;\r\n\ttype: AuthEntityType;\r\n\tparameters: Record<string, unknown>;\r\n}\r\n\r\nexport interface LyxaContextParams {\r\n\tentity?: EntityContext;\r\n\trequestId?: string;\r\n\ttokenType?: TokenType;\r\n\tusedRefreshToken?: boolean;\r\n\ttokenRenewed?: boolean;\r\n}\r\n\r\nexport const createLyxaContext = async (\r\n\topts: CreateHTTPContextOptions\r\n): Promise<CreateHTTPContextOptions & LyxaContextParams> => {\r\n\treturn {\r\n\t\t...opts,\r\n\t\tentity: undefined,\r\n\t\trequestId: undefined,\r\n\t\ttokenType: undefined,\r\n\t\tusedRefreshToken: false,\r\n\t\ttokenRenewed: false,\r\n\t};\r\n};\r\n\r\nexport type LyxaContext = Awaited<ReturnType<typeof createLyxaContext>>;\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"/","sources":["libraries/trpc/index.ts"],"names":[],"mappings":";;;AAAA,yCAAwC;AAG3B,QAAA,CAAC,GAAG,iBAAQ,CAAC,OAAO,EAAe,CAAC,MAAM,EAAE,CAAC;AAE7C,QAAA,eAAe,GAAG,SAAC,CAAC,SAAS,CAAC;AAC9B,QAAA,gBAAgB,GAAG,SAAC,CAAC,MAAM,CAAC;AAC5B,QAAA,mBAAmB,GAAG,SAAC,CAAC,mBAAmB,CAAC","sourcesContent":["import { initTRPC } from '@trpc/server';\r\nimport {LyxaContext} from
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"/","sources":["libraries/trpc/index.ts"],"names":[],"mappings":";;;AAAA,yCAAwC;AAG3B,QAAA,CAAC,GAAG,iBAAQ,CAAC,OAAO,EAAe,CAAC,MAAM,EAAE,CAAC;AAE7C,QAAA,eAAe,GAAG,SAAC,CAAC,SAAS,CAAC;AAC9B,QAAA,gBAAgB,GAAG,SAAC,CAAC,MAAM,CAAC;AAC5B,QAAA,mBAAmB,GAAG,SAAC,CAAC,mBAAmB,CAAC","sourcesContent":["import { initTRPC } from '@trpc/server';\r\nimport { LyxaContext } from './context';\r\n\r\nexport const t = initTRPC.context<LyxaContext>().create();\r\n\r\nexport const publicProcedure = t.procedure;\r\nexport const createTRPCRouter = t.router;\r\nexport const createCallerFactory = t.createCallerFactory;\r\n"]}
|
|
@@ -7,17 +7,18 @@ const auth_1 = require("../../auth");
|
|
|
7
7
|
function createAuthenticatedProcedure(options) {
|
|
8
8
|
const { entityTypes, allowRefreshToken = true, autoRefresh = true } = options;
|
|
9
9
|
return index_1.publicProcedure.use(async ({ ctx, next }) => {
|
|
10
|
-
const authHeader = ctx.req.headers[
|
|
11
|
-
const refreshTokenHeader = ctx.req.headers[
|
|
10
|
+
const authHeader = ctx.req.headers['authorization'];
|
|
11
|
+
const refreshTokenHeader = ctx.req.headers['x-refresh-token'];
|
|
12
12
|
if (!authHeader) {
|
|
13
|
-
throw new server_1.TRPCError({ code:
|
|
13
|
+
throw new server_1.TRPCError({ code: 'UNAUTHORIZED', message: 'No authorization header' });
|
|
14
14
|
}
|
|
15
15
|
const accessToken = authHeader.replace(/^Bearer\s+/, '');
|
|
16
|
-
let refreshToken =
|
|
16
|
+
let refreshToken = '';
|
|
17
17
|
if (refreshTokenHeader) {
|
|
18
|
-
refreshToken =
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
refreshToken =
|
|
19
|
+
typeof refreshTokenHeader === 'string'
|
|
20
|
+
? refreshTokenHeader.replace(/^Bearer\s+/, '')
|
|
21
|
+
: refreshTokenHeader[0].replace(/^Bearer\s+/, '');
|
|
21
22
|
}
|
|
22
23
|
if (!accessToken) {
|
|
23
24
|
throw new server_1.TRPCError({ code: 'UNAUTHORIZED', message: 'Missing access token' });
|
|
@@ -33,23 +34,21 @@ function createAuthenticatedProcedure(options) {
|
|
|
33
34
|
if (!allowRefreshToken || !refreshToken) {
|
|
34
35
|
throw new server_1.TRPCError({
|
|
35
36
|
code: 'UNAUTHORIZED',
|
|
36
|
-
message: 'Invalid access token'
|
|
37
|
+
message: 'Invalid access token',
|
|
37
38
|
});
|
|
38
39
|
}
|
|
39
40
|
const renewalResult = await (0, auth_1.handleTokenRenewal)(refreshToken);
|
|
40
41
|
if (!renewalResult.success) {
|
|
41
|
-
const errorMessage = renewalResult.tokenStatus === 'revoked'
|
|
42
|
-
? 'Refresh token has been revoked'
|
|
43
|
-
: 'Invalid refresh token';
|
|
42
|
+
const errorMessage = renewalResult.tokenStatus === 'revoked' ? 'Refresh token has been revoked' : 'Invalid refresh token';
|
|
44
43
|
throw new server_1.TRPCError({
|
|
45
44
|
code: 'UNAUTHORIZED',
|
|
46
|
-
message: errorMessage
|
|
45
|
+
message: errorMessage,
|
|
47
46
|
});
|
|
48
47
|
}
|
|
49
48
|
if (!entityTypes.includes(renewalResult.entity.type)) {
|
|
50
49
|
throw new server_1.TRPCError({
|
|
51
50
|
code: 'UNAUTHORIZED',
|
|
52
|
-
message: 'Unauthorized entity type'
|
|
51
|
+
message: 'Unauthorized entity type',
|
|
53
52
|
});
|
|
54
53
|
}
|
|
55
54
|
ctx.entity = renewalResult.entity;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"/","sources":["libraries/trpc/middlewares/auth.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"/","sources":["libraries/trpc/middlewares/auth.ts"],"names":[],"mappings":"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","sourcesContent":["import { TRPCError } from '@trpc/server';\r\nimport { publicProcedure } from '../index';\r\nimport {\r\n\tAuthEntityType,\r\n\tverifyAccessToken,\r\n\tvalidateRefreshToken,\r\n\tsignAccessToken,\r\n\tTokenType,\r\n\trefreshTokens,\r\n\thandleTokenRenewal,\r\n} from '../../auth';\r\n\r\ninterface AuthOptions {\r\n\tentityTypes: AuthEntityType[];\r\n\tallowRefreshToken?: boolean;\r\n\tautoRefresh?: boolean;\r\n}\r\n\r\n/**\r\n * A factory that creates an authenticated procedure, optionally allowing\r\n * refresh tokens and auto-refreshing expired access tokens.\r\n */\r\nexport function createAuthenticatedProcedure(options: AuthOptions) {\r\n\tconst { entityTypes, allowRefreshToken = true, autoRefresh = true } = options;\r\n\r\n\treturn publicProcedure.use(async ({ ctx, next }) => {\r\n\t\tconst authHeader = ctx.req.headers['authorization'];\r\n\t\tconst refreshTokenHeader = ctx.req.headers['x-refresh-token'];\r\n\r\n\t\tif (!authHeader) {\r\n\t\t\tthrow new TRPCError({ code: 'UNAUTHORIZED', message: 'No authorization header' });\r\n\t\t}\r\n\r\n\t\tconst accessToken = authHeader.replace(/^Bearer\\s+/, '');\r\n\t\tlet refreshToken = '';\r\n\r\n\t\tif (refreshTokenHeader) {\r\n\t\t\trefreshToken =\r\n\t\t\t\ttypeof refreshTokenHeader === 'string'\r\n\t\t\t\t\t? refreshTokenHeader.replace(/^Bearer\\s+/, '')\r\n\t\t\t\t\t: refreshTokenHeader[0].replace(/^Bearer\\s+/, '');\r\n\t\t}\r\n\r\n\t\tif (!accessToken) {\r\n\t\t\tthrow new TRPCError({ code: 'UNAUTHORIZED', message: 'Missing access token' });\r\n\t\t}\r\n\r\n\t\tlet entity = await verifyAccessToken(entityTypes, accessToken);\r\n\r\n\t\tif (entity) {\r\n\t\t\tctx.entity = entity;\r\n\t\t\tctx.tokenType = TokenType.ACCESS;\r\n\t\t\tctx.usedRefreshToken = false;\r\n\t\t\tctx.tokenRenewed = false;\r\n\t\t\treturn next({ ctx });\r\n\t\t}\r\n\r\n\t\tif (!allowRefreshToken || !refreshToken) {\r\n\t\t\tthrow new TRPCError({\r\n\t\t\t\tcode: 'UNAUTHORIZED',\r\n\t\t\t\tmessage: 'Invalid access token',\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tconst renewalResult = await handleTokenRenewal(refreshToken);\r\n\r\n\t\tif (!renewalResult.success) {\r\n\t\t\tconst errorMessage =\r\n\t\t\t\trenewalResult.tokenStatus === 'revoked' ? 'Refresh token has been revoked' : 'Invalid refresh token';\r\n\r\n\t\t\tthrow new TRPCError({\r\n\t\t\t\tcode: 'UNAUTHORIZED',\r\n\t\t\t\tmessage: errorMessage,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (!entityTypes.includes(renewalResult.entity!.type)) {\r\n\t\t\tthrow new TRPCError({\r\n\t\t\t\tcode: 'UNAUTHORIZED',\r\n\t\t\t\tmessage: 'Unauthorized entity type',\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tctx.entity = renewalResult.entity;\r\n\t\tctx.tokenType = TokenType.REFRESH;\r\n\t\tctx.usedRefreshToken = true;\r\n\r\n\t\tctx.tokenRenewed = renewalResult.tokenStatus === 'expired';\r\n\r\n\t\tif (autoRefresh && renewalResult.newTokens) {\r\n\t\t\tif (renewalResult.newTokens.accessToken) {\r\n\t\t\t\tctx.res.setHeader('X-New-Access-Token', renewalResult.newTokens.accessToken);\r\n\t\t\t}\r\n\r\n\t\t\tif (renewalResult.newTokens.refreshToken) {\r\n\t\t\t\tctx.res.setHeader('X-New-Refresh-Token', renewalResult.newTokens.refreshToken);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn next({ ctx });\r\n\t});\r\n}\r\n"]}
|