@quenty/studio-bridge 0.1.1-canary.656.73a74af.0 → 0.2.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 (45) hide show
  1. package/CHANGELOG.md +37 -1
  2. package/build-scripts/transform-add-session-attribute.luau +17 -0
  3. package/dist/src/index.d.ts +0 -1
  4. package/dist/src/index.d.ts.map +1 -1
  5. package/dist/src/index.js +0 -1
  6. package/dist/src/index.js.map +1 -1
  7. package/dist/src/plugin/plugin-injector.d.ts.map +1 -1
  8. package/dist/src/plugin/plugin-injector.js +11 -34
  9. package/dist/src/plugin/plugin-injector.js.map +1 -1
  10. package/dist/src/process/index.d.ts +0 -2
  11. package/dist/src/process/index.d.ts.map +1 -1
  12. package/dist/src/process/index.js +0 -1
  13. package/dist/src/process/index.js.map +1 -1
  14. package/dist/src/server/studio-bridge-server.d.ts +1 -1
  15. package/dist/src/server/studio-bridge-server.d.ts.map +1 -1
  16. package/dist/src/server/studio-bridge-server.js +38 -12
  17. package/dist/src/server/studio-bridge-server.js.map +1 -1
  18. package/dist/src/server/studio-bridge-server.test.js +94 -19
  19. package/dist/src/server/studio-bridge-server.test.js.map +1 -1
  20. package/dist/src/server/web-socket-protocol.d.ts +7 -1
  21. package/dist/src/server/web-socket-protocol.d.ts.map +1 -1
  22. package/dist/src/server/web-socket-protocol.js +8 -4
  23. package/dist/src/server/web-socket-protocol.js.map +1 -1
  24. package/dist/src/server/web-socket-protocol.smoke.test.js +18 -9
  25. package/dist/src/server/web-socket-protocol.smoke.test.js.map +1 -1
  26. package/dist/src/server/web-socket-protocol.test.js +47 -5
  27. package/dist/src/server/web-socket-protocol.test.js.map +1 -1
  28. package/dist/tsconfig.tsbuildinfo +1 -1
  29. package/package.json +5 -5
  30. package/src/index.ts +0 -1
  31. package/src/plugin/plugin-injector.ts +19 -45
  32. package/src/process/index.ts +0 -3
  33. package/src/server/studio-bridge-server.test.ts +113 -21
  34. package/src/server/studio-bridge-server.ts +66 -15
  35. package/src/server/web-socket-protocol.smoke.test.ts +18 -9
  36. package/src/server/web-socket-protocol.test.ts +61 -5
  37. package/src/server/web-socket-protocol.ts +15 -4
  38. package/templates/default-test-place/default.project.json +1 -1
  39. package/templates/studio-bridge-plugin/default.project.json +1 -1
  40. package/templates/studio-bridge-plugin/{plugin-template.server.lua → src/StudioBridgePlugin.server.lua} +18 -4
  41. package/dist/src/process/place-builder.d.ts +0 -16
  42. package/dist/src/process/place-builder.d.ts.map +0 -1
  43. package/dist/src/process/place-builder.js +0 -45
  44. package/dist/src/process/place-builder.js.map +0 -1
  45. package/src/process/place-builder.ts +0 -63
