@greensecurity/javascript-sdk 0.46.0-beta.9 → 0.47.0-beta.0
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/commonjs/__tests__/apps/contract.test.js +288 -4
- package/dist/commonjs/__tests__/apps/contract.test.js.map +1 -1
- package/dist/commonjs/__tests__/apps/devpreview-routes.test.d.ts +2 -0
- package/dist/commonjs/__tests__/apps/devpreview-routes.test.d.ts.map +1 -0
- package/dist/commonjs/__tests__/apps/devpreview-routes.test.js +86 -0
- package/dist/commonjs/__tests__/apps/devpreview-routes.test.js.map +1 -0
- package/dist/commonjs/__tests__/apps/kit/example.test.js +84 -4
- package/dist/commonjs/__tests__/apps/kit/example.test.js.map +1 -1
- package/dist/commonjs/__tests__/apps/kit/pages.test.d.ts +2 -0
- package/dist/commonjs/__tests__/apps/kit/pages.test.d.ts.map +1 -0
- package/dist/commonjs/__tests__/apps/kit/pages.test.js +119 -0
- package/dist/commonjs/__tests__/apps/kit/pages.test.js.map +1 -0
- package/dist/commonjs/__tests__/apps/kit/render.test.js +24 -0
- package/dist/commonjs/__tests__/apps/kit/render.test.js.map +1 -1
- package/dist/commonjs/__tests__/apps/kit/store.test.d.ts +2 -0
- package/dist/commonjs/__tests__/apps/kit/store.test.d.ts.map +1 -0
- package/dist/commonjs/__tests__/apps/kit/store.test.js +123 -0
- package/dist/commonjs/__tests__/apps/kit/store.test.js.map +1 -0
- package/dist/commonjs/__tests__/apps/post-install-page.test.d.ts +2 -0
- package/dist/commonjs/__tests__/apps/post-install-page.test.d.ts.map +1 -0
- package/dist/commonjs/__tests__/apps/post-install-page.test.js +110 -0
- package/dist/commonjs/__tests__/apps/post-install-page.test.js.map +1 -0
- package/dist/commonjs/__tests__/apps/routes.test.d.ts +2 -0
- package/dist/commonjs/__tests__/apps/routes.test.d.ts.map +1 -0
- package/dist/commonjs/__tests__/apps/routes.test.js +238 -0
- package/dist/commonjs/__tests__/apps/routes.test.js.map +1 -0
- package/dist/commonjs/__tests__/vendors.test.js +1 -1
- package/dist/commonjs/__tests__/zoneDevicesCreate.test.d.ts +2 -0
- package/dist/commonjs/__tests__/zoneDevicesCreate.test.d.ts.map +1 -0
- package/dist/commonjs/__tests__/zoneDevicesCreate.test.js +47 -0
- package/dist/commonjs/__tests__/zoneDevicesCreate.test.js.map +1 -0
- package/dist/commonjs/__tests__/zones.test.js +4 -28
- package/dist/commonjs/__tests__/zones.test.js.map +1 -1
- package/dist/commonjs/admin-funcs/zoneDevicesCreate.d.ts +11 -0
- package/dist/commonjs/admin-funcs/zoneDevicesCreate.d.ts.map +1 -0
- package/dist/commonjs/admin-funcs/zoneDevicesCreate.js +14 -0
- package/dist/commonjs/admin-funcs/zoneDevicesCreate.js.map +1 -0
- package/dist/commonjs/admin-funcs/zoneDevicesMacAvailability.d.ts +3 -0
- package/dist/commonjs/admin-funcs/zoneDevicesMacAvailability.d.ts.map +1 -0
- package/dist/commonjs/admin-funcs/zoneDevicesMacAvailability.js +11 -0
- package/dist/commonjs/admin-funcs/zoneDevicesMacAvailability.js.map +1 -0
- package/dist/commonjs/apps/components.d.ts +321 -0
- package/dist/commonjs/apps/components.d.ts.map +1 -1
- package/dist/commonjs/apps/components.js +168 -2
- package/dist/commonjs/apps/components.js.map +1 -1
- package/dist/commonjs/apps/context.d.ts +24 -0
- package/dist/commonjs/apps/context.d.ts.map +1 -1
- package/dist/commonjs/apps/context.js.map +1 -1
- package/dist/commonjs/apps/devpreview.d.ts +20 -3
- package/dist/commonjs/apps/devpreview.d.ts.map +1 -1
- package/dist/commonjs/apps/devpreview.js +18 -7
- package/dist/commonjs/apps/devpreview.js.map +1 -1
- package/dist/commonjs/apps/hooks/index.d.ts +33 -2
- package/dist/commonjs/apps/hooks/index.d.ts.map +1 -1
- package/dist/commonjs/apps/hooks/index.js +41 -1
- package/dist/commonjs/apps/hooks/index.js.map +1 -1
- package/dist/commonjs/apps/hooks/store.d.ts +48 -0
- package/dist/commonjs/apps/hooks/store.d.ts.map +1 -0
- package/dist/commonjs/apps/hooks/store.js +87 -0
- package/dist/commonjs/apps/hooks/store.js.map +1 -0
- package/dist/commonjs/apps/manifest.d.ts +64 -3
- package/dist/commonjs/apps/manifest.d.ts.map +1 -1
- package/dist/commonjs/apps/manifest.js +128 -27
- package/dist/commonjs/apps/manifest.js.map +1 -1
- package/dist/commonjs/apps/protocol.d.ts +1 -1
- package/dist/commonjs/apps/protocol.d.ts.map +1 -1
- package/dist/commonjs/apps/route.d.ts +11 -1
- package/dist/commonjs/apps/route.d.ts.map +1 -1
- package/dist/commonjs/apps/route.js +13 -7
- package/dist/commonjs/apps/route.js.map +1 -1
- package/dist/commonjs/apps/routes.d.ts +65 -0
- package/dist/commonjs/apps/routes.d.ts.map +1 -0
- package/dist/commonjs/apps/routes.js +202 -0
- package/dist/commonjs/apps/routes.js.map +1 -0
- package/dist/commonjs/apps/surfaces.d.ts +20 -2
- package/dist/commonjs/apps/surfaces.d.ts.map +1 -1
- package/dist/commonjs/apps/surfaces.js +45 -7
- package/dist/commonjs/apps/surfaces.js.map +1 -1
- package/dist/commonjs/apps/testing/index.d.ts +17 -1
- package/dist/commonjs/apps/testing/index.d.ts.map +1 -1
- package/dist/commonjs/apps/testing/index.js +50 -1
- package/dist/commonjs/apps/testing/index.js.map +1 -1
- package/dist/commonjs/apps/ui/index.d.ts +13 -0
- package/dist/commonjs/apps/ui/index.d.ts.map +1 -1
- package/dist/commonjs/apps/ui/index.js +19 -2
- package/dist/commonjs/apps/ui/index.js.map +1 -1
- package/dist/commonjs/index.extras.d.ts +4 -0
- package/dist/commonjs/index.extras.d.ts.map +1 -1
- package/dist/commonjs/index.extras.js +5 -1
- package/dist/commonjs/index.extras.js.map +1 -1
- package/dist/commonjs/lib/config.d.ts +3 -3
- package/dist/commonjs/lib/config.js +3 -3
- package/dist/commonjs/models/components/vendorcredentialsummary.d.ts +7 -0
- package/dist/commonjs/models/components/vendorcredentialsummary.d.ts.map +1 -1
- package/dist/commonjs/models/components/vendorcredentialsummary.js +2 -0
- package/dist/commonjs/models/components/vendorcredentialsummary.js.map +1 -1
- package/dist/esm/__tests__/apps/contract.test.js +289 -5
- package/dist/esm/__tests__/apps/contract.test.js.map +1 -1
- package/dist/esm/__tests__/apps/devpreview-routes.test.d.ts +2 -0
- package/dist/esm/__tests__/apps/devpreview-routes.test.d.ts.map +1 -0
- package/dist/esm/__tests__/apps/devpreview-routes.test.js +84 -0
- package/dist/esm/__tests__/apps/devpreview-routes.test.js.map +1 -0
- package/dist/esm/__tests__/apps/kit/example.test.js +85 -5
- package/dist/esm/__tests__/apps/kit/example.test.js.map +1 -1
- package/dist/esm/__tests__/apps/kit/pages.test.d.ts +2 -0
- package/dist/esm/__tests__/apps/kit/pages.test.d.ts.map +1 -0
- package/dist/esm/__tests__/apps/kit/pages.test.js +117 -0
- package/dist/esm/__tests__/apps/kit/pages.test.js.map +1 -0
- package/dist/esm/__tests__/apps/kit/render.test.js +25 -1
- package/dist/esm/__tests__/apps/kit/render.test.js.map +1 -1
- package/dist/esm/__tests__/apps/kit/store.test.d.ts +2 -0
- package/dist/esm/__tests__/apps/kit/store.test.d.ts.map +1 -0
- package/dist/esm/__tests__/apps/kit/store.test.js +121 -0
- package/dist/esm/__tests__/apps/kit/store.test.js.map +1 -0
- package/dist/esm/__tests__/apps/post-install-page.test.d.ts +2 -0
- package/dist/esm/__tests__/apps/post-install-page.test.d.ts.map +1 -0
- package/dist/esm/__tests__/apps/post-install-page.test.js +108 -0
- package/dist/esm/__tests__/apps/post-install-page.test.js.map +1 -0
- package/dist/esm/__tests__/apps/routes.test.d.ts +2 -0
- package/dist/esm/__tests__/apps/routes.test.d.ts.map +1 -0
- package/dist/esm/__tests__/apps/routes.test.js +236 -0
- package/dist/esm/__tests__/apps/routes.test.js.map +1 -0
- package/dist/esm/__tests__/vendors.test.js +1 -1
- package/dist/esm/__tests__/zoneDevicesCreate.test.d.ts +2 -0
- package/dist/esm/__tests__/zoneDevicesCreate.test.d.ts.map +1 -0
- package/dist/esm/__tests__/zoneDevicesCreate.test.js +45 -0
- package/dist/esm/__tests__/zoneDevicesCreate.test.js.map +1 -0
- package/dist/esm/__tests__/zones.test.js +4 -28
- package/dist/esm/__tests__/zones.test.js.map +1 -1
- package/dist/esm/admin-funcs/zoneDevicesCreate.d.ts +11 -0
- package/dist/esm/admin-funcs/zoneDevicesCreate.d.ts.map +1 -0
- package/dist/esm/admin-funcs/zoneDevicesCreate.js +11 -0
- package/dist/esm/admin-funcs/zoneDevicesCreate.js.map +1 -0
- package/dist/esm/admin-funcs/zoneDevicesMacAvailability.d.ts +3 -0
- package/dist/esm/admin-funcs/zoneDevicesMacAvailability.d.ts.map +1 -0
- package/dist/esm/admin-funcs/zoneDevicesMacAvailability.js +8 -0
- package/dist/esm/admin-funcs/zoneDevicesMacAvailability.js.map +1 -0
- package/dist/esm/apps/components.d.ts +321 -0
- package/dist/esm/apps/components.d.ts.map +1 -1
- package/dist/esm/apps/components.js +163 -1
- package/dist/esm/apps/components.js.map +1 -1
- package/dist/esm/apps/context.d.ts +24 -0
- package/dist/esm/apps/context.d.ts.map +1 -1
- package/dist/esm/apps/context.js.map +1 -1
- package/dist/esm/apps/devpreview.d.ts +20 -3
- package/dist/esm/apps/devpreview.d.ts.map +1 -1
- package/dist/esm/apps/devpreview.js +19 -8
- package/dist/esm/apps/devpreview.js.map +1 -1
- package/dist/esm/apps/hooks/index.d.ts +33 -2
- package/dist/esm/apps/hooks/index.d.ts.map +1 -1
- package/dist/esm/apps/hooks/index.js +37 -1
- package/dist/esm/apps/hooks/index.js.map +1 -1
- package/dist/esm/apps/hooks/store.d.ts +48 -0
- package/dist/esm/apps/hooks/store.d.ts.map +1 -0
- package/dist/esm/apps/hooks/store.js +84 -0
- package/dist/esm/apps/hooks/store.js.map +1 -0
- package/dist/esm/apps/manifest.d.ts +64 -3
- package/dist/esm/apps/manifest.d.ts.map +1 -1
- package/dist/esm/apps/manifest.js +116 -26
- package/dist/esm/apps/manifest.js.map +1 -1
- package/dist/esm/apps/protocol.d.ts +1 -1
- package/dist/esm/apps/protocol.d.ts.map +1 -1
- package/dist/esm/apps/route.d.ts +11 -1
- package/dist/esm/apps/route.d.ts.map +1 -1
- package/dist/esm/apps/route.js +14 -8
- package/dist/esm/apps/route.js.map +1 -1
- package/dist/esm/apps/routes.d.ts +65 -0
- package/dist/esm/apps/routes.d.ts.map +1 -0
- package/dist/esm/apps/routes.js +194 -0
- package/dist/esm/apps/routes.js.map +1 -0
- package/dist/esm/apps/surfaces.d.ts +20 -2
- package/dist/esm/apps/surfaces.d.ts.map +1 -1
- package/dist/esm/apps/surfaces.js +39 -2
- package/dist/esm/apps/surfaces.js.map +1 -1
- package/dist/esm/apps/testing/index.d.ts +17 -1
- package/dist/esm/apps/testing/index.d.ts.map +1 -1
- package/dist/esm/apps/testing/index.js +49 -1
- package/dist/esm/apps/testing/index.js.map +1 -1
- package/dist/esm/apps/ui/index.d.ts +13 -0
- package/dist/esm/apps/ui/index.d.ts.map +1 -1
- package/dist/esm/apps/ui/index.js +17 -1
- package/dist/esm/apps/ui/index.js.map +1 -1
- package/dist/esm/index.extras.d.ts +4 -0
- package/dist/esm/index.extras.d.ts.map +1 -1
- package/dist/esm/index.extras.js +5 -1
- package/dist/esm/index.extras.js.map +1 -1
- package/dist/esm/lib/config.d.ts +3 -3
- package/dist/esm/lib/config.js +3 -3
- package/dist/esm/models/components/vendorcredentialsummary.d.ts +7 -0
- package/dist/esm/models/components/vendorcredentialsummary.d.ts.map +1 -1
- package/dist/esm/models/components/vendorcredentialsummary.js +2 -0
- package/dist/esm/models/components/vendorcredentialsummary.js.map +1 -1
- package/examples/apps/hello-green/src/store.ts +15 -0
- package/jsr.json +1 -1
- package/package.json +1 -1
- package/src/__tests__/apps/contract.test.ts +305 -4
- package/src/__tests__/apps/devpreview-routes.test.ts +103 -0
- package/src/__tests__/apps/kit/example.test.ts +94 -5
- package/src/__tests__/apps/kit/pages.test.ts +137 -0
- package/src/__tests__/apps/kit/render.test.ts +35 -1
- package/src/__tests__/apps/kit/store.test.ts +149 -0
- package/src/__tests__/apps/post-install-page.test.ts +126 -0
- package/src/__tests__/apps/routes.test.ts +318 -0
- package/src/__tests__/vendors.test.ts +1 -1
- package/src/__tests__/zoneDevicesCreate.test.ts +56 -0
- package/src/__tests__/zones.test.ts +4 -28
- package/src/admin-funcs/zoneDevicesCreate.ts +22 -0
- package/src/admin-funcs/zoneDevicesMacAvailability.ts +8 -0
- package/src/apps/components.ts +183 -1
- package/src/apps/context.ts +25 -0
- package/src/apps/devpreview.ts +20 -7
- package/src/apps/hooks/index.ts +42 -2
- package/src/apps/hooks/store.ts +115 -0
- package/src/apps/manifest.ts +151 -27
- package/src/apps/protocol.ts +1 -1
- package/src/apps/route.ts +22 -10
- package/src/apps/routes.ts +230 -0
- package/src/apps/surfaces.ts +45 -12
- package/src/apps/testing/index.ts +48 -2
- package/src/apps/ui/index.ts +18 -1
- package/src/index.extras.ts +5 -1
- package/src/lib/config.ts +3 -3
- package/src/models/components/vendorcredentialsummary.ts +9 -0
|
@@ -8,6 +8,7 @@ import { useContext } from "react";
|
|
|
8
8
|
import { TOAST_MAX_LENGTH } from "../protocol.js";
|
|
9
9
|
import { isRouteDescriptor } from "../route.js";
|
|
10
10
|
import { AppSessionContext, currentSession } from "../runtime/session.js";
|
|
11
|
+
export { createAppStore } from "./store.js";
|
|
11
12
|
const TOAST_TYPES = ["success", "caution", "pending"];
|
|
12
13
|
function useSessionValue(hook) {
|
|
13
14
|
const value = useContext(AppSessionContext);
|
|
@@ -20,6 +21,37 @@ function useSessionValue(hook) {
|
|
|
20
21
|
export function useExtensionContext() {
|
|
21
22
|
return useSessionValue("useExtensionContext").context;
|
|
22
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* The app page being shown, on views rendered as one of the app's `ui_extensions.routes`
|
|
26
|
+
* (`environment.route`): the declared `path` (`/reports/:id`), the concrete `pathname`
|
|
27
|
+
* (`/reports/7`) and the decoded `params` (`{ id: "7" }`, always strings). `undefined` on every
|
|
28
|
+
* other view. Re-renders with the new route when the host moves to another path of the same page
|
|
29
|
+
* (an `updateContext`), so read params here rather than once on mount.
|
|
30
|
+
*
|
|
31
|
+
* ```tsx
|
|
32
|
+
* const route = usePageRoute();
|
|
33
|
+
* const id = Number(route?.params["id"]);
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export function usePageRoute() {
|
|
37
|
+
return useSessionValue("usePageRoute").context.environment.route;
|
|
38
|
+
}
|
|
39
|
+
const NO_PARAMS = Object.freeze({});
|
|
40
|
+
/**
|
|
41
|
+
* The `envParams` this app passed to the `navigate` call that opened this view
|
|
42
|
+
* (`environment.navParams`). Only this app can set them, and they never appear in an address, so
|
|
43
|
+
* they are the place for navigation data the view relies on. The page's URL query
|
|
44
|
+
* (`environment.queryParams`) is different: anyone can put anything in a link, so treat it as
|
|
45
|
+
* untrusted input. Empty (`{}`) when the view did not open from a navigation.
|
|
46
|
+
*
|
|
47
|
+
* ```tsx
|
|
48
|
+
* // VendorPanel: navigate({ type: "appPage", path: "/reports", envParams: { vendorId: "42" } })
|
|
49
|
+
* const { vendorId } = useNavParams();
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
export function useNavParams() {
|
|
53
|
+
return useSessionValue("useNavParams").context.environment.navParams ?? NO_PARAMS;
|
|
54
|
+
}
|
|
23
55
|
/** The host API proxy for the view being rendered. Every method is async. */
|
|
24
56
|
export function useHostApi() {
|
|
25
57
|
return useSessionValue("useHostApi").host;
|
|
@@ -52,7 +84,11 @@ export function showToast(message, opts = {}) {
|
|
|
52
84
|
return Promise.reject(error);
|
|
53
85
|
}
|
|
54
86
|
}
|
|
55
|
-
/**
|
|
87
|
+
/**
|
|
88
|
+
* Asks the host to navigate. Apps name a destination; the host owns its routes. To open one of
|
|
89
|
+
* the app's own pages, pass a concrete path in the app's space:
|
|
90
|
+
* `navigate({ type: "appPage", path: "/reports/7" })` (not `/reports/:id`).
|
|
91
|
+
*/
|
|
56
92
|
export function navigate(to, opts = {}) {
|
|
57
93
|
if (!isRouteDescriptor(to))
|
|
58
94
|
return Promise.reject(new TypeError("navigate() needs a valid RouteDescriptor"));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/apps/hooks/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,EAAE,gBAAgB,EAAgC,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAwB,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAwB,MAAM,uBAAuB,CAAC;AAEhG,MAAM,WAAW,GAAyB,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAE5E,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,KAAK,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAC5C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,wFAAwF,CAAC,CAAC;IACnH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,mBAAmB;IACjC,OAAO,eAAe,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC;AACxD,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,UAAU;IACxB,OAAO,eAAe,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC;AAC5C,CAAC;AAED,SAAS,UAAU,CAAC,EAAU,EAAE,IAAc;IAC5C,MAAM,QAAQ,GAAG,IAAI,IAAI,cAAc,EAAE,EAAE,IAAI,CAAC;IAChD,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,kEAAkE,CAAC,CAAC;IACxG,OAAO,QAAQ,CAAC;AAClB,CAAC;AAQD;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,OAAe,EAAE,OAAyB,EAAE;IACpE,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/D,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,uCAAuC,CAAC,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;QACtC,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,UAAU,CAAC,uCAAuC,gBAAgB,oBAAoB,OAAO,CAAC,MAAM,GAAG,CAAC,CAC7G,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAChE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,uBAAuB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACpF,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5F,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/apps/hooks/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export type AppStoreListener<T> = (state: T, previous: T) => void;
|
|
2
|
+
/** Fields to change, or a function of the current state that returns them. */
|
|
3
|
+
export type AppStoreUpdate<T> = Partial<T> | ((state: T) => Partial<T>);
|
|
4
|
+
export interface AppStore<T extends object> {
|
|
5
|
+
/** The current state. The same object until a `setState` changes a field. */
|
|
6
|
+
getState(): T;
|
|
7
|
+
/**
|
|
8
|
+
* Shallow-merges `update` into the state, like React's class `setState`: fields left out keep
|
|
9
|
+
* their values. A new state object is made, and listeners run, only when a field changes
|
|
10
|
+
* (`Object.is`), so setting a field to its current value re-renders nothing.
|
|
11
|
+
*/
|
|
12
|
+
setState(update: AppStoreUpdate<T>): void;
|
|
13
|
+
/** Calls `listener` after each change, with the new and the previous state. Returns the unsubscribe. */
|
|
14
|
+
subscribe(listener: AppStoreListener<T>): () => void;
|
|
15
|
+
/**
|
|
16
|
+
* Reads the store in a component and re-renders it when the value changes. Without a selector
|
|
17
|
+
* the component re-renders on every change; with one, only when the selected value changes
|
|
18
|
+
* (`Object.is`), so select a field (or derive a primitive) rather than build a new object.
|
|
19
|
+
* The subscription ends when the component unmounts.
|
|
20
|
+
*/
|
|
21
|
+
useStore(): T;
|
|
22
|
+
useStore<S>(selector: (state: T) => S): S;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Creates a store that every view of this app can read and update. Create it once, at module
|
|
26
|
+
* level, in a file the views import:
|
|
27
|
+
*
|
|
28
|
+
* ```ts
|
|
29
|
+
* // src/store.ts
|
|
30
|
+
* export const notes = createAppStore({ saved: 0 });
|
|
31
|
+
* // in a view
|
|
32
|
+
* const saved = notes.useStore((s) => s.saved);
|
|
33
|
+
* notes.setState((s) => ({ saved: s.saved + 1 }));
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* What it guarantees, and what it does not:
|
|
37
|
+
* - Shared by every view of this app that is open in the same browser tab (web) or the same app
|
|
38
|
+
* session (iOS, Android): a ContextView, its FocusView, the settings page and the app's pages
|
|
39
|
+
* all see one state, and an update in one re-renders the others.
|
|
40
|
+
* - In memory only. Nothing is written to storage or sent anywhere.
|
|
41
|
+
* - Lost whenever the sandbox restarts: after a crash, a rebuild in a dev preview, sign-out, a
|
|
42
|
+
* reload of the web page, or a restart of the mobile app. Each restart begins again from
|
|
43
|
+
* `initial`. Keep anything that must last in your own backend or the Secret Store.
|
|
44
|
+
* - Never shared with other apps: each app has its own sandbox.
|
|
45
|
+
* - Not shared across devices, browser tabs or users.
|
|
46
|
+
*/
|
|
47
|
+
export declare function createAppStore<T extends object>(initial: T): AppStore<T>;
|
|
48
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../../src/apps/hooks/store.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC;AAElE,8EAA8E;AAC9E,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAExE,MAAM,WAAW,QAAQ,CAAC,CAAC,SAAS,MAAM;IACxC,6EAA6E;IAC7E,QAAQ,IAAI,CAAC,CAAC;IACd;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAC1C,wGAAwG;IACxG,SAAS,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC;IACrD;;;;;OAKG;IACH,QAAQ,IAAI,CAAC,CAAC;IACd,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;CAC3C;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CA4BxE"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Hand-written (not generated by Speakeasy). Third-party app developer kit (C10); see
|
|
3
|
+
* docs/third-party-apps/plan.md.
|
|
4
|
+
*
|
|
5
|
+
* State shared by the views of one app. The host runs one sandbox (one worker) per app and mounts
|
|
6
|
+
* every view of that app into it, each as its own React root. React context therefore stops at a
|
|
7
|
+
* view's edge, but module state does not: a store created at module level is the same object in
|
|
8
|
+
* every view.
|
|
9
|
+
*/
|
|
10
|
+
import { useCallback, useRef, useSyncExternalStore } from "react";
|
|
11
|
+
/**
|
|
12
|
+
* Creates a store that every view of this app can read and update. Create it once, at module
|
|
13
|
+
* level, in a file the views import:
|
|
14
|
+
*
|
|
15
|
+
* ```ts
|
|
16
|
+
* // src/store.ts
|
|
17
|
+
* export const notes = createAppStore({ saved: 0 });
|
|
18
|
+
* // in a view
|
|
19
|
+
* const saved = notes.useStore((s) => s.saved);
|
|
20
|
+
* notes.setState((s) => ({ saved: s.saved + 1 }));
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* What it guarantees, and what it does not:
|
|
24
|
+
* - Shared by every view of this app that is open in the same browser tab (web) or the same app
|
|
25
|
+
* session (iOS, Android): a ContextView, its FocusView, the settings page and the app's pages
|
|
26
|
+
* all see one state, and an update in one re-renders the others.
|
|
27
|
+
* - In memory only. Nothing is written to storage or sent anywhere.
|
|
28
|
+
* - Lost whenever the sandbox restarts: after a crash, a rebuild in a dev preview, sign-out, a
|
|
29
|
+
* reload of the web page, or a restart of the mobile app. Each restart begins again from
|
|
30
|
+
* `initial`. Keep anything that must last in your own backend or the Secret Store.
|
|
31
|
+
* - Never shared with other apps: each app has its own sandbox.
|
|
32
|
+
* - Not shared across devices, browser tabs or users.
|
|
33
|
+
*/
|
|
34
|
+
export function createAppStore(initial) {
|
|
35
|
+
let state = initial;
|
|
36
|
+
const listeners = new Set();
|
|
37
|
+
const store = {
|
|
38
|
+
getState: () => state,
|
|
39
|
+
setState(update) {
|
|
40
|
+
const patch = typeof update === "function" ? update(state) : update;
|
|
41
|
+
const keys = Object.keys(patch);
|
|
42
|
+
if (!keys.some((key) => !Object.is(state[key], patch[key])))
|
|
43
|
+
return;
|
|
44
|
+
const previous = state;
|
|
45
|
+
state = { ...state, ...patch };
|
|
46
|
+
for (const listener of [...listeners])
|
|
47
|
+
listener(state, previous);
|
|
48
|
+
},
|
|
49
|
+
subscribe(listener) {
|
|
50
|
+
listeners.add(listener);
|
|
51
|
+
return () => {
|
|
52
|
+
listeners.delete(listener);
|
|
53
|
+
};
|
|
54
|
+
},
|
|
55
|
+
useStore: function useStore(selector) {
|
|
56
|
+
return useStoreValue(store, selector);
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
return store;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* `useSyncExternalStore` over `store`. `store.subscribe` is read at render time, so it is the
|
|
63
|
+
* store's own function (or whatever replaced it), and the subscription follows it.
|
|
64
|
+
*/
|
|
65
|
+
function useStoreValue(store, selector) {
|
|
66
|
+
// The last selection, so a selector that derives a new object from an unchanged state still
|
|
67
|
+
// gives React the same snapshot (React requires a stable snapshot between changes).
|
|
68
|
+
const cache = useRef(null);
|
|
69
|
+
const subscribe = store.subscribe;
|
|
70
|
+
const onStoreChange = useCallback((notify) => subscribe(() => notify()), [subscribe]);
|
|
71
|
+
const getSnapshot = () => {
|
|
72
|
+
const current = store.getState();
|
|
73
|
+
const cached = cache.current;
|
|
74
|
+
if (cached && cached.state === current && cached.selector === selector)
|
|
75
|
+
return cached.value;
|
|
76
|
+
const value = selector ? selector(current) : current;
|
|
77
|
+
// A changed state whose selection is equal keeps the previous value, so the view skips a render.
|
|
78
|
+
const stable = cached && Object.is(cached.value, value) ? cached.value : value;
|
|
79
|
+
cache.current = { state: current, selector, value: stable };
|
|
80
|
+
return stable;
|
|
81
|
+
};
|
|
82
|
+
return useSyncExternalStore(onStoreChange, getSnapshot, getSnapshot);
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../../src/apps/hooks/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as z from "zod/v4";
|
|
2
2
|
export { IPV4_OCTET_PATTERN, PORT_PATTERN, CSP_PATH_CHAR, CSP_SOURCE_MAX_CHARS, CSP_SOURCE_PATTERN, CSP_SOURCES_MAX_PER_DIRECTIVE, CSP_SOURCES_MAX_TOTAL_CHARS, cspSourcesTotalChars, HTTPS_URL_PATTERN, isHttpsUrl, isParsableHttpsUrl, } from "./url.js";
|
|
3
|
+
export { APP_ROUTES_MAX, CONCRETE_ROUTE_PATH_PATTERN, isConcreteRoutePath, isRoutePath, matchAppRoute, normalizeRoutePath, ROUTE_PATH_MAX_CHARS, ROUTE_PATH_MAX_SEGMENTS, ROUTE_PATH_PATTERN, routeSetIssues, type AppRouteMatch, type RouteSetIssue, } from "./routes.js";
|
|
3
4
|
/** A single SRI hash with the digest length its algorithm produces (32, 48 or 64 bytes, base64). */
|
|
4
5
|
export declare const SRI_PATTERN = "^(sha256-[A-Za-z0-9+/]{43}=|sha384-[A-Za-z0-9+/]{64}|sha512-[A-Za-z0-9+/]{86}==)$";
|
|
5
6
|
/** SemVer 2.0.0 (semver.org's reference pattern): no empty or leading-zero numeric identifiers. */
|
|
@@ -45,6 +46,45 @@ export declare const appViewSchema: z.ZodObject<{
|
|
|
45
46
|
}>;
|
|
46
47
|
component: z.ZodString;
|
|
47
48
|
}, z.core.$strict>;
|
|
49
|
+
/** Reports {@link routeSetIssues} (segment cap, repeated params, duplicate paths, repeated portals). */
|
|
50
|
+
export declare function addRouteIssues(routes: ReadonlyArray<{
|
|
51
|
+
path: string;
|
|
52
|
+
portals?: readonly string[] | undefined;
|
|
53
|
+
navigation?: unknown;
|
|
54
|
+
}> | undefined, ctx: z.RefinementCtx, path: ReadonlyArray<string | number>): void;
|
|
55
|
+
/**
|
|
56
|
+
* One app page. The host renders `component` at `/{portal}/apps/{appId}/pages{path}`.
|
|
57
|
+
*
|
|
58
|
+
* `title` is required here, for new manifests. The server keeps accepting title-less entries in a
|
|
59
|
+
* bundle-less v1 manifest, which stored `routes[{ path, component }]` before pages were rendered;
|
|
60
|
+
* such a manifest has nothing to render them with, and the host never shows them.
|
|
61
|
+
*/
|
|
62
|
+
/**
|
|
63
|
+
* Text a person reads (a page title, a sidebar label): at least one character that isn't
|
|
64
|
+
* whitespace. The host never shows a blank one, so the manifest can't publish one.
|
|
65
|
+
*
|
|
66
|
+
* This is JavaScript's `\S` spelled out (ASCII whitespace, the Unicode space separators,
|
|
67
|
+
* U+2028/U+2029 and U+FEFF), because the generated schema's patterns also run as Ruby regexps, and
|
|
68
|
+
* Ruby's `\S` is ASCII-only: there, a title of no-break spaces would pass.
|
|
69
|
+
*/
|
|
70
|
+
export declare const NON_BLANK_PATTERN = "[^\\t\\n\\v\\f\\r \\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff]";
|
|
71
|
+
export declare const appRouteSchema: z.ZodObject<{
|
|
72
|
+
path: z.ZodString;
|
|
73
|
+
component: z.ZodString;
|
|
74
|
+
/** Page header title. */
|
|
75
|
+
title: z.ZodString;
|
|
76
|
+
/** Portals the page is offered in. Absent = every portal the host renders. */
|
|
77
|
+
portals: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
78
|
+
facility: "facility";
|
|
79
|
+
system: "system";
|
|
80
|
+
company: "company";
|
|
81
|
+
vendor: "vendor";
|
|
82
|
+
}>>>;
|
|
83
|
+
/** Offer the page in the sidebar / mobile drawer menu under this label (default: `title`). */
|
|
84
|
+
navigation: z.ZodOptional<z.ZodObject<{
|
|
85
|
+
label: z.ZodOptional<z.ZodString>;
|
|
86
|
+
}, z.core.$strict>>;
|
|
87
|
+
}, z.core.$strict>;
|
|
48
88
|
/** Constants are delivered to every view as `environment.constants`. */
|
|
49
89
|
export declare const appConstantsSchema: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
|
|
50
90
|
export declare const appCspSchema: z.ZodObject<{
|
|
@@ -84,10 +124,23 @@ export declare const appManifestSchema: z.ZodObject<{
|
|
|
84
124
|
}>;
|
|
85
125
|
component: z.ZodString;
|
|
86
126
|
}, z.core.$strict>>>;
|
|
87
|
-
/**
|
|
127
|
+
/** App pages, each a full screen under `/{portal}/apps/{appId}/pages`. */
|
|
88
128
|
routes: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
89
129
|
path: z.ZodString;
|
|
90
130
|
component: z.ZodString;
|
|
131
|
+
/** Page header title. */
|
|
132
|
+
title: z.ZodString;
|
|
133
|
+
/** Portals the page is offered in. Absent = every portal the host renders. */
|
|
134
|
+
portals: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
135
|
+
facility: "facility";
|
|
136
|
+
system: "system";
|
|
137
|
+
company: "company";
|
|
138
|
+
vendor: "vendor";
|
|
139
|
+
}>>>;
|
|
140
|
+
/** Offer the page in the sidebar / mobile drawer menu under this label (default: `title`). */
|
|
141
|
+
navigation: z.ZodOptional<z.ZodObject<{
|
|
142
|
+
label: z.ZodOptional<z.ZodString>;
|
|
143
|
+
}, z.core.$strict>>;
|
|
91
144
|
}, z.core.$strict>>>;
|
|
92
145
|
csp: z.ZodOptional<z.ZodObject<{
|
|
93
146
|
connect_src: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
@@ -102,8 +155,14 @@ export declare const appManifestSchema: z.ZodObject<{
|
|
|
102
155
|
url: "url";
|
|
103
156
|
app_settings_view: "app_settings_view";
|
|
104
157
|
app_main_view: "app_main_view";
|
|
158
|
+
app_page: "app_page";
|
|
105
159
|
}>;
|
|
106
160
|
url: z.ZodOptional<z.ZodString>;
|
|
161
|
+
/**
|
|
162
|
+
* For `app_page` only: the page to open, a concrete path (no `:params`) that one of
|
|
163
|
+
* `ui_extensions.routes` matches, such as `/welcome` or `/reports/7`.
|
|
164
|
+
*/
|
|
165
|
+
path: z.ZodOptional<z.ZodString>;
|
|
107
166
|
}, z.core.$strict>>;
|
|
108
167
|
webhooks: z.ZodOptional<z.ZodObject<{
|
|
109
168
|
url: z.ZodString;
|
|
@@ -115,12 +174,14 @@ export declare const appManifestSchema: z.ZodObject<{
|
|
|
115
174
|
}, z.core.$strict>>;
|
|
116
175
|
}, z.core.$strict>;
|
|
117
176
|
export type AppManifestV2 = z.infer<typeof appManifestSchema>;
|
|
177
|
+
export type AppRoute = z.infer<typeof appRouteSchema>;
|
|
118
178
|
export type PostInstallAction = NonNullable<AppManifestV2["post_install_action"]>;
|
|
119
179
|
/**
|
|
120
180
|
* What installing the app does when `post_install_action` is left out, so the server and the host
|
|
121
181
|
* never land an installer on a view the app does not have: nothing for a back-end-only app, the
|
|
122
|
-
* settings page for a settings-only app, and the app's main view otherwise.
|
|
123
|
-
* "no post-install step". An explicit action
|
|
182
|
+
* settings page for a settings-only app, and the app's main view otherwise. A root page (route
|
|
183
|
+
* `/`) counts as a main view. `null` means "no post-install step". An explicit action, including
|
|
184
|
+
* `app_page`, is returned unchanged.
|
|
124
185
|
*/
|
|
125
186
|
export declare function effectivePostInstallAction(manifest: Pick<AppManifestV2, "post_install_action" | "ui_extensions">): PostInstallAction | null;
|
|
126
187
|
export type AppView = z.infer<typeof appViewSchema>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/apps/manifest.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/apps/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,11 +9,14 @@
|
|
|
9
9
|
* server's own validation.
|
|
10
10
|
*/
|
|
11
11
|
import * as z from "zod/v4";
|
|
12
|
+
import { APP_ROUTES_MAX, CONCRETE_ROUTE_PATH_PATTERN, isConcreteRoutePath, matchAppRoute, ROUTE_PATH_MAX_CHARS, ROUTE_PATH_PATTERN, routeSetIssues, } from "./routes.js";
|
|
12
13
|
import { SURFACES } from "./surfaces.js";
|
|
13
14
|
import { CSP_SOURCE_MAX_CHARS, CSP_SOURCE_PATTERN, CSP_SOURCES_MAX_PER_DIRECTIVE, CSP_SOURCES_MAX_TOTAL_CHARS, cspSourcesTotalChars, HTTPS_URL_PATTERN, isParsableHttpsUrl, } from "./url.js";
|
|
14
15
|
// The URL and CSP-source rules live in the zod-free `url.ts` so the host renderer can use them
|
|
15
16
|
// without bundling zod; re-exported here because they are part of the manifest contract.
|
|
16
17
|
export { IPV4_OCTET_PATTERN, PORT_PATTERN, CSP_PATH_CHAR, CSP_SOURCE_MAX_CHARS, CSP_SOURCE_PATTERN, CSP_SOURCES_MAX_PER_DIRECTIVE, CSP_SOURCES_MAX_TOTAL_CHARS, cspSourcesTotalChars, HTTPS_URL_PATTERN, isHttpsUrl, isParsableHttpsUrl, } from "./url.js";
|
|
18
|
+
// The route grammar and matcher live in the zod-free `routes.ts` for the same reason.
|
|
19
|
+
export { APP_ROUTES_MAX, CONCRETE_ROUTE_PATH_PATTERN, isConcreteRoutePath, isRoutePath, matchAppRoute, normalizeRoutePath, ROUTE_PATH_MAX_CHARS, ROUTE_PATH_MAX_SEGMENTS, ROUTE_PATH_PATTERN, routeSetIssues, } from "./routes.js";
|
|
17
20
|
/** A single SRI hash with the digest length its algorithm produces (32, 48 or 64 bytes, base64). */
|
|
18
21
|
export const SRI_PATTERN = "^(sha256-[A-Za-z0-9+/]{43}=|sha384-[A-Za-z0-9+/]{64}|sha512-[A-Za-z0-9+/]{86}==)$";
|
|
19
22
|
/** SemVer 2.0.0 (semver.org's reference pattern): no empty or leading-zero numeric identifiers. */
|
|
@@ -47,7 +50,10 @@ const PLATFORM_PERMISSION_NAMES = new Set(PLATFORM_PERMISSIONS.map((p) => p.perm
|
|
|
47
50
|
export function isPlatformPermission(value) {
|
|
48
51
|
return typeof value === "string" && PLATFORM_PERMISSION_NAMES.has(value);
|
|
49
52
|
}
|
|
50
|
-
|
|
53
|
+
// A view's viewport. `page` is not one: an app declares its pages in `routes`, not in `views`.
|
|
54
|
+
const SURFACE_IDS = SURFACES.filter((s) => s.kind !== "page").map((s) => s.id);
|
|
55
|
+
/** Portals an app page may be offered in (`routes[].portals`). */
|
|
56
|
+
const ROUTE_PORTALS = ["company", "vendor", "facility", "system"];
|
|
51
57
|
/** Lifecycle events an app's own webhook endpoint can receive (see C19). */
|
|
52
58
|
export const APP_WEBHOOK_EVENTS = [
|
|
53
59
|
"MarketplaceAppActivation.created",
|
|
@@ -100,6 +106,42 @@ export const appViewSchema = z.strictObject({
|
|
|
100
106
|
viewport: z.enum(SURFACE_IDS),
|
|
101
107
|
component: z.string().max(100).regex(new RegExp(COMPONENT_NAME_PATTERN)),
|
|
102
108
|
});
|
|
109
|
+
/** Reports {@link routeSetIssues} (segment cap, repeated params, duplicate paths, repeated portals). */
|
|
110
|
+
export function addRouteIssues(routes, ctx, path) {
|
|
111
|
+
for (const issue of routeSetIssues(routes ?? [])) {
|
|
112
|
+
ctx.addIssue({ code: "custom", path: [...path, issue.index, issue.field], message: issue.message });
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* One app page. The host renders `component` at `/{portal}/apps/{appId}/pages{path}`.
|
|
117
|
+
*
|
|
118
|
+
* `title` is required here, for new manifests. The server keeps accepting title-less entries in a
|
|
119
|
+
* bundle-less v1 manifest, which stored `routes[{ path, component }]` before pages were rendered;
|
|
120
|
+
* such a manifest has nothing to render them with, and the host never shows them.
|
|
121
|
+
*/
|
|
122
|
+
/**
|
|
123
|
+
* Text a person reads (a page title, a sidebar label): at least one character that isn't
|
|
124
|
+
* whitespace. The host never shows a blank one, so the manifest can't publish one.
|
|
125
|
+
*
|
|
126
|
+
* This is JavaScript's `\S` spelled out (ASCII whitespace, the Unicode space separators,
|
|
127
|
+
* U+2028/U+2029 and U+FEFF), because the generated schema's patterns also run as Ruby regexps, and
|
|
128
|
+
* Ruby's `\S` is ASCII-only: there, a title of no-break spaces would pass.
|
|
129
|
+
*/
|
|
130
|
+
export const NON_BLANK_PATTERN = "[^\\t\\n\\v\\f\\r \\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff]";
|
|
131
|
+
export const appRouteSchema = z.strictObject({
|
|
132
|
+
path: z.string().max(ROUTE_PATH_MAX_CHARS).regex(new RegExp(ROUTE_PATH_PATTERN)),
|
|
133
|
+
component: z.string().max(100).regex(new RegExp(COMPONENT_NAME_PATTERN)),
|
|
134
|
+
/** Page header title. */
|
|
135
|
+
title: z.string().min(1).max(100).regex(new RegExp(NON_BLANK_PATTERN), { message: "must not be blank" }),
|
|
136
|
+
/** Portals the page is offered in. Absent = every portal the host renders. */
|
|
137
|
+
portals: z.array(z.enum(ROUTE_PORTALS)).min(1).max(ROUTE_PORTALS.length).optional(),
|
|
138
|
+
/** Offer the page in the sidebar / mobile drawer menu under this label (default: `title`). */
|
|
139
|
+
navigation: z
|
|
140
|
+
.strictObject({
|
|
141
|
+
label: z.string().min(1).max(40).regex(new RegExp(NON_BLANK_PATTERN), { message: "must not be blank" }).optional(),
|
|
142
|
+
})
|
|
143
|
+
.optional(),
|
|
144
|
+
});
|
|
103
145
|
/** Constants are delivered to every view as `environment.constants`. */
|
|
104
146
|
export const appConstantsSchema = z.record(z.string().max(100).regex(/^[A-Za-z_][A-Za-z0-9_]*$/), z.union([z.string().max(2048), z.number(), z.boolean()]));
|
|
105
147
|
export const appCspSchema = z.strictObject({
|
|
@@ -139,21 +181,20 @@ export const appManifestSchema = z
|
|
|
139
181
|
integrity: z.string().max(200).regex(new RegExp(SRI_PATTERN)),
|
|
140
182
|
}).optional(),
|
|
141
183
|
views: z.array(appViewSchema).max(200).optional(),
|
|
142
|
-
/**
|
|
143
|
-
routes: z
|
|
144
|
-
.array(z.strictObject({
|
|
145
|
-
path: z.string().max(200).regex(/^\/[a-z0-9\-/:]*$/),
|
|
146
|
-
component: z.string().max(100).regex(new RegExp(COMPONENT_NAME_PATTERN)),
|
|
147
|
-
}))
|
|
148
|
-
.max(50)
|
|
149
|
-
.optional(),
|
|
184
|
+
/** App pages, each a full screen under `/{portal}/apps/{appId}/pages`. */
|
|
185
|
+
routes: z.array(appRouteSchema).max(APP_ROUTES_MAX).optional(),
|
|
150
186
|
csp: appCspSchema.optional(),
|
|
151
187
|
})
|
|
152
188
|
.optional(),
|
|
153
189
|
post_install_action: z
|
|
154
190
|
.strictObject({
|
|
155
|
-
type: z.enum(["url", "app_settings_view", "app_main_view"]),
|
|
191
|
+
type: z.enum(["url", "app_settings_view", "app_main_view", "app_page"]),
|
|
156
192
|
url: httpsUrlSchema.optional(),
|
|
193
|
+
/**
|
|
194
|
+
* For `app_page` only: the page to open, a concrete path (no `:params`) that one of
|
|
195
|
+
* `ui_extensions.routes` matches, such as `/welcome` or `/reports/7`.
|
|
196
|
+
*/
|
|
197
|
+
path: z.string().max(ROUTE_PATH_MAX_CHARS).regex(new RegExp(CONCRETE_ROUTE_PATH_PATTERN)).optional(),
|
|
157
198
|
})
|
|
158
199
|
.optional(),
|
|
159
200
|
// The app's own webhook endpoint: registered by the catalog when the manifest is published, not
|
|
@@ -167,31 +208,50 @@ export const appManifestSchema = z
|
|
|
167
208
|
.optional(),
|
|
168
209
|
})
|
|
169
210
|
.superRefine((manifest, ctx) => {
|
|
170
|
-
addDuplicateViewportIssues(manifest.ui_extensions?.views, ctx, ["ui_extensions", "views"]);
|
|
171
|
-
addCspBudgetIssue(manifest.ui_extensions?.csp, ctx, ["ui_extensions", "csp"]);
|
|
172
211
|
const events = manifest.webhooks?.events ?? [];
|
|
173
212
|
if (new Set(events).size !== events.length) {
|
|
174
213
|
ctx.addIssue({ code: "custom", path: ["webhooks", "events"], message: "events must not repeat" });
|
|
175
214
|
}
|
|
176
|
-
if (manifest.
|
|
215
|
+
if (manifest.post_install_action?.type === "url" && !manifest.post_install_action.url) {
|
|
216
|
+
ctx.addIssue({ code: "custom", path: ["post_install_action", "url"], message: "url is required for type=url" });
|
|
217
|
+
}
|
|
218
|
+
if (manifest.post_install_action?.type !== "app_page" && manifest.post_install_action?.path !== undefined) {
|
|
219
|
+
ctx.addIssue({ code: "custom", path: ["post_install_action", "path"], message: "path is only allowed for type=app_page" });
|
|
220
|
+
}
|
|
221
|
+
// When a field under `ui_extensions` fails its own schema, zod hands this refinement the
|
|
222
|
+
// manifest without `ui_extensions`, so every rule below would report a problem that isn't
|
|
223
|
+
// there (a missing settings view, an unmatched post-install page). Report the real one only.
|
|
224
|
+
if (ctx.issues.some((issue) => issue.path?.[0] === "ui_extensions"))
|
|
225
|
+
return;
|
|
226
|
+
addDuplicateViewportIssues(manifest.ui_extensions?.views, ctx, ["ui_extensions", "views"]);
|
|
227
|
+
addRouteIssues(manifest.ui_extensions?.routes, ctx, ["ui_extensions", "routes"]);
|
|
228
|
+
addCspBudgetIssue(manifest.ui_extensions?.csp, ctx, ["ui_extensions", "csp"]);
|
|
229
|
+
const hasViews = Boolean(manifest.ui_extensions?.views?.length);
|
|
230
|
+
const hasRoutes = Boolean(manifest.ui_extensions?.routes?.length);
|
|
231
|
+
if (hasViews && !manifest.ui_extensions?.bundle) {
|
|
177
232
|
ctx.addIssue({
|
|
178
233
|
code: "custom",
|
|
179
234
|
path: ["ui_extensions", "bundle"],
|
|
180
235
|
message: "bundle is required when views are declared",
|
|
181
236
|
});
|
|
182
237
|
}
|
|
238
|
+
if (hasRoutes && !manifest.ui_extensions?.bundle) {
|
|
239
|
+
ctx.addIssue({
|
|
240
|
+
code: "custom",
|
|
241
|
+
path: ["ui_extensions", "bundle"],
|
|
242
|
+
message: "bundle is required when routes are declared",
|
|
243
|
+
});
|
|
244
|
+
}
|
|
183
245
|
// `version` stays optional only for legacy (v1) manifests. Anything the host renders needs one:
|
|
184
246
|
// it names the runtime URL and reaches views as `ExtensionContext.app.version`.
|
|
185
|
-
if ((manifest.ui_extensions?.bundle ||
|
|
247
|
+
if ((manifest.ui_extensions?.bundle || hasViews || hasRoutes) && !manifest.version) {
|
|
186
248
|
ctx.addIssue({
|
|
187
249
|
code: "custom",
|
|
188
250
|
path: ["version"],
|
|
189
|
-
message: "version is required when ui_extensions declares a bundle or
|
|
251
|
+
message: "version is required when ui_extensions declares a bundle, views or routes",
|
|
190
252
|
});
|
|
191
253
|
}
|
|
192
|
-
|
|
193
|
-
ctx.addIssue({ code: "custom", path: ["post_install_action", "url"], message: "url is required for type=url" });
|
|
194
|
-
}
|
|
254
|
+
addAppPageActionIssues(manifest, ctx);
|
|
195
255
|
// A back-end-only app has no views, so it cannot land installers on one. Checked only for
|
|
196
256
|
// versioned (v2) manifests: v1 apps may carry a post-install view type from before views existed.
|
|
197
257
|
const viewports = new Set((manifest.ui_extensions?.views ?? []).map((v) => v.viewport));
|
|
@@ -204,28 +264,58 @@ export const appManifestSchema = z
|
|
|
204
264
|
});
|
|
205
265
|
}
|
|
206
266
|
// The settings page is not a main view: a settings-only app should land on app_settings_view.
|
|
207
|
-
|
|
208
|
-
if (versioned && manifest.post_install_action?.type === "app_main_view" &&
|
|
267
|
+
// A root page (route `/`) is one: installing opens `/{portal}/apps/{id}/pages`.
|
|
268
|
+
if (versioned && manifest.post_install_action?.type === "app_main_view" && !hasMainView(manifest)) {
|
|
209
269
|
ctx.addIssue({
|
|
210
270
|
code: "custom",
|
|
211
271
|
path: ["post_install_action", "type"],
|
|
212
|
-
message: "app_main_view requires a view other than settings",
|
|
272
|
+
message: "app_main_view requires a view other than settings, or a root route",
|
|
213
273
|
});
|
|
214
274
|
}
|
|
215
275
|
});
|
|
276
|
+
/**
|
|
277
|
+
* The rules for `post_install_action.path`: required for `app_page` and allowed nowhere else, a
|
|
278
|
+
* concrete path within the route limits, and one that a declared route matches (`/reports/7` for a
|
|
279
|
+
* `/reports/:id` route), so installing never opens a page the app does not have.
|
|
280
|
+
*/
|
|
281
|
+
function addAppPageActionIssues(manifest, ctx) {
|
|
282
|
+
const action = manifest.post_install_action;
|
|
283
|
+
if (action === undefined)
|
|
284
|
+
return;
|
|
285
|
+
const path = ["post_install_action", "path"];
|
|
286
|
+
// `path` on another type is reported by the manifest refinement, before the rules that need
|
|
287
|
+
// `ui_extensions`.
|
|
288
|
+
if (action.type !== "app_page")
|
|
289
|
+
return;
|
|
290
|
+
if (action.path === undefined) {
|
|
291
|
+
ctx.addIssue({ code: "custom", path, message: "path is required for type=app_page" });
|
|
292
|
+
}
|
|
293
|
+
else if (!isConcreteRoutePath(action.path)) {
|
|
294
|
+
ctx.addIssue({ code: "custom", path, message: "path must be a page path without :params, such as /reports/7" });
|
|
295
|
+
}
|
|
296
|
+
else if (matchAppRoute(manifest.ui_extensions?.routes ?? [], action.path) === null) {
|
|
297
|
+
ctx.addIssue({ code: "custom", path, message: "path must match one of ui_extensions.routes" });
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
/** Whether a manifest has a main view to land on: a view other than settings, or a root page `/`. */
|
|
301
|
+
function hasMainView(manifest) {
|
|
302
|
+
const views = manifest.ui_extensions?.views ?? [];
|
|
303
|
+
const routes = manifest.ui_extensions?.routes ?? [];
|
|
304
|
+
return views.some((v) => v.viewport !== "settings") || routes.some((r) => r.path === "/");
|
|
305
|
+
}
|
|
216
306
|
/**
|
|
217
307
|
* What installing the app does when `post_install_action` is left out, so the server and the host
|
|
218
308
|
* never land an installer on a view the app does not have: nothing for a back-end-only app, the
|
|
219
|
-
* settings page for a settings-only app, and the app's main view otherwise.
|
|
220
|
-
* "no post-install step". An explicit action
|
|
309
|
+
* settings page for a settings-only app, and the app's main view otherwise. A root page (route
|
|
310
|
+
* `/`) counts as a main view. `null` means "no post-install step". An explicit action, including
|
|
311
|
+
* `app_page`, is returned unchanged.
|
|
221
312
|
*/
|
|
222
313
|
export function effectivePostInstallAction(manifest) {
|
|
223
314
|
if (manifest.post_install_action)
|
|
224
315
|
return manifest.post_install_action;
|
|
225
|
-
|
|
226
|
-
if (viewports.some((v) => v !== "settings"))
|
|
316
|
+
if (hasMainView(manifest))
|
|
227
317
|
return { type: "app_main_view" };
|
|
228
|
-
if (
|
|
318
|
+
if ((manifest.ui_extensions?.views ?? []).some((v) => v.viewport === "settings"))
|
|
229
319
|
return { type: "app_settings_view" };
|
|
230
320
|
return null;
|
|
231
321
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/apps/manifest.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/apps/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,7 @@ export interface RemoteConnection {
|
|
|
12
12
|
}
|
|
13
13
|
/** `@remote-dom/core` mutation records: insert child, remove child, update text, update property. */
|
|
14
14
|
export type RemoteMutationRecord = readonly [type: 0, parentId: string, child: unknown, index: number] | readonly [type: 1, parentId: string, index: number] | readonly [type: 2, textId: string, text: string] | readonly [type: 3, id: string, name: string, value: unknown, updateType?: 1 | 2 | 3];
|
|
15
|
-
export type ViewType = "context" | "focus" | "settings";
|
|
15
|
+
export type ViewType = "context" | "focus" | "settings" | "page";
|
|
16
16
|
/** Implemented inside the worker by the SDK runtime (`defineApp`). */
|
|
17
17
|
export interface SandboxExports {
|
|
18
18
|
mount(args: {
|