@allternit/ix 0.1.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.
Files changed (170) hide show
  1. package/README.md +320 -0
  2. package/dist/adapters/json-render.d.ts +211 -0
  3. package/dist/adapters/json-render.d.ts.bak +211 -0
  4. package/dist/adapters/json-render.d.ts.map +1 -0
  5. package/dist/adapters/json-render.js +576 -0
  6. package/dist/adapters/json-render.js.bak +576 -0
  7. package/dist/adapters/json-render.js.map +1 -0
  8. package/dist/catalog/registry.d.ts +65 -0
  9. package/dist/catalog/registry.d.ts.bak +65 -0
  10. package/dist/catalog/registry.d.ts.map +1 -0
  11. package/dist/catalog/registry.js +388 -0
  12. package/dist/catalog/registry.js.bak +388 -0
  13. package/dist/catalog/registry.js.map +1 -0
  14. package/dist/collab/capsule-registry.d.ts +114 -0
  15. package/dist/collab/capsule-registry.d.ts.bak +114 -0
  16. package/dist/collab/capsule-registry.d.ts.map +1 -0
  17. package/dist/collab/capsule-registry.js +271 -0
  18. package/dist/collab/capsule-registry.js.bak +271 -0
  19. package/dist/collab/capsule-registry.js.map +1 -0
  20. package/dist/collab/index.d.ts +21 -0
  21. package/dist/collab/index.d.ts.bak +21 -0
  22. package/dist/collab/index.d.ts.map +1 -0
  23. package/dist/collab/index.js +32 -0
  24. package/dist/collab/index.js.bak +32 -0
  25. package/dist/collab/index.js.map +1 -0
  26. package/dist/collab/visual-editor.d.ts +199 -0
  27. package/dist/collab/visual-editor.d.ts.bak +199 -0
  28. package/dist/collab/visual-editor.d.ts.map +1 -0
  29. package/dist/collab/visual-editor.js +259 -0
  30. package/dist/collab/visual-editor.js.bak +259 -0
  31. package/dist/collab/visual-editor.js.map +1 -0
  32. package/dist/collab/yjs-adapter.d.ts +95 -0
  33. package/dist/collab/yjs-adapter.d.ts.bak +95 -0
  34. package/dist/collab/yjs-adapter.d.ts.map +1 -0
  35. package/dist/collab/yjs-adapter.js +282 -0
  36. package/dist/collab/yjs-adapter.js.bak +282 -0
  37. package/dist/collab/yjs-adapter.js.map +1 -0
  38. package/dist/collab/yjs-client.d.ts +101 -0
  39. package/dist/collab/yjs-client.d.ts.bak +101 -0
  40. package/dist/collab/yjs-client.d.ts.map +1 -0
  41. package/dist/collab/yjs-client.js +193 -0
  42. package/dist/collab/yjs-client.js.bak +193 -0
  43. package/dist/collab/yjs-client.js.map +1 -0
  44. package/dist/collab/yjs-protocols.d.ts +128 -0
  45. package/dist/collab/yjs-protocols.d.ts.bak +128 -0
  46. package/dist/collab/yjs-protocols.d.ts.map +1 -0
  47. package/dist/collab/yjs-protocols.js +245 -0
  48. package/dist/collab/yjs-protocols.js.bak +245 -0
  49. package/dist/collab/yjs-protocols.js.map +1 -0
  50. package/dist/collab/yjs-types.d.ts +201 -0
  51. package/dist/collab/yjs-types.d.ts.bak +201 -0
  52. package/dist/collab/yjs-types.d.ts.map +1 -0
  53. package/dist/collab/yjs-types.js +45 -0
  54. package/dist/collab/yjs-types.js.bak +45 -0
  55. package/dist/collab/yjs-types.js.map +1 -0
  56. package/dist/index.d.ts +38 -0
  57. package/dist/index.d.ts.bak +38 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +48 -0
  60. package/dist/index.js.bak +48 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/pipeline/llm-to-ix.d.ts +249 -0
  63. package/dist/pipeline/llm-to-ix.d.ts.bak +249 -0
  64. package/dist/pipeline/llm-to-ix.d.ts.map +1 -0
  65. package/dist/pipeline/llm-to-ix.js +992 -0
  66. package/dist/pipeline/llm-to-ix.js.bak +992 -0
  67. package/dist/pipeline/llm-to-ix.js.map +1 -0
  68. package/dist/react/index.d.ts +18 -0
  69. package/dist/react/index.d.ts.bak +18 -0
  70. package/dist/react/index.d.ts.map +1 -0
  71. package/dist/react/index.js +18 -0
  72. package/dist/react/index.js.bak +18 -0
  73. package/dist/react/index.js.map +1 -0
  74. package/dist/react/renderer.d.ts +47 -0
  75. package/dist/react/renderer.d.ts.bak +47 -0
  76. package/dist/react/renderer.d.ts.map +1 -0
  77. package/dist/react/renderer.js +420 -0
  78. package/dist/react/renderer.js.bak +420 -0
  79. package/dist/react/renderer.js.map +1 -0
  80. package/dist/renderer/renderer.d.ts +55 -0
  81. package/dist/renderer/renderer.d.ts.bak +55 -0
  82. package/dist/renderer/renderer.d.ts.map +1 -0
  83. package/dist/renderer/renderer.js +232 -0
  84. package/dist/renderer/renderer.js.bak +232 -0
  85. package/dist/renderer/renderer.js.map +1 -0
  86. package/dist/runtime/capsule-runtime.d.ts +227 -0
  87. package/dist/runtime/capsule-runtime.d.ts.bak +227 -0
  88. package/dist/runtime/capsule-runtime.d.ts.map +1 -0
  89. package/dist/runtime/capsule-runtime.js +563 -0
  90. package/dist/runtime/capsule-runtime.js.bak +563 -0
  91. package/dist/runtime/capsule-runtime.js.map +1 -0
  92. package/dist/runtime/policy-gates.d.ts +116 -0
  93. package/dist/runtime/policy-gates.d.ts.bak +116 -0
  94. package/dist/runtime/policy-gates.d.ts.map +1 -0
  95. package/dist/runtime/policy-gates.js +317 -0
  96. package/dist/runtime/policy-gates.js.bak +317 -0
  97. package/dist/runtime/policy-gates.js.map +1 -0
  98. package/dist/schema/ui-ir.d.ts +26 -0
  99. package/dist/schema/ui-ir.d.ts.bak +26 -0
  100. package/dist/schema/ui-ir.d.ts.map +1 -0
  101. package/dist/schema/ui-ir.js +51 -0
  102. package/dist/schema/ui-ir.js.bak +51 -0
  103. package/dist/schema/ui-ir.js.map +1 -0
  104. package/dist/sdk/api.d.ts +101 -0
  105. package/dist/sdk/api.d.ts.bak +101 -0
  106. package/dist/sdk/api.d.ts.map +1 -0
  107. package/dist/sdk/api.js +177 -0
  108. package/dist/sdk/api.js.bak +177 -0
  109. package/dist/sdk/api.js.map +1 -0
  110. package/dist/sdk/index.d.ts +9 -0
  111. package/dist/sdk/index.d.ts.bak +9 -0
  112. package/dist/sdk/index.d.ts.map +1 -0
  113. package/dist/sdk/index.js +10 -0
  114. package/dist/sdk/index.js.bak +10 -0
  115. package/dist/sdk/index.js.map +1 -0
  116. package/dist/sdk/react.d.ts +63 -0
  117. package/dist/sdk/react.d.ts.bak +63 -0
  118. package/dist/sdk/react.d.ts.map +1 -0
  119. package/dist/sdk/react.js +161 -0
  120. package/dist/sdk/react.js.bak +161 -0
  121. package/dist/sdk/react.js.map +1 -0
  122. package/dist/state/index.d.ts +8 -0
  123. package/dist/state/index.d.ts.bak +8 -0
  124. package/dist/state/index.d.ts.map +1 -0
  125. package/dist/state/index.js +8 -0
  126. package/dist/state/index.js.bak +8 -0
  127. package/dist/state/index.js.map +1 -0
  128. package/dist/state/patch.d.ts +73 -0
  129. package/dist/state/patch.d.ts.bak +73 -0
  130. package/dist/state/patch.d.ts.map +1 -0
  131. package/dist/state/patch.js +437 -0
  132. package/dist/state/patch.js.bak +437 -0
  133. package/dist/state/patch.js.map +1 -0
  134. package/dist/state/store.d.ts +50 -0
  135. package/dist/state/store.d.ts.bak +50 -0
  136. package/dist/state/store.d.ts.map +1 -0
  137. package/dist/state/store.js +246 -0
  138. package/dist/state/store.js.bak +246 -0
  139. package/dist/state/store.js.map +1 -0
  140. package/dist/svelte/index.d.ts +15 -0
  141. package/dist/svelte/index.d.ts.bak +15 -0
  142. package/dist/svelte/index.d.ts.map +1 -0
  143. package/dist/svelte/index.js +15 -0
  144. package/dist/svelte/index.js.bak +15 -0
  145. package/dist/svelte/index.js.map +1 -0
  146. package/dist/svelte/renderer.d.ts +35 -0
  147. package/dist/svelte/renderer.d.ts.bak +35 -0
  148. package/dist/svelte/renderer.d.ts.map +1 -0
  149. package/dist/svelte/renderer.js +317 -0
  150. package/dist/svelte/renderer.js.bak +317 -0
  151. package/dist/svelte/renderer.js.map +1 -0
  152. package/dist/types/index.d.ts +349 -0
  153. package/dist/types/index.d.ts.bak +349 -0
  154. package/dist/types/index.d.ts.map +1 -0
  155. package/dist/types/index.js +152 -0
  156. package/dist/types/index.js.bak +152 -0
  157. package/dist/types/index.js.map +1 -0
  158. package/dist/vue/index.d.ts +18 -0
  159. package/dist/vue/index.d.ts.bak +18 -0
  160. package/dist/vue/index.d.ts.map +1 -0
  161. package/dist/vue/index.js +18 -0
  162. package/dist/vue/index.js.bak +18 -0
  163. package/dist/vue/index.js.map +1 -0
  164. package/dist/vue/renderer.d.ts +46 -0
  165. package/dist/vue/renderer.d.ts.bak +46 -0
  166. package/dist/vue/renderer.d.ts.map +1 -0
  167. package/dist/vue/renderer.js +302 -0
  168. package/dist/vue/renderer.js.bak +302 -0
  169. package/dist/vue/renderer.js.map +1 -0
  170. package/package.json +72 -0
