@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.
- package/dist/shared/ai/schemas.d.ts +1 -2
- package/dist/shared/ai/schemas.d.ts.map +1 -1
- package/dist/shared/ai/schemas.js +28 -1
- package/dist/shared/ai/schemas.js.map +1 -1
- package/dist/shared/ai/types.d.ts +15 -1
- package/dist/shared/ai/types.d.ts.map +1 -1
- package/dist/shared/ajv.js +6861 -1
- package/dist/shared/ajv.js.map +1 -1
- package/dist/shared/analytics/init.js +20 -1
- package/dist/shared/analytics/init.js.map +1 -1
- package/dist/shared/analytics/track.js +24 -1
- package/dist/shared/analytics/track.js.map +1 -1
- package/dist/shared/attributes.d.ts +97 -30
- package/dist/shared/attributes.d.ts.map +1 -1
- package/dist/shared/attributes.js +46 -1
- package/dist/shared/brick-manifest.d.ts +1 -1
- package/dist/shared/brick-manifest.js +26 -1
- package/dist/shared/bricks/manifests/accordion.manifest.d.ts +2 -2
- package/dist/shared/bricks/manifests/accordion.manifest.js +29 -1
- package/dist/shared/bricks/manifests/all-manifests.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/all-manifests.js +59 -1
- package/dist/shared/bricks/manifests/box.manifest.d.ts +2 -2
- package/dist/shared/bricks/manifests/box.manifest.js +28 -1
- package/dist/shared/bricks/manifests/button.manifest.d.ts +2 -2
- package/dist/shared/bricks/manifests/button.manifest.js +28 -1
- package/dist/shared/bricks/manifests/card.manifest.d.ts +3 -3
- package/dist/shared/bricks/manifests/card.manifest.js +28 -1
- package/dist/shared/bricks/manifests/carousel.manifest.d.ts +2 -2
- package/dist/shared/bricks/manifests/carousel.manifest.js +28 -1
- package/dist/shared/bricks/manifests/footer.manifest.d.ts +4 -4
- package/dist/shared/bricks/manifests/footer.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/footer.manifest.js +30 -1
- package/dist/shared/bricks/manifests/form.manifest.d.ts +3 -3
- package/dist/shared/bricks/manifests/form.manifest.js +29 -1
- package/dist/shared/bricks/manifests/hero.manifest.d.ts +2 -2
- package/dist/shared/bricks/manifests/hero.manifest.js +28 -1
- package/dist/shared/bricks/manifests/html.manifest.d.ts +2 -2
- package/dist/shared/bricks/manifests/html.manifest.js +28 -1
- package/dist/shared/bricks/manifests/icon.manifest.d.ts +2 -2
- package/dist/shared/bricks/manifests/icon.manifest.js +28 -1
- package/dist/shared/bricks/manifests/image.manifest.d.ts +2 -2
- package/dist/shared/bricks/manifests/image.manifest.js +28 -1
- package/dist/shared/bricks/manifests/images-gallery.manifest.d.ts +2 -2
- package/dist/shared/bricks/manifests/images-gallery.manifest.js +28 -1
- package/dist/shared/bricks/manifests/map.manifest.d.ts +2 -2
- package/dist/shared/bricks/manifests/map.manifest.js +31 -1
- package/dist/shared/bricks/manifests/navbar.manifest.d.ts +4 -4
- package/dist/shared/bricks/manifests/navbar.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/navbar.manifest.js +31 -1
- package/dist/shared/bricks/manifests/sidebar.manifest.d.ts +2 -2
- package/dist/shared/bricks/manifests/sidebar.manifest.js +29 -1
- package/dist/shared/bricks/manifests/social-links.manifest.d.ts +2 -2
- package/dist/shared/bricks/manifests/social-links.manifest.js +28 -1
- package/dist/shared/bricks/manifests/spacer.manifest.d.ts +2 -2
- package/dist/shared/bricks/manifests/spacer.manifest.js +28 -1
- package/dist/shared/bricks/manifests/table.manifest.d.ts +91 -0
- package/dist/shared/bricks/manifests/table.manifest.d.ts.map +1 -0
- package/dist/shared/bricks/manifests/table.manifest.js +31 -0
- package/dist/shared/bricks/manifests/tabs.manifest.d.ts +90 -0
- package/dist/shared/bricks/manifests/tabs.manifest.d.ts.map +1 -0
- package/dist/shared/bricks/manifests/tabs.manifest.js +31 -0
- package/dist/shared/bricks/manifests/tabs.manifest.js.map +1 -0
- package/dist/shared/bricks/manifests/testimonials.manifest.d.ts +2 -2
- package/dist/shared/bricks/manifests/testimonials.manifest.js +28 -1
- package/dist/shared/bricks/manifests/text.manifest.d.ts +2 -2
- package/dist/shared/bricks/manifests/text.manifest.js +28 -1
- package/dist/shared/bricks/manifests/timeline.manifest.d.ts +101 -0
- package/dist/shared/bricks/manifests/timeline.manifest.d.ts.map +1 -0
- package/dist/shared/bricks/manifests/timeline.manifest.js +31 -0
- package/dist/shared/bricks/manifests/timeline.manifest.js.map +1 -0
- package/dist/shared/bricks/manifests/video.manifest.d.ts +2 -2
- package/dist/shared/bricks/manifests/video.manifest.js +28 -1
- package/dist/shared/bricks/props/align.d.ts +2 -2
- package/dist/shared/bricks/props/align.js +19 -1
- package/dist/shared/bricks/props/background.d.ts +4 -4
- package/dist/shared/bricks/props/background.js +15 -1
- package/dist/shared/bricks/props/boolean.js +7 -1
- package/dist/shared/bricks/props/border.js +16 -1
- package/dist/shared/bricks/props/color-preset.d.ts.map +1 -1
- package/dist/shared/bricks/props/color-preset.js +13 -1
- package/dist/shared/bricks/props/color.js +14 -1
- package/dist/shared/bricks/props/common.d.ts +2 -2
- package/dist/shared/bricks/props/common.js +13 -1
- package/dist/shared/bricks/props/css-length.js +14 -1
- package/dist/shared/bricks/props/datarecord.js +7 -1
- package/dist/shared/bricks/props/datasource.d.ts +1 -1
- package/dist/shared/bricks/props/datasource.js +86 -1
- package/dist/shared/bricks/props/datasource.js.map +1 -1
- package/dist/shared/bricks/props/date.js +9 -1
- package/dist/shared/bricks/props/direction.js +11 -1
- package/dist/shared/bricks/props/dynamic.d.ts.map +1 -1
- package/dist/shared/bricks/props/dynamic.js +30 -1
- package/dist/shared/bricks/props/effects.js +17 -1
- package/dist/shared/bricks/props/file.js +15 -1
- package/dist/shared/bricks/props/file.js.map +1 -1
- package/dist/shared/bricks/props/geolocation.js +44 -1
- package/dist/shared/bricks/props/geolocation.js.map +1 -1
- package/dist/shared/bricks/props/helpers.d.ts +1 -1
- package/dist/shared/bricks/props/helpers.js +18 -1
- package/dist/shared/bricks/props/image.js +11 -1
- package/dist/shared/bricks/props/number.js +7 -1
- package/dist/shared/bricks/props/position.js +7 -1
- package/dist/shared/bricks/props/string.js +18 -1
- package/dist/shared/bricks/props/tags.js +10 -1
- package/dist/shared/bricks/props/text.js +19 -1
- package/dist/shared/bricks.d.ts +56 -44
- package/dist/shared/bricks.d.ts.map +1 -1
- package/dist/shared/bricks.js +79 -1
- package/dist/shared/chunk-2BPYOTKA.js +21 -0
- package/dist/shared/{chunk-WHTPGWUV.js.map → chunk-2BPYOTKA.js.map} +1 -1
- package/dist/shared/chunk-2HO4FHLM.js +456 -0
- package/dist/shared/{chunk-I3VL6SRH.js.map → chunk-2HO4FHLM.js.map} +1 -1
- package/dist/shared/chunk-2RK3CPYJ.js +74 -0
- package/dist/shared/{chunk-W33JMRRN.js.map → chunk-2RK3CPYJ.js.map} +1 -1
- package/dist/shared/chunk-3KLRW4I2.js +560 -0
- package/dist/shared/{chunk-B3EATRFX.js.map → chunk-3KLRW4I2.js.map} +1 -1
- package/dist/shared/chunk-3ZDN5BWN.js +18 -0
- package/dist/shared/{chunk-OIY3EPHO.js.map → chunk-3ZDN5BWN.js.map} +1 -1
- package/dist/shared/chunk-4WI23M7W.js +30 -0
- package/dist/shared/chunk-4WI23M7W.js.map +1 -0
- package/dist/shared/chunk-55C6MTX2.js +21 -0
- package/dist/shared/{chunk-KBHDY425.js.map → chunk-55C6MTX2.js.map} +1 -1
- package/dist/shared/chunk-6E42XWFH.js +103 -0
- package/dist/shared/{chunk-ZA3GAB4H.js.map → chunk-6E42XWFH.js.map} +1 -1
- package/dist/shared/chunk-6TVVKUWM.js +15 -0
- package/dist/shared/{chunk-4WDWJA3N.js.map → chunk-6TVVKUWM.js.map} +1 -1
- package/dist/shared/chunk-6WIMWLCJ.js +17 -0
- package/dist/shared/{chunk-KYY3PHP7.js.map → chunk-6WIMWLCJ.js.map} +1 -1
- package/dist/shared/chunk-7LAWWRU7.js +21 -0
- package/dist/shared/{chunk-IUXCWWGO.js.map → chunk-7LAWWRU7.js.map} +1 -1
- package/dist/shared/chunk-A2QPY54H.js +13 -0
- package/dist/shared/{chunk-KFM6KXSE.js.map → chunk-A2QPY54H.js.map} +1 -1
- package/dist/shared/chunk-BHC2A43S.js +67 -0
- package/dist/shared/{chunk-3YVJ2ELD.js.map → chunk-BHC2A43S.js.map} +1 -1
- package/dist/shared/chunk-BMWRR4DI.js +572 -0
- package/dist/shared/chunk-BMWRR4DI.js.map +1 -0
- package/dist/shared/chunk-BPBKHEQ5.js +39 -0
- package/dist/shared/{chunk-OHNYCXPX.js.map → chunk-BPBKHEQ5.js.map} +1 -1
- package/dist/shared/chunk-BW6EFRSF.js +794 -0
- package/dist/shared/chunk-BW6EFRSF.js.map +1 -0
- package/dist/shared/chunk-CKFRSHR2.js +105 -0
- package/dist/shared/{chunk-CFF6Q7O7.js.map → chunk-CKFRSHR2.js.map} +1 -1
- package/dist/shared/chunk-CSF2WQX2.js +60 -0
- package/dist/shared/{chunk-GLS7HPIZ.js.map → chunk-CSF2WQX2.js.map} +1 -1
- package/dist/shared/chunk-D4YQ6ABM.js +338 -0
- package/dist/shared/{chunk-PXI7AHWS.js.map → chunk-D4YQ6ABM.js.map} +1 -1
- package/dist/shared/chunk-DRTGM2UJ.js +129 -0
- package/dist/shared/{chunk-FLOMNC6J.js.map → chunk-DRTGM2UJ.js.map} +1 -1
- package/dist/shared/chunk-EQMU6NIU.js +1222 -0
- package/dist/shared/chunk-EQMU6NIU.js.map +1 -0
- package/dist/shared/chunk-EWSPTRDL.js +378 -0
- package/dist/shared/{chunk-QX6OGRRT.js.map → chunk-EWSPTRDL.js.map} +1 -1
- package/dist/shared/chunk-F22LDHEO.js +105 -0
- package/dist/shared/{chunk-5YRC3IT3.js.map → chunk-F22LDHEO.js.map} +1 -1
- package/dist/shared/chunk-FVU5PXRC.js +244 -0
- package/dist/shared/chunk-FVU5PXRC.js.map +1 -0
- package/dist/shared/chunk-GCQURRVB.js +837 -0
- package/dist/shared/{chunk-WYVJE6J5.js.map → chunk-GCQURRVB.js.map} +1 -1
- package/dist/shared/chunk-GPCI2N2A.js +395 -0
- package/dist/shared/{chunk-WBZW5LVH.js.map → chunk-GPCI2N2A.js.map} +1 -1
- package/dist/shared/chunk-GRMY35BU.js +722 -0
- package/dist/shared/{chunk-NJGXC7D6.js.map → chunk-GRMY35BU.js.map} +1 -1
- package/dist/shared/chunk-HPCCD6V5.js +17 -0
- package/dist/shared/{chunk-6I3ONVU6.js.map → chunk-HPCCD6V5.js.map} +1 -1
- package/dist/shared/chunk-JK2FWFJU.js +15 -0
- package/dist/shared/{chunk-JMN3HTZU.js.map → chunk-JK2FWFJU.js.map} +1 -1
- package/dist/shared/chunk-KNREHAPN.js +13 -0
- package/dist/shared/{chunk-KSEURRVZ.js.map → chunk-KNREHAPN.js.map} +1 -1
- package/dist/shared/chunk-KT7SSWMM.js +24 -0
- package/dist/shared/{chunk-KO5FPOWZ.js.map → chunk-KT7SSWMM.js.map} +1 -1
- package/dist/shared/chunk-LXAO3JA6.js +368 -0
- package/dist/shared/chunk-LXAO3JA6.js.map +1 -0
- package/dist/shared/chunk-MLZT7MRQ.js +538 -0
- package/dist/shared/chunk-MLZT7MRQ.js.map +1 -0
- package/dist/shared/chunk-NT3IW52F.js +260 -0
- package/dist/shared/chunk-NT3IW52F.js.map +1 -0
- package/dist/shared/chunk-NTLAKMMQ.js +94 -0
- package/dist/shared/{chunk-ZTZJHY4E.js.map → chunk-NTLAKMMQ.js.map} +1 -1
- package/dist/shared/chunk-O5PLB3YB.js +413 -0
- package/dist/shared/chunk-O5PLB3YB.js.map +1 -0
- package/dist/shared/chunk-O5PQISX4.js +51 -0
- package/dist/shared/{chunk-VEDQV5XO.js.map → chunk-O5PQISX4.js.map} +1 -1
- package/dist/shared/chunk-OJP4HMJT.js +22 -0
- package/dist/shared/{chunk-6HLU4UI2.js.map → chunk-OJP4HMJT.js.map} +1 -1
- package/dist/shared/chunk-OSJ6KGPX.js +16 -0
- package/dist/shared/{chunk-GPEMPZXK.js.map → chunk-OSJ6KGPX.js.map} +1 -1
- package/dist/shared/chunk-OXYXZHP2.js +48 -0
- package/dist/shared/{chunk-5O4Z3YQY.js.map → chunk-OXYXZHP2.js.map} +1 -1
- package/dist/shared/chunk-P3RH5URN.js +230 -0
- package/dist/shared/{chunk-R6ATC4TC.js.map → chunk-P3RH5URN.js.map} +1 -1
- package/dist/shared/chunk-Q4NPPLEU.js +34 -0
- package/dist/shared/{chunk-QWGUMKZC.js.map → chunk-Q4NPPLEU.js.map} +1 -1
- package/dist/shared/chunk-QL3T5HJQ.js +59 -0
- package/dist/shared/{chunk-E6XEI7IK.js.map → chunk-QL3T5HJQ.js.map} +1 -1
- package/dist/shared/chunk-QLQVDZIL.js +11 -0
- package/dist/shared/{chunk-KLD3P5XH.js.map → chunk-QLQVDZIL.js.map} +1 -1
- package/dist/shared/chunk-QQQ3FYPG.js +248 -0
- package/dist/shared/{chunk-SXHDQ64Z.js.map → chunk-QQQ3FYPG.js.map} +1 -1
- package/dist/shared/chunk-QSND5IWT.js +165 -0
- package/dist/shared/{chunk-ZQPXQCY2.js.map → chunk-QSND5IWT.js.map} +1 -1
- package/dist/shared/chunk-RV7AYVFV.js +75 -0
- package/dist/shared/{chunk-DHI3IBOD.js.map → chunk-RV7AYVFV.js.map} +1 -1
- package/dist/shared/chunk-SE6O65HC.js +44 -0
- package/dist/shared/{chunk-NM5MMPCF.js.map → chunk-SE6O65HC.js.map} +1 -1
- package/dist/shared/chunk-SHUGHJ7V.js +519 -0
- package/dist/shared/{chunk-IKC3FK7L.js.map → chunk-SHUGHJ7V.js.map} +1 -1
- package/dist/shared/chunk-TB3X4LRQ.js +56 -0
- package/dist/shared/{chunk-RJYZ5FAR.js.map → chunk-TB3X4LRQ.js.map} +1 -1
- package/dist/shared/chunk-TEO6TJOM.js +212 -0
- package/dist/shared/chunk-TEO6TJOM.js.map +1 -0
- package/dist/shared/chunk-TFGGYU6Y.js +394 -0
- package/dist/shared/{chunk-CZRCW5EN.js.map → chunk-TFGGYU6Y.js.map} +1 -1
- package/dist/shared/chunk-TKMWY2VN.js +18 -0
- package/dist/shared/{chunk-RDZK73KV.js.map → chunk-TKMWY2VN.js.map} +1 -1
- package/dist/shared/chunk-TNMNMYOB.js +69 -0
- package/dist/shared/{chunk-4BTB3MU2.js.map → chunk-TNMNMYOB.js.map} +1 -1
- package/dist/shared/chunk-U7TVEPKA.js +432 -0
- package/dist/shared/chunk-U7TVEPKA.js.map +1 -0
- package/dist/shared/chunk-UQF52PWK.js +70 -0
- package/dist/shared/{chunk-A3GF4PYW.js.map → chunk-UQF52PWK.js.map} +1 -1
- package/dist/shared/chunk-V3UA3LRK.js +253 -0
- package/dist/shared/{chunk-G5CJU6RD.js.map → chunk-V3UA3LRK.js.map} +1 -1
- package/dist/shared/chunk-W6MRYRGJ.js +100 -0
- package/dist/shared/{chunk-CCI4C3TM.js.map → chunk-W6MRYRGJ.js.map} +1 -1
- package/dist/shared/chunk-WGDUJSSS.js +462 -0
- package/dist/shared/chunk-WGDUJSSS.js.map +1 -0
- package/dist/shared/chunk-WKN566LN.js +29 -0
- package/dist/shared/{chunk-Q4H4QEMB.js.map → chunk-WKN566LN.js.map} +1 -1
- package/dist/shared/chunk-X6N463D4.js +222 -0
- package/dist/shared/{chunk-IKHZD2JH.js.map → chunk-X6N463D4.js.map} +1 -1
- package/dist/shared/chunk-X75YV73Q.js +178 -0
- package/dist/shared/{chunk-PLSV746R.js.map → chunk-X75YV73Q.js.map} +1 -1
- package/dist/shared/chunk-XCWMZVF5.js +89 -0
- package/dist/shared/{chunk-ZFCUSWMT.js.map → chunk-XCWMZVF5.js.map} +1 -1
- package/dist/shared/chunk-XCZVD5H6.js +13 -0
- package/dist/shared/{chunk-HAGKVQOW.js.map → chunk-XCZVD5H6.js.map} +1 -1
- package/dist/shared/chunk-XZ6WJZHN.js +10 -0
- package/dist/shared/{chunk-DCH4ZKWT.js.map → chunk-XZ6WJZHN.js.map} +1 -1
- package/dist/shared/chunk-Y74LZNND.js +30 -0
- package/dist/shared/{chunk-GACHLACT.js.map → chunk-Y74LZNND.js.map} +1 -1
- package/dist/shared/chunk-Z2NTDFB4.js +505 -0
- package/dist/shared/{chunk-SQ5T4AT5.js.map → chunk-Z2NTDFB4.js.map} +1 -1
- package/dist/shared/chunk-Z35I5JM5.js +131 -0
- package/dist/shared/{chunk-PSTFJ5IJ.js.map → chunk-Z35I5JM5.js.map} +1 -1
- package/dist/shared/chunk-ZEFOWKYP.js +44 -0
- package/dist/shared/{chunk-DQ7PRWTG.js.map → chunk-ZEFOWKYP.js.map} +1 -1
- package/dist/shared/chunk-ZGQ3AQBG.js +33 -0
- package/dist/shared/chunk-ZGQ3AQBG.js.map +1 -0
- package/dist/shared/chunk-ZLYIRH2B.js +68 -0
- package/dist/shared/{chunk-SWLUQVK7.js.map → chunk-ZLYIRH2B.js.map} +1 -1
- package/dist/shared/datarecords/external/airtable/handler.js +377 -1
- package/dist/shared/datarecords/external/airtable/handler.js.map +1 -1
- package/dist/shared/datarecords/external/airtable/oauth/config.js +15 -1
- package/dist/shared/datarecords/external/airtable/oauth/config.js.map +1 -1
- package/dist/shared/datarecords/external/airtable/types.js +11 -1
- package/dist/shared/datarecords/external/generic-webhook/handler.js +14 -1
- package/dist/shared/datarecords/external/generic-webhook/handler.js.map +1 -1
- package/dist/shared/datarecords/external/generic-webhook/options.js +16 -1
- package/dist/shared/datarecords/external/generic-webhook/options.js.map +1 -1
- package/dist/shared/datarecords/external/google/oauth/config.js +35 -1
- package/dist/shared/datarecords/external/google/oauth/config.js.map +1 -1
- package/dist/shared/datarecords/external/google/sheets/client.js +7 -1
- package/dist/shared/datarecords/external/google/sheets/handler.js +184 -5
- package/dist/shared/datarecords/external/google/sheets/handler.js.map +1 -1
- package/dist/shared/datarecords/external/google/sheets/types.js +7 -1
- package/dist/shared/datarecords/external/notion/handler.js +397 -1
- package/dist/shared/datarecords/external/notion/handler.js.map +1 -1
- package/dist/shared/datarecords/external/notion/oauth/config.js +11 -1
- package/dist/shared/datarecords/external/notion/oauth/config.js.map +1 -1
- package/dist/shared/datarecords/external/notion/types.js +7 -1
- package/dist/shared/datarecords/types.d.ts +3 -3
- package/dist/shared/datarecords/types.js +16 -1
- package/dist/shared/datarecords.js +9 -1
- package/dist/shared/datarecords.js.map +1 -1
- package/dist/shared/datasources/external/facebook/posts/fetcher.js +49 -1
- package/dist/shared/datasources/external/facebook/posts/fetcher.js.map +1 -1
- package/dist/shared/datasources/external/facebook/posts/schema.js +36 -1
- package/dist/shared/datasources/external/facebook/posts/schema.js.map +1 -1
- package/dist/shared/datasources/external/http-json/fetcher.js +29 -1
- package/dist/shared/datasources/external/http-json/fetcher.js.map +1 -1
- package/dist/shared/datasources/external/http-json/options.js +11 -1
- package/dist/shared/datasources/external/http-json/options.js.map +1 -1
- package/dist/shared/datasources/external/http-json/schema.js +10 -1
- package/dist/shared/datasources/external/http-json/schema.js.map +1 -1
- package/dist/shared/datasources/external/instagram/feed/fetcher.js +29 -1
- package/dist/shared/datasources/external/instagram/feed/fetcher.js.map +1 -1
- package/dist/shared/datasources/external/instagram/feed/schema.js +26 -1
- package/dist/shared/datasources/external/instagram/feed/schema.js.map +1 -1
- package/dist/shared/datasources/external/mastodon/account/fetcher.js +7 -1
- package/dist/shared/datasources/external/mastodon/account/schema.js +7 -1
- package/dist/shared/datasources/external/mastodon/options.js +10 -1
- package/dist/shared/datasources/external/mastodon/options.js.map +1 -1
- package/dist/shared/datasources/external/mastodon/status/fetcher.js +31 -1
- package/dist/shared/datasources/external/mastodon/status/fetcher.js.map +1 -1
- package/dist/shared/datasources/external/mastodon/status/sample.array.js +61 -1
- package/dist/shared/datasources/external/mastodon/status/sample.array.js.map +1 -1
- package/dist/shared/datasources/external/mastodon/status/sample.single.js +59 -1
- package/dist/shared/datasources/external/mastodon/status/sample.single.js.map +1 -1
- package/dist/shared/datasources/external/mastodon/status/schema.js +125 -1
- package/dist/shared/datasources/external/mastodon/status/schema.js.map +1 -1
- package/dist/shared/datasources/external/meta/oauth/config.js +17 -1
- package/dist/shared/datasources/external/meta/oauth/config.js.map +1 -1
- package/dist/shared/datasources/external/meta/options.js +10 -1
- package/dist/shared/datasources/external/meta/options.js.map +1 -1
- package/dist/shared/datasources/external/rss/fetcher.js +26 -1
- package/dist/shared/datasources/external/rss/fetcher.js.map +1 -1
- package/dist/shared/datasources/external/rss/options.js +10 -1
- package/dist/shared/datasources/external/rss/options.js.map +1 -1
- package/dist/shared/datasources/external/rss/schema.js +7 -1
- package/dist/shared/datasources/external/threads/media/fetcher.js +47 -1
- package/dist/shared/datasources/external/threads/media/fetcher.js.map +1 -1
- package/dist/shared/datasources/external/threads/media/schema.js +40 -1
- package/dist/shared/datasources/external/threads/media/schema.js.map +1 -1
- package/dist/shared/datasources/external/tiktok/oauth/config.js +18 -1
- package/dist/shared/datasources/external/tiktok/oauth/config.js.map +1 -1
- package/dist/shared/datasources/external/tiktok/video/fetcher.js +34 -1
- package/dist/shared/datasources/external/tiktok/video/fetcher.js.map +1 -1
- package/dist/shared/datasources/external/tiktok/video/options.js +11 -1
- package/dist/shared/datasources/external/tiktok/video/options.js.map +1 -1
- package/dist/shared/datasources/external/tiktok/video/schema.js +30 -1
- package/dist/shared/datasources/external/tiktok/video/schema.js.map +1 -1
- package/dist/shared/datasources/external/youtube/list/fetcher.js +32 -1
- package/dist/shared/datasources/external/youtube/list/fetcher.js.map +1 -1
- package/dist/shared/datasources/external/youtube/list/options.js +14 -1
- package/dist/shared/datasources/external/youtube/list/options.js.map +1 -1
- package/dist/shared/datasources/external/youtube/list/schema.js +7 -1
- package/dist/shared/datasources/external/youtube/oauth/config.js +18 -1
- package/dist/shared/datasources/external/youtube/oauth/config.js.map +1 -1
- package/dist/shared/datasources/internal/blog/schema.js +72 -1
- package/dist/shared/datasources/internal/blog/schema.js.map +1 -1
- package/dist/shared/datasources/internal/changelog/schema.js +51 -1
- package/dist/shared/datasources/internal/changelog/schema.js.map +1 -1
- package/dist/shared/datasources/internal/contact-info/schema.js +25 -1
- package/dist/shared/datasources/internal/contact-info/schema.js.map +1 -1
- package/dist/shared/datasources/internal/cv/schema.js +222 -1
- package/dist/shared/datasources/internal/cv/schema.js.map +1 -1
- package/dist/shared/datasources/internal/faq/schema.js +30 -1
- package/dist/shared/datasources/internal/faq/schema.js.map +1 -1
- package/dist/shared/datasources/internal/job-board/schema.js +224 -1
- package/dist/shared/datasources/internal/job-board/schema.js.map +1 -1
- package/dist/shared/datasources/internal/links/schema.js +7 -1
- package/dist/shared/datasources/internal/recipes/schema.js +45 -1
- package/dist/shared/datasources/internal/recipes/schema.js.map +1 -1
- package/dist/shared/datasources/internal/restaurant/schema.js +226 -1
- package/dist/shared/datasources/internal/restaurant/schema.js.map +1 -1
- package/dist/shared/datasources/samples.js +69 -1
- package/dist/shared/datasources/samples.js.map +1 -1
- package/dist/shared/datasources/schemas.js +34 -1
- package/dist/shared/datasources/schemas.js.map +1 -1
- package/dist/shared/datasources/types.d.ts +1 -1
- package/dist/shared/datasources/types.d.ts.map +1 -1
- package/dist/shared/datasources/types.js +32 -1
- package/dist/shared/datasources/utils.js +11 -1
- package/dist/shared/datasources.js +51 -1
- package/dist/shared/datasources.js.map +1 -1
- package/dist/shared/errors.js +7 -1
- package/dist/shared/images.d.ts +4 -4
- package/dist/shared/images.d.ts.map +1 -1
- package/dist/shared/images.js +44 -1
- package/dist/shared/images.js.map +1 -1
- package/dist/shared/index.js +9 -1
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/layout-constants.js +14 -1
- package/dist/shared/layout-constants.js.map +1 -1
- package/dist/shared/manifest.js +52 -1
- package/dist/shared/manifest.js.map +1 -1
- package/dist/shared/oauth.js +8 -1
- package/dist/shared/page.d.ts +12 -126
- package/dist/shared/page.d.ts.map +1 -1
- package/dist/shared/page.js +58 -1
- package/dist/shared/prompt.js +7 -1
- package/dist/shared/responsive.js +10 -1
- package/dist/shared/responsive.js.map +1 -1
- package/dist/shared/schema-registry.d.ts +5 -0
- package/dist/shared/schema-registry.d.ts.map +1 -0
- package/dist/shared/schema-registry.js +119 -0
- package/dist/shared/schema-registry.js.map +1 -0
- package/dist/shared/site.d.ts +36 -33
- package/dist/shared/site.d.ts.map +1 -1
- package/dist/shared/site.js +127 -1
- package/dist/shared/site.js.map +1 -1
- package/dist/shared/sitemap.d.ts +17 -17
- package/dist/shared/sitemap.d.ts.map +1 -1
- package/dist/shared/sitemap.js +69 -1
- package/dist/shared/social-icons.js +312 -1
- package/dist/shared/social-icons.js.map +1 -1
- package/dist/shared/tests/schema-registry.test.d.ts +2 -0
- package/dist/shared/tests/schema-registry.test.d.ts.map +1 -0
- package/dist/shared/theme.d.ts +1 -1
- package/dist/shared/theme.d.ts.map +1 -1
- package/dist/shared/theme.js +35 -1
- package/dist/shared/themes/color-system.d.ts +0 -1
- package/dist/shared/themes/color-system.d.ts.map +1 -1
- package/dist/shared/themes/color-system.js +103 -1
- package/dist/shared/themes/color-system.js.map +1 -1
- package/dist/shared/utils/canvas-data-uri.js +7 -1
- package/dist/shared/utils/canvas-data-uri.js.map +1 -1
- package/dist/shared/utils/invariant.js +7 -1
- package/dist/shared/utils/json-date.js +7 -1
- package/dist/shared/utils/llm.d.ts +2 -3
- package/dist/shared/utils/llm.d.ts.map +1 -1
- package/dist/shared/utils/llm.js +24 -1
- package/dist/shared/utils/merge.js +7 -1
- package/dist/shared/utils/object-hash.js +13 -1
- package/dist/shared/utils/object-hash.js.map +1 -1
- package/dist/shared/utils/schema-registry.d.ts +5 -0
- package/dist/shared/utils/schema-registry.d.ts.map +1 -0
- package/dist/shared/utils/schema-registry.js +29 -0
- package/dist/shared/utils/schema-registry.js.map +1 -0
- package/dist/shared/utils/schema.d.ts +2 -1
- package/dist/shared/utils/schema.d.ts.map +1 -1
- package/dist/shared/utils/schema.js +31 -1
- package/dist/shared/utils/string-enum.js +7 -1
- package/dist/shared/utils/tests/schema-registry.test.d.ts +2 -0
- package/dist/shared/utils/tests/schema-registry.test.d.ts.map +1 -0
- package/dist/shared/utils/try-catch.js +13 -1
- package/dist/shared/utils/try-catch.js.map +1 -1
- package/dist/shared/utils/typed-ref.js +7 -1
- package/package.json +12 -13
- package/src/shared/ai/schemas.ts +4 -8
- package/src/shared/ai/types.ts +9 -1
- package/src/shared/attributes.ts +27 -25
- package/src/shared/bricks/manifests/all-manifests.ts +15 -0
- package/src/shared/bricks/manifests/footer.manifest.ts +36 -27
- package/src/shared/bricks/manifests/navbar.manifest.ts +1 -3
- package/src/shared/bricks/manifests/table.manifest.ts +443 -0
- package/src/shared/bricks/manifests/tabs.manifest.ts +576 -0
- package/src/shared/bricks/manifests/timeline.manifest.ts +441 -0
- package/src/shared/bricks/props/color-preset.ts +3 -1
- package/src/shared/bricks/props/dynamic.ts +0 -1
- package/src/shared/bricks.ts +54 -45
- package/src/shared/datasources/types.ts +1 -5
- package/src/shared/images.ts +10 -8
- package/src/shared/page.ts +0 -4
- package/src/shared/schema-registry.ts +82 -0
- package/src/shared/sitemap.ts +12 -16
- package/src/shared/tests/schema-registry.test.ts +14 -0
- package/src/shared/theme.ts +1 -4
- package/src/shared/themes/color-system.ts +0 -1
- package/src/shared/utils/llm.ts +13 -12
- package/src/shared/utils/schema-registry.ts +82 -0
- package/src/shared/utils/schema.ts +18 -3
- package/src/shared/utils/tests/schema-registry.test.ts +13 -0
- package/src/shared/utils/tests/schema.test.ts +82 -55
- package/dist/shared/bricks/props/enum.d.ts +0 -13
- package/dist/shared/bricks/props/enum.d.ts.map +0 -1
- package/dist/shared/bricks/props/enum.js +0 -4
- package/dist/shared/chunk-3YVJ2ELD.js +0 -4
- package/dist/shared/chunk-4BTB3MU2.js +0 -4
- package/dist/shared/chunk-4WDWJA3N.js +0 -4
- package/dist/shared/chunk-5O4Z3YQY.js +0 -4
- package/dist/shared/chunk-5YRC3IT3.js +0 -4
- package/dist/shared/chunk-6HLU4UI2.js +0 -4
- package/dist/shared/chunk-6I3ONVU6.js +0 -4
- package/dist/shared/chunk-7A2JNQX3.js +0 -4
- package/dist/shared/chunk-7A2JNQX3.js.map +0 -1
- package/dist/shared/chunk-A3GF4PYW.js +0 -4
- package/dist/shared/chunk-A3K4NUVP.js +0 -4
- package/dist/shared/chunk-A3K4NUVP.js.map +0 -1
- package/dist/shared/chunk-AFVJZPLS.js +0 -4
- package/dist/shared/chunk-AFVJZPLS.js.map +0 -1
- package/dist/shared/chunk-AI4GHU7R.js +0 -4
- package/dist/shared/chunk-AI4GHU7R.js.map +0 -1
- package/dist/shared/chunk-B3EATRFX.js +0 -4
- package/dist/shared/chunk-CCI4C3TM.js +0 -4
- package/dist/shared/chunk-CFF6Q7O7.js +0 -7
- package/dist/shared/chunk-CZRCW5EN.js +0 -4
- package/dist/shared/chunk-DCH4ZKWT.js +0 -4
- package/dist/shared/chunk-DHI3IBOD.js +0 -4
- package/dist/shared/chunk-DQ7PRWTG.js +0 -4
- package/dist/shared/chunk-E6XEI7IK.js +0 -4
- package/dist/shared/chunk-FLOMNC6J.js +0 -4
- package/dist/shared/chunk-G5CJU6RD.js +0 -7
- package/dist/shared/chunk-GACHLACT.js +0 -4
- package/dist/shared/chunk-GLS7HPIZ.js +0 -4
- package/dist/shared/chunk-GOMXZC4B.js +0 -35
- package/dist/shared/chunk-GOMXZC4B.js.map +0 -1
- package/dist/shared/chunk-GPEMPZXK.js +0 -4
- package/dist/shared/chunk-HAGKVQOW.js +0 -4
- package/dist/shared/chunk-I3VL6SRH.js +0 -9
- package/dist/shared/chunk-IKC3FK7L.js +0 -4
- package/dist/shared/chunk-IKHZD2JH.js +0 -4
- package/dist/shared/chunk-IUXCWWGO.js +0 -4
- package/dist/shared/chunk-JMN3HTZU.js +0 -4
- package/dist/shared/chunk-KBHDY425.js +0 -4
- package/dist/shared/chunk-KFM6KXSE.js +0 -4
- package/dist/shared/chunk-KLD3P5XH.js +0 -4
- package/dist/shared/chunk-KO5FPOWZ.js +0 -4
- package/dist/shared/chunk-KSEURRVZ.js +0 -4
- package/dist/shared/chunk-KYY3PHP7.js +0 -4
- package/dist/shared/chunk-NJGXC7D6.js +0 -4
- package/dist/shared/chunk-NM5MMPCF.js +0 -4
- package/dist/shared/chunk-OGBMYMZD.js +0 -4
- package/dist/shared/chunk-OGBMYMZD.js.map +0 -1
- package/dist/shared/chunk-OHNYCXPX.js +0 -4
- package/dist/shared/chunk-OIY3EPHO.js +0 -4
- package/dist/shared/chunk-PIG623TZ.js +0 -4
- package/dist/shared/chunk-PIG623TZ.js.map +0 -1
- package/dist/shared/chunk-PLSV746R.js +0 -4
- package/dist/shared/chunk-PSCN3VVA.js +0 -4
- package/dist/shared/chunk-PSCN3VVA.js.map +0 -1
- package/dist/shared/chunk-PSTFJ5IJ.js +0 -4
- package/dist/shared/chunk-PXI7AHWS.js +0 -4
- package/dist/shared/chunk-Q4H4QEMB.js +0 -4
- package/dist/shared/chunk-QGYZ7CG5.js +0 -4
- package/dist/shared/chunk-QGYZ7CG5.js.map +0 -1
- package/dist/shared/chunk-QWGUMKZC.js +0 -4
- package/dist/shared/chunk-QX6OGRRT.js +0 -5
- package/dist/shared/chunk-R6ATC4TC.js +0 -4
- package/dist/shared/chunk-RDZK73KV.js +0 -4
- package/dist/shared/chunk-RJYZ5FAR.js +0 -4
- package/dist/shared/chunk-SQ5T4AT5.js +0 -6
- package/dist/shared/chunk-SWLUQVK7.js +0 -4
- package/dist/shared/chunk-SXHDQ64Z.js +0 -5
- package/dist/shared/chunk-SY6DZLTC.js +0 -4
- package/dist/shared/chunk-SY6DZLTC.js.map +0 -1
- package/dist/shared/chunk-VEDQV5XO.js +0 -4
- package/dist/shared/chunk-W33JMRRN.js +0 -4
- package/dist/shared/chunk-WBZW5LVH.js +0 -4
- package/dist/shared/chunk-WHTPGWUV.js +0 -4
- package/dist/shared/chunk-WYVJE6J5.js +0 -4
- package/dist/shared/chunk-ZA3GAB4H.js +0 -9
- package/dist/shared/chunk-ZFCUSWMT.js +0 -4
- package/dist/shared/chunk-ZQPXQCY2.js +0 -4
- package/dist/shared/chunk-ZTZJHY4E.js +0 -4
- package/src/shared/bricks/props/enum.ts +0 -38
- /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{
|
|
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
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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{
|
|
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
|
|
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
|