@simplysm/sd-claude 14.0.53 → 14.0.55

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 (328) hide show
  1. package/claude/references/sd-simplysm-v14/angular/README.md +164 -291
  2. package/claude/references/sd-simplysm-v14/angular/_api-index.md +250 -0
  3. package/claude/references/sd-simplysm-v14/angular/bootstrap/provide-sd-angular.md +2 -0
  4. package/claude/references/sd-simplysm-v14/angular/bootstrap/sd-angular-config-provider.md +2 -0
  5. package/claude/references/sd-simplysm-v14/angular/directives/sd-command-directive.md +2 -0
  6. package/claude/references/sd-simplysm-v14/angular/directives/sd-events.md +2 -0
  7. package/claude/references/sd-simplysm-v14/angular/directives/sd-intersection-directive.md +2 -0
  8. package/claude/references/sd-simplysm-v14/angular/directives/sd-invalid.md +2 -0
  9. package/claude/references/sd-simplysm-v14/angular/directives/sd-resize-directive.md +2 -0
  10. package/claude/references/sd-simplysm-v14/angular/directives/sd-ripple.md +2 -0
  11. package/claude/references/sd-simplysm-v14/angular/directives/sd-router-link.md +2 -0
  12. package/claude/references/sd-simplysm-v14/angular/directives/sd-show-effect.md +2 -0
  13. package/claude/references/sd-simplysm-v14/angular/directives/sd-typed-template.md +2 -0
  14. package/claude/references/sd-simplysm-v14/angular/features/sd-address-search-modal.md +2 -0
  15. package/claude/references/sd-simplysm-v14/angular/features/sd-permission-table.md +2 -0
  16. package/claude/references/sd-simplysm-v14/angular/features/sd-shared-data-components.md +2 -0
  17. package/claude/references/sd-simplysm-v14/angular/features/sd-tiptap-editor.md +2 -0
  18. package/claude/references/sd-simplysm-v14/angular/pipes/format-pipe.md +2 -0
  19. package/claude/references/sd-simplysm-v14/angular/plugins/sd-global-error-handler.md +2 -0
  20. package/claude/references/sd-simplysm-v14/angular/plugins/sd-option-event-plugin.md +2 -0
  21. package/claude/references/sd-simplysm-v14/angular/provider-types/sd-menu.md +2 -0
  22. package/claude/references/sd-simplysm-v14/angular/provider-types/sd-modal-content-def.md +9 -9
  23. package/claude/references/sd-simplysm-v14/angular/provider-types/sd-toast-content-def.md +2 -0
  24. package/claude/references/sd-simplysm-v14/angular/provider-types/shared-data-base.md +2 -0
  25. package/claude/references/sd-simplysm-v14/angular/providers/sd-activated-modal-provider.md +2 -0
  26. package/claude/references/sd-simplysm-v14/angular/providers/sd-app-structure-provider.md +2 -0
  27. package/claude/references/sd-simplysm-v14/angular/providers/sd-busy-provider.md +2 -0
  28. package/claude/references/sd-simplysm-v14/angular/providers/sd-file-dialog-provider.md +2 -0
  29. package/claude/references/sd-simplysm-v14/angular/providers/sd-local-storage-provider.md +2 -0
  30. package/claude/references/sd-simplysm-v14/angular/providers/sd-modal-provider.md +2 -0
  31. package/claude/references/sd-simplysm-v14/angular/providers/sd-navigate-window-provider.md +2 -0
  32. package/claude/references/sd-simplysm-v14/angular/providers/sd-print-provider.md +2 -0
  33. package/claude/references/sd-simplysm-v14/angular/providers/sd-service-client-factory-provider.md +2 -0
  34. package/claude/references/sd-simplysm-v14/angular/providers/sd-shared-data-provider.md +2 -0
  35. package/claude/references/sd-simplysm-v14/angular/providers/sd-system-config-provider.md +2 -0
  36. package/claude/references/sd-simplysm-v14/angular/providers/sd-system-log-provider.md +2 -0
  37. package/claude/references/sd-simplysm-v14/angular/providers/sd-theme-provider.md +2 -0
  38. package/claude/references/sd-simplysm-v14/angular/providers/sd-toast-provider.md +2 -0
  39. package/claude/references/sd-simplysm-v14/angular/styling/classes.md +2 -0
  40. package/claude/references/sd-simplysm-v14/angular/styling/mixins.md +2 -0
  41. package/claude/references/sd-simplysm-v14/angular/styling/themes.md +2 -0
  42. package/claude/references/sd-simplysm-v14/angular/styling/variables.md +2 -0
  43. package/claude/references/sd-simplysm-v14/angular/type-utilities/directive-input-signals.md +2 -0
  44. package/claude/references/sd-simplysm-v14/angular/ui-data/sd-base-container.md +141 -0
  45. package/claude/references/sd-simplysm-v14/angular/ui-data/sd-crud-detail.md +273 -0
  46. package/claude/references/sd-simplysm-v14/angular/ui-data/sd-crud-list.md +623 -0
  47. package/claude/references/sd-simplysm-v14/angular/ui-data/sd-list.md +2 -0
  48. package/claude/references/sd-simplysm-v14/angular/ui-data/sd-sheet.md +34 -39
  49. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-additional-button.md +2 -0
  50. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-anchor.md +2 -7
  51. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-button.md +2 -11
  52. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-checkbox-group.md +2 -0
  53. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-checkbox.md +2 -4
  54. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-date-range-picker.md +2 -0
  55. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-form.md +2 -7
  56. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-modal-select-button.md +7 -7
  57. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-numpad.md +2 -0
  58. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-range.md +2 -0
  59. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-select.md +2 -0
  60. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-shared-data-select.md +2 -4
  61. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-state-preset.md +2 -0
  62. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-switch.md +2 -0
  63. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-textarea.md +2 -0
  64. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-textfield.md +2 -8
  65. package/claude/references/sd-simplysm-v14/angular/ui-layout/sd-dock-container.md +2 -7
  66. package/claude/references/sd-simplysm-v14/angular/ui-layout/sd-dock.md +2 -6
  67. package/claude/references/sd-simplysm-v14/angular/ui-layout/sd-gap.md +2 -0
  68. package/claude/references/sd-simplysm-v14/angular/ui-layout/sd-kanban-board.md +2 -0
  69. package/claude/references/sd-simplysm-v14/angular/ui-layout/sd-kanban-lane.md +2 -0
  70. package/claude/references/sd-simplysm-v14/angular/ui-layout/sd-kanban.md +2 -0
  71. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-collapse.md +2 -0
  72. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-pagination.md +2 -0
  73. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-sidebar-container.md +2 -0
  74. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-sidebar-menu.md +2 -0
  75. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-sidebar-user.md +2 -0
  76. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-tab.md +2 -0
  77. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-topbar-container.md +2 -9
  78. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-topbar-menu.md +2 -0
  79. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-topbar-user.md +2 -0
  80. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-topbar.md +2 -7
  81. package/claude/references/sd-simplysm-v14/angular/ui-overlay/sd-busy-container.md +2 -5
  82. package/claude/references/sd-simplysm-v14/angular/ui-overlay/sd-confirm-modal.md +2 -0
  83. package/claude/references/sd-simplysm-v14/angular/ui-overlay/sd-dropdown.md +2 -0
  84. package/claude/references/sd-simplysm-v14/angular/ui-overlay/sd-modal.md +2 -0
  85. package/claude/references/sd-simplysm-v14/angular/ui-overlay/sd-prompt-modal.md +2 -0
  86. package/claude/references/sd-simplysm-v14/angular/ui-overlay/sd-toast.md +2 -0
  87. package/claude/references/sd-simplysm-v14/angular/ui-visual/sd-barcode.md +2 -0
  88. package/claude/references/sd-simplysm-v14/angular/ui-visual/sd-calendar.md +2 -0
  89. package/claude/references/sd-simplysm-v14/angular/ui-visual/sd-echarts.md +2 -0
  90. package/claude/references/sd-simplysm-v14/angular/ui-visual/sd-label.md +2 -0
  91. package/claude/references/sd-simplysm-v14/angular/ui-visual/sd-note.md +2 -0
  92. package/claude/references/sd-simplysm-v14/angular/ui-visual/sd-progress.md +2 -0
  93. package/claude/references/sd-simplysm-v14/angular/utils/inject-routing-signals.md +3 -16
  94. package/claude/references/sd-simplysm-v14/angular/utils/inject-sd-system-config-resource.md +2 -0
  95. package/claude/references/sd-simplysm-v14/angular/utils/mark.md +2 -5
  96. package/claude/references/sd-simplysm-v14/angular/utils/selection-managers.md +3 -1
  97. package/claude/references/sd-simplysm-v14/angular/utils/set-safe-style.md +2 -0
  98. package/claude/references/sd-simplysm-v14/angular/utils/setup-functions.md +2 -4
  99. package/claude/references/sd-simplysm-v14/capacitor-plugin-auto-update/README.md +16 -18
  100. package/claude/references/sd-simplysm-v14/capacitor-plugin-auto-update/_api-index.md +18 -0
  101. package/claude/references/sd-simplysm-v14/capacitor-plugin-auto-update/apk-installer/apk-installer.md +1 -1
  102. package/claude/references/sd-simplysm-v14/capacitor-plugin-auto-update/auto-update/auto-update.md +1 -1
  103. package/claude/references/sd-simplysm-v14/capacitor-plugin-file-system/README.md +24 -45
  104. package/claude/references/sd-simplysm-v14/core-browser/README.md +22 -29
  105. package/claude/references/sd-simplysm-v14/core-browser/_api-index.md +37 -0
  106. package/claude/references/sd-simplysm-v14/core-browser/extensions/copy-paste.md +1 -1
  107. package/claude/references/sd-simplysm-v14/core-browser/extensions/element-prototype-extensions.md +2 -0
  108. package/claude/references/sd-simplysm-v14/core-browser/extensions/get-bounds.md +1 -1
  109. package/claude/references/sd-simplysm-v14/core-browser/utils/download-blob.md +1 -1
  110. package/claude/references/sd-simplysm-v14/core-browser/utils/fetch-url-bytes.md +1 -1
  111. package/claude/references/sd-simplysm-v14/core-browser/utils/indexed-db-store.md +1 -1
  112. package/claude/references/sd-simplysm-v14/core-browser/utils/indexed-db-virtual-fs.md +1 -1
  113. package/claude/references/sd-simplysm-v14/core-browser/utils/open-file-dialog.md +1 -1
  114. package/claude/references/sd-simplysm-v14/core-common/README.md +71 -153
  115. package/claude/references/sd-simplysm-v14/core-common/_api-index.md +70 -0
  116. package/claude/references/sd-simplysm-v14/core-common/errors/argument-error.md +3 -1
  117. package/claude/references/sd-simplysm-v14/core-common/errors/not-implemented-error.md +3 -1
  118. package/claude/references/sd-simplysm-v14/core-common/errors/sd-error.md +3 -1
  119. package/claude/references/sd-simplysm-v14/core-common/errors/timeout-error.md +3 -1
  120. package/claude/references/sd-simplysm-v14/core-common/extensions/array.md +2 -0
  121. package/claude/references/sd-simplysm-v14/core-common/extensions/map.md +2 -0
  122. package/claude/references/sd-simplysm-v14/core-common/extensions/set.md +2 -0
  123. package/claude/references/sd-simplysm-v14/core-common/features/debounce-queue.md +3 -1
  124. package/claude/references/sd-simplysm-v14/core-common/features/event-emitter.md +3 -1
  125. package/claude/references/sd-simplysm-v14/core-common/features/serial-queue.md +3 -1
  126. package/claude/references/sd-simplysm-v14/core-common/type-utils/common-types.md +2 -0
  127. package/claude/references/sd-simplysm-v14/core-common/type-utils/env.md +3 -1
  128. package/claude/references/sd-simplysm-v14/core-common/types/date-only.md +3 -1
  129. package/claude/references/sd-simplysm-v14/core-common/types/date-time.md +9 -1
  130. package/claude/references/sd-simplysm-v14/core-common/types/lazy-gc-map.md +3 -1
  131. package/claude/references/sd-simplysm-v14/core-common/types/time.md +3 -1
  132. package/claude/references/sd-simplysm-v14/core-common/types/uuid.md +3 -1
  133. package/claude/references/sd-simplysm-v14/core-common/utils/bytes.md +3 -1
  134. package/claude/references/sd-simplysm-v14/core-common/utils/dt.md +3 -1
  135. package/claude/references/sd-simplysm-v14/core-common/utils/err.md +3 -1
  136. package/claude/references/sd-simplysm-v14/core-common/utils/json.md +3 -1
  137. package/claude/references/sd-simplysm-v14/core-common/utils/num.md +3 -1
  138. package/claude/references/sd-simplysm-v14/core-common/utils/obj.md +3 -1
  139. package/claude/references/sd-simplysm-v14/core-common/utils/path.md +3 -1
  140. package/claude/references/sd-simplysm-v14/core-common/utils/primitive.md +3 -1
  141. package/claude/references/sd-simplysm-v14/core-common/utils/str.md +3 -1
  142. package/claude/references/sd-simplysm-v14/core-common/utils/template-strings.md +2 -0
  143. package/claude/references/sd-simplysm-v14/core-common/utils/transfer.md +3 -1
  144. package/claude/references/sd-simplysm-v14/core-common/utils/wait.md +3 -1
  145. package/claude/references/sd-simplysm-v14/core-common/utils/xml.md +3 -1
  146. package/claude/references/sd-simplysm-v14/core-common/utils/zip-archive.md +3 -1
  147. package/claude/references/sd-simplysm-v14/core-node/README.md +25 -35
  148. package/claude/references/sd-simplysm-v14/core-node/_api-index.md +34 -0
  149. package/claude/references/sd-simplysm-v14/core-node/features/fs-watcher.md +3 -1
  150. package/claude/references/sd-simplysm-v14/core-node/logging/create-file-reporter.md +3 -1
  151. package/claude/references/sd-simplysm-v14/core-node/logging/pretty-reporter.md +3 -1
  152. package/claude/references/sd-simplysm-v14/core-node/logging/setup-consola.md +3 -1
  153. package/claude/references/sd-simplysm-v14/core-node/utils/cpx.md +3 -1
  154. package/claude/references/sd-simplysm-v14/core-node/utils/fsx.md +3 -1
  155. package/claude/references/sd-simplysm-v14/core-node/utils/pathx.md +3 -1
  156. package/claude/references/sd-simplysm-v14/core-node/worker/create-worker.md +3 -1
  157. package/claude/references/sd-simplysm-v14/core-node/worker/worker.md +3 -1
  158. package/claude/references/sd-simplysm-v14/excel/README.md +35 -49
  159. package/claude/references/sd-simplysm-v14/excel/_api-index.md +40 -0
  160. package/claude/references/sd-simplysm-v14/excel/core-classes/excel-cell.md +3 -1
  161. package/claude/references/sd-simplysm-v14/excel/core-classes/excel-col.md +3 -1
  162. package/claude/references/sd-simplysm-v14/excel/core-classes/excel-row.md +3 -1
  163. package/claude/references/sd-simplysm-v14/excel/core-classes/excel-workbook.md +6 -3
  164. package/claude/references/sd-simplysm-v14/excel/core-classes/excel-worksheet.md +3 -1
  165. package/claude/references/sd-simplysm-v14/excel/types/excel-address-point.md +3 -1
  166. package/claude/references/sd-simplysm-v14/excel/types/excel-style-options.md +3 -1
  167. package/claude/references/sd-simplysm-v14/excel/types/excel-value-type.md +3 -1
  168. package/claude/references/sd-simplysm-v14/excel/utilities/excel-utils.md +3 -1
  169. package/claude/references/sd-simplysm-v14/excel/wrapper/excel-wrapper.md +3 -1
  170. package/claude/references/sd-simplysm-v14/orm-common/README.md +66 -71
  171. package/claude/references/sd-simplysm-v14/orm-common/_api-index.md +59 -0
  172. package/claude/references/sd-simplysm-v14/orm-common/core/db-context.md +3 -1
  173. package/claude/references/sd-simplysm-v14/orm-common/core/db-transaction-error.md +3 -1
  174. package/claude/references/sd-simplysm-v14/orm-common/expression/expr-unit.md +3 -1
  175. package/claude/references/sd-simplysm-v14/orm-common/expression/expr.md +3 -1
  176. package/claude/references/sd-simplysm-v14/orm-common/models/migration.md +3 -1
  177. package/claude/references/sd-simplysm-v14/orm-common/query-builder/create-query-builder.md +3 -1
  178. package/claude/references/sd-simplysm-v14/orm-common/queryable-executable/executable.md +3 -1
  179. package/claude/references/sd-simplysm-v14/orm-common/queryable-executable/parse-search-query.md +3 -1
  180. package/claude/references/sd-simplysm-v14/orm-common/queryable-executable/queryable.md +3 -1
  181. package/claude/references/sd-simplysm-v14/orm-common/schema-builders/column-builder.md +3 -1
  182. package/claude/references/sd-simplysm-v14/orm-common/schema-builders/foreign-key-builder.md +3 -1
  183. package/claude/references/sd-simplysm-v14/orm-common/schema-builders/index-builder.md +3 -1
  184. package/claude/references/sd-simplysm-v14/orm-common/schema-builders/procedure.md +3 -1
  185. package/claude/references/sd-simplysm-v14/orm-common/schema-builders/table.md +3 -1
  186. package/claude/references/sd-simplysm-v14/orm-common/schema-builders/view.md +3 -1
  187. package/claude/references/sd-simplysm-v14/orm-common/types/data-type.md +3 -1
  188. package/claude/references/sd-simplysm-v14/orm-common/types/dialect.md +3 -1
  189. package/claude/references/sd-simplysm-v14/orm-common/types/expr.md +3 -1
  190. package/claude/references/sd-simplysm-v14/orm-common/types/parse-query-result.md +3 -1
  191. package/claude/references/sd-simplysm-v14/orm-common/types/query-def.md +3 -1
  192. package/claude/references/sd-simplysm-v14/orm-node/README.md +27 -28
  193. package/claude/references/sd-simplysm-v14/orm-node/_api-index.md +29 -0
  194. package/claude/references/sd-simplysm-v14/orm-node/connections/mssql-db-conn.md +2 -0
  195. package/claude/references/sd-simplysm-v14/orm-node/connections/mysql-db-conn.md +2 -0
  196. package/claude/references/sd-simplysm-v14/orm-node/connections/postgresql-db-conn.md +2 -0
  197. package/claude/references/sd-simplysm-v14/orm-node/core/create-db-conn.md +2 -0
  198. package/claude/references/sd-simplysm-v14/orm-node/core/create-orm.md +2 -0
  199. package/claude/references/sd-simplysm-v14/orm-node/core/node-db-context-executor.md +2 -0
  200. package/claude/references/sd-simplysm-v14/orm-node/types/db-conn-config.md +2 -0
  201. package/claude/references/sd-simplysm-v14/orm-node/types/db-conn-constants.md +2 -0
  202. package/claude/references/sd-simplysm-v14/orm-node/types/db-conn.md +2 -0
  203. package/claude/references/sd-simplysm-v14/orm-node/types/get-dialect-from-config.md +2 -0
  204. package/claude/references/sd-simplysm-v14/sd-claude/README.md +26 -65
  205. package/claude/references/sd-simplysm-v14/sd-claude/_api-index.md +39 -0
  206. package/claude/references/sd-simplysm-v14/sd-claude/assets.md +2 -0
  207. package/claude/references/sd-simplysm-v14/sd-claude/cli.md +3 -1
  208. package/claude/references/sd-simplysm-v14/sd-claude/hooks.md +11 -7
  209. package/claude/references/sd-simplysm-v14/sd-claude/scripts.md +2 -0
  210. package/claude/references/sd-simplysm-v14/sd-cli/README.md +48 -119
  211. package/claude/references/sd-simplysm-v14/sd-cli/_api-index.md +49 -0
  212. package/claude/references/sd-simplysm-v14/sd-cli/angular-vite-plugin/sd-angular-plugin.md +3 -1
  213. package/claude/references/sd-simplysm-v14/sd-cli/config/build-target.md +3 -1
  214. package/claude/references/sd-simplysm-v14/sd-cli/config/npm-config.md +3 -1
  215. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-browser-support-config.md +3 -1
  216. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-build-package-config.md +4 -2
  217. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-capacitor-config.md +3 -1
  218. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-client-package-config.md +4 -2
  219. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-config.md +4 -2
  220. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-electron-config.md +3 -1
  221. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-package-config.md +3 -1
  222. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-post-publish-script-config.md +3 -1
  223. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-publish-config.md +3 -1
  224. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-pwa-config.md +3 -1
  225. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-scripts-package-config.md +4 -2
  226. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-server-package-config.md +4 -2
  227. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-watch-hook-config.md +3 -1
  228. package/claude/references/sd-simplysm-v14/sd-cli/ts-compiler/sd-ts-compiler.md +3 -1
  229. package/claude/references/sd-simplysm-v14/service-client/README.md +33 -42
  230. package/claude/references/sd-simplysm-v14/service-client/_api-index.md +58 -0
  231. package/claude/references/sd-simplysm-v14/service-client/features/event-client.md +1 -1
  232. package/claude/references/sd-simplysm-v14/service-client/features/file-client.md +1 -1
  233. package/claude/references/sd-simplysm-v14/service-client/features/orm-client-connector.md +1 -1
  234. package/claude/references/sd-simplysm-v14/service-client/features/orm-client-db-context-executor.md +1 -1
  235. package/claude/references/sd-simplysm-v14/service-client/main/service-client.md +1 -1
  236. package/claude/references/sd-simplysm-v14/service-client/protocol/client-protocol-wrapper.md +1 -1
  237. package/claude/references/sd-simplysm-v14/service-client/transport/service-transport.md +1 -1
  238. package/claude/references/sd-simplysm-v14/service-client/transport/socket-provider.md +1 -1
  239. package/claude/references/sd-simplysm-v14/service-client/types/blob-input.md +2 -2
  240. package/claude/references/sd-simplysm-v14/service-client/types/browser-worker.md +2 -2
  241. package/claude/references/sd-simplysm-v14/service-client/types/file-collection.md +2 -2
  242. package/claude/references/sd-simplysm-v14/service-client/types/service-connection-options.md +2 -2
  243. package/claude/references/sd-simplysm-v14/service-client/types/service-progress.md +2 -2
  244. package/claude/references/sd-simplysm-v14/service-common/README.md +34 -127
  245. package/claude/references/sd-simplysm-v14/service-common/_api-index.md +51 -0
  246. package/claude/references/sd-simplysm-v14/service-common/app-structure/app-structure-item.md +3 -1
  247. package/claude/references/sd-simplysm-v14/service-common/app-structure/get-flat-permissions.md +7 -1
  248. package/claude/references/sd-simplysm-v14/service-common/app-structure/is-usable-modules-chain.md +3 -1
  249. package/claude/references/sd-simplysm-v14/service-common/app-structure/is-usable-modules.md +3 -1
  250. package/claude/references/sd-simplysm-v14/service-common/events/define-event.md +7 -1
  251. package/claude/references/sd-simplysm-v14/service-common/protocol/create-service-protocol.md +8 -1
  252. package/claude/references/sd-simplysm-v14/service-common/protocol/protocol-config.md +3 -1
  253. package/claude/references/sd-simplysm-v14/service-common/protocol/service-add-event-listener-message.md +3 -1
  254. package/claude/references/sd-simplysm-v14/service-common/protocol/service-auth-message.md +3 -1
  255. package/claude/references/sd-simplysm-v14/service-common/protocol/service-emit-event-message.md +3 -1
  256. package/claude/references/sd-simplysm-v14/service-common/protocol/service-error-message.md +3 -1
  257. package/claude/references/sd-simplysm-v14/service-common/protocol/service-event-message.md +3 -1
  258. package/claude/references/sd-simplysm-v14/service-common/protocol/service-get-event-listener-infos-message.md +3 -1
  259. package/claude/references/sd-simplysm-v14/service-common/protocol/service-message.md +3 -1
  260. package/claude/references/sd-simplysm-v14/service-common/protocol/service-progress-message.md +3 -1
  261. package/claude/references/sd-simplysm-v14/service-common/protocol/service-remove-event-listener-message.md +3 -1
  262. package/claude/references/sd-simplysm-v14/service-common/protocol/service-request-message.md +3 -1
  263. package/claude/references/sd-simplysm-v14/service-common/protocol/service-response-message.md +3 -1
  264. package/claude/references/sd-simplysm-v14/service-common/service-types/app-structure-service.md +3 -1
  265. package/claude/references/sd-simplysm-v14/service-common/service-types/auto-update-service.md +3 -1
  266. package/claude/references/sd-simplysm-v14/service-common/service-types/orm-service.md +3 -1
  267. package/claude/references/sd-simplysm-v14/service-common/types/service-upload-result.md +3 -1
  268. package/claude/references/sd-simplysm-v14/service-server/README.md +50 -135
  269. package/claude/references/sd-simplysm-v14/service-server/_api-index.md +87 -0
  270. package/claude/references/sd-simplysm-v14/service-server/auth/auth-token-payload.md +3 -1
  271. package/claude/references/sd-simplysm-v14/service-server/auth/sign-jwt.md +3 -1
  272. package/claude/references/sd-simplysm-v14/service-server/auth/verify-jwt.md +3 -1
  273. package/claude/references/sd-simplysm-v14/service-server/core/auth.md +3 -1
  274. package/claude/references/sd-simplysm-v14/service-server/core/define-service.md +3 -1
  275. package/claude/references/sd-simplysm-v14/service-server/core/execute-service-method.md +3 -1
  276. package/claude/references/sd-simplysm-v14/service-server/core/service-context.md +3 -1
  277. package/claude/references/sd-simplysm-v14/service-server/legacy/handle-v1-connection.md +3 -1
  278. package/claude/references/sd-simplysm-v14/service-server/main/create-service-server.md +3 -1
  279. package/claude/references/sd-simplysm-v14/service-server/main/service-server.md +3 -1
  280. package/claude/references/sd-simplysm-v14/service-server/protocol/server-protocol-wrapper.md +3 -1
  281. package/claude/references/sd-simplysm-v14/service-server/services/app-structure-service.md +3 -1
  282. package/claude/references/sd-simplysm-v14/service-server/services/auto-update-service.md +3 -1
  283. package/claude/references/sd-simplysm-v14/service-server/services/orm-service.md +3 -1
  284. package/claude/references/sd-simplysm-v14/service-server/transport-http/handle-http-request.md +3 -1
  285. package/claude/references/sd-simplysm-v14/service-server/transport-http/handle-static-file.md +3 -1
  286. package/claude/references/sd-simplysm-v14/service-server/transport-http/handle-upload.md +3 -1
  287. package/claude/references/sd-simplysm-v14/service-server/transport-socket/service-socket.md +3 -1
  288. package/claude/references/sd-simplysm-v14/service-server/transport-socket/websocket-handler.md +3 -1
  289. package/claude/references/sd-simplysm-v14/service-server/types/service-server-options.md +3 -1
  290. package/claude/references/sd-simplysm-v14/service-server/utils/get-config.md +3 -1
  291. package/claude/references/sd-simplysm-v14/storage/README.md +17 -80
  292. package/claude/references/sd-simplysm-v14/storage/_api-index.md +26 -0
  293. package/claude/references/sd-simplysm-v14/storage/clients/ftp-storage-client.md +3 -1
  294. package/claude/references/sd-simplysm-v14/storage/clients/sftp-storage-client.md +3 -1
  295. package/claude/references/sd-simplysm-v14/storage/factory/storage-factory.md +1 -1
  296. package/claude/references/sd-simplysm-v14/storage/types/file-info.md +3 -1
  297. package/claude/references/sd-simplysm-v14/storage/types/storage-client.md +2 -0
  298. package/claude/references/sd-simplysm-v14/storage/types/storage-conn-config.md +3 -1
  299. package/claude/rules/sd-claude-rules.md +1 -1
  300. package/claude/skills/sd-dev/SKILL.md +62 -8
  301. package/claude/skills/sd-dev/subagent-preamble.md +22 -0
  302. package/package.json +1 -1
  303. package/claude/references/sd-simplysm-v14/angular/recipes/_common-rules.md +0 -336
  304. package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail/extension-a-edit-save.md +0 -191
  305. package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail/extension-b-delete-restore.md +0 -103
  306. package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail/extension-c-modal-view.md +0 -198
  307. package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail/extension-d-control-view.md +0 -109
  308. package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail/extension-e-auxiliary.md +0 -87
  309. package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail/extension-f-complex-detail.md +0 -202
  310. package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail.md +0 -280
  311. package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-a-inline-edit.md +0 -386
  312. package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-b-selection.md +0 -215
  313. package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-c-inline-delete.md +0 -64
  314. package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-d-select-modal.md +0 -193
  315. package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-e-readonly-modal.md +0 -140
  316. package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-f-modal-edit.md +0 -123
  317. package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-g-excel.md +0 -145
  318. package/claude/references/sd-simplysm-v14/angular/recipes/crud-list.md +0 -377
  319. package/claude/references/sd-simplysm-v14/angular/recipes/data-select-button.md +0 -368
  320. package/claude/references/sd-simplysm-v14/angular/recipes/page-modal-container.md +0 -238
  321. package/claude/references/sd-simplysm-v14/excel/types/excel-xml-content-type-data.md +0 -23
  322. package/claude/references/sd-simplysm-v14/excel/types/excel-xml-drawing-data.md +0 -29
  323. package/claude/references/sd-simplysm-v14/excel/types/excel-xml-relationship-data.md +0 -39
  324. package/claude/references/sd-simplysm-v14/excel/types/excel-xml-shared-string-data.md +0 -42
  325. package/claude/references/sd-simplysm-v14/excel/types/excel-xml-style-data.md +0 -97
  326. package/claude/references/sd-simplysm-v14/excel/types/excel-xml-workbook-data.md +0 -22
  327. package/claude/references/sd-simplysm-v14/excel/types/excel-xml-worksheet-data.md +0 -68
  328. package/claude/references/sd-simplysm-v14/excel/types/excel-xml.md +0 -15
