@social.dev/server-sdk 0.0.1-alpha.8 → 0.0.1-alpha.81
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 +696 -40
- package/dist/__mocks__/kafka.mock.d.ts +11 -0
- package/dist/__mocks__/kafka.mock.js +15 -0
- package/dist/__mocks__/kafka.mock.js.map +1 -0
- package/dist/app.module.d.ts +4 -4
- package/dist/app.module.js +17 -7
- package/dist/app.module.js.map +1 -1
- package/dist/auth/auth.controller.d.ts +7 -1
- package/dist/auth/auth.controller.js +28 -3
- package/dist/auth/auth.controller.js.map +1 -1
- package/dist/auth/auth.middleware.d.ts +3 -5
- package/dist/auth/auth.middleware.js +7 -15
- package/dist/auth/auth.middleware.js.map +1 -1
- package/dist/auth/auth.module.js +4 -1
- package/dist/auth/auth.module.js.map +1 -1
- package/dist/auth/auth.service.d.ts +9 -1
- package/dist/auth/auth.service.js +34 -2
- package/dist/auth/auth.service.js.map +1 -1
- package/dist/auth/constants.js +2 -1
- package/dist/auth/constants.js.map +1 -1
- package/dist/auth/dto/login-success.dto.d.ts +1 -1
- package/dist/auth/dto/login-success.dto.js +6 -3
- package/dist/auth/dto/login-success.dto.js.map +1 -1
- package/dist/auth/dto/register-success.dto.d.ts +3 -0
- package/dist/auth/dto/register-success.dto.js +12 -0
- package/dist/auth/dto/register-success.dto.js.map +1 -0
- package/dist/auth/dto/register.dto.d.ts +6 -0
- package/dist/auth/dto/register.dto.js +45 -0
- package/dist/auth/dto/register.dto.js.map +1 -0
- package/dist/auth/oidc/dto/requests.d.ts +6 -0
- package/dist/auth/oidc/dto/requests.js +47 -0
- package/dist/auth/oidc/dto/requests.js.map +1 -0
- package/dist/auth/oidc/dto/responses.js +1 -1
- package/dist/auth/oidc/oidc.controller.d.ts +7 -2
- package/dist/auth/oidc/oidc.controller.js +31 -17
- package/dist/auth/oidc/oidc.controller.js.map +1 -1
- package/dist/auth/oidc/oidc.service.d.ts +9 -4
- package/dist/auth/oidc/oidc.service.js +64 -38
- package/dist/auth/oidc/oidc.service.js.map +1 -1
- package/dist/auth/session/session.controller.js +8 -3
- package/dist/auth/session/session.controller.js.map +1 -1
- package/dist/auth/session/session.service.d.ts +2 -2
- package/dist/auth/session/session.service.js +14 -7
- package/dist/auth/session/session.service.js.map +1 -1
- package/dist/bootstrap.d.ts +2 -1
- package/dist/bootstrap.js +7 -1
- package/dist/bootstrap.js.map +1 -1
- package/dist/chat/chat.acl.d.ts +3 -0
- package/dist/chat/chat.acl.js +50 -0
- package/dist/chat/chat.acl.js.map +1 -0
- package/dist/chat/chat.controller.d.ts +15 -6
- package/dist/chat/chat.controller.js +153 -14
- package/dist/chat/chat.controller.js.map +1 -1
- package/dist/chat/chat.module.d.ts +3 -0
- package/dist/chat/chat.module.js +30 -4
- package/dist/chat/chat.module.js.map +1 -1
- package/dist/chat/chat.service.d.ts +63 -12
- package/dist/chat/chat.service.js +468 -36
- package/dist/chat/chat.service.js.map +1 -1
- package/dist/chat/dto/add-reaction.dto.d.ts +5 -0
- package/dist/chat/dto/add-reaction.dto.js +42 -0
- package/dist/chat/dto/add-reaction.dto.js.map +1 -0
- package/dist/chat/dto/create-message.dto.d.ts +4 -1
- package/dist/chat/dto/create-message.dto.js +23 -1
- package/dist/chat/dto/create-message.dto.js.map +1 -1
- package/dist/chat/dto/edit-message.dto.d.ts +5 -0
- package/dist/chat/dto/edit-message.dto.js +31 -0
- package/dist/chat/dto/edit-message.dto.js.map +1 -0
- package/dist/chat/dto/responses.dto.d.ts +27 -5
- package/dist/chat/dto/responses.dto.js +177 -18
- package/dist/chat/dto/responses.dto.js.map +1 -1
- package/dist/chat/dto/update-cursor.dto.d.ts +5 -0
- package/dist/chat/dto/update-cursor.dto.js +36 -0
- package/dist/chat/dto/update-cursor.dto.js.map +1 -0
- package/dist/chat/entities/conversation-member.entity.js +1 -1
- package/dist/chat/entities/conversation-member.entity.js.map +1 -1
- package/dist/chat/entities/conversation.entity.d.ts +4 -0
- package/dist/chat/entities/conversation.entity.js +13 -1
- package/dist/chat/entities/conversation.entity.js.map +1 -1
- package/dist/chat/entities/message.entity.d.ts +8 -0
- package/dist/chat/entities/message.entity.js +32 -2
- package/dist/chat/entities/message.entity.js.map +1 -1
- package/dist/chat/entities/reaction.entity.d.ts +10 -0
- package/dist/chat/entities/reaction.entity.js +62 -0
- package/dist/chat/entities/reaction.entity.js.map +1 -0
- package/dist/chat/entities/read-cursor.entity.d.ts +10 -0
- package/dist/chat/entities/read-cursor.entity.js +64 -0
- package/dist/chat/entities/read-cursor.entity.js.map +1 -0
- package/dist/chat/enums/conversation-type.enum.d.ts +2 -1
- package/dist/chat/enums/conversation-type.enum.js +1 -0
- package/dist/chat/enums/conversation-type.enum.js.map +1 -1
- package/dist/common/decorators/api-paginated-response.d.ts +1 -1
- package/dist/common/decorators/api-paginated-response.js +2 -2
- package/dist/common/decorators/api-paginated-response.js.map +1 -1
- package/dist/common/dto/paginated-response.dto.d.ts +2 -0
- package/dist/common/dto/paginated-response.dto.js +14 -3
- package/dist/common/dto/paginated-response.dto.js.map +1 -1
- package/dist/common/injection-tokens.d.ts +2 -0
- package/dist/common/injection-tokens.js +3 -1
- package/dist/common/injection-tokens.js.map +1 -1
- package/dist/common/utils/cursor.d.ts +2 -0
- package/dist/common/utils/cursor.js +12 -0
- package/dist/common/utils/cursor.js.map +1 -0
- package/dist/community/avatar/avatar.controller.d.ts +11 -0
- package/dist/community/avatar/avatar.controller.js +90 -0
- package/dist/community/avatar/avatar.controller.js.map +1 -0
- package/dist/community/avatar/avatar.service.d.ts +13 -0
- package/dist/community/avatar/avatar.service.js +78 -0
- package/dist/community/avatar/avatar.service.js.map +1 -0
- package/dist/community/community.acl.d.ts +6 -3
- package/dist/community/community.acl.js +58 -35
- package/dist/community/community.acl.js.map +1 -1
- package/dist/community/community.controller.d.ts +8 -5
- package/dist/community/community.controller.js +102 -17
- package/dist/community/community.controller.js.map +1 -1
- package/dist/community/community.module.d.ts +3 -0
- package/dist/community/community.module.js +17 -7
- package/dist/community/community.module.js.map +1 -1
- package/dist/community/community.service.d.ts +26 -6
- package/dist/community/community.service.js +152 -23
- package/dist/community/community.service.js.map +1 -1
- package/dist/community/dto/community-response.dto.d.ts +5 -1
- package/dist/community/dto/community-response.dto.js +30 -1
- package/dist/community/dto/community-response.dto.js.map +1 -1
- package/dist/community/dto/create-community.dto.d.ts +2 -0
- package/dist/community/dto/create-community.dto.js +14 -2
- package/dist/community/dto/create-community.dto.js.map +1 -1
- package/dist/community/dto/update-community.dto.d.ts +2 -0
- package/dist/community/dto/update-community.dto.js +15 -1
- package/dist/community/dto/update-community.dto.js.map +1 -1
- package/dist/community/entities/community-member.entity.js +1 -0
- package/dist/community/entities/community-member.entity.js.map +1 -1
- package/dist/community/entities/community.entity.d.ts +2 -0
- package/dist/community/entities/community.entity.js +11 -1
- package/dist/community/entities/community.entity.js.map +1 -1
- package/dist/configs/configs.service.d.ts +12 -2
- package/dist/configs/configs.service.js.map +1 -1
- package/dist/core/context/context.d.ts +3 -0
- package/dist/core/context/context.js +15 -0
- package/dist/core/context/context.js.map +1 -1
- package/dist/core/context/context.store.d.ts +2 -0
- package/dist/core/core.module.js +2 -1
- package/dist/core/core.module.js.map +1 -1
- package/dist/core/event-stream/event-stream-processor.interface.d.ts +8 -0
- package/dist/core/event-stream/event-stream-processor.interface.js +3 -0
- package/dist/core/event-stream/event-stream-processor.interface.js.map +1 -0
- package/dist/core/event-stream/event-stream-processor.service.d.ts +13 -0
- package/dist/core/event-stream/event-stream-processor.service.js +60 -0
- package/dist/core/event-stream/event-stream-processor.service.js.map +1 -0
- package/dist/core/event-stream/event-stream.module.d.ts +11 -0
- package/dist/core/event-stream/event-stream.module.js +50 -0
- package/dist/core/event-stream/event-stream.module.js.map +1 -0
- package/dist/core/event-stream/event-stream.service.d.ts +18 -0
- package/dist/core/event-stream/event-stream.service.js +107 -0
- package/dist/core/event-stream/event-stream.service.js.map +1 -0
- package/dist/core/event-stream/types.d.ts +3 -0
- package/dist/core/event-stream/types.js +3 -0
- package/dist/core/event-stream/types.js.map +1 -0
- package/dist/core/hook/hook.module.d.ts +4 -0
- package/dist/core/hook/hook.module.js +30 -0
- package/dist/core/hook/hook.module.js.map +1 -0
- package/dist/core/hook/hook.service.d.ts +7 -0
- package/dist/core/{plugin/plugin-hook.service.js → hook/hook.service.js} +10 -10
- package/dist/core/hook/hook.service.js.map +1 -0
- package/dist/core/plugin/plugin.module.js +5 -6
- package/dist/core/plugin/plugin.module.js.map +1 -1
- package/dist/core/websocket/gateway.service.d.ts +24 -0
- package/dist/core/websocket/gateway.service.js +150 -0
- package/dist/core/websocket/gateway.service.js.map +1 -0
- package/dist/core/websocket/websocket.module.d.ts +2 -0
- package/dist/core/websocket/websocket.module.js +24 -0
- package/dist/core/websocket/websocket.module.js.map +1 -0
- package/dist/db.js +2 -1
- package/dist/db.js.map +1 -1
- package/dist/file-storage/file-storage.service.d.ts +1 -1
- package/dist/file-storage/file-storage.service.js +6 -6
- package/dist/file-storage/file-storage.service.js.map +1 -1
- package/dist/file-storage/utils.d.ts +2 -0
- package/dist/file-storage/utils.js +9 -2
- package/dist/file-storage/utils.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +1 -3
- package/dist/index.js.map +1 -1
- package/dist/manage-db.d.ts +1 -0
- package/dist/manage-db.js +10 -0
- package/dist/manage-db.js.map +1 -0
- package/dist/media/dto/media-response.dto.d.ts +2 -0
- package/dist/media/dto/media-response.dto.js +15 -2
- package/dist/media/dto/media-response.dto.js.map +1 -1
- package/dist/media/entities/audio.entity.d.ts +2 -2
- package/dist/media/entities/audio.entity.js +2 -2
- package/dist/media/entities/audio.entity.js.map +1 -1
- package/dist/media/entities/image.entity.d.ts +5 -0
- package/dist/media/entities/{post-media.entity.js → image.entity.js} +16 -12
- package/dist/media/entities/image.entity.js.map +1 -0
- package/dist/media/entities/media.entity.d.ts +6 -0
- package/dist/media/entities/media.entity.js +25 -2
- package/dist/media/entities/media.entity.js.map +1 -1
- package/dist/media/media.acl.d.ts +2 -4
- package/dist/media/media.acl.js +22 -1
- package/dist/media/media.acl.js.map +1 -1
- package/dist/media/media.controller.d.ts +2 -0
- package/dist/media/media.controller.js +58 -0
- package/dist/media/media.controller.js.map +1 -1
- package/dist/media/media.module.js +2 -1
- package/dist/media/media.module.js.map +1 -1
- package/dist/media/media.service.d.ts +6 -3
- package/dist/media/media.service.js +118 -19
- package/dist/media/media.service.js.map +1 -1
- package/dist/migrations/1757061785934-PushNotificationTokens.d.ts +6 -0
- package/dist/migrations/1757061785934-PushNotificationTokens.js +20 -0
- package/dist/migrations/1757061785934-PushNotificationTokens.js.map +1 -0
- package/dist/migrations/1758623241397-AddUserTimestamps.d.ts +6 -0
- package/dist/migrations/1758623241397-AddUserTimestamps.js +16 -0
- package/dist/migrations/1758623241397-AddUserTimestamps.js.map +1 -0
- package/dist/migrations/1758704603161-UserFollows.d.ts +6 -0
- package/dist/migrations/1758704603161-UserFollows.js +18 -0
- package/dist/migrations/1758704603161-UserFollows.js.map +1 -0
- package/dist/migrations/1759757532702-UpdateCommunityCascades.d.ts +6 -0
- package/dist/migrations/1759757532702-UpdateCommunityCascades.js +20 -0
- package/dist/migrations/1759757532702-UpdateCommunityCascades.js.map +1 -0
- package/dist/migrations/1759766474808-UpdateCommunityTimestamps.d.ts +6 -0
- package/dist/migrations/1759766474808-UpdateCommunityTimestamps.js +16 -0
- package/dist/migrations/1759766474808-UpdateCommunityTimestamps.js.map +1 -0
- package/dist/migrations/1759919335188-CommunityChats.d.ts +6 -0
- package/dist/migrations/1759919335188-CommunityChats.js +28 -0
- package/dist/migrations/1759919335188-CommunityChats.js.map +1 -0
- package/dist/migrations/1760363804673-ChatVoiceNotes.d.ts +6 -0
- package/dist/migrations/1760363804673-ChatVoiceNotes.js +24 -0
- package/dist/migrations/1760363804673-ChatVoiceNotes.js.map +1 -0
- package/dist/migrations/1760444646328-ChatReadCursor.d.ts +6 -0
- package/dist/migrations/1760444646328-ChatReadCursor.js +18 -0
- package/dist/migrations/1760444646328-ChatReadCursor.js.map +1 -0
- package/dist/migrations/1761598291629-AddChatImages.d.ts +6 -0
- package/dist/migrations/1761598291629-AddChatImages.js +16 -0
- package/dist/migrations/1761598291629-AddChatImages.js.map +1 -0
- package/dist/migrations/1761648419807-ChatReactions.d.ts +6 -0
- package/dist/migrations/1761648419807-ChatReactions.js +18 -0
- package/dist/migrations/1761648419807-ChatReactions.js.map +1 -0
- package/dist/migrations/1762953835109-AddChatReplies.d.ts +6 -0
- package/dist/migrations/1762953835109-AddChatReplies.js +22 -0
- package/dist/migrations/1762953835109-AddChatReplies.js.map +1 -0
- package/dist/network/entities/network.entity.js +1 -3
- package/dist/network/entities/network.entity.js.map +1 -1
- package/dist/network/network.middleware.d.ts +3 -1
- package/dist/network/network.middleware.js +12 -4
- package/dist/network/network.middleware.js.map +1 -1
- package/dist/network/network.module.js +2 -1
- package/dist/network/network.module.js.map +1 -1
- package/dist/network/network.service.d.ts +4 -2
- package/dist/network/network.service.js +16 -6
- package/dist/network/network.service.js.map +1 -1
- package/dist/notification/dto/delete-push-token.dto.d.ts +3 -0
- package/dist/notification/dto/delete-push-token.dto.js +26 -0
- package/dist/notification/dto/delete-push-token.dto.js.map +1 -0
- package/dist/notification/dto/register-push-token.dto.d.ts +5 -0
- package/dist/notification/dto/register-push-token.dto.js +38 -0
- package/dist/notification/dto/register-push-token.dto.js.map +1 -0
- package/dist/notification/entities/push-token.entity.d.ts +11 -0
- package/dist/notification/entities/push-token.entity.js +60 -0
- package/dist/notification/entities/push-token.entity.js.map +1 -0
- package/dist/notification/enums/push-service.enum.d.ts +6 -0
- package/dist/notification/enums/push-service.enum.js +11 -0
- package/dist/notification/enums/push-service.enum.js.map +1 -0
- package/dist/notification/hook-listener.service.d.ts +13 -0
- package/dist/notification/hook-listener.service.js +58 -0
- package/dist/notification/hook-listener.service.js.map +1 -0
- package/dist/notification/notification.module.d.ts +2 -0
- package/dist/notification/notification.module.js +24 -0
- package/dist/notification/notification.module.js.map +1 -0
- package/dist/notification/push-notification.controller.d.ts +9 -0
- package/dist/notification/push-notification.controller.js +69 -0
- package/dist/notification/push-notification.controller.js.map +1 -0
- package/dist/notification/push-notification.module.d.ts +2 -0
- package/dist/notification/push-notification.module.js +27 -0
- package/dist/notification/push-notification.module.js.map +1 -0
- package/dist/notification/push-notification.service.d.ts +23 -0
- package/dist/notification/push-notification.service.js +89 -0
- package/dist/notification/push-notification.service.js.map +1 -0
- package/dist/post/entities/post.entity.js +3 -3
- package/dist/post/entities/post.entity.js.map +1 -1
- package/dist/post/post.controller.d.ts +3 -2
- package/dist/post/post.controller.js +28 -8
- package/dist/post/post.controller.js.map +1 -1
- package/dist/post/post.module.js +2 -0
- package/dist/post/post.module.js.map +1 -1
- package/dist/post/post.service.d.ts +7 -3
- package/dist/post/post.service.js +18 -8
- package/dist/post/post.service.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/user/avatar/avatar.controller.d.ts +10 -0
- package/dist/user/avatar/avatar.controller.js +89 -0
- package/dist/user/avatar/avatar.controller.js.map +1 -0
- package/dist/user/avatar/avatar.service.d.ts +12 -0
- package/dist/user/avatar/avatar.service.js +72 -0
- package/dist/user/avatar/avatar.service.js.map +1 -0
- package/dist/user/constants.d.ts +1 -0
- package/dist/user/constants.js +5 -0
- package/dist/user/constants.js.map +1 -0
- package/dist/user/dto/update-profile.dto.d.ts +3 -0
- package/dist/user/dto/update-profile.dto.js +26 -0
- package/dist/user/dto/update-profile.dto.js.map +1 -0
- package/dist/user/dto/user-response.dto.d.ts +6 -0
- package/dist/user/dto/user-response.dto.js +37 -1
- package/dist/user/dto/user-response.dto.js.map +1 -1
- package/dist/user/dto/user.dto.d.ts +8 -0
- package/dist/user/dto/user.dto.js +21 -0
- package/dist/user/dto/user.dto.js.map +1 -0
- package/dist/user/entities/user.entity.d.ts +4 -0
- package/dist/user/entities/user.entity.js +19 -1
- package/dist/user/entities/user.entity.js.map +1 -1
- package/dist/user/follow/dto/follow-response.dto.d.ts +4 -0
- package/dist/user/follow/dto/follow-response.dto.js +38 -0
- package/dist/user/follow/dto/follow-response.dto.js.map +1 -0
- package/dist/user/follow/dto/follow.dto.d.ts +4 -0
- package/dist/user/follow/dto/follow.dto.js +26 -0
- package/dist/user/follow/dto/follow.dto.js.map +1 -0
- package/dist/user/follow/entities/follow.entity.d.ts +10 -0
- package/dist/user/follow/entities/follow.entity.js +60 -0
- package/dist/user/follow/entities/follow.entity.js.map +1 -0
- package/dist/user/follow/follow.controller.d.ts +9 -0
- package/dist/user/follow/follow.controller.js +56 -0
- package/dist/user/follow/follow.controller.js.map +1 -0
- package/dist/user/follow/follow.module.d.ts +2 -0
- package/dist/user/follow/follow.module.js +26 -0
- package/dist/user/follow/follow.module.js.map +1 -0
- package/dist/user/follow/follow.service.d.ts +11 -0
- package/dist/user/follow/follow.service.js +56 -0
- package/dist/user/follow/follow.service.js.map +1 -0
- package/dist/user/user.controller.d.ts +4 -1
- package/dist/user/user.controller.js +38 -4
- package/dist/user/user.controller.js.map +1 -1
- package/dist/user/user.module.js +12 -3
- package/dist/user/user.module.js.map +1 -1
- package/dist/user/user.service.d.ts +12 -5
- package/dist/user/user.service.js +49 -11
- package/dist/user/user.service.js.map +1 -1
- package/package.json +16 -5
- package/dist/core/plugin/plugin-hook.service.d.ts +0 -7
- package/dist/core/plugin/plugin-hook.service.js.map +0 -1
- package/dist/media/entities/post-media.entity.d.ts +0 -5
- package/dist/media/entities/post-media.entity.js.map +0 -1
- package/dist/user/dto/update-user.dto.d.ts +0 -5
- package/dist/user/dto/update-user.dto.js +0 -13
- package/dist/user/dto/update-user.dto.js.map +0 -1
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ConsumeOptions } from '@platformatic/kafka';
|
|
2
|
+
import { Message } from './types';
|
|
3
|
+
export interface EventStreamProcessorInterface {
|
|
4
|
+
readonly groupId: string;
|
|
5
|
+
readonly topics: string[];
|
|
6
|
+
consume(event: Message): void;
|
|
7
|
+
readonly opts?: Omit<ConsumeOptions<string, string, string, string>, 'topics'>;
|
|
8
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-stream-processor.interface.js","sourceRoot":"","sources":["../../../src/core/event-stream/event-stream-processor.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { INestApplication, Type } from '@nestjs/common';
|
|
2
|
+
import { EventStreamProcessorInterface } from './event-stream-processor.interface';
|
|
3
|
+
import { EventStreamService } from './event-stream.service';
|
|
4
|
+
export declare class EventStreamProcessorService {
|
|
5
|
+
private eventStream;
|
|
6
|
+
private appRef;
|
|
7
|
+
protected static PROCESSORS: Type<EventStreamProcessorInterface>[];
|
|
8
|
+
static addProcessor(processor: Type<EventStreamProcessorInterface>): void;
|
|
9
|
+
constructor(eventStream: EventStreamService);
|
|
10
|
+
setAppRef(appRef: INestApplication): EventStreamProcessorService;
|
|
11
|
+
processAll(): void;
|
|
12
|
+
process(instance: Type<EventStreamProcessorInterface>): Promise<void>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var EventStreamProcessorService_1;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.EventStreamProcessorService = void 0;
|
|
14
|
+
const common_1 = require("@nestjs/common");
|
|
15
|
+
const event_stream_service_1 = require("./event-stream.service");
|
|
16
|
+
const kafka_1 = require("@platformatic/kafka");
|
|
17
|
+
let EventStreamProcessorService = class EventStreamProcessorService {
|
|
18
|
+
static { EventStreamProcessorService_1 = this; }
|
|
19
|
+
eventStream;
|
|
20
|
+
appRef;
|
|
21
|
+
static PROCESSORS = [];
|
|
22
|
+
static addProcessor(processor) {
|
|
23
|
+
EventStreamProcessorService_1.PROCESSORS.push(processor);
|
|
24
|
+
}
|
|
25
|
+
constructor(eventStream) {
|
|
26
|
+
this.eventStream = eventStream;
|
|
27
|
+
}
|
|
28
|
+
setAppRef(appRef) {
|
|
29
|
+
this.appRef = appRef;
|
|
30
|
+
return this;
|
|
31
|
+
}
|
|
32
|
+
processAll() {
|
|
33
|
+
for (const instance of EventStreamProcessorService_1.PROCESSORS) {
|
|
34
|
+
this.process(instance);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
async process(instance) {
|
|
38
|
+
const processor = this.appRef.get(instance);
|
|
39
|
+
processor.groupId;
|
|
40
|
+
const defaultOpts = {
|
|
41
|
+
mode: kafka_1.MessagesStreamModes.COMMITTED,
|
|
42
|
+
autocommit: false,
|
|
43
|
+
topics: processor.topics || [],
|
|
44
|
+
sessionTimeout: 10000,
|
|
45
|
+
heartbeatInterval: 500,
|
|
46
|
+
};
|
|
47
|
+
try {
|
|
48
|
+
await this.eventStream.consume(processor.groupId, { ...processor.opts, ...defaultOpts }, processor.consume.bind(processor));
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
console.error('Error consuming process', err);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
exports.EventStreamProcessorService = EventStreamProcessorService;
|
|
56
|
+
exports.EventStreamProcessorService = EventStreamProcessorService = EventStreamProcessorService_1 = __decorate([
|
|
57
|
+
(0, common_1.Injectable)(),
|
|
58
|
+
__metadata("design:paramtypes", [event_stream_service_1.EventStreamService])
|
|
59
|
+
], EventStreamProcessorService);
|
|
60
|
+
//# sourceMappingURL=event-stream-processor.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-stream-processor.service.js","sourceRoot":"","sources":["../../../src/core/event-stream/event-stream-processor.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAoE;AAEpE,iEAA4D;AAC5D,+CAA0D;AAUnD,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;;IAelB;IAdZ,MAAM,CAAmB;IAKvB,MAAM,CAAC,UAAU,GAA0C,EAAE,CAAC;IAKxE,MAAM,CAAC,YAAY,CAAC,SAA8C;QAChE,6BAA2B,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACzD,CAAC;IAED,YAAoB,WAA+B;QAA/B,gBAAW,GAAX,WAAW,CAAoB;IAAG,CAAC;IAKvD,SAAS,CAAC,MAAwB;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,UAAU;QACR,KAAK,MAAM,QAAQ,IAAI,6BAA2B,CAAC,UAAU,EAAE,CAAC;YAC9D,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAKD,KAAK,CAAC,OAAO,CAAC,QAA6C;QACzD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE5C,SAAS,CAAC,OAAO,CAAC;QAElB,MAAM,WAAW,GAAG;YAClB,IAAI,EAAE,2BAAmB,CAAC,SAAS;YACnC,UAAU,EAAE,KAAK;YACjB,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,EAAE;YAC9B,cAAc,EAAE,KAAK;YACrB,iBAAiB,EAAE,GAAG;SACvB,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAC5B,SAAS,CAAC,OAAO,EACjB,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,WAAW,EAAE,EACrC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAClC,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;;AA3DU,kEAA2B;sCAA3B,2BAA2B;IADvC,IAAA,mBAAU,GAAE;qCAgBsB,yCAAkB;GAfxC,2BAA2B,CA4DvC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { DynamicModule, Type } from '@nestjs/common';
|
|
2
|
+
import { EventStreamProcessorInterface } from './event-stream-processor.interface';
|
|
3
|
+
type EventStreamModuleOpts = {
|
|
4
|
+
processors?: Type<EventStreamProcessorInterface>[];
|
|
5
|
+
topics?: string[];
|
|
6
|
+
};
|
|
7
|
+
export declare class EventStreamModule {
|
|
8
|
+
static forRoot(): DynamicModule;
|
|
9
|
+
static forFeature({ topics, processors, }: EventStreamModuleOpts): DynamicModule;
|
|
10
|
+
}
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var EventStreamModule_1;
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.EventStreamModule = void 0;
|
|
11
|
+
const common_1 = require("@nestjs/common");
|
|
12
|
+
const event_stream_service_1 = require("./event-stream.service");
|
|
13
|
+
const context_module_1 = require("../context/context.module");
|
|
14
|
+
const event_stream_processor_service_1 = require("./event-stream-processor.service");
|
|
15
|
+
const configs_module_1 = require("../../configs/configs.module");
|
|
16
|
+
let EventStreamModule = EventStreamModule_1 = class EventStreamModule {
|
|
17
|
+
static forRoot() {
|
|
18
|
+
return {
|
|
19
|
+
global: true,
|
|
20
|
+
module: EventStreamModule_1,
|
|
21
|
+
imports: [context_module_1.ContextModule, configs_module_1.ConfigsModule],
|
|
22
|
+
providers: [event_stream_service_1.EventStreamService, event_stream_processor_service_1.EventStreamProcessorService],
|
|
23
|
+
exports: [event_stream_service_1.EventStreamService, event_stream_processor_service_1.EventStreamProcessorService],
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
static forFeature({ topics = [], processors = [], }) {
|
|
27
|
+
for (const topic of topics) {
|
|
28
|
+
event_stream_service_1.EventStreamService.addTopic(topic);
|
|
29
|
+
}
|
|
30
|
+
for (const processor of processors) {
|
|
31
|
+
event_stream_processor_service_1.EventStreamProcessorService.addProcessor(processor);
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
global: true,
|
|
35
|
+
module: EventStreamModule_1,
|
|
36
|
+
imports: [context_module_1.ContextModule, configs_module_1.ConfigsModule],
|
|
37
|
+
providers: [event_stream_service_1.EventStreamService, event_stream_processor_service_1.EventStreamProcessorService],
|
|
38
|
+
exports: [event_stream_service_1.EventStreamService, event_stream_processor_service_1.EventStreamProcessorService],
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
exports.EventStreamModule = EventStreamModule;
|
|
43
|
+
exports.EventStreamModule = EventStreamModule = EventStreamModule_1 = __decorate([
|
|
44
|
+
(0, common_1.Module)({
|
|
45
|
+
imports: [context_module_1.ContextModule, configs_module_1.ConfigsModule],
|
|
46
|
+
providers: [event_stream_service_1.EventStreamService, event_stream_processor_service_1.EventStreamProcessorService],
|
|
47
|
+
exports: [event_stream_service_1.EventStreamService, event_stream_processor_service_1.EventStreamProcessorService],
|
|
48
|
+
})
|
|
49
|
+
], EventStreamModule);
|
|
50
|
+
//# sourceMappingURL=event-stream.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-stream.module.js","sourceRoot":"","sources":["../../../src/core/event-stream/event-stream.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAA6D;AAC7D,iEAA4D;AAC5D,8DAA0D;AAE1D,qFAA+E;AAC/E,iEAAyD;AAYlD,IAAM,iBAAiB,yBAAvB,MAAM,iBAAiB;IAC5B,MAAM,CAAC,OAAO;QACZ,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,mBAAiB;YACzB,OAAO,EAAE,CAAC,8BAAa,EAAE,8BAAa,CAAC;YACvC,SAAS,EAAE,CAAC,yCAAkB,EAAE,4DAA2B,CAAC;YAC5D,OAAO,EAAE,CAAC,yCAAkB,EAAE,4DAA2B,CAAC;SAC3D,CAAC;IACJ,CAAC;IAKD,MAAM,CAAC,UAAU,CAAC,EAChB,MAAM,GAAG,EAAE,EACX,UAAU,GAAG,EAAE,GACO;QACtB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,yCAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC;QAED,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,4DAA2B,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACtD,CAAC;QAED,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,mBAAiB;YACzB,OAAO,EAAE,CAAC,8BAAa,EAAE,8BAAa,CAAC;YACvC,SAAS,EAAE,CAAC,yCAAkB,EAAE,4DAA2B,CAAC;YAC5D,OAAO,EAAE,CAAC,yCAAkB,EAAE,4DAA2B,CAAC;SAC3D,CAAC;IACJ,CAAC;CACF,CAAA;AAlCY,8CAAiB;4BAAjB,iBAAiB;IAL7B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,8BAAa,EAAE,8BAAa,CAAC;QACvC,SAAS,EAAE,CAAC,yCAAkB,EAAE,4DAA2B,CAAC;QAC5D,OAAO,EAAE,CAAC,yCAAkB,EAAE,4DAA2B,CAAC;KAC3D,CAAC;GACW,iBAAiB,CAkC7B"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ConsumeOptions, Consumer, Producer, ProduceResult, SendOptions } from '@platformatic/kafka';
|
|
2
|
+
import { ContextService } from '../context/context.service';
|
|
3
|
+
import { Message } from './types';
|
|
4
|
+
import { ConfigsService } from '~/configs/configs.service';
|
|
5
|
+
export declare class EventStreamService {
|
|
6
|
+
private contextService;
|
|
7
|
+
private configs;
|
|
8
|
+
private get clientId();
|
|
9
|
+
private get brokers();
|
|
10
|
+
private static TOPICS;
|
|
11
|
+
constructor(contextService: ContextService, configs: ConfigsService);
|
|
12
|
+
static addTopic(topic: string): void;
|
|
13
|
+
consume(groupId: string, options: ConsumeOptions<string, string, string, string>, callback: (message: Message) => void): Promise<void>;
|
|
14
|
+
send(options: SendOptions<string, string, string, string>): Promise<ProduceResult>;
|
|
15
|
+
createTopics(): Promise<void>;
|
|
16
|
+
protected getProducer(): Producer<string, string, string, string>;
|
|
17
|
+
protected getConsumer(groupId: string): Consumer<string, string, string, string>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var EventStreamService_1;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.EventStreamService = void 0;
|
|
14
|
+
const common_1 = require("@nestjs/common");
|
|
15
|
+
const kafka_1 = require("@platformatic/kafka");
|
|
16
|
+
const context_1 = require("../context/context");
|
|
17
|
+
const context_service_1 = require("../context/context.service");
|
|
18
|
+
const configs_service_1 = require("../../configs/configs.service");
|
|
19
|
+
let EventStreamService = class EventStreamService {
|
|
20
|
+
static { EventStreamService_1 = this; }
|
|
21
|
+
contextService;
|
|
22
|
+
configs;
|
|
23
|
+
get clientId() {
|
|
24
|
+
return 'social.dev';
|
|
25
|
+
}
|
|
26
|
+
get brokers() {
|
|
27
|
+
return [process.env.SOCIAL_DEV_KAFKA_BROKER || 'localhost:9092'];
|
|
28
|
+
}
|
|
29
|
+
static TOPICS = [];
|
|
30
|
+
constructor(contextService, configs) {
|
|
31
|
+
this.contextService = contextService;
|
|
32
|
+
this.configs = configs;
|
|
33
|
+
}
|
|
34
|
+
static addTopic(topic) {
|
|
35
|
+
EventStreamService_1.TOPICS.push(topic);
|
|
36
|
+
}
|
|
37
|
+
async consume(groupId, options, callback) {
|
|
38
|
+
const stream = await this.getConsumer(groupId).consume(options);
|
|
39
|
+
for await (const message of stream) {
|
|
40
|
+
this.contextService.run(() => {
|
|
41
|
+
this.contextService.set('network', {
|
|
42
|
+
id: +(message.headers.get('networkId') || ''),
|
|
43
|
+
});
|
|
44
|
+
callback(message);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
send(options) {
|
|
49
|
+
options.messages = options.messages.map((message) => ({
|
|
50
|
+
...message,
|
|
51
|
+
headers: {
|
|
52
|
+
networkId: context_1.Context.getNetwork().id.toString(),
|
|
53
|
+
},
|
|
54
|
+
}));
|
|
55
|
+
return this.getProducer().send(options);
|
|
56
|
+
}
|
|
57
|
+
async createTopics() {
|
|
58
|
+
const admin = new kafka_1.Admin({
|
|
59
|
+
clientId: this.clientId,
|
|
60
|
+
bootstrapBrokers: this.brokers,
|
|
61
|
+
...this.configs.get('eventStream')?.options,
|
|
62
|
+
});
|
|
63
|
+
for (const topic of EventStreamService_1.TOPICS) {
|
|
64
|
+
try {
|
|
65
|
+
await admin.createTopics({
|
|
66
|
+
topics: [topic],
|
|
67
|
+
partitions: 1,
|
|
68
|
+
replicas: 1,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
if (!(err instanceof kafka_1.ResponseError)) {
|
|
73
|
+
throw err;
|
|
74
|
+
}
|
|
75
|
+
if (err.errors[0].apiId === 'TOPIC_ALREADY_EXISTS') {
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
throw err;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
getProducer() {
|
|
84
|
+
return new kafka_1.Producer({
|
|
85
|
+
clientId: this.clientId,
|
|
86
|
+
bootstrapBrokers: this.brokers,
|
|
87
|
+
serializers: kafka_1.stringSerializers,
|
|
88
|
+
...this.configs.get('eventStream')?.options,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
getConsumer(groupId) {
|
|
92
|
+
return new kafka_1.Consumer({
|
|
93
|
+
groupId: `${this.clientId}-${groupId}`,
|
|
94
|
+
clientId: this.clientId,
|
|
95
|
+
bootstrapBrokers: this.brokers,
|
|
96
|
+
deserializers: kafka_1.stringDeserializers,
|
|
97
|
+
...this.configs.get('eventStream')?.options,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
exports.EventStreamService = EventStreamService;
|
|
102
|
+
exports.EventStreamService = EventStreamService = EventStreamService_1 = __decorate([
|
|
103
|
+
(0, common_1.Injectable)(),
|
|
104
|
+
__metadata("design:paramtypes", [context_service_1.ContextService,
|
|
105
|
+
configs_service_1.ConfigsService])
|
|
106
|
+
], EventStreamService);
|
|
107
|
+
//# sourceMappingURL=event-stream.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-stream.service.js","sourceRoot":"","sources":["../../../src/core/event-stream/event-stream.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/event-stream/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var HookModule_1;
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.HookModule = void 0;
|
|
11
|
+
const common_1 = require("@nestjs/common");
|
|
12
|
+
const hook_service_1 = require("./hook.service");
|
|
13
|
+
let HookModule = HookModule_1 = class HookModule {
|
|
14
|
+
static forRoot() {
|
|
15
|
+
return {
|
|
16
|
+
global: true,
|
|
17
|
+
module: HookModule_1,
|
|
18
|
+
providers: [hook_service_1.HookService],
|
|
19
|
+
exports: [hook_service_1.HookService],
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
exports.HookModule = HookModule;
|
|
24
|
+
exports.HookModule = HookModule = HookModule_1 = __decorate([
|
|
25
|
+
(0, common_1.Module)({
|
|
26
|
+
providers: [hook_service_1.HookService],
|
|
27
|
+
exports: [hook_service_1.HookService],
|
|
28
|
+
})
|
|
29
|
+
], HookModule);
|
|
30
|
+
//# sourceMappingURL=hook.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook.module.js","sourceRoot":"","sources":["../../../src/core/hook/hook.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAuD;AACvD,iDAA6C;AAMtC,IAAM,UAAU,kBAAhB,MAAM,UAAU;IACrB,MAAM,CAAC,OAAO;QACZ,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,YAAU;YAClB,SAAS,EAAE,CAAC,0BAAW,CAAC;YACxB,OAAO,EAAE,CAAC,0BAAW,CAAC;SACvB,CAAC;IACJ,CAAC;CACF,CAAA;AATY,gCAAU;qBAAV,UAAU;IAJtB,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,0BAAW,CAAC;QACxB,OAAO,EAAE,CAAC,0BAAW,CAAC;KACvB,CAAC;GACW,UAAU,CAStB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
class
|
|
3
|
+
exports.HookService = void 0;
|
|
4
|
+
class HookListener {
|
|
5
5
|
callbacks;
|
|
6
6
|
constructor(callbacks) {
|
|
7
7
|
this.callbacks = callbacks;
|
|
@@ -14,22 +14,22 @@ class PluginHookListener {
|
|
|
14
14
|
return this.callbacks;
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
|
-
class
|
|
17
|
+
class HookService {
|
|
18
18
|
static listeners = new Map();
|
|
19
19
|
listen(event, callback) {
|
|
20
20
|
let listener;
|
|
21
|
-
if (!
|
|
22
|
-
listener = new
|
|
23
|
-
|
|
21
|
+
if (!HookService.listeners.has(event)) {
|
|
22
|
+
listener = new HookListener([]);
|
|
23
|
+
HookService.listeners.set(event, listener);
|
|
24
24
|
}
|
|
25
25
|
else {
|
|
26
|
-
listener =
|
|
26
|
+
listener = HookService.listeners.get(event);
|
|
27
27
|
}
|
|
28
28
|
listener.addCallback(callback);
|
|
29
29
|
return this;
|
|
30
30
|
}
|
|
31
31
|
emit(event, data) {
|
|
32
|
-
const listener =
|
|
32
|
+
const listener = HookService.listeners.get(event);
|
|
33
33
|
if (!listener) {
|
|
34
34
|
return;
|
|
35
35
|
}
|
|
@@ -39,5 +39,5 @@ class PluginHookService {
|
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
|
-
exports.
|
|
43
|
-
//# sourceMappingURL=
|
|
42
|
+
exports.HookService = HookService;
|
|
43
|
+
//# sourceMappingURL=hook.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook.service.js","sourceRoot":"","sources":["../../../src/core/hook/hook.service.ts"],"names":[],"mappings":";;;AAEA,MAAM,YAAY;IACI;IAApB,YAAoB,SAAyB;QAAzB,cAAS,GAAT,SAAS,CAAgB;IAAG,CAAC;IAEjD,WAAW,CAAC,QAAsB;QAChC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;CACF;AAED,MAAa,WAAW;IACd,MAAM,CAAC,SAAS,GAA8B,IAAI,GAAG,EAAE,CAAC;IAKhE,MAAM,CAAC,KAAa,EAAE,QAAsB;QAC1C,IAAI,QAAsB,CAAC;QAE3B,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACtC,QAAQ,GAAG,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC;YAChC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAiB,CAAC;QAC9D,CAAC;QAED,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE/B,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,IAAI,CAAC,KAAa,EAAE,IAAS;QAC3B,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAElD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY,EAAE,CAAC;QAE1C,KAAK,IAAI,QAAQ,IAAI,SAAS,EAAE,CAAC;YAC/B,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;;AApCH,kCAqCC"}
|
|
@@ -13,24 +13,23 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
13
13
|
exports.PluginModule = void 0;
|
|
14
14
|
const common_1 = require("@nestjs/common");
|
|
15
15
|
const plugin_factory_1 = __importDefault(require("./plugin.factory"));
|
|
16
|
-
const
|
|
16
|
+
const hook_module_1 = require("../hook/hook.module");
|
|
17
17
|
let PluginModule = PluginModule_1 = class PluginModule {
|
|
18
18
|
static forRoot() {
|
|
19
19
|
console.log('Loading plugins', plugin_factory_1.default.plugins);
|
|
20
20
|
return {
|
|
21
21
|
global: true,
|
|
22
22
|
module: PluginModule_1,
|
|
23
|
-
imports: [...plugin_factory_1.default.plugins],
|
|
24
|
-
providers: [plugin_factory_1.default
|
|
25
|
-
exports: [plugin_factory_1.default
|
|
23
|
+
imports: [...plugin_factory_1.default.plugins, hook_module_1.HookModule],
|
|
24
|
+
providers: [plugin_factory_1.default],
|
|
25
|
+
exports: [plugin_factory_1.default],
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
28
|
};
|
|
29
29
|
exports.PluginModule = PluginModule;
|
|
30
30
|
exports.PluginModule = PluginModule = PluginModule_1 = __decorate([
|
|
31
31
|
(0, common_1.Module)({
|
|
32
|
-
|
|
33
|
-
exports: [plugin_hook_service_1.PluginHookService],
|
|
32
|
+
imports: [hook_module_1.HookModule],
|
|
34
33
|
})
|
|
35
34
|
], PluginModule);
|
|
36
35
|
//# sourceMappingURL=plugin.module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.module.js","sourceRoot":"","sources":["../../../src/core/plugin/plugin.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAuD;AACvD,sEAA6C;AAC7C
|
|
1
|
+
{"version":3,"file":"plugin.module.js","sourceRoot":"","sources":["../../../src/core/plugin/plugin.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAuD;AACvD,sEAA6C;AAC7C,qDAAiD;AAK1C,IAAM,YAAY,oBAAlB,MAAM,YAAY;IACvB,MAAM,CAAC,OAAO;QACZ,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,wBAAa,CAAC,OAAO,CAAC,CAAC;QAEtD,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,cAAY;YACpB,OAAO,EAAE,CAAC,GAAG,wBAAa,CAAC,OAAO,EAAE,wBAAU,CAAC;YAC/C,SAAS,EAAE,CAAC,wBAAa,CAAC;YAC1B,OAAO,EAAE,CAAC,wBAAa,CAAC;SACzB,CAAC;IACJ,CAAC;CACF,CAAA;AAZY,oCAAY;uBAAZ,YAAY;IAHxB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,wBAAU,CAAC;KACtB,CAAC;GACW,YAAY,CAYxB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { OnGatewayConnection, OnGatewayDisconnect, OnGatewayInit } from '@nestjs/websockets';
|
|
2
|
+
import { Server, Socket } from 'socket.io';
|
|
3
|
+
import { AuthService } from '~/auth/auth.service';
|
|
4
|
+
import { User } from '~/user/entities/user.entity';
|
|
5
|
+
import { ContextService } from '../context/context.service';
|
|
6
|
+
export interface WebSocketEvent<T = any> {
|
|
7
|
+
event: string;
|
|
8
|
+
data: T;
|
|
9
|
+
socket: Socket;
|
|
10
|
+
user?: User;
|
|
11
|
+
}
|
|
12
|
+
export declare class WebsocketGatewayService implements OnGatewayInit, OnGatewayConnection, OnGatewayDisconnect {
|
|
13
|
+
private authService;
|
|
14
|
+
private contextService;
|
|
15
|
+
sockets: Map<User['id'], Socket[]>;
|
|
16
|
+
private eventSubject;
|
|
17
|
+
constructor(authService: AuthService, contextService: ContextService);
|
|
18
|
+
afterInit(server: Server): void;
|
|
19
|
+
handleConnection(socket: Socket): void;
|
|
20
|
+
handleDisconnect(socket: Socket): void;
|
|
21
|
+
on<T = any>(eventName: string, callback: (event: WebSocketEvent<T>) => void): import("rxjs").Subscription;
|
|
22
|
+
private emitEvent;
|
|
23
|
+
handleTyping(data: any, socket: Socket): any;
|
|
24
|
+
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
22
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
+
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
42
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
43
|
+
};
|
|
44
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
45
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
46
|
+
};
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
exports.WebsocketGatewayService = void 0;
|
|
49
|
+
const websockets_1 = require("@nestjs/websockets");
|
|
50
|
+
const socket_io_1 = require("socket.io");
|
|
51
|
+
const auth_service_1 = require("../../auth/auth.service");
|
|
52
|
+
const cookie = __importStar(require("cookie"));
|
|
53
|
+
const rxjs_1 = require("rxjs");
|
|
54
|
+
const context_service_1 = require("../context/context.service");
|
|
55
|
+
let WebsocketGatewayService = class WebsocketGatewayService {
|
|
56
|
+
authService;
|
|
57
|
+
contextService;
|
|
58
|
+
sockets = new Map();
|
|
59
|
+
eventSubject = new rxjs_1.Subject();
|
|
60
|
+
constructor(authService, contextService) {
|
|
61
|
+
this.authService = authService;
|
|
62
|
+
this.contextService = contextService;
|
|
63
|
+
}
|
|
64
|
+
afterInit(server) {
|
|
65
|
+
server.use(async (socket, next) => {
|
|
66
|
+
let token = undefined;
|
|
67
|
+
if (socket.handshake.headers.authorization) {
|
|
68
|
+
const [type, token_] = socket.handshake.headers.authorization?.split(' ') ?? [];
|
|
69
|
+
if (type === 'Bearer') {
|
|
70
|
+
token = token_;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
const cookies = cookie.parse(socket.handshake?.headers?.cookie || '');
|
|
75
|
+
if (cookies.sess) {
|
|
76
|
+
token = cookies.sess;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (token) {
|
|
80
|
+
const user = await this.authService.getUserFromToken(token);
|
|
81
|
+
socket.data.user = user;
|
|
82
|
+
}
|
|
83
|
+
next();
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
handleConnection(socket) {
|
|
87
|
+
const user = socket.data.user;
|
|
88
|
+
if (user) {
|
|
89
|
+
const sockets = this.sockets.get(user.id) || [];
|
|
90
|
+
sockets.push(socket);
|
|
91
|
+
this.sockets.set(user.id, sockets);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
handleDisconnect(socket) {
|
|
95
|
+
const user = socket.data.user;
|
|
96
|
+
if (user) {
|
|
97
|
+
const sockets = this.sockets.get(user.id) || [];
|
|
98
|
+
sockets.splice(sockets.findIndex((value) => value.id === socket.id), 1);
|
|
99
|
+
this.sockets.set(user.id, sockets);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
on(eventName, callback) {
|
|
103
|
+
const subscription = this.eventSubject.subscribe((event) => {
|
|
104
|
+
if (event.event === eventName) {
|
|
105
|
+
try {
|
|
106
|
+
this.contextService.run(() => {
|
|
107
|
+
this.contextService.set('user', event.user);
|
|
108
|
+
callback(event);
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
console.error(err);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
return subscription;
|
|
117
|
+
}
|
|
118
|
+
emitEvent(event, data, socket) {
|
|
119
|
+
const user = socket.data.user;
|
|
120
|
+
this.eventSubject.next({
|
|
121
|
+
event,
|
|
122
|
+
data,
|
|
123
|
+
socket,
|
|
124
|
+
user,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
handleTyping(data, socket) {
|
|
128
|
+
this.emitEvent('chat_typing', data, socket);
|
|
129
|
+
return data;
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
exports.WebsocketGatewayService = WebsocketGatewayService;
|
|
133
|
+
__decorate([
|
|
134
|
+
(0, websockets_1.SubscribeMessage)('chat_typing'),
|
|
135
|
+
__param(0, (0, websockets_1.MessageBody)()),
|
|
136
|
+
__param(1, (0, websockets_1.ConnectedSocket)()),
|
|
137
|
+
__metadata("design:type", Function),
|
|
138
|
+
__metadata("design:paramtypes", [Object, socket_io_1.Socket]),
|
|
139
|
+
__metadata("design:returntype", Object)
|
|
140
|
+
], WebsocketGatewayService.prototype, "handleTyping", null);
|
|
141
|
+
exports.WebsocketGatewayService = WebsocketGatewayService = __decorate([
|
|
142
|
+
(0, websockets_1.WebSocketGateway)({
|
|
143
|
+
cors: {
|
|
144
|
+
origin: '*',
|
|
145
|
+
},
|
|
146
|
+
}),
|
|
147
|
+
__metadata("design:paramtypes", [auth_service_1.AuthService,
|
|
148
|
+
context_service_1.ContextService])
|
|
149
|
+
], WebsocketGatewayService);
|
|
150
|
+
//# sourceMappingURL=gateway.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway.service.js","sourceRoot":"","sources":["../../../src/core/websocket/gateway.service.ts"],"names":[],"mappings":"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"}
|