@signstack/cli 0.1.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 (269) hide show
  1. package/README.md +458 -0
  2. package/bin/run.js +12 -0
  3. package/dist/apps/signstack-cli/schemas/asset.schema.json +220 -0
  4. package/dist/apps/signstack-cli/schemas/blueprint.schema.json +485 -0
  5. package/dist/apps/signstack-cli/schemas/jsonata-function.schema.json +185 -0
  6. package/dist/apps/signstack-cli/schemas/schema.schema.json +97 -0
  7. package/dist/apps/signstack-cli/schemas/template.schema.json +295 -0
  8. package/dist/apps/signstack-cli/src/commands/auth/login.d.ts +25 -0
  9. package/dist/apps/signstack-cli/src/commands/auth/login.js +229 -0
  10. package/dist/apps/signstack-cli/src/commands/auth/login.js.map +1 -0
  11. package/dist/apps/signstack-cli/src/commands/auth/logout.d.ts +10 -0
  12. package/dist/apps/signstack-cli/src/commands/auth/logout.js +59 -0
  13. package/dist/apps/signstack-cli/src/commands/auth/logout.js.map +1 -0
  14. package/dist/apps/signstack-cli/src/commands/auth/whoami.d.ts +9 -0
  15. package/dist/apps/signstack-cli/src/commands/auth/whoami.js +85 -0
  16. package/dist/apps/signstack-cli/src/commands/auth/whoami.js.map +1 -0
  17. package/dist/apps/signstack-cli/src/commands/generate.d.ts +51 -0
  18. package/dist/apps/signstack-cli/src/commands/generate.js +479 -0
  19. package/dist/apps/signstack-cli/src/commands/generate.js.map +1 -0
  20. package/dist/apps/signstack-cli/src/commands/preview.d.ts +24 -0
  21. package/dist/apps/signstack-cli/src/commands/preview.js +162 -0
  22. package/dist/apps/signstack-cli/src/commands/preview.js.map +1 -0
  23. package/dist/apps/signstack-cli/src/commands/pull.d.ts +28 -0
  24. package/dist/apps/signstack-cli/src/commands/pull.js +244 -0
  25. package/dist/apps/signstack-cli/src/commands/pull.js.map +1 -0
  26. package/dist/apps/signstack-cli/src/commands/push.d.ts +46 -0
  27. package/dist/apps/signstack-cli/src/commands/push.js +460 -0
  28. package/dist/apps/signstack-cli/src/commands/push.js.map +1 -0
  29. package/dist/apps/signstack-cli/src/commands/run.d.ts +22 -0
  30. package/dist/apps/signstack-cli/src/commands/run.js +126 -0
  31. package/dist/apps/signstack-cli/src/commands/run.js.map +1 -0
  32. package/dist/apps/signstack-cli/src/commands/test.d.ts +6 -0
  33. package/dist/apps/signstack-cli/src/commands/test.js +25 -0
  34. package/dist/apps/signstack-cli/src/commands/test.js.map +1 -0
  35. package/dist/apps/signstack-cli/src/commands/validate.d.ts +59 -0
  36. package/dist/apps/signstack-cli/src/commands/validate.js +558 -0
  37. package/dist/apps/signstack-cli/src/commands/validate.js.map +1 -0
  38. package/dist/apps/signstack-cli/src/index.d.ts +1 -0
  39. package/dist/apps/signstack-cli/src/index.js +2 -0
  40. package/dist/apps/signstack-cli/src/index.js.map +1 -0
  41. package/dist/apps/signstack-cli/src/lib/api-client.d.ts +77 -0
  42. package/dist/apps/signstack-cli/src/lib/api-client.js +269 -0
  43. package/dist/apps/signstack-cli/src/lib/api-client.js.map +1 -0
  44. package/dist/apps/signstack-cli/src/lib/base-command.d.ts +38 -0
  45. package/dist/apps/signstack-cli/src/lib/base-command.js +135 -0
  46. package/dist/apps/signstack-cli/src/lib/base-command.js.map +1 -0
  47. package/dist/apps/signstack-cli/src/lib/config.d.ts +47 -0
  48. package/dist/apps/signstack-cli/src/lib/config.js +106 -0
  49. package/dist/apps/signstack-cli/src/lib/config.js.map +1 -0
  50. package/dist/apps/signstack-cli/src/lib/entity-data-resolver.d.ts +31 -0
  51. package/dist/apps/signstack-cli/src/lib/entity-data-resolver.js +107 -0
  52. package/dist/apps/signstack-cli/src/lib/entity-data-resolver.js.map +1 -0
  53. package/dist/apps/signstack-cli/src/lib/local-resource-loader.d.ts +72 -0
  54. package/dist/apps/signstack-cli/src/lib/local-resource-loader.js +238 -0
  55. package/dist/apps/signstack-cli/src/lib/local-resource-loader.js.map +1 -0
  56. package/dist/apps/signstack-cli/src/lib/path-utils.d.ts +4 -0
  57. package/dist/apps/signstack-cli/src/lib/path-utils.js +7 -0
  58. package/dist/apps/signstack-cli/src/lib/path-utils.js.map +1 -0
  59. package/dist/apps/signstack-cli/src/lib/payload-builder.d.ts +127 -0
  60. package/dist/apps/signstack-cli/src/lib/payload-builder.js +545 -0
  61. package/dist/apps/signstack-cli/src/lib/payload-builder.js.map +1 -0
  62. package/dist/apps/signstack-cli/src/lib/preview-handler.d.ts +95 -0
  63. package/dist/apps/signstack-cli/src/lib/preview-handler.js +611 -0
  64. package/dist/apps/signstack-cli/src/lib/preview-handler.js.map +1 -0
  65. package/dist/apps/signstack-cli/src/lib/preview-output-formatter.d.ts +63 -0
  66. package/dist/apps/signstack-cli/src/lib/preview-output-formatter.js +198 -0
  67. package/dist/apps/signstack-cli/src/lib/preview-output-formatter.js.map +1 -0
  68. package/dist/apps/signstack-cli/src/lib/public-api-client.d.ts +13 -0
  69. package/dist/apps/signstack-cli/src/lib/public-api-client.js +39 -0
  70. package/dist/apps/signstack-cli/src/lib/public-api-client.js.map +1 -0
  71. package/dist/apps/signstack-cli/src/lib/resource-puller.d.ts +131 -0
  72. package/dist/apps/signstack-cli/src/lib/resource-puller.js +800 -0
  73. package/dist/apps/signstack-cli/src/lib/resource-puller.js.map +1 -0
  74. package/dist/apps/signstack-cli/src/lib/resource-pusher.d.ts +87 -0
  75. package/dist/apps/signstack-cli/src/lib/resource-pusher.js +361 -0
  76. package/dist/apps/signstack-cli/src/lib/resource-pusher.js.map +1 -0
  77. package/dist/apps/signstack-cli/src/lib/resource-scanner.d.ts +29 -0
  78. package/dist/apps/signstack-cli/src/lib/resource-scanner.js +101 -0
  79. package/dist/apps/signstack-cli/src/lib/resource-scanner.js.map +1 -0
  80. package/dist/apps/signstack-cli/src/lib/resource-validator.d.ts +44 -0
  81. package/dist/apps/signstack-cli/src/lib/resource-validator.js +158 -0
  82. package/dist/apps/signstack-cli/src/lib/resource-validator.js.map +1 -0
  83. package/dist/apps/signstack-cli/src/lib/run-handler.d.ts +47 -0
  84. package/dist/apps/signstack-cli/src/lib/run-handler.js +266 -0
  85. package/dist/apps/signstack-cli/src/lib/run-handler.js.map +1 -0
  86. package/dist/apps/signstack-cli/src/lib/safe-path.d.ts +28 -0
  87. package/dist/apps/signstack-cli/src/lib/safe-path.js +44 -0
  88. package/dist/apps/signstack-cli/src/lib/safe-path.js.map +1 -0
  89. package/dist/apps/signstack-cli/src/lib/scenario-file.d.ts +35 -0
  90. package/dist/apps/signstack-cli/src/lib/scenario-file.js +80 -0
  91. package/dist/apps/signstack-cli/src/lib/scenario-file.js.map +1 -0
  92. package/dist/apps/signstack-cli/src/lib/schema-validator.d.ts +8 -0
  93. package/dist/apps/signstack-cli/src/lib/schema-validator.js +39 -0
  94. package/dist/apps/signstack-cli/src/lib/schema-validator.js.map +1 -0
  95. package/dist/apps/signstack-cli/src/lib/url-validator.d.ts +17 -0
  96. package/dist/apps/signstack-cli/src/lib/url-validator.js +61 -0
  97. package/dist/apps/signstack-cli/src/lib/url-validator.js.map +1 -0
  98. package/dist/apps/signstack-cli/src/lib/yaml-document-parser.d.ts +25 -0
  99. package/dist/apps/signstack-cli/src/lib/yaml-document-parser.js +133 -0
  100. package/dist/apps/signstack-cli/src/lib/yaml-document-parser.js.map +1 -0
  101. package/dist/apps/signstack-cli/src/lib/yaml-transforms.d.ts +3 -0
  102. package/dist/apps/signstack-cli/src/lib/yaml-transforms.js +32 -0
  103. package/dist/apps/signstack-cli/src/lib/yaml-transforms.js.map +1 -0
  104. package/dist/apps/signstack-cli/src/lib/yaml-writer.d.ts +47 -0
  105. package/dist/apps/signstack-cli/src/lib/yaml-writer.js +160 -0
  106. package/dist/apps/signstack-cli/src/lib/yaml-writer.js.map +1 -0
  107. package/dist/apps/signstack-cli/src/types/auth.types.d.ts +48 -0
  108. package/dist/apps/signstack-cli/src/types/auth.types.js +31 -0
  109. package/dist/apps/signstack-cli/src/types/auth.types.js.map +1 -0
  110. package/dist/apps/signstack-cli/src/types/schema.types.d.ts +14 -0
  111. package/dist/apps/signstack-cli/src/types/schema.types.js +16 -0
  112. package/dist/apps/signstack-cli/src/types/schema.types.js.map +1 -0
  113. package/dist/apps/signstack-cli/src/types/yaml.types.d.ts +144 -0
  114. package/dist/apps/signstack-cli/src/types/yaml.types.js +2 -0
  115. package/dist/apps/signstack-cli/src/types/yaml.types.js.map +1 -0
  116. package/dist/libs/common/base/src/index.d.ts +14 -0
  117. package/dist/libs/common/base/src/index.js +44 -0
  118. package/dist/libs/common/base/src/index.js.map +1 -0
  119. package/dist/libs/common/base/src/lib/address.util.d.ts +12 -0
  120. package/dist/libs/common/base/src/lib/address.util.js +55 -0
  121. package/dist/libs/common/base/src/lib/address.util.js.map +1 -0
  122. package/dist/libs/common/base/src/lib/country-code-data.d.ts +5 -0
  123. package/dist/libs/common/base/src/lib/country-code-data.js +1256 -0
  124. package/dist/libs/common/base/src/lib/country-code-data.js.map +1 -0
  125. package/dist/libs/common/base/src/lib/date.util.d.ts +13 -0
  126. package/dist/libs/common/base/src/lib/date.util.js +135 -0
  127. package/dist/libs/common/base/src/lib/date.util.js.map +1 -0
  128. package/dist/libs/common/base/src/lib/headers.d.ts +1 -0
  129. package/dist/libs/common/base/src/lib/headers.js +5 -0
  130. package/dist/libs/common/base/src/lib/headers.js.map +1 -0
  131. package/dist/libs/common/base/src/lib/jsonata.service.d.ts +32 -0
  132. package/dist/libs/common/base/src/lib/jsonata.service.js +207 -0
  133. package/dist/libs/common/base/src/lib/jsonata.service.js.map +1 -0
  134. package/dist/libs/common/base/src/lib/key-validation.constants.d.ts +37 -0
  135. package/dist/libs/common/base/src/lib/key-validation.constants.js +144 -0
  136. package/dist/libs/common/base/src/lib/key-validation.constants.js.map +1 -0
  137. package/dist/libs/common/base/src/lib/phone-util.d.ts +16 -0
  138. package/dist/libs/common/base/src/lib/phone-util.js +61 -0
  139. package/dist/libs/common/base/src/lib/phone-util.js.map +1 -0
  140. package/dist/libs/common/base/src/lib/schema-validation.util.d.ts +24 -0
  141. package/dist/libs/common/base/src/lib/schema-validation.util.js +155 -0
  142. package/dist/libs/common/base/src/lib/schema-validation.util.js.map +1 -0
  143. package/dist/libs/common/base/src/lib/string-builder.d.ts +48 -0
  144. package/dist/libs/common/base/src/lib/string-builder.js +90 -0
  145. package/dist/libs/common/base/src/lib/string-builder.js.map +1 -0
  146. package/dist/libs/common/base/src/lib/util.d.ts +20 -0
  147. package/dist/libs/common/base/src/lib/util.js +110 -0
  148. package/dist/libs/common/base/src/lib/util.js.map +1 -0
  149. package/dist/libs/signstack/base/schemas/asset.schema.json +220 -0
  150. package/dist/libs/signstack/base/schemas/blueprint.schema.json +485 -0
  151. package/dist/libs/signstack/base/schemas/jsonata-function.schema.json +185 -0
  152. package/dist/libs/signstack/base/schemas/schema.schema.json +97 -0
  153. package/dist/libs/signstack/base/schemas/template.schema.json +295 -0
  154. package/dist/libs/signstack/base/src/index.d.ts +28 -0
  155. package/dist/libs/signstack/base/src/index.js +32 -0
  156. package/dist/libs/signstack/base/src/index.js.map +1 -0
  157. package/dist/libs/signstack/base/src/lib/constants.d.ts +123 -0
  158. package/dist/libs/signstack/base/src/lib/constants.js +131 -0
  159. package/dist/libs/signstack/base/src/lib/constants.js.map +1 -0
  160. package/dist/libs/signstack/base/src/lib/hash.util.d.ts +58 -0
  161. package/dist/libs/signstack/base/src/lib/hash.util.js +90 -0
  162. package/dist/libs/signstack/base/src/lib/hash.util.js.map +1 -0
  163. package/dist/libs/signstack/base/src/lib/is-schema-renderable.util.d.ts +29 -0
  164. package/dist/libs/signstack/base/src/lib/is-schema-renderable.util.js +93 -0
  165. package/dist/libs/signstack/base/src/lib/is-schema-renderable.util.js.map +1 -0
  166. package/dist/libs/signstack/base/src/lib/models/ai-chat.d.ts +41 -0
  167. package/dist/libs/signstack/base/src/lib/models/ai-chat.js +3 -0
  168. package/dist/libs/signstack/base/src/lib/models/ai-chat.js.map +1 -0
  169. package/dist/libs/signstack/base/src/lib/models/api-key.d.ts +54 -0
  170. package/dist/libs/signstack/base/src/lib/models/api-key.js +18 -0
  171. package/dist/libs/signstack/base/src/lib/models/api-key.js.map +1 -0
  172. package/dist/libs/signstack/base/src/lib/models/asset.d.ts +101 -0
  173. package/dist/libs/signstack/base/src/lib/models/asset.js +11 -0
  174. package/dist/libs/signstack/base/src/lib/models/asset.js.map +1 -0
  175. package/dist/libs/signstack/base/src/lib/models/auth.d.ts +142 -0
  176. package/dist/libs/signstack/base/src/lib/models/auth.js +35 -0
  177. package/dist/libs/signstack/base/src/lib/models/auth.js.map +1 -0
  178. package/dist/libs/signstack/base/src/lib/models/base.d.ts +134 -0
  179. package/dist/libs/signstack/base/src/lib/models/base.js +71 -0
  180. package/dist/libs/signstack/base/src/lib/models/base.js.map +1 -0
  181. package/dist/libs/signstack/base/src/lib/models/blueprint.d.ts +311 -0
  182. package/dist/libs/signstack/base/src/lib/models/blueprint.js +9 -0
  183. package/dist/libs/signstack/base/src/lib/models/blueprint.js.map +1 -0
  184. package/dist/libs/signstack/base/src/lib/models/file.d.ts +75 -0
  185. package/dist/libs/signstack/base/src/lib/models/file.js +9 -0
  186. package/dist/libs/signstack/base/src/lib/models/file.js.map +1 -0
  187. package/dist/libs/signstack/base/src/lib/models/jsonata-function.d.ts +111 -0
  188. package/dist/libs/signstack/base/src/lib/models/jsonata-function.js +19 -0
  189. package/dist/libs/signstack/base/src/lib/models/jsonata-function.js.map +1 -0
  190. package/dist/libs/signstack/base/src/lib/models/marketplace-listing.d.ts +132 -0
  191. package/dist/libs/signstack/base/src/lib/models/marketplace-listing.js +22 -0
  192. package/dist/libs/signstack/base/src/lib/models/marketplace-listing.js.map +1 -0
  193. package/dist/libs/signstack/base/src/lib/models/membership.d.ts +127 -0
  194. package/dist/libs/signstack/base/src/lib/models/membership.js +22 -0
  195. package/dist/libs/signstack/base/src/lib/models/membership.js.map +1 -0
  196. package/dist/libs/signstack/base/src/lib/models/namespace.d.ts +87 -0
  197. package/dist/libs/signstack/base/src/lib/models/namespace.js +57 -0
  198. package/dist/libs/signstack/base/src/lib/models/namespace.js.map +1 -0
  199. package/dist/libs/signstack/base/src/lib/models/organization.d.ts +79 -0
  200. package/dist/libs/signstack/base/src/lib/models/organization.js +41 -0
  201. package/dist/libs/signstack/base/src/lib/models/organization.js.map +1 -0
  202. package/dist/libs/signstack/base/src/lib/models/render-job.d.ts +88 -0
  203. package/dist/libs/signstack/base/src/lib/models/render-job.js +3 -0
  204. package/dist/libs/signstack/base/src/lib/models/render-job.js.map +1 -0
  205. package/dist/libs/signstack/base/src/lib/models/resource-edge.d.ts +60 -0
  206. package/dist/libs/signstack/base/src/lib/models/resource-edge.js +202 -0
  207. package/dist/libs/signstack/base/src/lib/models/resource-edge.js.map +1 -0
  208. package/dist/libs/signstack/base/src/lib/models/scenario.d.ts +138 -0
  209. package/dist/libs/signstack/base/src/lib/models/scenario.js +14 -0
  210. package/dist/libs/signstack/base/src/lib/models/scenario.js.map +1 -0
  211. package/dist/libs/signstack/base/src/lib/models/schema.d.ts +131 -0
  212. package/dist/libs/signstack/base/src/lib/models/schema.js +44 -0
  213. package/dist/libs/signstack/base/src/lib/models/schema.js.map +1 -0
  214. package/dist/libs/signstack/base/src/lib/models/shareable-link.d.ts +215 -0
  215. package/dist/libs/signstack/base/src/lib/models/shareable-link.js +27 -0
  216. package/dist/libs/signstack/base/src/lib/models/shareable-link.js.map +1 -0
  217. package/dist/libs/signstack/base/src/lib/models/subscription.d.ts +279 -0
  218. package/dist/libs/signstack/base/src/lib/models/subscription.js +105 -0
  219. package/dist/libs/signstack/base/src/lib/models/subscription.js.map +1 -0
  220. package/dist/libs/signstack/base/src/lib/models/template.d.ts +248 -0
  221. package/dist/libs/signstack/base/src/lib/models/template.js +32 -0
  222. package/dist/libs/signstack/base/src/lib/models/template.js.map +1 -0
  223. package/dist/libs/signstack/base/src/lib/models/user.d.ts +30 -0
  224. package/dist/libs/signstack/base/src/lib/models/user.js +3 -0
  225. package/dist/libs/signstack/base/src/lib/models/user.js.map +1 -0
  226. package/dist/libs/signstack/base/src/lib/models/webhook.d.ts +223 -0
  227. package/dist/libs/signstack/base/src/lib/models/webhook.js +62 -0
  228. package/dist/libs/signstack/base/src/lib/models/webhook.js.map +1 -0
  229. package/dist/libs/signstack/base/src/lib/models/workflow.d.ts +917 -0
  230. package/dist/libs/signstack/base/src/lib/models/workflow.js +152 -0
  231. package/dist/libs/signstack/base/src/lib/models/workflow.js.map +1 -0
  232. package/dist/libs/signstack/base/src/lib/util.d.ts +92 -0
  233. package/dist/libs/signstack/base/src/lib/util.js +406 -0
  234. package/dist/libs/signstack/base/src/lib/util.js.map +1 -0
  235. package/dist/libs/signstack/base/src/lib/validation/dependency-graph.d.ts +94 -0
  236. package/dist/libs/signstack/base/src/lib/validation/dependency-graph.js +446 -0
  237. package/dist/libs/signstack/base/src/lib/validation/dependency-graph.js.map +1 -0
  238. package/dist/libs/signstack/base/src/lib/validation/graph.types.d.ts +57 -0
  239. package/dist/libs/signstack/base/src/lib/validation/graph.types.js +8 -0
  240. package/dist/libs/signstack/base/src/lib/validation/graph.types.js.map +1 -0
  241. package/dist/libs/signstack/base/src/lib/validation/index.d.ts +9 -0
  242. package/dist/libs/signstack/base/src/lib/validation/index.js +23 -0
  243. package/dist/libs/signstack/base/src/lib/validation/index.js.map +1 -0
  244. package/dist/libs/signstack/base/src/lib/validation/resource-schemas.d.ts +3 -0
  245. package/dist/libs/signstack/base/src/lib/validation/resource-schemas.js +27 -0
  246. package/dist/libs/signstack/base/src/lib/validation/resource-schemas.js.map +1 -0
  247. package/dist/libs/signstack/base/src/lib/validation/schema-validation.types.d.ts +57 -0
  248. package/dist/libs/signstack/base/src/lib/validation/schema-validation.types.js +57 -0
  249. package/dist/libs/signstack/base/src/lib/validation/schema-validation.types.js.map +1 -0
  250. package/dist/libs/signstack/base/src/lib/validation/schema-validator.d.ts +38 -0
  251. package/dist/libs/signstack/base/src/lib/validation/schema-validator.js +146 -0
  252. package/dist/libs/signstack/base/src/lib/validation/schema-validator.js.map +1 -0
  253. package/dist/libs/signstack/base/src/lib/validation/validate-dependencies.d.ts +22 -0
  254. package/dist/libs/signstack/base/src/lib/validation/validate-dependencies.js +69 -0
  255. package/dist/libs/signstack/base/src/lib/validation/validate-dependencies.js.map +1 -0
  256. package/dist/libs/signstack/base/src/lib/validation/validate-resource-tree.d.ts +37 -0
  257. package/dist/libs/signstack/base/src/lib/validation/validate-resource-tree.js +250 -0
  258. package/dist/libs/signstack/base/src/lib/validation/validate-resource-tree.js.map +1 -0
  259. package/dist/libs/signstack/base/src/lib/validation/validate-template-inputs.d.ts +24 -0
  260. package/dist/libs/signstack/base/src/lib/validation/validate-template-inputs.js +98 -0
  261. package/dist/libs/signstack/base/src/lib/validation/validate-template-inputs.js.map +1 -0
  262. package/dist/libs/signstack/base/src/lib/validation/yaml-document-utils.d.ts +12 -0
  263. package/dist/libs/signstack/base/src/lib/validation/yaml-document-utils.js +50 -0
  264. package/dist/libs/signstack/base/src/lib/validation/yaml-document-utils.js.map +1 -0
  265. package/dist/libs/signstack/base/src/lib/yaml-spec-converter.d.ts +101 -0
  266. package/dist/libs/signstack/base/src/lib/yaml-spec-converter.js +998 -0
  267. package/dist/libs/signstack/base/src/lib/yaml-spec-converter.js.map +1 -0
  268. package/oclif.manifest.json +822 -0
  269. package/package.json +101 -0