@@ -9,154 +9,69 @@
9
9
  npm install @simplysm/service-server
10
10
  ```
11
11
 
12
- ## 하려는 작업 → 먼저 읽을 파일
13
-
14
- | 작업 | 먼저 읽을 파일 |
15
- |------|----------------|
16
- | 서버 생성 및 시작 | [`ServiceServer`](./main/service-server.md) |
17
- | 서비스 정의 | [`defineService`](./core/define-service.md) |
18
- | 인증 적용 | [`auth`](./core/auth.md) |
19
- | JWT 토큰 발급/검증 | [`signJwt`](./auth/sign-jwt.md), [`verifyJwt`](./auth/verify-jwt.md) |
20
- | 이벤트 브로드캐스트 | [`ServiceServer`](./main/service-server.md) (`getEvent` / `emitEvent`) |
21
- | ORM 서비스 등록 | [`OrmService`](./services/orm-service.md) |
22
- | 자동 업데이트 서비스 등록 | [`AutoUpdateService`](./services/auto-update-service.md) |
23
- | 파일 업로드 처리 | [`handleUpload`](./transport-http/handle-upload.md) |
24
- | 설정 파일 읽기 | [`getConfig`](./utils/get-config.md) |
12
+ ## 하려는 작업 → 읽을 파일
25
13
 
26
- ## API Overview
27
-
28
- ### Main
29
-
30
- | Entry | Kind | 언제 쓰나 |
31
- |-------|------|-----------|
32
- | [`ServiceServer`](./main/service-server.md) | class | 서버를 생성하고 시작할 때. WebSocket/HTTP 라우팅, JWT 인증, 이벤트 브로드캐스트, graceful shutdown을 처리한다 |
33
- | [`ServerEventProxy`](./main/service-server.md#servereventproxy) | interface | `getEvent()`의 반환 타입을 참조할 때 |
34
- | [`createServiceServer`](./main/create-service-server.md) | function | `new ServiceServer()` 대신 팩토리 함수로 서버를 생성할 때 |
35
-
36
- ### Types
37
-
38
- | Entry | Kind | 언제 쓰나 |
39
- |-------|------|-----------|
40
- | [`ServiceServerOptions`](./types/service-server-options.md) | interface | 서버 생성 옵션을 구성할 때 (rootPath, port, ssl, auth, services) |
41
-
42
- ### Auth
43
-
44
- | Entry | Kind | 언제 쓰나 |
45
- |-------|------|-----------|
46
- | [`AuthTokenPayload`](./auth/auth-token-payload.md) | interface | JWT 페이로드 타입을 참조할 때 |
47
- | [`signJwt`](./auth/sign-jwt.md) | function | 서버 외부에서 직접 JWT 토큰을 서명할 때. 일반적으로는 `server.signAuthToken()` 사용을 권장 |
48
- | [`verifyJwt`](./auth/verify-jwt.md) | function | 서버 외부에서 직접 JWT 토큰을 검증할 때. 일반적으로는 `server.verifyAuthToken()` 사용을 권장 |
49
- | [`decodeJwt`](./auth/verify-jwt.md#decodejwt) | function | 검증 없이 토큰 내용을 확인할 때 (디버깅 등) |
50
-
51
- ### Core
52
-
53
- | Entry | Kind | 언제 쓰나 |
54
- |-------|------|-----------|
55
- | [`defineService`](./core/define-service.md) | function | 서비스를 정의할 때. 이름과 팩토리 함수로 구성한다 |
56
- | [`ServiceDefinition`](./core/define-service.md#servicedefinition) | interface | 서비스 정의 타입을 참조할 때 |
57
- | [`ServiceMethods`](./core/define-service.md#servicemethods) | type | 클라이언트 측 타입 공유를 위해 서비스 메서드 시그니처를 추출할 때 |
58
- | [`auth`](./core/auth.md) | function | 서비스 또는 메서드에 인증을 요구할 때 |
59
- | [`getServiceAuthPermissions`](./core/auth.md#getserviceauthpermissions) | function | `auth()`로 래핑된 함수의 권한 배열을 프로그래밍적으로 읽을 때 |
60
- | [`ServiceContext`](./core/service-context.md) | interface | 서비스 팩토리에서 컨텍스트 타입을 참조할 때 |
61
- | [`createServiceContext`](./core/service-context.md#createservicecontext) | function | 테스트 등에서 `ServiceContext`를 직접 생성할 때 |
62
- | [`executeServiceMethod`](./core/execute-service-method.md) | function | 커스텀 전송 계층에서 서비스 실행 파이프라인을 직접 호출할 때 |
63
-
64
- ### Transport - Socket
65
-
66
- | Entry | Kind | 언제 쓰나 |
67
- |-------|------|-----------|
68
- | [`WebSocketHandler`](./transport-socket/websocket-handler.md) | interface | WebSocket 메시지 라우팅 및 이벤트 브로드캐스트 동작을 이해할 때 |
69
- | [`createWebSocketHandler`](./transport-socket/websocket-handler.md#createwebsockethandler) | function | 커스텀 WebSocket 핸들러를 생성할 때 |
70
- | [`ServiceSocket`](./transport-socket/service-socket.md) | interface | WebSocket 연결 추상화를 참조할 때. `ServiceContext.socket`의 타입이다 |
71
- | [`createServiceSocket`](./transport-socket/service-socket.md#createservicesocket) | function | 테스트 등에서 `ServiceSocket`을 직접 생성할 때 |
72
-
73
- ### Transport - HTTP
74
-
75
- | Entry | Kind | 언제 쓰나 |
76
- |-------|------|-----------|
77
- | [`handleHttpRequest`](./transport-http/handle-http-request.md) | function | HTTP API 요청 처리 동작을 이해할 때. `ServiceServer`가 내부적으로 사용한다 |
78
- | [`handleUpload`](./transport-http/handle-upload.md) | function | 파일 업로드 처리 동작을 이해할 때. `ServiceServer`가 내부적으로 사용한다 |
79
- | [`handleStaticFile`](./transport-http/handle-static-file.md) | function | 정적 파일 서빙 동작을 이해할 때. `ServiceServer`가 내부적으로 사용한다 |
80
-
81
- ### Protocol
82
-
83
- | Entry | Kind | 언제 쓰나 |
84
- |-------|------|-----------|
85
- | [`ServerProtocolWrapper`](./protocol/server-protocol-wrapper.md) | interface | 프로토콜 인코딩/디코딩 래퍼의 동작을 이해할 때. worker 스레드 자동 위임 기준을 확인할 때 |
86
- | [`createServerProtocolWrapper`](./protocol/server-protocol-wrapper.md#createserverprotocolwrapper) | function | 커스텀 프로토콜 래퍼를 생성할 때 |
87
-
88
- ### Services
89
-
90
- | Entry | Kind | 언제 쓰나 |
91
- |-------|------|-----------|
92
- | [`OrmService`](./services/orm-service.md) | const | DB 연결을 서비스 계층에서 제공할 때. WebSocket 전용, 인증 필수 |
93
- | [`OrmServiceType`](./services/orm-service.md#ormservicetype) | type | 클라이언트에서 ORM 서비스 타입을 참조할 때 |
94
- | [`AutoUpdateService`](./services/auto-update-service.md) | const | 클라이언트 앱 자동 업데이트를 제공할 때 |
95
- | [`AutoUpdateServiceType`](./services/auto-update-service.md#autoupdateservicetype) | type | 클라이언트에서 자동 업데이트 서비스 타입을 참조할 때 |
96
- | [`AppStructureService`](./services/app-structure-service.md) | function | 앱 구조 정보를 클라이언트에 제공할 때 |
97
- | [`AppStructureServiceType`](./services/app-structure-service.md#appstructureservicetype) | type | 클라이언트에서 앱 구조 서비스 타입을 참조할 때 |
98
-
99
- ### Utils
100
-
101
- | Entry | Kind | 언제 쓰나 |
102
- |-------|------|-----------|
103
- | [`getConfig`](./utils/get-config.md) | function | `.config.json` 파일을 캐싱 및 자동 리로드로 읽을 때 |
104
-
105
- ### Legacy
106
-
107
- | Entry | Kind | 언제 쓰나 |
108
- |-------|------|-----------|
109
- | [`handleV1Connection`](./legacy/handle-v1-connection.md) | function | V1 WebSocket 프로토콜 호환이 필요할 때. 자동 업데이트만 지원한다 |
110
-
111
- ## Usage Examples
112
-
113
- ### 서버 생성 및 시작
114
-
115
- ```typescript
116
- import { createServiceServer, defineService, auth } from "@simplysm/service-server";
117
-
118
- const HealthService = defineService("Health", (ctx) => ({
119
- check: () => ({ status: "ok" }),
120
- }));
14
+ ### 서버 구성 및 실행
121
15
 
