codebase-models 2.1.16 → 2.1.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -65,6 +65,7 @@ import Tag from "./src/models/Tag";
65
65
  import Temp from "./src/models/Temp";
66
66
  import Tier from "./src/models/Tier";
67
67
  import Trigger from "./src/models/Trigger";
68
+ import UserPermission from "./src/models/UserPermission";
68
69
  import ClientScript from "./src/models/ClientScript";
69
70
  import Audience from "./src/models/Audience";
70
71
  import Environment from "./src/models/Environment";
@@ -75,4 +76,4 @@ import { generateRandomIID } from "./src/constant";
75
76
  import TestTimeline from "./src/models/TestTimeline";
76
77
  import CronData from "./src/models/CronData";
77
78
  export declare function connect(uri: string, options?: mongoose.ConnectOptions | undefined): Promise<typeof mongoose>;
78
- export { generateRandomIID, Client, ClientReportsTemp, QueryLog, Report, Test, TestSequentialValue, User, AppEvent, Announcement, ClientAdditionalRevenue, ClientLearning, ClientLinks, ClientNextStep, ClientNote, ClientRetention, ClientStrategy, ClientSurvey, CVRReport, Faq, Feedback, Goal, Hypothesis, HypothesisSheet, LandingPages, NewIdeas, Notification, Page, PageElement, PageTestType, Portfolio, ReadNotification, Role, CustomQuery, SavedSegment, TestTimeline, Segment, SegmentCombination, Snippet, StageInCustomerJourney, Tag, Temp, Tier, Trigger, ClientScript, Audience, Environment, Organization, PrecalculationFilters, BqPreCompiledData, CronData, };
79
+ export { generateRandomIID, Client, ClientReportsTemp, QueryLog, Report, Test, TestSequentialValue, User, AppEvent, Announcement, ClientAdditionalRevenue, ClientLearning, ClientLinks, ClientNextStep, ClientNote, ClientRetention, ClientStrategy, ClientSurvey, CVRReport, Faq, Feedback, Goal, Hypothesis, HypothesisSheet, LandingPages, NewIdeas, Notification, Page, PageElement, PageTestType, Portfolio, ReadNotification, Role, CustomQuery, SavedSegment, TestTimeline, Segment, SegmentCombination, Snippet, StageInCustomerJourney, Tag, Temp, Tier, Trigger, ClientScript, Audience, Environment, Organization, PrecalculationFilters, BqPreCompiledData, CronData, UserPermission, };
package/dist/index.js CHANGED
@@ -13,7 +13,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.PrecalculationFilters = exports.Organization = exports.Environment = exports.Audience = exports.ClientScript = exports.Trigger = exports.Tier = exports.Temp = exports.Tag = exports.StageInCustomerJourney = exports.Snippet = exports.SegmentCombination = exports.Segment = exports.TestTimeline = exports.SavedSegment = exports.CustomQuery = exports.Role = exports.ReadNotification = exports.Portfolio = exports.PageTestType = exports.PageElement = exports.Page = exports.Notification = exports.NewIdeas = exports.LandingPages = exports.HypothesisSheet = exports.Hypothesis = exports.Goal = exports.Feedback = exports.Faq = exports.CVRReport = exports.ClientSurvey = exports.ClientStrategy = exports.ClientRetention = exports.ClientNote = exports.ClientNextStep = exports.ClientLinks = exports.ClientLearning = exports.ClientAdditionalRevenue = exports.Announcement = exports.AppEvent = exports.User = exports.TestSequentialValue = exports.Test = exports.Report = exports.QueryLog = exports.ClientReportsTemp = exports.Client = exports.generateRandomIID = exports.connect = void 0;
16
- exports.CronData = exports.BqPreCompiledData = void 0;
16
+ exports.UserPermission = exports.CronData = exports.BqPreCompiledData = void 0;
17
17
  const mongoose_1 = __importDefault(require("mongoose"));
18
18
  const Client_1 = __importDefault(require("./src/models/Client"));
19
19
  exports.Client = Client_1.default;
@@ -99,6 +99,8 @@ const Tier_1 = __importDefault(require("./src/models/Tier"));
99
99
  exports.Tier = Tier_1.default;
100
100
  const Trigger_1 = __importDefault(require("./src/models/Trigger"));
101
101
  exports.Trigger = Trigger_1.default;
