UNPKG

@villagehq/extension-sdk

Version:

Village Chrome Extension SDK for Partner Integrations

1 lines 139 kB
"use strict";var __defProp=Object.defineProperty,__publicField=(obj,key,value)=>(((obj,key,value)=>{key in obj?__defProp(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value})(obj,"symbol"!=typeof key?key+"":key,value),value);Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const trackingEvents=require("./tracking-events-5e3a3290.cjs"),axios=require("axios"),messages=require("./messages.cjs");var module2,browserPolyfill$2={exports:{}};module2=browserPolyfill$2,"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:trackingEvents.commonjsGlobal,function(module3){if(!(globalThis.chrome&&globalThis.chrome.runtime&&globalThis.chrome.runtime.id))throw new Error("This script should only be loaded in a browser extension.");if(globalThis.browser&&globalThis.browser.runtime&&globalThis.browser.runtime.id)module3.exports=globalThis.browser;else{const CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE="The message port closed before a response was received.",wrapAPIs=extensionAPIs=>{const apiMetadata={alarms:{clear:{minArgs:0,maxArgs:1},clearAll:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getAll:{minArgs:0,maxArgs:0}},bookmarks:{create:{minArgs:1,maxArgs:1},get:{minArgs:1,maxArgs:1},getChildren:{minArgs:1,maxArgs:1},getRecent:{minArgs:1,maxArgs:1},getSubTree:{minArgs:1,maxArgs:1},getTree:{minArgs:0,maxArgs:0},move:{minArgs:2,maxArgs:2},remove:{minArgs:1,maxArgs:1},removeTree:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1},update:{minArgs:2,maxArgs:2}},browserAction:{disable:{minArgs:0,maxArgs:1,fallbackToNoCallback:!0},enable:{minArgs:0,maxArgs:1,fallbackToNoCallback:!0},getBadgeBackgroundColor:{minArgs:1,maxArgs:1},getBadgeText:{minArgs:1,maxArgs:1},getPopup:{minArgs:1,maxArgs:1},getTitle:{minArgs:1,maxArgs:1},openPopup:{minArgs:0,maxArgs:0},setBadgeBackgroundColor:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setBadgeText:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setIcon:{minArgs:1,maxArgs:1},setPopup:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setTitle:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},browsingData:{remove:{minArgs:2,maxArgs:2},removeCache:{minArgs:1,maxArgs:1},removeCookies:{minArgs:1,maxArgs:1},removeDownloads:{minArgs:1,maxArgs:1},removeFormData:{minArgs:1,maxArgs:1},removeHistory:{minArgs:1,maxArgs:1},removeLocalStorage:{minArgs:1,maxArgs:1},removePasswords:{minArgs:1,maxArgs:1},removePluginData:{minArgs:1,maxArgs:1},settings:{minArgs:0,maxArgs:0}},commands:{getAll:{minArgs:0,maxArgs:0}},contextMenus:{remove:{minArgs:1,maxArgs:1},removeAll:{minArgs:0,maxArgs:0},update:{minArgs:2,maxArgs:2}},cookies:{get:{minArgs:1,maxArgs:1},getAll:{minArgs:1,maxArgs:1},getAllCookieStores:{minArgs:0,maxArgs:0},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}},devtools:{inspectedWindow:{eval:{minArgs:1,maxArgs:2,singleCallbackArg:!1}},panels:{create:{minArgs:3,maxArgs:3,singleCallbackArg:!0},elements:{createSidebarPane:{minArgs:1,maxArgs:1}}}},downloads:{cancel:{minArgs:1,maxArgs:1},download:{minArgs:1,maxArgs:1},erase:{minArgs:1,maxArgs:1},getFileIcon:{minArgs:1,maxArgs:2},open:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},pause:{minArgs:1,maxArgs:1},removeFile:{minArgs:1,maxArgs:1},resume:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1},show:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},extension:{isAllowedFileSchemeAccess:{minArgs:0,maxArgs:0},isAllowedIncognitoAccess:{minArgs:0,maxArgs:0}},history:{addUrl:{minArgs:1,maxArgs:1},deleteAll:{minArgs:0,maxArgs:0},deleteRange:{minArgs:1,maxArgs:1},deleteUrl:{minArgs:1,maxArgs:1},getVisits:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1}},i18n:{detectLanguage:{minArgs:1,maxArgs:1},getAcceptLanguages:{minArgs:0,maxArgs:0}},identity:{launchWebAuthFlow:{minArgs:1,maxArgs:1}},idle:{queryState:{minArgs:1,maxArgs:1}},management:{get:{minArgs:1,maxArgs:1},getAll:{minArgs:0,maxArgs:0},getSelf:{minArgs:0,maxArgs:0},setEnabled:{minArgs:2,maxArgs:2},uninstallSelf:{minArgs:0,maxArgs:1}},notifications:{clear:{minArgs:1,maxArgs:1},create:{minArgs:1,maxArgs:2},getAll:{minArgs:0,maxArgs:0},getPermissionLevel:{minArgs:0,maxArgs:0},update:{minArgs:2,maxArgs:2}},pageAction:{getPopup:{minArgs:1,maxArgs:1},getTitle:{minArgs:1,maxArgs:1},hide:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setIcon:{minArgs:1,maxArgs:1},setPopup:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setTitle:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},show:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},permissions:{contains:{minArgs:1,maxArgs:1},getAll:{minArgs:0,maxArgs:0},remove:{minArgs:1,maxArgs:1},request:{minArgs:1,maxArgs:1}},runtime:{getBackgroundPage:{minArgs:0,maxArgs:0},getPlatformInfo:{minArgs:0,maxArgs:0},openOptionsPage:{minArgs:0,maxArgs:0},requestUpdateCheck:{minArgs:0,maxArgs:0},sendMessage:{minArgs:1,maxArgs:3},sendNativeMessage:{minArgs:2,maxArgs:2},setUninstallURL:{minArgs:1,maxArgs:1}},sessions:{getDevices:{minArgs:0,maxArgs:1},getRecentlyClosed:{minArgs:0,maxArgs:1},restore:{minArgs:0,maxArgs:1}},storage:{local:{clear:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}},managed:{get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1}},sync:{clear:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}}},tabs:{captureVisibleTab:{minArgs:0,maxArgs:2},create:{minArgs:1,maxArgs:1},detectLanguage:{minArgs:0,maxArgs:1},discard:{minArgs:0,maxArgs:1},duplicate:{minArgs:1,maxArgs:1},executeScript:{minArgs:1,maxArgs:2},get:{minArgs:1,maxArgs:1},getCurrent:{minArgs:0,maxArgs:0},getZoom:{minArgs:0,maxArgs:1},getZoomSettings:{minArgs:0,maxArgs:1},goBack:{minArgs:0,maxArgs:1},goForward:{minArgs:0,maxArgs:1},highlight:{minArgs:1,maxArgs:1},insertCSS:{minArgs:1,maxArgs:2},move:{minArgs:2,maxArgs:2},query:{minArgs:1,maxArgs:1},reload:{minArgs:0,maxArgs:2},remove:{minArgs:1,maxArgs:1},removeCSS:{minArgs:1,maxArgs:2},sendMessage:{minArgs:2,maxArgs:3},setZoom:{minArgs:1,maxArgs:2},setZoomSettings:{minArgs:1,maxArgs:2},update:{minArgs:1,maxArgs:2}},topSites:{get:{minArgs:0,maxArgs:0}},webNavigation:{getAllFrames:{minArgs:1,maxArgs:1},getFrame:{minArgs:1,maxArgs:1}},webRequest:{handlerBehaviorChanged:{minArgs:0,maxArgs:0}},windows:{create:{minArgs:0,maxArgs:1},get:{minArgs:1,maxArgs:2},getAll:{minArgs:0,maxArgs:1},getCurrent:{minArgs:0,maxArgs:1},getLastFocused:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},update:{minArgs:2,maxArgs:2}}};if(0===Object.keys(apiMetadata).length)throw new Error("api-metadata.json has not been included in browser-polyfill");class DefaultWeakMap extends WeakMap{constructor(createItem,items=void 0){super(items),this.createItem=createItem}get(key){return this.has(key)||this.set(key,this.createItem(key)),super.get(key)}}const isThenable=value=>value&&"object"==typeof value&&"function"==typeof value.then,makeCallback=(promise,metadata)=>(...callbackArgs)=>{extensionAPIs.runtime.lastError?promise.reject(new Error(extensionAPIs.runtime.lastError.message)):metadata.singleCallbackArg||callbackArgs.length<=1&&!1!==metadata.singleCallbackArg?promise.resolve(callbackArgs[0]):promise.resolve(callbackArgs)},pluralizeArguments=numArgs=>1==numArgs?"argument":"arguments",wrapAsyncFunction=(name,metadata)=>function(target,...args){if(args.length<metadata.minArgs)throw new Error(`Expected at least ${metadata.minArgs} ${pluralizeArguments(metadata.minArgs)} for ${name}(), got ${args.length}`);if(args.length>metadata.maxArgs)throw new Error(`Expected at most ${metadata.maxArgs} ${pluralizeArguments(metadata.maxArgs)} for ${name}(), got ${args.length}`);return new Promise((resolve,reject)=>{if(metadata.fallbackToNoCallback)try{target[name](...args,makeCallback({resolve:resolve,reject:reject},metadata))}catch(cbError){console.warn(`${name} API method doesn't seem to support the callback parameter, falling back to call it without a callback: `,cbError),target[name](...args),metadata.fallbackToNoCallback=!1,metadata.noCallback=!0,resolve()}else metadata.noCallback?(target[name](...args),resolve()):target[name](...args,makeCallback({resolve:resolve,reject:reject},metadata))})},wrapMethod=(target,method,wrapper)=>new Proxy(method,{apply:(targetMethod,thisObj,args)=>wrapper.call(thisObj,target,...args)});let hasOwnProperty=Function.call.bind(Object.prototype.hasOwnProperty);const wrapObject=(target,wrappers={},metadata={})=>{let cache=Object.create(null),handlers={has:(proxyTarget2,prop)=>prop in target||prop in cache,get(proxyTarget2,prop,receiver){if(prop in cache)return cache[prop];if(!(prop in target))return;let value=target[prop];if("function"==typeof value)if("function"==typeof wrappers[prop])value=wrapMethod(target,target[prop],wrappers[prop]);else if(hasOwnProperty(metadata,prop)){let wrapper=wrapAsyncFunction(prop,metadata[prop]);value=wrapMethod(target,target[prop],wrapper)}else value=value.bind(target);else if("object"==typeof value&&null!==value&&(hasOwnProperty(wrappers,prop)||hasOwnProperty(metadata,prop)))value=wrapObject(value,wrappers[prop],metadata[prop]);else{if(!hasOwnProperty(metadata,"*"))return Object.defineProperty(cache,prop,{configurable:!0,enumerable:!0,get:()=>target[prop],set(value2){target[prop]=value2}}),value;value=wrapObject(value,wrappers[prop],metadata["*"])}return cache[prop]=value,value},set:(proxyTarget2,prop,value,receiver)=>(prop in cache?cache[prop]=value:target[prop]=value,!0),defineProperty:(proxyTarget2,prop,desc)=>Reflect.defineProperty(cache,prop,desc),deleteProperty:(proxyTarget2,prop)=>Reflect.deleteProperty(cache,prop)},proxyTarget=Object.create(target);return new Proxy(proxyTarget,handlers)},wrapEvent=wrapperMap=>({addListener(target,listener,...args){target.addListener(wrapperMap.get(listener),...args)},hasListener:(target,listener)=>target.hasListener(wrapperMap.get(listener)),removeListener(target,listener){target.removeListener(wrapperMap.get(listener))}}),onRequestFinishedWrappers=new DefaultWeakMap(listener=>"function"!=typeof listener?listener:function(req){const wrappedReq=wrapObject(req,{},{getContent:{minArgs:0,maxArgs:0}});listener(wrappedReq)}),onMessageWrappers=new DefaultWeakMap(listener=>"function"!=typeof listener?listener:function(message,sender,sendResponse){let wrappedSendResponse,result,didCallSendResponse=!1,sendResponsePromise=new Promise(resolve=>{wrappedSendResponse=function(response){didCallSendResponse=!0,resolve(response)}});try{result=listener(message,sender,wrappedSendResponse)}catch(err){result=Promise.reject(err)}const isResultThenable=!0!==result&&isThenable(result);if(!0!==result&&!isResultThenable&&!didCallSendResponse)return!1;const sendPromisedResult=promise=>{promise.then(msg=>{sendResponse(msg)},error=>{let message2;message2=error&&(error instanceof Error||"string"==typeof error.message)?error.message:"An unexpected error occurred",sendResponse({__mozWebExtensionPolyfillReject__:!0,message:message2})}).catch(err=>{console.error("Failed to send onMessage rejected reply",err)})};return sendPromisedResult(isResultThenable?result:sendResponsePromise),!0}),wrappedSendMessageCallback=({reject:reject,resolve:resolve},reply)=>{extensionAPIs.runtime.lastError?extensionAPIs.runtime.lastError.message===CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE?resolve():reject(new Error(extensionAPIs.runtime.lastError.message)):reply&&reply.__mozWebExtensionPolyfillReject__?reject(new Error(reply.message)):resolve(reply)},wrappedSendMessage=(name,metadata,apiNamespaceObj,...args)=>{if(args.length<metadata.minArgs)throw new Error(`Expected at least ${metadata.minArgs} ${pluralizeArguments(metadata.minArgs)} for ${name}(), got ${args.length}`);if(args.length>metadata.maxArgs)throw new Error(`Expected at most ${metadata.maxArgs} ${pluralizeArguments(metadata.maxArgs)} for ${name}(), got ${args.length}`);return new Promise((resolve,reject)=>{const wrappedCb=wrappedSendMessageCallback.bind(null,{resolve:resolve,reject:reject});args.push(wrappedCb),apiNamespaceObj.sendMessage(...args)})},staticWrappers={devtools:{network:{onRequestFinished:wrapEvent(onRequestFinishedWrappers)}},runtime:{onMessage:wrapEvent(onMessageWrappers),onMessageExternal:wrapEvent(onMessageWrappers),sendMessage:wrappedSendMessage.bind(null,"sendMessage",{minArgs:1,maxArgs:3})},tabs:{sendMessage:wrappedSendMessage.bind(null,"sendMessage",{minArgs:2,maxArgs:3})}},settingMetadata={clear:{minArgs:1,maxArgs:1},get:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}};return apiMetadata.privacy={network:{"*":settingMetadata},services:{"*":settingMetadata},websites:{"*":settingMetadata}},wrapObject(extensionAPIs,staticWrappers,apiMetadata)};module3.exports=wrapAPIs(chrome)}}(module2);var browserPolyfillExports$1=browserPolyfill$2.exports;const browser=trackingEvents.getDefaultExportFromCjs(browserPolyfillExports$1);var browserPolyfill={exports:{}};!function(module2){"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:trackingEvents.commonjsGlobal,function(module3){var _a,_b;if(!(null==(_b=null==(_a=globalThis.chrome)?void 0:_a.runtime)?void 0:_b.id))throw new Error("This script should only be loaded in a browser extension.");if(void 0===globalThis.browser||Object.getPrototypeOf(globalThis.browser)!==Object.prototype){const CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE="The message port closed before a response was received.",wrapAPIs=extensionAPIs=>{const apiMetadata={alarms:{clear:{minArgs:0,maxArgs:1},clearAll:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getAll:{minArgs:0,maxArgs:0}},bookmarks:{create:{minArgs:1,maxArgs:1},get:{minArgs:1,maxArgs:1},getChildren:{minArgs:1,maxArgs:1},getRecent:{minArgs:1,maxArgs:1},getSubTree:{minArgs:1,maxArgs:1},getTree:{minArgs:0,maxArgs:0},move:{minArgs:2,maxArgs:2},remove:{minArgs:1,maxArgs:1},removeTree:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1},update:{minArgs:2,maxArgs:2}},browserAction:{disable:{minArgs:0,maxArgs:1,fallbackToNoCallback:!0},enable:{minArgs:0,maxArgs:1,fallbackToNoCallback:!0},getBadgeBackgroundColor:{minArgs:1,maxArgs:1},getBadgeText:{minArgs:1,maxArgs:1},getPopup:{minArgs:1,maxArgs:1},getTitle:{minArgs:1,maxArgs:1},openPopup:{minArgs:0,maxArgs:0},setBadgeBackgroundColor:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setBadgeText:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setIcon:{minArgs:1,maxArgs:1},setPopup:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setTitle:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},browsingData:{remove:{minArgs:2,maxArgs:2},removeCache:{minArgs:1,maxArgs:1},removeCookies:{minArgs:1,maxArgs:1},removeDownloads:{minArgs:1,maxArgs:1},removeFormData:{minArgs:1,maxArgs:1},removeHistory:{minArgs:1,maxArgs:1},removeLocalStorage:{minArgs:1,maxArgs:1},removePasswords:{minArgs:1,maxArgs:1},removePluginData:{minArgs:1,maxArgs:1},settings:{minArgs:0,maxArgs:0}},commands:{getAll:{minArgs:0,maxArgs:0}},contextMenus:{remove:{minArgs:1,maxArgs:1},removeAll:{minArgs:0,maxArgs:0},update:{minArgs:2,maxArgs:2}},cookies:{get:{minArgs:1,maxArgs:1},getAll:{minArgs:1,maxArgs:1},getAllCookieStores:{minArgs:0,maxArgs:0},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}},devtools:{inspectedWindow:{eval:{minArgs:1,maxArgs:2,singleCallbackArg:!1}},panels:{create:{minArgs:3,maxArgs:3,singleCallbackArg:!0},elements:{createSidebarPane:{minArgs:1,maxArgs:1}}}},downloads:{cancel:{minArgs:1,maxArgs:1},download:{minArgs:1,maxArgs:1},erase:{minArgs:1,maxArgs:1},getFileIcon:{minArgs:1,maxArgs:2},open:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},pause:{minArgs:1,maxArgs:1},removeFile:{minArgs:1,maxArgs:1},resume:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1},show:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},extension:{isAllowedFileSchemeAccess:{minArgs:0,maxArgs:0},isAllowedIncognitoAccess:{minArgs:0,maxArgs:0}},history:{addUrl:{minArgs:1,maxArgs:1},deleteAll:{minArgs:0,maxArgs:0},deleteRange:{minArgs:1,maxArgs:1},deleteUrl:{minArgs:1,maxArgs:1},getVisits:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1}},i18n:{detectLanguage:{minArgs:1,maxArgs:1},getAcceptLanguages:{minArgs:0,maxArgs:0}},identity:{launchWebAuthFlow:{minArgs:1,maxArgs:1}},idle:{queryState:{minArgs:1,maxArgs:1}},management:{get:{minArgs:1,maxArgs:1},getAll:{minArgs:0,maxArgs:0},getSelf:{minArgs:0,maxArgs:0},setEnabled:{minArgs:2,maxArgs:2},uninstallSelf:{minArgs:0,maxArgs:1}},notifications:{clear:{minArgs:1,maxArgs:1},create:{minArgs:1,maxArgs:2},getAll:{minArgs:0,maxArgs:0},getPermissionLevel:{minArgs:0,maxArgs:0},update:{minArgs:2,maxArgs:2}},pageAction:{getPopup:{minArgs:1,maxArgs:1},getTitle:{minArgs:1,maxArgs:1},hide:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setIcon:{minArgs:1,maxArgs:1},setPopup:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setTitle:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},show:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},permissions:{contains:{minArgs:1,maxArgs:1},getAll:{minArgs:0,maxArgs:0},remove:{minArgs:1,maxArgs:1},request:{minArgs:1,maxArgs:1}},runtime:{getBackgroundPage:{minArgs:0,maxArgs:0},getPlatformInfo:{minArgs:0,maxArgs:0},openOptionsPage:{minArgs:0,maxArgs:0},requestUpdateCheck:{minArgs:0,maxArgs:0},sendMessage:{minArgs:1,maxArgs:3},sendNativeMessage:{minArgs:2,maxArgs:2},setUninstallURL:{minArgs:1,maxArgs:1}},sessions:{getDevices:{minArgs:0,maxArgs:1},getRecentlyClosed:{minArgs:0,maxArgs:1},restore:{minArgs:0,maxArgs:1}},storage:{local:{clear:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}},managed:{get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1}},sync:{clear:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}}},tabs:{captureVisibleTab:{minArgs:0,maxArgs:2},create:{minArgs:1,maxArgs:1},detectLanguage:{minArgs:0,maxArgs:1},discard:{minArgs:0,maxArgs:1},duplicate:{minArgs:1,maxArgs:1},executeScript:{minArgs:1,maxArgs:2},get:{minArgs:1,maxArgs:1},getCurrent:{minArgs:0,maxArgs:0},getZoom:{minArgs:0,maxArgs:1},getZoomSettings:{minArgs:0,maxArgs:1},goBack:{minArgs:0,maxArgs:1},goForward:{minArgs:0,maxArgs:1},highlight:{minArgs:1,maxArgs:1},insertCSS:{minArgs:1,maxArgs:2},move:{minArgs:2,maxArgs:2},query:{minArgs:1,maxArgs:1},reload:{minArgs:0,maxArgs:2},remove:{minArgs:1,maxArgs:1},removeCSS:{minArgs:1,maxArgs:2},sendMessage:{minArgs:2,maxArgs:3},setZoom:{minArgs:1,maxArgs:2},setZoomSettings:{minArgs:1,maxArgs:2},update:{minArgs:1,maxArgs:2}},topSites:{get:{minArgs:0,maxArgs:0}},webNavigation:{getAllFrames:{minArgs:1,maxArgs:1},getFrame:{minArgs:1,maxArgs:1}},webRequest:{handlerBehaviorChanged:{minArgs:0,maxArgs:0}},windows:{create:{minArgs:0,maxArgs:1},get:{minArgs:1,maxArgs:2},getAll:{minArgs:0,maxArgs:1},getCurrent:{minArgs:0,maxArgs:1},getLastFocused:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},update:{minArgs:2,maxArgs:2}}};if(0===Object.keys(apiMetadata).length)throw new Error("api-metadata.json has not been included in browser-polyfill");class DefaultWeakMap extends WeakMap{constructor(createItem,items=void 0){super(items),this.createItem=createItem}get(key){return this.has(key)||this.set(key,this.createItem(key)),super.get(key)}}const isThenable=value=>value&&"object"==typeof value&&"function"==typeof value.then,makeCallback=(promise,metadata)=>(...callbackArgs)=>{extensionAPIs.runtime.lastError?promise.reject(new Error(extensionAPIs.runtime.lastError.message)):metadata.singleCallbackArg||callbackArgs.length<=1&&!1!==metadata.singleCallbackArg?promise.resolve(callbackArgs[0]):promise.resolve(callbackArgs)},pluralizeArguments=numArgs=>1==numArgs?"argument":"arguments",wrapAsyncFunction=(name,metadata)=>function(target,...args){if(args.length<metadata.minArgs)throw new Error(`Expected at least ${metadata.minArgs} ${pluralizeArguments(metadata.minArgs)} for ${name}(), got ${args.length}`);if(args.length>metadata.maxArgs)throw new Error(`Expected at most ${metadata.maxArgs} ${pluralizeArguments(metadata.maxArgs)} for ${name}(), got ${args.length}`);return new Promise((resolve,reject)=>{if(metadata.fallbackToNoCallback)try{target[name](...args,makeCallback({resolve:resolve,reject:reject},metadata))}catch(cbError){console.warn(`${name} API method doesn't seem to support the callback parameter, falling back to call it without a callback: `,cbError),target[name](...args),metadata.fallbackToNoCallback=!1,metadata.noCallback=!0,resolve()}else metadata.noCallback?(target[name](...args),resolve()):target[name](...args,makeCallback({resolve:resolve,reject:reject},metadata))})},wrapMethod=(target,method,wrapper)=>new Proxy(method,{apply:(targetMethod,thisObj,args)=>wrapper.call(thisObj,target,...args)});let hasOwnProperty=Function.call.bind(Object.prototype.hasOwnProperty);const wrapObject=(target,wrappers={},metadata={})=>{let cache=Object.create(null),handlers={has:(proxyTarget2,prop)=>prop in target||prop in cache,get(proxyTarget2,prop,receiver){if(prop in cache)return cache[prop];if(!(prop in target))return;let value=target[prop];if("function"==typeof value)if("function"==typeof wrappers[prop])value=wrapMethod(target,target[prop],wrappers[prop]);else if(hasOwnProperty(metadata,prop)){let wrapper=wrapAsyncFunction(prop,metadata[prop]);value=wrapMethod(target,target[prop],wrapper)}else value=value.bind(target);else if("object"==typeof value&&null!==value&&(hasOwnProperty(wrappers,prop)||hasOwnProperty(metadata,prop)))value=wrapObject(value,wrappers[prop],metadata[prop]);else{if(!hasOwnProperty(metadata,"*"))return Object.defineProperty(cache,prop,{configurable:!0,enumerable:!0,get:()=>target[prop],set(value2){target[prop]=value2}}),value;value=wrapObject(value,wrappers[prop],metadata["*"])}return cache[prop]=value,value},set:(proxyTarget2,prop,value,receiver)=>(prop in cache?cache[prop]=value:target[prop]=value,!0),defineProperty:(proxyTarget2,prop,desc)=>Reflect.defineProperty(cache,prop,desc),deleteProperty:(proxyTarget2,prop)=>Reflect.deleteProperty(cache,prop)},proxyTarget=Object.create(target);return new Proxy(proxyTarget,handlers)},wrapEvent=wrapperMap=>({addListener(target,listener,...args){target.addListener(wrapperMap.get(listener),...args)},hasListener:(target,listener)=>target.hasListener(wrapperMap.get(listener)),removeListener(target,listener){target.removeListener(wrapperMap.get(listener))}}),onRequestFinishedWrappers=new DefaultWeakMap(listener=>"function"!=typeof listener?listener:function(req){const wrappedReq=wrapObject(req,{},{getContent:{minArgs:0,maxArgs:0}});listener(wrappedReq)}),onMessageWrappers=new DefaultWeakMap(listener=>"function"!=typeof listener?listener:function(message,sender,sendResponse){let wrappedSendResponse,result,didCallSendResponse=!1,sendResponsePromise=new Promise(resolve=>{wrappedSendResponse=function(response){didCallSendResponse=!0,resolve(response)}});try{result=listener(message,sender,wrappedSendResponse)}catch(err){result=Promise.reject(err)}const isResultThenable=!0!==result&&isThenable(result);if(!0!==result&&!isResultThenable&&!didCallSendResponse)return!1;const sendPromisedResult=promise=>{promise.then(msg=>{sendResponse(msg)},error=>{let message2;message2=error&&(error instanceof Error||"string"==typeof error.message)?error.message:"An unexpected error occurred",sendResponse({__mozWebExtensionPolyfillReject__:!0,message:message2})}).catch(err=>{console.error("Failed to send onMessage rejected reply",err)})};return sendPromisedResult(isResultThenable?result:sendResponsePromise),!0}),wrappedSendMessageCallback=({reject:reject,resolve:resolve},reply)=>{extensionAPIs.runtime.lastError?extensionAPIs.runtime.lastError.message===CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE?resolve():reject(new Error(extensionAPIs.runtime.lastError.message)):reply&&reply.__mozWebExtensionPolyfillReject__?reject(new Error(reply.message)):resolve(reply)},wrappedSendMessage=(name,metadata,apiNamespaceObj,...args)=>{if(args.length<metadata.minArgs)throw new Error(`Expected at least ${metadata.minArgs} ${pluralizeArguments(metadata.minArgs)} for ${name}(), got ${args.length}`);if(args.length>metadata.maxArgs)throw new Error(`Expected at most ${metadata.maxArgs} ${pluralizeArguments(metadata.maxArgs)} for ${name}(), got ${args.length}`);return new Promise((resolve,reject)=>{const wrappedCb=wrappedSendMessageCallback.bind(null,{resolve:resolve,reject:reject});args.push(wrappedCb),apiNamespaceObj.sendMessage(...args)})},staticWrappers={devtools:{network:{onRequestFinished:wrapEvent(onRequestFinishedWrappers)}},runtime:{onMessage:wrapEvent(onMessageWrappers),onMessageExternal:wrapEvent(onMessageWrappers),sendMessage:wrappedSendMessage.bind(null,"sendMessage",{minArgs:1,maxArgs:3})},tabs:{sendMessage:wrappedSendMessage.bind(null,"sendMessage",{minArgs:2,maxArgs:3})}},settingMetadata={clear:{minArgs:1,maxArgs:1},get:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}};return apiMetadata.privacy={network:{"*":settingMetadata},services:{"*":settingMetadata},websites:{"*":settingMetadata}},wrapObject(extensionAPIs,staticWrappers,apiMetadata)};module3.exports=wrapAPIs(chrome)}else module3.exports=globalThis.browser}(module2)}(browserPolyfill);var browserPolyfillExports=browserPolyfill.exports;const Browser=trackingEvents.getDefaultExportFromCjs(browserPolyfillExports);function defineExtensionStorage(storage){const onStorageChanged=changes=>{return __this=this,__arguments=null,generator=function*(){const work=listeners.map(({key:key,cb:cb})=>{if(!(key in changes))return;const{newValue:newValue,oldValue:oldValue}=changes[key];return newValue!==oldValue?cb(newValue,oldValue):void 0});yield Promise.all(work)},new Promise((resolve,reject)=>{var fulfilled=value=>{try{step(generator.next(value))}catch(e){reject(e)}},rejected=value=>{try{step(generator.throw(value))}catch(e){reject(e)}},step=x=>x.done?resolve(x.value):Promise.resolve(x.value).then(fulfilled,rejected);step((generator=generator.apply(__this,__arguments)).next())});var __this,__arguments,generator};let listeners=[];return{clear:()=>storage.clear(),getItem:key=>storage.get(key).then(res=>{var _a;return null!=(_a=res[key])?_a:null}),setItem:(key,value)=>storage.set({[key]:null!=value?value:null}),removeItem:key=>storage.remove(key),onChange(key,cb){const listener={key:key,cb:cb};return function(listener){0===listeners.length&&storage.onChanged.addListener(onStorageChanged),listeners.push(listener)}(listener),()=>function(listener){const i=listeners.indexOf(listener);i>=0&&listeners.splice(i,1),0===listeners.length&&Browser.storage.onChanged.removeListener(onStorageChanged)}(listener)}}}defineExtensionStorage(Browser.storage.local),defineExtensionStorage(Browser.storage.session),defineExtensionStorage(Browser.storage.sync),defineExtensionStorage(Browser.storage.managed);const syncStorage=defineExtensionStorage(browser.storage.sync),localStorage=defineExtensionStorage(browser.storage.local);async function getFromSyncStorage(key){var _a;if(!(null==(_a=browser.runtime)?void 0:_a.id))throw new Error("Extension context invalidated.");const value=await syncStorage.getItem(key);return null===value?void 0:value}async function setToSyncStorage(key,value){var _a;if(!(null==(_a=browser.runtime)?void 0:_a.id))throw new Error("Extension context invalidated.");await syncStorage.setItem(key,value)}let sentryDsn=null,sentryEnvironment=null,sentryRelease=null,parsedDsn=null,userContext=null,extensionContext=null;async function getUserDataFromStorage(){try{const[userLoggedObj,linkedinLogin,frontendLogin,linkedinEmail]=await Promise.all([syncStorage.getItem("user_logged_obj"),syncStorage.getItem("linkedin_login"),syncStorage.getItem("frontend_login"),syncStorage.getItem("linkedin_loggedin_email")]);return{userId:null==userLoggedObj?void 0:userLoggedObj.id,userName:null==userLoggedObj?void 0:userLoggedObj.name,userEmail:null==userLoggedObj?void 0:userLoggedObj.email,linkedinLogin:linkedinLogin,frontendLogin:frontendLogin,linkedinEmail:linkedinEmail}}catch{return null}}function buildEvent(error,extra={},level="error"){var _a;const eventId=crypto.randomUUID().replace(/-/g,""),timestamp=(new Date).toISOString(),errorMessage=(null==error?void 0:error.message)||String(error),errorType=(null==error?void 0:error.name)||"Error",stackTrace=(null==error?void 0:error.stack)||"",errorCategory=function(error){var _a,_b,_c;if((null==error?void 0:error.isAxiosError)||(null==error?void 0:error.response)||(null==error?void 0:error.config)){const status2=null==(_a=error.response)?void 0:_a.status;return error.response?status2>=500?"server_error":401===status2||403===status2?"auth_error":404===status2?"not_found":429===status2?"rate_limit":status2>=400?"client_error":"http_error":"network_error"}if(error instanceof TypeError){const msg2=(null==(_b=error.message)?void 0:_b.toLowerCase())||"";return msg2.includes("fetch")||msg2.includes("network")?"network_error":"type_error"}if("AbortError"===(null==error?void 0:error.name))return"timeout";if(408===(null==error?void 0:error.status))return"timeout";const msg=(null==(_c=null==error?void 0:error.message)?void 0:_c.toLowerCase())||"";return msg.includes("extension context invalidated")?"extension_invalidated":msg.includes("connection")?"connection_error":"code_error"}(error),requestData=function(error){var _a,_b;return(null==error?void 0:error.config)?{request:{url:error.config.url,method:(error.config.method||"GET").toUpperCase(),status:(null==(_a=error.response)?void 0:_a.status)||null},responseData:(null==(_b=error.response)?void 0:_b.data)?JSON.stringify(error.response.data).substring(0,500):null,axiosCode:error.code||null}:(null==error?void 0:error.url)?{request:{url:error.url,method:error.method||"GET",status:error.status||null}}:{}}(error),mergedExtra={...requestData,...extra},requestInfo=mergedExtra.request||null,httpStatus=(null==requestInfo?void 0:requestInfo.status)||(null==(_a=null==error?void 0:error.response)?void 0:_a.status)||(null==error?void 0:error.status)||null;return{envelope:{event_id:eventId,sent_at:timestamp,dsn:sentryDsn},type:{type:"event",content_type:"application/json"},event:{event_id:eventId,timestamp:timestamp,platform:"javascript",level:level,environment:sentryEnvironment,release:sentryRelease,exception:{values:[{type:errorType,value:errorMessage,stacktrace:stackTrace?{frames:stackTrace.split("\n").slice(1,20).map(line=>({filename:line.trim()})).reverse()}:void 0}]},user:userContext||void 0,tags:{...extensionContext?{context:extensionContext.context,extensionId:extensionContext.extensionId,extensionVersion:extensionContext.extensionVersion}:{},errorCategory:errorCategory,...(null==userContext?void 0:userContext.id)?{userId:String(userContext.id)}:{},...(null==userContext?void 0:userContext.username)?{userName:userContext.username}:{},...mergedExtra.function?{function:mergedExtra.function}:{},...httpStatus?{httpStatus:String(httpStatus)}:{},...(null==requestInfo?void 0:requestInfo.url)?{requestUrl:requestInfo.url}:{},...(null==requestInfo?void 0:requestInfo.method)?{requestMethod:requestInfo.method}:{},...mergedExtra.axiosCode?{axiosCode:mergedExtra.axiosCode}:{}},contexts:{extension:extensionContext||{},error_details:mergedExtra,...requestInfo?{request:{url:requestInfo.url,method:requestInfo.method,status_code:httpStatus}}:{},...mergedExtra.responseData?{response:{body:mergedExtra.responseData}}:{}},extra:{...mergedExtra,online:null==navigator?void 0:navigator.onLine}}}}async function sendEvent(error,extra={},level="error"){if(!parsedDsn)return;const storageData=await getUserDataFromStorage();(null==storageData?void 0:storageData.userId)&&(userContext={id:storageData.userId,username:storageData.userName,email:storageData.userEmail});const{envelope:envelope,type:type,event:event}=buildEvent(error,{...extra,linkedinLogin:null==storageData?void 0:storageData.linkedinLogin,frontendLogin:null==storageData?void 0:storageData.frontendLogin,linkedinEmail:null==storageData?void 0:storageData.linkedinEmail},level),body=[JSON.stringify(envelope),JSON.stringify(type),JSON.stringify(event)].join("\n");try{await fetch(parsedDsn.envelopeUrl,{method:"POST",headers:{"Content-Type":"application/x-sentry-envelope","X-Sentry-Auth":`Sentry sentry_version=7, sentry_client=village-extension/1.0, sentry_key=${parsedDsn.publicKey}`},body:body})}catch(e){console.error("[Sentry] Failed to send event:",e)}}function initSentry(context="unknown"){var _a,_b,_c;if(sentryDsn="https://ab3029e57be3d97613bd34be9abf0b5d@o4510880287358976.ingest.us.sentry.io/4510880813088768",sentryEnvironment="production",sentryDsn){try{parsedDsn=function(dsn){const url=new URL(dsn);return{publicKey:url.username,projectId:url.pathname.replace("/",""),envelopeUrl:`${url.protocol}//${url.hostname}/api${url.pathname}/envelope/`}}(sentryDsn)}catch(e){return void console.error("[Sentry] Invalid DSN:",e)}sentryRelease=`village-extension@${(null==(_c=null==(_b=null==(_a=null==browser?void 0:browser.runtime)?void 0:_a.getManifest)?void 0:_b.call(_a))?void 0:_c.version)||"unknown"}`,extensionContext=function(context){var _a,_b,_c,_d,_e,_f,_g;return{context:context,extensionId:(null==(_a=null==browser?void 0:browser.runtime)?void 0:_a.id)||"unknown",extensionVersion:(null==(_d=null==(_c=null==(_b=null==browser?void 0:browser.runtime)?void 0:_b.getManifest)?void 0:_c.call(_b))?void 0:_d.version)||"unknown",manifestVersion:null==(_g=null==(_f=null==(_e=null==browser?void 0:browser.runtime)?void 0:_e.getManifest)?void 0:_f.call(_e))?void 0:_g.manifest_version,userAgent:null==navigator?void 0:navigator.userAgent,platform:null==navigator?void 0:navigator.platform,language:null==navigator?void 0:navigator.language}}(context),getUserDataFromStorage().then(data=>{(null==data?void 0:data.userId)&&(userContext={id:data.userId,username:data.userName,email:data.userEmail})})}else console.warn("[Sentry] DSN not configured, skipping initialization")}function captureException(error,context={}){sendEvent(error,context,"error")}function getEnvVar(key){const val={VITE_VILLAGE_API_URL:"https://api.village.ai/",VITE_VILLAGE_FRONTEND_URL:"https://village.ai",VITE_POSTHOG_KEY:"phc_cWZiUS6cHGvUDyCMDRK8Cvoayv5m6x6YOT02RW91vOX",VITE_SEGMENT_KEY:"PyA9hfReyY7kaWVFyDD9FOnNMBxjDvGX",VITE_SENTRY_DSN:"https://ab3029e57be3d97613bd34be9abf0b5d@o4510880287358976.ingest.us.sentry.io/4510880813088768",VITE_ENVIRONMENT:"production",BASE_URL:"/",MODE:"production",DEV:!1,PROD:!0,SSR:!1}[key];if(!val)throw console.error(`Missing required environment variable: ${key}`),new Error(`Env var ${key} is not defined`);return val}const VILLAGE_API_URL=getEnvVar("VITE_VILLAGE_API_URL"),VILLAGE_FRONTEND_URL=getEnvVar("VITE_VILLAGE_FRONTEND_URL"),isEmptyObject=obj=>0===Object.keys(obj).length;let cachedFrontendLoginState=null;const checkLinkedinSession=async onLogout=>null!=await browser.cookies.get({url:"https://www.linkedin.com/",name:"li_at"})?(await setToSyncStorage("linkedin_login",!0),!0):(await setToSyncStorage("linkedin_login",!1),onLogout&&onLogout(),!1);async function getFrontendCookie(){const cookie=await browser.cookies.get({url:`${VILLAGE_FRONTEND_URL}`,name:"village.token"}),isLoggedIn=null!==cookie;return cachedFrontendLoginState!==isLoggedIn&&(await setToSyncStorage("frontend_login",isLoggedIn),cachedFrontendLoginState=isLoggedIn),!(!isLoggedIn||!cookie)&&cookie.value}const MUTUAL_CONNECTIONS_CONFIG={maxPages:5,pageSize:50,delayBetweenRequests:{min:500,max:1e3},endpoints:{current:{enabled:!0,timeout:1e4},legacy:{enabled:!0,timeout:1e4}},onRateLimit:"RETURN_EMPTY"};async function makeLinkedInRequest(url,options={}){const csrfToken=await getCsrfToken(),{timeout:timeout,headers:headers,...restOptions}=options,controller=new AbortController,defaultOptions={method:"GET",headers:{"csrf-token":csrfToken,accept:"*/*",...headers},credentials:"include",signal:controller.signal,...restOptions},timeoutId=timeout?setTimeout(()=>controller.abort(),timeout):null;try{const response=await fetch(url,defaultOptions);if(timeoutId&&clearTimeout(timeoutId),!response.ok){const error=new Error(`HTTP error! status: ${response.status}`);throw error.status=response.status,error.url=url,captureException(error,{function:"makeLinkedInRequest",url:url,status:response.status}),error}return response.json()}catch(error){if(timeoutId&&clearTimeout(timeoutId),"AbortError"===error.name){const timeoutError=new Error("Request timeout");throw timeoutError.status=408,captureException(timeoutError,{function:"makeLinkedInRequest",url:url,reason:"timeout"}),timeoutError}throw captureException(error,{function:"makeLinkedInRequest",url:url,reason:"fetch_failed"}),error}}async function getUserProfileFromLinkedin(){const response=await makeLinkedInRequest("https://www.linkedin.com/voyager/api/me",{timeout:1e4}),miniProfile=(null==response?void 0:response.miniProfile)||{};return{slug:miniProfile.publicIdentifier||"",firstName:miniProfile.firstName||"",lastName:miniProfile.lastName||""}}async function fetchLegacyConnectionPage(profileId,pageIndex,config){const url=function(profileId,startIndex,pageSize){return`https://www.linkedin.com/voyager/api/graphql?variables=(start:${startIndex},count:${pageSize},origin:MEMBER_PROFILE_CANNED_SEARCH,query:(flagshipSearchIntent:SEARCH_SRP,queryParameters:List((key:connectionOf,value:List(${profileId})),(key:network,value:List(F)),(key:resultType,value:List(PEOPLE))),includeFiltersInResponse:false))&queryId=voyagerSearchDashClusters.92cc53470cef3c578ab1d34676d5320c`}(profileId,pageIndex*config.pageSize,config.pageSize);try{return function(apiResponse){var _a,_b,_c;const data=null==apiResponse?void 0:apiResponse.data;try{return data&&(null==(_c=null==(_b=null==(_a=null==data?void 0:data.searchDashClustersByAll)?void 0:_a.elements)?void 0:_b[0])?void 0:_c.items)?data.searchDashClustersByAll.elements[0].items.filter(item=>{var _a2;return null==(_a2=null==item?void 0:item.item)?void 0:_a2.entityResult}).map(item=>transformEntityToConnection(item.item.entityResult)):[]}catch(error){return console.error("Error parsing legacy connection response:",error),[]}}(await makeLinkedInRequest(url,{timeout:config.endpoints.legacy.timeout}))}catch(error){return console.log(`Error fetching legacy endpoint page ${pageIndex}:`,error.message),[]}}async function fetchCurrentConnectionPage(profileId,pageIndex,config){const url=function(profileId,startIndex,pageSize){return`https://www.linkedin.com/voyager/api/graphql?includeWebMetadata=true&variables=(start:${startIndex},count:${pageSize},origin:MEMBER_PROFILE_CANNED_SEARCH,query:(flagshipSearchIntent:SEARCH_SRP,queryParameters:List((key:connectionOf,value:List(${profileId})),(key:network,value:List(F)),(key:resultType,value:List(PEOPLE))),includeFiltersInResponse:false))&queryId=voyagerSearchDashClusters.5ba32757c00b31aea747c8bebb92855c`}(profileId,pageIndex*config.pageSize,config.pageSize);try{return function(apiResponse){try{return(null==apiResponse?void 0:apiResponse.included)&&Array.isArray(apiResponse.included)?apiResponse.included.filter(item=>"com.linkedin.voyager.dash.search.EntityResultViewModel"===item.$type).map(profile=>transformEntityToConnection(profile)):[]}catch(error){return console.error("Error parsing current connection response:",error),[]}}(await makeLinkedInRequest(url,{mode:"cors",timeout:config.endpoints.current.timeout,headers:{accept:"application/vnd.linkedin.normalized+json+2.1"}}))}catch(error){return console.log(`Error fetching current endpoint page ${pageIndex}:`,error.message),[]}}function fetchConnectionsFromEndpoint(profileSlug,endpoint,config){switch(endpoint){case"legacy":return async function(profileSlug,config){try{const profileId=await fetchProfileInformation(profileSlug),allConnections=[];for(let pageIndex=0;pageIndex<config.maxPages;pageIndex++){const connections=await fetchLegacyConnectionPage(profileId,pageIndex,config);if(!connections||0===connections.length)break;allConnections.push(...connections),shouldDelayNextRequest(pageIndex,config.maxPages)&&await delayExecution(generateRequestDelay(config))}return allConnections}catch(error){throw console.error("Error fetching mutual connections via legacy endpoint:",error),error}}(profileSlug,config);case"current":return async function(profileSlug,config){try{const profileId=await fetchProfileInformation(profileSlug),allConnections=[];for(let pageIndex=0;pageIndex<config.maxPages;pageIndex++){const connections=await fetchCurrentConnectionPage(profileId,pageIndex,config);if(!connections||0===connections.length)break;allConnections.push(...connections),shouldDelayNextRequest(pageIndex,config.maxPages)&&await delayExecution(generateRequestDelay(config))}return allConnections}catch(error){throw console.error("Error fetching mutual connections via current endpoint:",error),error}}(profileSlug,config);default:throw new Error(`Unknown endpoint: ${endpoint}`)}}function isEndpointEnabled(config,endpoint){var _a;return!0===(null==(_a=config.endpoints[endpoint])?void 0:_a.enabled)}function isRateLimitError(error){var _a,_b;return 429===error.status||/status:\s*429/i.test(error.message||"")||(null==(_a=error.message)?void 0:_a.toLowerCase().includes("rate limit"))||(null==(_b=error.message)?void 0:_b.toLowerCase().includes("too many requests"))}function handleRateLimitError(config){if("RETURN_EMPTY"===config.onRateLimit)return console.log("Rate limited - returning empty result"),[];throw new Error("Rate limited - stopping execution")}function generateRequestDelay(config){const{min:min2,max:max2}=config.delayBetweenRequests;return Math.floor(Math.random()*(max2-min2+1))+min2}function delayExecution(milliseconds){return new Promise(resolve=>setTimeout(resolve,milliseconds))}function shouldDelayNextRequest(currentPageIndex,maxPages){return currentPageIndex<maxPages-1}async function fetchProfileInformation(profileSlug){const slug=(profileSlug||"").trim();if(!slug)throw new Error("Invalid profile slug");const url=`https://www.linkedin.com/voyager/api/graphql?includeWebMetadata=true&variables=(vanityName:${encodeURIComponent(slug)})&queryId=voyagerIdentityDashProfiles.a1a483e719b20537a256b6853cdca711`,response=await makeLinkedInRequest(url,{timeout:1e4,headers:{accept:"application/vnd.linkedin.normalized+json+2.1"}}),included=null==response?void 0:response.included;if(Array.isArray(included)){const match=included.find(item=>item&&item.publicIdentifier===slug&&"string"==typeof item.entityUrn);if(null==match?void 0:match.entityUrn)return match.entityUrn.replace("urn:li:fsd_profile:","")}throw new Error("Could not retrieve profile details")}function transformEntityToConnection(entity){var _a,_b,_c,_d;const navigationUrl=entity.navigationUrl||"",profileSlug=function(navigationUrl){var _a,_b,_c;return(null==(_c=null==(_b=null==(_a=navigationUrl.split("/in/"))?void 0:_a[1])?void 0:_b.split("?"))?void 0:_c[0])||""}(navigationUrl),profileUrl=function(navigationUrl){var _a;try{const url=new URL(navigationUrl);return url.origin+url.pathname}catch{return(null==(_a=navigationUrl.split("?"))?void 0:_a[0])||""}}(navigationUrl);return{name:(null==(_a=entity.title)?void 0:_a.text)||"",slug:profileSlug,headline:(null==(_b=entity.primarySubtitle)?void 0:_b.text)||"",location:(null==(_c=entity.secondarySubtitle)?void 0:_c.text)||"",profileUrl:profileUrl,distance:(null==(_d=entity.entityCustomTrackingInfo)?void 0:_d.memberDistance)||""}}async function getCsrfToken(){var _a;if(void 0!==browser&&(null==(_a=null==browser?void 0:browser.cookies)?void 0:_a.get)){const cookie=await browser.cookies.get({url:"https://www.linkedin.com",name:"JSESSIONID"});return((null==cookie?void 0:cookie.value)||"").replace(/"/g,"")}const cookies=document.cookie.split(";");for(const cookie of cookies){const[name,value]=cookie.trim().split("=");if("JSESSIONID"===name&&value)return value.replace(/"/g,"")}throw new Error("JSESSIONID cookie not found")}async function fetchUserConnections(startFrom=0,count=500){try{return await makeLinkedInRequest(`https://www.linkedin.com/voyager/api/relationships/dash/connections?decorationId=com.linkedin.voyager.dash.deco.web.mynetwork.ConnectionListWithProfile-15&count=${count}&q=search&sortType=RECENTLY_ADDED&start=${startFrom}`)}catch(error){throw console.error("fetchUserConnections failed:",error),error}}const DOM_CONNECTION_COUNT_PATTERNS=[/connectionsCount[\s\S]{0,300}?intValue[^0-9]{0,10}(\d+)/i,/(\d[\d.,]*)\s*(?:<!--[\s\S]*?-->\s*)*connections/i];async function fetchExpectedConnectionCount(){const deadline=new AbortController,timeoutId=setTimeout(()=>deadline.abort(),1e4);try{return await async function(signal){var _a;try{const csrfToken=await getCsrfToken(),response=await fetch("https://www.linkedin.com/voyager/api/relationships/connectionsSummary",{headers:{"csrf-token":csrfToken,accept:"application/vnd.linkedin.normalized+json+2.1","x-restli-protocol-version":"2.0.0"},credentials:"include",signal:signal});if(response.ok){const body=await response.json(),numConnections=null==(_a=null==body?void 0:body.data)?void 0:_a.numConnections;if(Number.isInteger(numConnections)&&numConnections>=0)return{total:numConnections,source:"api"}}}catch(error){console.error("fetchExpectedConnectionCount voyager failed:",null==error?void 0:error.message)}try{const response=await fetch("https://www.linkedin.com/mynetwork/invite-connect/connections/",{credentials:"include",signal:signal});if(response.ok){const total=function(html){for(const pattern of DOM_CONNECTION_COUNT_PATTERNS){const match=html.match(pattern);if(!match)continue;const total=Number.parseInt(match[1].replace(/[.,]/g,""),10);if(Number.isInteger(total)&&total>=0)return total}return null}(await response.text());if(null!==total)return{total:total,source:"dom"}}}catch(error){console.error("fetchExpectedConnectionCount dom fallback failed:",null==error?void 0:error.message)}return null}(deadline.signal)}finally{clearTimeout(timeoutId)}}let logs=[],debugModeCache=!1,debugModeHydrated=!1;browser.storage.onChanged.addListener((changes,areaName)=>{if("local"!==areaName)return;const change=changes.sdk_debug_mode;change&&(debugModeCache=!!change.newValue)}),async function(){if(!debugModeHydrated){try{const stored=await localStorage.getItem("sdk_debug_mode");debugModeCache=!!stored}catch{debugModeCache=!1}debugModeHydrated=!0}}();const sdkLog=async(level,message,context={},forceConsole=!1)=>{const logEntry={ts:(new Date).toISOString(),lvl:level,msg:message,ctx:context};try{if(debugModeCache||forceConsole){(console[level]||console.log)(`[village-extension-sdk] ${message}`,context&&Object.keys(context).length>0?context:"")}logs.push(logEntry),logs.length>500&&(logs=logs.slice(logs.length-500))}catch(error){console.error("[village-extension-sdk] Failed to write SDK log:",error,logEntry)}},getSdkLogs=async()=>{try{console.log(`--- Village Extension SDK Logs (Last ${logs.length}) ---`),console.table(logs)}catch(error){console.error("[village-extension-sdk] Failed to retrieve logs:",error)}},enableSdkDebug=async()=>{try{await localStorage.setItem("sdk_debug_mode",!0),sdkLog("warn","Village Extension SDK Debug Mode ENABLED. Verbose logs will now appear in the console."),console.log("[village-extension-sdk] Debug mode enabled.")}catch(error){console.error("[village-extension-sdk] Failed to enable debug mode:",error)}},disableSdkDebug=async()=>{try{await localStorage.setItem("sdk_debug_mode",!1),sdkLog("warn","Village Extension SDK Debug Mode DISABLED."),console.log("[village-extension-sdk] Debug mode disabled.")}catch(error){console.error("[village-extension-sdk] Failed to disable debug mode:",error)}},clearSdkLogs=()=>{try{logs=[],sdkLog("warn","Village Extension SDK logs cleared."),console.log("[village-extension-sdk] Logs cleared.")}catch(error){console.error("[village-extension-sdk] Failed to clear logs:",error)}};const VILLAGE_TAB_URLS=["*://village.do/*","*://*.village.do/*","*://village.ai/*","*://*.village.ai/*","http://localhost/*","https://localhost/*"];async function pushToVillageTabs(event,data){try{const tabs=await browser.tabs.query({url:VILLAGE_TAB_URLS});for(const tab of tabs||[])null!=tab.id&&trackingEvents.pushMessaging.sendMessage("bridge:push",{event:event,data:data},tab.id).catch(()=>{})}catch(err){sdkLog("warn","Failed to push event to Village tabs",{event:event,error:null==err?void 0:err.message})}}async function notifyUserLinkedinLogin(){var _a;const cookie=await getFrontendCookie();if(cookie)try{await axios.get(VILLAGE_API_URL+"notify-linkedin",{headers:{"x-access-token":cookie}})}catch(err){return captureException(err,{function:"notifyUserLinkedinLogin",request:{url:VILLAGE_API_URL+"notify-linkedin",method:"GET",status:null==(_a=null==err?void 0:err.response)?void 0:_a.status}}),sdkLog("error","Error notifying LinkedIn login",{error:err.message}),err}}function getConnectionsFromResponse(data){var _a;return Array.isArray(null==data?void 0:data.elements)?data.elements:Array.isArray(null==(_a=null==data?void 0:data.data)?void 0:_a.elements)?data.data.elements:[]}function parseConnections(connections){return connections.filter(connection=>connection.connectedMemberResolutionResult).map(connection=>(connection=>{const{connectedMemberResolutionResult:data,entityUrn:entityUrn,createdAt:createdAt}=connection;return{avatar_url:function(imageObj){if(!imageObj)return"";const{rootUrl:rootUrl,artifacts:artifacts}=imageObj;return rootUrl&&artifacts&&artifacts.length?`${rootUrl}${artifacts[artifacts.length-1].fileIdentifyingUrlPathSegment}`:""}((obj=data,["profilePicture","displayImageReference","vectorImage"].reduce((obj2,level)=>obj2&&obj2[level],obj))),full_name:`${data.firstName} ${data.lastName}`,profile_id:data.publicIdentifier,linkedin_id:entityUrn.replace("urn:li:fsd_connection:",""),created_at:new Date(createdAt)};var obj})(connection))}function getCreatedAtMs(connection){var _a,_b;const createdAtMs=null==(_b=null==(_a=connection.created_at)?void 0:_a.getTime)?void 0:_b.call(_a);return"number"==typeof createdAtMs&&Number.isFinite(createdAtMs)?createdAtMs:null}function getHighestSeenConnectedAtMs(connections,minExclusiveMs){const createdAtMs=connections.map(connection=>getCreatedAtMs(connection)).fil