streamlit-nightly 1.52.3.dev20260111__py3-none-any.whl → 1.52.3.dev20260112__py3-none-any.whl
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.
- streamlit/auth_util.py +24 -1
- streamlit/static/index.html +1 -1
- streamlit/static/manifest.json +296 -296
- streamlit/static/static/js/{ErrorOutline.esm.D0HiUB0L.js → ErrorOutline.esm.BjVqd_6R.js} +1 -1
- streamlit/static/static/js/{FileDownload.esm.BuUS-pfi.js → FileDownload.esm.DJCSsghl.js} +1 -1
- streamlit/static/static/js/{FileHelper.Pf8URFng.js → FileHelper.C---TH7o.js} +1 -1
- streamlit/static/static/js/{FormClearHelper.By4vKj6A.js → FormClearHelper.C-6BC487.js} +1 -1
- streamlit/static/static/js/{InputInstructions.BiaGyIXk.js → InputInstructions.sxc3InCI.js} +1 -1
- streamlit/static/static/js/{Particles.2-EdjYhR.js → Particles.S8yD7iW-.js} +1 -1
- streamlit/static/static/js/{ProgressBar.Dgbh0B0d.js → ProgressBar.BiYsyZCC.js} +1 -1
- streamlit/static/static/js/{StreamlitSyntaxHighlighter.DSl8Wr3R.js → StreamlitSyntaxHighlighter.9jZF8jX1.js} +1 -1
- streamlit/static/static/js/{TableChart.esm.MOwyTUPh.js → TableChart.esm.BdA4Q1rZ.js} +1 -1
- streamlit/static/static/js/{Toolbar.CowuXIFr.js → Toolbar.B9DaaDfN.js} +1 -1
- streamlit/static/static/js/{WidgetLabelHelpIconInline.BdGIJQe4.js → WidgetLabelHelpIconInline.DxODTLS2.js} +1 -1
- streamlit/static/static/js/{base-input.CHPo5oJ1.js → base-input.Gf1cKuQR.js} +1 -1
- streamlit/static/static/js/{checkbox.Dkt2TQVS.js → checkbox.CnoNruf3.js} +1 -1
- streamlit/static/static/js/{createDownloadLinkElement.BaE-_v8I.js → createDownloadLinkElement.B48AepiL.js} +1 -1
- streamlit/static/static/js/{data-grid-overlay-editor.C1ncL-Nr.js → data-grid-overlay-editor.Cmdq9aqU.js} +1 -1
- streamlit/static/static/js/{downloader.yaq2AzD9.js → downloader.CQLoQdMX.js} +1 -1
- streamlit/static/static/js/{embed.DJJvCVz2.js → embed.oKwocwU8.js} +1 -1
- streamlit/static/static/js/{es6.D2jK98VU.js → es6.BRxlY_y5.js} +2 -2
- streamlit/static/static/js/{formatNumber.Cxr2q_Sk.js → formatNumber.DaagZyZe.js} +1 -1
- streamlit/static/static/js/{iconPosition.5dHEZYw2.js → iconPosition.Q3hNvmK4.js} +1 -1
- streamlit/static/static/js/{iframeResizer.contentWindow.Cedt4qbc.js → iframeResizer.contentWindow.B6EBvI9L.js} +1 -1
- streamlit/static/static/js/{index.DaITTdfQ.js → index.19_qtO6t.js} +1 -1
- streamlit/static/static/js/{index._nL4Yjdr.js → index.43b777iP.js} +1 -1
- streamlit/static/static/js/{index.P-CMMGUY.js → index.B03eQZoH.js} +1 -1
- streamlit/static/static/js/{index.D2EVLt1U.js → index.B9kZB0o1.js} +1 -1
- streamlit/static/static/js/{index.BkDplL5I.js → index.BAI9aHCq.js} +1 -1
- streamlit/static/static/js/{index.CT9jvPcD.js → index.BF23fbfs.js} +1 -1
- streamlit/static/static/js/{index.TO9vodwr.js → index.BGBTkulf.js} +1 -1
- streamlit/static/static/js/{index.01VsD2h1.js → index.BRfGUOQ-.js} +5 -5
- streamlit/static/static/js/{index.D6ea3OJl.js → index.BVT89mQw.js} +1 -1
- streamlit/static/static/js/{index.BHMoYAbd.js → index.BXEC4cf3.js} +1 -1
- streamlit/static/static/js/{index.B6EliwN_.js → index.BbSFVZ3p.js} +1 -1
- streamlit/static/static/js/{index.B7EzT2pL.js → index.BkSwGJoh.js} +1 -1
- streamlit/static/static/js/{index.B6Uhb_NP.js → index.BnfTPrHb.js} +1 -1
- streamlit/static/static/js/{index.qzz9PjCO.js → index.BoX8d5rK.js} +1 -1
- streamlit/static/static/js/{index.Bb9kjc_v.js → index.Boa0Egng.js} +1 -1
- streamlit/static/static/js/{index.CjQo7CUO.js → index.BzwlrgZO.js} +1 -1
- streamlit/static/static/js/{index.Ba6hzYdl.js → index.C0fSEz-3.js} +1 -1
- streamlit/static/static/js/{index.B2TDaHdI.js → index.CCFwVy90.js} +1 -1
- streamlit/static/static/js/{index.Dt0Psatx.js → index.CCQ5p_WC.js} +1 -1
- streamlit/static/static/js/{index.DeGjj5Xy.js → index.CFCBhOfx.js} +1 -1
- streamlit/static/static/js/{index.DredtYc0.js → index.CIbgt5wY.js} +1 -1
- streamlit/static/static/js/{index.CD8IIWcc.js → index.CJ4oJe0V.js} +1 -1
- streamlit/static/static/js/{index.6_D2Y2jA.js → index.CP-hoxJM.js} +1 -1
- streamlit/static/static/js/{index.BXCQzqUL.js → index.CSfsEKCF.js} +1 -1
- streamlit/static/static/js/{index.C8PH2B2k.js → index.CVlg41MB.js} +1 -1
- streamlit/static/static/js/{index.BVit6ClT.js → index.CYE7b5Du.js} +1 -1
- streamlit/static/static/js/{index.DKUtJ1wC.js → index.Ca7MUNWJ.js} +1 -1
- streamlit/static/static/js/index.CrPjcPY1.js +1 -0
- streamlit/static/static/js/{index.BMPclSge.js → index.CvB9JBqS.js} +5 -5
- streamlit/static/static/js/{index.BCCeRfnu.js → index.CvIqsWy1.js} +1 -1
- streamlit/static/static/js/{index.wLJVkoPD.js → index.D1pK_Vw2.js} +1 -1
- streamlit/static/static/js/{index.B0GsKOuI.js → index.D6X2coHR.js} +1 -1
- streamlit/static/static/js/{index.B4x2O71H.js → index.DGYHxruh.js} +1 -1
- streamlit/static/static/js/{index.DcKOiCiE.js → index.DJ7P09eb.js} +1 -1
- streamlit/static/static/js/{index.CcHnYd9w.js → index.Dh5SAThV.js} +1 -1
- streamlit/static/static/js/{index.BFopzcDu.js → index.Fu73QtkD.js} +1 -1
- streamlit/static/static/js/{index.CIlqaESj.js → index.KN1VmyYN.js} +1 -1
- streamlit/static/static/js/{index.B9DrCSR6.js → index.KtjGDGY5.js} +1 -1
- streamlit/static/static/js/{index.DLB_Wwth.js → index.OpATzEaW.js} +1 -1
- streamlit/static/static/js/{index.CcJEaOpw.js → index.QHnxuesF.js} +1 -1
- streamlit/static/static/js/{index.1djeb6e0.js → index.QTaWooav.js} +1 -1
- streamlit/static/static/js/{index.BgVtKHgk.js → index.WXybx2Xq.js} +1 -1
- streamlit/static/static/js/{index.DtGneC7j.js → index.Xg-Qttib.js} +1 -1
- streamlit/static/static/js/{index.Dewn3Ni9.js → index.j4fnjyHo.js} +1 -1
- streamlit/static/static/js/{index.CAobVzMK.js → index.na9UBuse.js} +1 -1
- streamlit/static/static/js/{index.D2v1x0i_.js → index.pU9mQeVC.js} +1 -1
- streamlit/static/static/js/{index.DbTMA1_Q.js → index.slgxPafU.js} +1 -1
- streamlit/static/static/js/{index.DozBVd6-.js → index.whRT3Vm3.js} +1 -1
- streamlit/static/static/js/{input.27t-DftI.js → input.CPzINTl-.js} +1 -1
- streamlit/static/static/js/{main.BEfv2Y8-.js → main.DSPn8dUe.js} +1 -1
- streamlit/static/static/js/{memory.CaZBVQ_1.js → memory.CfD8IGoU.js} +1 -1
- streamlit/static/static/js/{number-overlay-editor.CAIp-3oo.js → number-overlay-editor.4Ae0qegV.js} +1 -1
- streamlit/static/static/js/{pandasStylerUtils.BY9qaz81.js → pandasStylerUtils.D2EjZ7k6.js} +1 -1
- streamlit/static/static/js/{sandbox.BJUaaWFJ.js → sandbox.C6vcPIm0.js} +1 -1
- streamlit/static/static/js/{styled-components.DQsMkvXn.js → styled-components.BBmp8buj.js} +1 -1
- streamlit/static/static/js/{throttle.DSR3q89S.js → throttle.BPcPpy-S.js} +1 -1
- streamlit/static/static/js/{timepicker.gie5YwtP.js → timepicker.ryzkTs2C.js} +1 -1
- streamlit/static/static/js/{toConsumableArray.C9lVwnAo.js → toConsumableArray.Dg1nDaB_.js} +1 -1
- streamlit/static/static/js/uniqueId.BFHzT5KQ.js +1 -0
- streamlit/static/static/js/{useBasicWidgetState.DrTKs46R.js → useBasicWidgetState.A4U5lzAm.js} +1 -1
- streamlit/static/static/js/{useIntlLocale.CmSionuT.js → useIntlLocale.DWJgLlNz.js} +1 -1
- streamlit/static/static/js/{useTextInputAutoExpand.D7lViJSu.js → useTextInputAutoExpand.BrBonw8t.js} +1 -1
- streamlit/static/static/js/{useUpdateUiValue.Ct3CJQBQ.js → useUpdateUiValue.BkOWyNVX.js} +1 -1
- streamlit/static/static/js/{useWaveformController.D-KQLpLI.js → useWaveformController.CBlvXlgZ.js} +1 -1
- streamlit/static/static/js/{withCalculatedWidth.CD0pPoZr.js → withCalculatedWidth.D4cpOyNe.js} +1 -1
- streamlit/static/static/js/{withFullScreenWrapper.Ch22PgdD.js → withFullScreenWrapper.BMim3w94.js} +1 -1
- streamlit/user_info.py +6 -4
- streamlit/web/server/browser_websocket_handler.py +2 -2
- streamlit/web/server/oauth_authlib_routes.py +97 -20
- {streamlit_nightly-1.52.3.dev20260111.dist-info → streamlit_nightly-1.52.3.dev20260112.dist-info}/METADATA +1 -1
- {streamlit_nightly-1.52.3.dev20260111.dist-info → streamlit_nightly-1.52.3.dev20260112.dist-info}/RECORD +99 -99
- streamlit/static/static/js/index.i_eQw7NS.js +0 -1
- streamlit/static/static/js/uniqueId.BdEQNrWF.js +0 -1
- {streamlit_nightly-1.52.3.dev20260111.data → streamlit_nightly-1.52.3.dev20260112.data}/scripts/streamlit.cmd +0 -0
- {streamlit_nightly-1.52.3.dev20260111.dist-info → streamlit_nightly-1.52.3.dev20260112.dist-info}/WHEEL +0 -0
- {streamlit_nightly-1.52.3.dev20260111.dist-info → streamlit_nightly-1.52.3.dev20260112.dist-info}/entry_points.txt +0 -0
- {streamlit_nightly-1.52.3.dev20260111.dist-info → streamlit_nightly-1.52.3.dev20260112.dist-info}/top_level.txt +0 -0
streamlit/static/static/js/{useWaveformController.D-KQLpLI.js → useWaveformController.CBlvXlgZ.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{l as Z,r as i,aR as M,ab as $,aS as O}from"./index.01VsD2h1.js";async function q(l,e=16e3){if(!l||l.size===0)throw new Error("Invalid or empty blob provided");if(!window.AudioContext)throw new Error("AudioContext not supported in this browser");const o=new AudioContext;try{const n=await l.arrayBuffer(),r=await o.decodeAudioData(n),d=e??r.sampleRate,s=await J(r,d);return K(s,d)}finally{o.close()}}async function J(l,e){const{duration:o,numberOfChannels:n,sampleRate:r}=l,d=Math.ceil(o*e);if(!window.OfflineAudioContext)throw new Error("OfflineAudioContext not supported");const s=new OfflineAudioContext(1,d,e),p=s.createBufferSource();if(p.buffer=l,n>1){const h=s.createChannelSplitter(n),m=s.createChannelMerger(1);p.connect(h);for(let c=0;c<n;c++){const u=s.createGain();u.gain.value=1/n,h.connect(u,c),u.connect(m,0,0)}m.connect(s.destination)}else p.connect(s.destination);p.start(0);try{return await s.startRendering()}catch(h){throw new Error(`Failed to resample audio from ${r}Hz to ${e}Hz: ${h instanceof Error?h.message:String(h)}`)}}function K(l,e){const n=l.length,r=n*2+44,d=new ArrayBuffer(r),s=new DataView(d),p=l.getChannelData(0),h=(c,u)=>{for(let y=0;y<u.length;y++)s.setUint8(c+y,u.charCodeAt(y))};h(0,"RIFF"),s.setUint32(4,r-8,!0),h(8,"WAVE"),h(12,"fmt "),s.setUint32(16,16,!0),s.setUint16(20,1,!0),s.setUint16(22,1,!0),s.setUint32(24,e,!0),s.setUint32(28,e*2,!0),s.setUint16(32,2,!0),s.setUint16(34,16,!0),h(36,"data"),s.setUint32(40,n*2,!0);let m=44;for(let c=0;c<n;c++){const u=Math.max(-1,Math.min(1,p[c]));s.setInt16(m,u*32767,!0),m+=2}return new Blob([d],{type:"audio/wav"})}class W{constructor(){this.wavesurfer=null,this.currentBlobUrl=null,this.events={},this.isPlaying=!1}initialize(e){this.wavesurfer=e,this.setupEventListeners()}setupEventListeners(){this.wavesurfer&&(this.teardownEventListeners(),this.handleTimeUpdate=e=>{this.events.onTimeUpdate?.(e*1e3)},this.handlePause=()=>{this.isPlaying=!1,this.events.onPause?.()},this.handlePlay=()=>{this.isPlaying=!0,this.events.onPlay?.()},this.handleFinish=()=>{this.isPlaying=!1,this.events.onFinish?.()},this.handleReady=()=>{this.events.onReady?.()},this.handleError=e=>{const o=e instanceof Error?e:new Error(String(e));this.events.onError?.(o)},this.wavesurfer.on("timeupdate",this.handleTimeUpdate),this.wavesurfer.on("pause",this.handlePause),this.wavesurfer.on("play",this.handlePlay),this.wavesurfer.on("finish",this.handleFinish),this.wavesurfer.on("ready",this.handleReady),this.wavesurfer.on("error",this.handleError))}setEventHandlers(e){this.events=e}async load(e){if(!this.wavesurfer)throw new Error("WaveSurfer not initialized");this.cleanupPreviousUrl();let o,n=null;try{if(e instanceof Blob)n=URL.createObjectURL(e),o=n;else if(e instanceof ArrayBuffer){const r=new Blob([e]);n=URL.createObjectURL(r),o=n}else o=e;this.currentBlobUrl=n,await this.wavesurfer.load(o)}catch(r){throw this.cleanupPreviousUrl(),r}}async play(){if(!this.wavesurfer)throw new Error("WaveSurfer not initialized");await this.wavesurfer.play()}pause(){this.wavesurfer&&this.wavesurfer.pause()}getDuration(){return this.wavesurfer?this.wavesurfer.getDuration()*1e3:0}getCurrentTime(){return this.wavesurfer?this.wavesurfer.getCurrentTime()*1e3:0}getIsPlaying(){return this.isPlaying}seekToStart(){this.wavesurfer&&this.wavesurfer.seekTo(0)}cleanupPreviousUrl(){this.currentBlobUrl&&(URL.revokeObjectURL(this.currentBlobUrl),this.currentBlobUrl=null)}destroy(){this.pause(),this.cleanupPreviousUrl(),this.wavesurfer&&(this.teardownEventListeners(),this.wavesurfer.empty(),this.wavesurfer=null),this.events={},this.isPlaying=!1,this.handleTimeUpdate=void 0,this.handlePause=void 0,this.handlePlay=void 0,this.handleFinish=void 0,this.handleReady=void 0,this.handleError=void 0}teardownEventListeners(){this.wavesurfer&&(this.handleTimeUpdate&&(this.wavesurfer.un("timeupdate",this.handleTimeUpdate),this.handleTimeUpdate=void 0),this.handlePause&&(this.wavesurfer.un("pause",this.handlePause),this.handlePause=void 0),this.handlePlay&&(this.wavesurfer.un("play",this.handlePlay),this.handlePlay=void 0),this.handleFinish&&(this.wavesurfer.un("finish",this.handleFinish),this.handleFinish=void 0),this.handleReady&&(this.wavesurfer.un("ready",this.handleReady),this.handleReady=void 0),this.handleError&&(this.wavesurfer.un("error",this.handleError),this.handleError=void 0))}}function I(l){return l.name==="NotAllowedError"||l.name==="PermissionDeniedError"||l.message?.toLowerCase().includes("permission denied")}class Q{constructor(e={}){this.wavesurfer=null,this.recordPlugin=null,this.isRecording=!1,this.recordEndResolve=null,this.recordEndReject=null,this.events={},this.options=e}initialize(e,o){this.wavesurfer=e;try{const n={renderRecordedAudio:!1,mimeType:"audio/webm"};this.recordPlugin=e.registerPlugin(o.create(n)),this.setupEventListeners()}catch(n){const r=n instanceof Error?n:new Error(String(n));throw I(r)?(this.events.onPermissionDenied?.(),new Error("Microphone permission denied")):(this.events.onError?.(r),r)}}setupEventListeners(){this.recordPlugin&&(this.recordPlugin.on("record-start",()=>{this.isRecording=!0,this.events.onRecordStart?.()}),this.recordPlugin.on("record-end",e=>{this.isRecording=!1,this.events.onRecordEnd?.(e),this.recordEndResolve&&e&&e.size>0?(this.recordEndResolve(e),this.recordEndResolve=null,this.recordEndReject=null):this.recordEndReject?(this.recordEndReject(new Error("Invalid or empty recording")),this.recordEndResolve=null,this.recordEndReject=null):(this.recordEndResolve=null,this.recordEndReject=null)}),this.recordPlugin.on("record-progress",e=>{this.events.onRecordProgress?.(e)}))}setEventHandlers(e){this.events=e}async startRecording(){if(!this.recordPlugin)throw new Error("Record plugin not initialized");if(this.isRecording)return;const e=typeof this.options.sampleRate=="number"?this.options.sampleRate:void 0,o={};e!==void 0&&(o.sampleRate={ideal:e}),await this.startRecordingWithConstraints(o,e!==void 0)}async startRecordingWithConstraints(e,o){if(!this.recordPlugin)throw new Error("Record plugin not initialized");try{const n=Object.keys(e).length?e:void 0;await this.recordPlugin.startRecording(n)}catch(n){const r=n instanceof Error?n:new Error(String(n));if(I(r))throw this.events.onPermissionDenied?.(),new Error("Microphone permission denied");if(o&&(r.name==="OverconstrainedError"||r.name==="NotReadableError")){this.options.sampleRate=void 0,await this.startRecordingWithConstraints({},!1);return}throw this.events.onError?.(r),r}}async stopRecording(){if(!this.recordPlugin||!this.isRecording)throw new Error("Not currently recording");try{return await new Promise((e,o)=>{this.recordEndResolve=e,this.recordEndReject=o,this.recordPlugin?.stopRecording()})}catch(e){const o=e instanceof Error?e:new Error(String(e));throw this.events.onError?.(o),o}}cancelRecording(){this.recordPlugin&&this.isRecording&&(this.recordPlugin.stopRecording(),this.isRecording=!1,this.recordEndResolve=null,this.recordEndReject=null)}destroy(){this.cancelRecording(),this.recordPlugin&&(this.recordPlugin.destroy(),this.recordPlugin=null),this.wavesurfer=null,this.events={}}}const X=4,Y=4,ee=8,re=0,te=16e3;function se({containerRef:l,sampleRate:e,events:o,waveformPadding:n=0}){const r=Z(),[d,s]=i.useState("idle"),[p,h]=i.useState(null),[m,c]=i.useState(!1),u=i.useRef(null),y=i.useRef(null),a=i.useRef(null),f=i.useRef(o),U=i.useRef(!1),D=i.useRef(!1),E=i.useRef(new Set),P=i.useRef(!1),b=e===void 0?te:e,A=i.useCallback(()=>{E.current.clear(),c(!1),y.current&&(y.current.destroy(),y.current=null),a.current&&(a.current.destroy(),a.current=null),u.current&&(u.current.destroy(),u.current=null),U.current=!1,P.current=!1,s("idle"),h(null)},[]),x=i.useCallback(()=>{const t=Array.from(E.current);E.current.clear(),t.forEach(w=>{w.resolve()})},[]),_=i.useCallback(t=>{c(!1);const w=Array.from(E.current);E.current.clear(),w.forEach(v=>{v.reject(t)})},[]),T=i.useCallback(t=>{const w={onPlay:()=>{c(!0),f.current.onPlaybackPlay?.()},onPause:()=>{c(!1),f.current.onPlaybackPause?.()},onFinish:()=>{c(!1),f.current.onPlaybackFinish?.()},onReady:()=>{x()},onError:v=>{c(!1),_(v),f.current.onError?.(v)}};t.setEventHandlers(w)},[x,_]);i.useEffect(()=>{f.current=o,a.current&&T(a.current)},[o,T]);const S=i.useCallback(async()=>{if(!(U.current||D.current||!l.current)){D.current=!0;try{const[t,w]=await Promise.all([M(()=>import("./wavesurfer.esm.D1Sty35j.js"),[],import.meta.url),M(()=>import("./record.DytFsBUt.js"),[],import.meta.url)]),v=t.default,B=w.default,k=v.create({container:l.current,waveColor:r.colors.primary,progressColor:r.colors.bodyText,height:n>0?$(r.sizes.largestElementHeight)-2*n:"auto",barWidth:X,barGap:Y,barRadius:ee,cursorWidth:re,interact:!0});u.current=k,P.current=!1;const C=new Q({sampleRate:b});C.initialize(k,B),C.setEventHandlers({onRecordProgress:R=>{f.current.onProgressMs?.(R)},onPermissionDenied:()=>{f.current.onPermissionDenied(),s("idle")},onError:R=>{f.current.onError(R),s("idle")}}),y.current=C;const g=new W;g.initialize(k),a.current=g,T(g),U.current=!0}catch(t){const w=t instanceof Error?t:new Error(String(t));f.current.onError?.(w)}finally{D.current=!1}}},[l,r,b,T,n]);i.useEffect(()=>(S(),()=>{A()}),[A,S]),i.useEffect(()=>{const t=u.current;if(t){if(d==="recording"){t.setOptions({waveColor:r.colors.primary,progressColor:r.colors.primary});return}if(P.current){t.setOptions({interact:!0,waveColor:O(r.colors.fadedText40,r.colors.secondaryBg),progressColor:r.colors.bodyText});return}t.setOptions({waveColor:r.colors.primary,progressColor:r.colors.bodyText})}},[d,r.colors.bodyText,r.colors.fadedText40,r.colors.primary,r.colors.secondaryBg]);const F=i.useCallback(async()=>{if(d!=="recording"){if(U.current||await S(),!y.current)throw new Error("Record backend not initialized");u.current&&u.current.setOptions({waveColor:r.colors.primary,progressColor:r.colors.primary}),P.current=!1,await y.current.startRecording(),s("recording"),h(null),c(!1),f.current.onRecordStart?.()}},[d,S,r.colors.primary]),L=i.useCallback(()=>{a.current&&u.current&&(a.current.destroy(),a.current=new W,a.current.initialize(u.current),E.current.clear(),c(!1),T(a.current)),P.current=!1},[T]),z=i.useCallback(()=>{a.current?.seekToStart(),c(!1),P.current=!0,u.current&&u.current.setOptions({interact:!0,waveColor:O(r.colors.fadedText40,r.colors.secondaryBg),progressColor:r.colors.bodyText})},[r.colors.bodyText,r.colors.fadedText40,r.colors.secondaryBg]),H=i.useCallback(async()=>{if(d!=="recording")throw new Error("Not currently recording");if(!y.current||!a.current)throw new Error("Backends not initialized");try{const t=await y.current.stopRecording();h(t),await new Promise((k,C)=>{if(!a.current){C(new Error("Player not initialized"));return}const g={resolve:()=>{E.current.delete(g),k()},reject:R=>{E.current.delete(g),C(R)}};E.current.add(g),a.current.load(t).catch(R=>{E.current.delete(g),C(R instanceof Error?R:new Error(String(R)))})}),s("idle"),c(!1),z();const v={durationMs:a.current?.getDuration()??0,sampleRate:typeof b=="number"?b:null,mimeType:t.type||"audio/webm",size:t.size},B={blob:t,meta:v};return f.current.onRecordReady?.(t),B}catch(t){const w=t instanceof Error?t:new Error(String(t));return c(!1),s("idle"),f.current.onError(w),{blob:new Blob,meta:{durationMs:0,sampleRate:null,mimeType:"audio/webm",size:0}}}},[d,z,b]),j=i.useCallback(async t=>{const w=t??p;if(!w){const v=new Error("No recorded audio to approve");f.current.onError(v);return}try{const v=await q(w,b);await f.current.onApprove?.(v),h(null),s("idle")}catch(v){const B=v instanceof Error?v:new Error(String(v));f.current.onError(B)}},[p,b]),N=i.useCallback(()=>{d==="recording"&&y.current?.cancelRecording(),L(),h(null),s("idle"),c(!1),P.current=!1,f.current.onCancel?.()},[d,L]),V=i.useMemo(()=>({isPlaying:()=>a.current?.getIsPlaying()??!1,play:async()=>{if(!a.current)throw new Error("Player not initialized");await a.current.play()},pause:()=>{a.current?.pause()},load:async t=>{if(U.current||await S(),!a.current)throw new Error("Player not initialized");await a.current.load(t),z()},getCurrentTimeMs:()=>a.current?.getCurrentTime()??0,getDurationMs:()=>a.current?.getDuration()??0}),[z,S]),G=i.useCallback(t=>{f.current=t},[]);return i.useEffect(()=>()=>{A()},[A]),{state:d,isPlaybackPlaying:m,mountRef:l,start:F,stop:H,approve:j,cancel:N,destroy:A,playback:V,setEventHandlers:G}}export{se as u};
|
|
1
|
+
import{l as Z,r as i,aR as M,ab as $,aS as O}from"./index.BRfGUOQ-.js";async function q(l,e=16e3){if(!l||l.size===0)throw new Error("Invalid or empty blob provided");if(!window.AudioContext)throw new Error("AudioContext not supported in this browser");const o=new AudioContext;try{const n=await l.arrayBuffer(),r=await o.decodeAudioData(n),d=e??r.sampleRate,s=await J(r,d);return K(s,d)}finally{o.close()}}async function J(l,e){const{duration:o,numberOfChannels:n,sampleRate:r}=l,d=Math.ceil(o*e);if(!window.OfflineAudioContext)throw new Error("OfflineAudioContext not supported");const s=new OfflineAudioContext(1,d,e),p=s.createBufferSource();if(p.buffer=l,n>1){const h=s.createChannelSplitter(n),m=s.createChannelMerger(1);p.connect(h);for(let c=0;c<n;c++){const u=s.createGain();u.gain.value=1/n,h.connect(u,c),u.connect(m,0,0)}m.connect(s.destination)}else p.connect(s.destination);p.start(0);try{return await s.startRendering()}catch(h){throw new Error(`Failed to resample audio from ${r}Hz to ${e}Hz: ${h instanceof Error?h.message:String(h)}`)}}function K(l,e){const n=l.length,r=n*2+44,d=new ArrayBuffer(r),s=new DataView(d),p=l.getChannelData(0),h=(c,u)=>{for(let y=0;y<u.length;y++)s.setUint8(c+y,u.charCodeAt(y))};h(0,"RIFF"),s.setUint32(4,r-8,!0),h(8,"WAVE"),h(12,"fmt "),s.setUint32(16,16,!0),s.setUint16(20,1,!0),s.setUint16(22,1,!0),s.setUint32(24,e,!0),s.setUint32(28,e*2,!0),s.setUint16(32,2,!0),s.setUint16(34,16,!0),h(36,"data"),s.setUint32(40,n*2,!0);let m=44;for(let c=0;c<n;c++){const u=Math.max(-1,Math.min(1,p[c]));s.setInt16(m,u*32767,!0),m+=2}return new Blob([d],{type:"audio/wav"})}class W{constructor(){this.wavesurfer=null,this.currentBlobUrl=null,this.events={},this.isPlaying=!1}initialize(e){this.wavesurfer=e,this.setupEventListeners()}setupEventListeners(){this.wavesurfer&&(this.teardownEventListeners(),this.handleTimeUpdate=e=>{this.events.onTimeUpdate?.(e*1e3)},this.handlePause=()=>{this.isPlaying=!1,this.events.onPause?.()},this.handlePlay=()=>{this.isPlaying=!0,this.events.onPlay?.()},this.handleFinish=()=>{this.isPlaying=!1,this.events.onFinish?.()},this.handleReady=()=>{this.events.onReady?.()},this.handleError=e=>{const o=e instanceof Error?e:new Error(String(e));this.events.onError?.(o)},this.wavesurfer.on("timeupdate",this.handleTimeUpdate),this.wavesurfer.on("pause",this.handlePause),this.wavesurfer.on("play",this.handlePlay),this.wavesurfer.on("finish",this.handleFinish),this.wavesurfer.on("ready",this.handleReady),this.wavesurfer.on("error",this.handleError))}setEventHandlers(e){this.events=e}async load(e){if(!this.wavesurfer)throw new Error("WaveSurfer not initialized");this.cleanupPreviousUrl();let o,n=null;try{if(e instanceof Blob)n=URL.createObjectURL(e),o=n;else if(e instanceof ArrayBuffer){const r=new Blob([e]);n=URL.createObjectURL(r),o=n}else o=e;this.currentBlobUrl=n,await this.wavesurfer.load(o)}catch(r){throw this.cleanupPreviousUrl(),r}}async play(){if(!this.wavesurfer)throw new Error("WaveSurfer not initialized");await this.wavesurfer.play()}pause(){this.wavesurfer&&this.wavesurfer.pause()}getDuration(){return this.wavesurfer?this.wavesurfer.getDuration()*1e3:0}getCurrentTime(){return this.wavesurfer?this.wavesurfer.getCurrentTime()*1e3:0}getIsPlaying(){return this.isPlaying}seekToStart(){this.wavesurfer&&this.wavesurfer.seekTo(0)}cleanupPreviousUrl(){this.currentBlobUrl&&(URL.revokeObjectURL(this.currentBlobUrl),this.currentBlobUrl=null)}destroy(){this.pause(),this.cleanupPreviousUrl(),this.wavesurfer&&(this.teardownEventListeners(),this.wavesurfer.empty(),this.wavesurfer=null),this.events={},this.isPlaying=!1,this.handleTimeUpdate=void 0,this.handlePause=void 0,this.handlePlay=void 0,this.handleFinish=void 0,this.handleReady=void 0,this.handleError=void 0}teardownEventListeners(){this.wavesurfer&&(this.handleTimeUpdate&&(this.wavesurfer.un("timeupdate",this.handleTimeUpdate),this.handleTimeUpdate=void 0),this.handlePause&&(this.wavesurfer.un("pause",this.handlePause),this.handlePause=void 0),this.handlePlay&&(this.wavesurfer.un("play",this.handlePlay),this.handlePlay=void 0),this.handleFinish&&(this.wavesurfer.un("finish",this.handleFinish),this.handleFinish=void 0),this.handleReady&&(this.wavesurfer.un("ready",this.handleReady),this.handleReady=void 0),this.handleError&&(this.wavesurfer.un("error",this.handleError),this.handleError=void 0))}}function I(l){return l.name==="NotAllowedError"||l.name==="PermissionDeniedError"||l.message?.toLowerCase().includes("permission denied")}class Q{constructor(e={}){this.wavesurfer=null,this.recordPlugin=null,this.isRecording=!1,this.recordEndResolve=null,this.recordEndReject=null,this.events={},this.options=e}initialize(e,o){this.wavesurfer=e;try{const n={renderRecordedAudio:!1,mimeType:"audio/webm"};this.recordPlugin=e.registerPlugin(o.create(n)),this.setupEventListeners()}catch(n){const r=n instanceof Error?n:new Error(String(n));throw I(r)?(this.events.onPermissionDenied?.(),new Error("Microphone permission denied")):(this.events.onError?.(r),r)}}setupEventListeners(){this.recordPlugin&&(this.recordPlugin.on("record-start",()=>{this.isRecording=!0,this.events.onRecordStart?.()}),this.recordPlugin.on("record-end",e=>{this.isRecording=!1,this.events.onRecordEnd?.(e),this.recordEndResolve&&e&&e.size>0?(this.recordEndResolve(e),this.recordEndResolve=null,this.recordEndReject=null):this.recordEndReject?(this.recordEndReject(new Error("Invalid or empty recording")),this.recordEndResolve=null,this.recordEndReject=null):(this.recordEndResolve=null,this.recordEndReject=null)}),this.recordPlugin.on("record-progress",e=>{this.events.onRecordProgress?.(e)}))}setEventHandlers(e){this.events=e}async startRecording(){if(!this.recordPlugin)throw new Error("Record plugin not initialized");if(this.isRecording)return;const e=typeof this.options.sampleRate=="number"?this.options.sampleRate:void 0,o={};e!==void 0&&(o.sampleRate={ideal:e}),await this.startRecordingWithConstraints(o,e!==void 0)}async startRecordingWithConstraints(e,o){if(!this.recordPlugin)throw new Error("Record plugin not initialized");try{const n=Object.keys(e).length?e:void 0;await this.recordPlugin.startRecording(n)}catch(n){const r=n instanceof Error?n:new Error(String(n));if(I(r))throw this.events.onPermissionDenied?.(),new Error("Microphone permission denied");if(o&&(r.name==="OverconstrainedError"||r.name==="NotReadableError")){this.options.sampleRate=void 0,await this.startRecordingWithConstraints({},!1);return}throw this.events.onError?.(r),r}}async stopRecording(){if(!this.recordPlugin||!this.isRecording)throw new Error("Not currently recording");try{return await new Promise((e,o)=>{this.recordEndResolve=e,this.recordEndReject=o,this.recordPlugin?.stopRecording()})}catch(e){const o=e instanceof Error?e:new Error(String(e));throw this.events.onError?.(o),o}}cancelRecording(){this.recordPlugin&&this.isRecording&&(this.recordPlugin.stopRecording(),this.isRecording=!1,this.recordEndResolve=null,this.recordEndReject=null)}destroy(){this.cancelRecording(),this.recordPlugin&&(this.recordPlugin.destroy(),this.recordPlugin=null),this.wavesurfer=null,this.events={}}}const X=4,Y=4,ee=8,re=0,te=16e3;function se({containerRef:l,sampleRate:e,events:o,waveformPadding:n=0}){const r=Z(),[d,s]=i.useState("idle"),[p,h]=i.useState(null),[m,c]=i.useState(!1),u=i.useRef(null),y=i.useRef(null),a=i.useRef(null),f=i.useRef(o),U=i.useRef(!1),D=i.useRef(!1),E=i.useRef(new Set),P=i.useRef(!1),b=e===void 0?te:e,A=i.useCallback(()=>{E.current.clear(),c(!1),y.current&&(y.current.destroy(),y.current=null),a.current&&(a.current.destroy(),a.current=null),u.current&&(u.current.destroy(),u.current=null),U.current=!1,P.current=!1,s("idle"),h(null)},[]),x=i.useCallback(()=>{const t=Array.from(E.current);E.current.clear(),t.forEach(w=>{w.resolve()})},[]),_=i.useCallback(t=>{c(!1);const w=Array.from(E.current);E.current.clear(),w.forEach(v=>{v.reject(t)})},[]),T=i.useCallback(t=>{const w={onPlay:()=>{c(!0),f.current.onPlaybackPlay?.()},onPause:()=>{c(!1),f.current.onPlaybackPause?.()},onFinish:()=>{c(!1),f.current.onPlaybackFinish?.()},onReady:()=>{x()},onError:v=>{c(!1),_(v),f.current.onError?.(v)}};t.setEventHandlers(w)},[x,_]);i.useEffect(()=>{f.current=o,a.current&&T(a.current)},[o,T]);const S=i.useCallback(async()=>{if(!(U.current||D.current||!l.current)){D.current=!0;try{const[t,w]=await Promise.all([M(()=>import("./wavesurfer.esm.D1Sty35j.js"),[],import.meta.url),M(()=>import("./record.DytFsBUt.js"),[],import.meta.url)]),v=t.default,B=w.default,k=v.create({container:l.current,waveColor:r.colors.primary,progressColor:r.colors.bodyText,height:n>0?$(r.sizes.largestElementHeight)-2*n:"auto",barWidth:X,barGap:Y,barRadius:ee,cursorWidth:re,interact:!0});u.current=k,P.current=!1;const C=new Q({sampleRate:b});C.initialize(k,B),C.setEventHandlers({onRecordProgress:R=>{f.current.onProgressMs?.(R)},onPermissionDenied:()=>{f.current.onPermissionDenied(),s("idle")},onError:R=>{f.current.onError(R),s("idle")}}),y.current=C;const g=new W;g.initialize(k),a.current=g,T(g),U.current=!0}catch(t){const w=t instanceof Error?t:new Error(String(t));f.current.onError?.(w)}finally{D.current=!1}}},[l,r,b,T,n]);i.useEffect(()=>(S(),()=>{A()}),[A,S]),i.useEffect(()=>{const t=u.current;if(t){if(d==="recording"){t.setOptions({waveColor:r.colors.primary,progressColor:r.colors.primary});return}if(P.current){t.setOptions({interact:!0,waveColor:O(r.colors.fadedText40,r.colors.secondaryBg),progressColor:r.colors.bodyText});return}t.setOptions({waveColor:r.colors.primary,progressColor:r.colors.bodyText})}},[d,r.colors.bodyText,r.colors.fadedText40,r.colors.primary,r.colors.secondaryBg]);const F=i.useCallback(async()=>{if(d!=="recording"){if(U.current||await S(),!y.current)throw new Error("Record backend not initialized");u.current&&u.current.setOptions({waveColor:r.colors.primary,progressColor:r.colors.primary}),P.current=!1,await y.current.startRecording(),s("recording"),h(null),c(!1),f.current.onRecordStart?.()}},[d,S,r.colors.primary]),L=i.useCallback(()=>{a.current&&u.current&&(a.current.destroy(),a.current=new W,a.current.initialize(u.current),E.current.clear(),c(!1),T(a.current)),P.current=!1},[T]),z=i.useCallback(()=>{a.current?.seekToStart(),c(!1),P.current=!0,u.current&&u.current.setOptions({interact:!0,waveColor:O(r.colors.fadedText40,r.colors.secondaryBg),progressColor:r.colors.bodyText})},[r.colors.bodyText,r.colors.fadedText40,r.colors.secondaryBg]),H=i.useCallback(async()=>{if(d!=="recording")throw new Error("Not currently recording");if(!y.current||!a.current)throw new Error("Backends not initialized");try{const t=await y.current.stopRecording();h(t),await new Promise((k,C)=>{if(!a.current){C(new Error("Player not initialized"));return}const g={resolve:()=>{E.current.delete(g),k()},reject:R=>{E.current.delete(g),C(R)}};E.current.add(g),a.current.load(t).catch(R=>{E.current.delete(g),C(R instanceof Error?R:new Error(String(R)))})}),s("idle"),c(!1),z();const v={durationMs:a.current?.getDuration()??0,sampleRate:typeof b=="number"?b:null,mimeType:t.type||"audio/webm",size:t.size},B={blob:t,meta:v};return f.current.onRecordReady?.(t),B}catch(t){const w=t instanceof Error?t:new Error(String(t));return c(!1),s("idle"),f.current.onError(w),{blob:new Blob,meta:{durationMs:0,sampleRate:null,mimeType:"audio/webm",size:0}}}},[d,z,b]),j=i.useCallback(async t=>{const w=t??p;if(!w){const v=new Error("No recorded audio to approve");f.current.onError(v);return}try{const v=await q(w,b);await f.current.onApprove?.(v),h(null),s("idle")}catch(v){const B=v instanceof Error?v:new Error(String(v));f.current.onError(B)}},[p,b]),N=i.useCallback(()=>{d==="recording"&&y.current?.cancelRecording(),L(),h(null),s("idle"),c(!1),P.current=!1,f.current.onCancel?.()},[d,L]),V=i.useMemo(()=>({isPlaying:()=>a.current?.getIsPlaying()??!1,play:async()=>{if(!a.current)throw new Error("Player not initialized");await a.current.play()},pause:()=>{a.current?.pause()},load:async t=>{if(U.current||await S(),!a.current)throw new Error("Player not initialized");await a.current.load(t),z()},getCurrentTimeMs:()=>a.current?.getCurrentTime()??0,getDurationMs:()=>a.current?.getDuration()??0}),[z,S]),G=i.useCallback(t=>{f.current=t},[]);return i.useEffect(()=>()=>{A()},[A]),{state:d,isPlaybackPlaying:m,mountRef:l,start:F,stop:H,approve:j,cancel:N,destroy:A,playback:V,setEventHandlers:G}}export{se as u};
|
streamlit/static/static/js/{withCalculatedWidth.CD0pPoZr.js → withCalculatedWidth.D4cpOyNe.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{h as l,k as h,j as s,d as n}from"./index.
|
|
1
|
+
import{h as l,k as h,j as s,d as n}from"./index.BRfGUOQ-.js";const o=t=>{const a=e=>{const{width:i,elementRef:c}=h();return s(n,{ref:c,children:s(t,{...e,width:i})})};return a.displayName=`withCalculatedWidth(${t.displayName||t.name})`,l(a,t)};export{o as w};
|
streamlit/static/static/js/{withFullScreenWrapper.Ch22PgdD.js → withFullScreenWrapper.BMim3w94.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as n,F as f,b7 as p,b8 as h,l as x,k as y,j as i,h as g}from"./index.
|
|
1
|
+
import{r as n,F as f,b7 as p,b8 as h,l as x,k as y,j as i,h as g}from"./index.BRfGUOQ-.js";const m=n.createContext(null);m.displayName="ElementFullscreenContext";const w=f("div",{target:"e5bcvgj0"})(({theme:e,isExpanded:t})=>({width:"100%",height:"100%",...t?{position:"fixed",top:0,left:0,bottom:0,right:0,background:e.colors.bgColor,zIndex:e.zIndices.fullscreenWrapper,padding:e.spacing.md,paddingTop:e.sizes.fullScreenHeaderHeight,overflow:"auto",display:"flex",alignItems:"center",justifyContent:"center"}:{}})),C=()=>{const{setFullScreen:e}=n.useContext(p),[t,s]=n.useState(!1),{fullHeight:a,fullWidth:c}=h(),l=n.useCallback(r=>{s(r),e(r)},[e]),u=n.useCallback(()=>{document.body.style.overflow="hidden",l(!0)},[l]),o=n.useCallback(()=>{document.body.style.overflow="unset",l(!1)},[l]),d=n.useCallback(r=>{r.keyCode===27&&t&&o()},[o,t]);return n.useEffect(()=>(document.addEventListener("keydown",d,!1),()=>{document.removeEventListener("keydown",d,!1)}),[d]),n.useMemo(()=>({expanded:t,zoomIn:u,zoomOut:o,fullHeight:a,fullWidth:c}),[t,u,o,a,c])},F=({children:e})=>{const t=x(),{expanded:s,fullHeight:a,fullWidth:c,zoomIn:l,zoomOut:u}=C(),{width:o,elementRef:d}=y(),r=n.useMemo(()=>({width:s?c:o,height:s?a:void 0,expanded:s,expand:l,collapse:u}),[s,a,c,o,l,u]);return i(m.Provider,{value:r,children:i(w,{ref:d,isExpanded:s,"data-testid":"stFullScreenFrame",theme:t,children:e})})};function S(e){const t=s=>i(F,{children:i(e,{...s})});return t.displayName=`withFullScreenWrapper(${e.displayName||e.name})`,g(t,e)}export{m as E,S as w};
|
streamlit/user_info.py
CHANGED
|
@@ -301,8 +301,9 @@ def logout() -> None:
|
|
|
301
301
|
"""Logout the current user.
|
|
302
302
|
|
|
303
303
|
This command removes the user's information from ``st.user``,
|
|
304
|
-
deletes their identity cookie, and redirects them
|
|
305
|
-
|
|
304
|
+
deletes their identity cookie, and redirects them to perform a proper
|
|
305
|
+
logout from the OAuth provider (if available) before returning to your
|
|
306
|
+
app's home page. This creates a new session.
|
|
306
307
|
|
|
307
308
|
If the user has multiple sessions open in the same browser,
|
|
308
309
|
``st.user`` will not be cleared in any other session.
|
|
@@ -311,8 +312,9 @@ def logout() -> None:
|
|
|
311
312
|
``st.logout()`` within that session to update ``st.user``.
|
|
312
313
|
|
|
313
314
|
.. Note::
|
|
314
|
-
|
|
315
|
-
identity provider
|
|
315
|
+
If the OAuth provider supports OIDC end_session_endpoint in their
|
|
316
|
+
server metadata, the user will be logged out from the identity provider
|
|
317
|
+
as well. If not available, only local logout is performed.
|
|
316
318
|
|
|
317
319
|
Example
|
|
318
320
|
-------
|
|
@@ -247,9 +247,9 @@ class BrowserWebSocketHandler(WebSocketHandler, SessionClient):
|
|
|
247
247
|
# See the NOTE in the docstring of the `select_subprotocol` method above
|
|
248
248
|
# for a detailed explanation of why this is done.
|
|
249
249
|
existing_session_id = ws_protocols[2]
|
|
250
|
-
except KeyError:
|
|
250
|
+
except (KeyError, json.JSONDecodeError):
|
|
251
251
|
# Just let existing_session_id=None if we run into any error while trying to
|
|
252
|
-
# extract it from the Sec-Websocket-Protocol header.
|
|
252
|
+
# extract it from the Sec-Websocket-Protocol header or parsing cookie JSON.
|
|
253
253
|
pass
|
|
254
254
|
|
|
255
255
|
# Map in any user-configured headers. Note that these override anything coming
|
|
@@ -13,8 +13,9 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
from __future__ import annotations
|
|
15
15
|
|
|
16
|
+
import json
|
|
16
17
|
from typing import Any, Final, cast
|
|
17
|
-
from urllib.parse import urlparse
|
|
18
|
+
from urllib.parse import urlencode, urlparse
|
|
18
19
|
|
|
19
20
|
import tornado.web
|
|
20
21
|
|
|
@@ -23,6 +24,8 @@ from streamlit.auth_util import (
|
|
|
23
24
|
clear_cookie_and_chunks,
|
|
24
25
|
decode_provider_token,
|
|
25
26
|
generate_default_provider_section,
|
|
27
|
+
get_cookie_with_chunks,
|
|
28
|
+
get_redirect_uri,
|
|
26
29
|
get_secrets_auth_section,
|
|
27
30
|
set_cookie_with_chunks,
|
|
28
31
|
)
|
|
@@ -41,7 +44,7 @@ def create_oauth_client(provider: str) -> tuple[TornadoOAuth2App, str]:
|
|
|
41
44
|
"""Create an OAuth client for the given provider based on secrets.toml configuration."""
|
|
42
45
|
auth_section = get_secrets_auth_section()
|
|
43
46
|
if auth_section:
|
|
44
|
-
redirect_uri = auth_section
|
|
47
|
+
redirect_uri = get_redirect_uri(auth_section) or "/"
|
|
45
48
|
config = auth_section.to_dict()
|
|
46
49
|
else:
|
|
47
50
|
config = {}
|
|
@@ -169,16 +172,99 @@ class AuthLoginHandler(AuthHandlerMixin, tornado.web.RequestHandler):
|
|
|
169
172
|
class AuthLogoutHandler(AuthHandlerMixin, tornado.web.RequestHandler):
|
|
170
173
|
def get(self) -> None:
|
|
171
174
|
self.clear_auth_cookie()
|
|
172
|
-
|
|
175
|
+
|
|
176
|
+
provider_logout_url = self._get_provider_logout_url()
|
|
177
|
+
if provider_logout_url:
|
|
178
|
+
self.redirect(provider_logout_url)
|
|
179
|
+
else:
|
|
180
|
+
self.redirect_to_base()
|
|
181
|
+
|
|
182
|
+
def _get_redirect_uri(self) -> str | None:
|
|
183
|
+
auth_section = get_secrets_auth_section()
|
|
184
|
+
if not auth_section:
|
|
185
|
+
return None
|
|
186
|
+
|
|
187
|
+
redirect_uri = get_redirect_uri(auth_section)
|
|
188
|
+
if not redirect_uri:
|
|
189
|
+
return None
|
|
190
|
+
|
|
191
|
+
if not redirect_uri.endswith("/oauth2callback"):
|
|
192
|
+
_LOGGER.warning("Redirect URI does not end with /oauth2callback")
|
|
193
|
+
return None
|
|
194
|
+
|
|
195
|
+
return redirect_uri
|
|
196
|
+
|
|
197
|
+
def _get_provider_logout_url(self) -> str | None:
|
|
198
|
+
"""Get the OAuth provider's logout URL from OIDC metadata."""
|
|
199
|
+
cookie_value = get_cookie_with_chunks(self._get_signed_cookie, AUTH_COOKIE_NAME)
|
|
200
|
+
|
|
201
|
+
if not cookie_value:
|
|
202
|
+
return None
|
|
203
|
+
|
|
204
|
+
try:
|
|
205
|
+
user_info = json.loads(cookie_value)
|
|
206
|
+
provider = user_info.get("provider")
|
|
207
|
+
if not provider:
|
|
208
|
+
return None
|
|
209
|
+
|
|
210
|
+
client, _ = create_oauth_client(provider)
|
|
211
|
+
|
|
212
|
+
metadata = client.load_server_metadata()
|
|
213
|
+
end_session_endpoint = metadata.get("end_session_endpoint")
|
|
214
|
+
|
|
215
|
+
if not end_session_endpoint:
|
|
216
|
+
_LOGGER.info("No end_session_endpoint found for provider %s", provider)
|
|
217
|
+
return None
|
|
218
|
+
|
|
219
|
+
# Use redirect_uri (i.e. /oauth2callback) for post_logout_redirect_uri
|
|
220
|
+
# This is safer than redirecting to root as some providers seem to
|
|
221
|
+
# require url to be in a whitelist /oauth2callback should be whitelisted
|
|
222
|
+
redirect_uri = self._get_redirect_uri()
|
|
223
|
+
if redirect_uri is None:
|
|
224
|
+
_LOGGER.info("Redirect url could not be determined")
|
|
225
|
+
return None
|
|
226
|
+
|
|
227
|
+
logout_params = {
|
|
228
|
+
"client_id": client.client_id,
|
|
229
|
+
"post_logout_redirect_uri": redirect_uri,
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
# Add id_token_hint to logout params if it is available
|
|
233
|
+
tokens_cookie_value = get_cookie_with_chunks(
|
|
234
|
+
self._get_signed_cookie, TOKENS_COOKIE_NAME
|
|
235
|
+
)
|
|
236
|
+
if tokens_cookie_value:
|
|
237
|
+
try:
|
|
238
|
+
tokens = json.loads(tokens_cookie_value)
|
|
239
|
+
id_token = tokens.get("id_token")
|
|
240
|
+
if id_token:
|
|
241
|
+
logout_params["id_token_hint"] = id_token
|
|
242
|
+
except (json.JSONDecodeError, TypeError):
|
|
243
|
+
_LOGGER.exception(
|
|
244
|
+
"Error, invalid tokens cookie value.",
|
|
245
|
+
)
|
|
246
|
+
return None
|
|
247
|
+
|
|
248
|
+
return f"{end_session_endpoint}?{urlencode(logout_params)}"
|
|
249
|
+
|
|
250
|
+
except Exception as e:
|
|
251
|
+
_LOGGER.warning("Failed to get provider logout URL: %s", e)
|
|
252
|
+
return None
|
|
173
253
|
|
|
174
254
|
|
|
175
255
|
class AuthCallbackHandler(AuthHandlerMixin, tornado.web.RequestHandler):
|
|
176
256
|
async def get(self) -> None:
|
|
177
257
|
provider = self._get_provider_by_state()
|
|
258
|
+
if provider is None:
|
|
259
|
+
# This could be a logout redirect (no state parameter) or invalid state
|
|
260
|
+
# In both cases, redirect to base
|
|
261
|
+
self.redirect_to_base()
|
|
262
|
+
return
|
|
263
|
+
|
|
178
264
|
origin = self._get_origin_from_secrets()
|
|
179
265
|
if origin is None:
|
|
180
266
|
_LOGGER.error(
|
|
181
|
-
"Error, misconfigured origin for `redirect_uri` in secrets.
|
|
267
|
+
"Error, misconfigured origin for `redirect_uri` in secrets.",
|
|
182
268
|
)
|
|
183
269
|
self.redirect_to_base()
|
|
184
270
|
return
|
|
@@ -200,34 +286,25 @@ class AuthCallbackHandler(AuthHandlerMixin, tornado.web.RequestHandler):
|
|
|
200
286
|
self.redirect_to_base()
|
|
201
287
|
return
|
|
202
288
|
|
|
203
|
-
if provider is None:
|
|
204
|
-
# See https://github.com/streamlit/streamlit/issues/13101
|
|
205
|
-
_LOGGER.warning(
|
|
206
|
-
"Missing provider for OAuth callback; this often indicates a stale "
|
|
207
|
-
"or replayed callback (for example, from browser back/forward "
|
|
208
|
-
"navigation).",
|
|
209
|
-
)
|
|
210
|
-
self.redirect_to_base()
|
|
211
|
-
return
|
|
212
|
-
|
|
213
289
|
client, _ = create_oauth_client(provider)
|
|
214
290
|
token = client.authorize_access_token(self)
|
|
215
291
|
user = cast("dict[str, Any]", token.get("userinfo"))
|
|
216
292
|
|
|
217
|
-
cookie_value = dict(user, origin=origin, is_logged_in=True)
|
|
293
|
+
cookie_value = dict(user, origin=origin, is_logged_in=True, provider=provider)
|
|
218
294
|
tokens = {k: token[k] for k in ["id_token", "access_token"] if k in token}
|
|
219
295
|
|
|
220
296
|
if user:
|
|
221
297
|
self.set_auth_cookie(cookie_value, tokens)
|
|
222
298
|
# Keep tokens in a separate cookie to avoid hitting the size limit
|
|
223
299
|
else:
|
|
224
|
-
_LOGGER.error(
|
|
225
|
-
"Error, missing user info.",
|
|
226
|
-
)
|
|
300
|
+
_LOGGER.error("Error, missing user info.")
|
|
227
301
|
self.redirect_to_base()
|
|
228
302
|
|
|
229
303
|
def _get_provider_by_state(self) -> str | None:
|
|
230
|
-
state_code_from_url = self.get_argument("state")
|
|
304
|
+
state_code_from_url = self.get_argument("state", None)
|
|
305
|
+
if state_code_from_url is None:
|
|
306
|
+
return None
|
|
307
|
+
|
|
231
308
|
current_cache_keys = list(auth_cache.get_dict().keys())
|
|
232
309
|
state_provider_mapping = {}
|
|
233
310
|
for key in current_cache_keys:
|
|
@@ -253,7 +330,7 @@ class AuthCallbackHandler(AuthHandlerMixin, tornado.web.RequestHandler):
|
|
|
253
330
|
redirect_uri = None
|
|
254
331
|
auth_section = get_secrets_auth_section()
|
|
255
332
|
if auth_section:
|
|
256
|
-
redirect_uri = auth_section
|
|
333
|
+
redirect_uri = get_redirect_uri(auth_section)
|
|
257
334
|
|
|
258
335
|
if not redirect_uri:
|
|
259
336
|
return None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
streamlit/__init__.py,sha256=L0AmWTfBy5bfEsfyLRJAOMVp3g2QzhAkWMe7VyQ1OlE,9796
|
|
2
2
|
streamlit/__main__.py,sha256=4vltvfI348h2yIOUohsc2DtG-lclcjCAdR1mewGeMck,868
|
|
3
|
-
streamlit/auth_util.py,sha256=
|
|
3
|
+
streamlit/auth_util.py,sha256=Uq-GbOb-EUDADvLG54yoY388sIJvgCdVR9khAJ9gA4Q,18189
|
|
4
4
|
streamlit/cli_util.py,sha256=ckW8XHbiCgepolHeBrg7GJ-gptkR_7tRMOoO9_1_dck,3466
|
|
5
5
|
streamlit/column_config.py,sha256=JAiL6KDj9bcS-quoiWK8D2rKzG1LGWnY0b5xwY4lVfs,1497
|
|
6
6
|
streamlit/config.py,sha256=AMJT96hCmFUvECkuJPNtU4ff5FguvPu0TlyvZm6V47o,89074
|
|
@@ -30,7 +30,7 @@ streamlit/temporary_directory.py,sha256=EWGVi2kkoIgiKK_GfU-A763c7QkpcHoAOJrKPyqW
|
|
|
30
30
|
streamlit/time_util.py,sha256=vXszmS-05FXEydBSjDjTw4WZ9Q7n8J23tC77cWbTDeA,2493
|
|
31
31
|
streamlit/type_util.py,sha256=zrTFAlNCT_zuNb3Ww32A1gqQUAw8gHaor5DddVwM9wk,13890
|
|
32
32
|
streamlit/url_util.py,sha256=SW1DQvlU9m-I5JtGpPAY-En-PYr7lF_uy11iOjhsfpA,3433
|
|
33
|
-
streamlit/user_info.py,sha256=
|
|
33
|
+
streamlit/user_info.py,sha256=HqPJZcDzKTvKzfyz95ezrjbaXlKJZnehDMZf48UPprU,25251
|
|
34
34
|
streamlit/util.py,sha256=z0iqF3_Nz6bd5pBkkEmavlQ3v-PVB5XMqd43JWVPw50,3625
|
|
35
35
|
streamlit/version.py,sha256=Ume7B4nzDwHGX6gL-F-Xz9tdHMo0YSn96vyNdnHzvVg,763
|
|
36
36
|
streamlit/commands/__init__.py,sha256=iZwXNLk8xCKTqIiR1dIs0i-phfx1ipLkhGasCEwkD2Q,616
|
|
@@ -400,116 +400,116 @@ streamlit/runtime/state/session_state.py,sha256=Ht_GRl_frv9SEBD8onC25J4Z4HAJsZfX
|
|
|
400
400
|
streamlit/runtime/state/session_state_proxy.py,sha256=RI9QquUlMgK6XyUYF3PmpN1mfP6q-_SBju5pIFTrdRU,5585
|
|
401
401
|
streamlit/runtime/state/widgets.py,sha256=CMFaIT-M-59TrskR1zt9eeoea2JJ8_YbG64fbSyd8VA,6057
|
|
402
402
|
streamlit/static/favicon.png,sha256=if5cVgw7azxKOvV5FpGixga7JLn23rfnHcy1CdWI1-E,1019
|
|
403
|
-
streamlit/static/index.html,sha256=
|
|
404
|
-
streamlit/static/manifest.json,sha256=
|
|
403
|
+
streamlit/static/index.html,sha256=CLOtDxabW-EVAp9YYxVKJlI9TYfS_yN0SrBB62aKDsw,1522
|
|
404
|
+
streamlit/static/manifest.json,sha256=OQYi2nWhsWFQk0WuFX5QYTkUZDrtYWy7JaX6lBlPxEg,54244
|
|
405
405
|
streamlit/static/static/css/index.BUP6fTcR.css,sha256=w3J3tj919duL4vtYdmJSXTglGUogRuPuwX9pZd4N9aU,30331
|
|
406
406
|
streamlit/static/static/css/index.BuwrT-ty.css,sha256=Qw-234aemgZdlkzLcmPcc4L5g3WaneJBM0uTqd0L2So,35080
|
|
407
407
|
streamlit/static/static/css/index.DgR7E2CV.css,sha256=XaAj_mKlhpcUTyfDwggG3Sd2DgaiU4U749jeLKb9FBI,12683
|
|
408
|
-
streamlit/static/static/js/ErrorOutline.esm.
|
|
409
|
-
streamlit/static/static/js/FileDownload.esm.
|
|
410
|
-
streamlit/static/static/js/FileHelper.
|
|
411
|
-
streamlit/static/static/js/FormClearHelper.
|
|
408
|
+
streamlit/static/static/js/ErrorOutline.esm.BjVqd_6R.js,sha256=5-R3npf6MGc7VwemiIx-Tp6yY6Iu--ifhxp4Kfl7TyE,499
|
|
409
|
+
streamlit/static/static/js/FileDownload.esm.DJCSsghl.js,sha256=c7YxsZfdMdsAJcp_LvBB6E3K-fa4LYrPZ65TMaMHBr8,918
|
|
410
|
+
streamlit/static/static/js/FileHelper.C---TH7o.js,sha256=eo_Lmh6fG4hxfoUwsIkDtrgMN4TdB2mRb0odp9fuvkk,61226
|
|
411
|
+
streamlit/static/static/js/FormClearHelper.C-6BC487.js,sha256=HrK3VEzexOni7zY9etv59JZsg4dQniAkCmHnazm-p_k,611
|
|
412
412
|
streamlit/static/static/js/IFrameUtil.DefezniK.js,sha256=vHcPNVM2AZouiO3NiM8fcBjO0JE9niGWSdld1T5AQeQ,564
|
|
413
|
-
streamlit/static/static/js/InputInstructions.
|
|
414
|
-
streamlit/static/static/js/Particles.
|
|
415
|
-
streamlit/static/static/js/ProgressBar.
|
|
416
|
-
streamlit/static/static/js/StreamlitSyntaxHighlighter.
|
|
417
|
-
streamlit/static/static/js/TableChart.esm.
|
|
418
|
-
streamlit/static/static/js/Toolbar.
|
|
413
|
+
streamlit/static/static/js/InputInstructions.sxc3InCI.js,sha256=jJk3A9wr2oycu-hpAL6ToiBastLIMrNJuZJ2tdzsywo,919
|
|
414
|
+
streamlit/static/static/js/Particles.S8yD7iW-.js,sha256=eo7S24dW3YMMuj-98wahceTom7QTBqvAeQyQRYtqwZg,615
|
|
415
|
+
streamlit/static/static/js/ProgressBar.BiYsyZCC.js,sha256=apBw9UWVM-7uMnsJ8bW2gBm4Hvo-y2uAKw5w9HE433Y,13320
|
|
416
|
+
streamlit/static/static/js/StreamlitSyntaxHighlighter.9jZF8jX1.js,sha256=JhHRXXRp1UNl25UkBzF0J4EyVNBZHWX5o7Phj79Dkvs,1620541
|
|
417
|
+
streamlit/static/static/js/TableChart.esm.BdA4Q1rZ.js,sha256=h7HW0vVXcdtPQ77LO_N5e8LEEdTms3r3dxGsMIDgFxc,526
|
|
418
|
+
streamlit/static/static/js/Toolbar.B9DaaDfN.js,sha256=e1OHz6kNDXMFRh40V1EfmhQkjO6meyspsRXhw0LlDag,2916
|
|
419
419
|
streamlit/static/static/js/UploadFileInfo.Dr-zDST7.js,sha256=5a_iq85gVIuXJJ3oRHHpEtx73pm7QA2BwIcrkQUkpiI,175
|
|
420
|
-
streamlit/static/static/js/WidgetLabelHelpIconInline.
|
|
420
|
+
streamlit/static/static/js/WidgetLabelHelpIconInline.DxODTLS2.js,sha256=D8i9Tp4i61xLJlhEhFrb7DXd5elT1OizasBXQBnGwPE,348
|
|
421
421
|
streamlit/static/static/js/_arrayIncludes.B19Iyn2B.js,sha256=JP-DCSLwDMyVDLPMC1_99tqHMMNzTx8SwAT1rVKXIAA,127
|
|
422
422
|
streamlit/static/static/js/_baseIndexOf.BTknn6Gb.js,sha256=qpBWPWZljEJmX5vLgn6Tup6ZhVl54fGKj7xVTKZ2Ep0,258
|
|
423
|
-
streamlit/static/static/js/base-input.
|
|
424
|
-
streamlit/static/static/js/checkbox.
|
|
425
|
-
streamlit/static/static/js/createDownloadLinkElement.
|
|
426
|
-
streamlit/static/static/js/data-grid-overlay-editor.
|
|
427
|
-
streamlit/static/static/js/downloader.
|
|
428
|
-
streamlit/static/static/js/embed.
|
|
429
|
-
streamlit/static/static/js/es6.
|
|
423
|
+
streamlit/static/static/js/base-input.Gf1cKuQR.js,sha256=cfy3ljRxQaYFhgXA9p3fznBFPIB6UP6goCnrJ51zoR8,21773
|
|
424
|
+
streamlit/static/static/js/checkbox.CnoNruf3.js,sha256=5lIBmC7kF1FcWWKRy5q-mC3-JomA9dnbIyDXqDgmXec,11245
|
|
425
|
+
streamlit/static/static/js/createDownloadLinkElement.B48AepiL.js,sha256=ycbevSCL3N1_MtxoLJ1fGfNdegGfufkgw0lq8WBSXW8,388
|
|
426
|
+
streamlit/static/static/js/data-grid-overlay-editor.Cmdq9aqU.js,sha256=FMCio9bts2Qf0QhcddpLFsZUoHCVM9sJIEdVx1RRxD0,4399
|
|
427
|
+
streamlit/static/static/js/downloader.CQLoQdMX.js,sha256=JyDcdUlGVanRLn5rkvyl_5RpbI0Lsk57WlzWFDwf_Zo,2510
|
|
428
|
+
streamlit/static/static/js/embed.oKwocwU8.js,sha256=QVGyasa9DuBUNO5OzAiW33nOrCOT2O2VdLmD7kTE0Mk,831630
|
|
429
|
+
streamlit/static/static/js/es6.BRxlY_y5.js,sha256=zTG8o5V6qAgNP0UO1fhD26ZaOuS5udKbJY5nxBvNMwo,14634
|
|
430
430
|
streamlit/static/static/js/formatMoment.C6Hwn6X5.js,sha256=lIQHfN3RbfShBuVFfO9t_az4TUNV678ZJJSQYqRuANY,575
|
|
431
|
-
streamlit/static/static/js/formatNumber.
|
|
432
|
-
streamlit/static/static/js/iconPosition.
|
|
433
|
-
streamlit/static/static/js/iframeResizer.contentWindow.
|
|
434
|
-
streamlit/static/static/js/index.
|
|
435
|
-
streamlit/static/static/js/index.
|
|
436
|
-
streamlit/static/static/js/index.6_D2Y2jA.js,sha256=NK9frTKWuXbttGaMLo9nbmXkFV0e8FLi3Mqr8Mdl4QI,24096
|
|
431
|
+
streamlit/static/static/js/formatNumber.DaagZyZe.js,sha256=4kmXCN96egQtZ6xKj_rKnS_LtK3O09hXzxjP38FKEv4,1818
|
|
432
|
+
streamlit/static/static/js/iconPosition.Q3hNvmK4.js,sha256=-GaR3_Yvj_iaelgMM8B1wOcd3I8_uhfMndf5NAi5Cbo,203
|
|
433
|
+
streamlit/static/static/js/iframeResizer.contentWindow.B6EBvI9L.js,sha256=fqjU_Vw0XWYZZb40yiLc03vyOPks_UprkfOKWOBq4iM,14409
|
|
434
|
+
streamlit/static/static/js/index.19_qtO6t.js,sha256=xjPMV8sqZ4bTWY4QZQJ7ntXORBo4l_jV5HAHrRR_Ksk,271288
|
|
435
|
+
streamlit/static/static/js/index.43b777iP.js,sha256=P0-I6tYbq848TqKGOSXaFas0mhzg62oRECNmzS1SVlU,8305
|
|
437
436
|
streamlit/static/static/js/index.8HslT92O.js,sha256=Ahu9KsYwa_TyEGNbQBWydVmpBAsTcDdi0zdwD-Wf8ME,27051
|
|
438
|
-
streamlit/static/static/js/index.
|
|
439
|
-
streamlit/static/static/js/index.
|
|
440
|
-
streamlit/static/static/js/index.
|
|
441
|
-
streamlit/static/static/js/index.B6EliwN_.js,sha256=gxPuldpv73NSKFsODitsJptzrb17JQm1EECqelATnJs,1560
|
|
442
|
-
streamlit/static/static/js/index.B6Uhb_NP.js,sha256=wnU_Yfl_Y4zOkdIQQUoGnXVzGI_AGYDVYkLfoElzIkg,100087
|
|
443
|
-
streamlit/static/static/js/index.B7EzT2pL.js,sha256=wzbM8S2hLiGbfYrOm2XSK4flBlbA1b903fjkDab-GYg,13914
|
|
444
|
-
streamlit/static/static/js/index.B9DrCSR6.js,sha256=jESkBmNuZxWcOgqFIOpixQkh5w0FKZsAnO70W0tQhsI,18346
|
|
437
|
+
streamlit/static/static/js/index.B03eQZoH.js,sha256=oXpE84PckeGABmwpLUOAqzGIa05rGBFEFUN8ru-H4oA,2671
|
|
438
|
+
streamlit/static/static/js/index.B9kZB0o1.js,sha256=43VzIw5RFTqb0z2AMRCyrQOweBk0BZJy1B5K-Tz6waQ,2219
|
|
439
|
+
streamlit/static/static/js/index.BAI9aHCq.js,sha256=ilFHVnutgWFJGJCJf0vNdt6GHUaqpBue6382-CiTv3E,442
|
|
445
440
|
streamlit/static/static/js/index.BBTKOM0z.js,sha256=-L-kKO9s5qX0eLfjdpWq_CHhzPvtPGA1A0oRn-RB8HM,36545
|
|
446
|
-
streamlit/static/static/js/index.
|
|
447
|
-
streamlit/static/static/js/index.
|
|
448
|
-
streamlit/static/static/js/index.
|
|
449
|
-
streamlit/static/static/js/index.
|
|
450
|
-
streamlit/static/static/js/index.
|
|
451
|
-
streamlit/static/static/js/index.
|
|
452
|
-
streamlit/static/static/js/index.
|
|
453
|
-
streamlit/static/static/js/index.
|
|
454
|
-
streamlit/static/static/js/index.
|
|
455
|
-
streamlit/static/static/js/index.
|
|
456
|
-
streamlit/static/static/js/index.
|
|
457
|
-
streamlit/static/static/js/index.
|
|
458
|
-
streamlit/static/static/js/index.
|
|
459
|
-
streamlit/static/static/js/index.
|
|
460
|
-
streamlit/static/static/js/index.
|
|
461
|
-
streamlit/static/static/js/index.
|
|
462
|
-
streamlit/static/static/js/index.
|
|
463
|
-
streamlit/static/static/js/index.
|
|
464
|
-
streamlit/static/static/js/index.
|
|
465
|
-
streamlit/static/static/js/index.
|
|
466
|
-
streamlit/static/static/js/index.
|
|
467
|
-
streamlit/static/static/js/index.
|
|
468
|
-
streamlit/static/static/js/index.
|
|
469
|
-
streamlit/static/static/js/index.
|
|
470
|
-
streamlit/static/static/js/index.
|
|
471
|
-
streamlit/static/static/js/index.
|
|
472
|
-
streamlit/static/static/js/index.
|
|
473
|
-
streamlit/static/static/js/index.
|
|
474
|
-
streamlit/static/static/js/index.
|
|
475
|
-
streamlit/static/static/js/index.
|
|
476
|
-
streamlit/static/static/js/index.
|
|
477
|
-
streamlit/static/static/js/index.
|
|
478
|
-
streamlit/static/static/js/index.
|
|
479
|
-
streamlit/static/static/js/index.
|
|
480
|
-
streamlit/static/static/js/index.
|
|
441
|
+
streamlit/static/static/js/index.BF23fbfs.js,sha256=nGyyZlHDT-llv8iPE_3QjKf6KU4NMq-TOONgxO53KnM,3252
|
|
442
|
+
streamlit/static/static/js/index.BGBTkulf.js,sha256=WeJxqwMyc6bgaYFk4hOyMXTFUr4OryQS6RdbdMKDRoA,1345
|
|
443
|
+
streamlit/static/static/js/index.BRfGUOQ-.js,sha256=7oTo_m4I_3iIreCVvmD9G7hkahC8L0kGJZx81u6em5E,2295364
|
|
444
|
+
streamlit/static/static/js/index.BVT89mQw.js,sha256=iFUxiMrB3nYdvdoKSpe0r1X3Y8anPHEPXUGgRhRhXzQ,1605
|
|
445
|
+
streamlit/static/static/js/index.BXEC4cf3.js,sha256=yHGk-D81Klp_WVjzinHNhWX0FmoydumBP1ORWBNLHUI,7264
|
|
446
|
+
streamlit/static/static/js/index.BbSFVZ3p.js,sha256=c3h0myJBShVq53RvkMw2v-d1spuhWlZmhq9yFgXQDgY,1560
|
|
447
|
+
streamlit/static/static/js/index.BkSwGJoh.js,sha256=YP6uJLk0hWqmYfJdoTnmzZsHE2-3ij-gzjUym4KJaow,13914
|
|
448
|
+
streamlit/static/static/js/index.BnfTPrHb.js,sha256=obLE7k_siJst99pwDb8abdzVVAfhkhLDJFZRGmF8mIA,100087
|
|
449
|
+
streamlit/static/static/js/index.BoX8d5rK.js,sha256=x_7lSD9M6vcgfjvQKtYJOwffgv0mF9s94as-wHfgxM0,2539
|
|
450
|
+
streamlit/static/static/js/index.Boa0Egng.js,sha256=87slzb9bmqA0kTMBnsPNw84Rq1jklYN6Gom57MBj0Tg,9184
|
|
451
|
+
streamlit/static/static/js/index.BzwlrgZO.js,sha256=nHsYCCRzs-54ULrUnCz_gP8kOi3KX8Mnnjtej0JFyX8,6906
|
|
452
|
+
streamlit/static/static/js/index.C0fSEz-3.js,sha256=3cbPFYAa1qIXXKRSt71y4pL0dPZDm2qwzHRoZ3bxues,2824
|
|
453
|
+
streamlit/static/static/js/index.CCFwVy90.js,sha256=kUpyHdKXZYtodwJ98U7sD9S61zkvBp9LzyJ5_EUfgww,878
|
|
454
|
+
streamlit/static/static/js/index.CCQ5p_WC.js,sha256=2XuVZ7yCarxZD2JoqvGBzbeGLlz9zkUpRK__o63VIKc,8012
|
|
455
|
+
streamlit/static/static/js/index.CFCBhOfx.js,sha256=YlWwWYYARi0ygq53QX3p8hGEM2OT99tW6GuH0CpiO6c,4863
|
|
456
|
+
streamlit/static/static/js/index.CIbgt5wY.js,sha256=7XXGzLlLXc6ojf0kmHycSnp8l91uVqH9hBq4ZvenZ-4,3807
|
|
457
|
+
streamlit/static/static/js/index.CJ4oJe0V.js,sha256=AgPHzGVH0YUYD4U1j_pSG7PXje6cBe99_T7ywsq27Gk,750
|
|
458
|
+
streamlit/static/static/js/index.CP-hoxJM.js,sha256=qUixBeHHKqbNIH31R9Vi4t1RQ6A0ywThwXO83mgfjwc,24096
|
|
459
|
+
streamlit/static/static/js/index.CSfsEKCF.js,sha256=SO277h7L_ecnS5XHHluGZVCnW1vHSNUS7jqdRoyVk88,35980
|
|
460
|
+
streamlit/static/static/js/index.CVlg41MB.js,sha256=5W504g45ODAkuwBehiqueziqN45bSUQZGwKDCg9SnJ4,2967
|
|
461
|
+
streamlit/static/static/js/index.CYE7b5Du.js,sha256=3v0Ahv2moyPQLyg1r5m1F46_rHOoQWMaG1cgeumaE4k,828422
|
|
462
|
+
streamlit/static/static/js/index.Ca7MUNWJ.js,sha256=XrNpCsyJQEl6KM6PtaElkaCh56XCF4aMr0pdOaZ876Q,5820
|
|
463
|
+
streamlit/static/static/js/index.CrPjcPY1.js,sha256=qVkU60hT10uQhV1D5vATpWbmHtSIi3WzPmN7w8odAGY,28214
|
|
464
|
+
streamlit/static/static/js/index.CvB9JBqS.js,sha256=C4yLyHh2vWoesUjwPhVeCy4VXUZLKZvLSoRcJbbxHDc,443995
|
|
465
|
+
streamlit/static/static/js/index.CvIqsWy1.js,sha256=jsg1xWGOHCHeV49dZeD9Am5OGfZ7QtMzvUQP47O2-4c,1398
|
|
466
|
+
streamlit/static/static/js/index.D1pK_Vw2.js,sha256=ABbrU2FKqubSqS-h0YWeg_jQ5SWSBW0uPuc2Oux-CL8,2958
|
|
467
|
+
streamlit/static/static/js/index.D6X2coHR.js,sha256=rjEH9szZjC2ADuicH2r3UC1n3jYBB5SYwaeTmuXjZso,4874479
|
|
468
|
+
streamlit/static/static/js/index.DGYHxruh.js,sha256=rhnLQnii_-cKtSyhOHFLX0HeMbkrFS3QGD04AJ_zUmE,3928
|
|
469
|
+
streamlit/static/static/js/index.DJ7P09eb.js,sha256=uKSh_K-kVGfnMbbiAcvPFHJlaAGvwTEGjgcdRPNrXfE,4165
|
|
470
|
+
streamlit/static/static/js/index.Dh5SAThV.js,sha256=b1Su8zzTaixo8jQ8myntU412dEz4oJLqir3kJBvTqNs,13388
|
|
471
|
+
streamlit/static/static/js/index.Fu73QtkD.js,sha256=dertRfHRPbXf2HpOF9FRqxG2XhGUl6GRGx9PA4V4DGM,13695
|
|
472
|
+
streamlit/static/static/js/index.KN1VmyYN.js,sha256=Q6E1U8XHxfL2yR6WcGVTzJAPv_WfiGmQZypPZRuoX90,226891
|
|
473
|
+
streamlit/static/static/js/index.KtjGDGY5.js,sha256=88E5B5lFj8xSvUU2PfNHwyE_8brdUiKGGdF3W6cD0E0,18346
|
|
474
|
+
streamlit/static/static/js/index.OpATzEaW.js,sha256=wZNQkum8htCLZ77ly6FezshwK9Yc5NWyWU_55yuvJ6o,190412
|
|
475
|
+
streamlit/static/static/js/index.QHnxuesF.js,sha256=aLzM9xH-13KYqP3sCV7r68y3CyJOXlpsXalIy0mmMz8,13944
|
|
476
|
+
streamlit/static/static/js/index.QTaWooav.js,sha256=sbPcu-u4CLajtNisGBkBwHKZqBOQGZe40mzSj05Zcv0,2998
|
|
477
|
+
streamlit/static/static/js/index.WXybx2Xq.js,sha256=yJyKvWFoJNkn8LExfgHeztACZc9v_Z87qCtYgeR-N_A,24369
|
|
478
|
+
streamlit/static/static/js/index.Xg-Qttib.js,sha256=FVcf_SEM44uG1P5YLh51fCWPMIwlvf2fI436AsPRG8c,679
|
|
481
479
|
streamlit/static/static/js/index.bsVAaBS1.js,sha256=iWnuL74SwTYzvoX2fcuvoTFm5zB-8g4oiMdjHAZiH0g,252
|
|
482
|
-
streamlit/static/static/js/index.
|
|
483
|
-
streamlit/static/static/js/index.
|
|
484
|
-
streamlit/static/static/js/index.
|
|
485
|
-
streamlit/static/static/js/
|
|
480
|
+
streamlit/static/static/js/index.j4fnjyHo.js,sha256=3ryimQLmAr3Y3kMmDkGKFDjrZz1R5WqxWQiqcg9IlA0,18040
|
|
481
|
+
streamlit/static/static/js/index.na9UBuse.js,sha256=YjLgiF_jcPWSwkWXU8XlqJBWG7Mf9stiu0hw6FeDd4M,2604887
|
|
482
|
+
streamlit/static/static/js/index.pU9mQeVC.js,sha256=TzD1Mv4NHwhoekS2G6ESpKoNxBlR3Iocmziz9G83ZYk,1834
|
|
483
|
+
streamlit/static/static/js/index.slgxPafU.js,sha256=r47TYvxhcQ9Wp15uUvd6vTBtVxLnWqOQBniQtIr5z20,19038
|
|
484
|
+
streamlit/static/static/js/index.whRT3Vm3.js,sha256=_PWk6EIcd6QWMhBrIhSF7RGgY2uFAkLUolfCCbHA6n4,1193
|
|
485
|
+
streamlit/static/static/js/input.CPzINTl-.js,sha256=EH1Odug7XrRo7SXHc_s5JyN2FL1NefcM6Te2nxyTcKE,5242
|
|
486
486
|
streamlit/static/static/js/inputUtils.CptNuJwn.js,sha256=v9SUbdkM8OJ6aT_EfTucTRNZh059kZ9Mut2oyTmv_98,124
|
|
487
|
-
streamlit/static/static/js/main.
|
|
488
|
-
streamlit/static/static/js/memory.
|
|
487
|
+
streamlit/static/static/js/main.DSPn8dUe.js,sha256=AehZeBxBKUcNjAo7GpprWPz9ptRbO7vgZe_1ZMpQxYc,117541
|
|
488
|
+
streamlit/static/static/js/memory.CfD8IGoU.js,sha256=-CGVQaM9Oj8737iNmpoa29wq-zHAly2y-LE-9hvRlaI,3041
|
|
489
489
|
streamlit/static/static/js/moment.C7qA8nIE.js,sha256=WGJqjUq9SPn-dCBlrSpQZOywPJ4xVg2eYZN-CP7-3X0,60773
|
|
490
|
-
streamlit/static/static/js/number-overlay-editor.
|
|
490
|
+
streamlit/static/static/js/number-overlay-editor.4Ae0qegV.js,sha256=wNaLH9rcOT1Wl_DAdEtqCR5VYayZiuPUwGlSsVEsBLQ,16652
|
|
491
491
|
streamlit/static/static/js/numbro.B9_PXfzp.js,sha256=JcWnIUWk7g3KL9hw0uuI--Tp_c_VOTPXqigpxrpjzeo,39660
|
|
492
|
-
streamlit/static/static/js/pandasStylerUtils.
|
|
492
|
+
streamlit/static/static/js/pandasStylerUtils.D2EjZ7k6.js,sha256=pu1DDtwud2Gljho-j00QS2NkbH743RcJ_FrMsBXagXo,739437
|
|
493
493
|
streamlit/static/static/js/record.DytFsBUt.js,sha256=1w_An_VyZRJTSv6lYzs_Sz9SOgdyfRSOG846ygJS4MY,8028
|
|
494
|
-
streamlit/static/static/js/sandbox.
|
|
494
|
+
streamlit/static/static/js/sandbox.C6vcPIm0.js,sha256=MLp0wY_pgzQESYWfG2FHC_ONgck0VY7BAAPum4xJ1VU,2960
|
|
495
495
|
streamlit/static/static/js/sprintf.DpPCfzXw.js,sha256=SggQTlOztni2KsY0aRfgxAjYLCwS7NSUUSCbzZtYpr8,3436
|
|
496
|
-
streamlit/static/static/js/styled-components.
|
|
496
|
+
streamlit/static/static/js/styled-components.BBmp8buj.js,sha256=Q89aCHAMT_TBvrCP6Gaj1VGFWPyh4EI-WUocwQgVRS0,468
|
|
497
497
|
streamlit/static/static/js/threshold.CUNQbqMA.js,sha256=Q3du4LR3IorexmjW-Ab8y_y_9cO_8M_ddTX6YKht2p8,5698
|
|
498
|
-
streamlit/static/static/js/throttle.
|
|
499
|
-
streamlit/static/static/js/timepicker.
|
|
498
|
+
streamlit/static/static/js/throttle.BPcPpy-S.js,sha256=pZqkRabQxl8Lf-A1PTxRTnXEKQKuKPHpbJOT6UB17xg,1262
|
|
499
|
+
streamlit/static/static/js/timepicker.ryzkTs2C.js,sha256=yWB6miwAuP5rBrxJ6UKznfUDCenOk9jyPrONGmzc_a8,89207
|
|
500
500
|
streamlit/static/static/js/timer.BZio6gjG.js,sha256=vRTmDI39QE6fIvFrIvCwyjsG8MNme68-qu_yYiNUaqQ,7410
|
|
501
|
-
streamlit/static/static/js/toConsumableArray.
|
|
502
|
-
streamlit/static/static/js/uniqueId.
|
|
501
|
+
streamlit/static/static/js/toConsumableArray.Dg1nDaB_.js,sha256=Qx9snp_UypSxfIw_lCe_Eperivt0JmC5eUa7BFezBMM,877
|
|
502
|
+
streamlit/static/static/js/uniqueId.BFHzT5KQ.js,sha256=mhTBFYfBqXHxGvriJQWwP-zqpm9m9ti8ByQMtquNAiU,97
|
|
503
503
|
streamlit/static/static/js/urls.BwSlolu9.js,sha256=oj7KbEdZXmm91zYfQyVjZY6MYvu7aKe2nX2Uzq_T5c4,275
|
|
504
|
-
streamlit/static/static/js/useBasicWidgetState.
|
|
505
|
-
streamlit/static/static/js/useIntlLocale.
|
|
506
|
-
streamlit/static/static/js/useTextInputAutoExpand.
|
|
507
|
-
streamlit/static/static/js/useUpdateUiValue.
|
|
508
|
-
streamlit/static/static/js/useWaveformController.
|
|
504
|
+
streamlit/static/static/js/useBasicWidgetState.A4U5lzAm.js,sha256=bAyg8YA7NaIHifgqzTYfQlDntaEfkA5HccLxEqELilo,953
|
|
505
|
+
streamlit/static/static/js/useIntlLocale.DWJgLlNz.js,sha256=AOb7Ff5PdxB76dVgekAUZpiZ6JMOH0eUPLxHMvCoHHs,109692
|
|
506
|
+
streamlit/static/static/js/useTextInputAutoExpand.BrBonw8t.js,sha256=_ZrnywQ4l7g3TDle3T2Le2CGYHNfn53rkQ_3KYcCtnw,6643
|
|
507
|
+
streamlit/static/static/js/useUpdateUiValue.BkOWyNVX.js,sha256=aWXNhBYvKzGtaCV42KdsHdCE0ec00JDxi0QBnEaUf5o,615
|
|
508
|
+
streamlit/static/static/js/useWaveformController.CBlvXlgZ.js,sha256=1jNnwW64Yo0dJePsem46Qd9EEk0IzhnFRgC7YIrX3Bg,12364
|
|
509
509
|
streamlit/static/static/js/value.DaKxGC7O.js,sha256=bicc2v81rJzY9PmrISkaY1Z9A3aJmsRRK5aMj5nGmrc,15044
|
|
510
510
|
streamlit/static/static/js/wavesurfer.esm.D1Sty35j.js,sha256=GYinzhehnkxBppDnKJLH3b87dUJ7gBJxN8F1D3_Hn6E,39578
|
|
511
|
-
streamlit/static/static/js/withCalculatedWidth.
|
|
512
|
-
streamlit/static/static/js/withFullScreenWrapper.
|
|
511
|
+
streamlit/static/static/js/withCalculatedWidth.D4cpOyNe.js,sha256=t1y-gnO6N5SRcItyXqtX3--Swd6nJ5MaQ9woohRZKW4,260
|
|
512
|
+
streamlit/static/static/js/withFullScreenWrapper.BMim3w94.js,sha256=nuVH6bsu_lgj1bEYNQRzyHXjteRSsUTpzAPq-IwUi_c,1541
|
|
513
513
|
streamlit/static/static/media/KaTeX_AMS-Regular.BQhdFMY1.woff2,sha256=DN04fJWQoan5eUVgAi27WWVKfYbxh6oMgUla1C06cwg,28076
|
|
514
514
|
streamlit/static/static/media/KaTeX_AMS-Regular.DMm9YOAa.woff,sha256=MNqR6EyJP4deJSaJ-uvcWQsocRReitx_mp1NvYzgslE,33516
|
|
515
515
|
streamlit/static/static/media/KaTeX_AMS-Regular.DRggAlZN.ttf,sha256=aFNIQLz90r_7bw6N60hoTdAefwTqKBMmdXevuQbeHRM,63632
|
|
@@ -612,11 +612,11 @@ streamlit/web/server/app_discovery.py,sha256=gDQPfiSmnz4DANLOkjOSNJZHDpYTkhpFYW6
|
|
|
612
612
|
streamlit/web/server/app_static_file_handler.py,sha256=fp-iK3cuCSVW8U6rg1klRCR2q3yZMV4u0mnnlfY_iNY,3224
|
|
613
613
|
streamlit/web/server/authlib_tornado_integration.py,sha256=0uIRIjPA9EmRUI65OW5Am4uKFok0fbSMZ52U5YmCK7o,4432
|
|
614
614
|
streamlit/web/server/bidi_component_request_handler.py,sha256=fAfm5vTGD5gA3VRq6NmMtt9EkjalGmPTvT77pTKZUg8,6932
|
|
615
|
-
streamlit/web/server/browser_websocket_handler.py,sha256=
|
|
615
|
+
streamlit/web/server/browser_websocket_handler.py,sha256=UcyCPjYaNlyhCyFdv1JkTSVPh9XIQpmKG4Ag_9NkYCc,13980
|
|
616
616
|
streamlit/web/server/component_file_utils.py,sha256=3sA9Ius2mkGtec59ijuEn80YJ_DGCpiy2inbz8NfLHs,3568
|
|
617
617
|
streamlit/web/server/component_request_handler.py,sha256=2vNGa8H9_AoykQQfUNmezg1-a0bvULboI3HvIEhI76k,3718
|
|
618
618
|
streamlit/web/server/media_file_handler.py,sha256=DQqTSVfn1VCormeddtDTKN3tb49z2zCCN-8UBLb6zLo,5562
|
|
619
|
-
streamlit/web/server/oauth_authlib_routes.py,sha256=
|
|
619
|
+
streamlit/web/server/oauth_authlib_routes.py,sha256=2TTifiPBlAnf0UsjqMOQ_QlCCfpst7LySfFhVVvMV24,12776
|
|
620
620
|
streamlit/web/server/oidc_mixin.py,sha256=cC9oFJv2lbIP3F--4isZ-F8s441x9lzcUPR21u9dDZA,5247
|
|
621
621
|
streamlit/web/server/routes.py,sha256=0Rthy3Q-Ac7Tkfu0z_DA5U0ADo8fu03od333xXA7uWA,9799
|
|
622
622
|
streamlit/web/server/server.py,sha256=AcUa82xq2rW2njqNlRprFi3b34sBJ9I01IRG8Thaevo,20319
|
|
@@ -634,9 +634,9 @@ streamlit/web/server/starlette/starlette_server.py,sha256=pBmwN6nFEruMonhajjd-ID
|
|
|
634
634
|
streamlit/web/server/starlette/starlette_server_config.py,sha256=_cgub_NiTO-52etLfEMIoe5bWgA3TVianT2mYCVQmqo,2508
|
|
635
635
|
streamlit/web/server/starlette/starlette_static_routes.py,sha256=sDLGRlIvFCBQieXOf0BmueYVP3KJTfvGy-ux3Tk4D6E,7547
|
|
636
636
|
streamlit/web/server/starlette/starlette_websocket.py,sha256=f64fojwihK7XXIfYT4HGNLd1TPZJMT7JEK43h4ScDAg,21338
|
|
637
|
-
streamlit_nightly-1.52.3.
|
|
638
|
-
streamlit_nightly-1.52.3.
|
|
639
|
-
streamlit_nightly-1.52.3.
|
|
640
|
-
streamlit_nightly-1.52.3.
|
|
641
|
-
streamlit_nightly-1.52.3.
|
|
642
|
-
streamlit_nightly-1.52.3.
|
|
637
|
+
streamlit_nightly-1.52.3.dev20260112.data/scripts/streamlit.cmd,sha256=es_jE8w9dt6l9DA40xFlQjGJeVq1Of8rDJQNibPUlEA,676
|
|
638
|
+
streamlit_nightly-1.52.3.dev20260112.dist-info/METADATA,sha256=d3QHrMnFWjGKo3AAGmY8msZwkBSanP3OfmY6V7wrsb4,10214
|
|
639
|
+
streamlit_nightly-1.52.3.dev20260112.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
640
|
+
streamlit_nightly-1.52.3.dev20260112.dist-info/entry_points.txt,sha256=uNJ4DwGNXEhOK0USwSNanjkYyR-Bk7eYQbJFDrWyOgY,53
|
|
641
|
+
streamlit_nightly-1.52.3.dev20260112.dist-info/top_level.txt,sha256=V3FhKbm7G2LnR0s4SytavrjIPNIhvcsAGXfYHAwtQzw,10
|
|
642
|
+
streamlit_nightly-1.52.3.dev20260112.dist-info/RECORD,,
|