@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.
@@ -3102,6 +3102,89 @@ var ReconnectingWebSocket = (
3102
3102
  );
3103
3103
  var reconnecting_websocket_mjs_default = ReconnectingWebSocket;
3104
3104
 
3105
+ // src/utils/websocket.ts
3106
+ var getReadyStateLabel = (state) => {
3107
+ if (typeof state !== "number") {
3108
+ return void 0;
3109
+ }
3110
+ return {
3111
+ 0: "CONNECTING",
3112
+ 1: "OPEN",
3113
+ 2: "CLOSING",
3114
+ 3: "CLOSED"
3115
+ }[state] ?? `STATE_${state}`;
3116
+ };
3117
+ var sanitizeWebSocketUrl = (value) => {
3118
+ try {
3119
+ const url = new URL(value);
3120
+ return `${url.origin}${url.pathname}`;
3121
+ } catch {
3122
+ return value;
3123
+ }
3124
+ };
3125
+ var extractNestedErrorMessage = (value) => {
3126
+ if (value instanceof Error) {
3127
+ return value.message ? `${value.name}: ${value.message}` : value.name;
3128
+ }
3129
+ if (typeof value === "string") {
3130
+ return value;
3131
+ }
3132
+ if (!value || typeof value !== "object") {
3133
+ return void 0;
3134
+ }
3135
+ const record = value;
3136
+ const message = typeof record.message === "string" && record.message ? record.message : typeof record.reason === "string" && record.reason ? record.reason : void 0;
3137
+ if (!message) {
3138
+ return void 0;
3139
+ }
3140
+ const name = typeof record.name === "string" && record.name ? record.name : void 0;
3141
+ return name ? `${name}: ${message}` : message;
3142
+ };
3143
+ var describeWebSocketEvent = (event) => {
3144
+ if (event instanceof Error) {
3145
+ return event.message ? `${event.name}: ${event.message}` : event.name;
3146
+ }
3147
+ if (typeof event === "string") {
3148
+ return event;
3149
+ }
3150
+ if (!event || typeof event !== "object") {
3151
+ return String(event);
3152
+ }
3153
+ const record = event;
3154
+ const parts = [];
3155
+ const topLevelMessage = extractNestedErrorMessage(record);
3156
+ if (topLevelMessage) {
3157
+ parts.push(topLevelMessage);
3158
+ }
3159
+ const nestedErrorMessage = extractNestedErrorMessage(record.error);
3160
+ if (nestedErrorMessage && nestedErrorMessage !== topLevelMessage) {
3161
+ parts.push(`error=${nestedErrorMessage}`);
3162
+ }
3163
+ if (typeof record.type === "string" && record.type) {
3164
+ parts.push(`type=${record.type}`);
3165
+ }
3166
+ if (typeof record.code === "number") {
3167
+ parts.push(`code=${record.code}`);
3168
+ }
3169
+ if (typeof record.reason === "string" && record.reason && record.reason !== topLevelMessage) {
3170
+ parts.push(`reason=${record.reason}`);
3171
+ }
3172
+ if (typeof record.wasClean === "boolean") {
3173
+ parts.push(`wasClean=${record.wasClean}`);
3174
+ }
3175
+ const target = record.target ?? record.currentTarget;
3176
+ if (target && typeof target === "object") {
3177
+ if (typeof target.url === "string" && target.url) {
3178
+ parts.push(`url=${sanitizeWebSocketUrl(target.url)}`);
3179
+ }
3180
+ const readyState = getReadyStateLabel(target.readyState);
3181
+ if (readyState) {
3182
+ parts.push(`readyState=${readyState}`);
3183
+ }
3184
+ }
3185
+ return parts.length > 0 ? parts.join(" | ") : "Unknown websocket event";
3186
+ };
3187
+
3105
3188
  // node_modules/isomorphic-ws/browser.js
3106
3189
  var ws = null;
3107
3190
  if (typeof WebSocket !== "undefined") {
@@ -3139,6 +3222,13 @@ var NamedDisposable = class {
3139
3222
  };
3140
3223
 
3141
3224
  // src/socket/index.ts
3225
+ var ConnectionFailedError = class extends Error {
3226
+ constructor(message, originalError) {
3227
+ super(message);
3228
+ this.originalError = originalError;
3229
+ this.name = "ConnectionFailedError";
3230
+ }
3231
+ };
3142
3232
  var InvalidMessageError = class extends Error {
3143
3233
  constructor(message, data) {
3144
3234
  super(message);
@@ -3505,7 +3595,8 @@ var Transport = class {
3505
3595
  reject(new RateLimitError(_ev.reason || "Rate limit exceeded", _ev));
3506
3596
  return;
3507
3597
  }
3508
- reject(this.terminalError || new Error(`Connection lost to the notebook during request: ${_ev.reason || "Unknown reason"}`));
3598
+ const detail = describeWebSocketEvent(_ev);
3599
+ reject(this.terminalError || new ConnectionFailedError(`Connection lost to the notebook during request: ${detail}`, _ev));
3509
3600
  };
3510
3601
  this.rws.addEventListener("close", closeHandler);
3511
3602
  this.rws.addEventListener("error", closeHandler);
@@ -3693,8 +3784,10 @@ var Transport = class {
3693
3784
  });
3694
3785
  this.rws.addEventListener("error", (event) => {
3695
3786
  this.connectionStats.totalErrors++;
3787
+ const detail = describeWebSocketEvent(event);
3696
3788
  this.log("error", "Connection error", {
3697
- error: event,
3789
+ error: detail,
3790
+ rawError: event,
3698
3791
  totalErrors: this.connectionStats.totalErrors
3699
3792
  });
3700
3793
  });
@@ -3967,7 +4060,8 @@ connect_fn = function() {
3967
4060
  this.rws.removeEventListener("error", errorHandler);
3968
4061
  clearTimeout(timeoutId);
3969
4062
  this.connectPromise = null;
3970
- reject(new Error(`WebSocket connection failed: ${error}`));
4063
+ const detail = describeWebSocketEvent(error);
4064
+ reject(new ConnectionFailedError(`WebSocket connection failed: ${detail}`, error));
3971
4065
  };
3972
4066
  timeoutId = setTimeout(() => {
3973
4067
  this.rws.removeEventListener("open", openHandler);