@venturialstd/tenant 0.0.1
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/README.md +974 -0
- package/dist/constants/tenant.constant.d.ts +28 -0
- package/dist/constants/tenant.constant.d.ts.map +1 -0
- package/dist/constants/tenant.constant.js +35 -0
- package/dist/constants/tenant.constant.js.map +1 -0
- package/dist/constants/tenant.settings.constant.d.ts +9 -0
- package/dist/constants/tenant.settings.constant.d.ts.map +1 -0
- package/dist/constants/tenant.settings.constant.js +12 -0
- package/dist/constants/tenant.settings.constant.js.map +1 -0
- package/dist/decorators/roles.decorator.d.ts +3 -0
- package/dist/decorators/roles.decorator.d.ts.map +1 -0
- package/dist/decorators/roles.decorator.js +7 -0
- package/dist/decorators/roles.decorator.js.map +1 -0
- package/dist/decorators/tenant.decorator.d.ts +4 -0
- package/dist/decorators/tenant.decorator.d.ts.map +1 -0
- package/dist/decorators/tenant.decorator.js +22 -0
- package/dist/decorators/tenant.decorator.js.map +1 -0
- package/dist/entities/tenant-user.entity.d.ts +16 -0
- package/dist/entities/tenant-user.entity.d.ts.map +1 -0
- package/dist/entities/tenant-user.entity.js +120 -0
- package/dist/entities/tenant-user.entity.js.map +1 -0
- package/dist/entities/tenant.entity.d.ts +16 -0
- package/dist/entities/tenant.entity.d.ts.map +1 -0
- package/dist/entities/tenant.entity.js +115 -0
- package/dist/entities/tenant.entity.js.map +1 -0
- package/dist/guards/tenant.guard.d.ts +16 -0
- package/dist/guards/tenant.guard.d.ts.map +1 -0
- package/dist/guards/tenant.guard.js +90 -0
- package/dist/guards/tenant.guard.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/services/tenant-user.service.d.ts +30 -0
- package/dist/services/tenant-user.service.d.ts.map +1 -0
- package/dist/services/tenant-user.service.js +245 -0
- package/dist/services/tenant-user.service.js.map +1 -0
- package/dist/services/tenant.service.d.ts +21 -0
- package/dist/services/tenant.service.d.ts.map +1 -0
- package/dist/services/tenant.service.js +157 -0
- package/dist/services/tenant.service.js.map +1 -0
- package/dist/settings/tenant.settings.d.ts +3 -0
- package/dist/settings/tenant.settings.d.ts.map +1 -0
- package/dist/settings/tenant.settings.js +85 -0
- package/dist/settings/tenant.settings.js.map +1 -0
- package/dist/tenant.module.d.ts +3 -0
- package/dist/tenant.module.d.ts.map +1 -0
- package/dist/tenant.module.js +28 -0
- package/dist/tenant.module.js.map +1 -0
- package/package.json +42 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export declare enum TENANT_PLAN {
|
|
2
|
+
FREE = "free",
|
|
3
|
+
STARTER = "starter",
|
|
4
|
+
PROFESSIONAL = "professional",
|
|
5
|
+
ENTERPRISE = "enterprise"
|
|
6
|
+
}
|
|
7
|
+
export declare enum TENANT_STATUS {
|
|
8
|
+
ACTIVE = "active",
|
|
9
|
+
INACTIVE = "inactive",
|
|
10
|
+
SUSPENDED = "suspended",
|
|
11
|
+
TRIAL = "trial"
|
|
12
|
+
}
|
|
13
|
+
export declare enum TENANT_USER_ROLE {
|
|
14
|
+
OWNER = "owner",
|
|
15
|
+
ADMIN = "admin",
|
|
16
|
+
MEMBER = "member",
|
|
17
|
+
VIEWER = "viewer"
|
|
18
|
+
}
|
|
19
|
+
export declare enum TENANT_USER_STATUS {
|
|
20
|
+
ACTIVE = "active",
|
|
21
|
+
INVITED = "invited",
|
|
22
|
+
SUSPENDED = "suspended"
|
|
23
|
+
}
|
|
24
|
+
export declare const TENANT_DEFAULTS: {
|
|
25
|
+
readonly TRIAL_DAYS: 14;
|
|
26
|
+
readonly PLAN: TENANT_PLAN.FREE;
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=tenant.constant.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant.constant.d.ts","sourceRoot":"","sources":["../../src/constants/tenant.constant.ts"],"names":[],"mappings":"AAAA,oBAAY,WAAW;IACrB,IAAI,SAAS;IACb,OAAO,YAAY;IACnB,YAAY,iBAAiB;IAC7B,UAAU,eAAe;CAC1B;AAED,oBAAY,aAAa;IACvB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,KAAK,UAAU;CAChB;AAED,oBAAY,gBAAgB;IAC1B,KAAK,UAAU;IACf,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,MAAM,WAAW;CAClB;AAED,oBAAY,kBAAkB;IAC5B,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,SAAS,cAAc;CACxB;AAED,eAAO,MAAM,eAAe;;;CAGlB,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TENANT_DEFAULTS = exports.TENANT_USER_STATUS = exports.TENANT_USER_ROLE = exports.TENANT_STATUS = exports.TENANT_PLAN = void 0;
|
|
4
|
+
var TENANT_PLAN;
|
|
5
|
+
(function (TENANT_PLAN) {
|
|
6
|
+
TENANT_PLAN["FREE"] = "free";
|
|
7
|
+
TENANT_PLAN["STARTER"] = "starter";
|
|
8
|
+
TENANT_PLAN["PROFESSIONAL"] = "professional";
|
|
9
|
+
TENANT_PLAN["ENTERPRISE"] = "enterprise";
|
|
10
|
+
})(TENANT_PLAN || (exports.TENANT_PLAN = TENANT_PLAN = {}));
|
|
11
|
+
var TENANT_STATUS;
|
|
12
|
+
(function (TENANT_STATUS) {
|
|
13
|
+
TENANT_STATUS["ACTIVE"] = "active";
|
|
14
|
+
TENANT_STATUS["INACTIVE"] = "inactive";
|
|
15
|
+
TENANT_STATUS["SUSPENDED"] = "suspended";
|
|
16
|
+
TENANT_STATUS["TRIAL"] = "trial";
|
|
17
|
+
})(TENANT_STATUS || (exports.TENANT_STATUS = TENANT_STATUS = {}));
|
|
18
|
+
var TENANT_USER_ROLE;
|
|
19
|
+
(function (TENANT_USER_ROLE) {
|
|
20
|
+
TENANT_USER_ROLE["OWNER"] = "owner";
|
|
21
|
+
TENANT_USER_ROLE["ADMIN"] = "admin";
|
|
22
|
+
TENANT_USER_ROLE["MEMBER"] = "member";
|
|
23
|
+
TENANT_USER_ROLE["VIEWER"] = "viewer";
|
|
24
|
+
})(TENANT_USER_ROLE || (exports.TENANT_USER_ROLE = TENANT_USER_ROLE = {}));
|
|
25
|
+
var TENANT_USER_STATUS;
|
|
26
|
+
(function (TENANT_USER_STATUS) {
|
|
27
|
+
TENANT_USER_STATUS["ACTIVE"] = "active";
|
|
28
|
+
TENANT_USER_STATUS["INVITED"] = "invited";
|
|
29
|
+
TENANT_USER_STATUS["SUSPENDED"] = "suspended";
|
|
30
|
+
})(TENANT_USER_STATUS || (exports.TENANT_USER_STATUS = TENANT_USER_STATUS = {}));
|
|
31
|
+
exports.TENANT_DEFAULTS = {
|
|
32
|
+
TRIAL_DAYS: 14,
|
|
33
|
+
PLAN: TENANT_PLAN.FREE,
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=tenant.constant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant.constant.js","sourceRoot":"","sources":["../../src/constants/tenant.constant.ts"],"names":[],"mappings":";;;AAAA,IAAY,WAKX;AALD,WAAY,WAAW;IACrB,4BAAa,CAAA;IACb,kCAAmB,CAAA;IACnB,4CAA6B,CAAA;IAC7B,wCAAyB,CAAA;AAC3B,CAAC,EALW,WAAW,2BAAX,WAAW,QAKtB;AAED,IAAY,aAKX;AALD,WAAY,aAAa;IACvB,kCAAiB,CAAA;IACjB,sCAAqB,CAAA;IACrB,wCAAuB,CAAA;IACvB,gCAAe,CAAA;AACjB,CAAC,EALW,aAAa,6BAAb,aAAa,QAKxB;AAED,IAAY,gBAKX;AALD,WAAY,gBAAgB;IAC1B,mCAAe,CAAA;IACf,mCAAe,CAAA;IACf,qCAAiB,CAAA;IACjB,qCAAiB,CAAA;AACnB,CAAC,EALW,gBAAgB,gCAAhB,gBAAgB,QAK3B;AAED,IAAY,kBAIX;AAJD,WAAY,kBAAkB;IAC5B,uCAAiB,CAAA;IACjB,yCAAmB,CAAA;IACnB,6CAAuB,CAAA;AACzB,CAAC,EAJW,kBAAkB,kCAAlB,kBAAkB,QAI7B;AAEY,QAAA,eAAe,GAAG;IAC7B,UAAU,EAAE,EAAE;IACd,IAAI,EAAE,WAAW,CAAC,IAAI;CACd,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const TENANT_SETTING_KEYS: {
|
|
2
|
+
GENERAL_ENABLED: string;
|
|
3
|
+
GENERAL_MAX_TENANTS: string;
|
|
4
|
+
GENERAL_DEFAULT_PLAN: string;
|
|
5
|
+
GENERAL_TRIAL_DAYS: string;
|
|
6
|
+
FEATURES_CUSTOM_DOMAIN: string;
|
|
7
|
+
FEATURES_API_ACCESS: string;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=tenant.settings.constant.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant.settings.constant.d.ts","sourceRoot":"","sources":["../../src/constants/tenant.settings.constant.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB;;;;;;;CAO/B,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TENANT_SETTING_KEYS = void 0;
|
|
4
|
+
exports.TENANT_SETTING_KEYS = {
|
|
5
|
+
GENERAL_ENABLED: 'GLOBAL:TENANT:GENERAL:ENABLED',
|
|
6
|
+
GENERAL_MAX_TENANTS: 'GLOBAL:TENANT:GENERAL:MAX_TENANTS',
|
|
7
|
+
GENERAL_DEFAULT_PLAN: 'GLOBAL:TENANT:GENERAL:DEFAULT_PLAN',
|
|
8
|
+
GENERAL_TRIAL_DAYS: 'GLOBAL:TENANT:GENERAL:TRIAL_DAYS',
|
|
9
|
+
FEATURES_CUSTOM_DOMAIN: 'GLOBAL:TENANT:FEATURES:CUSTOM_DOMAIN',
|
|
10
|
+
FEATURES_API_ACCESS: 'GLOBAL:TENANT:FEATURES:API_ACCESS',
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=tenant.settings.constant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant.settings.constant.js","sourceRoot":"","sources":["../../src/constants/tenant.settings.constant.ts"],"names":[],"mappings":";;;AAAa,QAAA,mBAAmB,GAAG;IACjC,eAAe,EAAE,+BAA+B;IAChD,mBAAmB,EAAE,mCAAmC;IACxD,oBAAoB,EAAE,oCAAoC;IAC1D,kBAAkB,EAAE,kCAAkC;IACtD,sBAAsB,EAAE,sCAAsC;IAC9D,mBAAmB,EAAE,mCAAmC;CACzD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roles.decorator.d.ts","sourceRoot":"","sources":["../../src/decorators/roles.decorator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAahE,eAAO,MAAM,KAAK,GAAI,GAAG,OAAO,gBAAgB,EAAE,qDAAgC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Roles = void 0;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
const Roles = (...roles) => (0, common_1.SetMetadata)('roles', roles);
|
|
6
|
+
exports.Roles = Roles;
|
|
7
|
+
//# sourceMappingURL=roles.decorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roles.decorator.js","sourceRoot":"","sources":["../../src/decorators/roles.decorator.ts"],"names":[],"mappings":";;;AAAA,2CAA6C;AAetC,MAAM,KAAK,GAAG,CAAC,GAAG,KAAyB,EAAE,EAAE,CAAC,IAAA,oBAAW,EAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAAtE,QAAA,KAAK,SAAiE"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const TenantId: (...dataOrPipes: unknown[]) => ParameterDecorator;
|
|
2
|
+
export declare const UserId: (...dataOrPipes: unknown[]) => ParameterDecorator;
|
|
3
|
+
export declare const TenantContext: (...dataOrPipes: unknown[]) => ParameterDecorator;
|
|
4
|
+
//# sourceMappingURL=tenant.decorator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant.decorator.d.ts","sourceRoot":"","sources":["../../src/decorators/tenant.decorator.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,QAAQ,mDAGnB,CAAC;AAWH,eAAO,MAAM,MAAM,mDAGjB,CAAC;AAWH,eAAO,MAAM,aAAa,mDAQxB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TenantContext = exports.UserId = exports.TenantId = void 0;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
exports.TenantId = (0, common_1.createParamDecorator)((data, ctx) => {
|
|
6
|
+
const request = ctx.switchToHttp().getRequest();
|
|
7
|
+
return request.tenantId || request.headers['x-tenant-id'];
|
|
8
|
+
});
|
|
9
|
+
exports.UserId = (0, common_1.createParamDecorator)((data, ctx) => {
|
|
10
|
+
const request = ctx.switchToHttp().getRequest();
|
|
11
|
+
return request.user?.id || request.userId;
|
|
12
|
+
});
|
|
13
|
+
exports.TenantContext = (0, common_1.createParamDecorator)((data, ctx) => {
|
|
14
|
+
const request = ctx.switchToHttp().getRequest();
|
|
15
|
+
return {
|
|
16
|
+
tenantId: request.tenantId || request.headers['x-tenant-id'],
|
|
17
|
+
userId: request.user?.id || request.userId,
|
|
18
|
+
role: request.tenantRole,
|
|
19
|
+
user: request.user,
|
|
20
|
+
};
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=tenant.decorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant.decorator.js","sourceRoot":"","sources":["../../src/decorators/tenant.decorator.ts"],"names":[],"mappings":";;;AAAA,2CAAwE;AAW3D,QAAA,QAAQ,GAAG,IAAA,6BAAoB,EAAC,CAAC,IAAa,EAAE,GAAqB,EAAU,EAAE;IAC5F,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;IAChD,OAAO,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AAC5D,CAAC,CAAC,CAAC;AAWU,QAAA,MAAM,GAAG,IAAA,6BAAoB,EAAC,CAAC,IAAa,EAAE,GAAqB,EAAU,EAAE;IAC1F,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;IAChD,OAAO,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,OAAO,CAAC,MAAM,CAAC;AAC5C,CAAC,CAAC,CAAC;AAWU,QAAA,aAAa,GAAG,IAAA,6BAAoB,EAAC,CAAC,IAAa,EAAE,GAAqB,EAAE,EAAE;IACzF,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;IAChD,OAAO;QACL,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;QAC5D,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,OAAO,CAAC,MAAM;QAC1C,IAAI,EAAE,OAAO,CAAC,UAAU;QACxB,IAAI,EAAE,OAAO,CAAC,IAAI;KACnB,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { TENANT_USER_ROLE, TENANT_USER_STATUS } from '../constants/tenant.constant';
|
|
2
|
+
export declare class TenantUser {
|
|
3
|
+
id: string;
|
|
4
|
+
tenantId: string;
|
|
5
|
+
userId: string;
|
|
6
|
+
role: TENANT_USER_ROLE;
|
|
7
|
+
status: TENANT_USER_STATUS;
|
|
8
|
+
isPrimary: boolean;
|
|
9
|
+
invitedBy: string;
|
|
10
|
+
invitedAt: Date;
|
|
11
|
+
joinedAt: Date;
|
|
12
|
+
permissions: Record<string, unknown>;
|
|
13
|
+
createdAt: Date;
|
|
14
|
+
updatedAt: Date;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=tenant-user.entity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant-user.entity.d.ts","sourceRoot":"","sources":["../../src/entities/tenant-user.entity.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAEpF,qBAEa,UAAU;IAErB,EAAE,EAAE,MAAM,CAAC;IAMX,QAAQ,EAAE,MAAM,CAAC;IAMjB,MAAM,EAAE,MAAM,CAAC;IASf,IAAI,EAAE,gBAAgB,CAAC;IASvB,MAAM,EAAE,kBAAkB,CAAC;IAI3B,SAAS,EAAE,OAAO,CAAC;IAKnB,SAAS,EAAE,MAAM,CAAC;IAKlB,SAAS,EAAE,IAAI,CAAC;IAKhB,QAAQ,EAAE,IAAI,CAAC;IAKf,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAQrC,SAAS,EAAE,IAAI,CAAC;IAQhB,SAAS,EAAE,IAAI,CAAC;CACjB"}
|
|
@@ -0,0 +1,120 @@
|
|
|
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.TenantUser = void 0;
|
|
13
|
+
const class_validator_1 = require("class-validator");
|
|
14
|
+
const typeorm_1 = require("typeorm");
|
|
15
|
+
const tenant_constant_1 = require("../constants/tenant.constant");
|
|
16
|
+
let TenantUser = class TenantUser {
|
|
17
|
+
id;
|
|
18
|
+
tenantId;
|
|
19
|
+
userId;
|
|
20
|
+
role;
|
|
21
|
+
status;
|
|
22
|
+
isPrimary;
|
|
23
|
+
invitedBy;
|
|
24
|
+
invitedAt;
|
|
25
|
+
joinedAt;
|
|
26
|
+
permissions;
|
|
27
|
+
createdAt;
|
|
28
|
+
updatedAt;
|
|
29
|
+
};
|
|
30
|
+
exports.TenantUser = TenantUser;
|
|
31
|
+
__decorate([
|
|
32
|
+
(0, typeorm_1.PrimaryGeneratedColumn)('uuid'),
|
|
33
|
+
__metadata("design:type", String)
|
|
34
|
+
], TenantUser.prototype, "id", void 0);
|
|
35
|
+
__decorate([
|
|
36
|
+
(0, class_validator_1.IsString)(),
|
|
37
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
38
|
+
(0, typeorm_1.Column)(),
|
|
39
|
+
(0, typeorm_1.Index)(),
|
|
40
|
+
__metadata("design:type", String)
|
|
41
|
+
], TenantUser.prototype, "tenantId", void 0);
|
|
42
|
+
__decorate([
|
|
43
|
+
(0, class_validator_1.IsString)(),
|
|
44
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
45
|
+
(0, typeorm_1.Column)(),
|
|
46
|
+
(0, typeorm_1.Index)(),
|
|
47
|
+
__metadata("design:type", String)
|
|
48
|
+
], TenantUser.prototype, "userId", void 0);
|
|
49
|
+
__decorate([
|
|
50
|
+
(0, class_validator_1.IsString)(),
|
|
51
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
52
|
+
(0, typeorm_1.Column)({
|
|
53
|
+
type: 'enum',
|
|
54
|
+
enum: tenant_constant_1.TENANT_USER_ROLE,
|
|
55
|
+
default: tenant_constant_1.TENANT_USER_ROLE.MEMBER,
|
|
56
|
+
}),
|
|
57
|
+
__metadata("design:type", String)
|
|
58
|
+
], TenantUser.prototype, "role", void 0);
|
|
59
|
+
__decorate([
|
|
60
|
+
(0, class_validator_1.IsString)(),
|
|
61
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
62
|
+
(0, typeorm_1.Column)({
|
|
63
|
+
type: 'enum',
|
|
64
|
+
enum: tenant_constant_1.TENANT_USER_STATUS,
|
|
65
|
+
default: tenant_constant_1.TENANT_USER_STATUS.ACTIVE,
|
|
66
|
+
}),
|
|
67
|
+
__metadata("design:type", String)
|
|
68
|
+
], TenantUser.prototype, "status", void 0);
|
|
69
|
+
__decorate([
|
|
70
|
+
(0, class_validator_1.IsBoolean)(),
|
|
71
|
+
(0, typeorm_1.Column)({ default: false }),
|
|
72
|
+
__metadata("design:type", Boolean)
|
|
73
|
+
], TenantUser.prototype, "isPrimary", void 0);
|
|
74
|
+
__decorate([
|
|
75
|
+
(0, class_validator_1.IsString)(),
|
|
76
|
+
(0, class_validator_1.IsOptional)(),
|
|
77
|
+
(0, typeorm_1.Column)({ nullable: true }),
|
|
78
|
+
__metadata("design:type", String)
|
|
79
|
+
], TenantUser.prototype, "invitedBy", void 0);
|
|
80
|
+
__decorate([
|
|
81
|
+
(0, class_validator_1.IsString)(),
|
|
82
|
+
(0, class_validator_1.IsOptional)(),
|
|
83
|
+
(0, typeorm_1.Column)({ type: 'timestamptz', nullable: true }),
|
|
84
|
+
__metadata("design:type", Date)
|
|
85
|
+
], TenantUser.prototype, "invitedAt", void 0);
|
|
86
|
+
__decorate([
|
|
87
|
+
(0, class_validator_1.IsString)(),
|
|
88
|
+
(0, class_validator_1.IsOptional)(),
|
|
89
|
+
(0, typeorm_1.Column)({ type: 'timestamptz', nullable: true }),
|
|
90
|
+
__metadata("design:type", Date)
|
|
91
|
+
], TenantUser.prototype, "joinedAt", void 0);
|
|
92
|
+
__decorate([
|
|
93
|
+
(0, class_validator_1.IsString)(),
|
|
94
|
+
(0, class_validator_1.IsOptional)(),
|
|
95
|
+
(0, typeorm_1.Column)({ type: 'jsonb', nullable: true }),
|
|
96
|
+
__metadata("design:type", Object)
|
|
97
|
+
], TenantUser.prototype, "permissions", void 0);
|
|
98
|
+
__decorate([
|
|
99
|
+
(0, typeorm_1.CreateDateColumn)({
|
|
100
|
+
name: 'createdAt',
|
|
101
|
+
nullable: false,
|
|
102
|
+
type: 'timestamptz',
|
|
103
|
+
default: () => 'CURRENT_TIMESTAMP',
|
|
104
|
+
}),
|
|
105
|
+
__metadata("design:type", Date)
|
|
106
|
+
], TenantUser.prototype, "createdAt", void 0);
|
|
107
|
+
__decorate([
|
|
108
|
+
(0, typeorm_1.UpdateDateColumn)({
|
|
109
|
+
name: 'updatedAt',
|
|
110
|
+
nullable: false,
|
|
111
|
+
type: 'timestamptz',
|
|
112
|
+
default: () => 'CURRENT_TIMESTAMP',
|
|
113
|
+
}),
|
|
114
|
+
__metadata("design:type", Date)
|
|
115
|
+
], TenantUser.prototype, "updatedAt", void 0);
|
|
116
|
+
exports.TenantUser = TenantUser = __decorate([
|
|
117
|
+
(0, typeorm_1.Entity)('tenant_user'),
|
|
118
|
+
(0, typeorm_1.Index)(['tenantId', 'userId'], { unique: true })
|
|
119
|
+
], TenantUser);
|
|
120
|
+
//# sourceMappingURL=tenant-user.entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant-user.entity.js","sourceRoot":"","sources":["../../src/entities/tenant-user.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAA8E;AAC9E,qCAOiB;AAEjB,kEAAoF;AAI7E,IAAM,UAAU,GAAhB,MAAM,UAAU;IAErB,EAAE,CAAS;IAMX,QAAQ,CAAS;IAMjB,MAAM,CAAS;IASf,IAAI,CAAmB;IASvB,MAAM,CAAqB;IAI3B,SAAS,CAAU;IAKnB,SAAS,CAAS;IAKlB,SAAS,CAAO;IAKhB,QAAQ,CAAO;IAKf,WAAW,CAA0B;IAQrC,SAAS,CAAO;IAQhB,SAAS,CAAO;CACjB,CAAA;AAzEY,gCAAU;AAErB;IADC,IAAA,gCAAsB,EAAC,MAAM,CAAC;;sCACpB;AAMX;IAJC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,gBAAM,GAAE;IACR,IAAA,eAAK,GAAE;;4CACS;AAMjB;IAJC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,gBAAM,GAAE;IACR,IAAA,eAAK,GAAE;;0CACO;AASf;IAPC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,kCAAgB;QACtB,OAAO,EAAE,kCAAgB,CAAC,MAAM;KACjC,CAAC;;wCACqB;AASvB;IAPC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,oCAAkB;QACxB,OAAO,EAAE,oCAAkB,CAAC,MAAM;KACnC,CAAC;;0CACyB;AAI3B;IAFC,IAAA,2BAAS,GAAE;IACX,IAAA,gBAAM,EAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;;6CACR;AAKnB;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CACT;AAKlB;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;8BACrC,IAAI;6CAAC;AAKhB;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;8BACtC,IAAI;4CAAC;AAKf;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;+CACL;AAQrC;IANC,IAAA,0BAAgB,EAAC;QAChB,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,GAAG,EAAE,CAAC,mBAAmB;KACnC,CAAC;8BACS,IAAI;6CAAC;AAQhB;IANC,IAAA,0BAAgB,EAAC;QAChB,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,GAAG,EAAE,CAAC,mBAAmB;KACnC,CAAC;8BACS,IAAI;6CAAC;qBAxEL,UAAU;IAFtB,IAAA,gBAAM,EAAC,aAAa,CAAC;IACrB,IAAA,eAAK,EAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;GACnC,UAAU,CAyEtB"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare class Tenant {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
slug: string;
|
|
5
|
+
domain: string;
|
|
6
|
+
description: string;
|
|
7
|
+
isActive: boolean;
|
|
8
|
+
settings: Record<string, unknown>;
|
|
9
|
+
ownerId: string;
|
|
10
|
+
plan: string;
|
|
11
|
+
trialEndsAt: Date;
|
|
12
|
+
subscriptionEndsAt: Date;
|
|
13
|
+
createdAt: Date;
|
|
14
|
+
updatedAt: Date;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=tenant.entity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant.entity.d.ts","sourceRoot":"","sources":["../../src/entities/tenant.entity.ts"],"names":[],"mappings":"AASA,qBACa,MAAM;IAEjB,EAAE,EAAE,MAAM,CAAC;IAKX,IAAI,EAAE,MAAM,CAAC;IAKb,IAAI,EAAE,MAAM,CAAC;IAKb,MAAM,EAAE,MAAM,CAAC;IAKf,WAAW,EAAE,MAAM,CAAC;IAIpB,QAAQ,EAAE,OAAO,CAAC;IAKlB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAKlC,OAAO,EAAE,MAAM,CAAC;IAKhB,IAAI,EAAE,MAAM,CAAC;IAKb,WAAW,EAAE,IAAI,CAAC;IAKlB,kBAAkB,EAAE,IAAI,CAAC;IAQzB,SAAS,EAAE,IAAI,CAAC;IAQhB,SAAS,EAAE,IAAI,CAAC;CACjB"}
|
|
@@ -0,0 +1,115 @@
|
|
|
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.Tenant = void 0;
|
|
13
|
+
const class_validator_1 = require("class-validator");
|
|
14
|
+
const typeorm_1 = require("typeorm");
|
|
15
|
+
let Tenant = class Tenant {
|
|
16
|
+
id;
|
|
17
|
+
name;
|
|
18
|
+
slug;
|
|
19
|
+
domain;
|
|
20
|
+
description;
|
|
21
|
+
isActive;
|
|
22
|
+
settings;
|
|
23
|
+
ownerId;
|
|
24
|
+
plan;
|
|
25
|
+
trialEndsAt;
|
|
26
|
+
subscriptionEndsAt;
|
|
27
|
+
createdAt;
|
|
28
|
+
updatedAt;
|
|
29
|
+
};
|
|
30
|
+
exports.Tenant = Tenant;
|
|
31
|
+
__decorate([
|
|
32
|
+
(0, typeorm_1.PrimaryGeneratedColumn)('uuid'),
|
|
33
|
+
__metadata("design:type", String)
|
|
34
|
+
], Tenant.prototype, "id", void 0);
|
|
35
|
+
__decorate([
|
|
36
|
+
(0, class_validator_1.IsString)(),
|
|
37
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
38
|
+
(0, typeorm_1.Column)({ unique: true }),
|
|
39
|
+
__metadata("design:type", String)
|
|
40
|
+
], Tenant.prototype, "name", void 0);
|
|
41
|
+
__decorate([
|
|
42
|
+
(0, class_validator_1.IsString)(),
|
|
43
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
44
|
+
(0, typeorm_1.Column)({ unique: true }),
|
|
45
|
+
__metadata("design:type", String)
|
|
46
|
+
], Tenant.prototype, "slug", void 0);
|
|
47
|
+
__decorate([
|
|
48
|
+
(0, class_validator_1.IsString)(),
|
|
49
|
+
(0, class_validator_1.IsOptional)(),
|
|
50
|
+
(0, typeorm_1.Column)({ nullable: true }),
|
|
51
|
+
__metadata("design:type", String)
|
|
52
|
+
], Tenant.prototype, "domain", void 0);
|
|
53
|
+
__decorate([
|
|
54
|
+
(0, class_validator_1.IsString)(),
|
|
55
|
+
(0, class_validator_1.IsOptional)(),
|
|
56
|
+
(0, typeorm_1.Column)({ nullable: true }),
|
|
57
|
+
__metadata("design:type", String)
|
|
58
|
+
], Tenant.prototype, "description", void 0);
|
|
59
|
+
__decorate([
|
|
60
|
+
(0, class_validator_1.IsBoolean)(),
|
|
61
|
+
(0, typeorm_1.Column)({ default: true }),
|
|
62
|
+
__metadata("design:type", Boolean)
|
|
63
|
+
], Tenant.prototype, "isActive", void 0);
|
|
64
|
+
__decorate([
|
|
65
|
+
(0, class_validator_1.IsString)(),
|
|
66
|
+
(0, class_validator_1.IsOptional)(),
|
|
67
|
+
(0, typeorm_1.Column)({ type: 'jsonb', nullable: true }),
|
|
68
|
+
__metadata("design:type", Object)
|
|
69
|
+
], Tenant.prototype, "settings", void 0);
|
|
70
|
+
__decorate([
|
|
71
|
+
(0, class_validator_1.IsString)(),
|
|
72
|
+
(0, class_validator_1.IsOptional)(),
|
|
73
|
+
(0, typeorm_1.Column)({ nullable: true }),
|
|
74
|
+
__metadata("design:type", String)
|
|
75
|
+
], Tenant.prototype, "ownerId", void 0);
|
|
76
|
+
__decorate([
|
|
77
|
+
(0, class_validator_1.IsString)(),
|
|
78
|
+
(0, class_validator_1.IsOptional)(),
|
|
79
|
+
(0, typeorm_1.Column)({ nullable: true }),
|
|
80
|
+
__metadata("design:type", String)
|
|
81
|
+
], Tenant.prototype, "plan", void 0);
|
|
82
|
+
__decorate([
|
|
83
|
+
(0, class_validator_1.IsString)(),
|
|
84
|
+
(0, class_validator_1.IsOptional)(),
|
|
85
|
+
(0, typeorm_1.Column)({ type: 'timestamptz', nullable: true }),
|
|
86
|
+
__metadata("design:type", Date)
|
|
87
|
+
], Tenant.prototype, "trialEndsAt", void 0);
|
|
88
|
+
__decorate([
|
|
89
|
+
(0, class_validator_1.IsString)(),
|
|
90
|
+
(0, class_validator_1.IsOptional)(),
|
|
91
|
+
(0, typeorm_1.Column)({ type: 'timestamptz', nullable: true }),
|
|
92
|
+
__metadata("design:type", Date)
|
|
93
|
+
], Tenant.prototype, "subscriptionEndsAt", void 0);
|
|
94
|
+
__decorate([
|
|
95
|
+
(0, typeorm_1.CreateDateColumn)({
|
|
96
|
+
name: 'createdAt',
|
|
97
|
+
nullable: false,
|
|
98
|
+
type: 'timestamptz',
|
|
99
|
+
default: () => 'CURRENT_TIMESTAMP',
|
|
100
|
+
}),
|
|
101
|
+
__metadata("design:type", Date)
|
|
102
|
+
], Tenant.prototype, "createdAt", void 0);
|
|
103
|
+
__decorate([
|
|
104
|
+
(0, typeorm_1.UpdateDateColumn)({
|
|
105
|
+
name: 'updatedAt',
|
|
106
|
+
nullable: false,
|
|
107
|
+
type: 'timestamptz',
|
|
108
|
+
default: () => 'CURRENT_TIMESTAMP',
|
|
109
|
+
}),
|
|
110
|
+
__metadata("design:type", Date)
|
|
111
|
+
], Tenant.prototype, "updatedAt", void 0);
|
|
112
|
+
exports.Tenant = Tenant = __decorate([
|
|
113
|
+
(0, typeorm_1.Entity)('tenant')
|
|
114
|
+
], Tenant);
|
|
115
|
+
//# sourceMappingURL=tenant.entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant.entity.js","sourceRoot":"","sources":["../../src/entities/tenant.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAA8E;AAC9E,qCAMiB;AAGV,IAAM,MAAM,GAAZ,MAAM,MAAM;IAEjB,EAAE,CAAS;IAKX,IAAI,CAAS;IAKb,IAAI,CAAS;IAKb,MAAM,CAAS;IAKf,WAAW,CAAS;IAIpB,QAAQ,CAAU;IAKlB,QAAQ,CAA0B;IAKlC,OAAO,CAAS;IAKhB,IAAI,CAAS;IAKb,WAAW,CAAO;IAKlB,kBAAkB,CAAO;IAQzB,SAAS,CAAO;IAQhB,SAAS,CAAO;CACjB,CAAA;AApEY,wBAAM;AAEjB;IADC,IAAA,gCAAsB,EAAC,MAAM,CAAC;;kCACpB;AAKX;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,gBAAM,EAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;;oCACZ;AAKb;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,gBAAM,EAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;;oCACZ;AAKb;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;sCACZ;AAKf;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;2CACP;AAIpB;IAFC,IAAA,2BAAS,GAAE;IACX,IAAA,gBAAM,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;wCACR;AAKlB;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;wCACR;AAKlC;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;uCACX;AAKhB;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;oCACd;AAKb;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;8BACnC,IAAI;2CAAC;AAKlB;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;8BAC5B,IAAI;kDAAC;AAQzB;IANC,IAAA,0BAAgB,EAAC;QAChB,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,GAAG,EAAE,CAAC,mBAAmB;KACnC,CAAC;8BACS,IAAI;yCAAC;AAQhB;IANC,IAAA,0BAAgB,EAAC;QAChB,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,GAAG,EAAE,CAAC,mBAAmB;KACnC,CAAC;8BACS,IAAI;yCAAC;iBAnEL,MAAM;IADlB,IAAA,gBAAM,EAAC,QAAQ,CAAC;GACJ,MAAM,CAoElB"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { CanActivate, ExecutionContext } from '@nestjs/common';
|
|
2
|
+
import { Reflector } from '@nestjs/core';
|
|
3
|
+
import { TenantUserService } from '../services/tenant-user.service';
|
|
4
|
+
export declare class TenantGuard implements CanActivate {
|
|
5
|
+
private readonly tenantUserService;
|
|
6
|
+
private readonly reflector;
|
|
7
|
+
constructor(tenantUserService: TenantUserService, reflector: Reflector);
|
|
8
|
+
canActivate(context: ExecutionContext): Promise<boolean>;
|
|
9
|
+
}
|
|
10
|
+
export declare class TenantRoleGuard implements CanActivate {
|
|
11
|
+
private readonly tenantUserService;
|
|
12
|
+
private readonly reflector;
|
|
13
|
+
constructor(tenantUserService: TenantUserService, reflector: Reflector);
|
|
14
|
+
canActivate(context: ExecutionContext): Promise<boolean>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=tenant.guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant.guard.d.ts","sourceRoot":"","sources":["../../src/guards/tenant.guard.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,gBAAgB,EAIjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAapE,qBACa,WAAY,YAAW,WAAW;IAE3C,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS;gBADT,iBAAiB,EAAE,iBAAiB,EACpC,SAAS,EAAE,SAAS;IAGjC,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;CAmC/D;AAaD,qBACa,eAAgB,YAAW,WAAW;IAE/C,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS;gBADT,iBAAiB,EAAE,iBAAiB,EACpC,SAAS,EAAE,SAAS;IAGjC,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;CAkC/D"}
|
|
@@ -0,0 +1,90 @@
|
|
|
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.TenantRoleGuard = exports.TenantGuard = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const core_1 = require("@nestjs/core");
|
|
15
|
+
const tenant_user_service_1 = require("../services/tenant-user.service");
|
|
16
|
+
let TenantGuard = class TenantGuard {
|
|
17
|
+
tenantUserService;
|
|
18
|
+
reflector;
|
|
19
|
+
constructor(tenantUserService, reflector) {
|
|
20
|
+
this.tenantUserService = tenantUserService;
|
|
21
|
+
this.reflector = reflector;
|
|
22
|
+
}
|
|
23
|
+
async canActivate(context) {
|
|
24
|
+
const request = context.switchToHttp().getRequest();
|
|
25
|
+
const tenantId = request.tenantId ||
|
|
26
|
+
request.headers['x-tenant-id'] ||
|
|
27
|
+
request.params.tenantId ||
|
|
28
|
+
request.query.tenantId;
|
|
29
|
+
if (!tenantId) {
|
|
30
|
+
throw new common_1.UnauthorizedException('Tenant ID is required');
|
|
31
|
+
}
|
|
32
|
+
const userId = request.user?.id || request.userId;
|
|
33
|
+
if (!userId) {
|
|
34
|
+
throw new common_1.UnauthorizedException('User authentication is required');
|
|
35
|
+
}
|
|
36
|
+
const hasAccess = await this.tenantUserService.hasAccess(tenantId, userId);
|
|
37
|
+
if (!hasAccess) {
|
|
38
|
+
throw new common_1.ForbiddenException('You do not have access to this tenant');
|
|
39
|
+
}
|
|
40
|
+
const role = await this.tenantUserService.getUserRole(tenantId, userId);
|
|
41
|
+
request.tenantId = tenantId;
|
|
42
|
+
request.tenantRole = role;
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
exports.TenantGuard = TenantGuard;
|
|
47
|
+
exports.TenantGuard = TenantGuard = __decorate([
|
|
48
|
+
(0, common_1.Injectable)(),
|
|
49
|
+
__metadata("design:paramtypes", [tenant_user_service_1.TenantUserService,
|
|
50
|
+
core_1.Reflector])
|
|
51
|
+
], TenantGuard);
|
|
52
|
+
let TenantRoleGuard = class TenantRoleGuard {
|
|
53
|
+
tenantUserService;
|
|
54
|
+
reflector;
|
|
55
|
+
constructor(tenantUserService, reflector) {
|
|
56
|
+
this.tenantUserService = tenantUserService;
|
|
57
|
+
this.reflector = reflector;
|
|
58
|
+
}
|
|
59
|
+
async canActivate(context) {
|
|
60
|
+
const requiredRoles = this.reflector.getAllAndOverride('roles', [
|
|
61
|
+
context.getHandler(),
|
|
62
|
+
context.getClass(),
|
|
63
|
+
]);
|
|
64
|
+
if (!requiredRoles || requiredRoles.length === 0) {
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
const request = context.switchToHttp().getRequest();
|
|
68
|
+
const tenantId = request.tenantId;
|
|
69
|
+
const userId = request.user?.id || request.userId;
|
|
70
|
+
if (!tenantId || !userId) {
|
|
71
|
+
throw new common_1.UnauthorizedException('Tenant and user context required');
|
|
72
|
+
}
|
|
73
|
+
const userRole = await this.tenantUserService.getUserRole(tenantId, userId);
|
|
74
|
+
if (!userRole) {
|
|
75
|
+
throw new common_1.ForbiddenException('User is not a member of this tenant');
|
|
76
|
+
}
|
|
77
|
+
const hasRole = requiredRoles.includes(userRole);
|
|
78
|
+
if (!hasRole) {
|
|
79
|
+
throw new common_1.ForbiddenException(`This action requires one of the following roles: ${requiredRoles.join(', ')}`);
|
|
80
|
+
}
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
exports.TenantRoleGuard = TenantRoleGuard;
|
|
85
|
+
exports.TenantRoleGuard = TenantRoleGuard = __decorate([
|
|
86
|
+
(0, common_1.Injectable)(),
|
|
87
|
+
__metadata("design:paramtypes", [tenant_user_service_1.TenantUserService,
|
|
88
|
+
core_1.Reflector])
|
|
89
|
+
], TenantRoleGuard);
|
|
90
|
+
//# sourceMappingURL=tenant.guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant.guard.js","sourceRoot":"","sources":["../../src/guards/tenant.guard.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export * from './constants/tenant.constant';
|
|
2
|
+
export * from './constants/tenant.settings.constant';
|
|
3
|
+
export * from './decorators/roles.decorator';
|
|
4
|
+
export * from './decorators/tenant.decorator';
|
|
5
|
+
export * from './entities/tenant.entity';
|
|
6
|
+
export * from './entities/tenant-user.entity';
|
|
7
|
+
export * from './guards/tenant.guard';
|
|
8
|
+
export * from './services/tenant.service';
|
|
9
|
+
export * from './services/tenant-user.service';
|
|
10
|
+
export * from './settings/tenant.settings';
|
|
11
|
+
export * from './tenant.module';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sCAAsC,CAAC;AACrD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./constants/tenant.constant"), exports);
|
|
18
|
+
__exportStar(require("./constants/tenant.settings.constant"), exports);
|
|
19
|
+
__exportStar(require("./decorators/roles.decorator"), exports);
|
|
20
|
+
__exportStar(require("./decorators/tenant.decorator"), exports);
|
|
21
|
+
__exportStar(require("./entities/tenant.entity"), exports);
|
|
22
|
+
__exportStar(require("./entities/tenant-user.entity"), exports);
|
|
23
|
+
__exportStar(require("./guards/tenant.guard"), exports);
|
|
24
|
+
__exportStar(require("./services/tenant.service"), exports);
|
|
25
|
+
__exportStar(require("./services/tenant-user.service"), exports);
|
|
26
|
+
__exportStar(require("./settings/tenant.settings"), exports);
|
|
27
|
+
__exportStar(require("./tenant.module"), exports);
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8DAA4C;AAC5C,uEAAqD;AACrD,+DAA6C;AAC7C,gEAA8C;AAC9C,2DAAyC;AACzC,gEAA8C;AAC9C,wDAAsC;AACtC,4DAA0C;AAC1C,iEAA+C;AAC/C,6DAA2C;AAC3C,kDAAgC"}
|