@synopackageland/cli 0.3.10 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (641) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +57 -9
  3. package/dist/bin.js +1 -2
  4. package/dist/build-spk/generator.d.ts +0 -3
  5. package/dist/build-spk/generator.js +138 -287
  6. package/dist/build-spk/native-lifecycle.js +0 -3
  7. package/dist/build-spk/native-payload.js +0 -1
  8. package/dist/build-spk/notices.d.ts +5 -0
  9. package/dist/build-spk/notices.js +60 -0
  10. package/dist/cli.js +178 -151
  11. package/dist/compose/analyze.d.ts +1 -2
  12. package/dist/compose/analyze.js +5 -48
  13. package/dist/contract/unsupported-types.d.ts +10 -0
  14. package/dist/contract/unsupported-types.js +49 -0
  15. package/dist/contract/validate.js +25 -2
  16. package/dist/contract/web-launch.js +0 -2
  17. package/dist/deploy/deploy.d.ts +1 -4
  18. package/dist/deploy/deploy.js +45 -156
  19. package/dist/deploy/homes-values.js +1 -1
  20. package/dist/deploy/plan.d.ts +18 -0
  21. package/dist/deploy/plan.js +54 -0
  22. package/dist/deploy/spk-version.d.ts +2 -14
  23. package/dist/deploy/spk-version.js +25 -111
  24. package/dist/dev.d.ts +1 -3
  25. package/dist/dev.js +14 -28
  26. package/dist/error-registry.js +830 -862
  27. package/dist/host/dsm-client.js +12 -272
  28. package/dist/host/dsm-port-profile.d.ts +0 -1
  29. package/dist/host/dsm-port-profile.js +0 -2
  30. package/dist/host/types.d.ts +1 -83
  31. package/dist/index.d.ts +0 -9
  32. package/dist/index.js +0 -6
  33. package/dist/info.d.ts +0 -1
  34. package/dist/info.js +3 -10
  35. package/dist/init.d.ts +15 -1
  36. package/dist/init.js +128 -12
  37. package/dist/log.js +2 -3
  38. package/dist/native/validate.js +0 -1
  39. package/dist/standalone/binary.d.ts +9 -0
  40. package/dist/standalone/binary.js +67 -0
  41. package/dist/standalone/build.d.ts +25 -0
  42. package/dist/standalone/build.js +110 -0
  43. package/dist/standalone/daemon.d.ts +23 -0
  44. package/dist/standalone/daemon.js +114 -0
  45. package/dist/standalone/dsm-window.d.ts +26 -0
  46. package/dist/standalone/dsm-window.js +291 -0
  47. package/dist/standalone/helper-inventory.d.ts +16 -0
  48. package/dist/standalone/helper-inventory.js +2 -0
  49. package/dist/standalone/helper.d.ts +21 -0
  50. package/dist/standalone/helper.js +105 -0
  51. package/dist/standalone/host-adapter.d.ts +5 -0
  52. package/dist/standalone/host-adapter.js +148 -0
  53. package/dist/standalone/host-platform.d.ts +13 -0
  54. package/dist/standalone/host-platform.js +42 -0
  55. package/dist/standalone/host-types.d.ts +49 -0
  56. package/dist/standalone/host-types.js +1 -0
  57. package/dist/standalone/i18n.d.ts +28 -0
  58. package/dist/standalone/i18n.js +161 -0
  59. package/dist/standalone/inspect-helper.d.ts +6 -0
  60. package/dist/standalone/inspect-helper.js +88 -0
  61. package/dist/standalone/inspect-spk.d.ts +23 -0
  62. package/dist/standalone/inspect-spk.js +209 -0
  63. package/dist/standalone/lifecycle-helper.d.ts +2 -0
  64. package/dist/standalone/lifecycle-helper.js +12 -0
  65. package/dist/standalone/lifecycle.d.ts +3 -0
  66. package/dist/standalone/lifecycle.js +53 -0
  67. package/dist/standalone/manifest.d.ts +73 -0
  68. package/dist/standalone/manifest.js +279 -0
  69. package/dist/standalone/reopen-events.d.ts +2 -0
  70. package/dist/standalone/reopen-events.js +28 -0
  71. package/dist/standalone/root-messages.d.ts +7 -0
  72. package/dist/standalone/root-messages.js +259 -0
  73. package/dist/standalone/root-ops.d.ts +42 -0
  74. package/dist/standalone/root-ops.js +101 -0
  75. package/dist/standalone/root-window.d.ts +36 -0
  76. package/dist/standalone/root-window.js +302 -0
  77. package/dist/standalone/spk.d.ts +23 -0
  78. package/dist/standalone/spk.js +192 -0
  79. package/dist/template-paths.d.ts +2 -0
  80. package/dist/template-paths.js +9 -0
  81. package/dist/templates/_daemon/fixture_linux_test.go +15 -0
  82. package/dist/templates/_daemon/fixture_other_test.go +7 -0
  83. package/dist/templates/_daemon/go.mod +3 -0
  84. package/dist/templates/_daemon/main.go +608 -0
  85. package/dist/templates/_daemon/main_test.go +242 -0
  86. package/dist/templates/_daemon/process_linux.go +55 -0
  87. package/dist/templates/_daemon/process_linux_test.go +161 -0
  88. package/dist/templates/_daemon/process_other.go +14 -0
  89. package/dist/templates/_daemon/testdata/child.go +41 -0
  90. package/dist/templates/_shared/GO-LICENSE +27 -0
  91. package/dist/templates/_shared/GO-PATENTS +22 -0
  92. package/dist/templates/_shared/LICENSES/TEMPLATE.txt +21 -0
  93. package/dist/templates/_shared/notice-overrides/index.json +14 -0
  94. package/dist/templates/_shared/notice-overrides/utils-0.4.2-LICENSE +21 -0
  95. package/dist/templates/_shared/notice-overrides/utils-0.5.0-LICENSE +21 -0
  96. package/dist/templates/_shared/third-party-notices.mjs +51 -0
  97. package/dist/templates/binary/synology-app.yaml +7 -0
  98. package/dist/templates/hello-files/compose.yaml +0 -1
  99. package/dist/templates/hello-web/compose.yaml +13 -10
  100. package/dist/templates/hello-web/html/app.js +1 -23
  101. package/dist/templates/hello-web/html/index.html +1 -3
  102. package/dist/templates/hello-web-page/compose.yaml +13 -10
  103. package/dist/templates/hello-web-page/html/app.js +1 -23
  104. package/dist/templates/hello-web-page/html/index.html +1 -3
  105. package/dist/templates/native-go/README.md +324 -0
  106. package/dist/templates/native-go/backend/THIRD_PARTY_NOTICES.txt +59 -0
  107. package/dist/templates/native-go/backend/cmd/app/main.go +49 -0
  108. package/dist/templates/native-go/backend/cmd/dsm-readonly-probe/main_linux.go +46 -0
  109. package/dist/templates/native-go/backend/cmd/helper/main.go +38 -0
  110. package/dist/templates/native-go/backend/go.mod +7 -0
  111. package/dist/templates/native-go/backend/go.sum +4 -0
  112. package/dist/templates/native-go/backend/internal/api/binary.go +154 -0
  113. package/dist/templates/native-go/backend/internal/api/binary_test.go +165 -0
  114. package/dist/templates/native-go/backend/internal/api/errors.go +33 -0
  115. package/dist/templates/native-go/backend/internal/api/registry.go +104 -0
  116. package/dist/templates/native-go/backend/internal/api/registry_test.go +329 -0
  117. package/dist/templates/native-go/backend/internal/api/server.go +159 -0
  118. package/dist/templates/native-go/backend/internal/app/nas_cgi_artifact_test.go +121 -0
  119. package/dist/templates/native-go/backend/internal/app/nas_refusal_test.go +46 -0
  120. package/dist/templates/native-go/backend/internal/app/root_none.go +9 -0
  121. package/dist/templates/native-go/backend/internal/app/routes.go +138 -0
  122. package/dist/templates/native-go/backend/internal/app/routes_test.go +172 -0
  123. package/dist/templates/native-go/backend/internal/dsm/auth.go +118 -0
  124. package/dist/templates/native-go/backend/internal/dsm/auth_test.go +139 -0
  125. package/dist/templates/native-go/backend/internal/dsmprobe/collector_linux.go +335 -0
  126. package/dist/templates/native-go/backend/internal/dsmprobe/collector_linux_test.go +41 -0
  127. package/dist/templates/native-go/backend/internal/dsmprobe/protocol.go +179 -0
  128. package/dist/templates/native-go/backend/internal/dsmprobe/protocol_test.go +29 -0
  129. package/dist/templates/native-go/backend/internal/helper/cohort.go +393 -0
  130. package/dist/templates/native-go/backend/internal/helper/cohort_publication.go +18 -0
  131. package/dist/templates/native-go/backend/internal/helper/cohort_publication_test.go +105 -0
  132. package/dist/templates/native-go/backend/internal/helper/cohort_test.go +372 -0
  133. package/dist/templates/native-go/backend/internal/helper/control.go +424 -0
  134. package/dist/templates/native-go/backend/internal/helper/control_test.go +250 -0
  135. package/dist/templates/native-go/backend/internal/helper/data_contract.go +242 -0
  136. package/dist/templates/native-go/backend/internal/helper/data_contract_test.go +51 -0
  137. package/dist/templates/native-go/backend/internal/helper/data_decode.go +184 -0
  138. package/dist/templates/native-go/backend/internal/helper/data_decode_pointer_test.go +30 -0
  139. package/dist/templates/native-go/backend/internal/helper/data_protocol.go +416 -0
  140. package/dist/templates/native-go/backend/internal/helper/data_protocol_test.go +449 -0
  141. package/dist/templates/native-go/backend/internal/helper/dsm_acl_linux.go +139 -0
  142. package/dist/templates/native-go/backend/internal/helper/dsm_acl_linux_test.go +121 -0
  143. package/dist/templates/native-go/backend/internal/helper/dsm_acl_syscall_linux.go +95 -0
  144. package/dist/templates/native-go/backend/internal/helper/dsm_acl_syscall_linux_test.go +56 -0
  145. package/dist/templates/native-go/backend/internal/helper/dsm_bridge_linux.go +144 -0
  146. package/dist/templates/native-go/backend/internal/helper/dsm_bridge_linux_test.go +89 -0
  147. package/dist/templates/native-go/backend/internal/helper/dsm_home_linux.go +107 -0
  148. package/dist/templates/native-go/backend/internal/helper/dsm_home_linux_test.go +82 -0
  149. package/dist/templates/native-go/backend/internal/helper/dsm_probe_transport_linux.go +151 -0
  150. package/dist/templates/native-go/backend/internal/helper/dsm_probe_transport_linux_test.go +66 -0
  151. package/dist/templates/native-go/backend/internal/helper/grant_authority.go +516 -0
  152. package/dist/templates/native-go/backend/internal/helper/grant_authority_contract.go +88 -0
  153. package/dist/templates/native-go/backend/internal/helper/grant_authority_test.go +510 -0
  154. package/dist/templates/native-go/backend/internal/helper/grant_cohort.go +389 -0
  155. package/dist/templates/native-go/backend/internal/helper/grant_cohort_test.go +239 -0
  156. package/dist/templates/native-go/backend/internal/helper/grant_delivery.go +49 -0
  157. package/dist/templates/native-go/backend/internal/helper/grant_delivery_methods.go +273 -0
  158. package/dist/templates/native-go/backend/internal/helper/grant_delivery_test.go +322 -0
  159. package/dist/templates/native-go/backend/internal/helper/grant_operation_contract.go +47 -0
  160. package/dist/templates/native-go/backend/internal/helper/grant_readonly_test.go +180 -0
  161. package/dist/templates/native-go/backend/internal/helper/grant_repository_linux.go +415 -0
  162. package/dist/templates/native-go/backend/internal/helper/grant_repository_linux_test.go +468 -0
  163. package/dist/templates/native-go/backend/internal/helper/grant_rpc.go +147 -0
  164. package/dist/templates/native-go/backend/internal/helper/grant_rpc_test.go +51 -0
  165. package/dist/templates/native-go/backend/internal/helper/grant_snapshot.go +75 -0
  166. package/dist/templates/native-go/backend/internal/helper/grant_supervisor_linux.go +134 -0
  167. package/dist/templates/native-go/backend/internal/helper/grant_supervisor_linux_test.go +254 -0
  168. package/dist/templates/native-go/backend/internal/helper/lease.go +112 -0
  169. package/dist/templates/native-go/backend/internal/helper/lease_linux.go +44 -0
  170. package/dist/templates/native-go/backend/internal/helper/lease_other.go +8 -0
  171. package/dist/templates/native-go/backend/internal/helper/lifecycle.go +234 -0
  172. package/dist/templates/native-go/backend/internal/helper/lifecycle_test.go +473 -0
  173. package/dist/templates/native-go/backend/internal/helper/managed_pilot.go +284 -0
  174. package/dist/templates/native-go/backend/internal/helper/managed_pilot_repository_linux.go +74 -0
  175. package/dist/templates/native-go/backend/internal/helper/managed_pilot_repository_linux_test.go +40 -0
  176. package/dist/templates/native-go/backend/internal/helper/managed_pilot_test.go +210 -0
  177. package/dist/templates/native-go/backend/internal/helper/nas_shipped_refusal_linux_test.go +97 -0
  178. package/dist/templates/native-go/backend/internal/helper/native_discovery.go +79 -0
  179. package/dist/templates/native-go/backend/internal/helper/native_identity.go +89 -0
  180. package/dist/templates/native-go/backend/internal/helper/native_provider.go +159 -0
  181. package/dist/templates/native-go/backend/internal/helper/native_provider_test.go +421 -0
  182. package/dist/templates/native-go/backend/internal/helper/observation.go +204 -0
  183. package/dist/templates/native-go/backend/internal/helper/observation_health_test.go +115 -0
  184. package/dist/templates/native-go/backend/internal/helper/observation_reload_budget_test.go +117 -0
  185. package/dist/templates/native-go/backend/internal/helper/observation_test.go +196 -0
  186. package/dist/templates/native-go/backend/internal/helper/observer_diagnostic.go +109 -0
  187. package/dist/templates/native-go/backend/internal/helper/observer_diagnostic_linux.go +76 -0
  188. package/dist/templates/native-go/backend/internal/helper/observer_diagnostic_linux_test.go +124 -0
  189. package/dist/templates/native-go/backend/internal/helper/observer_diagnostic_test.go +98 -0
  190. package/dist/templates/native-go/backend/internal/helper/operation_bootstrap_linux.go +193 -0
  191. package/dist/templates/native-go/backend/internal/helper/operation_credentials_linux.go +56 -0
  192. package/dist/templates/native-go/backend/internal/helper/operation_linux.go +480 -0
  193. package/dist/templates/native-go/backend/internal/helper/operation_linux_test.go +528 -0
  194. package/dist/templates/native-go/backend/internal/helper/peer_linux.go +44 -0
  195. package/dist/templates/native-go/backend/internal/helper/peer_other.go +7 -0
  196. package/dist/templates/native-go/backend/internal/helper/process_linux.go +177 -0
  197. package/dist/templates/native-go/backend/internal/helper/process_other.go +5 -0
  198. package/dist/templates/native-go/backend/internal/helper/publication_test.go +178 -0
  199. package/dist/templates/native-go/backend/internal/helper/read_stream_cohort_linux_test.go +156 -0
  200. package/dist/templates/native-go/backend/internal/helper/read_transfer.go +40 -0
  201. package/dist/templates/native-go/backend/internal/helper/read_transfer_linux.go +109 -0
  202. package/dist/templates/native-go/backend/internal/helper/read_transfer_linux_test.go +118 -0
  203. package/dist/templates/native-go/backend/internal/helper/read_transfer_test.go +177 -0
  204. package/dist/templates/native-go/backend/internal/helper/readonly.go +105 -0
  205. package/dist/templates/native-go/backend/internal/helper/readonly_admission.go +85 -0
  206. package/dist/templates/native-go/backend/internal/helper/readonly_cohort_linux_test.go +253 -0
  207. package/dist/templates/native-go/backend/internal/helper/readonly_linux_test.go +378 -0
  208. package/dist/templates/native-go/backend/internal/helper/readonly_mount_linux.go +65 -0
  209. package/dist/templates/native-go/backend/internal/helper/readonly_mount_proxy_linux.go +113 -0
  210. package/dist/templates/native-go/backend/internal/helper/readonly_operations_linux.go +168 -0
  211. package/dist/templates/native-go/backend/internal/helper/readonly_resolver_linux.go +241 -0
  212. package/dist/templates/native-go/backend/internal/helper/readonly_test.go +40 -0
  213. package/dist/templates/native-go/backend/internal/helper/relaxed_identity.go +252 -0
  214. package/dist/templates/native-go/backend/internal/helper/relaxed_identity_contract.go +105 -0
  215. package/dist/templates/native-go/backend/internal/helper/relaxed_identity_test.go +406 -0
  216. package/dist/templates/native-go/backend/internal/helper/relaxed_invalidation.go +200 -0
  217. package/dist/templates/native-go/backend/internal/helper/repair.go +132 -0
  218. package/dist/templates/native-go/backend/internal/helper/repair_test.go +271 -0
  219. package/dist/templates/native-go/backend/internal/helper/s1r_actor_acl_linux_test.go +303 -0
  220. package/dist/templates/native-go/backend/internal/helper/s1r_actor_fixture_linux_test.go +184 -0
  221. package/dist/templates/native-go/backend/internal/helper/s1r_actor_races_linux_test.go +231 -0
  222. package/dist/templates/native-go/backend/internal/helper/s1r_fixture_contract_linux_test.go +18 -0
  223. package/dist/templates/native-go/backend/internal/helper/server_linux.go +124 -0
  224. package/dist/templates/native-go/backend/internal/helper/status.go +334 -0
  225. package/dist/templates/native-go/backend/internal/helper/status_test.go +288 -0
  226. package/dist/templates/native-go/backend/internal/helper/supervision.go +107 -0
  227. package/dist/templates/native-go/backend/internal/helper/supervision_test.go +124 -0
  228. package/dist/templates/native-go/backend/internal/helper/supervisor_frame.go +76 -0
  229. package/dist/templates/native-go/backend/internal/helper/supervisor_frame_linux_test.go +69 -0
  230. package/dist/templates/native-go/backend/internal/helper/supervisor_frame_test.go +107 -0
  231. package/dist/templates/native-go/backend/internal/helper/supervisor_linux.go +363 -0
  232. package/dist/templates/native-go/backend/internal/helper/supervisor_linux_test.go +913 -0
  233. package/dist/templates/native-go/backend/internal/helper/supervisor_socket_eof_test.go +74 -0
  234. package/dist/templates/native-go/backend/internal/helper/supervisor_socket_test.go +45 -0
  235. package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/create.json +23 -0
  236. package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/frames.json +67 -0
  237. package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/grant-store.json +52 -0
  238. package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/intent.json +20 -0
  239. package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/list.json +20 -0
  240. package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/publish.json +20 -0
  241. package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/read.json +22 -0
  242. package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/stat.json +22 -0
  243. package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/write-stream.json +22 -0
  244. package/dist/templates/native-go/backend/internal/helper/unit_connection.go +75 -0
  245. package/dist/templates/native-go/backend/internal/helper/unit_connection_linux_test.go +135 -0
  246. package/dist/templates/native-go/backend/internal/helper/unit_connection_test.go +133 -0
  247. package/dist/templates/native-go/backend/internal/helper/unit_frame_test.go +32 -0
  248. package/dist/templates/native-go/backend/internal/helper/unit_linux.go +364 -0
  249. package/dist/templates/native-go/backend/internal/helper/unit_linux_test.go +46 -0
  250. package/dist/templates/native-go/backend/internal/helper/unit_mechanisms_linux_test.go +217 -0
  251. package/dist/templates/native-go/backend/internal/helper/unit_padding_linux_test.go +178 -0
  252. package/dist/templates/native-go/backend/internal/helper/unit_query_linux.go +111 -0
  253. package/dist/templates/native-go/backend/internal/helper/unit_reload_linux_test.go +372 -0
  254. package/dist/templates/native-go/backend/internal/helper/unit_reload_sequence_linux_test.go +232 -0
  255. package/dist/templates/native-go/backend/internal/helper/write.go +77 -0
  256. package/dist/templates/native-go/backend/internal/helper/write_admission.go +260 -0
  257. package/dist/templates/native-go/backend/internal/helper/write_admission_test.go +135 -0
  258. package/dist/templates/native-go/backend/internal/helper/write_cohort_linux_test.go +218 -0
  259. package/dist/templates/native-go/backend/internal/helper/write_files_linux.go +202 -0
  260. package/dist/templates/native-go/backend/internal/helper/write_files_linux_test.go +199 -0
  261. package/dist/templates/native-go/backend/internal/helper/write_intent_linux.go +116 -0
  262. package/dist/templates/native-go/backend/internal/helper/write_intent_linux_test.go +74 -0
  263. package/dist/templates/native-go/backend/internal/helper/write_operation_linux.go +245 -0
  264. package/dist/templates/native-go/backend/internal/helper/write_test.go +53 -0
  265. package/dist/templates/native-go/dsm-package.yaml +58 -0
  266. package/dist/templates/native-go/gitignore +1 -0
  267. package/dist/templates/native-go/i18n/glossary.json +662 -0
  268. package/dist/templates/native-go/i18n/messages/de.json +28 -0
  269. package/dist/templates/native-go/i18n/messages/en.json +28 -0
  270. package/dist/templates/native-go/i18n/messages/es.json +28 -0
  271. package/dist/templates/native-go/i18n/messages/fr.json +28 -0
  272. package/dist/templates/native-go/i18n/messages/it.json +28 -0
  273. package/dist/templates/native-go/i18n/messages/ja.json +28 -0
  274. package/dist/templates/native-go/i18n/messages/ko.json +28 -0
  275. package/dist/templates/native-go/i18n/messages/zh-CN.json +28 -0
  276. package/dist/templates/native-go/i18n/messages/zh-TW.json +28 -0
  277. package/dist/templates/native-go/ui/app.css +35 -0
  278. package/dist/templates/native-go/ui/app.js +101 -0
  279. package/dist/templates/native-go-better-auth/backend/internal/app/identity.go +208 -0
  280. package/dist/templates/native-go-better-auth/backend/internal/app/identity_test.go +113 -0
  281. package/dist/templates/native-go-better-auth/node/app.mjs +72 -0
  282. package/dist/templates/native-go-better-auth/node/build.mjs +4 -0
  283. package/dist/templates/native-go-better-auth/node/package-lock.json +862 -0
  284. package/dist/templates/native-go-better-auth/node/package.json +1 -0
  285. package/dist/templates/native-go-better-auth/node/test/auth.test.mjs +31 -0
  286. package/dist/templates/native-go-integration/backend/internal/app/identity_none.go +6 -0
  287. package/dist/templates/native-go-integration/backend/internal/app/personal.go +203 -0
  288. package/dist/templates/native-go-integration/backend/internal/app/personal_test.go +119 -0
  289. package/dist/templates/native-go-root/backend/internal/app/root.go +107 -0
  290. package/dist/templates/native-go-root/backend/internal/app/root_test.go +124 -0
  291. package/dist/templates/native-go-root/root/whoami.sh +6 -0
  292. package/dist/templates/native-go-vue/README.md +224 -0
  293. package/dist/templates/native-go-vue/frontend/DESIGN.md +78 -0
  294. package/dist/templates/native-go-vue/frontend/package-lock.json +2410 -0
  295. package/dist/templates/native-go-vue/frontend/package.json +6 -0
  296. package/dist/templates/native-go-vue/frontend/src/App.vue +159 -0
  297. package/dist/templates/native-go-vue/frontend/src/context.ts +56 -0
  298. package/dist/templates/native-go-vue/frontend/src/main.ts +29 -0
  299. package/dist/templates/native-go-vue/frontend/src/nas/NasGrantSettings.vue +74 -0
  300. package/dist/templates/native-go-vue/frontend/src/nas/NasPathPicker.vue +106 -0
  301. package/dist/templates/native-go-vue/frontend/src/nas/NasUnavailable.vue +20 -0
  302. package/dist/templates/native-go-vue/frontend/src/nas/i18n/de.json +74 -0
  303. package/dist/templates/native-go-vue/frontend/src/nas/i18n/en.json +74 -0
  304. package/dist/templates/native-go-vue/frontend/src/nas/i18n/es.json +74 -0
  305. package/dist/templates/native-go-vue/frontend/src/nas/i18n/fr.json +74 -0
  306. package/dist/templates/native-go-vue/frontend/src/nas/i18n/it.json +74 -0
  307. package/dist/templates/native-go-vue/frontend/src/nas/i18n/ja.json +74 -0
  308. package/dist/templates/native-go-vue/frontend/src/nas/i18n/ko.json +74 -0
  309. package/dist/templates/native-go-vue/frontend/src/nas/i18n/zh-CN.json +74 -0
  310. package/dist/templates/native-go-vue/frontend/src/nas/i18n/zh-TW.json +74 -0
  311. package/dist/templates/native-go-vue/frontend/src/nas/i18n.ts +38 -0
  312. package/dist/templates/native-go-vue/frontend/src/nas/mock-provider.ts +119 -0
  313. package/dist/templates/native-go-vue/frontend/src/nas/provider.ts +59 -0
  314. package/dist/templates/native-go-vue/frontend/src/nas/use-request.ts +27 -0
  315. package/dist/templates/native-go-vue/frontend/src/style.css +31 -0
  316. package/dist/templates/native-go-vue/frontend/test/apps.test.ts +190 -0
  317. package/dist/templates/native-go-vue/frontend/test/nas-provider.test.ts +81 -0
  318. package/dist/templates/native-go-vue/frontend/test/nas-request.test.ts +21 -0
  319. package/dist/templates/native-go-vue/frontend/test/nas-ui.test.ts +261 -0
  320. package/dist/templates/native-go-vue/frontend/tsconfig.json +1 -0
  321. package/dist/templates/native-go-vue/frontend/vite.config.ts +10 -0
  322. package/dist/templates/native-go-vue/gitignore +2 -0
  323. package/dist/types.d.ts +1 -1
  324. package/dist/validate.js +11 -7
  325. package/package.json +5 -8
  326. package/schema/synology-app.schema.json +36 -37
  327. package/skills/SKILL.md +4 -48
  328. package/skills/reference/create.md +11 -83
  329. package/skills/reference/deploy.md +7 -78
  330. package/skills/reference/diagnose.md +4 -101
  331. package/skills/reference/files.md +5 -41
  332. package/skills/reference/identity.md +3 -29
  333. package/skills/reference/wrap.md +0 -2
  334. package/templates/_daemon/fixture_linux_test.go +15 -0
  335. package/templates/_daemon/fixture_other_test.go +7 -0
  336. package/templates/_daemon/go.mod +3 -0
  337. package/templates/_daemon/main.go +608 -0
  338. package/templates/_daemon/main_test.go +242 -0
  339. package/templates/_daemon/process_linux.go +55 -0
  340. package/templates/_daemon/process_linux_test.go +161 -0
  341. package/templates/_daemon/process_other.go +14 -0
  342. package/templates/_daemon/testdata/child.go +41 -0
  343. package/templates/_shared/GO-LICENSE +27 -0
  344. package/templates/_shared/GO-PATENTS +22 -0
  345. package/templates/_shared/LICENSES/TEMPLATE.txt +21 -0
  346. package/templates/_shared/notice-overrides/index.json +14 -0
  347. package/templates/_shared/notice-overrides/utils-0.4.2-LICENSE +21 -0
  348. package/templates/_shared/notice-overrides/utils-0.5.0-LICENSE +21 -0
  349. package/templates/_shared/third-party-notices.mjs +51 -0
  350. package/templates/binary/synology-app.yaml +7 -0
  351. package/templates/hello-files/compose.yaml +0 -1
  352. package/templates/hello-web/compose.yaml +13 -10
  353. package/templates/hello-web/html/app.js +1 -23
  354. package/templates/hello-web/html/index.html +1 -3
  355. package/templates/hello-web-page/compose.yaml +13 -10
  356. package/templates/hello-web-page/html/app.js +1 -23
  357. package/templates/hello-web-page/html/index.html +1 -3
  358. package/templates/native-go/README.md +324 -0
  359. package/templates/native-go/backend/THIRD_PARTY_NOTICES.txt +59 -0
  360. package/templates/native-go/backend/cmd/app/main.go +49 -0
  361. package/templates/native-go/backend/cmd/dsm-readonly-probe/main_linux.go +46 -0
  362. package/templates/native-go/backend/cmd/helper/main.go +38 -0
  363. package/templates/native-go/backend/go.mod +7 -0
  364. package/templates/native-go/backend/go.sum +4 -0
  365. package/templates/native-go/backend/internal/api/binary.go +154 -0
  366. package/templates/native-go/backend/internal/api/binary_test.go +165 -0
  367. package/templates/native-go/backend/internal/api/errors.go +33 -0
  368. package/templates/native-go/backend/internal/api/registry.go +104 -0
  369. package/templates/native-go/backend/internal/api/registry_test.go +329 -0
  370. package/templates/native-go/backend/internal/api/server.go +159 -0
  371. package/templates/native-go/backend/internal/app/nas_cgi_artifact_test.go +121 -0
  372. package/templates/native-go/backend/internal/app/nas_refusal_test.go +46 -0
  373. package/templates/native-go/backend/internal/app/root_none.go +9 -0
  374. package/templates/native-go/backend/internal/app/routes.go +138 -0
  375. package/templates/native-go/backend/internal/app/routes_test.go +172 -0
  376. package/templates/native-go/backend/internal/dsm/auth.go +118 -0
  377. package/templates/native-go/backend/internal/dsm/auth_test.go +139 -0
  378. package/templates/native-go/backend/internal/dsmprobe/collector_linux.go +335 -0
  379. package/templates/native-go/backend/internal/dsmprobe/collector_linux_test.go +41 -0
  380. package/templates/native-go/backend/internal/dsmprobe/protocol.go +179 -0
  381. package/templates/native-go/backend/internal/dsmprobe/protocol_test.go +29 -0
  382. package/templates/native-go/backend/internal/helper/cohort.go +393 -0
  383. package/templates/native-go/backend/internal/helper/cohort_publication.go +18 -0
  384. package/templates/native-go/backend/internal/helper/cohort_publication_test.go +105 -0
  385. package/templates/native-go/backend/internal/helper/cohort_test.go +372 -0
  386. package/templates/native-go/backend/internal/helper/control.go +424 -0
  387. package/templates/native-go/backend/internal/helper/control_test.go +250 -0
  388. package/templates/native-go/backend/internal/helper/data_contract.go +242 -0
  389. package/templates/native-go/backend/internal/helper/data_contract_test.go +51 -0
  390. package/templates/native-go/backend/internal/helper/data_decode.go +184 -0
  391. package/templates/native-go/backend/internal/helper/data_decode_pointer_test.go +30 -0
  392. package/templates/native-go/backend/internal/helper/data_protocol.go +416 -0
  393. package/templates/native-go/backend/internal/helper/data_protocol_test.go +449 -0
  394. package/templates/native-go/backend/internal/helper/dsm_acl_linux.go +139 -0
  395. package/templates/native-go/backend/internal/helper/dsm_acl_linux_test.go +121 -0
  396. package/templates/native-go/backend/internal/helper/dsm_acl_syscall_linux.go +95 -0
  397. package/templates/native-go/backend/internal/helper/dsm_acl_syscall_linux_test.go +56 -0
  398. package/templates/native-go/backend/internal/helper/dsm_bridge_linux.go +144 -0
  399. package/templates/native-go/backend/internal/helper/dsm_bridge_linux_test.go +89 -0
  400. package/templates/native-go/backend/internal/helper/dsm_home_linux.go +107 -0
  401. package/templates/native-go/backend/internal/helper/dsm_home_linux_test.go +82 -0
  402. package/templates/native-go/backend/internal/helper/dsm_probe_transport_linux.go +151 -0
  403. package/templates/native-go/backend/internal/helper/dsm_probe_transport_linux_test.go +66 -0
  404. package/templates/native-go/backend/internal/helper/grant_authority.go +516 -0
  405. package/templates/native-go/backend/internal/helper/grant_authority_contract.go +88 -0
  406. package/templates/native-go/backend/internal/helper/grant_authority_test.go +510 -0
  407. package/templates/native-go/backend/internal/helper/grant_cohort.go +389 -0
  408. package/templates/native-go/backend/internal/helper/grant_cohort_test.go +239 -0
  409. package/templates/native-go/backend/internal/helper/grant_delivery.go +49 -0
  410. package/templates/native-go/backend/internal/helper/grant_delivery_methods.go +273 -0
  411. package/templates/native-go/backend/internal/helper/grant_delivery_test.go +322 -0
  412. package/templates/native-go/backend/internal/helper/grant_operation_contract.go +47 -0
  413. package/templates/native-go/backend/internal/helper/grant_readonly_test.go +180 -0
  414. package/templates/native-go/backend/internal/helper/grant_repository_linux.go +415 -0
  415. package/templates/native-go/backend/internal/helper/grant_repository_linux_test.go +468 -0
  416. package/templates/native-go/backend/internal/helper/grant_rpc.go +147 -0
  417. package/templates/native-go/backend/internal/helper/grant_rpc_test.go +51 -0
  418. package/templates/native-go/backend/internal/helper/grant_snapshot.go +75 -0
  419. package/templates/native-go/backend/internal/helper/grant_supervisor_linux.go +134 -0
  420. package/templates/native-go/backend/internal/helper/grant_supervisor_linux_test.go +254 -0
  421. package/templates/native-go/backend/internal/helper/lease.go +112 -0
  422. package/templates/native-go/backend/internal/helper/lease_linux.go +44 -0
  423. package/templates/native-go/backend/internal/helper/lease_other.go +8 -0
  424. package/templates/native-go/backend/internal/helper/lifecycle.go +234 -0
  425. package/templates/native-go/backend/internal/helper/lifecycle_test.go +473 -0
  426. package/templates/native-go/backend/internal/helper/managed_pilot.go +284 -0
  427. package/templates/native-go/backend/internal/helper/managed_pilot_repository_linux.go +74 -0
  428. package/templates/native-go/backend/internal/helper/managed_pilot_repository_linux_test.go +40 -0
  429. package/templates/native-go/backend/internal/helper/managed_pilot_test.go +210 -0
  430. package/templates/native-go/backend/internal/helper/nas_shipped_refusal_linux_test.go +97 -0
  431. package/templates/native-go/backend/internal/helper/native_discovery.go +79 -0
  432. package/templates/native-go/backend/internal/helper/native_identity.go +89 -0
  433. package/templates/native-go/backend/internal/helper/native_provider.go +159 -0
  434. package/templates/native-go/backend/internal/helper/native_provider_test.go +421 -0
  435. package/templates/native-go/backend/internal/helper/observation.go +204 -0
  436. package/templates/native-go/backend/internal/helper/observation_health_test.go +115 -0
  437. package/templates/native-go/backend/internal/helper/observation_reload_budget_test.go +117 -0
  438. package/templates/native-go/backend/internal/helper/observation_test.go +196 -0
  439. package/templates/native-go/backend/internal/helper/observer_diagnostic.go +109 -0
  440. package/templates/native-go/backend/internal/helper/observer_diagnostic_linux.go +76 -0
  441. package/templates/native-go/backend/internal/helper/observer_diagnostic_linux_test.go +124 -0
  442. package/templates/native-go/backend/internal/helper/observer_diagnostic_test.go +98 -0
  443. package/templates/native-go/backend/internal/helper/operation_bootstrap_linux.go +193 -0
  444. package/templates/native-go/backend/internal/helper/operation_credentials_linux.go +56 -0
  445. package/templates/native-go/backend/internal/helper/operation_linux.go +480 -0
  446. package/templates/native-go/backend/internal/helper/operation_linux_test.go +528 -0
  447. package/templates/native-go/backend/internal/helper/peer_linux.go +44 -0
  448. package/templates/native-go/backend/internal/helper/peer_other.go +7 -0
  449. package/templates/native-go/backend/internal/helper/process_linux.go +177 -0
  450. package/templates/native-go/backend/internal/helper/process_other.go +5 -0
  451. package/templates/native-go/backend/internal/helper/publication_test.go +178 -0
  452. package/templates/native-go/backend/internal/helper/read_stream_cohort_linux_test.go +156 -0
  453. package/templates/native-go/backend/internal/helper/read_transfer.go +40 -0
  454. package/templates/native-go/backend/internal/helper/read_transfer_linux.go +109 -0
  455. package/templates/native-go/backend/internal/helper/read_transfer_linux_test.go +118 -0
  456. package/templates/native-go/backend/internal/helper/read_transfer_test.go +177 -0
  457. package/templates/native-go/backend/internal/helper/readonly.go +105 -0
  458. package/templates/native-go/backend/internal/helper/readonly_admission.go +85 -0
  459. package/templates/native-go/backend/internal/helper/readonly_cohort_linux_test.go +253 -0
  460. package/templates/native-go/backend/internal/helper/readonly_linux_test.go +378 -0
  461. package/templates/native-go/backend/internal/helper/readonly_mount_linux.go +65 -0
  462. package/templates/native-go/backend/internal/helper/readonly_mount_proxy_linux.go +113 -0
  463. package/templates/native-go/backend/internal/helper/readonly_operations_linux.go +168 -0
  464. package/templates/native-go/backend/internal/helper/readonly_resolver_linux.go +241 -0
  465. package/templates/native-go/backend/internal/helper/readonly_test.go +40 -0
  466. package/templates/native-go/backend/internal/helper/relaxed_identity.go +252 -0
  467. package/templates/native-go/backend/internal/helper/relaxed_identity_contract.go +105 -0
  468. package/templates/native-go/backend/internal/helper/relaxed_identity_test.go +406 -0
  469. package/templates/native-go/backend/internal/helper/relaxed_invalidation.go +200 -0
  470. package/templates/native-go/backend/internal/helper/repair.go +132 -0
  471. package/templates/native-go/backend/internal/helper/repair_test.go +271 -0
  472. package/templates/native-go/backend/internal/helper/s1r_actor_acl_linux_test.go +303 -0
  473. package/templates/native-go/backend/internal/helper/s1r_actor_fixture_linux_test.go +184 -0
  474. package/templates/native-go/backend/internal/helper/s1r_actor_races_linux_test.go +231 -0
  475. package/templates/native-go/backend/internal/helper/s1r_fixture_contract_linux_test.go +18 -0
  476. package/templates/native-go/backend/internal/helper/server_linux.go +124 -0
  477. package/templates/native-go/backend/internal/helper/status.go +334 -0
  478. package/templates/native-go/backend/internal/helper/status_test.go +288 -0
  479. package/templates/native-go/backend/internal/helper/supervision.go +107 -0
  480. package/templates/native-go/backend/internal/helper/supervision_test.go +124 -0
  481. package/templates/native-go/backend/internal/helper/supervisor_frame.go +76 -0
  482. package/templates/native-go/backend/internal/helper/supervisor_frame_linux_test.go +69 -0
  483. package/templates/native-go/backend/internal/helper/supervisor_frame_test.go +107 -0
  484. package/templates/native-go/backend/internal/helper/supervisor_linux.go +363 -0
  485. package/templates/native-go/backend/internal/helper/supervisor_linux_test.go +913 -0
  486. package/templates/native-go/backend/internal/helper/supervisor_socket_eof_test.go +74 -0
  487. package/templates/native-go/backend/internal/helper/supervisor_socket_test.go +45 -0
  488. package/templates/native-go/backend/internal/helper/testdata/protocol2/create.json +23 -0
  489. package/templates/native-go/backend/internal/helper/testdata/protocol2/frames.json +67 -0
  490. package/templates/native-go/backend/internal/helper/testdata/protocol2/grant-store.json +52 -0
  491. package/templates/native-go/backend/internal/helper/testdata/protocol2/intent.json +20 -0
  492. package/templates/native-go/backend/internal/helper/testdata/protocol2/list.json +20 -0
  493. package/templates/native-go/backend/internal/helper/testdata/protocol2/publish.json +20 -0
  494. package/templates/native-go/backend/internal/helper/testdata/protocol2/read.json +22 -0
  495. package/templates/native-go/backend/internal/helper/testdata/protocol2/stat.json +22 -0
  496. package/templates/native-go/backend/internal/helper/testdata/protocol2/write-stream.json +22 -0
  497. package/templates/native-go/backend/internal/helper/unit_connection.go +75 -0
  498. package/templates/native-go/backend/internal/helper/unit_connection_linux_test.go +135 -0
  499. package/templates/native-go/backend/internal/helper/unit_connection_test.go +133 -0
  500. package/templates/native-go/backend/internal/helper/unit_frame_test.go +32 -0
  501. package/templates/native-go/backend/internal/helper/unit_linux.go +364 -0
  502. package/templates/native-go/backend/internal/helper/unit_linux_test.go +46 -0
  503. package/templates/native-go/backend/internal/helper/unit_mechanisms_linux_test.go +217 -0
  504. package/templates/native-go/backend/internal/helper/unit_padding_linux_test.go +178 -0
  505. package/templates/native-go/backend/internal/helper/unit_query_linux.go +111 -0
  506. package/templates/native-go/backend/internal/helper/unit_reload_linux_test.go +372 -0
  507. package/templates/native-go/backend/internal/helper/unit_reload_sequence_linux_test.go +232 -0
  508. package/templates/native-go/backend/internal/helper/write.go +77 -0
  509. package/templates/native-go/backend/internal/helper/write_admission.go +260 -0
  510. package/templates/native-go/backend/internal/helper/write_admission_test.go +135 -0
  511. package/templates/native-go/backend/internal/helper/write_cohort_linux_test.go +218 -0
  512. package/templates/native-go/backend/internal/helper/write_files_linux.go +202 -0
  513. package/templates/native-go/backend/internal/helper/write_files_linux_test.go +199 -0
  514. package/templates/native-go/backend/internal/helper/write_intent_linux.go +116 -0
  515. package/templates/native-go/backend/internal/helper/write_intent_linux_test.go +74 -0
  516. package/templates/native-go/backend/internal/helper/write_operation_linux.go +245 -0
  517. package/templates/native-go/backend/internal/helper/write_test.go +53 -0
  518. package/templates/native-go/dsm-package.yaml +58 -0
  519. package/templates/native-go/gitignore +1 -0
  520. package/templates/native-go/i18n/glossary.json +662 -0
  521. package/templates/native-go/i18n/messages/de.json +28 -0
  522. package/templates/native-go/i18n/messages/en.json +28 -0
  523. package/templates/native-go/i18n/messages/es.json +28 -0
  524. package/templates/native-go/i18n/messages/fr.json +28 -0
  525. package/templates/native-go/i18n/messages/it.json +28 -0
  526. package/templates/native-go/i18n/messages/ja.json +28 -0
  527. package/templates/native-go/i18n/messages/ko.json +28 -0
  528. package/templates/native-go/i18n/messages/zh-CN.json +28 -0
  529. package/templates/native-go/i18n/messages/zh-TW.json +28 -0
  530. package/templates/native-go/ui/app.css +35 -0
  531. package/templates/native-go/ui/app.js +101 -0
  532. package/templates/native-go-better-auth/backend/internal/app/identity.go +208 -0
  533. package/templates/native-go-better-auth/backend/internal/app/identity_test.go +113 -0
  534. package/templates/native-go-better-auth/node/app.mjs +72 -0
  535. package/templates/native-go-better-auth/node/build.mjs +4 -0
  536. package/templates/native-go-better-auth/node/package-lock.json +862 -0
  537. package/templates/native-go-better-auth/node/package.json +1 -0
  538. package/templates/native-go-better-auth/node/test/auth.test.mjs +31 -0
  539. package/templates/native-go-integration/backend/internal/app/identity_none.go +6 -0
  540. package/templates/native-go-integration/backend/internal/app/personal.go +203 -0
  541. package/templates/native-go-integration/backend/internal/app/personal_test.go +119 -0
  542. package/templates/native-go-root/backend/internal/app/root.go +107 -0
  543. package/templates/native-go-root/backend/internal/app/root_test.go +124 -0
  544. package/templates/native-go-root/root/whoami.sh +6 -0
  545. package/templates/native-go-vue/README.md +224 -0
  546. package/templates/native-go-vue/frontend/DESIGN.md +78 -0
  547. package/templates/native-go-vue/frontend/package-lock.json +2410 -0
  548. package/templates/native-go-vue/frontend/package.json +6 -0
  549. package/templates/native-go-vue/frontend/src/App.vue +159 -0
  550. package/templates/native-go-vue/frontend/src/context.ts +56 -0
  551. package/templates/native-go-vue/frontend/src/main.ts +29 -0
  552. package/templates/native-go-vue/frontend/src/nas/NasGrantSettings.vue +74 -0
  553. package/templates/native-go-vue/frontend/src/nas/NasPathPicker.vue +106 -0
  554. package/templates/native-go-vue/frontend/src/nas/NasUnavailable.vue +20 -0
  555. package/templates/native-go-vue/frontend/src/nas/i18n/de.json +74 -0
  556. package/templates/native-go-vue/frontend/src/nas/i18n/en.json +74 -0
  557. package/templates/native-go-vue/frontend/src/nas/i18n/es.json +74 -0
  558. package/templates/native-go-vue/frontend/src/nas/i18n/fr.json +74 -0
  559. package/templates/native-go-vue/frontend/src/nas/i18n/it.json +74 -0
  560. package/templates/native-go-vue/frontend/src/nas/i18n/ja.json +74 -0
  561. package/templates/native-go-vue/frontend/src/nas/i18n/ko.json +74 -0
  562. package/templates/native-go-vue/frontend/src/nas/i18n/zh-CN.json +74 -0
  563. package/templates/native-go-vue/frontend/src/nas/i18n/zh-TW.json +74 -0
  564. package/templates/native-go-vue/frontend/src/nas/i18n.ts +38 -0
  565. package/templates/native-go-vue/frontend/src/nas/mock-provider.ts +119 -0
  566. package/templates/native-go-vue/frontend/src/nas/provider.ts +59 -0
  567. package/templates/native-go-vue/frontend/src/nas/use-request.ts +27 -0
  568. package/templates/native-go-vue/frontend/src/style.css +31 -0
  569. package/templates/native-go-vue/frontend/test/apps.test.ts +190 -0
  570. package/templates/native-go-vue/frontend/test/nas-provider.test.ts +81 -0
  571. package/templates/native-go-vue/frontend/test/nas-request.test.ts +21 -0
  572. package/templates/native-go-vue/frontend/test/nas-ui.test.ts +261 -0
  573. package/templates/native-go-vue/frontend/tsconfig.json +1 -0
  574. package/templates/native-go-vue/frontend/vite.config.ts +10 -0
  575. package/templates/native-go-vue/gitignore +2 -0
  576. package/dist/attestation/app-package.d.ts +0 -86
  577. package/dist/attestation/app-package.js +0 -206
  578. package/dist/attestation/install-on-host.d.ts +0 -14
  579. package/dist/attestation/install-on-host.js +0 -52
  580. package/dist/attestation/keyring.d.ts +0 -21
  581. package/dist/attestation/keyring.js +0 -168
  582. package/dist/attestation/platform-service.d.ts +0 -70
  583. package/dist/attestation/platform-service.js +0 -250
  584. package/dist/build-spk/broker-glue.d.ts +0 -16
  585. package/dist/build-spk/broker-glue.js +0 -40
  586. package/dist/deploy/catalog-publish.d.ts +0 -3
  587. package/dist/deploy/catalog-publish.js +0 -7
  588. package/dist/doctor.d.ts +0 -22
  589. package/dist/doctor.js +0 -822
  590. package/dist/error-collector.d.ts +0 -2
  591. package/dist/error-collector.js +0 -46
  592. package/dist/host/broker-paths.d.ts +0 -1
  593. package/dist/host/broker-paths.js +0 -1
  594. package/dist/host/broker-upgrade-preflight.d.ts +0 -61
  595. package/dist/host/broker-upgrade-preflight.js +0 -156
  596. package/dist/host/digests.d.ts +0 -5
  597. package/dist/host/digests.js +0 -63
  598. package/dist/host/fake-nas.d.ts +0 -49
  599. package/dist/host/fake-nas.js +0 -193
  600. package/dist/mock-broker/bootstrap.d.ts +0 -2
  601. package/dist/mock-broker/bootstrap.js +0 -8
  602. package/dist/mock-broker/files.d.ts +0 -60
  603. package/dist/mock-broker/files.js +0 -408
  604. package/dist/mock-broker/oidc.d.ts +0 -31
  605. package/dist/mock-broker/oidc.js +0 -161
  606. package/dist/mock-broker/path.d.ts +0 -9
  607. package/dist/mock-broker/path.js +0 -50
  608. package/dist/mock-broker/server.d.ts +0 -19
  609. package/dist/mock-broker/server.js +0 -350
  610. package/dist/publish/build-ledger.d.ts +0 -22
  611. package/dist/publish/build-ledger.js +0 -26
  612. package/dist/publish/community-path.d.ts +0 -6
  613. package/dist/publish/community-path.js +0 -41
  614. package/dist/publish/curated-release.d.ts +0 -78
  615. package/dist/publish/curated-release.js +0 -883
  616. package/dist/publish/file-build-ledger.d.ts +0 -18
  617. package/dist/publish/file-build-ledger.js +0 -268
  618. package/dist/publish/github-pr.d.ts +0 -25
  619. package/dist/publish/github-pr.js +0 -85
  620. package/dist/publish/github-repo.d.ts +0 -8
  621. package/dist/publish/github-repo.js +0 -21
  622. package/dist/publish/platform-service-release.d.ts +0 -60
  623. package/dist/publish/platform-service-release.js +0 -333
  624. package/dist/publish/preflight.d.ts +0 -24
  625. package/dist/publish/preflight.js +0 -138
  626. package/dist/publish/publish.d.ts +0 -27
  627. package/dist/publish/publish.js +0 -136
  628. package/dist/publish/sync-definition.d.ts +0 -4
  629. package/dist/publish/sync-definition.js +0 -48
  630. package/dist/release-bin.d.ts +0 -2
  631. package/dist/release-bin.js +0 -23
  632. package/dist/templates/hello-web/html/sdk.js +0 -68
  633. package/dist/templates/hello-web-page/html/sdk.js +0 -68
  634. package/dist/templates/native/synology-app.yaml +0 -7
  635. package/dist/test-host.d.ts +0 -15
  636. package/dist/test-host.js +0 -37
  637. package/templates/hello-web/html/sdk.js +0 -68
  638. package/templates/hello-web-page/html/sdk.js +0 -68
  639. package/templates/native/synology-app.yaml +0 -7
  640. /package/dist/templates/{native → binary}/native.yaml +0 -0
  641. /package/templates/{native → binary}/native.yaml +0 -0
