@synopackageland/cli 0.8.0 → 0.9.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 +124 -0
- package/README.md +26 -4
- package/dist/add.js +4 -17
- package/dist/authorization-sdk.d.ts +0 -1
- package/dist/authorization-sdk.js +0 -1
- package/dist/build-spk/gateway.js +2 -2
- package/dist/build-spk/notices.js +12 -8
- package/dist/capability-overlays.d.ts +15 -0
- package/dist/capability-overlays.js +18 -0
- package/dist/cli-version.d.ts +2 -0
- package/dist/cli-version.js +3 -0
- package/dist/cli.js +3 -1
- package/dist/error-registry.js +12 -4
- package/dist/info.js +2 -1
- package/dist/init.js +52 -58
- package/dist/reproducible.js +1 -1
- package/dist/runtime/delegate-contract.d.ts +15 -0
- package/dist/runtime/delegate-contract.js +2 -0
- package/dist/runtime/executor-build.d.ts +15 -1
- package/dist/runtime/executor-build.js +42 -11
- package/dist/runtime/executor-digests.json +13 -0
- package/dist/runtime/executor-inspect.d.ts +1 -0
- package/dist/runtime/executor-inspect.js +5 -2
- package/dist/runtime/executor-policy.d.ts +3 -1
- package/dist/runtime/executor-policy.js +7 -2
- package/dist/runtime/executor-source.d.ts +21 -0
- package/dist/runtime/executor-source.js +35 -0
- package/dist/runtime/executor-tasks.d.ts +5 -2
- package/dist/runtime/executor-tasks.js +6 -4
- package/dist/runtime/sdk-source.d.ts +31 -0
- package/dist/runtime/sdk-source.js +92 -0
- package/dist/standalone/api-permissions.d.ts +4 -1
- package/dist/standalone/api-permissions.js +10 -18
- package/dist/standalone/build.d.ts +1 -0
- package/dist/standalone/build.js +11 -4
- package/dist/standalone/daemon.js +2 -2
- package/dist/standalone/dsm-window.js +2 -2
- package/dist/standalone/manifest.d.ts +5 -2
- package/dist/standalone/manifest.js +9 -3
- package/dist/standalone/root-window.d.ts +1 -1
- package/dist/standalone/root-window.js +0 -1
- package/dist/standalone/sdk-check.d.ts +9 -0
- package/dist/standalone/sdk-check.js +43 -0
- package/dist/standalone/spk.js +1 -1
- package/dist/template-paths.d.ts +7 -2
- package/dist/template-paths.js +18 -6
- package/package.json +13 -3
- package/dist/templates/_executor/README.md +0 -318
- package/dist/templates/_executor/anchor.go +0 -156
- package/dist/templates/_executor/anchor_test.go +0 -161
- package/dist/templates/_executor/apppriv_review_test.go +0 -28
- package/dist/templates/_executor/auth_presence_review_test.go +0 -38
- package/dist/templates/_executor/cancel_contract_test.go +0 -236
- package/dist/templates/_executor/cmd/lifecycle/main.go +0 -42
- package/dist/templates/_executor/cookie_review_test.go +0 -27
- package/dist/templates/_executor/copy.go +0 -64
- package/dist/templates/_executor/copy_test.go +0 -88
- package/dist/templates/_executor/digest_review_test.go +0 -120
- package/dist/templates/_executor/directories.go +0 -40
- package/dist/templates/_executor/dsm.go +0 -369
- package/dist/templates/_executor/dsm_test.go +0 -290
- package/dist/templates/_executor/executor.go +0 -735
- package/dist/templates/_executor/executor_test.go +0 -314
- package/dist/templates/_executor/go.mod +0 -5
- package/dist/templates/_executor/identity.go +0 -74
- package/dist/templates/_executor/identity_kernel_linux_test.go +0 -60
- package/dist/templates/_executor/identity_linux.go +0 -82
- package/dist/templates/_executor/identity_security_test.go +0 -43
- package/dist/templates/_executor/internal/lifecycle/lifecycle.go +0 -95
- package/dist/templates/_executor/internal/lifecycle/lifecycle_test.go +0 -232
- package/dist/templates/_executor/internal/taskscript/boot.sh +0 -31
- package/dist/templates/_executor/internal/taskscript/cmd/main.go +0 -19
- package/dist/templates/_executor/internal/taskscript/control.sh +0 -31
- package/dist/templates/_executor/internal/taskscript/tasks.go +0 -44
- package/dist/templates/_executor/json_review_test.go +0 -40
- package/dist/templates/_executor/lifecycle_test.go +0 -97
- package/dist/templates/_executor/link_linux.go +0 -28
- package/dist/templates/_executor/long_running_test.go +0 -530
- package/dist/templates/_executor/main.go +0 -576
- package/dist/templates/_executor/managed.go +0 -117
- package/dist/templates/_executor/managed_test.go +0 -137
- package/dist/templates/_executor/move_linux.go +0 -490
- package/dist/templates/_executor/move_linux_test.go +0 -460
- package/dist/templates/_executor/move_validation.go +0 -46
- package/dist/templates/_executor/move_validation_test.go +0 -187
- package/dist/templates/_executor/operations.go +0 -926
- package/dist/templates/_executor/path_test.go +0 -35
- package/dist/templates/_executor/pid.go +0 -37
- package/dist/templates/_executor/pid_test.go +0 -113
- package/dist/templates/_executor/platform_linux.go +0 -187
- package/dist/templates/_executor/platform_linux_test.go +0 -191
- package/dist/templates/_executor/platform_other.go +0 -76
- package/dist/templates/_executor/process.go +0 -142
- package/dist/templates/_executor/purge_log.go +0 -18
- package/dist/templates/_executor/records.go +0 -242
- package/dist/templates/_executor/scope_cancel_contract_test.go +0 -91
- package/dist/templates/_executor/scope_client.go +0 -37
- package/dist/templates/_executor/scope_contract.go +0 -12
- package/dist/templates/_executor/selected_scope.go +0 -146
- package/dist/templates/_executor/selected_scope_test.go +0 -186
- package/dist/templates/_executor/socket_linux_test.go +0 -46
- package/dist/templates/_executor/status_disabled_test.go +0 -33
- package/dist/templates/_executor/store.go +0 -91
- package/dist/templates/_executor/supervise.go +0 -109
- package/dist/templates/_executor/supervise_test.go +0 -130
- package/dist/templates/_executor/task_race_review_test.go +0 -47
- package/dist/templates/_executor/tasks.go +0 -320
- package/dist/templates/_executor/tasks_dsm71_test.go +0 -114
- package/dist/templates/_executor/tasks_review_test.go +0 -43
- package/dist/templates/_executor/tasks_test.go +0 -223
- package/dist/templates/_executor/testdata/evidence/cleanup.json +0 -24
- package/dist/templates/_executor/testdata/evidence/final-smoke.jsonl +0 -9
- package/dist/templates/_executor/testdata/evidence/kernel-acl.json +0 -6
- package/dist/templates/_executor/testdata/evidence/linux-tests.log +0 -123
- package/dist/templates/_executor/testdata/evidence/live.jsonl +0 -23
- package/dist/templates/_executor/testdata/evidence/storage.json +0 -90
- package/dist/templates/_executor/testdata/evidence/validation.json +0 -55
- package/dist/templates/_executor/testdata/live_probe.py +0 -98
- package/dist/templates/_executor/upgrade_watch_test.go +0 -244
- package/dist/templates/_executor/watch.go +0 -164
- package/dist/templates/_executor/watch_test.go +0 -291
- package/dist/templates/_executor/write_review_linux_test.go +0 -87
- package/dist/templates/_shared/AGENTS.md +0 -146
- package/dist/templates/_shared/CLAUDE.md +0 -1
- package/dist/templates/_shared/third-party-notices.mjs +0 -51
- package/dist/templates/binary/LICENSES/GO-LICENSE +0 -27
- package/dist/templates/binary/LICENSES/GO-PATENTS +0 -22
- package/dist/templates/binary/dsm-package.yaml +0 -46
- package/dist/templates/binary/example/main.go +0 -16
- package/dist/templates/binary/gitignore +0 -2
- package/dist/templates/binary/i18n/messages/de.json +0 -4
- package/dist/templates/binary/i18n/messages/en.json +0 -4
- package/dist/templates/binary/i18n/messages/es.json +0 -4
- package/dist/templates/binary/i18n/messages/fr.json +0 -4
- package/dist/templates/binary/i18n/messages/it.json +0 -4
- package/dist/templates/binary/i18n/messages/ja.json +0 -4
- package/dist/templates/binary/i18n/messages/ko.json +0 -4
- package/dist/templates/binary/i18n/messages/zh-CN.json +0 -4
- package/dist/templates/binary/i18n/messages/zh-TW.json +0 -4
- package/dist/templates/binary/ui/app.css +0 -4
- package/dist/templates/binary/ui/app.js +0 -32
- package/dist/templates/compose/compose.yaml +0 -8
- package/dist/templates/compose/synology-app.yaml +0 -16
- package/dist/templates/native-authorization/AuthorizationGate.vue +0 -91
- package/dist/templates/native-authorization/i18n/de.json +0 -37
- package/dist/templates/native-authorization/i18n/en.json +0 -37
- package/dist/templates/native-authorization/i18n/es.json +0 -37
- package/dist/templates/native-authorization/i18n/fr.json +0 -37
- package/dist/templates/native-authorization/i18n/index.ts +0 -15
- package/dist/templates/native-authorization/i18n/it.json +0 -37
- package/dist/templates/native-authorization/i18n/ja.json +0 -37
- package/dist/templates/native-authorization/i18n/ko.json +0 -37
- package/dist/templates/native-authorization/i18n/zh-CN.json +0 -37
- package/dist/templates/native-authorization/i18n/zh-TW.json +0 -37
- package/dist/templates/native-go/README.md +0 -459
- package/dist/templates/native-go/backend/THIRD_PARTY_NOTICES.txt +0 -61
- package/dist/templates/native-go/backend/cmd/app/main.go +0 -95
- package/dist/templates/native-go/backend/cmd/background-worker/main.go +0 -38
- package/dist/templates/native-go/backend/go.mod +0 -9
- package/dist/templates/native-go/backend/go.sum +0 -4
- package/dist/templates/native-go/backend/internal/api/cgi_framing_test.go +0 -32
- package/dist/templates/native-go/backend/internal/api/cookie_review_test.go +0 -28
- package/dist/templates/native-go/backend/internal/api/deadline_test.go +0 -114
- package/dist/templates/native-go/backend/internal/api/dsm-session.go +0 -54
- package/dist/templates/native-go/backend/internal/api/dsm-session_test.go +0 -51
- package/dist/templates/native-go/backend/internal/api/entry_test.go +0 -47
- package/dist/templates/native-go/backend/internal/api/errors.go +0 -47
- package/dist/templates/native-go/backend/internal/api/permissions.go +0 -161
- package/dist/templates/native-go/backend/internal/api/permissions.json +0 -5
- package/dist/templates/native-go/backend/internal/api/permissions_test.go +0 -113
- package/dist/templates/native-go/backend/internal/api/policy_fixture_test.go +0 -8
- package/dist/templates/native-go/backend/internal/api/registry.go +0 -142
- package/dist/templates/native-go/backend/internal/api/registry_test.go +0 -344
- package/dist/templates/native-go/backend/internal/api/resource_limits_test.go +0 -87
- package/dist/templates/native-go/backend/internal/api/sdk-permissions.json +0 -59
- package/dist/templates/native-go/backend/internal/api/sdk_policy_test.go +0 -31
- package/dist/templates/native-go/backend/internal/api/server.go +0 -305
- package/dist/templates/native-go/backend/internal/api/testdata/permissions-cases.json +0 -172
- package/dist/templates/native-go/backend/internal/app/background.go +0 -249
- package/dist/templates/native-go/backend/internal/app/background_none.go +0 -8
- package/dist/templates/native-go/backend/internal/app/background_owner.go +0 -38
- package/dist/templates/native-go/backend/internal/app/background_owner_test.go +0 -163
- package/dist/templates/native-go/backend/internal/app/background_schedule.go +0 -69
- package/dist/templates/native-go/backend/internal/app/background_schedule_test.go +0 -62
- package/dist/templates/native-go/backend/internal/app/background_test.go +0 -320
- package/dist/templates/native-go/backend/internal/app/delegate_config.go +0 -57
- package/dist/templates/native-go/backend/internal/app/delegate_config_test.go +0 -28
- package/dist/templates/native-go/backend/internal/app/delegate_none.go +0 -5
- package/dist/templates/native-go/backend/internal/app/identity.go +0 -20
- package/dist/templates/native-go/backend/internal/app/identity_test.go +0 -15
- package/dist/templates/native-go/backend/internal/app/migrations.go +0 -41
- package/dist/templates/native-go/backend/internal/app/migrations_test.go +0 -41
- package/dist/templates/native-go/backend/internal/app/portal.go +0 -30
- package/dist/templates/native-go/backend/internal/app/portal_test.go +0 -55
- package/dist/templates/native-go/backend/internal/app/root_none.go +0 -9
- package/dist/templates/native-go/backend/internal/app/routes.go +0 -137
- package/dist/templates/native-go/backend/internal/app/routes_test.go +0 -165
- package/dist/templates/native-go/backend/internal/app/session_files.go +0 -9
- package/dist/templates/native-go/backend/internal/app/session_files_test.go +0 -14
- package/dist/templates/native-go/backend/internal/app/shared_folder.go +0 -144
- package/dist/templates/native-go/backend/internal/app/shared_folder_test.go +0 -158
- package/dist/templates/native-go/backend/internal/background/access.go +0 -57
- package/dist/templates/native-go/backend/internal/background/lock_test.go +0 -131
- package/dist/templates/native-go/backend/internal/background/owner_test.go +0 -118
- package/dist/templates/native-go/backend/internal/background/runner.go +0 -185
- package/dist/templates/native-go/backend/internal/background/runner_test.go +0 -209
- package/dist/templates/native-go/backend/internal/background/schedule.go +0 -336
- package/dist/templates/native-go/backend/internal/background/schedule_test.go +0 -368
- package/dist/templates/native-go/backend/internal/background/store.go +0 -825
- package/dist/templates/native-go/backend/internal/background/store_test.go +0 -365
- package/dist/templates/native-go/backend/internal/datamigrate/migrate.go +0 -191
- package/dist/templates/native-go/backend/internal/datamigrate/migrate_test.go +0 -177
- package/dist/templates/native-go/backend/internal/dsm/admin.go +0 -76
- package/dist/templates/native-go/backend/internal/dsm/admin_linux.go +0 -110
- package/dist/templates/native-go/backend/internal/dsm/admin_linux_test.go +0 -105
- package/dist/templates/native-go/backend/internal/dsm/admin_other.go +0 -15
- package/dist/templates/native-go/backend/internal/dsm/admin_test.go +0 -67
- package/dist/templates/native-go/backend/internal/dsm/apppriv.go +0 -30
- package/dist/templates/native-go/backend/internal/dsm/auth.go +0 -94
- package/dist/templates/native-go/backend/internal/dsm/auth_test.go +0 -159
- package/dist/templates/native-go/backend/internal/dsm/bridge_file.go +0 -75
- package/dist/templates/native-go/backend/internal/dsm/bridge_file_test.go +0 -57
- package/dist/templates/native-go/backend/internal/dsm/entry.go +0 -177
- package/dist/templates/native-go/backend/internal/dsm/entry_test.go +0 -315
- package/dist/templates/native-go/backend/internal/dsm/native/admin-aarch64.elf +0 -0
- package/dist/templates/native-go/backend/internal/dsm/native/admin-armv7.elf +0 -0
- package/dist/templates/native-go/backend/internal/dsm/native/admin-x86_64.elf +0 -0
- package/dist/templates/native-go/backend/internal/dsm/native/admin_check.c +0 -28
- package/dist/templates/native-go/backend/internal/dsm/native/apppriv-aarch64.elf +0 -0
- package/dist/templates/native-go/backend/internal/dsm/native/apppriv-armv7.elf +0 -0
- package/dist/templates/native-go/backend/internal/dsm/native/apppriv-x86_64.elf +0 -0
- package/dist/templates/native-go/backend/internal/dsm/native/apppriv_check.c +0 -33
- package/dist/templates/native-go/backend/internal/dsm/native/build.sh +0 -18
- package/dist/templates/native-go/backend/internal/dsm/native/licenses/GLIBC-NOTICES.txt +0 -400
- package/dist/templates/native-go/backend/internal/dsm/native/licenses/LGPL-2.1.txt +0 -501
- package/dist/templates/native-go/backend/internal/dsm/native/licenses/SOURCE.txt +0 -5
- package/dist/templates/native-go/backend/internal/dsm/native/licenses/ZIG-MIT.txt +0 -21
- package/dist/templates/native-go/backend/internal/dsm/native/provenance.json +0 -18
- package/dist/templates/native-go/backend/internal/filestation/browse_test.go +0 -67
- package/dist/templates/native-go/backend/internal/filestation/check_permission.go +0 -71
- package/dist/templates/native-go/backend/internal/filestation/check_permission_test.go +0 -77
- package/dist/templates/native-go/backend/internal/filestation/client.go +0 -337
- package/dist/templates/native-go/backend/internal/filestation/client_test.go +0 -155
- package/dist/templates/native-go/backend/internal/filestation/doc.go +0 -4
- package/dist/templates/native-go/backend/internal/filestation/download_dsm71_test.go +0 -82
- package/dist/templates/native-go/backend/internal/filestation/http.go +0 -70
- package/dist/templates/native-go/backend/internal/filestation/http_test.go +0 -188
- package/dist/templates/native-go/backend/internal/filestation/operations_test.go +0 -206
- package/dist/templates/native-go/backend/internal/filestation/read_file_test.go +0 -89
- package/dist/templates/native-go/backend/internal/filestation/sdk_policy_test.go +0 -39
- package/dist/templates/native-go/backend/internal/filestation/service.go +0 -254
- package/dist/templates/native-go/backend/internal/filestation/service_test.go +0 -74
- package/dist/templates/native-go/backend/internal/filestation/upload_stream.go +0 -76
- package/dist/templates/native-go/backend/internal/filestation/upload_stream_test.go +0 -77
- package/dist/templates/native-go/backend/internal/filestation/write.go +0 -32
- package/dist/templates/native-go/backend/internal/filestation/write_test.go +0 -124
- package/dist/templates/native-go/backend/internal/identity/README.md +0 -59
- package/dist/templates/native-go/backend/internal/identity/dsm.go +0 -115
- package/dist/templates/native-go/backend/internal/identity/http.go +0 -291
- package/dist/templates/native-go/backend/internal/identity/identity_test.go +0 -530
- package/dist/templates/native-go/backend/internal/identity/service.go +0 -159
- package/dist/templates/native-go/backend/internal/identity/store.go +0 -109
- package/dist/templates/native-go/backend/internal/jsonlimits/limits.go +0 -48
- package/dist/templates/native-go/backend/internal/jsonlimits/limits_test.go +0 -52
- package/dist/templates/native-go/backend/internal/portal/portal.go +0 -138
- package/dist/templates/native-go/backend/internal/portal/portal_test.go +0 -89
- package/dist/templates/native-go/dsm-package.yaml +0 -71
- package/dist/templates/native-go/gitignore +0 -1
- package/dist/templates/native-go/i18n/glossary.json +0 -663
- package/dist/templates/native-go/i18n/messages/de.json +0 -29
- package/dist/templates/native-go/i18n/messages/en.json +0 -29
- package/dist/templates/native-go/i18n/messages/es.json +0 -29
- package/dist/templates/native-go/i18n/messages/fr.json +0 -29
- package/dist/templates/native-go/i18n/messages/it.json +0 -29
- package/dist/templates/native-go/i18n/messages/ja.json +0 -29
- package/dist/templates/native-go/i18n/messages/ko.json +0 -29
- package/dist/templates/native-go/i18n/messages/zh-CN.json +0 -29
- package/dist/templates/native-go/i18n/messages/zh-TW.json +0 -29
- package/dist/templates/native-go/ui/app.css +0 -45
- package/dist/templates/native-go/ui/app.js +0 -111
- package/dist/templates/native-go-delegate/DELEGATE.md +0 -263
- package/dist/templates/native-go-delegate/backend/cmd/background-worker/main.go +0 -48
- package/dist/templates/native-go-delegate/backend/internal/app/delegate.go +0 -25
- package/dist/templates/native-go-delegate/backend/internal/app/delegate_on.go +0 -5
- package/dist/templates/native-go-delegate/backend/internal/app/delegate_routes_test.go +0 -31
- package/dist/templates/native-go-delegate/backend/internal/background/delegate_review_test.go +0 -174
- package/dist/templates/native-go-delegate/backend/internal/background/delegated.go +0 -277
- package/dist/templates/native-go-delegate/backend/internal/background/delegated_moves.go +0 -270
- package/dist/templates/native-go-delegate/backend/internal/background/delegated_test.go +0 -34
- package/dist/templates/native-go-delegate/backend/internal/delegate/admission_recovery_test.go +0 -410
- package/dist/templates/native-go-delegate/backend/internal/delegate/busy_review_test.go +0 -15
- package/dist/templates/native-go-delegate/backend/internal/delegate/cancel_contract_test.go +0 -95
- package/dist/templates/native-go-delegate/backend/internal/delegate/client.go +0 -151
- package/dist/templates/native-go-delegate/backend/internal/delegate/client_test.go +0 -214
- package/dist/templates/native-go-delegate/backend/internal/delegate/destination.go +0 -110
- package/dist/templates/native-go-delegate/backend/internal/delegate/destination_state.go +0 -117
- package/dist/templates/native-go-delegate/backend/internal/delegate/destination_state_test.go +0 -60
- package/dist/templates/native-go-delegate/backend/internal/delegate/destination_test.go +0 -116
- package/dist/templates/native-go-delegate/backend/internal/delegate/example.go +0 -81
- package/dist/templates/native-go-delegate/backend/internal/delegate/example_test.go +0 -91
- package/dist/templates/native-go-delegate/backend/internal/delegate/executor_contract_test.go +0 -511
- package/dist/templates/native-go-delegate/backend/internal/delegate/files.go +0 -132
- package/dist/templates/native-go-delegate/backend/internal/delegate/long_running_routes.go +0 -92
- package/dist/templates/native-go-delegate/backend/internal/delegate/long_running_routes_test.go +0 -99
- package/dist/templates/native-go-delegate/backend/internal/delegate/move.go +0 -348
- package/dist/templates/native-go-delegate/backend/internal/delegate/move_test.go +0 -351
- package/dist/templates/native-go-delegate/backend/internal/delegate/operations_list.go +0 -65
- package/dist/templates/native-go-delegate/backend/internal/delegate/operations_list_test.go +0 -114
- package/dist/templates/native-go-delegate/backend/internal/delegate/retry.go +0 -106
- package/dist/templates/native-go-delegate/backend/internal/delegate/retry_test.go +0 -143
- package/dist/templates/native-go-delegate/backend/internal/delegate/service.go +0 -364
- package/dist/templates/native-go-delegate/backend/internal/delegate/service_test.go +0 -318
- package/dist/templates/native-go-delegate/backend/internal/delegate/staging.go +0 -121
- package/dist/templates/native-go-delegate/backend/internal/delegate/status_disabled_test.go +0 -51
- package/dist/templates/native-go-delegate/backend/internal/delegate/testdata/executor_contract.txt +0 -112
- package/dist/templates/native-go-delegate/backend/internal/delegate/transient_contract_test.go +0 -137
- package/dist/templates/native-go-delegate/backend/internal/delegate/wait_cancel_test.go +0 -101
- package/dist/templates/native-go-delegate/backend/internal/delegate/worker.go +0 -225
- package/dist/templates/native-go-delegate/backend/internal/filestation/files.go +0 -43
- package/dist/templates/native-go-delegate/backend/internal/filestation/files_test.go +0 -59
- package/dist/templates/native-go-delegate/frontend/src/CapabilityPanels.vue +0 -37
- package/dist/templates/native-go-delegate/frontend/src/delegate/BackgroundSavePanel.vue +0 -113
- package/dist/templates/native-go-delegate/frontend/src/delegate/DelegatePanel.vue +0 -70
- package/dist/templates/native-go-delegate/frontend/src/delegate/copy.ts +0 -8
- package/dist/templates/native-go-delegate/frontend/src/delegate/i18n/waiting.json +0 -11
- package/dist/templates/native-go-delegate/frontend/test/background-save.test.ts +0 -121
- package/dist/templates/native-go-delegate/frontend/test/delegate.test.ts +0 -145
- package/dist/templates/native-go-delegate/frontend/test/scope-settings.test.ts +0 -49
- package/dist/templates/native-go-delegate/test-frontend.sh +0 -12
- package/dist/templates/native-go-delegate/test.sh +0 -18
- package/dist/templates/native-go-jobs/BACKGROUND.md +0 -108
- package/dist/templates/native-go-jobs/backend/internal/app/background_on.go +0 -7
- package/dist/templates/native-go-jobs/backend/internal/app/background_routes_test.go +0 -90
- package/dist/templates/native-go-jobs/frontend/src/background/BackgroundPanel.vue +0 -170
- package/dist/templates/native-go-jobs/frontend/src/background/i18n/de.json +0 -75
- package/dist/templates/native-go-jobs/frontend/src/background/i18n/en.json +0 -75
- package/dist/templates/native-go-jobs/frontend/src/background/i18n/es.json +0 -75
- package/dist/templates/native-go-jobs/frontend/src/background/i18n/fr.json +0 -75
- package/dist/templates/native-go-jobs/frontend/src/background/i18n/it.json +0 -75
- package/dist/templates/native-go-jobs/frontend/src/background/i18n/ja.json +0 -75
- package/dist/templates/native-go-jobs/frontend/src/background/i18n/ko.json +0 -75
- package/dist/templates/native-go-jobs/frontend/src/background/i18n/zh-CN.json +0 -75
- package/dist/templates/native-go-jobs/frontend/src/background/i18n/zh-TW.json +0 -75
- package/dist/templates/native-go-jobs/frontend/src/background/i18n.ts +0 -19
- package/dist/templates/native-go-jobs/frontend/src/background/picker-provider.ts +0 -12
- package/dist/templates/native-go-jobs/frontend/src/background/request-key.ts +0 -5
- package/dist/templates/native-go-jobs/frontend/test/background.test.ts +0 -205
- package/dist/templates/native-go-root-ops/backend/internal/app/executor.go +0 -140
- package/dist/templates/native-go-root-ops/backend/internal/app/executor_test.go +0 -117
- package/dist/templates/native-go-root-ops/root/whoami.sh +0 -3
- package/dist/templates/native-go-vue/README.md +0 -47
- package/dist/templates/native-go-vue/frontend/DESIGN.md +0 -61
- package/dist/templates/native-go-vue/frontend/package-lock.json +0 -2530
- package/dist/templates/native-go-vue/frontend/package.json +0 -6
- package/dist/templates/native-go-vue/frontend/src/App.vue +0 -96
- package/dist/templates/native-go-vue/frontend/src/CapabilityPanels.vue +0 -6
- package/dist/templates/native-go-vue/frontend/src/context.ts +0 -78
- package/dist/templates/native-go-vue/frontend/src/delegate/ExecutorSettings.vue +0 -70
- package/dist/templates/native-go-vue/frontend/src/delegate/catalogs.ts +0 -11
- package/dist/templates/native-go-vue/frontend/src/delegate/copy.test.ts +0 -12
- package/dist/templates/native-go-vue/frontend/src/delegate/copy.ts +0 -4
- package/dist/templates/native-go-vue/frontend/src/delegate/executor-settings.test.ts +0 -23
- package/dist/templates/native-go-vue/frontend/src/delegate/executor-setup.ts +0 -24
- package/dist/templates/native-go-vue/frontend/src/delegate/facade.test.ts +0 -100
- package/dist/templates/native-go-vue/frontend/src/delegate/facade.ts +0 -85
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/de.json +0 -47
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/en.json +0 -47
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/es.json +0 -47
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/fr.json +0 -47
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/it.json +0 -47
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/ja.json +0 -47
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/ko.json +0 -47
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/de.json +0 -42
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/en.json +0 -42
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/es.json +0 -42
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/fr.json +0 -42
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/it.json +0 -42
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/ja.json +0 -42
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/ko.json +0 -42
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/zh-CN.json +0 -42
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/zh-TW.json +0 -42
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/zh-CN.json +0 -47
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/zh-TW.json +0 -47
- package/dist/templates/native-go-vue/frontend/src/delegate/long-running.ts +0 -57
- package/dist/templates/native-go-vue/frontend/src/delegate/save-copy.test.ts +0 -12
- package/dist/templates/native-go-vue/frontend/src/delegate/save-copy.ts +0 -24
- package/dist/templates/native-go-vue/frontend/src/delegate/scoped-picker.test.ts +0 -12
- package/dist/templates/native-go-vue/frontend/src/delegate/scoped-picker.ts +0 -21
- package/dist/templates/native-go-vue/frontend/src/files/FileBrowser.vue +0 -131
- package/dist/templates/native-go-vue/frontend/src/files/FilesPage.vue +0 -35
- package/dist/templates/native-go-vue/frontend/src/files/files.test.ts +0 -100
- package/dist/templates/native-go-vue/frontend/src/files/provider.test.ts +0 -48
- package/dist/templates/native-go-vue/frontend/src/files/transfers.test.ts +0 -27
- package/dist/templates/native-go-vue/frontend/src/files/transfers.ts +0 -25
- package/dist/templates/native-go-vue/frontend/src/i18n/de.json +0 -20
- package/dist/templates/native-go-vue/frontend/src/i18n/en.json +0 -20
- package/dist/templates/native-go-vue/frontend/src/i18n/es.json +0 -20
- package/dist/templates/native-go-vue/frontend/src/i18n/fr.json +0 -20
- package/dist/templates/native-go-vue/frontend/src/i18n/it.json +0 -20
- package/dist/templates/native-go-vue/frontend/src/i18n/ja.json +0 -20
- package/dist/templates/native-go-vue/frontend/src/i18n/ko.json +0 -20
- package/dist/templates/native-go-vue/frontend/src/i18n/zh-CN.json +0 -20
- package/dist/templates/native-go-vue/frontend/src/i18n/zh-TW.json +0 -20
- package/dist/templates/native-go-vue/frontend/src/i18n.ts +0 -13
- package/dist/templates/native-go-vue/frontend/src/identity/DESIGN.md +0 -46
- package/dist/templates/native-go-vue/frontend/src/identity/LoginPage.vue +0 -78
- package/dist/templates/native-go-vue/frontend/src/identity/i18n/de.json +0 -27
- package/dist/templates/native-go-vue/frontend/src/identity/i18n/en.json +0 -27
- package/dist/templates/native-go-vue/frontend/src/identity/i18n/es.json +0 -27
- package/dist/templates/native-go-vue/frontend/src/identity/i18n/fr.json +0 -27
- package/dist/templates/native-go-vue/frontend/src/identity/i18n/it.json +0 -27
- package/dist/templates/native-go-vue/frontend/src/identity/i18n/ja.json +0 -27
- package/dist/templates/native-go-vue/frontend/src/identity/i18n/ko.json +0 -27
- package/dist/templates/native-go-vue/frontend/src/identity/i18n/zh-CN.json +0 -27
- package/dist/templates/native-go-vue/frontend/src/identity/i18n/zh-TW.json +0 -27
- package/dist/templates/native-go-vue/frontend/src/identity/i18n.ts +0 -14
- package/dist/templates/native-go-vue/frontend/src/identity/login.test.ts +0 -32
- package/dist/templates/native-go-vue/frontend/src/identity/session.test.ts +0 -33
- package/dist/templates/native-go-vue/frontend/src/identity/session.ts +0 -74
- package/dist/templates/native-go-vue/frontend/src/main.ts +0 -32
- package/dist/templates/native-go-vue/frontend/src/nas/NasPicker.vue +0 -42
- package/dist/templates/native-go-vue/frontend/src/nas/contract.ts +0 -12
- package/dist/templates/native-go-vue/frontend/src/nas/destination.test.ts +0 -48
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/de.json +0 -41
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/en.json +0 -41
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/es.json +0 -41
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/fr.json +0 -41
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/it.json +0 -41
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/ja.json +0 -41
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/ko.json +0 -41
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/zh-CN.json +0 -41
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/zh-TW.json +0 -41
- package/dist/templates/native-go-vue/frontend/src/nas/i18n.ts +0 -2
- package/dist/templates/native-go-vue/frontend/src/nas/locale.ts +0 -24
- package/dist/templates/native-go-vue/frontend/src/nas/provider.ts +0 -50
- package/dist/templates/native-go-vue/frontend/src/nas/use-request.ts +0 -18
- package/dist/templates/native-go-vue/frontend/src/portal/PortalSettings.vue +0 -39
- package/dist/templates/native-go-vue/frontend/src/shell/AppShell.vue +0 -48
- package/dist/templates/native-go-vue/frontend/src/shell/i18n/de.json +0 -4
- package/dist/templates/native-go-vue/frontend/src/shell/i18n/en.json +0 -4
- package/dist/templates/native-go-vue/frontend/src/shell/i18n/es.json +0 -4
- package/dist/templates/native-go-vue/frontend/src/shell/i18n/fr.json +0 -4
- package/dist/templates/native-go-vue/frontend/src/shell/i18n/it.json +0 -4
- package/dist/templates/native-go-vue/frontend/src/shell/i18n/ja.json +0 -4
- package/dist/templates/native-go-vue/frontend/src/shell/i18n/ko.json +0 -4
- package/dist/templates/native-go-vue/frontend/src/shell/i18n/zh-CN.json +0 -4
- package/dist/templates/native-go-vue/frontend/src/shell/i18n/zh-TW.json +0 -4
- package/dist/templates/native-go-vue/frontend/src/shell/i18n.ts +0 -17
- package/dist/templates/native-go-vue/frontend/src/shell/pages.ts +0 -15
- package/dist/templates/native-go-vue/frontend/src/style.css +0 -27
- package/dist/templates/native-go-vue/frontend/test/apps.test.ts +0 -57
- package/dist/templates/native-go-vue/frontend/test/native-controls.test.ts +0 -27
- package/dist/templates/native-go-vue/frontend/test/portal-settings.test.ts +0 -71
- package/dist/templates/native-go-vue/frontend/test/shell-i18n.test.ts +0 -50
- package/dist/templates/native-go-vue/frontend/test/shell-ui.test.ts +0 -20
- package/dist/templates/native-go-vue/frontend/test/shell.test.ts +0 -30
- package/dist/templates/native-go-vue/frontend/tsconfig.json +0 -1
- package/dist/templates/native-go-vue/frontend/vite.config.ts +0 -10
- package/dist/templates/native-go-vue/gitignore +0 -2
- package/templates/_daemon/fixture_linux_test.go +0 -15
- package/templates/_daemon/fixture_other_test.go +0 -7
- package/templates/_daemon/go.mod +0 -5
- package/templates/_daemon/main.go +0 -611
- package/templates/_daemon/main_test.go +0 -315
- package/templates/_daemon/process_linux.go +0 -55
- package/templates/_daemon/process_linux_test.go +0 -161
- package/templates/_daemon/process_other.go +0 -14
- package/templates/_daemon/testdata/child.go +0 -44
- package/templates/_executor/README.md +0 -318
- package/templates/_executor/anchor.go +0 -156
- package/templates/_executor/anchor_test.go +0 -161
- package/templates/_executor/apppriv_review_test.go +0 -28
- package/templates/_executor/auth_presence_review_test.go +0 -38
- package/templates/_executor/cancel_contract_test.go +0 -236
- package/templates/_executor/cmd/lifecycle/main.go +0 -42
- package/templates/_executor/cookie_review_test.go +0 -27
- package/templates/_executor/copy.go +0 -64
- package/templates/_executor/copy_test.go +0 -88
- package/templates/_executor/digest_review_test.go +0 -120
- package/templates/_executor/directories.go +0 -40
- package/templates/_executor/dsm.go +0 -369
- package/templates/_executor/dsm_test.go +0 -290
- package/templates/_executor/executor.go +0 -735
- package/templates/_executor/executor_test.go +0 -314
- package/templates/_executor/go.mod +0 -5
- package/templates/_executor/identity.go +0 -74
- package/templates/_executor/identity_kernel_linux_test.go +0 -60
- package/templates/_executor/identity_linux.go +0 -82
- package/templates/_executor/identity_security_test.go +0 -43
- package/templates/_executor/internal/lifecycle/lifecycle.go +0 -95
- package/templates/_executor/internal/lifecycle/lifecycle_test.go +0 -232
- package/templates/_executor/internal/taskscript/boot.sh +0 -31
- package/templates/_executor/internal/taskscript/cmd/main.go +0 -19
- package/templates/_executor/internal/taskscript/control.sh +0 -31
- package/templates/_executor/internal/taskscript/tasks.go +0 -44
- package/templates/_executor/json_review_test.go +0 -40
- package/templates/_executor/lifecycle_test.go +0 -97
- package/templates/_executor/link_linux.go +0 -28
- package/templates/_executor/long_running_test.go +0 -530
- package/templates/_executor/main.go +0 -576
- package/templates/_executor/managed.go +0 -117
- package/templates/_executor/managed_test.go +0 -137
- package/templates/_executor/move_linux.go +0 -490
- package/templates/_executor/move_linux_test.go +0 -460
- package/templates/_executor/move_validation.go +0 -46
- package/templates/_executor/move_validation_test.go +0 -187
- package/templates/_executor/operations.go +0 -926
- package/templates/_executor/path_test.go +0 -35
- package/templates/_executor/pid.go +0 -37
- package/templates/_executor/pid_test.go +0 -113
- package/templates/_executor/platform_linux.go +0 -187
- package/templates/_executor/platform_linux_test.go +0 -191
- package/templates/_executor/platform_other.go +0 -76
- package/templates/_executor/process.go +0 -142
- package/templates/_executor/purge_log.go +0 -18
- package/templates/_executor/records.go +0 -242
- package/templates/_executor/scope_cancel_contract_test.go +0 -91
- package/templates/_executor/scope_client.go +0 -37
- package/templates/_executor/scope_contract.go +0 -12
- package/templates/_executor/selected_scope.go +0 -146
- package/templates/_executor/selected_scope_test.go +0 -186
- package/templates/_executor/socket_linux_test.go +0 -46
- package/templates/_executor/status_disabled_test.go +0 -33
- package/templates/_executor/store.go +0 -91
- package/templates/_executor/supervise.go +0 -109
- package/templates/_executor/supervise_test.go +0 -130
- package/templates/_executor/task_race_review_test.go +0 -47
- package/templates/_executor/tasks.go +0 -320
- package/templates/_executor/tasks_dsm71_test.go +0 -114
- package/templates/_executor/tasks_review_test.go +0 -43
- package/templates/_executor/tasks_test.go +0 -223
- package/templates/_executor/testdata/evidence/cleanup.json +0 -24
- package/templates/_executor/testdata/evidence/final-smoke.jsonl +0 -9
- package/templates/_executor/testdata/evidence/kernel-acl.json +0 -6
- package/templates/_executor/testdata/evidence/linux-tests.log +0 -123
- package/templates/_executor/testdata/evidence/live.jsonl +0 -23
- package/templates/_executor/testdata/evidence/storage.json +0 -90
- package/templates/_executor/testdata/evidence/validation.json +0 -55
- package/templates/_executor/testdata/live_probe.py +0 -98
- package/templates/_executor/upgrade_watch_test.go +0 -244
- package/templates/_executor/watch.go +0 -164
- package/templates/_executor/watch_test.go +0 -291
- package/templates/_executor/write_review_linux_test.go +0 -87
- package/templates/_gateway/auth.go +0 -101
- package/templates/_gateway/auth_test.go +0 -216
- package/templates/_gateway/cgi.go +0 -133
- package/templates/_gateway/cgi_test.go +0 -156
- package/templates/_gateway/csrf.go +0 -73
- package/templates/_gateway/csrf_test.go +0 -155
- package/templates/_gateway/directory.go +0 -108
- package/templates/_gateway/directory_test.go +0 -202
- package/templates/_gateway/gateway.go +0 -412
- package/templates/_gateway/gateway_test.go +0 -676
- package/templates/_gateway/go.mod +0 -5
- package/templates/_gateway/groups.go +0 -66
- package/templates/_gateway/main.go +0 -45
- package/templates/_shared/AGENTS.md +0 -146
- package/templates/_shared/CLAUDE.md +0 -1
- package/templates/_shared/GO-LICENSE +0 -27
- package/templates/_shared/GO-PATENTS +0 -22
- package/templates/_shared/LICENSES/TEMPLATE.txt +0 -21
- package/templates/_shared/third-party-notices.mjs +0 -51
- package/templates/binary/LICENSES/GO-LICENSE +0 -27
- package/templates/binary/LICENSES/GO-PATENTS +0 -22
- package/templates/binary/dsm-package.yaml +0 -46
- package/templates/binary/example/main.go +0 -16
- package/templates/binary/gitignore +0 -2
- package/templates/binary/i18n/messages/de.json +0 -4
- package/templates/binary/i18n/messages/en.json +0 -4
- package/templates/binary/i18n/messages/es.json +0 -4
- package/templates/binary/i18n/messages/fr.json +0 -4
- package/templates/binary/i18n/messages/it.json +0 -4
- package/templates/binary/i18n/messages/ja.json +0 -4
- package/templates/binary/i18n/messages/ko.json +0 -4
- package/templates/binary/i18n/messages/zh-CN.json +0 -4
- package/templates/binary/i18n/messages/zh-TW.json +0 -4
- package/templates/binary/ui/app.css +0 -4
- package/templates/binary/ui/app.js +0 -32
- package/templates/compose/compose.yaml +0 -8
- package/templates/compose/synology-app.yaml +0 -16
- package/templates/native-authorization/AuthorizationGate.vue +0 -91
- package/templates/native-authorization/i18n/de.json +0 -37
- package/templates/native-authorization/i18n/en.json +0 -37
- package/templates/native-authorization/i18n/es.json +0 -37
- package/templates/native-authorization/i18n/fr.json +0 -37
- package/templates/native-authorization/i18n/index.ts +0 -15
- package/templates/native-authorization/i18n/it.json +0 -37
- package/templates/native-authorization/i18n/ja.json +0 -37
- package/templates/native-authorization/i18n/ko.json +0 -37
- package/templates/native-authorization/i18n/zh-CN.json +0 -37
- package/templates/native-authorization/i18n/zh-TW.json +0 -37
- package/templates/native-go/README.md +0 -459
- package/templates/native-go/backend/THIRD_PARTY_NOTICES.txt +0 -61
- package/templates/native-go/backend/cmd/app/main.go +0 -95
- package/templates/native-go/backend/cmd/background-worker/main.go +0 -38
- package/templates/native-go/backend/go.mod +0 -9
- package/templates/native-go/backend/go.sum +0 -4
- package/templates/native-go/backend/internal/api/cgi_framing_test.go +0 -32
- package/templates/native-go/backend/internal/api/cookie_review_test.go +0 -28
- package/templates/native-go/backend/internal/api/deadline_test.go +0 -114
- package/templates/native-go/backend/internal/api/dsm-session.go +0 -54
- package/templates/native-go/backend/internal/api/dsm-session_test.go +0 -51
- package/templates/native-go/backend/internal/api/entry_test.go +0 -47
- package/templates/native-go/backend/internal/api/errors.go +0 -47
- package/templates/native-go/backend/internal/api/permissions.go +0 -161
- package/templates/native-go/backend/internal/api/permissions.json +0 -5
- package/templates/native-go/backend/internal/api/permissions_test.go +0 -113
- package/templates/native-go/backend/internal/api/policy_fixture_test.go +0 -8
- package/templates/native-go/backend/internal/api/registry.go +0 -142
- package/templates/native-go/backend/internal/api/registry_test.go +0 -344
- package/templates/native-go/backend/internal/api/resource_limits_test.go +0 -87
- package/templates/native-go/backend/internal/api/sdk-permissions.json +0 -59
- package/templates/native-go/backend/internal/api/sdk_policy_test.go +0 -31
- package/templates/native-go/backend/internal/api/server.go +0 -305
- package/templates/native-go/backend/internal/api/testdata/permissions-cases.json +0 -172
- package/templates/native-go/backend/internal/app/background.go +0 -249
- package/templates/native-go/backend/internal/app/background_none.go +0 -8
- package/templates/native-go/backend/internal/app/background_owner.go +0 -38
- package/templates/native-go/backend/internal/app/background_owner_test.go +0 -163
- package/templates/native-go/backend/internal/app/background_schedule.go +0 -69
- package/templates/native-go/backend/internal/app/background_schedule_test.go +0 -62
- package/templates/native-go/backend/internal/app/background_test.go +0 -320
- package/templates/native-go/backend/internal/app/delegate_config.go +0 -57
- package/templates/native-go/backend/internal/app/delegate_config_test.go +0 -28
- package/templates/native-go/backend/internal/app/delegate_none.go +0 -5
- package/templates/native-go/backend/internal/app/identity.go +0 -20
- package/templates/native-go/backend/internal/app/identity_test.go +0 -15
- package/templates/native-go/backend/internal/app/migrations.go +0 -41
- package/templates/native-go/backend/internal/app/migrations_test.go +0 -41
- package/templates/native-go/backend/internal/app/portal.go +0 -30
- package/templates/native-go/backend/internal/app/portal_test.go +0 -55
- package/templates/native-go/backend/internal/app/root_none.go +0 -9
- package/templates/native-go/backend/internal/app/routes.go +0 -137
- package/templates/native-go/backend/internal/app/routes_test.go +0 -165
- package/templates/native-go/backend/internal/app/session_files.go +0 -9
- package/templates/native-go/backend/internal/app/session_files_test.go +0 -14
- package/templates/native-go/backend/internal/app/shared_folder.go +0 -144
- package/templates/native-go/backend/internal/app/shared_folder_test.go +0 -158
- package/templates/native-go/backend/internal/background/access.go +0 -57
- package/templates/native-go/backend/internal/background/lock_test.go +0 -131
- package/templates/native-go/backend/internal/background/owner_test.go +0 -118
- package/templates/native-go/backend/internal/background/runner.go +0 -185
- package/templates/native-go/backend/internal/background/runner_test.go +0 -209
- package/templates/native-go/backend/internal/background/schedule.go +0 -336
- package/templates/native-go/backend/internal/background/schedule_test.go +0 -368
- package/templates/native-go/backend/internal/background/store.go +0 -825
- package/templates/native-go/backend/internal/background/store_test.go +0 -365
- package/templates/native-go/backend/internal/datamigrate/migrate.go +0 -191
- package/templates/native-go/backend/internal/datamigrate/migrate_test.go +0 -177
- package/templates/native-go/backend/internal/dsm/admin.go +0 -76
- package/templates/native-go/backend/internal/dsm/admin_linux.go +0 -110
- package/templates/native-go/backend/internal/dsm/admin_linux_test.go +0 -105
- package/templates/native-go/backend/internal/dsm/admin_other.go +0 -15
- package/templates/native-go/backend/internal/dsm/admin_test.go +0 -67
- package/templates/native-go/backend/internal/dsm/apppriv.go +0 -30
- package/templates/native-go/backend/internal/dsm/auth.go +0 -94
- package/templates/native-go/backend/internal/dsm/auth_test.go +0 -159
- package/templates/native-go/backend/internal/dsm/bridge_file.go +0 -75
- package/templates/native-go/backend/internal/dsm/bridge_file_test.go +0 -57
- package/templates/native-go/backend/internal/dsm/entry.go +0 -177
- package/templates/native-go/backend/internal/dsm/entry_test.go +0 -315
- package/templates/native-go/backend/internal/dsm/native/admin-aarch64.elf +0 -0
- package/templates/native-go/backend/internal/dsm/native/admin-armv7.elf +0 -0
- package/templates/native-go/backend/internal/dsm/native/admin-x86_64.elf +0 -0
- package/templates/native-go/backend/internal/dsm/native/admin_check.c +0 -28
- package/templates/native-go/backend/internal/dsm/native/apppriv-aarch64.elf +0 -0
- package/templates/native-go/backend/internal/dsm/native/apppriv-armv7.elf +0 -0
- package/templates/native-go/backend/internal/dsm/native/apppriv-x86_64.elf +0 -0
- package/templates/native-go/backend/internal/dsm/native/apppriv_check.c +0 -33
- package/templates/native-go/backend/internal/dsm/native/build.sh +0 -18
- package/templates/native-go/backend/internal/dsm/native/licenses/GLIBC-NOTICES.txt +0 -400
- package/templates/native-go/backend/internal/dsm/native/licenses/LGPL-2.1.txt +0 -501
- package/templates/native-go/backend/internal/dsm/native/licenses/SOURCE.txt +0 -5
- package/templates/native-go/backend/internal/dsm/native/licenses/ZIG-MIT.txt +0 -21
- package/templates/native-go/backend/internal/dsm/native/provenance.json +0 -18
- package/templates/native-go/backend/internal/filestation/browse_test.go +0 -67
- package/templates/native-go/backend/internal/filestation/check_permission.go +0 -71
- package/templates/native-go/backend/internal/filestation/check_permission_test.go +0 -77
- package/templates/native-go/backend/internal/filestation/client.go +0 -337
- package/templates/native-go/backend/internal/filestation/client_test.go +0 -155
- package/templates/native-go/backend/internal/filestation/doc.go +0 -4
- package/templates/native-go/backend/internal/filestation/download_dsm71_test.go +0 -82
- package/templates/native-go/backend/internal/filestation/http.go +0 -70
- package/templates/native-go/backend/internal/filestation/http_test.go +0 -188
- package/templates/native-go/backend/internal/filestation/operations_test.go +0 -206
- package/templates/native-go/backend/internal/filestation/read_file_test.go +0 -89
- package/templates/native-go/backend/internal/filestation/sdk_policy_test.go +0 -39
- package/templates/native-go/backend/internal/filestation/service.go +0 -254
- package/templates/native-go/backend/internal/filestation/service_test.go +0 -74
- package/templates/native-go/backend/internal/filestation/upload_stream.go +0 -76
- package/templates/native-go/backend/internal/filestation/upload_stream_test.go +0 -77
- package/templates/native-go/backend/internal/filestation/write.go +0 -32
- package/templates/native-go/backend/internal/filestation/write_test.go +0 -124
- package/templates/native-go/backend/internal/identity/README.md +0 -59
- package/templates/native-go/backend/internal/identity/dsm.go +0 -115
- package/templates/native-go/backend/internal/identity/http.go +0 -291
- package/templates/native-go/backend/internal/identity/identity_test.go +0 -530
- package/templates/native-go/backend/internal/identity/service.go +0 -159
- package/templates/native-go/backend/internal/identity/store.go +0 -109
- package/templates/native-go/backend/internal/jsonlimits/limits.go +0 -48
- package/templates/native-go/backend/internal/jsonlimits/limits_test.go +0 -52
- package/templates/native-go/backend/internal/portal/portal.go +0 -138
- package/templates/native-go/backend/internal/portal/portal_test.go +0 -89
- package/templates/native-go/dsm-package.yaml +0 -71
- package/templates/native-go/gitignore +0 -1
- package/templates/native-go/i18n/glossary.json +0 -663
- package/templates/native-go/i18n/messages/de.json +0 -29
- package/templates/native-go/i18n/messages/en.json +0 -29
- package/templates/native-go/i18n/messages/es.json +0 -29
- package/templates/native-go/i18n/messages/fr.json +0 -29
- package/templates/native-go/i18n/messages/it.json +0 -29
- package/templates/native-go/i18n/messages/ja.json +0 -29
- package/templates/native-go/i18n/messages/ko.json +0 -29
- package/templates/native-go/i18n/messages/zh-CN.json +0 -29
- package/templates/native-go/i18n/messages/zh-TW.json +0 -29
- package/templates/native-go/ui/app.css +0 -45
- package/templates/native-go/ui/app.js +0 -111
- package/templates/native-go-delegate/DELEGATE.md +0 -263
- package/templates/native-go-delegate/backend/cmd/background-worker/main.go +0 -48
- package/templates/native-go-delegate/backend/internal/app/delegate.go +0 -25
- package/templates/native-go-delegate/backend/internal/app/delegate_on.go +0 -5
- package/templates/native-go-delegate/backend/internal/app/delegate_routes_test.go +0 -31
- package/templates/native-go-delegate/backend/internal/background/delegate_review_test.go +0 -174
- package/templates/native-go-delegate/backend/internal/background/delegated.go +0 -277
- package/templates/native-go-delegate/backend/internal/background/delegated_moves.go +0 -270
- package/templates/native-go-delegate/backend/internal/background/delegated_test.go +0 -34
- package/templates/native-go-delegate/backend/internal/delegate/admission_recovery_test.go +0 -410
- package/templates/native-go-delegate/backend/internal/delegate/busy_review_test.go +0 -15
- package/templates/native-go-delegate/backend/internal/delegate/cancel_contract_test.go +0 -95
- package/templates/native-go-delegate/backend/internal/delegate/client.go +0 -151
- package/templates/native-go-delegate/backend/internal/delegate/client_test.go +0 -214
- package/templates/native-go-delegate/backend/internal/delegate/destination.go +0 -110
- package/templates/native-go-delegate/backend/internal/delegate/destination_state.go +0 -117
- package/templates/native-go-delegate/backend/internal/delegate/destination_state_test.go +0 -60
- package/templates/native-go-delegate/backend/internal/delegate/destination_test.go +0 -116
- package/templates/native-go-delegate/backend/internal/delegate/example.go +0 -81
- package/templates/native-go-delegate/backend/internal/delegate/example_test.go +0 -91
- package/templates/native-go-delegate/backend/internal/delegate/executor_contract_test.go +0 -511
- package/templates/native-go-delegate/backend/internal/delegate/files.go +0 -132
- package/templates/native-go-delegate/backend/internal/delegate/long_running_routes.go +0 -92
- package/templates/native-go-delegate/backend/internal/delegate/long_running_routes_test.go +0 -99
- package/templates/native-go-delegate/backend/internal/delegate/move.go +0 -348
- package/templates/native-go-delegate/backend/internal/delegate/move_test.go +0 -351
- package/templates/native-go-delegate/backend/internal/delegate/operations_list.go +0 -65
- package/templates/native-go-delegate/backend/internal/delegate/operations_list_test.go +0 -114
- package/templates/native-go-delegate/backend/internal/delegate/retry.go +0 -106
- package/templates/native-go-delegate/backend/internal/delegate/retry_test.go +0 -143
- package/templates/native-go-delegate/backend/internal/delegate/service.go +0 -364
- package/templates/native-go-delegate/backend/internal/delegate/service_test.go +0 -318
- package/templates/native-go-delegate/backend/internal/delegate/staging.go +0 -121
- package/templates/native-go-delegate/backend/internal/delegate/status_disabled_test.go +0 -51
- package/templates/native-go-delegate/backend/internal/delegate/testdata/executor_contract.txt +0 -112
- package/templates/native-go-delegate/backend/internal/delegate/transient_contract_test.go +0 -137
- package/templates/native-go-delegate/backend/internal/delegate/wait_cancel_test.go +0 -101
- package/templates/native-go-delegate/backend/internal/delegate/worker.go +0 -225
- package/templates/native-go-delegate/backend/internal/filestation/files.go +0 -43
- package/templates/native-go-delegate/backend/internal/filestation/files_test.go +0 -59
- package/templates/native-go-delegate/frontend/src/CapabilityPanels.vue +0 -37
- package/templates/native-go-delegate/frontend/src/delegate/BackgroundSavePanel.vue +0 -113
- package/templates/native-go-delegate/frontend/src/delegate/DelegatePanel.vue +0 -70
- package/templates/native-go-delegate/frontend/src/delegate/copy.ts +0 -8
- package/templates/native-go-delegate/frontend/src/delegate/i18n/waiting.json +0 -11
- package/templates/native-go-delegate/frontend/test/background-save.test.ts +0 -121
- package/templates/native-go-delegate/frontend/test/delegate.test.ts +0 -145
- package/templates/native-go-delegate/frontend/test/scope-settings.test.ts +0 -49
- package/templates/native-go-delegate/test-frontend.sh +0 -12
- package/templates/native-go-delegate/test.sh +0 -18
- package/templates/native-go-jobs/BACKGROUND.md +0 -108
- package/templates/native-go-jobs/backend/internal/app/background_on.go +0 -7
- package/templates/native-go-jobs/backend/internal/app/background_routes_test.go +0 -90
- package/templates/native-go-jobs/frontend/src/background/BackgroundPanel.vue +0 -170
- package/templates/native-go-jobs/frontend/src/background/i18n/de.json +0 -75
- package/templates/native-go-jobs/frontend/src/background/i18n/en.json +0 -75
- package/templates/native-go-jobs/frontend/src/background/i18n/es.json +0 -75
- package/templates/native-go-jobs/frontend/src/background/i18n/fr.json +0 -75
- package/templates/native-go-jobs/frontend/src/background/i18n/it.json +0 -75
- package/templates/native-go-jobs/frontend/src/background/i18n/ja.json +0 -75
- package/templates/native-go-jobs/frontend/src/background/i18n/ko.json +0 -75
- package/templates/native-go-jobs/frontend/src/background/i18n/zh-CN.json +0 -75
- package/templates/native-go-jobs/frontend/src/background/i18n/zh-TW.json +0 -75
- package/templates/native-go-jobs/frontend/src/background/i18n.ts +0 -19
- package/templates/native-go-jobs/frontend/src/background/picker-provider.ts +0 -12
- package/templates/native-go-jobs/frontend/src/background/request-key.ts +0 -5
- package/templates/native-go-jobs/frontend/test/background.test.ts +0 -205
- package/templates/native-go-root-ops/backend/internal/app/executor.go +0 -140
- package/templates/native-go-root-ops/backend/internal/app/executor_test.go +0 -117
- package/templates/native-go-root-ops/root/whoami.sh +0 -3
- package/templates/native-go-vue/README.md +0 -47
- package/templates/native-go-vue/frontend/DESIGN.md +0 -61
- package/templates/native-go-vue/frontend/package-lock.json +0 -2530
- package/templates/native-go-vue/frontend/package.json +0 -6
- package/templates/native-go-vue/frontend/src/App.vue +0 -96
- package/templates/native-go-vue/frontend/src/CapabilityPanels.vue +0 -6
- package/templates/native-go-vue/frontend/src/context.ts +0 -78
- package/templates/native-go-vue/frontend/src/delegate/ExecutorSettings.vue +0 -70
- package/templates/native-go-vue/frontend/src/delegate/catalogs.ts +0 -11
- package/templates/native-go-vue/frontend/src/delegate/copy.test.ts +0 -12
- package/templates/native-go-vue/frontend/src/delegate/copy.ts +0 -4
- package/templates/native-go-vue/frontend/src/delegate/executor-settings.test.ts +0 -23
- package/templates/native-go-vue/frontend/src/delegate/executor-setup.ts +0 -24
- package/templates/native-go-vue/frontend/src/delegate/facade.test.ts +0 -100
- package/templates/native-go-vue/frontend/src/delegate/facade.ts +0 -85
- package/templates/native-go-vue/frontend/src/delegate/i18n/de.json +0 -47
- package/templates/native-go-vue/frontend/src/delegate/i18n/en.json +0 -47
- package/templates/native-go-vue/frontend/src/delegate/i18n/es.json +0 -47
- package/templates/native-go-vue/frontend/src/delegate/i18n/fr.json +0 -47
- package/templates/native-go-vue/frontend/src/delegate/i18n/it.json +0 -47
- package/templates/native-go-vue/frontend/src/delegate/i18n/ja.json +0 -47
- package/templates/native-go-vue/frontend/src/delegate/i18n/ko.json +0 -47
- package/templates/native-go-vue/frontend/src/delegate/i18n/save/de.json +0 -42
- package/templates/native-go-vue/frontend/src/delegate/i18n/save/en.json +0 -42
- package/templates/native-go-vue/frontend/src/delegate/i18n/save/es.json +0 -42
- package/templates/native-go-vue/frontend/src/delegate/i18n/save/fr.json +0 -42
- package/templates/native-go-vue/frontend/src/delegate/i18n/save/it.json +0 -42
- package/templates/native-go-vue/frontend/src/delegate/i18n/save/ja.json +0 -42
- package/templates/native-go-vue/frontend/src/delegate/i18n/save/ko.json +0 -42
- package/templates/native-go-vue/frontend/src/delegate/i18n/save/zh-CN.json +0 -42
- package/templates/native-go-vue/frontend/src/delegate/i18n/save/zh-TW.json +0 -42
- package/templates/native-go-vue/frontend/src/delegate/i18n/zh-CN.json +0 -47
- package/templates/native-go-vue/frontend/src/delegate/i18n/zh-TW.json +0 -47
- package/templates/native-go-vue/frontend/src/delegate/long-running.ts +0 -57
- package/templates/native-go-vue/frontend/src/delegate/save-copy.test.ts +0 -12
- package/templates/native-go-vue/frontend/src/delegate/save-copy.ts +0 -24
- package/templates/native-go-vue/frontend/src/delegate/scoped-picker.test.ts +0 -12
- package/templates/native-go-vue/frontend/src/delegate/scoped-picker.ts +0 -21
- package/templates/native-go-vue/frontend/src/files/FileBrowser.vue +0 -131
- package/templates/native-go-vue/frontend/src/files/FilesPage.vue +0 -35
- package/templates/native-go-vue/frontend/src/files/files.test.ts +0 -100
- package/templates/native-go-vue/frontend/src/files/provider.test.ts +0 -48
- package/templates/native-go-vue/frontend/src/files/transfers.test.ts +0 -27
- package/templates/native-go-vue/frontend/src/files/transfers.ts +0 -25
- package/templates/native-go-vue/frontend/src/i18n/de.json +0 -20
- package/templates/native-go-vue/frontend/src/i18n/en.json +0 -20
- package/templates/native-go-vue/frontend/src/i18n/es.json +0 -20
- package/templates/native-go-vue/frontend/src/i18n/fr.json +0 -20
- package/templates/native-go-vue/frontend/src/i18n/it.json +0 -20
- package/templates/native-go-vue/frontend/src/i18n/ja.json +0 -20
- package/templates/native-go-vue/frontend/src/i18n/ko.json +0 -20
- package/templates/native-go-vue/frontend/src/i18n/zh-CN.json +0 -20
- package/templates/native-go-vue/frontend/src/i18n/zh-TW.json +0 -20
- package/templates/native-go-vue/frontend/src/i18n.ts +0 -13
- package/templates/native-go-vue/frontend/src/identity/DESIGN.md +0 -46
- package/templates/native-go-vue/frontend/src/identity/LoginPage.vue +0 -78
- package/templates/native-go-vue/frontend/src/identity/i18n/de.json +0 -27
- package/templates/native-go-vue/frontend/src/identity/i18n/en.json +0 -27
- package/templates/native-go-vue/frontend/src/identity/i18n/es.json +0 -27
- package/templates/native-go-vue/frontend/src/identity/i18n/fr.json +0 -27
- package/templates/native-go-vue/frontend/src/identity/i18n/it.json +0 -27
- package/templates/native-go-vue/frontend/src/identity/i18n/ja.json +0 -27
- package/templates/native-go-vue/frontend/src/identity/i18n/ko.json +0 -27
- package/templates/native-go-vue/frontend/src/identity/i18n/zh-CN.json +0 -27
- package/templates/native-go-vue/frontend/src/identity/i18n/zh-TW.json +0 -27
- package/templates/native-go-vue/frontend/src/identity/i18n.ts +0 -14
- package/templates/native-go-vue/frontend/src/identity/login.test.ts +0 -32
- package/templates/native-go-vue/frontend/src/identity/session.test.ts +0 -33
- package/templates/native-go-vue/frontend/src/identity/session.ts +0 -74
- package/templates/native-go-vue/frontend/src/main.ts +0 -32
- package/templates/native-go-vue/frontend/src/nas/NasPicker.vue +0 -42
- package/templates/native-go-vue/frontend/src/nas/contract.ts +0 -12
- package/templates/native-go-vue/frontend/src/nas/destination.test.ts +0 -48
- package/templates/native-go-vue/frontend/src/nas/i18n/files/de.json +0 -41
- package/templates/native-go-vue/frontend/src/nas/i18n/files/en.json +0 -41
- package/templates/native-go-vue/frontend/src/nas/i18n/files/es.json +0 -41
- package/templates/native-go-vue/frontend/src/nas/i18n/files/fr.json +0 -41
- package/templates/native-go-vue/frontend/src/nas/i18n/files/it.json +0 -41
- package/templates/native-go-vue/frontend/src/nas/i18n/files/ja.json +0 -41
- package/templates/native-go-vue/frontend/src/nas/i18n/files/ko.json +0 -41
- package/templates/native-go-vue/frontend/src/nas/i18n/files/zh-CN.json +0 -41
- package/templates/native-go-vue/frontend/src/nas/i18n/files/zh-TW.json +0 -41
- package/templates/native-go-vue/frontend/src/nas/i18n.ts +0 -2
- package/templates/native-go-vue/frontend/src/nas/locale.ts +0 -24
- package/templates/native-go-vue/frontend/src/nas/provider.ts +0 -50
- package/templates/native-go-vue/frontend/src/nas/use-request.ts +0 -18
- package/templates/native-go-vue/frontend/src/portal/PortalSettings.vue +0 -39
- package/templates/native-go-vue/frontend/src/shell/AppShell.vue +0 -48
- package/templates/native-go-vue/frontend/src/shell/i18n/de.json +0 -4
- package/templates/native-go-vue/frontend/src/shell/i18n/en.json +0 -4
- package/templates/native-go-vue/frontend/src/shell/i18n/es.json +0 -4
- package/templates/native-go-vue/frontend/src/shell/i18n/fr.json +0 -4
- package/templates/native-go-vue/frontend/src/shell/i18n/it.json +0 -4
- package/templates/native-go-vue/frontend/src/shell/i18n/ja.json +0 -4
- package/templates/native-go-vue/frontend/src/shell/i18n/ko.json +0 -4
- package/templates/native-go-vue/frontend/src/shell/i18n/zh-CN.json +0 -4
- package/templates/native-go-vue/frontend/src/shell/i18n/zh-TW.json +0 -4
- package/templates/native-go-vue/frontend/src/shell/i18n.ts +0 -17
- package/templates/native-go-vue/frontend/src/shell/pages.ts +0 -15
- package/templates/native-go-vue/frontend/src/style.css +0 -27
- package/templates/native-go-vue/frontend/test/apps.test.ts +0 -57
- package/templates/native-go-vue/frontend/test/native-controls.test.ts +0 -27
- package/templates/native-go-vue/frontend/test/portal-settings.test.ts +0 -71
- package/templates/native-go-vue/frontend/test/shell-i18n.test.ts +0 -50
- package/templates/native-go-vue/frontend/test/shell-ui.test.ts +0 -20
- package/templates/native-go-vue/frontend/test/shell.test.ts +0 -30
- package/templates/native-go-vue/frontend/tsconfig.json +0 -1
- package/templates/native-go-vue/frontend/vite.config.ts +0 -10
- package/templates/native-go-vue/gitignore +0 -2
- /package/{dist/templates/_daemon → assets/go/daemon}/fixture_linux_test.go +0 -0
- /package/{dist/templates/_daemon → assets/go/daemon}/fixture_other_test.go +0 -0
- /package/{dist/templates/_daemon → assets/go/daemon}/go.mod +0 -0
- /package/{dist/templates/_daemon → assets/go/daemon}/main.go +0 -0
- /package/{dist/templates/_daemon → assets/go/daemon}/main_test.go +0 -0
- /package/{dist/templates/_daemon → assets/go/daemon}/process_linux.go +0 -0
- /package/{dist/templates/_daemon → assets/go/daemon}/process_linux_test.go +0 -0
- /package/{dist/templates/_daemon → assets/go/daemon}/process_other.go +0 -0
- /package/{dist/templates/_daemon → assets/go/daemon}/testdata/child.go +0 -0
- /package/{dist/templates/_gateway → assets/go/gateway}/auth.go +0 -0
- /package/{dist/templates/_gateway → assets/go/gateway}/auth_test.go +0 -0
- /package/{dist/templates/_gateway → assets/go/gateway}/cgi.go +0 -0
- /package/{dist/templates/_gateway → assets/go/gateway}/cgi_test.go +0 -0
- /package/{dist/templates/_gateway → assets/go/gateway}/csrf.go +0 -0
- /package/{dist/templates/_gateway → assets/go/gateway}/csrf_test.go +0 -0
- /package/{dist/templates/_gateway → assets/go/gateway}/directory.go +0 -0
- /package/{dist/templates/_gateway → assets/go/gateway}/directory_test.go +0 -0
- /package/{dist/templates/_gateway → assets/go/gateway}/gateway.go +0 -0
- /package/{dist/templates/_gateway → assets/go/gateway}/gateway_test.go +0 -0
- /package/{dist/templates/_gateway → assets/go/gateway}/go.mod +0 -0
- /package/{dist/templates/_gateway → assets/go/gateway}/groups.go +0 -0
- /package/{dist/templates/_gateway → assets/go/gateway}/main.go +0 -0
- /package/{dist/templates/_shared → assets/licenses}/GO-LICENSE +0 -0
- /package/{dist/templates/_shared → assets/licenses}/GO-PATENTS +0 -0
- /package/{dist/templates/_shared/LICENSES → assets/licenses}/TEMPLATE.txt +0 -0
|
@@ -1,459 +0,0 @@
|
|
|
1
|
-
# __DISPLAY_NAME__
|
|
2
|
-
|
|
3
|
-
A native DSM package (`__PACKAGE__`): a Go backend that DSM runs as a CGI,
|
|
4
|
-
and a UI that opens in its own DSM window. It installs as an **unsigned** SPK,
|
|
5
|
-
runs as its own DSM package account, needs no containers, and has no root by default.
|
|
6
|
-
|
|
7
|
-
```text
|
|
8
|
-
DSM main menu → DSM window (ui/app.js)
|
|
9
|
-
│ ctx.call("greeting.get") same-origin POST + DSM session
|
|
10
|
-
▼
|
|
11
|
-
/webman/3rdparty/__PACKAGE__/cgi/api.cgi (backend/, runs as package user)
|
|
12
|
-
1. transport guards: POST, JSON, same origin, ≤ 1 MiB, bounded JSON complexity
|
|
13
|
-
2. one DSM authentication (unless the route is Public)
|
|
14
|
-
3. route policy: User or Admin → refusal before any handler
|
|
15
|
-
4. your handler (backend/internal/app)
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## Quick start
|
|
19
|
-
|
|
20
|
-
Needs Node.js with `synopkgland` installed, and Go 1.25+.
|
|
21
|
-
|
|
22
|
-
```bash
|
|
23
|
-
(cd backend && go test ./...) # auth policy + route tests
|
|
24
|
-
synopkgland build # → dist/__PACKAGE__-0.1.0-0001-{x86_64,aarch64}.spk
|
|
25
|
-
synopkgland inspect dist/__PACKAGE__-0.1.0-0001-x86_64.spk
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
Install: Package Center → Settings → General → Trust Level "Any publisher",
|
|
29
|
-
then Manual Install with the SPK for your NAS's CPU. Open
|
|
30
|
-
**__DISPLAY_NAME__** from the DSM main menu: it shows who you are signed in
|
|
31
|
-
as, what the backend reports, and (for administrators) a form that stores a
|
|
32
|
-
greeting in the package's data folder.
|
|
33
|
-
|
|
34
|
-
## Capabilities and schema 2
|
|
35
|
-
|
|
36
|
-
`dsm-package.yaml` requires `schema: 2` and `backend: {kind: go, dir: backend}`.
|
|
37
|
-
Declare `capabilities.files: session` for interactive File Station access,
|
|
38
|
-
`capabilities.jobs: true` for persistent package-account jobs,
|
|
39
|
-
`capabilities.identity: standalone` for independent DSM login, and
|
|
40
|
-
`capabilities.rootOps: true` for administrator-approved fixed executor operations.
|
|
41
|
-
`init --with files,jobs,root-ops` supports plain and Vue UI; `login` and
|
|
42
|
-
`delegate` need the Vue UI. `daemon` cannot be combined with `jobs`, but it can
|
|
43
|
-
be combined with an until-revoked `delegate`.
|
|
44
|
-
|
|
45
|
-
```sh
|
|
46
|
-
synopkgland add files jobs login
|
|
47
|
-
synopkgland check --json
|
|
48
|
-
synopkgland status --host my-nas --json
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
`add` writes SDK overlay files and updates capabilities. Your handlers/pages and
|
|
52
|
-
application entry files remain app-owned. Differing existing overlay files and
|
|
53
|
-
modified SDK placeholders cause `ADD_FILE_CONFLICT` with the conflicting paths;
|
|
54
|
-
resolve them before retrying. Already-declared capabilities are a no-op.
|
|
55
|
-
`check`, `build`, `inspect`, `deploy`, `status` emit one stdout object with
|
|
56
|
-
`--json`; failures include `code`, `message`, `hint`.
|
|
57
|
-
|
|
58
|
-
## Project layout
|
|
59
|
-
|
|
60
|
-
| Path | What it is | Edit it? |
|
|
61
|
-
| --- | --- | --- |
|
|
62
|
-
| `dsm-package.yaml` | Package identity, version/build, arches, where backend and UI come from | Yes |
|
|
63
|
-
| `ui/app.js`, `ui/app.css` | The app inside the DSM window | Yes — your UI |
|
|
64
|
-
| `ui/…` | Any other assets; served from `/webman/3rdparty/__PACKAGE__/app/` | Yes |
|
|
65
|
-
| `i18n/messages/<locale>.json` | UI text in nine languages | Yes |
|
|
66
|
-
| `i18n/glossary.json` | DSM's own UI terms, and which messages must use them | Add terms |
|
|
67
|
-
| `backend/internal/app/` | Your API: routes and handlers | Yes — your backend |
|
|
68
|
-
| `backend/internal/api/` | The CGI front door: guards, auth order, route policies | Rarely |
|
|
69
|
-
| `backend/internal/dsm/` | DSM session check and administrators lookup | Rarely |
|
|
70
|
-
| `backend/cmd/app/` | Wires the above together | Rarely |
|
|
71
|
-
| `dist/` | Built SPKs (ignored by git) | No |
|
|
72
|
-
|
|
73
|
-
`build` generates everything else: `INFO`, `conf/privilege`
|
|
74
|
-
(`run-as: package`), no-op lifecycle scripts, icons, the DSM window wrapper
|
|
75
|
-
(`ui/config`, `ui/window-<build>.js`) and the CGI at `ui/cgi/api.cgi`.
|
|
76
|
-
|
|
77
|
-
## Add an API operation
|
|
78
|
-
|
|
79
|
-
Add a handler in `backend/internal/app/routes.go`. Every method defaults to
|
|
80
|
-
DSM administrator membership, resolved by its native SDK. All access rules live in
|
|
81
|
-
`backend/internal/api/permissions.json`, including launcher access:
|
|
82
|
-
|
|
83
|
-
```go
|
|
84
|
-
func Routes(cfg Config) []api.Route {
|
|
85
|
-
return []api.Route{
|
|
86
|
-
api.Handle("app.status", cfg.status),
|
|
87
|
-
api.Handle("greeting.get", cfg.getGreeting),
|
|
88
|
-
api.Handle("greeting.set", cfg.setGreeting),
|
|
89
|
-
api.Handle("notes.list", cfg.listNotes), // new: administrators by default
|
|
90
|
-
api.Handle("notes.purge", cfg.purgeNotes), // new: administrators by default
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
func (cfg Config) listNotes(ctx context.Context, caller api.Caller, params json.RawMessage) (any, error) {
|
|
95
|
-
var in struct{ Limit int `json:"limit"` }
|
|
96
|
-
if err := decodeParams(params, &in); err != nil {
|
|
97
|
-
return nil, err
|
|
98
|
-
}
|
|
99
|
-
return map[string]any{"owner": caller.User(), "notes": []string{}}, nil
|
|
100
|
-
}
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
Then add the method's valid params to `sampleParams` in `routes_test.go`; the
|
|
104
|
-
test fails until you do, and once you do it proves the new route refuses
|
|
105
|
-
callers without a session and ordinary users without touching
|
|
106
|
-
the data folder.
|
|
107
|
-
|
|
108
|
-
Call it from the UI with `ctx.call("notes.list", { limit: 20 })`. Errors
|
|
109
|
-
reject with `{ code, message }`, for example `session_required`,
|
|
110
|
-
`admin_required`, `bad_request` or `internal`.
|
|
111
|
-
|
|
112
|
-
### Who can call what
|
|
113
|
-
|
|
114
|
-
The shipped policy is:
|
|
115
|
-
|
|
116
|
-
```json
|
|
117
|
-
{"schema": 1, "default": "administrators", "methods": {}}
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
The default must remain `administrators`. An intentional exception belongs in
|
|
121
|
-
`methods`, for example `"notes.list": "authenticated"`; `"public"` explicitly
|
|
122
|
-
allows anonymous calls. Such exceptions also enable ordinary-user launcher
|
|
123
|
-
access. The template ships no exceptions and sets DSM `allUsers` to `false`.
|
|
124
|
-
|
|
125
|
-
| JSON rule | No session | Ordinary user | Administrators group member |
|
|
126
|
-
| --- | --- | --- | --- |
|
|
127
|
-
| absent or `administrators` | `session_required` | `admin_required` | runs |
|
|
128
|
-
| explicit `authenticated` | `session_required` | runs | runs |
|
|
129
|
-
| explicit `public` | runs | runs | runs |
|
|
130
|
-
| unregistered method | `session_required` | `unknown_method` | `unknown_method` |
|
|
131
|
-
|
|
132
|
-
Missing or invalid JSON, duplicate keys, unknown permissions and rules for
|
|
133
|
-
unregistered methods fail closed. The CLI validates the file and binds its
|
|
134
|
-
SHA-256 digest to the compiled CGI, which checks it at startup before migration.
|
|
135
|
-
Changing policy requires rebuilding the SPK; request parameters cannot alter it.
|
|
136
|
-
Legacy `api.User`, `api.Admin` and `api.Public` constructors remain compatibility
|
|
137
|
-
aliases for handler registration and do not grant access. Use `api.Handle` for
|
|
138
|
-
new routes. Binary reads cannot be configured as anonymous.
|
|
139
|
-
|
|
140
|
-
Every reply, error or not, is HTTP 200 with `{"success": false, "error":
|
|
141
|
-
{"code", "message"}}` on failure, the same convention as DSM's own WebAPI.
|
|
142
|
-
DSM's web server replaces the body of any CGI reply with status 403, 404 or
|
|
143
|
-
5xx by its own HTML error page, so a status-coded error would never reach your
|
|
144
|
-
UI.
|
|
145
|
-
|
|
146
|
-
JSON replies include an exact `Content-Length` in bytes, including refusal and
|
|
147
|
-
serialization-failure envelopes. This avoids truncated chunk framing on DSM's
|
|
148
|
-
CGI bridge; serialization failures retain HTTP 200 and return `internal`.
|
|
149
|
-
|
|
150
|
-
`filestation.UploadStream` streams an application-selected reader under the
|
|
151
|
-
current caller's File Station session, capped at 16 GiB and twenty minutes.
|
|
152
|
-
Its upload transport has a separate bounded response-header deadline; ordinary
|
|
153
|
-
metadata requests retain their shorter deadline. No overwrite, retries, parent
|
|
154
|
-
creation or saved credentials are added. A missing commit receipt remains
|
|
155
|
-
`commit-uncertain` and requires reconciliation before another write.
|
|
156
|
-
|
|
157
|
-
- Handlers get an `api.Caller` the server built after authenticating; code
|
|
158
|
-
outside `internal/api` cannot construct an authenticated one.
|
|
159
|
-
- A JSON `public` exception runs with **no** DSM login; the template ships none.
|
|
160
|
-
- "Administrator" is DSM's native administrator decision, including local, AD
|
|
161
|
-
and LDAP accounts. `dsm.IsAdministrator` invokes `SLIBGroupIsAdminGroupMem`
|
|
162
|
-
with real-time checking on every authenticated request. No group-name or
|
|
163
|
-
account-name comparison, UID shortcut, SDK cache, or `/etc/group` fallback
|
|
164
|
-
grants access. Unknown/error/timeout results refuse access.
|
|
165
|
-
|
|
166
|
-
## How authentication works (and its limits)
|
|
167
|
-
|
|
168
|
-
Before decoding JSON, the CGI parsers reject nesting deeper than 32
|
|
169
|
-
containers or more than 65,536 structural bytes (`{}[],:` outside strings).
|
|
170
|
-
The shared scanner uses constant memory; strings still obey the body's byte
|
|
171
|
-
limit. This bounds JSON allocation amplification even for anonymous callers
|
|
172
|
-
and explicitly public routes. It does not replace authentication or network
|
|
173
|
-
rate limiting. Existing generated projects need to adopt the updated backend
|
|
174
|
-
files; rebuilding the CLI alone does not update their source.
|
|
175
|
-
|
|
176
|
-
The CGI hands only the session carriers (`Cookie`, `X-SYNO-TOKEN`, client
|
|
177
|
-
address) to DSM's own `/usr/syno/synoman/webman/modules/authenticate.cgi`,
|
|
178
|
-
which prints the signed-in user name. The backend never parses the session
|
|
179
|
-
cookie and never takes a user name or admin flag from the request.
|
|
180
|
-
|
|
181
|
-
Cross-site requests are refused: the API accepts only `POST` with
|
|
182
|
-
`Content-Type: application/json` (which forces a CORS preflight DSM never
|
|
183
|
-
approves), and it rejects `Sec-Fetch-Site` other than `same-origin` and any
|
|
184
|
-
foreign `Origin`. The DSM window wrapper sends DSM's `SynoToken`, but when DSM
|
|
185
|
-
has `enable_syno_token=no` that token proves nothing, so the same-origin
|
|
186
|
-
checks are what stop cross-site requests.
|
|
187
|
-
|
|
188
|
-
Known limits:
|
|
189
|
-
|
|
190
|
-
- Each request reuses the browser's DSM session; it does not carry DSM's
|
|
191
|
-
per-request `X-SYNO-HASH` proof. Verifying that proof needs private,
|
|
192
|
-
version-specific DSM libraries through a C bridge, so it is not part of this
|
|
193
|
-
template.
|
|
194
|
-
- Directory reachability and DSM name-service freshness affect native role
|
|
195
|
-
checks. The bridge bypasses DSM's administrator-role cache but cannot force
|
|
196
|
-
an upstream directory replica to be current. It refuses unknown results.
|
|
197
|
-
- The static Go CGI embeds a minimal native bridge for Linux amd64/arm64/armv7,
|
|
198
|
-
reproduced with Zig 0.16.0 from `internal/dsm/native/admin_check.c`. The bridge
|
|
199
|
-
runs from a sealed memory file with a clean environment, a 3-second deadline
|
|
200
|
-
and bounded output; no runtime Zig, compiler, writable executable or root
|
|
201
|
-
privilege is required. The ELF files and build/source hashes are recorded in
|
|
202
|
-
`native/provenance.json`. DSM must expose the native SDK symbol; otherwise
|
|
203
|
-
authentication refuses access.
|
|
204
|
-
- Kernels without `memfd_create` (DSM 7 on Linux 3.10: armv7 and the x86_64
|
|
205
|
-
`avoton`, `braswell`, `bromolow`, `grantley` and `cedarview` platforms) cannot
|
|
206
|
-
seal the bridge. Only there, the CGI stages it in the package's own
|
|
207
|
-
`/var/packages/<package>/tmp` (DSM mounts `/tmp` noexec): a fresh 0700
|
|
208
|
-
directory, a 0500 file reopened read-only and unlinked before it runs. The
|
|
209
|
-
seal guarantee is lost: between the write and the unlink, a process running
|
|
210
|
-
as the same package account could replace the bridge. That account already
|
|
211
|
-
runs the CGI, so the bridge never trusts anything that account does not
|
|
212
|
-
already control; other accounts cannot write the directory, which must be
|
|
213
|
-
owned by the package account and not group- or world-writable. Any other
|
|
214
|
-
memfd failure still refuses.
|
|
215
|
-
|
|
216
|
-
## Customize the UI
|
|
217
|
-
|
|
218
|
-
`ui/app.js` must register `window.DsmPackageApps[<package>].mount(root, ctx)`
|
|
219
|
-
(the template shows how, using `document.currentScript.dataset.package`).
|
|
220
|
-
`ctx.call(method, params)` is the only transport. `ctx.reopen(fn)` runs `fn`
|
|
221
|
-
whenever DSM shows the window again and returns an idempotent unsubscribe function. Scope your CSS under your own root class:
|
|
222
|
-
every DSM app shares one page.
|
|
223
|
-
|
|
224
|
-
Plain JS and Vue receive the same `ctx.host` adapter. `ctx.host.platform()`
|
|
225
|
-
returns a fresh frozen snapshot: `web`, `host` (`dsm`, `standalone-web` or
|
|
226
|
-
`unavailable`), `dsmStandalone`, `dsmLanguage`, `appLocale`, `systemVersion`,
|
|
227
|
-
`fullVersion`, and `theme`. Unknown fields are `null`; `theme` stays unknown.
|
|
228
|
-
DSM launch mode is separate from plain-web fallback, and `appLocale` is the
|
|
229
|
-
app's catalog locale, which may differ from DSM's UI language code.
|
|
230
|
-
|
|
231
|
-
```js
|
|
232
|
-
const platform = ctx.host.platform();
|
|
233
|
-
const result = ctx.host.setTitle('My notes');
|
|
234
|
-
if (result.status !== 'ok') showTitleStatus(result.status);
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
`setTitle` enables DSM HTML encoding or assigns standalone `document.title`.
|
|
238
|
-
It returns `{status: 'ok', target: 'dsm-window' | 'document'}` on synchronous
|
|
239
|
-
completion, or `unsupported`, `unavailable`, `invalid-input`, `failed` statuses.
|
|
240
|
-
A missing DSM method is unsupported; it never changes the DSM desktop's title.
|
|
241
|
-
Destroy disposes the adapter and clears reopen handlers; retained adapters
|
|
242
|
-
return unavailable. Navigation exposes activateWindow/requestClose/openApp/openURL;
|
|
243
|
-
requests do not acknowledge completion. `ctx.host.subscribe('window-resize', fn)`
|
|
244
|
-
returns `{status: 'subscribed', dispose}` only for a verified DSM window with on/un.
|
|
245
|
-
The callback receives no native arguments. Remove your subscriptions on unmount;
|
|
246
|
-
wrapper destroy also cleans them. `host-theme-change` and `host-language-change`
|
|
247
|
-
return unsupported: no third-party host event is proven. These observations do
|
|
248
|
-
not authorize work.
|
|
249
|
-
|
|
250
|
-
`ctx.host.openFileManager('/example-share/docs')` requests File Station folder
|
|
251
|
-
navigation; `revealFile('/home/report.txt')` requests a file highlight. Both require
|
|
252
|
-
a registered, enabled and launchable File Station and report requested plus action,
|
|
253
|
-
not location completion or ACL success. Use canonical virtual share paths only;
|
|
254
|
-
OS `/volumeN/...`, traversal, repeated/trailing slash, controls and backslash are
|
|
255
|
-
invalid. No path conversion or grant is performed. `openFile`, `showFileDetails`
|
|
256
|
-
and `openAppSetting` return unsupported; private preview/details/settings flows
|
|
257
|
-
have no proven generic contract.
|
|
258
|
-
|
|
259
|
-
File reveal adds a best-effort correction using File Station 1.4.x private
|
|
260
|
-
structures. Required APIs are feature-detected; absent/throwing APIs silently
|
|
261
|
-
cancel and release timers/listeners. One AppLaunch callback binds one receiver;
|
|
262
|
-
only its model may be selected once. Interaction, navigation away from the reached
|
|
263
|
-
parent, close/destroy, disposal and new requests cancel the correction. The named
|
|
264
|
-
5000 ms total budget, 100 ms checks and 300 ms quiet interval have no device latency
|
|
265
|
-
proof. `requested` still does not mean `selected`; actual effectiveness on DSM 7.4 /
|
|
266
|
-
File Station 1.4.4 awaits a rebuilt-SPK device matrix. No second launch or broadcast
|
|
267
|
-
setter is used, and later reloads may still clear selection.
|
|
268
|
-
|
|
269
|
-
For an independent browser shell, use the SPK's generated `ui/host-0001.js`
|
|
270
|
-
(the number follows the manifest build). It has no Ext or npm runtime dependency:
|
|
271
|
-
|
|
272
|
-
```html
|
|
273
|
-
<script src="./host-0001.js"></script>
|
|
274
|
-
```
|
|
275
|
-
|
|
276
|
-
```js
|
|
277
|
-
// shellContext supplies your app's own auth/transport and other context members.
|
|
278
|
-
const ctx = {...shellContext, host: window.DsmPackageHosts.__PACKAGE__({locale: 'en'})};
|
|
279
|
-
const app = window.DsmPackageApps.__PACKAGE__.mount(root, ctx);
|
|
280
|
-
// When your shell unmounts:
|
|
281
|
-
ctx.host.dispose();
|
|
282
|
-
app.unmount();
|
|
283
|
-
```
|
|
284
|
-
|
|
285
|
-
Serve the generated script with your shell (or reference its same-origin DSM
|
|
286
|
-
static path). `ctx.host` does not create a standalone backend, DSM session,
|
|
287
|
-
cross-origin iframe bridge, or implementations of `ctx.call/t/root/reopen`.
|
|
288
|
-
Standalone title affects the document shared by that shell's mounts.
|
|
289
|
-
|
|
290
|
-
To build the UI with Vite, Vue or React, point `ui` at the build output and
|
|
291
|
-
give the build command as an argv list (no shell):
|
|
292
|
-
|
|
293
|
-
```yaml
|
|
294
|
-
ui:
|
|
295
|
-
dir: web/dist
|
|
296
|
-
build:
|
|
297
|
-
cwd: web
|
|
298
|
-
command: [npm, run, build]
|
|
299
|
-
```
|
|
300
|
-
|
|
301
|
-
The build must emit `app.js` (one script that registers `mount`) and
|
|
302
|
-
`app.css`. The installed `@synopackageland/ui` package gives Vue components with DSM 7 styling;
|
|
303
|
-
import its `themes/dsm7-embedded.css` for use inside a DSM window.
|
|
304
|
-
|
|
305
|
-
## Languages
|
|
306
|
-
|
|
307
|
-
The UI ships in nine of DSM's languages: `en`, `zh-TW`,
|
|
308
|
-
`zh-CN`, `ja`, `ko`, `de`, `fr`, `es` and `it`. DSM's other languages show
|
|
309
|
-
English. The window follows DSM's own language setting (`_S("lang")`).
|
|
310
|
-
|
|
311
|
-
- **Messages**: `i18n/messages/<locale>.json`, flat `"key": "text"`. Use
|
|
312
|
-
`ctx.t("greeting.setBy", { text, user })` in the UI; `{name}` is a
|
|
313
|
-
placeholder, and `ctx.t("files", { count: 3 })` picks `files.one` or
|
|
314
|
-
`files.other`. Missing keys fall back to English, then to the key itself.
|
|
315
|
-
`build` embeds the catalogs in the DSM window script, so there is no
|
|
316
|
-
extra request.
|
|
317
|
-
- **Errors**: the backend returns a `code`; the UI shows
|
|
318
|
-
`error.<code>` from the catalogs and uses the backend's English text only for
|
|
319
|
-
codes it has no message for. Add `error.<code>` for every code you return.
|
|
320
|
-
- **Glossary**: `i18n/glossary.json` records DSM's own words in all nine
|
|
321
|
-
languages, each with its source (`section/key` in DSM 7.4's
|
|
322
|
-
`/usr/syno/synoman/webman/texts/<lang>/strings`). A term's `keys` lists the
|
|
323
|
-
messages that must contain it; that is how "Save" uses DSM's own word in
|
|
324
|
-
every language, the same as the rest of DSM. Product names in `untranslated`
|
|
325
|
-
stay in English everywhere.
|
|
326
|
-
- **Package Center text**: `i18n.info` in `dsm-package.yaml` writes INFO
|
|
327
|
-
`displayname_<lang>` / `description_<lang>` (for example `description_cht`).
|
|
328
|
-
|
|
329
|
-
`synopkgland check` and `build` refuse a language file with missing or
|
|
330
|
-
extra keys, a translation that drops a `{placeholder}`, an unsupported
|
|
331
|
-
language, or a listed message that drifts from the glossary.
|
|
332
|
-
|
|
333
|
-
To add a message: add the key to `en.json` and to the other eight files. To
|
|
334
|
-
use a DSM term, copy its `text` from the glossary and add your key to the
|
|
335
|
-
term's `keys`. A Vue or React UI can keep its own i18n library; `ctx.t` and
|
|
336
|
-
`ctx.locale` are there if you want them.
|
|
337
|
-
|
|
338
|
-
The Vue shell (`--ui vue`) keeps its text in `frontend/src/**/i18n/<locale>.json`,
|
|
339
|
-
one folder per area (status page, sign-in, files, background jobs), in the same
|
|
340
|
-
nine languages. Add new text to all nine files rather than writing it into a
|
|
341
|
-
`.vue` file.
|
|
342
|
-
|
|
343
|
-
## Package an existing binary
|
|
344
|
-
|
|
345
|
-
Keep the Go backend and call your tool from a handler (recommended: auth
|
|
346
|
-
stays central), or replace the CGI with your own executable:
|
|
347
|
-
|
|
348
|
-
```yaml
|
|
349
|
-
arches: [x86_64]
|
|
350
|
-
backend:
|
|
351
|
-
kind: binary
|
|
352
|
-
files:
|
|
353
|
-
x86_64: prebuilt/api-x86_64
|
|
354
|
-
```
|
|
355
|
-
|
|
356
|
-
The file must be a regular file in the project, a 64-bit Linux ELF for that
|
|
357
|
-
arch, and statically linked (DSM models ship different libc versions). It is
|
|
358
|
-
installed as `ui/cgi/api.cgi` (mode 0755) and runs as the package account.
|
|
359
|
-
It then owns everything `backend/internal/api` does for you: bounded reads,
|
|
360
|
-
POST-only JSON, same-origin checks, authentication before any work, and a
|
|
361
|
-
refusal for unknown methods.
|
|
362
|
-
|
|
363
|
-
## DSM Application Portal link
|
|
364
|
-
|
|
365
|
-
`synopkgland add portal` adds `portal: {}` to dsm-package.yaml so
|
|
366
|
-
`https://<nas>/<alias>/` opens this app right after DSM sign-in. The install
|
|
367
|
-
wizard proposes the alias (the package name in lowercase by default); an
|
|
368
|
-
administrator turns it on from the app's portal panel or Control Panel >
|
|
369
|
-
Login Portal > Applications. Ordinary users then see the link; until then
|
|
370
|
-
they see "ask an administrator". DSM owns the setting: the backend's
|
|
371
|
-
`portal.status` only reads it, and nothing in the package may write it. See
|
|
372
|
-
`synopkgland skill show portal`.
|
|
373
|
-
|
|
374
|
-
A portal needs DSM 7.3.2-86009 or later, so `add portal` raises a lower
|
|
375
|
-
`os_min_ver` and build refuses one below it. DSM 7.1.1 rejects an unsigned
|
|
376
|
-
package that registers a portal (Package Center error 320); 7.3.2 and 7.4
|
|
377
|
-
install it; 7.2 is untested. To keep supporting older DSM, remove `portal:`.
|
|
378
|
-
|
|
379
|
-
## Data, upgrades, uninstall
|
|
380
|
-
|
|
381
|
-
The backend stores data in `/var/packages/__PACKAGE__/var` (the package's
|
|
382
|
-
own folder, kept across upgrades). Bump `build` for every SPK you hand out;
|
|
383
|
-
bump `version` for feature releases. There are no lifecycle scripts to write:
|
|
384
|
-
the CGI starts per request, so start/stop do nothing.
|
|
385
|
-
|
|
386
|
-
### What an upgrade keeps
|
|
387
|
-
|
|
388
|
-
An upgrade replaces the program files and keeps the data. DSM preserves `var`
|
|
389
|
-
(`@appdata`), `home` (`@apphome`) and `etc` (`@appconf`) across an upgrade and
|
|
390
|
-
removes `tmp` (`@apptemp`) and `target` (`@appstore`). Keep everything you need
|
|
391
|
-
to keep under `var`, `home` or `etc`.
|
|
392
|
-
|
|
393
|
-
### Schema migrations
|
|
394
|
-
|
|
395
|
-
`backend/internal/datamigrate` applies ordered, idempotent schema migrations and
|
|
396
|
-
records the result in `<var>/data-version`. `backend/cmd/app` runs `app.Migrate`
|
|
397
|
-
on every start; the recorded version makes that a cheap no-op.
|
|
398
|
-
|
|
399
|
-
- Versions start at 1 and never change meaning. The template ships one empty
|
|
400
|
-
example in `backend/internal/app/migrations.go`; replace it with your steps.
|
|
401
|
-
- Every step must be idempotent: a crash between `Apply` and the version record,
|
|
402
|
-
or two CGI requests racing on the first start after an upgrade, can run one step
|
|
403
|
-
twice.
|
|
404
|
-
- A step that fails stops the run with the previous version still recorded, and
|
|
405
|
-
the next start resumes from there. The helper never deletes or rewrites data
|
|
406
|
-
itself, so a failed migration leaves your old data in place.
|
|
407
|
-
- `datamigrate.Context.OldPkgVer` is the version being upgraded from:
|
|
408
|
-
`SYNOPKG_OLD_PKGVER` when your environment sets it, otherwise the version the last
|
|
409
|
-
successful run recorded. `NewPkgVer` is the version running now.
|
|
410
|
-
|
|
411
|
-
Uninstalling keeps your data: DSM leaves `@appdata` and `@apphome` on the volume,
|
|
412
|
-
and reinstalling the same package ID picks them up again. The install wizard is a
|
|
413
|
-
dynamic `WIZARD_UIFILES/install_uifile.sh` that checks — read-only — whether
|
|
414
|
-
`@appdata/<package>` already exists and, if it does, tells the administrator the
|
|
415
|
-
install reuses the old data and how to start clean.
|
|
416
|
-
|
|
417
|
-
The generated SPK ships
|
|
418
|
-
an uninstall wizard (English, plus eight other languages) with one box, **Also
|
|
419
|
-
delete the app data listed above** (`pkgwizard_remove_additional`), unchecked by
|
|
420
|
-
default. Ticked, `postuninst` empties `@appdata/<package>`, `@apphome/<package>`
|
|
421
|
-
and `@appconf/<package>` and nothing else: not Shared Folders, the package
|
|
422
|
-
account or other packages. An upgrade never deletes anything. Do not write your own `postuninst`;
|
|
423
|
-
`synopkgland inspect` flags a deleting script that lacks the upgrade guard
|
|
424
|
-
or deletes outside the package's own folders.
|
|
425
|
-
|
|
426
|
-
## Executor setup and delegation
|
|
427
|
-
|
|
428
|
-
`init --with delegate` enables persistent jobs and offline file operations.
|
|
429
|
-
`init --with root-ops` adds fixed `root/<name>.sh` operations for administrators.
|
|
430
|
-
Both use one digest-pinned executor, with no SAS dependency. The package CGI and
|
|
431
|
-
background worker run as the package account.
|
|
432
|
-
|
|
433
|
-
An administrator confirms their DSM password once to create a root boot task
|
|
434
|
-
and disabled control task. Exact task readback and socket status establish
|
|
435
|
-
readiness. Reboot starts the protected executor without a browser session.
|
|
436
|
-
Executor, policy or root-script changes require approval again; UI and package
|
|
437
|
-
version changes do not. DSM 105 blocks setup without automatic retry.
|
|
438
|
-
|
|
439
|
-
The Vue setup provider wraps `ctx.executor.status()`, `.authorize(password)` and
|
|
440
|
-
`.control('start'|'stop'|'purge')`. Password confirmation goes to DSM; credentials
|
|
441
|
-
are never persisted by the executor. Plain UI uses the window setup panel.
|
|
442
|
-
Users submit downloads, choose a destination using their current DSM session,
|
|
443
|
-
and revoke their own delegations. Offline writes recheck subject, UID, AppPriv,
|
|
444
|
-
operation, scope and expiry, then write as the subject without overwriting.
|
|
445
|
-
|
|
446
|
-
SPKs include `executor/executor` and `executor/policy.json`. Protected runtime
|
|
447
|
-
and delegations live below `/usr/local/etc/synopkgland/<package>/` with root-only
|
|
448
|
-
permissions. Purge removes these copies; removing DSM tasks remains an admin
|
|
449
|
-
setup/lifecycle operation. Full installed-package lifecycle acceptance requires
|
|
450
|
-
DSM testing.
|
|
451
|
-
|
|
452
|
-
## Support matrix
|
|
453
|
-
|
|
454
|
-
| | Status |
|
|
455
|
-
| --- | --- |
|
|
456
|
-
| Build hosts | macOS, Linux (any OS with Go and Node) |
|
|
457
|
-
| Target CPUs | x86_64 and aarch64 DSM models (one SPK each). armv7 (DSM 7.2+ platforms `alpine`, `alpine4k`, `armada38x`, `monaco`) is opt-in: add it to `arches`; it covers the Go CGI (plain or Vue UI), jobs, daemon, root-ops and delegate. armv7 jobs, daemon and executor (root-ops, delegate) are built and checked locally but have not been verified on a NAS |
|
|
458
|
-
| DSM | 7.1 or later declared (`os_min_ver`, change it with `init --min-dsm` or `build --min-dsm`). Installed and tested on DSM 7.4 and 7.3.2 (x86_64). armv7 was installed and tested on DSM 7.1.1 (`alpine4k`, Linux 3.10, where the bridge runs from the package tmp fallback) with administrator, AppPriv and unauthenticated requests; `armada38x` and `monaco` have not been run on a NAS. No x86_64 Linux 3.10 model has been tested. aarch64 SPKs are built the same way but have not been run on a NAS. |
|
|
459
|
-
| Not supported | armv7 platforms only DSM 7.0/7.1 ship (`armada370`, `armada375`, `armadaxp`, `comcerto2k`); DSM 6, running anything as root without an administrator's approval |
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
Native Go package build dependencies
|
|
2
|
-
|
|
3
|
-
github.com/godbus/dbus/v5 v5.2.3-0.20260924123156-0ea052abeb82 (BSD-2-Clause)
|
|
4
|
-
Pinned upstream commit: 0ea052abeb820894f944095b3c2dc125cef0df85
|
|
5
|
-
Fix panic in DecodeMessageWithFDs on read error (not yet in a tagged release).
|
|
6
|
-
|
|
7
|
-
Copyright (c) 2013, Georg Reinke (<guelfey at gmail dot com>), Google
|
|
8
|
-
All rights reserved.
|
|
9
|
-
|
|
10
|
-
Redistribution and use in source and binary forms, with or without
|
|
11
|
-
modification, are permitted provided that the following conditions
|
|
12
|
-
are met:
|
|
13
|
-
|
|
14
|
-
1. Redistributions of source code must retain the above copyright notice,
|
|
15
|
-
this list of conditions and the following disclaimer.
|
|
16
|
-
|
|
17
|
-
2. Redistributions in binary form must reproduce the above copyright
|
|
18
|
-
notice, this list of conditions and the following disclaimer in the
|
|
19
|
-
documentation and/or other materials provided with the distribution.
|
|
20
|
-
|
|
21
|
-
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
22
|
-
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
23
|
-
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
24
|
-
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
25
|
-
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
26
|
-
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
|
27
|
-
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
28
|
-
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
29
|
-
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
30
|
-
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
31
|
-
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
32
|
-
|
|
33
|
-
golang.org/x/sys v0.27.0 (BSD-3-Clause)
|
|
34
|
-
|
|
35
|
-
Copyright 2009 The Go Authors.
|
|
36
|
-
|
|
37
|
-
Redistribution and use in source and binary forms, with or without
|
|
38
|
-
modification, are permitted provided that the following conditions are
|
|
39
|
-
met:
|
|
40
|
-
|
|
41
|
-
* Redistributions of source code must retain the above copyright
|
|
42
|
-
notice, this list of conditions and the following disclaimer.
|
|
43
|
-
* Redistributions in binary form must reproduce the above
|
|
44
|
-
copyright notice, this list of conditions and the following disclaimer
|
|
45
|
-
in the documentation and/or other materials provided with the
|
|
46
|
-
distribution.
|
|
47
|
-
* Neither the name of Google LLC nor the names of its
|
|
48
|
-
contributors may be used to endorse or promote products derived from
|
|
49
|
-
this software without specific prior written permission.
|
|
50
|
-
|
|
51
|
-
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
52
|
-
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
53
|
-
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
54
|
-
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
55
|
-
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
56
|
-
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
57
|
-
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
58
|
-
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
59
|
-
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
60
|
-
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
61
|
-
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
// Command app is the package backend. DSM runs it as a CGI (ui/cgi/api.cgi in
|
|
2
|
-
// the package) under the package account, once per request.
|
|
3
|
-
//
|
|
4
|
-
//line dsmapp/cmd/app/main.go:1
|
|
5
|
-
package main
|
|
6
|
-
|
|
7
|
-
import (
|
|
8
|
-
"fmt"
|
|
9
|
-
"log"
|
|
10
|
-
"net/http"
|
|
11
|
-
"net/http/cgi"
|
|
12
|
-
"os"
|
|
13
|
-
|
|
14
|
-
"dsmapp/internal/api"
|
|
15
|
-
"dsmapp/internal/app"
|
|
16
|
-
"dsmapp/internal/dsm"
|
|
17
|
-
"dsmapp/internal/filestation"
|
|
18
|
-
standaloneidentity "dsmapp/internal/identity"
|
|
19
|
-
)
|
|
20
|
-
|
|
21
|
-
// Set by `synopkgland build-spk` through -ldflags -X; never read from a request.
|
|
22
|
-
var (
|
|
23
|
-
delegateScope = ""
|
|
24
|
-
delegateOperationsJSON = ""
|
|
25
|
-
delegateDestinationsJSON = ""
|
|
26
|
-
delegateLifetime = ""
|
|
27
|
-
executorDigest = ""
|
|
28
|
-
policyDigest = ""
|
|
29
|
-
packageID = "dev"
|
|
30
|
-
version = "0.0.0"
|
|
31
|
-
// "session" when the project opted into the interactive File Station adapter.
|
|
32
|
-
fileStation = ""
|
|
33
|
-
// "standalone" enables the SDK identity adapter; the runtime owns authentication.
|
|
34
|
-
identity = ""
|
|
35
|
-
// dsm-package.yaml entry: "admin-only" or "app-privilege"; empty keeps the route policy alone.
|
|
36
|
-
entry = ""
|
|
37
|
-
// "on" when dsm-package.yaml declares portal: serves portal.status.
|
|
38
|
-
portal = ""
|
|
39
|
-
)
|
|
40
|
-
|
|
41
|
-
func main() {
|
|
42
|
-
log.SetFlags(0)
|
|
43
|
-
log.SetPrefix(packageID + ": ")
|
|
44
|
-
if os.Getenv("GATEWAY_INTERFACE") == "" {
|
|
45
|
-
fmt.Fprintf(os.Stderr, "%s %s: this program runs as the package's DSM CGI; open the app from the DSM main menu.\n", packageID, version)
|
|
46
|
-
os.Exit(2)
|
|
47
|
-
}
|
|
48
|
-
cfg := app.Config{
|
|
49
|
-
DelegateScope: delegateScope,
|
|
50
|
-
DelegateOperationsJSON: delegateOperationsJSON,
|
|
51
|
-
DelegateDestinationsJSON: delegateDestinationsJSON,
|
|
52
|
-
DelegateLifetime: delegateLifetime,
|
|
53
|
-
ExecutorDigest: executorDigest, PolicyDigest: policyDigest,
|
|
54
|
-
PackageID: packageID,
|
|
55
|
-
Version: version,
|
|
56
|
-
DataDir: "/var/packages/" + packageID + "/var",
|
|
57
|
-
Portal: portal == "on",
|
|
58
|
-
}
|
|
59
|
-
if _, err := app.ParseDelegateConfig(cfg); err != nil {
|
|
60
|
-
log.Fatal(err)
|
|
61
|
-
}
|
|
62
|
-
if app.SessionFilesEnabled(fileStation) {
|
|
63
|
-
cfg.SessionFiles = filestation.Local(cfg.DataDir)
|
|
64
|
-
}
|
|
65
|
-
// Kernels without memfd_create stage DSM's bridges in the package's own temp.
|
|
66
|
-
dsm.SetBridgeFallbackDir("/var/packages/" + packageID + "/tmp")
|
|
67
|
-
var auth api.Authenticator = dsm.NewAuthenticator()
|
|
68
|
-
var standalone *standaloneidentity.Service
|
|
69
|
-
if identity == "standalone" {
|
|
70
|
-
var err error
|
|
71
|
-
standalone, err = app.StandaloneIdentity(cfg, os.Getenv("SCRIPT_NAME"))
|
|
72
|
-
if err != nil {
|
|
73
|
-
log.Fatal("identity configuration unavailable")
|
|
74
|
-
}
|
|
75
|
-
auth = standalone
|
|
76
|
-
}
|
|
77
|
-
auth, err := dsm.NewEntryGate(auth, entry, packageID, cfg.DataDir)
|
|
78
|
-
if err != nil {
|
|
79
|
-
log.Fatal(err)
|
|
80
|
-
}
|
|
81
|
-
srv, err := api.NewServer(auth, app.Routes(cfg)...)
|
|
82
|
-
if err != nil {
|
|
83
|
-
log.Fatal(err)
|
|
84
|
-
}
|
|
85
|
-
if err := app.Migrate(cfg); err != nil {
|
|
86
|
-
log.Fatalf("schema migration failed: %v", err)
|
|
87
|
-
}
|
|
88
|
-
var handler http.Handler = srv
|
|
89
|
-
if standalone != nil {
|
|
90
|
-
handler = standalone.Wrap(handler)
|
|
91
|
-
}
|
|
92
|
-
if err := cgi.Serve(api.WithRequestDeadline(handler)); err != nil {
|
|
93
|
-
log.Fatal(err)
|
|
94
|
-
}
|
|
95
|
-
}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
// Command background-worker is the package's fixed background worker. DSM runs
|
|
2
|
-
// it as the package's systemd user unit under the package account; it never
|
|
3
|
-
// runs as root and takes no input except the jobs in its private spool.
|
|
4
|
-
package main
|
|
5
|
-
|
|
6
|
-
import (
|
|
7
|
-
"context"
|
|
8
|
-
"log"
|
|
9
|
-
"os"
|
|
10
|
-
"os/signal"
|
|
11
|
-
"os/user"
|
|
12
|
-
"strconv"
|
|
13
|
-
"syscall"
|
|
14
|
-
|
|
15
|
-
"dsmapp/internal/background"
|
|
16
|
-
)
|
|
17
|
-
|
|
18
|
-
// Set by `synopkgland build-spk` through -ldflags -X.
|
|
19
|
-
var packageID = "dev"
|
|
20
|
-
|
|
21
|
-
func main() {
|
|
22
|
-
log.SetFlags(0)
|
|
23
|
-
log.SetPrefix(packageID + " background: ")
|
|
24
|
-
if err := background.RefuseRoot(os.Geteuid()); err != nil {
|
|
25
|
-
log.Fatal(err)
|
|
26
|
-
}
|
|
27
|
-
name := ""
|
|
28
|
-
if u, err := user.Current(); err == nil {
|
|
29
|
-
name = u.Username
|
|
30
|
-
}
|
|
31
|
-
info := background.WorkerInfo{PID: os.Getpid(), UID: os.Getuid(), Username: name}
|
|
32
|
-
ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGTERM, syscall.SIGINT)
|
|
33
|
-
defer stop()
|
|
34
|
-
log.Printf("started as uid %s", strconv.Itoa(info.UID))
|
|
35
|
-
if err := background.NewRunner("/var/packages/"+packageID+"/var/background", info).Run(ctx); err != nil {
|
|
36
|
-
log.Fatal(err)
|
|
37
|
-
}
|
|
38
|
-
}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
github.com/godbus/dbus/v5 v5.2.3-0.20260924123156-0ea052abeb82 h1:QN/vQc8LI8KFWH6uZZ4R4jermkdwzvKzGy0Taimhbm0=
|
|
2
|
-
github.com/godbus/dbus/v5 v5.2.3-0.20260924123156-0ea052abeb82/go.mod h1:3AAv2+hPq5rdnr5txxxRwiGjPXamgoIHgz9FPBfOp3c=
|
|
3
|
-
golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ=
|
|
4
|
-
golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
|