@lyxa.ai/core 1.0.101 → 1.0.102
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.js.map +1 -1
- package/dist/libraries/auth/index.js.map +1 -1
- package/dist/libraries/auth/refreshtoken.js.map +1 -1
- package/dist/libraries/auth/repository.js.map +1 -1
- package/dist/libraries/cache/settings/index.js.map +1 -1
- package/dist/libraries/configuration/index.js.map +1 -1
- package/dist/libraries/configuration/types/EnvironmentConfigurationType.js.map +1 -1
- package/dist/libraries/dispatcher/index.js.map +1 -1
- package/dist/libraries/event/BaseEvent.js.map +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.js.map +1 -1
- package/dist/libraries/event/registry/SubscriptionRegistry.js.map +1 -1
- package/dist/libraries/event/test/OrderCreationEvent.js.map +1 -1
- package/dist/libraries/firebase/fcmService.js.map +1 -1
- package/dist/libraries/firebase/index.js.map +1 -1
- package/dist/libraries/index.js.map +1 -1
- package/dist/libraries/logger/index.js.map +1 -1
- package/dist/libraries/map/index.js.map +1 -1
- package/dist/libraries/map/interfaces/IMapService.js.map +1 -1
- package/dist/libraries/map/mapService.js.map +1 -1
- package/dist/libraries/map/providers/google-maps.js.map +1 -1
- package/dist/libraries/map/providers/index.js.map +1 -1
- package/dist/libraries/mongo/index.js.map +1 -1
- 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.js.map +1 -1
- package/dist/libraries/mongo/models/agent-performance.model.d.ts +13 -0
- package/dist/libraries/mongo/models/agent-performance.model.js +68 -0
- package/dist/libraries/mongo/models/agent-performance.model.js.map +1 -0
- package/dist/libraries/mongo/models/app-screen-setting.model.d.ts +9 -0
- package/dist/libraries/mongo/models/app-screen-setting.model.js +47 -0
- package/dist/libraries/mongo/models/app-screen-setting.model.js.map +1 -0
- package/dist/libraries/mongo/models/attribute.model.js.map +1 -1
- 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.js.map +1 -1
- package/dist/libraries/mongo/models/brand.model.js.map +1 -1
- package/dist/libraries/mongo/models/cancellation-reason.model.js.map +1 -1
- package/dist/libraries/mongo/models/card.model.js.map +1 -1
- package/dist/libraries/mongo/models/cart-participant.model.js.map +1 -1
- package/dist/libraries/mongo/models/cart.model.js.map +1 -1
- 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.js.map +1 -1
- package/dist/libraries/mongo/models/coupon.model.js.map +1 -1
- package/dist/libraries/mongo/models/deal-setting.model.js.map +1 -1
- package/dist/libraries/mongo/models/default-chat.model.js.map +1 -1
- 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/cash-settlement.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/charge-setting.model.d.ts +14 -0
- package/dist/libraries/mongo/models/embedded/charge-setting.model.js +60 -0
- package/dist/libraries/mongo/models/embedded/charge-setting.model.js.map +1 -0
- package/dist/libraries/mongo/models/embedded/charge-settings.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/charge.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/courier-order-finance.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/customer-support-batches.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/customer-support-numbers.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/delivery-charge-setting.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/delivery-info.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/featured-item.mode.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/line-item-attribute.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/marketing-cut.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/order-cancel.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/order-finance.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/order-pricing.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/order-refund.model.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/payment-attempt.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/payment-infromation.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/payout-setting.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/plus-settings.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/price-breakdown.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/product-nutrition.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/profit.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/regular-order-finance.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/rider-assignment-model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/rider-batches.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/rider-equipment.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/status-timeline.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/subscription-summary.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/support-reason-info.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/ticket-message.model.d.ts +11 -0
- package/dist/libraries/mongo/models/{providers/courier-order-finance.model.js → embedded/ticket-message.model.js} +23 -11
- package/dist/libraries/mongo/models/embedded/ticket-message.model.js.map +1 -0
- package/dist/libraries/mongo/models/embedded/trip-leg.mode.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/vat.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.js.map +1 -1
- package/dist/libraries/mongo/models/favourite.model.js.map +1 -1
- package/dist/libraries/mongo/models/featured-setting.model.js.map +1 -1
- package/dist/libraries/mongo/models/filter-container.model.js.map +1 -1
- package/dist/libraries/mongo/models/finance-settlement.model.js.map +1 -1
- package/dist/libraries/mongo/models/gallery.model.js.map +1 -1
- package/dist/libraries/mongo/models/index.d.ts +7 -0
- package/dist/libraries/mongo/models/index.js +8 -1
- package/dist/libraries/mongo/models/index.js.map +1 -1
- package/dist/libraries/mongo/models/line-item.model.js.map +1 -1
- package/dist/libraries/mongo/models/list-container.model.js.map +1 -1
- package/dist/libraries/mongo/models/loyalty-point-category.model.js.map +1 -1
- package/dist/libraries/mongo/models/loyalty-point-setting.model.js.map +1 -1
- package/dist/libraries/mongo/models/loyalty-point.model.js.map +1 -1
- package/dist/libraries/mongo/models/marketing.model.js.map +1 -1
- package/dist/libraries/mongo/models/meal-plan.model.js.map +1 -1
- package/dist/libraries/mongo/models/notification.model.js.map +1 -1
- package/dist/libraries/mongo/models/nutrition.model.js.map +1 -1
- package/dist/libraries/mongo/models/order-delivery.model.js.map +1 -1
- package/dist/libraries/mongo/models/order-payment.model.d.ts +21 -0
- package/dist/libraries/mongo/models/order-payment.model.js +96 -0
- package/dist/libraries/mongo/models/order-payment.model.js.map +1 -0
- package/dist/libraries/mongo/models/order.model.js.map +1 -1
- 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.js.map +1 -1
- package/dist/libraries/mongo/models/product.model.js.map +1 -1
- package/dist/libraries/mongo/models/providers/areeba-card.model.js.map +1 -1
- 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/courier-order.model.js.map +1 -1
- package/dist/libraries/mongo/models/providers/custom-coupon.model.js.map +1 -1
- package/dist/libraries/mongo/models/providers/discount-marketing.model.js.map +1 -1
- package/dist/libraries/mongo/models/providers/featured-marketing.model.js.map +1 -1
- package/dist/libraries/mongo/models/providers/free-delivery-marketing.model.js.map +1 -1
- package/dist/libraries/mongo/models/providers/global-coupon.model.js.map +1 -1
- package/dist/libraries/mongo/models/providers/individual-store-coupon.model.js.map +1 -1
- package/dist/libraries/mongo/models/providers/individual-user-coupon.model.js.map +1 -1
- package/dist/libraries/mongo/models/providers/loyalty-point-marketing.model.js.map +1 -1
- package/dist/libraries/mongo/models/providers/punch-marketing.model.js.map +1 -1
- package/dist/libraries/mongo/models/providers/referral-code-coupon.model.js.map +1 -1
- package/dist/libraries/mongo/models/providers/referral-reward-coupon.model.js.map +1 -1
- package/dist/libraries/mongo/models/providers/regular-order.model.js.map +1 -1
- package/dist/libraries/mongo/models/providers/rider-payout.model.js.map +1 -1
- package/dist/libraries/mongo/models/providers/shop-payout.model.js.map +1 -1
- package/dist/libraries/mongo/models/punch-marketing-history.model.js.map +1 -1
- package/dist/libraries/mongo/models/rating-setting.model.js.map +1 -1
- package/dist/libraries/mongo/models/referral-setting.model.js.map +1 -1
- package/dist/libraries/mongo/models/request-area.model.js.map +1 -1
- package/dist/libraries/mongo/models/reward.model.js.map +1 -1
- package/dist/libraries/mongo/models/rider-review.model.js.map +1 -1
- package/dist/libraries/mongo/models/rider-timeout.model.js.map +1 -1
- package/dist/libraries/mongo/models/rider-tracking.model.js.map +1 -1
- package/dist/libraries/mongo/models/rider.model.js.map +1 -1
- package/dist/libraries/mongo/models/role.model.js.map +1 -1
- package/dist/libraries/mongo/models/setting.model.js.map +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/geo-location.model.js.map +1 -1
- package/dist/libraries/mongo/models/shared/work-hour.model.js.map +1 -1
- package/dist/libraries/mongo/models/shop-access-control.model.js.map +1 -1
- package/dist/libraries/mongo/models/shop-category.model.js.map +1 -1
- package/dist/libraries/mongo/models/shop-meal-plan.model.js.map +1 -1
- package/dist/libraries/mongo/models/shop-review.model.js.map +1 -1
- package/dist/libraries/mongo/models/shop.model.js.map +1 -1
- package/dist/libraries/mongo/models/subscription-setting.model.js.map +1 -1
- package/dist/libraries/mongo/models/subscription.model.js.map +1 -1
- package/dist/libraries/mongo/models/support-reason.model.js.map +1 -1
- package/dist/libraries/mongo/models/tag.model.js.map +1 -1
- package/dist/libraries/mongo/models/terms-and-conditions.model.js.map +1 -1
- package/dist/libraries/mongo/models/ticket.model.d.ts +28 -0
- package/dist/libraries/mongo/models/ticket.model.js +175 -0
- package/dist/libraries/mongo/models/ticket.model.js.map +1 -0
- package/dist/libraries/mongo/models/transaction.model.js.map +1 -1
- package/dist/libraries/mongo/models/user-app-section-setting.model.js.map +1 -1
- package/dist/libraries/mongo/models/user.model.js.map +1 -1
- package/dist/libraries/mongo/models/zone.model.js.map +1 -1
- package/dist/libraries/mongo/plugins/soft-delete-plugin.js.map +1 -1
- package/dist/libraries/redis/index.js.map +1 -1
- package/dist/libraries/secrets/index.js.map +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 +3 -3
- package/dist/libraries/trpc/middlewares/auth.js.map +1 -1
- package/dist/libraries/trpc/middlewares/cors.js.map +1 -1
- package/dist/libraries/trpc/middlewares/phone-verified.d.ts +3 -3
- package/dist/libraries/trpc/middlewares/phone-verified.js.map +1 -1
- package/dist/libraries/trpc/middlewares/publicUserDecoder.d.ts +3 -3
- package/dist/libraries/trpc/middlewares/publicUserDecoder.js.map +1 -1
- package/dist/libraries/twilio/index.js.map +1 -1
- package/dist/libraries/upload/index.js.map +1 -1
- package/dist/utilities/common/password.js.map +1 -1
- package/dist/utilities/common/week.js.map +1 -1
- package/dist/utilities/currency.js.map +1 -1
- package/dist/utilities/enum.d.ts +14 -0
- package/dist/utilities/enum.js +18 -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 +5 -5
- package/dist/utilities/pagination.js.map +1 -1
- package/dist/utilities/response.js.map +1 -1
- package/dist/utilities/search.js.map +1 -1
- package/dist/utilities/sorting.js.map +1 -1
- package/dist/utilities/transformers.js.map +1 -1
- package/dist/utilities/validation/common-validation.d.ts +118 -118
- 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 +54 -54
- package/dist/libraries/mongo/models/embedded/loyaltyPoint.model.d.ts +0 -16
- package/dist/libraries/mongo/models/embedded/loyaltyPoint.model.js +0 -61
- package/dist/libraries/mongo/models/embedded/loyaltyPoint.model.js.map +0 -1
- package/dist/libraries/mongo/models/order-finance.model.d.ts +0 -22
- package/dist/libraries/mongo/models/order-finance.model.js +0 -83
- package/dist/libraries/mongo/models/order-finance.model.js.map +0 -1
- package/dist/libraries/mongo/models/providers/courier-order-finance.model.d.ts +0 -7
- package/dist/libraries/mongo/models/providers/courier-order-finance.model.js.map +0 -1
- package/dist/libraries/mongo/models/providers/regular-order-finance.model.d.ts +0 -25
- package/dist/libraries/mongo/models/providers/regular-order-finance.model.js +0 -95
- package/dist/libraries/mongo/models/providers/regular-order-finance.model.js.map +0 -1
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
22
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
+
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
42
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
43
|
+
};
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.Ticket = void 0;
|
|
46
|
+
const typegoose_1 = require("@typegoose/typegoose");
|
|
47
|
+
const defaultClasses_1 = require("@typegoose/typegoose/lib/defaultClasses");
|
|
48
|
+
const user_model_1 = require("./user.model");
|
|
49
|
+
const shop_model_1 = require("./shop.model");
|
|
50
|
+
const order_model_1 = require("./order.model");
|
|
51
|
+
const admin_model_1 = require("./admin.model");
|
|
52
|
+
const ticket_message_model_1 = require("./embedded/ticket-message.model");
|
|
53
|
+
const enum_1 = require("../../../utilities/enum");
|
|
54
|
+
let Ticket = class Ticket extends defaultClasses_1.TimeStamps {
|
|
55
|
+
ticketId;
|
|
56
|
+
subject;
|
|
57
|
+
type;
|
|
58
|
+
status;
|
|
59
|
+
user;
|
|
60
|
+
shop;
|
|
61
|
+
order;
|
|
62
|
+
assignedAgent;
|
|
63
|
+
assignedAt;
|
|
64
|
+
assignmentAttempts;
|
|
65
|
+
rejectedByAgents;
|
|
66
|
+
sentToAgents;
|
|
67
|
+
messages;
|
|
68
|
+
resolvedAt;
|
|
69
|
+
resolutionTimeMinutes;
|
|
70
|
+
customerRating;
|
|
71
|
+
totalMessages;
|
|
72
|
+
agentScore;
|
|
73
|
+
};
|
|
74
|
+
exports.Ticket = Ticket;
|
|
75
|
+
__decorate([
|
|
76
|
+
(0, typegoose_1.prop)({ required: true, type: String, unique: true }),
|
|
77
|
+
__metadata("design:type", String)
|
|
78
|
+
], Ticket.prototype, "ticketId", void 0);
|
|
79
|
+
__decorate([
|
|
80
|
+
(0, typegoose_1.prop)({ required: true, type: String }),
|
|
81
|
+
__metadata("design:type", String)
|
|
82
|
+
], Ticket.prototype, "subject", void 0);
|
|
83
|
+
__decorate([
|
|
84
|
+
(0, typegoose_1.prop)({ required: true, type: String, enum: enum_1.TicketType }),
|
|
85
|
+
__metadata("design:type", String)
|
|
86
|
+
], Ticket.prototype, "type", void 0);
|
|
87
|
+
__decorate([
|
|
88
|
+
(0, typegoose_1.prop)({ required: true, type: String, enum: enum_1.TicketStatus, default: enum_1.TicketStatus.PENDING }),
|
|
89
|
+
__metadata("design:type", String)
|
|
90
|
+
], Ticket.prototype, "status", void 0);
|
|
91
|
+
__decorate([
|
|
92
|
+
(0, typegoose_1.prop)({ ref: () => user_model_1.User }),
|
|
93
|
+
__metadata("design:type", Object)
|
|
94
|
+
], Ticket.prototype, "user", void 0);
|
|
95
|
+
__decorate([
|
|
96
|
+
(0, typegoose_1.prop)({ ref: () => shop_model_1.Shop }),
|
|
97
|
+
__metadata("design:type", Object)
|
|
98
|
+
], Ticket.prototype, "shop", void 0);
|
|
99
|
+
__decorate([
|
|
100
|
+
(0, typegoose_1.prop)({ ref: () => order_model_1.Order }),
|
|
101
|
+
__metadata("design:type", Object)
|
|
102
|
+
], Ticket.prototype, "order", void 0);
|
|
103
|
+
__decorate([
|
|
104
|
+
(0, typegoose_1.prop)({ ref: () => admin_model_1.Admin }),
|
|
105
|
+
__metadata("design:type", Object)
|
|
106
|
+
], Ticket.prototype, "assignedAgent", void 0);
|
|
107
|
+
__decorate([
|
|
108
|
+
(0, typegoose_1.prop)({ type: Date }),
|
|
109
|
+
__metadata("design:type", Date)
|
|
110
|
+
], Ticket.prototype, "assignedAt", void 0);
|
|
111
|
+
__decorate([
|
|
112
|
+
(0, typegoose_1.prop)({ type: Number, default: 0 }),
|
|
113
|
+
__metadata("design:type", Number)
|
|
114
|
+
], Ticket.prototype, "assignmentAttempts", void 0);
|
|
115
|
+
__decorate([
|
|
116
|
+
(0, typegoose_1.prop)({ type: () => [String], ref: () => admin_model_1.Admin, default: [] }),
|
|
117
|
+
__metadata("design:type", Array)
|
|
118
|
+
], Ticket.prototype, "rejectedByAgents", void 0);
|
|
119
|
+
__decorate([
|
|
120
|
+
(0, typegoose_1.prop)({ type: () => [String], ref: () => admin_model_1.Admin, default: [] }),
|
|
121
|
+
__metadata("design:type", Array)
|
|
122
|
+
], Ticket.prototype, "sentToAgents", void 0);
|
|
123
|
+
__decorate([
|
|
124
|
+
(0, typegoose_1.prop)({ type: () => [ticket_message_model_1.TicketMessage], default: [] }),
|
|
125
|
+
__metadata("design:type", Array)
|
|
126
|
+
], Ticket.prototype, "messages", void 0);
|
|
127
|
+
__decorate([
|
|
128
|
+
(0, typegoose_1.prop)({ type: Date }),
|
|
129
|
+
__metadata("design:type", Date)
|
|
130
|
+
], Ticket.prototype, "resolvedAt", void 0);
|
|
131
|
+
__decorate([
|
|
132
|
+
(0, typegoose_1.prop)({ type: Number }),
|
|
133
|
+
__metadata("design:type", Number)
|
|
134
|
+
], Ticket.prototype, "resolutionTimeMinutes", void 0);
|
|
135
|
+
__decorate([
|
|
136
|
+
(0, typegoose_1.prop)({ type: Number, min: 1, max: 5 }),
|
|
137
|
+
__metadata("design:type", Number)
|
|
138
|
+
], Ticket.prototype, "customerRating", void 0);
|
|
139
|
+
__decorate([
|
|
140
|
+
(0, typegoose_1.prop)({ type: Number, default: 0 }),
|
|
141
|
+
__metadata("design:type", Number)
|
|
142
|
+
], Ticket.prototype, "totalMessages", void 0);
|
|
143
|
+
__decorate([
|
|
144
|
+
(0, typegoose_1.prop)({ type: Number }),
|
|
145
|
+
__metadata("design:type", Number)
|
|
146
|
+
], Ticket.prototype, "agentScore", void 0);
|
|
147
|
+
exports.Ticket = Ticket = __decorate([
|
|
148
|
+
(0, typegoose_1.pre)('save', async function (next) {
|
|
149
|
+
if (this.isNew && !this.ticketId) {
|
|
150
|
+
const { CounterModel } = await Promise.resolve().then(() => __importStar(require('.')));
|
|
151
|
+
try {
|
|
152
|
+
const counter = await CounterModel.findOneAndUpdate({ counterType: 'ticket' }, { $inc: { value: 1 } }, { new: true, upsert: true });
|
|
153
|
+
const currentDate = new Date().toISOString().slice(0, 10).replace(/-/g, '');
|
|
154
|
+
this.ticketId = `TKT-${currentDate}-${String(counter.value).padStart(4, '0')}`;
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
return next(error);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
next();
|
|
161
|
+
}),
|
|
162
|
+
(0, typegoose_1.modelOptions)({
|
|
163
|
+
schemaOptions: {
|
|
164
|
+
collection: 'tickets',
|
|
165
|
+
},
|
|
166
|
+
}),
|
|
167
|
+
(0, typegoose_1.index)({ assignedAgent: 1, status: 1 }),
|
|
168
|
+
(0, typegoose_1.index)({ type: 1, status: 1 }),
|
|
169
|
+
(0, typegoose_1.index)({ user: 1, type: 1, status: 1 }),
|
|
170
|
+
(0, typegoose_1.index)({ shop: 1, type: 1, status: 1 }),
|
|
171
|
+
(0, typegoose_1.index)({ order: 1 }),
|
|
172
|
+
(0, typegoose_1.index)({ createdAt: -1 }),
|
|
173
|
+
(0, typegoose_1.index)({ status: 1, createdAt: -1 })
|
|
174
|
+
], Ticket);
|
|
175
|
+
//# sourceMappingURL=ticket.model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ticket.model.js","sourceRoot":"/","sources":["libraries/mongo/models/ticket.model.ts"],"names":[],"mappings":"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","sourcesContent":["import { prop, Ref, index, modelOptions, pre } from '@typegoose/typegoose';\r\nimport { TimeStamps } from '@typegoose/typegoose/lib/defaultClasses';\r\nimport { User } from './user.model';\r\nimport { Shop } from './shop.model';\r\nimport { Order } from './order.model';\r\nimport { Admin } from './admin.model';\r\nimport { TicketMessage } from './embedded/ticket-message.model';\r\nimport { TicketType, TicketStatus, MessageSender } from '../../../utilities/enum';\r\n\r\n@pre<Ticket>('save', async function (next) {\r\n\tif (this.isNew && !this.ticketId) {\r\n\t\tconst { CounterModel } = await import('.');\r\n\r\n\t\ttry {\r\n\t\t\tconst counter = await CounterModel.findOneAndUpdate(\r\n\t\t\t\t{ counterType: 'ticket' },\r\n\t\t\t\t{ $inc: { value: 1 } },\r\n\t\t\t\t{ new: true, upsert: true }\r\n\t\t\t);\r\n\r\n\t\t\tconst currentDate = new Date().toISOString().slice(0, 10).replace(/-/g, '');\r\n\t\t\tthis.ticketId = `TKT-${currentDate}-${String(counter.value).padStart(4, '0')}`;\r\n\t\t} catch (error) {\r\n\t\t\treturn next(error as Error);\r\n\t\t}\r\n\t}\r\n\tnext();\r\n})\r\n@modelOptions({\r\n\tschemaOptions: {\r\n\t\tcollection: 'tickets',\r\n\t},\r\n})\r\n@index({ assignedAgent: 1, status: 1 })\r\n@index({ type: 1, status: 1 })\r\n@index({ user: 1, type: 1, status: 1 })\r\n@index({ shop: 1, type: 1, status: 1 })\r\n@index({ order: 1 })\r\n@index({ createdAt: -1 })\r\n@index({ status: 1, createdAt: -1 })\r\nexport class Ticket extends TimeStamps {\r\n\t@prop({ required: true, type: String, unique: true })\r\n\tpublic ticketId!: string;\r\n\r\n\t@prop({ required: true, type: String })\r\n\tprivate subject: string;\r\n\r\n\t@prop({ required: true, type: String, enum: TicketType })\r\n\tpublic type!: TicketType;\r\n\r\n\t@prop({ required: true, type: String, enum: TicketStatus, default: TicketStatus.PENDING })\r\n\tpublic status!: TicketStatus;\r\n\r\n\t@prop({ ref: () => User })\r\n\tpublic user?: Ref<User>;\r\n\r\n\t@prop({ ref: () => Shop })\r\n\tpublic shop?: Ref<Shop>;\r\n\r\n\t@prop({ ref: () => Order })\r\n\tpublic order?: Ref<Order>;\r\n\r\n\t@prop({ ref: () => Admin })\r\n\tpublic assignedAgent?: Ref<Admin>;\r\n\r\n\t@prop({ type: Date })\r\n\tpublic assignedAt?: Date;\r\n\r\n\t@prop({ type: Number, default: 0 })\r\n\tpublic assignmentAttempts?: number;\r\n\r\n\t@prop({ type: () => [String], ref: () => Admin, default: [] })\r\n\tpublic rejectedByAgents?: Ref<Admin>[];\r\n\r\n\t@prop({ type: () => [String], ref: () => Admin, default: [] })\r\n\tpublic sentToAgents?: Ref<Admin>[]; // TODO: review with team\r\n\r\n\t@prop({ type: () => [TicketMessage], default: [] })\r\n\tpublic messages?: TicketMessage[];\r\n\r\n\t@prop({ type: Date })\r\n\tpublic resolvedAt?: Date;\r\n\r\n\t@prop({ type: Number })\r\n\tpublic resolutionTimeMinutes?: number;\r\n\r\n\t@prop({ type: Number, min: 1, max: 5 })\r\n\tpublic customerRating?: number;\r\n\r\n\t@prop({ type: Number, default: 0 })\r\n\tpublic totalMessages?: number;\r\n\r\n\t@prop({ type: Number })\r\n\tpublic agentScore?: 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 {}\n"]}
|
|
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 {}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-app-section-setting.model.js","sourceRoot":"/","sources":["libraries/mongo/models/user-app-section-setting.model.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAAsE;AACtE,4EAAqE;AACrE,kDAA6F;AAC7F,wBAA+C;AAkCxC,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,2BAAU;IAE7C,QAAQ,CAA0B;IAGlC,OAAO,CAAsB;IAG7B,KAAK,CAAU;IAGf,MAAM,CAAU;IAGhB,YAAY,CAAU;CAC7B,CAAA;AAfY,sDAAqB;AAE1B;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,6BAAsB,EAAE,CAAC;;uDAC5B;AAGlC;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAkB,EAAE,CAAC;;sDAC7B;AAG7B;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;oDACjB;AAGf;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAM,EAAE,OAAO,EAAE,aAAM,CAAC,MAAM,EAAE,CAAC;;qDACtC;AAGhB;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;2DACM;gCAdjB,qBAAqB;IAhCjC,IAAA,wBAAY,EAAC,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,uBAAuB,EAAC,EAAE,CAAC;IACvE,IAAA,iBAAK,EACL,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAC3B,EAAE,MAAM,EAAE,IAAI,EAAE,CAChB;IACA,IAAA,eAAG,EAAwB,MAAM,EAAE,KAAK,WAAW,IAAI;QAEvD,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,WAAW,EAAE,CAAC;YAC5D,IAAI,CAAC;gBAEJ,MAAM,eAAe,GAAG,MAAM,6BAA0B,CAAC,SAAS,CAA8B;oBAC/F;wBACC,MAAM,EAAE;4BACP,SAAS,EAAE,IAAI;yBACf;qBACD;oBACD;wBACC,MAAM,EAAE;4BACP,GAAG,EAAE,IAAI;4BACT,eAAe,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE;yBAC1C;qBACD;iBACD,CAAC,CAAC,IAAI,EAAE,CAAC;gBAGV,IAAI,CAAC,YAAY,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACrE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,OAAO,IAAI,CAAC,KAAc,CAAC,CAAC;YAC7B,CAAC;QACF,CAAC;QACD,IAAI,EAAE,CAAC;IACR,CAAC,CAAC;GACW,qBAAqB,CAejC","sourcesContent":["import { Index, modelOptions, pre, prop } from '@typegoose/typegoose';\nimport { TimeStamps } from '@typegoose/typegoose/lib/defaultClasses';\nimport { Status, UserAppSectionItemType, UserAppSectionType } from '../../../utilities/enum';\nimport { UserAppSectionSettingModel } from '.';\n\n@modelOptions({ schemaOptions: { collection: 'userAppSectionSetting'} })\n@Index(\n\t{ itemType: 1, section: 1 },\n\t{ unique: true }\n)\n@pre<UserAppSectionSetting>('save', async function (next) {\n\t// Only set sortingOrder if it's a new document or sortingOrder is not set\n\tif (this.isNew || typeof this.sortingOrder === 'undefined') {\n\t\ttry {\n\t\t\t// Find the maximum sortingOrder that aren't deleted\n\t\t\tconst maxSortingOrder = await UserAppSectionSettingModel.aggregate<{ maxSortingOrder: number }>([\n\t\t\t\t{\n\t\t\t\t\t$match: {\n\t\t\t\t\t\tdeletedAt: null,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t$group: {\n\t\t\t\t\t\t_id: null,\n\t\t\t\t\t\tmaxSortingOrder: { $max: '$sortingOrder' },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t]).exec();\n\n\t\t\t// Set the new sortingOrder to max + 1 (or 0 if no items found)\n\t\t\tthis.sortingOrder = (maxSortingOrder[0]?.maxSortingOrder ?? -1) + 1;\n\t\t} catch (error) {\n\t\t\treturn next(error as Error);\n\t\t}\n\t}\n\tnext();\n})\nexport class UserAppSectionSetting extends TimeStamps {\n\t@prop({ required: true, type: String, enum: UserAppSectionItemType })\n\tpublic itemType!: UserAppSectionItemType;\n\n\t@prop({ required: true, type: String, enum: UserAppSectionType })\n\tpublic section!: UserAppSectionType;\n\n\t@prop({ required: true, type: String })\n\tpublic alias!: string;\n\n\t@prop({ type: String, enum: Status, default: Status.ACTIVE })\n\tpublic status?: Status;\n\n\t@prop({ type: Number })\n\tpublic sortingOrder?: number;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"user-app-section-setting.model.js","sourceRoot":"/","sources":["libraries/mongo/models/user-app-section-setting.model.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAAsE;AACtE,4EAAqE;AACrE,kDAA6F;AAC7F,wBAA+C;AAkCxC,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,2BAAU;IAE7C,QAAQ,CAA0B;IAGlC,OAAO,CAAsB;IAG7B,KAAK,CAAU;IAGf,MAAM,CAAU;IAGhB,YAAY,CAAU;CAC7B,CAAA;AAfY,sDAAqB;AAE1B;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,6BAAsB,EAAE,CAAC;;uDAC5B;AAGlC;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAkB,EAAE,CAAC;;sDAC7B;AAG7B;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;oDACjB;AAGf;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAM,EAAE,OAAO,EAAE,aAAM,CAAC,MAAM,EAAE,CAAC;;qDACtC;AAGhB;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;2DACM;gCAdjB,qBAAqB;IAhCjC,IAAA,wBAAY,EAAC,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,uBAAuB,EAAC,EAAE,CAAC;IACvE,IAAA,iBAAK,EACL,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAC3B,EAAE,MAAM,EAAE,IAAI,EAAE,CAChB;IACA,IAAA,eAAG,EAAwB,MAAM,EAAE,KAAK,WAAW,IAAI;QAEvD,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,WAAW,EAAE,CAAC;YAC5D,IAAI,CAAC;gBAEJ,MAAM,eAAe,GAAG,MAAM,6BAA0B,CAAC,SAAS,CAA8B;oBAC/F;wBACC,MAAM,EAAE;4BACP,SAAS,EAAE,IAAI;yBACf;qBACD;oBACD;wBACC,MAAM,EAAE;4BACP,GAAG,EAAE,IAAI;4BACT,eAAe,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE;yBAC1C;qBACD;iBACD,CAAC,CAAC,IAAI,EAAE,CAAC;gBAGV,IAAI,CAAC,YAAY,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACrE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,OAAO,IAAI,CAAC,KAAc,CAAC,CAAC;YAC7B,CAAC;QACF,CAAC;QACD,IAAI,EAAE,CAAC;IACR,CAAC,CAAC;GACW,qBAAqB,CAejC","sourcesContent":["import { Index, modelOptions, pre, prop } from '@typegoose/typegoose';\r\nimport { TimeStamps } from '@typegoose/typegoose/lib/defaultClasses';\r\nimport { Status, UserAppSectionItemType, UserAppSectionType } from '../../../utilities/enum';\r\nimport { UserAppSectionSettingModel } from '.';\r\n\r\n@modelOptions({ schemaOptions: { collection: 'userAppSectionSetting'} })\r\n@Index(\r\n\t{ itemType: 1, section: 1 },\r\n\t{ unique: true }\r\n)\r\n@pre<UserAppSectionSetting>('save', async function (next) {\r\n\t// Only set sortingOrder if it's a new document or sortingOrder is not set\r\n\tif (this.isNew || typeof this.sortingOrder === 'undefined') {\r\n\t\ttry {\r\n\t\t\t// Find the maximum sortingOrder that aren't deleted\r\n\t\t\tconst maxSortingOrder = await UserAppSectionSettingModel.aggregate<{ maxSortingOrder: number }>([\r\n\t\t\t\t{\r\n\t\t\t\t\t$match: {\r\n\t\t\t\t\t\tdeletedAt: null,\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\t$group: {\r\n\t\t\t\t\t\t_id: null,\r\n\t\t\t\t\t\tmaxSortingOrder: { $max: '$sortingOrder' },\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t]).exec();\r\n\r\n\t\t\t// Set the new sortingOrder to max + 1 (or 0 if no items found)\r\n\t\t\tthis.sortingOrder = (maxSortingOrder[0]?.maxSortingOrder ?? -1) + 1;\r\n\t\t} catch (error) {\r\n\t\t\treturn next(error as Error);\r\n\t\t}\r\n\t}\r\n\tnext();\r\n})\r\nexport class UserAppSectionSetting extends TimeStamps {\r\n\t@prop({ required: true, type: String, enum: UserAppSectionItemType })\r\n\tpublic itemType!: UserAppSectionItemType;\r\n\r\n\t@prop({ required: true, type: String, enum: UserAppSectionType })\r\n\tpublic section!: UserAppSectionType;\r\n\r\n\t@prop({ required: true, type: String })\r\n\tpublic alias!: string;\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: Number })\r\n\tpublic sortingOrder?: number;\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.model.js","sourceRoot":"/","sources":["libraries/mongo/models/user.model.ts"],"names":[],"mappings":"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","sourcesContent":["import { index, modelOptions, mongoose, prop, Ref, ReturnModelType } from '@typegoose/typegoose';\nimport { TimeStamps } from '@typegoose/typegoose/lib/defaultClasses';\nimport { CoreUser } from './core-user.model';\nimport { Product } from './product.model';\nimport { Shop } from './shop.model';\nimport { UserAddress } from './shared/address.model';\nimport { Coupon } from './coupon.model';\nimport { Subscription } from './subscription.model';\nimport { Status } from '../../../utilities/enum';\nimport { OTPFields } from './embedded/otp-fields.model';\n\n@index({ location: '2dsphere' })\n@modelOptions({ schemaOptions: { collection: 'users' } })\nexport class User extends TimeStamps {\n\t@prop({ required: true, ref: () => CoreUser })\n\tpublic coreUser!: Ref<CoreUser>;\n\n\t@prop({ type: () => [String], ref: () => Product })\n\tpublic favoriteProducts?: Ref<Product>[];\n\n\t@prop({ type: () => [String], ref: () => Shop })\n\tpublic favoriteShops?: Ref<Shop>[];\n\n\t@prop({ type: () => [UserAddress] })\n\tpublic addresses?: UserAddress[];\n\n\t@prop({ type: String, enum: Status, default: Status.ACTIVE })\n\tpublic status?: Status;\n\n\t@prop({ type: Number, default: 0 })\n\tpublic orderCompleted?: number;\n\n\t@prop({ type: Date })\n\tpublic repeatedOrderAt?: Date;\n\n\t@prop({ type: Number, default: 0 })\n\tpublic walletBalance?: number;\n\n\t@prop({ ref: () => Coupon })\n\tpublic coupons?: Ref<Coupon>[];\n\n\t@prop({ type: String })\n\tpublic newUserCouponDiscountType?: string;\n\n\t@prop({ type: Number })\n\tpublic newUserCouponValue?: number;\n\n\t@prop({ type: Number })\n\tpublic newUserCouponMaximumDiscountLimit?: number;\n\n\t@prop({ type: Boolean, default: false })\n\tpublic isNewUserCouponShowed?: boolean;\n\n\t@prop({ type: String, ref: () => Coupon })\n\tpublic referralCode?: Ref<Coupon>;\n\n\t@prop({ type: String, ref: () => Subscription })\n\tpublic subscription?: Ref<Subscription>;\n\n\t@prop({ type: Boolean, default: false })\n\tpublic isSubscribed?: boolean;\n\n\t@prop({ type: String, unique: true, sparse: true })\n\tpublic phoneNumber?: string;\n\n\t@prop({ type: () => OTPFields })\n\tpublic phoneOtpInfo?: OTPFields;\n\n\t@prop({ type: Boolean, default: false })\n\tpublic isPhoneVerified?: boolean;\n\n\tpublic static async updateWallet(this: ReturnModelType<typeof User>, userId: string, amount: number) {\n\t\treturn this.findByIdAndUpdate(userId, { $inc: { walletBalance: amount } }, { new: true });\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"user.model.js","sourceRoot":"/","sources":["libraries/mongo/models/user.model.ts"],"names":[],"mappings":"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","sourcesContent":["import { index, modelOptions, mongoose, prop, Ref, ReturnModelType } from '@typegoose/typegoose';\r\nimport { TimeStamps } from '@typegoose/typegoose/lib/defaultClasses';\r\nimport { CoreUser } from './core-user.model';\r\nimport { Product } from './product.model';\r\nimport { Shop } from './shop.model';\r\nimport { UserAddress } from './shared/address.model';\r\nimport { Coupon } from './coupon.model';\r\nimport { Subscription } from './subscription.model';\r\nimport { Status } from '../../../utilities/enum';\r\nimport { OTPFields } from './embedded/otp-fields.model';\r\n\r\n@index({ location: '2dsphere' })\r\n@modelOptions({ schemaOptions: { collection: 'users' } })\r\nexport class User extends TimeStamps {\r\n\t@prop({ required: true, ref: () => CoreUser })\r\n\tpublic coreUser!: Ref<CoreUser>;\r\n\r\n\t@prop({ type: () => [String], ref: () => Product })\r\n\tpublic favoriteProducts?: Ref<Product>[];\r\n\r\n\t@prop({ type: () => [String], ref: () => Shop })\r\n\tpublic favoriteShops?: Ref<Shop>[];\r\n\r\n\t@prop({ type: () => [UserAddress] })\r\n\tpublic addresses?: UserAddress[];\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: Number, default: 0 })\r\n\tpublic orderCompleted?: number;\r\n\r\n\t@prop({ type: Date })\r\n\tpublic repeatedOrderAt?: Date;\r\n\r\n\t@prop({ type: Number, default: 0 })\r\n\tpublic walletBalance?: number;\r\n\r\n\t@prop({ ref: () => Coupon })\r\n\tpublic coupons?: Ref<Coupon>[];\r\n\r\n\t@prop({ type: String })\r\n\tpublic newUserCouponDiscountType?: string;\r\n\r\n\t@prop({ type: Number })\r\n\tpublic newUserCouponValue?: number;\r\n\r\n\t@prop({ type: Number })\r\n\tpublic newUserCouponMaximumDiscountLimit?: number;\r\n\r\n\t@prop({ type: Boolean, default: false })\r\n\tpublic isNewUserCouponShowed?: boolean;\r\n\r\n\t@prop({ type: String, ref: () => Coupon })\r\n\tpublic referralCode?: Ref<Coupon>;\r\n\r\n\t@prop({ type: String, ref: () => Subscription })\r\n\tpublic subscription?: Ref<Subscription>;\r\n\r\n\t@prop({ type: Boolean, default: false })\r\n\tpublic isSubscribed?: boolean;\r\n\r\n\t@prop({ type: String, unique: true, sparse: true })\r\n\tpublic phoneNumber?: string;\r\n\r\n\t@prop({ type: () => OTPFields })\r\n\tpublic phoneOtpInfo?: OTPFields;\r\n\r\n\t@prop({ type: Boolean, default: false })\r\n\tpublic isPhoneVerified?: boolean;\r\n\r\n\tpublic static async updateWallet(this: ReturnModelType<typeof User>, userId: string, amount: number) {\r\n\t\treturn this.findByIdAndUpdate(userId, { $inc: { walletBalance: amount } }, { new: true });\r\n\t}\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
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,IAAI,CAAU;IAGd,IAAI,CAAU;IAGd,QAAQ,CAAgB;IAGxB,MAAM,CAAc;IAGpB,SAAS,CAAU;IAGnB,eAAe,CAAU;IAIzB,iBAAiB,CAAU;IAG3B,iBAAiB,CAAU;IAG3B,QAAQ,CAAS;IAIjB,gBAAgB,CAAU;CACjC,CAAA;AAhCY,oBAAI;AAET;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;kCAClB;AAGd;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;kCACF;AAGd;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,iCAAY,EAAE,CAAC;8BAC3B,iCAAY;sCAAC;AAGxB;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;;uCACG;AAGnB;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;6CACS;AAIzB;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;;+CACR;AAG3B;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;+CACD;AAG3B;IADN,IAAA,gBAAI,EAAC,EAAC,IAAI,EAAE,MAAM,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;;sCACZ;AAIjB;IADN,IAAA,gBAAI,EAAC,EAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC;;8CACJ;eA/BrB,IAAI;IADhB,IAAA,wBAAY,EAAC,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;GAC5C,IAAI,CAgChB","sourcesContent":["import { modelOptions, prop } from '@typegoose/typegoose';\nimport { TimeStamps } from '@typegoose/typegoose/lib/defaultClasses';\nimport { ZoneStatus } from '../../../utilities/enum';\nimport { ZoneGeometry } from './embedded/zone-geometry.mode';\n\n@modelOptions({ schemaOptions: { collection: 'zones' } })\nexport class Zone extends TimeStamps {\n\t@prop({ required: true, type: String })\n\tpublic name!: string;\n \n\t@prop({ type: String })\n\tpublic area?: string;\n\n\t@prop({ required: true, type: ZoneGeometry })\n\tpublic geometry!: ZoneGeometry; \n\n\t@prop({ type: String, enum: ZoneStatus, default: ZoneStatus.ACTIVE })\n\tpublic status?: ZoneStatus;\n\n\t@prop({ type: String })\n\tpublic busyTitle?: string;\n\n\t@prop({ type: String })\n\tpublic busyDescription?: string; \n\n\t// Rider reward feature when he reached the target\n\t@prop({ type: Number, default: Infinity })\n\tpublic riderWeeklyTarget?: number;\n\n\t@prop({ type: Number, default: 0 })\n\tpublic riderWeeklyReward?: number;\n\n\t@prop({type: Number,required: true})\n\tpublic areaSqKm!: number\n\t\n // Rider reward are not be applied when isIncludedRewared false\n\t@prop({type: Boolean ,default: true})\n\tpublic isIncludedReward?: boolean \n}\n "]}
|
|
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,IAAI,CAAU;IAGd,IAAI,CAAU;IAGd,QAAQ,CAAgB;IAGxB,MAAM,CAAc;IAGpB,SAAS,CAAU;IAGnB,eAAe,CAAU;IAIzB,iBAAiB,CAAU;IAG3B,iBAAiB,CAAU;IAG3B,QAAQ,CAAS;IAIjB,gBAAgB,CAAU;CACjC,CAAA;AAhCY,oBAAI;AAET;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;kCAClB;AAGd;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;kCACF;AAGd;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,iCAAY,EAAE,CAAC;8BAC3B,iCAAY;sCAAC;AAGxB;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;;uCACG;AAGnB;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;6CACS;AAIzB;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;;+CACR;AAG3B;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;+CACD;AAG3B;IADN,IAAA,gBAAI,EAAC,EAAC,IAAI,EAAE,MAAM,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;;sCACZ;AAIjB;IADN,IAAA,gBAAI,EAAC,EAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC;;8CACJ;eA/BrB,IAAI;IADhB,IAAA,wBAAY,EAAC,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;GAC5C,IAAI,CAgChB","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 name!: string;\r\n \r\n\t@prop({ type: String })\r\n\tpublic area?: string;\r\n\r\n\t@prop({ required: true, type: ZoneGeometry })\r\n\tpublic geometry!: 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 busyTitle?: string;\r\n\r\n\t@prop({ type: String })\r\n\tpublic busyDescription?: string; \r\n\r\n\t// Rider reward feature when he reached the target\r\n\t@prop({ type: Number, default: Infinity })\r\n\tpublic riderWeeklyTarget?: number;\r\n\r\n\t@prop({ type: Number, default: 0 })\r\n\tpublic riderWeeklyReward?: number;\r\n\r\n\t@prop({type: Number,required: true})\r\n\tpublic areaSqKm!: number\r\n\t\r\n // Rider reward are not be applied when isIncludedRewared false\r\n\t@prop({type: Boolean ,default: true})\r\n\tpublic isIncludedReward?: boolean \r\n}\r\n "]}
|
|
@@ -1 +1 @@
|
|
|
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';\nimport { getModelForClass, ReturnModelType, mongoose } from '@typegoose/typegoose';\nimport { AnyParamConstructor } from '@typegoose/typegoose/lib/types';\nimport { GetByIdInputDTO } from '../../../utilities/validation';\n\n/**\n * Interface for models with soft delete capabilities\n */\nexport interface SoftDeleteModel<T> extends Model<T> {\n\tsoftDelete(_id: mongoose.Types.ObjectId): Promise<any>;\n\tsoftDeleteOne(filter: object): Promise<any>;\n\tsoftDeleteMany(filter?: object): Promise<any>;\n\tdeleteRecord(filter: object, softDelete: boolean): Promise<any>;\n\tdeleteRecords(filter: object, softDelete: boolean): Promise<any>;\n\trestore(_id: mongoose.Types.ObjectId): Promise<any>;\n\trestoreOne(filter: object): Promise<any>;\n\trestoreMany(filter?: object): Promise<any>;\n\tfindWithDeleted(filter?: object): any;\n\tfindDeleted(filter?: object): any;\n\tfindRecordById(data: GetByIdInputDTO): Promise<any>;\n}\n\n/**\n * Base class for models with soft delete functionality\n */\nexport class SoftDeleteBase {\n\tdeletedAt?: Date | null;\n}\n\n/**\n * SoftDelete class providing soft deletion functionality for mongoose models\n */\nexport class SoftDelete {\n\t/**\n\t * Apply soft delete plugin to a specific schema\n\t * @param schema Mongoose schema to enhance with soft delete functionality\n\t */\n\tpublic static applyToSchema(schema: Schema): void {\n\t\t// Add deletedAt field if it doesn't exist\n\t\tif (!schema.path('deletedAt')) {\n\t\t\tschema.add({\n\t\t\t\tdeletedAt: {\n\t\t\t\t\ttype: Date,\n\t\t\t\t\tdefault: null,\n\t\t\t\t\tindex: true,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\t// Add schema middleware\n\t\tthis.addQueryMiddleware(schema);\n\n\t\t// Add instance methods\n\t\tthis.addInstanceMethods(schema);\n\n\t\t// Add static methods\n\t\tthis.addStaticMethods(schema);\n\t}\n\n\t/**\n\t * Apply soft delete plugin globally to all mongoose schemas\n\t */\n\tpublic static applyGlobally(): void {\n\t\tconst mongoose = require('mongoose');\n\t\tmongoose.plugin((schema: Schema) => this.applyToSchema(schema));\n\t}\n\n\t/**\n\t * Create a model with soft delete capabilities and proper TypeScript types\n\t * @param modelClass The class to create a model from\n\t * @returns A model with soft delete functionality\n\t */\n\tpublic static createModel<T extends SoftDeleteBase>(\n\t\tmodelClass: AnyParamConstructor<T>\n\t): SoftDeleteModel<T> & ReturnModelType<AnyParamConstructor<T>> {\n\t\tconst model = getModelForClass(modelClass);\n\t\treturn model as any; // The plugin adds the methods, we just need to tell TypeScript they exist\n\t}\n\n\t/**\n\t * Add query middleware to filter out soft-deleted documents\n\t * @param schema Schema to add middleware to\n\t */\n\tprivate static addQueryMiddleware(schema: Schema): void {\n\t\tconst queryMiddleware = function (this: Query<any, any>) {\n\t\t\tif (!this.getQuery().deletedAt) {\n\t\t\t\tthis.where({ deletedAt: null });\n\t\t\t}\n\t\t};\n\n\t\t// Apply middleware to relevant query methods\n\t\tschema.pre('find', queryMiddleware);\n\t\tschema.pre('findOne', queryMiddleware);\n\t\tschema.pre('findOneAndUpdate', queryMiddleware);\n\t\tschema.pre('findOneAndDelete', queryMiddleware);\n\t\tschema.pre('findOneAndReplace', queryMiddleware);\n\t\tschema.pre('updateOne', queryMiddleware);\n\t\tschema.pre('updateMany', queryMiddleware);\n\t\t// TypeScript workaround for count hook\n\t\t(schema as any).pre('count', queryMiddleware);\n\t\tschema.pre('countDocuments', queryMiddleware);\n\t\t(schema as any).pre('exists', queryMiddleware);\n\n\t\t// Override findById to respect soft delete\n\t\tschema.statics.findById = function (_id: mongoose.Types.ObjectId, projection?: any, options?: any) {\n\t\t\treturn this.findOne({ _id, deletedAt: null }, projection, options);\n\t\t};\n\t}\n\n\t/**\n\t * Add instance methods for soft delete operations\n\t * @param schema Schema to add methods to\n\t */\n\tprivate static addInstanceMethods(schema: Schema): void {\n\t\tschema.methods.softDelete = function () {\n\t\t\tthis.deletedAt = new Date();\n\t\t\treturn this.save();\n\t\t};\n\n\t\tschema.methods.restore = function () {\n\t\t\tthis.deletedAt = null;\n\t\t\treturn this.save();\n\t\t};\n\t}\n\n\t/**\n\t * Add static methods for soft delete operations\n\t * @param schema Schema to add methods to\n\t */\n\tprivate static addStaticMethods(schema: Schema): void {\n\t\tschema.statics.softDelete = async function (_id: mongoose.Types.ObjectId) {\n\t\t\tconst result = await this.updateOne({ _id }, { deletedAt: new Date() });\n\t\t\treturn result.modifiedCount > 0;\n\t\t};\n\n\t\tschema.statics.softDeleteOne = async function (filter: object) {\n\t\t\tconst result = await this.updateOne(filter, { deletedAt: new Date() });\n\t\t\treturn result.modifiedCount > 0;\n\t\t};\n\n\t\tschema.statics.softDeleteMany = function (filter = {}) {\n\t\t\treturn this.updateMany(filter, { deletedAt: new Date() });\n\t\t};\n\n\t\tschema.statics.deleteRecord = async function (filter: object, softDelete: boolean) {\n\t\t\tif (softDelete) {\n\t\t\t\tconst result = await this.updateOne({ ...filter, deletedAt: null }, { deletedAt: new Date() }).lean();\n\t\t\t\treturn Boolean(result.modifiedCount);\n\t\t\t} else {\n\t\t\t\tconst result = await this.deleteOne(filter).lean();\n\t\t\t\treturn Boolean(result.deletedCount);\n\t\t\t}\n\t\t};\n\n\t\tschema.statics.deleteRecords = async function (filter: object, softDelete: boolean) {\n\t\t\tif (softDelete) {\n\t\t\t\tconst result = await this.updateMany(\n\t\t\t\t\t{ ...filter, deletedAt: null },\n\t\t\t\t\t{ deletedAt: new Date() }\n\t\t\t\t).lean();\n\t\t\t\treturn Boolean(result.modifiedCount);\n\t\t\t} else {\n\t\t\t\tconst result = await this.deleteMany(filter).lean();\n\t\t\t\treturn Boolean(result.deletedCount);\n\t\t\t}\n\t\t};\n\n\t\tschema.statics.restore = function (_id: mongoose.Types.ObjectId) {\n\t\t\treturn this.updateOne({ _id }, { deletedAt: null });\n\t\t};\n\n\t\tschema.statics.restoreOne = function (filter: object) {\n\t\t\treturn this.updateOne(filter, { deletedAt: null });\n\t\t};\n\n\t\tschema.statics.restoreMany = function (filter = {}) {\n\t\t\treturn this.updateMany(filter, { deletedAt: null });\n\t\t};\n\n\t\tschema.statics.findWithDeleted = function (filter = {}) {\n\t\t\treturn this.find(filter);\n\t\t};\n\n\t\tschema.statics.findDeleted = function (filter = {}) {\n\t\t\treturn this.find({ ...filter, deletedAt: { $ne: null } });\n\t\t};\n\n\t\tschema.statics.findRecordById = async function (data: GetByIdInputDTO) {\n\t\t\tconst { _id, select, populate } = data;\n\n\t\t\tlet result = this.findById(_id);\n\n\t\t\tif (select) {\n\t\t\t\tresult = result.select(select) as any;\n\t\t\t}\n\n\t\t\tif (populate) {\n\t\t\t\tresult = result.populate(populate);\n\t\t\t}\n\n\t\t\treturn await result.exec();\n\t\t};\n\t}\n}\n\n// Export convenience functions with the same names as before for backward compatibility\nexport const softDeletePlugin = (schema: Schema): void => SoftDelete.applyToSchema(schema);\nexport const applySoftDeletePlugin = (): void => SoftDelete.applyGlobally();\nexport const createSoftDeleteModel = <T extends SoftDeleteBase>(\n\tmodelClass: AnyParamConstructor<T>\n): SoftDeleteModel<T> & ReturnModelType<AnyParamConstructor<T>> => SoftDelete.createModel(modelClass);\n"]}
|
|
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 { GetByIdInputDTO } 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\tsoftDeleteOne(filter: object): Promise<any>;\r\n\tsoftDeleteMany(filter?: object): Promise<any>;\r\n\tdeleteRecord(filter: object, softDelete: boolean): Promise<any>;\r\n\tdeleteRecords(filter: object, softDelete: boolean): Promise<any>;\r\n\trestore(_id: mongoose.Types.ObjectId): Promise<any>;\r\n\trestoreOne(filter: object): Promise<any>;\r\n\trestoreMany(filter?: object): Promise<any>;\r\n\tfindWithDeleted(filter?: object): any;\r\n\tfindDeleted(filter?: object): any;\r\n\tfindRecordById(data: GetByIdInputDTO): Promise<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\t\t(schema as any).pre('exists', 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.softDeleteOne = async function (filter: object) {\r\n\t\t\tconst result = await this.updateOne(filter, { 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.deleteRecord = async function (filter: object, softDelete: boolean) {\r\n\t\t\tif (softDelete) {\r\n\t\t\t\tconst result = await this.updateOne({ ...filter, deletedAt: null }, { deletedAt: new Date() }).lean();\r\n\t\t\t\treturn Boolean(result.modifiedCount);\r\n\t\t\t} else {\r\n\t\t\t\tconst result = await this.deleteOne(filter).lean();\r\n\t\t\t\treturn Boolean(result.deletedCount);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tschema.statics.deleteRecords = async function (filter: object, softDelete: boolean) {\r\n\t\t\tif (softDelete) {\r\n\t\t\t\tconst result = await this.updateMany(\r\n\t\t\t\t\t{ ...filter, deletedAt: null },\r\n\t\t\t\t\t{ deletedAt: new Date() }\r\n\t\t\t\t).lean();\r\n\t\t\t\treturn Boolean(result.modifiedCount);\r\n\t\t\t} else {\r\n\t\t\t\tconst result = await this.deleteMany(filter).lean();\r\n\t\t\t\treturn Boolean(result.deletedCount);\r\n\t\t\t}\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.restoreOne = function (filter: object) {\r\n\t\t\treturn this.updateOne(filter, { 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\r\n\t\tschema.statics.findRecordById = async function (data: GetByIdInputDTO) {\r\n\t\t\tconst { _id, select, populate } = data;\r\n\r\n\t\t\tlet result = this.findById(_id);\r\n\r\n\t\t\tif (select) {\r\n\t\t\t\tresult = result.select(select) as any;\r\n\t\t\t}\r\n\r\n\t\t\tif (populate) {\r\n\t\t\t\tresult = result.populate(populate);\r\n\t\t\t}\r\n\r\n\t\t\treturn await result.exec();\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"]}
|
|
@@ -1 +1 @@
|
|
|
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';\nimport { Service } from 'typedi';\n\n@Service()\nexport class RedisService {\n\tprivate _redisClient!: Redis;\n\n\tconstructor(redisURL: string) {\n\t\tthis._redisClient = new Redis(redisURL);\n\t}\n\n\tget redisClient(): Redis {\n\t\treturn this._redisClient;\n\t}\n\n\tpublic async getCachedObject<T>(key: string): Promise<T | undefined> {\n\t\tconst usageResponse = await this._redisClient.get(key);\n\n\t\tif (usageResponse != undefined) {\n\t\t\treturn JSON.parse(usageResponse) as T;\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tpublic async cacheObject<T>(key: string, object: T, expiry?: number): Promise<boolean> {\n\t\tconst stringifiedObject = JSON.stringify(object);\n\n\t\tif (expiry) {\n\t\t\tawait this._redisClient.setex(key, expiry, stringifiedObject);\n\t\t} else {\n\t\t\tawait this._redisClient.set(key, stringifiedObject);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic async deleteCachedObject(key: string): Promise<boolean> {\n\t\tawait this._redisClient.del(key);\n\t\treturn true;\n\t}\n\n\tpublic async getCachedObjectByGroup<T>(group: string, key: string): Promise<T | undefined> {\n\t\tconst usageResponse = await this._redisClient.hget(group, key);\n\n\t\tif (usageResponse != undefined) {\n\t\t\treturn JSON.parse(usageResponse) as T;\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tpublic async setCachedObjectByGroup<T>(group: string, key: string, object: T): Promise<boolean> {\n\t\tconst stringifiedObject = JSON.stringify(object);\n\t\tawait this._redisClient.hset(group, key, stringifiedObject);\n\n\t\treturn true;\n\t}\n\n\tpublic async deleteCachedObjectByGroup<T>(group: string, key: string): Promise<boolean> {\n\t\tawait this._redisClient.hdel(group, key);\n\t\treturn true;\n\t}\n\n\tpublic sanitizeKey(key: string) {\n\t\treturn key\n\t\t\t.replace(/[^\\w\\s]/gi, '')\n\t\t\t.replace(/\\s+/g, '-')\n\t\t\t.toLowerCase();\n\t}\n}\n"]}
|
|
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 +1 @@
|
|
|
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,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3B,MAAM,yBAAyB,GAAG,IAAI,CAAC,qBAAqB,EAAE,OAAO,EAAE,WAAW,GAAG,GAAG,GAAG,GAAG,CAAC;QAE/F,OAAO,CAAC,GAAG,CAAC,gDAAgD,GAAG,yBAAyB,CAAC,CAAC;QAE1F,IAAI,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC;YACnG,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAC3D,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,EAC3D,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;YAErD,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;AA7DY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,gBAAO,GAAE;qCAMyB,oCAAoB,EAAgB,oBAAY;GALtE,oBAAoB,CA6DhC","sourcesContent":["import { SecretManagerServiceClient } from '@google-cloud/secret-manager';\nimport { Service } from 'typedi';\nimport { RedisService } from '../redis';\nimport { ConfigurationService } from '../configuration';\n\n@Service()\nexport class SecretManagerService {\n\tprivate _configurationService!: ConfigurationService;\n\tprivate _redisManager!: RedisService;\n\tprivate _client!: SecretManagerServiceClient;\n\n\tconstructor(configurationService: ConfigurationService, redisManager: RedisService) {\n\t\tthis._configurationService = configurationService;\n\t\tthis._redisManager = redisManager;\n\t\tthis._client = new SecretManagerServiceClient({\n\t\t\tcredentials: {\n\t\t\t\tclient_id: '107840895824406590900',\n\t\t\t\tprivate_key_id: 'ece1ebdfde57414700f23f1f4014f5e83d4f7644',\n\t\t\t\ttype: 'service_account',\n\t\t\t\tuniverse_domain: 'googleapis.com',\n\t\t\t\tprojectId: 'for-poc-325210',\n\t\t\t\tprivate_key:\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',\n\t\t\t\tclient_email: 'lyxa-core@for-poc-325210.iam.gserviceaccount.com',\n\t\t\t},\n\t\t});\n\t}\n\n\tpublic async getKey(key: string): Promise<string | undefined> {\n\t\tconsole.log(key, 'key---');\n\t\tconst environmentTransformedKey = this._configurationService?.options?.environment + '_' + key;\n\n\t\tconsole.log('Attempting to fetch the following secret key: ' + environmentTransformedKey);\n\n\t\ttry {\n\t\t\tconsole.log('Fetching from Redis...', this?._configurationService?.options?.environment + '_KEYS');\n\t\t\tconst data = await this._redisManager.getCachedObjectByGroup<string>(\n\t\t\t\tthis?._configurationService?.options?.environment + '_KEYS',\n\t\t\t\tkey\n\t\t\t);\n\n\t\t\tif (data != undefined) {\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\tconst [accessResponse] = await this._client.accessSecretVersion({\n\t\t\t\tname: 'projects/899369746265/secrets/' + environmentTransformedKey + '/versions/latest',\n\t\t\t});\n\n\t\t\tconst val = accessResponse.payload!.data!.toString();\n\n\t\t\tawait this.setKey(key, val);\n\n\t\t\treturn val;\n\t\t} catch (e) {\n\t\t\tconsole.error(e);\n\t\t}\n\t}\n\n\tpublic async setKey(key: string, value: string): Promise<string> {\n\t\tawait this._redisManager.setCachedObjectByGroup<string>(\n\t\t\tthis._configurationService.options.environment + '_KEYS',\n\t\t\tkey,\n\t\t\tvalue\n\t\t);\n\t\treturn value;\n\t}\n}\n"]}
|
|
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,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3B,MAAM,yBAAyB,GAAG,IAAI,CAAC,qBAAqB,EAAE,OAAO,EAAE,WAAW,GAAG,GAAG,GAAG,GAAG,CAAC;QAE/F,OAAO,CAAC,GAAG,CAAC,gDAAgD,GAAG,yBAAyB,CAAC,CAAC;QAE1F,IAAI,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC;YACnG,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAC3D,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,EAC3D,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;YAErD,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;AA7DY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,gBAAO,GAAE;qCAMyB,oCAAoB,EAAgB,oBAAY;GALtE,oBAAoB,CA6DhC","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\tconsole.log(key, 'key---');\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\tconsole.log('Fetching from Redis...', this?._configurationService?.options?.environment + '_KEYS');\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\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 +1 @@
|
|
|
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';\nimport { AuthEntityType } from '../auth';\nimport jwt from 'jsonwebtoken';\nimport { TokenType } from '../auth';\n\nexport interface EntityContext extends jwt.JwtPayload {\n\tid: string;\n\ttype: AuthEntityType;\n\tparameters: Record<string, unknown>;\n}\n\nexport interface LyxaContextParams {\n\tentity?: EntityContext;\n\trequestId?: string;\n\ttokenType?: TokenType;\n\tusedRefreshToken?: boolean;\n\ttokenRenewed?: boolean;\n}\n\nexport const createLyxaContext = async (\n\topts: CreateHTTPContextOptions\n): Promise<CreateHTTPContextOptions & LyxaContextParams> => {\n\treturn {\n\t\t...opts,\n\t\tentity: undefined,\n\t\trequestId: undefined,\n\t\ttokenType: undefined,\n\t\tusedRefreshToken: false,\n\t\ttokenRenewed: false,\n\t};\n};\n\nexport type LyxaContext = Awaited<ReturnType<typeof createLyxaContext>>;\n"]}
|
|
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;AACxC,6BAA+B;AAGlB,QAAA,CAAC,GAAG,iBAAQ,CAAC,OAAO,EAAe,CAAC,MAAM,CAAC;IACvD,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE;QAC9B,IAAI,SAAS,GAAG,IAAI,CAAC;QAErB,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,KAAK,YAAY,cAAQ,EAAE,CAAC;YACrE,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACxC,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC;QACnC,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QAE5D,OAAO;YACN,GAAG,KAAK;YACR,OAAO,EACN,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ;gBACzC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO;gBACnD,CAAC,CAAC,KAAK,CAAC,OAAO;YACjB,IAAI,EAAE;gBACL,GAAG,KAAK,CAAC,IAAI;gBAEb,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE,SAAS;aACf;YAED,KAAK,EAAE,SAAS;SAChB,CAAC;IACH,CAAC;CACD,CAAC,CAAC;AAEU,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';\nimport { ZodError } from 'zod';\nimport { LyxaContext } from './context';\n\nexport const t = initTRPC.context<LyxaContext>().create({\n\terrorFormatter({ shape, error }) {\n\t\tlet zodErrors = null;\n\n\t\tif (error.code === 'BAD_REQUEST' && error.cause instanceof ZodError) {\n\t\t\tconst flattened = error.cause.flatten();\n\t\t\tzodErrors = flattened.fieldErrors;\n\t\t}\n\n\t\tconsole.log('Error:', error, shape, 'error log', zodErrors);\n\n\t\treturn {\n\t\t\t...shape,\n\t\t\tmessage:\n\t\t\t\tzodErrors && typeof zodErrors === 'object'\n\t\t\t\t\t? Object.values(zodErrors)[0]?.[0] || shape.message\n\t\t\t\t\t: shape.message,\n\t\t\tdata: {\n\t\t\t\t...shape.data,\n\n\t\t\t\tstack: undefined,\n\t\t\t\tpath: undefined,\n\t\t\t},\n\t\t\t// Prevent stack trace from being returned in the response\n\t\t\tstack: undefined,\n\t\t};\n\t},\n});\n\nexport const publicProcedure = t.procedure;\nexport const createTRPCRouter = t.router;\nexport const createCallerFactory = t.createCallerFactory;\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"/","sources":["libraries/trpc/index.ts"],"names":[],"mappings":";;;AAAA,yCAAwC;AACxC,6BAA+B;AAGlB,QAAA,CAAC,GAAG,iBAAQ,CAAC,OAAO,EAAe,CAAC,MAAM,CAAC;IACvD,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE;QAC9B,IAAI,SAAS,GAAG,IAAI,CAAC;QAErB,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,KAAK,YAAY,cAAQ,EAAE,CAAC;YACrE,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACxC,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC;QACnC,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QAE5D,OAAO;YACN,GAAG,KAAK;YACR,OAAO,EACN,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ;gBACzC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO;gBACnD,CAAC,CAAC,KAAK,CAAC,OAAO;YACjB,IAAI,EAAE;gBACL,GAAG,KAAK,CAAC,IAAI;gBAEb,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE,SAAS;aACf;YAED,KAAK,EAAE,SAAS;SAChB,CAAC;IACH,CAAC;CACD,CAAC,CAAC;AAEU,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 { ZodError } from 'zod';\r\nimport { LyxaContext } from './context';\r\n\r\nexport const t = initTRPC.context<LyxaContext>().create({\r\n\terrorFormatter({ shape, error }) {\r\n\t\tlet zodErrors = null;\r\n\r\n\t\tif (error.code === 'BAD_REQUEST' && error.cause instanceof ZodError) {\r\n\t\t\tconst flattened = error.cause.flatten();\r\n\t\t\tzodErrors = flattened.fieldErrors;\r\n\t\t}\r\n\r\n\t\tconsole.log('Error:', error, shape, 'error log', zodErrors);\r\n\r\n\t\treturn {\r\n\t\t\t...shape,\r\n\t\t\tmessage:\r\n\t\t\t\tzodErrors && typeof zodErrors === 'object'\r\n\t\t\t\t\t? Object.values(zodErrors)[0]?.[0] || shape.message\r\n\t\t\t\t\t: shape.message,\r\n\t\t\tdata: {\r\n\t\t\t\t...shape.data,\r\n\r\n\t\t\t\tstack: undefined,\r\n\t\t\t\tpath: undefined,\r\n\t\t\t},\r\n\t\t\t// Prevent stack trace from being returned in the response\r\n\t\t\tstack: undefined,\r\n\t\t};\r\n\t},\r\n});\r\n\r\nexport const publicProcedure = t.procedure;\r\nexport const createTRPCRouter = t.router;\r\nexport const createCallerFactory = t.createCallerFactory;\r\n"]}
|
|
@@ -24,12 +24,12 @@ export declare function createAuthenticatedProcedure(options: AuthOptions): impo
|
|
|
24
24
|
_meta: object;
|
|
25
25
|
_ctx_out: {
|
|
26
26
|
requestId: string | undefined;
|
|
27
|
-
res: import("http").ServerResponse<import("http").IncomingMessage>;
|
|
28
|
-
tokenType: TokenType | undefined;
|
|
29
27
|
entity: import("../context").EntityContext | undefined;
|
|
30
|
-
|
|
28
|
+
tokenType: TokenType | undefined;
|
|
31
29
|
usedRefreshToken: boolean | undefined;
|
|
32
30
|
tokenRenewed: boolean | undefined;
|
|
31
|
+
req: import("http").IncomingMessage;
|
|
32
|
+
res: import("http").ServerResponse<import("http").IncomingMessage>;
|
|
33
33
|
};
|
|
34
34
|
_input_in: typeof import("@trpc/server").unsetMarker;
|
|
35
35
|
_input_out: typeof import("@trpc/server").unsetMarker;
|
|
@@ -1 +1 @@
|
|
|
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';\nimport { publicProcedure } from '../index';\nimport {\n\tAuthEntityType,\n\tverifyAccessToken,\n\tvalidateRefreshToken,\n\tsignAccessToken,\n\tTokenType,\n\trefreshTokens,\n\thandleTokenRenewal,\n} from '../../auth';\nimport { UserModel } from '../../mongo/models';\n\ninterface AuthOptions {\n\tentityTypes: AuthEntityType[];\n\tallowRefreshToken?: boolean;\n\tautoRefresh?: boolean;\n}\n\n/**\n * A factory that creates an authenticated procedure, optionally allowing\n * refresh tokens and auto-refreshing expired access tokens.\n */\nexport function createAuthenticatedProcedure(options: AuthOptions) {\n\tconst { entityTypes, allowRefreshToken = true, autoRefresh = true } = options;\n\n\treturn publicProcedure.use(async ({ ctx, next }) => {\n\t\tconst authHeader = ctx.req.headers['authorization'];\n\t\tconst refreshTokenHeader = ctx.req.headers['x-refresh-token'];\n\n\t\tif (!authHeader) {\n\t\t\tthrow new TRPCError({ code: 'UNAUTHORIZED', message: 'No authorization header' });\n\t\t}\n\n\t\tconst accessToken = authHeader.replace(/^Bearer\\s+/, '');\n\t\tlet refreshToken = '';\n\n\t\tif (refreshTokenHeader) {\n\t\t\trefreshToken =\n\t\t\t\ttypeof refreshTokenHeader === 'string'\n\t\t\t\t\t? refreshTokenHeader.replace(/^Bearer\\s+/, '')\n\t\t\t\t\t: refreshTokenHeader[0].replace(/^Bearer\\s+/, '');\n\t\t}\n\n\t\tif (!accessToken) {\n\t\t\tthrow new TRPCError({ code: 'UNAUTHORIZED', message: 'Missing access token' });\n\t\t}\n\n\t\tlet entity = await verifyAccessToken(entityTypes, accessToken);\n\n\t\tif (entity?.type == 'USER') {\n\t\t\tconst user = await UserModel.findOne({ _id: entity.id });\n\t\t\tif (!user) {\n\t\t\t\tthrow new TRPCError({ code: 'UNAUTHORIZED', message: 'User not found' });\n\t\t\t}\n\t\t}\n\t\tif (entity) {\n\t\t\tctx.entity = entity;\n\t\t\tctx.tokenType = TokenType.ACCESS;\n\t\t\tctx.usedRefreshToken = false;\n\t\t\tctx.tokenRenewed = false;\n\t\t\treturn next({ ctx });\n\t\t}\n\n\t\tif (!allowRefreshToken || !refreshToken) {\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'UNAUTHORIZED',\n\t\t\t\tmessage: 'Invalid access token',\n\t\t\t});\n\t\t}\n\n\t\tconst renewalResult = await handleTokenRenewal(refreshToken);\n\n\t\tif (!renewalResult.success) {\n\t\t\tconst errorMessage =\n\t\t\t\trenewalResult.tokenStatus === 'revoked' ? 'Refresh token has been revoked' : 'Invalid refresh token';\n\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'UNAUTHORIZED',\n\t\t\t\tmessage: errorMessage,\n\t\t\t});\n\t\t}\n\n\t\tif (!entityTypes.includes(renewalResult.entity!.type)) {\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'UNAUTHORIZED',\n\t\t\t\tmessage: 'Unauthorized entity type',\n\t\t\t});\n\t\t}\n\n\t\tctx.entity = renewalResult.entity;\n\t\tctx.tokenType = TokenType.REFRESH;\n\t\tctx.usedRefreshToken = true;\n\n\t\tctx.tokenRenewed = renewalResult.tokenStatus === 'expired';\n\n\t\tif (autoRefresh && renewalResult.newTokens) {\n\t\t\tif (renewalResult.newTokens.accessToken) {\n\t\t\t\tctx.res.setHeader('X-New-Access-Token', renewalResult.newTokens.accessToken);\n\t\t\t}\n\n\t\t\tif (renewalResult.newTokens.refreshToken) {\n\t\t\t\tctx.res.setHeader('X-New-Refresh-Token', renewalResult.newTokens.refreshToken);\n\t\t\t}\n\t\t}\n\n\t\treturn next({ ctx });\n\t});\n}\n"]}
|
|
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\nimport { UserModel } from '../../mongo/models';\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?.type == 'USER') {\r\n\t\t\tconst user = await UserModel.findOne({ _id: entity.id });\r\n\t\t\tif (!user) {\r\n\t\t\t\tthrow new TRPCError({ code: 'UNAUTHORIZED', message: 'User not found' });\r\n\t\t\t}\r\n\t\t}\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"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cors.js","sourceRoot":"/","sources":["libraries/trpc/middlewares/cors.ts"],"names":[],"mappings":";;AAqBA,wCA6DC;AA7DD,SAAgB,cAAc,CAAC,UAAuB,EAAE;IAEvD,MAAM,MAAM,GAA0B;QACrC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,GAAG;QAC7B,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,CAAC,oBAAoB,CAAC;QAClD,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,KAAK;QACzC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;QAC/B,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,IAAI,KAAK;QACrD,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,CAAC,cAAc,EAAE,eAAe,EAAE,kBAAkB,EAAE,iBAAiB,CAAC;QAClH,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,CAAC,eAAe,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,qBAAqB,CAAC;KAC3H,CAAC;IAGF,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;IACjG,MAAM,oBAAoB,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC;QAChE,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;QAClC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC;IACzB,MAAM,oBAAoB,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC;QAChE,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;QAClC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC;IAGzB,OAAO,CAAC,GAAoB,EAAE,GAAmB,EAAE,IAAgB,EAAE,EAAE;QACtE,IAAI,CAAC;YAEJ,GAAG,CAAC,SAAS,CAAC,6BAA6B,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAG5D,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC9B,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,aAAa,CAAC,CAAC;gBAC7D,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,oBAAoB,CAAC,CAAC;gBAEpE,IAAI,oBAAoB,EAAE,CAAC;oBAC1B,GAAG,CAAC,SAAS,CAAC,+BAA+B,EAAE,oBAAoB,CAAC,CAAC;gBACtE,CAAC;gBAED,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;oBACxB,GAAG,CAAC,SAAS,CAAC,kCAAkC,EAAE,MAAM,CAAC,CAAC;gBAC3D,CAAC;gBAED,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBACnB,GAAG,CAAC,SAAS,CAAC,wBAAwB,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACnE,CAAC;YACF,CAAC;YAGD,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC9B,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACnB,GAAG,CAAC,GAAG,EAAE,CAAC;gBACV,OAAO;YACR,CAAC;YAGD,IAAI,EAAE,CAAC;QACR,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAEhB,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;YAE/C,IAAI,EAAE,CAAC;QACR,CAAC;IACF,CAAC,CAAC;AACH,CAAC","sourcesContent":["import type { IncomingMessage, ServerResponse } from 'http';\n\n/**\n * Interface for CORS middleware options\n */\ninterface CorsOptions {\n\torigin?: string | string[];\n\tmethods?: string[];\n\tallowedHeaders?: string[];\n\texposedHeaders?: string[];\n\tcredentials?: boolean;\n\tmaxAge?: number;\n\tpreflightContinue?: boolean;\n}\n\n/**\n * Creates a configurable CORS middleware for tRPC applications\n *\n * @param options Configuration options for CORS\n * @returns A middleware function for handling CORS\n */\nexport function corsMiddleware(options: CorsOptions = {}) {\n\t// Default configuration with sensible values\n\tconst config: Required<CorsOptions> = {\n\t\torigin: options.origin || '*',\n\t\tmethods: options.methods || ['GET, POST, OPTIONS'],\n\t\tcredentials: options.credentials || false,\n\t\tmaxAge: options.maxAge || 86400, // 24 hours\n\t\tpreflightContinue: options.preflightContinue || false,\n\t\tallowedHeaders: options.allowedHeaders || ['Content-Type', 'Authorization', 'X-Requested-With', 'x-refresh-token'],\n\t\texposedHeaders: options.exposedHeaders || ['Content-Range', 'X-Content-Range', 'X-New-Access-Token', 'X-New-Refresh-Token'],\n\t};\n\n\t// Convert arrays to comma-separated strings for header values\n\tconst methodsString = Array.isArray(config.methods) ? config.methods.join(', ') : config.methods;\n\tconst allowedHeadersString = Array.isArray(config.allowedHeaders)\n\t\t? config.allowedHeaders.join(', ')\n\t\t: config.allowedHeaders;\n\tconst exposedHeadersString = Array.isArray(config.exposedHeaders)\n\t\t? config.exposedHeaders.join(', ')\n\t\t: config.exposedHeaders;\n\n\t// Return the middleware function\n\treturn (req: IncomingMessage, res: ServerResponse, next: () => void) => {\n\t\ttry {\n\t\t\t// Always set the CORS headers\n\t\t\tres.setHeader('Access-Control-Allow-Origin', config.origin);\n\n\t\t\t// Only set other headers if origin is not blocking the request\n\t\t\tif (config.origin !== 'none') {\n\t\t\t\tres.setHeader('Access-Control-Allow-Methods', methodsString);\n\t\t\t\tres.setHeader('Access-Control-Allow-Headers', allowedHeadersString);\n\n\t\t\t\tif (exposedHeadersString) {\n\t\t\t\t\tres.setHeader('Access-Control-Expose-Headers', exposedHeadersString);\n\t\t\t\t}\n\n\t\t\t\tif (config.credentials) {\n\t\t\t\t\tres.setHeader('Access-Control-Allow-Credentials', 'true');\n\t\t\t\t}\n\n\t\t\t\tif (config.maxAge) {\n\t\t\t\t\tres.setHeader('Access-Control-Max-Age', config.maxAge.toString());\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Handle OPTIONS preflight requests\n\t\t\tif (req.method === 'OPTIONS') {\n\t\t\t\tres.writeHead(204); // 204 No Content is more appropriate for preflight\n\t\t\t\tres.end();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Move to the next middleware\n\t\t\tnext();\n\t\t} catch (error) {\n\t\t\t// Handle any errors that might occur\n\t\t\tconsole.error('CORS middleware error:', error);\n\t\t\t// Call next without the error as it expects no arguments\n\t\t\tnext();\n\t\t}\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"cors.js","sourceRoot":"/","sources":["libraries/trpc/middlewares/cors.ts"],"names":[],"mappings":";;AAqBA,wCA6DC;AA7DD,SAAgB,cAAc,CAAC,UAAuB,EAAE;IAEvD,MAAM,MAAM,GAA0B;QACrC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,GAAG;QAC7B,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,CAAC,oBAAoB,CAAC;QAClD,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,KAAK;QACzC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;QAC/B,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,IAAI,KAAK;QACrD,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,CAAC,cAAc,EAAE,eAAe,EAAE,kBAAkB,EAAE,iBAAiB,CAAC;QAClH,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,CAAC,eAAe,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,qBAAqB,CAAC;KAC3H,CAAC;IAGF,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;IACjG,MAAM,oBAAoB,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC;QAChE,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;QAClC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC;IACzB,MAAM,oBAAoB,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC;QAChE,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;QAClC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC;IAGzB,OAAO,CAAC,GAAoB,EAAE,GAAmB,EAAE,IAAgB,EAAE,EAAE;QACtE,IAAI,CAAC;YAEJ,GAAG,CAAC,SAAS,CAAC,6BAA6B,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAG5D,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC9B,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,aAAa,CAAC,CAAC;gBAC7D,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,oBAAoB,CAAC,CAAC;gBAEpE,IAAI,oBAAoB,EAAE,CAAC;oBAC1B,GAAG,CAAC,SAAS,CAAC,+BAA+B,EAAE,oBAAoB,CAAC,CAAC;gBACtE,CAAC;gBAED,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;oBACxB,GAAG,CAAC,SAAS,CAAC,kCAAkC,EAAE,MAAM,CAAC,CAAC;gBAC3D,CAAC;gBAED,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBACnB,GAAG,CAAC,SAAS,CAAC,wBAAwB,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACnE,CAAC;YACF,CAAC;YAGD,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC9B,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACnB,GAAG,CAAC,GAAG,EAAE,CAAC;gBACV,OAAO;YACR,CAAC;YAGD,IAAI,EAAE,CAAC;QACR,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAEhB,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;YAE/C,IAAI,EAAE,CAAC;QACR,CAAC;IACF,CAAC,CAAC;AACH,CAAC","sourcesContent":["import type { IncomingMessage, ServerResponse } from 'http';\r\n\r\n/**\r\n * Interface for CORS middleware options\r\n */\r\ninterface CorsOptions {\r\n\torigin?: string | string[];\r\n\tmethods?: string[];\r\n\tallowedHeaders?: string[];\r\n\texposedHeaders?: string[];\r\n\tcredentials?: boolean;\r\n\tmaxAge?: number;\r\n\tpreflightContinue?: boolean;\r\n}\r\n\r\n/**\r\n * Creates a configurable CORS middleware for tRPC applications\r\n *\r\n * @param options Configuration options for CORS\r\n * @returns A middleware function for handling CORS\r\n */\r\nexport function corsMiddleware(options: CorsOptions = {}) {\r\n\t// Default configuration with sensible values\r\n\tconst config: Required<CorsOptions> = {\r\n\t\torigin: options.origin || '*',\r\n\t\tmethods: options.methods || ['GET, POST, OPTIONS'],\r\n\t\tcredentials: options.credentials || false,\r\n\t\tmaxAge: options.maxAge || 86400, // 24 hours\r\n\t\tpreflightContinue: options.preflightContinue || false,\r\n\t\tallowedHeaders: options.allowedHeaders || ['Content-Type', 'Authorization', 'X-Requested-With', 'x-refresh-token'],\r\n\t\texposedHeaders: options.exposedHeaders || ['Content-Range', 'X-Content-Range', 'X-New-Access-Token', 'X-New-Refresh-Token'],\r\n\t};\r\n\r\n\t// Convert arrays to comma-separated strings for header values\r\n\tconst methodsString = Array.isArray(config.methods) ? config.methods.join(', ') : config.methods;\r\n\tconst allowedHeadersString = Array.isArray(config.allowedHeaders)\r\n\t\t? config.allowedHeaders.join(', ')\r\n\t\t: config.allowedHeaders;\r\n\tconst exposedHeadersString = Array.isArray(config.exposedHeaders)\r\n\t\t? config.exposedHeaders.join(', ')\r\n\t\t: config.exposedHeaders;\r\n\r\n\t// Return the middleware function\r\n\treturn (req: IncomingMessage, res: ServerResponse, next: () => void) => {\r\n\t\ttry {\r\n\t\t\t// Always set the CORS headers\r\n\t\t\tres.setHeader('Access-Control-Allow-Origin', config.origin);\r\n\r\n\t\t\t// Only set other headers if origin is not blocking the request\r\n\t\t\tif (config.origin !== 'none') {\r\n\t\t\t\tres.setHeader('Access-Control-Allow-Methods', methodsString);\r\n\t\t\t\tres.setHeader('Access-Control-Allow-Headers', allowedHeadersString);\r\n\r\n\t\t\t\tif (exposedHeadersString) {\r\n\t\t\t\t\tres.setHeader('Access-Control-Expose-Headers', exposedHeadersString);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (config.credentials) {\r\n\t\t\t\t\tres.setHeader('Access-Control-Allow-Credentials', 'true');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (config.maxAge) {\r\n\t\t\t\t\tres.setHeader('Access-Control-Max-Age', config.maxAge.toString());\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Handle OPTIONS preflight requests\r\n\t\t\tif (req.method === 'OPTIONS') {\r\n\t\t\t\tres.writeHead(204); // 204 No Content is more appropriate for preflight\r\n\t\t\t\tres.end();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Move to the next middleware\r\n\t\t\tnext();\r\n\t\t} catch (error) {\r\n\t\t\t// Handle any errors that might occur\r\n\t\t\tconsole.error('CORS middleware error:', error);\r\n\t\t\t// Call next without the error as it expects no arguments\r\n\t\t\tnext();\r\n\t\t}\r\n\t};\r\n}\r\n"]}
|
|
@@ -22,12 +22,12 @@ export declare function createPhoneVerifiedProcedure(options: PhoneVerifiedOptio
|
|
|
22
22
|
_meta: object;
|
|
23
23
|
_ctx_out: {
|
|
24
24
|
requestId: string | undefined;
|
|
25
|
-
res: import("http").ServerResponse<import("http").IncomingMessage>;
|
|
26
|
-
tokenType: import("../../auth").TokenType | undefined;
|
|
27
25
|
entity: import("../context").EntityContext | undefined;
|
|
28
|
-
|
|
26
|
+
tokenType: import("../../auth").TokenType | undefined;
|
|
29
27
|
usedRefreshToken: boolean | undefined;
|
|
30
28
|
tokenRenewed: boolean | undefined;
|
|
29
|
+
req: import("http").IncomingMessage;
|
|
30
|
+
res: import("http").ServerResponse<import("http").IncomingMessage>;
|
|
31
31
|
};
|
|
32
32
|
_input_in: typeof import("@trpc/server").unsetMarker;
|
|
33
33
|
_input_out: typeof import("@trpc/server").unsetMarker;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phone-verified.js","sourceRoot":"/","sources":["libraries/trpc/middlewares/phone-verified.ts"],"names":[],"mappings":";;AAaA,oEAkBC;AA/BD,yCAAyC;AACzC,iCAAsD;AAEtD,+CAA+C;AAU/C,SAAgB,4BAA4B,CAAC,OAA6B;IACzE,OAAO,IAAA,mCAA4B,EAAC,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE;QACxE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,kBAAS,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC,CAAC;QAClF,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,kBAAS,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,MAAM,IAAI,kBAAS,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,eAAe;YACxB,MAAM,IAAI,kBAAS,CAAC;gBACnB,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,yDAAyD;aAClE,CAAC,CAAC;QAEJ,OAAO,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { TRPCError } from '@trpc/server';\nimport { createAuthenticatedProcedure } from './auth'; // Adjust import path!\nimport { AuthEntityType } from '../../auth';\nimport { UserModel } from '../../mongo/models';\n\ninterface PhoneVerifiedOptions {\n\tentityTypes: AuthEntityType[];\n}\n\n/**\n * A factory that creates a procedure requiring a verified phone number,\n * ensuring the user is authenticated and their phone is verified.\n */\nexport function createPhoneVerifiedProcedure(options: PhoneVerifiedOptions) {\n\treturn createAuthenticatedProcedure(options).use(async ({ ctx, next }) => {\n\t\tif (!ctx.entity) {\n\t\t\tthrow new TRPCError({ code: 'UNAUTHORIZED', message: 'User not authenticated' });\n\t\t}\n\n\t\tconst user = await UserModel.findOne({ _id: ctx.entity.id });\n\t\tif (!user) {\n\t\t\tthrow new TRPCError({ code: 'UNAUTHORIZED', message: 'User not found' });\n\t\t}\n\t\tif (!user.isPhoneVerified)\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'FORBIDDEN',\n\t\t\t\tmessage: 'Please verify your phone number to access this resource',\n\t\t\t});\n\n\t\treturn next({ ctx });\n\t});\n}\n"]}
|
|
1
|
+
{"version":3,"file":"phone-verified.js","sourceRoot":"/","sources":["libraries/trpc/middlewares/phone-verified.ts"],"names":[],"mappings":";;AAaA,oEAkBC;AA/BD,yCAAyC;AACzC,iCAAsD;AAEtD,+CAA+C;AAU/C,SAAgB,4BAA4B,CAAC,OAA6B;IACzE,OAAO,IAAA,mCAA4B,EAAC,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE;QACxE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,kBAAS,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC,CAAC;QAClF,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,kBAAS,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,MAAM,IAAI,kBAAS,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,eAAe;YACxB,MAAM,IAAI,kBAAS,CAAC;gBACnB,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,yDAAyD;aAClE,CAAC,CAAC;QAEJ,OAAO,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { TRPCError } from '@trpc/server';\r\nimport { createAuthenticatedProcedure } from './auth'; // Adjust import path!\r\nimport { AuthEntityType } from '../../auth';\r\nimport { UserModel } from '../../mongo/models';\r\n\r\ninterface PhoneVerifiedOptions {\r\n\tentityTypes: AuthEntityType[];\r\n}\r\n\r\n/**\r\n * A factory that creates a procedure requiring a verified phone number,\r\n * ensuring the user is authenticated and their phone is verified.\r\n */\r\nexport function createPhoneVerifiedProcedure(options: PhoneVerifiedOptions) {\r\n\treturn createAuthenticatedProcedure(options).use(async ({ ctx, next }) => {\r\n\t\tif (!ctx.entity) {\r\n\t\t\tthrow new TRPCError({ code: 'UNAUTHORIZED', message: 'User not authenticated' });\r\n\t\t}\r\n\r\n\t\tconst user = await UserModel.findOne({ _id: ctx.entity.id });\r\n\t\tif (!user) {\r\n\t\t\tthrow new TRPCError({ code: 'UNAUTHORIZED', message: 'User not found' });\r\n\t\t}\r\n\t\tif (!user.isPhoneVerified)\r\n\t\t\tthrow new TRPCError({\r\n\t\t\t\tcode: 'FORBIDDEN',\r\n\t\t\t\tmessage: 'Please verify your phone number to access this resource',\r\n\t\t\t});\r\n\r\n\t\treturn next({ ctx });\r\n\t});\r\n}\r\n"]}
|
|
@@ -24,12 +24,12 @@ export declare function publicUserDecoder(options: AuthOptions): import("@trpc/s
|
|
|
24
24
|
_meta: object;
|
|
25
25
|
_ctx_out: {
|
|
26
26
|
requestId: string | undefined;
|
|
27
|
-
res: import("http").ServerResponse<import("http").IncomingMessage>;
|
|
28
|
-
tokenType: TokenType | undefined;
|
|
29
27
|
entity: import("../context").EntityContext | undefined;
|
|
30
|
-
|
|
28
|
+
tokenType: TokenType | undefined;
|
|
31
29
|
usedRefreshToken: boolean | undefined;
|
|
32
30
|
tokenRenewed: boolean | undefined;
|
|
31
|
+
req: import("http").IncomingMessage;
|
|
32
|
+
res: import("http").ServerResponse<import("http").IncomingMessage>;
|
|
33
33
|
};
|
|
34
34
|
_input_in: typeof import("@trpc/server").unsetMarker;
|
|
35
35
|
_input_out: typeof import("@trpc/server").unsetMarker;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publicUserDecoder.js","sourceRoot":"/","sources":["libraries/trpc/middlewares/publicUserDecoder.ts"],"names":[],"mappings":"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","sourcesContent":["import { TRPCError } from '@trpc/server';\nimport { publicProcedure } from '../index';\nimport {\n AuthEntityType,\n verifyAccessToken,\n TokenType,\n handleTokenRenewal,\n} from '../../auth';\n\ninterface AuthOptions {\n entityTypes: AuthEntityType[];\n allowRefreshToken?: boolean;\n autoRefresh?: boolean;\n}\n\n/**\n * A factory that creates an authenticated procedure, optionally allowing\n * refresh tokens and auto-refreshing expired access tokens.\n */\nexport function publicUserDecoder(options: AuthOptions) {\n const { entityTypes, allowRefreshToken = true, autoRefresh = true } = options;\n\n return publicProcedure.use(async ({ ctx, next }) => {\n const authHeader = ctx.req.headers['authorization'];\n if (!authHeader) {\n return next({ ctx });\n } else {\n const refreshTokenHeader = ctx.req.headers['x-refresh-token'];\n\n if (!authHeader) {\n throw new TRPCError({ code: 'UNAUTHORIZED', message: 'No authorization header' });\n }\n\n const accessToken = authHeader.replace(/^Bearer\\s+/, '');\n let refreshToken = '';\n\n if (refreshTokenHeader) {\n refreshToken =\n typeof refreshTokenHeader === 'string'\n ? refreshTokenHeader.replace(/^Bearer\\s+/, '')\n : refreshTokenHeader[0].replace(/^Bearer\\s+/, '');\n }\n\n if (!accessToken) {\n throw new TRPCError({ code: 'UNAUTHORIZED', message: 'Missing access token' });\n }\n\n let entity = await verifyAccessToken(entityTypes, accessToken);\n\n if (entity) {\n ctx.entity = entity;\n ctx.tokenType = TokenType.ACCESS;\n ctx.usedRefreshToken = false;\n ctx.tokenRenewed = false;\n return next({ ctx });\n }\n\n if (!allowRefreshToken || !refreshToken) {\n throw new TRPCError({\n code: 'UNAUTHORIZED',\n message: 'Invalid access token',\n });\n }\n\n const renewalResult = await handleTokenRenewal(refreshToken);\n\n if (!renewalResult.success) {\n const errorMessage =\n renewalResult.tokenStatus === 'revoked' ? 'Refresh token has been revoked' : 'Invalid refresh token';\n\n throw new TRPCError({\n code: 'UNAUTHORIZED',\n message: errorMessage,\n });\n }\n\n if (!entityTypes.includes(renewalResult.entity!.type)) {\n throw new TRPCError({\n code: 'UNAUTHORIZED',\n message: 'Unauthorized entity type',\n });\n }\n\n ctx.entity = renewalResult.entity;\n ctx.tokenType = TokenType.REFRESH;\n ctx.usedRefreshToken = true;\n\n ctx.tokenRenewed = renewalResult.tokenStatus === 'expired';\n\n if (autoRefresh && renewalResult.newTokens) {\n if (renewalResult.newTokens.accessToken) {\n ctx.res.setHeader('X-New-Access-Token', renewalResult.newTokens.accessToken);\n }\n\n if (renewalResult.newTokens.refreshToken) {\n ctx.res.setHeader('X-New-Refresh-Token', renewalResult.newTokens.refreshToken);\n }\n }\n\n return next({ ctx });\n }\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"publicUserDecoder.js","sourceRoot":"/","sources":["libraries/trpc/middlewares/publicUserDecoder.ts"],"names":[],"mappings":"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","sourcesContent":["import { TRPCError } from '@trpc/server';\r\nimport { publicProcedure } from '../index';\r\nimport {\r\n AuthEntityType,\r\n verifyAccessToken,\r\n TokenType,\r\n handleTokenRenewal,\r\n} from '../../auth';\r\n\r\ninterface AuthOptions {\r\n entityTypes: AuthEntityType[];\r\n allowRefreshToken?: boolean;\r\n autoRefresh?: 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 publicUserDecoder(options: AuthOptions) {\r\n const { entityTypes, allowRefreshToken = true, autoRefresh = true } = options;\r\n\r\n return publicProcedure.use(async ({ ctx, next }) => {\r\n const authHeader = ctx.req.headers['authorization'];\r\n if (!authHeader) {\r\n return next({ ctx });\r\n } else {\r\n const refreshTokenHeader = ctx.req.headers['x-refresh-token'];\r\n\r\n if (!authHeader) {\r\n throw new TRPCError({ code: 'UNAUTHORIZED', message: 'No authorization header' });\r\n }\r\n\r\n const accessToken = authHeader.replace(/^Bearer\\s+/, '');\r\n let refreshToken = '';\r\n\r\n if (refreshTokenHeader) {\r\n refreshToken =\r\n typeof refreshTokenHeader === 'string'\r\n ? refreshTokenHeader.replace(/^Bearer\\s+/, '')\r\n : refreshTokenHeader[0].replace(/^Bearer\\s+/, '');\r\n }\r\n\r\n if (!accessToken) {\r\n throw new TRPCError({ code: 'UNAUTHORIZED', message: 'Missing access token' });\r\n }\r\n\r\n let entity = await verifyAccessToken(entityTypes, accessToken);\r\n\r\n if (entity) {\r\n ctx.entity = entity;\r\n ctx.tokenType = TokenType.ACCESS;\r\n ctx.usedRefreshToken = false;\r\n ctx.tokenRenewed = false;\r\n return next({ ctx });\r\n }\r\n\r\n if (!allowRefreshToken || !refreshToken) {\r\n throw new TRPCError({\r\n code: 'UNAUTHORIZED',\r\n message: 'Invalid access token',\r\n });\r\n }\r\n\r\n const renewalResult = await handleTokenRenewal(refreshToken);\r\n\r\n if (!renewalResult.success) {\r\n const errorMessage =\r\n renewalResult.tokenStatus === 'revoked' ? 'Refresh token has been revoked' : 'Invalid refresh token';\r\n\r\n throw new TRPCError({\r\n code: 'UNAUTHORIZED',\r\n message: errorMessage,\r\n });\r\n }\r\n\r\n if (!entityTypes.includes(renewalResult.entity!.type)) {\r\n throw new TRPCError({\r\n code: 'UNAUTHORIZED',\r\n message: 'Unauthorized entity type',\r\n });\r\n }\r\n\r\n ctx.entity = renewalResult.entity;\r\n ctx.tokenType = TokenType.REFRESH;\r\n ctx.usedRefreshToken = true;\r\n\r\n ctx.tokenRenewed = renewalResult.tokenStatus === 'expired';\r\n\r\n if (autoRefresh && renewalResult.newTokens) {\r\n if (renewalResult.newTokens.accessToken) {\r\n ctx.res.setHeader('X-New-Access-Token', renewalResult.newTokens.accessToken);\r\n }\r\n\r\n if (renewalResult.newTokens.refreshToken) {\r\n ctx.res.setHeader('X-New-Refresh-Token', renewalResult.newTokens.refreshToken);\r\n }\r\n }\r\n\r\n return next({ ctx });\r\n }\r\n });\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"/","sources":["libraries/twilio/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,mCAAiC;AACjC,mCAAgC;AAGzB,IAAM,aAAa,GAAnB,MAAM,aAAa;IACjB,OAAO,CAAS;IAExB;QACC,IAAI,CAAC,OAAO,GAAG,IAAI,eAAM,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC1F,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,QAAgB,EAAE,GAAW;QACzD,IAAI,CAAC;YACJ,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACzC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;gBACpC,EAAE,EAAE,YAAY,QAAQ,EAAE;gBAC1B,mBAAmB,EAAE,oCAAoC;gBACzD,UAAU,EAAE,oCAAoC;gBAChD,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC;oBAChC,GAAG,EAAE,GAAG;iBACR,CAAC;aACF,CAAC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAEhB,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC;CACD,CAAA;AAvBY,sCAAa;wBAAb,aAAa;IADzB,IAAA,gBAAO,GAAE;;GACG,aAAa,CAuBzB","sourcesContent":["import { MessageInstance } from 'twilio/lib/rest/api/v2010/account/message';\nimport { Service } from 'typedi';\nimport { Twilio } from 'twilio';\n\n@Service()\nexport class TwilioService {\n\tprivate _client: Twilio;\n\n\tconstructor() {\n\t\tthis._client = new Twilio(process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_AUTH_TOKEN);\n\t}\n\n\tpublic async sendWhatsappOTP(toNumber: number, otp: string): Promise<MessageInstance | null> {\n\t\ttry {\n\t\t\treturn await this._client.messages.create({\n\t\t\t\tfrom: process.env.TWILIO_FROM_NUMBER,\n\t\t\t\tto: `whatsapp:${toNumber}`,\n\t\t\t\tmessagingServiceSid: 'MG7388a0916945dcd333451f22f9f723f7',\n\t\t\t\tcontentSid: 'HXbd364741884cfdbbfd7dd38ce7f6b5d3',\n\t\t\t\tcontentVariables: JSON.stringify({\n\t\t\t\t\t'1': otp,\n\t\t\t\t}),\n\t\t\t});\n\t\t} catch (error) {\n\t\t\t//todo log error in logger\n\t\t\treturn null;\n\t\t}\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"/","sources":["libraries/twilio/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,mCAAiC;AACjC,mCAAgC;AAGzB,IAAM,aAAa,GAAnB,MAAM,aAAa;IACjB,OAAO,CAAS;IAExB;QACC,IAAI,CAAC,OAAO,GAAG,IAAI,eAAM,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC1F,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,QAAgB,EAAE,GAAW;QACzD,IAAI,CAAC;YACJ,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACzC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;gBACpC,EAAE,EAAE,YAAY,QAAQ,EAAE;gBAC1B,mBAAmB,EAAE,oCAAoC;gBACzD,UAAU,EAAE,oCAAoC;gBAChD,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC;oBAChC,GAAG,EAAE,GAAG;iBACR,CAAC;aACF,CAAC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAEhB,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC;CACD,CAAA;AAvBY,sCAAa;wBAAb,aAAa;IADzB,IAAA,gBAAO,GAAE;;GACG,aAAa,CAuBzB","sourcesContent":["import { MessageInstance } from 'twilio/lib/rest/api/v2010/account/message';\r\nimport { Service } from 'typedi';\r\nimport { Twilio } from 'twilio';\r\n\r\n@Service()\r\nexport class TwilioService {\r\n\tprivate _client: Twilio;\r\n\r\n\tconstructor() {\r\n\t\tthis._client = new Twilio(process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_AUTH_TOKEN);\r\n\t}\r\n\r\n\tpublic async sendWhatsappOTP(toNumber: number, otp: string): Promise<MessageInstance | null> {\r\n\t\ttry {\r\n\t\t\treturn await this._client.messages.create({\r\n\t\t\t\tfrom: process.env.TWILIO_FROM_NUMBER,\r\n\t\t\t\tto: `whatsapp:${toNumber}`,\r\n\t\t\t\tmessagingServiceSid: 'MG7388a0916945dcd333451f22f9f723f7',\r\n\t\t\t\tcontentSid: 'HXbd364741884cfdbbfd7dd38ce7f6b5d3',\r\n\t\t\t\tcontentVariables: JSON.stringify({\r\n\t\t\t\t\t'1': otp,\r\n\t\t\t\t}),\r\n\t\t\t});\r\n\t\t} catch (error) {\r\n\t\t\t//todo log error in logger\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n}\r\n"]}
|