@synopackageland/cli 0.18.0 → 0.19.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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.19.0 (2026-10-20)
4
+
5
+ - Align the CLI SDK minor line and templates at 0.19.0; retain UI 0.12.5.
6
+ - Support native DSM OIDC login without a browser bridge for compatible clients.
7
+ - Refresh canonical executor setup fixtures and all three executor/lifecycle architecture pins for SDK 0.19.0. Rebuilt executor Apps require one administrator reapproval after upgrading.
8
+
3
9
  ## 0.18.0 (2026-10-20)
4
10
 
5
11
  - Support the SDK 0.18.x minor line and pin templates 0.18.0 with SDK/App 0.18.0 and UI 0.12.5.
@@ -1,8 +1,8 @@
1
1
  {
2
- "0.18.0": {
3
- "x86_64": "6d9d5a12ac4c990639b31c555560a1b6e49cbe1c267c626a23b91833dcc4452e",
4
- "aarch64": "efbed582ce1249fed09de72b7bbe553510a55553e44ccf76fa93c684864e8bb8",
5
- "armv7": "670f83c3349497263c96b0244ec142153c094d5e223dae091c9c8614c0ea04b6",
2
+ "0.19.0": {
3
+ "x86_64": "3b23252a4d2ad188e8920aee3c022d054a85f31797dfb9f34a576449f8b08f41",
4
+ "aarch64": "024a8a01977324645b475330371afb8b8c8387eac6a11ec3d9d30a4a0e445174",
5
+ "armv7": "fae3266f65863815f1417332a3c73d12507941029077e0ddc118da8461e8cff3",
6
6
  "lifecycle": {
7
7
  "x86_64": "9bb53301670b43cdcd6e21cebac99ab7abd82962d874f32423a81e6cb49d4972",
8
8
  "aarch64": "38fe873c86eb102c850baa1f304114a83a31d1df72defd22792bc37610fec9bb",
@@ -379,7 +379,7 @@ ${ns}.prepareFullPage = function (title) {
379
379
  favicon.href = ${ns}.appIcon;
380
380
  };
381
381
 
382
- ${manifest.identityGateway?.oidc?.browser ? `${ns}.resumeOIDC = ${oidcResumeRuntime(pkg, Object.values(manifest.identityGateway.listen).filter((p) => typeof p === "number"))};` : ""}
382
+ ${(manifest.identityGateway?.oidc?.native_login || manifest.identityGateway?.oidc?.browser) ? `${ns}.resumeOIDC = ${oidcResumeRuntime(pkg, Object.values(manifest.identityGateway.listen).filter((p) => typeof p === "number"))};` : ""}
383
383
 
384
384
  // DSM reopens a window at the size it was last left at, even one saved on a
385
385
  // larger screen, and only moves a window that does not fit: keep it inside.
@@ -408,7 +408,7 @@ Ext.define(${JSON.stringify(`${ns}.MainWindow`)}, {
408
408
  },
409
409
  onOpen: function (param) {
410
410
  this.callParent(arguments);
411
- ${manifest.identityGateway?.oidc?.browser ? `if (${ns}.resumeOIDC(param)) return;` : ""}
411
+ ${(manifest.identityGateway?.oidc?.native_login || manifest.identityGateway?.oidc?.browser) ? `if (${ns}.resumeOIDC(param)) return;` : ""}
412
412
  var me = this;
413
413
  if (me.mounted) {
414
414
  me.reopenEvents.emit();
@@ -471,7 +471,7 @@ ${root ? root.mount : ""} ${ns}.loadApp(function (app) {
471
471
  // with that launch's param. Before the App mounts, it mounts with the latest.
472
472
  onRequest: function (param) {
473
473
  this.callParent(arguments);
474
- ${manifest.identityGateway?.oidc?.browser ? `if (${ns}.resumeOIDC(param)) return;` : ""}
474
+ ${(manifest.identityGateway?.oidc?.native_login || manifest.identityGateway?.oidc?.browser) ? `if (${ns}.resumeOIDC(param)) return;` : ""}
475
475
  var params = ${ns}.launchParams(param);
476
476
  if (!this.mounted) {
477
477
  if (this.mountPending && Object.keys(params).length) this.launchParams = params;
@@ -55,6 +55,7 @@ export interface IdentityGateway {
55
55
  roles?: GatewayRoles;
56
56
  headers?: Partial<Record<"user" | "email" | "name" | "groups" | "uid", string>>;
57
57
  oidc?: {
58
+ native_login?: boolean;
58
59
  issuer_port: number;
59
60
  browser?: GatewayBrowser;
60
61
  clients: GatewayClient[];
@@ -270,7 +270,8 @@ export function readIdentityGateway(value, daemon, fail, packagedPayload = false
270
270
  if (v.mode === "oidc") {
271
271
  const o = v.oidc;
272
272
  if (!record(o) ||
273
- !only(o, ["issuer_port", "clients", "rewrite_json", "browser"]) ||
273
+ !only(o, ["issuer_port", "clients", "rewrite_json", "browser", "native_login"]) ||
274
+ (o.native_login !== undefined && typeof o.native_login !== "boolean") ||
274
275
  !port(o.issuer_port) ||
275
276
  !Array.isArray(o.clients) ||
276
277
  !o.clients.length ||
@@ -312,6 +313,7 @@ export function readIdentityGateway(value, daemon, fail, packagedPayload = false
312
313
  return invalid("oidc.browser needs fixed local start, login_paths and callback_paths outside /_sso.");
313
314
  }
314
315
  gateway.oidc = {
316
+ ...(o.native_login !== undefined ? { native_login: o.native_login } : {}),
315
317
  issuer_port: o.issuer_port,
316
318
  ...(b !== undefined ? { browser: b } : {}),
317
319
  clients: clients,
@@ -1,6 +1,18 @@
1
1
  /** No caller-provided URL reaches location: only a transaction and a declared port. */
2
2
  export function oidcResumeRuntime(pkg, ports) {
3
3
  return `(function(param) {
4
+ if (typeof param === 'string') {
5
+ if (param.length > 512) return false;
6
+ try { param = JSON.parse(param); }
7
+ catch (_) {
8
+ try {
9
+ var query = new URLSearchParams(param);
10
+ if (Array.from(query.keys()).length !== 1 || query.getAll('ssoResume').length !== 1) return false;
11
+ param = {ssoResume:query.get('ssoResume')};
12
+ } catch (_) { return false; }
13
+ }
14
+ }
15
+ if (!param || typeof param !== 'object' || Array.isArray(param)) return false;
4
16
  var value = param && param.ssoResume;
5
17
  if (typeof value !== 'string') return false;
6
18
  var parts = /^([A-Za-z0-9_-]{1,128}):([0-9]{1,5})$/.exec(value);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synopackageland/cli",
3
- "version": "0.18.0",
3
+ "version": "0.19.0",
4
4
  "description": "Syno Package Land Developer Kit CLI",
5
5
  "type": "module",
6
6
  "bin": {
@@ -27,7 +27,7 @@
27
27
  },
28
28
  "dependencies": {
29
29
  "@napi-rs/keyring": "^2.1.1",
30
- "@synopackageland/templates": "0.18.0",
30
+ "@synopackageland/templates": "0.19.0",
31
31
  "ajv": "^8.17.1",
32
32
  "commander": "^13.1.0",
33
33
  "json-canonicalize": "^3.0.1",
@@ -121,3 +121,14 @@ URL is accepted as the return destination. The transaction expires in five minut
121
121
 
122
122
  This declares navigation only; upstream account provisioning/role mapping must
123
123
  use that upstream's supported configuration APIs and be tested independently.
124
+
125
+ ## Server-managed OIDC navigation (development)
126
+
127
+ For an upstream that automatically starts OIDC (for example a native web-server
128
+ authentication module), leave `oidc.browser` unset and declare
129
+ `oidc.native_login: true`. This reuses native DSM cold-login/resume without
130
+ injecting an HTML/SPA bridge into the upstream. It requires the matching SDK
131
+ capability; released SDK 0.18.0 does not yet implement this field. Native Compose
132
+ URL entries resume only a bounded transaction and declared public gateway port.
133
+ Normal menu entry remains the classless SDK CGI. Existing browser consumers keep
134
+ their previous behavior. Never invent fake login paths just to enable DSM login.