122
- const UserService = defineService("User", auth((ctx) => ({
123
- getProfile: () => ctx.authInfo,
124
- })));
16
+ | 하려는 작업 | 읽을 파일 |
17
+ |-------------|-----------|
18
+ | Fastify 기반 서비스 서버를 생성하고 시작할 때 | [ServiceServer](./main/service-server.md) |
19
+ | `new ServiceServer()` 대신 팩토리 함수로 서버를 생성할 때 | [createServiceServer](./main/create-service-server.md) |
20
+ | 서버 생성 옵션(rootPath, port, ssl, auth, services)을 구성할 때 | [ServiceServerOptions](./types/service-server-options.md) |
125
21
 
126
- const server = createServiceServer<{ userId: string }>({
127
- rootPath: "/app",
128
- port: 3000,
129
- auth: { jwtSecret: "my-secret" },
130
- services: [HealthService, UserService],
131
- });
22
+ ### 서비스 정의 인증
132
23
 
133
- await server.listen();
134
- ```
24
+ | 하려는 작업 | 읽을 파일 |
25
+ |-------------|-----------|
26
+ | 이름과 팩토리 함수로 서비스를 정의할 때 | [defineService](./core/define-service.md) |
27
+ | 서비스 또는 메서드에 로그인/역할 인증을 적용할 때 | [auth](./core/auth.md) |
28
+ | 서비스 팩토리에서 컨텍스트(인증 정보, 설정 파일 등)에 접근할 때 | [ServiceContext](./core/service-context.md) |
29
+ | 커스텀 전송 계층에서 서비스 실행 파이프라인을 직접 호출할 때 | [executeServiceMethod](./core/execute-service-method.md) |
135
30
 
136
- ### JWT 토큰 발급 및 검증
31
+ ### JWT 인증
137
32
 
138
- ```typescript
139
- const token = await server.signAuthToken({
140
- roles: ["admin"],
141
- data: { userId: "123" },
142
- });
33
+ | 하려는 작업 | 읽을 파일 |
34
+ |-------------|-----------|
35
+ | JWT 페이로드 타입을 참조할 때 | [AuthTokenPayload](./auth/auth-token-payload.md) |
36
+ | 서버 외부에서 직접 JWT 토큰을 서명할 때 | [signJwt](./auth/sign-jwt.md) |
37
+ | 서버 외부에서 직접 JWT 토큰을 검증/디코딩할 때 | [verifyJwt](./auth/verify-jwt.md) |
143
38
 