@@ -0,0 +1,101 @@
1
+ /**
2
+ * YJS Client Setup - GAP-65
3
+ *
4
+ * Collaborative editing client using YJS CRDTs
5
+ */
6
+ import * as Y from 'yjs';
7
+ import { WebrtcProvider } from 'y-webrtc';
8
+ import { Awareness } from 'y-protocols/awareness';
9
+ export interface YjsConfig {
10
+ signalingUrls: string[];
11
+ iceServers: RTCIceServer[];
12
+ roomPrefix: string;
13
+ maxPeers?: number;
14
+ }
15
+ export interface CollaborationSession {
16
+ roomId: string;
17
+ participants: Participant[];
18
+ doc: Y.Doc;
19
+ provider: WebrtcProvider;
20
+ awareness: Awareness;
21
+ }
22
+ export interface Participant {
23
+ id: string;
24
+ name: string;
25
+ color: string;
26
+ cursor?: CursorPosition;
27
+ selection?: Range;
28
+ }
29
+ export interface CursorPosition {
30
+ x: number;
31
+ y: number;
32
+ line?: number;
33
+ ch?: number;
34
+ }
35
+ export interface Range {
36
+ anchor: CursorPosition;
37
+ head: CursorPosition;
38
+ }
39
+ export declare class YjsClient {
40
+ private doc;
41
+ private provider;
42
+ private awareness;
43
+ private config;
44
+ private roomId;
45
+ private session;
46
+ constructor(roomId: string, config: YjsConfig);
47
+ private setupProvider;
48
+ private setupAwareness;
49
+ private handleAwarenessChange;
50
+ private generateUserId;
51
+ private generateColor;
52
+ /**
53
+ * Get shared text for collaborative editing
54
+ */
55
+ getText(name?: string): Y.Text;
56
+ /**
57
+ * Get shared array
58
+ */
59
+ getArray<T>(name: string): Y.Array<T>;
60
+ /**
61
+ * Get shared map
62
+ */
63
+ getMap<T>(name: string): Y.Map<T>;
64
+ /**
65
+ * Get the underlying Y.Doc
66
+ */
67
+ getDoc(): Y.Doc;
68
+ /**
69
+ * Get current session
70
+ */
71
+ getSession(): CollaborationSession | null;
72
+ /**
73
+ * Get all participants
74
+ */
75
+ getParticipants(): Participant[];
76
+ /**
77
+ * Update local user state
78
+ */
79
+ updateLocalState(state: Partial<Participant>): void;
80
+ /**
81
+ * Update cursor position
82
+ */
83
+ updateCursor(cursor: CursorPosition): void;
84
+ /**
85
+ * Update selection range
86
+ */
87
+ updateSelection(selection: Range): void;
88
+ /**
89
+ * Disconnect from the room
90
+ */
91
+ disconnect(): void;
92
+ }
93
+ /**
94
+ * Create a new YJS client
95
+ */
96
+ export declare function createYjsClient(roomId: string, config: YjsConfig): YjsClient;
97
+ /**
98
+ * Default configuration for common use cases
99
+ */
100
+ export declare const defaultConfig: YjsConfig;
101
+ //# sourceMappingURL=yjs-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yjs-client.d.ts","sourceRoot":"","sources":["../../src/collab/yjs-client.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AAEH,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,MAAM,WAAW,SAAS;IACxB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC;IACX,QAAQ,EAAE,cAAc,CAAC;IACzB,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,SAAS,CAAC,EAAE,KAAK,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,KAAK;IACpB,MAAM,EAAE,cAAc,CAAC;IACvB,IAAI,EAAE,cAAc,CAAC;CACtB;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,GAAG,CAAQ;IACnB,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAqC;gBAExC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS;IAc7C,OAAO,CAAC,aAAa;IAuBrB,OAAO,CAAC,cAAc;IAkBtB,OAAO,CAAC,qBAAqB;IAqB7B,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,aAAa;IAKrB;;OAEG;IACH,OAAO,CAAC,IAAI,GAAE,MAAkB,GAAG,CAAC,CAAC,IAAI;IAIzC;;OAEG;IACH,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAIrC;;OAEG;IACH,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAIjC;;OAEG;IACH,MAAM,IAAI,CAAC,CAAC,GAAG;IAIf;;OAEG;IACH,UAAU,IAAI,oBAAoB,GAAG,IAAI;IAIzC;;OAEG;IACH,eAAe,IAAI,WAAW,EAAE;IAIhC;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI;IAanD;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAU1C;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,KAAK,GAAG,IAAI;IAUvC;;OAEG;IACH,UAAU,IAAI,IAAI;CAWnB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,SAAS,CAE5E;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,SAY3B,CAAC"}
@@ -0,0 +1,193 @@
1
+ // OWNER: T2-A4
2
+ /**
3
+ * YJS Client Setup - GAP-65
4
+ *
5
+ * Collaborative editing client using YJS CRDTs
6
+ */
7
+ import * as Y from 'yjs';
8
+ import { WebrtcProvider } from 'y-webrtc';
9
+ import { Awareness } from 'y-protocols/awareness';
10
+ export class YjsClient {
11
+ doc;
12
+ provider = null;
13
+ awareness = null;
14
+ config;
15
+ roomId;
16
+ session = null;
17
+ constructor(roomId, config) {
18
+ this.roomId = roomId;
19
+ this.config = config;
20
+ // 1. Create Y.Doc
21
+ this.doc = new Y.Doc();
22
+ // 2. Setup WebRTC provider with signaling
23
+ this.setupProvider();
24
+ // 3. Configure awareness for participant tracking
25
+ this.setupAwareness();
26
+ }
27
+ setupProvider() {
28
+ // 2. Setup WebRTC provider with signaling
29
+ // 3. Configure TURN/STUN servers
30
+ // 4. Connect to room
31
+ this.provider = new WebrtcProvider(`${this.config.roomPrefix}-${this.roomId}`, this.doc, {
32
+ signaling: this.config.signalingUrls,
33
+ iceServers: this.config.iceServers,
34
+ maxConns: this.config.maxPeers || 20,
35
+ });
36
+ this.session = {
37
+ roomId: this.roomId,
38
+ participants: [],
39
+ doc: this.doc,
40
+ provider: this.provider,
41
+ awareness: this.awareness,
42
+ };
43
+ }
44
+ setupAwareness() {
45
+ if (this.provider) {
46
+ this.awareness = new Awareness(this.doc);
47
+ // Set local user state
48
+ this.awareness.setLocalStateField('user', {
49
+ id: this.generateUserId(),
50
+ name: 'Anonymous',
51
+ color: this.generateColor(),
52
+ });
53
+ // Listen for participant changes
54
+ this.awareness.on('change', ({ added, updated, removed }) => {
55
+ this.handleAwarenessChange(added, updated, removed);
56
+ });
57
+ }
58
+ }
59
+ handleAwarenessChange(added, updated, removed) {
60
+ if (!this.awareness)
61
+ return;
62
+ const states = this.awareness.getStates();
63
+ // Update participants list
64
+ if (this.session) {
65
+ this.session.participants = Array.from(states.values()).map((state) => ({
66
+ id: state.user?.id || 'unknown',
67
+ name: state.user?.name || 'Unknown',
68
+ color: state.user?.color || '#000000',
69
+ cursor: state.cursor,
70
+ selection: state.selection,
71
+ }));
72
+ }
73
+ }
74
+ generateUserId() {
75
+ return `user_${Math.random().toString(36).substr(2, 9)}`;
76
+ }
77
+ generateColor() {
78
+ const colors = ['#FF6B6B', '#4ECDC4', '#45B7D1', '#96CEB4', '#FFEAA7'];
79
+ return colors[Math.floor(Math.random() * colors.length)];
80
+ }
81
+ /**
82
+ * Get shared text for collaborative editing
83
+ */
84
+ getText(name = 'default') {
85
+ return this.doc.getText(name);
86
+ }
87
+ /**
88
+ * Get shared array
89
+ */
90
+ getArray(name) {
91
+ return this.doc.getArray(name);
92
+ }
93
+ /**
94
+ * Get shared map
95
+ */
96
+ getMap(name) {
97
+ return this.doc.getMap(name);
98
+ }
99
+ /**
100
+ * Get the underlying Y.Doc
101
+ */
102
+ getDoc() {
103
+ return this.doc;
104
+ }
105
+ /**
106
+ * Get current session
107
+ */
108
+ getSession() {
109
+ return this.session;
110
+ }
111
+ /**
112
+ * Get all participants
113
+ */
114
+ getParticipants() {
115
+ return this.session?.participants || [];
116
+ }
117
+ /**
118
+ * Update local user state
119
+ */
120
+ updateLocalState(state) {
121
+ if (this.awareness) {
122
+ const currentState = this.awareness.getLocalState() || {};
123
+ this.awareness.setLocalState({
124
+ ...currentState,
125
+ user: {
126
+ ...currentState.user,
127
+ ...state,
128
+ },
129
+ });
130
+ }
131
+ }
132
+ /**
133
+ * Update cursor position
134
+ */
135
+ updateCursor(cursor) {
136
+ if (this.awareness) {
137
+ const currentState = this.awareness.getLocalState() || {};
138
+ this.awareness.setLocalState({
139
+ ...currentState,
140
+ cursor,
141
+ });
142
+ }
143
+ }
144
+ /**
145
+ * Update selection range
146
+ */
147
+ updateSelection(selection) {
148
+ if (this.awareness) {
149
+ const currentState = this.awareness.getLocalState() || {};
150
+ this.awareness.setLocalState({
151
+ ...currentState,
152
+ selection,
153
+ });
154
+ }
155
+ }
156
+ /**
157
+ * Disconnect from the room
158
+ */
159
+ disconnect() {
160
+ if (this.provider) {
161
+ this.provider.destroy();
162
+ this.provider = null;
163
+ }
164
+ if (this.awareness) {
165
+ this.awareness.destroy();
166
+ this.awareness = null;
167
+ }
168
+ this.session = null;
169
+ }
170
+ }
171
+ /**
172
+ * Create a new YJS client
173
+ */
174
+ export function createYjsClient(roomId, config) {
175
+ return new YjsClient(roomId, config);
176
+ }
177
+ /**
178
+ * Default configuration for common use cases
179
+ */
180
+ export const defaultConfig = {
181
+ signalingUrls: [
182
+ 'wss://signaling.yjs.dev',
183
+ 'wss://y-webrtc-signaling-us.herokuapp.com',
184
+ 'wss://y-webrtc-signaling-eu.herokuapp.com',
185
+ ],
186
+ iceServers: [
187
+ { urls: 'stun:stun.l.google.com:19302' },
188
+ { urls: 'stun:stun1.l.google.com:19302' },
189
+ ],
190
+ roomPrefix: 'a2r-collab',
191
+ maxPeers: 20,
192
+ };
193
+ //# sourceMappingURL=yjs-client.js.map
@@ -0,0 +1,193 @@
1
+ // OWNER: T2-A4
2
+ /**
3
+ * YJS Client Setup - GAP-65
4
+ *
5
+ * Collaborative editing client using YJS CRDTs
6
+ */
7
+ import * as Y from 'yjs';
8
+ import { WebrtcProvider } from 'y-webrtc';
9
+ import { Awareness } from 'y-protocols/awareness';
10
+ export class YjsClient {
11
+ doc;
12
+ provider = null;
13
+ awareness = null;
14
+ config;
15
+ roomId;
16
+ session = null;
17
+ constructor(roomId, config) {
18
+ this.roomId = roomId;
19
+ this.config = config;
20
+ // 1. Create Y.Doc
21
+ this.doc = new Y.Doc();
22
+ // 2. Setup WebRTC provider with signaling
23
+ this.setupProvider();
24
+ // 3. Configure awareness for participant tracking
25
+ this.setupAwareness();
26
+ }
27
+ setupProvider() {
28
+ // 2. Setup WebRTC provider with signaling
29
+ // 3. Configure TURN/STUN servers
30
+ // 4. Connect to room
31
+ this.provider = new WebrtcProvider(`${this.config.roomPrefix}-${this.roomId}`, this.doc, {
32
+ signaling: this.config.signalingUrls,
33
+ iceServers: this.config.iceServers,
34
+ maxConns: this.config.maxPeers || 20,
35
+ });
36
+ this.session = {
37
+ roomId: this.roomId,
38
+ participants: [],
39
+ doc: this.doc,
40
+ provider: this.provider,
41
+ awareness: this.awareness,
42
+ };
43
+ }
44
+ setupAwareness() {
45
+ if (this.provider) {
46
+ this.awareness = new Awareness(this.doc);
47
+ // Set local user state
48
+ this.awareness.setLocalStateField('user', {
49
+ id: this.generateUserId(),
50
+ name: 'Anonymous',
51
+ color: this.generateColor(),
52
+ });
53
+ // Listen for participant changes
54
+ this.awareness.on('change', ({ added, updated, removed }) => {
55
+ this.handleAwarenessChange(added, updated, removed);
56
+ });
57
+ }
58
+ }
59
+ handleAwarenessChange(added, updated, removed) {
60
+ if (!this.awareness)
61
+ return;
62
+ const states = this.awareness.getStates();
63
+ // Update participants list
64
+ if (this.session) {
65
+ this.session.participants = Array.from(states.values()).map((state) => ({
66
+ id: state.user?.id || 'unknown',
67
+ name: state.user?.name || 'Unknown',
68
+ color: state.user?.color || '#000000',
69
+ cursor: state.cursor,
70
+ selection: state.selection,
71
+ }));
72
+ }
73
+ }
74
+ generateUserId() {
75
+ return `user_${Math.random().toString(36).substr(2, 9)}`;
76
+ }
77
+ generateColor() {
78
+ const colors = ['#FF6B6B', '#4ECDC4', '#45B7D1', '#96CEB4', '#FFEAA7'];
79
+ return colors[Math.floor(Math.random() * colors.length)];
80
+ }
81
+ /**
82
+ * Get shared text for collaborative editing
83
+ */
84
+ getText(name = 'default') {
85
+ return this.doc.getText(name);
86
+ }
87
+ /**
88
+ * Get shared array
89
+ */
90
+ getArray(name) {
91
+ return this.doc.getArray(name);
92
+ }
93
+ /**
94
+ * Get shared map
95
+ */
96
+ getMap(name) {
97
+ return this.doc.getMap(name);
98
+ }
99
+ /**
100
+ * Get the underlying Y.Doc
101
+ */
102
+ getDoc() {
103
+ return this.doc;
104
+ }
105
+ /**
106
+ * Get current session
107
+ */
108
+ getSession() {
109
+ return this.session;
110
+ }
111
+ /**
112
+ * Get all participants
113
+ */
114
+ getParticipants() {
115
+ return this.session?.participants || [];
116
+ }
117
+ /**
118
+ * Update local user state
119
+ */
120
+ updateLocalState(state) {
121
+ if (this.awareness) {
122
+ const currentState = this.awareness.getLocalState() || {};
123
+ this.awareness.setLocalState({
124
+ ...currentState,
125
+ user: {
126
+ ...currentState.user,
127
+ ...state,
128
+ },
129
+ });
130
+ }
131
+ }
132
+ /**
133
+ * Update cursor position
134
+ */
135
+ updateCursor(cursor) {
136
+ if (this.awareness) {
137
+ const currentState = this.awareness.getLocalState() || {};
138
+ this.awareness.setLocalState({
139
+ ...currentState,
140
+ cursor,
141
+ });
142
+ }
143
+ }
144
+ /**
145
+ * Update selection range
146
+ */
147
+ updateSelection(selection) {
148
+ if (this.awareness) {
149
+ const currentState = this.awareness.getLocalState() || {};
150
+ this.awareness.setLocalState({
151
+ ...currentState,
152
+ selection,
153
+ });
154
+ }
155
+ }
156
+ /**
157
+ * Disconnect from the room
158
+ */
159
+ disconnect() {
160
+ if (this.provider) {
161
+ this.provider.destroy();
162
+ this.provider = null;
163
+ }
164
+ if (this.awareness) {
165
+ this.awareness.destroy();
166
+ this.awareness = null;
167
+ }
168
+ this.session = null;
169
+ }
170
+ }
171
+ /**
172
+ * Create a new YJS client
173
+ */
174
+ export function createYjsClient(roomId, config) {
175
+ return new YjsClient(roomId, config);
176
+ }
177
+ /**
178
+ * Default configuration for common use cases
179
+ */
180
+ export const defaultConfig = {
181
+ signalingUrls: [
182
+ 'wss://signaling.yjs.dev',
183
+ 'wss://y-webrtc-signaling-us.herokuapp.com',
184
+ 'wss://y-webrtc-signaling-eu.herokuapp.com',
185
+ ],
186
+ iceServers: [
187
+ { urls: 'stun:stun.l.google.com:19302' },
188
+ { urls: 'stun:stun1.l.google.com:19302' },
189
+ ],
190
+ roomPrefix: 'a2r-collab',
191
+ maxPeers: 20,
192
+ };
193
+ //# sourceMappingURL=yjs-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yjs-client.js","sourceRoot":"","sources":["../../src/collab/yjs-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * YJS Protocols - GAP-67, 68
3
+ *
4
+ * Broadcast and Sync protocols for YJS
5
+ */
6
+ import * as Y from 'yjs';
7
+ import { Awareness } from 'y-protocols/awareness';
8
+ import { encoding, decoding } from 'lib0';
9
+ import { AwarenessChanges, UserState, SyncState } from './yjs-types';
10
+ /**
11
+ * Broadcast Protocol - GAP-67
12
+ *
13
+ * Broadcast changes to all peers via WebRTC
14
+ */
15
+ export declare class BroadcastProtocol {
16
+ private doc;
17
+ private provider;
18
+ private isSyncing;
19
+ constructor(doc: Y.Doc, provider: any);
20
+ /**
21
+ * Broadcast update to all peers
22
+ */
23
+ broadcastUpdate(update: Uint8Array): void;
24
+ /**
25
+ * Handle incoming message
26
+ */
27
+ handleMessage(message: Uint8Array, from: number): void;
28
+ private handleSyncMessage;
29
+ private handleAwarenessMessage;
30
+ /**
31
+ * Get sync state
32
+ */
33
+ getSyncState(): SyncState;
34
+ /**
35
+ * Force sync with all peers
36
+ */
37
+ forceSync(): void;
38
+ }
39
+ /**
40
+ * Sync Protocol - GAP-67
41
+ *
42
+ * Handle document synchronization
43
+ */
44
+ export declare class SyncProtocol {
45
+ private doc;
46
+ private syncState;
47
+ constructor(doc: Y.Doc);
48
+ /**
49
+ * Sync document with remote
50
+ */
51
+ syncDocument(remoteDoc: Y.Doc): void;
52
+ /**
53
+ * Create sync message
54
+ */
55
+ createSyncMessage(): Uint8Array;
56
+ /**
57
+ * Handle sync step 1
58
+ */
59
+ handleSyncStep1(encoder: encoding.Encoder, decoder: decoding.Decoder): void;
60
+ /**
61
+ * Handle sync step 2
62
+ */
63
+ handleSyncStep2(decoder: decoding.Decoder): void;
64
+ /**
65
+ * Handle update
66
+ */
67
+ handleUpdate(decoder: decoding.Decoder): void;
68
+ /**
69
+ * Get sync status for a peer
70
+ */
71
+ getPeerSyncStatus(peerId: number): any;
72
+ }
73
+ /**
74
+ * Awareness Manager - GAP-68
75
+ *
76
+ * Manage user awareness and presence
77
+ */
78
+ export declare class AwarenessManager {
79
+ private awareness;
80
+ private onChangeCallbacks;
81
+ constructor(doc: Y.Doc);
82
+ private setupListeners;
83
+ /**
84
+ * Set local user state
85
+ */
86
+ setLocalState(state: UserState): void;
87
+ /**
88
+ * Set local state field
89
+ */
90
+ setLocalStateField<T>(key: string, value: T): void;
91
+ /**
92
+ * Get all participant states
93
+ */
94
+ getStates(): Map<number, UserState>;
95
+ /**
96
+ * Get local state
97
+ */
98
+ getLocalState(): UserState | null;
99
+ /**
100
+ * Get state for specific client
101
+ */
102
+ getState(clientId: number): UserState | null;
103
+ /**
104
+ * Listen for changes
105
+ */
106
+ onChange(callback: (changes: AwarenessChanges) => void): () => void;
107
+ /**
108
+ * Get all connected clients
109
+ */
110
+ getConnectedClients(): number[];
111
+ /**
112
+ * Remove client state
113
+ */
114
+ removeLocalState(): void;
115
+ /**
116
+ * Get awareness instance
117
+ */
118
+ getAwareness(): Awareness;
119
+ /**
120
+ * Destroy awareness manager
121
+ */
122
+ destroy(): void;
123
+ }
124
+ /**
125
+ * Create awareness manager
126
+ */
127
+ export declare function createAwarenessManager(doc: Y.Doc): AwarenessManager;
128
+ //# sourceMappingURL=yjs-protocols.d.ts.map