@upstart.gg/sdk 0.0.133 → 0.0.135

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 (527) hide show
  1. package/dist/shared/ai/schemas.d.ts +1 -2
  2. package/dist/shared/ai/schemas.d.ts.map +1 -1
  3. package/dist/shared/ai/schemas.js +28 -1
  4. package/dist/shared/ai/schemas.js.map +1 -1
  5. package/dist/shared/ai/types.d.ts +15 -1
  6. package/dist/shared/ai/types.d.ts.map +1 -1
  7. package/dist/shared/ajv.js +6861 -1
  8. package/dist/shared/ajv.js.map +1 -1
  9. package/dist/shared/analytics/init.js +20 -1
  10. package/dist/shared/analytics/init.js.map +1 -1
  11. package/dist/shared/analytics/track.js +24 -1
  12. package/dist/shared/analytics/track.js.map +1 -1
  13. package/dist/shared/attributes.d.ts +97 -30
  14. package/dist/shared/attributes.d.ts.map +1 -1
  15. package/dist/shared/attributes.js +46 -1
  16. package/dist/shared/brick-manifest.d.ts +1 -1
  17. package/dist/shared/brick-manifest.js +26 -1
  18. package/dist/shared/bricks/manifests/accordion.manifest.d.ts +2 -2
  19. package/dist/shared/bricks/manifests/accordion.manifest.js +29 -1
  20. package/dist/shared/bricks/manifests/all-manifests.d.ts.map +1 -1
  21. package/dist/shared/bricks/manifests/all-manifests.js +59 -1
  22. package/dist/shared/bricks/manifests/box.manifest.d.ts +2 -2
  23. package/dist/shared/bricks/manifests/box.manifest.js +28 -1
  24. package/dist/shared/bricks/manifests/button.manifest.d.ts +2 -2
  25. package/dist/shared/bricks/manifests/button.manifest.js +28 -1
  26. package/dist/shared/bricks/manifests/card.manifest.d.ts +3 -3
  27. package/dist/shared/bricks/manifests/card.manifest.js +28 -1
  28. package/dist/shared/bricks/manifests/carousel.manifest.d.ts +2 -2
  29. package/dist/shared/bricks/manifests/carousel.manifest.js +28 -1
  30. package/dist/shared/bricks/manifests/footer.manifest.d.ts +4 -4
  31. package/dist/shared/bricks/manifests/footer.manifest.d.ts.map +1 -1
  32. package/dist/shared/bricks/manifests/footer.manifest.js +30 -1
  33. package/dist/shared/bricks/manifests/form.manifest.d.ts +3 -3
  34. package/dist/shared/bricks/manifests/form.manifest.js +29 -1
  35. package/dist/shared/bricks/manifests/hero.manifest.d.ts +2 -2
  36. package/dist/shared/bricks/manifests/hero.manifest.js +28 -1
  37. package/dist/shared/bricks/manifests/html.manifest.d.ts +2 -2
  38. package/dist/shared/bricks/manifests/html.manifest.js +28 -1
  39. package/dist/shared/bricks/manifests/icon.manifest.d.ts +2 -2
  40. package/dist/shared/bricks/manifests/icon.manifest.js +28 -1
  41. package/dist/shared/bricks/manifests/image.manifest.d.ts +2 -2
  42. package/dist/shared/bricks/manifests/image.manifest.js +28 -1
  43. package/dist/shared/bricks/manifests/images-gallery.manifest.d.ts +2 -2
  44. package/dist/shared/bricks/manifests/images-gallery.manifest.js +28 -1
  45. package/dist/shared/bricks/manifests/map.manifest.d.ts +2 -2
  46. package/dist/shared/bricks/manifests/map.manifest.js +31 -1
  47. package/dist/shared/bricks/manifests/navbar.manifest.d.ts +4 -4
  48. package/dist/shared/bricks/manifests/navbar.manifest.d.ts.map +1 -1
  49. package/dist/shared/bricks/manifests/navbar.manifest.js +31 -1
  50. package/dist/shared/bricks/manifests/sidebar.manifest.d.ts +2 -2
  51. package/dist/shared/bricks/manifests/sidebar.manifest.js +29 -1
  52. package/dist/shared/bricks/manifests/social-links.manifest.d.ts +2 -2
  53. package/dist/shared/bricks/manifests/social-links.manifest.js +28 -1
  54. package/dist/shared/bricks/manifests/spacer.manifest.d.ts +2 -2
  55. package/dist/shared/bricks/manifests/spacer.manifest.js +28 -1
  56. package/dist/shared/bricks/manifests/table.manifest.d.ts +91 -0
  57. package/dist/shared/bricks/manifests/table.manifest.d.ts.map +1 -0
  58. package/dist/shared/bricks/manifests/table.manifest.js +31 -0
  59. package/dist/shared/bricks/manifests/tabs.manifest.d.ts +90 -0
  60. package/dist/shared/bricks/manifests/tabs.manifest.d.ts.map +1 -0
  61. package/dist/shared/bricks/manifests/tabs.manifest.js +31 -0
  62. package/dist/shared/bricks/manifests/tabs.manifest.js.map +1 -0
  63. package/dist/shared/bricks/manifests/testimonials.manifest.d.ts +2 -2
  64. package/dist/shared/bricks/manifests/testimonials.manifest.js +28 -1
  65. package/dist/shared/bricks/manifests/text.manifest.d.ts +2 -2
  66. package/dist/shared/bricks/manifests/text.manifest.js +28 -1
  67. package/dist/shared/bricks/manifests/timeline.manifest.d.ts +101 -0
  68. package/dist/shared/bricks/manifests/timeline.manifest.d.ts.map +1 -0
  69. package/dist/shared/bricks/manifests/timeline.manifest.js +31 -0
  70. package/dist/shared/bricks/manifests/timeline.manifest.js.map +1 -0
  71. package/dist/shared/bricks/manifests/video.manifest.d.ts +2 -2
  72. package/dist/shared/bricks/manifests/video.manifest.js +28 -1
  73. package/dist/shared/bricks/props/align.d.ts +2 -2
  74. package/dist/shared/bricks/props/align.js +19 -1
  75. package/dist/shared/bricks/props/background.d.ts +4 -4
  76. package/dist/shared/bricks/props/background.js +15 -1
  77. package/dist/shared/bricks/props/boolean.js +7 -1
  78. package/dist/shared/bricks/props/border.js +16 -1
  79. package/dist/shared/bricks/props/color-preset.d.ts.map +1 -1
  80. package/dist/shared/bricks/props/color-preset.js +13 -1
  81. package/dist/shared/bricks/props/color.js +14 -1
  82. package/dist/shared/bricks/props/common.d.ts +2 -2
  83. package/dist/shared/bricks/props/common.js +13 -1
  84. package/dist/shared/bricks/props/css-length.js +14 -1
  85. package/dist/shared/bricks/props/datarecord.js +7 -1
  86. package/dist/shared/bricks/props/datasource.d.ts +1 -1
  87. package/dist/shared/bricks/props/datasource.js +86 -1
  88. package/dist/shared/bricks/props/datasource.js.map +1 -1
  89. package/dist/shared/bricks/props/date.js +9 -1
  90. package/dist/shared/bricks/props/direction.js +11 -1
  91. package/dist/shared/bricks/props/dynamic.d.ts.map +1 -1
  92. package/dist/shared/bricks/props/dynamic.js +30 -1
  93. package/dist/shared/bricks/props/effects.js +17 -1
  94. package/dist/shared/bricks/props/file.js +15 -1
  95. package/dist/shared/bricks/props/file.js.map +1 -1
  96. package/dist/shared/bricks/props/geolocation.js +44 -1
  97. package/dist/shared/bricks/props/geolocation.js.map +1 -1
  98. package/dist/shared/bricks/props/helpers.d.ts +1 -1
  99. package/dist/shared/bricks/props/helpers.js +18 -1
  100. package/dist/shared/bricks/props/image.js +11 -1
  101. package/dist/shared/bricks/props/number.js +7 -1
  102. package/dist/shared/bricks/props/position.js +7 -1
  103. package/dist/shared/bricks/props/string.js +18 -1
  104. package/dist/shared/bricks/props/tags.js +10 -1
  105. package/dist/shared/bricks/props/text.js +19 -1
  106. package/dist/shared/bricks.d.ts +56 -44
  107. package/dist/shared/bricks.d.ts.map +1 -1
  108. package/dist/shared/bricks.js +79 -1
  109. package/dist/shared/chunk-2BPYOTKA.js +21 -0
  110. package/dist/shared/{chunk-WHTPGWUV.js.map → chunk-2BPYOTKA.js.map} +1 -1
  111. package/dist/shared/chunk-2HO4FHLM.js +456 -0
  112. package/dist/shared/{chunk-I3VL6SRH.js.map → chunk-2HO4FHLM.js.map} +1 -1
  113. package/dist/shared/chunk-2RK3CPYJ.js +74 -0
  114. package/dist/shared/{chunk-W33JMRRN.js.map → chunk-2RK3CPYJ.js.map} +1 -1
  115. package/dist/shared/chunk-3KLRW4I2.js +560 -0
  116. package/dist/shared/{chunk-B3EATRFX.js.map → chunk-3KLRW4I2.js.map} +1 -1
  117. package/dist/shared/chunk-3ZDN5BWN.js +18 -0
  118. package/dist/shared/{chunk-OIY3EPHO.js.map → chunk-3ZDN5BWN.js.map} +1 -1
  119. package/dist/shared/chunk-4WI23M7W.js +30 -0
  120. package/dist/shared/chunk-4WI23M7W.js.map +1 -0
  121. package/dist/shared/chunk-55C6MTX2.js +21 -0
  122. package/dist/shared/{chunk-KBHDY425.js.map → chunk-55C6MTX2.js.map} +1 -1
  123. package/dist/shared/chunk-6E42XWFH.js +103 -0
  124. package/dist/shared/{chunk-ZA3GAB4H.js.map → chunk-6E42XWFH.js.map} +1 -1
  125. package/dist/shared/chunk-6TVVKUWM.js +15 -0
  126. package/dist/shared/{chunk-4WDWJA3N.js.map → chunk-6TVVKUWM.js.map} +1 -1
  127. package/dist/shared/chunk-6WIMWLCJ.js +17 -0
  128. package/dist/shared/{chunk-KYY3PHP7.js.map → chunk-6WIMWLCJ.js.map} +1 -1
  129. package/dist/shared/chunk-7LAWWRU7.js +21 -0
  130. package/dist/shared/{chunk-IUXCWWGO.js.map → chunk-7LAWWRU7.js.map} +1 -1
  131. package/dist/shared/chunk-A2QPY54H.js +13 -0
  132. package/dist/shared/{chunk-KFM6KXSE.js.map → chunk-A2QPY54H.js.map} +1 -1
  133. package/dist/shared/chunk-BHC2A43S.js +67 -0
  134. package/dist/shared/{chunk-3YVJ2ELD.js.map → chunk-BHC2A43S.js.map} +1 -1
  135. package/dist/shared/chunk-BMWRR4DI.js +572 -0
  136. package/dist/shared/chunk-BMWRR4DI.js.map +1 -0
  137. package/dist/shared/chunk-BPBKHEQ5.js +39 -0
  138. package/dist/shared/{chunk-OHNYCXPX.js.map → chunk-BPBKHEQ5.js.map} +1 -1
  139. package/dist/shared/chunk-BW6EFRSF.js +794 -0
  140. package/dist/shared/chunk-BW6EFRSF.js.map +1 -0
  141. package/dist/shared/chunk-CKFRSHR2.js +105 -0
  142. package/dist/shared/{chunk-CFF6Q7O7.js.map → chunk-CKFRSHR2.js.map} +1 -1
  143. package/dist/shared/chunk-CSF2WQX2.js +60 -0
  144. package/dist/shared/{chunk-GLS7HPIZ.js.map → chunk-CSF2WQX2.js.map} +1 -1
  145. package/dist/shared/chunk-D4YQ6ABM.js +338 -0
  146. package/dist/shared/{chunk-PXI7AHWS.js.map → chunk-D4YQ6ABM.js.map} +1 -1
  147. package/dist/shared/chunk-DRTGM2UJ.js +129 -0
  148. package/dist/shared/{chunk-FLOMNC6J.js.map → chunk-DRTGM2UJ.js.map} +1 -1
  149. package/dist/shared/chunk-EQMU6NIU.js +1222 -0
  150. package/dist/shared/chunk-EQMU6NIU.js.map +1 -0
  151. package/dist/shared/chunk-EWSPTRDL.js +378 -0
  152. package/dist/shared/{chunk-QX6OGRRT.js.map → chunk-EWSPTRDL.js.map} +1 -1
  153. package/dist/shared/chunk-F22LDHEO.js +105 -0
  154. package/dist/shared/{chunk-5YRC3IT3.js.map → chunk-F22LDHEO.js.map} +1 -1
  155. package/dist/shared/chunk-FVU5PXRC.js +244 -0
  156. package/dist/shared/chunk-FVU5PXRC.js.map +1 -0
  157. package/dist/shared/chunk-GCQURRVB.js +837 -0
  158. package/dist/shared/{chunk-WYVJE6J5.js.map → chunk-GCQURRVB.js.map} +1 -1
  159. package/dist/shared/chunk-GPCI2N2A.js +395 -0
  160. package/dist/shared/{chunk-WBZW5LVH.js.map → chunk-GPCI2N2A.js.map} +1 -1
  161. package/dist/shared/chunk-GRMY35BU.js +722 -0
  162. package/dist/shared/{chunk-NJGXC7D6.js.map → chunk-GRMY35BU.js.map} +1 -1
  163. package/dist/shared/chunk-HPCCD6V5.js +17 -0
  164. package/dist/shared/{chunk-6I3ONVU6.js.map → chunk-HPCCD6V5.js.map} +1 -1
  165. package/dist/shared/chunk-JK2FWFJU.js +15 -0
  166. package/dist/shared/{chunk-JMN3HTZU.js.map → chunk-JK2FWFJU.js.map} +1 -1
  167. package/dist/shared/chunk-KNREHAPN.js +13 -0
  168. package/dist/shared/{chunk-KSEURRVZ.js.map → chunk-KNREHAPN.js.map} +1 -1
  169. package/dist/shared/chunk-KT7SSWMM.js +24 -0
  170. package/dist/shared/{chunk-KO5FPOWZ.js.map → chunk-KT7SSWMM.js.map} +1 -1
  171. package/dist/shared/chunk-LXAO3JA6.js +368 -0
  172. package/dist/shared/chunk-LXAO3JA6.js.map +1 -0
  173. package/dist/shared/chunk-MLZT7MRQ.js +538 -0
  174. package/dist/shared/chunk-MLZT7MRQ.js.map +1 -0
  175. package/dist/shared/chunk-NT3IW52F.js +260 -0
  176. package/dist/shared/chunk-NT3IW52F.js.map +1 -0
  177. package/dist/shared/chunk-NTLAKMMQ.js +94 -0
  178. package/dist/shared/{chunk-ZTZJHY4E.js.map → chunk-NTLAKMMQ.js.map} +1 -1
  179. package/dist/shared/chunk-O5PLB3YB.js +413 -0
  180. package/dist/shared/chunk-O5PLB3YB.js.map +1 -0
  181. package/dist/shared/chunk-O5PQISX4.js +51 -0
  182. package/dist/shared/{chunk-VEDQV5XO.js.map → chunk-O5PQISX4.js.map} +1 -1
  183. package/dist/shared/chunk-OJP4HMJT.js +22 -0
  184. package/dist/shared/{chunk-6HLU4UI2.js.map → chunk-OJP4HMJT.js.map} +1 -1
  185. package/dist/shared/chunk-OSJ6KGPX.js +16 -0
  186. package/dist/shared/{chunk-GPEMPZXK.js.map → chunk-OSJ6KGPX.js.map} +1 -1
  187. package/dist/shared/chunk-OXYXZHP2.js +48 -0
  188. package/dist/shared/{chunk-5O4Z3YQY.js.map → chunk-OXYXZHP2.js.map} +1 -1
  189. package/dist/shared/chunk-P3RH5URN.js +230 -0
  190. package/dist/shared/{chunk-R6ATC4TC.js.map → chunk-P3RH5URN.js.map} +1 -1
  191. package/dist/shared/chunk-Q4NPPLEU.js +34 -0
  192. package/dist/shared/{chunk-QWGUMKZC.js.map → chunk-Q4NPPLEU.js.map} +1 -1
  193. package/dist/shared/chunk-QL3T5HJQ.js +59 -0
  194. package/dist/shared/{chunk-E6XEI7IK.js.map → chunk-QL3T5HJQ.js.map} +1 -1
  195. package/dist/shared/chunk-QLQVDZIL.js +11 -0
  196. package/dist/shared/{chunk-KLD3P5XH.js.map → chunk-QLQVDZIL.js.map} +1 -1
  197. package/dist/shared/chunk-QQQ3FYPG.js +248 -0
  198. package/dist/shared/{chunk-SXHDQ64Z.js.map → chunk-QQQ3FYPG.js.map} +1 -1
  199. package/dist/shared/chunk-QSND5IWT.js +165 -0
  200. package/dist/shared/{chunk-ZQPXQCY2.js.map → chunk-QSND5IWT.js.map} +1 -1
  201. package/dist/shared/chunk-RV7AYVFV.js +75 -0
  202. package/dist/shared/{chunk-DHI3IBOD.js.map → chunk-RV7AYVFV.js.map} +1 -1
  203. package/dist/shared/chunk-SE6O65HC.js +44 -0
  204. package/dist/shared/{chunk-NM5MMPCF.js.map → chunk-SE6O65HC.js.map} +1 -1
  205. package/dist/shared/chunk-SHUGHJ7V.js +519 -0
  206. package/dist/shared/{chunk-IKC3FK7L.js.map → chunk-SHUGHJ7V.js.map} +1 -1
  207. package/dist/shared/chunk-TB3X4LRQ.js +56 -0
  208. package/dist/shared/{chunk-RJYZ5FAR.js.map → chunk-TB3X4LRQ.js.map} +1 -1
  209. package/dist/shared/chunk-TEO6TJOM.js +212 -0
  210. package/dist/shared/chunk-TEO6TJOM.js.map +1 -0
  211. package/dist/shared/chunk-TFGGYU6Y.js +394 -0
  212. package/dist/shared/{chunk-CZRCW5EN.js.map → chunk-TFGGYU6Y.js.map} +1 -1
  213. package/dist/shared/chunk-TKMWY2VN.js +18 -0
  214. package/dist/shared/{chunk-RDZK73KV.js.map → chunk-TKMWY2VN.js.map} +1 -1
  215. package/dist/shared/chunk-TNMNMYOB.js +69 -0
  216. package/dist/shared/{chunk-4BTB3MU2.js.map → chunk-TNMNMYOB.js.map} +1 -1
  217. package/dist/shared/chunk-U7TVEPKA.js +432 -0
  218. package/dist/shared/chunk-U7TVEPKA.js.map +1 -0
  219. package/dist/shared/chunk-UQF52PWK.js +70 -0
  220. package/dist/shared/{chunk-A3GF4PYW.js.map → chunk-UQF52PWK.js.map} +1 -1
  221. package/dist/shared/chunk-V3UA3LRK.js +253 -0
  222. package/dist/shared/{chunk-G5CJU6RD.js.map → chunk-V3UA3LRK.js.map} +1 -1
  223. package/dist/shared/chunk-W6MRYRGJ.js +100 -0
  224. package/dist/shared/{chunk-CCI4C3TM.js.map → chunk-W6MRYRGJ.js.map} +1 -1
  225. package/dist/shared/chunk-WGDUJSSS.js +462 -0
  226. package/dist/shared/chunk-WGDUJSSS.js.map +1 -0
  227. package/dist/shared/chunk-WKN566LN.js +29 -0
  228. package/dist/shared/{chunk-Q4H4QEMB.js.map → chunk-WKN566LN.js.map} +1 -1
  229. package/dist/shared/chunk-X6N463D4.js +222 -0
  230. package/dist/shared/{chunk-IKHZD2JH.js.map → chunk-X6N463D4.js.map} +1 -1
  231. package/dist/shared/chunk-X75YV73Q.js +178 -0
  232. package/dist/shared/{chunk-PLSV746R.js.map → chunk-X75YV73Q.js.map} +1 -1
  233. package/dist/shared/chunk-XCWMZVF5.js +89 -0
  234. package/dist/shared/{chunk-ZFCUSWMT.js.map → chunk-XCWMZVF5.js.map} +1 -1
  235. package/dist/shared/chunk-XCZVD5H6.js +13 -0
  236. package/dist/shared/{chunk-HAGKVQOW.js.map → chunk-XCZVD5H6.js.map} +1 -1
  237. package/dist/shared/chunk-XZ6WJZHN.js +10 -0
  238. package/dist/shared/{chunk-DCH4ZKWT.js.map → chunk-XZ6WJZHN.js.map} +1 -1
  239. package/dist/shared/chunk-Y74LZNND.js +30 -0
  240. package/dist/shared/{chunk-GACHLACT.js.map → chunk-Y74LZNND.js.map} +1 -1
  241. package/dist/shared/chunk-Z2NTDFB4.js +505 -0
  242. package/dist/shared/{chunk-SQ5T4AT5.js.map → chunk-Z2NTDFB4.js.map} +1 -1
  243. package/dist/shared/chunk-Z35I5JM5.js +131 -0
  244. package/dist/shared/{chunk-PSTFJ5IJ.js.map → chunk-Z35I5JM5.js.map} +1 -1
  245. package/dist/shared/chunk-ZEFOWKYP.js +44 -0
  246. package/dist/shared/{chunk-DQ7PRWTG.js.map → chunk-ZEFOWKYP.js.map} +1 -1
  247. package/dist/shared/chunk-ZGQ3AQBG.js +33 -0
  248. package/dist/shared/chunk-ZGQ3AQBG.js.map +1 -0
  249. package/dist/shared/chunk-ZLYIRH2B.js +68 -0
  250. package/dist/shared/{chunk-SWLUQVK7.js.map → chunk-ZLYIRH2B.js.map} +1 -1
  251. package/dist/shared/datarecords/external/airtable/handler.js +377 -1
  252. package/dist/shared/datarecords/external/airtable/handler.js.map +1 -1
  253. package/dist/shared/datarecords/external/airtable/oauth/config.js +15 -1
  254. package/dist/shared/datarecords/external/airtable/oauth/config.js.map +1 -1
  255. package/dist/shared/datarecords/external/airtable/types.js +11 -1
  256. package/dist/shared/datarecords/external/generic-webhook/handler.js +14 -1
  257. package/dist/shared/datarecords/external/generic-webhook/handler.js.map +1 -1
  258. package/dist/shared/datarecords/external/generic-webhook/options.js +16 -1
  259. package/dist/shared/datarecords/external/generic-webhook/options.js.map +1 -1
  260. package/dist/shared/datarecords/external/google/oauth/config.js +35 -1
  261. package/dist/shared/datarecords/external/google/oauth/config.js.map +1 -1
  262. package/dist/shared/datarecords/external/google/sheets/client.js +7 -1
  263. package/dist/shared/datarecords/external/google/sheets/handler.js +184 -5
  264. package/dist/shared/datarecords/external/google/sheets/handler.js.map +1 -1
  265. package/dist/shared/datarecords/external/google/sheets/types.js +7 -1
  266. package/dist/shared/datarecords/external/notion/handler.js +397 -1
  267. package/dist/shared/datarecords/external/notion/handler.js.map +1 -1
  268. package/dist/shared/datarecords/external/notion/oauth/config.js +11 -1
  269. package/dist/shared/datarecords/external/notion/oauth/config.js.map +1 -1
  270. package/dist/shared/datarecords/external/notion/types.js +7 -1
  271. package/dist/shared/datarecords/types.d.ts +3 -3
  272. package/dist/shared/datarecords/types.js +16 -1
  273. package/dist/shared/datarecords.js +9 -1
  274. package/dist/shared/datarecords.js.map +1 -1
  275. package/dist/shared/datasources/external/facebook/posts/fetcher.js +49 -1
  276. package/dist/shared/datasources/external/facebook/posts/fetcher.js.map +1 -1
  277. package/dist/shared/datasources/external/facebook/posts/schema.js +36 -1
  278. package/dist/shared/datasources/external/facebook/posts/schema.js.map +1 -1
  279. package/dist/shared/datasources/external/http-json/fetcher.js +29 -1
  280. package/dist/shared/datasources/external/http-json/fetcher.js.map +1 -1
  281. package/dist/shared/datasources/external/http-json/options.js +11 -1
  282. package/dist/shared/datasources/external/http-json/options.js.map +1 -1
  283. package/dist/shared/datasources/external/http-json/schema.js +10 -1
  284. package/dist/shared/datasources/external/http-json/schema.js.map +1 -1
  285. package/dist/shared/datasources/external/instagram/feed/fetcher.js +29 -1
  286. package/dist/shared/datasources/external/instagram/feed/fetcher.js.map +1 -1
  287. package/dist/shared/datasources/external/instagram/feed/schema.js +26 -1
  288. package/dist/shared/datasources/external/instagram/feed/schema.js.map +1 -1
  289. package/dist/shared/datasources/external/mastodon/account/fetcher.js +7 -1
  290. package/dist/shared/datasources/external/mastodon/account/schema.js +7 -1
  291. package/dist/shared/datasources/external/mastodon/options.js +10 -1
  292. package/dist/shared/datasources/external/mastodon/options.js.map +1 -1
  293. package/dist/shared/datasources/external/mastodon/status/fetcher.js +31 -1
  294. package/dist/shared/datasources/external/mastodon/status/fetcher.js.map +1 -1
  295. package/dist/shared/datasources/external/mastodon/status/sample.array.js +61 -1
  296. package/dist/shared/datasources/external/mastodon/status/sample.array.js.map +1 -1
  297. package/dist/shared/datasources/external/mastodon/status/sample.single.js +59 -1
  298. package/dist/shared/datasources/external/mastodon/status/sample.single.js.map +1 -1
  299. package/dist/shared/datasources/external/mastodon/status/schema.js +125 -1
  300. package/dist/shared/datasources/external/mastodon/status/schema.js.map +1 -1
  301. package/dist/shared/datasources/external/meta/oauth/config.js +17 -1
  302. package/dist/shared/datasources/external/meta/oauth/config.js.map +1 -1
  303. package/dist/shared/datasources/external/meta/options.js +10 -1
  304. package/dist/shared/datasources/external/meta/options.js.map +1 -1
  305. package/dist/shared/datasources/external/rss/fetcher.js +26 -1
  306. package/dist/shared/datasources/external/rss/fetcher.js.map +1 -1
  307. package/dist/shared/datasources/external/rss/options.js +10 -1
  308. package/dist/shared/datasources/external/rss/options.js.map +1 -1
  309. package/dist/shared/datasources/external/rss/schema.js +7 -1
  310. package/dist/shared/datasources/external/threads/media/fetcher.js +47 -1
  311. package/dist/shared/datasources/external/threads/media/fetcher.js.map +1 -1
  312. package/dist/shared/datasources/external/threads/media/schema.js +40 -1
  313. package/dist/shared/datasources/external/threads/media/schema.js.map +1 -1
  314. package/dist/shared/datasources/external/tiktok/oauth/config.js +18 -1
  315. package/dist/shared/datasources/external/tiktok/oauth/config.js.map +1 -1
  316. package/dist/shared/datasources/external/tiktok/video/fetcher.js +34 -1
  317. package/dist/shared/datasources/external/tiktok/video/fetcher.js.map +1 -1
  318. package/dist/shared/datasources/external/tiktok/video/options.js +11 -1
  319. package/dist/shared/datasources/external/tiktok/video/options.js.map +1 -1
  320. package/dist/shared/datasources/external/tiktok/video/schema.js +30 -1
  321. package/dist/shared/datasources/external/tiktok/video/schema.js.map +1 -1
  322. package/dist/shared/datasources/external/youtube/list/fetcher.js +32 -1
  323. package/dist/shared/datasources/external/youtube/list/fetcher.js.map +1 -1
  324. package/dist/shared/datasources/external/youtube/list/options.js +14 -1
  325. package/dist/shared/datasources/external/youtube/list/options.js.map +1 -1
  326. package/dist/shared/datasources/external/youtube/list/schema.js +7 -1
  327. package/dist/shared/datasources/external/youtube/oauth/config.js +18 -1
  328. package/dist/shared/datasources/external/youtube/oauth/config.js.map +1 -1
  329. package/dist/shared/datasources/internal/blog/schema.js +72 -1
  330. package/dist/shared/datasources/internal/blog/schema.js.map +1 -1
  331. package/dist/shared/datasources/internal/changelog/schema.js +51 -1
  332. package/dist/shared/datasources/internal/changelog/schema.js.map +1 -1
  333. package/dist/shared/datasources/internal/contact-info/schema.js +25 -1
  334. package/dist/shared/datasources/internal/contact-info/schema.js.map +1 -1
  335. package/dist/shared/datasources/internal/cv/schema.js +222 -1
  336. package/dist/shared/datasources/internal/cv/schema.js.map +1 -1
  337. package/dist/shared/datasources/internal/faq/schema.js +30 -1
  338. package/dist/shared/datasources/internal/faq/schema.js.map +1 -1
  339. package/dist/shared/datasources/internal/job-board/schema.js +224 -1
  340. package/dist/shared/datasources/internal/job-board/schema.js.map +1 -1
  341. package/dist/shared/datasources/internal/links/schema.js +7 -1
  342. package/dist/shared/datasources/internal/recipes/schema.js +45 -1
  343. package/dist/shared/datasources/internal/recipes/schema.js.map +1 -1
  344. package/dist/shared/datasources/internal/restaurant/schema.js +226 -1
  345. package/dist/shared/datasources/internal/restaurant/schema.js.map +1 -1
  346. package/dist/shared/datasources/samples.js +69 -1
  347. package/dist/shared/datasources/samples.js.map +1 -1
  348. package/dist/shared/datasources/schemas.js +34 -1
  349. package/dist/shared/datasources/schemas.js.map +1 -1
  350. package/dist/shared/datasources/types.d.ts +1 -1
  351. package/dist/shared/datasources/types.d.ts.map +1 -1
  352. package/dist/shared/datasources/types.js +32 -1
  353. package/dist/shared/datasources/utils.js +11 -1
  354. package/dist/shared/datasources.js +51 -1
  355. package/dist/shared/datasources.js.map +1 -1
  356. package/dist/shared/errors.js +7 -1
  357. package/dist/shared/images.d.ts +4 -4
  358. package/dist/shared/images.d.ts.map +1 -1
  359. package/dist/shared/images.js +44 -1
  360. package/dist/shared/images.js.map +1 -1
  361. package/dist/shared/index.js +9 -1
  362. package/dist/shared/index.js.map +1 -1
  363. package/dist/shared/layout-constants.js +14 -1
  364. package/dist/shared/layout-constants.js.map +1 -1
  365. package/dist/shared/manifest.js +52 -1
  366. package/dist/shared/manifest.js.map +1 -1
  367. package/dist/shared/oauth.js +8 -1
  368. package/dist/shared/page.d.ts +12 -126
  369. package/dist/shared/page.d.ts.map +1 -1
  370. package/dist/shared/page.js +58 -1
  371. package/dist/shared/prompt.js +7 -1
  372. package/dist/shared/responsive.js +10 -1
  373. package/dist/shared/responsive.js.map +1 -1
  374. package/dist/shared/schema-registry.d.ts +5 -0
  375. package/dist/shared/schema-registry.d.ts.map +1 -0
  376. package/dist/shared/schema-registry.js +119 -0
  377. package/dist/shared/schema-registry.js.map +1 -0
  378. package/dist/shared/site.d.ts +36 -33
  379. package/dist/shared/site.d.ts.map +1 -1
  380. package/dist/shared/site.js +127 -1
  381. package/dist/shared/site.js.map +1 -1
  382. package/dist/shared/sitemap.d.ts +17 -17
  383. package/dist/shared/sitemap.d.ts.map +1 -1
  384. package/dist/shared/sitemap.js +69 -1
  385. package/dist/shared/social-icons.js +312 -1
  386. package/dist/shared/social-icons.js.map +1 -1
  387. package/dist/shared/tests/schema-registry.test.d.ts +2 -0
  388. package/dist/shared/tests/schema-registry.test.d.ts.map +1 -0
  389. package/dist/shared/theme.d.ts +1 -1
  390. package/dist/shared/theme.d.ts.map +1 -1
  391. package/dist/shared/theme.js +35 -1
  392. package/dist/shared/themes/color-system.d.ts +0 -1
  393. package/dist/shared/themes/color-system.d.ts.map +1 -1
  394. package/dist/shared/themes/color-system.js +103 -1
  395. package/dist/shared/themes/color-system.js.map +1 -1
  396. package/dist/shared/utils/canvas-data-uri.js +7 -1
  397. package/dist/shared/utils/canvas-data-uri.js.map +1 -1
  398. package/dist/shared/utils/invariant.js +7 -1
  399. package/dist/shared/utils/json-date.js +7 -1
  400. package/dist/shared/utils/llm.d.ts +2 -3
  401. package/dist/shared/utils/llm.d.ts.map +1 -1
  402. package/dist/shared/utils/llm.js +24 -1
  403. package/dist/shared/utils/merge.js +7 -1
  404. package/dist/shared/utils/object-hash.js +13 -1
  405. package/dist/shared/utils/object-hash.js.map +1 -1
  406. package/dist/shared/utils/schema-registry.d.ts +5 -0
  407. package/dist/shared/utils/schema-registry.d.ts.map +1 -0
  408. package/dist/shared/utils/schema-registry.js +29 -0
  409. package/dist/shared/utils/schema-registry.js.map +1 -0
  410. package/dist/shared/utils/schema.d.ts +2 -1
  411. package/dist/shared/utils/schema.d.ts.map +1 -1
  412. package/dist/shared/utils/schema.js +31 -1
  413. package/dist/shared/utils/string-enum.js +7 -1
  414. package/dist/shared/utils/tests/schema-registry.test.d.ts +2 -0
  415. package/dist/shared/utils/tests/schema-registry.test.d.ts.map +1 -0
  416. package/dist/shared/utils/try-catch.js +13 -1
  417. package/dist/shared/utils/try-catch.js.map +1 -1
  418. package/dist/shared/utils/typed-ref.js +7 -1
  419. package/package.json +12 -13
  420. package/src/shared/ai/schemas.ts +4 -8
  421. package/src/shared/ai/types.ts +9 -1
  422. package/src/shared/attributes.ts +27 -25
  423. package/src/shared/bricks/manifests/all-manifests.ts +15 -0
  424. package/src/shared/bricks/manifests/footer.manifest.ts +36 -27
  425. package/src/shared/bricks/manifests/navbar.manifest.ts +1 -3
  426. package/src/shared/bricks/manifests/table.manifest.ts +443 -0
  427. package/src/shared/bricks/manifests/tabs.manifest.ts +576 -0
  428. package/src/shared/bricks/manifests/timeline.manifest.ts +441 -0
  429. package/src/shared/bricks/props/color-preset.ts +3 -1
  430. package/src/shared/bricks/props/dynamic.ts +0 -1
  431. package/src/shared/bricks.ts +54 -45
  432. package/src/shared/datasources/types.ts +1 -5
  433. package/src/shared/images.ts +10 -8
  434. package/src/shared/page.ts +0 -4
  435. package/src/shared/schema-registry.ts +82 -0
  436. package/src/shared/sitemap.ts +12 -16
  437. package/src/shared/tests/schema-registry.test.ts +14 -0
  438. package/src/shared/theme.ts +1 -4
  439. package/src/shared/themes/color-system.ts +0 -1
  440. package/src/shared/utils/llm.ts +13 -12
  441. package/src/shared/utils/schema-registry.ts +82 -0
  442. package/src/shared/utils/schema.ts +18 -3
  443. package/src/shared/utils/tests/schema-registry.test.ts +13 -0
  444. package/src/shared/utils/tests/schema.test.ts +82 -55
  445. package/dist/shared/bricks/props/enum.d.ts +0 -13
  446. package/dist/shared/bricks/props/enum.d.ts.map +0 -1
  447. package/dist/shared/bricks/props/enum.js +0 -4
  448. package/dist/shared/chunk-3YVJ2ELD.js +0 -4
  449. package/dist/shared/chunk-4BTB3MU2.js +0 -4
  450. package/dist/shared/chunk-4WDWJA3N.js +0 -4
  451. package/dist/shared/chunk-5O4Z3YQY.js +0 -4
  452. package/dist/shared/chunk-5YRC3IT3.js +0 -4
  453. package/dist/shared/chunk-6HLU4UI2.js +0 -4
  454. package/dist/shared/chunk-6I3ONVU6.js +0 -4
  455. package/dist/shared/chunk-7A2JNQX3.js +0 -4
  456. package/dist/shared/chunk-7A2JNQX3.js.map +0 -1
  457. package/dist/shared/chunk-A3GF4PYW.js +0 -4
  458. package/dist/shared/chunk-A3K4NUVP.js +0 -4
  459. package/dist/shared/chunk-A3K4NUVP.js.map +0 -1
  460. package/dist/shared/chunk-AFVJZPLS.js +0 -4
  461. package/dist/shared/chunk-AFVJZPLS.js.map +0 -1
  462. package/dist/shared/chunk-AI4GHU7R.js +0 -4
  463. package/dist/shared/chunk-AI4GHU7R.js.map +0 -1
  464. package/dist/shared/chunk-B3EATRFX.js +0 -4
  465. package/dist/shared/chunk-CCI4C3TM.js +0 -4
  466. package/dist/shared/chunk-CFF6Q7O7.js +0 -7
  467. package/dist/shared/chunk-CZRCW5EN.js +0 -4
  468. package/dist/shared/chunk-DCH4ZKWT.js +0 -4
  469. package/dist/shared/chunk-DHI3IBOD.js +0 -4
  470. package/dist/shared/chunk-DQ7PRWTG.js +0 -4
  471. package/dist/shared/chunk-E6XEI7IK.js +0 -4
  472. package/dist/shared/chunk-FLOMNC6J.js +0 -4
  473. package/dist/shared/chunk-G5CJU6RD.js +0 -7
  474. package/dist/shared/chunk-GACHLACT.js +0 -4
  475. package/dist/shared/chunk-GLS7HPIZ.js +0 -4
  476. package/dist/shared/chunk-GOMXZC4B.js +0 -35
  477. package/dist/shared/chunk-GOMXZC4B.js.map +0 -1
  478. package/dist/shared/chunk-GPEMPZXK.js +0 -4
  479. package/dist/shared/chunk-HAGKVQOW.js +0 -4
  480. package/dist/shared/chunk-I3VL6SRH.js +0 -9
  481. package/dist/shared/chunk-IKC3FK7L.js +0 -4
  482. package/dist/shared/chunk-IKHZD2JH.js +0 -4
  483. package/dist/shared/chunk-IUXCWWGO.js +0 -4
  484. package/dist/shared/chunk-JMN3HTZU.js +0 -4
  485. package/dist/shared/chunk-KBHDY425.js +0 -4
  486. package/dist/shared/chunk-KFM6KXSE.js +0 -4
  487. package/dist/shared/chunk-KLD3P5XH.js +0 -4
  488. package/dist/shared/chunk-KO5FPOWZ.js +0 -4
  489. package/dist/shared/chunk-KSEURRVZ.js +0 -4
  490. package/dist/shared/chunk-KYY3PHP7.js +0 -4
  491. package/dist/shared/chunk-NJGXC7D6.js +0 -4
  492. package/dist/shared/chunk-NM5MMPCF.js +0 -4
  493. package/dist/shared/chunk-OGBMYMZD.js +0 -4
  494. package/dist/shared/chunk-OGBMYMZD.js.map +0 -1
  495. package/dist/shared/chunk-OHNYCXPX.js +0 -4
  496. package/dist/shared/chunk-OIY3EPHO.js +0 -4
  497. package/dist/shared/chunk-PIG623TZ.js +0 -4
  498. package/dist/shared/chunk-PIG623TZ.js.map +0 -1
  499. package/dist/shared/chunk-PLSV746R.js +0 -4
  500. package/dist/shared/chunk-PSCN3VVA.js +0 -4
  501. package/dist/shared/chunk-PSCN3VVA.js.map +0 -1
  502. package/dist/shared/chunk-PSTFJ5IJ.js +0 -4
  503. package/dist/shared/chunk-PXI7AHWS.js +0 -4
  504. package/dist/shared/chunk-Q4H4QEMB.js +0 -4
  505. package/dist/shared/chunk-QGYZ7CG5.js +0 -4
  506. package/dist/shared/chunk-QGYZ7CG5.js.map +0 -1
  507. package/dist/shared/chunk-QWGUMKZC.js +0 -4
  508. package/dist/shared/chunk-QX6OGRRT.js +0 -5
  509. package/dist/shared/chunk-R6ATC4TC.js +0 -4
  510. package/dist/shared/chunk-RDZK73KV.js +0 -4
  511. package/dist/shared/chunk-RJYZ5FAR.js +0 -4
  512. package/dist/shared/chunk-SQ5T4AT5.js +0 -6
  513. package/dist/shared/chunk-SWLUQVK7.js +0 -4
  514. package/dist/shared/chunk-SXHDQ64Z.js +0 -5
  515. package/dist/shared/chunk-SY6DZLTC.js +0 -4
  516. package/dist/shared/chunk-SY6DZLTC.js.map +0 -1
  517. package/dist/shared/chunk-VEDQV5XO.js +0 -4
  518. package/dist/shared/chunk-W33JMRRN.js +0 -4
  519. package/dist/shared/chunk-WBZW5LVH.js +0 -4
  520. package/dist/shared/chunk-WHTPGWUV.js +0 -4
  521. package/dist/shared/chunk-WYVJE6J5.js +0 -4
  522. package/dist/shared/chunk-ZA3GAB4H.js +0 -9
  523. package/dist/shared/chunk-ZFCUSWMT.js +0 -4
  524. package/dist/shared/chunk-ZQPXQCY2.js +0 -4
  525. package/dist/shared/chunk-ZTZJHY4E.js +0 -4
  526. package/src/shared/bricks/props/enum.ts +0 -38
  527. /package/dist/shared/bricks/{props/enum.js.map → manifests/table.manifest.js.map} +0 -0