@@ -1,408 +0,0 @@
1
- import { copyFileSync, createReadStream, existsSync, mkdirSync, readdirSync, renameSync, rmSync, statSync, writeFileSync, } from "node:fs";
2
- import { dirname, join, posix } from "node:path";
3
- import { normalizeLogicalPath, parentAndName, PathValidationError } from "./path.js";
4
- export class FileStoreError extends Error {
5
- code;
6
- status;
7
- constructor(code, status, message) {
8
- super(message);
9
- this.name = "FileStoreError";
10
- this.code = code;
11
- this.status = status;
12
- }
13
- }
14
- const ERROR_MESSAGES = {
15
- NOT_FOUND: "找不到這個路徑。",
16
- CONFLICT: "目標已存在。",
17
- INVALID_PATH: "路徑不合法。",
18
- TRASH_UNAVAILABLE: "目標沒有可用的 trash/recycle bin,檔案未被刪除。",
19
- };
20
- function notFound() {
21
- throw new FileStoreError("NOT_FOUND", 404, ERROR_MESSAGES.NOT_FOUND);
22
- }
23
- function conflict() {
24
- throw new FileStoreError("CONFLICT", 409, ERROR_MESSAGES.CONFLICT);
25
- }
26
- function invalidPath() {
27
- throw new FileStoreError("INVALID_PATH", 400, ERROR_MESSAGES.INVALID_PATH);
28
- }
29
- function trashUnavailable() {
30
- throw new FileStoreError("TRASH_UNAVAILABLE", 409, ERROR_MESSAGES.TRASH_UNAVAILABLE);
31
- }
32
- function seedDefaultTree() {
33
- const root = { type: "directory", children: new Map() };
34
- const home = ensureDirNode(root, "/home");
35
- home.children.set("docs", { type: "directory", children: new Map() });
36
- home.children.set("notes", { type: "directory", children: new Map() });
37
- home.children.set("readme.txt", {
38
- type: "file",
39
- content: Buffer.alloc(42),
40
- });
41
- return root;
42
- }
43
- function ensureDirNode(root, path) {
44
- let node = root;
45
- for (const part of path.split("/").filter(Boolean)) {
46
- node.children ??= new Map();
47
- let child = node.children.get(part);
48
- if (!child) {
49
- child = { type: "directory", children: new Map() };
50
- node.children.set(part, child);
51
- }
52
- if (child.type !== "directory") {
53
- conflict();
54
- }
55
- node = child;
56
- }
57
- return node;
58
- }
59
- function getNode(root, path) {
60
- if (path === "/") {
61
- return root;
62
- }
63
- let node = root;
64
- for (const part of path.split("/").filter(Boolean)) {
65
- node = node?.children?.get(part);
66
- if (!node) {
67
- return undefined;
68
- }
69
- }
70
- return node;
71
- }
72
- function toItem(path, node) {
73
- const name = path.split("/").filter(Boolean).at(-1) ?? path;
74
- if (node.type === "directory") {
75
- return { name, type: "directory", path };
76
- }
77
- return {
78
- name,
79
- type: "file",
80
- path,
81
- size: node.content?.length ?? 0,
82
- };
83
- }
84
- function mapLogicalToAbsolute(logicalPath, filesRoot) {
85
- const trimmed = logicalPath.replace(/\\/g, "/").replace(/\/+$/, "") || "/";
86
- if (trimmed === "/") {
87
- return filesRoot;
88
- }
89
- const normalized = normalizeLogicalPath(logicalPath);
90
- const relative = normalized.replace(/^\//, "");
91
- return join(filesRoot, relative);
92
- }
93
- export class MockFileStore {
94
- filesRoot;
95
- recycleBinDisabled;
96
- treeRoot;
97
- constructor(options = {}) {
98
- this.filesRoot = options.filesRoot;
99
- this.recycleBinDisabled = options.recycleBinDisabled ?? false;
100
- this.treeRoot = seedDefaultTree();
101
- }
102
- list(rawPath) {
103
- const path = this.resolveListPath(rawPath);
104
- if (this.filesRoot) {
105
- return this.listMapped(path);
106
- }
107
- return this.listMemory(path);
108
- }
109
- stat(rawPath) {
110
- const path = this.resolveOperationPath(rawPath);
111
- if (this.filesRoot) {
112
- return this.statMapped(path);
113
- }
114
- return this.statMemory(path);
115
- }
116
- download(rawPath, range) {
117
- const path = this.resolveOperationPath(rawPath);
118
- if (this.filesRoot) {
119
- return this.downloadMapped(path, range);
120
- }
121
- return this.downloadMemory(path, range);
122
- }
123
- upload(rawPath, body, overwrite = false) {
124
- const path = this.resolveOperationPath(rawPath);
125
- if (this.filesRoot) {
126
- this.uploadMapped(path, body, overwrite);
127
- return;
128
- }
129
- this.uploadMemory(path, body, overwrite);
130
- }
131
- mkdir(rawPath) {
132
- const path = this.resolveOperationPath(rawPath);
133
- if (this.filesRoot) {
134
- this.mkdirMapped(path);
135
- return;
136
- }
137
- this.mkdirMemory(path);
138
- }
139
- rename(rawPath, rawTo, overwrite = false) {
140
- this.move(rawPath, rawTo, overwrite);
141
- }
142
- move(rawPath, rawTo, overwrite = false) {
143
- const path = this.resolveOperationPath(rawPath);
144
- const to = this.resolveOperationPath(rawTo);
145
- if (this.filesRoot) {
146
- this.moveMapped(path, to, overwrite);
147
- return;
148
- }
149
- this.moveMemory(path, to, overwrite);
150
- }
151
- copy(rawPath, rawTo, overwrite = false) {
152
- const path = this.resolveOperationPath(rawPath);
153
- const to = this.resolveOperationPath(rawTo);
154
- if (this.filesRoot) {
155
- this.copyMapped(path, to, overwrite);
156
- return;
157
- }
158
- this.copyMemory(path, to, overwrite);
159
- }
160
- trash(rawPath) {
161
- if (this.recycleBinDisabled) {
162
- trashUnavailable();
163
- }
164
- const path = this.resolveOperationPath(rawPath);
165
- if (this.filesRoot) {
166
- this.trashMapped(path);
167
- return;
168
- }
169
- this.trashMemory(path);
170
- }
171
- resolveListPath(rawPath) {
172
- const trimmed = rawPath.trim();
173
- if (trimmed === "/" || trimmed === "") {
174
- return "/";
175
- }
176
- try {
177
- return normalizeLogicalPath(trimmed);
178
- }
179
- catch (error) {
180
- if (error instanceof PathValidationError) {
181
- invalidPath();
182
- }
183
- throw error;
184
- }
185
- }
186
- resolveOperationPath(rawPath) {
187
- try {
188
- return normalizeLogicalPath(rawPath);
189
- }
190
- catch (error) {
191
- if (error instanceof PathValidationError) {
192
- invalidPath();
193
- }
194
- throw error;
195
- }
196
- }
197
- listMemory(path) {
198
- const node = getNode(this.treeRoot, path);
199
- if (!node || node.type !== "directory") {
200
- return [];
201
- }
202
- const items = [];
203
- for (const [name, child] of node.children ?? []) {
204
- items.push(toItem(posix.join(path, name), child));
205
- }
206
- return items;
207
- }
208
- statMemory(path) {
209
- const node = getNode(this.treeRoot, path);
210
- if (!node) {
211
- notFound();
212
- }
213
- return toItem(path, node);
214
- }
215
- downloadMemory(path, range) {
216
- const node = getNode(this.treeRoot, path);
217
- if (!node || node.type !== "file") {
218
- notFound();
219
- }
220
- const original = node.content ?? Buffer.alloc(0);
221
- if (!range) {
222
- return { buffer: original, size: original.length, totalSize: original.length };
223
- }
224
- const end = range.end ?? original.length - 1;
225
- const slice = original.subarray(range.start, end + 1);
226
- return { buffer: slice, size: slice.length, totalSize: original.length };
227
- }
228
- uploadMemory(path, body, overwrite) {
229
- if (getNode(this.treeRoot, path) && !overwrite) {
230
- conflict();
231
- }
232
- const { parent, name } = parentAndName(path);
233
- const dir = ensureDirNode(this.treeRoot, parent);
234
- dir.children ??= new Map();
235
- dir.children.set(name, { type: "file", content: Buffer.from(body) });
236
- }
237
- mkdirMemory(path) {
238
- if (getNode(this.treeRoot, path)) {
239
- conflict();
240
- }
241
- ensureDirNode(this.treeRoot, path);
242
- }
243
- moveMemory(path, to, overwrite) {
244
- const node = getNode(this.treeRoot, path);
245
- if (!node) {
246
- notFound();
247
- }
248
- if (getNode(this.treeRoot, to) && !overwrite) {
249
- conflict();
250
- }
251
- const from = parentAndName(path);
252
- const dest = parentAndName(to);
253
- const fromDir = getNode(this.treeRoot, from.parent);
254
- if (!fromDir?.children?.has(from.name)) {
255
- notFound();
256
- }
257
- fromDir.children.delete(from.name);
258
- const toDir = ensureDirNode(this.treeRoot, dest.parent);
259
- toDir.children ??= new Map();
260
- toDir.children.set(dest.name, node);
261
- }
262
- copyMemory(path, to, overwrite) {
263
- const node = getNode(this.treeRoot, path);
264
- if (!node) {
265
- notFound();
266
- }
267
- if (getNode(this.treeRoot, to) && !overwrite) {
268
- conflict();
269
- }
270
- const dest = parentAndName(to);
271
- const toDir = ensureDirNode(this.treeRoot, dest.parent);
272
- toDir.children ??= new Map();
273
- toDir.children.set(dest.name, cloneNode(node));
274
- }
275
- trashMemory(path) {
276
- const node = getNode(this.treeRoot, path);
277
- if (!node) {
278
- notFound();
279
- }
280
- const { parent, name } = parentAndName(path);
281
- const parentNode = getNode(this.treeRoot, parent);
282
- parentNode?.children?.delete(name);
283
- }
284
- listMapped(path) {
285
- const absolute = mapLogicalToAbsolute(path, this.filesRoot);
286
- let entries;
287
- try {
288
- entries = readdirSync(absolute);
289
- }
290
- catch {
291
- return [];
292
- }
293
- const normalized = path.replace(/\/+$/, "") || "/";
294
- return entries.map((name) => {
295
- const childAbsolute = join(absolute, name);
296
- const childLogical = posix.join(normalized === "/" ? "" : normalized, name);
297
- const displayPath = childLogical.startsWith("/") ? childLogical : `/${childLogical}`;
298
- const stat = statSync(childAbsolute);
299
- if (stat.isDirectory()) {
300
- return { name, type: "directory", path: displayPath };
301
- }
302
- return {
303
- name,
304
- type: "file",
305
- path: displayPath,
306
- size: stat.size,
307
- };
308
- });
309
- }
310
- statMapped(path) {
311
- const absolute = mapLogicalToAbsolute(path, this.filesRoot);
312
- if (!existsSync(absolute)) {
313
- notFound();
314
- }
315
- const stat = statSync(absolute);
316
- const name = path.split("/").filter(Boolean).at(-1) ?? path;
317
- if (stat.isDirectory()) {
318
- return { name, type: "directory", path };
319
- }
320
- return { name, type: "file", path, size: stat.size };
321
- }
322
- downloadMapped(path, range) {
323
- const absolute = mapLogicalToAbsolute(path, this.filesRoot);
324
- if (!existsSync(absolute)) {
325
- notFound();
326
- }
327
- const stat = statSync(absolute);
328
- if (!stat.isFile()) {
329
- notFound();
330
- }
331
- const totalSize = stat.size;
332
- if (!range) {
333
- return {
334
- stream: createReadStream(absolute),
335
- size: totalSize,
336
- totalSize,
337
- };
338
- }
339
- const end = range.end ?? totalSize - 1;
340
- const size = end - range.start + 1;
341
- return {
342
- stream: createReadStream(absolute, { start: range.start, end }),
343
- size,
344
- totalSize,
345
- };
346
- }
347
- uploadMapped(path, body, overwrite) {
348
- const absolute = mapLogicalToAbsolute(path, this.filesRoot);
349
- if (existsSync(absolute) && !overwrite) {
350
- conflict();
351
- }
352
- mkdirSync(dirname(absolute), { recursive: true });
353
- writeFileSync(absolute, body);
354
- }
355
- mkdirMapped(path) {
356
- const absolute = mapLogicalToAbsolute(path, this.filesRoot);
357
- if (existsSync(absolute)) {
358
- conflict();
359
- }
360
- mkdirSync(absolute, { recursive: true });
361
- }
362
- moveMapped(path, to, overwrite) {
363
- const fromAbsolute = mapLogicalToAbsolute(path, this.filesRoot);
364
- const toAbsolute = mapLogicalToAbsolute(to, this.filesRoot);
365
- if (!existsSync(fromAbsolute)) {
366
- notFound();
367
- }
368
- if (existsSync(toAbsolute) && !overwrite) {
369
- conflict();
370
- }
371
- mkdirSync(dirname(toAbsolute), { recursive: true });
372
- renameSync(fromAbsolute, toAbsolute);
373
- }
374
- copyMapped(path, to, overwrite) {
375
- const fromAbsolute = mapLogicalToAbsolute(path, this.filesRoot);
376
- const toAbsolute = mapLogicalToAbsolute(to, this.filesRoot);
377
- if (!existsSync(fromAbsolute)) {
378
- notFound();
379
- }
380
- if (existsSync(toAbsolute) && !overwrite) {
381
- conflict();
382
- }
383
- mkdirSync(dirname(toAbsolute), { recursive: true });
384
- copyFileSync(fromAbsolute, toAbsolute);
385
- }
386
- trashMapped(path) {
387
- const absolute = mapLogicalToAbsolute(path, this.filesRoot);
388
- if (!existsSync(absolute)) {
389
- notFound();
390
- }
391
- rmSync(absolute, { recursive: true, force: true });
392
- }
393
- }
394
- function cloneNode(node) {
395
- if (node.type === "file") {
396
- return { type: "file", content: node.content ? Buffer.from(node.content) : Buffer.alloc(0) };
397
- }
398
- const children = new Map();
399
- for (const [name, child] of node.children ?? []) {
400
- children.set(name, cloneNode(child));
401
- }
402
- return { type: "directory", children };
403
- }
404
- /** @deprecated Use MockFileStore.list instead */
405
- export function listFakeFiles(path, filesRoot) {
406
- const store = new MockFileStore({ filesRoot });
407
- return store.list(path);
408
- }
@@ -1,31 +0,0 @@
1
- import type { IncomingMessage, ServerResponse } from "node:http";
2
- export declare const MOCK_OIDC_CLIENT_SECRET = "mock-oidc-secret";
3
- export declare const MOCK_OIDC_REDIRECT_PATH = "/api/auth/sso_callback";
4
- export declare const MOCK_OIDC_KID_PREFIX = "oidc-";
5
- export interface MockOidcUser {
6
- subject: string;
7
- username: string;
8
- displayName: string;
9
- }
10
- export interface MockOidcOptions {
11
- clientId?: string;
12
- clientSecret?: string;
13
- redirectUri?: string;
14
- }
15
- interface AuthCode {
16
- code: string;
17
- clientId: string;
18
- redirectUri: string;
19
- consumed: boolean;
20
- }
21
- export interface MockOidcContext {
22
- packageId: string;
23
- clientId: string;
24
- clientSecret: string;
25
- redirectUri: string;
26
- user: MockOidcUser;
27
- codes: Map<string, AuthCode>;
28
- }
29
- export declare function createMockOidcContext(packageId: string, user: MockOidcUser, options?: MockOidcOptions): MockOidcContext;
30
- export declare function handleMockOidc(req: IncomingMessage, res: ServerResponse, url: URL, ctx: MockOidcContext): Promise<boolean>;
31
- export {};
@@ -1,161 +0,0 @@
1
- import { createHash, randomBytes, randomUUID } from "node:crypto";
2
- import { exportJWK, generateKeyPair, SignJWT } from "jose";
3
- export const MOCK_OIDC_CLIENT_SECRET = "mock-oidc-secret";
4
- export const MOCK_OIDC_REDIRECT_PATH = "/api/auth/sso_callback";
5
- export const MOCK_OIDC_KID_PREFIX = "oidc-";
6
- let oidcKeyPromise = null;
7
- async function oidcKeys() {
8
- if (!oidcKeyPromise) {
9
- oidcKeyPromise = generateKeyPair("RS256");
10
- }
11
- return oidcKeyPromise;
12
- }
13
- function sendJson(res, status, body) {
14
- res.statusCode = status;
15
- res.setHeader("content-type", "application/json; charset=utf-8");
16
- res.end(JSON.stringify(body));
17
- }
18
- function sendOAuthError(res, status, error) {
19
- sendJson(res, status, { error });
20
- }
21
- function secretsEqual(left, right) {
22
- return left.length === right.length && left === right;
23
- }
24
- function issuerFromRequest(req) {
25
- const host = req.headers.host ?? "127.0.0.1";
26
- return `http://${host}/oidc`;
27
- }
28
- function discovery(issuer) {
29
- const base = issuer.replace(/\/$/, "");
30
- return {
31
- issuer: base,
32
- authorization_endpoint: `${base}/authorize`,
33
- token_endpoint: `${base}/token`,
34
- jwks_uri: `${base}/jwks`,
35
- response_types_supported: ["code"],
36
- grant_types_supported: ["authorization_code"],
37
- subject_types_supported: ["public"],
38
- id_token_signing_alg_values_supported: ["RS256"],
39
- token_endpoint_auth_methods_supported: ["client_secret_post"],
40
- scopes_supported: ["openid"],
41
- claims_supported: ["iss", "sub", "aud", "exp", "iat", "preferred_username", "name"],
42
- };
43
- }
44
- async function oidcKid() {
45
- const { publicKey } = await oidcKeys();
46
- const jwk = await exportJWK(publicKey);
47
- return `${MOCK_OIDC_KID_PREFIX}${createHash("sha256")
48
- .update(JSON.stringify(jwk))
49
- .digest("hex")
50
- .slice(0, 16)}`;
51
- }
52
- async function issueIdToken(issuer, clientId, user) {
53
- const { privateKey } = await oidcKeys();
54
- const kid = await oidcKid();
55
- return new SignJWT({
56
- preferred_username: user.username,
57
- name: user.username,
58
- mock: true,
59
- })
60
- .setProtectedHeader({ alg: "RS256", kid })
61
- .setIssuer(issuer)
62
- .setAudience(clientId)
63
- .setSubject(user.subject)
64
- .setIssuedAt()
65
- .setExpirationTime("15m")
66
- .sign(privateKey);
67
- }
68
- function readBody(req) {
69
- return new Promise((resolve, reject) => {
70
- const chunks = [];
71
- req.on("data", (chunk) => chunks.push(Buffer.from(chunk)));
72
- req.on("end", () => resolve(Buffer.concat(chunks).toString("utf8")));
73
- req.on("error", reject);
74
- });
75
- }
76
- export function createMockOidcContext(packageId, user, options) {
77
- return {
78
- packageId,
79
- clientId: options?.clientId ?? packageId,
80
- clientSecret: options?.clientSecret ?? MOCK_OIDC_CLIENT_SECRET,
81
- redirectUri: options?.redirectUri ?? `http://127.0.0.1${MOCK_OIDC_REDIRECT_PATH}`,
82
- user,
83
- codes: new Map(),
84
- };
85
- }
86
- export async function handleMockOidc(req, res, url, ctx) {
87
- const pathname = (url.pathname.replace(/\/$/, "") || "/");
88
- if (!pathname.startsWith("/oidc")) {
89
- return false;
90
- }
91
- const issuer = issuerFromRequest(req);
92
- if (req.method === "GET" && pathname === "/oidc/.well-known/openid-configuration") {
93
- sendJson(res, 200, discovery(issuer));
94
- return true;
95
- }
96
- if (req.method === "GET" && pathname === "/oidc/jwks") {
97
- const { publicKey } = await oidcKeys();
98
- const jwk = await exportJWK(publicKey);
99
- jwk.alg = "RS256";
100
- jwk.use = "sig";
101
- jwk.kid = await oidcKid();
102
- sendJson(res, 200, { keys: [jwk] });
103
- return true;
104
- }
105
- if (req.method === "GET" && pathname === "/oidc/authorize") {
106
- const clientId = url.searchParams.get("client_id") ?? "";
107
- const redirectUri = url.searchParams.get("redirect_uri") ?? "";
108
- const responseType = url.searchParams.get("response_type") ?? "";
109
- const state = url.searchParams.get("state");
110
- if (clientId !== ctx.clientId || redirectUri !== ctx.redirectUri) {
111
- sendOAuthError(res, 400, "invalid_request");
112
- return true;
113
- }
114
- if (responseType !== "code") {
115
- sendOAuthError(res, 400, "unsupported_response_type");
116
- return true;
117
- }
118
- const code = randomUUID();
119
- ctx.codes.set(code, { code, clientId, redirectUri, consumed: false });
120
- const location = new URL(redirectUri);
121
- location.searchParams.set("code", code);
122
- if (state) {
123
- location.searchParams.set("state", state);
124
- }
125
- res.statusCode = 302;
126
- res.setHeader("location", location.toString());
127
- res.end();
128
- return true;
129
- }
130
- if (req.method === "POST" && pathname === "/oidc/token") {
131
- const text = await readBody(req);
132
- const body = Object.fromEntries(new URLSearchParams(text).entries());
133
- if (body.client_id !== ctx.clientId || !secretsEqual(body.client_secret ?? "", ctx.clientSecret)) {
134
- sendOAuthError(res, 401, "invalid_client");
135
- return true;
136
- }
137
- if (body.grant_type !== "authorization_code") {
138
- sendOAuthError(res, 400, "unsupported_grant_type");
139
- return true;
140
- }
141
- const record = ctx.codes.get(body.code ?? "");
142
- if (!record ||
143
- record.consumed ||
144
- record.clientId !== body.client_id ||
145
- record.redirectUri !== (body.redirect_uri ?? "")) {
146
- sendOAuthError(res, 400, "invalid_grant");
147
- return true;
148
- }
149
- record.consumed = true;
150
- const idToken = await issueIdToken(issuer, ctx.clientId, ctx.user);
151
- sendJson(res, 200, {
152
- id_token: idToken,
153
- access_token: randomBytes(24).toString("base64url"),
154
- token_type: "Bearer",
155
- expires_in: 15 * 60,
156
- });
157
- return true;
158
- }
159
- sendOAuthError(res, 404, "invalid_request");
160
- return true;
161
- }
@@ -1,9 +0,0 @@
1
- export declare class PathValidationError extends Error {
2
- readonly code: "INVALID_PATH";
3
- constructor();
4
- }
5
- export declare function normalizeLogicalPath(raw: string): string;
6
- export declare function parentAndName(logicalPath: string): {
7
- parent: string;
8
- name: string;
9
- };
@@ -1,50 +0,0 @@
1
- export class PathValidationError extends Error {
2
- code = "INVALID_PATH";
3
- constructor() {
4
- super("路徑不合法。");
5
- this.name = "PathValidationError";
6
- }
7
- }
8
- const MAX_PATH_LENGTH = 4096;
9
- export function normalizeLogicalPath(raw) {
10
- if (typeof raw !== "string" || raw.length === 0) {
11
- throw new PathValidationError();
12
- }
13
- if (raw.includes("\0") || raw.length > MAX_PATH_LENGTH) {
14
- throw new PathValidationError();
15
- }
16
- const unified = raw.replace(/\\/g, "/");
17
- if (!unified.startsWith("/")) {
18
- throw new PathValidationError();
19
- }
20
- if (/^\/volume\d+/i.test(unified) ||
21
- unified.startsWith("/volumeUSB") ||
22
- unified.startsWith("/volumeSATA")) {
23
- throw new PathValidationError();
24
- }
25
- const parts = [];
26
- for (const segment of unified.split("/")) {
27
- if (segment === "" || segment === ".") {
28
- continue;
29
- }
30
- if (segment === "..") {
31
- throw new PathValidationError();
32
- }
33
- parts.push(segment);
34
- }
35
- if (parts.length === 0) {
36
- throw new PathValidationError();
37
- }
38
- return `/${parts.join("/")}`;
39
- }
40
- export function parentAndName(logicalPath) {
41
- const normalized = normalizeLogicalPath(logicalPath);
42
- const idx = normalized.lastIndexOf("/");
43
- if (idx <= 0) {
44
- throw new PathValidationError();
45
- }
46
- return {
47
- parent: normalized.slice(0, idx) || "/",
48
- name: normalized.slice(idx + 1),
49
- };
50
- }
@@ -1,19 +0,0 @@
1
- import { type Server } from "node:http";
2
- import type { SynologyUser } from "@synopackageland/dev-sdk/node";
3
- import { type MockOidcOptions } from "./oidc.js";
4
- export declare const FAKE_USER: SynologyUser;
5
- export interface MockBrokerOptions {
6
- packageId: string;
7
- filesRoot?: string;
8
- recycleBinDisabled?: boolean;
9
- port?: number;
10
- oidc?: MockOidcOptions;
11
- }
12
- export interface MockBrokerHandle {
13
- baseUrl: string;
14
- jwksUrl: string;
15
- packageId: string;
16
- server: Server;
17
- close(): Promise<void>;
18
- }
19
- export declare function startMockBroker(options: MockBrokerOptions): Promise<MockBrokerHandle>;