faux-studio 0.3.10 → 0.3.12

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 (2) hide show
  1. package/dist/index.js +27 -82
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -2267,7 +2267,7 @@ var require_websocket = __commonJS({
2267
2267
  var protocolVersions = [8, 13];
2268
2268
  var readyStates = ["CONNECTING", "OPEN", "CLOSING", "CLOSED"];
2269
2269
  var subprotocolRegex = /^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;
2270
- var WebSocket2 = class _WebSocket extends EventEmitter {
2270
+ var WebSocket3 = class _WebSocket extends EventEmitter {
2271
2271
  /**
2272
2272
  * Create a new `WebSocket`.
2273
2273
  *
@@ -2637,35 +2637,35 @@ var require_websocket = __commonJS({
2637
2637
  }
2638
2638
  }
2639
2639
  };
2640
- Object.defineProperty(WebSocket2, "CONNECTING", {
2640
+ Object.defineProperty(WebSocket3, "CONNECTING", {
2641
2641
  enumerable: true,
2642
2642
  value: readyStates.indexOf("CONNECTING")
2643
2643
  });
2644
- Object.defineProperty(WebSocket2.prototype, "CONNECTING", {
2644
+ Object.defineProperty(WebSocket3.prototype, "CONNECTING", {
2645
2645
  enumerable: true,
2646
2646
  value: readyStates.indexOf("CONNECTING")
2647
2647
  });
2648
- Object.defineProperty(WebSocket2, "OPEN", {
2648
+ Object.defineProperty(WebSocket3, "OPEN", {
2649
2649
  enumerable: true,
2650
2650
  value: readyStates.indexOf("OPEN")
2651
2651
  });
2652
- Object.defineProperty(WebSocket2.prototype, "OPEN", {
2652
+ Object.defineProperty(WebSocket3.prototype, "OPEN", {
2653
2653
  enumerable: true,
2654
2654
  value: readyStates.indexOf("OPEN")
2655
2655
  });
2656
- Object.defineProperty(WebSocket2, "CLOSING", {
2656
+ Object.defineProperty(WebSocket3, "CLOSING", {
2657
2657
  enumerable: true,
2658
2658
  value: readyStates.indexOf("CLOSING")
2659
2659
  });
2660
- Object.defineProperty(WebSocket2.prototype, "CLOSING", {
2660
+ Object.defineProperty(WebSocket3.prototype, "CLOSING", {
2661
2661
  enumerable: true,
2662
2662
  value: readyStates.indexOf("CLOSING")
2663
2663
  });
2664
- Object.defineProperty(WebSocket2, "CLOSED", {
2664
+ Object.defineProperty(WebSocket3, "CLOSED", {
2665
2665
  enumerable: true,
2666
2666
  value: readyStates.indexOf("CLOSED")
2667
2667
  });
2668
- Object.defineProperty(WebSocket2.prototype, "CLOSED", {
2668
+ Object.defineProperty(WebSocket3.prototype, "CLOSED", {
2669
2669
  enumerable: true,
2670
2670
  value: readyStates.indexOf("CLOSED")
2671
2671
  });
@@ -2678,10 +2678,10 @@ var require_websocket = __commonJS({
2678
2678
  "readyState",
2679
2679
  "url"
2680
2680
  ].forEach((property) => {
2681
- Object.defineProperty(WebSocket2.prototype, property, { enumerable: true });
2681
+ Object.defineProperty(WebSocket3.prototype, property, { enumerable: true });
2682
2682
  });
2683
2683
  ["open", "error", "close", "message"].forEach((method) => {
2684
- Object.defineProperty(WebSocket2.prototype, `on${method}`, {
2684
+ Object.defineProperty(WebSocket3.prototype, `on${method}`, {
2685
2685
  enumerable: true,
2686
2686
  get() {
2687
2687
  for (const listener of this.listeners(method)) {
@@ -2703,9 +2703,9 @@ var require_websocket = __commonJS({
2703
2703
  }
2704
2704
  });
2705
2705
  });
2706
- WebSocket2.prototype.addEventListener = addEventListener;
2707
- WebSocket2.prototype.removeEventListener = removeEventListener;
2708
- module.exports = WebSocket2;
2706
+ WebSocket3.prototype.addEventListener = addEventListener;
2707
+ WebSocket3.prototype.removeEventListener = removeEventListener;
2708
+ module.exports = WebSocket3;
2709
2709
  function initAsClient(websocket, address, protocols, options) {
2710
2710
  const opts = {
2711
2711
  allowSynchronousEvents: true,
@@ -2893,7 +2893,7 @@ var require_websocket = __commonJS({
2893
2893
  });
2894
2894
  req.on("upgrade", (res, socket, head) => {
2895
2895
  websocket.emit("upgrade", res);
2896
- if (websocket.readyState !== WebSocket2.CONNECTING) return;
2896
+ if (websocket.readyState !== WebSocket3.CONNECTING) return;
2897
2897
  req = websocket._req = null;
2898
2898
  const upgrade = res.headers.upgrade;
2899
2899
  if (upgrade === void 0 || upgrade.toLowerCase() !== "websocket") {
@@ -2965,7 +2965,7 @@ var require_websocket = __commonJS({
2965
2965
  }
2966
2966
  }
2967
2967
  function emitErrorAndClose(websocket, err) {
2968
- websocket._readyState = WebSocket2.CLOSING;
2968
+ websocket._readyState = WebSocket3.CLOSING;
2969
2969
  websocket._errorEmitted = true;
2970
2970
  websocket.emit("error", err);
2971
2971
  websocket.emitClose();
@@ -2982,7 +2982,7 @@ var require_websocket = __commonJS({
2982
2982
  return tls.connect(options);
2983
2983
  }
2984
2984
  function abortHandshake(websocket, stream, message) {
2985
- websocket._readyState = WebSocket2.CLOSING;
2985
+ websocket._readyState = WebSocket3.CLOSING;
2986
2986
  const err = new Error(message);
2987
2987
  Error.captureStackTrace(err, abortHandshake);
2988
2988
  if (stream.setHeader) {
@@ -3057,9 +3057,9 @@ var require_websocket = __commonJS({
3057
3057
  }
3058
3058
  function senderOnError(err) {
3059
3059
  const websocket = this[kWebSocket];
3060
- if (websocket.readyState === WebSocket2.CLOSED) return;
3061
- if (websocket.readyState === WebSocket2.OPEN) {
3062
- websocket._readyState = WebSocket2.CLOSING;
3060
+ if (websocket.readyState === WebSocket3.CLOSED) return;
3061
+ if (websocket.readyState === WebSocket3.OPEN) {
3062
+ websocket._readyState = WebSocket3.CLOSING;
3063
3063
  setCloseTimer(websocket);
3064
3064
  }
3065
3065
  this._socket.end();
@@ -3079,7 +3079,7 @@ var require_websocket = __commonJS({
3079
3079
  this.removeListener("close", socketOnClose);
3080
3080
  this.removeListener("data", socketOnData);
3081
3081
  this.removeListener("end", socketOnEnd);
3082
- websocket._readyState = WebSocket2.CLOSING;
3082
+ websocket._readyState = WebSocket3.CLOSING;
3083
3083
  if (!this._readableState.endEmitted && !websocket._closeFrameReceived && !websocket._receiver._writableState.errorEmitted && this._readableState.length !== 0) {
3084
3084
  const chunk = this.read(this._readableState.length);
3085
3085
  websocket._receiver.write(chunk);
@@ -3101,7 +3101,7 @@ var require_websocket = __commonJS({
3101
3101
  }
3102
3102
  function socketOnEnd() {
3103
3103
  const websocket = this[kWebSocket];
3104
- websocket._readyState = WebSocket2.CLOSING;
3104
+ websocket._readyState = WebSocket3.CLOSING;
3105
3105
  websocket._receiver.end();
3106
3106
  this.end();
3107
3107
  }
@@ -3110,7 +3110,7 @@ var require_websocket = __commonJS({
3110
3110
  this.removeListener("error", socketOnError);
3111
3111
  this.on("error", NOOP);
3112
3112
  if (websocket) {
3113
- websocket._readyState = WebSocket2.CLOSING;
3113
+ websocket._readyState = WebSocket3.CLOSING;
3114
3114
  this.destroy();
3115
3115
  }
3116
3116
  }
@@ -3121,7 +3121,7 @@ var require_websocket = __commonJS({
3121
3121
  var require_stream = __commonJS({
3122
3122
  "node_modules/ws/lib/stream.js"(exports, module) {
3123
3123
  "use strict";
3124
- var WebSocket2 = require_websocket();
3124
+ var WebSocket3 = require_websocket();
3125
3125
  var { Duplex } = __require("stream");
3126
3126
  function emitClose(stream) {
3127
3127
  stream.emit("close");
@@ -3271,7 +3271,7 @@ var require_websocket_server = __commonJS({
3271
3271
  var extension = require_extension();
3272
3272
  var PerMessageDeflate = require_permessage_deflate();
3273
3273
  var subprotocol = require_subprotocol();
3274
- var WebSocket2 = require_websocket();
3274
+ var WebSocket3 = require_websocket();
3275
3275
  var { CLOSE_TIMEOUT, GUID, kWebSocket } = require_constants();
3276
3276
  var keyRegex = /^[+/0-9A-Za-z]{22}==$/;
3277
3277
  var RUNNING = 0;
@@ -3331,7 +3331,7 @@ var require_websocket_server = __commonJS({
3331
3331
  host: null,
3332
3332
  path: null,
3333
3333
  port: null,
3334
- WebSocket: WebSocket2,
3334
+ WebSocket: WebSocket3,
3335
3335
  ...options
3336
3336
  };
3337
3337
  if (options.port == null && !options.server && !options.noServer || options.port != null && (options.server || options.noServer) || options.server && options.noServer) {
@@ -11191,7 +11191,6 @@ var PluginWsServer = class {
11191
11191
  // Server Lifecycle
11192
11192
  // -------------------------------------------------------------------------
11193
11193
  async start() {
11194
- await this.shutdownExisting();
11195
11194
  for (let port = DEFAULT_PORT; port < DEFAULT_PORT + PORT_RANGE; port++) {
11196
11195
  try {
11197
11196
  await this.listen(port);
@@ -11207,53 +11206,6 @@ var PluginWsServer = class {
11207
11206
  `No available port in range ${DEFAULT_PORT}-${DEFAULT_PORT + PORT_RANGE - 1}. Another faux-studio instance may be running.`
11208
11207
  );
11209
11208
  }
11210
- /**
11211
- * Connect to any existing faux-studio WS servers and tell them to shut down
11212
- * their listener. This ensures the plugin reconnects to the newest instance.
11213
- */
11214
- async shutdownExisting() {
11215
- const promises = [];
11216
- for (let port = DEFAULT_PORT; port < DEFAULT_PORT + PORT_RANGE; port++) {
11217
- promises.push(this.sendShutdown(port));
11218
- }
11219
- await Promise.allSettled(promises);
11220
- await new Promise((r) => setTimeout(r, 500));
11221
- }
11222
- sendShutdown(port) {
11223
- return new Promise((resolve) => {
11224
- try {
11225
- const ws = new import_websocket.default(`ws://127.0.0.1:${port}`);
11226
- const timer = setTimeout(() => {
11227
- try {
11228
- ws.close();
11229
- } catch {
11230
- }
11231
- resolve();
11232
- }, 1e3);
11233
- ws.on("open", () => {
11234
- ws.send(JSON.stringify({ type: "shutdown" }));
11235
- clearTimeout(timer);
11236
- setTimeout(() => {
11237
- try {
11238
- ws.close();
11239
- } catch {
11240
- }
11241
- resolve();
11242
- }, 200);
11243
- });
11244
- ws.on("error", () => {
11245
- clearTimeout(timer);
11246
- resolve();
11247
- });
11248
- ws.on("close", () => {
11249
- clearTimeout(timer);
11250
- resolve();
11251
- });
11252
- } catch {
11253
- resolve();
11254
- }
11255
- });
11256
- }
11257
11209
  listen(port) {
11258
11210
  return new Promise((resolve, reject) => {
11259
11211
  const wss = new import_websocket_server.default({ port, host: "127.0.0.1" });
@@ -11314,13 +11266,6 @@ var PluginWsServer = class {
11314
11266
  } catch {
11315
11267
  return;
11316
11268
  }
11317
- if (!identified && msg.type === "shutdown") {
11318
- clearTimeout(handshakeTimeout);
11319
- ws.close(1e3, "Shutdown requested");
11320
- log("Shutdown requested by newer faux-studio instance \u2014 releasing port");
11321
- this.close();
11322
- return;
11323
- }
11324
11269
  if (!identified && msg.type === "handshake") {
11325
11270
  clearTimeout(handshakeTimeout);
11326
11271
  identified = true;
@@ -25625,7 +25570,7 @@ Resources provide quick read-only access to Figma state without tool calls:
25625
25570
  - Create components for reusable UI patterns.`;
25626
25571
  function createMcpServer(deps) {
25627
25572
  const server2 = new Server(
25628
- { name: "faux-studio", version: "0.3.10" },
25573
+ { name: "faux-studio", version: "0.3.12" },
25629
25574
  {
25630
25575
  capabilities: { tools: { listChanged: true }, resources: {}, logging: {} },
25631
25576
  instructions: INSTRUCTIONS
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "faux-studio",
3
- "version": "0.3.10",
3
+ "version": "0.3.12",
4
4
  "description": "AI-powered Figma design via MCP — connect any AI client to Figma Desktop",
5
5
  "type": "module",
6
6
  "bin": {