@phpsandbox/sdk 0.0.33 → 0.0.34

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.
@@ -3147,6 +3147,89 @@ var PHPSandbox = (() => {
3147
3147
  );
3148
3148
  var reconnecting_websocket_mjs_default = ReconnectingWebSocket;
3149
3149
 
3150
+ // src/utils/websocket.ts
3151
+ var getReadyStateLabel = (state) => {
3152
+ if (typeof state !== "number") {
3153
+ return void 0;
3154
+ }
3155
+ return {
3156
+ 0: "CONNECTING",
3157
+ 1: "OPEN",
3158
+ 2: "CLOSING",
3159
+ 3: "CLOSED"
3160
+ }[state] ?? `STATE_${state}`;
3161
+ };
3162
+ var sanitizeWebSocketUrl = (value) => {
3163
+ try {
3164
+ const url = new URL(value);
3165
+ return `${url.origin}${url.pathname}`;
3166
+ } catch {
3167
+ return value;
3168
+ }
3169
+ };
3170
+ var extractNestedErrorMessage = (value) => {
3171
+ if (value instanceof Error) {
3172
+ return value.message ? `${value.name}: ${value.message}` : value.name;
3173
+ }
3174
+ if (typeof value === "string") {
3175
+ return value;
3176
+ }
3177
+ if (!value || typeof value !== "object") {
3178
+ return void 0;
3179
+ }
3180
+ const record = value;
3181
+ const message = typeof record.message === "string" && record.message ? record.message : typeof record.reason === "string" && record.reason ? record.reason : void 0;
3182
+ if (!message) {
3183
+ return void 0;
3184
+ }
3185
+ const name = typeof record.name === "string" && record.name ? record.name : void 0;
3186
+ return name ? `${name}: ${message}` : message;
3187
+ };
3188
+ var describeWebSocketEvent = (event) => {
3189
+ if (event instanceof Error) {
3190
+ return event.message ? `${event.name}: ${event.message}` : event.name;
3191
+ }
3192
+ if (typeof event === "string") {
3193
+ return event;
3194
+ }
3195
+ if (!event || typeof event !== "object") {
3196
+ return String(event);
3197
+ }
3198
+ const record = event;
3199
+ const parts = [];
3200
+ const topLevelMessage = extractNestedErrorMessage(record);
3201
+ if (topLevelMessage) {
3202
+ parts.push(topLevelMessage);
3203
+ }
3204
+ const nestedErrorMessage = extractNestedErrorMessage(record.error);
3205
+ if (nestedErrorMessage && nestedErrorMessage !== topLevelMessage) {
3206
+ parts.push(`error=${nestedErrorMessage}`);
3207
+ }
3208
+ if (typeof record.type === "string" && record.type) {
3209
+ parts.push(`type=${record.type}`);
3210
+ }
3211
+ if (typeof record.code === "number") {
3212
+ parts.push(`code=${record.code}`);
3213
+ }
3214
+ if (typeof record.reason === "string" && record.reason && record.reason !== topLevelMessage) {
3215
+ parts.push(`reason=${record.reason}`);
3216
+ }
3217
+ if (typeof record.wasClean === "boolean") {
3218
+ parts.push(`wasClean=${record.wasClean}`);
3219
+ }
3220
+ const target = record.target ?? record.currentTarget;
3221
+ if (target && typeof target === "object") {
3222
+ if (typeof target.url === "string" && target.url) {
3223
+ parts.push(`url=${sanitizeWebSocketUrl(target.url)}`);
3224
+ }
3225
+ const readyState = getReadyStateLabel(target.readyState);
3226
+ if (readyState) {
3227
+ parts.push(`readyState=${readyState}`);
3228
+ }
3229
+ }
3230
+ return parts.length > 0 ? parts.join(" | ") : "Unknown websocket event";
3231
+ };
3232
+
3150
3233
  // node_modules/isomorphic-ws/browser.js
3151
3234
  var ws = null;
3152
3235
  if (typeof WebSocket !== "undefined") {
@@ -3184,6 +3267,13 @@ var PHPSandbox = (() => {
3184
3267
  };
3185
3268
 
3186
3269
  // src/socket/index.ts
3270
+ var ConnectionFailedError = class extends Error {
3271
+ constructor(message, originalError) {
3272
+ super(message);
3273
+ this.originalError = originalError;
3274
+ this.name = "ConnectionFailedError";
3275
+ }
3276
+ };
3187
3277
  var InvalidMessageError = class extends Error {
3188
3278
  constructor(message, data) {
3189
3279
  super(message);
@@ -3550,7 +3640,8 @@ var PHPSandbox = (() => {
3550
3640
  reject(new RateLimitError(_ev.reason || "Rate limit exceeded", _ev));
3551
3641
  return;
3552
3642
  }
3553
- reject(this.terminalError || new Error(`Connection lost to the notebook during request: ${_ev.reason || "Unknown reason"}`));
3643
+ const detail = describeWebSocketEvent(_ev);
3644
+ reject(this.terminalError || new ConnectionFailedError(`Connection lost to the notebook during request: ${detail}`, _ev));
3554
3645
  };
3555
3646
  this.rws.addEventListener("close", closeHandler);
3556
3647
  this.rws.addEventListener("error", closeHandler);
@@ -3738,8 +3829,10 @@ var PHPSandbox = (() => {
3738
3829
  });
3739
3830
  this.rws.addEventListener("error", (event) => {
3740
3831
  this.connectionStats.totalErrors++;
3832
+ const detail = describeWebSocketEvent(event);
3741
3833
  this.log("error", "Connection error", {
3742
- error: event,
3834
+ error: detail,
3835
+ rawError: event,
3743
3836
  totalErrors: this.connectionStats.totalErrors
3744
3837
  });
3745
3838
  });
@@ -4012,7 +4105,8 @@ var PHPSandbox = (() => {
4012
4105
  this.rws.removeEventListener("error", errorHandler);
4013
4106
  clearTimeout(timeoutId);
4014
4107
  this.connectPromise = null;
4015
- reject(new Error(`WebSocket connection failed: ${error}`));
4108
+ const detail = describeWebSocketEvent(error);
4109
+ reject(new ConnectionFailedError(`WebSocket connection failed: ${detail}`, error));
4016
4110
  };
4017
4111
  timeoutId = setTimeout(() => {
4018
4112
  this.rws.removeEventListener("open", openHandler);