@fastybird/smart-panel-backend 1.1.0-alpha.40 → 1.1.0-alpha.41
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/modules/auth/auth.module.js +4 -0
- package/dist/modules/auth/auth.module.js.map +1 -1
- package/dist/modules/auth/guards/auth.guard.js +8 -13
- package/dist/modules/auth/guards/auth.guard.js.map +1 -1
- package/dist/modules/auth/services/token-metadata.service.d.ts +42 -0
- package/dist/modules/auth/services/token-metadata.service.js +202 -0
- package/dist/modules/auth/services/token-metadata.service.js.map +1 -0
- package/dist/modules/auth/services/token-usage.service.d.ts +22 -0
- package/dist/modules/auth/services/token-usage.service.js +93 -0
- package/dist/modules/auth/services/token-usage.service.js.map +1 -0
- package/dist/modules/auth/services/tokens.service.d.ts +8 -2
- package/dist/modules/auth/services/tokens.service.js +16 -10
- package/dist/modules/auth/services/tokens.service.js.map +1 -1
- package/dist/modules/devices/devices.module.js +7 -0
- package/dist/modules/devices/devices.module.js.map +1 -1
- package/dist/modules/devices/dto/property-command.dto.js +2 -8
- package/dist/modules/devices/dto/property-command.dto.js.map +1 -1
- package/dist/modules/devices/services/device-command-graph.service.d.ts +18 -0
- package/dist/modules/devices/services/device-command-graph.service.js +92 -0
- package/dist/modules/devices/services/device-command-graph.service.js.map +1 -0
- package/dist/modules/devices/services/devices.service.js +2 -17
- package/dist/modules/devices/services/devices.service.js.map +1 -1
- package/dist/modules/devices/services/property-command-dispatch.service.d.ts +5 -3
- package/dist/modules/devices/services/property-command-dispatch.service.js +15 -12
- package/dist/modules/devices/services/property-command-dispatch.service.js.map +1 -1
- package/dist/modules/devices/services/property-command.service.d.ts +7 -5
- package/dist/modules/devices/services/property-command.service.js +41 -20
- package/dist/modules/devices/services/property-command.service.js.map +1 -1
- package/dist/modules/devices/services/property-metadata.service.d.ts +9 -2
- package/dist/modules/devices/services/property-metadata.service.js +67 -17
- package/dist/modules/devices/services/property-metadata.service.js.map +1 -1
- package/dist/modules/devices/utils/device-graph-query.utils.d.ts +3 -0
- package/dist/modules/devices/utils/device-graph-query.utils.js +23 -0
- package/dist/modules/devices/utils/device-graph-query.utils.js.map +1 -0
- package/dist/modules/devices/validators/property-command-target-constraint.validator.d.ts +9 -0
- package/dist/modules/devices/validators/property-command-target-constraint.validator.js +58 -0
- package/dist/modules/devices/validators/property-command-target-constraint.validator.js.map +1 -0
- package/dist/modules/spaces/services/module-reset.service.d.ts +5 -1
- package/dist/modules/spaces/services/module-reset.service.js +10 -2
- package/dist/modules/spaces/services/module-reset.service.js.map +1 -1
- package/dist/modules/spaces/services/space-activity.service.d.ts +14 -0
- package/dist/modules/spaces/services/space-activity.service.js +56 -0
- package/dist/modules/spaces/services/space-activity.service.js.map +1 -0
- package/dist/modules/spaces/spaces.module.js +5 -0
- package/dist/modules/spaces/spaces.module.js.map +1 -1
- package/dist/modules/spaces/subscribers/space-activity.subscriber.d.ts +17 -0
- package/dist/modules/spaces/subscribers/space-activity.subscriber.js +89 -0
- package/dist/modules/spaces/subscribers/space-activity.subscriber.js.map +1 -0
- package/dist/modules/websocket/services/ws-auth.service.js +12 -28
- package/dist/modules/websocket/services/ws-auth.service.js.map +1 -1
- package/dist/plugins/devices-virtual/platforms/virtual-device.platform.d.ts +3 -8
- package/dist/plugins/devices-virtual/platforms/virtual-device.platform.js +6 -36
- package/dist/plugins/devices-virtual/platforms/virtual-device.platform.js.map +1 -1
- package/dist/plugins/spaces-home-control/listeners/space-activity.listener.d.ts +6 -7
- package/dist/plugins/spaces-home-control/listeners/space-activity.listener.js +19 -44
- package/dist/plugins/spaces-home-control/listeners/space-activity.listener.js.map +1 -1
- package/dist/plugins/spaces-home-control/listeners/space-climate-state.listener.d.ts +4 -4
- package/dist/plugins/spaces-home-control/listeners/space-climate-state.listener.js +9 -22
- package/dist/plugins/spaces-home-control/listeners/space-climate-state.listener.js.map +1 -1
- package/dist/plugins/spaces-home-control/listeners/space-lighting-state.listener.d.ts +4 -4
- package/dist/plugins/spaces-home-control/listeners/space-lighting-state.listener.js +9 -22
- package/dist/plugins/spaces-home-control/listeners/space-lighting-state.listener.js.map +1 -1
- package/dist/plugins/spaces-home-control/listeners/space-sensor-state.listener.d.ts +4 -4
- package/dist/plugins/spaces-home-control/listeners/space-sensor-state.listener.js +9 -22
- package/dist/plugins/spaces-home-control/listeners/space-sensor-state.listener.js.map +1 -1
- package/dist/plugins/spaces-home-control/services/space-climate-state.service.d.ts +3 -5
- package/dist/plugins/spaces-home-control/services/space-climate-state.service.js +9 -12
- package/dist/plugins/spaces-home-control/services/space-climate-state.service.js.map +1 -1
- package/dist/plugins/spaces-home-control/services/space-lighting-state.service.d.ts +3 -5
- package/dist/plugins/spaces-home-control/services/space-lighting-state.service.js +7 -10
- package/dist/plugins/spaces-home-control/services/space-lighting-state.service.js.map +1 -1
- package/dist/plugins/spaces-home-control/services/space-sensor-state.service.d.ts +3 -5
- package/dist/plugins/spaces-home-control/services/space-sensor-state.service.js +7 -10
- package/dist/plugins/spaces-home-control/services/space-sensor-state.service.js.map +1 -1
- package/dist/plugins/spaces-home-control/services/space-state-read.service.d.ts +47 -0
- package/dist/plugins/spaces-home-control/services/space-state-read.service.js +262 -0
- package/dist/plugins/spaces-home-control/services/space-state-read.service.js.map +1 -0
- package/dist/plugins/spaces-home-control/spaces-home-control.plugin.js +4 -0
- package/dist/plugins/spaces-home-control/spaces-home-control.plugin.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
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;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ValidatePropertyCommandTarget = exports.PropertyCommandTargetConstraintValidator = void 0;
|
|
13
|
+
const class_validator_1 = require("class-validator");
|
|
14
|
+
const common_1 = require("@nestjs/common");
|
|
15
|
+
const property_metadata_service_1 = require("../services/property-metadata.service");
|
|
16
|
+
let PropertyCommandTargetConstraintValidator = class PropertyCommandTargetConstraintValidator {
|
|
17
|
+
constructor(propertyMetadata) {
|
|
18
|
+
this.propertyMetadata = propertyMetadata;
|
|
19
|
+
}
|
|
20
|
+
async validate(propertyId, args) {
|
|
21
|
+
const { device: deviceId, channel: channelId } = args.object;
|
|
22
|
+
if (typeof propertyId !== 'string' ||
|
|
23
|
+
!(0, class_validator_1.isUUID)(propertyId, '4') ||
|
|
24
|
+
typeof channelId !== 'string' ||
|
|
25
|
+
!(0, class_validator_1.isUUID)(channelId, '4') ||
|
|
26
|
+
typeof deviceId !== 'string' ||
|
|
27
|
+
!(0, class_validator_1.isUUID)(deviceId, '4'))
|
|
28
|
+
return false;
|
|
29
|
+
const property = await this.propertyMetadata.findOne(propertyId);
|
|
30
|
+
if (!property || typeof property.channel === 'string')
|
|
31
|
+
return false;
|
|
32
|
+
const channel = property.channel;
|
|
33
|
+
return channel.id === channelId && typeof channel.device !== 'string' && channel.device.id === deviceId;
|
|
34
|
+
}
|
|
35
|
+
defaultMessage(args) {
|
|
36
|
+
return `[{"field":"${args.property}","reason":"The property must belong to the specified channel and device."}]`;
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
exports.PropertyCommandTargetConstraintValidator = PropertyCommandTargetConstraintValidator;
|
|
40
|
+
exports.PropertyCommandTargetConstraintValidator = PropertyCommandTargetConstraintValidator = __decorate([
|
|
41
|
+
(0, common_1.Injectable)(),
|
|
42
|
+
(0, class_validator_1.ValidatorConstraint)({ name: 'PropertyCommandTargetValidation', async: true }),
|
|
43
|
+
__metadata("design:paramtypes", [property_metadata_service_1.PropertyMetadataService])
|
|
44
|
+
], PropertyCommandTargetConstraintValidator);
|
|
45
|
+
const ValidatePropertyCommandTarget = (validationOptions) => {
|
|
46
|
+
return function (object, propertyName) {
|
|
47
|
+
(0, class_validator_1.registerDecorator)({
|
|
48
|
+
name: 'ValidatePropertyCommandTarget',
|
|
49
|
+
target: object.constructor,
|
|
50
|
+
propertyName,
|
|
51
|
+
options: validationOptions,
|
|
52
|
+
constraints: [],
|
|
53
|
+
validator: PropertyCommandTargetConstraintValidator,
|
|
54
|
+
});
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
exports.ValidatePropertyCommandTarget = ValidatePropertyCommandTarget;
|
|
58
|
+
//# sourceMappingURL=property-command-target-constraint.validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"property-command-target-constraint.validator.js","sourceRoot":"","sources":["../../../../src/modules/devices/validators/property-command-target-constraint.validator.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAOyB;AAEzB,2CAA4C;AAE5C,qFAAgF;AAKzE,IAAM,wCAAwC,GAA9C,MAAM,wCAAwC;IACpD,YAA6B,gBAAyC;QAAzC,qBAAgB,GAAhB,gBAAgB,CAAyB;IAAG,CAAC;IAG1E,KAAK,CAAC,QAAQ,CAAC,UAAmB,EAAE,IAAyB;QAC5D,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,MAAiC,CAAC;QAExF,IACC,OAAO,UAAU,KAAK,QAAQ;YAC9B,CAAC,IAAA,wBAAM,EAAC,UAAU,EAAE,GAAG,CAAC;YACxB,OAAO,SAAS,KAAK,QAAQ;YAC7B,CAAC,IAAA,wBAAM,EAAC,SAAS,EAAE,GAAG,CAAC;YACvB,OAAO,QAAQ,KAAK,QAAQ;YAC5B,CAAC,IAAA,wBAAM,EAAC,QAAQ,EAAE,GAAG,CAAC;YAEtB,OAAO,KAAK,CAAC;QAEd,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACpE,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QAEjC,OAAO,OAAO,CAAC,EAAE,KAAK,SAAS,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,QAAQ,CAAC;IACzG,CAAC;IAED,cAAc,CAAC,IAAyB;QACvC,OAAO,cAAc,IAAI,CAAC,QAAQ,8EAA8E,CAAC;IAClH,CAAC;CACD,CAAA;AA3BY,4FAAwC;mDAAxC,wCAAwC;IAFpD,IAAA,mBAAU,GAAE;IACZ,IAAA,qCAAmB,EAAC,EAAE,IAAI,EAAE,iCAAiC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;qCAE9B,mDAAuB;GAD1D,wCAAwC,CA2BpD;AAEM,MAAM,6BAA6B,GAAG,CAAC,iBAAqC,EAAE,EAAE;IACtF,OAAO,UAAU,MAAc,EAAE,YAAoB;QACpD,IAAA,mCAAiB,EAAC;YACjB,IAAI,EAAE,+BAA+B;YACrC,MAAM,EAAE,MAAM,CAAC,WAAW;YAC1B,YAAY;YACZ,OAAO,EAAE,iBAAiB;YAC1B,WAAW,EAAE,EAAE;YACf,SAAS,EAAE,wCAAwC;SACnD,CAAC,CAAC;IACJ,CAAC,CAAC;AACH,CAAC,CAAC;AAXW,QAAA,6BAA6B,iCAWxC"}
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import { Repository } from 'typeorm';
|
|
2
|
+
import { PropertyMetadataService } from '../../devices/services/property-metadata.service';
|
|
2
3
|
import { SpaceEntity } from '../entities/space.entity';
|
|
4
|
+
import { SpaceActivityService } from './space-activity.service';
|
|
3
5
|
export declare class SpacesModuleResetService {
|
|
4
6
|
private readonly spacesRepository;
|
|
7
|
+
private readonly activity;
|
|
8
|
+
private readonly propertyMetadata;
|
|
5
9
|
private readonly logger;
|
|
6
|
-
constructor(spacesRepository: Repository<SpaceEntity
|
|
10
|
+
constructor(spacesRepository: Repository<SpaceEntity>, activity: SpaceActivityService, propertyMetadata: PropertyMetadataService);
|
|
7
11
|
reset(): Promise<{
|
|
8
12
|
success: boolean;
|
|
9
13
|
reason?: string;
|
|
@@ -17,17 +17,23 @@ const typeorm_1 = require("typeorm");
|
|
|
17
17
|
const common_1 = require("@nestjs/common");
|
|
18
18
|
const typeorm_2 = require("@nestjs/typeorm");
|
|
19
19
|
const extension_logger_service_1 = require("../../../common/logger/extension-logger.service");
|
|
20
|
+
const property_metadata_service_1 = require("../../devices/services/property-metadata.service");
|
|
20
21
|
const space_entity_1 = require("../entities/space.entity");
|
|
21
22
|
const spaces_constants_1 = require("../spaces.constants");
|
|
23
|
+
const space_activity_service_1 = require("./space-activity.service");
|
|
22
24
|
let SpacesModuleResetService = class SpacesModuleResetService {
|
|
23
|
-
constructor(spacesRepository) {
|
|
25
|
+
constructor(spacesRepository, activity, propertyMetadata) {
|
|
24
26
|
this.spacesRepository = spacesRepository;
|
|
27
|
+
this.activity = activity;
|
|
28
|
+
this.propertyMetadata = propertyMetadata;
|
|
25
29
|
this.logger = (0, extension_logger_service_1.createExtensionLogger)(spaces_constants_1.SPACES_MODULE_NAME, 'SpacesModuleResetService');
|
|
26
30
|
}
|
|
27
31
|
async reset() {
|
|
28
32
|
this.logger.log('[RESET] Starting spaces module factory reset');
|
|
29
33
|
try {
|
|
30
34
|
await this.spacesRepository.clear();
|
|
35
|
+
this.propertyMetadata.invalidate();
|
|
36
|
+
this.activity.clear();
|
|
31
37
|
this.logger.log('[RESET] Spaces module factory reset completed successfully');
|
|
32
38
|
return { success: true };
|
|
33
39
|
}
|
|
@@ -42,6 +48,8 @@ exports.SpacesModuleResetService = SpacesModuleResetService;
|
|
|
42
48
|
exports.SpacesModuleResetService = SpacesModuleResetService = __decorate([
|
|
43
49
|
(0, common_1.Injectable)(),
|
|
44
50
|
__param(0, (0, typeorm_2.InjectRepository)(space_entity_1.SpaceEntity)),
|
|
45
|
-
__metadata("design:paramtypes", [typeorm_1.Repository
|
|
51
|
+
__metadata("design:paramtypes", [typeorm_1.Repository,
|
|
52
|
+
space_activity_service_1.SpaceActivityService,
|
|
53
|
+
property_metadata_service_1.PropertyMetadataService])
|
|
46
54
|
], SpacesModuleResetService);
|
|
47
55
|
//# sourceMappingURL=module-reset.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-reset.service.js","sourceRoot":"","sources":["../../../../src/modules/spaces/services/module-reset.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,qCAAqC;AAErC,2CAA4C;AAC5C,6CAAmD;AAEnD,8FAAwF;AACxF,2DAAuD;AACvD,0DAAyD;
|
|
1
|
+
{"version":3,"file":"module-reset.service.js","sourceRoot":"","sources":["../../../../src/modules/spaces/services/module-reset.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,qCAAqC;AAErC,2CAA4C;AAC5C,6CAAmD;AAEnD,8FAAwF;AACxF,gGAA2F;AAC3F,2DAAuD;AACvD,0DAAyD;AAEzD,qEAAgE;AAGzD,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IAGpC,YAEC,gBAA0D,EACzC,QAA8B,EAC9B,gBAAyC;QAFzC,qBAAgB,GAAhB,gBAAgB,CAAyB;QACzC,aAAQ,GAAR,QAAQ,CAAsB;QAC9B,qBAAgB,GAAhB,gBAAgB,CAAyB;QAN1C,WAAM,GAAG,IAAA,gDAAqB,EAAC,qCAAkB,EAAE,0BAA0B,CAAC,CAAC;IAO7F,CAAC;IAEJ,KAAK,CAAC,KAAK;QACV,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAEhE,IAAI,CAAC;YAEJ,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;YAEpC,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;YACnC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YAEtB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;YAE9E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,GAAG,GAAG,KAAc,CAAC;YAE3B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,+CAA+C,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAEhF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAChD,CAAC;IACF,CAAC;CACD,CAAA;AA/BY,4DAAwB;mCAAxB,wBAAwB;IADpC,IAAA,mBAAU,GAAE;IAKV,WAAA,IAAA,0BAAgB,EAAC,0BAAW,CAAC,CAAA;qCACK,oBAAU;QAClB,6CAAoB;QACZ,mDAAuB;GAP/C,wBAAwB,CA+BpC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { OnModuleDestroy } from '@nestjs/common';
|
|
2
|
+
import { SpaceEntity } from '../entities/space.entity';
|
|
3
|
+
export declare class SpaceActivityService implements OnModuleDestroy {
|
|
4
|
+
private readonly activity;
|
|
5
|
+
private readonly deletedGenerations;
|
|
6
|
+
private generation;
|
|
7
|
+
private clearGeneration;
|
|
8
|
+
getGeneration(): number;
|
|
9
|
+
record(spaceId: string, observedAt: Date, generation?: number): void;
|
|
10
|
+
readLatest(space: Pick<SpaceEntity, 'id' | 'lastActivityAt'>): Date | string | null;
|
|
11
|
+
delete(spaceId: string): void;
|
|
12
|
+
clear(): void;
|
|
13
|
+
onModuleDestroy(): void;
|
|
14
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
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;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.SpaceActivityService = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
let SpaceActivityService = class SpaceActivityService {
|
|
12
|
+
constructor() {
|
|
13
|
+
this.activity = new Map();
|
|
14
|
+
this.deletedGenerations = new Map();
|
|
15
|
+
this.generation = 0;
|
|
16
|
+
this.clearGeneration = 0;
|
|
17
|
+
}
|
|
18
|
+
getGeneration() {
|
|
19
|
+
return this.generation;
|
|
20
|
+
}
|
|
21
|
+
record(spaceId, observedAt, generation = this.generation) {
|
|
22
|
+
const deletedGeneration = this.deletedGenerations.get(spaceId) ?? 0;
|
|
23
|
+
if (generation < this.clearGeneration || generation < deletedGeneration)
|
|
24
|
+
return;
|
|
25
|
+
const timestamp = observedAt.getTime();
|
|
26
|
+
if (!Number.isFinite(timestamp))
|
|
27
|
+
return;
|
|
28
|
+
this.activity.set(spaceId, Math.max(timestamp, this.activity.get(spaceId) ?? timestamp));
|
|
29
|
+
}
|
|
30
|
+
readLatest(space) {
|
|
31
|
+
const recorded = this.activity.get(space.id);
|
|
32
|
+
if (recorded === undefined)
|
|
33
|
+
return space.lastActivityAt;
|
|
34
|
+
const persisted = space.lastActivityAt instanceof Date ? space.lastActivityAt.getTime() : Date.parse(space.lastActivityAt ?? '');
|
|
35
|
+
return new Date(Number.isFinite(persisted) ? Math.max(recorded, persisted) : recorded);
|
|
36
|
+
}
|
|
37
|
+
delete(spaceId) {
|
|
38
|
+
this.generation += 1;
|
|
39
|
+
this.deletedGenerations.set(spaceId, this.generation);
|
|
40
|
+
this.activity.delete(spaceId);
|
|
41
|
+
}
|
|
42
|
+
clear() {
|
|
43
|
+
this.generation += 1;
|
|
44
|
+
this.clearGeneration = this.generation;
|
|
45
|
+
this.deletedGenerations.clear();
|
|
46
|
+
this.activity.clear();
|
|
47
|
+
}
|
|
48
|
+
onModuleDestroy() {
|
|
49
|
+
this.clear();
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
exports.SpaceActivityService = SpaceActivityService;
|
|
53
|
+
exports.SpaceActivityService = SpaceActivityService = __decorate([
|
|
54
|
+
(0, common_1.Injectable)()
|
|
55
|
+
], SpaceActivityService);
|
|
56
|
+
//# sourceMappingURL=space-activity.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"space-activity.service.js","sourceRoot":"","sources":["../../../../src/modules/spaces/services/space-activity.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA6D;AAUtD,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAA1B;QACW,aAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;QACrC,uBAAkB,GAAG,IAAI,GAAG,EAAkB,CAAC;QACxD,eAAU,GAAG,CAAC,CAAC;QACf,oBAAe,GAAG,CAAC,CAAC;IAyC7B,CAAC;IAvCA,aAAa;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC;IACxB,CAAC;IAED,MAAM,CAAC,OAAe,EAAE,UAAgB,EAAE,UAAU,GAAG,IAAI,CAAC,UAAU;QAErE,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACpE,IAAI,UAAU,GAAG,IAAI,CAAC,eAAe,IAAI,UAAU,GAAG,iBAAiB;YAAE,OAAO;QAChF,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,OAAO;QACxC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC;IAC1F,CAAC;IAED,UAAU,CAAC,KAAiD;QAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7C,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC,cAAc,CAAC;QAExD,MAAM,SAAS,GACd,KAAK,CAAC,cAAc,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;QAChH,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACxF,CAAC;IAED,MAAM,CAAC,OAAe;QACrB,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;QAErB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACtD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK;QACJ,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC;QACvC,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAED,eAAe;QACd,IAAI,CAAC,KAAK,EAAE,CAAC;IACd,CAAC;CACD,CAAA;AA7CY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,mBAAU,GAAE;GACA,oBAAoB,CA6ChC"}
|
|
@@ -38,6 +38,7 @@ const space_role_entity_1 = require("./entities/space-role.entity");
|
|
|
38
38
|
const space_entity_1 = require("./entities/space.entity");
|
|
39
39
|
const config_model_1 = require("./models/config.model");
|
|
40
40
|
const module_reset_service_1 = require("./services/module-reset.service");
|
|
41
|
+
const space_activity_service_1 = require("./services/space-activity.service");
|
|
41
42
|
const space_create_builder_registry_service_1 = require("./services/space-create-builder-registry.service");
|
|
42
43
|
const space_relations_loader_registry_service_1 = require("./services/space-relations-loader-registry.service");
|
|
43
44
|
const space_roles_type_mapper_service_1 = require("./services/space-roles-type-mapper.service");
|
|
@@ -46,6 +47,7 @@ const spaces_type_mapper_service_1 = require("./services/spaces-type-mapper.serv
|
|
|
46
47
|
const spaces_service_1 = require("./services/spaces.service");
|
|
47
48
|
const spaces_constants_1 = require("./spaces.constants");
|
|
48
49
|
const spaces_openapi_1 = require("./spaces.openapi");
|
|
50
|
+
const space_activity_subscriber_1 = require("./subscribers/space-activity.subscriber");
|
|
49
51
|
let SpacesModule = class SpacesModule {
|
|
50
52
|
constructor(swaggerRegistry, extensionsService, modulesMapperService, moduleReset, factoryResetRegistry) {
|
|
51
53
|
this.swaggerRegistry = swaggerRegistry;
|
|
@@ -139,6 +141,8 @@ exports.SpacesModule = SpacesModule = __decorate([
|
|
|
139
141
|
controllers: [spaces_controller_1.SpacesController, spaces_domain_controller_1.SpacesDomainController],
|
|
140
142
|
providers: [
|
|
141
143
|
spaces_service_1.SpacesService,
|
|
144
|
+
space_activity_service_1.SpaceActivityService,
|
|
145
|
+
space_activity_subscriber_1.SpaceActivitySubscriber,
|
|
142
146
|
spaces_bulk_service_1.SpacesBulkService,
|
|
143
147
|
spaces_type_mapper_service_1.SpacesTypeMapperService,
|
|
144
148
|
space_roles_type_mapper_service_1.SpaceRolesTypeMapperService,
|
|
@@ -148,6 +152,7 @@ exports.SpacesModule = SpacesModule = __decorate([
|
|
|
148
152
|
],
|
|
149
153
|
exports: [
|
|
150
154
|
spaces_service_1.SpacesService,
|
|
155
|
+
space_activity_service_1.SpaceActivityService,
|
|
151
156
|
spaces_bulk_service_1.SpacesBulkService,
|
|
152
157
|
spaces_type_mapper_service_1.SpacesTypeMapperService,
|
|
153
158
|
space_roles_type_mapper_service_1.SpaceRolesTypeMapperService,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spaces.module.js","sourceRoot":"","sources":["../../../src/modules/spaces/spaces.module.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAsD;AACtD,6CAAgD;AAEhD,qHAAgH;AAChH,oGAA+F;AAC/F,sIAA+H;AAC/H,oHAA8G;AAC9G,kHAA4G;AAC5G,sHAAgH;AAChH,wIAAiI;AACjI,kHAA4G;AAC5G,oGAA+F;AAC/F,gGAA0F;AAC1F,8DAA0D;AAC1D,uEAAiF;AACjF,0EAAqE;AACrE,kFAA8E;AAC9E,8DAA0D;AAC1D,2DAAoD;AACpD,+EAAiE;AACjE,yGAAmG;AACnG,sGAAgG;AAChG,wDAAoD;AAEpD,uEAAmE;AACnE,+DAAgE;AAChE,oEAA+D;AAC/D,0DAAsD;AACtD,wDAA0D;AAC1D,0EAA2E;AAC3E,4GAAqG;AACrG,gHAAyG;AACzG,gGAAyF;AACzF,wEAAmE;AACnE,sFAAgF;AAChF,8DAA0D;AAC1D,yDAAuH;AACvH,qDAA+D;
|
|
1
|
+
{"version":3,"file":"spaces.module.js","sourceRoot":"","sources":["../../../src/modules/spaces/spaces.module.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { DataSource, EntitySubscriberInterface, RemoveEvent, TransactionCommitEvent, TransactionRollbackEvent, TransactionStartEvent } from 'typeorm';
|
|
2
|
+
import { OnModuleDestroy } from '@nestjs/common';
|
|
3
|
+
import { SpaceEntity } from '../entities/space.entity';
|
|
4
|
+
import { SpaceActivityService } from '../services/space-activity.service';
|
|
5
|
+
export declare class SpaceActivitySubscriber implements EntitySubscriberInterface<SpaceEntity>, OnModuleDestroy {
|
|
6
|
+
private readonly activity;
|
|
7
|
+
private readonly dataSource;
|
|
8
|
+
private readonly pendingRemovals;
|
|
9
|
+
constructor(activity: SpaceActivityService, dataSource: DataSource);
|
|
10
|
+
listenTo(): typeof SpaceEntity;
|
|
11
|
+
afterLoad(space: SpaceEntity): void;
|
|
12
|
+
afterTransactionStart(event: TransactionStartEvent): void;
|
|
13
|
+
afterRemove(event: RemoveEvent<SpaceEntity>): void;
|
|
14
|
+
afterTransactionCommit(event: TransactionCommitEvent): void;
|
|
15
|
+
afterTransactionRollback(event: TransactionRollbackEvent): void;
|
|
16
|
+
onModuleDestroy(): void;
|
|
17
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
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;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.SpaceActivitySubscriber = void 0;
|
|
13
|
+
const typeorm_1 = require("typeorm");
|
|
14
|
+
const common_1 = require("@nestjs/common");
|
|
15
|
+
const space_entity_1 = require("../entities/space.entity");
|
|
16
|
+
const space_activity_service_1 = require("../services/space-activity.service");
|
|
17
|
+
let SpaceActivitySubscriber = class SpaceActivitySubscriber {
|
|
18
|
+
constructor(activity, dataSource) {
|
|
19
|
+
this.activity = activity;
|
|
20
|
+
this.dataSource = dataSource;
|
|
21
|
+
this.pendingRemovals = new WeakMap();
|
|
22
|
+
this.dataSource.subscribers.push(this);
|
|
23
|
+
}
|
|
24
|
+
listenTo() {
|
|
25
|
+
return space_entity_1.SpaceEntity;
|
|
26
|
+
}
|
|
27
|
+
afterLoad(space) {
|
|
28
|
+
space.lastActivityAt = this.activity.readLatest(space);
|
|
29
|
+
}
|
|
30
|
+
afterTransactionStart(event) {
|
|
31
|
+
const levels = this.pendingRemovals.get(event.queryRunner) ?? [];
|
|
32
|
+
levels.push(new Set());
|
|
33
|
+
this.pendingRemovals.set(event.queryRunner, levels);
|
|
34
|
+
}
|
|
35
|
+
afterRemove(event) {
|
|
36
|
+
const id = typeof event.entityId === 'string' ? event.entityId : (event.entity?.id ?? event.databaseEntity?.id);
|
|
37
|
+
if (event.queryRunner.isTransactionActive) {
|
|
38
|
+
const levels = this.pendingRemovals.get(event.queryRunner) ?? [new Set()];
|
|
39
|
+
const pending = levels.at(-1);
|
|
40
|
+
if (pending === null)
|
|
41
|
+
return;
|
|
42
|
+
if (id)
|
|
43
|
+
pending.add(id);
|
|
44
|
+
else
|
|
45
|
+
levels[levels.length - 1] = null;
|
|
46
|
+
this.pendingRemovals.set(event.queryRunner, levels);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (id)
|
|
50
|
+
this.activity.delete(id);
|
|
51
|
+
else
|
|
52
|
+
this.activity.clear();
|
|
53
|
+
}
|
|
54
|
+
afterTransactionCommit(event) {
|
|
55
|
+
const levels = this.pendingRemovals.get(event.queryRunner);
|
|
56
|
+
const pending = levels?.pop();
|
|
57
|
+
if (levels?.length) {
|
|
58
|
+
const parent = levels.at(-1);
|
|
59
|
+
if (pending === null)
|
|
60
|
+
levels[levels.length - 1] = null;
|
|
61
|
+
else
|
|
62
|
+
pending?.forEach((id) => parent?.add(id));
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
this.pendingRemovals.delete(event.queryRunner);
|
|
66
|
+
if (pending === null)
|
|
67
|
+
this.activity.clear();
|
|
68
|
+
else
|
|
69
|
+
pending?.forEach((id) => this.activity.delete(id));
|
|
70
|
+
}
|
|
71
|
+
afterTransactionRollback(event) {
|
|
72
|
+
const levels = this.pendingRemovals.get(event.queryRunner);
|
|
73
|
+
levels?.pop();
|
|
74
|
+
if (!levels?.length)
|
|
75
|
+
this.pendingRemovals.delete(event.queryRunner);
|
|
76
|
+
}
|
|
77
|
+
onModuleDestroy() {
|
|
78
|
+
const index = this.dataSource.subscribers.indexOf(this);
|
|
79
|
+
if (index >= 0)
|
|
80
|
+
this.dataSource.subscribers.splice(index, 1);
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
exports.SpaceActivitySubscriber = SpaceActivitySubscriber;
|
|
84
|
+
exports.SpaceActivitySubscriber = SpaceActivitySubscriber = __decorate([
|
|
85
|
+
(0, common_1.Injectable)(),
|
|
86
|
+
__metadata("design:paramtypes", [space_activity_service_1.SpaceActivityService,
|
|
87
|
+
typeorm_1.DataSource])
|
|
88
|
+
], SpaceActivitySubscriber);
|
|
89
|
+
//# sourceMappingURL=space-activity.subscriber.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"space-activity.subscriber.js","sourceRoot":"","sources":["../../../../src/modules/spaces/subscribers/space-activity.subscriber.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAOiB;AAEjB,2CAA6D;AAE7D,2DAAuD;AACvD,+EAA0E;AAGnE,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAGnC,YACkB,QAA8B,EAC9B,UAAsB;QADtB,aAAQ,GAAR,QAAQ,CAAsB;QAC9B,eAAU,GAAV,UAAU,CAAY;QAJvB,oBAAe,GAAG,IAAI,OAAO,EAAqC,CAAC;QAMnF,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,QAAQ;QACP,OAAO,0BAAW,CAAC;IACpB,CAAC;IAED,SAAS,CAAC,KAAkB;QAC3B,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC;IAED,qBAAqB,CAAC,KAA4B;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QACjE,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QACvB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IAED,WAAW,CAAC,KAA+B;QAC1C,MAAM,EAAE,GAAG,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAChH,IAAI,KAAK,CAAC,WAAW,CAAC,mBAAmB,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,GAAG,EAAU,CAAC,CAAC;YAClF,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,OAAO,KAAK,IAAI;gBAAE,OAAO;YAC7B,IAAI,EAAE;gBAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;;gBACnB,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;YACtC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YACpD,OAAO;QACR,CAAC;QACD,IAAI,EAAE;YAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;;YAC5B,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,sBAAsB,CAAC,KAA6B;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,MAAM,EAAE,GAAG,EAAE,CAAC;QAC9B,IAAI,MAAM,EAAE,MAAM,EAAE,CAAC;YAEpB,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,OAAO,KAAK,IAAI;gBAAE,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;;gBAClD,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/C,OAAO;QACR,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC/C,IAAI,OAAO,KAAK,IAAI;YAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;;YACvC,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,wBAAwB,CAAC,KAA+B;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,EAAE,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,MAAM,EAAE,MAAM;YAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACrE,CAAC;IAED,eAAe;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACxD,IAAI,KAAK,IAAI,CAAC;YAAE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC;CACD,CAAA;AAhEY,0DAAuB;kCAAvB,uBAAuB;IADnC,IAAA,mBAAU,GAAE;qCAKgB,6CAAoB;QAClB,oBAAU;GAL5B,uBAAuB,CAgEnC"}
|
|
@@ -15,7 +15,6 @@ const jwt_1 = require("@nestjs/jwt");
|
|
|
15
15
|
const logger_1 = require("../../../common/logger");
|
|
16
16
|
const transform_utils_1 = require("../../../common/utils/transform.utils");
|
|
17
17
|
const auth_constants_1 = require("../../auth/auth.constants");
|
|
18
|
-
const auth_entity_1 = require("../../auth/entities/auth.entity");
|
|
19
18
|
const tokens_service_1 = require("../../auth/services/tokens.service");
|
|
20
19
|
const token_utils_1 = require("../../auth/utils/token.utils");
|
|
21
20
|
const mcp_constants_1 = require("../../mcp/mcp.constants");
|
|
@@ -64,22 +63,17 @@ let WsAuthService = class WsAuthService {
|
|
|
64
63
|
return this.validateLongLiveToken(client, token);
|
|
65
64
|
}
|
|
66
65
|
async validateUserAccessToken(client, token, userId) {
|
|
67
|
-
const storedAccessToken = await this.tokensService.
|
|
66
|
+
const storedAccessToken = await this.tokensService.findAuthenticationAccessToken(userId, (0, token_utils_1.hashToken)(token));
|
|
68
67
|
if (!storedAccessToken) {
|
|
69
68
|
this.logger.warn('Access token not found in database');
|
|
70
69
|
throw new websocket_exceptions_1.WebsocketNotAllowedException('Token not found');
|
|
71
70
|
}
|
|
72
|
-
if (storedAccessToken.revoked || storedAccessToken.
|
|
71
|
+
if (storedAccessToken.revoked || storedAccessToken.refreshRevoked) {
|
|
73
72
|
this.logger.warn('Access token is revoked');
|
|
74
73
|
throw new websocket_exceptions_1.WebsocketNotAllowedException('Token revoked');
|
|
75
74
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
user = await this.usersService.getOneOrThrow(userId);
|
|
79
|
-
}
|
|
80
|
-
catch (error) {
|
|
81
|
-
const err = error;
|
|
82
|
-
this.logger.warn('Token valid, but user not found', { message: err.message, stack: err.stack });
|
|
75
|
+
const user = storedAccessToken.owner;
|
|
76
|
+
if (!user || user.id !== userId) {
|
|
83
77
|
throw new websocket_exceptions_1.WebsocketNotAllowedException('Invalid user');
|
|
84
78
|
}
|
|
85
79
|
client.data['user'] = (0, transform_utils_1.toInstance)(client_user_dto_1.ClientUserDto, { id: user.id, role: user.role, type: 'user' });
|
|
@@ -87,14 +81,7 @@ let WsAuthService = class WsAuthService {
|
|
|
87
81
|
return true;
|
|
88
82
|
}
|
|
89
83
|
async validateDisplayToken(client, token, displayId) {
|
|
90
|
-
const
|
|
91
|
-
let storedToken = null;
|
|
92
|
-
for (const displayToken of displayTokens) {
|
|
93
|
-
if ((0, token_utils_1.hashToken)(token) === displayToken.hashedToken) {
|
|
94
|
-
storedToken = displayToken;
|
|
95
|
-
break;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
84
|
+
const storedToken = await this.tokensService.findAuthenticationTokenByHash((0, token_utils_1.hashToken)(token));
|
|
98
85
|
if (!storedToken) {
|
|
99
86
|
this.logger.warn('Display token not found in database');
|
|
100
87
|
throw new websocket_exceptions_1.WebsocketNotAllowedException('Token not found');
|
|
@@ -107,6 +94,9 @@ let WsAuthService = class WsAuthService {
|
|
|
107
94
|
this.logger.warn('Display token is expired');
|
|
108
95
|
throw new websocket_exceptions_1.WebsocketNotAllowedException('Token expired');
|
|
109
96
|
}
|
|
97
|
+
if (storedToken.ownerType !== auth_constants_1.TokenOwnerType.DISPLAY || storedToken.ownerId !== displayId) {
|
|
98
|
+
throw new websocket_exceptions_1.WebsocketNotAllowedException('Invalid display token owner');
|
|
99
|
+
}
|
|
110
100
|
client.data['user'] = (0, transform_utils_1.toInstance)(client_user_dto_1.ClientUserDto, {
|
|
111
101
|
id: storedToken.ownerId,
|
|
112
102
|
role: users_constants_1.UserRole.USER,
|
|
@@ -116,18 +106,9 @@ let WsAuthService = class WsAuthService {
|
|
|
116
106
|
});
|
|
117
107
|
this.logger.debug(`Display authentication successful for display=${displayId}`);
|
|
118
108
|
return true;
|
|
119
|
-
this.logger.debug(`Token authentication successful (ownerType=${storedToken.ownerType})`);
|
|
120
|
-
return true;
|
|
121
109
|
}
|
|
122
110
|
async validateLongLiveToken(client, token) {
|
|
123
|
-
const
|
|
124
|
-
let storedLongLiveToken = null;
|
|
125
|
-
for (const longLiveToken of storedLongLiveTokens) {
|
|
126
|
-
if ((0, token_utils_1.hashToken)(token) === longLiveToken.hashedToken) {
|
|
127
|
-
storedLongLiveToken = longLiveToken;
|
|
128
|
-
break;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
111
|
+
const storedLongLiveToken = await this.tokensService.findAuthenticationTokenByHash((0, token_utils_1.hashToken)(token));
|
|
131
112
|
if (!storedLongLiveToken) {
|
|
132
113
|
this.logger.warn('Long-live token not found');
|
|
133
114
|
throw new websocket_exceptions_1.WebsocketNotAllowedException('Unknown token');
|
|
@@ -140,6 +121,9 @@ let WsAuthService = class WsAuthService {
|
|
|
140
121
|
this.logger.warn('Long-live token is expired');
|
|
141
122
|
throw new websocket_exceptions_1.WebsocketNotAllowedException('Token expired');
|
|
142
123
|
}
|
|
124
|
+
if (storedLongLiveToken.ownerType === auth_constants_1.TokenOwnerType.MCP) {
|
|
125
|
+
throw new websocket_exceptions_1.WebsocketNotAllowedException('MCP credentials cannot authenticate WebSocket connections');
|
|
126
|
+
}
|
|
143
127
|
let role = users_constants_1.UserRole.USER;
|
|
144
128
|
if (storedLongLiveToken.ownerType === auth_constants_1.TokenOwnerType.USER && storedLongLiveToken.ownerId) {
|
|
145
129
|
const user = await this.usersService.findOne(storedLongLiveToken.ownerId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-auth.service.js","sourceRoot":"","sources":["../../../../src/modules/websocket/services/ws-auth.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,2CAA4C;AAC5C,qCAAyC;AAEzC,mDAA+D;AAC/D,2EAAmE;AACnE,8DAA2D;AAC3D,
|
|
1
|
+
{"version":3,"file":"ws-auth.service.js","sourceRoot":"","sources":["../../../../src/modules/websocket/services/ws-auth.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,12 @@
|
|
|
1
1
|
import { IDevicePlatform, IDevicePropertyData } from '../../../modules/devices/platforms/device.platform';
|
|
2
|
-
import {
|
|
3
|
-
import { ChannelsService } from '../../../modules/devices/services/channels.service';
|
|
4
|
-
import { DevicesService } from '../../../modules/devices/services/devices.service';
|
|
2
|
+
import { DeviceCommandGraphService } from '../../../modules/devices/services/device-command-graph.service';
|
|
5
3
|
import { PlatformRegistryService } from '../../../modules/devices/services/platform.registry.service';
|
|
6
4
|
export declare class VirtualDevicePlatform implements IDevicePlatform {
|
|
7
|
-
private readonly
|
|
8
|
-
private readonly channelsService;
|
|
9
|
-
private readonly channelsPropertiesService;
|
|
5
|
+
private readonly graphs;
|
|
10
6
|
private readonly platformRegistryService;
|
|
11
7
|
private readonly logger;
|
|
12
|
-
constructor(
|
|
8
|
+
constructor(graphs: DeviceCommandGraphService, platformRegistryService: PlatformRegistryService);
|
|
13
9
|
getType(): string;
|
|
14
10
|
process(data: IDevicePropertyData): Promise<boolean>;
|
|
15
11
|
processBatch(updates: IDevicePropertyData[]): Promise<boolean>;
|
|
16
|
-
private resolveSource;
|
|
17
12
|
}
|
|
@@ -13,17 +13,13 @@ exports.VirtualDevicePlatform = void 0;
|
|
|
13
13
|
const common_1 = require("@nestjs/common");
|
|
14
14
|
const extension_logger_service_1 = require("../../../common/logger/extension-logger.service");
|
|
15
15
|
const devices_constants_1 = require("../../../modules/devices/devices.constants");
|
|
16
|
-
const
|
|
17
|
-
const channels_service_1 = require("../../../modules/devices/services/channels.service");
|
|
18
|
-
const devices_service_1 = require("../../../modules/devices/services/devices.service");
|
|
16
|
+
const device_command_graph_service_1 = require("../../../modules/devices/services/device-command-graph.service");
|
|
19
17
|
const platform_registry_service_1 = require("../../../modules/devices/services/platform.registry.service");
|
|
20
18
|
const devices_virtual_constants_1 = require("../devices-virtual.constants");
|
|
21
19
|
const devices_virtual_entity_1 = require("../entities/devices-virtual.entity");
|
|
22
20
|
let VirtualDevicePlatform = class VirtualDevicePlatform {
|
|
23
|
-
constructor(
|
|
24
|
-
this.
|
|
25
|
-
this.channelsService = channelsService;
|
|
26
|
-
this.channelsPropertiesService = channelsPropertiesService;
|
|
21
|
+
constructor(graphs, platformRegistryService) {
|
|
22
|
+
this.graphs = graphs;
|
|
27
23
|
this.platformRegistryService = platformRegistryService;
|
|
28
24
|
this.logger = (0, extension_logger_service_1.createExtensionLogger)(devices_virtual_constants_1.DEVICES_VIRTUAL_PLUGIN_NAME, 'VirtualDevicePlatform');
|
|
29
25
|
}
|
|
@@ -54,8 +50,9 @@ let VirtualDevicePlatform = class VirtualDevicePlatform {
|
|
|
54
50
|
this.logger.warn(`Property id=${property.id} has no source, it was deleted`);
|
|
55
51
|
return false;
|
|
56
52
|
}
|
|
57
|
-
const resolved = await this.
|
|
53
|
+
const resolved = await this.graphs.findPropertyTarget(property.sourcePropertyId);
|
|
58
54
|
if (!resolved) {
|
|
55
|
+
this.logger.warn(`Source property id=${property.sourcePropertyId} has no complete device graph`);
|
|
59
56
|
return false;
|
|
60
57
|
}
|
|
61
58
|
const { device, channel, property: sourceProperty } = resolved;
|
|
@@ -89,38 +86,11 @@ let VirtualDevicePlatform = class VirtualDevicePlatform {
|
|
|
89
86
|
}
|
|
90
87
|
return true;
|
|
91
88
|
}
|
|
92
|
-
async resolveSource(sourcePropertyId) {
|
|
93
|
-
const property = await this.channelsPropertiesService.findOne(sourcePropertyId);
|
|
94
|
-
if (!property) {
|
|
95
|
-
this.logger.warn(`Source property id=${sourcePropertyId} not found`);
|
|
96
|
-
return null;
|
|
97
|
-
}
|
|
98
|
-
const channelId = typeof property.channel === 'string' ? property.channel : property.channel?.id;
|
|
99
|
-
const parent = typeof property.channel === 'string' ? await this.channelsService.findOne(property.channel) : property.channel;
|
|
100
|
-
if (!parent) {
|
|
101
|
-
this.logger.warn(`Source channel for property id=${sourcePropertyId} not found`);
|
|
102
|
-
return null;
|
|
103
|
-
}
|
|
104
|
-
const deviceId = typeof parent.device === 'string' ? parent.device : parent.device?.id;
|
|
105
|
-
const device = deviceId ? await this.devicesService.findOne(deviceId) : null;
|
|
106
|
-
if (!device) {
|
|
107
|
-
this.logger.warn(`Source device for property id=${sourcePropertyId} not found`);
|
|
108
|
-
return null;
|
|
109
|
-
}
|
|
110
|
-
const channel = device.channels.find((candidate) => candidate.id === channelId);
|
|
111
|
-
if (!channel) {
|
|
112
|
-
this.logger.warn(`Source channel for property id=${sourcePropertyId} is no longer on device id=${device.id}`);
|
|
113
|
-
return null;
|
|
114
|
-
}
|
|
115
|
-
return { device, channel, property };
|
|
116
|
-
}
|
|
117
89
|
};
|
|
118
90
|
exports.VirtualDevicePlatform = VirtualDevicePlatform;
|
|
119
91
|
exports.VirtualDevicePlatform = VirtualDevicePlatform = __decorate([
|
|
120
92
|
(0, common_1.Injectable)(),
|
|
121
|
-
__metadata("design:paramtypes", [
|
|
122
|
-
channels_service_1.ChannelsService,
|
|
123
|
-
channels_properties_service_1.ChannelsPropertiesService,
|
|
93
|
+
__metadata("design:paramtypes", [device_command_graph_service_1.DeviceCommandGraphService,
|
|
124
94
|
platform_registry_service_1.PlatformRegistryService])
|
|
125
95
|
], VirtualDevicePlatform);
|
|
126
96
|
//# sourceMappingURL=virtual-device.platform.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"virtual-device.platform.js","sourceRoot":"","sources":["../../../../src/plugins/devices-virtual/platforms/virtual-device.platform.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAE5C,8FAAwF;AACxF,kFAA6E;AAG7E
|
|
1
|
+
{"version":3,"file":"virtual-device.platform.js","sourceRoot":"","sources":["../../../../src/plugins/devices-virtual/platforms/virtual-device.platform.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
import { Repository } from 'typeorm';
|
|
2
1
|
import { OnModuleInit } from '@nestjs/common';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { ChannelPropertyEntity } from '../../../modules/devices/entities/devices.entity';
|
|
3
|
+
import { PropertyMetadataService } from '../../../modules/devices/services/property-metadata.service';
|
|
4
|
+
import { SpaceActivityService } from '../../../modules/spaces/services/space-activity.service';
|
|
5
5
|
export declare class SpaceActivityListener implements OnModuleInit {
|
|
6
|
-
private readonly
|
|
7
|
-
private readonly
|
|
6
|
+
private readonly propertyMetadata;
|
|
7
|
+
private readonly activity;
|
|
8
8
|
private readonly logger;
|
|
9
|
-
constructor(
|
|
9
|
+
constructor(propertyMetadata: PropertyMetadataService, activity: SpaceActivityService);
|
|
10
10
|
onModuleInit(): void;
|
|
11
11
|
handlePropertyUpdated(property: ChannelPropertyEntity): Promise<void>;
|
|
12
|
-
private updateSpaceActivity;
|
|
13
12
|
}
|