@upstart.gg/sdk 0.0.95 → 0.0.97
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/node/cli/api.js +2 -2
- package/dist/node/cli/api.js.map +1 -1
- package/dist/node/cli/commands/login/cmd-login.js +6 -6
- package/dist/node/cli/commands/login/cmd-login.js.map +1 -1
- package/dist/node/cli/commands/logout/cmd-logout.js +2 -2
- package/dist/node/cli/commands/publish/cmd-publish.d.ts.map +1 -1
- package/dist/node/cli/commands/publish/cmd-publish.js +18 -18
- package/dist/node/cli/commands/publish/cmd-publish.js.map +1 -1
- package/dist/node/cli/commands/publish/uploader.js +7 -7
- package/dist/node/cli/commands/publish/uploader.js.map +1 -1
- package/dist/node/cli/is-logged-in.js +2 -2
- package/dist/node/cli/is-logged-in.js.map +1 -1
- package/dist/node/cli/program.js +24 -24
- package/dist/node/cli/program.js.map +1 -1
- package/dist/node/shared/config.d.ts +4 -14
- package/dist/node/shared/config.d.ts.map +1 -1
- package/dist/node/shared/config.js +4 -4
- package/dist/node/shared/config.js.map +1 -1
- package/dist/node/shared/logger.d.ts.map +1 -1
- package/dist/node/shared/logger.js +2 -2
- package/dist/node/shared/logger.js.map +1 -1
- package/dist/shared/ajv.d.ts +2 -0
- package/dist/shared/ajv.d.ts.map +1 -1
- package/dist/shared/ajv.js +1 -1
- package/dist/shared/attributes.d.ts +45 -83
- package/dist/shared/attributes.d.ts.map +1 -1
- package/dist/shared/attributes.js +1 -1
- package/dist/shared/brick-manifest.d.ts +7 -17
- package/dist/shared/brick-manifest.d.ts.map +1 -1
- package/dist/shared/brick-manifest.js +1 -1
- package/dist/shared/bricks/manifests/accordion.manifest.d.ts +111 -0
- package/dist/shared/bricks/manifests/accordion.manifest.d.ts.map +1 -0
- package/dist/shared/bricks/manifests/accordion.manifest.js +3 -0
- package/dist/shared/bricks/manifests/all-manifests.d.ts +5 -0
- package/dist/shared/bricks/manifests/all-manifests.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/all-manifests.js +1 -1
- package/dist/shared/bricks/manifests/button.manifest.d.ts +22 -13
- package/dist/shared/bricks/manifests/button.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/button.manifest.js +1 -1
- package/dist/shared/bricks/manifests/card.manifest.d.ts +44 -54
- package/dist/shared/bricks/manifests/card.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/card.manifest.js +1 -1
- package/dist/shared/bricks/manifests/carousel.manifest.d.ts +39 -12
- package/dist/shared/bricks/manifests/carousel.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/carousel.manifest.js +1 -1
- package/dist/shared/bricks/manifests/container.manifest.d.ts +49 -172
- package/dist/shared/bricks/manifests/container.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/container.manifest.js +1 -1
- package/dist/shared/bricks/manifests/divider.manifest.d.ts +63 -0
- package/dist/shared/bricks/manifests/divider.manifest.d.ts.map +1 -0
- package/dist/shared/bricks/manifests/divider.manifest.js +3 -0
- package/dist/shared/bricks/manifests/footer.manifest.d.ts +30 -35
- package/dist/shared/bricks/manifests/footer.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/footer.manifest.js +1 -1
- package/dist/shared/bricks/manifests/form.manifest.d.ts +22 -12
- package/dist/shared/bricks/manifests/form.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/form.manifest.js +1 -1
- package/dist/shared/bricks/manifests/hero.manifest.d.ts +31 -71
- package/dist/shared/bricks/manifests/hero.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/hero.manifest.js +1 -1
- package/dist/shared/bricks/manifests/icon.manifest.d.ts +18 -12
- package/dist/shared/bricks/manifests/icon.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/icon.manifest.js +1 -1
- package/dist/shared/bricks/manifests/image.manifest.d.ts +36 -50
- package/dist/shared/bricks/manifests/image.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/image.manifest.js +1 -1
- package/dist/shared/bricks/manifests/images-gallery.manifest.d.ts +55 -115
- package/dist/shared/bricks/manifests/images-gallery.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/images-gallery.manifest.js +1 -1
- package/dist/shared/bricks/manifests/map.manifest.d.ts +36 -12
- package/dist/shared/bricks/manifests/map.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/map.manifest.js +1 -1
- package/dist/shared/bricks/manifests/navbar.manifest.d.ts +160 -0
- package/dist/shared/bricks/manifests/navbar.manifest.d.ts.map +1 -0
- package/dist/shared/bricks/manifests/navbar.manifest.js +3 -0
- package/dist/shared/bricks/manifests/sidebar.manifest.d.ts +83 -12
- package/dist/shared/bricks/manifests/sidebar.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/sidebar.manifest.js +1 -1
- package/dist/shared/bricks/manifests/social-links.manifest.d.ts +37 -12
- package/dist/shared/bricks/manifests/social-links.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/social-links.manifest.js +1 -1
- package/dist/shared/bricks/manifests/testimonials.manifest.d.ts +94 -0
- package/dist/shared/bricks/manifests/testimonials.manifest.d.ts.map +1 -0
- package/dist/shared/bricks/manifests/testimonials.manifest.js +3 -0
- package/dist/shared/bricks/manifests/text.manifest.d.ts +31 -63
- package/dist/shared/bricks/manifests/text.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/text.manifest.js +1 -1
- package/dist/shared/bricks/manifests/timeline.manifest.d.ts +122 -0
- package/dist/shared/bricks/manifests/timeline.manifest.d.ts.map +1 -0
- package/dist/shared/bricks/manifests/timeline.manifest.js +3 -0
- package/dist/shared/bricks/manifests/video.manifest.d.ts +38 -12
- package/dist/shared/bricks/manifests/video.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/video.manifest.js +1 -1
- package/dist/shared/bricks/props/_style-presets.d.ts +1 -1
- package/dist/shared/bricks/props/_style-presets.d.ts.map +1 -1
- package/dist/shared/bricks/props/_style-presets.js +1 -1
- package/dist/shared/bricks/props/align.d.ts +7 -3
- package/dist/shared/bricks/props/align.d.ts.map +1 -1
- package/dist/shared/bricks/props/align.js +1 -1
- package/dist/shared/bricks/props/background.d.ts +8 -1
- package/dist/shared/bricks/props/background.d.ts.map +1 -1
- package/dist/shared/bricks/props/background.js +1 -1
- package/dist/shared/bricks/props/boolean.js +1 -1
- package/dist/shared/bricks/props/border.d.ts +24 -22
- package/dist/shared/bricks/props/border.d.ts.map +1 -1
- package/dist/shared/bricks/props/border.js +1 -1
- package/dist/shared/bricks/props/color.d.ts +5 -0
- package/dist/shared/bricks/props/color.d.ts.map +1 -0
- package/dist/shared/bricks/props/color.js +3 -0
- package/dist/shared/bricks/props/common.d.ts +9 -1
- package/dist/shared/bricks/props/common.d.ts.map +1 -1
- package/dist/shared/bricks/props/common.js +1 -1
- package/dist/shared/bricks/props/container.d.ts +37 -45
- package/dist/shared/bricks/props/container.d.ts.map +1 -1
- package/dist/shared/bricks/props/container.js +1 -1
- package/dist/shared/bricks/props/css-length.d.ts +5 -0
- package/dist/shared/bricks/props/css-length.d.ts.map +1 -0
- package/dist/shared/bricks/props/css-length.js +3 -0
- package/dist/shared/bricks/props/datasource.d.ts +9 -13
- package/dist/shared/bricks/props/datasource.d.ts.map +1 -1
- package/dist/shared/bricks/props/datasource.js +1 -1
- package/dist/shared/bricks/props/date.d.ts +4 -0
- package/dist/shared/bricks/props/date.d.ts.map +1 -0
- package/dist/shared/bricks/props/date.js +3 -0
- package/dist/shared/bricks/props/effects.d.ts +4 -21
- package/dist/shared/bricks/props/effects.d.ts.map +1 -1
- package/dist/shared/bricks/props/effects.js +1 -1
- package/dist/shared/bricks/props/enum.d.ts +13 -0
- package/dist/shared/bricks/props/enum.d.ts.map +1 -0
- package/dist/shared/bricks/props/enum.js +3 -0
- package/dist/shared/bricks/props/file.d.ts +2 -0
- package/dist/shared/bricks/props/file.d.ts.map +1 -0
- package/dist/shared/bricks/props/file.js +3 -0
- package/dist/shared/bricks/props/geolocation.d.ts +16 -0
- package/dist/shared/bricks/props/geolocation.d.ts.map +1 -0
- package/dist/shared/bricks/props/geolocation.js +3 -0
- package/dist/shared/bricks/props/helpers.d.ts +8 -4
- package/dist/shared/bricks/props/helpers.d.ts.map +1 -1
- package/dist/shared/bricks/props/helpers.js +1 -1
- package/dist/shared/bricks/props/image.d.ts +7 -1
- package/dist/shared/bricks/props/image.d.ts.map +1 -1
- package/dist/shared/bricks/props/image.js +1 -1
- package/dist/shared/bricks/props/number.js +1 -1
- package/dist/shared/bricks/props/padding.d.ts +2 -1
- package/dist/shared/bricks/props/padding.d.ts.map +1 -1
- package/dist/shared/bricks/props/padding.js +1 -1
- package/dist/shared/bricks/props/position.d.ts.map +1 -1
- package/dist/shared/bricks/props/position.js +1 -1
- package/dist/shared/bricks/props/preset.d.ts +92 -0
- package/dist/shared/bricks/props/preset.d.ts.map +1 -0
- package/dist/shared/bricks/props/preset.js +3 -0
- package/dist/shared/bricks/props/string.d.ts +8 -3
- package/dist/shared/bricks/props/string.d.ts.map +1 -1
- package/dist/shared/bricks/props/string.js +1 -1
- package/dist/shared/bricks/props/text.d.ts +3 -4
- package/dist/shared/bricks/props/text.d.ts.map +1 -1
- package/dist/shared/bricks/props/text.js +1 -1
- package/dist/shared/bricks/props/types.d.ts +5 -2
- package/dist/shared/bricks/props/types.d.ts.map +1 -1
- package/dist/shared/bricks.d.ts +243 -134
- package/dist/shared/bricks.d.ts.map +1 -1
- package/dist/shared/bricks.js +1 -1
- package/dist/shared/chunk-2AJYHJFG.js +8 -0
- package/dist/shared/chunk-2FHWS73Y.js +6 -0
- package/dist/shared/chunk-3FJVF357.js +3 -0
- package/dist/shared/chunk-3RHYJ6E7.js +5 -0
- package/dist/shared/chunk-3VZACK2Y.js +3 -0
- package/dist/shared/chunk-3XCKZ4JQ.js +3 -0
- package/dist/shared/chunk-4MPRHJWO.js +3 -0
- package/dist/shared/chunk-5EOWW7BX.js +4 -0
- package/dist/shared/chunk-5HYPCOSS.js +3 -0
- package/dist/shared/chunk-5K5C6XFX.js +3 -0
- package/dist/shared/chunk-6QS5PKLA.js +3 -0
- package/dist/shared/chunk-74EL657O.js +3 -0
- package/dist/shared/chunk-AJDYOLKP.js +3 -0
- package/dist/shared/chunk-ALFOZHAH.js +3 -0
- package/dist/shared/{chunk-FGU4BGP4.js → chunk-ATDJCXC2.js} +1 -1
- package/dist/shared/chunk-BJSO43AS.js +3 -0
- package/dist/shared/chunk-BTKLQQZA.js +3 -0
- package/dist/shared/chunk-CAVNF3BU.js +3 -0
- package/dist/shared/chunk-CCNU3J56.js +3 -0
- package/dist/shared/chunk-CTRS76PX.js +3 -0
- package/dist/shared/chunk-DCH2FI6T.js +8 -0
- package/dist/shared/chunk-DFSQR6QC.js +3 -0
- package/dist/shared/chunk-ENU4SEHO.js +3 -0
- package/dist/shared/chunk-G7LX3UKQ.js +3 -0
- package/dist/shared/chunk-GGJBTPGW.js +3 -0
- package/dist/shared/chunk-H24R3IWA.js +3 -0
- package/dist/shared/chunk-HYVQXAK5.js +3 -0
- package/dist/shared/chunk-LKVQQQTI.js +3 -0
- package/dist/shared/chunk-MITJPRGD.js +6 -0
- package/dist/shared/chunk-NLZBY65T.js +3 -0
- package/dist/shared/chunk-OUI2VDNM.js +3 -0
- package/dist/shared/chunk-OYIL5SCU.js +3 -0
- package/dist/shared/chunk-P5DZK4TS.js +3 -0
- package/dist/shared/chunk-PK3R5VOF.js +3 -0
- package/dist/shared/chunk-QPATZM3I.js +3 -0
- package/dist/shared/chunk-RDBEWW4G.js +7 -0
- package/dist/shared/chunk-RPBQZW5I.js +3 -0
- package/dist/shared/chunk-SLSIAUYV.js +3 -0
- package/dist/shared/chunk-SUG225LF.js +3 -0
- package/dist/shared/chunk-U5XOIYSS.js +3 -0
- package/dist/shared/{chunk-HIZPJNEM.js → chunk-UL7L3HYV.js} +1 -1
- package/dist/shared/chunk-V6BCYHZH.js +3 -0
- package/dist/shared/chunk-VA5LFJVE.js +3 -0
- package/dist/shared/chunk-VAC73HJE.js +3 -0
- package/dist/shared/chunk-VBWC36L2.js +3 -0
- package/dist/shared/chunk-VLGLD6GR.js +3 -0
- package/dist/shared/chunk-VTFWVTPI.js +3 -0
- package/dist/shared/chunk-WAAKB6OB.js +3 -0
- package/dist/shared/chunk-Y36SM2AO.js +3 -0
- package/dist/shared/chunk-Y7CEEEVW.js +3 -0
- package/dist/shared/chunk-YZ5Y4WE6.js +3 -0
- package/dist/shared/chunk-Z7SYP6FG.js +3 -0
- package/dist/shared/chunk-ZJNA4QQC.js +3 -0
- package/dist/shared/chunk-ZMDHKAWL.js +3 -0
- package/dist/shared/context.d.ts +38 -0
- package/dist/shared/context.d.ts.map +1 -0
- package/dist/shared/{chunk-WJ5CDDXW.js → context.js} +0 -1
- package/dist/shared/datarecords/types.d.ts +40 -20
- package/dist/shared/datarecords/types.d.ts.map +1 -1
- package/dist/shared/datarecords/types.js +1 -1
- package/dist/shared/datasources/external/http-json/fetcher.d.ts.map +1 -0
- package/dist/shared/datasources/external/http-json/options.d.ts.map +1 -0
- package/dist/shared/datasources/external/{json → http-json}/schema.d.ts +0 -1
- package/dist/shared/datasources/external/http-json/schema.d.ts.map +1 -0
- package/dist/shared/datasources/external/http-json/tests/fetcher.test.d.ts.map +1 -0
- package/dist/shared/datasources/external/rss/fetcher.d.ts.map +1 -1
- package/dist/shared/datasources/external/rss/sample.d.ts.map +1 -1
- package/dist/shared/datasources/external/rss/schema.d.ts +7 -13
- package/dist/shared/datasources/external/rss/schema.d.ts.map +1 -1
- package/dist/shared/datasources/external/youtube/list/sample.d.ts +23 -32
- package/dist/shared/datasources/external/youtube/list/sample.d.ts.map +1 -1
- package/dist/shared/datasources/external/youtube/list/schema.d.ts +24 -33
- package/dist/shared/datasources/external/youtube/list/schema.d.ts.map +1 -1
- package/dist/shared/datasources/internal/blog/schema.d.ts.map +1 -1
- package/dist/shared/datasources/internal/changelog/schema.d.ts.map +1 -1
- package/dist/shared/datasources/internal/recipes/schema.d.ts.map +1 -1
- package/dist/shared/datasources/samples.d.ts +1 -1
- package/dist/shared/datasources/samples.d.ts.map +1 -1
- package/dist/shared/datasources/schemas.d.ts +33 -583
- package/dist/shared/datasources/schemas.d.ts.map +1 -1
- package/dist/shared/datasources/schemas.js +1 -1
- package/dist/shared/datasources/types.d.ts +75 -1314
- package/dist/shared/datasources/types.d.ts.map +1 -1
- package/dist/shared/datasources/types.js +1 -1
- package/dist/shared/datasources.d.ts +14 -0
- package/dist/shared/datasources.d.ts.map +1 -1
- package/dist/shared/datasources.js +1 -1
- package/dist/shared/images.d.ts +30 -0
- package/dist/shared/images.d.ts.map +1 -0
- package/dist/shared/images.js +3 -0
- package/dist/shared/layout-constants.js +1 -1
- package/dist/shared/page.d.ts +110 -2676
- package/dist/shared/page.d.ts.map +1 -1
- package/dist/shared/page.js +1 -1
- package/dist/shared/prompt.d.ts +4 -0
- package/dist/shared/prompt.d.ts.map +1 -0
- package/dist/shared/prompt.js +3 -0
- package/dist/shared/responsive.d.ts +3 -3
- package/dist/shared/responsive.d.ts.map +1 -1
- package/dist/shared/responsive.js +1 -1
- package/dist/shared/site.d.ts +545 -0
- package/dist/shared/site.d.ts.map +1 -0
- package/dist/shared/site.js +3 -0
- package/dist/shared/sitemap.d.ts +38 -0
- package/dist/shared/sitemap.d.ts.map +1 -0
- package/dist/shared/sitemap.js +3 -0
- package/dist/shared/theme.d.ts +41 -19
- package/dist/shared/theme.d.ts.map +1 -1
- package/dist/shared/theme.js +1 -1
- package/dist/shared/themes/color-system.d.ts +5 -309
- package/dist/shared/themes/color-system.d.ts.map +1 -1
- package/dist/shared/themes/color-system.js +1 -1
- package/dist/shared/utils/invariant.js +1 -1
- package/dist/shared/utils/schema.d.ts +10 -1
- package/dist/shared/utils/schema.d.ts.map +1 -1
- package/dist/shared/utils/schema.js +1 -1
- package/dist/shared/utils/typed-ref.d.ts +32 -0
- package/dist/shared/utils/typed-ref.d.ts.map +1 -0
- package/dist/shared/utils/typed-ref.js +3 -0
- package/package.json +12 -12
- package/src/node/cli/api.ts +101 -0
- package/src/node/cli/commands/cmd-build.ts +64 -0
- package/src/node/cli/commands/login/cmd-login.ts +111 -0
- package/src/node/cli/commands/logout/cmd-logout.ts +11 -0
- package/src/node/cli/commands/publish/cmd-publish.ts +135 -0
- package/src/node/cli/commands/publish/parse-gitignore.ts +278 -0
- package/src/node/cli/commands/publish/uploader.ts +333 -0
- package/src/node/cli/constants.ts +14 -0
- package/src/node/cli/is-logged-in.ts +28 -0
- package/src/node/cli/program.ts +77 -0
- package/src/node/cli/store.ts +64 -0
- package/src/node/cli/tests/api.test.ts +161 -0
- package/src/node/cli/types.ts +34 -0
- package/src/node/cli/utils.ts +20 -0
- package/src/node/shared/config.ts +69 -0
- package/src/node/shared/logger.ts +44 -0
- package/src/shared/ajv.ts +111 -0
- package/src/shared/analytics/init.ts +14 -0
- package/src/shared/analytics/track.ts +21 -0
- package/src/shared/analytics/types.ts +13 -0
- package/src/shared/attributes.ts +222 -0
- package/src/shared/brick-manifest.ts +110 -0
- package/src/shared/bricks/manifests/accordion.manifest.ts +179 -0
- package/src/shared/bricks/manifests/all-manifests.ts +92 -0
- package/src/shared/bricks/manifests/button.manifest.ts +145 -0
- package/src/shared/bricks/manifests/card.manifest.ts +269 -0
- package/src/shared/bricks/manifests/carousel.manifest.ts +106 -0
- package/src/shared/bricks/manifests/container.manifest.ts +357 -0
- package/src/shared/bricks/manifests/divider.manifest.ts +121 -0
- package/src/shared/bricks/manifests/footer.manifest.ts +487 -0
- package/src/shared/bricks/manifests/form.manifest.ts +112 -0
- package/src/shared/bricks/manifests/hero.manifest.ts +132 -0
- package/src/shared/bricks/manifests/icon.manifest.ts +130 -0
- package/src/shared/bricks/manifests/image.manifest.ts +203 -0
- package/src/shared/bricks/manifests/images-gallery.manifest.ts +227 -0
- package/src/shared/bricks/manifests/map.manifest.ts +75 -0
- package/src/shared/bricks/manifests/navbar.manifest.ts +344 -0
- package/src/shared/bricks/manifests/sidebar.manifest.ts +90 -0
- package/src/shared/bricks/manifests/social-links.manifest.ts +370 -0
- package/src/shared/bricks/manifests/testimonials.manifest.ts +397 -0
- package/src/shared/bricks/manifests/tests/header.manifest.test.ts +10 -0
- package/src/shared/bricks/manifests/text.manifest.ts +164 -0
- package/src/shared/bricks/manifests/timeline.manifest.ts +456 -0
- package/src/shared/bricks/manifests/video.manifest.ts +59 -0
- package/src/shared/bricks/props/_style-presets.ts +352 -0
- package/src/shared/bricks/props/align.ts +59 -0
- package/src/shared/bricks/props/background.ts +118 -0
- package/src/shared/bricks/props/boolean.ts +11 -0
- package/src/shared/bricks/props/border.ts +84 -0
- package/src/shared/bricks/props/color.ts +24 -0
- package/src/shared/bricks/props/common.ts +37 -0
- package/src/shared/bricks/props/container.ts +356 -0
- package/src/shared/bricks/props/css-length.ts +25 -0
- package/src/shared/bricks/props/datasource.ts +60 -0
- package/src/shared/bricks/props/date.ts +24 -0
- package/src/shared/bricks/props/effects.ts +123 -0
- package/src/shared/bricks/props/enum.ts +42 -0
- package/src/shared/bricks/props/file.ts +12 -0
- package/src/shared/bricks/props/geolocation.ts +30 -0
- package/src/shared/bricks/props/helpers.ts +101 -0
- package/src/shared/bricks/props/image.ts +90 -0
- package/src/shared/bricks/props/number.ts +16 -0
- package/src/shared/bricks/props/padding.ts +21 -0
- package/src/shared/bricks/props/position.ts +27 -0
- package/src/shared/bricks/props/preset.ts +136 -0
- package/src/shared/bricks/props/string.ts +60 -0
- package/src/shared/bricks/props/tests/align.test.ts +37 -0
- package/src/shared/bricks/props/tests/background.test.ts +102 -0
- package/src/shared/bricks/props/tests/border.test.ts +38 -0
- package/src/shared/bricks/props/tests/effects.test.ts +37 -0
- package/src/shared/bricks/props/tests/helpers.test.ts +133 -0
- package/src/shared/bricks/props/tests/image.test.ts +71 -0
- package/src/shared/bricks/props/tests/padding.ts +12 -0
- package/src/shared/bricks/props/tests/string.test.ts +79 -0
- package/src/shared/bricks/props/text.ts +66 -0
- package/src/shared/bricks/props/types.ts +57 -0
- package/src/shared/bricks.ts +232 -0
- package/src/shared/context.ts +39 -0
- package/src/shared/datarecords/external/airtable/handler.ts +21 -0
- package/src/shared/datarecords/external/airtable/options.ts +22 -0
- package/src/shared/datarecords/external/generic-webhook/handler.ts +10 -0
- package/src/shared/datarecords/external/generic-webhook/options.ts +13 -0
- package/src/shared/datarecords/external/google/oauth/config.ts +30 -0
- package/src/shared/datarecords/external/google/sheets/handler.ts +26 -0
- package/src/shared/datarecords/external/google/sheets/options.ts +9 -0
- package/src/shared/datarecords/types.ts +120 -0
- package/src/shared/datarecords.ts +5 -0
- package/src/shared/datasources/README.md +3 -0
- package/src/shared/datasources/external/facebook/posts/fetcher.ts +62 -0
- package/src/shared/datasources/external/facebook/posts/sample.ts +35 -0
- package/src/shared/datasources/external/facebook/posts/schema.ts +33 -0
- package/src/shared/datasources/external/facebook/posts/tests/fetcher.test.ts +91 -0
- package/src/shared/datasources/external/http-json/fetcher.ts +28 -0
- package/src/shared/datasources/external/http-json/options.ts +12 -0
- package/src/shared/datasources/external/http-json/schema.ts +6 -0
- package/src/shared/datasources/external/http-json/tests/fetcher.test.ts +70 -0
- package/src/shared/datasources/external/instagram/feed/fetcher.ts +43 -0
- package/src/shared/datasources/external/instagram/feed/sample.ts +22 -0
- package/src/shared/datasources/external/instagram/feed/schema.ts +23 -0
- package/src/shared/datasources/external/instagram/feed/tests/fetcher.test.ts +82 -0
- package/src/shared/datasources/external/mastodon/account/fetcher.ts +33 -0
- package/src/shared/datasources/external/mastodon/account/sample.ts +33 -0
- package/src/shared/datasources/external/mastodon/account/schema.ts +45 -0
- package/src/shared/datasources/external/mastodon/account/tests/fetcher.test.ts +65 -0
- package/src/shared/datasources/external/mastodon/options.ts +11 -0
- package/src/shared/datasources/external/mastodon/status/fetcher.ts +45 -0
- package/src/shared/datasources/external/mastodon/status/sample.array.ts +59 -0
- package/src/shared/datasources/external/mastodon/status/sample.single.ts +55 -0
- package/src/shared/datasources/external/mastodon/status/schema.ts +130 -0
- package/src/shared/datasources/external/mastodon/status/tests/fetcher.test.ts +74 -0
- package/src/shared/datasources/external/meta/oauth/config.ts +16 -0
- package/src/shared/datasources/external/meta/options.ts +11 -0
- package/src/shared/datasources/external/rss/fetcher.ts +30 -0
- package/src/shared/datasources/external/rss/options.ts +11 -0
- package/src/shared/datasources/external/rss/sample.ts +22 -0
- package/src/shared/datasources/external/rss/schema.ts +42 -0
- package/src/shared/datasources/external/threads/media/fetcher.ts +63 -0
- package/src/shared/datasources/external/threads/media/sample.ts +44 -0
- package/src/shared/datasources/external/threads/media/schema.ts +37 -0
- package/src/shared/datasources/external/tiktok/oauth/config.ts +17 -0
- package/src/shared/datasources/external/tiktok/video/fetcher.ts +49 -0
- package/src/shared/datasources/external/tiktok/video/options.ts +12 -0
- package/src/shared/datasources/external/tiktok/video/sample.ts +26 -0
- package/src/shared/datasources/external/tiktok/video/schema.ts +27 -0
- package/src/shared/datasources/external/youtube/list/fetcher.ts +46 -0
- package/src/shared/datasources/external/youtube/list/options.ts +15 -0
- package/src/shared/datasources/external/youtube/list/sample.ts +33 -0
- package/src/shared/datasources/external/youtube/list/schema.ts +38 -0
- package/src/shared/datasources/external/youtube/oauth/config.ts +15 -0
- package/src/shared/datasources/fetcher.ts +17 -0
- package/src/shared/datasources/internal/blog/schema.ts +69 -0
- package/src/shared/datasources/internal/changelog/schema.ts +48 -0
- package/src/shared/datasources/internal/contact-info/schema.ts +20 -0
- package/src/shared/datasources/internal/cv/schema.ts +217 -0
- package/src/shared/datasources/internal/faq/schema.ts +27 -0
- package/src/shared/datasources/internal/job-board/schema.ts +228 -0
- package/src/shared/datasources/internal/links/schema.ts +15 -0
- package/src/shared/datasources/internal/recipes/schema.ts +42 -0
- package/src/shared/datasources/internal/restaurant/schema.ts +225 -0
- package/src/shared/datasources/provider-options.ts +7 -0
- package/src/shared/datasources/samples.ts +26 -0
- package/src/shared/datasources/schemas.ts +45 -0
- package/src/shared/datasources/types.ts +276 -0
- package/src/shared/datasources/utils.ts +16 -0
- package/src/shared/datasources.ts +42 -0
- package/src/shared/env.ts +23 -0
- package/src/shared/errors.ts +1 -0
- package/src/shared/images.ts +44 -0
- package/src/shared/index.ts +3 -0
- package/src/shared/layout-constants.ts +25 -0
- package/src/shared/manifest.ts +50 -0
- package/src/shared/oauth.ts +16 -0
- package/src/shared/page.ts +61 -0
- package/src/shared/prompt.ts +9 -0
- package/src/shared/responsive.ts +5 -0
- package/src/shared/site.ts +97 -0
- package/src/shared/sitemap.ts +66 -0
- package/src/shared/social-icons.ts +307 -0
- package/src/shared/tests/attributes.test.ts +37 -0
- package/src/shared/theme.ts +245 -0
- package/src/shared/themes/README.md +34 -0
- package/src/shared/themes/color-system.ts +127 -0
- package/src/shared/utils/canvas-data-uri.ts +2 -0
- package/src/shared/utils/invariant.ts +25 -0
- package/src/shared/utils/json-date.ts +8 -0
- package/src/shared/utils/merge.ts +12 -0
- package/src/shared/utils/object-hash.ts +7 -0
- package/src/shared/utils/schema.ts +30 -0
- package/src/shared/utils/try-catch.ts +12 -0
- package/src/shared/utils/typed-ref.ts +41 -0
- package/dist/shared/bricks/manifests/countdown.manifest.d.ts +0 -57
- package/dist/shared/bricks/manifests/countdown.manifest.d.ts.map +0 -1
- package/dist/shared/bricks/manifests/countdown.manifest.js +0 -3
- package/dist/shared/bricks/manifests/generic-component.manifest.d.ts +0 -62
- package/dist/shared/bricks/manifests/generic-component.manifest.d.ts.map +0 -1
- package/dist/shared/bricks/manifests/generic-component.manifest.js +0 -3
- package/dist/shared/bricks/manifests/header.manifest.d.ts +0 -275
- package/dist/shared/bricks/manifests/header.manifest.d.ts.map +0 -1
- package/dist/shared/bricks/manifests/header.manifest.js +0 -3
- package/dist/shared/bricks/props/_docs-common-styles.d.ts +0 -59
- package/dist/shared/bricks/props/_docs-common-styles.d.ts.map +0 -1
- package/dist/shared/bricks/props/_docs-common-styles.js +0 -3
- package/dist/shared/bricks/props/tests/container.test.d.ts +0 -2
- package/dist/shared/bricks/props/tests/container.test.d.ts.map +0 -1
- package/dist/shared/chunk-2ZPY4LCA.js +0 -3
- package/dist/shared/chunk-3CY6AZG7.js +0 -3
- package/dist/shared/chunk-4FLI7C3B.js +0 -3
- package/dist/shared/chunk-64II435T.js +0 -3
- package/dist/shared/chunk-6LDLGZUM.js +0 -3
- package/dist/shared/chunk-6MEWEGNA.js +0 -3
- package/dist/shared/chunk-AZ63RF3K.js +0 -3
- package/dist/shared/chunk-BK6LBWDI.js +0 -3
- package/dist/shared/chunk-BMDB2V7J.js +0 -3
- package/dist/shared/chunk-BXEKJXEP.js +0 -3
- package/dist/shared/chunk-DAPQ4JPP.js +0 -3
- package/dist/shared/chunk-ERSFH7XA.js +0 -3
- package/dist/shared/chunk-F2ZVIFHO.js +0 -3
- package/dist/shared/chunk-H6L4KRCJ.js +0 -3
- package/dist/shared/chunk-IKAMZM4I.js +0 -3
- package/dist/shared/chunk-IWSVY2VC.js +0 -3
- package/dist/shared/chunk-JVDUEZYO.js +0 -3
- package/dist/shared/chunk-KB4HY432.js +0 -3
- package/dist/shared/chunk-LDOM2LJF.js +0 -3
- package/dist/shared/chunk-P5FVZ5PL.js +0 -3
- package/dist/shared/chunk-PD7P5KSV.js +0 -3
- package/dist/shared/chunk-PJ6HA55L.js +0 -3
- package/dist/shared/chunk-PSSJMWGU.js +0 -3
- package/dist/shared/chunk-Q4MXTCE4.js +0 -8
- package/dist/shared/chunk-QCQH5WLN.js +0 -3
- package/dist/shared/chunk-RBYYMUOZ.js +0 -3
- package/dist/shared/chunk-RHRJYPU3.js +0 -3
- package/dist/shared/chunk-S64XUCWM.js +0 -3
- package/dist/shared/chunk-SO5M7CYA.js +0 -3
- package/dist/shared/chunk-SQVL4WSX.js +0 -3
- package/dist/shared/chunk-SWGSHUTE.js +0 -3
- package/dist/shared/chunk-U44NTSIO.js +0 -3
- package/dist/shared/chunk-U4R5EGBK.js +0 -3
- package/dist/shared/chunk-U5WW6K7W.js +0 -3
- package/dist/shared/chunk-V2NS45PF.js +0 -3
- package/dist/shared/chunk-WOEBR25A.js +0 -3
- package/dist/shared/chunk-WPTVLIYS.js +0 -3
- package/dist/shared/chunk-WXKRIUTA.js +0 -3
- package/dist/shared/chunk-XBX6II3M.js +0 -3
- package/dist/shared/chunk-XGCBIXOO.js +0 -3
- package/dist/shared/chunk-YY6DANZF.js +0 -3
- package/dist/shared/chunk-ZWQHIQEQ.js +0 -3
- package/dist/shared/datasources/external/json/fetcher.d.ts.map +0 -1
- package/dist/shared/datasources/external/json/options.d.ts.map +0 -1
- package/dist/shared/datasources/external/json/schema.d.ts.map +0 -1
- package/dist/shared/datasources/external/json/tests/fetcher.test.d.ts.map +0 -1
- package/dist/shared/datasources/external/rss/tests/fetcher.test.d.ts +0 -2
- package/dist/shared/datasources/external/rss/tests/fetcher.test.d.ts.map +0 -1
- package/dist/shared/template.d.ts +0 -898
- package/dist/shared/template.d.ts.map +0 -1
- package/dist/shared/template.js +0 -3
- package/dist/shared/tests/page.test.d.ts +0 -2
- package/dist/shared/tests/page.test.d.ts.map +0 -1
- package/dist/shared/tests/test-config.d.ts +0 -3
- package/dist/shared/tests/test-config.d.ts.map +0 -1
- package/dist/shared/themes/all-themes.d.ts +0 -3
- package/dist/shared/themes/all-themes.d.ts.map +0 -1
- package/dist/shared/themes/all-themes.js +0 -3
- /package/dist/shared/datasources/external/{json → http-json}/fetcher.d.ts +0 -0
- /package/dist/shared/datasources/external/{json → http-json}/options.d.ts +0 -0
- /package/dist/shared/datasources/external/{json → http-json}/tests/fetcher.test.d.ts +0 -0
package/dist/node/cli/api.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
|
|
2
2
|
|
|
3
|
-
import{createLogger as
|
|
4
|
-
`)),{...
|
|
3
|
+
import{createLogger as _}from"vite";import a from"chalk";var d=.1;function T(e,r,s=!1){let o=_(e==="debug"?"info":e,{prefix:"[upstart]",allowClearScreen:r});return s&&o.info(a.hex("#7270c6").bold(`\u{1F680} Upstart v${d}
|
|
4
|
+
`)),{...o,success:(t,n)=>o.info(a.green(t),n),error:(t,n)=>o.error(a.red(t),n),warn:(t,n)=>o.warn(a.yellow(t),n),warnOnce:(t,n)=>o.warnOnce(a.yellow(t),n),debug:(t,n)=>{e==="debug"&&o.info(a.gray(t),n)}}}var c=T();var m="upstart-cli";var U=process.env.PUBLIC_UPSTART_OAUTH_CLIENT_ID??"50000000-0000-0000-0000-000000000001",u=process.env.PUBLIC_UPSTART_API_BASE_URL??"https://api.upstart.gg",A=process.env.PUBLIC_UPSTART_EDITOR_BASE_URL??"https://upstart.gg";import l from"conf";import p from"node:path";import E from"node:crypto";import i from"node:fs";import{fileURLToPath as L}from"node:url";import F from"chalk";var R=L(new URL(".",import.meta.url)),S=P(),g=new l({projectName:m,encryptionKey:S,clearInvalidConfig:!0});function O(){let e=R;for(;e!==p.parse(e).root;){let r=p.join(e,"node_modules");if(i.existsSync(r))return r;e=p.dirname(e)}return null}function P(){let e=O();if(!e)throw new Error("Could not find nearest node_modules directory.");let r=p.join(e,".enpage-tmp");i.existsSync(r)||i.mkdirSync(r,{recursive:!0,mode:448});let s=p.join(r,".enpage-key");if(!i.existsSync(s)){let t=E.randomBytes(32).toString("hex");return i.writeFileSync(s,t,{mode:384}),t}return i.readFileSync(s,"utf8")}async function V(e,r,s={}){g.get("access_token")&&(s.Authorization=`Bearer ${g.get("access_token")}`);let o=await fetch(f(e),{method:"POST",headers:{"Content-Type":r instanceof URLSearchParams?"application/x-www-form-urlencoded":"application/json",...s},body:r instanceof URLSearchParams?r:JSON.stringify(r)}).catch(t=>{c.error(`Fatal Error requesting API: ${t.message} (${t.cause.code})`),c.error("Please check your internet connection and try again, or retry later."),process.exit(1)});return y(o)}async function q(e,r={}){g.get("access_token")&&(r.Authorization=`Bearer ${g.get("access_token")}`);let s=await fetch(f(e),{headers:r,method:"GET"}).catch(o=>{c.error(`Fatal Error requesting API: ${o.message} (${o.cause.code})`),c.error("Please check your internet connection and try again, or retry later."),process.exit(1)});return y(s)}function f(e){let r=new URL(u.endsWith("/")?u:`${u}/`);return new URL(e,r)}async function y(e){let r=e.headers.get("content-type")?.startsWith("application/json")?await e.json():await e.text();return e.ok?{isSuccess:!0,isError:!1,status:e.status,statusText:e.statusText,data:r}:{isSuccess:!1,isError:!0,status:e.status,statusText:e.statusText,data:r}}export{q as get,V as post};
|
|
5
5
|
//# sourceMappingURL=api.js.map
|
package/dist/node/cli/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/node/shared/logger.ts","../../../package.json","../../../src/node/cli/constants.ts","../../../src/node/cli/store.ts","../../../src/node/cli/api.ts"],"sourcesContent":["import {\n createLogger as createLoggerBase,\n type LogLevel,\n type LogOptions,\n type Logger as BaseLogger,\n} from \"vite\";\nimport { version } from \"../../../package.json\";\nimport chalk from \"chalk\";\n\ntype UpstartLoggerLevel = LogLevel | \"debug\";\n\nexport function createLogger(level?: UpstartLoggerLevel, allowClearScreen?: boolean, showVersion = false) {\n // vite logger does not support \"debug\" level\n const logger = createLoggerBase(level === \"debug\" ? \"info\" : level, {\n prefix: \"[upstart]\",\n allowClearScreen,\n });\n\n if (showVersion) {\n logger.info(chalk.hex(\"#7270c6\").bold(`🚀 Upstart v${version}\\n`));\n }\n\n return {\n ...logger,\n success: (message: string, options?: LogOptions) => logger.info(chalk.green(message), options),\n error: (message: string, options?: LogOptions) => logger.error(chalk.red(message), options),\n warn: (message: string, options?: LogOptions) => logger.warn(chalk.yellow(message), options),\n warnOnce: (message: string, options?: LogOptions) => logger.warnOnce(chalk.yellow(message), options),\n debug: (message: string, options?: LogOptions) => {\n if (level === \"debug\") {\n logger.info(chalk.gray(message), options);\n }\n },\n };\n}\n\nexport const logger = createLogger();\n\nexport type Logger = BaseLogger & {\n success: (message: string, options?: LogOptions) => void;\n debug: (message: string, options?: LogOptions) => void;\n};\n","{\n \"name\": \"@upstart.gg/sdk\",\n \"version\": \"0.0.95\",\n \"type\": \"module\",\n \"files\": [\n \"dist\",\n \"env.d.ts\"\n ],\n \"sideEffects\": false,\n \"exports\": {\n \".\": {\n \"import\": \"./dist/shared/index.js\",\n \"types\": \"./dist/shared/index.d.ts\"\n },\n \"./shared/*\": {\n \"types\": \"./dist/shared/*.d.ts\",\n \"import\": \"./dist/shared/*.js\"\n },\n \"./builder/*\": {\n \"import\": \"./dist/node/builder/*.js\"\n },\n \"./cli/*\": {\n \"import\": \"./dist/node/cli/*.js\"\n },\n \"./env.d.ts\": {\n \"types\": \"./env.d.ts\",\n \"require\": \"./env.d.ts\",\n \"import\": \"./env.d.ts\"\n },\n \"./*\": {\n \"types\": \"./dist/shared/*.d.ts\",\n \"import\": \"./dist/shared/*.js\"\n }\n },\n \"dependencies\": {\n \"@date-fns/utc\": \"1.2.0\",\n \"@headlessui/react\": \"2.2.1\",\n \"@inquirer/prompts\": \"5.3.8\",\n \"@radix-ui/react-context-menu\": \"2.2.2\",\n \"@radix-ui/react-toggle-group\": \"1.1.0\",\n \"@radix-ui/themes\": \"3.1.4\",\n \"@sinclair/typebox\": \"0.33.7\",\n \"@upstart.gg/style-system\": \"workspace:*\",\n \"ajv\": \"8.17.1\",\n \"ajv-formats\": \"3.0.1\",\n \"chalk\": \"5.3.0\",\n \"chroma-js\": \"3.1.2\",\n \"commander\": \"12.1.0\",\n \"conf\": \"13.0.1\",\n \"date-fns\": \"3.6.0\",\n \"debug\": \"4.3.6\",\n \"fast-glob\": \"3.3.2\",\n \"form-data\": \"4.0.0\",\n \"get-port\": \"7.1.0\",\n \"htmlparser2\": \"9.1.0\",\n \"http-errors-enhanced\": \"2.0.8\",\n \"immer\": \"10.1.1\",\n \"import-meta-resolve\": \"4.1.0\",\n \"lodash-es\": \"4.17.21\",\n \"nanoid\": \"5.0.7\",\n \"open\": \"10.1.0\",\n \"ora\": \"8.1.0\",\n \"p-queue\": \"8.0.1\",\n \"react-hotkeys-hook\": \"4.5.1\",\n \"react-icons\": \"5.3.0\",\n \"react-selecto\": \"1.26.3\",\n \"rollup-plugin-strip-banner\": \"3.1.0\",\n \"usehooks-ts\": \"3.1.0\",\n \"zundo\": \"2.3.0\",\n \"zustand\": \"4.5.5\"\n },\n \"peerDependencies\": {\n \"@upstart.gg/style-system\": \"workspace:*\",\n \"react\": \"18.3.0-canary-3d9b20132-20240124\",\n \"react-dom\": \"18.3.0-canary-3d9b20132-20240124\"\n },\n \"devDependencies\": {\n \"@cloudflare/workers-types\": \"4.20240806.0\",\n \"@types/chroma-js\": \"2.4.4\",\n \"@types/cli-progress\": \"3.11.6\",\n \"@types/debug\": \"4.1.12\",\n \"@types/express\": \"^4.17.21\",\n \"@types/lodash-es\": \"4.17.12\",\n \"@types/node\": \"^20.14.10\",\n \"@types/react\": \"18.3.3\",\n \"@types/react-dom\": \"^18.3.0\",\n \"@types/sortablejs\": \"1.15.8\",\n \"@vitejs/plugin-react\": \"^4.3.4\",\n \"concurrently\": \"8.2.2\",\n \"express\": \"^4.21.2\",\n \"rimraf\": \"6.0.1\",\n \"tsup\": \"8.2.4\",\n \"vite\": \"5.4.6\",\n \"vite-plugin-dts\": \"4.2.1\",\n \"vite-plugin-image-optimizer\": \"1.1.8\",\n \"vite-plugin-inspect\": \"0.8.7\",\n \"vite-plugin-virtual\": \"0.3.0\",\n \"vite-tsconfig-paths\": \"5.0.1\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"build:types\": \"tsc --emitDeclarationOnly --declaration --declarationMap\",\n \"dev\": \"NODE_OPTIONS='--max-old-space-size=12384' tsup --watch\",\n \"sizetest\": \"pnpm build && du -sh dist\",\n \"lint\": \"biome check --write . && tsc --noEmit\",\n \"ci:lint\": \"tsc --noEmit\",\n \"test\": \"vitest\",\n \"gen-ia-docs\": \"tsx scripts/generate-ia-docs.ts\"\n },\n \"author\": \"Matthias Etienne\",\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n","export const CLI_PROJECT_NAME = \"upstart-cli\";\nexport const CLI_LOGIN_POLL_INTERVAL = 5000; // seconds\nexport const CLI_LOGIN_CLIENT_ID =\n process.env.PUBLIC_UPSTART_OAUTH_CLIENT_ID ?? \"50000000-0000-0000-0000-000000000001\";\n\nexport const API_BASE_URL = process.env.PUBLIC_UPSTART_API_BASE_URL ?? \"https://api.upstart.gg\";\nexport const EDITOR_BASE_URL = process.env.PUBLIC_UPSTART_EDITOR_BASE_URL ?? \"https://upstart.gg\";\nexport const DEFAULT_UPLOAD_MAX_CONCURRENCY = 10;\n\nexport const OAUTH_ENDPOINT_DEVICE_CODE = \"oauth/devicecode\";\nexport const OAUTH_ENDPOINT_TOKEN = \"oauth/token\";\nexport const OAUTH_ENDPOINT_USER_INFO = \"oauth/userinfo\";\n\nexport const API_ENDPOINT_REGISTER_TEMPLATE = \"v1/templates\";\n","import type { CredentialsStore } from \"./types\";\nimport { CLI_PROJECT_NAME, OAUTH_ENDPOINT_USER_INFO } from \"./constants\";\nimport Conf from \"conf\";\nimport path from \"node:path\";\nimport crypto from \"node:crypto\";\nimport fs from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\nimport { getPackageManager } from \"./utils\";\nimport chalk from \"chalk\";\n\nconst __dirname = fileURLToPath(new URL(\".\", import.meta.url));\nconst key = getKey();\nconst accessStore = new Conf<CredentialsStore>({\n projectName: CLI_PROJECT_NAME,\n encryptionKey: key,\n clearInvalidConfig: true,\n});\n\n/**\n * Get access token or throw error if not found\n */\nexport function getTokenOrThrow() {\n const token = accessStore.get(\"access_token\");\n if (!token) {\n const pkgCmd = getPackageManager();\n throw new Error(\n `Access token not found. Please run ${chalk.cyan(`${pkgCmd} run enpage:login`)} to authenticate.`,\n );\n }\n return token;\n}\n\nfunction findNearestNodeModules(): string | null {\n let currentDir = __dirname;\n while (currentDir !== path.parse(currentDir).root) {\n const nodeModulesPath = path.join(currentDir, \"node_modules\");\n if (fs.existsSync(nodeModulesPath)) {\n return nodeModulesPath;\n }\n currentDir = path.dirname(currentDir);\n }\n return null;\n}\n\nfunction getKey() {\n const nodeModulesPath = findNearestNodeModules();\n if (!nodeModulesPath) {\n throw new Error(\"Could not find nearest node_modules directory.\");\n }\n const tmpSecureStoreDir = path.join(nodeModulesPath, \".enpage-tmp\");\n if (!fs.existsSync(tmpSecureStoreDir)) {\n fs.mkdirSync(tmpSecureStoreDir, { recursive: true, mode: 0o700 });\n }\n const keyPath = path.join(tmpSecureStoreDir, \".enpage-key\");\n if (!fs.existsSync(keyPath)) {\n const key = crypto.randomBytes(32).toString(\"hex\");\n fs.writeFileSync(keyPath, key, { mode: 0o600 });\n return key;\n }\n const key = fs.readFileSync(keyPath, \"utf8\");\n return key;\n}\n\nexport { accessStore };\n","import { logger } from \"../shared/logger\";\nimport { API_BASE_URL } from \"./constants\";\nimport { accessStore } from \"./store\";\n\ntype SuccessResponseWrapper<T> = {\n isSuccess: true;\n isError: false;\n status: number;\n statusText: string;\n data: T;\n};\n\ntype ErrorResponseWrapper<E> = {\n isSuccess: false;\n isError: true;\n status: number;\n statusText: string;\n data: E;\n};\n\ntype ResponseWrapper<T, E> = SuccessResponseWrapper<T> | ErrorResponseWrapper<E>;\n\ntype CommonResponseType = {\n success: boolean;\n};\n\n/**\n *\n * @param pathOrUrl\n * @param data\n * @returns\n */\nexport async function post<\n ResponseType extends CommonResponseType = CommonResponseType,\n ErrorType = { error: string; error_description?: string },\n>(path: string, data: Record<string, unknown> | URLSearchParams, headers: Record<string, string> = {}) {\n if (accessStore.get(\"access_token\")) {\n headers.Authorization = `Bearer ${accessStore.get(\"access_token\")}`;\n }\n const response = await fetch(toURL(path), {\n method: \"POST\",\n headers: {\n \"Content-Type\":\n data instanceof URLSearchParams ? \"application/x-www-form-urlencoded\" : \"application/json\",\n ...headers,\n },\n body: data instanceof URLSearchParams ? data : JSON.stringify(data),\n }).catch((error) => {\n logger.error(`Fatal Error requesting API: ${error.message} (${error.cause.code})`);\n logger.error(`Please check your internet connection and try again, or retry later.`);\n process.exit(1);\n });\n\n return formatResponse<ResponseType, ErrorType>(response);\n}\n\nexport async function get<ResponseType = unknown, ErrorType = { error: string; error_description?: string }>(\n path: string,\n headers: Record<string, string> = {},\n) {\n if (accessStore.get(\"access_token\")) {\n headers.Authorization = `Bearer ${accessStore.get(\"access_token\")}`;\n }\n const response = await fetch(toURL(path), { headers, method: \"GET\" }).catch((error) => {\n logger.error(`Fatal Error requesting API: ${error.message} (${error.cause.code})`);\n logger.error(`Please check your internet connection and try again, or retry later.`);\n process.exit(1);\n });\n return formatResponse<ResponseType, ErrorType>(response);\n}\n\nfunction toURL(path: string) {\n const apiBaseURL = new URL(API_BASE_URL.endsWith(\"/\") ? API_BASE_URL : `${API_BASE_URL}/`);\n return new URL(path, apiBaseURL);\n}\n\nasync function formatResponse<SuccessType, ErrorType>(\n response: Response,\n): Promise<ResponseWrapper<SuccessType, ErrorType>> {\n const data = response.headers.get(\"content-type\")?.startsWith(\"application/json\")\n ? ((await response.json()) as ResponseType)\n : ((await response.text()) as ResponseType);\n\n if (response.ok) {\n return {\n isSuccess: true,\n isError: false,\n status: response.status,\n statusText: response.statusText,\n data: data as SuccessType,\n };\n } else {\n return {\n isSuccess: false,\n isError: true,\n status: response.status,\n statusText: response.statusText,\n data: data as ErrorType,\n };\n }\n}\n"],"mappings":"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","names":["createLoggerBase","version","chalk","createLogger","level","allowClearScreen","showVersion","logger","createLoggerBase","version","message","options","CLI_PROJECT_NAME","CLI_LOGIN_CLIENT_ID","API_BASE_URL","EDITOR_BASE_URL","Conf","path","crypto","fs","fileURLToPath","chalk","__dirname","fileURLToPath","key","getKey","accessStore","Conf","CLI_PROJECT_NAME","findNearestNodeModules","currentDir","__dirname","path","nodeModulesPath","fs","getKey","tmpSecureStoreDir","keyPath","key","crypto","post","path","data","headers","accessStore","response","toURL","error","logger","formatResponse","get","apiBaseURL","API_BASE_URL"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/node/shared/logger.ts","../../../src/node/cli/constants.ts","../../../src/node/cli/store.ts","../../../src/node/cli/api.ts"],"sourcesContent":["import {\n createLogger as createLoggerBase,\n type LogLevel,\n type LogOptions,\n type Logger as BaseLogger,\n} from \"vite\";\n// import { version } from \"../../../package.json\";\nimport chalk from \"chalk\";\n\nconst VERSION = 0.1;\n\ntype UpstartLoggerLevel = LogLevel | \"debug\";\n\nexport function createLogger(level?: UpstartLoggerLevel, allowClearScreen?: boolean, showVersion = false) {\n // vite logger does not support \"debug\" level\n const logger = createLoggerBase(level === \"debug\" ? \"info\" : level, {\n prefix: \"[upstart]\",\n allowClearScreen,\n });\n\n if (showVersion) {\n logger.info(chalk.hex(\"#7270c6\").bold(`🚀 Upstart v${VERSION}\\n`));\n }\n\n return {\n ...logger,\n success: (message: string, options?: LogOptions) => logger.info(chalk.green(message), options),\n error: (message: string, options?: LogOptions) => logger.error(chalk.red(message), options),\n warn: (message: string, options?: LogOptions) => logger.warn(chalk.yellow(message), options),\n warnOnce: (message: string, options?: LogOptions) => logger.warnOnce(chalk.yellow(message), options),\n debug: (message: string, options?: LogOptions) => {\n if (level === \"debug\") {\n logger.info(chalk.gray(message), options);\n }\n },\n };\n}\n\nexport const logger = createLogger();\n\nexport type Logger = BaseLogger & {\n success: (message: string, options?: LogOptions) => void;\n debug: (message: string, options?: LogOptions) => void;\n};\n","export const CLI_PROJECT_NAME = \"upstart-cli\";\nexport const CLI_LOGIN_POLL_INTERVAL = 5000; // seconds\nexport const CLI_LOGIN_CLIENT_ID =\n process.env.PUBLIC_UPSTART_OAUTH_CLIENT_ID ?? \"50000000-0000-0000-0000-000000000001\";\n\nexport const API_BASE_URL = process.env.PUBLIC_UPSTART_API_BASE_URL ?? \"https://api.upstart.gg\";\nexport const EDITOR_BASE_URL = process.env.PUBLIC_UPSTART_EDITOR_BASE_URL ?? \"https://upstart.gg\";\nexport const DEFAULT_UPLOAD_MAX_CONCURRENCY = 10;\n\nexport const OAUTH_ENDPOINT_DEVICE_CODE = \"oauth/devicecode\";\nexport const OAUTH_ENDPOINT_TOKEN = \"oauth/token\";\nexport const OAUTH_ENDPOINT_USER_INFO = \"oauth/userinfo\";\n\nexport const API_ENDPOINT_REGISTER_TEMPLATE = \"v1/templates\";\n","import type { CredentialsStore } from \"./types\";\nimport { CLI_PROJECT_NAME, OAUTH_ENDPOINT_USER_INFO } from \"./constants\";\nimport Conf from \"conf\";\nimport path from \"node:path\";\nimport crypto from \"node:crypto\";\nimport fs from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\nimport { getPackageManager } from \"./utils\";\nimport chalk from \"chalk\";\n\nconst __dirname = fileURLToPath(new URL(\".\", import.meta.url));\nconst key = getKey();\nconst accessStore = new Conf<CredentialsStore>({\n projectName: CLI_PROJECT_NAME,\n encryptionKey: key,\n clearInvalidConfig: true,\n});\n\n/**\n * Get access token or throw error if not found\n */\nexport function getTokenOrThrow() {\n const token = accessStore.get(\"access_token\");\n if (!token) {\n const pkgCmd = getPackageManager();\n throw new Error(\n `Access token not found. Please run ${chalk.cyan(`${pkgCmd} run enpage:login`)} to authenticate.`,\n );\n }\n return token;\n}\n\nfunction findNearestNodeModules(): string | null {\n let currentDir = __dirname;\n while (currentDir !== path.parse(currentDir).root) {\n const nodeModulesPath = path.join(currentDir, \"node_modules\");\n if (fs.existsSync(nodeModulesPath)) {\n return nodeModulesPath;\n }\n currentDir = path.dirname(currentDir);\n }\n return null;\n}\n\nfunction getKey() {\n const nodeModulesPath = findNearestNodeModules();\n if (!nodeModulesPath) {\n throw new Error(\"Could not find nearest node_modules directory.\");\n }\n const tmpSecureStoreDir = path.join(nodeModulesPath, \".enpage-tmp\");\n if (!fs.existsSync(tmpSecureStoreDir)) {\n fs.mkdirSync(tmpSecureStoreDir, { recursive: true, mode: 0o700 });\n }\n const keyPath = path.join(tmpSecureStoreDir, \".enpage-key\");\n if (!fs.existsSync(keyPath)) {\n const key = crypto.randomBytes(32).toString(\"hex\");\n fs.writeFileSync(keyPath, key, { mode: 0o600 });\n return key;\n }\n const key = fs.readFileSync(keyPath, \"utf8\");\n return key;\n}\n\nexport { accessStore };\n","import { logger } from \"../shared/logger\";\nimport { API_BASE_URL } from \"./constants\";\nimport { accessStore } from \"./store\";\n\ntype SuccessResponseWrapper<T> = {\n isSuccess: true;\n isError: false;\n status: number;\n statusText: string;\n data: T;\n};\n\ntype ErrorResponseWrapper<E> = {\n isSuccess: false;\n isError: true;\n status: number;\n statusText: string;\n data: E;\n};\n\ntype ResponseWrapper<T, E> = SuccessResponseWrapper<T> | ErrorResponseWrapper<E>;\n\ntype CommonResponseType = {\n success: boolean;\n};\n\n/**\n *\n * @param pathOrUrl\n * @param data\n * @returns\n */\nexport async function post<\n ResponseType extends CommonResponseType = CommonResponseType,\n ErrorType = { error: string; error_description?: string },\n>(path: string, data: Record<string, unknown> | URLSearchParams, headers: Record<string, string> = {}) {\n if (accessStore.get(\"access_token\")) {\n headers.Authorization = `Bearer ${accessStore.get(\"access_token\")}`;\n }\n const response = await fetch(toURL(path), {\n method: \"POST\",\n headers: {\n \"Content-Type\":\n data instanceof URLSearchParams ? \"application/x-www-form-urlencoded\" : \"application/json\",\n ...headers,\n },\n body: data instanceof URLSearchParams ? data : JSON.stringify(data),\n }).catch((error) => {\n logger.error(`Fatal Error requesting API: ${error.message} (${error.cause.code})`);\n logger.error(`Please check your internet connection and try again, or retry later.`);\n process.exit(1);\n });\n\n return formatResponse<ResponseType, ErrorType>(response);\n}\n\nexport async function get<ResponseType = unknown, ErrorType = { error: string; error_description?: string }>(\n path: string,\n headers: Record<string, string> = {},\n) {\n if (accessStore.get(\"access_token\")) {\n headers.Authorization = `Bearer ${accessStore.get(\"access_token\")}`;\n }\n const response = await fetch(toURL(path), { headers, method: \"GET\" }).catch((error) => {\n logger.error(`Fatal Error requesting API: ${error.message} (${error.cause.code})`);\n logger.error(`Please check your internet connection and try again, or retry later.`);\n process.exit(1);\n });\n return formatResponse<ResponseType, ErrorType>(response);\n}\n\nfunction toURL(path: string) {\n const apiBaseURL = new URL(API_BASE_URL.endsWith(\"/\") ? API_BASE_URL : `${API_BASE_URL}/`);\n return new URL(path, apiBaseURL);\n}\n\nasync function formatResponse<SuccessType, ErrorType>(\n response: Response,\n): Promise<ResponseWrapper<SuccessType, ErrorType>> {\n const data = response.headers.get(\"content-type\")?.startsWith(\"application/json\")\n ? ((await response.json()) as ResponseType)\n : ((await response.text()) as ResponseType);\n\n if (response.ok) {\n return {\n isSuccess: true,\n isError: false,\n status: response.status,\n statusText: response.statusText,\n data: data as SuccessType,\n };\n } else {\n return {\n isSuccess: false,\n isError: true,\n status: response.status,\n statusText: response.statusText,\n data: data as ErrorType,\n };\n }\n}\n"],"mappings":"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","names":["createLoggerBase","chalk","VERSION","createLogger","level","allowClearScreen","showVersion","logger","message","options","CLI_PROJECT_NAME","CLI_LOGIN_CLIENT_ID","API_BASE_URL","EDITOR_BASE_URL","Conf","path","crypto","fs","fileURLToPath","chalk","__dirname","fileURLToPath","key","getKey","accessStore","Conf","CLI_PROJECT_NAME","findNearestNodeModules","currentDir","__dirname","path","nodeModulesPath","fs","getKey","tmpSecureStoreDir","keyPath","key","crypto","post","path","data","headers","accessStore","response","toURL","error","logger","formatResponse","get","apiBaseURL","API_BASE_URL"]}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
|
|
2
2
|
|
|
3
|
-
import U from"chalk";import{confirm as
|
|
4
|
-
`)),{...
|
|
5
|
-
`);let{isError:
|
|
3
|
+
import U from"chalk";import{confirm as A}from"@inquirer/prompts";import N from"open";var l="upstart-cli";var d=process.env.PUBLIC_UPSTART_OAUTH_CLIENT_ID??"50000000-0000-0000-0000-000000000001",u=process.env.PUBLIC_UPSTART_API_BASE_URL??"https://api.upstart.gg",b=process.env.PUBLIC_UPSTART_EDITOR_BASE_URL??"https://upstart.gg";var y="oauth/devicecode",T="oauth/token";import{createLogger as E}from"vite";import i from"chalk";var L=.1;function R(r,e,s=!1){let t=E(r==="debug"?"info":r,{prefix:"[upstart]",allowClearScreen:e});return s&&t.info(i.hex("#7270c6").bold(`\u{1F680} Upstart v${L}
|
|
4
|
+
`)),{...t,success:(o,n)=>t.info(i.green(o),n),error:(o,n)=>t.error(i.red(o),n),warn:(o,n)=>t.warn(i.yellow(o),n),warnOnce:(o,n)=>t.warnOnce(i.yellow(o),n),debug:(o,n)=>{r==="debug"&&t.info(i.gray(o),n)}}}var m=R();import x from"conf";import a from"node:path";import O from"node:crypto";import c from"node:fs";import{fileURLToPath as h}from"node:url";import Q from"chalk";var P=h(new URL(".",import.meta.url)),S=C(),p=new x({projectName:l,encryptionKey:S,clearInvalidConfig:!0});function I(){let r=P;for(;r!==a.parse(r).root;){let e=a.join(r,"node_modules");if(c.existsSync(e))return e;r=a.dirname(r)}return null}function C(){let r=I();if(!r)throw new Error("Could not find nearest node_modules directory.");let e=a.join(r,".enpage-tmp");c.existsSync(e)||c.mkdirSync(e,{recursive:!0,mode:448});let s=a.join(e,".enpage-key");if(!c.existsSync(s)){let o=O.randomBytes(32).toString("hex");return c.writeFileSync(s,o,{mode:384}),o}return c.readFileSync(s,"utf8")}async function _(r,e,s={}){p.get("access_token")&&(s.Authorization=`Bearer ${p.get("access_token")}`);let t=await fetch(w(r),{method:"POST",headers:{"Content-Type":e instanceof URLSearchParams?"application/x-www-form-urlencoded":"application/json",...s},body:e instanceof URLSearchParams?e:JSON.stringify(e)}).catch(o=>{m.error(`Fatal Error requesting API: ${o.message} (${o.cause.code})`),m.error("Please check your internet connection and try again, or retry later."),process.exit(1)});return k(t)}function w(r){let e=new URL(u.endsWith("/")?u:`${u}/`);return new URL(r,e)}async function k(r){let e=r.headers.get("content-type")?.startsWith("application/json")?await r.json():await r.text();return r.ok?{isSuccess:!0,isError:!1,status:r.status,statusText:r.statusText,data:e}:{isSuccess:!1,isError:!0,status:r.status,statusText:r.statusText,data:e}}async function v(r,e){for(;;){let s=new URLSearchParams({grant_type:"device_code",device_code:r,client_id:d}),t=await _(T,s),{data:o,isSuccess:n}=t;if(n)return o;if(o.error==="authorization_pending")await new Promise(f=>setTimeout(f,5e3));else return e.error(`Error while polling for login: ${o.error_description??o.error}`),!1}}async function ge({options:r,logger:e}){e.info(`Logging in to Enpage...
|
|
5
|
+
`);let{isError:s,data:t}=await _(y,{client_id:d,scope:"profile,templates:publish"});s&&(e.error("Failed to get device code. Please try again."),e.error(`Error: ${t.error_description??t.error}`),process.exit(1));let{verification_uri:o,device_code:n}=t;await A({message:"Would you like to open the login page in your browser?",default:!0}).catch(D=>{process.exit(0)})?N(o):e.info(`
|
|
6
6
|
Please visit the following URL to login:
|
|
7
|
-
${
|
|
7
|
+
${o}
|
|
8
8
|
`),e.info(U.gray(`
|
|
9
9
|
Waiting for login...
|
|
10
|
-
`));let
|
|
11
|
-
`),process.exitCode=0}export{
|
|
10
|
+
`));let g=await v(n,e);g||(e.error("Login failed. Please try again."),process.exit(1)),p.set({...g,...g.expires_in?{expires_at:Date.now()+g.expires_in*1e3}:{}}),e.info(`Login successful!
|
|
11
|
+
`),process.exitCode=0}export{ge as login,v as pollForLogin};
|
|
12
12
|
//# sourceMappingURL=cmd-login.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/node/cli/commands/login/cmd-login.ts","../../../../../src/node/cli/constants.ts","../../../../../src/node/shared/logger.ts","../../../../../package.json","../../../../../src/node/cli/store.ts","../../../../../src/node/cli/api.ts"],"sourcesContent":["import chalk from \"chalk\";\nimport { confirm } from \"@inquirer/prompts\";\nimport open from \"open\";\nimport { CLI_LOGIN_CLIENT_ID, OAUTH_ENDPOINT_DEVICE_CODE, OAUTH_ENDPOINT_TOKEN } from \"../../constants\";\nimport { post } from \"../../api\";\nimport type { Logger } from \"~/node/shared/logger\";\nimport type { CommandArgOpts, CommonOptions } from \"../../types\";\nimport { accessStore } from \"../../store\";\n\nexport async function pollForLogin(deviceCode: string, logger: Logger) {\n while (true) {\n const body = new URLSearchParams({\n grant_type: \"device_code\",\n device_code: deviceCode,\n client_id: CLI_LOGIN_CLIENT_ID,\n });\n const tokenResponse = await post<DeviceCodeTokenSuccessResponse, DeviceCodeTokenErrorResponse>(\n OAUTH_ENDPOINT_TOKEN,\n body,\n );\n const { data, isSuccess } = tokenResponse;\n\n if (isSuccess) {\n return data;\n }\n\n if (data.error === \"authorization_pending\") {\n await new Promise((resolve) => setTimeout(resolve, 5000));\n } else {\n // other error handling\n logger.error(`Error while polling for login: ${data.error_description ?? data.error}`);\n return false;\n }\n }\n}\n\nexport async function login({ options, logger }: CommandArgOpts<CommonOptions>) {\n logger.info(`Logging in to Enpage...\\n`);\n\n const { isError, data } = await post<DeviceCodeResponse>(OAUTH_ENDPOINT_DEVICE_CODE, {\n client_id: CLI_LOGIN_CLIENT_ID,\n scope: \"profile,templates:publish\",\n });\n\n if (isError) {\n logger.error(\"Failed to get device code. Please try again.\");\n logger.error(`Error: ${data.error_description ?? data.error}`);\n process.exit(1);\n }\n\n const { verification_uri, device_code } = data;\n\n const confirmed = await confirm({\n message: `Would you like to open the login page in your browser?`,\n default: true,\n }).catch((e) => {\n process.exit(0);\n });\n\n if (confirmed) {\n open(verification_uri);\n } else {\n logger.info(`\\nPlease visit the following URL to login:\\n ${verification_uri}\\n`);\n }\n\n logger.info(chalk.gray(\"\\nWaiting for login...\\n\"));\n\n const loginData = await pollForLogin(device_code, logger);\n\n if (!loginData) {\n logger.error(\"Login failed. Please try again.\");\n process.exit(1);\n }\n\n // Store the access token info\n accessStore.set({\n ...loginData,\n ...(loginData.expires_in ? { expires_at: Date.now() + loginData.expires_in * 1000 } : {}),\n });\n\n logger.info(\"Login successful!\\n\");\n process.exitCode = 0;\n}\n\ntype DeviceCodeResponse = {\n success: true;\n device_code: string;\n user_code: string;\n verification_uri: string;\n verification_uri_complete?: string; // Optional as per RFC 8628\n expires_in: number;\n interval?: number; // Optional as per RFC 8628\n};\n\n// Union type for the response\n\ntype DeviceCodeTokenSuccessResponse = {\n success: true;\n access_token: string;\n token_type: string;\n expires_in?: number;\n refresh_token?: string;\n scope?: string;\n};\n\n// Error response type for token request\ntype DeviceCodeTokenErrorResponse = {\n error: \"authorization_pending\" | \"slow_down\" | \"access_denied\" | \"expired_token\" | string;\n error_description?: string;\n error_uri?: string;\n};\n","export const CLI_PROJECT_NAME = \"upstart-cli\";\nexport const CLI_LOGIN_POLL_INTERVAL = 5000; // seconds\nexport const CLI_LOGIN_CLIENT_ID =\n process.env.PUBLIC_UPSTART_OAUTH_CLIENT_ID ?? \"50000000-0000-0000-0000-000000000001\";\n\nexport const API_BASE_URL = process.env.PUBLIC_UPSTART_API_BASE_URL ?? \"https://api.upstart.gg\";\nexport const EDITOR_BASE_URL = process.env.PUBLIC_UPSTART_EDITOR_BASE_URL ?? \"https://upstart.gg\";\nexport const DEFAULT_UPLOAD_MAX_CONCURRENCY = 10;\n\nexport const OAUTH_ENDPOINT_DEVICE_CODE = \"oauth/devicecode\";\nexport const OAUTH_ENDPOINT_TOKEN = \"oauth/token\";\nexport const OAUTH_ENDPOINT_USER_INFO = \"oauth/userinfo\";\n\nexport const API_ENDPOINT_REGISTER_TEMPLATE = \"v1/templates\";\n","import {\n createLogger as createLoggerBase,\n type LogLevel,\n type LogOptions,\n type Logger as BaseLogger,\n} from \"vite\";\nimport { version } from \"../../../package.json\";\nimport chalk from \"chalk\";\n\ntype UpstartLoggerLevel = LogLevel | \"debug\";\n\nexport function createLogger(level?: UpstartLoggerLevel, allowClearScreen?: boolean, showVersion = false) {\n // vite logger does not support \"debug\" level\n const logger = createLoggerBase(level === \"debug\" ? \"info\" : level, {\n prefix: \"[upstart]\",\n allowClearScreen,\n });\n\n if (showVersion) {\n logger.info(chalk.hex(\"#7270c6\").bold(`🚀 Upstart v${version}\\n`));\n }\n\n return {\n ...logger,\n success: (message: string, options?: LogOptions) => logger.info(chalk.green(message), options),\n error: (message: string, options?: LogOptions) => logger.error(chalk.red(message), options),\n warn: (message: string, options?: LogOptions) => logger.warn(chalk.yellow(message), options),\n warnOnce: (message: string, options?: LogOptions) => logger.warnOnce(chalk.yellow(message), options),\n debug: (message: string, options?: LogOptions) => {\n if (level === \"debug\") {\n logger.info(chalk.gray(message), options);\n }\n },\n };\n}\n\nexport const logger = createLogger();\n\nexport type Logger = BaseLogger & {\n success: (message: string, options?: LogOptions) => void;\n debug: (message: string, options?: LogOptions) => void;\n};\n","{\n \"name\": \"@upstart.gg/sdk\",\n \"version\": \"0.0.95\",\n \"type\": \"module\",\n \"files\": [\n \"dist\",\n \"env.d.ts\"\n ],\n \"sideEffects\": false,\n \"exports\": {\n \".\": {\n \"import\": \"./dist/shared/index.js\",\n \"types\": \"./dist/shared/index.d.ts\"\n },\n \"./shared/*\": {\n \"types\": \"./dist/shared/*.d.ts\",\n \"import\": \"./dist/shared/*.js\"\n },\n \"./builder/*\": {\n \"import\": \"./dist/node/builder/*.js\"\n },\n \"./cli/*\": {\n \"import\": \"./dist/node/cli/*.js\"\n },\n \"./env.d.ts\": {\n \"types\": \"./env.d.ts\",\n \"require\": \"./env.d.ts\",\n \"import\": \"./env.d.ts\"\n },\n \"./*\": {\n \"types\": \"./dist/shared/*.d.ts\",\n \"import\": \"./dist/shared/*.js\"\n }\n },\n \"dependencies\": {\n \"@date-fns/utc\": \"1.2.0\",\n \"@headlessui/react\": \"2.2.1\",\n \"@inquirer/prompts\": \"5.3.8\",\n \"@radix-ui/react-context-menu\": \"2.2.2\",\n \"@radix-ui/react-toggle-group\": \"1.1.0\",\n \"@radix-ui/themes\": \"3.1.4\",\n \"@sinclair/typebox\": \"0.33.7\",\n \"@upstart.gg/style-system\": \"workspace:*\",\n \"ajv\": \"8.17.1\",\n \"ajv-formats\": \"3.0.1\",\n \"chalk\": \"5.3.0\",\n \"chroma-js\": \"3.1.2\",\n \"commander\": \"12.1.0\",\n \"conf\": \"13.0.1\",\n \"date-fns\": \"3.6.0\",\n \"debug\": \"4.3.6\",\n \"fast-glob\": \"3.3.2\",\n \"form-data\": \"4.0.0\",\n \"get-port\": \"7.1.0\",\n \"htmlparser2\": \"9.1.0\",\n \"http-errors-enhanced\": \"2.0.8\",\n \"immer\": \"10.1.1\",\n \"import-meta-resolve\": \"4.1.0\",\n \"lodash-es\": \"4.17.21\",\n \"nanoid\": \"5.0.7\",\n \"open\": \"10.1.0\",\n \"ora\": \"8.1.0\",\n \"p-queue\": \"8.0.1\",\n \"react-hotkeys-hook\": \"4.5.1\",\n \"react-icons\": \"5.3.0\",\n \"react-selecto\": \"1.26.3\",\n \"rollup-plugin-strip-banner\": \"3.1.0\",\n \"usehooks-ts\": \"3.1.0\",\n \"zundo\": \"2.3.0\",\n \"zustand\": \"4.5.5\"\n },\n \"peerDependencies\": {\n \"@upstart.gg/style-system\": \"workspace:*\",\n \"react\": \"18.3.0-canary-3d9b20132-20240124\",\n \"react-dom\": \"18.3.0-canary-3d9b20132-20240124\"\n },\n \"devDependencies\": {\n \"@cloudflare/workers-types\": \"4.20240806.0\",\n \"@types/chroma-js\": \"2.4.4\",\n \"@types/cli-progress\": \"3.11.6\",\n \"@types/debug\": \"4.1.12\",\n \"@types/express\": \"^4.17.21\",\n \"@types/lodash-es\": \"4.17.12\",\n \"@types/node\": \"^20.14.10\",\n \"@types/react\": \"18.3.3\",\n \"@types/react-dom\": \"^18.3.0\",\n \"@types/sortablejs\": \"1.15.8\",\n \"@vitejs/plugin-react\": \"^4.3.4\",\n \"concurrently\": \"8.2.2\",\n \"express\": \"^4.21.2\",\n \"rimraf\": \"6.0.1\",\n \"tsup\": \"8.2.4\",\n \"vite\": \"5.4.6\",\n \"vite-plugin-dts\": \"4.2.1\",\n \"vite-plugin-image-optimizer\": \"1.1.8\",\n \"vite-plugin-inspect\": \"0.8.7\",\n \"vite-plugin-virtual\": \"0.3.0\",\n \"vite-tsconfig-paths\": \"5.0.1\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"build:types\": \"tsc --emitDeclarationOnly --declaration --declarationMap\",\n \"dev\": \"NODE_OPTIONS='--max-old-space-size=12384' tsup --watch\",\n \"sizetest\": \"pnpm build && du -sh dist\",\n \"lint\": \"biome check --write . && tsc --noEmit\",\n \"ci:lint\": \"tsc --noEmit\",\n \"test\": \"vitest\",\n \"gen-ia-docs\": \"tsx scripts/generate-ia-docs.ts\"\n },\n \"author\": \"Matthias Etienne\",\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n","import type { CredentialsStore } from \"./types\";\nimport { CLI_PROJECT_NAME, OAUTH_ENDPOINT_USER_INFO } from \"./constants\";\nimport Conf from \"conf\";\nimport path from \"node:path\";\nimport crypto from \"node:crypto\";\nimport fs from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\nimport { getPackageManager } from \"./utils\";\nimport chalk from \"chalk\";\n\nconst __dirname = fileURLToPath(new URL(\".\", import.meta.url));\nconst key = getKey();\nconst accessStore = new Conf<CredentialsStore>({\n projectName: CLI_PROJECT_NAME,\n encryptionKey: key,\n clearInvalidConfig: true,\n});\n\n/**\n * Get access token or throw error if not found\n */\nexport function getTokenOrThrow() {\n const token = accessStore.get(\"access_token\");\n if (!token) {\n const pkgCmd = getPackageManager();\n throw new Error(\n `Access token not found. Please run ${chalk.cyan(`${pkgCmd} run enpage:login`)} to authenticate.`,\n );\n }\n return token;\n}\n\nfunction findNearestNodeModules(): string | null {\n let currentDir = __dirname;\n while (currentDir !== path.parse(currentDir).root) {\n const nodeModulesPath = path.join(currentDir, \"node_modules\");\n if (fs.existsSync(nodeModulesPath)) {\n return nodeModulesPath;\n }\n currentDir = path.dirname(currentDir);\n }\n return null;\n}\n\nfunction getKey() {\n const nodeModulesPath = findNearestNodeModules();\n if (!nodeModulesPath) {\n throw new Error(\"Could not find nearest node_modules directory.\");\n }\n const tmpSecureStoreDir = path.join(nodeModulesPath, \".enpage-tmp\");\n if (!fs.existsSync(tmpSecureStoreDir)) {\n fs.mkdirSync(tmpSecureStoreDir, { recursive: true, mode: 0o700 });\n }\n const keyPath = path.join(tmpSecureStoreDir, \".enpage-key\");\n if (!fs.existsSync(keyPath)) {\n const key = crypto.randomBytes(32).toString(\"hex\");\n fs.writeFileSync(keyPath, key, { mode: 0o600 });\n return key;\n }\n const key = fs.readFileSync(keyPath, \"utf8\");\n return key;\n}\n\nexport { accessStore };\n","import { logger } from \"../shared/logger\";\nimport { API_BASE_URL } from \"./constants\";\nimport { accessStore } from \"./store\";\n\ntype SuccessResponseWrapper<T> = {\n isSuccess: true;\n isError: false;\n status: number;\n statusText: string;\n data: T;\n};\n\ntype ErrorResponseWrapper<E> = {\n isSuccess: false;\n isError: true;\n status: number;\n statusText: string;\n data: E;\n};\n\ntype ResponseWrapper<T, E> = SuccessResponseWrapper<T> | ErrorResponseWrapper<E>;\n\ntype CommonResponseType = {\n success: boolean;\n};\n\n/**\n *\n * @param pathOrUrl\n * @param data\n * @returns\n */\nexport async function post<\n ResponseType extends CommonResponseType = CommonResponseType,\n ErrorType = { error: string; error_description?: string },\n>(path: string, data: Record<string, unknown> | URLSearchParams, headers: Record<string, string> = {}) {\n if (accessStore.get(\"access_token\")) {\n headers.Authorization = `Bearer ${accessStore.get(\"access_token\")}`;\n }\n const response = await fetch(toURL(path), {\n method: \"POST\",\n headers: {\n \"Content-Type\":\n data instanceof URLSearchParams ? \"application/x-www-form-urlencoded\" : \"application/json\",\n ...headers,\n },\n body: data instanceof URLSearchParams ? data : JSON.stringify(data),\n }).catch((error) => {\n logger.error(`Fatal Error requesting API: ${error.message} (${error.cause.code})`);\n logger.error(`Please check your internet connection and try again, or retry later.`);\n process.exit(1);\n });\n\n return formatResponse<ResponseType, ErrorType>(response);\n}\n\nexport async function get<ResponseType = unknown, ErrorType = { error: string; error_description?: string }>(\n path: string,\n headers: Record<string, string> = {},\n) {\n if (accessStore.get(\"access_token\")) {\n headers.Authorization = `Bearer ${accessStore.get(\"access_token\")}`;\n }\n const response = await fetch(toURL(path), { headers, method: \"GET\" }).catch((error) => {\n logger.error(`Fatal Error requesting API: ${error.message} (${error.cause.code})`);\n logger.error(`Please check your internet connection and try again, or retry later.`);\n process.exit(1);\n });\n return formatResponse<ResponseType, ErrorType>(response);\n}\n\nfunction toURL(path: string) {\n const apiBaseURL = new URL(API_BASE_URL.endsWith(\"/\") ? API_BASE_URL : `${API_BASE_URL}/`);\n return new URL(path, apiBaseURL);\n}\n\nasync function formatResponse<SuccessType, ErrorType>(\n response: Response,\n): Promise<ResponseWrapper<SuccessType, ErrorType>> {\n const data = response.headers.get(\"content-type\")?.startsWith(\"application/json\")\n ? ((await response.json()) as ResponseType)\n : ((await response.text()) as ResponseType);\n\n if (response.ok) {\n return {\n isSuccess: true,\n isError: false,\n status: response.status,\n statusText: response.statusText,\n data: data as SuccessType,\n };\n } else {\n return {\n isSuccess: false,\n isError: true,\n status: response.status,\n statusText: response.statusText,\n data: data as ErrorType,\n };\n }\n}\n"],"mappings":"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","names":["chalk","confirm","open","CLI_PROJECT_NAME","CLI_LOGIN_CLIENT_ID","API_BASE_URL","EDITOR_BASE_URL","OAUTH_ENDPOINT_DEVICE_CODE","OAUTH_ENDPOINT_TOKEN","createLoggerBase","version","chalk","createLogger","level","allowClearScreen","showVersion","logger","createLoggerBase","version","message","options","Conf","path","crypto","fs","fileURLToPath","chalk","__dirname","fileURLToPath","key","getKey","accessStore","Conf","CLI_PROJECT_NAME","findNearestNodeModules","currentDir","__dirname","path","nodeModulesPath","fs","getKey","tmpSecureStoreDir","keyPath","key","crypto","post","path","data","headers","accessStore","response","toURL","error","logger","formatResponse","toURL","path","apiBaseURL","API_BASE_URL","formatResponse","response","data","pollForLogin","deviceCode","logger","body","CLI_LOGIN_CLIENT_ID","tokenResponse","post","OAUTH_ENDPOINT_TOKEN","data","isSuccess","resolve","login","options","isError","OAUTH_ENDPOINT_DEVICE_CODE","verification_uri","device_code","confirm","e","open","chalk","loginData","accessStore"]}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/node/cli/commands/login/cmd-login.ts","../../../../../src/node/cli/constants.ts","../../../../../src/node/shared/logger.ts","../../../../../src/node/cli/store.ts","../../../../../src/node/cli/api.ts"],"sourcesContent":["import chalk from \"chalk\";\nimport { confirm } from \"@inquirer/prompts\";\nimport open from \"open\";\nimport { CLI_LOGIN_CLIENT_ID, OAUTH_ENDPOINT_DEVICE_CODE, OAUTH_ENDPOINT_TOKEN } from \"../../constants\";\nimport { post } from \"../../api\";\nimport type { Logger } from \"~/node/shared/logger\";\nimport type { CommandArgOpts, CommonOptions } from \"../../types\";\nimport { accessStore } from \"../../store\";\n\nexport async function pollForLogin(deviceCode: string, logger: Logger) {\n while (true) {\n const body = new URLSearchParams({\n grant_type: \"device_code\",\n device_code: deviceCode,\n client_id: CLI_LOGIN_CLIENT_ID,\n });\n const tokenResponse = await post<DeviceCodeTokenSuccessResponse, DeviceCodeTokenErrorResponse>(\n OAUTH_ENDPOINT_TOKEN,\n body,\n );\n const { data, isSuccess } = tokenResponse;\n\n if (isSuccess) {\n return data;\n }\n\n if (data.error === \"authorization_pending\") {\n await new Promise((resolve) => setTimeout(resolve, 5000));\n } else {\n // other error handling\n logger.error(`Error while polling for login: ${data.error_description ?? data.error}`);\n return false;\n }\n }\n}\n\nexport async function login({ options, logger }: CommandArgOpts<CommonOptions>) {\n logger.info(`Logging in to Enpage...\\n`);\n\n const { isError, data } = await post<DeviceCodeResponse>(OAUTH_ENDPOINT_DEVICE_CODE, {\n client_id: CLI_LOGIN_CLIENT_ID,\n scope: \"profile,templates:publish\",\n });\n\n if (isError) {\n logger.error(\"Failed to get device code. Please try again.\");\n logger.error(`Error: ${data.error_description ?? data.error}`);\n process.exit(1);\n }\n\n const { verification_uri, device_code } = data;\n\n const confirmed = await confirm({\n message: `Would you like to open the login page in your browser?`,\n default: true,\n }).catch((e) => {\n process.exit(0);\n });\n\n if (confirmed) {\n open(verification_uri);\n } else {\n logger.info(`\\nPlease visit the following URL to login:\\n ${verification_uri}\\n`);\n }\n\n logger.info(chalk.gray(\"\\nWaiting for login...\\n\"));\n\n const loginData = await pollForLogin(device_code, logger);\n\n if (!loginData) {\n logger.error(\"Login failed. Please try again.\");\n process.exit(1);\n }\n\n // Store the access token info\n accessStore.set({\n ...loginData,\n ...(loginData.expires_in ? { expires_at: Date.now() + loginData.expires_in * 1000 } : {}),\n });\n\n logger.info(\"Login successful!\\n\");\n process.exitCode = 0;\n}\n\ntype DeviceCodeResponse = {\n success: true;\n device_code: string;\n user_code: string;\n verification_uri: string;\n verification_uri_complete?: string; // Optional as per RFC 8628\n expires_in: number;\n interval?: number; // Optional as per RFC 8628\n};\n\n// Union type for the response\n\ntype DeviceCodeTokenSuccessResponse = {\n success: true;\n access_token: string;\n token_type: string;\n expires_in?: number;\n refresh_token?: string;\n scope?: string;\n};\n\n// Error response type for token request\ntype DeviceCodeTokenErrorResponse = {\n error: \"authorization_pending\" | \"slow_down\" | \"access_denied\" | \"expired_token\" | string;\n error_description?: string;\n error_uri?: string;\n};\n","export const CLI_PROJECT_NAME = \"upstart-cli\";\nexport const CLI_LOGIN_POLL_INTERVAL = 5000; // seconds\nexport const CLI_LOGIN_CLIENT_ID =\n process.env.PUBLIC_UPSTART_OAUTH_CLIENT_ID ?? \"50000000-0000-0000-0000-000000000001\";\n\nexport const API_BASE_URL = process.env.PUBLIC_UPSTART_API_BASE_URL ?? \"https://api.upstart.gg\";\nexport const EDITOR_BASE_URL = process.env.PUBLIC_UPSTART_EDITOR_BASE_URL ?? \"https://upstart.gg\";\nexport const DEFAULT_UPLOAD_MAX_CONCURRENCY = 10;\n\nexport const OAUTH_ENDPOINT_DEVICE_CODE = \"oauth/devicecode\";\nexport const OAUTH_ENDPOINT_TOKEN = \"oauth/token\";\nexport const OAUTH_ENDPOINT_USER_INFO = \"oauth/userinfo\";\n\nexport const API_ENDPOINT_REGISTER_TEMPLATE = \"v1/templates\";\n","import {\n createLogger as createLoggerBase,\n type LogLevel,\n type LogOptions,\n type Logger as BaseLogger,\n} from \"vite\";\n// import { version } from \"../../../package.json\";\nimport chalk from \"chalk\";\n\nconst VERSION = 0.1;\n\ntype UpstartLoggerLevel = LogLevel | \"debug\";\n\nexport function createLogger(level?: UpstartLoggerLevel, allowClearScreen?: boolean, showVersion = false) {\n // vite logger does not support \"debug\" level\n const logger = createLoggerBase(level === \"debug\" ? \"info\" : level, {\n prefix: \"[upstart]\",\n allowClearScreen,\n });\n\n if (showVersion) {\n logger.info(chalk.hex(\"#7270c6\").bold(`🚀 Upstart v${VERSION}\\n`));\n }\n\n return {\n ...logger,\n success: (message: string, options?: LogOptions) => logger.info(chalk.green(message), options),\n error: (message: string, options?: LogOptions) => logger.error(chalk.red(message), options),\n warn: (message: string, options?: LogOptions) => logger.warn(chalk.yellow(message), options),\n warnOnce: (message: string, options?: LogOptions) => logger.warnOnce(chalk.yellow(message), options),\n debug: (message: string, options?: LogOptions) => {\n if (level === \"debug\") {\n logger.info(chalk.gray(message), options);\n }\n },\n };\n}\n\nexport const logger = createLogger();\n\nexport type Logger = BaseLogger & {\n success: (message: string, options?: LogOptions) => void;\n debug: (message: string, options?: LogOptions) => void;\n};\n","import type { CredentialsStore } from \"./types\";\nimport { CLI_PROJECT_NAME, OAUTH_ENDPOINT_USER_INFO } from \"./constants\";\nimport Conf from \"conf\";\nimport path from \"node:path\";\nimport crypto from \"node:crypto\";\nimport fs from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\nimport { getPackageManager } from \"./utils\";\nimport chalk from \"chalk\";\n\nconst __dirname = fileURLToPath(new URL(\".\", import.meta.url));\nconst key = getKey();\nconst accessStore = new Conf<CredentialsStore>({\n projectName: CLI_PROJECT_NAME,\n encryptionKey: key,\n clearInvalidConfig: true,\n});\n\n/**\n * Get access token or throw error if not found\n */\nexport function getTokenOrThrow() {\n const token = accessStore.get(\"access_token\");\n if (!token) {\n const pkgCmd = getPackageManager();\n throw new Error(\n `Access token not found. Please run ${chalk.cyan(`${pkgCmd} run enpage:login`)} to authenticate.`,\n );\n }\n return token;\n}\n\nfunction findNearestNodeModules(): string | null {\n let currentDir = __dirname;\n while (currentDir !== path.parse(currentDir).root) {\n const nodeModulesPath = path.join(currentDir, \"node_modules\");\n if (fs.existsSync(nodeModulesPath)) {\n return nodeModulesPath;\n }\n currentDir = path.dirname(currentDir);\n }\n return null;\n}\n\nfunction getKey() {\n const nodeModulesPath = findNearestNodeModules();\n if (!nodeModulesPath) {\n throw new Error(\"Could not find nearest node_modules directory.\");\n }\n const tmpSecureStoreDir = path.join(nodeModulesPath, \".enpage-tmp\");\n if (!fs.existsSync(tmpSecureStoreDir)) {\n fs.mkdirSync(tmpSecureStoreDir, { recursive: true, mode: 0o700 });\n }\n const keyPath = path.join(tmpSecureStoreDir, \".enpage-key\");\n if (!fs.existsSync(keyPath)) {\n const key = crypto.randomBytes(32).toString(\"hex\");\n fs.writeFileSync(keyPath, key, { mode: 0o600 });\n return key;\n }\n const key = fs.readFileSync(keyPath, \"utf8\");\n return key;\n}\n\nexport { accessStore };\n","import { logger } from \"../shared/logger\";\nimport { API_BASE_URL } from \"./constants\";\nimport { accessStore } from \"./store\";\n\ntype SuccessResponseWrapper<T> = {\n isSuccess: true;\n isError: false;\n status: number;\n statusText: string;\n data: T;\n};\n\ntype ErrorResponseWrapper<E> = {\n isSuccess: false;\n isError: true;\n status: number;\n statusText: string;\n data: E;\n};\n\ntype ResponseWrapper<T, E> = SuccessResponseWrapper<T> | ErrorResponseWrapper<E>;\n\ntype CommonResponseType = {\n success: boolean;\n};\n\n/**\n *\n * @param pathOrUrl\n * @param data\n * @returns\n */\nexport async function post<\n ResponseType extends CommonResponseType = CommonResponseType,\n ErrorType = { error: string; error_description?: string },\n>(path: string, data: Record<string, unknown> | URLSearchParams, headers: Record<string, string> = {}) {\n if (accessStore.get(\"access_token\")) {\n headers.Authorization = `Bearer ${accessStore.get(\"access_token\")}`;\n }\n const response = await fetch(toURL(path), {\n method: \"POST\",\n headers: {\n \"Content-Type\":\n data instanceof URLSearchParams ? \"application/x-www-form-urlencoded\" : \"application/json\",\n ...headers,\n },\n body: data instanceof URLSearchParams ? data : JSON.stringify(data),\n }).catch((error) => {\n logger.error(`Fatal Error requesting API: ${error.message} (${error.cause.code})`);\n logger.error(`Please check your internet connection and try again, or retry later.`);\n process.exit(1);\n });\n\n return formatResponse<ResponseType, ErrorType>(response);\n}\n\nexport async function get<ResponseType = unknown, ErrorType = { error: string; error_description?: string }>(\n path: string,\n headers: Record<string, string> = {},\n) {\n if (accessStore.get(\"access_token\")) {\n headers.Authorization = `Bearer ${accessStore.get(\"access_token\")}`;\n }\n const response = await fetch(toURL(path), { headers, method: \"GET\" }).catch((error) => {\n logger.error(`Fatal Error requesting API: ${error.message} (${error.cause.code})`);\n logger.error(`Please check your internet connection and try again, or retry later.`);\n process.exit(1);\n });\n return formatResponse<ResponseType, ErrorType>(response);\n}\n\nfunction toURL(path: string) {\n const apiBaseURL = new URL(API_BASE_URL.endsWith(\"/\") ? API_BASE_URL : `${API_BASE_URL}/`);\n return new URL(path, apiBaseURL);\n}\n\nasync function formatResponse<SuccessType, ErrorType>(\n response: Response,\n): Promise<ResponseWrapper<SuccessType, ErrorType>> {\n const data = response.headers.get(\"content-type\")?.startsWith(\"application/json\")\n ? ((await response.json()) as ResponseType)\n : ((await response.text()) as ResponseType);\n\n if (response.ok) {\n return {\n isSuccess: true,\n isError: false,\n status: response.status,\n statusText: response.statusText,\n data: data as SuccessType,\n };\n } else {\n return {\n isSuccess: false,\n isError: true,\n status: response.status,\n statusText: response.statusText,\n data: data as ErrorType,\n };\n }\n}\n"],"mappings":";;AAAA,OAAOA,MAAW,QAClB,OAAS,WAAAC,MAAe,oBACxB,OAAOC,MAAU,OCFV,IAAMC,EAAmB,cAEzB,IAAMC,EACX,QAAQ,IAAI,gCAAkC,uCAEnCC,EAAe,QAAQ,IAAI,6BAA+B,yBAC1DC,EAAkB,QAAQ,IAAI,gCAAkC,qBAGtE,IAAMC,EAA6B,mBAC7BC,EAAuB,cCVpC,OACE,gBAAgBC,MAIX,OAEP,OAAOC,MAAW,QAElB,IAAMC,EAAU,GAIT,SAASC,EAAaC,EAA4BC,EAA4BC,EAAc,GAAO,CAExG,IAAMC,EAASP,EAAiBI,IAAU,QAAU,OAASA,EAAO,CAClE,OAAQ,YACR,iBAAAC,CACF,CAAC,EAED,OAAIC,GACFC,EAAO,KAAKN,EAAM,IAAI,SAAS,EAAE,KAAK,sBAAeC,CAAO;AAAA,CAAI,CAAC,EAG5D,CACL,GAAGK,EACH,QAAS,CAACC,EAAiBC,IAAyBF,EAAO,KAAKN,EAAM,MAAMO,CAAO,EAAGC,CAAO,EAC7F,MAAO,CAACD,EAAiBC,IAAyBF,EAAO,MAAMN,EAAM,IAAIO,CAAO,EAAGC,CAAO,EAC1F,KAAM,CAACD,EAAiBC,IAAyBF,EAAO,KAAKN,EAAM,OAAOO,CAAO,EAAGC,CAAO,EAC3F,SAAU,CAACD,EAAiBC,IAAyBF,EAAO,SAASN,EAAM,OAAOO,CAAO,EAAGC,CAAO,EACnG,MAAO,CAACD,EAAiBC,IAAyB,CAC5CL,IAAU,SACZG,EAAO,KAAKN,EAAM,KAAKO,CAAO,EAAGC,CAAO,CAE5C,CACF,CACF,CAEO,IAAMF,EAASJ,EAAa,ECpCnC,OAAOO,MAAU,OACjB,OAAOC,MAAU,YACjB,OAAOC,MAAY,cACnB,OAAOC,MAAQ,UACf,OAAS,iBAAAC,MAAqB,WAE9B,OAAOC,MAAW,QAElB,IAAMC,EAAYC,EAAc,IAAI,IAAI,IAAK,YAAY,GAAG,CAAC,EACvDC,EAAMC,EAAO,EACbC,EAAc,IAAIC,EAAuB,CAC7C,YAAaC,EACb,cAAeJ,EACf,mBAAoB,EACtB,CAAC,EAgBD,SAASK,GAAwC,CAC/C,IAAIC,EAAaC,EACjB,KAAOD,IAAeE,EAAK,MAAMF,CAAU,EAAE,MAAM,CACjD,IAAMG,EAAkBD,EAAK,KAAKF,EAAY,cAAc,EAC5D,GAAII,EAAG,WAAWD,CAAe,EAC/B,OAAOA,EAETH,EAAaE,EAAK,QAAQF,CAAU,CACtC,CACA,OAAO,IACT,CAEA,SAASK,GAAS,CAChB,IAAMF,EAAkBJ,EAAuB,EAC/C,GAAI,CAACI,EACH,MAAM,IAAI,MAAM,gDAAgD,EAElE,IAAMG,EAAoBJ,EAAK,KAAKC,EAAiB,aAAa,EAC7DC,EAAG,WAAWE,CAAiB,GAClCF,EAAG,UAAUE,EAAmB,CAAE,UAAW,GAAM,KAAM,GAAM,CAAC,EAElE,IAAMC,EAAUL,EAAK,KAAKI,EAAmB,aAAa,EAC1D,GAAI,CAACF,EAAG,WAAWG,CAAO,EAAG,CAC3B,IAAMC,EAAMC,EAAO,YAAY,EAAE,EAAE,SAAS,KAAK,EACjD,OAAAL,EAAG,cAAcG,EAASC,EAAK,CAAE,KAAM,GAAM,CAAC,EACvCA,CACT,CAEA,OADYJ,EAAG,aAAaG,EAAS,MAAM,CAE7C,CC7BA,eAAsBG,EAGpBC,EAAcC,EAAiDC,EAAkC,CAAC,EAAG,CACjGC,EAAY,IAAI,cAAc,IAChCD,EAAQ,cAAgB,UAAUC,EAAY,IAAI,cAAc,CAAC,IAEnE,IAAMC,EAAW,MAAM,MAAMC,EAAML,CAAI,EAAG,CACxC,OAAQ,OACR,QAAS,CACP,eACEC,aAAgB,gBAAkB,oCAAsC,mBAC1E,GAAGC,CACL,EACA,KAAMD,aAAgB,gBAAkBA,EAAO,KAAK,UAAUA,CAAI,CACpE,CAAC,EAAE,MAAOK,GAAU,CAClBC,EAAO,MAAM,+BAA+BD,EAAM,OAAO,KAAKA,EAAM,MAAM,IAAI,GAAG,EACjFC,EAAO,MAAM,sEAAsE,EACnF,QAAQ,KAAK,CAAC,CAChB,CAAC,EAED,OAAOC,EAAwCJ,CAAQ,CACzD,CAiBA,SAASK,EAAMC,EAAc,CAC3B,IAAMC,EAAa,IAAI,IAAIC,EAAa,SAAS,GAAG,EAAIA,EAAe,GAAGA,CAAY,GAAG,EACzF,OAAO,IAAI,IAAIF,EAAMC,CAAU,CACjC,CAEA,eAAeE,EACbC,EACkD,CAClD,IAAMC,EAAOD,EAAS,QAAQ,IAAI,cAAc,GAAG,WAAW,kBAAkB,EAC1E,MAAMA,EAAS,KAAK,EACpB,MAAMA,EAAS,KAAK,EAE1B,OAAIA,EAAS,GACJ,CACL,UAAW,GACX,QAAS,GACT,OAAQA,EAAS,OACjB,WAAYA,EAAS,WACrB,KAAMC,CACR,EAEO,CACL,UAAW,GACX,QAAS,GACT,OAAQD,EAAS,OACjB,WAAYA,EAAS,WACrB,KAAMC,CACR,CAEJ,CJ3FA,eAAsBC,EAAaC,EAAoBC,EAAgB,CACrE,OAAa,CACX,IAAMC,EAAO,IAAI,gBAAgB,CAC/B,WAAY,cACZ,YAAaF,EACb,UAAWG,CACb,CAAC,EACKC,EAAgB,MAAMC,EAC1BC,EACAJ,CACF,EACM,CAAE,KAAAK,EAAM,UAAAC,CAAU,EAAIJ,EAE5B,GAAII,EACF,OAAOD,EAGT,GAAIA,EAAK,QAAU,wBACjB,MAAM,IAAI,QAASE,GAAY,WAAWA,EAAS,GAAI,CAAC,MAGxD,QAAAR,EAAO,MAAM,kCAAkCM,EAAK,mBAAqBA,EAAK,KAAK,EAAE,EAC9E,EAEX,CACF,CAEA,eAAsBG,GAAM,CAAE,QAAAC,EAAS,OAAAV,CAAO,EAAkC,CAC9EA,EAAO,KAAK;AAAA,CAA2B,EAEvC,GAAM,CAAE,QAAAW,EAAS,KAAAL,CAAK,EAAI,MAAMF,EAAyBQ,EAA4B,CACnF,UAAWV,EACX,MAAO,2BACT,CAAC,EAEGS,IACFX,EAAO,MAAM,8CAA8C,EAC3DA,EAAO,MAAM,UAAUM,EAAK,mBAAqBA,EAAK,KAAK,EAAE,EAC7D,QAAQ,KAAK,CAAC,GAGhB,GAAM,CAAE,iBAAAO,EAAkB,YAAAC,CAAY,EAAIR,EAExB,MAAMS,EAAQ,CAC9B,QAAS,yDACT,QAAS,EACX,CAAC,EAAE,MAAOC,GAAM,CACd,QAAQ,KAAK,CAAC,CAChB,CAAC,EAGCC,EAAKJ,CAAgB,EAErBb,EAAO,KAAK;AAAA;AAAA,IAAiDa,CAAgB;AAAA,CAAI,EAGnFb,EAAO,KAAKkB,EAAM,KAAK;AAAA;AAAA,CAA0B,CAAC,EAElD,IAAMC,EAAY,MAAMrB,EAAagB,EAAad,CAAM,EAEnDmB,IACHnB,EAAO,MAAM,iCAAiC,EAC9C,QAAQ,KAAK,CAAC,GAIhBoB,EAAY,IAAI,CACd,GAAGD,EACH,GAAIA,EAAU,WAAa,CAAE,WAAY,KAAK,IAAI,EAAIA,EAAU,WAAa,GAAK,EAAI,CAAC,CACzF,CAAC,EAEDnB,EAAO,KAAK;AAAA,CAAqB,EACjC,QAAQ,SAAW,CACrB","names":["chalk","confirm","open","CLI_PROJECT_NAME","CLI_LOGIN_CLIENT_ID","API_BASE_URL","EDITOR_BASE_URL","OAUTH_ENDPOINT_DEVICE_CODE","OAUTH_ENDPOINT_TOKEN","createLoggerBase","chalk","VERSION","createLogger","level","allowClearScreen","showVersion","logger","message","options","Conf","path","crypto","fs","fileURLToPath","chalk","__dirname","fileURLToPath","key","getKey","accessStore","Conf","CLI_PROJECT_NAME","findNearestNodeModules","currentDir","__dirname","path","nodeModulesPath","fs","getKey","tmpSecureStoreDir","keyPath","key","crypto","post","path","data","headers","accessStore","response","toURL","error","logger","formatResponse","toURL","path","apiBaseURL","API_BASE_URL","formatResponse","response","data","pollForLogin","deviceCode","logger","body","CLI_LOGIN_CLIENT_ID","tokenResponse","post","OAUTH_ENDPOINT_TOKEN","data","isSuccess","resolve","login","options","isError","OAUTH_ENDPOINT_DEVICE_CODE","verification_uri","device_code","confirm","e","open","chalk","loginData","accessStore"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
|
|
2
2
|
|
|
3
|
-
var i="upstart-cli";var
|
|
4
|
-
`),process.exit(0)}export{
|
|
3
|
+
var i="upstart-cli";var E=process.env.PUBLIC_UPSTART_OAUTH_CLIENT_ID??"50000000-0000-0000-0000-000000000001",l=process.env.PUBLIC_UPSTART_API_BASE_URL??"https://api.upstart.gg",I=process.env.PUBLIC_UPSTART_EDITOR_BASE_URL??"https://upstart.gg";import p from"conf";import r from"node:path";import a from"node:crypto";import t from"node:fs";import{fileURLToPath as _}from"node:url";import k from"chalk";var m=_(new URL(".",import.meta.url)),u=g(),c=new p({projectName:i,encryptionKey:u,clearInvalidConfig:!0});function f(){let e=m;for(;e!==r.parse(e).root;){let o=r.join(e,"node_modules");if(t.existsSync(o))return o;e=r.dirname(e)}return null}function g(){let e=f();if(!e)throw new Error("Could not find nearest node_modules directory.");let o=r.join(e,".enpage-tmp");t.existsSync(o)||t.mkdirSync(o,{recursive:!0,mode:448});let n=r.join(o,".enpage-key");if(!t.existsSync(n)){let s=a.randomBytes(32).toString("hex");return t.writeFileSync(n,s,{mode:384}),s}return t.readFileSync(n,"utf8")}async function M({options:e,logger:o}){o.info("Logging out fom Enpage..."),c.clear(),o.info(`Done.
|
|
4
|
+
`),process.exit(0)}export{M as logout};
|
|
5
5
|
//# sourceMappingURL=cmd-logout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cmd-publish.d.ts","sourceRoot":"","sources":["../../../../../src/node/cli/commands/publish/cmd-publish.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAUlD,wBAAsB,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"cmd-publish.d.ts","sourceRoot":"","sources":["../../../../../src/node/cli/commands/publish/cmd-publish.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAUlD,wBAAsB,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,cAAc,iBAyGtE"}
|
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
/*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
`)),{...
|
|
5
|
-
${p}`:p,
|
|
6
|
-
${
|
|
3
|
+
var ge=Object.defineProperty;var b=(e,t)=>()=>(e&&(t=e(e=0)),t);var de=(e,t)=>{for(var r in t)ge(e,r,{get:t[r],enumerable:!0})};function D(){let e;if(process.env.npm_config_user_agent){let t=process.env.npm_config_user_agent.split(" ")[0];e=t.slice(0,t.lastIndexOf("/"))}return e||(console.log("Warning: could not detect package manager"),e="npm"),e}function J(e){return`[${e.error}]${e.error_description?`: ${e.error_description}`:""}`}var z=b(()=>{"use strict"});var q,ut,T,lt,V,X,Y,R=b(()=>{"use strict";q="upstart-cli",ut=process.env.PUBLIC_UPSTART_OAUTH_CLIENT_ID??"50000000-0000-0000-0000-000000000001",T=process.env.PUBLIC_UPSTART_API_BASE_URL??"https://api.upstart.gg",lt=process.env.PUBLIC_UPSTART_EDITOR_BASE_URL??"https://upstart.gg",V=10,X="oauth/userinfo",Y="v1/templates"});import fe from"conf";import k from"node:path";import me from"node:crypto";import x from"node:fs";import{fileURLToPath as ye}from"node:url";import Se from"chalk";function K(){let e=m.get("access_token");if(!e){let t=D();throw new Error(`Access token not found. Please run ${Se.cyan(`${t} run enpage:login`)} to authenticate.`)}return e}function Ee(){let e=he;for(;e!==k.parse(e).root;){let t=k.join(e,"node_modules");if(x.existsSync(t))return t;e=k.dirname(e)}return null}function Te(){let e=Ee();if(!e)throw new Error("Could not find nearest node_modules directory.");let t=k.join(e,".enpage-tmp");x.existsSync(t)||x.mkdirSync(t,{recursive:!0,mode:448});let r=k.join(t,".enpage-key");if(!x.existsSync(r)){let n=me.randomBytes(32).toString("hex");return x.writeFileSync(r,n,{mode:384}),n}return x.readFileSync(r,"utf8")}var he,Pe,m,j=b(()=>{"use strict";R();z();he=ye(new URL(".",import.meta.url)),Pe=Te(),m=new fe({projectName:q,encryptionKey:Pe,clearInvalidConfig:!0})});import{createLogger as _e}from"vite";import A from"chalk";function Re(e,t,r=!1){let o=_e(e==="debug"?"info":e,{prefix:"[upstart]",allowClearScreen:t});return r&&o.info(A.hex("#7270c6").bold(`\u{1F680} Upstart v${we}
|
|
4
|
+
`)),{...o,success:(n,i)=>o.info(A.green(n),i),error:(n,i)=>o.error(A.red(n),i),warn:(n,i)=>o.warn(A.yellow(n),i),warnOnce:(n,i)=>o.warnOnce(A.yellow(n),i),debug:(n,i)=>{e==="debug"&&o.info(A.gray(n),i)}}}var we,d,G=b(()=>{"use strict";we=.1;d=Re()});var re={};de(re,{get:()=>Fe,post:()=>I});async function I(e,t,r={}){m.get("access_token")&&(r.Authorization=`Bearer ${m.get("access_token")}`);let o=await fetch(ee(e),{method:"POST",headers:{"Content-Type":t instanceof URLSearchParams?"application/x-www-form-urlencoded":"application/json",...r},body:t instanceof URLSearchParams?t:JSON.stringify(t)}).catch(n=>{d.error(`Fatal Error requesting API: ${n.message} (${n.cause.code})`),d.error("Please check your internet connection and try again, or retry later."),process.exit(1)});return te(o)}async function Fe(e,t={}){m.get("access_token")&&(t.Authorization=`Bearer ${m.get("access_token")}`);let r=await fetch(ee(e),{headers:t,method:"GET"}).catch(o=>{d.error(`Fatal Error requesting API: ${o.message} (${o.cause.code})`),d.error("Please check your internet connection and try again, or retry later."),process.exit(1)});return te(r)}function ee(e){let t=new URL(T.endsWith("/")?T:`${T}/`);return new URL(e,t)}async function te(e){let t=e.headers.get("content-type")?.startsWith("application/json")?await e.json():await e.text();return e.ok?{isSuccess:!0,isError:!1,status:e.status,statusText:e.statusText,data:t}:{isSuccess:!1,isError:!0,status:e.status,statusText:e.statusText,data:t}}var W=b(()=>{"use strict";G();R();j()});z();j();import{resolve as y}from"node:path";import{existsSync as v,readFileSync as nt,writeFileSync as st}from"node:fs";import P from"chalk";R();G();import N from"node:path";import F from"node:fs";import ve from"node:crypto";import De from"fast-glob";import ne from"node:http";import je from"node:https";import{pipeline as Ge}from"node:stream";import oe from"chalk";import Be from"form-data";import*as B from"node:fs";var xe=/[<>"|?*\n\r\t\f\x00-\x1F]/,Ae=/(?:^|\/)[*]{2}($|\/)/,$e=248,Le=e=>e!==null&&typeof e=="object"&&!Array.isArray(e),Ue=e=>typeof e=="string"&&e.length<=$e&&!xe.test(e),Ce=e=>e.split(/\r\n?|\n/);var Oe=e=>Le(e)&&Array.isArray(e.patterns)&&Array.isArray(e.sections);var M=(e,t={})=>{let r=t.path;if(Oe(e))return e;Ue(e)&&B.existsSync(e)&&(r=e,e=B.readFileSync(e,"utf8"));let o=Ce(e),n=new Map,i={sections:[],patterns:[]},c={name:"default",patterns:[]},s=null;for(let a of o){let p=a.trim();if(p.startsWith("#")){let[,l]=/^#+\s*(.*)\s*$/.exec(p)||[];if(s){n.delete(s.name),s.comment=s.comment?`${s.comment}
|
|
5
|
+
${p}`:p,s.name=l?`${s.name.trim()}
|
|
6
|
+
${l.trim()}`:s.name.trim(),n.set(s.name.toLowerCase().trim(),s);continue}c={name:l?.trim()||"",comment:p,patterns:[]},n.set(c.name.toLowerCase(),c),i.sections.push(c),s=c;continue}p!==""&&(c.patterns.push(p),i.patterns.push(p)),s=null}return(t.dedupe===!0||t.unique===!0)&&(i=Q(i,{...t,format:!1})),i.path=r,i.input=Buffer.from(e),i.format=a=>Ne(i,{...t,...a}),i.dedupe=a=>Q(i,{...t,...a}),i.globs=a=>ke(i,{path:r,...t,...a}),i};var Q=(e,t)=>{let r=M(e,{...t,dedupe:!1}),o=new Map,n={sections:[],patterns:[]},i;for(let c of r.sections){let{name:s="",comment:a,patterns:p}=c,l=s.trim().toLowerCase();for(let f of p)n.patterns.includes(f)||n.patterns.push(f);s&&o.has(l)?(i=o.get(l),i.patterns=[...i.patterns,...p]):(i={name:s,comment:a,patterns:p},n.sections.push(i),o.set(l,i))}for(let c of n.sections)c.patterns=[...new Set(c.patterns)];return n},be=e=>{if(Ae.test(e))return e;let t=!1;return e.startsWith("/")?(e=e.slice(1),t=!0):e.slice(1,e.length-1).includes("/")&&(t=!0),e+=e.endsWith("/")?"**/":"/**",t?e:`**/${e}`},ke=(e,t={})=>{let r=M(e,t),o=[],n=0,i=r.patterns.concat(t.ignore||[]).concat((t.unignore||[]).map(s=>s.startsWith("!")?s:`!${s}`)),c=(s,a)=>{let p=o[o.length-1],l=s?"unignore":"ignore";p&&p.type===l?p.patterns.includes(a)||p.patterns.push(a):(o.push({type:l,path:t.path||null,patterns:[a],index:n}),n++)};for(let s of i){let a="";s.startsWith("!")&&(s=s.slice(1),a="!"),c(a,s.startsWith("/")?s.slice(1):s),c(a,be(s))}return o},Ie=(e={name:"",patterns:[]})=>{let t=[e.comment||""];return e.patterns?.length&&(t.push(e.patterns.join(`
|
|
7
7
|
`)),t.push("")),t.join(`
|
|
8
|
-
`)},
|
|
9
|
-
`)};var
|
|
10
|
-
`))}async function
|
|
11
|
-
`),
|
|
8
|
+
`)},Ne=(e,t={})=>{let r=M(e,t),o=t.formatSection||Ie,n=r.sections||r,i=[];for(let c of[].concat(n))i.push(o(c));return i.join(`
|
|
9
|
+
`)};var Z=M;W();import Me from"p-queue";import We from"ora";import{customAlphabet as ze}from"nanoid";var $=class extends Error{constructor(r,o,n){super(`${r}: ${o}`);this.error=r;this.error_description=o;this.filename=n;this.name="UploadError"}},He={maxDataSize:12*1024*1024,retryAttempts:2,retryDelay:1e3},Je=new ne.Agent({keepAlive:!0,maxSockets:10,keepAliveMsecs:3e3});async function qe(e){let t=N.join(e,".gitignore"),o=F.existsSync(t)?Z(F.readFileSync(t,"utf-8")).patterns:[];return De("**/*",{cwd:e,onlyFiles:!0,dot:!0,absolute:!0,ignore:["node_modules/**",".cache/**","**/.DS_Store",".gitignore",".env",".env.*",".git/**","dist/**",...o]})}async function Ve(e,t,r,o,n,i,c){let s=async a=>{try{return await Xe(e,t,r,o,n,i,c)}catch(p){if(a<c.retryAttempts)return d.warn(`Retrying upload for ${t} (attempt ${a+1})`),await new Promise(l=>setTimeout(l,c.retryDelay)),s(a+1);throw p}};return s(0)}async function Xe(e,t,r,o,n,i,c){return new Promise((s,a)=>{let p=F.statSync(e),l=N.basename(e),f=Date.now(),S=new Be({maxDataSize:c.maxDataSize}),L=F.createReadStream(e),U=0,_=u=>{U+=u.length};L.on("data",_),S.append("file",L,{filename:l,knownLength:p.size});let w={agent:Je,method:"POST",headers:{authorization:`Bearer ${i}`,"x-upstart-template-file-path":t,"x-upstart-template-id":o,...S.getHeaders()}},E=(r.startsWith("https")?je:ne).request(r,w,u=>{let h="";u.on("data",C=>{h+=C}),u.on("end",()=>{let C=Date.now(),le={fileName:l,fileSize:p.size,uploadDuration:C-f,statusCode:u.statusCode??0,serverResponse:h};if(u.statusCode&&u.statusCode>=200&&u.statusCode<300)n.text=`Uploaded ${t}`,s(le);else{let O;if(u.headers["content-type"]?.startsWith("application/json")){let H=JSON.parse(h);O=new $(H.error||"unknown_error",H.error_description||"Unknown error occurred",t)}else O=new $("unknown_error",h||"Unknown error occurred",t);n.fail(`Failed to upload ${t} [${O.error}] ${O.error_description}`),a(O)}})});E.on("error",u=>{a(new $("request_error",u.message,t))}),Ge(S,E,u=>{u&&a(new $("pipeline_error",`Pipeline failed for ${l}: ${u.message}`,t))})})}function Ye(e,t,r){r.length>0?(d.error(oe.red(`Failed to upload ${r.length} files:`)),r.forEach(o=>{let n=o.reason;d.error(`- ${n.filename}: ${n.error_description} (${n.error})`)})):d.info(oe.green(`Uploaded ${t.length} files successfully for template ${e}.
|
|
10
|
+
`))}async function se(e,t,r,o=!1,n={}){let i={...He,...n},c=new Me({concurrency:V}),s=await qe(t),a=s.length,p={},l=Qe(),f=0;for(let g of s){let E=N.relative(t,g),u=await Ke(g);p[E]=u}o&&(d.info(`Dry run mode enabled. Skipping upload.
|
|
11
|
+
`),d.info("The following files would have been uploaded:"),s.forEach(g=>d.info(`- ${g}`)),process.exit(0));let S=We(`Uploading ${a} files...`).start(),L=s.map(g=>{let E=N.resolve(t,g),u=N.relative(t,g),h=`${T}/v1/templates/${e}/upload/${l}`;return c.add(async()=>{let C=await Ve(E,u,h,e,S,r,i);return f++,C})}),U=await Promise.allSettled(L);S.stop();let _=U.filter(g=>g.status==="fulfilled"),w=U.filter(g=>g.status==="rejected");if(Ye(e,_.map(g=>g.value),w),!w.length&&_.length){let g=`${T}/v1/templates/${e}/upload/${l}/finalize`,u=await I(g,{signatures:p});if(u.isError)return d.error(`Failed to finalize upload: ${u.data.error_description} (${u.data.error})`),{filesCount:a,uploadedFiles:_.map(h=>h.value),failedFiles:[],success:!1}}return{filesCount:a,uploadedFiles:_.map(g=>g.value),failedFiles:w,success:w.length===0}}async function Ke(e){let t=await ve.subtle.digest("SHA-1",F.readFileSync(e));return Array.from(new Uint8Array(t)).map(r=>r.toString(16).padStart(2,"0")).join("")}function Qe(){let e=ze("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",5),t=new Date,r=t.getUTCFullYear(),o=(t.getUTCMonth()+1).toString().padStart(2,"0"),n=t.getUTCDate().toString().padStart(2,"0"),i=t.getUTCHours().toString().padStart(2,"0"),c=t.getUTCMinutes().toString().padStart(2,"0"),s=t.getUTCSeconds().toString().padStart(2,"0");return`${r}${o}${n}${i}${c}${s}_${e()}`}W();R();import ue from"node:path";G();import Ze from"node:fs";import{readFile as et}from"node:fs/promises";import tt from"fast-glob";import{basename as ie,dirname as rt,extname as ot}from"node:path";async function ae(e,t=d){Ze.existsSync(e)||(t.error(`\u{1F534} No enpage.config.js found!
|
|
12
12
|
Your project must have an enpage.config.js file in the root directory.
|
|
13
13
|
|
|
14
|
-
`),process.exit(1));let r=await import(e),
|
|
15
|
-
`),process.exit(1)}let
|
|
16
|
-
`),process.exit(1));let
|
|
14
|
+
`),process.exit(1));let r=await import(e),o=rt(e),n={},i=await tt(["README.enpage.md","README.enpage.*.md"],{cwd:o,onlyFiles:!0,absolute:!0,caseSensitiveMatch:!1});for(let c of i){let s=ie(c,".md"),a=ot(s),p=(a===".enpage"?"en":a.substring(1)).toLowerCase();t.debug(`Found template readme file (${p}): ${ie(c)}`),n[p]=await et(c,"utf-8")}return r}function ce(e,t){for(let r in e.site.datasources)if(e.site.datasources[r].provider==="http-json"&&!e.site.datasources[r].sampleData)throw t.error(`\u{1F534} Error: Datasource "${r}" is missing sample data - nothing will be rendered during development! Please check your enpage.config.js file and add a "sampleData" key to your ${r} datasource.`),new Error(`Missing sample data for datasource "${r}"`);return e}R();j();async function pe(e=!1){let t=m.get("access_token"),r=m.get("expires_at");if(!t)return!1;if(r&&r<Date.now())return console.log("Seems like your token expired..."),!1;if(!e)return!0;let{get:o}=await Promise.resolve().then(()=>(W(),re)),{isSuccess:n}=await o(X);return n}async function dr({options:e,args:t,logger:r}){if(!await pe(!0)){let f=D();r.error(` ${P.redBright("Error")}: User token not found. Please run ${P.cyan(`${f} run enpage:login`)} to authenticate or set the ${P.cyan("ENPAGE_API_TOKEN")} environment variable.
|
|
15
|
+
`),process.exit(1)}let o=t.length?ue.isAbsolute(t[0])?t[0]:y(process.cwd(),t[0]):process.cwd();v(o)||(r.error(` Template directory not found: ${o}. Aborting.
|
|
16
|
+
`),process.exit(1));let n=t.length>1?ue.isAbsolute(t[1])?t[1]:y(process.cwd(),t[1]):y(o,"dist");v(n)||(r.error(` Dist directory not found: ${n}.
|
|
17
17
|
Please run 'build' before publishing. Aborting.
|
|
18
|
-
`),process.exit(1)),
|
|
19
|
-
`),process.exit(1));let
|
|
20
|
-
`),process.exit(1));let a=await
|
|
21
|
-
`),process.exit(1)),!a.enpage?.id){let{data:
|
|
22
|
-
`),process.exit(1)),a.enpage??={},a.enpage.id=
|
|
18
|
+
`),process.exit(1)),v(y(o,"enpage.config.js"))||(r.error(` ${P.redBright("Error")}: file enpage.config.js not found in ${o}. Aborting.
|
|
19
|
+
`),process.exit(1));let i=await ae(y(o,"enpage.config.js"),r);ce(i,r);let c=K(),s=it(o);s||(r.error(` ${P.redBright("Error")}: package.json file not found in ${o}. Aborting.
|
|
20
|
+
`),process.exit(1));let a=await at(s);if(a||(r.error(` ${P.redBright("Error")}: cannot read/parse package.json file in ${o}. Aborting.
|
|
21
|
+
`),process.exit(1)),!a.enpage?.id){let{data:f,isError:S,status:L}=await I(Y,{});S&&(r.error(` ${P.redBright("Error")}: Cannot register template: ${J(f)}
|
|
22
|
+
`),process.exit(1)),a.enpage??={},a.enpage.id=f.template.id;try{e.dryRun||st(s,JSON.stringify(a,null,2))}catch{r.error(` ${P.redBright("Error")}: Cannot update template id in package.json file located in ${o}. Aborting.
|
|
23
23
|
`),process.exit(1)}}let p=a.enpage.id;r.info(`Submitting template to Enpage...
|
|
24
|
-
`),(await
|
|
24
|
+
`),(await se(p,o,c,e.dryRun)).success||(r.error(`
|
|
25
25
|
Upload failed. See details above.
|
|
26
26
|
`),process.exit(1)),r.success(`Template ${p} published.
|
|
27
|
-
`)}function
|
|
27
|
+
`)}function it(e){return v(y(e,"package.json"))?y(e,"package.json"):v(y(e,"template-package.json"))?y(e,"template-package.json"):!1}function at(e){try{return JSON.parse(nt(e,"utf-8"))}catch{return null}}export{dr as publish};
|
|
28
28
|
/*!
|
|
29
29
|
* parse-gitignore <https://github.com/jonschlinkert/parse-gitignore>
|
|
30
30
|
* Copyright (c) 2015-present, Jon Schlinkert.
|