@autologix-engineering/shared 1.2.332 → 1.2.334
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/package.json +1 -1
- package/src/lib/data-transfer-objects/src/add.client.persona.billing.methods.dto.d.ts +2 -1
- package/src/lib/data-transfer-objects/src/add.client.persona.billing.methods.dto.js +6 -1
- package/src/lib/data-transfer-objects/src/add.client.persona.billing.methods.dto.js.map +1 -1
- package/src/lib/data-transfer-objects/src/get.clients.by.email.domain.dto.d.ts +1 -1
- package/src/lib/data-transfer-objects/src/get.clients.by.email.domain.dto.js +1 -0
- package/src/lib/data-transfer-objects/src/get.clients.by.email.domain.dto.js.map +1 -1
- package/src/lib/data-transfer-objects/src/query/get.concurrent.users.dto.d.ts +32 -0
- package/src/lib/data-transfer-objects/src/query/get.concurrent.users.dto.js +47 -0
- package/src/lib/data-transfer-objects/src/query/get.concurrent.users.dto.js.map +1 -0
- package/src/lib/data-transfer-objects/src/query/get.tax.invoice.booking.breakdown.dto.d.ts +55 -0
- package/src/lib/data-transfer-objects/src/query/get.tax.invoice.booking.breakdown.dto.js +30 -0
- package/src/lib/data-transfer-objects/src/query/get.tax.invoice.booking.breakdown.dto.js.map +1 -0
- package/src/lib/data-transfer-objects/src/query/index.d.ts +2 -0
- package/src/lib/data-transfer-objects/src/query/index.js +2 -0
- package/src/lib/data-transfer-objects/src/query/index.js.map +1 -1
- package/src/lib/definitions/src/index.d.ts +1 -0
- package/src/lib/definitions/src/index.js +1 -0
- package/src/lib/definitions/src/index.js.map +1 -1
- package/src/lib/definitions/src/registered.user.token.d.ts +9 -0
- package/src/lib/definitions/src/session.keys.d.ts +67 -0
- package/src/lib/definitions/src/session.keys.js +84 -0
- package/src/lib/definitions/src/session.keys.js.map +1 -0
- package/src/lib/enums/src/model.enum.d.ts +2 -1
- package/src/lib/enums/src/model.enum.js +1 -0
- package/src/lib/enums/src/model.enum.js.map +1 -1
- package/src/lib/enums/src/query.type.enum.d.ts +4 -1
- package/src/lib/enums/src/query.type.enum.js +4 -0
- package/src/lib/enums/src/query.type.enum.js.map +1 -1
- package/src/lib/enums/src/report.command.types.js +1 -0
- package/src/lib/enums/src/report.command.types.js.map +1 -1
- package/src/lib/enums/src/trip.billing.distance.new.enum.d.ts +4 -0
- package/src/lib/enums/src/trip.billing.distance.new.enum.js +5 -0
- package/src/lib/enums/src/trip.billing.distance.new.enum.js.map +1 -1
- package/src/lib/models/src/ba.payout.row.model.d.ts +35 -0
- package/src/lib/models/src/ba.payout.row.model.js +2 -0
- package/src/lib/models/src/ba.payout.row.model.js.map +1 -1
- package/src/lib/models/src/business.context.owner.model.d.ts +20 -0
- package/src/lib/models/src/business.context.owner.model.js +18 -0
- package/src/lib/models/src/business.context.owner.model.js.map +1 -1
- package/src/lib/models/src/client.persona.model.d.ts +3 -1
- package/src/lib/models/src/client.persona.model.js +1 -0
- package/src/lib/models/src/client.persona.model.js.map +1 -1
- package/src/lib/models/src/index.d.ts +1 -0
- package/src/lib/models/src/index.js +1 -0
- package/src/lib/models/src/index.js.map +1 -1
- package/src/lib/models/src/instant.invoice.body.model.d.ts +12 -0
- package/src/lib/models/src/instant.invoice.body.model.js +10 -0
- package/src/lib/models/src/instant.invoice.body.model.js.map +1 -1
- package/src/lib/models/src/numbered.invoice.model.d.ts +2 -0
- package/src/lib/models/src/numbered.invoice.model.js +4 -0
- package/src/lib/models/src/numbered.invoice.model.js.map +1 -1
- package/src/lib/models/src/user.session.model.d.ts +101 -0
- package/src/lib/models/src/user.session.model.js +82 -0
- package/src/lib/models/src/user.session.model.js.map +1 -0
- package/src/lib/models/src/vehicle.model.d.ts +2 -0
- package/src/lib/models/src/vehicle.model.js +1 -0
- package/src/lib/models/src/vehicle.model.js.map +1 -1
- package/src/lib/models/src/white.label.config.model.d.ts +7 -0
- package/src/lib/models/src/white.label.config.model.js +6 -0
- package/src/lib/models/src/white.label.config.model.js.map +1 -1
- package/src/lib/routes/src/gatekeeper.routes.d.ts +2 -1
- package/src/lib/routes/src/gatekeeper.routes.js +1 -0
- package/src/lib/routes/src/gatekeeper.routes.js.map +1 -1
- package/src/lib/routes/src/query.service.routes.d.ts +3 -0
- package/src/lib/routes/src/query.service.routes.js +4 -0
- package/src/lib/routes/src/query.service.routes.js.map +1 -1
- package/src/lib/utilities/src/concurrency.peak.d.ts +41 -0
- package/src/lib/utilities/src/concurrency.peak.js +100 -0
- package/src/lib/utilities/src/concurrency.peak.js.map +1 -0
- package/src/lib/utilities/src/index.d.ts +1 -0
- package/src/lib/utilities/src/index.js +1 -0
- package/src/lib/utilities/src/index.js.map +1 -1
- package/src/lib/view-models/src/concurrent.users.d.ts +44 -0
- package/src/lib/view-models/src/concurrent.users.js +2 -0
- package/src/lib/view-models/src/concurrent.users.js.map +1 -0
- package/src/lib/view-models/src/index.d.ts +1 -0
- package/src/lib/view-models/src/index.js +1 -0
- package/src/lib/view-models/src/index.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AbatementType, BillingFormat, BillingMethod, CalculationMode, LetterOfAgreementAddTo, LogicType, PurchaseOrderLevel, TripBillingBasedOn, TripBillingDistanceNewEnum } from '../../enums/src/index';
|
|
1
|
+
import { AbatementType, BillingFormat, BillingMethod, BillToNameOnInvoice, CalculationMode, LetterOfAgreementAddTo, LogicType, PurchaseOrderLevel, TripBillingBasedOn, TripBillingDistanceNewEnum } from '../../enums/src/index';
|
|
2
2
|
export declare class AddClientPersonaBillingMethodDTO {
|
|
3
3
|
clientPersonaId: string;
|
|
4
4
|
contextOwnerId?: string;
|
|
@@ -27,6 +27,7 @@ export declare class AddClientPersonaBillingMethodDTO {
|
|
|
27
27
|
sacCodeForDriverAssisted?: string;
|
|
28
28
|
sacCodeForSelfDrive?: string;
|
|
29
29
|
printSacCodeOnInvoice?: boolean;
|
|
30
|
+
billToName?: BillToNameOnInvoice;
|
|
30
31
|
taxes?: string[];
|
|
31
32
|
isSezEnabled?: boolean;
|
|
32
33
|
printLogoImg?: string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __decorate, __metadata } from "tslib";
|
|
2
2
|
import { ArrayMinSize, IsArray, IsBoolean, IsEnum, IsNumber, IsOptional, IsString, IsUUID, ValidateNested, } from 'class-validator';
|
|
3
|
-
import { AbatementType, BillingFormat, BillingMethod, CalculationMode, LetterOfAgreementAddTo, LogicType, PurchaseOrderLevel, TripBillingBasedOn, TripBillingDistanceNewEnum, } from '../../enums/src/index';
|
|
3
|
+
import { AbatementType, BillingFormat, BillingMethod, BillToNameOnInvoice, CalculationMode, LetterOfAgreementAddTo, LogicType, PurchaseOrderLevel, TripBillingBasedOn, TripBillingDistanceNewEnum, } from '../../enums/src/index';
|
|
4
4
|
import { Type } from 'class-transformer';
|
|
5
5
|
export class AddClientPersonaBillingMethodDTO {
|
|
6
6
|
constructor(obj) {
|
|
@@ -145,6 +145,11 @@ __decorate([
|
|
|
145
145
|
IsBoolean(),
|
|
146
146
|
__metadata("design:type", Boolean)
|
|
147
147
|
], AddClientPersonaBillingMethodDTO.prototype, "printSacCodeOnInvoice", void 0);
|
|
148
|
+
__decorate([
|
|
149
|
+
IsOptional(),
|
|
150
|
+
IsEnum(BillToNameOnInvoice),
|
|
151
|
+
__metadata("design:type", String)
|
|
152
|
+
], AddClientPersonaBillingMethodDTO.prototype, "billToName", void 0);
|
|
148
153
|
__decorate([
|
|
149
154
|
IsOptional(),
|
|
150
155
|
IsArray(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.client.persona.billing.methods.dto.js","sourceRoot":"","sources":["../../../../../../../libs/shared/src/lib/data-transfer-objects/src/add.client.persona.billing.methods.dto.ts"],"names":[],"mappings":";AAAA,OAAO,EACN,YAAY,EAEZ,OAAO,EACP,SAAS,EACT,MAAM,EACN,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,MAAM,EACN,cAAc,GACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACN,aAAa,EACb,aAAa,EACb,aAAa,EACb,eAAe,EACf,sBAAsB,EACtB,SAAS,EACT,kBAAkB,EAClB,kBAAkB,EAClB,0BAA0B,GAC1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,MAAM,OAAO,gCAAgC;
|
|
1
|
+
{"version":3,"file":"add.client.persona.billing.methods.dto.js","sourceRoot":"","sources":["../../../../../../../libs/shared/src/lib/data-transfer-objects/src/add.client.persona.billing.methods.dto.ts"],"names":[],"mappings":";AAAA,OAAO,EACN,YAAY,EAEZ,OAAO,EACP,SAAS,EACT,MAAM,EACN,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,MAAM,EACN,cAAc,GACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACN,aAAa,EACb,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,sBAAsB,EACtB,SAAS,EACT,kBAAkB,EAClB,kBAAkB,EAClB,0BAA0B,GAC1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,MAAM,OAAO,gCAAgC;IAoL5C,YAAY,GAA+C;QAC1D,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC1B,CAAC;CACD;AArLA;IADC,MAAM,EAAE;;yEACe;AAIxB;IAFC,UAAU,EAAE;IACZ,MAAM,EAAE;;wEACe;AAIxB;IAFC,UAAU,EAAE;IACZ,MAAM,EAAE;;0EACiB;AAI1B;IAFC,UAAU,EAAE;IACZ,MAAM,CAAC,0BAA0B,CAAC;;4EACa;AAIhD;IAFC,UAAU,EAAE;IACZ,MAAM,CAAC,kBAAkB,CAAC;;wEACS;AAIpC;IAFC,UAAU,EAAE;IACZ,SAAS,EAAE;;qFAC0B;AAItC;IAFC,UAAU,EAAE;IACZ,SAAS,EAAE;;mEACQ;AAKpB;IAHC,UAAU,EAAE;IACZ,QAAQ,EAAE;IACV,MAAM,CAAC,aAAa,CAAC;;uEACQ;AAI9B;IAFC,UAAU,EAAE;IACZ,QAAQ,EAAE;;0EACe;AAI1B;IAFC,UAAU,EAAE;IACZ,SAAS,EAAE;;sEACW;AAIvB;IAFC,UAAU,EAAE;IACZ,QAAQ,EAAE;;uEACY;AAIvB;IAFC,UAAU,EAAE;IACZ,QAAQ,EAAE;;mEACQ;AAInB;IAFC,UAAU,EAAE;IACZ,QAAQ,EAAE;;qEACU;AAIrB;IAFC,UAAU,EAAE;IACZ,SAAS,EAAE;;0EACe;AAI3B;IAFC,UAAU,EAAE;IACZ,SAAS,EAAE;;qEACU;AAItB;IAFC,UAAU,EAAE;IACZ,MAAM,CAAC,sBAAsB,CAAC;;2EACY;AAI3C;IAFC,UAAU,EAAE;IACZ,SAAS,EAAE;;uEACY;AAIxB;IAFC,UAAU,EAAE;IACZ,SAAS,EAAE;;sEACW;AAIvB;IAFC,UAAU,EAAE;IACZ,MAAM,CAAC,kBAAkB,CAAC;;iEACE;AAI7B;IAFC,UAAU,EAAE;IACZ,QAAQ,EAAE;;6EACkB;AAI7B;IAFC,UAAU,EAAE;IACZ,QAAQ,EAAE;;kEACO;AAIlB;IAFC,UAAU,EAAE;IACZ,QAAQ,EAAE;8BACc,IAAI;gFAAC;AAI9B;IAFC,UAAU,EAAE;IACZ,QAAQ,EAAE;8BACc,IAAI;gFAAC;AAO9B;IALC,UAAU,EAAE;IACZ,OAAO,EAAE;IACT,YAAY,CAAC,CAAC,CAAC;IACf,IAAI,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC;IACxB,cAAc,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;kEACL;AAI1B;IAFC,UAAU,EAAE;IACZ,QAAQ,EAAE;;kFACuB;AAIlC;IAFC,UAAU,EAAE;IACZ,QAAQ,EAAE;;6EACkB;AAI7B;IAFC,UAAU,EAAE;IACZ,SAAS,EAAE;;+EACoB;AAIhC;IAFC,UAAU,EAAE;IACZ,MAAM,CAAC,mBAAmB,CAAC;;oEACK;AAKjC;IAHC,UAAU,EAAE;IACZ,OAAO,EAAE;IACT,MAAM,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;+DACjB;AAIjB;IAFC,UAAU,EAAE;IACZ,SAAS,EAAE;;sEACW;AAIvB;IAFC,UAAU,EAAE;IACZ,MAAM,EAAE;;sEACa;AAItB;IAFC,UAAU,EAAE;IACZ,QAAQ,EAAE;;6EACkB;AAK7B;IAHC,UAAU,EAAE;IACZ,QAAQ,EAAE;IACV,MAAM,CAAC,aAAa,CAAC;;uEACQ;AAK9B;IAHC,UAAU,EAAE;IACZ,QAAQ,EAAE;IACV,MAAM,CAAC,eAAe,CAAC;;yEACU;AAKlC;IAHC,UAAU,EAAE;IACZ,QAAQ,EAAE;IACV,MAAM,CAAC,SAAS,CAAC;;mEACI;AAItB;IAFC,UAAU,EAAE;IACZ,QAAQ,EAAE;;yEACc;AAIzB;IAFC,UAAU,EAAE;IACZ,QAAQ,EAAE;;iFACsB;AAIjC;IAFC,UAAU,EAAE;IACZ,QAAQ,EAAE;;+EACoB;AAK/B;IAHC,UAAU,EAAE;IACZ,QAAQ,EAAE;IACV,MAAM,CAAC,aAAa,CAAC;;iFACkB;AAKxC;IAHC,UAAU,EAAE;IACZ,QAAQ,EAAE;IACV,MAAM,CAAC,aAAa,CAAC;;4EACa;AAKnC;IAHC,UAAU,EAAE;IACZ,QAAQ,EAAE;IACV,MAAM,CAAC,aAAa,CAAC;;oFACqB;AAK3C;IAHC,UAAU,EAAE;IACZ,QAAQ,EAAE;IACV,MAAM,CAAC,aAAa,CAAC;;+EACgB;AAOvC,MAAM,OAAO,YAAY;IAQxB,YAAY,IAA4B;QACvC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;CACD;AATA;IADC,QAAQ,EAAE;;6CACM;AAIjB;IAFC,YAAY,CAAC,CAAC,CAAC;IACf,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;4CACR"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get.clients.by.email.domain.dto.js","sourceRoot":"","sources":["../../../../../../../libs/shared/src/lib/data-transfer-objects/src/get.clients.by.email.domain.dto.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEvD,MAAM,OAAO,0BAA0B;
|
|
1
|
+
{"version":3,"file":"get.clients.by.email.domain.dto.js","sourceRoot":"","sources":["../../../../../../../libs/shared/src/lib/data-transfer-objects/src/get.clients.by.email.domain.dto.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEvD,MAAM,OAAO,0BAA0B;IAqBtC,YAAY,GAAyC;QACpD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC1B,CAAC;CACD;AAtBA;IADC,QAAQ,EAAE;;0DACI;AAGf;IADC,QAAQ,EAAE;;yDACG;AAQd;IAFC,UAAU,EAAE;IACZ,QAAQ,EAAE;;4DACO;AAMlB;IAFC,UAAU,EAAE;IACZ,QAAQ,EAAE;;uDACE"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The caller names the organization whose dashboard is open.
|
|
3
|
+
*
|
|
4
|
+
* Concurrency is a property of the organization, so it must not depend on who
|
|
5
|
+
* is looking — inferring the context from the viewer's memberships meant a
|
|
6
|
+
* user who is staff at two organizations saw a different one's figures than a
|
|
7
|
+
* colleague. The server still verifies the caller belongs to the context, so
|
|
8
|
+
* naming it grants no access on its own.
|
|
9
|
+
*/
|
|
10
|
+
export declare class GetConcurrentUsersLiveDTO {
|
|
11
|
+
contextId: string;
|
|
12
|
+
constructor(obj?: Partial<GetConcurrentUsersLiveDTO>);
|
|
13
|
+
}
|
|
14
|
+
export declare class GetConcurrentUsersReportDTO {
|
|
15
|
+
contextId: string;
|
|
16
|
+
fromDate: string;
|
|
17
|
+
toDate: string;
|
|
18
|
+
/**
|
|
19
|
+
* Reporting timezone offset in minutes, for deciding which calendar day a
|
|
20
|
+
* session falls on. Defaults to IST (330) — these contracts are written
|
|
21
|
+
* against Indian business days, and bucketing by UTC would move evening
|
|
22
|
+
* activity onto the wrong day.
|
|
23
|
+
*
|
|
24
|
+
* Query params arrive as strings, so @Type coerces before validation.
|
|
25
|
+
* Without @IsInt a value like "abc" would sail through, turn offsetMs into
|
|
26
|
+
* NaN inside dailyPeaks, and make the endpoint return an empty dailyPeaks
|
|
27
|
+
* array with status Success — a silently wrong answer on a report whose
|
|
28
|
+
* entire purpose is to be proof. Bounds are real-world UTC offsets.
|
|
29
|
+
*/
|
|
30
|
+
offsetMinutes?: number;
|
|
31
|
+
constructor(obj?: Partial<GetConcurrentUsersReportDTO>);
|
|
32
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { IsDateString, IsInt, IsOptional, IsUUID, Max, Min, } from 'class-validator';
|
|
3
|
+
import { Type } from 'class-transformer';
|
|
4
|
+
/**
|
|
5
|
+
* The caller names the organization whose dashboard is open.
|
|
6
|
+
*
|
|
7
|
+
* Concurrency is a property of the organization, so it must not depend on who
|
|
8
|
+
* is looking — inferring the context from the viewer's memberships meant a
|
|
9
|
+
* user who is staff at two organizations saw a different one's figures than a
|
|
10
|
+
* colleague. The server still verifies the caller belongs to the context, so
|
|
11
|
+
* naming it grants no access on its own.
|
|
12
|
+
*/
|
|
13
|
+
export class GetConcurrentUsersLiveDTO {
|
|
14
|
+
constructor(obj) {
|
|
15
|
+
Object.assign(this, obj);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
__decorate([
|
|
19
|
+
IsUUID('4'),
|
|
20
|
+
__metadata("design:type", String)
|
|
21
|
+
], GetConcurrentUsersLiveDTO.prototype, "contextId", void 0);
|
|
22
|
+
export class GetConcurrentUsersReportDTO {
|
|
23
|
+
constructor(obj) {
|
|
24
|
+
Object.assign(this, obj);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
__decorate([
|
|
28
|
+
IsUUID('4'),
|
|
29
|
+
__metadata("design:type", String)
|
|
30
|
+
], GetConcurrentUsersReportDTO.prototype, "contextId", void 0);
|
|
31
|
+
__decorate([
|
|
32
|
+
IsDateString(),
|
|
33
|
+
__metadata("design:type", String)
|
|
34
|
+
], GetConcurrentUsersReportDTO.prototype, "fromDate", void 0);
|
|
35
|
+
__decorate([
|
|
36
|
+
IsDateString(),
|
|
37
|
+
__metadata("design:type", String)
|
|
38
|
+
], GetConcurrentUsersReportDTO.prototype, "toDate", void 0);
|
|
39
|
+
__decorate([
|
|
40
|
+
IsOptional(),
|
|
41
|
+
Type(() => Number),
|
|
42
|
+
IsInt(),
|
|
43
|
+
Min(-720),
|
|
44
|
+
Max(840),
|
|
45
|
+
__metadata("design:type", Number)
|
|
46
|
+
], GetConcurrentUsersReportDTO.prototype, "offsetMinutes", void 0);
|
|
47
|
+
//# sourceMappingURL=get.concurrent.users.dto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get.concurrent.users.dto.js","sourceRoot":"","sources":["../../../../../../../../libs/shared/src/lib/data-transfer-objects/src/query/get.concurrent.users.dto.ts"],"names":[],"mappings":";AAAA,OAAO,EACN,YAAY,EACZ,KAAK,EACL,UAAU,EACV,MAAM,EACN,GAAG,EACH,GAAG,GACH,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC;;;;;;;;GAQG;AACH,MAAM,OAAO,yBAAyB;IAIrC,YAAY,GAAwC;QACnD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC1B,CAAC;CACD;AALA;IADC,MAAM,CAAC,GAAG,CAAC;;4DACM;AAOnB,MAAM,OAAO,2BAA2B;IA6BvC,YAAY,GAA0C;QACrD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC1B,CAAC;CACD;AA9BA;IADC,MAAM,CAAC,GAAG,CAAC;;8DACM;AAGlB;IADC,YAAY,EAAE;;6DACE;AAGjB;IADC,YAAY,EAAE;;2DACA;AAmBf;IALC,UAAU,EAAE;IACZ,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;IAClB,KAAK,EAAE;IACP,GAAG,CAAC,CAAC,GAAG,CAAC;IACT,GAAG,CAAC,GAAG,CAAC;;kEACc"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { INumberedInvoiceLineItem, ITax } from '../../../models/src/index';
|
|
2
|
+
export declare class GetTaxInvoiceBookingBreakdownDTO {
|
|
3
|
+
invoiceId: string;
|
|
4
|
+
constructor(obj?: Partial<GetTaxInvoiceBookingBreakdownDTO>);
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Why a breakdown could not be produced. Consumers use this to explain to the
|
|
8
|
+
* user why per-booking adjustment is unavailable rather than silently hiding
|
|
9
|
+
* the option.
|
|
10
|
+
*/
|
|
11
|
+
export declare enum TaxInvoiceBreakdownBlocker {
|
|
12
|
+
/** Individual invoice — there is nothing to split. */
|
|
13
|
+
NotConsolidated = "NOT_CONSOLIDATED",
|
|
14
|
+
/** Consolidated invoice that ended up with a single booking. */
|
|
15
|
+
SingleBooking = "SINGLE_BOOKING",
|
|
16
|
+
/** One or more bookings have no NumberedInvoice (legacy / unlinked data). */
|
|
17
|
+
MissingNumberedInvoices = "MISSING_NUMBERED_INVOICES",
|
|
18
|
+
/** Two bookings resolve to the same NumberedInvoice (LTR period invoice). */
|
|
19
|
+
SharedNumberedInvoices = "SHARED_NUMBERED_INVOICES",
|
|
20
|
+
/** Per-booking totals do not reconcile with what the invoice actually bills. */
|
|
21
|
+
SubtotalMismatch = "SUBTOTAL_MISMATCH"
|
|
22
|
+
}
|
|
23
|
+
export interface ITaxInvoiceBookingBreakdownItem {
|
|
24
|
+
requestId: string;
|
|
25
|
+
requestNumber: string;
|
|
26
|
+
bookingNumber: string;
|
|
27
|
+
pickupTime: Date | null;
|
|
28
|
+
numberedInvoiceId: string | null;
|
|
29
|
+
/** True when this NumberedInvoice also backs another booking on the invoice. */
|
|
30
|
+
sharedNumberedInvoice: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Descriptions already carry the ` (Booking: N)` suffix, matching what
|
|
33
|
+
* `aggregateLineItems` writes onto a consolidated invoice — so they are
|
|
34
|
+
* submit-ready for the invoice-adjustment classifier.
|
|
35
|
+
*/
|
|
36
|
+
lineItems: INumberedInvoiceLineItem[];
|
|
37
|
+
taxes: ({
|
|
38
|
+
amount: number;
|
|
39
|
+
} & Partial<ITax>)[];
|
|
40
|
+
subTotal: number;
|
|
41
|
+
taxAmount: number;
|
|
42
|
+
finalAmount: number;
|
|
43
|
+
}
|
|
44
|
+
export interface ITaxInvoiceBookingBreakdown {
|
|
45
|
+
invoiceId: string;
|
|
46
|
+
consolidated: boolean;
|
|
47
|
+
/** When false the caller must not offer per-booking selection. */
|
|
48
|
+
splittable: boolean;
|
|
49
|
+
blocker?: TaxInvoiceBreakdownBlocker;
|
|
50
|
+
/** Sum of `items[].subTotal`. */
|
|
51
|
+
breakdownSubTotal: number;
|
|
52
|
+
/** Sum of the invoice's own line items, before tax. */
|
|
53
|
+
invoiceSubTotal: number;
|
|
54
|
+
items: ITaxInvoiceBookingBreakdownItem[];
|
|
55
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { IsUUID } from 'class-validator';
|
|
3
|
+
export class GetTaxInvoiceBookingBreakdownDTO {
|
|
4
|
+
constructor(obj) {
|
|
5
|
+
Object.assign(this, obj);
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
__decorate([
|
|
9
|
+
IsUUID(),
|
|
10
|
+
__metadata("design:type", String)
|
|
11
|
+
], GetTaxInvoiceBookingBreakdownDTO.prototype, "invoiceId", void 0);
|
|
12
|
+
/**
|
|
13
|
+
* Why a breakdown could not be produced. Consumers use this to explain to the
|
|
14
|
+
* user why per-booking adjustment is unavailable rather than silently hiding
|
|
15
|
+
* the option.
|
|
16
|
+
*/
|
|
17
|
+
export var TaxInvoiceBreakdownBlocker;
|
|
18
|
+
(function (TaxInvoiceBreakdownBlocker) {
|
|
19
|
+
/** Individual invoice — there is nothing to split. */
|
|
20
|
+
TaxInvoiceBreakdownBlocker["NotConsolidated"] = "NOT_CONSOLIDATED";
|
|
21
|
+
/** Consolidated invoice that ended up with a single booking. */
|
|
22
|
+
TaxInvoiceBreakdownBlocker["SingleBooking"] = "SINGLE_BOOKING";
|
|
23
|
+
/** One or more bookings have no NumberedInvoice (legacy / unlinked data). */
|
|
24
|
+
TaxInvoiceBreakdownBlocker["MissingNumberedInvoices"] = "MISSING_NUMBERED_INVOICES";
|
|
25
|
+
/** Two bookings resolve to the same NumberedInvoice (LTR period invoice). */
|
|
26
|
+
TaxInvoiceBreakdownBlocker["SharedNumberedInvoices"] = "SHARED_NUMBERED_INVOICES";
|
|
27
|
+
/** Per-booking totals do not reconcile with what the invoice actually bills. */
|
|
28
|
+
TaxInvoiceBreakdownBlocker["SubtotalMismatch"] = "SUBTOTAL_MISMATCH";
|
|
29
|
+
})(TaxInvoiceBreakdownBlocker || (TaxInvoiceBreakdownBlocker = {}));
|
|
30
|
+
//# sourceMappingURL=get.tax.invoice.booking.breakdown.dto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get.tax.invoice.booking.breakdown.dto.js","sourceRoot":"","sources":["../../../../../../../../libs/shared/src/lib/data-transfer-objects/src/query/get.tax.invoice.booking.breakdown.dto.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGzC,MAAM,OAAO,gCAAgC;IAI5C,YAAY,GAA+C;QAC1D,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC1B,CAAC;CACD;AALA;IADC,MAAM,EAAE;;mEACS;AAOnB;;;;GAIG;AACH,MAAM,CAAN,IAAY,0BAWX;AAXD,WAAY,0BAA0B;IACrC,sDAAsD;IACtD,kEAAoC,CAAA;IACpC,gEAAgE;IAChE,8DAAgC,CAAA;IAChC,6EAA6E;IAC7E,mFAAqD,CAAA;IACrD,6EAA6E;IAC7E,iFAAmD,CAAA;IACnD,gFAAgF;IAChF,oEAAsC,CAAA;AACvC,CAAC,EAXW,0BAA0B,KAA1B,0BAA0B,QAWrC"}
|
|
@@ -10,6 +10,7 @@ export * from './get.packages.by.vendor.dto';
|
|
|
10
10
|
export * from './get.passenger.clients.by.context.dto';
|
|
11
11
|
export * from './get.place.details.dto';
|
|
12
12
|
export * from './get.invoice.details.dto';
|
|
13
|
+
export * from './get.tax.invoice.booking.breakdown.dto';
|
|
13
14
|
export * from './onboard.driver.dto';
|
|
14
15
|
export * from './invoice.otp.dto';
|
|
15
16
|
export * from './ext.booking.request.dto';
|
|
@@ -46,3 +47,4 @@ export * from './ba.incentive.dto';
|
|
|
46
47
|
export * from './ba.reimbursement.addOn.dto';
|
|
47
48
|
export * from './get.own.driver.reimbursement.details.dto';
|
|
48
49
|
export * from './get.vendor.knock.off.report.dto';
|
|
50
|
+
export * from './get.concurrent.users.dto';
|
|
@@ -10,6 +10,7 @@ export * from './get.packages.by.vendor.dto';
|
|
|
10
10
|
export * from './get.passenger.clients.by.context.dto';
|
|
11
11
|
export * from './get.place.details.dto';
|
|
12
12
|
export * from './get.invoice.details.dto';
|
|
13
|
+
export * from './get.tax.invoice.booking.breakdown.dto';
|
|
13
14
|
export * from './onboard.driver.dto';
|
|
14
15
|
export * from './invoice.otp.dto';
|
|
15
16
|
export * from './ext.booking.request.dto';
|
|
@@ -46,4 +47,5 @@ export * from './ba.incentive.dto';
|
|
|
46
47
|
export * from './ba.reimbursement.addOn.dto';
|
|
47
48
|
export * from './get.own.driver.reimbursement.details.dto';
|
|
48
49
|
export * from './get.vendor.knock.off.report.dto';
|
|
50
|
+
export * from './get.concurrent.users.dto';
|
|
49
51
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../libs/shared/src/lib/data-transfer-objects/src/query/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oCAAoC,CAAC;AACnD,cAAc,oBAAoB,CAAC;AACnC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wCAAwC,CAAC;AACvD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wCAAwC,CAAC;AACvD,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mBAAmB,CAAC;AAClC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uCAAuC,CAAC;AACtD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kCAAkC,CAAC;AACjD,cAAc,wCAAwC,CAAC;AACvD,cAAc,iCAAiC,CAAC;AAChD,cAAc,oCAAoC,CAAC;AACnD,cAAc,yCAAyC,CAAC;AACxD,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4CAA4C,CAAC;AAC3D,cAAc,mCAAmC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../libs/shared/src/lib/data-transfer-objects/src/query/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oCAAoC,CAAC;AACnD,cAAc,oBAAoB,CAAC;AACnC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wCAAwC,CAAC;AACvD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wCAAwC,CAAC;AACvD,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yCAAyC,CAAC;AACxD,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mBAAmB,CAAC;AAClC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uCAAuC,CAAC;AACtD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kCAAkC,CAAC;AACjD,cAAc,wCAAwC,CAAC;AACvD,cAAc,iCAAiC,CAAC;AAChD,cAAc,oCAAoC,CAAC;AACnD,cAAc,yCAAyC,CAAC;AACxD,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4CAA4C,CAAC;AAC3D,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC"}
|
|
@@ -5,6 +5,7 @@ export * from './object.literal';
|
|
|
5
5
|
export * from './find-options';
|
|
6
6
|
export * from './onboarding.user.token';
|
|
7
7
|
export * from './registered.user.token';
|
|
8
|
+
export * from './session.keys';
|
|
8
9
|
export * from './query.definition';
|
|
9
10
|
export * from './location';
|
|
10
11
|
export * from './trip.generation.trigger';
|
|
@@ -5,6 +5,7 @@ export * from './object.literal';
|
|
|
5
5
|
export * from './find-options';
|
|
6
6
|
export * from './onboarding.user.token';
|
|
7
7
|
export * from './registered.user.token';
|
|
8
|
+
export * from './session.keys';
|
|
8
9
|
export * from './query.definition';
|
|
9
10
|
export * from './location';
|
|
10
11
|
export * from './trip.generation.trigger';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../libs/shared/src/lib/definitions/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../libs/shared/src/lib/definitions/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC"}
|
|
@@ -2,6 +2,15 @@ export interface IRegisteredUserToken {
|
|
|
2
2
|
registeredUserId: string;
|
|
3
3
|
url?: string;
|
|
4
4
|
fcm?: string;
|
|
5
|
+
/**
|
|
6
|
+
* UserSession.sesId this token belongs to. Lets the auth guard reject a
|
|
7
|
+
* token whose session has been ended (logout, or displaced by a login
|
|
8
|
+
* elsewhere) without waiting for the token itself to expire.
|
|
9
|
+
*
|
|
10
|
+
* Optional: tokens issued before this shipped, and machine-to-machine
|
|
11
|
+
* tokens from GetToken, carry no session.
|
|
12
|
+
*/
|
|
13
|
+
sid?: string;
|
|
5
14
|
iat?: number;
|
|
6
15
|
exp?: number;
|
|
7
16
|
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Redis key layout for session revocation and liveness.
|
|
3
|
+
*
|
|
4
|
+
* These live in shared/definitions rather than in the gatekeeper module
|
|
5
|
+
* because the auth guard reads the same keys and is bundled into every
|
|
6
|
+
* service — it cannot depend on the gatekeeper module without dragging the
|
|
7
|
+
* whole login stack into query-service, files-service and friends. Both sides
|
|
8
|
+
* building keys from these helpers keeps the format in one place.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Connection options for every session-related Redis client.
|
|
12
|
+
*
|
|
13
|
+
* A plain factory rather than an injectable provider on purpose: AuthGuard is
|
|
14
|
+
* bundled into every service (query, command-registry, files, location), and
|
|
15
|
+
* giving it a new DI dependency would mean touching every one of those modules
|
|
16
|
+
* — a much wider blast radius than this feature warrants. A shared factory
|
|
17
|
+
* still keeps the settings and retry policy in one place.
|
|
18
|
+
*
|
|
19
|
+
* enableOfflineQueue is off and command retries are capped because these
|
|
20
|
+
* clients sit on request-handling paths: a Redis outage must fail fast and let
|
|
21
|
+
* the caller degrade, never queue commands and hang the request.
|
|
22
|
+
*
|
|
23
|
+
* retryStrategy governs *reconnection*, which is a separate concern from
|
|
24
|
+
* maxRetriesPerRequest (that only bounds retries of a single command). Left at
|
|
25
|
+
* its default, ioredis reconnects every ~50ms–2s forever, so an absent Redis —
|
|
26
|
+
* local dev with no REDIS_HOST set, or a production outage — emits a connection
|
|
27
|
+
* error several times a second and buries every other log line. Backing off to
|
|
28
|
+
* a 30s ceiling keeps reconnection working without the flood.
|
|
29
|
+
*/
|
|
30
|
+
export declare const sessionRedisOptions: () => {
|
|
31
|
+
host: string;
|
|
32
|
+
port: number;
|
|
33
|
+
password: string;
|
|
34
|
+
maxRetriesPerRequest: number;
|
|
35
|
+
enableOfflineQueue: boolean;
|
|
36
|
+
retryStrategy: (times: number) => number;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Wraps a logger so a persistent Redis failure reports periodically instead of
|
|
40
|
+
* on every reconnection attempt.
|
|
41
|
+
*
|
|
42
|
+
* Backing off reconnection alone is not enough: at a 30s ceiling a multi-hour
|
|
43
|
+
* outage still writes thousands of identical lines across every service. This
|
|
44
|
+
* reports the first error immediately — so the problem is visible at once —
|
|
45
|
+
* then at most once per interval, with a count of what was suppressed so the
|
|
46
|
+
* log still conveys that it is ongoing rather than resolved.
|
|
47
|
+
*/
|
|
48
|
+
export declare const throttledRedisErrorLogger: (log: (message: string) => void, intervalMs?: number) => (error: {
|
|
49
|
+
message?: string;
|
|
50
|
+
}) => void;
|
|
51
|
+
/**
|
|
52
|
+
* Set when a session ends while its tokens are still cryptographically valid.
|
|
53
|
+
* Deny-list rather than allow-list on purpose: if Redis is unavailable the
|
|
54
|
+
* auth guard fails open (a revoked user keeps working until their token
|
|
55
|
+
* expires) instead of logging out every user on the platform.
|
|
56
|
+
*/
|
|
57
|
+
export declare const revokedSessionKey: (sessionId: string) => string;
|
|
58
|
+
/**
|
|
59
|
+
* Last request timestamp (epoch ms, as a string) for an open session. Written
|
|
60
|
+
* on every authenticated request and flushed to Postgres periodically, so the
|
|
61
|
+
* hot path never does a DB write.
|
|
62
|
+
*/
|
|
63
|
+
export declare const lastSeenSessionKey: (sessionId: string) => string;
|
|
64
|
+
/** Matches every last-seen key, for the periodic flush to Postgres. */
|
|
65
|
+
export declare const LAST_SEEN_SCAN_PATTERN = "sess:lastSeen:*";
|
|
66
|
+
/** Recovers the session id from a key returned by a SCAN of the pattern above. */
|
|
67
|
+
export declare const sessionIdFromLastSeenKey: (key: string) => string;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Redis key layout for session revocation and liveness.
|
|
3
|
+
*
|
|
4
|
+
* These live in shared/definitions rather than in the gatekeeper module
|
|
5
|
+
* because the auth guard reads the same keys and is bundled into every
|
|
6
|
+
* service — it cannot depend on the gatekeeper module without dragging the
|
|
7
|
+
* whole login stack into query-service, files-service and friends. Both sides
|
|
8
|
+
* building keys from these helpers keeps the format in one place.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Connection options for every session-related Redis client.
|
|
12
|
+
*
|
|
13
|
+
* A plain factory rather than an injectable provider on purpose: AuthGuard is
|
|
14
|
+
* bundled into every service (query, command-registry, files, location), and
|
|
15
|
+
* giving it a new DI dependency would mean touching every one of those modules
|
|
16
|
+
* — a much wider blast radius than this feature warrants. A shared factory
|
|
17
|
+
* still keeps the settings and retry policy in one place.
|
|
18
|
+
*
|
|
19
|
+
* enableOfflineQueue is off and command retries are capped because these
|
|
20
|
+
* clients sit on request-handling paths: a Redis outage must fail fast and let
|
|
21
|
+
* the caller degrade, never queue commands and hang the request.
|
|
22
|
+
*
|
|
23
|
+
* retryStrategy governs *reconnection*, which is a separate concern from
|
|
24
|
+
* maxRetriesPerRequest (that only bounds retries of a single command). Left at
|
|
25
|
+
* its default, ioredis reconnects every ~50ms–2s forever, so an absent Redis —
|
|
26
|
+
* local dev with no REDIS_HOST set, or a production outage — emits a connection
|
|
27
|
+
* error several times a second and buries every other log line. Backing off to
|
|
28
|
+
* a 30s ceiling keeps reconnection working without the flood.
|
|
29
|
+
*/
|
|
30
|
+
export const sessionRedisOptions = () => ({
|
|
31
|
+
host: process.env['REDIS_HOST'],
|
|
32
|
+
port: Number(process.env['REDIS_PORT'] || 6379),
|
|
33
|
+
password: process.env['REDIS_PASSWORD'] || undefined,
|
|
34
|
+
maxRetriesPerRequest: 1,
|
|
35
|
+
enableOfflineQueue: false,
|
|
36
|
+
retryStrategy: (times) => Math.min(times * 500, 30_000),
|
|
37
|
+
});
|
|
38
|
+
/**
|
|
39
|
+
* Wraps a logger so a persistent Redis failure reports periodically instead of
|
|
40
|
+
* on every reconnection attempt.
|
|
41
|
+
*
|
|
42
|
+
* Backing off reconnection alone is not enough: at a 30s ceiling a multi-hour
|
|
43
|
+
* outage still writes thousands of identical lines across every service. This
|
|
44
|
+
* reports the first error immediately — so the problem is visible at once —
|
|
45
|
+
* then at most once per interval, with a count of what was suppressed so the
|
|
46
|
+
* log still conveys that it is ongoing rather than resolved.
|
|
47
|
+
*/
|
|
48
|
+
export const throttledRedisErrorLogger = (log, intervalMs = 60_000) => {
|
|
49
|
+
let lastLoggedAt = 0;
|
|
50
|
+
let suppressed = 0;
|
|
51
|
+
return (error) => {
|
|
52
|
+
const now = Date.now();
|
|
53
|
+
if (now - lastLoggedAt >= intervalMs) {
|
|
54
|
+
const also = suppressed
|
|
55
|
+
? ` (${suppressed} further error${suppressed === 1 ? '' : 's'} suppressed)`
|
|
56
|
+
: '';
|
|
57
|
+
log(`Session Redis error: ${error?.message}${also}`);
|
|
58
|
+
lastLoggedAt = now;
|
|
59
|
+
suppressed = 0;
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
suppressed++;
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
const REVOKED_PREFIX = 'sess:revoked:';
|
|
66
|
+
const LAST_SEEN_PREFIX = 'sess:lastSeen:';
|
|
67
|
+
/**
|
|
68
|
+
* Set when a session ends while its tokens are still cryptographically valid.
|
|
69
|
+
* Deny-list rather than allow-list on purpose: if Redis is unavailable the
|
|
70
|
+
* auth guard fails open (a revoked user keeps working until their token
|
|
71
|
+
* expires) instead of logging out every user on the platform.
|
|
72
|
+
*/
|
|
73
|
+
export const revokedSessionKey = (sessionId) => `${REVOKED_PREFIX}${sessionId}`;
|
|
74
|
+
/**
|
|
75
|
+
* Last request timestamp (epoch ms, as a string) for an open session. Written
|
|
76
|
+
* on every authenticated request and flushed to Postgres periodically, so the
|
|
77
|
+
* hot path never does a DB write.
|
|
78
|
+
*/
|
|
79
|
+
export const lastSeenSessionKey = (sessionId) => `${LAST_SEEN_PREFIX}${sessionId}`;
|
|
80
|
+
/** Matches every last-seen key, for the periodic flush to Postgres. */
|
|
81
|
+
export const LAST_SEEN_SCAN_PATTERN = `${LAST_SEEN_PREFIX}*`;
|
|
82
|
+
/** Recovers the session id from a key returned by a SCAN of the pattern above. */
|
|
83
|
+
export const sessionIdFromLastSeenKey = (key) => key.startsWith(LAST_SEEN_PREFIX) ? key.slice(LAST_SEEN_PREFIX.length) : null;
|
|
84
|
+
//# sourceMappingURL=session.keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.keys.js","sourceRoot":"","sources":["../../../../../../../libs/shared/src/lib/definitions/src/session.keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,EAAE,CAAC,CAAC;IACzC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC;IAC/C,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,SAAS;IACpD,oBAAoB,EAAE,CAAC;IACvB,kBAAkB,EAAE,KAAK;IACzB,aAAa,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,EAAE,MAAM,CAAC;CAC/D,CAAC,CAAC;AAEH;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACxC,GAA8B,EAC9B,UAAU,GAAG,MAAM,EAClB,EAAE;IACH,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,KAA2B,EAAE,EAAE;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,GAAG,GAAG,YAAY,IAAI,UAAU,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,UAAU;gBACtB,CAAC,CAAC,KAAK,UAAU,iBAAiB,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,cAAc;gBAC3E,CAAC,CAAC,EAAE,CAAC;YACN,GAAG,CAAC,wBAAwB,KAAK,EAAE,OAAO,GAAG,IAAI,EAAE,CAAC,CAAC;YACrD,YAAY,GAAG,GAAG,CAAC;YACnB,UAAU,GAAG,CAAC,CAAC;YACf,OAAO;QACR,CAAC;QACD,UAAU,EAAE,CAAC;IACd,CAAC,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,eAAe,CAAC;AACvC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;AAE1C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,SAAiB,EAAE,EAAE,CACtD,GAAG,cAAc,GAAG,SAAS,EAAE,CAAC;AAEjC;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,SAAiB,EAAE,EAAE,CACvD,GAAG,gBAAgB,GAAG,SAAS,EAAE,CAAC;AAEnC,uEAAuE;AACvE,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,gBAAgB,GAAG,CAAC;AAE7D,kFAAkF;AAClF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,GAAW,EAAE,EAAE,CACvD,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC"}
|
|
@@ -288,5 +288,6 @@ export declare enum ModelType {
|
|
|
288
288
|
InvoiceExportJob = "InvoiceExportJob",
|
|
289
289
|
InvoiceRegenerationJob = "InvoiceRegenerationJob",
|
|
290
290
|
VendorKnockOffReportJob = "VendorKnockOffReportJob",
|
|
291
|
-
VipContact = "VipContact"
|
|
291
|
+
VipContact = "VipContact",
|
|
292
|
+
UserSession = "UserSession"
|
|
292
293
|
}
|
|
@@ -290,5 +290,6 @@ export var ModelType;
|
|
|
290
290
|
ModelType["InvoiceRegenerationJob"] = "InvoiceRegenerationJob";
|
|
291
291
|
ModelType["VendorKnockOffReportJob"] = "VendorKnockOffReportJob";
|
|
292
292
|
ModelType["VipContact"] = "VipContact";
|
|
293
|
+
ModelType["UserSession"] = "UserSession";
|
|
293
294
|
})(ModelType || (ModelType = {}));
|
|
294
295
|
//# sourceMappingURL=model.enum.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.enum.js","sourceRoot":"","sources":["../../../../../../../libs/shared/src/lib/enums/src/model.enum.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"model.enum.js","sourceRoot":"","sources":["../../../../../../../libs/shared/src/lib/enums/src/model.enum.ts"],"names":[],"mappings":"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"}
|
|
@@ -59,6 +59,7 @@ export declare enum QueryType {
|
|
|
59
59
|
PreviewConsolidatedInvoice = "PreviewConsolidatedInvoice",
|
|
60
60
|
PreviewConsolidatedInvoiceUrl = "PreviewConsolidatedInvoiceUrl",
|
|
61
61
|
GetAdjustmentInvoiceDetails = "GetAdjustmentInvoiceDetails",
|
|
62
|
+
GetTaxInvoiceBookingBreakdown = "GetTaxInvoiceBookingBreakdown",
|
|
62
63
|
GetStatementData = "GetStatementData",
|
|
63
64
|
AdditionalAddress = "AdditionalAddress",
|
|
64
65
|
Avatar = "Avatar",
|
|
@@ -532,5 +533,7 @@ export declare enum QueryType {
|
|
|
532
533
|
TriggerCustomAlert = "TriggerCustomAlert",
|
|
533
534
|
GetReports = "GetReports",
|
|
534
535
|
GetVipContacts = "GetVipContacts",
|
|
535
|
-
GetServicePostponedVehicles = "GetServicePostponedVehicles"
|
|
536
|
+
GetServicePostponedVehicles = "GetServicePostponedVehicles",
|
|
537
|
+
GetConcurrentUsersLive = "GetConcurrentUsersLive",
|
|
538
|
+
GetConcurrentUsersReport = "GetConcurrentUsersReport"
|
|
536
539
|
}
|
|
@@ -60,6 +60,7 @@ export var QueryType;
|
|
|
60
60
|
QueryType["PreviewConsolidatedInvoice"] = "PreviewConsolidatedInvoice";
|
|
61
61
|
QueryType["PreviewConsolidatedInvoiceUrl"] = "PreviewConsolidatedInvoiceUrl";
|
|
62
62
|
QueryType["GetAdjustmentInvoiceDetails"] = "GetAdjustmentInvoiceDetails";
|
|
63
|
+
QueryType["GetTaxInvoiceBookingBreakdown"] = "GetTaxInvoiceBookingBreakdown";
|
|
63
64
|
QueryType["GetStatementData"] = "GetStatementData";
|
|
64
65
|
QueryType["AdditionalAddress"] = "AdditionalAddress";
|
|
65
66
|
QueryType["Avatar"] = "Avatar";
|
|
@@ -550,5 +551,8 @@ export var QueryType;
|
|
|
550
551
|
QueryType["GetVipContacts"] = "GetVipContacts";
|
|
551
552
|
// Service Postpone
|
|
552
553
|
QueryType["GetServicePostponedVehicles"] = "GetServicePostponedVehicles";
|
|
554
|
+
// Concurrent users (contracted seat tracking)
|
|
555
|
+
QueryType["GetConcurrentUsersLive"] = "GetConcurrentUsersLive";
|
|
556
|
+
QueryType["GetConcurrentUsersReport"] = "GetConcurrentUsersReport";
|
|
553
557
|
})(QueryType || (QueryType = {}));
|
|
554
558
|
//# sourceMappingURL=query.type.enum.js.map
|