@@ -0,0 +1,127 @@
1
+ import { type BlueprintResource, type ScenarioEntity, type RenderTemplateReq, type RenderBlueprintReq, type TemplateResource, type AssetResource, type SchemaResource, type JsonataFunctionResource, type CreateWorkflowReq, type CreateWorkflowMode, type ParsedDocument } from '@signstack/base';
2
+ /** Asset file ready for upload */
3
+ export interface AssetFilePayload {
4
+ assetKey: string;
5
+ assetVersion: string;
6
+ fileName: string;
7
+ contentType: string;
8
+ content: Buffer;
9
+ fileHash: string;
10
+ sizeBytes: number;
11
+ }
12
+ /**
13
+ * PayloadBuilder - Converts YAML documents to typed API payload format
14
+ *
15
+ * Transforms parsed YAML documents into the format expected by the
16
+ * render-inline API endpoint (matching BlueprintResp / TemplateResp).
17
+ */
18
+ export declare class PayloadBuilder {
19
+ /**
20
+ * Build Blueprint payload from YAML
21
+ * Returns a BlueprintResource matching the unified RenderBlueprintReq shape
22
+ */
23
+ buildBlueprintPayload(doc: ParsedDocument): BlueprintResource;
24
+ /**
25
+ * Transform YAML participants to BlueprintParticipant[] (API shape).
26
+ */
27
+ private transformBlueprintParticipants;
28
+ /**
29
+ * Transform YAML orchestration tree to BlueprintStep tree (API shape).
30
+ * Normalizes action: YAML uses envelope/document/role → API uses envelopeKey/documentKey/roleKey.
31
+ */
32
+ private transformOrchestrationToTree;
33
+ /**
34
+ * Build RenderTemplateReq with inline resources from YAML documents.
35
+ * Ships resources as structured documents — no tree flattening.
36
+ */
37
+ buildRenderTemplateReq(params: {
38
+ templateDoc: ParsedDocument;
39
+ assetDocs: ParsedDocument[];
40
+ functionDocs?: ParsedDocument[];
41
+ schemaDocs?: ParsedDocument[];
42
+ fileIdMap?: Map<string, string>;
43
+ entities?: ScenarioEntity[];
44
+ inlineOnly?: boolean;
45
+ skipSignatureFields?: boolean;
46
+ }): RenderTemplateReq;
47
+ /**
48
+ * Build RenderBlueprintReq with inline resources from YAML documents.
49
+ */
50
+ buildRenderBlueprintReq(params: {
51
+ blueprintDoc: ParsedDocument;
52
+ templateDocs: ParsedDocument[];
53
+ assetDocs: ParsedDocument[];
54
+ functionDocs?: ParsedDocument[];
55
+ schemaDocs?: ParsedDocument[];
56
+ fileIdMap?: Map<string, string>;
57
+ entities?: ScenarioEntity[];
58
+ inlineOnly?: boolean;
59
+ skipSignatureFields?: boolean;
60
+ combinePdfs?: boolean;
61
+ }): RenderBlueprintReq;
62
+ /**
63
+ * Build CreateWorkflowReq with inline resources from YAML documents.
64
+ */
65
+ buildCreateWorkflowReq(params: {
66
+ blueprintDoc: ParsedDocument;
67
+ templateDocs: ParsedDocument[];
68
+ assetDocs: ParsedDocument[];
69
+ functionDocs?: ParsedDocument[];
70
+ schemaDocs?: ParsedDocument[];
71
+ fileIdMap?: Map<string, string>;
72
+ entities?: {
73
+ key: string;
74
+ data: Record<string, any>;
75
+ }[];
76
+ inlineOnly?: boolean;
77
+ mode?: CreateWorkflowMode;
78
+ }): CreateWorkflowReq;
79
+ /**
80
+ * Build a TemplateResource from a YAML template document.
81
+ */
82
+ buildTemplateResource(doc: ParsedDocument): TemplateResource;
83
+ /**
84
+ * Build an AssetResource from a YAML asset document.
85
+ * For text assets: reads file content. For binary assets: uses fileIdMap.
86
+ */
87
+ buildAssetResource(doc: ParsedDocument, fileIdMap?: Map<string, string>): AssetResource | null;
88
+ /**
89
+ * Build AssetHtmlConfigRefs from YAML spec.
90
+ * Maps YAML format (name→ref) to API format ({ key, version, name? }).
91
+ */
92
+ private buildAssetHtmlConfigRefs;
93
+ /**
94
+ * Build a JsonataFunctionResource from a YAML function document.
95
+ */
96
+ buildFunctionResource(doc: ParsedDocument): JsonataFunctionResource | null;
97
+ /**
98
+ * Build a SchemaResource from a YAML schema document.
99
+ */
100
+ buildSchemaResource(doc: ParsedDocument): SchemaResource | null;
101
+ /**
102
+ * Resolve a file path reference from a YAML document, with path-traversal protection.
103
+ *
104
+ * The resolved path must stay within the project root, defined as the parent of
105
+ * the directory containing the YAML file. This allows cross-subdirectory references
106
+ * (e.g., `schemas/foo.yaml` referencing `../definitions/foo.json`) while still
107
+ * preventing traversal outside the project.
108
+ *
109
+ * Returns null if the path resolves outside the project root.
110
+ */
111
+ private resolveFileRef;
112
+ /**
113
+ * Read asset file content as text (for HTML/CSS assets)
114
+ * Returns null if file not found or can't be read
115
+ */
116
+ readAssetFileContent(doc: ParsedDocument): string | null;
117
+ /**
118
+ * Build Asset file payload from YAML
119
+ * Returns file content ready for upload, or null if no file
120
+ */
121
+ buildAssetPayload(doc: ParsedDocument): AssetFilePayload | null;
122
+ /**
123
+ * Build Schema payload - reads the JSON definition file
124
+ * Returns the parsed document with definition loaded (for entity data generation)
125
+ */
126
+ buildSchemaPayload(doc: ParsedDocument): ParsedDocument;
127
+ }
@@ -0,0 +1,545 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { dirname, resolve, basename, sep } from 'node:path';
3
+ import { createHash } from 'node:crypto';
4
+ import { JsonataFunctionParamType, JsonataFunctionItemType, JsonSchemaDraft, } from '@signstack/base';
5
+ import { extractBlueprintInputKey, getContentType, transformField, transformInputs, transformRole, normalizeExpression, normalizeYamlFunctions, } from './yaml-transforms.js';
6
+ /**
7
+ * PayloadBuilder - Converts YAML documents to typed API payload format
8
+ *
9
+ * Transforms parsed YAML documents into the format expected by the
10
+ * render-inline API endpoint (matching BlueprintResp / TemplateResp).
11
+ */
12
+ export class PayloadBuilder {
13
+ /**
14
+ * Build Blueprint payload from YAML
15
+ * Returns a BlueprintResource matching the unified RenderBlueprintReq shape
16
+ */
17
+ buildBlueprintPayload(doc) {
18
+ const spec = doc.content['spec'];
19
+ const meta = doc.content['metadata'];
20
+ const inputs = transformInputs(spec?.inputs ?? []);
21
+ const participants = this.transformBlueprintParticipants(spec?.participants ?? []);
22
+ const orchestration = spec?.orchestration
23
+ ? this.transformOrchestrationToTree(spec.orchestration)
24
+ : undefined;
25
+ const envelopes = (spec?.envelopes ?? []).map((env) => ({
26
+ key: env.key,
27
+ subject: env.subject ?? env.name ?? env.key,
28
+ documents: (env.documents ?? []).map((d) => {
29
+ const [templateKey, templateVersion] = (d.template ?? '').split('@');
30
+ const yamlInputMap = d.inputMap;
31
+ // Only send inputMap when explicitly specified in YAML.
32
+ // undefined → auto-map by matching keys; [] or populated → explicit mapping.
33
+ const inputMap = yamlInputMap
34
+ ? Object.entries(yamlInputMap).map(([k, v]) => ({
35
+ templateInputKey: k,
36
+ blueprintInputKey: typeof v === 'string' ? extractBlueprintInputKey(v) : '',
37
+ }))
38
+ : undefined;
39
+ return {
40
+ key: d.key,
41
+ name: d.name ?? d.key,
42
+ templateKey,
43
+ templateVersion,
44
+ inputMap,
45
+ includeIf: d.includeIf,
46
+ iterator: d.iterator,
47
+ fileId: normalizeExpression(d.fileId),
48
+ };
49
+ }),
50
+ }));
51
+ const functions = normalizeYamlFunctions(spec?.functions);
52
+ return {
53
+ metadata: {
54
+ key: doc.key,
55
+ version: doc.version,
56
+ name: meta?.name ?? doc.key,
57
+ description: meta?.description,
58
+ },
59
+ spec: { envelopes, inputs, participants, orchestration, functions },
60
+ };
61
+ }
62
+ /**
63
+ * Transform YAML participants to BlueprintParticipant[] (API shape).
64
+ */
65
+ transformBlueprintParticipants(yamlParticipants) {
66
+ if (yamlParticipants.length === 0)
67
+ return undefined;
68
+ return yamlParticipants.map((p) => ({
69
+ key: p.key,
70
+ name: typeof p.name === 'string' ? p.name : p.key,
71
+ roleCategory: p.roleCategory,
72
+ participantName: p.name,
73
+ participantEmail: p.email,
74
+ }));
75
+ }
76
+ /**
77
+ * Transform YAML orchestration tree to BlueprintStep tree (API shape).
78
+ * Normalizes action: YAML uses envelope/document/role → API uses envelopeKey/documentKey/roleKey.
79
+ */
80
+ transformOrchestrationToTree(node) {
81
+ const rawAction = node.action;
82
+ if (node.type === 'group') {
83
+ const step = {
84
+ key: node.key,
85
+ type: node.type,
86
+ execution: node.execution === 'parallel' ? 'parallel' : 'sequential',
87
+ completion: node.completion === 'any'
88
+ ? 'any'
89
+ : node.completion === 'quorum'
90
+ ? 'quorum'
91
+ : 'all',
92
+ children: (node.children ?? []).map((c) => this.transformOrchestrationToTree(c)),
93
+ };
94
+ if (node.name)
95
+ step.name = node.name;
96
+ if (node.includeIf)
97
+ step.includeIf = node.includeIf;
98
+ if (node.quorum != null)
99
+ step.quorum = node.quorum;
100
+ if (node.onComplete)
101
+ step.onComplete = node.onComplete;
102
+ return step;
103
+ }
104
+ const step = {
105
+ key: node.key,
106
+ type: node.type,
107
+ participantKey: node.participant,
108
+ };
109
+ if (node.name)
110
+ step.name = node.name;
111
+ if (node.includeIf)
112
+ step.includeIf = node.includeIf;
113
+ if (node.onComplete)
114
+ step.onComplete = node.onComplete;
115
+ if (rawAction) {
116
+ step.action = {
117
+ type: (rawAction.type === 'sign' ? 'sign' : rawAction.type),
118
+ envelopeKey: rawAction.envelopeKey ?? rawAction.envelope ?? '',
119
+ assignments: (rawAction.assignments ?? []).map((a) => ({
120
+ documentKey: a.documentKey ?? a.document ?? '',
121
+ roleKey: a.roleKey ?? a.role ?? '',
122
+ })),
123
+ };
124
+ }
125
+ return step;
126
+ }
127
+ /**
128
+ * Build RenderTemplateReq with inline resources from YAML documents.
129
+ * Ships resources as structured documents — no tree flattening.
130
+ */
131
+ buildRenderTemplateReq(params) {
132
+ const { templateDoc, assetDocs, functionDocs, schemaDocs, fileIdMap, entities, inlineOnly, skipSignatureFields, } = params;
133
+ // Build template resource
134
+ const template = this.buildTemplateResource(templateDoc);
135
+ // Build asset resources
136
+ const assets = assetDocs
137
+ .map((doc) => this.buildAssetResource(doc, fileIdMap))
138
+ .filter((a) => a !== null);
139
+ // Build function resources
140
+ const functions = (functionDocs ?? [])
141
+ .map((doc) => this.buildFunctionResource(doc))
142
+ .filter((f) => f !== null);
143
+ // Build schema resources
144
+ const schemas = (schemaDocs ?? [])
145
+ .map((doc) => this.buildSchemaResource(doc))
146
+ .filter((s) => s !== null);
147
+ return {
148
+ inlineResources: {
149
+ template,
150
+ assets: assets.length > 0 ? assets : undefined,
151
+ functions: functions.length > 0 ? functions : undefined,
152
+ schemas: schemas.length > 0 ? schemas : undefined,
153
+ inlineOnly,
154
+ },
155
+ entities: entities?.length
156
+ ? entities.map((e) => ({
157
+ inputKey: e.key,
158
+ data: e.data,
159
+ }))
160
+ : undefined,
161
+ options: { skipSignatureFields },
162
+ };
163
+ }
164
+ /**
165
+ * Build RenderBlueprintReq with inline resources from YAML documents.
166
+ */
167
+ buildRenderBlueprintReq(params) {
168
+ const { blueprintDoc, templateDocs, assetDocs, functionDocs, schemaDocs, fileIdMap, entities, inlineOnly, skipSignatureFields, combinePdfs, } = params;
169
+ // Build blueprint resource
170
+ const blueprint = this.buildBlueprintPayload(blueprintDoc);
171
+ // Build template resources
172
+ const templates = templateDocs.map((doc) => this.buildTemplateResource(doc));
173
+ // Build asset resources
174
+ const assets = assetDocs
175
+ .map((doc) => this.buildAssetResource(doc, fileIdMap))
176
+ .filter((a) => a !== null);
177
+ // Build function resources
178
+ const functions = (functionDocs ?? [])
179
+ .map((doc) => this.buildFunctionResource(doc))
180
+ .filter((f) => f !== null);
181
+ // Build schema resources
182
+ const schemas = (schemaDocs ?? [])
183
+ .map((doc) => this.buildSchemaResource(doc))
184
+ .filter((s) => s !== null);
185
+ return {
186
+ inlineResources: {
187
+ blueprint,
188
+ templates: templates.length > 0 ? templates : undefined,
189
+ assets: assets.length > 0 ? assets : undefined,
190
+ functions: functions.length > 0 ? functions : undefined,
191
+ schemas: schemas.length > 0 ? schemas : undefined,
192
+ },
193
+ entities: entities?.length
194
+ ? entities.map((e) => ({
195
+ inputKey: e.key,
196
+ data: e.data,
197
+ }))
198
+ : undefined,
199
+ options: {
200
+ inlineOnly,
201
+ skipSignatureFields,
202
+ combinePdfs,
203
+ },
204
+ };
205
+ }
206
+ /**
207
+ * Build CreateWorkflowReq with inline resources from YAML documents.
208
+ */
209
+ buildCreateWorkflowReq(params) {
210
+ const { blueprintDoc, templateDocs, assetDocs, functionDocs, schemaDocs, fileIdMap, entities, inlineOnly, mode, } = params;
211
+ // Build blueprint resource
212
+ const blueprint = this.buildBlueprintPayload(blueprintDoc);
213
+ // Build template resources
214
+ const templates = templateDocs.map((doc) => this.buildTemplateResource(doc));
215
+ // Build asset resources
216
+ const assets = assetDocs
217
+ .map((doc) => this.buildAssetResource(doc, fileIdMap))
218
+ .filter((a) => a !== null);
219
+ // Build function resources
220
+ const functions = (functionDocs ?? [])
221
+ .map((doc) => this.buildFunctionResource(doc))
222
+ .filter((f) => f !== null);
223
+ // Build schema resources
224
+ const schemas = (schemaDocs ?? [])
225
+ .map((doc) => this.buildSchemaResource(doc))
226
+ .filter((s) => s !== null);
227
+ // Convert entities array to flat data map
228
+ const data = entities?.length
229
+ ? Object.fromEntries(entities.map((e) => [e.key, e.data]))
230
+ : undefined;
231
+ return {
232
+ inlineResources: {
233
+ blueprint,
234
+ templates: templates.length > 0 ? templates : undefined,
235
+ assets: assets.length > 0 ? assets : undefined,
236
+ functions: functions.length > 0 ? functions : undefined,
237
+ schemas: schemas.length > 0 ? schemas : undefined,
238
+ },
239
+ data,
240
+ options: mode || inlineOnly ? { mode, inlineOnly } : undefined,
241
+ };
242
+ }
243
+ /**
244
+ * Build a TemplateResource from a YAML template document.
245
+ */
246
+ buildTemplateResource(doc) {
247
+ const spec = doc.content['spec'];
248
+ const meta = doc.content['metadata'];
249
+ const [contentKey, contentVersion] = (spec?.content ?? '').split('@');
250
+ const fields = (spec?.fields ?? []).map((f) => transformField(f));
251
+ const inputs = transformInputs(spec?.inputs ?? []);
252
+ const roles = (spec?.roles ?? []).map((r) => transformRole(r));
253
+ const data = spec?.data?.transform
254
+ ? { transform: spec.data.transform }
255
+ : undefined;
256
+ const functions = normalizeYamlFunctions(spec?.functions);
257
+ return {
258
+ metadata: {
259
+ key: doc.key,
260
+ version: doc.version,
261
+ name: meta?.name ?? doc.key,
262
+ description: meta?.description,
263
+ },
264
+ spec: {
265
+ type: (spec?.type ?? 'pdf'),
266
+ contentKey,
267
+ contentVersion,
268
+ fields,
269
+ inputs,
270
+ roles,
271
+ data,
272
+ functions,
273
+ },
274
+ };
275
+ }
276
+ /**
277
+ * Build an AssetResource from a YAML asset document.
278
+ * For text assets: reads file content. For binary assets: uses fileIdMap.
279
+ */
280
+ buildAssetResource(doc, fileIdMap) {
281
+ const spec = doc.content['spec'];
282
+ const meta = doc.content['metadata'];
283
+ const assetType = spec?.['type'] ?? '';
284
+ // Text assets: read content from file
285
+ const isTextAsset = ['html', 'css', 'markdown'].includes(assetType);
286
+ let content;
287
+ let fileId;
288
+ if (isTextAsset) {
289
+ content = this.readAssetFileContent(doc) ?? undefined;
290
+ // Also check inline content from synthetic docs
291
+ if (!content &&
292
+ spec?.['content'] &&
293
+ typeof spec['content'] === 'string') {
294
+ content = spec['content'];
295
+ }
296
+ }
297
+ else {
298
+ // Binary assets: look up fileId
299
+ fileId = fileIdMap?.get(`${doc.key}@${doc.version}`);
300
+ }
301
+ // Build htmlConfig refs from YAML spec
302
+ const htmlConfig = this.buildAssetHtmlConfigRefs(spec);
303
+ return {
304
+ metadata: {
305
+ key: doc.key,
306
+ version: doc.version,
307
+ name: meta?.name ?? doc.key,
308
+ description: meta?.description,
309
+ },
310
+ spec: {
311
+ type: assetType,
312
+ content,
313
+ fileId,
314
+ htmlConfig: htmlConfig ?? undefined,
315
+ },
316
+ };
317
+ }
318
+ /**
319
+ * Build AssetHtmlConfigRefs from YAML spec.
320
+ * Maps YAML format (name→ref) to API format ({ key, version, name? }).
321
+ */
322
+ buildAssetHtmlConfigRefs(spec) {
323
+ if (!spec)
324
+ return null;
325
+ const yamlPartials = spec['partials'];
326
+ const yamlStyles = spec['styles'];
327
+ const yamlImages = spec['images'];
328
+ const dataSpec = spec['data'];
329
+ const schemaRef = dataSpec?.['schema'];
330
+ if (!yamlPartials && !yamlStyles && !yamlImages && !schemaRef) {
331
+ return null;
332
+ }
333
+ const partials = yamlPartials
334
+ ? Object.entries(yamlPartials).map(([alias, ref]) => {
335
+ const assetRef = typeof ref === 'string'
336
+ ? ref
337
+ : ref?.['asset'];
338
+ const [key, version] = (assetRef ?? '').split('@');
339
+ const roleMap = typeof ref === 'object'
340
+ ? ref?.['roleMap']
341
+ : undefined;
342
+ return { key, version, alias, ...(roleMap ? { roleMap } : {}) };
343
+ })
344
+ : undefined;
345
+ const styles = yamlStyles
346
+ ? yamlStyles.map((ref) => {
347
+ const [key, version] = ref.split('@');
348
+ return { key, version };
349
+ })
350
+ : undefined;
351
+ const images = yamlImages
352
+ ? Object.entries(yamlImages).map(([alias, ref]) => {
353
+ const [key, version] = ref.split('@');
354
+ return { key, version, alias };
355
+ })
356
+ : undefined;
357
+ let schemaKey;
358
+ let schemaVersion;
359
+ if (schemaRef) {
360
+ [schemaKey, schemaVersion] = schemaRef.split('@');
361
+ }
362
+ return {
363
+ partials: partials?.length ? partials : undefined,
364
+ styles: styles?.length ? styles : undefined,
365
+ images: images?.length ? images : undefined,
366
+ data: schemaKey ? { schemaKey, schemaVersion } : undefined,
367
+ };
368
+ }
369
+ /**
370
+ * Build a JsonataFunctionResource from a YAML function document.
371
+ */
372
+ buildFunctionResource(doc) {
373
+ const spec = doc.content['spec'];
374
+ const meta = doc.content['metadata'];
375
+ if (!spec?.['body'])
376
+ return null;
377
+ const yamlParams = spec['params'];
378
+ const params = yamlParams?.map((p) => {
379
+ const type = p.type;
380
+ const itemType = type === JsonataFunctionParamType.Array && p.itemType
381
+ ? p.itemType
382
+ : undefined;
383
+ const allowsSchema = type === JsonataFunctionParamType.Object ||
384
+ (type === JsonataFunctionParamType.Array &&
385
+ itemType === JsonataFunctionItemType.Object);
386
+ const [schemaKey, schemaVersion] = (p.schema ?? '').split('@');
387
+ return {
388
+ name: p.name,
389
+ type,
390
+ ...(itemType ? { itemType } : {}),
391
+ ...(allowsSchema && schemaKey ? { schemaKey, schemaVersion } : {}),
392
+ };
393
+ });
394
+ const yamlReturn = spec['returnType'];
395
+ const returnTypeVal = (yamlReturn?.type ??
396
+ 'string');
397
+ const returnItemType = returnTypeVal === JsonataFunctionParamType.Array && yamlReturn?.itemType
398
+ ? yamlReturn.itemType
399
+ : undefined;
400
+ const returnAllowsSchema = returnTypeVal === JsonataFunctionParamType.Object ||
401
+ (returnTypeVal === JsonataFunctionParamType.Array &&
402
+ returnItemType === JsonataFunctionItemType.Object);
403
+ const [returnSchemaKey, returnSchemaVersion] = (yamlReturn?.schema ?? '').split('@');
404
+ return {
405
+ metadata: {
406
+ key: doc.key,
407
+ version: doc.version,
408
+ name: meta?.name ?? doc.key,
409
+ description: meta?.description,
410
+ },
411
+ spec: {
412
+ params,
413
+ returnType: {
414
+ type: returnTypeVal,
415
+ ...(returnItemType ? { itemType: returnItemType } : {}),
416
+ ...(returnAllowsSchema && returnSchemaKey
417
+ ? { schemaKey: returnSchemaKey, schemaVersion: returnSchemaVersion }
418
+ : {}),
419
+ },
420
+ body: spec['body'],
421
+ },
422
+ };
423
+ }
424
+ /**
425
+ * Build a SchemaResource from a YAML schema document.
426
+ */
427
+ buildSchemaResource(doc) {
428
+ const spec = doc.content['spec'];
429
+ const meta = doc.content['metadata'];
430
+ // The schema definition may have been loaded by buildSchemaPayload
431
+ const definition = spec?.['definition'];
432
+ if (!definition)
433
+ return null;
434
+ return {
435
+ metadata: {
436
+ key: doc.key,
437
+ version: doc.version,
438
+ name: meta?.name ?? doc.key,
439
+ description: meta?.description,
440
+ },
441
+ spec: {
442
+ jsonSchemaDraft: spec?.['jsonSchemaDraft'] ??
443
+ JsonSchemaDraft.DRAFT_2020_12,
444
+ schemaDefinition: definition,
445
+ },
446
+ };
447
+ }
448
+ /**
449
+ * Resolve a file path reference from a YAML document, with path-traversal protection.
450
+ *
451
+ * The resolved path must stay within the project root, defined as the parent of
452
+ * the directory containing the YAML file. This allows cross-subdirectory references
453
+ * (e.g., `schemas/foo.yaml` referencing `../definitions/foo.json`) while still
454
+ * preventing traversal outside the project.
455
+ *
456
+ * Returns null if the path resolves outside the project root.
457
+ */
458
+ resolveFileRef(docFilePath, filePath) {
459
+ const yamlDir = resolve(dirname(docFilePath));
460
+ // Allow up to one level above the YAML's directory (the project root)
461
+ const projectRoot = resolve(yamlDir, '..') + sep;
462
+ const resolvedFilePath = resolve(yamlDir, filePath);
463
+ if (!resolvedFilePath.startsWith(projectRoot)) {
464
+ return null;
465
+ }
466
+ return resolvedFilePath;
467
+ }
468
+ /**
469
+ * Read asset file content as text (for HTML/CSS assets)
470
+ * Returns null if file not found or can't be read
471
+ */
472
+ readAssetFileContent(doc) {
473
+ const spec = doc.content['spec'];
474
+ const filePath = spec?.['file'];
475
+ // Handle synthetic documents with inline content from remote assets.
476
+ // These are created in `preview-handler.ts` for remote partials/styles in hybrid mode.
477
+ if (!filePath && spec?.content && typeof spec.content === 'string') {
478
+ return spec.content;
479
+ }
480
+ if (!filePath) {
481
+ return null;
482
+ }
483
+ const resolvedFilePath = this.resolveFileRef(doc.filePath, filePath);
484
+ if (!resolvedFilePath)
485
+ return null;
486
+ if (!existsSync(resolvedFilePath)) {
487
+ return null;
488
+ }
489
+ try {
490
+ return readFileSync(resolvedFilePath, 'utf-8');
491
+ }
492
+ catch {
493
+ return null;
494
+ }
495
+ }
496
+ /**
497
+ * Build Asset file payload from YAML
498
+ * Returns file content ready for upload, or null if no file
499
+ */
500
+ buildAssetPayload(doc) {
501
+ const spec = doc.content['spec'];
502
+ const filePath = spec?.['file'];
503
+ if (!filePath)
504
+ return null;
505
+ const resolvedFilePath = this.resolveFileRef(doc.filePath, filePath);
506
+ if (!resolvedFilePath)
507
+ return null;
508
+ if (!existsSync(resolvedFilePath))
509
+ return null;
510
+ const fileName = basename(resolvedFilePath);
511
+ const fileContent = readFileSync(resolvedFilePath);
512
+ return {
513
+ assetKey: doc.key,
514
+ assetVersion: doc.version,
515
+ fileName,
516
+ contentType: getContentType(resolvedFilePath),
517
+ content: fileContent,
518
+ fileHash: createHash('sha256').update(fileContent).digest('hex'),
519
+ sizeBytes: fileContent.length,
520
+ };
521
+ }
522
+ /**
523
+ * Build Schema payload - reads the JSON definition file
524
+ * Returns the parsed document with definition loaded (for entity data generation)
525
+ */
526
+ buildSchemaPayload(doc) {
527
+ const content = { ...doc.content };
528
+ const spec = content['spec'];
529
+ if (spec?.['file']) {
530
+ const filePath = spec['file'];
531
+ const resolvedFilePath = this.resolveFileRef(doc.filePath, filePath);
532
+ if (resolvedFilePath && existsSync(resolvedFilePath)) {
533
+ try {
534
+ const fileContent = readFileSync(resolvedFilePath, 'utf-8');
535
+ spec['definition'] = JSON.parse(fileContent);
536
+ }
537
+ catch {
538
+ // If file can't be read/parsed, continue without it
539
+ }
540
+ }
541
+ }
542
+ return { ...doc, content };
543
+ }
544
+ }
545
+ //# sourceMappingURL=payload-builder.js.map