@@ -1,4 +1,10 @@
1
1
  /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
2
 
3
- import{a}from"../../../../chunk-ZFCUSWMT.js";export{a as default};
3
+ import {
4
+ getClient
5
+ } from "../../../../chunk-XCWMZVF5.js";
6
+ import "../../../../chunk-ZGQ3AQBG.js";
7
+ export {
8
+ getClient as default
9
+ };
4
10
  //# sourceMappingURL=client.js.map
@@ -1,8 +1,187 @@
1
1
  /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
2
 
3
- import{a as p}from"../../../../chunk-ZFCUSWMT.js";async function w(o,n){try{let e=await p(n).callDriveApi(`https://www.googleapis.com/drive/v3/files/${o}/export?mimeType=text/csv`,"GET");if(!e.success)throw new Error(`Failed to download spreadsheet: ${e.status}`);return e.data}catch(s){throw console.error("Error downloading Google Sheets data:",s),s}}async function u(o,n,s){try{let r=await p(s).callDriveApi(`https://www.googleapis.com/upload/drive/v3/files/${o}?uploadType=resumable`,"PATCH",{mimeType:"application/vnd.google-apps.spreadsheet"});if(!r.success){let c=r.data;throw new Error(`Failed to initiate upload: ${r.status} - ${c}`)}let t=r.headers.get("Location");if(!t)throw new Error("No upload URL returned from Google Drive");return(await fetch(t,{method:"PUT",headers:{"Content-Type":"text/csv"},body:n.map(c=>c.replace("\r","")).join(`
4
- `)})).ok}catch(e){throw console.error("Error uploading Google Sheets data:",e),e}}async function v({formData:o,options:n,properties:s,accessToken:e}){try{if(!e)throw new Error("Access token is required");if(!n.spreadsheetId)throw new Error("Spreadsheet ID is required");let t=(await w(n.spreadsheetId,e)).trim().split(`
5
- `),i={};for(let[l,a]of o.entries())i[l]=a;let d=g(s).map(l=>{let a=i[l]?.toString()||"";return a.includes(",")||a.includes('"')||a.includes(`
6
- `)?`"${a.replace(/"/g,'""')}"`:a}).join(",");return t.push(d),u(n.spreadsheetId,t,e)}catch(r){return console.error("Error pushing data to Google Sheets:",r),!1}}async function y({name:o,schema:n,accessToken:s}){try{let r=await p(s).callDriveApi("https://www.googleapis.com/drive/v3/files","POST",{name:o,mimeType:"application/vnd.google-apps.spreadsheet"});if(!r.success)throw new Error(`Failed to create spreadsheet: ${r.status}`);let t=r.data.id,i=`https://docs.google.com/spreadsheets/d/${t}/edit`,d=g(n.properties).join(",");return await u(t,[d],s),{spreadsheetId:t,spreadsheetUrl:i}}catch(e){throw console.error("Error creating Google Sheets spreadsheet:",e),e}}function g(o){return Object.entries(o).sort(([,e],[,r])=>{let t=e.metadata?.order,i=r.metadata?.order;return t!==void 0&&i!==void 0?t-i:t!==void 0&&i===void 0?-1:t===void 0&&i!==void 0?1:0}).map(([e,r])=>e)}async function T({spreadsheetId:o,newName:n,newProperties:s,accessToken:e}){try{if(n&&await p(e).callDriveApi(`https://www.googleapis.com/drive/v3/files/${o}`,"PATCH",{name:n}),s){let r=g(s),c=(await w(o,e)).split(`
7
- `).map((d,l)=>{if(l===0)return[...d.split(","),...r].join(",");{let a=d.split(","),h=r.map(()=>"");return[...a,...h].join(",")}});await u(o,c,e)}}catch(r){throw console.error("Error updating Google Sheets spreadsheet:",r),r}}export{y as createTable,v as saveRecord,T as updateTable};
3
+ import {
4
+ getClient
5
+ } from "../../../../chunk-XCWMZVF5.js";
6
+ import "../../../../chunk-ZGQ3AQBG.js";
7
+
8
+ // src/shared/datarecords/external/google/sheets/handler.ts
9
+ async function downloadGoogleSheetsData(spreadsheetId, accessToken) {
10
+ try {
11
+ const client = getClient(accessToken);
12
+ const response = await client.callDriveApi(
13
+ `https://www.googleapis.com/drive/v3/files/${spreadsheetId}/export?mimeType=text/csv`,
14
+ "GET"
15
+ );
16
+ if (!response.success) {
17
+ throw new Error(`Failed to download spreadsheet: ${response.status}`);
18
+ }
19
+ return response.data;
20
+ } catch (error) {
21
+ console.error("Error downloading Google Sheets data:", error);
22
+ throw error;
23
+ }
24
+ }
25
+ async function uploadGoogleSheetsData(spreadsheetId, csvLines, accessToken) {
26
+ try {
27
+ const client = getClient(accessToken);
28
+ const initResponse = await client.callDriveApi(
29
+ `https://www.googleapis.com/upload/drive/v3/files/${spreadsheetId}?uploadType=resumable`,
30
+ "PATCH",
31
+ {
32
+ mimeType: "application/vnd.google-apps.spreadsheet"
33
+ }
34
+ );
35
+ if (!initResponse.success) {
36
+ const errorText = initResponse.data;
37
+ throw new Error(`Failed to initiate upload: ${initResponse.status} - ${errorText}`);
38
+ }
39
+ const uploadUrl = initResponse.headers.get("Location");
40
+ if (!uploadUrl) {
41
+ throw new Error("No upload URL returned from Google Drive");
42
+ }
43
+ const uploadResponse = await fetch(uploadUrl, {
44
+ method: "PUT",
45
+ headers: {
46
+ "Content-Type": "text/csv"
47
+ },
48
+ body: csvLines.map((line) => line.replace("\r", "")).join("\n")
49
+ });
50
+ return uploadResponse.ok;
51
+ } catch (error) {
52
+ console.error("Error uploading Google Sheets data:", error);
53
+ throw error;
54
+ }
55
+ }
56
+ async function saveRecord({
57
+ formData,
58
+ options,
59
+ properties,
60
+ accessToken
61
+ }) {
62
+ try {
63
+ if (!accessToken) {
64
+ throw new Error("Access token is required");
65
+ }
66
+ if (!options.spreadsheetId) {
67
+ throw new Error("Spreadsheet ID is required");
68
+ }
69
+ const existingCsv = await downloadGoogleSheetsData(options.spreadsheetId, accessToken);
70
+ const csvLines = existingCsv.trim().split("\n");
71
+ const record = {};
72
+ for (const [key, value] of formData.entries()) {
73
+ record[key] = value;
74
+ }
75
+ const orderedHeaders = buildGoogleSheetHeaders(properties);
76
+ const newCsvRow = orderedHeaders.map((header) => {
77
+ const value = record[header]?.toString() || "";
78
+ if (value.includes(",") || value.includes('"') || value.includes("\n")) {
79
+ return `"${value.replace(/"/g, '""')}"`;
80
+ }
81
+ return value;
82
+ }).join(",");
83
+ csvLines.push(newCsvRow);
84
+ return uploadGoogleSheetsData(options.spreadsheetId, csvLines, accessToken);
85
+ } catch (error) {
86
+ console.error("Error pushing data to Google Sheets:", error);
87
+ return false;
88
+ }
89
+ }
90
+ async function createTable({
91
+ name,
92
+ schema,
93
+ accessToken
94
+ }) {
95
+ try {
96
+ const client = getClient(accessToken);
97
+ const createResponse = await client.callDriveApi(
98
+ "https://www.googleapis.com/drive/v3/files",
99
+ "POST",
100
+ {
101
+ name,
102
+ mimeType: "application/vnd.google-apps.spreadsheet"
103
+ }
104
+ );
105
+ if (!createResponse.success) {
106
+ throw new Error(`Failed to create spreadsheet: ${createResponse.status}`);
107
+ }
108
+ const spreadsheetId = createResponse.data.id;
109
+ const spreadsheetUrl = `https://docs.google.com/spreadsheets/d/${spreadsheetId}/edit`;
110
+ const headers = buildGoogleSheetHeaders(schema.properties);
111
+ const headerLine = headers.join(",");
112
+ await uploadGoogleSheetsData(spreadsheetId, [headerLine], accessToken);
113
+ return {
114
+ spreadsheetId,
115
+ spreadsheetUrl
116
+ };
117
+ } catch (error) {
118
+ console.error("Error creating Google Sheets spreadsheet:", error);
119
+ throw error;
120
+ }
121
+ }
122
+ function buildGoogleSheetHeaders(properties) {
123
+ const sortedEntries = Object.entries(properties).sort(([, fieldA], [, fieldB]) => {
124
+ const orderA = fieldA.metadata?.order;
125
+ const orderB = fieldB.metadata?.order;
126
+ if (orderA !== void 0 && orderB !== void 0) {
127
+ return orderA - orderB;
128
+ }
129
+ if (orderA !== void 0 && orderB === void 0) {
130
+ return -1;
131
+ }
132
+ if (orderA === void 0 && orderB !== void 0) {
133
+ return 1;
134
+ }
135
+ return 0;
136
+ });
137
+ const fields = sortedEntries.map(([fieldName, field]) => {
138
+ return fieldName;
139
+ });
140
+ return fields;
141
+ }
142
+ async function updateTable({
143
+ spreadsheetId,
144
+ newName,
145
+ newProperties,
146
+ accessToken
147
+ }) {
148
+ try {
149
+ if (newName) {
150
+ const client = getClient(accessToken);
151
+ await client.callDriveApi(
152
+ `https://www.googleapis.com/drive/v3/files/${spreadsheetId}`,
153
+ "PATCH",
154
+ {
155
+ name: newName
156
+ }
157
+ );
158
+ }
159
+ if (newProperties) {
160
+ const newHeaders = buildGoogleSheetHeaders(newProperties);
161
+ const existingData = await downloadGoogleSheetsData(spreadsheetId, accessToken);
162
+ const currentLines = existingData.split("\n");
163
+ const csvLines = currentLines.map((line, index) => {
164
+ if (index === 0) {
165
+ const currentHeaders = line.split(",");
166
+ const allHeaders = [...currentHeaders, ...newHeaders];
167
+ return allHeaders.join(",");
168
+ } else {
169
+ const currentValues = line.split(",");
170
+ const newValues = newHeaders.map(() => "");
171
+ const updatedValues = [...currentValues, ...newValues];
172
+ return updatedValues.join(",");
173
+ }
174
+ });
175
+ await uploadGoogleSheetsData(spreadsheetId, csvLines, accessToken);
176
+ }
177
+ } catch (error) {
178
+ console.error("Error updating Google Sheets spreadsheet:", error);
179
+ throw error;
180
+ }
181
+ }
182
+ export {
183
+ createTable,
184
+ saveRecord,
185
+ updateTable
186
+ };
8
187
  //# sourceMappingURL=handler.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/shared/datarecords/external/google/sheets/handler.ts"],"sourcesContent":["import type { TObject, TProperties } from \"@sinclair/typebox\";\nimport getClient from \"./client\";\nimport type { GoogleSheetsOptions } from \"./types\";\n\nasync function downloadGoogleSheetsData(spreadsheetId: string, accessToken: string): Promise<string> {\n try {\n const client = getClient(accessToken);\n const response = await client.callDriveApi<string>(\n `https://www.googleapis.com/drive/v3/files/${spreadsheetId}/export?mimeType=text/csv`,\n \"GET\",\n );\n\n if (!response.success) {\n throw new Error(`Failed to download spreadsheet: ${response.status}`);\n }\n\n return response.data;\n } catch (error) {\n console.error(\"Error downloading Google Sheets data:\", error);\n throw error;\n }\n}\n\nasync function uploadGoogleSheetsData(\n spreadsheetId: string,\n csvLines: string[],\n accessToken: string,\n): Promise<boolean> {\n try {\n const client = getClient(accessToken);\n // Use resumable upload to ensure the content is properly converted\n const initResponse = await client.callDriveApi<string>(\n `https://www.googleapis.com/upload/drive/v3/files/${spreadsheetId}?uploadType=resumable`,\n \"PATCH\",\n {\n mimeType: \"application/vnd.google-apps.spreadsheet\",\n },\n );\n\n if (!initResponse.success) {\n const errorText = initResponse.data;\n throw new Error(`Failed to initiate upload: ${initResponse.status} - ${errorText}`);\n }\n\n const uploadUrl = initResponse.headers.get(\"Location\");\n\n if (!uploadUrl) {\n throw new Error(\"No upload URL returned from Google Drive\");\n }\n\n // Upload the CSV content\n const uploadResponse = await fetch(uploadUrl, {\n method: \"PUT\",\n headers: {\n \"Content-Type\": \"text/csv\",\n },\n body: csvLines.map((line) => line.replace(\"\\r\", \"\")).join(\"\\n\"),\n });\n return uploadResponse.ok;\n } catch (error) {\n console.error(\"Error uploading Google Sheets data:\", error);\n throw error;\n }\n}\n\nexport async function saveRecord({\n formData,\n options,\n properties,\n accessToken,\n}: {\n formData: FormData;\n options: GoogleSheetsOptions;\n properties: TProperties;\n accessToken: string;\n}): Promise<boolean> {\n try {\n if (!accessToken) {\n throw new Error(\"Access token is required\");\n }\n\n if (!options.spreadsheetId) {\n throw new Error(\"Spreadsheet ID is required\");\n }\n\n // Download existing CSV data\n const existingCsv = await downloadGoogleSheetsData(options.spreadsheetId, accessToken);\n const csvLines = existingCsv.trim().split(\"\\n\");\n\n // Convert FormData to a record object\n const record: Record<string, unknown> = {};\n for (const [key, value] of formData.entries()) {\n record[key] = value;\n }\n\n // build new csv line using the metadata.order of properties\n const orderedHeaders = buildGoogleSheetHeaders(properties);\n const newCsvRow = orderedHeaders\n .map((header) => {\n const value = record[header]?.toString() || \"\";\n // Escape CSV values that contain commas, quotes, or newlines\n if (value.includes(\",\") || value.includes('\"') || value.includes(\"\\n\")) {\n return `\"${value.replace(/\"/g, '\"\"')}\"`;\n }\n return value;\n })\n .join(\",\");\n\n // Add new rows to CSV\n csvLines.push(newCsvRow);\n\n return uploadGoogleSheetsData(options.spreadsheetId, csvLines, accessToken);\n } catch (error) {\n console.error(\"Error pushing data to Google Sheets:\", error);\n return false;\n }\n}\n\n/**\n * Create a spreadsheet in Google Sheets\n * @param title\n * @param schema\n * @param accessToken\n * @returns\n */\nexport async function createTable({\n name,\n schema,\n accessToken,\n}: {\n name: string;\n schema: TObject;\n accessToken: string;\n}): Promise<{ spreadsheetId: string; spreadsheetUrl: string }> {\n try {\n const client = getClient(accessToken);\n\n // First create the file\n const createResponse = await client.callDriveApi<{ id: string }>(\n \"https://www.googleapis.com/drive/v3/files\",\n \"POST\",\n {\n name: name,\n mimeType: \"application/vnd.google-apps.spreadsheet\",\n },\n );\n\n if (!createResponse.success) {\n throw new Error(`Failed to create spreadsheet: ${createResponse.status}`);\n }\n\n const spreadsheetId = createResponse.data.id;\n\n const spreadsheetUrl = `https://docs.google.com/spreadsheets/d/${spreadsheetId}/edit`;\n\n const headers = buildGoogleSheetHeaders(schema.properties as TProperties);\n const headerLine = headers.join(\",\");\n\n await uploadGoogleSheetsData(spreadsheetId, [headerLine], accessToken);\n return {\n spreadsheetId,\n spreadsheetUrl,\n };\n } catch (error) {\n console.error(\"Error creating Google Sheets spreadsheet:\", error);\n throw error;\n }\n}\n\nfunction buildGoogleSheetHeaders(properties: TProperties) {\n // Sort fields by metadata.order (ascending), then fields without order\n const sortedEntries = Object.entries(properties).sort(([, fieldA], [, fieldB]) => {\n const orderA = fieldA.metadata?.order;\n const orderB = fieldB.metadata?.order;\n\n // If both have order, sort by order value\n if (orderA !== undefined && orderB !== undefined) {\n return orderA - orderB;\n }\n\n // Fields with order come first\n if (orderA !== undefined && orderB === undefined) {\n return -1;\n }\n\n if (orderA === undefined && orderB !== undefined) {\n return 1;\n }\n\n // Both without order, maintain original order\n return 0;\n });\n\n const fields = sortedEntries.map(([fieldName, field]) => {\n return fieldName;\n });\n return fields;\n}\n\nexport async function updateTable({\n spreadsheetId,\n newName,\n newProperties,\n accessToken,\n}: {\n spreadsheetId: string;\n newName?: string;\n newProperties?: TProperties;\n accessToken: string;\n}): Promise<void> {\n try {\n // rename spreadsheet\n if (newName) {\n const client = getClient(accessToken);\n await client.callDriveApi<string>(\n `https://www.googleapis.com/drive/v3/files/${spreadsheetId}`,\n \"PATCH\",\n {\n name: newName,\n },\n );\n }\n\n if (newProperties) {\n const newHeaders = buildGoogleSheetHeaders(newProperties);\n // const headerLine = newHeaders.join(\",\");\n\n // first, download the existing data\n const existingData = await downloadGoogleSheetsData(spreadsheetId, accessToken);\n\n // add new header for first line, and empty value for other\n const currentLines = existingData.split(\"\\n\");\n const csvLines = currentLines.map((line, index) => {\n if (index === 0) {\n const currentHeaders = line.split(\",\");\n const allHeaders = [...currentHeaders, ...newHeaders];\n return allHeaders.join(\",\");\n } else {\n const currentValues = line.split(\",\");\n const newValues = newHeaders.map(() => \"\");\n const updatedValues = [...currentValues, ...newValues];\n return updatedValues.join(\",\");\n }\n });\n\n // upload updated data\n await uploadGoogleSheetsData(spreadsheetId, csvLines, accessToken);\n }\n } catch (error) {\n console.error(\"Error updating Google Sheets spreadsheet:\", error);\n throw error;\n }\n}\n"],"mappings":"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","names":["downloadGoogleSheetsData","spreadsheetId","accessToken","response","getClient","error","uploadGoogleSheetsData","csvLines","initResponse","errorText","uploadUrl","line","saveRecord","formData","options","properties","record","key","value","newCsvRow","buildGoogleSheetHeaders","header","createTable","name","schema","createResponse","spreadsheetUrl","headerLine","fieldA","fieldB","orderA","orderB","fieldName","field","updateTable","newName","newProperties","newHeaders","index","currentValues","newValues"]}
