@nekutima/biome-sdk 0.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.
Files changed (146) hide show
  1. package/README.md +100 -0
  2. package/dist/auth/auth.service.d.ts +90 -0
  3. package/dist/auth/auth.service.d.ts.map +1 -0
  4. package/dist/auth/auth.service.js +166 -0
  5. package/dist/auth/auth.service.js.map +1 -0
  6. package/dist/auth/types.d.ts +19 -0
  7. package/dist/auth/types.d.ts.map +1 -0
  8. package/dist/auth/types.js +3 -0
  9. package/dist/auth/types.js.map +1 -0
  10. package/dist/core/configuration.d.ts +26 -0
  11. package/dist/core/configuration.d.ts.map +1 -0
  12. package/dist/core/configuration.js +3 -0
  13. package/dist/core/configuration.js.map +1 -0
  14. package/dist/core/error-handler.d.ts +24 -0
  15. package/dist/core/error-handler.d.ts.map +1 -0
  16. package/dist/core/error-handler.js +76 -0
  17. package/dist/core/error-handler.js.map +1 -0
  18. package/dist/core/http-client.d.ts +43 -0
  19. package/dist/core/http-client.d.ts.map +1 -0
  20. package/dist/core/http-client.js +97 -0
  21. package/dist/core/http-client.js.map +1 -0
  22. package/dist/core/state-manager.d.ts +16 -0
  23. package/dist/core/state-manager.d.ts.map +1 -0
  24. package/dist/core/state-manager.js +33 -0
  25. package/dist/core/state-manager.js.map +1 -0
  26. package/dist/files/file-upload.d.ts +60 -0
  27. package/dist/files/file-upload.d.ts.map +1 -0
  28. package/dist/files/file-upload.js +121 -0
  29. package/dist/files/file-upload.js.map +1 -0
  30. package/dist/index.d.ts +80 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +140 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/models/api-error.model.d.ts +31 -0
  35. package/dist/models/api-error.model.d.ts.map +1 -0
  36. package/dist/models/api-error.model.js +53 -0
  37. package/dist/models/api-error.model.js.map +1 -0
  38. package/dist/models/api-response.model.d.ts +51 -0
  39. package/dist/models/api-response.model.d.ts.map +1 -0
  40. package/dist/models/api-response.model.js +77 -0
  41. package/dist/models/api-response.model.js.map +1 -0
  42. package/dist/models/chat.model.d.ts +59 -0
  43. package/dist/models/chat.model.d.ts.map +1 -0
  44. package/dist/models/chat.model.js +3 -0
  45. package/dist/models/chat.model.js.map +1 -0
  46. package/dist/models/ecosystem.model.d.ts +16 -0
  47. package/dist/models/ecosystem.model.d.ts.map +1 -0
  48. package/dist/models/ecosystem.model.js +7 -0
  49. package/dist/models/ecosystem.model.js.map +1 -0
  50. package/dist/models/file.model.d.ts +67 -0
  51. package/dist/models/file.model.d.ts.map +1 -0
  52. package/dist/models/file.model.js +3 -0
  53. package/dist/models/file.model.js.map +1 -0
  54. package/dist/models/notification.model.d.ts +172 -0
  55. package/dist/models/notification.model.d.ts.map +1 -0
  56. package/dist/models/notification.model.js +77 -0
  57. package/dist/models/notification.model.js.map +1 -0
  58. package/dist/models/person.model.d.ts +94 -0
  59. package/dist/models/person.model.d.ts.map +1 -0
  60. package/dist/models/person.model.js +14 -0
  61. package/dist/models/person.model.js.map +1 -0
  62. package/dist/models/project.model.d.ts +62 -0
  63. package/dist/models/project.model.d.ts.map +1 -0
  64. package/dist/models/project.model.js +93 -0
  65. package/dist/models/project.model.js.map +1 -0
  66. package/dist/models/task-update.model.d.ts +28 -0
  67. package/dist/models/task-update.model.d.ts.map +1 -0
  68. package/dist/models/task-update.model.js +8 -0
  69. package/dist/models/task-update.model.js.map +1 -0
  70. package/dist/models/task-url.model.d.ts +16 -0
  71. package/dist/models/task-url.model.d.ts.map +1 -0
  72. package/dist/models/task-url.model.js +3 -0
  73. package/dist/models/task-url.model.js.map +1 -0
  74. package/dist/models/task.model.d.ts +120 -0
  75. package/dist/models/task.model.d.ts.map +1 -0
  76. package/dist/models/task.model.js +78 -0
  77. package/dist/models/task.model.js.map +1 -0
  78. package/dist/models/timezone.model.d.ts +19 -0
  79. package/dist/models/timezone.model.d.ts.map +1 -0
  80. package/dist/models/timezone.model.js +12 -0
  81. package/dist/models/timezone.model.js.map +1 -0
  82. package/dist/models/user.model.d.ts +101 -0
  83. package/dist/models/user.model.d.ts.map +1 -0
  84. package/dist/models/user.model.js +22 -0
  85. package/dist/models/user.model.js.map +1 -0
  86. package/dist/profiles/profile.service.d.ts +52 -0
  87. package/dist/profiles/profile.service.d.ts.map +1 -0
  88. package/dist/profiles/profile.service.js +119 -0
  89. package/dist/profiles/profile.service.js.map +1 -0
  90. package/dist/profiles/types.d.ts +1 -0
  91. package/dist/profiles/types.d.ts.map +1 -0
  92. package/dist/profiles/types.js +3 -0
  93. package/dist/profiles/types.js.map +1 -0
  94. package/dist/tasks/task-sorting.d.ts +51 -0
  95. package/dist/tasks/task-sorting.d.ts.map +1 -0
  96. package/dist/tasks/task-sorting.js +137 -0
  97. package/dist/tasks/task-sorting.js.map +1 -0
  98. package/dist/tasks/task.service.d.ts +134 -0
  99. package/dist/tasks/task.service.d.ts.map +1 -0
  100. package/dist/tasks/task.service.js +256 -0
  101. package/dist/tasks/task.service.js.map +1 -0
  102. package/dist/tasks/types.d.ts +2 -0
  103. package/dist/tasks/types.d.ts.map +1 -0
  104. package/dist/tasks/types.js +3 -0
  105. package/dist/tasks/types.js.map +1 -0
  106. package/dist/types/actor.types.d.ts +101 -0
  107. package/dist/types/actor.types.d.ts.map +1 -0
  108. package/dist/types/actor.types.js +135 -0
  109. package/dist/types/actor.types.js.map +1 -0
  110. package/dist/types/api.types.d.ts +43 -0
  111. package/dist/types/api.types.d.ts.map +1 -0
  112. package/dist/types/api.types.js +6 -0
  113. package/dist/types/api.types.js.map +1 -0
  114. package/dist/types/common.types.d.ts +40 -0
  115. package/dist/types/common.types.d.ts.map +1 -0
  116. package/dist/types/common.types.js +6 -0
  117. package/dist/types/common.types.js.map +1 -0
  118. package/dist/types/state-machine.types.d.ts +102 -0
  119. package/dist/types/state-machine.types.d.ts.map +1 -0
  120. package/dist/types/state-machine.types.js +18 -0
  121. package/dist/types/state-machine.types.js.map +1 -0
  122. package/dist/users/user.service.d.ts +49 -0
  123. package/dist/users/user.service.d.ts.map +1 -0
  124. package/dist/users/user.service.js +119 -0
  125. package/dist/users/user.service.js.map +1 -0
  126. package/dist/utils/date.utils.d.ts +60 -0
  127. package/dist/utils/date.utils.d.ts.map +1 -0
  128. package/dist/utils/date.utils.js +125 -0
  129. package/dist/utils/date.utils.js.map +1 -0
  130. package/dist/utils/username-generator.d.ts +76 -0
  131. package/dist/utils/username-generator.d.ts.map +1 -0
  132. package/dist/utils/username-generator.js +177 -0
  133. package/dist/utils/username-generator.js.map +1 -0
  134. package/dist/utils/validation.utils.d.ts +57 -0
  135. package/dist/utils/validation.utils.d.ts.map +1 -0
  136. package/dist/utils/validation.utils.js +117 -0
  137. package/dist/utils/validation.utils.js.map +1 -0
  138. package/dist/validation/password-strength.d.ts +66 -0
  139. package/dist/validation/password-strength.d.ts.map +1 -0
  140. package/dist/validation/password-strength.js +192 -0
  141. package/dist/validation/password-strength.js.map +1 -0
  142. package/dist/validation/schemas.d.ts +69 -0
  143. package/dist/validation/schemas.d.ts.map +1 -0
  144. package/dist/validation/schemas.js +94 -0
  145. package/dist/validation/schemas.js.map +1 -0
  146. package/package.json +51 -0
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Person model for Biome platform
3
+ *
4
+ * ARCHITECTURE CLARIFICATION:
5
+ * - User = Someone/something that USES the system (can be a person OR another system like API, bot)
6
+ * - Person = Actual human with bio, profile, location (always human)
7
+ * - UserAsAPerson = Aggregate when User IS a Person (combines User + Person data)
8
+ * - Relationship: User ←1:0..1→ Person (not all users have person records)
9
+ *
10
+ * This model is shared between frontend and backend via the SDK.
11
+ */
12
+ /**
13
+ * Profile visibility type
14
+ */
15
+ export type ProfileVisibility = 'public' | 'private';
16
+ /**
17
+ * Profile photo information from trunk_files table
18
+ */
19
+ export interface ProfilePhoto {
20
+ id: number;
21
+ filename: string;
22
+ storagePath: string;
23
+ mimeType: string;
24
+ downloadUrl?: string;
25
+ }
26
+ /**
27
+ * Person model - represents an actual human person with profile data
28
+ *
29
+ * Note: Not all Users are Persons!
30
+ * A User can be a person OR another system (API, bot, service account).
31
+ * Only human users have a corresponding Person record.
32
+ *
33
+ * Database table: person
34
+ * All fields correspond to actual database columns (camelCase)
35
+ */
36
+ export interface Person {
37
+ id: number;
38
+ userId: number;
39
+ bio?: string;
40
+ location?: string;
41
+ website?: string;
42
+ profilePhotoFileId?: number | null;
43
+ profileVisibility: ProfileVisibility;
44
+ facebookUrl?: string;
45
+ instagramUrl?: string;
46
+ linkedinUrl?: string;
47
+ xingUrl?: string;
48
+ youtubeUrl?: string;
49
+ rumbleUrl?: string;
50
+ mastodonUrl?: string;
51
+ tildeverseUrl?: string;
52
+ twitchUrl?: string;
53
+ xUrl?: string;
54
+ createdAt: Date;
55
+ updatedAt: Date;
56
+ }
57
+ /**
58
+ * Aggregate model representing a User that IS a Person
59
+ *
60
+ * Use this when you need both User authentication data AND Person profile data.
61
+ * This is the common case for human users of the system.
62
+ *
63
+ * Replaces the old ProfileWithUser type with clearer semantic meaning.
64
+ */
65
+ export interface UserAsAPerson {
66
+ id: number;
67
+ userId: number;
68
+ bio?: string;
69
+ location?: string;
70
+ website?: string;
71
+ profilePhotoFileId?: number | null;
72
+ profileVisibility: ProfileVisibility;
73
+ facebookUrl?: string;
74
+ instagramUrl?: string;
75
+ linkedinUrl?: string;
76
+ xingUrl?: string;
77
+ youtubeUrl?: string;
78
+ rumbleUrl?: string;
79
+ mastodonUrl?: string;
80
+ tildeverseUrl?: string;
81
+ twitchUrl?: string;
82
+ xUrl?: string;
83
+ createdAt: Date;
84
+ updatedAt: Date;
85
+ user: {
86
+ id: number;
87
+ username: string;
88
+ email: string;
89
+ timezoneId: number;
90
+ emailConfirmedAt: Date | null;
91
+ };
92
+ profilePhoto?: ProfilePhoto;
93
+ }
94
+ //# sourceMappingURL=person.model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"person.model.d.ts","sourceRoot":"","sources":["../../src/models/person.model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,SAAS,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,MAAM;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,iBAAiB,EAAE,iBAAiB,CAAC;IAErC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAE1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,iBAAiB,EAAE,iBAAiB,CAAC;IAErC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAGhB,IAAI,EAAE;QACF,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,gBAAgB,EAAE,IAAI,GAAG,IAAI,CAAC;KACjC,CAAC;IAGF,YAAY,CAAC,EAAE,YAAY,CAAC;CAC/B"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ /**
3
+ * Person model for Biome platform
4
+ *
5
+ * ARCHITECTURE CLARIFICATION:
6
+ * - User = Someone/something that USES the system (can be a person OR another system like API, bot)
7
+ * - Person = Actual human with bio, profile, location (always human)
8
+ * - UserAsAPerson = Aggregate when User IS a Person (combines User + Person data)
9
+ * - Relationship: User ←1:0..1→ Person (not all users have person records)
10
+ *
11
+ * This model is shared between frontend and backend via the SDK.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ //# sourceMappingURL=person.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"person.model.js","sourceRoot":"","sources":["../../src/models/person.model.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Unified Project model for Biome platform
3
+ * This model is shared between frontend and backend
4
+ */
5
+ export declare enum PROJECT_STATE {
6
+ DRAFTING = 0,
7
+ PREPARING = 1,
8
+ RUNNING = 2,
9
+ FINISHING = 3,
10
+ COMPLETED = 4
11
+ }
12
+ export declare enum PROJECT_ACTOR {
13
+ CONCEPTUALIZER = "conceptualizer",
14
+ PROJECT_MANAGER = "project_manager"
15
+ }
16
+ export interface Project {
17
+ id?: number;
18
+ name: string;
19
+ description?: string;
20
+ state: PROJECT_STATE;
21
+ isPublic: boolean;
22
+ isArchived: boolean;
23
+ isCancelled: boolean;
24
+ orgId?: number;
25
+ chatId: number;
26
+ managerId?: number;
27
+ conceptualizerId?: number;
28
+ ownerId?: number;
29
+ dueDate: string;
30
+ archivedAt?: string;
31
+ createdAt: Date;
32
+ createdBy: number;
33
+ updatedAt: Date;
34
+ updatedBy: number;
35
+ }
36
+ export type ProjectMinimal = Pick<Project, 'id' | 'name' | 'description' | 'state' | 'dueDate' | 'isPublic'>;
37
+ /**
38
+ * Project state helper functions
39
+ */
40
+ export declare const ProjectStateHelper: {
41
+ /**
42
+ * Check if a project can transition to a new state
43
+ */
44
+ canTransition: (currentState: PROJECT_STATE, newState: PROJECT_STATE, actor: PROJECT_ACTOR) => boolean;
45
+ /**
46
+ * Get the display name for a project state
47
+ */
48
+ getDisplayName: (state: PROJECT_STATE) => string;
49
+ /**
50
+ * Check if a project is in a final state
51
+ */
52
+ isFinalState: (state: PROJECT_STATE) => boolean;
53
+ /**
54
+ * Check if a project is active (not completed, archived, or cancelled)
55
+ */
56
+ isActive: (state: PROJECT_STATE, isArchived: boolean, isCancelled: boolean) => boolean;
57
+ /**
58
+ * Get the next valid states for a project
59
+ */
60
+ getNextValidStates: (currentState: PROJECT_STATE) => PROJECT_STATE[];
61
+ };
62
+ //# sourceMappingURL=project.model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.model.d.ts","sourceRoot":"","sources":["../../src/models/project.model.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,oBAAY,aAAa;IACrB,QAAQ,IAAI;IACZ,SAAS,IAAI;IACb,OAAO,IAAI;IACX,SAAS,IAAI;IACb,SAAS,IAAI;CAChB;AAED,oBAAY,aAAa;IACrB,cAAc,mBAAmB;IACjC,eAAe,oBAAoB;CACtC;AAED,MAAM,WAAW,OAAO;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,GAAG,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC,CAAC;AAE7G;;GAEG;AACH,eAAO,MAAM,kBAAkB;IAC3B;;OAEG;kCAC2B,aAAa,YAAY,aAAa,SAAS,aAAa,KAAG,OAAO;IA4BpG;;OAEG;4BACqB,aAAa,KAAG,MAAM;IAY9C;;OAEG;0BACmB,aAAa,KAAG,OAAO;IAI7C;;OAEG;sBACe,aAAa,cAAc,OAAO,eAAe,OAAO,KAAG,OAAO;IAIpF;;OAEG;uCACgC,aAAa,KAAG,aAAa,EAAE;CAWrE,CAAC"}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ /**
3
+ * Unified Project model for Biome platform
4
+ * This model is shared between frontend and backend
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.ProjectStateHelper = exports.PROJECT_ACTOR = exports.PROJECT_STATE = void 0;
8
+ var PROJECT_STATE;
9
+ (function (PROJECT_STATE) {
10
+ PROJECT_STATE[PROJECT_STATE["DRAFTING"] = 0] = "DRAFTING";
11
+ PROJECT_STATE[PROJECT_STATE["PREPARING"] = 1] = "PREPARING";
12
+ PROJECT_STATE[PROJECT_STATE["RUNNING"] = 2] = "RUNNING";
13
+ PROJECT_STATE[PROJECT_STATE["FINISHING"] = 3] = "FINISHING";
14
+ PROJECT_STATE[PROJECT_STATE["COMPLETED"] = 4] = "COMPLETED";
15
+ })(PROJECT_STATE || (exports.PROJECT_STATE = PROJECT_STATE = {}));
16
+ var PROJECT_ACTOR;
17
+ (function (PROJECT_ACTOR) {
18
+ PROJECT_ACTOR["CONCEPTUALIZER"] = "conceptualizer";
19
+ PROJECT_ACTOR["PROJECT_MANAGER"] = "project_manager";
20
+ })(PROJECT_ACTOR || (exports.PROJECT_ACTOR = PROJECT_ACTOR = {}));
21
+ /**
22
+ * Project state helper functions
23
+ */
24
+ exports.ProjectStateHelper = {
25
+ /**
26
+ * Check if a project can transition to a new state
27
+ */
28
+ canTransition: (currentState, newState, actor) => {
29
+ const validTransitions = {
30
+ [PROJECT_STATE.DRAFTING]: {
31
+ states: [PROJECT_STATE.PREPARING],
32
+ actors: [PROJECT_ACTOR.CONCEPTUALIZER, PROJECT_ACTOR.PROJECT_MANAGER],
33
+ },
34
+ [PROJECT_STATE.PREPARING]: {
35
+ states: [PROJECT_STATE.RUNNING],
36
+ actors: [PROJECT_ACTOR.PROJECT_MANAGER],
37
+ },
38
+ [PROJECT_STATE.RUNNING]: {
39
+ states: [PROJECT_STATE.FINISHING],
40
+ actors: [PROJECT_ACTOR.PROJECT_MANAGER],
41
+ },
42
+ [PROJECT_STATE.FINISHING]: {
43
+ states: [PROJECT_STATE.COMPLETED],
44
+ actors: [PROJECT_ACTOR.PROJECT_MANAGER],
45
+ },
46
+ [PROJECT_STATE.COMPLETED]: {
47
+ states: [],
48
+ actors: [],
49
+ },
50
+ };
51
+ const transition = validTransitions[currentState];
52
+ return transition?.states.includes(newState) && transition?.actors.includes(actor);
53
+ },
54
+ /**
55
+ * Get the display name for a project state
56
+ */
57
+ getDisplayName: (state) => {
58
+ const stateNames = {
59
+ [PROJECT_STATE.DRAFTING]: 'Drafting',
60
+ [PROJECT_STATE.PREPARING]: 'Preparing',
61
+ [PROJECT_STATE.RUNNING]: 'Running',
62
+ [PROJECT_STATE.FINISHING]: 'Finishing',
63
+ [PROJECT_STATE.COMPLETED]: 'Completed',
64
+ };
65
+ return stateNames[state] || 'Unknown';
66
+ },
67
+ /**
68
+ * Check if a project is in a final state
69
+ */
70
+ isFinalState: (state) => {
71
+ return state === PROJECT_STATE.COMPLETED;
72
+ },
73
+ /**
74
+ * Check if a project is active (not completed, archived, or cancelled)
75
+ */
76
+ isActive: (state, isArchived, isCancelled) => {
77
+ return state !== PROJECT_STATE.COMPLETED && !isArchived && !isCancelled;
78
+ },
79
+ /**
80
+ * Get the next valid states for a project
81
+ */
82
+ getNextValidStates: (currentState) => {
83
+ const validTransitions = {
84
+ [PROJECT_STATE.DRAFTING]: [PROJECT_STATE.PREPARING],
85
+ [PROJECT_STATE.PREPARING]: [PROJECT_STATE.RUNNING],
86
+ [PROJECT_STATE.RUNNING]: [PROJECT_STATE.FINISHING],
87
+ [PROJECT_STATE.FINISHING]: [PROJECT_STATE.COMPLETED],
88
+ [PROJECT_STATE.COMPLETED]: [],
89
+ };
90
+ return validTransitions[currentState] || [];
91
+ },
92
+ };
93
+ //# sourceMappingURL=project.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.model.js","sourceRoot":"","sources":["../../src/models/project.model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * TaskUpdate model for Biome platform
3
+ * Represents an update entry added to a task in ACCEPTED state
4
+ * This model is shared between frontend and backend
5
+ */
6
+ export interface TaskUpdate {
7
+ id: number;
8
+ taskId: number;
9
+ userId: number;
10
+ content: string;
11
+ createdAt: Date;
12
+ updatedAt?: Date | null;
13
+ editedBy?: number | null;
14
+ isEdited: boolean;
15
+ }
16
+ /**
17
+ * Request DTO for creating a new task update
18
+ */
19
+ export interface CreateTaskUpdateRequest {
20
+ content: string;
21
+ }
22
+ /**
23
+ * Request DTO for updating an existing task update
24
+ */
25
+ export interface UpdateTaskUpdateRequest {
26
+ content: string;
27
+ }
28
+ //# sourceMappingURL=task-update.model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-update.model.d.ts","sourceRoot":"","sources":["../../src/models/task-update.model.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,UAAU;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACpC,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACpC,OAAO,EAAE,MAAM,CAAC;CACnB"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ /**
3
+ * TaskUpdate model for Biome platform
4
+ * Represents an update entry added to a task in ACCEPTED state
5
+ * This model is shared between frontend and backend
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ //# sourceMappingURL=task-update.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-update.model.js","sourceRoot":"","sources":["../../src/models/task-update.model.ts"],"names":[],"mappings":";AAAA;;;;GAIG"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Represents an external URL reference attached to a task.
3
+ */
4
+ export interface TaskUrl {
5
+ id?: number;
6
+ taskId: number;
7
+ url: string;
8
+ title?: string;
9
+ description?: string;
10
+ tags?: string[];
11
+ createdById?: number;
12
+ createdAt?: Date;
13
+ updatedAt?: Date;
14
+ deletedAt?: Date;
15
+ }
16
+ //# sourceMappingURL=task-url.model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-url.model.d.ts","sourceRoot":"","sources":["../../src/models/task-url.model.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,OAAO;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,CAAC;CACpB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=task-url.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-url.model.js","sourceRoot":"","sources":["../../src/models/task-url.model.ts"],"names":[],"mappings":""}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Unified Task model for Biome platform
3
+ * This model is shared between frontend and backend
4
+ */
5
+ export interface Task {
6
+ id?: number;
7
+ projectId?: number;
8
+ parentId?: number;
9
+ title: string;
10
+ description?: string;
11
+ summary?: string;
12
+ summaryLanguage?: string | null;
13
+ summaryRegenerating?: boolean | null;
14
+ state: string;
15
+ isImportant: boolean;
16
+ isUrgent: boolean;
17
+ assigneeId: number;
18
+ requesterId: number;
19
+ nextTouchDate?: Date | null;
20
+ dueDate?: Date | null;
21
+ proposedAt?: Date | null;
22
+ negociatedAt?: Date | null;
23
+ renegociatedAt?: Date | null;
24
+ acceptedAt?: Date | null;
25
+ rejectedAt?: Date | null;
26
+ deliveredAt?: Date | null;
27
+ evaluatedAt?: Date | null;
28
+ archivedAt?: Date | null;
29
+ archivedBy?: number;
30
+ quittedAt?: Date | null;
31
+ canceledAt?: Date | null;
32
+ refusedAt?: Date | null;
33
+ smartContract?: string;
34
+ createdAt: Date;
35
+ createdBy: number;
36
+ updatedAt: Date;
37
+ updatedBy: number;
38
+ deliveryNote?: string;
39
+ rejectionReason?: string;
40
+ cancellationReason?: string;
41
+ evaluation?: number;
42
+ tip?: number;
43
+ evaluationComment?: string;
44
+ }
45
+ export type TaskMinimal = Pick<Task, 'id' | 'title' | 'state' | 'dueDate' | 'assigneeId' | 'requesterId'>;
46
+ /**
47
+ * Task search parameters
48
+ */
49
+ export interface TaskSearchParams {
50
+ offset?: number;
51
+ limit?: number;
52
+ status?: TASK_STATUS[];
53
+ assigneeId?: number;
54
+ requesterId?: number;
55
+ projectId?: number;
56
+ search?: string;
57
+ sort?: 'createdAt' | 'dueDate' | 'title';
58
+ order?: 'asc' | 'desc';
59
+ }
60
+ /**
61
+ * Task Search Results Interface
62
+ * Standardized structure for task search API responses
63
+ *
64
+ * @description
65
+ * This interface defines the complete structure of task search results returned
66
+ * by the backend API and consumed by the frontend. It includes the search results
67
+ * array, pagination metadata, and aggregated state counts for filter tabs.
68
+ *
69
+ * Related: User Story 4 - Context-Sensitive Search (TMT #202)
70
+ */
71
+ export interface TaskSearchResults {
72
+ /** Array of tasks matching the search query */
73
+ results: Task[];
74
+ /** Total number of tasks matching the search query (across all pages) */
75
+ total: number;
76
+ /** Current page number (1-indexed) */
77
+ page: number;
78
+ /** Whether more results are available (for infinite scroll) */
79
+ hasMore: boolean;
80
+ /** Count of matching tasks for each state (for filter tab display) */
81
+ stateCounts: Record<string, number>;
82
+ }
83
+ /**
84
+ * Task State Enum - STRING values matching backend TaskState
85
+ * Defines all possible states a task can be in throughout its lifecycle
86
+ */
87
+ export declare enum TASK_STATUS {
88
+ PROPOSED = "proposed",
89
+ NEGOTIATED = "negotiated",
90
+ ACCEPTED = "accepted",
91
+ REJECTED = "rejected",
92
+ QUITTED = "quitted",
93
+ CANCELED = "canceled",
94
+ DELIVERED = "delivered",
95
+ REFUSED = "refused",
96
+ EVALUATED = "evaluated",
97
+ ARCHIVED = "archived"
98
+ }
99
+ /**
100
+ * Task status helper functions
101
+ */
102
+ export declare const TaskStatusHelper: {
103
+ /**
104
+ * Check if a task can transition to a new status
105
+ */
106
+ canTransition: (currentStatus: TASK_STATUS, newStatus: TASK_STATUS) => boolean;
107
+ /**
108
+ * Get the display name for a task status
109
+ */
110
+ getDisplayName: (status: TASK_STATUS) => string;
111
+ /**
112
+ * Check if a task is in a final state
113
+ */
114
+ isFinalState: (status: TASK_STATUS) => boolean;
115
+ /**
116
+ * Check if a task is active (not archived or quit)
117
+ */
118
+ isActive: (status: TASK_STATUS) => boolean;
119
+ };
120
+ //# sourceMappingURL=task.model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.model.d.ts","sourceRoot":"","sources":["../../src/models/task.model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ /**
3
+ * Unified Task model for Biome platform
4
+ * This model is shared between frontend and backend
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.TaskStatusHelper = exports.TASK_STATUS = void 0;
8
+ /**
9
+ * Task State Enum - STRING values matching backend TaskState
10
+ * Defines all possible states a task can be in throughout its lifecycle
11
+ */
12
+ var TASK_STATUS;
13
+ (function (TASK_STATUS) {
14
+ TASK_STATUS["PROPOSED"] = "proposed";
15
+ TASK_STATUS["NEGOTIATED"] = "negotiated";
16
+ TASK_STATUS["ACCEPTED"] = "accepted";
17
+ TASK_STATUS["REJECTED"] = "rejected";
18
+ TASK_STATUS["QUITTED"] = "quitted";
19
+ TASK_STATUS["CANCELED"] = "canceled";
20
+ TASK_STATUS["DELIVERED"] = "delivered";
21
+ TASK_STATUS["REFUSED"] = "refused";
22
+ TASK_STATUS["EVALUATED"] = "evaluated";
23
+ TASK_STATUS["ARCHIVED"] = "archived";
24
+ })(TASK_STATUS || (exports.TASK_STATUS = TASK_STATUS = {}));
25
+ /**
26
+ * Task status helper functions
27
+ */
28
+ exports.TaskStatusHelper = {
29
+ /**
30
+ * Check if a task can transition to a new status
31
+ */
32
+ canTransition: (currentStatus, newStatus) => {
33
+ const validTransitions = {
34
+ [TASK_STATUS.PROPOSED]: [TASK_STATUS.NEGOTIATED, TASK_STATUS.ACCEPTED, TASK_STATUS.REJECTED, TASK_STATUS.CANCELED],
35
+ [TASK_STATUS.NEGOTIATED]: [TASK_STATUS.ACCEPTED, TASK_STATUS.REJECTED, TASK_STATUS.CANCELED],
36
+ [TASK_STATUS.ACCEPTED]: [TASK_STATUS.DELIVERED, TASK_STATUS.QUITTED, TASK_STATUS.CANCELED],
37
+ [TASK_STATUS.REJECTED]: [TASK_STATUS.PROPOSED, TASK_STATUS.CANCELED],
38
+ [TASK_STATUS.QUITTED]: [TASK_STATUS.PROPOSED, TASK_STATUS.ARCHIVED],
39
+ [TASK_STATUS.CANCELED]: [TASK_STATUS.ARCHIVED],
40
+ [TASK_STATUS.DELIVERED]: [TASK_STATUS.EVALUATED, TASK_STATUS.REFUSED],
41
+ [TASK_STATUS.REFUSED]: [TASK_STATUS.DELIVERED, TASK_STATUS.QUITTED],
42
+ [TASK_STATUS.EVALUATED]: [TASK_STATUS.ARCHIVED],
43
+ [TASK_STATUS.ARCHIVED]: [],
44
+ };
45
+ return validTransitions[currentStatus]?.includes(newStatus) || false;
46
+ },
47
+ /**
48
+ * Get the display name for a task status
49
+ */
50
+ getDisplayName: (status) => {
51
+ const statusNames = {
52
+ [TASK_STATUS.PROPOSED]: 'Proposed',
53
+ [TASK_STATUS.NEGOTIATED]: 'Negotiated',
54
+ [TASK_STATUS.ACCEPTED]: 'Accepted',
55
+ [TASK_STATUS.REJECTED]: 'Rejected',
56
+ [TASK_STATUS.QUITTED]: 'Quitted',
57
+ [TASK_STATUS.CANCELED]: 'Canceled',
58
+ [TASK_STATUS.DELIVERED]: 'Delivered',
59
+ [TASK_STATUS.REFUSED]: 'Refused',
60
+ [TASK_STATUS.EVALUATED]: 'Evaluated',
61
+ [TASK_STATUS.ARCHIVED]: 'Archived',
62
+ };
63
+ return statusNames[status] || 'Unknown';
64
+ },
65
+ /**
66
+ * Check if a task is in a final state
67
+ */
68
+ isFinalState: (status) => {
69
+ return status === TASK_STATUS.ARCHIVED;
70
+ },
71
+ /**
72
+ * Check if a task is active (not archived or quit)
73
+ */
74
+ isActive: (status) => {
75
+ return status !== TASK_STATUS.ARCHIVED && status !== TASK_STATUS.QUITTED;
76
+ },
77
+ };
78
+ //# sourceMappingURL=task.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.model.js","sourceRoot":"","sources":["../../src/models/task.model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Unified Timezone model for Biome platform
3
+ * This model is shared between frontend and backend
4
+ *
5
+ * Structure matches database schema from migrations:
6
+ * - 20250218005249_timezone_table.ts (initial: id, code, offset)
7
+ * - 20250425010843_update_timezone_table.ts (added: name, dst, sdt)
8
+ * - 20250428124001_table_timezones_rename_columns.ts (camelCase)
9
+ */
10
+ export interface Timezone {
11
+ id?: number;
12
+ code: string;
13
+ name: string;
14
+ dst: number;
15
+ sdt: number;
16
+ createdAt: Date;
17
+ updatedAt: Date;
18
+ }
19
+ //# sourceMappingURL=timezone.model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timezone.model.d.ts","sourceRoot":"","sources":["../../src/models/timezone.model.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,QAAQ;IACrB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACnB"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ /**
3
+ * Unified Timezone model for Biome platform
4
+ * This model is shared between frontend and backend
5
+ *
6
+ * Structure matches database schema from migrations:
7
+ * - 20250218005249_timezone_table.ts (initial: id, code, offset)
8
+ * - 20250425010843_update_timezone_table.ts (added: name, dst, sdt)
9
+ * - 20250428124001_table_timezones_rename_columns.ts (camelCase)
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ //# sourceMappingURL=timezone.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timezone.model.js","sourceRoot":"","sources":["../../src/models/timezone.model.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG"}