@synopackageland/templates 0.35.2 → 0.35.3

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
@@ -22,7 +22,7 @@ daemon:
22
22
  window_seconds: 300
23
23
  ```
24
24
 
25
- Templates 0.35.2 pin UI 0.16.1 and SDK 0.38.1 in native and Compose projects.
25
+ Templates 0.35.3 pin UI 0.16.1 and SDK 0.38.2 in native and Compose projects.
26
26
  Use CLI 0.41.2. The Vue `AppShell` shows a
27
27
  non-blocking **Reload** notice when an upgrade replaced the UI an open page
28
28
  loaded. Go Apps select
@@ -81,18 +81,18 @@ calls each one from the generated script of the same name (`synopkgland skill sh
81
81
  The placeholders `__PACKAGE__` (also the Go module path), `__DISPLAY_NAME__` and
82
82
  `__BACKGROUND_ENABLED__` are substituted by `init`.
83
83
 
84
- `backend/go.mod` requires `github.com/synopackageland/syno-pkg-land-sdk v0.38.1`; that line is
84
+ `backend/go.mod` requires `github.com/synopackageland/syno-pkg-land-sdk v0.38.2`; that line is
85
85
  the single source of the SDK version and `frontend/package.json` pins
86
86
  `@synopackageland/sdk` to the same version. Python and Node.js name it in
87
87
  `backend.sdk`, Rust in the `syno-pkg-land-app` tag of `backend/Cargo.toml`
88
- (and `Cargo.lock`); all of them pin 0.38.1. The Vue frontend pins
89
- `@synopackageland/ui` 0.16.1. SDK 0.38.1 accepts UI `>=0.10.1 <0.18.0`,
88
+ (and `Cargo.lock`); all of them pin 0.38.2. The Vue frontend pins
89
+ `@synopackageland/ui` 0.16.1. SDK 0.38.2 accepts UI `>=0.10.1 <0.18.0`,
90
90
  so no UI peer override is needed. Tests use jsdom 30 for UI floating-layer styles.
91
91
 
92
92
  Interactive NAS file operations use same-origin browser calls.
93
93
  Custom file handlers use the SDK's
