@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/control/action-executor.d.ts.map +1 -1
- package/dist/control/index.js +2 -1
- package/dist/control/index.js.map +1 -1
- package/dist/control/index.mjs +2 -1
- package/dist/control/index.mjs.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +61 -10
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +60 -11
- package/dist/index.mjs.map +1 -1
- package/dist/react/index.js +19 -10
- package/dist/react/index.js.map +1 -1
- package/dist/react/index.mjs +19 -10
- package/dist/react/index.mjs.map +1 -1
- package/dist/server/bind-retry.d.ts +64 -0
- package/dist/server/bind-retry.d.ts.map +1 -0
- package/dist/server/handlers.d.ts.map +1 -1
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +59 -9
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +58 -10
- package/dist/server/index.mjs.map +1 -1
- package/package.json +1 -1
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:
|
|
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
|
|
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
|
|
2419
|
+
return success2({ state: resolveElementState(element) });
|
|
2412
2420
|
},
|
|
2413
2421
|
executeAction: async (ctx) => {
|
|
2414
|
-
const
|
|
2415
|
-
const
|
|
2416
|
-
|
|
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:
|
|
2421
|
-
params:
|
|
2422
|
-
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.
|
|
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
|