144
- const payload = await server.verifyAuthToken(token);
145
- // payload.data.userId === "123"
146
- ```
39
+ ### 내장 서비스 등록
147
40
 
148
- ### 이벤트 브로드캐스트
41
+ | 하려는 작업 | 읽을 파일 |
42
+ |-------------|-----------|
43
+ | 클라이언트에서 WebSocket으로 DB 연결/쿼리를 수행할 때 | [OrmService](./services/orm-service.md) |
44
+ | 클라이언트 앱(APK/EXE) 자동 업데이트를 제공할 때 | [AutoUpdateService](./services/auto-update-service.md) |
45
+ | 클라이언트에 앱 구조(메뉴/페이지) 정보를 제공할 때 | [AppStructureService](./services/app-structure-service.md) |
149
46
 
150
- ```typescript
151
- import { defineEvent } from "@simplysm/service-common";
47
+ ### 전송 계층 (내부 동작 이해)
152
48
 
153
- export const UserUpdatedEvent = defineEvent<{ userId: string }, { name: string }>("UserUpdated");
49
+ | 하려는 작업 | 읽을 파일 |
50
+ |-------------|-----------|
51
+ | WebSocket 메시지 라우팅/이벤트 브로드캐스트 동작을 이해할 때 | [WebSocketHandler](./transport-socket/websocket-handler.md) |
52
+ | WebSocket 연결 추상화(`ServiceContext.socket`의 타입)를 참조할 때 | [ServiceSocket](./transport-socket/service-socket.md) |
53
+ | HTTP API 요청 처리 동작을 이해할 때 | [handleHttpRequest](./transport-http/handle-http-request.md) |
54
+ | 파일 업로드 처리 동작을 이해할 때 | [handleUpload](./transport-http/handle-upload.md) |
55
+ | 정적 파일 서빙 동작을 이해할 때 | [handleStaticFile](./transport-http/handle-static-file.md) |
154
56
 
