@htmless/core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (435) hide show
  1. package/dist/ai/content-operations.d.ts +26 -0
  2. package/dist/ai/content-operations.d.ts.map +1 -0
  3. package/dist/ai/content-operations.js +75 -0
  4. package/dist/ai/content-operations.js.map +1 -0
  5. package/dist/ai/image-analyzer.d.ts +18 -0
  6. package/dist/ai/image-analyzer.d.ts.map +1 -0
  7. package/dist/ai/image-analyzer.js +457 -0
  8. package/dist/ai/image-analyzer.js.map +1 -0
  9. package/dist/ai/json-to-schema.d.ts +6 -0
  10. package/dist/ai/json-to-schema.d.ts.map +1 -0
  11. package/dist/ai/json-to-schema.js +155 -0
  12. package/dist/ai/json-to-schema.js.map +1 -0
  13. package/dist/ai/schema-generator.d.ts +34 -0
  14. package/dist/ai/schema-generator.d.ts.map +1 -0
  15. package/dist/ai/schema-generator.js +307 -0
  16. package/dist/ai/schema-generator.js.map +1 -0
  17. package/dist/api/cda/assets.d.ts +4 -0
  18. package/dist/api/cda/assets.d.ts.map +1 -0
  19. package/dist/api/cda/assets.js +82 -0
  20. package/dist/api/cda/assets.js.map +1 -0
  21. package/dist/api/cda/blocks.d.ts +4 -0
  22. package/dist/api/cda/blocks.d.ts.map +1 -0
  23. package/dist/api/cda/blocks.js +92 -0
  24. package/dist/api/cda/blocks.js.map +1 -0
  25. package/dist/api/cda/content.d.ts +4 -0
  26. package/dist/api/cda/content.d.ts.map +1 -0
  27. package/dist/api/cda/content.js +192 -0
  28. package/dist/api/cda/content.js.map +1 -0
  29. package/dist/api/cda/index.d.ts +4 -0
  30. package/dist/api/cda/index.d.ts.map +1 -0
  31. package/dist/api/cda/index.js +21 -0
  32. package/dist/api/cda/index.js.map +1 -0
  33. package/dist/api/cda/media.d.ts +4 -0
  34. package/dist/api/cda/media.d.ts.map +1 -0
  35. package/dist/api/cda/media.js +114 -0
  36. package/dist/api/cda/media.js.map +1 -0
  37. package/dist/api/cda/redirects.d.ts +4 -0
  38. package/dist/api/cda/redirects.d.ts.map +1 -0
  39. package/dist/api/cda/redirects.js +69 -0
  40. package/dist/api/cda/redirects.js.map +1 -0
  41. package/dist/api/cda/schemas.d.ts +4 -0
  42. package/dist/api/cda/schemas.d.ts.map +1 -0
  43. package/dist/api/cda/schemas.js +113 -0
  44. package/dist/api/cda/schemas.js.map +1 -0
  45. package/dist/api/cda/taxonomies.d.ts +4 -0
  46. package/dist/api/cda/taxonomies.d.ts.map +1 -0
  47. package/dist/api/cda/taxonomies.js +79 -0
  48. package/dist/api/cda/taxonomies.js.map +1 -0
  49. package/dist/api/cma/ai.d.ts +4 -0
  50. package/dist/api/cma/ai.d.ts.map +1 -0
  51. package/dist/api/cma/ai.js +458 -0
  52. package/dist/api/cma/ai.js.map +1 -0
  53. package/dist/api/cma/assets.d.ts +4 -0
  54. package/dist/api/cma/assets.d.ts.map +1 -0
  55. package/dist/api/cma/assets.js +166 -0
  56. package/dist/api/cma/assets.js.map +1 -0
  57. package/dist/api/cma/audit.d.ts +4 -0
  58. package/dist/api/cma/audit.d.ts.map +1 -0
  59. package/dist/api/cma/audit.js +74 -0
  60. package/dist/api/cma/audit.js.map +1 -0
  61. package/dist/api/cma/auth.d.ts +4 -0
  62. package/dist/api/cma/auth.d.ts.map +1 -0
  63. package/dist/api/cma/auth.js +123 -0
  64. package/dist/api/cma/auth.js.map +1 -0
  65. package/dist/api/cma/blocks.d.ts +4 -0
  66. package/dist/api/cma/blocks.d.ts.map +1 -0
  67. package/dist/api/cma/blocks.js +249 -0
  68. package/dist/api/cma/blocks.js.map +1 -0
  69. package/dist/api/cma/bulk.d.ts +4 -0
  70. package/dist/api/cma/bulk.d.ts.map +1 -0
  71. package/dist/api/cma/bulk.js +258 -0
  72. package/dist/api/cma/bulk.js.map +1 -0
  73. package/dist/api/cma/cache.d.ts +4 -0
  74. package/dist/api/cma/cache.d.ts.map +1 -0
  75. package/dist/api/cma/cache.js +99 -0
  76. package/dist/api/cma/cache.js.map +1 -0
  77. package/dist/api/cma/codegen.d.ts +4 -0
  78. package/dist/api/cma/codegen.d.ts.map +1 -0
  79. package/dist/api/cma/codegen.js +22 -0
  80. package/dist/api/cma/codegen.js.map +1 -0
  81. package/dist/api/cma/comments.d.ts +4 -0
  82. package/dist/api/cma/comments.d.ts.map +1 -0
  83. package/dist/api/cma/comments.js +164 -0
  84. package/dist/api/cma/comments.js.map +1 -0
  85. package/dist/api/cma/diff.d.ts +4 -0
  86. package/dist/api/cma/diff.d.ts.map +1 -0
  87. package/dist/api/cma/diff.js +88 -0
  88. package/dist/api/cma/diff.js.map +1 -0
  89. package/dist/api/cma/entries.d.ts +4 -0
  90. package/dist/api/cma/entries.d.ts.map +1 -0
  91. package/dist/api/cma/entries.js +736 -0
  92. package/dist/api/cma/entries.js.map +1 -0
  93. package/dist/api/cma/environments.d.ts +4 -0
  94. package/dist/api/cma/environments.d.ts.map +1 -0
  95. package/dist/api/cma/environments.js +160 -0
  96. package/dist/api/cma/environments.js.map +1 -0
  97. package/dist/api/cma/extensions.d.ts +4 -0
  98. package/dist/api/cma/extensions.d.ts.map +1 -0
  99. package/dist/api/cma/extensions.js +82 -0
  100. package/dist/api/cma/extensions.js.map +1 -0
  101. package/dist/api/cma/importexport.d.ts +4 -0
  102. package/dist/api/cma/importexport.d.ts.map +1 -0
  103. package/dist/api/cma/importexport.js +496 -0
  104. package/dist/api/cma/importexport.js.map +1 -0
  105. package/dist/api/cma/index.d.ts +4 -0
  106. package/dist/api/cma/index.d.ts.map +1 -0
  107. package/dist/api/cma/index.js +69 -0
  108. package/dist/api/cma/index.js.map +1 -0
  109. package/dist/api/cma/live.d.ts +4 -0
  110. package/dist/api/cma/live.d.ts.map +1 -0
  111. package/dist/api/cma/live.js +64 -0
  112. package/dist/api/cma/live.js.map +1 -0
  113. package/dist/api/cma/locales.d.ts +4 -0
  114. package/dist/api/cma/locales.d.ts.map +1 -0
  115. package/dist/api/cma/locales.js +117 -0
  116. package/dist/api/cma/locales.js.map +1 -0
  117. package/dist/api/cma/marketplace.d.ts +4 -0
  118. package/dist/api/cma/marketplace.d.ts.map +1 -0
  119. package/dist/api/cma/marketplace.js +550 -0
  120. package/dist/api/cma/marketplace.js.map +1 -0
  121. package/dist/api/cma/redirects.d.ts +4 -0
  122. package/dist/api/cma/redirects.d.ts.map +1 -0
  123. package/dist/api/cma/redirects.js +120 -0
  124. package/dist/api/cma/redirects.js.map +1 -0
  125. package/dist/api/cma/relationships.d.ts +4 -0
  126. package/dist/api/cma/relationships.d.ts.map +1 -0
  127. package/dist/api/cma/relationships.js +47 -0
  128. package/dist/api/cma/relationships.js.map +1 -0
  129. package/dist/api/cma/schemas.d.ts +4 -0
  130. package/dist/api/cma/schemas.d.ts.map +1 -0
  131. package/dist/api/cma/schemas.js +248 -0
  132. package/dist/api/cma/schemas.js.map +1 -0
  133. package/dist/api/cma/search.d.ts +4 -0
  134. package/dist/api/cma/search.d.ts.map +1 -0
  135. package/dist/api/cma/search.js +149 -0
  136. package/dist/api/cma/search.js.map +1 -0
  137. package/dist/api/cma/spaces.d.ts +4 -0
  138. package/dist/api/cma/spaces.d.ts.map +1 -0
  139. package/dist/api/cma/spaces.js +119 -0
  140. package/dist/api/cma/spaces.js.map +1 -0
  141. package/dist/api/cma/taxonomies.d.ts +4 -0
  142. package/dist/api/cma/taxonomies.d.ts.map +1 -0
  143. package/dist/api/cma/taxonomies.js +296 -0
  144. package/dist/api/cma/taxonomies.js.map +1 -0
  145. package/dist/api/cma/templates.d.ts +13 -0
  146. package/dist/api/cma/templates.d.ts.map +1 -0
  147. package/dist/api/cma/templates.js +312 -0
  148. package/dist/api/cma/templates.js.map +1 -0
  149. package/dist/api/cma/uploads.d.ts +4 -0
  150. package/dist/api/cma/uploads.d.ts.map +1 -0
  151. package/dist/api/cma/uploads.js +148 -0
  152. package/dist/api/cma/uploads.js.map +1 -0
  153. package/dist/api/cma/webhooks.d.ts +4 -0
  154. package/dist/api/cma/webhooks.d.ts.map +1 -0
  155. package/dist/api/cma/webhooks.js +175 -0
  156. package/dist/api/cma/webhooks.js.map +1 -0
  157. package/dist/api/cma/white-label.d.ts +4 -0
  158. package/dist/api/cma/white-label.d.ts.map +1 -0
  159. package/dist/api/cma/white-label.js +47 -0
  160. package/dist/api/cma/white-label.js.map +1 -0
  161. package/dist/api/graphql/index.d.ts +4 -0
  162. package/dist/api/graphql/index.d.ts.map +1 -0
  163. package/dist/api/graphql/index.js +57 -0
  164. package/dist/api/graphql/index.js.map +1 -0
  165. package/dist/api/graphql/introspection.d.ts +31 -0
  166. package/dist/api/graphql/introspection.d.ts.map +1 -0
  167. package/dist/api/graphql/introspection.js +90 -0
  168. package/dist/api/graphql/introspection.js.map +1 -0
  169. package/dist/api/graphql/parser.d.ts +14 -0
  170. package/dist/api/graphql/parser.d.ts.map +1 -0
  171. package/dist/api/graphql/parser.js +140 -0
  172. package/dist/api/graphql/parser.js.map +1 -0
  173. package/dist/api/graphql/resolver.d.ts +3 -0
  174. package/dist/api/graphql/resolver.d.ts.map +1 -0
  175. package/dist/api/graphql/resolver.js +138 -0
  176. package/dist/api/graphql/resolver.js.map +1 -0
  177. package/dist/api/preview/content.d.ts +4 -0
  178. package/dist/api/preview/content.d.ts.map +1 -0
  179. package/dist/api/preview/content.js +207 -0
  180. package/dist/api/preview/content.js.map +1 -0
  181. package/dist/api/preview/index.d.ts +4 -0
  182. package/dist/api/preview/index.d.ts.map +1 -0
  183. package/dist/api/preview/index.js +11 -0
  184. package/dist/api/preview/index.js.map +1 -0
  185. package/dist/api/preview/live.d.ts +4 -0
  186. package/dist/api/preview/live.d.ts.map +1 -0
  187. package/dist/api/preview/live.js +41 -0
  188. package/dist/api/preview/live.js.map +1 -0
  189. package/dist/audit/logger.d.ts +13 -0
  190. package/dist/audit/logger.d.ts.map +1 -0
  191. package/dist/audit/logger.js +21 -0
  192. package/dist/audit/logger.js.map +1 -0
  193. package/dist/audit/middleware.d.ts +7 -0
  194. package/dist/audit/middleware.d.ts.map +1 -0
  195. package/dist/audit/middleware.js +39 -0
  196. package/dist/audit/middleware.js.map +1 -0
  197. package/dist/auth/jwt.d.ts +9 -0
  198. package/dist/auth/jwt.d.ts.map +1 -0
  199. package/dist/auth/jwt.js +15 -0
  200. package/dist/auth/jwt.js.map +1 -0
  201. package/dist/auth/middleware.d.ts +24 -0
  202. package/dist/auth/middleware.d.ts.map +1 -0
  203. package/dist/auth/middleware.js +99 -0
  204. package/dist/auth/middleware.js.map +1 -0
  205. package/dist/auth/password.d.ts +3 -0
  206. package/dist/auth/password.d.ts.map +1 -0
  207. package/dist/auth/password.js +9 -0
  208. package/dist/auth/password.js.map +1 -0
  209. package/dist/auth/rate-limit.d.ts +19 -0
  210. package/dist/auth/rate-limit.d.ts.map +1 -0
  211. package/dist/auth/rate-limit.js +77 -0
  212. package/dist/auth/rate-limit.js.map +1 -0
  213. package/dist/auth/rbac.d.ts +10 -0
  214. package/dist/auth/rbac.d.ts.map +1 -0
  215. package/dist/auth/rbac.js +61 -0
  216. package/dist/auth/rbac.js.map +1 -0
  217. package/dist/blocks/core-blocks.d.ts +13 -0
  218. package/dist/blocks/core-blocks.d.ts.map +1 -0
  219. package/dist/blocks/core-blocks.js +113 -0
  220. package/dist/blocks/core-blocks.js.map +1 -0
  221. package/dist/blocks/renderer-sdk.d.ts +75 -0
  222. package/dist/blocks/renderer-sdk.d.ts.map +1 -0
  223. package/dist/blocks/renderer-sdk.js +112 -0
  224. package/dist/blocks/renderer-sdk.js.map +1 -0
  225. package/dist/blocks/seed-core-blocks.d.ts +6 -0
  226. package/dist/blocks/seed-core-blocks.d.ts.map +1 -0
  227. package/dist/blocks/seed-core-blocks.js +37 -0
  228. package/dist/blocks/seed-core-blocks.js.map +1 -0
  229. package/dist/blocks/validator.d.ts +10 -0
  230. package/dist/blocks/validator.d.ts.map +1 -0
  231. package/dist/blocks/validator.js +111 -0
  232. package/dist/blocks/validator.js.map +1 -0
  233. package/dist/cache/cdn-purge.d.ts +41 -0
  234. package/dist/cache/cdn-purge.d.ts.map +1 -0
  235. package/dist/cache/cdn-purge.js +180 -0
  236. package/dist/cache/cdn-purge.js.map +1 -0
  237. package/dist/cache/observability.d.ts +36 -0
  238. package/dist/cache/observability.d.ts.map +1 -0
  239. package/dist/cache/observability.js +110 -0
  240. package/dist/cache/observability.js.map +1 -0
  241. package/dist/cache/tags.d.ts +28 -0
  242. package/dist/cache/tags.d.ts.map +1 -0
  243. package/dist/cache/tags.js +94 -0
  244. package/dist/cache/tags.js.map +1 -0
  245. package/dist/cli/commands/codegen.d.ts +2 -0
  246. package/dist/cli/commands/codegen.d.ts.map +1 -0
  247. package/dist/cli/commands/codegen.js +73 -0
  248. package/dist/cli/commands/codegen.js.map +1 -0
  249. package/dist/cli/commands/dev.d.ts +2 -0
  250. package/dist/cli/commands/dev.d.ts.map +1 -0
  251. package/dist/cli/commands/dev.js +60 -0
  252. package/dist/cli/commands/dev.js.map +1 -0
  253. package/dist/cli/commands/help.d.ts +2 -0
  254. package/dist/cli/commands/help.d.ts.map +1 -0
  255. package/dist/cli/commands/help.js +32 -0
  256. package/dist/cli/commands/help.js.map +1 -0
  257. package/dist/cli/commands/init.d.ts +2 -0
  258. package/dist/cli/commands/init.d.ts.map +1 -0
  259. package/dist/cli/commands/init.js +90 -0
  260. package/dist/cli/commands/init.js.map +1 -0
  261. package/dist/cli/commands/migrate.d.ts +2 -0
  262. package/dist/cli/commands/migrate.d.ts.map +1 -0
  263. package/dist/cli/commands/migrate.js +27 -0
  264. package/dist/cli/commands/migrate.js.map +1 -0
  265. package/dist/cli/commands/seed.d.ts +2 -0
  266. package/dist/cli/commands/seed.d.ts.map +1 -0
  267. package/dist/cli/commands/seed.js +28 -0
  268. package/dist/cli/commands/seed.js.map +1 -0
  269. package/dist/cli/index.d.ts +16 -0
  270. package/dist/cli/index.d.ts.map +1 -0
  271. package/dist/cli/index.js +120 -0
  272. package/dist/cli/index.js.map +1 -0
  273. package/dist/config.d.ts +11 -0
  274. package/dist/config.d.ts.map +1 -0
  275. package/dist/config.js +11 -0
  276. package/dist/config.js.map +1 -0
  277. package/dist/content/advanced-query.d.ts +37 -0
  278. package/dist/content/advanced-query.d.ts.map +1 -0
  279. package/dist/content/advanced-query.js +162 -0
  280. package/dist/content/advanced-query.js.map +1 -0
  281. package/dist/content/cache.d.ts +27 -0
  282. package/dist/content/cache.d.ts.map +1 -0
  283. package/dist/content/cache.js +100 -0
  284. package/dist/content/cache.js.map +1 -0
  285. package/dist/content/diff.d.ts +13 -0
  286. package/dist/content/diff.d.ts.map +1 -0
  287. package/dist/content/diff.js +80 -0
  288. package/dist/content/diff.js.map +1 -0
  289. package/dist/content/localization.d.ts +13 -0
  290. package/dist/content/localization.d.ts.map +1 -0
  291. package/dist/content/localization.js +42 -0
  292. package/dist/content/localization.js.map +1 -0
  293. package/dist/content/materializer.d.ts +26 -0
  294. package/dist/content/materializer.d.ts.map +1 -0
  295. package/dist/content/materializer.js +175 -0
  296. package/dist/content/materializer.js.map +1 -0
  297. package/dist/content/relationships.d.ts +30 -0
  298. package/dist/content/relationships.d.ts.map +1 -0
  299. package/dist/content/relationships.js +123 -0
  300. package/dist/content/relationships.js.map +1 -0
  301. package/dist/db.d.ts +5 -0
  302. package/dist/db.d.ts.map +1 -0
  303. package/dist/db.js +5 -0
  304. package/dist/db.js.map +1 -0
  305. package/dist/events/emitter.d.ts +16 -0
  306. package/dist/events/emitter.d.ts.map +1 -0
  307. package/dist/events/emitter.js +15 -0
  308. package/dist/events/emitter.js.map +1 -0
  309. package/dist/events/sse.d.ts +16 -0
  310. package/dist/events/sse.d.ts.map +1 -0
  311. package/dist/events/sse.js +37 -0
  312. package/dist/events/sse.js.map +1 -0
  313. package/dist/events/wire.d.ts +2 -0
  314. package/dist/events/wire.d.ts.map +1 -0
  315. package/dist/events/wire.js +27 -0
  316. package/dist/events/wire.js.map +1 -0
  317. package/dist/extensions/billing.d.ts +60 -0
  318. package/dist/extensions/billing.d.ts.map +1 -0
  319. package/dist/extensions/billing.js +98 -0
  320. package/dist/extensions/billing.js.map +1 -0
  321. package/dist/extensions/manifest.d.ts +43 -0
  322. package/dist/extensions/manifest.d.ts.map +1 -0
  323. package/dist/extensions/manifest.js +66 -0
  324. package/dist/extensions/manifest.js.map +1 -0
  325. package/dist/extensions/marketplace.d.ts +50 -0
  326. package/dist/extensions/marketplace.d.ts.map +1 -0
  327. package/dist/extensions/marketplace.js +676 -0
  328. package/dist/extensions/marketplace.js.map +1 -0
  329. package/dist/extensions/router.d.ts +4 -0
  330. package/dist/extensions/router.d.ts.map +1 -0
  331. package/dist/extensions/router.js +50 -0
  332. package/dist/extensions/router.js.map +1 -0
  333. package/dist/extensions/runtime.d.ts +29 -0
  334. package/dist/extensions/runtime.d.ts.map +1 -0
  335. package/dist/extensions/runtime.js +201 -0
  336. package/dist/extensions/runtime.js.map +1 -0
  337. package/dist/extensions/sdk.d.ts +146 -0
  338. package/dist/extensions/sdk.d.ts.map +1 -0
  339. package/dist/extensions/sdk.js +114 -0
  340. package/dist/extensions/sdk.js.map +1 -0
  341. package/dist/integrations/sheets.d.ts +41 -0
  342. package/dist/integrations/sheets.d.ts.map +1 -0
  343. package/dist/integrations/sheets.js +230 -0
  344. package/dist/integrations/sheets.js.map +1 -0
  345. package/dist/media/metadata.d.ts +9 -0
  346. package/dist/media/metadata.d.ts.map +1 -0
  347. package/dist/media/metadata.js +84 -0
  348. package/dist/media/metadata.js.map +1 -0
  349. package/dist/media/presets.d.ts +17 -0
  350. package/dist/media/presets.d.ts.map +1 -0
  351. package/dist/media/presets.js +21 -0
  352. package/dist/media/presets.js.map +1 -0
  353. package/dist/media/storage.d.ts +16 -0
  354. package/dist/media/storage.d.ts.map +1 -0
  355. package/dist/media/storage.js +39 -0
  356. package/dist/media/storage.js.map +1 -0
  357. package/dist/media/transforms-engine.d.ts +46 -0
  358. package/dist/media/transforms-engine.d.ts.map +1 -0
  359. package/dist/media/transforms-engine.js +91 -0
  360. package/dist/media/transforms-engine.js.map +1 -0
  361. package/dist/media/transforms.d.ts +15 -0
  362. package/dist/media/transforms.d.ts.map +1 -0
  363. package/dist/media/transforms.js +22 -0
  364. package/dist/media/transforms.js.map +1 -0
  365. package/dist/media/usage.d.ts +21 -0
  366. package/dist/media/usage.d.ts.map +1 -0
  367. package/dist/media/usage.js +105 -0
  368. package/dist/media/usage.js.map +1 -0
  369. package/dist/redis.d.ts +2 -0
  370. package/dist/redis.d.ts.map +1 -0
  371. package/dist/redis.js +9 -0
  372. package/dist/redis.js.map +1 -0
  373. package/dist/schema/codegen.d.ts +6 -0
  374. package/dist/schema/codegen.d.ts.map +1 -0
  375. package/dist/schema/codegen.js +95 -0
  376. package/dist/schema/codegen.js.map +1 -0
  377. package/dist/schema/json-schema.d.ts +42 -0
  378. package/dist/schema/json-schema.d.ts.map +1 -0
  379. package/dist/schema/json-schema.js +68 -0
  380. package/dist/schema/json-schema.js.map +1 -0
  381. package/dist/schema/validator.d.ts +14 -0
  382. package/dist/schema/validator.d.ts.map +1 -0
  383. package/dist/schema/validator.js +103 -0
  384. package/dist/schema/validator.js.map +1 -0
  385. package/dist/sdk/client.d.ts +86 -0
  386. package/dist/sdk/client.d.ts.map +1 -0
  387. package/dist/sdk/client.js +117 -0
  388. package/dist/sdk/client.js.map +1 -0
  389. package/dist/server.d.ts +2 -0
  390. package/dist/server.d.ts.map +1 -0
  391. package/dist/server.js +59 -0
  392. package/dist/server.js.map +1 -0
  393. package/dist/spaces/premium-templates.d.ts +37 -0
  394. package/dist/spaces/premium-templates.d.ts.map +1 -0
  395. package/dist/spaces/premium-templates.js +1603 -0
  396. package/dist/spaces/premium-templates.js.map +1 -0
  397. package/dist/spaces/provisioner.d.ts +16 -0
  398. package/dist/spaces/provisioner.d.ts.map +1 -0
  399. package/dist/spaces/provisioner.js +143 -0
  400. package/dist/spaces/provisioner.js.map +1 -0
  401. package/dist/spaces/template-registry.d.ts +34 -0
  402. package/dist/spaces/template-registry.d.ts.map +1 -0
  403. package/dist/spaces/template-registry.js +55 -0
  404. package/dist/spaces/template-registry.js.map +1 -0
  405. package/dist/spaces/templates.d.ts +44 -0
  406. package/dist/spaces/templates.d.ts.map +1 -0
  407. package/dist/spaces/templates.js +201 -0
  408. package/dist/spaces/templates.js.map +1 -0
  409. package/dist/spaces/white-label.d.ts +20 -0
  410. package/dist/spaces/white-label.d.ts.map +1 -0
  411. package/dist/spaces/white-label.js +32 -0
  412. package/dist/spaces/white-label.js.map +1 -0
  413. package/dist/utils/query-shaping.d.ts +27 -0
  414. package/dist/utils/query-shaping.d.ts.map +1 -0
  415. package/dist/utils/query-shaping.js +69 -0
  416. package/dist/utils/query-shaping.js.map +1 -0
  417. package/dist/utils/space.d.ts +4 -0
  418. package/dist/utils/space.d.ts.map +1 -0
  419. package/dist/utils/space.js +17 -0
  420. package/dist/utils/space.js.map +1 -0
  421. package/dist/webhooks/dispatcher.d.ts +9 -0
  422. package/dist/webhooks/dispatcher.d.ts.map +1 -0
  423. package/dist/webhooks/dispatcher.js +102 -0
  424. package/dist/webhooks/dispatcher.js.map +1 -0
  425. package/package.json +84 -0
  426. package/prisma/migrations/20260403025542_init/migration.sql +315 -0
  427. package/prisma/migrations/20260403034855_add_blocks_and_patterns/migration.sql +40 -0
  428. package/prisma/migrations/20260403041936_add_published_documents/migration.sql +30 -0
  429. package/prisma/migrations/20260403042809_add_locales_and_taxonomies/migration.sql +58 -0
  430. package/prisma/migrations/20260403043033_add_scheduled_unpublish_at/migration.sql +2 -0
  431. package/prisma/migrations/20260403052801_add_environments_and_whitelabel/migration.sql +65 -0
  432. package/prisma/migrations/20260403055920_add_marketplace_and_extension_config/migration.sql +73 -0
  433. package/prisma/migrations/migration_lock.toml +3 -0
  434. package/prisma/schema.prisma +530 -0
  435. package/prisma/seed.ts +154 -0