94
- [session transport migration](https://github.com/synopackageland/syno-pkg-land-sdk/blob/v0.38.1/docs/dsm-session-transport.md).
95
- CLI 0.41.2 reads SDK 0.38.1's release manifest, which names immutable
94
+ [session transport migration](https://github.com/synopackageland/syno-pkg-land-sdk/blob/v0.38.2/docs/dsm-session-transport.md).
95
+ CLI 0.41.2 reads SDK 0.38.2's release manifest, which names immutable
96
96
  executor/v0.32.0 and its executor digests. Its `~0.35.2` templates
97
97
  dependency selects this release.
98
98
 
@@ -108,7 +108,7 @@ Keep punctuation between sentences and intentional loading ellipses.
108
108
 
109
109
  ## Request deadlines and background work
110
110
 
111
- SDK/App 0.38.1 defaults to 300 seconds for cooperative requests and 302 seconds
111
+ SDK/App 0.38.2 defaults to 300 seconds for cooperative requests and 302 seconds
112
112
  for the TS client and generated DSM window. The CLI reads the selected SDK's
113
113
  timeout spec; `backend.timeout_seconds` explicitly overrides it for native
114
114
  backends, and an earlier parent deadline still wins. Go assembly should fall
@@ -140,7 +140,7 @@ caps, approved root policy/program budgets and credential lifetimes retain
140
140
  their existing limits; long root work uses `root.start` / `root.jobs.*`.
141
141
  The independent ctl transport keeps its 62-second default: use an explicit
142
142
  `--timeout` for long synchronous calls, or an existing nonblocking job flow.
143
- See the SDK's [request deadline contract](https://github.com/synopackageland/syno-pkg-land-sdk/blob/v0.38.1/docs/request-deadlines.md).
143
+ See the SDK's [request deadline contract](https://github.com/synopackageland/syno-pkg-land-sdk/blob/v0.38.2/docs/request-deadlines.md).
144
144
 
145
145
  ## Hyper Backup
146
146
 
@@ -299,4 +299,17 @@ The bridge examples expose submission, lookup and cancellation through
299
299
 
300
300
  ## External access
301
301
 
302
- With CLI 0.40.0 and SDK 0.38.1, a gateway App may declare `identity_gateway.external_access: {connect: optional, origin_change: confirm, single_origin: true}` for an upstream that signs in on one fixed URL. The policy is forwarded to the packaged gateway. A single-origin App's `manual_origin` accepts an explicit HTTPS port; the `external-origin` installation setting remains restricted to port 443. The DSM launcher selects a provider destination, probes `/_spl/ping` for up to eight seconds, and explains failures before offering **Open anyway**. A configured single-origin App always opens its primary external origin.
302
+ With CLI 0.40.0 and SDK 0.38.2, a gateway App may declare `identity_gateway.external_access: {connect: optional, origin_change: confirm, single_origin: true}` for an upstream that signs in on one fixed URL. The policy is forwarded to the packaged gateway. A single-origin App's `manual_origin` accepts an explicit HTTPS port; the `external-origin` installation setting remains restricted to port 443. The DSM launcher selects a provider destination, probes `/_spl/ping` for up to eight seconds, and explains failures before offering **Open anyway**. A configured single-origin App always opens its primary external origin.
303
+
304
+
305
+ Compose templates declare an app-named dedicated shared folder by default. DSM
306
+ creates it and grants the package account the declared permission. The optional
307
+ existing-folder field must pass the CLI's folder and access validation. Native
308
+ Apps that need shared data use the same `install.sharedFolder` declaration with
309
+ `mode: dedicated`, a package-specific `name`, `key` and `permission`.
310
+
311
+ The Compose gateway also enables `install.ports: true`: its manifest listener
312
+ ports prefill the DSM wizard, selected values flow through the SDK-generated
313
+ configuration and DSM service definition, and upgrades retain the selection.
314
+ Changing ports uses reinstall. Declare `{port: gateway_https}` runtime bindings
315
+ when an upstream application needs its public port in its own configuration.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synopackageland/templates",
3
- "version": "0.35.2",
3
+ "version": "0.35.3",
4
4
  "description": "Project templates for synopkgland init: native-go, native-python, native-node and native-rust (plain or Vue, with jobs, delegate and root-ops overlays), binary and compose.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -9,6 +9,13 @@ maintainer: Your Name
9
9
  os_min_ver: "7.2.1-69057"
10
10
  arches: [x86_64, aarch64]
11
11
  capabilities: {}
12
+ install:
13
+ ports: true
14
+ sharedFolder:
15
+ mode: dedicated
16
+ key: data
17
+ name: __PACKAGE__
18
+ permission: rw
12
19
  # Hyper Backup application backup is off for Compose Apps: their data lives
13
20
  # in container volumes, which it does not cover.
14
21
  compose:
@@ -16,10 +23,11 @@ compose:
16
23
  web: {service: web, port: 8080, health: {path: /, status: 200}}
17
24
  network: {egress: isolated}
18
25
  identity_gateway:
19
- sdk: 0.38.1
26
+ sdk: 0.38.2
20
27
  mode: none
21
28
  listen: {http: 28000}
22
29
  # Web Apps default to new-page through the shared app-launch resolver.
23
30
  # ui: {launch: new-page}
24
31
  # Containers use a fixed package UID, never the signed-in user's File Station ACL.
25
- # For existing Share access, opt in to composeMounts and confirm after install.
32
+ # Bind shared data with compose.shares, select: install, key: data and the same permission.
33
+ # The dedicated share is created by DSM; an optional existing share must pass wizard validation.
@@ -17,7 +17,7 @@ DSM main menu → DSM window (ui/app.js)
17
17
 
18
18
  ## Requests and long work
19
19
 
20
- SDK/App 0.38.1 defaults to 300-second requests and a 302-second browser wait.
20
+ SDK/App 0.38.2 defaults to 300-second requests and a 302-second browser wait.
21
21
  Explicit `backend.timeout_seconds` and earlier parent deadlines still apply;
22
22
  rebuild the App to use the new SDK. For long NAS work, enable the existing jobs
23
23
  capability: return admission and the original job ID promptly, execute in the
@@ -27,7 +27,7 @@ last queued/running state intact. After a lost admission reply, reuse the same
27
27
  idempotency key and input instead of replaying a mutation with a new key.
28
28
  Jobs default to 30 minutes; approved executor limits remain separate. ctl keeps
29
29
  its 62-second transport default; use an explicit `--timeout` or an existing
30
- nonblocking job. See the SDK's [request deadline contract](https://github.com/synopackageland/syno-pkg-land-sdk/blob/v0.38.1/docs/request-deadlines.md).
30
+ nonblocking job. See the SDK's [request deadline contract](https://github.com/synopackageland/syno-pkg-land-sdk/blob/v0.38.2/docs/request-deadlines.md).
31
31
 
32
32
  ## Quick start
33
33
 
@@ -393,9 +393,10 @@ or deletes outside the package's own folders.
393
393
 
394
394
  ## Shared Folder access
395
395
 
396
- A `install.sharedFolder` in `dsm-package.yaml` lets the administrator pick a folder in the
397
- install wizard, but DSM does not give the package account access to a picked folder. The
398
- backend reports the real state: the `sharedfolder.status` operation (administrators only
396
+ Use `install.sharedFolder: {mode: dedicated, key: media, name: __PACKAGE__, permission: rw}`
397
+ for shared data. DSM creates the app-specific folder and grants the declared
398
+ package-account permission. The wizard defaults to it and validates any existing
399
+ folder choice before Next. The backend reports the real state: the `sharedfolder.status` operation (administrators only
399
400
  unless you change `permissions.json`) returns each folder with what the App needs, what the
400
401
  package account has (`none`, `read`, `write`) and a `state` (`ready`, `pending`, `missing`,
401
402
  `ambiguous`). `cfg.SharedFolderPath(key)` returns the path or an error that names the
@@ -1,6 +1,6 @@
1
1
  Native Go package build dependencies
2
2
 
3
- github.com/synopackageland/syno-pkg-land-sdk v0.38.1 (MIT)
3
+ github.com/synopackageland/syno-pkg-land-sdk v0.38.2 (MIT)
4
4
 
5
5
  Copyright (c) 2026 synopkgland
6
6
 
@@ -4,6 +4,6 @@ go 1.25.0
4
4
 
5
5
  toolchain go1.26.10
6
6
 
7
- require github.com/synopackageland/syno-pkg-land-sdk v0.38.1
7
+ require github.com/synopackageland/syno-pkg-land-sdk v0.38.2
8
8
 
9
9
  require golang.org/x/sys v0.44.0 // indirect
@@ -1,4 +1,4 @@
1
- github.com/synopackageland/syno-pkg-land-sdk v0.38.1 h1:W1+QI88KAnGyPxVI4wK4Q67b63JEwF3KaFigWlsUbYA=
2
- github.com/synopackageland/syno-pkg-land-sdk v0.38.1/go.mod h1:8GwREGbczc8mAk4Gv8FUHaukXXCUstjzkovQrNV59Cc=
1
+ github.com/synopackageland/syno-pkg-land-sdk v0.38.2 h1:UJh6tbUxhmcRdy8Y6qqJYHcxZtYkShE9UxtXjbN5vV8=
2
+ github.com/synopackageland/syno-pkg-land-sdk v0.38.2/go.mod h1:8GwREGbczc8mAk4Gv8FUHaukXXCUstjzkovQrNV59Cc=
3
3
  golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ=
4
4
  golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
@@ -113,7 +113,7 @@ func TestBackgroundStatusReportsLimitsAndWorker(t *testing.T) {
113
113
  t.Fatalf("%s %v", code, out)
114
114
  }
115
115
  limits := d["limits"].(map[string]any)
116
- if limits["maxInputBytes"].(float64) != 512*1024 || limits["maxQueued"].(float64) != 16 || limits["maxTotalBytes"].(float64) != 16<<20 || limits["jobTimeoutSeconds"].(float64) != 60 {
116
+ if limits["maxInputBytes"].(float64) != 512*1024 || limits["maxQueued"].(float64) != 16 || limits["maxTotalBytes"].(float64) != 16<<20 || limits["jobTimeoutSeconds"].(float64) != 30*60 {
117
117
  t.Fatalf("limits: %v", limits)
118
118
  }
119
119
  info := background.WorkerInfo{PID: os.Getpid(), UID: os.Getuid(), Username: "pkg"}
@@ -7,7 +7,7 @@
7
7
  "name": "native-dsm-vue-app",
8
8
  "dependencies": {
9
9
  "@lucide/vue": "1.48.0",
10
- "@synopackageland/sdk": "0.38.1",
10
+ "@synopackageland/sdk": "0.38.2",
11
11
  "@synopackageland/ui": "0.16.1",
12
12
  "vue": "3.5.43"
13
13
  },
@@ -1152,9 +1152,9 @@
1152
1152
  }
1153
1153
  },
1154
1154
  "node_modules/@synopackageland/sdk": {
1155
- "version": "0.38.1",
1156
- "resolved": "https://registry.npmjs.org/@synopackageland/sdk/-/sdk-0.38.1.tgz",
1157
- "integrity": "sha512-Z/YxRFekMRwRU31pVudkHgHKgmJFCjRzJqHYkIq9FNCrprxQCFTbTgQTu3eqKXZ+gVJPHXlJccfk2B/ohMQnFA==",
1155
+ "version": "0.38.2",
1156
+ "resolved": "https://registry.npmjs.org/@synopackageland/sdk/-/sdk-0.38.2.tgz",
1157
+ "integrity": "sha512-ZSZKn5T8TbOpUF+PYMgq0IU+czw9HG4O9C4JuCeaT8Xoa3gMNiHbv6N1+VdRfxm46GtbtFNHzdQBoZ3mbmvKKg==",
1158
1158
  "license": "MIT",
1159
1159
  "peerDependencies": {
1160
1160
  "@lucide/vue": "^1.48.0",
@@ -8,7 +8,7 @@
8
8
  },
9
9
  "dependencies": {
10
10
  "@lucide/vue": "1.48.0",
11
- "@synopackageland/sdk": "0.38.1",
11
+ "@synopackageland/sdk": "0.38.2",
12
12
  "@synopackageland/ui": "0.16.1",
13
13
  "vue": "3.5.43"
14
14
  },
@@ -17,7 +17,7 @@ DSM main menu → DSM window (ui/app.js)
17
17
 
18
18
  ## Requests and long work
19
19
 
20
- SDK/App 0.38.1 defaults to 300-second requests and a 302-second browser wait.
20
+ SDK/App 0.38.2 defaults to 300-second requests and a 302-second browser wait.
21
21
  Explicit `backend.timeout_seconds` and earlier parent deadlines still apply;
22
22
  rebuild the App to use the new SDK. For long NAS work, enable the existing jobs
23
23
  capability: return admission and the original job ID promptly, execute in the
@@ -27,7 +27,7 @@ last queued/running state intact. After a lost admission reply, reuse the same
27
27
  idempotency key and input instead of replaying a mutation with a new key.
28
28
  Jobs default to 30 minutes; approved executor limits remain separate. ctl keeps
29
29
  its 62-second transport default; use an explicit `--timeout` or an existing
30
- nonblocking job. See the SDK's [request deadline contract](https://github.com/synopackageland/syno-pkg-land-sdk/blob/v0.38.1/docs/request-deadlines.md).
30
+ nonblocking job. See the SDK's [request deadline contract](https://github.com/synopackageland/syno-pkg-land-sdk/blob/v0.38.2/docs/request-deadlines.md).
31
31
 
32
32
  ## Quick start
33
33
 
@@ -49,7 +49,7 @@ backend:
49
49
  runtime: node
50
50
  dir: backend/app
51
51
  entry: main.js
52
- sdk: 0.38.1
52
+ sdk: 0.38.2
53
53
  node: { package: Node.js_v22 }
54
54
 
55
55
  ui:
@@ -17,7 +17,7 @@ DSM main menu → DSM window (ui/app.js)
17
17
 
18
18
  ## Requests and long work
19
19
 
20
- SDK/App 0.38.1 defaults to 300-second requests and a 302-second browser wait.
20
+ SDK/App 0.38.2 defaults to 300-second requests and a 302-second browser wait.
21
21
  Explicit `backend.timeout_seconds` and earlier parent deadlines still apply;
22
22
  rebuild the App to use the new SDK. For long NAS work, enable the existing jobs
23
23
  capability: return admission and the original job ID promptly, execute in the
@@ -27,7 +27,7 @@ last queued/running state intact. After a lost admission reply, reuse the same
27
27
  idempotency key and input instead of replaying a mutation with a new key.
28
28
  Jobs default to 30 minutes; approved executor limits remain separate. ctl keeps
29
29
  its 62-second transport default; use an explicit `--timeout` or an existing
30
- nonblocking job. See the SDK's [request deadline contract](https://github.com/synopackageland/syno-pkg-land-sdk/blob/v0.38.1/docs/request-deadlines.md).
30
+ nonblocking job. See the SDK's [request deadline contract](https://github.com/synopackageland/syno-pkg-land-sdk/blob/v0.38.2/docs/request-deadlines.md).
31
31
 
32
32
  ## Quick start
33
33
 
@@ -47,7 +47,7 @@ backend:
47
47
  runtime: python
48
48
  dir: backend/app
49
49
  entry: main.py
50
- sdk: 0.38.1
50
+ sdk: 0.38.2
51
51
 
52
52
  ui:
53
53
  # Non-UI-SDK frontends open a full page; Portal is a separate opt-in.
@@ -17,7 +17,7 @@ DSM main menu → DSM window (ui/app.js)
17
17
 
18
18
  ## Requests and long work
19
19
 
20
- SDK/App 0.38.1 defaults to 300-second requests and a 302-second browser wait.
20
+ SDK/App 0.38.2 defaults to 300-second requests and a 302-second browser wait.
21
21
  Explicit `backend.timeout_seconds` and earlier parent deadlines still apply;
22
22
  rebuild the App to use the new SDK. For long NAS work, enable the existing jobs
23
23
  capability: return admission and the original job ID promptly, execute in the
@@ -27,7 +27,7 @@ last queued/running state intact. After a lost admission reply, reuse the same
27
27
  idempotency key and input instead of replaying a mutation with a new key.
28
28
  Jobs default to 30 minutes; approved executor limits remain separate. ctl keeps
29
29
  its 62-second transport default; use an explicit `--timeout` or an existing
30
- nonblocking job. See the SDK's [request deadline contract](https://github.com/synopackageland/syno-pkg-land-sdk/blob/v0.38.1/docs/request-deadlines.md).
30
+ nonblocking job. See the SDK's [request deadline contract](https://github.com/synopackageland/syno-pkg-land-sdk/blob/v0.38.2/docs/request-deadlines.md).
31
31
 
32
32
  ## Quick start
33
33
 
@@ -104,8 +104,8 @@ dependencies = [
104
104
 
105
105
  [[package]]
106
106
  name = "syno-pkg-land-app"
107
- version = "0.38.1"
108
- source = "git+https://github.com/synopackageland/syno-pkg-land-sdk?tag=v0.38.1#8919aef63aa22d37791190ca8db87525a23796ad"
107
+ version = "0.38.2"
108
+ source = "git+https://github.com/synopackageland/syno-pkg-land-sdk?tag=v0.38.2#103014ec9ec31e91062053d7678b4d2b115be71e"
109
109
  dependencies = [
110
110
  "libc",
111
111
  "serde",
@@ -9,7 +9,7 @@ libc = "0.2"
9
9
  serde = { version = "1", features = ["derive"] }
10
10
  serde_json = "1"
11
11
  # The SDK version is the tag; `synopkgland check` reads it from Cargo.lock.
12
- syno-pkg-land-app = { git = "https://github.com/synopackageland/syno-pkg-land-sdk", tag = "v0.38.1" }
12
+ syno-pkg-land-app = { git = "https://github.com/synopackageland/syno-pkg-land-sdk", tag = "v0.38.2" }
13
13
 
14
14
  [profile.release]
15
15
  # A handler panic becomes an "internal" reply; abort would end the App without one.