155
- const userUpdatedEvt = server.getEvent<typeof UserUpdatedEvent>("UserUpdated");
156
- await userUpdatedEvt.emit((info) => info.userId === "123", { name: "새 이름" });
157
- ```
57
+ ### 프로토콜 유틸리티
58
+
59
+ | 하려는 작업 | 읽을 파일 |
60
+ |-------------|-----------|
61
+ | 프로토콜 인코딩/디코딩 래퍼(worker 자동 위임)를 이해할 때 | [ServerProtocolWrapper](./protocol/server-protocol-wrapper.md) |
62
+ | `.config.json` 파일을 캐싱/자동 리로드로 읽을 때 | [getConfig](./utils/get-config.md) |
63
+
64
+ ### 레거시
65
+
66
+ | 하려는 작업 | 읽을 파일 |
67
+ |-------------|-----------|
68
+ | V1 WebSocket 프로토콜 호환이 필요할 때 (자동 업데이트만 지원) | [handleV1Connection](./legacy/handle-v1-connection.md) |
158
69
 
159
70
  ## 이 패키지를 쓰지 말아야 할 때
160
71
 
161
72
  - 브라우저 환경에서 서버에 연결 → `@simplysm/service-client`
162
73
  - 서버-클라이언트 공유 타입/프로토콜 정의 → `@simplysm/service-common`
74
+
75
+ ---
76
+
77
+ > API 이름으로 검색: [_api-index.md](./_api-index.md)
@@ -0,0 +1,87 @@
1
+ # API Index — @simplysm/service-server
2
+
3
+ > API 이름을 알고 있을 때 해당 문서를 찾는 인덱스.
4
+ > 작업 기반으로 찾으려면 [README.md](./README.md) 참조.
5
+
6
+ ## Main
7
+
8
+ | API | Kind | 문서 | 언제 쓰나 |
9
+ |-----|------|------|-----------|
10
+ | `ServiceServer` | class | [service-server.md](./main/service-server.md) | 서버를 생성하고 시작할 때 |
11
+ | `ServerEventProxy` | interface | [service-server.md](./main/service-server.md#servereventproxy) | `getEvent()`의 반환 타입을 참조할 때 |
12
+ | `createServiceServer` | function | [create-service-server.md](./main/create-service-server.md) | 팩토리 함수로 서버를 생성할 때 |
13
+
14
+ ## Types
15
+
16
+ | API | Kind | 문서 | 언제 쓰나 |
17
+ |-----|------|------|-----------|
18
+ | `ServiceServerOptions` | interface | [service-server-options.md](./types/service-server-options.md) | 서버 생성 옵션을 구성할 때 |
19
+
20
+ ## Auth
21
+
22
+ | API | Kind | 문서 | 언제 쓰나 |
23
+ |-----|------|------|-----------|
24
+ | `AuthTokenPayload` | interface | [auth-token-payload.md](./auth/auth-token-payload.md) | JWT 페이로드 타입을 참조할 때 |
25
+ | `signJwt` | function | [sign-jwt.md](./auth/sign-jwt.md) | JWT 토큰을 서명할 때 |
26
+ | `verifyJwt` | function | [verify-jwt.md](./auth/verify-jwt.md) | JWT 토큰을 검증할 때 |
27
+ | `decodeJwt` | function | [verify-jwt.md](./auth/verify-jwt.md#decodejwt) | 검증 없이 토큰 내용을 확인할 때 |
28
+
29
+ ## Core
30
+
31
+ | API | Kind | 문서 | 언제 쓰나 |
32
+ |-----|------|------|-----------|
33
+ | `defineService` | function | [define-service.md](./core/define-service.md) | 서비스를 정의할 때 |
34
+ | `ServiceDefinition` | interface | [define-service.md](./core/define-service.md#servicedefinition) | 서비스 정의 타입을 참조할 때 |
35
+ | `ServiceMethods` | type | [define-service.md](./core/define-service.md#servicemethods) | 클라이언트 측 타입 공유를 위해 메서드 시그니처를 추출할 때 |
36
+ | `auth` | function | [auth.md](./core/auth.md) | 서비스 또는 메서드에 인증을 요구할 때 |
37
+ | `getServiceAuthPermissions` | function | [auth.md](./core/auth.md#getserviceauthpermissions) | `auth()`로 래핑된 함수의 권한 배열을 읽을 때 |
38
+ | `ServiceContext` | interface | [service-context.md](./core/service-context.md) | 서비스 팩토리에서 컨텍스트 타입을 참조할 때 |
39
+ | `createServiceContext` | function | [service-context.md](./core/service-context.md#createservicecontext) | 테스트 등에서 `ServiceContext`를 직접 생성할 때 |
40
+ | `executeServiceMethod` | function | [execute-service-method.md](./core/execute-service-method.md) | 커스텀 전송 계층에서 서비스 실행 파이프라인을 직접 호출할 때 |
41
+
42
+ ## Transport - Socket
43
+
44
+ | API | Kind | 문서 | 언제 쓰나 |
45
+ |-----|------|------|-----------|
46
+ | `WebSocketHandler` | interface | [websocket-handler.md](./transport-socket/websocket-handler.md) | WebSocket 메시지 라우팅 동작을 이해할 때 |
47
+ | `createWebSocketHandler` | function | [websocket-handler.md](./transport-socket/websocket-handler.md#createwebsockethandler) | 커스텀 WebSocket 핸들러를 생성할 때 |
48
+ | `ServiceSocket` | interface | [service-socket.md](./transport-socket/service-socket.md) | WebSocket 연결 추상화를 참조할 때 |
49
+ | `createServiceSocket` | function | [service-socket.md](./transport-socket/service-socket.md#createservicesocket) | 테스트 등에서 `ServiceSocket`을 직접 생성할 때 |
50
+
51
+ ## Transport - HTTP
52
+
53
+ | API | Kind | 문서 | 언제 쓰나 |
54
+ |-----|------|------|-----------|
55
+ | `handleHttpRequest` | function | [handle-http-request.md](./transport-http/handle-http-request.md) | HTTP API 요청 처리 동작을 이해할 때 |
56
+ | `handleUpload` | function | [handle-upload.md](./transport-http/handle-upload.md) | 파일 업로드 처리 동작을 이해할 때 |
57
+ | `handleStaticFile` | function | [handle-static-file.md](./transport-http/handle-static-file.md) | 정적 파일 서빙 동작을 이해할 때 |
58
+
59
+ ## Protocol
60
+
61
+ | API | Kind | 문서 | 언제 쓰나 |
62
+ |-----|------|------|-----------|
63
+ | `ServerProtocolWrapper` | interface | [server-protocol-wrapper.md](./protocol/server-protocol-wrapper.md) | 프로토콜 인코딩/디코딩 래퍼의 동작을 이해할 때 |
64
+ | `createServerProtocolWrapper` | function | [server-protocol-wrapper.md](./protocol/server-protocol-wrapper.md#createserverprotocolwrapper) | 커스텀 프로토콜 래퍼를 생성할 때 |
65
+
66
+ ## Services
67
+
68
+ | API | Kind | 문서 | 언제 쓰나 |
69
+ |-----|------|------|-----------|
70
+ | `OrmService` | const | [orm-service.md](./services/orm-service.md) | DB 연결을 서비스 계층에서 제공할 때 |
71
+ | `OrmServiceType` | type | [orm-service.md](./services/orm-service.md#ormservicetype) | 클라이언트에서 ORM 서비스 타입을 참조할 때 |
72
+ | `AutoUpdateService` | const | [auto-update-service.md](./services/auto-update-service.md) | 클라이언트 앱 자동 업데이트를 제공할 때 |
73
+ | `AutoUpdateServiceType` | type | [auto-update-service.md](./services/auto-update-service.md#autoupdateservicetype) | 클라이언트에서 자동 업데이트 서비스 타입을 참조할 때 |
74
+ | `AppStructureService` | function | [app-structure-service.md](./services/app-structure-service.md) | 앱 구조 정보를 클라이언트에 제공할 때 |
75
+ | `AppStructureServiceType` | type | [app-structure-service.md](./services/app-structure-service.md#appstructureservicetype) | 클라이언트에서 앱 구조 서비스 타입을 참조할 때 |
76
+
77
+ ## Utils
78
+
79
+ | API | Kind | 문서 | 언제 쓰나 |
80
+ |-----|------|------|-----------|
81
+ | `getConfig` | function | [get-config.md](./utils/get-config.md) | `.config.json` 파일을 캐싱/자동 리로드로 읽을 때 |
82
+
83
+ ## Legacy
84
+
85
+ | API | Kind | 문서 | 언제 쓰나 |
86
+ |-----|------|------|-----------|
87
+ | `handleV1Connection` | function | [handle-v1-connection.md](./legacy/handle-v1-connection.md) | V1 WebSocket 프로토콜 호환이 필요할 때 |
@@ -1,4 +1,6 @@
1
- # AuthTokenPayload
1
+ # `AuthTokenPayload`
2
+
3
+ > **읽어야 하는 상황**: JWT 페이로드 타입을 참조하거나 `signAuthToken`/`verifyAuthToken`의 페이로드 구조를 확인할 때.
2
4
 
3
5
  JWT 페이로드 인터페이스. `jose` 라이브러리의 `JWTPayload`를 확장한다.
4
6
 
@@ -1,4 +1,6 @@
1
- # signJwt
1
+ # `signJwt`
2
+
3
+ > **읽어야 하는 상황**: 서버 외부에서 직접 JWT 토큰을 서명할 때. 일반적으로는 `server.signAuthToken()`을 사용한다.
2
4
 
3
5
  HS256 알고리즘과 12시간 유효기간으로 JWT 토큰을 서명한다.
4
6
 
@@ -1,4 +1,6 @@
1
- # verifyJwt
1
+ # `verifyJwt`
2
+
3
+ > **읽어야 하는 상황**: 서버 외부에서 직접 JWT 토큰을 검증하거나 디코딩할 때. 일반적으로는 `server.verifyAuthToken()`을 사용한다. 검증 없이 내용만 확인하려면 `decodeJwt`를 사용한다.
2
4
 
3
5
  JWT 토큰을 검증하고 페이로드를 반환한다. 만료된 토큰은 "토큰이 만료되었습니다." 에러를, 그 외 유효하지 않은 토큰은 "유효하지 않은 토큰입니다." 에러를 던진다.
4
6
 
@@ -1,4 +1,6 @@
1
- # auth
1
+ # `auth`
2
+
3
+ > **읽어야 하는 상황**: 서비스 전체 또는 특정 메서드에 로그인/역할 기반 인증을 적용할 때. 서비스 정의는 [`defineService`](./define-service.md) 참조.
2
4
 
3
5
  서비스 팩토리 또는 메서드에 인증을 요구하는 래퍼 함수. 래핑된 함수에 `AUTH_PERMISSIONS` 심볼로 권한 배열을 부착한다.
4
6
 
@@ -1,4 +1,6 @@
1
- # defineService
1
+ # `defineService`
2
+
3
+ > **읽어야 하는 상황**: 서버에 등록할 커스텀 서비스를 정의할 때. 인증이 필요하면 [`auth`](./auth.md)와 함께 사용한다.
2
4
 
3
5
  이름과 팩토리 함수로 서비스를 정의한다. 팩토리가 `auth()`로 래핑되어 있으면 자동으로 `authPermissions`를 추출한다.
4
6
 
@@ -1,4 +1,6 @@
1
- # executeServiceMethod
1
+ # `executeServiceMethod`
2
+
3
+ > **읽어야 하는 상황**: 커스텀 전송 계층에서 서비스 실행 파이프라인을 직접 호출할 때. 일반적인 서버 사용 시에는 `ServiceServer`가 내부적으로 호출하므로 직접 사용할 필요가 없다.
2
4
 
3
5
  서비스 조회 → 컨텍스트 생성 → 인증 확인 → 메서드 실행 파이프라인을 수행한다.
4
6
 
@@ -1,4 +1,6 @@
1
- # ServiceContext
1
+ # `ServiceContext`
2
+
3
+ > **읽어야 하는 상황**: 서비스 팩토리에서 인증 정보, 클라이언트 경로, 설정 파일 등에 접근할 때. 전송 방식(WebSocket/HTTP)에 무관하게 동일한 인터페이스를 제공한다.
2
4
 
3
5
  서비스 팩토리 함수에 전달되는 컨텍스트 인터페이스. 전송 방식(WebSocket/HTTP)에 무관하게 동일한 인터페이스를 제공한다.
4
6
 
@@ -1,4 +1,6 @@
1
- # handleV1Connection
1
+ # `handleV1Connection`
2
+
3
+ > **읽어야 하는 상황**: V1 WebSocket 프로토콜과의 호환이 필요할 때. 자동 업데이트(`SdAutoUpdateService.getLastVersion`)만 지원하고, 그 외 모든 요청은 업그레이드 필요 에러를 반환한다.
2
4
 
3
5
  V1 레거시 WebSocket 프로토콜 호환 레이어. 자동 업데이트(`SdAutoUpdateService.getLastVersion`)만 지원하고, 그 외 모든 요청은 업그레이드 필요 에러를 반환한다.
4
6
 
@@ -1,4 +1,6 @@
1
- # createServiceServer
1
+ # `createServiceServer`
2
+
3
+ > **읽어야 하는 상황**: `new ServiceServer()` 대신 팩토리 함수로 서버 인스턴스를 생성할 때. 서버의 전체 API는 [`ServiceServer`](./service-server.md) 참조.
2
4
 
3
5
  `ServiceServer` 인스턴스를 생성하는 팩토리 함수.
4
6
 
@@ -1,4 +1,6 @@
1
- # ServiceServer
1
+ # `ServiceServer`
2
+
3
+ > **읽어야 하는 상황**: Fastify 기반 서비스 서버를 생성하고 시작할 때. 팩토리 함수를 선호하면 [`createServiceServer`](./create-service-server.md) 참조.
2
4
 
3
5
  Fastify를 래핑한 서비스 서버 클래스. WebSocket/HTTP 이중 전송, JWT 인증, 이벤트 브로드캐스트, graceful shutdown을 처리한다. `EventEmitter<{ ready: void; close: void }>`를 확장한다.
4
6
 
@@ -1,4 +1,6 @@
1
- # ServerProtocolWrapper
1
+ # `ServerProtocolWrapper`
2
+
3
+ > **읽어야 하는 상황**: 프로토콜 인코딩/디코딩의 worker 스레드 자동 위임 기준을 이해할 때. `ServiceSocket`이 내부적으로 사용한다.
2
4
 
3
5
  메시지 인코딩/디코딩 래퍼 인터페이스. 무거운 메시지는 worker 스레드에 자동으로 위임하고, 가벼운 작업은 메인 스레드에서 처리한다.
4
6
 
@@ -1,4 +1,6 @@
1
- # AppStructureService
1
+ # `AppStructureService`
2
+
3
+ > **읽어야 하는 상황**: 클라이언트에 앱의 메뉴/페이지 구조 정보를 정적으로 제공할 때. 동적으로 변하는 구조가 필요하면 별도 서비스를 정의한다.
2
4
 
3
5
  앱 구조 정보 서비스를 생성하는 팩토리 함수. `defineService`를 래핑하여 `Record<string, AppStructureItem[]>` 맵을 받아 서비스 정의를 반환한다. 인증 불필요.
4
6
 
@@ -1,4 +1,6 @@
1
- # AutoUpdateService
1
+ # `AutoUpdateService`
2
+
3
+ > **읽어야 하는 상황**: 클라이언트 앱(Android APK / Windows EXE)의 자동 업데이트를 서버에서 제공할 때. 웹 클라이언트 업데이트에는 사용하지 않는다.
2
4
 
3
5
  자동 업데이트 서비스 정의. `defineService("AutoUpdate", (ctx) => ...)`로 정의되어 있다. 인증 불필요.
4
6
 
@@ -1,4 +1,6 @@
1
- # OrmService
1
+ # `OrmService`
2
+
3
+ > **읽어야 하는 상황**: 클라이언트에서 WebSocket을 통해 DB 연결/쿼리를 수행하는 서비스를 등록할 때. HTTP API로 DB 작업이 필요하면 별도 서비스를 정의한다.
2
4
 
3
5
  ORM 브리지 서비스 정의. WebSocket 전용이며 `auth()`로 래핑되어 로그인이 필수다. `defineService("Orm", auth((ctx) => ...))`로 정의되어 있다.
4
6
 
@@ -1,4 +1,6 @@
1
- # handleHttpRequest
1
+ # `handleHttpRequest`
2
+
3
+ > **읽어야 하는 상황**: HTTP API 요청(`/api/:service/:method`) 처리 동작을 이해할 때. `ServiceServer`가 내부적으로 사용한다.
2
4
 
3
5
  GET/POST `/api/:service/:method` 경로의 HTTP 요청을 처리한다. `x-sd-client-name` 헤더가 필수이며, `Authorization` 헤더가 있으면 JWT 토큰을 검증한다.
4
6
 
@@ -1,4 +1,6 @@
1
- # handleStaticFile
1
+ # `handleStaticFile`
2
+
3
+ > **읽어야 하는 상황**: 정적 파일 서빙 동작(경로 탐색 방지, 숨김 파일 차단, 디렉토리 처리)을 이해할 때. `ServiceServer`가 내부적으로 사용한다.
2
4
 
3
5
  정적 파일 서빙을 처리한다. 경로 탐색 공격 방지와 숨김 파일 접근 차단이 포함되어 있다.
4
6
 
@@ -1,4 +1,6 @@
1
- # handleUpload
1
+ # `handleUpload`
2
+
3
+ > **읽어야 하는 상황**: 파일 업로드(`/upload`) 처리 동작을 이해할 때. 인증 필수. `ServiceServer`가 내부적으로 사용한다.
2
4
 
3
5
  `/upload` 경로의 multipart 파일 업로드를 처리한다. 인증 필수 (Authorization 헤더 필수).
4
6
 
@@ -1,4 +1,6 @@
1
- # ServiceSocket
1
+ # `ServiceSocket`
2
+
3
+ > **읽어야 하는 상황**: WebSocket 연결 추상화를 참조할 때. `ServiceContext.socket`의 타입이다. 소켓별 상태 관리(이벤트 리스너, 인증 토큰)를 이해할 때.
2
4
 
3
5
  프로토콜 인코딩/디코딩, ping/pong 연결 유지, 이벤트 리스너 추적이 포함된 단일 WebSocket 연결 인터페이스.
4
6
 
@@ -1,4 +1,6 @@
1
- # WebSocketHandler
1
+ # `WebSocketHandler`
2
+
3
+ > **읽어야 하는 상황**: WebSocket 메시지 라우팅, 이벤트 브로드캐스트, 인증 메시지 처리 동작을 이해할 때. `ServiceServer`가 내부적으로 사용한다.
2
4
 
3
5
  다중 WebSocket 연결을 관리하고, 메시지를 서비스로 라우팅하며, 이벤트 브로드캐스팅을 처리하는 인터페이스.
4
6
 
@@ -1,4 +1,6 @@
1
- # ServiceServerOptions
1
+ # `ServiceServerOptions`
2
+
3
+ > **읽어야 하는 상황**: 서버 생성 옵션(rootPath, port, ssl, auth, services)을 구성할 때. 특히 `auth` 필드의 세 가지 상태(`{ jwtSecret }`, `false`, `undefined`)를 이해해야 할 때.
2
4
 
3
5
  서버 생성 시 전달하는 옵션 인터페이스.
4
6
 
@@ -1,4 +1,6 @@
1
- # getConfig
1
+ # `getConfig`
2
+
3
+ > **읽어야 하는 상황**: `.config.json` 파일을 캐싱/자동 리로드로 직접 읽을 때. 일반적으로는 `ServiceContext.getConfig()`를 사용한다 -- 루트/클라이언트별 설정 병합을 자동으로 처리한다.
2
4
 
3
5
  `.config.json` 파일을 읽고 캐싱한다. 파일 변경 시 자동 리로드되며, 캐시는 1시간 후 만료된다.
4
6
 
@@ -8,92 +8,29 @@
8
8
  npm install @simplysm/storage
9
9
  ```
