@multiplayer-app/sandbox 0.0.1
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/dist/agents/filingramp-fetch.agent.d.ts +4 -0
- package/dist/agents/filingramp-fetch.agent.d.ts.map +1 -0
- package/dist/agents/filingramp-fetch.agent.js +195 -0
- package/dist/agents/filingramp-fetch.agent.js.map +1 -0
- package/dist/agents/html-generator.agent.d.ts +4 -0
- package/dist/agents/html-generator.agent.d.ts.map +1 -0
- package/dist/agents/html-generator.agent.js +93 -0
- package/dist/agents/html-generator.agent.js.map +1 -0
- package/dist/agents/knowledge/filingramp-endpoints.d.ts +23 -0
- package/dist/agents/knowledge/filingramp-endpoints.d.ts.map +1 -0
- package/dist/agents/knowledge/filingramp-endpoints.js +116 -0
- package/dist/agents/knowledge/filingramp-endpoints.js.map +1 -0
- package/dist/agents/markdown-generator.agent.d.ts +4 -0
- package/dist/agents/markdown-generator.agent.d.ts.map +1 -0
- package/dist/agents/markdown-generator.agent.js +101 -0
- package/dist/agents/markdown-generator.agent.js.map +1 -0
- package/dist/agents/shared/publish-session-artifacts.tool.d.ts +21 -0
- package/dist/agents/shared/publish-session-artifacts.tool.d.ts.map +1 -0
- package/dist/agents/shared/publish-session-artifacts.tool.js +106 -0
- package/dist/agents/shared/publish-session-artifacts.tool.js.map +1 -0
- package/dist/agents.d.ts +5 -0
- package/dist/agents.d.ts.map +1 -0
- package/dist/agents.js +14 -0
- package/dist/agents.js.map +1 -0
- package/dist/ai-agent.service.d.ts +10 -0
- package/dist/ai-agent.service.d.ts.map +1 -0
- package/dist/ai-agent.service.js +29 -0
- package/dist/ai-agent.service.js.map +1 -0
- package/dist/builder-api-config.d.ts +31 -0
- package/dist/builder-api-config.d.ts.map +1 -0
- package/dist/builder-api-config.js +60 -0
- package/dist/builder-api-config.js.map +1 -0
- package/dist/config.d.ts +3 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +7 -0
- package/dist/config.js.map +1 -0
- package/dist/context.d.ts +18 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +23 -0
- package/dist/context.js.map +1 -0
- package/dist/create-builder-api.d.ts +30 -0
- package/dist/create-builder-api.d.ts.map +1 -0
- package/dist/create-builder-api.js +63 -0
- package/dist/create-builder-api.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/session-pages/default-session-styles.d.ts +6 -0
- package/dist/lib/session-pages/default-session-styles.d.ts.map +1 -0
- package/dist/lib/session-pages/default-session-styles.js +503 -0
- package/dist/lib/session-pages/default-session-styles.js.map +1 -0
- package/dist/lib/session-pages/index.d.ts +7 -0
- package/dist/lib/session-pages/index.d.ts.map +1 -0
- package/dist/lib/session-pages/index.js +20 -0
- package/dist/lib/session-pages/index.js.map +1 -0
- package/dist/lib/session-pages/list-session-artifacts.d.ts +6 -0
- package/dist/lib/session-pages/list-session-artifacts.d.ts.map +1 -0
- package/dist/lib/session-pages/list-session-artifacts.js +40 -0
- package/dist/lib/session-pages/list-session-artifacts.js.map +1 -0
- package/dist/lib/session-pages/paths.d.ts +7 -0
- package/dist/lib/session-pages/paths.d.ts.map +1 -0
- package/dist/lib/session-pages/paths.js +49 -0
- package/dist/lib/session-pages/paths.js.map +1 -0
- package/dist/lib/session-pages/resolve-artifact-notify-user-ids.d.ts +3 -0
- package/dist/lib/session-pages/resolve-artifact-notify-user-ids.d.ts.map +1 -0
- package/dist/lib/session-pages/resolve-artifact-notify-user-ids.js +28 -0
- package/dist/lib/session-pages/resolve-artifact-notify-user-ids.js.map +1 -0
- package/dist/lib/session-pages/resolve-chat-id.d.ts +21 -0
- package/dist/lib/session-pages/resolve-chat-id.d.ts.map +1 -0
- package/dist/lib/session-pages/resolve-chat-id.js +64 -0
- package/dist/lib/session-pages/resolve-chat-id.js.map +1 -0
- package/dist/lib/session-pages/write-session-artifacts.d.ts +27 -0
- package/dist/lib/session-pages/write-session-artifacts.d.ts.map +1 -0
- package/dist/lib/session-pages/write-session-artifacts.js +72 -0
- package/dist/lib/session-pages/write-session-artifacts.js.map +1 -0
- package/dist/lib/socket/artifact-events.d.ts +14 -0
- package/dist/lib/socket/artifact-events.d.ts.map +1 -0
- package/dist/lib/socket/artifact-events.js +31 -0
- package/dist/lib/socket/artifact-events.js.map +1 -0
- package/dist/lib/socketIdFromRequest.d.ts +4 -0
- package/dist/lib/socketIdFromRequest.d.ts.map +1 -0
- package/dist/lib/socketIdFromRequest.js +13 -0
- package/dist/lib/socketIdFromRequest.js.map +1 -0
- package/dist/logger.d.ts +7 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +20 -0
- package/dist/logger.js.map +1 -0
- package/dist/middleware/attachDemoUser.d.ts +11 -0
- package/dist/middleware/attachDemoUser.d.ts.map +1 -0
- package/dist/middleware/attachDemoUser.js +23 -0
- package/dist/middleware/attachDemoUser.js.map +1 -0
- package/dist/realtime/init-realtime.d.ts +11 -0
- package/dist/realtime/init-realtime.d.ts.map +1 -0
- package/dist/realtime/init-realtime.js +48 -0
- package/dist/realtime/init-realtime.js.map +1 -0
- package/dist/realtime/reset-session-artifact-y-docs.d.ts +2 -0
- package/dist/realtime/reset-session-artifact-y-docs.d.ts.map +1 -0
- package/dist/realtime/reset-session-artifact-y-docs.js +9 -0
- package/dist/realtime/reset-session-artifact-y-docs.js.map +1 -0
- package/dist/realtime/session-artifact-document-id.d.ts +6 -0
- package/dist/realtime/session-artifact-document-id.d.ts.map +1 -0
- package/dist/realtime/session-artifact-document-id.js +34 -0
- package/dist/realtime/session-artifact-document-id.js.map +1 -0
- package/dist/realtime/session-artifact-y-socket-io.d.ts +18 -0
- package/dist/realtime/session-artifact-y-socket-io.d.ts.map +1 -0
- package/dist/realtime/session-artifact-y-socket-io.js +106 -0
- package/dist/realtime/session-artifact-y-socket-io.js.map +1 -0
- package/dist/realtime/session-artifact-yjs-store.d.ts +18 -0
- package/dist/realtime/session-artifact-yjs-store.d.ts.map +1 -0
- package/dist/realtime/session-artifact-yjs-store.js +147 -0
- package/dist/realtime/session-artifact-yjs-store.js.map +1 -0
- package/dist/routes/chats/abort.d.ts +3 -0
- package/dist/routes/chats/abort.d.ts.map +1 -0
- package/dist/routes/chats/abort.js +18 -0
- package/dist/routes/chats/abort.js.map +1 -0
- package/dist/routes/chats/actions.d.ts +3 -0
- package/dist/routes/chats/actions.d.ts.map +1 -0
- package/dist/routes/chats/actions.js +36 -0
- package/dist/routes/chats/actions.js.map +1 -0
- package/dist/routes/chats/artifacts.d.ts +3 -0
- package/dist/routes/chats/artifacts.d.ts.map +1 -0
- package/dist/routes/chats/artifacts.js +12 -0
- package/dist/routes/chats/artifacts.js.map +1 -0
- package/dist/routes/chats/delete.d.ts +3 -0
- package/dist/routes/chats/delete.d.ts.map +1 -0
- package/dist/routes/chats/delete.js +17 -0
- package/dist/routes/chats/delete.js.map +1 -0
- package/dist/routes/chats/get.d.ts +3 -0
- package/dist/routes/chats/get.d.ts.map +1 -0
- package/dist/routes/chats/get.js +17 -0
- package/dist/routes/chats/get.js.map +1 -0
- package/dist/routes/chats/getStream.d.ts +3 -0
- package/dist/routes/chats/getStream.d.ts.map +1 -0
- package/dist/routes/chats/getStream.js +57 -0
- package/dist/routes/chats/getStream.js.map +1 -0
- package/dist/routes/chats/index.d.ts +2 -0
- package/dist/routes/chats/index.d.ts.map +1 -0
- package/dist/routes/chats/index.js +31 -0
- package/dist/routes/chats/index.js.map +1 -0
- package/dist/routes/chats/list.d.ts +3 -0
- package/dist/routes/chats/list.d.ts.map +1 -0
- package/dist/routes/chats/list.js +40 -0
- package/dist/routes/chats/list.js.map +1 -0
- package/dist/routes/chats/messages.d.ts +3 -0
- package/dist/routes/chats/messages.d.ts.map +1 -0
- package/dist/routes/chats/messages.js +27 -0
- package/dist/routes/chats/messages.js.map +1 -0
- package/dist/routes/chats/multiUserMessages.d.ts +3 -0
- package/dist/routes/chats/multiUserMessages.d.ts.map +1 -0
- package/dist/routes/chats/multiUserMessages.js +43 -0
- package/dist/routes/chats/multiUserMessages.js.map +1 -0
- package/dist/routes/chats/stream.d.ts +3 -0
- package/dist/routes/chats/stream.d.ts.map +1 -0
- package/dist/routes/chats/stream.js +78 -0
- package/dist/routes/chats/stream.js.map +1 -0
- package/dist/routes/chats/title.d.ts +3 -0
- package/dist/routes/chats/title.d.ts.map +1 -0
- package/dist/routes/chats/title.js +22 -0
- package/dist/routes/chats/title.js.map +1 -0
- package/dist/routes/chats/updateToolCall.d.ts +3 -0
- package/dist/routes/chats/updateToolCall.d.ts.map +1 -0
- package/dist/routes/chats/updateToolCall.js +49 -0
- package/dist/routes/chats/updateToolCall.js.map +1 -0
- package/dist/routes/files/index.d.ts +2 -0
- package/dist/routes/files/index.d.ts.map +1 -0
- package/dist/routes/files/index.js +8 -0
- package/dist/routes/files/index.js.map +1 -0
- package/dist/routes/files/upload.d.ts +3 -0
- package/dist/routes/files/upload.d.ts.map +1 -0
- package/dist/routes/files/upload.js +69 -0
- package/dist/routes/files/upload.js.map +1 -0
- package/dist/routes/health/get.d.ts +3 -0
- package/dist/routes/health/get.d.ts.map +1 -0
- package/dist/routes/health/get.js +13 -0
- package/dist/routes/health/get.js.map +1 -0
- package/dist/routes/health/index.d.ts +2 -0
- package/dist/routes/health/index.d.ts.map +1 -0
- package/dist/routes/health/index.js +8 -0
- package/dist/routes/health/index.js.map +1 -0
- package/dist/routes/models/get.d.ts +3 -0
- package/dist/routes/models/get.d.ts.map +1 -0
- package/dist/routes/models/get.js +11 -0
- package/dist/routes/models/get.js.map +1 -0
- package/dist/routes/models/index.d.ts +2 -0
- package/dist/routes/models/index.d.ts.map +1 -0
- package/dist/routes/models/index.js +8 -0
- package/dist/routes/models/index.js.map +1 -0
- package/dist/routes/schemas.d.ts +725 -0
- package/dist/routes/schemas.d.ts.map +1 -0
- package/dist/routes/schemas.js +92 -0
- package/dist/routes/schemas.js.map +1 -0
- package/dist/routes/sessions.d.ts +2 -0
- package/dist/routes/sessions.d.ts.map +1 -0
- package/dist/routes/sessions.js +51 -0
- package/dist/routes/sessions.js.map +1 -0
- package/dist/server.d.ts +13 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +36 -0
- package/dist/server.js.map +1 -0
- package/package.json +33 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveArtifactNotifyUserIds = resolveArtifactNotifyUserIds;
|
|
4
|
+
const context_1 = require("../../context");
|
|
5
|
+
const DEFAULT_NOTIFY_USER_ID = 'demo-user';
|
|
6
|
+
async function resolveArtifactNotifyUserIds(sessionId, context) {
|
|
7
|
+
var _a, _b;
|
|
8
|
+
const ids = new Set();
|
|
9
|
+
const fromContext = (_a = context === null || context === void 0 ? void 0 : context.data) === null || _a === void 0 ? void 0 : _a.userId;
|
|
10
|
+
if (typeof fromContext === 'string' && fromContext.trim() !== '') {
|
|
11
|
+
ids.add(fromContext.trim());
|
|
12
|
+
}
|
|
13
|
+
const chat = await (0, context_1.getBuilderApiRepositories)().chatRepository.findById(sessionId);
|
|
14
|
+
if (chat === null || chat === void 0 ? void 0 : chat.userId) {
|
|
15
|
+
ids.add(chat.userId);
|
|
16
|
+
}
|
|
17
|
+
if ((_b = chat === null || chat === void 0 ? void 0 : chat.participantIds) === null || _b === void 0 ? void 0 : _b.length) {
|
|
18
|
+
for (const participantId of chat.participantIds) {
|
|
19
|
+
if (participantId)
|
|
20
|
+
ids.add(participantId);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
if (ids.size === 0) {
|
|
24
|
+
ids.add(DEFAULT_NOTIFY_USER_ID);
|
|
25
|
+
}
|
|
26
|
+
return [...ids];
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=resolve-artifact-notify-user-ids.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-artifact-notify-user-ids.js","sourceRoot":"","sources":["../../../src/lib/session-pages/resolve-artifact-notify-user-ids.ts"],"names":[],"mappings":";;AAKA,oEA0BC;AA9BD,2CAAyD;AAEzD,MAAM,sBAAsB,GAAG,WAAW,CAAA;AAEnC,KAAK,UAAU,4BAA4B,CAChD,SAAiB,EACjB,OAA2B;;IAE3B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAA;IAE7B,MAAM,WAAW,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,0CAAE,MAAM,CAAA;IACzC,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACjE,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAA;IAC7B,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,IAAA,mCAAyB,GAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;IACjF,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,EAAE,CAAC;QACjB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACtB,CAAC;IACD,IAAI,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,cAAc,0CAAE,MAAM,EAAE,CAAC;QACjC,KAAK,MAAM,aAAa,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAChD,IAAI,aAAa;gBAAE,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC;IAED,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACnB,GAAG,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;IACjC,CAAC;IAED,OAAO,CAAC,GAAG,GAAG,CAAC,CAAA;AACjB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { AdditionalContext } from '@multiplayer-app/ai-agent-types';
|
|
2
|
+
type StreamPayload = {
|
|
3
|
+
context?: AdditionalContext;
|
|
4
|
+
chatId?: string;
|
|
5
|
+
[key: string]: unknown;
|
|
6
|
+
};
|
|
7
|
+
export declare function findChatIdByToolCallId(toolCallId: string): Promise<string | undefined>;
|
|
8
|
+
export declare function enrichPayloadWithChatId<T extends StreamPayload>(payload: T, chatId: string): T;
|
|
9
|
+
type ChatProcessorLike = {
|
|
10
|
+
runMessageStream: (stream: unknown, payload: StreamPayload, excludeSocketId?: string, signal?: AbortSignal) => Promise<void>;
|
|
11
|
+
upsertAndGetChat: (payload: StreamPayload, excludeSocketId?: string) => Promise<{
|
|
12
|
+
id: string;
|
|
13
|
+
}>;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* New chats only get an id after upsert; the stock processor does not merge it into tool context.
|
|
17
|
+
*/
|
|
18
|
+
export declare function patchChatProcessorWithSessionContext(processor: ChatProcessorLike): void;
|
|
19
|
+
export declare function resolveChatId(context?: AdditionalContext, secondArg?: unknown): Promise<string>;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=resolve-chat-id.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-chat-id.d.ts","sourceRoot":"","sources":["../../../src/lib/session-pages/resolve-chat-id.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAQxE,KAAK,aAAa,GAAG;IACnB,OAAO,CAAC,EAAE,iBAAiB,CAAA;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB,CAAA;AAcD,wBAAsB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAQ5F;AAED,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,aAAa,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,CAe9F;AAED,KAAK,iBAAiB,GAAG;IACvB,gBAAgB,EAAE,CAChB,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,aAAa,EACtB,eAAe,CAAC,EAAE,MAAM,EACxB,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,IAAI,CAAC,CAAA;IAClB,gBAAgB,EAAE,CAChB,OAAO,EAAE,aAAa,EACtB,eAAe,CAAC,EAAE,MAAM,KACrB,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC7B,CAAA;AAED;;GAEG;AACH,wBAAgB,oCAAoC,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAQvF;AAED,wBAAsB,aAAa,CACjC,OAAO,CAAC,EAAE,iBAAiB,EAC3B,SAAS,CAAC,EAAE,OAAO,GAClB,OAAO,CAAC,MAAM,CAAC,CAiBjB"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.findChatIdByToolCallId = findChatIdByToolCallId;
|
|
4
|
+
exports.enrichPayloadWithChatId = enrichPayloadWithChatId;
|
|
5
|
+
exports.patchChatProcessorWithSessionContext = patchChatProcessorWithSessionContext;
|
|
6
|
+
exports.resolveChatId = resolveChatId;
|
|
7
|
+
const context_1 = require("../../context");
|
|
8
|
+
function extractToolCallId(secondArg) {
|
|
9
|
+
if (typeof secondArg === 'object' &&
|
|
10
|
+
secondArg !== null &&
|
|
11
|
+
'toolCallId' in secondArg &&
|
|
12
|
+
typeof secondArg.toolCallId === 'string') {
|
|
13
|
+
return secondArg.toolCallId;
|
|
14
|
+
}
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
async function findChatIdByToolCallId(toolCallId) {
|
|
18
|
+
const message = await (0, context_1.getBuilderApiRepositories)().messageRepository.findOne({
|
|
19
|
+
toolCalls: { $elemMatch: { id: toolCallId } },
|
|
20
|
+
});
|
|
21
|
+
return message === null || message === void 0 ? void 0 : message.chat;
|
|
22
|
+
}
|
|
23
|
+
function enrichPayloadWithChatId(payload, chatId) {
|
|
24
|
+
var _a, _b, _c, _d;
|
|
25
|
+
const existingChatId = typeof payload.chatId === 'string' && payload.chatId.length > 0 ? payload.chatId : undefined;
|
|
26
|
+
return {
|
|
27
|
+
...payload,
|
|
28
|
+
chatId: existingChatId !== null && existingChatId !== void 0 ? existingChatId : chatId,
|
|
29
|
+
context: {
|
|
30
|
+
headers: (_b = (_a = payload.context) === null || _a === void 0 ? void 0 : _a.headers) !== null && _b !== void 0 ? _b : {},
|
|
31
|
+
data: {
|
|
32
|
+
...((_d = (_c = payload.context) === null || _c === void 0 ? void 0 : _c.data) !== null && _d !== void 0 ? _d : {}),
|
|
33
|
+
chatId,
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* New chats only get an id after upsert; the stock processor does not merge it into tool context.
|
|
40
|
+
*/
|
|
41
|
+
function patchChatProcessorWithSessionContext(processor) {
|
|
42
|
+
const originalRunMessageStream = processor.runMessageStream.bind(processor);
|
|
43
|
+
processor.runMessageStream = async (stream, payload, excludeSocketId, signal) => {
|
|
44
|
+
const chat = await processor.upsertAndGetChat(payload, excludeSocketId);
|
|
45
|
+
const enriched = enrichPayloadWithChatId(payload, chat.id);
|
|
46
|
+
return originalRunMessageStream(stream, enriched, excludeSocketId, signal);
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
async function resolveChatId(context, secondArg) {
|
|
50
|
+
var _a;
|
|
51
|
+
const fromContext = (_a = context === null || context === void 0 ? void 0 : context.data) === null || _a === void 0 ? void 0 : _a.chatId;
|
|
52
|
+
if (typeof fromContext === 'string' && fromContext.length > 0) {
|
|
53
|
+
return fromContext;
|
|
54
|
+
}
|
|
55
|
+
const toolCallId = extractToolCallId(secondArg);
|
|
56
|
+
if (toolCallId) {
|
|
57
|
+
const chatId = await findChatIdByToolCallId(toolCallId);
|
|
58
|
+
if (chatId) {
|
|
59
|
+
return chatId;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
throw new Error('Session id (chatId) is required to publish session artifacts. Open or continue a session before publishing.');
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=resolve-chat-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-chat-id.js","sourceRoot":"","sources":["../../../src/lib/session-pages/resolve-chat-id.ts"],"names":[],"mappings":";;AA0BA,wDAQC;AAED,0DAeC;AAkBD,oFAQC;AAED,sCAoBC;AAlGD,2CAAyD;AAazD,SAAS,iBAAiB,CAAC,SAAmB;IAC5C,IACE,OAAO,SAAS,KAAK,QAAQ;QAC7B,SAAS,KAAK,IAAI;QAClB,YAAY,IAAI,SAAS;QACzB,OAAQ,SAAgC,CAAC,UAAU,KAAK,QAAQ,EAChE,CAAC;QACD,OAAQ,SAAgC,CAAC,UAAU,CAAA;IACrD,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAEM,KAAK,UAAU,sBAAsB,CAAC,UAAkB;IAC7D,MAAM,OAAO,GAAG,MAAM,IAAA,mCAAyB,GAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC;QAC1E,SAAS,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE;KAG3C,CAAC,CAAA;IAEL,OAAO,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAA;AACtB,CAAC;AAED,SAAgB,uBAAuB,CAA0B,OAAU,EAAE,MAAc;;IACzF,MAAM,cAAc,GAClB,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;IAE9F,OAAO;QACL,GAAG,OAAO;QACV,MAAM,EAAE,cAAc,aAAd,cAAc,cAAd,cAAc,GAAI,MAAM;QAChC,OAAO,EAAE;YACP,OAAO,EAAE,MAAA,MAAA,OAAO,CAAC,OAAO,0CAAE,OAAO,mCAAI,EAAE;YACvC,IAAI,EAAE;gBACJ,GAAG,CAAC,MAAA,MAAA,OAAO,CAAC,OAAO,0CAAE,IAAI,mCAAI,EAAE,CAAC;gBAChC,MAAM;aACP;SACF;KACF,CAAA;AACH,CAAC;AAeD;;GAEG;AACH,SAAgB,oCAAoC,CAAC,SAA4B;IAC/E,MAAM,wBAAwB,GAAG,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAE3E,SAAS,CAAC,gBAAgB,GAAG,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE;QAC9E,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,eAAe,CAAC,CAAA;QACvE,MAAM,QAAQ,GAAG,uBAAuB,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;QAC1D,OAAO,wBAAwB,CAAC,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,CAAC,CAAA;IAC5E,CAAC,CAAA;AACH,CAAC;AAEM,KAAK,UAAU,aAAa,CACjC,OAA2B,EAC3B,SAAmB;;IAEnB,MAAM,WAAW,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,0CAAE,MAAM,CAAA;IACzC,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9D,OAAO,WAAW,CAAA;IACpB,CAAC;IAED,MAAM,UAAU,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAA;IAC/C,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,UAAU,CAAC,CAAA;QACvD,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAA;QACf,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CACb,6GAA6G,CAC9G,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export interface SessionArtifactFile {
|
|
2
|
+
path: string;
|
|
3
|
+
content: string;
|
|
4
|
+
}
|
|
5
|
+
export interface WriteSessionArtifactsInput {
|
|
6
|
+
sessionId: string;
|
|
7
|
+
files: SessionArtifactFile[];
|
|
8
|
+
/** Entry file for preview URL (default index.html). */
|
|
9
|
+
previewPath?: string;
|
|
10
|
+
/** Prepend bundled base styles when publishing styles.css (default true). */
|
|
11
|
+
includeBaseStyles?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface PublishedSessionArtifact {
|
|
14
|
+
path: string;
|
|
15
|
+
bytes: number;
|
|
16
|
+
}
|
|
17
|
+
export interface WriteSessionArtifactsResult {
|
|
18
|
+
sessionId: string;
|
|
19
|
+
directory: string;
|
|
20
|
+
/** All artifacts on disk after this publish (includes unchanged files). */
|
|
21
|
+
artifacts: PublishedSessionArtifact[];
|
|
22
|
+
/** Paths written or overwritten in this call only. */
|
|
23
|
+
updatedArtifacts: PublishedSessionArtifact[];
|
|
24
|
+
previewUrl: string;
|
|
25
|
+
}
|
|
26
|
+
export declare function writeSessionArtifacts(input: WriteSessionArtifactsInput): Promise<WriteSessionArtifactsResult>;
|
|
27
|
+
//# sourceMappingURL=write-session-artifacts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-session-artifacts.d.ts","sourceRoot":"","sources":["../../../src/lib/session-pages/write-session-artifacts.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,mBAAmB,EAAE,CAAA;IAC5B,uDAAuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,6EAA6E;IAC7E,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC5B;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,2EAA2E;IAC3E,SAAS,EAAE,wBAAwB,EAAE,CAAA;IACrC,sDAAsD;IACtD,gBAAgB,EAAE,wBAAwB,EAAE,CAAA;IAC5C,UAAU,EAAE,MAAM,CAAA;CACnB;AAYD,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,2BAA2B,CAAC,CA2DtC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.writeSessionArtifacts = writeSessionArtifacts;
|
|
7
|
+
const promises_1 = __importDefault(require("node:fs/promises"));
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
const context_1 = require("../../context");
|
|
10
|
+
const reset_session_artifact_y_docs_1 = require("../../realtime/reset-session-artifact-y-docs");
|
|
11
|
+
const default_session_styles_1 = require("./default-session-styles");
|
|
12
|
+
const list_session_artifacts_1 = require("./list-session-artifacts");
|
|
13
|
+
const paths_1 = require("./paths");
|
|
14
|
+
const STYLES_CSS = 'styles.css';
|
|
15
|
+
function mergeBaseStyles(content, includeBaseStyles) {
|
|
16
|
+
if (!includeBaseStyles)
|
|
17
|
+
return content;
|
|
18
|
+
const trimmed = content.trim();
|
|
19
|
+
if (!trimmed)
|
|
20
|
+
return default_session_styles_1.DEFAULT_SESSION_STYLES;
|
|
21
|
+
if (trimmed.includes('Session page base'))
|
|
22
|
+
return trimmed;
|
|
23
|
+
return `${default_session_styles_1.DEFAULT_SESSION_STYLES}\n\n/* --- Page-specific --- */\n${trimmed}`;
|
|
24
|
+
}
|
|
25
|
+
async function writeSessionArtifacts(input) {
|
|
26
|
+
var _a, _b, _c, _d;
|
|
27
|
+
if (input.files.length === 0) {
|
|
28
|
+
throw new Error('At least one file is required');
|
|
29
|
+
}
|
|
30
|
+
const directory = (0, paths_1.getSessionDir)(input.sessionId);
|
|
31
|
+
await promises_1.default.mkdir(directory, { recursive: true });
|
|
32
|
+
const includeBaseStyles = input.includeBaseStyles !== false;
|
|
33
|
+
const seen = new Set();
|
|
34
|
+
const updatedArtifacts = [];
|
|
35
|
+
for (const file of input.files) {
|
|
36
|
+
const relativePath = (0, paths_1.normalizeArtifactPath)(file.path);
|
|
37
|
+
if (seen.has(relativePath)) {
|
|
38
|
+
throw new Error(`Duplicate artifact path: ${relativePath}`);
|
|
39
|
+
}
|
|
40
|
+
seen.add(relativePath);
|
|
41
|
+
let content = file.content;
|
|
42
|
+
if (relativePath === STYLES_CSS && includeBaseStyles) {
|
|
43
|
+
content = mergeBaseStyles(content, true);
|
|
44
|
+
}
|
|
45
|
+
const absolutePath = node_path_1.default.join(directory, relativePath);
|
|
46
|
+
await promises_1.default.mkdir(node_path_1.default.dirname(absolutePath), { recursive: true });
|
|
47
|
+
await promises_1.default.writeFile(absolutePath, content, 'utf8');
|
|
48
|
+
updatedArtifacts.push({
|
|
49
|
+
path: relativePath,
|
|
50
|
+
bytes: Buffer.byteLength(content, 'utf8'),
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
const allArtifacts = await (0, list_session_artifacts_1.listSessionArtifacts)(input.sessionId);
|
|
54
|
+
await (0, reset_session_artifact_y_docs_1.resetSessionArtifactYDocs)(input.sessionId, updatedArtifacts.map((artifact) => artifact.path)).catch(() => {
|
|
55
|
+
// Realtime may be disabled when Redis is unavailable.
|
|
56
|
+
});
|
|
57
|
+
const requestedPreview = (0, paths_1.normalizeArtifactPath)((_a = input.previewPath) !== null && _a !== void 0 ? _a : 'index.html');
|
|
58
|
+
const previewPath = allArtifacts.some((f) => f.path === requestedPreview)
|
|
59
|
+
? requestedPreview
|
|
60
|
+
: ((_c = (_b = allArtifacts.find((f) => f.path === 'index.html')) === null || _b === void 0 ? void 0 : _b.path) !== null && _c !== void 0 ? _c : (_d = allArtifacts[0]) === null || _d === void 0 ? void 0 : _d.path);
|
|
61
|
+
if (!previewPath) {
|
|
62
|
+
throw new Error('No artifacts available for preview after publish');
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
sessionId: input.sessionId,
|
|
66
|
+
directory,
|
|
67
|
+
artifacts: allArtifacts,
|
|
68
|
+
updatedArtifacts,
|
|
69
|
+
previewUrl: `${(0, context_1.getBuilderApiContext)().config.apiPrefix}/sessions/${input.sessionId}/${previewPath}`,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=write-session-artifacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-session-artifacts.js","sourceRoot":"","sources":["../../../src/lib/session-pages/write-session-artifacts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const ARTIFACT_UPDATE_EVENT: "artifact:update";
|
|
2
|
+
export interface ArtifactUpdatePayload {
|
|
3
|
+
sessionId: string;
|
|
4
|
+
files: Array<{
|
|
5
|
+
path: string;
|
|
6
|
+
bytes: number;
|
|
7
|
+
}>;
|
|
8
|
+
previewUrl: string;
|
|
9
|
+
previewPath?: string;
|
|
10
|
+
publishedAt: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function emitArtifactUpdate(userId: string, payload: ArtifactUpdatePayload): void;
|
|
13
|
+
export declare function emitArtifactUpdateToUsers(userIds: string[], payload: ArtifactUpdatePayload): void;
|
|
14
|
+
//# sourceMappingURL=artifact-events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-events.d.ts","sourceRoot":"","sources":["../../../src/lib/socket/artifact-events.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,qBAAqB,EAAG,iBAA0B,CAAA;AAE/D,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC7C,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;CACpB;AAiBD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAMvF;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAKjG"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ARTIFACT_UPDATE_EVENT = void 0;
|
|
4
|
+
exports.emitArtifactUpdate = emitArtifactUpdate;
|
|
5
|
+
exports.emitArtifactUpdateToUsers = emitArtifactUpdateToUsers;
|
|
6
|
+
const ai_agent_types_1 = require("@multiplayer-app/ai-agent-types");
|
|
7
|
+
const context_1 = require("../../context");
|
|
8
|
+
exports.ARTIFACT_UPDATE_EVENT = 'artifact:update';
|
|
9
|
+
function getSocketIO() {
|
|
10
|
+
try {
|
|
11
|
+
const service = (0, context_1.getAgentService)();
|
|
12
|
+
return service.socketService.getIO();
|
|
13
|
+
}
|
|
14
|
+
catch (_a) {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function emitArtifactUpdate(userId, payload) {
|
|
19
|
+
const io = getSocketIO();
|
|
20
|
+
if (!io || !userId)
|
|
21
|
+
return;
|
|
22
|
+
const userRoom = `${ai_agent_types_1.SocketIOConfig.UserRoomPrefix}${userId}`;
|
|
23
|
+
io.to(userRoom).emit(exports.ARTIFACT_UPDATE_EVENT, payload);
|
|
24
|
+
}
|
|
25
|
+
function emitArtifactUpdateToUsers(userIds, payload) {
|
|
26
|
+
const unique = [...new Set(userIds.filter(Boolean))];
|
|
27
|
+
for (const userId of unique) {
|
|
28
|
+
emitArtifactUpdate(userId, payload);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=artifact-events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-events.js","sourceRoot":"","sources":["../../../src/lib/socket/artifact-events.ts"],"names":[],"mappings":";;;AA6BA,gDAMC;AAED,8DAKC;AAzCD,oEAAgE;AAChE,2CAA+C;AAElC,QAAA,qBAAqB,GAAG,iBAA0B,CAAA;AAgB/D,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAA,yBAAe,GAAE,CAAA;QACjC,OAAQ,OAA6C,CAAC,aAAa,CAAC,KAAK,EAAE,CAAA;IAC7E,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,SAAgB,kBAAkB,CAAC,MAAc,EAAE,OAA8B;IAC/E,MAAM,EAAE,GAAG,WAAW,EAAE,CAAA;IACxB,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM;QAAE,OAAM;IAE1B,MAAM,QAAQ,GAAG,GAAG,+BAAc,CAAC,cAAc,GAAG,MAAM,EAAE,CAAA;IAC5D,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,6BAAqB,EAAE,OAAO,CAAC,CAAA;AACtD,CAAC;AAED,SAAgB,yBAAyB,CAAC,OAAiB,EAAE,OAA8B;IACzF,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IACpD,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC;QAC5B,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Request } from 'express';
|
|
2
|
+
/** Prefer `x-socket-id` header; fall back to `socketId` query param. */
|
|
3
|
+
export declare function socketIdFromRequest(req: Pick<Request, 'headers' | 'query'>): string | undefined;
|
|
4
|
+
//# sourceMappingURL=socketIdFromRequest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socketIdFromRequest.d.ts","sourceRoot":"","sources":["../../src/lib/socketIdFromRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEtC,wEAAwE;AACxE,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,GAAG,MAAM,GAAG,SAAS,CAO/F"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.socketIdFromRequest = socketIdFromRequest;
|
|
4
|
+
/** Prefer `x-socket-id` header; fall back to `socketId` query param. */
|
|
5
|
+
function socketIdFromRequest(req) {
|
|
6
|
+
var _a;
|
|
7
|
+
const fromHeader = req.headers['x-socket-id'];
|
|
8
|
+
const headerVal = Array.isArray(fromHeader) ? fromHeader[0] : fromHeader;
|
|
9
|
+
const q = req.query.socketId;
|
|
10
|
+
const queryVal = Array.isArray(q) ? q[0] : q;
|
|
11
|
+
return (_a = (typeof headerVal === 'string' ? headerVal : undefined)) !== null && _a !== void 0 ? _a : (typeof queryVal === 'string' ? queryVal : undefined);
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=socketIdFromRequest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socketIdFromRequest.js","sourceRoot":"","sources":["../../src/lib/socketIdFromRequest.ts"],"names":[],"mappings":";;AAGA,kDAOC;AARD,wEAAwE;AACxE,SAAgB,mBAAmB,CAAC,GAAuC;;IACzE,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;IAC7C,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAA;IACxE,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAA;IAC5B,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5C,OAAO,MAAA,CAAC,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,mCACzD,CAAC,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;AAC5D,CAAC"}
|
package/dist/logger.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AIAgentServiceOptions } from '@multiplayer-app/ai-agent-node';
|
|
2
|
+
/** Logger used across sandbox HTTP, realtime, routes, and the agent runtime. */
|
|
3
|
+
export type BuilderApiLogger = NonNullable<AIAgentServiceOptions['logger']>;
|
|
4
|
+
export declare function configureBuilderApiLogger(logger: BuilderApiLogger): void;
|
|
5
|
+
export declare function getBuilderApiLogger(): BuilderApiLogger;
|
|
6
|
+
export declare function resolveBuilderApiLogger(custom?: BuilderApiLogger): BuilderApiLogger;
|
|
7
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAA;AAG3E,gFAAgF;AAChF,MAAM,MAAM,gBAAgB,GAAG,WAAW,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAA;AAI3E,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAExE;AAED,wBAAgB,mBAAmB,IAAI,gBAAgB,CAEtD;AAED,wBAAgB,uBAAuB,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,gBAAgB,CAEnF"}
|
package/dist/logger.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.configureBuilderApiLogger = configureBuilderApiLogger;
|
|
7
|
+
exports.getBuilderApiLogger = getBuilderApiLogger;
|
|
8
|
+
exports.resolveBuilderApiLogger = resolveBuilderApiLogger;
|
|
9
|
+
const logger_1 = __importDefault(require("@multiplayer-builder/logger"));
|
|
10
|
+
let runtimeLogger = logger_1.default;
|
|
11
|
+
function configureBuilderApiLogger(logger) {
|
|
12
|
+
runtimeLogger = logger;
|
|
13
|
+
}
|
|
14
|
+
function getBuilderApiLogger() {
|
|
15
|
+
return runtimeLogger;
|
|
16
|
+
}
|
|
17
|
+
function resolveBuilderApiLogger(custom) {
|
|
18
|
+
return custom !== null && custom !== void 0 ? custom : logger_1.default;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":";;;;;AAQA,8DAEC;AAED,kDAEC;AAED,0DAEC;AAjBD,yEAAuD;AAKvD,IAAI,aAAa,GAAqB,gBAAiC,CAAA;AAEvE,SAAgB,yBAAyB,CAAC,MAAwB;IAChE,aAAa,GAAG,MAAM,CAAA;AACxB,CAAC;AAED,SAAgB,mBAAmB;IACjC,OAAO,aAAa,CAAA;AACtB,CAAC;AAED,SAAgB,uBAAuB,CAAC,MAAyB;IAC/D,OAAO,MAAM,aAAN,MAAM,cAAN,MAAM,GAAK,gBAAkC,CAAA;AACtD,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { RequestHandler } from 'express';
|
|
2
|
+
interface SocketError extends Error {
|
|
3
|
+
message: string;
|
|
4
|
+
statusCode?: number;
|
|
5
|
+
}
|
|
6
|
+
/** Attach a fixed demo user on every HTTP request (auth disabled for local dev). */
|
|
7
|
+
export declare const attachDemoUser: RequestHandler;
|
|
8
|
+
/** Socket.IO handshake: same demo user id as HTTP (no token checks). */
|
|
9
|
+
export declare function attachSocketDemoUser(request: unknown, _response: unknown, next?: (error?: SocketError) => void): void;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=attachDemoUser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachDemoUser.d.ts","sourceRoot":"","sources":["../../src/middleware/attachDemoUser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAK7C,UAAU,WAAY,SAAQ,KAAK;IACjC,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,oFAAoF;AACpF,eAAO,MAAM,cAAc,EAAE,cAI5B,CAAA;AAED,wEAAwE;AACxE,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,OAAO,EAClB,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,WAAW,KAAK,IAAI,GACnC,IAAI,CAON"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.attachDemoUser = void 0;
|
|
4
|
+
exports.attachSocketDemoUser = attachSocketDemoUser;
|
|
5
|
+
const DEMO_USER_ID = 'demo-user';
|
|
6
|
+
const DEMO_ACCOUNT_ID = 'demo-account';
|
|
7
|
+
/** Attach a fixed demo user on every HTTP request (auth disabled for local dev). */
|
|
8
|
+
const attachDemoUser = (req, _res, next) => {
|
|
9
|
+
req.userId = DEMO_USER_ID;
|
|
10
|
+
req.accountId = DEMO_ACCOUNT_ID;
|
|
11
|
+
next();
|
|
12
|
+
};
|
|
13
|
+
exports.attachDemoUser = attachDemoUser;
|
|
14
|
+
/** Socket.IO handshake: same demo user id as HTTP (no token checks). */
|
|
15
|
+
function attachSocketDemoUser(request, _response, next) {
|
|
16
|
+
if (!next)
|
|
17
|
+
return;
|
|
18
|
+
const r = request;
|
|
19
|
+
r.userId = DEMO_USER_ID;
|
|
20
|
+
r.accountId = DEMO_ACCOUNT_ID;
|
|
21
|
+
next();
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=attachDemoUser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachDemoUser.js","sourceRoot":"","sources":["../../src/middleware/attachDemoUser.ts"],"names":[],"mappings":";;;AAkBA,oDAWC;AA3BD,MAAM,YAAY,GAAG,WAAW,CAAA;AAChC,MAAM,eAAe,GAAG,cAAc,CAAA;AAOtC,oFAAoF;AAC7E,MAAM,cAAc,GAAmB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;IAChE,GAAG,CAAC,MAAM,GAAG,YAAY,CAAA;IACzB,GAAG,CAAC,SAAS,GAAG,eAAe,CAAA;IAC/B,IAAI,EAAE,CAAA;AACR,CAAC,CAAA;AAJY,QAAA,cAAc,kBAI1B;AAED,wEAAwE;AACxE,SAAgB,oBAAoB,CAClC,OAAgB,EAChB,SAAkB,EAClB,IAAoC;IAEpC,IAAI,CAAC,IAAI;QAAE,OAAM;IAEjB,MAAM,CAAC,GAAG,OAAkD,CAAA;IAC5D,CAAC,CAAC,MAAM,GAAG,YAAY,CAAA;IACvB,CAAC,CAAC,SAAS,GAAG,eAAe,CAAA;IAC7B,IAAI,EAAE,CAAA;AACR,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Server as HttpServer } from 'node:http';
|
|
2
|
+
import { type RedisClientType } from 'redis';
|
|
3
|
+
import { type RealtimeServer } from '@multiplayer-app/realtime-server';
|
|
4
|
+
import type { BuilderApiConfig } from '../builder-api-config';
|
|
5
|
+
export interface RealtimeServices {
|
|
6
|
+
realtimeServer: RealtimeServer;
|
|
7
|
+
redisClient: RedisClientType;
|
|
8
|
+
close: () => Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
export declare function initRealtime(httpServer: HttpServer, config: BuilderApiConfig, redisUrl?: string): Promise<RealtimeServices | null>;
|
|
11
|
+
//# sourceMappingURL=init-realtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-realtime.d.ts","sourceRoot":"","sources":["../../src/realtime/init-realtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,WAAW,CAAA;AACrD,OAAO,EAAgB,KAAK,eAAe,EAAE,MAAM,OAAO,CAAA;AAC1D,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,kCAAkC,CAAA;AAE5F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAM7D,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,cAAc,CAAA;IAC9B,WAAW,EAAE,eAAe,CAAA;IAC5B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3B;AAQD,wBAAsB,YAAY,CAChC,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,gBAAgB,EACxB,QAAQ,SAAoD,GAC3D,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAkClC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.initRealtime = initRealtime;
|
|
4
|
+
const redis_1 = require("redis");
|
|
5
|
+
const realtime_server_1 = require("@multiplayer-app/realtime-server");
|
|
6
|
+
const logger_1 = require("../logger");
|
|
7
|
+
const session_artifact_y_socket_io_1 = require("./session-artifact-y-socket-io");
|
|
8
|
+
const YJS_NAMESPACE = '/yjs';
|
|
9
|
+
const REALTIME_NAMESPACE = '/';
|
|
10
|
+
function resolveCorsOrigin(corsOrigin) {
|
|
11
|
+
if (corsOrigin === true)
|
|
12
|
+
return '*';
|
|
13
|
+
if (Array.isArray(corsOrigin))
|
|
14
|
+
return corsOrigin.join(',');
|
|
15
|
+
return String(corsOrigin);
|
|
16
|
+
}
|
|
17
|
+
async function initRealtime(httpServer, config, redisUrl) {
|
|
18
|
+
var _a;
|
|
19
|
+
if (redisUrl === void 0) { redisUrl = (_a = process.env.REDIS_URL) !== null && _a !== void 0 ? _a : 'redis://127.0.0.1:6379'; }
|
|
20
|
+
let redisClient;
|
|
21
|
+
try {
|
|
22
|
+
redisClient = (0, redis_1.createClient)({ url: redisUrl });
|
|
23
|
+
await redisClient.connect();
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
(0, logger_1.getBuilderApiLogger)().warn({ err: error, redisUrl }, 'Redis unavailable — collaborative file editing disabled. Start redis or set REDIS_URL.');
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
const realtimeServer = await (0, realtime_server_1.createRealtimeServer)({
|
|
30
|
+
httpServer,
|
|
31
|
+
corsOrigin: resolveCorsOrigin(config.corsOrigin),
|
|
32
|
+
namespace: REALTIME_NAMESPACE,
|
|
33
|
+
pubClient: redisClient,
|
|
34
|
+
subClient: redisClient.duplicate(),
|
|
35
|
+
});
|
|
36
|
+
const yjsNamespace = realtimeServer.io.of(YJS_NAMESPACE);
|
|
37
|
+
const yjsServer = new session_artifact_y_socket_io_1.SessionArtifactYSocketIO(yjsNamespace);
|
|
38
|
+
yjsServer.initialize();
|
|
39
|
+
(0, logger_1.getBuilderApiLogger)().info({ yjsNamespace: YJS_NAMESPACE }, 'Realtime Yjs server initialized');
|
|
40
|
+
return {
|
|
41
|
+
realtimeServer,
|
|
42
|
+
redisClient,
|
|
43
|
+
close: async () => {
|
|
44
|
+
await Promise.allSettled([realtimeServer.close(), redisClient.quit()]);
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=init-realtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-realtime.js","sourceRoot":"","sources":["../../src/realtime/init-realtime.ts"],"names":[],"mappings":";;AAsBA,oCAsCC;AA3DD,iCAA0D;AAC1D,sEAA4F;AAC5F,sCAA+C;AAE/C,iFAAyE;AAEzE,MAAM,aAAa,GAAG,MAAM,CAAA;AAC5B,MAAM,kBAAkB,GAAG,GAAG,CAAA;AAQ9B,SAAS,iBAAiB,CAAC,UAA0C;IACnE,IAAI,UAAU,KAAK,IAAI;QAAE,OAAO,GAAG,CAAA;IACnC,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;QAAE,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC1D,OAAO,MAAM,CAAC,UAAU,CAAC,CAAA;AAC3B,CAAC;AAEM,KAAK,UAAU,YAAY,CAChC,UAAsB,EACtB,MAAwB,EACxB,QAA4D;;6BAA5D,EAAA,iBAAW,OAAO,CAAC,GAAG,CAAC,SAAS,mCAAI,wBAAwB;IAE5D,IAAI,WAA4B,CAAA;IAChC,IAAI,CAAC;QACH,WAAW,GAAG,IAAA,oBAAY,EAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAoB,CAAA;QAChE,MAAM,WAAW,CAAC,OAAO,EAAE,CAAA;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAA,4BAAmB,GAAE,CAAC,IAAI,CACxB,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,EACxB,wFAAwF,CACzF,CAAA;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,IAAA,sCAAoB,EAAC;QAChD,UAAU;QACV,UAAU,EAAE,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC;QAChD,SAAS,EAAE,kBAAkB;QAC7B,SAAS,EAAE,WAAW;QACtB,SAAS,EAAE,WAAW,CAAC,SAAS,EAAE;KACnC,CAAC,CAAA;IAEF,MAAM,YAAY,GAAG,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,CAAA;IACxD,MAAM,SAAS,GAAG,IAAI,uDAAwB,CAAC,YAAY,CAAC,CAAA;IAC5D,SAAS,CAAC,UAAU,EAAE,CAAA;IAEtB,IAAA,4BAAmB,GAAE,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,aAAa,EAAE,EAAE,iCAAiC,CAAC,CAAA;IAE9F,OAAO;QACL,cAAc;QACd,WAAW;QACX,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QACxE,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reset-session-artifact-y-docs.d.ts","sourceRoot":"","sources":["../../src/realtime/reset-session-artifact-y-docs.ts"],"names":[],"mappings":"AAEA,wBAAsB,yBAAyB,CAC7C,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EAAE,GACtB,OAAO,CAAC,IAAI,CAAC,CAGf"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resetSessionArtifactYDocs = resetSessionArtifactYDocs;
|
|
4
|
+
const session_artifact_yjs_store_1 = require("./session-artifact-yjs-store");
|
|
5
|
+
async function resetSessionArtifactYDocs(sessionId, artifactPaths) {
|
|
6
|
+
const store = (0, session_artifact_yjs_store_1.getSessionArtifactYjsStore)();
|
|
7
|
+
await Promise.all(artifactPaths.map((path) => store.resetFromFileContent(sessionId, path)));
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=reset-session-artifact-y-docs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reset-session-artifact-y-docs.js","sourceRoot":"","sources":["../../src/realtime/reset-session-artifact-y-docs.ts"],"names":[],"mappings":";;AAEA,8DAMC;AARD,6EAAyE;AAElE,KAAK,UAAU,yBAAyB,CAC7C,SAAiB,EACjB,aAAuB;IAEvB,MAAM,KAAK,GAAG,IAAA,uDAA0B,GAAE,CAAA;IAC1C,MAAM,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;AAC7F,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function buildSessionArtifactDocumentId(sessionId: string, artifactPath: string): string;
|
|
2
|
+
export declare function parseSessionArtifactDocumentId(documentIdentifier: string): {
|
|
3
|
+
sessionId: string;
|
|
4
|
+
artifactPath: string;
|
|
5
|
+
} | null;
|
|
6
|
+
//# sourceMappingURL=session-artifact-document-id.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-artifact-document-id.d.ts","sourceRoot":"","sources":["../../src/realtime/session-artifact-document-id.ts"],"names":[],"mappings":"AAIA,wBAAgB,8BAA8B,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAI9F;AAED,wBAAgB,8BAA8B,CAC5C,kBAAkB,EAAE,MAAM,GACzB;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAuBpD"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildSessionArtifactDocumentId = buildSessionArtifactDocumentId;
|
|
4
|
+
exports.parseSessionArtifactDocumentId = parseSessionArtifactDocumentId;
|
|
5
|
+
const paths_1 = require("../lib/session-pages/paths");
|
|
6
|
+
const DOCUMENT_ID_PREFIX = 'session:';
|
|
7
|
+
function buildSessionArtifactDocumentId(sessionId, artifactPath) {
|
|
8
|
+
(0, paths_1.assertValidSessionId)(sessionId);
|
|
9
|
+
const normalizedPath = (0, paths_1.normalizeArtifactPath)(artifactPath);
|
|
10
|
+
return `${DOCUMENT_ID_PREFIX}${sessionId}:${normalizedPath}`;
|
|
11
|
+
}
|
|
12
|
+
function parseSessionArtifactDocumentId(documentIdentifier) {
|
|
13
|
+
if (!documentIdentifier.startsWith(DOCUMENT_ID_PREFIX)) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
const rest = documentIdentifier.slice(DOCUMENT_ID_PREFIX.length);
|
|
17
|
+
const separator = rest.indexOf(':');
|
|
18
|
+
if (separator <= 0) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
const sessionId = rest.slice(0, separator);
|
|
22
|
+
const artifactPath = rest.slice(separator + 1);
|
|
23
|
+
if (!sessionId || !artifactPath) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
(0, paths_1.assertValidSessionId)(sessionId);
|
|
28
|
+
return { sessionId, artifactPath: (0, paths_1.normalizeArtifactPath)(artifactPath) };
|
|
29
|
+
}
|
|
30
|
+
catch (_a) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=session-artifact-document-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-artifact-document-id.js","sourceRoot":"","sources":["../../src/realtime/session-artifact-document-id.ts"],"names":[],"mappings":";;AAIA,wEAIC;AAED,wEAyBC;AAnCD,sDAAwF;AAExF,MAAM,kBAAkB,GAAG,UAAU,CAAA;AAErC,SAAgB,8BAA8B,CAAC,SAAiB,EAAE,YAAoB;IACpF,IAAA,4BAAoB,EAAC,SAAS,CAAC,CAAA;IAC/B,MAAM,cAAc,GAAG,IAAA,6BAAqB,EAAC,YAAY,CAAC,CAAA;IAC1D,OAAO,GAAG,kBAAkB,GAAG,SAAS,IAAI,cAAc,EAAE,CAAA;AAC9D,CAAC;AAED,SAAgB,8BAA8B,CAC5C,kBAA0B;IAE1B,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACvD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAChE,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACnC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACnB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;IAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;IAC9C,IAAI,CAAC,SAAS,IAAI,CAAC,YAAY,EAAE,CAAC;QAChC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,CAAC;QACH,IAAA,4BAAoB,EAAC,SAAS,CAAC,CAAA;QAC/B,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,IAAA,6BAAqB,EAAC,YAAY,CAAC,EAAE,CAAA;IACzE,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { GenericYSocketIO, type GenericYjsSocketData } from '@multiplayer-app/realtime-server';
|
|
2
|
+
interface PersistedUpdateRow {
|
|
3
|
+
_id: {
|
|
4
|
+
toString(): string;
|
|
5
|
+
};
|
|
6
|
+
update?: Buffer | Uint8Array;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Yjs relay for session artifact files. Loads initial state from disk and persists edits back.
|
|
10
|
+
*/
|
|
11
|
+
export declare class SessionArtifactYSocketIO extends GenericYSocketIO {
|
|
12
|
+
private readonly store;
|
|
13
|
+
initialize(): void;
|
|
14
|
+
protected getNonCommittedUpdates(_socketData: GenericYjsSocketData, documentIdentifier: string): Promise<PersistedUpdateRow[] | undefined>;
|
|
15
|
+
protected storeUpdate(_data: GenericYjsSocketData, update: Uint8Array, documentIdentifier: string): Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=session-artifact-y-socket-io.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-artifact-y-socket-io.d.ts","sourceRoot":"","sources":["../../src/realtime/session-artifact-y-socket-io.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAEhB,KAAK,oBAAoB,EAC1B,MAAM,kCAAkC,CAAA;AAMzC,UAAU,kBAAkB;IAC1B,GAAG,EAAE;QAAE,QAAQ,IAAI,MAAM,CAAA;KAAE,CAAA;IAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,CAAA;CAC7B;AAED;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,gBAAgB;IAC5D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+B;IAErD,UAAU,IAAI,IAAI;cAiBO,sBAAsB,CAC7C,WAAW,EAAE,oBAAoB,EACjC,kBAAkB,EAAE,MAAM,GACzB,OAAO,CAAC,kBAAkB,EAAE,GAAG,SAAS,CAAC;cA4BnB,WAAW,CAClC,KAAK,EAAE,oBAAoB,EAC3B,MAAM,EAAE,UAAU,EAClB,kBAAkB,EAAE,MAAM,GACzB,OAAO,CAAC,IAAI,CAAC;CAmBjB"}
|