@qontinui/ui-bridge-native 0.6.9 → 0.6.10

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.
package/dist/index.mjs CHANGED
@@ -985,9 +985,10 @@ var DefaultNativeActionExecutor = class {
985
985
  requestId: request.requestId,
986
986
  durationMs: successTime - startTime
987
987
  });
988
+ const fresh = this.registry.getElement(registered.id) ?? registered;
988
989
  return {
989
990
  success: true,
990
- elementState: registered.getState(),
991
+ elementState: fresh.getState(),
991
992
  result,
992
993
  durationMs: successTime - startTime,
993
994
  timestamp: successTime,
@@ -2158,6 +2159,13 @@ function matchElementsByText(registry, text, opts) {
2158
2159
  scored.sort((a, b) => a.rank - b.rank);
2159
2160
  return scored.map((s) => s.element);
2160
2161
  }
2162
+ function resolveElementState(element) {
2163
+ const state = element.getState();
2164
+ if (element.type === "input" && state.value === void 0 && typeof element.props?.value === "string") {
2165
+ return { ...state, value: element.props.value };
2166
+ }
2167
+ return state;
2168
+ }
2161
2169
  async function executeWorkflowStep(step, registry, executor) {
2162
2170
  const startTime = Date.now();
2163
2171
  try {
@@ -2394,7 +2402,7 @@ function createServerHandlers(registry, executor, config) {
2394
2402
  type: element.type,
2395
2403
  label: element.label,
2396
2404
  identifier: element.getIdentifier(),
2397
- state: element.getState(),
2405
+ state: resolveElementState(element),
2398
2406
  actions: element.actions,
2399
2407
  customActions: element.customActions ? Object.keys(element.customActions) : void 0,
2400
2408
  registeredHandlers: handlers.length > 0 ? handlers : void 0,
@@ -2408,18 +2416,19 @@ function createServerHandlers(registry, executor, config) {
2408
2416
  if (!element) {
2409
2417
  return error2(`Element not found: ${id}`, "ELEMENT_NOT_FOUND");
2410
2418
  }
2411
- return success2({ state: element.getState() });
2419
+ return success2({ state: resolveElementState(element) });
2412
2420
  },
2413
2421
  executeAction: async (ctx) => {
2414
- const { id } = ctx.params;
2415
- const body = ctx.body;
2416
- if (!body?.action) {
2422
+ const rawBody = ctx.body ?? {};
2423
+ const envelope = rawBody.request && typeof rawBody.request === "object" ? rawBody.request : rawBody;
2424
+ const id = ctx.params.id ?? rawBody.id ?? "";
2425
+ if (!envelope?.action) {
2417
2426
  return error2("Action is required", "INVALID_REQUEST");
2418
2427
  }
2419
2428
  const response = await executor.executeAction(id, {
2420
- action: body.action,
2421
- params: body.params,
2422
- waitOptions: body.waitOptions
2429
+ action: envelope.action,
2430
+ params: envelope.params,
2431
+ waitOptions: envelope.waitOptions
2423
2432
  });
2424
2433
  if (!response.success) {
2425
2434
  return error2(response.error || "Action failed", "ACTION_FAILED");
@@ -3058,7 +3067,7 @@ function createServerHandlers(registry, executor, config) {
3058
3067
  };
3059
3068
  if (config?.appInfo) {
3060
3069
  response.uiBridge = {
3061
- version: "0.3.0",
3070
+ version: "0.6.10",
3062
3071
  ...config.appInfo,
3063
3072
  capabilities: ["elements", "components", "actions", "design"],
3064
3073
  elementCount: stats.elements,
@@ -6630,6 +6639,46 @@ function decodeTextPayload(payload) {
6630
6639
  return new TextDecoder().decode(payload);
6631
6640
  }
6632
6641
 
6642
+ // src/server/bind-retry.ts
6643
+ function isAddrInUseError(err) {
6644
+ const message = err instanceof Error ? err.message : typeof err === "string" ? err : String(err);
6645
+ const code = err?.code;
6646
+ return message.includes("EADDRINUSE") || message.toLowerCase().includes("address already in use") || code === "EADDRINUSE";
6647
+ }
6648
+ var defaultSleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
6649
+ async function bindWithRetry(attempt, options = {}) {
6650
+ const {
6651
+ minTotalMs = 3e4,
6652
+ initialDelayMs = 500,
6653
+ maxDelayMs = 5e3,
6654
+ backoffFactor = 2,
6655
+ logger = console,
6656
+ sleep: sleep2 = defaultSleep,
6657
+ now = Date.now
6658
+ } = options;
6659
+ const startedAt = now();
6660
+ let delay = initialDelayMs;
6661
+ let attemptIndex = 0;
6662
+ for (; ; ) {
6663
+ try {
6664
+ await attempt(attemptIndex);
6665
+ return;
6666
+ } catch (err) {
6667
+ const elapsed = now() - startedAt;
6668
+ const budgetExhausted = elapsed + delay >= minTotalMs;
6669
+ if (!isAddrInUseError(err) || budgetExhausted) {
6670
+ throw err;
6671
+ }
6672
+ logger.warn(
6673
+ `[ui-bridge-native] bind failed with EADDRINUSE (attempt ${attemptIndex + 1}); retrying in ${delay}ms (elapsed ${elapsed}ms / budget ${minTotalMs === Infinity ? "\u221E" : minTotalMs}ms)`
6674
+ );
6675
+ await sleep2(delay);
6676
+ delay = Math.min(delay * backoffFactor, maxDelayMs);
6677
+ attemptIndex += 1;
6678
+ }
6679
+ }
6680
+ }
6681
+
6633
6682
  // src/server/ws-connection.ts
6634
6683
  var WebSocketConnection = class {
6635
6684
  constructor(id, socket, onMessage, onClose) {
@@ -7196,6 +7245,6 @@ var styles = StyleSheet.create({
7196
7245
  }
7197
7246
  });
7198
7247
 
7199
- export { CloudRelayClient, DefaultNativeActionExecutor, DeviceAnnouncer, ModalDetector, NativeUIBridgeRegistry, NativeUIBridgeServer, State, ToastCapture, TransitionTo, UIBridgeInspector, UIBridgeNativeProvider, UI_BRIDGE_NATIVE_ROUTES, UndoTracker, WebSocketConnection, WebSocketEventBridge, buildTreePath, buildUpgradeResponse, captureNativeResponsiveSnapshot, captureNativeStateVariations, computeAcceptKey, createDesignHandlers, createNativeActionExecutor, createNativeElementIdentifier, createNativeServer, createServerHandlers, extractHandlerNames, findAllByPattern, findElementByIdentifier, getGlobalRegistry, getNativeElementDesignData, mapNativeStyleToExtended, matchesIdentifier, parseTreePath, resetGlobalRegistry, setGlobalRegistry, useToastRecorder, useUIBridge, useUIBridgeModal, useUIBridgeNative, useUIBridgeNativeOptional, useUIBridgeNativeRequired, useUIBridgeRequired, useUIBridgeToast, useUIComponent, useUIComponentAction, useUIElement, useUIElementWithProps };
7248
+ export { CloudRelayClient, DefaultNativeActionExecutor, DeviceAnnouncer, ModalDetector, NativeUIBridgeRegistry, NativeUIBridgeServer, State, ToastCapture, TransitionTo, UIBridgeInspector, UIBridgeNativeProvider, UI_BRIDGE_NATIVE_ROUTES, UndoTracker, WebSocketConnection, WebSocketEventBridge, bindWithRetry, buildTreePath, buildUpgradeResponse, captureNativeResponsiveSnapshot, captureNativeStateVariations, computeAcceptKey, createDesignHandlers, createNativeActionExecutor, createNativeElementIdentifier, createNativeServer, createServerHandlers, extractHandlerNames, findAllByPattern, findElementByIdentifier, getGlobalRegistry, getNativeElementDesignData, isAddrInUseError, mapNativeStyleToExtended, matchesIdentifier, parseTreePath, resetGlobalRegistry, setGlobalRegistry, useToastRecorder, useUIBridge, useUIBridgeModal, useUIBridgeNative, useUIBridgeNativeOptional, useUIBridgeNativeRequired, useUIBridgeRequired, useUIBridgeToast, useUIComponent, useUIComponentAction, useUIElement, useUIElementWithProps };
7200
7249
  //# sourceMappingURL=index.mjs.map
7201
7250
  //# sourceMappingURL=index.mjs.map