10
10
 
11
- ## 하려는 작업 → 먼저 읽을 파일
11
+ ## 하려는 작업 → 읽을 파일
12
12
 
13
- | 작업 | 먼저 읽을 파일 |
14
- |------|----------------|
15
- | FTP/SFTP 서버에 파일 업로드/다운로드 | [`StorageFactory`](./factory/storage-factory.md) |
16
- | 프로토콜별 구현 차이 확인 (FTP/FTPS) | [`FtpStorageClient`](./clients/ftp-storage-client.md) |
17
- | SFTP 인증 방식 (패스워드/SSH 키) 확인 | [`SftpStorageClient`](./clients/sftp-storage-client.md) |
18
- | 스토리지 작업을 추상화하는 함수 작성 | [`StorageClient`](./types/storage-client.md) |
19
- | 연결 설정 타입 확인 | [`StorageConnConfig`](./types/storage-conn-config.md) |
13
+ ### 파일 전송
20
14
 
21
- ## API Overview
15
+ | 하려는 작업 | 읽을 파일 |
16
+ |-------------|-----------|
17
+ | FTP/FTPS/SFTP 서버에 파일 업로드·다운로드·목록 조회 | [`StorageFactory`](./factory/storage-factory.md) |
18
+ | FTP/FTPS 연결을 직접 생명주기 관리 (장시간 연결 유지 등) | [`FtpStorageClient`](./clients/ftp-storage-client.md) |
19
+ | SFTP 연결을 직접 생명주기 관리하거나 SSH 키 인증 방식 확인 | [`SftpStorageClient`](./clients/sftp-storage-client.md) |
22
20
 
