@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,101 @@
1
+ /**
2
+ * Unified User model for Biome platform
3
+ * This model is shared between frontend and backend
4
+ *
5
+ * CRITICAL: This model matches the database schema exactly (all fields in camelCase)
6
+ * Database table: users
7
+ * All fields correspond to actual database columns after camelCase migration
8
+ */
9
+ /**
10
+ * Complete User model matching database schema
11
+ * Includes all fields from the users table
12
+ */
13
+ export interface User {
14
+ id?: number;
15
+ username: string;
16
+ email: string;
17
+ password: string;
18
+ timezoneId: number;
19
+ loginAttempts: number;
20
+ emailConfirmedAt: Date | null;
21
+ termsAcceptedAt: Date | null;
22
+ lockedUntil?: Date | null;
23
+ lastLoginAt?: Date | null;
24
+ loginCount?: number;
25
+ passwordChangedAt?: Date | null;
26
+ twoFactorEnabled?: boolean;
27
+ twoFactorPreference?: string | null;
28
+ hasActiveSubscription?: boolean;
29
+ nekTokensAvailable?: number;
30
+ isAdminFlagged?: boolean;
31
+ createdAt: Date;
32
+ updatedAt: Date;
33
+ }
34
+ /**
35
+ * User type safe for frontend display
36
+ * Excludes sensitive fields like password and security-related fields
37
+ */
38
+ export type UserPublic = Omit<User, 'password' | 'loginAttempts' | 'lockedUntil'>;
39
+ /**
40
+ * Lightweight user representation for lists and references
41
+ * Minimal fields for performance
42
+ */
43
+ export type UserMinimal = Pick<User, 'id' | 'username' | 'email'>;
44
+ /**
45
+ * Extended user profile with additional person table data
46
+ * Combines User model with Person profile information
47
+ */
48
+ export interface UserProfile extends UserPublic {
49
+ displayName?: string;
50
+ bio?: string;
51
+ location?: string;
52
+ website?: string;
53
+ profilePhotoFileId?: number | null;
54
+ profileVisibility?: 'public' | 'private';
55
+ spokenLanguages?: string[];
56
+ contactChannels?: {
57
+ type: 'email' | 'phone' | 'social';
58
+ value: string;
59
+ }[];
60
+ }
61
+ /**
62
+ * Type for user creation (without auto-generated or auto-managed fields)
63
+ */
64
+ export type CreateUserRequest = Omit<User, 'id' | 'createdAt' | 'updatedAt' | 'hasActiveSubscription' | 'nekTokensAvailable' | 'isAdminFlagged' | 'lockedUntil' | 'lastLoginAt' | 'loginCount' | 'twoFactorEnabled' | 'twoFactorPreference'>;
65
+ /**
66
+ * Type for user updates (partial, without auto-managed fields)
67
+ */
68
+ export type UpdateUserRequest = Partial<Omit<User, 'id' | 'createdAt' | 'updatedAt' | 'password'>>;
69
+ /**
70
+ * Profile update request
71
+ */
72
+ export interface UpdateProfileRequest {
73
+ bio?: string;
74
+ displayName?: string;
75
+ profilePhotoFileId?: number;
76
+ username?: string;
77
+ location?: string;
78
+ website?: string;
79
+ profileVisibility?: 'public' | 'private';
80
+ timezoneId?: number;
81
+ facebookUrl?: string;
82
+ instagramUrl?: string;
83
+ linkedinUrl?: string;
84
+ xingUrl?: string;
85
+ youtubeUrl?: string;
86
+ rumbleUrl?: string;
87
+ mastodonUrl?: string;
88
+ tildeverseUrl?: string;
89
+ twitchUrl?: string;
90
+ xUrl?: string;
91
+ }
92
+ /**
93
+ * Membership tier type
94
+ * Derived from hasActiveSubscription and isAdminFlagged
95
+ */
96
+ export type MembershipTier = 'free' | 'premium' | 'admin';
97
+ /**
98
+ * Helper function to determine membership tier from user data
99
+ */
100
+ export declare function getUserMembershipTier(user: User): MembershipTier;
101
+ //# sourceMappingURL=user.model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.model.d.ts","sourceRoot":"","sources":["../../src/models/user.model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ /**
3
+ * Unified User model for Biome platform
4
+ * This model is shared between frontend and backend
5
+ *
6
+ * CRITICAL: This model matches the database schema exactly (all fields in camelCase)
7
+ * Database table: users
8
+ * All fields correspond to actual database columns after camelCase migration
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.getUserMembershipTier = getUserMembershipTier;
12
+ /**
13
+ * Helper function to determine membership tier from user data
14
+ */
15
+ function getUserMembershipTier(user) {
16
+ if (user.isAdminFlagged)
17
+ return 'admin';
18
+ if (user.hasActiveSubscription)
19
+ return 'premium';
20
+ return 'free';
21
+ }
22
+ //# sourceMappingURL=user.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.model.js","sourceRoot":"","sources":["../../src/models/user.model.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAuHH,sDAIC;AAPD;;GAEG;AACH,SAAgB,qBAAqB,CAAC,IAAU;IAC5C,IAAI,IAAI,CAAC,cAAc;QAAE,OAAO,OAAO,CAAC;IACxC,IAAI,IAAI,CAAC,qBAAqB;QAAE,OAAO,SAAS,CAAC;IACjD,OAAO,MAAM,CAAC;AAClB,CAAC"}
@@ -0,0 +1,52 @@
1
+ import { BiomeHttpClient } from '../core/http-client';
2
+ import { UserAsAPerson } from '../models/person.model';
3
+ import { UpdateProfileRequest } from '../models/user.model';
4
+ /**
5
+ * Profile management service - pure business logic without UI state
6
+ */
7
+ export declare class BiomeProfiles {
8
+ private http;
9
+ private readonly currentProfile;
10
+ constructor(http: BiomeHttpClient);
11
+ /**
12
+ * Get current user's profile
13
+ */
14
+ getMyProfile(): Promise<UserAsAPerson>;
15
+ /**
16
+ * Get user profile by username
17
+ */
18
+ getProfile(username: string): Promise<UserAsAPerson | null>;
19
+ /**
20
+ * Update current user's profile
21
+ */
22
+ updateProfile(profileData: UpdateProfileRequest): Promise<UserAsAPerson>;
23
+ /**
24
+ * Check if username is available
25
+ */
26
+ checkUsername(username: string): Promise<boolean>;
27
+ /**
28
+ * Change user password
29
+ */
30
+ changePassword(passwordData: {
31
+ currentPassword: string;
32
+ newPassword: string;
33
+ confirmPassword: string;
34
+ }): Promise<void>;
35
+ /**
36
+ * Get current profile value
37
+ */
38
+ getCurrentProfile(): UserAsAPerson | null;
39
+ /**
40
+ * Subscribe to profile changes
41
+ */
42
+ onProfileChange(callback: (profile: UserAsAPerson | null) => void): () => void;
43
+ /**
44
+ * Upload profile photo (placeholder implementation)
45
+ */
46
+ uploadProfilePhoto(file: File): Promise<UserAsAPerson>;
47
+ /**
48
+ * Remove profile photo (placeholder implementation)
49
+ */
50
+ removeProfilePhoto(): Promise<UserAsAPerson>;
51
+ }
52
+ //# sourceMappingURL=profile.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.service.d.ts","sourceRoot":"","sources":["../../src/profiles/profile.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAItD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D;;GAEG;AACH,qBAAa,aAAa;IAGV,OAAO,CAAC,IAAI;IAFxB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiD;gBAE5D,IAAI,EAAE,eAAe;IAEzC;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,aAAa,CAAC;IAW5C;;OAEG;IACG,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAajE;;OAEG;IACG,aAAa,CAAC,WAAW,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC;IAW9E;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASvD;;OAEG;IACG,cAAc,CAAC,YAAY,EAAE;QAC/B,eAAe,EAAE,MAAM,CAAC;QACxB,WAAW,EAAE,MAAM,CAAC;QACpB,eAAe,EAAE,MAAM,CAAC;KAC3B,GAAG,OAAO,CAAC,IAAI,CAAC;IAQjB;;OAEG;IACH,iBAAiB,IAAI,aAAa,GAAG,IAAI;IAIzC;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,KAAK,IAAI,GAAG,MAAM,IAAI;IAI9E;;OAEG;IACG,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC;IAU5D;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,aAAa,CAAC;CASrD"}
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BiomeProfiles = void 0;
4
+ const state_manager_1 = require("../core/state-manager");
5
+ const error_handler_1 = require("../core/error-handler");
6
+ /**
7
+ * Profile management service - pure business logic without UI state
8
+ */
9
+ class BiomeProfiles {
10
+ constructor(http) {
11
+ this.http = http;
12
+ this.currentProfile = new state_manager_1.StatefulValue(null);
13
+ }
14
+ /**
15
+ * Get current user's profile
16
+ */
17
+ async getMyProfile() {
18
+ try {
19
+ const response = await this.http.get('/profiles/me');
20
+ const profile = response.payload;
21
+ this.currentProfile.value = profile;
22
+ return profile;
23
+ }
24
+ catch (error) {
25
+ throw (0, error_handler_1.createSdkError)(error, 'Failed to fetch profile');
26
+ }
27
+ }
28
+ /**
29
+ * Get user profile by username
30
+ */
31
+ async getProfile(username) {
32
+ try {
33
+ const response = await this.http.get(`/profiles/${username}`);
34
+ const profile = response.payload;
35
+ return profile || null;
36
+ }
37
+ catch (error) {
38
+ if (error.status === 404) {
39
+ return null;
40
+ }
41
+ throw (0, error_handler_1.createSdkError)(error, 'Failed to fetch profile');
42
+ }
43
+ }
44
+ /**
45
+ * Update current user's profile
46
+ */
47
+ async updateProfile(profileData) {
48
+ try {
49
+ const response = await this.http.put('/profiles/me', profileData);
50
+ const updatedProfile = response.payload;
51
+ this.currentProfile.value = updatedProfile;
52
+ return updatedProfile;
53
+ }
54
+ catch (error) {
55
+ throw (0, error_handler_1.createSdkError)(error, 'Failed to update profile');
56
+ }
57
+ }
58
+ /**
59
+ * Check if username is available
60
+ */
61
+ async checkUsername(username) {
62
+ try {
63
+ const response = await this.http.get(`/auth/check-username?username=${encodeURIComponent(username)}`);
64
+ return response.payload.available;
65
+ }
66
+ catch (error) {
67
+ throw (0, error_handler_1.createSdkError)(error, 'Failed to check username availability');
68
+ }
69
+ }
70
+ /**
71
+ * Change user password
72
+ */
73
+ async changePassword(passwordData) {
74
+ try {
75
+ await this.http.post('/profile/password', passwordData);
76
+ }
77
+ catch (error) {
78
+ throw (0, error_handler_1.createSdkError)(error, 'Failed to change password');
79
+ }
80
+ }
81
+ /**
82
+ * Get current profile value
83
+ */
84
+ getCurrentProfile() {
85
+ return this.currentProfile.value;
86
+ }
87
+ /**
88
+ * Subscribe to profile changes
89
+ */
90
+ onProfileChange(callback) {
91
+ return this.currentProfile.subscribe(callback);
92
+ }
93
+ /**
94
+ * Upload profile photo (placeholder implementation)
95
+ */
96
+ async uploadProfilePhoto(file) {
97
+ // TODO: Implement actual profile photo upload
98
+ // For now, return current profile to maintain compatibility
99
+ const currentProfile = this.currentProfile.value;
100
+ if (!currentProfile) {
101
+ throw (0, error_handler_1.createSdkError)(new Error('No active profile'), 'Failed to upload profile photo');
102
+ }
103
+ return currentProfile;
104
+ }
105
+ /**
106
+ * Remove profile photo (placeholder implementation)
107
+ */
108
+ async removeProfilePhoto() {
109
+ // TODO: Implement actual profile photo removal
110
+ // For now, return current profile to maintain compatibility
111
+ const currentProfile = this.currentProfile.value;
112
+ if (!currentProfile) {
113
+ throw (0, error_handler_1.createSdkError)(new Error('No active profile'), 'Failed to remove profile photo');
114
+ }
115
+ return currentProfile;
116
+ }
117
+ }
118
+ exports.BiomeProfiles = BiomeProfiles;
119
+ //# sourceMappingURL=profile.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.service.js","sourceRoot":"","sources":["../../src/profiles/profile.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/profiles/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ // Profile-related types will be exported from profile.service.ts
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/profiles/types.ts"],"names":[],"mappings":";AAAA,iEAAiE"}
@@ -0,0 +1,51 @@
1
+ import { Task } from '../models/task.model';
2
+ /**
3
+ * Task sorting utilities - pure business logic without UI concerns
4
+ */
5
+ export declare class TaskSorting {
6
+ /**
7
+ * Sort tasks using intelligent ordering system
8
+ * Primary sort: by date (next touch date or due date)
9
+ * Secondary sort: by Eisenhower Matrix (Urgent+Important → Important+Not Urgent → Urgent+Not Important → Not Urgent+Not Important)
10
+ * Tertiary sort: by creation date
11
+ */
12
+ static sortTasks(tasks: Task[]): Task[];
13
+ /**
14
+ * Check if a task is overdue based on its dates
15
+ */
16
+ static isTaskOverdue(task: Task): boolean;
17
+ /**
18
+ * Get number of days until a task's date
19
+ * Returns negative number for overdue tasks
20
+ */
21
+ static getDaysUntilTaskDate(task: Task): number;
22
+ /**
23
+ * Get task urgency level based on days until date
24
+ */
25
+ static getTaskUrgencyLevel(task: Task): 'overdue' | 'urgent' | 'soon' | 'normal';
26
+ /**
27
+ * Compare tasks by date (next touch date or due date)
28
+ */
29
+ private static compareByDate;
30
+ /**
31
+ * Get relevant date for a task (next touch date or due date)
32
+ */
33
+ private static getTaskDate;
34
+ /**
35
+ * Compare tasks by Eisenhower Matrix priority
36
+ */
37
+ private static compareByEisenhowerMatrix;
38
+ /**
39
+ * Get Eisenhower Matrix priority for a task
40
+ */
41
+ private static getEisenhowerPriority;
42
+ /**
43
+ * Compare tasks by creation date (newest first)
44
+ */
45
+ private static compareByCreationDate;
46
+ /**
47
+ * Helper to start of day
48
+ */
49
+ private static startOfDay;
50
+ }
51
+ //# sourceMappingURL=task-sorting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-sorting.d.ts","sourceRoot":"","sources":["../../src/tasks/task-sorting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C;;GAEG;AACH,qBAAa,WAAW;IAEpB;;;;;OAKG;IACH,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE;IAmBvC;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO;IAUzC;;;OAGG;IACH,MAAM,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAY/C;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ;IAShF;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAa5B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IAW1B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAQxC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAOpC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAQpC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;CAK5B"}
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TaskSorting = void 0;
4
+ /**
5
+ * Task sorting utilities - pure business logic without UI concerns
6
+ */
7
+ class TaskSorting {
8
+ /**
9
+ * Sort tasks using intelligent ordering system
10
+ * Primary sort: by date (next touch date or due date)
11
+ * Secondary sort: by Eisenhower Matrix (Urgent+Important → Important+Not Urgent → Urgent+Not Important → Not Urgent+Not Important)
12
+ * Tertiary sort: by creation date
13
+ */
14
+ static sortTasks(tasks) {
15
+ return [...tasks].sort((a, b) => {
16
+ // Primary sort: by date
17
+ const dateComparison = TaskSorting.compareByDate(a, b);
18
+ if (dateComparison !== 0) {
19
+ return dateComparison;
20
+ }
21
+ // Secondary sort: by Eisenhower Matrix
22
+ const eisenhowerComparison = TaskSorting.compareByEisenhowerMatrix(a, b);
23
+ if (eisenhowerComparison !== 0) {
24
+ return eisenhowerComparison;
25
+ }
26
+ // Tertiary sort: by creation date (newest first)
27
+ return TaskSorting.compareByCreationDate(a, b);
28
+ });
29
+ }
30
+ /**
31
+ * Check if a task is overdue based on its dates
32
+ */
33
+ static isTaskOverdue(task) {
34
+ const today = TaskSorting.startOfDay(new Date());
35
+ const taskDate = TaskSorting.getTaskDate(task);
36
+ if (!taskDate)
37
+ return false;
38
+ // Treat only dates strictly before today as overdue ("today" is not overdue)
39
+ return TaskSorting.startOfDay(taskDate) < today;
40
+ }
41
+ /**
42
+ * Get number of days until a task's date
43
+ * Returns negative number for overdue tasks
44
+ */
45
+ static getDaysUntilTaskDate(task) {
46
+ const today = TaskSorting.startOfDay(new Date());
47
+ const taskDate = TaskSorting.getTaskDate(task);
48
+ if (!taskDate)
49
+ return Infinity;
50
+ // Compare by day-granularity so that a date on "today" yields 0
51
+ const diffTime = TaskSorting.startOfDay(taskDate).getTime() - today.getTime();
52
+ const dayMs = 1000 * 60 * 60 * 24;
53
+ return Math.floor(diffTime / dayMs);
54
+ }
55
+ /**
56
+ * Get task urgency level based on days until date
57
+ */
58
+ static getTaskUrgencyLevel(task) {
59
+ const daysUntil = TaskSorting.getDaysUntilTaskDate(task);
60
+ if (daysUntil < 0)
61
+ return 'overdue';
62
+ if (daysUntil <= 1)
63
+ return 'urgent';
64
+ if (daysUntil <= 3)
65
+ return 'soon';
66
+ return 'normal';
67
+ }
68
+ /**
69
+ * Compare tasks by date (next touch date or due date)
70
+ */
71
+ static compareByDate(a, b) {
72
+ const dateA = TaskSorting.getTaskDate(a);
73
+ const dateB = TaskSorting.getTaskDate(b);
74
+ // Handle null dates - tasks without dates come last
75
+ if (dateA === null && dateB === null)
76
+ return 0;
77
+ if (dateA === null)
78
+ return 1;
79
+ if (dateB === null)
80
+ return -1;
81
+ // Compare dates (earlier dates come first)
82
+ return dateA.getTime() - dateB.getTime();
83
+ }
84
+ /**
85
+ * Get relevant date for a task (next touch date or due date)
86
+ */
87
+ static getTaskDate(task) {
88
+ // Prefer next touch date, fall back to due date
89
+ if (task.nextTouchDate) {
90
+ return new Date(task.nextTouchDate);
91
+ }
92
+ if (task.dueDate) {
93
+ return new Date(task.dueDate);
94
+ }
95
+ return null;
96
+ }
97
+ /**
98
+ * Compare tasks by Eisenhower Matrix priority
99
+ */
100
+ static compareByEisenhowerMatrix(a, b) {
101
+ const priorityA = TaskSorting.getEisenhowerPriority(a);
102
+ const priorityB = TaskSorting.getEisenhowerPriority(b);
103
+ // Lower priority number means higher priority
104
+ return priorityA - priorityB;
105
+ }
106
+ /**
107
+ * Get Eisenhower Matrix priority for a task
108
+ */
109
+ static getEisenhowerPriority(task) {
110
+ if (task.isUrgent && task.isImportant)
111
+ return 1;
112
+ if (task.isImportant && !task.isUrgent)
113
+ return 2;
114
+ if (task.isUrgent && !task.isImportant)
115
+ return 3;
116
+ return 4; // Not Urgent+Not Important
117
+ }
118
+ /**
119
+ * Compare tasks by creation date (newest first)
120
+ */
121
+ static compareByCreationDate(a, b) {
122
+ const dateA = new Date(a.createdAt);
123
+ const dateB = new Date(b.createdAt);
124
+ // Newer tasks come first (descending order)
125
+ return dateB.getTime() - dateA.getTime();
126
+ }
127
+ /**
128
+ * Helper to start of day
129
+ */
130
+ static startOfDay(date) {
131
+ const d = new Date(date);
132
+ d.setHours(0, 0, 0, 0);
133
+ return d;
134
+ }
135
+ }
136
+ exports.TaskSorting = TaskSorting;
137
+ //# sourceMappingURL=task-sorting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-sorting.js","sourceRoot":"","sources":["../../src/tasks/task-sorting.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,134 @@
1
+ import { BiomeHttpClient } from '../core/http-client';
2
+ import { Task, TASK_STATUS, TaskMinimal, TaskSearchResults } from '../models/task.model';
3
+ /**
4
+ * Task filtering options
5
+ */
6
+ export interface TaskFilters {
7
+ status?: TASK_STATUS | TASK_STATUS[];
8
+ assigneeId?: number;
9
+ requesterId?: number;
10
+ limit?: number;
11
+ offset?: number;
12
+ search?: string;
13
+ }
14
+ /**
15
+ * Task creation request
16
+ */
17
+ export interface CreateTaskRequest {
18
+ title: string;
19
+ description?: string;
20
+ summary?: string;
21
+ assigneeId?: number;
22
+ dueDate?: Date | null;
23
+ prerequisites?: number[];
24
+ }
25
+ /**
26
+ * Task update request
27
+ */
28
+ export interface UpdateTaskRequest {
29
+ title?: string;
30
+ description?: string;
31
+ summary?: string;
32
+ assigneeId?: number;
33
+ dueDate?: Date | null;
34
+ evaluation?: number;
35
+ tip?: number;
36
+ }
37
+ /**
38
+ * Task action requests
39
+ */
40
+ export interface TaskDeliveryRequest {
41
+ deliveryNote: string;
42
+ }
43
+ export interface TaskEvaluationRequest {
44
+ evaluation: number;
45
+ tip?: number;
46
+ }
47
+ export interface TaskRejectionRequest {
48
+ rejectionNote?: string;
49
+ }
50
+ export interface TaskCancellationRequest {
51
+ cancellationReason?: string;
52
+ }
53
+ /**
54
+ * Task management service - pure business logic without UI state
55
+ */
56
+ export declare class BiomeTasks {
57
+ private http;
58
+ constructor(http: BiomeHttpClient);
59
+ /**
60
+ * Get task by ID
61
+ */
62
+ getById(id: number): Promise<Task>;
63
+ /**
64
+ * Create a new task
65
+ */
66
+ create(task: CreateTaskRequest): Promise<{
67
+ id: number;
68
+ }>;
69
+ /**
70
+ * Update an existing task
71
+ */
72
+ update(id: number, updates: UpdateTaskRequest): Promise<Task>;
73
+ /**
74
+ * Update specific task fields (partial update)
75
+ */
76
+ updateFields(id: number, fields: Partial<Task>): Promise<Task>;
77
+ /**
78
+ * Delete a task
79
+ */
80
+ delete(id: number): Promise<void>;
81
+ /**
82
+ * Get tasks assigned to current user
83
+ */
84
+ getMyTasks(filters?: TaskFilters): Promise<TaskMinimal[]>;
85
+ /**
86
+ * Get tasks delegated by current user
87
+ */
88
+ getDelegatedTasks(filters?: TaskFilters): Promise<TaskMinimal[]>;
89
+ /**
90
+ * Search tasks
91
+ */
92
+ searchTasks(query: string, filters?: TaskFilters): Promise<TaskSearchResults>;
93
+ /**
94
+ * Get tasks by status (for frontend compatibility)
95
+ */
96
+ getTasksByStatus(statuses: TASK_STATUS[]): Promise<TaskSearchResults>;
97
+ /**
98
+ * Get task prerequisites/children
99
+ */
100
+ getRequisites(parentId: number): Promise<Task[]>;
101
+ /**
102
+ * Accept a task
103
+ */
104
+ accept(id: number): Promise<Task>;
105
+ /**
106
+ * Reject a task
107
+ */
108
+ reject(id: number, request: TaskRejectionRequest): Promise<Task>;
109
+ /**
110
+ * Deliver a completed task
111
+ */
112
+ deliver(id: number, request: TaskDeliveryRequest): Promise<Task>;
113
+ /**
114
+ * Evaluate a delivered task
115
+ */
116
+ evaluate(id: number, request: TaskEvaluationRequest): Promise<Task>;
117
+ /**
118
+ * Archive a task
119
+ */
120
+ archive(id: number): Promise<Task>;
121
+ /**
122
+ * Cancel a task
123
+ */
124
+ cancel(id: number, request: TaskCancellationRequest): Promise<Task>;
125
+ /**
126
+ * Quit a task (for assignee)
127
+ */
128
+ quit(id: number): Promise<Task>;
129
+ /**
130
+ * Build query parameters from filters
131
+ */
132
+ private buildQueryParams;
133
+ }
134
+ //# sourceMappingURL=task.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.service.d.ts","sourceRoot":"","sources":["../../src/tasks/task.service.ts"],"names":[],"mappings":"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"}