@synopackageland/cli 0.4.0 → 0.5.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/LICENSE +21 -0
- package/README.md +42 -1
- package/dist/build-spk/delete-app-data.d.ts +27 -7
- package/dist/build-spk/delete-app-data.js +35 -34
- package/dist/build-spk/dsm-arch.d.ts +6 -1
- package/dist/build-spk/dsm-arch.js +25 -1
- package/dist/build-spk/dsm-version.d.ts +14 -0
- package/dist/build-spk/dsm-version.js +47 -0
- package/dist/build-spk/gateway.d.ts +31 -0
- package/dist/build-spk/gateway.js +55 -0
- package/dist/build-spk/generator.d.ts +5 -0
- package/dist/build-spk/generator.js +106 -107
- package/dist/build-spk/install-wizard.d.ts +20 -0
- package/dist/build-spk/install-wizard.js +76 -0
- package/dist/build-spk/native-lifecycle.d.ts +5 -0
- package/dist/build-spk/native-lifecycle.js +12 -2
- package/dist/build-spk/notices.d.ts +5 -0
- package/dist/build-spk/notices.js +60 -0
- package/dist/build-spk/resource-worker.d.ts +9 -4
- package/dist/build-spk/resource-worker.js +15 -6
- package/dist/build-spk/share-combobox.d.ts +3 -0
- package/dist/build-spk/share-combobox.js +27 -0
- package/dist/build-spk/uninstall-wizard.d.ts +14 -0
- package/dist/build-spk/uninstall-wizard.js +33 -0
- package/dist/build-spk/wizard-i18n.d.ts +18 -0
- package/dist/build-spk/wizard-i18n.js +38 -0
- package/dist/build-spk/wizard-messages.d.ts +388 -0
- package/dist/build-spk/wizard-messages.js +387 -0
- package/dist/cli.js +136 -29
- package/dist/compose/analyze.d.ts +20 -0
- package/dist/compose/analyze.js +75 -11
- package/dist/contract/validate.js +33 -1
- package/dist/contract/web-launch.d.ts +22 -0
- package/dist/contract/web-launch.js +37 -0
- package/dist/deploy/deploy.d.ts +3 -0
- package/dist/deploy/deploy.js +11 -2
- package/dist/error-registry.js +80 -1
- package/dist/host/open-url.d.ts +2 -0
- package/dist/host/open-url.js +4 -1
- package/dist/images/pin.d.ts +52 -0
- package/dist/images/pin.js +249 -0
- package/dist/init.d.ts +29 -1
- package/dist/init.js +122 -25
- package/dist/inspect.d.ts +3 -0
- package/dist/inspect.js +15 -3
- package/dist/standalone/background.d.ts +21 -0
- package/dist/standalone/background.js +52 -0
- package/dist/standalone/binary.d.ts +1 -0
- package/dist/standalone/binary.js +1 -1
- package/dist/standalone/build.d.ts +2 -0
- package/dist/standalone/build.js +40 -6
- package/dist/standalone/daemon.d.ts +23 -0
- package/dist/standalone/daemon.js +114 -0
- package/dist/standalone/dsm-window.d.ts +1 -1
- package/dist/standalone/dsm-window.js +52 -12
- package/dist/standalone/helper-inventory.d.ts +31 -0
- package/dist/standalone/helper-inventory.js +11 -0
- package/dist/standalone/helper.d.ts +3 -12
- package/dist/standalone/helper.js +31 -12
- package/dist/standalone/host-adapter.d.ts +5 -0
- package/dist/standalone/host-adapter.js +166 -0
- package/dist/standalone/host-file-navigation.d.ts +7 -0
- package/dist/standalone/host-file-navigation.js +172 -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/inspect-helper.d.ts +6 -0
- package/dist/standalone/inspect-helper.js +93 -0
- package/dist/standalone/inspect-spk.d.ts +3 -1
- package/dist/standalone/inspect-spk.js +247 -5
- package/dist/standalone/job-diagnostics.d.ts +1 -0
- package/dist/standalone/job-diagnostics.js +49 -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 +63 -0
- package/dist/standalone/manifest.d.ts +17 -2
- package/dist/standalone/manifest.js +40 -6
- package/dist/standalone/native-layout.d.ts +74 -0
- package/dist/standalone/native-layout.js +318 -0
- package/dist/standalone/reopen-events.d.ts +2 -0
- package/dist/standalone/reopen-events.js +28 -0
- package/dist/standalone/resource.d.ts +11 -0
- package/dist/standalone/resource.js +13 -0
- package/dist/standalone/root-messages.js +9 -0
- package/dist/standalone/root-window.d.ts +6 -3
- package/dist/standalone/root-window.js +160 -30
- package/dist/standalone/shared-folder.d.ts +39 -0
- package/dist/standalone/shared-folder.js +141 -0
- package/dist/standalone/spk.d.ts +6 -3
- package/dist/standalone/spk.js +52 -35
- package/dist/standalone/worker-contract-json.d.ts +8 -0
- package/dist/standalone/worker-contract-json.js +141 -0
- package/dist/standalone/worker-contract.d.ts +189 -0
- package/dist/standalone/worker-contract.js +175 -0
- package/dist/standalone/worker-registry.d.ts +40 -0
- package/dist/standalone/worker-registry.js +167 -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 +5 -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/_gateway/auth.go +101 -0
- package/dist/templates/_gateway/auth_test.go +216 -0
- package/dist/templates/_gateway/cgi.go +133 -0
- package/dist/templates/_gateway/cgi_test.go +156 -0
- package/dist/templates/_gateway/csrf.go +73 -0
- package/dist/templates/_gateway/csrf_test.go +155 -0
- package/dist/templates/_gateway/directory.go +108 -0
- package/dist/templates/_gateway/directory_test.go +202 -0
- package/dist/templates/_gateway/gateway.go +412 -0
- package/dist/templates/_gateway/gateway_test.go +676 -0
- package/dist/templates/_gateway/go.mod +3 -0
- package/dist/templates/_gateway/groups.go +66 -0
- package/dist/templates/_gateway/main.go +45 -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 +1 -1
- package/dist/templates/compose-import/compose.yaml +1 -1
- package/dist/templates/compose-import/synology-app.yaml +1 -1
- package/dist/templates/hello-files/compose.yaml +1 -1
- package/dist/templates/hello-files/synology-app.yaml +1 -1
- package/dist/templates/hello-web/compose.yaml +5 -2
- package/dist/templates/hello-web/synology-app.yaml +4 -1
- package/dist/templates/hello-web-page/compose.yaml +5 -2
- package/dist/templates/hello-web-page/synology-app.yaml +4 -1
- package/dist/templates/native-go/README.md +149 -4
- package/dist/templates/native-go/backend/THIRD_PARTY_NOTICES.txt +61 -0
- package/dist/templates/native-go/backend/cmd/app/main.go +17 -0
- package/dist/templates/native-go/backend/cmd/app/sdk_main.go +60 -0
- package/dist/templates/native-go/backend/cmd/background-worker/main.go +38 -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 +10 -1
- package/dist/templates/native-go/backend/cmd/helper/sdk_registry.go +19 -0
- package/dist/templates/native-go/backend/go.mod +7 -1
- 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/registry.go +28 -7
- package/dist/templates/native-go/backend/internal/api/server.go +11 -1
- package/dist/templates/native-go/backend/internal/app/background.go +270 -0
- package/dist/templates/native-go/backend/internal/app/background_none.go +8 -0
- package/dist/templates/native-go/backend/internal/app/background_owner.go +59 -0
- package/dist/templates/native-go/backend/internal/app/background_owner_test.go +145 -0
- package/dist/templates/native-go/backend/internal/app/background_schedule.go +74 -0
- package/dist/templates/native-go/backend/internal/app/background_schedule_test.go +62 -0
- package/dist/templates/native-go/backend/internal/app/background_test.go +346 -0
- package/dist/templates/native-go/backend/internal/app/integration_state.go +16 -0
- package/dist/templates/native-go/backend/internal/app/migrations.go +41 -0
- package/dist/templates/native-go/backend/internal/app/migrations_test.go +41 -0
- package/dist/templates/native-go/backend/internal/app/nas_cgi_artifact_test.go +129 -0
- package/dist/templates/native-go/backend/internal/app/nas_refusal_test.go +46 -0
- package/dist/templates/native-go/backend/internal/app/routes.go +28 -3
- package/dist/templates/native-go/backend/internal/app/routes_test.go +27 -5
- package/dist/templates/native-go/backend/internal/app/sdk_jobs.go +70 -0
- package/dist/templates/native-go/backend/internal/app/sdk_jobs_test.go +116 -0
- package/dist/templates/native-go/backend/internal/app/sdk_routes.go +174 -0
- package/dist/templates/native-go/backend/internal/app/session_files.go +15 -0
- package/dist/templates/native-go/backend/internal/app/session_files_test.go +26 -0
- package/dist/templates/native-go/backend/internal/app/shared_folder.go +144 -0
- package/dist/templates/native-go/backend/internal/app/shared_folder_test.go +158 -0
- package/dist/templates/native-go/backend/internal/background/access.go +57 -0
- package/dist/templates/native-go/backend/internal/background/owner_test.go +126 -0
- package/dist/templates/native-go/backend/internal/background/runner.go +185 -0
- package/dist/templates/native-go/backend/internal/background/runner_test.go +209 -0
- package/dist/templates/native-go/backend/internal/background/schedule.go +300 -0
- package/dist/templates/native-go/backend/internal/background/schedule_test.go +335 -0
- package/dist/templates/native-go/backend/internal/background/store.go +807 -0
- package/dist/templates/native-go/backend/internal/background/store_test.go +407 -0
- package/dist/templates/native-go/backend/internal/datamigrate/migrate.go +191 -0
- package/dist/templates/native-go/backend/internal/datamigrate/migrate_test.go +177 -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/filestation/browse_test.go +67 -0
- package/dist/templates/native-go/backend/internal/filestation/client.go +251 -0
- package/dist/templates/native-go/backend/internal/filestation/client_test.go +155 -0
- package/dist/templates/native-go/backend/internal/filestation/doc.go +4 -0
- package/dist/templates/native-go/backend/internal/filestation/read_file_test.go +90 -0
- package/dist/templates/native-go/backend/internal/filestation/repository.go +207 -0
- package/dist/templates/native-go/backend/internal/filestation/repository_test.go +104 -0
- package/dist/templates/native-go/backend/internal/filestation/sdk_session.go +241 -0
- package/dist/templates/native-go/backend/internal/filestation/sdk_session_test.go +183 -0
- package/dist/templates/native-go/backend/internal/filestation/service.go +254 -0
- package/dist/templates/native-go/backend/internal/filestation/service_test.go +94 -0
- package/dist/templates/native-go/backend/internal/filestation/session_semantics_test.go +383 -0
- package/dist/templates/native-go/backend/internal/filestation/write.go +72 -0
- package/dist/templates/native-go/backend/internal/filestation/write_test.go +123 -0
- package/dist/templates/native-go/backend/internal/helper/background_proof.go +163 -0
- package/dist/templates/native-go/backend/internal/helper/background_proof_contract.go +46 -0
- package/dist/templates/native-go/backend/internal/helper/background_proof_test.go +161 -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 +226 -21
- package/dist/templates/native-go/backend/internal/helper/control_test.go +10 -2
- package/dist/templates/native-go/backend/internal/helper/data_contract.go +245 -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 +419 -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 +519 -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 +416 -0
- package/dist/templates/native-go/backend/internal/helper/grant_repository_linux_test.go +469 -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 +78 -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/jobcontract/bindings.go +48 -0
- package/dist/templates/native-go/backend/internal/helper/jobcontract/contract_test.go +436 -0
- package/dist/templates/native-go/backend/internal/helper/jobcontract/decode.go +185 -0
- package/dist/templates/native-go/backend/internal/helper/jobcontract/digest.go +55 -0
- package/dist/templates/native-go/backend/internal/helper/jobcontract/registry.go +85 -0
- package/dist/templates/native-go/backend/internal/helper/jobcontract/registry_test.go +73 -0
- package/dist/templates/native-go/backend/internal/helper/jobcontract/result.go +53 -0
- package/dist/templates/native-go/backend/internal/helper/jobcontract/stub.go +8 -0
- package/dist/templates/native-go/backend/internal/helper/jobcontract/testdata/input-digests.json +127 -0
- package/dist/templates/native-go/backend/internal/helper/jobcontract/types.go +234 -0
- package/dist/templates/native-go/backend/internal/helper/jobcontract/types_test.go +29 -0
- package/dist/templates/native-go/backend/internal/helper/jobcontract/validate.go +462 -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/legacy_authority_schema_linux_test.go +34 -0
- package/dist/templates/native-go/backend/internal/helper/legacy_authority_schema_test.go +6 -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/management.go +79 -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 +244 -0
- package/dist/templates/native-go/backend/internal/helper/observation_health_test.go +127 -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 +155 -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 +130 -0
- package/dist/templates/native-go/backend/internal/helper/observer_diagnostic_test.go +98 -0
- package/dist/templates/native-go/backend/internal/helper/observer_diagnostic_writer.go +40 -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/process_linux.go +14 -1
- package/dist/templates/native-go/backend/internal/helper/publication_test.go +178 -0
- package/dist/templates/native-go/backend/internal/helper/query_deadline_linux_test.go +115 -0
- package/dist/templates/native-go/backend/internal/helper/query_pending_diagnostic_test.go +254 -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 +203 -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 +250 -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/sdk_assembly_linux.go +51 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_attach.go +83 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_attach_contract.go +32 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_attach_test.go +184 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_authority_schema_test.go +6 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_background_authority.go +832 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_background_authority_test.go +714 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_background_invalidation.go +218 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_background_lease.go +218 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_background_snapshot.go +110 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_background_store_linux_test.go +261 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_background_store_test.go +58 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_bindings.go +60 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_data_contract.go +251 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_data_protocol.go +424 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_dispatch_absence_test.go +51 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_display.go +488 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_display_contract.go +121 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_display_test.go +459 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_grant_authority.go +559 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_grant_repository_linux.go +417 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_grant_snapshot.go +94 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_history.go +80 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_history_test.go +76 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_job.go +697 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_job_child_linux.go +309 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_job_contract.go +122 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_job_linux_test.go +159 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_job_process_linux.go +327 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_job_test.go +501 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_job_vm_linux_test.go +343 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_journal.go +77 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_journal_linux.go +244 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_journal_linux_test.go +295 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_journal_test.go +71 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_picker_test.go +50 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_process_linux.go +184 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_public_vm_linux_test.go +129 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_relaxed_invalidation.go +242 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_rpc.go +299 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_rpc_contract.go +70 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_rpc_test.go +135 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_server_linux.go +152 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_session.go +677 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_session_contract.go +72 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_session_fence_test.go +215 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_session_test.go +475 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_supervisor_frame.go +78 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_supervisor_linux.go +414 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_transport.go +79 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_transport_linux.go +82 -0
- package/dist/templates/native-go/backend/internal/helper/sdk_transport_test.go +64 -0
- package/dist/templates/native-go/backend/internal/helper/server_linux.go +47 -3
- package/dist/templates/native-go/backend/internal/helper/stale_management_linux_test.go +126 -0
- package/dist/templates/native-go/backend/internal/helper/stale_management_test.go +122 -0
- package/dist/templates/native-go/backend/internal/helper/startup_diagnostic.go +68 -0
- package/dist/templates/native-go/backend/internal/helper/startup_diagnostic_linux_test.go +126 -0
- package/dist/templates/native-go/backend/internal/helper/startup_diagnostic_test.go +117 -0
- package/dist/templates/native-go/backend/internal/helper/status.go +83 -11
- package/dist/templates/native-go/backend/internal/helper/status_test.go +128 -0
- package/dist/templates/native-go/backend/internal/helper/supervision.go +28 -5
- package/dist/templates/native-go/backend/internal/helper/supervisor_frame.go +79 -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 +191 -16
- package/dist/templates/native-go/backend/internal/helper/supervisor_linux_test.go +618 -7
- 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 +151 -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 +368 -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 +115 -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 +205 -0
- package/dist/templates/native-go/backend/internal/helper/write_files_linux_test.go +225 -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 +1 -1
- package/dist/templates/native-go/ui/app.js +8 -1
- package/dist/templates/native-go-background/BACKGROUND.md +111 -0
- package/dist/templates/native-go-background/backend/internal/app/background_on.go +7 -0
- package/dist/templates/native-go-background/backend/internal/app/background_routes_test.go +32 -0
- package/dist/templates/native-go-background/frontend/src/background/BackgroundPanel.vue +178 -0
- package/dist/templates/native-go-background/frontend/src/background/i18n/de.json +83 -0
- package/dist/templates/native-go-background/frontend/src/background/i18n/en.json +83 -0
- package/dist/templates/native-go-background/frontend/src/background/i18n/es.json +83 -0
- package/dist/templates/native-go-background/frontend/src/background/i18n/fr.json +83 -0
- package/dist/templates/native-go-background/frontend/src/background/i18n/it.json +83 -0
- package/dist/templates/native-go-background/frontend/src/background/i18n/ja.json +83 -0
- package/dist/templates/native-go-background/frontend/src/background/i18n/ko.json +83 -0
- package/dist/templates/native-go-background/frontend/src/background/i18n/zh-CN.json +83 -0
- package/dist/templates/native-go-background/frontend/src/background/i18n/zh-TW.json +83 -0
- package/dist/templates/native-go-background/frontend/src/background/i18n.ts +19 -0
- package/dist/templates/native-go-background/frontend/src/background/picker-provider.ts +13 -0
- package/dist/templates/native-go-background/frontend/test/background.test.ts +179 -0
- package/dist/templates/native-go-better-auth/node/build.mjs +2 -0
- package/dist/templates/native-go-integration/backend/internal/app/personal.go +2 -2
- package/dist/templates/native-go-integration/backend/internal/app/personal_test.go +37 -0
- package/dist/templates/native-go-vue/README.md +151 -6
- package/dist/templates/native-go-vue/frontend/DESIGN.md +16 -4
- package/dist/templates/native-go-vue/frontend/README-JOBS.md +75 -0
- package/dist/templates/native-go-vue/frontend/README-M2.md +64 -0
- package/dist/templates/native-go-vue/frontend/package-lock.json +137 -233
- package/dist/templates/native-go-vue/frontend/package.json +2 -2
- package/dist/templates/native-go-vue/frontend/src/App.vue +71 -16
- package/dist/templates/native-go-vue/frontend/src/M2App.vue +57 -0
- package/dist/templates/native-go-vue/frontend/src/SDKApp.vue +203 -0
- package/dist/templates/native-go-vue/frontend/src/context.ts +41 -2
- package/dist/templates/native-go-vue/frontend/src/jobs/InteractiveJobForm.vue +70 -0
- package/dist/templates/native-go-vue/frontend/src/jobs/JobsAdminPanel.vue +33 -0
- package/dist/templates/native-go-vue/frontend/src/jobs/JobsPanel.vue +135 -0
- package/dist/templates/native-go-vue/frontend/src/jobs/connected-provider.ts +179 -0
- package/dist/templates/native-go-vue/frontend/src/jobs/i18n/de.json +62 -0
- package/dist/templates/native-go-vue/frontend/src/jobs/i18n/en.json +62 -0
- package/dist/templates/native-go-vue/frontend/src/jobs/i18n/es.json +62 -0
- package/dist/templates/native-go-vue/frontend/src/jobs/i18n/fr.json +62 -0
- package/dist/templates/native-go-vue/frontend/src/jobs/i18n/it.json +62 -0
- package/dist/templates/native-go-vue/frontend/src/jobs/i18n/ja.json +62 -0
- package/dist/templates/native-go-vue/frontend/src/jobs/i18n/ko.json +62 -0
- package/dist/templates/native-go-vue/frontend/src/jobs/i18n/zh-CN.json +62 -0
- package/dist/templates/native-go-vue/frontend/src/jobs/i18n/zh-TW.json +62 -0
- package/dist/templates/native-go-vue/frontend/src/jobs/i18n.ts +15 -0
- package/dist/templates/native-go-vue/frontend/src/jobs/mock-provider.ts +67 -0
- package/dist/templates/native-go-vue/frontend/src/jobs/provider.ts +60 -0
- package/dist/templates/native-go-vue/frontend/src/jobs/validate.ts +44 -0
- package/dist/templates/native-go-vue/frontend/src/m2-main.ts +21 -0
- package/dist/templates/native-go-vue/frontend/src/m2-style.css +7 -0
- package/dist/templates/native-go-vue/frontend/src/main.ts +4 -1
- package/dist/templates/native-go-vue/frontend/src/nas/M2Files.vue +94 -0
- package/dist/templates/native-go-vue/frontend/src/nas/M2PathPicker.vue +70 -0
- package/dist/templates/native-go-vue/frontend/src/nas/M2Settings.vue +69 -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/m2/de.json +56 -0
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/m2/en.json +56 -0
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/m2/es.json +56 -0
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/m2/fr.json +56 -0
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/m2/it.json +56 -0
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/m2/ja.json +56 -0
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/m2/ko.json +56 -0
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/m2/zh-CN.json +56 -0
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/m2/zh-TW.json +56 -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/m2-contract.ts +33 -0
- package/dist/templates/native-go-vue/frontend/src/nas/m2-i18n.ts +24 -0
- package/dist/templates/native-go-vue/frontend/src/nas/m2-provider.ts +104 -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-m2-request.ts +18 -0
- package/dist/templates/native-go-vue/frontend/src/nas/use-request.ts +27 -0
- package/dist/templates/native-go-vue/frontend/src/sdk-main.ts +39 -0
- package/dist/templates/native-go-vue/frontend/src/shell/AppShell.vue +48 -0
- package/dist/templates/native-go-vue/frontend/src/shell/i18n/de.json +10 -0
- package/dist/templates/native-go-vue/frontend/src/shell/i18n/en.json +10 -0
- package/dist/templates/native-go-vue/frontend/src/shell/i18n/es.json +10 -0
- package/dist/templates/native-go-vue/frontend/src/shell/i18n/fr.json +10 -0
- package/dist/templates/native-go-vue/frontend/src/shell/i18n/it.json +10 -0
- package/dist/templates/native-go-vue/frontend/src/shell/i18n/ja.json +10 -0
- package/dist/templates/native-go-vue/frontend/src/shell/i18n/ko.json +10 -0
- package/dist/templates/native-go-vue/frontend/src/shell/i18n/zh-CN.json +10 -0
- package/dist/templates/native-go-vue/frontend/src/shell/i18n/zh-TW.json +10 -0
- package/dist/templates/native-go-vue/frontend/src/shell/i18n.ts +17 -0
- package/dist/templates/native-go-vue/frontend/src/shell/pages.ts +34 -0
- package/dist/templates/native-go-vue/frontend/src/style.css +19 -6
- package/dist/templates/native-go-vue/frontend/test/apps.test.ts +65 -2
- package/dist/templates/native-go-vue/frontend/test/jobs-connected.test.ts +163 -0
- package/dist/templates/native-go-vue/frontend/test/jobs-preview.html +22 -0
- package/dist/templates/native-go-vue/frontend/test/jobs.test.ts +176 -0
- package/dist/templates/native-go-vue/frontend/test/m2-preview.html +27 -0
- package/dist/templates/native-go-vue/frontend/test/m2-provider.test.ts +87 -0
- package/dist/templates/native-go-vue/frontend/test/m2-ui.test.ts +209 -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/test/native-controls.test.ts +27 -0
- package/dist/templates/native-go-vue/frontend/test/picker-wire.test.ts +110 -0
- package/dist/templates/native-go-vue/frontend/test/shell-preview.html +19 -0
- package/dist/templates/native-go-vue/frontend/test/shell-sdk.test.ts +73 -0
- package/dist/templates/native-go-vue/frontend/test/shell-ui.test.ts +114 -0
- package/dist/templates/native-go-vue/frontend/test/shell.test.ts +45 -0
- package/dist/templates/native-go-vue/frontend/tsconfig.json +1 -1
- package/dist/templates/native-go-vue/frontend/vite.config.ts +8 -6
- package/dist/validate.js +6 -3
- package/package.json +3 -2
- package/schema/synology-app.schema.json +19 -0
- package/skills/reference/create.md +4 -0
- package/templates/_daemon/fixture_linux_test.go +15 -0
- package/templates/_daemon/fixture_other_test.go +7 -0
- package/templates/_daemon/go.mod +5 -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/_gateway/auth.go +101 -0
- package/templates/_gateway/auth_test.go +216 -0
- package/templates/_gateway/cgi.go +133 -0
- package/templates/_gateway/cgi_test.go +156 -0
- package/templates/_gateway/csrf.go +73 -0
- package/templates/_gateway/csrf_test.go +155 -0
- package/templates/_gateway/directory.go +108 -0
- package/templates/_gateway/directory_test.go +202 -0
- package/templates/_gateway/gateway.go +412 -0
- package/templates/_gateway/gateway_test.go +676 -0
- package/templates/_gateway/go.mod +3 -0
- package/templates/_gateway/groups.go +66 -0
- package/templates/_gateway/main.go +45 -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 +1 -1
- package/templates/compose-import/compose.yaml +1 -1
- package/templates/compose-import/synology-app.yaml +1 -1
- package/templates/hello-files/compose.yaml +1 -1
- package/templates/hello-files/synology-app.yaml +1 -1
- package/templates/hello-web/compose.yaml +5 -2
- package/templates/hello-web/synology-app.yaml +4 -1
- package/templates/hello-web-page/compose.yaml +5 -2
- package/templates/hello-web-page/synology-app.yaml +4 -1
- package/templates/native-go/README.md +149 -4
- package/templates/native-go/backend/THIRD_PARTY_NOTICES.txt +61 -0
- package/templates/native-go/backend/cmd/app/main.go +17 -0
- package/templates/native-go/backend/cmd/app/sdk_main.go +60 -0
- package/templates/native-go/backend/cmd/background-worker/main.go +38 -0
- package/templates/native-go/backend/cmd/dsm-readonly-probe/main_linux.go +46 -0
- package/templates/native-go/backend/cmd/helper/main.go +10 -1
- package/templates/native-go/backend/cmd/helper/sdk_registry.go +19 -0
- package/templates/native-go/backend/go.mod +7 -1
- 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/registry.go +28 -7
- package/templates/native-go/backend/internal/api/server.go +11 -1
- package/templates/native-go/backend/internal/app/background.go +270 -0
- package/templates/native-go/backend/internal/app/background_none.go +8 -0
- package/templates/native-go/backend/internal/app/background_owner.go +59 -0
- package/templates/native-go/backend/internal/app/background_owner_test.go +145 -0
- package/templates/native-go/backend/internal/app/background_schedule.go +74 -0
- package/templates/native-go/backend/internal/app/background_schedule_test.go +62 -0
- package/templates/native-go/backend/internal/app/background_test.go +346 -0
- package/templates/native-go/backend/internal/app/integration_state.go +16 -0
- package/templates/native-go/backend/internal/app/migrations.go +41 -0
- package/templates/native-go/backend/internal/app/migrations_test.go +41 -0
- package/templates/native-go/backend/internal/app/nas_cgi_artifact_test.go +129 -0
- package/templates/native-go/backend/internal/app/nas_refusal_test.go +46 -0
- package/templates/native-go/backend/internal/app/routes.go +28 -3
- package/templates/native-go/backend/internal/app/routes_test.go +27 -5
- package/templates/native-go/backend/internal/app/sdk_jobs.go +70 -0
- package/templates/native-go/backend/internal/app/sdk_jobs_test.go +116 -0
- package/templates/native-go/backend/internal/app/sdk_routes.go +174 -0
- package/templates/native-go/backend/internal/app/session_files.go +15 -0
- package/templates/native-go/backend/internal/app/session_files_test.go +26 -0
- package/templates/native-go/backend/internal/app/shared_folder.go +144 -0
- package/templates/native-go/backend/internal/app/shared_folder_test.go +158 -0
- package/templates/native-go/backend/internal/background/access.go +57 -0
- package/templates/native-go/backend/internal/background/owner_test.go +126 -0
- package/templates/native-go/backend/internal/background/runner.go +185 -0
- package/templates/native-go/backend/internal/background/runner_test.go +209 -0
- package/templates/native-go/backend/internal/background/schedule.go +300 -0
- package/templates/native-go/backend/internal/background/schedule_test.go +335 -0
- package/templates/native-go/backend/internal/background/store.go +807 -0
- package/templates/native-go/backend/internal/background/store_test.go +407 -0
- package/templates/native-go/backend/internal/datamigrate/migrate.go +191 -0
- package/templates/native-go/backend/internal/datamigrate/migrate_test.go +177 -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/filestation/browse_test.go +67 -0
- package/templates/native-go/backend/internal/filestation/client.go +251 -0
- package/templates/native-go/backend/internal/filestation/client_test.go +155 -0
- package/templates/native-go/backend/internal/filestation/doc.go +4 -0
- package/templates/native-go/backend/internal/filestation/read_file_test.go +90 -0
- package/templates/native-go/backend/internal/filestation/repository.go +207 -0
- package/templates/native-go/backend/internal/filestation/repository_test.go +104 -0
- package/templates/native-go/backend/internal/filestation/sdk_session.go +241 -0
- package/templates/native-go/backend/internal/filestation/sdk_session_test.go +183 -0
- package/templates/native-go/backend/internal/filestation/service.go +254 -0
- package/templates/native-go/backend/internal/filestation/service_test.go +94 -0
- package/templates/native-go/backend/internal/filestation/session_semantics_test.go +383 -0
- package/templates/native-go/backend/internal/filestation/write.go +72 -0
- package/templates/native-go/backend/internal/filestation/write_test.go +123 -0
- package/templates/native-go/backend/internal/helper/background_proof.go +163 -0
- package/templates/native-go/backend/internal/helper/background_proof_contract.go +46 -0
- package/templates/native-go/backend/internal/helper/background_proof_test.go +161 -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 +226 -21
- package/templates/native-go/backend/internal/helper/control_test.go +10 -2
- package/templates/native-go/backend/internal/helper/data_contract.go +245 -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 +419 -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 +519 -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 +416 -0
- package/templates/native-go/backend/internal/helper/grant_repository_linux_test.go +469 -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 +78 -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/jobcontract/bindings.go +48 -0
- package/templates/native-go/backend/internal/helper/jobcontract/contract_test.go +436 -0
- package/templates/native-go/backend/internal/helper/jobcontract/decode.go +185 -0
- package/templates/native-go/backend/internal/helper/jobcontract/digest.go +55 -0
- package/templates/native-go/backend/internal/helper/jobcontract/registry.go +85 -0
- package/templates/native-go/backend/internal/helper/jobcontract/registry_test.go +73 -0
- package/templates/native-go/backend/internal/helper/jobcontract/result.go +53 -0
- package/templates/native-go/backend/internal/helper/jobcontract/stub.go +8 -0
- package/templates/native-go/backend/internal/helper/jobcontract/testdata/input-digests.json +127 -0
- package/templates/native-go/backend/internal/helper/jobcontract/types.go +234 -0
- package/templates/native-go/backend/internal/helper/jobcontract/types_test.go +29 -0
- package/templates/native-go/backend/internal/helper/jobcontract/validate.go +462 -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/legacy_authority_schema_linux_test.go +34 -0
- package/templates/native-go/backend/internal/helper/legacy_authority_schema_test.go +6 -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/management.go +79 -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 +244 -0
- package/templates/native-go/backend/internal/helper/observation_health_test.go +127 -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 +155 -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 +130 -0
- package/templates/native-go/backend/internal/helper/observer_diagnostic_test.go +98 -0
- package/templates/native-go/backend/internal/helper/observer_diagnostic_writer.go +40 -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/process_linux.go +14 -1
- package/templates/native-go/backend/internal/helper/publication_test.go +178 -0
- package/templates/native-go/backend/internal/helper/query_deadline_linux_test.go +115 -0
- package/templates/native-go/backend/internal/helper/query_pending_diagnostic_test.go +254 -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 +203 -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 +250 -0
- package/templates/native-go/backend/internal/helper/s1r_fixture_contract_linux_test.go +18 -0
- package/templates/native-go/backend/internal/helper/sdk_assembly_linux.go +51 -0
- package/templates/native-go/backend/internal/helper/sdk_attach.go +83 -0
- package/templates/native-go/backend/internal/helper/sdk_attach_contract.go +32 -0
- package/templates/native-go/backend/internal/helper/sdk_attach_test.go +184 -0
- package/templates/native-go/backend/internal/helper/sdk_authority_schema_test.go +6 -0
- package/templates/native-go/backend/internal/helper/sdk_background_authority.go +832 -0
- package/templates/native-go/backend/internal/helper/sdk_background_authority_test.go +714 -0
- package/templates/native-go/backend/internal/helper/sdk_background_invalidation.go +218 -0
- package/templates/native-go/backend/internal/helper/sdk_background_lease.go +218 -0
- package/templates/native-go/backend/internal/helper/sdk_background_snapshot.go +110 -0
- package/templates/native-go/backend/internal/helper/sdk_background_store_linux_test.go +261 -0
- package/templates/native-go/backend/internal/helper/sdk_background_store_test.go +58 -0
- package/templates/native-go/backend/internal/helper/sdk_bindings.go +60 -0
- package/templates/native-go/backend/internal/helper/sdk_data_contract.go +251 -0
- package/templates/native-go/backend/internal/helper/sdk_data_protocol.go +424 -0
- package/templates/native-go/backend/internal/helper/sdk_dispatch_absence_test.go +51 -0
- package/templates/native-go/backend/internal/helper/sdk_display.go +488 -0
- package/templates/native-go/backend/internal/helper/sdk_display_contract.go +121 -0
- package/templates/native-go/backend/internal/helper/sdk_display_test.go +459 -0
- package/templates/native-go/backend/internal/helper/sdk_grant_authority.go +559 -0
- package/templates/native-go/backend/internal/helper/sdk_grant_repository_linux.go +417 -0
- package/templates/native-go/backend/internal/helper/sdk_grant_snapshot.go +94 -0
- package/templates/native-go/backend/internal/helper/sdk_history.go +80 -0
- package/templates/native-go/backend/internal/helper/sdk_history_test.go +76 -0
- package/templates/native-go/backend/internal/helper/sdk_job.go +697 -0
- package/templates/native-go/backend/internal/helper/sdk_job_child_linux.go +309 -0
- package/templates/native-go/backend/internal/helper/sdk_job_contract.go +122 -0
- package/templates/native-go/backend/internal/helper/sdk_job_linux_test.go +159 -0
- package/templates/native-go/backend/internal/helper/sdk_job_process_linux.go +327 -0
- package/templates/native-go/backend/internal/helper/sdk_job_test.go +501 -0
- package/templates/native-go/backend/internal/helper/sdk_job_vm_linux_test.go +343 -0
- package/templates/native-go/backend/internal/helper/sdk_journal.go +77 -0
- package/templates/native-go/backend/internal/helper/sdk_journal_linux.go +244 -0
- package/templates/native-go/backend/internal/helper/sdk_journal_linux_test.go +295 -0
- package/templates/native-go/backend/internal/helper/sdk_journal_test.go +71 -0
- package/templates/native-go/backend/internal/helper/sdk_picker_test.go +50 -0
- package/templates/native-go/backend/internal/helper/sdk_process_linux.go +184 -0
- package/templates/native-go/backend/internal/helper/sdk_public_vm_linux_test.go +129 -0
- package/templates/native-go/backend/internal/helper/sdk_relaxed_invalidation.go +242 -0
- package/templates/native-go/backend/internal/helper/sdk_rpc.go +299 -0
- package/templates/native-go/backend/internal/helper/sdk_rpc_contract.go +70 -0
- package/templates/native-go/backend/internal/helper/sdk_rpc_test.go +135 -0
- package/templates/native-go/backend/internal/helper/sdk_server_linux.go +152 -0
- package/templates/native-go/backend/internal/helper/sdk_session.go +677 -0
- package/templates/native-go/backend/internal/helper/sdk_session_contract.go +72 -0
- package/templates/native-go/backend/internal/helper/sdk_session_fence_test.go +215 -0
- package/templates/native-go/backend/internal/helper/sdk_session_test.go +475 -0
- package/templates/native-go/backend/internal/helper/sdk_supervisor_frame.go +78 -0
- package/templates/native-go/backend/internal/helper/sdk_supervisor_linux.go +414 -0
- package/templates/native-go/backend/internal/helper/sdk_transport.go +79 -0
- package/templates/native-go/backend/internal/helper/sdk_transport_linux.go +82 -0
- package/templates/native-go/backend/internal/helper/sdk_transport_test.go +64 -0
- package/templates/native-go/backend/internal/helper/server_linux.go +47 -3
- package/templates/native-go/backend/internal/helper/stale_management_linux_test.go +126 -0
- package/templates/native-go/backend/internal/helper/stale_management_test.go +122 -0
- package/templates/native-go/backend/internal/helper/startup_diagnostic.go +68 -0
- package/templates/native-go/backend/internal/helper/startup_diagnostic_linux_test.go +126 -0
- package/templates/native-go/backend/internal/helper/startup_diagnostic_test.go +117 -0
- package/templates/native-go/backend/internal/helper/status.go +83 -11
- package/templates/native-go/backend/internal/helper/status_test.go +128 -0
- package/templates/native-go/backend/internal/helper/supervision.go +28 -5
- package/templates/native-go/backend/internal/helper/supervisor_frame.go +79 -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 +191 -16
- package/templates/native-go/backend/internal/helper/supervisor_linux_test.go +618 -7
- 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 +151 -0
- package/templates/native-go/backend/internal/helper/unit_frame_test.go +32 -0
- package/templates/native-go/backend/internal/helper/unit_linux.go +368 -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 +115 -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 +205 -0
- package/templates/native-go/backend/internal/helper/write_files_linux_test.go +225 -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 +1 -1
- package/templates/native-go/ui/app.js +8 -1
- package/templates/native-go-background/BACKGROUND.md +111 -0
- package/templates/native-go-background/backend/internal/app/background_on.go +7 -0
- package/templates/native-go-background/backend/internal/app/background_routes_test.go +32 -0
- package/templates/native-go-background/frontend/src/background/BackgroundPanel.vue +178 -0
- package/templates/native-go-background/frontend/src/background/i18n/de.json +83 -0
- package/templates/native-go-background/frontend/src/background/i18n/en.json +83 -0
- package/templates/native-go-background/frontend/src/background/i18n/es.json +83 -0
- package/templates/native-go-background/frontend/src/background/i18n/fr.json +83 -0
- package/templates/native-go-background/frontend/src/background/i18n/it.json +83 -0
- package/templates/native-go-background/frontend/src/background/i18n/ja.json +83 -0
- package/templates/native-go-background/frontend/src/background/i18n/ko.json +83 -0
- package/templates/native-go-background/frontend/src/background/i18n/zh-CN.json +83 -0
- package/templates/native-go-background/frontend/src/background/i18n/zh-TW.json +83 -0
- package/templates/native-go-background/frontend/src/background/i18n.ts +19 -0
- package/templates/native-go-background/frontend/src/background/picker-provider.ts +13 -0
- package/templates/native-go-background/frontend/test/background.test.ts +179 -0
- package/templates/native-go-better-auth/node/build.mjs +2 -0
- package/templates/native-go-integration/backend/internal/app/personal.go +2 -2
- package/templates/native-go-integration/backend/internal/app/personal_test.go +37 -0
- package/templates/native-go-vue/README.md +151 -6
- package/templates/native-go-vue/frontend/DESIGN.md +16 -4
- package/templates/native-go-vue/frontend/README-JOBS.md +75 -0
- package/templates/native-go-vue/frontend/README-M2.md +64 -0
- package/templates/native-go-vue/frontend/package-lock.json +137 -233
- package/templates/native-go-vue/frontend/package.json +2 -2
- package/templates/native-go-vue/frontend/src/App.vue +71 -16
- package/templates/native-go-vue/frontend/src/M2App.vue +57 -0
- package/templates/native-go-vue/frontend/src/SDKApp.vue +203 -0
- package/templates/native-go-vue/frontend/src/context.ts +41 -2
- package/templates/native-go-vue/frontend/src/jobs/InteractiveJobForm.vue +70 -0
- package/templates/native-go-vue/frontend/src/jobs/JobsAdminPanel.vue +33 -0
- package/templates/native-go-vue/frontend/src/jobs/JobsPanel.vue +135 -0
- package/templates/native-go-vue/frontend/src/jobs/connected-provider.ts +179 -0
- package/templates/native-go-vue/frontend/src/jobs/i18n/de.json +62 -0
- package/templates/native-go-vue/frontend/src/jobs/i18n/en.json +62 -0
- package/templates/native-go-vue/frontend/src/jobs/i18n/es.json +62 -0
- package/templates/native-go-vue/frontend/src/jobs/i18n/fr.json +62 -0
- package/templates/native-go-vue/frontend/src/jobs/i18n/it.json +62 -0
- package/templates/native-go-vue/frontend/src/jobs/i18n/ja.json +62 -0
- package/templates/native-go-vue/frontend/src/jobs/i18n/ko.json +62 -0
- package/templates/native-go-vue/frontend/src/jobs/i18n/zh-CN.json +62 -0
- package/templates/native-go-vue/frontend/src/jobs/i18n/zh-TW.json +62 -0
- package/templates/native-go-vue/frontend/src/jobs/i18n.ts +15 -0
- package/templates/native-go-vue/frontend/src/jobs/mock-provider.ts +67 -0
- package/templates/native-go-vue/frontend/src/jobs/provider.ts +60 -0
- package/templates/native-go-vue/frontend/src/jobs/validate.ts +44 -0
- package/templates/native-go-vue/frontend/src/m2-main.ts +21 -0
- package/templates/native-go-vue/frontend/src/m2-style.css +7 -0
- package/templates/native-go-vue/frontend/src/main.ts +4 -1
- package/templates/native-go-vue/frontend/src/nas/M2Files.vue +94 -0
- package/templates/native-go-vue/frontend/src/nas/M2PathPicker.vue +70 -0
- package/templates/native-go-vue/frontend/src/nas/M2Settings.vue +69 -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/m2/de.json +56 -0
- package/templates/native-go-vue/frontend/src/nas/i18n/m2/en.json +56 -0
- package/templates/native-go-vue/frontend/src/nas/i18n/m2/es.json +56 -0
- package/templates/native-go-vue/frontend/src/nas/i18n/m2/fr.json +56 -0
- package/templates/native-go-vue/frontend/src/nas/i18n/m2/it.json +56 -0
- package/templates/native-go-vue/frontend/src/nas/i18n/m2/ja.json +56 -0
- package/templates/native-go-vue/frontend/src/nas/i18n/m2/ko.json +56 -0
- package/templates/native-go-vue/frontend/src/nas/i18n/m2/zh-CN.json +56 -0
- package/templates/native-go-vue/frontend/src/nas/i18n/m2/zh-TW.json +56 -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/m2-contract.ts +33 -0
- package/templates/native-go-vue/frontend/src/nas/m2-i18n.ts +24 -0
- package/templates/native-go-vue/frontend/src/nas/m2-provider.ts +104 -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-m2-request.ts +18 -0
- package/templates/native-go-vue/frontend/src/nas/use-request.ts +27 -0
- package/templates/native-go-vue/frontend/src/sdk-main.ts +39 -0
- package/templates/native-go-vue/frontend/src/shell/AppShell.vue +48 -0
- package/templates/native-go-vue/frontend/src/shell/i18n/de.json +10 -0
- package/templates/native-go-vue/frontend/src/shell/i18n/en.json +10 -0
- package/templates/native-go-vue/frontend/src/shell/i18n/es.json +10 -0
- package/templates/native-go-vue/frontend/src/shell/i18n/fr.json +10 -0
- package/templates/native-go-vue/frontend/src/shell/i18n/it.json +10 -0
- package/templates/native-go-vue/frontend/src/shell/i18n/ja.json +10 -0
- package/templates/native-go-vue/frontend/src/shell/i18n/ko.json +10 -0
- package/templates/native-go-vue/frontend/src/shell/i18n/zh-CN.json +10 -0
- package/templates/native-go-vue/frontend/src/shell/i18n/zh-TW.json +10 -0
- package/templates/native-go-vue/frontend/src/shell/i18n.ts +17 -0
- package/templates/native-go-vue/frontend/src/shell/pages.ts +34 -0
- package/templates/native-go-vue/frontend/src/style.css +19 -6
- package/templates/native-go-vue/frontend/test/apps.test.ts +65 -2
- package/templates/native-go-vue/frontend/test/jobs-connected.test.ts +163 -0
- package/templates/native-go-vue/frontend/test/jobs-preview.html +22 -0
- package/templates/native-go-vue/frontend/test/jobs.test.ts +176 -0
- package/templates/native-go-vue/frontend/test/m2-preview.html +27 -0
- package/templates/native-go-vue/frontend/test/m2-provider.test.ts +87 -0
- package/templates/native-go-vue/frontend/test/m2-ui.test.ts +209 -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/test/native-controls.test.ts +27 -0
- package/templates/native-go-vue/frontend/test/picker-wire.test.ts +110 -0
- package/templates/native-go-vue/frontend/test/shell-preview.html +19 -0
- package/templates/native-go-vue/frontend/test/shell-sdk.test.ts +73 -0
- package/templates/native-go-vue/frontend/test/shell-ui.test.ts +114 -0
- package/templates/native-go-vue/frontend/test/shell.test.ts +45 -0
- package/templates/native-go-vue/frontend/tsconfig.json +1 -1
- package/templates/native-go-vue/frontend/vite.config.ts +8 -6
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import {computed,inject,onBeforeUnmount,onMounted,ref,watch} from 'vue'
|
|
3
|
+
import {Button,Callout,DataGrid,FilePicker,Form,FormActions,FormItem,Input,Link,type FileRejection} from '@synopackageland/ui'
|
|
4
|
+
import {M2_MAX_BYTES,M2ProviderKey,type M2Entry,type M2Selection} from './m2-contract'
|
|
5
|
+
import {m2Copy,m2ErrorCopy} from './m2-i18n'
|
|
6
|
+
import {format} from './i18n'
|
|
7
|
+
import {useM2Request} from './use-m2-request'
|
|
8
|
+
const props=defineProps<{selection:M2Selection;locale:string}>()
|
|
9
|
+
const emit=defineEmits<{busy:[value:boolean]}>()
|
|
10
|
+
const copy=computed(()=>m2Copy(props.locale)),provider=inject(M2ProviderKey)!
|
|
11
|
+
const request=useM2Request(),{busy,error}=request
|
|
12
|
+
watch(busy,value=>emit('busy',value),{flush:'sync'})
|
|
13
|
+
const entries=ref<M2Entry[]>([]),trail=ref<string[]>([]),next=ref<number>(),metadata=ref<M2Entry>(),folderName=ref(''),files=ref<File[]>([]),notice=ref(''),download=ref(''),downloadName=ref('')
|
|
14
|
+
const columns=computed(()=>[{key:'name',label:copy.value.fileKind},{key:'actions',label:copy.value.inspect}])
|
|
15
|
+
const relative=computed(()=>trail.value.join('/'))
|
|
16
|
+
function release(){if(download.value)URL.revokeObjectURL(download.value);download.value='';downloadName.value='';metadata.value=undefined;notice.value=''}
|
|
17
|
+
async function browse(target:string[],more=false){
|
|
18
|
+
if(busy.value)return
|
|
19
|
+
release()
|
|
20
|
+
const page=await request.run(signal=>provider.list(props.selection.grantId,target.join('/'),more?next.value??0:0,signal))
|
|
21
|
+
if(page){trail.value=target;entries.value=(more?[...entries.value,...page.entries]:page.entries).slice(-200);next.value=page.nextOffset}
|
|
22
|
+
else {entries.value=[];next.value=undefined}
|
|
23
|
+
}
|
|
24
|
+
function child(name:string){return [...trail.value,name].join('/')}
|
|
25
|
+
async function inspect(entry:M2Entry){release();const value=await request.run(signal=>provider.stat(props.selection.grantId,child(entry.name),signal));if(value)metadata.value=value}
|
|
26
|
+
async function read(entry:M2Entry){
|
|
27
|
+
release()
|
|
28
|
+
const value=await request.run(signal=>provider.read(props.selection.grantId,child(entry.name),signal))
|
|
29
|
+
if(value){download.value=URL.createObjectURL(new Blob([new Uint8Array(value).buffer],{type:'application/octet-stream'}));downloadName.value=entry.name;notice.value=copy.value.readComplete}
|
|
30
|
+
}
|
|
31
|
+
async function create(){
|
|
32
|
+
if(busy.value||!props.selection.writable)return
|
|
33
|
+
release()
|
|
34
|
+
const done=await request.run(async signal=>{await provider.create(props.selection.grantId,relative.value,folderName.value,signal);return true})
|
|
35
|
+
if(done){folderName.value='';await browse(trail.value);notice.value=copy.value.created}
|
|
36
|
+
}
|
|
37
|
+
// The compact FilePicker enforces the size limit and reports the first refused file.
|
|
38
|
+
function pick(selected:File[]){
|
|
39
|
+
if(busy.value)return
|
|
40
|
+
error.value=undefined;files.value=selected.slice(0,1)
|
|
41
|
+
}
|
|
42
|
+
function refuse(items:FileRejection[]){
|
|
43
|
+
if(busy.value)return
|
|
44
|
+
files.value=[];error.value=items.some(item=>item.reason==='size')?{code:'limit-exceeded'}:{code:'invalid-request'}
|
|
45
|
+
}
|
|
46
|
+
async function upload(){
|
|
47
|
+
if(busy.value||!props.selection.writable||!files.value[0])return
|
|
48
|
+
release()
|
|
49
|
+
const selected=files.value[0]!,rel=relative.value
|
|
50
|
+
const done=await request.run(async signal=>{
|
|
51
|
+
if(selected.size>M2_MAX_BYTES)throw {code:'limit-exceeded'}
|
|
52
|
+
const data=new Uint8Array(await selected.arrayBuffer())
|
|
53
|
+
if(signal.aborted)throw {code:'canceled'}
|
|
54
|
+
await provider.upload(props.selection.grantId,rel,selected.name,data,signal);return true
|
|
55
|
+
})
|
|
56
|
+
// Never retain a retryable upload after an uncertain outcome.
|
|
57
|
+
files.value=[]
|
|
58
|
+
if(done){await browse(trail.value);notice.value=copy.value.uploaded}
|
|
59
|
+
}
|
|
60
|
+
onMounted(()=>void browse([]))
|
|
61
|
+
onBeforeUnmount(()=>{emit('busy',false);release();files.value=[];entries.value=[];trail.value=[];folderName.value=''})
|
|
62
|
+
</script>
|
|
63
|
+
<template>
|
|
64
|
+
<div class="m2-files" :aria-busy="busy">
|
|
65
|
+
<h3 class="nas-folder-name">{{ selection.folder }}<span v-if="relative"> / {{ relative }}</span></h3>
|
|
66
|
+
<p>{{ selection.writable ? copy.writable : copy.readOnly }}</p>
|
|
67
|
+
<p>{{ copy.limit }}</p>
|
|
68
|
+
<Callout v-if="error" tone="danger" role="alert">{{ m2ErrorCopy(error,copy) }}</Callout>
|
|
69
|
+
<p v-if="busy" role="status">{{ copy.loading }}</p>
|
|
70
|
+
<nav class="nas-breadcrumb" :aria-label="copy.directoryKind">
|
|
71
|
+
<Button v-if="trail.length" variant="secondary" :disabled="busy" @click="browse(trail.slice(0,-1))">{{ copy.back }}</Button>
|
|
72
|
+
<Button variant="secondary" :disabled="busy" @click="browse([])">{{ copy.roots }}</Button>
|
|
73
|
+
<Button variant="secondary" :disabled="busy" @click="browse(trail)">{{ copy.refresh }}</Button>
|
|
74
|
+
</nav>
|
|
75
|
+
<DataGrid :columns="columns" :rows="entries.map(e=>({...e}))" row-key="path" :footer="false" :resizable="false" :labels="{empty:copy.emptyFolder}" :loading="busy" :loading-text="copy.loading">
|
|
76
|
+
<template #cell-name="{row}"><Button v-if="row.isDir" variant="secondary" class="nas-folder-name" :disabled="busy" @click="browse([...trail,String(row.name)])">{{ format(copy.open,String(row.name)) }}</Button><span v-else class="nas-folder-name">{{ row.name }}</span></template>
|
|
77
|
+
<template #cell-actions="{row}"><div class="integration-actions">
|
|
78
|
+
<Button variant="secondary" :disabled="busy" @click="inspect(entries.find(e=>e.path===row.path)!)">{{ copy.inspect }}</Button>
|
|
79
|
+
<Button v-if="!row.isDir" variant="secondary" :disabled="busy || (typeof row.bytes==='number' && row.bytes>M2_MAX_BYTES)" @click="read(entries.find(e=>e.path===row.path)!)">{{ copy.read }}</Button>
|
|
80
|
+
</div></template>
|
|
81
|
+
</DataGrid>
|
|
82
|
+
<Button v-if="next!==undefined" variant="secondary" :disabled="busy" @click="browse(trail,true)">{{ copy.loadMore }}</Button>
|
|
83
|
+
<dl v-if="metadata" class="nas-summary" :aria-label="copy.metadata"><dt>{{ copy.metadata }}</dt><dd>{{ metadata.name }}</dd><dt>{{ copy.directoryKind }}</dt><dd>{{ metadata.isDir ? copy.directoryKind : copy.fileKind }}</dd><dt>Bytes</dt><dd>{{ metadata.bytes ?? '—' }}</dd></dl>
|
|
84
|
+
<p v-if="notice" role="status">{{ notice }}</p>
|
|
85
|
+
<Link v-if="download" :href="download" :download="downloadName">{{ copy.download }}</Link>
|
|
86
|
+
<Form v-if="selection.writable" @submit.prevent>
|
|
87
|
+
<FormItem :label="copy.folderName"><Input v-model="folderName" data-folder-name :disabled="busy" :maxlength="255" /></FormItem>
|
|
88
|
+
<FormActions><Button variant="secondary" :disabled="busy||!folderName" @click="create">{{ copy.create }}</Button></FormActions>
|
|
89
|
+
<FormItem :label="copy.uploadFile"><FilePicker :model-value="files" variant="compact" :max-size="M2_MAX_BYTES" :show-list="false" :disabled="busy" @update:model-value="pick" @rejected="refuse" /></FormItem>
|
|
90
|
+
<p v-if="files[0]" class="nas-folder-name">{{ files[0].name }}</p>
|
|
91
|
+
<FormActions><Button variant="primary" :disabled="busy||!files[0]" @click="upload">{{ copy.upload }}</Button></FormActions>
|
|
92
|
+
</Form>
|
|
93
|
+
</div>
|
|
94
|
+
</template>
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import {computed,inject,onBeforeUnmount,ref,watch} from 'vue'
|
|
3
|
+
import {Button,Callout,Checkbox,DataGrid,Dialog,TreeView,type TreeNode} from '@synopackageland/ui'
|
|
4
|
+
import {M2ProviderKey,type M2Entry,type M2Selection,type M2JobSource} from './m2-contract'
|
|
5
|
+
import {m2Copy,m2ErrorCopy} from './m2-i18n'
|
|
6
|
+
import {format} from './i18n'
|
|
7
|
+
import {useM2Request} from './use-m2-request'
|
|
8
|
+
const props=defineProps<{open:boolean;locale:string;selectFiles?:boolean;readOnly?:boolean;title?:string;consent?:string}>()
|
|
9
|
+
const emit=defineEmits<{'update:open':[open:boolean];selected:[value:M2Selection];source:[value:M2JobSource];busy:[value:boolean]}>()
|
|
10
|
+
const provider=inject(M2ProviderKey)!,copy=computed(()=>m2Copy(props.locale))
|
|
11
|
+
const request=useM2Request(),{busy,error}=request
|
|
12
|
+
watch(busy,value=>emit('busy',value),{flush:'sync'})
|
|
13
|
+
const entries=ref<M2Entry[]>([]),roots=ref<TreeNode[]>([]),trail=ref<M2Entry[]>([]),chosen=ref<M2Entry>(),next=ref<number>(),writable=ref(false)
|
|
14
|
+
const columns=computed(()=>[{key:'name',label:props.selectFiles?copy.value.metadata:copy.value.directoryKind},{key:'selection',label:props.selectFiles?copy.value.confirm:copy.value.choose}])
|
|
15
|
+
function discard(){request.cancel();entries.value=[];roots.value=[];trail.value=[];chosen.value=undefined;next.value=undefined;writable.value=false}
|
|
16
|
+
function close(){discard();emit('update:open',false)}
|
|
17
|
+
async function browse(target:M2Entry[],more=false){
|
|
18
|
+
if(busy.value)return
|
|
19
|
+
const page=await request.run(signal=>provider.discovery(target.at(-1)?.path,more?next.value??0:0,signal))
|
|
20
|
+
if(page){
|
|
21
|
+
trail.value=target;chosen.value=undefined;next.value=page.nextOffset
|
|
22
|
+
// Cursor progression uses the full page, even when files are filtered out.
|
|
23
|
+
const folders=page.entries.filter(e=>e.isDir||props.selectFiles)
|
|
24
|
+
entries.value=(more?[...entries.value,...folders]:folders).slice(-200)
|
|
25
|
+
if(!target.length)roots.value=entries.value.filter(e=>e.isDir).map(e=>({id:e.path,label:e.name}))
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
async function confirm(){
|
|
29
|
+
if(!chosen.value)return
|
|
30
|
+
const entry={...chosen.value},segments=entry.isDir?[]:[entry.name]
|
|
31
|
+
const folder=entry.isDir?entry.path:trail.value.at(-1)?.path,write=props.readOnly?false:writable.value
|
|
32
|
+
if(!folder||(!entry.isDir&&entry.path!==`${folder}/${entry.name}`)){error.value={code:'invalid-request'};return}
|
|
33
|
+
const result=await request.run(signal=>provider.confirm(folder,write,signal))
|
|
34
|
+
if(result){emit('selected',result);emit('source',{selection:result,entry,segments});close()}
|
|
35
|
+
}
|
|
36
|
+
watch(()=>props.open,open=>{discard();if(open)void browse([])},{immediate:true})
|
|
37
|
+
onBeforeUnmount(discard)
|
|
38
|
+
</script>
|
|
39
|
+
<template>
|
|
40
|
+
<Dialog :open="open" :title="title??copy.choose" :description="copy.ownPermissions" :close-label="copy.close" width="720px" @update:open="value=>{if(!value)close()}">
|
|
41
|
+
<div class="nas-picker" :aria-busy="busy">
|
|
42
|
+
<p>{{ consent??copy.consent }}</p>
|
|
43
|
+
<Callout v-if="error" tone="danger" role="alert">{{ m2ErrorCopy(error,copy) }}</Callout>
|
|
44
|
+
<p v-if="busy" role="status">{{ copy.loading }}</p>
|
|
45
|
+
<nav class="nas-breadcrumb" :aria-label="copy.directoryKind">
|
|
46
|
+
<Button v-if="trail.length" variant="secondary" :disabled="busy" @click="browse(trail.slice(0,-1))">{{ copy.back }}</Button>
|
|
47
|
+
<Button variant="secondary" :disabled="busy" @click="browse([])">{{ copy.roots }}</Button>
|
|
48
|
+
<Button v-for="(part,index) in trail" :key="part.path" variant="secondary" :disabled="busy" @click="browse(trail.slice(0,index+1))">{{ part.name }}</Button>
|
|
49
|
+
</nav>
|
|
50
|
+
<div class="nas-browser">
|
|
51
|
+
<aside class="nas-tree" :inert="busy||undefined" :aria-label="copy.roots"><TreeView :nodes="roots" :show-icons="false" @select="node=>browse([{path:node.id,name:node.label,isDir:true}])" /></aside>
|
|
52
|
+
<div class="nas-folder-list">
|
|
53
|
+
<DataGrid :columns="columns" :rows="entries.map(e=>({...e}))" row-key="path" :footer="false" :labels="{empty:copy.emptyFolder}" :resizable="false" :loading="busy" :loading-text="copy.loading">
|
|
54
|
+
<template #cell-name="{row}"><Button v-if="row.isDir" variant="secondary" class="nas-folder-name" :disabled="busy" @click="browse([...trail,{path:String(row.path),name:String(row.name),isDir:true}])">{{ format(copy.open,String(row.name)) }}</Button><span v-else>{{ row.name }} · {{ copy.fileKind }}</span></template>
|
|
55
|
+
<template #cell-selection="{row}"><Button variant="secondary" :disabled="busy" :aria-label="format(copy.select,String(row.name))" :aria-pressed="chosen?.path===row.path" @click="chosen=entries.find(e=>e.path===row.path)">{{ selectFiles?format(copy.select,String(row.name)):copy.choose }}</Button></template>
|
|
56
|
+
</DataGrid>
|
|
57
|
+
<Button v-if="next!==undefined" variant="secondary" :disabled="busy" @click="browse(trail,true)">{{ copy.loadMore }}</Button>
|
|
58
|
+
<Button v-if="trail.length" variant="secondary" :disabled="busy" @click="chosen=trail.at(-1)">{{ format(copy.select,trail.at(-1)!.name) }}</Button>
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
<p v-if="chosen" role="status">{{ format(copy.selected,chosen.path) }}</p>
|
|
62
|
+
<Checkbox v-if="!readOnly" v-model="writable" class="m2-checkbox" :disabled="busy" :label="copy.writable" />
|
|
63
|
+
</div>
|
|
64
|
+
<template #footer>
|
|
65
|
+
<Button variant="secondary" @click="close">{{ copy.cancel }}</Button>
|
|
66
|
+
<Button variant="secondary" :disabled="busy" @click="browse(trail)">{{ copy.refresh }}</Button>
|
|
67
|
+
<Button variant="primary" :disabled="busy||!chosen" @click="confirm">{{ copy.confirm }}</Button>
|
|
68
|
+
</template>
|
|
69
|
+
</Dialog>
|
|
70
|
+
</template>
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import {computed,inject,onMounted,ref,watch} from 'vue'
|
|
3
|
+
import {Button,Callout,Dialog,SettingsSection} from '@synopackageland/ui'
|
|
4
|
+
import {M2ProviderKey,type M2Selection} from './m2-contract'
|
|
5
|
+
import {m2Copy,m2ErrorCopy} from './m2-i18n'
|
|
6
|
+
import {useM2Request} from './use-m2-request'
|
|
7
|
+
import M2PathPicker from './M2PathPicker.vue'
|
|
8
|
+
import M2Files from './M2Files.vue'
|
|
9
|
+
const emit=defineEmits<{busy:[value:boolean]}>()
|
|
10
|
+
const filesBusy=ref(false),pickerBusy=ref(false)
|
|
11
|
+
const props=defineProps<{locale:string}>(),copy=computed(()=>m2Copy(props.locale)),provider=inject(M2ProviderKey)!
|
|
12
|
+
const request=useM2Request(),{busy,error}=request
|
|
13
|
+
const occupied=computed(()=>busy.value||filesBusy.value||pickerBusy.value)
|
|
14
|
+
watch(occupied,value=>emit('busy',value),{flush:'sync'})
|
|
15
|
+
const selections=ref<M2Selection[]>([]),pickerOpen=ref(false),revoking=ref<M2Selection>(),active=ref<M2Selection>(),notice=ref(''),loaded=ref(false)
|
|
16
|
+
async function refresh(){
|
|
17
|
+
if(occupied.value)return
|
|
18
|
+
active.value=undefined;notice.value='';loaded.value=false;selections.value=[]
|
|
19
|
+
const result=await request.run(async signal=>{await provider.status(signal);return provider.selections(signal)})
|
|
20
|
+
if(result){selections.value=result;loaded.value=true}
|
|
21
|
+
}
|
|
22
|
+
function selected(selection:M2Selection){selections.value=[...selections.value,selection];notice.value=copy.value.selectionAdded;loaded.value=true}
|
|
23
|
+
async function revoke(){
|
|
24
|
+
if(!revoking.value)return
|
|
25
|
+
const selection=revoking.value
|
|
26
|
+
const done=await request.run(async signal=>{await provider.revoke(selection.grantId,signal);return true})
|
|
27
|
+
if(done){selections.value=selections.value.filter(s=>s.grantId!==selection.grantId);revoking.value=undefined;notice.value=copy.value.revokedNotice}
|
|
28
|
+
}
|
|
29
|
+
function askRevoke(selection:M2Selection){active.value=undefined;notice.value='';error.value=undefined;revoking.value=selection}
|
|
30
|
+
onMounted(()=>void refresh())
|
|
31
|
+
</script>
|
|
32
|
+
<template>
|
|
33
|
+
<SettingsSection :title="copy.title" :collapsible="false">
|
|
34
|
+
<div :aria-busy="occupied">
|
|
35
|
+
<p>{{ copy.ownPermissions }}</p><p>{{ copy.consent }}</p>
|
|
36
|
+
<p class="integration-help">{{ copy.localOnly }}</p>
|
|
37
|
+
<p class="integration-help">{{ copy.identityRisk }}</p><p class="integration-help">{{ copy.pathRisk }}</p>
|
|
38
|
+
<p>{{ copy.unsupported }}</p>
|
|
39
|
+
<Callout v-if="error && !revoking" tone="danger" role="alert">{{ m2ErrorCopy(error,copy) }}</Callout>
|
|
40
|
+
<p v-if="busy" role="status">{{ copy.loading }}</p>
|
|
41
|
+
<p v-if="notice" role="status">{{ notice }}</p>
|
|
42
|
+
<div class="integration-actions">
|
|
43
|
+
<Button variant="primary" :disabled="occupied||!loaded" @click="pickerOpen=true">{{ copy.choose }}</Button>
|
|
44
|
+
<Button variant="secondary" :disabled="occupied" @click="refresh">{{ copy.refresh }}</Button>
|
|
45
|
+
</div>
|
|
46
|
+
<p v-if="loaded&&!selections.length">{{ copy.emptySelections }}</p>
|
|
47
|
+
<ul class="nas-grants">
|
|
48
|
+
<li v-for="selection in selections" :key="selection.grantId">
|
|
49
|
+
<div class="nas-grant-heading"><strong>{{ selection.folder }}</strong></div>
|
|
50
|
+
<p>{{ selection.writable ? copy.writable : copy.readOnly }}</p>
|
|
51
|
+
<div class="integration-actions">
|
|
52
|
+
<Button variant="secondary" :disabled="occupied" @click="active=selection">{{ copy.openFiles }}</Button>
|
|
53
|
+
<Button variant="secondary" :disabled="occupied" @click="askRevoke(selection)">{{ copy.revoke }}</Button>
|
|
54
|
+
</div>
|
|
55
|
+
</li>
|
|
56
|
+
</ul>
|
|
57
|
+
<M2Files v-if="active" :key="active.grantId" :selection="active" :locale="locale" @busy="value=>filesBusy=value" />
|
|
58
|
+
</div>
|
|
59
|
+
<M2PathPicker v-model:open="pickerOpen" :locale="locale" @selected="selected" @busy="value=>pickerBusy=value" />
|
|
60
|
+
<Dialog :open="!!revoking" :title="copy.confirmRevoke" :description="copy.revokeWarning" :close-label="copy.close" @update:open="value=>{if(!value){request.cancel();revoking=undefined}}">
|
|
61
|
+
<p class="nas-folder-name">{{ revoking?.folder }}</p>
|
|
62
|
+
<Callout v-if="error" tone="danger" role="alert">{{ m2ErrorCopy(error,copy) }}</Callout>
|
|
63
|
+
<template #footer>
|
|
64
|
+
<Button variant="secondary" @click="request.cancel();revoking=undefined">{{ copy.cancel }}</Button>
|
|
65
|
+
<Button variant="danger" :disabled="busy" @click="revoke">{{ copy.confirmRevoke }}</Button>
|
|
66
|
+
</template>
|
|
67
|
+
</Dialog>
|
|
68
|
+
</SettingsSection>
|
|
69
|
+
</template>
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import {computed, inject, onMounted, ref} from 'vue'
|
|
3
|
+
import {Button, Callout, Dialog, SettingsSection} from '@synopackageland/ui'
|
|
4
|
+
import {NasProviderKey, type GrantView, type ScopeKind} from './provider'
|
|
5
|
+
import {actionCopy, errorCopy, nasCopy} from './i18n'
|
|
6
|
+
import {useNasRequest} from './use-request'
|
|
7
|
+
import NasPathPicker from './NasPathPicker.vue'
|
|
8
|
+
|
|
9
|
+
const props=defineProps<{locale:string}>()
|
|
10
|
+
const provider=inject(NasProviderKey)!
|
|
11
|
+
const copy=computed(()=>nasCopy(props.locale))
|
|
12
|
+
const request=useNasRequest(), {busy,error}=request
|
|
13
|
+
const items=ref<GrantView[]>([]), canManageShared=ref(false), pickerOpen=ref(false), kind=ref<ScopeKind>('user-personal'), revokeTarget=ref<GrantView>(), notice=ref('')
|
|
14
|
+
const revokeOpen=computed({get:()=>!!revokeTarget.value,set:value=>{if(!value){request.cancel();revokeTarget.value=undefined}}})
|
|
15
|
+
async function refresh() {
|
|
16
|
+
const result=await request.run(signal=>provider.settings(signal))
|
|
17
|
+
if(result) {items.value=result.items;canManageShared.value=result.canManageShared}
|
|
18
|
+
}
|
|
19
|
+
function choose(scope:ScopeKind) {kind.value=scope;notice.value='';pickerOpen.value=true}
|
|
20
|
+
async function granted() {notice.value=copy.value.noticeCreated;await refresh()}
|
|
21
|
+
function state(item:GrantView) {
|
|
22
|
+
if(item.effectiveState==='active') return copy.value.active
|
|
23
|
+
if(item.effectiveState==='suspended') return copy.value.suspended
|
|
24
|
+
if(item.cleanupRequired) return copy.value.cleanup
|
|
25
|
+
return item.drained===true?copy.value.revoked:copy.value.draining
|
|
26
|
+
}
|
|
27
|
+
function created(time:number) {
|
|
28
|
+
try {return new Intl.DateTimeFormat(props.locale.replace('_','-'),{dateStyle:'medium',timeStyle:'short'}).format(time)}
|
|
29
|
+
catch {return new Intl.DateTimeFormat('en',{dateStyle:'medium',timeStyle:'short'}).format(time)}
|
|
30
|
+
}
|
|
31
|
+
async function revoke() {
|
|
32
|
+
const target=revokeTarget.value;if(!target) return
|
|
33
|
+
const result=await request.run(signal=>provider.revoke(target.grantId,target.revision,signal))
|
|
34
|
+
if(result) {
|
|
35
|
+
// Only an R receipt sets revoked; only Q sets drained. Timeout is neither.
|
|
36
|
+
if(result.revoked) {const item=items.value.find(i=>i.grantId===result.grantId);if(item){item.effectiveState='revoked';item.revision=result.grantRevision;item.drained=result.drained}}
|
|
37
|
+
revokeTarget.value=undefined
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
onMounted(refresh)
|
|
41
|
+
</script>
|
|
42
|
+
|
|
43
|
+
<template>
|
|
44
|
+
<SettingsSection :title="copy.title" :collapsible="false" class="nas-settings" :aria-busy="busy">
|
|
45
|
+
<Callout tone="info" :title="copy.pilotOff">{{ copy.pilotRestrictions }}</Callout>
|
|
46
|
+
<p v-if="provider.mode === 'mock'" class="integration-help">{{ copy.mock }}</p>
|
|
47
|
+
<Callout v-if="error" tone="danger" :title="copy.errorTitle" role="alert">{{ errorCopy(error,copy) }}</Callout>
|
|
48
|
+
<div class="integration-actions">
|
|
49
|
+
<Button variant="primary" :disabled="busy || pickerOpen" @click="choose('user-personal')">{{ copy.choosePersonal }}</Button>
|
|
50
|
+
<Button v-if="canManageShared" variant="secondary" :disabled="busy || pickerOpen" @click="choose('app-shared')">{{ copy.chooseShared }}</Button>
|
|
51
|
+
<Button variant="secondary" :disabled="busy || pickerOpen" @click="refresh">{{ copy.refresh }}</Button>
|
|
52
|
+
</div>
|
|
53
|
+
<p v-if="notice" role="status">{{ notice }}</p>
|
|
54
|
+
<p v-if="busy" role="status">{{ copy.loading }}</p>
|
|
55
|
+
<p v-else-if="!items.length">{{ copy.emptyGrant }}</p>
|
|
56
|
+
<ul v-else class="nas-grants">
|
|
57
|
+
<li v-for="item in items" :key="item.grantId">
|
|
58
|
+
<div class="nas-grant-heading"><strong>{{ item.displayName }}</strong><Button v-if="item.canRevoke && item.effectiveState !== 'revoked'" variant="secondary" :disabled="busy || pickerOpen" @click="revokeTarget=item">{{ copy.revoke }}</Button></div>
|
|
59
|
+
<dl class="nas-summary">
|
|
60
|
+
<dt>{{ copy.scope }}</dt><dd>{{ item.scopeKind === 'user-personal' ? copy.personal : copy.shared }}</dd>
|
|
61
|
+
<dt>{{ copy.actions }}</dt><dd>{{ actionCopy(item.actions,copy) }}</dd>
|
|
62
|
+
<dt>{{ copy.state }}</dt><dd role="status">{{ state(item) }}</dd>
|
|
63
|
+
<dt>{{ copy.createdAt }}</dt><dd>{{ created(item.createdAt) }}</dd>
|
|
64
|
+
</dl>
|
|
65
|
+
</li>
|
|
66
|
+
</ul>
|
|
67
|
+
<NasPathPicker v-model:open="pickerOpen" :scope-kind="kind" :locale="locale" @granted="granted" />
|
|
68
|
+
<Dialog v-model:open="revokeOpen" :title="copy.revokeTitle" :description="copy.revokeWarning" :close-label="copy.close">
|
|
69
|
+
<p>{{ revokeTarget?.displayName }}</p>
|
|
70
|
+
<Callout v-if="error" tone="danger" :title="copy.errorTitle" role="alert">{{ errorCopy(error,copy) }}</Callout>
|
|
71
|
+
<template #footer><Button variant="secondary" @click="revokeOpen=false">{{ copy.cancel }}</Button><Button variant="danger" :disabled="busy" @click="revoke">{{ copy.confirmRevoke }}</Button></template>
|
|
72
|
+
</Dialog>
|
|
73
|
+
</SettingsSection>
|
|
74
|
+
</template>
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import {computed, inject, onBeforeUnmount, ref, watch} from 'vue'
|
|
3
|
+
import {Button, Callout, DataGrid, Dialog, TreeView, type TreeNode} from '@synopackageland/ui'
|
|
4
|
+
import {NasProviderKey, type FolderEntry, type PickerContext, type PreparedIntent, type GrantHandle, type ScopeKind} from './provider'
|
|
5
|
+
import {actionCopy, errorCopy, format, nasCopy} from './i18n'
|
|
6
|
+
import {useNasRequest} from './use-request'
|
|
7
|
+
|
|
8
|
+
const props=defineProps<{open:boolean; scopeKind:ScopeKind; locale:string}>()
|
|
9
|
+
const emit=defineEmits<{'update:open':[value:boolean]; granted:[grant:GrantHandle]}>()
|
|
10
|
+
const provider=inject(NasProviderKey)!
|
|
11
|
+
const copy=computed(()=>nasCopy(props.locale))
|
|
12
|
+
const request=useNasRequest(), {busy,error}=request
|
|
13
|
+
const context=ref<PickerContext>(), entries=ref<FolderEntry[]>([]), roots=ref<TreeNode[]>([])
|
|
14
|
+
const path=ref<Array<{id:string;name:string}>>([]), selected=ref<FolderEntry>(), intent=ref<PreparedIntent>(), nextCursor=ref<string>()
|
|
15
|
+
const columns=computed(()=>[{key:'displayName',label:copy.value.folder,width:'65%'},{key:'selection',label:copy.value.selection,width:'35%'}])
|
|
16
|
+
const rows=computed(()=>entries.value.map(e=>({...e})))
|
|
17
|
+
|
|
18
|
+
function discard() {
|
|
19
|
+
request.cancel()
|
|
20
|
+
const id=context.value?.contextId;context.value=undefined
|
|
21
|
+
entries.value=[];roots.value=[];path.value=[];selected.value=undefined;intent.value=undefined;nextCursor.value=undefined
|
|
22
|
+
if(id) void provider.cancel(id).catch(()=>{})
|
|
23
|
+
}
|
|
24
|
+
function close() {discard();emit('update:open',false)}
|
|
25
|
+
async function start() {
|
|
26
|
+
discard()
|
|
27
|
+
const result=await request.run(async(signal,current)=> {
|
|
28
|
+
const ctx=await provider.begin(props.scopeKind,signal)
|
|
29
|
+
// A provider which ignores abort must still have its late context canceled.
|
|
30
|
+
if(!current() || signal.aborted) {await provider.cancel(ctx.contextId);throw {code:'canceled'}}
|
|
31
|
+
context.value=ctx
|
|
32
|
+
return provider.list(ctx.contextId,undefined,undefined,signal)
|
|
33
|
+
})
|
|
34
|
+
if(result) {entries.value=result.entries;roots.value=result.entries.map(e=>({id:e.nodeId,label:e.displayName}));nextCursor.value=result.nextCursor}
|
|
35
|
+
}
|
|
36
|
+
async function browse(target:Array<{id:string;name:string}>, more=false) {
|
|
37
|
+
if(!context.value) return
|
|
38
|
+
const ctx=context.value, node=target.at(-1)?.id
|
|
39
|
+
const result=await request.run(signal=>provider.list(ctx.contextId,node,more?nextCursor.value:undefined,signal))
|
|
40
|
+
if(result) {
|
|
41
|
+
path.value=target;entries.value=more?[...entries.value,...result.entries]:result.entries
|
|
42
|
+
// Bound the rendered list too; pages do not grow an unbounded DOM.
|
|
43
|
+
if(entries.value.length>200) entries.value=entries.value.slice(-200)
|
|
44
|
+
if(target.length===0) roots.value=entries.value.map(e=>({id:e.nodeId,label:e.displayName}))
|
|
45
|
+
nextCursor.value=result.nextCursor;selected.value=undefined;intent.value=undefined
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function openFolder(id:string,name:string) {void browse([...path.value,{id,name}])}
|
|
49
|
+
async function review() {
|
|
50
|
+
if(!selected.value) return
|
|
51
|
+
const result=await request.run(signal=>provider.prepare(selected.value!.nodeId,signal))
|
|
52
|
+
if(result) intent.value=result
|
|
53
|
+
}
|
|
54
|
+
async function confirm() {
|
|
55
|
+
if(!intent.value) return
|
|
56
|
+
const prepared=intent.value
|
|
57
|
+
const result=await request.run(signal=>provider.confirm(prepared.intentId,prepared.summaryDigest,signal))
|
|
58
|
+
if(result) {emit('granted',result);close()}
|
|
59
|
+
}
|
|
60
|
+
watch(()=>props.open,open=>{if(open) void start();else discard()},{immediate:true})
|
|
61
|
+
watch(()=>props.scopeKind,()=>{if(props.open) void start()})
|
|
62
|
+
onBeforeUnmount(discard)
|
|
63
|
+
</script>
|
|
64
|
+
|
|
65
|
+
<template>
|
|
66
|
+
<Dialog :open="open" :title="intent ? copy.summaryTitle : copy.pickerTitle" :description="copy.pickerHelp" :close-label="copy.close" width="720px" @update:open="value => {if(!value) close()}">
|
|
67
|
+
<div class="nas-picker" :aria-busy="busy">
|
|
68
|
+
<p v-if="provider.mode === 'mock'" class="integration-help">{{ copy.mock }}</p>
|
|
69
|
+
<Callout v-if="error" tone="danger" :title="copy.errorTitle" role="alert">{{ errorCopy(error,copy) }}</Callout>
|
|
70
|
+
<p v-if="busy" role="status">{{ copy.loading }}</p>
|
|
71
|
+
<template v-if="intent">
|
|
72
|
+
<dl class="nas-summary">
|
|
73
|
+
<dt>{{ copy.app }}</dt><dd>{{ intent.summary.appName }}</dd>
|
|
74
|
+
<dt>{{ copy.scope }}</dt><dd>{{ intent.summary.scopeKind === 'user-personal' ? copy.personal : copy.shared }}</dd>
|
|
75
|
+
<dt>{{ copy.folder }}</dt><dd>{{ intent.summary.displayName }}</dd>
|
|
76
|
+
<dt>{{ copy.actions }}</dt><dd>{{ actionCopy(intent.summary.actions,copy) }}</dd>
|
|
77
|
+
</dl>
|
|
78
|
+
<p>{{ copy.persistent }}</p><p>{{ copy.revokeHow }}</p><p>{{ copy.expires }}</p>
|
|
79
|
+
</template>
|
|
80
|
+
<template v-else-if="context">
|
|
81
|
+
<nav class="nas-breadcrumb" :aria-label="copy.folder">
|
|
82
|
+
<Button v-if="path.length" variant="secondary" :disabled="busy" @click="browse(path.slice(0,-1))">{{ copy.back }}</Button>
|
|
83
|
+
<Button variant="secondary" :disabled="busy" @click="browse([])">{{ copy.roots }}</Button>
|
|
84
|
+
<Button v-for="(part,index) in path" :key="part.id" variant="secondary" :disabled="busy" @click="browse(path.slice(0,index+1))">{{ part.name }}</Button>
|
|
85
|
+
</nav>
|
|
86
|
+
<div class="nas-browser">
|
|
87
|
+
<aside class="nas-tree" :aria-label="copy.roots" :inert="busy || undefined"><TreeView :nodes="roots" :show-icons="false" @select="node => browse([{id:node.id,name:node.label}])" /></aside>
|
|
88
|
+
<div class="nas-folder-list">
|
|
89
|
+
<DataGrid :columns="columns" :rows="rows" row-key="nodeId" :footer="false" :labels="{empty:copy.emptyFolder}" :resizable="false" :loading="busy" :loading-text="copy.loading">
|
|
90
|
+
<template #cell-displayName="{row}"><Button variant="secondary" class="nas-folder-name" :disabled="busy" @click="openFolder(String(row.nodeId),String(row.displayName))">{{ format(copy.open,String(row.displayName)) }}</Button></template>
|
|
91
|
+
<template #cell-selection="{row}"><Button variant="secondary" class="nas-folder-action" :disabled="busy || !row.selectable" :aria-label="format(copy.select,String(row.displayName))" :aria-pressed="selected?.nodeId === row.nodeId" @click="selected=entries.find(e=>e.nodeId===row.nodeId)">{{ copy.selection }}</Button></template>
|
|
92
|
+
</DataGrid>
|
|
93
|
+
<Button v-if="nextCursor" variant="secondary" :disabled="busy" @click="browse(path,true)">{{ copy.loadMore }}</Button>
|
|
94
|
+
</div>
|
|
95
|
+
</div>
|
|
96
|
+
<p v-if="selected" role="status">{{ format(copy.selected,selected.displayName) }}</p>
|
|
97
|
+
</template>
|
|
98
|
+
</div>
|
|
99
|
+
<template #footer>
|
|
100
|
+
<Button variant="secondary" @click="close">{{ copy.cancel }}</Button>
|
|
101
|
+
<Button v-if="!context && !busy" variant="secondary" @click="start">{{ copy.retry }}</Button>
|
|
102
|
+
<Button v-if="intent" variant="primary" :disabled="busy" @click="confirm">{{ copy.confirm }}</Button>
|
|
103
|
+
<Button v-else variant="primary" :disabled="busy || !selected" @click="review">{{ copy.review }}</Button>
|
|
104
|
+
</template>
|
|
105
|
+
</Dialog>
|
|
106
|
+
</template>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import {computed} from 'vue'
|
|
3
|
+
import {Callout, SettingsSection} from '@synopackageland/ui'
|
|
4
|
+
import {nasCopy} from './i18n'
|
|
5
|
+
const props=defineProps<{locale:string}>()
|
|
6
|
+
const copy=computed(()=>nasCopy(props.locale))
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<template>
|
|
10
|
+
<SettingsSection :title="copy.title" :collapsible="false" data-nas-state="unavailable">
|
|
11
|
+
<Callout :title="copy.unavailableTitle">
|
|
12
|
+
<p>{{ copy.unavailableMessage }}</p>
|
|
13
|
+
<p>{{ copy.pilotUnavailable }}</p>
|
|
14
|
+
<p>{{ copy.noUnlock }}</p>
|
|
15
|
+
<p>{{ copy.relaxedRisk }}</p>
|
|
16
|
+
<p>{{ copy.relaxedReauthorize }}</p>
|
|
17
|
+
<p>{{ copy.relaxedPermissions }}</p>
|
|
18
|
+
</Callout>
|
|
19
|
+
</SettingsSection>
|
|
20
|
+
</template>
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "NAS-Ordnerzugriff",
|
|
3
|
+
"mock": "Mock-Vorschau — NAS-Dateien und Berechtigungen bleiben unverändert.",
|
|
4
|
+
"personal": "Meine Ordner",
|
|
5
|
+
"shared": "Gemeinsame App-Ordner",
|
|
6
|
+
"choosePersonal": "Eigenen Ordner wählen",
|
|
7
|
+
"chooseShared": "Gemeinsamen Ordner wählen",
|
|
8
|
+
"refresh": "Zugriff aktualisieren",
|
|
9
|
+
"emptyGrant": "Keine Ordner freigegeben. Wählen Sie einen Ordner für die Vorschau des Lesezugriffs.",
|
|
10
|
+
"pickerTitle": "NAS-Ordner wählen",
|
|
11
|
+
"pickerHelp": "Ordner durchsuchen, auswählen und den Lesezugriff prüfen.",
|
|
12
|
+
"roots": "Ordner",
|
|
13
|
+
"back": "Zurück",
|
|
14
|
+
"open": "{name} öffnen",
|
|
15
|
+
"select": "{name} auswählen",
|
|
16
|
+
"selected": "Ausgewählt: {name}",
|
|
17
|
+
"review": "Zugriff prüfen",
|
|
18
|
+
"cancel": "Abbrechen",
|
|
19
|
+
"confirm": "Zugriff bestätigen",
|
|
20
|
+
"summaryTitle": "Ordnerzugriff prüfen",
|
|
21
|
+
"app": "App",
|
|
22
|
+
"scope": "Bereich",
|
|
23
|
+
"folder": "Ordner",
|
|
24
|
+
"actions": "Erlaubte Aktionen",
|
|
25
|
+
"readOnly": "Ordner auflisten, Metadaten prüfen und Dateien lesen",
|
|
26
|
+
"persistent": "Dauerhafter Zugriff bis zum Widerruf oder bis die Bindung ungültig wird.",
|
|
27
|
+
"revokeHow": "Widerrufen Sie einzelne Ordner hier. Eine neue Freigabe erzeugt einen neuen Grant.",
|
|
28
|
+
"expires": "Innerhalb von 30 Sekunden bestätigen.",
|
|
29
|
+
"loading": "Ordner werden geladen…",
|
|
30
|
+
"emptyFolder": "Dieser Ordner ist leer",
|
|
31
|
+
"loadMore": "Mehr laden",
|
|
32
|
+
"state": "Zugriffsstatus",
|
|
33
|
+
"active": "Aktiv",
|
|
34
|
+
"suspended": "Ausgesetzt — erneut auswählen und freigeben",
|
|
35
|
+
"revoked": "Widerrufen",
|
|
36
|
+
"draining": "Widerrufen; Übertragungen werden gestoppt",
|
|
37
|
+
"cleanup": "Widerrufen; Bereinigung muss geprüft werden",
|
|
38
|
+
"createdAt": "Erstellt",
|
|
39
|
+
"revoke": "Widerrufen",
|
|
40
|
+
"revokeTitle": "Ordnerzugriff widerrufen?",
|
|
41
|
+
"revokeWarning": "Neuen Zugriff und laufende Übertragungen stoppen. Bereits gesendete oder geschriebene Daten werden nicht zurückgesetzt.",
|
|
42
|
+
"confirmRevoke": "Widerruf bestätigen",
|
|
43
|
+
"noticeCreated": "Ordnerzugriff hinzugefügt.",
|
|
44
|
+
"errorTitle": "Ordnerzugriff konnte nicht aktualisiert werden",
|
|
45
|
+
"errorDenied": "Zugriff verweigert. Wählen Sie einen für Ihr aktuelles Konto sichtbaren Ordner.",
|
|
46
|
+
"errorExpired": "Auswahl oder Bestätigung abgelaufen. Abbrechen und den Ordner erneut wählen.",
|
|
47
|
+
"errorStale": "Sitzung oder Auswahl geändert. Abbrechen und den Ordner erneut wählen.",
|
|
48
|
+
"errorUnavailable": "Ordnerdienst nicht verfügbar. Bitten Sie einen Administrator, Integration und Home-Dienste zu prüfen.",
|
|
49
|
+
"errorBusy": "Anfragelimit erreicht. Warten Sie und versuchen Sie es erneut.",
|
|
50
|
+
"errorCanceled": "Anfrage abgebrochen. Wählen Sie den Ordner erneut, wenn Sie bereit sind.",
|
|
51
|
+
"errorInternal": "Anfrage fehlgeschlagen. Aktualisieren Sie den Zugriff vor einem neuen Versuch.",
|
|
52
|
+
"retry": "Erneut versuchen",
|
|
53
|
+
"close": "Schließen",
|
|
54
|
+
"selection": "Ordner auswählen",
|
|
55
|
+
"actionList": "Ordner auflisten",
|
|
56
|
+
"actionStat": "Metadaten prüfen",
|
|
57
|
+
"actionRead": "Dateien lesen",
|
|
58
|
+
"pilotOff": "Pilot für verwaltete Konten: aus",
|
|
59
|
+
"pilotRestrictions": "Die Freigabe durch einen Administrator und ein geprüfter Ablauf zur Kontenpflege sind erforderlich. Kontoänderungen oder eine ungeprüfte Identität entziehen den Zugriff und erfordern eine neue Anmeldung und Freigabe. Diese Version kann den Pilotbetrieb nicht aktivieren.",
|
|
60
|
+
"unavailableTitle": "Noch nicht verfügbar",
|
|
61
|
+
"unavailableMessage": "NAS-Ordnerfreigaben und Dateioperationen sind noch nicht verfügbar. Die erforderlichen nativen Identitäts- und Berechtigungsnachweise können derzeit nicht geprüft werden.",
|
|
62
|
+
"pilotUnavailable": "Der Pilot B für verwaltete Konten ist experimental und kann nicht aktiviert werden.",
|
|
63
|
+
"noUnlock": "Das Aktivieren der Integration oder erneutes Anmelden schaltet den NAS-Dateizugriff nicht frei.",
|
|
64
|
+
"errorUnknownMethod": "Diese Paketversion stellt diese Methode nicht bereit.",
|
|
65
|
+
"errorNativeProof": "Der erforderliche native Identitäts- oder Berechtigungsnachweis fehlt. Der NAS-Zugriff bleibt gesperrt.",
|
|
66
|
+
"errorSession": "Ihre DSM-Sitzung ist abgelaufen. Melden Sie sich erneut für die App-Sitzung an; der NAS-Dateizugriff bleibt nicht verfügbar.",
|
|
67
|
+
"errorAuthentication": "Die DSM-Authentifizierung ist nicht verfügbar. Aktualisieren Sie den App-Status später.",
|
|
68
|
+
"errorUnsupported": "NAS-Dateioperationen sind in diesem Build nicht verfügbar.",
|
|
69
|
+
"healthPending": "Vorübergehende erneute Prüfung",
|
|
70
|
+
"healthPendingHelp": "Die Integration wird vorübergehend erneut geprüft. Warten Sie und aktualisieren Sie anschließend. Neuer Zugriff ist erst nach Abschluss der Prüfung möglich.",
|
|
71
|
+
"relaxedRisk": "Bei gelockerter Identität können mit derselben UID und demselben username neu erstellte Konten bestehende Freigaben übernehmen.",
|
|
72
|
+
"relaxedReauthorize": "Ändert sich die UID oder der username, werden alle Ihre Freigaben ungültig und müssen erneut genehmigt werden.",
|
|
73
|
+
"relaxedPermissions": "Dateioperationen verwenden Ihre UID und Gruppen und bleiben auf NAS-Berechtigungen und genehmigte Ordner beschränkt. Deaktivierte Konten oder entzogene App-Berechtigungen führen zur Zugriffsverweigerung."
|
|
74
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "NAS folder access",
|
|
3
|
+
"mock": "Mock preview — no NAS files or permissions are changed.",
|
|
4
|
+
"personal": "My folders",
|
|
5
|
+
"shared": "App shared folders",
|
|
6
|
+
"choosePersonal": "Choose my folder",
|
|
7
|
+
"chooseShared": "Choose shared folder",
|
|
8
|
+
"refresh": "Refresh access",
|
|
9
|
+
"emptyGrant": "No folders authorized. Choose a folder to preview read-only access.",
|
|
10
|
+
"pickerTitle": "Choose a NAS folder",
|
|
11
|
+
"pickerHelp": "Browse folders, select one, then review read-only access.",
|
|
12
|
+
"roots": "Folders",
|
|
13
|
+
"back": "Back",
|
|
14
|
+
"open": "Open {name}",
|
|
15
|
+
"select": "Select {name}",
|
|
16
|
+
"selected": "Selected: {name}",
|
|
17
|
+
"review": "Review access",
|
|
18
|
+
"cancel": "Cancel",
|
|
19
|
+
"confirm": "Confirm access",
|
|
20
|
+
"summaryTitle": "Review folder access",
|
|
21
|
+
"app": "App",
|
|
22
|
+
"scope": "Scope",
|
|
23
|
+
"folder": "Folder",
|
|
24
|
+
"actions": "Allowed actions",
|
|
25
|
+
"readOnly": "List folders, inspect metadata and read files",
|
|
26
|
+
"persistent": "Persistent access — until you revoke it or its binding becomes invalid.",
|
|
27
|
+
"revokeHow": "Revoke individual folders here. Reauthorization creates a new grant.",
|
|
28
|
+
"expires": "Confirm within 30 seconds.",
|
|
29
|
+
"loading": "Loading folders…",
|
|
30
|
+
"emptyFolder": "This folder is empty",
|
|
31
|
+
"loadMore": "Load more",
|
|
32
|
+
"state": "Access state",
|
|
33
|
+
"active": "Active",
|
|
34
|
+
"suspended": "Suspended — select again to authorize",
|
|
35
|
+
"revoked": "Revoked",
|
|
36
|
+
"draining": "Revoked; stopping transfers",
|
|
37
|
+
"cleanup": "Revoked; cleanup needs verification",
|
|
38
|
+
"createdAt": "Created",
|
|
39
|
+
"revoke": "Revoke",
|
|
40
|
+
"revokeTitle": "Revoke folder access?",
|
|
41
|
+
"revokeWarning": "Stop new access and in-progress transfers. Data already sent or written will not be restored.",
|
|
42
|
+
"confirmRevoke": "Confirm revoke",
|
|
43
|
+
"noticeCreated": "Folder access added.",
|
|
44
|
+
"errorTitle": "Folder access could not be updated",
|
|
45
|
+
"errorDenied": "Access denied. Choose a folder visible to your current account.",
|
|
46
|
+
"errorExpired": "The selection or confirmation expired. Cancel and choose the folder again.",
|
|
47
|
+
"errorStale": "Your session or selection changed. Cancel and choose the folder again.",
|
|
48
|
+
"errorUnavailable": "Folder service is unavailable. Ask an administrator to check integration and home services.",
|
|
49
|
+
"errorBusy": "The request limit was reached. Wait, then retry.",
|
|
50
|
+
"errorCanceled": "The request was canceled. Choose the folder again when ready.",
|
|
51
|
+
"errorInternal": "The request failed. Refresh access before trying again.",
|
|
52
|
+
"retry": "Retry",
|
|
53
|
+
"close": "Close",
|
|
54
|
+
"selection": "Select folder",
|
|
55
|
+
"actionList": "List folders",
|
|
56
|
+
"actionStat": "Inspect metadata",
|
|
57
|
+
"actionRead": "Read files",
|
|
58
|
+
"pilotOff": "Managed account pilot: off",
|
|
59
|
+
"pilotRestrictions": "Administrator approval and a verified account-maintenance process are required. Account changes or unverified identity revoke access and require a new sign-in and approval. Enabling this pilot is unavailable in this build.",
|
|
60
|
+
"unavailableTitle": "Not available yet",
|
|
61
|
+
"unavailableMessage": "NAS folder grants and file operations are not available yet. Required native identity and permission proof cannot currently be verified.",
|
|
62
|
+
"pilotUnavailable": "Managed account pilot B is experimental and cannot be enabled.",
|
|
63
|
+
"noUnlock": "Enabling integration or signing in again does not unlock NAS file access.",
|
|
64
|
+
"errorUnknownMethod": "This method is not provided by this package version.",
|
|
65
|
+
"errorNativeProof": "Required native identity or permission proof is unavailable. NAS access remains closed.",
|
|
66
|
+
"errorSession": "Your DSM session expired. Sign in to restore the app session; NAS file access remains unavailable.",
|
|
67
|
+
"errorAuthentication": "DSM authentication is unavailable. Refresh the app status later.",
|
|
68
|
+
"errorUnsupported": "NAS file operations are not available in this build.",
|
|
69
|
+
"healthPending": "Temporarily revalidating",
|
|
70
|
+
"healthPendingHelp": "Integration is temporarily revalidating. Wait, then refresh. New access is unavailable until verification completes.",
|
|
71
|
+
"relaxedRisk": "When relaxed identity is selected, accounts recreated with the same UID and username may retain grants.",
|
|
72
|
+
"relaxedReauthorize": "A UID or username change invalidates all your grants and requires new authorization.",
|
|
73
|
+
"relaxedPermissions": "File operations use your UID and groups, within NAS permissions and authorized folders. Disabled accounts or revoked app access are denied."
|
|
74
|
+
}
|