@synopackageland/cli 0.41.11 → 0.41.12
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 +9 -0
- package/README.md +5 -5
- package/dist/runtime/webapi-profile.js +2 -4
- package/dist/standalone/manifest.js +1 -1
- package/package.json +1 -1
- package/skills/SKILL.md +1 -1
- package/skills/reference/install.md +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.41.12 (2026-10-31)
|
|
4
|
+
|
|
5
|
+
- Remove the delegated WebAPI profile API-name and method-name word lists so
|
|
6
|
+
explicitly declared calls such as `SYNO.MailClient.Setting.SMTP` `list` pass
|
|
7
|
+
CLI profile validation. Keep name formats, exact API/method/version pins,
|
|
8
|
+
approval digests and all other checks, including SDK executor policy validation.
|
|
9
|
+
Pair with SDK/App 0.38.6 (executor/v0.38.6), which removes the matching
|
|
10
|
+
executor name blocklists; templates ~0.35.5 still pin SDK 0.38.2.
|
|
11
|
+
|
|
3
12
|
## 0.41.11 (2026-10-30)
|
|
4
13
|
|
|
5
14
|
- Pre-pull inspected Compose image references on the NAS with byte progress, a
|
package/README.md
CHANGED
|
@@ -88,7 +88,7 @@ alongside npm lockfiles. Do not disable checksum verification for public SDK
|
|
|
88
88
|
packages. Private mirrors can use explicitly configured Go authentication and
|
|
89
89
|
checksum settings; a failed fetch reports `SDK_DOWNLOAD_FAILED`.
|
|
90
90
|
|
|
91
|
-
CLI 0.41.
|
|
91
|
+
CLI 0.41.12 uses templates ~0.35.5, whose default SDK pin is 0.38.2. Compose import and SDK defaults
|
|
92
92
|
read the SDK pin from the installed templates; explicit App SDK declarations take precedence.
|
|
93
93
|
Every App method must be declared in the permissions table. Dynamic names and
|
|
94
94
|
custom HTTP dispatchers are rejected. With SDK 0.33.0, use fixed
|
|
@@ -99,7 +99,7 @@ unimported development commands are excluded. Use
|
|
|
99
99
|
authentication. See [App entry and registration](docs/app-entry.md).
|
|
100
100
|
|
|
101
101
|
`init` and `add` read their templates from the locally installed
|
|
102
|
-
`@synopackageland/templates`. CLI 0.41.
|
|
102
|
+
`@synopackageland/templates`. CLI 0.41.12 depends on `~0.35.5`: npm installation or
|
|
103
103
|
update can select the latest templates patch in the 0.35 minor line. Templates
|
|
104
104
|
patches need only a templates release; update the npm installation to receive them.
|
|
105
105
|
The CLI never fetches templates at runtime, so offline use works after installation;
|
|
@@ -344,9 +344,9 @@ capabilities:
|
|
|
344
344
|
|
|
345
345
|
Use matching backend/frontend SDK pins. The profile participates in the
|
|
346
346
|
normal executor approval digest; a profile change needs administrator approval.
|
|
347
|
-
Users grant the named profile separately.
|
|
348
|
-
|
|
349
|
-
executor/README.md.
|
|
347
|
+
Users grant the named profile separately. API and method names must have valid
|
|
348
|
+
formats, with each API, method and version listed exactly. Current-user permission
|
|
349
|
+
checks, bounded JSON and uncertain-outcome rules are in the SDK's executor/README.md.
|
|
350
350
|
|
|
351
351
|
## Raw WebAPI profiles
|
|
352
352
|
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
const record = (v) => !!v && typeof v === 'object' && !Array.isArray(v);
|
|
2
|
-
const blocked = new Set(['api', 'entry', 'core', 'auth', 'authentication', 'filestation', 'package', 'packagemanager', 'packagemanagement', 'user', 'users', 'group', 'groups', 'permission', 'permissions', 'privilege', 'privileges', 'owner', 'sharing', 'admin', 'setting', 'settings', 'teamfolder', 'mailplusserver', 'directoryserver', 'taskscheduler', 'eventscheduler', 'request', 'batch', 'compound']);
|
|
3
|
-
const methodBlocked = new Set(['auth', 'login', 'logout', 'sudo', 'permission', 'permissions', 'privilege', 'privileges', 'share', 'sharing', 'owner', 'admin']);
|
|
4
2
|
export function validWebAPIProfiles(value) {
|
|
5
3
|
if (!record(value) || !Object.keys(value).length || Object.keys(value).length > 32)
|
|
6
4
|
return false;
|
|
@@ -11,10 +9,10 @@ export function validWebAPIProfiles(value) {
|
|
|
11
9
|
if (p.raw_max_bytes !== undefined && (!Number.isSafeInteger(p.raw_max_bytes) || Number(p.raw_max_bytes) < 0 || Number(p.raw_max_bytes) > 10737418240))
|
|
12
10
|
return false;
|
|
13
11
|
for (const [api, methods] of Object.entries(p.apis)) {
|
|
14
|
-
if (!/^SYNO\.[A-Za-z][A-Za-z0-9]*(\.[A-Za-z][A-Za-z0-9]*)*$/.test(api) ||
|
|
12
|
+
if (!/^SYNO\.[A-Za-z][A-Za-z0-9]*(\.[A-Za-z][A-Za-z0-9]*)*$/.test(api) || !record(methods) || !Object.keys(methods).length)
|
|
15
13
|
return false;
|
|
16
14
|
for (const [method, versions] of Object.entries(methods)) {
|
|
17
|
-
if (!/^[a-z][a-z0-9_]{0,63}$/.test(method) ||
|
|
15
|
+
if (!/^[a-z][a-z0-9_]{0,63}$/.test(method) || !Array.isArray(versions) || !versions.length || new Set(versions).size !== versions.length || versions.some(x => !Number.isSafeInteger(x) || x < 1 || x > 65535))
|
|
18
16
|
return false;
|
|
19
17
|
total += versions.length;
|
|
20
18
|
if (total > 256)
|
|
@@ -1002,7 +1002,7 @@ function readCapabilities(value, c) {
|
|
|
1002
1002
|
if (validWebAPIProfiles(setting))
|
|
1003
1003
|
result.webapi = setting;
|
|
1004
1004
|
else
|
|
1005
|
-
c.fail("CAPABILITY_INVALID", "webapi requires named profiles with purpose and exact
|
|
1005
|
+
c.fail("CAPABILITY_INVALID", "webapi requires named profiles with purpose and exact API/method/version lists.");
|
|
1006
1006
|
}
|
|
1007
1007
|
else if (name === "delegate") {
|
|
1008
1008
|
if (validDelegate(setting))
|
package/package.json
CHANGED
package/skills/SKILL.md
CHANGED
|
@@ -26,7 +26,7 @@ Use this guide to initialize, build and inspect own applications or upstream OSS
|
|
|
26
26
|
|
|
27
27
|
For an existing open-source App, first read [reference/upstream-fork.md](reference/upstream-fork.md): upstream fork/history + untouched upstream files + all packaging in `synology/`, official container images pinned by tag/index digest, native official release binaries pinned by SHA-256 or a source build hook, and a single tag-merge upgrade command. Use `init --upstream-fork`; never rewrite the App as a component. Integrated upstream Apps require direct DSM administrator entry without a separate App password or an OIDC/SSO server: supported trusted headers first, disabling native login second; the shipped OpenList pattern uses the existing SDK 0.17.3 token adapter (`mode: token`, `access: dsm-admins`, `entry: admin-only`) with server-side Authorization injection. All DSM admins share one upstream admin; token reset requires package restart; WebDAV retains its native credentials.
|
|
28
28
|
|
|
29
|
-
Use SDK/App 0.38.
|
|
29
|
+
Use SDK/App 0.38.6 and CLI 0.41.12 for App entry enforcement. Declare every App method
|
|
30
30
|
in the permissions table; dynamic names and unregistered HTTP dispatchers are rejected.
|
|
31
31
|
Use fixed SDK routes and `identity_gateway.upstream_auth_paths` for client API
|
|
32
32
|
paths that rely on upstream authentication. Read
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Native installation settings
|
|
2
2
|
|
|
3
|
-
Use SDK/App 0.38.
|
|
3
|
+
Use SDK/App 0.38.6, CLI 0.41.12 and templates 0.35.5. Configure installation through the manifest and generated wizard; do not add App ACL writers, root hooks or independent port state.
|
|
4
4
|
|
|
5
5
|
```yaml
|
|
6
6
|
install:
|