@devvit/web-view-scripts 0.13.10 → 0.13.11-next-2026-07-27-13-52-28-497871e93.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@devvit/web-view-scripts",
|
|
3
|
-
"version": "0.13.
|
|
3
|
+
"version": "0.13.11-next-2026-07-27-13-52-28-497871e93.0",
|
|
4
4
|
"license": "BSD-3-Clause",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -33,16 +33,16 @@
|
|
|
33
33
|
},
|
|
34
34
|
"types": "./dist/index.d.ts",
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@devvit/protos": "0.13.
|
|
37
|
-
"@devvit/shared": "0.13.
|
|
38
|
-
"@devvit/shared-types": "0.13.
|
|
36
|
+
"@devvit/protos": "0.13.11-next-2026-07-27-13-52-28-497871e93.0",
|
|
37
|
+
"@devvit/shared": "0.13.11-next-2026-07-27-13-52-28-497871e93.0",
|
|
38
|
+
"@devvit/shared-types": "0.13.11-next-2026-07-27-13-52-28-497871e93.0",
|
|
39
39
|
"html-to-image": "1.11.13",
|
|
40
40
|
"jwt-decode": "4.0.0"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"@ampproject/filesize": "4.3.0",
|
|
44
|
-
"@devvit/repo-tools": "0.13.
|
|
45
|
-
"@devvit/tsconfig": "0.13.
|
|
44
|
+
"@devvit/repo-tools": "0.13.11-next-2026-07-27-13-52-28-497871e93.0",
|
|
45
|
+
"@devvit/tsconfig": "0.13.11-next-2026-07-27-13-52-28-497871e93.0",
|
|
46
46
|
"@types/jsdom": "21.1.7",
|
|
47
47
|
"@types/node": "20.14.12",
|
|
48
48
|
"esbuild": "0.25.9",
|
|
@@ -62,5 +62,5 @@
|
|
|
62
62
|
}
|
|
63
63
|
},
|
|
64
64
|
"source": "./src/index.ts",
|
|
65
|
-
"gitHead": "
|
|
65
|
+
"gitHead": "f441e8b27ae3913bb27764734cd9908155594eb6"
|
|
66
66
|
}
|
package/scripts/devvit.v1.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(()=>{var s={hash:"8c65767",version:"0.13.10-dev"};var x="clientVersion",_="devvit.v1.min.js",R="screenshot.v1.min.js",F=`https://webview.devvit.net/scripts/${_}`;function D(e){if(e.currentScript&&"src"in e.currentScript)return new URL(e.currentScript.src).searchParams.get(x)??void 0}function I(e){if(e.currentScript&&"src"in e.currentScript)return e.currentScript.src}var l;(function(e){e[e.CLIENT_UNSPECIFIED=0]="CLIENT_UNSPECIFIED",e[e.ANDROID=1]="ANDROID",e[e.IOS=2]="IOS",e[e.SHREDDIT=3]="SHREDDIT",e[e.UNRECOGNIZED=-1]="UNRECOGNIZED"})(l||(l={}));var O;(function(e){e[e.HEIGHT_UNSPECIFIED=0]="HEIGHT_UNSPECIFIED",e[e.REGULAR=1]="REGULAR",e[e.TALL=2]="TALL",e[e.UNRECOGNIZED=-1]="UNRECOGNIZED"})(O||(O={}));function g(e,t){if(!e)throw Error(t)}var p;(function(e){e.COMMENT="t1_",e.ACCOUNT="t2_",e.LINK="t3_",e.MESSAGE="t4_",e.SUBREDDIT="t5_",e.AWARD="t6_"})(p||(p={}));function J(e){return!!e?.startsWith(p.ACCOUNT)}function K(e){return!!e?.startsWith(p.LINK)}function Q(e){return!!e?.startsWith(p.SUBREDDIT)}function X(e){g(J(e),`Expected account id to start with ${p.ACCOUNT}, got ${e}`)}function ee(e){g(K(e),`Expected link id to start with ${p.LINK}, got ${e}`)}function te(e){g(Q(e),`Expected subreddit id to start with ${p.SUBREDDIT}, got ${e}`)}function S(e){return X(e),e}function y(e){return ee(e),e}function C(e){return te(e),e}var d;(function(e){e[e.EFFECT_REALTIME_SUB=0]="EFFECT_REALTIME_SUB",e[e.EFFECT_RERENDER_UI=1]="EFFECT_RERENDER_UI",e[e.EFFECT_RELOAD_PART=2]="EFFECT_RELOAD_PART",e[e.EFFECT_SHOW_FORM=3]="EFFECT_SHOW_FORM",e[e.EFFECT_SHOW_TOAST=4]="EFFECT_SHOW_TOAST",e[e.EFFECT_NAVIGATE_TO_URL=5]="EFFECT_NAVIGATE_TO_URL",e[e.EFFECT_SET_INTERVALS=7]="EFFECT_SET_INTERVALS",e[e.EFFECT_CREATE_ORDER=8]="EFFECT_CREATE_ORDER",e[e.EFFECT_WEB_VIEW=9]="EFFECT_WEB_VIEW",e[e.EFFECT_CAN_RUN_AS_USER=11]="EFFECT_CAN_RUN_AS_USER",e[e.EFFECT_TELEMETRY=12]="EFFECT_TELEMETRY",e[e.EFFECT_UPDATE_REQUEST_CONTEXT=13]="EFFECT_UPDATE_REQUEST_CONTEXT",e[e.EFFECT_SCREENSHOT_RESPONSE=14]="EFFECT_SCREENSHOT_RESPONSE",e[e.EFFECT_LOGIN_PROMPT=15]="EFFECT_LOGIN_PROMPT",e[e.EFFECT_PROMOTED_TELEMETRY=16]="EFFECT_PROMOTED_TELEMETRY",e[e.UNRECOGNIZED=-1]="UNRECOGNIZED"})(d||(d={}));var v;(function(e){e[e.CLIENT=0]="CLIENT",e[e.UNRECOGNIZED=-1]="UNRECOGNIZED"})(v||(v={}));var M="devvit-internal",u=(e,t)=>{let r={...e,realtimeEffect:e.realtime,id:t,scope:v.CLIENT,type:M};(e.showToast||e.navigateToUrl)&&(r.effect=e),parent.postMessage(r,"*")},L=e=>new Promise(t=>{let r={...e,realtimeEffect:e.realtime,scope:v.CLIENT,type:M};(e.showForm||e.type===d.EFFECT_CAN_RUN_AS_USER)&&(r.effect=e);let n=crypto.randomUUID();r.id=n;let o=i=>{i.data?.type==="devvit-message"&&i.data?.data?.id===n&&(t(i.data.data),removeEventListener("message",o))};addEventListener("message",o),parent.postMessage(r,"*")});var m=class extends Error{};m.prototype.name="InvalidTokenError";function ne(e){return decodeURIComponent(atob(e).replace(/(.)/g,(t,r)=>{let n=r.charCodeAt(0).toString(16).toUpperCase();return n.length<2&&(n="0"+n),"%"+n}))}function re(e){let t=e.replace(/-/g,"+").replace(/_/g,"/");switch(t.length%4){case 0:break;case 2:t+="==";break;case 3:t+="=";break;default:throw new Error("base64 string is not of the correct length")}try{return ne(t)}catch{return atob(t)}}function w(e,t){if(typeof e!="string")throw new m("Invalid token specified: must be a string");t||(t={});let r=t.header===!0?0:1,n=e.split(".")[r];if(typeof n!="string")throw new m(`Invalid token specified: missing part #${r+1}`);let o;try{o=re(n)}catch(i){throw new m(`Invalid token specified: invalid base64 for part #${r+1} (${i.message})`)}try{return JSON.parse(o)}catch(i){throw new m(`Invalid token specified: invalid json for part #${r+1} (${i.message})`)}}function A(e){if(e)try{return w(e)?.devvit}catch(t){throw Error("token decode failure",{cause:t})}}function U(){setInterval(ie,6e4)}async function ie(){let{exp:e}=w(globalThis.devvit.token);e&&e-Date.now()/1e3>300||await h()}async function h(){let e=await L({type:d.EFFECT_UPDATE_REQUEST_CONTEXT,updateRequestContext:{}});if(!e?.updateRequestContext?.signedRequestContext){console.error("Failed to refresh token");return}V(e.updateRequestContext.signedRequestContext)}var W=(e,t,r)=>{let n=ae(r.name,t.hash),o=de(n),i=n?.appPermissionState;o?.name==="ANDROID"&&(o.version.yyyy<2026||o.version.yyyy===2026&&o.version.release<=5)&&(i=void 0);let a=A(n.signedRequestContext),f;if(a?f=oe(a,o,n.postData):n.webViewContext&&(f=se(n.webViewContext,o,n.postData)),!f)throw Error("no context");let H=n.webViewClientData;globalThis.devvit={context:f,dependencies:{client:D(e),webViewScripts:s},entrypoints:H?.appConfig?.entrypoints??{},share:n?.shareParam?{userData:n?.shareParam.userData}:void 0,adPayload:n?.adPayload,appPermissionState:i,token:n.signedRequestContext||n.webbitToken,webViewMode:n?.viewMode,startTime:n?.startTime??void 0,refreshToken:h}};function k(e){devvit.webViewMode=e}function V(e){globalThis.devvit.token=e}function oe(e,t,r){if(!e.app)throw Error("no RequestContext.app");if(!e.post)throw Error("no RequestContext.post");if(!e.subreddit)throw Error("no RequestContext.subreddit");return{appName:e.app.name,appSlug:e.app.slug,appVersion:e.app.version,client:t,commentId:void 0,loid:e.user?.devvitLoid??e.user?.devvit_loid,postAuthorId:S(e.post.author),postData:r?.developerData,postId:y(e.post.id),snoovatar:e.user?.snoovatar,subredditId:C(e.subreddit.id),subredditName:e.subreddit.name,userId:e.user?.id?S(e.user.id):void 0,username:e.user?.name}}function se(e,t,r){return{appName:e.appName,appSlug:e.appName,appVersion:e.appVersion,client:t,commentId:void 0,loid:void 0,postData:r?.developerData,postAuthorId:void 0,postId:y(e.postId),snoovatar:void 0,subredditId:C(e.subredditId),subredditName:e.subredditName,userId:e.userId?S(e.userId):void 0,username:void 0}}function ae(e,t){if(e)return JSON.parse(e);let r=t?.slice(1);if(!r)throw Error("no bridge context");return JSON.parse(decodeURIComponent(r))}function de(e){if(!(e.client!==l.ANDROID&&e.client!==l.IOS||!e.nativeVersion))return{name:e.client===l.ANDROID?"ANDROID":"IOS",version:e.nativeVersion}}async function ce(e,t,r,n,o){let i=new Request(n,o);return ue(r,new URL(i.url))&&i.headers.set("Authorization",`Bearer ${e.token}`),await t(i)}function P(){globalThis.fetch=ce.bind(void 0,globalThis.devvit,globalThis.fetch,location)}function ue(e,t){return t.origin===e.origin}var pe=new URL(R,F).toString();function me(e){let t=e?.trim();if(t)try{let r=new URL(t);if(r.pathname.endsWith(`/${_}`))return new URL(R,r).toString()}catch{}return pe}async function fe(e,t){let r=e.data;if(r?.type!=="devvit-message"||r.data==null)return;let n=r.data;if(n.screenshotRequest==null||typeof n.id!="string")return;let o,i;try{let a=me(t),{captureScreenshot:f}=await import(a);o=await f()}catch(a){i=a instanceof Error?a.message:String(a)}u({type:d.EFFECT_SCREENSHOT_RESPONSE,screenshot:{dataUrl:o,error:i}},n.id)}function j(e){addEventListener("message",t=>{fe(t,e)})}function G(e){let t=le(e.target,e.isTrusted);u({type:d.EFFECT_TELEMETRY,telemetry:{event:t.event,click:t},analytics:t})}function le(e,t){let{definition:r,elemTrackId:n}=Ee(e,t);return{event:"click",definition:r,elemTrackId:n}}function Ee(e,t){let r=ve(e);if(!r)return{definition:"default",elemTrackId:void 0};let n="default";t&&globalThis.window.getComputedStyle(r)?.getPropertyValue("cursor")==="pointer"&&(n="strict");let o,i=r;for(;i;){if(o===void 0){let a=i.getAttribute("data-track-id");a?o=a:i.id&&(o=i.id)}if(t&&n==="default"&&Te(i)&&(n="strict"),o!==void 0&&(!t||n==="strict"))break;i=i.parentElement}return{definition:n,elemTrackId:o}}function ve(e){if(!e||typeof e!="object"||!("nodeType"in e))return;let t=e;return t.nodeType===1?t:t.parentElement??void 0}function Te(e){return["A","BUTTON","CANVAS","INPUT","SELECT","TEXTAREA","LABEL"].includes(e.tagName)||["true","plaintext-only"].includes(e.getAttribute("contenteditable")??"")}var c,E,T=!1;function B(){we(),ge(),Se()}function ge(){addEventListener("load",()=>{let e=performance.timeOrigin,t=performance.now(),r=performance.timeOrigin+t,n={event:"web-view-loaded",timeStart:e,timeEnd:r,duration:t};u({type:d.EFFECT_TELEMETRY,telemetry:{event:n.event,loaded:n},analytics:n})})}function Se(){document.addEventListener("click",e=>{G(e)},{passive:!0})}function b(){return performance.getEntriesByType("navigation")[0]}function $(){let e=b();if(!(!E||!e))return{spanName:"web_view_time_to_first_byte",timeStart:E+e.requestStart,timeEnd:E+e.responseStart}}function N(e,t){return[{spanName:e,timeStart:performance.timeOrigin,timeEnd:performance.timeOrigin+t}]}function be(){if(E)return{spanName:"web_view_initialization",timeStart:E,timeEnd:performance.timeOrigin}}function Y(){let e=b(),t=performance.getEntriesByType("paint").find(n=>n.name==="first-contentful-paint")?.startTime,r=ye(e);if(!(t==null||r==null||!e||e.responseStart<=0))return{spanName:"web_view_render_duration",timeStart:performance.timeOrigin+e.responseStart,timeEnd:performance.timeOrigin+Math.max(t,r)}}function _e(){let t=performance.getEntriesByType("paint").find(r=>r.name==="first-contentful-paint");return t?N("web_view_first_contentful_paint",t.startTime):[]}function Re(){return N("web_view_load",performance.now())}function ye(e=b()){return e&&e.loadEventEnd>0?e.loadEventEnd:void 0}function Ce(){if(T)return;let e=Y();e&&(T=!0,u({type:d.EFFECT_TELEMETRY,telemetry:{metrics:{metrics:[e]}}}))}function q(){let t=b()?.domInteractive;return t?N("web_view_time_to_interactive",t):[]}function we(){c=[],E=globalThis.devvit?.startTime,T=!1;let e=be();if(e&&c.push(e),document.readyState==="complete"){let n=$();n&&c.push(n)}let t=new PerformanceObserver(n=>{for(let o of n.getEntries())if(o.name==="first-contentful-paint"){let i=_e();if(t.disconnect(),i.length===0)break;let a=T?void 0:Y();a&&(T=!0),document.readyState==="complete"?u({type:d.EFFECT_TELEMETRY,telemetry:{metrics:{metrics:a?[...i,a]:i}}}):(c.push(...i),a&&c.push(a));break}});t.observe({type:"paint",buffered:!0});let r=new PerformanceObserver(n=>{n.getEntries().find(i=>i.entryType==="navigation")&&(r.disconnect(),Ce())});r.observe({type:"navigation",buffered:!0}),document.readyState==="loading"?globalThis.addEventListener("DOMContentLoaded",()=>{c.push(...q())}):c.push(...q()),globalThis.addEventListener("load",()=>{let n=$();n&&c.push(n),c.push(...Re()),u({type:d.EFFECT_TELEMETRY,telemetry:{metrics:{metrics:c}}})})}function Z(){addEventListener("message",he)}function he(e){e.data?.type==="devvit-message"&&e.data?.data?.immersiveModeEvent&&k(e.data.data.immersiveModeEvent.immersiveMode)}W(document,location,window);B();P();j(I(document)??"");U();Z();})();
|
|
1
|
+
"use strict";(()=>{var s={hash:"497871e",version:"0.13.11-dev"};var x="clientVersion",_="devvit.v1.min.js",R="screenshot.v1.min.js",F=`https://webview.devvit.net/scripts/${_}`;function D(e){if(e.currentScript&&"src"in e.currentScript)return new URL(e.currentScript.src).searchParams.get(x)??void 0}function I(e){if(e.currentScript&&"src"in e.currentScript)return e.currentScript.src}var l;(function(e){e[e.CLIENT_UNSPECIFIED=0]="CLIENT_UNSPECIFIED",e[e.ANDROID=1]="ANDROID",e[e.IOS=2]="IOS",e[e.SHREDDIT=3]="SHREDDIT",e[e.UNRECOGNIZED=-1]="UNRECOGNIZED"})(l||(l={}));var O;(function(e){e[e.HEIGHT_UNSPECIFIED=0]="HEIGHT_UNSPECIFIED",e[e.REGULAR=1]="REGULAR",e[e.TALL=2]="TALL",e[e.UNRECOGNIZED=-1]="UNRECOGNIZED"})(O||(O={}));function g(e,t){if(!e)throw Error(t)}var p;(function(e){e.COMMENT="t1_",e.ACCOUNT="t2_",e.LINK="t3_",e.MESSAGE="t4_",e.SUBREDDIT="t5_",e.AWARD="t6_"})(p||(p={}));function J(e){return!!e?.startsWith(p.ACCOUNT)}function K(e){return!!e?.startsWith(p.LINK)}function Q(e){return!!e?.startsWith(p.SUBREDDIT)}function X(e){g(J(e),`Expected account id to start with ${p.ACCOUNT}, got ${e}`)}function ee(e){g(K(e),`Expected link id to start with ${p.LINK}, got ${e}`)}function te(e){g(Q(e),`Expected subreddit id to start with ${p.SUBREDDIT}, got ${e}`)}function S(e){return X(e),e}function y(e){return ee(e),e}function C(e){return te(e),e}var d;(function(e){e[e.EFFECT_REALTIME_SUB=0]="EFFECT_REALTIME_SUB",e[e.EFFECT_RERENDER_UI=1]="EFFECT_RERENDER_UI",e[e.EFFECT_RELOAD_PART=2]="EFFECT_RELOAD_PART",e[e.EFFECT_SHOW_FORM=3]="EFFECT_SHOW_FORM",e[e.EFFECT_SHOW_TOAST=4]="EFFECT_SHOW_TOAST",e[e.EFFECT_NAVIGATE_TO_URL=5]="EFFECT_NAVIGATE_TO_URL",e[e.EFFECT_SET_INTERVALS=7]="EFFECT_SET_INTERVALS",e[e.EFFECT_CREATE_ORDER=8]="EFFECT_CREATE_ORDER",e[e.EFFECT_WEB_VIEW=9]="EFFECT_WEB_VIEW",e[e.EFFECT_CAN_RUN_AS_USER=11]="EFFECT_CAN_RUN_AS_USER",e[e.EFFECT_TELEMETRY=12]="EFFECT_TELEMETRY",e[e.EFFECT_UPDATE_REQUEST_CONTEXT=13]="EFFECT_UPDATE_REQUEST_CONTEXT",e[e.EFFECT_SCREENSHOT_RESPONSE=14]="EFFECT_SCREENSHOT_RESPONSE",e[e.EFFECT_LOGIN_PROMPT=15]="EFFECT_LOGIN_PROMPT",e[e.EFFECT_PROMOTED_TELEMETRY=16]="EFFECT_PROMOTED_TELEMETRY",e[e.UNRECOGNIZED=-1]="UNRECOGNIZED"})(d||(d={}));var v;(function(e){e[e.CLIENT=0]="CLIENT",e[e.UNRECOGNIZED=-1]="UNRECOGNIZED"})(v||(v={}));var M="devvit-internal",u=(e,t)=>{let r={...e,realtimeEffect:e.realtime,id:t,scope:v.CLIENT,type:M};(e.showToast||e.navigateToUrl)&&(r.effect=e),parent.postMessage(r,"*")},L=e=>new Promise(t=>{let r={...e,realtimeEffect:e.realtime,scope:v.CLIENT,type:M};(e.showForm||e.type===d.EFFECT_CAN_RUN_AS_USER)&&(r.effect=e);let n=crypto.randomUUID();r.id=n;let o=i=>{i.data?.type==="devvit-message"&&i.data?.data?.id===n&&(t(i.data.data),removeEventListener("message",o))};addEventListener("message",o),parent.postMessage(r,"*")});var m=class extends Error{};m.prototype.name="InvalidTokenError";function ne(e){return decodeURIComponent(atob(e).replace(/(.)/g,(t,r)=>{let n=r.charCodeAt(0).toString(16).toUpperCase();return n.length<2&&(n="0"+n),"%"+n}))}function re(e){let t=e.replace(/-/g,"+").replace(/_/g,"/");switch(t.length%4){case 0:break;case 2:t+="==";break;case 3:t+="=";break;default:throw new Error("base64 string is not of the correct length")}try{return ne(t)}catch{return atob(t)}}function w(e,t){if(typeof e!="string")throw new m("Invalid token specified: must be a string");t||(t={});let r=t.header===!0?0:1,n=e.split(".")[r];if(typeof n!="string")throw new m(`Invalid token specified: missing part #${r+1}`);let o;try{o=re(n)}catch(i){throw new m(`Invalid token specified: invalid base64 for part #${r+1} (${i.message})`)}try{return JSON.parse(o)}catch(i){throw new m(`Invalid token specified: invalid json for part #${r+1} (${i.message})`)}}function A(e){if(e)try{return w(e)?.devvit}catch(t){throw Error("token decode failure",{cause:t})}}function U(){setInterval(ie,6e4)}async function ie(){let{exp:e}=w(globalThis.devvit.token);e&&e-Date.now()/1e3>300||await h()}async function h(){let e=await L({type:d.EFFECT_UPDATE_REQUEST_CONTEXT,updateRequestContext:{}});if(!e?.updateRequestContext?.signedRequestContext){console.error("Failed to refresh token");return}V(e.updateRequestContext.signedRequestContext)}var W=(e,t,r)=>{let n=ae(r.name,t.hash),o=de(n),i=n?.appPermissionState;o?.name==="ANDROID"&&(o.version.yyyy<2026||o.version.yyyy===2026&&o.version.release<=5)&&(i=void 0);let a=A(n.signedRequestContext),f;if(a?f=oe(a,o,n.postData):n.webViewContext&&(f=se(n.webViewContext,o,n.postData)),!f)throw Error("no context");let H=n.webViewClientData;globalThis.devvit={context:f,dependencies:{client:D(e),webViewScripts:s},entrypoints:H?.appConfig?.entrypoints??{},share:n?.shareParam?{userData:n?.shareParam.userData}:void 0,adPayload:n?.adPayload,appPermissionState:i,token:n.signedRequestContext||n.webbitToken,webViewMode:n?.viewMode,startTime:n?.startTime??void 0,refreshToken:h}};function k(e){devvit.webViewMode=e}function V(e){globalThis.devvit.token=e}function oe(e,t,r){if(!e.app)throw Error("no RequestContext.app");if(!e.post)throw Error("no RequestContext.post");if(!e.subreddit)throw Error("no RequestContext.subreddit");return{appName:e.app.name,appSlug:e.app.slug,appVersion:e.app.version,client:t,commentId:void 0,loid:e.user?.devvitLoid??e.user?.devvit_loid,postAuthorId:S(e.post.author),postData:r?.developerData,postId:y(e.post.id),snoovatar:e.user?.snoovatar,subredditId:C(e.subreddit.id),subredditName:e.subreddit.name,userId:e.user?.id?S(e.user.id):void 0,username:e.user?.name}}function se(e,t,r){return{appName:e.appName,appSlug:e.appName,appVersion:e.appVersion,client:t,commentId:void 0,loid:void 0,postData:r?.developerData,postAuthorId:void 0,postId:y(e.postId),snoovatar:void 0,subredditId:C(e.subredditId),subredditName:e.subredditName,userId:e.userId?S(e.userId):void 0,username:void 0}}function ae(e,t){if(e)return JSON.parse(e);let r=t?.slice(1);if(!r)throw Error("no bridge context");return JSON.parse(decodeURIComponent(r))}function de(e){if(!(e.client!==l.ANDROID&&e.client!==l.IOS||!e.nativeVersion))return{name:e.client===l.ANDROID?"ANDROID":"IOS",version:e.nativeVersion}}async function ce(e,t,r,n,o){let i=new Request(n,o);return ue(r,new URL(i.url))&&i.headers.set("Authorization",`Bearer ${e.token}`),await t(i)}function P(){globalThis.fetch=ce.bind(void 0,globalThis.devvit,globalThis.fetch,location)}function ue(e,t){return t.origin===e.origin}var pe=new URL(R,F).toString();function me(e){let t=e?.trim();if(t)try{let r=new URL(t);if(r.pathname.endsWith(`/${_}`))return new URL(R,r).toString()}catch{}return pe}async function fe(e,t){let r=e.data;if(r?.type!=="devvit-message"||r.data==null)return;let n=r.data;if(n.screenshotRequest==null||typeof n.id!="string")return;let o,i;try{let a=me(t),{captureScreenshot:f}=await import(a);o=await f()}catch(a){i=a instanceof Error?a.message:String(a)}u({type:d.EFFECT_SCREENSHOT_RESPONSE,screenshot:{dataUrl:o,error:i}},n.id)}function j(e){addEventListener("message",t=>{fe(t,e)})}function G(e){let t=le(e.target,e.isTrusted);u({type:d.EFFECT_TELEMETRY,telemetry:{event:t.event,click:t},analytics:t})}function le(e,t){let{definition:r,elemTrackId:n}=Ee(e,t);return{event:"click",definition:r,elemTrackId:n}}function Ee(e,t){let r=ve(e);if(!r)return{definition:"default",elemTrackId:void 0};let n="default";t&&globalThis.window.getComputedStyle(r)?.getPropertyValue("cursor")==="pointer"&&(n="strict");let o,i=r;for(;i;){if(o===void 0){let a=i.getAttribute("data-track-id");a?o=a:i.id&&(o=i.id)}if(t&&n==="default"&&Te(i)&&(n="strict"),o!==void 0&&(!t||n==="strict"))break;i=i.parentElement}return{definition:n,elemTrackId:o}}function ve(e){if(!e||typeof e!="object"||!("nodeType"in e))return;let t=e;return t.nodeType===1?t:t.parentElement??void 0}function Te(e){return["A","BUTTON","CANVAS","INPUT","SELECT","TEXTAREA","LABEL"].includes(e.tagName)||["true","plaintext-only"].includes(e.getAttribute("contenteditable")??"")}var c,E,T=!1;function B(){we(),ge(),Se()}function ge(){addEventListener("load",()=>{let e=performance.timeOrigin,t=performance.now(),r=performance.timeOrigin+t,n={event:"web-view-loaded",timeStart:e,timeEnd:r,duration:t};u({type:d.EFFECT_TELEMETRY,telemetry:{event:n.event,loaded:n},analytics:n})})}function Se(){document.addEventListener("click",e=>{G(e)},{passive:!0})}function b(){return performance.getEntriesByType("navigation")[0]}function $(){let e=b();if(!(!E||!e))return{spanName:"web_view_time_to_first_byte",timeStart:E+e.requestStart,timeEnd:E+e.responseStart}}function N(e,t){return[{spanName:e,timeStart:performance.timeOrigin,timeEnd:performance.timeOrigin+t}]}function be(){if(E)return{spanName:"web_view_initialization",timeStart:E,timeEnd:performance.timeOrigin}}function Y(){let e=b(),t=performance.getEntriesByType("paint").find(n=>n.name==="first-contentful-paint")?.startTime,r=ye(e);if(!(t==null||r==null||!e||e.responseStart<=0))return{spanName:"web_view_render_duration",timeStart:performance.timeOrigin+e.responseStart,timeEnd:performance.timeOrigin+Math.max(t,r)}}function _e(){let t=performance.getEntriesByType("paint").find(r=>r.name==="first-contentful-paint");return t?N("web_view_first_contentful_paint",t.startTime):[]}function Re(){return N("web_view_load",performance.now())}function ye(e=b()){return e&&e.loadEventEnd>0?e.loadEventEnd:void 0}function Ce(){if(T)return;let e=Y();e&&(T=!0,u({type:d.EFFECT_TELEMETRY,telemetry:{metrics:{metrics:[e]}}}))}function q(){let t=b()?.domInteractive;return t?N("web_view_time_to_interactive",t):[]}function we(){c=[],E=globalThis.devvit?.startTime,T=!1;let e=be();if(e&&c.push(e),document.readyState==="complete"){let n=$();n&&c.push(n)}let t=new PerformanceObserver(n=>{for(let o of n.getEntries())if(o.name==="first-contentful-paint"){let i=_e();if(t.disconnect(),i.length===0)break;let a=T?void 0:Y();a&&(T=!0),document.readyState==="complete"?u({type:d.EFFECT_TELEMETRY,telemetry:{metrics:{metrics:a?[...i,a]:i}}}):(c.push(...i),a&&c.push(a));break}});t.observe({type:"paint",buffered:!0});let r=new PerformanceObserver(n=>{n.getEntries().find(i=>i.entryType==="navigation")&&(r.disconnect(),Ce())});r.observe({type:"navigation",buffered:!0}),document.readyState==="loading"?globalThis.addEventListener("DOMContentLoaded",()=>{c.push(...q())}):c.push(...q()),globalThis.addEventListener("load",()=>{let n=$();n&&c.push(n),c.push(...Re()),u({type:d.EFFECT_TELEMETRY,telemetry:{metrics:{metrics:c}}})})}function Z(){addEventListener("message",he)}function he(e){e.data?.type==="devvit-message"&&e.data?.data?.immersiveModeEvent&&k(e.data.data.immersiveModeEvent.immersiveMode)}W(document,location,window);B();P();j(I(document)??"");U();Z();})();
|
|
2
2
|
//# sourceMappingURL=devvit.v1.min.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["<define:globalThis.webViewScriptsVersion>", "../../../shared-types/dist/web-view-scripts-constants.js", "../../src/client.ts", "../../../protos/dist/json/devvit/ui/effects/web_view/v1alpha/context.js", "../../../shared-types/dist/assert.js", "../../../shared-types/dist/tid.js", "../../../protos/dist/json/devvit/ui/effects/v1alpha/effect.js", "../../../protos/dist/json/devvit/ui/effects/web_view/v1alpha/post_message.js", "../../../shared-types/dist/client/emit-effect.js", "../../../../node_modules/jwt-decode/build/esm/index.js", "../../src/token.ts", "../../src/devvit-global.ts", "../../src/fetch.ts", "../../src/screenshot-listener.ts", "../../../shared-types/dist/client/telemetry.js", "../../src/telemetry.ts", "../../src/web-view-mode.ts", "../../src/devvit.v1.ts"],
|
|
4
|
-
"sourcesContent": ["{\"hash\":\"8c65767\",\"version\":\"0.13.10-dev\"}", "/**\n * The `@devvit/client` version query parameter name the web view's document\n * script tag:\n *\n * <script src=\"https://webview.devvit.net/scripts/devvit.v1.min.js?clientVersion=1.2.3\"></script>\n *\n * The value is the version of `@devvit/client` bundled with the app.\n * `@devvit/client` may have runtime dependencies on\n * `@devvit/web-view-scripts` (`devvit.v1.min.js`) which is not bundled. The\n * client version can be used to specialize behavior to match the static\n * expectations of the `@devvit/client` version.\n */\nexport const clientVersionQueryParam = 'clientVersion';\n/** Bootstrap WebView script file name. */\nexport const devvitScriptFileName = 'devvit.v1.min.js';\n/** Screenshot capture WebView script file name. */\nexport const screenshotScriptFileName = 'screenshot.v1.min.js';\n/** CDN URL for the WebView bootstrap script. */\nexport const devvitScriptUrl = `https://webview.devvit.net/scripts/${devvitScriptFileName}`;\n", "import { clientVersionQueryParam } from '@devvit/shared-types/web-view-scripts-constants.js';\n\n/**\n * Queries the client version (eg, `'1.2.3'`) from the iframe document's script\n * tag:\n *\n * <script src=\"https://webview.devvit.net/scripts/devvit.v1.min.js?clientVersion=1.2.3\"></script>\n *\n * See `clientVersionQueryParam`.\n */\nexport function queryClientVersion(document: {\n readonly currentScript: { readonly src: string } | SVGScriptElement | null;\n}): string | undefined {\n if (document.currentScript && 'src' in document.currentScript)\n return (\n new URL(document.currentScript.src).searchParams.get(clientVersionQueryParam) ?? undefined\n );\n}\n\n/** Queries the current script `src` from the active document. */\nexport function queryCurrentScriptSrc(document: {\n readonly currentScript: { readonly src: string } | SVGScriptElement | null;\n}): string | undefined {\n if (document.currentScript && 'src' in document.currentScript) {\n return document.currentScript.src;\n }\n}\n", "/**\n * #context.ts\n *\n * Code generated by ts-proto. DO NOT EDIT.\n * @packageDocumentation\n */\n/* eslint-disable */\n/** The user client hosting the web view. */\nexport var Client;\n(function (Client) {\n Client[Client[\"CLIENT_UNSPECIFIED\"] = 0] = \"CLIENT_UNSPECIFIED\";\n Client[Client[\"ANDROID\"] = 1] = \"ANDROID\";\n Client[Client[\"IOS\"] = 2] = \"IOS\";\n Client[Client[\"SHREDDIT\"] = 3] = \"SHREDDIT\";\n Client[Client[\"UNRECOGNIZED\"] = -1] = \"UNRECOGNIZED\";\n})(Client || (Client = {}));\n/**\n * Inline height of post.\n *\n * @deprecated\n */\nexport var Height;\n(function (Height) {\n Height[Height[\"HEIGHT_UNSPECIFIED\"] = 0] = \"HEIGHT_UNSPECIFIED\";\n Height[Height[\"REGULAR\"] = 1] = \"REGULAR\";\n Height[Height[\"TALL\"] = 2] = \"TALL\";\n Height[Height[\"UNRECOGNIZED\"] = -1] = \"UNRECOGNIZED\";\n})(Height || (Height = {}));\n", "export function assert(condition, msg) {\n if (!condition)\n throw Error(msg);\n}\n", "import { assert } from './assert.js';\n/**\n * - **C**omment (T1).\n * - **A**ccount (T2).\n * - **L**ink (T3).\n * - **M**essage (T4).\n * - **S**ubreddit (T5).\n * - **T**rophies (T6).\n */\nexport var T_PREFIX;\n(function (T_PREFIX) {\n T_PREFIX[\"COMMENT\"] = \"t1_\";\n T_PREFIX[\"ACCOUNT\"] = \"t2_\";\n T_PREFIX[\"LINK\"] = \"t3_\";\n T_PREFIX[\"MESSAGE\"] = \"t4_\";\n T_PREFIX[\"SUBREDDIT\"] = \"t5_\";\n T_PREFIX[\"AWARD\"] = \"t6_\";\n})(T_PREFIX || (T_PREFIX = {}));\n// type guards\nexport function isT1(id) {\n return !!id?.startsWith(T_PREFIX.COMMENT);\n}\nexport function isT2(id) {\n return !!id?.startsWith(T_PREFIX.ACCOUNT);\n}\nexport function isT3(id) {\n return !!id?.startsWith(T_PREFIX.LINK);\n}\nexport function isT4(id) {\n return !!id?.startsWith(T_PREFIX.MESSAGE);\n}\nexport function isT5(id) {\n return !!id?.startsWith(T_PREFIX.SUBREDDIT);\n}\nexport function isT6(id) {\n return !!id?.startsWith(T_PREFIX.AWARD);\n}\n// assertion functions\nexport function assertT1(id) {\n assert(isT1(id), `Expected comment id to start with ${T_PREFIX.COMMENT}, got ${id}`);\n}\nexport function assertT2(id) {\n assert(isT2(id), `Expected account id to start with ${T_PREFIX.ACCOUNT}, got ${id}`);\n}\nexport function assertT3(id) {\n assert(isT3(id), `Expected link id to start with ${T_PREFIX.LINK}, got ${id}`);\n}\nexport function assertT4(id) {\n assert(isT4(id), `Expected message id to start with ${T_PREFIX.MESSAGE}, got ${id}`);\n}\nexport function assertT5(id) {\n assert(isT5(id), `Expected subreddit id to start with ${T_PREFIX.SUBREDDIT}, got ${id}`);\n}\nexport function assertT6(id) {\n assert(isT6(id), `Expected award id to start with ${T_PREFIX.AWARD}, got ${id}`);\n}\n// factory functions\nexport function T1(id) {\n assertT1(id);\n return id;\n}\nexport function T2(id) {\n assertT2(id);\n return id;\n}\nexport function T3(id) {\n assertT3(id);\n return id;\n}\nexport function T4(id) {\n assertT4(id);\n return id;\n}\nexport function T5(id) {\n assertT5(id);\n return id;\n}\nexport function T6(id) {\n assertT6(id);\n return id;\n}\nexport function asTid(id) {\n if (isT1(id)) {\n return T1(id);\n }\n if (isT2(id)) {\n return T2(id);\n }\n if (isT3(id)) {\n return T3(id);\n }\n if (isT4(id)) {\n return T4(id);\n }\n if (isT5(id)) {\n return T5(id);\n }\n if (isT6(id)) {\n return T6(id);\n }\n throw new Error(`Expected thing id to start with ${Object.values(T_PREFIX).join(', ')} got ${id}}`);\n}\n", "/**\n * #effect.ts\n *\n * Code generated by ts-proto. DO NOT EDIT.\n * @packageDocumentation\n */\n/* eslint-disable */\nexport var EffectType;\n(function (EffectType) {\n /**\n * EFFECT_REALTIME_SUB - Notify client to synchronize its realtime subscriptions\n *\n * @deprecated\n */\n EffectType[EffectType[\"EFFECT_REALTIME_SUB\"] = 0] = \"EFFECT_REALTIME_SUB\";\n /**\n * EFFECT_RERENDER_UI - Trigger a re-render for apps that have visible UI\n *\n * @deprecated\n */\n EffectType[EffectType[\"EFFECT_RERENDER_UI\"] = 1] = \"EFFECT_RERENDER_UI\";\n /**\n * EFFECT_RELOAD_PART - Notify the client that parts of a subreddit, post, or comment should be reloaded\n *\n * @deprecated\n */\n EffectType[EffectType[\"EFFECT_RELOAD_PART\"] = 2] = \"EFFECT_RELOAD_PART\";\n /** EFFECT_SHOW_FORM - Display a user input form */\n EffectType[EffectType[\"EFFECT_SHOW_FORM\"] = 3] = \"EFFECT_SHOW_FORM\";\n /** EFFECT_SHOW_TOAST - Display a transient toast message */\n EffectType[EffectType[\"EFFECT_SHOW_TOAST\"] = 4] = \"EFFECT_SHOW_TOAST\";\n /** EFFECT_NAVIGATE_TO_URL - Notify the client to navigate to a URL */\n EffectType[EffectType[\"EFFECT_NAVIGATE_TO_URL\"] = 5] = \"EFFECT_NAVIGATE_TO_URL\";\n /**\n * EFFECT_SET_INTERVALS - This updates the list of active timers.\n *\n * @deprecated\n */\n EffectType[EffectType[\"EFFECT_SET_INTERVALS\"] = 7] = \"EFFECT_SET_INTERVALS\";\n /**\n * EFFECT_CREATE_ORDER - This starts a purchase flow\n *\n * @deprecated\n */\n EffectType[EffectType[\"EFFECT_CREATE_ORDER\"] = 8] = \"EFFECT_CREATE_ORDER\";\n /**\n * EFFECT_WEB_VIEW - Control and communicate with WebViews\n *\n * @deprecated\n */\n EffectType[EffectType[\"EFFECT_WEB_VIEW\"] = 9] = \"EFFECT_WEB_VIEW\";\n /**\n * EFFECT_CAN_RUN_AS_USER - Check if the app can execute some actions as the user\n *\n * @deprecated\n */\n EffectType[EffectType[\"EFFECT_CAN_RUN_AS_USER\"] = 11] = \"EFFECT_CAN_RUN_AS_USER\";\n /**\n * EFFECT_TELEMETRY - Statistical data event for analytics.\n *\n * @deprecated\n */\n EffectType[EffectType[\"EFFECT_TELEMETRY\"] = 12] = \"EFFECT_TELEMETRY\";\n /**\n * EFFECT_UPDATE_REQUEST_CONTEXT - Request an updated signed request context\n *\n * @deprecated\n */\n EffectType[EffectType[\"EFFECT_UPDATE_REQUEST_CONTEXT\"] = 13] = \"EFFECT_UPDATE_REQUEST_CONTEXT\";\n /**\n * EFFECT_SCREENSHOT_RESPONSE - Send the screenshot response from web view to the client\n *\n * @deprecated\n */\n EffectType[EffectType[\"EFFECT_SCREENSHOT_RESPONSE\"] = 14] = \"EFFECT_SCREENSHOT_RESPONSE\";\n /**\n * EFFECT_LOGIN_PROMPT - Request a login/signup prompt\n *\n * @deprecated\n */\n EffectType[EffectType[\"EFFECT_LOGIN_PROMPT\"] = 15] = \"EFFECT_LOGIN_PROMPT\";\n /**\n * EFFECT_PROMOTED_TELEMETRY - Emit an app-defined promoted telemetry event from a web view, such as\n * custom_event_1 for a promoted app interaction.\n */\n EffectType[EffectType[\"EFFECT_PROMOTED_TELEMETRY\"] = 16] = \"EFFECT_PROMOTED_TELEMETRY\";\n EffectType[EffectType[\"UNRECOGNIZED\"] = -1] = \"UNRECOGNIZED\";\n})(EffectType || (EffectType = {}));\n", "/**\n * #post_message.ts\n *\n * Code generated by ts-proto. DO NOT EDIT.\n * @packageDocumentation\n */\n/* eslint-disable */\n/**\n * Blocks only.\n *\n * @deprecated\n */\nexport var WebViewInternalMessageScope;\n(function (WebViewInternalMessageScope) {\n /** CLIENT - Message is intended for the client only */\n WebViewInternalMessageScope[WebViewInternalMessageScope[\"CLIENT\"] = 0] = \"CLIENT\";\n WebViewInternalMessageScope[WebViewInternalMessageScope[\"UNRECOGNIZED\"] = -1] = \"UNRECOGNIZED\";\n})(WebViewInternalMessageScope || (WebViewInternalMessageScope = {}));\n", "import { EffectType } from '@devvit/protos/json/devvit/ui/effects/v1alpha/effect.js';\nimport { WebViewInternalMessageScope, } from '@devvit/protos/json/devvit/ui/effects/web_view/v1alpha/post_message.js';\n/** `WebViewInternalMessage.type`. */\nexport const webViewInternalMessageType = 'devvit-internal';\n/**\n * Emits an effect to the parent window returns immediately.\n *\n * @param effect - The effect to be emitted to the parent window\n * @param requestId - Optional request id used to correlate request/response messages\n * @description\n * This function handles effects that don't require a response, and can also\n * set a request id when replying to client-originated requests.\n */\nexport const emitEffect = (effect, requestId) => {\n const message = {\n ...effect,\n realtimeEffect: effect.realtime, // to-do: remove deprecated field.\n id: requestId,\n scope: WebViewInternalMessageScope.CLIENT,\n type: webViewInternalMessageType,\n };\n // For temporary backward compatibility, we set both `message.effect_type` above, and `effect` below\n // Once mobile clients are updated to consume the strongly typed properties above, we can remove this block\n // *Do not* add new effects here, use the strongly typed properties above\n if (effect.showToast || effect.navigateToUrl) {\n message.effect = effect;\n }\n parent.postMessage(message, '*');\n};\n/**\n * Emits an effect to the parent window and returns a promise that resolves with the response message.\n *\n * @param effect - The effect to be emitted to the parent window\n * @returns A promise that resolves with the response message\n *\n * @description\n * This function handles effects that require a response.\n */\nexport const emitEffectWithResponse = (effect) => {\n return new Promise((resolve) => {\n const message = {\n ...effect,\n realtimeEffect: effect.realtime, // to-do: remove deprecated field.\n scope: WebViewInternalMessageScope.CLIENT,\n type: webViewInternalMessageType,\n };\n // For temporary backward compatibility, we set both `message.effect_type` above, and `effect` below\n // Once mobile clients are updated to consume the strongly typed properties above, we can remove this block\n // *Do not* add new effects here, use the strongly typed properties above\n if (effect.showForm || effect.type === EffectType.EFFECT_CAN_RUN_AS_USER) {\n message.effect = effect;\n }\n const id = crypto.randomUUID();\n message.id = id;\n const handleEffect = (event) => {\n if (event.data?.type === 'devvit-message' && event.data?.data?.id === id) {\n resolve(event.data.data);\n removeEventListener('message', handleEffect);\n }\n };\n addEventListener('message', handleEffect);\n // Post message to the parent window, handled by client web view component\n parent.postMessage(message, '*');\n });\n};\n", "export class InvalidTokenError extends Error {\n}\nInvalidTokenError.prototype.name = \"InvalidTokenError\";\nfunction b64DecodeUnicode(str) {\n return decodeURIComponent(atob(str).replace(/(.)/g, (m, p) => {\n let code = p.charCodeAt(0).toString(16).toUpperCase();\n if (code.length < 2) {\n code = \"0\" + code;\n }\n return \"%\" + code;\n }));\n}\nfunction base64UrlDecode(str) {\n let output = str.replace(/-/g, \"+\").replace(/_/g, \"/\");\n switch (output.length % 4) {\n case 0:\n break;\n case 2:\n output += \"==\";\n break;\n case 3:\n output += \"=\";\n break;\n default:\n throw new Error(\"base64 string is not of the correct length\");\n }\n try {\n return b64DecodeUnicode(output);\n }\n catch (err) {\n return atob(output);\n }\n}\nexport function jwtDecode(token, options) {\n if (typeof token !== \"string\") {\n throw new InvalidTokenError(\"Invalid token specified: must be a string\");\n }\n options || (options = {});\n const pos = options.header === true ? 0 : 1;\n const part = token.split(\".\")[pos];\n if (typeof part !== \"string\") {\n throw new InvalidTokenError(`Invalid token specified: missing part #${pos + 1}`);\n }\n let decoded;\n try {\n decoded = base64UrlDecode(part);\n }\n catch (e) {\n throw new InvalidTokenError(`Invalid token specified: invalid base64 for part #${pos + 1} (${e.message})`);\n }\n try {\n return JSON.parse(decoded);\n }\n catch (e) {\n throw new InvalidTokenError(`Invalid token specified: invalid json for part #${pos + 1} (${e.message})`);\n }\n}\n", "import type { RequestContext } from '@devvit/protos/json/devvit/platform/v1/request_context.js';\nimport { EffectType } from '@devvit/protos/json/devvit/ui/effects/v1alpha/effect.js';\nimport { emitEffectWithResponse } from '@devvit/shared-types/client/emit-effect.js';\nimport type { WebbitToken } from '@devvit/shared-types/webbit.js';\nimport { jwtDecode, type JwtPayload } from 'jwt-decode';\n\nimport { updateToken } from './devvit-global.js';\n\n/**\n * Claims payload extracted from a Devvit JWT.\n * This represents a JSON Web Token (JWT) that holds the `devvit` platform request context\n */\ntype ContextClaims = JwtPayload & { devvit: RequestContext };\n\nexport function decodeToken(token: string | undefined): RequestContext | undefined {\n if (!token) return;\n\n try {\n return jwtDecode<ContextClaims>(token)?.devvit;\n } catch (err) {\n throw Error('token decode failure', { cause: err });\n }\n}\n\nexport function initToken(): void {\n setInterval(refreshToken, 60_000);\n}\n\n/** @internal */\nexport async function refreshToken(): Promise<void> {\n // Check if the token is about to expire in the next 5 minutes\n const { exp: expiresAt } = jwtDecode<ContextClaims>(globalThis.devvit.token);\n\n if (expiresAt && expiresAt - Date.now() / 1000 > 300) {\n return;\n }\n\n await requestTokenRefresh();\n}\n\nexport async function requestTokenRefresh(): Promise<void> {\n const response = await emitEffectWithResponse({\n type: EffectType.EFFECT_UPDATE_REQUEST_CONTEXT,\n updateRequestContext: {},\n });\n\n if (!response?.updateRequestContext?.signedRequestContext) {\n console.error('Failed to refresh token');\n return;\n }\n\n updateToken(response.updateRequestContext.signedRequestContext as WebbitToken);\n}\n", "import type { RequestContext } from '@devvit/protos/json/devvit/platform/v1/request_context.js';\nimport type { DevvitPostData } from '@devvit/protos/json/devvit/ui/effects/web_view/v1alpha/context.js';\nimport {\n type BridgeContext,\n Client as ClientName,\n type WebViewClientData,\n type WebViewContext,\n} from '@devvit/protos/json/devvit/ui/effects/web_view/v1alpha/context.js';\nimport type { WebViewImmersiveMode } from '@devvit/protos/json/devvit/ui/effects/web_view/v1alpha/immersive_mode.js';\nimport type { ConsentStatus } from '@devvit/protos/json/reddit/devvit/app_permission/v1/app_permission.js';\nimport type { Context } from '@devvit/shared-types/client/client-context.js';\nimport type {\n DevvitGlobal,\n WebViewScriptsVersion,\n} from '@devvit/shared-types/client/devvit-global.js';\nimport type { Client } from '@devvit/shared-types/shared/client.js';\nimport { T2, T3, T5 } from '@devvit/shared-types/tid.js';\nimport { type WebbitToken } from '@devvit/shared-types/webbit.js';\n\nimport { queryClientVersion } from './client.js';\nimport { decodeToken, requestTokenRefresh } from './token.js';\n\ndeclare global {\n // eslint-disable-next-line no-var\n var devvit: DevvitGlobal;\n /** Defined by build.js. */\n // eslint-disable-next-line no-var\n var webViewScriptsVersion: Readonly<WebViewScriptsVersion>;\n}\n\n/** @internal */\nexport const initDevvitGlobal = (\n document: { readonly currentScript: { readonly src: string } | SVGScriptElement | null },\n location: { readonly hash: string },\n window: { readonly name: string }\n): void => {\n const bridge = getBridgeContext(window.name, location.hash);\n\n const client = getClient(bridge);\n\n let appPermissionState = bridge?.appPermissionState;\n /**\n * Android versions older than this do not support runAsUser correctly, so we\n * suppress the permission state to allow the app to run as if the feature\n * wasn't present (failing open).\n *\n * Supported after 2026.05.x\n */\n if (client?.name === 'ANDROID') {\n if (\n client.version.yyyy < 2026 ||\n (client.version.yyyy === 2026 && client.version.release <= 5)\n ) {\n appPermissionState = undefined;\n }\n }\n\n const reqCtx = decodeToken(bridge.signedRequestContext);\n\n let context;\n if (reqCtx) context = contextFromRequestContext(reqCtx, client, bridge.postData);\n else if (bridge.webViewContext)\n context = contextFromWebViewContext(bridge.webViewContext, client, bridge.postData);\n if (!context) throw Error('no context');\n\n // to-do: expose `devvitDebug`, `shredditVersion`.\n\n const clientData: WebViewClientData | undefined = bridge.webViewClientData;\n globalThis.devvit = {\n context,\n dependencies: {\n client: queryClientVersion(document),\n webViewScripts: globalThis.webViewScriptsVersion,\n },\n entrypoints: clientData?.appConfig?.entrypoints ?? {},\n share: bridge?.shareParam ? { userData: bridge?.shareParam.userData } : undefined,\n adPayload: bridge?.adPayload,\n appPermissionState,\n token: (bridge.signedRequestContext || bridge.webbitToken) as WebbitToken,\n webViewMode: bridge?.viewMode,\n startTime: bridge?.startTime ?? undefined,\n refreshToken: requestTokenRefresh,\n };\n};\n\nexport function updateConsentStatus(consentStatus: ConsentStatus): void {\n if (!globalThis.devvit.appPermissionState) return;\n globalThis.devvit.appPermissionState.consentStatus = consentStatus;\n}\n\nexport function updateMode(mode: WebViewImmersiveMode): void {\n devvit.webViewMode = mode;\n}\n\nexport function updateToken(token: WebbitToken): void {\n globalThis.devvit.token = token;\n}\n\n/** @internal */\nexport function contextFromRequestContext(\n reqCtx: Readonly<RequestContext>,\n client: Client | undefined,\n postData: Readonly<DevvitPostData> | undefined\n): Context {\n if (!reqCtx.app) throw Error('no RequestContext.app');\n if (!reqCtx.post) throw Error('no RequestContext.post');\n if (!reqCtx.subreddit) throw Error('no RequestContext.subreddit');\n return {\n appName: reqCtx.app.name,\n appSlug: reqCtx.app.slug,\n appVersion: reqCtx.app.version,\n client,\n commentId: undefined,\n loid:\n reqCtx.user?.devvitLoid ?? (reqCtx.user as { devvit_loid?: string } | undefined)?.devvit_loid,\n postAuthorId: T2(reqCtx.post.author),\n postData: postData?.developerData,\n postId: T3(reqCtx.post.id),\n snoovatar: reqCtx.user?.snoovatar,\n subredditId: T5(reqCtx.subreddit.id),\n subredditName: reqCtx.subreddit.name,\n userId: reqCtx.user?.id ? T2(reqCtx.user.id) : undefined,\n username: reqCtx.user?.name,\n };\n}\n\n/** @internal */\nexport function contextFromWebViewContext(\n webViewCtx: Readonly<WebViewContext>,\n client: Client | undefined,\n postData: Readonly<DevvitPostData> | undefined\n): Context {\n return {\n appName: webViewCtx.appName,\n appSlug: webViewCtx.appName,\n appVersion: webViewCtx.appVersion,\n client,\n commentId: undefined,\n loid: undefined,\n postData: postData?.developerData,\n postAuthorId: undefined,\n postId: T3(webViewCtx.postId),\n snoovatar: undefined,\n subredditId: T5(webViewCtx.subredditId),\n subredditName: webViewCtx.subredditName,\n userId: webViewCtx.userId ? T2(webViewCtx.userId) : undefined,\n username: undefined,\n };\n}\n\n/**\n * Extracts the BridgeContext from the hash.\n * @internal\n */\nexport function getBridgeContext(name: string | undefined, hash: string): BridgeContext {\n if (name) return JSON.parse(name);\n const json = hash?.slice(1); // Strip the leading '#' from the hash\n if (!json) throw Error('no bridge context');\n return JSON.parse(decodeURIComponent(json));\n}\n\n/** @internal */\nexport function getClient(bridge: Readonly<BridgeContext>): Client | undefined {\n if (\n (bridge.client !== ClientName.ANDROID && bridge.client !== ClientName.IOS) ||\n !bridge.nativeVersion\n )\n return;\n return {\n name: bridge.client === ClientName.ANDROID ? 'ANDROID' : ('IOS' as const),\n version: bridge.nativeVersion,\n };\n}\n", "import type { DevvitGlobal } from '@devvit/shared-types/client/devvit-global.js';\n\n/** Injects an auth token into /api/ requests. */\nexport async function fetch(\n devvit: Readonly<DevvitGlobal>,\n globalFetch: typeof globalThis.fetch,\n location: Readonly<Location>,\n input: RequestInfo | URL,\n init?: RequestInit\n): Promise<Response> {\n const req = new Request(input, init);\n if (isSameSite(location, new URL(req.url)))\n req.headers.set('Authorization', `Bearer ${devvit.token}`);\n // to-do: pass devvit-debug from BridgeContext.\n return await globalFetch(req);\n}\n\nexport function initFetch(): void {\n globalThis.fetch = fetch.bind(undefined, globalThis.devvit, globalThis.fetch, location);\n}\n\n/** @internal */\nexport function isSameSite(location: Readonly<Location>, url: URL): boolean {\n return url.origin === location.origin;\n}\n", "import { EffectType } from '@devvit/protos/json/devvit/ui/effects/v1alpha/effect.js';\nimport type { WebViewMessageEvent_MessageData } from '@devvit/protos/json/devvit/ui/events/v1alpha/web_view.js';\nimport { emitEffect } from '@devvit/shared-types/client/emit-effect.js';\nimport {\n devvitScriptFileName,\n devvitScriptUrl,\n screenshotScriptFileName,\n} from '@devvit/shared-types/web-view-scripts-constants.js';\n\nconst fallbackScriptUrl = new URL(screenshotScriptFileName, devvitScriptUrl).toString();\n\nexport function getScreenshotModuleUrl(scriptSrc: string | undefined): string {\n const trimmedScriptSrc = scriptSrc?.trim();\n if (trimmedScriptSrc) {\n try {\n const scriptUrl = new URL(trimmedScriptSrc);\n if (scriptUrl.pathname.endsWith(`/${devvitScriptFileName}`)) {\n return new URL(screenshotScriptFileName, scriptUrl).toString();\n }\n } catch {\n // no-op, fall through to return below\n }\n }\n return fallbackScriptUrl;\n}\n\nasync function onMessage(\n event: MessageEvent<WebViewMessageEvent_MessageData>,\n scriptSrc: string | undefined\n): Promise<void> {\n const envelope = event.data;\n if (envelope?.type !== 'devvit-message' || envelope.data == null) return;\n const payload = envelope.data;\n if (payload.screenshotRequest == null) {\n return;\n }\n if (typeof payload.id !== 'string') {\n return;\n }\n\n let dataUrl: string | undefined;\n let errorMessage: string | undefined;\n try {\n const screenshotModulePath = getScreenshotModuleUrl(scriptSrc);\n // eslint-disable-next-line\n const { captureScreenshot } = await import(screenshotModulePath);\n dataUrl = await captureScreenshot();\n } catch (error) {\n errorMessage = error instanceof Error ? error.message : String(error);\n }\n emitEffect(\n { type: EffectType.EFFECT_SCREENSHOT_RESPONSE, screenshot: { dataUrl, error: errorMessage } },\n payload.id\n );\n}\n\nexport function initScreenshotRequestListener(scriptSrc: string): void {\n addEventListener('message', (event) => {\n void onMessage(event, scriptSrc);\n });\n}\n", "import { EffectType } from '@devvit/protos/json/devvit/ui/effects/v1alpha/effect.js';\nimport { emitEffect } from './emit-effect.js';\nexport function emitTelemetryClickEffect(event) {\n const click = TelemetryClickPayload(event.target, event.isTrusted);\n void emitEffect({\n type: EffectType.EFFECT_TELEMETRY,\n telemetry: { event: click.event, click },\n // to-do: remove once all clients support `telemetry`. Deprecated on\n // 2025-11-24.\n analytics: click,\n });\n}\n/**\n * This function is expensive. It does heavy DOM work.\n * @internal\n */\nexport function TelemetryClickPayload(eventTarget, isTrusted) {\n const { definition, elemTrackId } = analyzeClickTarget(eventTarget, isTrusted);\n return { event: 'click', definition, elemTrackId };\n}\nfunction analyzeClickTarget(eventTarget, isTrusted) {\n const targetElement = getTargetElement(eventTarget);\n if (!targetElement) {\n return { definition: 'default', elemTrackId: undefined };\n }\n let definition = 'default';\n if (isTrusted) {\n const computedStyles = globalThis.window.getComputedStyle(targetElement);\n if (computedStyles?.getPropertyValue('cursor') === 'pointer') {\n definition = 'strict';\n }\n }\n let elemTrackId;\n let currentElement = targetElement;\n while (currentElement) {\n if (elemTrackId === undefined) {\n const dataTrackId = currentElement.getAttribute('data-track-id');\n if (dataTrackId) {\n elemTrackId = dataTrackId;\n }\n else if (currentElement.id) {\n elemTrackId = currentElement.id;\n }\n }\n if (isTrusted && definition === 'default' && elementIsStrictClickTarget(currentElement)) {\n definition = 'strict';\n }\n if (elemTrackId !== undefined && (!isTrusted || definition === 'strict')) {\n break;\n }\n currentElement = currentElement.parentElement;\n }\n return { definition, elemTrackId };\n}\nfunction getTargetElement(eventTarget) {\n if (!eventTarget || typeof eventTarget !== 'object' || !('nodeType' in eventTarget)) {\n return undefined;\n }\n const node = eventTarget;\n return node.nodeType === 1 ? node : (node.parentElement ?? undefined);\n}\nfunction elementIsStrictClickTarget(element) {\n const STRICT_CLICK_TAGNAMES = ['A', 'BUTTON', 'CANVAS', 'INPUT', 'SELECT', 'TEXTAREA', 'LABEL'];\n return (STRICT_CLICK_TAGNAMES.includes(element.tagName) ||\n ['true', 'plaintext-only'].includes(element.getAttribute('contenteditable') ?? ''));\n}\n", "import { EffectType } from '@devvit/protos/json/devvit/ui/effects/v1alpha/effect.js';\nimport type {\n WebViewTelemetryLoadedEffect,\n WebViewTelemetryMetric,\n} from '@devvit/protos/json/devvit/ui/effects/web_view/v1alpha/telemetry.js';\nimport { emitEffect } from '@devvit/shared-types/client/emit-effect.js';\nimport { emitTelemetryClickEffect } from '@devvit/shared-types/client/telemetry.js';\n\nlet telemetryMetrics: WebViewTelemetryMetric[];\n\n/** startTime (UTC milliseconds) is provided by the client within the bridge context for native-clock metrics. */\nlet startTime: number | undefined;\n\n// Render duration still needs an emit guard because both FCP and navigation callbacks can attempt it.\nlet renderDurationSent: boolean = false;\n\n/**\n * `initTelemetry()` is added to all Devvit apps which use web views.\n *\n * This sends interaction events to the parent window via postMessage.\n * These metrics are used to inform app performance and feed ranking.\n */\nexport function initTelemetry(): void {\n initPerformanceMonitoring();\n initLoadedEvent();\n initClickEvent();\n}\n\nfunction initLoadedEvent(): void {\n addEventListener('load', () => {\n const timeStart = performance.timeOrigin;\n const duration = performance.now();\n const timeEnd = performance.timeOrigin + duration;\n const loaded: WebViewTelemetryLoadedEffect = {\n event: 'web-view-loaded',\n timeStart,\n timeEnd,\n duration,\n };\n\n void emitEffect({\n type: EffectType.EFFECT_TELEMETRY,\n telemetry: { event: loaded.event, loaded },\n // to-do: remove once all clients support `telemetry`. Deprecated on\n // 2025-11-24.\n analytics: loaded,\n });\n });\n}\n\nfunction initClickEvent(): void {\n document.addEventListener(\n 'click',\n (event) => {\n emitTelemetryClickEffect(event);\n },\n { passive: true }\n );\n}\n\nfunction getNavigationTiming(): PerformanceNavigationTiming | undefined {\n return performance.getEntriesByType('navigation')[0] as PerformanceNavigationTiming | undefined;\n}\n\nfunction measureTtfb(): WebViewTelemetryMetric | undefined {\n const navigationTiming = getNavigationTiming();\n\n if (!startTime || !navigationTiming) {\n return undefined;\n }\n\n return {\n spanName: 'web_view_time_to_first_byte',\n timeStart: startTime + navigationTiming.requestStart,\n timeEnd: startTime + navigationTiming.responseStart,\n };\n}\n\nfunction buildTimeOriginMetric(spanName: string, offset: number): WebViewTelemetryMetric[] {\n return [\n {\n spanName,\n timeStart: performance.timeOrigin,\n timeEnd: performance.timeOrigin + offset,\n },\n ];\n}\n\n/**\n * Measures the native startup window between the app launch (`startTime`) and the\n * moment the WebView began loading the page (`performance.timeOrigin`). This gap\n * covers WebView inflation, bridge setup, data fetching, and navigation triggers,\n * none of which is reflected in the in-page performance offsets.\n */\nfunction measureWebViewInitialization(): WebViewTelemetryMetric | undefined {\n if (!startTime) {\n return undefined;\n }\n\n return {\n spanName: 'web_view_initialization',\n timeStart: startTime,\n timeEnd: performance.timeOrigin,\n };\n}\n\n// Match the existing app-readiness signal by ending at the slower of first paint and page load.\nfunction maybeMeasureRenderDuration(): WebViewTelemetryMetric | undefined {\n const navigationTiming = getNavigationTiming();\n const fcpOffset = performance\n .getEntriesByType('paint')\n .find((entry) => entry.name === 'first-contentful-paint')?.startTime;\n const loadEventEndOffset = measureLoadEventEnd(navigationTiming);\n\n if (\n fcpOffset == null ||\n loadEventEndOffset == null ||\n !navigationTiming ||\n navigationTiming.responseStart <= 0\n ) {\n return undefined;\n }\n\n return {\n spanName: 'web_view_render_duration',\n timeStart: performance.timeOrigin + navigationTiming.responseStart,\n timeEnd: performance.timeOrigin + Math.max(fcpOffset, loadEventEndOffset),\n };\n}\n\nfunction measureFcp(): WebViewTelemetryMetric[] {\n const paintEntries = performance.getEntriesByType('paint');\n const fcpEntry = paintEntries.find((entry) => entry.name === 'first-contentful-paint');\n\n if (!fcpEntry) {\n return [];\n }\n\n return buildTimeOriginMetric('web_view_first_contentful_paint', fcpEntry.startTime);\n}\n\nfunction measureLoad(): WebViewTelemetryMetric[] {\n return buildTimeOriginMetric('web_view_load', performance.now());\n}\n\nfunction measureLoadEventEnd(\n navigationTiming: PerformanceNavigationTiming | undefined = getNavigationTiming()\n): number | undefined {\n return navigationTiming && navigationTiming.loadEventEnd > 0\n ? navigationTiming.loadEventEnd\n : undefined;\n}\n\nfunction emitRenderDuration(): void {\n if (renderDurationSent) {\n return;\n }\n\n const renderDuration = maybeMeasureRenderDuration();\n if (!renderDuration) {\n return;\n }\n\n renderDurationSent = true;\n emitEffect({\n type: EffectType.EFFECT_TELEMETRY,\n telemetry: { metrics: { metrics: [renderDuration] } },\n });\n}\n\n/**\n * Measure Time to Interactive (TTI)\n * Uses a heuristic: measured after a quiet window period following page load.\n * This represents when the page is fully interactive and stable.\n * Avoids long task API which isn't supported on iOS.\n */\nfunction measureTti(): WebViewTelemetryMetric[] {\n const navTiming = getNavigationTiming();\n const ttiTime = navTiming?.domInteractive;\n\n if (!ttiTime) {\n return [];\n }\n\n return buildTimeOriginMetric('web_view_time_to_interactive', ttiTime);\n}\n\nfunction initPerformanceMonitoring(): void {\n telemetryMetrics = [];\n startTime = globalThis.devvit?.startTime;\n renderDurationSent = false;\n\n const initialization = measureWebViewInitialization();\n if (initialization) telemetryMetrics.push(initialization);\n\n // Measure TTFB immediately if ready, otherwise handled in load event\n if (document.readyState === 'complete') {\n const ttfb = measureTtfb();\n if (ttfb) telemetryMetrics.push(ttfb);\n }\n\n const observer = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n if (entry.name === 'first-contentful-paint') {\n const fcp = measureFcp();\n observer.disconnect();\n if (fcp.length === 0) break;\n const renderDuration = renderDurationSent ? undefined : maybeMeasureRenderDuration();\n if (renderDuration) renderDurationSent = true;\n if (document.readyState === 'complete') {\n // load may already have emitted its batch, so late FCP emits standalone.\n emitEffect({\n type: EffectType.EFFECT_TELEMETRY,\n telemetry: { metrics: { metrics: renderDuration ? [...fcp, renderDuration] : fcp } },\n });\n } else {\n telemetryMetrics.push(...fcp);\n if (renderDuration) telemetryMetrics.push(renderDuration);\n }\n break;\n }\n }\n });\n\n observer.observe({ type: 'paint', buffered: true });\n\n const navigationObserver = new PerformanceObserver((list) => {\n const navigationEntry = list.getEntries().find((entry) => entry.entryType === 'navigation');\n if (navigationEntry) {\n navigationObserver.disconnect();\n emitRenderDuration();\n }\n });\n\n navigationObserver.observe({ type: 'navigation', buffered: true });\n\n if (document.readyState === 'loading') {\n globalThis.addEventListener('DOMContentLoaded', () => {\n telemetryMetrics.push(...measureTti());\n });\n } else {\n telemetryMetrics.push(...measureTti());\n }\n\n // Emit metrics after page is fully loaded\n globalThis.addEventListener('load', () => {\n const ttfb = measureTtfb();\n if (ttfb) telemetryMetrics.push(ttfb);\n\n telemetryMetrics.push(...measureLoad());\n\n emitEffect({\n type: EffectType.EFFECT_TELEMETRY,\n telemetry: {\n metrics: {\n metrics: telemetryMetrics,\n },\n },\n });\n });\n}\n", "import type { WebViewMessageEvent_MessageData } from '@devvit/protos/json/devvit/ui/events/v1alpha/web_view.js';\n\nimport { updateMode } from './devvit-global.js';\n\n/** @internal */\nexport function initWebViewMode(): void {\n addEventListener('message', onWebViewMessage);\n}\n\n/** @internal */\nexport function onWebViewMessage(ev: MessageEvent<WebViewMessageEvent_MessageData>): void {\n if (ev.data?.type !== 'devvit-message') return;\n if (!ev.data?.data?.immersiveModeEvent) return;\n updateMode(ev.data.data.immersiveModeEvent.immersiveMode);\n}\n", "import { queryCurrentScriptSrc } from './client.js';\nimport { initDevvitGlobal } from './devvit-global.js';\nimport { initFetch } from './fetch.js';\nimport { initScreenshotRequestListener } from './screenshot-listener.js';\nimport { initTelemetry } from './telemetry.js';\nimport { initToken } from './token.js';\nimport { initWebViewMode } from './web-view-mode.js';\n\ninitDevvitGlobal(document, location, window);\ninitTelemetry();\ninitFetch();\ninitScreenshotRequestListener(queryCurrentScriptSrc(document) ?? '');\ninitToken();\ninitWebViewMode();\n"],
|
|
4
|
+
"sourcesContent": ["{\"hash\":\"497871e\",\"version\":\"0.13.11-dev\"}", "/**\n * The `@devvit/client` version query parameter name the web view's document\n * script tag:\n *\n * <script src=\"https://webview.devvit.net/scripts/devvit.v1.min.js?clientVersion=1.2.3\"></script>\n *\n * The value is the version of `@devvit/client` bundled with the app.\n * `@devvit/client` may have runtime dependencies on\n * `@devvit/web-view-scripts` (`devvit.v1.min.js`) which is not bundled. The\n * client version can be used to specialize behavior to match the static\n * expectations of the `@devvit/client` version.\n */\nexport const clientVersionQueryParam = 'clientVersion';\n/** Bootstrap WebView script file name. */\nexport const devvitScriptFileName = 'devvit.v1.min.js';\n/** Screenshot capture WebView script file name. */\nexport const screenshotScriptFileName = 'screenshot.v1.min.js';\n/** CDN URL for the WebView bootstrap script. */\nexport const devvitScriptUrl = `https://webview.devvit.net/scripts/${devvitScriptFileName}`;\n", "import { clientVersionQueryParam } from '@devvit/shared-types/web-view-scripts-constants.js';\n\n/**\n * Queries the client version (eg, `'1.2.3'`) from the iframe document's script\n * tag:\n *\n * <script src=\"https://webview.devvit.net/scripts/devvit.v1.min.js?clientVersion=1.2.3\"></script>\n *\n * See `clientVersionQueryParam`.\n */\nexport function queryClientVersion(document: {\n readonly currentScript: { readonly src: string } | SVGScriptElement | null;\n}): string | undefined {\n if (document.currentScript && 'src' in document.currentScript)\n return (\n new URL(document.currentScript.src).searchParams.get(clientVersionQueryParam) ?? undefined\n );\n}\n\n/** Queries the current script `src` from the active document. */\nexport function queryCurrentScriptSrc(document: {\n readonly currentScript: { readonly src: string } | SVGScriptElement | null;\n}): string | undefined {\n if (document.currentScript && 'src' in document.currentScript) {\n return document.currentScript.src;\n }\n}\n", "/**\n * #context.ts\n *\n * Code generated by ts-proto. DO NOT EDIT.\n * @packageDocumentation\n */\n/* eslint-disable */\n/** The user client hosting the web view. */\nexport var Client;\n(function (Client) {\n Client[Client[\"CLIENT_UNSPECIFIED\"] = 0] = \"CLIENT_UNSPECIFIED\";\n Client[Client[\"ANDROID\"] = 1] = \"ANDROID\";\n Client[Client[\"IOS\"] = 2] = \"IOS\";\n Client[Client[\"SHREDDIT\"] = 3] = \"SHREDDIT\";\n Client[Client[\"UNRECOGNIZED\"] = -1] = \"UNRECOGNIZED\";\n})(Client || (Client = {}));\n/**\n * Inline height of post.\n *\n * @deprecated\n */\nexport var Height;\n(function (Height) {\n Height[Height[\"HEIGHT_UNSPECIFIED\"] = 0] = \"HEIGHT_UNSPECIFIED\";\n Height[Height[\"REGULAR\"] = 1] = \"REGULAR\";\n Height[Height[\"TALL\"] = 2] = \"TALL\";\n Height[Height[\"UNRECOGNIZED\"] = -1] = \"UNRECOGNIZED\";\n})(Height || (Height = {}));\n", "export function assert(condition, msg) {\n if (!condition)\n throw Error(msg);\n}\n", "import { assert } from './assert.js';\n/**\n * - **C**omment (T1).\n * - **A**ccount (T2).\n * - **L**ink (T3).\n * - **M**essage (T4).\n * - **S**ubreddit (T5).\n * - **T**rophies (T6).\n */\nexport var T_PREFIX;\n(function (T_PREFIX) {\n T_PREFIX[\"COMMENT\"] = \"t1_\";\n T_PREFIX[\"ACCOUNT\"] = \"t2_\";\n T_PREFIX[\"LINK\"] = \"t3_\";\n T_PREFIX[\"MESSAGE\"] = \"t4_\";\n T_PREFIX[\"SUBREDDIT\"] = \"t5_\";\n T_PREFIX[\"AWARD\"] = \"t6_\";\n})(T_PREFIX || (T_PREFIX = {}));\n// type guards\nexport function isT1(id) {\n return !!id?.startsWith(T_PREFIX.COMMENT);\n}\nexport function isT2(id) {\n return !!id?.startsWith(T_PREFIX.ACCOUNT);\n}\nexport function isT3(id) {\n return !!id?.startsWith(T_PREFIX.LINK);\n}\nexport function isT4(id) {\n return !!id?.startsWith(T_PREFIX.MESSAGE);\n}\nexport function isT5(id) {\n return !!id?.startsWith(T_PREFIX.SUBREDDIT);\n}\nexport function isT6(id) {\n return !!id?.startsWith(T_PREFIX.AWARD);\n}\n// assertion functions\nexport function assertT1(id) {\n assert(isT1(id), `Expected comment id to start with ${T_PREFIX.COMMENT}, got ${id}`);\n}\nexport function assertT2(id) {\n assert(isT2(id), `Expected account id to start with ${T_PREFIX.ACCOUNT}, got ${id}`);\n}\nexport function assertT3(id) {\n assert(isT3(id), `Expected link id to start with ${T_PREFIX.LINK}, got ${id}`);\n}\nexport function assertT4(id) {\n assert(isT4(id), `Expected message id to start with ${T_PREFIX.MESSAGE}, got ${id}`);\n}\nexport function assertT5(id) {\n assert(isT5(id), `Expected subreddit id to start with ${T_PREFIX.SUBREDDIT}, got ${id}`);\n}\nexport function assertT6(id) {\n assert(isT6(id), `Expected award id to start with ${T_PREFIX.AWARD}, got ${id}`);\n}\n// factory functions\nexport function T1(id) {\n assertT1(id);\n return id;\n}\nexport function T2(id) {\n assertT2(id);\n return id;\n}\nexport function T3(id) {\n assertT3(id);\n return id;\n}\nexport function T4(id) {\n assertT4(id);\n return id;\n}\nexport function T5(id) {\n assertT5(id);\n return id;\n}\nexport function T6(id) {\n assertT6(id);\n return id;\n}\nexport function asTid(id) {\n if (isT1(id)) {\n return T1(id);\n }\n if (isT2(id)) {\n return T2(id);\n }\n if (isT3(id)) {\n return T3(id);\n }\n if (isT4(id)) {\n return T4(id);\n }\n if (isT5(id)) {\n return T5(id);\n }\n if (isT6(id)) {\n return T6(id);\n }\n throw new Error(`Expected thing id to start with ${Object.values(T_PREFIX).join(', ')} got ${id}}`);\n}\n", "/**\n * #effect.ts\n *\n * Code generated by ts-proto. DO NOT EDIT.\n * @packageDocumentation\n */\n/* eslint-disable */\nexport var EffectType;\n(function (EffectType) {\n /**\n * EFFECT_REALTIME_SUB - Notify client to synchronize its realtime subscriptions\n *\n * @deprecated\n */\n EffectType[EffectType[\"EFFECT_REALTIME_SUB\"] = 0] = \"EFFECT_REALTIME_SUB\";\n /**\n * EFFECT_RERENDER_UI - Trigger a re-render for apps that have visible UI\n *\n * @deprecated\n */\n EffectType[EffectType[\"EFFECT_RERENDER_UI\"] = 1] = \"EFFECT_RERENDER_UI\";\n /**\n * EFFECT_RELOAD_PART - Notify the client that parts of a subreddit, post, or comment should be reloaded\n *\n * @deprecated\n */\n EffectType[EffectType[\"EFFECT_RELOAD_PART\"] = 2] = \"EFFECT_RELOAD_PART\";\n /** EFFECT_SHOW_FORM - Display a user input form */\n EffectType[EffectType[\"EFFECT_SHOW_FORM\"] = 3] = \"EFFECT_SHOW_FORM\";\n /** EFFECT_SHOW_TOAST - Display a transient toast message */\n EffectType[EffectType[\"EFFECT_SHOW_TOAST\"] = 4] = \"EFFECT_SHOW_TOAST\";\n /** EFFECT_NAVIGATE_TO_URL - Notify the client to navigate to a URL */\n EffectType[EffectType[\"EFFECT_NAVIGATE_TO_URL\"] = 5] = \"EFFECT_NAVIGATE_TO_URL\";\n /**\n * EFFECT_SET_INTERVALS - This updates the list of active timers.\n *\n * @deprecated\n */\n EffectType[EffectType[\"EFFECT_SET_INTERVALS\"] = 7] = \"EFFECT_SET_INTERVALS\";\n /**\n * EFFECT_CREATE_ORDER - This starts a purchase flow\n *\n * @deprecated\n */\n EffectType[EffectType[\"EFFECT_CREATE_ORDER\"] = 8] = \"EFFECT_CREATE_ORDER\";\n /**\n * EFFECT_WEB_VIEW - Control and communicate with WebViews\n *\n * @deprecated\n */\n EffectType[EffectType[\"EFFECT_WEB_VIEW\"] = 9] = \"EFFECT_WEB_VIEW\";\n /**\n * EFFECT_CAN_RUN_AS_USER - Check if the app can execute some actions as the user\n *\n * @deprecated\n */\n EffectType[EffectType[\"EFFECT_CAN_RUN_AS_USER\"] = 11] = \"EFFECT_CAN_RUN_AS_USER\";\n /**\n * EFFECT_TELEMETRY - Statistical data event for analytics.\n *\n * @deprecated\n */\n EffectType[EffectType[\"EFFECT_TELEMETRY\"] = 12] = \"EFFECT_TELEMETRY\";\n /**\n * EFFECT_UPDATE_REQUEST_CONTEXT - Request an updated signed request context\n *\n * @deprecated\n */\n EffectType[EffectType[\"EFFECT_UPDATE_REQUEST_CONTEXT\"] = 13] = \"EFFECT_UPDATE_REQUEST_CONTEXT\";\n /**\n * EFFECT_SCREENSHOT_RESPONSE - Send the screenshot response from web view to the client\n *\n * @deprecated\n */\n EffectType[EffectType[\"EFFECT_SCREENSHOT_RESPONSE\"] = 14] = \"EFFECT_SCREENSHOT_RESPONSE\";\n /**\n * EFFECT_LOGIN_PROMPT - Request a login/signup prompt\n *\n * @deprecated\n */\n EffectType[EffectType[\"EFFECT_LOGIN_PROMPT\"] = 15] = \"EFFECT_LOGIN_PROMPT\";\n /**\n * EFFECT_PROMOTED_TELEMETRY - Emit an app-defined promoted telemetry event from a web view, such as\n * custom_event_1 for a promoted app interaction.\n */\n EffectType[EffectType[\"EFFECT_PROMOTED_TELEMETRY\"] = 16] = \"EFFECT_PROMOTED_TELEMETRY\";\n EffectType[EffectType[\"UNRECOGNIZED\"] = -1] = \"UNRECOGNIZED\";\n})(EffectType || (EffectType = {}));\n", "/**\n * #post_message.ts\n *\n * Code generated by ts-proto. DO NOT EDIT.\n * @packageDocumentation\n */\n/* eslint-disable */\n/**\n * Blocks only.\n *\n * @deprecated\n */\nexport var WebViewInternalMessageScope;\n(function (WebViewInternalMessageScope) {\n /** CLIENT - Message is intended for the client only */\n WebViewInternalMessageScope[WebViewInternalMessageScope[\"CLIENT\"] = 0] = \"CLIENT\";\n WebViewInternalMessageScope[WebViewInternalMessageScope[\"UNRECOGNIZED\"] = -1] = \"UNRECOGNIZED\";\n})(WebViewInternalMessageScope || (WebViewInternalMessageScope = {}));\n", "import { EffectType } from '@devvit/protos/json/devvit/ui/effects/v1alpha/effect.js';\nimport { WebViewInternalMessageScope, } from '@devvit/protos/json/devvit/ui/effects/web_view/v1alpha/post_message.js';\n/** `WebViewInternalMessage.type`. */\nexport const webViewInternalMessageType = 'devvit-internal';\n/**\n * Emits an effect to the parent window returns immediately.\n *\n * @param effect - The effect to be emitted to the parent window\n * @param requestId - Optional request id used to correlate request/response messages\n * @description\n * This function handles effects that don't require a response, and can also\n * set a request id when replying to client-originated requests.\n */\nexport const emitEffect = (effect, requestId) => {\n const message = {\n ...effect,\n realtimeEffect: effect.realtime, // to-do: remove deprecated field.\n id: requestId,\n scope: WebViewInternalMessageScope.CLIENT,\n type: webViewInternalMessageType,\n };\n // For temporary backward compatibility, we set both `message.effect_type` above, and `effect` below\n // Once mobile clients are updated to consume the strongly typed properties above, we can remove this block\n // *Do not* add new effects here, use the strongly typed properties above\n if (effect.showToast || effect.navigateToUrl) {\n message.effect = effect;\n }\n parent.postMessage(message, '*');\n};\n/**\n * Emits an effect to the parent window and returns a promise that resolves with the response message.\n *\n * @param effect - The effect to be emitted to the parent window\n * @returns A promise that resolves with the response message\n *\n * @description\n * This function handles effects that require a response.\n */\nexport const emitEffectWithResponse = (effect) => {\n return new Promise((resolve) => {\n const message = {\n ...effect,\n realtimeEffect: effect.realtime, // to-do: remove deprecated field.\n scope: WebViewInternalMessageScope.CLIENT,\n type: webViewInternalMessageType,\n };\n // For temporary backward compatibility, we set both `message.effect_type` above, and `effect` below\n // Once mobile clients are updated to consume the strongly typed properties above, we can remove this block\n // *Do not* add new effects here, use the strongly typed properties above\n if (effect.showForm || effect.type === EffectType.EFFECT_CAN_RUN_AS_USER) {\n message.effect = effect;\n }\n const id = crypto.randomUUID();\n message.id = id;\n const handleEffect = (event) => {\n if (event.data?.type === 'devvit-message' && event.data?.data?.id === id) {\n resolve(event.data.data);\n removeEventListener('message', handleEffect);\n }\n };\n addEventListener('message', handleEffect);\n // Post message to the parent window, handled by client web view component\n parent.postMessage(message, '*');\n });\n};\n", "export class InvalidTokenError extends Error {\n}\nInvalidTokenError.prototype.name = \"InvalidTokenError\";\nfunction b64DecodeUnicode(str) {\n return decodeURIComponent(atob(str).replace(/(.)/g, (m, p) => {\n let code = p.charCodeAt(0).toString(16).toUpperCase();\n if (code.length < 2) {\n code = \"0\" + code;\n }\n return \"%\" + code;\n }));\n}\nfunction base64UrlDecode(str) {\n let output = str.replace(/-/g, \"+\").replace(/_/g, \"/\");\n switch (output.length % 4) {\n case 0:\n break;\n case 2:\n output += \"==\";\n break;\n case 3:\n output += \"=\";\n break;\n default:\n throw new Error(\"base64 string is not of the correct length\");\n }\n try {\n return b64DecodeUnicode(output);\n }\n catch (err) {\n return atob(output);\n }\n}\nexport function jwtDecode(token, options) {\n if (typeof token !== \"string\") {\n throw new InvalidTokenError(\"Invalid token specified: must be a string\");\n }\n options || (options = {});\n const pos = options.header === true ? 0 : 1;\n const part = token.split(\".\")[pos];\n if (typeof part !== \"string\") {\n throw new InvalidTokenError(`Invalid token specified: missing part #${pos + 1}`);\n }\n let decoded;\n try {\n decoded = base64UrlDecode(part);\n }\n catch (e) {\n throw new InvalidTokenError(`Invalid token specified: invalid base64 for part #${pos + 1} (${e.message})`);\n }\n try {\n return JSON.parse(decoded);\n }\n catch (e) {\n throw new InvalidTokenError(`Invalid token specified: invalid json for part #${pos + 1} (${e.message})`);\n }\n}\n", "import type { RequestContext } from '@devvit/protos/json/devvit/platform/v1/request_context.js';\nimport { EffectType } from '@devvit/protos/json/devvit/ui/effects/v1alpha/effect.js';\nimport { emitEffectWithResponse } from '@devvit/shared-types/client/emit-effect.js';\nimport type { WebbitToken } from '@devvit/shared-types/webbit.js';\nimport { jwtDecode, type JwtPayload } from 'jwt-decode';\n\nimport { updateToken } from './devvit-global.js';\n\n/**\n * Claims payload extracted from a Devvit JWT.\n * This represents a JSON Web Token (JWT) that holds the `devvit` platform request context\n */\ntype ContextClaims = JwtPayload & { devvit: RequestContext };\n\nexport function decodeToken(token: string | undefined): RequestContext | undefined {\n if (!token) return;\n\n try {\n return jwtDecode<ContextClaims>(token)?.devvit;\n } catch (err) {\n throw Error('token decode failure', { cause: err });\n }\n}\n\nexport function initToken(): void {\n setInterval(refreshToken, 60_000);\n}\n\n/** @internal */\nexport async function refreshToken(): Promise<void> {\n // Check if the token is about to expire in the next 5 minutes\n const { exp: expiresAt } = jwtDecode<ContextClaims>(globalThis.devvit.token);\n\n if (expiresAt && expiresAt - Date.now() / 1000 > 300) {\n return;\n }\n\n await requestTokenRefresh();\n}\n\nexport async function requestTokenRefresh(): Promise<void> {\n const response = await emitEffectWithResponse({\n type: EffectType.EFFECT_UPDATE_REQUEST_CONTEXT,\n updateRequestContext: {},\n });\n\n if (!response?.updateRequestContext?.signedRequestContext) {\n console.error('Failed to refresh token');\n return;\n }\n\n updateToken(response.updateRequestContext.signedRequestContext as WebbitToken);\n}\n", "import type { RequestContext } from '@devvit/protos/json/devvit/platform/v1/request_context.js';\nimport type { DevvitPostData } from '@devvit/protos/json/devvit/ui/effects/web_view/v1alpha/context.js';\nimport {\n type BridgeContext,\n Client as ClientName,\n type WebViewClientData,\n type WebViewContext,\n} from '@devvit/protos/json/devvit/ui/effects/web_view/v1alpha/context.js';\nimport type { WebViewImmersiveMode } from '@devvit/protos/json/devvit/ui/effects/web_view/v1alpha/immersive_mode.js';\nimport type { ConsentStatus } from '@devvit/protos/json/reddit/devvit/app_permission/v1/app_permission.js';\nimport type { Context } from '@devvit/shared-types/client/client-context.js';\nimport type {\n DevvitGlobal,\n WebViewScriptsVersion,\n} from '@devvit/shared-types/client/devvit-global.js';\nimport type { Client } from '@devvit/shared-types/shared/client.js';\nimport { T2, T3, T5 } from '@devvit/shared-types/tid.js';\nimport { type WebbitToken } from '@devvit/shared-types/webbit.js';\n\nimport { queryClientVersion } from './client.js';\nimport { decodeToken, requestTokenRefresh } from './token.js';\n\ndeclare global {\n // eslint-disable-next-line no-var\n var devvit: DevvitGlobal;\n /** Defined by build.js. */\n // eslint-disable-next-line no-var\n var webViewScriptsVersion: Readonly<WebViewScriptsVersion>;\n}\n\n/** @internal */\nexport const initDevvitGlobal = (\n document: { readonly currentScript: { readonly src: string } | SVGScriptElement | null },\n location: { readonly hash: string },\n window: { readonly name: string }\n): void => {\n const bridge = getBridgeContext(window.name, location.hash);\n\n const client = getClient(bridge);\n\n let appPermissionState = bridge?.appPermissionState;\n /**\n * Android versions older than this do not support runAsUser correctly, so we\n * suppress the permission state to allow the app to run as if the feature\n * wasn't present (failing open).\n *\n * Supported after 2026.05.x\n */\n if (client?.name === 'ANDROID') {\n if (\n client.version.yyyy < 2026 ||\n (client.version.yyyy === 2026 && client.version.release <= 5)\n ) {\n appPermissionState = undefined;\n }\n }\n\n const reqCtx = decodeToken(bridge.signedRequestContext);\n\n let context;\n if (reqCtx) context = contextFromRequestContext(reqCtx, client, bridge.postData);\n else if (bridge.webViewContext)\n context = contextFromWebViewContext(bridge.webViewContext, client, bridge.postData);\n if (!context) throw Error('no context');\n\n // to-do: expose `devvitDebug`, `shredditVersion`.\n\n const clientData: WebViewClientData | undefined = bridge.webViewClientData;\n globalThis.devvit = {\n context,\n dependencies: {\n client: queryClientVersion(document),\n webViewScripts: globalThis.webViewScriptsVersion,\n },\n entrypoints: clientData?.appConfig?.entrypoints ?? {},\n share: bridge?.shareParam ? { userData: bridge?.shareParam.userData } : undefined,\n adPayload: bridge?.adPayload,\n appPermissionState,\n token: (bridge.signedRequestContext || bridge.webbitToken) as WebbitToken,\n webViewMode: bridge?.viewMode,\n startTime: bridge?.startTime ?? undefined,\n refreshToken: requestTokenRefresh,\n };\n};\n\nexport function updateConsentStatus(consentStatus: ConsentStatus): void {\n if (!globalThis.devvit.appPermissionState) return;\n globalThis.devvit.appPermissionState.consentStatus = consentStatus;\n}\n\nexport function updateMode(mode: WebViewImmersiveMode): void {\n devvit.webViewMode = mode;\n}\n\nexport function updateToken(token: WebbitToken): void {\n globalThis.devvit.token = token;\n}\n\n/** @internal */\nexport function contextFromRequestContext(\n reqCtx: Readonly<RequestContext>,\n client: Client | undefined,\n postData: Readonly<DevvitPostData> | undefined\n): Context {\n if (!reqCtx.app) throw Error('no RequestContext.app');\n if (!reqCtx.post) throw Error('no RequestContext.post');\n if (!reqCtx.subreddit) throw Error('no RequestContext.subreddit');\n return {\n appName: reqCtx.app.name,\n appSlug: reqCtx.app.slug,\n appVersion: reqCtx.app.version,\n client,\n commentId: undefined,\n loid:\n reqCtx.user?.devvitLoid ?? (reqCtx.user as { devvit_loid?: string } | undefined)?.devvit_loid,\n postAuthorId: T2(reqCtx.post.author),\n postData: postData?.developerData,\n postId: T3(reqCtx.post.id),\n snoovatar: reqCtx.user?.snoovatar,\n subredditId: T5(reqCtx.subreddit.id),\n subredditName: reqCtx.subreddit.name,\n userId: reqCtx.user?.id ? T2(reqCtx.user.id) : undefined,\n username: reqCtx.user?.name,\n };\n}\n\n/** @internal */\nexport function contextFromWebViewContext(\n webViewCtx: Readonly<WebViewContext>,\n client: Client | undefined,\n postData: Readonly<DevvitPostData> | undefined\n): Context {\n return {\n appName: webViewCtx.appName,\n appSlug: webViewCtx.appName,\n appVersion: webViewCtx.appVersion,\n client,\n commentId: undefined,\n loid: undefined,\n postData: postData?.developerData,\n postAuthorId: undefined,\n postId: T3(webViewCtx.postId),\n snoovatar: undefined,\n subredditId: T5(webViewCtx.subredditId),\n subredditName: webViewCtx.subredditName,\n userId: webViewCtx.userId ? T2(webViewCtx.userId) : undefined,\n username: undefined,\n };\n}\n\n/**\n * Extracts the BridgeContext from the hash.\n * @internal\n */\nexport function getBridgeContext(name: string | undefined, hash: string): BridgeContext {\n if (name) return JSON.parse(name);\n const json = hash?.slice(1); // Strip the leading '#' from the hash\n if (!json) throw Error('no bridge context');\n return JSON.parse(decodeURIComponent(json));\n}\n\n/** @internal */\nexport function getClient(bridge: Readonly<BridgeContext>): Client | undefined {\n if (\n (bridge.client !== ClientName.ANDROID && bridge.client !== ClientName.IOS) ||\n !bridge.nativeVersion\n )\n return;\n return {\n name: bridge.client === ClientName.ANDROID ? 'ANDROID' : ('IOS' as const),\n version: bridge.nativeVersion,\n };\n}\n", "import type { DevvitGlobal } from '@devvit/shared-types/client/devvit-global.js';\n\n/** Injects an auth token into /api/ requests. */\nexport async function fetch(\n devvit: Readonly<DevvitGlobal>,\n globalFetch: typeof globalThis.fetch,\n location: Readonly<Location>,\n input: RequestInfo | URL,\n init?: RequestInit\n): Promise<Response> {\n const req = new Request(input, init);\n if (isSameSite(location, new URL(req.url)))\n req.headers.set('Authorization', `Bearer ${devvit.token}`);\n // to-do: pass devvit-debug from BridgeContext.\n return await globalFetch(req);\n}\n\nexport function initFetch(): void {\n globalThis.fetch = fetch.bind(undefined, globalThis.devvit, globalThis.fetch, location);\n}\n\n/** @internal */\nexport function isSameSite(location: Readonly<Location>, url: URL): boolean {\n return url.origin === location.origin;\n}\n", "import { EffectType } from '@devvit/protos/json/devvit/ui/effects/v1alpha/effect.js';\nimport type { WebViewMessageEvent_MessageData } from '@devvit/protos/json/devvit/ui/events/v1alpha/web_view.js';\nimport { emitEffect } from '@devvit/shared-types/client/emit-effect.js';\nimport {\n devvitScriptFileName,\n devvitScriptUrl,\n screenshotScriptFileName,\n} from '@devvit/shared-types/web-view-scripts-constants.js';\n\nconst fallbackScriptUrl = new URL(screenshotScriptFileName, devvitScriptUrl).toString();\n\nexport function getScreenshotModuleUrl(scriptSrc: string | undefined): string {\n const trimmedScriptSrc = scriptSrc?.trim();\n if (trimmedScriptSrc) {\n try {\n const scriptUrl = new URL(trimmedScriptSrc);\n if (scriptUrl.pathname.endsWith(`/${devvitScriptFileName}`)) {\n return new URL(screenshotScriptFileName, scriptUrl).toString();\n }\n } catch {\n // no-op, fall through to return below\n }\n }\n return fallbackScriptUrl;\n}\n\nasync function onMessage(\n event: MessageEvent<WebViewMessageEvent_MessageData>,\n scriptSrc: string | undefined\n): Promise<void> {\n const envelope = event.data;\n if (envelope?.type !== 'devvit-message' || envelope.data == null) return;\n const payload = envelope.data;\n if (payload.screenshotRequest == null) {\n return;\n }\n if (typeof payload.id !== 'string') {\n return;\n }\n\n let dataUrl: string | undefined;\n let errorMessage: string | undefined;\n try {\n const screenshotModulePath = getScreenshotModuleUrl(scriptSrc);\n // eslint-disable-next-line\n const { captureScreenshot } = await import(screenshotModulePath);\n dataUrl = await captureScreenshot();\n } catch (error) {\n errorMessage = error instanceof Error ? error.message : String(error);\n }\n emitEffect(\n { type: EffectType.EFFECT_SCREENSHOT_RESPONSE, screenshot: { dataUrl, error: errorMessage } },\n payload.id\n );\n}\n\nexport function initScreenshotRequestListener(scriptSrc: string): void {\n addEventListener('message', (event) => {\n void onMessage(event, scriptSrc);\n });\n}\n", "import { EffectType } from '@devvit/protos/json/devvit/ui/effects/v1alpha/effect.js';\nimport { emitEffect } from './emit-effect.js';\nexport function emitTelemetryClickEffect(event) {\n const click = TelemetryClickPayload(event.target, event.isTrusted);\n void emitEffect({\n type: EffectType.EFFECT_TELEMETRY,\n telemetry: { event: click.event, click },\n // to-do: remove once all clients support `telemetry`. Deprecated on\n // 2025-11-24.\n analytics: click,\n });\n}\n/**\n * This function is expensive. It does heavy DOM work.\n * @internal\n */\nexport function TelemetryClickPayload(eventTarget, isTrusted) {\n const { definition, elemTrackId } = analyzeClickTarget(eventTarget, isTrusted);\n return { event: 'click', definition, elemTrackId };\n}\nfunction analyzeClickTarget(eventTarget, isTrusted) {\n const targetElement = getTargetElement(eventTarget);\n if (!targetElement) {\n return { definition: 'default', elemTrackId: undefined };\n }\n let definition = 'default';\n if (isTrusted) {\n const computedStyles = globalThis.window.getComputedStyle(targetElement);\n if (computedStyles?.getPropertyValue('cursor') === 'pointer') {\n definition = 'strict';\n }\n }\n let elemTrackId;\n let currentElement = targetElement;\n while (currentElement) {\n if (elemTrackId === undefined) {\n const dataTrackId = currentElement.getAttribute('data-track-id');\n if (dataTrackId) {\n elemTrackId = dataTrackId;\n }\n else if (currentElement.id) {\n elemTrackId = currentElement.id;\n }\n }\n if (isTrusted && definition === 'default' && elementIsStrictClickTarget(currentElement)) {\n definition = 'strict';\n }\n if (elemTrackId !== undefined && (!isTrusted || definition === 'strict')) {\n break;\n }\n currentElement = currentElement.parentElement;\n }\n return { definition, elemTrackId };\n}\nfunction getTargetElement(eventTarget) {\n if (!eventTarget || typeof eventTarget !== 'object' || !('nodeType' in eventTarget)) {\n return undefined;\n }\n const node = eventTarget;\n return node.nodeType === 1 ? node : (node.parentElement ?? undefined);\n}\nfunction elementIsStrictClickTarget(element) {\n const STRICT_CLICK_TAGNAMES = ['A', 'BUTTON', 'CANVAS', 'INPUT', 'SELECT', 'TEXTAREA', 'LABEL'];\n return (STRICT_CLICK_TAGNAMES.includes(element.tagName) ||\n ['true', 'plaintext-only'].includes(element.getAttribute('contenteditable') ?? ''));\n}\n", "import { EffectType } from '@devvit/protos/json/devvit/ui/effects/v1alpha/effect.js';\nimport type {\n WebViewTelemetryLoadedEffect,\n WebViewTelemetryMetric,\n} from '@devvit/protos/json/devvit/ui/effects/web_view/v1alpha/telemetry.js';\nimport { emitEffect } from '@devvit/shared-types/client/emit-effect.js';\nimport { emitTelemetryClickEffect } from '@devvit/shared-types/client/telemetry.js';\n\nlet telemetryMetrics: WebViewTelemetryMetric[];\n\n/** startTime (UTC milliseconds) is provided by the client within the bridge context for native-clock metrics. */\nlet startTime: number | undefined;\n\n// Render duration still needs an emit guard because both FCP and navigation callbacks can attempt it.\nlet renderDurationSent: boolean = false;\n\n/**\n * `initTelemetry()` is added to all Devvit apps which use web views.\n *\n * This sends interaction events to the parent window via postMessage.\n * These metrics are used to inform app performance and feed ranking.\n */\nexport function initTelemetry(): void {\n initPerformanceMonitoring();\n initLoadedEvent();\n initClickEvent();\n}\n\nfunction initLoadedEvent(): void {\n addEventListener('load', () => {\n const timeStart = performance.timeOrigin;\n const duration = performance.now();\n const timeEnd = performance.timeOrigin + duration;\n const loaded: WebViewTelemetryLoadedEffect = {\n event: 'web-view-loaded',\n timeStart,\n timeEnd,\n duration,\n };\n\n void emitEffect({\n type: EffectType.EFFECT_TELEMETRY,\n telemetry: { event: loaded.event, loaded },\n // to-do: remove once all clients support `telemetry`. Deprecated on\n // 2025-11-24.\n analytics: loaded,\n });\n });\n}\n\nfunction initClickEvent(): void {\n document.addEventListener(\n 'click',\n (event) => {\n emitTelemetryClickEffect(event);\n },\n { passive: true }\n );\n}\n\nfunction getNavigationTiming(): PerformanceNavigationTiming | undefined {\n return performance.getEntriesByType('navigation')[0] as PerformanceNavigationTiming | undefined;\n}\n\nfunction measureTtfb(): WebViewTelemetryMetric | undefined {\n const navigationTiming = getNavigationTiming();\n\n if (!startTime || !navigationTiming) {\n return undefined;\n }\n\n return {\n spanName: 'web_view_time_to_first_byte',\n timeStart: startTime + navigationTiming.requestStart,\n timeEnd: startTime + navigationTiming.responseStart,\n };\n}\n\nfunction buildTimeOriginMetric(spanName: string, offset: number): WebViewTelemetryMetric[] {\n return [\n {\n spanName,\n timeStart: performance.timeOrigin,\n timeEnd: performance.timeOrigin + offset,\n },\n ];\n}\n\n/**\n * Measures the native startup window between the app launch (`startTime`) and the\n * moment the WebView began loading the page (`performance.timeOrigin`). This gap\n * covers WebView inflation, bridge setup, data fetching, and navigation triggers,\n * none of which is reflected in the in-page performance offsets.\n */\nfunction measureWebViewInitialization(): WebViewTelemetryMetric | undefined {\n if (!startTime) {\n return undefined;\n }\n\n return {\n spanName: 'web_view_initialization',\n timeStart: startTime,\n timeEnd: performance.timeOrigin,\n };\n}\n\n// Match the existing app-readiness signal by ending at the slower of first paint and page load.\nfunction maybeMeasureRenderDuration(): WebViewTelemetryMetric | undefined {\n const navigationTiming = getNavigationTiming();\n const fcpOffset = performance\n .getEntriesByType('paint')\n .find((entry) => entry.name === 'first-contentful-paint')?.startTime;\n const loadEventEndOffset = measureLoadEventEnd(navigationTiming);\n\n if (\n fcpOffset == null ||\n loadEventEndOffset == null ||\n !navigationTiming ||\n navigationTiming.responseStart <= 0\n ) {\n return undefined;\n }\n\n return {\n spanName: 'web_view_render_duration',\n timeStart: performance.timeOrigin + navigationTiming.responseStart,\n timeEnd: performance.timeOrigin + Math.max(fcpOffset, loadEventEndOffset),\n };\n}\n\nfunction measureFcp(): WebViewTelemetryMetric[] {\n const paintEntries = performance.getEntriesByType('paint');\n const fcpEntry = paintEntries.find((entry) => entry.name === 'first-contentful-paint');\n\n if (!fcpEntry) {\n return [];\n }\n\n return buildTimeOriginMetric('web_view_first_contentful_paint', fcpEntry.startTime);\n}\n\nfunction measureLoad(): WebViewTelemetryMetric[] {\n return buildTimeOriginMetric('web_view_load', performance.now());\n}\n\nfunction measureLoadEventEnd(\n navigationTiming: PerformanceNavigationTiming | undefined = getNavigationTiming()\n): number | undefined {\n return navigationTiming && navigationTiming.loadEventEnd > 0\n ? navigationTiming.loadEventEnd\n : undefined;\n}\n\nfunction emitRenderDuration(): void {\n if (renderDurationSent) {\n return;\n }\n\n const renderDuration = maybeMeasureRenderDuration();\n if (!renderDuration) {\n return;\n }\n\n renderDurationSent = true;\n emitEffect({\n type: EffectType.EFFECT_TELEMETRY,\n telemetry: { metrics: { metrics: [renderDuration] } },\n });\n}\n\n/**\n * Measure Time to Interactive (TTI)\n * Uses a heuristic: measured after a quiet window period following page load.\n * This represents when the page is fully interactive and stable.\n * Avoids long task API which isn't supported on iOS.\n */\nfunction measureTti(): WebViewTelemetryMetric[] {\n const navTiming = getNavigationTiming();\n const ttiTime = navTiming?.domInteractive;\n\n if (!ttiTime) {\n return [];\n }\n\n return buildTimeOriginMetric('web_view_time_to_interactive', ttiTime);\n}\n\nfunction initPerformanceMonitoring(): void {\n telemetryMetrics = [];\n startTime = globalThis.devvit?.startTime;\n renderDurationSent = false;\n\n const initialization = measureWebViewInitialization();\n if (initialization) telemetryMetrics.push(initialization);\n\n // Measure TTFB immediately if ready, otherwise handled in load event\n if (document.readyState === 'complete') {\n const ttfb = measureTtfb();\n if (ttfb) telemetryMetrics.push(ttfb);\n }\n\n const observer = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n if (entry.name === 'first-contentful-paint') {\n const fcp = measureFcp();\n observer.disconnect();\n if (fcp.length === 0) break;\n const renderDuration = renderDurationSent ? undefined : maybeMeasureRenderDuration();\n if (renderDuration) renderDurationSent = true;\n if (document.readyState === 'complete') {\n // load may already have emitted its batch, so late FCP emits standalone.\n emitEffect({\n type: EffectType.EFFECT_TELEMETRY,\n telemetry: { metrics: { metrics: renderDuration ? [...fcp, renderDuration] : fcp } },\n });\n } else {\n telemetryMetrics.push(...fcp);\n if (renderDuration) telemetryMetrics.push(renderDuration);\n }\n break;\n }\n }\n });\n\n observer.observe({ type: 'paint', buffered: true });\n\n const navigationObserver = new PerformanceObserver((list) => {\n const navigationEntry = list.getEntries().find((entry) => entry.entryType === 'navigation');\n if (navigationEntry) {\n navigationObserver.disconnect();\n emitRenderDuration();\n }\n });\n\n navigationObserver.observe({ type: 'navigation', buffered: true });\n\n if (document.readyState === 'loading') {\n globalThis.addEventListener('DOMContentLoaded', () => {\n telemetryMetrics.push(...measureTti());\n });\n } else {\n telemetryMetrics.push(...measureTti());\n }\n\n // Emit metrics after page is fully loaded\n globalThis.addEventListener('load', () => {\n const ttfb = measureTtfb();\n if (ttfb) telemetryMetrics.push(ttfb);\n\n telemetryMetrics.push(...measureLoad());\n\n emitEffect({\n type: EffectType.EFFECT_TELEMETRY,\n telemetry: {\n metrics: {\n metrics: telemetryMetrics,\n },\n },\n });\n });\n}\n", "import type { WebViewMessageEvent_MessageData } from '@devvit/protos/json/devvit/ui/events/v1alpha/web_view.js';\n\nimport { updateMode } from './devvit-global.js';\n\n/** @internal */\nexport function initWebViewMode(): void {\n addEventListener('message', onWebViewMessage);\n}\n\n/** @internal */\nexport function onWebViewMessage(ev: MessageEvent<WebViewMessageEvent_MessageData>): void {\n if (ev.data?.type !== 'devvit-message') return;\n if (!ev.data?.data?.immersiveModeEvent) return;\n updateMode(ev.data.data.immersiveModeEvent.immersiveMode);\n}\n", "import { queryCurrentScriptSrc } from './client.js';\nimport { initDevvitGlobal } from './devvit-global.js';\nimport { initFetch } from './fetch.js';\nimport { initScreenshotRequestListener } from './screenshot-listener.js';\nimport { initTelemetry } from './telemetry.js';\nimport { initToken } from './token.js';\nimport { initWebViewMode } from './web-view-mode.js';\n\ninitDevvitGlobal(document, location, window);\ninitTelemetry();\ninitFetch();\ninitScreenshotRequestListener(queryCurrentScriptSrc(document) ?? '');\ninitToken();\ninitWebViewMode();\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": ["define_globalThis_webViewScriptsVersion_default", "clientVersionQueryParam", "devvitScriptFileName", "screenshotScriptFileName", "devvitScriptUrl", "queryClientVersion", "document", "clientVersionQueryParam", "queryCurrentScriptSrc", "Client", "Height", "assert", "condition", "msg", "T_PREFIX", "isT2", "id", "T_PREFIX", "isT3", "isT5", "id", "T_PREFIX", "assertT2", "id", "assert", "isT2", "T_PREFIX", "assertT3", "isT3", "assertT5", "id", "assert", "isT5", "T_PREFIX", "T2", "id", "assertT2", "T3", "assertT3", "T5", "id", "assertT5", "EffectType", "WebViewInternalMessageScope", "webViewInternalMessageType", "emitEffect", "effect", "requestId", "message", "WebViewInternalMessageScope", "emitEffectWithResponse", "resolve", "EffectType", "id", "handleEffect", "event", "InvalidTokenError", "b64DecodeUnicode", "str", "m", "p", "code", "base64UrlDecode", "output", "jwtDecode", "token", "options", "pos", "part", "decoded", "e", "decodeToken", "token", "jwtDecode", "err", "initToken", "refreshToken", "expiresAt", "requestTokenRefresh", "response", "emitEffectWithResponse", "EffectType", "updateToken", "initDevvitGlobal", "document", "location", "window", "bridge", "getBridgeContext", "client", "getClient", "appPermissionState", "reqCtx", "decodeToken", "context", "contextFromRequestContext", "contextFromWebViewContext", "clientData", "queryClientVersion", "define_globalThis_webViewScriptsVersion_default", "requestTokenRefresh", "updateMode", "mode", "updateToken", "token", "contextFromRequestContext", "reqCtx", "client", "postData", "T2", "T3", "T5", "contextFromWebViewContext", "webViewCtx", "getBridgeContext", "name", "hash", "json", "getClient", "bridge", "Client", "fetch", "devvit", "globalFetch", "location", "input", "init", "req", "isSameSite", "initFetch", "url", "fallbackScriptUrl", "screenshotScriptFileName", "devvitScriptUrl", "getScreenshotModuleUrl", "scriptSrc", "trimmedScriptSrc", "scriptUrl", "devvitScriptFileName", "onMessage", "event", "envelope", "payload", "dataUrl", "errorMessage", "screenshotModulePath", "captureScreenshot", "error", "emitEffect", "EffectType", "initScreenshotRequestListener", "emitTelemetryClickEffect", "event", "click", "TelemetryClickPayload", "emitEffect", "EffectType", "eventTarget", "isTrusted", "definition", "elemTrackId", "analyzeClickTarget", "targetElement", "getTargetElement", "currentElement", "dataTrackId", "elementIsStrictClickTarget", "node", "element", "telemetryMetrics", "startTime", "renderDurationSent", "initTelemetry", "initPerformanceMonitoring", "initLoadedEvent", "initClickEvent", "timeStart", "duration", "timeEnd", "loaded", "emitEffect", "EffectType", "event", "emitTelemetryClickEffect", "getNavigationTiming", "measureTtfb", "navigationTiming", "buildTimeOriginMetric", "spanName", "offset", "measureWebViewInitialization", "maybeMeasureRenderDuration", "fcpOffset", "entry", "loadEventEndOffset", "measureLoadEventEnd", "measureFcp", "fcpEntry", "measureLoad", "emitRenderDuration", "renderDuration", "measureTti", "ttiTime", "initialization", "ttfb", "observer", "list", "fcp", "navigationObserver", "initWebViewMode", "onWebViewMessage", "ev", "updateMode", "initDevvitGlobal", "initTelemetry", "initFetch", "initScreenshotRequestListener", "queryCurrentScriptSrc", "initToken", "initWebViewMode"]
|
|
7
7
|
}
|
package/tsconfig.tsbuildinfo
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/typescript/lib/lib.es2023.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2023.array.d.ts","../../../node_modules/typescript/lib/lib.es2023.collection.d.ts","../../../node_modules/typescript/lib/lib.es2023.intl.d.ts","../../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/esbuild/lib/main.d.ts","../package.json","../../protos/dist/json/reddit/devvit/app_permission/v1/app_permission.d.ts","../../protos/dist/json/reddit/devvit/ads/v1/ads.d.ts","../../protos/dist/json/reddit/devvit/common/v1/app.d.ts","../../protos/dist/json/devvit/ui/effects/web_view/v1alpha/immersive_mode.d.ts","../../protos/dist/json/devvit/ui/effects/web_view/v1alpha/context.d.ts","../../shared-types/dist/webbit.d.ts","../../shared-types/dist/json.d.ts","../../shared-types/dist/PostData.d.ts","../../shared-types/dist/tid.d.ts","../../shared-types/dist/shared/baseContext.d.ts","../../shared-types/dist/shared/client.d.ts","../../shared-types/dist/client/client-context.d.ts","../../shared-types/dist/client/devvit-global.d.ts","../tools/build.js","../tools/wvs.js","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/buffer/index.d.ts","../../../node_modules/undici-types/header.d.ts","../../../node_modules/undici-types/readable.d.ts","../../../node_modules/undici-types/file.d.ts","../../../node_modules/undici-types/fetch.d.ts","../../../node_modules/undici-types/formdata.d.ts","../../../node_modules/undici-types/connector.d.ts","../../../node_modules/undici-types/client.d.ts","../../../node_modules/undici-types/errors.d.ts","../../../node_modules/undici-types/dispatcher.d.ts","../../../node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/undici-types/global-origin.d.ts","../../../node_modules/undici-types/pool-stats.d.ts","../../../node_modules/undici-types/pool.d.ts","../../../node_modules/undici-types/handlers.d.ts","../../../node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/undici-types/agent.d.ts","../../../node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/undici-types/mock-agent.d.ts","../../../node_modules/undici-types/mock-client.d.ts","../../../node_modules/undici-types/mock-pool.d.ts","../../../node_modules/undici-types/mock-errors.d.ts","../../../node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/undici-types/api.d.ts","../../../node_modules/undici-types/cookies.d.ts","../../../node_modules/undici-types/patch.d.ts","../../../node_modules/undici-types/filereader.d.ts","../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/undici-types/websocket.d.ts","../../../node_modules/undici-types/content-type.d.ts","../../../node_modules/undici-types/cache.d.ts","../../../node_modules/undici-types/interceptors.d.ts","../../../node_modules/undici-types/index.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/dom-events.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/readline/promises.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/sea.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/globals.global.d.ts","../../../node_modules/@types/node/index.d.ts"],"fileIdsList":[[81],[117],[118,123,152],[119,124,130,131,138,149,160],[119,120,130,138],[121,161],[122,123,131,139],[123,149,157],[124,126,130,138],[117,125],[126,127],[130],[128,130],[117,130],[130,131,132,149,160],[130,131,132,145,149,152],[115,118,165],[126,130,133,138,149,160],[130,131,133,134,138,149,157,160],[133,135,149,157,160],[81,82,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167],[130,136],[137,160,165],[126,130,138,149],[139],[140],[117,141],[138,139,142,159,165],[143],[144],[130,145,146],[145,147,161,163],[118,130,149,150,151,152],[118,149,151],[149,150],[152],[153],[117,149],[130,155,156],[155,156],[123,138,149,157],[158],[138,159],[118,133,144,160],[123,161],[149,162],[137,163],[164],[118,123,130,132,141,149,160,163,165],[149,166],[92,96,160],[92,149,160],[87],[89,92,157,160],[138,157],[168],[87,168],[89,92,138,160],[84,85,88,91,118,130,149,160],[84,90],[88,92,118,152,160,168],[118,168],[108,118,168],[86,87,168],[92],[86,87,88,89,90,91,92,93,94,96,97,98,99,100,101,102,103,104,105,106,107,109,110,111,112,113,114],[92,99,100],[90,92,100,101],[91],[84,87,92],[92,96,100,101],[96],[90,92,95,160],[84,89,90,92,96,99],[118,149],[87,92,108,118,165,168],[66,68,69],[66,67],[72],[74,75,76],[69,70,71,77],[73,74],[70],[64,65,78,119,131]],"fileInfos":[{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"092c2bfe125ce69dbb1223c85d68d4d2397d7d8411867b5cc03cec902c233763","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"b5ce7a470bc3628408429040c4e3a53a27755022a32fd05e2cb694e7015386c7","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"161c8e0690c46021506e32fda85956d785b70f309ae97011fd27374c065cac9b","affectsGlobalScope":true,"impliedFormat":1},{"version":"3e2ba079281ead3049ecf7cbf62cfa342bf506d85c5a234fef587d2c8bb81995","signature":"1ad1476f439d980ed525a4e9f2cb912b840fc88b721f0455a1488b28ca381c10"},{"version":"8baba0ea3c8dd09f08640e9f1aecb2331bc434a8bd066e9414094bf7cf4f7649","impliedFormat":99},{"version":"7479db9f1098718bc606ebc836d36277c9471e913fd1359200a936af2f3f8b3f","impliedFormat":99},{"version":"b01c4bb9edd7f17c82fa68830b10a0b9a94d1c79daf3d9cc7aa5fcd16bad74a4","impliedFormat":99},{"version":"fd053a652acd3a2c7fc5ff6b7e628567dbc82d69414adbf8b40445bae9006342","impliedFormat":99},{"version":"e756bf9eaf6d2834e322aea0eddb72a2712419c8b392953adcf49e6f39ccd107","impliedFormat":99},{"version":"6617d713c28b1bf882c39a3620c4db41e568f139217625701a71dd9a90873d3a","impliedFormat":99},{"version":"d211569292bb691b2476beff57b1972d4a94f999e8d7bbfad7605e21b4d413ad","impliedFormat":99},{"version":"e43a0516850ba3ea422d0d6649784f0323222dec22a01bbd3e256fb447bba6c4","impliedFormat":99},{"version":"d75ce101b61036b915e1f5e5e5b872dcfdd7f8cac22186cf4049fcceac4395ac","impliedFormat":99},{"version":"480d92d91f63183db46032f1eeec63c2da6c121bfcd52d2c026638034c74264e","impliedFormat":99},{"version":"1b6350dd5736fb570fae8bb8fed3ebf9db6ca8a3b9cf20b99a6da7bc21b7f7a3","impliedFormat":99},{"version":"16f78a145325f9cbf57d296edae7149d7540a49fe3f89eb3e3ac11d39cd849ca","impliedFormat":99},{"version":"eedb3ae6a769de9e213580046e727b5597b1f8bebe5c6457efaab502b7a1fe0e","impliedFormat":99},{"version":"ec3d7f0fb5bc30ffd4ab33087ffdd043d1498087651716c43eee6edcd39080fd","signature":"9f2cb4eb5a50b225c59f60849e5f3695a595661921877b1fb6314feaf08d9271","impliedFormat":99},{"version":"29fbfaa5babb8bf5079de944cf3ed30bc373ae9660ef1b0b862f2f5eecb9a93f","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":99},{"version":"2db0dd3aaa2ed285950273ce96ae8a450b45423aa9da2d10e194570f1233fa6b","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"7180c03fd3cb6e22f911ce9ba0f8a7008b1a6ddbe88ccf16a9c8140ef9ac1686","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"54cb85a47d760da1c13c00add10d26b5118280d44d58e6908d8e89abbd9d7725","impliedFormat":1},{"version":"3e4825171442666d31c845aeb47fcd34b62e14041bb353ae2b874285d78482aa","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"a967bfe3ad4e62243eb604bf956101e4c740f5921277c60debaf325c1320bf88","impliedFormat":1},{"version":"e9775e97ac4877aebf963a0289c81abe76d1ec9a2a7778dbe637e5151f25c5f3","impliedFormat":1},{"version":"471e1da5a78350bc55ef8cef24eb3aca6174143c281b8b214ca2beda51f5e04a","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"db3435f3525cd785bf21ec6769bf8da7e8a776be1a99e2e7efb5f244a2ef5fee","impliedFormat":1},{"version":"c3b170c45fc031db31f782e612adf7314b167e60439d304b49e704010e7bafe5","impliedFormat":1},{"version":"40383ebef22b943d503c6ce2cb2e060282936b952a01bea5f9f493d5fb487cc7","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"3a84b7cb891141824bd00ef8a50b6a44596aded4075da937f180c90e362fe5f6","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"33203609eba548914dc83ddf6cadbc0bcb6e8ef89f6d648ca0908ae887f9fcc5","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","impliedFormat":1},{"version":"339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","impliedFormat":1},{"version":"9f0a92164925aa37d4a5d9dd3e0134cff8177208dba55fd2310cd74beea40ee2","impliedFormat":1},{"version":"8bfdb79bf1a9d435ec48d9372dc93291161f152c0865b81fc0b2694aedb4578d","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"d32275be3546f252e3ad33976caf8c5e842c09cb87d468cb40d5f4cf092d1acc","impliedFormat":1},{"version":"4a0c3504813a3289f7fb1115db13967c8e004aa8e4f8a9021b95285502221bd1","impliedFormat":1},{"version":"e7be367719c613d580d4b27fdf8fe64c9736f48217f4b322c0d63b2971460918","affectsGlobalScope":true,"impliedFormat":1},{"version":"3d77c73be94570813f8cadd1f05ebc3dc5e2e4fdefe4d340ca20cd018724ee36","impliedFormat":1},{"version":"dd78bfe9dfcadb2c4cd3a3a36df38fb3ef8ed2c601b57f6ad9a29e38a17ff39c","affectsGlobalScope":true,"impliedFormat":1},{"version":"62f1c00d3d246e0e3cf0224f91e122d560428ec1ccc36bb51d4574a84f1dbad0","impliedFormat":1},{"version":"53f0960fdcc53d097918adfd8861ffbe0db989c56ffc16c052197bf115da5ed6","impliedFormat":1},{"version":"662163e5327f260b23ca0a1a1ad8a74078aabb587c904fcb5ef518986987eaff","affectsGlobalScope":true,"impliedFormat":1},{"version":"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb","impliedFormat":1},{"version":"f85c06e750743acf31f0cfd3be284a364d469761649e29547d0dd6be48875150","affectsGlobalScope":true,"impliedFormat":1},{"version":"b0c0d1d13be149f790a75b381b413490f98558649428bb916fd2d71a3f47a134","impliedFormat":1},{"version":"3c884d9d9ec454bdf0d5a0b8465bf8297d2caa4d853851d92cc417ac6f30b969","impliedFormat":1},{"version":"0364f8bb461d6e84252412d4e5590feda4eb582f77d47f7a024a7a9ff105dfdc","impliedFormat":1},{"version":"5433f7f77cd1fd53f45bd82445a4e437b2f6a72a32070e907530a4fea56c30c8","impliedFormat":1},{"version":"d0ca5d7df114035258a9d01165be309371fcccf0cccd9d57b1453204686d1ed0","impliedFormat":1},{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true,"impliedFormat":1},{"version":"9a30b7fefd7f8abbca4828d481c61c18e40fe5ff107e113b1c1fcd2c8dcf2743","affectsGlobalScope":true,"impliedFormat":1},{"version":"173b6275a81ebdb283b180654890f46516c21199734fed01a773b1c168b8c45c","impliedFormat":1},{"version":"304f66274aa8119e8d65a49b1cff84cbf803def6afe1b2cc987386e9a9890e22","impliedFormat":1},{"version":"1b9adafe8a7fefaeaf9099a0e06f602903f6268438147b843a33a5233ac71745","impliedFormat":1},{"version":"98273274f2dbb79b0b2009b20f74eca4a7146a3447c912d580cd5d2d94a7ae30","impliedFormat":1},{"version":"c933f7ba4b201c98b14275fd11a14abb950178afd2074703250fe3654fc10cd2","impliedFormat":1},{"version":"2eaa31492906bc8525aff3c3ec2236e22d90b0dfeee77089f196cd0adf0b3e3b","impliedFormat":1},{"version":"ea455cc68871b049bcecd9f56d4cf27b852d6dafd5e3b54468ca87cc11604e4d","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f5814f29dbaf8bacd1764aebdf1c8a6eb86381f6a188ddbac0fcbaab855ce52","impliedFormat":1},{"version":"a63d03de72adfb91777784015bd3b4125abd2f5ef867fc5a13920b5649e8f52b","impliedFormat":1},{"version":"d20e003f3d518a7c1f749dbe27c6ab5e3be7b3c905a48361b04a9557de4a6900","impliedFormat":1},{"version":"1d4d78c8b23c9ddaaaa49485e6adc2ec01086dfe5d8d4d36ca4cdc98d2f7e74a","affectsGlobalScope":true,"impliedFormat":1},{"version":"44fc16356b81c0463cc7d7b2b35dcf324d8144136f5bc5ce73ced86f2b3475b5","affectsGlobalScope":true,"impliedFormat":1},{"version":"575fb200043b11b464db8e42cc64379c5fd322b6d787638e005b5ee98a64486d","impliedFormat":1},{"version":"6de2f225d942562733e231a695534b30039bdf1875b377bb7255881f0df8ede8","impliedFormat":1},{"version":"56249fd3ef1f6b90888e606f4ea648c43978ef43a7263aafad64f8d83cd3b8aa","impliedFormat":1},{"version":"139ad1dc93a503da85b7a0d5f615bddbae61ad796bc68fedd049150db67a1e26","impliedFormat":1},{"version":"7b166975fdbd3b37afb64707b98bca88e46577bbc6c59871f9383a7df2daacd1","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"81505c54d7cad0009352eaa21bd923ab7cdee7ec3405357a54d9a5da033a2084","impliedFormat":1},{"version":"269929a24b2816343a178008ac9ae9248304d92a8ba8e233055e0ed6dbe6ef71","impliedFormat":1},{"version":"93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","impliedFormat":1},{"version":"3c1f19c7abcda6b3a4cf9438a15c7307a080bd3b51dfd56b198d9f86baf19447","impliedFormat":1},{"version":"2ee1645e0df9d84467cfe1d67b0ad3003c2f387de55874d565094464ee6f2927","impliedFormat":1},{"version":"7da97d603bf3dd0000f56467c56cb6efaf5f94692980474925fae6c33412b12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"9cf780e96b687e4bdfd1907ed26a688c18b89797490a00598fa8b8ab683335dd","affectsGlobalScope":true,"impliedFormat":1},{"version":"98e00f3613402504bc2a2c9a621800ab48e0a463d1eed062208a4ae98ad8f84c","impliedFormat":1},{"version":"9ae88ce9f73446c24b2d2452e993b676da1b31fca5ceb7276e7f36279f693ed1","impliedFormat":1},{"version":"e49d7625faff2a7842e4e7b9b197f972633fca685afcf6b4403400c97d087c36","impliedFormat":1},{"version":"b82c38abc53922b1b3670c3af6f333c21b735722a8f156e7d357a2da7c53a0a0","impliedFormat":1},{"version":"b423f53647708043299ded4daa68d95c967a2ac30aa1437adc4442129d7d0a6c","affectsGlobalScope":true,"impliedFormat":1},{"version":"7245af181218216bacb01fbdf51095617a51661f20d77178c69a377e16fb69ed","affectsGlobalScope":true,"impliedFormat":1},{"version":"4f0fc7b7f54422bd97cfaf558ddb4bca86893839367b746a8f86b60ac7619673","impliedFormat":1},{"version":"4cdd8b6b51599180a387cc7c1c50f49eca5ce06595d781638fd0216520d98246","impliedFormat":1},{"version":"d91a7d8b5655c42986f1bdfe2105c4408f472831c8f20cf11a8c3345b6b56c8c","impliedFormat":1},{"version":"8704423bf338bff381ebc951ed819935d0252d90cd6de7dffe5b0a5debb65d07","affectsGlobalScope":true,"impliedFormat":1},{"version":"7c6929fd7cbf38499b6a600b91c3b603d1d78395046dc3499b2b92d01418b94b","impliedFormat":1},{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a42be67ed1ddaec743582f41fc219db96a1b69719fccac6d1464321178d610fc","impliedFormat":1}],"root":[79,80],"options":{"allowJs":true,"allowSyntheticDefaultImports":true,"checkJs":true,"composite":true,"declaration":true,"declarationMap":true,"downlevelIteration":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"exactOptionalPropertyTypes":true,"experimentalDecorators":true,"inlineSources":false,"jsx":2,"module":199,"noImplicitOverride":true,"noUnusedLocals":false,"noUnusedParameters":true,"outDir":"./","skipLibCheck":true,"strict":true,"stripInternal":true,"target":7,"verbatimModuleSyntax":true},"referencedMap":[[81,1],[82,1],[117,2],[118,3],[119,4],[120,5],[121,6],[122,7],[123,8],[124,9],[125,10],[126,11],[127,11],[129,12],[128,13],[130,14],[131,15],[132,16],[116,17],[133,18],[134,19],[135,20],[168,21],[136,22],[137,23],[138,24],[139,25],[140,26],[141,27],[142,28],[143,29],[144,30],[145,31],[146,31],[147,32],[149,33],[151,34],[150,35],[152,36],[153,37],[154,38],[155,39],[156,40],[157,41],[158,42],[159,43],[160,44],[161,45],[162,46],[163,47],[164,48],[165,49],[166,50],[99,51],[106,52],[98,51],[113,53],[90,54],[89,55],[112,56],[107,57],[110,58],[92,59],[91,60],[87,61],[86,62],[109,63],[88,64],[93,65],[97,65],[115,66],[114,65],[101,67],[102,68],[104,69],[100,70],[103,71],[108,56],[95,72],[96,73],[105,74],[85,75],[111,76],[70,77],[68,78],[73,79],[77,80],[78,81],[75,82],[76,83],[79,84],[80,83]],"affectedFilesPendingEmit":[[79,49],[80,49]],"emitSignatures":[79,80],"latestChangedDtsFile":"./web-view-mode.test.d.ts","version":"5.8.3"}
|
|
1
|
+
{"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/typescript/lib/lib.es2023.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2023.array.d.ts","../../../node_modules/typescript/lib/lib.es2023.collection.d.ts","../../../node_modules/typescript/lib/lib.es2023.intl.d.ts","../../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/esbuild/lib/main.d.ts","../package.json","../../protos/dist/json/reddit/devvit/app_permission/v1/app_permission.d.ts","../../protos/dist/json/reddit/devvit/ads/v1/ads.d.ts","../../protos/dist/json/reddit/devvit/common/v1/app.d.ts","../../protos/dist/json/devvit/ui/effects/web_view/v1alpha/immersive_mode.d.ts","../../protos/dist/json/devvit/ui/effects/web_view/v1alpha/context.d.ts","../../shared-types/dist/webbit.d.ts","../../shared-types/dist/json.d.ts","../../shared-types/dist/PostData.d.ts","../../shared-types/dist/tid.d.ts","../../shared-types/dist/shared/baseContext.d.ts","../../shared-types/dist/shared/client.d.ts","../../shared-types/dist/client/client-context.d.ts","../../shared-types/dist/client/devvit-global.d.ts","../tools/build.js","../tools/wvs.js","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/buffer/index.d.ts","../../../node_modules/undici-types/header.d.ts","../../../node_modules/undici-types/readable.d.ts","../../../node_modules/undici-types/file.d.ts","../../../node_modules/undici-types/fetch.d.ts","../../../node_modules/undici-types/formdata.d.ts","../../../node_modules/undici-types/connector.d.ts","../../../node_modules/undici-types/client.d.ts","../../../node_modules/undici-types/errors.d.ts","../../../node_modules/undici-types/dispatcher.d.ts","../../../node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/undici-types/global-origin.d.ts","../../../node_modules/undici-types/pool-stats.d.ts","../../../node_modules/undici-types/pool.d.ts","../../../node_modules/undici-types/handlers.d.ts","../../../node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/undici-types/agent.d.ts","../../../node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/undici-types/mock-agent.d.ts","../../../node_modules/undici-types/mock-client.d.ts","../../../node_modules/undici-types/mock-pool.d.ts","../../../node_modules/undici-types/mock-errors.d.ts","../../../node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/undici-types/api.d.ts","../../../node_modules/undici-types/cookies.d.ts","../../../node_modules/undici-types/patch.d.ts","../../../node_modules/undici-types/filereader.d.ts","../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/undici-types/websocket.d.ts","../../../node_modules/undici-types/content-type.d.ts","../../../node_modules/undici-types/cache.d.ts","../../../node_modules/undici-types/interceptors.d.ts","../../../node_modules/undici-types/index.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/dom-events.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/readline/promises.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/sea.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/globals.global.d.ts","../../../node_modules/@types/node/index.d.ts"],"fileIdsList":[[81],[117],[118,123,152],[119,124,130,131,138,149,160],[119,120,130,138],[121,161],[122,123,131,139],[123,149,157],[124,126,130,138],[117,125],[126,127],[130],[128,130],[117,130],[130,131,132,149,160],[130,131,132,145,149,152],[115,118,165],[126,130,133,138,149,160],[130,131,133,134,138,149,157,160],[133,135,149,157,160],[81,82,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167],[130,136],[137,160,165],[126,130,138,149],[139],[140],[117,141],[138,139,142,159,165],[143],[144],[130,145,146],[145,147,161,163],[118,130,149,150,151,152],[118,149,151],[149,150],[152],[153],[117,149],[130,155,156],[155,156],[123,138,149,157],[158],[138,159],[118,133,144,160],[123,161],[149,162],[137,163],[164],[118,123,130,132,141,149,160,163,165],[149,166],[92,96,160],[92,149,160],[87],[89,92,157,160],[138,157],[168],[87,168],[89,92,138,160],[84,85,88,91,118,130,149,160],[84,90],[88,92,118,152,160,168],[118,168],[108,118,168],[86,87,168],[92],[86,87,88,89,90,91,92,93,94,96,97,98,99,100,101,102,103,104,105,106,107,109,110,111,112,113,114],[92,99,100],[90,92,100,101],[91],[84,87,92],[92,96,100,101],[96],[90,92,95,160],[84,89,90,92,96,99],[118,149],[87,92,108,118,165,168],[66,68,69],[66,67],[72],[74,75,76],[69,70,71,77],[73,74],[70],[64,65,78,119,131]],"fileInfos":[{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"092c2bfe125ce69dbb1223c85d68d4d2397d7d8411867b5cc03cec902c233763","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"b5ce7a470bc3628408429040c4e3a53a27755022a32fd05e2cb694e7015386c7","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"161c8e0690c46021506e32fda85956d785b70f309ae97011fd27374c065cac9b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0866d9a34b345e9fb188859c06a05d3933ce77a4f11264131b0e861d7d915fba","signature":"1ad1476f439d980ed525a4e9f2cb912b840fc88b721f0455a1488b28ca381c10"},{"version":"8baba0ea3c8dd09f08640e9f1aecb2331bc434a8bd066e9414094bf7cf4f7649","impliedFormat":99},{"version":"7479db9f1098718bc606ebc836d36277c9471e913fd1359200a936af2f3f8b3f","impliedFormat":99},{"version":"b01c4bb9edd7f17c82fa68830b10a0b9a94d1c79daf3d9cc7aa5fcd16bad74a4","impliedFormat":99},{"version":"fd053a652acd3a2c7fc5ff6b7e628567dbc82d69414adbf8b40445bae9006342","impliedFormat":99},{"version":"e756bf9eaf6d2834e322aea0eddb72a2712419c8b392953adcf49e6f39ccd107","impliedFormat":99},{"version":"6617d713c28b1bf882c39a3620c4db41e568f139217625701a71dd9a90873d3a","impliedFormat":99},{"version":"d211569292bb691b2476beff57b1972d4a94f999e8d7bbfad7605e21b4d413ad","impliedFormat":99},{"version":"e43a0516850ba3ea422d0d6649784f0323222dec22a01bbd3e256fb447bba6c4","impliedFormat":99},{"version":"d75ce101b61036b915e1f5e5e5b872dcfdd7f8cac22186cf4049fcceac4395ac","impliedFormat":99},{"version":"480d92d91f63183db46032f1eeec63c2da6c121bfcd52d2c026638034c74264e","impliedFormat":99},{"version":"1b6350dd5736fb570fae8bb8fed3ebf9db6ca8a3b9cf20b99a6da7bc21b7f7a3","impliedFormat":99},{"version":"16f78a145325f9cbf57d296edae7149d7540a49fe3f89eb3e3ac11d39cd849ca","impliedFormat":99},{"version":"eedb3ae6a769de9e213580046e727b5597b1f8bebe5c6457efaab502b7a1fe0e","impliedFormat":99},{"version":"ec3d7f0fb5bc30ffd4ab33087ffdd043d1498087651716c43eee6edcd39080fd","signature":"9f2cb4eb5a50b225c59f60849e5f3695a595661921877b1fb6314feaf08d9271","impliedFormat":99},{"version":"29fbfaa5babb8bf5079de944cf3ed30bc373ae9660ef1b0b862f2f5eecb9a93f","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":99},{"version":"2db0dd3aaa2ed285950273ce96ae8a450b45423aa9da2d10e194570f1233fa6b","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"7180c03fd3cb6e22f911ce9ba0f8a7008b1a6ddbe88ccf16a9c8140ef9ac1686","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"54cb85a47d760da1c13c00add10d26b5118280d44d58e6908d8e89abbd9d7725","impliedFormat":1},{"version":"3e4825171442666d31c845aeb47fcd34b62e14041bb353ae2b874285d78482aa","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"a967bfe3ad4e62243eb604bf956101e4c740f5921277c60debaf325c1320bf88","impliedFormat":1},{"version":"e9775e97ac4877aebf963a0289c81abe76d1ec9a2a7778dbe637e5151f25c5f3","impliedFormat":1},{"version":"471e1da5a78350bc55ef8cef24eb3aca6174143c281b8b214ca2beda51f5e04a","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"db3435f3525cd785bf21ec6769bf8da7e8a776be1a99e2e7efb5f244a2ef5fee","impliedFormat":1},{"version":"c3b170c45fc031db31f782e612adf7314b167e60439d304b49e704010e7bafe5","impliedFormat":1},{"version":"40383ebef22b943d503c6ce2cb2e060282936b952a01bea5f9f493d5fb487cc7","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"3a84b7cb891141824bd00ef8a50b6a44596aded4075da937f180c90e362fe5f6","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"33203609eba548914dc83ddf6cadbc0bcb6e8ef89f6d648ca0908ae887f9fcc5","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","impliedFormat":1},{"version":"339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","impliedFormat":1},{"version":"9f0a92164925aa37d4a5d9dd3e0134cff8177208dba55fd2310cd74beea40ee2","impliedFormat":1},{"version":"8bfdb79bf1a9d435ec48d9372dc93291161f152c0865b81fc0b2694aedb4578d","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"d32275be3546f252e3ad33976caf8c5e842c09cb87d468cb40d5f4cf092d1acc","impliedFormat":1},{"version":"4a0c3504813a3289f7fb1115db13967c8e004aa8e4f8a9021b95285502221bd1","impliedFormat":1},{"version":"e7be367719c613d580d4b27fdf8fe64c9736f48217f4b322c0d63b2971460918","affectsGlobalScope":true,"impliedFormat":1},{"version":"3d77c73be94570813f8cadd1f05ebc3dc5e2e4fdefe4d340ca20cd018724ee36","impliedFormat":1},{"version":"dd78bfe9dfcadb2c4cd3a3a36df38fb3ef8ed2c601b57f6ad9a29e38a17ff39c","affectsGlobalScope":true,"impliedFormat":1},{"version":"62f1c00d3d246e0e3cf0224f91e122d560428ec1ccc36bb51d4574a84f1dbad0","impliedFormat":1},{"version":"53f0960fdcc53d097918adfd8861ffbe0db989c56ffc16c052197bf115da5ed6","impliedFormat":1},{"version":"662163e5327f260b23ca0a1a1ad8a74078aabb587c904fcb5ef518986987eaff","affectsGlobalScope":true,"impliedFormat":1},{"version":"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb","impliedFormat":1},{"version":"f85c06e750743acf31f0cfd3be284a364d469761649e29547d0dd6be48875150","affectsGlobalScope":true,"impliedFormat":1},{"version":"b0c0d1d13be149f790a75b381b413490f98558649428bb916fd2d71a3f47a134","impliedFormat":1},{"version":"3c884d9d9ec454bdf0d5a0b8465bf8297d2caa4d853851d92cc417ac6f30b969","impliedFormat":1},{"version":"0364f8bb461d6e84252412d4e5590feda4eb582f77d47f7a024a7a9ff105dfdc","impliedFormat":1},{"version":"5433f7f77cd1fd53f45bd82445a4e437b2f6a72a32070e907530a4fea56c30c8","impliedFormat":1},{"version":"d0ca5d7df114035258a9d01165be309371fcccf0cccd9d57b1453204686d1ed0","impliedFormat":1},{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true,"impliedFormat":1},{"version":"9a30b7fefd7f8abbca4828d481c61c18e40fe5ff107e113b1c1fcd2c8dcf2743","affectsGlobalScope":true,"impliedFormat":1},{"version":"173b6275a81ebdb283b180654890f46516c21199734fed01a773b1c168b8c45c","impliedFormat":1},{"version":"304f66274aa8119e8d65a49b1cff84cbf803def6afe1b2cc987386e9a9890e22","impliedFormat":1},{"version":"1b9adafe8a7fefaeaf9099a0e06f602903f6268438147b843a33a5233ac71745","impliedFormat":1},{"version":"98273274f2dbb79b0b2009b20f74eca4a7146a3447c912d580cd5d2d94a7ae30","impliedFormat":1},{"version":"c933f7ba4b201c98b14275fd11a14abb950178afd2074703250fe3654fc10cd2","impliedFormat":1},{"version":"2eaa31492906bc8525aff3c3ec2236e22d90b0dfeee77089f196cd0adf0b3e3b","impliedFormat":1},{"version":"ea455cc68871b049bcecd9f56d4cf27b852d6dafd5e3b54468ca87cc11604e4d","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f5814f29dbaf8bacd1764aebdf1c8a6eb86381f6a188ddbac0fcbaab855ce52","impliedFormat":1},{"version":"a63d03de72adfb91777784015bd3b4125abd2f5ef867fc5a13920b5649e8f52b","impliedFormat":1},{"version":"d20e003f3d518a7c1f749dbe27c6ab5e3be7b3c905a48361b04a9557de4a6900","impliedFormat":1},{"version":"1d4d78c8b23c9ddaaaa49485e6adc2ec01086dfe5d8d4d36ca4cdc98d2f7e74a","affectsGlobalScope":true,"impliedFormat":1},{"version":"44fc16356b81c0463cc7d7b2b35dcf324d8144136f5bc5ce73ced86f2b3475b5","affectsGlobalScope":true,"impliedFormat":1},{"version":"575fb200043b11b464db8e42cc64379c5fd322b6d787638e005b5ee98a64486d","impliedFormat":1},{"version":"6de2f225d942562733e231a695534b30039bdf1875b377bb7255881f0df8ede8","impliedFormat":1},{"version":"56249fd3ef1f6b90888e606f4ea648c43978ef43a7263aafad64f8d83cd3b8aa","impliedFormat":1},{"version":"139ad1dc93a503da85b7a0d5f615bddbae61ad796bc68fedd049150db67a1e26","impliedFormat":1},{"version":"7b166975fdbd3b37afb64707b98bca88e46577bbc6c59871f9383a7df2daacd1","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"81505c54d7cad0009352eaa21bd923ab7cdee7ec3405357a54d9a5da033a2084","impliedFormat":1},{"version":"269929a24b2816343a178008ac9ae9248304d92a8ba8e233055e0ed6dbe6ef71","impliedFormat":1},{"version":"93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","impliedFormat":1},{"version":"3c1f19c7abcda6b3a4cf9438a15c7307a080bd3b51dfd56b198d9f86baf19447","impliedFormat":1},{"version":"2ee1645e0df9d84467cfe1d67b0ad3003c2f387de55874d565094464ee6f2927","impliedFormat":1},{"version":"7da97d603bf3dd0000f56467c56cb6efaf5f94692980474925fae6c33412b12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"9cf780e96b687e4bdfd1907ed26a688c18b89797490a00598fa8b8ab683335dd","affectsGlobalScope":true,"impliedFormat":1},{"version":"98e00f3613402504bc2a2c9a621800ab48e0a463d1eed062208a4ae98ad8f84c","impliedFormat":1},{"version":"9ae88ce9f73446c24b2d2452e993b676da1b31fca5ceb7276e7f36279f693ed1","impliedFormat":1},{"version":"e49d7625faff2a7842e4e7b9b197f972633fca685afcf6b4403400c97d087c36","impliedFormat":1},{"version":"b82c38abc53922b1b3670c3af6f333c21b735722a8f156e7d357a2da7c53a0a0","impliedFormat":1},{"version":"b423f53647708043299ded4daa68d95c967a2ac30aa1437adc4442129d7d0a6c","affectsGlobalScope":true,"impliedFormat":1},{"version":"7245af181218216bacb01fbdf51095617a51661f20d77178c69a377e16fb69ed","affectsGlobalScope":true,"impliedFormat":1},{"version":"4f0fc7b7f54422bd97cfaf558ddb4bca86893839367b746a8f86b60ac7619673","impliedFormat":1},{"version":"4cdd8b6b51599180a387cc7c1c50f49eca5ce06595d781638fd0216520d98246","impliedFormat":1},{"version":"d91a7d8b5655c42986f1bdfe2105c4408f472831c8f20cf11a8c3345b6b56c8c","impliedFormat":1},{"version":"8704423bf338bff381ebc951ed819935d0252d90cd6de7dffe5b0a5debb65d07","affectsGlobalScope":true,"impliedFormat":1},{"version":"7c6929fd7cbf38499b6a600b91c3b603d1d78395046dc3499b2b92d01418b94b","impliedFormat":1},{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a42be67ed1ddaec743582f41fc219db96a1b69719fccac6d1464321178d610fc","impliedFormat":1}],"root":[79,80],"options":{"allowJs":true,"allowSyntheticDefaultImports":true,"checkJs":true,"composite":true,"declaration":true,"declarationMap":true,"downlevelIteration":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"exactOptionalPropertyTypes":true,"experimentalDecorators":true,"inlineSources":false,"jsx":2,"module":199,"noImplicitOverride":true,"noUnusedLocals":false,"noUnusedParameters":true,"outDir":"./","skipLibCheck":true,"strict":true,"stripInternal":true,"target":7,"verbatimModuleSyntax":true},"referencedMap":[[81,1],[82,1],[117,2],[118,3],[119,4],[120,5],[121,6],[122,7],[123,8],[124,9],[125,10],[126,11],[127,11],[129,12],[128,13],[130,14],[131,15],[132,16],[116,17],[133,18],[134,19],[135,20],[168,21],[136,22],[137,23],[138,24],[139,25],[140,26],[141,27],[142,28],[143,29],[144,30],[145,31],[146,31],[147,32],[149,33],[151,34],[150,35],[152,36],[153,37],[154,38],[155,39],[156,40],[157,41],[158,42],[159,43],[160,44],[161,45],[162,46],[163,47],[164,48],[165,49],[166,50],[99,51],[106,52],[98,51],[113,53],[90,54],[89,55],[112,56],[107,57],[110,58],[92,59],[91,60],[87,61],[86,62],[109,63],[88,64],[93,65],[97,65],[115,66],[114,65],[101,67],[102,68],[104,69],[100,70],[103,71],[108,56],[95,72],[96,73],[105,74],[85,75],[111,76],[70,77],[68,78],[73,79],[77,80],[78,81],[75,82],[76,83],[79,84],[80,83]],"affectedFilesPendingEmit":[[79,49],[80,49]],"emitSignatures":[79,80],"latestChangedDtsFile":"./web-view-mode.test.d.ts","version":"5.8.3"}
|