@synopackageland/cli 0.3.10 → 0.4.1
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/LICENSE +21 -0
- package/README.md +57 -9
- package/dist/bin.js +1 -2
- package/dist/build-spk/generator.d.ts +0 -3
- package/dist/build-spk/generator.js +138 -287
- package/dist/build-spk/native-lifecycle.js +0 -3
- package/dist/build-spk/native-payload.js +0 -1
- package/dist/build-spk/notices.d.ts +5 -0
- package/dist/build-spk/notices.js +60 -0
- package/dist/cli.js +178 -151
- package/dist/compose/analyze.d.ts +1 -2
- package/dist/compose/analyze.js +5 -48
- package/dist/contract/unsupported-types.d.ts +10 -0
- package/dist/contract/unsupported-types.js +49 -0
- package/dist/contract/validate.js +25 -2
- package/dist/contract/web-launch.js +0 -2
- package/dist/deploy/deploy.d.ts +1 -4
- package/dist/deploy/deploy.js +45 -156
- package/dist/deploy/homes-values.js +1 -1
- package/dist/deploy/plan.d.ts +18 -0
- package/dist/deploy/plan.js +54 -0
- package/dist/deploy/spk-version.d.ts +2 -14
- package/dist/deploy/spk-version.js +25 -111
- package/dist/dev.d.ts +1 -3
- package/dist/dev.js +14 -28
- package/dist/error-registry.js +830 -862
- package/dist/host/dsm-client.js +12 -272
- package/dist/host/dsm-port-profile.d.ts +0 -1
- package/dist/host/dsm-port-profile.js +0 -2
- package/dist/host/types.d.ts +1 -83
- package/dist/index.d.ts +0 -9
- package/dist/index.js +0 -6
- package/dist/info.d.ts +0 -1
- package/dist/info.js +3 -10
- package/dist/init.d.ts +15 -1
- package/dist/init.js +128 -12
- package/dist/log.js +2 -3
- package/dist/native/validate.js +0 -1
- package/dist/standalone/binary.d.ts +9 -0
- package/dist/standalone/binary.js +67 -0
- package/dist/standalone/build.d.ts +25 -0
- package/dist/standalone/build.js +110 -0
- package/dist/standalone/daemon.d.ts +23 -0
- package/dist/standalone/daemon.js +114 -0
- package/dist/standalone/dsm-window.d.ts +26 -0
- package/dist/standalone/dsm-window.js +291 -0
- package/dist/standalone/helper-inventory.d.ts +16 -0
- package/dist/standalone/helper-inventory.js +2 -0
- package/dist/standalone/helper.d.ts +21 -0
- package/dist/standalone/helper.js +105 -0
- package/dist/standalone/host-adapter.d.ts +5 -0
- package/dist/standalone/host-adapter.js +148 -0
- package/dist/standalone/host-platform.d.ts +13 -0
- package/dist/standalone/host-platform.js +42 -0
- package/dist/standalone/host-types.d.ts +49 -0
- package/dist/standalone/host-types.js +1 -0
- package/dist/standalone/i18n.d.ts +28 -0
- package/dist/standalone/i18n.js +161 -0
- package/dist/standalone/inspect-helper.d.ts +6 -0
- package/dist/standalone/inspect-helper.js +88 -0
- package/dist/standalone/inspect-spk.d.ts +23 -0
- package/dist/standalone/inspect-spk.js +209 -0
- package/dist/standalone/lifecycle-helper.d.ts +2 -0
- package/dist/standalone/lifecycle-helper.js +12 -0
- package/dist/standalone/lifecycle.d.ts +3 -0
- package/dist/standalone/lifecycle.js +53 -0
- package/dist/standalone/manifest.d.ts +73 -0
- package/dist/standalone/manifest.js +279 -0
- package/dist/standalone/reopen-events.d.ts +2 -0
- package/dist/standalone/reopen-events.js +28 -0
- package/dist/standalone/root-messages.d.ts +7 -0
- package/dist/standalone/root-messages.js +259 -0
- package/dist/standalone/root-ops.d.ts +42 -0
- package/dist/standalone/root-ops.js +101 -0
- package/dist/standalone/root-window.d.ts +36 -0
- package/dist/standalone/root-window.js +302 -0
- package/dist/standalone/spk.d.ts +23 -0
- package/dist/standalone/spk.js +192 -0
- package/dist/template-paths.d.ts +2 -0
- package/dist/template-paths.js +9 -0
- package/dist/templates/_daemon/fixture_linux_test.go +15 -0
- package/dist/templates/_daemon/fixture_other_test.go +7 -0
- package/dist/templates/_daemon/go.mod +3 -0
- package/dist/templates/_daemon/main.go +608 -0
- package/dist/templates/_daemon/main_test.go +242 -0
- package/dist/templates/_daemon/process_linux.go +55 -0
- package/dist/templates/_daemon/process_linux_test.go +161 -0
- package/dist/templates/_daemon/process_other.go +14 -0
- package/dist/templates/_daemon/testdata/child.go +41 -0
- package/dist/templates/_shared/GO-LICENSE +27 -0
- package/dist/templates/_shared/GO-PATENTS +22 -0
- package/dist/templates/_shared/LICENSES/TEMPLATE.txt +21 -0
- package/dist/templates/_shared/notice-overrides/index.json +14 -0
- package/dist/templates/_shared/notice-overrides/utils-0.4.2-LICENSE +21 -0
- package/dist/templates/_shared/notice-overrides/utils-0.5.0-LICENSE +21 -0
- package/dist/templates/_shared/third-party-notices.mjs +51 -0
- package/dist/templates/binary/synology-app.yaml +7 -0
- package/dist/templates/hello-files/compose.yaml +0 -1
- package/dist/templates/hello-web/compose.yaml +13 -10
- package/dist/templates/hello-web/html/app.js +1 -23
- package/dist/templates/hello-web/html/index.html +1 -3
- package/dist/templates/hello-web-page/compose.yaml +13 -10
- package/dist/templates/hello-web-page/html/app.js +1 -23
- package/dist/templates/hello-web-page/html/index.html +1 -3
- package/dist/templates/native-go/README.md +324 -0
- package/dist/templates/native-go/backend/THIRD_PARTY_NOTICES.txt +59 -0
- package/dist/templates/native-go/backend/cmd/app/main.go +49 -0
- package/dist/templates/native-go/backend/cmd/dsm-readonly-probe/main_linux.go +46 -0
- package/dist/templates/native-go/backend/cmd/helper/main.go +38 -0
- package/dist/templates/native-go/backend/go.mod +7 -0
- package/dist/templates/native-go/backend/go.sum +4 -0
- package/dist/templates/native-go/backend/internal/api/binary.go +154 -0
- package/dist/templates/native-go/backend/internal/api/binary_test.go +165 -0
- package/dist/templates/native-go/backend/internal/api/errors.go +33 -0
- package/dist/templates/native-go/backend/internal/api/registry.go +104 -0
- package/dist/templates/native-go/backend/internal/api/registry_test.go +329 -0
- package/dist/templates/native-go/backend/internal/api/server.go +159 -0
- package/dist/templates/native-go/backend/internal/app/nas_cgi_artifact_test.go +121 -0
- package/dist/templates/native-go/backend/internal/app/nas_refusal_test.go +46 -0
- package/dist/templates/native-go/backend/internal/app/root_none.go +9 -0
- package/dist/templates/native-go/backend/internal/app/routes.go +138 -0
- package/dist/templates/native-go/backend/internal/app/routes_test.go +172 -0
- package/dist/templates/native-go/backend/internal/dsm/auth.go +118 -0
- package/dist/templates/native-go/backend/internal/dsm/auth_test.go +139 -0
- package/dist/templates/native-go/backend/internal/dsmprobe/collector_linux.go +335 -0
- package/dist/templates/native-go/backend/internal/dsmprobe/collector_linux_test.go +41 -0
- package/dist/templates/native-go/backend/internal/dsmprobe/protocol.go +179 -0
- package/dist/templates/native-go/backend/internal/dsmprobe/protocol_test.go +29 -0
- package/dist/templates/native-go/backend/internal/helper/cohort.go +393 -0
- package/dist/templates/native-go/backend/internal/helper/cohort_publication.go +18 -0
- package/dist/templates/native-go/backend/internal/helper/cohort_publication_test.go +105 -0
- package/dist/templates/native-go/backend/internal/helper/cohort_test.go +372 -0
- package/dist/templates/native-go/backend/internal/helper/control.go +424 -0
- package/dist/templates/native-go/backend/internal/helper/control_test.go +250 -0
- package/dist/templates/native-go/backend/internal/helper/data_contract.go +242 -0
- package/dist/templates/native-go/backend/internal/helper/data_contract_test.go +51 -0
- package/dist/templates/native-go/backend/internal/helper/data_decode.go +184 -0
- package/dist/templates/native-go/backend/internal/helper/data_decode_pointer_test.go +30 -0
- package/dist/templates/native-go/backend/internal/helper/data_protocol.go +416 -0
- package/dist/templates/native-go/backend/internal/helper/data_protocol_test.go +449 -0
- package/dist/templates/native-go/backend/internal/helper/dsm_acl_linux.go +139 -0
- package/dist/templates/native-go/backend/internal/helper/dsm_acl_linux_test.go +121 -0
- package/dist/templates/native-go/backend/internal/helper/dsm_acl_syscall_linux.go +95 -0
- package/dist/templates/native-go/backend/internal/helper/dsm_acl_syscall_linux_test.go +56 -0
- package/dist/templates/native-go/backend/internal/helper/dsm_bridge_linux.go +144 -0
- package/dist/templates/native-go/backend/internal/helper/dsm_bridge_linux_test.go +89 -0
- package/dist/templates/native-go/backend/internal/helper/dsm_home_linux.go +107 -0
- package/dist/templates/native-go/backend/internal/helper/dsm_home_linux_test.go +82 -0
- package/dist/templates/native-go/backend/internal/helper/dsm_probe_transport_linux.go +151 -0
- package/dist/templates/native-go/backend/internal/helper/dsm_probe_transport_linux_test.go +66 -0
- package/dist/templates/native-go/backend/internal/helper/grant_authority.go +516 -0
- package/dist/templates/native-go/backend/internal/helper/grant_authority_contract.go +88 -0
- package/dist/templates/native-go/backend/internal/helper/grant_authority_test.go +510 -0
- package/dist/templates/native-go/backend/internal/helper/grant_cohort.go +389 -0
- package/dist/templates/native-go/backend/internal/helper/grant_cohort_test.go +239 -0
- package/dist/templates/native-go/backend/internal/helper/grant_delivery.go +49 -0
- package/dist/templates/native-go/backend/internal/helper/grant_delivery_methods.go +273 -0
- package/dist/templates/native-go/backend/internal/helper/grant_delivery_test.go +322 -0
- package/dist/templates/native-go/backend/internal/helper/grant_operation_contract.go +47 -0
- package/dist/templates/native-go/backend/internal/helper/grant_readonly_test.go +180 -0
- package/dist/templates/native-go/backend/internal/helper/grant_repository_linux.go +415 -0
- package/dist/templates/native-go/backend/internal/helper/grant_repository_linux_test.go +468 -0
- package/dist/templates/native-go/backend/internal/helper/grant_rpc.go +147 -0
- package/dist/templates/native-go/backend/internal/helper/grant_rpc_test.go +51 -0
- package/dist/templates/native-go/backend/internal/helper/grant_snapshot.go +75 -0
- package/dist/templates/native-go/backend/internal/helper/grant_supervisor_linux.go +134 -0
- package/dist/templates/native-go/backend/internal/helper/grant_supervisor_linux_test.go +254 -0
- package/dist/templates/native-go/backend/internal/helper/lease.go +112 -0
- package/dist/templates/native-go/backend/internal/helper/lease_linux.go +44 -0
- package/dist/templates/native-go/backend/internal/helper/lease_other.go +8 -0
- package/dist/templates/native-go/backend/internal/helper/lifecycle.go +234 -0
- package/dist/templates/native-go/backend/internal/helper/lifecycle_test.go +473 -0
- package/dist/templates/native-go/backend/internal/helper/managed_pilot.go +284 -0
- package/dist/templates/native-go/backend/internal/helper/managed_pilot_repository_linux.go +74 -0
- package/dist/templates/native-go/backend/internal/helper/managed_pilot_repository_linux_test.go +40 -0
- package/dist/templates/native-go/backend/internal/helper/managed_pilot_test.go +210 -0
- package/dist/templates/native-go/backend/internal/helper/nas_shipped_refusal_linux_test.go +97 -0
- package/dist/templates/native-go/backend/internal/helper/native_discovery.go +79 -0
- package/dist/templates/native-go/backend/internal/helper/native_identity.go +89 -0
- package/dist/templates/native-go/backend/internal/helper/native_provider.go +159 -0
- package/dist/templates/native-go/backend/internal/helper/native_provider_test.go +421 -0
- package/dist/templates/native-go/backend/internal/helper/observation.go +204 -0
- package/dist/templates/native-go/backend/internal/helper/observation_health_test.go +115 -0
- package/dist/templates/native-go/backend/internal/helper/observation_reload_budget_test.go +117 -0
- package/dist/templates/native-go/backend/internal/helper/observation_test.go +196 -0
- package/dist/templates/native-go/backend/internal/helper/observer_diagnostic.go +109 -0
- package/dist/templates/native-go/backend/internal/helper/observer_diagnostic_linux.go +76 -0
- package/dist/templates/native-go/backend/internal/helper/observer_diagnostic_linux_test.go +124 -0
- package/dist/templates/native-go/backend/internal/helper/observer_diagnostic_test.go +98 -0
- package/dist/templates/native-go/backend/internal/helper/operation_bootstrap_linux.go +193 -0
- package/dist/templates/native-go/backend/internal/helper/operation_credentials_linux.go +56 -0
- package/dist/templates/native-go/backend/internal/helper/operation_linux.go +480 -0
- package/dist/templates/native-go/backend/internal/helper/operation_linux_test.go +528 -0
- package/dist/templates/native-go/backend/internal/helper/peer_linux.go +44 -0
- package/dist/templates/native-go/backend/internal/helper/peer_other.go +7 -0
- package/dist/templates/native-go/backend/internal/helper/process_linux.go +177 -0
- package/dist/templates/native-go/backend/internal/helper/process_other.go +5 -0
- package/dist/templates/native-go/backend/internal/helper/publication_test.go +178 -0
- package/dist/templates/native-go/backend/internal/helper/read_stream_cohort_linux_test.go +156 -0
- package/dist/templates/native-go/backend/internal/helper/read_transfer.go +40 -0
- package/dist/templates/native-go/backend/internal/helper/read_transfer_linux.go +109 -0
- package/dist/templates/native-go/backend/internal/helper/read_transfer_linux_test.go +118 -0
- package/dist/templates/native-go/backend/internal/helper/read_transfer_test.go +177 -0
- package/dist/templates/native-go/backend/internal/helper/readonly.go +105 -0
- package/dist/templates/native-go/backend/internal/helper/readonly_admission.go +85 -0
- package/dist/templates/native-go/backend/internal/helper/readonly_cohort_linux_test.go +253 -0
- package/dist/templates/native-go/backend/internal/helper/readonly_linux_test.go +378 -0
- package/dist/templates/native-go/backend/internal/helper/readonly_mount_linux.go +65 -0
- package/dist/templates/native-go/backend/internal/helper/readonly_mount_proxy_linux.go +113 -0
- package/dist/templates/native-go/backend/internal/helper/readonly_operations_linux.go +168 -0
- package/dist/templates/native-go/backend/internal/helper/readonly_resolver_linux.go +241 -0
- package/dist/templates/native-go/backend/internal/helper/readonly_test.go +40 -0
- package/dist/templates/native-go/backend/internal/helper/relaxed_identity.go +252 -0
- package/dist/templates/native-go/backend/internal/helper/relaxed_identity_contract.go +105 -0
- package/dist/templates/native-go/backend/internal/helper/relaxed_identity_test.go +406 -0
- package/dist/templates/native-go/backend/internal/helper/relaxed_invalidation.go +200 -0
- package/dist/templates/native-go/backend/internal/helper/repair.go +132 -0
- package/dist/templates/native-go/backend/internal/helper/repair_test.go +271 -0
- package/dist/templates/native-go/backend/internal/helper/s1r_actor_acl_linux_test.go +303 -0
- package/dist/templates/native-go/backend/internal/helper/s1r_actor_fixture_linux_test.go +184 -0
- package/dist/templates/native-go/backend/internal/helper/s1r_actor_races_linux_test.go +231 -0
- package/dist/templates/native-go/backend/internal/helper/s1r_fixture_contract_linux_test.go +18 -0
- package/dist/templates/native-go/backend/internal/helper/server_linux.go +124 -0
- package/dist/templates/native-go/backend/internal/helper/status.go +334 -0
- package/dist/templates/native-go/backend/internal/helper/status_test.go +288 -0
- package/dist/templates/native-go/backend/internal/helper/supervision.go +107 -0
- package/dist/templates/native-go/backend/internal/helper/supervision_test.go +124 -0
- package/dist/templates/native-go/backend/internal/helper/supervisor_frame.go +76 -0
- package/dist/templates/native-go/backend/internal/helper/supervisor_frame_linux_test.go +69 -0
- package/dist/templates/native-go/backend/internal/helper/supervisor_frame_test.go +107 -0
- package/dist/templates/native-go/backend/internal/helper/supervisor_linux.go +363 -0
- package/dist/templates/native-go/backend/internal/helper/supervisor_linux_test.go +913 -0
- package/dist/templates/native-go/backend/internal/helper/supervisor_socket_eof_test.go +74 -0
- package/dist/templates/native-go/backend/internal/helper/supervisor_socket_test.go +45 -0
- package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/create.json +23 -0
- package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/frames.json +67 -0
- package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/grant-store.json +52 -0
- package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/intent.json +20 -0
- package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/list.json +20 -0
- package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/publish.json +20 -0
- package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/read.json +22 -0
- package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/stat.json +22 -0
- package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/write-stream.json +22 -0
- package/dist/templates/native-go/backend/internal/helper/unit_connection.go +75 -0
- package/dist/templates/native-go/backend/internal/helper/unit_connection_linux_test.go +135 -0
- package/dist/templates/native-go/backend/internal/helper/unit_connection_test.go +133 -0
- package/dist/templates/native-go/backend/internal/helper/unit_frame_test.go +32 -0
- package/dist/templates/native-go/backend/internal/helper/unit_linux.go +364 -0
- package/dist/templates/native-go/backend/internal/helper/unit_linux_test.go +46 -0
- package/dist/templates/native-go/backend/internal/helper/unit_mechanisms_linux_test.go +217 -0
- package/dist/templates/native-go/backend/internal/helper/unit_padding_linux_test.go +178 -0
- package/dist/templates/native-go/backend/internal/helper/unit_query_linux.go +111 -0
- package/dist/templates/native-go/backend/internal/helper/unit_reload_linux_test.go +372 -0
- package/dist/templates/native-go/backend/internal/helper/unit_reload_sequence_linux_test.go +232 -0
- package/dist/templates/native-go/backend/internal/helper/write.go +77 -0
- package/dist/templates/native-go/backend/internal/helper/write_admission.go +260 -0
- package/dist/templates/native-go/backend/internal/helper/write_admission_test.go +135 -0
- package/dist/templates/native-go/backend/internal/helper/write_cohort_linux_test.go +218 -0
- package/dist/templates/native-go/backend/internal/helper/write_files_linux.go +202 -0
- package/dist/templates/native-go/backend/internal/helper/write_files_linux_test.go +199 -0
- package/dist/templates/native-go/backend/internal/helper/write_intent_linux.go +116 -0
- package/dist/templates/native-go/backend/internal/helper/write_intent_linux_test.go +74 -0
- package/dist/templates/native-go/backend/internal/helper/write_operation_linux.go +245 -0
- package/dist/templates/native-go/backend/internal/helper/write_test.go +53 -0
- package/dist/templates/native-go/dsm-package.yaml +58 -0
- package/dist/templates/native-go/gitignore +1 -0
- package/dist/templates/native-go/i18n/glossary.json +662 -0
- package/dist/templates/native-go/i18n/messages/de.json +28 -0
- package/dist/templates/native-go/i18n/messages/en.json +28 -0
- package/dist/templates/native-go/i18n/messages/es.json +28 -0
- package/dist/templates/native-go/i18n/messages/fr.json +28 -0
- package/dist/templates/native-go/i18n/messages/it.json +28 -0
- package/dist/templates/native-go/i18n/messages/ja.json +28 -0
- package/dist/templates/native-go/i18n/messages/ko.json +28 -0
- package/dist/templates/native-go/i18n/messages/zh-CN.json +28 -0
- package/dist/templates/native-go/i18n/messages/zh-TW.json +28 -0
- package/dist/templates/native-go/ui/app.css +35 -0
- package/dist/templates/native-go/ui/app.js +101 -0
- package/dist/templates/native-go-better-auth/backend/internal/app/identity.go +208 -0
- package/dist/templates/native-go-better-auth/backend/internal/app/identity_test.go +113 -0
- package/dist/templates/native-go-better-auth/node/app.mjs +72 -0
- package/dist/templates/native-go-better-auth/node/build.mjs +4 -0
- package/dist/templates/native-go-better-auth/node/package-lock.json +862 -0
- package/dist/templates/native-go-better-auth/node/package.json +1 -0
- package/dist/templates/native-go-better-auth/node/test/auth.test.mjs +31 -0
- package/dist/templates/native-go-integration/backend/internal/app/identity_none.go +6 -0
- package/dist/templates/native-go-integration/backend/internal/app/personal.go +203 -0
- package/dist/templates/native-go-integration/backend/internal/app/personal_test.go +119 -0
- package/dist/templates/native-go-root/backend/internal/app/root.go +107 -0
- package/dist/templates/native-go-root/backend/internal/app/root_test.go +124 -0
- package/dist/templates/native-go-root/root/whoami.sh +6 -0
- package/dist/templates/native-go-vue/README.md +224 -0
- package/dist/templates/native-go-vue/frontend/DESIGN.md +78 -0
- package/dist/templates/native-go-vue/frontend/package-lock.json +2410 -0
- package/dist/templates/native-go-vue/frontend/package.json +6 -0
- package/dist/templates/native-go-vue/frontend/src/App.vue +159 -0
- package/dist/templates/native-go-vue/frontend/src/context.ts +56 -0
- package/dist/templates/native-go-vue/frontend/src/main.ts +29 -0
- package/dist/templates/native-go-vue/frontend/src/nas/NasGrantSettings.vue +74 -0
- package/dist/templates/native-go-vue/frontend/src/nas/NasPathPicker.vue +106 -0
- package/dist/templates/native-go-vue/frontend/src/nas/NasUnavailable.vue +20 -0
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/de.json +74 -0
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/en.json +74 -0
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/es.json +74 -0
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/fr.json +74 -0
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/it.json +74 -0
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/ja.json +74 -0
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/ko.json +74 -0
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/zh-CN.json +74 -0
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/zh-TW.json +74 -0
- package/dist/templates/native-go-vue/frontend/src/nas/i18n.ts +38 -0
- package/dist/templates/native-go-vue/frontend/src/nas/mock-provider.ts +119 -0
- package/dist/templates/native-go-vue/frontend/src/nas/provider.ts +59 -0
- package/dist/templates/native-go-vue/frontend/src/nas/use-request.ts +27 -0
- package/dist/templates/native-go-vue/frontend/src/style.css +31 -0
- package/dist/templates/native-go-vue/frontend/test/apps.test.ts +190 -0
- package/dist/templates/native-go-vue/frontend/test/nas-provider.test.ts +81 -0
- package/dist/templates/native-go-vue/frontend/test/nas-request.test.ts +21 -0
- package/dist/templates/native-go-vue/frontend/test/nas-ui.test.ts +261 -0
- package/dist/templates/native-go-vue/frontend/tsconfig.json +1 -0
- package/dist/templates/native-go-vue/frontend/vite.config.ts +10 -0
- package/dist/templates/native-go-vue/gitignore +2 -0
- package/dist/types.d.ts +1 -1
- package/dist/validate.js +11 -7
- package/package.json +5 -8
- package/schema/synology-app.schema.json +36 -37
- package/skills/SKILL.md +4 -48
- package/skills/reference/create.md +11 -83
- package/skills/reference/deploy.md +7 -78
- package/skills/reference/diagnose.md +4 -101
- package/skills/reference/files.md +5 -41
- package/skills/reference/identity.md +3 -29
- package/skills/reference/wrap.md +0 -2
- package/templates/_daemon/fixture_linux_test.go +15 -0
- package/templates/_daemon/fixture_other_test.go +7 -0
- package/templates/_daemon/go.mod +3 -0
- package/templates/_daemon/main.go +608 -0
- package/templates/_daemon/main_test.go +242 -0
- package/templates/_daemon/process_linux.go +55 -0
- package/templates/_daemon/process_linux_test.go +161 -0
- package/templates/_daemon/process_other.go +14 -0
- package/templates/_daemon/testdata/child.go +41 -0
- package/templates/_shared/GO-LICENSE +27 -0
- package/templates/_shared/GO-PATENTS +22 -0
- package/templates/_shared/LICENSES/TEMPLATE.txt +21 -0
- package/templates/_shared/notice-overrides/index.json +14 -0
- package/templates/_shared/notice-overrides/utils-0.4.2-LICENSE +21 -0
- package/templates/_shared/notice-overrides/utils-0.5.0-LICENSE +21 -0
- package/templates/_shared/third-party-notices.mjs +51 -0
- package/templates/binary/synology-app.yaml +7 -0
- package/templates/hello-files/compose.yaml +0 -1
- package/templates/hello-web/compose.yaml +13 -10
- package/templates/hello-web/html/app.js +1 -23
- package/templates/hello-web/html/index.html +1 -3
- package/templates/hello-web-page/compose.yaml +13 -10
- package/templates/hello-web-page/html/app.js +1 -23
- package/templates/hello-web-page/html/index.html +1 -3
- package/templates/native-go/README.md +324 -0
- package/templates/native-go/backend/THIRD_PARTY_NOTICES.txt +59 -0
- package/templates/native-go/backend/cmd/app/main.go +49 -0
- package/templates/native-go/backend/cmd/dsm-readonly-probe/main_linux.go +46 -0
- package/templates/native-go/backend/cmd/helper/main.go +38 -0
- package/templates/native-go/backend/go.mod +7 -0
- package/templates/native-go/backend/go.sum +4 -0
- package/templates/native-go/backend/internal/api/binary.go +154 -0
- package/templates/native-go/backend/internal/api/binary_test.go +165 -0
- package/templates/native-go/backend/internal/api/errors.go +33 -0
- package/templates/native-go/backend/internal/api/registry.go +104 -0
- package/templates/native-go/backend/internal/api/registry_test.go +329 -0
- package/templates/native-go/backend/internal/api/server.go +159 -0
- package/templates/native-go/backend/internal/app/nas_cgi_artifact_test.go +121 -0
- package/templates/native-go/backend/internal/app/nas_refusal_test.go +46 -0
- package/templates/native-go/backend/internal/app/root_none.go +9 -0
- package/templates/native-go/backend/internal/app/routes.go +138 -0
- package/templates/native-go/backend/internal/app/routes_test.go +172 -0
- package/templates/native-go/backend/internal/dsm/auth.go +118 -0
- package/templates/native-go/backend/internal/dsm/auth_test.go +139 -0
- package/templates/native-go/backend/internal/dsmprobe/collector_linux.go +335 -0
- package/templates/native-go/backend/internal/dsmprobe/collector_linux_test.go +41 -0
- package/templates/native-go/backend/internal/dsmprobe/protocol.go +179 -0
- package/templates/native-go/backend/internal/dsmprobe/protocol_test.go +29 -0
- package/templates/native-go/backend/internal/helper/cohort.go +393 -0
- package/templates/native-go/backend/internal/helper/cohort_publication.go +18 -0
- package/templates/native-go/backend/internal/helper/cohort_publication_test.go +105 -0
- package/templates/native-go/backend/internal/helper/cohort_test.go +372 -0
- package/templates/native-go/backend/internal/helper/control.go +424 -0
- package/templates/native-go/backend/internal/helper/control_test.go +250 -0
- package/templates/native-go/backend/internal/helper/data_contract.go +242 -0
- package/templates/native-go/backend/internal/helper/data_contract_test.go +51 -0
- package/templates/native-go/backend/internal/helper/data_decode.go +184 -0
- package/templates/native-go/backend/internal/helper/data_decode_pointer_test.go +30 -0
- package/templates/native-go/backend/internal/helper/data_protocol.go +416 -0
- package/templates/native-go/backend/internal/helper/data_protocol_test.go +449 -0
- package/templates/native-go/backend/internal/helper/dsm_acl_linux.go +139 -0
- package/templates/native-go/backend/internal/helper/dsm_acl_linux_test.go +121 -0
- package/templates/native-go/backend/internal/helper/dsm_acl_syscall_linux.go +95 -0
- package/templates/native-go/backend/internal/helper/dsm_acl_syscall_linux_test.go +56 -0
- package/templates/native-go/backend/internal/helper/dsm_bridge_linux.go +144 -0
- package/templates/native-go/backend/internal/helper/dsm_bridge_linux_test.go +89 -0
- package/templates/native-go/backend/internal/helper/dsm_home_linux.go +107 -0
- package/templates/native-go/backend/internal/helper/dsm_home_linux_test.go +82 -0
- package/templates/native-go/backend/internal/helper/dsm_probe_transport_linux.go +151 -0
- package/templates/native-go/backend/internal/helper/dsm_probe_transport_linux_test.go +66 -0
- package/templates/native-go/backend/internal/helper/grant_authority.go +516 -0
- package/templates/native-go/backend/internal/helper/grant_authority_contract.go +88 -0
- package/templates/native-go/backend/internal/helper/grant_authority_test.go +510 -0
- package/templates/native-go/backend/internal/helper/grant_cohort.go +389 -0
- package/templates/native-go/backend/internal/helper/grant_cohort_test.go +239 -0
- package/templates/native-go/backend/internal/helper/grant_delivery.go +49 -0
- package/templates/native-go/backend/internal/helper/grant_delivery_methods.go +273 -0
- package/templates/native-go/backend/internal/helper/grant_delivery_test.go +322 -0
- package/templates/native-go/backend/internal/helper/grant_operation_contract.go +47 -0
- package/templates/native-go/backend/internal/helper/grant_readonly_test.go +180 -0
- package/templates/native-go/backend/internal/helper/grant_repository_linux.go +415 -0
- package/templates/native-go/backend/internal/helper/grant_repository_linux_test.go +468 -0
- package/templates/native-go/backend/internal/helper/grant_rpc.go +147 -0
- package/templates/native-go/backend/internal/helper/grant_rpc_test.go +51 -0
- package/templates/native-go/backend/internal/helper/grant_snapshot.go +75 -0
- package/templates/native-go/backend/internal/helper/grant_supervisor_linux.go +134 -0
- package/templates/native-go/backend/internal/helper/grant_supervisor_linux_test.go +254 -0
- package/templates/native-go/backend/internal/helper/lease.go +112 -0
- package/templates/native-go/backend/internal/helper/lease_linux.go +44 -0
- package/templates/native-go/backend/internal/helper/lease_other.go +8 -0
- package/templates/native-go/backend/internal/helper/lifecycle.go +234 -0
- package/templates/native-go/backend/internal/helper/lifecycle_test.go +473 -0
- package/templates/native-go/backend/internal/helper/managed_pilot.go +284 -0
- package/templates/native-go/backend/internal/helper/managed_pilot_repository_linux.go +74 -0
- package/templates/native-go/backend/internal/helper/managed_pilot_repository_linux_test.go +40 -0
- package/templates/native-go/backend/internal/helper/managed_pilot_test.go +210 -0
- package/templates/native-go/backend/internal/helper/nas_shipped_refusal_linux_test.go +97 -0
- package/templates/native-go/backend/internal/helper/native_discovery.go +79 -0
- package/templates/native-go/backend/internal/helper/native_identity.go +89 -0
- package/templates/native-go/backend/internal/helper/native_provider.go +159 -0
- package/templates/native-go/backend/internal/helper/native_provider_test.go +421 -0
- package/templates/native-go/backend/internal/helper/observation.go +204 -0
- package/templates/native-go/backend/internal/helper/observation_health_test.go +115 -0
- package/templates/native-go/backend/internal/helper/observation_reload_budget_test.go +117 -0
- package/templates/native-go/backend/internal/helper/observation_test.go +196 -0
- package/templates/native-go/backend/internal/helper/observer_diagnostic.go +109 -0
- package/templates/native-go/backend/internal/helper/observer_diagnostic_linux.go +76 -0
- package/templates/native-go/backend/internal/helper/observer_diagnostic_linux_test.go +124 -0
- package/templates/native-go/backend/internal/helper/observer_diagnostic_test.go +98 -0
- package/templates/native-go/backend/internal/helper/operation_bootstrap_linux.go +193 -0
- package/templates/native-go/backend/internal/helper/operation_credentials_linux.go +56 -0
- package/templates/native-go/backend/internal/helper/operation_linux.go +480 -0
- package/templates/native-go/backend/internal/helper/operation_linux_test.go +528 -0
- package/templates/native-go/backend/internal/helper/peer_linux.go +44 -0
- package/templates/native-go/backend/internal/helper/peer_other.go +7 -0
- package/templates/native-go/backend/internal/helper/process_linux.go +177 -0
- package/templates/native-go/backend/internal/helper/process_other.go +5 -0
- package/templates/native-go/backend/internal/helper/publication_test.go +178 -0
- package/templates/native-go/backend/internal/helper/read_stream_cohort_linux_test.go +156 -0
- package/templates/native-go/backend/internal/helper/read_transfer.go +40 -0
- package/templates/native-go/backend/internal/helper/read_transfer_linux.go +109 -0
- package/templates/native-go/backend/internal/helper/read_transfer_linux_test.go +118 -0
- package/templates/native-go/backend/internal/helper/read_transfer_test.go +177 -0
- package/templates/native-go/backend/internal/helper/readonly.go +105 -0
- package/templates/native-go/backend/internal/helper/readonly_admission.go +85 -0
- package/templates/native-go/backend/internal/helper/readonly_cohort_linux_test.go +253 -0
- package/templates/native-go/backend/internal/helper/readonly_linux_test.go +378 -0
- package/templates/native-go/backend/internal/helper/readonly_mount_linux.go +65 -0
- package/templates/native-go/backend/internal/helper/readonly_mount_proxy_linux.go +113 -0
- package/templates/native-go/backend/internal/helper/readonly_operations_linux.go +168 -0
- package/templates/native-go/backend/internal/helper/readonly_resolver_linux.go +241 -0
- package/templates/native-go/backend/internal/helper/readonly_test.go +40 -0
- package/templates/native-go/backend/internal/helper/relaxed_identity.go +252 -0
- package/templates/native-go/backend/internal/helper/relaxed_identity_contract.go +105 -0
- package/templates/native-go/backend/internal/helper/relaxed_identity_test.go +406 -0
- package/templates/native-go/backend/internal/helper/relaxed_invalidation.go +200 -0
- package/templates/native-go/backend/internal/helper/repair.go +132 -0
- package/templates/native-go/backend/internal/helper/repair_test.go +271 -0
- package/templates/native-go/backend/internal/helper/s1r_actor_acl_linux_test.go +303 -0
- package/templates/native-go/backend/internal/helper/s1r_actor_fixture_linux_test.go +184 -0
- package/templates/native-go/backend/internal/helper/s1r_actor_races_linux_test.go +231 -0
- package/templates/native-go/backend/internal/helper/s1r_fixture_contract_linux_test.go +18 -0
- package/templates/native-go/backend/internal/helper/server_linux.go +124 -0
- package/templates/native-go/backend/internal/helper/status.go +334 -0
- package/templates/native-go/backend/internal/helper/status_test.go +288 -0
- package/templates/native-go/backend/internal/helper/supervision.go +107 -0
- package/templates/native-go/backend/internal/helper/supervision_test.go +124 -0
- package/templates/native-go/backend/internal/helper/supervisor_frame.go +76 -0
- package/templates/native-go/backend/internal/helper/supervisor_frame_linux_test.go +69 -0
- package/templates/native-go/backend/internal/helper/supervisor_frame_test.go +107 -0
- package/templates/native-go/backend/internal/helper/supervisor_linux.go +363 -0
- package/templates/native-go/backend/internal/helper/supervisor_linux_test.go +913 -0
- package/templates/native-go/backend/internal/helper/supervisor_socket_eof_test.go +74 -0
- package/templates/native-go/backend/internal/helper/supervisor_socket_test.go +45 -0
- package/templates/native-go/backend/internal/helper/testdata/protocol2/create.json +23 -0
- package/templates/native-go/backend/internal/helper/testdata/protocol2/frames.json +67 -0
- package/templates/native-go/backend/internal/helper/testdata/protocol2/grant-store.json +52 -0
- package/templates/native-go/backend/internal/helper/testdata/protocol2/intent.json +20 -0
- package/templates/native-go/backend/internal/helper/testdata/protocol2/list.json +20 -0
- package/templates/native-go/backend/internal/helper/testdata/protocol2/publish.json +20 -0
- package/templates/native-go/backend/internal/helper/testdata/protocol2/read.json +22 -0
- package/templates/native-go/backend/internal/helper/testdata/protocol2/stat.json +22 -0
- package/templates/native-go/backend/internal/helper/testdata/protocol2/write-stream.json +22 -0
- package/templates/native-go/backend/internal/helper/unit_connection.go +75 -0
- package/templates/native-go/backend/internal/helper/unit_connection_linux_test.go +135 -0
- package/templates/native-go/backend/internal/helper/unit_connection_test.go +133 -0
- package/templates/native-go/backend/internal/helper/unit_frame_test.go +32 -0
- package/templates/native-go/backend/internal/helper/unit_linux.go +364 -0
- package/templates/native-go/backend/internal/helper/unit_linux_test.go +46 -0
- package/templates/native-go/backend/internal/helper/unit_mechanisms_linux_test.go +217 -0
- package/templates/native-go/backend/internal/helper/unit_padding_linux_test.go +178 -0
- package/templates/native-go/backend/internal/helper/unit_query_linux.go +111 -0
- package/templates/native-go/backend/internal/helper/unit_reload_linux_test.go +372 -0
- package/templates/native-go/backend/internal/helper/unit_reload_sequence_linux_test.go +232 -0
- package/templates/native-go/backend/internal/helper/write.go +77 -0
- package/templates/native-go/backend/internal/helper/write_admission.go +260 -0
- package/templates/native-go/backend/internal/helper/write_admission_test.go +135 -0
- package/templates/native-go/backend/internal/helper/write_cohort_linux_test.go +218 -0
- package/templates/native-go/backend/internal/helper/write_files_linux.go +202 -0
- package/templates/native-go/backend/internal/helper/write_files_linux_test.go +199 -0
- package/templates/native-go/backend/internal/helper/write_intent_linux.go +116 -0
- package/templates/native-go/backend/internal/helper/write_intent_linux_test.go +74 -0
- package/templates/native-go/backend/internal/helper/write_operation_linux.go +245 -0
- package/templates/native-go/backend/internal/helper/write_test.go +53 -0
- package/templates/native-go/dsm-package.yaml +58 -0
- package/templates/native-go/gitignore +1 -0
- package/templates/native-go/i18n/glossary.json +662 -0
- package/templates/native-go/i18n/messages/de.json +28 -0
- package/templates/native-go/i18n/messages/en.json +28 -0
- package/templates/native-go/i18n/messages/es.json +28 -0
- package/templates/native-go/i18n/messages/fr.json +28 -0
- package/templates/native-go/i18n/messages/it.json +28 -0
- package/templates/native-go/i18n/messages/ja.json +28 -0
- package/templates/native-go/i18n/messages/ko.json +28 -0
- package/templates/native-go/i18n/messages/zh-CN.json +28 -0
- package/templates/native-go/i18n/messages/zh-TW.json +28 -0
- package/templates/native-go/ui/app.css +35 -0
- package/templates/native-go/ui/app.js +101 -0
- package/templates/native-go-better-auth/backend/internal/app/identity.go +208 -0
- package/templates/native-go-better-auth/backend/internal/app/identity_test.go +113 -0
- package/templates/native-go-better-auth/node/app.mjs +72 -0
- package/templates/native-go-better-auth/node/build.mjs +4 -0
- package/templates/native-go-better-auth/node/package-lock.json +862 -0
- package/templates/native-go-better-auth/node/package.json +1 -0
- package/templates/native-go-better-auth/node/test/auth.test.mjs +31 -0
- package/templates/native-go-integration/backend/internal/app/identity_none.go +6 -0
- package/templates/native-go-integration/backend/internal/app/personal.go +203 -0
- package/templates/native-go-integration/backend/internal/app/personal_test.go +119 -0
- package/templates/native-go-root/backend/internal/app/root.go +107 -0
- package/templates/native-go-root/backend/internal/app/root_test.go +124 -0
- package/templates/native-go-root/root/whoami.sh +6 -0
- package/templates/native-go-vue/README.md +224 -0
- package/templates/native-go-vue/frontend/DESIGN.md +78 -0
- package/templates/native-go-vue/frontend/package-lock.json +2410 -0
- package/templates/native-go-vue/frontend/package.json +6 -0
- package/templates/native-go-vue/frontend/src/App.vue +159 -0
- package/templates/native-go-vue/frontend/src/context.ts +56 -0
- package/templates/native-go-vue/frontend/src/main.ts +29 -0
- package/templates/native-go-vue/frontend/src/nas/NasGrantSettings.vue +74 -0
- package/templates/native-go-vue/frontend/src/nas/NasPathPicker.vue +106 -0
- package/templates/native-go-vue/frontend/src/nas/NasUnavailable.vue +20 -0
- package/templates/native-go-vue/frontend/src/nas/i18n/de.json +74 -0
- package/templates/native-go-vue/frontend/src/nas/i18n/en.json +74 -0
- package/templates/native-go-vue/frontend/src/nas/i18n/es.json +74 -0
- package/templates/native-go-vue/frontend/src/nas/i18n/fr.json +74 -0
- package/templates/native-go-vue/frontend/src/nas/i18n/it.json +74 -0
- package/templates/native-go-vue/frontend/src/nas/i18n/ja.json +74 -0
- package/templates/native-go-vue/frontend/src/nas/i18n/ko.json +74 -0
- package/templates/native-go-vue/frontend/src/nas/i18n/zh-CN.json +74 -0
- package/templates/native-go-vue/frontend/src/nas/i18n/zh-TW.json +74 -0
- package/templates/native-go-vue/frontend/src/nas/i18n.ts +38 -0
- package/templates/native-go-vue/frontend/src/nas/mock-provider.ts +119 -0
- package/templates/native-go-vue/frontend/src/nas/provider.ts +59 -0
- package/templates/native-go-vue/frontend/src/nas/use-request.ts +27 -0
- package/templates/native-go-vue/frontend/src/style.css +31 -0
- package/templates/native-go-vue/frontend/test/apps.test.ts +190 -0
- package/templates/native-go-vue/frontend/test/nas-provider.test.ts +81 -0
- package/templates/native-go-vue/frontend/test/nas-request.test.ts +21 -0
- package/templates/native-go-vue/frontend/test/nas-ui.test.ts +261 -0
- package/templates/native-go-vue/frontend/tsconfig.json +1 -0
- package/templates/native-go-vue/frontend/vite.config.ts +10 -0
- package/templates/native-go-vue/gitignore +2 -0
- package/dist/attestation/app-package.d.ts +0 -86
- package/dist/attestation/app-package.js +0 -206
- package/dist/attestation/install-on-host.d.ts +0 -14
- package/dist/attestation/install-on-host.js +0 -52
- package/dist/attestation/keyring.d.ts +0 -21
- package/dist/attestation/keyring.js +0 -168
- package/dist/attestation/platform-service.d.ts +0 -70
- package/dist/attestation/platform-service.js +0 -250
- package/dist/build-spk/broker-glue.d.ts +0 -16
- package/dist/build-spk/broker-glue.js +0 -40
- package/dist/deploy/catalog-publish.d.ts +0 -3
- package/dist/deploy/catalog-publish.js +0 -7
- package/dist/doctor.d.ts +0 -22
- package/dist/doctor.js +0 -822
- package/dist/error-collector.d.ts +0 -2
- package/dist/error-collector.js +0 -46
- package/dist/host/broker-paths.d.ts +0 -1
- package/dist/host/broker-paths.js +0 -1
- package/dist/host/broker-upgrade-preflight.d.ts +0 -61
- package/dist/host/broker-upgrade-preflight.js +0 -156
- package/dist/host/digests.d.ts +0 -5
- package/dist/host/digests.js +0 -63
- package/dist/host/fake-nas.d.ts +0 -49
- package/dist/host/fake-nas.js +0 -193
- package/dist/mock-broker/bootstrap.d.ts +0 -2
- package/dist/mock-broker/bootstrap.js +0 -8
- package/dist/mock-broker/files.d.ts +0 -60
- package/dist/mock-broker/files.js +0 -408
- package/dist/mock-broker/oidc.d.ts +0 -31
- package/dist/mock-broker/oidc.js +0 -161
- package/dist/mock-broker/path.d.ts +0 -9
- package/dist/mock-broker/path.js +0 -50
- package/dist/mock-broker/server.d.ts +0 -19
- package/dist/mock-broker/server.js +0 -350
- package/dist/publish/build-ledger.d.ts +0 -22
- package/dist/publish/build-ledger.js +0 -26
- package/dist/publish/community-path.d.ts +0 -6
- package/dist/publish/community-path.js +0 -41
- package/dist/publish/curated-release.d.ts +0 -78
- package/dist/publish/curated-release.js +0 -883
- package/dist/publish/file-build-ledger.d.ts +0 -18
- package/dist/publish/file-build-ledger.js +0 -268
- package/dist/publish/github-pr.d.ts +0 -25
- package/dist/publish/github-pr.js +0 -85
- package/dist/publish/github-repo.d.ts +0 -8
- package/dist/publish/github-repo.js +0 -21
- package/dist/publish/platform-service-release.d.ts +0 -60
- package/dist/publish/platform-service-release.js +0 -333
- package/dist/publish/preflight.d.ts +0 -24
- package/dist/publish/preflight.js +0 -138
- package/dist/publish/publish.d.ts +0 -27
- package/dist/publish/publish.js +0 -136
- package/dist/publish/sync-definition.d.ts +0 -4
- package/dist/publish/sync-definition.js +0 -48
- package/dist/release-bin.d.ts +0 -2
- package/dist/release-bin.js +0 -23
- package/dist/templates/hello-web/html/sdk.js +0 -68
- package/dist/templates/hello-web-page/html/sdk.js +0 -68
- package/dist/templates/native/synology-app.yaml +0 -7
- package/dist/test-host.d.ts +0 -15
- package/dist/test-host.js +0 -37
- package/templates/hello-web/html/sdk.js +0 -68
- package/templates/hello-web-page/html/sdk.js +0 -68
- package/templates/native/synology-app.yaml +0 -7
- /package/dist/templates/{native → binary}/native.yaml +0 -0
- /package/templates/{native → binary}/native.yaml +0 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"app.loading": "Loading...",
|
|
3
|
+
"app.refresh": "Refresh",
|
|
4
|
+
"app.title": "It works",
|
|
5
|
+
"error.admin_required": "Sorry, this user account has not been assigned proper privileges to perform this action.",
|
|
6
|
+
"error.auth_unavailable": "Unable to perform this operation. Please try again later.",
|
|
7
|
+
"error.bad_request": "Check the entered value and try again.",
|
|
8
|
+
"error.bad_response": "Unable to perform this operation. Please try again later.",
|
|
9
|
+
"error.cross_origin": "Unable to perform this operation. Please try again later.",
|
|
10
|
+
"error.internal": "Unable to perform this operation. Please try again later.",
|
|
11
|
+
"error.json_required": "Unable to perform this operation. Please try again later.",
|
|
12
|
+
"error.method_not_allowed": "Unable to perform this operation. Please try again later.",
|
|
13
|
+
"error.network": "Connection failed. Please check your network settings.",
|
|
14
|
+
"error.request_too_large": "Unable to perform this operation. Please try again later.",
|
|
15
|
+
"error.session_required": "Connection expired. Please sign in again.",
|
|
16
|
+
"error.unknown_method": "Unable to perform this operation. Please try again later.",
|
|
17
|
+
"greeting.adminOnly": "Only members of the administrators group can change the greeting.",
|
|
18
|
+
"greeting.label": "New greeting",
|
|
19
|
+
"greeting.save": "Save",
|
|
20
|
+
"greeting.setBy": "{text} — set by {user}",
|
|
21
|
+
"status.backend": "Backend",
|
|
22
|
+
"status.heading": "Backend status",
|
|
23
|
+
"status.package": "Package name",
|
|
24
|
+
"status.uid": "Runs as UID",
|
|
25
|
+
"status.user": "User",
|
|
26
|
+
"status.userAdmin": "{user} (administrator)",
|
|
27
|
+
"status.version": "Version"
|
|
28
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"app.loading": "Cargando...",
|
|
3
|
+
"app.refresh": "Actualizar",
|
|
4
|
+
"app.title": "Funciona",
|
|
5
|
+
"error.admin_required": "A esta cuenta de usuario no se le han asignado los privilegios adecuados para realizar esta acción.",
|
|
6
|
+
"error.auth_unavailable": "No se puede realizar esta operación. Vuelva a intentarlo más tarde.",
|
|
7
|
+
"error.bad_request": "Compruebe el valor introducido y vuelva a intentarlo.",
|
|
8
|
+
"error.bad_response": "No se puede realizar esta operación. Vuelva a intentarlo más tarde.",
|
|
9
|
+
"error.cross_origin": "No se puede realizar esta operación. Vuelva a intentarlo más tarde.",
|
|
10
|
+
"error.internal": "No se puede realizar esta operación. Vuelva a intentarlo más tarde.",
|
|
11
|
+
"error.json_required": "No se puede realizar esta operación. Vuelva a intentarlo más tarde.",
|
|
12
|
+
"error.method_not_allowed": "No se puede realizar esta operación. Vuelva a intentarlo más tarde.",
|
|
13
|
+
"error.network": "Error de la conexión. Compruebe su conexión de red.",
|
|
14
|
+
"error.request_too_large": "No se puede realizar esta operación. Vuelva a intentarlo más tarde.",
|
|
15
|
+
"error.session_required": "Conexión caducada. Vuelva a conectarse.",
|
|
16
|
+
"error.unknown_method": "No se puede realizar esta operación. Vuelva a intentarlo más tarde.",
|
|
17
|
+
"greeting.adminOnly": "Solo los miembros del grupo administrators pueden cambiar el saludo.",
|
|
18
|
+
"greeting.label": "Nuevo saludo",
|
|
19
|
+
"greeting.save": "Guardar",
|
|
20
|
+
"greeting.setBy": "{text} — establecido por {user}",
|
|
21
|
+
"status.backend": "Backend",
|
|
22
|
+
"status.heading": "Estado del backend",
|
|
23
|
+
"status.package": "Nombre del paquete",
|
|
24
|
+
"status.uid": "Se ejecuta como UID",
|
|
25
|
+
"status.user": "Usuario",
|
|
26
|
+
"status.userAdmin": "{user} (administrador)",
|
|
27
|
+
"status.version": "Versión"
|
|
28
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"app.loading": "Chargement...",
|
|
3
|
+
"app.refresh": "Actualiser",
|
|
4
|
+
"app.title": "Ça fonctionne",
|
|
5
|
+
"error.admin_required": "Désolé, ce compte utilisateur ne dispose pas des droits nécessaires pour accomplir cette action.",
|
|
6
|
+
"error.auth_unavailable": "Impossible d'effectuer cette opération. Veuillez réessayer ultérieurement.",
|
|
7
|
+
"error.bad_request": "Vérifiez la valeur saisie et réessayez.",
|
|
8
|
+
"error.bad_response": "Impossible d'effectuer cette opération. Veuillez réessayer ultérieurement.",
|
|
9
|
+
"error.cross_origin": "Impossible d'effectuer cette opération. Veuillez réessayer ultérieurement.",
|
|
10
|
+
"error.internal": "Impossible d'effectuer cette opération. Veuillez réessayer ultérieurement.",
|
|
11
|
+
"error.json_required": "Impossible d'effectuer cette opération. Veuillez réessayer ultérieurement.",
|
|
12
|
+
"error.method_not_allowed": "Impossible d'effectuer cette opération. Veuillez réessayer ultérieurement.",
|
|
13
|
+
"error.network": "La connexion a échoué. Vérifiez vos paramètres réseau.",
|
|
14
|
+
"error.request_too_large": "Impossible d'effectuer cette opération. Veuillez réessayer ultérieurement.",
|
|
15
|
+
"error.session_required": "La connexion a expiré. Reconnectez-vous.",
|
|
16
|
+
"error.unknown_method": "Impossible d'effectuer cette opération. Veuillez réessayer ultérieurement.",
|
|
17
|
+
"greeting.adminOnly": "Seuls les membres du groupe administrators peuvent modifier le message d'accueil.",
|
|
18
|
+
"greeting.label": "Nouveau message d'accueil",
|
|
19
|
+
"greeting.save": "Sauvegarder",
|
|
20
|
+
"greeting.setBy": "{text} — défini par {user}",
|
|
21
|
+
"status.backend": "Backend",
|
|
22
|
+
"status.heading": "Statut du backend",
|
|
23
|
+
"status.package": "Nom du paquet",
|
|
24
|
+
"status.uid": "Exécuté avec l'UID",
|
|
25
|
+
"status.user": "Utilisateur",
|
|
26
|
+
"status.userAdmin": "{user} (administrateur)",
|
|
27
|
+
"status.version": "Version"
|
|
28
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"app.loading": "Caricamento...",
|
|
3
|
+
"app.refresh": "Aggiorna",
|
|
4
|
+
"app.title": "Funziona",
|
|
5
|
+
"error.admin_required": "Siamo spiacenti, a questo account utente non sono stati assegnati privilegi appropriati per eseguire questa azione.",
|
|
6
|
+
"error.auth_unavailable": "Impossibile eseguire questa operazione. Riprovare più tardi.",
|
|
7
|
+
"error.bad_request": "Controllare il valore inserito e riprovare.",
|
|
8
|
+
"error.bad_response": "Impossibile eseguire questa operazione. Riprovare più tardi.",
|
|
9
|
+
"error.cross_origin": "Impossibile eseguire questa operazione. Riprovare più tardi.",
|
|
10
|
+
"error.internal": "Impossibile eseguire questa operazione. Riprovare più tardi.",
|
|
11
|
+
"error.json_required": "Impossibile eseguire questa operazione. Riprovare più tardi.",
|
|
12
|
+
"error.method_not_allowed": "Impossibile eseguire questa operazione. Riprovare più tardi.",
|
|
13
|
+
"error.network": "Connessione non riuscita. Controllare le impostazioni di rete.",
|
|
14
|
+
"error.request_too_large": "Impossibile eseguire questa operazione. Riprovare più tardi.",
|
|
15
|
+
"error.session_required": "Connessione scaduta. Accedere nuovamente.",
|
|
16
|
+
"error.unknown_method": "Impossibile eseguire questa operazione. Riprovare più tardi.",
|
|
17
|
+
"greeting.adminOnly": "Solo i membri del gruppo administrators possono modificare il saluto.",
|
|
18
|
+
"greeting.label": "Nuovo saluto",
|
|
19
|
+
"greeting.save": "Salva",
|
|
20
|
+
"greeting.setBy": "{text} — impostato da {user}",
|
|
21
|
+
"status.backend": "Backend",
|
|
22
|
+
"status.heading": "Stato del backend",
|
|
23
|
+
"status.package": "Nome pacchetto",
|
|
24
|
+
"status.uid": "Eseguito come UID",
|
|
25
|
+
"status.user": "Utente",
|
|
26
|
+
"status.userAdmin": "{user} (amministratore)",
|
|
27
|
+
"status.version": "Versione"
|
|
28
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"app.loading": "読み込み中...",
|
|
3
|
+
"app.refresh": "最新の情報に更新",
|
|
4
|
+
"app.title": "動作しています",
|
|
5
|
+
"error.admin_required": "申し訳ありませんが、このユーザー アカウントにはこの操作を行うための権限が与えられていません。",
|
|
6
|
+
"error.auth_unavailable": "この操作は実行できません。後でもう一度お試しください。",
|
|
7
|
+
"error.bad_request": "入力した値を確認して、もう一度お試しください。",
|
|
8
|
+
"error.bad_response": "この操作は実行できません。後でもう一度お試しください。",
|
|
9
|
+
"error.cross_origin": "この操作は実行できません。後でもう一度お試しください。",
|
|
10
|
+
"error.internal": "この操作は実行できません。後でもう一度お試しください。",
|
|
11
|
+
"error.json_required": "この操作は実行できません。後でもう一度お試しください。",
|
|
12
|
+
"error.method_not_allowed": "この操作は実行できません。後でもう一度お試しください。",
|
|
13
|
+
"error.network": "接続に失敗しました。ネットワーク設定を確認してください。",
|
|
14
|
+
"error.request_too_large": "この操作は実行できません。後でもう一度お試しください。",
|
|
15
|
+
"error.session_required": "接続の期限が切れています。もう 1 度サイン インしてください。",
|
|
16
|
+
"error.unknown_method": "この操作は実行できません。後でもう一度お試しください。",
|
|
17
|
+
"greeting.adminOnly": "あいさつを変更できるのは administrators グループのメンバーのみです。",
|
|
18
|
+
"greeting.label": "新しいあいさつ",
|
|
19
|
+
"greeting.save": "保存",
|
|
20
|
+
"greeting.setBy": "{text} — {user} が設定",
|
|
21
|
+
"status.backend": "バックエンド",
|
|
22
|
+
"status.heading": "バックエンドの状態",
|
|
23
|
+
"status.package": "パッケージ名",
|
|
24
|
+
"status.uid": "実行 UID",
|
|
25
|
+
"status.user": "ユーザー",
|
|
26
|
+
"status.userAdmin": "{user}(管理者)",
|
|
27
|
+
"status.version": "バージョン"
|
|
28
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"app.loading": "로드 중…",
|
|
3
|
+
"app.refresh": "새로 고침",
|
|
4
|
+
"app.title": "정상적으로 작동합니다",
|
|
5
|
+
"error.admin_required": "죄송합니다. 이 사용자 계정에는 이 작업을 수행하기에 적절한 권한이 할당되지 않았습니다.",
|
|
6
|
+
"error.auth_unavailable": "이 작업을 수행할 수 없습니다. 나중에 다시 시도하십시오.",
|
|
7
|
+
"error.bad_request": "입력한 값을 확인한 후 다시 시도하십시오.",
|
|
8
|
+
"error.bad_response": "이 작업을 수행할 수 없습니다. 나중에 다시 시도하십시오.",
|
|
9
|
+
"error.cross_origin": "이 작업을 수행할 수 없습니다. 나중에 다시 시도하십시오.",
|
|
10
|
+
"error.internal": "이 작업을 수행할 수 없습니다. 나중에 다시 시도하십시오.",
|
|
11
|
+
"error.json_required": "이 작업을 수행할 수 없습니다. 나중에 다시 시도하십시오.",
|
|
12
|
+
"error.method_not_allowed": "이 작업을 수행할 수 없습니다. 나중에 다시 시도하십시오.",
|
|
13
|
+
"error.network": "연결 실패. 네트워크 설정을 확인해 주십시오.",
|
|
14
|
+
"error.request_too_large": "이 작업을 수행할 수 없습니다. 나중에 다시 시도하십시오.",
|
|
15
|
+
"error.session_required": "연결 만료됨. 다시 로그인 해 주십시오.",
|
|
16
|
+
"error.unknown_method": "이 작업을 수행할 수 없습니다. 나중에 다시 시도하십시오.",
|
|
17
|
+
"greeting.adminOnly": "administrators 그룹의 구성원만 인사말을 변경할 수 있습니다.",
|
|
18
|
+
"greeting.label": "새 인사말",
|
|
19
|
+
"greeting.save": "저장",
|
|
20
|
+
"greeting.setBy": "{text} — {user}님이 설정함",
|
|
21
|
+
"status.backend": "백엔드",
|
|
22
|
+
"status.heading": "백엔드 상태",
|
|
23
|
+
"status.package": "패키지 이름",
|
|
24
|
+
"status.uid": "실행 UID",
|
|
25
|
+
"status.user": "사용자",
|
|
26
|
+
"status.userAdmin": "{user}(관리자)",
|
|
27
|
+
"status.version": "버전"
|
|
28
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"app.loading": "加载中...",
|
|
3
|
+
"app.refresh": "刷新",
|
|
4
|
+
"app.title": "运行成功",
|
|
5
|
+
"error.admin_required": "抱歉,此用户帐户权限不足,无法执行此操作。",
|
|
6
|
+
"error.auth_unavailable": "无法执行此操作。请稍后再试。",
|
|
7
|
+
"error.bad_request": "请检查输入的值后重试。",
|
|
8
|
+
"error.bad_response": "无法执行此操作。请稍后再试。",
|
|
9
|
+
"error.cross_origin": "无法执行此操作。请稍后再试。",
|
|
10
|
+
"error.internal": "无法执行此操作。请稍后再试。",
|
|
11
|
+
"error.json_required": "无法执行此操作。请稍后再试。",
|
|
12
|
+
"error.method_not_allowed": "无法执行此操作。请稍后再试。",
|
|
13
|
+
"error.network": "无法联机,请检查你的网络设置。",
|
|
14
|
+
"error.request_too_large": "无法执行此操作。请稍后再试。",
|
|
15
|
+
"error.session_required": "联机超时,请重新登录。",
|
|
16
|
+
"error.unknown_method": "无法执行此操作。请稍后再试。",
|
|
17
|
+
"greeting.adminOnly": "只有 administrators 群组的成员可以更改问候语。",
|
|
18
|
+
"greeting.label": "新的问候语",
|
|
19
|
+
"greeting.save": "保存",
|
|
20
|
+
"greeting.setBy": "{text} — 由 {user} 设置",
|
|
21
|
+
"status.backend": "后端",
|
|
22
|
+
"status.heading": "后端状态",
|
|
23
|
+
"status.package": "套件名称",
|
|
24
|
+
"status.uid": "运行身份 UID",
|
|
25
|
+
"status.user": "用户帐号",
|
|
26
|
+
"status.userAdmin": "{user}(管理员)",
|
|
27
|
+
"status.version": "版本"
|
|
28
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"app.loading": "載入中...",
|
|
3
|
+
"app.refresh": "重新整理",
|
|
4
|
+
"app.title": "成功運作了",
|
|
5
|
+
"error.admin_required": "抱歉,此使用者帳號權限不足,無法執行此動作。",
|
|
6
|
+
"error.auth_unavailable": "無法執行此操作。請稍後再試。",
|
|
7
|
+
"error.bad_request": "請檢查輸入的值後再試一次。",
|
|
8
|
+
"error.bad_response": "無法執行此操作。請稍後再試。",
|
|
9
|
+
"error.cross_origin": "無法執行此操作。請稍後再試。",
|
|
10
|
+
"error.internal": "無法執行此操作。請稍後再試。",
|
|
11
|
+
"error.json_required": "無法執行此操作。請稍後再試。",
|
|
12
|
+
"error.method_not_allowed": "無法執行此操作。請稍後再試。",
|
|
13
|
+
"error.network": "無法連線,請檢查你的網路設定。",
|
|
14
|
+
"error.request_too_large": "無法執行此操作。請稍後再試。",
|
|
15
|
+
"error.session_required": "連線逾時。請重新登入。",
|
|
16
|
+
"error.unknown_method": "無法執行此操作。請稍後再試。",
|
|
17
|
+
"greeting.adminOnly": "只有 administrators 群組的成員可以變更問候語。",
|
|
18
|
+
"greeting.label": "新的問候語",
|
|
19
|
+
"greeting.save": "儲存",
|
|
20
|
+
"greeting.setBy": "{text} — 由 {user} 設定",
|
|
21
|
+
"status.backend": "後端",
|
|
22
|
+
"status.heading": "後端狀態",
|
|
23
|
+
"status.package": "套件名稱",
|
|
24
|
+
"status.uid": "執行身分 UID",
|
|
25
|
+
"status.user": "使用者帳號",
|
|
26
|
+
"status.userAdmin": "{user}(管理員)",
|
|
27
|
+
"status.version": "版本"
|
|
28
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/* Scoped to .dsmapp: the DSM desktop shares one page with every other app. */
|
|
2
|
+
.dsmapp {
|
|
3
|
+
box-sizing: border-box;
|
|
4
|
+
height: 100%;
|
|
5
|
+
overflow: auto;
|
|
6
|
+
padding: 20px 24px;
|
|
7
|
+
font: 13px/1.5 "Noto Sans", "Helvetica Neue", Arial, sans-serif;
|
|
8
|
+
color: #1d2733;
|
|
9
|
+
background: #fff;
|
|
10
|
+
}
|
|
11
|
+
.dsmapp-header { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
|
|
12
|
+
.dsmapp h1 { margin: 0 0 4px; font-size: 20px; font-weight: 600; }
|
|
13
|
+
.dsmapp-secondary {
|
|
14
|
+
height: 28px; padding: 0 12px; border: 1px solid #c8d0da; border-radius: 3px;
|
|
15
|
+
background: #fff; color: inherit; font: inherit; cursor: pointer;
|
|
16
|
+
}
|
|
17
|
+
.dsmapp h2 { margin: 24px 0 8px; font-size: 14px; font-weight: 600; }
|
|
18
|
+
.dsmapp-greeting { margin: 0 0 12px; font-size: 15px; }
|
|
19
|
+
.dsmapp-form { display: flex; gap: 8px; max-width: 420px; }
|
|
20
|
+
.dsmapp-form[hidden] { display: none; }
|
|
21
|
+
.dsmapp-form input {
|
|
22
|
+
flex: 1; height: 28px; padding: 0 8px;
|
|
23
|
+
border: 1px solid #c8d0da; border-radius: 3px; font: inherit;
|
|
24
|
+
}
|
|
25
|
+
.dsmapp-form button {
|
|
26
|
+
height: 30px; padding: 0 16px; border: 0; border-radius: 3px;
|
|
27
|
+
background: #0086e5; color: #fff; font: inherit; cursor: pointer;
|
|
28
|
+
}
|
|
29
|
+
.dsmapp-form button:disabled { opacity: 0.6; cursor: default; }
|
|
30
|
+
.dsmapp-note { margin: 0; color: #5d6b7a; }
|
|
31
|
+
.dsmapp-note[hidden] { display: none; }
|
|
32
|
+
.dsmapp-message { min-height: 1.5em; color: #c0392b; }
|
|
33
|
+
.dsmapp-facts { display: grid; grid-template-columns: max-content 1fr; gap: 4px 16px; margin: 0; }
|
|
34
|
+
.dsmapp-facts dt { color: #5d6b7a; }
|
|
35
|
+
.dsmapp-facts dd { margin: 0; }
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
// The app inside the DSM window. The generated DSM wrapper loads this file and
|
|
2
|
+
// calls mount(root, ctx) when the window opens:
|
|
3
|
+
// ctx.call(method, params) -> Promise<data> POSTs to the package CGI with
|
|
4
|
+
// DSM's session; rejects with
|
|
5
|
+
// { code, message } on errors
|
|
6
|
+
// ctx.t(key, params) -> text from i18n/messages/<locale>.json in DSM's
|
|
7
|
+
// language ({name} placeholders, key.one/.other
|
|
8
|
+
// plurals with { count }), English as fallback
|
|
9
|
+
// ctx.locale -> "en", "zh-TW", … (use it for Intl formatting)
|
|
10
|
+
// ctx.reopen(fn) -> idempotent unsubscribe; fn runs on re-show
|
|
11
|
+
// ctx.host.platform() -> read-only host/launch mode/language/version snapshot
|
|
12
|
+
// ctx.host.setTitle(text) -> encoded DSM title or standalone document.title;
|
|
13
|
+
// inspect the returned status, not host authority
|
|
14
|
+
// ctx.host.subscribe(event, fn) -> status + dispose for window-resize;
|
|
15
|
+
// host-theme/language-change unsupported
|
|
16
|
+
// ctx.host.openFileManager(path) / revealFile(path) -> File Station virtual path
|
|
17
|
+
// request only; preview/details/settings return unsupported, never a grant
|
|
18
|
+
// Replace everything below with your own UI (plain JS, or a bundle you build
|
|
19
|
+
// with Vite/Vue into this folder -- see README.md).
|
|
20
|
+
(function () {
|
|
21
|
+
"use strict";
|
|
22
|
+
|
|
23
|
+
function el(tag, attrs, children) {
|
|
24
|
+
var node = document.createElement(tag);
|
|
25
|
+
Object.keys(attrs || {}).forEach(function (key) {
|
|
26
|
+
if (key === "text") node.textContent = attrs[key];
|
|
27
|
+
else node.setAttribute(key, attrs[key]);
|
|
28
|
+
});
|
|
29
|
+
(children || []).forEach(function (child) { node.appendChild(child); });
|
|
30
|
+
return node;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function mount(root, ctx) {
|
|
34
|
+
var t = ctx.t;
|
|
35
|
+
var status = el("dl", { class: "dsmapp-facts" });
|
|
36
|
+
var greeting = el("p", { class: "dsmapp-greeting", text: t("app.loading") });
|
|
37
|
+
var input = el("input", { type: "text", maxlength: "200", "aria-label": t("greeting.label"), placeholder: t("greeting.label") });
|
|
38
|
+
var save = el("button", { type: "submit", text: t("greeting.save") });
|
|
39
|
+
var refreshButton = el("button", { type: "button", class: "dsmapp-secondary", text: t("app.refresh") });
|
|
40
|
+
var message = el("p", { class: "dsmapp-message", role: "status" });
|
|
41
|
+
var form = el("form", { class: "dsmapp-form", hidden: "" }, [input, save]);
|
|
42
|
+
var adminOnly = el("p", { class: "dsmapp-note", hidden: "", text: t("greeting.adminOnly") });
|
|
43
|
+
|
|
44
|
+
root.classList.add("dsmapp");
|
|
45
|
+
root.replaceChildren(
|
|
46
|
+
el("div", { class: "dsmapp-header" }, [el("h1", { text: t("app.title") }), refreshButton]),
|
|
47
|
+
greeting,
|
|
48
|
+
form,
|
|
49
|
+
adminOnly,
|
|
50
|
+
message,
|
|
51
|
+
el("h2", { text: t("status.heading") }),
|
|
52
|
+
status
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
// Errors arrive as { code }; the backend's English message is only a fallback.
|
|
56
|
+
function showError(error) {
|
|
57
|
+
var code = (error && error.code) || "internal";
|
|
58
|
+
var text = t("error." + code);
|
|
59
|
+
message.textContent = text === "error." + code ? (error && error.message) || t("error.internal") : text;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function refresh() {
|
|
63
|
+
message.textContent = "";
|
|
64
|
+
ctx.call("app.status").then(function (data) {
|
|
65
|
+
status.replaceChildren();
|
|
66
|
+
[[t("status.user"), data.admin ? t("status.userAdmin", { user: data.user }) : data.user],
|
|
67
|
+
[t("status.package"), data.package],
|
|
68
|
+
[t("status.version"), data.version],
|
|
69
|
+
[t("status.backend"), data.go_version + " · " + data.platform],
|
|
70
|
+
[t("status.uid"), String(data.process.uid)]].forEach(function (row) {
|
|
71
|
+
status.appendChild(el("dt", { text: row[0] }));
|
|
72
|
+
status.appendChild(el("dd", { text: row[1] }));
|
|
73
|
+
});
|
|
74
|
+
form.hidden = !data.admin;
|
|
75
|
+
adminOnly.hidden = data.admin;
|
|
76
|
+
}).catch(showError);
|
|
77
|
+
ctx.call("greeting.get").then(function (data) {
|
|
78
|
+
greeting.textContent = data.updated_by
|
|
79
|
+
? t("greeting.setBy", { text: data.text, user: data.updated_by })
|
|
80
|
+
: data.text;
|
|
81
|
+
}).catch(showError);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
form.addEventListener("submit", function (event) {
|
|
85
|
+
event.preventDefault();
|
|
86
|
+
save.disabled = true;
|
|
87
|
+
ctx.call("greeting.set", { text: input.value })
|
|
88
|
+
.then(function () { input.value = ""; refresh(); })
|
|
89
|
+
.catch(showError)
|
|
90
|
+
.then(function () { save.disabled = false; });
|
|
91
|
+
});
|
|
92
|
+
refreshButton.addEventListener("click", refresh);
|
|
93
|
+
|
|
94
|
+
ctx.reopen(refresh);
|
|
95
|
+
refresh();
|
|
96
|
+
return { unmount: function () { root.replaceChildren(); } };
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
window.DsmPackageApps = window.DsmPackageApps || {};
|
|
100
|
+
window.DsmPackageApps[document.currentScript.dataset.package] = { mount: mount };
|
|
101
|
+
})();
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
package app
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"bytes"
|
|
5
|
+
"context"
|
|
6
|
+
"crypto/rand"
|
|
7
|
+
"encoding/hex"
|
|
8
|
+
"encoding/json"
|
|
9
|
+
"errors"
|
|
10
|
+
"io"
|
|
11
|
+
"io/fs"
|
|
12
|
+
"os"
|
|
13
|
+
"os/exec"
|
|
14
|
+
"syscall"
|
|
15
|
+
"time"
|
|
16
|
+
|
|
17
|
+
"dsmapp/internal/api"
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
const maxIdentityBytes = 1 << 20
|
|
21
|
+
|
|
22
|
+
// Only the selected overlay includes this runner. It invokes a fixed package
|
|
23
|
+
// payload as the package account, never a root helper or arbitrary command.
|
|
24
|
+
var identityRun = func(ctx context.Context, cfg Config, input []byte) ([]byte, error) {
|
|
25
|
+
ctx, cancel := context.WithTimeout(ctx, 10*time.Second)
|
|
26
|
+
defer cancel()
|
|
27
|
+
cmd := exec.CommandContext(ctx, "/var/packages/Node.js_v22/target/usr/local/bin/node", "/var/packages/"+cfg.PackageID+"/target/integration/identity/app.mjs")
|
|
28
|
+
cmd.Env = []string{"NODE_ENV=production", "PATH=/usr/bin:/bin"}
|
|
29
|
+
cmd.Stdin = bytes.NewReader(input)
|
|
30
|
+
var out limitedIdentityOutput
|
|
31
|
+
cmd.Stdout = &out
|
|
32
|
+
// Do not expose subprocess messages or credentials in the CGI envelope.
|
|
33
|
+
if err := cmd.Run(); err != nil {
|
|
34
|
+
return nil, err
|
|
35
|
+
}
|
|
36
|
+
return out.Bytes(), nil
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
type limitedIdentityOutput struct{ bytes.Buffer }
|
|
40
|
+
|
|
41
|
+
func (w *limitedIdentityOutput) Write(p []byte) (int, error) {
|
|
42
|
+
if w.Len()+len(p) > maxIdentityBytes {
|
|
43
|
+
return 0, errors.New("oversized identity output")
|
|
44
|
+
}
|
|
45
|
+
return w.Buffer.Write(p)
|
|
46
|
+
}
|
|
47
|
+
func (cfg Config) identityRoutes() []api.Route {
|
|
48
|
+
return []api.Route{
|
|
49
|
+
api.User("identity.status", func(_ context.Context, _ api.Caller, p json.RawMessage) (any, error) {
|
|
50
|
+
if err := decodeParams(p, &struct{}{}); err != nil {
|
|
51
|
+
return nil, err
|
|
52
|
+
}
|
|
53
|
+
return map[string]string{"mode": "better-auth"}, nil
|
|
54
|
+
}),
|
|
55
|
+
api.User("identity.login", cfg.identityHandler("login")), api.User("identity.current", cfg.identityHandler("current")), api.User("identity.logout", cfg.identityHandler("logout")),
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
func (cfg Config) identityHandler(method string) api.Handler {
|
|
59
|
+
return func(ctx context.Context, caller api.Caller, params json.RawMessage) (any, error) {
|
|
60
|
+
var cookie string
|
|
61
|
+
if method == "login" {
|
|
62
|
+
if err := decodeParams(params, &struct{}{}); err != nil {
|
|
63
|
+
return nil, err
|
|
64
|
+
}
|
|
65
|
+
} else {
|
|
66
|
+
var in struct {
|
|
67
|
+
Cookie string `json:"cookie"`
|
|
68
|
+
}
|
|
69
|
+
if err := decodeParams(params, &in); err != nil {
|
|
70
|
+
return nil, err
|
|
71
|
+
}
|
|
72
|
+
cookie = in.Cookie
|
|
73
|
+
if len(cookie) > 8192 {
|
|
74
|
+
return nil, api.BadRequest("app session too large")
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if _, err := cfg.personalID(ctx, caller); err != nil {
|
|
78
|
+
return nil, err
|
|
79
|
+
}
|
|
80
|
+
principal, err := personalLookup(caller.User())
|
|
81
|
+
if err != nil || principal.Username != caller.User() {
|
|
82
|
+
return nil, identityUnavailable()
|
|
83
|
+
}
|
|
84
|
+
result, err := cfg.identityExchange(ctx, method, cookie, map[string]string{"name": caller.User(), "uid": principal.Uid, "gid": principal.Gid})
|
|
85
|
+
if err != nil {
|
|
86
|
+
return nil, identityUnavailable()
|
|
87
|
+
}
|
|
88
|
+
if !result.OK {
|
|
89
|
+
return nil, &api.Error{Code: "identity_refused", Message: "App session refused; create a fresh app session with your DSM login"}
|
|
90
|
+
}
|
|
91
|
+
return map[string]string{"user": result.User, "cookie": result.Cookie, "expiresAt": result.ExpiresAt}, nil
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
type identityResult struct {
|
|
96
|
+
OK bool `json:"ok"`
|
|
97
|
+
User string `json:"user"`
|
|
98
|
+
Cookie string `json:"cookie"`
|
|
99
|
+
ExpiresAt string `json:"expiresAt"`
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
func identityUnavailable() error {
|
|
103
|
+
return &api.Error{Code: "identity_unavailable", Message: "Optional Node identity is unavailable; check the selected Node.js_v22 runtime"}
|
|
104
|
+
}
|
|
105
|
+
func (cfg Config) identityExchange(ctx context.Context, method, cookie string, principal map[string]string) (identityResult, error) {
|
|
106
|
+
var result identityResult
|
|
107
|
+
root, err := os.OpenRoot(cfg.DataDir)
|
|
108
|
+
if err != nil {
|
|
109
|
+
return result, err
|
|
110
|
+
}
|
|
111
|
+
defer root.Close()
|
|
112
|
+
if err = root.Mkdir("identity", 0700); err != nil && !errors.Is(err, fs.ErrExist) {
|
|
113
|
+
return result, err
|
|
114
|
+
}
|
|
115
|
+
info, err := root.Lstat("identity")
|
|
116
|
+
if err != nil || !info.IsDir() || info.Mode().Perm()&0077 != 0 {
|
|
117
|
+
return result, errors.New("unsafe directory")
|
|
118
|
+
}
|
|
119
|
+
dir, err := root.OpenRoot("identity")
|
|
120
|
+
if err != nil {
|
|
121
|
+
return result, err
|
|
122
|
+
}
|
|
123
|
+
defer dir.Close()
|
|
124
|
+
lock, err := dir.OpenFile("store.lock", os.O_CREATE|os.O_RDWR|syscall.O_NOFOLLOW, 0600)
|
|
125
|
+
if err != nil {
|
|
126
|
+
return result, err
|
|
127
|
+
}
|
|
128
|
+
defer lock.Close()
|
|
129
|
+
if err = personalRegular(lock); err != nil {
|
|
130
|
+
return result, err
|
|
131
|
+
}
|
|
132
|
+
// Nonblocking retry bounds contention. CGI never hangs on an abandoned lock.
|
|
133
|
+
deadline := time.NewTimer(10 * time.Second)
|
|
134
|
+
defer deadline.Stop()
|
|
135
|
+
for {
|
|
136
|
+
err = syscall.Flock(int(lock.Fd()), syscall.LOCK_EX|syscall.LOCK_NB)
|
|
137
|
+
if err == nil {
|
|
138
|
+
break
|
|
139
|
+
}
|
|
140
|
+
if err != syscall.EWOULDBLOCK && err != syscall.EAGAIN {
|
|
141
|
+
return result, err
|
|
142
|
+
}
|
|
143
|
+
select {
|
|
144
|
+
case <-ctx.Done():
|
|
145
|
+
return result, ctx.Err()
|
|
146
|
+
case <-deadline.C:
|
|
147
|
+
return result, errors.New("identity busy")
|
|
148
|
+
case <-time.After(10 * time.Millisecond):
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
defer syscall.Flock(int(lock.Fd()), syscall.LOCK_UN)
|
|
152
|
+
store := json.RawMessage(`{}`)
|
|
153
|
+
f, err := dir.OpenFile("store.json", os.O_RDONLY|syscall.O_NOFOLLOW, 0)
|
|
154
|
+
if err == nil {
|
|
155
|
+
if err = personalRegular(f); err != nil {
|
|
156
|
+
f.Close()
|
|
157
|
+
return result, err
|
|
158
|
+
}
|
|
159
|
+
b, e := io.ReadAll(io.LimitReader(f, maxIdentityBytes+1))
|
|
160
|
+
f.Close()
|
|
161
|
+
if e != nil || len(b) > maxIdentityBytes || !json.Valid(b) {
|
|
162
|
+
return result, errors.New("invalid store")
|
|
163
|
+
}
|
|
164
|
+
store = b
|
|
165
|
+
} else if !errors.Is(err, fs.ErrNotExist) {
|
|
166
|
+
return result, err
|
|
167
|
+
}
|
|
168
|
+
nonce := make([]byte, 32)
|
|
169
|
+
if _, err = rand.Read(nonce); err != nil {
|
|
170
|
+
return result, err
|
|
171
|
+
}
|
|
172
|
+
input, err := json.Marshal(map[string]any{"packageID": cfg.PackageID, "store": store, "method": method, "cookie": cookie, "principal": principal, "ticket": hex.EncodeToString(nonce)})
|
|
173
|
+
if err != nil || len(input) > maxIdentityBytes {
|
|
174
|
+
return result, errors.New("identity input too large")
|
|
175
|
+
}
|
|
176
|
+
output, err := identityRun(ctx, cfg, input)
|
|
177
|
+
if err != nil || len(output) > maxIdentityBytes {
|
|
178
|
+
return result, errors.New("identity subprocess failed")
|
|
179
|
+
}
|
|
180
|
+
var response struct {
|
|
181
|
+
Store json.RawMessage `json:"store"`
|
|
182
|
+
Result identityResult `json:"result"`
|
|
183
|
+
}
|
|
184
|
+
if err = json.Unmarshal(output, &response); err != nil || len(response.Store) == 0 || !json.Valid(response.Store) {
|
|
185
|
+
return result, errors.New("invalid response")
|
|
186
|
+
}
|
|
187
|
+
tempName := ".store-" + hex.EncodeToString(nonce)
|
|
188
|
+
temp, err := dir.OpenFile(tempName, os.O_CREATE|os.O_EXCL|os.O_WRONLY|syscall.O_NOFOLLOW, 0600)
|
|
189
|
+
if err != nil {
|
|
190
|
+
return result, err
|
|
191
|
+
}
|
|
192
|
+
defer dir.Remove(tempName)
|
|
193
|
+
_, err = temp.Write(response.Store)
|
|
194
|
+
if err == nil {
|
|
195
|
+
err = temp.Sync()
|
|
196
|
+
}
|
|
197
|
+
closeErr := temp.Close()
|
|
198
|
+
if err != nil {
|
|
199
|
+
return result, err
|
|
200
|
+
}
|
|
201
|
+
if closeErr != nil {
|
|
202
|
+
return result, closeErr
|
|
203
|
+
}
|
|
204
|
+
if err = dir.Rename(tempName, "store.json"); err != nil {
|
|
205
|
+
return result, err
|
|
206
|
+
}
|
|
207
|
+
return response.Result, nil
|
|
208
|
+
}
|