@qontinui/ui-bridge-native 0.4.0 → 0.5.1

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.
@@ -2166,6 +2166,14 @@ function createServerHandlers(registry, executor, config) {
2166
2166
  "NOT_SUPPORTED"
2167
2167
  );
2168
2168
  },
2169
+ // Keep-awake (stub — apps should override via setKeepAwakeProvider, which
2170
+ // the provider wires when a keepAwakeProvider prop is supplied)
2171
+ keepAwake: async () => {
2172
+ return error2(
2173
+ "keep-awake not configured. Provide a keepAwakeProvider to UIBridgeNativeProvider.",
2174
+ "NOT_SUPPORTED"
2175
+ );
2176
+ },
2169
2177
  // Meta / Introspection (stub — server constructor overrides with real route table)
2170
2178
  getMethods: async () => {
2171
2179
  return error2("Methods introspection not configured", "NOT_SUPPORTED");
@@ -2839,6 +2847,12 @@ var WS_ROUTES = [
2839
2847
  httpMethods: ["POST"],
2840
2848
  requiresTestHooks: true
2841
2849
  },
2850
+ {
2851
+ pattern: "control/keep-awake",
2852
+ handler: "keepAwake",
2853
+ httpMethods: ["POST"],
2854
+ requiresTestHooks: true
2855
+ },
2842
2856
  // Observability — last-N console errors + network requests. testHooks-gated
2843
2857
  // because patching `console.error` / `fetch` is invasive in production.
2844
2858
  {
@@ -2891,7 +2905,8 @@ var HANDLER_DESCRIPTIONS = {
2891
2905
  getConsoleErrors: "TEST HOOK \u2014 last-N console.error/console.warn entries; ?since=<ms>&limit=<n>",
2892
2906
  getNetworkRequests: "TEST HOOK \u2014 last-N fetch/XHR entries with status + duration; ?since=<ms>&limit=<n>",
2893
2907
  pushModal: "TEST HOOK \u2014 push a modal onto the snapshot.modalStack via the registry ModalDetector",
2894
- dismissModal: "TEST HOOK \u2014 dismiss a modal by id from the snapshot.modalStack via the registry ModalDetector"
2908
+ dismissModal: "TEST HOOK \u2014 dismiss a modal by id from the snapshot.modalStack via the registry ModalDetector",
2909
+ keepAwake: "TEST HOOK \u2014 keep the device screen awake via the injected keepAwakeProvider: body { enabled: boolean, durationMs?: number }"
2895
2910
  };
2896
2911
  var ACTION_REFERENCE = [
2897
2912
  { name: "press", aliases: ["click"], params: "PressActionParams (optional position)" },
@@ -3159,6 +3174,35 @@ var NativeUIBridgeServer = class {
3159
3174
  }
3160
3175
  };
3161
3176
  }
3177
+ /**
3178
+ * Set a keep-awake provider for native screen-wake control.
3179
+ * This enables `control/keep-awake` and arms the auto-arm hook in
3180
+ * handleRequest (every request keeps the screen alive for 60s).
3181
+ */
3182
+ setKeepAwakeProvider(provider) {
3183
+ this.keepAwakeProvider = provider;
3184
+ this.handlers.keepAwake = async (ctx) => {
3185
+ const { enabled, durationMs } = ctx.body ?? {};
3186
+ if (typeof enabled !== "boolean") {
3187
+ return {
3188
+ success: false,
3189
+ error: "enabled must be boolean",
3190
+ code: "INVALID_REQUEST",
3191
+ timestamp: Date.now()
3192
+ };
3193
+ }
3194
+ if (enabled) {
3195
+ provider.request("ui-bridge", typeof durationMs === "number" ? durationMs : void 0);
3196
+ } else {
3197
+ provider.release("ui-bridge");
3198
+ }
3199
+ return {
3200
+ success: true,
3201
+ data: { enabled, durationMs: typeof durationMs === "number" ? durationMs : null },
3202
+ timestamp: Date.now()
3203
+ };
3204
+ };
3205
+ }
3162
3206
  /**
3163
3207
  * Start the HTTP server
3164
3208
  */
@@ -3751,6 +3795,12 @@ var NativeUIBridgeServer = class {
3751
3795
  if (request.method === "OPTIONS") {
3752
3796
  return { status: 204, headers, body: "" };
3753
3797
  }
3798
+ if (this.config.testHooks === true && this.keepAwakeProvider) {
3799
+ try {
3800
+ this.keepAwakeProvider.request("auto-arm", 6e4);
3801
+ } catch {
3802
+ }
3803
+ }
3754
3804
  try {
3755
3805
  const response = await this.routeRequest(request);
3756
3806
  return {
@@ -4651,6 +4701,7 @@ function UIBridgeNativeProvider({
4651
4701
  serverAdapter,
4652
4702
  navigationProvider,
4653
4703
  screenshotProvider,
4704
+ keepAwakeProvider,
4654
4705
  routeProvider,
4655
4706
  cloudRelayConfig,
4656
4707
  enableMdnsAnnounce,
@@ -4705,6 +4756,9 @@ function UIBridgeNativeProvider({
4705
4756
  if (screenshotProvider) {
4706
4757
  server.setScreenshotProvider(screenshotProvider);
4707
4758
  }
4759
+ if (keepAwakeProvider) {
4760
+ server.setKeepAwakeProvider(keepAwakeProvider);
4761
+ }
4708
4762
  if (routeProvider) {
4709
4763
  server.setRouteProvider(routeProvider);
4710
4764
  }
@@ -4758,6 +4812,7 @@ function UIBridgeNativeProvider({
4758
4812
  serverAdapter,
4759
4813
  navigationProvider,
4760
4814
  screenshotProvider,
4815
+ keepAwakeProvider,
4761
4816
  routeProvider
4762
4817
  ]);
4763
4818
  const stopServer = useCallback(() => {
@@ -4791,6 +4846,7 @@ function UIBridgeNativeProvider({
4791
4846
  });
4792
4847
  if (navigationProvider) bareServer.setNavigationProvider(navigationProvider);
4793
4848
  if (screenshotProvider) bareServer.setScreenshotProvider(screenshotProvider);
4849
+ if (keepAwakeProvider) bareServer.setKeepAwakeProvider(keepAwakeProvider);
4794
4850
  if (routeProvider) bareServer.setRouteProvider(routeProvider);
4795
4851
  serverRef.current = bareServer;
4796
4852
  } catch (err) {