@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.
- package/README.md +100 -0
- package/dist/auth/auth.service.d.ts +90 -0
- package/dist/auth/auth.service.d.ts.map +1 -0
- package/dist/auth/auth.service.js +166 -0
- package/dist/auth/auth.service.js.map +1 -0
- package/dist/auth/types.d.ts +19 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +3 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/core/configuration.d.ts +26 -0
- package/dist/core/configuration.d.ts.map +1 -0
- package/dist/core/configuration.js +3 -0
- package/dist/core/configuration.js.map +1 -0
- package/dist/core/error-handler.d.ts +24 -0
- package/dist/core/error-handler.d.ts.map +1 -0
- package/dist/core/error-handler.js +76 -0
- package/dist/core/error-handler.js.map +1 -0
- package/dist/core/http-client.d.ts +43 -0
- package/dist/core/http-client.d.ts.map +1 -0
- package/dist/core/http-client.js +97 -0
- package/dist/core/http-client.js.map +1 -0
- package/dist/core/state-manager.d.ts +16 -0
- package/dist/core/state-manager.d.ts.map +1 -0
- package/dist/core/state-manager.js +33 -0
- package/dist/core/state-manager.js.map +1 -0
- package/dist/files/file-upload.d.ts +60 -0
- package/dist/files/file-upload.d.ts.map +1 -0
- package/dist/files/file-upload.js +121 -0
- package/dist/files/file-upload.js.map +1 -0
- package/dist/index.d.ts +80 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +140 -0
- package/dist/index.js.map +1 -0
- package/dist/models/api-error.model.d.ts +31 -0
- package/dist/models/api-error.model.d.ts.map +1 -0
- package/dist/models/api-error.model.js +53 -0
- package/dist/models/api-error.model.js.map +1 -0
- package/dist/models/api-response.model.d.ts +51 -0
- package/dist/models/api-response.model.d.ts.map +1 -0
- package/dist/models/api-response.model.js +77 -0
- package/dist/models/api-response.model.js.map +1 -0
- package/dist/models/chat.model.d.ts +59 -0
- package/dist/models/chat.model.d.ts.map +1 -0
- package/dist/models/chat.model.js +3 -0
- package/dist/models/chat.model.js.map +1 -0
- package/dist/models/ecosystem.model.d.ts +16 -0
- package/dist/models/ecosystem.model.d.ts.map +1 -0
- package/dist/models/ecosystem.model.js +7 -0
- package/dist/models/ecosystem.model.js.map +1 -0
- package/dist/models/file.model.d.ts +67 -0
- package/dist/models/file.model.d.ts.map +1 -0
- package/dist/models/file.model.js +3 -0
- package/dist/models/file.model.js.map +1 -0
- package/dist/models/notification.model.d.ts +172 -0
- package/dist/models/notification.model.d.ts.map +1 -0
- package/dist/models/notification.model.js +77 -0
- package/dist/models/notification.model.js.map +1 -0
- package/dist/models/person.model.d.ts +94 -0
- package/dist/models/person.model.d.ts.map +1 -0
- package/dist/models/person.model.js +14 -0
- package/dist/models/person.model.js.map +1 -0
- package/dist/models/project.model.d.ts +62 -0
- package/dist/models/project.model.d.ts.map +1 -0
- package/dist/models/project.model.js +93 -0
- package/dist/models/project.model.js.map +1 -0
- package/dist/models/task-update.model.d.ts +28 -0
- package/dist/models/task-update.model.d.ts.map +1 -0
- package/dist/models/task-update.model.js +8 -0
- package/dist/models/task-update.model.js.map +1 -0
- package/dist/models/task-url.model.d.ts +16 -0
- package/dist/models/task-url.model.d.ts.map +1 -0
- package/dist/models/task-url.model.js +3 -0
- package/dist/models/task-url.model.js.map +1 -0
- package/dist/models/task.model.d.ts +120 -0
- package/dist/models/task.model.d.ts.map +1 -0
- package/dist/models/task.model.js +78 -0
- package/dist/models/task.model.js.map +1 -0
- package/dist/models/timezone.model.d.ts +19 -0
- package/dist/models/timezone.model.d.ts.map +1 -0
- package/dist/models/timezone.model.js +12 -0
- package/dist/models/timezone.model.js.map +1 -0
- package/dist/models/user.model.d.ts +101 -0
- package/dist/models/user.model.d.ts.map +1 -0
- package/dist/models/user.model.js +22 -0
- package/dist/models/user.model.js.map +1 -0
- package/dist/profiles/profile.service.d.ts +52 -0
- package/dist/profiles/profile.service.d.ts.map +1 -0
- package/dist/profiles/profile.service.js +119 -0
- package/dist/profiles/profile.service.js.map +1 -0
- package/dist/profiles/types.d.ts +1 -0
- package/dist/profiles/types.d.ts.map +1 -0
- package/dist/profiles/types.js +3 -0
- package/dist/profiles/types.js.map +1 -0
- package/dist/tasks/task-sorting.d.ts +51 -0
- package/dist/tasks/task-sorting.d.ts.map +1 -0
- package/dist/tasks/task-sorting.js +137 -0
- package/dist/tasks/task-sorting.js.map +1 -0
- package/dist/tasks/task.service.d.ts +134 -0
- package/dist/tasks/task.service.d.ts.map +1 -0
- package/dist/tasks/task.service.js +256 -0
- package/dist/tasks/task.service.js.map +1 -0
- package/dist/tasks/types.d.ts +2 -0
- package/dist/tasks/types.d.ts.map +1 -0
- package/dist/tasks/types.js +3 -0
- package/dist/tasks/types.js.map +1 -0
- package/dist/types/actor.types.d.ts +101 -0
- package/dist/types/actor.types.d.ts.map +1 -0
- package/dist/types/actor.types.js +135 -0
- package/dist/types/actor.types.js.map +1 -0
- package/dist/types/api.types.d.ts +43 -0
- package/dist/types/api.types.d.ts.map +1 -0
- package/dist/types/api.types.js +6 -0
- package/dist/types/api.types.js.map +1 -0
- package/dist/types/common.types.d.ts +40 -0
- package/dist/types/common.types.d.ts.map +1 -0
- package/dist/types/common.types.js +6 -0
- package/dist/types/common.types.js.map +1 -0
- package/dist/types/state-machine.types.d.ts +102 -0
- package/dist/types/state-machine.types.d.ts.map +1 -0
- package/dist/types/state-machine.types.js +18 -0
- package/dist/types/state-machine.types.js.map +1 -0
- package/dist/users/user.service.d.ts +49 -0
- package/dist/users/user.service.d.ts.map +1 -0
- package/dist/users/user.service.js +119 -0
- package/dist/users/user.service.js.map +1 -0
- package/dist/utils/date.utils.d.ts +60 -0
- package/dist/utils/date.utils.d.ts.map +1 -0
- package/dist/utils/date.utils.js +125 -0
- package/dist/utils/date.utils.js.map +1 -0
- package/dist/utils/username-generator.d.ts +76 -0
- package/dist/utils/username-generator.d.ts.map +1 -0
- package/dist/utils/username-generator.js +177 -0
- package/dist/utils/username-generator.js.map +1 -0
- package/dist/utils/validation.utils.d.ts +57 -0
- package/dist/utils/validation.utils.d.ts.map +1 -0
- package/dist/utils/validation.utils.js +117 -0
- package/dist/utils/validation.utils.js.map +1 -0
- package/dist/validation/password-strength.d.ts +66 -0
- package/dist/validation/password-strength.d.ts.map +1 -0
- package/dist/validation/password-strength.js +192 -0
- package/dist/validation/password-strength.js.map +1 -0
- package/dist/validation/schemas.d.ts +69 -0
- package/dist/validation/schemas.d.ts.map +1 -0
- package/dist/validation/schemas.js +94 -0
- package/dist/validation/schemas.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base state machine types for Biome platform
|
|
3
|
+
* These types are shared between frontend and backend
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Base actor type for state machine transitions
|
|
7
|
+
*/
|
|
8
|
+
export type Actor = {
|
|
9
|
+
id: number;
|
|
10
|
+
type: string;
|
|
11
|
+
permissions: string[];
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Base state machine event
|
|
15
|
+
*/
|
|
16
|
+
export type StateMachineEvent = {
|
|
17
|
+
type: string;
|
|
18
|
+
actor: Actor;
|
|
19
|
+
timestamp: Date;
|
|
20
|
+
metadata?: Record<string, any>;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Base state machine transition
|
|
24
|
+
*/
|
|
25
|
+
export type StateTransition<TState, TEvent> = {
|
|
26
|
+
from: TState;
|
|
27
|
+
event: TEvent;
|
|
28
|
+
to: TState;
|
|
29
|
+
actor: Actor;
|
|
30
|
+
timestamp: Date;
|
|
31
|
+
metadata?: Record<string, any>;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Base state machine configuration
|
|
35
|
+
*/
|
|
36
|
+
export type StateMachineConfig<TState, TEvent> = {
|
|
37
|
+
initialState: TState;
|
|
38
|
+
transitions: Array<{
|
|
39
|
+
from: TState;
|
|
40
|
+
event: TEvent;
|
|
41
|
+
to: TState;
|
|
42
|
+
allowedActors: string[];
|
|
43
|
+
validation?: (actor: Actor, metadata?: Record<string, any>) => boolean;
|
|
44
|
+
}>;
|
|
45
|
+
finalStates: TState[];
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Base state machine service interface
|
|
49
|
+
*/
|
|
50
|
+
export interface IStateMachineService<TState, TEvent> {
|
|
51
|
+
getCurrentState(): TState;
|
|
52
|
+
canTransition(event: TEvent, actor: Actor): boolean;
|
|
53
|
+
transition(event: TEvent, actor: Actor, metadata?: Record<string, any>): Promise<TState>;
|
|
54
|
+
getValidTransitions(actor: Actor): TEvent[];
|
|
55
|
+
isFinalState(): boolean;
|
|
56
|
+
getTransitionHistory(): StateTransition<TState, TEvent>[];
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* State machine error types
|
|
60
|
+
*/
|
|
61
|
+
export declare enum StateMachineErrorType {
|
|
62
|
+
INVALID_TRANSITION = "INVALID_TRANSITION",
|
|
63
|
+
UNAUTHORIZED_ACTOR = "UNAUTHORIZED_ACTOR",
|
|
64
|
+
INVALID_STATE = "INVALID_STATE",
|
|
65
|
+
VALIDATION_FAILED = "VALIDATION_FAILED"
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* State machine error
|
|
69
|
+
*/
|
|
70
|
+
export type StateMachineError = {
|
|
71
|
+
type: StateMachineErrorType;
|
|
72
|
+
message: string;
|
|
73
|
+
currentState?: any;
|
|
74
|
+
attemptedEvent?: any;
|
|
75
|
+
actor?: Actor;
|
|
76
|
+
metadata?: Record<string, any>;
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* State machine audit log entry
|
|
80
|
+
*/
|
|
81
|
+
export type StateMachineAuditLog = {
|
|
82
|
+
id: string;
|
|
83
|
+
entityType: string;
|
|
84
|
+
entityId: number;
|
|
85
|
+
fromState: any;
|
|
86
|
+
toState: any;
|
|
87
|
+
event: string;
|
|
88
|
+
actor: Actor;
|
|
89
|
+
timestamp: Date;
|
|
90
|
+
metadata?: Record<string, any>;
|
|
91
|
+
success: boolean;
|
|
92
|
+
error?: StateMachineError;
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* State machine factory configuration
|
|
96
|
+
*/
|
|
97
|
+
export type StateMachineFactoryConfig = {
|
|
98
|
+
enableAuditLogging: boolean;
|
|
99
|
+
enableValidation: boolean;
|
|
100
|
+
maxHistorySize: number;
|
|
101
|
+
};
|
|
102
|
+
//# sourceMappingURL=state-machine.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-machine.types.d.ts","sourceRoot":"","sources":["../../src/types/state-machine.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Base state machine types for Biome platform
|
|
4
|
+
* These types are shared between frontend and backend
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.StateMachineErrorType = void 0;
|
|
8
|
+
/**
|
|
9
|
+
* State machine error types
|
|
10
|
+
*/
|
|
11
|
+
var StateMachineErrorType;
|
|
12
|
+
(function (StateMachineErrorType) {
|
|
13
|
+
StateMachineErrorType["INVALID_TRANSITION"] = "INVALID_TRANSITION";
|
|
14
|
+
StateMachineErrorType["UNAUTHORIZED_ACTOR"] = "UNAUTHORIZED_ACTOR";
|
|
15
|
+
StateMachineErrorType["INVALID_STATE"] = "INVALID_STATE";
|
|
16
|
+
StateMachineErrorType["VALIDATION_FAILED"] = "VALIDATION_FAILED";
|
|
17
|
+
})(StateMachineErrorType || (exports.StateMachineErrorType = StateMachineErrorType = {}));
|
|
18
|
+
//# sourceMappingURL=state-machine.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-machine.types.js","sourceRoot":"","sources":["../../src/types/state-machine.types.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AA4DH;;GAEG;AACH,IAAY,qBAKX;AALD,WAAY,qBAAqB;IAC7B,kEAAyC,CAAA;IACzC,kEAAyC,CAAA;IACzC,wDAA+B,CAAA;IAC/B,gEAAuC,CAAA;AAC3C,CAAC,EALW,qBAAqB,qCAArB,qBAAqB,QAKhC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { BiomeHttpClient } from '../core/http-client';
|
|
2
|
+
/**
|
|
3
|
+
* User service - pure business logic without UI concerns
|
|
4
|
+
*/
|
|
5
|
+
export declare class BiomeUsers {
|
|
6
|
+
private http;
|
|
7
|
+
constructor(http: BiomeHttpClient);
|
|
8
|
+
/**
|
|
9
|
+
* Get all users with avatar URLs
|
|
10
|
+
*/
|
|
11
|
+
getAll(): Promise<UserWithAvatar[]>;
|
|
12
|
+
/**
|
|
13
|
+
* Build avatar URL for user
|
|
14
|
+
*/
|
|
15
|
+
private buildAvatarUrl;
|
|
16
|
+
/**
|
|
17
|
+
* Normalize URL to be absolute
|
|
18
|
+
*/
|
|
19
|
+
private normalizeUrl;
|
|
20
|
+
/**
|
|
21
|
+
* Get users with pagination and search
|
|
22
|
+
*/
|
|
23
|
+
getUsers(query?: string, limit?: number): Promise<UserWithAvatar[]>;
|
|
24
|
+
/**
|
|
25
|
+
* Get user by ID
|
|
26
|
+
*/
|
|
27
|
+
getUserById(id: number): Promise<UserWithAvatar | null>;
|
|
28
|
+
/**
|
|
29
|
+
* Get user by username
|
|
30
|
+
*/
|
|
31
|
+
getUserByUsername(username: string): Promise<UserWithAvatar | null>;
|
|
32
|
+
/**
|
|
33
|
+
* Search users
|
|
34
|
+
*/
|
|
35
|
+
searchUsers(query: string, limit?: number): Promise<UserWithAvatar[]>;
|
|
36
|
+
}
|
|
37
|
+
export interface UserWithAvatar {
|
|
38
|
+
id: number;
|
|
39
|
+
username: string;
|
|
40
|
+
avatarStoragePath?: string | null;
|
|
41
|
+
avatarDownloadUrl?: string | null;
|
|
42
|
+
avatarUrl?: string | null;
|
|
43
|
+
profilePhoto?: {
|
|
44
|
+
downloadUrl?: string;
|
|
45
|
+
storagePath?: string;
|
|
46
|
+
};
|
|
47
|
+
profilePhotoFileId?: number | null;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=user.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.service.d.ts","sourceRoot":"","sources":["../../src/users/user.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAItD;;GAEG;AACH,qBAAa,UAAU;IAEP,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,eAAe;IAEzC;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAiBzC;;OAEG;IACH,OAAO,CAAC,cAAc;IAYtB;;OAEG;IACH,OAAO,CAAC,YAAY;IAYpB;;OAEG;IACG,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAgBzE;;OAEG;IACG,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAe7D;;OAEG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAezE;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;CAG9E;AAED,MAAM,WAAW,cAAc;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,CAAC,EAAE;QACX,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BiomeUsers = void 0;
|
|
4
|
+
const error_handler_1 = require("../core/error-handler");
|
|
5
|
+
/**
|
|
6
|
+
* User service - pure business logic without UI concerns
|
|
7
|
+
*/
|
|
8
|
+
class BiomeUsers {
|
|
9
|
+
constructor(http) {
|
|
10
|
+
this.http = http;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Get all users with avatar URLs
|
|
14
|
+
*/
|
|
15
|
+
async getAll() {
|
|
16
|
+
try {
|
|
17
|
+
const response = await this.http.get('/users');
|
|
18
|
+
if (!response.payload) {
|
|
19
|
+
throw new Error('No user data received');
|
|
20
|
+
}
|
|
21
|
+
return response.payload.users.map(user => ({
|
|
22
|
+
...user,
|
|
23
|
+
avatarUrl: this.buildAvatarUrl(user),
|
|
24
|
+
}));
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
throw (0, error_handler_1.createSdkError)(error, 'Failed to get users');
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Build avatar URL for user
|
|
32
|
+
*/
|
|
33
|
+
buildAvatarUrl(user) {
|
|
34
|
+
if (user.avatarDownloadUrl) {
|
|
35
|
+
return this.normalizeUrl(user.avatarDownloadUrl);
|
|
36
|
+
}
|
|
37
|
+
if (user.avatarStoragePath) {
|
|
38
|
+
return this.normalizeUrl(`/trunk/files/${user.avatarStoragePath}`);
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Normalize URL to be absolute
|
|
44
|
+
*/
|
|
45
|
+
normalizeUrl(path) {
|
|
46
|
+
if (path.startsWith('http://') || path.startsWith('https://')) {
|
|
47
|
+
return path;
|
|
48
|
+
}
|
|
49
|
+
// For SDK, we don't have access to environment
|
|
50
|
+
// This would need to be passed in via config or handled at a higher level
|
|
51
|
+
const baseUrl = ''; // This should be handled by HTTP client base URL
|
|
52
|
+
const normalizedPath = path.startsWith('/') ? path : `/${path}`;
|
|
53
|
+
return `${baseUrl}${normalizedPath}`;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Get users with pagination and search
|
|
57
|
+
*/
|
|
58
|
+
async getUsers(query, limit) {
|
|
59
|
+
try {
|
|
60
|
+
const params = new URLSearchParams();
|
|
61
|
+
if (query)
|
|
62
|
+
params.set('q', query);
|
|
63
|
+
if (limit)
|
|
64
|
+
params.set('limit', limit.toString());
|
|
65
|
+
const response = await this.http.get(`/users?${params}`);
|
|
66
|
+
return response.payload.users.map(user => ({
|
|
67
|
+
...user,
|
|
68
|
+
avatarUrl: this.buildAvatarUrl(user),
|
|
69
|
+
}));
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
throw (0, error_handler_1.createSdkError)(error, 'Failed to get users');
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get user by ID
|
|
77
|
+
*/
|
|
78
|
+
async getUserById(id) {
|
|
79
|
+
try {
|
|
80
|
+
const response = await this.http.get(`/users/${id}`);
|
|
81
|
+
const user = response.payload;
|
|
82
|
+
if (!user)
|
|
83
|
+
return null;
|
|
84
|
+
return {
|
|
85
|
+
...user,
|
|
86
|
+
avatarUrl: this.buildAvatarUrl(user),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
throw (0, error_handler_1.createSdkError)(error, 'Failed to get user by ID');
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Get user by username
|
|
95
|
+
*/
|
|
96
|
+
async getUserByUsername(username) {
|
|
97
|
+
try {
|
|
98
|
+
const response = await this.http.get(`/users/username/${encodeURIComponent(username)}`);
|
|
99
|
+
const user = response.payload;
|
|
100
|
+
if (!user)
|
|
101
|
+
return null;
|
|
102
|
+
return {
|
|
103
|
+
...user,
|
|
104
|
+
avatarUrl: this.buildAvatarUrl(user),
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
throw (0, error_handler_1.createSdkError)(error, 'Failed to get user by username');
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Search users
|
|
113
|
+
*/
|
|
114
|
+
async searchUsers(query, limit) {
|
|
115
|
+
return this.getUsers(query, limit);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
exports.BiomeUsers = BiomeUsers;
|
|
119
|
+
//# sourceMappingURL=user.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.service.js","sourceRoot":"","sources":["../../src/users/user.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Date utilities for Biome platform
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Formats a date to ISO string
|
|
6
|
+
*/
|
|
7
|
+
export declare const toISOString: (date: Date) => string;
|
|
8
|
+
/**
|
|
9
|
+
* Parses a date from various formats
|
|
10
|
+
*/
|
|
11
|
+
export declare const parseDate: (date: string | Date | null | undefined) => Date | null;
|
|
12
|
+
/**
|
|
13
|
+
* Checks if a date is valid
|
|
14
|
+
*/
|
|
15
|
+
export declare const isValidDate: (date: unknown) => boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Gets the current date in ISO format
|
|
18
|
+
*/
|
|
19
|
+
export declare const getCurrentDate: () => string;
|
|
20
|
+
/**
|
|
21
|
+
* Adds days to a date
|
|
22
|
+
*/
|
|
23
|
+
export declare const addDays: (date: Date, days: number) => Date;
|
|
24
|
+
/**
|
|
25
|
+
* Subtracts days from a date
|
|
26
|
+
*/
|
|
27
|
+
export declare const subtractDays: (date: Date, days: number) => Date;
|
|
28
|
+
/**
|
|
29
|
+
* Gets the difference in days between two dates
|
|
30
|
+
*/
|
|
31
|
+
export declare const getDaysDifference: (date1: Date, date2: Date) => number;
|
|
32
|
+
/**
|
|
33
|
+
* Checks if a date is in the past
|
|
34
|
+
*/
|
|
35
|
+
export declare const isPast: (date: Date) => boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Checks if a date is in the future
|
|
38
|
+
*/
|
|
39
|
+
export declare const isFuture: (date: Date) => boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Checks if a date is today
|
|
42
|
+
*/
|
|
43
|
+
export declare const isToday: (date: Date) => boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Formats a date for display
|
|
46
|
+
*/
|
|
47
|
+
export declare const formatDate: (date: Date, locale?: string) => string;
|
|
48
|
+
/**
|
|
49
|
+
* Formats a date and time for display
|
|
50
|
+
*/
|
|
51
|
+
export declare const formatDateTime: (date: Date, locale?: string) => string;
|
|
52
|
+
/**
|
|
53
|
+
* Gets the start of the day
|
|
54
|
+
*/
|
|
55
|
+
export declare const getStartOfDay: (date: Date) => Date;
|
|
56
|
+
/**
|
|
57
|
+
* Gets the end of the day
|
|
58
|
+
*/
|
|
59
|
+
export declare const getEndOfDay: (date: Date) => Date;
|
|
60
|
+
//# sourceMappingURL=date.utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date.utils.d.ts","sourceRoot":"","sources":["../../src/utils/date.utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,IAAI,KAAG,MAExC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,KAAG,IAAI,GAAG,IASzE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,OAAO,KAAG,OAI3C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,QAAO,MAEjC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,OAAO,GAAI,MAAM,IAAI,EAAE,MAAM,MAAM,KAAG,IAIlD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,IAAI,EAAE,MAAM,MAAM,KAAG,IAEvD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAAI,OAAO,IAAI,EAAE,OAAO,IAAI,KAAG,MAG5D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,MAAM,GAAI,MAAM,IAAI,KAAG,OAEnC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAI,MAAM,IAAI,KAAG,OAErC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,OAAO,GAAI,MAAM,IAAI,KAAG,OAGpC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,GAAI,MAAM,IAAI,EAAE,eAAgB,KAAG,MAEzD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,MAAM,IAAI,EAAE,eAAgB,KAAG,MAE7D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,MAAM,IAAI,KAAG,IAI1C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,IAAI,KAAG,IAIxC,CAAC"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Date utilities for Biome platform
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getEndOfDay = exports.getStartOfDay = exports.formatDateTime = exports.formatDate = exports.isToday = exports.isFuture = exports.isPast = exports.getDaysDifference = exports.subtractDays = exports.addDays = exports.getCurrentDate = exports.isValidDate = exports.parseDate = exports.toISOString = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* Formats a date to ISO string
|
|
9
|
+
*/
|
|
10
|
+
const toISOString = (date) => {
|
|
11
|
+
return date.toISOString();
|
|
12
|
+
};
|
|
13
|
+
exports.toISOString = toISOString;
|
|
14
|
+
/**
|
|
15
|
+
* Parses a date from various formats
|
|
16
|
+
*/
|
|
17
|
+
const parseDate = (date) => {
|
|
18
|
+
if (!date)
|
|
19
|
+
return null;
|
|
20
|
+
if (date instanceof Date)
|
|
21
|
+
return date;
|
|
22
|
+
try {
|
|
23
|
+
return new Date(date);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
exports.parseDate = parseDate;
|
|
30
|
+
/**
|
|
31
|
+
* Checks if a date is valid
|
|
32
|
+
*/
|
|
33
|
+
const isValidDate = (date) => {
|
|
34
|
+
if (!date)
|
|
35
|
+
return false;
|
|
36
|
+
const d = new Date(date);
|
|
37
|
+
return d instanceof Date && !isNaN(d.getTime());
|
|
38
|
+
};
|
|
39
|
+
exports.isValidDate = isValidDate;
|
|
40
|
+
/**
|
|
41
|
+
* Gets the current date in ISO format
|
|
42
|
+
*/
|
|
43
|
+
const getCurrentDate = () => {
|
|
44
|
+
return new Date().toISOString();
|
|
45
|
+
};
|
|
46
|
+
exports.getCurrentDate = getCurrentDate;
|
|
47
|
+
/**
|
|
48
|
+
* Adds days to a date
|
|
49
|
+
*/
|
|
50
|
+
const addDays = (date, days) => {
|
|
51
|
+
const result = new Date(date);
|
|
52
|
+
result.setDate(result.getDate() + days);
|
|
53
|
+
return result;
|
|
54
|
+
};
|
|
55
|
+
exports.addDays = addDays;
|
|
56
|
+
/**
|
|
57
|
+
* Subtracts days from a date
|
|
58
|
+
*/
|
|
59
|
+
const subtractDays = (date, days) => {
|
|
60
|
+
return (0, exports.addDays)(date, -days);
|
|
61
|
+
};
|
|
62
|
+
exports.subtractDays = subtractDays;
|
|
63
|
+
/**
|
|
64
|
+
* Gets the difference in days between two dates
|
|
65
|
+
*/
|
|
66
|
+
const getDaysDifference = (date1, date2) => {
|
|
67
|
+
const timeDiff = date2.getTime() - date1.getTime();
|
|
68
|
+
return Math.ceil(timeDiff / (1000 * 3600 * 24));
|
|
69
|
+
};
|
|
70
|
+
exports.getDaysDifference = getDaysDifference;
|
|
71
|
+
/**
|
|
72
|
+
* Checks if a date is in the past
|
|
73
|
+
*/
|
|
74
|
+
const isPast = (date) => {
|
|
75
|
+
return date < new Date();
|
|
76
|
+
};
|
|
77
|
+
exports.isPast = isPast;
|
|
78
|
+
/**
|
|
79
|
+
* Checks if a date is in the future
|
|
80
|
+
*/
|
|
81
|
+
const isFuture = (date) => {
|
|
82
|
+
return date > new Date();
|
|
83
|
+
};
|
|
84
|
+
exports.isFuture = isFuture;
|
|
85
|
+
/**
|
|
86
|
+
* Checks if a date is today
|
|
87
|
+
*/
|
|
88
|
+
const isToday = (date) => {
|
|
89
|
+
const today = new Date();
|
|
90
|
+
return date.toDateString() === today.toDateString();
|
|
91
|
+
};
|
|
92
|
+
exports.isToday = isToday;
|
|
93
|
+
/**
|
|
94
|
+
* Formats a date for display
|
|
95
|
+
*/
|
|
96
|
+
const formatDate = (date, locale = 'en-US') => {
|
|
97
|
+
return date.toLocaleDateString(locale);
|
|
98
|
+
};
|
|
99
|
+
exports.formatDate = formatDate;
|
|
100
|
+
/**
|
|
101
|
+
* Formats a date and time for display
|
|
102
|
+
*/
|
|
103
|
+
const formatDateTime = (date, locale = 'en-US') => {
|
|
104
|
+
return date.toLocaleString(locale);
|
|
105
|
+
};
|
|
106
|
+
exports.formatDateTime = formatDateTime;
|
|
107
|
+
/**
|
|
108
|
+
* Gets the start of the day
|
|
109
|
+
*/
|
|
110
|
+
const getStartOfDay = (date) => {
|
|
111
|
+
const result = new Date(date);
|
|
112
|
+
result.setHours(0, 0, 0, 0);
|
|
113
|
+
return result;
|
|
114
|
+
};
|
|
115
|
+
exports.getStartOfDay = getStartOfDay;
|
|
116
|
+
/**
|
|
117
|
+
* Gets the end of the day
|
|
118
|
+
*/
|
|
119
|
+
const getEndOfDay = (date) => {
|
|
120
|
+
const result = new Date(date);
|
|
121
|
+
result.setHours(23, 59, 59, 999);
|
|
122
|
+
return result;
|
|
123
|
+
};
|
|
124
|
+
exports.getEndOfDay = getEndOfDay;
|
|
125
|
+
//# sourceMappingURL=date.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date.utils.js","sourceRoot":"","sources":["../../src/utils/date.utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creative Username Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates unique, memorable usernames following the pattern:
|
|
5
|
+
* Adjective + Noun + Number (e.g., "BraveEagle2847", "SilverFox1923")
|
|
6
|
+
*
|
|
7
|
+
* This module is part of the SDK for reusability across frontend and backend.
|
|
8
|
+
*
|
|
9
|
+
* Features:
|
|
10
|
+
* - Generates creative, memorable usernames
|
|
11
|
+
* - Optional uniqueness checking with retry logic
|
|
12
|
+
* - Max 10 retry attempts if collision occurs
|
|
13
|
+
* - Returns predictable format: AdjNounNNNN
|
|
14
|
+
*
|
|
15
|
+
* @module username-generator
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Generate a creative username following the pattern: Adjective + Noun + Number
|
|
19
|
+
*
|
|
20
|
+
* @param checkUniqueness - Optional function to check if username is already taken.
|
|
21
|
+
* Should return Promise<true> if unique, Promise<false> if taken.
|
|
22
|
+
* @param maxAttempts - Maximum number of retry attempts if collision occurs (default: 10)
|
|
23
|
+
* @returns Promise<string> - A unique username following the pattern AdjNounNNNN
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* // Without uniqueness check
|
|
28
|
+
* const username = await generateCreativeUsername();
|
|
29
|
+
* console.log(username); // "BraveEagle2847"
|
|
30
|
+
*
|
|
31
|
+
* // With uniqueness check
|
|
32
|
+
* const username = await generateCreativeUsername(async (name) => {
|
|
33
|
+
* const exists = await db.users.findOne({ username: name });
|
|
34
|
+
* return !exists; // Return true if unique, false if taken
|
|
35
|
+
* });
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* @throws {Error} If unable to generate unique username after maxAttempts
|
|
39
|
+
*/
|
|
40
|
+
export declare function generateCreativeUsername(checkUniqueness?: (username: string) => Promise<boolean>, maxAttempts?: number): Promise<string>;
|
|
41
|
+
/**
|
|
42
|
+
* Generate multiple username suggestions
|
|
43
|
+
*
|
|
44
|
+
* @param count - Number of suggestions to generate (default: 3)
|
|
45
|
+
* @returns Promise<string[]> - Array of username suggestions
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```typescript
|
|
49
|
+
* const suggestions = await generateUsernameSuggestions(5);
|
|
50
|
+
* console.log(suggestions);
|
|
51
|
+
* // ["BraveEagle2847", "SilverFox1923", "MightyTiger4567", "NobleWolf3892", "SwiftHawk7651"]
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export declare function generateUsernameSuggestions(count?: number): Promise<string[]>;
|
|
55
|
+
/**
|
|
56
|
+
* Validate username format
|
|
57
|
+
*
|
|
58
|
+
* Checks if a username matches the expected pattern:
|
|
59
|
+
* - Starts with uppercase letter
|
|
60
|
+
* - Followed by lowercase letters
|
|
61
|
+
* - Followed by uppercase letter
|
|
62
|
+
* - Followed by lowercase letters
|
|
63
|
+
* - Ends with 4 digits
|
|
64
|
+
*
|
|
65
|
+
* @param username - The username to validate
|
|
66
|
+
* @returns true if username matches the generated format, false otherwise
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```typescript
|
|
70
|
+
* isValidGeneratedUsername('BraveEagle2847'); // true
|
|
71
|
+
* isValidGeneratedUsername('braveEagle2847'); // false (lowercase start)
|
|
72
|
+
* isValidGeneratedUsername('BraveEagle284'); // false (only 3 digits)
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
export declare function isValidGeneratedUsername(username: string): boolean;
|
|
76
|
+
//# sourceMappingURL=username-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"username-generator.d.ts","sourceRoot":"","sources":["../../src/utils/username-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAmDH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,wBAAwB,CAC1C,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,EACxD,WAAW,GAAE,MAAW,GACzB,OAAO,CAAC,MAAM,CAAC,CAqCjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,2BAA2B,CAAC,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAkBtF;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAIlE"}
|