@@ -0,0 +1,175 @@
1
+ // ─── Publish-Time Document Materializer ─────────────────────────────
2
+ import { createHash } from 'crypto';
3
+ import { prisma } from '../db.js';
4
+ /**
5
+ * Materialize an entry into the `published_documents` read-model table.
6
+ * Called immediately after a successful publish transaction.
7
+ *
8
+ * Loads the entry with its published version and content type, resolves
9
+ * all reference/media fields by batch-loading referenced entries, then
10
+ * upserts into `published_documents` with the fully resolved JSON.
11
+ */
12
+ export async function materializeEntry(entryId) {
13
+ const entry = await prisma.entry.findUnique({
14
+ where: { id: entryId },
15
+ include: {
16
+ contentType: {
17
+ include: { fields: true },
18
+ },
19
+ state: {
20
+ include: { publishedVersion: true },
21
+ },
22
+ },
23
+ });
24
+ if (!entry)
25
+ return;
26
+ if (!entry.state?.publishedVersion)
27
+ return;
28
+ const rawData = (entry.state.publishedVersion.data ?? {});
29
+ const fields = entry.contentType.fields;
30
+ // Resolve all reference and media fields
31
+ const resolvedData = await batchResolveReferences(rawData, fields, entry.spaceId);
32
+ // Generate etag from the resolved data
33
+ const etag = createHash('md5').update(JSON.stringify(resolvedData)).digest('hex');
34
+ await prisma.publishedDocument.upsert({
35
+ where: { entryId },
36
+ create: {
37
+ spaceId: entry.spaceId,
38
+ entryId,
39
+ contentTypeKey: entry.contentType.key,
40
+ slug: entry.slug,
41
+ data: JSON.parse(JSON.stringify(resolvedData)),
42
+ publishedAt: new Date(),
43
+ etag,
44
+ },
45
+ update: {
46
+ contentTypeKey: entry.contentType.key,
47
+ slug: entry.slug,
48
+ data: JSON.parse(JSON.stringify(resolvedData)),
49
+ publishedAt: new Date(),
50
+ etag,
51
+ },
52
+ });
53
+ }
54
+ /**
55
+ * Remove an entry from the published_documents table.
56
+ * Called after unpublishing an entry.
57
+ */
58
+ export async function dematerializeEntry(entryId) {
59
+ await prisma.publishedDocument.deleteMany({
60
+ where: { entryId },
61
+ });
62
+ }
63
+ /**
64
+ * Batch-resolve reference and media fields in the data object.
65
+ *
66
+ * 1. Scans the field definitions for reference/media types
67
+ * 2. Collects all referenced entry IDs and asset IDs from the data
68
+ * 3. Batch loads referenced entries (from published_documents) in ONE query
69
+ * 4. Batch loads referenced assets in ONE query
70
+ * 5. Replaces IDs with resolved objects and returns the enriched data
71
+ */
72
+ export async function batchResolveReferences(data, fields, spaceId) {
73
+ const resolved = { ...data };
74
+ // Collect IDs by type
75
+ const referenceIds = [];
76
+ const assetIds = [];
77
+ const referenceFieldKeys = [];
78
+ const mediaFieldKeys = [];
79
+ for (const field of fields) {
80
+ const value = data[field.key];
81
+ if (value == null)
82
+ continue;
83
+ if (field.type === 'reference') {
84
+ referenceFieldKeys.push(field.key);
85
+ if (Array.isArray(value)) {
86
+ referenceIds.push(...value);
87
+ }
88
+ else if (typeof value === 'string') {
89
+ referenceIds.push(value);
90
+ }
91
+ }
92
+ else if (field.type === 'media') {
93
+ mediaFieldKeys.push(field.key);
94
+ if (Array.isArray(value)) {
95
+ assetIds.push(...value);
96
+ }
97
+ else if (typeof value === 'string') {
98
+ assetIds.push(value);
99
+ }
100
+ }
101
+ }
102
+ // Nothing to resolve
103
+ if (referenceIds.length === 0 && assetIds.length === 0) {
104
+ return resolved;
105
+ }
106
+ // Batch load referenced entries from published_documents
107
+ const refMap = new Map();
108
+ if (referenceIds.length > 0) {
109
+ const uniqueRefIds = [...new Set(referenceIds)];
110
+ const refDocs = await prisma.publishedDocument.findMany({
111
+ where: {
112
+ spaceId,
113
+ entryId: { in: uniqueRefIds },
114
+ },
115
+ });
116
+ for (const doc of refDocs) {
117
+ refMap.set(doc.entryId, {
118
+ id: doc.entryId,
119
+ type: doc.contentTypeKey,
120
+ slug: doc.slug,
121
+ data: doc.data,
122
+ publishedAt: doc.publishedAt.toISOString(),
123
+ });
124
+ }
125
+ }
126
+ // Batch load referenced assets
127
+ const assetMap = new Map();
128
+ if (assetIds.length > 0) {
129
+ const uniqueAssetIds = [...new Set(assetIds)];
130
+ const assets = await prisma.asset.findMany({
131
+ where: {
132
+ spaceId,
133
+ id: { in: uniqueAssetIds },
134
+ },
135
+ });
136
+ for (const asset of assets) {
137
+ assetMap.set(asset.id, {
138
+ id: asset.id,
139
+ filename: asset.filename,
140
+ mimeType: asset.mimeType,
141
+ bytes: asset.bytes,
142
+ width: asset.width,
143
+ height: asset.height,
144
+ alt: asset.alt,
145
+ caption: asset.caption,
146
+ storageKey: asset.storageKey,
147
+ });
148
+ }
149
+ }
150
+ // Replace IDs with resolved objects in data
151
+ for (const key of referenceFieldKeys) {
152
+ const value = data[key];
153
+ if (value == null)
154
+ continue;
155
+ if (Array.isArray(value)) {
156
+ resolved[key] = value.map((id) => refMap.get(id) ?? { id, _missing: true });
157
+ }
158
+ else if (typeof value === 'string') {
159
+ resolved[key] = refMap.get(value) ?? { id: value, _missing: true };
160
+ }
161
+ }
162
+ for (const key of mediaFieldKeys) {
163
+ const value = data[key];
164
+ if (value == null)
165
+ continue;
166
+ if (Array.isArray(value)) {
167
+ resolved[key] = value.map((id) => assetMap.get(id) ?? { id, _missing: true });
168
+ }
169
+ else if (typeof value === 'string') {
170
+ resolved[key] = assetMap.get(value) ?? { id: value, _missing: true };
171
+ }
172
+ }
173
+ return resolved;
174
+ }
175
+ //# sourceMappingURL=materializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"materializer.js","sourceRoot":"","sources":["../../src/content/materializer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ export interface OutboundReference {
2
+ fieldKey: string;
3
+ targetEntryId: string;
4
+ targetType: string;
5
+ }
6
+ export interface InboundReference {
7
+ sourceEntryId: string;
8
+ sourceType: string;
9
+ fieldKey: string;
10
+ }
11
+ export interface IntegrityCheckResult {
12
+ referencedBy: number;
13
+ safe: boolean;
14
+ }
15
+ /**
16
+ * Scans an entry's published data for reference fields and returns all
17
+ * outbound references (i.e. entries this entry points to).
18
+ */
19
+ export declare function getReferencesFrom(entryId: string, spaceId: string): Promise<OutboundReference[]>;
20
+ /**
21
+ * Finds all entries that reference the given entry (reverse lookup).
22
+ * Scans published_documents JSON data for the entry ID.
23
+ */
24
+ export declare function getReferencesTo(entryId: string, spaceId: string): Promise<InboundReference[]>;
25
+ /**
26
+ * Checks if any entries reference this one before delete.
27
+ * Returns the count and whether it's safe to delete.
28
+ */
29
+ export declare function checkReferentialIntegrity(entryId: string, spaceId: string): Promise<IntegrityCheckResult>;
30
+ //# sourceMappingURL=relationships.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relationships.d.ts","sourceRoot":"","sources":["../../src/content/relationships.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAwC9B;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA8E7B;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,oBAAoB,CAAC,CAM/B"}
@@ -0,0 +1,123 @@
1
+ // ─── Content Relationship Utilities ──────────────────────────────────
2
+ import { prisma } from '../db.js';
3
+ /**
4
+ * Scans an entry's published data for reference fields and returns all
5
+ * outbound references (i.e. entries this entry points to).
6
+ */
7
+ export async function getReferencesFrom(entryId, spaceId) {
8
+ const entry = await prisma.entry.findFirst({
9
+ where: { id: entryId, spaceId },
10
+ include: {
11
+ contentType: { include: { fields: true } },
12
+ state: { include: { publishedVersion: true } },
13
+ versions: { orderBy: { createdAt: 'desc' }, take: 1 },
14
+ },
15
+ });
16
+ if (!entry)
17
+ return [];
18
+ // Prefer published data, fall back to latest draft
19
+ const data = (entry.state?.publishedVersion?.data ??
20
+ entry.versions[0]?.data ??
21
+ {});
22
+ const referenceFields = entry.contentType.fields.filter((f) => f.type === 'reference');
23
+ const results = [];
24
+ for (const field of referenceFields) {
25
+ const value = data[field.key];
26
+ if (value == null)
27
+ continue;
28
+ const targetType = field.referenceTarget ?? 'unknown';
29
+ const ids = Array.isArray(value) ? value : [value];
30
+ for (const targetEntryId of ids) {
31
+ if (typeof targetEntryId === 'string') {
32
+ results.push({ fieldKey: field.key, targetEntryId, targetType });
33
+ }
34
+ }
35
+ }
36
+ return results;
37
+ }
38
+ /**
39
+ * Finds all entries that reference the given entry (reverse lookup).
40
+ * Scans published_documents JSON data for the entry ID.
41
+ */
42
+ export async function getReferencesTo(entryId, spaceId) {
43
+ // Load all published docs in this space — we scan their JSON data for
44
+ // references to the target entryId.
45
+ const docs = await prisma.publishedDocument.findMany({
46
+ where: { spaceId },
47
+ select: {
48
+ entryId: true,
49
+ contentTypeKey: true,
50
+ data: true,
51
+ },
52
+ });
53
+ // Load content type field definitions for reference fields
54
+ const contentTypes = await prisma.contentType.findMany({
55
+ where: { spaceId },
56
+ include: { fields: { where: { type: 'reference' } } },
57
+ });
58
+ const fieldsByType = new Map();
59
+ for (const ct of contentTypes) {
60
+ fieldsByType.set(ct.key, ct.fields);
61
+ }
62
+ const results = [];
63
+ for (const doc of docs) {
64
+ // Skip the entry itself
65
+ if (doc.entryId === entryId)
66
+ continue;
67
+ const data = (doc.data ?? {});
68
+ const refFields = fieldsByType.get(doc.contentTypeKey) ?? [];
69
+ for (const field of refFields) {
70
+ const value = data[field.key];
71
+ if (value == null)
72
+ continue;
73
+ const ids = Array.isArray(value) ? value : [value];
74
+ if (ids.includes(entryId)) {
75
+ results.push({
76
+ sourceEntryId: doc.entryId,
77
+ sourceType: doc.contentTypeKey,
78
+ fieldKey: field.key,
79
+ });
80
+ }
81
+ }
82
+ // Also scan raw data values for the entryId (catch resolved objects)
83
+ const jsonStr = JSON.stringify(data);
84
+ if (!jsonStr.includes(entryId))
85
+ continue;
86
+ // Check if we already found it via field definitions — avoid duplicates
87
+ const alreadyFound = results.some((r) => r.sourceEntryId === doc.entryId);
88
+ if (alreadyFound)
89
+ continue;
90
+ // Fallback: scan all string values in data
91
+ for (const [key, val] of Object.entries(data)) {
92
+ if (val == null)
93
+ continue;
94
+ if (typeof val === 'string' && val === entryId) {
95
+ results.push({
96
+ sourceEntryId: doc.entryId,
97
+ sourceType: doc.contentTypeKey,
98
+ fieldKey: key,
99
+ });
100
+ }
101
+ else if (Array.isArray(val) && val.includes(entryId)) {
102
+ results.push({
103
+ sourceEntryId: doc.entryId,
104
+ sourceType: doc.contentTypeKey,
105
+ fieldKey: key,
106
+ });
107
+ }
108
+ }
109
+ }
110
+ return results;
111
+ }
112
+ /**
113
+ * Checks if any entries reference this one before delete.
114
+ * Returns the count and whether it's safe to delete.
115
+ */
116
+ export async function checkReferentialIntegrity(entryId, spaceId) {
117
+ const refs = await getReferencesTo(entryId, spaceId);
118
+ return {
119
+ referencedBy: refs.length,
120
+ safe: refs.length === 0,
121
+ };
122
+ }
123
+ //# sourceMappingURL=relationships.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relationships.js","sourceRoot":"","sources":["../../src/content/relationships.ts"],"names":[],"mappings":"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"}
package/dist/db.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ import { PrismaClient } from '@prisma/client';
2
+ export declare const prisma: PrismaClient<{
3
+ log: ("warn" | "error")[];
4
+ }, "warn" | "error", import("@prisma/client/runtime/library").DefaultArgs>;
5
+ //# sourceMappingURL=db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,eAAO,MAAM,MAAM;;0EAEjB,CAAC"}
package/dist/db.js ADDED
@@ -0,0 +1,5 @@
1
+ import { PrismaClient } from '@prisma/client';
2
+ export const prisma = new PrismaClient({
3
+ log: process.env.NODE_ENV === 'development' ? ['warn', 'error'] : ['error'],
4
+ });
5
+ //# sourceMappingURL=db.js.map
package/dist/db.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC;IACrC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;CAC5E,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { EventEmitter } from 'events';
2
+ export type HtmlessEvent = 'entry.created' | 'entry.draftSaved' | 'entry.published' | 'entry.unpublished' | 'entry.deleted' | 'asset.created' | 'asset.updated' | 'asset.deleted' | 'schema.typeCreated' | 'schema.typeUpdated' | 'schema.typeDeleted' | 'user.login';
3
+ export interface EventPayload {
4
+ eventType: HtmlessEvent;
5
+ spaceId: string;
6
+ userId?: string;
7
+ data: Record<string, unknown>;
8
+ occurredAt: string;
9
+ }
10
+ declare class HtmlessEventBus extends EventEmitter {
11
+ emit(event: HtmlessEvent, payload: Omit<EventPayload, 'eventType' | 'occurredAt'>): boolean;
12
+ on(event: HtmlessEvent, listener: (payload: EventPayload) => void): this;
13
+ }
14
+ export declare const eventBus: HtmlessEventBus;
15
+ export {};
16
+ //# sourceMappingURL=emitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../../src/events/emitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,MAAM,MAAM,YAAY,GACpB,eAAe,GACf,kBAAkB,GAClB,iBAAiB,GACjB,mBAAmB,GACnB,eAAe,GACf,eAAe,GACf,eAAe,GACf,eAAe,GACf,oBAAoB,GACpB,oBAAoB,GACpB,oBAAoB,GACpB,YAAY,CAAC;AAEjB,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,YAAY,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,cAAM,eAAgB,SAAQ,YAAY;IACxC,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,GAAG,YAAY,CAAC,GAAG,OAAO;IAQ3F,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;CAGzE;AAED,eAAO,MAAM,QAAQ,iBAAwB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { EventEmitter } from 'events';
2
+ class HtmlessEventBus extends EventEmitter {
3
+ emit(event, payload) {
4
+ return super.emit(event, {
5
+ ...payload,
6
+ eventType: event,
7
+ occurredAt: new Date().toISOString(),
8
+ });
9
+ }
10
+ on(event, listener) {
11
+ return super.on(event, listener);
12
+ }
13
+ }
14
+ export const eventBus = new HtmlessEventBus();
15
+ //# sourceMappingURL=emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../src/events/emitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAwBtC,MAAM,eAAgB,SAAQ,YAAY;IACxC,IAAI,CAAC,KAAmB,EAAE,OAAuD;QAC/E,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE;YACvB,GAAG,OAAO;YACV,SAAS,EAAE,KAAK;YAChB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACd,CAAC,CAAC;IAC5B,CAAC;IAED,EAAE,CAAC,KAAmB,EAAE,QAAyC;QAC/D,OAAO,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { Response } from 'express';
2
+ export interface SSEStream {
3
+ send: (event: string, data: object) => void;
4
+ close: () => void;
5
+ }
6
+ /**
7
+ * Set up an SSE (Server-Sent Events) stream on an Express response.
8
+ *
9
+ * Returns helpers to send typed events and to tear the stream down.
10
+ * A `:keepalive` comment is sent every 30 s so proxies don't close
11
+ * the connection. Cleanup (clearing the interval) happens
12
+ * automatically when the client disconnects **or** when `.close()`
13
+ * is called explicitly.
14
+ */
15
+ export declare function createSSEStream(res: Response): SSEStream;
16
+ //# sourceMappingURL=sse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/events/sse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,QAAQ,GAAG,SAAS,CA+BxD"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Set up an SSE (Server-Sent Events) stream on an Express response.
3
+ *
4
+ * Returns helpers to send typed events and to tear the stream down.
5
+ * A `:keepalive` comment is sent every 30 s so proxies don't close
6
+ * the connection. Cleanup (clearing the interval) happens
7
+ * automatically when the client disconnects **or** when `.close()`
8
+ * is called explicitly.
9
+ */
10
+ export function createSSEStream(res) {
11
+ res.writeHead(200, {
12
+ 'Content-Type': 'text/event-stream',
13
+ 'Cache-Control': 'no-cache',
14
+ Connection: 'keep-alive',
15
+ 'X-Accel-Buffering': 'no', // nginx: disable proxy buffering
16
+ });
17
+ // Flush headers immediately
18
+ res.flushHeaders();
19
+ const keepalive = setInterval(() => {
20
+ res.write(':keepalive\n\n');
21
+ }, 30_000);
22
+ function cleanup() {
23
+ clearInterval(keepalive);
24
+ }
25
+ // Clean up when the client drops the connection
26
+ res.on('close', cleanup);
27
+ return {
28
+ send(event, data) {
29
+ res.write(`event: ${event}\ndata: ${JSON.stringify(data)}\n\n`);
30
+ },
31
+ close() {
32
+ cleanup();
33
+ res.end();
34
+ },
35
+ };
36
+ }
37
+ //# sourceMappingURL=sse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse.js","sourceRoot":"","sources":["../../src/events/sse.ts"],"names":[],"mappings":"AAOA;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,GAAa;IAC3C,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,cAAc,EAAE,mBAAmB;QACnC,eAAe,EAAE,UAAU;QAC3B,UAAU,EAAE,YAAY;QACxB,mBAAmB,EAAE,IAAI,EAAE,iCAAiC;KAC7D,CAAC,CAAC;IAEH,4BAA4B;IAC5B,GAAG,CAAC,YAAY,EAAE,CAAC;IAEnB,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE;QACjC,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC9B,CAAC,EAAE,MAAM,CAAC,CAAC;IAEX,SAAS,OAAO;QACd,aAAa,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC;IAED,gDAAgD;IAChD,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAEzB,OAAO;QACL,IAAI,CAAC,KAAa,EAAE,IAAY;YAC9B,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,WAAW,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClE,CAAC;QACD,KAAK;YACH,OAAO,EAAE,CAAC;YACV,GAAG,CAAC,GAAG,EAAE,CAAC;QACZ,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function wireEventHandlers(): void;
2
+ //# sourceMappingURL=wire.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../../src/events/wire.ts"],"names":[],"mappings":"AAiBA,wBAAgB,iBAAiB,IAAI,IAAI,CAWxC"}
@@ -0,0 +1,27 @@
1
+ import { eventBus } from './emitter.js';
2
+ import { dispatchWebhooks } from '../webhooks/dispatcher.js';
3
+ // All events that should trigger webhook delivery
4
+ const WEBHOOK_EVENTS = [
5
+ 'entry.created',
6
+ 'entry.published',
7
+ 'entry.unpublished',
8
+ 'entry.deleted',
9
+ 'asset.created',
10
+ 'asset.updated',
11
+ 'asset.deleted',
12
+ 'schema.typeCreated',
13
+ 'schema.typeUpdated',
14
+ 'schema.typeDeleted',
15
+ ];
16
+ export function wireEventHandlers() {
17
+ for (const event of WEBHOOK_EVENTS) {
18
+ eventBus.on(event, (payload) => {
19
+ // Fire-and-forget — don't block the request
20
+ dispatchWebhooks(payload).catch((err) => {
21
+ console.error(`Webhook dispatch error for ${event}:`, err);
22
+ });
23
+ });
24
+ }
25
+ console.log(`Event bus wired: ${WEBHOOK_EVENTS.length} events → webhook dispatch`);
26
+ }
27
+ //# sourceMappingURL=wire.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire.js","sourceRoot":"","sources":["../../src/events/wire.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAqB,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,kDAAkD;AAClD,MAAM,cAAc,GAAmB;IACrC,eAAe;IACf,iBAAiB;IACjB,mBAAmB;IACnB,eAAe;IACf,eAAe;IACf,eAAe;IACf,eAAe;IACf,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;CACrB,CAAC;AAEF,MAAM,UAAU,iBAAiB;IAC/B,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;QACnC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE;YAC7B,4CAA4C;YAC5C,gBAAgB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACtC,OAAO,CAAC,KAAK,CAAC,8BAA8B,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,oBAAoB,cAAc,CAAC,MAAM,4BAA4B,CAAC,CAAC;AACrF,CAAC"}
@@ -0,0 +1,60 @@
1
+ export interface BillingRecord {
2
+ id: string;
3
+ extensionKey: string;
4
+ spaceId: string;
5
+ amount: number;
6
+ currency: 'USD';
7
+ period: string;
8
+ authorShare: number;
9
+ platformShare: number;
10
+ status: 'pending' | 'paid';
11
+ createdAt: string;
12
+ }
13
+ export interface RevenueReport {
14
+ extensionKey: string;
15
+ totalRevenue: number;
16
+ authorEarnings: number;
17
+ platformEarnings: number;
18
+ activeInstalls: number;
19
+ records: BillingRecord[];
20
+ }
21
+ export interface PlatformBillingSummary {
22
+ totalRevenue: number;
23
+ totalAuthorPayouts: number;
24
+ totalPlatformRevenue: number;
25
+ extensionCount: number;
26
+ extensions: {
27
+ extensionKey: string;
28
+ totalRevenue: number;
29
+ authorEarnings: number;
30
+ platformEarnings: number;
31
+ activeInstalls: number;
32
+ }[];
33
+ }
34
+ /**
35
+ * Calculate revenue split between author and platform.
36
+ * @param priceMonthly — price in cents
37
+ * @param sharePercent — author share percentage (default 70)
38
+ */
39
+ export declare function calculateRevenue(priceMonthly: number, sharePercent?: number): {
40
+ authorAmount: number;
41
+ platformAmount: number;
42
+ };
43
+ /**
44
+ * Record a billing event when a paid extension is installed.
45
+ * In production this would create a Stripe subscription or charge.
46
+ */
47
+ export declare function recordInstallBilling(extensionKey: string, spaceId: string, priceMonthly: number): Promise<BillingRecord>;
48
+ /**
49
+ * Get a revenue report for a specific extension.
50
+ */
51
+ export declare function getRevenueReport(extensionKey: string): Promise<RevenueReport>;
52
+ /**
53
+ * Get platform-wide billing summary.
54
+ */
55
+ export declare function getPlatformBillingSummary(): Promise<PlatformBillingSummary>;
56
+ /**
57
+ * Get all billing records (for testing/admin).
58
+ */
59
+ export declare function getAllBillingRecords(): BillingRecord[];
60
+ //# sourceMappingURL=billing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing.d.ts","sourceRoot":"","sources":["../../src/extensions/billing.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,KAAK,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE;QACV,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,EAAE,MAAM,CAAC;KACxB,EAAE,CAAC;CACL;AAaD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EACpB,YAAY,GAAE,MAAqC,GAClD;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAIlD;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,aAAa,CAAC,CA4BxB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAiBnF;AAED;;GAEG;AACH,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,sBAAsB,CAAC,CAwBjF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,aAAa,EAAE,CAEtD"}