102
+ const UserPermission_1 = __importDefault(require("./src/models/UserPermission"));
103
+ exports.UserPermission = UserPermission_1.default;
102
104
  const ClientScript_1 = __importDefault(require("./src/models/ClientScript"));
103
105
  exports.ClientScript = ClientScript_1.default;
104
106
  const Audience_1 = __importDefault(require("./src/models/Audience"));
@@ -30,6 +30,17 @@ export interface IRole extends Document {
30
30
  isActive?: boolean;
31
31
  createdAt?: Date;
32
32
  updatedAt?: Date;
33
+ defaultPermissions?: {
34
+ dashboard: boolean;
35
+ reporting: boolean;
36
+ insights: boolean;
37
+ documentsAndLinks: boolean;
38
+ cvrReports: boolean;
39
+ abTesting: boolean;
40
+ abTestingDefault: boolean;
41
+ manageExperiments: boolean;
42
+ preCalculations: boolean;
43
+ };
33
44
  }
34
45
  declare const Role: mongoose.Model<any, {}, {}, {}, any, any>;
35
46
  export default Role;
@@ -29,7 +29,7 @@ const RoleSchema = new mongoose_1.Schema({
29
29
  type: String,
30
30
  unique: true,
31
31
  required: true,
32
- enum: ["USER", "ADMIN", "EDITOR", "COLLABORATOR", "CLIENT"],
32
+ enum: ["USER", "ADMIN", "EDITOR", "COLLABORATOR", "CLIENT", "EXTERNAL"],
33
33
  trim: true,
34
34
  uppercase: true,
35
35
  },
@@ -45,10 +45,42 @@ const RoleSchema = new mongoose_1.Schema({
45
45
  isActive: {
46
46
  type: Boolean,
47
47
  default: true,
48
+ },
49
+ defaultPermissions: {
50
+ abTestingDefault: { type: Boolean, default: true },
51
+ abTesting: { type: Boolean, default: false },
52
+ preCalculations: { type: Boolean, default: true },
53
+ reporting: { type: Boolean, default: true },
54
+ insights: { type: Boolean, default: true },
55
+ documentsAndLinks: { type: Boolean, default: true },
56
+ cvrReports: { type: Boolean, default: true },
57
+ manageExperiments: { type: Boolean, default: true },
58
+ dashboard: { type: Boolean, default: true },
48
59
  }
49
60
  }, {
50
61
  timestamps: true
51
62
  });
63
+ // IF role is CLIENT then defaultPermissions should be false for all modules except reporting, insights, documentsAndLinks, cvrReports, dashboard
64
+ RoleSchema.pre('save', function (next) {
65
+ const allTrue = {
66
+ abTestingDefault: true,
67
+ abTesting: true,
68
+ manageExperiments: true,
69
+ preCalculations: true,
70
+ reporting: true,
71
+ insights: true,
72
+ documentsAndLinks: true,
73
+ cvrReports: true,
74
+ dashboard: true,
75
+ };
76
+ if (this.name === 'CLIENT') {
77
+ this.defaultPermissions = Object.assign(Object.assign({}, allTrue), { abTesting: false });
78
+ }
79
+ else {
80
+ this.defaultPermissions = Object.assign(Object.assign({}, allTrue), { abTestingDefault: false });
81
+ }
82
+ next();
83
+ });
52
84
  // Compound indexes for common query patterns
53
85
  RoleSchema.index({ name: 1, isActive: 1 });
54
86
  RoleSchema.index({ organizationId: 1, name: 1 });
@@ -0,0 +1,44 @@
1
+ /// <reference types="mongoose/types/aggregate" />
2
+ /// <reference types="mongoose/types/callback" />
3
+ /// <reference types="mongoose/types/collection" />
4
+ /// <reference types="mongoose/types/connection" />
5
+ /// <reference types="mongoose/types/cursor" />
6
+ /// <reference types="mongoose/types/document" />
7
+ /// <reference types="mongoose/types/error" />
8
+ /// <reference types="mongoose/types/expressions" />
9
+ /// <reference types="mongoose/types/helpers" />
10
+ /// <reference types="mongoose/types/middlewares" />
11
+ /// <reference types="mongoose/types/indexes" />
12
+ /// <reference types="mongoose/types/models" />
13
+ /// <reference types="mongoose/types/mongooseoptions" />
14
+ /// <reference types="mongoose/types/pipelinestage" />
15
+ /// <reference types="mongoose/types/populate" />
16
+ /// <reference types="mongoose/types/query" />
17
+ /// <reference types="mongoose/types/schemaoptions" />
18
+ /// <reference types="mongoose/types/schematypes" />
19
+ /// <reference types="mongoose/types/session" />
20
+ /// <reference types="mongoose/types/types" />
21
+ /// <reference types="mongoose/types/utility" />
22
+ /// <reference types="mongoose/types/validation" />
23
+ /// <reference types="mongoose/types/virtuals" />
24
+ /// <reference types="mongoose/types/inferschematype" />
25
+ import mongoose, { Document } from "mongoose";
26
+ export interface IUserPermission extends Document {
27
+ userId: mongoose.Schema.Types.ObjectId;
28
+ clientId: mongoose.Schema.Types.ObjectId;
29
+ permissions: {
30
+ dashboard: boolean;
31
+ reporting: boolean;
32
+ insights: boolean;
33
+ documentsAndLinks: boolean;
34
+ cvrReports: boolean;
35
+ abTesting: boolean;
36
+ abTestingDefault: boolean;
37
+ manageExperiments: boolean;
38
+ preCalculations: boolean;
39
+ };
40
+ createdAt: Date;
41
+ updatedAt: Date;
42
+ }
43
+ declare const UserPermission: mongoose.Model<any, {}, {}, {}, any, any>;
44
+ export default UserPermission;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ const mongoose_1 = __importStar(require("mongoose"));
27
+ const UserPermissionSchema = new mongoose_1.Schema({
28
+ userId: {
29
+ type: mongoose_1.default.Schema.Types.ObjectId,
30
+ ref: "user",
31
+ required: true,
32
+ },
33
+ clientId: {
34
+ type: mongoose_1.default.Schema.Types.ObjectId,
35
+ ref: "client",
36
+ required: true,
37
+ },
38
+ permissions: {
39
+ abTestingDefault: { type: Boolean, default: true },
40
+ abTesting: { type: Boolean, default: false },
41
+ preCalculations: { type: Boolean, default: false },
42
+ reporting: { type: Boolean, default: true },
43
+ insights: { type: Boolean, default: true },
44
+ documentsAndLinks: { type: Boolean, default: true },
45
+ cvrReports: { type: Boolean, default: true },
46
+ manageExperiments: { type: Boolean, default: false },
47
+ dashboard: { type: Boolean, default: true },
48
+ },
49
+ }, {
50
+ timestamps: true,
51
+ });
52
+ // Add compound indexes for common query patterns
53
+ UserPermissionSchema.index({ userId: 1, clientId: 1 }, { unique: true });
54
+ const UserPermission = mongoose_1.default.models.userpermission || (0, mongoose_1.model)("userpermission", UserPermissionSchema);
55
+ exports.default = UserPermission;
package/index.ts CHANGED
@@ -42,6 +42,7 @@ import Tag from "./src/models/Tag";
42
42
  import Temp from "./src/models/Temp";
43
43
  import Tier from "./src/models/Tier";
44
44
  import Trigger from "./src/models/Trigger";
45
+ import UserPermission from "./src/models/UserPermission";
45
46
  import ClientScript from "./src/models/ClientScript";
46
47
  import Audience from "./src/models/Audience";
47
48
  import Environment from "./src/models/Environment";
@@ -150,4 +151,5 @@ export {
150
151
  PrecalculationFilters,
151
152
  BqPreCompiledData,
152
153
  CronData,
154
+ UserPermission,
153
155
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codebase-models",
3
- "version": "2.1.16",
3
+ "version": "2.1.18",
4
4
  "description": "Common models for codebase",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -7,6 +7,17 @@ export interface IRole extends Document {
7
7
  isActive?: boolean;
8
8
  createdAt?: Date;
9
9
  updatedAt?: Date;
10
+ defaultPermissions?: {
11
+ dashboard: boolean;
12
+ reporting: boolean;
13
+ insights: boolean;
14
+ documentsAndLinks: boolean;
15
+ cvrReports: boolean;
16
+ abTesting: boolean;
17
+ abTestingDefault: boolean;
18
+ manageExperiments: boolean;
19
+ preCalculations: boolean;
20
+ };
10
21
  }
11
22
 
12
23
  const RoleSchema = new Schema<IRole>({
@@ -14,7 +25,7 @@ const RoleSchema = new Schema<IRole>({
14
25
  type: String,
15
26
  unique: true,
16
27
  required: true,
17
- enum: ["USER", "ADMIN", "EDITOR", "COLLABORATOR", "CLIENT"],
28
+ enum: ["USER", "ADMIN", "EDITOR", "COLLABORATOR", "CLIENT", "EXTERNAL"],
18
29
  trim: true,
19
30
  uppercase: true,
20
31
  },
@@ -30,11 +41,47 @@ const RoleSchema = new Schema<IRole>({
30
41
  isActive: {
31
42
  type: Boolean,
32
43
  default: true,
33
-
44
+ },
45
+ defaultPermissions: {
46
+ abTestingDefault: { type: Boolean, default: true },
47
+ abTesting: { type: Boolean, default: false },
48
+ preCalculations: { type: Boolean, default: true },
49
+ reporting: { type: Boolean, default: true },
50
+ insights: { type: Boolean, default: true },
51
+ documentsAndLinks: { type: Boolean, default: true },
52
+ cvrReports: { type: Boolean, default: true },
53
+ manageExperiments: { type: Boolean, default: true },
54
+ dashboard: { type: Boolean, default: true },
34
55
  }
35
56
  }, {
36
57
  timestamps: true
37
58
  });
59
+ // IF role is CLIENT then defaultPermissions should be false for all modules except reporting, insights, documentsAndLinks, cvrReports, dashboard
60
+ RoleSchema.pre('save', function(next) {
61
+ const allTrue = {
62
+ abTestingDefault: true,
63
+ abTesting: true,
64
+ manageExperiments: true,
65
+ preCalculations: true,
66
+ reporting: true,
67
+ insights: true,
68
+ documentsAndLinks: true,
69
+ cvrReports: true,
70
+ dashboard: true,
71
+ };
72
+ if (this.name === 'CLIENT') {
73
+ this.defaultPermissions = {
74
+ ...allTrue,
75
+ abTesting: false, // only this one is false
76
+ };
77
+ } else {
78
+ this.defaultPermissions = {
79
+ ...allTrue,
80
+ abTestingDefault: false,
81
+ };
82
+ }
83
+ next();
84
+ });
38
85
 
39
86
  // Compound indexes for common query patterns
40
87
  RoleSchema.index({ name: 1, isActive: 1 });
@@ -0,0 +1,53 @@
1
+ import mongoose, { Document, Schema, model } from "mongoose";
2
+
3
+ export interface IUserPermission extends Document {
4
+ userId: mongoose.Schema.Types.ObjectId;
5
+ clientId: mongoose.Schema.Types.ObjectId;
6
+ permissions: {
7
+ dashboard: boolean;
8
+ reporting: boolean;
9
+ insights: boolean;
10
+ documentsAndLinks: boolean;
11
+ cvrReports: boolean;
12
+ abTesting: boolean;
13
+ abTestingDefault: boolean;
14
+ manageExperiments: boolean;
15
+ preCalculations: boolean;
16
+ }
17
+ createdAt: Date;
18
+ updatedAt: Date;
19
+ }
20
+
21
+ const UserPermissionSchema = new Schema<IUserPermission>({
22
+ userId: {
23
+ type: mongoose.Schema.Types.ObjectId,
24
+ ref: "user",
25
+ required: true,
26
+ },
27
+ clientId: {
28
+ type: mongoose.Schema.Types.ObjectId,
29
+ ref: "client",
30
+ required: true,
31
+ },
32
+ permissions: {
33
+ abTestingDefault: { type: Boolean, default: true },
34
+ abTesting: { type: Boolean, default: false },
35
+ preCalculations: { type: Boolean, default: false },
36
+ reporting: { type: Boolean, default: true },
37
+ insights: { type: Boolean, default: true },
38
+ documentsAndLinks: { type: Boolean, default: true },
39
+ cvrReports: { type: Boolean, default: true },
40
+ manageExperiments: { type: Boolean, default: false },
41
+ dashboard: { type: Boolean, default: true },
42
+ },
43
+ },
44
+ {
45
+ timestamps: true,
46
+ }
47
+ );
48
+
49
+ // Add compound indexes for common query patterns
50
+ UserPermissionSchema.index({ userId: 1, clientId: 1 },{ unique: true });
51
+
52
+ const UserPermission = mongoose.models.userpermission || model<IUserPermission>("userpermission", UserPermissionSchema);
53
+ export default UserPermission;