foundation-ai-agent 1.0.0
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 +338 -0
- package/dist/compat/butler-cloud.d.ts +33 -0
- package/dist/compat/butler-cloud.d.ts.map +1 -0
- package/dist/compat/butler-cloud.js +69 -0
- package/dist/compat/butler-cloud.js.map +1 -0
- package/dist/compat/butler-edge.d.ts +34 -0
- package/dist/compat/butler-edge.d.ts.map +1 -0
- package/dist/compat/butler-edge.js +62 -0
- package/dist/compat/butler-edge.js.map +1 -0
- package/dist/compat/butler-pair.d.ts +27 -0
- package/dist/compat/butler-pair.d.ts.map +1 -0
- package/dist/compat/butler-pair.js +23 -0
- package/dist/compat/butler-pair.js.map +1 -0
- package/dist/compat/entry.d.ts +26 -0
- package/dist/compat/entry.d.ts.map +1 -0
- package/dist/compat/entry.js +35 -0
- package/dist/compat/entry.js.map +1 -0
- package/dist/compat/index.d.ts +12 -0
- package/dist/compat/index.d.ts.map +1 -0
- package/dist/compat/index.js +12 -0
- package/dist/compat/index.js.map +1 -0
- package/dist/compat/queue.d.ts +31 -0
- package/dist/compat/queue.d.ts.map +1 -0
- package/dist/compat/queue.js +54 -0
- package/dist/compat/queue.js.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -0
- package/dist/ledger.d.ts +28 -0
- package/dist/ledger.d.ts.map +1 -0
- package/dist/ledger.js +62 -0
- package/dist/ledger.js.map +1 -0
- package/dist/observability/index.d.ts +4 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +2 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/observer.d.ts +37 -0
- package/dist/observability/observer.d.ts.map +1 -0
- package/dist/observability/observer.js +53 -0
- package/dist/observability/observer.js.map +1 -0
- package/dist/observability/types.d.ts +92 -0
- package/dist/observability/types.d.ts.map +1 -0
- package/dist/observability/types.js +9 -0
- package/dist/observability/types.js.map +1 -0
- package/dist/s01-realtime/index.d.ts +3 -0
- package/dist/s01-realtime/index.d.ts.map +1 -0
- package/dist/s01-realtime/index.js +2 -0
- package/dist/s01-realtime/index.js.map +1 -0
- package/dist/s01-realtime/signaling.d.ts +78 -0
- package/dist/s01-realtime/signaling.d.ts.map +1 -0
- package/dist/s01-realtime/signaling.js +20 -0
- package/dist/s01-realtime/signaling.js.map +1 -0
- package/dist/s01-realtime/types.d.ts +40 -0
- package/dist/s01-realtime/types.d.ts.map +1 -0
- package/dist/s01-realtime/types.js +8 -0
- package/dist/s01-realtime/types.js.map +1 -0
- package/dist/s02-crdt/index.d.ts +3 -0
- package/dist/s02-crdt/index.d.ts.map +1 -0
- package/dist/s02-crdt/index.js +2 -0
- package/dist/s02-crdt/index.js.map +1 -0
- package/dist/s02-crdt/types.d.ts +45 -0
- package/dist/s02-crdt/types.d.ts.map +1 -0
- package/dist/s02-crdt/types.js +10 -0
- package/dist/s02-crdt/types.js.map +1 -0
- package/dist/s02-crdt/yjs.d.ts +9 -0
- package/dist/s02-crdt/yjs.d.ts.map +1 -0
- package/dist/s02-crdt/yjs.js +67 -0
- package/dist/s02-crdt/yjs.js.map +1 -0
- package/dist/s03-streaming/index.d.ts +3 -0
- package/dist/s03-streaming/index.d.ts.map +1 -0
- package/dist/s03-streaming/index.js +2 -0
- package/dist/s03-streaming/index.js.map +1 -0
- package/dist/s03-streaming/playlist.d.ts +8 -0
- package/dist/s03-streaming/playlist.d.ts.map +1 -0
- package/dist/s03-streaming/playlist.js +49 -0
- package/dist/s03-streaming/playlist.js.map +1 -0
- package/dist/s03-streaming/types.d.ts +69 -0
- package/dist/s03-streaming/types.d.ts.map +1 -0
- package/dist/s03-streaming/types.js +8 -0
- package/dist/s03-streaming/types.js.map +1 -0
- package/dist/s04-messaging/index.d.ts +3 -0
- package/dist/s04-messaging/index.d.ts.map +1 -0
- package/dist/s04-messaging/index.js +2 -0
- package/dist/s04-messaging/index.js.map +1 -0
- package/dist/s04-messaging/serializer.d.ts +11 -0
- package/dist/s04-messaging/serializer.d.ts.map +1 -0
- package/dist/s04-messaging/serializer.js +45 -0
- package/dist/s04-messaging/serializer.js.map +1 -0
- package/dist/s04-messaging/types.d.ts +54 -0
- package/dist/s04-messaging/types.d.ts.map +1 -0
- package/dist/s04-messaging/types.js +8 -0
- package/dist/s04-messaging/types.js.map +1 -0
- package/dist/s05-rendering/index.d.ts +3 -0
- package/dist/s05-rendering/index.d.ts.map +1 -0
- package/dist/s05-rendering/index.js +3 -0
- package/dist/s05-rendering/index.js.map +1 -0
- package/dist/s05-rendering/state-machine.d.ts +20 -0
- package/dist/s05-rendering/state-machine.d.ts.map +1 -0
- package/dist/s05-rendering/state-machine.js +47 -0
- package/dist/s05-rendering/state-machine.js.map +1 -0
- package/dist/s05-rendering/types.d.ts +13 -0
- package/dist/s05-rendering/types.d.ts.map +1 -0
- package/dist/s05-rendering/types.js +16 -0
- package/dist/s05-rendering/types.js.map +1 -0
- package/dist/s06-payments/billing.d.ts +9 -0
- package/dist/s06-payments/billing.d.ts.map +1 -0
- package/dist/s06-payments/billing.js +79 -0
- package/dist/s06-payments/billing.js.map +1 -0
- package/dist/s06-payments/index.d.ts +4 -0
- package/dist/s06-payments/index.d.ts.map +1 -0
- package/dist/s06-payments/index.js +3 -0
- package/dist/s06-payments/index.js.map +1 -0
- package/dist/s06-payments/stripe.d.ts +52 -0
- package/dist/s06-payments/stripe.d.ts.map +1 -0
- package/dist/s06-payments/stripe.js +103 -0
- package/dist/s06-payments/stripe.js.map +1 -0
- package/dist/s06-payments/types.d.ts +80 -0
- package/dist/s06-payments/types.d.ts.map +1 -0
- package/dist/s06-payments/types.js +13 -0
- package/dist/s06-payments/types.js.map +1 -0
- package/dist/s07-identity/index.d.ts +2 -0
- package/dist/s07-identity/index.d.ts.map +1 -0
- package/dist/s07-identity/index.js +2 -0
- package/dist/s07-identity/index.js.map +1 -0
- package/dist/s07-identity/session.d.ts +53 -0
- package/dist/s07-identity/session.d.ts.map +1 -0
- package/dist/s07-identity/session.js +114 -0
- package/dist/s07-identity/session.js.map +1 -0
- package/dist/s08-containers/docker.d.ts +39 -0
- package/dist/s08-containers/docker.d.ts.map +1 -0
- package/dist/s08-containers/docker.js +72 -0
- package/dist/s08-containers/docker.js.map +1 -0
- package/dist/s08-containers/index.d.ts +4 -0
- package/dist/s08-containers/index.d.ts.map +1 -0
- package/dist/s08-containers/index.js +3 -0
- package/dist/s08-containers/index.js.map +1 -0
- package/dist/s08-containers/sandbox.d.ts +10 -0
- package/dist/s08-containers/sandbox.d.ts.map +1 -0
- package/dist/s08-containers/sandbox.js +68 -0
- package/dist/s08-containers/sandbox.js.map +1 -0
- package/dist/s08-containers/types.d.ts +66 -0
- package/dist/s08-containers/types.d.ts.map +1 -0
- package/dist/s08-containers/types.js +8 -0
- package/dist/s08-containers/types.js.map +1 -0
- package/dist/s09-persistence/cold.d.ts +43 -0
- package/dist/s09-persistence/cold.d.ts.map +1 -0
- package/dist/s09-persistence/cold.js +135 -0
- package/dist/s09-persistence/cold.js.map +1 -0
- package/dist/s09-persistence/hot.d.ts +32 -0
- package/dist/s09-persistence/hot.d.ts.map +1 -0
- package/dist/s09-persistence/hot.js +63 -0
- package/dist/s09-persistence/hot.js.map +1 -0
- package/dist/s09-persistence/index.d.ts +6 -0
- package/dist/s09-persistence/index.d.ts.map +1 -0
- package/dist/s09-persistence/index.js +6 -0
- package/dist/s09-persistence/index.js.map +1 -0
- package/dist/s09-persistence/pg-warm.d.ts +30 -0
- package/dist/s09-persistence/pg-warm.d.ts.map +1 -0
- package/dist/s09-persistence/pg-warm.js +139 -0
- package/dist/s09-persistence/pg-warm.js.map +1 -0
- package/dist/s09-persistence/s3-cold.d.ts +39 -0
- package/dist/s09-persistence/s3-cold.d.ts.map +1 -0
- package/dist/s09-persistence/s3-cold.js +102 -0
- package/dist/s09-persistence/s3-cold.js.map +1 -0
- package/dist/s09-persistence/warm.d.ts +33 -0
- package/dist/s09-persistence/warm.d.ts.map +1 -0
- package/dist/s09-persistence/warm.js +169 -0
- package/dist/s09-persistence/warm.js.map +1 -0
- package/dist/s10-inference/action.d.ts +39 -0
- package/dist/s10-inference/action.d.ts.map +1 -0
- package/dist/s10-inference/action.js +73 -0
- package/dist/s10-inference/action.js.map +1 -0
- package/dist/s10-inference/agents/index.d.ts +3 -0
- package/dist/s10-inference/agents/index.d.ts.map +1 -0
- package/dist/s10-inference/agents/index.js +3 -0
- package/dist/s10-inference/agents/index.js.map +1 -0
- package/dist/s10-inference/agents/mirror.d.ts +73 -0
- package/dist/s10-inference/agents/mirror.d.ts.map +1 -0
- package/dist/s10-inference/agents/mirror.js +106 -0
- package/dist/s10-inference/agents/mirror.js.map +1 -0
- package/dist/s10-inference/agents/registry.d.ts +64 -0
- package/dist/s10-inference/agents/registry.d.ts.map +1 -0
- package/dist/s10-inference/agents/registry.js +92 -0
- package/dist/s10-inference/agents/registry.js.map +1 -0
- package/dist/s10-inference/context.d.ts +39 -0
- package/dist/s10-inference/context.d.ts.map +1 -0
- package/dist/s10-inference/context.js +36 -0
- package/dist/s10-inference/context.js.map +1 -0
- package/dist/s10-inference/index.d.ts +7 -0
- package/dist/s10-inference/index.d.ts.map +1 -0
- package/dist/s10-inference/index.js +6 -0
- package/dist/s10-inference/index.js.map +1 -0
- package/dist/s10-inference/loop.d.ts +42 -0
- package/dist/s10-inference/loop.d.ts.map +1 -0
- package/dist/s10-inference/loop.js +104 -0
- package/dist/s10-inference/loop.js.map +1 -0
- package/dist/s10-inference/provider.d.ts +43 -0
- package/dist/s10-inference/provider.d.ts.map +1 -0
- package/dist/s10-inference/provider.js +9 -0
- package/dist/s10-inference/provider.js.map +1 -0
- package/dist/s10-inference/providers/anthropic.d.ts +13 -0
- package/dist/s10-inference/providers/anthropic.d.ts.map +1 -0
- package/dist/s10-inference/providers/anthropic.js +168 -0
- package/dist/s10-inference/providers/anthropic.js.map +1 -0
- package/dist/s10-inference/providers/ollama.d.ts +9 -0
- package/dist/s10-inference/providers/ollama.d.ts.map +1 -0
- package/dist/s10-inference/providers/ollama.js +102 -0
- package/dist/s10-inference/providers/ollama.js.map +1 -0
- package/dist/s10-inference/providers/openai.d.ts +14 -0
- package/dist/s10-inference/providers/openai.d.ts.map +1 -0
- package/dist/s10-inference/providers/openai.js +172 -0
- package/dist/s10-inference/providers/openai.js.map +1 -0
- package/dist/s11-transport/index.d.ts +4 -0
- package/dist/s11-transport/index.d.ts.map +1 -0
- package/dist/s11-transport/index.js +4 -0
- package/dist/s11-transport/index.js.map +1 -0
- package/dist/s11-transport/room.d.ts +28 -0
- package/dist/s11-transport/room.d.ts.map +1 -0
- package/dist/s11-transport/room.js +69 -0
- package/dist/s11-transport/room.js.map +1 -0
- package/dist/s11-transport/transport.d.ts +20 -0
- package/dist/s11-transport/transport.d.ts.map +1 -0
- package/dist/s11-transport/transport.js +39 -0
- package/dist/s11-transport/transport.js.map +1 -0
- package/dist/s11-transport/ws.d.ts +15 -0
- package/dist/s11-transport/ws.d.ts.map +1 -0
- package/dist/s11-transport/ws.js +71 -0
- package/dist/s11-transport/ws.js.map +1 -0
- package/dist/s12-versioncontrol/index.d.ts +4 -0
- package/dist/s12-versioncontrol/index.d.ts.map +1 -0
- package/dist/s12-versioncontrol/index.js +3 -0
- package/dist/s12-versioncontrol/index.js.map +1 -0
- package/dist/s12-versioncontrol/ledger-dag.d.ts +25 -0
- package/dist/s12-versioncontrol/ledger-dag.d.ts.map +1 -0
- package/dist/s12-versioncontrol/ledger-dag.js +84 -0
- package/dist/s12-versioncontrol/ledger-dag.js.map +1 -0
- package/dist/s12-versioncontrol/merkle.d.ts +16 -0
- package/dist/s12-versioncontrol/merkle.d.ts.map +1 -0
- package/dist/s12-versioncontrol/merkle.js +81 -0
- package/dist/s12-versioncontrol/merkle.js.map +1 -0
- package/dist/s12-versioncontrol/types.d.ts +50 -0
- package/dist/s12-versioncontrol/types.d.ts.map +1 -0
- package/dist/s12-versioncontrol/types.js +8 -0
- package/dist/s12-versioncontrol/types.js.map +1 -0
- package/dist/touches/audio-tap.d.ts +32 -0
- package/dist/touches/audio-tap.d.ts.map +1 -0
- package/dist/touches/audio-tap.js +54 -0
- package/dist/touches/audio-tap.js.map +1 -0
- package/dist/touches/avatar-state.d.ts +22 -0
- package/dist/touches/avatar-state.d.ts.map +1 -0
- package/dist/touches/avatar-state.js +35 -0
- package/dist/touches/avatar-state.js.map +1 -0
- package/dist/touches/container-room.d.ts +17 -0
- package/dist/touches/container-room.d.ts.map +1 -0
- package/dist/touches/container-room.js +34 -0
- package/dist/touches/container-room.js.map +1 -0
- package/dist/touches/cost-billing.d.ts +20 -0
- package/dist/touches/cost-billing.d.ts.map +1 -0
- package/dist/touches/cost-billing.js +26 -0
- package/dist/touches/cost-billing.js.map +1 -0
- package/dist/touches/cost-track.d.ts +19 -0
- package/dist/touches/cost-track.d.ts.map +1 -0
- package/dist/touches/cost-track.js +20 -0
- package/dist/touches/cost-track.js.map +1 -0
- package/dist/touches/crdt-sync.d.ts +14 -0
- package/dist/touches/crdt-sync.d.ts.map +1 -0
- package/dist/touches/crdt-sync.js +49 -0
- package/dist/touches/crdt-sync.js.map +1 -0
- package/dist/touches/identity-gate.d.ts +22 -0
- package/dist/touches/identity-gate.d.ts.map +1 -0
- package/dist/touches/identity-gate.js +24 -0
- package/dist/touches/identity-gate.js.map +1 -0
- package/dist/touches/index.d.ts +14 -0
- package/dist/touches/index.d.ts.map +1 -0
- package/dist/touches/index.js +14 -0
- package/dist/touches/index.js.map +1 -0
- package/dist/touches/memory-persist.d.ts +29 -0
- package/dist/touches/memory-persist.d.ts.map +1 -0
- package/dist/touches/memory-persist.js +49 -0
- package/dist/touches/memory-persist.js.map +1 -0
- package/dist/touches/messenger-bridge.d.ts +19 -0
- package/dist/touches/messenger-bridge.d.ts.map +1 -0
- package/dist/touches/messenger-bridge.js +49 -0
- package/dist/touches/messenger-bridge.js.map +1 -0
- package/dist/touches/sentiment-tap.d.ts +43 -0
- package/dist/touches/sentiment-tap.d.ts.map +1 -0
- package/dist/touches/sentiment-tap.js +81 -0
- package/dist/touches/sentiment-tap.js.map +1 -0
- package/dist/touches/stichwort.d.ts +46 -0
- package/dist/touches/stichwort.d.ts.map +1 -0
- package/dist/touches/stichwort.js +64 -0
- package/dist/touches/stichwort.js.map +1 -0
- package/dist/touches/transport-signal.d.ts +26 -0
- package/dist/touches/transport-signal.d.ts.map +1 -0
- package/dist/touches/transport-signal.js +49 -0
- package/dist/touches/transport-signal.js.map +1 -0
- package/dist/touches/version-persist.d.ts +18 -0
- package/dist/touches/version-persist.d.ts.map +1 -0
- package/dist/touches/version-persist.js +38 -0
- package/dist/touches/version-persist.js.map +1 -0
- package/dist/types.d.ts +61 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +13 -0
- package/dist/types.js.map +1 -0
- package/package.json +117 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/s01-realtime/index.ts"],"names":[],"mappings":"AAWA,OAAO,EAcL,kBAAkB,GACnB,MAAM,gBAAgB,CAAA"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* S1 — Signaling Messages
|
|
3
|
+
*
|
|
4
|
+
* Alle Signaling-Nachrichten als typisierte Events.
|
|
5
|
+
* Generalisiert aus 0room0's 11 Message-Typen + 14 mediasoup-Typen.
|
|
6
|
+
* Hier als Foundation Event-Subtypen — transportagnostisch.
|
|
7
|
+
*/
|
|
8
|
+
import type { PeerInfo } from './types.js';
|
|
9
|
+
export type JoinMessage = {
|
|
10
|
+
type: 'join';
|
|
11
|
+
roomId: string;
|
|
12
|
+
peer: PeerInfo;
|
|
13
|
+
};
|
|
14
|
+
export type LeaveMessage = {
|
|
15
|
+
type: 'leave';
|
|
16
|
+
roomId: string;
|
|
17
|
+
peerId: string;
|
|
18
|
+
};
|
|
19
|
+
export type OfferMessage = {
|
|
20
|
+
type: 'offer';
|
|
21
|
+
sdp: string;
|
|
22
|
+
peerId: string;
|
|
23
|
+
};
|
|
24
|
+
export type AnswerMessage = {
|
|
25
|
+
type: 'answer';
|
|
26
|
+
sdp: string;
|
|
27
|
+
peerId: string;
|
|
28
|
+
};
|
|
29
|
+
export type IceCandidateMessage = {
|
|
30
|
+
type: 'ice-candidate';
|
|
31
|
+
candidate: unknown;
|
|
32
|
+
peerId: string;
|
|
33
|
+
};
|
|
34
|
+
export type AgentJoinMessage = {
|
|
35
|
+
type: 'agent-join';
|
|
36
|
+
roomId: string;
|
|
37
|
+
agentId: string;
|
|
38
|
+
name: string;
|
|
39
|
+
};
|
|
40
|
+
export type AgentGestureMessage = {
|
|
41
|
+
type: 'agent-gesture';
|
|
42
|
+
agentId: string;
|
|
43
|
+
gesture: string;
|
|
44
|
+
};
|
|
45
|
+
export type AgentQueueMessage = {
|
|
46
|
+
type: 'agent-queue';
|
|
47
|
+
agentId: string;
|
|
48
|
+
action: 'add' | 'release' | 'dismiss';
|
|
49
|
+
itemId: string;
|
|
50
|
+
title?: string;
|
|
51
|
+
};
|
|
52
|
+
export type ChatMessage = {
|
|
53
|
+
type: 'chat';
|
|
54
|
+
senderId: string;
|
|
55
|
+
target: 'room' | 'host' | 'subhost' | string;
|
|
56
|
+
text: string;
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Consent-Level hier als Literal-Union, NICHT als Import von S7.
|
|
60
|
+
* Bewusste Schicht-Isolation: S1 hängt nicht von S7 ab.
|
|
61
|
+
* Wenn ein 4. Level hinzukommt → shared Type in types.ts nötig.
|
|
62
|
+
*/
|
|
63
|
+
export type ConsentUpdateMessage = {
|
|
64
|
+
type: 'consent-update';
|
|
65
|
+
userId: string;
|
|
66
|
+
feature: string;
|
|
67
|
+
level: 'observe' | 'assist' | 'act';
|
|
68
|
+
};
|
|
69
|
+
export type SyncStateMessage = {
|
|
70
|
+
type: 'sync-state';
|
|
71
|
+
payload: unknown;
|
|
72
|
+
};
|
|
73
|
+
export type SignalingMessage = JoinMessage | LeaveMessage | OfferMessage | AnswerMessage | IceCandidateMessage | AgentJoinMessage | AgentGestureMessage | AgentQueueMessage | ChatMessage | ConsentUpdateMessage | SyncStateMessage;
|
|
74
|
+
/** Handler für eingehende Signaling-Nachrichten */
|
|
75
|
+
export type SignalingHandler = (message: SignalingMessage, senderId: string) => void;
|
|
76
|
+
/** Type guard — prüft gegen bekannte 11 Typen */
|
|
77
|
+
export declare function isSignalingMessage(obj: unknown): obj is SignalingMessage;
|
|
78
|
+
//# sourceMappingURL=signaling.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signaling.d.ts","sourceRoot":"","sources":["../../src/s01-realtime/signaling.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAA2C,MAAM,YAAY,CAAA;AAInF,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,QAAQ,CAAA;CACf,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAID,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,OAAO,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,QAAQ,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,eAAe,CAAA;IACrB,SAAS,EAAE,OAAO,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAID,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,YAAY,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,eAAe,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,aAAa,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,KAAK,GAAG,SAAS,GAAG,SAAS,CAAA;IACrC,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAID,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAA;IAC5C,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,gBAAgB,CAAA;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,SAAS,GAAG,QAAQ,GAAG,KAAK,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,YAAY,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAID,MAAM,MAAM,gBAAgB,GACxB,WAAW,GACX,YAAY,GACZ,YAAY,GACZ,aAAa,GACb,mBAAmB,GACnB,gBAAgB,GAChB,mBAAmB,GACnB,iBAAiB,GACjB,WAAW,GACX,oBAAoB,GACpB,gBAAgB,CAAA;AAEpB,mDAAmD;AACnD,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;AAQpF,iDAAiD;AACjD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,gBAAgB,CAIxE"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* S1 — Signaling Messages
|
|
3
|
+
*
|
|
4
|
+
* Alle Signaling-Nachrichten als typisierte Events.
|
|
5
|
+
* Generalisiert aus 0room0's 11 Message-Typen + 14 mediasoup-Typen.
|
|
6
|
+
* Hier als Foundation Event-Subtypen — transportagnostisch.
|
|
7
|
+
*/
|
|
8
|
+
const SIGNALING_TYPES = new Set([
|
|
9
|
+
'join', 'leave', 'offer', 'answer', 'ice-candidate',
|
|
10
|
+
'agent-join', 'agent-gesture', 'agent-queue',
|
|
11
|
+
'chat', 'consent-update', 'sync-state',
|
|
12
|
+
]);
|
|
13
|
+
/** Type guard — prüft gegen bekannte 11 Typen */
|
|
14
|
+
export function isSignalingMessage(obj) {
|
|
15
|
+
if (typeof obj !== 'object' || obj === null)
|
|
16
|
+
return false;
|
|
17
|
+
const typed = obj;
|
|
18
|
+
return typeof typed.type === 'string' && SIGNALING_TYPES.has(typed.type);
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=signaling.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signaling.js","sourceRoot":"","sources":["../../src/s01-realtime/signaling.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAyGH,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe;IACnD,YAAY,EAAE,eAAe,EAAE,aAAa;IAC5C,MAAM,EAAE,gBAAgB,EAAE,YAAY;CACvC,CAAC,CAAA;AAEF,iDAAiD;AACjD,MAAM,UAAU,kBAAkB,CAAC,GAAY;IAC7C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IACzD,MAAM,KAAK,GAAG,GAA8B,CAAA;IAC5C,OAAO,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;AAC1E,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* S1 — Realtime Types
|
|
3
|
+
*
|
|
4
|
+
* Generalisiert aus 0room0's contracts/signaling.ts + contracts/mediasoup.ts.
|
|
5
|
+
* Keine mediasoup-Dependency. Reine Types.
|
|
6
|
+
*/
|
|
7
|
+
export type MediaKind = 'audio' | 'video';
|
|
8
|
+
export type TransportDirection = 'send' | 'recv';
|
|
9
|
+
export type MediaTrack = {
|
|
10
|
+
id: string;
|
|
11
|
+
kind: MediaKind;
|
|
12
|
+
peerId: string;
|
|
13
|
+
label?: string;
|
|
14
|
+
};
|
|
15
|
+
export type ProducerInfo = {
|
|
16
|
+
id: string;
|
|
17
|
+
peerId: string;
|
|
18
|
+
kind: MediaKind;
|
|
19
|
+
};
|
|
20
|
+
export type ConsumerInfo = {
|
|
21
|
+
id: string;
|
|
22
|
+
producerId: string;
|
|
23
|
+
peerId: string;
|
|
24
|
+
kind: MediaKind;
|
|
25
|
+
};
|
|
26
|
+
export type TransportInfo = {
|
|
27
|
+
id: string;
|
|
28
|
+
direction: TransportDirection;
|
|
29
|
+
peerId: string;
|
|
30
|
+
iceParameters: unknown;
|
|
31
|
+
iceCandidates: unknown[];
|
|
32
|
+
dtlsParameters: unknown;
|
|
33
|
+
};
|
|
34
|
+
export type PeerRole = 'host' | 'subhost' | 'participant' | 'agent';
|
|
35
|
+
export type PeerInfo = {
|
|
36
|
+
id: string;
|
|
37
|
+
name: string;
|
|
38
|
+
role: PeerRole;
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/s01-realtime/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,CAAA;AACzC,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,MAAM,CAAA;AAEhD,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,SAAS,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,SAAS,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,SAAS,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,kBAAkB,CAAA;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,EAAE,OAAO,CAAA;IACtB,aAAa,EAAE,OAAO,EAAE,CAAA;IACxB,cAAc,EAAE,OAAO,CAAA;CACxB,CAAA;AAID,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,aAAa,GAAG,OAAO,CAAA;AAEnE,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,QAAQ,CAAA;CACf,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/s01-realtime/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/s02-crdt/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,sBAAsB,EAC3B,KAAK,WAAW,EAChB,KAAK,SAAS,GACf,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/s02-crdt/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* S2 — CRDT Types
|
|
3
|
+
*
|
|
4
|
+
* Interface first (K5). Yjs ist eine Implementierung, nicht die Definition.
|
|
5
|
+
* SharedDoc abstrahiert über Yjs, Automerge, diamond-types.
|
|
6
|
+
*
|
|
7
|
+
* 4 Methoden: applyUpdate, getState, onChange, destroy.
|
|
8
|
+
*/
|
|
9
|
+
/** Opake Update-Payload. Implementierungsabhängig (Yjs = Uint8Array). */
|
|
10
|
+
export type UpdatePayload = Uint8Array;
|
|
11
|
+
/** Shared Document Interface — CRDT-agnostisch */
|
|
12
|
+
export type SharedDoc = {
|
|
13
|
+
/** Apply a remote update */
|
|
14
|
+
applyUpdate(update: UpdatePayload): void;
|
|
15
|
+
/** Get the full serialized state for sync */
|
|
16
|
+
getState(): UpdatePayload;
|
|
17
|
+
/** Subscribe to local changes */
|
|
18
|
+
onChange(handler: (update: UpdatePayload) => void): () => void;
|
|
19
|
+
/** Cleanup */
|
|
20
|
+
destroy(): void;
|
|
21
|
+
};
|
|
22
|
+
/** Typed accessors for structured data within the doc */
|
|
23
|
+
export type SharedArray<T> = {
|
|
24
|
+
push(item: T): void;
|
|
25
|
+
toArray(): T[];
|
|
26
|
+
readonly length: number;
|
|
27
|
+
onChange(handler: () => void): () => void;
|
|
28
|
+
};
|
|
29
|
+
export type SharedMap<V> = {
|
|
30
|
+
set(key: string, value: V): void;
|
|
31
|
+
get(key: string): V | undefined;
|
|
32
|
+
delete(key: string): void;
|
|
33
|
+
has(key: string): boolean;
|
|
34
|
+
entries(): [string, V][];
|
|
35
|
+
onChange(handler: () => void): () => void;
|
|
36
|
+
};
|
|
37
|
+
/** Factory result — doc + typed accessors */
|
|
38
|
+
export type SharedDocWithAccessors = {
|
|
39
|
+
doc: SharedDoc;
|
|
40
|
+
/** Append-only log (Ledger, Chat) */
|
|
41
|
+
getArray<T>(name: string): SharedArray<T>;
|
|
42
|
+
/** Key-Value state (Gestures, Consent, Queue) */
|
|
43
|
+
getMap<V>(name: string): SharedMap<V>;
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/s02-crdt/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,yEAAyE;AACzE,MAAM,MAAM,aAAa,GAAG,UAAU,CAAA;AAEtC,kDAAkD;AAClD,MAAM,MAAM,SAAS,GAAG;IACtB,4BAA4B;IAC5B,WAAW,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAA;IACxC,6CAA6C;IAC7C,QAAQ,IAAI,aAAa,CAAA;IACzB,iCAAiC;IACjC,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,GAAG,MAAM,IAAI,CAAA;IAC9D,cAAc;IACd,OAAO,IAAI,IAAI,CAAA;CAChB,CAAA;AAED,yDAAyD;AACzD,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAC3B,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAA;IACnB,OAAO,IAAI,CAAC,EAAE,CAAA;IACd,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAA;CAC1C,CAAA;AAED,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI;IACzB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAA;IAChC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAA;IAC/B,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;IACzB,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAA;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAA;CAC1C,CAAA;AAED,6CAA6C;AAC7C,MAAM,MAAM,sBAAsB,GAAG;IACnC,GAAG,EAAE,SAAS,CAAA;IACd,qCAAqC;IACrC,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;IACzC,iDAAiD;IACjD,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;CACtC,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* S2 — CRDT Types
|
|
3
|
+
*
|
|
4
|
+
* Interface first (K5). Yjs ist eine Implementierung, nicht die Definition.
|
|
5
|
+
* SharedDoc abstrahiert über Yjs, Automerge, diamond-types.
|
|
6
|
+
*
|
|
7
|
+
* 4 Methoden: applyUpdate, getState, onChange, destroy.
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/s02-crdt/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* S2 — Yjs Implementation
|
|
3
|
+
*
|
|
4
|
+
* Erste Implementierung von SharedDoc. Yjs ist die Referenz-CRDT-Library.
|
|
5
|
+
* Alles yjs-Spezifische bleibt in dieser Datei.
|
|
6
|
+
*/
|
|
7
|
+
import type { SharedDocWithAccessors } from './types.js';
|
|
8
|
+
export declare function createYjsDoc(): SharedDocWithAccessors;
|
|
9
|
+
//# sourceMappingURL=yjs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yjs.d.ts","sourceRoot":"","sources":["../../src/s02-crdt/yjs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAa,sBAAsB,EAAyC,MAAM,YAAY,CAAA;AAE1G,wBAAgB,YAAY,IAAI,sBAAsB,CAgErD"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* S2 — Yjs Implementation
|
|
3
|
+
*
|
|
4
|
+
* Erste Implementierung von SharedDoc. Yjs ist die Referenz-CRDT-Library.
|
|
5
|
+
* Alles yjs-Spezifische bleibt in dieser Datei.
|
|
6
|
+
*/
|
|
7
|
+
import * as Y from 'yjs';
|
|
8
|
+
export function createYjsDoc() {
|
|
9
|
+
const ydoc = new Y.Doc();
|
|
10
|
+
const handlers = [];
|
|
11
|
+
ydoc.on('update', (update) => {
|
|
12
|
+
for (const handler of handlers)
|
|
13
|
+
handler(update);
|
|
14
|
+
});
|
|
15
|
+
const doc = {
|
|
16
|
+
applyUpdate(update) {
|
|
17
|
+
Y.applyUpdate(ydoc, update);
|
|
18
|
+
},
|
|
19
|
+
getState() {
|
|
20
|
+
return Y.encodeStateAsUpdate(ydoc);
|
|
21
|
+
},
|
|
22
|
+
onChange(handler) {
|
|
23
|
+
handlers.push(handler);
|
|
24
|
+
return () => {
|
|
25
|
+
const idx = handlers.indexOf(handler);
|
|
26
|
+
if (idx >= 0)
|
|
27
|
+
handlers.splice(idx, 1);
|
|
28
|
+
};
|
|
29
|
+
},
|
|
30
|
+
destroy() {
|
|
31
|
+
handlers.length = 0;
|
|
32
|
+
ydoc.destroy();
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
return {
|
|
36
|
+
doc,
|
|
37
|
+
getArray(name) {
|
|
38
|
+
const yarray = ydoc.getArray(name);
|
|
39
|
+
return {
|
|
40
|
+
push(item) { yarray.push([item]); },
|
|
41
|
+
toArray() { return yarray.toArray(); },
|
|
42
|
+
get length() { return yarray.length; },
|
|
43
|
+
onChange(handler) {
|
|
44
|
+
const obs = () => handler();
|
|
45
|
+
yarray.observe(obs);
|
|
46
|
+
return () => yarray.unobserve(obs);
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
},
|
|
50
|
+
getMap(name) {
|
|
51
|
+
const ymap = ydoc.getMap(name);
|
|
52
|
+
return {
|
|
53
|
+
set(key, value) { ymap.set(key, value); },
|
|
54
|
+
get(key) { return ymap.get(key); },
|
|
55
|
+
delete(key) { ymap.delete(key); },
|
|
56
|
+
has(key) { return ymap.has(key); },
|
|
57
|
+
entries() { return Array.from(ymap.entries()); },
|
|
58
|
+
onChange(handler) {
|
|
59
|
+
const obs = () => handler();
|
|
60
|
+
ymap.observe(obs);
|
|
61
|
+
return () => ymap.unobserve(obs);
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=yjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yjs.js","sourceRoot":"","sources":["../../src/s02-crdt/yjs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/s03-streaming/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,OAAO,EACZ,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,eAAe,GACrB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/s03-streaming/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* S3 — Playlist Manager
|
|
3
|
+
*
|
|
4
|
+
* Verwaltet HLS-kompatible Segment-Listen. Erzeugt M3U8-Playlists.
|
|
5
|
+
*/
|
|
6
|
+
import type { PlaylistManager, StreamConfig } from './types.js';
|
|
7
|
+
export declare function createPlaylistManager(sessionId: string, config: StreamConfig): PlaylistManager;
|
|
8
|
+
//# sourceMappingURL=playlist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playlist.d.ts","sourceRoot":"","sources":["../../src/s03-streaming/playlist.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAA2B,eAAe,EAAW,YAAY,EAAE,MAAM,YAAY,CAAA;AAEjG,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,eAAe,CAiD9F"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* S3 — Playlist Manager
|
|
3
|
+
*
|
|
4
|
+
* Verwaltet HLS-kompatible Segment-Listen. Erzeugt M3U8-Playlists.
|
|
5
|
+
*/
|
|
6
|
+
export function createPlaylistManager(sessionId, config) {
|
|
7
|
+
const entries = [];
|
|
8
|
+
let live = true;
|
|
9
|
+
return {
|
|
10
|
+
add(segment) {
|
|
11
|
+
entries.push({ segment });
|
|
12
|
+
// Sliding Window für Live-Streams
|
|
13
|
+
if (config.maxSegments > 0 && entries.length > config.maxSegments) {
|
|
14
|
+
entries.shift();
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
remove(segmentId) {
|
|
18
|
+
const idx = entries.findIndex(e => e.segment.id === segmentId);
|
|
19
|
+
if (idx >= 0)
|
|
20
|
+
entries.splice(idx, 1);
|
|
21
|
+
},
|
|
22
|
+
get() {
|
|
23
|
+
const totalDurationMs = entries.reduce((sum, e) => sum + e.segment.durationMs, 0);
|
|
24
|
+
return { sessionId, config, entries: [...entries], totalDurationMs, live };
|
|
25
|
+
},
|
|
26
|
+
toM3U8() {
|
|
27
|
+
const targetDuration = Math.ceil(config.segmentDurationMs / 1000);
|
|
28
|
+
const lines = [
|
|
29
|
+
'#EXTM3U',
|
|
30
|
+
`#EXT-X-VERSION:3`,
|
|
31
|
+
`#EXT-X-TARGETDURATION:${targetDuration}`,
|
|
32
|
+
`#EXT-X-MEDIA-SEQUENCE:${entries[0]?.segment.index ?? 0}`,
|
|
33
|
+
];
|
|
34
|
+
for (const entry of entries) {
|
|
35
|
+
if (entry.discontinuity) {
|
|
36
|
+
lines.push('#EXT-X-DISCONTINUITY');
|
|
37
|
+
}
|
|
38
|
+
const duration = (entry.segment.durationMs / 1000).toFixed(3);
|
|
39
|
+
lines.push(`#EXTINF:${duration},`);
|
|
40
|
+
lines.push(entry.segment.uri);
|
|
41
|
+
}
|
|
42
|
+
if (!live) {
|
|
43
|
+
lines.push('#EXT-X-ENDLIST');
|
|
44
|
+
}
|
|
45
|
+
return lines.join('\n');
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=playlist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playlist.js","sourceRoot":"","sources":["../../src/s03-streaming/playlist.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,UAAU,qBAAqB,CAAC,SAAiB,EAAE,MAAoB;IAC3E,MAAM,OAAO,GAAoB,EAAE,CAAA;IACnC,IAAI,IAAI,GAAG,IAAI,CAAA;IAEf,OAAO;QACL,GAAG,CAAC,OAAO;YACT,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;YAEzB,kCAAkC;YAClC,IAAI,MAAM,CAAC,WAAW,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;gBAClE,OAAO,CAAC,KAAK,EAAE,CAAA;YACjB,CAAC;QACH,CAAC;QAED,MAAM,CAAC,SAAS;YACd,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,SAAS,CAAC,CAAA;YAC9D,IAAI,GAAG,IAAI,CAAC;gBAAE,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;QACtC,CAAC;QAED,GAAG;YACD,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;YACjF,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAA;QAC5E,CAAC;QAED,MAAM;YACJ,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAA;YACjE,MAAM,KAAK,GAAG;gBACZ,SAAS;gBACT,kBAAkB;gBAClB,yBAAyB,cAAc,EAAE;gBACzC,yBAAyB,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC,EAAE;aAC1D,CAAA;YAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;oBACxB,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;gBACpC,CAAC;gBACD,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;gBAC7D,KAAK,CAAC,IAAI,CAAC,WAAW,QAAQ,GAAG,CAAC,CAAA;gBAClC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAC/B,CAAC;YAED,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;YAC9B,CAAC;YAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzB,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* S3 — Streaming Types
|
|
3
|
+
*
|
|
4
|
+
* HLS/DASH Segmentierung, Codec-Konfiguration, Playlist-Management.
|
|
5
|
+
* Interface first — Implementierung ist domain-spezifisch (Meeting-Replays, Media-Delivery).
|
|
6
|
+
*/
|
|
7
|
+
export type CodecType = 'opus' | 'aac' | 'av1' | 'h264' | 'vp9' | (string & {});
|
|
8
|
+
export type CodecInfo = {
|
|
9
|
+
type: CodecType;
|
|
10
|
+
sampleRate?: number;
|
|
11
|
+
channels?: number;
|
|
12
|
+
bitrate?: number;
|
|
13
|
+
width?: number;
|
|
14
|
+
height?: number;
|
|
15
|
+
fps?: number;
|
|
16
|
+
};
|
|
17
|
+
export type Segment = {
|
|
18
|
+
id: string;
|
|
19
|
+
index: number;
|
|
20
|
+
startMs: number;
|
|
21
|
+
endMs: number;
|
|
22
|
+
durationMs: number;
|
|
23
|
+
sizeBytes: number;
|
|
24
|
+
/** Storage-Pfad oder URL */
|
|
25
|
+
uri: string;
|
|
26
|
+
codec: CodecInfo;
|
|
27
|
+
};
|
|
28
|
+
export type PlaylistEntry = {
|
|
29
|
+
segment: Segment;
|
|
30
|
+
/** Diskontinuität — neuer Codec/Resolution nach diesem Punkt */
|
|
31
|
+
discontinuity?: boolean;
|
|
32
|
+
};
|
|
33
|
+
export type StreamConfig = {
|
|
34
|
+
/** Segment-Dauer in ms. Default: 4000 (4s, HLS Standard) */
|
|
35
|
+
segmentDurationMs: number;
|
|
36
|
+
/** Codec für Audio */
|
|
37
|
+
audioCodec: CodecInfo;
|
|
38
|
+
/** Codec für Video (optional — Audio-only Meetings) */
|
|
39
|
+
videoCodec?: CodecInfo;
|
|
40
|
+
/** Max Segmente im Sliding Window (Live). 0 = kein Limit (VOD). */
|
|
41
|
+
maxSegments: number;
|
|
42
|
+
};
|
|
43
|
+
export type Playlist = {
|
|
44
|
+
sessionId: string;
|
|
45
|
+
config: StreamConfig;
|
|
46
|
+
entries: PlaylistEntry[];
|
|
47
|
+
/** Gesamtdauer in ms */
|
|
48
|
+
totalDurationMs: number;
|
|
49
|
+
/** Ist der Stream noch live? */
|
|
50
|
+
live: boolean;
|
|
51
|
+
};
|
|
52
|
+
/** Segmenter Interface — nimmt rohe Media-Daten, produziert Segmente */
|
|
53
|
+
export type Segmenter = {
|
|
54
|
+
/** Füge rohe Audio/Video-Daten hinzu */
|
|
55
|
+
feed(data: ArrayBuffer, timestampMs: number): Segment | null;
|
|
56
|
+
/** Erzwinge Segment-Abschluss (z.B. bei Pause oder Session-Ende) */
|
|
57
|
+
flush(): Segment | null;
|
|
58
|
+
/** Aktuelle Konfiguration */
|
|
59
|
+
config(): StreamConfig;
|
|
60
|
+
};
|
|
61
|
+
/** Playlist-Manager — verwaltet die Segment-Liste */
|
|
62
|
+
export type PlaylistManager = {
|
|
63
|
+
add(segment: Segment): void;
|
|
64
|
+
remove(segmentId: string): void;
|
|
65
|
+
get(): Playlist;
|
|
66
|
+
/** HLS M3U8 Format */
|
|
67
|
+
toM3U8(): string;
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/s03-streaming/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;AAE/E,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,SAAS,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,OAAO,GAAG;IACpB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,4BAA4B;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,SAAS,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,OAAO,CAAA;IAChB,gEAAgE;IAChE,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,4DAA4D;IAC5D,iBAAiB,EAAE,MAAM,CAAA;IACzB,sBAAsB;IACtB,UAAU,EAAE,SAAS,CAAA;IACrB,uDAAuD;IACvD,UAAU,CAAC,EAAE,SAAS,CAAA;IACtB,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,YAAY,CAAA;IACpB,OAAO,EAAE,aAAa,EAAE,CAAA;IACxB,wBAAwB;IACxB,eAAe,EAAE,MAAM,CAAA;IACvB,gCAAgC;IAChC,IAAI,EAAE,OAAO,CAAA;CACd,CAAA;AAED,wEAAwE;AACxE,MAAM,MAAM,SAAS,GAAG;IACtB,wCAAwC;IACxC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAAA;IAC5D,oEAAoE;IACpE,KAAK,IAAI,OAAO,GAAG,IAAI,CAAA;IACvB,6BAA6B;IAC7B,MAAM,IAAI,YAAY,CAAA;CACvB,CAAA;AAED,qDAAqD;AACrD,MAAM,MAAM,eAAe,GAAG;IAC5B,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IAC3B,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,GAAG,IAAI,QAAQ,CAAA;IACf,sBAAsB;IACtB,MAAM,IAAI,MAAM,CAAA;CACjB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/s03-streaming/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/s04-messaging/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,OAAO,EACZ,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,OAAO,GACb,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/s04-messaging/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* S4 — Message Serializer
|
|
3
|
+
*
|
|
4
|
+
* Plattformunabhängige Serialisierung. JSON in V1, Protobuf-ready.
|
|
5
|
+
*/
|
|
6
|
+
import type { ChannelMessage, BriefingContent } from './types.js';
|
|
7
|
+
export declare function serialize(msg: ChannelMessage): string;
|
|
8
|
+
export declare function deserialize(raw: string): ChannelMessage | null;
|
|
9
|
+
/** Formatiert ein Briefing als menschenlesbaren Text (für Telegram/WhatsApp) */
|
|
10
|
+
export declare function formatBriefing(content: BriefingContent): string;
|
|
11
|
+
//# sourceMappingURL=serializer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../../src/s04-messaging/serializer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjE,wBAAgB,SAAS,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CAErD;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAU9D;AAED,gFAAgF;AAChF,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CA2B/D"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* S4 — Message Serializer
|
|
3
|
+
*
|
|
4
|
+
* Plattformunabhängige Serialisierung. JSON in V1, Protobuf-ready.
|
|
5
|
+
*/
|
|
6
|
+
export function serialize(msg) {
|
|
7
|
+
return JSON.stringify(msg);
|
|
8
|
+
}
|
|
9
|
+
export function deserialize(raw) {
|
|
10
|
+
try {
|
|
11
|
+
const parsed = JSON.parse(raw);
|
|
12
|
+
if (parsed.kind === 'chat' || parsed.kind === 'briefing' || parsed.kind === 'notification') {
|
|
13
|
+
return parsed;
|
|
14
|
+
}
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/** Formatiert ein Briefing als menschenlesbaren Text (für Telegram/WhatsApp) */
|
|
22
|
+
export function formatBriefing(content) {
|
|
23
|
+
const parts = [`*${content.headline}*\n`];
|
|
24
|
+
if (content.decisions.length > 0) {
|
|
25
|
+
parts.push('Entscheidungen:');
|
|
26
|
+
content.decisions.forEach((d, i) => parts.push(` ${i + 1}. ${d}`));
|
|
27
|
+
parts.push('');
|
|
28
|
+
}
|
|
29
|
+
if (content.actionItems.length > 0) {
|
|
30
|
+
parts.push('Action Items:');
|
|
31
|
+
content.actionItems.forEach((a, i) => parts.push(` ${i + 1}. ${a}`));
|
|
32
|
+
parts.push('');
|
|
33
|
+
}
|
|
34
|
+
if (content.conflicts && content.conflicts.length > 0) {
|
|
35
|
+
parts.push('Konflikte:');
|
|
36
|
+
content.conflicts.forEach(c => parts.push(` - ${c}`));
|
|
37
|
+
parts.push('');
|
|
38
|
+
}
|
|
39
|
+
if (content.nextSteps && content.nextSteps.length > 0) {
|
|
40
|
+
parts.push('Nächste Schritte:');
|
|
41
|
+
content.nextSteps.forEach(s => parts.push(` - ${s}`));
|
|
42
|
+
}
|
|
43
|
+
return parts.join('\n');
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=serializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializer.js","sourceRoot":"","sources":["../../src/s04-messaging/serializer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,UAAU,SAAS,CAAC,GAAmB;IAC3C,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;AAC5B,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAA;QACzD,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YAC3F,OAAO,MAAmC,CAAA;QAC5C,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,cAAc,CAAC,OAAwB;IACrD,MAAM,KAAK,GAAa,CAAC,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC,CAAA;IAEnD,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;QAC7B,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;QACnE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAChB,CAAC;IAED,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QAC3B,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;QACrE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAChB,CAAC;IAED,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QACxB,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;QACtD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAChB,CAAC;IAED,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;QAC/B,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;IACxD,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC"}
|