peertube-plugin-premium-members 3.2.3 → 3.2.5
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/client/common.ts +85 -8
- package/dist/client/common.js +1 -1
- package/dist/client/my-account/index.js +1 -1
- package/package.json +1 -1
package/client/common.ts
CHANGED
|
@@ -98,18 +98,48 @@ export async function register ({
|
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
-
// ✅ v4: เอาเมนูประวัติ Rumble ไปอยู่หมวดคลังของฉัน
|
|
101
|
+
// ✅ v4: เอาเมนูประวัติ Rumble ไปอยู่หมวดคลังของฉัน และซ่อนเมนูประวัติเดิมของ PeerTube
|
|
102
102
|
if (peertubeHelpers.isLoggedIn() && subMenu.key === 'my-library') {
|
|
103
|
+
// ✅ ลบเมนูประวัติเดิมของ PeerTube ออกจากหมวดคลังของฉันก่อน
|
|
104
|
+
const linksWithoutNativeHistory = subMenu.links.filter((link: any) => {
|
|
105
|
+
const path = String(
|
|
106
|
+
link.path ||
|
|
107
|
+
link.routerLink ||
|
|
108
|
+
link.url ||
|
|
109
|
+
link.href ||
|
|
110
|
+
''
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
const label = String(
|
|
114
|
+
link.label ||
|
|
115
|
+
link.shortLabel ||
|
|
116
|
+
''
|
|
117
|
+
).trim()
|
|
118
|
+
|
|
119
|
+
return !(
|
|
120
|
+
path.includes('/my-library/history') ||
|
|
121
|
+
label === 'ประวัติ' ||
|
|
122
|
+
label.toLowerCase() === 'history'
|
|
123
|
+
)
|
|
124
|
+
})
|
|
125
|
+
|
|
126
|
+
// ✅ กันเมนู Rumble history ซ้ำ ถ้า hook ถูกเรียกหลายรอบ
|
|
127
|
+
const hasRumbleHistory = linksWithoutNativeHistory.some((link: any) => {
|
|
128
|
+
return String(link.path || '') === '/p/rumble-history'
|
|
129
|
+
})
|
|
130
|
+
|
|
103
131
|
return {
|
|
104
132
|
...subMenu,
|
|
105
133
|
links: [
|
|
106
|
-
...
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
134
|
+
...linksWithoutNativeHistory,
|
|
135
|
+
...(hasRumbleHistory
|
|
136
|
+
? []
|
|
137
|
+
: [{
|
|
138
|
+
path: '/p/rumble-history',
|
|
139
|
+
label: 'ประวัติการเข้าชม',
|
|
140
|
+
shortLabel: 'ประวัติ',
|
|
141
|
+
icon: 'history'
|
|
142
|
+
}])
|
|
113
143
|
]
|
|
114
144
|
}
|
|
115
145
|
}
|
|
@@ -496,6 +526,44 @@ let queue: { url: string, resolve: Function }[] = [];
|
|
|
496
526
|
let isFetching = false;
|
|
497
527
|
const peertubeUrl = window.location.origin;
|
|
498
528
|
|
|
529
|
+
// ✅ ซ่อน/กันเข้าหน้าประวัติเดิมของ PeerTube ใน /my-library
|
|
530
|
+
// ใช้เฉพาะเมนู/แท็บ native history ของ PeerTube ไม่แตะหน้า /p/rumble-history ของ Rumble
|
|
531
|
+
function hideNativePeerTubeHistoryTab(): void {
|
|
532
|
+
// ✅ ถ้า user เปิด URL ประวัติเดิมโดยตรง ให้เด้งไปหน้าประวัติ Rumble ของเรา
|
|
533
|
+
if (window.location.pathname.startsWith('/my-library/history')) {
|
|
534
|
+
window.location.href = '/p/rumble-history'
|
|
535
|
+
return
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
// ✅ ใส่ CSS กันกระพริบก่อน DOM scan โดยซ่อนลิงก์ history เดิมทุกตำแหน่ง
|
|
539
|
+
if (!document.getElementById('premium-hide-native-history-tab-style')) {
|
|
540
|
+
const style = document.createElement('style')
|
|
541
|
+
style.id = 'premium-hide-native-history-tab-style'
|
|
542
|
+
style.textContent = `
|
|
543
|
+
a[href*="/my-library/history"] {
|
|
544
|
+
display: none !important;
|
|
545
|
+
visibility: hidden !important;
|
|
546
|
+
pointer-events: none !important;
|
|
547
|
+
}
|
|
548
|
+
`
|
|
549
|
+
document.head.appendChild(style)
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
// ✅ ซ่อน wrapper ของแท็บ/เมนูด้วย เพื่อไม่ให้เหลือช่องว่างหรือเส้นใต้ของแท็บเดิม
|
|
553
|
+
document
|
|
554
|
+
.querySelectorAll('a[href*="/my-library/history"]')
|
|
555
|
+
.forEach((el) => {
|
|
556
|
+
const item =
|
|
557
|
+
el.closest('li') ||
|
|
558
|
+
el.closest('.nav-item') ||
|
|
559
|
+
el.closest('.menu-link') ||
|
|
560
|
+
el.closest('a') ||
|
|
561
|
+
el
|
|
562
|
+
|
|
563
|
+
;(item as HTMLElement).style.display = 'none'
|
|
564
|
+
})
|
|
565
|
+
}
|
|
566
|
+
|
|
499
567
|
let currentAbortController = new AbortController();
|
|
500
568
|
|
|
501
569
|
function purgeQueue() {
|
|
@@ -2908,6 +2976,9 @@ let lastUrlForQueue = window.location.href;
|
|
|
2908
2976
|
function handlePossibleRouteChange(force = false): void {
|
|
2909
2977
|
if (!force && window.location.href === lastUrlForQueue) return
|
|
2910
2978
|
|
|
2979
|
+
// ✅ ซ่อน/redirect ประวัติเดิมของ PeerTube ทันทีเมื่อ SPA เปลี่ยน route
|
|
2980
|
+
hideNativePeerTubeHistoryTab()
|
|
2981
|
+
|
|
2911
2982
|
// ✅ v9.7: ยกเลิกงาน Rumble เก่าทั้งหมดก่อนเริ่มจัดการ route ใหม่
|
|
2912
2983
|
const routeToken = invalidateRumbleRouteWork()
|
|
2913
2984
|
|
|
@@ -2960,8 +3031,12 @@ const observer = new MutationObserver((mutations) => {
|
|
|
2960
3031
|
handlePossibleRouteChange(false)
|
|
2961
3032
|
}
|
|
2962
3033
|
|
|
3034
|
+
// ✅ ซ่อนแท็บประวัติเดิมของ PeerTube ที่อาจถูก render ใหม่จาก Angular/SPA
|
|
3035
|
+
hideNativePeerTubeHistoryTab()
|
|
3036
|
+
|
|
2963
3037
|
clearTimeout((window as any).badgeTimeout)
|
|
2964
3038
|
;(window as any).badgeTimeout = setTimeout(() => {
|
|
3039
|
+
hideNativePeerTubeHistoryTab()
|
|
2965
3040
|
addBadgesToNativeUI()
|
|
2966
3041
|
updateRumbleDurationOverlays()
|
|
2967
3042
|
}, 450)
|
|
@@ -2970,6 +3045,7 @@ observer.observe(document.body, { childList: true, subtree: true })
|
|
|
2970
3045
|
|
|
2971
3046
|
let initAttempts = 0
|
|
2972
3047
|
const initScanner = setInterval(() => {
|
|
3048
|
+
hideNativePeerTubeHistoryTab()
|
|
2973
3049
|
addBadgesToNativeUI()
|
|
2974
3050
|
updateRumbleDurationOverlays()
|
|
2975
3051
|
|
|
@@ -2981,6 +3057,7 @@ const initScanner = setInterval(() => {
|
|
|
2981
3057
|
}, 700)
|
|
2982
3058
|
|
|
2983
3059
|
// ✅ เรียกครั้งแรกหลังโหลด client script
|
|
3060
|
+
hideNativePeerTubeHistoryTab()
|
|
2984
3061
|
if (isRumbleResumeRequest()) startSuppressingPeerTubeUntilRumbleReady()
|
|
2985
3062
|
scheduleRumbleWatchCheck(150)
|
|
2986
3063
|
setTimeout(updateRumbleDurationOverlays, 500)
|
package/dist/client/common.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var hr=Object.defineProperty,gr=Object.defineProperties;var yr=Object.getOwnPropertyDescriptors;var lt=Object.getOwnPropertySymbols;var br=Object.prototype.hasOwnProperty,vr=Object.prototype.propertyIsEnumerable;var ut=(a,l,c)=>l in a?hr(a,l,{enumerable:!0,configurable:!0,writable:!0,value:c}):a[l]=c,H=(a,l)=>{for(var c in l||(l={}))br.call(l,c)&&ut(a,c,l[c]);if(lt)for(var c of lt(l))vr.call(l,c)&&ut(a,c,l[c]);return a},J=(a,l)=>gr(a,yr(l));var Se=class{constructor(l){this.rootEl=l}renderRow(l,c){return this.div([this.div(l,c?"col-12 col-lg-4 col-xl-3":"col-12"),...c?[this.div(c,"col-12 col-lg-8 col-xl-9")]:[]],"row")}div(l,c){let f=document.createElement("div");return c&&(f.className=c),l.forEach(b=>f.appendChild(b)),f}a(l,c){let f=document.createElement("a");f.innerHTML=l;for(let b in c)f.setAttribute(b,c[b]);return f}h2(l){let c=document.createElement("h2");return c.innerText=l,c}h3(l){let c=document.createElement("h2");return c.innerText=l,c}p(l,c){let f=document.createElement("p");return f.innerHTML=l,c&&(f.className=c),f}img(l,c){let f=document.createElement("img");return f.src=l,f.className=c,f}ul(l,c){let f=document.createElement("ul");return c&&(f.className=c),l.forEach(b=>{let T=document.createElement("li");T.innerText=b,f.appendChild(T)}),f}};var ct="enable-plugin";var De=(a,l)=>{"gtag"in window&&window.gtag("event",a,H({event_category:"premium-users"},l))},X=(a,l)=>new Intl.NumberFormat(navigator.language,{style:"currency",currency:l,minimumFractionDigits:0}).format(a),qe=a=>{var l;return!((l=a.coupon)!=null&&l.valid)||!a.unit_amount?null:a.coupon.amount_off?(a.unit_amount-a.coupon.amount_off)/100:a.coupon.percent_off?Math.round((a.unit_amount-a.unit_amount*(a.coupon.percent_off/100))/100):null};var wr=a=>{var l,c,f;return(l=a.coupon)!=null&&l.percent_off?"".concat(a.coupon.percent_off," %"):X((f=(c=a.coupon)==null?void 0:c.amount_off)!=null?f:0,a.currency)},Sr=async(a,l)=>{var c,f,b;return((c=a.recurring)==null?void 0:c.interval)==="month"?(await l("discount the first MONTHS_COUNT months.")).replace("MONTHS_COUNT",String((f=a.coupon)==null?void 0:f.duration_in_months)):((b=a.recurring)==null?void 0:b.interval)==="year"?l("discount for a whole year."):""},Pr=a=>{var c,f,b,T,k,E,$,x,w,S;let l=0;return((c=a.recurring)==null?void 0:c.interval)==="month"?(a.unit_amount&&((f=a.coupon)!=null&&f.amount_off)&&((b=a.coupon)!=null&&b.duration_in_months)&&(l=a.coupon.amount_off*((T=a.coupon)==null?void 0:T.duration_in_months)/100),a.unit_amount&&((k=a.coupon)!=null&&k.percent_off)&&((E=a.coupon)!=null&&E.duration_in_months)&&(l=a.unit_amount*(a.coupon.percent_off/100)*(($=a.coupon)==null?void 0:$.duration_in_months)/100)):((x=a.recurring)==null?void 0:x.interval)==="year"&&(a.unit_amount&&((w=a.coupon)!=null&&w.amount_off)&&(l=a.coupon.amount_off*12/100),a.unit_amount&&((S=a.coupon)!=null&&S.percent_off)&&(l=a.unit_amount*(a.coupon.percent_off/100)/100)),l},Tr=async(a,l)=>{var b;let c=qe(a),f;return c!==null?f='\n <span class="original-price">\n '.concat(X(a.unit_amount/100,a.currency),"</span>\n ").concat(X(c,a.currency)):f=X(a.unit_amount/100,a.currency),(b=a.recurring)!=null&&b.interval?f+=" / "+await l(a.recurring.interval):f+=" / "+await l("1 \u0E40\u0E14\u0E37\u0E2D\u0E19"),f},mt=async({buttonOnClick:a,price:l,uiBuilder:c,translate:f})=>{var C,N;let b=qe(l),T=await Sr(l,f),k=Pr(l),E=wr(l),$=await Tr(l,f),x=!!a,w="";(C=l.recurring)!=null&&C.interval?w=await f("Pay "+(l.recurring.interval==="day"?"daily":l.recurring.interval+"ly")):w=await f("\u0E0A\u0E33\u0E23\u0E30 1 \u0E40\u0E14\u0E37\u0E2D\u0E19 (QR \u0E1E\u0E23\u0E49\u0E2D\u0E21\u0E40\u0E1E\u0E22\u0E4C)");let S=c.a($,{class:"primary-button peertube-button-link mb-4","data-testid":"premium_users-button-pay_"+(((N=l.recurring)==null?void 0:N.interval)||"onetime")});return x&&S.addEventListener("click",a),c.div([c.p(w,"fw-bold"),...b===null?[]:[c.ul([E+" "+T,(await f("You'll save AMOUNT_TO_SAVE.")).replace("AMOUNT_TO_SAVE",String(X(Math.round(k),l.currency)))],"text-start")],...x?[S]:[c.p($,"mt-auto")]],"d-flex flex-grow-1 flex-column")};var dt={name:"peertube-plugin-premium-members",description:"peertube-plugin-premium-members",version:"3.2.3",author:"Vee",bugs:"",clientScripts:[{script:"dist/client/my-account/index.js",scopes:["my-account"]},{script:"dist/client/common.js",scopes:["common"]},{script:"dist/client/video-edit.js",scopes:["video-edit"]},{script:"dist/client/admin-manage.js",scopes:["common"]}],css:["dist/assets/style.css"],engine:{peertube:">=6.0.0"},homepage:"",keywords:["peertube","plugin"],library:"./dist/server/server/main.js",scripts:{clean:"rm -rf dist/*",prepare:"npm run build","build:client":"node ./scripts/build.cjs","build:server":"tsc --build server/tsconfig.json","build:styles":"npx --yes sass --no-source-map assets:dist/assets",build:"npm-run-all -s clean check:client:tsc -p build:server build:client build:styles","check:client:tsc":"npx tsc --p client/tsconfig.json --noEmit","lint:script":"npx eslint .",test:"npm-run-all -p lint:script test:unit","test:unit":"TS_NODE_PROJECT=server/tsconfig.test.json mocha server/*.spec.ts","test:e2e":"cd demo && npm ci && npm test"},staticDirs:{images:"public/images"},translations:{"sv-SE":"./languages/sv.json","th-TH":"./languages/th.json",th:"./languages/th.json"},devDependencies:{"@tsconfig/node16":"^16.0.0","@types/mocha":"^10.0.8","@typescript-eslint/eslint-plugin":"^8.9.0","@typescript-eslint/parser":"^8.9.0",esbuild:"^0.24.0",eslint:"^9.12.0","eslint-config-love":"^87.0.0",globals:"^15.3.0",mocha:"^10.7.3","npm-run-all":"^4.1.5",tsx:"^4.19.1",typescript:"^5.4.3"},dependencies:{"@peertube/peertube-types":"^6.3.0","@types/gtag.js":"^0.0.20","@types/sequelize":"^4.28.20",express:"^4.19.2","short-uuid":"^5.2.0",stripe:"^18.1.0"}};var F=class{constructor(l){this.pluginBasePath="/plugins/".concat(dt.name.replace("peertube-plugin-",""),"/router");this.getAuthHeader=l||(()=>{})}async get(l){return fetch(l,{method:"GET",headers:this.getAuthHeader(),credentials:"include"}).then(async c=>c.json())}async patch(l,c){await fetch(l,{method:"PATCH",headers:J(H({},this.getAuthHeader()),{"Content-Type":"application/json"}),credentials:"include",body:JSON.stringify(c)})}async post(l,c){return fetch(l,{method:"POST",headers:J(H({},this.getAuthHeader()),{"Content-Type":"application/json"}),credentials:"include",body:JSON.stringify(c)}).then(async f=>f.json())}async delete(l){return fetch(l,{method:"DELETE",headers:this.getAuthHeader(),credentials:"include"}).then(async c=>c.json())}async getMe(){return this.get("/api/v1/users/me")}async getPrices(){return this.get(this.pluginBasePath+"/price")}async getSubscription(){return this.get(this.pluginBasePath+"/subscription")}async updateSubscription(l){return this.patch(this.pluginBasePath+"/subscription",l)}async createCheckout({allowPromotionCodes:l,couponId:c,priceId:f,paymentMode:b,paymentMethod:T}){return this.post(this.pluginBasePath+"/checkout",{allowPromotionCodes:l,couponId:c,priceId:f,paymentMode:b,paymentMethod:T})}async getRumblePlaybackInfo(l){return this.get(this.pluginBasePath+"/rumble/playback-info/".concat(encodeURIComponent(l)))}async saveRumbleProgress(l){return this.post(this.pluginBasePath+"/rumble/progress",l)}async saveRumbleDuration(l){return this.post(this.pluginBasePath+"/rumble/duration",l)}async getRumbleProgress(l){return this.get(this.pluginBasePath+"/rumble/progress/".concat(encodeURIComponent(l)))}async getRumbleHistory(l=50,c=0){return this.get(this.pluginBasePath+"/rumble/history?limit=".concat(l,"&offset=").concat(c))}async deleteRumbleHistoryItem(l){return this.delete(this.pluginBasePath+"/rumble/history/".concat(encodeURIComponent(l)))}async clearRumbleHistory(){return this.delete(this.pluginBasePath+"/rumble/history")}};async function Br({peertubeHelpers:a,registerClientRoute:l,registerHook:c}){let b=!!(await a.getSettings())[ct];c({target:"filter:left-menu.links.create.result",handler:async e=>{if(!b)return e;let t=!1;if(a.isLoggedIn())try{let i=a.getAuthHeader;t=(await new F(i).getMe()).isPremium===!0}catch(i){console.error("\u274C [Premium Plugin] Failed to fetch premium status for menu:",i)}let n=a.isLoggedIn()?"/my-account/p/premium":"/p/premium",r=await a.translate(t?"Premium account":"Become premium");return e.map(i=>i.key==="quick-access"?J(H({},i),{links:[...i.links,{path:n,icon:t?"premium":void 0,label:r,shortLabel:r,isPrimaryButton:!t}]}):a.isLoggedIn()&&i.key==="my-library"?J(H({},i),{links:[...i.links,{path:"/p/rumble-history",label:"\u0E1B\u0E23\u0E30\u0E27\u0E31\u0E15\u0E34\u0E01\u0E32\u0E23\u0E23\u0E31\u0E1A\u0E0A\u0E21",shortLabel:"\u0E1B\u0E23\u0E30\u0E27\u0E31\u0E15\u0E34",icon:"history"}]}):i)}}),c({target:"filter:internal.common.svg-icons.get-content.result",handler:(e,t)=>t.name==="premium"?'\n\n <svg\n\n fill="gray"\n\n version="1.1"\n\n xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"\n\n viewBox="0 0 45.402 45.402"\n\n xml:space="preserve">\n\n <g>\n\n <path d="M41.267,18.557H26.832V4.134C26.832,1.851,24.99,0,22.707,0c-2.283,0-4.124,1.851-4.124,4.135v14.432H4.141\n\n c-2.283,0-4.139,1.851-4.138,4.135c-0.001,1.141,0.46,2.187,1.207,2.934c0.748,0.749,1.78,1.222,2.92,1.222h14.453V41.27\n\n c0,1.142,0.453,2.176,1.201,2.922c0.748,0.748,1.777,1.211,2.919,1.211c2.282,0,4.129-1.851,4.129-4.133V26.857h14.435\n\n c2.283,0,4.134-1.867,4.133-4.15C45.399,20.425,43.548,18.557,41.267,18.557z"/>\n\n </g>\n\n </svg>':e});let T=e=>()=>{let t=new URLSearchParams(window.location.search).get("redirect");t&&c({target:"action:auth-user.logged-in",handler:()=>{De("tutorial_complete",{event_label:e}),window.location.href=t}})};if(c({target:"action:login.init",handler:T("login")}),c({target:"action:signup.register.init",handler:T("signup")}),l({route:"/premium",title:await a.translate("Become premium"),onMount:async({rootEl:e})=>{if(a.isLoggedIn()){window.location.href="/my-account/p/premium";return}De("tutorial_begin");let n=await new F().getPrices(),r=new Se(e),i=await Promise.all(n.map(u=>mt({price:u,uiBuilder:r,translate:a.translate}))),o=r.div([r.img("/client/assets/images/icons/icon-192x192.png","instance-logo"),r.h2(await a.translate("Become a premium user")),r.p(await a.translate("Get access to premium videos and helps us to continue our work.")),r.div(i.map(u=>r.div([u],"col-12 col-sm-6 d-flex")),"prices-alternatives row my-5 mx-auto"),r.div([r.a(await a.translate("Create an account"),{class:"primary-button peertube-button-link button-md mb-2",href:"/signup?redirect=/my-account/p/premium","data-testid":"premium_users-button-create_account"}),r.p(await a.translate("or"),"mb-0"),r.a(await a.translate("Login"),{class:"secondary-button peertube-button-link mt-2 button-md",href:"/login?redirect=/my-account/p/premium"})],"action-buttons d-flex justify-content-center flex-column mb-4 mx-sm-auto")],"plugin-premium-users become-premium margin-content pt-4 text-center mx-auto px-4 px-md-0");e.appendChild(o)}}),!b)return;function k(e){e=Math.max(0,Math.floor(Number(e)||0));let t=Math.floor(e/3600),n=Math.floor(e%3600/60),r=e%60;return t>0?"".concat(t,":").concat(String(n).padStart(2,"0"),":").concat(String(r).padStart(2,"0")):"".concat(n,":").concat(String(r).padStart(2,"0"))}function E(e){return String(e!=null?e:"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function $(e){var n,r;let t=(e==null?void 0:e.thumbnailPath)||(e==null?void 0:e.previewPath)||(e==null?void 0:e.thumbnailUrl)||(e==null?void 0:e.previewUrl)||((r=(n=e==null?void 0:e.files)==null?void 0:n[0])==null?void 0:r.thumbnailPath)||"";return t?/^https?:\/\//i.test(t)?t:"".concat(window.location.origin).concat(t.startsWith("/")?"":"/").concat(t):""}async function x(e){var r;if(e.innerHTML='<div class="margin-content"><h1>\u0E1B\u0E23\u0E30\u0E27\u0E31\u0E15\u0E34\u0E01\u0E32\u0E23\u0E23\u0E31\u0E1A\u0E0A\u0E21</h1><p>\u0E01\u0E33\u0E25\u0E31\u0E07\u0E42\u0E2B\u0E25\u0E14...</p></div>',!a.isLoggedIn()){e.innerHTML='<div class="margin-content"><h1>\u0E1B\u0E23\u0E30\u0E27\u0E31\u0E15\u0E34\u0E01\u0E32\u0E23\u0E23\u0E31\u0E1A\u0E0A\u0E21</h1><p>\u0E01\u0E23\u0E38\u0E13\u0E32\u0E40\u0E02\u0E49\u0E32\u0E2A\u0E39\u0E48\u0E23\u0E30\u0E1A\u0E1A\u0E01\u0E48\u0E2D\u0E19</p></div>';return}let t=new F(a.getAuthHeader),n=()=>x(e);try{let i=await t.getRumbleHistory(50,0),o=Array.isArray(i==null?void 0:i.data)?i.data:[];if(o.length===0){e.innerHTML='\n <div class="margin-content">\n <h1>\u0E1B\u0E23\u0E30\u0E27\u0E31\u0E15\u0E34\u0E01\u0E32\u0E23\u0E23\u0E31\u0E1A\u0E0A\u0E21</h1>\n <p>\u0E22\u0E31\u0E07\u0E44\u0E21\u0E48\u0E21\u0E35\u0E1B\u0E23\u0E30\u0E27\u0E31\u0E15\u0E34\u0E01\u0E32\u0E23\u0E23\u0E31\u0E1A\u0E0A\u0E21</p>\n </div>\n ';return}let u=await Promise.all(o.map(async s=>{var ve,K,we,ce;let p=s.videoUuid,d="/w/".concat(encodeURIComponent(s.videoUuid)),y="",v="";try{let Z=await fetch("/api/v1/videos/".concat(encodeURIComponent(s.videoUuid)),{headers:((ve=a.getAuthHeader)==null?void 0:ve.call(a))||{},credentials:"include"});if(Z.ok){let L=await Z.json();p=L.name||p,L.shortUUID&&(d="/w/".concat(L.shortUUID)),y=$(L),v=((K=L.channel)==null?void 0:K.displayName)||((we=L.account)==null?void 0:we.displayName)||((ce=L.account)==null?void 0:ce.name)||""}}catch(Z){}let U=Math.max(0,Math.floor(Number(s.lastPositionSeconds||0))),g=Math.max(0,Math.floor(Number(s.durationSeconds||0))),h=Number(s.watchedPercent||0),P="".concat(d).concat(d.includes("?")?"&":"?","rumbleStart=").concat(U,"&rumbleAutoplay=1"),V=String(s.videoUuid||"");return'\n <div class="premium-rumble-history-row" data-video-uuid="'.concat(E(V),'" style="display:flex;gap:14px;align-items:flex-start;padding:14px 0;border-bottom:1px solid var(--greyForegroundColor, #ddd);">\n <a href="').concat(E(P),'" style="display:block;width:180px;max-width:35%;flex:0 0 180px;background:#111;border-radius:4px;overflow:hidden;">\n ').concat(y?'<img src="'.concat(E(y),'" alt="" loading="lazy" style="display:block;width:100%;aspect-ratio:16/9;object-fit:cover;">'):'<div style="width:100%;aspect-ratio:16/9;background:#111;"></div>','\n </a>\n <div style="min-width:0;flex:1;">\n <a href="').concat(E(P),'" style="font-weight:600;font-size:16px;line-height:1.35;display:block;word-break:break-word;">').concat(E(p),"</a>\n ").concat(v?'<div style="font-size:13px;opacity:.75;margin-top:4px;">'.concat(E(v),"</div>"):"",'\n <div style="font-size:13px;opacity:.85;margin-top:5px;">\u0E14\u0E39\u0E16\u0E36\u0E07 ').concat(k(U)," / ").concat(k(g)," (").concat(h,'%)</div>\n <div style="margin-top:10px;display:flex;gap:8px;align-items:center;flex-wrap:wrap;">\n <button class="peertube-button secondary-button button-sm premium-rumble-delete-history" data-video-uuid="').concat(E(V),'" type="button">\u0E25\u0E1A\u0E2D\u0E2D\u0E01\u0E08\u0E32\u0E01\u0E1B\u0E23\u0E30\u0E27\u0E31\u0E15\u0E34</button>\n </div>\n </div>\n </div>\n ')}));e.innerHTML='\n <div class="margin-content">\n <div style="display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:16px;">\n <div>\n <h1 style="margin-bottom:4px;">\u0E1B\u0E23\u0E30\u0E27\u0E31\u0E15\u0E34\u0E01\u0E32\u0E23\u0E23\u0E31\u0E1A\u0E0A\u0E21</h1>\n </div>\n <button class="peertube-button secondary-button premium-rumble-clear-history" type="button">\u0E25\u0E49\u0E32\u0E07\u0E1B\u0E23\u0E30\u0E27\u0E31\u0E15\u0E34\u0E17\u0E31\u0E49\u0E07\u0E2B\u0E21\u0E14</button>\n </div>\n <div>'.concat(u.join(""),"</div>\n </div>\n "),e.querySelectorAll(".premium-rumble-delete-history").forEach(s=>{s.addEventListener("click",async()=>{let p=s.dataset.videoUuid;if(p)try{await t.deleteRumbleHistoryItem(p),await n()}catch(d){console.error("\u274C [Premium Rumble] delete history failed:",d)}})}),(r=e.querySelector(".premium-rumble-clear-history"))==null||r.addEventListener("click",async()=>{if(window.confirm("\u0E25\u0E49\u0E32\u0E07\u0E1B\u0E23\u0E30\u0E27\u0E31\u0E15\u0E34\u0E01\u0E32\u0E23\u0E23\u0E31\u0E1A\u0E0A\u0E21\u0E17\u0E31\u0E49\u0E07\u0E2B\u0E21\u0E14?"))try{await t.clearRumbleHistory(),await n()}catch(s){console.error("\u274C [Premium Rumble] clear history failed:",s)}})}catch(i){console.error("\u274C [Premium Rumble] Failed to load history:",i),e.innerHTML='<div class="margin-content"><h1>\u0E1B\u0E23\u0E30\u0E27\u0E31\u0E15\u0E34\u0E01\u0E32\u0E23\u0E23\u0E31\u0E1A\u0E0A\u0E21</h1><p>\u0E42\u0E2B\u0E25\u0E14\u0E1B\u0E23\u0E30\u0E27\u0E31\u0E15\u0E34\u0E44\u0E21\u0E48\u0E2A\u0E33\u0E40\u0E23\u0E47\u0E08</p></div>'}}l({route:"/rumble-history",title:"\u0E1B\u0E23\u0E30\u0E27\u0E31\u0E15\u0E34\u0E01\u0E32\u0E23\u0E23\u0E31\u0E1A\u0E0A\u0E21",parentRoute:"/",onMount:async({rootEl:e})=>x(e)});let w=new Map,S=[],C=!1,N=window.location.origin,me=new AbortController;function pt(){me.abort(),me=new AbortController,S=[],w.clear(),C=!1}async function ft(){if(!(C||S.length===0)){for(C=!0;S.length>0;){let e=S[0];if(!e)break;try{let t=await fetch(e.url,{signal:me.signal});if(t.status===429){await new Promise(n=>setTimeout(n,1e3));continue}S.shift(),e.resolve(t),w.delete(e.url)}catch(t){S.shift(),e.resolve(null),w.delete(e.url)}me.signal.aborted||await new Promise(t=>setTimeout(t,100))}C=!1}}function de(e){if(w.has(e))return w.get(e);let t=new Promise(n=>{S.push({url:e,resolve:n}),ft()});return w.set(e,t),t}function Ve(e){return"premium_cache_checked_videos_".concat(e)}function Fe(e){return"premium_cache_checked_shortUUID_".concat(e)}function B(e){return"premium_cache_map_uuid_to_short_".concat(e)}function O(e){return"premium_cache_map_short_to_uuid_".concat(e)}function ht(e){e=Math.max(0,Math.floor(Number(e)||0));let t=Math.floor(e/3600),n=Math.floor(e%3600/60),r=e%60;return t>0?"".concat(t,":").concat(String(n).padStart(2,"0"),":").concat(String(r).padStart(2,"0")):"".concat(n,":").concat(String(r).padStart(2,"0"))}function gt(e){if(!e)return;let t=e.pluginData||{},n=t["use-rumble-player"]==="true"||t["use-rumble-player"]===!0||t["use-rumble-player"]==="1",r=Number(t["rumble-duration-seconds"]||0);if(!n||!r||r<=0)return;[e.uuid,e.shortUUID].filter(Boolean).forEach(o=>{sessionStorage.setItem(se(o),"true"),sessionStorage.setItem(Ge(o),String(Math.floor(r)))})}function yt(e){try{let n=new URL(e,window.location.origin).pathname.match(/^\/w\/(?!p\/)([a-zA-Z0-9-]+)/);return(n==null?void 0:n[1])||null}catch(t){let n=e.match(/\/w\/(?!p\/)([a-zA-Z0-9-]+)/);return(n==null?void 0:n[1])||null}}let Pe=new Set;function bt(e,t){let n=Math.max(1,Math.floor(Number(t)||1)),r=Math.floor((n-1)/100)*100,i="".concat(e,"_").concat(r);Pe.has(i)||sessionStorage.getItem("premium_rumble_playlist_duration_page_".concat(i))!=="true"&&(Pe.add(i),setTimeout(async()=>{try{let o=await de("".concat(N,"/api/v1/video-playlists/").concat(e,"/videos?start=").concat(r,"&count=100"));if(!o||!o.ok)return;let u=await o.json();D(u,"/api/v1/video-playlists/".concat(e,"/videos?start=").concat(r,"&count=100")),sessionStorage.setItem("premium_rumble_playlist_duration_page_".concat(i),"true"),setTimeout(Q,120)}catch(o){console.warn("\u26A0\uFE0F [Premium Rumble] playlist duration metadata fetch failed:",o)}finally{Pe.delete(i)}},250))}function vt(e){let t=e.closest('a[href*="/w/"]'),n=e.closest('a[href*="/w/"], .video-thumbnail, .video-miniature, .video-wrapper, .video, my-video-miniature, my-video-playlist-element-miniature'),r=t||(n==null?void 0:n.querySelector('a[href*="/w/"]'));if(!(r!=null&&r.href))return null;let i=yt(r.href);if(i)return i;let o=kt(r.href);if(o){let u=sessionStorage.getItem(Xe(o.playlistUuid,o.position));if(u)return u;bt(o.playlistUuid,o.position)}return null}function Q(){document.querySelectorAll(".duration-overlay").forEach(e=>{let t=e,n=vt(t);if(!n)return;let r=Number(sessionStorage.getItem(Ge(n))||0);if(!r||r<=0)return;let i=ht(r);t.textContent!==i&&(t.textContent=i),t.setAttribute("aria-label","Video duration is ".concat(i))})}function wt(e,t){e!=null&&e.uuid&&(sessionStorage.setItem(Ve(e.uuid),"true"),e.shortUUID&&(sessionStorage.setItem(Fe(e.shortUUID),"true"),sessionStorage.setItem(B(e.uuid),e.shortUUID),sessionStorage.setItem(O(e.shortUUID),e.uuid)),t?(sessionStorage.setItem("premium_cache_videos_".concat(e.uuid),"true"),e.shortUUID&&sessionStorage.setItem("premium_cache_shortUUID_".concat(e.shortUUID),"true")):(sessionStorage.removeItem("premium_cache_videos_".concat(e.uuid)),e.shortUUID&&sessionStorage.removeItem("premium_cache_shortUUID_".concat(e.shortUUID))))}function Be(e){let t=e.match(/\/api\/v1\/videos\/([^/?#]+)/);return t!=null&&t[1]?decodeURIComponent(t[1]):null}function St(){let e=[];for(let t=0;t<sessionStorage.length;t++){let n=sessionStorage.key(t);n&&n.startsWith("premium_cache_playlist_")&&e.push(n)}e.forEach(t=>sessionStorage.removeItem(t))}function Pt(e){let t=sessionStorage.getItem(B(e)),n=sessionStorage.getItem(O(e)),r=new Set([e]);t&&r.add(t),n&&r.add(n),r.forEach(i=>{sessionStorage.removeItem("premium_cache_videos_".concat(i)),sessionStorage.removeItem("premium_cache_shortUUID_".concat(i)),sessionStorage.removeItem(Ve(i)),sessionStorage.removeItem(Fe(i)),sessionStorage.removeItem(B(i)),sessionStorage.removeItem(O(i))}),St()}function Tt(e){let t=e.querySelector(".custom-member-badge");t&&t.remove(),e.classList.remove("has-premium-badge"),delete e.dataset.premiumFetchRequested}function Oe(e){let t=sessionStorage.getItem(B(e)),n=sessionStorage.getItem(O(e)),r=new Set([e]);t&&r.add(t),n&&r.add(n),Pt(e);let i=["my-video-miniature",".video-miniature","ptb-video-miniature","my-video-playlist-element-miniature",".video-playlist-miniature","my-video-cell","my-video-list-element","my-user-video-history-element","tr.p-selectable-row","my-video-playlist-element","my-recommended-videos my-video-miniature"].join(", ");document.querySelectorAll(i).forEach(o=>{let u=o.tagName.toLowerCase()==="a"?o:o.querySelector('a.video-title, a.title, a.video-name, a.pt-router-link, a[href*="/w/"], a[href*="/video-playlists/"]');if(!u)return;let s=u.href||"",p=!1;for(let d of r)if(s.includes("/w/".concat(d))){p=!0;break}!p&&(s.includes("/w/p/")||s.includes("/video-playlists/"))&&(p=!0),p&&Tt(o)}),setTimeout(z,50),setTimeout(z,250)}function ze(){let e=[];for(let t=0;t<sessionStorage.length;t++){let n=sessionStorage.key(t);n&&n.startsWith("premium_cache_")&&e.push(n)}e.forEach(t=>sessionStorage.removeItem(t)),w.clear(),document.querySelectorAll(".has-premium-badge, [data-premium-fetch-requested]").forEach(t=>{let n=t.querySelector(".custom-member-badge");n&&n.remove(),t.classList.remove("has-premium-badge"),delete t.dataset.premiumFetchRequested}),setTimeout(z,200)}function D(e,t){let n=!1;e&&e.data&&Array.isArray(e.data)&&e.data.forEach(r=>{let i=r.video||r;if(i&&i.uuid){let o=t.match(/\/api\/v1\/video-playlists\/([a-zA-Z0-9-]+)/);if(o!=null&&o[1]&&r.position){let s=i.shortUUID||i.uuid;sessionStorage.setItem(Xe(o[1],r.position),s),i.shortUUID&&(sessionStorage.setItem(O(i.shortUUID),i.uuid),sessionStorage.setItem(B(i.uuid),i.shortUUID))}gt(i);let u=!1;if(i.pluginData){let s=i.pluginData["is-premium-content"];u=s==="true"||s===!0||s==="1"}if(u||(u=sessionStorage.getItem("premium_cache_videos_".concat(i.uuid))==="true"),wt(i,u),u){if(r.position&&t.includes("/video-playlists/")){let s=t.match(/\/api\/v1\/video-playlists\/([a-zA-Z0-9-]+)/);s&&s[1]&&sessionStorage.setItem("premium_cache_playlist_".concat(s[1],"_pos_").concat(r.position),"true")}n=!0}else if(r.position&&t.includes("/video-playlists/")){let s=t.match(/\/api\/v1\/video-playlists\/([a-zA-Z0-9-]+)/);s&&s[1]&&sessionStorage.removeItem("premium_cache_playlist_".concat(s[1],"_pos_").concat(r.position))}}}),setTimeout(Q,150),n&&setTimeout(z,100)}window.processPeerTubePremiumData=D;let Et=XMLHttpRequest.prototype.open,_t=XMLHttpRequest.prototype.send;XMLHttpRequest.prototype.open=function(e,t){return this._customMethod=e.toUpperCase(),this._customUrl=t.toString(),Et.apply(this,arguments)},XMLHttpRequest.prototype.send=function(){return this.addEventListener("load",function(){let e=this._customUrl,t=this._customMethod;if(e){if(t==="PUT"&&e.includes("/api/v1/videos/")&&!e.includes("/views")&&!e.includes("/rate")&&!e.includes("/passwords")&&this.status>=200&&this.status<300){let r=Be(e);setTimeout(r?()=>Oe(r):ze,300)}if(e.includes("/api/v1/"))try{let r=typeof this.response=="string"?JSON.parse(this.response):this.response;r&&r.data&&Array.isArray(r.data)&&D(r,e)}catch(r){}}}),_t.apply(this,arguments)};let Lt=window.fetch;window.fetch=async function(...e){let t=e[0]instanceof Request?e[0]:null,n=t?t.url:e[0],i=(t?t.method.toUpperCase():e[1]&&e[1].method?e[1].method.toUpperCase():"GET")==="PUT"&&n.includes("/api/v1/videos/")&&!n.includes("/views")&&!n.includes("/rate")&&!n.includes("/passwords"),o=await Lt.apply(this,e);if(i&&o.ok){let s=Be(n);setTimeout(s?()=>Oe(s):ze,300)}let u=o.clone();try{n.includes("/api/v1/")&&u.json().then(s=>{s&&s.data&&Array.isArray(s.data)&&D(s,n)}).catch(()=>{})}catch(s){}return o};function Rt(e,t="append",n="block"){var s;if(!e)return!1;let r=t==="after"?e.parentNode:e;if(!r||r.querySelector(".custom-member-badge"))return!1;let i=document.createElement("div");i.className="custom-member-badge";let o="display: inline-flex; align-items: center; color: #127a1b; font-size: 12px; font-weight: 500; margin-top: 4px; margin-bottom: 2px; border: none; outline: none; box-shadow: none;";n==="block"?o+=" width: 100%;":n==="inline"&&(o+=" margin-left: 8px; vertical-align: middle;"),i.style.cssText=o,i.innerHTML='<svg style="width: 14px; height: 14px; margin-right: 4px; fill: currentColor;" viewBox="0 0 24 24"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm4.24 16L12 15.45 7.77 18l1.12-4.81-3.73-3.23 4.92-.42L12 5l1.92 4.53 4.92.42-3.73 3.23L16.23 18z"/></svg>\u0E40\u0E09\u0E1E\u0E32\u0E30\u0E2A\u0E21\u0E32\u0E0A\u0E34\u0E01';let u=n==="block"?(()=>{let p=document.createElement("div");return p.style.cssText="display: block; width: 100%; clear: both; border: none; margin: 0; padding: 0;",p.appendChild(i),p})():i;return t==="after"?(s=e.parentNode)==null||s.insertBefore(u,e.nextSibling):e.appendChild(u),!0}async function xt(e,t){let n="premium_cache_playlist_".concat(e,"_pos_").concat(t);if(sessionStorage.getItem(n)==="true")return!0;let r=100,i=0;try{for(;;){let o=await de("".concat(N,"/api/v1/video-playlists/").concat(e,"/videos?start=").concat(i,"&count=").concat(r));if(!o||!o.ok)break;let u=await o.json();if(D(u,"/api/v1/video-playlists/".concat(e,"/videos?start=").concat(i,"&count=").concat(r)),sessionStorage.getItem(n)==="true")return!0;if((Array.isArray(u==null?void 0:u.data)?u.data:[]).length<r)break;i+=r}}catch(o){}return!1}function z(){let e=["my-video-miniature",".video-miniature","ptb-video-miniature","my-video-playlist-element-miniature",".video-playlist-miniature","my-video-cell","my-video-list-element","my-user-video-history-element","tr.p-selectable-row","my-video-playlist-element","my-recommended-videos my-video-miniature"].join(", "),t=document.querySelectorAll(e),n=window.location.pathname;t.forEach(r=>{if(r.querySelector(".custom-member-badge")){r.classList.add("has-premium-badge");return}let i=r.tagName.toLowerCase()==="a"?r:r.querySelector('a.video-title, a.title, a.video-name, a.pt-router-link, a[href*="/w/"], a[href*="/video-playlists/"]');if(i)try{let o=new URL(i.href,window.location.origin),u=o.searchParams.get("playlistPosition"),s=null,p=!1,d=r.tagName.toLowerCase().includes("playlist")||r.classList.contains("video-playlist-miniature")||r.classList.contains("my-video-playlist-element");if(o.pathname.includes("/w/p/")||o.pathname.includes("/video-playlists/")||d){let y=o.pathname.match(/(?:\/w\/p\/|\/video-playlists\/)([a-zA-Z0-9-]+)/);y&&(s=y[1]),p=!0}else{let y=o.pathname.match(/\/w\/([a-zA-Z0-9-]+)/);y&&(s=y[1])}if(!s){let y=r.querySelector('img[src*="/thumbnails/"]');if(y){let v=y.src.match(/\/thumbnails\/([a-zA-Z0-9-]+)\.jpg/);v&&v[1]&&(s=v[1])}}if(s){let y=!!(r.closest("my-recommended-videos")||r.closest(".other-videos")),v=sessionStorage.getItem("premium_cache_videos_".concat(s))==="true"||sessionStorage.getItem("premium_cache_shortUUID_".concat(s))==="true";!v&&u&&!y&&(v=sessionStorage.getItem("premium_cache_playlist_".concat(s,"_pos_").concat(u))==="true");let U=()=>{let g=null,h="append",P="block";n.includes("/admin/overview/videos")||n.includes("/my-library/videos")?(g=r.querySelector('a.channel.ellipsis[href*="/c/"]'),g&&(h="after",P="block")):n.includes("/my-library/history/videos")?(g=r.querySelector('a.inherit-parent-style[href*="/c/"]'),g&&(h="after",P="block")):y?(g=r.querySelector(".video-info-owner")||r.querySelector(".video-info"),g&&(h="append",P="block")):n.includes("/w/p/")?(g=r.querySelector(".video-info-owner"),g&&(h="after",P="block")):(g=r.querySelector(".video-info")||r.querySelector(".video-miniature-info")||r.querySelector(".metadata"),g&&(h="append",P="block")),g&&Rt(g,h,P)&&r.classList.add("has-premium-badge")};if(!v&&p&&u&&!y){if(r.dataset.premiumFetchRequested)return;r.dataset.premiumFetchRequested="true",xt(s,u).then(g=>{g?U():r.dataset.premiumFetchRequested="failed"}).catch(()=>{r.dataset.premiumFetchRequested="failed"})}else if(!v&&!p){if(s.includes("playlist-")||sessionStorage.getItem("premium_cache_checked_videos_".concat(s))==="true"||sessionStorage.getItem("premium_cache_checked_shortUUID_".concat(s))==="true"||r.dataset.premiumFetchRequested)return;r.dataset.premiumFetchRequested="true",de("".concat(N,"/api/v1/videos/").concat(s)).then(h=>!h||!h.ok?(r.dataset.premiumFetchRequested="failed",null):h.json()).then(h=>{h&&(D({data:[h]},"/api/v1/videos/".concat(s)),sessionStorage.getItem("premium_cache_videos_".concat(s))==="true"&&U()),r.dataset.premiumFetchRequested="failed"}).catch(()=>{r.dataset.premiumFetchRequested="failed"})}else v&&U()}}catch(o){}})}let Mt=a.getAuthHeader,Y=new F(Mt),m=null,W="",ee=null,te="",pe=null,Te="",re=0,ne=null,ie=null,fe=null,Ee=0,_=0;function We(){return"".concat(window.location.pathname).concat(window.location.search)}function It(){return _++,Ee++,ee&&(clearTimeout(ee),ee=null),_}function oe(e,t,n){return!(e!==_||t!==We()||typeof n=="number"&&n!==Ee)}let At="premium_rumble_duration_",Ut="premium_rumble_use_player_",Ht="premium_rumble_local_progress_";function se(e){return"".concat(Ut).concat(e)}function Ge(e){return"".concat(At).concat(e)}function _e(e){return"".concat(Ht).concat(e)}function je(e){if(!e)return null;try{let t=localStorage.getItem(_e(e));if(!t)return null;let n=JSON.parse(t),r=Math.max(0,Math.floor(Number(n.positionSeconds)||0)),i=Math.max(0,Math.floor(Number(n.durationSeconds)||0)),o=Math.max(0,Math.floor(Number(n.updatedAt)||0));return!i||i<=0||i-r<=2?null:{positionSeconds:r,durationSeconds:i,updatedAt:o}}catch(t){return null}}function Ke(e,t,n){let r=Math.max(0,Math.floor(Number(t)||0)),i=Math.max(0,Math.floor(Number(n)||0));if(!i||i<=0||a.isLoggedIn()||i-r<=2)return;let o=JSON.stringify({positionSeconds:r,durationSeconds:i,updatedAt:Date.now()}),u=new Set;u.add(e.videoUuid);let s=Re();s&&u.add(s),u.forEach(p=>{try{localStorage.setItem(_e(p),o)}catch(d){}}),e.lastSavedPosition=r}function Ze(e){let t=new Set;e.forEach(r=>{let i=String(r||"").trim();i&&t.add(i)});let n=Re();n&&t.add(n),t.forEach(r=>{try{localStorage.removeItem(_e(r))}catch(i){}})}function Je(e){e&&Ze([e.videoUuid,e.rumbleVideoId])}function M(){return window.location.pathname.startsWith("/w/")}function Le(){return document.visibilityState==="visible"&&!document.hidden}function Xe(e,t){return"premium_rumble_playlist_".concat(e,"_pos_").concat(t,"_video")}function kt(e){try{let t=new URL(e,window.location.origin),n=t.pathname.match(/^\/w\/p\/([a-zA-Z0-9-]+)/),r=t.searchParams.get("playlistPosition")||"1";return n!=null&&n[1]?{playlistUuid:n[1],position:r}:null}catch(t){let n=e.match(/\/w\/p\/([a-zA-Z0-9-]+).*?[?&]playlistPosition=(\d+)/);return n!=null&&n[1]?{playlistUuid:n[1],position:n[2]||"1"}:null}}function Re(){let e=window.location.pathname.match(/^\/w\/(?!p\/)([a-zA-Z0-9-]+)/);return(e==null?void 0:e[1])||null}async function $t(e,t){let n=Number(t);if(!e||!Number.isFinite(n)||n<=0)return null;let r="premium_rumble_playlist_video_".concat(e,"_pos_").concat(t),i=sessionStorage.getItem(r);if(i)return i;let o=Math.max(0,Math.floor(n)-1),u=await de("".concat(N,"/api/v1/video-playlists/").concat(e,"/videos?start=").concat(o,"&count=1"));if(!u||!u.ok)return null;let s=await u.json();D(s,"/api/v1/video-playlists/".concat(e,"/videos?start=").concat(o,"&count=1"));let p=Array.isArray(s==null?void 0:s.data)?s.data[0]:null,d=(p==null?void 0:p.video)||p,y=(d==null?void 0:d.shortUUID)||(d==null?void 0:d.uuid)||null;return y&&(sessionStorage.setItem(r,y),d!=null&&d.uuid&&sessionStorage.setItem(O(y),d.uuid),d!=null&&d.shortUUID&&sessionStorage.setItem(B(d.uuid),d.shortUUID)),y}async function Ct(){if(window.location.pathname.startsWith("/w/p/")){let e=window.location.pathname.match(/^\/w\/p\/([a-zA-Z0-9-]+)/),t=e==null?void 0:e[1],n=new URLSearchParams(window.location.search).get("playlistPosition")||"1";if(!t)return null;let r=await $t(t,n);if(r)return r;let i=document.querySelector('#videojs-wrapper .vjs-peertube-link[href*="/w/"], .vjs-peertube-link[href*="/w/"]');if(i!=null&&i.href){let o=i.href.match(/\/w\/(?!p\/)([a-zA-Z0-9-]+)/);if(o!=null&&o[1])return o[1]}return null}return Re()}function xe(){let e=["my-video-watch #videojs-wrapper","#videojs-wrapper","my-video-watch .player-wrapper","my-video-watch my-video-watch-player","my-video-watch .video-player","my-video-watch .player-container",".player-wrapper"];for(let n of e){let r=document.querySelector(n);if(r)return r}let t=document.querySelector("my-video-watch .video-js, my-video-watch video");return t?t.closest("#videojs-wrapper, .player-wrapper, my-video-watch-player, .video-player, .player-container, .player")||t.parentElement:null}function Qe(e,t=!1){if(!e.closest(".premium-rumble-wrapper")){try{e.pause()}catch(n){}if(t){try{e.autoplay=!1}catch(n){}try{e.setAttribute("preload","none")}catch(n){}}}}function I(e,t=!0){(e||document).querySelectorAll("video").forEach(r=>{let i=r;i.closest(".premium-rumble-wrapper")||Qe(i,t)})}function Nt(e){(e||xe()||document).querySelectorAll("video").forEach(n=>{let r=n;if(!r.closest(".premium-rumble-wrapper")){try{r.muted=!1}catch(i){}try{r.volume===0&&(r.volume=1)}catch(i){}}})}function Me(){let e=new URLSearchParams(window.location.search);return e.has("rumbleStart")||e.get("rumbleAutoplay")==="1"||e.has("startSeconds")}function Ye(){(document.querySelector("my-video-watch, #videojs-wrapper")||document).querySelectorAll("video").forEach(t=>{Qe(t,!1)})}function ae(){ne||(Ye(),ne=window.setInterval(()=>{if(m!=null&&m.api){A();return}if(!window.location.pathname.startsWith("/w/")){A();return}Ye()},250))}function A(){ne&&(window.clearInterval(ne),ne=null)}function le(e=!0){ie&&(ie.remove(),ie=null),e&&fe&&rt(fe),fe=null}function Dt(e){if(m||ie||sessionStorage.getItem(se(e))!=="true")return;let t=xe();if(!t)return;I(t,!1);let n=ot();n.innerHTML='<div class="premium-rumble-loading-placeholder">\u0E01\u0E33\u0E25\u0E31\u0E07\u0E42\u0E2B\u0E25\u0E14\u0E40\u0E04\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E40\u0E25\u0E48\u0E19</div>',t.insertBefore(n,t.firstChild),ie=n,fe=tt(t,n)}function et(){if(document.getElementById("premium-rumble-style"))return;let e=document.createElement("style");e.id="premium-rumble-style",e.textContent='\n .premium-rumble-wrapper {\n display: block !important;\n width: 100% !important;\n max-width: 100% !important;\n aspect-ratio: 16 / 9 !important;\n background: #000 !important;\n position: relative !important;\n overflow: hidden !important;\n margin: 0 !important;\n padding: 0 !important;\n line-height: 0 !important;\n }\n .premium-rumble-loading-placeholder {\n width: 100% !important;\n height: 100% !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n background: #000 !important;\n color: #aaa !important;\n font-size: 14px !important;\n line-height: 1.4 !important;\n box-sizing: border-box !important;\n }\n .premium-rumble-pending > *:not(.premium-rumble-wrapper) {\n display: none !important;\n }\n .premium-rumble-wrapper > div,\n .premium-rumble-wrapper [id^="vid_"],\n .premium-rumble-wrapper iframe,\n .premium-rumble-wrapper video,\n .premium-rumble-wrapper object,\n .premium-rumble-wrapper embed {\n width: 100% !important;\n height: 100% !important;\n max-width: 100% !important;\n max-height: 100% !important;\n margin: 0 !important;\n border: 0 !important;\n box-sizing: border-box !important;\n }\n /* \u2705 v9.3: \u0E41\u0E01\u0E49\u0E40\u0E09\u0E1E\u0E32\u0E30\u0E1B\u0E38\u0E48\u0E21 play \u0E43\u0E2B\u0E0D\u0E48\u0E01\u0E25\u0E32\u0E07\u0E08\u0E2D\u0E02\u0E2D\u0E07 Rumble \u0E44\u0E21\u0E48\u0E22\u0E38\u0E48\u0E07 control bar */\n .premium-rumble-wrapper .premium-rumble-big-play-fixed {\n position: absolute !important;\n left: 50% !important;\n top: 50% !important;\n transform: translate(-50%, -50%) !important;\n width: 96px !important;\n height: 96px !important;\n max-width: 96px !important;\n max-height: 96px !important;\n min-width: 96px !important;\n min-height: 96px !important;\n z-index: 100 !important;\n align-items: center !important;\n justify-content: center !important;\n padding: 0 !important;\n margin: 0 !important;\n overflow: visible !important;\n box-sizing: border-box !important;\n pointer-events: auto !important;\n }\n .premium-rumble-wrapper .premium-rumble-big-play-inner-fixed {\n width: 96px !important;\n height: 96px !important;\n max-width: 96px !important;\n max-height: 96px !important;\n min-width: 96px !important;\n min-height: 96px !important;\n padding: 24px !important;\n margin: 0 !important;\n border-radius: 50% !important;\n box-sizing: border-box !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n }\n .premium-rumble-wrapper .premium-rumble-big-play-inner-fixed svg,\n .premium-rumble-wrapper svg.premium-rumble-big-play-svg-fixed {\n width: 48px !important;\n height: 48px !important;\n max-width: 48px !important;\n max-height: 48px !important;\n display: block !important;\n }\n .premium-rumble-wrapper .premium-rumble-title-hidden,\n .premium-rumble-wrapper .premium-rumble-logo-hidden,\n .premium-rumble-wrapper .premium-rumble-autoplay-hidden {\n display: none !important;\n visibility: hidden !important;\n pointer-events: none !important;\n }\n .premium-rumble-peertube-hidden {\n display: none !important;\n }\n ',document.head.appendChild(e)}function qt(e){et();let t=Array.from(e.children).find(r=>{var o;return(o=r.id)==null?void 0:o.startsWith("premium_rumble_")}),n=e.querySelector('[id^="vid_"]');[e,t,n].forEach(r=>{r&&(r.style.width="100%",r.style.height="100%",r.style.maxWidth="100%",r.style.maxHeight="100%",r.style.boxSizing="border-box")}),e.querySelectorAll("iframe, object, embed").forEach(r=>{let i=r;i.style.width="100%",i.style.height="100%",i.style.maxWidth="100%",i.style.maxHeight="100%",i.style.boxSizing="border-box"})}function Vt(e){let t=e.querySelector('[id^="vid_"]')||e,n=t.querySelector(".bigPlayUI.ctp");if(n){n.classList.add("premium-rumble-big-play-fixed"),window.getComputedStyle(n).display!=="none"&&(n.style.display="flex");let o=n.querySelector(".bigPlayUIInner.ctp");o&&o.classList.add("premium-rumble-big-play-inner-fixed");let u=n.querySelector("svg.RumbleSVG-bplay, svg");u&&u.classList.add("premium-rumble-big-play-svg-fixed")}let r=t.querySelector(".touched_overlay_item");if(r){let i=r.querySelector(".play_pause_wrap");i&&(i.style.width="96px",i.style.height="96px",i.style.maxWidth="96px",i.style.maxHeight="96px",i.style.margin="0 18px",i.style.padding="0"),r.querySelectorAll(".play_svg, .pause_svg").forEach(o=>{let u=o;u.style.width="96px",u.style.height="96px",u.style.maxWidth="96px",u.style.maxHeight="96px",u.style.padding="24px",u.style.boxSizing="border-box"})}}function Ft(e){var n,r,i;let t=Array.from(e.querySelectorAll('a[href*="rumble.com/v"], a[href^="//rumble.com/v"]'));for(let o of t){let u=window.getComputedStyle(o);(o.textContent||"").trim().length>0&&u.position==="absolute"&&(u.top==="0px"||((n=o.getAttribute("style"))==null?void 0:n.includes("top: 0px")))&&(u.left==="0px"||((r=o.getAttribute("style"))==null?void 0:r.includes("left: 0px")))&&(u.right==="0px"||((i=o.getAttribute("style"))==null?void 0:i.includes("right: 0px")))&&o.classList.add("premium-rumble-title-hidden")}}function Bt(e){let t=Array.from(e.querySelectorAll('svg.RumbleElm[viewBox="0 0 140 35"], svg.RumbleElm[viewBox="0 0 35 35"]'));for(let n of t){let r=n.outerHTML||"";if(!(r.includes('fill="#85C742"')||r.includes("fill='#85C742'")))continue;(n.closest('div[style*="float: right"], div[title*="Rumble"], a, div')||n).classList.add("premium-rumble-logo-hidden")}}function Ot(e){return e.querySelector('div[title="Autoplay"], [title="Autoplay"]')}function zt(e){if(!e)return;let t=["setAutoplay","setAutoPlay","setAutoplayNext","setAutoPlayNext"];for(let n of t){let r=e[n];if(typeof r=="function")try{let i=r.call(e,!1);i!=null&&i.catch&&i.catch(()=>{})}catch(i){}}}function Wt(e){if(e.dataset.rumbleAutoplayUserGuardAttached==="true")return;e.dataset.rumbleAutoplayUserGuardAttached="true";let t=()=>{let n=Ot(e);if(!n||n.dataset.premiumAutoplayGuardAttached==="true")return;n.dataset.premiumAutoplayGuardAttached="true";let r=()=>{e.dataset.rumbleAutoplayUserTouched="true"};n.addEventListener("pointerdown",r,{passive:!0}),n.addEventListener("mousedown",r,{passive:!0}),n.addEventListener("touchstart",r,{passive:!0}),n.addEventListener("click",r,{passive:!0})};t(),window.setTimeout(t,500),window.setTimeout(t,1500),window.setTimeout(t,3e3)}function Gt(e,t){if(e.dataset.rumbleAutoplayArmed==="true")return;e.dataset.rumbleAutoplayArmed="true",Wt(e);let n=0,r=window.setInterval(()=>{if(n++,!m||m!==t||t.wrapper!==e){window.clearInterval(r);return}if(e.dataset.rumbleAutoplayUserTouched==="true"){window.clearInterval(r);return}zt(t.api),n>=6&&window.clearInterval(r)},700)}function Ie(e){qt(e),Vt(e),Ft(e),Bt(e)}function tt(e,t){let n=[];return e.classList.add("premium-rumble-pending"),Array.from(e.children).forEach(r=>{let i=r;i!==t&&(i.classList.contains("premium-rumble-wrapper")||(i.classList.add("premium-rumble-peertube-hidden"),n.push(i)))}),n}function rt(e){(e||[]).forEach(t=>{var n;t.classList.remove("premium-rumble-peertube-hidden"),(n=t.parentElement)==null||n.classList.remove("premium-rumble-pending")}),document.querySelectorAll(".premium-rumble-pending").forEach(t=>{t.classList.remove("premium-rumble-pending")})}function nt(e){if(!e||e<=0)return;let t=Kt(e);document.querySelectorAll(".attribute-duration .attribute-value, .attribute.attribute-duration .attribute-value").forEach(n=>{let r=n,i=(m==null?void 0:m.videoUuid)||window.location.href;Te!==i&&(pe=r.textContent||"",Te=i),r.textContent=t,r.dataset.rumbleDuration="true"})}function jt(){document.querySelectorAll('.attribute-duration .attribute-value[data-rumble-duration="true"], .attribute.attribute-duration .attribute-value[data-rumble-duration="true"]').forEach(e=>{let t=e;pe!==null&&(t.textContent=pe),delete t.dataset.rumbleDuration}),pe=null,Te=""}function Kt(e){e=Math.max(0,Math.floor(Number(e)||0));let t=Math.floor(e/3600),n=Math.floor(e%3600/60),r=e%60;return t>0?"".concat(t," \u0E0A\u0E21. ").concat(n," \u0E19\u0E32\u0E17\u0E35 ").concat(r,"sec"):n>0?"".concat(n," \u0E19\u0E32\u0E17\u0E35 ").concat(r,"sec"):"".concat(r,"sec")}function Ae(){return/Android|iPhone|iPad|iPod|Mobile/i.test(navigator.userAgent)}function Zt(){try{let e=new URL(window.location.href),t=Number(e.searchParams.get("playlistPosition"));return Number.isFinite(t)&&t>0?t:null}catch(e){return null}}function Jt(){return window.location.pathname.includes("/w/p/")}function it(e){return e?(e.click(),!0):!1}function Xt(){let e=Zt();if(!e)return null;let t=e+1,n=Array.from(document.querySelectorAll('a[href*="/w/p/"][href*="playlistPosition="]'));for(let r of n)try{let i=new URL(r.href,window.location.origin);if(Number(i.searchParams.get("playlistPosition"))===t)return r}catch(i){}return null}function Qt(){let e=document.querySelector('my-input-switch input[name="autoplay-next-video"], input#autoplay-next-video, input[name="autoplay-next-video"]');if(e)return e.checked===!0;let t=document.querySelector('my-input-switch[inputname="autoplay-next-video"], [role="switch"][name="autoplay-next-video"], [aria-label*="\u0E40\u0E25\u0E48\u0E19\u0E27\u0E34\u0E14\u0E35\u0E42\u0E2D\u0E16\u0E31\u0E14\u0E44\u0E1B"], [aria-label*="autoplay"]');if(!t)return!1;let n=t.getAttribute("aria-checked");return n==="true"?!0:n==="false"?!1:t.classList.contains("active")||t.classList.contains("checked")||t.classList.contains("enabled")}function Yt(){let e=["my-recommended-videos",".other-videos",".recommendations","aside"];for(let t of e){let n=document.querySelector(t);if(!n)continue;let r=Array.from(n.querySelectorAll('a[href*="/w/"]:not([href*="/w/p/"])'));for(let i of r)try{let o=new URL(i.href,window.location.origin);if(!o.pathname.includes("/w/")||o.pathname===window.location.pathname)continue;return i}catch(o){}}return null}async function er(e){if(!(e.nextTriggered||!e.api))try{if(!!await Promise.resolve(e.api.getPaused()))return;let n=Number(await Promise.resolve(e.api.getCurrentTime()))||0,r=Number(await Promise.resolve(e.api.getDuration()))||0;if(!r||r<=0)return;let i=r-n;if(n<=10||i>2)return;e.nextTriggered=!0;try{e.api.pause&&await Promise.resolve(e.api.pause())}catch(u){}try{await Promise.resolve(e.api.setCurrentTime(0))}catch(u){}try{e.api.pause&&await Promise.resolve(e.api.pause())}catch(u){}if(I(e.oldPlayer,!0),await nr(e,Math.floor(r)),e.canSaveProgress=!1,Jt()){let u=Xt();u&&it(u);return}if(!Qt())return;let o=Yt();o&&it(o)}catch(t){console.warn("\u26A0\uFE0F [Premium Rumble] auto-next failed:",t)}}function tr(e){e.autoNextTimer&&window.clearInterval(e.autoNextTimer),e.autoNextTimer=window.setInterval(()=>{er(e).catch(()=>{})},500)}function rr(e){e.peerTubeStopTimer&&window.clearInterval(e.peerTubeStopTimer);let t=0;e.peerTubeStopTimer=window.setInterval(()=>{if(t++,!m||m!==e||t>45){e.peerTubeStopTimer&&window.clearInterval(e.peerTubeStopTimer),e.peerTubeStopTimer=void 0;return}I(e.oldPlayer,!0)},700)}async function nr(e,t){if(!e.canSaveProgress)return;let n=Math.max(0,Math.floor(Number(t)||0));if(!(!n||n<=0))try{await Y.saveRumbleProgress({videoUuid:e.videoUuid,rumbleVideoId:e.rumbleVideoId,positionSeconds:0,durationSeconds:n,paused:!0,completed:!1}),e.lastSavedPosition=0}catch(r){console.warn("\u26A0\uFE0F [Premium Rumble] reset progress to start failed:",r)}}function ir(e){window.Rumble||function(t,n,r,i,o,u){t._Rumble=i,t[i]||(t[i]=function(){var s;(t[i]._=t[i]._||[]).push(arguments),t[i]._.length===1&&(o=n.createElement(r),u=n.getElementsByTagName(r)[0],o.async=!0,o.src="https://rumble.com/embedJS/u"+e+(arguments[1].video?"."+arguments[1].video:"")+"/?url="+encodeURIComponent(location.href)+"&args="+encodeURIComponent(JSON.stringify([].slice.apply(arguments))),(s=u.parentNode)==null||s.insertBefore(o,u))})}(window,document,"script","Rumble")}function ot(){et();let e=document.createElement("div");return e.className="premium-rumble-wrapper",e}async function Ue(e){if(!e.api)return null;try{let t=Math.floor(Number(await Promise.resolve(e.api.getCurrentTime()))||0),n=Math.round(Number(await Promise.resolve(e.api.getDuration()))||0),r=!!await Promise.resolve(e.api.getPaused());return!n||n<=0||t<0?null:{positionSeconds:t,durationSeconds:n,paused:r}}catch(t){return console.warn("\u26A0\uFE0F [Premium Rumble] \u0E2D\u0E48\u0E32\u0E19\u0E40\u0E27\u0E25\u0E32 Rumble \u0E44\u0E21\u0E48\u0E2A\u0E33\u0E40\u0E23\u0E47\u0E08:",t),null}}async function R(e=!1){let t=m;if(!(t!=null&&t.api))return;let n=await Ue(t);if(!n||n.positionSeconds<=2&&t.lastSavedPosition>30||t.nextTriggered&&n.positionSeconds<=5)return;let r=Math.abs(n.positionSeconds-t.lastSavedPosition);if(!(!e&&r<10&&!n.paused)){if(t.canSaveProgress){try{let i=await Y.saveRumbleProgress({videoUuid:t.videoUuid,rumbleVideoId:t.rumbleVideoId,positionSeconds:n.positionSeconds,durationSeconds:n.durationSeconds,paused:n.paused});i&&i.success!==!0&&(i.error||i.status===401||i.status===403)?(t.canSaveProgress=!1,console.warn("\u26A0\uFE0F [Premium Rumble] \u0E1B\u0E34\u0E14\u0E01\u0E32\u0E23\u0E1A\u0E31\u0E19\u0E17\u0E36\u0E01 progress \u0E0A\u0E31\u0E48\u0E27\u0E04\u0E23\u0E32\u0E27 \u0E40\u0E1E\u0E23\u0E32\u0E30 backend \u0E44\u0E21\u0E48\u0E2D\u0E19\u0E38\u0E0D\u0E32\u0E15:",i)):(t.lastSavedPosition=n.positionSeconds,Je(t))}catch(i){t.canSaveProgress=!1,console.warn("\u26A0\uFE0F [Premium Rumble] \u0E1A\u0E31\u0E19\u0E17\u0E36\u0E01 progress \u0E44\u0E21\u0E48\u0E2A\u0E33\u0E40\u0E23\u0E47\u0E08 \u0E1B\u0E34\u0E14\u0E01\u0E32\u0E23\u0E22\u0E34\u0E07\u0E0B\u0E49\u0E33\u0E0A\u0E31\u0E48\u0E27\u0E04\u0E23\u0E32\u0E27:",i)}return}a.isLoggedIn()||Ke(t,n.positionSeconds,n.durationSeconds)}}async function or(e){if(!e.api)return;let t=await Ue(e);if(!(!t||t.durationSeconds-t.positionSeconds<=2)){if(e.canSaveProgress){try{let r=await Y.saveRumbleProgress({videoUuid:e.videoUuid,rumbleVideoId:e.rumbleVideoId,positionSeconds:t.positionSeconds,durationSeconds:t.durationSeconds,paused:!0,completed:!1});r&&r.success!==!0&&(r.error||r.status===401||r.status===403)?e.canSaveProgress=!1:(e.lastSavedPosition=t.positionSeconds,Je(e))}catch(r){e.canSaveProgress=!1,console.warn("\u26A0\uFE0F [Premium Rumble] \u0E1A\u0E31\u0E19\u0E17\u0E36\u0E01 progress \u0E01\u0E48\u0E2D\u0E19\u0E1B\u0E34\u0E14\u0E1E\u0E37\u0E49\u0E19\u0E2B\u0E25\u0E31\u0E07\u0E44\u0E21\u0E48\u0E2A\u0E33\u0E40\u0E23\u0E47\u0E08:",r)}return}a.isLoggedIn()||Ke(e,t.positionSeconds,t.durationSeconds)}}async function sr(e){let t=await Ue(e);if(!(!t||!t.durationSeconds)){nt(t.durationSeconds);try{await Y.saveRumbleDuration({videoUuid:e.videoUuid,rumbleVideoId:e.rumbleVideoId,durationSeconds:t.durationSeconds})}catch(n){}}}async function ar(e,t,n){let r=Math.max(0,Math.floor(Number(t)||0));for(let i=0;i<12;i++){try{let o=Number(await Promise.resolve(e.getDuration()))||0;r>0&&await Promise.resolve(e.setCurrentTime(r));let u=Number(await Promise.resolve(e.getCurrentTime()))||0;if(r<=0||Math.abs(u-r)<=3||o>0&&i>=3){n&&e.play&&setTimeout(()=>{var p;return Promise.resolve((p=e.play)==null?void 0:p.call(e)).catch(()=>{})},250);return}}catch(o){}await new Promise(o=>setTimeout(o,450))}n&&e.play&&Promise.resolve(e.play()).catch(()=>{})}function lr(e){e.timer&&window.clearInterval(e.timer),e.timer=window.setInterval(()=>{R(!1)},2e4),tr(e)}function st(e,t){var r,i,o;try{(r=t==null?void 0:t.pause)==null||r.call(t)}catch(u){}try{(i=t==null?void 0:t.mute)==null||i.call(t)}catch(u){}try{(o=t==null?void 0:t.setVolume)==null||o.call(t,0)}catch(u){}let n=[];e&&n.push(e),document.querySelectorAll(".premium-rumble-wrapper").forEach(u=>{n.includes(u)||n.push(u)}),n.forEach(u=>{u.querySelectorAll("video, audio").forEach(s=>{let p=s;try{p.pause()}catch(d){}try{p.removeAttribute("src")}catch(d){}try{p.load()}catch(d){}}),u.querySelectorAll("iframe, object, embed").forEach(s=>{let p=s;try{p.src="about:blank"}catch(d){}try{p.setAttribute("src","about:blank")}catch(d){}try{p.setAttribute("srcdoc","<!doctype html><html><body></body></html>")}catch(d){}try{p.remove()}catch(d){}});try{u.innerHTML=""}catch(s){}})}function ue(){W="",te="",re=0}let he=!1,q=null;function ur(e){[0,120,350,900,1800].forEach(t=>{window.setTimeout(()=>{var n,r,i;try{(n=e==null?void 0:e.pause)==null||n.call(e)}catch(o){}try{(r=e==null?void 0:e.mute)==null||r.call(e)}catch(o){}try{(i=e==null?void 0:e.setVolume)==null||i.call(e,0)}catch(o){}},t)})}function He(){I(void 0,!0)}function at(e){if(!M()||m!=null&&m.api)return;q&&(window.clearTimeout(q),q=null);let t=_;ue(),ae(),He(),q=window.setTimeout(()=>{t===_&&M()&&(m!=null&&m.api||(ue(),j(50,t)))},80),window.setTimeout(()=>{t===_&&M()&&(m!=null&&m.api||(ue(),j(50,t)))},1300),window.setTimeout(()=>{m!=null&&m.api||A(),q&&(window.clearTimeout(q),q=null)},4200)}function cr(){let e=m;if(e!=null&&e.isMember)return;let t=navigator.mediaSession;if(t!=null&&t.setActionHandler){try{t.setActionHandler("play",()=>{var r,i;let n=m;if(!(n!=null&&n.isMember)){if(Le()&&M()){try{(i=(r=n==null?void 0:n.api)==null?void 0:r.play)==null||i.call(r)}catch(o){}return}Ae()&&(n!=null&&n.api&&(!M()||document.hidden)?ye().catch(()=>{}):he&&M()&&Le()&&(He(),at("media-session-play")))}})}catch(n){}try{t.setActionHandler("pause",()=>{var r,i;let n=m;if(!(n!=null&&n.isMember)){try{(i=(r=n==null?void 0:n.api)==null?void 0:r.pause)==null||i.call(r)}catch(o){}R(!0).catch(()=>{})}})}catch(n){}try{t.setActionHandler("seekto",n=>{var o,u;let r=m;if(!(r!=null&&r.api)||r.isMember)return;if(Ae()&&(!M()||document.hidden)){try{(u=(o=r.api).pause)==null||u.call(o)}catch(s){}return}let i=Number(n==null?void 0:n.seekTime);Number.isFinite(i)&&Promise.resolve(r.api.setCurrentTime(i)).catch(()=>{})})}catch(n){}}}async function G(e=!0){A(),le(!0),m&&(e&&!m.nextTriggered&&await R(!0),m.timer&&window.clearInterval(m.timer),m.autoNextTimer&&window.clearInterval(m.autoNextTimer),m.peerTubeStopTimer&&window.clearInterval(m.peerTubeStopTimer),st(m.wrapper,m.api),m.wrapper&&m.wrapper.remove(),rt(m.hiddenPeerTubeChildren),jt(),m.oldPlayer&&(m.oldPlayer.style.display=""),Nt(m.oldPlayer),m=null,ue())}async function mr(e=_){let t=++Ee,n=We(),r=window.location.pathname,i=()=>!oe(e,n,t);if(!r.startsWith("/w/")){A(),await G();return}let o=await Ct();if(i())return;if(!o){Me()&&ae(),r.startsWith("/w/")&&re<12&&(re++,j(500,e));return}if(re=0,i())return;let u="".concat(window.location.href,"::").concat(o);if(W===u||te===u)return;te=u,Dt(o);let s;try{s=await Y.getRumblePlaybackInfo(o)}catch(g){console.warn("\u26A0\uFE0F [Premium Rumble] \u0E42\u0E2B\u0E25\u0E14 playback-info \u0E44\u0E21\u0E48\u0E2A\u0E33\u0E40\u0E23\u0E47\u0E08:",g);return}if(i()||!(s!=null&&s.success))return;if(s.mode==="peertube"){sessionStorage.removeItem(se(o)),le(!0),A(),await G(),W=u;return}if(s.mode==="replacement"||s.mode==="locked"){sessionStorage.removeItem(se(o)),le(!0),A(),await G(),W=u;return}if(s.mode!=="rumble"||!s.rumbleVideoId){le(!0);return}sessionStorage.setItem(se(o),"true");let p=xe();if(!p){W="",te="";return}if(await G(!1),i())return;le(!1),W=u,ae(),I(p,!0);let d=ot(),y="premium_rumble_".concat(s.rumbleVideoId,"_").concat(Date.now());d.innerHTML='\n <div class="premium-rumble-loading-placeholder">\u0E01\u0E33\u0E25\u0E31\u0E07\u0E42\u0E2B\u0E25\u0E14\u0E40\u0E04\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E40\u0E25\u0E48\u0E19</div>\n <div id="'.concat(y,'" style="width:100%;height:100%;max-width:100%;display:none;"></div>\n '),p.insertBefore(d,p.firstChild);let v=tt(p,d);m={videoUuid:s.videoUuid||o,rumbleVideoId:s.rumbleVideoId,isMember:s.isMember===!0,canSaveProgress:a.isLoggedIn(),oldPlayer:p,hiddenPeerTubeChildren:v,wrapper:d,lastSavedPosition:(()=>{let g=new URLSearchParams(window.location.search),h=Number(g.get("rumbleStart")||g.get("startSeconds")||NaN);return Number.isFinite(h)&&h>0?Math.floor(h):Number(s.startSeconds||0)})(),nextTriggered:!1},m&&rr(m),nt(Number(s.durationSeconds||0));let U=s.pubId||"4pc838";ir(U),!(i()||!m||m.wrapper!==d)&&window.Rumble("play",{video:s.rumbleVideoId,div:y,autoplay:!1,api:async function(g){if(i()||!m||m.wrapper!==d||m.rumbleVideoId!==s.rumbleVideoId)return;let h=m;h.api=g,h.isMember||cr(),he=!1,I(h.oldPlayer,!0),Gt(d,h);let P=new URLSearchParams(window.location.search),V=Number(P.get("rumbleStart")||P.get("startSeconds")||NaN),ve=P.get("rumbleAutoplay")==="1";a.isLoggedIn()&&Ze([s.videoUuid||o,o,s.rumbleVideoId]);let K=a.isLoggedIn()?null:je(s.videoUuid||o)||je(o),we=Math.floor(Number.isFinite(V)&&V>0?V:Number(s.startSeconds||(K==null?void 0:K.positionSeconds)||0));setTimeout(()=>{!oe(e,n,t)||m!==h||ar(g,we,ve).catch(L=>{console.warn("\u26A0\uFE0F [Premium Rumble] seek/resume \u0E44\u0E21\u0E48\u0E2A\u0E33\u0E40\u0E23\u0E47\u0E08:",L)})},400);try{g.setVolume&&await Promise.resolve(g.setVolume(1))}catch(L){}try{g.unmute&&await Promise.resolve(g.unmute())}catch(L){}let ce=d.querySelector(".premium-rumble-loading-placeholder"),Z=d.querySelector("#".concat(y));ce&&ce.remove(),Z&&(Z.style.display="block"),d.dataset.rumbleLoading="false",A(),!(i()||m!==h)&&(Ie(d),setTimeout(()=>{!oe(e,n,t)||m!==h||(Ie(d),I(h.oldPlayer,!0))},800),setTimeout(()=>{!oe(e,n,t)||m!==h||(Ie(d),I(h.oldPlayer,!0))},2e3),lr(h),setTimeout(()=>{!oe(e,n,t)||m!==h||(sr(h),R(!0))},2500))}})}function j(e=250,t=_){t===_&&(clearTimeout(ee),ee=setTimeout(()=>{t===_&&mr(t).catch(n=>{console.warn("\u26A0\uFE0F [Premium Rumble] mount error:",n)})},e))}let ke=!1;function ge(e){return!(!(e!=null&&e.api)||e.isMember||!Ae()||M()&&Le())}async function ye(){var n,r,i;let e=m;if(!ge(e)||!(e!=null&&e.api)||ke)return;ke=!0,he=!0;let t=e.api;try{await or(e);try{await Promise.resolve((n=t.pause)==null?void 0:n.call(t))}catch(o){}try{await Promise.resolve((r=t.mute)==null?void 0:r.call(t))}catch(o){}try{await Promise.resolve((i=t.setVolume)==null?void 0:i.call(t,0))}catch(o){}ur(t),st(e.wrapper,t),await G(!1),ue(),He()}finally{window.setTimeout(()=>{ke=!1},900)}}function $e(e){he&&(document.hidden||window.location.pathname.startsWith("/w/")&&at(e))}document.addEventListener("visibilitychange",()=>{let e=m;if(document.hidden){if(e!=null&&e.api&&e.isMember){R(!0).catch(()=>{});return}if(ge(e)){ye().catch(()=>{});return}e!=null&&e.api&&R(!0);return}if(m!=null&&m.api){R(!0);return}$e("visibilitychange-visible")}),window.addEventListener("pageshow",()=>{$e("pageshow")}),window.addEventListener("focus",()=>{$e("focus")}),window.addEventListener("pagehide",()=>{let e=m;if(e!=null&&e.api&&e.isMember){R(!0).catch(()=>{});return}if(ge(e)){ye().catch(()=>{});return}e!=null&&e.api&&R(!0)});try{document.addEventListener("freeze",()=>{let e=m;if(e!=null&&e.api&&e.isMember){R(!0).catch(()=>{});return}if(ge(e)){ye().catch(()=>{});return}})}catch(e){}let Ce=window.location.href;function be(e=!1){if(!e&&window.location.href===Ce)return;let t=It();Ce=window.location.href,te="",re=0,pt(),G(!1).finally(()=>{t===_&&(Me()&&ae(),j(80,t))})}let dr=history.pushState;history.pushState=function(...e){let t=dr.apply(this,e);return setTimeout(be,50),t};let pr=history.replaceState;history.replaceState=function(...e){let t=pr.apply(this,e);return setTimeout(be,50),t},window.addEventListener("popstate",()=>setTimeout(be,50)),new MutationObserver(e=>{e.length>0&&e.every(n=>{var i;let r=n.target;return!!r&&!!((i=r.closest)!=null&&i.call(r,".premium-rumble-wrapper"))})||(window.location.href!==Ce&&be(!1),clearTimeout(window.badgeTimeout),window.badgeTimeout=setTimeout(()=>{z(),Q()},450))}).observe(document.body,{childList:!0,subtree:!0});let Ne=0,fr=setInterval(()=>{z(),Q(),Ne<6&&j(700),Ne++,Ne>=10&&clearInterval(fr)},700);Me()&&ae(),j(150),setTimeout(Q,500)}export{Br as register};
|
|
1
|
+
var yr=Object.defineProperty,gr=Object.defineProperties;var br=Object.getOwnPropertyDescriptors;var ut=Object.getOwnPropertySymbols;var vr=Object.prototype.hasOwnProperty,wr=Object.prototype.propertyIsEnumerable;var ct=(a,u,c)=>u in a?yr(a,u,{enumerable:!0,configurable:!0,writable:!0,value:c}):a[u]=c,H=(a,u)=>{for(var c in u||(u={}))vr.call(u,c)&&ct(a,c,u[c]);if(ut)for(var c of ut(u))wr.call(u,c)&&ct(a,c,u[c]);return a},J=(a,u)=>gr(a,br(u));var Pe=class{constructor(u){this.rootEl=u}renderRow(u,c){return this.div([this.div(u,c?"col-12 col-lg-4 col-xl-3":"col-12"),...c?[this.div(c,"col-12 col-lg-8 col-xl-9")]:[]],"row")}div(u,c){let f=document.createElement("div");return c&&(f.className=c),u.forEach(b=>f.appendChild(b)),f}a(u,c){let f=document.createElement("a");f.innerHTML=u;for(let b in c)f.setAttribute(b,c[b]);return f}h2(u){let c=document.createElement("h2");return c.innerText=u,c}h3(u){let c=document.createElement("h2");return c.innerText=u,c}p(u,c){let f=document.createElement("p");return f.innerHTML=u,c&&(f.className=c),f}img(u,c){let f=document.createElement("img");return f.src=u,f.className=c,f}ul(u,c){let f=document.createElement("ul");return c&&(f.className=c),u.forEach(b=>{let T=document.createElement("li");T.innerText=b,f.appendChild(T)}),f}};var mt="enable-plugin";var qe=(a,u)=>{"gtag"in window&&window.gtag("event",a,H({event_category:"premium-users"},u))},X=(a,u)=>new Intl.NumberFormat(navigator.language,{style:"currency",currency:u,minimumFractionDigits:0}).format(a),Ve=a=>{var u;return!((u=a.coupon)!=null&&u.valid)||!a.unit_amount?null:a.coupon.amount_off?(a.unit_amount-a.coupon.amount_off)/100:a.coupon.percent_off?Math.round((a.unit_amount-a.unit_amount*(a.coupon.percent_off/100))/100):null};var Sr=a=>{var u,c,f;return(u=a.coupon)!=null&&u.percent_off?"".concat(a.coupon.percent_off," %"):X((f=(c=a.coupon)==null?void 0:c.amount_off)!=null?f:0,a.currency)},Pr=async(a,u)=>{var c,f,b;return((c=a.recurring)==null?void 0:c.interval)==="month"?(await u("discount the first MONTHS_COUNT months.")).replace("MONTHS_COUNT",String((f=a.coupon)==null?void 0:f.duration_in_months)):((b=a.recurring)==null?void 0:b.interval)==="year"?u("discount for a whole year."):""},Tr=a=>{var c,f,b,T,k,E,$,x,w,S;let u=0;return((c=a.recurring)==null?void 0:c.interval)==="month"?(a.unit_amount&&((f=a.coupon)!=null&&f.amount_off)&&((b=a.coupon)!=null&&b.duration_in_months)&&(u=a.coupon.amount_off*((T=a.coupon)==null?void 0:T.duration_in_months)/100),a.unit_amount&&((k=a.coupon)!=null&&k.percent_off)&&((E=a.coupon)!=null&&E.duration_in_months)&&(u=a.unit_amount*(a.coupon.percent_off/100)*(($=a.coupon)==null?void 0:$.duration_in_months)/100)):((x=a.recurring)==null?void 0:x.interval)==="year"&&(a.unit_amount&&((w=a.coupon)!=null&&w.amount_off)&&(u=a.coupon.amount_off*12/100),a.unit_amount&&((S=a.coupon)!=null&&S.percent_off)&&(u=a.unit_amount*(a.coupon.percent_off/100)/100)),u},Er=async(a,u)=>{var b;let c=Ve(a),f;return c!==null?f='\n <span class="original-price">\n '.concat(X(a.unit_amount/100,a.currency),"</span>\n ").concat(X(c,a.currency)):f=X(a.unit_amount/100,a.currency),(b=a.recurring)!=null&&b.interval?f+=" / "+await u(a.recurring.interval):f+=" / "+await u("1 \u0E40\u0E14\u0E37\u0E2D\u0E19"),f},dt=async({buttonOnClick:a,price:u,uiBuilder:c,translate:f})=>{var C,N;let b=Ve(u),T=await Pr(u,f),k=Tr(u),E=Sr(u),$=await Er(u,f),x=!!a,w="";(C=u.recurring)!=null&&C.interval?w=await f("Pay "+(u.recurring.interval==="day"?"daily":u.recurring.interval+"ly")):w=await f("\u0E0A\u0E33\u0E23\u0E30 1 \u0E40\u0E14\u0E37\u0E2D\u0E19 (QR \u0E1E\u0E23\u0E49\u0E2D\u0E21\u0E40\u0E1E\u0E22\u0E4C)");let S=c.a($,{class:"primary-button peertube-button-link mb-4","data-testid":"premium_users-button-pay_"+(((N=u.recurring)==null?void 0:N.interval)||"onetime")});return x&&S.addEventListener("click",a),c.div([c.p(w,"fw-bold"),...b===null?[]:[c.ul([E+" "+T,(await f("You'll save AMOUNT_TO_SAVE.")).replace("AMOUNT_TO_SAVE",String(X(Math.round(k),u.currency)))],"text-start")],...x?[S]:[c.p($,"mt-auto")]],"d-flex flex-grow-1 flex-column")};var pt={name:"peertube-plugin-premium-members",description:"peertube-plugin-premium-members",version:"3.2.5",author:"Vee",bugs:"",clientScripts:[{script:"dist/client/my-account/index.js",scopes:["my-account"]},{script:"dist/client/common.js",scopes:["common"]},{script:"dist/client/video-edit.js",scopes:["video-edit"]},{script:"dist/client/admin-manage.js",scopes:["common"]}],css:["dist/assets/style.css"],engine:{peertube:">=6.0.0"},homepage:"",keywords:["peertube","plugin"],library:"./dist/server/server/main.js",scripts:{clean:"rm -rf dist/*",prepare:"npm run build","build:client":"node ./scripts/build.cjs","build:server":"tsc --build server/tsconfig.json","build:styles":"npx --yes sass --no-source-map assets:dist/assets",build:"npm-run-all -s clean check:client:tsc -p build:server build:client build:styles","check:client:tsc":"npx tsc --p client/tsconfig.json --noEmit","lint:script":"npx eslint .",test:"npm-run-all -p lint:script test:unit","test:unit":"TS_NODE_PROJECT=server/tsconfig.test.json mocha server/*.spec.ts","test:e2e":"cd demo && npm ci && npm test"},staticDirs:{images:"public/images"},translations:{"sv-SE":"./languages/sv.json","th-TH":"./languages/th.json",th:"./languages/th.json"},devDependencies:{"@tsconfig/node16":"^16.0.0","@types/mocha":"^10.0.8","@typescript-eslint/eslint-plugin":"^8.9.0","@typescript-eslint/parser":"^8.9.0",esbuild:"^0.24.0",eslint:"^9.12.0","eslint-config-love":"^87.0.0",globals:"^15.3.0",mocha:"^10.7.3","npm-run-all":"^4.1.5",tsx:"^4.19.1",typescript:"^5.4.3"},dependencies:{"@peertube/peertube-types":"^6.3.0","@types/gtag.js":"^0.0.20","@types/sequelize":"^4.28.20",express:"^4.19.2","short-uuid":"^5.2.0",stripe:"^18.1.0"}};var F=class{constructor(u){this.pluginBasePath="/plugins/".concat(pt.name.replace("peertube-plugin-",""),"/router");this.getAuthHeader=u||(()=>{})}async get(u){return fetch(u,{method:"GET",headers:this.getAuthHeader(),credentials:"include"}).then(async c=>c.json())}async patch(u,c){await fetch(u,{method:"PATCH",headers:J(H({},this.getAuthHeader()),{"Content-Type":"application/json"}),credentials:"include",body:JSON.stringify(c)})}async post(u,c){return fetch(u,{method:"POST",headers:J(H({},this.getAuthHeader()),{"Content-Type":"application/json"}),credentials:"include",body:JSON.stringify(c)}).then(async f=>f.json())}async delete(u){return fetch(u,{method:"DELETE",headers:this.getAuthHeader(),credentials:"include"}).then(async c=>c.json())}async getMe(){return this.get("/api/v1/users/me")}async getPrices(){return this.get(this.pluginBasePath+"/price")}async getSubscription(){return this.get(this.pluginBasePath+"/subscription")}async updateSubscription(u){return this.patch(this.pluginBasePath+"/subscription",u)}async createCheckout({allowPromotionCodes:u,couponId:c,priceId:f,paymentMode:b,paymentMethod:T}){return this.post(this.pluginBasePath+"/checkout",{allowPromotionCodes:u,couponId:c,priceId:f,paymentMode:b,paymentMethod:T})}async getRumblePlaybackInfo(u){return this.get(this.pluginBasePath+"/rumble/playback-info/".concat(encodeURIComponent(u)))}async saveRumbleProgress(u){return this.post(this.pluginBasePath+"/rumble/progress",u)}async saveRumbleDuration(u){return this.post(this.pluginBasePath+"/rumble/duration",u)}async getRumbleProgress(u){return this.get(this.pluginBasePath+"/rumble/progress/".concat(encodeURIComponent(u)))}async getRumbleHistory(u=50,c=0){return this.get(this.pluginBasePath+"/rumble/history?limit=".concat(u,"&offset=").concat(c))}async deleteRumbleHistoryItem(u){return this.delete(this.pluginBasePath+"/rumble/history/".concat(encodeURIComponent(u)))}async clearRumbleHistory(){return this.delete(this.pluginBasePath+"/rumble/history")}};async function Or({peertubeHelpers:a,registerClientRoute:u,registerHook:c}){let b=!!(await a.getSettings())[mt];c({target:"filter:left-menu.links.create.result",handler:async e=>{if(!b)return e;let t=!1;if(a.isLoggedIn())try{let i=a.getAuthHeader;t=(await new F(i).getMe()).isPremium===!0}catch(i){console.error("\u274C [Premium Plugin] Failed to fetch premium status for menu:",i)}let n=a.isLoggedIn()?"/my-account/p/premium":"/p/premium",r=await a.translate(t?"Premium account":"Become premium");return e.map(i=>{if(i.key==="quick-access")return J(H({},i),{links:[...i.links,{path:n,icon:t?"premium":void 0,label:r,shortLabel:r,isPrimaryButton:!t}]});if(a.isLoggedIn()&&i.key==="my-library"){let o=i.links.filter(s=>{let p=String(s.path||s.routerLink||s.url||s.href||""),d=String(s.label||s.shortLabel||"").trim();return!(p.includes("/my-library/history")||d==="\u0E1B\u0E23\u0E30\u0E27\u0E31\u0E15\u0E34"||d.toLowerCase()==="history")}),l=o.some(s=>String(s.path||"")==="/p/rumble-history");return J(H({},i),{links:[...o,...l?[]:[{path:"/p/rumble-history",label:"\u0E1B\u0E23\u0E30\u0E27\u0E31\u0E15\u0E34\u0E01\u0E32\u0E23\u0E40\u0E02\u0E49\u0E32\u0E0A\u0E21",shortLabel:"\u0E1B\u0E23\u0E30\u0E27\u0E31\u0E15\u0E34",icon:"history"}]]})}return i})}}),c({target:"filter:internal.common.svg-icons.get-content.result",handler:(e,t)=>t.name==="premium"?'\n\n <svg\n\n fill="gray"\n\n version="1.1"\n\n xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"\n\n viewBox="0 0 45.402 45.402"\n\n xml:space="preserve">\n\n <g>\n\n <path d="M41.267,18.557H26.832V4.134C26.832,1.851,24.99,0,22.707,0c-2.283,0-4.124,1.851-4.124,4.135v14.432H4.141\n\n c-2.283,0-4.139,1.851-4.138,4.135c-0.001,1.141,0.46,2.187,1.207,2.934c0.748,0.749,1.78,1.222,2.92,1.222h14.453V41.27\n\n c0,1.142,0.453,2.176,1.201,2.922c0.748,0.748,1.777,1.211,2.919,1.211c2.282,0,4.129-1.851,4.129-4.133V26.857h14.435\n\n c2.283,0,4.134-1.867,4.133-4.15C45.399,20.425,43.548,18.557,41.267,18.557z"/>\n\n </g>\n\n </svg>':e});let T=e=>()=>{let t=new URLSearchParams(window.location.search).get("redirect");t&&c({target:"action:auth-user.logged-in",handler:()=>{qe("tutorial_complete",{event_label:e}),window.location.href=t}})};if(c({target:"action:login.init",handler:T("login")}),c({target:"action:signup.register.init",handler:T("signup")}),u({route:"/premium",title:await a.translate("Become premium"),onMount:async({rootEl:e})=>{if(a.isLoggedIn()){window.location.href="/my-account/p/premium";return}qe("tutorial_begin");let n=await new F().getPrices(),r=new Pe(e),i=await Promise.all(n.map(l=>dt({price:l,uiBuilder:r,translate:a.translate}))),o=r.div([r.img("/client/assets/images/icons/icon-192x192.png","instance-logo"),r.h2(await a.translate("Become a premium user")),r.p(await a.translate("Get access to premium videos and helps us to continue our work.")),r.div(i.map(l=>r.div([l],"col-12 col-sm-6 d-flex")),"prices-alternatives row my-5 mx-auto"),r.div([r.a(await a.translate("Create an account"),{class:"primary-button peertube-button-link button-md mb-2",href:"/signup?redirect=/my-account/p/premium","data-testid":"premium_users-button-create_account"}),r.p(await a.translate("or"),"mb-0"),r.a(await a.translate("Login"),{class:"secondary-button peertube-button-link mt-2 button-md",href:"/login?redirect=/my-account/p/premium"})],"action-buttons d-flex justify-content-center flex-column mb-4 mx-sm-auto")],"plugin-premium-users become-premium margin-content pt-4 text-center mx-auto px-4 px-md-0");e.appendChild(o)}}),!b)return;function k(e){e=Math.max(0,Math.floor(Number(e)||0));let t=Math.floor(e/3600),n=Math.floor(e%3600/60),r=e%60;return t>0?"".concat(t,":").concat(String(n).padStart(2,"0"),":").concat(String(r).padStart(2,"0")):"".concat(n,":").concat(String(r).padStart(2,"0"))}function E(e){return String(e!=null?e:"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function $(e){var n,r;let t=(e==null?void 0:e.thumbnailPath)||(e==null?void 0:e.previewPath)||(e==null?void 0:e.thumbnailUrl)||(e==null?void 0:e.previewUrl)||((r=(n=e==null?void 0:e.files)==null?void 0:n[0])==null?void 0:r.thumbnailPath)||"";return t?/^https?:\/\//i.test(t)?t:"".concat(window.location.origin).concat(t.startsWith("/")?"":"/").concat(t):""}async function x(e){var r;if(e.innerHTML='<div class="margin-content"><h1>\u0E1B\u0E23\u0E30\u0E27\u0E31\u0E15\u0E34\u0E01\u0E32\u0E23\u0E23\u0E31\u0E1A\u0E0A\u0E21</h1><p>\u0E01\u0E33\u0E25\u0E31\u0E07\u0E42\u0E2B\u0E25\u0E14...</p></div>',!a.isLoggedIn()){e.innerHTML='<div class="margin-content"><h1>\u0E1B\u0E23\u0E30\u0E27\u0E31\u0E15\u0E34\u0E01\u0E32\u0E23\u0E23\u0E31\u0E1A\u0E0A\u0E21</h1><p>\u0E01\u0E23\u0E38\u0E13\u0E32\u0E40\u0E02\u0E49\u0E32\u0E2A\u0E39\u0E48\u0E23\u0E30\u0E1A\u0E1A\u0E01\u0E48\u0E2D\u0E19</p></div>';return}let t=new F(a.getAuthHeader),n=()=>x(e);try{let i=await t.getRumbleHistory(50,0),o=Array.isArray(i==null?void 0:i.data)?i.data:[];if(o.length===0){e.innerHTML='\n <div class="margin-content">\n <h1>\u0E1B\u0E23\u0E30\u0E27\u0E31\u0E15\u0E34\u0E01\u0E32\u0E23\u0E23\u0E31\u0E1A\u0E0A\u0E21</h1>\n <p>\u0E22\u0E31\u0E07\u0E44\u0E21\u0E48\u0E21\u0E35\u0E1B\u0E23\u0E30\u0E27\u0E31\u0E15\u0E34\u0E01\u0E32\u0E23\u0E23\u0E31\u0E1A\u0E0A\u0E21</p>\n </div>\n ';return}let l=await Promise.all(o.map(async s=>{var we,K,Se,me;let p=s.videoUuid,d="/w/".concat(encodeURIComponent(s.videoUuid)),g="",v="";try{let Z=await fetch("/api/v1/videos/".concat(encodeURIComponent(s.videoUuid)),{headers:((we=a.getAuthHeader)==null?void 0:we.call(a))||{},credentials:"include"});if(Z.ok){let L=await Z.json();p=L.name||p,L.shortUUID&&(d="/w/".concat(L.shortUUID)),g=$(L),v=((K=L.channel)==null?void 0:K.displayName)||((Se=L.account)==null?void 0:Se.displayName)||((me=L.account)==null?void 0:me.name)||""}}catch(Z){}let U=Math.max(0,Math.floor(Number(s.lastPositionSeconds||0))),y=Math.max(0,Math.floor(Number(s.durationSeconds||0))),h=Number(s.watchedPercent||0),P="".concat(d).concat(d.includes("?")?"&":"?","rumbleStart=").concat(U,"&rumbleAutoplay=1"),V=String(s.videoUuid||"");return'\n <div class="premium-rumble-history-row" data-video-uuid="'.concat(E(V),'" style="display:flex;gap:14px;align-items:flex-start;padding:14px 0;border-bottom:1px solid var(--greyForegroundColor, #ddd);">\n <a href="').concat(E(P),'" style="display:block;width:180px;max-width:35%;flex:0 0 180px;background:#111;border-radius:4px;overflow:hidden;">\n ').concat(g?'<img src="'.concat(E(g),'" alt="" loading="lazy" style="display:block;width:100%;aspect-ratio:16/9;object-fit:cover;">'):'<div style="width:100%;aspect-ratio:16/9;background:#111;"></div>','\n </a>\n <div style="min-width:0;flex:1;">\n <a href="').concat(E(P),'" style="font-weight:600;font-size:16px;line-height:1.35;display:block;word-break:break-word;">').concat(E(p),"</a>\n ").concat(v?'<div style="font-size:13px;opacity:.75;margin-top:4px;">'.concat(E(v),"</div>"):"",'\n <div style="font-size:13px;opacity:.85;margin-top:5px;">\u0E14\u0E39\u0E16\u0E36\u0E07 ').concat(k(U)," / ").concat(k(y)," (").concat(h,'%)</div>\n <div style="margin-top:10px;display:flex;gap:8px;align-items:center;flex-wrap:wrap;">\n <button class="peertube-button secondary-button button-sm premium-rumble-delete-history" data-video-uuid="').concat(E(V),'" type="button">\u0E25\u0E1A\u0E2D\u0E2D\u0E01\u0E08\u0E32\u0E01\u0E1B\u0E23\u0E30\u0E27\u0E31\u0E15\u0E34</button>\n </div>\n </div>\n </div>\n ')}));e.innerHTML='\n <div class="margin-content">\n <div style="display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:16px;">\n <div>\n <h1 style="margin-bottom:4px;">\u0E1B\u0E23\u0E30\u0E27\u0E31\u0E15\u0E34\u0E01\u0E32\u0E23\u0E23\u0E31\u0E1A\u0E0A\u0E21</h1>\n </div>\n <button class="peertube-button secondary-button premium-rumble-clear-history" type="button">\u0E25\u0E49\u0E32\u0E07\u0E1B\u0E23\u0E30\u0E27\u0E31\u0E15\u0E34\u0E17\u0E31\u0E49\u0E07\u0E2B\u0E21\u0E14</button>\n </div>\n <div>'.concat(l.join(""),"</div>\n </div>\n "),e.querySelectorAll(".premium-rumble-delete-history").forEach(s=>{s.addEventListener("click",async()=>{let p=s.dataset.videoUuid;if(p)try{await t.deleteRumbleHistoryItem(p),await n()}catch(d){console.error("\u274C [Premium Rumble] delete history failed:",d)}})}),(r=e.querySelector(".premium-rumble-clear-history"))==null||r.addEventListener("click",async()=>{if(window.confirm("\u0E25\u0E49\u0E32\u0E07\u0E1B\u0E23\u0E30\u0E27\u0E31\u0E15\u0E34\u0E01\u0E32\u0E23\u0E23\u0E31\u0E1A\u0E0A\u0E21\u0E17\u0E31\u0E49\u0E07\u0E2B\u0E21\u0E14?"))try{await t.clearRumbleHistory(),await n()}catch(s){console.error("\u274C [Premium Rumble] clear history failed:",s)}})}catch(i){console.error("\u274C [Premium Rumble] Failed to load history:",i),e.innerHTML='<div class="margin-content"><h1>\u0E1B\u0E23\u0E30\u0E27\u0E31\u0E15\u0E34\u0E01\u0E32\u0E23\u0E23\u0E31\u0E1A\u0E0A\u0E21</h1><p>\u0E42\u0E2B\u0E25\u0E14\u0E1B\u0E23\u0E30\u0E27\u0E31\u0E15\u0E34\u0E44\u0E21\u0E48\u0E2A\u0E33\u0E40\u0E23\u0E47\u0E08</p></div>'}}u({route:"/rumble-history",title:"\u0E1B\u0E23\u0E30\u0E27\u0E31\u0E15\u0E34\u0E01\u0E32\u0E23\u0E23\u0E31\u0E1A\u0E0A\u0E21",parentRoute:"/",onMount:async({rootEl:e})=>x(e)});let w=new Map,S=[],C=!1,N=window.location.origin;function Q(){if(window.location.pathname.startsWith("/my-library/history")){window.location.href="/p/rumble-history";return}if(!document.getElementById("premium-hide-native-history-tab-style")){let e=document.createElement("style");e.id="premium-hide-native-history-tab-style",e.textContent='\n a[href*="/my-library/history"] {\n display: none !important;\n visibility: hidden !important;\n pointer-events: none !important;\n }\n ',document.head.appendChild(e)}document.querySelectorAll('a[href*="/my-library/history"]').forEach(e=>{let t=e.closest("li")||e.closest(".nav-item")||e.closest(".menu-link")||e.closest("a")||e;t.style.display="none"})}let de=new AbortController;function ft(){de.abort(),de=new AbortController,S=[],w.clear(),C=!1}async function ht(){if(!(C||S.length===0)){for(C=!0;S.length>0;){let e=S[0];if(!e)break;try{let t=await fetch(e.url,{signal:de.signal});if(t.status===429){await new Promise(n=>setTimeout(n,1e3));continue}S.shift(),e.resolve(t),w.delete(e.url)}catch(t){S.shift(),e.resolve(null),w.delete(e.url)}de.signal.aborted||await new Promise(t=>setTimeout(t,100))}C=!1}}function pe(e){if(w.has(e))return w.get(e);let t=new Promise(n=>{S.push({url:e,resolve:n}),ht()});return w.set(e,t),t}function Fe(e){return"premium_cache_checked_videos_".concat(e)}function Be(e){return"premium_cache_checked_shortUUID_".concat(e)}function B(e){return"premium_cache_map_uuid_to_short_".concat(e)}function O(e){return"premium_cache_map_short_to_uuid_".concat(e)}function yt(e){e=Math.max(0,Math.floor(Number(e)||0));let t=Math.floor(e/3600),n=Math.floor(e%3600/60),r=e%60;return t>0?"".concat(t,":").concat(String(n).padStart(2,"0"),":").concat(String(r).padStart(2,"0")):"".concat(n,":").concat(String(r).padStart(2,"0"))}function gt(e){if(!e)return;let t=e.pluginData||{},n=t["use-rumble-player"]==="true"||t["use-rumble-player"]===!0||t["use-rumble-player"]==="1",r=Number(t["rumble-duration-seconds"]||0);if(!n||!r||r<=0)return;[e.uuid,e.shortUUID].filter(Boolean).forEach(o=>{sessionStorage.setItem(ae(o),"true"),sessionStorage.setItem(je(o),String(Math.floor(r)))})}function bt(e){try{let n=new URL(e,window.location.origin).pathname.match(/^\/w\/(?!p\/)([a-zA-Z0-9-]+)/);return(n==null?void 0:n[1])||null}catch(t){let n=e.match(/\/w\/(?!p\/)([a-zA-Z0-9-]+)/);return(n==null?void 0:n[1])||null}}let Te=new Set;function vt(e,t){let n=Math.max(1,Math.floor(Number(t)||1)),r=Math.floor((n-1)/100)*100,i="".concat(e,"_").concat(r);Te.has(i)||sessionStorage.getItem("premium_rumble_playlist_duration_page_".concat(i))!=="true"&&(Te.add(i),setTimeout(async()=>{try{let o=await pe("".concat(N,"/api/v1/video-playlists/").concat(e,"/videos?start=").concat(r,"&count=100"));if(!o||!o.ok)return;let l=await o.json();D(l,"/api/v1/video-playlists/".concat(e,"/videos?start=").concat(r,"&count=100")),sessionStorage.setItem("premium_rumble_playlist_duration_page_".concat(i),"true"),setTimeout(Y,120)}catch(o){console.warn("\u26A0\uFE0F [Premium Rumble] playlist duration metadata fetch failed:",o)}finally{Te.delete(i)}},250))}function wt(e){let t=e.closest('a[href*="/w/"]'),n=e.closest('a[href*="/w/"], .video-thumbnail, .video-miniature, .video-wrapper, .video, my-video-miniature, my-video-playlist-element-miniature'),r=t||(n==null?void 0:n.querySelector('a[href*="/w/"]'));if(!(r!=null&&r.href))return null;let i=bt(r.href);if(i)return i;let o=$t(r.href);if(o){let l=sessionStorage.getItem(Qe(o.playlistUuid,o.position));if(l)return l;vt(o.playlistUuid,o.position)}return null}function Y(){document.querySelectorAll(".duration-overlay").forEach(e=>{let t=e,n=wt(t);if(!n)return;let r=Number(sessionStorage.getItem(je(n))||0);if(!r||r<=0)return;let i=yt(r);t.textContent!==i&&(t.textContent=i),t.setAttribute("aria-label","Video duration is ".concat(i))})}function St(e,t){e!=null&&e.uuid&&(sessionStorage.setItem(Fe(e.uuid),"true"),e.shortUUID&&(sessionStorage.setItem(Be(e.shortUUID),"true"),sessionStorage.setItem(B(e.uuid),e.shortUUID),sessionStorage.setItem(O(e.shortUUID),e.uuid)),t?(sessionStorage.setItem("premium_cache_videos_".concat(e.uuid),"true"),e.shortUUID&&sessionStorage.setItem("premium_cache_shortUUID_".concat(e.shortUUID),"true")):(sessionStorage.removeItem("premium_cache_videos_".concat(e.uuid)),e.shortUUID&&sessionStorage.removeItem("premium_cache_shortUUID_".concat(e.shortUUID))))}function Oe(e){let t=e.match(/\/api\/v1\/videos\/([^/?#]+)/);return t!=null&&t[1]?decodeURIComponent(t[1]):null}function Pt(){let e=[];for(let t=0;t<sessionStorage.length;t++){let n=sessionStorage.key(t);n&&n.startsWith("premium_cache_playlist_")&&e.push(n)}e.forEach(t=>sessionStorage.removeItem(t))}function Tt(e){let t=sessionStorage.getItem(B(e)),n=sessionStorage.getItem(O(e)),r=new Set([e]);t&&r.add(t),n&&r.add(n),r.forEach(i=>{sessionStorage.removeItem("premium_cache_videos_".concat(i)),sessionStorage.removeItem("premium_cache_shortUUID_".concat(i)),sessionStorage.removeItem(Fe(i)),sessionStorage.removeItem(Be(i)),sessionStorage.removeItem(B(i)),sessionStorage.removeItem(O(i))}),Pt()}function Et(e){let t=e.querySelector(".custom-member-badge");t&&t.remove(),e.classList.remove("has-premium-badge"),delete e.dataset.premiumFetchRequested}function We(e){let t=sessionStorage.getItem(B(e)),n=sessionStorage.getItem(O(e)),r=new Set([e]);t&&r.add(t),n&&r.add(n),Tt(e);let i=["my-video-miniature",".video-miniature","ptb-video-miniature","my-video-playlist-element-miniature",".video-playlist-miniature","my-video-cell","my-video-list-element","my-user-video-history-element","tr.p-selectable-row","my-video-playlist-element","my-recommended-videos my-video-miniature"].join(", ");document.querySelectorAll(i).forEach(o=>{let l=o.tagName.toLowerCase()==="a"?o:o.querySelector('a.video-title, a.title, a.video-name, a.pt-router-link, a[href*="/w/"], a[href*="/video-playlists/"]');if(!l)return;let s=l.href||"",p=!1;for(let d of r)if(s.includes("/w/".concat(d))){p=!0;break}!p&&(s.includes("/w/p/")||s.includes("/video-playlists/"))&&(p=!0),p&&Et(o)}),setTimeout(W,50),setTimeout(W,250)}function ze(){let e=[];for(let t=0;t<sessionStorage.length;t++){let n=sessionStorage.key(t);n&&n.startsWith("premium_cache_")&&e.push(n)}e.forEach(t=>sessionStorage.removeItem(t)),w.clear(),document.querySelectorAll(".has-premium-badge, [data-premium-fetch-requested]").forEach(t=>{let n=t.querySelector(".custom-member-badge");n&&n.remove(),t.classList.remove("has-premium-badge"),delete t.dataset.premiumFetchRequested}),setTimeout(W,200)}function D(e,t){let n=!1;e&&e.data&&Array.isArray(e.data)&&e.data.forEach(r=>{let i=r.video||r;if(i&&i.uuid){let o=t.match(/\/api\/v1\/video-playlists\/([a-zA-Z0-9-]+)/);if(o!=null&&o[1]&&r.position){let s=i.shortUUID||i.uuid;sessionStorage.setItem(Qe(o[1],r.position),s),i.shortUUID&&(sessionStorage.setItem(O(i.shortUUID),i.uuid),sessionStorage.setItem(B(i.uuid),i.shortUUID))}gt(i);let l=!1;if(i.pluginData){let s=i.pluginData["is-premium-content"];l=s==="true"||s===!0||s==="1"}if(l||(l=sessionStorage.getItem("premium_cache_videos_".concat(i.uuid))==="true"),St(i,l),l){if(r.position&&t.includes("/video-playlists/")){let s=t.match(/\/api\/v1\/video-playlists\/([a-zA-Z0-9-]+)/);s&&s[1]&&sessionStorage.setItem("premium_cache_playlist_".concat(s[1],"_pos_").concat(r.position),"true")}n=!0}else if(r.position&&t.includes("/video-playlists/")){let s=t.match(/\/api\/v1\/video-playlists\/([a-zA-Z0-9-]+)/);s&&s[1]&&sessionStorage.removeItem("premium_cache_playlist_".concat(s[1],"_pos_").concat(r.position))}}}),setTimeout(Y,150),n&&setTimeout(W,100)}window.processPeerTubePremiumData=D;let _t=XMLHttpRequest.prototype.open,Lt=XMLHttpRequest.prototype.send;XMLHttpRequest.prototype.open=function(e,t){return this._customMethod=e.toUpperCase(),this._customUrl=t.toString(),_t.apply(this,arguments)},XMLHttpRequest.prototype.send=function(){return this.addEventListener("load",function(){let e=this._customUrl,t=this._customMethod;if(e){if(t==="PUT"&&e.includes("/api/v1/videos/")&&!e.includes("/views")&&!e.includes("/rate")&&!e.includes("/passwords")&&this.status>=200&&this.status<300){let r=Oe(e);setTimeout(r?()=>We(r):ze,300)}if(e.includes("/api/v1/"))try{let r=typeof this.response=="string"?JSON.parse(this.response):this.response;r&&r.data&&Array.isArray(r.data)&&D(r,e)}catch(r){}}}),Lt.apply(this,arguments)};let Rt=window.fetch;window.fetch=async function(...e){let t=e[0]instanceof Request?e[0]:null,n=t?t.url:e[0],i=(t?t.method.toUpperCase():e[1]&&e[1].method?e[1].method.toUpperCase():"GET")==="PUT"&&n.includes("/api/v1/videos/")&&!n.includes("/views")&&!n.includes("/rate")&&!n.includes("/passwords"),o=await Rt.apply(this,e);if(i&&o.ok){let s=Oe(n);setTimeout(s?()=>We(s):ze,300)}let l=o.clone();try{n.includes("/api/v1/")&&l.json().then(s=>{s&&s.data&&Array.isArray(s.data)&&D(s,n)}).catch(()=>{})}catch(s){}return o};function xt(e,t="append",n="block"){var s;if(!e)return!1;let r=t==="after"?e.parentNode:e;if(!r||r.querySelector(".custom-member-badge"))return!1;let i=document.createElement("div");i.className="custom-member-badge";let o="display: inline-flex; align-items: center; color: #127a1b; font-size: 12px; font-weight: 500; margin-top: 4px; margin-bottom: 2px; border: none; outline: none; box-shadow: none;";n==="block"?o+=" width: 100%;":n==="inline"&&(o+=" margin-left: 8px; vertical-align: middle;"),i.style.cssText=o,i.innerHTML='<svg style="width: 14px; height: 14px; margin-right: 4px; fill: currentColor;" viewBox="0 0 24 24"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm4.24 16L12 15.45 7.77 18l1.12-4.81-3.73-3.23 4.92-.42L12 5l1.92 4.53 4.92.42-3.73 3.23L16.23 18z"/></svg>\u0E40\u0E09\u0E1E\u0E32\u0E30\u0E2A\u0E21\u0E32\u0E0A\u0E34\u0E01';let l=n==="block"?(()=>{let p=document.createElement("div");return p.style.cssText="display: block; width: 100%; clear: both; border: none; margin: 0; padding: 0;",p.appendChild(i),p})():i;return t==="after"?(s=e.parentNode)==null||s.insertBefore(l,e.nextSibling):e.appendChild(l),!0}async function Mt(e,t){let n="premium_cache_playlist_".concat(e,"_pos_").concat(t);if(sessionStorage.getItem(n)==="true")return!0;let r=100,i=0;try{for(;;){let o=await pe("".concat(N,"/api/v1/video-playlists/").concat(e,"/videos?start=").concat(i,"&count=").concat(r));if(!o||!o.ok)break;let l=await o.json();if(D(l,"/api/v1/video-playlists/".concat(e,"/videos?start=").concat(i,"&count=").concat(r)),sessionStorage.getItem(n)==="true")return!0;if((Array.isArray(l==null?void 0:l.data)?l.data:[]).length<r)break;i+=r}}catch(o){}return!1}function W(){let e=["my-video-miniature",".video-miniature","ptb-video-miniature","my-video-playlist-element-miniature",".video-playlist-miniature","my-video-cell","my-video-list-element","my-user-video-history-element","tr.p-selectable-row","my-video-playlist-element","my-recommended-videos my-video-miniature"].join(", "),t=document.querySelectorAll(e),n=window.location.pathname;t.forEach(r=>{if(r.querySelector(".custom-member-badge")){r.classList.add("has-premium-badge");return}let i=r.tagName.toLowerCase()==="a"?r:r.querySelector('a.video-title, a.title, a.video-name, a.pt-router-link, a[href*="/w/"], a[href*="/video-playlists/"]');if(i)try{let o=new URL(i.href,window.location.origin),l=o.searchParams.get("playlistPosition"),s=null,p=!1,d=r.tagName.toLowerCase().includes("playlist")||r.classList.contains("video-playlist-miniature")||r.classList.contains("my-video-playlist-element");if(o.pathname.includes("/w/p/")||o.pathname.includes("/video-playlists/")||d){let g=o.pathname.match(/(?:\/w\/p\/|\/video-playlists\/)([a-zA-Z0-9-]+)/);g&&(s=g[1]),p=!0}else{let g=o.pathname.match(/\/w\/([a-zA-Z0-9-]+)/);g&&(s=g[1])}if(!s){let g=r.querySelector('img[src*="/thumbnails/"]');if(g){let v=g.src.match(/\/thumbnails\/([a-zA-Z0-9-]+)\.jpg/);v&&v[1]&&(s=v[1])}}if(s){let g=!!(r.closest("my-recommended-videos")||r.closest(".other-videos")),v=sessionStorage.getItem("premium_cache_videos_".concat(s))==="true"||sessionStorage.getItem("premium_cache_shortUUID_".concat(s))==="true";!v&&l&&!g&&(v=sessionStorage.getItem("premium_cache_playlist_".concat(s,"_pos_").concat(l))==="true");let U=()=>{let y=null,h="append",P="block";n.includes("/admin/overview/videos")||n.includes("/my-library/videos")?(y=r.querySelector('a.channel.ellipsis[href*="/c/"]'),y&&(h="after",P="block")):n.includes("/my-library/history/videos")?(y=r.querySelector('a.inherit-parent-style[href*="/c/"]'),y&&(h="after",P="block")):g?(y=r.querySelector(".video-info-owner")||r.querySelector(".video-info"),y&&(h="append",P="block")):n.includes("/w/p/")?(y=r.querySelector(".video-info-owner"),y&&(h="after",P="block")):(y=r.querySelector(".video-info")||r.querySelector(".video-miniature-info")||r.querySelector(".metadata"),y&&(h="append",P="block")),y&&xt(y,h,P)&&r.classList.add("has-premium-badge")};if(!v&&p&&l&&!g){if(r.dataset.premiumFetchRequested)return;r.dataset.premiumFetchRequested="true",Mt(s,l).then(y=>{y?U():r.dataset.premiumFetchRequested="failed"}).catch(()=>{r.dataset.premiumFetchRequested="failed"})}else if(!v&&!p){if(s.includes("playlist-")||sessionStorage.getItem("premium_cache_checked_videos_".concat(s))==="true"||sessionStorage.getItem("premium_cache_checked_shortUUID_".concat(s))==="true"||r.dataset.premiumFetchRequested)return;r.dataset.premiumFetchRequested="true",pe("".concat(N,"/api/v1/videos/").concat(s)).then(h=>!h||!h.ok?(r.dataset.premiumFetchRequested="failed",null):h.json()).then(h=>{h&&(D({data:[h]},"/api/v1/videos/".concat(s)),sessionStorage.getItem("premium_cache_videos_".concat(s))==="true"&&U()),r.dataset.premiumFetchRequested="failed"}).catch(()=>{r.dataset.premiumFetchRequested="failed"})}else v&&U()}}catch(o){}})}let It=a.getAuthHeader,ee=new F(It),m=null,z="",te=null,re="",fe=null,Ee="",ne=0,ie=null,oe=null,he=null,_e=0,_=0;function Ge(){return"".concat(window.location.pathname).concat(window.location.search)}function At(){return _++,_e++,te&&(clearTimeout(te),te=null),_}function se(e,t,n){return!(e!==_||t!==Ge()||typeof n=="number"&&n!==_e)}let Ut="premium_rumble_duration_",Ht="premium_rumble_use_player_",kt="premium_rumble_local_progress_";function ae(e){return"".concat(Ht).concat(e)}function je(e){return"".concat(Ut).concat(e)}function Le(e){return"".concat(kt).concat(e)}function Ke(e){if(!e)return null;try{let t=localStorage.getItem(Le(e));if(!t)return null;let n=JSON.parse(t),r=Math.max(0,Math.floor(Number(n.positionSeconds)||0)),i=Math.max(0,Math.floor(Number(n.durationSeconds)||0)),o=Math.max(0,Math.floor(Number(n.updatedAt)||0));return!i||i<=0||i-r<=2?null:{positionSeconds:r,durationSeconds:i,updatedAt:o}}catch(t){return null}}function Ze(e,t,n){let r=Math.max(0,Math.floor(Number(t)||0)),i=Math.max(0,Math.floor(Number(n)||0));if(!i||i<=0||a.isLoggedIn()||i-r<=2)return;let o=JSON.stringify({positionSeconds:r,durationSeconds:i,updatedAt:Date.now()}),l=new Set;l.add(e.videoUuid);let s=xe();s&&l.add(s),l.forEach(p=>{try{localStorage.setItem(Le(p),o)}catch(d){}}),e.lastSavedPosition=r}function Je(e){let t=new Set;e.forEach(r=>{let i=String(r||"").trim();i&&t.add(i)});let n=xe();n&&t.add(n),t.forEach(r=>{try{localStorage.removeItem(Le(r))}catch(i){}})}function Xe(e){e&&Je([e.videoUuid,e.rumbleVideoId])}function M(){return window.location.pathname.startsWith("/w/")}function Re(){return document.visibilityState==="visible"&&!document.hidden}function Qe(e,t){return"premium_rumble_playlist_".concat(e,"_pos_").concat(t,"_video")}function $t(e){try{let t=new URL(e,window.location.origin),n=t.pathname.match(/^\/w\/p\/([a-zA-Z0-9-]+)/),r=t.searchParams.get("playlistPosition")||"1";return n!=null&&n[1]?{playlistUuid:n[1],position:r}:null}catch(t){let n=e.match(/\/w\/p\/([a-zA-Z0-9-]+).*?[?&]playlistPosition=(\d+)/);return n!=null&&n[1]?{playlistUuid:n[1],position:n[2]||"1"}:null}}function xe(){let e=window.location.pathname.match(/^\/w\/(?!p\/)([a-zA-Z0-9-]+)/);return(e==null?void 0:e[1])||null}async function Ct(e,t){let n=Number(t);if(!e||!Number.isFinite(n)||n<=0)return null;let r="premium_rumble_playlist_video_".concat(e,"_pos_").concat(t),i=sessionStorage.getItem(r);if(i)return i;let o=Math.max(0,Math.floor(n)-1),l=await pe("".concat(N,"/api/v1/video-playlists/").concat(e,"/videos?start=").concat(o,"&count=1"));if(!l||!l.ok)return null;let s=await l.json();D(s,"/api/v1/video-playlists/".concat(e,"/videos?start=").concat(o,"&count=1"));let p=Array.isArray(s==null?void 0:s.data)?s.data[0]:null,d=(p==null?void 0:p.video)||p,g=(d==null?void 0:d.shortUUID)||(d==null?void 0:d.uuid)||null;return g&&(sessionStorage.setItem(r,g),d!=null&&d.uuid&&sessionStorage.setItem(O(g),d.uuid),d!=null&&d.shortUUID&&sessionStorage.setItem(B(d.uuid),d.shortUUID)),g}async function Nt(){if(window.location.pathname.startsWith("/w/p/")){let e=window.location.pathname.match(/^\/w\/p\/([a-zA-Z0-9-]+)/),t=e==null?void 0:e[1],n=new URLSearchParams(window.location.search).get("playlistPosition")||"1";if(!t)return null;let r=await Ct(t,n);if(r)return r;let i=document.querySelector('#videojs-wrapper .vjs-peertube-link[href*="/w/"], .vjs-peertube-link[href*="/w/"]');if(i!=null&&i.href){let o=i.href.match(/\/w\/(?!p\/)([a-zA-Z0-9-]+)/);if(o!=null&&o[1])return o[1]}return null}return xe()}function Me(){let e=["my-video-watch #videojs-wrapper","#videojs-wrapper","my-video-watch .player-wrapper","my-video-watch my-video-watch-player","my-video-watch .video-player","my-video-watch .player-container",".player-wrapper"];for(let n of e){let r=document.querySelector(n);if(r)return r}let t=document.querySelector("my-video-watch .video-js, my-video-watch video");return t?t.closest("#videojs-wrapper, .player-wrapper, my-video-watch-player, .video-player, .player-container, .player")||t.parentElement:null}function Ye(e,t=!1){if(!e.closest(".premium-rumble-wrapper")){try{e.pause()}catch(n){}if(t){try{e.autoplay=!1}catch(n){}try{e.setAttribute("preload","none")}catch(n){}}}}function I(e,t=!0){(e||document).querySelectorAll("video").forEach(r=>{let i=r;i.closest(".premium-rumble-wrapper")||Ye(i,t)})}function Dt(e){(e||Me()||document).querySelectorAll("video").forEach(n=>{let r=n;if(!r.closest(".premium-rumble-wrapper")){try{r.muted=!1}catch(i){}try{r.volume===0&&(r.volume=1)}catch(i){}}})}function Ie(){let e=new URLSearchParams(window.location.search);return e.has("rumbleStart")||e.get("rumbleAutoplay")==="1"||e.has("startSeconds")}function et(){(document.querySelector("my-video-watch, #videojs-wrapper")||document).querySelectorAll("video").forEach(t=>{Ye(t,!1)})}function le(){ie||(et(),ie=window.setInterval(()=>{if(m!=null&&m.api){A();return}if(!window.location.pathname.startsWith("/w/")){A();return}et()},250))}function A(){ie&&(window.clearInterval(ie),ie=null)}function ue(e=!0){oe&&(oe.remove(),oe=null),e&&he&&nt(he),he=null}function qt(e){if(m||oe||sessionStorage.getItem(ae(e))!=="true")return;let t=Me();if(!t)return;I(t,!1);let n=st();n.innerHTML='<div class="premium-rumble-loading-placeholder">\u0E01\u0E33\u0E25\u0E31\u0E07\u0E42\u0E2B\u0E25\u0E14\u0E40\u0E04\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E40\u0E25\u0E48\u0E19</div>',t.insertBefore(n,t.firstChild),oe=n,he=rt(t,n)}function tt(){if(document.getElementById("premium-rumble-style"))return;let e=document.createElement("style");e.id="premium-rumble-style",e.textContent='\n .premium-rumble-wrapper {\n display: block !important;\n width: 100% !important;\n max-width: 100% !important;\n aspect-ratio: 16 / 9 !important;\n background: #000 !important;\n position: relative !important;\n overflow: hidden !important;\n margin: 0 !important;\n padding: 0 !important;\n line-height: 0 !important;\n }\n .premium-rumble-loading-placeholder {\n width: 100% !important;\n height: 100% !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n background: #000 !important;\n color: #aaa !important;\n font-size: 14px !important;\n line-height: 1.4 !important;\n box-sizing: border-box !important;\n }\n .premium-rumble-pending > *:not(.premium-rumble-wrapper) {\n display: none !important;\n }\n .premium-rumble-wrapper > div,\n .premium-rumble-wrapper [id^="vid_"],\n .premium-rumble-wrapper iframe,\n .premium-rumble-wrapper video,\n .premium-rumble-wrapper object,\n .premium-rumble-wrapper embed {\n width: 100% !important;\n height: 100% !important;\n max-width: 100% !important;\n max-height: 100% !important;\n margin: 0 !important;\n border: 0 !important;\n box-sizing: border-box !important;\n }\n /* \u2705 v9.3: \u0E41\u0E01\u0E49\u0E40\u0E09\u0E1E\u0E32\u0E30\u0E1B\u0E38\u0E48\u0E21 play \u0E43\u0E2B\u0E0D\u0E48\u0E01\u0E25\u0E32\u0E07\u0E08\u0E2D\u0E02\u0E2D\u0E07 Rumble \u0E44\u0E21\u0E48\u0E22\u0E38\u0E48\u0E07 control bar */\n .premium-rumble-wrapper .premium-rumble-big-play-fixed {\n position: absolute !important;\n left: 50% !important;\n top: 50% !important;\n transform: translate(-50%, -50%) !important;\n width: 96px !important;\n height: 96px !important;\n max-width: 96px !important;\n max-height: 96px !important;\n min-width: 96px !important;\n min-height: 96px !important;\n z-index: 100 !important;\n align-items: center !important;\n justify-content: center !important;\n padding: 0 !important;\n margin: 0 !important;\n overflow: visible !important;\n box-sizing: border-box !important;\n pointer-events: auto !important;\n }\n .premium-rumble-wrapper .premium-rumble-big-play-inner-fixed {\n width: 96px !important;\n height: 96px !important;\n max-width: 96px !important;\n max-height: 96px !important;\n min-width: 96px !important;\n min-height: 96px !important;\n padding: 24px !important;\n margin: 0 !important;\n border-radius: 50% !important;\n box-sizing: border-box !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n }\n .premium-rumble-wrapper .premium-rumble-big-play-inner-fixed svg,\n .premium-rumble-wrapper svg.premium-rumble-big-play-svg-fixed {\n width: 48px !important;\n height: 48px !important;\n max-width: 48px !important;\n max-height: 48px !important;\n display: block !important;\n }\n .premium-rumble-wrapper .premium-rumble-title-hidden,\n .premium-rumble-wrapper .premium-rumble-logo-hidden,\n .premium-rumble-wrapper .premium-rumble-autoplay-hidden {\n display: none !important;\n visibility: hidden !important;\n pointer-events: none !important;\n }\n .premium-rumble-peertube-hidden {\n display: none !important;\n }\n ',document.head.appendChild(e)}function Vt(e){tt();let t=Array.from(e.children).find(r=>{var o;return(o=r.id)==null?void 0:o.startsWith("premium_rumble_")}),n=e.querySelector('[id^="vid_"]');[e,t,n].forEach(r=>{r&&(r.style.width="100%",r.style.height="100%",r.style.maxWidth="100%",r.style.maxHeight="100%",r.style.boxSizing="border-box")}),e.querySelectorAll("iframe, object, embed").forEach(r=>{let i=r;i.style.width="100%",i.style.height="100%",i.style.maxWidth="100%",i.style.maxHeight="100%",i.style.boxSizing="border-box"})}function Ft(e){let t=e.querySelector('[id^="vid_"]')||e,n=t.querySelector(".bigPlayUI.ctp");if(n){n.classList.add("premium-rumble-big-play-fixed"),window.getComputedStyle(n).display!=="none"&&(n.style.display="flex");let o=n.querySelector(".bigPlayUIInner.ctp");o&&o.classList.add("premium-rumble-big-play-inner-fixed");let l=n.querySelector("svg.RumbleSVG-bplay, svg");l&&l.classList.add("premium-rumble-big-play-svg-fixed")}let r=t.querySelector(".touched_overlay_item");if(r){let i=r.querySelector(".play_pause_wrap");i&&(i.style.width="96px",i.style.height="96px",i.style.maxWidth="96px",i.style.maxHeight="96px",i.style.margin="0 18px",i.style.padding="0"),r.querySelectorAll(".play_svg, .pause_svg").forEach(o=>{let l=o;l.style.width="96px",l.style.height="96px",l.style.maxWidth="96px",l.style.maxHeight="96px",l.style.padding="24px",l.style.boxSizing="border-box"})}}function Bt(e){var n,r,i;let t=Array.from(e.querySelectorAll('a[href*="rumble.com/v"], a[href^="//rumble.com/v"]'));for(let o of t){let l=window.getComputedStyle(o);(o.textContent||"").trim().length>0&&l.position==="absolute"&&(l.top==="0px"||((n=o.getAttribute("style"))==null?void 0:n.includes("top: 0px")))&&(l.left==="0px"||((r=o.getAttribute("style"))==null?void 0:r.includes("left: 0px")))&&(l.right==="0px"||((i=o.getAttribute("style"))==null?void 0:i.includes("right: 0px")))&&o.classList.add("premium-rumble-title-hidden")}}function Ot(e){let t=Array.from(e.querySelectorAll('svg.RumbleElm[viewBox="0 0 140 35"], svg.RumbleElm[viewBox="0 0 35 35"]'));for(let n of t){let r=n.outerHTML||"";if(!(r.includes('fill="#85C742"')||r.includes("fill='#85C742'")))continue;(n.closest('div[style*="float: right"], div[title*="Rumble"], a, div')||n).classList.add("premium-rumble-logo-hidden")}}function Wt(e){return e.querySelector('div[title="Autoplay"], [title="Autoplay"]')}function zt(e){if(!e)return;let t=["setAutoplay","setAutoPlay","setAutoplayNext","setAutoPlayNext"];for(let n of t){let r=e[n];if(typeof r=="function")try{let i=r.call(e,!1);i!=null&&i.catch&&i.catch(()=>{})}catch(i){}}}function Gt(e){if(e.dataset.rumbleAutoplayUserGuardAttached==="true")return;e.dataset.rumbleAutoplayUserGuardAttached="true";let t=()=>{let n=Wt(e);if(!n||n.dataset.premiumAutoplayGuardAttached==="true")return;n.dataset.premiumAutoplayGuardAttached="true";let r=()=>{e.dataset.rumbleAutoplayUserTouched="true"};n.addEventListener("pointerdown",r,{passive:!0}),n.addEventListener("mousedown",r,{passive:!0}),n.addEventListener("touchstart",r,{passive:!0}),n.addEventListener("click",r,{passive:!0})};t(),window.setTimeout(t,500),window.setTimeout(t,1500),window.setTimeout(t,3e3)}function jt(e,t){if(e.dataset.rumbleAutoplayArmed==="true")return;e.dataset.rumbleAutoplayArmed="true",Gt(e);let n=0,r=window.setInterval(()=>{if(n++,!m||m!==t||t.wrapper!==e){window.clearInterval(r);return}if(e.dataset.rumbleAutoplayUserTouched==="true"){window.clearInterval(r);return}zt(t.api),n>=6&&window.clearInterval(r)},700)}function Ae(e){Vt(e),Ft(e),Bt(e),Ot(e)}function rt(e,t){let n=[];return e.classList.add("premium-rumble-pending"),Array.from(e.children).forEach(r=>{let i=r;i!==t&&(i.classList.contains("premium-rumble-wrapper")||(i.classList.add("premium-rumble-peertube-hidden"),n.push(i)))}),n}function nt(e){(e||[]).forEach(t=>{var n;t.classList.remove("premium-rumble-peertube-hidden"),(n=t.parentElement)==null||n.classList.remove("premium-rumble-pending")}),document.querySelectorAll(".premium-rumble-pending").forEach(t=>{t.classList.remove("premium-rumble-pending")})}function it(e){if(!e||e<=0)return;let t=Zt(e);document.querySelectorAll(".attribute-duration .attribute-value, .attribute.attribute-duration .attribute-value").forEach(n=>{let r=n,i=(m==null?void 0:m.videoUuid)||window.location.href;Ee!==i&&(fe=r.textContent||"",Ee=i),r.textContent=t,r.dataset.rumbleDuration="true"})}function Kt(){document.querySelectorAll('.attribute-duration .attribute-value[data-rumble-duration="true"], .attribute.attribute-duration .attribute-value[data-rumble-duration="true"]').forEach(e=>{let t=e;fe!==null&&(t.textContent=fe),delete t.dataset.rumbleDuration}),fe=null,Ee=""}function Zt(e){e=Math.max(0,Math.floor(Number(e)||0));let t=Math.floor(e/3600),n=Math.floor(e%3600/60),r=e%60;return t>0?"".concat(t," \u0E0A\u0E21. ").concat(n," \u0E19\u0E32\u0E17\u0E35 ").concat(r,"sec"):n>0?"".concat(n," \u0E19\u0E32\u0E17\u0E35 ").concat(r,"sec"):"".concat(r,"sec")}function Ue(){return/Android|iPhone|iPad|iPod|Mobile/i.test(navigator.userAgent)}function Jt(){try{let e=new URL(window.location.href),t=Number(e.searchParams.get("playlistPosition"));return Number.isFinite(t)&&t>0?t:null}catch(e){return null}}function Xt(){return window.location.pathname.includes("/w/p/")}function ot(e){return e?(e.click(),!0):!1}function Qt(){let e=Jt();if(!e)return null;let t=e+1,n=Array.from(document.querySelectorAll('a[href*="/w/p/"][href*="playlistPosition="]'));for(let r of n)try{let i=new URL(r.href,window.location.origin);if(Number(i.searchParams.get("playlistPosition"))===t)return r}catch(i){}return null}function Yt(){let e=document.querySelector('my-input-switch input[name="autoplay-next-video"], input#autoplay-next-video, input[name="autoplay-next-video"]');if(e)return e.checked===!0;let t=document.querySelector('my-input-switch[inputname="autoplay-next-video"], [role="switch"][name="autoplay-next-video"], [aria-label*="\u0E40\u0E25\u0E48\u0E19\u0E27\u0E34\u0E14\u0E35\u0E42\u0E2D\u0E16\u0E31\u0E14\u0E44\u0E1B"], [aria-label*="autoplay"]');if(!t)return!1;let n=t.getAttribute("aria-checked");return n==="true"?!0:n==="false"?!1:t.classList.contains("active")||t.classList.contains("checked")||t.classList.contains("enabled")}function er(){let e=["my-recommended-videos",".other-videos",".recommendations","aside"];for(let t of e){let n=document.querySelector(t);if(!n)continue;let r=Array.from(n.querySelectorAll('a[href*="/w/"]:not([href*="/w/p/"])'));for(let i of r)try{let o=new URL(i.href,window.location.origin);if(!o.pathname.includes("/w/")||o.pathname===window.location.pathname)continue;return i}catch(o){}}return null}async function tr(e){if(!(e.nextTriggered||!e.api))try{if(!!await Promise.resolve(e.api.getPaused()))return;let n=Number(await Promise.resolve(e.api.getCurrentTime()))||0,r=Number(await Promise.resolve(e.api.getDuration()))||0;if(!r||r<=0)return;let i=r-n;if(n<=10||i>2)return;e.nextTriggered=!0;try{e.api.pause&&await Promise.resolve(e.api.pause())}catch(l){}try{await Promise.resolve(e.api.setCurrentTime(0))}catch(l){}try{e.api.pause&&await Promise.resolve(e.api.pause())}catch(l){}if(I(e.oldPlayer,!0),await ir(e,Math.floor(r)),e.canSaveProgress=!1,Xt()){let l=Qt();l&&ot(l);return}if(!Yt())return;let o=er();o&&ot(o)}catch(t){console.warn("\u26A0\uFE0F [Premium Rumble] auto-next failed:",t)}}function rr(e){e.autoNextTimer&&window.clearInterval(e.autoNextTimer),e.autoNextTimer=window.setInterval(()=>{tr(e).catch(()=>{})},500)}function nr(e){e.peerTubeStopTimer&&window.clearInterval(e.peerTubeStopTimer);let t=0;e.peerTubeStopTimer=window.setInterval(()=>{if(t++,!m||m!==e||t>45){e.peerTubeStopTimer&&window.clearInterval(e.peerTubeStopTimer),e.peerTubeStopTimer=void 0;return}I(e.oldPlayer,!0)},700)}async function ir(e,t){if(!e.canSaveProgress)return;let n=Math.max(0,Math.floor(Number(t)||0));if(!(!n||n<=0))try{await ee.saveRumbleProgress({videoUuid:e.videoUuid,rumbleVideoId:e.rumbleVideoId,positionSeconds:0,durationSeconds:n,paused:!0,completed:!1}),e.lastSavedPosition=0}catch(r){console.warn("\u26A0\uFE0F [Premium Rumble] reset progress to start failed:",r)}}function or(e){window.Rumble||function(t,n,r,i,o,l){t._Rumble=i,t[i]||(t[i]=function(){var s;(t[i]._=t[i]._||[]).push(arguments),t[i]._.length===1&&(o=n.createElement(r),l=n.getElementsByTagName(r)[0],o.async=!0,o.src="https://rumble.com/embedJS/u"+e+(arguments[1].video?"."+arguments[1].video:"")+"/?url="+encodeURIComponent(location.href)+"&args="+encodeURIComponent(JSON.stringify([].slice.apply(arguments))),(s=l.parentNode)==null||s.insertBefore(o,l))})}(window,document,"script","Rumble")}function st(){tt();let e=document.createElement("div");return e.className="premium-rumble-wrapper",e}async function He(e){if(!e.api)return null;try{let t=Math.floor(Number(await Promise.resolve(e.api.getCurrentTime()))||0),n=Math.round(Number(await Promise.resolve(e.api.getDuration()))||0),r=!!await Promise.resolve(e.api.getPaused());return!n||n<=0||t<0?null:{positionSeconds:t,durationSeconds:n,paused:r}}catch(t){return console.warn("\u26A0\uFE0F [Premium Rumble] \u0E2D\u0E48\u0E32\u0E19\u0E40\u0E27\u0E25\u0E32 Rumble \u0E44\u0E21\u0E48\u0E2A\u0E33\u0E40\u0E23\u0E47\u0E08:",t),null}}async function R(e=!1){let t=m;if(!(t!=null&&t.api))return;let n=await He(t);if(!n||n.positionSeconds<=2&&t.lastSavedPosition>30||t.nextTriggered&&n.positionSeconds<=5)return;let r=Math.abs(n.positionSeconds-t.lastSavedPosition);if(!(!e&&r<10&&!n.paused)){if(t.canSaveProgress){try{let i=await ee.saveRumbleProgress({videoUuid:t.videoUuid,rumbleVideoId:t.rumbleVideoId,positionSeconds:n.positionSeconds,durationSeconds:n.durationSeconds,paused:n.paused});i&&i.success!==!0&&(i.error||i.status===401||i.status===403)?(t.canSaveProgress=!1,console.warn("\u26A0\uFE0F [Premium Rumble] \u0E1B\u0E34\u0E14\u0E01\u0E32\u0E23\u0E1A\u0E31\u0E19\u0E17\u0E36\u0E01 progress \u0E0A\u0E31\u0E48\u0E27\u0E04\u0E23\u0E32\u0E27 \u0E40\u0E1E\u0E23\u0E32\u0E30 backend \u0E44\u0E21\u0E48\u0E2D\u0E19\u0E38\u0E0D\u0E32\u0E15:",i)):(t.lastSavedPosition=n.positionSeconds,Xe(t))}catch(i){t.canSaveProgress=!1,console.warn("\u26A0\uFE0F [Premium Rumble] \u0E1A\u0E31\u0E19\u0E17\u0E36\u0E01 progress \u0E44\u0E21\u0E48\u0E2A\u0E33\u0E40\u0E23\u0E47\u0E08 \u0E1B\u0E34\u0E14\u0E01\u0E32\u0E23\u0E22\u0E34\u0E07\u0E0B\u0E49\u0E33\u0E0A\u0E31\u0E48\u0E27\u0E04\u0E23\u0E32\u0E27:",i)}return}a.isLoggedIn()||Ze(t,n.positionSeconds,n.durationSeconds)}}async function sr(e){if(!e.api)return;let t=await He(e);if(!(!t||t.durationSeconds-t.positionSeconds<=2)){if(e.canSaveProgress){try{let r=await ee.saveRumbleProgress({videoUuid:e.videoUuid,rumbleVideoId:e.rumbleVideoId,positionSeconds:t.positionSeconds,durationSeconds:t.durationSeconds,paused:!0,completed:!1});r&&r.success!==!0&&(r.error||r.status===401||r.status===403)?e.canSaveProgress=!1:(e.lastSavedPosition=t.positionSeconds,Xe(e))}catch(r){e.canSaveProgress=!1,console.warn("\u26A0\uFE0F [Premium Rumble] \u0E1A\u0E31\u0E19\u0E17\u0E36\u0E01 progress \u0E01\u0E48\u0E2D\u0E19\u0E1B\u0E34\u0E14\u0E1E\u0E37\u0E49\u0E19\u0E2B\u0E25\u0E31\u0E07\u0E44\u0E21\u0E48\u0E2A\u0E33\u0E40\u0E23\u0E47\u0E08:",r)}return}a.isLoggedIn()||Ze(e,t.positionSeconds,t.durationSeconds)}}async function ar(e){let t=await He(e);if(!(!t||!t.durationSeconds)){it(t.durationSeconds);try{await ee.saveRumbleDuration({videoUuid:e.videoUuid,rumbleVideoId:e.rumbleVideoId,durationSeconds:t.durationSeconds})}catch(n){}}}async function lr(e,t,n){let r=Math.max(0,Math.floor(Number(t)||0));for(let i=0;i<12;i++){try{let o=Number(await Promise.resolve(e.getDuration()))||0;r>0&&await Promise.resolve(e.setCurrentTime(r));let l=Number(await Promise.resolve(e.getCurrentTime()))||0;if(r<=0||Math.abs(l-r)<=3||o>0&&i>=3){n&&e.play&&setTimeout(()=>{var p;return Promise.resolve((p=e.play)==null?void 0:p.call(e)).catch(()=>{})},250);return}}catch(o){}await new Promise(o=>setTimeout(o,450))}n&&e.play&&Promise.resolve(e.play()).catch(()=>{})}function ur(e){e.timer&&window.clearInterval(e.timer),e.timer=window.setInterval(()=>{R(!1)},2e4),rr(e)}function at(e,t){var r,i,o;try{(r=t==null?void 0:t.pause)==null||r.call(t)}catch(l){}try{(i=t==null?void 0:t.mute)==null||i.call(t)}catch(l){}try{(o=t==null?void 0:t.setVolume)==null||o.call(t,0)}catch(l){}let n=[];e&&n.push(e),document.querySelectorAll(".premium-rumble-wrapper").forEach(l=>{n.includes(l)||n.push(l)}),n.forEach(l=>{l.querySelectorAll("video, audio").forEach(s=>{let p=s;try{p.pause()}catch(d){}try{p.removeAttribute("src")}catch(d){}try{p.load()}catch(d){}}),l.querySelectorAll("iframe, object, embed").forEach(s=>{let p=s;try{p.src="about:blank"}catch(d){}try{p.setAttribute("src","about:blank")}catch(d){}try{p.setAttribute("srcdoc","<!doctype html><html><body></body></html>")}catch(d){}try{p.remove()}catch(d){}});try{l.innerHTML=""}catch(s){}})}function ce(){z="",re="",ne=0}let ye=!1,q=null;function cr(e){[0,120,350,900,1800].forEach(t=>{window.setTimeout(()=>{var n,r,i;try{(n=e==null?void 0:e.pause)==null||n.call(e)}catch(o){}try{(r=e==null?void 0:e.mute)==null||r.call(e)}catch(o){}try{(i=e==null?void 0:e.setVolume)==null||i.call(e,0)}catch(o){}},t)})}function ke(){I(void 0,!0)}function lt(e){if(!M()||m!=null&&m.api)return;q&&(window.clearTimeout(q),q=null);let t=_;ce(),le(),ke(),q=window.setTimeout(()=>{t===_&&M()&&(m!=null&&m.api||(ce(),j(50,t)))},80),window.setTimeout(()=>{t===_&&M()&&(m!=null&&m.api||(ce(),j(50,t)))},1300),window.setTimeout(()=>{m!=null&&m.api||A(),q&&(window.clearTimeout(q),q=null)},4200)}function mr(){let e=m;if(e!=null&&e.isMember)return;let t=navigator.mediaSession;if(t!=null&&t.setActionHandler){try{t.setActionHandler("play",()=>{var r,i;let n=m;if(!(n!=null&&n.isMember)){if(Re()&&M()){try{(i=(r=n==null?void 0:n.api)==null?void 0:r.play)==null||i.call(r)}catch(o){}return}Ue()&&(n!=null&&n.api&&(!M()||document.hidden)?be().catch(()=>{}):ye&&M()&&Re()&&(ke(),lt("media-session-play")))}})}catch(n){}try{t.setActionHandler("pause",()=>{var r,i;let n=m;if(!(n!=null&&n.isMember)){try{(i=(r=n==null?void 0:n.api)==null?void 0:r.pause)==null||i.call(r)}catch(o){}R(!0).catch(()=>{})}})}catch(n){}try{t.setActionHandler("seekto",n=>{var o,l;let r=m;if(!(r!=null&&r.api)||r.isMember)return;if(Ue()&&(!M()||document.hidden)){try{(l=(o=r.api).pause)==null||l.call(o)}catch(s){}return}let i=Number(n==null?void 0:n.seekTime);Number.isFinite(i)&&Promise.resolve(r.api.setCurrentTime(i)).catch(()=>{})})}catch(n){}}}async function G(e=!0){A(),ue(!0),m&&(e&&!m.nextTriggered&&await R(!0),m.timer&&window.clearInterval(m.timer),m.autoNextTimer&&window.clearInterval(m.autoNextTimer),m.peerTubeStopTimer&&window.clearInterval(m.peerTubeStopTimer),at(m.wrapper,m.api),m.wrapper&&m.wrapper.remove(),nt(m.hiddenPeerTubeChildren),Kt(),m.oldPlayer&&(m.oldPlayer.style.display=""),Dt(m.oldPlayer),m=null,ce())}async function dr(e=_){let t=++_e,n=Ge(),r=window.location.pathname,i=()=>!se(e,n,t);if(!r.startsWith("/w/")){A(),await G();return}let o=await Nt();if(i())return;if(!o){Ie()&&le(),r.startsWith("/w/")&&ne<12&&(ne++,j(500,e));return}if(ne=0,i())return;let l="".concat(window.location.href,"::").concat(o);if(z===l||re===l)return;re=l,qt(o);let s;try{s=await ee.getRumblePlaybackInfo(o)}catch(y){console.warn("\u26A0\uFE0F [Premium Rumble] \u0E42\u0E2B\u0E25\u0E14 playback-info \u0E44\u0E21\u0E48\u0E2A\u0E33\u0E40\u0E23\u0E47\u0E08:",y);return}if(i()||!(s!=null&&s.success))return;if(s.mode==="peertube"){sessionStorage.removeItem(ae(o)),ue(!0),A(),await G(),z=l;return}if(s.mode==="replacement"||s.mode==="locked"){sessionStorage.removeItem(ae(o)),ue(!0),A(),await G(),z=l;return}if(s.mode!=="rumble"||!s.rumbleVideoId){ue(!0);return}sessionStorage.setItem(ae(o),"true");let p=Me();if(!p){z="",re="";return}if(await G(!1),i())return;ue(!1),z=l,le(),I(p,!0);let d=st(),g="premium_rumble_".concat(s.rumbleVideoId,"_").concat(Date.now());d.innerHTML='\n <div class="premium-rumble-loading-placeholder">\u0E01\u0E33\u0E25\u0E31\u0E07\u0E42\u0E2B\u0E25\u0E14\u0E40\u0E04\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E40\u0E25\u0E48\u0E19</div>\n <div id="'.concat(g,'" style="width:100%;height:100%;max-width:100%;display:none;"></div>\n '),p.insertBefore(d,p.firstChild);let v=rt(p,d);m={videoUuid:s.videoUuid||o,rumbleVideoId:s.rumbleVideoId,isMember:s.isMember===!0,canSaveProgress:a.isLoggedIn(),oldPlayer:p,hiddenPeerTubeChildren:v,wrapper:d,lastSavedPosition:(()=>{let y=new URLSearchParams(window.location.search),h=Number(y.get("rumbleStart")||y.get("startSeconds")||NaN);return Number.isFinite(h)&&h>0?Math.floor(h):Number(s.startSeconds||0)})(),nextTriggered:!1},m&&nr(m),it(Number(s.durationSeconds||0));let U=s.pubId||"4pc838";or(U),!(i()||!m||m.wrapper!==d)&&window.Rumble("play",{video:s.rumbleVideoId,div:g,autoplay:!1,api:async function(y){if(i()||!m||m.wrapper!==d||m.rumbleVideoId!==s.rumbleVideoId)return;let h=m;h.api=y,h.isMember||mr(),ye=!1,I(h.oldPlayer,!0),jt(d,h);let P=new URLSearchParams(window.location.search),V=Number(P.get("rumbleStart")||P.get("startSeconds")||NaN),we=P.get("rumbleAutoplay")==="1";a.isLoggedIn()&&Je([s.videoUuid||o,o,s.rumbleVideoId]);let K=a.isLoggedIn()?null:Ke(s.videoUuid||o)||Ke(o),Se=Math.floor(Number.isFinite(V)&&V>0?V:Number(s.startSeconds||(K==null?void 0:K.positionSeconds)||0));setTimeout(()=>{!se(e,n,t)||m!==h||lr(y,Se,we).catch(L=>{console.warn("\u26A0\uFE0F [Premium Rumble] seek/resume \u0E44\u0E21\u0E48\u0E2A\u0E33\u0E40\u0E23\u0E47\u0E08:",L)})},400);try{y.setVolume&&await Promise.resolve(y.setVolume(1))}catch(L){}try{y.unmute&&await Promise.resolve(y.unmute())}catch(L){}let me=d.querySelector(".premium-rumble-loading-placeholder"),Z=d.querySelector("#".concat(g));me&&me.remove(),Z&&(Z.style.display="block"),d.dataset.rumbleLoading="false",A(),!(i()||m!==h)&&(Ae(d),setTimeout(()=>{!se(e,n,t)||m!==h||(Ae(d),I(h.oldPlayer,!0))},800),setTimeout(()=>{!se(e,n,t)||m!==h||(Ae(d),I(h.oldPlayer,!0))},2e3),ur(h),setTimeout(()=>{!se(e,n,t)||m!==h||(ar(h),R(!0))},2500))}})}function j(e=250,t=_){t===_&&(clearTimeout(te),te=setTimeout(()=>{t===_&&dr(t).catch(n=>{console.warn("\u26A0\uFE0F [Premium Rumble] mount error:",n)})},e))}let $e=!1;function ge(e){return!(!(e!=null&&e.api)||e.isMember||!Ue()||M()&&Re())}async function be(){var n,r,i;let e=m;if(!ge(e)||!(e!=null&&e.api)||$e)return;$e=!0,ye=!0;let t=e.api;try{await sr(e);try{await Promise.resolve((n=t.pause)==null?void 0:n.call(t))}catch(o){}try{await Promise.resolve((r=t.mute)==null?void 0:r.call(t))}catch(o){}try{await Promise.resolve((i=t.setVolume)==null?void 0:i.call(t,0))}catch(o){}cr(t),at(e.wrapper,t),await G(!1),ce(),ke()}finally{window.setTimeout(()=>{$e=!1},900)}}function Ce(e){ye&&(document.hidden||window.location.pathname.startsWith("/w/")&<(e))}document.addEventListener("visibilitychange",()=>{let e=m;if(document.hidden){if(e!=null&&e.api&&e.isMember){R(!0).catch(()=>{});return}if(ge(e)){be().catch(()=>{});return}e!=null&&e.api&&R(!0);return}if(m!=null&&m.api){R(!0);return}Ce("visibilitychange-visible")}),window.addEventListener("pageshow",()=>{Ce("pageshow")}),window.addEventListener("focus",()=>{Ce("focus")}),window.addEventListener("pagehide",()=>{let e=m;if(e!=null&&e.api&&e.isMember){R(!0).catch(()=>{});return}if(ge(e)){be().catch(()=>{});return}e!=null&&e.api&&R(!0)});try{document.addEventListener("freeze",()=>{let e=m;if(e!=null&&e.api&&e.isMember){R(!0).catch(()=>{});return}if(ge(e)){be().catch(()=>{});return}})}catch(e){}let Ne=window.location.href;function ve(e=!1){if(!e&&window.location.href===Ne)return;Q();let t=At();Ne=window.location.href,re="",ne=0,ft(),G(!1).finally(()=>{t===_&&(Ie()&&le(),j(80,t))})}let pr=history.pushState;history.pushState=function(...e){let t=pr.apply(this,e);return setTimeout(ve,50),t};let fr=history.replaceState;history.replaceState=function(...e){let t=fr.apply(this,e);return setTimeout(ve,50),t},window.addEventListener("popstate",()=>setTimeout(ve,50)),new MutationObserver(e=>{e.length>0&&e.every(n=>{var i;let r=n.target;return!!r&&!!((i=r.closest)!=null&&i.call(r,".premium-rumble-wrapper"))})||(window.location.href!==Ne&&ve(!1),Q(),clearTimeout(window.badgeTimeout),window.badgeTimeout=setTimeout(()=>{Q(),W(),Y()},450))}).observe(document.body,{childList:!0,subtree:!0});let De=0,hr=setInterval(()=>{Q(),W(),Y(),De<6&&j(700),De++,De>=10&&clearInterval(hr)},700);Q(),Ie()&&le(),j(150),setTimeout(Y,500)}export{Or as register};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var V=Object.defineProperty,$=Object.defineProperties;var F=Object.getOwnPropertyDescriptors;var O=Object.getOwnPropertySymbols;var z=Object.prototype.hasOwnProperty,J=Object.prototype.propertyIsEnumerable;var U=(e,t,n)=>t in e?V(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,v=(e,t)=>{for(var n in t||(t={}))z.call(t,n)&&U(e,n,t[n]);if(O)for(var n of O(t))J.call(t,n)&&U(e,n,t[n]);return e},C=(e,t)=>$(e,F(t));var H="enable-plugin";var D="stripe-customer-portal-url";var N={name:"peertube-plugin-premium-members",description:"peertube-plugin-premium-members",version:"3.2.3",author:"Vee",bugs:"",clientScripts:[{script:"dist/client/my-account/index.js",scopes:["my-account"]},{script:"dist/client/common.js",scopes:["common"]},{script:"dist/client/video-edit.js",scopes:["video-edit"]},{script:"dist/client/admin-manage.js",scopes:["common"]}],css:["dist/assets/style.css"],engine:{peertube:">=6.0.0"},homepage:"",keywords:["peertube","plugin"],library:"./dist/server/server/main.js",scripts:{clean:"rm -rf dist/*",prepare:"npm run build","build:client":"node ./scripts/build.cjs","build:server":"tsc --build server/tsconfig.json","build:styles":"npx --yes sass --no-source-map assets:dist/assets",build:"npm-run-all -s clean check:client:tsc -p build:server build:client build:styles","check:client:tsc":"npx tsc --p client/tsconfig.json --noEmit","lint:script":"npx eslint .",test:"npm-run-all -p lint:script test:unit","test:unit":"TS_NODE_PROJECT=server/tsconfig.test.json mocha server/*.spec.ts","test:e2e":"cd demo && npm ci && npm test"},staticDirs:{images:"public/images"},translations:{"sv-SE":"./languages/sv.json","th-TH":"./languages/th.json",th:"./languages/th.json"},devDependencies:{"@tsconfig/node16":"^16.0.0","@types/mocha":"^10.0.8","@typescript-eslint/eslint-plugin":"^8.9.0","@typescript-eslint/parser":"^8.9.0",esbuild:"^0.24.0",eslint:"^9.12.0","eslint-config-love":"^87.0.0",globals:"^15.3.0",mocha:"^10.7.3","npm-run-all":"^4.1.5",tsx:"^4.19.1",typescript:"^5.4.3"},dependencies:{"@peertube/peertube-types":"^6.3.0","@types/gtag.js":"^0.0.20","@types/sequelize":"^4.28.20",express:"^4.19.2","short-uuid":"^5.2.0",stripe:"^18.1.0"}};var f=class{constructor(t){this.pluginBasePath="/plugins/".concat(N.name.replace("peertube-plugin-",""),"/router");this.getAuthHeader=t||(()=>{})}async get(t){return fetch(t,{method:"GET",headers:this.getAuthHeader(),credentials:"include"}).then(async n=>n.json())}async patch(t,n){await fetch(t,{method:"PATCH",headers:C(v({},this.getAuthHeader()),{"Content-Type":"application/json"}),credentials:"include",body:JSON.stringify(n)})}async post(t,n){return fetch(t,{method:"POST",headers:C(v({},this.getAuthHeader()),{"Content-Type":"application/json"}),credentials:"include",body:JSON.stringify(n)}).then(async o=>o.json())}async delete(t){return fetch(t,{method:"DELETE",headers:this.getAuthHeader(),credentials:"include"}).then(async n=>n.json())}async getMe(){return this.get("/api/v1/users/me")}async getPrices(){return this.get(this.pluginBasePath+"/price")}async getSubscription(){return this.get(this.pluginBasePath+"/subscription")}async updateSubscription(t){return this.patch(this.pluginBasePath+"/subscription",t)}async createCheckout({allowPromotionCodes:t,couponId:n,priceId:o,paymentMode:s,paymentMethod:r}){return this.post(this.pluginBasePath+"/checkout",{allowPromotionCodes:t,couponId:n,priceId:o,paymentMode:s,paymentMethod:r})}async getRumblePlaybackInfo(t){return this.get(this.pluginBasePath+"/rumble/playback-info/".concat(encodeURIComponent(t)))}async saveRumbleProgress(t){return this.post(this.pluginBasePath+"/rumble/progress",t)}async saveRumbleDuration(t){return this.post(this.pluginBasePath+"/rumble/duration",t)}async getRumbleProgress(t){return this.get(this.pluginBasePath+"/rumble/progress/".concat(encodeURIComponent(t)))}async getRumbleHistory(t=50,n=0){return this.get(this.pluginBasePath+"/rumble/history?limit=".concat(t,"&offset=").concat(n))}async deleteRumbleHistoryItem(t){return this.delete(this.pluginBasePath+"/rumble/history/".concat(encodeURIComponent(t)))}async clearRumbleHistory(){return this.delete(this.pluginBasePath+"/rumble/history")}};var _=class{constructor(t){this.rootEl=t}renderRow(t,n){return this.div([this.div(t,n?"col-12 col-lg-4 col-xl-3":"col-12"),...n?[this.div(n,"col-12 col-lg-8 col-xl-9")]:[]],"row")}div(t,n){let o=document.createElement("div");return n&&(o.className=n),t.forEach(s=>o.appendChild(s)),o}a(t,n){let o=document.createElement("a");o.innerHTML=t;for(let s in n)o.setAttribute(s,n[s]);return o}h2(t){let n=document.createElement("h2");return n.innerText=t,n}h3(t){let n=document.createElement("h2");return n.innerText=t,n}p(t,n){let o=document.createElement("p");return o.innerHTML=t,n&&(o.className=n),o}img(t,n){let o=document.createElement("img");return o.src=t,o.className=n,o}ul(t,n){let o=document.createElement("ul");return n&&(o.className=n),t.forEach(s=>{let r=document.createElement("li");r.innerText=s,o.appendChild(r)}),o}};var S=e=>{if(!e)return"-";let t=new Date(e);return isNaN(t.getTime())?"-":t.toLocaleDateString("th-TH",{year:"numeric",month:"numeric",day:"numeric"})},k=async({peertubeHelpers:e,rootEl:t,subscription:n})=>{var w;let{translate:o}=e,s=new f(e.getAuthHeader),r=new _(t),g=n.cancelAt&&!n.cancelAtPeriodEnd,i=n.status==="one_time"||n.status==="manual"||n.status==="manual_added"||g,a=document.createElement("span");i?a.innerHTML='\u0E04\u0E38\u0E13\u0E04\u0E37\u0E2D <strong style="color: #00b14f; font-size: 1.1em;">\u0E2A\u0E21\u0E32\u0E0A\u0E34\u0E01</strong> \u0E2A\u0E34\u0E17\u0E18\u0E34\u0E4C\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19\u0E02\u0E2D\u0E07\u0E04\u0E38\u0E13\u0E08\u0E30\u0E2A\u0E34\u0E49\u0E19\u0E2A\u0E38\u0E14\u0E43\u0E19\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48 '.concat(S(n.currentPeriodEnd)):n.cancelAtPeriodEnd||n.status==="canceled"?a.innerHTML='\u0E04\u0E38\u0E13\u0E04\u0E37\u0E2D <strong style="color: #00b14f; font-size: 1.1em;">\u0E2A\u0E21\u0E32\u0E0A\u0E34\u0E01</strong> \u0E01\u0E32\u0E23\u0E2A\u0E21\u0E31\u0E04\u0E23\u0E2A\u0E21\u0E32\u0E0A\u0E34\u0E01\u0E02\u0E2D\u0E07\u0E04\u0E38\u0E13 <span style="color: #dc3545; font-weight: bold;">\u0E16\u0E39\u0E01\u0E22\u0E01\u0E40\u0E25\u0E34\u0E01\u0E41\u0E25\u0E49\u0E27</span> \u0E08\u0E30\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19\u0E44\u0E14\u0E49\u0E16\u0E36\u0E07\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48 '.concat(S(n.currentPeriodEnd)):a.innerHTML='\u0E04\u0E38\u0E13\u0E04\u0E37\u0E2D <strong style="color: #00b14f; font-size: 1.1em;">\u0E2A\u0E21\u0E32\u0E0A\u0E34\u0E01</strong> \u0E01\u0E32\u0E23\u0E2A\u0E21\u0E31\u0E04\u0E23\u0E2A\u0E21\u0E32\u0E0A\u0E34\u0E01\u0E02\u0E2D\u0E07\u0E04\u0E38\u0E13 <span style="color: #007bff; text-decoration: underline;">\u0E08\u0E30\u0E15\u0E48\u0E2D\u0E2D\u0E32\u0E22\u0E38\u0E2D\u0E31\u0E15\u0E42\u0E19\u0E21\u0E31\u0E15\u0E34</span> \u0E43\u0E19\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48 '.concat(S(n.currentPeriodEnd));let u=r.div([],"mt-3");if(u.style.display="flex",u.style.gap="10px",!i){let y=await e.getSettings(),p=r.a(await o("\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2A\u0E21\u0E32\u0E0A\u0E34\u0E01"),{href:y[D],target:"_blank"});p.style.cssText="background-color: #fd7e14; color: white; padding: 8px 16px; border-radius: 5px; font-weight: bold; text-decoration: none; border: none; cursor: pointer;";let h=n.cancelAtPeriodEnd?"\u0E15\u0E48\u0E2D\u0E2D\u0E32\u0E22\u0E38\u0E2A\u0E21\u0E32\u0E0A\u0E34\u0E01\u0E2D\u0E35\u0E01\u0E04\u0E23\u0E31\u0E49\u0E07":"\u0E22\u0E01\u0E40\u0E25\u0E34\u0E01\u0E01\u0E32\u0E23\u0E2A\u0E21\u0E31\u0E04\u0E23\u0E2A\u0E21\u0E32\u0E0A\u0E34\u0E01",c=r.a(await o(h),{href:"#"});c.style.cssText="background-color: #fd7e14; color: white; padding: 8px 16px; border-radius: 5px; font-weight: bold; text-decoration: none; border: none; cursor: pointer;",c.addEventListener("click",d=>{d.preventDefault(),c.style.opacity="0.5",c.style.pointerEvents="none",s.updateSubscription({cancelAtPeriodEnd:!n.cancelAtPeriodEnd}).then(()=>window.location.reload()).catch(async M=>{e.showModal({title:await o("\u0E40\u0E01\u0E34\u0E14\u0E02\u0E49\u0E2D\u0E1C\u0E34\u0E14\u0E1E\u0E25\u0E32\u0E14"),content:await o("\u0E44\u0E21\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E14\u0E33\u0E40\u0E19\u0E34\u0E19\u0E01\u0E32\u0E23\u0E44\u0E14\u0E49\u0E43\u0E19\u0E02\u0E13\u0E30\u0E19\u0E35\u0E49 \u0E42\u0E1B\u0E23\u0E14\u0E25\u0E2D\u0E07\u0E43\u0E2B\u0E21\u0E48\u0E20\u0E32\u0E22\u0E2B\u0E25\u0E31\u0E07"),close:!0}),c.style.opacity="1",c.style.pointerEvents="auto"})}),u.appendChild(p),u.appendChild(c)}let m=r.div([a,u]),l=r.renderRow([r.p(await o("\u0E2A\u0E16\u0E32\u0E19\u0E30:"),"fw-bold")],[m]);l.style.borderBottom="1px solid #eee",l.style.paddingBottom="20px",l.style.marginBottom="20px",t.appendChild(l);let b=await(async y=>!y||y.length===0?[r.p(await o("\u0E22\u0E31\u0E07\u0E44\u0E21\u0E48\u0E21\u0E35\u0E1B\u0E23\u0E30\u0E27\u0E31\u0E15\u0E34\u0E01\u0E32\u0E23\u0E0A\u0E33\u0E23\u0E30\u0E40\u0E07\u0E34\u0E19"),"text-muted")]:Promise.all(y.map(async p=>{var L,A;let h=r.div([],"mb-4");h.appendChild(r.p(S(p.created),"fw-bold mb-2"));let c=r.div([]);c.style.display="grid",c.style.gridTemplateColumns="100px 1fr",c.style.marginBottom="8px",c.appendChild(r.p(await o("\u0E22\u0E2D\u0E14\u0E23\u0E27\u0E21"))),c.appendChild(r.p("".concat(((L=p.amountTotal)!=null?L:0)/100," ").concat(p.currency.toUpperCase())));let d=r.div([]);d.style.display="grid",d.style.gridTemplateColumns="100px 1fr",d.appendChild(r.p(await o("\u0E2A\u0E16\u0E32\u0E19\u0E30")));let M=(A=p.status)!=null?A:"canceled";return M.includes("paid")&&(M="paid"),d.appendChild(r.p(await o(M))),h.appendChild(c),h.appendChild(d),h})))((w=n.invoices)!=null?w:[]),x=r.div(b),I=r.renderRow([r.p(await o("\u0E1B\u0E23\u0E30\u0E27\u0E31\u0E15\u0E34\u0E01\u0E32\u0E23\u0E0A\u0E33\u0E23\u0E30\u0E40\u0E07\u0E34\u0E19:"),"fw-bold")],[x]);t.appendChild(I)};var R=(e,t)=>{"gtag"in window&&window.gtag("event",e,v({event_category:"premium-users"},t))},E=(e,t)=>new Intl.NumberFormat(navigator.language,{style:"currency",currency:t,minimumFractionDigits:0}).format(e),T=e=>{var t;return!((t=e.coupon)!=null&&t.valid)||!e.unit_amount?null:e.coupon.amount_off?(e.unit_amount-e.coupon.amount_off)/100:e.coupon.percent_off?Math.round((e.unit_amount-e.unit_amount*(e.coupon.percent_off/100))/100):null};var q=e=>{var t,n,o;return(t=e.coupon)!=null&&t.percent_off?"".concat(e.coupon.percent_off," %"):E((o=(n=e.coupon)==null?void 0:n.amount_off)!=null?o:0,e.currency)},K=async(e,t)=>{var n,o,s;return((n=e.recurring)==null?void 0:n.interval)==="month"?(await t("discount the first MONTHS_COUNT months.")).replace("MONTHS_COUNT",String((o=e.coupon)==null?void 0:o.duration_in_months)):((s=e.recurring)==null?void 0:s.interval)==="year"?t("discount for a whole year."):""},W=e=>{var n,o,s,r,g,i,a,u,m,l;let t=0;return((n=e.recurring)==null?void 0:n.interval)==="month"?(e.unit_amount&&((o=e.coupon)!=null&&o.amount_off)&&((s=e.coupon)!=null&&s.duration_in_months)&&(t=e.coupon.amount_off*((r=e.coupon)==null?void 0:r.duration_in_months)/100),e.unit_amount&&((g=e.coupon)!=null&&g.percent_off)&&((i=e.coupon)!=null&&i.duration_in_months)&&(t=e.unit_amount*(e.coupon.percent_off/100)*((a=e.coupon)==null?void 0:a.duration_in_months)/100)):((u=e.recurring)==null?void 0:u.interval)==="year"&&(e.unit_amount&&((m=e.coupon)!=null&&m.amount_off)&&(t=e.coupon.amount_off*12/100),e.unit_amount&&((l=e.coupon)!=null&&l.percent_off)&&(t=e.unit_amount*(e.coupon.percent_off/100)/100)),t},Q=async(e,t)=>{var s;let n=T(e),o;return n!==null?o='\n <span class="original-price">\n '.concat(E(e.unit_amount/100,e.currency),"</span>\n ").concat(E(n,e.currency)):o=E(e.unit_amount/100,e.currency),(s=e.recurring)!=null&&s.interval?o+=" / "+await t(e.recurring.interval):o+=" / "+await t("1 \u0E40\u0E14\u0E37\u0E2D\u0E19"),o},B=async({buttonOnClick:e,price:t,uiBuilder:n,translate:o})=>{var P,b;let s=T(t),r=await K(t,o),g=W(t),i=q(t),a=await Q(t,o),u=!!e,m="";(P=t.recurring)!=null&&P.interval?m=await o("Pay "+(t.recurring.interval==="day"?"daily":t.recurring.interval+"ly")):m=await o("\u0E0A\u0E33\u0E23\u0E30 1 \u0E40\u0E14\u0E37\u0E2D\u0E19 (QR \u0E1E\u0E23\u0E49\u0E2D\u0E21\u0E40\u0E1E\u0E22\u0E4C)");let l=n.a(a,{class:"primary-button peertube-button-link mb-4","data-testid":"premium_users-button-pay_"+(((b=t.recurring)==null?void 0:b.interval)||"onetime")});return u&&l.addEventListener("click",e),n.div([n.p(m,"fw-bold"),...s===null?[]:[n.ul([i+" "+r,(await o("You'll save AMOUNT_TO_SAVE.")).replace("AMOUNT_TO_SAVE",String(E(Math.round(g),t.currency)))],"text-start")],...u?[l]:[n.p(a,"mt-auto")]],"d-flex flex-grow-1 flex-column")};var j=async({peertubeHelpers:e,rootEl:t})=>{let n=new f(e.getAuthHeader),{translate:o}=e,s=new _(t),r=await n.getPrices();R("view_item_list",{items:r.map(i=>{var a,u,m,l,P;return{item_id:i.product,item_name:"Premium subscription",item_variant:(a=i.recurring)==null?void 0:a.interval,price:(u=i.unit_amount)!=null?u:0,discount:i.unit_amount?i.unit_amount-((m=T(i))!=null?m:0):0,coupon:(P=(l=i.coupon)==null?void 0:l.name)!=null?P:void 0,quantity:1}})});let g=await Promise.all(r.map(async i=>{let a=T(i),u=!i.recurring,m=u?"payment":"subscription",l=u?"promptpay":"card";return B({buttonOnClick:b=>{var I,w,y,p,h,c;let x=b.target;x.setAttribute("disabled","disabled"),R("add_to_cart",{value:a===null?((I=i.unit_amount)!=null?I:0)/100:a,currency:i.currency,items:[{item_id:i.product,item_name:"Premium subscription",item_variant:(w=i.recurring)==null?void 0:w.interval,price:(y=i.unit_amount)!=null?y:0,discount:i.unit_amount?i.unit_amount-(a!=null?a:0):0,coupon:(h=(p=i.coupon)==null?void 0:p.name)!=null?h:void 0,quantity:1}]}),n.createCheckout({allowPromotionCodes:!!new URLSearchParams(window.location.search).get("allowPromotionCodes"),couponId:(c=i.coupon)==null?void 0:c.id,priceId:i.id,paymentMode:m,paymentMethod:l}).then(({checkoutUrl:d})=>{window.location.href=d}).catch(async d=>{e.showModal({title:await o("Something went wrong"),content:await o("Couldn't create subcsription due to technical issues. Please try again later."),close:!0}),console.error("Couldn't create checkout",{err:d})}).finally(()=>{x.removeAttribute("disabled")})},price:i,uiBuilder:s,translate:o})}));t.appendChild(s.renderRow([s.h2(await o("Become premium"))],[s.p(await o("As a premium user you'll get access to premium videos and helps us to continue our work."))])),t.appendChild(s.renderRow([],[s.div(g.map(i=>s.div([i],"col-12 col-sm-6 d-flex")),"row")]))};var G=e=>async({rootEl:t})=>{let{translate:n}=e,o=new f(e.getAuthHeader);t.className="plugin-premium-users my-account",new URLSearchParams(window.location.search).get("checkout_status")==="success"&&(R("purchase"),e.showModal({title:await n("Payment succeeded"),cancel:{value:await n("Close")},content:await n("Your payment succeeded and will short be registered, it may take awhile depending on your payment method."),close:!0}));let r=await o.getSubscription();(await e.getUser()).isPremium?await k({peertubeHelpers:e,rootEl:t,subscription:r}):await j({peertubeHelpers:e,rootEl:t})};async function Rt({registerClientRoute:e,peertubeHelpers:t}){let{translate:n}=t,o=await t.getSettings();e({route:"/premium",parentRoute:"/my-account",menuItem:o[H]?{label:await n("Premium account")}:void 0,title:await n("Premium account"),onMount:G(t)})}export{Rt as register};
|
|
1
|
+
var V=Object.defineProperty,$=Object.defineProperties;var F=Object.getOwnPropertyDescriptors;var O=Object.getOwnPropertySymbols;var z=Object.prototype.hasOwnProperty,J=Object.prototype.propertyIsEnumerable;var U=(e,t,n)=>t in e?V(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,v=(e,t)=>{for(var n in t||(t={}))z.call(t,n)&&U(e,n,t[n]);if(O)for(var n of O(t))J.call(t,n)&&U(e,n,t[n]);return e},C=(e,t)=>$(e,F(t));var H="enable-plugin";var D="stripe-customer-portal-url";var N={name:"peertube-plugin-premium-members",description:"peertube-plugin-premium-members",version:"3.2.5",author:"Vee",bugs:"",clientScripts:[{script:"dist/client/my-account/index.js",scopes:["my-account"]},{script:"dist/client/common.js",scopes:["common"]},{script:"dist/client/video-edit.js",scopes:["video-edit"]},{script:"dist/client/admin-manage.js",scopes:["common"]}],css:["dist/assets/style.css"],engine:{peertube:">=6.0.0"},homepage:"",keywords:["peertube","plugin"],library:"./dist/server/server/main.js",scripts:{clean:"rm -rf dist/*",prepare:"npm run build","build:client":"node ./scripts/build.cjs","build:server":"tsc --build server/tsconfig.json","build:styles":"npx --yes sass --no-source-map assets:dist/assets",build:"npm-run-all -s clean check:client:tsc -p build:server build:client build:styles","check:client:tsc":"npx tsc --p client/tsconfig.json --noEmit","lint:script":"npx eslint .",test:"npm-run-all -p lint:script test:unit","test:unit":"TS_NODE_PROJECT=server/tsconfig.test.json mocha server/*.spec.ts","test:e2e":"cd demo && npm ci && npm test"},staticDirs:{images:"public/images"},translations:{"sv-SE":"./languages/sv.json","th-TH":"./languages/th.json",th:"./languages/th.json"},devDependencies:{"@tsconfig/node16":"^16.0.0","@types/mocha":"^10.0.8","@typescript-eslint/eslint-plugin":"^8.9.0","@typescript-eslint/parser":"^8.9.0",esbuild:"^0.24.0",eslint:"^9.12.0","eslint-config-love":"^87.0.0",globals:"^15.3.0",mocha:"^10.7.3","npm-run-all":"^4.1.5",tsx:"^4.19.1",typescript:"^5.4.3"},dependencies:{"@peertube/peertube-types":"^6.3.0","@types/gtag.js":"^0.0.20","@types/sequelize":"^4.28.20",express:"^4.19.2","short-uuid":"^5.2.0",stripe:"^18.1.0"}};var f=class{constructor(t){this.pluginBasePath="/plugins/".concat(N.name.replace("peertube-plugin-",""),"/router");this.getAuthHeader=t||(()=>{})}async get(t){return fetch(t,{method:"GET",headers:this.getAuthHeader(),credentials:"include"}).then(async n=>n.json())}async patch(t,n){await fetch(t,{method:"PATCH",headers:C(v({},this.getAuthHeader()),{"Content-Type":"application/json"}),credentials:"include",body:JSON.stringify(n)})}async post(t,n){return fetch(t,{method:"POST",headers:C(v({},this.getAuthHeader()),{"Content-Type":"application/json"}),credentials:"include",body:JSON.stringify(n)}).then(async o=>o.json())}async delete(t){return fetch(t,{method:"DELETE",headers:this.getAuthHeader(),credentials:"include"}).then(async n=>n.json())}async getMe(){return this.get("/api/v1/users/me")}async getPrices(){return this.get(this.pluginBasePath+"/price")}async getSubscription(){return this.get(this.pluginBasePath+"/subscription")}async updateSubscription(t){return this.patch(this.pluginBasePath+"/subscription",t)}async createCheckout({allowPromotionCodes:t,couponId:n,priceId:o,paymentMode:s,paymentMethod:r}){return this.post(this.pluginBasePath+"/checkout",{allowPromotionCodes:t,couponId:n,priceId:o,paymentMode:s,paymentMethod:r})}async getRumblePlaybackInfo(t){return this.get(this.pluginBasePath+"/rumble/playback-info/".concat(encodeURIComponent(t)))}async saveRumbleProgress(t){return this.post(this.pluginBasePath+"/rumble/progress",t)}async saveRumbleDuration(t){return this.post(this.pluginBasePath+"/rumble/duration",t)}async getRumbleProgress(t){return this.get(this.pluginBasePath+"/rumble/progress/".concat(encodeURIComponent(t)))}async getRumbleHistory(t=50,n=0){return this.get(this.pluginBasePath+"/rumble/history?limit=".concat(t,"&offset=").concat(n))}async deleteRumbleHistoryItem(t){return this.delete(this.pluginBasePath+"/rumble/history/".concat(encodeURIComponent(t)))}async clearRumbleHistory(){return this.delete(this.pluginBasePath+"/rumble/history")}};var _=class{constructor(t){this.rootEl=t}renderRow(t,n){return this.div([this.div(t,n?"col-12 col-lg-4 col-xl-3":"col-12"),...n?[this.div(n,"col-12 col-lg-8 col-xl-9")]:[]],"row")}div(t,n){let o=document.createElement("div");return n&&(o.className=n),t.forEach(s=>o.appendChild(s)),o}a(t,n){let o=document.createElement("a");o.innerHTML=t;for(let s in n)o.setAttribute(s,n[s]);return o}h2(t){let n=document.createElement("h2");return n.innerText=t,n}h3(t){let n=document.createElement("h2");return n.innerText=t,n}p(t,n){let o=document.createElement("p");return o.innerHTML=t,n&&(o.className=n),o}img(t,n){let o=document.createElement("img");return o.src=t,o.className=n,o}ul(t,n){let o=document.createElement("ul");return n&&(o.className=n),t.forEach(s=>{let r=document.createElement("li");r.innerText=s,o.appendChild(r)}),o}};var S=e=>{if(!e)return"-";let t=new Date(e);return isNaN(t.getTime())?"-":t.toLocaleDateString("th-TH",{year:"numeric",month:"numeric",day:"numeric"})},k=async({peertubeHelpers:e,rootEl:t,subscription:n})=>{var w;let{translate:o}=e,s=new f(e.getAuthHeader),r=new _(t),g=n.cancelAt&&!n.cancelAtPeriodEnd,i=n.status==="one_time"||n.status==="manual"||n.status==="manual_added"||g,a=document.createElement("span");i?a.innerHTML='\u0E04\u0E38\u0E13\u0E04\u0E37\u0E2D <strong style="color: #00b14f; font-size: 1.1em;">\u0E2A\u0E21\u0E32\u0E0A\u0E34\u0E01</strong> \u0E2A\u0E34\u0E17\u0E18\u0E34\u0E4C\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19\u0E02\u0E2D\u0E07\u0E04\u0E38\u0E13\u0E08\u0E30\u0E2A\u0E34\u0E49\u0E19\u0E2A\u0E38\u0E14\u0E43\u0E19\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48 '.concat(S(n.currentPeriodEnd)):n.cancelAtPeriodEnd||n.status==="canceled"?a.innerHTML='\u0E04\u0E38\u0E13\u0E04\u0E37\u0E2D <strong style="color: #00b14f; font-size: 1.1em;">\u0E2A\u0E21\u0E32\u0E0A\u0E34\u0E01</strong> \u0E01\u0E32\u0E23\u0E2A\u0E21\u0E31\u0E04\u0E23\u0E2A\u0E21\u0E32\u0E0A\u0E34\u0E01\u0E02\u0E2D\u0E07\u0E04\u0E38\u0E13 <span style="color: #dc3545; font-weight: bold;">\u0E16\u0E39\u0E01\u0E22\u0E01\u0E40\u0E25\u0E34\u0E01\u0E41\u0E25\u0E49\u0E27</span> \u0E08\u0E30\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19\u0E44\u0E14\u0E49\u0E16\u0E36\u0E07\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48 '.concat(S(n.currentPeriodEnd)):a.innerHTML='\u0E04\u0E38\u0E13\u0E04\u0E37\u0E2D <strong style="color: #00b14f; font-size: 1.1em;">\u0E2A\u0E21\u0E32\u0E0A\u0E34\u0E01</strong> \u0E01\u0E32\u0E23\u0E2A\u0E21\u0E31\u0E04\u0E23\u0E2A\u0E21\u0E32\u0E0A\u0E34\u0E01\u0E02\u0E2D\u0E07\u0E04\u0E38\u0E13 <span style="color: #007bff; text-decoration: underline;">\u0E08\u0E30\u0E15\u0E48\u0E2D\u0E2D\u0E32\u0E22\u0E38\u0E2D\u0E31\u0E15\u0E42\u0E19\u0E21\u0E31\u0E15\u0E34</span> \u0E43\u0E19\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48 '.concat(S(n.currentPeriodEnd));let u=r.div([],"mt-3");if(u.style.display="flex",u.style.gap="10px",!i){let y=await e.getSettings(),p=r.a(await o("\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2A\u0E21\u0E32\u0E0A\u0E34\u0E01"),{href:y[D],target:"_blank"});p.style.cssText="background-color: #fd7e14; color: white; padding: 8px 16px; border-radius: 5px; font-weight: bold; text-decoration: none; border: none; cursor: pointer;";let h=n.cancelAtPeriodEnd?"\u0E15\u0E48\u0E2D\u0E2D\u0E32\u0E22\u0E38\u0E2A\u0E21\u0E32\u0E0A\u0E34\u0E01\u0E2D\u0E35\u0E01\u0E04\u0E23\u0E31\u0E49\u0E07":"\u0E22\u0E01\u0E40\u0E25\u0E34\u0E01\u0E01\u0E32\u0E23\u0E2A\u0E21\u0E31\u0E04\u0E23\u0E2A\u0E21\u0E32\u0E0A\u0E34\u0E01",c=r.a(await o(h),{href:"#"});c.style.cssText="background-color: #fd7e14; color: white; padding: 8px 16px; border-radius: 5px; font-weight: bold; text-decoration: none; border: none; cursor: pointer;",c.addEventListener("click",d=>{d.preventDefault(),c.style.opacity="0.5",c.style.pointerEvents="none",s.updateSubscription({cancelAtPeriodEnd:!n.cancelAtPeriodEnd}).then(()=>window.location.reload()).catch(async M=>{e.showModal({title:await o("\u0E40\u0E01\u0E34\u0E14\u0E02\u0E49\u0E2D\u0E1C\u0E34\u0E14\u0E1E\u0E25\u0E32\u0E14"),content:await o("\u0E44\u0E21\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E14\u0E33\u0E40\u0E19\u0E34\u0E19\u0E01\u0E32\u0E23\u0E44\u0E14\u0E49\u0E43\u0E19\u0E02\u0E13\u0E30\u0E19\u0E35\u0E49 \u0E42\u0E1B\u0E23\u0E14\u0E25\u0E2D\u0E07\u0E43\u0E2B\u0E21\u0E48\u0E20\u0E32\u0E22\u0E2B\u0E25\u0E31\u0E07"),close:!0}),c.style.opacity="1",c.style.pointerEvents="auto"})}),u.appendChild(p),u.appendChild(c)}let m=r.div([a,u]),l=r.renderRow([r.p(await o("\u0E2A\u0E16\u0E32\u0E19\u0E30:"),"fw-bold")],[m]);l.style.borderBottom="1px solid #eee",l.style.paddingBottom="20px",l.style.marginBottom="20px",t.appendChild(l);let b=await(async y=>!y||y.length===0?[r.p(await o("\u0E22\u0E31\u0E07\u0E44\u0E21\u0E48\u0E21\u0E35\u0E1B\u0E23\u0E30\u0E27\u0E31\u0E15\u0E34\u0E01\u0E32\u0E23\u0E0A\u0E33\u0E23\u0E30\u0E40\u0E07\u0E34\u0E19"),"text-muted")]:Promise.all(y.map(async p=>{var L,A;let h=r.div([],"mb-4");h.appendChild(r.p(S(p.created),"fw-bold mb-2"));let c=r.div([]);c.style.display="grid",c.style.gridTemplateColumns="100px 1fr",c.style.marginBottom="8px",c.appendChild(r.p(await o("\u0E22\u0E2D\u0E14\u0E23\u0E27\u0E21"))),c.appendChild(r.p("".concat(((L=p.amountTotal)!=null?L:0)/100," ").concat(p.currency.toUpperCase())));let d=r.div([]);d.style.display="grid",d.style.gridTemplateColumns="100px 1fr",d.appendChild(r.p(await o("\u0E2A\u0E16\u0E32\u0E19\u0E30")));let M=(A=p.status)!=null?A:"canceled";return M.includes("paid")&&(M="paid"),d.appendChild(r.p(await o(M))),h.appendChild(c),h.appendChild(d),h})))((w=n.invoices)!=null?w:[]),x=r.div(b),I=r.renderRow([r.p(await o("\u0E1B\u0E23\u0E30\u0E27\u0E31\u0E15\u0E34\u0E01\u0E32\u0E23\u0E0A\u0E33\u0E23\u0E30\u0E40\u0E07\u0E34\u0E19:"),"fw-bold")],[x]);t.appendChild(I)};var R=(e,t)=>{"gtag"in window&&window.gtag("event",e,v({event_category:"premium-users"},t))},E=(e,t)=>new Intl.NumberFormat(navigator.language,{style:"currency",currency:t,minimumFractionDigits:0}).format(e),T=e=>{var t;return!((t=e.coupon)!=null&&t.valid)||!e.unit_amount?null:e.coupon.amount_off?(e.unit_amount-e.coupon.amount_off)/100:e.coupon.percent_off?Math.round((e.unit_amount-e.unit_amount*(e.coupon.percent_off/100))/100):null};var q=e=>{var t,n,o;return(t=e.coupon)!=null&&t.percent_off?"".concat(e.coupon.percent_off," %"):E((o=(n=e.coupon)==null?void 0:n.amount_off)!=null?o:0,e.currency)},K=async(e,t)=>{var n,o,s;return((n=e.recurring)==null?void 0:n.interval)==="month"?(await t("discount the first MONTHS_COUNT months.")).replace("MONTHS_COUNT",String((o=e.coupon)==null?void 0:o.duration_in_months)):((s=e.recurring)==null?void 0:s.interval)==="year"?t("discount for a whole year."):""},W=e=>{var n,o,s,r,g,i,a,u,m,l;let t=0;return((n=e.recurring)==null?void 0:n.interval)==="month"?(e.unit_amount&&((o=e.coupon)!=null&&o.amount_off)&&((s=e.coupon)!=null&&s.duration_in_months)&&(t=e.coupon.amount_off*((r=e.coupon)==null?void 0:r.duration_in_months)/100),e.unit_amount&&((g=e.coupon)!=null&&g.percent_off)&&((i=e.coupon)!=null&&i.duration_in_months)&&(t=e.unit_amount*(e.coupon.percent_off/100)*((a=e.coupon)==null?void 0:a.duration_in_months)/100)):((u=e.recurring)==null?void 0:u.interval)==="year"&&(e.unit_amount&&((m=e.coupon)!=null&&m.amount_off)&&(t=e.coupon.amount_off*12/100),e.unit_amount&&((l=e.coupon)!=null&&l.percent_off)&&(t=e.unit_amount*(e.coupon.percent_off/100)/100)),t},Q=async(e,t)=>{var s;let n=T(e),o;return n!==null?o='\n <span class="original-price">\n '.concat(E(e.unit_amount/100,e.currency),"</span>\n ").concat(E(n,e.currency)):o=E(e.unit_amount/100,e.currency),(s=e.recurring)!=null&&s.interval?o+=" / "+await t(e.recurring.interval):o+=" / "+await t("1 \u0E40\u0E14\u0E37\u0E2D\u0E19"),o},B=async({buttonOnClick:e,price:t,uiBuilder:n,translate:o})=>{var P,b;let s=T(t),r=await K(t,o),g=W(t),i=q(t),a=await Q(t,o),u=!!e,m="";(P=t.recurring)!=null&&P.interval?m=await o("Pay "+(t.recurring.interval==="day"?"daily":t.recurring.interval+"ly")):m=await o("\u0E0A\u0E33\u0E23\u0E30 1 \u0E40\u0E14\u0E37\u0E2D\u0E19 (QR \u0E1E\u0E23\u0E49\u0E2D\u0E21\u0E40\u0E1E\u0E22\u0E4C)");let l=n.a(a,{class:"primary-button peertube-button-link mb-4","data-testid":"premium_users-button-pay_"+(((b=t.recurring)==null?void 0:b.interval)||"onetime")});return u&&l.addEventListener("click",e),n.div([n.p(m,"fw-bold"),...s===null?[]:[n.ul([i+" "+r,(await o("You'll save AMOUNT_TO_SAVE.")).replace("AMOUNT_TO_SAVE",String(E(Math.round(g),t.currency)))],"text-start")],...u?[l]:[n.p(a,"mt-auto")]],"d-flex flex-grow-1 flex-column")};var j=async({peertubeHelpers:e,rootEl:t})=>{let n=new f(e.getAuthHeader),{translate:o}=e,s=new _(t),r=await n.getPrices();R("view_item_list",{items:r.map(i=>{var a,u,m,l,P;return{item_id:i.product,item_name:"Premium subscription",item_variant:(a=i.recurring)==null?void 0:a.interval,price:(u=i.unit_amount)!=null?u:0,discount:i.unit_amount?i.unit_amount-((m=T(i))!=null?m:0):0,coupon:(P=(l=i.coupon)==null?void 0:l.name)!=null?P:void 0,quantity:1}})});let g=await Promise.all(r.map(async i=>{let a=T(i),u=!i.recurring,m=u?"payment":"subscription",l=u?"promptpay":"card";return B({buttonOnClick:b=>{var I,w,y,p,h,c;let x=b.target;x.setAttribute("disabled","disabled"),R("add_to_cart",{value:a===null?((I=i.unit_amount)!=null?I:0)/100:a,currency:i.currency,items:[{item_id:i.product,item_name:"Premium subscription",item_variant:(w=i.recurring)==null?void 0:w.interval,price:(y=i.unit_amount)!=null?y:0,discount:i.unit_amount?i.unit_amount-(a!=null?a:0):0,coupon:(h=(p=i.coupon)==null?void 0:p.name)!=null?h:void 0,quantity:1}]}),n.createCheckout({allowPromotionCodes:!!new URLSearchParams(window.location.search).get("allowPromotionCodes"),couponId:(c=i.coupon)==null?void 0:c.id,priceId:i.id,paymentMode:m,paymentMethod:l}).then(({checkoutUrl:d})=>{window.location.href=d}).catch(async d=>{e.showModal({title:await o("Something went wrong"),content:await o("Couldn't create subcsription due to technical issues. Please try again later."),close:!0}),console.error("Couldn't create checkout",{err:d})}).finally(()=>{x.removeAttribute("disabled")})},price:i,uiBuilder:s,translate:o})}));t.appendChild(s.renderRow([s.h2(await o("Become premium"))],[s.p(await o("As a premium user you'll get access to premium videos and helps us to continue our work."))])),t.appendChild(s.renderRow([],[s.div(g.map(i=>s.div([i],"col-12 col-sm-6 d-flex")),"row")]))};var G=e=>async({rootEl:t})=>{let{translate:n}=e,o=new f(e.getAuthHeader);t.className="plugin-premium-users my-account",new URLSearchParams(window.location.search).get("checkout_status")==="success"&&(R("purchase"),e.showModal({title:await n("Payment succeeded"),cancel:{value:await n("Close")},content:await n("Your payment succeeded and will short be registered, it may take awhile depending on your payment method."),close:!0}));let r=await o.getSubscription();(await e.getUser()).isPremium?await k({peertubeHelpers:e,rootEl:t,subscription:r}):await j({peertubeHelpers:e,rootEl:t})};async function Rt({registerClientRoute:e,peertubeHelpers:t}){let{translate:n}=t,o=await t.getSettings();e({route:"/premium",parentRoute:"/my-account",menuItem:o[H]?{label:await n("Premium account")}:void 0,title:await n("Premium account"),onMount:G(t)})}export{Rt as register};
|