langgraph-ui-components 0.0.4 → 0.0.7
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/index.es10.js +31 -16
- package/dist/index.es10.js.map +1 -1
- package/dist/index.es100.js +143 -3134
- package/dist/index.es100.js.map +1 -1
- package/dist/index.es101.js +202 -36
- package/dist/index.es101.js.map +1 -1
- package/dist/index.es102.js +14 -5
- package/dist/index.es102.js.map +1 -1
- package/dist/index.es103.js +27 -70
- package/dist/index.es103.js.map +1 -1
- package/dist/index.es104.js +28 -31
- package/dist/index.es104.js.map +1 -1
- package/dist/index.es105.js +3157 -5
- package/dist/index.es105.js.map +1 -1
- package/dist/index.es106.js +18 -2
- package/dist/index.es106.js.map +1 -1
- package/dist/index.es107.js +5 -11
- package/dist/index.es107.js.map +1 -1
- package/dist/index.es108.js +2 -503
- package/dist/index.es108.js.map +1 -1
- package/dist/index.es109.js +11 -5
- package/dist/index.es109.js.map +1 -1
- package/dist/index.es11.js +166 -123
- package/dist/index.es11.js.map +1 -1
- package/dist/index.es110.js +503 -2
- package/dist/index.es110.js.map +1 -1
- package/dist/index.es111.js +5 -146
- package/dist/index.es111.js.map +1 -1
- package/dist/index.es112.js +2 -908
- package/dist/index.es112.js.map +1 -1
- package/dist/index.es113.js +128 -262
- package/dist/index.es113.js.map +1 -1
- package/dist/index.es114.js +907 -3
- package/dist/index.es114.js.map +1 -1
- package/dist/index.es115.js +262 -426
- package/dist/index.es115.js.map +1 -1
- package/dist/index.es116.js +3 -47
- package/dist/index.es116.js.map +1 -1
- package/dist/index.es117.js +443 -21
- package/dist/index.es117.js.map +1 -1
- package/dist/index.es118.js +42 -75
- package/dist/index.es118.js.map +1 -1
- package/dist/index.es119.js +22 -129
- package/dist/index.es119.js.map +1 -1
- package/dist/index.es12.js +13 -103
- package/dist/index.es12.js.map +1 -1
- package/dist/index.es120.js +74 -44
- package/dist/index.es120.js.map +1 -1
- package/dist/index.es121.js +129 -10
- package/dist/index.es121.js.map +1 -1
- package/dist/index.es122.js +47 -43
- package/dist/index.es122.js.map +1 -1
- package/dist/index.es123.js +9 -98
- package/dist/index.es123.js.map +1 -1
- package/dist/index.es124.js +43 -51
- package/dist/index.es124.js.map +1 -1
- package/dist/index.es125.js +96 -13
- package/dist/index.es125.js.map +1 -1
- package/dist/index.es126.js +52 -14
- package/dist/index.es126.js.map +1 -1
- package/dist/index.es127.js +156 -81
- package/dist/index.es127.js.map +1 -1
- package/dist/index.es128.js +2 -2
- package/dist/index.es129.js +14 -55
- package/dist/index.es129.js.map +1 -1
- package/dist/index.es13.js +126 -32
- package/dist/index.es13.js.map +1 -1
- package/dist/index.es130.js +87 -98
- package/dist/index.es130.js.map +1 -1
- package/dist/index.es131.js +2 -191
- package/dist/index.es131.js.map +1 -1
- package/dist/index.es132.js +54 -108
- package/dist/index.es132.js.map +1 -1
- package/dist/index.es133.js +98 -33
- package/dist/index.es133.js.map +1 -1
- package/dist/index.es134.js +191 -10
- package/dist/index.es134.js.map +1 -1
- package/dist/index.es135.js +109 -10
- package/dist/index.es135.js.map +1 -1
- package/dist/index.es136.js +35 -12
- package/dist/index.es136.js.map +1 -1
- package/dist/index.es137.js +10 -91
- package/dist/index.es137.js.map +1 -1
- package/dist/index.es138.js +11 -275
- package/dist/index.es138.js.map +1 -1
- package/dist/index.es139.js +12 -2
- package/dist/index.es139.js.map +1 -1
- package/dist/index.es140.js +88 -161
- package/dist/index.es140.js.map +1 -1
- package/dist/index.es141.js +270 -46
- package/dist/index.es141.js.map +1 -1
- package/dist/index.es142.js +2 -40
- package/dist/index.es142.js.map +1 -1
- package/dist/index.es143.js +164 -35
- package/dist/index.es143.js.map +1 -1
- package/dist/index.es144.js +45 -34
- package/dist/index.es144.js.map +1 -1
- package/dist/index.es145.js +37 -21
- package/dist/index.es145.js.map +1 -1
- package/dist/index.es146.js +32 -588
- package/dist/index.es146.js.map +1 -1
- package/dist/index.es147.js +32 -117
- package/dist/index.es147.js.map +1 -1
- package/dist/index.es148.js +22 -162
- package/dist/index.es148.js.map +1 -1
- package/dist/index.es149.js +591 -2
- package/dist/index.es149.js.map +1 -1
- package/dist/index.es15.js +15 -15
- package/dist/index.es150.js +125 -2
- package/dist/index.es150.js.map +1 -1
- package/dist/index.es151.js +2 -2
- package/dist/index.es152.js +2 -22
- package/dist/index.es152.js.map +1 -1
- package/dist/index.es153.js +22 -2
- package/dist/index.es153.js.map +1 -1
- package/dist/index.es154.js +2 -25
- package/dist/index.es154.js.map +1 -1
- package/dist/index.es155.js +25 -8
- package/dist/index.es155.js.map +1 -1
- package/dist/index.es156.js +4 -5
- package/dist/index.es156.js.map +1 -1
- package/dist/index.es157.js +7 -12
- package/dist/index.es157.js.map +1 -1
- package/dist/index.es158.js +5 -6
- package/dist/index.es158.js.map +1 -1
- package/dist/index.es159.js +12 -63
- package/dist/index.es159.js.map +1 -1
- package/dist/index.es160.js +5 -21
- package/dist/index.es160.js.map +1 -1
- package/dist/index.es161.js +24 -5
- package/dist/index.es161.js.map +1 -1
- package/dist/index.es162.js +11 -348
- package/dist/index.es162.js.map +1 -1
- package/dist/index.es163.js +52 -23
- package/dist/index.es163.js.map +1 -1
- package/dist/index.es164.js +63 -11
- package/dist/index.es164.js.map +1 -1
- package/dist/index.es165.js +21 -53
- package/dist/index.es165.js.map +1 -1
- package/dist/index.es166.js +6 -7
- package/dist/index.es166.js.map +1 -1
- package/dist/index.es167.js +342 -96
- package/dist/index.es167.js.map +1 -1
- package/dist/index.es168.js +6 -118
- package/dist/index.es168.js.map +1 -1
- package/dist/index.es169.js +98 -131
- package/dist/index.es169.js.map +1 -1
- package/dist/index.es17.js +2 -2
- package/dist/index.es170.js +108 -104
- package/dist/index.es170.js.map +1 -1
- package/dist/index.es171.js +136 -6
- package/dist/index.es171.js.map +1 -1
- package/dist/index.es172.js +114 -3
- package/dist/index.es172.js.map +1 -1
- package/dist/index.es173.js +6 -2
- package/dist/index.es173.js.map +1 -1
- package/dist/index.es174.js +2 -3737
- package/dist/index.es174.js.map +1 -1
- package/dist/index.es175.js +3682 -287
- package/dist/index.es175.js.map +1 -1
- package/dist/index.es176.js +321 -88
- package/dist/index.es176.js.map +1 -1
- package/dist/index.es177.js +95 -119
- package/dist/index.es177.js.map +1 -1
- package/dist/index.es178.js +131 -13
- package/dist/index.es178.js.map +1 -1
- package/dist/index.es179.js +13 -150
- package/dist/index.es179.js.map +1 -1
- package/dist/index.es180.js +150 -13
- package/dist/index.es180.js.map +1 -1
- package/dist/index.es181.js +13 -6
- package/dist/index.es181.js.map +1 -1
- package/dist/index.es182.js +6 -19
- package/dist/index.es182.js.map +1 -1
- package/dist/index.es183.js +17 -86
- package/dist/index.es183.js.map +1 -1
- package/dist/index.es184.js +69 -222
- package/dist/index.es184.js.map +1 -1
- package/dist/index.es185.js +242 -23
- package/dist/index.es185.js.map +1 -1
- package/dist/index.es186.js +23 -5
- package/dist/index.es186.js.map +1 -1
- package/dist/index.es187.js +6 -4
- package/dist/index.es187.js.map +1 -1
- package/dist/index.es188.js +4 -18
- package/dist/index.es188.js.map +1 -1
- package/dist/index.es189.js +16 -6
- package/dist/index.es189.js.map +1 -1
- package/dist/index.es19.js +119 -15
- package/dist/index.es19.js.map +1 -1
- package/dist/index.es190.js +7 -141
- package/dist/index.es190.js.map +1 -1
- package/dist/index.es191.js +142 -2
- package/dist/index.es191.js.map +1 -1
- package/dist/index.es192.js +2 -32
- package/dist/index.es192.js.map +1 -1
- package/dist/index.es193.js +31 -5
- package/dist/index.es193.js.map +1 -1
- package/dist/index.es194.js +5 -105
- package/dist/index.es194.js.map +1 -1
- package/dist/index.es195.js +106 -13
- package/dist/index.es195.js.map +1 -1
- package/dist/index.es196.js +12 -17
- package/dist/index.es196.js.map +1 -1
- package/dist/index.es197.js +15 -28
- package/dist/index.es197.js.map +1 -1
- package/dist/index.es198.js +30 -3
- package/dist/index.es198.js.map +1 -1
- package/dist/index.es199.js +3 -4
- package/dist/index.es199.js.map +1 -1
- package/dist/index.es2.js +24 -16
- package/dist/index.es2.js.map +1 -1
- package/dist/index.es20.js +17 -68
- package/dist/index.es20.js.map +1 -1
- package/dist/index.es200.js +5 -5
- package/dist/index.es200.js.map +1 -1
- package/dist/index.es201.js +4 -36
- package/dist/index.es201.js.map +1 -1
- package/dist/index.es202.js +36 -7
- package/dist/index.es202.js.map +1 -1
- package/dist/index.es203.js +7 -5
- package/dist/index.es203.js.map +1 -1
- package/dist/index.es204.js +5 -6
- package/dist/index.es204.js.map +1 -1
- package/dist/index.es205.js +6 -41
- package/dist/index.es205.js.map +1 -1
- package/dist/index.es206.js +41 -12
- package/dist/index.es206.js.map +1 -1
- package/dist/index.es207.js +11 -240
- package/dist/index.es207.js.map +1 -1
- package/dist/index.es208.js +239 -48
- package/dist/index.es208.js.map +1 -1
- package/dist/index.es209.js +49 -33
- package/dist/index.es209.js.map +1 -1
- package/dist/index.es21.js +3 -3
- package/dist/index.es21.js.map +1 -1
- package/dist/index.es210.js +32 -10
- package/dist/index.es210.js.map +1 -1
- package/dist/index.es211.js +12 -7
- package/dist/index.es211.js.map +1 -1
- package/dist/index.es212.js +7 -6
- package/dist/index.es212.js.map +1 -1
- package/dist/index.es213.js +6 -64
- package/dist/index.es213.js.map +1 -1
- package/dist/index.es214.js +60 -36
- package/dist/index.es214.js.map +1 -1
- package/dist/index.es215.js +39 -30
- package/dist/index.es215.js.map +1 -1
- package/dist/index.es216.js +30 -60
- package/dist/index.es216.js.map +1 -1
- package/dist/index.es217.js +60 -13
- package/dist/index.es217.js.map +1 -1
- package/dist/index.es218.js +9 -17
- package/dist/index.es218.js.map +1 -1
- package/dist/index.es219.js +23 -5
- package/dist/index.es219.js.map +1 -1
- package/dist/index.es22.js +1 -1
- package/dist/index.es220.js +4 -16
- package/dist/index.es220.js.map +1 -1
- package/dist/index.es221.js +14 -30
- package/dist/index.es221.js.map +1 -1
- package/dist/index.es222.js +32 -4
- package/dist/index.es222.js.map +1 -1
- package/dist/index.es223.js +4 -4
- package/dist/index.es223.js.map +1 -1
- package/dist/index.es224.js +5 -5
- package/dist/index.es224.js.map +1 -1
- package/dist/index.es225.js +5 -8
- package/dist/index.es225.js.map +1 -1
- package/dist/index.es226.js +6 -90
- package/dist/index.es226.js.map +1 -1
- package/dist/index.es227.js +90 -16
- package/dist/index.es227.js.map +1 -1
- package/dist/index.es228.js +17 -761
- package/dist/index.es228.js.map +1 -1
- package/dist/index.es229.js +762 -66
- package/dist/index.es229.js.map +1 -1
- package/dist/index.es230.js +66 -174
- package/dist/index.es230.js.map +1 -1
- package/dist/index.es231.js +169 -33
- package/dist/index.es231.js.map +1 -1
- package/dist/index.es232.js +37 -136
- package/dist/index.es232.js.map +1 -1
- package/dist/index.es233.js +136 -92
- package/dist/index.es233.js.map +1 -1
- package/dist/index.es234.js +92 -32
- package/dist/index.es234.js.map +1 -1
- package/dist/index.es235.js +32 -284
- package/dist/index.es235.js.map +1 -1
- package/dist/index.es236.js +284 -25
- package/dist/index.es236.js.map +1 -1
- package/dist/index.es237.js +22 -20
- package/dist/index.es237.js.map +1 -1
- package/dist/index.es238.js +22 -13
- package/dist/index.es238.js.map +1 -1
- package/dist/index.es239.js +12 -12
- package/dist/index.es239.js.map +1 -1
- package/dist/index.es24.js +103 -305
- package/dist/index.es24.js.map +1 -1
- package/dist/index.es240.js +13 -24
- package/dist/index.es240.js.map +1 -1
- package/dist/index.es241.js +22 -42
- package/dist/index.es241.js.map +1 -1
- package/dist/index.es242.js +45 -11
- package/dist/index.es242.js.map +1 -1
- package/dist/index.es243.js +10 -10
- package/dist/index.es243.js.map +1 -1
- package/dist/index.es244.js +10 -10
- package/dist/index.es244.js.map +1 -1
- package/dist/index.es245.js +11 -14
- package/dist/index.es245.js.map +1 -1
- package/dist/index.es246.js +14 -11
- package/dist/index.es246.js.map +1 -1
- package/dist/index.es247.js +11 -11
- package/dist/index.es247.js.map +1 -1
- package/dist/index.es248.js +10 -10
- package/dist/index.es248.js.map +1 -1
- package/dist/index.es249.js +11 -15
- package/dist/index.es249.js.map +1 -1
- package/dist/index.es25.js +68 -121
- package/dist/index.es25.js.map +1 -1
- package/dist/index.es250.js +15 -11
- package/dist/index.es250.js.map +1 -1
- package/dist/index.es251.js +10 -10
- package/dist/index.es251.js.map +1 -1
- package/dist/index.es252.js +11 -11
- package/dist/index.es252.js.map +1 -1
- package/dist/index.es253.js +10 -10
- package/dist/index.es253.js.map +1 -1
- package/dist/index.es254.js +10 -10
- package/dist/index.es254.js.map +1 -1
- package/dist/index.es255.js +10 -10
- package/dist/index.es255.js.map +1 -1
- package/dist/index.es256.js +10 -10
- package/dist/index.es256.js.map +1 -1
- package/dist/index.es257.js +10 -10
- package/dist/index.es257.js.map +1 -1
- package/dist/index.es258.js +11 -56
- package/dist/index.es258.js.map +1 -1
- package/dist/index.es259.js +53 -46
- package/dist/index.es259.js.map +1 -1
- package/dist/index.es26.js +305 -5
- package/dist/index.es26.js.map +1 -1
- package/dist/index.es260.js +42 -112
- package/dist/index.es260.js.map +1 -1
- package/dist/index.es261.js +87 -352
- package/dist/index.es261.js.map +1 -1
- package/dist/index.es262.js +381 -15
- package/dist/index.es262.js.map +1 -1
- package/dist/index.es263.js +17 -10
- package/dist/index.es263.js.map +1 -1
- package/dist/index.es264.js +10 -30
- package/dist/index.es264.js.map +1 -1
- package/dist/index.es265.js +17 -17
- package/dist/index.es265.js.map +1 -1
- package/dist/index.es266.js +25 -56
- package/dist/index.es266.js.map +1 -1
- package/dist/index.es267.js +59 -14
- package/dist/index.es267.js.map +1 -1
- package/dist/index.es268.js +14 -74
- package/dist/index.es268.js.map +1 -1
- package/dist/index.es269.js +77 -11
- package/dist/index.es269.js.map +1 -1
- package/dist/index.es270.js +10 -10
- package/dist/index.es270.js.map +1 -1
- package/dist/index.es271.js +11 -15
- package/dist/index.es271.js.map +1 -1
- package/dist/index.es272.js +14 -51
- package/dist/index.es272.js.map +1 -1
- package/dist/index.es273.js +44 -158
- package/dist/index.es273.js.map +1 -1
- package/dist/index.es274.js +167 -2
- package/dist/index.es274.js.map +1 -1
- package/dist/index.es275.js +2 -11
- package/dist/index.es275.js.map +1 -1
- package/dist/index.es276.js +9 -18
- package/dist/index.es276.js.map +1 -1
- package/dist/index.es277.js +17 -36
- package/dist/index.es277.js.map +1 -1
- package/dist/index.es278.js +42 -0
- package/dist/index.es278.js.map +1 -0
- package/dist/index.es28.js +7 -7
- package/dist/index.es29.js +1 -1
- package/dist/index.es32.js +4 -4
- package/dist/index.es33.js +1191 -13
- package/dist/index.es33.js.map +1 -1
- package/dist/index.es34.js +6 -117
- package/dist/index.es34.js.map +1 -1
- package/dist/index.es35.js +8 -70
- package/dist/index.es35.js.map +1 -1
- package/dist/index.es36.js +148 -19
- package/dist/index.es36.js.map +1 -1
- package/dist/index.es37.js +112 -255
- package/dist/index.es37.js.map +1 -1
- package/dist/index.es38.js +68 -40
- package/dist/index.es38.js.map +1 -1
- package/dist/index.es39.js +17 -214
- package/dist/index.es39.js.map +1 -1
- package/dist/index.es40.js +247 -53
- package/dist/index.es40.js.map +1 -1
- package/dist/index.es41.js +24 -123
- package/dist/index.es41.js.map +1 -1
- package/dist/index.es42.js +205 -14
- package/dist/index.es42.js.map +1 -1
- package/dist/index.es43.js +58 -221
- package/dist/index.es43.js.map +1 -1
- package/dist/index.es44.js +140 -7
- package/dist/index.es44.js.map +1 -1
- package/dist/index.es45.js +17 -1185
- package/dist/index.es45.js.map +1 -1
- package/dist/index.es46.js +229 -6
- package/dist/index.es46.js.map +1 -1
- package/dist/index.es47.js +15 -146
- package/dist/index.es47.js.map +1 -1
- package/dist/index.es48.js +6 -8
- package/dist/index.es48.js.map +1 -1
- package/dist/index.es49.js +84 -87
- package/dist/index.es49.js.map +1 -1
- package/dist/index.es50.js +7 -3
- package/dist/index.es50.js.map +1 -1
- package/dist/index.es51.js +14 -35
- package/dist/index.es51.js.map +1 -1
- package/dist/index.es52.js +7 -71
- package/dist/index.es52.js.map +1 -1
- package/dist/index.es53.js +89 -33
- package/dist/index.es53.js.map +1 -1
- package/dist/index.es54.js +3 -305
- package/dist/index.es54.js.map +1 -1
- package/dist/index.es55.js +36 -9
- package/dist/index.es55.js.map +1 -1
- package/dist/index.es56.js +64 -83
- package/dist/index.es56.js.map +1 -1
- package/dist/index.es57.js +36 -6
- package/dist/index.es57.js.map +1 -1
- package/dist/index.es58.js +303 -12
- package/dist/index.es58.js.map +1 -1
- package/dist/index.es59.js +9 -143
- package/dist/index.es59.js.map +1 -1
- package/dist/index.es60.js +5 -299
- package/dist/index.es60.js.map +1 -1
- package/dist/index.es61.js +158 -61
- package/dist/index.es61.js.map +1 -1
- package/dist/index.es62.js +658 -199
- package/dist/index.es62.js.map +1 -1
- package/dist/index.es63.js +138 -29
- package/dist/index.es63.js.map +1 -1
- package/dist/index.es64.js +299 -8
- package/dist/index.es64.js.map +1 -1
- package/dist/index.es65.js +65 -11
- package/dist/index.es65.js.map +1 -1
- package/dist/index.es66.js +201 -175
- package/dist/index.es66.js.map +1 -1
- package/dist/index.es67.js +33 -23
- package/dist/index.es67.js.map +1 -1
- package/dist/index.es68.js +8 -1399
- package/dist/index.es68.js.map +1 -1
- package/dist/index.es69.js +12 -9
- package/dist/index.es69.js.map +1 -1
- package/dist/index.es70.js +187 -8
- package/dist/index.es70.js.map +1 -1
- package/dist/index.es71.js +24 -6
- package/dist/index.es71.js.map +1 -1
- package/dist/index.es72.js +1384 -147
- package/dist/index.es72.js.map +1 -1
- package/dist/index.es73.js +9 -672
- package/dist/index.es73.js.map +1 -1
- package/dist/index.es74.js +8 -12
- package/dist/index.es74.js.map +1 -1
- package/dist/index.es75.js +35 -38
- package/dist/index.es75.js.map +1 -1
- package/dist/index.es76.js +5 -34
- package/dist/index.es76.js.map +1 -1
- package/dist/index.es77.js +64 -223
- package/dist/index.es77.js.map +1 -1
- package/dist/index.es78.js +36 -29
- package/dist/index.es78.js.map +1 -1
- package/dist/index.es79.js +11 -74
- package/dist/index.es79.js.map +1 -1
- package/dist/index.es80.js +37 -73
- package/dist/index.es80.js.map +1 -1
- package/dist/index.es81.js +32 -50
- package/dist/index.es81.js.map +1 -1
- package/dist/index.es82.js +228 -26
- package/dist/index.es82.js.map +1 -1
- package/dist/index.es83.js +6 -19
- package/dist/index.es83.js.map +1 -1
- package/dist/index.es84.js +72 -54
- package/dist/index.es84.js.map +1 -1
- package/dist/index.es85.js +76 -13
- package/dist/index.es85.js.map +1 -1
- package/dist/index.es86.js +47 -132
- package/dist/index.es86.js.map +1 -1
- package/dist/index.es87.js +29 -20
- package/dist/index.es87.js.map +1 -1
- package/dist/index.es88.js +37 -176
- package/dist/index.es88.js.map +1 -1
- package/dist/index.es89.js +49 -233
- package/dist/index.es89.js.map +1 -1
- package/dist/index.es90.js +13 -355
- package/dist/index.es90.js.map +1 -1
- package/dist/index.es91.js +128 -128
- package/dist/index.es91.js.map +1 -1
- package/dist/index.es92.js +21 -70
- package/dist/index.es92.js.map +1 -1
- package/dist/index.es93.js +179 -34
- package/dist/index.es93.js.map +1 -1
- package/dist/index.es94.js +230 -26
- package/dist/index.es94.js.map +1 -1
- package/dist/index.es95.js +346 -157
- package/dist/index.es95.js.map +1 -1
- package/dist/index.es96.js +129 -195
- package/dist/index.es96.js.map +1 -1
- package/dist/index.es97.js +70 -14
- package/dist/index.es97.js.map +1 -1
- package/dist/index.es98.js +35 -28
- package/dist/index.es98.js.map +1 -1
- package/dist/index.es99.js +34 -31
- package/dist/index.es99.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +8 -11
package/dist/index.es184.js
CHANGED
|
@@ -1,246 +1,93 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}
|
|
6
|
-
const ageMs = Date.now() - entry.createdAt;
|
|
7
|
-
return ageMs > ttlSeconds * 1e3;
|
|
8
|
-
}
|
|
9
|
-
class Cache {
|
|
10
|
-
constructor(config = {}) {
|
|
11
|
-
Object.defineProperty(this, "cache", {
|
|
12
|
-
enumerable: true,
|
|
13
|
-
configurable: true,
|
|
14
|
-
writable: true,
|
|
15
|
-
value: /* @__PURE__ */ new Map()
|
|
16
|
-
});
|
|
17
|
-
Object.defineProperty(this, "maxSize", {
|
|
1
|
+
class LangSmithConflictError extends Error {
|
|
2
|
+
constructor(message) {
|
|
3
|
+
super(message);
|
|
4
|
+
Object.defineProperty(this, "status", {
|
|
18
5
|
enumerable: true,
|
|
19
6
|
configurable: true,
|
|
20
7
|
writable: true,
|
|
21
8
|
value: void 0
|
|
22
9
|
});
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
configurable: true,
|
|
32
|
-
writable: true,
|
|
33
|
-
value: void 0
|
|
34
|
-
});
|
|
35
|
-
Object.defineProperty(this, "fetchFunc", {
|
|
36
|
-
enumerable: true,
|
|
37
|
-
configurable: true,
|
|
38
|
-
writable: true,
|
|
39
|
-
value: void 0
|
|
40
|
-
});
|
|
41
|
-
Object.defineProperty(this, "refreshTimer", {
|
|
10
|
+
this.name = "LangSmithConflictError";
|
|
11
|
+
this.status = 409;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
class LangSmithNotFoundError extends Error {
|
|
15
|
+
constructor(message) {
|
|
16
|
+
super(message);
|
|
17
|
+
Object.defineProperty(this, "status", {
|
|
42
18
|
enumerable: true,
|
|
43
19
|
configurable: true,
|
|
44
20
|
writable: true,
|
|
45
21
|
value: void 0
|
|
46
22
|
});
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
configurable: true,
|
|
50
|
-
writable: true,
|
|
51
|
-
value: {
|
|
52
|
-
hits: 0,
|
|
53
|
-
misses: 0,
|
|
54
|
-
refreshes: 0,
|
|
55
|
-
refreshErrors: 0
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
this.maxSize = config.maxSize ?? 100;
|
|
59
|
-
this.ttlSeconds = config.ttlSeconds ?? 3600;
|
|
60
|
-
this.refreshIntervalSeconds = config.refreshIntervalSeconds ?? 60;
|
|
61
|
-
this.fetchFunc = config.fetchFunc;
|
|
62
|
-
if (this.fetchFunc && this.ttlSeconds !== null) {
|
|
63
|
-
this.startRefreshLoop();
|
|
64
|
-
}
|
|
23
|
+
this.name = "LangSmithNotFoundError";
|
|
24
|
+
this.status = 404;
|
|
65
25
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
get totalRequests() {
|
|
76
|
-
return this._metrics.hits + this._metrics.misses;
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Get cache hit rate (0.0 to 1.0).
|
|
80
|
-
*/
|
|
81
|
-
get hitRate() {
|
|
82
|
-
const total = this.totalRequests;
|
|
83
|
-
return total > 0 ? this._metrics.hits / total : 0;
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Reset all metrics to zero.
|
|
87
|
-
*/
|
|
88
|
-
resetMetrics() {
|
|
89
|
-
this._metrics = {
|
|
90
|
-
hits: 0,
|
|
91
|
-
misses: 0,
|
|
92
|
-
refreshes: 0,
|
|
93
|
-
refreshErrors: 0
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Get a value from cache.
|
|
98
|
-
*
|
|
99
|
-
* Returns the cached value or undefined if not found.
|
|
100
|
-
* Stale entries are still returned (background refresh handles updates).
|
|
101
|
-
*/
|
|
102
|
-
get(key) {
|
|
103
|
-
const entry = this.cache.get(key);
|
|
104
|
-
if (!entry) {
|
|
105
|
-
this._metrics.misses += 1;
|
|
106
|
-
return void 0;
|
|
26
|
+
}
|
|
27
|
+
function isLangSmithNotFoundError(error) {
|
|
28
|
+
return error != null && typeof error === "object" && "name" in error && error?.name === "LangSmithNotFoundError";
|
|
29
|
+
}
|
|
30
|
+
async function raiseForStatus(response, context, consumeOnSuccess) {
|
|
31
|
+
let errorBody;
|
|
32
|
+
if (response.ok) {
|
|
33
|
+
if (consumeOnSuccess) {
|
|
34
|
+
errorBody = await response.text();
|
|
107
35
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
set(key, value) {
|
|
117
|
-
if (!this.cache.has(key) && this.cache.size >= this.maxSize) {
|
|
118
|
-
const oldestKey = this.cache.keys().next().value;
|
|
119
|
-
if (oldestKey !== void 0) {
|
|
120
|
-
this.cache.delete(oldestKey);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (response.status === 403) {
|
|
39
|
+
try {
|
|
40
|
+
const errorData = await response.json();
|
|
41
|
+
const errorCode = errorData?.error;
|
|
42
|
+
if (errorCode === "org_scoped_key_requires_workspace") {
|
|
43
|
+
errorBody = "This API key is org-scoped and requires workspace specification. Please provide 'workspaceId' parameter, or set LANGSMITH_WORKSPACE_ID environment variable.";
|
|
121
44
|
}
|
|
45
|
+
} catch (e) {
|
|
46
|
+
const errorWithStatus = new Error(`${response.status} ${response.statusText}`);
|
|
47
|
+
errorWithStatus.status = response?.status;
|
|
48
|
+
throw errorWithStatus;
|
|
122
49
|
}
|
|
123
|
-
const entry = {
|
|
124
|
-
value,
|
|
125
|
-
createdAt: Date.now()
|
|
126
|
-
};
|
|
127
|
-
this.cache.delete(key);
|
|
128
|
-
this.cache.set(key, entry);
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Remove a specific entry from cache.
|
|
132
|
-
*/
|
|
133
|
-
invalidate(key) {
|
|
134
|
-
this.cache.delete(key);
|
|
135
50
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* Get the number of entries in the cache.
|
|
144
|
-
*/
|
|
145
|
-
get size() {
|
|
146
|
-
return this.cache.size;
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Stop background refresh.
|
|
150
|
-
* Should be called when the client is being cleaned up.
|
|
151
|
-
*/
|
|
152
|
-
stop() {
|
|
153
|
-
if (this.refreshTimer) {
|
|
154
|
-
clearInterval(this.refreshTimer);
|
|
155
|
-
this.refreshTimer = void 0;
|
|
51
|
+
if (errorBody === void 0) {
|
|
52
|
+
try {
|
|
53
|
+
errorBody = await response.text();
|
|
54
|
+
} catch (e) {
|
|
55
|
+
errorBody = "";
|
|
156
56
|
}
|
|
157
57
|
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
dump(filePath) {
|
|
162
|
-
for (const [key, entry] of this.cache.entries()) {
|
|
163
|
-
entry.value;
|
|
164
|
-
}
|
|
165
|
-
dumpCache();
|
|
58
|
+
const fullMessage = `Failed to ${context}. Received status [${response.status}]: ${response.statusText}. Message: ${errorBody}`;
|
|
59
|
+
if (response.status === 404) {
|
|
60
|
+
throw new LangSmithNotFoundError(fullMessage);
|
|
166
61
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
*
|
|
170
|
-
* Loaded entries get a fresh TTL starting from load time.
|
|
171
|
-
*
|
|
172
|
-
* @returns Number of entries loaded.
|
|
173
|
-
*/
|
|
174
|
-
load(filePath) {
|
|
175
|
-
const entries = loadCache();
|
|
176
|
-
if (!entries) {
|
|
177
|
-
return 0;
|
|
178
|
-
}
|
|
179
|
-
let loaded = 0;
|
|
180
|
-
const now = Date.now();
|
|
181
|
-
for (const [key, value] of Object.entries(entries)) {
|
|
182
|
-
if (this.cache.size >= this.maxSize) {
|
|
183
|
-
break;
|
|
184
|
-
}
|
|
185
|
-
const entry = {
|
|
186
|
-
value,
|
|
187
|
-
createdAt: now
|
|
188
|
-
// Fresh TTL from load time
|
|
189
|
-
};
|
|
190
|
-
this.cache.set(key, entry);
|
|
191
|
-
loaded += 1;
|
|
192
|
-
}
|
|
193
|
-
return loaded;
|
|
62
|
+
if (response.status === 409) {
|
|
63
|
+
throw new LangSmithConflictError(fullMessage);
|
|
194
64
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
*/
|
|
211
|
-
getStaleKeys() {
|
|
212
|
-
const staleKeys = [];
|
|
213
|
-
for (const [key, entry] of this.cache.entries()) {
|
|
214
|
-
if (isStale(entry, this.ttlSeconds)) {
|
|
215
|
-
staleKeys.push(key);
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
return staleKeys;
|
|
219
|
-
}
|
|
220
|
-
/**
|
|
221
|
-
* Check for stale entries and refresh them.
|
|
222
|
-
*/
|
|
223
|
-
async refreshStaleEntries() {
|
|
224
|
-
if (!this.fetchFunc) {
|
|
225
|
-
return;
|
|
226
|
-
}
|
|
227
|
-
const staleKeys = this.getStaleKeys();
|
|
228
|
-
if (staleKeys.length === 0) {
|
|
229
|
-
return;
|
|
230
|
-
}
|
|
231
|
-
for (const key of staleKeys) {
|
|
232
|
-
try {
|
|
233
|
-
const newValue = await this.fetchFunc(key);
|
|
234
|
-
this.set(key, newValue);
|
|
235
|
-
this._metrics.refreshes += 1;
|
|
236
|
-
} catch (e) {
|
|
237
|
-
this._metrics.refreshErrors += 1;
|
|
238
|
-
console.warn(`Failed to refresh cache entry ${key}:`, e);
|
|
239
|
-
}
|
|
240
|
-
}
|
|
65
|
+
const err = new Error(fullMessage);
|
|
66
|
+
err.status = response.status;
|
|
67
|
+
throw err;
|
|
68
|
+
}
|
|
69
|
+
const ERR_CONFLICTING_ENDPOINTS = "ERR_CONFLICTING_ENDPOINTS";
|
|
70
|
+
class ConflictingEndpointsError extends Error {
|
|
71
|
+
constructor() {
|
|
72
|
+
super("You cannot provide both LANGSMITH_ENDPOINT / LANGCHAIN_ENDPOINT and LANGSMITH_RUNS_ENDPOINTS.");
|
|
73
|
+
Object.defineProperty(this, "code", {
|
|
74
|
+
enumerable: true,
|
|
75
|
+
configurable: true,
|
|
76
|
+
writable: true,
|
|
77
|
+
value: ERR_CONFLICTING_ENDPOINTS
|
|
78
|
+
});
|
|
79
|
+
this.name = "ConflictingEndpointsError";
|
|
241
80
|
}
|
|
242
81
|
}
|
|
82
|
+
function isConflictingEndpointsError(err) {
|
|
83
|
+
return typeof err === "object" && err !== null && err.code === ERR_CONFLICTING_ENDPOINTS;
|
|
84
|
+
}
|
|
243
85
|
export {
|
|
244
|
-
|
|
86
|
+
ConflictingEndpointsError,
|
|
87
|
+
LangSmithConflictError,
|
|
88
|
+
LangSmithNotFoundError,
|
|
89
|
+
isConflictingEndpointsError,
|
|
90
|
+
isLangSmithNotFoundError,
|
|
91
|
+
raiseForStatus
|
|
245
92
|
};
|
|
246
93
|
//# sourceMappingURL=index.es184.js.map
|
package/dist/index.es184.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es184.js","sources":["../node_modules/.pnpm/langsmith@0.4.6_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/prompts_cache.js"],"sourcesContent":["/**\n * Prompt caching module for LangSmith SDK.\n *\n * Provides an LRU cache with background refresh for prompt caching.\n * Uses stale-while-revalidate pattern for optimal performance.\n *\n * Works in all environments. File operations (dump/load) use helpers\n * that are swapped for browser builds via package.json browser field.\n */\nimport { dumpCache, loadCache } from \"./prompts_cache_fs.js\";\n/**\n * Check if a cache entry is stale based on TTL.\n */\nfunction isStale(entry, ttlSeconds) {\n if (ttlSeconds === null) {\n return false; // Infinite TTL, never stale\n }\n const ageMs = Date.now() - entry.createdAt;\n return ageMs > ttlSeconds * 1000;\n}\n/**\n * LRU cache with background refresh for prompts.\n *\n * Features:\n * - In-memory LRU cache with configurable max size\n * - Background refresh using setInterval\n * - Stale-while-revalidate: returns stale data while refresh happens\n * - JSON dump/load for offline use\n *\n * @example\n * ```typescript\n * const cache = new Cache({\n * maxSize: 100,\n * ttlSeconds: 3600,\n * fetchFunc: async (key) => client.pullPromptCommit(key),\n * });\n *\n * // Use the cache\n * cache.set(\"my-prompt:latest\", promptCommit);\n * const cached = cache.get(\"my-prompt:latest\");\n *\n * // Cleanup\n * cache.stop();\n * ```\n */\nexport class Cache {\n constructor(config = {}) {\n Object.defineProperty(this, \"cache\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: new Map()\n });\n Object.defineProperty(this, \"maxSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"ttlSeconds\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"refreshIntervalSeconds\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"fetchFunc\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"refreshTimer\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_metrics\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: {\n hits: 0,\n misses: 0,\n refreshes: 0,\n refreshErrors: 0,\n }\n });\n this.maxSize = config.maxSize ?? 100;\n this.ttlSeconds = config.ttlSeconds ?? 3600;\n this.refreshIntervalSeconds = config.refreshIntervalSeconds ?? 60;\n this.fetchFunc = config.fetchFunc;\n // Start background refresh if fetch function provided and TTL is set\n if (this.fetchFunc && this.ttlSeconds !== null) {\n this.startRefreshLoop();\n }\n }\n /**\n * Get cache performance metrics.\n */\n get metrics() {\n return { ...this._metrics };\n }\n /**\n * Get total cache requests (hits + misses).\n */\n get totalRequests() {\n return this._metrics.hits + this._metrics.misses;\n }\n /**\n * Get cache hit rate (0.0 to 1.0).\n */\n get hitRate() {\n const total = this.totalRequests;\n return total > 0 ? this._metrics.hits / total : 0;\n }\n /**\n * Reset all metrics to zero.\n */\n resetMetrics() {\n this._metrics = {\n hits: 0,\n misses: 0,\n refreshes: 0,\n refreshErrors: 0,\n };\n }\n /**\n * Get a value from cache.\n *\n * Returns the cached value or undefined if not found.\n * Stale entries are still returned (background refresh handles updates).\n */\n get(key) {\n const entry = this.cache.get(key);\n if (!entry) {\n this._metrics.misses += 1;\n return undefined;\n }\n // Move to end for LRU (delete and re-add)\n this.cache.delete(key);\n this.cache.set(key, entry);\n this._metrics.hits += 1;\n return entry.value;\n }\n /**\n * Set a value in the cache.\n */\n set(key, value) {\n // Check if we need to evict (and key is new)\n if (!this.cache.has(key) && this.cache.size >= this.maxSize) {\n // Evict oldest (first item in Map)\n const oldestKey = this.cache.keys().next().value;\n if (oldestKey !== undefined) {\n this.cache.delete(oldestKey);\n }\n }\n const entry = {\n value,\n createdAt: Date.now(),\n };\n // Delete first to ensure it's at the end\n this.cache.delete(key);\n this.cache.set(key, entry);\n }\n /**\n * Remove a specific entry from cache.\n */\n invalidate(key) {\n this.cache.delete(key);\n }\n /**\n * Clear all cache entries.\n */\n clear() {\n this.cache.clear();\n }\n /**\n * Get the number of entries in the cache.\n */\n get size() {\n return this.cache.size;\n }\n /**\n * Stop background refresh.\n * Should be called when the client is being cleaned up.\n */\n stop() {\n if (this.refreshTimer) {\n clearInterval(this.refreshTimer);\n this.refreshTimer = undefined;\n }\n }\n /**\n * Dump cache contents to a JSON file for offline use.\n */\n dump(filePath) {\n const entries = {};\n for (const [key, entry] of this.cache.entries()) {\n entries[key] = entry.value;\n }\n dumpCache(filePath, entries);\n }\n /**\n * Load cache contents from a JSON file.\n *\n * Loaded entries get a fresh TTL starting from load time.\n *\n * @returns Number of entries loaded.\n */\n load(filePath) {\n const entries = loadCache(filePath);\n if (!entries) {\n return 0;\n }\n let loaded = 0;\n const now = Date.now();\n for (const [key, value] of Object.entries(entries)) {\n if (this.cache.size >= this.maxSize) {\n break;\n }\n const entry = {\n value: value,\n createdAt: now, // Fresh TTL from load time\n };\n this.cache.set(key, entry);\n loaded += 1;\n }\n return loaded;\n }\n /**\n * Start the background refresh loop.\n */\n startRefreshLoop() {\n this.refreshTimer = setInterval(() => {\n this.refreshStaleEntries().catch((e) => {\n // Log but don't die - keep the refresh loop running\n console.warn(\"Unexpected error in cache refresh loop:\", e);\n });\n }, this.refreshIntervalSeconds * 1000);\n // Don't block Node.js from exiting\n if (this.refreshTimer.unref) {\n this.refreshTimer.unref();\n }\n }\n /**\n * Get list of stale cache keys.\n */\n getStaleKeys() {\n const staleKeys = [];\n for (const [key, entry] of this.cache.entries()) {\n if (isStale(entry, this.ttlSeconds)) {\n staleKeys.push(key);\n }\n }\n return staleKeys;\n }\n /**\n * Check for stale entries and refresh them.\n */\n async refreshStaleEntries() {\n if (!this.fetchFunc) {\n return;\n }\n const staleKeys = this.getStaleKeys();\n if (staleKeys.length === 0) {\n return;\n }\n for (const key of staleKeys) {\n try {\n const newValue = await this.fetchFunc(key);\n this.set(key, newValue);\n this._metrics.refreshes += 1;\n }\n catch (e) {\n // Keep stale data on refresh failure\n this._metrics.refreshErrors += 1;\n console.warn(`Failed to refresh cache entry ${key}:`, e);\n }\n }\n }\n}\n"],"names":[],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"index.es184.js","sources":["../node_modules/.pnpm/langsmith@0.4.6_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/error.js"],"sourcesContent":["function getErrorStackTrace(e) {\n if (typeof e !== \"object\" || e == null)\n return undefined;\n if (!(\"stack\" in e) || typeof e.stack !== \"string\")\n return undefined;\n let stack = e.stack;\n const prevLine = `${e}`;\n if (stack.startsWith(prevLine)) {\n stack = stack.slice(prevLine.length);\n }\n if (stack.startsWith(\"\\n\")) {\n stack = stack.slice(1);\n }\n return stack;\n}\nexport function printErrorStackTrace(e) {\n const stack = getErrorStackTrace(e);\n if (stack == null)\n return;\n console.error(stack);\n}\n/**\n * LangSmithConflictError\n *\n * Represents an error that occurs when there's a conflict during an operation,\n * typically corresponding to HTTP 409 status code responses.\n *\n * This error is thrown when an attempt to create or modify a resource conflicts\n * with the current state of the resource on the server. Common scenarios include:\n * - Attempting to create a resource that already exists\n * - Trying to update a resource that has been modified by another process\n * - Violating a uniqueness constraint in the data\n *\n * @extends Error\n *\n * @example\n * try {\n * await createProject(\"existingProject\");\n * } catch (error) {\n * if (error instanceof ConflictError) {\n * console.log(\"A conflict occurred:\", error.message);\n * // Handle the conflict, e.g., by suggesting a different project name\n * } else {\n * // Handle other types of errors\n * }\n * }\n *\n * @property {string} name - Always set to 'ConflictError' for easy identification\n * @property {string} message - Detailed error message including server response\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/409\n */\nexport class LangSmithConflictError extends Error {\n constructor(message) {\n super(message);\n Object.defineProperty(this, \"status\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.name = \"LangSmithConflictError\";\n this.status = 409;\n }\n}\n/**\n * LangSmithNotFoundError\n *\n * Represents an error that occurs when a requested resource is not found,\n * typically corresponding to HTTP 404 status code responses.\n *\n * @extends Error\n */\nexport class LangSmithNotFoundError extends Error {\n constructor(message) {\n super(message);\n Object.defineProperty(this, \"status\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.name = \"LangSmithNotFoundError\";\n this.status = 404;\n }\n}\nexport function isLangSmithNotFoundError(error) {\n return (error != null &&\n typeof error === \"object\" &&\n \"name\" in error &&\n error?.name === \"LangSmithNotFoundError\");\n}\n/**\n * Throws an appropriate error based on the response status and body.\n *\n * @param response - The fetch Response object\n * @param context - Additional context to include in the error message (e.g., operation being performed)\n * @throws {LangSmithConflictError} When the response status is 409\n * @throws {Error} For all other non-ok responses\n */\nexport async function raiseForStatus(response, context, consumeOnSuccess) {\n let errorBody;\n if (response.ok) {\n // consume the response body to release the connection\n // https://undici.nodejs.org/#/?id=garbage-collection\n if (consumeOnSuccess) {\n errorBody = await response.text();\n }\n return;\n }\n if (response.status === 403) {\n try {\n const errorData = await response.json();\n const errorCode = errorData?.error;\n if (errorCode === \"org_scoped_key_requires_workspace\") {\n errorBody =\n \"This API key is org-scoped and requires workspace specification. \" +\n \"Please provide 'workspaceId' parameter, \" +\n \"or set LANGSMITH_WORKSPACE_ID environment variable.\";\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n catch (e) {\n const errorWithStatus = new Error(`${response.status} ${response.statusText}`);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n errorWithStatus.status = response?.status;\n throw errorWithStatus;\n }\n }\n if (errorBody === undefined) {\n try {\n errorBody = await response.text();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n catch (e) {\n errorBody = \"\";\n }\n }\n const fullMessage = `Failed to ${context}. Received status [${response.status}]: ${response.statusText}. Message: ${errorBody}`;\n if (response.status === 404) {\n throw new LangSmithNotFoundError(fullMessage);\n }\n if (response.status === 409) {\n throw new LangSmithConflictError(fullMessage);\n }\n const err = new Error(fullMessage);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n err.status = response.status;\n throw err;\n}\nconst ERR_CONFLICTING_ENDPOINTS = \"ERR_CONFLICTING_ENDPOINTS\";\nexport class ConflictingEndpointsError extends Error {\n constructor() {\n super(\"You cannot provide both LANGSMITH_ENDPOINT / LANGCHAIN_ENDPOINT \" +\n \"and LANGSMITH_RUNS_ENDPOINTS.\");\n Object.defineProperty(this, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: ERR_CONFLICTING_ENDPOINTS\n });\n this.name = \"ConflictingEndpointsError\"; // helpful in logs\n }\n}\nexport function isConflictingEndpointsError(err) {\n return (typeof err === \"object\" &&\n err !== null &&\n err.code === ERR_CONFLICTING_ENDPOINTS);\n}\n"],"names":[],"mappings":"AAoDO,MAAM,+BAA+B,MAAM;AAAA,EAC9C,YAAY,SAAS;AACjB,UAAM,OAAO;AACb,WAAO,eAAe,MAAM,UAAU;AAAA,MAClC,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,UAAU;AAAA,MACV,OAAO;AAAA,IACnB,CAAS;AACD,SAAK,OAAO;AACZ,SAAK,SAAS;AAAA,EAClB;AACJ;AASO,MAAM,+BAA+B,MAAM;AAAA,EAC9C,YAAY,SAAS;AACjB,UAAM,OAAO;AACb,WAAO,eAAe,MAAM,UAAU;AAAA,MAClC,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,UAAU;AAAA,MACV,OAAO;AAAA,IACnB,CAAS;AACD,SAAK,OAAO;AACZ,SAAK,SAAS;AAAA,EAClB;AACJ;AACO,SAAS,yBAAyB,OAAO;AAC5C,SAAQ,SAAS,QACb,OAAO,UAAU,YACjB,UAAU,SACV,OAAO,SAAS;AACxB;AASO,eAAe,eAAe,UAAU,SAAS,kBAAkB;AACtE,MAAI;AACJ,MAAI,SAAS,IAAI;AAGb,QAAI,kBAAkB;AAClB,kBAAY,MAAM,SAAS,KAAI;AAAA,IACnC;AACA;AAAA,EACJ;AACA,MAAI,SAAS,WAAW,KAAK;AACzB,QAAI;AACA,YAAM,YAAY,MAAM,SAAS,KAAI;AACrC,YAAM,YAAY,WAAW;AAC7B,UAAI,cAAc,qCAAqC;AACnD,oBACI;AAAA,MAGR;AAAA,IAEJ,SACO,GAAG;AACN,YAAM,kBAAkB,IAAI,MAAM,GAAG,SAAS,MAAM,IAAI,SAAS,UAAU,EAAE;AAE7E,sBAAgB,SAAS,UAAU;AACnC,YAAM;AAAA,IACV;AAAA,EACJ;AACA,MAAI,cAAc,QAAW;AACzB,QAAI;AACA,kBAAY,MAAM,SAAS,KAAI;AAAA,IAEnC,SACO,GAAG;AACN,kBAAY;AAAA,IAChB;AAAA,EACJ;AACA,QAAM,cAAc,aAAa,OAAO,sBAAsB,SAAS,MAAM,MAAM,SAAS,UAAU,cAAc,SAAS;AAC7H,MAAI,SAAS,WAAW,KAAK;AACzB,UAAM,IAAI,uBAAuB,WAAW;AAAA,EAChD;AACA,MAAI,SAAS,WAAW,KAAK;AACzB,UAAM,IAAI,uBAAuB,WAAW;AAAA,EAChD;AACA,QAAM,MAAM,IAAI,MAAM,WAAW;AAEjC,MAAI,SAAS,SAAS;AACtB,QAAM;AACV;AACA,MAAM,4BAA4B;AAC3B,MAAM,kCAAkC,MAAM;AAAA,EACjD,cAAc;AACV,UAAM,+FAC6B;AACnC,WAAO,eAAe,MAAM,QAAQ;AAAA,MAChC,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,UAAU;AAAA,MACV,OAAO;AAAA,IACnB,CAAS;AACD,SAAK,OAAO;AAAA,EAChB;AACJ;AACO,SAAS,4BAA4B,KAAK;AAC7C,SAAQ,OAAO,QAAQ,YACnB,QAAQ,QACR,IAAI,SAAS;AACrB;","x_google_ignoreList":[0]}
|
package/dist/index.es185.js
CHANGED
|
@@ -1,27 +1,246 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const _globalFetchImplementationIsNodeFetch = () => {
|
|
5
|
-
const fetchImpl = globalThis[LANGSMITH_FETCH_IMPLEMENTATION_KEY];
|
|
6
|
-
if (!fetchImpl)
|
|
1
|
+
import { dumpCache, loadCache } from "./index.es190.js";
|
|
2
|
+
function isStale(entry, ttlSeconds) {
|
|
3
|
+
if (ttlSeconds === null) {
|
|
7
4
|
return false;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
5
|
+
}
|
|
6
|
+
const ageMs = Date.now() - entry.createdAt;
|
|
7
|
+
return ageMs > ttlSeconds * 1e3;
|
|
8
|
+
}
|
|
9
|
+
class Cache {
|
|
10
|
+
constructor(config = {}) {
|
|
11
|
+
Object.defineProperty(this, "cache", {
|
|
12
|
+
enumerable: true,
|
|
13
|
+
configurable: true,
|
|
14
|
+
writable: true,
|
|
15
|
+
value: /* @__PURE__ */ new Map()
|
|
16
|
+
});
|
|
17
|
+
Object.defineProperty(this, "maxSize", {
|
|
18
|
+
enumerable: true,
|
|
19
|
+
configurable: true,
|
|
20
|
+
writable: true,
|
|
21
|
+
value: void 0
|
|
22
|
+
});
|
|
23
|
+
Object.defineProperty(this, "ttlSeconds", {
|
|
24
|
+
enumerable: true,
|
|
25
|
+
configurable: true,
|
|
26
|
+
writable: true,
|
|
27
|
+
value: void 0
|
|
28
|
+
});
|
|
29
|
+
Object.defineProperty(this, "refreshIntervalSeconds", {
|
|
30
|
+
enumerable: true,
|
|
31
|
+
configurable: true,
|
|
32
|
+
writable: true,
|
|
33
|
+
value: void 0
|
|
34
|
+
});
|
|
35
|
+
Object.defineProperty(this, "fetchFunc", {
|
|
36
|
+
enumerable: true,
|
|
37
|
+
configurable: true,
|
|
38
|
+
writable: true,
|
|
39
|
+
value: void 0
|
|
40
|
+
});
|
|
41
|
+
Object.defineProperty(this, "refreshTimer", {
|
|
42
|
+
enumerable: true,
|
|
43
|
+
configurable: true,
|
|
44
|
+
writable: true,
|
|
45
|
+
value: void 0
|
|
46
|
+
});
|
|
47
|
+
Object.defineProperty(this, "_metrics", {
|
|
48
|
+
enumerable: true,
|
|
49
|
+
configurable: true,
|
|
50
|
+
writable: true,
|
|
51
|
+
value: {
|
|
52
|
+
hits: 0,
|
|
53
|
+
misses: 0,
|
|
54
|
+
refreshes: 0,
|
|
55
|
+
refreshErrors: 0
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
this.maxSize = config.maxSize ?? 100;
|
|
59
|
+
this.ttlSeconds = config.ttlSeconds ?? 3600;
|
|
60
|
+
this.refreshIntervalSeconds = config.refreshIntervalSeconds ?? 60;
|
|
61
|
+
this.fetchFunc = config.fetchFunc;
|
|
62
|
+
if (this.fetchFunc && this.ttlSeconds !== null) {
|
|
63
|
+
this.startRefreshLoop();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get cache performance metrics.
|
|
68
|
+
*/
|
|
69
|
+
get metrics() {
|
|
70
|
+
return { ...this._metrics };
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get total cache requests (hits + misses).
|
|
74
|
+
*/
|
|
75
|
+
get totalRequests() {
|
|
76
|
+
return this._metrics.hits + this._metrics.misses;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Get cache hit rate (0.0 to 1.0).
|
|
80
|
+
*/
|
|
81
|
+
get hitRate() {
|
|
82
|
+
const total = this.totalRequests;
|
|
83
|
+
return total > 0 ? this._metrics.hits / total : 0;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Reset all metrics to zero.
|
|
87
|
+
*/
|
|
88
|
+
resetMetrics() {
|
|
89
|
+
this._metrics = {
|
|
90
|
+
hits: 0,
|
|
91
|
+
misses: 0,
|
|
92
|
+
refreshes: 0,
|
|
93
|
+
refreshErrors: 0
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Get a value from cache.
|
|
98
|
+
*
|
|
99
|
+
* Returns the cached value or undefined if not found.
|
|
100
|
+
* Stale entries are still returned (background refresh handles updates).
|
|
101
|
+
*/
|
|
102
|
+
get(key) {
|
|
103
|
+
const entry = this.cache.get(key);
|
|
104
|
+
if (!entry) {
|
|
105
|
+
this._metrics.misses += 1;
|
|
106
|
+
return void 0;
|
|
107
|
+
}
|
|
108
|
+
this.cache.delete(key);
|
|
109
|
+
this.cache.set(key, entry);
|
|
110
|
+
this._metrics.hits += 1;
|
|
111
|
+
return entry.value;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Set a value in the cache.
|
|
115
|
+
*/
|
|
116
|
+
set(key, value) {
|
|
117
|
+
if (!this.cache.has(key) && this.cache.size >= this.maxSize) {
|
|
118
|
+
const oldestKey = this.cache.keys().next().value;
|
|
119
|
+
if (oldestKey !== void 0) {
|
|
120
|
+
this.cache.delete(oldestKey);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
const entry = {
|
|
124
|
+
value,
|
|
125
|
+
createdAt: Date.now()
|
|
126
|
+
};
|
|
127
|
+
this.cache.delete(key);
|
|
128
|
+
this.cache.set(key, entry);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Remove a specific entry from cache.
|
|
132
|
+
*/
|
|
133
|
+
invalidate(key) {
|
|
134
|
+
this.cache.delete(key);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Clear all cache entries.
|
|
138
|
+
*/
|
|
139
|
+
clear() {
|
|
140
|
+
this.cache.clear();
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Get the number of entries in the cache.
|
|
144
|
+
*/
|
|
145
|
+
get size() {
|
|
146
|
+
return this.cache.size;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Stop background refresh.
|
|
150
|
+
* Should be called when the client is being cleaned up.
|
|
151
|
+
*/
|
|
152
|
+
stop() {
|
|
153
|
+
if (this.refreshTimer) {
|
|
154
|
+
clearInterval(this.refreshTimer);
|
|
155
|
+
this.refreshTimer = void 0;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Dump cache contents to a JSON file for offline use.
|
|
160
|
+
*/
|
|
161
|
+
dump(filePath) {
|
|
162
|
+
for (const [key, entry] of this.cache.entries()) {
|
|
163
|
+
entry.value;
|
|
164
|
+
}
|
|
165
|
+
dumpCache();
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Load cache contents from a JSON file.
|
|
169
|
+
*
|
|
170
|
+
* Loaded entries get a fresh TTL starting from load time.
|
|
171
|
+
*
|
|
172
|
+
* @returns Number of entries loaded.
|
|
173
|
+
*/
|
|
174
|
+
load(filePath) {
|
|
175
|
+
const entries = loadCache();
|
|
176
|
+
if (!entries) {
|
|
177
|
+
return 0;
|
|
178
|
+
}
|
|
179
|
+
let loaded = 0;
|
|
180
|
+
const now = Date.now();
|
|
181
|
+
for (const [key, value] of Object.entries(entries)) {
|
|
182
|
+
if (this.cache.size >= this.maxSize) {
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
const entry = {
|
|
186
|
+
value,
|
|
187
|
+
createdAt: now
|
|
188
|
+
// Fresh TTL from load time
|
|
189
|
+
};
|
|
190
|
+
this.cache.set(key, entry);
|
|
191
|
+
loaded += 1;
|
|
192
|
+
}
|
|
193
|
+
return loaded;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Start the background refresh loop.
|
|
197
|
+
*/
|
|
198
|
+
startRefreshLoop() {
|
|
199
|
+
this.refreshTimer = setInterval(() => {
|
|
200
|
+
this.refreshStaleEntries().catch((e) => {
|
|
201
|
+
console.warn("Unexpected error in cache refresh loop:", e);
|
|
202
|
+
});
|
|
203
|
+
}, this.refreshIntervalSeconds * 1e3);
|
|
204
|
+
if (this.refreshTimer.unref) {
|
|
205
|
+
this.refreshTimer.unref();
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Get list of stale cache keys.
|
|
210
|
+
*/
|
|
211
|
+
getStaleKeys() {
|
|
212
|
+
const staleKeys = [];
|
|
213
|
+
for (const [key, entry] of this.cache.entries()) {
|
|
214
|
+
if (isStale(entry, this.ttlSeconds)) {
|
|
215
|
+
staleKeys.push(key);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
return staleKeys;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Check for stale entries and refresh them.
|
|
222
|
+
*/
|
|
223
|
+
async refreshStaleEntries() {
|
|
224
|
+
if (!this.fetchFunc) {
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
const staleKeys = this.getStaleKeys();
|
|
228
|
+
if (staleKeys.length === 0) {
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
for (const key of staleKeys) {
|
|
232
|
+
try {
|
|
233
|
+
const newValue = await this.fetchFunc(key);
|
|
234
|
+
this.set(key, newValue);
|
|
235
|
+
this._metrics.refreshes += 1;
|
|
236
|
+
} catch (e) {
|
|
237
|
+
this._metrics.refreshErrors += 1;
|
|
238
|
+
console.warn(`Failed to refresh cache entry ${key}:`, e);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
23
243
|
export {
|
|
24
|
-
|
|
25
|
-
_globalFetchImplementationIsNodeFetch
|
|
244
|
+
Cache
|
|
26
245
|
};
|
|
27
246
|
//# sourceMappingURL=index.es185.js.map
|
package/dist/index.es185.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es185.js","sources":["../node_modules/.pnpm/langsmith@0.4.6_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/singletons/fetch.js"],"sourcesContent":["import { getLangSmithEnvironmentVariable } from \"../utils/env.js\";\n// Wrap the default fetch call due to issues with illegal invocations\n// in some environments:\n// https://stackoverflow.com/questions/69876859/why-does-bind-fix-failed-to-execute-fetch-on-window-illegal-invocation-err\n// @ts-expect-error Broad typing to support a range of fetch implementations\nconst DEFAULT_FETCH_IMPLEMENTATION = (...args) => fetch(...args);\nconst LANGSMITH_FETCH_IMPLEMENTATION_KEY = Symbol.for(\"ls:fetch_implementation\");\n/**\n * Overrides the fetch implementation used for LangSmith calls.\n * You should use this if you need to use an implementation of fetch\n * other than the default global (e.g. for dealing with proxies).\n * @param fetch The new fetch functino to use.\n */\nexport const overrideFetchImplementation = (fetch) => {\n globalThis[LANGSMITH_FETCH_IMPLEMENTATION_KEY] = fetch;\n};\nexport const clearFetchImplementation = () => {\n delete globalThis[LANGSMITH_FETCH_IMPLEMENTATION_KEY];\n};\nexport const _globalFetchImplementationIsNodeFetch = () => {\n const fetchImpl = globalThis[LANGSMITH_FETCH_IMPLEMENTATION_KEY];\n if (!fetchImpl)\n return false;\n // Check if the implementation has node-fetch specific properties\n return (typeof fetchImpl === \"function\" &&\n \"Headers\" in fetchImpl &&\n \"Request\" in fetchImpl &&\n \"Response\" in fetchImpl);\n};\n/**\n * @internal\n */\nexport const _getFetchImplementation = (debug) => {\n return async (...args) => {\n if (debug || getLangSmithEnvironmentVariable(\"DEBUG\") === \"true\") {\n const [url, options] = args;\n console.log(`→ ${options?.method || \"GET\"} ${url}`);\n }\n const res = await (globalThis[LANGSMITH_FETCH_IMPLEMENTATION_KEY] ??\n DEFAULT_FETCH_IMPLEMENTATION)(...args);\n if (debug || getLangSmithEnvironmentVariable(\"DEBUG\") === \"true\") {\n console.log(`← ${res.status} ${res.statusText} ${res.url}`);\n }\n return res;\n };\n};\n"],"names":[],"mappings":";AAKA,MAAM,+BAA+B,IAAI,SAAS,MAAM,GAAG,IAAI;AAC/D,MAAM,qCAAqC,uBAAO,IAAI,yBAAyB;AAanE,MAAC,wCAAwC,MAAM;AACvD,QAAM,YAAY,WAAW,kCAAkC;AAC/D,MAAI,CAAC;AACD,WAAO;AAEX,SAAQ,OAAO,cAAc,cACzB,aAAa,aACb,aAAa,aACb,cAAc;AACtB;AAIY,MAAC,0BAA0B,CAAC,UAAU;AAC9C,SAAO,UAAU,SAAS;AACtB,QAAI,SAAS,gCAAgC,OAAO,MAAM,QAAQ;AAC9D,YAAM,CAAC,KAAK,OAAO,IAAI;AACvB,cAAQ,IAAI,KAAK,SAAS,UAAU,KAAK,IAAI,GAAG,EAAE;AAAA,IACtD;AACA,UAAM,MAAM,OAAO,WAAW,kCAAkC,KAC5D,8BAA8B,GAAG,IAAI;AACzC,QAAI,SAAS,gCAAgC,OAAO,MAAM,QAAQ;AAC9D,cAAQ,IAAI,KAAK,IAAI,MAAM,IAAI,IAAI,UAAU,IAAI,IAAI,GAAG,EAAE;AAAA,IAC9D;AACA,WAAO;AAAA,EACX;AACJ;","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"index.es185.js","sources":["../node_modules/.pnpm/langsmith@0.4.6_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/prompts_cache.js"],"sourcesContent":["/**\n * Prompt caching module for LangSmith SDK.\n *\n * Provides an LRU cache with background refresh for prompt caching.\n * Uses stale-while-revalidate pattern for optimal performance.\n *\n * Works in all environments. File operations (dump/load) use helpers\n * that are swapped for browser builds via package.json browser field.\n */\nimport { dumpCache, loadCache } from \"./prompts_cache_fs.js\";\n/**\n * Check if a cache entry is stale based on TTL.\n */\nfunction isStale(entry, ttlSeconds) {\n if (ttlSeconds === null) {\n return false; // Infinite TTL, never stale\n }\n const ageMs = Date.now() - entry.createdAt;\n return ageMs > ttlSeconds * 1000;\n}\n/**\n * LRU cache with background refresh for prompts.\n *\n * Features:\n * - In-memory LRU cache with configurable max size\n * - Background refresh using setInterval\n * - Stale-while-revalidate: returns stale data while refresh happens\n * - JSON dump/load for offline use\n *\n * @example\n * ```typescript\n * const cache = new Cache({\n * maxSize: 100,\n * ttlSeconds: 3600,\n * fetchFunc: async (key) => client.pullPromptCommit(key),\n * });\n *\n * // Use the cache\n * cache.set(\"my-prompt:latest\", promptCommit);\n * const cached = cache.get(\"my-prompt:latest\");\n *\n * // Cleanup\n * cache.stop();\n * ```\n */\nexport class Cache {\n constructor(config = {}) {\n Object.defineProperty(this, \"cache\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: new Map()\n });\n Object.defineProperty(this, \"maxSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"ttlSeconds\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"refreshIntervalSeconds\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"fetchFunc\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"refreshTimer\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_metrics\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: {\n hits: 0,\n misses: 0,\n refreshes: 0,\n refreshErrors: 0,\n }\n });\n this.maxSize = config.maxSize ?? 100;\n this.ttlSeconds = config.ttlSeconds ?? 3600;\n this.refreshIntervalSeconds = config.refreshIntervalSeconds ?? 60;\n this.fetchFunc = config.fetchFunc;\n // Start background refresh if fetch function provided and TTL is set\n if (this.fetchFunc && this.ttlSeconds !== null) {\n this.startRefreshLoop();\n }\n }\n /**\n * Get cache performance metrics.\n */\n get metrics() {\n return { ...this._metrics };\n }\n /**\n * Get total cache requests (hits + misses).\n */\n get totalRequests() {\n return this._metrics.hits + this._metrics.misses;\n }\n /**\n * Get cache hit rate (0.0 to 1.0).\n */\n get hitRate() {\n const total = this.totalRequests;\n return total > 0 ? this._metrics.hits / total : 0;\n }\n /**\n * Reset all metrics to zero.\n */\n resetMetrics() {\n this._metrics = {\n hits: 0,\n misses: 0,\n refreshes: 0,\n refreshErrors: 0,\n };\n }\n /**\n * Get a value from cache.\n *\n * Returns the cached value or undefined if not found.\n * Stale entries are still returned (background refresh handles updates).\n */\n get(key) {\n const entry = this.cache.get(key);\n if (!entry) {\n this._metrics.misses += 1;\n return undefined;\n }\n // Move to end for LRU (delete and re-add)\n this.cache.delete(key);\n this.cache.set(key, entry);\n this._metrics.hits += 1;\n return entry.value;\n }\n /**\n * Set a value in the cache.\n */\n set(key, value) {\n // Check if we need to evict (and key is new)\n if (!this.cache.has(key) && this.cache.size >= this.maxSize) {\n // Evict oldest (first item in Map)\n const oldestKey = this.cache.keys().next().value;\n if (oldestKey !== undefined) {\n this.cache.delete(oldestKey);\n }\n }\n const entry = {\n value,\n createdAt: Date.now(),\n };\n // Delete first to ensure it's at the end\n this.cache.delete(key);\n this.cache.set(key, entry);\n }\n /**\n * Remove a specific entry from cache.\n */\n invalidate(key) {\n this.cache.delete(key);\n }\n /**\n * Clear all cache entries.\n */\n clear() {\n this.cache.clear();\n }\n /**\n * Get the number of entries in the cache.\n */\n get size() {\n return this.cache.size;\n }\n /**\n * Stop background refresh.\n * Should be called when the client is being cleaned up.\n */\n stop() {\n if (this.refreshTimer) {\n clearInterval(this.refreshTimer);\n this.refreshTimer = undefined;\n }\n }\n /**\n * Dump cache contents to a JSON file for offline use.\n */\n dump(filePath) {\n const entries = {};\n for (const [key, entry] of this.cache.entries()) {\n entries[key] = entry.value;\n }\n dumpCache(filePath, entries);\n }\n /**\n * Load cache contents from a JSON file.\n *\n * Loaded entries get a fresh TTL starting from load time.\n *\n * @returns Number of entries loaded.\n */\n load(filePath) {\n const entries = loadCache(filePath);\n if (!entries) {\n return 0;\n }\n let loaded = 0;\n const now = Date.now();\n for (const [key, value] of Object.entries(entries)) {\n if (this.cache.size >= this.maxSize) {\n break;\n }\n const entry = {\n value: value,\n createdAt: now, // Fresh TTL from load time\n };\n this.cache.set(key, entry);\n loaded += 1;\n }\n return loaded;\n }\n /**\n * Start the background refresh loop.\n */\n startRefreshLoop() {\n this.refreshTimer = setInterval(() => {\n this.refreshStaleEntries().catch((e) => {\n // Log but don't die - keep the refresh loop running\n console.warn(\"Unexpected error in cache refresh loop:\", e);\n });\n }, this.refreshIntervalSeconds * 1000);\n // Don't block Node.js from exiting\n if (this.refreshTimer.unref) {\n this.refreshTimer.unref();\n }\n }\n /**\n * Get list of stale cache keys.\n */\n getStaleKeys() {\n const staleKeys = [];\n for (const [key, entry] of this.cache.entries()) {\n if (isStale(entry, this.ttlSeconds)) {\n staleKeys.push(key);\n }\n }\n return staleKeys;\n }\n /**\n * Check for stale entries and refresh them.\n */\n async refreshStaleEntries() {\n if (!this.fetchFunc) {\n return;\n }\n const staleKeys = this.getStaleKeys();\n if (staleKeys.length === 0) {\n return;\n }\n for (const key of staleKeys) {\n try {\n const newValue = await this.fetchFunc(key);\n this.set(key, newValue);\n this._metrics.refreshes += 1;\n }\n catch (e) {\n // Keep stale data on refresh failure\n this._metrics.refreshErrors += 1;\n console.warn(`Failed to refresh cache entry ${key}:`, e);\n }\n }\n }\n}\n"],"names":[],"mappings":";AAaA,SAAS,QAAQ,OAAO,YAAY;AAChC,MAAI,eAAe,MAAM;AACrB,WAAO;AAAA,EACX;AACA,QAAM,QAAQ,KAAK,IAAG,IAAK,MAAM;AACjC,SAAO,QAAQ,aAAa;AAChC;AA0BO,MAAM,MAAM;AAAA,EACf,YAAY,SAAS,IAAI;AACrB,WAAO,eAAe,MAAM,SAAS;AAAA,MACjC,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,UAAU;AAAA,MACV,OAAO,oBAAI,IAAG;AAAA,IAC1B,CAAS;AACD,WAAO,eAAe,MAAM,WAAW;AAAA,MACnC,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,UAAU;AAAA,MACV,OAAO;AAAA,IACnB,CAAS;AACD,WAAO,eAAe,MAAM,cAAc;AAAA,MACtC,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,UAAU;AAAA,MACV,OAAO;AAAA,IACnB,CAAS;AACD,WAAO,eAAe,MAAM,0BAA0B;AAAA,MAClD,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,UAAU;AAAA,MACV,OAAO;AAAA,IACnB,CAAS;AACD,WAAO,eAAe,MAAM,aAAa;AAAA,MACrC,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,UAAU;AAAA,MACV,OAAO;AAAA,IACnB,CAAS;AACD,WAAO,eAAe,MAAM,gBAAgB;AAAA,MACxC,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,UAAU;AAAA,MACV,OAAO;AAAA,IACnB,CAAS;AACD,WAAO,eAAe,MAAM,YAAY;AAAA,MACpC,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,UAAU;AAAA,MACV,OAAO;AAAA,QACH,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,eAAe;AAAA,MAC/B;AAAA,IACA,CAAS;AACD,SAAK,UAAU,OAAO,WAAW;AACjC,SAAK,aAAa,OAAO,cAAc;AACvC,SAAK,yBAAyB,OAAO,0BAA0B;AAC/D,SAAK,YAAY,OAAO;AAExB,QAAI,KAAK,aAAa,KAAK,eAAe,MAAM;AAC5C,WAAK,iBAAgB;AAAA,IACzB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAIA,IAAI,UAAU;AACV,WAAO,EAAE,GAAG,KAAK,SAAQ;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAIA,IAAI,gBAAgB;AAChB,WAAO,KAAK,SAAS,OAAO,KAAK,SAAS;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAIA,IAAI,UAAU;AACV,UAAM,QAAQ,KAAK;AACnB,WAAO,QAAQ,IAAI,KAAK,SAAS,OAAO,QAAQ;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA,EAIA,eAAe;AACX,SAAK,WAAW;AAAA,MACZ,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,eAAe;AAAA,IAC3B;AAAA,EACI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,KAAK;AACL,UAAM,QAAQ,KAAK,MAAM,IAAI,GAAG;AAChC,QAAI,CAAC,OAAO;AACR,WAAK,SAAS,UAAU;AACxB,aAAO;AAAA,IACX;AAEA,SAAK,MAAM,OAAO,GAAG;AACrB,SAAK,MAAM,IAAI,KAAK,KAAK;AACzB,SAAK,SAAS,QAAQ;AACtB,WAAO,MAAM;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAIA,IAAI,KAAK,OAAO;AAEZ,QAAI,CAAC,KAAK,MAAM,IAAI,GAAG,KAAK,KAAK,MAAM,QAAQ,KAAK,SAAS;AAEzD,YAAM,YAAY,KAAK,MAAM,KAAI,EAAG,KAAI,EAAG;AAC3C,UAAI,cAAc,QAAW;AACzB,aAAK,MAAM,OAAO,SAAS;AAAA,MAC/B;AAAA,IACJ;AACA,UAAM,QAAQ;AAAA,MACV;AAAA,MACA,WAAW,KAAK,IAAG;AAAA,IAC/B;AAEQ,SAAK,MAAM,OAAO,GAAG;AACrB,SAAK,MAAM,IAAI,KAAK,KAAK;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAIA,WAAW,KAAK;AACZ,SAAK,MAAM,OAAO,GAAG;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAIA,QAAQ;AACJ,SAAK,MAAM,MAAK;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAIA,IAAI,OAAO;AACP,WAAO,KAAK,MAAM;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO;AACH,QAAI,KAAK,cAAc;AACnB,oBAAc,KAAK,YAAY;AAC/B,WAAK,eAAe;AAAA,IACxB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAIA,KAAK,UAAU;AAEX,eAAW,CAAC,KAAK,KAAK,KAAK,KAAK,MAAM,WAAW;AAC9B,YAAM;AAAA,IACzB;AACA,cAA2B;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,KAAK,UAAU;AACX,UAAM,UAAU,UAAkB;AAClC,QAAI,CAAC,SAAS;AACV,aAAO;AAAA,IACX;AACA,QAAI,SAAS;AACb,UAAM,MAAM,KAAK,IAAG;AACpB,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,OAAO,GAAG;AAChD,UAAI,KAAK,MAAM,QAAQ,KAAK,SAAS;AACjC;AAAA,MACJ;AACA,YAAM,QAAQ;AAAA,QACV;AAAA,QACA,WAAW;AAAA;AAAA,MAC3B;AACY,WAAK,MAAM,IAAI,KAAK,KAAK;AACzB,gBAAU;AAAA,IACd;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAIA,mBAAmB;AACf,SAAK,eAAe,YAAY,MAAM;AAClC,WAAK,oBAAmB,EAAG,MAAM,CAAC,MAAM;AAEpC,gBAAQ,KAAK,2CAA2C,CAAC;AAAA,MAC7D,CAAC;AAAA,IACL,GAAG,KAAK,yBAAyB,GAAI;AAErC,QAAI,KAAK,aAAa,OAAO;AACzB,WAAK,aAAa,MAAK;AAAA,IAC3B;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAIA,eAAe;AACX,UAAM,YAAY,CAAA;AAClB,eAAW,CAAC,KAAK,KAAK,KAAK,KAAK,MAAM,WAAW;AAC7C,UAAI,QAAQ,OAAO,KAAK,UAAU,GAAG;AACjC,kBAAU,KAAK,GAAG;AAAA,MACtB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAIA,MAAM,sBAAsB;AACxB,QAAI,CAAC,KAAK,WAAW;AACjB;AAAA,IACJ;AACA,UAAM,YAAY,KAAK,aAAY;AACnC,QAAI,UAAU,WAAW,GAAG;AACxB;AAAA,IACJ;AACA,eAAW,OAAO,WAAW;AACzB,UAAI;AACA,cAAM,WAAW,MAAM,KAAK,UAAU,GAAG;AACzC,aAAK,IAAI,KAAK,QAAQ;AACtB,aAAK,SAAS,aAAa;AAAA,MAC/B,SACO,GAAG;AAEN,aAAK,SAAS,iBAAiB;AAC/B,gBAAQ,KAAK,iCAAiC,GAAG,KAAK,CAAC;AAAA,MAC3D;AAAA,IACJ;AAAA,EACJ;AACJ;","x_google_ignoreList":[0]}
|