discovery-media-player 0.1.44 → 0.1.45
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/package.json +1 -1
- package/server/browser.generated.js +1 -1
- package/server/handler.js +21 -26
- package/server/shared.generated.js +7 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "discovery-media-player",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.45",
|
|
4
4
|
"description": "Self-hosted document viewer: per-recipient tracked links, reading analytics, live presentation. The core knows nothing about the application hosting it — everything it borrows arrives through an injected context.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pdf-viewer",
|
|
@@ -4,4 +4,4 @@
|
|
|
4
4
|
// Injecté par api/doc.js dans un <script nonce=…> de la visionneuse. Le code navigateur du
|
|
5
5
|
// player vit en modules TypeScript testés sous player/src/ — c'est ici qu'il atterrit.
|
|
6
6
|
"use strict";
|
|
7
|
-
module.exports = { PLAYER_BROWSER_JS: "\"use strict\";var Player=(()=>{var C=Object.defineProperty,Ne=Object.defineProperties,$e=Object.getOwnPropertyDescriptor,He=Object.getOwnPropertyDescriptors,Ue=Object.getOwnPropertyNames,be=Object.getOwnPropertySymbols;var he=Object.prototype.hasOwnProperty,De=Object.prototype.propertyIsEnumerable;var ye=(e,n,t)=>n in e?C(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t,K=(e,n)=>{for(var t in n||(n={}))he.call(n,t)&&ye(e,t,n[t]);if(be)for(var t of be(n))De.call(n,t)&&ye(e,t,n[t]);return e},ve=(e,n)=>Ne(e,He(n));var v=(e,n)=>{for(var t in n)C(e,t,{get:n[t],enumerable:!0})},We=(e,n,t,r)=>{if(n&&typeof n==\"object\"||typeof n==\"function\")for(let o of Ue(n))!he.call(e,o)&&o!==t&&C(e,o,{get:()=>n[o],enumerable:!(r=$e(n,o))||r.enumerable});return e};var Ve=e=>We(C({},\"__esModule\",{value:!0}),e);var Nn={};v(Nn,{bridge:()=>L,cadence:()=>O,chat:()=>H,live:()=>$,presentation:()=>U,presentationState:()=>W,tracking:()=>N,viewer:()=>D});var L={};v(L,{onHostMessage:()=>Xe,onPlayerMessage:()=>qe,parseHostMessage:()=>_e,parsePlayerMessage:()=>xe,sendToHost:()=>Be,sendToPlayer:()=>Ye,toWire:()=>Y});var B=\"3dd-doc-\",Fe=/^[A-Za-z0-9_-]{1,64}$/,ze=[\"close\",\"share\",\"embed-ready\",\"present-left\",\"present-denied\"],je=[\"embed-denied\"],Ge=[\"present-invite\",\"present-handover\",\"present-switch\"],Ke=[\"handover-done\"];function Y(e){let n={type:B+e.type};return\"slug\"in e&&e.slug&&(n.slug=e.slug),\"reason\"in e&&e.reason&&(n.reason=String(e.reason).slice(0,40)),n}function Me(e,n,t){if(!e||typeof e!=\"object\")return null;let r=e.type;if(typeof r!=\"string\"||!r.startsWith(B))return null;let o=r.slice(B.length);if(n.includes(o))return{type:o};if(je.includes(o)){let a=e.reason;return{type:o,reason:/^[a-z-]{1,40}$/.test(String(a||\"\"))?String(a):\"unknown\"}}if(!t.includes(o))return null;let s=e.slug;return typeof s!=\"string\"||!Fe.test(s)?null:{type:o,slug:s}}function xe(e){return Me(e,ze,Ge)}function _e(e){return Me(e,Ke,[])}function Be(e,n){try{let t=n||(typeof window!=\"undefined\"?window.parent:null);t&&t.postMessage(Y(e),\"*\")}catch(t){}}function Ye(e,n){var t;try{(t=e==null?void 0:e.contentWindow)==null||t.postMessage(Y(n),\"*\")}catch(r){}}function Ze(e,n){var r;if(!e)return!0;let t=(r=e.contentWindow)!=null?r:e;return n===t}function qe(e,n,t){let r=n||(typeof window!=\"undefined\"?window:null);if(!r)return()=>{};let o=s=>{if(!Ze(t,s.source))return;let a=xe(s.data);a&&e(a)};return r.addEventListener(\"message\",o),()=>r.removeEventListener(\"message\",o)}function Xe(e,n){var s;let t=n||(typeof window!=\"undefined\"?window:null);if(!t)return()=>{};let r=(s=t.parent)!=null?s:null,o=a=>{if(!r||r===t||a.source!==r)return;let l=_e(a.data);l&&e(l)};return t.addEventListener(\"message\",o),()=>t.removeEventListener(\"message\",o)}var N={};v(N,{createTracker:()=>rn});var O={};v(O,{PRESENTER_ACTIONS_PER_HOUR:()=>Se,PRESENT_QUOTA_PER_HOUR:()=>Je,PRESENT_READS_PER_HOUR:()=>ke,PRESENT_RESYNC_MS:()=>we,PRESENT_WRITE_TIMEOUT_MS:()=>Q,READERS_PER_EGRESS:()=>q,RESYNC_READS_PER_HOUR:()=>Ee,SESSION_IDLE_MS:()=>X,SESSION_INTERVAL_MS:()=>Z,SESSION_QUOTA_PER_HOUR:()=>Qe,SESSION_WRITES_PER_HOUR:()=>Te});var Z=12e3,Te=Math.ceil(300),q=25,Qe=Te*q,X=18e4,we=25e3,Ee=Math.ceil(36e5/we),Se=720,ke=Ee+Se,Je=ke*q,Q=1e4;var en=[\"mousemove\",\"mousedown\",\"keydown\",\"wheel\",\"touchstart\",\"pointerdown\"];function nn(){let e=typeof globalThis!=\"undefined\"?globalThis.crypto:void 0;if(e&&typeof e.randomUUID==\"function\")return e.randomUUID().replace(/-/g,\"\");if(e&&typeof e.getRandomValues==\"function\"){let n=e.getRandomValues(new Uint8Array(16));return Array.from(n,t=>t.toString(16).padStart(2,\"0\")).join(\"\")}return Math.random().toString(36).slice(2)+Date.now().toString(36)}function tn(e,n){return t=>{try{let r=JSON.stringify(t),o=n.navigator;o&&typeof o.sendBeacon==\"function\"?o.sendBeacon(e,new Blob([r],{type:\"application/json\"})):n.fetch(e,{method:\"POST\",headers:{\"Content-Type\":\"application/json\"},body:r,keepalive:!0})}catch(r){}}}function rn(e={}){var fe,me;let n=e.win||(typeof window!=\"undefined\"?window:null),t=e.doc||n&&n.document,r=e.now||(()=>Date.now()),o=e.endpoint||\"/api/doc\",s=(fe=e.idleMs)!=null?fe:X,a=(me=e.sessionEveryMs)!=null?me:12e3,l=e.slug||\"\",p=e.internal||null,m=e.sessionId||nn(),b=e.send||tn(o,n),f={},u=0,y=0,c=0,M=0,h=null,w=r(),E=!1,V=!1,P=[],Oe=()=>!!l||!!p,le=i=>{if(Oe())try{b(i)}catch(d){}},F=()=>!!t&&t.visibilityState===\"visible\"&&!E,ue=i=>{let d=r()-i,x=Math.max(0,w-i)+s;return Math.max(0,Math.min(d,x))},z=()=>{h!=null&&u>0&&(f[u]=(f[u]||0)+ue(h)/1e3),h=F()?r():null},ce=()=>{z(),h=null},j=()=>{h==null&&F()&&(h=r())},G=()=>{let i=0;for(let d in f)i+=f[d];return h!=null&&(i+=ue(h)/1e3),Math.round(i)},de=()=>{let i={};for(let d in f)i[d]=Math.round(f[d]);return i},S=()=>{w=r(),E&&(E=!1,j())},pe=(i,d)=>{p||le({slug:l,event:i,page:d||y,maxPage:c,seconds:G(),sessionId:m})},A=()=>{z();let i={event:\"session\",sessionId:m,numPages:M,maxPage:c,totalSeconds:G(),pagesTime:de()};p?(i.internal=!0,i.docId=p.docId,i.email=p.email,i.name=p.name,p.it&&(i.it=p.it)):i.slug=l,le(i)},k=(i,d,x,ge)=>{!i||typeof i.addEventListener!=\"function\"||(i.addEventListener(d,x,ge),P.push(()=>{i.removeEventListener(d,x,ge)}))};return{sessionId:m,totalSeconds:G,maxPage:()=>c,pageTimes:de,start(){if(V)return;V=!0,pe(\"open\",1),u=1,w=r(),h=F()?r():null,k(t,\"visibilitychange\",()=>{t.visibilityState===\"hidden\"?(ce(),A()):(S(),j())}),k(n,\"focus\",()=>{S(),j()});for(let x of en)k(n,x,S,{passive:!0});k(e.scrollElement,\"scroll\",S,{passive:!0}),k(n,\"beforeunload\",A);let i=n.setInterval(()=>{!E&&r()-w>s&&(E=!0,ce())},5e3),d=n.setInterval(A,a);P.push(()=>{n.clearInterval(i),n.clearInterval(d)})},setPage(i){!i||i===y||(w=r(),z(),u=i,y=i,i>c&&(c=i,pe(\"page\",i)))},setPageCount(i){M=i||0},noteActivity:S,flush:A,stop(){for(;P.length;){let i=P.pop();try{i==null||i()}catch(d){}}V=!1}}}var $={};v($,{STORAGE_KEYS:()=>R,attendeeKey:()=>ln,authorToken:()=>un,avatarHtml:()=>J,canModerate:()=>te,createScheduler:()=>fn,escapeHtml:()=>g,fetchBorne:()=>mn,flattenPresence:()=>on,formatMessageBody:()=>ee,initials:()=>Re,isMentioned:()=>cn,isMine:()=>_,reactorId:()=>ne,shouldNotify:()=>dn,unreadLabel:()=>pn});var R={attendeeKey:\"3dd-present-attkey\",authorToken:\"3dd-present-authtoken\",chatMuted:\"3dd-present-mute\"};function g(e){return String(e==null?\"\":e).replace(/&/g,\"&\").replace(/</g,\"<\").replace(/>/g,\">\").replace(/\"/g,\""\")}function Re(e){let n=(e||\"?\").trim().split(/\\s+/);return(((n[0]||\"\")[0]||\"?\")+((n[1]||\"\")[0]||\"\")).toUpperCase()}function J(e,n){return e?`<img src=\"${g(e)}\" alt=\"\">`:g(Re(n))}function ee(e){let n=g(e);return n=n.replace(/(https?:\\/\\/[^\\s<]+)/g,t=>`<a href=\"${t}\" target=_blank rel=noreferrer class=cm-link>${t}</a>`),n=n.replace(/(^|\\s)@([\\p{L}0-9_'.-]+)/gu,(t,r,o)=>`${r}<span class=cm-mention>@${o}</span>`),n}function on(e){let n={},t=[];for(let r in e||{})for(let o of(e||{})[r]||[]){let s=String(o.uid||o.email||o.name||\"\").toLowerCase()||`_${r}_${t.length}`;n[s]?o.role===\"presenter\"&&(n[s]=o):(n[s]=o,t.push(s))}return t.map(r=>n[r])}function sn(e,n){try{return e?e.getItem(n):null}catch(t){return null}}function an(e,n,t){try{e==null||e.setItem(n,t)}catch(r){}}function ln(e,n=\"anon\",t=Ie){try{if(!e)return`anon-${n}`;let r=e.getItem(R.attendeeKey);if(r)return r;let o=`anon-${t()}`;return e.setItem(R.attendeeKey,o),o}catch(r){return`anon-${n}`}}function Ie(){let e=typeof globalThis!=\"undefined\"?globalThis.crypto:void 0;if(e&&typeof e.randomUUID==\"function\")return e.randomUUID().replace(/-/g,\"\");if(e&&typeof e.getRandomValues==\"function\"){let n=e.getRandomValues(new Uint8Array(24));return Array.from(n,t=>t.toString(16).padStart(2,\"0\")).join(\"\")}try{console.warn(\"[player] crypto indisponible : jeton d'auteur affaibli\")}catch(n){}return Math.random().toString(36).slice(2)+Math.random().toString(36).slice(2)}function un(e,n=Ie){let t=sn(e,R.authorToken);if(t)return t;let r=n();return an(e,R.authorToken,r),r}function ne(e){return String(e&&(e.email||e.name)||\"\").toLowerCase()}function _(e,n){return!e||!n?!1:e.author_email&&n.email?e.author_email===n.email:!e.author_email&&!n.email?e.author_name===n.name:!1}function te(e){return!!(e&&e.role===\"presenter\")}function cn(e,n){if(!n||!n.name)return!1;let t=(n.name.split(/\\s+/)[0]||\"\").toLowerCase();return t?String(e&&e.body||\"\").toLowerCase().includes(`@${t}`)&&!_(e,n):!1}function dn(e){let{msg:n,me:t,historyLoaded:r,chatHidden:o}=e;return!r||!n||n.deleted||_(n,t)?!1:o}function pn(e){return!e||e<=0?\"\":e>9?\"9+\":String(e)}function fn(e,n={}){var y;let t=(y=n.minMs)!=null?y:300,r=n.now||(()=>Date.now()),o=n.setTimer||((c,M)=>setTimeout(c,M)),s=n.clearTimer||(c=>clearTimeout(c)),a=!1,l=!1,p=-1/0,m=null,b=!1;function f(){if(b||a){l=!0;return}let c=t-(r()-p);if(c>0){u(c);return}a=!0,l=!1,p=r();let M=!1;e(()=>{M||(M=!0,a=!1,l&&!b&&f())})}function u(c){b||m!==null||(m=o(()=>{m=null,f()},Math.max(0,c)))}return{signaler(){b||f()},maintenant(){b||(p=-1/0,f())},arreter(){b=!0,m!==null&&(s(m),m=null)}}}function mn(e,n,t=Q,r={}){let o=r.fetch||(typeof fetch==\"function\"?fetch:void 0);if(!o)return Promise.reject(new Error(\"fetch indisponible\"));let s=r.setTimer||((u,y)=>setTimeout(u,y)),a=r.clearTimer||(u=>clearTimeout(u)),l=null;try{l=new AbortController}catch(u){}let p=l?ve(K({},n||{}),{signal:l.signal}):K({},n||{}),m=null,b=new Promise((u,y)=>{m=s(()=>{try{l==null||l.abort()}catch(c){}y(new Error(\"delai\"))},t)}),f=()=>{try{a(m)}catch(u){}};return Promise.race([o(e,p),b]).then(u=>(f(),u),u=>{throw f(),u})}var H={};v(H,{messageClassName:()=>bn,renderActions:()=>Ce,renderAttachment:()=>Ae,renderMessage:()=>gn,renderReactions:()=>Pe});function Pe(e,n){let t=e&&e.reactions||{},r=ne(n),o=\"\";for(let s in t){let a=t[s]||[];if(!a.length)continue;let l=a.indexOf(r)>=0;o+=`<button class=\"re-chip${l?\" on\":\"\"}\" data-e=\"${g(s)}\">${g(s)} ${a.length}</button>`}return o}function Ae(e){if(!e||!e.url)return\"\";let n=g(e.url);if(e.kind===\"image\")return`<a class=cm-att href=\"${n}\" target=_blank rel=noreferrer><img src=\"${n}\" alt=\"\" loading=lazy></a>`;let t=g(e.name||\"Document.pdf\");return`<a class=cm-att-pdf href=\"${n}\" target=_blank rel=noreferrer data-pdf=\"${n}\"><span class=cm-att-ph></span><span class=cm-pdflabel>${t}</span></a>`}function Ce(e,n){let t=_(e,n.me),r=`<button class=cm-react title=\"R\\xE9agir\">${n.reactIcon||\"\"}</button><button class=cm-reply title=\"R\\xE9pondre\">\\u21A9</button>`;return t&&(r+='<button class=cm-edit title=\"Modifier\">\\u270E</button>'),(t||te(n.me))&&(r+='<button class=cm-del-btn title=\"Supprimer\">\\u{1F5D1}</button>'),r}function gn(e,n){if(e.deleted)return'<span class=a></span><span class=b><div class=\"txt cm-del\">Message supprim\\xE9</div></span>';let t=e.reply_to?`<div class=cm-q><b>${g(e.reply_name||\"\")}</b> ${g(e.reply_text||\"\")}</div>`:\"\",r=e.edited?\" <span class=cm-ed>(modifi\\xE9)</span>\":\"\",o=e.body?`<div class=txt>${ee(e.body)}${r}</div>`:\"\",s=e.is_presenter?\" <span class=tag>pr\\xE9sentateur</span>\":\"\";return`<span class=a>${J(e.author_avatar,e.author_name)}</span><span class=b><div class=who><b>${g(e.author_name||\"Invit\\xE9\")}</b>${s}</div>`+t+o+Ae(e.attachment)+`<div class=cm-re>${Pe(e,n.me)}</div></span><span class=cm-act>${Ce(e,n)}</span>`}function bn(e,n,t){return\"cm\"+(_(e,n)?\" me\":\"\")+(e.deleted?\" isdel\":\"\")+(t?\" mentioned\":\"\")}var U={};v(U,{DEFAULT_CENTER:()=>ie,DEFAULT_ZOOM:()=>se,MAP_TYPES:()=>I,cycleMapType:()=>yn,initialMapContent:()=>vn,mapTypeLabel:()=>hn,sanitizeContent:()=>ae});var I=[\"roadmap\",\"satellite\",\"hybrid\"],ie=[46.6,2.5],se=6;function T(e){let n=Number(e);return Number.isFinite(n)?n:null}function re(e){if(!Array.isArray(e))return null;let n=T(e[0]),t=T(e[1]);return n!=null&&t!=null?[n,t]:null}var oe=(e,n,t)=>Math.max(n,Math.min(t,e));function ae(e){if(!e||typeof e!=\"object\")return null;let n=e;if(n.kind===\"pdf\"||n.kind==null)return null;if(n.kind===\"streetview\"){let t=re(n.position);if(!t)return null;let r=n.pov&&typeof n.pov==\"object\"?n.pov:null,o=r?{heading:T(r.heading)||0,pitch:oe(T(r.pitch)||0,-90,90)}:{heading:0,pitch:0};return{kind:\"streetview\",position:t,pov:o,zoom:oe(T(n.zoom)||1,0,5)}}return n.kind!==\"map\"?null:{kind:\"map\",center:re(n.center)||[...ie],zoom:oe(Math.trunc(T(n.zoom)||se),1,21),marker:re(n.marker),mapType:I.includes(n.mapType)?n.mapType:null,label:String(n.label||\"\").slice(0,160)||null}}function yn(e){let n=I.indexOf(e);return I[(n+1)%I.length]}function hn(e){return e===\"roadmap\"?\"\\u{1F6F0} Satellite\":e===\"satellite\"?\"\\u{1F5FA} Hybride\":\"\\u{1F5FA} Plan\"}function vn(){return{kind:\"map\",center:[...ie],zoom:se,marker:null,mapType:null,label:null}}var D={};v(D,{CURRENT_PAGE_MARGIN:()=>En,DEFAULT_ASPECT:()=>_n,MAX_ZOOM:()=>xn,MIN_PAGE_WIDTH:()=>Tn,MIN_ZOOM:()=>Mn,PRERENDER_MARGIN:()=>wn,arrowState:()=>Rn,averageColor:()=>An,clampPage:()=>Le,clampZoom:()=>Sn,fitWidth:()=>Pn,isImageDocument:()=>Cn,progressPercent:()=>kn});var Mn=.5,xn=3,_n=1.35,Tn=280,wn=\"500px 0px\",En=\"-48% 0px -48% 0px\";function Sn(e){let n=Math.round((Number(e)||0)*10)/10;return Math.max(.5,Math.min(3,n))}function Le(e,n){return Math.max(1,Math.min(n||1,Number(e)||1))}function kn(e,n){return n?Math.round(Le(e,n)/n*100):0}function Rn(e,n){return{prevDisabled:e<=1,nextDisabled:!!n&&e>=n}}var In=28;function Pn(e){var a;let n=(a=e.zoom)!=null?a:1,t=Math.max(280,e.containerWidth||900)*n;if(!e.onePage)return t;let r=e.aspect||1.35,s=((e.containerHeight||600)-In-(e.overlap||0)-(e.reserve||0))/r;return s>120?Math.min(t,s):t}function An(e){let n=e.length/4;if(!n)return\"rgb(0,0,0)\";let t=0,r=0,o=0;for(let s=0;s<e.length;s+=4)t+=e[s],r+=e[s+1],o+=e[s+2];return`rgb(${Math.round(t/n)},${Math.round(r/n)},${Math.round(o/n)})`}function Cn(e,n){return/[.](png|jpe?g|webp|gif|avif)($|[?])/i.test(String(e||n||\"\"))}var W={};v(W,{presentationTransition:()=>Ln,switchDocUrl:()=>On});function Ln(e,n={}){if(!e)return[{kind:\"nothing\"}];if(e.active===!1)return[{kind:\"ended\"}];let t=ae(e.content);if(t)return[{kind:\"show-map\",content:t}];let r=[{kind:\"leave-map\"}];return e.file_url&&e.file_url!==n.docUrl?(r.push({kind:\"switch-doc\",url:e.file_url,name:e.file_name||void 0,title:e.doc_title||void 0,updatedAt:e.updated_at||void 0}),r):(e.current_page&&r.push({kind:\"show-page\",page:e.current_page}),r)}function On(e,n){let t=encodeURIComponent(n||String(Date.now()));return`${e}${e.includes(\"?\")?\"&\":\"?\"}v=${t}`}return Ve(Nn);})();", SOURCE_HASH: "23da6b6df4f91661" };
|
|
7
|
+
module.exports = { PLAYER_BROWSER_JS: "\"use strict\";var Player=(()=>{var C=Object.defineProperty,$e=Object.defineProperties,He=Object.getOwnPropertyDescriptor,Ue=Object.getOwnPropertyDescriptors,De=Object.getOwnPropertyNames,he=Object.getOwnPropertySymbols;var ve=Object.prototype.hasOwnProperty,We=Object.prototype.propertyIsEnumerable;var ye=(e,n,t)=>n in e?C(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t,B=(e,n)=>{for(var t in n||(n={}))ve.call(n,t)&&ye(e,t,n[t]);if(he)for(var t of he(n))We.call(n,t)&&ye(e,t,n[t]);return e},Me=(e,n)=>$e(e,Ue(n));var v=(e,n)=>{for(var t in n)C(e,t,{get:n[t],enumerable:!0})},Ve=(e,n,t,r)=>{if(n&&typeof n==\"object\"||typeof n==\"function\")for(let o of De(n))!ve.call(e,o)&&o!==t&&C(e,o,{get:()=>n[o],enumerable:!(r=He(n,o))||r.enumerable});return e};var Fe=e=>Ve(C({},\"__esModule\",{value:!0}),e);var Un={};v(Un,{bridge:()=>L,cadence:()=>N,chat:()=>H,live:()=>$,presentation:()=>U,presentationState:()=>W,tracking:()=>O,viewer:()=>D});var L={};v(L,{onHostMessage:()=>Qe,onPlayerMessage:()=>Xe,parseHostMessage:()=>Te,parsePlayerMessage:()=>_e,sendToHost:()=>Ye,sendToPlayer:()=>Ze,toWire:()=>Y});var K=\"3dd-doc-\",ze=/^[A-Za-z0-9_-]{1,64}$/,je=[\"close\",\"share\",\"embed-ready\",\"present-left\",\"present-denied\"],Ge=[\"embed-denied\"],Be=[\"present-invite\",\"present-handover\",\"present-switch\"],Ke=[\"handover-done\"];function Y(e){let n={type:K+e.type};return\"slug\"in e&&e.slug&&(n.slug=e.slug),\"reason\"in e&&e.reason&&(n.reason=String(e.reason).slice(0,40)),n}function xe(e,n,t){if(!e||typeof e!=\"object\")return null;let r=e.type;if(typeof r!=\"string\"||!r.startsWith(K))return null;let o=r.slice(K.length);if(n.includes(o))return{type:o};if(Ge.includes(o)){let a=e.reason;return{type:o,reason:/^[a-z-]{1,40}$/.test(String(a||\"\"))?String(a):\"unknown\"}}if(!t.includes(o))return null;let s=e.slug;return typeof s!=\"string\"||!ze.test(s)?null:{type:o,slug:s}}function _e(e){return xe(e,je,Be)}function Te(e){return xe(e,Ke,[])}function Ye(e,n){try{let t=n||(typeof window!=\"undefined\"?window.parent:null);t&&t.postMessage(Y(e),\"*\")}catch(t){}}function Ze(e,n){var t;try{(t=e==null?void 0:e.contentWindow)==null||t.postMessage(Y(n),\"*\")}catch(r){}}function qe(e,n){var r;if(!e)return!0;let t=(r=e.contentWindow)!=null?r:e;return n===t}function Xe(e,n,t){let r=n||(typeof window!=\"undefined\"?window:null);if(!r)return()=>{};let o=s=>{if(!qe(t,s.source))return;let a=_e(s.data);a&&e(a)};return r.addEventListener(\"message\",o),()=>r.removeEventListener(\"message\",o)}function Qe(e,n){var s;let t=n||(typeof window!=\"undefined\"?window:null);if(!t)return()=>{};let r=(s=t.parent)!=null?s:null,o=a=>{if(!r||r===t||a.source!==r)return;let l=Te(a.data);l&&e(l)};return t.addEventListener(\"message\",o),()=>t.removeEventListener(\"message\",o)}var O={};v(O,{createTracker:()=>sn});var N={};v(N,{PRESENTER_ACTIONS_PER_HOUR:()=>Q,PRESENT_QUOTA_PER_HOUR:()=>nn,PRESENT_READS_PER_HOUR:()=>ke,PRESENT_READ_BURST:()=>Re,PRESENT_RESYNC_MS:()=>Ee,PRESENT_SIGNAL_BUDGET_PER_HOUR:()=>en,PRESENT_WRITE_TIMEOUT_MS:()=>J,READERS_PER_EGRESS:()=>q,RESYNC_READS_PER_HOUR:()=>Se,SESSION_IDLE_MS:()=>X,SESSION_INTERVAL_MS:()=>Z,SESSION_QUOTA_PER_HOUR:()=>Je,SESSION_WRITES_PER_HOUR:()=>we});var Z=12e3,we=Math.ceil(300),q=25,Je=we*q,X=18e4,Ee=25e3,Se=Math.ceil(36e5/Ee),Q=720,ke=Se+Q,en=Q,Re=20,nn=(ke+Re)*q,J=1e4;var tn=[\"mousemove\",\"mousedown\",\"keydown\",\"wheel\",\"touchstart\",\"pointerdown\"];function rn(){let e=typeof globalThis!=\"undefined\"?globalThis.crypto:void 0;if(e&&typeof e.randomUUID==\"function\")return e.randomUUID().replace(/-/g,\"\");if(e&&typeof e.getRandomValues==\"function\"){let n=e.getRandomValues(new Uint8Array(16));return Array.from(n,t=>t.toString(16).padStart(2,\"0\")).join(\"\")}return Math.random().toString(36).slice(2)+Date.now().toString(36)}function on(e,n){return t=>{try{let r=JSON.stringify(t),o=n.navigator;o&&typeof o.sendBeacon==\"function\"?o.sendBeacon(e,new Blob([r],{type:\"application/json\"})):n.fetch(e,{method:\"POST\",headers:{\"Content-Type\":\"application/json\"},body:r,keepalive:!0})}catch(r){}}}function sn(e={}){var me,ge;let n=e.win||(typeof window!=\"undefined\"?window:null),t=e.doc||n&&n.document,r=e.now||(()=>Date.now()),o=e.endpoint||\"/api/doc\",s=(me=e.idleMs)!=null?me:X,a=(ge=e.sessionEveryMs)!=null?ge:12e3,l=e.slug||\"\",p=e.internal||null,m=e.sessionId||rn(),b=e.send||on(o,n),f={},u=0,h=0,c=0,M=0,y=null,w=r(),E=!1,V=!1,P=[],Oe=()=>!!l||!!p,ue=i=>{if(Oe())try{b(i)}catch(d){}},F=()=>!!t&&t.visibilityState===\"visible\"&&!E,ce=i=>{let d=r()-i,x=Math.max(0,w-i)+s;return Math.max(0,Math.min(d,x))},z=()=>{y!=null&&u>0&&(f[u]=(f[u]||0)+ce(y)/1e3),y=F()?r():null},de=()=>{z(),y=null},j=()=>{y==null&&F()&&(y=r())},G=()=>{let i=0;for(let d in f)i+=f[d];return y!=null&&(i+=ce(y)/1e3),Math.round(i)},pe=()=>{let i={};for(let d in f)i[d]=Math.round(f[d]);return i},S=()=>{w=r(),E&&(E=!1,j())},fe=(i,d)=>{p||ue({slug:l,event:i,page:d||h,maxPage:c,seconds:G(),sessionId:m})},A=()=>{z();let i={event:\"session\",sessionId:m,numPages:M,maxPage:c,totalSeconds:G(),pagesTime:pe()};p?(i.internal=!0,i.docId=p.docId,i.email=p.email,i.name=p.name,p.it&&(i.it=p.it)):i.slug=l,ue(i)},k=(i,d,x,be)=>{!i||typeof i.addEventListener!=\"function\"||(i.addEventListener(d,x,be),P.push(()=>{i.removeEventListener(d,x,be)}))};return{sessionId:m,totalSeconds:G,maxPage:()=>c,pageTimes:pe,start(){if(V)return;V=!0,fe(\"open\",1),u=1,w=r(),y=F()?r():null,k(t,\"visibilitychange\",()=>{t.visibilityState===\"hidden\"?(de(),A()):(S(),j())}),k(n,\"focus\",()=>{S(),j()});for(let x of tn)k(n,x,S,{passive:!0});k(e.scrollElement,\"scroll\",S,{passive:!0}),k(n,\"beforeunload\",A);let i=n.setInterval(()=>{!E&&r()-w>s&&(E=!0,de())},5e3),d=n.setInterval(A,a);P.push(()=>{n.clearInterval(i),n.clearInterval(d)})},setPage(i){!i||i===h||(w=r(),z(),u=i,h=i,i>c&&(c=i,fe(\"page\",i)))},setPageCount(i){M=i||0},noteActivity:S,flush:A,stop(){for(;P.length;){let i=P.pop();try{i==null||i()}catch(d){}}V=!1}}}var $={};v($,{STORAGE_KEYS:()=>R,attendeeKey:()=>cn,authorToken:()=>dn,avatarHtml:()=>ee,canModerate:()=>re,createBudget:()=>hn,createScheduler:()=>gn,escapeHtml:()=>g,fetchBorne:()=>bn,flattenPresence:()=>an,formatMessageBody:()=>ne,initials:()=>Ie,isMentioned:()=>pn,isMine:()=>_,reactorId:()=>te,shouldNotify:()=>fn,unreadLabel:()=>mn});var R={attendeeKey:\"3dd-present-attkey\",authorToken:\"3dd-present-authtoken\",chatMuted:\"3dd-present-mute\"};function g(e){return String(e==null?\"\":e).replace(/&/g,\"&\").replace(/</g,\"<\").replace(/>/g,\">\").replace(/\"/g,\""\")}function Ie(e){let n=(e||\"?\").trim().split(/\\s+/);return(((n[0]||\"\")[0]||\"?\")+((n[1]||\"\")[0]||\"\")).toUpperCase()}function ee(e,n){return e?`<img src=\"${g(e)}\" alt=\"\">`:g(Ie(n))}function ne(e){let n=g(e);return n=n.replace(/(https?:\\/\\/[^\\s<]+)/g,t=>`<a href=\"${t}\" target=_blank rel=noreferrer class=cm-link>${t}</a>`),n=n.replace(/(^|\\s)@([\\p{L}0-9_'.-]+)/gu,(t,r,o)=>`${r}<span class=cm-mention>@${o}</span>`),n}function an(e){let n={},t=[];for(let r in e||{})for(let o of(e||{})[r]||[]){let s=String(o.uid||o.email||o.name||\"\").toLowerCase()||`_${r}_${t.length}`;n[s]?o.role===\"presenter\"&&(n[s]=o):(n[s]=o,t.push(s))}return t.map(r=>n[r])}function ln(e,n){try{return e?e.getItem(n):null}catch(t){return null}}function un(e,n,t){try{e==null||e.setItem(n,t)}catch(r){}}function cn(e,n=\"anon\",t=Pe){try{if(!e)return`anon-${n}`;let r=e.getItem(R.attendeeKey);if(r)return r;let o=`anon-${t()}`;return e.setItem(R.attendeeKey,o),o}catch(r){return`anon-${n}`}}function Pe(){let e=typeof globalThis!=\"undefined\"?globalThis.crypto:void 0;if(e&&typeof e.randomUUID==\"function\")return e.randomUUID().replace(/-/g,\"\");if(e&&typeof e.getRandomValues==\"function\"){let n=e.getRandomValues(new Uint8Array(24));return Array.from(n,t=>t.toString(16).padStart(2,\"0\")).join(\"\")}try{console.warn(\"[player] crypto indisponible : jeton d'auteur affaibli\")}catch(n){}return Math.random().toString(36).slice(2)+Math.random().toString(36).slice(2)}function dn(e,n=Pe){let t=ln(e,R.authorToken);if(t)return t;let r=n();return un(e,R.authorToken,r),r}function te(e){return String(e&&(e.email||e.name)||\"\").toLowerCase()}function _(e,n){return!e||!n?!1:e.author_email&&n.email?e.author_email===n.email:!e.author_email&&!n.email?e.author_name===n.name:!1}function re(e){return!!(e&&e.role===\"presenter\")}function pn(e,n){if(!n||!n.name)return!1;let t=(n.name.split(/\\s+/)[0]||\"\").toLowerCase();return t?String(e&&e.body||\"\").toLowerCase().includes(`@${t}`)&&!_(e,n):!1}function fn(e){let{msg:n,me:t,historyLoaded:r,chatHidden:o}=e;return!r||!n||n.deleted||_(n,t)?!1:o}function mn(e){return!e||e<=0?\"\":e>9?\"9+\":String(e)}function gn(e,n={}){var h;let t=(h=n.minMs)!=null?h:300,r=n.now||(()=>Date.now()),o=n.setTimer||((c,M)=>setTimeout(c,M)),s=n.clearTimer||(c=>clearTimeout(c)),a=!1,l=!1,p=-1/0,m=null,b=!1;function f(){if(b||a){l=!0;return}let c=t-(r()-p);if(c>0){u(c);return}a=!0,l=!1,p=r();let M=!1;e(()=>{M||(M=!0,a=!1,l&&!b&&f())})}function u(c){b||m!==null||(m=o(()=>{m=null,f()},Math.max(0,c)))}return{signaler(){b||f()},maintenant(){b||(p=-1/0,f())},arreter(){b=!0,m!==null&&(s(m),m=null)}}}function bn(e,n,t=J,r={}){let o=r.fetch||(typeof fetch==\"function\"?fetch:void 0);if(!o)return Promise.reject(new Error(\"fetch indisponible\"));let s=r.setTimer||((u,h)=>setTimeout(u,h)),a=r.clearTimer||(u=>clearTimeout(u)),l=null;try{l=new AbortController}catch(u){}let p=l?Me(B({},n||{}),{signal:l.signal}):B({},n||{}),m=null,b=new Promise((u,h)=>{m=s(()=>{try{l==null||l.abort()}catch(c){}h(new Error(\"delai\"))},t)}),f=()=>{try{a(m)}catch(u){}};return Promise.race([o(e,p),b]).then(u=>(f(),u),u=>{throw f(),u})}function hn(e){let n=e.now||(()=>Date.now()),t=Math.max(1,e.rafale),r=t,o=n();return{prendre(){let s=n();return r=Math.min(t,r+(s-o)*e.parHeure/36e5),o=s,r<1?!1:(r-=1,!0)},restants:()=>r}}var H={};v(H,{messageClassName:()=>vn,renderActions:()=>Le,renderAttachment:()=>Ce,renderMessage:()=>yn,renderReactions:()=>Ae});function Ae(e,n){let t=e&&e.reactions||{},r=te(n),o=\"\";for(let s in t){let a=t[s]||[];if(!a.length)continue;let l=a.indexOf(r)>=0;o+=`<button class=\"re-chip${l?\" on\":\"\"}\" data-e=\"${g(s)}\">${g(s)} ${a.length}</button>`}return o}function Ce(e){if(!e||!e.url)return\"\";let n=g(e.url);if(e.kind===\"image\")return`<a class=cm-att href=\"${n}\" target=_blank rel=noreferrer><img src=\"${n}\" alt=\"\" loading=lazy></a>`;let t=g(e.name||\"Document.pdf\");return`<a class=cm-att-pdf href=\"${n}\" target=_blank rel=noreferrer data-pdf=\"${n}\"><span class=cm-att-ph></span><span class=cm-pdflabel>${t}</span></a>`}function Le(e,n){let t=_(e,n.me),r=`<button class=cm-react title=\"R\\xE9agir\">${n.reactIcon||\"\"}</button><button class=cm-reply title=\"R\\xE9pondre\">\\u21A9</button>`;return t&&(r+='<button class=cm-edit title=\"Modifier\">\\u270E</button>'),(t||re(n.me))&&(r+='<button class=cm-del-btn title=\"Supprimer\">\\u{1F5D1}</button>'),r}function yn(e,n){if(e.deleted)return'<span class=a></span><span class=b><div class=\"txt cm-del\">Message supprim\\xE9</div></span>';let t=e.reply_to?`<div class=cm-q><b>${g(e.reply_name||\"\")}</b> ${g(e.reply_text||\"\")}</div>`:\"\",r=e.edited?\" <span class=cm-ed>(modifi\\xE9)</span>\":\"\",o=e.body?`<div class=txt>${ne(e.body)}${r}</div>`:\"\",s=e.is_presenter?\" <span class=tag>pr\\xE9sentateur</span>\":\"\";return`<span class=a>${ee(e.author_avatar,e.author_name)}</span><span class=b><div class=who><b>${g(e.author_name||\"Invit\\xE9\")}</b>${s}</div>`+t+o+Ce(e.attachment)+`<div class=cm-re>${Ae(e,n.me)}</div></span><span class=cm-act>${Le(e,n)}</span>`}function vn(e,n,t){return\"cm\"+(_(e,n)?\" me\":\"\")+(e.deleted?\" isdel\":\"\")+(t?\" mentioned\":\"\")}var U={};v(U,{DEFAULT_CENTER:()=>se,DEFAULT_ZOOM:()=>ae,MAP_TYPES:()=>I,cycleMapType:()=>Mn,initialMapContent:()=>_n,mapTypeLabel:()=>xn,sanitizeContent:()=>le});var I=[\"roadmap\",\"satellite\",\"hybrid\"],se=[46.6,2.5],ae=6;function T(e){let n=Number(e);return Number.isFinite(n)?n:null}function oe(e){if(!Array.isArray(e))return null;let n=T(e[0]),t=T(e[1]);return n!=null&&t!=null?[n,t]:null}var ie=(e,n,t)=>Math.max(n,Math.min(t,e));function le(e){if(!e||typeof e!=\"object\")return null;let n=e;if(n.kind===\"pdf\"||n.kind==null)return null;if(n.kind===\"streetview\"){let t=oe(n.position);if(!t)return null;let r=n.pov&&typeof n.pov==\"object\"?n.pov:null,o=r?{heading:T(r.heading)||0,pitch:ie(T(r.pitch)||0,-90,90)}:{heading:0,pitch:0};return{kind:\"streetview\",position:t,pov:o,zoom:ie(T(n.zoom)||1,0,5)}}return n.kind!==\"map\"?null:{kind:\"map\",center:oe(n.center)||[...se],zoom:ie(Math.trunc(T(n.zoom)||ae),1,21),marker:oe(n.marker),mapType:I.includes(n.mapType)?n.mapType:null,label:String(n.label||\"\").slice(0,160)||null}}function Mn(e){let n=I.indexOf(e);return I[(n+1)%I.length]}function xn(e){return e===\"roadmap\"?\"\\u{1F6F0} Satellite\":e===\"satellite\"?\"\\u{1F5FA} Hybride\":\"\\u{1F5FA} Plan\"}function _n(){return{kind:\"map\",center:[...se],zoom:ae,marker:null,mapType:null,label:null}}var D={};v(D,{CURRENT_PAGE_MARGIN:()=>Rn,DEFAULT_ASPECT:()=>En,MAX_ZOOM:()=>wn,MIN_PAGE_WIDTH:()=>Sn,MIN_ZOOM:()=>Tn,PRERENDER_MARGIN:()=>kn,arrowState:()=>An,averageColor:()=>Nn,clampPage:()=>Ne,clampZoom:()=>In,fitWidth:()=>Ln,isImageDocument:()=>On,progressPercent:()=>Pn});var Tn=.5,wn=3,En=1.35,Sn=280,kn=\"500px 0px\",Rn=\"-48% 0px -48% 0px\";function In(e){let n=Math.round((Number(e)||0)*10)/10;return Math.max(.5,Math.min(3,n))}function Ne(e,n){return Math.max(1,Math.min(n||1,Number(e)||1))}function Pn(e,n){return n?Math.round(Ne(e,n)/n*100):0}function An(e,n){return{prevDisabled:e<=1,nextDisabled:!!n&&e>=n}}var Cn=28;function Ln(e){var a;let n=(a=e.zoom)!=null?a:1,t=Math.max(280,e.containerWidth||900)*n;if(!e.onePage)return t;let r=e.aspect||1.35,s=((e.containerHeight||600)-Cn-(e.overlap||0)-(e.reserve||0))/r;return s>120?Math.min(t,s):t}function Nn(e){let n=e.length/4;if(!n)return\"rgb(0,0,0)\";let t=0,r=0,o=0;for(let s=0;s<e.length;s+=4)t+=e[s],r+=e[s+1],o+=e[s+2];return`rgb(${Math.round(t/n)},${Math.round(r/n)},${Math.round(o/n)})`}function On(e,n){return/[.](png|jpe?g|webp|gif|avif)($|[?])/i.test(String(e||n||\"\"))}var W={};v(W,{presentationTransition:()=>$n,switchDocUrl:()=>Hn});function $n(e,n={}){if(!e)return[{kind:\"nothing\"}];if(e.active===!1)return[{kind:\"ended\"}];let t=le(e.content);if(t)return[{kind:\"show-map\",content:t}];let r=[{kind:\"leave-map\"}];return e.file_url&&e.file_url!==n.docUrl?(r.push({kind:\"switch-doc\",url:e.file_url,name:e.file_name||void 0,title:e.doc_title||void 0,updatedAt:e.updated_at||void 0}),r):(e.current_page&&r.push({kind:\"show-page\",page:e.current_page}),r)}function Hn(e,n){let t=encodeURIComponent(n||String(Date.now()));return`${e}${e.includes(\"?\")?\"&\":\"?\"}v=${t}`}return Fe(Un);})();", SOURCE_HASH: "5d92c853f7d8ba79" };
|
package/server/handler.js
CHANGED
|
@@ -474,41 +474,36 @@ var Live=(function(){
|
|
|
474
474
|
// Et à l'inverse, des signaux un peu plus espacés produisaient une requête chacun, POUR
|
|
475
475
|
// CHAQUE SPECTATEUR : le canal public devenait un amplificateur vers l'API.
|
|
476
476
|
// Détail et propriétés : src/live.ts + src/__tests__/ordonnanceur.test.ts. (audit P0-2)
|
|
477
|
-
|
|
477
|
+
// ⚠️ LE BUDGET GATE LE SIGNAL, JAMAIS LE FILET — ET C'EST TOUTE LA DIFFÉRENCE.
|
|
478
478
|
//
|
|
479
|
-
//
|
|
480
|
-
//
|
|
481
|
-
//
|
|
482
|
-
// règle jamais sa promesse, la file ne repart pas, et le présentateur pilote dans le vide sans
|
|
483
|
-
// qu'aucun message ne le dise. Un navigateur ne garantit aucun délai de son côté.
|
|
479
|
+
// « signaler() » est déclenché par le canal, donc par n'importe quel participant : c'est la
|
|
480
|
+
// porte par laquelle un diffuseur hostile faisait relire toute une salle jusqu'au quota, et
|
|
481
|
+
// au-delà. On la rationne.
|
|
484
482
|
//
|
|
485
|
-
//
|
|
486
|
-
//
|
|
487
|
-
//
|
|
483
|
+
// « maintenant() » est le filet périodique, déclenché par NOUS toutes les 25 s. Le rationner
|
|
484
|
+
// rendrait une audience à budget épuisé définitivement muette — on aurait remplacé un déni de
|
|
485
|
+
// service venu du dehors par un déni de service maison. C'est le plancher : quoi qu'il arrive,
|
|
486
|
+
// l'audience finit toujours par se resynchroniser.
|
|
488
487
|
//
|
|
489
|
-
//
|
|
490
|
-
//
|
|
491
|
-
function fetchBorne(url,opts,ms){
|
|
492
|
-
var limite=ms||(window.Player&&Player.cadence&&Player.cadence.PRESENT_WRITE_TIMEOUT_MS)||10000;
|
|
493
|
-
var ctl=null; try{ ctl=new AbortController(); }catch(e){}
|
|
494
|
-
var o=opts||{};
|
|
495
|
-
if(ctl){ o=Object.assign({},o); o.signal=ctl.signal; }
|
|
496
|
-
var minuteur=null;
|
|
497
|
-
var expiration=new Promise(function(_,ko){
|
|
498
|
-
minuteur=setTimeout(function(){ try{ if(ctl)ctl.abort(); }catch(e){} ko(new Error('delai')); },limite);
|
|
499
|
-
});
|
|
500
|
-
function rendreLaMain(v,echec){ try{ clearTimeout(minuteur); }catch(e){} if(echec)throw v; return v; }
|
|
501
|
-
return Promise.race([fetch(url,o),expiration])
|
|
502
|
-
.then(function(r){return rendreLaMain(r,false);},function(e){return rendreLaMain(e,true);});
|
|
503
|
-
}
|
|
488
|
+
// Refuser un signal ne perd donc rien : la relecture suivante lira l'état le plus récent. On
|
|
489
|
+
// arrive en retard, jamais à côté.
|
|
504
490
|
function relireAvec(url,applique){
|
|
505
|
-
|
|
506
|
-
fetchBorne('/api/doc?present='+encodeURIComponent(SLUG)+url)
|
|
491
|
+
var ord=Player.live.createScheduler(function(fini){
|
|
492
|
+
Player.live.fetchBorne('/api/doc?present='+encodeURIComponent(SLUG)+url)
|
|
507
493
|
.then(function(r){return r.json();})
|
|
508
494
|
.then(function(d){if(d&&d.ok)applique(d);})
|
|
509
495
|
.catch(function(){})
|
|
510
496
|
.then(fini,fini);
|
|
511
497
|
},{minMs:400});
|
|
498
|
+
var budget=Player.live.createBudget({
|
|
499
|
+
parHeure:Player.cadence.PRESENT_SIGNAL_BUDGET_PER_HOUR,
|
|
500
|
+
rafale:Player.cadence.PRESENT_READ_BURST,
|
|
501
|
+
});
|
|
502
|
+
return {
|
|
503
|
+
signaler:function(){ if(budget.prendre()) ord.signaler(); },
|
|
504
|
+
maintenant:function(){ ord.maintenant(); },
|
|
505
|
+
arreter:function(){ ord.arreter(); },
|
|
506
|
+
};
|
|
512
507
|
}
|
|
513
508
|
var _ordEtat=relireAvec('&state=1',function(d){if(d.state)etatDuServeur(d.state);});
|
|
514
509
|
// ⚠️ Exposé hors de cette fermeture : la carte vit dans un AUTRE bloc de script et doit
|
|
@@ -31,7 +31,9 @@ __export(shared_exports, {
|
|
|
31
31
|
PRESENTER_ACTIONS_PER_HOUR: () => PRESENTER_ACTIONS_PER_HOUR,
|
|
32
32
|
PRESENT_QUOTA_PER_HOUR: () => PRESENT_QUOTA_PER_HOUR,
|
|
33
33
|
PRESENT_READS_PER_HOUR: () => PRESENT_READS_PER_HOUR,
|
|
34
|
+
PRESENT_READ_BURST: () => PRESENT_READ_BURST,
|
|
34
35
|
PRESENT_RESYNC_MS: () => PRESENT_RESYNC_MS,
|
|
36
|
+
PRESENT_SIGNAL_BUDGET_PER_HOUR: () => PRESENT_SIGNAL_BUDGET_PER_HOUR,
|
|
35
37
|
PRESENT_WRITE_TIMEOUT_MS: () => PRESENT_WRITE_TIMEOUT_MS,
|
|
36
38
|
READERS_PER_EGRESS: () => READERS_PER_EGRESS,
|
|
37
39
|
RESYNC_READS_PER_HOUR: () => RESYNC_READS_PER_HOUR,
|
|
@@ -105,7 +107,9 @@ var PRESENT_RESYNC_MS = 25e3;
|
|
|
105
107
|
var RESYNC_READS_PER_HOUR = Math.ceil(36e5 / PRESENT_RESYNC_MS);
|
|
106
108
|
var PRESENTER_ACTIONS_PER_HOUR = 720;
|
|
107
109
|
var PRESENT_READS_PER_HOUR = RESYNC_READS_PER_HOUR + PRESENTER_ACTIONS_PER_HOUR;
|
|
108
|
-
var
|
|
110
|
+
var PRESENT_SIGNAL_BUDGET_PER_HOUR = PRESENTER_ACTIONS_PER_HOUR;
|
|
111
|
+
var PRESENT_READ_BURST = 20;
|
|
112
|
+
var PRESENT_QUOTA_PER_HOUR = (PRESENT_READS_PER_HOUR + PRESENT_READ_BURST) * READERS_PER_EGRESS;
|
|
109
113
|
var PRESENT_WRITE_TIMEOUT_MS = 1e4;
|
|
110
114
|
// Annotate the CommonJS export names for ESM import in node:
|
|
111
115
|
0 && (module.exports = {
|
|
@@ -115,7 +119,9 @@ var PRESENT_WRITE_TIMEOUT_MS = 1e4;
|
|
|
115
119
|
PRESENTER_ACTIONS_PER_HOUR,
|
|
116
120
|
PRESENT_QUOTA_PER_HOUR,
|
|
117
121
|
PRESENT_READS_PER_HOUR,
|
|
122
|
+
PRESENT_READ_BURST,
|
|
118
123
|
PRESENT_RESYNC_MS,
|
|
124
|
+
PRESENT_SIGNAL_BUDGET_PER_HOUR,
|
|
119
125
|
PRESENT_WRITE_TIMEOUT_MS,
|
|
120
126
|
READERS_PER_EGRESS,
|
|
121
127
|
RESYNC_READS_PER_HOUR,
|