langwatch 0.20.0 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{add-2I554R6L.mjs → add-7QFHK67E.mjs} +10 -7
- package/dist/{add-2I554R6L.mjs.map → add-7QFHK67E.mjs.map} +1 -1
- package/dist/{add-FJ2SMVQE.js → add-EJSXUSD6.js} +13 -10
- package/dist/add-EJSXUSD6.js.map +1 -0
- package/dist/assign-5UEB6AJU.js +50 -0
- package/dist/assign-5UEB6AJU.js.map +1 -0
- package/dist/assign-JCCQ5D7I.mjs +50 -0
- package/dist/assign-JCCQ5D7I.mjs.map +1 -0
- package/dist/chunk-2BJPLPLU.js +33 -0
- package/dist/chunk-2BJPLPLU.js.map +1 -0
- package/dist/chunk-2OHGLTXZ.mjs +51 -0
- package/dist/chunk-2OHGLTXZ.mjs.map +1 -0
- package/dist/chunk-2VVANTLB.js +68 -0
- package/dist/chunk-2VVANTLB.js.map +1 -0
- package/dist/{chunk-L5Z7F7MG.mjs → chunk-43STSE3B.mjs} +2 -2
- package/dist/chunk-47F7UDHN.js +76 -0
- package/dist/chunk-47F7UDHN.js.map +1 -0
- package/dist/chunk-5PMWRY5J.js +80 -0
- package/dist/chunk-5PMWRY5J.js.map +1 -0
- package/dist/chunk-7FD7BEJP.mjs +63 -0
- package/dist/chunk-7FD7BEJP.mjs.map +1 -0
- package/dist/{chunk-PIF2RJWZ.js → chunk-AK4YCKWK.js} +107 -108
- package/dist/chunk-AK4YCKWK.js.map +1 -0
- package/dist/chunk-AMPLL3EP.js +70 -0
- package/dist/chunk-AMPLL3EP.js.map +1 -0
- package/dist/chunk-CGFG5FCC.js +674 -0
- package/dist/chunk-CGFG5FCC.js.map +1 -0
- package/dist/chunk-CLYXJJ6C.js +66 -0
- package/dist/chunk-CLYXJJ6C.js.map +1 -0
- package/dist/{chunk-WSESRS6L.mjs → chunk-COKOLKOR.mjs} +8 -6
- package/dist/{chunk-WSESRS6L.mjs.map → chunk-COKOLKOR.mjs.map} +1 -1
- package/dist/chunk-COMOCQA6.mjs +13 -0
- package/dist/chunk-COMOCQA6.mjs.map +1 -0
- package/dist/chunk-CYRJSLKD.js +68 -0
- package/dist/chunk-CYRJSLKD.js.map +1 -0
- package/dist/{chunk-BJUXJHMQ.js → chunk-D2FHOR76.js} +2 -2
- package/dist/{chunk-BJUXJHMQ.js.map → chunk-D2FHOR76.js.map} +1 -1
- package/dist/{chunk-5LYWRKDF.js → chunk-DB6OJGP4.js} +2 -60
- package/dist/chunk-DB6OJGP4.js.map +1 -0
- package/dist/chunk-DTEKJ3UD.mjs +66 -0
- package/dist/chunk-DTEKJ3UD.mjs.map +1 -0
- package/dist/{chunk-NW32UPEI.js → chunk-DUG35J5N.js} +17 -17
- package/dist/{chunk-NW32UPEI.js.map → chunk-DUG35J5N.js.map} +1 -1
- package/dist/chunk-DWHR6QJK.mjs +46 -0
- package/dist/chunk-DWHR6QJK.mjs.map +1 -0
- package/dist/{chunk-A7CF6ZGH.mjs → chunk-ESGWN42J.mjs} +2 -2
- package/dist/{chunk-FMYG6IOZ.mjs → chunk-FARZEN6T.mjs} +2 -2
- package/dist/chunk-FG3JQBJB.mjs +68 -0
- package/dist/chunk-FG3JQBJB.mjs.map +1 -0
- package/dist/chunk-FKIH4XCX.js +63 -0
- package/dist/chunk-FKIH4XCX.js.map +1 -0
- package/dist/chunk-GLCAOVJA.js +100 -0
- package/dist/chunk-GLCAOVJA.js.map +1 -0
- package/dist/{chunk-VCC7F6B7.js → chunk-H6F5OGSL.js} +11 -11
- package/dist/{chunk-VCC7F6B7.js.map → chunk-H6F5OGSL.js.map} +1 -1
- package/dist/chunk-HHRXMHVH.js +54 -0
- package/dist/chunk-HHRXMHVH.js.map +1 -0
- package/dist/{chunk-ZLCERT3X.js → chunk-HPQFHP6K.js} +12 -10
- package/dist/chunk-HPQFHP6K.js.map +1 -0
- package/dist/chunk-I2LDJPTG.mjs +100 -0
- package/dist/chunk-I2LDJPTG.mjs.map +1 -0
- package/dist/chunk-ILLEMTW3.mjs +674 -0
- package/dist/chunk-ILLEMTW3.mjs.map +1 -0
- package/dist/{chunk-OLI6GF46.js → chunk-JWF5KHWM.js} +16 -14
- package/dist/chunk-JWF5KHWM.js.map +1 -0
- package/dist/{chunk-CWXQ53NE.mjs → chunk-JYR4TXSB.mjs} +10 -8
- package/dist/chunk-JYR4TXSB.mjs.map +1 -0
- package/dist/chunk-KH64V3CL.mjs +54 -0
- package/dist/chunk-KH64V3CL.mjs.map +1 -0
- package/dist/chunk-KJSFJ5Z3.js +51 -0
- package/dist/chunk-KJSFJ5Z3.js.map +1 -0
- package/dist/{chunk-WASZSPD7.mjs → chunk-L3IOXWDG.mjs} +100 -101
- package/dist/chunk-L3IOXWDG.mjs.map +1 -0
- package/dist/{chunk-SSONRNFB.mjs → chunk-LN33ZL4Z.mjs} +2 -2
- package/dist/{chunk-SSONRNFB.mjs.map → chunk-LN33ZL4Z.mjs.map} +1 -1
- package/dist/{chunk-5M66X6SZ.mjs → chunk-LULJYN3P.mjs} +3 -3
- package/dist/chunk-M3WJZUOE.js +13 -0
- package/dist/chunk-M3WJZUOE.js.map +1 -0
- package/dist/{chunk-JVIQJFUE.mjs → chunk-M4IBRWUC.mjs} +2 -60
- package/dist/chunk-M4IBRWUC.mjs.map +1 -0
- package/dist/chunk-NIW2SFZZ.mjs +85 -0
- package/dist/chunk-NIW2SFZZ.mjs.map +1 -0
- package/dist/chunk-NMACMKQN.mjs +68 -0
- package/dist/chunk-NMACMKQN.mjs.map +1 -0
- package/dist/chunk-OAAMDWSK.js +65 -0
- package/dist/chunk-OAAMDWSK.js.map +1 -0
- package/dist/chunk-PO6XRHYW.mjs +80 -0
- package/dist/chunk-PO6XRHYW.mjs.map +1 -0
- package/dist/chunk-QH3WUSKF.mjs +33 -0
- package/dist/chunk-QH3WUSKF.mjs.map +1 -0
- package/dist/chunk-RKJDDUGQ.mjs +65 -0
- package/dist/chunk-RKJDDUGQ.mjs.map +1 -0
- package/dist/chunk-TCO73AV5.mjs +53 -0
- package/dist/chunk-TCO73AV5.mjs.map +1 -0
- package/dist/chunk-TQYUM3WH.mjs +70 -0
- package/dist/chunk-TQYUM3WH.mjs.map +1 -0
- package/dist/chunk-TV6ZXLE5.mjs +76 -0
- package/dist/chunk-TV6ZXLE5.mjs.map +1 -0
- package/dist/chunk-VMDYRBQ7.js +85 -0
- package/dist/chunk-VMDYRBQ7.js.map +1 -0
- package/dist/chunk-WE2PHCFS.js +53 -0
- package/dist/chunk-WE2PHCFS.js.map +1 -0
- package/dist/chunk-WLMXMXHE.js +54 -0
- package/dist/chunk-WLMXMXHE.js.map +1 -0
- package/dist/chunk-X7QBE6AA.js +46 -0
- package/dist/chunk-X7QBE6AA.js.map +1 -0
- package/dist/chunk-YTR56IZO.mjs +54 -0
- package/dist/chunk-YTR56IZO.mjs.map +1 -0
- package/dist/{chunk-QLBNSGWC.js → chunk-Z6MQQXMS.js} +4 -4
- package/dist/{chunk-QLBNSGWC.js.map → chunk-Z6MQQXMS.js.map} +1 -1
- package/dist/{chunk-QNT5P6VV.js → chunk-ZZL6VZZU.js} +2 -2
- package/dist/{chunk-QNT5P6VV.js.map → chunk-ZZL6VZZU.js.map} +1 -1
- package/dist/cli/index.js +467 -20
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/index.mjs +467 -20
- package/dist/cli/index.mjs.map +1 -1
- package/dist/create-45FMHT6B.mjs +78 -0
- package/dist/create-45FMHT6B.mjs.map +1 -0
- package/dist/create-4OA73B7I.mjs +44 -0
- package/dist/create-4OA73B7I.mjs.map +1 -0
- package/dist/create-4U5BPFCT.mjs +51 -0
- package/dist/create-4U5BPFCT.mjs.map +1 -0
- package/dist/create-ARJEJDYU.mjs +18 -0
- package/dist/create-CQ7W2OAA.js +78 -0
- package/dist/create-CQ7W2OAA.js.map +1 -0
- package/dist/create-FI6HBFTB.mjs +63 -0
- package/dist/create-FI6HBFTB.mjs.map +1 -0
- package/dist/create-FYLUSZTP.js +38 -0
- package/dist/create-FYLUSZTP.js.map +1 -0
- package/dist/create-GGYYU5KM.mjs +51 -0
- package/dist/create-GGYYU5KM.mjs.map +1 -0
- package/dist/create-K5LFAS4E.mjs +61 -0
- package/dist/create-K5LFAS4E.mjs.map +1 -0
- package/dist/create-KAPF2AOL.js +44 -0
- package/dist/create-KAPF2AOL.js.map +1 -0
- package/dist/create-LWG7ZHEW.mjs +71 -0
- package/dist/create-LWG7ZHEW.mjs.map +1 -0
- package/dist/create-MXYMAFMF.js +71 -0
- package/dist/create-MXYMAFMF.js.map +1 -0
- package/dist/create-NFYHBFF5.mjs +50 -0
- package/dist/create-NFYHBFF5.mjs.map +1 -0
- package/dist/create-OSAXTSUC.js +51 -0
- package/dist/create-OSAXTSUC.js.map +1 -0
- package/dist/create-RPHO5TZX.js +51 -0
- package/dist/create-RPHO5TZX.js.map +1 -0
- package/dist/create-RRI5ZTMI.mjs +51 -0
- package/dist/create-RRI5ZTMI.mjs.map +1 -0
- package/dist/create-UKLLNRXV.js +61 -0
- package/dist/create-UKLLNRXV.js.map +1 -0
- package/dist/create-UZ5NDYPV.js +88 -0
- package/dist/create-UZ5NDYPV.js.map +1 -0
- package/dist/create-WV2NQDV5.js +63 -0
- package/dist/create-WV2NQDV5.js.map +1 -0
- package/dist/create-XGD3GULQ.js +50 -0
- package/dist/create-XGD3GULQ.js.map +1 -0
- package/dist/create-XZXVGMKU.js +51 -0
- package/dist/create-XZXVGMKU.js.map +1 -0
- package/dist/create-Z2XFL2HX.js +18 -0
- package/dist/create-Z2XFL2HX.js.map +1 -0
- package/dist/create-Z7DUMMQ4.mjs +38 -0
- package/dist/create-Z7DUMMQ4.mjs.map +1 -0
- package/dist/create-ZU4L3XOF.mjs +88 -0
- package/dist/create-ZU4L3XOF.mjs.map +1 -0
- package/dist/delete-22LDMLNG.mjs +61 -0
- package/dist/delete-22LDMLNG.mjs.map +1 -0
- package/dist/delete-2S67GS6A.mjs +40 -0
- package/dist/delete-2S67GS6A.mjs.map +1 -0
- package/dist/delete-3WCCA5O2.mjs +44 -0
- package/dist/delete-3WCCA5O2.mjs.map +1 -0
- package/dist/delete-4QNGDUH6.js +44 -0
- package/dist/delete-4QNGDUH6.js.map +1 -0
- package/dist/delete-555RUBQA.js +55 -0
- package/dist/delete-555RUBQA.js.map +1 -0
- package/dist/delete-5NINT2KV.mjs +42 -0
- package/dist/delete-5NINT2KV.mjs.map +1 -0
- package/dist/delete-5VDH4Q3Z.js +44 -0
- package/dist/delete-5VDH4Q3Z.js.map +1 -0
- package/dist/delete-6JPJPG4B.js +38 -0
- package/dist/delete-6JPJPG4B.js.map +1 -0
- package/dist/delete-6ZD3ARMB.js +61 -0
- package/dist/delete-6ZD3ARMB.js.map +1 -0
- package/dist/delete-AOSVEVNL.mjs +44 -0
- package/dist/delete-AOSVEVNL.mjs.map +1 -0
- package/dist/delete-BLTSYYZQ.js +40 -0
- package/dist/delete-BLTSYYZQ.js.map +1 -0
- package/dist/delete-CTE3RNKB.mjs +42 -0
- package/dist/delete-CTE3RNKB.mjs.map +1 -0
- package/dist/delete-HEF4DLSV.mjs +38 -0
- package/dist/delete-HEF4DLSV.mjs.map +1 -0
- package/dist/delete-I36NLS2V.mjs +65 -0
- package/dist/delete-I36NLS2V.mjs.map +1 -0
- package/dist/delete-J2P2Y2BW.mjs +63 -0
- package/dist/delete-J2P2Y2BW.mjs.map +1 -0
- package/dist/delete-KIXZ73DF.mjs +38 -0
- package/dist/delete-KIXZ73DF.mjs.map +1 -0
- package/dist/delete-L3SU34X6.mjs +44 -0
- package/dist/delete-L3SU34X6.mjs.map +1 -0
- package/dist/delete-N6OZW65U.js +44 -0
- package/dist/delete-N6OZW65U.js.map +1 -0
- package/dist/delete-PPEXA2V4.js +42 -0
- package/dist/delete-PPEXA2V4.js.map +1 -0
- package/dist/delete-PXGB35PF.js +65 -0
- package/dist/delete-PXGB35PF.js.map +1 -0
- package/dist/delete-QVE52G3Q.mjs +42 -0
- package/dist/delete-QVE52G3Q.mjs.map +1 -0
- package/dist/delete-R5TSAZOU.js +42 -0
- package/dist/delete-R5TSAZOU.js.map +1 -0
- package/dist/delete-RIHVCQ6G.mjs +55 -0
- package/dist/delete-RIHVCQ6G.mjs.map +1 -0
- package/dist/delete-UWPOVLSO.js +38 -0
- package/dist/delete-UWPOVLSO.js.map +1 -0
- package/dist/delete-XKF7KO4Y.js +63 -0
- package/dist/delete-XKF7KO4Y.js.map +1 -0
- package/dist/delete-ZY2UCN3W.js +42 -0
- package/dist/delete-ZY2UCN3W.js.map +1 -0
- package/dist/download-2Q5T4WW2.js +96 -0
- package/dist/download-2Q5T4WW2.js.map +1 -0
- package/dist/download-7RBJ3GZM.mjs +96 -0
- package/dist/download-7RBJ3GZM.mjs.map +1 -0
- package/dist/duplicate-7N6B5PJD.mjs +48 -0
- package/dist/duplicate-7N6B5PJD.mjs.map +1 -0
- package/dist/duplicate-HZGUFROD.js +48 -0
- package/dist/duplicate-HZGUFROD.js.map +1 -0
- package/dist/export-PP5LG6Q7.js +91 -0
- package/dist/export-PP5LG6Q7.js.map +1 -0
- package/dist/export-TGKA6WA4.mjs +91 -0
- package/dist/export-TGKA6WA4.mjs.map +1 -0
- package/dist/get-2AXSP6AP.js +62 -0
- package/dist/get-2AXSP6AP.js.map +1 -0
- package/dist/get-6UQYEENU.mjs +55 -0
- package/dist/get-6UQYEENU.mjs.map +1 -0
- package/dist/get-73K7EOMU.mjs +53 -0
- package/dist/get-73K7EOMU.mjs.map +1 -0
- package/dist/get-7JYKMJXV.mjs +85 -0
- package/dist/get-7JYKMJXV.mjs.map +1 -0
- package/dist/get-7V7OBWY5.js +86 -0
- package/dist/get-7V7OBWY5.js.map +1 -0
- package/dist/get-CBNUMPUN.mjs +64 -0
- package/dist/get-CBNUMPUN.mjs.map +1 -0
- package/dist/get-E2RIDN65.mjs +70 -0
- package/dist/get-E2RIDN65.mjs.map +1 -0
- package/dist/get-EN3CQXA7.js +51 -0
- package/dist/get-EN3CQXA7.js.map +1 -0
- package/dist/get-GHUHFWC3.js +58 -0
- package/dist/get-GHUHFWC3.js.map +1 -0
- package/dist/get-GQTPK2MW.mjs +51 -0
- package/dist/get-GQTPK2MW.mjs.map +1 -0
- package/dist/get-I2CQCKFW.mjs +62 -0
- package/dist/get-I2CQCKFW.mjs.map +1 -0
- package/dist/get-IDYGZX5O.mjs +51 -0
- package/dist/get-IDYGZX5O.mjs.map +1 -0
- package/dist/get-JAWJ5RIB.mjs +66 -0
- package/dist/get-JAWJ5RIB.mjs.map +1 -0
- package/dist/get-JYN765FP.js +53 -0
- package/dist/get-JYN765FP.js.map +1 -0
- package/dist/get-MHGIJVZ5.js +51 -0
- package/dist/get-MHGIJVZ5.js.map +1 -0
- package/dist/get-NIA7XUS2.mjs +56 -0
- package/dist/get-NIA7XUS2.mjs.map +1 -0
- package/dist/get-PM5HD5BJ.js +64 -0
- package/dist/get-PM5HD5BJ.js.map +1 -0
- package/dist/get-PR65PTQ5.mjs +86 -0
- package/dist/get-PR65PTQ5.mjs.map +1 -0
- package/dist/get-PYWLY7QQ.mjs +71 -0
- package/dist/get-PYWLY7QQ.mjs.map +1 -0
- package/dist/get-QMCMYTDV.mjs +58 -0
- package/dist/get-QMCMYTDV.mjs.map +1 -0
- package/dist/get-QNYINIDO.mjs +95 -0
- package/dist/get-QNYINIDO.mjs.map +1 -0
- package/dist/get-S7MFACWM.js +70 -0
- package/dist/get-S7MFACWM.js.map +1 -0
- package/dist/get-SBMD2X2P.js +66 -0
- package/dist/get-SBMD2X2P.js.map +1 -0
- package/dist/get-T754IOEI.js +85 -0
- package/dist/get-T754IOEI.js.map +1 -0
- package/dist/get-TOXTYIN5.js +71 -0
- package/dist/get-TOXTYIN5.js.map +1 -0
- package/dist/get-UCHL4WHT.js +95 -0
- package/dist/get-UCHL4WHT.js.map +1 -0
- package/dist/get-Y22XVMEO.js +55 -0
- package/dist/get-Y22XVMEO.js.map +1 -0
- package/dist/get-ZEUJA3KA.js +56 -0
- package/dist/get-ZEUJA3KA.js.map +1 -0
- package/dist/{implementation-8fGNr_Mq.d.ts → implementation-7POf4yX4.d.ts} +1 -1
- package/dist/{implementation-DPQ9ez-J.d.mts → implementation-BbuGM8_W.d.mts} +1 -1
- package/dist/index.d.mts +395 -28
- package/dist/index.d.ts +395 -28
- package/dist/index.js +49 -196
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +35 -182
- package/dist/index.mjs.map +1 -1
- package/dist/list-3JR4HKGF.mjs +70 -0
- package/dist/list-3JR4HKGF.mjs.map +1 -0
- package/dist/list-6BRQWVVV.js +74 -0
- package/dist/list-6BRQWVVV.js.map +1 -0
- package/dist/list-6JTFDJAI.mjs +93 -0
- package/dist/list-6JTFDJAI.mjs.map +1 -0
- package/dist/list-7LV6GOZO.js +85 -0
- package/dist/list-7LV6GOZO.js.map +1 -0
- package/dist/list-AEX4S72W.mjs +74 -0
- package/dist/list-AEX4S72W.mjs.map +1 -0
- package/dist/list-AGELVAP7.js +70 -0
- package/dist/list-AGELVAP7.js.map +1 -0
- package/dist/list-ARBOOOYN.mjs +81 -0
- package/dist/list-ARBOOOYN.mjs.map +1 -0
- package/dist/list-AYOW6OF7.js +73 -0
- package/dist/list-AYOW6OF7.js.map +1 -0
- package/dist/list-BAKCZVTL.mjs +78 -0
- package/dist/list-BAKCZVTL.mjs.map +1 -0
- package/dist/list-BDNGLOLK.mjs +77 -0
- package/dist/list-BDNGLOLK.mjs.map +1 -0
- package/dist/list-C6DPYHQ2.js +109 -0
- package/dist/list-C6DPYHQ2.js.map +1 -0
- package/dist/list-E7YPBCAF.mjs +85 -0
- package/dist/list-E7YPBCAF.mjs.map +1 -0
- package/dist/list-EPB36Y7W.mjs +49 -0
- package/dist/list-EPB36Y7W.mjs.map +1 -0
- package/dist/list-FLTPMAHR.js +93 -0
- package/dist/list-FLTPMAHR.js.map +1 -0
- package/dist/list-FPIWJ65T.mjs +83 -0
- package/dist/list-FPIWJ65T.mjs.map +1 -0
- package/dist/list-GN3SAZG2.js +83 -0
- package/dist/list-GN3SAZG2.js.map +1 -0
- package/dist/list-JK36QVS2.js +73 -0
- package/dist/list-JK36QVS2.js.map +1 -0
- package/dist/list-JRWFJU5H.js +81 -0
- package/dist/list-JRWFJU5H.js.map +1 -0
- package/dist/list-KIJ4ILEN.mjs +78 -0
- package/dist/list-KIJ4ILEN.mjs.map +1 -0
- package/dist/list-KQKELE44.mjs +73 -0
- package/dist/list-KQKELE44.mjs.map +1 -0
- package/dist/list-LMMRRFZC.js +77 -0
- package/dist/list-LMMRRFZC.js.map +1 -0
- package/dist/{list-53QTWXGF.mjs → list-N7WIOJ5A.mjs} +29 -68
- package/dist/list-N7WIOJ5A.mjs.map +1 -0
- package/dist/list-RS4QL7NE.mjs +83 -0
- package/dist/list-RS4QL7NE.mjs.map +1 -0
- package/dist/list-SDMJ2GJE.js +81 -0
- package/dist/list-SDMJ2GJE.js.map +1 -0
- package/dist/list-UKGJOVJE.js +49 -0
- package/dist/list-UKGJOVJE.js.map +1 -0
- package/dist/list-UOTJUE2P.js +79 -0
- package/dist/list-UOTJUE2P.js.map +1 -0
- package/dist/list-W2MYF4RU.js +78 -0
- package/dist/list-W2MYF4RU.js.map +1 -0
- package/dist/list-WYYGGV5V.mjs +81 -0
- package/dist/list-WYYGGV5V.mjs.map +1 -0
- package/dist/list-WZ4KHBMF.mjs +73 -0
- package/dist/list-WZ4KHBMF.mjs.map +1 -0
- package/dist/list-XTOWXYB2.js +83 -0
- package/dist/list-XTOWXYB2.js.map +1 -0
- package/dist/list-Z5EEMYRQ.js +78 -0
- package/dist/list-Z5EEMYRQ.js.map +1 -0
- package/dist/list-ZB53NL6Z.mjs +79 -0
- package/dist/list-ZB53NL6Z.mjs.map +1 -0
- package/dist/{login-QWXRNDAM.mjs → login-4AX6AOKI.mjs} +20 -3
- package/dist/login-4AX6AOKI.mjs.map +1 -0
- package/dist/{login-XBFOVP6G.js → login-H3SQDBT7.js} +21 -4
- package/dist/login-H3SQDBT7.js.map +1 -0
- package/dist/observability-sdk/index.d.mts +3 -3
- package/dist/observability-sdk/index.d.ts +3 -3
- package/dist/observability-sdk/index.js +8 -6
- package/dist/observability-sdk/index.js.map +1 -1
- package/dist/observability-sdk/index.mjs +8 -6
- package/dist/observability-sdk/instrumentation/langchain/index.d.mts +1 -1
- package/dist/observability-sdk/instrumentation/langchain/index.d.ts +1 -1
- package/dist/observability-sdk/instrumentation/langchain/index.js +17 -16
- package/dist/observability-sdk/instrumentation/langchain/index.js.map +1 -1
- package/dist/observability-sdk/instrumentation/langchain/index.mjs +3 -2
- package/dist/observability-sdk/instrumentation/langchain/index.mjs.map +1 -1
- package/dist/observability-sdk/setup/node/index.js +6 -5
- package/dist/observability-sdk/setup/node/index.js.map +1 -1
- package/dist/observability-sdk/setup/node/index.mjs +5 -4
- package/dist/pull-64HVVOBC.mjs +23 -0
- package/dist/pull-QIANBELG.js +23 -0
- package/dist/pull-QIANBELG.js.map +1 -0
- package/dist/push-GXLGORLM.mjs +23 -0
- package/dist/push-GXLGORLM.mjs.map +1 -0
- package/dist/push-I3BJSL6N.js +23 -0
- package/dist/push-I3BJSL6N.js.map +1 -0
- package/dist/query-UF2LDBR4.js +158 -0
- package/dist/query-UF2LDBR4.js.map +1 -0
- package/dist/query-ZI7HJSIY.mjs +158 -0
- package/dist/query-ZI7HJSIY.mjs.map +1 -0
- package/dist/records-add-4LX4JHLO.mjs +94 -0
- package/dist/records-add-4LX4JHLO.mjs.map +1 -0
- package/dist/records-add-WTIGBJV4.js +94 -0
- package/dist/records-add-WTIGBJV4.js.map +1 -0
- package/dist/records-delete-IY37NWPN.mjs +42 -0
- package/dist/records-delete-IY37NWPN.mjs.map +1 -0
- package/dist/records-delete-MLOG4DM4.js +42 -0
- package/dist/records-delete-MLOG4DM4.js.map +1 -0
- package/dist/records-list-EP6OCFH5.js +85 -0
- package/dist/records-list-EP6OCFH5.js.map +1 -0
- package/dist/records-list-RIDOAE2V.mjs +85 -0
- package/dist/records-list-RIDOAE2V.mjs.map +1 -0
- package/dist/records-update-5QZBDYUJ.js +49 -0
- package/dist/records-update-5QZBDYUJ.js.map +1 -0
- package/dist/records-update-JINO26IA.mjs +49 -0
- package/dist/records-update-JINO26IA.mjs.map +1 -0
- package/dist/{remove-Q573N52S.mjs → remove-HLVK7VUB.mjs} +10 -7
- package/dist/{remove-Q573N52S.mjs.map → remove-HLVK7VUB.mjs.map} +1 -1
- package/dist/{remove-KIZPGE7J.js → remove-LDX2BSUH.js} +12 -9
- package/dist/remove-LDX2BSUH.js.map +1 -0
- package/dist/rename-FP7X3GJJ.mjs +38 -0
- package/dist/rename-FP7X3GJJ.mjs.map +1 -0
- package/dist/rename-PUSZYLZ7.js +38 -0
- package/dist/rename-PUSZYLZ7.js.map +1 -0
- package/dist/restore-5L5MLISA.mjs +63 -0
- package/dist/restore-5L5MLISA.mjs.map +1 -0
- package/dist/restore-OXNQMRMJ.js +63 -0
- package/dist/restore-OXNQMRMJ.js.map +1 -0
- package/dist/run-AIGCDUDF.mjs +143 -0
- package/dist/run-AIGCDUDF.mjs.map +1 -0
- package/dist/run-CKZ6VNKK.js +143 -0
- package/dist/run-CKZ6VNKK.js.map +1 -0
- package/dist/run-FE4QMJO5.mjs +67 -0
- package/dist/run-FE4QMJO5.mjs.map +1 -0
- package/dist/run-FJDOSV5E.js +128 -0
- package/dist/run-FJDOSV5E.js.map +1 -0
- package/dist/run-GUSPWLCC.mjs +128 -0
- package/dist/run-GUSPWLCC.mjs.map +1 -0
- package/dist/run-KNCB7OEA.js +86 -0
- package/dist/run-KNCB7OEA.js.map +1 -0
- package/dist/run-KZKAHFBR.js +67 -0
- package/dist/run-KZKAHFBR.js.map +1 -0
- package/dist/run-QW2HL4EK.mjs +86 -0
- package/dist/run-QW2HL4EK.mjs.map +1 -0
- package/dist/run-UZVJBWGG.js +130 -0
- package/dist/run-UZVJBWGG.js.map +1 -0
- package/dist/run-WZ4CSMTP.mjs +130 -0
- package/dist/run-WZ4CSMTP.mjs.map +1 -0
- package/dist/search-5B32YGSP.mjs +112 -0
- package/dist/search-5B32YGSP.mjs.map +1 -0
- package/dist/search-J5GDX5JK.js +112 -0
- package/dist/search-J5GDX5JK.js.map +1 -0
- package/dist/set-2DYJNVS5.mjs +62 -0
- package/dist/set-2DYJNVS5.mjs.map +1 -0
- package/dist/set-S5L5QSYZ.js +62 -0
- package/dist/set-S5L5QSYZ.js.map +1 -0
- package/dist/status-OIXOYFH4.mjs +101 -0
- package/dist/status-OIXOYFH4.mjs.map +1 -0
- package/dist/status-Q2PEMYJT.mjs +70 -0
- package/dist/status-Q2PEMYJT.mjs.map +1 -0
- package/dist/status-QRK56VLF.js +70 -0
- package/dist/status-QRK56VLF.js.map +1 -0
- package/dist/status-T7NOWM4X.js +101 -0
- package/dist/status-T7NOWM4X.js.map +1 -0
- package/dist/{sync-YPJIIHKC.js → sync-IDSAYUGO.js} +16 -13
- package/dist/sync-IDSAYUGO.js.map +1 -0
- package/dist/{sync-TM7JZNNW.mjs → sync-LA27E4UB.mjs} +12 -9
- package/dist/{sync-TM7JZNNW.mjs.map → sync-LA27E4UB.mjs.map} +1 -1
- package/dist/{types-DQiByKdr.d.ts → types-B4TSe7JR.d.ts} +6546 -2251
- package/dist/{types-CoHIwxng.d.mts → types-CWY5yQki.d.mts} +6546 -2251
- package/dist/update-3B43ZW4X.mjs +53 -0
- package/dist/update-3B43ZW4X.mjs.map +1 -0
- package/dist/update-3C6Y2Y2P.js +53 -0
- package/dist/update-3C6Y2Y2P.js.map +1 -0
- package/dist/update-4D7R3VYO.js +75 -0
- package/dist/update-4D7R3VYO.js.map +1 -0
- package/dist/update-4FC4YPW7.mjs +71 -0
- package/dist/update-4FC4YPW7.mjs.map +1 -0
- package/dist/update-4YMVL4UT.mjs +74 -0
- package/dist/update-4YMVL4UT.mjs.map +1 -0
- package/dist/update-7ZEJO5SB.js +74 -0
- package/dist/update-7ZEJO5SB.js.map +1 -0
- package/dist/update-BADZ6GRL.js +66 -0
- package/dist/update-BADZ6GRL.js.map +1 -0
- package/dist/update-DLFJBCI2.js +68 -0
- package/dist/update-DLFJBCI2.js.map +1 -0
- package/dist/update-EB7WMPOP.js +53 -0
- package/dist/update-EB7WMPOP.js.map +1 -0
- package/dist/update-EG6BZOLC.mjs +51 -0
- package/dist/update-EG6BZOLC.mjs.map +1 -0
- package/dist/update-FKL5Y73R.js +69 -0
- package/dist/update-FKL5Y73R.js.map +1 -0
- package/dist/update-GWTLCIAT.mjs +69 -0
- package/dist/update-GWTLCIAT.mjs.map +1 -0
- package/dist/update-MFZOMTRJ.mjs +51 -0
- package/dist/update-MFZOMTRJ.mjs.map +1 -0
- package/dist/update-PSY46JJD.mjs +68 -0
- package/dist/update-PSY46JJD.mjs.map +1 -0
- package/dist/update-PXCMJWY3.mjs +53 -0
- package/dist/update-PXCMJWY3.mjs.map +1 -0
- package/dist/update-R72C65QF.mjs +66 -0
- package/dist/update-R72C65QF.mjs.map +1 -0
- package/dist/update-RCZ47II5.js +52 -0
- package/dist/update-RCZ47II5.js.map +1 -0
- package/dist/update-RPD2OXXQ.js +51 -0
- package/dist/update-RPD2OXXQ.js.map +1 -0
- package/dist/update-VLY6LJVM.js +51 -0
- package/dist/update-VLY6LJVM.js.map +1 -0
- package/dist/update-WKM6XI4V.mjs +75 -0
- package/dist/update-WKM6XI4V.mjs.map +1 -0
- package/dist/update-WQK5Q34V.mjs +52 -0
- package/dist/update-WQK5Q34V.mjs.map +1 -0
- package/dist/update-YMWBN55I.js +71 -0
- package/dist/update-YMWBN55I.js.map +1 -0
- package/dist/upload-6LF5GVLP.js +73 -0
- package/dist/upload-6LF5GVLP.js.map +1 -0
- package/dist/upload-QWAITH5R.mjs +73 -0
- package/dist/upload-QWAITH5R.mjs.map +1 -0
- package/dist/versions-HIYVXIKM.js +82 -0
- package/dist/versions-HIYVXIKM.js.map +1 -0
- package/dist/versions-JPUSBSTF.mjs +82 -0
- package/dist/versions-JPUSBSTF.mjs.map +1 -0
- package/package.json +1 -1
- package/dist/add-FJ2SMVQE.js.map +0 -1
- package/dist/chunk-5LYWRKDF.js.map +0 -1
- package/dist/chunk-CWXQ53NE.mjs.map +0 -1
- package/dist/chunk-JVIQJFUE.mjs.map +0 -1
- package/dist/chunk-OLI6GF46.js.map +0 -1
- package/dist/chunk-PIF2RJWZ.js.map +0 -1
- package/dist/chunk-WASZSPD7.mjs.map +0 -1
- package/dist/chunk-ZLCERT3X.js.map +0 -1
- package/dist/list-53QTWXGF.mjs.map +0 -1
- package/dist/list-LBDUK454.js +0 -148
- package/dist/list-LBDUK454.js.map +0 -1
- package/dist/login-QWXRNDAM.mjs.map +0 -1
- package/dist/login-XBFOVP6G.js.map +0 -1
- package/dist/pull-3B3CBSSM.js +0 -20
- package/dist/pull-3B3CBSSM.js.map +0 -1
- package/dist/pull-WK6P7KS2.mjs +0 -20
- package/dist/push-G457CXVG.mjs +0 -20
- package/dist/push-GKFQL6GO.js +0 -20
- package/dist/push-GKFQL6GO.js.map +0 -1
- package/dist/remove-KIZPGE7J.js.map +0 -1
- package/dist/sync-YPJIIHKC.js.map +0 -1
- /package/dist/{chunk-L5Z7F7MG.mjs.map → chunk-43STSE3B.mjs.map} +0 -0
- /package/dist/{chunk-A7CF6ZGH.mjs.map → chunk-ESGWN42J.mjs.map} +0 -0
- /package/dist/{chunk-FMYG6IOZ.mjs.map → chunk-FARZEN6T.mjs.map} +0 -0
- /package/dist/{chunk-5M66X6SZ.mjs.map → chunk-LULJYN3P.mjs.map} +0 -0
- /package/dist/{pull-WK6P7KS2.mjs.map → create-ARJEJDYU.mjs.map} +0 -0
- /package/dist/{push-G457CXVG.mjs.map → pull-64HVVOBC.mjs.map} +0 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
var _chunkZ6MQQXMSjs = require('./chunk-Z6MQQXMS.js');
|
|
5
|
+
require('./chunk-F6E4XQQU.js');
|
|
6
|
+
require('./chunk-AK4YCKWK.js');
|
|
7
|
+
require('./chunk-2VVANTLB.js');
|
|
8
|
+
require('./chunk-2BJPLPLU.js');
|
|
9
|
+
require('./chunk-ZZL6VZZU.js');
|
|
10
|
+
require('./chunk-H6F5OGSL.js');
|
|
11
|
+
require('./chunk-DUG35J5N.js');
|
|
12
|
+
require('./chunk-D2FHOR76.js');
|
|
13
|
+
require('./chunk-OAAMDWSK.js');
|
|
14
|
+
require('./chunk-DB6OJGP4.js');
|
|
15
|
+
require('./chunk-BYG3QS2X.js');
|
|
16
|
+
require('./chunk-WAAQLJ67.js');
|
|
17
|
+
require('./chunk-AZHZ4NB4.js');
|
|
18
|
+
require('./chunk-OHM7JUMR.js');
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
exports.pushCommand = _chunkZ6MQQXMSjs.pushCommand; exports.pushPrompts = _chunkZ6MQQXMSjs.pushPrompts;
|
|
23
|
+
//# sourceMappingURL=push-I3BJSL6N.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/langwatch/langwatch/typescript-sdk/dist/push-I3BJSL6N.js"],"names":[],"mappings":"AAAA;AACE;AACA;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACA;AACF,uGAAC","file":"/home/runner/work/langwatch/langwatch/typescript-sdk/dist/push-I3BJSL6N.js"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
2
|
+
|
|
3
|
+
var _chunkF6E4XQQUjs = require('./chunk-F6E4XQQU.js');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
var _chunk2BJPLPLUjs = require('./chunk-2BJPLPLU.js');
|
|
7
|
+
require('./chunk-D2FHOR76.js');
|
|
8
|
+
require('./chunk-OHM7JUMR.js');
|
|
9
|
+
|
|
10
|
+
// src/cli/commands/analytics/query.ts
|
|
11
|
+
var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
|
|
12
|
+
var _ora = require('ora'); var _ora2 = _interopRequireDefault(_ora);
|
|
13
|
+
|
|
14
|
+
// src/client-sdk/services/analytics/analytics-api.service.ts
|
|
15
|
+
var AnalyticsApiError = class extends Error {
|
|
16
|
+
constructor(message, operation, originalError) {
|
|
17
|
+
super(message);
|
|
18
|
+
this.operation = operation;
|
|
19
|
+
this.originalError = originalError;
|
|
20
|
+
this.name = "AnalyticsApiError";
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
var AnalyticsApiService = class {
|
|
24
|
+
constructor(config) {
|
|
25
|
+
var _a;
|
|
26
|
+
this.apiClient = (_a = config == null ? void 0 : config.langwatchApiClient) != null ? _a : _chunk2BJPLPLUjs.createLangWatchApiClient.call(void 0, );
|
|
27
|
+
}
|
|
28
|
+
handleApiError(operation, error) {
|
|
29
|
+
var _a;
|
|
30
|
+
const errorMessage = typeof error === "string" ? error : error != null && typeof error === "object" && "error" in error && error.error != null ? typeof error.error === "string" ? error.error : (_a = error.error.message) != null ? _a : JSON.stringify(error.error) : error instanceof Error ? error.message : "Unknown error occurred";
|
|
31
|
+
throw new AnalyticsApiError(
|
|
32
|
+
`Failed to ${operation}: ${errorMessage}`,
|
|
33
|
+
operation,
|
|
34
|
+
error
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
async timeseries(params) {
|
|
38
|
+
const { data, error } = await this.apiClient.POST(
|
|
39
|
+
"/api/analytics/timeseries",
|
|
40
|
+
{ body: params }
|
|
41
|
+
);
|
|
42
|
+
if (error) this.handleApiError("query analytics", error);
|
|
43
|
+
return data;
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
// src/cli/commands/analytics/query.ts
|
|
48
|
+
var METRIC_PRESETS = {
|
|
49
|
+
"trace-count": { metric: "metadata.trace_id", aggregation: "cardinality" },
|
|
50
|
+
"user-count": { metric: "metadata.user_id", aggregation: "cardinality" },
|
|
51
|
+
"total-cost": { metric: "performance.total_cost", aggregation: "sum" },
|
|
52
|
+
"avg-latency": { metric: "performance.completion_time", aggregation: "avg" },
|
|
53
|
+
"p95-latency": { metric: "performance.completion_time", aggregation: "p95" },
|
|
54
|
+
"total-tokens": { metric: "performance.total_tokens", aggregation: "sum" },
|
|
55
|
+
"avg-tokens": { metric: "performance.total_tokens", aggregation: "avg" },
|
|
56
|
+
"eval-pass-rate": { metric: "evaluations.evaluation_pass_rate", aggregation: "avg" }
|
|
57
|
+
};
|
|
58
|
+
var queryAnalyticsCommand = async (options) => {
|
|
59
|
+
var _a, _b, _c;
|
|
60
|
+
_chunkF6E4XQQUjs.checkApiKey.call(void 0, );
|
|
61
|
+
const service = new AnalyticsApiService();
|
|
62
|
+
let metric;
|
|
63
|
+
let aggregation;
|
|
64
|
+
if (options.metric && options.metric in METRIC_PRESETS) {
|
|
65
|
+
const preset = METRIC_PRESETS[options.metric];
|
|
66
|
+
metric = preset.metric;
|
|
67
|
+
aggregation = (_a = options.aggregation) != null ? _a : preset.aggregation;
|
|
68
|
+
} else {
|
|
69
|
+
metric = (_b = options.metric) != null ? _b : "metadata.trace_id";
|
|
70
|
+
aggregation = (_c = options.aggregation) != null ? _c : "cardinality";
|
|
71
|
+
}
|
|
72
|
+
const now = Date.now();
|
|
73
|
+
const sevenDaysAgo = now - 7 * 24 * 60 * 60 * 1e3;
|
|
74
|
+
const startDate = options.startDate ? new Date(options.startDate).getTime() : sevenDaysAgo;
|
|
75
|
+
const endDate = options.endDate ? new Date(options.endDate).getTime() : now;
|
|
76
|
+
const spinner = _ora2.default.call(void 0, `Querying ${metric} (${aggregation})...`).start();
|
|
77
|
+
try {
|
|
78
|
+
const result = await service.timeseries({
|
|
79
|
+
startDate,
|
|
80
|
+
endDate,
|
|
81
|
+
series: [
|
|
82
|
+
{
|
|
83
|
+
metric,
|
|
84
|
+
aggregation
|
|
85
|
+
}
|
|
86
|
+
],
|
|
87
|
+
groupBy: options.groupBy,
|
|
88
|
+
timeScale: options.timeScale === "full" ? "full" : options.timeScale ? Number(options.timeScale) : void 0,
|
|
89
|
+
timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone
|
|
90
|
+
});
|
|
91
|
+
spinner.succeed("Analytics query complete");
|
|
92
|
+
if (options.format === "json") {
|
|
93
|
+
console.log(JSON.stringify(result, null, 2));
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
console.log();
|
|
97
|
+
console.log(_chalk2.default.bold("Current Period:"));
|
|
98
|
+
if (result.currentPeriod.length === 0) {
|
|
99
|
+
console.log(_chalk2.default.gray(" No data for the current period."));
|
|
100
|
+
} else {
|
|
101
|
+
for (const dataPoint of result.currentPeriod) {
|
|
102
|
+
const entries = Object.entries(dataPoint).filter(
|
|
103
|
+
([key]) => key !== "date"
|
|
104
|
+
);
|
|
105
|
+
const dateStr = dataPoint.date ? new Date(dataPoint.date).toLocaleDateString() : "\u2014";
|
|
106
|
+
if (entries.length === 0) {
|
|
107
|
+
console.log(` ${_chalk2.default.gray(dateStr)}: ${_chalk2.default.gray("no data")}`);
|
|
108
|
+
} else {
|
|
109
|
+
const values = entries.map(([key, value]) => `${_chalk2.default.cyan(key)}: ${formatValue(value)}`).join(", ");
|
|
110
|
+
console.log(` ${_chalk2.default.gray(dateStr)}: ${values}`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (result.previousPeriod.length > 0) {
|
|
115
|
+
console.log();
|
|
116
|
+
console.log(_chalk2.default.bold("Previous Period:"));
|
|
117
|
+
for (const dataPoint of result.previousPeriod) {
|
|
118
|
+
const entries = Object.entries(dataPoint).filter(
|
|
119
|
+
([key]) => key !== "date"
|
|
120
|
+
);
|
|
121
|
+
const dateStr = dataPoint.date ? new Date(dataPoint.date).toLocaleDateString() : "\u2014";
|
|
122
|
+
if (entries.length > 0) {
|
|
123
|
+
const values = entries.map(([key, value]) => `${_chalk2.default.cyan(key)}: ${formatValue(value)}`).join(", ");
|
|
124
|
+
console.log(` ${_chalk2.default.gray(dateStr)}: ${values}`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
console.log();
|
|
129
|
+
console.log(_chalk2.default.gray("Available presets: " + Object.keys(METRIC_PRESETS).join(", ")));
|
|
130
|
+
console.log(
|
|
131
|
+
_chalk2.default.gray(
|
|
132
|
+
`Use ${_chalk2.default.cyan("langwatch analytics query --metric <preset> -f json")} for raw data`
|
|
133
|
+
)
|
|
134
|
+
);
|
|
135
|
+
} catch (error) {
|
|
136
|
+
spinner.fail();
|
|
137
|
+
if (error instanceof AnalyticsApiError) {
|
|
138
|
+
console.error(_chalk2.default.red(`Error: ${error.message}`));
|
|
139
|
+
} else {
|
|
140
|
+
console.error(
|
|
141
|
+
_chalk2.default.red(
|
|
142
|
+
`Error querying analytics: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
143
|
+
)
|
|
144
|
+
);
|
|
145
|
+
}
|
|
146
|
+
process.exit(1);
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
function formatValue(value) {
|
|
150
|
+
if (typeof value === "number") {
|
|
151
|
+
return value % 1 === 0 ? value.toLocaleString() : value.toFixed(4);
|
|
152
|
+
}
|
|
153
|
+
return String(value);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
exports.queryAnalyticsCommand = queryAnalyticsCommand;
|
|
158
|
+
//# sourceMappingURL=query-UF2LDBR4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/langwatch/langwatch/typescript-sdk/dist/query-UF2LDBR4.js","../src/cli/commands/analytics/query.ts","../src/client-sdk/services/analytics/analytics-api.service.ts"],"names":[],"mappings":"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","file":"/home/runner/work/langwatch/langwatch/typescript-sdk/dist/query-UF2LDBR4.js","sourcesContent":[null,"import chalk from \"chalk\";\nimport ora from \"ora\";\nimport {\n AnalyticsApiService,\n AnalyticsApiError,\n} from \"@/client-sdk/services/analytics/analytics-api.service\";\nimport { checkApiKey } from \"../../utils/apiKey\";\n\nconst METRIC_PRESETS: Record<string, { metric: string; aggregation: string }> = {\n \"trace-count\": { metric: \"metadata.trace_id\", aggregation: \"cardinality\" },\n \"user-count\": { metric: \"metadata.user_id\", aggregation: \"cardinality\" },\n \"total-cost\": { metric: \"performance.total_cost\", aggregation: \"sum\" },\n \"avg-latency\": { metric: \"performance.completion_time\", aggregation: \"avg\" },\n \"p95-latency\": { metric: \"performance.completion_time\", aggregation: \"p95\" },\n \"total-tokens\": { metric: \"performance.total_tokens\", aggregation: \"sum\" },\n \"avg-tokens\": { metric: \"performance.total_tokens\", aggregation: \"avg\" },\n \"eval-pass-rate\": { metric: \"evaluations.evaluation_pass_rate\", aggregation: \"avg\" },\n};\n\nexport const queryAnalyticsCommand = async (options: {\n metric?: string;\n aggregation?: string;\n startDate?: string;\n endDate?: string;\n groupBy?: string;\n timeScale?: string;\n format?: string;\n}): Promise<void> => {\n checkApiKey();\n\n const service = new AnalyticsApiService();\n\n // Resolve metric preset or use raw metric/aggregation\n let metric: string;\n let aggregation: string;\n\n if (options.metric && options.metric in METRIC_PRESETS) {\n const preset = METRIC_PRESETS[options.metric]!;\n metric = preset.metric;\n aggregation = options.aggregation ?? preset.aggregation;\n } else {\n metric = options.metric ?? \"metadata.trace_id\";\n aggregation = options.aggregation ?? \"cardinality\";\n }\n\n const now = Date.now();\n const sevenDaysAgo = now - 7 * 24 * 60 * 60 * 1000;\n\n const startDate = options.startDate\n ? new Date(options.startDate).getTime()\n : sevenDaysAgo;\n const endDate = options.endDate\n ? new Date(options.endDate).getTime()\n : now;\n\n const spinner = ora(`Querying ${metric} (${aggregation})...`).start();\n\n try {\n const result = await service.timeseries({\n startDate,\n endDate,\n series: [\n {\n metric: metric as \"metadata.trace_id\",\n aggregation: aggregation as \"cardinality\",\n },\n ],\n groupBy: options.groupBy as \"metadata.model\" | undefined,\n timeScale: options.timeScale === \"full\" ? \"full\" : options.timeScale ? Number(options.timeScale) : undefined,\n timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n });\n\n spinner.succeed(\"Analytics query complete\");\n\n if (options.format === \"json\") {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n\n console.log();\n console.log(chalk.bold(\"Current Period:\"));\n\n if (result.currentPeriod.length === 0) {\n console.log(chalk.gray(\" No data for the current period.\"));\n } else {\n for (const dataPoint of result.currentPeriod) {\n const entries = Object.entries(dataPoint).filter(\n ([key]) => key !== \"date\",\n );\n const dateStr = dataPoint.date\n ? new Date(dataPoint.date as number).toLocaleDateString()\n : \"—\";\n\n if (entries.length === 0) {\n console.log(` ${chalk.gray(dateStr)}: ${chalk.gray(\"no data\")}`);\n } else {\n const values = entries\n .map(([key, value]) => `${chalk.cyan(key)}: ${formatValue(value)}`)\n .join(\", \");\n console.log(` ${chalk.gray(dateStr)}: ${values}`);\n }\n }\n }\n\n if (result.previousPeriod.length > 0) {\n console.log();\n console.log(chalk.bold(\"Previous Period:\"));\n for (const dataPoint of result.previousPeriod) {\n const entries = Object.entries(dataPoint).filter(\n ([key]) => key !== \"date\",\n );\n const dateStr = dataPoint.date\n ? new Date(dataPoint.date as number).toLocaleDateString()\n : \"—\";\n\n if (entries.length > 0) {\n const values = entries\n .map(([key, value]) => `${chalk.cyan(key)}: ${formatValue(value)}`)\n .join(\", \");\n console.log(` ${chalk.gray(dateStr)}: ${values}`);\n }\n }\n }\n\n console.log();\n console.log(chalk.gray(\"Available presets: \" + Object.keys(METRIC_PRESETS).join(\", \")));\n console.log(\n chalk.gray(\n `Use ${chalk.cyan(\"langwatch analytics query --metric <preset> -f json\")} for raw data`,\n ),\n );\n } catch (error) {\n spinner.fail();\n if (error instanceof AnalyticsApiError) {\n console.error(chalk.red(`Error: ${error.message}`));\n } else {\n console.error(\n chalk.red(\n `Error querying analytics: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n ),\n );\n }\n process.exit(1);\n }\n};\n\nfunction formatValue(value: unknown): string {\n if (typeof value === \"number\") {\n return value % 1 === 0 ? value.toLocaleString() : value.toFixed(4);\n }\n return String(value);\n}\n","import type { paths } from \"@/internal/generated/openapi/api-client\";\nimport {\n createLangWatchApiClient,\n type LangwatchApiClient,\n} from \"@/internal/api/client\";\nimport { type InternalConfig } from \"@/client-sdk/types\";\n\nexport type AnalyticsTimeseriesBody = NonNullable<\n paths[\"/api/analytics/timeseries\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n\nexport type AnalyticsTimeseriesResponse =\n paths[\"/api/analytics/timeseries\"][\"post\"][\"responses\"][\"200\"][\"content\"][\"application/json\"];\n\nexport class AnalyticsApiError extends Error {\n constructor(\n message: string,\n public readonly operation: string,\n public readonly originalError?: unknown,\n ) {\n super(message);\n this.name = \"AnalyticsApiError\";\n }\n}\n\nexport class AnalyticsApiService {\n private readonly apiClient: LangwatchApiClient;\n\n constructor(config?: Pick<InternalConfig, \"langwatchApiClient\">) {\n this.apiClient = config?.langwatchApiClient ?? createLangWatchApiClient();\n }\n\n private handleApiError(operation: string, error: unknown): never {\n const errorMessage =\n typeof error === \"string\"\n ? error\n : error != null &&\n typeof error === \"object\" &&\n \"error\" in error &&\n error.error != null\n ? typeof error.error === \"string\"\n ? error.error\n : (error.error as { message?: string }).message ??\n JSON.stringify(error.error)\n : error instanceof Error\n ? error.message\n : \"Unknown error occurred\";\n\n throw new AnalyticsApiError(\n `Failed to ${operation}: ${errorMessage}`,\n operation,\n error,\n );\n }\n\n async timeseries(params: AnalyticsTimeseriesBody): Promise<AnalyticsTimeseriesResponse> {\n const { data, error } = await this.apiClient.POST(\n \"/api/analytics/timeseries\",\n { body: params },\n );\n if (error) this.handleApiError(\"query analytics\", error);\n return data;\n }\n}\n"]}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import {
|
|
2
|
+
checkApiKey
|
|
3
|
+
} from "./chunk-DHJKJVY7.mjs";
|
|
4
|
+
import {
|
|
5
|
+
createLangWatchApiClient
|
|
6
|
+
} from "./chunk-QH3WUSKF.mjs";
|
|
7
|
+
import "./chunk-LN33ZL4Z.mjs";
|
|
8
|
+
import "./chunk-URTD2WOC.mjs";
|
|
9
|
+
|
|
10
|
+
// src/cli/commands/analytics/query.ts
|
|
11
|
+
import chalk from "chalk";
|
|
12
|
+
import ora from "ora";
|
|
13
|
+
|
|
14
|
+
// src/client-sdk/services/analytics/analytics-api.service.ts
|
|
15
|
+
var AnalyticsApiError = class extends Error {
|
|
16
|
+
constructor(message, operation, originalError) {
|
|
17
|
+
super(message);
|
|
18
|
+
this.operation = operation;
|
|
19
|
+
this.originalError = originalError;
|
|
20
|
+
this.name = "AnalyticsApiError";
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
var AnalyticsApiService = class {
|
|
24
|
+
constructor(config) {
|
|
25
|
+
var _a;
|
|
26
|
+
this.apiClient = (_a = config == null ? void 0 : config.langwatchApiClient) != null ? _a : createLangWatchApiClient();
|
|
27
|
+
}
|
|
28
|
+
handleApiError(operation, error) {
|
|
29
|
+
var _a;
|
|
30
|
+
const errorMessage = typeof error === "string" ? error : error != null && typeof error === "object" && "error" in error && error.error != null ? typeof error.error === "string" ? error.error : (_a = error.error.message) != null ? _a : JSON.stringify(error.error) : error instanceof Error ? error.message : "Unknown error occurred";
|
|
31
|
+
throw new AnalyticsApiError(
|
|
32
|
+
`Failed to ${operation}: ${errorMessage}`,
|
|
33
|
+
operation,
|
|
34
|
+
error
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
async timeseries(params) {
|
|
38
|
+
const { data, error } = await this.apiClient.POST(
|
|
39
|
+
"/api/analytics/timeseries",
|
|
40
|
+
{ body: params }
|
|
41
|
+
);
|
|
42
|
+
if (error) this.handleApiError("query analytics", error);
|
|
43
|
+
return data;
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
// src/cli/commands/analytics/query.ts
|
|
48
|
+
var METRIC_PRESETS = {
|
|
49
|
+
"trace-count": { metric: "metadata.trace_id", aggregation: "cardinality" },
|
|
50
|
+
"user-count": { metric: "metadata.user_id", aggregation: "cardinality" },
|
|
51
|
+
"total-cost": { metric: "performance.total_cost", aggregation: "sum" },
|
|
52
|
+
"avg-latency": { metric: "performance.completion_time", aggregation: "avg" },
|
|
53
|
+
"p95-latency": { metric: "performance.completion_time", aggregation: "p95" },
|
|
54
|
+
"total-tokens": { metric: "performance.total_tokens", aggregation: "sum" },
|
|
55
|
+
"avg-tokens": { metric: "performance.total_tokens", aggregation: "avg" },
|
|
56
|
+
"eval-pass-rate": { metric: "evaluations.evaluation_pass_rate", aggregation: "avg" }
|
|
57
|
+
};
|
|
58
|
+
var queryAnalyticsCommand = async (options) => {
|
|
59
|
+
var _a, _b, _c;
|
|
60
|
+
checkApiKey();
|
|
61
|
+
const service = new AnalyticsApiService();
|
|
62
|
+
let metric;
|
|
63
|
+
let aggregation;
|
|
64
|
+
if (options.metric && options.metric in METRIC_PRESETS) {
|
|
65
|
+
const preset = METRIC_PRESETS[options.metric];
|
|
66
|
+
metric = preset.metric;
|
|
67
|
+
aggregation = (_a = options.aggregation) != null ? _a : preset.aggregation;
|
|
68
|
+
} else {
|
|
69
|
+
metric = (_b = options.metric) != null ? _b : "metadata.trace_id";
|
|
70
|
+
aggregation = (_c = options.aggregation) != null ? _c : "cardinality";
|
|
71
|
+
}
|
|
72
|
+
const now = Date.now();
|
|
73
|
+
const sevenDaysAgo = now - 7 * 24 * 60 * 60 * 1e3;
|
|
74
|
+
const startDate = options.startDate ? new Date(options.startDate).getTime() : sevenDaysAgo;
|
|
75
|
+
const endDate = options.endDate ? new Date(options.endDate).getTime() : now;
|
|
76
|
+
const spinner = ora(`Querying ${metric} (${aggregation})...`).start();
|
|
77
|
+
try {
|
|
78
|
+
const result = await service.timeseries({
|
|
79
|
+
startDate,
|
|
80
|
+
endDate,
|
|
81
|
+
series: [
|
|
82
|
+
{
|
|
83
|
+
metric,
|
|
84
|
+
aggregation
|
|
85
|
+
}
|
|
86
|
+
],
|
|
87
|
+
groupBy: options.groupBy,
|
|
88
|
+
timeScale: options.timeScale === "full" ? "full" : options.timeScale ? Number(options.timeScale) : void 0,
|
|
89
|
+
timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone
|
|
90
|
+
});
|
|
91
|
+
spinner.succeed("Analytics query complete");
|
|
92
|
+
if (options.format === "json") {
|
|
93
|
+
console.log(JSON.stringify(result, null, 2));
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
console.log();
|
|
97
|
+
console.log(chalk.bold("Current Period:"));
|
|
98
|
+
if (result.currentPeriod.length === 0) {
|
|
99
|
+
console.log(chalk.gray(" No data for the current period."));
|
|
100
|
+
} else {
|
|
101
|
+
for (const dataPoint of result.currentPeriod) {
|
|
102
|
+
const entries = Object.entries(dataPoint).filter(
|
|
103
|
+
([key]) => key !== "date"
|
|
104
|
+
);
|
|
105
|
+
const dateStr = dataPoint.date ? new Date(dataPoint.date).toLocaleDateString() : "\u2014";
|
|
106
|
+
if (entries.length === 0) {
|
|
107
|
+
console.log(` ${chalk.gray(dateStr)}: ${chalk.gray("no data")}`);
|
|
108
|
+
} else {
|
|
109
|
+
const values = entries.map(([key, value]) => `${chalk.cyan(key)}: ${formatValue(value)}`).join(", ");
|
|
110
|
+
console.log(` ${chalk.gray(dateStr)}: ${values}`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (result.previousPeriod.length > 0) {
|
|
115
|
+
console.log();
|
|
116
|
+
console.log(chalk.bold("Previous Period:"));
|
|
117
|
+
for (const dataPoint of result.previousPeriod) {
|
|
118
|
+
const entries = Object.entries(dataPoint).filter(
|
|
119
|
+
([key]) => key !== "date"
|
|
120
|
+
);
|
|
121
|
+
const dateStr = dataPoint.date ? new Date(dataPoint.date).toLocaleDateString() : "\u2014";
|
|
122
|
+
if (entries.length > 0) {
|
|
123
|
+
const values = entries.map(([key, value]) => `${chalk.cyan(key)}: ${formatValue(value)}`).join(", ");
|
|
124
|
+
console.log(` ${chalk.gray(dateStr)}: ${values}`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
console.log();
|
|
129
|
+
console.log(chalk.gray("Available presets: " + Object.keys(METRIC_PRESETS).join(", ")));
|
|
130
|
+
console.log(
|
|
131
|
+
chalk.gray(
|
|
132
|
+
`Use ${chalk.cyan("langwatch analytics query --metric <preset> -f json")} for raw data`
|
|
133
|
+
)
|
|
134
|
+
);
|
|
135
|
+
} catch (error) {
|
|
136
|
+
spinner.fail();
|
|
137
|
+
if (error instanceof AnalyticsApiError) {
|
|
138
|
+
console.error(chalk.red(`Error: ${error.message}`));
|
|
139
|
+
} else {
|
|
140
|
+
console.error(
|
|
141
|
+
chalk.red(
|
|
142
|
+
`Error querying analytics: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
143
|
+
)
|
|
144
|
+
);
|
|
145
|
+
}
|
|
146
|
+
process.exit(1);
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
function formatValue(value) {
|
|
150
|
+
if (typeof value === "number") {
|
|
151
|
+
return value % 1 === 0 ? value.toLocaleString() : value.toFixed(4);
|
|
152
|
+
}
|
|
153
|
+
return String(value);
|
|
154
|
+
}
|
|
155
|
+
export {
|
|
156
|
+
queryAnalyticsCommand
|
|
157
|
+
};
|
|
158
|
+
//# sourceMappingURL=query-ZI7HJSIY.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/commands/analytics/query.ts","../src/client-sdk/services/analytics/analytics-api.service.ts"],"sourcesContent":["import chalk from \"chalk\";\nimport ora from \"ora\";\nimport {\n AnalyticsApiService,\n AnalyticsApiError,\n} from \"@/client-sdk/services/analytics/analytics-api.service\";\nimport { checkApiKey } from \"../../utils/apiKey\";\n\nconst METRIC_PRESETS: Record<string, { metric: string; aggregation: string }> = {\n \"trace-count\": { metric: \"metadata.trace_id\", aggregation: \"cardinality\" },\n \"user-count\": { metric: \"metadata.user_id\", aggregation: \"cardinality\" },\n \"total-cost\": { metric: \"performance.total_cost\", aggregation: \"sum\" },\n \"avg-latency\": { metric: \"performance.completion_time\", aggregation: \"avg\" },\n \"p95-latency\": { metric: \"performance.completion_time\", aggregation: \"p95\" },\n \"total-tokens\": { metric: \"performance.total_tokens\", aggregation: \"sum\" },\n \"avg-tokens\": { metric: \"performance.total_tokens\", aggregation: \"avg\" },\n \"eval-pass-rate\": { metric: \"evaluations.evaluation_pass_rate\", aggregation: \"avg\" },\n};\n\nexport const queryAnalyticsCommand = async (options: {\n metric?: string;\n aggregation?: string;\n startDate?: string;\n endDate?: string;\n groupBy?: string;\n timeScale?: string;\n format?: string;\n}): Promise<void> => {\n checkApiKey();\n\n const service = new AnalyticsApiService();\n\n // Resolve metric preset or use raw metric/aggregation\n let metric: string;\n let aggregation: string;\n\n if (options.metric && options.metric in METRIC_PRESETS) {\n const preset = METRIC_PRESETS[options.metric]!;\n metric = preset.metric;\n aggregation = options.aggregation ?? preset.aggregation;\n } else {\n metric = options.metric ?? \"metadata.trace_id\";\n aggregation = options.aggregation ?? \"cardinality\";\n }\n\n const now = Date.now();\n const sevenDaysAgo = now - 7 * 24 * 60 * 60 * 1000;\n\n const startDate = options.startDate\n ? new Date(options.startDate).getTime()\n : sevenDaysAgo;\n const endDate = options.endDate\n ? new Date(options.endDate).getTime()\n : now;\n\n const spinner = ora(`Querying ${metric} (${aggregation})...`).start();\n\n try {\n const result = await service.timeseries({\n startDate,\n endDate,\n series: [\n {\n metric: metric as \"metadata.trace_id\",\n aggregation: aggregation as \"cardinality\",\n },\n ],\n groupBy: options.groupBy as \"metadata.model\" | undefined,\n timeScale: options.timeScale === \"full\" ? \"full\" : options.timeScale ? Number(options.timeScale) : undefined,\n timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n });\n\n spinner.succeed(\"Analytics query complete\");\n\n if (options.format === \"json\") {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n\n console.log();\n console.log(chalk.bold(\"Current Period:\"));\n\n if (result.currentPeriod.length === 0) {\n console.log(chalk.gray(\" No data for the current period.\"));\n } else {\n for (const dataPoint of result.currentPeriod) {\n const entries = Object.entries(dataPoint).filter(\n ([key]) => key !== \"date\",\n );\n const dateStr = dataPoint.date\n ? new Date(dataPoint.date as number).toLocaleDateString()\n : \"—\";\n\n if (entries.length === 0) {\n console.log(` ${chalk.gray(dateStr)}: ${chalk.gray(\"no data\")}`);\n } else {\n const values = entries\n .map(([key, value]) => `${chalk.cyan(key)}: ${formatValue(value)}`)\n .join(\", \");\n console.log(` ${chalk.gray(dateStr)}: ${values}`);\n }\n }\n }\n\n if (result.previousPeriod.length > 0) {\n console.log();\n console.log(chalk.bold(\"Previous Period:\"));\n for (const dataPoint of result.previousPeriod) {\n const entries = Object.entries(dataPoint).filter(\n ([key]) => key !== \"date\",\n );\n const dateStr = dataPoint.date\n ? new Date(dataPoint.date as number).toLocaleDateString()\n : \"—\";\n\n if (entries.length > 0) {\n const values = entries\n .map(([key, value]) => `${chalk.cyan(key)}: ${formatValue(value)}`)\n .join(\", \");\n console.log(` ${chalk.gray(dateStr)}: ${values}`);\n }\n }\n }\n\n console.log();\n console.log(chalk.gray(\"Available presets: \" + Object.keys(METRIC_PRESETS).join(\", \")));\n console.log(\n chalk.gray(\n `Use ${chalk.cyan(\"langwatch analytics query --metric <preset> -f json\")} for raw data`,\n ),\n );\n } catch (error) {\n spinner.fail();\n if (error instanceof AnalyticsApiError) {\n console.error(chalk.red(`Error: ${error.message}`));\n } else {\n console.error(\n chalk.red(\n `Error querying analytics: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n ),\n );\n }\n process.exit(1);\n }\n};\n\nfunction formatValue(value: unknown): string {\n if (typeof value === \"number\") {\n return value % 1 === 0 ? value.toLocaleString() : value.toFixed(4);\n }\n return String(value);\n}\n","import type { paths } from \"@/internal/generated/openapi/api-client\";\nimport {\n createLangWatchApiClient,\n type LangwatchApiClient,\n} from \"@/internal/api/client\";\nimport { type InternalConfig } from \"@/client-sdk/types\";\n\nexport type AnalyticsTimeseriesBody = NonNullable<\n paths[\"/api/analytics/timeseries\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n\nexport type AnalyticsTimeseriesResponse =\n paths[\"/api/analytics/timeseries\"][\"post\"][\"responses\"][\"200\"][\"content\"][\"application/json\"];\n\nexport class AnalyticsApiError extends Error {\n constructor(\n message: string,\n public readonly operation: string,\n public readonly originalError?: unknown,\n ) {\n super(message);\n this.name = \"AnalyticsApiError\";\n }\n}\n\nexport class AnalyticsApiService {\n private readonly apiClient: LangwatchApiClient;\n\n constructor(config?: Pick<InternalConfig, \"langwatchApiClient\">) {\n this.apiClient = config?.langwatchApiClient ?? createLangWatchApiClient();\n }\n\n private handleApiError(operation: string, error: unknown): never {\n const errorMessage =\n typeof error === \"string\"\n ? error\n : error != null &&\n typeof error === \"object\" &&\n \"error\" in error &&\n error.error != null\n ? typeof error.error === \"string\"\n ? error.error\n : (error.error as { message?: string }).message ??\n JSON.stringify(error.error)\n : error instanceof Error\n ? error.message\n : \"Unknown error occurred\";\n\n throw new AnalyticsApiError(\n `Failed to ${operation}: ${errorMessage}`,\n operation,\n error,\n );\n }\n\n async timeseries(params: AnalyticsTimeseriesBody): Promise<AnalyticsTimeseriesResponse> {\n const { data, error } = await this.apiClient.POST(\n \"/api/analytics/timeseries\",\n { body: params },\n );\n if (error) this.handleApiError(\"query analytics\", error);\n return data;\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createDatasetService,
|
|
3
|
+
handleDatasetCommandError
|
|
4
|
+
} from "./chunk-DWHR6QJK.mjs";
|
|
5
|
+
import "./chunk-ILLEMTW3.mjs";
|
|
6
|
+
import {
|
|
7
|
+
checkApiKey
|
|
8
|
+
} from "./chunk-DHJKJVY7.mjs";
|
|
9
|
+
import "./chunk-FG3JQBJB.mjs";
|
|
10
|
+
import "./chunk-QH3WUSKF.mjs";
|
|
11
|
+
import "./chunk-43STSE3B.mjs";
|
|
12
|
+
import "./chunk-LN33ZL4Z.mjs";
|
|
13
|
+
import "./chunk-M4IBRWUC.mjs";
|
|
14
|
+
import "./chunk-URTD2WOC.mjs";
|
|
15
|
+
|
|
16
|
+
// src/cli/commands/dataset/records-add.ts
|
|
17
|
+
import chalk from "chalk";
|
|
18
|
+
import fs from "fs";
|
|
19
|
+
import ora from "ora";
|
|
20
|
+
var readStdin = () => {
|
|
21
|
+
return new Promise((resolve, reject) => {
|
|
22
|
+
const chunks = [];
|
|
23
|
+
process.stdin.on("data", (chunk) => chunks.push(chunk));
|
|
24
|
+
process.stdin.on("end", () => resolve(Buffer.concat(chunks).toString("utf-8")));
|
|
25
|
+
process.stdin.on("error", reject);
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
var parseRecordsJson = (jsonStr) => {
|
|
29
|
+
let parsed;
|
|
30
|
+
try {
|
|
31
|
+
parsed = JSON.parse(jsonStr);
|
|
32
|
+
} catch (e) {
|
|
33
|
+
throw new Error("Invalid JSON: could not parse input.");
|
|
34
|
+
}
|
|
35
|
+
if (!Array.isArray(parsed)) {
|
|
36
|
+
throw new Error("Invalid input: expected a JSON array of records.");
|
|
37
|
+
}
|
|
38
|
+
return parsed;
|
|
39
|
+
};
|
|
40
|
+
var recordsAddCommand = async (slugOrId, options) => {
|
|
41
|
+
checkApiKey();
|
|
42
|
+
if (!options.json && !options.file && !options.stdin) {
|
|
43
|
+
console.error(
|
|
44
|
+
chalk.red("Error: One of --json, --file, or --stdin is required.")
|
|
45
|
+
);
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
let entries;
|
|
49
|
+
try {
|
|
50
|
+
let jsonStr;
|
|
51
|
+
if (options.file) {
|
|
52
|
+
if (!fs.existsSync(options.file)) {
|
|
53
|
+
console.error(chalk.red(`Error: File not found: ${options.file}`));
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
jsonStr = fs.readFileSync(options.file, "utf-8");
|
|
57
|
+
} else if (options.stdin) {
|
|
58
|
+
jsonStr = await readStdin();
|
|
59
|
+
} else {
|
|
60
|
+
jsonStr = options.json;
|
|
61
|
+
}
|
|
62
|
+
entries = parseRecordsJson(jsonStr);
|
|
63
|
+
} catch (error) {
|
|
64
|
+
console.error(
|
|
65
|
+
chalk.red(error instanceof Error ? error.message : "Invalid JSON input")
|
|
66
|
+
);
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
if (entries.length === 0) {
|
|
70
|
+
console.error(chalk.red("Error: No records provided. The JSON array is empty."));
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
const service = createDatasetService();
|
|
74
|
+
const spinner = ora(`Adding ${entries.length} record${entries.length !== 1 ? "s" : ""} to "${slugOrId}"...`).start();
|
|
75
|
+
try {
|
|
76
|
+
const result = await service.createRecords(slugOrId, entries);
|
|
77
|
+
const created = result.data;
|
|
78
|
+
spinner.succeed(
|
|
79
|
+
`Added ${created.length} record${created.length !== 1 ? "s" : ""} to "${chalk.cyan(slugOrId)}"`
|
|
80
|
+
);
|
|
81
|
+
console.log();
|
|
82
|
+
created.forEach((record) => {
|
|
83
|
+
console.log(` ${chalk.bold("ID:")} ${record.id}`);
|
|
84
|
+
});
|
|
85
|
+
} catch (error) {
|
|
86
|
+
spinner.fail("Failed to add records");
|
|
87
|
+
handleDatasetCommandError(error, "adding records");
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
export {
|
|
91
|
+
parseRecordsJson,
|
|
92
|
+
recordsAddCommand
|
|
93
|
+
};
|
|
94
|
+
//# sourceMappingURL=records-add-4LX4JHLO.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/commands/dataset/records-add.ts"],"sourcesContent":["import chalk from \"chalk\";\nimport fs from \"fs\";\nimport ora from \"ora\";\nimport { checkApiKey } from \"../../utils/apiKey\";\nimport { createDatasetService } from \"./service-factory\";\nimport { handleDatasetCommandError } from \"./error-handler\";\n\n/**\n * Reads all data from stdin as a string.\n */\nconst readStdin = (): Promise<string> => {\n return new Promise((resolve, reject) => {\n const chunks: Buffer[] = [];\n process.stdin.on(\"data\", (chunk: Buffer) => chunks.push(chunk));\n process.stdin.on(\"end\", () => resolve(Buffer.concat(chunks).toString(\"utf-8\")));\n process.stdin.on(\"error\", reject);\n });\n};\n\n/**\n * Parses a JSON string into an array of record entries.\n * Validates that the input is valid JSON and is an array.\n *\n * @param jsonStr - The raw JSON string\n * @returns Parsed array of record objects\n * @throws Error if the JSON is invalid or not an array\n */\nexport const parseRecordsJson = (jsonStr: string): Record<string, unknown>[] => {\n let parsed: unknown;\n try {\n parsed = JSON.parse(jsonStr);\n } catch {\n throw new Error(\"Invalid JSON: could not parse input.\");\n }\n\n if (!Array.isArray(parsed)) {\n throw new Error(\"Invalid input: expected a JSON array of records.\");\n }\n\n return parsed as Record<string, unknown>[];\n};\n\n/**\n * Adds records to a dataset from inline JSON, a file, or stdin.\n */\nexport const recordsAddCommand = async (\n slugOrId: string,\n options: { json?: string; file?: string; stdin?: boolean },\n): Promise<void> => {\n checkApiKey();\n\n if (!options.json && !options.file && !options.stdin) {\n console.error(\n chalk.red(\"Error: One of --json, --file, or --stdin is required.\"),\n );\n process.exit(1);\n }\n\n let entries: Record<string, unknown>[];\n try {\n let jsonStr: string;\n if (options.file) {\n if (!fs.existsSync(options.file)) {\n console.error(chalk.red(`Error: File not found: ${options.file}`));\n process.exit(1);\n }\n jsonStr = fs.readFileSync(options.file, \"utf-8\");\n } else if (options.stdin) {\n jsonStr = await readStdin();\n } else {\n jsonStr = options.json!;\n }\n entries = parseRecordsJson(jsonStr);\n } catch (error) {\n console.error(\n chalk.red(error instanceof Error ? error.message : \"Invalid JSON input\"),\n );\n process.exit(1);\n }\n\n if (entries.length === 0) {\n console.error(chalk.red(\"Error: No records provided. The JSON array is empty.\"));\n process.exit(1);\n }\n\n const service = createDatasetService();\n const spinner = ora(`Adding ${entries.length} record${entries.length !== 1 ? \"s\" : \"\"} to \"${slugOrId}\"...`).start();\n\n try {\n const result = await service.createRecords(slugOrId, entries);\n const created = result.data;\n\n spinner.succeed(\n `Added ${created.length} record${created.length !== 1 ? \"s\" : \"\"} to \"${chalk.cyan(slugOrId)}\"`,\n );\n console.log();\n created.forEach((record) => {\n console.log(` ${chalk.bold(\"ID:\")} ${record.id}`);\n });\n } catch (error) {\n spinner.fail(\"Failed to add records\");\n handleDatasetCommandError(error, \"adding records\");\n }\n};\n"],"mappings":";;;;;;;;;;;;;;;;AAAA,OAAO,WAAW;AAClB,OAAO,QAAQ;AACf,OAAO,SAAS;AAQhB,IAAM,YAAY,MAAuB;AACvC,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAM,SAAmB,CAAC;AAC1B,YAAQ,MAAM,GAAG,QAAQ,CAAC,UAAkB,OAAO,KAAK,KAAK,CAAC;AAC9D,YAAQ,MAAM,GAAG,OAAO,MAAM,QAAQ,OAAO,OAAO,MAAM,EAAE,SAAS,OAAO,CAAC,CAAC;AAC9E,YAAQ,MAAM,GAAG,SAAS,MAAM;AAAA,EAClC,CAAC;AACH;AAUO,IAAM,mBAAmB,CAAC,YAA+C;AAC9E,MAAI;AACJ,MAAI;AACF,aAAS,KAAK,MAAM,OAAO;AAAA,EAC7B,SAAQ;AACN,UAAM,IAAI,MAAM,sCAAsC;AAAA,EACxD;AAEA,MAAI,CAAC,MAAM,QAAQ,MAAM,GAAG;AAC1B,UAAM,IAAI,MAAM,kDAAkD;AAAA,EACpE;AAEA,SAAO;AACT;AAKO,IAAM,oBAAoB,OAC/B,UACA,YACkB;AAClB,cAAY;AAEZ,MAAI,CAAC,QAAQ,QAAQ,CAAC,QAAQ,QAAQ,CAAC,QAAQ,OAAO;AACpD,YAAQ;AAAA,MACN,MAAM,IAAI,uDAAuD;AAAA,IACnE;AACA,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,MAAI;AACJ,MAAI;AACF,QAAI;AACJ,QAAI,QAAQ,MAAM;AAChB,UAAI,CAAC,GAAG,WAAW,QAAQ,IAAI,GAAG;AAChC,gBAAQ,MAAM,MAAM,IAAI,0BAA0B,QAAQ,IAAI,EAAE,CAAC;AACjE,gBAAQ,KAAK,CAAC;AAAA,MAChB;AACA,gBAAU,GAAG,aAAa,QAAQ,MAAM,OAAO;AAAA,IACjD,WAAW,QAAQ,OAAO;AACxB,gBAAU,MAAM,UAAU;AAAA,IAC5B,OAAO;AACL,gBAAU,QAAQ;AAAA,IACpB;AACA,cAAU,iBAAiB,OAAO;AAAA,EACpC,SAAS,OAAO;AACd,YAAQ;AAAA,MACN,MAAM,IAAI,iBAAiB,QAAQ,MAAM,UAAU,oBAAoB;AAAA,IACzE;AACA,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,MAAI,QAAQ,WAAW,GAAG;AACxB,YAAQ,MAAM,MAAM,IAAI,sDAAsD,CAAC;AAC/E,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,UAAU,qBAAqB;AACrC,QAAM,UAAU,IAAI,UAAU,QAAQ,MAAM,UAAU,QAAQ,WAAW,IAAI,MAAM,EAAE,QAAQ,QAAQ,MAAM,EAAE,MAAM;AAEnH,MAAI;AACF,UAAM,SAAS,MAAM,QAAQ,cAAc,UAAU,OAAO;AAC5D,UAAM,UAAU,OAAO;AAEvB,YAAQ;AAAA,MACN,SAAS,QAAQ,MAAM,UAAU,QAAQ,WAAW,IAAI,MAAM,EAAE,QAAQ,MAAM,KAAK,QAAQ,CAAC;AAAA,IAC9F;AACA,YAAQ,IAAI;AACZ,YAAQ,QAAQ,CAAC,WAAW;AAC1B,cAAQ,IAAI,KAAK,MAAM,KAAK,KAAK,CAAC,IAAI,OAAO,EAAE,EAAE;AAAA,IACnD,CAAC;AAAA,EACH,SAAS,OAAO;AACd,YAAQ,KAAK,uBAAuB;AACpC,8BAA0B,OAAO,gBAAgB;AAAA,EACnD;AACF;","names":[]}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
var _chunkX7QBE6AAjs = require('./chunk-X7QBE6AA.js');
|
|
5
|
+
require('./chunk-CGFG5FCC.js');
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
var _chunkF6E4XQQUjs = require('./chunk-F6E4XQQU.js');
|
|
9
|
+
require('./chunk-2VVANTLB.js');
|
|
10
|
+
require('./chunk-2BJPLPLU.js');
|
|
11
|
+
require('./chunk-H6F5OGSL.js');
|
|
12
|
+
require('./chunk-D2FHOR76.js');
|
|
13
|
+
require('./chunk-DB6OJGP4.js');
|
|
14
|
+
require('./chunk-OHM7JUMR.js');
|
|
15
|
+
|
|
16
|
+
// src/cli/commands/dataset/records-add.ts
|
|
17
|
+
var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
|
|
18
|
+
var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs);
|
|
19
|
+
var _ora = require('ora'); var _ora2 = _interopRequireDefault(_ora);
|
|
20
|
+
var readStdin = () => {
|
|
21
|
+
return new Promise((resolve, reject) => {
|
|
22
|
+
const chunks = [];
|
|
23
|
+
process.stdin.on("data", (chunk) => chunks.push(chunk));
|
|
24
|
+
process.stdin.on("end", () => resolve(Buffer.concat(chunks).toString("utf-8")));
|
|
25
|
+
process.stdin.on("error", reject);
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
var parseRecordsJson = (jsonStr) => {
|
|
29
|
+
let parsed;
|
|
30
|
+
try {
|
|
31
|
+
parsed = JSON.parse(jsonStr);
|
|
32
|
+
} catch (e) {
|
|
33
|
+
throw new Error("Invalid JSON: could not parse input.");
|
|
34
|
+
}
|
|
35
|
+
if (!Array.isArray(parsed)) {
|
|
36
|
+
throw new Error("Invalid input: expected a JSON array of records.");
|
|
37
|
+
}
|
|
38
|
+
return parsed;
|
|
39
|
+
};
|
|
40
|
+
var recordsAddCommand = async (slugOrId, options) => {
|
|
41
|
+
_chunkF6E4XQQUjs.checkApiKey.call(void 0, );
|
|
42
|
+
if (!options.json && !options.file && !options.stdin) {
|
|
43
|
+
console.error(
|
|
44
|
+
_chalk2.default.red("Error: One of --json, --file, or --stdin is required.")
|
|
45
|
+
);
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
let entries;
|
|
49
|
+
try {
|
|
50
|
+
let jsonStr;
|
|
51
|
+
if (options.file) {
|
|
52
|
+
if (!_fs2.default.existsSync(options.file)) {
|
|
53
|
+
console.error(_chalk2.default.red(`Error: File not found: ${options.file}`));
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
jsonStr = _fs2.default.readFileSync(options.file, "utf-8");
|
|
57
|
+
} else if (options.stdin) {
|
|
58
|
+
jsonStr = await readStdin();
|
|
59
|
+
} else {
|
|
60
|
+
jsonStr = options.json;
|
|
61
|
+
}
|
|
62
|
+
entries = parseRecordsJson(jsonStr);
|
|
63
|
+
} catch (error) {
|
|
64
|
+
console.error(
|
|
65
|
+
_chalk2.default.red(error instanceof Error ? error.message : "Invalid JSON input")
|
|
66
|
+
);
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
if (entries.length === 0) {
|
|
70
|
+
console.error(_chalk2.default.red("Error: No records provided. The JSON array is empty."));
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
const service = _chunkX7QBE6AAjs.createDatasetService.call(void 0, );
|
|
74
|
+
const spinner = _ora2.default.call(void 0, `Adding ${entries.length} record${entries.length !== 1 ? "s" : ""} to "${slugOrId}"...`).start();
|
|
75
|
+
try {
|
|
76
|
+
const result = await service.createRecords(slugOrId, entries);
|
|
77
|
+
const created = result.data;
|
|
78
|
+
spinner.succeed(
|
|
79
|
+
`Added ${created.length} record${created.length !== 1 ? "s" : ""} to "${_chalk2.default.cyan(slugOrId)}"`
|
|
80
|
+
);
|
|
81
|
+
console.log();
|
|
82
|
+
created.forEach((record) => {
|
|
83
|
+
console.log(` ${_chalk2.default.bold("ID:")} ${record.id}`);
|
|
84
|
+
});
|
|
85
|
+
} catch (error) {
|
|
86
|
+
spinner.fail("Failed to add records");
|
|
87
|
+
_chunkX7QBE6AAjs.handleDatasetCommandError.call(void 0, error, "adding records");
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
exports.parseRecordsJson = parseRecordsJson; exports.recordsAddCommand = recordsAddCommand;
|
|
94
|
+
//# sourceMappingURL=records-add-WTIGBJV4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/langwatch/langwatch/typescript-sdk/dist/records-add-WTIGBJV4.js","../src/cli/commands/dataset/records-add.ts"],"names":[],"mappings":"AAAA;AACE;AACA;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B;AACA;ACfA,4EAAkB;AAClB,gEAAe;AACf,oEAAgB;AAQhB,IAAM,UAAA,EAAY,CAAA,EAAA,GAAuB;AACvC,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,EAAA,GAAW;AACtC,IAAA,MAAM,OAAA,EAAmB,CAAC,CAAA;AAC1B,IAAA,OAAA,CAAQ,KAAA,CAAM,EAAA,CAAG,MAAA,EAAQ,CAAC,KAAA,EAAA,GAAkB,MAAA,CAAO,IAAA,CAAK,KAAK,CAAC,CAAA;AAC9D,IAAA,OAAA,CAAQ,KAAA,CAAM,EAAA,CAAG,KAAA,EAAO,CAAA,EAAA,GAAM,OAAA,CAAQ,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,CAAE,QAAA,CAAS,OAAO,CAAC,CAAC,CAAA;AAC9E,IAAA,OAAA,CAAQ,KAAA,CAAM,EAAA,CAAG,OAAA,EAAS,MAAM,CAAA;AAAA,EAClC,CAAC,CAAA;AACH,CAAA;AAUO,IAAM,iBAAA,EAAmB,CAAC,OAAA,EAAA,GAA+C;AAC9E,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,OAAA,EAAS,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAAA,EAC7B,EAAA,MAAA,CAAQ,CAAA,EAAA;AACN,IAAA,MAAM,IAAI,KAAA,CAAM,sCAAsC,CAAA;AAAA,EACxD;AAEA,EAAA,GAAA,CAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AAC1B,IAAA,MAAM,IAAI,KAAA,CAAM,kDAAkD,CAAA;AAAA,EACpE;AAEA,EAAA,OAAO,MAAA;AACT,CAAA;AAKO,IAAM,kBAAA,EAAoB,MAAA,CAC/B,QAAA,EACA,OAAA,EAAA,GACkB;AAClB,EAAA,0CAAA,CAAY;AAEZ,EAAA,GAAA,CAAI,CAAC,OAAA,CAAQ,KAAA,GAAQ,CAAC,OAAA,CAAQ,KAAA,GAAQ,CAAC,OAAA,CAAQ,KAAA,EAAO;AACpD,IAAA,OAAA,CAAQ,KAAA;AAAA,MACN,eAAA,CAAM,GAAA,CAAI,uDAAuD;AAAA,IACnE,CAAA;AACA,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA;AAAA,EAChB;AAEA,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI;AACF,IAAA,IAAI,OAAA;AACJ,IAAA,GAAA,CAAI,OAAA,CAAQ,IAAA,EAAM;AAChB,MAAA,GAAA,CAAI,CAAC,YAAA,CAAG,UAAA,CAAW,OAAA,CAAQ,IAAI,CAAA,EAAG;AAChC,QAAA,OAAA,CAAQ,KAAA,CAAM,eAAA,CAAM,GAAA,CAAI,CAAA,uBAAA,EAA0B,OAAA,CAAQ,IAAI,CAAA,CAAA;AAChD,QAAA;AAChB,MAAA;AAC+C,MAAA;AACvB,IAAA;AACE,MAAA;AACrB,IAAA;AACa,MAAA;AACpB,IAAA;AACkC,IAAA;AACpB,EAAA;AACN,IAAA;AAC6C,MAAA;AACrD,IAAA;AACc,IAAA;AAChB,EAAA;AAE0B,EAAA;AACA,IAAA;AACV,IAAA;AAChB,EAAA;AAEqC,EAAA;AACyB,EAAA;AAE1D,EAAA;AAC0D,IAAA;AACrC,IAAA;AAEf,IAAA;AAC0D,MAAA;AAClE,IAAA;AACY,IAAA;AACgB,IAAA;AACuB,MAAA;AAClD,IAAA;AACa,EAAA;AACsB,IAAA;AACa,IAAA;AACnD,EAAA;AACF;ADduE;AACA;AACA;AACA","file":"/home/runner/work/langwatch/langwatch/typescript-sdk/dist/records-add-WTIGBJV4.js","sourcesContent":[null,"import chalk from \"chalk\";\nimport fs from \"fs\";\nimport ora from \"ora\";\nimport { checkApiKey } from \"../../utils/apiKey\";\nimport { createDatasetService } from \"./service-factory\";\nimport { handleDatasetCommandError } from \"./error-handler\";\n\n/**\n * Reads all data from stdin as a string.\n */\nconst readStdin = (): Promise<string> => {\n return new Promise((resolve, reject) => {\n const chunks: Buffer[] = [];\n process.stdin.on(\"data\", (chunk: Buffer) => chunks.push(chunk));\n process.stdin.on(\"end\", () => resolve(Buffer.concat(chunks).toString(\"utf-8\")));\n process.stdin.on(\"error\", reject);\n });\n};\n\n/**\n * Parses a JSON string into an array of record entries.\n * Validates that the input is valid JSON and is an array.\n *\n * @param jsonStr - The raw JSON string\n * @returns Parsed array of record objects\n * @throws Error if the JSON is invalid or not an array\n */\nexport const parseRecordsJson = (jsonStr: string): Record<string, unknown>[] => {\n let parsed: unknown;\n try {\n parsed = JSON.parse(jsonStr);\n } catch {\n throw new Error(\"Invalid JSON: could not parse input.\");\n }\n\n if (!Array.isArray(parsed)) {\n throw new Error(\"Invalid input: expected a JSON array of records.\");\n }\n\n return parsed as Record<string, unknown>[];\n};\n\n/**\n * Adds records to a dataset from inline JSON, a file, or stdin.\n */\nexport const recordsAddCommand = async (\n slugOrId: string,\n options: { json?: string; file?: string; stdin?: boolean },\n): Promise<void> => {\n checkApiKey();\n\n if (!options.json && !options.file && !options.stdin) {\n console.error(\n chalk.red(\"Error: One of --json, --file, or --stdin is required.\"),\n );\n process.exit(1);\n }\n\n let entries: Record<string, unknown>[];\n try {\n let jsonStr: string;\n if (options.file) {\n if (!fs.existsSync(options.file)) {\n console.error(chalk.red(`Error: File not found: ${options.file}`));\n process.exit(1);\n }\n jsonStr = fs.readFileSync(options.file, \"utf-8\");\n } else if (options.stdin) {\n jsonStr = await readStdin();\n } else {\n jsonStr = options.json!;\n }\n entries = parseRecordsJson(jsonStr);\n } catch (error) {\n console.error(\n chalk.red(error instanceof Error ? error.message : \"Invalid JSON input\"),\n );\n process.exit(1);\n }\n\n if (entries.length === 0) {\n console.error(chalk.red(\"Error: No records provided. The JSON array is empty.\"));\n process.exit(1);\n }\n\n const service = createDatasetService();\n const spinner = ora(`Adding ${entries.length} record${entries.length !== 1 ? \"s\" : \"\"} to \"${slugOrId}\"...`).start();\n\n try {\n const result = await service.createRecords(slugOrId, entries);\n const created = result.data;\n\n spinner.succeed(\n `Added ${created.length} record${created.length !== 1 ? \"s\" : \"\"} to \"${chalk.cyan(slugOrId)}\"`,\n );\n console.log();\n created.forEach((record) => {\n console.log(` ${chalk.bold(\"ID:\")} ${record.id}`);\n });\n } catch (error) {\n spinner.fail(\"Failed to add records\");\n handleDatasetCommandError(error, \"adding records\");\n }\n};\n"]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createDatasetService,
|
|
3
|
+
handleDatasetCommandError
|
|
4
|
+
} from "./chunk-DWHR6QJK.mjs";
|
|
5
|
+
import "./chunk-ILLEMTW3.mjs";
|
|
6
|
+
import {
|
|
7
|
+
checkApiKey
|
|
8
|
+
} from "./chunk-DHJKJVY7.mjs";
|
|
9
|
+
import "./chunk-FG3JQBJB.mjs";
|
|
10
|
+
import "./chunk-QH3WUSKF.mjs";
|
|
11
|
+
import "./chunk-43STSE3B.mjs";
|
|
12
|
+
import "./chunk-LN33ZL4Z.mjs";
|
|
13
|
+
import "./chunk-M4IBRWUC.mjs";
|
|
14
|
+
import "./chunk-URTD2WOC.mjs";
|
|
15
|
+
|
|
16
|
+
// src/cli/commands/dataset/records-delete.ts
|
|
17
|
+
import chalk from "chalk";
|
|
18
|
+
import ora from "ora";
|
|
19
|
+
var recordsDeleteCommand = async (slugOrId, recordIds) => {
|
|
20
|
+
checkApiKey();
|
|
21
|
+
if (recordIds.length === 0) {
|
|
22
|
+
console.error(chalk.red("Error: At least one record ID is required."));
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
const service = createDatasetService();
|
|
26
|
+
const spinner = ora(
|
|
27
|
+
`Deleting ${recordIds.length} record${recordIds.length !== 1 ? "s" : ""} from "${slugOrId}"...`
|
|
28
|
+
).start();
|
|
29
|
+
try {
|
|
30
|
+
const result = await service.deleteRecords(slugOrId, recordIds);
|
|
31
|
+
spinner.succeed(
|
|
32
|
+
`Deleted ${result.deletedCount} record${result.deletedCount !== 1 ? "s" : ""} from "${chalk.cyan(slugOrId)}"`
|
|
33
|
+
);
|
|
34
|
+
} catch (error) {
|
|
35
|
+
spinner.fail("Failed to delete records");
|
|
36
|
+
handleDatasetCommandError(error, "deleting records");
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
export {
|
|
40
|
+
recordsDeleteCommand
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=records-delete-IY37NWPN.mjs.map
|