@messenger-box/platform-server 10.0.3-alpha.202 → 10.0.3-alpha.209
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/lib/containers/containers.js +3 -1
- package/lib/containers/containers.js.map +1 -1
- package/lib/graphql/resolvers/streaming.js +1 -1
- package/lib/graphql/resolvers/streaming.js.map +1 -1
- package/lib/graphql/schema/gateway.graphql +2 -2
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/streaming/index.d.ts +2 -1
- package/lib/streaming/redis-stream-store.d.ts +43 -0
- package/lib/streaming/redis-stream-store.js +138 -0
- package/lib/streaming/redis-stream-store.js.map +1 -0
- package/lib/streaming/stream-service.d.ts +12 -3
- package/lib/streaming/stream-service.js +131 -104
- package/lib/streaming/stream-service.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {ContainerModule}from'inversify';import {ChannelService}from'../services/channel-service.js';import {PostService}from'../services/post-service.js';import {PostThreadService}from'../services/post-thread-service.js';import {ReactionService}from'../services/reaction-service.js';import {MessengerNotificationService}from'../services/messenger-notification-service.js';import {ExtendedTokenAccountService}from'../services/extended-token-account-service.js';import {SERVER_TYPES}from'common/server';import {MessengerStreamService}from'../streaming/stream-service.js';import {ChannelRepository}from'../store/repositories/channel-repository.js';import {PostRepository}from'../store/repositories/post-repository.js';import {PostThreadRepository}from'../store/repositories/post-thread-repository.js';import {ReactionRepository}from'../store/repositories/reaction-repository.js';import {MessageNotificationTemplateMigration}from'../migrations/message-notification-template-migration.js';import'../migrations/mail-template-migration.js';import {AddPostsConfigurationsMigration}from'../migrations/dbMigrations/AddPostsConfigurationsMigration.js';import {AddChannelConfigurationsMigration}from'../migrations/dbMigrations/AddChannelConfigurationsMigration.js';import {AddChatConfigurationsMigration}from'../migrations/dbMigrations/AddChatConfigurationsMigration.js';import {ChannelProxyService}from'../services/proxy-services/ChannelProxyService.js';import {ExtendedTokenAccountProxyService}from'../services/proxy-services/ExtendedTokenAccountProxyService.js';import {PostProxyService}from'../services/proxy-services/PostProxyService.js';import {PostThreadProxyService}from'../services/proxy-services/PostThreadProxyService.js';import {ReactionProxyService}from'../services/proxy-services/ReactionProxyService.js';import {MessengerNotificationProxyService}from'../services/proxy-services/MessengerNotificationProxyService.js';/**
|
|
1
|
+
import {ContainerModule}from'inversify';import {ChannelService}from'../services/channel-service.js';import {PostService}from'../services/post-service.js';import {PostThreadService}from'../services/post-thread-service.js';import {ReactionService}from'../services/reaction-service.js';import {MessengerNotificationService}from'../services/messenger-notification-service.js';import {ExtendedTokenAccountService}from'../services/extended-token-account-service.js';import {SERVER_TYPES}from'common/server';import {RedisStreamStoreType,MessengerStreamService}from'../streaming/stream-service.js';import {RedisStreamStore}from'../streaming/redis-stream-store.js';import {ChannelRepository}from'../store/repositories/channel-repository.js';import {PostRepository}from'../store/repositories/post-repository.js';import {PostThreadRepository}from'../store/repositories/post-thread-repository.js';import {ReactionRepository}from'../store/repositories/reaction-repository.js';import {MessageNotificationTemplateMigration}from'../migrations/message-notification-template-migration.js';import'../migrations/mail-template-migration.js';import {AddPostsConfigurationsMigration}from'../migrations/dbMigrations/AddPostsConfigurationsMigration.js';import {AddChannelConfigurationsMigration}from'../migrations/dbMigrations/AddChannelConfigurationsMigration.js';import {AddChatConfigurationsMigration}from'../migrations/dbMigrations/AddChatConfigurationsMigration.js';import {ChannelProxyService}from'../services/proxy-services/ChannelProxyService.js';import {ExtendedTokenAccountProxyService}from'../services/proxy-services/ExtendedTokenAccountProxyService.js';import {PostProxyService}from'../services/proxy-services/PostProxyService.js';import {PostThreadProxyService}from'../services/proxy-services/PostThreadProxyService.js';import {ReactionProxyService}from'../services/proxy-services/ReactionProxyService.js';import {MessengerNotificationProxyService}from'../services/proxy-services/MessengerNotificationProxyService.js';/**
|
|
2
2
|
* Local services and exposed microservices to serve remote connections.
|
|
3
3
|
* Operates within in the Gateway.
|
|
4
4
|
*
|
|
@@ -16,6 +16,7 @@ const proxyServiceContainerModule = settings => new ContainerModule(bind => {
|
|
|
16
16
|
bind(SERVER_TYPES.PostThreadService).to(PostThreadProxyService).inSingletonScope().whenTargetIsDefault();
|
|
17
17
|
bind(SERVER_TYPES.ReactionService).to(ReactionProxyService).inSingletonScope().whenTargetIsDefault();
|
|
18
18
|
bind(SERVER_TYPES.MessengerNotificationService).to(MessengerNotificationProxyService).inSingletonScope();
|
|
19
|
+
bind(RedisStreamStoreType).to(RedisStreamStore).inSingletonScope();
|
|
19
20
|
bind(SERVER_TYPES.MessengerStreamService).to(MessengerStreamService).inSingletonScope().whenTargetIsDefault();
|
|
20
21
|
});
|
|
21
22
|
/**
|
|
@@ -35,5 +36,6 @@ const serviceContainerModule = settings => new ContainerModule(bind => {
|
|
|
35
36
|
bind(SERVER_TYPES.PostThreadService).to(PostThreadService).inSingletonScope().whenTargetIsDefault();
|
|
36
37
|
bind(SERVER_TYPES.ReactionService).to(ReactionService).inSingletonScope().whenTargetIsDefault();
|
|
37
38
|
bind(SERVER_TYPES.MessengerNotificationService).to(MessengerNotificationService).inSingletonScope().whenTargetIsDefault();
|
|
39
|
+
bind(RedisStreamStoreType).to(RedisStreamStore).inSingletonScope();
|
|
38
40
|
bind(SERVER_TYPES.MessengerStreamService).to(MessengerStreamService).inSingletonScope().whenTargetIsDefault();
|
|
39
41
|
});export{proxyServiceContainerModule,serviceContainerModule};//# sourceMappingURL=containers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"containers.js","sources":["../../src/containers/containers.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"containers.js","sources":["../../src/containers/containers.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {v4}from'uuid';import {streamBlockTopic,streamStatusTopic,streamDeltaTopic}from'../../streaming/types.js';import'../../streaming/stream-service.js';const streamingResolvers = options => ({
|
|
1
|
+
import {v4}from'uuid';import {streamBlockTopic,streamStatusTopic,streamDeltaTopic}from'../../streaming/types.js';import'../../streaming/stream-service.js';import'../../streaming/redis-stream-store.js';const streamingResolvers = options => ({
|
|
2
2
|
Query: {
|
|
3
3
|
messengerStreamState: (_, args, context) => {
|
|
4
4
|
options.logger.trace('(Query.messengerStreamState) runId [%s]', args.runId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streaming.js","sources":["../../../src/graphql/resolvers/streaming.ts"],"sourcesContent":[null],"names":["uuidv4"],"mappings":"
|
|
1
|
+
{"version":3,"file":"streaming.js","sources":["../../../src/graphql/resolvers/streaming.ts"],"sourcesContent":[null],"names":["uuidv4"],"mappings":"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"}
|
|
@@ -307,12 +307,12 @@ extend type Query {
|
|
|
307
307
|
"""
|
|
308
308
|
List all registered channel providers
|
|
309
309
|
"""
|
|
310
|
-
|
|
310
|
+
messageGatewayProvider: [GatewayChannelProvider!]!
|
|
311
311
|
|
|
312
312
|
"""
|
|
313
313
|
Get status for all connected channels/accounts
|
|
314
314
|
"""
|
|
315
|
-
|
|
315
|
+
messageGatewayStatus: [GatewayChannelStatus!]!
|
|
316
316
|
|
|
317
317
|
"""
|
|
318
318
|
Get status for a specific channel type
|
package/lib/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {Feature}from'@common-stack/server-core';import MessengerModule from'./module.js';export{DEFAULT_SORTING,PAGINATION_OPTIONS}from'./constants/query.constants.js';export{DEFAULT_NOTIFY_PROPS}from'./constants/default-notify-props.js';export{DEFAULT_CHANNEL_PROPS,DEFAULT_CHANNEL_SETTINGS}from'./constants/default-channel-props.js';export{PostTypes}from'./preferences/settings/post-settings.js';import'./preferences/settings/channel-settings.js';import'./preferences/settings/messenger-channels-contribution.js';import'./preferences/settings/chat-settings.js';import'./preferences/permissions/inbox-permission-contribution.js';import'./preferences/permissions/inbox-roles-permission-overwrite.js';import'./migrations/message-notification-template-migration.js';export{MailTemplateMigration}from'./migrations/mail-template-migration.js';import'./migrations/dbMigrations/AddPostsConfigurationsMigration.js';import'./migrations/dbMigrations/AddChannelConfigurationsMigration.js';import'./migrations/dbMigrations/AddChatConfigurationsMigration.js';export{buildMessagingTarget,normalizeChatType,normalizeTargetId}from'./channels/types.js';export{CHANNEL_TYPE_ALIASES,CHANNEL_TYPE_ORDER,DEFAULT_CHANNEL_TYPE,getChannelCapabilities,getChannelDock,getChannelTypeMeta,listChannelDocks,listChannelTypes,normalizeChannelTypeId}from'./channels/registry.js';export{DEFAULT_TYPING_PROPS,TYPING_SUBSCRIPTION_TOPIC,createTypingCallbacks}from'./channels/typing.js';export{DEFAULT_ACK_REACTION_PROPS,removeAckReactionAfterReply,shouldAckReaction}from'./channels/ack-reactions.js';export{resolveConversationLabel}from'./channels/conversation-label.js';export{validateSenderIdentity}from'./channels/sender-identity.js';export{DEFAULT_COMMAND_GATING_PROPS,resolveCommandAuthorized,resolveControlCommandGate}from'./channels/command-gating.js';export{DEFAULT_ALLOWLIST_PROPS,formatAllowlistMatchMeta,resolveAllowlistMatch}from'./channels/allowlist-match.js';export{DEFAULT_MENTION_GATING_PROPS,shouldProcessMessage,stripMentionsFromText,wasMentioned}from'./channels/mention-gating.js';export{DEFAULT_SESSION_PROPS,generateGroupSessionKey,generateSessionKey}from'./channels/session.js';export{DEFAULT_CHANNEL_CONFIG_PROPS,applyChannelMatchMeta,buildChannelKeyCandidates,normalizeChannelSlug,resolveChannelEntryMatch}from'./channels/channel-config.js';export{BlockChunker}from'./streaming/block-chunker.js';export{MessengerStreamService}from'./streaming/stream-service.js';export{DEFAULT_COALESCE_CONFIG,STREAM_BLOCK_TOPIC,STREAM_DELTA_TOPIC,STREAM_STATUS_TOPIC,streamBlockTopic,streamDeltaTopic,streamStatusTopic}from'./streaming/types.js';export{MessengerStreamStatus}from'common/server';/* eslint-disable import/no-extraneous-dependencies */
|
|
1
|
+
import {Feature}from'@common-stack/server-core';import MessengerModule from'./module.js';export{DEFAULT_SORTING,PAGINATION_OPTIONS}from'./constants/query.constants.js';export{DEFAULT_NOTIFY_PROPS}from'./constants/default-notify-props.js';export{DEFAULT_CHANNEL_PROPS,DEFAULT_CHANNEL_SETTINGS}from'./constants/default-channel-props.js';export{PostTypes}from'./preferences/settings/post-settings.js';import'./preferences/settings/channel-settings.js';import'./preferences/settings/messenger-channels-contribution.js';import'./preferences/settings/chat-settings.js';import'./preferences/permissions/inbox-permission-contribution.js';import'./preferences/permissions/inbox-roles-permission-overwrite.js';import'./migrations/message-notification-template-migration.js';export{MailTemplateMigration}from'./migrations/mail-template-migration.js';import'./migrations/dbMigrations/AddPostsConfigurationsMigration.js';import'./migrations/dbMigrations/AddChannelConfigurationsMigration.js';import'./migrations/dbMigrations/AddChatConfigurationsMigration.js';export{buildMessagingTarget,normalizeChatType,normalizeTargetId}from'./channels/types.js';export{CHANNEL_TYPE_ALIASES,CHANNEL_TYPE_ORDER,DEFAULT_CHANNEL_TYPE,getChannelCapabilities,getChannelDock,getChannelTypeMeta,listChannelDocks,listChannelTypes,normalizeChannelTypeId}from'./channels/registry.js';export{DEFAULT_TYPING_PROPS,TYPING_SUBSCRIPTION_TOPIC,createTypingCallbacks}from'./channels/typing.js';export{DEFAULT_ACK_REACTION_PROPS,removeAckReactionAfterReply,shouldAckReaction}from'./channels/ack-reactions.js';export{resolveConversationLabel}from'./channels/conversation-label.js';export{validateSenderIdentity}from'./channels/sender-identity.js';export{DEFAULT_COMMAND_GATING_PROPS,resolveCommandAuthorized,resolveControlCommandGate}from'./channels/command-gating.js';export{DEFAULT_ALLOWLIST_PROPS,formatAllowlistMatchMeta,resolveAllowlistMatch}from'./channels/allowlist-match.js';export{DEFAULT_MENTION_GATING_PROPS,shouldProcessMessage,stripMentionsFromText,wasMentioned}from'./channels/mention-gating.js';export{DEFAULT_SESSION_PROPS,generateGroupSessionKey,generateSessionKey}from'./channels/session.js';export{DEFAULT_CHANNEL_CONFIG_PROPS,applyChannelMatchMeta,buildChannelKeyCandidates,normalizeChannelSlug,resolveChannelEntryMatch}from'./channels/channel-config.js';export{BlockChunker}from'./streaming/block-chunker.js';export{MessengerStreamService,RedisStreamStoreType}from'./streaming/stream-service.js';export{RedisStreamStore}from'./streaming/redis-stream-store.js';export{DEFAULT_COALESCE_CONFIG,STREAM_BLOCK_TOPIC,STREAM_DELTA_TOPIC,STREAM_STATUS_TOPIC,streamBlockTopic,streamDeltaTopic,streamStatusTopic}from'./streaming/types.js';export{MessengerStreamStatus}from'common/server';/* eslint-disable import/no-extraneous-dependencies */
|
|
2
2
|
var index = new Feature(MessengerModule);export{index as default};//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":[null],"names":[],"mappings":"isFAAA;AAIA,YAAe,IAAI,OAAO,CAAC,eAAe,CAAC"}
|
package/lib/streaming/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { BlockChunker, type IBlockChunkerCallbacks } from './block-chunker';
|
|
2
|
-
export { MessengerStreamService, type IStreamCompleteEvent, type StreamCompleteHandler } from './stream-service';
|
|
2
|
+
export { MessengerStreamService, RedisStreamStoreType, type IStreamCompleteEvent, type StreamCompleteHandler, } from './stream-service';
|
|
3
|
+
export { RedisStreamStore, type IRedisStreamStore } from './redis-stream-store';
|
|
3
4
|
export { type IBlockCoalesceConfig, type StreamStatus, MessengerStreamStatus, STREAM_DELTA_TOPIC, STREAM_STATUS_TOPIC, STREAM_BLOCK_TOPIC, streamDeltaTopic, streamStatusTopic, streamBlockTopic, DEFAULT_COALESCE_CONFIG, } from './types';
|
|
4
5
|
export type { IMessengerStreamDelta, IMessengerStreamStatusEvent, IMessengerStreamBlock, IMessengerStartStreamInput, IMessengerStreamStartResult, } from 'common/server';
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { MessengerStreamStatus } from 'common/server';
|
|
2
|
+
import type { IStreamState } from 'common/server';
|
|
3
|
+
import type { CdmLogger } from '@cdm-logger/core';
|
|
4
|
+
export interface IRedisStreamStore {
|
|
5
|
+
/** Create a new stream entry with TTL. */
|
|
6
|
+
create(state: IStreamState): Promise<void>;
|
|
7
|
+
/** Get the full stream state. Returns null if not found or expired. */
|
|
8
|
+
get(runId: string): Promise<IStreamState | null>;
|
|
9
|
+
/** Append delta text, increment seq, refresh TTL. */
|
|
10
|
+
appendDelta(runId: string, delta: string): Promise<{
|
|
11
|
+
seq: number;
|
|
12
|
+
text: string;
|
|
13
|
+
} | null>;
|
|
14
|
+
/** Update the stream status. */
|
|
15
|
+
setStatus(runId: string, status: MessengerStreamStatus): Promise<void>;
|
|
16
|
+
/** Get and delete — atomically read final state and remove the key. */
|
|
17
|
+
getAndDelete(runId: string): Promise<IStreamState | null>;
|
|
18
|
+
/** Delete a stream entry. */
|
|
19
|
+
delete(runId: string): Promise<void>;
|
|
20
|
+
/** Check if a stream exists. */
|
|
21
|
+
exists(runId: string): Promise<boolean>;
|
|
22
|
+
}
|
|
23
|
+
export declare class RedisStreamStore implements IRedisStreamStore {
|
|
24
|
+
private redis;
|
|
25
|
+
private logger;
|
|
26
|
+
private ttl;
|
|
27
|
+
private appendDeltaSha;
|
|
28
|
+
private getAndDeleteSha;
|
|
29
|
+
constructor(redis: any, logger?: CdmLogger.ILogger);
|
|
30
|
+
create(state: IStreamState): Promise<void>;
|
|
31
|
+
get(runId: string): Promise<IStreamState | null>;
|
|
32
|
+
appendDelta(runId: string, delta: string): Promise<{
|
|
33
|
+
seq: number;
|
|
34
|
+
text: string;
|
|
35
|
+
} | null>;
|
|
36
|
+
setStatus(runId: string, status: MessengerStreamStatus): Promise<void>;
|
|
37
|
+
getAndDelete(runId: string): Promise<IStreamState | null>;
|
|
38
|
+
delete(runId: string): Promise<void>;
|
|
39
|
+
exists(runId: string): Promise<boolean>;
|
|
40
|
+
private key;
|
|
41
|
+
private toStreamState;
|
|
42
|
+
private ensureScript;
|
|
43
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import {__decorate,__param,__metadata}from'tslib';import {injectable,inject,optional}from'inversify';import {SERVER_TYPES}from'common/server';// ---------------------------------------------------------------------------
|
|
2
|
+
// Constants
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
/** Redis key prefix for stream hashes. */
|
|
5
|
+
const KEY_PREFIX = 'mstream:';
|
|
6
|
+
/** Default TTL in seconds — auto-cleanup for abandoned streams. */
|
|
7
|
+
const DEFAULT_TTL_SECONDS = 300; // 5 minutes
|
|
8
|
+
/**
|
|
9
|
+
* Lua script: atomically append delta, increment seq, refresh TTL.
|
|
10
|
+
* Returns [newSeq, fullText] or nil if key doesn't exist.
|
|
11
|
+
*/
|
|
12
|
+
const APPEND_DELTA_LUA = `
|
|
13
|
+
local key = KEYS[1]
|
|
14
|
+
if redis.call('EXISTS', key) == 0 then
|
|
15
|
+
return nil
|
|
16
|
+
end
|
|
17
|
+
local newSeq = redis.call('HINCRBY', key, 'seq', 1)
|
|
18
|
+
local newText = redis.call('HGET', key, 'text') or ''
|
|
19
|
+
newText = newText .. ARGV[1]
|
|
20
|
+
redis.call('HSET', key, 'text', newText, 'status', ARGV[2], 'updatedAt', ARGV[3])
|
|
21
|
+
redis.call('EXPIRE', key, ARGV[4])
|
|
22
|
+
return {newSeq, newText}
|
|
23
|
+
`;
|
|
24
|
+
/**
|
|
25
|
+
* Lua script: atomically get all fields and delete the key.
|
|
26
|
+
* Returns hash fields or nil.
|
|
27
|
+
*/
|
|
28
|
+
const GET_AND_DELETE_LUA = `
|
|
29
|
+
local key = KEYS[1]
|
|
30
|
+
local data = redis.call('HGETALL', key)
|
|
31
|
+
if #data == 0 then
|
|
32
|
+
return nil
|
|
33
|
+
end
|
|
34
|
+
redis.call('DEL', key)
|
|
35
|
+
return data
|
|
36
|
+
`;
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
// RedisStreamStore
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
let RedisStreamStore = class RedisStreamStore {
|
|
41
|
+
redis; // ioredis instance
|
|
42
|
+
logger;
|
|
43
|
+
ttl;
|
|
44
|
+
appendDeltaSha = null;
|
|
45
|
+
getAndDeleteSha = null;
|
|
46
|
+
constructor(redis, logger) {
|
|
47
|
+
this.redis = redis;
|
|
48
|
+
this.logger = logger ?? console;
|
|
49
|
+
this.ttl = DEFAULT_TTL_SECONDS;
|
|
50
|
+
}
|
|
51
|
+
async create(state) {
|
|
52
|
+
const key = this.key(state.runId);
|
|
53
|
+
const fields = {
|
|
54
|
+
runId: state.runId,
|
|
55
|
+
channelId: state.channelId,
|
|
56
|
+
threadId: state.threadId ?? '',
|
|
57
|
+
postId: state.postId ?? '',
|
|
58
|
+
seq: String(state.seq),
|
|
59
|
+
text: state.text,
|
|
60
|
+
status: state.status,
|
|
61
|
+
updatedAt: String(Date.now())
|
|
62
|
+
};
|
|
63
|
+
await this.redis.hmset(key, fields);
|
|
64
|
+
await this.redis.expire(key, this.ttl);
|
|
65
|
+
}
|
|
66
|
+
async get(runId) {
|
|
67
|
+
const key = this.key(runId);
|
|
68
|
+
const data = await this.redis.hgetall(key);
|
|
69
|
+
if (!data || !data.runId) return null;
|
|
70
|
+
return this.toStreamState(data);
|
|
71
|
+
}
|
|
72
|
+
async appendDelta(runId, delta) {
|
|
73
|
+
const sha = await this.ensureScript('appendDelta', APPEND_DELTA_LUA);
|
|
74
|
+
const key = this.key(runId);
|
|
75
|
+
const result = await this.redis.evalsha(sha, 1, key, delta, 'streaming', String(Date.now()), String(this.ttl));
|
|
76
|
+
if (!result) return null;
|
|
77
|
+
return {
|
|
78
|
+
seq: Number(result[0]),
|
|
79
|
+
text: result[1]
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
async setStatus(runId, status) {
|
|
83
|
+
const key = this.key(runId);
|
|
84
|
+
await this.redis.hset(key, 'status', status, 'updatedAt', String(Date.now()));
|
|
85
|
+
await this.redis.expire(key, this.ttl);
|
|
86
|
+
}
|
|
87
|
+
async getAndDelete(runId) {
|
|
88
|
+
const sha = await this.ensureScript('getAndDelete', GET_AND_DELETE_LUA);
|
|
89
|
+
const key = this.key(runId);
|
|
90
|
+
const result = await this.redis.evalsha(sha, 1, key);
|
|
91
|
+
if (!result) return null;
|
|
92
|
+
// HGETALL returns flat array: [field1, val1, field2, val2, ...]
|
|
93
|
+
const data = {};
|
|
94
|
+
for (let i = 0; i < result.length; i += 2) {
|
|
95
|
+
data[result[i]] = result[i + 1];
|
|
96
|
+
}
|
|
97
|
+
if (!data.runId) return null;
|
|
98
|
+
return this.toStreamState(data);
|
|
99
|
+
}
|
|
100
|
+
async delete(runId) {
|
|
101
|
+
await this.redis.del(this.key(runId));
|
|
102
|
+
}
|
|
103
|
+
async exists(runId) {
|
|
104
|
+
const result = await this.redis.exists(this.key(runId));
|
|
105
|
+
return result === 1;
|
|
106
|
+
}
|
|
107
|
+
// -----------------------------------------------------------------------
|
|
108
|
+
// Private helpers
|
|
109
|
+
// -----------------------------------------------------------------------
|
|
110
|
+
key(runId) {
|
|
111
|
+
return `${KEY_PREFIX}${runId}`;
|
|
112
|
+
}
|
|
113
|
+
toStreamState(data) {
|
|
114
|
+
return {
|
|
115
|
+
runId: data.runId,
|
|
116
|
+
channelId: data.channelId,
|
|
117
|
+
threadId: data.threadId || undefined,
|
|
118
|
+
postId: data.postId || undefined,
|
|
119
|
+
seq: Number(data.seq) || 0,
|
|
120
|
+
text: data.text || '',
|
|
121
|
+
status: data.status
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
async ensureScript(name, lua) {
|
|
125
|
+
if (name === 'appendDelta' && this.appendDeltaSha) return this.appendDeltaSha;
|
|
126
|
+
if (name === 'getAndDelete' && this.getAndDeleteSha) return this.getAndDeleteSha;
|
|
127
|
+
try {
|
|
128
|
+
const sha = await this.redis.script('LOAD', lua);
|
|
129
|
+
if (name === 'appendDelta') this.appendDeltaSha = sha;
|
|
130
|
+
if (name === 'getAndDelete') this.getAndDeleteSha = sha;
|
|
131
|
+
return sha;
|
|
132
|
+
} catch (err) {
|
|
133
|
+
this.logger.error?.('Failed to load Lua script %s: %o', name, err);
|
|
134
|
+
throw err;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
RedisStreamStore = __decorate([injectable(), __param(0, inject(SERVER_TYPES.RedisClient)), __param(1, inject('Logger')), __param(1, optional()), __metadata("design:paramtypes", [Object, Object])], RedisStreamStore);export{RedisStreamStore};//# sourceMappingURL=redis-stream-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis-stream-store.js","sources":["../../src/streaming/redis-stream-store.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { CdmLogger } from '@cdm-logger/core';
|
|
2
2
|
import type { IMessengerStreamService, IStartStreamParams, IStreamState } from 'common/server';
|
|
3
|
+
import type { IRedisStreamStore } from './redis-stream-store';
|
|
3
4
|
/**
|
|
4
5
|
* Callback invoked when a stream completes successfully (endStream).
|
|
5
6
|
* This enables PostService (or any consumer) to create/update a Post
|
|
@@ -15,12 +16,17 @@ export interface IStreamCompleteEvent {
|
|
|
15
16
|
text: string;
|
|
16
17
|
}
|
|
17
18
|
export type StreamCompleteHandler = (event: IStreamCompleteEvent) => Promise<void>;
|
|
19
|
+
/** DI symbol for RedisStreamStore injection. */
|
|
20
|
+
export declare const RedisStreamStoreType: unique symbol;
|
|
18
21
|
export declare class MessengerStreamService implements IMessengerStreamService {
|
|
19
|
-
|
|
22
|
+
/** Ephemeral state: timers, chunkers — local to this process only. */
|
|
23
|
+
private ephemeral;
|
|
24
|
+
/** Redis-backed persistent stream state store. */
|
|
25
|
+
private store;
|
|
20
26
|
private pubsub;
|
|
21
27
|
private logger;
|
|
22
28
|
private onStreamCompleteHandlers;
|
|
23
|
-
constructor(logger?: CdmLogger.ILogger);
|
|
29
|
+
constructor(store: IRedisStreamStore, logger?: CdmLogger.ILogger);
|
|
24
30
|
/**
|
|
25
31
|
* Register a handler called when a stream completes.
|
|
26
32
|
* Used by PostService to finalize streamed content into a Post record.
|
|
@@ -55,15 +61,18 @@ export declare class MessengerStreamService implements IMessengerStreamService {
|
|
|
55
61
|
errorStream(runId: string, error: string): Promise<void>;
|
|
56
62
|
/**
|
|
57
63
|
* Get the current state of an active stream (for query resolvers).
|
|
64
|
+
* Reads from Redis — works across instances.
|
|
58
65
|
*/
|
|
59
66
|
getStreamState(runId: string): IStreamState | undefined;
|
|
67
|
+
/** Full Redis-backed stream state read — works across instances. */
|
|
68
|
+
getStreamStateAsync(runId: string): Promise<IStreamState | null>;
|
|
60
69
|
private fireStreamComplete;
|
|
61
70
|
private publishDelta;
|
|
62
71
|
private publishStatus;
|
|
63
72
|
private publishBlock;
|
|
64
73
|
private throttledPublishDelta;
|
|
65
74
|
private flushThrottledDelta;
|
|
66
|
-
private
|
|
75
|
+
private cleanupEphemeral;
|
|
67
76
|
/**
|
|
68
77
|
* Dispose / cleanup all active streams.
|
|
69
78
|
*/
|
|
@@ -1,11 +1,17 @@
|
|
|
1
|
-
import {__decorate,__param,__metadata}from'tslib';import {injectable,inject}from'inversify';import {MessengerStreamStatus}from'common/server';import {BlockChunker}from'./block-chunker.js';import {DEFAULT_COALESCE_CONFIG,streamDeltaTopic,streamStatusTopic,streamBlockTopic}from'./types.js';/** Delta coalesce interval in ms (matches openclaw's 150ms throttle) */
|
|
1
|
+
import {__decorate,__param,__metadata}from'tslib';import {injectable,inject,optional}from'inversify';import {MessengerStreamStatus}from'common/server';import {BlockChunker}from'./block-chunker.js';import {DEFAULT_COALESCE_CONFIG,streamDeltaTopic,streamStatusTopic,streamBlockTopic}from'./types.js';/** Delta coalesce interval in ms (matches openclaw's 150ms throttle) */
|
|
2
2
|
const DELTA_THROTTLE_MS = 150;
|
|
3
|
+
/** DI symbol for RedisStreamStore injection. */
|
|
4
|
+
const RedisStreamStoreType = Symbol.for('RedisStreamStore');
|
|
3
5
|
let MessengerStreamService = class MessengerStreamService {
|
|
4
|
-
|
|
6
|
+
/** Ephemeral state: timers, chunkers — local to this process only. */
|
|
7
|
+
ephemeral = new Map();
|
|
8
|
+
/** Redis-backed persistent stream state store. */
|
|
9
|
+
store;
|
|
5
10
|
pubsub = null;
|
|
6
11
|
logger;
|
|
7
12
|
onStreamCompleteHandlers = [];
|
|
8
|
-
constructor(logger) {
|
|
13
|
+
constructor(store, logger) {
|
|
14
|
+
this.store = store;
|
|
9
15
|
this.logger = logger?.child({
|
|
10
16
|
className: 'MessengerStreamService'
|
|
11
17
|
}) || console;
|
|
@@ -37,7 +43,8 @@ let MessengerStreamService = class MessengerStreamService {
|
|
|
37
43
|
coalesceConfig
|
|
38
44
|
} = params;
|
|
39
45
|
this.logger.trace('startStream runId=%s channelId=%s', runId, channelId);
|
|
40
|
-
|
|
46
|
+
// Persist authoritative state to Redis
|
|
47
|
+
await this.store.create({
|
|
41
48
|
runId,
|
|
42
49
|
channelId,
|
|
43
50
|
threadId,
|
|
@@ -45,10 +52,16 @@ let MessengerStreamService = class MessengerStreamService {
|
|
|
45
52
|
seq: 0,
|
|
46
53
|
text: '',
|
|
47
54
|
status: MessengerStreamStatus.Starting
|
|
55
|
+
});
|
|
56
|
+
// Ephemeral local state: chunker + throttle timer
|
|
57
|
+
const eph = {
|
|
58
|
+
runId,
|
|
59
|
+
channelId,
|
|
60
|
+
threadId,
|
|
61
|
+
postId
|
|
48
62
|
};
|
|
49
|
-
// Set up block chunker if needed
|
|
50
63
|
if (enableBlockChunking) {
|
|
51
|
-
|
|
64
|
+
eph.chunker = new BlockChunker({
|
|
52
65
|
onBlock: (block, blockSeq, isFinal) => {
|
|
53
66
|
this.publishBlock({
|
|
54
67
|
runId,
|
|
@@ -64,7 +77,7 @@ let MessengerStreamService = class MessengerStreamService {
|
|
|
64
77
|
...coalesceConfig
|
|
65
78
|
});
|
|
66
79
|
}
|
|
67
|
-
this.
|
|
80
|
+
this.ephemeral.set(runId, eph);
|
|
68
81
|
await this.publishStatus({
|
|
69
82
|
runId,
|
|
70
83
|
channelId,
|
|
@@ -79,147 +92,161 @@ let MessengerStreamService = class MessengerStreamService {
|
|
|
79
92
|
* openclaw equivalent: handleAssistantTextStream → emitAgentEvent
|
|
80
93
|
*/
|
|
81
94
|
async pushDelta(runId, delta) {
|
|
82
|
-
const
|
|
83
|
-
if (!
|
|
95
|
+
const eph = this.ephemeral.get(runId);
|
|
96
|
+
if (!eph) {
|
|
84
97
|
this.logger.error('pushDelta: no active stream for runId=%s', runId);
|
|
85
98
|
return;
|
|
86
99
|
}
|
|
87
|
-
//
|
|
88
|
-
|
|
89
|
-
|
|
100
|
+
// Atomically append delta to Redis and get back updated seq + full text
|
|
101
|
+
const result = await this.store.appendDelta(runId, delta);
|
|
102
|
+
if (!result) {
|
|
103
|
+
this.logger.error('pushDelta: Redis stream not found for runId=%s', runId);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
// Publish status change on first delta (seq was 0 before, now 1)
|
|
107
|
+
if (result.seq === 1) {
|
|
90
108
|
await this.publishStatus({
|
|
91
109
|
runId,
|
|
92
|
-
channelId:
|
|
93
|
-
threadId:
|
|
94
|
-
postId:
|
|
110
|
+
channelId: eph.channelId,
|
|
111
|
+
threadId: eph.threadId,
|
|
112
|
+
postId: eph.postId,
|
|
95
113
|
status: MessengerStreamStatus.Streaming
|
|
96
114
|
});
|
|
97
115
|
}
|
|
98
|
-
// Accumulate text and increment seq
|
|
99
|
-
stream.seq += 1;
|
|
100
|
-
stream.text += delta;
|
|
101
116
|
const event = {
|
|
102
117
|
runId,
|
|
103
|
-
seq:
|
|
104
|
-
channelId:
|
|
105
|
-
threadId:
|
|
106
|
-
postId:
|
|
118
|
+
seq: result.seq,
|
|
119
|
+
channelId: eph.channelId,
|
|
120
|
+
threadId: eph.threadId,
|
|
121
|
+
postId: eph.postId,
|
|
107
122
|
delta,
|
|
108
|
-
text:
|
|
123
|
+
text: result.text,
|
|
109
124
|
isFinal: false,
|
|
110
125
|
timestamp: Date.now()
|
|
111
126
|
};
|
|
112
127
|
// Feed the block chunker
|
|
113
|
-
if (
|
|
114
|
-
|
|
128
|
+
if (eph.chunker) {
|
|
129
|
+
eph.chunker.push(delta);
|
|
115
130
|
}
|
|
116
131
|
// Throttled delta publishing (150ms coalesce like openclaw)
|
|
117
|
-
this.throttledPublishDelta(
|
|
132
|
+
this.throttledPublishDelta(eph, event);
|
|
118
133
|
}
|
|
119
134
|
/**
|
|
120
135
|
* End a stream successfully. Flushes any pending data.
|
|
121
136
|
*/
|
|
122
137
|
async endStream(runId) {
|
|
123
|
-
const
|
|
124
|
-
if (!
|
|
125
|
-
|
|
138
|
+
const eph = this.ephemeral.get(runId);
|
|
139
|
+
if (!eph) return;
|
|
140
|
+
// Atomically read final state from Redis and delete
|
|
141
|
+
const finalState = await this.store.getAndDelete(runId);
|
|
142
|
+
if (!finalState) {
|
|
143
|
+
this.cleanupEphemeral(runId);
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
this.logger.trace('endStream runId=%s, totalChars=%d', runId, finalState.text.length);
|
|
126
147
|
// Flush throttled delta
|
|
127
|
-
this.flushThrottledDelta(
|
|
148
|
+
this.flushThrottledDelta(eph);
|
|
128
149
|
// End chunker
|
|
129
|
-
if (
|
|
130
|
-
|
|
150
|
+
if (eph.chunker) {
|
|
151
|
+
eph.chunker.end();
|
|
131
152
|
}
|
|
132
|
-
// Emit final delta
|
|
133
|
-
stream.seq += 1;
|
|
153
|
+
// Emit final delta with accumulated text from Redis
|
|
134
154
|
const finalDelta = {
|
|
135
155
|
runId,
|
|
136
|
-
seq:
|
|
137
|
-
channelId:
|
|
138
|
-
threadId:
|
|
139
|
-
postId:
|
|
156
|
+
seq: finalState.seq + 1,
|
|
157
|
+
channelId: eph.channelId,
|
|
158
|
+
threadId: eph.threadId,
|
|
159
|
+
postId: eph.postId,
|
|
140
160
|
delta: '',
|
|
141
|
-
text:
|
|
161
|
+
text: finalState.text,
|
|
142
162
|
isFinal: true,
|
|
143
163
|
timestamp: Date.now()
|
|
144
164
|
};
|
|
145
165
|
await this.publishDelta(finalDelta);
|
|
146
166
|
// Status → completed
|
|
147
|
-
stream.status = MessengerStreamStatus.Completed;
|
|
148
167
|
await this.publishStatus({
|
|
149
168
|
runId,
|
|
150
|
-
channelId:
|
|
151
|
-
threadId:
|
|
152
|
-
postId:
|
|
169
|
+
channelId: eph.channelId,
|
|
170
|
+
threadId: eph.threadId,
|
|
171
|
+
postId: eph.postId,
|
|
153
172
|
status: MessengerStreamStatus.Completed
|
|
154
173
|
});
|
|
155
174
|
// Notify handlers (PostService, analytics, etc.) about stream completion.
|
|
156
|
-
// This is the bridge between ephemeral streaming and persistent post storage.
|
|
157
175
|
await this.fireStreamComplete({
|
|
158
176
|
runId,
|
|
159
|
-
channelId:
|
|
160
|
-
threadId:
|
|
161
|
-
postId:
|
|
162
|
-
text:
|
|
177
|
+
channelId: finalState.channelId,
|
|
178
|
+
threadId: finalState.threadId,
|
|
179
|
+
postId: finalState.postId,
|
|
180
|
+
text: finalState.text
|
|
163
181
|
});
|
|
164
|
-
this.
|
|
182
|
+
this.cleanupEphemeral(runId);
|
|
165
183
|
}
|
|
166
184
|
/**
|
|
167
185
|
* Cancel a stream. Discards pending data.
|
|
168
186
|
*/
|
|
169
187
|
async cancelStream(runId) {
|
|
170
|
-
const
|
|
171
|
-
if (!
|
|
188
|
+
const eph = this.ephemeral.get(runId);
|
|
189
|
+
if (!eph) return;
|
|
172
190
|
this.logger.trace('cancelStream runId=%s', runId);
|
|
173
|
-
if (
|
|
174
|
-
|
|
191
|
+
if (eph.chunker) {
|
|
192
|
+
eph.chunker.cancel();
|
|
175
193
|
}
|
|
176
|
-
|
|
194
|
+
await this.store.delete(runId);
|
|
177
195
|
await this.publishStatus({
|
|
178
196
|
runId,
|
|
179
|
-
channelId:
|
|
180
|
-
threadId:
|
|
181
|
-
postId:
|
|
197
|
+
channelId: eph.channelId,
|
|
198
|
+
threadId: eph.threadId,
|
|
199
|
+
postId: eph.postId,
|
|
182
200
|
status: MessengerStreamStatus.Cancelled
|
|
183
201
|
});
|
|
184
|
-
this.
|
|
202
|
+
this.cleanupEphemeral(runId);
|
|
185
203
|
}
|
|
186
204
|
/**
|
|
187
205
|
* Error a stream.
|
|
188
206
|
*/
|
|
189
207
|
async errorStream(runId, error) {
|
|
190
|
-
const
|
|
191
|
-
if (!
|
|
208
|
+
const eph = this.ephemeral.get(runId);
|
|
209
|
+
if (!eph) return;
|
|
192
210
|
this.logger.trace('errorStream runId=%s error=%s', runId, error);
|
|
193
|
-
if (
|
|
194
|
-
|
|
211
|
+
if (eph.chunker) {
|
|
212
|
+
eph.chunker.cancel();
|
|
195
213
|
}
|
|
196
|
-
|
|
214
|
+
await this.store.delete(runId);
|
|
197
215
|
await this.publishStatus({
|
|
198
216
|
runId,
|
|
199
|
-
channelId:
|
|
200
|
-
threadId:
|
|
201
|
-
postId:
|
|
217
|
+
channelId: eph.channelId,
|
|
218
|
+
threadId: eph.threadId,
|
|
219
|
+
postId: eph.postId,
|
|
202
220
|
status: MessengerStreamStatus.Error,
|
|
203
221
|
error
|
|
204
222
|
});
|
|
205
|
-
this.
|
|
223
|
+
this.cleanupEphemeral(runId);
|
|
206
224
|
}
|
|
207
225
|
/**
|
|
208
226
|
* Get the current state of an active stream (for query resolvers).
|
|
227
|
+
* Reads from Redis — works across instances.
|
|
209
228
|
*/
|
|
210
229
|
getStreamState(runId) {
|
|
211
|
-
|
|
212
|
-
|
|
230
|
+
// Note: this is now async-capable via Redis. For backward compatibility
|
|
231
|
+
// with the sync interface, we return undefined if not in local ephemeral map
|
|
232
|
+
// and provide getStreamStateAsync for full Redis-backed reads.
|
|
233
|
+
const eph = this.ephemeral.get(runId);
|
|
234
|
+
if (!eph) return undefined;
|
|
235
|
+
// Return a minimal state from ephemeral; full state requires async Redis read
|
|
213
236
|
return {
|
|
214
|
-
runId:
|
|
215
|
-
channelId:
|
|
216
|
-
threadId:
|
|
217
|
-
postId:
|
|
218
|
-
seq:
|
|
219
|
-
text:
|
|
220
|
-
status:
|
|
237
|
+
runId: eph.runId,
|
|
238
|
+
channelId: eph.channelId,
|
|
239
|
+
threadId: eph.threadId,
|
|
240
|
+
postId: eph.postId,
|
|
241
|
+
seq: 0,
|
|
242
|
+
text: '',
|
|
243
|
+
status: MessengerStreamStatus.Streaming
|
|
221
244
|
};
|
|
222
245
|
}
|
|
246
|
+
/** Full Redis-backed stream state read — works across instances. */
|
|
247
|
+
async getStreamStateAsync(runId) {
|
|
248
|
+
return this.store.get(runId);
|
|
249
|
+
}
|
|
223
250
|
// -----------------------------------------------------------------------
|
|
224
251
|
// Private: PubSub publishing
|
|
225
252
|
// -----------------------------------------------------------------------
|
|
@@ -273,53 +300,53 @@ let MessengerStreamService = class MessengerStreamService {
|
|
|
273
300
|
// -----------------------------------------------------------------------
|
|
274
301
|
// Private: Delta throttling (150ms coalesce like openclaw)
|
|
275
302
|
// -----------------------------------------------------------------------
|
|
276
|
-
throttledPublishDelta(
|
|
303
|
+
throttledPublishDelta(eph, event) {
|
|
277
304
|
// Always keep the latest event as pending
|
|
278
|
-
|
|
305
|
+
eph.pendingDelta = event;
|
|
279
306
|
// If no timer running, start one and emit immediately
|
|
280
|
-
if (!
|
|
307
|
+
if (!eph.throttleTimer) {
|
|
281
308
|
this.publishDelta(event);
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
309
|
+
eph.pendingDelta = undefined;
|
|
310
|
+
eph.throttleTimer = setTimeout(() => {
|
|
311
|
+
eph.throttleTimer = undefined;
|
|
285
312
|
// Flush any delta that arrived during the throttle window
|
|
286
|
-
if (
|
|
287
|
-
this.publishDelta(
|
|
288
|
-
|
|
313
|
+
if (eph.pendingDelta) {
|
|
314
|
+
this.publishDelta(eph.pendingDelta);
|
|
315
|
+
eph.pendingDelta = undefined;
|
|
289
316
|
}
|
|
290
317
|
}, DELTA_THROTTLE_MS);
|
|
291
318
|
}
|
|
292
319
|
}
|
|
293
|
-
flushThrottledDelta(
|
|
294
|
-
if (
|
|
295
|
-
clearTimeout(
|
|
296
|
-
|
|
320
|
+
flushThrottledDelta(eph) {
|
|
321
|
+
if (eph.throttleTimer) {
|
|
322
|
+
clearTimeout(eph.throttleTimer);
|
|
323
|
+
eph.throttleTimer = undefined;
|
|
297
324
|
}
|
|
298
|
-
if (
|
|
299
|
-
this.publishDelta(
|
|
300
|
-
|
|
325
|
+
if (eph.pendingDelta) {
|
|
326
|
+
this.publishDelta(eph.pendingDelta);
|
|
327
|
+
eph.pendingDelta = undefined;
|
|
301
328
|
}
|
|
302
329
|
}
|
|
303
|
-
|
|
304
|
-
const
|
|
305
|
-
if (
|
|
306
|
-
clearTimeout(
|
|
330
|
+
cleanupEphemeral(runId) {
|
|
331
|
+
const eph = this.ephemeral.get(runId);
|
|
332
|
+
if (eph?.throttleTimer) {
|
|
333
|
+
clearTimeout(eph.throttleTimer);
|
|
307
334
|
}
|
|
308
|
-
this.
|
|
335
|
+
this.ephemeral.delete(runId);
|
|
309
336
|
}
|
|
310
337
|
/**
|
|
311
338
|
* Dispose / cleanup all active streams.
|
|
312
339
|
*/
|
|
313
340
|
dispose() {
|
|
314
|
-
for (const [
|
|
315
|
-
if (
|
|
316
|
-
clearTimeout(
|
|
341
|
+
for (const [, eph] of this.ephemeral) {
|
|
342
|
+
if (eph.throttleTimer) {
|
|
343
|
+
clearTimeout(eph.throttleTimer);
|
|
317
344
|
}
|
|
318
|
-
if (
|
|
319
|
-
|
|
345
|
+
if (eph.chunker) {
|
|
346
|
+
eph.chunker.cancel();
|
|
320
347
|
}
|
|
321
348
|
}
|
|
322
|
-
this.
|
|
349
|
+
this.ephemeral.clear();
|
|
323
350
|
}
|
|
324
351
|
};
|
|
325
|
-
MessengerStreamService = __decorate([injectable(), __param(0, inject('Logger')), __metadata("design:paramtypes", [Object])], MessengerStreamService);export{MessengerStreamService};//# sourceMappingURL=stream-service.js.map
|
|
352
|
+
MessengerStreamService = __decorate([injectable(), __param(0, inject(RedisStreamStoreType)), __param(1, inject('Logger')), __param(1, optional()), __metadata("design:paramtypes", [Object, Object])], MessengerStreamService);export{MessengerStreamService,RedisStreamStoreType};//# sourceMappingURL=stream-service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-service.js","sources":["../../src/streaming/stream-service.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stream-service.js","sources":["../../src/streaming/stream-service.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@messenger-box/platform-server",
|
|
3
|
-
"version": "10.0.3-alpha.
|
|
3
|
+
"version": "10.0.3-alpha.209",
|
|
4
4
|
"description": "Sample core for higher packages to depend on",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"author": "CDMBase LLC",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"watch": "yarn build:lib:watch"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@messenger-box/core": "10.0.3-alpha.
|
|
22
|
+
"@messenger-box/core": "10.0.3-alpha.204",
|
|
23
23
|
"@skoropletov/moleculer-cron-tasks": "~0.0.8",
|
|
24
24
|
"date-fns": "^4.1.0"
|
|
25
25
|
},
|
|
@@ -73,5 +73,5 @@
|
|
|
73
73
|
"typescript": {
|
|
74
74
|
"definition": "lib/index.d.ts"
|
|
75
75
|
},
|
|
76
|
-
"gitHead": "
|
|
76
|
+
"gitHead": "7e2166af1db8eac731c31dfbda88e44be7a88006"
|
|
77
77
|
}
|