@@ -4,27 +4,31 @@ describe('encodeMessage', () => {
4
4
  it('encodes a welcome message', () => {
5
5
  const json = encodeMessage({
6
6
  type: 'welcome',
7
+ sessionId: 'abc-123',
7
8
  payload: { sessionId: 'abc-123' },
8
9
  });
9
10
  const parsed = JSON.parse(json);
10
11
  expect(parsed).toEqual({
11
12
  type: 'welcome',
13
+ sessionId: 'abc-123',
12
14
  payload: { sessionId: 'abc-123' },
13
15
  });
14
16
  });
15
17
  it('encodes a shutdown message', () => {
16
- const json = encodeMessage({ type: 'shutdown', payload: {} });
18
+ const json = encodeMessage({ type: 'shutdown', sessionId: 'abc-123', payload: {} });
17
19
  const parsed = JSON.parse(json);
18
- expect(parsed).toEqual({ type: 'shutdown', payload: {} });
20
+ expect(parsed).toEqual({ type: 'shutdown', sessionId: 'abc-123', payload: {} });
19
21
  });
20
22
  it('encodes an execute message', () => {
21
23
  const json = encodeMessage({
22
24
  type: 'execute',
25
+ sessionId: 'abc-123',
23
26
  payload: { script: 'print("hi")' },
24
27
  });
25
28
  const parsed = JSON.parse(json);
26
29
  expect(parsed).toEqual({
27
30
  type: 'execute',
31
+ sessionId: 'abc-123',
28
32
  payload: { script: 'print("hi")' },
29
33
  });
30
34
  });
@@ -34,25 +38,36 @@ describe('decodePluginMessage', () => {
34
38
  it('decodes a valid hello message', () => {
35
39
  const msg = decodePluginMessage(JSON.stringify({
36
40
  type: 'hello',
41
+ sessionId: 'test-session',
37
42
  payload: { sessionId: 'test-session' },
38
43
  }));
39
44
  expect(msg).toEqual({
40
45
  type: 'hello',
46
+ sessionId: 'test-session',
41
47
  payload: { sessionId: 'test-session' },
42
48
  });
43
49
  });
44
- it('returns null for hello without sessionId', () => {
50
+ it('returns null for hello without sessionId in payload', () => {
45
51
  const msg = decodePluginMessage(JSON.stringify({
46
52
  type: 'hello',
53
+ sessionId: 'test-session',
47
54
  payload: {},
48
55
  }));
49
56
  expect(msg).toBeNull();
50
57
  });
58
+ it('returns null for hello without top-level sessionId', () => {
59
+ const msg = decodePluginMessage(JSON.stringify({
60
+ type: 'hello',
61
+ payload: { sessionId: 'test-session' },
62
+ }));
63
+ expect(msg).toBeNull();
64
+ });
51
65
  });
52
66
  describe('output', () => {
53
67
  it('decodes a valid output message with multiple entries', () => {
54
68
  const msg = decodePluginMessage(JSON.stringify({
55
69
  type: 'output',
70
+ sessionId: 'test-session',
56
71
  payload: {
57
72
  messages: [
58
73
  { level: 'Print', body: 'Hello world' },
@@ -62,6 +77,7 @@ describe('decodePluginMessage', () => {
62
77
  }));
63
78
  expect(msg).toEqual({
64
79
  type: 'output',
80
+ sessionId: 'test-session',
65
81
  payload: {
66
82
  messages: [
67
83
  { level: 'Print', body: 'Hello world' },
@@ -73,6 +89,7 @@ describe('decodePluginMessage', () => {
73
89
  it('filters out invalid entries in messages array', () => {
74
90
  const msg = decodePluginMessage(JSON.stringify({
75
91
  type: 'output',
92
+ sessionId: 'test-session',
76
93
  payload: {
77
94
  messages: [
78
95
  { level: 'Print', body: 'valid' },
@@ -84,6 +101,7 @@ describe('decodePluginMessage', () => {
84
101
  }));
85
102
  expect(msg).toEqual({
86
103
  type: 'output',
104
+ sessionId: 'test-session',
87
105
  payload: {
88
106
  messages: [{ level: 'Print', body: 'valid' }],
89
107
  },
@@ -92,39 +110,59 @@ describe('decodePluginMessage', () => {
92
110
  it('returns null for output without messages array', () => {
93
111
  const msg = decodePluginMessage(JSON.stringify({
94
112
  type: 'output',
113
+ sessionId: 'test-session',
95
114
  payload: { messages: 'not-an-array' },
96
115
  }));
97
116
  expect(msg).toBeNull();
98
117
  });
118
+ it('returns null for output without top-level sessionId', () => {
119
+ const msg = decodePluginMessage(JSON.stringify({
120
+ type: 'output',
121
+ payload: { messages: [{ level: 'Print', body: 'test' }] },
122
+ }));
123
+ expect(msg).toBeNull();
124
+ });
99
125
  });
100
126
  describe('scriptComplete', () => {
101
127
  it('decodes a successful scriptComplete', () => {
102
128
  const msg = decodePluginMessage(JSON.stringify({
103
129
  type: 'scriptComplete',
130
+ sessionId: 'test-session',
104
131
  payload: { success: true },
105
132
  }));
106
133
  expect(msg).toEqual({
107
134
  type: 'scriptComplete',
135
+ sessionId: 'test-session',
108
136
  payload: { success: true, error: undefined },
109
137
  });
110
138
  });
111
139
  it('decodes a failed scriptComplete with error', () => {
112
140
  const msg = decodePluginMessage(JSON.stringify({
113
141
  type: 'scriptComplete',
142
+ sessionId: 'test-session',
114
143
  payload: { success: false, error: 'Script errored' },
115
144
  }));
116
145
  expect(msg).toEqual({
117
146
  type: 'scriptComplete',
147
+ sessionId: 'test-session',
118
148
  payload: { success: false, error: 'Script errored' },
119
149
  });
120
150
  });
121
151
  it('returns null if success is not boolean', () => {
122
152
  const msg = decodePluginMessage(JSON.stringify({
123
153
  type: 'scriptComplete',
154
+ sessionId: 'test-session',
124
155
  payload: { success: 'yes' },
125
156
  }));
126
157
  expect(msg).toBeNull();
127
158
  });
159
+ it('returns null for scriptComplete without top-level sessionId', () => {
160
+ const msg = decodePluginMessage(JSON.stringify({
161
+ type: 'scriptComplete',
162
+ payload: { success: true },
163
+ }));
164
+ expect(msg).toBeNull();
165
+ });
128
166
  });
129
167
  describe('malformed messages', () => {
130
168
  it('returns null for invalid JSON', () => {
@@ -134,14 +172,18 @@ describe('decodePluginMessage', () => {
134
172
  expect(decodePluginMessage('"just a string"')).toBeNull();
135
173
  });
136
174
  it('returns null for missing type', () => {
137
- expect(decodePluginMessage(JSON.stringify({ payload: {} }))).toBeNull();
175
+ expect(decodePluginMessage(JSON.stringify({ sessionId: 's', payload: {} }))).toBeNull();
138
176
  });
139
177
  it('returns null for missing payload', () => {
140
- expect(decodePluginMessage(JSON.stringify({ type: 'hello' }))).toBeNull();
178
+ expect(decodePluginMessage(JSON.stringify({ type: 'hello', sessionId: 's' }))).toBeNull();
179
+ });
180
+ it('returns null for missing sessionId', () => {
181
+ expect(decodePluginMessage(JSON.stringify({ type: 'hello', payload: { sessionId: 's' } }))).toBeNull();
141
182
  });
142
183
  it('returns null for unknown message type', () => {
143
184
  expect(decodePluginMessage(JSON.stringify({
144
185
  type: 'unknown',
186
+ sessionId: 'test',
145
187
  payload: {},
146
188
  }))).toBeNull();
147
189
  });
@@ -1 +1 @@
1
- {"version":3,"file":"web-socket-protocol.test.js","sourceRoot":"","sources":["../../../src/server/web-socket-protocol.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"web-socket-protocol.test.js","sourceRoot":"","sources":["../../../src/server/web-socket-protocol.test.ts"],"names":[],"mappings":"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"}