@robotical/webapp-types 3.25.22 → 3.25.23

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "marty-web-app",
3
- "version": "3.25.22",
3
+ "version": "3.25.23",
4
4
  "private": true,
5
5
  "engines": {
6
6
  "node": ">=20"
@@ -41,6 +41,7 @@ export declare enum AppSentMessage {
41
41
  GET_DEVICE_INFO = "GET_DEVICE_INFO",
42
42
  UPDATE_UI_READY = "UPDATE_UI_READY",
43
43
  UPDATE_GET_STATE = "UPDATE_GET_STATE",
44
+ UPDATE_CHECK_NOW = "UPDATE_CHECK_NOW",
44
45
  UPDATE_APPLY_WEB = "UPDATE_APPLY_WEB",
45
46
  UPDATE_OPEN_NATIVE_STORE = "UPDATE_OPEN_NATIVE_STORE",
46
47
  SEND_ATOMIC_READ_OPERATION_TO_MARTY = "SEND_ATOMIC_READ_OPERATION_TO_MARTY"
@@ -64,6 +65,10 @@ export type AppUpdateSnapshot = {
64
65
  capability: typeof UPDATE_UI_CAPABILITY;
65
66
  nativeUpdate: NativeAppUpdate | null;
66
67
  webUpdate: WebAppUpdate | null;
68
+ checks?: {
69
+ native: "checking" | "current" | "unknown";
70
+ web: "checking" | "current" | "unknown";
71
+ };
67
72
  };
68
73
  export interface WRAPPER_RESPONSE_BASE {
69
74
  success: boolean;
@@ -29,6 +29,7 @@ export var AppSentMessage;
29
29
  AppSentMessage["GET_DEVICE_INFO"] = "GET_DEVICE_INFO";
30
30
  AppSentMessage["UPDATE_UI_READY"] = "UPDATE_UI_READY";
31
31
  AppSentMessage["UPDATE_GET_STATE"] = "UPDATE_GET_STATE";
32
+ AppSentMessage["UPDATE_CHECK_NOW"] = "UPDATE_CHECK_NOW";
32
33
  AppSentMessage["UPDATE_APPLY_WEB"] = "UPDATE_APPLY_WEB";
33
34
  AppSentMessage["UPDATE_OPEN_NATIVE_STORE"] = "UPDATE_OPEN_NATIVE_STORE";
34
35
  AppSentMessage["SEND_ATOMIC_READ_OPERATION_TO_MARTY"] = "SEND_ATOMIC_READ_OPERATION_TO_MARTY";
@@ -3,8 +3,10 @@ type UpdateListener = (snapshot: AppUpdateSnapshot) => void;
3
3
  export declare const isAppUpdateSnapshot: (value: unknown) => value is AppUpdateSnapshot;
4
4
  export declare const publishPhoneAppUpdateState: (value: unknown) => void;
5
5
  export declare const subscribeToPhoneAppUpdates: (listener: UpdateListener) => () => void;
6
+ export declare const usePhoneAppUpdates: () => AppUpdateSnapshot | null;
6
7
  export declare const announcePhoneAppUpdateUiReady: () => Promise<AppUpdateSnapshot | null>;
7
8
  export declare const getPhoneAppUpdateState: () => Promise<AppUpdateSnapshot | null>;
9
+ export declare const checkPhoneAppUpdates: () => Promise<AppUpdateSnapshot | null>;
8
10
  export declare const applyPhoneWebUpdate: () => Promise<"restarting" | "unavailable">;
9
11
  export declare const openPhoneNativeStore: () => Promise<boolean>;
10
12
  export {};
@@ -1,3 +1,14 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
1
12
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
13
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
14
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -36,7 +47,9 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
36
47
  };
37
48
  import { AppSentMessage, UPDATE_UI_CAPABILITY, } from "../../types/communication-between-apps/wrapper-communication";
38
49
  import isPhoneApp from "./is-phone-app";
50
+ import { useEffect, useState } from "react";
39
51
  var listeners = new Set();
52
+ var latestSnapshot = null;
40
53
  var isNativeUpdate = function (value) {
41
54
  if (!value || typeof value !== "object") {
42
55
  return false;
@@ -60,22 +73,35 @@ export var isAppUpdateSnapshot = function (value) {
60
73
  return false;
61
74
  }
62
75
  var candidate = value;
76
+ var validChecks = candidate.checks === undefined || (candidate.checks !== null && typeof candidate.checks === "object" &&
77
+ [candidate.checks.native, candidate.checks.web].every(function (status) {
78
+ return ["checking", "current", "unknown"].includes(status);
79
+ }));
63
80
  return (candidate.capability === UPDATE_UI_CAPABILITY &&
64
81
  (candidate.nativeUpdate === null || isNativeUpdate(candidate.nativeUpdate)) &&
65
- (candidate.webUpdate === null || isWebUpdate(candidate.webUpdate)));
82
+ (candidate.webUpdate === null || isWebUpdate(candidate.webUpdate)) && validChecks);
66
83
  };
67
84
  export var publishPhoneAppUpdateState = function (value) {
68
85
  if (!isAppUpdateSnapshot(value)) {
69
86
  return;
70
87
  }
88
+ latestSnapshot = value;
71
89
  listeners.forEach(function (listener) { return listener(value); });
72
90
  };
73
91
  export var subscribeToPhoneAppUpdates = function (listener) {
74
92
  listeners.add(listener);
93
+ if (latestSnapshot) {
94
+ listener(latestSnapshot);
95
+ }
75
96
  return function () {
76
97
  listeners.delete(listener);
77
98
  };
78
99
  };
100
+ export var usePhoneAppUpdates = function () {
101
+ var _a = useState(latestSnapshot), snapshot = _a[0], setSnapshot = _a[1];
102
+ useEffect(function () { return subscribeToPhoneAppUpdates(setSnapshot); }, []);
103
+ return snapshot;
104
+ };
79
105
  var requestUpdateState = function (message) { return __awaiter(void 0, void 0, void 0, function () {
80
106
  var snapshot, _a;
81
107
  return __generator(this, function (_b) {
@@ -108,6 +134,29 @@ export var announcePhoneAppUpdateUiReady = function () {
108
134
  export var getPhoneAppUpdateState = function () {
109
135
  return requestUpdateState(AppSentMessage.UPDATE_GET_STATE);
110
136
  };
137
+ export var checkPhoneAppUpdates = function () { return __awaiter(void 0, void 0, void 0, function () {
138
+ var supportsChecks, result, _a, native, web;
139
+ return __generator(this, function (_b) {
140
+ switch (_b.label) {
141
+ case 0:
142
+ supportsChecks = Boolean(latestSnapshot === null || latestSnapshot === void 0 ? void 0 : latestSnapshot.checks);
143
+ if (latestSnapshot && supportsChecks) {
144
+ publishPhoneAppUpdateState(__assign(__assign({}, latestSnapshot), { checks: { native: "checking", web: "checking" } }));
145
+ }
146
+ return [4 /*yield*/, requestUpdateState(supportsChecks ? AppSentMessage.UPDATE_CHECK_NOW : AppSentMessage.UPDATE_GET_STATE)];
147
+ case 1:
148
+ result = _b.sent();
149
+ if (!result && (latestSnapshot === null || latestSnapshot === void 0 ? void 0 : latestSnapshot.checks)) {
150
+ _a = latestSnapshot.checks, native = _a.native, web = _a.web;
151
+ publishPhoneAppUpdateState(__assign(__assign({}, latestSnapshot), { checks: {
152
+ native: native === "checking" ? "unknown" : native,
153
+ web: web === "checking" ? "unknown" : web,
154
+ } }));
155
+ }
156
+ return [2 /*return*/, result];
157
+ }
158
+ });
159
+ }); };
111
160
  export var applyPhoneWebUpdate = function () { return __awaiter(void 0, void 0, void 0, function () {
112
161
  var response, _a;
113
162
  return __generator(this, function (_b) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@robotical/webapp-types",
3
- "version": "3.25.22",
3
+ "version": "3.25.23",
4
4
  "description": "Type definitions for the Application Manager",
5
5
  "main": "dist/application-manager.d.ts",
6
6
  "types": "dist/application-manager.d.ts",