@knpkv/hub-app 0.4.1 → 0.5.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/README.md CHANGED
@@ -41,6 +41,11 @@ The client directory holds `client.js` (an ES module whose default export is an
41
41
  React (or none); `ShellContext` gives it routing, the path and headers for its module routes, the crumb, a header slot and a
42
42
  portal root.
43
43
 
44
+ Fields added after contract 1 shipped are optional, so an app feature-detects them: `headerOutlet` with
45
+ `setHeaderMode` (the hub's grouped header), `href(page, search)` (a link to one of the app's pages in the shell's
46
+ route shape; without it, build `?<search>#<id>/<page>`) and `host` (the machine the hub runs on). A shell checks a
47
+ loaded client module with `AppClientModule` before it mounts it.
48
+
44
49
  ## Shell services
45
50
 
46
51
  `ShellServices` (from `@knpkv/hub-app/hub-client`) is available to every handler:
package/dist/client.d.ts CHANGED
@@ -13,6 +13,7 @@
13
13
  *
14
14
  * @module
15
15
  */
16
+ import { Schema } from "effect";
16
17
  export interface ShellCrumb {
17
18
  readonly label: string;
18
19
  readonly href: string;
@@ -60,6 +61,13 @@ export interface ShellContext {
60
61
  readonly portalRoot: HTMLElement;
61
62
  /** Hub only. */
62
63
  readonly openHostAccess?: () => void;
64
+ /**
65
+ * The link to one of the app's pages with these query parameters, in the route shape this shell reads. Added after
66
+ * contract 1 shipped, so a shell may leave it out: an app then builds `?<search>#<id>/<page>` itself.
67
+ */
68
+ readonly href?: (page: string, search?: URLSearchParams) => string;
69
+ /** The machine the hub runs on, for copy such as "Usage on <host>". Hub only; added after contract 1 shipped. */
70
+ readonly host?: string;
63
71
  }
64
72
  export interface MountedApp {
65
73
  /** Called on every navigation or activity change while mounted. */
@@ -73,4 +81,11 @@ export interface AppClient {
73
81
  }
74
82
  /** Typed identity for an app's default export. */
75
83
  export declare const defineAppClient: (client: AppClient) => AppClient;
84
+ /** An app's client module as a shell loads it, checked before it is mounted: a default export with a contract and a mount. */
85
+ export declare const AppClientModule: Schema.Struct<{
86
+ readonly default: Schema.Struct<{
87
+ readonly contract: Schema.Number;
88
+ readonly mount: Schema.declare<(root: HTMLElement, context: ShellContext) => MountedApp, unknown>;
89
+ }>;
90
+ }>;
76
91
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED,4EAA4E;AAC5E,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAA;IACpB,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,YAAY,CAAA;IACnC,kIAAkI;IAClI,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,MAAM,EAAE,KAAK,MAAM,CAAA;IAC5C,yGAAyG;IACzG,QAAQ,CAAC,cAAc,EAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAC/D,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAA;IAChC,mFAAmF;IACnF,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,KAAK,IAAI,CAAA;IACxG,QAAQ,CAAC,cAAc,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAA;IACrD,mEAAmE;IACnE,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,KAAK,IAAI,CAAA;IAC7D,QAAQ,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,KAAK,IAAI,CAAA;IAC9D;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;IAC1C,wGAAwG;IACxG,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,KAAK,IAAI,CAAA;IAC5D,iFAAiF;IACjF,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IAC3C,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,KAAK,IAAI,CAAA;IACrD,8EAA8E;IAC9E,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAA;IAChC,gBAAgB;IAChB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAA;CACrC;AAED,MAAM,WAAW,UAAU;IACzB,mEAAmE;IACnE,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAA;IAChD,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAC7B;AAED,0GAA0G;AAC1G,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,KAAK,UAAU,CAAA;CACzE;AAED,kDAAkD;AAClD,eAAO,MAAM,eAAe,WAAY,SAAS,KAAG,SAAmB,CAAA"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js CHANGED
@@ -13,6 +13,14 @@
13
13
  *
14
14
  * @module
15
15
  */
16
+ import { Predicate, Schema } from "effect";
16
17
  /** Typed identity for an app's default export. */
17
18
  export const defineAppClient = (client) => client;
19
+ /** An app's client module as a shell loads it, checked before it is mounted: a default export with a contract and a mount. */
20
+ export const AppClientModule = Schema.Struct({
21
+ default: Schema.Struct({
22
+ contract: Schema.Number,
23
+ mount: Schema.declare((input) => Predicate.isFunction(input))
24
+ })
25
+ });
18
26
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAgEH,kDAAkD;AAClD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAiB,EAAa,EAAE,CAAC,MAAM,CAAA"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAuE1C,kDAAkD;AAClD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAiB,EAAa,EAAE,CAAC,MAAM,CAAA;AAEvE,8HAA8H;AAC9H,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC,MAAM;QACvB,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAA+B,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;KAC3F,CAAC;CACH,CAAC,CAAA"}
@@ -136,7 +136,7 @@ export declare const HubAppPackageField: Schema.Struct<{
136
136
  }>;
137
137
  export interface HubAppPackageField extends Schema.Schema.Type<typeof HubAppPackageField> {
138
138
  }
139
- export declare const AppUnavailableReason: Schema.Literals<readonly ["starting", "not_running", "crashloop", "disabled", "install_missing", "health", "timeout", "invalid_manifest", "id_mismatch", "incompatible", "duplicate", "client_failed"]>;
139
+ export declare const AppUnavailableReason: Schema.Literals<readonly ["starting", "not_running", "crashloop", "disabled", "install_missing", "health", "timeout", "invalid_manifest", "id_mismatch", "incompatible", "duplicate", "client_failed", "local_only"]>;
140
140
  export type AppUnavailableReason = typeof AppUnavailableReason.Type;
141
141
  /**
142
142
  * The hub's view of one registered app, served by `GET /v1/apps`. `Unavailable` keeps the last good
@@ -205,7 +205,7 @@ export declare const AppState: Schema.Union<readonly [Schema.TaggedStruct<"Ready
205
205
  readonly defaultPort: Schema.Int;
206
206
  }>;
207
207
  }>>;
208
- readonly reason: Schema.Literals<readonly ["starting", "not_running", "crashloop", "disabled", "install_missing", "health", "timeout", "invalid_manifest", "id_mismatch", "incompatible", "duplicate", "client_failed"]>;
208
+ readonly reason: Schema.Literals<readonly ["starting", "not_running", "crashloop", "disabled", "install_missing", "health", "timeout", "invalid_manifest", "id_mismatch", "incompatible", "duplicate", "client_failed", "local_only"]>;
209
209
  readonly detail: Schema.String;
210
210
  }>]>;
211
211
  export type AppState = typeof AppState.Type;
@@ -274,7 +274,7 @@ export declare const AppStates: Schema.Struct<{
274
274
  readonly defaultPort: Schema.Int;
275
275
  }>;
276
276
  }>>;
277
- readonly reason: Schema.Literals<readonly ["starting", "not_running", "crashloop", "disabled", "install_missing", "health", "timeout", "invalid_manifest", "id_mismatch", "incompatible", "duplicate", "client_failed"]>;
277
+ readonly reason: Schema.Literals<readonly ["starting", "not_running", "crashloop", "disabled", "install_missing", "health", "timeout", "invalid_manifest", "id_mismatch", "incompatible", "duplicate", "client_failed", "local_only"]>;
278
278
  readonly detail: Schema.String;
279
279
  }>]>>;
280
280
  }>;
@@ -288,7 +288,7 @@ export declare class AppsConfigInvalid extends AppsConfigInvalid_base {
288
288
  }
289
289
  declare const AppProbeFailed_base: Schema.Class<AppProbeFailed, Schema.TaggedStruct<"AppProbeFailed", {
290
290
  readonly id: Schema.brand<Schema.String, "AppId">;
291
- readonly reason: Schema.Literals<readonly ["starting", "not_running", "crashloop", "disabled", "install_missing", "health", "timeout", "invalid_manifest", "id_mismatch", "incompatible", "duplicate", "client_failed"]>;
291
+ readonly reason: Schema.Literals<readonly ["starting", "not_running", "crashloop", "disabled", "install_missing", "health", "timeout", "invalid_manifest", "id_mismatch", "incompatible", "duplicate", "client_failed", "local_only"]>;
292
292
  readonly detail: Schema.String;
293
293
  }>, import("effect/Cause").YieldableError>;
294
294
  /** One probe's outcome other than `Ready`. */
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
package/dist/manifest.js CHANGED
@@ -19,7 +19,11 @@ export const AppContract = Schema.Literals([1]);
19
19
  export const AppId = Schema.String.check(Schema.isPattern(/^[a-z][a-z0-9-]*$/), Schema.isMaxLength(64)).pipe(Schema.brand("AppId"));
20
20
  /** Hub services an app may call; an undeclared one fails with `ShellServiceUnavailable("undeclared")`. */
21
21
  export const ShellService = Schema.Literals(["fleet.read", "host", "jobs.submit", "relay.post", "needs-you", "badge"]);
22
- const AssetPath = Schema.String.check(Schema.isPattern(/^[A-Za-z0-9._-]+(\/[A-Za-z0-9._-]+)*$/));
22
+ /**
23
+ * A file under the client directory: `/`-separated segments of letters, digits, `.`, `_` and `-`, none of them `.` or
24
+ * `..`, so `/apps/<id>/app/assets/<path>` never resolves outside that prefix.
25
+ */
26
+ const AssetPath = Schema.String.check(Schema.isPattern(/^(?!\.\.?(?:\/|$))[A-Za-z0-9._-]+(?:\/(?!\.\.?(?:\/|$))[A-Za-z0-9._-]+)*$/));
23
27
  /** The client the runner serves under `/app/assets/`: one ES module entry and its stylesheets. */
24
28
  export const AppClientAssets = Schema.Struct({
25
29
  entry: AssetPath,
@@ -104,7 +108,10 @@ export const AppUnavailableReason = Schema.Literals([
104
108
  "id_mismatch",
105
109
  "incompatible",
106
110
  "duplicate",
107
- "client_failed"
111
+ "client_failed",
112
+ // Its page runs only on the hub's loopback listener: a listener that can approve jobs opens no third-party page
113
+ // until apps get their own origin.
114
+ "local_only"
108
115
  ]);
109
116
  /**
110
117
  * The hub's view of one registered app, served by `GET /v1/apps`. `Unavailable` keeps the last good
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}