@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 +6 -0
- package/dist/runtime/executor-digests.json +4 -4
- package/dist/standalone/dsm-window.js +3 -3
- package/dist/standalone/identity-gateway.d.ts +1 -0
- package/dist/standalone/identity-gateway.js +3 -1
- package/dist/standalone/oidc-resume.js +12 -0
- package/package.json +2 -2
- package/skills/reference/identity-gateway.md +11 -0
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.
|
|
3
|
-
"x86_64": "
|
|
4
|
-
"aarch64": "
|
|
5
|
-
"armv7": "
|
|
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.
|
|
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.
|
|
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.
|