1
+ {"version":3,"sources":["../../../../../../src/shared/datarecords/external/google/sheets/handler.ts"],"sourcesContent":["import type { TObject, TProperties } from \"@sinclair/typebox\";\nimport getClient from \"./client\";\nimport type { GoogleSheetsOptions } from \"./types\";\n\nasync function downloadGoogleSheetsData(spreadsheetId: string, accessToken: string): Promise<string> {\n try {\n const client = getClient(accessToken);\n const response = await client.callDriveApi<string>(\n `https://www.googleapis.com/drive/v3/files/${spreadsheetId}/export?mimeType=text/csv`,\n \"GET\",\n );\n\n if (!response.success) {\n throw new Error(`Failed to download spreadsheet: ${response.status}`);\n }\n\n return response.data;\n } catch (error) {\n console.error(\"Error downloading Google Sheets data:\", error);\n throw error;\n }\n}\n\nasync function uploadGoogleSheetsData(\n spreadsheetId: string,\n csvLines: string[],\n accessToken: string,\n): Promise<boolean> {\n try {\n const client = getClient(accessToken);\n // Use resumable upload to ensure the content is properly converted\n const initResponse = await client.callDriveApi<string>(\n `https://www.googleapis.com/upload/drive/v3/files/${spreadsheetId}?uploadType=resumable`,\n \"PATCH\",\n {\n mimeType: \"application/vnd.google-apps.spreadsheet\",\n },\n );\n\n if (!initResponse.success) {\n const errorText = initResponse.data;\n throw new Error(`Failed to initiate upload: ${initResponse.status} - ${errorText}`);\n }\n\n const uploadUrl = initResponse.headers.get(\"Location\");\n\n if (!uploadUrl) {\n throw new Error(\"No upload URL returned from Google Drive\");\n }\n\n // Upload the CSV content\n const uploadResponse = await fetch(uploadUrl, {\n method: \"PUT\",\n headers: {\n \"Content-Type\": \"text/csv\",\n },\n body: csvLines.map((line) => line.replace(\"\\r\", \"\")).join(\"\\n\"),\n });\n return uploadResponse.ok;\n } catch (error) {\n console.error(\"Error uploading Google Sheets data:\", error);\n throw error;\n }\n}\n\nexport async function saveRecord({\n formData,\n options,\n properties,\n accessToken,\n}: {\n formData: FormData;\n options: GoogleSheetsOptions;\n properties: TProperties;\n accessToken: string;\n}): Promise<boolean> {\n try {\n if (!accessToken) {\n throw new Error(\"Access token is required\");\n }\n\n if (!options.spreadsheetId) {\n throw new Error(\"Spreadsheet ID is required\");\n }\n\n // Download existing CSV data\n const existingCsv = await downloadGoogleSheetsData(options.spreadsheetId, accessToken);\n const csvLines = existingCsv.trim().split(\"\\n\");\n\n // Convert FormData to a record object\n const record: Record<string, unknown> = {};\n for (const [key, value] of formData.entries()) {\n record[key] = value;\n }\n\n // build new csv line using the metadata.order of properties\n const orderedHeaders = buildGoogleSheetHeaders(properties);\n const newCsvRow = orderedHeaders\n .map((header) => {\n const value = record[header]?.toString() || \"\";\n // Escape CSV values that contain commas, quotes, or newlines\n if (value.includes(\",\") || value.includes('\"') || value.includes(\"\\n\")) {\n return `\"${value.replace(/\"/g, '\"\"')}\"`;\n }\n return value;\n })\n .join(\",\");\n\n // Add new rows to CSV\n csvLines.push(newCsvRow);\n\n return uploadGoogleSheetsData(options.spreadsheetId, csvLines, accessToken);\n } catch (error) {\n console.error(\"Error pushing data to Google Sheets:\", error);\n return false;\n }\n}\n\n/**\n * Create a spreadsheet in Google Sheets\n * @param title\n * @param schema\n * @param accessToken\n * @returns\n */\nexport async function createTable({\n name,\n schema,\n accessToken,\n}: {\n name: string;\n schema: TObject;\n accessToken: string;\n}): Promise<{ spreadsheetId: string; spreadsheetUrl: string }> {\n try {\n const client = getClient(accessToken);\n\n // First create the file\n const createResponse = await client.callDriveApi<{ id: string }>(\n \"https://www.googleapis.com/drive/v3/files\",\n \"POST\",\n {\n name: name,\n mimeType: \"application/vnd.google-apps.spreadsheet\",\n },\n );\n\n if (!createResponse.success) {\n throw new Error(`Failed to create spreadsheet: ${createResponse.status}`);\n }\n\n const spreadsheetId = createResponse.data.id;\n\n const spreadsheetUrl = `https://docs.google.com/spreadsheets/d/${spreadsheetId}/edit`;\n\n const headers = buildGoogleSheetHeaders(schema.properties as TProperties);\n const headerLine = headers.join(\",\");\n\n await uploadGoogleSheetsData(spreadsheetId, [headerLine], accessToken);\n return {\n spreadsheetId,\n spreadsheetUrl,\n };\n } catch (error) {\n console.error(\"Error creating Google Sheets spreadsheet:\", error);\n throw error;\n }\n}\n\nfunction buildGoogleSheetHeaders(properties: TProperties) {\n // Sort fields by metadata.order (ascending), then fields without order\n const sortedEntries = Object.entries(properties).sort(([, fieldA], [, fieldB]) => {\n const orderA = fieldA.metadata?.order;\n const orderB = fieldB.metadata?.order;\n\n // If both have order, sort by order value\n if (orderA !== undefined && orderB !== undefined) {\n return orderA - orderB;\n }\n\n // Fields with order come first\n if (orderA !== undefined && orderB === undefined) {\n return -1;\n }\n\n if (orderA === undefined && orderB !== undefined) {\n return 1;\n }\n\n // Both without order, maintain original order\n return 0;\n });\n\n const fields = sortedEntries.map(([fieldName, field]) => {\n return fieldName;\n });\n return fields;\n}\n\nexport async function updateTable({\n spreadsheetId,\n newName,\n newProperties,\n accessToken,\n}: {\n spreadsheetId: string;\n newName?: string;\n newProperties?: TProperties;\n accessToken: string;\n}): Promise<void> {\n try {\n // rename spreadsheet\n if (newName) {\n const client = getClient(accessToken);\n await client.callDriveApi<string>(\n `https://www.googleapis.com/drive/v3/files/${spreadsheetId}`,\n \"PATCH\",\n {\n name: newName,\n },\n );\n }\n\n if (newProperties) {\n const newHeaders = buildGoogleSheetHeaders(newProperties);\n // const headerLine = newHeaders.join(\",\");\n\n // first, download the existing data\n const existingData = await downloadGoogleSheetsData(spreadsheetId, accessToken);\n\n // add new header for first line, and empty value for other\n const currentLines = existingData.split(\"\\n\");\n const csvLines = currentLines.map((line, index) => {\n if (index === 0) {\n const currentHeaders = line.split(\",\");\n const allHeaders = [...currentHeaders, ...newHeaders];\n return allHeaders.join(\",\");\n } else {\n const currentValues = line.split(\",\");\n const newValues = newHeaders.map(() => \"\");\n const updatedValues = [...currentValues, ...newValues];\n return updatedValues.join(\",\");\n }\n });\n\n // upload updated data\n await uploadGoogleSheetsData(spreadsheetId, csvLines, accessToken);\n }\n } catch (error) {\n console.error(\"Error updating Google Sheets spreadsheet:\", error);\n throw error;\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,4 +1,10 @@
1
1
  /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
2
 
3
- import{a}from"../../../../chunk-GPEMPZXK.js";export{a as googleSheetsOptions};
3
+ import {
4
+ googleSheetsOptions
5
+ } from "../../../../chunk-OSJ6KGPX.js";
6
+ import "../../../../chunk-ZGQ3AQBG.js";
7
+ export {
8
+ googleSheetsOptions
9
+ };
4
10
  //# sourceMappingURL=types.js.map
@@ -1,4 +1,400 @@
1
1
  /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
2
 
3
- import{Client as c}from"@notionhq/client";import{nanoid as d}from"nanoid";var g=10,b=1e3;async function h({formData:o,options:s,properties:r,accessToken:e}){let t=new c({auth:e}),p=f(o,s.properties);try{return t.pages.create({parent:{database_id:s.id},properties:{...p}})}catch{return}}async function l(o,s,r,e,t){let p=t?t+1:1;if(p>(r?.maxCalls??g))return{status:"max_call_reached",pages:s};try{let n=await o.search({filter:{property:"object",value:"page"},start_cursor:e,page_size:100});if(!n)return{status:"error",pages:s};for(let a in n.results){let i=n.results[a];if(i.parent.type!=="database_id"){let m={id:i.id,name:i.properties.title&&i.properties.title.type==="title"&&Array.isArray(i.properties.title.title)&&i.properties.title.title[0]?.plain_text?i.properties.title.title[0].plain_text:"No Title"};if(s.push(m),s.length>=(r?.maxResults??b))return{status:"max_pages_reached",pages:s}}}if(n.has_more&&n.next_cursor){let a=await l(o,s,r,n.next_cursor,p);return a.status!=="success"?{status:a.status,pages:s}:a}}catch(n){console.error("Error searching Notion pages:",n)}return{status:"success",pages:s}}async function _(o,s){try{let r=new c({auth:o});return await l(r,[],{...s})}catch(r){throw console.error("Error listing Notion databases:",r),r}}function u(o,s=[]){let r={};for(let[e,t]of Object.entries(o))t.type==="string"?e in(s??[])&&e==="id"?r[e]={title:{},name:e,type:"title"}:t.format==="email"?r[e]={type:"email",name:e,email:{}}:t.format==="uri"?r[e]={type:"url",name:e,url:{}}:t.format==="date"||t.format==="date-time"?r[e]={type:"date",name:e,date:{}}:t.enum&&Array.isArray(t.enum)&&t.enum.length>0?t.metadata?.["ui:widget"]==="checkbox"?r[e]={type:"multi_select",name:e,multi_select:{options:t.enum.map(p=>({name:p}))}}:r[e]={type:"select",name:e,select:{options:t.enum.map(p=>({name:p}))}}:r[e]={rich_text:{},name:e,type:"rich_text"}:t.type==="number"?r[e]={number:{}}:t.type==="boolean"&&(r[e]={checkbox:{}});return r.id||(r.id={title:{},name:"id",type:"title"}),r}async function P({id:o,newName:s,newProperties:r,accessToken:e}){let t=new c({auth:e}),p=r?u(r):{},n=await t.databases.update({database_id:o,...s?{title:[{type:"text",text:{content:s}}]}:{},...Object.keys(p).length>0?{properties:p}:{}});if(!n)throw new Error("Failed to update Notion database");return{id:n.id,name:n.title[0]?.plain_text,properties:n.properties,url:n.url}}async function R({name:o,schema:s,pageId:r,accessToken:e}){let t=u(s.properties,s.required),p={parent:{type:"page_id",page_id:r},title:[{type:"text",text:{content:o}}],properties:t},n=new c({auth:e}),a=await n.databases.create(p);if(!a)throw new Error("Failed to create Notion database");let i=await n.databases.retrieve({database_id:a.id});if(!i)throw new Error("Failed to retrieve Notion database after creation");return{id:i.id,name:i.title[0]?.plain_text,properties:i.properties,url:i.url}}async function k({pageId:o,accessToken:s}){let r=new c({auth:s});try{let e=await r.pages.retrieve({page_id:o});if(!e){console.log("Failed to retrieve Notion page");return}if(e){let t=e;return{id:t.id,name:t.properties.title&&t.properties.title.type==="title"&&Array.isArray(t.properties.title.title)&&t.properties.title.title[0]?.plain_text?t.properties.title.title[0].plain_text:"No Title"}}}catch(e){console.error("Error retrieving Notion page:",e)}}function f(o,s){let r={};for(let[e,t]of o.entries())if(!(t==null||t==="")&&e in s)switch(s[e].type){case"title":r[e]={title:[{text:{content:String(t)}}]};break;case"rich_text":r[e]={rich_text:[{text:{content:String(t)}}]};break;case"email":r[e]={email:String(t)};break;case"phone_number":r[e]={phone_number:String(t)};break;case"url":r[e]={url:String(t)};break;case"number":r[e]={number:Number(t)};break;case"checkbox":r[e]={checkbox:t==="true"||t==="1"};break;case"date":r[e]={date:t?{start:String(t)}:null};break;case"select":r[e]={select:{name:String(t)}};break;case"multi_select":{let n=(a=>{if(a.startsWith("[")&&a.endsWith("]"))try{return JSON.parse(a)}catch{return[a]}return a.includes(",")?a.split(",").map(i=>i.trim()).filter(i=>i.length>0):[a]})(String(t));r[e]={multi_select:n.map(a=>({name:a}))};break}default:console.warn(`Unsupported property type for key "${e}": ${s[e].type}`),r[e]={rich_text:[{text:{content:String(t)}}]}}return"id"in r||(r.id={title:[{text:{content:d(5)}}]}),r}export{k as checkPage,R as createTable,_ as listPages,h as saveRecord,P as updateTable};
3
+ import "../../../chunk-ZGQ3AQBG.js";
4
+
5
+ // src/shared/datarecords/external/notion/handler.ts
6
+ import {
7
+ Client
8
+ } from "@notionhq/client";
9
+ import { nanoid } from "nanoid";
10
+ var MAX_CALL = 10;
11
+ var MAX_PAGES = 1e3;
12
+ async function saveRecord({
13
+ formData,
14
+ options,
15
+ properties,
16
+ accessToken
17
+ }) {
18
+ const client = new Client({
19
+ auth: accessToken
20
+ });
21
+ const notionData = buildCreatePageParameters(formData, options.properties);
22
+ try {
23
+ return client.pages.create({
24
+ parent: { database_id: options.id },
25
+ properties: {
26
+ ...notionData
27
+ }
28
+ });
29
+ } catch (e) {
30
+ return;
31
+ }
32
+ }
33
+ async function searchPages(client, pages, parameters, offset, resultIndex) {
34
+ const nextIndex = resultIndex ? resultIndex + 1 : 1;
35
+ if (nextIndex > (parameters?.maxCalls ?? MAX_CALL)) {
36
+ return {
37
+ status: "max_call_reached",
38
+ pages
39
+ };
40
+ }
41
+ try {
42
+ const response = await client.search({
43
+ filter: {
44
+ property: "object",
45
+ value: "page"
46
+ },
47
+ start_cursor: offset,
48
+ page_size: 100
49
+ // default
50
+ });
51
+ if (!response) {
52
+ return {
53
+ status: "error",
54
+ pages
55
+ };
56
+ }
57
+ for (const d in response.results) {
58
+ const p = response.results[d];
59
+ if (p.parent.type !== "database_id") {
60
+ const page = {
61
+ id: p.id,
62
+ name: p.properties.title && p.properties.title.type === "title" && Array.isArray(p.properties.title.title) && p.properties.title.title[0]?.plain_text ? p.properties.title.title[0].plain_text : "No Title"
63
+ };
64
+ pages.push(page);
65
+ if (pages.length >= (parameters?.maxResults ?? MAX_PAGES)) {
66
+ return {
67
+ status: "max_pages_reached",
68
+ pages
69
+ };
70
+ }
71
+ }
72
+ }
73
+ if (response.has_more && response.next_cursor) {
74
+ const moreResults = await searchPages(client, pages, parameters, response.next_cursor, nextIndex);
75
+ if (moreResults.status !== "success") {
76
+ return {
77
+ status: moreResults.status,
78
+ pages
79
+ };
80
+ }
81
+ return moreResults;
82
+ }
83
+ } catch (error) {
84
+ console.error("Error searching Notion pages:", error);
85
+ }
86
+ return {
87
+ status: "success",
88
+ pages
89
+ };
90
+ }
91
+ async function listPages(accessToken, parameters) {
92
+ try {
93
+ const client = new Client({
94
+ auth: accessToken
95
+ });
96
+ const response = await searchPages(client, [], { ...parameters });
97
+ return response;
98
+ } catch (error) {
99
+ console.error("Error listing Notion databases:", error);
100
+ throw error;
101
+ }
102
+ }
103
+ function buildDatabaseProperties(schemaProperties, requiredFields = []) {
104
+ const properties = {};
105
+ for (const [fieldName, field] of Object.entries(schemaProperties)) {
106
+ if (field.type === "string") {
107
+ if (fieldName in (requiredFields ?? []) && fieldName === "id") {
108
+ properties[fieldName] = {
109
+ title: {},
110
+ name: fieldName,
111
+ type: "title"
112
+ };
113
+ } else {
114
+ if (field.format === "email") {
115
+ properties[fieldName] = {
116
+ type: "email",
117
+ name: fieldName,
118
+ email: {}
119
+ };
120
+ } else if (field.format === "uri") {
121
+ properties[fieldName] = {
122
+ type: "url",
123
+ name: fieldName,
124
+ url: {}
125
+ };
126
+ } else if (field.format === "date" || field.format === "date-time") {
127
+ properties[fieldName] = {
128
+ type: "date",
129
+ name: fieldName,
130
+ date: {}
131
+ };
132
+ } else {
133
+ if (field.enum && Array.isArray(field.enum) && field.enum.length > 0) {
134
+ if (field.metadata?.["ui:widget"] === "checkbox") {
135
+ properties[fieldName] = {
136
+ type: "multi_select",
137
+ name: fieldName,
138
+ multi_select: {
139
+ options: field.enum.map((option) => ({
140
+ name: option
141
+ }))
142
+ }
143
+ };
144
+ } else {
145
+ properties[fieldName] = {
146
+ type: "select",
147
+ name: fieldName,
148
+ select: {
149
+ options: field.enum.map((option) => ({
150
+ name: option
151
+ }))
152
+ }
153
+ };
154
+ }
155
+ } else {
156
+ properties[fieldName] = {
157
+ rich_text: {},
158
+ name: fieldName,
159
+ type: "rich_text"
160
+ };
161
+ }
162
+ }
163
+ }
164
+ } else if (field.type === "number") {
165
+ properties[fieldName] = {
166
+ number: {}
167
+ };
168
+ } else if (field.type === "boolean") {
169
+ properties[fieldName] = {
170
+ checkbox: {}
171
+ };
172
+ }
173
+ }
174
+ if (!properties.id) {
175
+ properties.id = {
176
+ title: {},
177
+ name: "id",
178
+ type: "title"
179
+ };
180
+ }
181
+ return properties;
182
+ }
183
+ async function updateTable({
184
+ id,
185
+ newName,
186
+ newProperties,
187
+ accessToken
188
+ }) {
189
+ const client = new Client({
190
+ auth: accessToken
191
+ });
192
+ const properties = newProperties ? buildDatabaseProperties(newProperties) : {};
193
+ const response = await client.databases.update({
194
+ database_id: id,
195
+ ...newName ? {
196
+ title: [
197
+ {
198
+ type: "text",
199
+ text: {
200
+ content: newName
201
+ }
202
+ }
203
+ ]
204
+ } : {},
205
+ ...Object.keys(properties).length > 0 ? { properties } : {}
206
+ });
207
+ if (!response) {
208
+ throw new Error("Failed to update Notion database");
209
+ }
210
+ return {
211
+ id: response.id,
212
+ name: response.title[0]?.plain_text,
213
+ properties: response.properties,
214
+ url: response.url
215
+ };
216
+ }
217
+ async function createTable({
218
+ name,
219
+ schema,
220
+ pageId,
221
+ accessToken
222
+ }) {
223
+ const properties = buildDatabaseProperties(schema.properties, schema.required);
224
+ const data = {
225
+ parent: { type: "page_id", page_id: pageId },
226
+ title: [
227
+ {
228
+ type: "text",
229
+ text: {
230
+ content: name
231
+ }
232
+ }
233
+ ],
234
+ properties
235
+ };
236
+ const client = new Client({
237
+ auth: accessToken
238
+ });
239
+ const response = await client.databases.create(data);
240
+ if (!response) {
241
+ throw new Error("Failed to create Notion database");
242
+ }
243
+ const table = await client.databases.retrieve({ database_id: response.id });
244
+ if (!table) {
245
+ throw new Error("Failed to retrieve Notion database after creation");
246
+ }
247
+ return {
248
+ id: table.id,
249
+ name: table.title[0]?.plain_text,
250
+ properties: table.properties,
251
+ url: table.url
252
+ };
253
+ }
254
+ async function checkPage({
255
+ pageId,
256
+ accessToken
257
+ }) {
258
+ const client = new Client({
259
+ auth: accessToken
260
+ });
261
+ try {
262
+ const response = await client.pages.retrieve({ page_id: pageId });
263
+ if (!response) {
264
+ console.log("Failed to retrieve Notion page");
265
+ return;
266
+ }
267
+ if (response) {
268
+ const page = response;
269
+ return {
270
+ id: page.id,
271
+ name: page.properties.title && page.properties.title.type === "title" && Array.isArray(page.properties.title.title) && page.properties.title.title[0]?.plain_text ? page.properties.title.title[0].plain_text : "No Title"
272
+ };
273
+ }
274
+ } catch (e) {
275
+ console.error("Error retrieving Notion page:", e);
276
+ }
277
+ return;
278
+ }
279
+ function buildCreatePageParameters(data, databaseProperties) {
280
+ const notionData = {};
281
+ for (const [key, value] of data.entries()) {
282
+ if (value === null || value === void 0 || value === "") continue;
283
+ if (key in databaseProperties) {
284
+ switch (databaseProperties[key].type) {
285
+ case "title":
286
+ notionData[key] = {
287
+ title: [
288
+ {
289
+ text: {
290
+ content: String(value)
291
+ }
292
+ }
293
+ ]
294
+ };
295
+ break;
296
+ case "rich_text":
297
+ notionData[key] = {
298
+ rich_text: [
299
+ {
300
+ text: {
301
+ content: String(value)
302
+ }
303
+ }
304
+ ]
305
+ };
306
+ break;
307
+ case "email":
308
+ notionData[key] = {
309
+ email: String(value)
310
+ };
311
+ break;
312
+ case "phone_number":
313
+ notionData[key] = {
314
+ phone_number: String(value)
315
+ };
316
+ break;
317
+ case "url":
318
+ notionData[key] = {
319
+ url: String(value)
320
+ };
321
+ break;
322
+ case "number":
323
+ notionData[key] = {
324
+ number: Number(value)
325
+ };
326
+ break;
327
+ case "checkbox":
328
+ notionData[key] = {
329
+ checkbox: value === "true" || value === "1"
330
+ };
331
+ break;
332
+ case "date":
333
+ notionData[key] = {
334
+ date: value ? { start: String(value) } : null
335
+ };
336
+ break;
337
+ case "select":
338
+ notionData[key] = {
339
+ select: {
340
+ name: String(value)
341
+ }
342
+ };
343
+ break;
344
+ case "multi_select": {
345
+ const getValues = (value2) => {
346
+ if (value2.startsWith("[") && value2.endsWith("]")) {
347
+ try {
348
+ return JSON.parse(value2);
349
+ } catch {
350
+ return [value2];
351
+ }
352
+ }
353
+ if (value2.includes(",")) {
354
+ return value2.split(",").map((v) => v.trim()).filter((v) => v.length > 0);
355
+ }
356
+ return [value2];
357
+ };
358
+ const values = getValues(String(value));
359
+ notionData[key] = {
360
+ multi_select: values.map((v) => ({
361
+ name: v
362
+ }))
363
+ };
364
+ break;
365
+ }
366
+ default:
367
+ console.warn(`Unsupported property type for key "${key}": ${databaseProperties[key].type}`);
368
+ notionData[key] = {
369
+ rich_text: [
370
+ {
371
+ text: {
372
+ content: String(value)
373
+ }
374
+ }
375
+ ]
376
+ };
377
+ }
378
+ }
379
+ }
380
+ if (!("id" in notionData)) {
381
+ notionData.id = {
382
+ title: [
383
+ {
384
+ text: {
385
+ content: nanoid(5)
386
+ }
387
+ }
388
+ ]
389
+ };
390
+ }
391
+ return notionData;
392
+ }
393
+ export {
394
+ checkPage,
395
+ createTable,
396
+ listPages,
397
+ saveRecord,
398
+ updateTable
399
+ };
4
400
  //# sourceMappingURL=handler.js.map