23
- ### Factory
21
+ ### 타입 활용
24
22
 
25
- | Entry | Kind | 언제 쓰나 |
26
- |-------|------|-----------|
27
- | [`StorageFactory`](./factory/storage-factory.md) | class | 스토리지 서버에 연결하여 파일 작업을 수행할 때 (기본 진입점) |
28
-
29
- ### Clients
30
-
31
- | Entry | Kind | 언제 쓰나 |
32
- |-------|------|-----------|
33
- | [`FtpStorageClient`](./clients/ftp-storage-client.md) | class | FTP/FTPS 클라이언트를 직접 생명주기 관리해야 할 때 |
34
- | [`SftpStorageClient`](./clients/sftp-storage-client.md) | class | SFTP 클라이언트를 직접 생명주기 관리해야 할 때 |
35
-
36
- ### Types
37
-
38
- | Entry | Kind | 언제 쓰나 |
39
- |-------|------|-----------|
40
- | [`StorageClient`](./types/storage-client.md) | interface | 스토리지 작업을 프로토콜 무관하게 추상화하는 함수 시그니처에 사용할 때 |
41
- | [`StorageConnConfig`](./types/storage-conn-config.md) | interface | 연결 설정 객체를 타입으로 지정할 때 |
42
- | [`FileInfo`](./types/file-info.md) | interface | `list()` 반환값을 처리할 때 |
43
-
44
- ## Usage Examples
45
-
46
- ### SFTP로 파일 업로드 (StorageFactory 사용 권장)
47
-
48
- ```typescript
49
- import { StorageFactory } from "@simplysm/storage";
50
-
51
- await StorageFactory.connect(
52
- "sftp",
53
- { host: "sftp.example.com", user: "user", password: "pass" },
54
- async (storage) => {
55
- await storage.mkdir("/remote/dir");
56
- await storage.put("/local/file.txt", "/remote/dir/file.txt");
57
- },
58
- );
59
- ```
60
-
61
- 콜백이 완료되거나 예외가 발생하면 자동으로 연결이 종료된다.
62
-
63
- ### FTP로 파일 목록 조회 및 다운로드
64
-
65
- ```typescript
66
- import { StorageFactory } from "@simplysm/storage";
67
-
68
- const files = await StorageFactory.connect(
69
- "ftp",
70
- { host: "ftp.example.com", port: 21, user: "user", password: "pass" },
71
- async (storage) => {
72
- const list = await storage.list("/data");
73
- for (const file of list.filter((f) => f.isFile)) {
74
- const content = await storage.readFile(`/data/${file.name}`);
75
- // content는 Bytes (Uint8Array)
76
- }
77
- return list;
78
- },
79
- );
80
- ```
81
-
82
- ### SSH 키 인증으로 SFTP 연결 (비밀번호 생략)
83
-
84
- ```typescript
85
- import { StorageFactory } from "@simplysm/storage";
86
-
87
- await StorageFactory.connect(
88
- "sftp",
89
- { host: "sftp.example.com", user: "user" }, // password 생략 → SSH agent/키 파일 인증
90
- async (storage) => {
91
- const list = await storage.list("/home/user");
92
- },
93
- );
94
- ```
23
+ | 하려는 작업 | 읽을 파일 |
24
+ |-------------|-----------|
25
+ | 프로토콜 무관하게 스토리지 작업을 추상화하는 함수 시그니처 작성 | [`StorageClient`](./types/storage-client.md) |
26
+ | 연결 설정 객체의 타입 확인 | [`StorageConnConfig`](./types/storage-conn-config.md) |
27
+ | `list()` 반환값의 구조 확인 | [`FileInfo`](./types/file-info.md) |
95
28
 
