@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,6 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "native-dsm-vue-app", "private": true, "type": "module",
|
|
3
|
-
"scripts": {"build": "vue-tsc --noEmit && vite build", "test": "vitest run"},
|
|
4
|
-
"dependencies": {"@lucide/vue": "1.48.0", "@synopackageland/ui": "0.8.1", "vue": "3.5.43"},
|
|
5
|
-
"devDependencies": {"@vitejs/plugin-vue": "6.0.9", "vite": "7.3.6", "typescript": "5.9.3", "vue-tsc": "3.3.11", "vitest": "4.1.11", "jsdom": "27.4.0"}
|
|
6
|
-
}
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import {computed, onMounted, onUnmounted, ref, watch} from 'vue'
|
|
3
|
-
import {AppRoot, ConfigProvider, Button, Callout, Form, FormActions, FormItem, SettingsSection, Textarea} from '@synopackageland/ui'
|
|
4
|
-
import {uiLocale} from './nas/locale'
|
|
5
|
-
import {appCopy} from './i18n'
|
|
6
|
-
import type {AppStatus, Context} from './context'
|
|
7
|
-
import AppShell from './shell/AppShell.vue'
|
|
8
|
-
import CapabilityPanels from './CapabilityPanels.vue'
|
|
9
|
-
import FilesPage from './files/FilesPage.vue'
|
|
10
|
-
import PortalSettings from './portal/PortalSettings.vue'
|
|
11
|
-
import {shellPages, type ShellPage} from './shell/pages'
|
|
12
|
-
import {createSession} from './identity/session'
|
|
13
|
-
import LoginPage from './identity/LoginPage.vue'
|
|
14
|
-
const props = defineProps<{ctx: Context}>()
|
|
15
|
-
const login = createSession(props.ctx)
|
|
16
|
-
const copy = computed(() => appCopy(props.ctx.locale))
|
|
17
|
-
const app = ref<AppStatus>()
|
|
18
|
-
const busy = ref(false)
|
|
19
|
-
const error = ref('')
|
|
20
|
-
const notice = ref('')
|
|
21
|
-
const text = ref('')
|
|
22
|
-
let disposed = false
|
|
23
|
-
let unsubscribe: (() => void) | undefined
|
|
24
|
-
// The CLI substitutes this only for a declared package-account background worker.
|
|
25
|
-
const backgroundEnabled = (('__BACKGROUND_ENABLED__') as string) === 'true'
|
|
26
|
-
const page = ref<ShellPage>('status')
|
|
27
|
-
const pages = computed(() => shellPages({background:backgroundEnabled}))
|
|
28
|
-
const subtitle = computed(() => app.value ? `${app.value.package} · ${app.value.user} · ${app.value.version}` : undefined)
|
|
29
|
-
function message(e: unknown) {
|
|
30
|
-
const code = (e as {code?: string})?.code || 'request_failed'
|
|
31
|
-
const errors = copy.value.errors as Record<string, string>
|
|
32
|
-
return (code !== 'request_failed' && errors[code]) || errors.request_failed!.replace('{code}', code)
|
|
33
|
-
}
|
|
34
|
-
async function refresh() {
|
|
35
|
-
if(disposed || busy.value || (login.enabled.value && !login.subject.value)) return
|
|
36
|
-
busy.value = true; error.value = ''
|
|
37
|
-
try {
|
|
38
|
-
const a = await login.call<AppStatus>('app.status')
|
|
39
|
-
if(!disposed) app.value = a
|
|
40
|
-
if(a.admin) {const greeting = await login.call<{text:string}>('greeting.get'); if(!disposed) text.value = greeting.text}
|
|
41
|
-
} catch(e) {if(!disposed) error.value = message(e)} finally {if(!disposed) busy.value=false}
|
|
42
|
-
}
|
|
43
|
-
async function save() {
|
|
44
|
-
if(disposed || busy.value) return
|
|
45
|
-
busy.value = true; error.value='';notice.value=''
|
|
46
|
-
try {await login.call('greeting.set',{text:text.value});if(!disposed) notice.value=copy.value.saved}
|
|
47
|
-
catch(e) {if(!disposed) error.value=message(e)} finally {if(!disposed) busy.value=false}
|
|
48
|
-
}
|
|
49
|
-
watch(login.subject, (subject, previous) => {
|
|
50
|
-
if(!subject) {app.value=undefined;text.value='';notice.value='';error.value=''}
|
|
51
|
-
else if((!previous || previous.user!==subject.user)) void refresh()
|
|
52
|
-
})
|
|
53
|
-
async function signOut() {
|
|
54
|
-
try {await login.logout()} catch(e) {if(!disposed) error.value=message(e)}
|
|
55
|
-
}
|
|
56
|
-
onMounted(async()=>{
|
|
57
|
-
unsubscribe = props.ctx.reopen(()=>{if(!disposed) void refresh()})
|
|
58
|
-
await login.start()
|
|
59
|
-
if((!login.enabled.value || login.subject.value)) await refresh()
|
|
60
|
-
})
|
|
61
|
-
onUnmounted(()=>{disposed=true;unsubscribe?.();login.dispose();text.value=''})
|
|
62
|
-
</script>
|
|
63
|
-
|
|
64
|
-
<template>
|
|
65
|
-
<AppRoot modal-scope="app" style="height: 100%">
|
|
66
|
-
<ConfigProvider :locale="uiLocale(ctx.locale)">
|
|
67
|
-
<p v-if="!login.ready.value" role="status">{{ copy.checking }}</p>
|
|
68
|
-
<LoginPage v-else-if="login.enabled.value && !login.subject.value" :session="login" :locale="ctx.locale" />
|
|
69
|
-
<AppShell v-else v-model="page" :locale="ctx.locale" :pages="pages" :description="subtitle">
|
|
70
|
-
<template #actions><Button variant="secondary" :disabled="busy" @click="refresh">{{ copy.refresh }}</Button><Button v-if="login.enabled.value" variant="secondary" :disabled="busy" @click="signOut">{{ copy.signOut }}</Button></template>
|
|
71
|
-
<div class="integration-app" :aria-busy="busy" :aria-label="copy.settings">
|
|
72
|
-
<p v-if="busy" role="status">{{ copy.loading }}</p>
|
|
73
|
-
<Callout v-if="error" tone="danger" :title="copy.actionRequired"><span role="alert">{{ error }}</span></Callout>
|
|
74
|
-
<p v-if="notice" role="status">{{ notice }}</p>
|
|
75
|
-
<div data-page="status" v-show="page==='status'">
|
|
76
|
-
<SettingsSection :title="copy.statusTitle" :collapsible="false">
|
|
77
|
-
<p v-if="app">{{ app.package }} · {{ app.user }} · {{ app.version }}</p>
|
|
78
|
-
<p v-else-if="error" role="status">{{ copy.statusError }}</p>
|
|
79
|
-
</SettingsSection>
|
|
80
|
-
<PortalSettings v-if="ctx.portal && app" :key="app.user" :portal="ctx.portal" />
|
|
81
|
-
<SettingsSection v-if="app?.admin" :title="copy.greeting" :collapsible="false">
|
|
82
|
-
<Form @submit.prevent="save"><FormItem :label="copy.greeting"><Textarea v-model="text" :disabled="busy" /></FormItem>
|
|
83
|
-
<FormActions><Button variant="primary" :disabled="busy || !text.trim()" @click="save">{{ copy.save }}</Button></FormActions>
|
|
84
|
-
</Form>
|
|
85
|
-
</SettingsSection>
|
|
86
|
-
</div>
|
|
87
|
-
<CapabilityPanels v-if="app" :key="app.user" :ctx="ctx" :admin="app.admin" />
|
|
88
|
-
<FilesPage v-if="page==='status'" :ctx="ctx" />
|
|
89
|
-
<div data-page="background" v-show="page==='background'">
|
|
90
|
-
<!-- BACKGROUND_PANEL -->
|
|
91
|
-
</div>
|
|
92
|
-
</div>
|
|
93
|
-
</AppShell>
|
|
94
|
-
</ConfigProvider>
|
|
95
|
-
</AppRoot>
|
|
96
|
-
</template>
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import type {Context} from './context'
|
|
3
|
-
import ExecutorSettings from './delegate/ExecutorSettings.vue'
|
|
4
|
-
defineProps<{ctx:Context;admin:boolean}>()
|
|
5
|
-
</script>
|
|
6
|
-
<template><ExecutorSettings v-if="ctx.executor" :admin="admin" :locale="ctx.locale" /></template>
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
export interface HostPlatformSnapshot {
|
|
2
|
-
readonly web: boolean
|
|
3
|
-
readonly host: 'dsm' | 'standalone-web' | 'unavailable'
|
|
4
|
-
readonly dsmStandalone: boolean | null
|
|
5
|
-
readonly dsmLanguage: string | null
|
|
6
|
-
readonly appLocale: string | null
|
|
7
|
-
readonly systemVersion: string | null
|
|
8
|
-
readonly fullVersion: string | null
|
|
9
|
-
readonly theme: null
|
|
10
|
-
}
|
|
11
|
-
export type HostTitleResult = {status: 'ok'; target: 'dsm-window' | 'document'} |
|
|
12
|
-
{status: 'unsupported' | 'unavailable' | 'invalid-input' | 'failed'}
|
|
13
|
-
export type HostRequestResult = {status: 'requested'} |
|
|
14
|
-
{status: 'unsupported' | 'unavailable' | 'invalid-input' | 'blocked' | 'failed'}
|
|
15
|
-
export type HostURLResult = {status: 'requested'; windowHandleAvailable: boolean} |
|
|
16
|
-
{status: 'unsupported' | 'unavailable' | 'invalid-input' | 'failed'}
|
|
17
|
-
export type HostEvent = 'window-resize' | 'host-theme-change' | 'host-language-change'
|
|
18
|
-
export type HostSubscriptionResult = {status: 'subscribed'; dispose(): void} |
|
|
19
|
-
{status: 'unsupported' | 'unavailable' | 'invalid-input' | 'failed'}
|
|
20
|
-
export type HostFileNavigationResult = {status: 'requested'; action: 'locate-folder' | 'highlight-file'} |
|
|
21
|
-
{status: 'unsupported' | 'unavailable' | 'invalid-input' | 'failed'}
|
|
22
|
-
export type HostUnsupportedResult = {status: 'unsupported' | 'unavailable'}
|
|
23
|
-
export interface HostAdapter {
|
|
24
|
-
platform(): HostPlatformSnapshot
|
|
25
|
-
setTitle(title: string): HostTitleResult
|
|
26
|
-
activateWindow(): HostRequestResult
|
|
27
|
-
requestClose(): HostRequestResult
|
|
28
|
-
openApp(appId: string): HostRequestResult
|
|
29
|
-
openURL(url: string): HostURLResult
|
|
30
|
-
openFileManager(path: string): HostFileNavigationResult
|
|
31
|
-
revealFile(path: string): HostFileNavigationResult
|
|
32
|
-
openFile(path: string): HostUnsupportedResult
|
|
33
|
-
showFileDetails(paths: readonly string[]): HostUnsupportedResult
|
|
34
|
-
openAppSetting(): HostUnsupportedResult
|
|
35
|
-
subscribe(event: HostEvent, listener: () => void): HostSubscriptionResult
|
|
36
|
-
dispose(): void
|
|
37
|
-
}
|
|
38
|
-
export interface PortalStatus {
|
|
39
|
-
state: 'active' | 'inactive' | 'unavailable'
|
|
40
|
-
// Set when active: https://<the NAS address in use>/<alias>/
|
|
41
|
-
alias?: string
|
|
42
|
-
url?: string
|
|
43
|
-
// An administrator can set or clear the alias here; otherwise Control Panel or nothing.
|
|
44
|
-
canManage: boolean
|
|
45
|
-
controlPanel: boolean
|
|
46
|
-
defaultAlias: string
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
// Rejects {code}: portal_alias_invalid, portal_alias_reserved, portal_alias_in_use, admin_required, portal_unavailable.
|
|
50
|
-
export interface PortalAccess {
|
|
51
|
-
// SDK panel text in DSM's language, keyed like the error codes plus title, link, apply, …
|
|
52
|
-
messages: Record<string, string>
|
|
53
|
-
status(): Promise<PortalStatus>
|
|
54
|
-
apply(alias: string): Promise<PortalStatus>
|
|
55
|
-
disable(): Promise<PortalStatus>
|
|
56
|
-
openControlPanel(): void
|
|
57
|
-
// The SDK's plain panel; Vue apps use portal/PortalSettings.vue instead.
|
|
58
|
-
mountPanel(element: HTMLElement): {refresh(): Promise<void>; dispose(): void}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
export interface Context {
|
|
62
|
-
// Explicit long-running opt-in; bind with createBackgroundSaveFacade and an
|
|
63
|
-
// owner-bound App job metadata provider. Legacy downloads use the other panel.
|
|
64
|
-
delegate?: import('./delegate/long-running').BackgroundSaveFacade
|
|
65
|
-
files?: {endpoint:string;token?:()=>string|undefined}
|
|
66
|
-
displayName?: string
|
|
67
|
-
executor?: import('./delegate/executor-setup').ExecutorSetup
|
|
68
|
-
// DSM's signed-in account. isAdmin only hides or disables administrator
|
|
69
|
-
// settings; the backend enforces access with permissions.json and RequireAdmin.
|
|
70
|
-
user?: {readonly name: string; readonly isAdmin: boolean}
|
|
71
|
-
// DSM Application Portal, present only when dsm-package.yaml declares portal.
|
|
72
|
-
portal?: PortalAccess
|
|
73
|
-
call<T = unknown>(method: string, params?: Record<string, unknown>): Promise<T>
|
|
74
|
-
reopen(fn: () => void): () => void
|
|
75
|
-
locale: string
|
|
76
|
-
host: HostAdapter
|
|
77
|
-
}
|
|
78
|
-
export interface AppStatus {package: string; version: string; user: string; admin: boolean}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import {computed,onBeforeUnmount,onMounted,ref} from 'vue'
|
|
3
|
-
import {Button,Callout,Form,FormActions,FormItem,Input,Select,SettingsSection} from '@synopackageland/ui'
|
|
4
|
-
import type {Context} from '../context'
|
|
5
|
-
import type {ScopeSelection} from './long-running'
|
|
6
|
-
import {useExecutorSetup,type CapabilityStatus} from './executor-setup'
|
|
7
|
-
import {delegateCopy} from './copy'
|
|
8
|
-
const props=defineProps<{admin:boolean;locale?:string;ctx?:Pick<Context,'call'>}>()
|
|
9
|
-
const emit=defineEmits<{confirmed:[]}>()
|
|
10
|
-
const setup=useExecutorSetup(),copy=computed(()=>delegateCopy(props.locale))
|
|
11
|
-
const status=ref<CapabilityStatus>(),password=ref(''),busy=ref(false),error=ref(false)
|
|
12
|
-
const scope=ref<{scope_mode?:string;preselection?:string;selection?:ScopeSelection|null;mismatch?:boolean}>(),chosen=ref(''),shares=ref<Array<{label:string;value:string}>>([])
|
|
13
|
-
const dynamic=computed(()=>scope.value?.scope_mode==='install-selected')
|
|
14
|
-
const options=computed(()=>[{label:copy.value.homeScope,value:'home'},...shares.value])
|
|
15
|
-
const canConfirm=computed(()=>!dynamic.value||!!chosen.value&&options.value.some(o=>o.value===chosen.value))
|
|
16
|
-
const needsScope=computed(()=>dynamic.value&&!scope.value?.selection)
|
|
17
|
-
const changed=computed(()=>chosen.value!==scope.value?.selection?.scope)
|
|
18
|
-
let disposed=false
|
|
19
|
-
async function load(approved?:CapabilityStatus){
|
|
20
|
-
const next=approved??await setup.status()
|
|
21
|
-
if(disposed)return
|
|
22
|
-
status.value=next
|
|
23
|
-
if(!props.ctx)return
|
|
24
|
-
const detail=await props.ctx.call<NonNullable<typeof scope.value>>('delegate.status')
|
|
25
|
-
if(disposed)return
|
|
26
|
-
scope.value=detail
|
|
27
|
-
if(detail.scope_mode!=='install-selected')return
|
|
28
|
-
const all:Array<{label:string;value:string}>=[]
|
|
29
|
-
let offset=0
|
|
30
|
-
for(let count=0;count<128;count++){
|
|
31
|
-
const page=await props.ctx.call<{shares:Array<{name:string;path:string;isdir:boolean}>;total:number;offset:number}>('bg.browse',{offset})
|
|
32
|
-
if(disposed)return
|
|
33
|
-
if(!Array.isArray(page.shares)||!Number.isSafeInteger(page.total)||page.total<0||!page.shares.length&&offset<page.total)throw {code:'EXECUTOR_PROTOCOL'}
|
|
34
|
-
for(const entry of page.shares){if(entry.isdir&&entry.path==='/'+entry.name&&!['home','homes'].includes(entry.name.toLowerCase()))all.push({label:entry.name,value:'shared:'+entry.name})}
|
|
35
|
-
offset+=page.shares.length
|
|
36
|
-
if(offset>=page.total)break
|
|
37
|
-
if(count===127)throw {code:'EXECUTOR_PROTOCOL'}
|
|
38
|
-
}
|
|
39
|
-
shares.value=all
|
|
40
|
-
chosen.value=detail.selection?.scope??detail.preselection??''
|
|
41
|
-
}
|
|
42
|
-
async function refresh(){if(!props.admin||busy.value)return;busy.value=true;error.value=false;try{await load()}catch{if(!disposed)error.value=true}finally{if(!disposed)busy.value=false}}
|
|
43
|
-
async function authorize(){
|
|
44
|
-
if(!props.admin||busy.value||!password.value||!canConfirm.value||error.value)return
|
|
45
|
-
busy.value=true;error.value=false;const entered=password.value;password.value=''
|
|
46
|
-
try{const next=dynamic.value?await setup.authorize(entered,chosen.value):await setup.authorize(entered);await load(next);if(!disposed)emit('confirmed')}
|
|
47
|
-
catch{if(!disposed)error.value=true}
|
|
48
|
-
finally{if(!disposed)busy.value=false}
|
|
49
|
-
}
|
|
50
|
-
onMounted(()=>{setup.subscribe?.(next=>{if(!disposed)status.value=next});void refresh()});onBeforeUnmount(()=>{disposed=true;password.value=''})
|
|
51
|
-
</script>
|
|
52
|
-
<template>
|
|
53
|
-
<SettingsSection v-if="admin" :title="copy.setupTitle" :collapsible="false" :aria-busy="busy">
|
|
54
|
-
<p>{{ copy.setupHelp }}</p>
|
|
55
|
-
<Callout v-if="error" tone="danger" role="alert">{{ copy.setupError }}</Callout>
|
|
56
|
-
<p role="status">{{ status?.state==='ready'?(needsScope?copy.scopeNeeds:copy.ready):status?.state==='needs-admin-approval'?copy.needs:copy.blocked }}</p>
|
|
57
|
-
<p v-if="status?.reason&&(status.state==='blocked'||status.state==='unsupported')">{{ copy.details }}: {{ status.reason }}</p>
|
|
58
|
-
<p v-if="scope?.selection">{{ copy.protectedScope }}: {{ scope.selection.root }}</p>
|
|
59
|
-
<Callout v-if="scope?.mismatch" tone="warning">{{ copy.scopeMismatch }} {{ copy.preselection }}: {{ scope.preselection }} · {{ copy.protectedScope }}: {{ scope.selection?.root }}</Callout>
|
|
60
|
-
<Form v-if="status?.state==='needs-admin-approval'||status?.retry||dynamic&&status?.state==='ready'" @submit.prevent="authorize">
|
|
61
|
-
<template v-if="dynamic">
|
|
62
|
-
<p>{{ scope?.selection?copy.scopeChangeHelp:copy.preselectionHelp }}</p>
|
|
63
|
-
<FormItem :label="copy.scopeLabel" label-for="delegate-scope"><Select id="delegate-scope" v-model="chosen" :options="options" :disabled="busy||error" /></FormItem>
|
|
64
|
-
</template>
|
|
65
|
-
<FormItem :label="copy.password" label-for="delegate-password"><Input id="delegate-password" v-model="password" type="password" autocomplete="current-password" :disabled="busy||error" /></FormItem>
|
|
66
|
-
<FormActions><Button type="submit" variant="primary" :disabled="busy||error||!password||!canConfirm||dynamic&&!!scope?.selection&&!changed">{{ dynamic?(scope?.selection?copy.confirmScope:copy.confirmShare):copy.authorize }}</Button></FormActions>
|
|
67
|
-
</Form>
|
|
68
|
-
<Button variant="secondary" :disabled="busy" @click="refresh">{{ copy.refresh }}</Button>
|
|
69
|
-
</SettingsSection>
|
|
70
|
-
</template>
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import en from './i18n/en.json'
|
|
2
|
-
import zhTW from './i18n/zh-TW.json'
|
|
3
|
-
import zhCN from './i18n/zh-CN.json'
|
|
4
|
-
import ja from './i18n/ja.json'
|
|
5
|
-
import ko from './i18n/ko.json'
|
|
6
|
-
import de from './i18n/de.json'
|
|
7
|
-
import fr from './i18n/fr.json'
|
|
8
|
-
import es from './i18n/es.json'
|
|
9
|
-
import it from './i18n/it.json'
|
|
10
|
-
export type DelegateCopy=typeof en
|
|
11
|
-
export const delegateCatalogs:Record<string,DelegateCopy>={en,'zh-TW':zhTW,'zh-CN':zhCN,ja,ko,de,fr,es,it}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import {expect,test} from 'vitest'
|
|
2
|
-
import {delegateCopy} from './copy'
|
|
3
|
-
import {saveCopy} from './save-copy'
|
|
4
|
-
import zhCN from './i18n/zh-CN.json'
|
|
5
|
-
import saveJa from './i18n/save/ja.json'
|
|
6
|
-
test('delegate and save copy follow the DSM language across all nine catalogs',()=>{
|
|
7
|
-
expect(delegateCopy('chs')).toMatchObject(zhCN)
|
|
8
|
-
expect(delegateCopy('zh_CN')).toMatchObject(zhCN)
|
|
9
|
-
expect(saveCopy('jpn')).toEqual(saveJa)
|
|
10
|
-
expect(delegateCopy('unknown').refresh).toBe('Refresh')
|
|
11
|
-
expect(saveCopy().refresh).toBe('Refresh')
|
|
12
|
-
})
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import {uiLocale} from '../nas/locale'
|
|
2
|
-
import {delegateCatalogs,type DelegateCopy} from './catalogs'
|
|
3
|
-
export function delegateCopy(locale='en'){return delegateCatalogs[uiLocale(locale)]!}
|
|
4
|
-
export function errorCopy(error:unknown,copy:DelegateCopy){const code=(error as {code?:string})?.code;return ['session_required','AUTH_DENIED'].includes(code??'')?copy.session:['DENIED','SCOPE_DENIED','PERMISSION_DENIED','APP_DENIED','INELIGIBLE','denied'].includes(code??'')?copy.denied:copy.error}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
// @vitest-environment jsdom
|
|
2
|
-
import {expect,test} from 'vitest'
|
|
3
|
-
import {createApp,h,nextTick} from 'vue'
|
|
4
|
-
import {AppRoot} from '@synopackageland/ui'
|
|
5
|
-
import ExecutorSettings from './ExecutorSettings.vue'
|
|
6
|
-
import {ExecutorSetupKey,type CapabilityStatus} from './executor-setup'
|
|
7
|
-
const settle=async()=>{for(let i=0;i<10;i++){await nextTick();await new Promise(r=>setTimeout(r))}}
|
|
8
|
-
// t-0237: a wrong password left only "Check status"; a retryable result keeps the form.
|
|
9
|
-
test('a retryable blocked approval keeps the password form for another try',async()=>{
|
|
10
|
-
const blocked:CapabilityStatus&{retry:boolean}={state:'blocked',reason:'dsm_3121: DSM rejected the administrator password. Nothing was created.',retry:true}
|
|
11
|
-
const setup={async status():Promise<CapabilityStatus>{return {state:'needs-admin-approval'}},async authorize(){return blocked},async control(){return blocked}}
|
|
12
|
-
const root=document.createElement('div');document.body.append(root)
|
|
13
|
-
const app=createApp({render:()=>h(AppRoot,{},()=>h(ExecutorSettings,{admin:true,locale:'en'}))})
|
|
14
|
-
app.provide(ExecutorSetupKey,setup)
|
|
15
|
-
try{
|
|
16
|
-
app.mount(root);await settle()
|
|
17
|
-
const input=root.querySelector<HTMLInputElement>('#delegate-password')!
|
|
18
|
-
input.value='wrong';input.dispatchEvent(new Event('input'));await settle()
|
|
19
|
-
root.querySelector('form')!.dispatchEvent(new Event('submit'));await settle()
|
|
20
|
-
expect(root.textContent).toContain('dsm_3121')
|
|
21
|
-
expect(root.querySelector('#delegate-password')).not.toBeNull()
|
|
22
|
-
}finally{app.unmount();root.remove()}
|
|
23
|
-
})
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import {inject,type InjectionKey} from 'vue'
|
|
2
|
-
export type CapabilityState='unsupported'|'needs-admin-approval'|'ready'|'blocked'|'incompatible'
|
|
3
|
-
// requested: a scope change whose root task may still land; it applied once
|
|
4
|
-
// status() reports that scope with a generation above this one.
|
|
5
|
-
// retry: approving again may succeed: nothing of this approval is left behind, or
|
|
6
|
-
// the approved tasks remain and approving again restarts the executor.
|
|
7
|
-
export interface CapabilityStatus {state:CapabilityState;reason?:string;requested?:{scope:string;generation:number};retry?:boolean}
|
|
8
|
-
// p2-setup supplies the implementation through app.provide(ExecutorSetupKey, setup).
|
|
9
|
-
// Passwords belong only to this call and must never be persisted or logged.
|
|
10
|
-
export interface ExecutorSetup {
|
|
11
|
-
status():Promise<CapabilityStatus>
|
|
12
|
-
authorize(password:string,selectedScope?:string):Promise<CapabilityStatus>
|
|
13
|
-
control(action:'start'|'stop'|'purge'):Promise<CapabilityStatus>
|
|
14
|
-
// Results of calls made elsewhere (the DSM window panel) on the same access.
|
|
15
|
-
subscribe?(listener:(status:CapabilityStatus)=>void):void
|
|
16
|
-
}
|
|
17
|
-
export const ExecutorSetupKey:InjectionKey<ExecutorSetup>=Symbol('executor-setup')
|
|
18
|
-
export function useExecutorSetup():ExecutorSetup {
|
|
19
|
-
return inject(ExecutorSetupKey,{
|
|
20
|
-
async status(){return {state:'blocked',reason:'setup-unavailable'}},
|
|
21
|
-
async authorize(){throw {code:'setup-unavailable'}},
|
|
22
|
-
async control(){throw {code:'setup-unavailable'}},
|
|
23
|
-
})
|
|
24
|
-
}
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import {expect,test,vi} from 'vitest'
|
|
2
|
-
import {createBackgroundSaveFacade} from './facade'
|
|
3
|
-
test('destination lookup returns protected selection and rejects a grant outside its root',async()=>{
|
|
4
|
-
const selection={scope:'shared:reports',root:'/reports',generation:2}
|
|
5
|
-
const destination={id:'mine',key:'save',path:'/reports/exports',username:'alice',lifetime:'until-revoked'}
|
|
6
|
-
const call=vi.fn(async()=>({key:'save',selection,destination,status:'active'}))
|
|
7
|
-
const sdk=createBackgroundSaveFacade({call:call as any})
|
|
8
|
-
expect(await sdk.destination('save')).toEqual({key:'save',selection,destination,status:'active'})
|
|
9
|
-
expect(call).toHaveBeenCalledExactlyOnceWith('delegate.destination',{key:'save'})
|
|
10
|
-
call.mockResolvedValue({key:'save',selection,destination:{...destination,path:'/other'},status:'active'})
|
|
11
|
-
await expect(sdk.destination('save')).rejects.toMatchObject({code:'EXECUTOR_PROTOCOL'})
|
|
12
|
-
})
|
|
13
|
-
const ref={delegation_id:'mine',job_id:'original'}
|
|
14
|
-
test('operation cancellation keeps its bounded readable cause through the facade',async()=>{
|
|
15
|
-
const call=vi.fn(async()=>({job_id:'original',state:'canceled',code:'OPERATION_CANCELED',reason:'grant-revoked'}))
|
|
16
|
-
const sdk=createBackgroundSaveFacade({call:call as any})
|
|
17
|
-
expect(await sdk.cancel(ref)).toMatchObject({state:'canceled',reason:'grant-revoked'})
|
|
18
|
-
for(const reason of [123, 'x'.repeat(129), 'raw DSM response /path']){
|
|
19
|
-
call.mockResolvedValue({...await call(),reason} as any)
|
|
20
|
-
await expect(sdk.cancel(ref)).rejects.toMatchObject({code:'EXECUTOR_PROTOCOL'})
|
|
21
|
-
}
|
|
22
|
-
})
|
|
23
|
-
test('a copy cancel acknowledgement passes through unchanged for same-ref polling',async()=>{
|
|
24
|
-
const ack={job_id:'original',state:'copying',code:'CANCEL_REQUESTED',reason:'operation-canceled-by-user'}
|
|
25
|
-
const call=vi.fn(async()=>ack)
|
|
26
|
-
expect(await createBackgroundSaveFacade({call:call as any}).cancel(ref)).toEqual(ack)
|
|
27
|
-
expect(call).toHaveBeenCalledWith('delegate.operations.cancel',ref)
|
|
28
|
-
})
|
|
29
|
-
const grant={delegation_id:'mine',destination:'save',path:'/home/Exports',subject:{username:'normal1',uid:1205},lifetime:'until-revoked',revoked:false}
|
|
30
|
-
function fixture(){
|
|
31
|
-
const call=vi.fn(async(method:string)=>{
|
|
32
|
-
if(method==='delegate.status')return {state:'ready',disabled:false}
|
|
33
|
-
if(method==='delegate.list')return {delegations:[grant,{...grant,delegation_id:'revoked',revoked:true},{...grant,delegation_id:'legacy',lifetime:''}]}
|
|
34
|
-
if(method==='delegate.operations.get')return {job_id:'original',state:'committed',receipt:{path:'/home/Exports/report.csv',size:4}}
|
|
35
|
-
if(method==='delegate.operations.cancel')return {job_id:'original',state:'canceled'}
|
|
36
|
-
if(method==='delegate.revoke')return {revoked:true}
|
|
37
|
-
if(method==='delegate.disable')return {disabled:true}
|
|
38
|
-
if(method==='delegate.enable')return {disabled:false}
|
|
39
|
-
if(method==='delegate.select_destination')return {id:'mine',key:'save',path:'/home/Exports',username:'normal1',lifetime:'until-revoked'}
|
|
40
|
-
throw {code:'unknown_method'}
|
|
41
|
-
})
|
|
42
|
-
const jobs=vi.fn(async()=>[{...ref,name:'report.csv'}])
|
|
43
|
-
return {call,jobs,sdk:createBackgroundSaveFacade({call:call as any},jobs)}
|
|
44
|
-
}
|
|
45
|
-
test('W2 list is mapped to active permanent destinations without changing owner or legacy semantics',async()=>{
|
|
46
|
-
const {sdk,call}=fixture()
|
|
47
|
-
expect(await sdk.list()).toEqual([{id:'mine',key:'save',path:'/home/Exports',username:'normal1',lifetime:'until-revoked'}])
|
|
48
|
-
expect(call).toHaveBeenCalledExactlyOnceWith('delegate.list')
|
|
49
|
-
await sdk.selectDestination({key:'save',path:'/home/Exports'})
|
|
50
|
-
expect(call).toHaveBeenLastCalledWith('delegate.select_destination',{key:'save',path:'/home/Exports'})
|
|
51
|
-
})
|
|
52
|
-
test('App metadata is joined with protected status by the original two IDs, never a synthetic list route',async()=>{
|
|
53
|
-
const {sdk,call,jobs}=fixture()
|
|
54
|
-
expect(await sdk.operations()).toEqual([{...ref,name:'report.csv',state:'committed',receipt:{path:'/home/Exports/report.csv',size:4}}])
|
|
55
|
-
expect(jobs).toHaveBeenCalledOnce()
|
|
56
|
-
expect(call).toHaveBeenCalledExactlyOnceWith('delegate.operations.get',ref)
|
|
57
|
-
await sdk.cancel(ref);expect(call).toHaveBeenLastCalledWith('delegate.operations.cancel',ref)
|
|
58
|
-
await sdk.revoke({delegation_id:'mine'});expect(call).toHaveBeenLastCalledWith('delegate.revoke',{delegation_id:'mine'})
|
|
59
|
-
})
|
|
60
|
-
test('missing protected disabled status cannot be reported as enabled',async()=>{
|
|
61
|
-
const {sdk,call}=fixture();call.mockResolvedValue({state:'ready'} as any)
|
|
62
|
-
await expect(sdk.status()).rejects.toMatchObject({code:'EXECUTOR_PROTOCOL'})
|
|
63
|
-
})
|
|
64
|
-
test('malformed grant and App metadata references cannot be coerced into valid IDs',async()=>{
|
|
65
|
-
const {sdk,call}=fixture()
|
|
66
|
-
call.mockResolvedValue({delegations:[{...grant,delegation_id:undefined}]} as any)
|
|
67
|
-
await expect(sdk.list()).rejects.toMatchObject({code:'EXECUTOR_PROTOCOL'})
|
|
68
|
-
const invalid=createBackgroundSaveFacade({call:call as any},async()=>[{job_id:undefined,delegation_id:'mine',name:'report.csv'}] as any)
|
|
69
|
-
await expect(invalid.operations()).rejects.toMatchObject({code:'EXECUTOR_PROTOCOL'})
|
|
70
|
-
expect(call).toHaveBeenCalledTimes(1)
|
|
71
|
-
})
|
|
72
|
-
test('malformed or mismatched operation evidence never becomes Saved',async()=>{
|
|
73
|
-
for(const value of [{job_id:'other',state:'committed',receipt:{path:'/home/a',size:1}},{job_id:'original',state:'committed'},{job_id:'original',state:'copying',receipt:{path:'/home/a',size:1}},{job_id:'original',state:'committed',receipt:{path:'/home/a',size:-1}}]){
|
|
74
|
-
const {sdk,call}=fixture();call.mockResolvedValue(value as any)
|
|
75
|
-
await expect(sdk.operations()).rejects.toMatchObject({code:'EXECUTOR_PROTOCOL'})
|
|
76
|
-
}
|
|
77
|
-
})
|
|
78
|
-
test('read timeout never admits or resubmits an operation',async()=>{
|
|
79
|
-
const {sdk,call}=fixture();call.mockRejectedValue({code:'EXECUTOR_TIMEOUT'})
|
|
80
|
-
await expect(sdk.operations()).rejects.toMatchObject({code:'EXECUTOR_TIMEOUT'})
|
|
81
|
-
expect(call).toHaveBeenCalledExactlyOnceWith('delegate.operations.get',ref)
|
|
82
|
-
})
|
|
83
|
-
test('disable and enable use authenticated protected routes, not mailbox controls',async()=>{
|
|
84
|
-
const {sdk,call}=fixture()
|
|
85
|
-
expect(await sdk.status()).toEqual({disabled:false})
|
|
86
|
-
expect(await sdk.disable()).toEqual({disabled:true});expect(call).toHaveBeenLastCalledWith('delegate.disable')
|
|
87
|
-
expect(await sdk.enable()).toEqual({disabled:false});expect(call).toHaveBeenLastCalledWith('delegate.enable')
|
|
88
|
-
call.mockResolvedValue({} as any);await expect(sdk.disable()).rejects.toMatchObject({code:'EXECUTOR_PROTOCOL'})
|
|
89
|
-
})
|
|
90
|
-
test('the default facade lists backend mirrors but ignores their committed claim until live receipt',async()=>{
|
|
91
|
-
const {call}=fixture()
|
|
92
|
-
call.mockImplementation(async(method:string)=>{
|
|
93
|
-
if(method==='delegate.operations.list')return {operations:[{...ref,name:'report.csv',state:'committed'}]} as any
|
|
94
|
-
if(method==='delegate.operations.get')return {job_id:'original',state:'uncertain'} as any
|
|
95
|
-
throw {code:'unexpected'}
|
|
96
|
-
})
|
|
97
|
-
const sdk=createBackgroundSaveFacade({call:call as any})
|
|
98
|
-
expect(await sdk.operations()).toEqual([{...ref,name:'report.csv',state:'uncertain'}])
|
|
99
|
-
expect(call.mock.calls).toEqual([['delegate.operations.list'],['delegate.operations.get',ref]])
|
|
100
|
-
})
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import type {Context} from '../context'
|
|
2
|
-
import type {BackgroundSaveFacade,DestinationGrant,DestinationState,ScopeSelection,OperationRef,OperationResult,SaveOperation} from './long-running'
|
|
3
|
-
// Supply an owner-bound App backend view, not browser storage or an executor list.
|
|
4
|
-
// Producers persist these references alongside their own business job metadata.
|
|
5
|
-
export interface AppSaveJob extends OperationRef {name:string;refusal?:string}
|
|
6
|
-
const token=/^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$/
|
|
7
|
-
const id=(value:unknown):value is string=>typeof value==='string'&&token.test(value)
|
|
8
|
-
const validRef=(ref:OperationRef)=>ref&&id(ref.delegation_id)&&id(ref.job_id)
|
|
9
|
-
const path=(value:unknown):value is string=>typeof value==='string'&&value.startsWith('/')&&value!=='/'&&!value.includes('\0')&&!value.slice(1).split('/').some(part=>!part||part==='.'||part==='..')
|
|
10
|
-
function protocol():never{throw {code:'EXECUTOR_PROTOCOL'}}
|
|
11
|
-
function validSelection(value:ScopeSelection){return value&&Number.isSafeInteger(value.generation)&&value.generation>=0&&path(value.root)&&(value.scope==='home'?value.root==='/home':value.scope.startsWith('shared:')&&value.root==='/'+value.scope.slice(7))}
|
|
12
|
-
function result(value:OperationResult,ref:OperationRef):OperationResult{
|
|
13
|
-
if(!value||value.job_id!==ref.job_id||!['queued','copying','committed','canceled','interrupted','uncertain'].includes(value.state))protocol()
|
|
14
|
-
if(value.state==='committed'){
|
|
15
|
-
if(!value.receipt||!path(value.receipt.path)||!Number.isSafeInteger(value.receipt.size)||value.receipt.size<0||value.receipt.size>16*1024**3)protocol()
|
|
16
|
-
}else if(value.receipt!==undefined)protocol()
|
|
17
|
-
if(value.reason!==undefined&&(typeof value.reason!=='string'||!/^[A-Za-z][A-Za-z0-9_-]{0,127}$/.test(value.reason)))protocol()
|
|
18
|
-
return {job_id:value.job_id,state:value.state,...(value.receipt?{receipt:{...value.receipt}}:{}),...(value.code?{code:value.code}:{}),...(value.reason?{reason:value.reason}:{})}
|
|
19
|
-
}
|
|
20
|
-
/** Bind the portable UI facade to W2's existing authenticated routes. */
|
|
21
|
-
export function createBackgroundSaveFacade(ctx:Pick<Context,'call'>,jobs:()=>Promise<readonly AppSaveJob[]>=async()=>{
|
|
22
|
-
const out=await ctx.call<{operations:AppSaveJob[]}>('delegate.operations.list')
|
|
23
|
-
if(!Array.isArray(out?.operations))protocol()
|
|
24
|
-
return out.operations
|
|
25
|
-
}):BackgroundSaveFacade{
|
|
26
|
-
const operation=async(method:string,ref:OperationRef)=>{
|
|
27
|
-
if(!validRef(ref))protocol()
|
|
28
|
-
return result(await ctx.call<OperationResult>(method,{delegation_id:ref.delegation_id,job_id:ref.job_id}),ref)
|
|
29
|
-
}
|
|
30
|
-
return {
|
|
31
|
-
async destination(key){
|
|
32
|
-
if(!id(key))protocol()
|
|
33
|
-
const out=await ctx.call<DestinationState>('delegate.destination',{key})
|
|
34
|
-
if(!out||out.key!==key||!['active','missing','reselection-required','needs-scope-confirmation','disabled'].includes(out.status)||out.selection!==null&&!validSelection(out.selection))protocol()
|
|
35
|
-
if(out.status==='active'){
|
|
36
|
-
const g=out.destination,s=out.selection
|
|
37
|
-
if(!g||!s||!id(g.id)||g.key!==key||g.lifetime!=='until-revoked'||!g.username||!path(g.path)||!(g.path===s.root||g.path.startsWith(s.root+'/')))protocol()
|
|
38
|
-
}else if(out.destination!==null)protocol()
|
|
39
|
-
return out
|
|
40
|
-
},
|
|
41
|
-
async exportExample(input){
|
|
42
|
-
if(!id(input.key)||!id(input.job_id))protocol()
|
|
43
|
-
const out=await ctx.call<OperationRef>('delegate.example.export',{key:input.key,job_id:input.job_id})
|
|
44
|
-
if(!validRef(out)||out.job_id!==input.job_id)protocol()
|
|
45
|
-
return out
|
|
46
|
-
},
|
|
47
|
-
selectDestination:input=>ctx.call<DestinationGrant>('delegate.select_destination',{key:input.key,path:input.path}),
|
|
48
|
-
async status(){
|
|
49
|
-
const value=await ctx.call<{state:string;disabled?:boolean;scope_mode?:string;preselection?:string;selection?:ScopeSelection|null;mismatch?:boolean}>('delegate.status')
|
|
50
|
-
// Capability readiness and the protected admission switch are independent.
|
|
51
|
-
if(!['ready','disabled','needs-scope-confirmation'].includes(value?.state))throw {code:'EXECUTOR_UNAVAILABLE'}
|
|
52
|
-
if(typeof value?.disabled!=='boolean')protocol()
|
|
53
|
-
if(value.selection&&!validSelection(value.selection))protocol()
|
|
54
|
-
return {disabled:value.disabled,...(value.scope_mode?{scopeMode:value.scope_mode,selection:value.selection??null,preselection:value.preselection,mismatch:value.mismatch}:{} )}
|
|
55
|
-
},
|
|
56
|
-
async list(){
|
|
57
|
-
const value=await ctx.call<{delegations:Array<{delegation_id:string;destination:string;path:string;subject:{username:string};lifetime:string;revoked:boolean}>}>('delegate.list')
|
|
58
|
-
if(!Array.isArray(value?.delegations))protocol()
|
|
59
|
-
return value.delegations.filter(g=>g.lifetime==='until-revoked'&&!g.revoked).map(g=>{
|
|
60
|
-
if(!id(g.delegation_id)||typeof g.destination!=='string'||!g.destination||!path(g.path)||typeof g.subject?.username!=='string'||!g.subject.username)protocol()
|
|
61
|
-
return {id:g.delegation_id,key:g.destination,path:g.path,username:g.subject.username,lifetime:'until-revoked' as const}
|
|
62
|
-
})
|
|
63
|
-
},
|
|
64
|
-
async operations(){
|
|
65
|
-
const metadata=await jobs()
|
|
66
|
-
return Promise.all(metadata.map(async job=>{
|
|
67
|
-
if(typeof job?.name!=='string'||!job.name||!validRef(job))protocol()
|
|
68
|
-
const ref={delegation_id:job.delegation_id,job_id:job.job_id}
|
|
69
|
-
try{return {...ref,name:job.name,...await operation('delegate.operations.get',ref)} satisfies SaveOperation}
|
|
70
|
-
catch(e){
|
|
71
|
-
if(job.refusal&&(e as {code?:string})?.code==='operation-not-found')return {...ref,name:job.name,state:'interrupted',code:job.refusal} satisfies SaveOperation
|
|
72
|
-
throw e
|
|
73
|
-
}
|
|
74
|
-
}))
|
|
75
|
-
},
|
|
76
|
-
async revoke(input){
|
|
77
|
-
const out=await ctx.call<{revoked:boolean}>('delegate.revoke',{delegation_id:input.delegation_id})
|
|
78
|
-
if(out?.revoked!==true)protocol()
|
|
79
|
-
return {revoked:true}
|
|
80
|
-
},
|
|
81
|
-
cancel:ref=>operation('delegate.operations.cancel',ref),
|
|
82
|
-
async disable(){const out=await ctx.call<{disabled:boolean}>('delegate.disable');if(out?.disabled!==true)protocol();return {disabled:true}},
|
|
83
|
-
async enable(){const out=await ctx.call<{disabled:boolean}>('delegate.enable');if(out?.disabled!==false)protocol();return {disabled:false}},
|
|
84
|
-
}
|
|
85
|
-
}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"title": "Dateizugriff im Hintergrund",
|
|
3
|
-
"help": "Downloads laufen weiter, nachdem Sie diese App schließen. Jeder Auftrag darf bis zu einer Stunde lang nur in den ausgewählten Ordner schreiben. Vorhandene Dateien werden nie ersetzt.",
|
|
4
|
-
"setupTitle": "Administratoreinrichtung",
|
|
5
|
-
"setupHelp": "Genehmigen Sie diese App einmal, damit sie Dateiaufträge abschließen kann, während Benutzer offline sind.",
|
|
6
|
-
"password": "DSM-Passwort",
|
|
7
|
-
"authorize": "Dateizugriff im Hintergrund genehmigen",
|
|
8
|
-
"confirmShare": "Freigegebenen Ordner bestätigen",
|
|
9
|
-
"scopeNeeds": "Der freigegebene Ordner muss bestätigt werden. Wählen Sie unten einen freigegebenen Ordner und bestätigen Sie ihn mit Ihrem DSM-Passwort.",
|
|
10
|
-
"ready": "Der Dateizugriff im Hintergrund ist bereit.",
|
|
11
|
-
"needs": "Ein Administrator muss den Dateizugriff im Hintergrund genehmigen.",
|
|
12
|
-
"blocked": "Der Dateizugriff im Hintergrund ist nicht verfügbar. Bitten Sie einen Administrator, die App-Einrichtung zu prüfen.",
|
|
13
|
-
"details": "Details",
|
|
14
|
-
"refresh": "Aktualisieren",
|
|
15
|
-
"revoke": "Widerrufen",
|
|
16
|
-
"cancel": "Auftrag abbrechen",
|
|
17
|
-
"noDelegations": "Sie haben keine aktiven Delegierungen.",
|
|
18
|
-
"delegations": "Meine Delegierungen",
|
|
19
|
-
"expires": "Ablauf",
|
|
20
|
-
"downloads": "Meine Downloads",
|
|
21
|
-
"noJobs": "Sie haben keine Download-Aufträge.",
|
|
22
|
-
"url": "Download-URL",
|
|
23
|
-
"name": "Dateiname",
|
|
24
|
-
"choose": "Ordner auswählen",
|
|
25
|
-
"submit": "In meinen Ordner herunterladen",
|
|
26
|
-
"destination": "Ziel",
|
|
27
|
-
"pending": "Auftrag abgebrochen. Der Widerruf steht noch aus; die App versucht es erneut.",
|
|
28
|
-
"error": "Die Aktion konnte nicht abgeschlossen werden. Aktualisieren Sie die Ansicht und versuchen Sie es erneut. Wenn der Fehler bestehen bleibt, wenden Sie sich an Ihren Administrator.",
|
|
29
|
-
"setupError": "Die Genehmigung konnte nicht abgeschlossen werden. Geben Sie Ihr DSM-Passwort erneut ein und versuchen Sie es noch einmal, oder prüfen Sie die App-Einrichtung.",
|
|
30
|
-
"denied": "Der Zugriff wurde verweigert. Prüfen Sie Ihre Ordnerberechtigungen und versuchen Sie es erneut.",
|
|
31
|
-
"session": "Melden Sie sich erneut bei DSM an und aktualisieren Sie dann die Ansicht.",
|
|
32
|
-
"size": "Downloads sind auf 64 MB und 60 Sekunden begrenzt.",
|
|
33
|
-
"queued": "In Warteschlange",
|
|
34
|
-
"running": "Wird heruntergeladen",
|
|
35
|
-
"succeeded": "Gespeichert",
|
|
36
|
-
"failed": "Fehlgeschlagen",
|
|
37
|
-
"canceled": "Abgebrochen",
|
|
38
|
-
"interrupted": "Unterbrochen",
|
|
39
|
-
"homeScope": "Home-Ordner jedes Benutzers",
|
|
40
|
-
"scopeLabel": "Bereich für Speichern im Hintergrund",
|
|
41
|
-
"protectedScope": "Bestätigter Bereich",
|
|
42
|
-
"preselection": "Vorauswahl bei der Installation",
|
|
43
|
-
"preselectionHelp": "Die Vorauswahl bei der Installation ist nur ein Vorschlag. Bestätigen Sie diesen Bereich mit Ihrem DSM-Passwort, wenn Sie den Hintergrundzugriff aktivieren.",
|
|
44
|
-
"scopeMismatch": "Die Vorauswahl bei der Installation weicht vom bestätigten Bereich ab. Speichervorgänge im Hintergrund folgen dem bestätigten Bereich.",
|
|
45
|
-
"scopeChangeHelp": "Eine Änderung des Bereichs widerruft vorhandene Ziele und bricht ausstehende Speichervorgänge ab. Benutzer müssen ihre Ziele neu auswählen. Bereits gespeicherte Dateien bleiben erhalten.",
|
|
46
|
-
"confirmScope": "Bereichsänderung bestätigen"
|
|
47
|
-
}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"title": "Background file access",
|
|
3
|
-
"help": "Downloads continue after you close this app. Each job can write only to the folder you select, for up to one hour. Existing files are never replaced.",
|
|
4
|
-
"setupTitle": "Administrator setup",
|
|
5
|
-
"setupHelp": "Approve this app once to let it complete file jobs while users are offline.",
|
|
6
|
-
"password": "DSM password",
|
|
7
|
-
"authorize": "Approve background file access",
|
|
8
|
-
"confirmShare": "Confirm share",
|
|
9
|
-
"scopeNeeds": "Share needs confirmation. Choose a share below and confirm it with your DSM password.",
|
|
10
|
-
"ready": "Background file access is ready.",
|
|
11
|
-
"needs": "An administrator must approve background file access.",
|
|
12
|
-
"blocked": "Background file access is unavailable. Ask an administrator to check the app setup.",
|
|
13
|
-
"details": "Details",
|
|
14
|
-
"refresh": "Refresh",
|
|
15
|
-
"revoke": "Revoke",
|
|
16
|
-
"cancel": "Cancel job",
|
|
17
|
-
"noDelegations": "You have no active delegations.",
|
|
18
|
-
"delegations": "My delegations",
|
|
19
|
-
"expires": "Expires",
|
|
20
|
-
"downloads": "My downloads",
|
|
21
|
-
"noJobs": "You have no download jobs.",
|
|
22
|
-
"url": "Download URL",
|
|
23
|
-
"name": "File name",
|
|
24
|
-
"choose": "Choose folder",
|
|
25
|
-
"submit": "Download to my folder",
|
|
26
|
-
"destination": "Destination",
|
|
27
|
-
"pending": "Job canceled. Revocation is pending; the app will retry.",
|
|
28
|
-
"error": "The action could not be completed. Refresh and try again. If it keeps failing, contact your administrator.",
|
|
29
|
-
"setupError": "Approval could not be completed. Re-enter your DSM password and try again, or check the app setup.",
|
|
30
|
-
"denied": "Access was refused. Check your folder permissions and try again.",
|
|
31
|
-
"session": "Sign in to DSM again, then refresh.",
|
|
32
|
-
"size": "Downloads are limited to 64 MB and 60 seconds.",
|
|
33
|
-
"queued": "Queued",
|
|
34
|
-
"running": "Downloading",
|
|
35
|
-
"succeeded": "Saved",
|
|
36
|
-
"failed": "Failed",
|
|
37
|
-
"canceled": "Canceled",
|
|
38
|
-
"interrupted": "Interrupted",
|
|
39
|
-
"homeScope": "Each user’s home folder",
|
|
40
|
-
"scopeLabel": "Background save scope",
|
|
41
|
-
"protectedScope": "Confirmed scope",
|
|
42
|
-
"preselection": "Installer pre-selection",
|
|
43
|
-
"preselectionHelp": "The installer pre-selection is a suggestion. Confirm this scope with your DSM password when enabling background access.",
|
|
44
|
-
"scopeMismatch": "The installer pre-selection differs from the confirmed scope. Background saves follow the confirmed scope.",
|
|
45
|
-
"scopeChangeHelp": "Changing the scope revokes existing destinations and cancels pending saves. Users must choose destinations again. Saved files remain.",
|
|
46
|
-
"confirmScope": "Confirm scope change"
|
|
47
|
-
}
|