96
29
  ## 이 패키지를 쓰지 말아야 할 때
97
30
 
98
31
  - 브라우저 환경에서 파일 업로드/다운로드 → 이 패키지는 Node.js 전용이다
99
32
  - HTTP/S3 등 FTP/SFTP 이외의 프로토콜 → 이 패키지는 FTP/FTPS/SFTP만 지원한다
33
+
34
+ ---
35
+
36
+ > API 이름으로 검색: [_api-index.md](./_api-index.md)
@@ -0,0 +1,26 @@
1
+ # API Index — @simplysm/storage
2
+
3
+ > API 이름을 알고 있을 때 해당 문서를 찾는 인덱스.
4
+ > 작업 기반으로 찾으려면 [README.md](./README.md) 참조.
5
+
6
+ ## Factory
7
+
8
+ | API | Kind | 문서 | 언제 쓰나 |
9
+ |-----|------|------|-----------|
10
+ | `StorageFactory` | class | [storage-factory.md](./factory/storage-factory.md) | 스토리지 서버에 연결하여 파일 작업을 수행할 때 (기본 진입점) |
11
+
12
+ ## Clients
13
+
14
+ | API | Kind | 문서 | 언제 쓰나 |
15
+ |-----|------|------|-----------|
16
+ | `FtpStorageClient` | class | [ftp-storage-client.md](./clients/ftp-storage-client.md) | FTP/FTPS 클라이언트를 직접 생명주기 관리해야 할 때 |
17
+ | `SftpStorageClient` | class | [sftp-storage-client.md](./clients/sftp-storage-client.md) | SFTP 클라이언트를 직접 생명주기 관리해야 할 때 |
18
+
19
+ ## Types
20
+
21
+ | API | Kind | 문서 | 언제 쓰나 |
22
+ |-----|------|------|-----------|
23
+ | `StorageClient` | interface | [storage-client.md](./types/storage-client.md) | 스토리지 작업을 프로토콜 무관하게 추상화하는 함수 시그니처에 사용할 때 |
24
+ | `StorageConnConfig` | interface | [storage-conn-config.md](./types/storage-conn-config.md) | 연결 설정 객체를 타입으로 지정할 때 |
25
+ | `FileInfo` | interface | [file-info.md](./types/file-info.md) | `list()` 반환값을 처리할 때 |
26
+ | `StorageProtocol` | type | [storage-factory.md](./factory/storage-factory.md#storageprotocol) | `StorageFactory.connect()`의 `type` 파라미터 타입을 확인할 때 |
@@ -1,6 +1,8 @@
1
1
  # `FtpStorageClient`
2
2
 
3
- FTP/FTPS 프로토콜을 사용하는 스토리지 클라이언트. `basic-ftp` 라이브러리 기반. [`StorageClient`](../types/storage-client.md) 인터페이스를 구현한다.
3
+ > **읽어야 하는 상황**: FTP/FTPS 연결을 직접 생명주기 관리해야 (장시간 연결 유지 등). 단일 작업 단위로 자동 관리하려면 [`StorageFactory`](../factory/storage-factory.md) 사용.
4
+
5
+ `basic-ftp` 라이브러리 기반. [`StorageClient`](../types/storage-client.md) 인터페이스를 구현한다.
4
6
 
5
7
  ## When to use
6
8