vibe64 0.1.39 → 0.1.41
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/bin/run.js +1955 -1855
- package/bin/server.js +136 -112
- package/bin/upgrade-state.js +5514 -5343
- package/dist/assets/GithubBrowserTabs-YvIe2BdE.js +1 -0
- package/dist/assets/LocalDatabaseServer-BWAvRlUl.css +1 -0
- package/dist/assets/LocalDatabaseServer-CVsGChHh.js +2 -0
- package/dist/assets/StudioErrorNotice-C_jbvp9V.js +1 -0
- package/dist/assets/VAlert-gwuhYlYb.js +1 -0
- package/dist/assets/VAutocomplete-D7Vk5wq_.js +1 -0
- package/dist/assets/VAvatar-DvRBcmqv.js +1 -0
- package/dist/assets/VBtn-BhVEwXLX.js +1 -0
- package/dist/assets/VCard-C3Hx769y.js +1 -0
- package/dist/assets/VCheckbox-DyCGSN0H.js +1 -0
- package/dist/assets/VCheckboxBtn-DCyuVH7W.css +1 -0
- package/dist/assets/VCheckboxBtn-DYcQU2Pn.js +1 -0
- package/dist/assets/VChip-VVdtjfq-.js +1 -0
- package/dist/assets/VDialog-CQDhjRiV.js +1 -0
- package/dist/assets/VDivider-Dq25WsKu.js +1 -0
- package/dist/assets/VExpansionPanels-C1y-myl5.js +1 -0
- package/dist/assets/VMenu-CDcBLYWR.js +1 -0
- package/dist/assets/VOverlay-Cp4rFk6g.js +1 -0
- package/dist/assets/VRadioGroup-CAjNZwF7.js +1 -0
- package/dist/assets/VRow-BskP28jR.js +1 -0
- package/dist/assets/VSelect-D3oLvCcB.js +2 -0
- package/dist/assets/VSheet-DxYEFfnM.js +1 -0
- package/dist/assets/VSkeletonLoader-Cync3lZZ.js +1 -0
- package/dist/assets/VSpacer-CgWOWvBh.js +1 -0
- package/dist/assets/VSwitch-BxGuGypi.js +1 -0
- package/dist/assets/VTextField-C0b_0cSa.js +1 -0
- package/dist/assets/VTextField-F6unyhrS.css +1 -0
- package/dist/assets/VTextarea-B7sZd1JY.js +1 -0
- package/dist/assets/{Vibe64AsyncModuleState-Do9EqX3S.js → Vibe64AsyncModuleState-syuPcpGx.js} +1 -1
- package/dist/assets/{Vibe64AuthSettingsButton-M44SSmZ9.css → Vibe64AuthSettingsButton-D2lltUhi.css} +1 -1
- package/dist/assets/Vibe64AuthSettingsButton-DLdfT68V.js +5 -0
- package/dist/assets/Vibe64CopyCommand-CYiZcy0d.js +1 -0
- package/dist/assets/Vibe64CopyCommand-ClbQLYZi.css +1 -0
- package/dist/assets/{Vibe64DashboardBackButton-BH_8j_VR.js → Vibe64DashboardBackButton-Go_MJuIK.js} +1 -1
- package/dist/assets/{Vibe64DashboardPageHeader-BXQR00HK.js → Vibe64DashboardPageHeader-BMrdRph6.js} +1 -1
- package/dist/assets/Vibe64DashboardPageHeader-CdlzsyKQ.css +1 -0
- package/dist/assets/Vibe64DashboardShell-DMPz6fIx.js +1 -0
- package/dist/assets/{Vibe64DatabaseWorkspace-CEml9BWn.js → Vibe64DatabaseWorkspace-BCEIOlSg.js} +3 -3
- package/dist/assets/{Vibe64DatabaseWorkspace-DPDMxhAW.css → Vibe64DatabaseWorkspace-DePBDUMy.css} +1 -1
- package/dist/assets/{Vibe64OutputControls-Co5YzwcK.css → Vibe64OutputControls-CeBzZPUT.css} +1 -1
- package/dist/assets/Vibe64OutputControls-DMoqL0VD.js +8 -0
- package/dist/assets/{Vibe64RepositoryWorkspace-obZFXkoG.js → Vibe64RepositoryWorkspace-BdwRwbxp.js} +2 -2
- package/dist/assets/{Vibe64RepositoryWorkspace-Agyt4O-V.css → Vibe64RepositoryWorkspace-Bw9W691N.css} +1 -1
- package/dist/assets/{Vibe64SessionFiles-CQzs6fee.js → Vibe64SessionFiles-ChJWUOqm.js} +4 -4
- package/dist/assets/Vibe64SessionFiles-DsPb8hOe.css +1 -0
- package/dist/assets/{Vibe64TemporaryAiFixAction-BiuIE9mC.js → Vibe64TemporaryAiFixAction-CIePbdW8.js} +1 -1
- package/dist/assets/{Vibe64UiStoryboardView-BhKRpL0N.js → Vibe64UiStoryboardView-Bp9STItF.js} +1 -1
- package/dist/assets/{Vibe64UnavailableSessions-Ca5nC7KH.js → Vibe64UnavailableSessions-JBgHzM-j.js} +1 -1
- package/dist/assets/{_sessionId_-CKkGH3Rx.js → _sessionId_-Bw0KfJeR.js} +1 -1
- package/dist/assets/{_sessionTool_-1V-z6Pbp.js → _sessionTool_-BV1AwpUx.js} +1 -1
- package/dist/assets/_slug_-CAmuBm-M.css +1 -0
- package/dist/assets/_slug_-q9prK_gX.js +25 -0
- package/dist/assets/{access-WlhPvPgy.js → access-C05Nkq6r.js} +1 -1
- package/dist/assets/app-D1CGY9Xm.js +1 -0
- package/dist/assets/assistantRouting-DeE8jvtE.js +3 -0
- package/dist/assets/{changes-CHJjrZAc.js → changes-D17XpgGz.js} +1 -1
- package/dist/assets/client-BxGiylrJ.js +2 -0
- package/dist/assets/client-C8jwAMY9.css +1 -0
- package/dist/assets/{conversation-B90ERX9h.js → conversation-DZW4-Wck.js} +2 -2
- package/dist/assets/{conversation-vxJGwmtW.css → conversation-TK6EmDk4.css} +1 -1
- package/dist/assets/{createSimpleFunctional-CZTGuNuR.js → createSimpleFunctional-zlXZooQW.js} +1 -1
- package/dist/assets/{dashboard-CuutW8iv.js → dashboard-BXXgeQ0Q.js} +1 -1
- package/dist/assets/definitions-SNvFDEFS.js +1 -0
- package/dist/assets/dialog-transition-D2vqGksQ.js +1 -0
- package/dist/assets/env-B5V1EC4M.css +1 -0
- package/dist/assets/env-sXAQqKWk.js +1 -0
- package/dist/assets/health-92hh8xXh.css +1 -0
- package/dist/assets/health-Cr34pf2p.js +1 -0
- package/dist/assets/{history-1_NU8azF.js → history-N1iRZaab.js} +1 -1
- package/dist/assets/incoming-Bdqo8z25.css +1 -0
- package/dist/assets/incoming-CNwZa_yD.js +2 -0
- package/dist/assets/{index-irlMYzLh.css → index-B17d4wpZ.css} +1 -1
- package/dist/assets/index-Mxalhei8.js +138 -0
- package/dist/assets/{integrations-BMzWQQpa.js → integrations-BmwFvHgZ.js} +10 -10
- package/dist/assets/integrations-Co8WvCiD.css +1 -0
- package/dist/assets/issues-BbiG7dCV.js +1 -0
- package/dist/assets/layout-B2Ap07aa.js +1 -0
- package/dist/assets/{lazy-NHSwD9FS.js → lazy-BjyT2XvW.js} +1 -1
- package/dist/assets/{learning-Bdi3XRS7.js → learning-CUCuuoHM.js} +1 -1
- package/dist/assets/mdi-Bt90Ns76.js +1 -0
- package/dist/assets/placement-CQy46H3H.js +1 -0
- package/dist/assets/publish-4r_4K5IY.js +3 -0
- package/dist/assets/publish-BFTsAMCF.css +1 -0
- package/dist/assets/pull-requests-BjwokcU0.css +1 -0
- package/dist/assets/pull-requests-DY9jg3cE.js +1 -0
- package/dist/assets/{repository-BL_2bgzC.js → repository-DhXdoMP6.js} +1 -1
- package/dist/assets/ripple-EFNA8EBu.js +11 -0
- package/dist/assets/rolldown-runtime-DBalRfVu.js +1 -0
- package/dist/assets/{session-BdhKrcX4.js → session-BGpiZThC.js} +1 -1
- package/dist/assets/{settings-1rpuL7eR.js → settings-Cj4u-76p.js} +1 -1
- package/dist/assets/settings-D8x4KUqV.css +1 -0
- package/dist/assets/shared-DZETtWRH.js +2 -0
- package/dist/assets/studioGateApi-BXHVBVEc.js +1 -0
- package/dist/assets/studioUrls-DpSS-0z1.js +1 -0
- package/dist/assets/useArchivedVibe64Sessions-BXNg8oES.js +1 -0
- package/dist/assets/useCommand-nWFczmJy.js +1 -0
- package/dist/assets/useEndpointResource-Ds8EDBZ2.js +1 -0
- package/dist/assets/useRealtimeEvent-DrOiU8lJ.js +1 -0
- package/dist/assets/{useUiFeedback-BPBF_0bp.js → useUiFeedback-CMwE4MLs.js} +1 -1
- package/dist/assets/useVibe64ConversationLog-C1xjhFtS.js +1 -0
- package/dist/assets/{useVibe64DatabaseTools-4o6S8eXq.js → useVibe64DatabaseTools-H6H-YJQX.js} +1 -1
- package/dist/assets/useVibe64ProjectScope-B5ogg6jd.js +1 -0
- package/dist/assets/useVibe64SessionData-CnDOFFHb.js +1 -0
- package/dist/assets/{useVibe64SessionSelection-BzL1y_Vq.js → useVibe64SessionSelection-J87nJ9p5.js} +1 -1
- package/dist/assets/{useVibe64SystemGraph-B4RmsC9Y.js → useVibe64SystemGraph-DbSfrYF8.js} +1 -1
- package/dist/assets/{useVibe64Terminal-Cg3idMcy.js → useVibe64Terminal-I7Sf6xMW.js} +1 -1
- package/dist/assets/vibe64ProjectScope.local-B06ABkhI.js +1 -0
- package/dist/assets/vibe64SavedEnvValues-B_QE9aAj.js +1 -0
- package/dist/assets/vibe64SessionFocus-CA-sk8Ri.css +1 -0
- package/dist/assets/vibe64SessionFocus-DlN8NwcE.js +1 -0
- package/dist/assets/{vibe64SessionInfo-BuBUdL-e.js → vibe64SessionInfo-B0uItVOK.js} +1 -1
- package/dist/assets/{vibe64SessionToolDefinitions-BJaJH5LR.js → vibe64SessionToolDefinitions-Dsn8WYmO.js} +1 -1
- package/dist/index.html +56 -46
- package/docs/colleague-usage/account-profile-and-appearance.md +1 -1
- package/docs/colleague-usage/{ai-accounts-and-routing.md → ai-accounts.md} +41 -114
- package/docs/colleague-usage/ai-model-setups.md +159 -0
- package/docs/colleague-usage/ai-onboarding.md +97 -22
- package/docs/colleague-usage/ai-personal-use.md +41 -0
- package/docs/colleague-usage/auto-workflow.md +8 -3
- package/docs/colleague-usage/codex-context-recovery.md +2 -1
- package/docs/colleague-usage/coding-agent-goals.md +7 -4
- package/docs/colleague-usage/coding-agents.md +8 -5
- package/docs/colleague-usage/colleague-watches.md +15 -4
- package/docs/colleague-usage/colleague.md +21 -5
- package/docs/colleague-usage/connected-contributions.md +13 -13
- package/docs/colleague-usage/connected-projects.md +2 -2
- package/docs/colleague-usage/conversation-context.md +1 -1
- package/docs/colleague-usage/dashboard-navigation.md +5 -3
- package/docs/colleague-usage/development-env.md +21 -4
- package/docs/colleague-usage/file-interfaces.md +1 -1
- package/docs/colleague-usage/github-work.md +8 -8
- package/docs/colleague-usage/health-checks.md +52 -18
- package/docs/colleague-usage/incoming-changes.md +3 -3
- package/docs/colleague-usage/integrations.md +5 -3
- package/docs/colleague-usage/learning-course-catalogue.md +3 -3
- package/docs/colleague-usage/learning-environment.md +78 -56
- package/docs/colleague-usage/learning-mode-ui.md +31 -19
- package/docs/colleague-usage/learning-practice-projects.md +15 -4
- package/docs/colleague-usage/learning-teacher-guide.md +10 -4
- package/docs/colleague-usage/learning-with-colleague.md +12 -8
- package/docs/colleague-usage/lesson-authoring.md +13 -13
- package/docs/colleague-usage/lesson-step-bar.md +47 -33
- package/docs/colleague-usage/main-chat-approvals.md +150 -0
- package/docs/colleague-usage/preview-browser-checks.md +5 -1
- package/docs/colleague-usage/preview-starting-application.md +10 -1
- package/docs/colleague-usage/project-language-tools.md +16 -2
- package/docs/colleague-usage/project-settings.md +1 -1
- package/docs/colleague-usage/project-setup.md +17 -7
- package/docs/colleague-usage/publishing.md +187 -0
- package/docs/colleague-usage/running-vibe64-on-your-computer.md +54 -6
- package/docs/colleague-usage/sessions.md +18 -10
- package/docs/colleague-usage/set-up-linux.md +254 -0
- package/docs/colleague-usage/set-up-macos.md +199 -0
- package/docs/colleague-usage/set-up-windows.md +76 -0
- package/docs/colleague-usage/starter-apps.md +23 -6
- package/docs/colleague-usage/teaching-content.md +2 -2
- package/docs/colleague-usage/team-ai-access.md +108 -0
- package/docs/colleague-usage/temporary-chats.md +9 -7
- package/docs/colleague-usage/workspace-preparation.md +50 -1
- package/docs/templates/learn-topic/README.md +3 -3
- package/docs/templates/learn-topic/training/lessons/TOPIC-01/lesson.json +2 -1
- package/docs/training-content.md +37 -15
- package/node_modules/@jskit-ai/assistant-core/package.json +1 -1
- package/node_modules/@jskit-ai/assistant-runtime/package.json +1 -1
- package/node_modules/@jskit-ai/assistant-voice/package.json +1 -1
- package/node_modules/@jskit-ai/connector-google-calendar/package.json +1 -1
- package/node_modules/@jskit-ai/connectors-catalog/package.json +1 -1
- package/node_modules/@jskit-ai/connectors-catalog/patterns/oauth-connection/PATTERN.md +25 -0
- package/node_modules/@jskit-ai/connectors-core/package.json +1 -1
- package/node_modules/@jskit-ai/http-runtime/package.json +1 -1
- package/node_modules/@jskit-ai/kernel/package.json +1 -1
- package/node_modules/@jskit-ai/realtime/package.json +1 -1
- package/node_modules/@jskit-ai/resource-core/package.json +1 -1
- package/node_modules/@jskit-ai/resource-crud-core/package.json +1 -1
- package/node_modules/@jskit-ai/uploads-runtime/package.json +1 -1
- package/node_modules/@local/vibe64-accounts/package.json +2 -1
- package/node_modules/@local/vibe64-core/package.json +4 -1
- package/node_modules/@local/vibe64-execution/src/host/execHelper.js +82 -81
- package/node_modules/@local/vibe64-genesis/bin/vibe64-genesis-host-context +83 -82
- package/node_modules/@local/vibe64-genesis/package.json +1 -0
- package/node_modules/@local/vibe64-genesis/src/server/agentSpecs.js +118 -68
- package/node_modules/@local/vibe64-genesis/src/server/index.js +536 -449
- package/node_modules/@local/vibe64-genesis/src/server/packaging.js +105 -0
- package/node_modules/@local/vibe64-genesis/src/server/promptContext.js +144 -145
- package/node_modules/@local/vibe64-packaging/package.json +26 -0
- package/node_modules/@local/vibe64-packaging/src/server/packers/capacitor/ShellIcons.java +112 -0
- package/node_modules/@local/vibe64-project/package.json +3 -1
- package/node_modules/@local/vibe64-publishing/package.json +12 -0
- package/node_modules/@local/vibe64-runtime/src/server/codexAppServerProcess.js +7 -7
- package/node_modules/@local/vibe64-runtime/src/shared/assistantRoutingScores.json +25 -22
- package/node_modules/@local/vibe64-terminals/package.json +2 -1
- package/node_modules/@local/vibe64-terminals/src/server/sessionWorkOperationCommand.js +1341 -1300
- package/node_modules/@local/vibe64-training/package.json +2 -1
- package/package.json +19 -15
- package/server.bundle.mjs +43109 -41089
- package/dist/assets/GithubBrowserTabs-C2NO5l8g.js +0 -1
- package/dist/assets/StudioErrorNotice-CSrUw1QV.js +0 -1
- package/dist/assets/VAlert-P256xaE0.js +0 -1
- package/dist/assets/VAutocomplete-BDb95qJX.js +0 -1
- package/dist/assets/VAvatar-DPzqDH4r.js +0 -1
- package/dist/assets/VBtn-B2MBK2DL.js +0 -1
- package/dist/assets/VCard-mXy0k4aS.js +0 -1
- package/dist/assets/VCheckbox-C7A1ZW4D.js +0 -1
- package/dist/assets/VChip-CcI-Oo2J.js +0 -1
- package/dist/assets/VDialog-Bu3EfKb1.js +0 -1
- package/dist/assets/VDivider-BMEqUoAB.js +0 -1
- package/dist/assets/VExpansionPanels-Dgjrop0V.js +0 -1
- package/dist/assets/VMenu-C_x18lwb.js +0 -1
- package/dist/assets/VOverlay-CeMZurIN.js +0 -1
- package/dist/assets/VRadioGroup-CUu2-KIP.js +0 -1
- package/dist/assets/VRow-Cpw7OHQV.js +0 -1
- package/dist/assets/VSelect-DL3HaA5m.js +0 -2
- package/dist/assets/VSheet-DZWsu0kL.js +0 -1
- package/dist/assets/VSkeletonLoader-CttxM1tw.js +0 -1
- package/dist/assets/VSpacer-Dhmsvk4t.js +0 -1
- package/dist/assets/VSwitch-BRHeDJkH.js +0 -1
- package/dist/assets/VTextField-BR2eZeFT.js +0 -1
- package/dist/assets/VTextField-BiatYyd3.css +0 -1
- package/dist/assets/VTextarea-DbqamXJd.js +0 -1
- package/dist/assets/Vibe64AuthSettingsButton-fY4ZiIFF.js +0 -5
- package/dist/assets/Vibe64DashboardPageHeader-Gm1IvlHx.css +0 -1
- package/dist/assets/Vibe64DashboardShell-BSq7uXEW.js +0 -1
- package/dist/assets/Vibe64OutputControls-_zhGX9ne.js +0 -8
- package/dist/assets/Vibe64SessionFiles-Bl8wJ5Sk.css +0 -1
- package/dist/assets/_slug_-BclonbST.js +0 -24
- package/dist/assets/_slug_-CZ1bxO9C.css +0 -1
- package/dist/assets/app-BNP_n_Tt.js +0 -1
- package/dist/assets/assistantRouting-D4XpXcEf.js +0 -3
- package/dist/assets/client-BWV84wi2.js +0 -2
- package/dist/assets/client-DGrP-2AJ.css +0 -1
- package/dist/assets/definitions-BrMvu6yV.js +0 -1
- package/dist/assets/env-BzRtyO0w.css +0 -1
- package/dist/assets/env-D3KQGvRe.js +0 -1
- package/dist/assets/health-BJvooRnJ.css +0 -1
- package/dist/assets/health-BhoO1d4h.js +0 -1
- package/dist/assets/incoming-DWDrmxyH.css +0 -1
- package/dist/assets/incoming-DzADFGqp.js +0 -2
- package/dist/assets/index-dNxr4Lg9.js +0 -138
- package/dist/assets/integrations-Cq1x-Di9.css +0 -1
- package/dist/assets/issues-Bywux4s7.js +0 -1
- package/dist/assets/mdi-CG9pWOSj.js +0 -1
- package/dist/assets/placement-BF-zIEhA.js +0 -1
- package/dist/assets/pull-requests-CdbhyFOv.css +0 -1
- package/dist/assets/pull-requests-ncmKT3sS.js +0 -1
- package/dist/assets/ripple-BVltMmyV.js +0 -11
- package/dist/assets/settings-BopLnpB0.css +0 -1
- package/dist/assets/shared-DpMvYJO3.js +0 -2
- package/dist/assets/studioGateApi-DcCqiD9V.js +0 -1
- package/dist/assets/studioUrls-DmMMIScP.js +0 -1
- package/dist/assets/useArchivedVibe64Sessions-_LB2XxEa.js +0 -1
- package/dist/assets/useCommand-Bqxb-naz.js +0 -1
- package/dist/assets/useEndpointResource-DWoQ2keu.js +0 -1
- package/dist/assets/useRealtimeEvent-Bwapstla.js +0 -1
- package/dist/assets/useVibe64ConversationLog-BqUI0S5n.js +0 -1
- package/dist/assets/useVibe64Learning-DyqXkpLw.js +0 -1
- package/dist/assets/useVibe64ProjectScope-Bp1ImZlz.js +0 -1
- package/dist/assets/useVibe64SessionData-B686lToN.js +0 -1
- package/dist/assets/vibe64SessionFocus-CqZNTvYF.js +0 -1
- package/dist/assets/vibe64SessionFocus-OJ2toBd9.css +0 -1
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import{Jn as __esmMin,Xn as __toCommonJS,Yn as __exportAll,Zn as __toESM,d as VProgressLinear,h as VIcon,qn as __commonJSMin}from"./ripple-BVltMmyV.js";import{D as createVNode,E as createTextVNode,Ht as watch,J as inject,On as unref,Ut as watchEffect,_ as createBaseVNode,b as createElementBlock,bt as renderList,ct as onMounted,ft as onUnmounted,g as computed,mt as openBlock,o as Fragment,pn as onScopeDispose,qt as withCtx,tr as toDisplayString,un as isRef,v as createBlock,vn as ref,y as createCommentVNode}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{t as useEndpointResource}from"./useEndpointResource-DWoQ2keu.js";import{_ as useRouter,g as useRoute}from"./useApi-BPuI6ZR9-CFWU1m37.js";import{D as validateSchemaPayload,k as createSchema,n as useRealtimeEvent,o as projectAppPath}from"./useRealtimeEvent-Bwapstla.js";import{t as VSelect}from"./VSelect-DL3HaA5m.js";import{c as VListItemTitle,l as VListItemSubtitle,n as VList,s as VListItem}from"./VMenu-C_x18lwb.js";import{t as VChip}from"./VChip-CcI-Oo2J.js";import{t as VTextField}from"./VTextField-BR2eZeFT.js";import{a as VIBE64_COLLEAGUE_INTEGRATIONS_KEY}from"./vibe64AssistantHost-CP6oxv5b.js";import{et as mdiConnection,ot as mdiCreation}from"./mdi-CG9pWOSj.js";import{i as VBtnToggle,t as VBtn}from"./VBtn-B2MBK2DL.js";import{t as VAlert}from"./VAlert-P256xaE0.js";import{t as VCheckbox}from"./VCheckbox-C7A1ZW4D.js";import{t as VSheet}from"./VSheet-DZWsu0kL.js";import{t as VDialog}from"./VDialog-Bu3EfKb1.js";import{n as VCardText,o as VCardActions,t as VCard}from"./VCard-mXy0k4aS.js";import{n as VCol,t as VRow}from"./VRow-Cpw7OHQV.js";import{i as VExpansionPanelText,n as VExpansionPanel,r as VExpansionPanelTitle,t as VExpansionPanels}from"./VExpansionPanels-Dgjrop0V.js";import{t as VSkeletonLoader}from"./VSkeletonLoader-CttxM1tw.js";import{t as VTextarea}from"./VTextarea-DbqamXJd.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{t as useCommand}from"./useCommand-Bqxb-naz.js";import{r as writeLocalStorageJson,t as readLocalStorageJson}from"./browserLocalStorage-B4C7rHrs.js";import{t as useVibe64ProjectSlug}from"./useVibe64ProjectScope-Bp1ImZlz.js";import{t as vibe64BrowserTabOriginId}from"./vibe64BrowserTabOrigin-SF9E31vi.js";import{$ as vibe64SessionPath,O as VIBE64_SOURCE_EDITOR_FILE_CHANGED_EVENT,Qt as VCombobox,c as IntegrationConfigurationFields_default,f as validateIntegrationConfiguration,l as getProviderClientAuthenticationMethods,u as getProviderScopes,y as readRefOrGetterValue}from"./index-dNxr4Lg9.js";import{t as Vibe64AsyncModuleState_default}from"./Vibe64AsyncModuleState-Do9EqX3S.js";import{t as connectorDefinitions}from"./definitions-BrMvu6yV.js";var GOOGLE_SCOPE_BASE=`https://www.googleapis.com/auth/`;var googleCalendarDefinition=Object.freeze({id:`google-calendar`,name:`Google Calendar`,description:`Read calendars and create, edit or cancel events.`,categories:[`Google`,`Productivity`],accountModes:[`shared`,`per-user`,`assistant`],authenticationMethods:[`oauth2`],setup:{callbackPath:`/integrations/google/callback`,url:`https://developers.google.com/identity/protocols/oauth2/web-server`,steps:[`In Google Cloud, select the project for this application. Open APIs & Services > Library, search for Google Calendar API, open it and choose Enable.`,`Open Google Auth Platform > Branding. If setup has not started, choose Get Started; enter the app name, support email and contact email, choose the audience, review the policy and finish with Create.`,`Choose External if people outside your Google Workspace organization will connect. During testing, open Audience > Test users > Add users, enter the allowed Google accounts and Save. Internal is only for your organization. External Testing refresh tokens for these API permissions expire after seven days; reconnect during testing. Public release also requires completing the applicable Google review.`,`For an external app, open Data Access > Add or Remove Scopes. Add the permissions selected in this integration and Save. Sensitive or restricted scopes can require Google verification before public use; creating a client does not complete that review.`,`Keep List calendars for the initial connection check and Read events if the application will read events. Event-only or availability-only permissions do not authorize the calendar-list check. Use an account that can access the intended calendars; selecting a scope does not grant calendar sharing access.`,`To create, edit or cancel events, select Manage events, add calendar.events in Google Data Access, and reconnect for fresh consent. Keep List calendars for verification. Calendar sharing must independently allow the connected account to write.`,`Choose the destination calendar and attendee notification policy explicitly. All-day end dates are exclusive; timed recurring events need an IANA time zone. Editing or cancelling a recurring master affects the series; use an expanded occurrence ID for one instance. Changing attendee arrays replaces the list; read the latest event first.`,`Open Clients > Create Client. Choose Web application and name it. Under Authorized redirect URIs, choose Add URI and paste the application callback shown here, then Create. The editor dashboard URL is not the callback.`,`Copy the Client ID into this form and copy or download the full client secret immediately; Google only shows it at creation. Save configuration, then use Set credential in Env to put the secret value in the variable named by Client secret reference. If lost, open Clients, select this client and Add Secret; save the new value before disabling the old secret.`,`Use Set callback in Env to save the same application callback URL. If a Configured callback URL is shown, preserve it unless intentionally changing both Env and Google. Scheme, path, case and trailing slash must match exactly.`,`For a shared account, return here and check or connect the account once the application runtime is ready. For per-user connections, each person authorizes inside your application. Saving this registration neither connects every user nor installs the callback route.`]},scopes:[{value:`${GOOGLE_SCOPE_BASE}calendar.calendarlist.readonly`,label:`List calendars`,recommended:true},{value:`${GOOGLE_SCOPE_BASE}calendar.events.readonly`,label:`Read events`,recommended:true},{value:`${GOOGLE_SCOPE_BASE}calendar.readonly`,label:`Read all calendar data`},{value:`${GOOGLE_SCOPE_BASE}calendar`,label:`Manage calendars and events`},{value:`${GOOGLE_SCOPE_BASE}calendar.calendarlist`,label:`Manage calendar subscriptions`},{value:`${GOOGLE_SCOPE_BASE}calendar.events`,label:`Manage events`},{value:`${GOOGLE_SCOPE_BASE}calendar.freebusy`,label:`Read your availability`},{value:`${GOOGLE_SCOPE_BASE}calendar.settings.readonly`,label:`Read calendar settings`},{value:`${GOOGLE_SCOPE_BASE}calendar.events.owned`,label:`Manage events in calendars you own`},{value:`${GOOGLE_SCOPE_BASE}calendar.events.owned.readonly`,label:`Read events in calendars you own`},{value:`${GOOGLE_SCOPE_BASE}calendar.events.freebusy`,label:`Read availability in accessible calendars`},{value:`${GOOGLE_SCOPE_BASE}calendar.app.created`,label:`Create and manage app-created calendars`},{value:`${GOOGLE_SCOPE_BASE}calendar.calendars`,label:`Manage calendar properties`},{value:`${GOOGLE_SCOPE_BASE}calendar.calendars.readonly`,label:`Read calendar properties`},{value:`${GOOGLE_SCOPE_BASE}calendar.acls`,label:`Manage calendar sharing permissions`},{value:`${GOOGLE_SCOPE_BASE}calendar.acls.readonly`,label:`Read calendar sharing permissions`},{value:`${GOOGLE_SCOPE_BASE}calendar.events.public.readonly`,label:`Read public calendar events`},{value:`${GOOGLE_SCOPE_BASE}calendar.addons.execute`,label:`Run a Calendar add-on`},{value:`${GOOGLE_SCOPE_BASE}calendar.addons.current.event.read`,label:`Read the event open in a Calendar add-on`},{value:`${GOOGLE_SCOPE_BASE}calendar.addons.current.event.write`,label:`Edit the event open in a Calendar add-on`}],settingsFields:[],documentationUrl:`https://developers.google.com/workspace/calendar/api/guides/overview`});var require_code$1=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.regexpCode=exports.getEsmExportName=exports.getProperty=exports.safeStringify=exports.stringify=exports.strConcat=exports.addCodeArg=exports.str=exports._=exports.nil=exports._Code=exports.Name=exports.IDENTIFIER=exports._CodeOrName=void 0;var _CodeOrName=class{};exports._CodeOrName=_CodeOrName;exports.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;var Name=class extends _CodeOrName{constructor(s){super();if(!exports.IDENTIFIER.test(s))throw new Error(`CodeGen: name must be a valid identifier`);this.str=s}toString(){return this.str}emptyStr(){return false}get names(){return{[this.str]:1}}};exports.Name=Name;var _Code=class extends _CodeOrName{constructor(code){super();this._items=typeof code===`string`?[code]:code}toString(){return this.str}emptyStr(){if(this._items.length>1)return false;const item=this._items[0];return item===``||item===`""`}get str(){var _a;return(_a=this._str)!==null&&_a!==void 0?_a:this._str=this._items.reduce((s,c)=>`${s}${c}`,``)}get names(){var _a;return(_a=this._names)!==null&&_a!==void 0?_a:this._names=this._items.reduce((names,c)=>{if(c instanceof Name)names[c.str]=(names[c.str]||0)+1;return names},{})}};exports._Code=_Code;exports.nil=new _Code(``);function _(strs,...args){const code=[strs[0]];let i=0;while(i<args.length){addCodeArg(code,args[i]);code.push(strs[++i])}return new _Code(code)}exports._=_;var plus=new _Code(`+`);function str(strs,...args){const expr=[safeStringify(strs[0])];let i=0;while(i<args.length){expr.push(plus);addCodeArg(expr,args[i]);expr.push(plus,safeStringify(strs[++i]))}optimize(expr);return new _Code(expr)}exports.str=str;function addCodeArg(code,arg){if(arg instanceof _Code)code.push(...arg._items);else if(arg instanceof Name)code.push(arg);else code.push(interpolate(arg))}exports.addCodeArg=addCodeArg;function optimize(expr){let i=1;while(i<expr.length-1){if(expr[i]===plus){const res=mergeExprItems(expr[i-1],expr[i+1]);if(res!==void 0){expr.splice(i-1,3,res);continue}expr[i++]=`+`}i++}}function mergeExprItems(a,b){if(b===`""`)return a;if(a===`""`)return b;if(typeof a==`string`){if(b instanceof Name||a[a.length-1]!==`"`)return;if(typeof b!=`string`)return`${a.slice(0,-1)}${b}"`;if(b[0]===`"`)return a.slice(0,-1)+b.slice(1);return}if(typeof b==`string`&&b[0]===`"`&&!(a instanceof Name))return`"${a}${b.slice(1)}`}function strConcat(c1,c2){return c2.emptyStr()?c1:c1.emptyStr()?c2:str`${c1}${c2}`}exports.strConcat=strConcat;function interpolate(x){return typeof x==`number`||typeof x==`boolean`||x===null?x:safeStringify(Array.isArray(x)?x.join(`,`):x)}function stringify(x){return new _Code(safeStringify(x))}exports.stringify=stringify;function safeStringify(x){return JSON.stringify(x).replace(/\u2028/g,`\\u2028`).replace(/\u2029/g,`\\u2029`)}exports.safeStringify=safeStringify;function getProperty(key){return typeof key==`string`&&exports.IDENTIFIER.test(key)?new _Code(`.${key}`):_`[${key}]`}exports.getProperty=getProperty;function getEsmExportName(key){if(typeof key==`string`&&exports.IDENTIFIER.test(key))return new _Code(`${key}`);throw new Error(`CodeGen: invalid export name: ${key}, use explicit $id name mapping`)}exports.getEsmExportName=getEsmExportName;function regexpCode(rx){return new _Code(rx.toString())}exports.regexpCode=regexpCode}));var require_scope=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.ValueScope=exports.ValueScopeName=exports.Scope=exports.varKinds=exports.UsedValueState=void 0;var code_1=require_code$1();var ValueError=class extends Error{constructor(name){super(`CodeGen: "code" for ${name} not defined`);this.value=name.value}};var UsedValueState;(function(UsedValueState){UsedValueState[UsedValueState[`Started`]=0]=`Started`;UsedValueState[UsedValueState[`Completed`]=1]=`Completed`})(UsedValueState||(exports.UsedValueState=UsedValueState={}));exports.varKinds={const:new code_1.Name(`const`),let:new code_1.Name(`let`),var:new code_1.Name(`var`)};var Scope=class{constructor({prefixes,parent}={}){this._names={};this._prefixes=prefixes;this._parent=parent}toName(nameOrPrefix){return nameOrPrefix instanceof code_1.Name?nameOrPrefix:this.name(nameOrPrefix)}name(prefix){return new code_1.Name(this._newName(prefix))}_newName(prefix){const ng=this._names[prefix]||this._nameGroup(prefix);return`${prefix}${ng.index++}`}_nameGroup(prefix){var _a,_b;if(((_b=(_a=this._parent)===null||_a===void 0?void 0:_a._prefixes)===null||_b===void 0?void 0:_b.has(prefix))||this._prefixes&&!this._prefixes.has(prefix))throw new Error(`CodeGen: prefix "${prefix}" is not allowed in this scope`);return this._names[prefix]={prefix,index:0}}};exports.Scope=Scope;var ValueScopeName=class extends code_1.Name{constructor(prefix,nameStr){super(nameStr);this.prefix=prefix}setValue(value,{property,itemIndex}){this.value=value;this.scopePath=(0,code_1._)`.${new code_1.Name(property)}[${itemIndex}]`}};exports.ValueScopeName=ValueScopeName;var line=(0,code_1._)`\n`;var ValueScope=class extends Scope{constructor(opts){super(opts);this._values={};this._scope=opts.scope;this.opts={...opts,_n:opts.lines?line:code_1.nil}}get(){return this._scope}name(prefix){return new ValueScopeName(prefix,this._newName(prefix))}value(nameOrPrefix,value){var _a;if(value.ref===void 0)throw new Error(`CodeGen: ref must be passed in value`);const name=this.toName(nameOrPrefix);const{prefix}=name;const valueKey=(_a=value.key)!==null&&_a!==void 0?_a:value.ref;let vs=this._values[prefix];if(vs){const _name=vs.get(valueKey);if(_name)return _name}else vs=this._values[prefix]=new Map;vs.set(valueKey,name);const s=this._scope[prefix]||(this._scope[prefix]=[]);const itemIndex=s.length;s[itemIndex]=value.ref;name.setValue(value,{property:prefix,itemIndex});return name}getValue(prefix,keyOrRef){const vs=this._values[prefix];if(!vs)return;return vs.get(keyOrRef)}scopeRefs(scopeName,values=this._values){return this._reduceValues(values,name=>{if(name.scopePath===void 0)throw new Error(`CodeGen: name "${name}" has no value`);return(0,code_1._)`${scopeName}${name.scopePath}`})}scopeCode(values=this._values,usedValues,getCode){return this._reduceValues(values,name=>{if(name.value===void 0)throw new Error(`CodeGen: name "${name}" has no value`);return name.value.code},usedValues,getCode)}_reduceValues(values,valueCode,usedValues={},getCode){let code=code_1.nil;for(const prefix in values){const vs=values[prefix];if(!vs)continue;const nameSet=usedValues[prefix]=usedValues[prefix]||new Map;vs.forEach(name=>{if(nameSet.has(name))return;nameSet.set(name,UsedValueState.Started);let c=valueCode(name);if(c){const def=this.opts.es5?exports.varKinds.var:exports.varKinds.const;code=(0,code_1._)`${code}${def} ${name} = ${c};${this.opts._n}`}else if(c=getCode===null||getCode===void 0?void 0:getCode(name))code=(0,code_1._)`${code}${c}${this.opts._n}`;else throw new ValueError(name);nameSet.set(name,UsedValueState.Completed)})}return code}};exports.ValueScope=ValueScope}));var require_codegen=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.or=exports.and=exports.not=exports.CodeGen=exports.operators=exports.varKinds=exports.ValueScopeName=exports.ValueScope=exports.Scope=exports.Name=exports.regexpCode=exports.stringify=exports.getProperty=exports.nil=exports.strConcat=exports.str=exports._=void 0;var code_1=require_code$1();var scope_1=require_scope();var code_2=require_code$1();Object.defineProperty(exports,"_",{enumerable:true,get:function(){return code_2._}});Object.defineProperty(exports,"str",{enumerable:true,get:function(){return code_2.str}});Object.defineProperty(exports,"strConcat",{enumerable:true,get:function(){return code_2.strConcat}});Object.defineProperty(exports,"nil",{enumerable:true,get:function(){return code_2.nil}});Object.defineProperty(exports,"getProperty",{enumerable:true,get:function(){return code_2.getProperty}});Object.defineProperty(exports,"stringify",{enumerable:true,get:function(){return code_2.stringify}});Object.defineProperty(exports,"regexpCode",{enumerable:true,get:function(){return code_2.regexpCode}});Object.defineProperty(exports,"Name",{enumerable:true,get:function(){return code_2.Name}});var scope_2=require_scope();Object.defineProperty(exports,"Scope",{enumerable:true,get:function(){return scope_2.Scope}});Object.defineProperty(exports,"ValueScope",{enumerable:true,get:function(){return scope_2.ValueScope}});Object.defineProperty(exports,"ValueScopeName",{enumerable:true,get:function(){return scope_2.ValueScopeName}});Object.defineProperty(exports,"varKinds",{enumerable:true,get:function(){return scope_2.varKinds}});exports.operators={GT:new code_1._Code(`>`),GTE:new code_1._Code(`>=`),LT:new code_1._Code(`<`),LTE:new code_1._Code(`<=`),EQ:new code_1._Code(`===`),NEQ:new code_1._Code(`!==`),NOT:new code_1._Code(`!`),OR:new code_1._Code(`||`),AND:new code_1._Code(`&&`),ADD:new code_1._Code(`+`)};var Node=class{optimizeNodes(){return this}optimizeNames(_names,_constants){return this}};var Def=class extends Node{constructor(varKind,name,rhs){super();this.varKind=varKind;this.name=name;this.rhs=rhs}render({es5,_n}){const varKind=es5?scope_1.varKinds.var:this.varKind;const rhs=this.rhs===void 0?``:` = ${this.rhs}`;return`${varKind} ${this.name}${rhs};`+_n}optimizeNames(names,constants){if(!names[this.name.str])return;if(this.rhs)this.rhs=optimizeExpr(this.rhs,names,constants);return this}get names(){return this.rhs instanceof code_1._CodeOrName?this.rhs.names:{}}};var Assign=class extends Node{constructor(lhs,rhs,sideEffects){super();this.lhs=lhs;this.rhs=rhs;this.sideEffects=sideEffects}render({_n}){return`${this.lhs} = ${this.rhs};`+_n}optimizeNames(names,constants){if(this.lhs instanceof code_1.Name&&!names[this.lhs.str]&&!this.sideEffects)return;this.rhs=optimizeExpr(this.rhs,names,constants);return this}get names(){return addExprNames(this.lhs instanceof code_1.Name?{}:{...this.lhs.names},this.rhs)}};var AssignOp=class extends Assign{constructor(lhs,op,rhs,sideEffects){super(lhs,rhs,sideEffects);this.op=op}render({_n}){return`${this.lhs} ${this.op}= ${this.rhs};`+_n}};var Label=class extends Node{constructor(label){super();this.label=label;this.names={}}render({_n}){return`${this.label}:`+_n}};var Break=class extends Node{constructor(label){super();this.label=label;this.names={}}render({_n}){return`break${this.label?` ${this.label}`:``};`+_n}};var Throw=class extends Node{constructor(error){super();this.error=error}render({_n}){return`throw ${this.error};`+_n}get names(){return this.error.names}};var AnyCode=class extends Node{constructor(code){super();this.code=code}render({_n}){return`${this.code};`+_n}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(names,constants){this.code=optimizeExpr(this.code,names,constants);return this}get names(){return this.code instanceof code_1._CodeOrName?this.code.names:{}}};var ParentNode=class extends Node{constructor(nodes=[]){super();this.nodes=nodes}render(opts){return this.nodes.reduce((code,n)=>code+n.render(opts),``)}optimizeNodes(){const{nodes}=this;let i=nodes.length;while(i--){const n=nodes[i].optimizeNodes();if(Array.isArray(n))nodes.splice(i,1,...n);else if(n)nodes[i]=n;else nodes.splice(i,1)}return nodes.length>0?this:void 0}optimizeNames(names,constants){const{nodes}=this;let i=nodes.length;while(i--){const n=nodes[i];if(n.optimizeNames(names,constants))continue;subtractNames(names,n.names);nodes.splice(i,1)}return nodes.length>0?this:void 0}get names(){return this.nodes.reduce((names,n)=>addNames(names,n.names),{})}};var BlockNode=class extends ParentNode{render(opts){return`{`+opts._n+super.render(opts)+`}`+opts._n}};var Root=class extends ParentNode{};var Else=class extends BlockNode{};Else.kind=`else`;var If=class If extends BlockNode{constructor(condition,nodes){super(nodes);this.condition=condition}render(opts){let code=`if(${this.condition})`+super.render(opts);if(this.else)code+=`else `+this.else.render(opts);return code}optimizeNodes(){super.optimizeNodes();const cond=this.condition;if(cond===true)return this.nodes;let e=this.else;if(e){const ns=e.optimizeNodes();e=this.else=Array.isArray(ns)?new Else(ns):ns}if(e){if(cond===false)return e instanceof If?e:e.nodes;if(this.nodes.length)return this;return new If(not(cond),e instanceof If?[e]:e.nodes)}if(cond===false||!this.nodes.length)return void 0;return this}optimizeNames(names,constants){var _a;this.else=(_a=this.else)===null||_a===void 0?void 0:_a.optimizeNames(names,constants);if(!(super.optimizeNames(names,constants)||this.else))return;this.condition=optimizeExpr(this.condition,names,constants);return this}get names(){const names=super.names;addExprNames(names,this.condition);if(this.else)addNames(names,this.else.names);return names}};If.kind=`if`;var For=class extends BlockNode{};For.kind=`for`;var ForLoop=class extends For{constructor(iteration){super();this.iteration=iteration}render(opts){return`for(${this.iteration})`+super.render(opts)}optimizeNames(names,constants){if(!super.optimizeNames(names,constants))return;this.iteration=optimizeExpr(this.iteration,names,constants);return this}get names(){return addNames(super.names,this.iteration.names)}};var ForRange=class extends For{constructor(varKind,name,from,to){super();this.varKind=varKind;this.name=name;this.from=from;this.to=to}render(opts){const varKind=opts.es5?scope_1.varKinds.var:this.varKind;const{name,from,to}=this;return`for(${varKind} ${name}=${from}; ${name}<${to}; ${name}++)`+super.render(opts)}get names(){return addExprNames(addExprNames(super.names,this.from),this.to)}};var ForIter=class extends For{constructor(loop,varKind,name,iterable){super();this.loop=loop;this.varKind=varKind;this.name=name;this.iterable=iterable}render(opts){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(opts)}optimizeNames(names,constants){if(!super.optimizeNames(names,constants))return;this.iterable=optimizeExpr(this.iterable,names,constants);return this}get names(){return addNames(super.names,this.iterable.names)}};var Func=class extends BlockNode{constructor(name,args,async){super();this.name=name;this.args=args;this.async=async}render(opts){return`${this.async?`async `:``}function ${this.name}(${this.args})`+super.render(opts)}};Func.kind=`func`;var Return=class extends ParentNode{render(opts){return`return `+super.render(opts)}};Return.kind=`return`;var Try=class extends BlockNode{render(opts){let code=`try`+super.render(opts);if(this.catch)code+=this.catch.render(opts);if(this.finally)code+=this.finally.render(opts);return code}optimizeNodes(){var _a,_b;super.optimizeNodes();(_a=this.catch)===null||_a===void 0||_a.optimizeNodes();(_b=this.finally)===null||_b===void 0||_b.optimizeNodes();return this}optimizeNames(names,constants){var _a,_b;super.optimizeNames(names,constants);(_a=this.catch)===null||_a===void 0||_a.optimizeNames(names,constants);(_b=this.finally)===null||_b===void 0||_b.optimizeNames(names,constants);return this}get names(){const names=super.names;if(this.catch)addNames(names,this.catch.names);if(this.finally)addNames(names,this.finally.names);return names}};var Catch=class extends BlockNode{constructor(error){super();this.error=error}render(opts){return`catch(${this.error})`+super.render(opts)}};Catch.kind=`catch`;var Finally=class extends BlockNode{render(opts){return`finally`+super.render(opts)}};Finally.kind=`finally`;var CodeGen=class{constructor(extScope,opts={}){this._values={};this._blockStarts=[];this._constants={};this.opts={...opts,_n:opts.lines?`
|
|
1
|
+
import{a as __toESM,i as __toCommonJS,n as __esmMin,r as __exportAll,t as __commonJSMin}from"./rolldown-runtime-DBalRfVu.js";import{D as createVNode,E as createTextVNode,Ht as watch,J as inject,On as unref,Ut as watchEffect,_ as createBaseVNode,b as createElementBlock,bt as renderList,ct as onMounted,ft as onUnmounted,g as computed,mt as openBlock,o as Fragment,pn as onScopeDispose,qt as withCtx,tr as toDisplayString,un as isRef,v as createBlock,vn as ref,wt as resolveDynamicComponent,y as createCommentVNode}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{d as VProgressLinear,h as VIcon}from"./ripple-EFNA8EBu.js";import{t as useEndpointResource}from"./useEndpointResource-Ds8EDBZ2.js";import{_ as useRouter,g as useRoute}from"./useApi-BPuI6ZR9-CFWU1m37.js";import{E as createSchema,r as projectAppPath,w as validateSchemaPayload}from"./vibe64ProjectScope.local-B06ABkhI.js";import{t as VSelect}from"./VSelect-D3oLvCcB.js";import{c as VListItemTitle,l as VListItemSubtitle,n as VList,s as VListItem}from"./VMenu-CDcBLYWR.js";import{t as VChip}from"./VChip-VVdtjfq-.js";import{t as VTextField}from"./VTextField-C0b_0cSa.js";import{a as VIBE64_COLLEAGUE_INTEGRATIONS_KEY}from"./vibe64AssistantHost-CP6oxv5b.js";import{pt as mdiCreation,st as mdiConnection}from"./mdi-Bt90Ns76.js";import{i as VBtnToggle,t as VBtn}from"./VBtn-BhVEwXLX.js";import{t as VAlert}from"./VAlert-gwuhYlYb.js";import{t as VCheckbox}from"./VCheckbox-DyCGSN0H.js";import{t as VSheet}from"./VSheet-DxYEFfnM.js";import{t as VDialog}from"./VDialog-CQDhjRiV.js";import{n as VCardText,o as VCardActions,t as VCard}from"./VCard-C3Hx769y.js";import{n as VCol,t as VRow}from"./VRow-BskP28jR.js";import{i as VExpansionPanelText,n as VExpansionPanel,r as VExpansionPanelTitle,t as VExpansionPanels}from"./VExpansionPanels-C1y-myl5.js";import{t as VSkeletonLoader}from"./VSkeletonLoader-Cync3lZZ.js";import{t as VTextarea}from"./VTextarea-B7sZd1JY.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{n as useRealtimeEvent}from"./useRealtimeEvent-DrOiU8lJ.js";import{t as useCommand}from"./useCommand-nWFczmJy.js";import{r as writeLocalStorageJson,t as readLocalStorageJson}from"./browserLocalStorage-B4C7rHrs.js";import{t as useVibe64ProjectSlug}from"./useVibe64ProjectScope-B5ogg6jd.js";import{t as vibe64BrowserTabOriginId}from"./vibe64BrowserTabOrigin-SF9E31vi.js";import{$t as VCombobox,b as readRefOrGetterValue,c as IntegrationConfigurationFields_default,et as vibe64SessionPath,f as validateIntegrationConfiguration,k as VIBE64_SOURCE_EDITOR_FILE_CHANGED_EVENT,l as getProviderClientAuthenticationMethods,u as getProviderScopes}from"./index-Mxalhei8.js";import{t as Vibe64AsyncModuleState_default}from"./Vibe64AsyncModuleState-syuPcpGx.js";import{t as connectorDefinitions}from"./definitions-SNvFDEFS.js";import{r as useVibe64SavedEnvValues}from"./vibe64SavedEnvValues-B_QE9aAj.js";var GOOGLE_SCOPE_BASE=`https://www.googleapis.com/auth/`;var googleCalendarDefinition=Object.freeze({id:`google-calendar`,name:`Google Calendar`,description:`Read calendars and create, edit or cancel events.`,categories:[`Google`,`Productivity`],accountModes:[`shared`,`per-user`,`assistant`],authenticationMethods:[`oauth2`],setup:{callbackPath:`/integrations/google/callback`,url:`https://developers.google.com/identity/protocols/oauth2/web-server`,steps:[`In Google Cloud, select the project for this application. Open APIs & Services > Library, search for Google Calendar API, open it and choose Enable.`,`Open Google Auth Platform > Branding. If setup has not started, choose Get Started; enter the app name, support email and contact email, choose the audience, review the policy and finish with Create.`,`Choose External if people outside your Google Workspace organization will connect. During testing, open Audience > Test users > Add users, enter the allowed Google accounts and Save. Internal is only for your organization. External Testing refresh tokens for these API permissions expire after seven days; reconnect during testing. Public release also requires completing the applicable Google review.`,`For an external app, open Data Access > Add or Remove Scopes. Add the permissions selected in this integration and Save. Sensitive or restricted scopes can require Google verification before public use; creating a client does not complete that review.`,`Keep List calendars for the initial connection check and Read events if the application will read events. Event-only or availability-only permissions do not authorize the calendar-list check. Use an account that can access the intended calendars; selecting a scope does not grant calendar sharing access.`,`To create, edit or cancel events, select Manage events, add calendar.events in Google Data Access, and reconnect for fresh consent. Keep List calendars for verification. Calendar sharing must independently allow the connected account to write.`,`Choose the destination calendar and attendee notification policy explicitly. All-day end dates are exclusive; timed recurring events need an IANA time zone. Editing or cancelling a recurring master affects the series; use an expanded occurrence ID for one instance. Changing attendee arrays replaces the list; read the latest event first.`,`Open Clients > Create Client. Choose Web application and name it. Under Authorized redirect URIs, choose Add URI and paste the application callback shown here, then Create. The editor dashboard URL is not the callback.`,`Copy the Client ID into this form and copy or download the full client secret immediately; Google only shows it at creation. Save configuration, then use Set credential in Env to put the secret value in the variable named by Client secret reference. If lost, open Clients, select this client and Add Secret; save the new value before disabling the old secret.`,`Use Set callback in Env to save the same application callback URL. If a Configured callback URL is shown, preserve it unless intentionally changing both Env and Google. Scheme, path, case and trailing slash must match exactly.`,`For a shared account, return here and check or connect the account once the application runtime is ready. For per-user connections, each person authorizes inside your application. Saving this registration neither connects every user nor installs the callback route.`]},scopes:[{value:`${GOOGLE_SCOPE_BASE}calendar.calendarlist.readonly`,label:`List calendars`,recommended:true},{value:`${GOOGLE_SCOPE_BASE}calendar.events.readonly`,label:`Read events`,recommended:true},{value:`${GOOGLE_SCOPE_BASE}calendar.readonly`,label:`Read all calendar data`},{value:`${GOOGLE_SCOPE_BASE}calendar`,label:`Manage calendars and events`},{value:`${GOOGLE_SCOPE_BASE}calendar.calendarlist`,label:`Manage calendar subscriptions`},{value:`${GOOGLE_SCOPE_BASE}calendar.events`,label:`Manage events`},{value:`${GOOGLE_SCOPE_BASE}calendar.freebusy`,label:`Read your availability`},{value:`${GOOGLE_SCOPE_BASE}calendar.settings.readonly`,label:`Read calendar settings`},{value:`${GOOGLE_SCOPE_BASE}calendar.events.owned`,label:`Manage events in calendars you own`},{value:`${GOOGLE_SCOPE_BASE}calendar.events.owned.readonly`,label:`Read events in calendars you own`},{value:`${GOOGLE_SCOPE_BASE}calendar.events.freebusy`,label:`Read availability in accessible calendars`},{value:`${GOOGLE_SCOPE_BASE}calendar.app.created`,label:`Create and manage app-created calendars`},{value:`${GOOGLE_SCOPE_BASE}calendar.calendars`,label:`Manage calendar properties`},{value:`${GOOGLE_SCOPE_BASE}calendar.calendars.readonly`,label:`Read calendar properties`},{value:`${GOOGLE_SCOPE_BASE}calendar.acls`,label:`Manage calendar sharing permissions`},{value:`${GOOGLE_SCOPE_BASE}calendar.acls.readonly`,label:`Read calendar sharing permissions`},{value:`${GOOGLE_SCOPE_BASE}calendar.events.public.readonly`,label:`Read public calendar events`},{value:`${GOOGLE_SCOPE_BASE}calendar.addons.execute`,label:`Run a Calendar add-on`},{value:`${GOOGLE_SCOPE_BASE}calendar.addons.current.event.read`,label:`Read the event open in a Calendar add-on`},{value:`${GOOGLE_SCOPE_BASE}calendar.addons.current.event.write`,label:`Edit the event open in a Calendar add-on`}],settingsFields:[],documentationUrl:`https://developers.google.com/workspace/calendar/api/guides/overview`});var require_code$1=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.regexpCode=exports.getEsmExportName=exports.getProperty=exports.safeStringify=exports.stringify=exports.strConcat=exports.addCodeArg=exports.str=exports._=exports.nil=exports._Code=exports.Name=exports.IDENTIFIER=exports._CodeOrName=void 0;var _CodeOrName=class{};exports._CodeOrName=_CodeOrName;exports.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;var Name=class extends _CodeOrName{constructor(s){super();if(!exports.IDENTIFIER.test(s))throw new Error(`CodeGen: name must be a valid identifier`);this.str=s}toString(){return this.str}emptyStr(){return false}get names(){return{[this.str]:1}}};exports.Name=Name;var _Code=class extends _CodeOrName{constructor(code){super();this._items=typeof code===`string`?[code]:code}toString(){return this.str}emptyStr(){if(this._items.length>1)return false;const item=this._items[0];return item===``||item===`""`}get str(){var _a;return(_a=this._str)!==null&&_a!==void 0?_a:this._str=this._items.reduce((s,c)=>`${s}${c}`,``)}get names(){var _a;return(_a=this._names)!==null&&_a!==void 0?_a:this._names=this._items.reduce((names,c)=>{if(c instanceof Name)names[c.str]=(names[c.str]||0)+1;return names},{})}};exports._Code=_Code;exports.nil=new _Code(``);function _(strs,...args){const code=[strs[0]];let i=0;while(i<args.length){addCodeArg(code,args[i]);code.push(strs[++i])}return new _Code(code)}exports._=_;var plus=new _Code(`+`);function str(strs,...args){const expr=[safeStringify(strs[0])];let i=0;while(i<args.length){expr.push(plus);addCodeArg(expr,args[i]);expr.push(plus,safeStringify(strs[++i]))}optimize(expr);return new _Code(expr)}exports.str=str;function addCodeArg(code,arg){if(arg instanceof _Code)code.push(...arg._items);else if(arg instanceof Name)code.push(arg);else code.push(interpolate(arg))}exports.addCodeArg=addCodeArg;function optimize(expr){let i=1;while(i<expr.length-1){if(expr[i]===plus){const res=mergeExprItems(expr[i-1],expr[i+1]);if(res!==void 0){expr.splice(i-1,3,res);continue}expr[i++]=`+`}i++}}function mergeExprItems(a,b){if(b===`""`)return a;if(a===`""`)return b;if(typeof a==`string`){if(b instanceof Name||a[a.length-1]!==`"`)return;if(typeof b!=`string`)return`${a.slice(0,-1)}${b}"`;if(b[0]===`"`)return a.slice(0,-1)+b.slice(1);return}if(typeof b==`string`&&b[0]===`"`&&!(a instanceof Name))return`"${a}${b.slice(1)}`}function strConcat(c1,c2){return c2.emptyStr()?c1:c1.emptyStr()?c2:str`${c1}${c2}`}exports.strConcat=strConcat;function interpolate(x){return typeof x==`number`||typeof x==`boolean`||x===null?x:safeStringify(Array.isArray(x)?x.join(`,`):x)}function stringify(x){return new _Code(safeStringify(x))}exports.stringify=stringify;function safeStringify(x){return JSON.stringify(x).replace(/\u2028/g,`\\u2028`).replace(/\u2029/g,`\\u2029`)}exports.safeStringify=safeStringify;function getProperty(key){return typeof key==`string`&&exports.IDENTIFIER.test(key)?new _Code(`.${key}`):_`[${key}]`}exports.getProperty=getProperty;function getEsmExportName(key){if(typeof key==`string`&&exports.IDENTIFIER.test(key))return new _Code(`${key}`);throw new Error(`CodeGen: invalid export name: ${key}, use explicit $id name mapping`)}exports.getEsmExportName=getEsmExportName;function regexpCode(rx){return new _Code(rx.toString())}exports.regexpCode=regexpCode}));var require_scope=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.ValueScope=exports.ValueScopeName=exports.Scope=exports.varKinds=exports.UsedValueState=void 0;var code_1=require_code$1();var ValueError=class extends Error{constructor(name){super(`CodeGen: "code" for ${name} not defined`);this.value=name.value}};var UsedValueState;(function(UsedValueState){UsedValueState[UsedValueState[`Started`]=0]=`Started`;UsedValueState[UsedValueState[`Completed`]=1]=`Completed`})(UsedValueState||(exports.UsedValueState=UsedValueState={}));exports.varKinds={const:new code_1.Name(`const`),let:new code_1.Name(`let`),var:new code_1.Name(`var`)};var Scope=class{constructor({prefixes,parent}={}){this._names={};this._prefixes=prefixes;this._parent=parent}toName(nameOrPrefix){return nameOrPrefix instanceof code_1.Name?nameOrPrefix:this.name(nameOrPrefix)}name(prefix){return new code_1.Name(this._newName(prefix))}_newName(prefix){const ng=this._names[prefix]||this._nameGroup(prefix);return`${prefix}${ng.index++}`}_nameGroup(prefix){var _a,_b;if(((_b=(_a=this._parent)===null||_a===void 0?void 0:_a._prefixes)===null||_b===void 0?void 0:_b.has(prefix))||this._prefixes&&!this._prefixes.has(prefix))throw new Error(`CodeGen: prefix "${prefix}" is not allowed in this scope`);return this._names[prefix]={prefix,index:0}}};exports.Scope=Scope;var ValueScopeName=class extends code_1.Name{constructor(prefix,nameStr){super(nameStr);this.prefix=prefix}setValue(value,{property,itemIndex}){this.value=value;this.scopePath=(0,code_1._)`.${new code_1.Name(property)}[${itemIndex}]`}};exports.ValueScopeName=ValueScopeName;var line=(0,code_1._)`\n`;var ValueScope=class extends Scope{constructor(opts){super(opts);this._values={};this._scope=opts.scope;this.opts={...opts,_n:opts.lines?line:code_1.nil}}get(){return this._scope}name(prefix){return new ValueScopeName(prefix,this._newName(prefix))}value(nameOrPrefix,value){var _a;if(value.ref===void 0)throw new Error(`CodeGen: ref must be passed in value`);const name=this.toName(nameOrPrefix);const{prefix}=name;const valueKey=(_a=value.key)!==null&&_a!==void 0?_a:value.ref;let vs=this._values[prefix];if(vs){const _name=vs.get(valueKey);if(_name)return _name}else vs=this._values[prefix]=new Map;vs.set(valueKey,name);const s=this._scope[prefix]||(this._scope[prefix]=[]);const itemIndex=s.length;s[itemIndex]=value.ref;name.setValue(value,{property:prefix,itemIndex});return name}getValue(prefix,keyOrRef){const vs=this._values[prefix];if(!vs)return;return vs.get(keyOrRef)}scopeRefs(scopeName,values=this._values){return this._reduceValues(values,name=>{if(name.scopePath===void 0)throw new Error(`CodeGen: name "${name}" has no value`);return(0,code_1._)`${scopeName}${name.scopePath}`})}scopeCode(values=this._values,usedValues,getCode){return this._reduceValues(values,name=>{if(name.value===void 0)throw new Error(`CodeGen: name "${name}" has no value`);return name.value.code},usedValues,getCode)}_reduceValues(values,valueCode,usedValues={},getCode){let code=code_1.nil;for(const prefix in values){const vs=values[prefix];if(!vs)continue;const nameSet=usedValues[prefix]=usedValues[prefix]||new Map;vs.forEach(name=>{if(nameSet.has(name))return;nameSet.set(name,UsedValueState.Started);let c=valueCode(name);if(c){const def=this.opts.es5?exports.varKinds.var:exports.varKinds.const;code=(0,code_1._)`${code}${def} ${name} = ${c};${this.opts._n}`}else if(c=getCode===null||getCode===void 0?void 0:getCode(name))code=(0,code_1._)`${code}${c}${this.opts._n}`;else throw new ValueError(name);nameSet.set(name,UsedValueState.Completed)})}return code}};exports.ValueScope=ValueScope}));var require_codegen=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.or=exports.and=exports.not=exports.CodeGen=exports.operators=exports.varKinds=exports.ValueScopeName=exports.ValueScope=exports.Scope=exports.Name=exports.regexpCode=exports.stringify=exports.getProperty=exports.nil=exports.strConcat=exports.str=exports._=void 0;var code_1=require_code$1();var scope_1=require_scope();var code_2=require_code$1();Object.defineProperty(exports,"_",{enumerable:true,get:function(){return code_2._}});Object.defineProperty(exports,"str",{enumerable:true,get:function(){return code_2.str}});Object.defineProperty(exports,"strConcat",{enumerable:true,get:function(){return code_2.strConcat}});Object.defineProperty(exports,"nil",{enumerable:true,get:function(){return code_2.nil}});Object.defineProperty(exports,"getProperty",{enumerable:true,get:function(){return code_2.getProperty}});Object.defineProperty(exports,"stringify",{enumerable:true,get:function(){return code_2.stringify}});Object.defineProperty(exports,"regexpCode",{enumerable:true,get:function(){return code_2.regexpCode}});Object.defineProperty(exports,"Name",{enumerable:true,get:function(){return code_2.Name}});var scope_2=require_scope();Object.defineProperty(exports,"Scope",{enumerable:true,get:function(){return scope_2.Scope}});Object.defineProperty(exports,"ValueScope",{enumerable:true,get:function(){return scope_2.ValueScope}});Object.defineProperty(exports,"ValueScopeName",{enumerable:true,get:function(){return scope_2.ValueScopeName}});Object.defineProperty(exports,"varKinds",{enumerable:true,get:function(){return scope_2.varKinds}});exports.operators={GT:new code_1._Code(`>`),GTE:new code_1._Code(`>=`),LT:new code_1._Code(`<`),LTE:new code_1._Code(`<=`),EQ:new code_1._Code(`===`),NEQ:new code_1._Code(`!==`),NOT:new code_1._Code(`!`),OR:new code_1._Code(`||`),AND:new code_1._Code(`&&`),ADD:new code_1._Code(`+`)};var Node=class{optimizeNodes(){return this}optimizeNames(_names,_constants){return this}};var Def=class extends Node{constructor(varKind,name,rhs){super();this.varKind=varKind;this.name=name;this.rhs=rhs}render({es5,_n}){const varKind=es5?scope_1.varKinds.var:this.varKind;const rhs=this.rhs===void 0?``:` = ${this.rhs}`;return`${varKind} ${this.name}${rhs};`+_n}optimizeNames(names,constants){if(!names[this.name.str])return;if(this.rhs)this.rhs=optimizeExpr(this.rhs,names,constants);return this}get names(){return this.rhs instanceof code_1._CodeOrName?this.rhs.names:{}}};var Assign=class extends Node{constructor(lhs,rhs,sideEffects){super();this.lhs=lhs;this.rhs=rhs;this.sideEffects=sideEffects}render({_n}){return`${this.lhs} = ${this.rhs};`+_n}optimizeNames(names,constants){if(this.lhs instanceof code_1.Name&&!names[this.lhs.str]&&!this.sideEffects)return;this.rhs=optimizeExpr(this.rhs,names,constants);return this}get names(){return addExprNames(this.lhs instanceof code_1.Name?{}:{...this.lhs.names},this.rhs)}};var AssignOp=class extends Assign{constructor(lhs,op,rhs,sideEffects){super(lhs,rhs,sideEffects);this.op=op}render({_n}){return`${this.lhs} ${this.op}= ${this.rhs};`+_n}};var Label=class extends Node{constructor(label){super();this.label=label;this.names={}}render({_n}){return`${this.label}:`+_n}};var Break=class extends Node{constructor(label){super();this.label=label;this.names={}}render({_n}){return`break${this.label?` ${this.label}`:``};`+_n}};var Throw=class extends Node{constructor(error){super();this.error=error}render({_n}){return`throw ${this.error};`+_n}get names(){return this.error.names}};var AnyCode=class extends Node{constructor(code){super();this.code=code}render({_n}){return`${this.code};`+_n}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(names,constants){this.code=optimizeExpr(this.code,names,constants);return this}get names(){return this.code instanceof code_1._CodeOrName?this.code.names:{}}};var ParentNode=class extends Node{constructor(nodes=[]){super();this.nodes=nodes}render(opts){return this.nodes.reduce((code,n)=>code+n.render(opts),``)}optimizeNodes(){const{nodes}=this;let i=nodes.length;while(i--){const n=nodes[i].optimizeNodes();if(Array.isArray(n))nodes.splice(i,1,...n);else if(n)nodes[i]=n;else nodes.splice(i,1)}return nodes.length>0?this:void 0}optimizeNames(names,constants){const{nodes}=this;let i=nodes.length;while(i--){const n=nodes[i];if(n.optimizeNames(names,constants))continue;subtractNames(names,n.names);nodes.splice(i,1)}return nodes.length>0?this:void 0}get names(){return this.nodes.reduce((names,n)=>addNames(names,n.names),{})}};var BlockNode=class extends ParentNode{render(opts){return`{`+opts._n+super.render(opts)+`}`+opts._n}};var Root=class extends ParentNode{};var Else=class extends BlockNode{};Else.kind=`else`;var If=class If extends BlockNode{constructor(condition,nodes){super(nodes);this.condition=condition}render(opts){let code=`if(${this.condition})`+super.render(opts);if(this.else)code+=`else `+this.else.render(opts);return code}optimizeNodes(){super.optimizeNodes();const cond=this.condition;if(cond===true)return this.nodes;let e=this.else;if(e){const ns=e.optimizeNodes();e=this.else=Array.isArray(ns)?new Else(ns):ns}if(e){if(cond===false)return e instanceof If?e:e.nodes;if(this.nodes.length)return this;return new If(not(cond),e instanceof If?[e]:e.nodes)}if(cond===false||!this.nodes.length)return void 0;return this}optimizeNames(names,constants){var _a;this.else=(_a=this.else)===null||_a===void 0?void 0:_a.optimizeNames(names,constants);if(!(super.optimizeNames(names,constants)||this.else))return;this.condition=optimizeExpr(this.condition,names,constants);return this}get names(){const names=super.names;addExprNames(names,this.condition);if(this.else)addNames(names,this.else.names);return names}};If.kind=`if`;var For=class extends BlockNode{};For.kind=`for`;var ForLoop=class extends For{constructor(iteration){super();this.iteration=iteration}render(opts){return`for(${this.iteration})`+super.render(opts)}optimizeNames(names,constants){if(!super.optimizeNames(names,constants))return;this.iteration=optimizeExpr(this.iteration,names,constants);return this}get names(){return addNames(super.names,this.iteration.names)}};var ForRange=class extends For{constructor(varKind,name,from,to){super();this.varKind=varKind;this.name=name;this.from=from;this.to=to}render(opts){const varKind=opts.es5?scope_1.varKinds.var:this.varKind;const{name,from,to}=this;return`for(${varKind} ${name}=${from}; ${name}<${to}; ${name}++)`+super.render(opts)}get names(){return addExprNames(addExprNames(super.names,this.from),this.to)}};var ForIter=class extends For{constructor(loop,varKind,name,iterable){super();this.loop=loop;this.varKind=varKind;this.name=name;this.iterable=iterable}render(opts){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(opts)}optimizeNames(names,constants){if(!super.optimizeNames(names,constants))return;this.iterable=optimizeExpr(this.iterable,names,constants);return this}get names(){return addNames(super.names,this.iterable.names)}};var Func=class extends BlockNode{constructor(name,args,async){super();this.name=name;this.args=args;this.async=async}render(opts){return`${this.async?`async `:``}function ${this.name}(${this.args})`+super.render(opts)}};Func.kind=`func`;var Return=class extends ParentNode{render(opts){return`return `+super.render(opts)}};Return.kind=`return`;var Try=class extends BlockNode{render(opts){let code=`try`+super.render(opts);if(this.catch)code+=this.catch.render(opts);if(this.finally)code+=this.finally.render(opts);return code}optimizeNodes(){var _a,_b;super.optimizeNodes();(_a=this.catch)===null||_a===void 0||_a.optimizeNodes();(_b=this.finally)===null||_b===void 0||_b.optimizeNodes();return this}optimizeNames(names,constants){var _a,_b;super.optimizeNames(names,constants);(_a=this.catch)===null||_a===void 0||_a.optimizeNames(names,constants);(_b=this.finally)===null||_b===void 0||_b.optimizeNames(names,constants);return this}get names(){const names=super.names;if(this.catch)addNames(names,this.catch.names);if(this.finally)addNames(names,this.finally.names);return names}};var Catch=class extends BlockNode{constructor(error){super();this.error=error}render(opts){return`catch(${this.error})`+super.render(opts)}};Catch.kind=`catch`;var Finally=class extends BlockNode{render(opts){return`finally`+super.render(opts)}};Finally.kind=`finally`;var CodeGen=class{constructor(extScope,opts={}){this._values={};this._blockStarts=[];this._constants={};this.opts={...opts,_n:opts.lines?`
|
|
2
2
|
`:``};this._extScope=extScope;this._scope=new scope_1.Scope({parent:extScope});this._nodes=[new Root]}toString(){return this._root.render(this.opts)}name(prefix){return this._scope.name(prefix)}scopeName(prefix){return this._extScope.name(prefix)}scopeValue(prefixOrName,value){const name=this._extScope.value(prefixOrName,value);(this._values[name.prefix]||(this._values[name.prefix]=new Set)).add(name);return name}getScopeValue(prefix,keyOrRef){return this._extScope.getValue(prefix,keyOrRef)}scopeRefs(scopeName){return this._extScope.scopeRefs(scopeName,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(varKind,nameOrPrefix,rhs,constant){const name=this._scope.toName(nameOrPrefix);if(rhs!==void 0&&constant)this._constants[name.str]=rhs;this._leafNode(new Def(varKind,name,rhs));return name}const(nameOrPrefix,rhs,_constant){return this._def(scope_1.varKinds.const,nameOrPrefix,rhs,_constant)}let(nameOrPrefix,rhs,_constant){return this._def(scope_1.varKinds.let,nameOrPrefix,rhs,_constant)}var(nameOrPrefix,rhs,_constant){return this._def(scope_1.varKinds.var,nameOrPrefix,rhs,_constant)}assign(lhs,rhs,sideEffects){return this._leafNode(new Assign(lhs,rhs,sideEffects))}add(lhs,rhs){return this._leafNode(new AssignOp(lhs,exports.operators.ADD,rhs))}code(c){if(typeof c==`function`)c();else if(c!==code_1.nil)this._leafNode(new AnyCode(c));return this}object(...keyValues){const code=[`{`];for(const[key,value]of keyValues){if(code.length>1)code.push(`,`);code.push(key);if(key!==value||this.opts.es5){code.push(`:`);(0,code_1.addCodeArg)(code,value)}}code.push(`}`);return new code_1._Code(code)}if(condition,thenBody,elseBody){this._blockNode(new If(condition));if(thenBody&&elseBody)this.code(thenBody).else().code(elseBody).endIf();else if(thenBody)this.code(thenBody).endIf();else if(elseBody)throw new Error(`CodeGen: "else" body without "then" body`);return this}elseIf(condition){return this._elseNode(new If(condition))}else(){return this._elseNode(new Else)}endIf(){return this._endBlockNode(If,Else)}_for(node,forBody){this._blockNode(node);if(forBody)this.code(forBody).endFor();return this}for(iteration,forBody){return this._for(new ForLoop(iteration),forBody)}forRange(nameOrPrefix,from,to,forBody,varKind=this.opts.es5?scope_1.varKinds.var:scope_1.varKinds.let){const name=this._scope.toName(nameOrPrefix);return this._for(new ForRange(varKind,name,from,to),()=>forBody(name))}forOf(nameOrPrefix,iterable,forBody,varKind=scope_1.varKinds.const){const name=this._scope.toName(nameOrPrefix);if(this.opts.es5){const arr=iterable instanceof code_1.Name?iterable:this.var(`_arr`,iterable);return this.forRange(`_i`,0,(0,code_1._)`${arr}.length`,i=>{this.var(name,(0,code_1._)`${arr}[${i}]`);forBody(name)})}return this._for(new ForIter(`of`,varKind,name,iterable),()=>forBody(name))}forIn(nameOrPrefix,obj,forBody,varKind=this.opts.es5?scope_1.varKinds.var:scope_1.varKinds.const){if(this.opts.ownProperties)return this.forOf(nameOrPrefix,(0,code_1._)`Object.keys(${obj})`,forBody);const name=this._scope.toName(nameOrPrefix);return this._for(new ForIter(`in`,varKind,name,obj),()=>forBody(name))}endFor(){return this._endBlockNode(For)}label(label){return this._leafNode(new Label(label))}break(label){return this._leafNode(new Break(label))}return(value){const node=new Return;this._blockNode(node);this.code(value);if(node.nodes.length!==1)throw new Error(`CodeGen: "return" should have one node`);return this._endBlockNode(Return)}try(tryBody,catchCode,finallyCode){if(!catchCode&&!finallyCode)throw new Error(`CodeGen: "try" without "catch" and "finally"`);const node=new Try;this._blockNode(node);this.code(tryBody);if(catchCode){const error=this.name(`e`);this._currNode=node.catch=new Catch(error);catchCode(error)}if(finallyCode){this._currNode=node.finally=new Finally;this.code(finallyCode)}return this._endBlockNode(Catch,Finally)}throw(error){return this._leafNode(new Throw(error))}block(body,nodeCount){this._blockStarts.push(this._nodes.length);if(body)this.code(body).endBlock(nodeCount);return this}endBlock(nodeCount){const len=this._blockStarts.pop();if(len===void 0)throw new Error(`CodeGen: not in self-balancing block`);const toClose=this._nodes.length-len;if(toClose<0||nodeCount!==void 0&&toClose!==nodeCount)throw new Error(`CodeGen: wrong number of nodes: ${toClose} vs ${nodeCount} expected`);this._nodes.length=len;return this}func(name,args=code_1.nil,async,funcBody){this._blockNode(new Func(name,args,async));if(funcBody)this.code(funcBody).endFunc();return this}endFunc(){return this._endBlockNode(Func)}optimize(n=1){while(n-->0){this._root.optimizeNodes();this._root.optimizeNames(this._root.names,this._constants)}}_leafNode(node){this._currNode.nodes.push(node);return this}_blockNode(node){this._currNode.nodes.push(node);this._nodes.push(node)}_endBlockNode(N1,N2){const n=this._currNode;if(n instanceof N1||N2&&n instanceof N2){this._nodes.pop();return this}throw new Error(`CodeGen: not in block "${N2?`${N1.kind}/${N2.kind}`:N1.kind}"`)}_elseNode(node){const n=this._currNode;if(!(n instanceof If))throw new Error(`CodeGen: "else" without "if"`);this._currNode=n.else=node;return this}get _root(){return this._nodes[0]}get _currNode(){const ns=this._nodes;return ns[ns.length-1]}set _currNode(node){const ns=this._nodes;ns[ns.length-1]=node}};exports.CodeGen=CodeGen;function addNames(names,from){for(const n in from)names[n]=(names[n]||0)+(from[n]||0);return names}function addExprNames(names,from){return from instanceof code_1._CodeOrName?addNames(names,from.names):names}function optimizeExpr(expr,names,constants){if(expr instanceof code_1.Name)return replaceName(expr);if(!canOptimize(expr))return expr;return new code_1._Code(expr._items.reduce((items,c)=>{if(c instanceof code_1.Name)c=replaceName(c);if(c instanceof code_1._Code)items.push(...c._items);else items.push(c);return items},[]));function replaceName(n){const c=constants[n.str];if(c===void 0||names[n.str]!==1)return n;delete names[n.str];return c}function canOptimize(e){return e instanceof code_1._Code&&e._items.some(c=>c instanceof code_1.Name&&names[c.str]===1&&constants[c.str]!==void 0)}}function subtractNames(names,from){for(const n in from)names[n]=(names[n]||0)-(from[n]||0)}function not(x){return typeof x==`boolean`||typeof x==`number`||x===null?!x:(0,code_1._)`!${par(x)}`}exports.not=not;var andCode=mappend(exports.operators.AND);function and(...args){return args.reduce(andCode)}exports.and=and;var orCode=mappend(exports.operators.OR);function or(...args){return args.reduce(orCode)}exports.or=or;function mappend(op){return(x,y)=>x===code_1.nil?y:y===code_1.nil?x:(0,code_1._)`${par(x)} ${op} ${par(y)}`}function par(x){return x instanceof code_1.Name?x:(0,code_1._)`(${x})`}}));var require_util=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.checkStrictMode=exports.getErrorPath=exports.Type=exports.useFunc=exports.setEvaluated=exports.evaluatedPropsToName=exports.mergeEvaluated=exports.eachItem=exports.unescapeJsonPointer=exports.escapeJsonPointer=exports.escapeFragment=exports.unescapeFragment=exports.schemaRefOrVal=exports.schemaHasRulesButRef=exports.schemaHasRules=exports.checkUnknownRules=exports.alwaysValidSchema=exports.toHash=void 0;var codegen_1=require_codegen();var code_1=require_code$1();function toHash(arr){const hash={};for(const item of arr)hash[item]=true;return hash}exports.toHash=toHash;function alwaysValidSchema(it,schema){if(typeof schema==`boolean`)return schema;if(Object.keys(schema).length===0)return true;checkUnknownRules(it,schema);return!schemaHasRules(schema,it.self.RULES.all)}exports.alwaysValidSchema=alwaysValidSchema;function checkUnknownRules(it,schema=it.schema){const{opts,self}=it;if(!opts.strictSchema)return;if(typeof schema===`boolean`)return;const rules=self.RULES.keywords;for(const key in schema)if(!rules[key])checkStrictMode(it,`unknown keyword: "${key}"`)}exports.checkUnknownRules=checkUnknownRules;function schemaHasRules(schema,rules){if(typeof schema==`boolean`)return!schema;for(const key in schema)if(rules[key])return true;return false}exports.schemaHasRules=schemaHasRules;function schemaHasRulesButRef(schema,RULES){if(typeof schema==`boolean`)return!schema;for(const key in schema)if(key!==`$ref`&&RULES.all[key])return true;return false}exports.schemaHasRulesButRef=schemaHasRulesButRef;function schemaRefOrVal({topSchemaRef,schemaPath},schema,keyword,$data){if(!$data){if(typeof schema==`number`||typeof schema==`boolean`)return schema;if(typeof schema==`string`)return(0,codegen_1._)`${schema}`}return(0,codegen_1._)`${topSchemaRef}${schemaPath}${(0,codegen_1.getProperty)(keyword)}`}exports.schemaRefOrVal=schemaRefOrVal;function unescapeFragment(str){return unescapeJsonPointer(decodeURIComponent(str))}exports.unescapeFragment=unescapeFragment;function escapeFragment(str){return encodeURIComponent(escapeJsonPointer(str))}exports.escapeFragment=escapeFragment;function escapeJsonPointer(str){if(typeof str==`number`)return`${str}`;return str.replace(/~/g,`~0`).replace(/\//g,`~1`)}exports.escapeJsonPointer=escapeJsonPointer;function unescapeJsonPointer(str){return str.replace(/~1/g,`/`).replace(/~0/g,`~`)}exports.unescapeJsonPointer=unescapeJsonPointer;function eachItem(xs,f){if(Array.isArray(xs))for(const x of xs)f(x);else f(xs)}exports.eachItem=eachItem;function makeMergeEvaluated({mergeNames,mergeToName,mergeValues,resultToName}){return(gen,from,to,toName)=>{const res=to===void 0?from:to instanceof codegen_1.Name?(from instanceof codegen_1.Name?mergeNames(gen,from,to):mergeToName(gen,from,to),to):from instanceof codegen_1.Name?(mergeToName(gen,to,from),from):mergeValues(from,to);return toName===codegen_1.Name&&!(res instanceof codegen_1.Name)?resultToName(gen,res):res}}exports.mergeEvaluated={props:makeMergeEvaluated({mergeNames:(gen,from,to)=>gen.if((0,codegen_1._)`${to} !== true && ${from} !== undefined`,()=>{gen.if((0,codegen_1._)`${from} === true`,()=>gen.assign(to,true),()=>gen.assign(to,(0,codegen_1._)`${to} || {}`).code((0,codegen_1._)`Object.assign(${to}, ${from})`))}),mergeToName:(gen,from,to)=>gen.if((0,codegen_1._)`${to} !== true`,()=>{if(from===true)gen.assign(to,true);else{gen.assign(to,(0,codegen_1._)`${to} || {}`);setEvaluated(gen,to,from)}}),mergeValues:(from,to)=>from===true?true:{...from,...to},resultToName:evaluatedPropsToName}),items:makeMergeEvaluated({mergeNames:(gen,from,to)=>gen.if((0,codegen_1._)`${to} !== true && ${from} !== undefined`,()=>gen.assign(to,(0,codegen_1._)`${from} === true ? true : ${to} > ${from} ? ${to} : ${from}`)),mergeToName:(gen,from,to)=>gen.if((0,codegen_1._)`${to} !== true`,()=>gen.assign(to,from===true?true:(0,codegen_1._)`${to} > ${from} ? ${to} : ${from}`)),mergeValues:(from,to)=>from===true?true:Math.max(from,to),resultToName:(gen,items)=>gen.var(`items`,items)})};function evaluatedPropsToName(gen,ps){if(ps===true)return gen.var(`props`,true);const props=gen.var(`props`,(0,codegen_1._)`{}`);if(ps!==void 0)setEvaluated(gen,props,ps);return props}exports.evaluatedPropsToName=evaluatedPropsToName;function setEvaluated(gen,props,ps){Object.keys(ps).forEach(p=>gen.assign((0,codegen_1._)`${props}${(0,codegen_1.getProperty)(p)}`,true))}exports.setEvaluated=setEvaluated;var snippets={};function useFunc(gen,f){return gen.scopeValue(`func`,{ref:f,code:snippets[f.code]||(snippets[f.code]=new code_1._Code(f.code))})}exports.useFunc=useFunc;var Type;(function(Type){Type[Type[`Num`]=0]=`Num`;Type[Type[`Str`]=1]=`Str`})(Type||(exports.Type=Type={}));function getErrorPath(dataProp,dataPropType,jsPropertySyntax){if(dataProp instanceof codegen_1.Name){const isNumber=dataPropType===Type.Num;return jsPropertySyntax?isNumber?(0,codegen_1._)`"[" + ${dataProp} + "]"`:(0,codegen_1._)`"['" + ${dataProp} + "']"`:isNumber?(0,codegen_1._)`"/" + ${dataProp}`:(0,codegen_1._)`"/" + ${dataProp}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return jsPropertySyntax?(0,codegen_1.getProperty)(dataProp).toString():`/`+escapeJsonPointer(dataProp)}exports.getErrorPath=getErrorPath;function checkStrictMode(it,msg,mode=it.opts.strictSchema){if(!mode)return;msg=`strict mode: ${msg}`;if(mode===true)throw new Error(msg);it.self.logger.warn(msg)}exports.checkStrictMode=checkStrictMode}));var require_names=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var codegen_1=require_codegen();var names={data:new codegen_1.Name(`data`),valCxt:new codegen_1.Name(`valCxt`),instancePath:new codegen_1.Name(`instancePath`),parentData:new codegen_1.Name(`parentData`),parentDataProperty:new codegen_1.Name(`parentDataProperty`),rootData:new codegen_1.Name(`rootData`),dynamicAnchors:new codegen_1.Name(`dynamicAnchors`),vErrors:new codegen_1.Name(`vErrors`),errors:new codegen_1.Name(`errors`),this:new codegen_1.Name(`this`),self:new codegen_1.Name(`self`),scope:new codegen_1.Name(`scope`),json:new codegen_1.Name(`json`),jsonPos:new codegen_1.Name(`jsonPos`),jsonLen:new codegen_1.Name(`jsonLen`),jsonPart:new codegen_1.Name(`jsonPart`)};exports.default=names}));var require_errors=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.extendErrors=exports.resetErrorsCount=exports.reportExtraError=exports.reportError=exports.keyword$DataError=exports.keywordError=void 0;var codegen_1=require_codegen();var util_1=require_util();var names_1=require_names();exports.keywordError={message:({keyword})=>(0,codegen_1.str)`must pass "${keyword}" keyword validation`};exports.keyword$DataError={message:({keyword,schemaType})=>schemaType?(0,codegen_1.str)`"${keyword}" keyword must be ${schemaType} ($data)`:(0,codegen_1.str)`"${keyword}" keyword is invalid ($data)`};function reportError(cxt,error=exports.keywordError,errorPaths,overrideAllErrors){const{it}=cxt;const{gen,compositeRule,allErrors}=it;const errObj=errorObjectCode(cxt,error,errorPaths);if(overrideAllErrors!==null&&overrideAllErrors!==void 0?overrideAllErrors:compositeRule||allErrors)addError(gen,errObj);else returnErrors(it,(0,codegen_1._)`[${errObj}]`)}exports.reportError=reportError;function reportExtraError(cxt,error=exports.keywordError,errorPaths){const{it}=cxt;const{gen,compositeRule,allErrors}=it;addError(gen,errorObjectCode(cxt,error,errorPaths));if(!(compositeRule||allErrors))returnErrors(it,names_1.default.vErrors)}exports.reportExtraError=reportExtraError;function resetErrorsCount(gen,errsCount){gen.assign(names_1.default.errors,errsCount);gen.if((0,codegen_1._)`${names_1.default.vErrors} !== null`,()=>gen.if(errsCount,()=>gen.assign((0,codegen_1._)`${names_1.default.vErrors}.length`,errsCount),()=>gen.assign(names_1.default.vErrors,null)))}exports.resetErrorsCount=resetErrorsCount;function extendErrors({gen,keyword,schemaValue,data,errsCount,it}){if(errsCount===void 0)throw new Error(`ajv implementation error`);const err=gen.name(`err`);gen.forRange(`i`,errsCount,names_1.default.errors,i=>{gen.const(err,(0,codegen_1._)`${names_1.default.vErrors}[${i}]`);gen.if((0,codegen_1._)`${err}.instancePath === undefined`,()=>gen.assign((0,codegen_1._)`${err}.instancePath`,(0,codegen_1.strConcat)(names_1.default.instancePath,it.errorPath)));gen.assign((0,codegen_1._)`${err}.schemaPath`,(0,codegen_1.str)`${it.errSchemaPath}/${keyword}`);if(it.opts.verbose){gen.assign((0,codegen_1._)`${err}.schema`,schemaValue);gen.assign((0,codegen_1._)`${err}.data`,data)}})}exports.extendErrors=extendErrors;function addError(gen,errObj){const err=gen.const(`err`,errObj);gen.if((0,codegen_1._)`${names_1.default.vErrors} === null`,()=>gen.assign(names_1.default.vErrors,(0,codegen_1._)`[${err}]`),(0,codegen_1._)`${names_1.default.vErrors}.push(${err})`);gen.code((0,codegen_1._)`${names_1.default.errors}++`)}function returnErrors(it,errs){const{gen,validateName,schemaEnv}=it;if(schemaEnv.$async)gen.throw((0,codegen_1._)`new ${it.ValidationError}(${errs})`);else{gen.assign((0,codegen_1._)`${validateName}.errors`,errs);gen.return(false)}}var E={keyword:new codegen_1.Name(`keyword`),schemaPath:new codegen_1.Name(`schemaPath`),params:new codegen_1.Name(`params`),propertyName:new codegen_1.Name(`propertyName`),message:new codegen_1.Name(`message`),schema:new codegen_1.Name(`schema`),parentSchema:new codegen_1.Name(`parentSchema`)};function errorObjectCode(cxt,error,errorPaths){const{createErrors}=cxt.it;if(createErrors===false)return(0,codegen_1._)`{}`;return errorObject(cxt,error,errorPaths)}function errorObject(cxt,error,errorPaths={}){const{gen,it}=cxt;const keyValues=[errorInstancePath(it,errorPaths),errorSchemaPath(cxt,errorPaths)];extraErrorProps(cxt,error,keyValues);return gen.object(...keyValues)}function errorInstancePath({errorPath},{instancePath}){const instPath=instancePath?(0,codegen_1.str)`${errorPath}${(0,util_1.getErrorPath)(instancePath,util_1.Type.Str)}`:errorPath;return[names_1.default.instancePath,(0,codegen_1.strConcat)(names_1.default.instancePath,instPath)]}function errorSchemaPath({keyword,it:{errSchemaPath}},{schemaPath,parentSchema}){let schPath=parentSchema?errSchemaPath:(0,codegen_1.str)`${errSchemaPath}/${keyword}`;if(schemaPath)schPath=(0,codegen_1.str)`${schPath}${(0,util_1.getErrorPath)(schemaPath,util_1.Type.Str)}`;return[E.schemaPath,schPath]}function extraErrorProps(cxt,{params,message},keyValues){const{keyword,data,schemaValue,it}=cxt;const{opts,propertyName,topSchemaRef,schemaPath}=it;keyValues.push([E.keyword,keyword],[E.params,typeof params==`function`?params(cxt):params||(0,codegen_1._)`{}`]);if(opts.messages)keyValues.push([E.message,typeof message==`function`?message(cxt):message]);if(opts.verbose)keyValues.push([E.schema,schemaValue],[E.parentSchema,(0,codegen_1._)`${topSchemaRef}${schemaPath}`],[names_1.default.data,data]);if(propertyName)keyValues.push([E.propertyName,propertyName])}}));var require_boolSchema=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.boolOrEmptySchema=exports.topBoolOrEmptySchema=void 0;var errors_1=require_errors();var codegen_1=require_codegen();var names_1=require_names();var boolError={message:`boolean schema is false`};function topBoolOrEmptySchema(it){const{gen,schema,validateName}=it;if(schema===false)falseSchemaError(it,false);else if(typeof schema==`object`&&schema.$async===true)gen.return(names_1.default.data);else{gen.assign((0,codegen_1._)`${validateName}.errors`,null);gen.return(true)}}exports.topBoolOrEmptySchema=topBoolOrEmptySchema;function boolOrEmptySchema(it,valid){const{gen,schema}=it;if(schema===false){gen.var(valid,false);falseSchemaError(it)}else gen.var(valid,true)}exports.boolOrEmptySchema=boolOrEmptySchema;function falseSchemaError(it,overrideAllErrors){const{gen,data}=it;const cxt={gen,keyword:`false schema`,data,schema:false,schemaCode:false,schemaValue:false,params:{},it};(0,errors_1.reportError)(cxt,boolError,void 0,overrideAllErrors)}}));var require_rules=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.getRules=exports.isJSONType=void 0;var jsonTypes=new Set([`string`,`number`,`integer`,`boolean`,`null`,`object`,`array`]);function isJSONType(x){return typeof x==`string`&&jsonTypes.has(x)}exports.isJSONType=isJSONType;function getRules(){const groups={number:{type:`number`,rules:[]},string:{type:`string`,rules:[]},array:{type:`array`,rules:[]},object:{type:`object`,rules:[]}};return{types:{...groups,integer:true,boolean:true,null:true},rules:[{rules:[]},groups.number,groups.string,groups.array,groups.object],post:{rules:[]},all:{},keywords:{}}}exports.getRules=getRules}));var require_applicability=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.shouldUseRule=exports.shouldUseGroup=exports.schemaHasRulesForType=void 0;function schemaHasRulesForType({schema,self},type){const group=self.RULES.types[type];return group&&group!==true&&shouldUseGroup(schema,group)}exports.schemaHasRulesForType=schemaHasRulesForType;function shouldUseGroup(schema,group){return group.rules.some(rule=>shouldUseRule(schema,rule))}exports.shouldUseGroup=shouldUseGroup;function shouldUseRule(schema,rule){var _a;return schema[rule.keyword]!==void 0||((_a=rule.definition.implements)===null||_a===void 0?void 0:_a.some(kwd=>schema[kwd]!==void 0))}exports.shouldUseRule=shouldUseRule}));var require_dataType=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.reportTypeError=exports.checkDataTypes=exports.checkDataType=exports.coerceAndCheckDataType=exports.getJSONTypes=exports.getSchemaTypes=exports.DataType=void 0;var rules_1=require_rules();var applicability_1=require_applicability();var errors_1=require_errors();var codegen_1=require_codegen();var util_1=require_util();var DataType;(function(DataType){DataType[DataType[`Correct`]=0]=`Correct`;DataType[DataType[`Wrong`]=1]=`Wrong`})(DataType||(exports.DataType=DataType={}));function getSchemaTypes(schema){const types=getJSONTypes(schema.type);if(types.includes(`null`)){if(schema.nullable===false)throw new Error(`type: null contradicts nullable: false`)}else{if(!types.length&&schema.nullable!==void 0)throw new Error(`"nullable" cannot be used without "type"`);if(schema.nullable===true)types.push(`null`)}return types}exports.getSchemaTypes=getSchemaTypes;function getJSONTypes(ts){const types=Array.isArray(ts)?ts:ts?[ts]:[];if(types.every(rules_1.isJSONType))return types;throw new Error(`type must be JSONType or JSONType[]: `+types.join(`,`))}exports.getJSONTypes=getJSONTypes;function coerceAndCheckDataType(it,types){const{gen,data,opts}=it;const coerceTo=coerceToTypes(types,opts.coerceTypes);const checkTypes=types.length>0&&!(coerceTo.length===0&&types.length===1&&(0,applicability_1.schemaHasRulesForType)(it,types[0]));if(checkTypes){const wrongType=checkDataTypes(types,data,opts.strictNumbers,DataType.Wrong);gen.if(wrongType,()=>{if(coerceTo.length)coerceData(it,types,coerceTo);else reportTypeError(it)})}return checkTypes}exports.coerceAndCheckDataType=coerceAndCheckDataType;var COERCIBLE=new Set([`string`,`number`,`integer`,`boolean`,`null`]);function coerceToTypes(types,coerceTypes){return coerceTypes?types.filter(t=>COERCIBLE.has(t)||coerceTypes===`array`&&t===`array`):[]}function coerceData(it,types,coerceTo){const{gen,data,opts}=it;const dataType=gen.let(`dataType`,(0,codegen_1._)`typeof ${data}`);const coerced=gen.let(`coerced`,(0,codegen_1._)`undefined`);if(opts.coerceTypes===`array`)gen.if((0,codegen_1._)`${dataType} == 'object' && Array.isArray(${data}) && ${data}.length == 1`,()=>gen.assign(data,(0,codegen_1._)`${data}[0]`).assign(dataType,(0,codegen_1._)`typeof ${data}`).if(checkDataTypes(types,data,opts.strictNumbers),()=>gen.assign(coerced,data)));gen.if((0,codegen_1._)`${coerced} !== undefined`);for(const t of coerceTo)if(COERCIBLE.has(t)||t===`array`&&opts.coerceTypes===`array`)coerceSpecificType(t);gen.else();reportTypeError(it);gen.endIf();gen.if((0,codegen_1._)`${coerced} !== undefined`,()=>{gen.assign(data,coerced);assignParentData(it,coerced)});function coerceSpecificType(t){switch(t){case`string`:gen.elseIf((0,codegen_1._)`${dataType} == "number" || ${dataType} == "boolean"`).assign(coerced,(0,codegen_1._)`"" + ${data}`).elseIf((0,codegen_1._)`${data} === null`).assign(coerced,(0,codegen_1._)`""`);return;case`number`:gen.elseIf((0,codegen_1._)`${dataType} == "boolean" || ${data} === null
|
|
3
3
|
|| (${dataType} == "string" && ${data} && ${data} == +${data})`).assign(coerced,(0,codegen_1._)`+${data}`);return;case`integer`:gen.elseIf((0,codegen_1._)`${dataType} === "boolean" || ${data} === null
|
|
4
4
|
|| (${dataType} === "string" && ${data} && ${data} == +${data} && !(${data} % 1))`).assign(coerced,(0,codegen_1._)`+${data}`);return;case`boolean`:gen.elseIf((0,codegen_1._)`${data} === "false" || ${data} === 0 || ${data} === null`).assign(coerced,false).elseIf((0,codegen_1._)`${data} === "true" || ${data} === 1`).assign(coerced,true);return;case`null`:gen.elseIf((0,codegen_1._)`${data} === "" || ${data} === 0 || ${data} === false`);gen.assign(coerced,null);return;case`array`:gen.elseIf((0,codegen_1._)`${dataType} === "string" || ${dataType} === "number"
|
|
5
5
|
|| ${dataType} === "boolean" || ${data} === null`).assign(coerced,(0,codegen_1._)`[${data}]`)}}}function assignParentData({gen,parentData,parentDataProperty},expr){gen.if((0,codegen_1._)`${parentData} !== undefined`,()=>gen.assign((0,codegen_1._)`${parentData}[${parentDataProperty}]`,expr))}function checkDataType(dataType,data,strictNums,correct=DataType.Correct){const EQ=correct===DataType.Correct?codegen_1.operators.EQ:codegen_1.operators.NEQ;let cond;switch(dataType){case`null`:return(0,codegen_1._)`${data} ${EQ} null`;case`array`:cond=(0,codegen_1._)`Array.isArray(${data})`;break;case`object`:cond=(0,codegen_1._)`${data} && typeof ${data} == "object" && !Array.isArray(${data})`;break;case`integer`:cond=numCond((0,codegen_1._)`!(${data} % 1) && !isNaN(${data})`);break;case`number`:cond=numCond();break;default:return(0,codegen_1._)`typeof ${data} ${EQ} ${dataType}`}return correct===DataType.Correct?cond:(0,codegen_1.not)(cond);function numCond(_cond=codegen_1.nil){return(0,codegen_1.and)((0,codegen_1._)`typeof ${data} == "number"`,_cond,strictNums?(0,codegen_1._)`isFinite(${data})`:codegen_1.nil)}}exports.checkDataType=checkDataType;function checkDataTypes(dataTypes,data,strictNums,correct){if(dataTypes.length===1)return checkDataType(dataTypes[0],data,strictNums,correct);let cond;const types=(0,util_1.toHash)(dataTypes);if(types.array&&types.object){const notObj=(0,codegen_1._)`typeof ${data} != "object"`;cond=types.null?notObj:(0,codegen_1._)`!${data} || ${notObj}`;delete types.null;delete types.array;delete types.object}else cond=codegen_1.nil;if(types.number)delete types.integer;for(const t in types)cond=(0,codegen_1.and)(cond,checkDataType(t,data,strictNums,correct));return cond}exports.checkDataTypes=checkDataTypes;var typeError={message:({schema})=>`must be ${schema}`,params:({schema,schemaValue})=>typeof schema==`string`?(0,codegen_1._)`{type: ${schema}}`:(0,codegen_1._)`{type: ${schemaValue}}`};function reportTypeError(it){const cxt=getTypeErrorContext(it);(0,errors_1.reportError)(cxt,typeError)}exports.reportTypeError=reportTypeError;function getTypeErrorContext(it){const{gen,data,schema}=it;const schemaCode=(0,util_1.schemaRefOrVal)(it,schema,`type`);return{gen,keyword:`type`,data,schema:schema.type,schemaCode,schemaValue:schemaCode,parentSchema:schema,params:{},it}}}));var require_defaults=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.assignDefaults=void 0;var codegen_1=require_codegen();var util_1=require_util();function assignDefaults(it,ty){const{properties,items}=it.schema;if(ty===`object`&&properties)for(const key in properties)assignDefault(it,key,properties[key].default);else if(ty===`array`&&Array.isArray(items))items.forEach((sch,i)=>assignDefault(it,i,sch.default))}exports.assignDefaults=assignDefaults;function assignDefault(it,prop,defaultValue){const{gen,compositeRule,data,opts}=it;if(defaultValue===void 0)return;const childData=(0,codegen_1._)`${data}${(0,codegen_1.getProperty)(prop)}`;if(compositeRule){(0,util_1.checkStrictMode)(it,`default is ignored for: ${childData}`);return}let condition=(0,codegen_1._)`${childData} === undefined`;if(opts.useDefaults===`empty`)condition=(0,codegen_1._)`${condition} || ${childData} === null || ${childData} === ""`;gen.if(condition,(0,codegen_1._)`${childData} = ${(0,codegen_1.stringify)(defaultValue)}`)}}));var require_code=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.validateUnion=exports.validateArray=exports.usePattern=exports.callValidateCode=exports.schemaProperties=exports.allSchemaProperties=exports.noPropertyInData=exports.propertyInData=exports.isOwnProperty=exports.hasPropFunc=exports.reportMissingProp=exports.checkMissingProp=exports.checkReportMissingProp=void 0;var codegen_1=require_codegen();var util_1=require_util();var names_1=require_names();var util_2=require_util();function checkReportMissingProp(cxt,prop){const{gen,data,it}=cxt;gen.if(noPropertyInData(gen,data,prop,it.opts.ownProperties),()=>{cxt.setParams({missingProperty:(0,codegen_1._)`${prop}`},true);cxt.error()})}exports.checkReportMissingProp=checkReportMissingProp;function checkMissingProp({gen,data,it:{opts}},properties,missing){return(0,codegen_1.or)(...properties.map(prop=>(0,codegen_1.and)(noPropertyInData(gen,data,prop,opts.ownProperties),(0,codegen_1._)`${missing} = ${prop}`)))}exports.checkMissingProp=checkMissingProp;function reportMissingProp(cxt,missing){cxt.setParams({missingProperty:missing},true);cxt.error()}exports.reportMissingProp=reportMissingProp;function hasPropFunc(gen){return gen.scopeValue(`func`,{ref:Object.prototype.hasOwnProperty,code:(0,codegen_1._)`Object.prototype.hasOwnProperty`})}exports.hasPropFunc=hasPropFunc;function isOwnProperty(gen,data,property){return(0,codegen_1._)`${hasPropFunc(gen)}.call(${data}, ${property})`}exports.isOwnProperty=isOwnProperty;function propertyInData(gen,data,property,ownProperties){const cond=(0,codegen_1._)`${data}${(0,codegen_1.getProperty)(property)} !== undefined`;return ownProperties?(0,codegen_1._)`${cond} && ${isOwnProperty(gen,data,property)}`:cond}exports.propertyInData=propertyInData;function noPropertyInData(gen,data,property,ownProperties){const cond=(0,codegen_1._)`${data}${(0,codegen_1.getProperty)(property)} === undefined`;return ownProperties?(0,codegen_1.or)(cond,(0,codegen_1.not)(isOwnProperty(gen,data,property))):cond}exports.noPropertyInData=noPropertyInData;function allSchemaProperties(schemaMap){return schemaMap?Object.keys(schemaMap).filter(p=>p!==`__proto__`):[]}exports.allSchemaProperties=allSchemaProperties;function schemaProperties(it,schemaMap){return allSchemaProperties(schemaMap).filter(p=>!(0,util_1.alwaysValidSchema)(it,schemaMap[p]))}exports.schemaProperties=schemaProperties;function callValidateCode({schemaCode,data,it:{gen,topSchemaRef,schemaPath,errorPath},it},func,context,passSchema){const dataAndSchema=passSchema?(0,codegen_1._)`${schemaCode}, ${data}, ${topSchemaRef}${schemaPath}`:data;const valCxt=[[names_1.default.instancePath,(0,codegen_1.strConcat)(names_1.default.instancePath,errorPath)],[names_1.default.parentData,it.parentData],[names_1.default.parentDataProperty,it.parentDataProperty],[names_1.default.rootData,names_1.default.rootData]];if(it.opts.dynamicRef)valCxt.push([names_1.default.dynamicAnchors,names_1.default.dynamicAnchors]);const args=(0,codegen_1._)`${dataAndSchema}, ${gen.object(...valCxt)}`;return context!==codegen_1.nil?(0,codegen_1._)`${func}.call(${context}, ${args})`:(0,codegen_1._)`${func}(${args})`}exports.callValidateCode=callValidateCode;var newRegExp=(0,codegen_1._)`new RegExp`;function usePattern({gen,it:{opts}},pattern){const u=opts.unicodeRegExp?`u`:``;const{regExp}=opts.code;const rx=regExp(pattern,u);return gen.scopeValue(`pattern`,{key:rx.toString(),ref:rx,code:(0,codegen_1._)`${regExp.code===`new RegExp`?newRegExp:(0,util_2.useFunc)(gen,regExp)}(${pattern}, ${u})`})}exports.usePattern=usePattern;function validateArray(cxt){const{gen,data,keyword,it}=cxt;const valid=gen.name(`valid`);if(it.allErrors){const validArr=gen.let(`valid`,true);validateItems(()=>gen.assign(validArr,false));return validArr}gen.var(valid,true);validateItems(()=>gen.break());return valid;function validateItems(notValid){const len=gen.const(`len`,(0,codegen_1._)`${data}.length`);gen.forRange(`i`,0,len,i=>{cxt.subschema({keyword,dataProp:i,dataPropType:util_1.Type.Num},valid);gen.if((0,codegen_1.not)(valid),notValid)})}}exports.validateArray=validateArray;function validateUnion(cxt){const{gen,schema,keyword,it}=cxt;if(!Array.isArray(schema))throw new Error(`ajv implementation error`);if(schema.some(sch=>(0,util_1.alwaysValidSchema)(it,sch))&&!it.opts.unevaluated)return;const valid=gen.let(`valid`,false);const schValid=gen.name(`_valid`);gen.block(()=>schema.forEach((_sch,i)=>{const schCxt=cxt.subschema({keyword,schemaProp:i,compositeRule:true},schValid);gen.assign(valid,(0,codegen_1._)`${valid} || ${schValid}`);if(!cxt.mergeValidEvaluated(schCxt,schValid))gen.if((0,codegen_1.not)(valid))}));cxt.result(valid,()=>cxt.reset(),()=>cxt.error(true))}exports.validateUnion=validateUnion}));var require_keyword=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.validateKeywordUsage=exports.validSchemaType=exports.funcKeywordCode=exports.macroKeywordCode=void 0;var codegen_1=require_codegen();var names_1=require_names();var code_1=require_code();var errors_1=require_errors();function macroKeywordCode(cxt,def){const{gen,keyword,schema,parentSchema,it}=cxt;const macroSchema=def.macro.call(it.self,schema,parentSchema,it);const schemaRef=useKeyword(gen,keyword,macroSchema);if(it.opts.validateSchema!==false)it.self.validateSchema(macroSchema,true);const valid=gen.name(`valid`);cxt.subschema({schema:macroSchema,schemaPath:codegen_1.nil,errSchemaPath:`${it.errSchemaPath}/${keyword}`,topSchemaRef:schemaRef,compositeRule:true},valid);cxt.pass(valid,()=>cxt.error(true))}exports.macroKeywordCode=macroKeywordCode;function funcKeywordCode(cxt,def){var _a;const{gen,keyword,schema,parentSchema,$data,it}=cxt;checkAsyncKeyword(it,def);const validateRef=useKeyword(gen,keyword,!$data&&def.compile?def.compile.call(it.self,schema,parentSchema,it):def.validate);const valid=gen.let(`valid`);cxt.block$data(valid,validateKeyword);cxt.ok((_a=def.valid)!==null&&_a!==void 0?_a:valid);function validateKeyword(){if(def.errors===false){assignValid();if(def.modifying)modifyData(cxt);reportErrs(()=>cxt.error())}else{const ruleErrs=def.async?validateAsync():validateSync();if(def.modifying)modifyData(cxt);reportErrs(()=>addErrs(cxt,ruleErrs))}}function validateAsync(){const ruleErrs=gen.let(`ruleErrs`,null);gen.try(()=>assignValid((0,codegen_1._)`await `),e=>gen.assign(valid,false).if((0,codegen_1._)`${e} instanceof ${it.ValidationError}`,()=>gen.assign(ruleErrs,(0,codegen_1._)`${e}.errors`),()=>gen.throw(e)));return ruleErrs}function validateSync(){const validateErrs=(0,codegen_1._)`${validateRef}.errors`;gen.assign(validateErrs,null);assignValid(codegen_1.nil);return validateErrs}function assignValid(_await=def.async?(0,codegen_1._)`await `:codegen_1.nil){const passCxt=it.opts.passContext?names_1.default.this:names_1.default.self;const passSchema=!(`compile`in def&&!$data||def.schema===false);gen.assign(valid,(0,codegen_1._)`${_await}${(0,code_1.callValidateCode)(cxt,validateRef,passCxt,passSchema)}`,def.modifying)}function reportErrs(errors){var _a;gen.if((0,codegen_1.not)((_a=def.valid)!==null&&_a!==void 0?_a:valid),errors)}}exports.funcKeywordCode=funcKeywordCode;function modifyData(cxt){const{gen,data,it}=cxt;gen.if(it.parentData,()=>gen.assign(data,(0,codegen_1._)`${it.parentData}[${it.parentDataProperty}]`))}function addErrs(cxt,errs){const{gen}=cxt;gen.if((0,codegen_1._)`Array.isArray(${errs})`,()=>{gen.assign(names_1.default.vErrors,(0,codegen_1._)`${names_1.default.vErrors} === null ? ${errs} : ${names_1.default.vErrors}.concat(${errs})`).assign(names_1.default.errors,(0,codegen_1._)`${names_1.default.vErrors}.length`);(0,errors_1.extendErrors)(cxt)},()=>cxt.error())}function checkAsyncKeyword({schemaEnv},def){if(def.async&&!schemaEnv.$async)throw new Error(`async keyword in sync schema`)}function useKeyword(gen,keyword,result){if(result===void 0)throw new Error(`keyword "${keyword}" failed to compile`);return gen.scopeValue(`keyword`,typeof result==`function`?{ref:result}:{ref:result,code:(0,codegen_1.stringify)(result)})}function validSchemaType(schema,schemaType,allowUndefined=false){return!schemaType.length||schemaType.some(st=>st===`array`?Array.isArray(schema):st===`object`?schema&&typeof schema==`object`&&!Array.isArray(schema):typeof schema==st||allowUndefined&&typeof schema==`undefined`)}exports.validSchemaType=validSchemaType;function validateKeywordUsage({schema,opts,self,errSchemaPath},def,keyword){if(Array.isArray(def.keyword)?!def.keyword.includes(keyword):def.keyword!==keyword)throw new Error(`ajv implementation error`);const deps=def.dependencies;if(deps===null||deps===void 0?void 0:deps.some(kwd=>!Object.prototype.hasOwnProperty.call(schema,kwd)))throw new Error(`parent schema must have dependencies of ${keyword}: ${deps.join(`,`)}`);if(def.validateSchema){if(!def.validateSchema(schema[keyword])){const msg=`keyword "${keyword}" value is invalid at path "${errSchemaPath}": `+self.errorsText(def.validateSchema.errors);if(opts.validateSchema===`log`)self.logger.error(msg);else throw new Error(msg)}}}exports.validateKeywordUsage=validateKeywordUsage}));var require_subschema=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.extendSubschemaMode=exports.extendSubschemaData=exports.getSubschema=void 0;var codegen_1=require_codegen();var util_1=require_util();function getSubschema(it,{keyword,schemaProp,schema,schemaPath,errSchemaPath,topSchemaRef}){if(keyword!==void 0&&schema!==void 0)throw new Error(`both "keyword" and "schema" passed, only one allowed`);if(keyword!==void 0){const sch=it.schema[keyword];return schemaProp===void 0?{schema:sch,schemaPath:(0,codegen_1._)`${it.schemaPath}${(0,codegen_1.getProperty)(keyword)}`,errSchemaPath:`${it.errSchemaPath}/${keyword}`}:{schema:sch[schemaProp],schemaPath:(0,codegen_1._)`${it.schemaPath}${(0,codegen_1.getProperty)(keyword)}${(0,codegen_1.getProperty)(schemaProp)}`,errSchemaPath:`${it.errSchemaPath}/${keyword}/${(0,util_1.escapeFragment)(schemaProp)}`}}if(schema!==void 0){if(schemaPath===void 0||errSchemaPath===void 0||topSchemaRef===void 0)throw new Error(`"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"`);return{schema,schemaPath,topSchemaRef,errSchemaPath}}throw new Error(`either "keyword" or "schema" must be passed`)}exports.getSubschema=getSubschema;function extendSubschemaData(subschema,it,{dataProp,dataPropType:dpType,data,dataTypes,propertyName}){if(data!==void 0&&dataProp!==void 0)throw new Error(`both "data" and "dataProp" passed, only one allowed`);const{gen}=it;if(dataProp!==void 0){const{errorPath,dataPathArr,opts}=it;dataContextProps(gen.let(`data`,(0,codegen_1._)`${it.data}${(0,codegen_1.getProperty)(dataProp)}`,true));subschema.errorPath=(0,codegen_1.str)`${errorPath}${(0,util_1.getErrorPath)(dataProp,dpType,opts.jsPropertySyntax)}`;subschema.parentDataProperty=(0,codegen_1._)`${dataProp}`;subschema.dataPathArr=[...dataPathArr,subschema.parentDataProperty]}if(data!==void 0){dataContextProps(data instanceof codegen_1.Name?data:gen.let(`data`,data,true));if(propertyName!==void 0)subschema.propertyName=propertyName}if(dataTypes)subschema.dataTypes=dataTypes;function dataContextProps(_nextData){subschema.data=_nextData;subschema.dataLevel=it.dataLevel+1;subschema.dataTypes=[];it.definedProperties=new Set;subschema.parentData=it.data;subschema.dataNames=[...it.dataNames,_nextData]}}exports.extendSubschemaData=extendSubschemaData;function extendSubschemaMode(subschema,{jtdDiscriminator,jtdMetadata,compositeRule,createErrors,allErrors}){if(compositeRule!==void 0)subschema.compositeRule=compositeRule;if(createErrors!==void 0)subschema.createErrors=createErrors;if(allErrors!==void 0)subschema.allErrors=allErrors;subschema.jtdDiscriminator=jtdDiscriminator;subschema.jtdMetadata=jtdMetadata}exports.extendSubschemaMode=extendSubschemaMode}));var require_fast_deep_equal=__commonJSMin(((exports,module)=>{module.exports=function equal(a,b){if(a===b)return true;if(a&&b&&typeof a==`object`&&typeof b==`object`){if(a.constructor!==b.constructor)return false;var length,i,keys;if(Array.isArray(a)){length=a.length;if(length!=b.length)return false;for(i=length;i--!==0;)if(!equal(a[i],b[i]))return false;return true}if(a.constructor===RegExp)return a.source===b.source&&a.flags===b.flags;if(a.valueOf!==Object.prototype.valueOf)return a.valueOf()===b.valueOf();if(a.toString!==Object.prototype.toString)return a.toString()===b.toString();keys=Object.keys(a);length=keys.length;if(length!==Object.keys(b).length)return false;for(i=length;i--!==0;)if(!Object.prototype.hasOwnProperty.call(b,keys[i]))return false;for(i=length;i--!==0;){var key=keys[i];if(!equal(a[key],b[key]))return false}return true}return a!==a&&b!==b}}));var require_json_schema_traverse=__commonJSMin(((exports,module)=>{var traverse=module.exports=function(schema,opts,cb){if(typeof opts==`function`){cb=opts;opts={}}cb=opts.cb||cb;var pre=typeof cb==`function`?cb:cb.pre||function(){};var post=cb.post||function(){};_traverse(opts,pre,post,schema,``,schema)};traverse.keywords={additionalItems:true,items:true,contains:true,additionalProperties:true,propertyNames:true,not:true,if:true,then:true,else:true};traverse.arrayKeywords={items:true,allOf:true,anyOf:true,oneOf:true};traverse.propsKeywords={$defs:true,definitions:true,properties:true,patternProperties:true,dependencies:true};traverse.skipKeywords={default:true,enum:true,const:true,required:true,maximum:true,minimum:true,exclusiveMaximum:true,exclusiveMinimum:true,multipleOf:true,maxLength:true,minLength:true,pattern:true,format:true,maxItems:true,minItems:true,uniqueItems:true,maxProperties:true,minProperties:true};function _traverse(opts,pre,post,schema,jsonPtr,rootSchema,parentJsonPtr,parentKeyword,parentSchema,keyIndex){if(schema&&typeof schema==`object`&&!Array.isArray(schema)){pre(schema,jsonPtr,rootSchema,parentJsonPtr,parentKeyword,parentSchema,keyIndex);for(var key in schema){var sch=schema[key];if(Array.isArray(sch)){if(key in traverse.arrayKeywords)for(var i=0;i<sch.length;i++)_traverse(opts,pre,post,sch[i],jsonPtr+`/`+key+`/`+i,rootSchema,jsonPtr,key,schema,i)}else if(key in traverse.propsKeywords){if(sch&&typeof sch==`object`)for(var prop in sch)_traverse(opts,pre,post,sch[prop],jsonPtr+`/`+key+`/`+escapeJsonPtr(prop),rootSchema,jsonPtr,key,schema,prop)}else if(key in traverse.keywords||opts.allKeys&&!(key in traverse.skipKeywords))_traverse(opts,pre,post,sch,jsonPtr+`/`+key,rootSchema,jsonPtr,key,schema)}post(schema,jsonPtr,rootSchema,parentJsonPtr,parentKeyword,parentSchema,keyIndex)}}function escapeJsonPtr(str){return str.replace(/~/g,`~0`).replace(/\//g,`~1`)}}));var require_resolve=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.getSchemaRefs=exports.resolveUrl=exports.normalizeId=exports._getFullPath=exports.getFullPath=exports.inlineRef=void 0;var util_1=require_util();var equal=require_fast_deep_equal();var traverse=require_json_schema_traverse();var SIMPLE_INLINED=new Set([`type`,`format`,`pattern`,`maxLength`,`minLength`,`maxProperties`,`minProperties`,`maxItems`,`minItems`,`maximum`,`minimum`,`uniqueItems`,`multipleOf`,`required`,`enum`,`const`]);function inlineRef(schema,limit=true){if(typeof schema==`boolean`)return true;if(limit===true)return!hasRef(schema);if(!limit)return false;return countKeys(schema)<=limit}exports.inlineRef=inlineRef;var REF_KEYWORDS=new Set([`$ref`,`$recursiveRef`,`$recursiveAnchor`,`$dynamicRef`,`$dynamicAnchor`]);function hasRef(schema){for(const key in schema){if(REF_KEYWORDS.has(key))return true;const sch=schema[key];if(Array.isArray(sch)&&sch.some(hasRef))return true;if(typeof sch==`object`&&hasRef(sch))return true}return false}function countKeys(schema){let count=0;for(const key in schema){if(key===`$ref`)return Infinity;count++;if(SIMPLE_INLINED.has(key))continue;if(typeof schema[key]==`object`)(0,util_1.eachItem)(schema[key],sch=>count+=countKeys(sch));if(count===Infinity)return Infinity}return count}function getFullPath(resolver,id=``,normalize){if(normalize!==false)id=normalizeId(id);return _getFullPath(resolver,resolver.parse(id))}exports.getFullPath=getFullPath;function _getFullPath(resolver,p){return resolver.serialize(p).split(`#`)[0]+`#`}exports._getFullPath=_getFullPath;var TRAILING_SLASH_HASH=/#\/?$/;function normalizeId(id){return id?id.replace(TRAILING_SLASH_HASH,``):``}exports.normalizeId=normalizeId;function resolveUrl(resolver,baseId,id){id=normalizeId(id);return resolver.resolve(baseId,id)}exports.resolveUrl=resolveUrl;var ANCHOR=/^[a-z_][-a-z0-9._]*$/i;function getSchemaRefs(schema,baseId){if(typeof schema==`boolean`)return{};const{schemaId,uriResolver}=this.opts;const schId=normalizeId(schema[schemaId]||baseId);const baseIds={"":schId};const pathPrefix=getFullPath(uriResolver,schId,false);const localRefs={};const schemaRefs=new Set;traverse(schema,{allKeys:true},(sch,jsonPtr,_,parentJsonPtr)=>{if(parentJsonPtr===void 0)return;const fullPath=pathPrefix+jsonPtr;let innerBaseId=baseIds[parentJsonPtr];if(typeof sch[schemaId]==`string`)innerBaseId=addRef.call(this,sch[schemaId]);addAnchor.call(this,sch.$anchor);addAnchor.call(this,sch.$dynamicAnchor);baseIds[jsonPtr]=innerBaseId;function addRef(ref){const _resolve=this.opts.uriResolver.resolve;ref=normalizeId(innerBaseId?_resolve(innerBaseId,ref):ref);if(schemaRefs.has(ref))throw ambiguos(ref);schemaRefs.add(ref);let schOrRef=this.refs[ref];if(typeof schOrRef==`string`)schOrRef=this.refs[schOrRef];if(typeof schOrRef==`object`)checkAmbiguosRef(sch,schOrRef.schema,ref);else if(ref!==normalizeId(fullPath)){if(ref[0]===`#`){checkAmbiguosRef(sch,localRefs[ref],ref);localRefs[ref]=sch}else this.refs[ref]=fullPath}return ref}function addAnchor(anchor){if(typeof anchor==`string`){if(!ANCHOR.test(anchor))throw new Error(`invalid anchor "${anchor}"`);addRef.call(this,`#${anchor}`)}}});return localRefs;function checkAmbiguosRef(sch1,sch2,ref){if(sch2!==void 0&&!equal(sch1,sch2))throw ambiguos(ref)}function ambiguos(ref){return new Error(`reference "${ref}" resolves to more than one schema`)}}exports.getSchemaRefs=getSchemaRefs}));var require_validate=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.getData=exports.KeywordCxt=exports.validateFunctionCode=void 0;var boolSchema_1=require_boolSchema();var dataType_1=require_dataType();var applicability_1=require_applicability();var dataType_2=require_dataType();var defaults_1=require_defaults();var keyword_1=require_keyword();var subschema_1=require_subschema();var codegen_1=require_codegen();var names_1=require_names();var resolve_1=require_resolve();var util_1=require_util();var errors_1=require_errors();function validateFunctionCode(it){if(isSchemaObj(it)){checkKeywords(it);if(schemaCxtHasRules(it)){topSchemaObjCode(it);return}}validateFunction(it,()=>(0,boolSchema_1.topBoolOrEmptySchema)(it))}exports.validateFunctionCode=validateFunctionCode;function validateFunction({gen,validateName,schema,schemaEnv,opts},body){if(opts.code.es5)gen.func(validateName,(0,codegen_1._)`${names_1.default.data}, ${names_1.default.valCxt}`,schemaEnv.$async,()=>{gen.code((0,codegen_1._)`"use strict"; ${funcSourceUrl(schema,opts)}`);destructureValCxtES5(gen,opts);gen.code(body)});else gen.func(validateName,(0,codegen_1._)`${names_1.default.data}, ${destructureValCxt(opts)}`,schemaEnv.$async,()=>gen.code(funcSourceUrl(schema,opts)).code(body))}function destructureValCxt(opts){return(0,codegen_1._)`{${names_1.default.instancePath}="", ${names_1.default.parentData}, ${names_1.default.parentDataProperty}, ${names_1.default.rootData}=${names_1.default.data}${opts.dynamicRef?(0,codegen_1._)`, ${names_1.default.dynamicAnchors}={}`:codegen_1.nil}}={}`}function destructureValCxtES5(gen,opts){gen.if(names_1.default.valCxt,()=>{gen.var(names_1.default.instancePath,(0,codegen_1._)`${names_1.default.valCxt}.${names_1.default.instancePath}`);gen.var(names_1.default.parentData,(0,codegen_1._)`${names_1.default.valCxt}.${names_1.default.parentData}`);gen.var(names_1.default.parentDataProperty,(0,codegen_1._)`${names_1.default.valCxt}.${names_1.default.parentDataProperty}`);gen.var(names_1.default.rootData,(0,codegen_1._)`${names_1.default.valCxt}.${names_1.default.rootData}`);if(opts.dynamicRef)gen.var(names_1.default.dynamicAnchors,(0,codegen_1._)`${names_1.default.valCxt}.${names_1.default.dynamicAnchors}`)},()=>{gen.var(names_1.default.instancePath,(0,codegen_1._)`""`);gen.var(names_1.default.parentData,(0,codegen_1._)`undefined`);gen.var(names_1.default.parentDataProperty,(0,codegen_1._)`undefined`);gen.var(names_1.default.rootData,names_1.default.data);if(opts.dynamicRef)gen.var(names_1.default.dynamicAnchors,(0,codegen_1._)`{}`)})}function topSchemaObjCode(it){const{schema,opts,gen}=it;validateFunction(it,()=>{if(opts.$comment&&schema.$comment)commentKeyword(it);checkNoDefault(it);gen.let(names_1.default.vErrors,null);gen.let(names_1.default.errors,0);if(opts.unevaluated)resetEvaluated(it);typeAndKeywords(it);returnResults(it)})}function resetEvaluated(it){const{gen,validateName}=it;it.evaluated=gen.const(`evaluated`,(0,codegen_1._)`${validateName}.evaluated`);gen.if((0,codegen_1._)`${it.evaluated}.dynamicProps`,()=>gen.assign((0,codegen_1._)`${it.evaluated}.props`,(0,codegen_1._)`undefined`));gen.if((0,codegen_1._)`${it.evaluated}.dynamicItems`,()=>gen.assign((0,codegen_1._)`${it.evaluated}.items`,(0,codegen_1._)`undefined`))}function funcSourceUrl(schema,opts){const schId=typeof schema==`object`&&schema[opts.schemaId];return schId&&(opts.code.source||opts.code.process)?(0,codegen_1._)`/*# sourceURL=${schId} */`:codegen_1.nil}function subschemaCode(it,valid){if(isSchemaObj(it)){checkKeywords(it);if(schemaCxtHasRules(it)){subSchemaObjCode(it,valid);return}}(0,boolSchema_1.boolOrEmptySchema)(it,valid)}function schemaCxtHasRules({schema,self}){if(typeof schema==`boolean`)return!schema;for(const key in schema)if(self.RULES.all[key])return true;return false}function isSchemaObj(it){return typeof it.schema!=`boolean`}function subSchemaObjCode(it,valid){const{schema,gen,opts}=it;if(opts.$comment&&schema.$comment)commentKeyword(it);updateContext(it);checkAsyncSchema(it);const errsCount=gen.const(`_errs`,names_1.default.errors);typeAndKeywords(it,errsCount);gen.var(valid,(0,codegen_1._)`${errsCount} === ${names_1.default.errors}`)}function checkKeywords(it){(0,util_1.checkUnknownRules)(it);checkRefsAndKeywords(it)}function typeAndKeywords(it,errsCount){if(it.opts.jtd)return schemaKeywords(it,[],false,errsCount);const types=(0,dataType_1.getSchemaTypes)(it.schema);schemaKeywords(it,types,!(0,dataType_1.coerceAndCheckDataType)(it,types),errsCount)}function checkRefsAndKeywords(it){const{schema,errSchemaPath,opts,self}=it;if(schema.$ref&&opts.ignoreKeywordsWithRef&&(0,util_1.schemaHasRulesButRef)(schema,self.RULES))self.logger.warn(`$ref: keywords ignored in schema at path "${errSchemaPath}"`)}function checkNoDefault(it){const{schema,opts}=it;if(schema.default!==void 0&&opts.useDefaults&&opts.strictSchema)(0,util_1.checkStrictMode)(it,`default is ignored in the schema root`)}function updateContext(it){const schId=it.schema[it.opts.schemaId];if(schId)it.baseId=(0,resolve_1.resolveUrl)(it.opts.uriResolver,it.baseId,schId)}function checkAsyncSchema(it){if(it.schema.$async&&!it.schemaEnv.$async)throw new Error(`async schema in sync schema`)}function commentKeyword({gen,schemaEnv,schema,errSchemaPath,opts}){const msg=schema.$comment;if(opts.$comment===true)gen.code((0,codegen_1._)`${names_1.default.self}.logger.log(${msg})`);else if(typeof opts.$comment==`function`){const schemaPath=(0,codegen_1.str)`${errSchemaPath}/$comment`;const rootName=gen.scopeValue(`root`,{ref:schemaEnv.root});gen.code((0,codegen_1._)`${names_1.default.self}.opts.$comment(${msg}, ${schemaPath}, ${rootName}.schema)`)}}function returnResults(it){const{gen,schemaEnv,validateName,ValidationError,opts}=it;if(schemaEnv.$async)gen.if((0,codegen_1._)`${names_1.default.errors} === 0`,()=>gen.return(names_1.default.data),()=>gen.throw((0,codegen_1._)`new ${ValidationError}(${names_1.default.vErrors})`));else{gen.assign((0,codegen_1._)`${validateName}.errors`,names_1.default.vErrors);if(opts.unevaluated)assignEvaluated(it);gen.return((0,codegen_1._)`${names_1.default.errors} === 0`)}}function assignEvaluated({gen,evaluated,props,items}){if(props instanceof codegen_1.Name)gen.assign((0,codegen_1._)`${evaluated}.props`,props);if(items instanceof codegen_1.Name)gen.assign((0,codegen_1._)`${evaluated}.items`,items)}function schemaKeywords(it,types,typeErrors,errsCount){const{gen,schema,data,allErrors,opts,self}=it;const{RULES}=self;if(schema.$ref&&(opts.ignoreKeywordsWithRef||!(0,util_1.schemaHasRulesButRef)(schema,RULES))){gen.block(()=>keywordCode(it,`$ref`,RULES.all.$ref.definition));return}if(!opts.jtd)checkStrictTypes(it,types);gen.block(()=>{for(const group of RULES.rules)groupKeywords(group);groupKeywords(RULES.post)});function groupKeywords(group){if(!(0,applicability_1.shouldUseGroup)(schema,group))return;if(group.type){gen.if((0,dataType_2.checkDataType)(group.type,data,opts.strictNumbers));iterateKeywords(it,group);if(types.length===1&&types[0]===group.type&&typeErrors){gen.else();(0,dataType_2.reportTypeError)(it)}gen.endIf()}else iterateKeywords(it,group);if(!allErrors)gen.if((0,codegen_1._)`${names_1.default.errors} === ${errsCount||0}`)}}function iterateKeywords(it,group){const{gen,schema,opts:{useDefaults}}=it;if(useDefaults)(0,defaults_1.assignDefaults)(it,group.type);gen.block(()=>{for(const rule of group.rules)if((0,applicability_1.shouldUseRule)(schema,rule))keywordCode(it,rule.keyword,rule.definition,group.type)})}function checkStrictTypes(it,types){if(it.schemaEnv.meta||!it.opts.strictTypes)return;checkContextTypes(it,types);if(!it.opts.allowUnionTypes)checkMultipleTypes(it,types);checkKeywordTypes(it,it.dataTypes)}function checkContextTypes(it,types){if(!types.length)return;if(!it.dataTypes.length){it.dataTypes=types;return}types.forEach(t=>{if(!includesType(it.dataTypes,t))strictTypesError(it,`type "${t}" not allowed by context "${it.dataTypes.join(`,`)}"`)});narrowSchemaTypes(it,types)}function checkMultipleTypes(it,ts){if(ts.length>1&&!(ts.length===2&&ts.includes(`null`)))strictTypesError(it,`use allowUnionTypes to allow union type keyword`)}function checkKeywordTypes(it,ts){const rules=it.self.RULES.all;for(const keyword in rules){const rule=rules[keyword];if(typeof rule==`object`&&(0,applicability_1.shouldUseRule)(it.schema,rule)){const{type}=rule.definition;if(type.length&&!type.some(t=>hasApplicableType(ts,t)))strictTypesError(it,`missing type "${type.join(`,`)}" for keyword "${keyword}"`)}}}function hasApplicableType(schTs,kwdT){return schTs.includes(kwdT)||kwdT===`number`&&schTs.includes(`integer`)}function includesType(ts,t){return ts.includes(t)||t===`integer`&&ts.includes(`number`)}function narrowSchemaTypes(it,withTypes){const ts=[];for(const t of it.dataTypes)if(includesType(withTypes,t))ts.push(t);else if(withTypes.includes(`integer`)&&t===`number`)ts.push(`integer`);it.dataTypes=ts}function strictTypesError(it,msg){const schemaPath=it.schemaEnv.baseId+it.errSchemaPath;msg+=` at "${schemaPath}" (strictTypes)`;(0,util_1.checkStrictMode)(it,msg,it.opts.strictTypes)}var KeywordCxt=class{constructor(it,def,keyword){(0,keyword_1.validateKeywordUsage)(it,def,keyword);this.gen=it.gen;this.allErrors=it.allErrors;this.keyword=keyword;this.data=it.data;this.schema=it.schema[keyword];this.$data=def.$data&&it.opts.$data&&this.schema&&this.schema.$data;this.schemaValue=(0,util_1.schemaRefOrVal)(it,this.schema,keyword,this.$data);this.schemaType=def.schemaType;this.parentSchema=it.schema;this.params={};this.it=it;this.def=def;if(this.$data)this.schemaCode=it.gen.const(`vSchema`,getData(this.$data,it));else{this.schemaCode=this.schemaValue;if(!(0,keyword_1.validSchemaType)(this.schema,def.schemaType,def.allowUndefined))throw new Error(`${keyword} value must be ${JSON.stringify(def.schemaType)}`)}if(`code`in def?def.trackErrors:def.errors!==false)this.errsCount=it.gen.const(`_errs`,names_1.default.errors)}result(condition,successAction,failAction){this.failResult((0,codegen_1.not)(condition),successAction,failAction)}failResult(condition,successAction,failAction){this.gen.if(condition);if(failAction)failAction();else this.error();if(successAction){this.gen.else();successAction();if(this.allErrors)this.gen.endIf()}else if(this.allErrors)this.gen.endIf();else this.gen.else()}pass(condition,failAction){this.failResult((0,codegen_1.not)(condition),void 0,failAction)}fail(condition){if(condition===void 0){this.error();if(!this.allErrors)this.gen.if(false);return}this.gen.if(condition);this.error();if(this.allErrors)this.gen.endIf();else this.gen.else()}fail$data(condition){if(!this.$data)return this.fail(condition);const{schemaCode}=this;this.fail((0,codegen_1._)`${schemaCode} !== undefined && (${(0,codegen_1.or)(this.invalid$data(),condition)})`)}error(append,errorParams,errorPaths){if(errorParams){this.setParams(errorParams);this._error(append,errorPaths);this.setParams({});return}this._error(append,errorPaths)}_error(append,errorPaths){(append?errors_1.reportExtraError:errors_1.reportError)(this,this.def.error,errorPaths)}$dataError(){(0,errors_1.reportError)(this,this.def.$dataError||errors_1.keyword$DataError)}reset(){if(this.errsCount===void 0)throw new Error(`add "trackErrors" to keyword definition`);(0,errors_1.resetErrorsCount)(this.gen,this.errsCount)}ok(cond){if(!this.allErrors)this.gen.if(cond)}setParams(obj,assign){if(assign)Object.assign(this.params,obj);else this.params=obj}block$data(valid,codeBlock,$dataValid=codegen_1.nil){this.gen.block(()=>{this.check$data(valid,$dataValid);codeBlock()})}check$data(valid=codegen_1.nil,$dataValid=codegen_1.nil){if(!this.$data)return;const{gen,schemaCode,schemaType,def}=this;gen.if((0,codegen_1.or)((0,codegen_1._)`${schemaCode} === undefined`,$dataValid));if(valid!==codegen_1.nil)gen.assign(valid,true);if(schemaType.length||def.validateSchema){gen.elseIf(this.invalid$data());this.$dataError();if(valid!==codegen_1.nil)gen.assign(valid,false)}gen.else()}invalid$data(){const{gen,schemaCode,schemaType,def,it}=this;return(0,codegen_1.or)(wrong$DataType(),invalid$DataSchema());function wrong$DataType(){if(schemaType.length){if(!(schemaCode instanceof codegen_1.Name))throw new Error(`ajv implementation error`);const st=Array.isArray(schemaType)?schemaType:[schemaType];return(0,codegen_1._)`${(0,dataType_2.checkDataTypes)(st,schemaCode,it.opts.strictNumbers,dataType_2.DataType.Wrong)}`}return codegen_1.nil}function invalid$DataSchema(){if(def.validateSchema){const validateSchemaRef=gen.scopeValue(`validate$data`,{ref:def.validateSchema});return(0,codegen_1._)`!${validateSchemaRef}(${schemaCode})`}return codegen_1.nil}}subschema(appl,valid){const subschema=(0,subschema_1.getSubschema)(this.it,appl);(0,subschema_1.extendSubschemaData)(subschema,this.it,appl);(0,subschema_1.extendSubschemaMode)(subschema,appl);const nextContext={...this.it,...subschema,items:void 0,props:void 0};subschemaCode(nextContext,valid);return nextContext}mergeEvaluated(schemaCxt,toName){const{it,gen}=this;if(!it.opts.unevaluated)return;if(it.props!==true&&schemaCxt.props!==void 0)it.props=util_1.mergeEvaluated.props(gen,schemaCxt.props,it.props,toName);if(it.items!==true&&schemaCxt.items!==void 0)it.items=util_1.mergeEvaluated.items(gen,schemaCxt.items,it.items,toName)}mergeValidEvaluated(schemaCxt,valid){const{it,gen}=this;if(it.opts.unevaluated&&(it.props!==true||it.items!==true)){gen.if(valid,()=>this.mergeEvaluated(schemaCxt,codegen_1.Name));return true}}};exports.KeywordCxt=KeywordCxt;function keywordCode(it,keyword,def,ruleType){const cxt=new KeywordCxt(it,def,keyword);if(`code`in def)def.code(cxt,ruleType);else if(cxt.$data&&def.validate)(0,keyword_1.funcKeywordCode)(cxt,def);else if(`macro`in def)(0,keyword_1.macroKeywordCode)(cxt,def);else if(def.compile||def.validate)(0,keyword_1.funcKeywordCode)(cxt,def)}var JSON_POINTER=/^\/(?:[^~]|~0|~1)*$/;var RELATIVE_JSON_POINTER=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function getData($data,{dataLevel,dataNames,dataPathArr}){let jsonPointer;let data;if($data===``)return names_1.default.rootData;if($data[0]===`/`){if(!JSON_POINTER.test($data))throw new Error(`Invalid JSON-pointer: ${$data}`);jsonPointer=$data;data=names_1.default.rootData}else{const matches=RELATIVE_JSON_POINTER.exec($data);if(!matches)throw new Error(`Invalid JSON-pointer: ${$data}`);const up=+matches[1];jsonPointer=matches[2];if(jsonPointer===`#`){if(up>=dataLevel)throw new Error(errorMsg(`property/index`,up));return dataPathArr[dataLevel-up]}if(up>dataLevel)throw new Error(errorMsg(`data`,up));data=dataNames[dataLevel-up];if(!jsonPointer)return data}let expr=data;const segments=jsonPointer.split(`/`);for(const segment of segments)if(segment){data=(0,codegen_1._)`${data}${(0,codegen_1.getProperty)((0,util_1.unescapeJsonPointer)(segment))}`;expr=(0,codegen_1._)`${expr} && ${data}`}return expr;function errorMsg(pointerType,up){return`Cannot access ${pointerType} ${up} levels up, current level is ${dataLevel}`}}exports.getData=getData}));var require_validation_error=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var ValidationError=class extends Error{constructor(errors){super(`validation failed`);this.errors=errors;this.ajv=this.validation=true}};exports.default=ValidationError}));var require_ref_error=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var resolve_1=require_resolve();var MissingRefError=class extends Error{constructor(resolver,baseId,ref,msg){super(msg||`can't resolve reference ${ref} from id ${baseId}`);this.missingRef=(0,resolve_1.resolveUrl)(resolver,baseId,ref);this.missingSchema=(0,resolve_1.normalizeId)((0,resolve_1.getFullPath)(resolver,this.missingRef))}};exports.default=MissingRefError}));var require_compile=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.resolveSchema=exports.getCompilingSchema=exports.resolveRef=exports.compileSchema=exports.SchemaEnv=void 0;var codegen_1=require_codegen();var validation_error_1=require_validation_error();var names_1=require_names();var resolve_1=require_resolve();var util_1=require_util();var validate_1=require_validate();var SchemaEnv=class{constructor(env){var _a;this.refs={};this.dynamicAnchors={};let schema;if(typeof env.schema==`object`)schema=env.schema;this.schema=env.schema;this.schemaId=env.schemaId;this.root=env.root||this;this.baseId=(_a=env.baseId)!==null&&_a!==void 0?_a:(0,resolve_1.normalizeId)(schema===null||schema===void 0?void 0:schema[env.schemaId||`$id`]);this.schemaPath=env.schemaPath;this.localRefs=env.localRefs;this.meta=env.meta;this.$async=schema===null||schema===void 0?void 0:schema.$async;this.refs={}}};exports.SchemaEnv=SchemaEnv;function compileSchema(sch){const _sch=getCompilingSchema.call(this,sch);if(_sch)return _sch;const rootId=(0,resolve_1.getFullPath)(this.opts.uriResolver,sch.root.baseId);const{es5,lines}=this.opts.code;const{ownProperties}=this.opts;const gen=new codegen_1.CodeGen(this.scope,{es5,lines,ownProperties});let _ValidationError;if(sch.$async)_ValidationError=gen.scopeValue(`Error`,{ref:validation_error_1.default,code:(0,codegen_1._)`require("ajv/dist/runtime/validation_error").default`});const validateName=gen.scopeName(`validate`);sch.validateName=validateName;const schemaCxt={gen,allErrors:this.opts.allErrors,data:names_1.default.data,parentData:names_1.default.parentData,parentDataProperty:names_1.default.parentDataProperty,dataNames:[names_1.default.data],dataPathArr:[codegen_1.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:gen.scopeValue(`schema`,this.opts.code.source===true?{ref:sch.schema,code:(0,codegen_1.stringify)(sch.schema)}:{ref:sch.schema}),validateName,ValidationError:_ValidationError,schema:sch.schema,schemaEnv:sch,rootId,baseId:sch.baseId||rootId,schemaPath:codegen_1.nil,errSchemaPath:sch.schemaPath||(this.opts.jtd?``:`#`),errorPath:(0,codegen_1._)`""`,opts:this.opts,self:this};let sourceCode;try{this._compilations.add(sch);(0,validate_1.validateFunctionCode)(schemaCxt);gen.optimize(this.opts.code.optimize);const validateCode=gen.toString();sourceCode=`${gen.scopeRefs(names_1.default.scope)}return ${validateCode}`;if(this.opts.code.process)sourceCode=this.opts.code.process(sourceCode,sch);const validate=new Function(`${names_1.default.self}`,`${names_1.default.scope}`,sourceCode)(this,this.scope.get());this.scope.value(validateName,{ref:validate});validate.errors=null;validate.schema=sch.schema;validate.schemaEnv=sch;if(sch.$async)validate.$async=true;if(this.opts.code.source===true)validate.source={validateName,validateCode,scopeValues:gen._values};if(this.opts.unevaluated){const{props,items}=schemaCxt;validate.evaluated={props:props instanceof codegen_1.Name?void 0:props,items:items instanceof codegen_1.Name?void 0:items,dynamicProps:props instanceof codegen_1.Name,dynamicItems:items instanceof codegen_1.Name};if(validate.source)validate.source.evaluated=(0,codegen_1.stringify)(validate.evaluated)}sch.validate=validate;return sch}catch(e){delete sch.validate;delete sch.validateName;if(sourceCode)this.logger.error(`Error compiling schema, function code:`,sourceCode);throw e}finally{this._compilations.delete(sch)}}exports.compileSchema=compileSchema;function resolveRef(root,baseId,ref){var _a;ref=(0,resolve_1.resolveUrl)(this.opts.uriResolver,baseId,ref);const schOrFunc=root.refs[ref];if(schOrFunc)return schOrFunc;let _sch=resolve.call(this,root,ref);if(_sch===void 0){const schema=(_a=root.localRefs)===null||_a===void 0?void 0:_a[ref];const{schemaId}=this.opts;if(schema)_sch=new SchemaEnv({schema,schemaId,root,baseId})}if(_sch===void 0)return;return root.refs[ref]=inlineOrCompile.call(this,_sch)}exports.resolveRef=resolveRef;function inlineOrCompile(sch){if((0,resolve_1.inlineRef)(sch.schema,this.opts.inlineRefs))return sch.schema;return sch.validate?sch:compileSchema.call(this,sch)}function getCompilingSchema(schEnv){for(const sch of this._compilations)if(sameSchemaEnv(sch,schEnv))return sch}exports.getCompilingSchema=getCompilingSchema;function sameSchemaEnv(s1,s2){return s1.schema===s2.schema&&s1.root===s2.root&&s1.baseId===s2.baseId}function resolve(root,ref){let sch;while(typeof(sch=this.refs[ref])==`string`)ref=sch;return sch||this.schemas[ref]||resolveSchema.call(this,root,ref)}function resolveSchema(root,ref){const p=this.opts.uriResolver.parse(ref);const refPath=(0,resolve_1._getFullPath)(this.opts.uriResolver,p);let baseId=(0,resolve_1.getFullPath)(this.opts.uriResolver,root.baseId,void 0);if(Object.keys(root.schema).length>0&&refPath===baseId)return getJsonPointer.call(this,p,root);const id=(0,resolve_1.normalizeId)(refPath);const schOrRef=this.refs[id]||this.schemas[id];if(typeof schOrRef==`string`){const sch=resolveSchema.call(this,root,schOrRef);if(typeof(sch===null||sch===void 0?void 0:sch.schema)!==`object`)return;return getJsonPointer.call(this,p,sch)}if(typeof(schOrRef===null||schOrRef===void 0?void 0:schOrRef.schema)!==`object`)return;if(!schOrRef.validate)compileSchema.call(this,schOrRef);if(id===(0,resolve_1.normalizeId)(ref)){const{schema}=schOrRef;const{schemaId}=this.opts;const schId=schema[schemaId];if(schId)baseId=(0,resolve_1.resolveUrl)(this.opts.uriResolver,baseId,schId);return new SchemaEnv({schema,schemaId,root,baseId})}return getJsonPointer.call(this,p,schOrRef)}exports.resolveSchema=resolveSchema;var PREVENT_SCOPE_CHANGE=new Set([`properties`,`patternProperties`,`enum`,`dependencies`,`definitions`]);function getJsonPointer(parsedRef,{baseId,schema,root}){var _a;if(((_a=parsedRef.fragment)===null||_a===void 0?void 0:_a[0])!==`/`)return;for(const part of parsedRef.fragment.slice(1).split(`/`)){if(typeof schema===`boolean`)return;const partSchema=schema[(0,util_1.unescapeFragment)(part)];if(partSchema===void 0)return;schema=partSchema;const schId=typeof schema===`object`&&schema[this.opts.schemaId];if(!PREVENT_SCOPE_CHANGE.has(part)&&schId)baseId=(0,resolve_1.resolveUrl)(this.opts.uriResolver,baseId,schId)}let env;if(typeof schema!=`boolean`&&schema.$ref&&!(0,util_1.schemaHasRulesButRef)(schema,this.RULES)){const $ref=(0,resolve_1.resolveUrl)(this.opts.uriResolver,baseId,schema.$ref);env=resolveSchema.call(this,root,$ref)}const{schemaId}=this.opts;env=env||new SchemaEnv({schema,schemaId,root,baseId});if(env.schema!==env.root.schema)return env}}));var data_exports=__exportAll({$id:()=>$id$1,additionalProperties:()=>false,default:()=>data_default,description:()=>description,properties:()=>properties$2,required:()=>required$1,type:()=>type$2});var $id$1,description,type$2,required$1,properties$2,additionalProperties$1,data_default;var init_data=__esmMin((()=>{$id$1=`https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#`;description=`Meta-schema for $data reference (JSON AnySchema extension proposal)`;type$2=`object`;required$1=[`$data`];properties$2={"$data":{"type":`string`,"anyOf":[{"format":`relative-json-pointer`},{"format":`json-pointer`}]}};additionalProperties$1=false;data_default={$id:$id$1,description,type:type$2,required:required$1,properties:properties$2,additionalProperties:false}}));var require_utils=__commonJSMin(((exports,module)=>{var isUUID=RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu);var isIPv4=RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u);var isPort=RegExp.prototype.test.bind(/^\d*$/u);var isHexPair=RegExp.prototype.test.bind(/^[\da-f]{2}$/iu);var isUnreserved=RegExp.prototype.test.bind(/^[\da-z\-._~]$/iu);var isPathCharacter=RegExp.prototype.test.bind(/^[A-Za-z0-9\-._~!$&'()*+,;=:@/]$/u);var isQueryFragmentCharacter=RegExp.prototype.test.bind(/^[A-Za-z0-9\-._~!$&'()*+,;=:@/?]$/u);var isUserinfoCharacter=RegExp.prototype.test.bind(/^[A-Za-z0-9\-._~!$&'()*+,;=:]$/u);var BYTE_HEX=new Array(256);{const HEX_DIGITS=`0123456789ABCDEF`;for(let i=0;i<256;i++)BYTE_HEX[i]=`%`+HEX_DIGITS[i>>4]+HEX_DIGITS[i&15]}function percentEncodeNonAscii(cp){if(cp<2048)return BYTE_HEX[192|cp>>6]+BYTE_HEX[128|cp&63];if(cp<65536)return BYTE_HEX[224|cp>>12]+BYTE_HEX[128|cp>>6&63]+BYTE_HEX[128|cp&63];return BYTE_HEX[240|cp>>18]+BYTE_HEX[128|cp>>12&63]+BYTE_HEX[128|cp>>6&63]+BYTE_HEX[128|cp&63]}function stringArrayToHexStripped(input){let acc=``;let code=0;let i=0;for(i=0;i<input.length;i++){code=input[i].charCodeAt(0);if(code===48)continue;if(!(code>=48&&code<=57||code>=65&&code<=70||code>=97&&code<=102))return``;acc+=input[i];break}for(i+=1;i<input.length;i++){code=input[i].charCodeAt(0);if(!(code>=48&&code<=57||code>=65&&code<=70||code>=97&&code<=102))return``;acc+=input[i]}return acc}var isHextet=RegExp.prototype.test.bind(/^[\dA-Fa-f]{1,4}$/);var isIPvFuture=RegExp.prototype.test.bind(/^[vV][\dA-Fa-f]+\.[A-Za-z\d\-._~!$&'()*+,;=:]+$/);var isZoneCharacter=RegExp.prototype.test.bind(/^[A-Za-z\d\-._~]$/);var nonSimpleDomain=RegExp.prototype.test.bind(/[^!"$&'()*+,\-.;=_`a-z{}~]/u);function isZoneIdentifier(zone){if(zone.length===0)return false;for(let i=0;i<zone.length;i++){if(isZoneCharacter(zone[i]))continue;if(zone[i]===`%`&&i+2<zone.length&&isHexPair(zone.slice(i+1,i+3))){i+=2;continue}return false}return true}function compressIPv6ZeroRun(hextets){let bestStart=-1;let bestLength=0;let runStart=-1;let runLength=0;for(let i=0;i<hextets.length;i++)if(hextets[i]===`0`){if(runStart===-1)runStart=i;runLength++;if(runLength>bestLength){bestLength=runLength;bestStart=runStart}}else{runStart=-1;runLength=0}if(bestLength<2)return hextets.join(`:`);const head=hextets.slice(0,bestStart).join(`:`);const tail=hextets.slice(bestStart+bestLength).join(`:`);return head+`::`+tail}function normalizeIPv6Address(input){const compression=input.indexOf(`::`);if(compression!==-1&&input.indexOf(`::`,compression+1)!==-1)return void 0;const left=compression===-1?input.split(`:`):input.slice(0,compression).split(`:`);const right=compression===-1?[]:input.slice(compression+2).split(`:`);if(compression!==-1){if(left.length===1&&left[0]===``)left.length=0;if(right.length===1&&right[0]===``)right.length=0}const parts=left.concat(right);let hextetCount=0;for(let i=0;i<parts.length;i++){const part=parts[i];if(part===``)return void 0;if(part.indexOf(`.`)!==-1){if(i!==parts.length-1||compression!==-1&&right.length===0||!isIPv4(part))return void 0;hextetCount+=2;continue}if(!isHextet(part))return void 0;parts[i]=parseInt(part,16).toString(16);hextetCount++}if(compression===-1){if(hextetCount!==8)return void 0;return compressIPv6ZeroRun(parts)}if(hextetCount>=8)return void 0;const expanded=parts.slice(0,left.length);for(let i=hextetCount;i<8;i++)expanded.push(`0`);for(let i=left.length;i<parts.length;i++)expanded.push(parts[i]);return compressIPv6ZeroRun(expanded)}function normalizeIPv6(host){const bracketed=host[0]===`[`&&host[host.length-1]===`]`;if((host[0]===`[`||host[host.length-1]===`]`)&&!bracketed)return{host,isIPV6:false,error:true};let input=bracketed?host.slice(1,-1):host;if(bracketed&&isIPvFuture(input)){input=input.toLowerCase();return{host:`[${input}]`,escapedHost:input,isIPV6:false,isIPVFuture:true}}if(findToken(input,`:`)<2)return{host,isIPV6:false,error:bracketed};let zoneIdentifier=``;const zoneSeparator=input.indexOf(`%`);if(zoneSeparator!==-1){const separatorLength=input.slice(zoneSeparator,zoneSeparator+3).toLowerCase()===`%25`?3:1;zoneIdentifier=input.slice(zoneSeparator+separatorLength);if(!isZoneIdentifier(zoneIdentifier))return{host,isIPV6:false,error:true};input=input.slice(0,zoneSeparator)}const address=normalizeIPv6Address(input);if(address===void 0)return{host,isIPV6:false,error:true};return{host:address+(zoneIdentifier?`%`+zoneIdentifier:``),escapedHost:address+(zoneIdentifier?`%25`+zoneIdentifier:``),isIPV6:true}}function findToken(str,token){let ind=0;for(let i=0;i<str.length;i++)if(str[i]===token)ind++;return ind}function removeDotSegments(path){let input=path;const output=[];let nextSlash=-1;let len=0;while(len=input.length){if(len===1){if(input===`.`)break;else if(input===`/`){output.push(`/`);break}else{output.push(input);break}}else if(len===2){if(input[0]===`.`){if(input[1]===`.`)break;else if(input[1]===`/`){input=input.slice(2);continue}}else if(input[0]===`/`){if(input[1]===`.`||input[1]===`/`){output.push(`/`);break}}}else if(len===3){if(input===`/..`){if(output.length!==0)output.pop();output.push(`/`);break}}if(input[0]===`.`){if(input[1]===`.`){if(input[2]===`/`){input=input.slice(3);continue}}else if(input[1]===`/`){input=input.slice(2);continue}}else if(input[0]===`/`){if(input[1]===`.`){if(input[2]===`/`){input=input.slice(2);continue}else if(input[2]===`.`){if(input[3]===`/`){input=input.slice(3);if(output.length!==0)output.pop();continue}}}}if((nextSlash=input.indexOf(`/`,1))===-1){output.push(input);break}else{output.push(input.slice(0,nextSlash));input=input.slice(nextSlash)}}return output.join(``)}var HOST_DELIMS={"@":`%40`,"/":`%2F`,"?":`%3F`,"#":`%23`,":":`%3A`};var HOST_DELIM_RE=/[@/?#:]/g;var HOST_DELIM_NO_COLON_RE=/[@/?#]/g;function reescapeHostDelimiters(host,isIP){const re=isIP?HOST_DELIM_NO_COLON_RE:HOST_DELIM_RE;re.lastIndex=0;return host.replace(re,ch=>HOST_DELIMS[ch])}function normalizePercentEncoding(input,decodeUnreserved=false){if(input.indexOf(`%`)===-1)return input;let output=``;for(let i=0;i<input.length;i++){if(input[i]===`%`&&i+2<input.length){const hex=input.slice(i+1,i+3);if(isHexPair(hex)){const normalizedHex=hex.toUpperCase();const decoded=String.fromCharCode(parseInt(normalizedHex,16));if(decodeUnreserved&&isUnreserved(decoded))output+=decoded;else output+=`%`+normalizedHex;i+=2;continue}}output+=input[i]}return output}function normalizePathEncoding(input){let output=``;for(let i=0;i<input.length;i++){const ch=input[i];if(ch===`%`&&i+2<input.length){const hex=input.slice(i+1,i+3);if(isHexPair(hex)){const normalizedHex=hex.toUpperCase();const decoded=String.fromCharCode(parseInt(normalizedHex,16));if(decoded!==`.`&&isUnreserved(decoded))output+=decoded;else output+=`%`+normalizedHex;i+=2;continue}}if(isPathCharacter(ch))output+=ch;else{const code=input.charCodeAt(i);if(code<128)output+=isEscapeSafe(code)?ch:BYTE_HEX[code];else if(code<55296||code>57343)output+=percentEncodeNonAscii(code);else if(code<=56319&&i+1<input.length){const low=input.charCodeAt(i+1);if(low>=56320&&low<=57343){output+=percentEncodeNonAscii(65536+(code-55296<<10)+(low-56320));i++}else output+=percentEncodeNonAscii(65533)}else output+=percentEncodeNonAscii(65533)}}return output}function serializePathEncoding(input,pathNoScheme=false){let output=``;let firstSegment=pathNoScheme&&input[0]!==`/`;for(let i=0;i<input.length;i++){const ch=input[i];if(ch===`%`&&i+2<input.length){const hex=input.slice(i+1,i+3);if(isHexPair(hex)){output+=`%`+hex.toUpperCase();i+=2;continue}}if(ch===`/`)firstSegment=false;if(isPathCharacter(ch)&&(ch!==`:`||!firstSegment))output+=ch;else{const code=input.charCodeAt(i);if(code<128)output+=BYTE_HEX[code];else if(code<55296||code>57343)output+=percentEncodeNonAscii(code);else if(code<=56319&&i+1<input.length){const low=input.charCodeAt(i+1);if(low>=56320&&low<=57343){output+=percentEncodeNonAscii(65536+(code-55296<<10)+(low-56320));i++}else output+=percentEncodeNonAscii(65533)}else output+=percentEncodeNonAscii(65533)}}return output}function encodeComponent(input,isAllowed){let output=``;for(let i=0;i<input.length;i++){const ch=input[i];if(ch===`%`&&i+2<input.length){const hex=input.slice(i+1,i+3);if(isHexPair(hex)){output+=`%`+hex.toUpperCase();i+=2;continue}}if(isAllowed(ch))output+=ch;else{const code=input.charCodeAt(i);if(code<128)output+=BYTE_HEX[code];else if(code<55296||code>57343)output+=percentEncodeNonAscii(code);else if(code<=56319&&i+1<input.length){const low=input.charCodeAt(i+1);if(low>=56320&&low<=57343){output+=percentEncodeNonAscii(65536+(code-55296<<10)+(low-56320));i++}else output+=percentEncodeNonAscii(65533)}else output+=percentEncodeNonAscii(65533)}}return output}function encodeUserinfo(input){return encodeComponent(input,isUserinfoCharacter)}function encodeQuery(input){return encodeComponent(input,isQueryFragmentCharacter)}function encodeFragment(input){return encodeComponent(input,isQueryFragmentCharacter)}function isEscapeSafe(cp){return cp>=48&&cp<=57||cp>=65&&cp<=90||cp>=97&&cp<=122||cp===42||cp===43||cp===45||cp===46||cp===47||cp===64||cp===95}function normalizeQueryFragmentEncoding(input){let output=``;for(let i=0;i<input.length;i++){const ch=input[i];if(ch===`%`&&i+2<input.length){const hex=input.slice(i+1,i+3);if(isHexPair(hex)){const normalizedHex=hex.toUpperCase();const decoded=String.fromCharCode(parseInt(normalizedHex,16));if(isUnreserved(decoded))output+=decoded;else output+=`%`+normalizedHex;i+=2;continue}}if(isQueryFragmentCharacter(ch))output+=ch;else{const code=input.charCodeAt(i);if(code<128)output+=isEscapeSafe(code)?ch:BYTE_HEX[code];else if(code<55296||code>57343)output+=percentEncodeNonAscii(code);else if(code<=56319&&i+1<input.length){const low=input.charCodeAt(i+1);if(low>=56320&&low<=57343){output+=percentEncodeNonAscii(65536+(code-55296<<10)+(low-56320));i++}else output+=percentEncodeNonAscii(65533)}else output+=percentEncodeNonAscii(65533)}}return output}function escapePreservingEscapes(input){let output=``;for(let i=0;i<input.length;i++){if(input[i]===`%`&&i+2<input.length){const hex=input.slice(i+1,i+3);if(isHexPair(hex)){output+=`%`+hex.toUpperCase();i+=2;continue}}output+=escape(input[i])}return output}function recomposeAuthority(component){const uriTokens=[];if(component.userinfo!==void 0){uriTokens.push(encodeUserinfo(component.userinfo));uriTokens.push(`@`)}if(component.host!==void 0){let host=component.host;if(!isIPv4(host)){let ipV6res=normalizeIPv6(host);if(ipV6res.isIPV6!==true&&ipV6res.isIPVFuture!==true){host=normalizePercentEncoding(host,true);ipV6res=normalizeIPv6(host)}if(ipV6res.isIPV6===true||ipV6res.isIPVFuture===true)host=`[${ipV6res.escapedHost}]`;else host=reescapeHostDelimiters(host,false)}uriTokens.push(host)}if(typeof component.port===`number`||typeof component.port===`string`){const port=String(component.port);if(!isPort(port))throw new TypeError(`URI port is malformed.`);uriTokens.push(`:`);uriTokens.push(port)}return uriTokens.length?uriTokens.join(``):void 0}module.exports={nonSimpleDomain,recomposeAuthority,reescapeHostDelimiters,normalizePercentEncoding,normalizePathEncoding,serializePathEncoding,normalizeQueryFragmentEncoding,encodeUserinfo,encodeQuery,encodeFragment,escapePreservingEscapes,removeDotSegments,isIPv4,isUUID,normalizeIPv6,stringArrayToHexStripped}}));var require_schemes=__commonJSMin(((exports,module)=>{var{isUUID}=require_utils();var URN_REG=/^([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-./:;=@]|%[\da-f]{2})+)$/iu;var supportedSchemeNames=[`http`,`https`,`ws`,`wss`,`urn`,`urn:uuid`];function isValidSchemeName(name){return supportedSchemeNames.indexOf(name)!==-1}function wsIsSecure(wsComponent){if(wsComponent.secure===true)return true;else if(wsComponent.secure===false)return false;else if(wsComponent.scheme)return wsComponent.scheme.length===3&&(wsComponent.scheme[0]===`w`||wsComponent.scheme[0]===`W`)&&(wsComponent.scheme[1]===`s`||wsComponent.scheme[1]===`S`)&&(wsComponent.scheme[2]===`s`||wsComponent.scheme[2]===`S`);else return false}function httpParse(component){if(!component.host)component.error=component.error||`HTTP URIs must have a host.`;return component}function httpSerialize(component){const secure=String(component.scheme).toLowerCase()===`https`;if(component.port===(secure?443:80)||component.port===``)component.port=void 0;if(!component.path)component.path=`/`;return component}function wsParse(wsComponent){wsComponent.secure=wsIsSecure(wsComponent);wsComponent.resourceName=(wsComponent.path||`/`)+(wsComponent.query?`?`+wsComponent.query:``);wsComponent.path=void 0;wsComponent.query=void 0;return wsComponent}function wsSerialize(wsComponent){if(wsComponent.port===(wsIsSecure(wsComponent)?443:80)||wsComponent.port===``)wsComponent.port=void 0;if(typeof wsComponent.secure===`boolean`){wsComponent.scheme=wsComponent.secure?`wss`:`ws`;wsComponent.secure=void 0}if(wsComponent.resourceName){const queryIndex=wsComponent.resourceName.indexOf(`?`);const path=queryIndex===-1?wsComponent.resourceName:wsComponent.resourceName.slice(0,queryIndex);wsComponent.path=path&&path!==`/`?path:void 0;wsComponent.query=queryIndex===-1?void 0:wsComponent.resourceName.slice(queryIndex+1);wsComponent.resourceName=void 0}wsComponent.fragment=void 0;return wsComponent}function urnParse(urnComponent,options){if(!urnComponent.path){urnComponent.error=`URN can not be parsed`;return urnComponent}const matches=urnComponent.path.match(URN_REG);if(matches&&matches[0]===urnComponent.path){const scheme=options.scheme||urnComponent.scheme||`urn`;urnComponent.nid=matches[1].toLowerCase();urnComponent.nss=matches[2];const schemeHandler=getSchemeHandler(`${scheme}:${options.nid||urnComponent.nid}`);urnComponent.path=void 0;if(schemeHandler)urnComponent=schemeHandler.parse(urnComponent,options)}else urnComponent.error=urnComponent.error||`URN can not be parsed.`;return urnComponent}function urnSerialize(urnComponent,options){if(urnComponent.nid===void 0)throw new Error(`URN without nid cannot be serialized`);const scheme=options.scheme||urnComponent.scheme||`urn`;const nid=urnComponent.nid.toLowerCase();const schemeHandler=getSchemeHandler(`${scheme}:${options.nid||nid}`);if(schemeHandler)urnComponent=schemeHandler.serialize(urnComponent,options);const uriComponent=urnComponent;const nss=urnComponent.nss;uriComponent.path=`${nid||options.nid}:${nss}`;options.skipEscape=true;return uriComponent}function urnuuidParse(urnComponent,options){const uuidComponent=urnComponent;uuidComponent.uuid=uuidComponent.nss;uuidComponent.nss=void 0;if(!options.tolerant&&(!uuidComponent.uuid||!isUUID(uuidComponent.uuid)))uuidComponent.error=uuidComponent.error||`UUID is not valid.`;return uuidComponent}function urnuuidSerialize(uuidComponent){const urnComponent=uuidComponent;urnComponent.nss=(uuidComponent.uuid||``).toLowerCase();return urnComponent}var http={scheme:`http`,domainHost:true,parse:httpParse,serialize:httpSerialize};var https={scheme:`https`,domainHost:http.domainHost,parse:httpParse,serialize:httpSerialize};var ws={scheme:`ws`,domainHost:true,parse:wsParse,serialize:wsSerialize};var SCHEMES={http,https,ws,wss:{scheme:`wss`,domainHost:ws.domainHost,parse:ws.parse,serialize:ws.serialize},urn:{scheme:`urn`,parse:urnParse,serialize:urnSerialize,skipNormalize:true},"urn:uuid":{scheme:`urn:uuid`,parse:urnuuidParse,serialize:urnuuidSerialize,skipNormalize:true}};Object.setPrototypeOf(SCHEMES,null);function getSchemeHandler(scheme){return scheme&&(SCHEMES[scheme]||SCHEMES[scheme.toLowerCase()])||void 0}module.exports={wsIsSecure,SCHEMES,isValidSchemeName,getSchemeHandler}}));var require_fast_uri=__commonJSMin(((exports,module)=>{var{normalizeIPv6,removeDotSegments,recomposeAuthority,normalizePercentEncoding,normalizePathEncoding,serializePathEncoding,normalizeQueryFragmentEncoding,encodeQuery,encodeFragment,reescapeHostDelimiters,isIPv4,nonSimpleDomain}=require_utils();var{SCHEMES,getSchemeHandler}=require_schemes();var VALID_SCHEME=/^[A-Za-z][A-Za-z0-9+.-]*$/u;var MALFORMED_SCHEME_ERROR=`URI scheme is malformed.`;function decodeValidScheme(scheme){const decodedScheme=unescape(String(scheme));if(!VALID_SCHEME.test(decodedScheme))throw new TypeError(MALFORMED_SCHEME_ERROR);return decodedScheme}function normalize(uri,options){if(typeof uri===`string`)uri=normalizeString(uri,options);else if(typeof uri===`object`)uri=parse(serialize(uri,options),options);return uri}function resolve(baseURI,relativeURI,options){const schemelessOptions=options?Object.assign({scheme:`null`},options):{scheme:`null`};const{parsed:baseParsed,malformedAuthorityOrPort:baseMalformed,malformedPercentEncoding:baseMalformedPercentEncoding,malformedSchemeSpecific:baseMalformedSchemeSpecific,malformedHost:baseMalformedHost,malformedScheme:baseMalformedScheme}=parseWithStatus(baseURI,schemelessOptions);const{parsed:relativeParsed,malformedAuthorityOrPort:relativeMalformed,malformedPercentEncoding:relativeMalformedPercentEncoding,malformedSchemeSpecific:relativeMalformedSchemeSpecific,malformedHost:relativeMalformedHost,malformedScheme:relativeMalformedScheme}=parseWithStatus(relativeURI,schemelessOptions);if(baseMalformed||relativeMalformed||baseMalformedPercentEncoding||relativeMalformedPercentEncoding||baseMalformedSchemeSpecific||relativeMalformedSchemeSpecific||baseMalformedHost||relativeMalformedHost||baseMalformedScheme||relativeMalformedScheme)throw new Error(baseParsed.error||relativeParsed.error||`URI is malformed.`);const resolved=resolveComponent(baseParsed,relativeParsed,schemelessOptions,true);const resolvedSchemeHandler=getSchemeHandler(options&&options.scheme||resolved.scheme);const resolvedHost=resolved.host;const resolvedHostIsIP=resolvedHost!==void 0&&resolvedHost!==``&&(isIPv4(resolvedHost)||normalizeIPv6(resolvedHost).isIPV6);canonicalizeHost(resolved,options||{},resolvedSchemeHandler,resolvedHostIsIP);const encodedASCIIHost=resolvedHost&&resolvedHost.indexOf(`%`)!==-1&&!/\P{ASCII}/u.test(resolvedHost);if(resolved.error&&!encodedASCIIHost)throw new Error(resolved.error);schemelessOptions.skipEscape=true;return serialize(resolved,schemelessOptions)}function resolveComponent(base,relative,options,skipNormalization){const target={};if(!skipNormalization){base=parse(serialize(base,options),options);relative=parse(serialize(relative,options),options)}options=options||{};if(!options.tolerant&&relative.scheme){target.scheme=relative.scheme;target.userinfo=relative.userinfo;target.host=relative.host;target.port=relative.port;target.path=removeDotSegments(relative.path||``);target.query=relative.query}else{if(relative.userinfo!==void 0||relative.host!==void 0||relative.port!==void 0){target.userinfo=relative.userinfo;target.host=relative.host;target.port=relative.port;target.path=removeDotSegments(relative.path||``);target.query=relative.query}else{if(!relative.path){target.path=base.path;if(relative.query!==void 0)target.query=relative.query;else target.query=base.query}else{if(relative.path[0]===`/`)target.path=removeDotSegments(relative.path);else{if((base.userinfo!==void 0||base.host!==void 0||base.port!==void 0)&&!base.path)target.path=`/`+relative.path;else if(!base.path)target.path=relative.path;else target.path=base.path.slice(0,base.path.lastIndexOf(`/`)+1)+relative.path;target.path=removeDotSegments(target.path)}target.query=relative.query}target.userinfo=base.userinfo;target.host=base.host;target.port=base.port}target.scheme=base.scheme}target.fragment=relative.fragment;return target}function equal(uriA,uriB,options){const normalizedA=normalizeComparableURI(uriA,options);const normalizedB=normalizeComparableURI(uriB,options);return normalizedA!==void 0&&normalizedB!==void 0&&normalizedA===normalizedB}function serialize(cmpts,opts){const component={host:cmpts.host,scheme:cmpts.scheme,userinfo:cmpts.userinfo,port:cmpts.port,path:cmpts.path,query:cmpts.query,nid:cmpts.nid,nss:cmpts.nss,uuid:cmpts.uuid,fragment:cmpts.fragment,reference:cmpts.reference,resourceName:cmpts.resourceName,secure:cmpts.secure,error:``};const options=Object.assign({},opts);const uriTokens=[];if(component.scheme)component.scheme=decodeValidScheme(component.scheme);const schemeHandler=getSchemeHandler(options.scheme||component.scheme);if(schemeHandler&&schemeHandler.serialize)schemeHandler.serialize(component,options);const hasAuthority=component.userinfo!==void 0||component.host!==void 0||component.port!==void 0;const pathNoScheme=!options.skipEscape&&component.scheme===void 0&&!hasAuthority;if(component.path!==void 0){if(!options.skipEscape)component.path=serializePathEncoding(component.path,pathNoScheme);else component.path=normalizePercentEncoding(component.path)}if(options.reference!==`suffix`&&component.scheme){component.scheme=decodeValidScheme(component.scheme);uriTokens.push(component.scheme,`:`)}const authority=recomposeAuthority(component);if(authority!==void 0){if(options.reference!==`suffix`)uriTokens.push(`//`);uriTokens.push(authority);if(component.path&&component.path[0]!==`/`)uriTokens.push(`/`)}if(component.path!==void 0){let s=component.path;if(!options.absolutePath&&(!schemeHandler||!schemeHandler.absolutePath))s=removeDotSegments(s);if(pathNoScheme)s=serializePathEncoding(s,true);if(authority===void 0&&s[0]===`/`&&s[1]===`/`)s=`/%2F`+s.slice(2);uriTokens.push(s)}if(component.query!==void 0)uriTokens.push(`?`,encodeQuery(component.query));if(component.fragment!==void 0)uriTokens.push(`#`,encodeFragment(component.fragment));return uriTokens.join(``)}var URI_PARSE=/^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u;var AUTHORITY_PREFIX=/^(?:[^#/:?]+:)?\/\/([^/?#]*)/;var AUTHORITY_INTRODUCER_REGION=/^(?:[^#/:?]+:)?([/\\\t\n\r]*)/;function getParseError(parsed,matches){if(matches[2]!==void 0&&parsed.path&&parsed.path[0]!==`/`)return`URI path must start with "/" when authority is present.`;if(typeof parsed.port===`number`&&(parsed.port<0||parsed.port>65535))return`URI port is malformed.`}function hasMalformedPercentEncoding(component){if(component===void 0)return false;let percent=component.indexOf(`%`);while(percent!==-1){if(percent+2>=component.length||!/^[\da-f]{2}$/iu.test(component.slice(percent+1,percent+3)))return true;percent=component.indexOf(`%`,percent+3)}return false}function isIPLiteral(host){return host[0]===`[`&&host[host.length-1]===`]`}function hasMalformedComponentPercentEncoding(matches){const host=matches[4];return hasMalformedPercentEncoding(matches[3])||host!==void 0&&!isIPLiteral(host)&&hasMalformedPercentEncoding(host)||hasMalformedPercentEncoding(matches[6])||hasMalformedPercentEncoding(matches[7])||hasMalformedPercentEncoding(matches[8])}function canonicalizeHost(parsed,options,schemeHandler,isIP){if(!options.unicodeSupport&&(!schemeHandler||!schemeHandler.unicodeSupport)&&parsed.host&&!isIPLiteral(parsed.host)&&(options.domainHost||schemeHandler&&schemeHandler.domainHost)&&isIP===false&&nonSimpleDomain(parsed.host))try{parsed.host=new URL(`http://`+parsed.host).hostname}catch(e){parsed.error=parsed.error||`Host's domain name can not be converted to ASCII: `+e;return true}return false}function parseWithStatus(uri,opts){const options=Object.assign({},opts);const parsed={scheme:void 0,userinfo:void 0,host:``,port:void 0,path:``,query:void 0,fragment:void 0};let malformedAuthorityOrPort=false;let malformedPercentEncoding=false;let malformedSchemeSpecific=false;let malformedHost=false;let malformedIPLiteral=false;let malformedScheme=false;let isIP=false;if(options.reference===`suffix`){if(options.scheme)uri=options.scheme+`:`+uri;else uri=`//`+uri}const authorityMatch=uri.match(AUTHORITY_PREFIX);if(authorityMatch!==null&&authorityMatch[1].indexOf(`\\`)!==-1){parsed.error=`URI authority must not contain a literal backslash.`;malformedAuthorityOrPort=true}const introducerMatch=uri.match(AUTHORITY_INTRODUCER_REGION);if(introducerMatch!==null){const region=introducerMatch[1];const normalizedRegion=region.replace(/[\t\n\r]/g,``);if(normalizedRegion.length>=2){if(normalizedRegion.slice(0,2)!==`//`){parsed.error=parsed.error||`URI authority must not contain a literal backslash.`;malformedAuthorityOrPort=true}else if(region.length!==normalizedRegion.length){parsed.error=parsed.error||`URI authority introducer must not contain whitespace.`;malformedAuthorityOrPort=true}}}const matches=uri.match(URI_PARSE);if(matches){parsed.scheme=matches[1];parsed.userinfo=matches[3];parsed.host=matches[4];parsed.port=parseInt(matches[5],10);parsed.path=matches[6]||``;parsed.query=matches[7];parsed.fragment=matches[8];if(parsed.scheme!==void 0){const decodedScheme=unescape(parsed.scheme);if(VALID_SCHEME.test(decodedScheme))parsed.scheme=decodedScheme.toLowerCase();else{parsed.error=parsed.error||MALFORMED_SCHEME_ERROR;malformedScheme=true}}malformedPercentEncoding=hasMalformedComponentPercentEncoding(matches);if(malformedPercentEncoding)parsed.error=parsed.error||`URI contains malformed percent-encoding.`;if(isNaN(parsed.port))parsed.port=matches[5];const parseError=getParseError(parsed,matches);if(parseError!==void 0){parsed.error=parsed.error||parseError;malformedAuthorityOrPort=true}if(parsed.host){if(isIPv4(parsed.host)===false){const bracketedIPLiteral=isIPLiteral(parsed.host);const hasIPLiteralBracket=parsed.host.indexOf(`[`)!==-1||parsed.host.indexOf(`]`)!==-1;const ipv6result=normalizeIPv6(parsed.host);isIP=ipv6result.isIPV6||ipv6result.isIPVFuture===true;malformedIPLiteral=hasIPLiteralBracket&&(!bracketedIPLiteral||ipv6result.error===true);parsed.host=isIP?ipv6result.host:ipv6result.host.toLowerCase();if(malformedIPLiteral){parsed.error=parsed.error||`URI host is malformed.`;malformedAuthorityOrPort=true}}else isIP=true}if(parsed.scheme===void 0&&parsed.userinfo===void 0&&parsed.host===void 0&&parsed.port===void 0&&parsed.query===void 0&&!parsed.path)parsed.reference=`same-document`;else if(parsed.scheme===void 0)parsed.reference=`relative`;else if(parsed.fragment===void 0)parsed.reference=`absolute`;else parsed.reference=`uri`;if(options.reference&&options.reference!==`suffix`&&options.reference!==parsed.reference)parsed.error=parsed.error||`URI is not a `+options.reference+` reference.`;const schemeHandler=getSchemeHandler(options.scheme||parsed.scheme);if(!malformedIPLiteral)malformedHost=canonicalizeHost(parsed,options,schemeHandler,isIP);if(uri.indexOf(`%`)!==-1&&parsed.host!==void 0&&!malformedIPLiteral){let host=isIP?parsed.host:normalizePercentEncoding(parsed.host,true);if(!isIP)host=normalizePercentEncoding(host.toLowerCase());parsed.host=reescapeHostDelimiters(host,isIP)}if(!schemeHandler||schemeHandler&&!schemeHandler.skipNormalize){if(parsed.path)parsed.path=normalizePathEncoding(parsed.path);if(parsed.query)parsed.query=normalizeQueryFragmentEncoding(parsed.query);if(parsed.fragment)parsed.fragment=normalizeQueryFragmentEncoding(parsed.fragment)}if(schemeHandler&&schemeHandler.parse){schemeHandler.parse(parsed,options);if(schemeHandler===SCHEMES.urn&&parsed.nid===void 0)malformedSchemeSpecific=true}}else parsed.error=parsed.error||`URI can not be parsed.`;return{parsed,malformedAuthorityOrPort,malformedPercentEncoding,malformedSchemeSpecific,malformedHost,malformedScheme}}function parse(uri,opts){return parseWithStatus(uri,opts).parsed}function normalizeString(uri,opts){return normalizeStringWithStatus(uri,opts).normalized}function normalizeStringWithStatus(uri,opts){const{parsed,malformedAuthorityOrPort,malformedPercentEncoding,malformedSchemeSpecific,malformedHost,malformedScheme}=parseWithStatus(uri,opts);return{normalized:malformedAuthorityOrPort||malformedPercentEncoding||malformedSchemeSpecific||malformedHost||malformedScheme?uri:serialize(parsed,opts),malformedAuthorityOrPort,malformedPercentEncoding,malformedSchemeSpecific,malformedHost,malformedScheme}}function normalizeComparableURI(uri,opts){if(typeof uri!==`string`&&typeof uri!==`object`)return;let value;try{value=typeof uri===`string`?uri:serialize(uri,opts)}catch{return}const{normalized,malformedAuthorityOrPort,malformedPercentEncoding,malformedSchemeSpecific,malformedHost,malformedScheme}=normalizeStringWithStatus(value,opts);return malformedAuthorityOrPort||malformedPercentEncoding||malformedSchemeSpecific||malformedHost||malformedScheme?void 0:normalized}var fastUri={SCHEMES,normalize,resolve,resolveComponent,equal,serialize,parse};module.exports=fastUri;module.exports.default=fastUri;module.exports.fastUri=fastUri}));var require_uri=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var uri=require_fast_uri();uri.code=`require("ajv/dist/runtime/uri").default`;exports.default=uri}));var require_core$1=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.CodeGen=exports.Name=exports.nil=exports.stringify=exports.str=exports._=exports.KeywordCxt=void 0;var validate_1=require_validate();Object.defineProperty(exports,"KeywordCxt",{enumerable:true,get:function(){return validate_1.KeywordCxt}});var codegen_1=require_codegen();Object.defineProperty(exports,"_",{enumerable:true,get:function(){return codegen_1._}});Object.defineProperty(exports,"str",{enumerable:true,get:function(){return codegen_1.str}});Object.defineProperty(exports,"stringify",{enumerable:true,get:function(){return codegen_1.stringify}});Object.defineProperty(exports,"nil",{enumerable:true,get:function(){return codegen_1.nil}});Object.defineProperty(exports,"Name",{enumerable:true,get:function(){return codegen_1.Name}});Object.defineProperty(exports,"CodeGen",{enumerable:true,get:function(){return codegen_1.CodeGen}});var validation_error_1=require_validation_error();var ref_error_1=require_ref_error();var rules_1=require_rules();var compile_1=require_compile();var codegen_2=require_codegen();var resolve_1=require_resolve();var dataType_1=require_dataType();var util_1=require_util();var $dataRefSchema=(init_data(),__toCommonJS(data_exports).default);var uri_1=require_uri();var defaultRegExp=(str,flags)=>new RegExp(str,flags);defaultRegExp.code=`new RegExp`;var META_IGNORE_OPTIONS=[`removeAdditional`,`useDefaults`,`coerceTypes`];var EXT_SCOPE_NAMES=new Set([`validate`,`serialize`,`parse`,`wrapper`,`root`,`schema`,`keyword`,`pattern`,`formats`,`validate$data`,`func`,`obj`,`Error`]);var removedOptions={errorDataPath:``,format:"`validateFormats: false` can be used instead.",nullable:`"nullable" keyword is supported by default.`,jsonPointers:`Deprecated jsPropertySyntax can be used instead.`,extendRefs:`Deprecated ignoreKeywordsWithRef can be used instead.`,missingRefs:`Pass empty schema with $id that should be ignored to ajv.addSchema.`,processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:`"uniqueItems" keyword is always validated.`,unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:`Map is used as cache, schema object as key.`,serialize:`Map is used as cache, schema object as key.`,ajvErrors:`It is default now.`};var deprecatedOptions={ignoreKeywordsWithRef:``,jsPropertySyntax:``,unicode:`"minLength"/"maxLength" account for unicode characters by default.`};var MAX_EXPRESSION=200;function requiredOptions(o){var _a,_b,_c,_d,_e,_f,_g,_h,_j,_k,_l,_m,_o,_p,_q,_r,_s,_t,_u,_v,_w,_x,_y,_z,_0;const s=o.strict;const _optz=(_a=o.code)===null||_a===void 0?void 0:_a.optimize;const optimize=_optz===true||_optz===void 0?1:_optz||0;const regExp=(_c=(_b=o.code)===null||_b===void 0?void 0:_b.regExp)!==null&&_c!==void 0?_c:defaultRegExp;const uriResolver=(_d=o.uriResolver)!==null&&_d!==void 0?_d:uri_1.default;return{strictSchema:(_f=(_e=o.strictSchema)!==null&&_e!==void 0?_e:s)!==null&&_f!==void 0?_f:true,strictNumbers:(_h=(_g=o.strictNumbers)!==null&&_g!==void 0?_g:s)!==null&&_h!==void 0?_h:true,strictTypes:(_k=(_j=o.strictTypes)!==null&&_j!==void 0?_j:s)!==null&&_k!==void 0?_k:`log`,strictTuples:(_m=(_l=o.strictTuples)!==null&&_l!==void 0?_l:s)!==null&&_m!==void 0?_m:`log`,strictRequired:(_p=(_o=o.strictRequired)!==null&&_o!==void 0?_o:s)!==null&&_p!==void 0?_p:false,code:o.code?{...o.code,optimize,regExp}:{optimize,regExp},loopRequired:(_q=o.loopRequired)!==null&&_q!==void 0?_q:MAX_EXPRESSION,loopEnum:(_r=o.loopEnum)!==null&&_r!==void 0?_r:MAX_EXPRESSION,meta:(_s=o.meta)!==null&&_s!==void 0?_s:true,messages:(_t=o.messages)!==null&&_t!==void 0?_t:true,inlineRefs:(_u=o.inlineRefs)!==null&&_u!==void 0?_u:true,schemaId:(_v=o.schemaId)!==null&&_v!==void 0?_v:`$id`,addUsedSchema:(_w=o.addUsedSchema)!==null&&_w!==void 0?_w:true,validateSchema:(_x=o.validateSchema)!==null&&_x!==void 0?_x:true,validateFormats:(_y=o.validateFormats)!==null&&_y!==void 0?_y:true,unicodeRegExp:(_z=o.unicodeRegExp)!==null&&_z!==void 0?_z:true,int32range:(_0=o.int32range)!==null&&_0!==void 0?_0:true,uriResolver}}var Ajv=class{constructor(opts={}){this.schemas={};this.refs={};this.formats=Object.create(null);this._compilations=new Set;this._loading={};this._cache=new Map;opts=this.opts={...opts,...requiredOptions(opts)};const{es5,lines}=this.opts.code;this.scope=new codegen_2.ValueScope({scope:{},prefixes:EXT_SCOPE_NAMES,es5,lines});this.logger=getLogger(opts.logger);const formatOpt=opts.validateFormats;opts.validateFormats=false;this.RULES=(0,rules_1.getRules)();checkOptions.call(this,removedOptions,opts,`NOT SUPPORTED`);checkOptions.call(this,deprecatedOptions,opts,`DEPRECATED`,`warn`);this._metaOpts=getMetaSchemaOptions.call(this);if(opts.formats)addInitialFormats.call(this);this._addVocabularies();this._addDefaultMetaSchema();if(opts.keywords)addInitialKeywords.call(this,opts.keywords);if(typeof opts.meta==`object`)this.addMetaSchema(opts.meta);addInitialSchemas.call(this);opts.validateFormats=formatOpt}_addVocabularies(){this.addKeyword(`$async`)}_addDefaultMetaSchema(){const{$data,meta,schemaId}=this.opts;let _dataRefSchema=$dataRefSchema;if(schemaId===`id`){_dataRefSchema={...$dataRefSchema};_dataRefSchema.id=_dataRefSchema.$id;delete _dataRefSchema.$id}if(meta&&$data)this.addMetaSchema(_dataRefSchema,_dataRefSchema[schemaId],false)}defaultMeta(){const{meta,schemaId}=this.opts;return this.opts.defaultMeta=typeof meta==`object`?meta[schemaId]||meta:void 0}validate(schemaKeyRef,data){let v;if(typeof schemaKeyRef==`string`){v=this.getSchema(schemaKeyRef);if(!v)throw new Error(`no schema with key or ref "${schemaKeyRef}"`)}else v=this.compile(schemaKeyRef);const valid=v(data);if(!(`$async`in v))this.errors=v.errors;return valid}compile(schema,_meta){const sch=this._addSchema(schema,_meta);return sch.validate||this._compileSchemaEnv(sch)}compileAsync(schema,meta){if(typeof this.opts.loadSchema!=`function`)throw new Error(`options.loadSchema should be a function`);const{loadSchema}=this.opts;return runCompileAsync.call(this,schema,meta);async function runCompileAsync(_schema,_meta){await loadMetaSchema.call(this,_schema.$schema);const sch=this._addSchema(_schema,_meta);return sch.validate||_compileAsync.call(this,sch)}async function loadMetaSchema($ref){if($ref&&!this.getSchema($ref))await runCompileAsync.call(this,{$ref},true)}async function _compileAsync(sch){try{return this._compileSchemaEnv(sch)}catch(e){if(!(e instanceof ref_error_1.default))throw e;checkLoaded.call(this,e);await loadMissingSchema.call(this,e.missingSchema);return _compileAsync.call(this,sch)}}function checkLoaded({missingSchema:ref,missingRef}){if(this.refs[ref])throw new Error(`AnySchema ${ref} is loaded but ${missingRef} cannot be resolved`)}async function loadMissingSchema(ref){const _schema=await _loadSchema.call(this,ref);if(!this.refs[ref])await loadMetaSchema.call(this,_schema.$schema);if(!this.refs[ref])this.addSchema(_schema,ref,meta)}async function _loadSchema(ref){const p=this._loading[ref];if(p)return p;try{return await(this._loading[ref]=loadSchema(ref))}finally{delete this._loading[ref]}}}addSchema(schema,key,_meta,_validateSchema=this.opts.validateSchema){if(Array.isArray(schema)){for(const sch of schema)this.addSchema(sch,void 0,_meta,_validateSchema);return this}let id;if(typeof schema===`object`){const{schemaId}=this.opts;id=schema[schemaId];if(id!==void 0&&typeof id!=`string`)throw new Error(`schema ${schemaId} must be string`)}key=(0,resolve_1.normalizeId)(key||id);this._checkUnique(key);this.schemas[key]=this._addSchema(schema,_meta,key,_validateSchema,true);return this}addMetaSchema(schema,key,_validateSchema=this.opts.validateSchema){this.addSchema(schema,key,true,_validateSchema);return this}validateSchema(schema,throwOrLogError){if(typeof schema==`boolean`)return true;let $schema;$schema=schema.$schema;if($schema!==void 0&&typeof $schema!=`string`)throw new Error(`$schema must be a string`);$schema=$schema||this.opts.defaultMeta||this.defaultMeta();if(!$schema){this.logger.warn(`meta-schema not available`);this.errors=null;return true}const valid=this.validate($schema,schema);if(!valid&&throwOrLogError){const message=`schema is invalid: `+this.errorsText();if(this.opts.validateSchema===`log`)this.logger.error(message);else throw new Error(message)}return valid}getSchema(keyRef){let sch;while(typeof(sch=getSchEnv.call(this,keyRef))==`string`)keyRef=sch;if(sch===void 0){const{schemaId}=this.opts;const root=new compile_1.SchemaEnv({schema:{},schemaId});sch=compile_1.resolveSchema.call(this,root,keyRef);if(!sch)return;this.refs[keyRef]=sch}return sch.validate||this._compileSchemaEnv(sch)}removeSchema(schemaKeyRef){if(schemaKeyRef instanceof RegExp){this._removeAllSchemas(this.schemas,schemaKeyRef);this._removeAllSchemas(this.refs,schemaKeyRef);return this}switch(typeof schemaKeyRef){case`undefined`:this._removeAllSchemas(this.schemas);this._removeAllSchemas(this.refs);this._cache.clear();return this;case`string`:{const sch=getSchEnv.call(this,schemaKeyRef);if(typeof sch==`object`)this._cache.delete(sch.schema);delete this.schemas[schemaKeyRef];delete this.refs[schemaKeyRef];return this}case`object`:{const cacheKey=schemaKeyRef;this._cache.delete(cacheKey);let id=schemaKeyRef[this.opts.schemaId];if(id){id=(0,resolve_1.normalizeId)(id);delete this.schemas[id];delete this.refs[id]}return this}default:throw new Error(`ajv.removeSchema: invalid parameter`)}}addVocabulary(definitions){for(const def of definitions)this.addKeyword(def);return this}addKeyword(kwdOrDef,def){let keyword;if(typeof kwdOrDef==`string`){keyword=kwdOrDef;if(typeof def==`object`){this.logger.warn(`these parameters are deprecated, see docs for addKeyword`);def.keyword=keyword}}else if(typeof kwdOrDef==`object`&&def===void 0){def=kwdOrDef;keyword=def.keyword;if(Array.isArray(keyword)&&!keyword.length)throw new Error(`addKeywords: keyword must be string or non-empty array`)}else throw new Error(`invalid addKeywords parameters`);checkKeyword.call(this,keyword,def);if(!def){(0,util_1.eachItem)(keyword,kwd=>addRule.call(this,kwd));return this}keywordMetaschema.call(this,def);const definition={...def,type:(0,dataType_1.getJSONTypes)(def.type),schemaType:(0,dataType_1.getJSONTypes)(def.schemaType)};(0,util_1.eachItem)(keyword,definition.type.length===0?k=>addRule.call(this,k,definition):k=>definition.type.forEach(t=>addRule.call(this,k,definition,t)));return this}getKeyword(keyword){const rule=this.RULES.all[keyword];return typeof rule==`object`?rule.definition:!!rule}removeKeyword(keyword){const{RULES}=this;delete RULES.keywords[keyword];delete RULES.all[keyword];for(const group of RULES.rules){const i=group.rules.findIndex(rule=>rule.keyword===keyword);if(i>=0)group.rules.splice(i,1)}return this}addFormat(name,format){if(typeof format==`string`)format=new RegExp(format);this.formats[name]=format;return this}errorsText(errors=this.errors,{separator=`, `,dataVar=`data`}={}){if(!errors||errors.length===0)return`No errors`;return errors.map(e=>`${dataVar}${e.instancePath} ${e.message}`).reduce((text,msg)=>text+separator+msg)}$dataMetaSchema(metaSchema,keywordsJsonPointers){const rules=this.RULES.all;metaSchema=JSON.parse(JSON.stringify(metaSchema));for(const jsonPointer of keywordsJsonPointers){const segments=jsonPointer.split(`/`).slice(1);let keywords=metaSchema;for(const seg of segments)keywords=keywords[seg];for(const key in rules){const rule=rules[key];if(typeof rule!=`object`)continue;const{$data}=rule.definition;const schema=keywords[key];if($data&&schema)keywords[key]=schemaOrData(schema)}}return metaSchema}_removeAllSchemas(schemas,regex){for(const keyRef in schemas){const sch=schemas[keyRef];if(!regex||regex.test(keyRef)){if(typeof sch==`string`)delete schemas[keyRef];else if(sch&&!sch.meta){this._cache.delete(sch.schema);delete schemas[keyRef]}}}}_addSchema(schema,meta,baseId,validateSchema=this.opts.validateSchema,addSchema=this.opts.addUsedSchema){let id;const{schemaId}=this.opts;if(typeof schema==`object`)id=schema[schemaId];else if(this.opts.jtd)throw new Error(`schema must be object`);else if(typeof schema!=`boolean`)throw new Error(`schema must be object or boolean`);let sch=this._cache.get(schema);if(sch!==void 0)return sch;baseId=(0,resolve_1.normalizeId)(id||baseId);const localRefs=resolve_1.getSchemaRefs.call(this,schema,baseId);sch=new compile_1.SchemaEnv({schema,schemaId,meta,baseId,localRefs});this._cache.set(sch.schema,sch);if(addSchema&&!baseId.startsWith(`#`)){if(baseId)this._checkUnique(baseId);this.refs[baseId]=sch}if(validateSchema)this.validateSchema(schema,true);return sch}_checkUnique(id){if(this.schemas[id]||this.refs[id])throw new Error(`schema with key or id "${id}" already exists`)}_compileSchemaEnv(sch){if(sch.meta)this._compileMetaSchema(sch);else compile_1.compileSchema.call(this,sch);if(!sch.validate)throw new Error(`ajv implementation error`);return sch.validate}_compileMetaSchema(sch){const currentOpts=this.opts;this.opts=this._metaOpts;try{compile_1.compileSchema.call(this,sch)}finally{this.opts=currentOpts}}};Ajv.ValidationError=validation_error_1.default;Ajv.MissingRefError=ref_error_1.default;exports.default=Ajv;function checkOptions(checkOpts,options,msg,log=`error`){for(const key in checkOpts){const opt=key;if(opt in options)this.logger[log](`${msg}: option ${key}. ${checkOpts[opt]}`)}}function getSchEnv(keyRef){keyRef=(0,resolve_1.normalizeId)(keyRef);return this.schemas[keyRef]||this.refs[keyRef]}function addInitialSchemas(){const optsSchemas=this.opts.schemas;if(!optsSchemas)return;if(Array.isArray(optsSchemas))this.addSchema(optsSchemas);else for(const key in optsSchemas)this.addSchema(optsSchemas[key],key)}function addInitialFormats(){for(const name in this.opts.formats){const format=this.opts.formats[name];if(format)this.addFormat(name,format)}}function addInitialKeywords(defs){if(Array.isArray(defs)){this.addVocabulary(defs);return}this.logger.warn(`keywords option as map is deprecated, pass array`);for(const keyword in defs){const def=defs[keyword];if(!def.keyword)def.keyword=keyword;this.addKeyword(def)}}function getMetaSchemaOptions(){const metaOpts={...this.opts};for(const opt of META_IGNORE_OPTIONS)delete metaOpts[opt];return metaOpts}var noLogs={log(){},warn(){},error(){}};function getLogger(logger){if(logger===false)return noLogs;if(logger===void 0)return console;if(logger.log&&logger.warn&&logger.error)return logger;throw new Error(`logger must implement log, warn and error methods`)}var KEYWORD_NAME=/^[a-z_$][a-z0-9_$:-]*$/i;function checkKeyword(keyword,def){const{RULES}=this;(0,util_1.eachItem)(keyword,kwd=>{if(RULES.keywords[kwd])throw new Error(`Keyword ${kwd} is already defined`);if(!KEYWORD_NAME.test(kwd))throw new Error(`Keyword ${kwd} has invalid name`)});if(!def)return;if(def.$data&&!(`code`in def||`validate`in def))throw new Error(`$data keyword must have "code" or "validate" function`)}function addRule(keyword,definition,dataType){var _a;const post=definition===null||definition===void 0?void 0:definition.post;if(dataType&&post)throw new Error(`keyword with "post" flag cannot have "type"`);const{RULES}=this;let ruleGroup=post?RULES.post:RULES.rules.find(({type:t})=>t===dataType);if(!ruleGroup){ruleGroup={type:dataType,rules:[]};RULES.rules.push(ruleGroup)}RULES.keywords[keyword]=true;if(!definition)return;const rule={keyword,definition:{...definition,type:(0,dataType_1.getJSONTypes)(definition.type),schemaType:(0,dataType_1.getJSONTypes)(definition.schemaType)}};if(definition.before)addBeforeRule.call(this,ruleGroup,rule,definition.before);else ruleGroup.rules.push(rule);RULES.all[keyword]=rule;(_a=definition.implements)===null||_a===void 0||_a.forEach(kwd=>this.addKeyword(kwd))}function addBeforeRule(ruleGroup,rule,before){const i=ruleGroup.rules.findIndex(_rule=>_rule.keyword===before);if(i>=0)ruleGroup.rules.splice(i,0,rule);else{ruleGroup.rules.push(rule);this.logger.warn(`rule ${before} is not defined`)}}function keywordMetaschema(def){let{metaSchema}=def;if(metaSchema===void 0)return;if(def.$data&&this.opts.$data)metaSchema=schemaOrData(metaSchema);def.validateSchema=this.compile(metaSchema,true)}var $dataRef={$ref:`https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#`};function schemaOrData(schema){return{anyOf:[schema,$dataRef]}}}));var require_id=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var def={keyword:`id`,code(){throw new Error(`NOT SUPPORTED: keyword "id", use "$id" for schema ID`)}};exports.default=def}));var require_ref=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.callRef=exports.getValidate=void 0;var ref_error_1=require_ref_error();var code_1=require_code();var codegen_1=require_codegen();var names_1=require_names();var compile_1=require_compile();var util_1=require_util();var def={keyword:`$ref`,schemaType:`string`,code(cxt){const{gen,schema:$ref,it}=cxt;const{baseId,schemaEnv:env,validateName,opts,self}=it;const{root}=env;if(($ref===`#`||$ref===`#/`)&&baseId===root.baseId)return callRootRef();const schOrEnv=compile_1.resolveRef.call(self,root,baseId,$ref);if(schOrEnv===void 0)throw new ref_error_1.default(it.opts.uriResolver,baseId,$ref);if(schOrEnv instanceof compile_1.SchemaEnv)return callValidate(schOrEnv);return inlineRefSchema(schOrEnv);function callRootRef(){if(env===root)return callRef(cxt,validateName,env,env.$async);const rootName=gen.scopeValue(`root`,{ref:root});return callRef(cxt,(0,codegen_1._)`${rootName}.validate`,root,root.$async)}function callValidate(sch){callRef(cxt,getValidate(cxt,sch),sch,sch.$async)}function inlineRefSchema(sch){const schName=gen.scopeValue(`schema`,opts.code.source===true?{ref:sch,code:(0,codegen_1.stringify)(sch)}:{ref:sch});const valid=gen.name(`valid`);const schCxt=cxt.subschema({schema:sch,dataTypes:[],schemaPath:codegen_1.nil,topSchemaRef:schName,errSchemaPath:$ref},valid);cxt.mergeEvaluated(schCxt);cxt.ok(valid)}}};function getValidate(cxt,sch){const{gen}=cxt;return sch.validate?gen.scopeValue(`validate`,{ref:sch.validate}):(0,codegen_1._)`${gen.scopeValue(`wrapper`,{ref:sch})}.validate`}exports.getValidate=getValidate;function callRef(cxt,v,sch,$async){const{gen,it}=cxt;const{allErrors,schemaEnv:env,opts}=it;const passCxt=opts.passContext?names_1.default.this:codegen_1.nil;if($async)callAsyncRef();else callSyncRef();function callAsyncRef(){if(!env.$async)throw new Error(`async schema referenced by sync schema`);const valid=gen.let(`valid`);gen.try(()=>{gen.code((0,codegen_1._)`await ${(0,code_1.callValidateCode)(cxt,v,passCxt)}`);addEvaluatedFrom(v);if(!allErrors)gen.assign(valid,true)},e=>{gen.if((0,codegen_1._)`!(${e} instanceof ${it.ValidationError})`,()=>gen.throw(e));addErrorsFrom(e);if(!allErrors)gen.assign(valid,false)});cxt.ok(valid)}function callSyncRef(){cxt.result((0,code_1.callValidateCode)(cxt,v,passCxt),()=>addEvaluatedFrom(v),()=>addErrorsFrom(v))}function addErrorsFrom(source){const errs=(0,codegen_1._)`${source}.errors`;gen.assign(names_1.default.vErrors,(0,codegen_1._)`${names_1.default.vErrors} === null ? ${errs} : ${names_1.default.vErrors}.concat(${errs})`);gen.assign(names_1.default.errors,(0,codegen_1._)`${names_1.default.vErrors}.length`)}function addEvaluatedFrom(source){var _a;if(!it.opts.unevaluated)return;const schEvaluated=(_a=sch===null||sch===void 0?void 0:sch.validate)===null||_a===void 0?void 0:_a.evaluated;if(it.props!==true){if(schEvaluated&&!schEvaluated.dynamicProps){if(schEvaluated.props!==void 0)it.props=util_1.mergeEvaluated.props(gen,schEvaluated.props,it.props)}else{const props=gen.var(`props`,(0,codegen_1._)`${source}.evaluated.props`);it.props=util_1.mergeEvaluated.props(gen,props,it.props,codegen_1.Name)}}if(it.items!==true){if(schEvaluated&&!schEvaluated.dynamicItems){if(schEvaluated.items!==void 0)it.items=util_1.mergeEvaluated.items(gen,schEvaluated.items,it.items)}else{const items=gen.var(`items`,(0,codegen_1._)`${source}.evaluated.items`);it.items=util_1.mergeEvaluated.items(gen,items,it.items,codegen_1.Name)}}}}exports.callRef=callRef;exports.default=def}));var require_core=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var id_1=require_id();var ref_1=require_ref();var core=[`$schema`,`$id`,`$defs`,`$vocabulary`,{keyword:`$comment`},`definitions`,id_1.default,ref_1.default];exports.default=core}));var require_limitNumber=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var codegen_1=require_codegen();var ops=codegen_1.operators;var KWDs={maximum:{okStr:`<=`,ok:ops.LTE,fail:ops.GT},minimum:{okStr:`>=`,ok:ops.GTE,fail:ops.LT},exclusiveMaximum:{okStr:`<`,ok:ops.LT,fail:ops.GTE},exclusiveMinimum:{okStr:`>`,ok:ops.GT,fail:ops.LTE}};var def={keyword:Object.keys(KWDs),type:`number`,schemaType:`number`,$data:true,error:{message:({keyword,schemaCode})=>(0,codegen_1.str)`must be ${KWDs[keyword].okStr} ${schemaCode}`,params:({keyword,schemaCode})=>(0,codegen_1._)`{comparison: ${KWDs[keyword].okStr}, limit: ${schemaCode}}`},code(cxt){const{keyword,data,schemaCode}=cxt;cxt.fail$data((0,codegen_1._)`${data} ${KWDs[keyword].fail} ${schemaCode} || isNaN(${data})`)}};exports.default=def}));var require_multipleOf=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var codegen_1=require_codegen();var def={keyword:`multipleOf`,type:`number`,schemaType:`number`,$data:true,error:{message:({schemaCode})=>(0,codegen_1.str)`must be multiple of ${schemaCode}`,params:({schemaCode})=>(0,codegen_1._)`{multipleOf: ${schemaCode}}`},code(cxt){const{gen,data,schemaCode,it}=cxt;const prec=it.opts.multipleOfPrecision;const res=gen.let(`res`);const invalid=prec?(0,codegen_1._)`Math.abs(Math.round(${res}) - ${res}) > 1e-${prec}`:(0,codegen_1._)`${res} !== parseInt(${res})`;cxt.fail$data((0,codegen_1._)`(${schemaCode} === 0 || (${res} = ${data}/${schemaCode}, ${invalid}))`)}};exports.default=def}));var require_ucs2length=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});function ucs2length(str){const len=str.length;let length=0;let pos=0;let value;while(pos<len){length++;value=str.charCodeAt(pos++);if(value>=55296&&value<=56319&&pos<len){value=str.charCodeAt(pos);if((value&64512)===56320)pos++}}return length}exports.default=ucs2length;ucs2length.code=`require("ajv/dist/runtime/ucs2length").default`}));var require_limitLength=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var codegen_1=require_codegen();var util_1=require_util();var ucs2length_1=require_ucs2length();var def={keyword:[`maxLength`,`minLength`],type:`string`,schemaType:`number`,$data:true,error:{message({keyword,schemaCode}){const comp=keyword===`maxLength`?`more`:`fewer`;return(0,codegen_1.str)`must NOT have ${comp} than ${schemaCode} characters`},params:({schemaCode})=>(0,codegen_1._)`{limit: ${schemaCode}}`},code(cxt){const{keyword,data,schemaCode,it}=cxt;const op=keyword===`maxLength`?codegen_1.operators.GT:codegen_1.operators.LT;const len=it.opts.unicode===false?(0,codegen_1._)`${data}.length`:(0,codegen_1._)`${(0,util_1.useFunc)(cxt.gen,ucs2length_1.default)}(${data})`;cxt.fail$data((0,codegen_1._)`${len} ${op} ${schemaCode}`)}};exports.default=def}));var require_pattern=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var code_1=require_code();var util_1=require_util();var codegen_1=require_codegen();var def={keyword:`pattern`,type:`string`,schemaType:`string`,$data:true,error:{message:({schemaCode})=>(0,codegen_1.str)`must match pattern "${schemaCode}"`,params:({schemaCode})=>(0,codegen_1._)`{pattern: ${schemaCode}}`},code(cxt){const{gen,data,$data,schema,schemaCode,it}=cxt;const u=it.opts.unicodeRegExp?`u`:``;if($data){const{regExp}=it.opts.code;const regExpCode=regExp.code===`new RegExp`?(0,codegen_1._)`new RegExp`:(0,util_1.useFunc)(gen,regExp);const valid=gen.let(`valid`);gen.try(()=>gen.assign(valid,(0,codegen_1._)`${regExpCode}(${schemaCode}, ${u}).test(${data})`),()=>gen.assign(valid,false));cxt.fail$data((0,codegen_1._)`!${valid}`)}else{const regExp=(0,code_1.usePattern)(cxt,schema);cxt.fail$data((0,codegen_1._)`!${regExp}.test(${data})`)}}};exports.default=def}));var require_limitProperties=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var codegen_1=require_codegen();var def={keyword:[`maxProperties`,`minProperties`],type:`object`,schemaType:`number`,$data:true,error:{message({keyword,schemaCode}){const comp=keyword===`maxProperties`?`more`:`fewer`;return(0,codegen_1.str)`must NOT have ${comp} than ${schemaCode} properties`},params:({schemaCode})=>(0,codegen_1._)`{limit: ${schemaCode}}`},code(cxt){const{keyword,data,schemaCode}=cxt;const op=keyword===`maxProperties`?codegen_1.operators.GT:codegen_1.operators.LT;cxt.fail$data((0,codegen_1._)`Object.keys(${data}).length ${op} ${schemaCode}`)}};exports.default=def}));var require_required=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var code_1=require_code();var codegen_1=require_codegen();var util_1=require_util();var def={keyword:`required`,type:`object`,schemaType:`array`,$data:true,error:{message:({params:{missingProperty}})=>(0,codegen_1.str)`must have required property '${missingProperty}'`,params:({params:{missingProperty}})=>(0,codegen_1._)`{missingProperty: ${missingProperty}}`},code(cxt){const{gen,schema,schemaCode,data,$data,it}=cxt;const{opts}=it;if(!$data&&schema.length===0)return;const useLoop=schema.length>=opts.loopRequired;if(it.allErrors)allErrorsMode();else exitOnErrorMode();if(opts.strictRequired){const props=cxt.parentSchema.properties;const{definedProperties}=cxt.it;for(const requiredKey of schema)if((props===null||props===void 0?void 0:props[requiredKey])===void 0&&!definedProperties.has(requiredKey)){const msg=`required property "${requiredKey}" is not defined at "${it.schemaEnv.baseId+it.errSchemaPath}" (strictRequired)`;(0,util_1.checkStrictMode)(it,msg,it.opts.strictRequired)}}function allErrorsMode(){if(useLoop||$data)cxt.block$data(codegen_1.nil,loopAllRequired);else for(const prop of schema)(0,code_1.checkReportMissingProp)(cxt,prop)}function exitOnErrorMode(){const missing=gen.let(`missing`);if(useLoop||$data){const valid=gen.let(`valid`,true);cxt.block$data(valid,()=>loopUntilMissing(missing,valid));cxt.ok(valid)}else{gen.if((0,code_1.checkMissingProp)(cxt,schema,missing));(0,code_1.reportMissingProp)(cxt,missing);gen.else()}}function loopAllRequired(){gen.forOf(`prop`,schemaCode,prop=>{cxt.setParams({missingProperty:prop});gen.if((0,code_1.noPropertyInData)(gen,data,prop,opts.ownProperties),()=>cxt.error())})}function loopUntilMissing(missing,valid){cxt.setParams({missingProperty:missing});gen.forOf(missing,schemaCode,()=>{gen.assign(valid,(0,code_1.propertyInData)(gen,data,missing,opts.ownProperties));gen.if((0,codegen_1.not)(valid),()=>{cxt.error();gen.break()})},codegen_1.nil)}}};exports.default=def}));var require_limitItems=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var codegen_1=require_codegen();var def={keyword:[`maxItems`,`minItems`],type:`array`,schemaType:`number`,$data:true,error:{message({keyword,schemaCode}){const comp=keyword===`maxItems`?`more`:`fewer`;return(0,codegen_1.str)`must NOT have ${comp} than ${schemaCode} items`},params:({schemaCode})=>(0,codegen_1._)`{limit: ${schemaCode}}`},code(cxt){const{keyword,data,schemaCode}=cxt;const op=keyword===`maxItems`?codegen_1.operators.GT:codegen_1.operators.LT;cxt.fail$data((0,codegen_1._)`${data}.length ${op} ${schemaCode}`)}};exports.default=def}));var require_equal=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var equal=require_fast_deep_equal();equal.code=`require("ajv/dist/runtime/equal").default`;exports.default=equal}));var require_uniqueItems=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var dataType_1=require_dataType();var codegen_1=require_codegen();var util_1=require_util();var equal_1=require_equal();var def={keyword:`uniqueItems`,type:`array`,schemaType:`boolean`,$data:true,error:{message:({params:{i,j}})=>(0,codegen_1.str)`must NOT have duplicate items (items ## ${j} and ${i} are identical)`,params:({params:{i,j}})=>(0,codegen_1._)`{i: ${i}, j: ${j}}`},code(cxt){const{gen,data,$data,schema,parentSchema,schemaCode,it}=cxt;if(!$data&&!schema)return;const valid=gen.let(`valid`);const itemTypes=parentSchema.items?(0,dataType_1.getSchemaTypes)(parentSchema.items):[];cxt.block$data(valid,validateUniqueItems,(0,codegen_1._)`${schemaCode} === false`);cxt.ok(valid);function validateUniqueItems(){const i=gen.let(`i`,(0,codegen_1._)`${data}.length`);const j=gen.let(`j`);cxt.setParams({i,j});gen.assign(valid,true);gen.if((0,codegen_1._)`${i} > 1`,()=>(canOptimize()?loopN:loopN2)(i,j))}function canOptimize(){return itemTypes.length>0&&!itemTypes.some(t=>t===`object`||t===`array`)}function loopN(i,j){const item=gen.name(`item`);const wrongType=(0,dataType_1.checkDataTypes)(itemTypes,item,it.opts.strictNumbers,dataType_1.DataType.Wrong);const indices=gen.const(`indices`,(0,codegen_1._)`{}`);gen.for((0,codegen_1._)`;${i}--;`,()=>{gen.let(item,(0,codegen_1._)`${data}[${i}]`);gen.if(wrongType,(0,codegen_1._)`continue`);if(itemTypes.length>1)gen.if((0,codegen_1._)`typeof ${item} == "string"`,(0,codegen_1._)`${item} += "_"`);gen.if((0,codegen_1._)`typeof ${indices}[${item}] == "number"`,()=>{gen.assign(j,(0,codegen_1._)`${indices}[${item}]`);cxt.error();gen.assign(valid,false).break()}).code((0,codegen_1._)`${indices}[${item}] = ${i}`)})}function loopN2(i,j){const eql=(0,util_1.useFunc)(gen,equal_1.default);const outer=gen.name(`outer`);gen.label(outer).for((0,codegen_1._)`;${i}--;`,()=>gen.for((0,codegen_1._)`${j} = ${i}; ${j}--;`,()=>gen.if((0,codegen_1._)`${eql}(${data}[${i}], ${data}[${j}])`,()=>{cxt.error();gen.assign(valid,false).break(outer)})))}}};exports.default=def}));var require_const=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var codegen_1=require_codegen();var util_1=require_util();var equal_1=require_equal();var def={keyword:`const`,$data:true,error:{message:`must be equal to constant`,params:({schemaCode})=>(0,codegen_1._)`{allowedValue: ${schemaCode}}`},code(cxt){const{gen,data,$data,schemaCode,schema}=cxt;if($data||schema&&typeof schema==`object`)cxt.fail$data((0,codegen_1._)`!${(0,util_1.useFunc)(gen,equal_1.default)}(${data}, ${schemaCode})`);else cxt.fail((0,codegen_1._)`${schema} !== ${data}`)}};exports.default=def}));var require_enum=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var codegen_1=require_codegen();var util_1=require_util();var equal_1=require_equal();var def={keyword:`enum`,schemaType:`array`,$data:true,error:{message:`must be equal to one of the allowed values`,params:({schemaCode})=>(0,codegen_1._)`{allowedValues: ${schemaCode}}`},code(cxt){const{gen,data,$data,schema,schemaCode,it}=cxt;if(!$data&&schema.length===0)throw new Error(`enum must have non-empty array`);const useLoop=schema.length>=it.opts.loopEnum;let eql;const getEql=()=>eql!==null&&eql!==void 0?eql:eql=(0,util_1.useFunc)(gen,equal_1.default);let valid;if(useLoop||$data){valid=gen.let(`valid`);cxt.block$data(valid,loopEnum)}else{if(!Array.isArray(schema))throw new Error(`ajv implementation error`);const vSchema=gen.const(`vSchema`,schemaCode);valid=(0,codegen_1.or)(...schema.map((_x,i)=>equalCode(vSchema,i)))}cxt.pass(valid);function loopEnum(){gen.assign(valid,false);gen.forOf(`v`,schemaCode,v=>gen.if((0,codegen_1._)`${getEql()}(${data}, ${v})`,()=>gen.assign(valid,true).break()))}function equalCode(vSchema,i){const sch=schema[i];return typeof sch===`object`&&sch!==null?(0,codegen_1._)`${getEql()}(${data}, ${vSchema}[${i}])`:(0,codegen_1._)`${data} === ${sch}`}}};exports.default=def}));var require_validation=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var limitNumber_1=require_limitNumber();var multipleOf_1=require_multipleOf();var limitLength_1=require_limitLength();var pattern_1=require_pattern();var limitProperties_1=require_limitProperties();var required_1=require_required();var limitItems_1=require_limitItems();var uniqueItems_1=require_uniqueItems();var const_1=require_const();var enum_1=require_enum();var validation=[limitNumber_1.default,multipleOf_1.default,limitLength_1.default,pattern_1.default,limitProperties_1.default,required_1.default,limitItems_1.default,uniqueItems_1.default,{keyword:`type`,schemaType:[`string`,`array`]},{keyword:`nullable`,schemaType:`boolean`},const_1.default,enum_1.default];exports.default=validation}));var require_additionalItems=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.validateAdditionalItems=void 0;var codegen_1=require_codegen();var util_1=require_util();var def={keyword:`additionalItems`,type:`array`,schemaType:[`boolean`,`object`],before:`uniqueItems`,error:{message:({params:{len}})=>(0,codegen_1.str)`must NOT have more than ${len} items`,params:({params:{len}})=>(0,codegen_1._)`{limit: ${len}}`},code(cxt){const{parentSchema,it}=cxt;const{items}=parentSchema;if(!Array.isArray(items)){(0,util_1.checkStrictMode)(it,`"additionalItems" is ignored when "items" is not an array of schemas`);return}validateAdditionalItems(cxt,items)}};function validateAdditionalItems(cxt,items){const{gen,schema,data,keyword,it}=cxt;it.items=true;const len=gen.const(`len`,(0,codegen_1._)`${data}.length`);if(schema===false){cxt.setParams({len:items.length});cxt.pass((0,codegen_1._)`${len} <= ${items.length}`)}else if(typeof schema==`object`&&!(0,util_1.alwaysValidSchema)(it,schema)){const valid=gen.var(`valid`,(0,codegen_1._)`${len} <= ${items.length}`);gen.if((0,codegen_1.not)(valid),()=>validateItems(valid));cxt.ok(valid)}function validateItems(valid){gen.forRange(`i`,items.length,len,i=>{cxt.subschema({keyword,dataProp:i,dataPropType:util_1.Type.Num},valid);if(!it.allErrors)gen.if((0,codegen_1.not)(valid),()=>gen.break())})}}exports.validateAdditionalItems=validateAdditionalItems;exports.default=def}));var require_items=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.validateTuple=void 0;var codegen_1=require_codegen();var util_1=require_util();var code_1=require_code();var def={keyword:`items`,type:`array`,schemaType:[`object`,`array`,`boolean`],before:`uniqueItems`,code(cxt){const{schema,it}=cxt;if(Array.isArray(schema))return validateTuple(cxt,`additionalItems`,schema);it.items=true;if((0,util_1.alwaysValidSchema)(it,schema))return;cxt.ok((0,code_1.validateArray)(cxt))}};function validateTuple(cxt,extraItems,schArr=cxt.schema){const{gen,parentSchema,data,keyword,it}=cxt;checkStrictTuple(parentSchema);if(it.opts.unevaluated&&schArr.length&&it.items!==true)it.items=util_1.mergeEvaluated.items(gen,schArr.length,it.items);const valid=gen.name(`valid`);const len=gen.const(`len`,(0,codegen_1._)`${data}.length`);schArr.forEach((sch,i)=>{if((0,util_1.alwaysValidSchema)(it,sch))return;gen.if((0,codegen_1._)`${len} > ${i}`,()=>cxt.subschema({keyword,schemaProp:i,dataProp:i},valid));cxt.ok(valid)});function checkStrictTuple(sch){const{opts,errSchemaPath}=it;const l=schArr.length;const fullTuple=l===sch.minItems&&(l===sch.maxItems||sch[extraItems]===false);if(opts.strictTuples&&!fullTuple){const msg=`"${keyword}" is ${l}-tuple, but minItems or maxItems/${extraItems} are not specified or different at path "${errSchemaPath}"`;(0,util_1.checkStrictMode)(it,msg,opts.strictTuples)}}}exports.validateTuple=validateTuple;exports.default=def}));var require_prefixItems=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var items_1=require_items();var def={keyword:`prefixItems`,type:`array`,schemaType:[`array`],before:`uniqueItems`,code:cxt=>(0,items_1.validateTuple)(cxt,`items`)};exports.default=def}));var require_items2020=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var codegen_1=require_codegen();var util_1=require_util();var code_1=require_code();var additionalItems_1=require_additionalItems();var def={keyword:`items`,type:`array`,schemaType:[`object`,`boolean`],before:`uniqueItems`,error:{message:({params:{len}})=>(0,codegen_1.str)`must NOT have more than ${len} items`,params:({params:{len}})=>(0,codegen_1._)`{limit: ${len}}`},code(cxt){const{schema,parentSchema,it}=cxt;const{prefixItems}=parentSchema;it.items=true;if((0,util_1.alwaysValidSchema)(it,schema))return;if(prefixItems)(0,additionalItems_1.validateAdditionalItems)(cxt,prefixItems);else cxt.ok((0,code_1.validateArray)(cxt))}};exports.default=def}));var require_contains=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var codegen_1=require_codegen();var util_1=require_util();var def={keyword:`contains`,type:`array`,schemaType:[`object`,`boolean`],before:`uniqueItems`,trackErrors:true,error:{message:({params:{min,max}})=>max===void 0?(0,codegen_1.str)`must contain at least ${min} valid item(s)`:(0,codegen_1.str)`must contain at least ${min} and no more than ${max} valid item(s)`,params:({params:{min,max}})=>max===void 0?(0,codegen_1._)`{minContains: ${min}}`:(0,codegen_1._)`{minContains: ${min}, maxContains: ${max}}`},code(cxt){const{gen,schema,parentSchema,data,it}=cxt;let min;let max;const{minContains,maxContains}=parentSchema;if(it.opts.next){min=minContains===void 0?1:minContains;max=maxContains}else min=1;const len=gen.const(`len`,(0,codegen_1._)`${data}.length`);cxt.setParams({min,max});if(max===void 0&&min===0){(0,util_1.checkStrictMode)(it,`"minContains" == 0 without "maxContains": "contains" keyword ignored`);return}if(max!==void 0&&min>max){(0,util_1.checkStrictMode)(it,`"minContains" > "maxContains" is always invalid`);cxt.fail();return}if((0,util_1.alwaysValidSchema)(it,schema)){let cond=(0,codegen_1._)`${len} >= ${min}`;if(max!==void 0)cond=(0,codegen_1._)`${cond} && ${len} <= ${max}`;cxt.pass(cond);return}it.items=true;const valid=gen.name(`valid`);if(max===void 0&&min===1)validateItems(valid,()=>gen.if(valid,()=>gen.break()));else if(min===0){gen.let(valid,true);if(max!==void 0)gen.if((0,codegen_1._)`${data}.length > 0`,validateItemsWithCount)}else{gen.let(valid,false);validateItemsWithCount()}cxt.result(valid,()=>cxt.reset());function validateItemsWithCount(){const schValid=gen.name(`_valid`);const count=gen.let(`count`,0);validateItems(schValid,()=>gen.if(schValid,()=>checkLimits(count)))}function validateItems(_valid,block){gen.forRange(`i`,0,len,i=>{cxt.subschema({keyword:`contains`,dataProp:i,dataPropType:util_1.Type.Num,compositeRule:true},_valid);block()})}function checkLimits(count){gen.code((0,codegen_1._)`${count}++`);if(max===void 0)gen.if((0,codegen_1._)`${count} >= ${min}`,()=>gen.assign(valid,true).break());else{gen.if((0,codegen_1._)`${count} > ${max}`,()=>gen.assign(valid,false).break());if(min===1)gen.assign(valid,true);else gen.if((0,codegen_1._)`${count} >= ${min}`,()=>gen.assign(valid,true))}}}};exports.default=def}));var require_dependencies=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.validateSchemaDeps=exports.validatePropertyDeps=exports.error=void 0;var codegen_1=require_codegen();var util_1=require_util();var code_1=require_code();exports.error={message:({params:{property,depsCount,deps}})=>{const property_ies=depsCount===1?`property`:`properties`;return(0,codegen_1.str)`must have ${property_ies} ${deps} when property ${property} is present`},params:({params:{property,depsCount,deps,missingProperty}})=>(0,codegen_1._)`{property: ${property},
|
|
6
6
|
missingProperty: ${missingProperty},
|
|
7
7
|
depsCount: ${depsCount},
|
|
8
|
-
deps: ${deps}}`};var def={keyword:`dependencies`,type:`object`,schemaType:`object`,error:exports.error,code(cxt){const[propDeps,schDeps]=splitDependencies(cxt);validatePropertyDeps(cxt,propDeps);validateSchemaDeps(cxt,schDeps)}};function splitDependencies({schema}){const propertyDeps={};const schemaDeps={};for(const key in schema){if(key===`__proto__`)continue;const deps=Array.isArray(schema[key])?propertyDeps:schemaDeps;deps[key]=schema[key]}return[propertyDeps,schemaDeps]}function validatePropertyDeps(cxt,propertyDeps=cxt.schema){const{gen,data,it}=cxt;if(Object.keys(propertyDeps).length===0)return;const missing=gen.let(`missing`);for(const prop in propertyDeps){const deps=propertyDeps[prop];if(deps.length===0)continue;const hasProperty=(0,code_1.propertyInData)(gen,data,prop,it.opts.ownProperties);cxt.setParams({property:prop,depsCount:deps.length,deps:deps.join(`, `)});if(it.allErrors)gen.if(hasProperty,()=>{for(const depProp of deps)(0,code_1.checkReportMissingProp)(cxt,depProp)});else{gen.if((0,codegen_1._)`${hasProperty} && (${(0,code_1.checkMissingProp)(cxt,deps,missing)})`);(0,code_1.reportMissingProp)(cxt,missing);gen.else()}}}exports.validatePropertyDeps=validatePropertyDeps;function validateSchemaDeps(cxt,schemaDeps=cxt.schema){const{gen,data,keyword,it}=cxt;const valid=gen.name(`valid`);for(const prop in schemaDeps){if((0,util_1.alwaysValidSchema)(it,schemaDeps[prop]))continue;gen.if((0,code_1.propertyInData)(gen,data,prop,it.opts.ownProperties),()=>{const schCxt=cxt.subschema({keyword,schemaProp:prop},valid);cxt.mergeValidEvaluated(schCxt,valid)},()=>gen.var(valid,true));cxt.ok(valid)}}exports.validateSchemaDeps=validateSchemaDeps;exports.default=def}));var require_propertyNames=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var codegen_1=require_codegen();var util_1=require_util();var def={keyword:`propertyNames`,type:`object`,schemaType:[`object`,`boolean`],error:{message:`property name must be valid`,params:({params})=>(0,codegen_1._)`{propertyName: ${params.propertyName}}`},code(cxt){const{gen,schema,data,it}=cxt;if((0,util_1.alwaysValidSchema)(it,schema))return;const valid=gen.name(`valid`);gen.forIn(`key`,data,key=>{cxt.setParams({propertyName:key});cxt.subschema({keyword:`propertyNames`,data:key,dataTypes:[`string`],propertyName:key,compositeRule:true},valid);gen.if((0,codegen_1.not)(valid),()=>{cxt.error(true);if(!it.allErrors)gen.break()})});cxt.ok(valid)}};exports.default=def}));var require_additionalProperties=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var code_1=require_code();var codegen_1=require_codegen();var names_1=require_names();var util_1=require_util();var def={keyword:`additionalProperties`,type:[`object`],schemaType:[`boolean`,`object`],allowUndefined:true,trackErrors:true,error:{message:`must NOT have additional properties`,params:({params})=>(0,codegen_1._)`{additionalProperty: ${params.additionalProperty}}`},code(cxt){const{gen,schema,parentSchema,data,errsCount,it}=cxt;if(!errsCount)throw new Error(`ajv implementation error`);const{allErrors,opts}=it;it.props=true;if(opts.removeAdditional!==`all`&&(0,util_1.alwaysValidSchema)(it,schema))return;const props=(0,code_1.allSchemaProperties)(parentSchema.properties);const patProps=(0,code_1.allSchemaProperties)(parentSchema.patternProperties);checkAdditionalProperties();cxt.ok((0,codegen_1._)`${errsCount} === ${names_1.default.errors}`);function checkAdditionalProperties(){gen.forIn(`key`,data,key=>{if(!props.length&&!patProps.length)additionalPropertyCode(key);else gen.if(isAdditional(key),()=>additionalPropertyCode(key))})}function isAdditional(key){let definedProp;if(props.length>8){const propsSchema=(0,util_1.schemaRefOrVal)(it,parentSchema.properties,`properties`);definedProp=(0,code_1.isOwnProperty)(gen,propsSchema,key)}else if(props.length)definedProp=(0,codegen_1.or)(...props.map(p=>(0,codegen_1._)`${key} === ${p}`));else definedProp=codegen_1.nil;if(patProps.length)definedProp=(0,codegen_1.or)(definedProp,...patProps.map(p=>(0,codegen_1._)`${(0,code_1.usePattern)(cxt,p)}.test(${key})`));return(0,codegen_1.not)(definedProp)}function deleteAdditional(key){gen.code((0,codegen_1._)`delete ${data}[${key}]`)}function additionalPropertyCode(key){if(opts.removeAdditional===`all`||opts.removeAdditional&&schema===false){deleteAdditional(key);return}if(schema===false){cxt.setParams({additionalProperty:key});cxt.error();if(!allErrors)gen.break();return}if(typeof schema==`object`&&!(0,util_1.alwaysValidSchema)(it,schema)){const valid=gen.name(`valid`);if(opts.removeAdditional===`failing`){applyAdditionalSchema(key,valid,false);gen.if((0,codegen_1.not)(valid),()=>{cxt.reset();deleteAdditional(key)})}else{applyAdditionalSchema(key,valid);if(!allErrors)gen.if((0,codegen_1.not)(valid),()=>gen.break())}}}function applyAdditionalSchema(key,valid,errors){const subschema={keyword:`additionalProperties`,dataProp:key,dataPropType:util_1.Type.Str};if(errors===false)Object.assign(subschema,{compositeRule:true,createErrors:false,allErrors:false});cxt.subschema(subschema,valid)}}};exports.default=def}));var require_properties=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var validate_1=require_validate();var code_1=require_code();var util_1=require_util();var additionalProperties_1=require_additionalProperties();var def={keyword:`properties`,type:`object`,schemaType:`object`,code(cxt){const{gen,schema,parentSchema,data,it}=cxt;if(it.opts.removeAdditional===`all`&&parentSchema.additionalProperties===void 0)additionalProperties_1.default.code(new validate_1.KeywordCxt(it,additionalProperties_1.default,`additionalProperties`));const allProps=(0,code_1.allSchemaProperties)(schema);for(const prop of allProps)it.definedProperties.add(prop);if(it.opts.unevaluated&&allProps.length&&it.props!==true)it.props=util_1.mergeEvaluated.props(gen,(0,util_1.toHash)(allProps),it.props);const properties=allProps.filter(p=>!(0,util_1.alwaysValidSchema)(it,schema[p]));if(properties.length===0)return;const valid=gen.name(`valid`);for(const prop of properties){if(hasDefault(prop))applyPropertySchema(prop);else{gen.if((0,code_1.propertyInData)(gen,data,prop,it.opts.ownProperties));applyPropertySchema(prop);if(!it.allErrors)gen.else().var(valid,true);gen.endIf()}cxt.it.definedProperties.add(prop);cxt.ok(valid)}function hasDefault(prop){return it.opts.useDefaults&&!it.compositeRule&&schema[prop].default!==void 0}function applyPropertySchema(prop){cxt.subschema({keyword:`properties`,schemaProp:prop,dataProp:prop},valid)}}};exports.default=def}));var require_patternProperties=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var code_1=require_code();var codegen_1=require_codegen();var util_1=require_util();var util_2=require_util();var def={keyword:`patternProperties`,type:`object`,schemaType:`object`,code(cxt){const{gen,schema,data,parentSchema,it}=cxt;const{opts}=it;const patterns=(0,code_1.allSchemaProperties)(schema);const alwaysValidPatterns=patterns.filter(p=>(0,util_1.alwaysValidSchema)(it,schema[p]));if(patterns.length===0||alwaysValidPatterns.length===patterns.length&&(!it.opts.unevaluated||it.props===true))return;const checkProperties=opts.strictSchema&&!opts.allowMatchingProperties&&parentSchema.properties;const valid=gen.name(`valid`);if(it.props!==true&&!(it.props instanceof codegen_1.Name))it.props=(0,util_2.evaluatedPropsToName)(gen,it.props);const{props}=it;validatePatternProperties();function validatePatternProperties(){for(const pat of patterns){if(checkProperties)checkMatchingProperties(pat);if(it.allErrors)validateProperties(pat);else{gen.var(valid,true);validateProperties(pat);gen.if(valid)}}}function checkMatchingProperties(pat){for(const prop in checkProperties)if(new RegExp(pat).test(prop))(0,util_1.checkStrictMode)(it,`property ${prop} matches pattern ${pat} (use allowMatchingProperties)`)}function validateProperties(pat){gen.forIn(`key`,data,key=>{gen.if((0,codegen_1._)`${(0,code_1.usePattern)(cxt,pat)}.test(${key})`,()=>{const alwaysValid=alwaysValidPatterns.includes(pat);if(!alwaysValid)cxt.subschema({keyword:`patternProperties`,schemaProp:pat,dataProp:key,dataPropType:util_2.Type.Str},valid);if(it.opts.unevaluated&&props!==true)gen.assign((0,codegen_1._)`${props}[${key}]`,true);else if(!alwaysValid&&!it.allErrors)gen.if((0,codegen_1.not)(valid),()=>gen.break())})})}}};exports.default=def}));var require_not=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var util_1=require_util();var def={keyword:`not`,schemaType:[`object`,`boolean`],trackErrors:true,code(cxt){const{gen,schema,it}=cxt;if((0,util_1.alwaysValidSchema)(it,schema)){cxt.fail();return}const valid=gen.name(`valid`);cxt.subschema({keyword:`not`,compositeRule:true,createErrors:false,allErrors:false},valid);cxt.failResult(valid,()=>cxt.reset(),()=>cxt.error())},error:{message:`must NOT be valid`}};exports.default=def}));var require_anyOf=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var def={keyword:`anyOf`,schemaType:`array`,trackErrors:true,code:require_code().validateUnion,error:{message:`must match a schema in anyOf`}};exports.default=def}));var require_oneOf=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var codegen_1=require_codegen();var util_1=require_util();var def={keyword:`oneOf`,schemaType:`array`,trackErrors:true,error:{message:`must match exactly one schema in oneOf`,params:({params})=>(0,codegen_1._)`{passingSchemas: ${params.passing}}`},code(cxt){const{gen,schema,parentSchema,it}=cxt;if(!Array.isArray(schema))throw new Error(`ajv implementation error`);if(it.opts.discriminator&&parentSchema.discriminator)return;const schArr=schema;const valid=gen.let(`valid`,false);const passing=gen.let(`passing`,null);const schValid=gen.name(`_valid`);cxt.setParams({passing});gen.block(validateOneOf);cxt.result(valid,()=>cxt.reset(),()=>cxt.error(true));function validateOneOf(){schArr.forEach((sch,i)=>{let schCxt;if((0,util_1.alwaysValidSchema)(it,sch))gen.var(schValid,true);else schCxt=cxt.subschema({keyword:`oneOf`,schemaProp:i,compositeRule:true},schValid);if(i>0)gen.if((0,codegen_1._)`${schValid} && ${valid}`).assign(valid,false).assign(passing,(0,codegen_1._)`[${passing}, ${i}]`).else();gen.if(schValid,()=>{gen.assign(valid,true);gen.assign(passing,i);if(schCxt)cxt.mergeEvaluated(schCxt,codegen_1.Name)})})}}};exports.default=def}));var require_allOf=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var util_1=require_util();var def={keyword:`allOf`,schemaType:`array`,code(cxt){const{gen,schema,it}=cxt;if(!Array.isArray(schema))throw new Error(`ajv implementation error`);const valid=gen.name(`valid`);schema.forEach((sch,i)=>{if((0,util_1.alwaysValidSchema)(it,sch))return;const schCxt=cxt.subschema({keyword:`allOf`,schemaProp:i},valid);cxt.ok(valid);cxt.mergeEvaluated(schCxt)})}};exports.default=def}));var require_if=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var codegen_1=require_codegen();var util_1=require_util();var def={keyword:`if`,schemaType:[`object`,`boolean`],trackErrors:true,error:{message:({params})=>(0,codegen_1.str)`must match "${params.ifClause}" schema`,params:({params})=>(0,codegen_1._)`{failingKeyword: ${params.ifClause}}`},code(cxt){const{gen,parentSchema,it}=cxt;if(parentSchema.then===void 0&&parentSchema.else===void 0)(0,util_1.checkStrictMode)(it,`"if" without "then" and "else" is ignored`);const hasThen=hasSchema(it,`then`);const hasElse=hasSchema(it,`else`);if(!hasThen&&!hasElse)return;const valid=gen.let(`valid`,true);const schValid=gen.name(`_valid`);validateIf();cxt.reset();if(hasThen&&hasElse){const ifClause=gen.let(`ifClause`);cxt.setParams({ifClause});gen.if(schValid,validateClause(`then`,ifClause),validateClause(`else`,ifClause))}else if(hasThen)gen.if(schValid,validateClause(`then`));else gen.if((0,codegen_1.not)(schValid),validateClause(`else`));cxt.pass(valid,()=>cxt.error(true));function validateIf(){const schCxt=cxt.subschema({keyword:`if`,compositeRule:true,createErrors:false,allErrors:false},schValid);cxt.mergeEvaluated(schCxt)}function validateClause(keyword,ifClause){return()=>{const schCxt=cxt.subschema({keyword},schValid);gen.assign(valid,schValid);cxt.mergeValidEvaluated(schCxt,valid);if(ifClause)gen.assign(ifClause,(0,codegen_1._)`${keyword}`);else cxt.setParams({ifClause:keyword})}}}};function hasSchema(it,keyword){const schema=it.schema[keyword];return schema!==void 0&&!(0,util_1.alwaysValidSchema)(it,schema)}exports.default=def}));var require_thenElse=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var util_1=require_util();var def={keyword:[`then`,`else`],schemaType:[`object`,`boolean`],code({keyword,parentSchema,it}){if(parentSchema.if===void 0)(0,util_1.checkStrictMode)(it,`"${keyword}" without "if" is ignored`)}};exports.default=def}));var require_applicator=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var additionalItems_1=require_additionalItems();var prefixItems_1=require_prefixItems();var items_1=require_items();var items2020_1=require_items2020();var contains_1=require_contains();var dependencies_1=require_dependencies();var propertyNames_1=require_propertyNames();var additionalProperties_1=require_additionalProperties();var properties_1=require_properties();var patternProperties_1=require_patternProperties();var not_1=require_not();var anyOf_1=require_anyOf();var oneOf_1=require_oneOf();var allOf_1=require_allOf();var if_1=require_if();var thenElse_1=require_thenElse();function getApplicator(draft2020=false){const applicator=[not_1.default,anyOf_1.default,oneOf_1.default,allOf_1.default,if_1.default,thenElse_1.default,propertyNames_1.default,additionalProperties_1.default,dependencies_1.default,properties_1.default,patternProperties_1.default];if(draft2020)applicator.push(prefixItems_1.default,items2020_1.default);else applicator.push(additionalItems_1.default,items_1.default);applicator.push(contains_1.default);return applicator}exports.default=getApplicator}));var require_format$1=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var codegen_1=require_codegen();var def={keyword:`format`,type:[`number`,`string`],schemaType:`string`,$data:true,error:{message:({schemaCode})=>(0,codegen_1.str)`must match format "${schemaCode}"`,params:({schemaCode})=>(0,codegen_1._)`{format: ${schemaCode}}`},code(cxt,ruleType){const{gen,data,$data,schema,schemaCode,it}=cxt;const{opts,errSchemaPath,schemaEnv,self}=it;if(!opts.validateFormats)return;if($data)validate$DataFormat();else validateFormat();function validate$DataFormat(){const fmts=gen.scopeValue(`formats`,{ref:self.formats,code:opts.code.formats});const fDef=gen.const(`fDef`,(0,codegen_1._)`${fmts}[${schemaCode}]`);const fType=gen.let(`fType`);const format=gen.let(`format`);gen.if((0,codegen_1._)`typeof ${fDef} == "object" && !(${fDef} instanceof RegExp)`,()=>gen.assign(fType,(0,codegen_1._)`${fDef}.type || "string"`).assign(format,(0,codegen_1._)`${fDef}.validate`),()=>gen.assign(fType,(0,codegen_1._)`"string"`).assign(format,fDef));cxt.fail$data((0,codegen_1.or)(unknownFmt(),invalidFmt()));function unknownFmt(){if(opts.strictSchema===false)return codegen_1.nil;return(0,codegen_1._)`${schemaCode} && !${format}`}function invalidFmt(){const callFormat=schemaEnv.$async?(0,codegen_1._)`(${fDef}.async ? await ${format}(${data}) : ${format}(${data}))`:(0,codegen_1._)`${format}(${data})`;const validData=(0,codegen_1._)`(typeof ${format} == "function" ? ${callFormat} : ${format}.test(${data}))`;return(0,codegen_1._)`${format} && ${format} !== true && ${fType} === ${ruleType} && !${validData}`}}function validateFormat(){const formatDef=self.formats[schema];if(!formatDef){unknownFormat();return}if(formatDef===true)return;const[fmtType,format,fmtRef]=getFormat(formatDef);if(fmtType===ruleType)cxt.pass(validCondition());function unknownFormat(){if(opts.strictSchema===false){self.logger.warn(unknownMsg());return}throw new Error(unknownMsg());function unknownMsg(){return`unknown format "${schema}" ignored in schema at path "${errSchemaPath}"`}}function getFormat(fmtDef){const code=fmtDef instanceof RegExp?(0,codegen_1.regexpCode)(fmtDef):opts.code.formats?(0,codegen_1._)`${opts.code.formats}${(0,codegen_1.getProperty)(schema)}`:void 0;const fmt=gen.scopeValue(`formats`,{key:schema,ref:fmtDef,code});if(typeof fmtDef==`object`&&!(fmtDef instanceof RegExp))return[fmtDef.type||`string`,fmtDef.validate,(0,codegen_1._)`${fmt}.validate`];return[`string`,fmtDef,fmt]}function validCondition(){if(typeof formatDef==`object`&&!(formatDef instanceof RegExp)&&formatDef.async){if(!schemaEnv.$async)throw new Error(`async format in sync schema`);return(0,codegen_1._)`await ${fmtRef}(${data})`}return typeof format==`function`?(0,codegen_1._)`${fmtRef}(${data})`:(0,codegen_1._)`${fmtRef}.test(${data})`}}}};exports.default=def}));var require_format=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var format=[require_format$1().default];exports.default=format}));var require_metadata=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.contentVocabulary=exports.metadataVocabulary=void 0;exports.metadataVocabulary=[`title`,`description`,`default`,`deprecated`,`readOnly`,`writeOnly`,`examples`];exports.contentVocabulary=[`contentMediaType`,`contentEncoding`,`contentSchema`]}));var require_draft7=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var core_1=require_core();var validation_1=require_validation();var applicator_1=require_applicator();var format_1=require_format();var metadata_1=require_metadata();var draft7Vocabularies=[core_1.default,validation_1.default,(0,applicator_1.default)(),format_1.default,metadata_1.metadataVocabulary,metadata_1.contentVocabulary];exports.default=draft7Vocabularies}));var require_types=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.DiscrError=void 0;var DiscrError;(function(DiscrError){DiscrError[`Tag`]=`tag`;DiscrError[`Mapping`]=`mapping`})(DiscrError||(exports.DiscrError=DiscrError={}))}));var require_discriminator=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var codegen_1=require_codegen();var types_1=require_types();var compile_1=require_compile();var ref_error_1=require_ref_error();var util_1=require_util();var def={keyword:`discriminator`,type:`object`,schemaType:`object`,error:{message:({params:{discrError,tagName}})=>discrError===types_1.DiscrError.Tag?`tag "${tagName}" must be string`:`value of tag "${tagName}" must be in oneOf`,params:({params:{discrError,tag,tagName}})=>(0,codegen_1._)`{error: ${discrError}, tag: ${tagName}, tagValue: ${tag}}`},code(cxt){const{gen,data,schema,parentSchema,it}=cxt;const{oneOf}=parentSchema;if(!it.opts.discriminator)throw new Error(`discriminator: requires discriminator option`);const tagName=schema.propertyName;if(typeof tagName!=`string`)throw new Error(`discriminator: requires propertyName`);if(schema.mapping)throw new Error(`discriminator: mapping is not supported`);if(!oneOf)throw new Error(`discriminator: requires oneOf keyword`);const valid=gen.let(`valid`,false);const tag=gen.const(`tag`,(0,codegen_1._)`${data}${(0,codegen_1.getProperty)(tagName)}`);gen.if((0,codegen_1._)`typeof ${tag} == "string"`,()=>validateMapping(),()=>cxt.error(false,{discrError:types_1.DiscrError.Tag,tag,tagName}));cxt.ok(valid);function validateMapping(){const mapping=getMapping();gen.if(false);for(const tagValue in mapping){gen.elseIf((0,codegen_1._)`${tag} === ${tagValue}`);gen.assign(valid,applyTagSchema(mapping[tagValue]))}gen.else();cxt.error(false,{discrError:types_1.DiscrError.Mapping,tag,tagName});gen.endIf()}function applyTagSchema(schemaProp){const _valid=gen.name(`valid`);const schCxt=cxt.subschema({keyword:`oneOf`,schemaProp},_valid);cxt.mergeEvaluated(schCxt,codegen_1.Name);return _valid}function getMapping(){var _a;const oneOfMapping={};const topRequired=hasRequired(parentSchema);let tagRequired=true;for(let i=0;i<oneOf.length;i++){let sch=oneOf[i];if((sch===null||sch===void 0?void 0:sch.$ref)&&!(0,util_1.schemaHasRulesButRef)(sch,it.self.RULES)){const ref=sch.$ref;sch=compile_1.resolveRef.call(it.self,it.schemaEnv.root,it.baseId,ref);if(sch instanceof compile_1.SchemaEnv)sch=sch.schema;if(sch===void 0)throw new ref_error_1.default(it.opts.uriResolver,it.baseId,ref)}const propSch=(_a=sch===null||sch===void 0?void 0:sch.properties)===null||_a===void 0?void 0:_a[tagName];if(typeof propSch!=`object`)throw new Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${tagName}"`);tagRequired=tagRequired&&(topRequired||hasRequired(sch));addMappings(propSch,i)}if(!tagRequired)throw new Error(`discriminator: "${tagName}" must be required`);return oneOfMapping;function hasRequired({required}){return Array.isArray(required)&&required.includes(tagName)}function addMappings(sch,i){if(sch.const)addMapping(sch.const,i);else if(sch.enum)for(const tagValue of sch.enum)addMapping(tagValue,i);else throw new Error(`discriminator: "properties/${tagName}" must have "const" or "enum"`)}function addMapping(tagValue,i){if(typeof tagValue!=`string`||tagValue in oneOfMapping)throw new Error(`discriminator: "${tagName}" values must be unique strings`);oneOfMapping[tagValue]=i}}}};exports.default=def}));var json_schema_draft_07_exports=__exportAll({$id:()=>$id,$schema:()=>$schema$1,default:()=>json_schema_draft_07_default,definitions:()=>definitions$1,properties:()=>properties$1,title:()=>title$1,type:()=>type$1});var $schema$1,$id,title$1,definitions$1,type$1,properties$1,json_schema_draft_07_default;var init_json_schema_draft_07=__esmMin((()=>{$schema$1=`http://json-schema.org/draft-07/schema#`;$id=`http://json-schema.org/draft-07/schema#`;title$1=`Core schema meta-schema`;definitions$1={"schemaArray":{"type":`array`,"minItems":1,"items":{"$ref":`#`}},"nonNegativeInteger":{"type":`integer`,"minimum":0},"nonNegativeIntegerDefault0":{"allOf":[{"$ref":`#/definitions/nonNegativeInteger`},{"default":0}]},"simpleTypes":{"enum":[`array`,`boolean`,`integer`,`null`,`number`,`object`,`string`]},"stringArray":{"type":`array`,"items":{"type":`string`},"uniqueItems":true,"default":[]}};type$1=[`object`,`boolean`];properties$1={"$id":{"type":`string`,"format":`uri-reference`},"$schema":{"type":`string`,"format":`uri`},"$ref":{"type":`string`,"format":`uri-reference`},"$comment":{"type":`string`},"title":{"type":`string`},"description":{"type":`string`},"default":true,"readOnly":{"type":`boolean`,"default":false},"examples":{"type":`array`,"items":true},"multipleOf":{"type":`number`,"exclusiveMinimum":0},"maximum":{"type":`number`},"exclusiveMaximum":{"type":`number`},"minimum":{"type":`number`},"exclusiveMinimum":{"type":`number`},"maxLength":{"$ref":`#/definitions/nonNegativeInteger`},"minLength":{"$ref":`#/definitions/nonNegativeIntegerDefault0`},"pattern":{"type":`string`,"format":`regex`},"additionalItems":{"$ref":`#`},"items":{"anyOf":[{"$ref":`#`},{"$ref":`#/definitions/schemaArray`}],"default":true},"maxItems":{"$ref":`#/definitions/nonNegativeInteger`},"minItems":{"$ref":`#/definitions/nonNegativeIntegerDefault0`},"uniqueItems":{"type":`boolean`,"default":false},"contains":{"$ref":`#`},"maxProperties":{"$ref":`#/definitions/nonNegativeInteger`},"minProperties":{"$ref":`#/definitions/nonNegativeIntegerDefault0`},"required":{"$ref":`#/definitions/stringArray`},"additionalProperties":{"$ref":`#`},"definitions":{"type":`object`,"additionalProperties":{"$ref":`#`},"default":{}},"properties":{"type":`object`,"additionalProperties":{"$ref":`#`},"default":{}},"patternProperties":{"type":`object`,"additionalProperties":{"$ref":`#`},"propertyNames":{"format":`regex`},"default":{}},"dependencies":{"type":`object`,"additionalProperties":{"anyOf":[{"$ref":`#`},{"$ref":`#/definitions/stringArray`}]}},"propertyNames":{"$ref":`#`},"const":true,"enum":{"type":`array`,"items":true,"minItems":1,"uniqueItems":true},"type":{"anyOf":[{"$ref":`#/definitions/simpleTypes`},{"type":`array`,"items":{"$ref":`#/definitions/simpleTypes`},"minItems":1,"uniqueItems":true}]},"format":{"type":`string`},"contentMediaType":{"type":`string`},"contentEncoding":{"type":`string`},"if":{"$ref":`#`},"then":{"$ref":`#`},"else":{"$ref":`#`},"allOf":{"$ref":`#/definitions/schemaArray`},"anyOf":{"$ref":`#/definitions/schemaArray`},"oneOf":{"$ref":`#/definitions/schemaArray`},"not":{"$ref":`#`}};json_schema_draft_07_default={$schema:$schema$1,$id,title:title$1,definitions:definitions$1,type:type$1,properties:properties$1,"default":true}}));var require_ajv=__commonJSMin(((exports,module)=>{Object.defineProperty(exports,"__esModule",{value:true});exports.MissingRefError=exports.ValidationError=exports.CodeGen=exports.Name=exports.nil=exports.stringify=exports.str=exports._=exports.KeywordCxt=exports.Ajv=void 0;var core_1=require_core$1();var draft7_1=require_draft7();var discriminator_1=require_discriminator();var draft7MetaSchema=(init_json_schema_draft_07(),__toCommonJS(json_schema_draft_07_exports).default);var META_SUPPORT_DATA=[`/properties`];var META_SCHEMA_ID=`http://json-schema.org/draft-07/schema`;var Ajv=class extends core_1.default{_addVocabularies(){super._addVocabularies();draft7_1.default.forEach(v=>this.addVocabulary(v));if(this.opts.discriminator)this.addKeyword(discriminator_1.default)}_addDefaultMetaSchema(){super._addDefaultMetaSchema();if(!this.opts.meta)return;const metaSchema=this.opts.$data?this.$dataMetaSchema(draft7MetaSchema,META_SUPPORT_DATA):draft7MetaSchema;this.addMetaSchema(metaSchema,META_SCHEMA_ID,false);this.refs[`http://json-schema.org/schema`]=META_SCHEMA_ID}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(META_SCHEMA_ID)?META_SCHEMA_ID:void 0)}};exports.Ajv=Ajv;module.exports=exports=Ajv;module.exports.Ajv=Ajv;Object.defineProperty(exports,"__esModule",{value:true});exports.default=Ajv;var validate_1=require_validate();Object.defineProperty(exports,"KeywordCxt",{enumerable:true,get:function(){return validate_1.KeywordCxt}});var codegen_1=require_codegen();Object.defineProperty(exports,"_",{enumerable:true,get:function(){return codegen_1._}});Object.defineProperty(exports,"str",{enumerable:true,get:function(){return codegen_1.str}});Object.defineProperty(exports,"stringify",{enumerable:true,get:function(){return codegen_1.stringify}});Object.defineProperty(exports,"nil",{enumerable:true,get:function(){return codegen_1.nil}});Object.defineProperty(exports,"Name",{enumerable:true,get:function(){return codegen_1.Name}});Object.defineProperty(exports,"CodeGen",{enumerable:true,get:function(){return codegen_1.CodeGen}});var validation_error_1=require_validation_error();Object.defineProperty(exports,"ValidationError",{enumerable:true,get:function(){return validation_error_1.default}});var ref_error_1=require_ref_error();Object.defineProperty(exports,"MissingRefError",{enumerable:true,get:function(){return ref_error_1.default}})}));var import_ajv=__toESM(require_ajv(),1);var $schema=`http://json-schema.org/draft-07/schema#`;var title=`Application payment declaration, integrations.json extensions.payments`;var type=`object`;var additionalProperties=false;var required=[`version`,`environments`,`plans`];var properties={"version":{"const":1},"environments":{"type":`object`,"additionalProperties":false,"minProperties":1,"properties":{"sandbox":{"$ref":`#/definitions/environment`},"live":{"$ref":`#/definitions/environment`}}},"plans":{"type":`object`,"minProperties":1,"maxProperties":100,"propertyNames":{"$ref":`#/definitions/id`},"additionalProperties":{"$ref":`#/definitions/plan`}}};var definitions={"id":{"type":`string`,"pattern":`^[a-z][a-z0-9-]*$`,"maxLength":100,"not":{"enum":[`constructor`,`prototype`]}},"env":{"type":`string`,"pattern":`^env:[A-Z_][A-Z0-9_]*$`,"maxLength":200},"environment":{"type":`object`,"additionalProperties":false,"required":[`integrationId`,`providerAccountId`,`webhookSecretRef`,`returnUrlRef`],"properties":{"integrationId":{"$ref":`#/definitions/id`},"providerAccountId":{"type":`string`,"minLength":1,"maxLength":200},"webhookSecretRef":{"$ref":`#/definitions/env`},"returnUrlRef":{"$ref":`#/definitions/env`},"taxCategory":{"type":`string`,"enum":[`digital-goods`,`ebooks`,`implementation-services`,`professional-services`,`saas`,`software-programming-services`,`standard`,`training-services`,`website-hosting`]},"publicClientTokenRef":{"$ref":`#/definitions/env`}}},"plan":{"type":`object`,"additionalProperties":false,"required":[`name`,`amount`,`currency`,`interval`,`features`,`renewalCredits`],"properties":{"name":{"type":`string`,"minLength":1,"maxLength":200},"amount":{"type":`integer`,"minimum":1,"maximum":1e9},"currency":{"type":`string`,"pattern":`^[A-Z]{3}$`},"interval":{"enum":[`month`,`year`]},"features":{"type":`array`,"maxItems":100,"uniqueItems":true,"items":{"$ref":`#/definitions/id`}},"renewalCredits":{"type":`integer`,"minimum":0,"maximum":1e9}}}};var configuration_schema_default={$schema,title,type,additionalProperties:false,required,properties,definitions};var validate=new import_ajv.default({allErrors:true,strict:true}).compile(configuration_schema_default);function validatePaymentConfiguration(document){const value=document?.extensions?.payments;if(!validate(value)){const error=new Error(`Check the application's payment configuration.`);error.code=`payment_configuration_invalid`;error.statusCode=422;error.fieldErrors=validate.errors.map(({instancePath,message})=>({path:`extensions.payments${instancePath}`,message}));throw error}for(const[environment,binding]of Object.entries(value.environments)){const slot=document.integrations?.[binding.integrationId];const path=`extensions.payments/environments/${environment}`;const fieldErrors=[];if(!slot||![`stripe`,`paddle`].includes(slot.provider)||slot.accountMode!==`shared`||slot.authentication?.method!==`api-key`||!/^env:[A-Z_][A-Z0-9_]*$/.test(slot.authentication.secretRef||``))fieldErrors.push({path:`${path}/integrationId`,message:`Select a shared Stripe or Paddle connection with a backend API-key Env reference for ${environment}.`});if(slot?.provider===`paddle`){if(slot.settings?.environment!==environment)fieldErrors.push({path:`${path}/integrationId`,message:`Select a Paddle connection configured for ${environment}.`});if(!binding.taxCategory)fieldErrors.push({path:`${path}/taxCategory`,message:`Choose the Paddle tax category for the products this app sells.`});if(!binding.publicClientTokenRef)fieldErrors.push({path:`${path}/publicClientTokenRef`,message:`Set the Env reference for this environment's Paddle public client token.`})}if(fieldErrors.length){const error=new Error(fieldErrors[0].message);error.code=`payment_configuration_invalid`;error.statusCode=422;error.fieldErrors=fieldErrors;throw error}}return JSON.parse(JSON.stringify(value))}var drafts=new Map;var verificationDrafts=new Map;function useIntegrationCommand(method,options){return useCommand({access:`never`,ownershipFilter:`public`,surfaceId:`app`,writeMethod:method,buildRawPayload:(_model,{context:request})=>request.body,buildCommandOptions:(_payload,{context:request})=>({method,path:request.path}),...options})}function useVibe64Integrations(context,selectedId){const configuration=ref(null);const baseline=ref(``);const baseHash=ref(null);const releaseId=ref(``);const production=computed(()=>context.value.integrationEnvironment===`production`);const fieldErrors=ref({});const error=ref(``);const changedElsewhere=ref(false);const sessionId=computed(()=>String(context.value.sessionId||``));const active=computed(()=>context.value.active!==false&&Boolean(production.value?context.value.productionIntegrationsApiPath:sessionId.value));const path=computed(()=>production.value?context.value.productionIntegrationsApiPath:vibe64SessionPath(readRefOrGetterValue(context.value.sessionsApiPath),sessionId.value,`/integrations`));const dirty=computed(()=>Boolean(configuration.value&&JSON.stringify(configuration.value)!==baseline.value));function rememberDraft(key){if(!key)return;if(dirty.value)drafts.set(key,{configuration:JSON.parse(JSON.stringify(configuration.value)),baseline:baseline.value,baseHash:baseHash.value});else drafts.delete(key)}watch(path,(key,previous)=>{rememberDraft(previous);const draft=drafts.get(key);configuration.value=draft?JSON.parse(JSON.stringify(draft.configuration)):null;baseline.value=draft?.baseline||``;baseHash.value=draft?.baseHash??null;releaseId.value=``;fieldErrors.value={};error.value=``;changedElsewhere.value=false},{flush:`sync`,immediate:true});const resource=useEndpointResource({path,enabled:active,queryKey:computed(()=>[`vibe64.integrations`,path.value]),requestRecoveryLabel:`Integrations`,fallbackLoadError:`Integrations could not load.`});const command=useIntegrationCommand(`PUT`,{apiSuffix:`/vibe64/integrations`,messages:{success:`Integration configuration saved.`,error:`Integration configuration could not be saved.`},placementSource:`vibe64.integrations.save`});const discoveryError=ref(``);const discoveryCommand=useIntegrationCommand(`POST`,{apiSuffix:`/vibe64/integrations/discovery`,messages:{error:`OAuth settings could not be discovered.`},placementSource:`vibe64.integrations.discovery`});watch([path,selectedId],()=>{discoveryError.value=``});async function discoverN8n(){const selected=configuration.value?.integrations[selectedId.value];if(!active.value||production.value||changedElsewhere.value||context.value.sourceOperationsSuspended||command.isRunning||setupCommand.isRunning||discoveryCommand.isRunning||selected?.provider!==`n8n`)return;const requestPath=path.value;const id=selectedId.value;const serverUrl=selected.settings?.serverUrl;discoveryError.value=``;try{const result=await discoveryCommand.run({path:`${requestPath}/n8n/discovery`,body:{serverUrl}});const current=configuration.value?.integrations[id];if(disposed||path.value!==requestPath||selectedId.value!==id||current!==selected||current.settings?.serverUrl!==serverUrl)return;if(!result?.ok||!result.discovery)throw new Error(result?.error||`OAuth settings could not be discovered.`);const available=new Set(result.discovery.scopes);configuration.value={...configuration.value,integrations:{...configuration.value.integrations,[id]:{...current,scopes:current.scopes.filter(scope=>available.has(scope)),settings:{...current.settings,serverUrl:result.discovery.resource,oauthDiscovery:result.discovery}}}}}catch(failure){if(!disposed&&path.value===requestPath&&selectedId.value===id)discoveryError.value=failure.message||`OAuth settings could not be discovered.`}}const registrationError=ref(``);const registrationNeedsReview=ref(false);const registrationCommand=useIntegrationCommand(`POST`,{apiSuffix:`/vibe64/integrations/oauth-client`,messages:{error:`Client registration did not finish. Check the provider and project Env before trying again.`},placementSource:`vibe64.integrations.registration`});watch([path,selectedId],()=>{registrationError.value=``;registrationNeedsReview.value=false});async function registerOAuthClient(callbackUrl){const selected=configuration.value?.integrations[selectedId.value];if(!active.value||production.value||changedElsewhere.value||context.value.sourceOperationsSuspended||context.value.owner===false||registrationNeedsReview.value||command.isRunning||setupCommand.isRunning||discoveryCommand.isRunning||registrationCommand.isRunning||![`n8n`,`amplitude`,`atlassian`,`confidence-exp`,`confidence-flags`,`sanity`,`sentry`,`granola`,`hex`,`heygen`].includes(selected?.provider))return;const requestPath=path.value;const id=selectedId.value;const snapshot=JSON.stringify(configuration.value);registrationError.value=``;registrationNeedsReview.value=true;try{const result=await registrationCommand.run({path:`${requestPath}/${encodeURIComponent(id)}/oauth-client`,body:{configuration:JSON.parse(snapshot),baseHash:baseHash.value,callbackUrl,originId:vibe64BrowserTabOriginId()}});if(disposed||path.value!==requestPath||selectedId.value!==id)return;if(!result?.ok||!result.configuration)throw new Error(result?.error||`Registration did not finish. Check the provider and Env before another attempt.`);if(JSON.stringify(configuration.value)!==snapshot){changedElsewhere.value=true;throw new Error(`Client registration was saved, but this draft changed. Reload configuration and inspect Env before connecting.`)}apply(result);registrationNeedsReview.value=false;await runSetup(`connect`)}catch(failure){if(disposed||path.value!==requestPath||selectedId.value!==id)return;registrationError.value=failure.message||`Check the provider and Env before another registration attempt.`;fieldErrors.value=failure.fieldErrors||failure.details?.fieldErrors||{}}}const connection=ref(null);const verificationInput=ref({});const verificationKey=computed(()=>`${path.value}/${selectedId.value||``}`);watch(verificationKey,(key,previous)=>{if(previous)verificationDrafts.set(previous,{...verificationInput.value});verificationInput.value={...verificationDrafts.get(key)}},{immediate:true,flush:`sync`});const connectionError=ref(``);const setupCommand=useIntegrationCommand(`POST`,{apiSuffix:`/vibe64/integrations/setup`,suppressSuccessMessage:true,messages:{error:`The application could not update this connection.`},placementSource:`vibe64.integrations.setup`});const setupRequest=computed(()=>{const request=context.value.integrationSetupRequest;if(production.value||!request||request.sessionId!==sessionId.value||request.integrationId!==selectedId.value||typeof request.turnId!==`string`||!/^\d{6,32}$/u.test(request.turnId)||typeof request.requestId!==`string`||!/^[a-f0-9]{64}$/u.test(request.requestId))return null;return{turnId:request.turnId,requestId:request.requestId,configurationHash:baseHash.value}});const connectionRefresh=ref(0);const connectionKey=computed(()=>`${path.value}/${selectedId.value||``}/${baseHash.value||``}/${releaseId.value}/${setupRequest.value?.turnId||``}/${setupRequest.value?.requestId||``}/${connectionRefresh.value}`);function refreshConnection(){connectionRefresh.value+=1}const paymentResult=ref(null);const paymentError=ref(``);const paymentOperation=ref(``);watch([connectionKey,dirty,active],()=>{paymentResult.value=null;paymentError.value=``;paymentOperation.value=``});async function runPaymentOperation({operation,paymentEnvironment,reviewId,providerId,subjectId,collection,after}){if(production.value&&(!releaseId.value||context.value.owner!==true)||context.value.owner===false||!active.value||dirty.value||changedElsewhere.value||setupCommand.isRunning||command.isRunning||!production.value&&context.value.sourceOperationsSuspended)return;const binding=configuration.value?.extensions?.payments?.environments?.[paymentEnvironment];if(!binding||binding.integrationId!==selectedId.value)return;if(![`payments-preview`,`payments-publish`,`payments-readiness`,`payments-recover`,`payments-history`].includes(operation))return;if(operation===`payments-publish`&&(paymentResult.value?.paymentEnvironment!==paymentEnvironment||paymentResult.value?.review?.reviewId!==reviewId||paymentResult.value.review.pending||paymentResult.value.review.drift.length))return;if(operation===`payments-recover`&&(paymentResult.value?.paymentEnvironment!==paymentEnvironment||paymentResult.value?.review?.reviewId!==reviewId||!paymentResult.value?.review?.pending||!/^[A-Za-z0-9_-]{1,200}$/.test(providerId||``)))return;const key=connectionKey.value;paymentError.value=``;paymentOperation.value=operation;paymentResult.value=null;try{const result=await setupCommand.run({path:`${path.value}/${encodeURIComponent(selectedId.value)}/setup`,body:{operation,paymentEnvironment,...operation===`payments-history`?{subjectId,collection,after:after??null}:{},...production.value?{releaseId:releaseId.value}:{},...[`payments-publish`,`payments-recover`].includes(operation)?{reviewId}:{},...operation===`payments-recover`?{providerId}:{}}});if(!disposed&&key===connectionKey.value&&!dirty.value)paymentResult.value=result}catch{if(!disposed&&key===connectionKey.value){paymentResult.value=null;paymentError.value=[`payments-publish`,`payments-recover`].includes(operation)?`Publication did not finish cleanly. Check the application's pending provider operation before publishing again; changes may already exist.`:`The application could not inspect payments. Check its payment command, configuration and Env, then retry.`}}}const adsResult=ref(null);const adsError=ref(``);watch([connectionKey,dirty,active],()=>{adsResult.value=null;adsError.value=``});async function runAdsOperation({operation,ads={}}){if(production.value||context.value.owner===false||!active.value||dirty.value||changedElsewhere.value||setupCommand.isRunning||command.isRunning||context.value.sourceOperationsSuspended||configuration.value?.integrations[selectedId.value]?.provider!==`google-ads`)return;const key=connectionKey.value;adsError.value=``;adsResult.value=null;try{const result=await setupCommand.run({path:`${path.value}/${encodeURIComponent(selectedId.value)}/setup`,body:{operation,ads}});if(!disposed&&key===connectionKey.value&&!dirty.value)adsResult.value=result}catch{if(!disposed&&key===connectionKey.value)adsError.value=`The advertising operation did not complete. Inspect Google Ads before repeating a write: it may already have succeeded. Check the app command, permissions and Env for details.`}}async function runSetup(operation=`status`){const selected=configuration.value?.integrations[selectedId.value];if(connectorDefinitions.some(provider=>provider.id===selected?.provider&&(provider.configurationOnly||provider.configurationOnlyForSettings?.(selected?.settings||{}))))return;if(production.value&&(!releaseId.value||context.value.owner!==true)||!active.value||!Object.hasOwn(configuration.value?.integrations||{},selectedId.value)||dirty.value||changedElsewhere.value||setupCommand.isRunning||command.isRunning||!production.value&&context.value.sourceOperationsSuspended)return;const key=connectionKey.value;const endpoint=`${path.value}/${encodeURIComponent(selectedId.value)}/setup`;const releaseSelection=production.value?{releaseId:releaseId.value}:{};connectionError.value=``;try{const result=await setupCommand.run({path:endpoint,body:{operation,...releaseSelection,...setupRequest.value&&[`status`,`connect`].includes(operation)&&(operation===`status`||!connection.value?.integrationSetup||connection.value.integrationSetup.outcome===`pending`)?{setupRequest:setupRequest.value}:{},...operation===`cancel`?{attemptId:connection.value?.attemptId}:{},...operation===`connect`&&Object.keys(verificationInput.value).length?{verificationInput:{...verificationInput.value}}:{}}});if(disposed||connectionKey.value!==key)return;connection.value=result;if(setupRequest.value&&result.integrationSetup?.outcome===`completed`&&result.integrationSetup.continuation?.status!==`accepted`){try{const resumed=await setupCommand.run({path:vibe64SessionPath(readRefOrGetterValue(context.value.sessionsApiPath),sessionId.value,`/integration-setup/resume`),body:{turnId:setupRequest.value.turnId,requestId:setupRequest.value.requestId}});if(!disposed&&connectionKey.value===key)connection.value={...result,integrationSetup:resumed.integrationSetup}}finally{if(!disposed&&connectionKey.value===key&&typeof context.value.refreshConversation===`function`)await context.value.refreshConversation()}if(disposed||connectionKey.value!==key)return}else if(result.integrationSetup&&typeof context.value.refreshConversation===`function`){await context.value.refreshConversation();if(disposed||connectionKey.value!==key)return}if(operation===`cancel`){const status=await setupCommand.run({path:endpoint,body:{operation:`status`,...releaseSelection}});if(!disposed&&connectionKey.value===key)connection.value=status}}catch(failure){if(!disposed&&connectionKey.value===key){connectionError.value=failure.message||`Connection could not be checked.`;if(operation===`connect`&&configuration.value.integrations[selectedId.value].authentication.method!==`oauth2`&&[`connected`,`reconnect-required`].includes(connection.value?.status))try{const status=await setupCommand.run({path:endpoint,body:{operation:`status`,...releaseSelection}});if(!disposed&&connectionKey.value===key)connection.value=status}catch{}}}}watch([connectionKey,active],()=>{connection.value=null;connectionError.value=``;if(active.value&&!dirty.value&&configuration.value?.integrations[selectedId.value]?.accountMode!==`per-user`)runSetup()});watch([()=>command.isRunning,()=>setupCommand.isRunning],()=>{if(!connection.value&&!connectionError.value&&!command.isRunning&&!setupCommand.isRunning&&configuration.value?.integrations[selectedId.value]?.accountMode!==`per-user`)runSetup()});let disposed=false;function refreshPendingConnection(){if(disposed||globalThis.document?.visibilityState===`hidden`||connection.value?.status!==`pending`||configuration.value?.integrations[selectedId.value]?.accountMode===`per-user`)return;runSetup(`status`)}globalThis.window?.addEventListener(`focus`,refreshPendingConnection);globalThis.document?.addEventListener(`visibilitychange`,refreshPendingConnection);onScopeDispose(()=>{globalThis.window?.removeEventListener(`focus`,refreshPendingConnection);globalThis.document?.removeEventListener(`visibilitychange`,refreshPendingConnection);rememberDraft(path.value);verificationDrafts.set(verificationKey.value,{...verificationInput.value});disposed=true});function apply(payload){configuration.value=JSON.parse(JSON.stringify(payload.configuration));baseline.value=JSON.stringify(payload.configuration);baseHash.value=payload.baseHash;releaseId.value=production.value?payload.releaseId||``:``;changedElsewhere.value=false;error.value=``;fieldErrors.value={}}watch(resource.data,payload=>{if(!payload?.configuration||disposed||payload.environment===`production`!==production.value)return;if(dirty.value)changedElsewhere.value=payload.baseHash!==baseHash.value;else apply(payload)},{immediate:true});useRealtimeEvent({event:VIBE64_SOURCE_EDITOR_FILE_CHANGED_EVENT,enabled:active,onEvent:({payload})=>{if(production.value||payload.sessionId!==sessionId.value||payload.path!==`integrations.json`||payload.originId===vibe64BrowserTabOriginId())return;resource.reload()}});async function save(){if(production.value||!dirty.value||changedElsewhere.value||registrationCommand.isRunning||discoveryCommand.isRunning||command.isRunning||context.value.sourceOperationsSuspended)return;const requestPath=path.value;error.value=``;fieldErrors.value={};try{const validated=validateIntegrationConfiguration(configuration.value,{providers:[googleCalendarDefinition,...connectorDefinitions],allowUnknownProviders:true});if(validated.extensions?.payments)validatePaymentConfiguration(validated);const payload=await command.run({path:path.value,body:{configuration:validated,baseHash:baseHash.value,originId:vibe64BrowserTabOriginId()}});if(payload&&!disposed&&path.value===requestPath)apply(payload)}catch(failure){if(disposed||path.value!==requestPath)return;fieldErrors.value=failure.fieldErrors||failure.details?.fieldErrors||{};error.value=failure.message||`Configuration could not be saved. Reload to check for other changes.`;if(failure.code===`vibe64_source_editor_conflict`||failure.code===`vibe64_source_editor_file_exists`)changedElsewhere.value=true}}async function discard(){if(command.isRunning)return;const requestPath=path.value;const result=await resource.reload();if(result?.data?.configuration&&!result.isError&&!disposed&&path.value===requestPath)apply(result.data)}return{adsResult,adsError,runAdsOperation,paymentResult,paymentError,paymentOperation,runPaymentOperation,registrationCommand,registrationError,registrationNeedsReview,registerOAuthClient,discoveryCommand,discoveryError,discoverN8n,releaseId,connection,connectionError,verificationInput,setupCommand,runSetup,refreshConnection,configuration,dirty,resource,command,fieldErrors,error,changedElsewhere,save,discard}}function integrationCallbackUrl(applicationPublicUrl,callbackPath){try{const origin=new URL(applicationPublicUrl);const local=origin.protocol===`http:`&&[`localhost`,`127.0.0.1`,`[::1]`].includes(origin.hostname);if(origin.protocol!==`https:`&&!local||origin.username||origin.password||origin.search||origin.hash||origin.pathname!==`/`||typeof callbackPath!==`string`||!/^\/[A-Za-z0-9/_-]+$/u.test(callbackPath)||callbackPath.startsWith(`//`))return``;return new URL(callbackPath,origin).href}catch{return``}}var id={type:`string`,required:true,validator:value=>/^[0-9]{1,20}$/.test(value)||`Use a numeric Google ID.`};var text=max=>({type:`string`,required:true,minLength:1,maxLength:max,validator:value=>!/[\p{Cc}\p{Cf}]/u.test(value)||`Use plain text without control characters.`});var list=(item,min,max)=>({type:`array`,required:true,items:item,validator:values=>values.length>=min&&values.length<=max||`Provide ${min}–${max} values.`});var micros={type:`string`,required:true,validator:value=>/^[1-9][0-9]{0,11}$/.test(value)||`Use a positive integer string of at most 12 digits.`};var googleAdsSearchFields={customerId:{...id,validator:value=>/^[0-9]{10}$/.test(value)||`Use a ten-digit customer ID.`},nonPolitical:{type:`boolean`,required:true,validator:value=>value===true||`This Search recipe supports only non-political advertising.`},name:text(100),currency:{type:`string`,required:true,validator:value=>/^[A-Z]{3}$/.test(value)||`Use the uppercase account currency code.`},dailyBudgetMicros:micros,maxCpcMicros:micros,finalUrl:{...text(2048),validator:value=>{try{const url=new URL(value);return url.protocol===`https:`&&!url.username&&!url.password&&!url.hash||`Use the public HTTPS landing page.`}catch{return`Use the public HTTPS landing page.`}}},conversionActionId:id,locationIds:list(id,1,10),languageId:id,keywords:list(text(80),1,20),headlines:list(text(30),3,15),descriptions:list(text(90),2,4)};var schema=createSchema(googleAdsSearchFields);function validateGoogleAdsSearchPlan(input){for(const key of[`customerId`,`name`,`currency`,`dailyBudgetMicros`,`maxCpcMicros`,`finalUrl`,`conversionActionId`,`languageId`])if(typeof input?.[key]!==`string`)throw new Error(`Search plan ${key} must be a string.`);return validateSchemaPayload({schema,mode:`replace`},input,{statusCode:422})}var _hoisted_1$3={"aria-label":`Google Ads Search campaigns`,class:`mt-6`};var _hoisted_2$3={key:1};var _hoisted_3$2={key:0};var _hoisted_4$2={key:1,class:`my-3`};var _hoisted_5$2={key:0,"aria-label":`Conversion installation instructions`};var _hoisted_6$2={key:5,"aria-label":`Search creation review`,class:`my-4`};var _hoisted_7$2={key:6,role:`status`};var _hoisted_8$2={key:7,role:`status`};var _hoisted_9$2={"aria-label":`Campaign launch and reporting`,class:`mt-6`};var _hoisted_10$2={key:0};var _hoisted_11$2={key:1};var _hoisted_12$2={key:2};var _sfc_main$4={__name:`GoogleAdsSearchPanel`,props:{modelValue:Object,integrationId:String,disabled:Boolean,managementDisabled:Boolean,result:Object,error:String,loading:Boolean,applicationPublicUrl:String,canPrepare:Boolean},emits:[`update:modelValue`,`manage`,`prepare`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const saved=computed(()=>props.modelValue.extensions?.googleAdsSearch?.[props.integrationId]);const draft=ref({});const formError=ref(``);const discovery=ref(null),targets=ref(null),campaignId=ref(``),locationName=ref(``),goalName=ref(``);const confirm=ref(``),trackingConfirmed=ref(false),billingConfirmed=ref(false);const result=computed(()=>props.result?.status===`ads`?props.result:null);const lines=value=>String(value||``).split(`
|
|
8
|
+
deps: ${deps}}`};var def={keyword:`dependencies`,type:`object`,schemaType:`object`,error:exports.error,code(cxt){const[propDeps,schDeps]=splitDependencies(cxt);validatePropertyDeps(cxt,propDeps);validateSchemaDeps(cxt,schDeps)}};function splitDependencies({schema}){const propertyDeps={};const schemaDeps={};for(const key in schema){if(key===`__proto__`)continue;const deps=Array.isArray(schema[key])?propertyDeps:schemaDeps;deps[key]=schema[key]}return[propertyDeps,schemaDeps]}function validatePropertyDeps(cxt,propertyDeps=cxt.schema){const{gen,data,it}=cxt;if(Object.keys(propertyDeps).length===0)return;const missing=gen.let(`missing`);for(const prop in propertyDeps){const deps=propertyDeps[prop];if(deps.length===0)continue;const hasProperty=(0,code_1.propertyInData)(gen,data,prop,it.opts.ownProperties);cxt.setParams({property:prop,depsCount:deps.length,deps:deps.join(`, `)});if(it.allErrors)gen.if(hasProperty,()=>{for(const depProp of deps)(0,code_1.checkReportMissingProp)(cxt,depProp)});else{gen.if((0,codegen_1._)`${hasProperty} && (${(0,code_1.checkMissingProp)(cxt,deps,missing)})`);(0,code_1.reportMissingProp)(cxt,missing);gen.else()}}}exports.validatePropertyDeps=validatePropertyDeps;function validateSchemaDeps(cxt,schemaDeps=cxt.schema){const{gen,data,keyword,it}=cxt;const valid=gen.name(`valid`);for(const prop in schemaDeps){if((0,util_1.alwaysValidSchema)(it,schemaDeps[prop]))continue;gen.if((0,code_1.propertyInData)(gen,data,prop,it.opts.ownProperties),()=>{const schCxt=cxt.subschema({keyword,schemaProp:prop},valid);cxt.mergeValidEvaluated(schCxt,valid)},()=>gen.var(valid,true));cxt.ok(valid)}}exports.validateSchemaDeps=validateSchemaDeps;exports.default=def}));var require_propertyNames=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var codegen_1=require_codegen();var util_1=require_util();var def={keyword:`propertyNames`,type:`object`,schemaType:[`object`,`boolean`],error:{message:`property name must be valid`,params:({params})=>(0,codegen_1._)`{propertyName: ${params.propertyName}}`},code(cxt){const{gen,schema,data,it}=cxt;if((0,util_1.alwaysValidSchema)(it,schema))return;const valid=gen.name(`valid`);gen.forIn(`key`,data,key=>{cxt.setParams({propertyName:key});cxt.subschema({keyword:`propertyNames`,data:key,dataTypes:[`string`],propertyName:key,compositeRule:true},valid);gen.if((0,codegen_1.not)(valid),()=>{cxt.error(true);if(!it.allErrors)gen.break()})});cxt.ok(valid)}};exports.default=def}));var require_additionalProperties=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var code_1=require_code();var codegen_1=require_codegen();var names_1=require_names();var util_1=require_util();var def={keyword:`additionalProperties`,type:[`object`],schemaType:[`boolean`,`object`],allowUndefined:true,trackErrors:true,error:{message:`must NOT have additional properties`,params:({params})=>(0,codegen_1._)`{additionalProperty: ${params.additionalProperty}}`},code(cxt){const{gen,schema,parentSchema,data,errsCount,it}=cxt;if(!errsCount)throw new Error(`ajv implementation error`);const{allErrors,opts}=it;it.props=true;if(opts.removeAdditional!==`all`&&(0,util_1.alwaysValidSchema)(it,schema))return;const props=(0,code_1.allSchemaProperties)(parentSchema.properties);const patProps=(0,code_1.allSchemaProperties)(parentSchema.patternProperties);checkAdditionalProperties();cxt.ok((0,codegen_1._)`${errsCount} === ${names_1.default.errors}`);function checkAdditionalProperties(){gen.forIn(`key`,data,key=>{if(!props.length&&!patProps.length)additionalPropertyCode(key);else gen.if(isAdditional(key),()=>additionalPropertyCode(key))})}function isAdditional(key){let definedProp;if(props.length>8){const propsSchema=(0,util_1.schemaRefOrVal)(it,parentSchema.properties,`properties`);definedProp=(0,code_1.isOwnProperty)(gen,propsSchema,key)}else if(props.length)definedProp=(0,codegen_1.or)(...props.map(p=>(0,codegen_1._)`${key} === ${p}`));else definedProp=codegen_1.nil;if(patProps.length)definedProp=(0,codegen_1.or)(definedProp,...patProps.map(p=>(0,codegen_1._)`${(0,code_1.usePattern)(cxt,p)}.test(${key})`));return(0,codegen_1.not)(definedProp)}function deleteAdditional(key){gen.code((0,codegen_1._)`delete ${data}[${key}]`)}function additionalPropertyCode(key){if(opts.removeAdditional===`all`||opts.removeAdditional&&schema===false){deleteAdditional(key);return}if(schema===false){cxt.setParams({additionalProperty:key});cxt.error();if(!allErrors)gen.break();return}if(typeof schema==`object`&&!(0,util_1.alwaysValidSchema)(it,schema)){const valid=gen.name(`valid`);if(opts.removeAdditional===`failing`){applyAdditionalSchema(key,valid,false);gen.if((0,codegen_1.not)(valid),()=>{cxt.reset();deleteAdditional(key)})}else{applyAdditionalSchema(key,valid);if(!allErrors)gen.if((0,codegen_1.not)(valid),()=>gen.break())}}}function applyAdditionalSchema(key,valid,errors){const subschema={keyword:`additionalProperties`,dataProp:key,dataPropType:util_1.Type.Str};if(errors===false)Object.assign(subschema,{compositeRule:true,createErrors:false,allErrors:false});cxt.subschema(subschema,valid)}}};exports.default=def}));var require_properties=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var validate_1=require_validate();var code_1=require_code();var util_1=require_util();var additionalProperties_1=require_additionalProperties();var def={keyword:`properties`,type:`object`,schemaType:`object`,code(cxt){const{gen,schema,parentSchema,data,it}=cxt;if(it.opts.removeAdditional===`all`&&parentSchema.additionalProperties===void 0)additionalProperties_1.default.code(new validate_1.KeywordCxt(it,additionalProperties_1.default,`additionalProperties`));const allProps=(0,code_1.allSchemaProperties)(schema);for(const prop of allProps)it.definedProperties.add(prop);if(it.opts.unevaluated&&allProps.length&&it.props!==true)it.props=util_1.mergeEvaluated.props(gen,(0,util_1.toHash)(allProps),it.props);const properties=allProps.filter(p=>!(0,util_1.alwaysValidSchema)(it,schema[p]));if(properties.length===0)return;const valid=gen.name(`valid`);for(const prop of properties){if(hasDefault(prop))applyPropertySchema(prop);else{gen.if((0,code_1.propertyInData)(gen,data,prop,it.opts.ownProperties));applyPropertySchema(prop);if(!it.allErrors)gen.else().var(valid,true);gen.endIf()}cxt.it.definedProperties.add(prop);cxt.ok(valid)}function hasDefault(prop){return it.opts.useDefaults&&!it.compositeRule&&schema[prop].default!==void 0}function applyPropertySchema(prop){cxt.subschema({keyword:`properties`,schemaProp:prop,dataProp:prop},valid)}}};exports.default=def}));var require_patternProperties=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var code_1=require_code();var codegen_1=require_codegen();var util_1=require_util();var util_2=require_util();var def={keyword:`patternProperties`,type:`object`,schemaType:`object`,code(cxt){const{gen,schema,data,parentSchema,it}=cxt;const{opts}=it;const patterns=(0,code_1.allSchemaProperties)(schema);const alwaysValidPatterns=patterns.filter(p=>(0,util_1.alwaysValidSchema)(it,schema[p]));if(patterns.length===0||alwaysValidPatterns.length===patterns.length&&(!it.opts.unevaluated||it.props===true))return;const checkProperties=opts.strictSchema&&!opts.allowMatchingProperties&&parentSchema.properties;const valid=gen.name(`valid`);if(it.props!==true&&!(it.props instanceof codegen_1.Name))it.props=(0,util_2.evaluatedPropsToName)(gen,it.props);const{props}=it;validatePatternProperties();function validatePatternProperties(){for(const pat of patterns){if(checkProperties)checkMatchingProperties(pat);if(it.allErrors)validateProperties(pat);else{gen.var(valid,true);validateProperties(pat);gen.if(valid)}}}function checkMatchingProperties(pat){for(const prop in checkProperties)if(new RegExp(pat).test(prop))(0,util_1.checkStrictMode)(it,`property ${prop} matches pattern ${pat} (use allowMatchingProperties)`)}function validateProperties(pat){gen.forIn(`key`,data,key=>{gen.if((0,codegen_1._)`${(0,code_1.usePattern)(cxt,pat)}.test(${key})`,()=>{const alwaysValid=alwaysValidPatterns.includes(pat);if(!alwaysValid)cxt.subschema({keyword:`patternProperties`,schemaProp:pat,dataProp:key,dataPropType:util_2.Type.Str},valid);if(it.opts.unevaluated&&props!==true)gen.assign((0,codegen_1._)`${props}[${key}]`,true);else if(!alwaysValid&&!it.allErrors)gen.if((0,codegen_1.not)(valid),()=>gen.break())})})}}};exports.default=def}));var require_not=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var util_1=require_util();var def={keyword:`not`,schemaType:[`object`,`boolean`],trackErrors:true,code(cxt){const{gen,schema,it}=cxt;if((0,util_1.alwaysValidSchema)(it,schema)){cxt.fail();return}const valid=gen.name(`valid`);cxt.subschema({keyword:`not`,compositeRule:true,createErrors:false,allErrors:false},valid);cxt.failResult(valid,()=>cxt.reset(),()=>cxt.error())},error:{message:`must NOT be valid`}};exports.default=def}));var require_anyOf=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var def={keyword:`anyOf`,schemaType:`array`,trackErrors:true,code:require_code().validateUnion,error:{message:`must match a schema in anyOf`}};exports.default=def}));var require_oneOf=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var codegen_1=require_codegen();var util_1=require_util();var def={keyword:`oneOf`,schemaType:`array`,trackErrors:true,error:{message:`must match exactly one schema in oneOf`,params:({params})=>(0,codegen_1._)`{passingSchemas: ${params.passing}}`},code(cxt){const{gen,schema,parentSchema,it}=cxt;if(!Array.isArray(schema))throw new Error(`ajv implementation error`);if(it.opts.discriminator&&parentSchema.discriminator)return;const schArr=schema;const valid=gen.let(`valid`,false);const passing=gen.let(`passing`,null);const schValid=gen.name(`_valid`);cxt.setParams({passing});gen.block(validateOneOf);cxt.result(valid,()=>cxt.reset(),()=>cxt.error(true));function validateOneOf(){schArr.forEach((sch,i)=>{let schCxt;if((0,util_1.alwaysValidSchema)(it,sch))gen.var(schValid,true);else schCxt=cxt.subschema({keyword:`oneOf`,schemaProp:i,compositeRule:true},schValid);if(i>0)gen.if((0,codegen_1._)`${schValid} && ${valid}`).assign(valid,false).assign(passing,(0,codegen_1._)`[${passing}, ${i}]`).else();gen.if(schValid,()=>{gen.assign(valid,true);gen.assign(passing,i);if(schCxt)cxt.mergeEvaluated(schCxt,codegen_1.Name)})})}}};exports.default=def}));var require_allOf=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var util_1=require_util();var def={keyword:`allOf`,schemaType:`array`,code(cxt){const{gen,schema,it}=cxt;if(!Array.isArray(schema))throw new Error(`ajv implementation error`);const valid=gen.name(`valid`);schema.forEach((sch,i)=>{if((0,util_1.alwaysValidSchema)(it,sch))return;const schCxt=cxt.subschema({keyword:`allOf`,schemaProp:i},valid);cxt.ok(valid);cxt.mergeEvaluated(schCxt)})}};exports.default=def}));var require_if=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var codegen_1=require_codegen();var util_1=require_util();var def={keyword:`if`,schemaType:[`object`,`boolean`],trackErrors:true,error:{message:({params})=>(0,codegen_1.str)`must match "${params.ifClause}" schema`,params:({params})=>(0,codegen_1._)`{failingKeyword: ${params.ifClause}}`},code(cxt){const{gen,parentSchema,it}=cxt;if(parentSchema.then===void 0&&parentSchema.else===void 0)(0,util_1.checkStrictMode)(it,`"if" without "then" and "else" is ignored`);const hasThen=hasSchema(it,`then`);const hasElse=hasSchema(it,`else`);if(!hasThen&&!hasElse)return;const valid=gen.let(`valid`,true);const schValid=gen.name(`_valid`);validateIf();cxt.reset();if(hasThen&&hasElse){const ifClause=gen.let(`ifClause`);cxt.setParams({ifClause});gen.if(schValid,validateClause(`then`,ifClause),validateClause(`else`,ifClause))}else if(hasThen)gen.if(schValid,validateClause(`then`));else gen.if((0,codegen_1.not)(schValid),validateClause(`else`));cxt.pass(valid,()=>cxt.error(true));function validateIf(){const schCxt=cxt.subschema({keyword:`if`,compositeRule:true,createErrors:false,allErrors:false},schValid);cxt.mergeEvaluated(schCxt)}function validateClause(keyword,ifClause){return()=>{const schCxt=cxt.subschema({keyword},schValid);gen.assign(valid,schValid);cxt.mergeValidEvaluated(schCxt,valid);if(ifClause)gen.assign(ifClause,(0,codegen_1._)`${keyword}`);else cxt.setParams({ifClause:keyword})}}}};function hasSchema(it,keyword){const schema=it.schema[keyword];return schema!==void 0&&!(0,util_1.alwaysValidSchema)(it,schema)}exports.default=def}));var require_thenElse=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var util_1=require_util();var def={keyword:[`then`,`else`],schemaType:[`object`,`boolean`],code({keyword,parentSchema,it}){if(parentSchema.if===void 0)(0,util_1.checkStrictMode)(it,`"${keyword}" without "if" is ignored`)}};exports.default=def}));var require_applicator=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var additionalItems_1=require_additionalItems();var prefixItems_1=require_prefixItems();var items_1=require_items();var items2020_1=require_items2020();var contains_1=require_contains();var dependencies_1=require_dependencies();var propertyNames_1=require_propertyNames();var additionalProperties_1=require_additionalProperties();var properties_1=require_properties();var patternProperties_1=require_patternProperties();var not_1=require_not();var anyOf_1=require_anyOf();var oneOf_1=require_oneOf();var allOf_1=require_allOf();var if_1=require_if();var thenElse_1=require_thenElse();function getApplicator(draft2020=false){const applicator=[not_1.default,anyOf_1.default,oneOf_1.default,allOf_1.default,if_1.default,thenElse_1.default,propertyNames_1.default,additionalProperties_1.default,dependencies_1.default,properties_1.default,patternProperties_1.default];if(draft2020)applicator.push(prefixItems_1.default,items2020_1.default);else applicator.push(additionalItems_1.default,items_1.default);applicator.push(contains_1.default);return applicator}exports.default=getApplicator}));var require_format$1=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var codegen_1=require_codegen();var def={keyword:`format`,type:[`number`,`string`],schemaType:`string`,$data:true,error:{message:({schemaCode})=>(0,codegen_1.str)`must match format "${schemaCode}"`,params:({schemaCode})=>(0,codegen_1._)`{format: ${schemaCode}}`},code(cxt,ruleType){const{gen,data,$data,schema,schemaCode,it}=cxt;const{opts,errSchemaPath,schemaEnv,self}=it;if(!opts.validateFormats)return;if($data)validate$DataFormat();else validateFormat();function validate$DataFormat(){const fmts=gen.scopeValue(`formats`,{ref:self.formats,code:opts.code.formats});const fDef=gen.const(`fDef`,(0,codegen_1._)`${fmts}[${schemaCode}]`);const fType=gen.let(`fType`);const format=gen.let(`format`);gen.if((0,codegen_1._)`typeof ${fDef} == "object" && !(${fDef} instanceof RegExp)`,()=>gen.assign(fType,(0,codegen_1._)`${fDef}.type || "string"`).assign(format,(0,codegen_1._)`${fDef}.validate`),()=>gen.assign(fType,(0,codegen_1._)`"string"`).assign(format,fDef));cxt.fail$data((0,codegen_1.or)(unknownFmt(),invalidFmt()));function unknownFmt(){if(opts.strictSchema===false)return codegen_1.nil;return(0,codegen_1._)`${schemaCode} && !${format}`}function invalidFmt(){const callFormat=schemaEnv.$async?(0,codegen_1._)`(${fDef}.async ? await ${format}(${data}) : ${format}(${data}))`:(0,codegen_1._)`${format}(${data})`;const validData=(0,codegen_1._)`(typeof ${format} == "function" ? ${callFormat} : ${format}.test(${data}))`;return(0,codegen_1._)`${format} && ${format} !== true && ${fType} === ${ruleType} && !${validData}`}}function validateFormat(){const formatDef=self.formats[schema];if(!formatDef){unknownFormat();return}if(formatDef===true)return;const[fmtType,format,fmtRef]=getFormat(formatDef);if(fmtType===ruleType)cxt.pass(validCondition());function unknownFormat(){if(opts.strictSchema===false){self.logger.warn(unknownMsg());return}throw new Error(unknownMsg());function unknownMsg(){return`unknown format "${schema}" ignored in schema at path "${errSchemaPath}"`}}function getFormat(fmtDef){const code=fmtDef instanceof RegExp?(0,codegen_1.regexpCode)(fmtDef):opts.code.formats?(0,codegen_1._)`${opts.code.formats}${(0,codegen_1.getProperty)(schema)}`:void 0;const fmt=gen.scopeValue(`formats`,{key:schema,ref:fmtDef,code});if(typeof fmtDef==`object`&&!(fmtDef instanceof RegExp))return[fmtDef.type||`string`,fmtDef.validate,(0,codegen_1._)`${fmt}.validate`];return[`string`,fmtDef,fmt]}function validCondition(){if(typeof formatDef==`object`&&!(formatDef instanceof RegExp)&&formatDef.async){if(!schemaEnv.$async)throw new Error(`async format in sync schema`);return(0,codegen_1._)`await ${fmtRef}(${data})`}return typeof format==`function`?(0,codegen_1._)`${fmtRef}(${data})`:(0,codegen_1._)`${fmtRef}.test(${data})`}}}};exports.default=def}));var require_format=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var format=[require_format$1().default];exports.default=format}));var require_metadata=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.contentVocabulary=exports.metadataVocabulary=void 0;exports.metadataVocabulary=[`title`,`description`,`default`,`deprecated`,`readOnly`,`writeOnly`,`examples`];exports.contentVocabulary=[`contentMediaType`,`contentEncoding`,`contentSchema`]}));var require_draft7=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var core_1=require_core();var validation_1=require_validation();var applicator_1=require_applicator();var format_1=require_format();var metadata_1=require_metadata();var draft7Vocabularies=[core_1.default,validation_1.default,(0,applicator_1.default)(),format_1.default,metadata_1.metadataVocabulary,metadata_1.contentVocabulary];exports.default=draft7Vocabularies}));var require_types=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.DiscrError=void 0;var DiscrError;(function(DiscrError){DiscrError[`Tag`]=`tag`;DiscrError[`Mapping`]=`mapping`})(DiscrError||(exports.DiscrError=DiscrError={}))}));var require_discriminator=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var codegen_1=require_codegen();var types_1=require_types();var compile_1=require_compile();var ref_error_1=require_ref_error();var util_1=require_util();var def={keyword:`discriminator`,type:`object`,schemaType:`object`,error:{message:({params:{discrError,tagName}})=>discrError===types_1.DiscrError.Tag?`tag "${tagName}" must be string`:`value of tag "${tagName}" must be in oneOf`,params:({params:{discrError,tag,tagName}})=>(0,codegen_1._)`{error: ${discrError}, tag: ${tagName}, tagValue: ${tag}}`},code(cxt){const{gen,data,schema,parentSchema,it}=cxt;const{oneOf}=parentSchema;if(!it.opts.discriminator)throw new Error(`discriminator: requires discriminator option`);const tagName=schema.propertyName;if(typeof tagName!=`string`)throw new Error(`discriminator: requires propertyName`);if(schema.mapping)throw new Error(`discriminator: mapping is not supported`);if(!oneOf)throw new Error(`discriminator: requires oneOf keyword`);const valid=gen.let(`valid`,false);const tag=gen.const(`tag`,(0,codegen_1._)`${data}${(0,codegen_1.getProperty)(tagName)}`);gen.if((0,codegen_1._)`typeof ${tag} == "string"`,()=>validateMapping(),()=>cxt.error(false,{discrError:types_1.DiscrError.Tag,tag,tagName}));cxt.ok(valid);function validateMapping(){const mapping=getMapping();gen.if(false);for(const tagValue in mapping){gen.elseIf((0,codegen_1._)`${tag} === ${tagValue}`);gen.assign(valid,applyTagSchema(mapping[tagValue]))}gen.else();cxt.error(false,{discrError:types_1.DiscrError.Mapping,tag,tagName});gen.endIf()}function applyTagSchema(schemaProp){const _valid=gen.name(`valid`);const schCxt=cxt.subschema({keyword:`oneOf`,schemaProp},_valid);cxt.mergeEvaluated(schCxt,codegen_1.Name);return _valid}function getMapping(){var _a;const oneOfMapping={};const topRequired=hasRequired(parentSchema);let tagRequired=true;for(let i=0;i<oneOf.length;i++){let sch=oneOf[i];if((sch===null||sch===void 0?void 0:sch.$ref)&&!(0,util_1.schemaHasRulesButRef)(sch,it.self.RULES)){const ref=sch.$ref;sch=compile_1.resolveRef.call(it.self,it.schemaEnv.root,it.baseId,ref);if(sch instanceof compile_1.SchemaEnv)sch=sch.schema;if(sch===void 0)throw new ref_error_1.default(it.opts.uriResolver,it.baseId,ref)}const propSch=(_a=sch===null||sch===void 0?void 0:sch.properties)===null||_a===void 0?void 0:_a[tagName];if(typeof propSch!=`object`)throw new Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${tagName}"`);tagRequired=tagRequired&&(topRequired||hasRequired(sch));addMappings(propSch,i)}if(!tagRequired)throw new Error(`discriminator: "${tagName}" must be required`);return oneOfMapping;function hasRequired({required}){return Array.isArray(required)&&required.includes(tagName)}function addMappings(sch,i){if(sch.const)addMapping(sch.const,i);else if(sch.enum)for(const tagValue of sch.enum)addMapping(tagValue,i);else throw new Error(`discriminator: "properties/${tagName}" must have "const" or "enum"`)}function addMapping(tagValue,i){if(typeof tagValue!=`string`||tagValue in oneOfMapping)throw new Error(`discriminator: "${tagName}" values must be unique strings`);oneOfMapping[tagValue]=i}}}};exports.default=def}));var json_schema_draft_07_exports=__exportAll({$id:()=>$id,$schema:()=>$schema$1,default:()=>json_schema_draft_07_default,definitions:()=>definitions$1,properties:()=>properties$1,title:()=>title$1,type:()=>type$1});var $schema$1,$id,title$1,definitions$1,type$1,properties$1,json_schema_draft_07_default;var init_json_schema_draft_07=__esmMin((()=>{$schema$1=`http://json-schema.org/draft-07/schema#`;$id=`http://json-schema.org/draft-07/schema#`;title$1=`Core schema meta-schema`;definitions$1={"schemaArray":{"type":`array`,"minItems":1,"items":{"$ref":`#`}},"nonNegativeInteger":{"type":`integer`,"minimum":0},"nonNegativeIntegerDefault0":{"allOf":[{"$ref":`#/definitions/nonNegativeInteger`},{"default":0}]},"simpleTypes":{"enum":[`array`,`boolean`,`integer`,`null`,`number`,`object`,`string`]},"stringArray":{"type":`array`,"items":{"type":`string`},"uniqueItems":true,"default":[]}};type$1=[`object`,`boolean`];properties$1={"$id":{"type":`string`,"format":`uri-reference`},"$schema":{"type":`string`,"format":`uri`},"$ref":{"type":`string`,"format":`uri-reference`},"$comment":{"type":`string`},"title":{"type":`string`},"description":{"type":`string`},"default":true,"readOnly":{"type":`boolean`,"default":false},"examples":{"type":`array`,"items":true},"multipleOf":{"type":`number`,"exclusiveMinimum":0},"maximum":{"type":`number`},"exclusiveMaximum":{"type":`number`},"minimum":{"type":`number`},"exclusiveMinimum":{"type":`number`},"maxLength":{"$ref":`#/definitions/nonNegativeInteger`},"minLength":{"$ref":`#/definitions/nonNegativeIntegerDefault0`},"pattern":{"type":`string`,"format":`regex`},"additionalItems":{"$ref":`#`},"items":{"anyOf":[{"$ref":`#`},{"$ref":`#/definitions/schemaArray`}],"default":true},"maxItems":{"$ref":`#/definitions/nonNegativeInteger`},"minItems":{"$ref":`#/definitions/nonNegativeIntegerDefault0`},"uniqueItems":{"type":`boolean`,"default":false},"contains":{"$ref":`#`},"maxProperties":{"$ref":`#/definitions/nonNegativeInteger`},"minProperties":{"$ref":`#/definitions/nonNegativeIntegerDefault0`},"required":{"$ref":`#/definitions/stringArray`},"additionalProperties":{"$ref":`#`},"definitions":{"type":`object`,"additionalProperties":{"$ref":`#`},"default":{}},"properties":{"type":`object`,"additionalProperties":{"$ref":`#`},"default":{}},"patternProperties":{"type":`object`,"additionalProperties":{"$ref":`#`},"propertyNames":{"format":`regex`},"default":{}},"dependencies":{"type":`object`,"additionalProperties":{"anyOf":[{"$ref":`#`},{"$ref":`#/definitions/stringArray`}]}},"propertyNames":{"$ref":`#`},"const":true,"enum":{"type":`array`,"items":true,"minItems":1,"uniqueItems":true},"type":{"anyOf":[{"$ref":`#/definitions/simpleTypes`},{"type":`array`,"items":{"$ref":`#/definitions/simpleTypes`},"minItems":1,"uniqueItems":true}]},"format":{"type":`string`},"contentMediaType":{"type":`string`},"contentEncoding":{"type":`string`},"if":{"$ref":`#`},"then":{"$ref":`#`},"else":{"$ref":`#`},"allOf":{"$ref":`#/definitions/schemaArray`},"anyOf":{"$ref":`#/definitions/schemaArray`},"oneOf":{"$ref":`#/definitions/schemaArray`},"not":{"$ref":`#`}};json_schema_draft_07_default={$schema:$schema$1,$id,title:title$1,definitions:definitions$1,type:type$1,properties:properties$1,"default":true}}));var require_ajv=__commonJSMin(((exports,module)=>{Object.defineProperty(exports,"__esModule",{value:true});exports.MissingRefError=exports.ValidationError=exports.CodeGen=exports.Name=exports.nil=exports.stringify=exports.str=exports._=exports.KeywordCxt=exports.Ajv=void 0;var core_1=require_core$1();var draft7_1=require_draft7();var discriminator_1=require_discriminator();var draft7MetaSchema=(init_json_schema_draft_07(),__toCommonJS(json_schema_draft_07_exports).default);var META_SUPPORT_DATA=[`/properties`];var META_SCHEMA_ID=`http://json-schema.org/draft-07/schema`;var Ajv=class extends core_1.default{_addVocabularies(){super._addVocabularies();draft7_1.default.forEach(v=>this.addVocabulary(v));if(this.opts.discriminator)this.addKeyword(discriminator_1.default)}_addDefaultMetaSchema(){super._addDefaultMetaSchema();if(!this.opts.meta)return;const metaSchema=this.opts.$data?this.$dataMetaSchema(draft7MetaSchema,META_SUPPORT_DATA):draft7MetaSchema;this.addMetaSchema(metaSchema,META_SCHEMA_ID,false);this.refs[`http://json-schema.org/schema`]=META_SCHEMA_ID}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(META_SCHEMA_ID)?META_SCHEMA_ID:void 0)}};exports.Ajv=Ajv;module.exports=exports=Ajv;module.exports.Ajv=Ajv;Object.defineProperty(exports,"__esModule",{value:true});exports.default=Ajv;var validate_1=require_validate();Object.defineProperty(exports,"KeywordCxt",{enumerable:true,get:function(){return validate_1.KeywordCxt}});var codegen_1=require_codegen();Object.defineProperty(exports,"_",{enumerable:true,get:function(){return codegen_1._}});Object.defineProperty(exports,"str",{enumerable:true,get:function(){return codegen_1.str}});Object.defineProperty(exports,"stringify",{enumerable:true,get:function(){return codegen_1.stringify}});Object.defineProperty(exports,"nil",{enumerable:true,get:function(){return codegen_1.nil}});Object.defineProperty(exports,"Name",{enumerable:true,get:function(){return codegen_1.Name}});Object.defineProperty(exports,"CodeGen",{enumerable:true,get:function(){return codegen_1.CodeGen}});var validation_error_1=require_validation_error();Object.defineProperty(exports,"ValidationError",{enumerable:true,get:function(){return validation_error_1.default}});var ref_error_1=require_ref_error();Object.defineProperty(exports,"MissingRefError",{enumerable:true,get:function(){return ref_error_1.default}})}));var import_ajv=__toESM(require_ajv(),1);var $schema=`http://json-schema.org/draft-07/schema#`;var title=`Application payment declaration, integrations.json extensions.payments`;var type=`object`;var additionalProperties=false;var required=[`version`,`environments`,`plans`];var properties={"version":{"const":1},"environments":{"type":`object`,"additionalProperties":false,"minProperties":1,"properties":{"sandbox":{"$ref":`#/definitions/environment`},"live":{"$ref":`#/definitions/environment`}}},"plans":{"type":`object`,"minProperties":1,"maxProperties":100,"propertyNames":{"$ref":`#/definitions/id`},"additionalProperties":{"$ref":`#/definitions/plan`}}};var definitions={"id":{"type":`string`,"pattern":`^[a-z][a-z0-9-]*$`,"maxLength":100,"not":{"enum":[`constructor`,`prototype`]}},"env":{"type":`string`,"pattern":`^env:[A-Z_][A-Z0-9_]*$`,"maxLength":200},"environment":{"type":`object`,"additionalProperties":false,"required":[`integrationId`,`providerAccountId`,`webhookSecretRef`,`returnUrlRef`],"properties":{"integrationId":{"$ref":`#/definitions/id`},"providerAccountId":{"type":`string`,"minLength":1,"maxLength":200},"webhookSecretRef":{"$ref":`#/definitions/env`},"returnUrlRef":{"$ref":`#/definitions/env`},"taxCategory":{"type":`string`,"enum":[`digital-goods`,`ebooks`,`implementation-services`,`professional-services`,`saas`,`software-programming-services`,`standard`,`training-services`,`website-hosting`]},"publicClientTokenRef":{"$ref":`#/definitions/env`}}},"plan":{"type":`object`,"additionalProperties":false,"required":[`name`,`amount`,`currency`,`interval`,`features`,`renewalCredits`],"properties":{"name":{"type":`string`,"minLength":1,"maxLength":200},"amount":{"type":`integer`,"minimum":1,"maximum":1e9},"currency":{"type":`string`,"pattern":`^[A-Z]{3}$`},"interval":{"enum":[`month`,`year`]},"features":{"type":`array`,"maxItems":100,"uniqueItems":true,"items":{"$ref":`#/definitions/id`}},"renewalCredits":{"type":`integer`,"minimum":0,"maximum":1e9}}}};var configuration_schema_default={$schema,title,type,additionalProperties:false,required,properties,definitions};var validate=new import_ajv.default({allErrors:true,strict:true}).compile(configuration_schema_default);function validatePaymentConfiguration(document){const value=document?.extensions?.payments;if(!validate(value)){const error=new Error(`Check the application's payment configuration.`);error.code=`payment_configuration_invalid`;error.statusCode=422;error.fieldErrors=validate.errors.map(({instancePath,message})=>({path:`extensions.payments${instancePath}`,message}));throw error}for(const[environment,binding]of Object.entries(value.environments)){const slot=document.integrations?.[binding.integrationId];const path=`extensions.payments/environments/${environment}`;const fieldErrors=[];if(!slot||![`stripe`,`paddle`].includes(slot.provider)||slot.accountMode!==`shared`||slot.authentication?.method!==`api-key`||!/^env:[A-Z_][A-Z0-9_]*$/.test(slot.authentication.secretRef||``))fieldErrors.push({path:`${path}/integrationId`,message:`Select a shared Stripe or Paddle connection with a backend API-key Env reference for ${environment}.`});if(slot?.provider===`paddle`){if(slot.settings?.environment!==environment)fieldErrors.push({path:`${path}/integrationId`,message:`Select a Paddle connection configured for ${environment}.`});if(!binding.taxCategory)fieldErrors.push({path:`${path}/taxCategory`,message:`Choose the Paddle tax category for the products this app sells.`});if(!binding.publicClientTokenRef)fieldErrors.push({path:`${path}/publicClientTokenRef`,message:`Set the Env reference for this environment's Paddle public client token.`})}if(fieldErrors.length){const error=new Error(fieldErrors[0].message);error.code=`payment_configuration_invalid`;error.statusCode=422;error.fieldErrors=fieldErrors;throw error}}return JSON.parse(JSON.stringify(value))}var drafts=new Map;var verificationDrafts=new Map;function useIntegrationCommand(method,options){return useCommand({access:`never`,ownershipFilter:`public`,surfaceId:`app`,writeMethod:method,buildRawPayload:(_model,{context:request})=>request.body,buildCommandOptions:(_payload,{context:request})=>({method,path:request.path}),...options})}function useVibe64Integrations(context,selectedId){const configuration=ref(null);const baseline=ref(``);const baseHash=ref(null);const releaseId=ref(``);const production=computed(()=>context.value.integrationEnvironment===`production`);const fieldErrors=ref({});const error=ref(``);const changedElsewhere=ref(false);const sessionId=computed(()=>String(context.value.sessionId||``));const active=computed(()=>context.value.active!==false&&Boolean(production.value?context.value.productionIntegrationsApiPath:sessionId.value));const path=computed(()=>production.value?context.value.productionIntegrationsApiPath:vibe64SessionPath(readRefOrGetterValue(context.value.sessionsApiPath),sessionId.value,`/integrations`));const dirty=computed(()=>Boolean(configuration.value&&JSON.stringify(configuration.value)!==baseline.value));function rememberDraft(key){if(!key)return;if(dirty.value)drafts.set(key,{configuration:JSON.parse(JSON.stringify(configuration.value)),baseline:baseline.value,baseHash:baseHash.value});else drafts.delete(key)}watch(path,(key,previous)=>{rememberDraft(previous);const draft=drafts.get(key);configuration.value=draft?JSON.parse(JSON.stringify(draft.configuration)):null;baseline.value=draft?.baseline||``;baseHash.value=draft?.baseHash??null;releaseId.value=``;fieldErrors.value={};error.value=``;changedElsewhere.value=false},{flush:`sync`,immediate:true});const resource=useEndpointResource({path,enabled:active,queryKey:computed(()=>[`vibe64.integrations`,path.value]),requestRecoveryLabel:`Integrations`,fallbackLoadError:`Integrations could not load.`});const command=useIntegrationCommand(`PUT`,{apiSuffix:`/vibe64/integrations`,messages:{success:`Integration configuration saved.`,error:`Integration configuration could not be saved.`},placementSource:`vibe64.integrations.save`});const discoveryError=ref(``);const discoveryCommand=useIntegrationCommand(`POST`,{apiSuffix:`/vibe64/integrations/discovery`,messages:{error:`OAuth settings could not be discovered.`},placementSource:`vibe64.integrations.discovery`});watch([path,selectedId],()=>{discoveryError.value=``});async function discoverN8n(){const selected=configuration.value?.integrations[selectedId.value];if(!active.value||production.value||changedElsewhere.value||context.value.sourceOperationsSuspended||command.isRunning||setupCommand.isRunning||discoveryCommand.isRunning||selected?.provider!==`n8n`)return;const requestPath=path.value;const id=selectedId.value;const serverUrl=selected.settings?.serverUrl;discoveryError.value=``;try{const result=await discoveryCommand.run({path:`${requestPath}/n8n/discovery`,body:{serverUrl}});const current=configuration.value?.integrations[id];if(disposed||path.value!==requestPath||selectedId.value!==id||current!==selected||current.settings?.serverUrl!==serverUrl)return;if(!result?.ok||!result.discovery)throw new Error(result?.error||`OAuth settings could not be discovered.`);const available=new Set(result.discovery.scopes);configuration.value={...configuration.value,integrations:{...configuration.value.integrations,[id]:{...current,scopes:current.scopes.filter(scope=>available.has(scope)),settings:{...current.settings,serverUrl:result.discovery.resource,oauthDiscovery:result.discovery}}}}}catch(failure){if(!disposed&&path.value===requestPath&&selectedId.value===id)discoveryError.value=failure.message||`OAuth settings could not be discovered.`}}const registrationError=ref(``);const registrationNeedsReview=ref(false);const registrationCommand=useIntegrationCommand(`POST`,{apiSuffix:`/vibe64/integrations/oauth-client`,messages:{error:`Client registration did not finish. Check the provider and project Env before trying again.`},placementSource:`vibe64.integrations.registration`});watch([path,selectedId],()=>{registrationError.value=``;registrationNeedsReview.value=false});async function registerOAuthClient(callbackUrl){const selected=configuration.value?.integrations[selectedId.value];if(!active.value||production.value||changedElsewhere.value||context.value.sourceOperationsSuspended||context.value.owner===false||registrationNeedsReview.value||command.isRunning||setupCommand.isRunning||discoveryCommand.isRunning||registrationCommand.isRunning||![`n8n`,`amplitude`,`atlassian`,`confidence-exp`,`confidence-flags`,`sanity`,`sentry`,`granola`,`hex`,`heygen`].includes(selected?.provider))return;const requestPath=path.value;const id=selectedId.value;const snapshot=JSON.stringify(configuration.value);registrationError.value=``;registrationNeedsReview.value=true;try{const result=await registrationCommand.run({path:`${requestPath}/${encodeURIComponent(id)}/oauth-client`,body:{configuration:JSON.parse(snapshot),baseHash:baseHash.value,callbackUrl,originId:vibe64BrowserTabOriginId()}});if(disposed||path.value!==requestPath||selectedId.value!==id)return;if(!result?.ok||!result.configuration)throw new Error(result?.error||`Registration did not finish. Check the provider and Env before another attempt.`);if(JSON.stringify(configuration.value)!==snapshot){changedElsewhere.value=true;throw new Error(`Client registration was saved, but this draft changed. Reload configuration and inspect Env before connecting.`)}apply(result);registrationNeedsReview.value=false;await runSetup(`connect`)}catch(failure){if(disposed||path.value!==requestPath||selectedId.value!==id)return;registrationError.value=failure.message||`Check the provider and Env before another registration attempt.`;fieldErrors.value=failure.fieldErrors||failure.details?.fieldErrors||{}}}const connection=ref(null);const verificationInput=ref({});const verificationKey=computed(()=>`${path.value}/${selectedId.value||``}`);watch(verificationKey,(key,previous)=>{if(previous)verificationDrafts.set(previous,{...verificationInput.value});verificationInput.value={...verificationDrafts.get(key)}},{immediate:true,flush:`sync`});const connectionError=ref(``);const setupCommand=useIntegrationCommand(`POST`,{apiSuffix:`/vibe64/integrations/setup`,suppressSuccessMessage:true,messages:{error:`The application could not update this connection.`},placementSource:`vibe64.integrations.setup`});const setupRequest=computed(()=>{const request=context.value.integrationSetupRequest;if(production.value||!request||request.sessionId!==sessionId.value||request.integrationId!==selectedId.value||typeof request.turnId!==`string`||!/^\d{6,32}$/u.test(request.turnId)||typeof request.requestId!==`string`||!/^[a-f0-9]{64}$/u.test(request.requestId))return null;return{turnId:request.turnId,requestId:request.requestId,configurationHash:baseHash.value}});const connectionRefresh=ref(0);const connectionKey=computed(()=>`${path.value}/${selectedId.value||``}/${baseHash.value||``}/${releaseId.value}/${setupRequest.value?.turnId||``}/${setupRequest.value?.requestId||``}/${connectionRefresh.value}`);function refreshConnection(){connectionRefresh.value+=1}const paymentResult=ref(null);const paymentError=ref(``);const paymentOperation=ref(``);watch([connectionKey,dirty,active],()=>{paymentResult.value=null;paymentError.value=``;paymentOperation.value=``});async function runPaymentOperation({operation,paymentEnvironment,reviewId,providerId,subjectId,collection,after}){if(production.value&&(!releaseId.value||context.value.owner!==true)||context.value.owner===false||!active.value||dirty.value||changedElsewhere.value||setupCommand.isRunning||command.isRunning||!production.value&&context.value.sourceOperationsSuspended)return;const binding=configuration.value?.extensions?.payments?.environments?.[paymentEnvironment];if(!binding||binding.integrationId!==selectedId.value)return;if(![`payments-preview`,`payments-publish`,`payments-readiness`,`payments-recover`,`payments-history`].includes(operation))return;if(operation===`payments-publish`&&(paymentResult.value?.paymentEnvironment!==paymentEnvironment||paymentResult.value?.review?.reviewId!==reviewId||paymentResult.value.review.pending||paymentResult.value.review.drift.length))return;if(operation===`payments-recover`&&(paymentResult.value?.paymentEnvironment!==paymentEnvironment||paymentResult.value?.review?.reviewId!==reviewId||!paymentResult.value?.review?.pending||!/^[A-Za-z0-9_-]{1,200}$/.test(providerId||``)))return;const key=connectionKey.value;paymentError.value=``;paymentOperation.value=operation;paymentResult.value=null;try{const result=await setupCommand.run({path:`${path.value}/${encodeURIComponent(selectedId.value)}/setup`,body:{operation,paymentEnvironment,...operation===`payments-history`?{subjectId,collection,after:after??null}:{},...production.value?{releaseId:releaseId.value}:{},...[`payments-publish`,`payments-recover`].includes(operation)?{reviewId}:{},...operation===`payments-recover`?{providerId}:{}}});if(!disposed&&key===connectionKey.value&&!dirty.value)paymentResult.value=result}catch{if(!disposed&&key===connectionKey.value){paymentResult.value=null;paymentError.value=[`payments-publish`,`payments-recover`].includes(operation)?`Applying the catalogue did not finish cleanly. Check the application's pending provider operation before applying again; changes may already exist.`:`The application could not inspect payments. Check its payment command, configuration and Env, then retry.`}}}const adsResult=ref(null);const adsError=ref(``);watch([connectionKey,dirty,active],()=>{adsResult.value=null;adsError.value=``});async function runAdsOperation({operation,ads={}}){if(production.value||context.value.owner===false||!active.value||dirty.value||changedElsewhere.value||setupCommand.isRunning||command.isRunning||context.value.sourceOperationsSuspended||configuration.value?.integrations[selectedId.value]?.provider!==`google-ads`)return;const key=connectionKey.value;adsError.value=``;adsResult.value=null;try{const result=await setupCommand.run({path:`${path.value}/${encodeURIComponent(selectedId.value)}/setup`,body:{operation,ads}});if(!disposed&&key===connectionKey.value&&!dirty.value)adsResult.value=result}catch{if(!disposed&&key===connectionKey.value)adsError.value=`The advertising operation did not complete. Inspect Google Ads before repeating a write: it may already have succeeded. Check the app command, permissions and Env for details.`}}async function runSetup(operation=`status`){const selected=configuration.value?.integrations[selectedId.value];if(connectorDefinitions.some(provider=>provider.id===selected?.provider&&(provider.configurationOnly||provider.configurationOnlyForSettings?.(selected?.settings||{}))))return;if(production.value&&(!releaseId.value||context.value.owner!==true)||!active.value||!Object.hasOwn(configuration.value?.integrations||{},selectedId.value)||dirty.value||changedElsewhere.value||setupCommand.isRunning||command.isRunning||!production.value&&context.value.sourceOperationsSuspended)return;const key=connectionKey.value;const endpoint=`${path.value}/${encodeURIComponent(selectedId.value)}/setup`;const releaseSelection=production.value?{releaseId:releaseId.value}:{};connectionError.value=``;try{const result=await setupCommand.run({path:endpoint,body:{operation,...releaseSelection,...setupRequest.value&&[`status`,`connect`].includes(operation)&&(operation===`status`||!connection.value?.integrationSetup||connection.value.integrationSetup.outcome===`pending`)?{setupRequest:setupRequest.value}:{},...operation===`cancel`?{attemptId:connection.value?.attemptId}:{},...operation===`connect`&&Object.keys(verificationInput.value).length?{verificationInput:{...verificationInput.value}}:{}}});if(disposed||connectionKey.value!==key)return;connection.value=result;if(setupRequest.value&&result.integrationSetup?.outcome===`completed`&&result.integrationSetup.continuation?.status!==`accepted`){try{const resumed=await setupCommand.run({path:vibe64SessionPath(readRefOrGetterValue(context.value.sessionsApiPath),sessionId.value,`/integration-setup/resume`),body:{turnId:setupRequest.value.turnId,requestId:setupRequest.value.requestId}});if(!disposed&&connectionKey.value===key)connection.value={...result,integrationSetup:resumed.integrationSetup}}finally{if(!disposed&&connectionKey.value===key&&typeof context.value.refreshConversation===`function`)await context.value.refreshConversation()}if(disposed||connectionKey.value!==key)return}else if(result.integrationSetup&&typeof context.value.refreshConversation===`function`){await context.value.refreshConversation();if(disposed||connectionKey.value!==key)return}if(operation===`cancel`){const status=await setupCommand.run({path:endpoint,body:{operation:`status`,...releaseSelection}});if(!disposed&&connectionKey.value===key)connection.value=status}}catch(failure){if(!disposed&&connectionKey.value===key){connectionError.value=failure.message||`Connection could not be checked.`;if(operation===`connect`&&configuration.value.integrations[selectedId.value].authentication.method!==`oauth2`&&[`connected`,`reconnect-required`].includes(connection.value?.status))try{const status=await setupCommand.run({path:endpoint,body:{operation:`status`,...releaseSelection}});if(!disposed&&connectionKey.value===key)connection.value=status}catch{}}}}watch([connectionKey,active],()=>{connection.value=null;connectionError.value=``;if(active.value&&!dirty.value&&configuration.value?.integrations[selectedId.value]?.accountMode!==`per-user`)runSetup()});watch([()=>command.isRunning,()=>setupCommand.isRunning],()=>{if(!connection.value&&!connectionError.value&&!command.isRunning&&!setupCommand.isRunning&&configuration.value?.integrations[selectedId.value]?.accountMode!==`per-user`)runSetup()});let disposed=false;function refreshPendingConnection(){if(disposed||globalThis.document?.visibilityState===`hidden`||connection.value?.status!==`pending`||configuration.value?.integrations[selectedId.value]?.accountMode===`per-user`)return;runSetup(`status`)}globalThis.window?.addEventListener(`focus`,refreshPendingConnection);globalThis.document?.addEventListener(`visibilitychange`,refreshPendingConnection);onScopeDispose(()=>{globalThis.window?.removeEventListener(`focus`,refreshPendingConnection);globalThis.document?.removeEventListener(`visibilitychange`,refreshPendingConnection);rememberDraft(path.value);verificationDrafts.set(verificationKey.value,{...verificationInput.value});disposed=true});function apply(payload){configuration.value=JSON.parse(JSON.stringify(payload.configuration));baseline.value=JSON.stringify(payload.configuration);baseHash.value=payload.baseHash;releaseId.value=production.value?payload.releaseId||``:``;changedElsewhere.value=false;error.value=``;fieldErrors.value={}}watch(resource.data,payload=>{if(!payload?.configuration||disposed||payload.environment===`production`!==production.value)return;if(dirty.value)changedElsewhere.value=payload.baseHash!==baseHash.value;else apply(payload)},{immediate:true});useRealtimeEvent({event:VIBE64_SOURCE_EDITOR_FILE_CHANGED_EVENT,enabled:active,onEvent:({payload})=>{if(production.value||payload.sessionId!==sessionId.value||payload.path!==`integrations.json`||payload.originId===vibe64BrowserTabOriginId())return;resource.reload()}});async function save(){if(production.value||!dirty.value||changedElsewhere.value||registrationCommand.isRunning||discoveryCommand.isRunning||command.isRunning||context.value.sourceOperationsSuspended)return;const requestPath=path.value;error.value=``;fieldErrors.value={};try{const validated=validateIntegrationConfiguration(configuration.value,{providers:[googleCalendarDefinition,...connectorDefinitions],allowUnknownProviders:true});if(validated.extensions?.payments)validatePaymentConfiguration(validated);const payload=await command.run({path:path.value,body:{configuration:validated,baseHash:baseHash.value,originId:vibe64BrowserTabOriginId()}});if(payload&&!disposed&&path.value===requestPath)apply(payload)}catch(failure){if(disposed||path.value!==requestPath)return;fieldErrors.value=failure.fieldErrors||failure.details?.fieldErrors||{};error.value=failure.message||`Configuration could not be saved. Reload to check for other changes.`;if(failure.code===`vibe64_source_editor_conflict`||failure.code===`vibe64_source_editor_file_exists`)changedElsewhere.value=true}}async function discard(){if(command.isRunning)return;const requestPath=path.value;const result=await resource.reload();if(result?.data?.configuration&&!result.isError&&!disposed&&path.value===requestPath)apply(result.data)}return{adsResult,adsError,runAdsOperation,paymentResult,paymentError,paymentOperation,runPaymentOperation,registrationCommand,registrationError,registrationNeedsReview,registerOAuthClient,discoveryCommand,discoveryError,discoverN8n,releaseId,connection,connectionError,verificationInput,setupCommand,runSetup,refreshConnection,configuration,dirty,resource,command,fieldErrors,error,changedElsewhere,save,discard}}function integrationCallbackUrl(applicationPublicUrl,callbackPath){try{const origin=new URL(applicationPublicUrl);const local=origin.protocol===`http:`&&[`localhost`,`127.0.0.1`,`[::1]`].includes(origin.hostname);if(origin.protocol!==`https:`&&!local||origin.username||origin.password||origin.search||origin.hash||origin.pathname!==`/`||typeof callbackPath!==`string`||!/^\/[A-Za-z0-9/_-]+$/u.test(callbackPath)||callbackPath.startsWith(`//`))return``;return new URL(callbackPath,origin).href}catch{return``}}var id={type:`string`,required:true,validator:value=>/^[0-9]{1,20}$/.test(value)||`Use a numeric Google ID.`};var text=max=>({type:`string`,required:true,minLength:1,maxLength:max,validator:value=>!/[\p{Cc}\p{Cf}]/u.test(value)||`Use plain text without control characters.`});var list=(item,min,max)=>({type:`array`,required:true,items:item,validator:values=>values.length>=min&&values.length<=max||`Provide ${min}–${max} values.`});var micros={type:`string`,required:true,validator:value=>/^[1-9][0-9]{0,11}$/.test(value)||`Use a positive integer string of at most 12 digits.`};var googleAdsSearchFields={customerId:{...id,validator:value=>/^[0-9]{10}$/.test(value)||`Use a ten-digit customer ID.`},nonPolitical:{type:`boolean`,required:true,validator:value=>value===true||`This Search recipe supports only non-political advertising.`},name:text(100),currency:{type:`string`,required:true,validator:value=>/^[A-Z]{3}$/.test(value)||`Use the uppercase account currency code.`},dailyBudgetMicros:micros,maxCpcMicros:micros,finalUrl:{...text(2048),validator:value=>{try{const url=new URL(value);return url.protocol===`https:`&&!url.username&&!url.password&&!url.hash||`Use the public HTTPS landing page.`}catch{return`Use the public HTTPS landing page.`}}},conversionActionId:id,locationIds:list(id,1,10),languageId:id,keywords:list(text(80),1,20),headlines:list(text(30),3,15),descriptions:list(text(90),2,4)};var schema=createSchema(googleAdsSearchFields);function validateGoogleAdsSearchPlan(input){for(const key of[`customerId`,`name`,`currency`,`dailyBudgetMicros`,`maxCpcMicros`,`finalUrl`,`conversionActionId`,`languageId`])if(typeof input?.[key]!==`string`)throw new Error(`Search plan ${key} must be a string.`);return validateSchemaPayload({schema,mode:`replace`},input,{statusCode:422})}var _hoisted_1$3={"aria-label":`Google Ads Search campaigns`,class:`mt-6`};var _hoisted_2$3={key:1};var _hoisted_3$2={key:0};var _hoisted_4$2={key:1,class:`my-3`};var _hoisted_5$2={key:0,"aria-label":`Conversion installation instructions`};var _hoisted_6$2={key:5,"aria-label":`Search creation review`,class:`my-4`};var _hoisted_7$2={key:6,role:`status`};var _hoisted_8$2={key:7,role:`status`};var _hoisted_9$2={"aria-label":`Campaign launch and reporting`,class:`mt-6`};var _hoisted_10$2={key:0};var _hoisted_11$2={key:1};var _hoisted_12$2={key:2};var _sfc_main$4={__name:`GoogleAdsSearchPanel`,props:{modelValue:Object,integrationId:String,disabled:Boolean,managementDisabled:Boolean,result:Object,error:String,loading:Boolean,applicationPublicUrl:String,canPrepare:Boolean},emits:[`update:modelValue`,`manage`,`prepare`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const saved=computed(()=>props.modelValue.extensions?.googleAdsSearch?.[props.integrationId]);const draft=ref({});const formError=ref(``);const discovery=ref(null),targets=ref(null),campaignId=ref(``),locationName=ref(``),goalName=ref(``);const confirm=ref(``),trackingConfirmed=ref(false),billingConfirmed=ref(false);const result=computed(()=>props.result?.status===`ads`?props.result:null);const lines=value=>String(value||``).split(`
|
|
9
9
|
`).map(v=>v.trim()).filter(Boolean);function units(value){if(!/^[0-9]+$/.test(value||``))return``;return`${BigInt(value)/1000000n}.${String(BigInt(value)%1000000n).padStart(6,`0`)}`.replace(/\.?0+$/,``)}function micros(value){if(!/^[0-9]+(?:\.[0-9]{1,6})?$/.test(value||``))throw new Error(`Enter positive money amounts with at most six decimal places, without currency symbols.`);const[whole,fraction=``]=value.split(`.`);return(BigInt(whole)*1000000n+BigInt(fraction.padEnd(6,`0`))).toString()}function plan(){return validateGoogleAdsSearchPlan({customerId:draft.value.customerId,name:draft.value.name,currency:draft.value.currency,dailyBudgetMicros:micros(draft.value.budget),maxCpcMicros:micros(draft.value.cpc),finalUrl:draft.value.finalUrl,conversionActionId:draft.value.conversionActionId,locationIds:draft.value.locationIds,languageId:draft.value.languageId,keywords:lines(draft.value.keywords),headlines:lines(draft.value.headlines),descriptions:lines(draft.value.descriptions),nonPolitical:draft.value.nonPolitical})}watch(saved,value=>{const p=value||{};draft.value={...p,customerId:p.customerId||``,currency:p.currency||``,name:p.name||``,finalUrl:p.finalUrl||props.applicationPublicUrl||``,budget:units(p.dailyBudgetMicros),cpc:units(p.maxCpcMicros),locationIds:p.locationIds||[],keywords:p.keywords?.join(`
|
|
10
10
|
`)||``,headlines:p.headlines?.join(`
|
|
11
11
|
`)||``,descriptions:p.descriptions?.join(`
|
|
12
|
-
`)||``,nonPolitical:p.nonPolitical===true}},{immediate:true});const localChanges=computed(()=>{try{return JSON.stringify(plan())!==JSON.stringify(validateGoogleAdsSearchPlan(saved.value))}catch{return true}});const blocked=computed(()=>props.managementDisabled||props.loading);const planBlocked=computed(()=>blocked.value||localChanges.value||!saved.value);watch(()=>props.result,value=>{confirm.value=``;trackingConfirmed.value=false;billingConfirmed.value=false;if(value?.operation===`ads-discover`){discovery.value=value.data;if(value.data.account&&String(value.data.account.id)===draft.value.customerId)draft.value.currency=value.data.account.currencyCode}if(value?.operation===`ads-targets`)targets.value=value.data;if(value?.operation===`ads-create`)campaignId.value=value.data.campaignId});watch(()=>draft.value.customerId,()=>{discovery.value=null;targets.value=null;confirm.value=``});watch([()=>props.managementDisabled,localChanges,campaignId],()=>{confirm.value=``;trackingConfirmed.value=false;billingConfirmed.value=false});function manage(operation,ads={}){if(!blocked.value)emit(`manage`,{operation,ads})}function apply(){if(props.disabled)return;try{const next=plan();formError.value=``;emit(`update:modelValue`,{...props.modelValue,extensions:{...props.modelValue.extensions,googleAdsSearch:{...props.modelValue.extensions?.googleAdsSearch,[props.integrationId]:next}}})}catch(error){formError.value=error.message||`Complete the Search plan fields.`}}const accountValid=computed(()=>/^[0-9]{10}$/.test(draft.value.customerId));const campaignValid=computed(()=>/^[0-9]{1,20}$/.test(campaignId.value));const preview=computed(()=>result.value?.operation===`ads-preview`?result.value.data:null);const inspected=computed(()=>result.value?.operation===`ads-campaign`&&String(result.value.data.campaign?.id)===campaignId.value?result.value.data:null);function performConfirmed(){const action=confirm.value;confirm.value=``;if(action===`conversion`&&accountValid.value&&goalName.value.trim())manage(`ads-conversion`,{customerId:draft.value.customerId,name:goalName.value.trim()});if(action===`create`&&!planBlocked.value&&preview.value)manage(`ads-create`,{reviewId:preview.value.reviewId});if(action===`launch`&&!planBlocked.value&&inspected.value&&trackingConfirmed.value&&billingConfirmed.value)manage(`ads-launch`,{campaignId:campaignId.value,reviewId:inspected.value.reviewId,trackingConfirmed:true,billingConfirmed:true});if(action===`pause`&&!planBlocked.value&&campaignValid.value)manage(`ads-pause`,{campaignId:campaignId.value})}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1$3,[_cache[59]||(_cache[59]=createBaseVNode(`h3`,{class:`text-title-medium`},`Google Ads Search campaigns`,-1)),_cache[60]||(_cache[60]=createBaseVNode(`p`,{class:`mb-4`},`Use this project's connected Google account to prepare a Search campaign in an existing Ads account. Google bills the account directly. Creating a campaign here leaves it paused; launching requires a separate review.`,-1)),createVNode(VAlert,{type:`info`,variant:`tonal`,class:`mb-4`},{default:withCtx(()=>[..._cache[31]||(_cache[31]=[createTextVNode(`Save the connection and connect Google first. Your application must implement the advertising setup command. These controls use the development application's credentials; they can still affect a real Google Ads account.`,-1)])]),_:1}),__props.canPrepare?(openBlock(),createBlock(VBtn,{key:0,height:`48`,variant:`tonal`,class:`mb-4`,disabled:blocked.value,onClick:_cache[0]||(_cache[0]=$event=>emit(`prepare`))},{default:withCtx(()=>[..._cache[32]||(_cache[32]=[createTextVNode(`Prepare Search implementation request`,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true),__props.managementDisabled?(openBlock(),createElementBlock(`p`,_hoisted_2$3,`Save pending configuration changes and use an active owner session to run account operations.
|
|
13
|
-
`),label:`Google tag snippet ${index+1} (display only)`,readonly:``,rows:`5`},null,8,[`model-value`,`label`])}),128))])):createCommentVNode(``,true)],64)}),128)),_cache[42]||(_cache[42]=createBaseVNode(`a`,{href:`https://support.google.com/google-ads/answer/6095821`,target:`_blank`,rel:`noopener noreferrer`},`Google website conversion setup`,-1))]),_:1})]),_:1}),createVNode(VExpansionPanel,{title:`2. Prepare the Search campaign`},{default:withCtx(()=>[createVNode(VExpansionPanelText,null,{default:withCtx(()=>[_cache[45]||(_cache[45]=createBaseVNode(`p`,null,`One ad group, phrase-match keywords, a responsive Search ad, manual maximum CPC, Google Search only, and location presence targeting. Political advertising is not supported by this recipe.`,-1)),createVNode(VTextField,{modelValue:draft.value.name,"onUpdate:modelValue":_cache[7]||(_cache[7]=$event=>draft.value.name=$event),label:`Campaign name`,maxlength:`100`,disabled:__props.disabled},null,8,[`modelValue`,`disabled`]),createVNode(VTextField,{modelValue:draft.value.finalUrl,"onUpdate:modelValue":_cache[8]||(_cache[8]=$event=>draft.value.finalUrl=$event),label:`Public HTTPS landing page`,disabled:__props.disabled},null,8,[`modelValue`,`disabled`]),createVNode(VRow,null,{default:withCtx(()=>[createVNode(VCol,{cols:`12`,sm:`4`},{default:withCtx(()=>[createVNode(VTextField,{modelValue:draft.value.currency,"onUpdate:modelValue":_cache[9]||(_cache[9]=$event=>draft.value.currency=$event),label:`Account currency`,readonly:``,hint:`Loaded from Google; match the account before review.`,"persistent-hint":``},null,8,[`modelValue`])]),_:1}),createVNode(VCol,{cols:`12`,sm:`4`},{default:withCtx(()=>[createVNode(VTextField,{modelValue:draft.value.budget,"onUpdate:modelValue":_cache[10]||(_cache[10]=$event=>draft.value.budget=$event),label:`Average daily budget`,inputmode:`decimal`,suffix:draft.value.currency,disabled:__props.disabled},null,8,[`modelValue`,`suffix`,`disabled`])]),_:1}),createVNode(VCol,{cols:`12`,sm:`4`},{default:withCtx(()=>[createVNode(VTextField,{modelValue:draft.value.cpc,"onUpdate:modelValue":_cache[11]||(_cache[11]=$event=>draft.value.cpc=$event),label:`Maximum cost per click`,inputmode:`decimal`,suffix:draft.value.currency,disabled:__props.disabled},null,8,[`modelValue`,`suffix`,`disabled`])]),_:1})]),_:1}),_cache[46]||(_cache[46]=createBaseVNode(`p`,null,`The daily budget is an average, not a hard daily spending cap. Review Google's billing rules and your account's limits before launch.`,-1)),createVNode(VTextField,{modelValue:locationName.value,"onUpdate:modelValue":_cache[12]||(_cache[12]=$event=>locationName.value=$event),label:`Find a target location`,disabled:blocked.value},null,8,[`modelValue`,`disabled`]),createVNode(VBtn,{height:`48`,variant:`outlined`,disabled:blocked.value||!accountValid.value||locationName.value.trim().length<2,onClick:_cache[13]||(_cache[13]=$event=>manage(`ads-targets`,{customerId:draft.value.customerId,name:locationName.value.trim()}))},{default:withCtx(()=>[..._cache[43]||(_cache[43]=[createTextVNode(`Find locations and languages`,-1)])]),_:1},8,[`disabled`]),createVNode(VCombobox,{modelValue:draft.value.locationIds,"onUpdate:modelValue":_cache[14]||(_cache[14]=$event=>draft.value.locationIds=$event),items:(targets.value?.locations||[]).map(row=>({title:row.geoTargetConstant.canonicalName,value:String(row.geoTargetConstant.id)})),"return-object":false,label:`Target location IDs`,multiple:``,chips:``,disabled:__props.disabled,hint:`Choose search results, or enter known Google geo target IDs. At least one, at most ten.`,"persistent-hint":``},null,8,[`modelValue`,`items`,`disabled`]),createVNode(VCombobox,{modelValue:draft.value.languageId,"onUpdate:modelValue":_cache[15]||(_cache[15]=$event=>draft.value.languageId=$event),items:(targets.value?.languages||[]).map(row=>({title:row.languageConstant.name,value:String(row.languageConstant.id)})),"return-object":false,label:`Target language ID`,disabled:__props.disabled},null,8,[`modelValue`,`items`,`disabled`]),createVNode(VTextarea,{modelValue:draft.value.keywords,"onUpdate:modelValue":_cache[16]||(_cache[16]=$event=>draft.value.keywords=$event),label:`Phrase keywords — one per line`,disabled:__props.disabled,hint:`1–20 keywords, at most 80 characters each.`,"persistent-hint":``},null,8,[`modelValue`,`disabled`]),createVNode(VTextarea,{modelValue:draft.value.headlines,"onUpdate:modelValue":_cache[17]||(_cache[17]=$event=>draft.value.headlines=$event),label:`Ad headlines — one per line`,disabled:__props.disabled,hint:`3–15 headlines, at most 30 characters each.`,"persistent-hint":``},null,8,[`modelValue`,`disabled`]),createVNode(VTextarea,{modelValue:draft.value.descriptions,"onUpdate:modelValue":_cache[18]||(_cache[18]=$event=>draft.value.descriptions=$event),label:`Ad descriptions — one per line`,disabled:__props.disabled,hint:`2–4 descriptions, at most 90 characters each.`,"persistent-hint":``},null,8,[`modelValue`,`disabled`]),createVNode(VCheckbox,{modelValue:draft.value.nonPolitical,"onUpdate:modelValue":_cache[19]||(_cache[19]=$event=>draft.value.nonPolitical=$event),label:`This campaign does not contain EU political advertising`,disabled:__props.disabled},null,8,[`modelValue`,`disabled`]),formError.value?(openBlock(),createBlock(VAlert,{key:0,type:`error`,variant:`tonal`,role:`alert`},{default:withCtx(()=>[createTextVNode(toDisplayString(formError.value),1)]),_:1})):createCommentVNode(``,true),createVNode(VBtn,{height:`48`,color:`primary`,disabled:__props.disabled||!localChanges.value,onClick:apply},{default:withCtx(()=>[..._cache[44]||(_cache[44]=[createTextVNode(`Apply Search plan to configuration`,-1)])]),_:1},8,[`disabled`]),_cache[47]||(_cache[47]=createBaseVNode(`p`,{class:`mt-3`},`Then use Save configuration on this page. Operations below always use the saved file. Unapplied form edits are not saved.`,-1))]),_:1})]),_:1})]),_:1}),createVNode(VBtn,{height:`48`,variant:`tonal`,disabled:planBlocked.value,onClick:_cache[20]||(_cache[20]=$event=>manage(`ads-preview`))},{default:withCtx(()=>[..._cache[48]||(_cache[48]=[createTextVNode(`Validate and review saved plan`,-1)])]),_:1},8,[`disabled`]),preview.value?(openBlock(),createElementBlock(`section`,_hoisted_6$2,[createBaseVNode(`p`,null,toDisplayString(preview.value.account?.descriptiveName)+` · `+toDisplayString(preview.value.plan.customerId)+` · `+toDisplayString(preview.value.plan.currency)+`. Google accepted validation; policy approval, tracking and billing readiness are not established.`,1),createBaseVNode(`p`,null,toDisplayString(preview.value.plan.name)+` · Average daily budget `+toDisplayString(units(preview.value.plan.dailyBudgetMicros))+` `+toDisplayString(preview.value.plan.currency)+` · Maximum CPC `+toDisplayString(units(preview.value.plan.maxCpcMicros))+` `+toDisplayString(preview.value.plan.currency),1),createBaseVNode(`p`,null,`Goal: `+toDisplayString(preview.value.conversion?.name)+`. Landing page: `+toDisplayString(preview.value.plan.finalUrl),1),createVNode(VTextarea,{"model-value":JSON.stringify(preview.value.plan,null,2),label:`Complete reviewed Search plan`,readonly:``,rows:`8`},null,8,[`model-value`]),createVNode(VBtn,{height:`48`,color:`primary`,disabled:planBlocked.value,onClick:_cache[21]||(_cache[21]=$event=>confirm.value=`create`)},{default:withCtx(()=>[..._cache[49]||(_cache[49]=[createTextVNode(`Review paused campaign creation`,-1)])]),_:1},8,[`disabled`])])):createCommentVNode(``,true),result.value?.operation===`ads-create`?(openBlock(),createElementBlock(`p`,_hoisted_7$2,`Campaign `+toDisplayString(result.value.data.campaignId)+` created PAUSED. It will not serve until enabled.`,1)):createCommentVNode(``,true),result.value&&[`ads-launch`,`ads-pause`,`ads-conversion`].includes(result.value.operation)?(openBlock(),createElementBlock(`p`,_hoisted_8$2,`Google accepted the request. Reload account or inspect the campaign to verify its current state.`)):createCommentVNode(``,true),createBaseVNode(`section`,_hoisted_9$2,[_cache[55]||(_cache[55]=createBaseVNode(`h4`,{class:`text-title-small`},`3. Inspect, launch or pause`,-1)),createBaseVNode(`p`,null,`Saved account: `+toDisplayString(saved.value?.customerId||`Apply and save a plan first`)+`. Choose the returned campaign ID, or find it in Google Ads. Larger campaigns may require review in Google Ads.`,1),discovery.value?.campaigns?.length?(openBlock(),createBlock(VList,{key:0,"aria-label":`Existing Search campaigns`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(discovery.value.campaigns,row=>{return openBlock(),createBlock(VListItem,{key:row.campaign.id,title:`${row.campaign.name} — ${row.campaign.id} — ${row.campaign.status}`},null,8,[`title`])}),128))]),_:1})):createCommentVNode(``,true),createVNode(VTextField,{modelValue:campaignId.value,"onUpdate:modelValue":_cache[22]||(_cache[22]=$event=>campaignId.value=$event),label:`Campaign ID to inspect or pause`,disabled:blocked.value},null,8,[`modelValue`,`disabled`]),createVNode(VBtn,{height:`48`,variant:`outlined`,disabled:planBlocked.value||!campaignValid.value,onClick:_cache[23]||(_cache[23]=$event=>manage(`ads-campaign`,{campaignId:campaignId.value}))},{default:withCtx(()=>[..._cache[50]||(_cache[50]=[createTextVNode(`Inspect current campaign`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{height:`48`,variant:`outlined`,class:`ml-2`,disabled:planBlocked.value||!campaignValid.value,onClick:_cache[24]||(_cache[24]=$event=>confirm.value=`pause`)},{default:withCtx(()=>[..._cache[51]||(_cache[51]=[createTextVNode(`Review pause`,-1)])]),_:1},8,[`disabled`]),inspected.value?(openBlock(),createElementBlock(Fragment,{key:1},[createVNode(VTextarea,{"model-value":JSON.stringify(inspected.value,(key,value)=>key===`reviewId`?void 0:value,2),label:`Current Google campaign, ads, targets and goals`,readonly:``,rows:`10`,class:`mt-4`},null,8,[`model-value`]),_cache[53]||(_cache[53]=createBaseVNode(`p`,null,`Review the complete current values above, including budget, bid, destinations, assets, goals and Google's policy status. These are live account values, not a promise of approval.`,-1)),createVNode(VCheckbox,{modelValue:trackingConfirmed.value,"onUpdate:modelValue":_cache[25]||(_cache[25]=$event=>trackingConfirmed.value=$event),label:`I verified the conversion tag and successful lead event on the landing site`,disabled:planBlocked.value},null,8,[`modelValue`,`disabled`]),createVNode(VCheckbox,{modelValue:billingConfirmed.value,"onUpdate:modelValue":_cache[26]||(_cache[26]=$event=>billingConfirmed.value=$event),label:`I verified account billing, advertiser requirements and the website, and approve spending this budget`,disabled:planBlocked.value},null,8,[`modelValue`,`disabled`]),createVNode(VBtn,{height:`48`,color:`primary`,disabled:planBlocked.value||inspected.value.campaign.status!==`PAUSED`||!trackingConfirmed.value||!billingConfirmed.value,onClick:_cache[27]||(_cache[27]=$event=>confirm.value=`launch`)},{default:withCtx(()=>[..._cache[52]||(_cache[52]=[createTextVNode(`Review campaign launch`,-1)])]),_:1},8,[`disabled`])],64)):createCommentVNode(``,true),createVNode(VBtn,{height:`48`,variant:`text`,class:`mt-3`,disabled:planBlocked.value,onClick:_cache[28]||(_cache[28]=$event=>manage(`ads-report`))},{default:withCtx(()=>[..._cache[54]||(_cache[54]=[createTextVNode(`Read last 30 days report`,-1)])]),_:1},8,[`disabled`]),result.value?.operation===`ads-report`?(openBlock(),createBlock(VTextarea,{key:2,"model-value":JSON.stringify(result.value.data,null,2),label:`Search campaign report (costMicros is millionths of account currency)`,readonly:``,rows:`8`},null,8,[`model-value`])):createCommentVNode(``,true),_cache[56]||(_cache[56]=createBaseVNode(`p`,{class:`mt-3`},`Disconnecting Google does not pause running ads. Reports list at most 50 campaigns; use Google Ads for account-wide reporting, billing and campaigns outside this Search recipe.`,-1))]),createVNode(VDialog,{"model-value":Boolean(confirm.value),"max-width":`600`,"onUpdate:modelValue":_cache[30]||(_cache[30]=value=>{if(!value)confirm.value=``})},{default:withCtx(()=>[createVNode(VCard,{title:{conversion:`Create a website conversion goal?`,create:`Create the reviewed campaign paused?`,launch:`Launch campaign and allow spending?`,pause:`Pause campaign?`}[confirm.value]},{default:withCtx(()=>[createVNode(VCardText,null,{default:withCtx(()=>[createBaseVNode(`p`,null,`Account `+toDisplayString(confirm.value===`conversion`?draft.value.customerId:saved.value?.customerId)+` · `+toDisplayString(confirm.value===`conversion`?goalName.value:confirm.value===`create`?preview.value?.plan.name:campaignId.value),1),confirm.value===`launch`?(openBlock(),createElementBlock(`p`,_hoisted_10$2,`Google may begin serving ads and charging this account. The application rechecks the campaign review before enabling it.`)):confirm.value===`create`?(openBlock(),createElementBlock(`p`,_hoisted_11$2,`Create the reviewed budget, campaign, goal association, ad group, keywords and ad together. The campaign starts paused.`)):confirm.value===`pause`?(openBlock(),createElementBlock(`p`,_hoisted_12$2,`Stop this campaign from serving after Google processes the pause. Already incurred charges remain.`)):createCommentVNode(``,true),_cache[57]||(_cache[57]=createBaseVNode(`p`,null,`If a request times out, inspect Google Ads before repeating it: it may already have succeeded.`,-1))]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VBtn,{height:`48`,onClick:_cache[29]||(_cache[29]=$event=>confirm.value=``)},{default:withCtx(()=>[..._cache[58]||(_cache[58]=[createTextVNode(`Cancel`,-1)])]),_:1}),createVNode(VBtn,{height:`48`,color:`primary`,disabled:blocked.value,onClick:performConfirmed},{default:withCtx(()=>[createTextVNode(`Confirm `+toDisplayString(confirm.value),1)]),_:1},8,[`disabled`])]),_:1})]),_:1},8,[`title`])]),_:1},8,[`model-value`])])}}};var application_google_ads_default="# Application-owned Google Ads Search\n\n## Ownership and scope\n\nThe public Vibe64 editor owns the Material 3 preparation/review screens and its\nexisting Integration setup command transport. The generated application owns\nGoogle credentials, OAuth, refresh, account authorization and every Google API\nrequest. No Vibe64 host supplies an Ads registration, credential, gateway or\nbilling service. The Ads account owner pays Google.\n\nJSKIT provides reusable plan validation and Search operations in\n`@jskit-ai/connectors-catalog/shared/google-ads-search` and\n`@jskit-ai/connectors-catalog/server/google-ads-search`. Applications compose\n`createGoogleAdsSearchService` with their existing authorized connection service,\nconfiguration, trusted application context and integration ID. A CLI-only JSKIT\napp can call this service without Vibe64 or an editor command.\n\nEvery other framework implements the same file and command contract through its\nnative Google client or HTTP library. It does not install JSKIT or a Node sidecar.\nThe selected framework's Genesis Stack contains its own executable under\n`Integration setup`; Genesis does not define or execute advertising semantics.\n\n## Portable saved plan\n\nRead `extensions.googleAdsSearch[integrationId]` in `integrations.json`. This is\nseparate from connection settings: changing campaign copy must not invalidate\nOAuth. The associated integration must be `google-ads`, with a project-owned\nregistration and an administrator/shared account connection. Derive its trusted\nconnection owner from application composition, never from a browser-supplied ID.\n\nThe plan has exactly these fields:\n\n- `customerId`: ten digits, no hyphens; active client account, not a manager.\n- `name`: 1–100 plain-text characters.\n- `currency`: three uppercase letters; must match the live account currency.\n- `dailyBudgetMicros`, `maxCpcMicros`: positive integer **strings**, at most 12\n digits. One currency unit is 1,000,000 micros; preserve integer precision.\n- `finalUrl`: public HTTPS landing page, at most 2048 characters, no embedded\n credentials or fragment.\n- `conversionActionId`: numeric ID of an enabled website conversion in this account.\n- `locationIds`: 1–10 numeric Google geo target IDs; `languageId`: numeric Google\n language constant ID. Search results supply labels; never guess IDs from names.\n- `keywords`: 1–20 nonempty plain strings, at most 80 characters each.\n- `headlines`: 3–15 nonempty plain strings, at most 30 characters each.\n- `descriptions`: 2–4 nonempty plain strings, at most 90 characters each.\n- `nonPolitical`: exactly `true`, explicitly confirmed by the operator. This\n recipe does not support political advertising.\n\nThe fixed recipe creates one Search campaign, one non-shared standard budget,\none enabled Search ad group with manual CPC, phrase-match keywords and one\nresponsive Search ad. The campaign starts PAUSED. Enable only Google Search,\nexclude partners/content networks, use positive location PRESENCE targeting,\nand attach only the selected website conversion through a campaign custom goal.\n\n## Existing setup command extension\n\nPreserve the `vibe64.integration-setup.command.v1` stdin/stdout envelope and all\nexisting connection operations. Ads requests contain `operation`, `integrationId`\nand an `ads` object plus the existing protocol/request identity. The declared\napplication command receives credentials through project Env. It must validate\nthe saved file and caller authorization before resolving credentials. These\ncommands manage an advertiser's account, not arbitrary app users' accounts.\n\n| Operation | `ads` input | JSKIT service method | `data` output |\n| --- | --- | --- | --- |\n| `ads-discover` | optional `customerId` | `discover(customerId)` | `accounts` resource names, or `account`, `clients`, `conversions`, `campaigns` |\n| `ads-targets` | `customerId`, `name` | `targets(customerId, name)` | `locations`, `languages` |\n| `ads-conversion` | `customerId`, `name` | `createConversion(ads)` | Google mutation `results` resource names |\n| `ads-preview` | empty | `preview()` | saved `plan`, live `account`, selected `conversion`, `reviewId` |\n| `ads-create` | `reviewId` | `create(reviewId)` | numeric-string `campaignId`, `status: \"PAUSED\"` |\n| `ads-campaign` | `campaignId` | `campaign(campaignId)` | account/campaign/budget, ads, targets, keywords, goals and `reviewId` |\n| `ads-launch` | `campaignId`, `reviewId`, `trackingConfirmed: true`, `billingConfirmed: true` | `launch(ads)` | Google mutation `results` |\n| `ads-pause` | `campaignId` | `pause(campaignId)` | Google mutation `results` |\n| `ads-report` | empty | `report()` | `{ campaigns: [...] }` with campaign and last-30-days metrics |\n\nReturn exactly `{ protocol, requestId, status: \"ads\", operation, data }`, echoing\nthe request identity/operation, with no tokens or diagnostic dumps. Use only the\nselected Google display fields returned by the service. Keep the entire response\nunder 32 KiB. Oversized/unknown results must fail clearly; do not silently truncate\na launch review. The executable is application code, not a public unauthenticated\nendpoint. Native adapters must map the same operations and enforce the same rules.\nThe JSKIT pattern `google-ads-search` provides a dispatch fragment.\n\n## Review, writes and readiness\n\nPreview validates locally, reads the account and selected goal, then calls Google\nAds mutate with `validateOnly: true` and `partialFailure: false`. It does not create\nanything. Bind a deterministic review digest to the trusted context, integration,\nsaved plan and live reviewed values. Before creation, repeat the validation and\ncompare the digest; reject changed plans/accounts. Create the full batch atomically\nwith unique temporary IDs and campaign status PAUSED. Do not automatically retry\na write, including a timeout or a lost response. Inspect Google Ads first.\n\nBefore launch, re-read the campaign, budget, bidding/network/location settings,\nads/landing URLs/policy status, targets, keywords and goal association. Resolve\ncustom goal contents as well. Reject oversized reviews, changes since approval,\nnon-active/manager accounts and campaigns outside this bounded manual-CPC Search\nrecipe. Launch is a separate explicit confirmation with real-spending wording.\nThe digest prevents stale review; it is not authentication or a provider-side\ncompare-and-swap. Another Ads administrator can change a campaign concurrently.\nDo not describe provider validation as policy approval or guaranteed readiness.\nPause is separately confirmed. Disconnecting the integration does not stop ads.\n\nThe operator manually confirms billing/advertiser readiness and tracking. Install\nthe selected website conversion using Google's returned tag snippets or Tag setup\ninstructions. Render snippets as plain text in the editor; never execute them.\nThe app installs the tag through its existing consent/tag-manager owner and fires\nthe conversion only after a successful lead action. Avoid duplicate global tags\nand double-counted submissions. Verify with Tag Assistant before launch; do not\nsend real conversions during code verification.\n\n## Bounds and exclusions\n\nThis first path uses an existing account. It does not create advertiser accounts,\nprovision billing, build Performance Max/Demand Gen campaigns, automatically audit\na website, or attach live provider tools to coding-assistant hosts. Public editor\nmanagement currently uses the development application's command/Env, even when\nthe connected Ads account is real. Published-environment Ads management is not\nprovided by this screen. Reports/discovery show bounded lists; Google Ads remains\nthe account-wide management UI. Native app composition and actual Google account\napproval remain required; fixture tests do not establish live provider acceptance.\n\n## Authoritative references\n\n- https://developers.google.com/google-ads/api/docs/campaigns/create-campaigns\n- https://developers.google.com/google-ads/api/docs/mutating/best-practices\n- https://developers.google.com/google-ads/api/docs/conversions/categories\n- https://support.google.com/google-ads/answer/6095821\n- https://docs.lovable.dev/integrations/google-ads\n";var _hoisted_1$2={"aria-label":`Application payments`,class:`mt-6`};var _hoisted_2$2={key:0,role:`status`};var _hoisted_3$1=[`aria-label`];var _hoisted_4$1={class:`text-title-small mb-3`};var _hoisted_5$1={key:2};var _hoisted_6$1=[`href`];var _hoisted_7$1={"aria-label":`Payment catalogue`,class:`mb-6`};var _hoisted_8$1={key:1,"aria-label":`Payment readiness`};var _hoisted_9$1={class:`font-weight-bold mt-3`};var _hoisted_10$1={class:`ml-0`};var _hoisted_11$1={key:2,role:`alert`};var _hoisted_12$1={key:3,role:`status`};var _hoisted_13$1={key:0,"aria-label":`Recover catalogue operation`};var _hoisted_14$1={key:1};var _hoisted_15$1={key:2};var _hoisted_16$1={key:3};var _hoisted_17$1={key:4};var _hoisted_18$1={key:1,role:`status`};var _hoisted_19$1={class:`text-body-small mb-2`};var _hoisted_20$1={key:0,class:`text-body-medium`};var _hoisted_21$1={key:0,class:`text-body-small mt-1`};var _hoisted_22$1={key:3,class:`text-body-medium`};var _hoisted_23$1=[`aria-label`];var _hoisted_24$1={class:`text-title-small mb-2`};var _sfc_main$3={__name:`PaymentConfigurationPanel`,props:{modelValue:{type:Object,required:true},integrationId:{type:String,required:true},disabled:Boolean,applicationPublicUrl:String,management:Object,managementError:String,managementOperation:String,managementLoading:Boolean,managementDisabled:Boolean,canPrepare:Boolean},emits:[`update:modelValue`,`set-env`,`manage`,`prepare`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const paymentSetups=Object.fromEntries(connectorDefinitions.filter(provider=>provider.paymentSetup).map(provider=>[provider.id,provider.paymentSetup]));const payments=computed(()=>props.modelValue.extensions?.payments);const planId=ref(``);const historySubject=ref(``);const historyCollection=ref(`transactions`);const historySubjectError=computed(()=>historySubject.value&&(!historySubject.value.trim()||historySubject.value.length>200||/[\p{Cc}\p{Cf}]/u.test(historySubject.value))?`Enter a valid application billing account ID.`:``);const history=computed(()=>props.management?.status===`payments-history`&&props.management.subjectId===historySubject.value&&props.management.collection===historyCollection.value?props.management:null);watch(()=>props.integrationId,()=>{historySubject.value=``;historyCollection.value=`transactions`});const publishOpen=ref(false);const recoveryOpen=ref(false);const recoveryProviderId=ref(``);watch([()=>props.management,()=>props.managementDisabled,()=>props.integrationId],()=>{publishOpen.value=false;recoveryOpen.value=false;recoveryProviderId.value=``});function publishCatalogue(){const result=props.management;if(props.managementDisabled||!result?.review||result.review.pending||result.review.drift.length)return;publishOpen.value=false;emit(`manage`,{operation:`payments-publish`,paymentEnvironment:result.paymentEnvironment,reviewId:result.review.reviewId})}function recoverCatalogue(){const result=props.management;if(props.managementDisabled||!result?.review?.pending||!/^[A-Za-z0-9_-]{1,200}$/.test(recoveryProviderId.value))return;recoveryOpen.value=false;emit(`manage`,{operation:`payments-recover`,paymentEnvironment:result.paymentEnvironment,reviewId:result.review.reviewId,providerId:recoveryProviderId.value})}const planIdError=computed(()=>!planId.value||/^[a-z][a-z0-9-]{0,99}$/.test(planId.value)&&![`constructor`,`prototype`].includes(planId.value)&&!Object.hasOwn(payments.value?.plans||{},planId.value)?``:`Use a new lowercase plan ID containing letters, numbers and hyphens.`);const validation=computed(()=>{if(!payments.value)return[];try{validatePaymentConfiguration(props.modelValue);return[]}catch(error){return error.fieldErrors||[{path:`payments`,message:error.message}]}});const connections=computed(()=>Object.entries(props.modelValue.integrations).filter(([,value])=>[`stripe`,`paddle`].includes(value.provider)&&value.accountMode===`shared`&&value.authentication.method===`api-key`).map(([value,slot])=>({value,title:`${slot.displayName||slot.provider} (${value})`})));const errors=path=>validation.value.filter(error=>error.path===`extensions.payments/${path}`).map(error=>error.message);const webhookUrl=integrationId=>integrationCallbackUrl(props.applicationPublicUrl,`/integrations/${integrationId}/webhook`);const returnUrl=computed(()=>integrationCallbackUrl(props.applicationPublicUrl,`/billing`));function update(value){if(!props.disabled)emit(`update:modelValue`,{...props.modelValue,extensions:{...props.modelValue.extensions,payments:value}})}function addEnvironment(environment){const existing=payments.value||{version:1,environments:{},plans:{}};update({...existing,environments:{...existing.environments,[environment]:{integrationId:props.integrationId,providerAccountId:``,webhookSecretRef:`env:PAYMENT_${environment.toUpperCase()}_WEBHOOK_SECRET`,returnUrlRef:`env:PAYMENT_${environment.toUpperCase()}_RETURN_URL`}}})}function binding(environment,field,value){update({...payments.value,environments:{...payments.value.environments,[environment]:{...payments.value.environments[environment],[field]:value}}})}function plan(id,field,value){update({...payments.value,plans:{...payments.value.plans,[id]:{...payments.value.plans[id],[field]:value}}})}function addPlan(){if(!planId.value||planIdError.value||!payments.value)return;update({...payments.value,plans:{...payments.value.plans,[planId.value]:{name:``,amount:null,currency:`USD`,interval:`month`,features:[],renewalCredits:0}}});planId.value=``}function setEnv(reference,value,secret){const key=/^env:([A-Z_][A-Z0-9_]*)$/.exec(reference)?.[1];if(key)emit(`set-env`,{key,value,secret})}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1$2,[_cache[35]||(_cache[35]=createBaseVNode(`h3`,{class:`text-title-medium`},`Application payments`,-1)),_cache[36]||(_cache[36]=createBaseVNode(`p`,{class:`mb-4`},`Define this project's recurring plans. Your application owns checkout, subscriptions, feature access and credits. Saving these settings does not charge anyone or publish products.`,-1)),(openBlock(true),createElementBlock(Fragment,null,renderList([`sandbox`,`live`].filter(value=>!payments.value?.environments?.[value]),environment=>{return openBlock(),createBlock(VBtn,{key:environment,height:`48`,variant:`outlined`,class:`mr-2 mb-4`,disabled:__props.disabled,onClick:$event=>addEnvironment(environment)},{default:withCtx(()=>[createTextVNode(`Configure `+toDisplayString(environment)+` payments`,1)]),_:2},1032,[`disabled`,`onClick`])}),128)),payments.value?(openBlock(),createElementBlock(Fragment,{key:0},[validation.value.length?(openBlock(),createElementBlock(`p`,_hoisted_2$2,`Complete the required payment fields before saving. `+toDisplayString(validation.value[0].message),1)):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(payments.value.environments,(item,environment)=>{return openBlock(),createElementBlock(`section`,{key:environment,"aria-label":`${environment} payment account`,class:`mb-6`},[createBaseVNode(`h4`,_hoisted_4$1,toDisplayString(environment===`live`?`Live account — real payments`:`Sandbox account — test payments`),1),createVNode(VSelect,{"model-value":item.integrationId,items:connections.value,label:`Payment connection`,disabled:__props.disabled,"onUpdate:modelValue":$event=>binding(environment,`integrationId`,$event)},null,8,[`model-value`,`items`,`disabled`,`onUpdate:modelValue`]),createVNode(VTextField,{"model-value":item.providerAccountId,label:`Provider account identity`,"persistent-hint":``,hint:`Stripe: your acct_ account ID from account settings. Paddle: a stable identifier for this merchant account; catalogue access alone cannot verify its legal identity.`,disabled:__props.disabled,"error-messages":errors(`environments/${environment}/providerAccountId`),"onUpdate:modelValue":$event=>binding(environment,`providerAccountId`,$event)},null,8,[`model-value`,`disabled`,`error-messages`,`onUpdate:modelValue`]),__props.modelValue.integrations[item.integrationId]?.provider===`paddle`?(openBlock(),createBlock(VSelect,{key:0,"model-value":item.taxCategory,items:[`digital-goods`,`ebooks`,`implementation-services`,`professional-services`,`saas`,`software-programming-services`,`standard`,`training-services`,`website-hosting`],label:`Paddle product tax category`,"persistent-hint":``,hint:`Choose the category that accurately describes what your app sells.`,"error-messages":errors(`environments/${environment}/taxCategory`),disabled:__props.disabled,"onUpdate:modelValue":$event=>binding(environment,`taxCategory`,$event)},null,8,[`model-value`,`error-messages`,`disabled`,`onUpdate:modelValue`])):createCommentVNode(``,true),__props.modelValue.integrations[item.integrationId]?.provider===`paddle`?(openBlock(),createElementBlock(Fragment,{key:1},[createVNode(VTextField,{"model-value":item.publicClientTokenRef,label:`Paddle public client token Env reference`,placeholder:`env:PADDLE_CLIENT_TOKEN`,"persistent-hint":``,hint:`Public browser token for Paddle.js. Keep the private API key in the connection's separate secret Env variable.`,disabled:__props.disabled,"error-messages":errors(`environments/${environment}/publicClientTokenRef`),"onUpdate:modelValue":$event=>binding(environment,`publicClientTokenRef`,$event)},null,8,[`model-value`,`disabled`,`error-messages`,`onUpdate:modelValue`]),createVNode(VBtn,{height:`48`,variant:`text`,disabled:__props.disabled||!/^env:[A-Z_][A-Z0-9_]*$/.test(item.publicClientTokenRef||``),onClick:$event=>setEnv(item.publicClientTokenRef,void 0,false)},{default:withCtx(()=>[..._cache[12]||(_cache[12]=[createTextVNode(`Set public client token in Env`,-1)])]),_:1},8,[`disabled`,`onClick`])],64)):createCommentVNode(``,true),createVNode(VTextField,{"model-value":item.webhookSecretRef,label:`Webhook signing secret Env reference`,placeholder:`env:PAYMENT_WEBHOOK_SECRET`,disabled:__props.disabled,"error-messages":errors(`environments/${environment}/webhookSecretRef`),"onUpdate:modelValue":$event=>binding(environment,`webhookSecretRef`,$event)},null,8,[`model-value`,`disabled`,`error-messages`,`onUpdate:modelValue`]),createVNode(VBtn,{height:`48`,variant:`text`,disabled:__props.disabled||!/^env:[A-Z_][A-Z0-9_]*$/.test(item.webhookSecretRef||``),onClick:$event=>setEnv(item.webhookSecretRef,void 0,true)},{default:withCtx(()=>[..._cache[13]||(_cache[13]=[createTextVNode(`Set signing secret in Env`,-1)])]),_:1},8,[`disabled`,`onClick`]),createVNode(VTextField,{"model-value":webhookUrl(item.integrationId),label:`Suggested webhook URL`,readonly:``,"persistent-hint":``,hint:`Your app must implement this route. Create the provider destination with this exact URL; the editor is not the receiver.`},null,8,[`model-value`]),createVNode(VTextField,{"model-value":item.returnUrlRef,label:`Checkout / return URL Env reference`,disabled:__props.disabled,"error-messages":errors(`environments/${environment}/returnUrlRef`),"onUpdate:modelValue":$event=>binding(environment,`returnUrlRef`,$event)},null,8,[`model-value`,`disabled`,`error-messages`,`onUpdate:modelValue`]),createVNode(VBtn,{height:`48`,variant:`text`,disabled:__props.disabled||!returnUrl.value,onClick:$event=>setEnv(item.returnUrlRef,returnUrl.value,false)},{default:withCtx(()=>[..._cache[14]||(_cache[14]=[createTextVNode(`Set suggested application URL in Env`,-1)])]),_:1},8,[`disabled`,`onClick`]),!returnUrl.value?(openBlock(),createElementBlock(`p`,_hoisted_5$1,`No application address is available. Enter the actual application's HTTPS billing URL in Env; do not use the editor address.`)):createCommentVNode(``,true),createVNode(VExpansionPanels,{class:`mt-4`},{default:withCtx(()=>[createVNode(VExpansionPanel,{title:`Set up payment events and checkout`},{default:withCtx(()=>[createVNode(VExpansionPanelText,null,{default:withCtx(()=>[createBaseVNode(`ol`,null,[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(paymentSetups)[__props.modelValue.integrations[item.integrationId]?.provider]?.steps||[],step=>{return openBlock(),createElementBlock(`li`,{key:step},toDisplayString(step),1)}),128))]),createBaseVNode(`a`,{href:unref(paymentSetups)[__props.modelValue.integrations[item.integrationId]?.provider]?.url,target:`_blank`,rel:`noopener noreferrer`},`Open provider setup documentation`,8,_hoisted_6$1)]),_:2},1024)]),_:2},1024)]),_:2},1024)],8,_hoisted_3$1)}),128)),createBaseVNode(`section`,_hoisted_7$1,[_cache[22]||(_cache[22]=createBaseVNode(`h4`,{class:`text-title-small mb-3`},`Provider catalogue`,-1)),_cache[23]||(_cache[23]=createBaseVNode(`p`,null,`Save the configuration, then ask your application to compare its plans with the provider. Publishing creates or updates provider products and prices. It does not charge customers.`,-1)),__props.canPrepare?(openBlock(),createElementBlock(Fragment,{key:0},[createVNode(VBtn,{height:`48`,variant:`tonal`,class:`my-3`,disabled:__props.managementDisabled,onClick:_cache[0]||(_cache[0]=$event=>emit(`prepare`))},{default:withCtx(()=>[..._cache[15]||(_cache[15]=[createTextVNode(`Prepare payment implementation request`,-1)])]),_:1},8,[`disabled`]),_cache[16]||(_cache[16]=createBaseVNode(`p`,null,`Adds the saved payment requirements to your chat draft for review before sending. Save any changes first.`,-1))],64)):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(payments.value.environments,(item,environment)=>{return openBlock(),createElementBlock(Fragment,{key:environment},[item.integrationId===__props.integrationId?(openBlock(),createBlock(VBtn,{key:0,height:`48`,variant:`outlined`,class:`mr-2 my-3`,disabled:__props.managementDisabled,onClick:$event=>emit(`manage`,{operation:`payments-preview`,paymentEnvironment:environment})},{default:withCtx(()=>[createTextVNode(`Preview `+toDisplayString(environment)+` catalogue`,1)]),_:2},1032,[`disabled`,`onClick`])):createCommentVNode(``,true)],64)}),128)),(openBlock(true),createElementBlock(Fragment,null,renderList(payments.value.environments,(item,environment)=>{return openBlock(),createElementBlock(Fragment,{key:`readiness-${environment}`},[item.integrationId===__props.integrationId?(openBlock(),createBlock(VBtn,{key:0,height:`48`,variant:`outlined`,class:`mr-2 my-3`,disabled:__props.managementDisabled,onClick:$event=>emit(`manage`,{operation:`payments-readiness`,paymentEnvironment:environment})},{default:withCtx(()=>[createTextVNode(`Check `+toDisplayString(environment)+` readiness`,1)]),_:2},1032,[`disabled`,`onClick`])):createCommentVNode(``,true)],64)}),128)),__props.management?.status===`payments-readiness`?(openBlock(),createElementBlock(`section`,_hoisted_8$1,[createBaseVNode(`p`,null,`Account `+toDisplayString(__props.management.providerAccountId)+` · `+toDisplayString(__props.management.paymentEnvironment),1),_cache[17]||(_cache[17]=createBaseVNode(`p`,null,`This report is not provider approval. Unknown and manual checks still need evidence before launch.`,-1)),createBaseVNode(`dl`,null,[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.management.checks,check=>{return openBlock(),createElementBlock(Fragment,{key:check.id},[createBaseVNode(`dt`,_hoisted_9$1,toDisplayString({credentials:`Credentials`,account:`Merchant identity`,charges:`Payment acceptance`,payouts:`Payouts`,catalogue:`Products and prices`,webhook:`Payment events`,checkout:`Checkout and billing portal`,site:`Website and provider approval`,deployment:`Deployed application`}[check.id])+` · `+toDisplayString({passed:`Passed`,failed:`Needs attention`,unknown:`Not verified`,manual:`Manual check required`}[check.status]),1),createBaseVNode(`dd`,_hoisted_10$1,toDisplayString(check.detail),1)],64)}),128))])])):createCommentVNode(``,true),__props.managementError&&__props.managementOperation!==`payments-history`?(openBlock(),createElementBlock(`p`,_hoisted_11$1,toDisplayString(__props.managementError),1)):createCommentVNode(``,true),__props.management?.status===`unconfigured`?(openBlock(),createElementBlock(`p`,_hoisted_12$1,`Your application needs payment management implemented in its Integration setup command. Ask the project assistant to implement the payment catalogue contract using your chosen framework.`)):createCommentVNode(``,true),__props.management?.review?(openBlock(),createElementBlock(Fragment,{key:4},[createBaseVNode(`p`,null,`Account `+toDisplayString(__props.management.providerAccountId)+` · `+toDisplayString(__props.management.paymentEnvironment),1),__props.management.review.pending?(openBlock(),createElementBlock(`section`,_hoisted_13$1,[_cache[19]||(_cache[19]=createBaseVNode(`p`,{role:`alert`},`An earlier provider request is unresolved. Check the matching provider account before continuing.`,-1)),createBaseVNode(`p`,null,toDisplayString(__props.management.review.pendingOperation.action)+` · `+toDisplayString(__props.management.review.pendingOperation.planId)+` · `+toDisplayString(__props.management.review.pendingOperation.name||`${__props.management.review.pendingOperation.currency} ${__props.management.review.pendingOperation.amount} minor units / ${__props.management.review.pendingOperation.interval}`),1),createVNode(VTextField,{modelValue:recoveryProviderId.value,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>recoveryProviderId.value=$event),label:`Existing provider object ID`,hint:`Copy the matching product or price ID from the provider dashboard. The application verifies it before saving the mapping.`,"persistent-hint":``,disabled:__props.managementDisabled},null,8,[`modelValue`,`disabled`]),createVNode(VBtn,{height:`48`,variant:`tonal`,disabled:__props.managementDisabled||!/^[A-Za-z0-9_-]{1,200}$/.test(recoveryProviderId.value),onClick:_cache[2]||(_cache[2]=$event=>recoveryOpen.value=true)},{default:withCtx(()=>[..._cache[18]||(_cache[18]=[createTextVNode(`Review recovery`,-1)])]),_:1},8,[`disabled`]),_cache[20]||(_cache[20]=createBaseVNode(`p`,null,`If no matching object exists, use the application's authorized administrator tools to investigate. This screen cannot prove that a timed-out write never completed.`,-1))])):createCommentVNode(``,true),__props.management.review.drift.length?(openBlock(),createElementBlock(`ul`,_hoisted_14$1,[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.management.review.drift,item=>{return openBlock(),createElementBlock(`li`,{key:item.planId+item.reason},toDisplayString(item.planId)+`: `+toDisplayString(item.reason),1)}),128))])):createCommentVNode(``,true),__props.management.review.changes.length?(openBlock(),createElementBlock(`ul`,_hoisted_15$1,[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.management.review.changes,item=>{return openBlock(),createElementBlock(`li`,{key:item.planId+item.action},toDisplayString(item.planId)+`: `+toDisplayString(item.action===`create-product`?`Create product`:item.action===`rename-product`?`Rename product`:`Create recurring price`)+` — `+toDisplayString(item.name||`${item.amount} ${item.currency} smallest units / ${item.interval}`),1)}),128))])):(openBlock(),createElementBlock(`p`,_hoisted_16$1,`No product or price changes are needed.`)),__props.management.review.removed.length?(openBlock(),createElementBlock(`p`,_hoisted_17$1,`Plans absent from this configuration: `+toDisplayString(__props.management.review.removed.join(`, `))+`. Their provider records and subscriptions will remain; resolve existing subscribers in the application.`,1)):createCommentVNode(``,true),createVNode(VBtn,{height:`48`,color:`primary`,class:`mt-3`,disabled:__props.managementDisabled||!__props.management.review.changes.length||__props.management.review.pending||Boolean(__props.management.review.drift.length),onClick:_cache[3]||(_cache[3]=$event=>publishOpen.value=true)},{default:withCtx(()=>[..._cache[21]||(_cache[21]=[createTextVNode(`Review publication`,-1)])]),_:1},8,[`disabled`])],64)):createCommentVNode(``,true)]),createVNode(VSheet,{tag:`section`,"aria-label":`Billing history`,class:`mb-6`},{default:withCtx(()=>[_cache[26]||(_cache[26]=createBaseVNode(`p`,{class:`text-body-medium mb-4`},`Inspect one application's billing account. Use its user or organization billing ID, not a provider customer ID. Your application controls access to these records.`,-1)),createVNode(VTextField,{modelValue:historySubject.value,"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>historySubject.value=$event),label:`Application billing account ID`,disabled:__props.managementDisabled,"error-messages":historySubjectError.value},null,8,[`modelValue`,`disabled`,`error-messages`]),createVNode(VSelect,{modelValue:historyCollection.value,"onUpdate:modelValue":_cache[5]||(_cache[5]=$event=>historyCollection.value=$event),label:`Billing records`,items:[{title:`Invoices and transactions`,value:`transactions`},{title:`Subscriptions`,value:`subscriptions`}],disabled:__props.managementDisabled},null,8,[`modelValue`,`disabled`]),(openBlock(true),createElementBlock(Fragment,null,renderList(payments.value.environments,(item,environment)=>{return openBlock(),createElementBlock(Fragment,{key:`history-${environment}`},[item.integrationId===__props.integrationId?(openBlock(),createBlock(VBtn,{key:0,height:`48`,variant:`tonal`,class:`mr-2 mb-4`,disabled:__props.managementDisabled||!historySubject.value.trim()||Boolean(historySubjectError.value),onClick:$event=>emit(`manage`,{operation:`payments-history`,paymentEnvironment:environment,subjectId:historySubject.value,collection:historyCollection.value})},{default:withCtx(()=>[createTextVNode(`View `+toDisplayString(environment)+` billing history`,1)]),_:2},1032,[`disabled`,`onClick`])):createCommentVNode(``,true)],64)}),128)),createVNode(VSheet,{"min-height":`240`,"aria-live":`polite`,"aria-busy":__props.managementLoading},{default:withCtx(()=>[__props.managementLoading?(openBlock(),createBlock(VSkeletonLoader,{key:0,type:`list-item-three-line@3`,"aria-label":`Loading payment information`})):__props.managementOperation===`payments-history`&&__props.managementError?(openBlock(),createElementBlock(`div`,_hoisted_18$1,[..._cache[24]||(_cache[24]=[createBaseVNode(`p`,{class:`text-body-medium mb-2`},`Billing history could not load. Check the application's payment command and provider access, then use View billing history to retry.`,-1)])])):history.value?(openBlock(),createElementBlock(Fragment,{key:2},[createBaseVNode(`p`,_hoisted_19$1,toDisplayString(history.value.providerAccountId)+` · `+toDisplayString(history.value.paymentEnvironment)+` · `+toDisplayString(history.value.subjectId),1),!history.value.items.length?(openBlock(),createElementBlock(`p`,_hoisted_20$1,`No billing records found for this account.`)):(openBlock(),createBlock(VList,{key:1,"aria-label":`Billing records`,lines:`three`,"bg-color":`transparent`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(history.value.items,item=>{return openBlock(),createBlock(VListItem,{key:item.id},{default:withCtx(()=>[createVNode(VListItemTitle,{class:`text-wrap`},{default:withCtx(()=>[createTextVNode(toDisplayString(item.kind)+` · `+toDisplayString(item.id),1)]),_:2},1024),createVNode(VListItemSubtitle,{class:`text-wrap`},{default:withCtx(()=>[createTextVNode(toDisplayString(item.status)+` · `+toDisplayString(item.createdAt),1)]),_:2},1024),item.kind!==`subscription`?(openBlock(),createElementBlock(`p`,_hoisted_21$1,toDisplayString(item.currency)+` · Total: `+toDisplayString(item.totalMinor??`Unknown`)+` · Paid: `+toDisplayString(item.paidMinor??`Unknown`)+` (smallest currency units)`,1)):createCommentVNode(``,true)]),_:2},1024)}),128))]),_:1})),history.value.nextCursor?(openBlock(),createBlock(VBtn,{key:2,height:`48`,variant:`text`,disabled:__props.managementDisabled,onClick:_cache[6]||(_cache[6]=$event=>emit(`manage`,{operation:`payments-history`,paymentEnvironment:history.value.paymentEnvironment,subjectId:historySubject.value,collection:historyCollection.value,after:history.value.nextCursor}))},{default:withCtx(()=>[..._cache[25]||(_cache[25]=[createTextVNode(`Next billing page`,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true)],64)):(openBlock(),createElementBlock(`p`,_hoisted_22$1,`Select a billing account and load its records. Viewing history does not change subscriptions or charge customers.`))]),_:1},8,[`aria-busy`])]),_:1}),createVNode(VDialog,{modelValue:recoveryOpen.value,"onUpdate:modelValue":_cache[8]||(_cache[8]=$event=>recoveryOpen.value=$event),"max-width":`560`},{default:withCtx(()=>[createVNode(VCard,{title:`Recover provider mapping?`},{default:withCtx(()=>[createVNode(VCardText,null,{default:withCtx(()=>[createTextVNode(`Account `+toDisplayString(__props.management?.providerAccountId)+` · `+toDisplayString(__props.management?.paymentEnvironment)+`. Verify and attach `+toDisplayString(recoveryProviderId.value)+` to the pending `+toDisplayString(__props.management?.review?.pendingOperation?.action)+` for `+toDisplayString(__props.management?.review?.pendingOperation?.planId)+`. This updates the app's mapping and does not create a provider object.`,1)]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VBtn,{height:`48`,onClick:_cache[7]||(_cache[7]=$event=>recoveryOpen.value=false)},{default:withCtx(()=>[..._cache[27]||(_cache[27]=[createTextVNode(`Cancel`,-1)])]),_:1}),createVNode(VBtn,{height:`48`,disabled:__props.managementDisabled,onClick:recoverCatalogue},{default:withCtx(()=>[..._cache[28]||(_cache[28]=[createTextVNode(`Recover mapping`,-1)])]),_:1},8,[`disabled`])]),_:1})]),_:1})]),_:1},8,[`modelValue`]),createVNode(VDialog,{modelValue:publishOpen.value,"onUpdate:modelValue":_cache[10]||(_cache[10]=$event=>publishOpen.value=$event),"max-width":`560`},{default:withCtx(()=>[createVNode(VCard,{title:`Publish payment catalogue?`},{default:withCtx(()=>[createVNode(VCardText,null,{default:withCtx(()=>[createTextVNode(`Apply the listed changes to account `+toDisplayString(__props.management?.providerAccountId)+` in `+toDisplayString(__props.management?.paymentEnvironment)+`. Existing provider prices are retained. An interrupted request may have completed remotely; inspect its result before retrying.`,1)]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VBtn,{height:`48`,onClick:_cache[9]||(_cache[9]=$event=>publishOpen.value=false)},{default:withCtx(()=>[..._cache[29]||(_cache[29]=[createTextVNode(`Cancel`,-1)])]),_:1}),createVNode(VBtn,{height:`48`,color:`primary`,disabled:__props.managementDisabled,onClick:publishCatalogue},{default:withCtx(()=>[..._cache[30]||(_cache[30]=[createTextVNode(`Publish catalogue`,-1)])]),_:1},8,[`disabled`])]),_:1})]),_:1})]),_:1},8,[`modelValue`]),_cache[32]||(_cache[32]=createBaseVNode(`h4`,{class:`text-title-small mb-3`},`Recurring plans`,-1)),_cache[33]||(_cache[33]=createBaseVNode(`p`,null,`Prices use the currency's smallest unit: USD 1200 means $12.00. Renewal credits expire at the end of the paid period. Features are stable names enforced by your app.`,-1)),(openBlock(true),createElementBlock(Fragment,null,renderList(payments.value.plans,(item,id)=>{return openBlock(),createElementBlock(`section`,{key:id,"aria-label":`Payment plan ${id}`,class:`my-4`},[createBaseVNode(`h5`,_hoisted_24$1,toDisplayString(id),1),createVNode(VTextField,{"model-value":item.name,label:`Plan name`,disabled:__props.disabled,"error-messages":errors(`plans/${id}/name`),"onUpdate:modelValue":$event=>plan(id,`name`,$event)},null,8,[`model-value`,`disabled`,`error-messages`,`onUpdate:modelValue`]),createVNode(VRow,null,{default:withCtx(()=>[createVNode(VCol,{cols:`12`,sm:`4`},{default:withCtx(()=>[createVNode(VTextField,{"model-value":item.amount,type:`number`,min:`1`,step:`1`,label:`Amount in smallest currency unit`,disabled:__props.disabled,"error-messages":errors(`plans/${id}/amount`),"onUpdate:modelValue":$event=>plan(id,`amount`,$event===``?null:Number($event))},null,8,[`model-value`,`disabled`,`error-messages`,`onUpdate:modelValue`])]),_:2},1024),createVNode(VCol,{cols:`12`,sm:`4`},{default:withCtx(()=>[createVNode(VTextField,{"model-value":item.currency,label:`Currency code`,disabled:__props.disabled,"error-messages":errors(`plans/${id}/currency`),"onUpdate:modelValue":$event=>plan(id,`currency`,String($event||``).toUpperCase())},null,8,[`model-value`,`disabled`,`error-messages`,`onUpdate:modelValue`])]),_:2},1024),createVNode(VCol,{cols:`12`,sm:`4`},{default:withCtx(()=>[createVNode(VSelect,{"model-value":item.interval,items:[`month`,`year`],label:`Billing interval`,disabled:__props.disabled,"onUpdate:modelValue":$event=>plan(id,`interval`,$event)},null,8,[`model-value`,`disabled`,`onUpdate:modelValue`])]),_:2},1024)]),_:2},1024),createVNode(VCombobox,{"model-value":item.features,label:`Included feature names`,multiple:``,chips:``,disabled:__props.disabled,"error-messages":errors(`plans/${id}/features`),"onUpdate:modelValue":$event=>plan(id,`features`,$event)},null,8,[`model-value`,`disabled`,`error-messages`,`onUpdate:modelValue`]),createVNode(VTextField,{"model-value":item.renewalCredits,label:`Credits per paid period`,type:`number`,min:`0`,step:`1`,"persistent-hint":``,hint:`Zero means no usage credits. Cancellation does not claw back credits before their expiry.`,disabled:__props.disabled,"error-messages":errors(`plans/${id}/renewalCredits`),"onUpdate:modelValue":$event=>plan(id,`renewalCredits`,$event===``?null:Number($event))},null,8,[`model-value`,`disabled`,`error-messages`,`onUpdate:modelValue`])],8,_hoisted_23$1)}),128)),createVNode(VTextField,{modelValue:planId.value,"onUpdate:modelValue":_cache[11]||(_cache[11]=$event=>planId.value=$event),label:`New stable plan ID`,placeholder:`pro`,"error-messages":planIdError.value,disabled:__props.disabled,"persistent-hint":``,hint:`Changing an existing logical ID would create a different plan. Keep IDs stable for existing subscribers.`},null,8,[`modelValue`,`error-messages`,`disabled`]),createVNode(VBtn,{height:`48`,variant:`outlined`,disabled:__props.disabled||!planId.value||Boolean(planIdError.value),onClick:addPlan},{default:withCtx(()=>[..._cache[31]||(_cache[31]=[createTextVNode(`Add plan`,-1)])]),_:1},8,[`disabled`]),_cache[34]||(_cache[34]=createBaseVNode(`p`,{class:`mt-4`},`Save using this page's Save configuration action. The app still needs its payment implementation and a reviewed catalogue publication before checkout can use these plans.`,-1))],64)):createCommentVNode(``,true)])}}};var application_integration_setup_default=`# Application integration setup
|
|
12
|
+
`)||``,nonPolitical:p.nonPolitical===true}},{immediate:true});const localChanges=computed(()=>{try{return JSON.stringify(plan())!==JSON.stringify(validateGoogleAdsSearchPlan(saved.value))}catch{return true}});const blocked=computed(()=>props.managementDisabled||props.loading);const planBlocked=computed(()=>blocked.value||localChanges.value||!saved.value);watch(()=>props.result,value=>{confirm.value=``;trackingConfirmed.value=false;billingConfirmed.value=false;if(value?.operation===`ads-discover`){discovery.value=value.data;if(value.data.account&&String(value.data.account.id)===draft.value.customerId)draft.value.currency=value.data.account.currencyCode}if(value?.operation===`ads-targets`)targets.value=value.data;if(value?.operation===`ads-create`)campaignId.value=value.data.campaignId});watch(()=>draft.value.customerId,()=>{discovery.value=null;targets.value=null;confirm.value=``});watch([()=>props.managementDisabled,localChanges,campaignId],()=>{confirm.value=``;trackingConfirmed.value=false;billingConfirmed.value=false});function manage(operation,ads={}){if(!blocked.value)emit(`manage`,{operation,ads})}function apply(){if(props.disabled)return;try{const next=plan();formError.value=``;emit(`update:modelValue`,{...props.modelValue,extensions:{...props.modelValue.extensions,googleAdsSearch:{...props.modelValue.extensions?.googleAdsSearch,[props.integrationId]:next}}})}catch(error){formError.value=error.message||`Complete the Search plan fields.`}}const accountValid=computed(()=>/^[0-9]{10}$/.test(draft.value.customerId));const campaignValid=computed(()=>/^[0-9]{1,20}$/.test(campaignId.value));const preview=computed(()=>result.value?.operation===`ads-preview`?result.value.data:null);const inspected=computed(()=>result.value?.operation===`ads-campaign`&&String(result.value.data.campaign?.id)===campaignId.value?result.value.data:null);function performConfirmed(){const action=confirm.value;confirm.value=``;if(action===`conversion`&&accountValid.value&&goalName.value.trim())manage(`ads-conversion`,{customerId:draft.value.customerId,name:goalName.value.trim()});if(action===`create`&&!planBlocked.value&&preview.value)manage(`ads-create`,{reviewId:preview.value.reviewId});if(action===`launch`&&!planBlocked.value&&inspected.value&&trackingConfirmed.value&&billingConfirmed.value)manage(`ads-launch`,{campaignId:campaignId.value,reviewId:inspected.value.reviewId,trackingConfirmed:true,billingConfirmed:true});if(action===`pause`&&!planBlocked.value&&campaignValid.value)manage(`ads-pause`,{campaignId:campaignId.value})}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1$3,[_cache[59]||(_cache[59]=createBaseVNode(`h3`,{class:`text-title-medium`},`Google Ads Search campaigns`,-1)),_cache[60]||(_cache[60]=createBaseVNode(`p`,{class:`mb-4`},`Use this project's connected Google account to prepare a Search campaign in an existing Ads account. Google bills the account directly. Creating a campaign here leaves it paused; launching requires a separate review.`,-1)),createVNode(VAlert,{type:`info`,variant:`tonal`,class:`mb-4`},{default:withCtx(()=>[..._cache[31]||(_cache[31]=[createTextVNode(`Save the connection and connect Google first. Your application must implement the advertising setup command. These controls use the development application's credentials; they can still affect a real Google Ads account.`,-1)])]),_:1}),__props.canPrepare?(openBlock(),createBlock(VBtn,{key:0,height:`48`,variant:`tonal`,class:`mb-4`,disabled:blocked.value,onClick:_cache[0]||(_cache[0]=$event=>emit(`prepare`))},{default:withCtx(()=>[..._cache[32]||(_cache[32]=[createTextVNode(`Prepare Search implementation request`,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true),__props.managementDisabled?(openBlock(),createElementBlock(`p`,_hoisted_2$3,`Save pending configuration changes and use an active owner session to run account operations. Deployed-environment advertising management is not available here.`)):createCommentVNode(``,true),__props.loading?(openBlock(),createBlock(VProgressLinear,{key:2,indeterminate:``,"aria-label":`Loading Google Ads`,class:`my-3`})):createCommentVNode(``,true),result.value?.status===`unconfigured`||props.result?.status===`unconfigured`?(openBlock(),createBlock(VAlert,{key:3,type:`info`,variant:`tonal`},{default:withCtx(()=>[..._cache[33]||(_cache[33]=[createTextVNode(`Your application has not declared its advertising setup command. Use Prepare Search implementation request, then save the application implementation before running these operations.`,-1)])]),_:1})):createCommentVNode(``,true),__props.error?(openBlock(),createBlock(VAlert,{key:4,type:`error`,variant:`tonal`,class:`my-3`,role:`alert`},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.error),1)]),_:1})):createCommentVNode(``,true),createVNode(VExpansionPanels,{class:`my-4`},{default:withCtx(()=>[createVNode(VExpansionPanel,{title:`1. Choose an existing account and conversion goal`},{default:withCtx(()=>[createVNode(VExpansionPanelText,null,{default:withCtx(()=>[_cache[40]||(_cache[40]=createBaseVNode(`p`,null,`Find the 10-digit customer ID in Google Ads' account selector and remove its hyphens. If access is through a manager, save that manager's ID in the connection settings first and reconnect if requested.`,-1)),createVNode(VBtn,{height:`48`,variant:`outlined`,disabled:blocked.value,onClick:_cache[1]||(_cache[1]=$event=>manage(`ads-discover`))},{default:withCtx(()=>[..._cache[34]||(_cache[34]=[createTextVNode(`List accessible accounts`,-1)])]),_:1},8,[`disabled`]),discovery.value?.accounts?(openBlock(),createElementBlock(`p`,_hoisted_3$2,`Directly accessible accounts: `+toDisplayString(discovery.value.accounts.join(`, `)||`None returned. Ask the Ads account administrator to grant access.`),1)):createCommentVNode(``,true),createVNode(VTextField,{modelValue:draft.value.customerId,"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>draft.value.customerId=$event),label:`Ads customer ID`,disabled:__props.disabled,"persistent-hint":``,hint:`Use the client account that owns the campaign, not its manager.`},null,8,[`modelValue`,`disabled`]),createVNode(VBtn,{height:`48`,variant:`tonal`,disabled:blocked.value||!accountValid.value,onClick:_cache[3]||(_cache[3]=$event=>manage(`ads-discover`,{customerId:draft.value.customerId}))},{default:withCtx(()=>[..._cache[35]||(_cache[35]=[createTextVNode(`Load account and goals`,-1)])]),_:1},8,[`disabled`]),discovery.value?.account?(openBlock(),createElementBlock(`p`,_hoisted_4$2,toDisplayString(discovery.value.account.descriptiveName)+` · `+toDisplayString(discovery.value.account.currencyCode)+` · `+toDisplayString(discovery.value.account.timeZone)+` · `+toDisplayString(discovery.value.account.status)+` `+toDisplayString(discovery.value.account.manager?`(Manager: choose a client below)`:``),1)):createCommentVNode(``,true),discovery.value?.clients?.length?(openBlock(),createBlock(VList,{key:2,"aria-label":`Manager clients`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(discovery.value.clients,row=>{return openBlock(),createBlock(VListItem,{key:row.customerClient.id,title:`${row.customerClient.descriptiveName||``} — ${row.customerClient.id}`},null,8,[`title`])}),128))]),_:1})):createCommentVNode(``,true),createVNode(VSelect,{modelValue:draft.value.conversionActionId,"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>draft.value.conversionActionId=$event),items:(discovery.value?.conversions||[]).map(row=>({title:`${row.conversionAction.name} (${row.conversionAction.id})`,value:String(row.conversionAction.id)})),label:`Website conversion goal`,disabled:__props.disabled,"persistent-hint":``,hint:`Enabled website goals only. Load the account to select one.`},null,8,[`modelValue`,`items`,`disabled`]),createVNode(VTextField,{modelValue:goalName.value,"onUpdate:modelValue":_cache[5]||(_cache[5]=$event=>goalName.value=$event),label:`New website lead goal name`,disabled:blocked.value,maxlength:`100`},null,8,[`modelValue`,`disabled`]),createVNode(VBtn,{height:`48`,variant:`outlined`,disabled:blocked.value||!accountValid.value||!goalName.value.trim(),onClick:_cache[6]||(_cache[6]=$event=>confirm.value=`conversion`)},{default:withCtx(()=>[..._cache[36]||(_cache[36]=[createTextVNode(`Review new conversion goal`,-1)])]),_:1},8,[`disabled`]),_cache[41]||(_cache[41]=createBaseVNode(`p`,{class:`mt-3`},`Creating a goal adds an enabled website lead conversion counted once per click. Reload account and goals afterwards. This does not install tracking in your site.`,-1)),(openBlock(true),createElementBlock(Fragment,null,renderList(discovery.value?.conversions||[],row=>{return openBlock(),createElementBlock(Fragment,{key:row.conversionAction.id},[String(row.conversionAction.id)===draft.value.conversionActionId?(openBlock(),createElementBlock(`section`,_hoisted_5$2,[_cache[37]||(_cache[37]=createBaseVNode(`h4`,{class:`text-title-small mt-4`},`Install and verify conversion tracking`,-1)),_cache[38]||(_cache[38]=createBaseVNode(`p`,null,`In Google Ads, open Goals → Conversions → Summary, select this goal, then open Tag setup. Install the Google tag through your existing consent/tag manager, and fire the event only after a successful lead submission. Do not add a second copy of an existing tag. Use Tag Assistant to verify it before launch.`,-1)),_cache[39]||(_cache[39]=createBaseVNode(`p`,null,`Your app's framework owns this code. Use Prepare Search implementation request to add the saved requirements to your assistant draft; review before sending.`,-1)),(openBlock(true),createElementBlock(Fragment,null,renderList(row.conversionAction.tagSnippets||[],(snippet,index)=>{return openBlock(),createBlock(VTextarea,{key:index,"model-value":[snippet.globalSiteTag,snippet.eventSnippet].filter(Boolean).join(`
|
|
13
|
+
`),label:`Google tag snippet ${index+1} (display only)`,readonly:``,rows:`5`},null,8,[`model-value`,`label`])}),128))])):createCommentVNode(``,true)],64)}),128)),_cache[42]||(_cache[42]=createBaseVNode(`a`,{href:`https://support.google.com/google-ads/answer/6095821`,target:`_blank`,rel:`noopener noreferrer`},`Google website conversion setup`,-1))]),_:1})]),_:1}),createVNode(VExpansionPanel,{title:`2. Prepare the Search campaign`},{default:withCtx(()=>[createVNode(VExpansionPanelText,null,{default:withCtx(()=>[_cache[45]||(_cache[45]=createBaseVNode(`p`,null,`One ad group, phrase-match keywords, a responsive Search ad, manual maximum CPC, Google Search only, and location presence targeting. Political advertising is not supported by this recipe.`,-1)),createVNode(VTextField,{modelValue:draft.value.name,"onUpdate:modelValue":_cache[7]||(_cache[7]=$event=>draft.value.name=$event),label:`Campaign name`,maxlength:`100`,disabled:__props.disabled},null,8,[`modelValue`,`disabled`]),createVNode(VTextField,{modelValue:draft.value.finalUrl,"onUpdate:modelValue":_cache[8]||(_cache[8]=$event=>draft.value.finalUrl=$event),label:`Public HTTPS landing page`,disabled:__props.disabled},null,8,[`modelValue`,`disabled`]),createVNode(VRow,null,{default:withCtx(()=>[createVNode(VCol,{cols:`12`,sm:`4`},{default:withCtx(()=>[createVNode(VTextField,{modelValue:draft.value.currency,"onUpdate:modelValue":_cache[9]||(_cache[9]=$event=>draft.value.currency=$event),label:`Account currency`,readonly:``,hint:`Loaded from Google; match the account before review.`,"persistent-hint":``},null,8,[`modelValue`])]),_:1}),createVNode(VCol,{cols:`12`,sm:`4`},{default:withCtx(()=>[createVNode(VTextField,{modelValue:draft.value.budget,"onUpdate:modelValue":_cache[10]||(_cache[10]=$event=>draft.value.budget=$event),label:`Average daily budget`,inputmode:`decimal`,suffix:draft.value.currency,disabled:__props.disabled},null,8,[`modelValue`,`suffix`,`disabled`])]),_:1}),createVNode(VCol,{cols:`12`,sm:`4`},{default:withCtx(()=>[createVNode(VTextField,{modelValue:draft.value.cpc,"onUpdate:modelValue":_cache[11]||(_cache[11]=$event=>draft.value.cpc=$event),label:`Maximum cost per click`,inputmode:`decimal`,suffix:draft.value.currency,disabled:__props.disabled},null,8,[`modelValue`,`suffix`,`disabled`])]),_:1})]),_:1}),_cache[46]||(_cache[46]=createBaseVNode(`p`,null,`The daily budget is an average, not a hard daily spending cap. Review Google's billing rules and your account's limits before launch.`,-1)),createVNode(VTextField,{modelValue:locationName.value,"onUpdate:modelValue":_cache[12]||(_cache[12]=$event=>locationName.value=$event),label:`Find a target location`,disabled:blocked.value},null,8,[`modelValue`,`disabled`]),createVNode(VBtn,{height:`48`,variant:`outlined`,disabled:blocked.value||!accountValid.value||locationName.value.trim().length<2,onClick:_cache[13]||(_cache[13]=$event=>manage(`ads-targets`,{customerId:draft.value.customerId,name:locationName.value.trim()}))},{default:withCtx(()=>[..._cache[43]||(_cache[43]=[createTextVNode(`Find locations and languages`,-1)])]),_:1},8,[`disabled`]),createVNode(VCombobox,{modelValue:draft.value.locationIds,"onUpdate:modelValue":_cache[14]||(_cache[14]=$event=>draft.value.locationIds=$event),items:(targets.value?.locations||[]).map(row=>({title:row.geoTargetConstant.canonicalName,value:String(row.geoTargetConstant.id)})),"return-object":false,label:`Target location IDs`,multiple:``,chips:``,disabled:__props.disabled,hint:`Choose search results, or enter known Google geo target IDs. At least one, at most ten.`,"persistent-hint":``},null,8,[`modelValue`,`items`,`disabled`]),createVNode(VCombobox,{modelValue:draft.value.languageId,"onUpdate:modelValue":_cache[15]||(_cache[15]=$event=>draft.value.languageId=$event),items:(targets.value?.languages||[]).map(row=>({title:row.languageConstant.name,value:String(row.languageConstant.id)})),"return-object":false,label:`Target language ID`,disabled:__props.disabled},null,8,[`modelValue`,`items`,`disabled`]),createVNode(VTextarea,{modelValue:draft.value.keywords,"onUpdate:modelValue":_cache[16]||(_cache[16]=$event=>draft.value.keywords=$event),label:`Phrase keywords — one per line`,disabled:__props.disabled,hint:`1–20 keywords, at most 80 characters each.`,"persistent-hint":``},null,8,[`modelValue`,`disabled`]),createVNode(VTextarea,{modelValue:draft.value.headlines,"onUpdate:modelValue":_cache[17]||(_cache[17]=$event=>draft.value.headlines=$event),label:`Ad headlines — one per line`,disabled:__props.disabled,hint:`3–15 headlines, at most 30 characters each.`,"persistent-hint":``},null,8,[`modelValue`,`disabled`]),createVNode(VTextarea,{modelValue:draft.value.descriptions,"onUpdate:modelValue":_cache[18]||(_cache[18]=$event=>draft.value.descriptions=$event),label:`Ad descriptions — one per line`,disabled:__props.disabled,hint:`2–4 descriptions, at most 90 characters each.`,"persistent-hint":``},null,8,[`modelValue`,`disabled`]),createVNode(VCheckbox,{modelValue:draft.value.nonPolitical,"onUpdate:modelValue":_cache[19]||(_cache[19]=$event=>draft.value.nonPolitical=$event),label:`This campaign does not contain EU political advertising`,disabled:__props.disabled},null,8,[`modelValue`,`disabled`]),formError.value?(openBlock(),createBlock(VAlert,{key:0,type:`error`,variant:`tonal`,role:`alert`},{default:withCtx(()=>[createTextVNode(toDisplayString(formError.value),1)]),_:1})):createCommentVNode(``,true),createVNode(VBtn,{height:`48`,color:`primary`,disabled:__props.disabled||!localChanges.value,onClick:apply},{default:withCtx(()=>[..._cache[44]||(_cache[44]=[createTextVNode(`Apply Search plan to configuration`,-1)])]),_:1},8,[`disabled`]),_cache[47]||(_cache[47]=createBaseVNode(`p`,{class:`mt-3`},`Then use Save configuration on this page. Operations below always use the saved file. Unapplied form edits are not saved.`,-1))]),_:1})]),_:1})]),_:1}),createVNode(VBtn,{height:`48`,variant:`tonal`,disabled:planBlocked.value,onClick:_cache[20]||(_cache[20]=$event=>manage(`ads-preview`))},{default:withCtx(()=>[..._cache[48]||(_cache[48]=[createTextVNode(`Validate and review saved plan`,-1)])]),_:1},8,[`disabled`]),preview.value?(openBlock(),createElementBlock(`section`,_hoisted_6$2,[createBaseVNode(`p`,null,toDisplayString(preview.value.account?.descriptiveName)+` · `+toDisplayString(preview.value.plan.customerId)+` · `+toDisplayString(preview.value.plan.currency)+`. Google accepted validation; policy approval, tracking and billing readiness are not established.`,1),createBaseVNode(`p`,null,toDisplayString(preview.value.plan.name)+` · Average daily budget `+toDisplayString(units(preview.value.plan.dailyBudgetMicros))+` `+toDisplayString(preview.value.plan.currency)+` · Maximum CPC `+toDisplayString(units(preview.value.plan.maxCpcMicros))+` `+toDisplayString(preview.value.plan.currency),1),createBaseVNode(`p`,null,`Goal: `+toDisplayString(preview.value.conversion?.name)+`. Landing page: `+toDisplayString(preview.value.plan.finalUrl),1),createVNode(VTextarea,{"model-value":JSON.stringify(preview.value.plan,null,2),label:`Complete reviewed Search plan`,readonly:``,rows:`8`},null,8,[`model-value`]),createVNode(VBtn,{height:`48`,color:`primary`,disabled:planBlocked.value,onClick:_cache[21]||(_cache[21]=$event=>confirm.value=`create`)},{default:withCtx(()=>[..._cache[49]||(_cache[49]=[createTextVNode(`Review paused campaign creation`,-1)])]),_:1},8,[`disabled`])])):createCommentVNode(``,true),result.value?.operation===`ads-create`?(openBlock(),createElementBlock(`p`,_hoisted_7$2,`Campaign `+toDisplayString(result.value.data.campaignId)+` created PAUSED. It will not serve until enabled.`,1)):createCommentVNode(``,true),result.value&&[`ads-launch`,`ads-pause`,`ads-conversion`].includes(result.value.operation)?(openBlock(),createElementBlock(`p`,_hoisted_8$2,`Google accepted the request. Reload account or inspect the campaign to verify its current state.`)):createCommentVNode(``,true),createBaseVNode(`section`,_hoisted_9$2,[_cache[55]||(_cache[55]=createBaseVNode(`h4`,{class:`text-title-small`},`3. Inspect, launch or pause`,-1)),createBaseVNode(`p`,null,`Saved account: `+toDisplayString(saved.value?.customerId||`Apply and save a plan first`)+`. Choose the returned campaign ID, or find it in Google Ads. Larger campaigns may require review in Google Ads.`,1),discovery.value?.campaigns?.length?(openBlock(),createBlock(VList,{key:0,"aria-label":`Existing Search campaigns`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(discovery.value.campaigns,row=>{return openBlock(),createBlock(VListItem,{key:row.campaign.id,title:`${row.campaign.name} — ${row.campaign.id} — ${row.campaign.status}`},null,8,[`title`])}),128))]),_:1})):createCommentVNode(``,true),createVNode(VTextField,{modelValue:campaignId.value,"onUpdate:modelValue":_cache[22]||(_cache[22]=$event=>campaignId.value=$event),label:`Campaign ID to inspect or pause`,disabled:blocked.value},null,8,[`modelValue`,`disabled`]),createVNode(VBtn,{height:`48`,variant:`outlined`,disabled:planBlocked.value||!campaignValid.value,onClick:_cache[23]||(_cache[23]=$event=>manage(`ads-campaign`,{campaignId:campaignId.value}))},{default:withCtx(()=>[..._cache[50]||(_cache[50]=[createTextVNode(`Inspect current campaign`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{height:`48`,variant:`outlined`,class:`ml-2`,disabled:planBlocked.value||!campaignValid.value,onClick:_cache[24]||(_cache[24]=$event=>confirm.value=`pause`)},{default:withCtx(()=>[..._cache[51]||(_cache[51]=[createTextVNode(`Review pause`,-1)])]),_:1},8,[`disabled`]),inspected.value?(openBlock(),createElementBlock(Fragment,{key:1},[createVNode(VTextarea,{"model-value":JSON.stringify(inspected.value,(key,value)=>key===`reviewId`?void 0:value,2),label:`Current Google campaign, ads, targets and goals`,readonly:``,rows:`10`,class:`mt-4`},null,8,[`model-value`]),_cache[53]||(_cache[53]=createBaseVNode(`p`,null,`Review the complete current values above, including budget, bid, destinations, assets, goals and Google's policy status. These are live account values, not a promise of approval.`,-1)),createVNode(VCheckbox,{modelValue:trackingConfirmed.value,"onUpdate:modelValue":_cache[25]||(_cache[25]=$event=>trackingConfirmed.value=$event),label:`I verified the conversion tag and successful lead event on the landing site`,disabled:planBlocked.value},null,8,[`modelValue`,`disabled`]),createVNode(VCheckbox,{modelValue:billingConfirmed.value,"onUpdate:modelValue":_cache[26]||(_cache[26]=$event=>billingConfirmed.value=$event),label:`I verified account billing, advertiser requirements and the website, and approve spending this budget`,disabled:planBlocked.value},null,8,[`modelValue`,`disabled`]),createVNode(VBtn,{height:`48`,color:`primary`,disabled:planBlocked.value||inspected.value.campaign.status!==`PAUSED`||!trackingConfirmed.value||!billingConfirmed.value,onClick:_cache[27]||(_cache[27]=$event=>confirm.value=`launch`)},{default:withCtx(()=>[..._cache[52]||(_cache[52]=[createTextVNode(`Review campaign launch`,-1)])]),_:1},8,[`disabled`])],64)):createCommentVNode(``,true),createVNode(VBtn,{height:`48`,variant:`text`,class:`mt-3`,disabled:planBlocked.value,onClick:_cache[28]||(_cache[28]=$event=>manage(`ads-report`))},{default:withCtx(()=>[..._cache[54]||(_cache[54]=[createTextVNode(`Read last 30 days report`,-1)])]),_:1},8,[`disabled`]),result.value?.operation===`ads-report`?(openBlock(),createBlock(VTextarea,{key:2,"model-value":JSON.stringify(result.value.data,null,2),label:`Search campaign report (costMicros is millionths of account currency)`,readonly:``,rows:`8`},null,8,[`model-value`])):createCommentVNode(``,true),_cache[56]||(_cache[56]=createBaseVNode(`p`,{class:`mt-3`},`Disconnecting Google does not pause running ads. Reports list at most 50 campaigns; use Google Ads for account-wide reporting, billing and campaigns outside this Search recipe.`,-1))]),createVNode(VDialog,{"model-value":Boolean(confirm.value),"max-width":`600`,"onUpdate:modelValue":_cache[30]||(_cache[30]=value=>{if(!value)confirm.value=``})},{default:withCtx(()=>[createVNode(VCard,{title:{conversion:`Create a website conversion goal?`,create:`Create the reviewed campaign paused?`,launch:`Launch campaign and allow spending?`,pause:`Pause campaign?`}[confirm.value]},{default:withCtx(()=>[createVNode(VCardText,null,{default:withCtx(()=>[createBaseVNode(`p`,null,`Account `+toDisplayString(confirm.value===`conversion`?draft.value.customerId:saved.value?.customerId)+` · `+toDisplayString(confirm.value===`conversion`?goalName.value:confirm.value===`create`?preview.value?.plan.name:campaignId.value),1),confirm.value===`launch`?(openBlock(),createElementBlock(`p`,_hoisted_10$2,`Google may begin serving ads and charging this account. The application rechecks the campaign review before enabling it.`)):confirm.value===`create`?(openBlock(),createElementBlock(`p`,_hoisted_11$2,`Create the reviewed budget, campaign, goal association, ad group, keywords and ad together. The campaign starts paused.`)):confirm.value===`pause`?(openBlock(),createElementBlock(`p`,_hoisted_12$2,`Stop this campaign from serving after Google processes the pause. Already incurred charges remain.`)):createCommentVNode(``,true),_cache[57]||(_cache[57]=createBaseVNode(`p`,null,`If a request times out, inspect Google Ads before repeating it: it may already have succeeded.`,-1))]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VBtn,{height:`48`,onClick:_cache[29]||(_cache[29]=$event=>confirm.value=``)},{default:withCtx(()=>[..._cache[58]||(_cache[58]=[createTextVNode(`Cancel`,-1)])]),_:1}),createVNode(VBtn,{height:`48`,color:`primary`,disabled:blocked.value,onClick:performConfirmed},{default:withCtx(()=>[createTextVNode(`Confirm `+toDisplayString(confirm.value),1)]),_:1},8,[`disabled`])]),_:1})]),_:1},8,[`title`])]),_:1},8,[`model-value`])])}}};var application_google_ads_default="# Application-owned Google Ads Search\n\n## Ownership and scope\n\nThe public Vibe64 editor owns the Material 3 preparation/review screens and its\nexisting Integration setup command transport. The generated application owns\nGoogle credentials, OAuth, refresh, account authorization and every Google API\nrequest. No Vibe64 host supplies an Ads registration, credential, gateway or\nbilling service. The Ads account owner pays Google.\n\nJSKIT provides reusable plan validation and Search operations in\n`@jskit-ai/connectors-catalog/shared/google-ads-search` and\n`@jskit-ai/connectors-catalog/server/google-ads-search`. Applications compose\n`createGoogleAdsSearchService` with their existing authorized connection service,\nconfiguration, trusted application context and integration ID. A CLI-only JSKIT\napp can call this service without Vibe64 or an editor command.\n\nEvery other framework implements the same file and command contract through its\nnative Google client or HTTP library. It does not install JSKIT or a Node sidecar.\nThe selected framework's Genesis Stack contains its own executable under\n`Integration setup`; Genesis does not define or execute advertising semantics.\n\n## Portable saved plan\n\nRead `extensions.googleAdsSearch[integrationId]` in `integrations.json`. This is\nseparate from connection settings: changing campaign copy must not invalidate\nOAuth. The associated integration must be `google-ads`, with a project-owned\nregistration and an administrator/shared account connection. Derive its trusted\nconnection owner from application composition, never from a browser-supplied ID.\n\nThe plan has exactly these fields:\n\n- `customerId`: ten digits, no hyphens; active client account, not a manager.\n- `name`: 1–100 plain-text characters.\n- `currency`: three uppercase letters; must match the live account currency.\n- `dailyBudgetMicros`, `maxCpcMicros`: positive integer **strings**, at most 12\n digits. One currency unit is 1,000,000 micros; preserve integer precision.\n- `finalUrl`: public HTTPS landing page, at most 2048 characters, no embedded\n credentials or fragment.\n- `conversionActionId`: numeric ID of an enabled website conversion in this account.\n- `locationIds`: 1–10 numeric Google geo target IDs; `languageId`: numeric Google\n language constant ID. Search results supply labels; never guess IDs from names.\n- `keywords`: 1–20 nonempty plain strings, at most 80 characters each.\n- `headlines`: 3–15 nonempty plain strings, at most 30 characters each.\n- `descriptions`: 2–4 nonempty plain strings, at most 90 characters each.\n- `nonPolitical`: exactly `true`, explicitly confirmed by the operator. This\n recipe does not support political advertising.\n\nThe fixed recipe creates one Search campaign, one non-shared standard budget,\none enabled Search ad group with manual CPC, phrase-match keywords and one\nresponsive Search ad. The campaign starts PAUSED. Enable only Google Search,\nexclude partners/content networks, use positive location PRESENCE targeting,\nand attach only the selected website conversion through a campaign custom goal.\n\n## Existing setup command extension\n\nPreserve the `vibe64.integration-setup.command.v1` stdin/stdout envelope and all\nexisting connection operations. Ads requests contain `operation`, `integrationId`\nand an `ads` object plus the existing protocol/request identity. The declared\napplication command receives credentials through project Env. It must validate\nthe saved file and caller authorization before resolving credentials. These\ncommands manage an advertiser's account, not arbitrary app users' accounts.\n\n| Operation | `ads` input | JSKIT service method | `data` output |\n| --- | --- | --- | --- |\n| `ads-discover` | optional `customerId` | `discover(customerId)` | `accounts` resource names, or `account`, `clients`, `conversions`, `campaigns` |\n| `ads-targets` | `customerId`, `name` | `targets(customerId, name)` | `locations`, `languages` |\n| `ads-conversion` | `customerId`, `name` | `createConversion(ads)` | Google mutation `results` resource names |\n| `ads-preview` | empty | `preview()` | saved `plan`, live `account`, selected `conversion`, `reviewId` |\n| `ads-create` | `reviewId` | `create(reviewId)` | numeric-string `campaignId`, `status: \"PAUSED\"` |\n| `ads-campaign` | `campaignId` | `campaign(campaignId)` | account/campaign/budget, ads, targets, keywords, goals and `reviewId` |\n| `ads-launch` | `campaignId`, `reviewId`, `trackingConfirmed: true`, `billingConfirmed: true` | `launch(ads)` | Google mutation `results` |\n| `ads-pause` | `campaignId` | `pause(campaignId)` | Google mutation `results` |\n| `ads-report` | empty | `report()` | `{ campaigns: [...] }` with campaign and last-30-days metrics |\n\nReturn exactly `{ protocol, requestId, status: \"ads\", operation, data }`, echoing\nthe request identity/operation, with no tokens or diagnostic dumps. Use only the\nselected Google display fields returned by the service. Keep the entire response\nunder 32 KiB. Oversized/unknown results must fail clearly; do not silently truncate\na launch review. The executable is application code, not a public unauthenticated\nendpoint. Native adapters must map the same operations and enforce the same rules.\nThe JSKIT pattern `google-ads-search` provides a dispatch fragment.\n\n## Review, writes and readiness\n\nPreview validates locally, reads the account and selected goal, then calls Google\nAds mutate with `validateOnly: true` and `partialFailure: false`. It does not create\nanything. Bind a deterministic review digest to the trusted context, integration,\nsaved plan and live reviewed values. Before creation, repeat the validation and\ncompare the digest; reject changed plans/accounts. Create the full batch atomically\nwith unique temporary IDs and campaign status PAUSED. Do not automatically retry\na write, including a timeout or a lost response. Inspect Google Ads first.\n\nBefore launch, re-read the campaign, budget, bidding/network/location settings,\nads/landing URLs/policy status, targets, keywords and goal association. Resolve\ncustom goal contents as well. Reject oversized reviews, changes since approval,\nnon-active/manager accounts and campaigns outside this bounded manual-CPC Search\nrecipe. Launch is a separate explicit confirmation with real-spending wording.\nThe digest prevents stale review; it is not authentication or a provider-side\ncompare-and-swap. Another Ads administrator can change a campaign concurrently.\nDo not describe provider validation as policy approval or guaranteed readiness.\nPause is separately confirmed. Disconnecting the integration does not stop ads.\n\nThe operator manually confirms billing/advertiser readiness and tracking. Install\nthe selected website conversion using Google's returned tag snippets or Tag setup\ninstructions. Render snippets as plain text in the editor; never execute them.\nThe app installs the tag through its existing consent/tag-manager owner and fires\nthe conversion only after a successful lead action. Avoid duplicate global tags\nand double-counted submissions. Verify with Tag Assistant before launch; do not\nsend real conversions during code verification.\n\n## Bounds and exclusions\n\nThis first path uses an existing account. It does not create advertiser accounts,\nprovision billing, build Performance Max/Demand Gen campaigns, automatically audit\na website, or attach live provider tools to coding-assistant hosts. Public editor\nmanagement currently uses the development application's command/Env, even when\nthe connected Ads account is real. Deployed-environment Ads management is not\nprovided by this screen. Reports/discovery show bounded lists; Google Ads remains\nthe account-wide management UI. Native app composition and actual Google account\napproval remain required; fixture tests do not establish live provider acceptance.\n\n## Authoritative references\n\n- https://developers.google.com/google-ads/api/docs/campaigns/create-campaigns\n- https://developers.google.com/google-ads/api/docs/mutating/best-practices\n- https://developers.google.com/google-ads/api/docs/conversions/categories\n- https://support.google.com/google-ads/answer/6095821\n- https://docs.lovable.dev/integrations/google-ads\n";var _hoisted_1$2={"aria-label":`Application payments`,class:`mt-6`};var _hoisted_2$2={key:0,role:`status`};var _hoisted_3$1=[`aria-label`];var _hoisted_4$1={class:`text-title-small mb-3`};var _hoisted_5$1={key:2};var _hoisted_6$1=[`href`];var _hoisted_7$1={"aria-label":`Payment catalogue`,class:`mb-6`};var _hoisted_8$1={key:1,"aria-label":`Payment readiness`};var _hoisted_9$1={class:`font-weight-bold mt-3`};var _hoisted_10$1={class:`ml-0`};var _hoisted_11$1={key:2,role:`alert`};var _hoisted_12$1={key:3,role:`status`};var _hoisted_13$1={key:0,"aria-label":`Recover catalogue operation`};var _hoisted_14$1={key:1};var _hoisted_15$1={key:2};var _hoisted_16$1={key:3};var _hoisted_17$1={key:4};var _hoisted_18$1={key:1,role:`status`};var _hoisted_19$1={class:`text-body-small mb-2`};var _hoisted_20$1={key:0,class:`text-body-medium`};var _hoisted_21$1={key:0,class:`text-body-small mt-1`};var _hoisted_22$1={key:3,class:`text-body-medium`};var _hoisted_23$1=[`aria-label`];var _hoisted_24$1={class:`text-title-small mb-2`};var _sfc_main$3={__name:`PaymentConfigurationPanel`,props:{modelValue:{type:Object,required:true},integrationId:{type:String,required:true},disabled:Boolean,applicationPublicUrl:String,management:Object,managementError:String,managementOperation:String,managementLoading:Boolean,managementDisabled:Boolean,canPrepare:Boolean},emits:[`update:modelValue`,`set-env`,`manage`,`prepare`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const paymentSetups=Object.fromEntries(connectorDefinitions.filter(provider=>provider.paymentSetup).map(provider=>[provider.id,provider.paymentSetup]));const payments=computed(()=>props.modelValue.extensions?.payments);const planId=ref(``);const historySubject=ref(``);const historyCollection=ref(`transactions`);const historySubjectError=computed(()=>historySubject.value&&(!historySubject.value.trim()||historySubject.value.length>200||/[\p{Cc}\p{Cf}]/u.test(historySubject.value))?`Enter a valid application billing account ID.`:``);const history=computed(()=>props.management?.status===`payments-history`&&props.management.subjectId===historySubject.value&&props.management.collection===historyCollection.value?props.management:null);watch(()=>props.integrationId,()=>{historySubject.value=``;historyCollection.value=`transactions`});const publishOpen=ref(false);const recoveryOpen=ref(false);const recoveryProviderId=ref(``);watch([()=>props.management,()=>props.managementDisabled,()=>props.integrationId],()=>{publishOpen.value=false;recoveryOpen.value=false;recoveryProviderId.value=``});function publishCatalogue(){const result=props.management;if(props.managementDisabled||!result?.review||result.review.pending||result.review.drift.length)return;publishOpen.value=false;emit(`manage`,{operation:`payments-publish`,paymentEnvironment:result.paymentEnvironment,reviewId:result.review.reviewId})}function recoverCatalogue(){const result=props.management;if(props.managementDisabled||!result?.review?.pending||!/^[A-Za-z0-9_-]{1,200}$/.test(recoveryProviderId.value))return;recoveryOpen.value=false;emit(`manage`,{operation:`payments-recover`,paymentEnvironment:result.paymentEnvironment,reviewId:result.review.reviewId,providerId:recoveryProviderId.value})}const planIdError=computed(()=>!planId.value||/^[a-z][a-z0-9-]{0,99}$/.test(planId.value)&&![`constructor`,`prototype`].includes(planId.value)&&!Object.hasOwn(payments.value?.plans||{},planId.value)?``:`Use a new lowercase plan ID containing letters, numbers and hyphens.`);const validation=computed(()=>{if(!payments.value)return[];try{validatePaymentConfiguration(props.modelValue);return[]}catch(error){return error.fieldErrors||[{path:`payments`,message:error.message}]}});const connections=computed(()=>Object.entries(props.modelValue.integrations).filter(([,value])=>[`stripe`,`paddle`].includes(value.provider)&&value.accountMode===`shared`&&value.authentication.method===`api-key`).map(([value,slot])=>({value,title:`${slot.displayName||slot.provider} (${value})`})));const errors=path=>validation.value.filter(error=>error.path===`extensions.payments/${path}`).map(error=>error.message);const webhookUrl=integrationId=>integrationCallbackUrl(props.applicationPublicUrl,`/integrations/${integrationId}/webhook`);const returnUrl=computed(()=>integrationCallbackUrl(props.applicationPublicUrl,`/billing`));function update(value){if(!props.disabled)emit(`update:modelValue`,{...props.modelValue,extensions:{...props.modelValue.extensions,payments:value}})}function addEnvironment(environment){const existing=payments.value||{version:1,environments:{},plans:{}};update({...existing,environments:{...existing.environments,[environment]:{integrationId:props.integrationId,providerAccountId:``,webhookSecretRef:`env:PAYMENT_${environment.toUpperCase()}_WEBHOOK_SECRET`,returnUrlRef:`env:PAYMENT_${environment.toUpperCase()}_RETURN_URL`}}})}function binding(environment,field,value){update({...payments.value,environments:{...payments.value.environments,[environment]:{...payments.value.environments[environment],[field]:value}}})}function plan(id,field,value){update({...payments.value,plans:{...payments.value.plans,[id]:{...payments.value.plans[id],[field]:value}}})}function addPlan(){if(!planId.value||planIdError.value||!payments.value)return;update({...payments.value,plans:{...payments.value.plans,[planId.value]:{name:``,amount:null,currency:`USD`,interval:`month`,features:[],renewalCredits:0}}});planId.value=``}function setEnv(reference,value,secret){const key=/^env:([A-Z_][A-Z0-9_]*)$/.exec(reference)?.[1];if(key)emit(`set-env`,{key,value,secret})}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1$2,[_cache[35]||(_cache[35]=createBaseVNode(`h3`,{class:`text-title-medium`},`Application payments`,-1)),_cache[36]||(_cache[36]=createBaseVNode(`p`,{class:`mb-4`},`Define this project's recurring plans. Your application owns checkout, subscriptions, feature access and credits. Saving these settings does not charge anyone or change provider products.`,-1)),(openBlock(true),createElementBlock(Fragment,null,renderList([`sandbox`,`live`].filter(value=>!payments.value?.environments?.[value]),environment=>{return openBlock(),createBlock(VBtn,{key:environment,height:`48`,variant:`outlined`,class:`mr-2 mb-4`,disabled:__props.disabled,onClick:$event=>addEnvironment(environment)},{default:withCtx(()=>[createTextVNode(`Configure `+toDisplayString(environment)+` payments`,1)]),_:2},1032,[`disabled`,`onClick`])}),128)),payments.value?(openBlock(),createElementBlock(Fragment,{key:0},[validation.value.length?(openBlock(),createElementBlock(`p`,_hoisted_2$2,`Complete the required payment fields before saving. `+toDisplayString(validation.value[0].message),1)):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(payments.value.environments,(item,environment)=>{return openBlock(),createElementBlock(`section`,{key:environment,"aria-label":`${environment} payment account`,class:`mb-6`},[createBaseVNode(`h4`,_hoisted_4$1,toDisplayString(environment===`live`?`Live account — real payments`:`Sandbox account — test payments`),1),createVNode(VSelect,{"model-value":item.integrationId,items:connections.value,label:`Payment connection`,disabled:__props.disabled,"onUpdate:modelValue":$event=>binding(environment,`integrationId`,$event)},null,8,[`model-value`,`items`,`disabled`,`onUpdate:modelValue`]),createVNode(VTextField,{"model-value":item.providerAccountId,label:`Provider account identity`,"persistent-hint":``,hint:`Stripe: your acct_ account ID from account settings. Paddle: a stable identifier for this merchant account; catalogue access alone cannot verify its legal identity.`,disabled:__props.disabled,"error-messages":errors(`environments/${environment}/providerAccountId`),"onUpdate:modelValue":$event=>binding(environment,`providerAccountId`,$event)},null,8,[`model-value`,`disabled`,`error-messages`,`onUpdate:modelValue`]),__props.modelValue.integrations[item.integrationId]?.provider===`paddle`?(openBlock(),createBlock(VSelect,{key:0,"model-value":item.taxCategory,items:[`digital-goods`,`ebooks`,`implementation-services`,`professional-services`,`saas`,`software-programming-services`,`standard`,`training-services`,`website-hosting`],label:`Paddle product tax category`,"persistent-hint":``,hint:`Choose the category that accurately describes what your app sells.`,"error-messages":errors(`environments/${environment}/taxCategory`),disabled:__props.disabled,"onUpdate:modelValue":$event=>binding(environment,`taxCategory`,$event)},null,8,[`model-value`,`error-messages`,`disabled`,`onUpdate:modelValue`])):createCommentVNode(``,true),__props.modelValue.integrations[item.integrationId]?.provider===`paddle`?(openBlock(),createElementBlock(Fragment,{key:1},[createVNode(VTextField,{"model-value":item.publicClientTokenRef,label:`Paddle public client token Env reference`,placeholder:`env:PADDLE_CLIENT_TOKEN`,"persistent-hint":``,hint:`Public browser token for Paddle.js. Keep the private API key in the connection's separate secret Env variable.`,disabled:__props.disabled,"error-messages":errors(`environments/${environment}/publicClientTokenRef`),"onUpdate:modelValue":$event=>binding(environment,`publicClientTokenRef`,$event)},null,8,[`model-value`,`disabled`,`error-messages`,`onUpdate:modelValue`]),createVNode(VBtn,{height:`48`,variant:`text`,disabled:__props.disabled||!/^env:[A-Z_][A-Z0-9_]*$/.test(item.publicClientTokenRef||``),onClick:$event=>setEnv(item.publicClientTokenRef,void 0,false)},{default:withCtx(()=>[..._cache[12]||(_cache[12]=[createTextVNode(`Set public client token in Env`,-1)])]),_:1},8,[`disabled`,`onClick`])],64)):createCommentVNode(``,true),createVNode(VTextField,{"model-value":item.webhookSecretRef,label:`Webhook signing secret Env reference`,placeholder:`env:PAYMENT_WEBHOOK_SECRET`,disabled:__props.disabled,"error-messages":errors(`environments/${environment}/webhookSecretRef`),"onUpdate:modelValue":$event=>binding(environment,`webhookSecretRef`,$event)},null,8,[`model-value`,`disabled`,`error-messages`,`onUpdate:modelValue`]),createVNode(VBtn,{height:`48`,variant:`text`,disabled:__props.disabled||!/^env:[A-Z_][A-Z0-9_]*$/.test(item.webhookSecretRef||``),onClick:$event=>setEnv(item.webhookSecretRef,void 0,true)},{default:withCtx(()=>[..._cache[13]||(_cache[13]=[createTextVNode(`Set signing secret in Env`,-1)])]),_:1},8,[`disabled`,`onClick`]),createVNode(VTextField,{"model-value":webhookUrl(item.integrationId),label:`Suggested webhook URL`,readonly:``,"persistent-hint":``,hint:`Your app must implement this route. Create the provider destination with this exact URL; the editor is not the receiver.`},null,8,[`model-value`]),createVNode(VTextField,{"model-value":item.returnUrlRef,label:`Checkout / return URL Env reference`,disabled:__props.disabled,"error-messages":errors(`environments/${environment}/returnUrlRef`),"onUpdate:modelValue":$event=>binding(environment,`returnUrlRef`,$event)},null,8,[`model-value`,`disabled`,`error-messages`,`onUpdate:modelValue`]),createVNode(VBtn,{height:`48`,variant:`text`,disabled:__props.disabled||!returnUrl.value,onClick:$event=>setEnv(item.returnUrlRef,returnUrl.value,false)},{default:withCtx(()=>[..._cache[14]||(_cache[14]=[createTextVNode(`Set suggested application URL in Env`,-1)])]),_:1},8,[`disabled`,`onClick`]),!returnUrl.value?(openBlock(),createElementBlock(`p`,_hoisted_5$1,`No application address is available. Enter the actual application's HTTPS billing URL in Env; do not use the editor address.`)):createCommentVNode(``,true),createVNode(VExpansionPanels,{class:`mt-4`},{default:withCtx(()=>[createVNode(VExpansionPanel,{title:`Set up payment events and checkout`},{default:withCtx(()=>[createVNode(VExpansionPanelText,null,{default:withCtx(()=>[createBaseVNode(`ol`,null,[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(paymentSetups)[__props.modelValue.integrations[item.integrationId]?.provider]?.steps||[],step=>{return openBlock(),createElementBlock(`li`,{key:step},toDisplayString(step),1)}),128))]),createBaseVNode(`a`,{href:unref(paymentSetups)[__props.modelValue.integrations[item.integrationId]?.provider]?.url,target:`_blank`,rel:`noopener noreferrer`},`Open provider setup documentation`,8,_hoisted_6$1)]),_:2},1024)]),_:2},1024)]),_:2},1024)],8,_hoisted_3$1)}),128)),createBaseVNode(`section`,_hoisted_7$1,[_cache[22]||(_cache[22]=createBaseVNode(`h4`,{class:`text-title-small mb-3`},`Provider catalogue`,-1)),_cache[23]||(_cache[23]=createBaseVNode(`p`,null,`Save the configuration, then ask your application to compare its plans with the provider. Applying the catalogue creates or updates provider products and prices. It does not charge customers.`,-1)),__props.canPrepare?(openBlock(),createElementBlock(Fragment,{key:0},[createVNode(VBtn,{height:`48`,variant:`tonal`,class:`my-3`,disabled:__props.managementDisabled,onClick:_cache[0]||(_cache[0]=$event=>emit(`prepare`))},{default:withCtx(()=>[..._cache[15]||(_cache[15]=[createTextVNode(`Prepare payment implementation request`,-1)])]),_:1},8,[`disabled`]),_cache[16]||(_cache[16]=createBaseVNode(`p`,null,`Adds the saved payment requirements to your chat draft for review before sending. Save any changes first.`,-1))],64)):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(payments.value.environments,(item,environment)=>{return openBlock(),createElementBlock(Fragment,{key:environment},[item.integrationId===__props.integrationId?(openBlock(),createBlock(VBtn,{key:0,height:`48`,variant:`outlined`,class:`mr-2 my-3`,disabled:__props.managementDisabled,onClick:$event=>emit(`manage`,{operation:`payments-preview`,paymentEnvironment:environment})},{default:withCtx(()=>[createTextVNode(`Preview `+toDisplayString(environment)+` catalogue`,1)]),_:2},1032,[`disabled`,`onClick`])):createCommentVNode(``,true)],64)}),128)),(openBlock(true),createElementBlock(Fragment,null,renderList(payments.value.environments,(item,environment)=>{return openBlock(),createElementBlock(Fragment,{key:`readiness-${environment}`},[item.integrationId===__props.integrationId?(openBlock(),createBlock(VBtn,{key:0,height:`48`,variant:`outlined`,class:`mr-2 my-3`,disabled:__props.managementDisabled,onClick:$event=>emit(`manage`,{operation:`payments-readiness`,paymentEnvironment:environment})},{default:withCtx(()=>[createTextVNode(`Check `+toDisplayString(environment)+` readiness`,1)]),_:2},1032,[`disabled`,`onClick`])):createCommentVNode(``,true)],64)}),128)),__props.management?.status===`payments-readiness`?(openBlock(),createElementBlock(`section`,_hoisted_8$1,[createBaseVNode(`p`,null,`Account `+toDisplayString(__props.management.providerAccountId)+` · `+toDisplayString(__props.management.paymentEnvironment),1),_cache[17]||(_cache[17]=createBaseVNode(`p`,null,`This report is not provider approval. Unknown and manual checks still need evidence before launch.`,-1)),createBaseVNode(`dl`,null,[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.management.checks,check=>{return openBlock(),createElementBlock(Fragment,{key:check.id},[createBaseVNode(`dt`,_hoisted_9$1,toDisplayString({credentials:`Credentials`,account:`Merchant identity`,charges:`Payment acceptance`,payouts:`Payouts`,catalogue:`Products and prices`,webhook:`Payment events`,checkout:`Checkout and billing portal`,site:`Website and provider approval`,deployment:`Deployed application`}[check.id])+` · `+toDisplayString({passed:`Passed`,failed:`Needs attention`,unknown:`Not verified`,manual:`Manual check required`}[check.status]),1),createBaseVNode(`dd`,_hoisted_10$1,toDisplayString(check.detail),1)],64)}),128))])])):createCommentVNode(``,true),__props.managementError&&__props.managementOperation!==`payments-history`?(openBlock(),createElementBlock(`p`,_hoisted_11$1,toDisplayString(__props.managementError),1)):createCommentVNode(``,true),__props.management?.status===`unconfigured`?(openBlock(),createElementBlock(`p`,_hoisted_12$1,`Your application needs payment management implemented in its Integration setup command. Ask the project assistant to implement the payment catalogue contract using your chosen framework.`)):createCommentVNode(``,true),__props.management?.review?(openBlock(),createElementBlock(Fragment,{key:4},[createBaseVNode(`p`,null,`Account `+toDisplayString(__props.management.providerAccountId)+` · `+toDisplayString(__props.management.paymentEnvironment),1),__props.management.review.pending?(openBlock(),createElementBlock(`section`,_hoisted_13$1,[_cache[19]||(_cache[19]=createBaseVNode(`p`,{role:`alert`},`An earlier provider request is unresolved. Check the matching provider account before continuing.`,-1)),createBaseVNode(`p`,null,toDisplayString(__props.management.review.pendingOperation.action)+` · `+toDisplayString(__props.management.review.pendingOperation.planId)+` · `+toDisplayString(__props.management.review.pendingOperation.name||`${__props.management.review.pendingOperation.currency} ${__props.management.review.pendingOperation.amount} minor units / ${__props.management.review.pendingOperation.interval}`),1),createVNode(VTextField,{modelValue:recoveryProviderId.value,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>recoveryProviderId.value=$event),label:`Existing provider object ID`,hint:`Copy the matching product or price ID from the provider dashboard. The application verifies it before saving the mapping.`,"persistent-hint":``,disabled:__props.managementDisabled},null,8,[`modelValue`,`disabled`]),createVNode(VBtn,{height:`48`,variant:`tonal`,disabled:__props.managementDisabled||!/^[A-Za-z0-9_-]{1,200}$/.test(recoveryProviderId.value),onClick:_cache[2]||(_cache[2]=$event=>recoveryOpen.value=true)},{default:withCtx(()=>[..._cache[18]||(_cache[18]=[createTextVNode(`Review recovery`,-1)])]),_:1},8,[`disabled`]),_cache[20]||(_cache[20]=createBaseVNode(`p`,null,`If no matching object exists, use the application's authorized administrator tools to investigate. This screen cannot prove that a timed-out write never completed.`,-1))])):createCommentVNode(``,true),__props.management.review.drift.length?(openBlock(),createElementBlock(`ul`,_hoisted_14$1,[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.management.review.drift,item=>{return openBlock(),createElementBlock(`li`,{key:item.planId+item.reason},toDisplayString(item.planId)+`: `+toDisplayString(item.reason),1)}),128))])):createCommentVNode(``,true),__props.management.review.changes.length?(openBlock(),createElementBlock(`ul`,_hoisted_15$1,[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.management.review.changes,item=>{return openBlock(),createElementBlock(`li`,{key:item.planId+item.action},toDisplayString(item.planId)+`: `+toDisplayString(item.action===`create-product`?`Create product`:item.action===`rename-product`?`Rename product`:`Create recurring price`)+` — `+toDisplayString(item.name||`${item.amount} ${item.currency} smallest units / ${item.interval}`),1)}),128))])):(openBlock(),createElementBlock(`p`,_hoisted_16$1,`No product or price changes are needed.`)),__props.management.review.removed.length?(openBlock(),createElementBlock(`p`,_hoisted_17$1,`Plans absent from this configuration: `+toDisplayString(__props.management.review.removed.join(`, `))+`. Their provider records and subscriptions will remain; resolve existing subscribers in the application.`,1)):createCommentVNode(``,true),createVNode(VBtn,{height:`48`,color:`primary`,class:`mt-3`,disabled:__props.managementDisabled||!__props.management.review.changes.length||__props.management.review.pending||Boolean(__props.management.review.drift.length),onClick:_cache[3]||(_cache[3]=$event=>publishOpen.value=true)},{default:withCtx(()=>[..._cache[21]||(_cache[21]=[createTextVNode(`Review changes`,-1)])]),_:1},8,[`disabled`])],64)):createCommentVNode(``,true)]),createVNode(VSheet,{tag:`section`,"aria-label":`Billing history`,class:`mb-6`},{default:withCtx(()=>[_cache[26]||(_cache[26]=createBaseVNode(`p`,{class:`text-body-medium mb-4`},`Inspect one application's billing account. Use its user or organization billing ID, not a provider customer ID. Your application controls access to these records.`,-1)),createVNode(VTextField,{modelValue:historySubject.value,"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>historySubject.value=$event),label:`Application billing account ID`,disabled:__props.managementDisabled,"error-messages":historySubjectError.value},null,8,[`modelValue`,`disabled`,`error-messages`]),createVNode(VSelect,{modelValue:historyCollection.value,"onUpdate:modelValue":_cache[5]||(_cache[5]=$event=>historyCollection.value=$event),label:`Billing records`,items:[{title:`Invoices and transactions`,value:`transactions`},{title:`Subscriptions`,value:`subscriptions`}],disabled:__props.managementDisabled},null,8,[`modelValue`,`disabled`]),(openBlock(true),createElementBlock(Fragment,null,renderList(payments.value.environments,(item,environment)=>{return openBlock(),createElementBlock(Fragment,{key:`history-${environment}`},[item.integrationId===__props.integrationId?(openBlock(),createBlock(VBtn,{key:0,height:`48`,variant:`tonal`,class:`mr-2 mb-4`,disabled:__props.managementDisabled||!historySubject.value.trim()||Boolean(historySubjectError.value),onClick:$event=>emit(`manage`,{operation:`payments-history`,paymentEnvironment:environment,subjectId:historySubject.value,collection:historyCollection.value})},{default:withCtx(()=>[createTextVNode(`View `+toDisplayString(environment)+` billing history`,1)]),_:2},1032,[`disabled`,`onClick`])):createCommentVNode(``,true)],64)}),128)),createVNode(VSheet,{"min-height":`240`,"aria-live":`polite`,"aria-busy":__props.managementLoading},{default:withCtx(()=>[__props.managementLoading?(openBlock(),createBlock(VSkeletonLoader,{key:0,type:`list-item-three-line@3`,"aria-label":`Loading payment information`})):__props.managementOperation===`payments-history`&&__props.managementError?(openBlock(),createElementBlock(`div`,_hoisted_18$1,[..._cache[24]||(_cache[24]=[createBaseVNode(`p`,{class:`text-body-medium mb-2`},`Billing history could not load. Check the application's payment command and provider access, then use View billing history to retry.`,-1)])])):history.value?(openBlock(),createElementBlock(Fragment,{key:2},[createBaseVNode(`p`,_hoisted_19$1,toDisplayString(history.value.providerAccountId)+` · `+toDisplayString(history.value.paymentEnvironment)+` · `+toDisplayString(history.value.subjectId),1),!history.value.items.length?(openBlock(),createElementBlock(`p`,_hoisted_20$1,`No billing records found for this account.`)):(openBlock(),createBlock(VList,{key:1,"aria-label":`Billing records`,lines:`three`,"bg-color":`transparent`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(history.value.items,item=>{return openBlock(),createBlock(VListItem,{key:item.id},{default:withCtx(()=>[createVNode(VListItemTitle,{class:`text-wrap`},{default:withCtx(()=>[createTextVNode(toDisplayString(item.kind)+` · `+toDisplayString(item.id),1)]),_:2},1024),createVNode(VListItemSubtitle,{class:`text-wrap`},{default:withCtx(()=>[createTextVNode(toDisplayString(item.status)+` · `+toDisplayString(item.createdAt),1)]),_:2},1024),item.kind!==`subscription`?(openBlock(),createElementBlock(`p`,_hoisted_21$1,toDisplayString(item.currency)+` · Total: `+toDisplayString(item.totalMinor??`Unknown`)+` · Paid: `+toDisplayString(item.paidMinor??`Unknown`)+` (smallest currency units)`,1)):createCommentVNode(``,true)]),_:2},1024)}),128))]),_:1})),history.value.nextCursor?(openBlock(),createBlock(VBtn,{key:2,height:`48`,variant:`text`,disabled:__props.managementDisabled,onClick:_cache[6]||(_cache[6]=$event=>emit(`manage`,{operation:`payments-history`,paymentEnvironment:history.value.paymentEnvironment,subjectId:historySubject.value,collection:historyCollection.value,after:history.value.nextCursor}))},{default:withCtx(()=>[..._cache[25]||(_cache[25]=[createTextVNode(`Next billing page`,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true)],64)):(openBlock(),createElementBlock(`p`,_hoisted_22$1,`Select a billing account and load its records. Viewing history does not change subscriptions or charge customers.`))]),_:1},8,[`aria-busy`])]),_:1}),createVNode(VDialog,{modelValue:recoveryOpen.value,"onUpdate:modelValue":_cache[8]||(_cache[8]=$event=>recoveryOpen.value=$event),"max-width":`560`},{default:withCtx(()=>[createVNode(VCard,{title:`Recover provider mapping?`},{default:withCtx(()=>[createVNode(VCardText,null,{default:withCtx(()=>[createTextVNode(`Account `+toDisplayString(__props.management?.providerAccountId)+` · `+toDisplayString(__props.management?.paymentEnvironment)+`. Verify and attach `+toDisplayString(recoveryProviderId.value)+` to the pending `+toDisplayString(__props.management?.review?.pendingOperation?.action)+` for `+toDisplayString(__props.management?.review?.pendingOperation?.planId)+`. This updates the app's mapping and does not create a provider object.`,1)]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VBtn,{height:`48`,onClick:_cache[7]||(_cache[7]=$event=>recoveryOpen.value=false)},{default:withCtx(()=>[..._cache[27]||(_cache[27]=[createTextVNode(`Cancel`,-1)])]),_:1}),createVNode(VBtn,{height:`48`,disabled:__props.managementDisabled,onClick:recoverCatalogue},{default:withCtx(()=>[..._cache[28]||(_cache[28]=[createTextVNode(`Recover mapping`,-1)])]),_:1},8,[`disabled`])]),_:1})]),_:1})]),_:1},8,[`modelValue`]),createVNode(VDialog,{modelValue:publishOpen.value,"onUpdate:modelValue":_cache[10]||(_cache[10]=$event=>publishOpen.value=$event),"max-width":`560`},{default:withCtx(()=>[createVNode(VCard,{title:`Apply payment catalogue?`},{default:withCtx(()=>[createVNode(VCardText,null,{default:withCtx(()=>[createTextVNode(`Apply the listed changes to account `+toDisplayString(__props.management?.providerAccountId)+` in `+toDisplayString(__props.management?.paymentEnvironment)+`. Existing provider prices are retained. An interrupted request may have completed remotely; inspect its result before retrying.`,1)]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VBtn,{height:`48`,onClick:_cache[9]||(_cache[9]=$event=>publishOpen.value=false)},{default:withCtx(()=>[..._cache[29]||(_cache[29]=[createTextVNode(`Cancel`,-1)])]),_:1}),createVNode(VBtn,{height:`48`,color:`primary`,disabled:__props.managementDisabled,onClick:publishCatalogue},{default:withCtx(()=>[..._cache[30]||(_cache[30]=[createTextVNode(`Apply catalogue`,-1)])]),_:1},8,[`disabled`])]),_:1})]),_:1})]),_:1},8,[`modelValue`]),_cache[32]||(_cache[32]=createBaseVNode(`h4`,{class:`text-title-small mb-3`},`Recurring plans`,-1)),_cache[33]||(_cache[33]=createBaseVNode(`p`,null,`Prices use the currency's smallest unit: USD 1200 means $12.00. Renewal credits expire at the end of the paid period. Features are stable names enforced by your app.`,-1)),(openBlock(true),createElementBlock(Fragment,null,renderList(payments.value.plans,(item,id)=>{return openBlock(),createElementBlock(`section`,{key:id,"aria-label":`Payment plan ${id}`,class:`my-4`},[createBaseVNode(`h5`,_hoisted_24$1,toDisplayString(id),1),createVNode(VTextField,{"model-value":item.name,label:`Plan name`,disabled:__props.disabled,"error-messages":errors(`plans/${id}/name`),"onUpdate:modelValue":$event=>plan(id,`name`,$event)},null,8,[`model-value`,`disabled`,`error-messages`,`onUpdate:modelValue`]),createVNode(VRow,null,{default:withCtx(()=>[createVNode(VCol,{cols:`12`,sm:`4`},{default:withCtx(()=>[createVNode(VTextField,{"model-value":item.amount,type:`number`,min:`1`,step:`1`,label:`Amount in smallest currency unit`,disabled:__props.disabled,"error-messages":errors(`plans/${id}/amount`),"onUpdate:modelValue":$event=>plan(id,`amount`,$event===``?null:Number($event))},null,8,[`model-value`,`disabled`,`error-messages`,`onUpdate:modelValue`])]),_:2},1024),createVNode(VCol,{cols:`12`,sm:`4`},{default:withCtx(()=>[createVNode(VTextField,{"model-value":item.currency,label:`Currency code`,disabled:__props.disabled,"error-messages":errors(`plans/${id}/currency`),"onUpdate:modelValue":$event=>plan(id,`currency`,String($event||``).toUpperCase())},null,8,[`model-value`,`disabled`,`error-messages`,`onUpdate:modelValue`])]),_:2},1024),createVNode(VCol,{cols:`12`,sm:`4`},{default:withCtx(()=>[createVNode(VSelect,{"model-value":item.interval,items:[`month`,`year`],label:`Billing interval`,disabled:__props.disabled,"onUpdate:modelValue":$event=>plan(id,`interval`,$event)},null,8,[`model-value`,`disabled`,`onUpdate:modelValue`])]),_:2},1024)]),_:2},1024),createVNode(VCombobox,{"model-value":item.features,label:`Included feature names`,multiple:``,chips:``,disabled:__props.disabled,"error-messages":errors(`plans/${id}/features`),"onUpdate:modelValue":$event=>plan(id,`features`,$event)},null,8,[`model-value`,`disabled`,`error-messages`,`onUpdate:modelValue`]),createVNode(VTextField,{"model-value":item.renewalCredits,label:`Credits per paid period`,type:`number`,min:`0`,step:`1`,"persistent-hint":``,hint:`Zero means no usage credits. Cancellation does not claw back credits before their expiry.`,disabled:__props.disabled,"error-messages":errors(`plans/${id}/renewalCredits`),"onUpdate:modelValue":$event=>plan(id,`renewalCredits`,$event===``?null:Number($event))},null,8,[`model-value`,`disabled`,`error-messages`,`onUpdate:modelValue`])],8,_hoisted_23$1)}),128)),createVNode(VTextField,{modelValue:planId.value,"onUpdate:modelValue":_cache[11]||(_cache[11]=$event=>planId.value=$event),label:`New stable plan ID`,placeholder:`pro`,"error-messages":planIdError.value,disabled:__props.disabled,"persistent-hint":``,hint:`Changing an existing logical ID would create a different plan. Keep IDs stable for existing subscribers.`},null,8,[`modelValue`,`error-messages`,`disabled`]),createVNode(VBtn,{height:`48`,variant:`outlined`,disabled:__props.disabled||!planId.value||Boolean(planIdError.value),onClick:addPlan},{default:withCtx(()=>[..._cache[31]||(_cache[31]=[createTextVNode(`Add plan`,-1)])]),_:1},8,[`disabled`]),_cache[34]||(_cache[34]=createBaseVNode(`p`,{class:`mt-4`},`Save using this page's Save configuration action. The app still needs its payment implementation and a reviewed catalogue applied to the provider before checkout can use these plans.`,-1))],64)):createCommentVNode(``,true)])}}};var application_integration_setup_default=`# Application integration setup
|
|
14
14
|
|
|
15
15
|
## Request configuration from the conversation
|
|
16
16
|
|
|
@@ -201,7 +201,7 @@ under the wrong user. Account linking remains separate from application login.
|
|
|
201
201
|
## Callback and Env
|
|
202
202
|
|
|
203
203
|
Use the actual assigned application origin as the initial callback suggestion,
|
|
204
|
-
for example \`https://
|
|
204
|
+
for example \`https://my-app.example.com\`, plus the implemented
|
|
205
205
|
callback path. Google Calendar suggests \`/integrations/google/callback\`.
|
|
206
206
|
The public editor receives the origin from its host; it never constructs it from
|
|
207
207
|
the dashboard address or project slug. Without an assigned origin, enter the
|
|
@@ -255,8 +255,8 @@ an editor payment gateway. The app owns the provider client, credentials,
|
|
|
255
255
|
merchant mapping and transactional publication state. The editor owns the
|
|
256
256
|
request/response contract below and requires workspace-owner access for payment
|
|
257
257
|
management. When a host supplies production integrations, the same controls read
|
|
258
|
-
the
|
|
259
|
-
to that host. The host resolves the active
|
|
258
|
+
the deployed configuration without editing it and send the current \`releaseId\`
|
|
259
|
+
to that host. The host resolves the active deployed workspace and its release
|
|
260
260
|
Env under its publication lock, rejecting a stale release before execution. It
|
|
261
261
|
must not substitute the selected development session or caller-supplied paths.
|
|
262
262
|
\`releaseId\` is a host request field, not an application-command field: the app
|
|
@@ -932,10 +932,10 @@ delivery and real provider checkout are separate evidence. These examples do not
|
|
|
932
932
|
certify them. The editor management-command conformance also remains a separate
|
|
933
933
|
consumer contract; portable account tests cannot substitute for its authorization,
|
|
934
934
|
review, source/release and environment checks.
|
|
935
|
-
`;var airtable_default=`data:image/png;base64,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`;var algolia_default=`data:image/svg+xml,%3csvg%20width='250'%20height='250'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M124.997%200C56.683%200%20.997%2055.037.013%20123.075-.99%20192.166%2055.11%20249.424%20124.26%20249.817c21.362.128%2041.927-5.091%2060.191-15.017%201.78-.963%202.055-3.411.541-4.757l-11.694-10.359c-2.38-2.103-5.764-2.702-8.685-1.454-12.746%205.425-26.603%208.186-40.884%208.019-55.873-.688-101.025-47.144-100.13-102.977.875-55.125%2046.028-99.705%20101.399-99.705h101.419v180.127l-57.535-51.085c-1.859-1.652-4.711-1.327-6.216.658-9.235%2012.216-24.283%2019.823-40.992%2018.663-23.182-1.602-41.966-20.245-43.697-43.4-2.076-27.617%2019.827-50.752%2047.031-50.752%2024.607%200%2044.867%2018.93%2046.981%2042.978.187%202.143%201.151%204.138%202.764%205.563l14.989%2013.277c1.701%201.504%204.396.58%204.819-1.651a71.016%2071.016%200%200%200%201.033-17.955c-2.41-35.165-30.922-63.46-66.131-65.632-40.363-2.486-74.117%2029.072-75.189%2068.629-1.043%2038.545%2030.557%2071.774%2069.14%2072.629%2016.11.353%2031.03-4.708%2043.098-13.474l75.178%2066.594c3.226%202.85%208.311.57%208.311-3.735V4.737A4.741%204.741%200%200%200%20245.259%200H124.997Z'%20fill='%23003DFF'/%3e%3c/svg%3e`;var amazon_redshift_default=`data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20width='40px'%20height='40px'%20viewBox='0%200%2040%2040'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%3e%3ctitle%3eIcon-Architecture/32/Arch_Amazon-Redshift_32%3c/title%3e%3cg%20id='Icon-Architecture/32/Arch_Amazon-Redshift_32'%20stroke='none'%20stroke-width='1'%20fill='none'%20fill-rule='evenodd'%3e%3cg%20id='Icon-Architecture-BG/32/Analytics'%20fill='%238C4FFF'%3e%3crect%20id='Rectangle'%20x='0'%20y='0'%20width='40'%20height='40'%3e%3c/rect%3e%3c/g%3e%3cpath%20d='M25.912,17.5868263%20C25.384,17.5868263%2024.953,17.1576846%2024.953,16.6297405%20C24.953,16.1007984%2025.384,15.6716567%2025.912,15.6716567%20C26.441,15.6716567%2026.872,16.1007984%2026.872,16.6297405%20C26.872,17.1576846%2026.441,17.5868263%2025.912,17.5868263%20M23.479,23.4131737%20C22.951,23.4131737%2022.52,22.9840319%2022.52,22.4550898%20C22.52,21.9271457%2022.951,21.498004%2023.479,21.498004%20C24.009,21.498004%2024.439,21.9271457%2024.439,22.4550898%20C24.439,22.9840319%2024.009,23.4131737%2023.479,23.4131737%20M17.641,22.4421158%20C17.113,22.4421158%2016.683,22.0129741%2016.683,21.4840319%20C16.683,20.9560878%2017.113,20.5269461%2017.641,20.5269461%20C18.171,20.5269461%2018.601,20.9560878%2018.601,21.4840319%20C18.601,22.0129741%2018.171,22.4421158%2017.641,22.4421158%20M15.21,27.7824351%20C14.681,27.7824351%2014.25,27.3532934%2014.25,26.8253493%20C14.25,26.2974052%2014.681,25.8672655%2015.21,25.8672655%20C15.738,25.8672655%2016.169,26.2974052%2016.169,26.8253493%20C16.169,27.3532934%2015.738,27.7824351%2015.21,27.7824351%20M25.912,14.6736527%20C24.832,14.6736527%2023.953,15.5508982%2023.953,16.6297405%20C23.953,17.2904192%2024.285,17.8732535%2024.79,18.2275449%20L23.877,20.5399202%20C23.748,20.5139721%2023.615,20.5%2023.479,20.5%20C22.62,20.5%2021.897,21.0588822%2021.634,21.8283433%20L19.589,21.3642715%20C19.525,20.3423154%2018.682,19.5289421%2017.641,19.5289421%20C16.561,19.5289421%2015.683,20.4061876%2015.683,21.4840319%20C15.683,21.988024%2015.88,22.4441118%2016.194,22.7904192%20L15.302,24.8792415%20C15.27,24.8772455%2015.241,24.8692615%2015.21,24.8692615%20C14.129,24.8692615%2013.25,25.746507%2013.25,26.8253493%20C13.25,27.9031936%2014.129,28.7804391%2015.21,28.7804391%20C16.29,28.7804391%2017.169,27.9031936%2017.169,26.8253493%20C17.169,26.1327345%2016.805,25.5279441%2016.261,25.1796407%20L17.048,23.3383234%20C17.236,23.3982036%2017.433,23.4401198%2017.641,23.4401198%20C18.412,23.4401198%2019.073,22.99002%2019.393,22.3433134%20L21.558,22.8343313%20C21.736,23.7315369%2022.529,24.4111776%2023.479,24.4111776%20C24.56,24.4111776%2025.439,23.5339321%2025.439,22.4550898%20C25.439,21.8722555%2025.178,21.3542914%2024.77,20.996008%20L25.729,18.5658683%20C25.791,18.5718563%2025.85,18.5848303%2025.912,18.5848303%20C26.993,18.5848303%2027.872,17.7075848%2027.872,16.6297405%20C27.872,15.5508982%2026.993,14.6736527%2025.912,14.6736527%20M20.5,33.001996%20C15.635,33.001996%2012,31.5419162%2012,30.2365269%20L12,11.5898204%20C13.663,12.9281437%2017.153,13.6387226%2020.5,13.6387226%20C23.847,13.6387226%2027.337,12.9281437%2029,11.5898204%20L29,30.2365269%20C29,31.5419162%2025.365,33.001996%2020.5,33.001996%20M20.5,6.99800399%20C25.509,6.99800399%2029,8.48403194%2029,9.81936128%20C29,11.1536926%2025.509,12.6407186%2020.5,12.6407186%20C15.491,12.6407186%2012,11.1536926%2012,9.81936128%20C12,8.48403194%2015.491,6.99800399%2020.5,6.99800399%20M30,9.81936128%20C30,7.33832335%2025.105,6%2020.5,6%20C15.894,6%2011,7.33832335%2011,9.81936128%20C11,9.82335329%2011.002,9.82734531%2011.002,9.83133733%20L11,9.83133733%20L11,30.2365269%20C11,32.6806387%2015.894,34%2020.5,34%20C25.105,34%2030,32.6806387%2030,30.2365269%20L30,9.83133733%20L29.998,9.83133733%20C29.998,9.82734531%2030,9.82335329%2030,9.81936128'%20id='Amazon-Redshift_Icon_32_Squid'%20fill='%23FFFFFF'%3e%3c/path%3e%3c/g%3e%3c/svg%3e`;var amplitude_default=`/assets/amplitude-CCAWdeGL.png`;var apify_default=`data:image/svg+xml,%3csvg%20width='1080'%20height='1080'%20viewBox='0%200%201080%201080'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M607.859%2078.2218H987.785C995.513%2078.2218%201001.78%2084.4868%201001.78%2092.2151V672.834C1001.78%20686.742%20983.69%20692.134%20976.075%20680.496L596.15%2099.877C590.06%2090.5703%20596.737%2078.2218%20607.859%2078.2218Z'%20fill='%23246DFF'/%3e%3cpath%20d='M472.141%2078.2218H92.215C84.4867%2078.2218%2078.2217%2084.4868%2078.2217%2092.2151V672.834C78.2217%20686.742%2096.3094%20692.134%20103.924%20680.496L483.85%2099.877C489.94%2090.5703%20483.263%2078.2218%20472.141%2078.2218Z'%20fill='%2320A34E'/%3e%3cpath%20d='M533.491%20543.086L101.895%20977.927C93.1302%20986.758%2099.3849%201001.78%20111.826%201001.78H968.529C980.919%201001.78%20987.197%20986.863%20978.535%20978.003L553.429%20543.161C547.969%20537.576%20538.993%20537.542%20533.491%20543.086Z'%20fill='%23F86606'/%3e%3c/svg%3e`;var apollo_io_default=`/assets/apollo-io-DSa-SGjz.svg`;var asana_default=`/assets/asana--NYpVJKi.ico`;var ashby_default=`data:image/png;base64,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`;var atlassian_default=`/assets/atlassian-DlYQurNH.ico`;var attention_default=`/assets/attention-DJmlCPcV.png`;var aws_athena_default=`/assets/aws-athena-iyRsleas.svg`;var aws_s3_default=`data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20width='40px'%20height='40px'%20viewBox='0%200%2040%2040'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%3e%3ctitle%3eIcon-Architecture/32/Arch_Amazon-Simple-Storage-Service_32%3c/title%3e%3cg%20id='Icon-Architecture/32/Arch_Amazon-Simple-Storage-Service_32'%20stroke='none'%20stroke-width='1'%20fill='none'%20fill-rule='evenodd'%3e%3cg%20id='Icon-Architecture-BG/32/Storage'%20fill='%237AA116'%3e%3crect%20id='Rectangle'%20x='0'%20y='0'%20width='40'%20height='40'%3e%3c/rect%3e%3c/g%3e%3cg%20id='Icon-Service/32/Amazon-Simple-Storage-Service_32'%20transform='translate(7.000200,%206.000100)'%20fill='%23FFFFFF'%3e%3cpath%20d='M23.532,15.391%20L23.729,13.932%20C25.821,15.131%2025.864,15.626%2025.8630149,15.64%20C25.859,15.643%2025.509,15.923%2023.532,15.391%20L23.532,15.391%20Z%20M22.564,15.103%20C19.722,14.206%2015.904,12.531%2013.723,11.504%20C13.723,11.497%2013.727,11.491%2013.727,11.484%20C13.727,10.821%2013.187,10.281%2012.524,10.281%20C11.861,10.281%2011.321,10.821%2011.321,11.484%20C11.321,12.148%2011.861,12.687%2012.524,12.687%20C12.814,12.687%2013.07,12.571%2013.278,12.4%20C14.547,12.994%2019.075,15.076%2022.428,16.113%20L21.249,24.85%20C21.249,25.716%2017.575,27%2012.5,27%20C7.425,27%203.751,25.716%203.746,24.784%20L1.283,6.563%20C3.458,8.155%208.074,9%2012.5,9%20C16.926,9%2021.543,8.155%2023.718,6.563%20L22.564,15.103%20Z%20M1.003,4.489%20C1.032,3.609%205.104,1%2012.5,1%20C19.895,1%2023.97,3.609%2024,4.489%20L24,4.603%20C23.81,6.231%2019.137,8%2012.5,8%20C5.863,8%201.209,6.231%201.018,4.604%20L1.003,4.489%20Z%20M25,4.5%20C25,2.665%2020.131,0%2012.5,0%20C4.869,0%200,2.665%200,4.5%20L0,4.567%20L2.751,24.85%20C2.751,26.896%207.773,28%2012.5,28%20C17.226,28%2022.249,26.896%2022.244,24.917%20L23.396,16.39%20C24.217,16.604%2024.881,16.718%2025.392,16.718%20C25.985,16.718%2026.386,16.574%2026.628,16.285%20C26.827,16.047%2026.903,15.76%2026.845,15.454%20C26.708,14.716%2025.797,13.919%2023.89,12.87%20L23.869,12.896%20L25,4.567%20L25,4.5%20Z'%20id='Amazon-Simple-Storage-Service-Icon_32_Squid'%3e%3c/path%3e%3c/g%3e%3c/g%3e%3c/svg%3e`;var bigquery_default=`data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20id='standard_product_icon'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%20viewBox='0%200%20512%20512'%3e%3c!--%20Generator:%20Adobe%20Illustrator%2029.1.0,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%202.1.0%20Build%20142)%20--%3e%3cdefs%3e%3cstyle%3e%20.st0%20{%20fill:%20none;%20}%20.st1%20{%20fill:%20%234285f4;%20}%20.st2%20{%20fill:%20%2334a853;%20}%20.st3%20{%20fill:%20%23fbbc04;%20}%20.st4%20{%20fill:%20%23ea4335;%20}%20%3c/style%3e%3c/defs%3e%3cg%20id='bounding_box'%3e%3crect%20class='st0'%20width='512'%20height='512'/%3e%3c/g%3e%3cg%20id='art'%3e%3cpath%20class='st2'%20d='M311.9,418.9c-8.8,0-16-7.2-16-16v-145.8c0-8.8,7.2-16,16-16s16,7.2,16,16v145.8c0,8.8-7.2,16-16,16h0Z'/%3e%3cpath%20class='st2'%20d='M147.6,418.9c-8.8,0-16-7.2-16-16v-200.5c0-8.8,7.2-16,16-16s16,7.2,16,16v200.5c0,8.8-7.2,16-16,16Z'/%3e%3cpath%20class='st2'%20d='M229.8,437.4c-8.8,0-16-7.2-16-16V147.6c0-8.8,7.2-16,16-16s16,7.2,16,16v273.7c0,8.8-7.2,16-16,16h0Z'/%3e%3cpath%20class='st3'%20d='M229.8,437.4c-114.5,0-207.6-93.1-207.6-207.6h32c0,96.8,78.8,175.6,175.6,175.6s175.6-78.8,175.6-175.6h32c0,114.5-93.1,207.6-207.6,207.6h0Z'/%3e%3cpath%20class='st4'%20d='M437.4,229.8h-32c0-96.8-78.8-175.6-175.6-175.6S54.1,132.9,54.1,229.8H22.1c0-114.5,93.2-207.7,207.7-207.7s207.6,93.1,207.6,207.6h0Z'/%3e%3cpath%20class='st1'%20d='M487.4,464.8l-100-100c32.3-37.6,49.9-85,49.9-135.1s-21.6-107.6-60.8-146.8l-22.6,22.6c33.2,33.2,51.4,77.3,51.4,124.2s-18.3,90.9-51.5,124.1h0c-5,5-7.5,7-11.8,10.8l122.8,122.8c3.1,3.1,7.2,4.7,11.3,4.7h0c4.1,0,8.2-1.6,11.3-4.7,6.2-6.2,6.2-16.4,0-22.6h0Z'/%3e%3c/g%3e%3c/svg%3e`;var brevo_default=`data:image/svg+xml,%3csvg%20width='32'%20height='32'%20viewBox='0%200%2032%2032'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M32%2016C32%2024.8366%2024.8366%2032%2016%2032C7.16344%2032%200%2024.8366%200%2016C0%207.16344%207.16344%200%2016%200C24.8366%200%2032%207.16344%2032%2016Z'%20fill='%230B996E'/%3e%3cpath%20d='M21.0024%2014.5395C21.9917%2013.5708%2022.4552%2012.4513%2022.4552%2011.0897C22.4552%208.27639%2020.3848%206.4%2017.2642%206.4H9.6V26.4H15.7803C20.478%2026.4%2024%2023.5258%2024%2019.7135C24%2017.6254%2022.9188%2015.7502%2021.0024%2014.5395ZM12.3813%209.00158H16.9547C18.4995%209.00158%2019.5198%209.87892%2019.5198%2011.2101C19.5198%2012.7227%2018.1913%2013.8726%2015.4721%2014.7499C13.6179%2015.3242%2012.784%2015.8086%2012.4746%2016.3842L12.3813%2016.385V9.00158ZM15.533%2023.7984H12.3813V20.7125C12.3813%2019.3509%2013.5558%2018.0197%2015.1937%2017.5049C16.6466%2017.0206%2017.8508%2016.5363%2018.8711%2016.0228C20.2307%2016.8101%2021.0646%2018.1705%2021.0646%2019.593C21.0646%2022.0133%2018.7157%2023.7984%2015.533%2023.7984Z'%20fill='white'/%3e%3c/svg%3e`;var calendly_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='32'%20height='32'%20viewBox='0%200%2032%2032'%20fill='none'%3e%3cpath%20d='M32%2016C32%2028.0702%2026.5636%2032%2016%2032C5.43644%2032%200%2028.0498%200%2016C0%203.95022%205.43644%200%2016%200C26.5636%200%2032%203.95022%2032%2016Z'%20fill='url(%23paint0_linear_38184_90)'%3e%3c/path%3e%3cpath%20d='M16.0001%2028.5779C7.69694%2028.5779%203.42236%2025.488%203.42236%2016.0004C3.42236%206.51285%207.69614%203.42236%2016.0001%203.42236C24.3041%203.42236%2028.5779%206.51187%2028.5779%2016.0004C28.5779%2025.4889%2024.3037%2028.5779%2016.0001%2028.5779ZM22.8505%209.18627C18.4643%204.79925%2011.8407%204.31045%208.05747%208.09356C4.27392%2011.8771%204.76316%2018.5005%209.14974%2022.8866C13.5364%2027.2737%2020.1593%2027.762%2023.9425%2023.9788C27.726%2020.1953%2027.2371%2013.5723%2022.8506%209.18619L22.8505%209.18627ZM16.0001%2020.3382C17.7685%2020.3382%2019.2715%2019.1249%2019.8168%2017.4368C19.865%2017.2862%2020.0042%2017.184%2020.162%2017.184H22.0489C22.2106%2017.184%2022.3353%2017.3251%2022.3169%2017.4859C21.9008%2021.1848%2019.7653%2022.4363%2016.0001%2022.4363C11.7797%2022.4363%209.60761%2020.8641%209.60761%2016.0361C9.60761%2011.2082%2011.7793%209.63632%2016.0001%209.63632C19.7656%209.63632%2021.9008%2010.8875%2022.3169%2014.5868C22.3353%2014.7475%2022.2105%2014.8888%2022.0489%2014.8888H20.162C20.0041%2014.8888%2019.865%2014.7865%2019.8168%2014.6359C19.2715%2012.9478%2017.7689%2011.7345%2016.0001%2011.7345C13.7715%2011.7345%2011.9649%2013.6601%2011.9649%2016.0361C11.9649%2018.412%2013.7715%2020.338%2016.0001%2020.338V20.3382Z'%20fill='white'%3e%3c/path%3e%3cdefs%3e%3clinearGradient%20id='paint0_linear_38184_90'%20x1='16'%20y1='0'%20x2='16'%20y2='32'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%236AB0FF'%3e%3c/stop%3e%3cstop%20offset='1'%20stop-color='%234793EB'%3e%3c/stop%3e%3c/linearGradient%3e%3c/defs%3e%3c/svg%3e`;var canva_default=`/assets/canva-B5mQPODE.png`;var chargebee_default=`/assets/chargebee-C9RrJZH9.png`;var clay_default=`/assets/clay-CKiqv_h5.png`;var clickhouse_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='512'%20height='512'%20viewBox='0%200%20512%20512'%3e%3crect%20width='512'%20height='512'%20rx='8'%20fill='%23161616'/%3e%3cg%20fill='%23FCFF74'%3e%3crect%20x='83'%20y='83'%20width='38'%20height='346'%20rx='3'/%3e%3crect%20x='160'%20y='83'%20width='38'%20height='346'%20rx='3'/%3e%3crect%20x='237'%20y='83'%20width='38'%20height='346'%20rx='3'/%3e%3crect%20x='314'%20y='83'%20width='38'%20height='346'%20rx='3'/%3e%3crect%20x='391'%20y='218'%20width='38'%20height='76'%20rx='3'/%3e%3c/g%3e%3c/svg%3e`;var confidence_exp_default=`data:image/svg+xml,%3csvg%20width='32'%20height='32'%20viewBox='0%200%2032%2032'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cstyle%3e%20.bg%20{%20fill:%20%23000000;%20}%20.fg%20{%20fill:%20%23ffffff;%20}%20@media%20(prefers-color-scheme:%20dark)%20{%20.bg%20{%20fill:%20%23ffffff;%20}%20.fg%20{%20fill:%20%23000000;%20}%20}%20%3c/style%3e%3crect%20width='32'%20height='32'%20rx='4.92308'%20class='bg'/%3e%3cpath%20d='M25.8462%2021.2185C25.8462%2023.7743%2023.7743%2025.8462%2021.2185%2025.8462C18.6627%2025.8462%2016.5908%2023.7743%2016.5908%2021.2185C16.5908%2018.6627%2018.6627%2016.5908%2021.2185%2016.5908C23.7743%2016.5908%2025.8462%2018.6627%2025.8462%2021.2185Z'%20class='fg'/%3e%3cpath%20d='M25.8462%209.10769C25.8462%2012.5879%2023.0249%2015.4092%2019.5446%2015.4092H17.3785C16.9434%2015.4092%2016.5908%2015.0566%2016.5908%2014.6215V6.94154C16.5908%206.50651%2016.9434%206.15385%2017.3785%206.15385L25.0585%206.15385C25.4935%206.15385%2025.8462%206.50651%2025.8462%206.94154V9.10769Z'%20class='fg'/%3e%3cpath%20d='M15.4092%2014.6215C15.4092%2015.0566%2015.0566%2015.4092%2014.6215%2015.4092H6.94154C6.50651%2015.4092%206.15385%2015.0566%206.15385%2014.6215L6.15385%206.94154C6.15385%206.50651%206.50651%206.15385%206.94154%206.15385L14.6215%206.15385C15.0566%206.15385%2015.4092%206.50651%2015.4092%206.94154V14.6215Z'%20class='fg'/%3e%3cpath%20d='M15.4092%2021.2185C15.4092%2023.7743%2013.3373%2025.8462%2010.7815%2025.8462H6.94154C6.50651%2025.8462%206.15385%2025.4935%206.15385%2025.0585L6.15385%2021.2185C6.15385%2018.6627%208.22574%2016.5908%2010.7815%2016.5908C13.3373%2016.5908%2015.4092%2018.6627%2015.4092%2021.2185Z'%20class='fg'/%3e%3c/svg%3e`;var confidence_flags_default=`data:image/svg+xml,%3csvg%20width='32'%20height='32'%20viewBox='0%200%2032%2032'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cstyle%3e%20.bg%20{%20fill:%20%23000000;%20}%20.fg%20{%20fill:%20%23ffffff;%20}%20@media%20(prefers-color-scheme:%20dark)%20{%20.bg%20{%20fill:%20%23ffffff;%20}%20.fg%20{%20fill:%20%23000000;%20}%20}%20%3c/style%3e%3crect%20width='32'%20height='32'%20rx='4.92308'%20class='bg'/%3e%3cpath%20d='M25.8462%2021.2185C25.8462%2023.7743%2023.7743%2025.8462%2021.2185%2025.8462C18.6627%2025.8462%2016.5908%2023.7743%2016.5908%2021.2185C16.5908%2018.6627%2018.6627%2016.5908%2021.2185%2016.5908C23.7743%2016.5908%2025.8462%2018.6627%2025.8462%2021.2185Z'%20class='fg'/%3e%3cpath%20d='M25.8462%209.10769C25.8462%2012.5879%2023.0249%2015.4092%2019.5446%2015.4092H17.3785C16.9434%2015.4092%2016.5908%2015.0566%2016.5908%2014.6215V6.94154C16.5908%206.50651%2016.9434%206.15385%2017.3785%206.15385L25.0585%206.15385C25.4935%206.15385%2025.8462%206.50651%2025.8462%206.94154V9.10769Z'%20class='fg'/%3e%3cpath%20d='M15.4092%2014.6215C15.4092%2015.0566%2015.0566%2015.4092%2014.6215%2015.4092H6.94154C6.50651%2015.4092%206.15385%2015.0566%206.15385%2014.6215L6.15385%206.94154C6.15385%206.50651%206.50651%206.15385%206.94154%206.15385L14.6215%206.15385C15.0566%206.15385%2015.4092%206.50651%2015.4092%206.94154V14.6215Z'%20class='fg'/%3e%3cpath%20d='M15.4092%2021.2185C15.4092%2023.7743%2013.3373%2025.8462%2010.7815%2025.8462H6.94154C6.50651%2025.8462%206.15385%2025.4935%206.15385%2025.0585L6.15385%2021.2185C6.15385%2018.6627%208.22574%2016.5908%2010.7815%2016.5908C13.3373%2016.5908%2015.4092%2018.6627%2015.4092%2021.2185Z'%20class='fg'/%3e%3c/svg%3e`;var contentful_default=`data:image/svg+xml,%3csvg%20width='80'%20height='80'%20viewBox='0%200%2080%2080'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M31.3383%2013.6374C33.8106%2016.1097%2034.7627%2019.7261%2033.8106%2023.0945C36.8589%2021.2623%2040.3474%2020.3022%2043.8998%2020.3022H43.9718C49.1964%2020.3182%2054.197%2022.4144%2057.8695%2026.1269C60.8138%2029.2232%2065.7104%2029.3433%2068.7988%2026.3989C71.8951%2023.4546%2072.0152%2018.558%2069.0708%2015.4696C68.9988%2015.3896%2068.9188%2015.3176%2068.8388%2015.2376C62.278%208.60478%2053.3409%204.86033%2044.0118%204.84433H43.8758C36.891%204.82833%2030.0661%206.90858%2024.2734%2010.813H24.4895C27.0578%2010.813%2029.5141%2011.8292%2031.3303%2013.6454L31.3383%2013.6374Z'%20fill='%231770E6'/%3e%3cpath%20d='M63.2228%2051.7217C61.1825%2051.7217%2059.2223%2052.5298%2057.7741%2053.9619C54.0937%2057.6264%2049.1091%2059.6826%2043.9085%2059.6826H43.8365C40.276%2059.6826%2036.7796%2058.6985%2033.7393%2056.8423C33.9713%2057.6824%2034.0833%2058.5545%2034.0833%2059.4266C34.0833%2064.7632%2029.7548%2069.0917%2024.4181%2069.0917H24.1621C29.9468%2073.0282%2036.7796%2075.1485%2043.7805%2075.1565H43.9165C53.1976%2075.1725%2062.1027%2071.5%2068.6714%2064.9472C71.7038%2061.9389%2071.7198%2057.0423%2068.7194%2054.01C67.2713%2052.5458%2065.287%2051.7217%2063.2308%2051.7217H63.2228Z'%20fill='%23E44F20'/%3e%3cpath%20d='M17.5772%2052.5862C19.3854%2050.77%2021.8497%2049.7459%2024.418%2049.7539C25.3061%2049.7539%2026.1862%2049.8739%2027.0343%2050.1139C23.2738%2043.8652%2023.2898%2036.0482%2027.0743%2029.8155C21.9217%2031.2317%2016.601%2028.1993%2015.1849%2023.0467C14.9528%2022.2066%2014.8408%2021.3425%2014.8408%2020.4784V20.2144C6.75186%2032.0958%206.71985%2047.7056%2014.7448%2059.627V59.427C14.7448%2056.8587%2015.7529%2054.4024%2017.5772%2052.5862Z'%20fill='%23FFDA00'/%3e%3cpath%20d='M24.5055%2012.5254C22.3052%2012.5254%2020.7691%2013.4375%2018.9048%2015.3017C17.1286%2017.0779%2016.5685%2018.6301%2016.5605%2020.4783C16.5605%2024.8709%2020.121%2028.4233%2024.5135%2028.4233C28.906%2028.4233%2032.4585%2024.8629%2032.4585%2020.4703C32.4585%2016.0858%2028.898%2012.5254%2024.5135%2012.5254H24.5055Z'%20fill='%231770E6'/%3e%3cpath%20d='M16.4492%2059.4346C16.4492%2061.6268%2017.3613%2063.171%2019.2256%2065.0352C21.0018%2066.8115%2022.5539%2067.3795%2024.4022%2067.3795C28.7787%2067.3635%2032.3151%2063.8111%2032.2991%2059.4346C32.2831%2055.0581%2028.7307%2051.5216%2024.3542%2051.5377C19.9856%2051.5537%2016.4572%2055.0901%2016.4572%2059.4586V59.4346H16.4492Z'%20fill='%23E44F20'/%3e%3c/svg%3e`;var databricks_default=`data:image/png;base64,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`;var dbt_semantic_layer_default=`/assets/dbt-semantic-layer-Bm4o12g2.png`;var elevenlabs_default=`data:image/svg+xml,%3csvg%20width='500'%20height='500'%20viewBox='0%200%20500%20500'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20clip-path='url(%23clip0_470_2)'%3e%3crect%20width='500'%20height='500'%20rx='100'%20fill='white'/%3e%3cpath%20d='M314%20355H271V145H314V355Z'%20fill='black'/%3e%3cpath%20d='M229%20355H186V145H229V355Z'%20fill='black'/%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_470_2'%3e%3crect%20width='500'%20height='500'%20fill='white'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e`;var figma_default=`data:image/svg+xml,%3csvg%20width='64'%20height='64'%20viewBox='0%200%2064%2064'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M11.9999%2052.0001C11.9999%2046.4772%2016.477%2042.0001%2021.9999%2042.0001H31.9999V52.0001C31.9999%2057.5229%2027.5227%2062.0001%2021.9999%2062.0001V62.0001C16.477%2062.0001%2011.9999%2057.5229%2011.9999%2052.0001V52.0001Z'%20fill='%2324CB71'/%3e%3cpath%20d='M32%202V22H42C47.5228%2022%2052%2017.5228%2052%2012V12C52%206.47715%2047.5228%202%2042%202L32%202Z'%20fill='%23FF7237'/%3e%3ccircle%20cx='41.9166'%20cy='31.9999'%20r='10'%20fill='%2300B6FF'/%3e%3cpath%20d='M11.9999%2011.9999C11.9999%2017.5228%2016.477%2021.9999%2021.9999%2021.9999L31.9999%2021.9999L31.9999%201.99994L21.9999%201.99994C16.477%201.99994%2011.9999%206.47709%2011.9999%2011.9999V11.9999Z'%20fill='%23FF3737'/%3e%3cpath%20d='M11.9999%2032.0001C11.9999%2037.5229%2016.477%2042.0001%2021.9999%2042.0001H31.9999L31.9999%2022.0001L21.9999%2022.0001C16.477%2022.0001%2011.9999%2026.4772%2011.9999%2032.0001V32.0001Z'%20fill='%23874FFF'/%3e%3c/svg%3e`;var firebase_cloud_messaging_default=`data:image/png;base64,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`;var firecrawl_default=`/assets/firecrawl-C0P1e2_8.ico`;var fireflies_default=`/assets/fireflies-ByblPuPy.png`;var fireworks_ai_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20xmlns:svgjs='http://svgjs.dev/svgjs'%20width='32'%20height='32'%3e%3csvg%20width='32'%20height='32'%20viewBox='0%200%2032%2032'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M15.9851%2019.1274C15.0969%2019.1274%2014.2999%2018.6001%2013.96%2017.7838L9.86258%208H12.2608L15.9991%2016.9499L19.7339%208H22.1321L18.0102%2017.7873C17.6686%2018.6001%2016.8733%2019.1274%2015.9851%2019.1274Z'%20fill='%236720FF'%3e%3c/path%3e%3cpath%20d='M21.3316%2023.8029C20.4469%2023.8029%2019.6533%2023.2792%2019.31%2022.4698C18.9649%2021.6535%2019.1436%2020.7215%2019.7672%2020.0891L27.2299%2012.5302L28.1618%2014.7287L21.3298%2021.636L31.068%2021.5817L32%2023.7802L21.3333%2023.8065L21.3298%2023.8029H21.3316Z'%20fill='%236720FF'%3e%3c/path%3e%3cpath%20d='M0%2023.7766L0.931955%2021.5781L10.6702%2021.6324L3.83993%2014.7234L4.77189%2012.5249L12.2345%2020.0838C12.8582%2020.7145%2013.0386%2021.65%2012.6918%2022.4645C12.3484%2023.2756%2011.5513%2023.7977%2010.6702%2023.7977L0.00350359%2023.7731L0%2023.7766Z'%20fill='%236720FF'%3e%3c/path%3e%3c/svg%3e%3cstyle%3e@media%20(prefers-color-scheme:%20light)%20{%20:root%20{%20filter:%20none;%20}%20}%20@media%20(prefers-color-scheme:%20dark)%20{%20:root%20{%20filter:%20none;%20}%20}%20%3c/style%3e%3c/svg%3e`;var gatewayapi_default=`/assets/gatewayapi-Cnu1G9ls.png`;var gemini_enterprise_default=`/assets/gemini-enterprise-C8b_xt1q.png`;var github_api_default=`data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2018.1.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Layer_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%2036%2036'%20enable-background='new%200%200%2036%2036'%20xml:space='preserve'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20fill='%23191717'%20d='M18,1.4C9,1.4,1.7,8.7,1.7,17.7c0,7.2,4.7,13.3,11.1,15.5%20c0.8,0.1,1.1-0.4,1.1-0.8c0-0.4,0-1.4,0-2.8c-4.5,1-5.5-2.2-5.5-2.2c-0.7-1.9-1.8-2.4-1.8-2.4c-1.5-1,0.1-1,0.1-1%20c1.6,0.1,2.5,1.7,2.5,1.7c1.5,2.5,3.8,1.8,4.7,1.4c0.1-1.1,0.6-1.8,1-2.2c-3.6-0.4-7.4-1.8-7.4-8.1c0-1.8,0.6-3.2,1.7-4.4%20c-0.2-0.4-0.7-2.1,0.2-4.3c0,0,1.4-0.4,4.5,1.7c1.3-0.4,2.7-0.5,4.1-0.5c1.4,0,2.8,0.2,4.1,0.5c3.1-2.1,4.5-1.7,4.5-1.7%20c0.9,2.2,0.3,3.9,0.2,4.3c1,1.1,1.7,2.6,1.7,4.4c0,6.3-3.8,7.6-7.4,8c0.6,0.5,1.1,1.5,1.1,3c0,2.2,0,3.9,0,4.5%20c0,0.4,0.3,0.9,1.1,0.8c6.5-2.2,11.1-8.3,11.1-15.5C34.3,8.7,27,1.4,18,1.4z'/%3e%3c/svg%3e`;var gitlab_api_default=`/assets/gitlab-api-D0BEk8al.png`;var gmail_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='192'%20height='192'%20fill='none'%20viewBox='0%200%20192%20192'%3e%3cpath%20fill='url(%23a)'%20d='M146%2044h38v110c0%206.627-5.373%2012-12%2012h-20a6%206%200%200%201-6-6z'/%3e%3cpath%20fill='%23fc413d'%20d='M46%2044H8v110c0%206.627%205.373%2012%2012%2012h20a6%206%200%200%200%206-6z'/%3e%3cpath%20fill='url(%23b)'%20d='M39.226%2030.456c-8.033-6.752-20.018-5.714-26.77%202.319-6.752%208.032-5.714%2020.017%202.319%2026.77l76.078%2063.949a8%208%200%200%200%2010.295%200l76.078-63.95c8.032-6.752%209.07-18.737%202.318-26.77-6.752-8.032-18.737-9.07-26.769-2.318L96%2078.18z'/%3e%3cdefs%3e%3clinearGradient%20id='a'%20x1='165'%20x2='165'%20y1='44'%20y2='166'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%2360d673'/%3e%3cstop%20offset='.17'%20stop-color='%2342c868'/%3e%3cstop%20offset='.39'%20stop-color='%230ebc5f'/%3e%3cstop%20offset='.62'%20stop-color='%2300a9bb'/%3e%3cstop%20offset='.86'%20stop-color='%233c90ff'/%3e%3cstop%20offset='1'%20stop-color='%233186ff'/%3e%3c/linearGradient%3e%3clinearGradient%20id='b'%20x1='8'%20x2='184'%20y1='46.13'%20y2='46.13'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='.08'%20stop-color='%23ff63a0'/%3e%3cstop%20offset='.3'%20stop-color='%23fc413d'/%3e%3cstop%20offset='.5'%20stop-color='%23fc413d'/%3e%3cstop%20offset='.65'%20stop-color='%23fc413d'/%3e%3cstop%20offset='.72'%20stop-color='%23fc5c30'/%3e%3cstop%20offset='.86'%20stop-color='%23feb10c'/%3e%3cstop%20offset='.91'%20stop-color='%23fec700'/%3e%3cstop%20offset='.96'%20stop-color='%23ffdb0f'/%3e%3c/linearGradient%3e%3c/defs%3e%3c/svg%3e`;var gong_default=`data:image/svg+xml,%3csvg%20width='512'%20height='512'%20viewBox='0%200%20512%20512'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3crect%20width='512'%20height='512'%20rx='85.3333'%20fill='%238039DF'/%3e%3crect%20x='53.4446'%20y='53.4446'%20width='21.3333'%20height='21.3333'%20fill='%233E0075'/%3e%3crect%20x='437.333'%20y='53.3333'%20width='21.3333'%20height='21.3333'%20fill='%233E0075'/%3e%3crect%20x='437.333'%20y='437.333'%20width='21.3333'%20height='21.3333'%20fill='%233E0075'/%3e%3crect%20x='53.3333'%20y='437.333'%20width='21.3333'%20height='21.3333'%20fill='%233E0075'/%3e%3cpath%20d='M427.2%20229.814H328.146C322.677%20229.814%20318.423%20235.887%20320.246%20240.745L343.946%20302.075C345.162%20304.504%20342.731%20307.54%20339.693%20307.54L309.308%20305.719C308.093%20305.719%20306.877%20306.326%20305.662%20307.54L282.57%20340.938C281.354%20342.76%20278.924%20343.367%20276.493%20342.153L241.247%20318.471C240.031%20317.256%20238.208%20317.256%20236.385%20318.471L187.77%20351.261C184.732%20353.69%20180.478%20350.654%20181.693%20347.011L195.67%20298.432C196.278%20296.61%20195.062%20294.181%20193.239%20293.574L167.716%20283.251C165.285%20282.037%20164.07%20279%20165.893%20277.179L188.378%20249.246C189.593%20248.031%20189.593%20245.602%20188.378%20244.388L169.539%20217.062C167.716%20214.634%20169.539%20210.99%20172.578%20210.99L202.355%20208.561C204.785%20208.561%20206.001%20206.74%20206.001%20204.311L203.57%20163.019C203.57%20159.982%20206.608%20158.161%20209.039%20158.768L245.501%20173.949C247.324%20174.556%20249.147%20173.949%20250.362%20172.734L275.885%20144.802C277.708%20142.373%20281.354%20142.98%20282.57%20146.016L297.762%20184.879C299.585%20189.737%20305.662%20191.559%20309.916%20188.522L369.469%20144.194C376.154%20139.337%20371.9%20128.406%20363.392%20129.621L325.108%20134.479C323.285%20134.479%20321.462%20133.871%20320.854%20132.05L300.193%2079.2203C297.762%2073.7552%20291.077%2072.5408%20286.823%2076.7914L241.854%20125.37C240.639%20126.585%20238.816%20127.192%20236.993%20126.585L178.047%20101.688C172.578%2099.2591%20167.109%20102.902%20166.501%20108.975L164.07%20169.698C164.07%20172.127%20162.247%20173.342%20160.424%20173.342L106.339%20176.985C100.263%20177.592%2096.6164%20184.272%20100.263%20189.737L136.116%20242.566C137.332%20243.781%20137.332%20246.21%20136.116%20247.424L99.6549%20289.323C96.6164%20292.36%2098.4395%20299.039%20103.301%20300.861L145.232%20319.078C147.055%20319.685%20148.27%20322.114%20147.662%20323.936L120.924%20427.773C119.101%20435.06%20127.609%20440.525%20133.686%20436.274L233.954%20364.62C235.17%20363.406%20236.993%20363.406%20238.816%20364.62L284.393%20396.804C288.039%20399.233%20293.508%20398.626%20295.939%20394.375L324.5%20350.654C325.108%20349.44%20326.931%20348.832%20328.146%20348.832L396.208%20357.334C401.677%20357.941%20407.146%20353.69%20405.323%20348.225L376.762%20274.75C376.154%20272.928%20376.762%20270.499%20379.192%20269.285L430.846%20244.995C438.138%20241.352%20435.708%20229.814%20427.2%20229.814Z'%20fill='white'/%3e%3c/svg%3e`;var google_ads_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20enable-background='new%200%200%20192%20192'%20height='192'%20viewBox='0%200%20192%20192'%20width='192'%3e%3cg%3e%3crect%20fill='none'%20height='192'%20width='192'/%3e%3cg%3e%3crect%20fill='%23FBBC04'%20height='58.67'%20transform='matrix(0.5%20-0.866%200.866%200.5%20-46.2127%20103.666)'%20width='117.33'%20x='8'%20y='62.52'/%3e%3cpath%20d='M180.07,127.99L121.4,26.38c-8.1-14.03-26.04-18.84-40.07-10.74c-14.03,8.1-18.84,26.04-10.74,40.07%20l58.67,101.61c8.1,14.03,26.04,18.83,40.07,10.74C183.36,159.96,188.16,142.02,180.07,127.99z'%20fill='%234285F4'/%3e%3ccircle%20cx='37.34'%20cy='142.66'%20fill='%2334A853'%20r='29.33'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e`;var google_analytics_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20enable-background='new%200%200%20192%20192'%20height='192'%20viewBox='0%200%20192%20192'%20width='192'%3e%3crect%20fill='none'%20height='192'%20width='192'/%3e%3cg%3e%3cg%3e%3cpath%20d='M174,162c0,13.03-11.08,23.42-24.12,21.84C138.91,182.52,131,172.4,131,161.09c0-28.4,0-101.79,0-130.19%20c0-11.3,7.91-21.43,18.9-22.75C162.94,6.58,174,16.97,174,30V162z'%20fill='%23F6AA1B'/%3e%3cellipse%20cx='39.5'%20cy='162.21'%20fill='%23E27625'%20rx='21.5'%20ry='21.79'/%3e%3cpath%20d='M95.93,74.01C84.12,74.32,75,84.91,75,97.02v58.82c0,15.95,6.9,25.6,17.01,27.69%20c13.85,2.86,25.99-7.88,25.99-21.55V96.01C118,83.66,108.08,73.69,95.93,74.01z'%20fill='%23E27625'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e`;var google_calendar_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='192'%20height='192'%20fill='none'%3e%3cpath%20fill='%23bbe2ff'%20d='M32%2036.8C32%2020.894%2044.894%208%2060.8%208h70.4C147.106%208%20160%2020.894%20160%2036.8v30.4c0%2015.906-12.894%2028.8-28.8%2028.8H60.8C44.894%2096%2032%2083.106%2032%2067.2z'/%3e%3cpath%20fill='%233c90ff'%20d='M19.867%2049.392C17.818%2033.82%2029.94%2020%2045.645%2020h100.71c15.706%200%2027.827%2013.82%2025.778%2029.392L166%2096l6.133%2046.608C174.182%20158.18%20162.061%20172%20146.355%20172H45.645c-15.706%200-27.827-13.82-25.778-29.392L26%2096z'/%3e%3cmask%20id='a'%20width='154'%20height='152'%20x='19'%20y='20'%20maskUnits='userSpaceOnUse'%20style='mask-type:alpha'%3e%3cpath%20fill='%233c90ff'%20d='M19.867%2049.392C17.818%2033.82%2029.94%2020%2045.645%2020h100.71c15.706%200%2027.827%2013.82%2025.778%2029.392L166%2096l6.133%2046.608C174.182%20158.18%20162.061%20172%20146.355%20172H45.645c-15.706%200-27.827-13.82-25.778-29.392L26%2096z'/%3e%3c/mask%3e%3cg%20mask='url(%23a)'%3e%3cpath%20fill='url(%23b)'%20d='M0%200h166v76H0z'%20transform='matrix(1%200%200%20-1%2013%20172)'/%3e%3c/g%3e%3cmask%20id='c'%20width='154'%20height='152'%20x='19'%20y='20'%20maskUnits='userSpaceOnUse'%20style='mask-type:alpha'%3e%3cpath%20fill='%233186ff'%20d='M19.867%2049.392C17.818%2033.82%2029.94%2020%2045.645%2020h100.71c15.706%200%2027.827%2013.82%2025.778%2029.392L166%2096l6.133%2046.608C174.182%20158.18%20162.061%20172%20146.355%20172H45.645c-15.706%200-27.827-13.82-25.778-29.392L26%2096z'/%3e%3c/mask%3e%3cg%20mask='url(%23c)'%3e%3cpath%20fill='url(%23d)'%20d='M32%2027.2C32%2016.596%2040.596%208%2051.2%208h89.6c10.604%200%2019.2%208.596%2019.2%2019.2V96H32z'%20filter='url(%23e)'/%3e%3c/g%3e%3cpath%20fill='%23fff'%20d='M75.353%20133.336q-6.282%200-10.777-2.043t-7.61-5.465q-3.065-3.474-4.342-6.793T51.603%20115a2.07%202.07%200%200%201%201.021-1.124l5.67-2.247q.714-.357%201.43-.102.714.204%201.685%202.349%201.022%202.145%202.86%204.546a14.3%2014.3%200%200%200%204.495%203.728q2.606%201.328%206.435%201.328%206.18%200%209.807-3.575%203.677-3.575%203.677-9.091%200-5.976-3.882-9.194-3.881-3.269-10.266-3.269h-5.362a1.9%201.9%200%200%201-1.328-.51q-.51-.562-.511-1.277v-5.465q0-.767.51-1.277a1.82%201.82%200%200%201%201.329-.562h4.647q5.721%200%209.194-3.116t3.473-8.07q0-4.902-3.116-7.916t-8.58-3.014q-3.065%200-5.312%201.022a11.5%2011.5%200%200%200-3.882%202.86%2022.7%2022.7%200%200%200-2.809%203.78q-1.174%201.941-1.89%202.145-.714.153-1.379-.255l-5.363-2.605q-.664-.358-.868-1.124t1.226-3.575q1.481-2.86%204.494-5.823a21%2021%200%200%201%207.049-4.597q4.035-1.635%209.398-1.634%209.96%200%2015.782%205.26%205.823%205.21%205.823%2013.791%200%205.925-2.86%2010.266-2.81%204.34-7.968%206.13v.204q6.231%201.838%209.806%206.741%203.627%204.853%203.626%2011.594%200%209.654-6.742%2015.834-6.74%206.18-17.57%206.18zm51.25-1.175q-.868%200-1.533-.664a2.25%202.25%200%200%201-.612-1.583V73.118l-11.492%208.274q-.614.46-1.431.307a1.96%201.96%200%200%201-1.225-.766l-3.32-4.7a1.98%201.98%200%200%201-.358-1.43q.153-.816.817-1.276l20.379-14.557q.256-.204.562-.306.307-.153.715-.153h4.291q.868%200%201.379.613.562.56.562%201.43v69.36q0%20.92-.664%201.583a2%202%200%200%201-1.533.664z'/%3e%3cdefs%3e%3clinearGradient%20id='b'%20x1='83'%20x2='83'%20y1='76'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%234fa0ff'/%3e%3cstop%20offset='1'%20stop-color='%233186ff'/%3e%3c/linearGradient%3e%3clinearGradient%20id='d'%20x1='89.06'%20x2='89.06'%20y1='21.75'%20y2='96.39'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23a9a8ff'/%3e%3cstop%20offset='.8'%20stop-color='%233c90ff'/%3e%3c/linearGradient%3e%3cfilter%20id='e'%20width='152'%20height='112'%20x='20'%20y='-4'%20color-interpolation-filters='sRGB'%20filterUnits='userSpaceOnUse'%3e%3cfeFlood%20flood-opacity='0'%20result='BackgroundImageFix'/%3e%3cfeBlend%20in='SourceGraphic'%20in2='BackgroundImageFix'%20result='shape'/%3e%3cfeGaussianBlur%20result='effect1_foregroundBlur_37330_7673'%20stdDeviation='6'/%3e%3c/filter%3e%3c/defs%3e%3c/svg%3e`;var google_docs_default=`data:image/svg+xml,%3csvg%20width='192'%20height='192'%20viewBox='0%200%20192%20192'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cmask%20id='mask0_37242_8762'%20style='mask-type:alpha'%20maskUnits='userSpaceOnUse'%20x='32'%20y='8'%20width='128'%20height='176'%3e%3cpath%20d='M130.334%20184L61.6%20184C52.6565%20184%2048.1848%20184%2044.6375%20182.596C39.5029%20180.563%2035.4374%20176.497%2033.4045%20171.362C32%20167.815%2032%20163.343%2032%20154.4L32%2037.6C32%2028.6565%2032%2024.1848%2033.4045%2020.6375C35.4374%2015.5029%2039.5029%2011.4374%2044.6375%209.40447C48.1848%208%2052.6565%208%2061.6%208L100%208L154.793%2062.7933L154.793%2062.7934C156.454%2064.4543%20157.285%2065.2848%20157.923%2066.2239C158.845%2067.5811%20159.479%2069.1131%20159.785%2070.725C159.997%2071.8404%20159.997%2073.0264%20159.995%2075.3985C159.96%20124.317%20159.938%20124.799%20159.937%20154.366C159.937%20163.332%20159.937%20167.816%20158.532%20171.363C156.499%20176.498%20152.434%20180.562%20147.299%20182.596C143.752%20184%20139.279%20184%20130.334%20184Z'%20fill='%233186FF'/%3e%3c/mask%3e%3cg%20mask='url(%23mask0_37242_8762)'%3e%3cpath%20d='M159.94%20184L31.9999%20184L31.9999%208.00001L99.9999%208L159.999%2068L159.94%20184Z'%20fill='%233186FF'/%3e%3cg%20filter='url(%23filter0_f_37242_8762)'%3e%3cpath%20d='M43%20192H149V70.2271V20H43V192Z'%20fill='url(%23paint0_linear_37242_8762)'/%3e%3c/g%3e%3c/g%3e%3cpath%20d='M154.995%2062.9951C152.489%2061.1143%20149.375%2060%20146%2060H112.8C105.731%2060%20100%2054.2692%20100%2047.2002V8L154.995%2062.9951Z'%20fill='%2376BBFF'/%3e%3crect%20x='64.001'%20y='114'%20width='64'%20height='12'%20rx='6'%20fill='white'/%3e%3crect%20x='64.001'%20y='143'%20width='48'%20height='12'%20rx='6'%20fill='white'/%3e%3cdefs%3e%3cfilter%20id='filter0_f_37242_8762'%20x='31'%20y='8'%20width='130'%20height='196'%20filterUnits='userSpaceOnUse'%20color-interpolation-filters='sRGB'%3e%3cfeFlood%20flood-opacity='0'%20result='BackgroundImageFix'/%3e%3cfeBlend%20mode='normal'%20in='SourceGraphic'%20in2='BackgroundImageFix'%20result='shape'/%3e%3cfeGaussianBlur%20stdDeviation='6'%20result='effect1_foregroundBlur_37242_8762'/%3e%3c/filter%3e%3clinearGradient%20id='paint0_linear_37242_8762'%20x1='96'%20y1='59.2839'%20x2='54.6124'%20y2='171.338'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0.33'%20stop-color='%233186FF'/%3e%3cstop%20offset='1'%20stop-color='%23A9A8FF'/%3e%3c/linearGradient%3e%3c/defs%3e%3c/svg%3e`;var google_drive_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='192'%20height='192'%20fill='none'%3e%3cmask%20id='a'%20width='168'%20height='154'%20x='12'%20y='18'%20maskUnits='userSpaceOnUse'%20style='mask-type:alpha'%3e%3cpath%20fill='%23b43333'%20d='M63.09%2037c14.626-25.333%2051.193-25.334%2065.819%200l45.033%2078c14.626%2025.334-3.657%2057.001-32.91%2057.001H50.967c-29.253%200-47.536-31.667-32.91-57.001z'/%3e%3c/mask%3e%3cg%20mask='url(%23a)'%3e%3cpath%20fill='url(%23b)'%20d='M206.905%20172.02h-91.888l-19.015-32.934%2045.944-79.578z'/%3e%3cpath%20fill='url(%23c)'%20d='M-14.919%20172.006%2050.04%2059.494v.002L31.032%2092.422h38.02L115%20172.004l-129.918.001z'/%3e%3cpath%20fill='url(%23d)'%20d='M96.007-20.085%20141.954%2059.5l-19.011%2032.928H31.048z'/%3e%3c/g%3e%3cdefs%3e%3clinearGradient%20id='b'%20x1='193.6'%20x2='103.09'%20y1='165.6'%20y2='111.21'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='.09'%20stop-color='%23ffe921'/%3e%3cstop%20offset='1'%20stop-color='%23fec700'/%3e%3c/linearGradient%3e%3clinearGradient%20id='c'%20x1='114.4'%20x2='15.53'%20y1='181.61'%20y2='121.8'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='.15'%20stop-color='%23a9a8ff'/%3e%3cstop%20offset='.33'%20stop-color='%236d97ff'/%3e%3cstop%20offset='.48'%20stop-color='%233186ff'/%3e%3c/linearGradient%3e%3clinearGradient%20id='d'%20x1='128.88'%20x2='28.7'%20y1='37.88'%20y2='84.64'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='.55'%20stop-color='%230ebc5f'/%3e%3cstop%20offset='.85'%20stop-color='%2378c9ff'/%3e%3c/linearGradient%3e%3c/defs%3e%3c/svg%3e`;var google_maps_platform_default=`/assets/google-maps-platform-rs6t4EX0.png`;var google_search_console_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACHklEQVR4AWKgFXBoAFRfBhDNRAEAPu5+P4FJKKgREGm2VZF03VKUdG0E0IAiLCgpadVuAbYQFJVUW5FBxLocIMAIITiEaPHUltUtXvcuPWvq6eq96PHB4b7v3r173gGHFH2Yl5S8bgIRPiWv+aL5EY71EBXgkpQcsMQfkzEDnWzky8BJkpfOBpOALvPGRHkJ+HXQfXqylOksiEs5EQu+BqAaICn3QZsB8G8HuDZlh2dPlr0JfxjRFktt/VpA80Eg5EkGgDcZgG80xBZh7fgFdM9csw3w7vvnsbgsoGb03KJx6opNgDvhD2IpIQDROpelH2C+68xXA+pDl9QC8KLDQnIARly6pxfgTcii3YCOBfCHA6DGOYxTPoh4Vnl58rAtyDoAi4sqnyqqAiwlu1MJY5PdbAMKGuc0VF4vk1sUNhzwxtcMz4bbYef2EJsALCcEINZCEv2A4okgYiE5wGJ4dYBugKEKcTsBkdkeugGmRLMTsDsm0g14SvNbpICnwwosx+vAXgD5RPR48m/CkhHI9rtxwPRi748CfJG89sH3LwBSwN10nSXX+1pg3/rgjwLE8lOxoXGuosoTA4yj//DW34Q3pG8HRHMpgpwUwQN9vyrsSQb07wZ0mVOPft0+lRtpzlU45pzG66LMGKe8bpEW4tC8XnY40VAMomElrFePnr+jPQx0U/pK5CGFju5Y/JmcYzgIW++vy/HmEyfImY8XZOkOdzPDZqcAAAAASUVORK5CYII=`;var google_sheets_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='192'%20height='192'%20fill='none'%20viewBox='0%200%20192%20192'%3e%3cpath%20fill='%23009954'%20d='M183.96%20117.4c0%208.94%200%2013.41-1.4%2016.96a20%2020%200%200%201-11.23%2011.24c-3.55%201.4-8.02%201.4-16.97%201.4h-60.8c-8.94%200-13.41%200-16.96-1.4a20%2020%200%200%201-11.23-11.24c-1.4-3.55-1.4-8.02-1.4-16.96V74.6c0-8.94%200-13.42%201.4-16.96A20%2020%200%200%201%2076.6%2046.4C80.15%2045%2084.62%2045%2093.56%2045h60.8c8.95%200%2013.42%200%2016.97%201.4a20%2020%200%200%201%2011.23%2011.24c1.4%203.54%201.4%208.02%201.4%2016.96z'/%3e%3cmask%20id='a'%20width='161'%20height='128'%20x='7'%20y='32'%20maskUnits='userSpaceOnUse'%20style='mask-type:alpha'%3e%3cpath%20fill='%230ebc5f'%20d='M167.96%20130.4c0%208.94%200%2013.41-1.4%2016.96a20%2020%200%200%201-11.23%2011.24c-3.55%201.4-8.02%201.4-16.97%201.4H37.56c-8.94%200-13.41%200-16.96-1.4a20%2020%200%200%201-11.23-11.24c-1.4-3.55-1.4-8.02-1.4-16.96V61.6c0-8.94%200-13.42%201.4-16.96A20%2020%200%200%201%2020.6%2033.4C24.15%2032%2028.62%2032%2037.56%2032h100.8c8.95%200%2013.42%200%2016.97%201.4a20%2020%200%200%201%2011.23%2011.24c1.4%203.54%201.4%208.02%201.4%2016.96z'/%3e%3c/mask%3e%3cg%20mask='url(%23a)'%3e%3cpath%20fill='%230ebc5f'%20d='M167.96%20160h-160V32h160z'/%3e%3cg%20filter='url(%23b)'%3e%3cpath%20fill='url(%23c)'%20d='M183.96%2065a20%2020%200%200%200-20-20h-104a20%2020%200%200%200-20%2020v62a20%2020%200%200%200%2020%2020h104a20%2020%200%200%200%2020-20z'/%3e%3c/g%3e%3c/g%3e%3cpath%20fill='%23fff'%20d='M47.96%20122a6%206%200%200%201-6-6V77h-14a6%206%200%200%201%200-12h14V52a6%206%200%200%201%2012%200v13h58a6%206%200%201%201%200%2012h-58v39a6%206%200%200%201-6%206'/%3e%3cdefs%3e%3clinearGradient%20id='c'%20x1='61.73'%20x2='163.21'%20y1='88.31'%20y2='88.31'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%230ebc5f'/%3e%3cstop%20offset='.95'%20stop-color='%2378c9ff'/%3e%3c/linearGradient%3e%3cfilter%20id='b'%20width='168'%20height='126'%20x='27.96'%20y='33'%20color-interpolation-filters='sRGB'%20filterUnits='userSpaceOnUse'%3e%3cfeFlood%20flood-opacity='0'%20result='BackgroundImageFix'/%3e%3cfeBlend%20in='SourceGraphic'%20in2='BackgroundImageFix'%20result='shape'/%3e%3cfeGaussianBlur%20result='effect1_foregroundBlur_2015_872'%20stdDeviation='6'/%3e%3c/filter%3e%3c/defs%3e%3c/svg%3e`;var google_slides_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='192'%20height='192'%20fill='none'%20viewBox='0%200%20192%20192'%3e%3cpath%20fill='url(%23a)'%20d='M12.591%2063.318c-2.493-15.262%207.858-29.655%2023.12-32.148l96.724-15.8c15.262-2.492%2029.655%207.859%2032.148%2023.12l14.732%2090.189c2.493%2015.262-7.858%2029.655-23.12%2032.148l-96.724%2015.8c-15.262%202.493-29.655-7.858-32.148-23.12z'/%3e%3cpath%20fill='url(%23b)'%20d='M12%2061.6c0-8.943%200-13.415%201.405-16.962a20%2020%200%200%201%2011.233-11.233C28.185%2032%2032.656%2032%2041.6%2032h108.8c8.943%200%2013.415%200%2016.962%201.404a20%2020%200%200%201%2011.234%2011.234C180%2048.185%20180%2052.657%20180%2061.6v68.8c0%208.943%200%2013.415-1.404%2016.962a20%2020%200%200%201-11.234%2011.234C163.815%20160%20159.343%20160%20150.4%20160H41.6c-8.943%200-13.415%200-16.963-1.404a20%2020%200%200%201-11.232-11.234C12%20143.815%2012%20139.343%2012%20130.4z'/%3e%3cmask%20id='e'%20width='168'%20height='128'%20x='12'%20y='32'%20maskUnits='userSpaceOnUse'%20style='mask-type:alpha'%3e%3cpath%20fill='%23fec700'%20d='M12%2061.6c0-8.943%200-13.415%201.405-16.962a20%2020%200%200%201%2011.233-11.233C28.185%2032%2032.656%2032%2041.6%2032h108.8c8.943%200%2013.415%200%2016.962%201.404a20%2020%200%200%201%2011.234%2011.234C180%2048.185%20180%2052.657%20180%2061.6v68.8c0%208.943%200%2013.415-1.404%2016.962a20%2020%200%200%201-11.234%2011.234C163.815%20160%20159.343%20160%20150.4%20160H41.6c-8.943%200-13.415%200-16.963-1.404a20%2020%200%200%201-11.232-11.234C12%20143.815%2012%20139.343%2012%20130.4z'/%3e%3c/mask%3e%3cg%20filter='url(%23c)'%20mask='url(%23e)'%3e%3cpath%20fill='%23ffbe00'%20d='m33.74%20191.516%20144.396-21.58L153.304%203.781%208.907%2025.361z'/%3e%3cpath%20fill='url(%23f)'%20d='m33.74%20191.516%20144.396-21.58L153.304%203.781%208.907%2025.361z'/%3e%3c/g%3e%3cpath%20fill='%23fff'%20fill-rule='evenodd'%20d='M148%2058a6%206%200%200%201%206%206v64a6%206%200%200%201-6%206H44l-.309-.008A6%206%200%200%201%2038%20128V64a6%206%200%200%201%205.691-5.992L44%2058zm-98%2064h92V70H50z'%20clip-rule='evenodd'/%3e%3cdefs%3e%3clinearGradient%20id='a'%20x1='84.07'%20x2='157.2'%20y1='23.27'%20y2='160.82'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='.2'%20stop-color='%23ffdb0f'/%3e%3cstop%20offset='.67'%20stop-color='%23ffbe00'/%3e%3cstop%20offset='.91'%20stop-color='%23ffa8e3'/%3e%3c/linearGradient%3e%3clinearGradient%20id='b'%20x1='96'%20x2='96'%20y1='32'%20y2='160'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23ffbe00'/%3e%3cstop%20offset='1'%20stop-color='%23fec700'/%3e%3c/linearGradient%3e%3clinearGradient%20id='f'%20x1='108.52'%20x2='83.96'%20y1='168.16'%20y2='25.27'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='.07'%20stop-color='%23fff549'/%3e%3cstop%20offset='.78'%20stop-color='%23ffbe00'%20stop-opacity='0'/%3e%3c/linearGradient%3e%3cfilter%20id='c'%20width='193.23'%20height='211.73'%20x='-3.09'%20y='-8.22'%20color-interpolation-filters='sRGB'%20filterUnits='userSpaceOnUse'%3e%3cfeFlood%20flood-opacity='0'%20result='BackgroundImageFix'/%3e%3cfeBlend%20in='SourceGraphic'%20in2='BackgroundImageFix'%20result='shape'/%3e%3cfeGaussianBlur%20result='effect1_foregroundBlur_37552_9023'%20stdDeviation='6'/%3e%3c/filter%3e%3c/defs%3e%3c/svg%3e`;var granola_default=`/assets/granola-7dR8tPQ_.svg`;var hex_default=`data:image/svg+xml,%3csvg%20viewBox='0%200%20280%20280'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3crect%20width='280'%20height='280'%20rx='20'%20fill='%2301011B'/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M61.5382%2086V118.184H52.3075V86H20V112.092V112.184V142.892V178.307H52.3075V132.154H61.5382V178.307H93.8456V86H61.5382ZM103.075%20178.307H176.921V141.384H144.613V164.461H135.383V132.154H176.921V86H103.075V178.307ZM135.383%20118.307V99.8461H144.613V118.307H135.383ZM227.693%20118.307V86H260V109.077L246.154%20125.23L260%20141.384V178.307H227.693V132.03H218.462V178.307H186.154V141.384L200%20125.23L186.154%20109.077V86H218.462V118.307H227.693Z'%20fill='%23F5C0C0'/%3e%3c/svg%3e`;var heygen_default=`/assets/heygen-CeXJ1Sy4.ico`;var hubspot_default=`/assets/hubspot-BQJQ5DfV.png`;var incident_io_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGF0lEQVRoge2aa4yU1RnHf+e8l5nZmWFgQViBdWFh16wIScUQTWzBVKMhGC9cDCFRNEajfrCArUat9kNrQ9C2Ng2mH5r0QhpIE9BYool8IEZTQ433C7sg7qIsrLvL7Nxn5533nH54F2Xj2Dnv7GwIif+v5/+c5//POXPOeZ53RHbjylNAkosTORuYf6FVTAFJCeQutIopICcvtIKp4gcDtWeV4FXQ2TQoBUJMSxqYDgNCgOehlY+89DJ05uy0mpgGAxK/v4/IhvuJ7z6Iu24LaqAvWJVpgMhuXJmlWfeAkOizQ4h4iuS/3gHHBSB/109QJ48j5i0ErZqSagJNPoW0Rg2fJvrwr74RDxB98GlUbqzZ4oFmbiHLRg304qxeh3PjHZOG7GtvwLnmp6ivTzX9t9AcA0IEJ06khdijz9WkOGs3QyELWjcl5Tk0bQXUQB+xbb9FtnfWHLdXXY+Y1w7j5WalBJphwLbxTxzFvflO3Nvv+f5El1yKtWQZKp8BrdFjo+hyCaQ1pfRTM2BZ6KFTyNnziD3z5/r0rmVQyKK9cWRHNwLQw6fBdhqW0LgBIaBYQKVHaPn1XxDJVP1k8xehhrJYnT0kXvw3LTv3IOJJ1GB/wyYaNBCcJP6JT4k98hvsq1ebRc2cjR4Fu3sF2A5Wz4+I/+llkBZ6dKihy64xA5aFOvEZ7k2biNy93ThMuBFkh4O9et23Ai5bSssvd6NGh8D3Q0sJfxPbDmrgGLKtneTet8GJGIfqfAadPYucv/g7Y8Un7sY7dAC5pCeMkZA3sZTos1+DGyH+u32hxAOIRKqmeIDoA09CJArlUjhJodi+jxr6ipandyM7ukOF1hXS0R08/E71h/otmDMtC3+gD/fWrTjX39qAxPpw198XrEK1ahxjbEDnc8jWucR+9mxD4kxgLV2GfdV1qOHTnDvp6sHMgBDoMydx125GzJw9BYn14ay5BfIZU/2GBqpViCdxbt4USozOjqFOHgsVY197Q1A3GL6ZjAzobBq75yqs7hWhxHiv7iWzppvqkcPGMbKtHatrOSqbNuObkHQhi+zsMRYBoE4eZ/wff0C2pihs24B//BPjWNneCeWiGddMjY+c02YsQA0cI3//TajcGNYVV0K1Qvn5nxvHi1Rr0AgwgJkBzaQS8f9Ss2kKOzahM2nkgsXochnZ0UX13bfMt5JhLjA+RgXacEkrL/8d/+gHyEXdUPUmwi3wfar/OWSWLkTRY2bAttHDg0ZUv/f94GmtznvPaAWRaFATG0Cnh40LHSMDIjED//PPzCZsnYsu5icLsGx0PoOYNcdoDv+LXkRihlk+E5JIpvD7PsT/5J26XPe2rYhEKmhmaR20Wvp7EckU7h331o33ez9AHX0PkZxpIs1wC1k2lAp4r++vP2FnD4k/HkB2dKEG+1GD/ciOpcRf2I9lcBR7r+1DFwtg20bSjOsBXS7CeJnkviOImWZbofrREQDs5auM+Do9Qm7T1RCLI6IxkxDzekDEk+ixEUrPP2Yagr18lbF4gNILT6AzaUQ8YZ7DmOn7yI4uKq/swV75Y9zbttakqS9PUNq1A+G44EwU6tUqulwk9ugu5KLLa8ZVXvorlZf+htV1ZajS0twAgLSQ7Z2Udm5DxJM4N67/DkXnM3hvvoaIRIO3PQTt9nyG6ANP1ZzWO7Sf0s7tyIWLwbKMb+HwBpRCJFLgeRSfupfoyBCRzQ9N5jgusq0d4UbAnSg5qx46MaPmDVvZ+yKl3z+OmHVJcPL45sUMNNKV8KuIWXMQ8xZQfm4HxV9swT/28TfDIp6cfImdg/IRLd/ubf/zTyk+toXirh2IuQsQs2aHFg9hV+B8E7EEYskyvDcOUv3wbZw1t+Cu3QzRFojUOEHcKLqQxf/4v1QO/hPv8Cvo9AjWkiuCGriBlgo04wOHZaGLefSZrxCpVmRbO9obD4qg81vp0kJEoqgzX6LHRhFtC4MVaVD4BHKNrcD58H1EJIZY1A1eBTU6FGwjKSe30pWPGjmDaEkEZanWUxUPNLqFakFrsB3EuR5nje8AIp783rFG8cN34gsNycX7TxWApA0McvGayP0PxUAhFMb4f4EAAAAASUVORK5CYII=`;var inngest_default=`data:image/svg+xml,%3csvg%20width='192'%20height='192'%20viewBox='0%200%20192%20192'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M21.4072%20129.294C19.0746%20129.294%2016.9123%20127.809%2016.17%20125.48C12.2674%20113.258%2015.1639%20103.03%2025.2893%2093.2902L66.5214%2054.0973C72.8173%2048.0347%2081.6973%2046.4807%2089.7012%2050.0448C97.6725%2053.5967%20102.419%2061.177%20102.106%2069.8471V74.061C102.106%2077.0843%2099.6441%2079.5303%2096.6097%2079.5303C93.5753%2079.5303%2091.1129%2077.0802%2091.1129%2074.061V69.7421C91.1129%2069.6655%2091.1129%2069.5928%2091.1169%2069.5202C91.2914%2065.3022%2089.0845%2061.7542%2085.2104%2060.0307C81.3363%2058.3072%2077.2066%2059.0297%2074.1641%2061.9681C74.156%2061.9762%2074.1439%2061.9883%2074.1358%2061.9964L32.9159%20101.177C25.8816%20107.946%2024.0602%20114.037%2026.6565%20122.166C27.5774%20125.044%2025.9749%20128.12%2023.0825%20129.036C22.5268%20129.21%2021.9669%20129.294%2021.4152%20129.294H21.4072Z'%20fill='%23292524'/%3e%3cpath%20d='M112.284%20144.019C109.371%20144.019%20106.41%20143.397%20103.562%20142.13C95.591%20138.578%2090.8447%20130.998%2091.1571%20122.328V118.142C91.1571%20115.119%2093.6195%20112.673%2096.6539%20112.673C99.6883%20112.673%20102.151%20115.123%20102.151%20118.142V122.433C102.151%20122.509%20102.151%20122.582%20102.147%20122.659C101.972%20126.877%20104.179%20130.425%20108.053%20132.148C111.927%20133.872%20116.057%20133.149%20119.099%20130.211L160.031%2091.0136C167.195%2084.1195%20169.025%2078.0569%20166.335%2070.0972C165.37%2067.2314%20166.915%2064.1315%20169.796%2063.1668C172.676%2062.2062%20175.791%2063.744%20176.761%2066.6098C180.797%2078.5574%20177.824%2089.1165%20167.67%2098.8885L126.746%20138.077C122.698%20141.985%20117.566%20144.023%20112.284%20144.023V144.019Z'%20fill='%23292524'/%3e%3cpath%20d='M42.9198%20143.918C39.6664%20143.918%2036.4211%20143.333%2033.3339%20142.126C33.0337%20142.009%2032.7336%20141.888%2032.4374%20141.758C29.6464%20140.564%2028.3604%20137.347%2029.5612%20134.57C30.762%20131.793%2033.9952%20130.513%2036.7862%20131.708C36.9728%20131.789%2037.1593%20131.865%2037.3459%20131.938C42.8995%20134.102%2049.4267%20132.818%2054.3921%20128.592C54.6274%20128.378%2055.4022%20127.655%2055.5077%20127.555L129.485%2057.4512C129.485%2057.4512%20131.075%2055.9578%20131.42%2055.6712C136.45%2051.4532%20142.162%2048.9264%20147.939%2048.3654C149.164%2048.2443%20150.405%2048.208%20151.626%2048.2524C154.357%2048.3452%20157.35%2048.6358%20160.604%2050.1333C163.358%2051.4048%20164.559%2054.654%20163.281%2057.3987C162.003%2060.1394%20158.738%2061.3342%20155.979%2060.0627C154.576%2059.4169%20153.18%2059.2514%20151.237%2059.1868C150.491%2059.1586%20149.748%2059.1828%20149.01%2059.2555C145.472%2059.5985%20141.862%2061.2373%20138.56%2063.9941C138.296%2064.2323%20137.237%2065.2171%20137.067%2065.3746L63.0897%20135.482C63.0897%20135.482%2061.8766%20136.62%2061.6089%20136.85C56.2014%20141.484%2049.5443%20143.918%2042.9198%20143.922V143.918Z'%20fill='%23292524'/%3e%3c/svg%3e`;var klipy_default=`/assets/klipy-DId2OM2v.ico`;var lexware_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20xmlns:svgjs='http://svgjs.dev/svgjs'%20width='32'%20height='32'%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%20viewBox='0%200%2032%2032'%3e%3cdefs%3e%3cstyle%3e%20.cls-1%20{%20fill:%20%23ff4554;%20}%20%3c/style%3e%3c/defs%3e%3c!--%20Generator:%20Adobe%20Illustrator%2028.6.0,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%201.2.0%20Build%20709)%20--%3e%3cg%3e%3cg%20id='SvgjsG1023'%3e%3cg%3e%3cpolygon%20class='cls-1'%20points='22.2%2017.7%2017.4%2023.6%2021.4%2028.5%2024.1%2028.5%2027.5%2028.5%2031%2028.5%2022.2%2017.7'%3e%3c/polygon%3e%3cpolygon%20class='cls-1'%20points='30.8%203.5%2027.5%203.5%2027.5%203.5%2027.5%203.5%2027.5%203.5%2024.1%203.5%2024.1%203.5%2021.4%203.5%2017.4%208.4%2022.2%2014.3%2022.2%2014.3%2031%203.5%2030.8%203.5'%3e%3c/polygon%3e%3cpolygon%20class='cls-1'%20points='15.7%209.6%2010.7%203.5%201%203.5%201%203.5%206%209.6%2011.2%2016%206%2022.4%201%2028.5%2010.4%2028.5%2010.7%2028.5%2015.7%2022.4%2020.8%2016%2015.7%209.6'%3e%3c/polygon%3e%3c/g%3e%3c/g%3e%3c/g%3e%3c/svg%3e%3cstyle%3e@media%20(prefers-color-scheme:%20light)%20{%20:root%20{%20filter:%20none;%20}%20}%20@media%20(prefers-color-scheme:%20dark)%20{%20:root%20{%20filter:%20none;%20}%20}%20%3c/style%3e%3c/svg%3e`;var lightspeed_default=`data:image/svg+xml,%3csvg%20width='32'%20height='32'%20viewBox='0%200%2032%2032'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M16.3236%201L17.7569%203.48479C17.9007%203.73688%2017.9763%204.02199%2017.9763%204.31209C17.9763%204.6022%2017.9007%204.88731%2017.7569%205.1394L9.28015%2019.8935L13.2763%2026.8498C13.5811%2027.3881%2014.0235%2027.8359%2014.5584%2028.1475C15.0933%2028.4591%2015.7015%2028.6233%2016.3207%2028.6233C16.94%2028.6233%2017.5481%2028.4591%2018.0829%2028.1475C18.6179%2027.8359%2019.0604%2027.3881%2019.3651%2026.8498L23.3612%2019.8935L22.2806%2018.0042L17.7569%2025.9051C17.6118%2026.1567%2017.403%2026.3656%2017.1514%2026.5108C16.8997%2026.6561%2016.6142%2026.7325%2016.3236%2026.7325C16.0329%2026.7325%2015.7474%2026.6561%2015.4957%2026.5108C15.2442%2026.3656%2015.0353%2026.1567%2014.8902%2025.9051L11.4502%2019.8935L19.3049%206.18999L20.7383%208.67193C20.8825%208.92436%2020.9585%209.20999%2020.9585%209.50066C20.9585%209.79133%2020.8825%2010.077%2020.7383%2010.3294L15.2428%2019.8935L16.3236%2021.76L22.2862%2011.38L26.1936%2018.1759C26.4881%2018.6918%2026.643%2019.2753%2026.643%2019.8692C26.643%2020.463%2026.4881%2021.0466%2026.1936%2021.5625L22.2203%2028.4815C21.6069%2029.5406%2019.7321%2031.9167%2016.3149%2031.9167C12.8979%2031.9167%2011.0346%2029.5521%2010.424%2028.4815L6.45362%2021.5768C6.15639%2021.0592%206%2020.473%206%2019.8764C6%2019.2798%206.15639%2018.6934%206.45362%2018.1759L16.3236%201Z'%20fill='%23E81C1C'/%3e%3c/svg%3e`;var linear_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='16'%20height='16'%20viewBox='0%200%2016%2016'%3e%3crect%20width='16'%20height='16'%20rx='2'%20fill='%23000'/%3e%3cpath%20d='M2.147%209.383c-.027-.114.109-.186.192-.103l4.381%204.38c.083.083.011.219-.103.192a6.02%206.02%200%200%201-4.47-4.47ZM2%207.627a.12.12%200%200%200%20.035.091l6.247%206.247a.12.12%200%200%200%20.091.035q.428-.027.836-.111a.117.117%200%200%200%20.057-.198L2.31%206.734a.117.117%200%200%200-.198.057%206%206%200%200%200-.11.836Zm.505-2.062a.12.12%200%200%200%20.025.132l7.773%207.773a.12.12%200%200%200%20.132.025q.322-.144.623-.322a.118.118%200%200%200%20.022-.185L3.012%204.92a.118.118%200%200%200-.185.022q-.178.3-.322.623m1.014-1.396a.12.12%200%200%201-.005-.163%206.006%206.006%200%201%201%208.48%208.48.12.12%200%200%201-.163-.005z'%20fill='%23FFF'%20/%3e%3c/svg%3e`;var linkedin_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADkAAAA5CAYAAACMGIOFAAAEtElEQVR4Ae2aA5DkWhSG82xb+2wbpafis+2xZ2pHa9u2ObZt27btWf3vnk5l2X3T894i6eq/6p+dyT03nS8nuXtOJ4JWuQZ/wLyFOY+5g3lAge5lrmYOZrZgvlrQQwT3AHMAM1ToBuYf5AApe33MULlX6gJ8ihkG5EVnA17O3MIMA/OHp0PaM8MA3XA6ZIfeEycHQnAMoH/VAvqpBAmup4RCcPCH8MchCFY+EJwYpKUP/U3baVzJkIfkIQnA3AuCjS+svAoQVdmJ4rZBRFR0wsIzX7NdsPBWMmgeH9I9RJO5y219EV/dDW2Kq+qCYO1DcRSvyPuSD+kcBOGvw/At6wBPfmxc+NuD4pUI2cSHNPHE6+uToY/e3JBC8SrM5O8HsSS+GvpoYVwVhN8Oqg+SLtXd2U3QRzuzGsXV1kVlkJQZ17Ay6CPn0DLKvAozaeWDu2dFQB/dOzuS4lUI6R6iyY69XxF4svMtFC9VtxAVQrqJZRwBWHjkYWjsGE7XwOhRWBzOoxNBcRSvPkgpmxIoXbomXgWYEVGBvz0LcOfMcAZ4iI0HSYWASiHJbuQQsbL58xBlTvzX2pfgzn8GnYOoPiaLJ9gl6AJDEhx9mL2/btP46fejBO3AmUNjUiydKAIz8RTvbXNvCHZ+oi29xWrqd7E5kI7p/GfSRfpXizXbOfM4vkzTAISIcMxvr07EgqhKhLAyMb2xFxnM0ZVd2JHRAAt2mzw0J1I8CdY+1BCcv9qVzuRW9iF1PSOo0WLaviOrgeJO1a4sAzfOCNd0K7Va5tC23JZ+XDs9DMJ3e/DIzAj4F7RCTkePHcf6hBpc5RhA2SXQ8wRp6onkul7wlNbQQ3GnIG18cMuscMhJMPHAqwuiMcIOfiKq6BrGA9PCGOhhAj0PkKyXDChpB0/BZe0UdwrS1hc3s5V3aPwYdCm1vhfPLo7FGP6bqvpGxauH7ls3hUKWtg+iil22/0fz4qsh/HqAFiJlQp4PHT1+Ale40Brgb7iQpM/2ZNOKqx7I+s4hlLNVd3j8KPTVxrR6Kk6UD7ktuwkvz4/GZY5i0XGnWzCsPPOhj5LreqhIoMpIuZB7c5shfLtH06ALBOnETAf92Q58fSAHcmrqH5OqK2VCjh49jqunhooVj/tZZSHB/uOBnOZ+8DTG9nHrrAj6alSRkLRfyqDumvmXA5gfUwU5Pbwohv7PVCbkgtgqsfB20/31i5VMw056cmkcBAuFQjoHl3KXf2rnfj6YCzk9pWRI+4BiLiRdyt/vz1F3Jm31gPxB7ZB25wfSCGmENEIaIY2QRkgjpBHSCNkkD2nigfyWAfBU1D5AcacgrX00jaycZkdVaHpG3pNuM+8CyOn5FQkQTL107aeaD+lCWfGDnX8xdmQ2YjvzDi12CCymuFPPRBz9cd20UGxMradxnf54WzovA5q3vt5am0yxXN8zN4q+ZNa1n2T9nk9S1/2Ph27TOMWd3tW7iE+puPPowKaGyr/uRrE8Tw7kPR9dIkEmcUFdyEEc65oXNPF5E9+P3PzHJcj3mGGAPnz2i727DAxwnPlmba9oJxoQ5Hu8l+33qhyugfktQUYE+jNzNvOAitzMvIL5Bm1I/wJ/Y1lMazKh/AAAAABJRU5ErkJggg==`;var logo_dev_default=`data:image/webp;base64,UklGRoQFAABXRUJQVlA4THgFAAAvf8AfAA1dYCGi/9EuCgQACZKj3eQ++STJP7m75JI7ib8kySUnckJe/sglwV3+SDghd0kkkktC7iSS491J7pPc3Z0QTk4S3gMC+ZdPDiT/5PkQCQRciCBxAkEkkoTgP5Lkdqnu3enZ7Xb/4AoBEAAAAADAAQCAAwAABwAAAAAAAAAAAAAcAAAAAAAAAAgADwAAAIAAAAAAAAAAAAAABADgAIAAAIDCAQAAAAAAWAAAAAAAAABwAAAAAAAAAAAAgAcAAAAAAAAAAAAAAAAAAAAeAAAAAAAADyAAAAAAAGgAAAAIAABAAQAAAAQBDgAAAAAAAAAAAAAAwAEABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAgAUAAAAAABAAAAAAgAAHwAEAAAAAAAAAAAAAAgAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAPAAAAAAIIBIGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMgJDjQJN7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL8NCAigho326WjbxMVTVd0PAABgcodN//+Fq+/gcY1+u8Kjxv3Nix8kHMySfc7x3MLQ5XAwJ1rFbwaDuMLKPMTMwcSUecWMhDBJY+8qZr7IxzAKlidkWGRNJZ9sVb9JSH6H/H3+zmEIdSQi1BwO4uz1DEUVb0KGDTE2oLM4iLuLlwngKxhU446ImeGmviecah2JsPWheNj5K9+xnd6Z/bzqLV4M6qiEE42IRWFutPwK+QQm2L50W9qBzIv3PNeZcgdvjxYpTjEapFjN0w4dvvTzH0wQ29OIrFBlxtGUbY6EXivSzuB7phBIezzVrADu6Dfd4pfbSSzqKkUpVPApwcyNtpA19qHZHEYb3bxlyMvVGIruZggcAQrSnizZbcSh1TXo1+DjibRMRTAVIE057nr/OwMxyGEcKEQiM8vIA2umG3HO5huGoy5IIeFFOBv7K63eLI+g5LJwo0agDf9MB+zSYWdPp5lOUzjFOiYIEcKt+iOKN+vMJSf8NHmBs8Fo7jYRlfy58gESHgB/6yBopgFNLm2z7a7cXFzNlwDhd+DsHXAm1CUnYotF+wrJpFy6kdveHUAvnGLw5WjjdygVdzQl5ogfcBaUYm4wXi9yE20WctQr9xoMH/FDX4PzuuCliB/8EUccwiqF0BhQvfcLQYMg6MA5Tsa0lIz25gJB4CGka3wb8L1mnfi4x9acIpBPpksUcBtnO9AeBKI/2J5d/Ivodx4XidxwNW59d73TLOkIGWa/kcdaajjEYfaxseXkpxhajoCk66nluxzIkZz3IP6bW5WyhXJEpP9mDlGECOJmrvgr8t8TkLEoJENGaQfUoBQx2QIYZ1vMry7Guj8h3VGUbiH8K+VxiMWGPA3IENOs6r8d+Wu67mPgkPyezV8+/4m424+GTh5jHbMQMta+/+JCjRaslM9AaEzYZudc3IwHnV2Pc5H5Yyu3gUzyNRRBSqaSL3BbpGgNQ4Rs3grVanQE/PA2nWeIhnpb0YCYw/N4jE47WlfzpF9UycZeTKDlI9QbBk9q6+kVQdawFYTQ8YFMF7m7ZFmS1psWZsDNiBSb7Uwr/yVhaP8fSfjW6KptoFXHRm9IgGTqhdiSYI/S0NrBS4J1kb6to4w3bUW8V4OoLwpaAYaogUAIm+FrHsXtE2Zwgt/5X+7KOG8MYhCKRmz49RESlzqWyoVDod52FsQVi3x6eReYEPYB7Yv9ybm/1UOp9CGKxt5H+Lo2mhTA9OIogJ3TF0whA9NsR/ynshAN04om03/OAA==`;var mailgun_default=`/assets/mailgun-jMUCQaNg.ico`;var mapbox_default=`/assets/mapbox-d4keJUxZ.png`;var microsoft_excel_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2048%2048'%3e%3cdefs%3e%3clinearGradient%20id='a'%20x1='5.822'%20y1='11.568'%20x2='20.178'%20y2='36.432'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%2318884f'/%3e%3cstop%20offset='.5'%20stop-color='%23117e43'/%3e%3cstop%20offset='1'%20stop-color='%230b6631'/%3e%3c/linearGradient%3e%3c/defs%3e%3cpath%20d='M29%2023l-17-3v22.167A1.833%201.833%200%200%200%2013.833%2044h29.334A1.833%201.833%200%200%200%2045%2042.167V34z'%20fill='%23185c37'/%3e%3cpath%20d='M29%204H13.833A1.833%201.833%200%200%200%2012%205.833V14l17%2010%209%203%207-3V14z'%20fill='%2321a366'/%3e%3cpath%20fill='%23107c41'%20d='M12%2014h17v10H12z'/%3e%3cpath%20fill='none'%20d='M0%200h48v48H0z'/%3e%3cpath%20d='M24.167%2012H12v25h12.167A1.839%201.839%200%200%200%2026%2035.167V13.833A1.839%201.839%200%200%200%2024.167%2012z'%20opacity='.1'/%3e%3cpath%20d='M23.167%2013H12v25h11.167A1.839%201.839%200%200%200%2025%2036.167V14.833A1.839%201.839%200%200%200%2023.167%2013z'%20opacity='.2'/%3e%3cpath%20d='M23.167%2013H12v23h11.167A1.839%201.839%200%200%200%2025%2034.167V14.833A1.839%201.839%200%200%200%2023.167%2013z'%20opacity='.2'/%3e%3cpath%20d='M22.167%2013H12v23h10.167A1.839%201.839%200%200%200%2024%2034.167V14.833A1.839%201.839%200%200%200%2022.167%2013z'%20opacity='.2'/%3e%3crect%20x='2'%20y='13'%20width='22'%20height='22'%20rx='1.833'%20fill='url(%23a)'/%3e%3cpath%20d='M7.677%2029.958l3.856-5.975L8%2018.041h2.842l1.928%203.8c.178.361.3.629.366.806h.025q.19-.432.4-.839l2.061-3.765h2.609l-3.623%205.907%203.715%206.008h-2.776l-2.227-4.171a3.5%203.5%200%200%201-.266-.557h-.033a2.638%202.638%200%200%201-.258.54l-2.293%204.188z'%20fill='%23fff'/%3e%3cpath%20d='M43.167%204H29v10h16V5.833A1.833%201.833%200%200%200%2043.167%204z'%20fill='%2333c481'/%3e%3cpath%20fill='%23107c41'%20d='M29%2024h16v10H29z'/%3e%3c/svg%3e`;var microsoft_fabric_default=`/assets/microsoft-fabric-CkTccQJB.svg`;var microsoft_onedrive_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2048%2048'%3e%3cpath%20d='M28%2027s8.854-6.054%209.045-6.041A13.126%2013.126%200%200%200%2013.366%2017h.134z'%20fill='%230364b8'/%3e%3cpath%20d='M19.016%2018.564A10.447%2010.447%200%200%200%2013.5%2017h-.134a10.5%2010.5%200%200%200-8.479%2016.5L19%2032l8.833-8.155z'%20fill='%230f78d4'/%3e%3cpath%20d='M37.045%2020.959a8.455%208.455%200%200%200-.576-.021%208.506%208.506%200%200%200-3.382.7l-5.254%202.21L34%2031l9.98%202.517a8.532%208.532%200%200%200-6.935-12.558z'%20fill='%231490df'/%3e%3cpath%20d='M36.529%2029.054l-2.178-1.3-4.994-2.991-1.524-.913-4.019%201.692-7.7%203.238-3.452%201.45-7.775%203.27A10.484%2010.484%200%200%200%2013.5%2038h22.969a8.531%208.531%200%200%200%207.511-4.483z'%20fill='%2328a8ea'/%3e%3cpath%20fill='none'%20d='M0%200h48v48H0z'/%3e%3c/svg%3e`;var microsoft_onenote_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2048%2048'%3e%3cdefs%3e%3clinearGradient%20id='a'%20x1='5.822'%20y1='11.568'%20x2='20.178'%20y2='36.432'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%238324b3'/%3e%3cstop%20offset='.5'%20stop-color='%237a1bac'/%3e%3cstop%20offset='1'%20stop-color='%23621197'/%3e%3c/linearGradient%3e%3c/defs%3e%3cpath%20d='M35%2044H13.831A1.831%201.831%200%200%201%2012%2042.169V5.831A1.831%201.831%200%200%201%2013.831%204h29.338A1.831%201.831%200%200%201%2045%205.831V14z'%20fill='%23ca64ea'/%3e%3cpath%20fill='%23ae4bd5'%20d='M45%2024l-5%203-5-3V14h10v10z'/%3e%3cpath%20fill='%239332bf'%20d='M45%2034l-5%203-5-3V24h10v10z'/%3e%3cpath%20d='M35%2034h10v8.125A1.875%201.875%200%200%201%2043.125%2044H35V34z'%20fill='%237719aa'/%3e%3cpath%20fill='none'%20d='M0%200h48v48H0z'/%3e%3cpath%20d='M24.167%2012H12v25h12.167A1.839%201.839%200%200%200%2026%2035.167V13.833A1.839%201.839%200%200%200%2024.167%2012z'%20opacity='.2'/%3e%3cpath%20d='M23.167%2013H12v25h11.167A1.839%201.839%200%200%200%2025%2036.167V14.833A1.839%201.839%200%200%200%2023.167%2013z'%20opacity='.2'/%3e%3cpath%20d='M23.167%2013H12v23h11.167A1.839%201.839%200%200%200%2025%2034.167V14.833A1.839%201.839%200%200%200%2023.167%2013z'%20opacity='.5'/%3e%3cpath%20d='M22.167%2013H12v23h10.167A1.839%201.839%200%200%200%2024%2034.167V14.833A1.839%201.839%200%200%200%2022.167%2013z'%20opacity='.5'/%3e%3crect%20x='2'%20y='13'%20width='22'%20height='22'%20rx='1.833'%20fill='url(%23a)'/%3e%3cpath%20d='M8.026%2018.042h2.485l4.883%207.9q.333.531.5.855h.032a12.032%2012.032%200%200%201-.072-1.62v-7.135h2.12v11.916h-2.326l-5.066-8.119A6.313%206.313%200%200%201%2010.13%2021h-.04a17.54%2017.54%200%200%201%20.063%201.778v7.18H8.026z'%20fill='%23fff'/%3e%3c/svg%3e`;var microsoft_outlook_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2048%2048'%3e%3cdefs%3e%3clinearGradient%20id='a'%20x1='28.5'%20y1='25'%20x2='28.5'%20y2='44'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%2335b8f1'/%3e%3cstop%20offset='1'%20stop-color='%2328a8ea'/%3e%3c/linearGradient%3e%3clinearGradient%20id='b'%20x1='5.822'%20y1='11.568'%20x2='20.178'%20y2='36.432'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%231784d9'/%3e%3cstop%20offset='.5'%20stop-color='%23107ad5'/%3e%3cstop%20offset='1'%20stop-color='%230a63c9'/%3e%3c/linearGradient%3e%3c/defs%3e%3cpath%20d='M45%2025a.96.96%200%200%200-.458-.825h-.005l-.018-.01-14.9-8.82a2.026%202.026%200%200%200-.2-.119%202%202%200%200%200-1.834%200%202.026%202.026%200%200%200-.2.119l-14.9%208.82-.018.01a.971.971%200%200%200%20.023%201.663l14.9%208.82a2.241%202.241%200%200%200%20.2.119%202%202%200%200%200%201.834%200%202.241%202.241%200%200%200%20.2-.119l14.9-8.82A.959.959%200%200%200%2045%2025z'%20fill='%230a2767'/%3e%3cpath%20fill='%230364b8'%20d='M14.222%2019.111H24v8.963h-9.778zM43%2010V5.9A1.858%201.858%200%200%200%2041.187%204H15.813A1.858%201.858%200%200%200%2014%205.9V10l15%204z'/%3e%3cpath%20fill='%230078d4'%20d='M14%2010h10v9H14z'/%3e%3cpath%20fill='%2328a8ea'%20d='M34%2010H24v9l10%209h9v-9l-9-9z'/%3e%3cpath%20fill='%230078d4'%20d='M24%2019h10v9H24z'/%3e%3cpath%20fill='%230364b8'%20d='M24%2028h10v9H24z'/%3e%3cpath%20fill='%2314447d'%20d='M14.222%2028.074H24v8.148h-9.778z'/%3e%3cpath%20fill='%230078d4'%20d='M34%2028h9v9h-9z'/%3e%3cpath%20d='M44.542%2025.783l-.019.01-14.9%208.38c-.065.04-.131.078-.2.112a2.077%202.077%200%200%201-.808.2l-.814-.476a2.033%202.033%200%200%201-.2-.115l-15.1-8.618h-.007L12%2025v16.964A2.05%202.05%200%200%200%2014.063%2044h28.906c.017%200%20.032-.008.05-.008a2.531%202.531%200%200%200%20.7-.146A2.019%202.019%200%200%200%2044%2043.7c.067-.038.182-.121.182-.121A2.019%202.019%200%200%200%2045%2041.964V25a.9.9%200%200%201-.458.783z'%20fill='url(%23a)'/%3e%3cpath%20d='M44.2%2024.933v1.04L28.62%2036.7%2012.49%2025.283a.01.01%200%200%200-.01-.01l-1.48-.89v-.75l.61-.01%201.29.74.03.01.11.07s15.16%208.65%2015.2%208.67l.58.34c.05-.02.1-.04.16-.06.03-.02%2015.05-8.47%2015.05-8.47z'%20fill='%230a2767'%20opacity='.5'/%3e%3cpath%20fill='none'%20d='M0%200h48v48H0z'/%3e%3cpath%20d='M44.542%2025.783l-.019.011-14.9%208.38c-.065.04-.131.078-.2.112a2.089%202.089%200%200%201-1.834%200%202.264%202.264%200%200%201-.2-.112l-14.9-8.38-.018-.011A.9.9%200%200%201%2012%2025v16.964A2.049%202.049%200%200%200%2014.062%2044h28.876A2.049%202.049%200%200%200%2045%2041.964V25a.9.9%200%200%201-.458.783z'%20fill='%231490df'/%3e%3cpath%20d='M29.84%2034.05l-.223.125a2.183%202.183%200%200%201-.2.113%202.071%202.071%200%200%201-.786.208L34.3%2041.2l9.889%202.383a2.038%202.038%200%200%200%20.627-.783z'%20opacity='.1'/%3e%3cpath%20d='M30.85%2033.482l-1.233.693a2.183%202.183%200%200%201-.2.113%202.071%202.071%200%200%201-.786.208l2.656%207.323%2012.905%201.761A2.022%202.022%200%200%200%2045%2041.964v-.219z'%20opacity='.05'/%3e%3cpath%20d='M14.09%2044h28.845a2.074%202.074%200%200%200%201.235-.4L27.8%2034.011a2.033%202.033%200%200%201-.2-.115l-15.1-8.618h-.007L12%2025v16.906A2.092%202.092%200%200%200%2014.09%2044z'%20fill='%2328a8ea'/%3e%3cpath%20d='M26%2013.833v21.33a1.838%201.838%200%200%201-1.15%201.7%201.723%201.723%200%200%201-.68.14H12V13h2v-1h10.17A1.837%201.837%200%200%201%2026%2013.833z'%20opacity='.1'/%3e%3cpath%20d='M25%2014.833v21.33a1.629%201.629%200%200%201-.15.7A1.822%201.822%200%200%201%2023.17%2038H12V13h11.17a1.679%201.679%200%200%201%20.83.21%201.818%201.818%200%200%201%201%201.623z'%20opacity='.2'/%3e%3cpath%20d='M25%2014.833v19.33A1.846%201.846%200%200%201%2023.17%2036H12V13h11.17a1.679%201.679%200%200%201%20.83.21%201.818%201.818%200%200%201%201%201.623z'%20opacity='.2'/%3e%3cpath%20d='M24%2014.833v19.33A1.839%201.839%200%200%201%2022.17%2036H12V13h10.17A1.831%201.831%200%200%201%2024%2014.833z'%20opacity='.2'/%3e%3crect%20x='2'%20y='13'%20width='22'%20height='22'%20rx='1.833'%20fill='url(%23b)'/%3e%3cpath%20d='M7.729%2020.688a5.332%205.332%200%200%201%202.094-2.313%206.33%206.33%200%200%201%203.327-.834%205.892%205.892%200%200%201%203.079.791%205.284%205.284%200%200%201%202.037%202.21%207.133%207.133%200%200%201%20.714%203.25%207.528%207.528%200%200%201-.735%203.4%205.41%205.41%200%200%201-2.1%202.287%206.126%206.126%200%200%201-3.194.812%206.02%206.02%200%200%201-3.147-.8%205.366%205.366%200%200%201-2.064-2.214%206.963%206.963%200%200%201-.722-3.211%207.733%207.733%200%200%201%20.711-3.378zm2.232%205.43a3.461%203.461%200%200%200%201.178%201.522%203.077%203.077%200%200%200%201.84.554%203.223%203.223%200%200%200%201.964-.572%203.315%203.315%200%200%200%201.144-1.522%205.908%205.908%200%200%200%20.365-2.123%206.463%206.463%200%200%200-.344-2.15A3.4%203.4%200%200%200%2015%2020.241a3.043%203.043%200%200%200-1.947-.6%203.175%203.175%200%200%200-1.883.559%203.49%203.49%200%200%200-1.2%201.535%206.1%206.1%200%200%200-.008%204.385z'%20fill='%23fff'/%3e%3cpath%20fill='%2350d9ff'%20d='M34%2010h9v9h-9z'/%3e%3c/svg%3e`;var microsoft_powerpoint_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2048%2048'%3e%3cdefs%3e%3clinearGradient%20id='a'%20x1='5.822'%20y1='11.568'%20x2='20.178'%20y2='36.432'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%23ca4c28'/%3e%3cstop%20offset='.5'%20stop-color='%23c5401e'/%3e%3cstop%20offset='1'%20stop-color='%23b62f14'/%3e%3c/linearGradient%3e%3c/defs%3e%3cpath%20d='M28%2026L25%204h-.224A19.834%2019.834%200%200%200%205%2023.776V24z'%20fill='%23ed6c47'/%3e%3cpath%20d='M25.224%204H25v20l10%204%2010-4v-.224A19.834%2019.834%200%200%200%2025.224%204z'%20fill='%23ff8f6b'/%3e%3cpath%20d='M45%2024v.22A19.837%2019.837%200%200%201%2025.22%2044h-.44A19.837%2019.837%200%200%201%205%2024.22V24z'%20fill='%23d35230'/%3e%3cpath%20fill='none'%20d='M0%200h48v48H0z'/%3e%3cpath%20d='M26%2013.83v21.34a1.841%201.841%200%200%201-1.14%201.69%201.772%201.772%200%200%201-.69.14H9.72c-.28-.32-.55-.66-.8-1A19.614%2019.614%200%200%201%205%2024.22v-.44A19.555%2019.555%200%200%201%208.22%2013c.22-.34.45-.68.7-1h15.25A1.844%201.844%200%200%201%2026%2013.83z'%20opacity='.1'/%3e%3cpath%20d='M25%2014.83v21.34a1.772%201.772%200%200%201-.14.69A1.841%201.841%200%200%201%2023.17%2038H10.63a17.1%2017.1%200%200%201-.91-1c-.28-.32-.55-.66-.8-1A19.614%2019.614%200%200%201%205%2024.22v-.44A19.555%2019.555%200%200%201%208.22%2013h14.95A1.844%201.844%200%200%201%2025%2014.83z'%20opacity='.2'/%3e%3cpath%20d='M25%2014.83v19.34A1.844%201.844%200%200%201%2023.17%2036H8.92A19.614%2019.614%200%200%201%205%2024.22v-.44A19.555%2019.555%200%200%201%208.22%2013h14.95A1.844%201.844%200%200%201%2025%2014.83z'%20opacity='.2'/%3e%3cpath%20d='M24%2014.83v19.34A1.844%201.844%200%200%201%2022.17%2036H8.92A19.614%2019.614%200%200%201%205%2024.22v-.44A19.555%2019.555%200%200%201%208.22%2013h13.95A1.844%201.844%200%200%201%2024%2014.83z'%20opacity='.2'/%3e%3crect%20x='2'%20y='13'%20width='22'%20height='22'%20rx='1.833'%20fill='url(%23a)'/%3e%3cpath%20d='M13.2%2017.889a5.039%205.039%200%200%201%203.338.978A3.5%203.5%200%200%201%2017.7%2021.7a3.942%203.942%200%200%201-.573%202.117%203.829%203.829%200%200%201-1.627%201.438%205.524%205.524%200%200%201-2.447.514h-2.319v4.31H8.359v-12.19zm-2.468%206.018h2.044a2.654%202.654%200%200%200%201.807-.539%202%202%200%200%200%20.611-1.577q0-2.015-2.342-2.015h-2.12z'%20fill='%23fff'/%3e%3c/svg%3e`;var microsoft_sharepoint_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2048%2048'%3e%3cdefs%3e%3clinearGradient%20id='a'%20x1='5.822'%20y1='11.568'%20x2='20.178'%20y2='36.432'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%23058f92'/%3e%3cstop%20offset='.5'%20stop-color='%23038489'/%3e%3cstop%20offset='1'%20stop-color='%23026d71'/%3e%3c/linearGradient%3e%3c/defs%3e%3ccircle%20cx='24'%20cy='15'%20r='12'%20fill='%23036c70'/%3e%3ccircle%20cx='34'%20cy='26'%20r='11'%20fill='%231a9ba1'/%3e%3ccircle%20cx='25.5'%20cy='36.5'%20r='8.5'%20fill='%2337c6d0'/%3e%3cpath%20fill='none'%20d='M0%200h48v48H0z'/%3e%3cpath%20d='M26%2013.83v21.34a1.841%201.841%200%200%201-1.14%201.69%201.772%201.772%200%200%201-.69.14h-7.16c-.01-.17-.01-.33-.01-.5a4.18%204.18%200%200%201%20.02-.5%208.473%208.473%200%200%201%205.09-7.29v-1.86A11.986%2011.986%200%200%201%2012.17%2013a8.455%208.455%200%200%201%20.21-1h11.79A1.837%201.837%200%200%201%2026%2013.83z'%20opacity='.1'/%3e%3cpath%20d='M23.17%2013h-11a11.987%2011.987%200%200%200%2010.4%2013.915c-3.1%201.47-5.359%205.645-5.551%209.085a4.18%204.18%200%200%200-.02.5c0%20.17%200%20.33.01.5a6.673%206.673%200%200%200%20.13%201h6.03a1.841%201.841%200%200%200%201.69-1.14%201.772%201.772%200%200%200%20.14-.69V14.83A1.837%201.837%200%200%200%2023.17%2013z'%20opacity='.2'/%3e%3cpath%20d='M23.17%2013h-11a11.988%2011.988%200%200%200%2010.208%2013.891c-3%201.576-5.17%205.741-5.358%209.109h6.15A1.844%201.844%200%200%200%2025%2034.17V14.83A1.837%201.837%200%200%200%2023.17%2013z'%20opacity='.2'/%3e%3cpath%20d='M22.17%2013h-10a11.988%2011.988%200%200%200%208.87%2013.632A16.522%2016.522%200%200%200%2017.02%2036h5.15A1.837%201.837%200%200%200%2024%2034.17V14.83A1.831%201.831%200%200%200%2022.17%2013z'%20opacity='.2'/%3e%3crect%20x='2'%20y='13'%20width='22'%20height='22'%20rx='1.833'%20fill='url(%23a)'/%3e%3cpath%20d='M10.187%2023.776a3.384%203.384%200%200%201-1.049-1.109%203.018%203.018%200%200%201-.365-1.517%202.919%202.919%200%200%201%20.679-1.965%204.011%204.011%200%200%201%201.806-1.178%207.629%207.629%200%200%201%202.467-.382%209.392%209.392%200%200%201%203.25.455v2.3a5.073%205.073%200%200%200-1.47-.6%207.159%207.159%200%200%200-1.719-.206%203.719%203.719%200%200%200-1.767.374%201.159%201.159%200%200%200-.7%201.062%201.076%201.076%200%200%200%20.3.752%202.69%202.69%200%200%200%20.8.572q.5.249%201.5.662a1.519%201.519%200%200%201%20.214.086%2012.341%2012.341%200%200%201%201.892.933%203.387%203.387%200%200%201%201.118%201.126%203.264%203.264%200%200%201%20.4%201.7%203.162%203.162%200%200%201-.636%202.046%203.557%203.557%200%200%201-1.7%201.144%207.71%207.71%200%200%201-2.424.352%2012.824%2012.824%200%200%201-2.2-.18%207.534%207.534%200%200%201-1.783-.524v-2.425a5.746%205.746%200%200%200%201.8.86%207.042%207.042%200%200%200%201.986.318%203.42%203.42%200%200%200%201.8-.382A1.208%201.208%200%200%200%2015%2026.971a1.15%201.15%200%200%200-.34-.826%203.425%203.425%200%200%200-.937-.653q-.6-.3-1.767-.791a10.044%2010.044%200%200%201-1.769-.925z'%20fill='%23fff'/%3e%3c/svg%3e`;var microsoft_teams_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2048%2048'%3e%3cdefs%3e%3clinearGradient%20id='a'%20x1='5.822'%20y1='11.568'%20x2='20.178'%20y2='36.432'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%235a62c3'/%3e%3cstop%20offset='.5'%20stop-color='%234d55bd'/%3e%3cstop%20offset='1'%20stop-color='%233940ab'/%3e%3c/linearGradient%3e%3c/defs%3e%3cpath%20d='M31.993%2019H43.1a1.9%201.9%200%200%201%201.9%201.9v10.117A6.983%206.983%200%200%201%2038.017%2038h-.033A6.983%206.983%200%200%201%2031%2031.017V19.993a.993.993%200%200%201%20.993-.993z'%20fill='%235059c9'/%3e%3ccircle%20cx='39.5'%20cy='12.5'%20r='4.5'%20fill='%235059c9'/%3e%3ccircle%20cx='25.5'%20cy='10.5'%20r='6.5'%20fill='%237b83eb'/%3e%3cpath%20d='M34.167%2019H15.833A1.88%201.88%200%200%200%2014%2020.923v11.539A11.279%2011.279%200%200%200%2025%2044a11.279%2011.279%200%200%200%2011-11.538V20.923A1.88%201.88%200%200%200%2034.167%2019z'%20fill='%237b83eb'/%3e%3cpath%20fill='none'%20d='M0%200h48v48H0z'/%3e%3cpath%20d='M26%2019v16.17a1.841%201.841%200%200%201-1.14%201.69%201.772%201.772%200%200%201-.69.14h-9.29c-.13-.33-.25-.66-.35-1a12.179%2012.179%200%200%201-.53-3.54V20.92A1.877%201.877%200%200%201%2015.83%2019z'%20opacity='.1'/%3e%3cpath%20d='M25%2019v17.17a1.772%201.772%200%200%201-.14.69A1.841%201.841%200%200%201%2023.17%2038h-7.82c-.17-.33-.33-.66-.47-1s-.25-.66-.35-1a12.179%2012.179%200%200%201-.53-3.54V20.92A1.877%201.877%200%200%201%2015.83%2019z'%20opacity='.2'/%3e%3cpath%20d='M25%2019v15.17A1.844%201.844%200%200%201%2023.17%2036h-8.64a12.179%2012.179%200%200%201-.53-3.54V20.92A1.877%201.877%200%200%201%2015.83%2019z'%20opacity='.2'/%3e%3cpath%20d='M24%2019v15.17A1.844%201.844%200%200%201%2022.17%2036h-7.64a12.179%2012.179%200%200%201-.53-3.54V20.92A1.877%201.877%200%200%201%2015.83%2019z'%20opacity='.2'/%3e%3cpath%20d='M26%2013.83v3.15c-.17.01-.33.02-.5.02s-.33-.01-.5-.02a5.489%205.489%200%200%201-1-.16A6.5%206.5%200%200%201%2019.5%2013a5.556%205.556%200%200%201-.32-1h4.99A1.837%201.837%200%200%201%2026%2013.83z'%20opacity='.1'/%3e%3cpath%20d='M25%2014.83v2.15a5.489%205.489%200%200%201-1-.16A6.5%206.5%200%200%201%2019.5%2013h3.67A1.837%201.837%200%200%201%2025%2014.83z'%20opacity='.2'/%3e%3cpath%20d='M25%2014.83v2.15a5.489%205.489%200%200%201-1-.16A6.5%206.5%200%200%201%2019.5%2013h3.67A1.837%201.837%200%200%201%2025%2014.83z'%20opacity='.2'/%3e%3cpath%20d='M24%2014.83v1.99A6.5%206.5%200%200%201%2019.5%2013h2.67A1.837%201.837%200%200%201%2024%2014.83z'%20opacity='.2'/%3e%3crect%20x='2'%20y='13'%20width='22'%20height='22'%20rx='1.833'%20fill='url(%23a)'/%3e%3cpath%20d='M17.824%2019.978h-3.665v9.98h-2.335v-9.98H8.176v-1.936h9.648z'%20fill='%23fff'/%3e%3c/svg%3e`;var microsoft_word_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2048%2048'%3e%3cdefs%3e%3clinearGradient%20id='a'%20x1='5.822'%20y1='11.568'%20x2='20.178'%20y2='36.432'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%232368c4'/%3e%3cstop%20offset='.5'%20stop-color='%231a5dbe'/%3e%3cstop%20offset='1'%20stop-color='%231146ac'/%3e%3c/linearGradient%3e%3c/defs%3e%3cpath%20d='M43.167%204H13.833A1.833%201.833%200%200%200%2012%205.833V14l17%205%2016-5V5.833A1.833%201.833%200%200%200%2043.167%204z'%20fill='%2341a5ee'/%3e%3cpath%20fill='%232b7cd3'%20d='M45%2014H12v10l17%203%2016-3V14z'/%3e%3cpath%20fill='%23185abd'%20d='M12%2024v10l16%202%2017-2V24H12z'/%3e%3cpath%20d='M13.833%2044h29.334A1.833%201.833%200%200%200%2045%2042.167V34H12v8.167A1.833%201.833%200%200%200%2013.833%2044z'%20fill='%23103f91'/%3e%3cpath%20fill='none'%20d='M0%200h48v48H0z'/%3e%3cpath%20d='M24.167%2012H12v25h12.167A1.839%201.839%200%200%200%2026%2035.167V13.833A1.839%201.839%200%200%200%2024.167%2012z'%20opacity='.1'/%3e%3cpath%20d='M23.167%2013H12v25h11.167A1.839%201.839%200%200%200%2025%2036.167V14.833A1.839%201.839%200%200%200%2023.167%2013z'%20opacity='.2'/%3e%3cpath%20d='M23.167%2013H12v23h11.167A1.839%201.839%200%200%200%2025%2034.167V14.833A1.839%201.839%200%200%200%2023.167%2013z'%20opacity='.2'/%3e%3cpath%20d='M22.167%2013H12v23h10.167A1.839%201.839%200%200%200%2024%2034.167V14.833A1.839%201.839%200%200%200%2022.167%2013z'%20opacity='.2'/%3e%3crect%20x='2'%20y='13'%20width='22'%20height='22'%20rx='1.833'%20fill='url(%23a)'/%3e%3cpath%20d='M9.522%2027.058c.036.283.06.529.071.74h.042q.024-.3.1-.723t.137-.715l1.928-8.318h2.493l2%208.193a12.133%2012.133%200%200%201%20.249%201.546h.033a11.853%2011.853%200%200%201%20.208-1.5l1.595-8.243h2.269l-2.802%2011.92h-2.651l-1.9-7.894c-.055-.227-.118-.524-.187-.889s-.112-.632-.129-.8h-.033q-.033.291-.129.864t-.154.848l-1.786%207.869H8.18L5.363%2018.042h2.31l1.737%208.335c.039.171.076.399.112.681z'%20fill='%23fff'/%3e%3c/svg%3e`;var miro_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAAKlBMVEVMaXH62TL/3TL/3TP/3zT/3TP/3TMcHB58bSc2MiFZUCSrlirewTDGrS6/psk0AAAABnRSTlMA7lyIIKo0OOpZAAAACXBIWXMAABYlAAAWJQFJUiTwAAAEY0lEQVR42s2b7ZrqIAyEl37QQOD+b/esukdbnUDSdpvlJ/qQNzMBWoWvL6FNwziHEE9oIczjMH2Z2jCeEnqDMQ/q8OdH/2HQ6fBb4e8IYxdh+MXwDxWa4ac5/noLk1/6PRHGeFEbcfw5XtZmFD/EC1twzR9qMMaL21sdDPHytpkLU7geYLMeOMTflMEQXdrgacDGhDE6tdFXgKcEQ4y+EgQ/gOAswGMizJ4Ao68Ddw8m+VNatRUmr7rLq7uuullNMLVKgJZXSy+Cuu5+hQpp1Z+Luggaq9BmyPQaMq+6F4Jg6/5OEbRqcC3BimAbKQcItqSq25FaNbiN9CIg3L/9+rcIRVOFzUmQcaSyDfQsBFqED1oAzY/fcnoSvEciUDTvlSO0NkB8G/G/r+U90E8hvIMpirED8DEiC/2PVD8l6PrQAfgc8TFcSTgOL6A1i7EDAESlptgZEbRE6AEEIRAS+7b81QU2uRh7ACglEiS4hyFMsFDYCYBSIkGCm9awvyFCFwC6eksHp0qiBMteAFjY35ujkGouggRppwUfi9FTUCHVJPTzbgASLJXcTsnggAZACJSK6LbBAQ2AqLXo9rLo9wQNQJWSyrgMLQ6oAPD6KjayOKADqCYAtjigA4gWszNUoB4D4EXvNmeLA0oAPBPhkpOgXHQQAM9EgttENDlwCACuA7WYHNACZLjtwFBsckALgHJlHIr1G5EeAOdK0OxscuDANCQhVLa9G3ztrsGCfCHoFh8GQO8b6IH5mwr1hqMAAdZVhQ6A3hyPAlSYK0Ot2eaADgC/BhHc9MnmwO7ngYoKI8Pv5ngYIMGZjbVONgdUAAWGKtCBoH8Y0wMwHJSh1tXowM6nYoK9DGH5OECC23sGr2sIqxwGCHhzSbofKHI8DFChAwVrnYwOaAAYqsp4z7U6oAHAqhJ0oFgeBXa/njPEqlAtOg4gJJVgL1kd2PMLCcGpQdCurgMKAJxUxakmqwM7fqTKUJefVPUvJHoAPLEz/gXX7ID9d8KEp0aButAJAMKYeMFlswP2n2oL1JrhlxUO9AGSKtUCAegEgKL6wyJj2noCAIM9/zNVhhu3xgHrHxaEUw1wxtAZABl6XXAktj0KqAASFFWIRHYHegDFFCmbHsZUAIw314y9TnYHegCqSBU/vYYzADSRkvCvejwBQBWJsF98BkDFQzJ+6iLbw5gGQBgy49mWdzjQARAOayQsddrhQAcg4a1FkHqPA22AgqUuWOqyx4E2AGMHGEvNexxoAxDW1NbdAwjKEsi4NIXuFNVnuYJyGWLM1e/uAcy6ZSgJpRnwC0TRH60ddSVAuDQz5kqG83yDbhkqmIsxF0X9icbGcb78ausRadW/nrOr7mI4zud+oNHvVPH/493uh1rdj/V6ejD8jaPd7ofb/Y/3u19wcDreHf7SJRf3az7+F538r3r5X3bzv+7nf+HR/8rnNevBPP3la783EZwvPt+vvQfP8A8j5vMvv4+D7QL+Vdf//wEiJIEtRtSRlQAAAABJRU5ErkJggg==`;var n8n_default=`/assets/n8n-CViEi-uo.ico`;var notion_default=`/assets/notion-egi6fb2a.png`;var oura_default=`data:image/png;base64,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`;var paddle_default=`/assets/paddle-PTFXjZtt.ico`;var perplexity_default=`/assets/perplexity-CwIseVmg.ico`;var pipedrive_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADkAAAA5CAMAAAC7xnO3AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADeUExURQAAAACAQABwMAB4OABwOAB6NQB1OgB1NQB4OAB0OAB2OQB2NgB4OAB1OAJ3NwB2OQB2NwJ3NwJ3NgJ3NwB3NwJ3NwB3OAJ2NgB2NgF3NwF3NgB3NwB3NwF1NwB1NwF3OAF3NwB3OAB3NwF3NwF3NgF2NwB2NwF3NwF3NwB3NwF3NwF3Nv///+/38+/38t/u5s/m2c/l2s/l2b/dza/VwKDMtJ/MtJDEp5DDqJDDp4C7m3Czj3CzjnCyj2CqglCidVChdkCZaTGRXTCRXTCRXDCQXSGIUCCIUBF/RAF3N2IgZcAAAAAsdFJOUwAQECAgMDAwQEBQUGBgb3Bwj4+QkJ+foKCvr6+wsLC/v7+/z8/Pz9Df3+/vG4DFfgAAAgNJREFUeNqd1et20lAQhuHBqEVJWpR4wKpFKO0uiUlr2oqoaJQmfPd/Qy1NYEj2IRueX1ks3jVMTpDSU6/XFwGAYDTovXTI0oueQJV4c0DNvAFURl7TPAEdYWqdAUz62oUPA5hNuqT0Cs1ek6w1gI1+SwrPYWdUTz/A1sBuxzxN0/+mXQ9RmiaPbnMAyKZRuBJdz7Gty6EToJSEpRT4EbI4B5vwde1DKi+LQzZXrepBLkM+UqRtKgipVPmaY0PwSF0ZR3ycgHm0Mgabz2bf+KvpEljchGtpbdPnqNp8c4rCnD+obvpOU8ZY+73eFMzn8yOVqbx99Rw5kEppwC/FhXGooykTsLuy/Anmka8pb8GyspxVFj3Zs/xIY0152fBrBQWNZ4iv6B+wCQH2V+UfwPTllTQyhl0ZfkchjcLCDbap9uQ7HkDOr4YMlT2FXLKIn7L6yFP6JJdqcYZtQ8U9ZBXCJ09TXsXGEB3ts5JkScimS9Q4REJTAn+vo2LeLAPjd5hvesoWabpYQuEtEbV1pdEzenCyR3lKK+4epUuPxM6loEJbV5pH8qb25bH0/2lZBg5tHO1UdomYv0PpE6ususwL5iXZkzHsnLeonvZhY8ihcle7HdlRALOgSxrOZ5gMHdJzBXREm8zcM/U8l5odvBeouvDbZMnp+F/OAgDBxbHvqte7B2OaieXxJBWIAAAAAElFTkSuQmCC`;var polar_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAVFBMVEVMaXEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhs3HqAAAAG3RSTlMA+Tgkj/HC3WkP6Z3NgNVcrwZApRd2l0svuFKY7s38AAAACXBIWXMAAAsTAAALEwEAmpwYAAAByklEQVR42m1TibKjMAxzgJwQSrkK6P//c2UoR3eeZzqta0Wy7ETkjiXUa0pumAr5K0KLK1KO/5c3D9QNYLRuPGz4rc8sL51BHsuagBCA9UnigCA+odJkoISeSOOzvkny2RypBT4CYxFv/hdBMeUjnwAnFao2HXkPUgd8CryPP6KBkYi0HJKS4OVNWe9PyRUopUURoG28gIIqvSCfgEk1qSHomLVoSGCo1J+AApgo2kpD1VJbDqilxmWLTWT5wJJ9Y80qSy/+7JHhSU8antaDnYz8LQq8B3MAImUc5V5sY4S/Ad0OsOzNcmwbG66ZNzdg2HvwZIAYynfMtyeg5moCVnVAJwU/gTLtk2Hb59BzfgMZWs4lIN2AlZNsaH8i7cTiATDjwyZd0faKQRbMBKsTLBeAbB/aj3pNxFjKVPyDNOckecixtwydbgZPr2T6Lne/AKXoWOy+rDeqUadobhsVuN6CXwTuyy0b6rfflGFqISdnXX979oFc86VRIjruwV7GI3ihdWrm2KfrMpvzN6OUvMedanTHdXEoY9KLdkXUh9HzVc1v4VdT0LRffp4WLa9eXyV5XF536G+UMx4x/PXA42t23trUDOHeivwDcIcm+XPo6+QAAAAASUVORK5CYII=`;var posthog_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='300'%20height='300'%20fill='none'%20viewBox='0%200%20300%20300'%3e%3crect%20width='300'%20height='300'%20fill='%23000'/%3e%3cpath%20fill='%23fff'%20d='M33%20179.379L72.0038%20218.33H33V179.379ZM33%20169.641L81.7548%20218.33H120.759L33%20130.689V169.641ZM33%20120.951L130.51%20218.33H169.513L33%2082V120.951ZM81.7548%20120.951L179.264%20218.33V179.379L81.7548%2082V120.951ZM130.51%2082V120.951L179.264%20169.641V130.689L130.51%2082Z'/%3e%3cpath%20fill='%23fff'%20d='M266.863%20203.174C256.87%20203.174%20247.291%20199.208%20240.231%20192.158L186%20138V218.754H266.863V203.174Z'/%3e%3cpath%20fill='%23000'%20d='M209.563%20202.75C213.871%20202.75%20217.363%20199.262%20217.363%20194.959C217.363%20190.657%20213.871%20187.169%20209.563%20187.169C205.254%20187.169%20201.762%20190.657%20201.762%20194.959C201.762%20199.262%20205.254%20202.75%20209.563%20202.75Z'/%3e%3cpath%20fill='%23fff'%20d='M33%20218.33H72.0038L33%20179.379V218.33Z'/%3e%3cpath%20fill='%23fff'%20d='M81.7548%20130.689L33%2082V120.951L81.7548%20169.641V130.689Z'/%3e%3cpath%20fill='%23fff'%20d='M33%20130.689V169.641L81.7548%20218.33V179.379L33%20130.689Z'/%3e%3cpath%20fill='%23fff'%20d='M130.51%20130.689L81.7548%2082V120.951L130.51%20169.641V130.689Z'/%3e%3cpath%20fill='%23fff'%20d='M81.7548%20218.33H120.759L81.7548%20179.379V218.33Z'/%3e%3cpath%20fill='%23fff'%20d='M81.7548%20130.689V169.641L130.51%20218.33V179.379L81.7548%20130.689Z'/%3e%3c/svg%3e`;var prestashop_default=`/assets/prestashop-BQtyl3tL.ico`;var replicate_default=`/assets/replicate-CKiqAkf2.png`;var resend_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADkAAAA5CAYAAACMGIOFAAAACXBIWXMAAAsTAAALEwB3nayOAAAAAXNSR0IB2cksfwAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABGdBTUEAALGPC/xhBQAAAzhJREFUeNrlm9uN4jAUhimBEugAOoAOKIHZLQCoAKYC6AC2AmYrgA6gglEQVwmBhvDCTSibLyKjDGImdmLntpGOeAHsz8c+57d9kstJPvP5vLJYLJrL5fLN/jTsz4/1em3pMrs9025ncm+vaVspp+MxDCNvN9Kmsc1mYx0OB+t0OlnX69W63W7ajXaOx6PTLu0zuLa9KAOczWa/8JZpmpFB+dnlcrF2u114WLxn/8Fou906f5oEuB9g+/bULkgB8gNGiemRRLhHo5/0VxiUL65WK4M1lwZA1+gv/fYFdT2YNkAvKP1nqX0LaQeYflqmqM/UHT0FJEqxiNMM6BrBcjqd/n4GaSQ1igaJuqS9L9M2S150bb/fo5ZeM+lFr0pCobmAJaRSlgBdgwutDWRTNqK+v79bvV5PiQ0GA2s8HuuMtE3SxhviV+bHdM6eBEotn89btVrNGUCVedP25F88OZEV3jogvVav11WuS4P9oSn7Y92QGF5VAUoqQcpZSYTEOp1OaEj4AkEOh0NnpINYpVKRWqdh83dgyLBGcKlWq0KgDGgqIV0rFou+kO12O92Q3W5XewCKHVIkgDUajXRDAuAHyUCkFpLgUygUfCHDKqDYIImYIoAqBEFkkOQ6wFqtllUul4VSB4OgQsdqhQQMxQIUSV1G6agC1AqJx4LuRMiLKk8ptEDiAdFtlWt4PKyyiRSSzop4DW9HEeS0QDLVRNdgFKDa1qTMVkw3qNbomhRQ7XmSAyrRqavqyCMWMSADqurIIxbFI6pTdYBGql1lQNlMqxIEkQv0OEBj2YXIgirZanEumdS9pAqxzrmyc6MVR+kKHRc5yAoD+nmzxV3I+XyO5XSANcdWDAg/43uya5Q7HvcupJn2OgHfWy3u77J8P/lZixfkZisNdQPOjZan8vGVO/YsQd7L0V4eqyA/slT98cWL3mpI6l8y6cWHWp5RRiqy+n7ln0ZceVNVbZ1QESHVhmkDFa6S/G/qXR9A/7CIk1y5TLAklvxY/un3EKUYpSTBIlzI66S9p9WQYWHdtwkQv1G+TUCM8LxNMEHAhPKeD2zJ814IjZk63wvBW/f3T5z3QpxaOcnnH3sz9lYT9VTiAAAAAElFTkSuQmCC`;var salesforce_default=`/assets/salesforce-aAWnuvNz.ico`;var sanity_default=`data:image/svg+xml,%3csvg%20width='192'%20height='192'%20viewBox='0%200%20192%20192'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M146.306%20108.9L142.197%20101.77L122.32%20113.84L144.397%2085.8165L147.735%2083.864L146.909%2082.6271L148.425%2080.6954L141.459%2074.9142L138.27%2078.9652L73.9066%20116.508L97.7035%2087.9775L142.027%2063.7548L137.816%2055.6389L113.674%2068.8273L125.562%2054.5827L118.752%2048.6L91.9963%2080.6746L65.4237%2095.204L85.7678%2068.3895L98.5159%2061.7745L94.4674%2053.5682L57.3267%2072.8435L67.4547%2059.4814L60.38%2053.8322L39%2082.0434L39.3317%2082.3075L43.3261%2090.4165L67.0282%2078.1106L45.4248%20106.579L48.9656%20109.407L51.0711%20113.465L76.0257%2099.8248L48.5458%20132.775L55.3566%20138.758L56.7241%20137.118L123.017%2098.3239L101.007%20126.271L101.366%20126.57L101.332%20126.591L105.895%20134.505L135.169%20116.724L123.897%20134.86L131.452%20139.8L149.4%20110.929L146.306%20108.9Z'%20fill='%230D0E12'%20/%3e%3c/svg%3e`;var semrush_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='48'%20height='48'%20fill='none'%20viewBox='0%200%2048%2048'%3e%3cpath%20fill='%23c190ff'%20d='M32.54%209c-2.22%200-4.65.81-7.35%202.23L11%2019h12L0%2031h25l-13%207.06L32.9%2038c7.84-.2%2014.1-6.6%2014.1-14.5S40.5%209%2032.54%209'/%3e%3c/svg%3e`;var sentry_default=`/assets/sentry-Y4ADGpgF.ico`;var sevdesk_default=`/assets/sevdesk-Dr_WIz1k.png`;var shopify_default=`data:image/png;base64,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`;var slack_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAiCAMAAADiW5DOAAABDlBMVEUAAAD/xgD/swD/xgD/wgDgCnDrCmxIt1hDtFrjB2o+ulrkB2tEu13mBmr5wQbkBWdCuFdBtFr6vwUAsv8Asf8AtP8Asv8As/8AtP9AuFb7vwTnB23/vgMAsv//wANBtVdBtVnmBmwAs//8wQMAtP8As//jBWsAs//jB2xDtVf6wAUAsv/lBmnmBmxDt1nmB2vkB2pBt1gAtP/9wgNCt1n8wAP8wANCtlgAs/8AtP8Atf8Atv8At/8AuP9BtlhBt1hCuFlCuVlCuVpCulpDu1pDvFtEvVxEvlzjBmrkBmrkBmvlBmvnBmzoBmzqBm3rBm7tBm/8wAP9wQP/wgP/wwP/xAP/xQP/xgP/xwP/yAN1pSH6AAAAOHRSTlMACQoSFRkaICIkJSYpKS0vMjM4PD5BQkNERERLS0xNT1ZaXmJjZWZsbW9xfn6Cio2OkZaam6qutiE9PJgAAAEnSURBVDjLrdBnV8MgFAbg1733qHvvvSWNiaMOqq2WVq3+/z8i3EgCiuegx/fLvQeehAtAlqGIRcOqmSvEN51wZZSp5ID1WKXbZUIyIUAkvnYZlkSb2GUCD7PpYXDgYXT+aHIhS5NfsMzReXzVL+sIs7JkmFOq7UBkm7xhknqbPl2ab+YCOLNJoLcKurkDxmyzDOzT1rg2bXLo6cD4y6q66Y48YPbzgpcD+MesFbmMbHZl2VMrxyJLdUouzHOemC2q28CJsDIIlLW5p1oEbCLeAK5N2nwxNeBJf56aqm3qQAftrBhm0TYNcuiuR16ehGEw82JM02S+QWZ+zq8MnXHoYcSGh3n2MMJlSkRK+g3rLtNHpgeYINPsHLq18lBpUU3ve+21MVv/AMnhmxQ0lrxLAAAAAElFTkSuQmCC`;var snowflake_default=`/assets/snowflake-CP8ObIkg.svg`;var storyblok_default=`data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3csvg%20width='32'%20height='32'%20viewBox='0%200%2032%2032'%20fill='none'%20version='1.1'%20id='svg1'%20sodipodi:docname='favicon.svg'%20inkscape:version='1.4%20(e7c3feb1,%202024-10-09)'%20inkscape:export-filename='favicon.png'%20inkscape:export-xdpi='3840'%20inkscape:export-ydpi='3840'%20xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape'%20xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:svg='http://www.w3.org/2000/svg'%3e%3cdefs%20id='defs1'%20/%3e%3csodipodi:namedview%20id='namedview1'%20pagecolor='%23ffffff'%20bordercolor='%23000000'%20borderopacity='0.25'%20inkscape:showpageshadow='2'%20inkscape:pageopacity='0.0'%20inkscape:pagecheckerboard='0'%20inkscape:deskcolor='%23d1d1d1'%20inkscape:zoom='18.909091'%20inkscape:cx='12.084135'%20inkscape:cy='10.3125'%20inkscape:window-width='2560'%20inkscape:window-height='1387'%20inkscape:window-x='2'%20inkscape:window-y='25'%20inkscape:window-maximized='0'%20inkscape:current-layer='svg1'%20/%3e%3crect%20style='fill:%23ffffff'%20id='rect1'%20width='22.528847'%20height='23.586538'%20x='4.7067308'%20y='2.5384614'%20/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M%201.743,2.6012379%20C%201.743,1.1646115%202.9035511,0%204.3351688,0%20H%2027.664688%20c%201.431617,0%202.592183,1.1646115%202.592183,2.6012379%20V%2026.012379%20c%200,1.436626%20-1.160566,2.601252%20-2.592183,2.601252%20H%2012.547857%20L%208.6763382,31.821524%20C%208.1737645,32.237962%207.4150178,31.879147%207.4150178,31.225223%20V%2028.613631%20H%204.3351688%20C%202.9035511,28.613631%201.743,27.449005%201.743,26.012379%20Z%20M%207.4130027,4.7276243%20H%2019.874954%20c%202.691272,0%204.873167,2.1894373%204.873167,4.890231%200,2.1642747%20-1.401013,4.0001737%20-3.342613,4.6441847%202.270225,0.416621%203.990772,2.411735%203.990772,4.810319%200,2.700839%20-2.181743,4.890215%20-4.873166,4.890215%20H%207.4132148%20V%2014.508102%20H%207.4130027%20Z%20M%2017.777299,9.1282408%20h%20-5.828482%20v%202.9341452%20h%205.828482%20c%200.807397,0%201.46192,-0.656829%201.46192,-1.467065%200,-0.810252%20-0.654523,-1.4670802%20-1.46192,-1.4670802%20z%20m%20-5.828482,6.5204812%20h%206.314071%20c%200.897091,0%201.62449,0.729791%201.62449,1.630172%200,0.90023%20-0.727399,1.630022%20-1.62449,1.630022%20h%20-6.314071%20z'%20fill='%231f1f1f'%20id='path1'%20style='stroke-width:1.51775'%20/%3e%3c/svg%3e`;var stripe_default=`data:image/svg+xml,%3csvg%20width='512'%20height='512'%20viewBox='0%200%20512%20512'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20clip-path='url(%23clip0_159_20)'%3e%3crect%20width='512'%20height='512'%20fill='%23533AFD'/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M120%20392L392%20334.317V120L120%20178.357V392Z'%20fill='white'/%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_159_20'%3e%3crect%20width='512'%20height='512'%20rx='64'%20fill='white'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e`;var supabase_default=`data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAABMLAAATCwAAAAAAAAAAAAAcHBxyHBwc6xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHOscHBxyHBwc6hwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc6hwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHRz/ICId/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cGxz/Iyce/1d8Kv8xPiH/Gxoc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/Gxsc/yUrHv9toC//aZgw/ygvH/8bGhz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xsaHP8aGRv/Ghkb/xkYG/8kKR3/aJks/3+7Nf9giC//IiUe/xsbHP8cHBz/HBwc/xwcHP8cHBz/HBwc/x4eHP87TSX/S2Yq/0tlKv9LZSr/Tmwq/2qeLP95szH/gr83/1V2LP8eHx3/HBwc/xwcHP8cHBz/HBwc/xsbHP8lKh//ea44/5DSP/+P0D7/j9A+/4nJO/9upCz/c6wv/3+7Nf+EwTr/SGIp/xwcHP8cHBz/HBwc/xwcHP8cHBz/HB0c/0xoKv+Lyj3/jtA+/47QPv+Ixjr/Z5oo/22jK/96tDL/h8Y5/3esN/8lKh//Gxsc/xwcHP8cHBz/HBwc/xwbHP8eIB3/W38v/47PPv+P0D7/gr46/0JdIv8+VCL/RF4l/0tnKP8/Uyb/Hh8d/xwcHP8cHBz/HBwc/xwcHP8cHBz/Gxsc/yMoHv9pljP/kNM//362Of8nLSD/Ghkc/xsaHP8aGRz/Gxoc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8bGhz/KzQh/3erN/+AuTr/KC8g/xsbHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xsaHP83RiT/Z5Ey/yUqH/8bGxz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/yIlHv8dHRz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHOocHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cGxz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHOocHBxyHBwc6xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHOscHBxyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==`;var tally_default=`data:image/svg+xml,%3csvg%20width='128'%20height='124'%20viewBox='0%200%20128%20124'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M79.9335%2017.1445C79.9335%2024.2262%2077.3191%2033.969%2073.4647%2047.0615L70.7069%2057.1173L79.4337%2051.4172C96.022%2039.7688%20106.04%2035.397%20112.67%2035.397C120.212%2035.397%20128%2040.7864%20128%2051.5052C128%2065.1402%20113.443%2069.0136%2085.3379%2069.4912L74.8298%2069.9849L83.1169%2076.5821C102.791%2091.747%20109.612%2099.1764%20109.612%20108.59C109.612%20115.999%20102.727%20123.715%2094.1897%20123.715C81.3632%20123.715%2075.5655%20110.387%2067.7502%2087.7575L63.7662%2077.922L60.0183%2087.7575C51.2591%20113.46%2044.5174%20123.479%2033.343%20123.479C24.334%20123.479%2017.9208%20115.289%2017.9208%20108.354C17.9208%2097.9942%2027.3369%2089.3825%2044.6517%2076.5821L52.9388%2069.9849L42.6666%2069.4912C12.8171%2069.2501%200%2064.957%200%2051.2688C0%2040.55%208.02804%2035.1605%2015.4268%2035.1605C24.3617%2035.1605%2034.1064%2041.1875%2048.5708%2051.4172L57.2976%2057.1173L54.5398%2047.0615C50.3616%2033.2597%2048.3996%2023.1344%2048.3996%2017.1445C48.3996%207.76783%2053.6838%200%2064.0023%200C74.5567%201.03096e-07%2079.9335%207.76783%2079.9335%2017.1445Z'%20fill='black'/%3e%3c/svg%3e`;var telegram_default=`data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20width='16px'%20height='16px'%20viewBox='0%200%2016%2016'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%3e%3cdefs%3e%3clinearGradient%20x1='50%25'%20y1='0%25'%20x2='50%25'%20y2='100%25'%20id='linearGradient-1'%3e%3cstop%20stop-color='%2338AEEB'%20offset='0%25'%3e%3c/stop%3e%3cstop%20stop-color='%23279AD1'%20offset='100%25'%3e%3c/stop%3e%3c/linearGradient%3e%3c/defs%3e%3cg%20id='Artboard'%20stroke='none'%20stroke-width='1'%20fill='none'%20fill-rule='evenodd'%3e%3ccircle%20id='Oval'%20fill='url(%23linearGradient-1)'%20cx='8'%20cy='8'%20r='8'%3e%3c/circle%3e%3cpath%20d='M3.17026167,7.83635602%20C5.78750201,6.74265999%207.53273882,6.02162863%208.40597211,5.67326193%20C10.8992306,4.67860423%2011.2454541,4.53439191%2011.5831299,4.52864956%20C11.6573986,4.52743168%2011.8385417,4.55776042%2011.9798438,4.67645833%20C12.1211458,4.79515625%2012.1635786,4.87206678%2012.1755371,4.93908691%20C12.1874957,5.00610705%2012.1862759,5.21456762%2012.1744385,5.3338623%20C12.0393279,6.69547283%2011.5259342,9.83829771%2011.2285121,11.3633248%20C11.1026617,12.008621%2010.8548582,12.2249854%2010.6149558,12.2461596%20C10.0935924,12.2921758%209.69769267,11.9156852%209.19272668,11.5981993%20C8.40255458,11.1013965%208.13911734,10.9180161%207.3721185,10.4332283%20C6.48571864,9.87297217%206.85080034,9.6784879%207.35595703,9.17524981%20C7.48815894,9.04355001%209.67825076,7.04590073%209.71077046,6.86250183%20C9.7391276,6.70257812%209.7494847,6.68189389%209.67664063,6.60973958%20C9.60379655,6.53758527%209.51674192,6.54658941%209.46083149,6.55876051%20C9.38158015,6.57601267%208.17521836,7.33962686%205.84174612,8.84960308%20C5.48344358,9.08558775%205.15890428,9.20056741%204.86812819,9.19454205%20C4.54757089,9.18789957%203.93094724,9.02070014%203.47255094,8.87778221%20C2.91030922,8.70248755%202.46345069,8.609808%202.50236203,8.31210343%20C2.52262946,8.15704047%202.74526267,7.998458%203.17026167,7.83635602%20Z'%20id='Path-3'%20fill='%23FFFFFF'%3e%3c/path%3e%3c/g%3e%3c/svg%3e`;var tiktok_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAC4jAAAuIwF4pT92AAAC/ElEQVR42u3XWUhUcRTH8TtzZ5xRJ1PH0Wm1KHOYLNuhxSiEFiorWiiKigkLood6MCyShHYMWoweoh7aC2kTo9JcSK1UCk2iHhRMxtw1SZt07r3fRNQc6Elnxhd/cN7uhc//4Zz/+QvdUbqL4aoRwAhgSABx1CjM+w4w5WgSUxOPEzJzFmqvAkLDWJ6Zy9sOB2VdTvKv3iJGF+xdwKrXObTKMgBU1XJ+dqz3Ac2STF8q014QZTQPHwAFXj15xpTZcxC0Wm8CXFNqr+Hg/UdY1m3AR1B5B6A4OkFR6IsEVN55js0wcegAlU6Pz9QI/BbH4DtvAYJGRG0KdQE43xTx/fIt2hua6M+jTJIDI4cAUKsxLFnK5MvXWJ1fxLGKKlILiomfFI2fyewCkB9nc9E0gx3zY3ifdIG2hy9xJqaSHDRIgEqjwbjbxpLCEm40NFPX5exvt8LodQSHjmXlAIDyNJezwdaef42CyDK9EVtAOAv1QYMDjF4Tx9LiUrJ//sIllXYKZq79L+Cc0eqeOaAJCSHywWPuNrYAgCQj5ZbgSLxC7fYjPJmwiMAwDwIMy2PZWv6NFqcEgPN5HlXW9ST4TyJaNDBOrUPb0wUeAhht8aTU1APAny7adx3nkH84rm0Y6jmAaf8B7je1AkD7b6rjDhIl+rsCzGNYlZX3D5CWxblgNwECN27mbn1T/3itOXYJq8rX5Ru/hYvZ9KmcNkkCQEp9SHJAhHsA2mkWTn7+Ql+kqhoOr9+KoNcjaH3QWayE37hNir0OBaCziw7bCfb4jnMPQBBFYs+cp2XAaG1obSUpPYNlN2+zIreQU9U/aOydDXJBKRXWOKxag/uuY/2EiVzPyWNgFKBRVqh3SkgAgGyvx7ElgbOBFtSCyr37wPhICxnpGdDbjq4aBfnjVxzbEkkzzcUs6jyzE5pHB5GyMx77vXSkd2Xwobyn5RwJF6mYtann5GGizrNLqbq7onwCiDdFcHpsNKeMVvb6jWe6xoBaUI28C0YAQwMMZ/0FmrrK3uRP9CwAAAAASUVORK5CYII=`;var twilio_default=`data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%2020010904//EN'%20'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd'%3e%3csvg%20version='1.0'%20xmlns='http://www.w3.org/2000/svg'%20width='520.000000pt'%20height='520.000000pt'%20viewBox='0%200%20520.000000%20520.000000'%20preserveAspectRatio='xMidYMid%20meet'%3e%3cmetadata%3e%20Created%20by%20potrace%201.14,%20written%20by%20Peter%20Selinger%202001-2017%20%3c/metadata%3e%3cg%20transform='translate(0.000000,520.000000)%20scale(0.100000,-0.100000)'%20fill='%23000000'%20stroke='none'%3e%3cpath%20d='M2105%205194%20c-382%20-27%20-618%20-74%20-856%20-169%20-652%20-262%20-1072%20-797%20-1198%20-1525%20-41%20-236%20-46%20-335%20-46%20-900%200%20-580%206%20-682%2050%20-925%20162%20-881%20760%20-1471%201645%20-1624%20236%20-41%20335%20-46%20900%20-46%20580%200%20682%206%20925%2050%20881%20162%201471%20760%201624%201645%2041%20236%2046%20335%2046%20900%200%20580%20-6%20682%20-50%20925%20-160%20869%20-748%201458%20-1615%201620%20-220%2041%20-332%2047%20-860%2050%20-283%201%20-537%201%20-565%20-1z%20m799%20-924%20c344%20-68%20625%20-218%20871%20-465%20152%20-151%20240%20-272%20324%20-440%2075%20-149%20114%20-262%20148%20-424%2023%20-111%2027%20-149%2027%20-326%201%20-170%20-3%20-217%20-22%20-313%20-71%20-353%20-219%20-630%20-467%20-877%20-151%20-152%20-272%20-240%20-440%20-324%20-149%20-75%20-262%20-114%20-424%20-148%20-111%20-23%20-149%20-27%20-326%20-27%20-170%20-1%20-217%203%20-313%2022%20-353%2071%20-630%20219%20-877%20467%20-152%20151%20-240%20272%20-324%20440%20-74%20149%20-114%20261%20-148%20424%20-24%20112%20-27%20148%20-27%20326%20-1%20170%203%20217%2022%20313%2047%20235%20133%20442%20263%20638%2091%20135%20292%20340%20426%20434%20232%20161%20487%20261%20768%20299%20117%2016%20394%206%20519%20-19z'/%3e%3cpath%20d='M2376%203834%20c-491%20-92%20-871%20-448%20-992%20-929%20-35%20-136%20-43%20-358%20-20%20-495%2087%20-498%20444%20-884%20931%20-1006%20136%20-35%20358%20-43%20495%20-20%20498%2087%20884%20444%201006%20931%2035%20136%2043%20358%2020%20495%20-87%20498%20-443%20883%20-931%201007%20-128%2032%20-384%2041%20-509%2017z%20m-132%20-459%20c98%20-16%20194%20-93%20243%20-193%2025%20-50%2028%20-68%2028%20-152%200%20-76%20-4%20-104%20-22%20-142%20-30%20-66%20-105%20-143%20-172%20-175%20-49%20-25%20-68%20-28%20-151%20-28%20-82%200%20-103%204%20-151%2026%20-247%20116%20-273%20464%20-46%20614%2055%2036%20160%2067%20207%2060%2014%20-2%2043%20-7%2064%20-10z%20m881%20-11%20c157%20-47%20261%20-219%20234%20-386%20-19%20-118%20-89%20-212%20-197%20-265%20-50%20-25%20-68%20-28%20-152%20-28%20-83%200%20-102%203%20-151%2028%20-67%2032%20-142%20109%20-172%20175%20-18%2038%20-22%2066%20-22%20142%200%2082%204%20103%2026%20151%2049%20103%20149%20179%20261%20198%2060%2010%20101%206%20173%20-15z%20m-803%20-857%20c66%20-32%20141%20-109%20171%20-175%2018%20-38%2022%20-66%2022%20-142%200%20-82%20-4%20-103%20-26%20-151%20-116%20-247%20-464%20-273%20-614%20-46%20-83%20125%20-76%20292%2018%20419%2028%2038%20114%2096%20168%20114%2071%2023%20194%2014%20261%20-19z%20m839%201%20c249%20-114%20272%20-469%2040%20-617%20-176%20-113%20-414%20-44%20-508%20147%20-25%2050%20-28%2068%20-28%20152%200%20112%2018%20161%2085%20234%2081%2087%20154%20117%20275%20113%2060%20-2%2094%20-10%20136%20-29z'/%3e%3c/g%3e%3c/svg%3e`;var twitch_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAETSURBVHgB7ZU7DoJAEIb/JV7MBq/hCVROIJ7AqI2t0d5WsTF2dhzBI1hbsLIYwyPADgzrFvI1PJbk+5lZBoEaNq6cR4APA0wDIdTRgQV5lgGI8skZnbAe5a8ditwkjk15LoANeS5AW7nqabGvdfcrA9iiD9AHsB5gACZVI5o6uv+rBbct7AW4H4Dw+DmPp+7ipwGU/L5P5V4g/O8aexM2kkusvEsqVxitQOHNd7F8VnyGXIHiny37mWVFZSTyQIzL1tgV0MljQrwwq1pkBaDIoxeG3lU80XUAgvyhk/MC6OSOXs4KoJWfxIPysACRlSslV1YGpwIhV65oOwlDygYzEqBuqLShUQuSWd6hvBFLV/owwBuAI3t8NBey8QAAAABJRU5ErkJggg==`;var wave_default=`/assets/wave-C0GgAw0V.png`;var wix_default=`data:image/png;base64,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`;var wiz_default=`data:image/png;base64,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`;var woocommerce_default=`data:image/png;base64,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`;var wordpress_com_default=`/assets/wordpress-com-DACYVXJ9.png`;var wordpress_self_hosted_default=`/assets/wordpress-self-hosted-DrkgDH4I.png`;var workday_default=`/assets/workday-Ds_SFYKi.ico`;var x_twitter_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAB7ElEQVR4Ae1XMZLCMAwUdw0ldJQ8ATpKnkBJByUd8ALyA/gBdJTQUtHS8QT4AaRM5ctmThmfogQ75CYNmhGTbGJr45Vk0yAiQzXaF9VsHwIZAofDgYwxqo9GI/K16/X6cqyxvdVqmdvtZh6PhwmCIHXcw7vdrpFj8ny9XhsYxhe8lwWHw2EycLFYpNh0Ok2w8/nsFHy1WrkE1wnAN5tNMkGv10ux3W6XIab5fD5P3ovldCGrP2Ap4LiW8uRJAcIwe1wpArYU0FJimhQgxaQ9cqX4BZYCgSVmS8HBfRP1JQEsY1xKGSmAcTC+l0QrIWDraicVMBBA4O1265ScpQnAMbkMwphjub1HAI7EkxoDK7n0/gQQGATsCmDMo+z++Hf8E5CjPZ9PiqKIZrMZhWFIl8slxcbjMTWbTTqdTuRrXoz5i2WXRIL+WxWw2+Uml13rnJUT4K9E9nMFaF3SxiojoO1u2rJzl4z3/+oIcHBMLiUp2rDe3ozg+BIYtNee87KjGzLGndPx7JD/0K7xog2Gl30ymaSY1jm9CPhsrXnnBK1zOhHgCWWtF7l2TtA6p3S1E+73exoMBrRcLul4PJKL3e93arfbSUeMA1O/36eYPHU6nWQu7pyaqRlfZnezV05anhSN34va7PPXrHYCP+VaTG3LBV1KAAAAAElFTkSuQmCC`;var xero_default=`data:image/svg+xml,%3csvg%20width='144'%20height='144'%20viewBox='0%200%20144%20144'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3crect%20width='144'%20height='144'%20rx='20'%20fill='%2313B5EA'/%3e%3cg%20clip-path='url(%23clip0_17_14)'%3e%3cpath%20d='M95.4078%2056.7108C92.5715%2056.7108%2089.5481%2058.9181%2088.0019%2063.7231V59.5987C88.0019%2058.0063%2086.7094%2056.7108%2085.1207%2056.7108C83.532%2056.7108%2082.2395%2058.0063%2082.2395%2059.5987L82.2395%2084.4689C82.2395%2086.0613%2083.532%2087.3567%2085.1207%2087.3567C86.7094%2087.3567%2088.0018%2086.0613%2088.0018%2084.4689V72.7875C88.0019%2067.1691%2091.1671%2063.8367%2096.0274%2062.7445C97.5808%2062.3954%2098.5457%2061.2203%2098.5457%2059.6775C98.5457%2057.9307%2097.2554%2056.7108%2095.4078%2056.7108Z'%20fill='white'/%3e%3cpath%20d='M113.715%2056.7108C105.285%2056.7108%2098.4275%2063.5847%2098.4275%2072.0338C98.4275%2080.4828%20105.285%2087.3568%20113.715%2087.3568C122.144%2087.3568%20129.002%2080.4829%20129.002%2072.0338C129.002%2063.5846%20122.144%2056.7108%20113.715%2056.7108ZM113.715%2081.5832C108.461%2081.5832%20104.188%2077.2993%20104.188%2072.0338C104.188%2066.7683%20108.461%2062.4845%20113.715%2062.4845C118.968%2062.4845%20123.242%2066.7682%20123.242%2072.0338C123.242%2077.2993%20118.968%2081.5832%20113.715%2081.5832Z'%20fill='white'/%3e%3cpath%20d='M113.715%2068.2172C111.615%2068.2172%20109.907%2069.9292%20109.907%2072.0338C109.907%2074.1383%20111.615%2075.8503%20113.715%2075.8503C115.814%2075.8503%20117.522%2074.1383%20117.522%2072.0338C117.522%2069.9292%20115.814%2068.2172%20113.715%2068.2172Z'%20fill='white'/%3e%3cpath%20d='M62.5329%2056.7108C54.1%2056.7108%2047.2395%2063.5847%2047.2395%2072.0338C47.2395%2080.5593%2053.8973%2087.3567%2063.1062%2087.3567C67.601%2087.3567%2071.3115%2085.9869%2074.4498%2083.169C74.7887%2082.829%2075.3665%2082.0927%2075.3665%2081.0404C75.3665%2079.4477%2074.1842%2078.2466%2072.6162%2078.2466C71.8075%2078.2466%2071.3509%2078.4792%2070.8356%2078.8809C68.5694%2080.7517%2066.0794%2081.6623%2063.2265%2081.6623C58.3607%2081.6623%2054.385%2078.7931%2053.2963%2074.4681L74.4249%2074.4681C76.3729%2074.4606%2077.7854%2072.8862%2077.7854%2070.7189C77.7854%2065.4781%2072.6592%2056.7108%2062.5329%2056.7108ZM53.2879%2069.5911C54.3109%2065.3616%2057.9613%2062.3439%2062.5329%2062.3439C67.0384%2062.3439%2070.7216%2065.0415%2071.769%2069.5911H53.2879Z'%20fill='white'/%3e%3cpath%20d='M46.4185%2059.5632C46.4185%2057.9848%2045.1421%2056.7108%2043.573%2056.7108C42.8129%2056.7108%2042.0983%2057.0075%2041.5608%2057.5463L31.1316%2067.9996L20.7025%2057.5463C20.165%2057.0076%2019.4504%2056.7108%2018.6903%2056.7108C17.1211%2056.7108%2015.8447%2057.9848%2015.8447%2059.5632C15.8447%2060.3251%2016.1406%2061.0414%2016.6781%2061.5801L27.1072%2072.0334L16.6781%2082.4867C16.1407%2083.0254%2015.8447%2083.7417%2015.8447%2084.5036C15.8447%2086.0814%2017.1177%2087.356%2018.6903%2087.356C19.4504%2087.356%2020.1651%2087.0593%2020.7025%2086.5205L31.1316%2076.0672L41.5607%2086.5205C42.0982%2087.0593%2042.8128%2087.356%2043.5729%2087.356C45.1455%2087.356%2046.4185%2086.0814%2046.4185%2084.5036C46.4185%2083.7417%2046.1225%2083.0254%2045.5851%2082.4867L35.156%2072.0334L45.5851%2061.5801C46.1226%2061.0414%2046.4185%2060.3252%2046.4185%2059.5632Z'%20fill='white'/%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_17_14'%3e%3crect%20width='113.157'%20height='30.6459'%20fill='white'%20transform='translate(15.8447%2056.7108)'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e`;var zoho_books_default=`/assets/zoho-books-D1l1EKOy.png`;var zoho_crm_default=`/assets/zoho-crm-BRYEeDgr.ico`;var _hoisted_1$1={class:`integration-service-logo mr-3`,"aria-hidden":`true`};var _hoisted_2$1=[`src`];var logos=Object.fromEntries(Object.entries(Object.assign({"../../assets/integrations/airtable.png":airtable_default,"../../assets/integrations/algolia.svg":algolia_default,"../../assets/integrations/amazon-redshift.svg":amazon_redshift_default,"../../assets/integrations/amplitude.png":amplitude_default,"../../assets/integrations/apify.svg":apify_default,"../../assets/integrations/apollo-io.svg":apollo_io_default,"../../assets/integrations/asana.ico":asana_default,"../../assets/integrations/ashby.png":ashby_default,"../../assets/integrations/atlassian.ico":atlassian_default,"../../assets/integrations/attention.png":attention_default,"../../assets/integrations/aws-athena.svg":aws_athena_default,"../../assets/integrations/aws-s3.svg":aws_s3_default,"../../assets/integrations/bigquery.svg":bigquery_default,"../../assets/integrations/brevo.svg":brevo_default,"../../assets/integrations/calendly.svg":calendly_default,"../../assets/integrations/canva.png":canva_default,"../../assets/integrations/chargebee.png":chargebee_default,"../../assets/integrations/clay.png":clay_default,"../../assets/integrations/clickhouse.svg":clickhouse_default,"../../assets/integrations/confidence-exp.svg":confidence_exp_default,"../../assets/integrations/confidence-flags.svg":confidence_flags_default,"../../assets/integrations/contentful.svg":contentful_default,"../../assets/integrations/databricks.png":databricks_default,"../../assets/integrations/dbt-semantic-layer.png":dbt_semantic_layer_default,"../../assets/integrations/elevenlabs.svg":elevenlabs_default,"../../assets/integrations/figma.svg":figma_default,"../../assets/integrations/firebase-cloud-messaging.png":firebase_cloud_messaging_default,"../../assets/integrations/firecrawl.ico":firecrawl_default,"../../assets/integrations/fireflies.png":fireflies_default,"../../assets/integrations/fireworks-ai.svg":fireworks_ai_default,"../../assets/integrations/gatewayapi.png":gatewayapi_default,"../../assets/integrations/gemini-enterprise.png":gemini_enterprise_default,"../../assets/integrations/github-api.svg":github_api_default,"../../assets/integrations/gitlab-api.png":gitlab_api_default,"../../assets/integrations/gmail.svg":gmail_default,"../../assets/integrations/gong.svg":gong_default,"../../assets/integrations/google-ads.svg":google_ads_default,"../../assets/integrations/google-analytics.svg":google_analytics_default,"../../assets/integrations/google-calendar.svg":google_calendar_default,"../../assets/integrations/google-docs.svg":google_docs_default,"../../assets/integrations/google-drive.svg":google_drive_default,"../../assets/integrations/google-maps-platform.png":google_maps_platform_default,"../../assets/integrations/google-search-console.png":google_search_console_default,"../../assets/integrations/google-sheets.svg":google_sheets_default,"../../assets/integrations/google-slides.svg":google_slides_default,"../../assets/integrations/granola.svg":granola_default,"../../assets/integrations/hex.svg":hex_default,"../../assets/integrations/heygen.ico":heygen_default,"../../assets/integrations/hubspot.png":hubspot_default,"../../assets/integrations/incident-io.png":incident_io_default,"../../assets/integrations/inngest.svg":inngest_default,"../../assets/integrations/klipy.ico":klipy_default,"../../assets/integrations/lexware.svg":lexware_default,"../../assets/integrations/lightspeed.svg":lightspeed_default,"../../assets/integrations/linear.svg":linear_default,"../../assets/integrations/linkedin.png":linkedin_default,"../../assets/integrations/logo-dev.webp":logo_dev_default,"../../assets/integrations/mailgun.ico":mailgun_default,"../../assets/integrations/mapbox.png":mapbox_default,"../../assets/integrations/microsoft-excel.svg":microsoft_excel_default,"../../assets/integrations/microsoft-fabric.svg":microsoft_fabric_default,"../../assets/integrations/microsoft-onedrive.svg":microsoft_onedrive_default,"../../assets/integrations/microsoft-onenote.svg":microsoft_onenote_default,"../../assets/integrations/microsoft-outlook.svg":microsoft_outlook_default,"../../assets/integrations/microsoft-powerpoint.svg":microsoft_powerpoint_default,"../../assets/integrations/microsoft-sharepoint.svg":microsoft_sharepoint_default,"../../assets/integrations/microsoft-teams.svg":microsoft_teams_default,"../../assets/integrations/microsoft-word.svg":microsoft_word_default,"../../assets/integrations/miro.png":miro_default,"../../assets/integrations/n8n.ico":n8n_default,"../../assets/integrations/notion.png":notion_default,"../../assets/integrations/oura.png":oura_default,"../../assets/integrations/paddle.ico":paddle_default,"../../assets/integrations/perplexity.ico":perplexity_default,"../../assets/integrations/pipedrive.png":pipedrive_default,"../../assets/integrations/polar.png":polar_default,"../../assets/integrations/posthog.svg":posthog_default,"../../assets/integrations/prestashop.ico":prestashop_default,"../../assets/integrations/replicate.png":replicate_default,"../../assets/integrations/resend.png":resend_default,"../../assets/integrations/salesforce.ico":salesforce_default,"../../assets/integrations/sanity.svg":sanity_default,"../../assets/integrations/semrush.svg":semrush_default,"../../assets/integrations/sentry.ico":sentry_default,"../../assets/integrations/sevdesk.png":sevdesk_default,"../../assets/integrations/shopify.png":shopify_default,"../../assets/integrations/slack.png":slack_default,"../../assets/integrations/snowflake.svg":snowflake_default,"../../assets/integrations/storyblok.svg":storyblok_default,"../../assets/integrations/stripe.svg":stripe_default,"../../assets/integrations/supabase.ico":supabase_default,"../../assets/integrations/tally.svg":tally_default,"../../assets/integrations/telegram.svg":telegram_default,"../../assets/integrations/tiktok.png":tiktok_default,"../../assets/integrations/twilio.svg":twilio_default,"../../assets/integrations/twitch.png":twitch_default,"../../assets/integrations/wave.png":wave_default,"../../assets/integrations/wix.png":wix_default,"../../assets/integrations/wiz.png":wiz_default,"../../assets/integrations/woocommerce.png":woocommerce_default,"../../assets/integrations/wordpress-com.png":wordpress_com_default,"../../assets/integrations/wordpress-self-hosted.png":wordpress_self_hosted_default,"../../assets/integrations/workday.ico":workday_default,"../../assets/integrations/x-twitter.png":x_twitter_default,"../../assets/integrations/xero.svg":xero_default,"../../assets/integrations/zoho-books.png":zoho_books_default,"../../assets/integrations/zoho-crm.ico":zoho_crm_default})).map(([path,url])=>[path.split(`/`).at(-1).replace(/\.[^.]+$/u,``),url]));var _sfc_main$2={__name:`IntegrationServiceLogo`,props:{provider:{type:String,required:true}},setup(__props){const props=__props;const logo=computed(()=>logos[props.provider]);return(_ctx,_cache)=>{return openBlock(),createElementBlock(`span`,_hoisted_1$1,[logo.value?(openBlock(),createElementBlock(`img`,{key:0,src:logo.value,alt:``,width:`28`,height:`28`,loading:`lazy`},null,8,_hoisted_2$1)):(openBlock(),createBlock(VIcon,{key:1,icon:__props.provider===`ai`?unref(mdiCreation):unref(mdiConnection),size:`28`,color:`grey-darken-3`},null,8,[`icon`]))])}}};var IntegrationServiceLogo_default=_plugin_vue_export_helper_default(_sfc_main$2,[[`__scopeId`,`data-v-f4539ec4`]]);var integrationCategories=[{id:`ai`,title:`AI & generation`,providers:[`ai`,`gemini-enterprise`,`elevenlabs`,`replicate`,`perplexity`,`fireworks-ai`,`heygen`]},{id:`productivity`,title:`Productivity & collaboration`,providers:[`google-calendar`,`google-drive`,`google-docs`,`google-sheets`,`google-slides`,`notion`,`calendly`,`microsoft-onedrive`,`microsoft-excel`,`microsoft-onenote`,`microsoft-sharepoint`,`microsoft-word`,`microsoft-powerpoint`,`asana`,`linear`,`atlassian`,`miro`,`fireflies`,`granola`]},{id:`communication`,title:`Email & messaging`,providers:[`gmail`,`microsoft-outlook`,`microsoft-teams`,`slack`,`telegram`,`twilio`,`gatewayapi`,`resend`,`mailgun`,`firebase-cloud-messaging`]},{id:`sales`,title:`Sales & customer relationships`,providers:[`salesforce`,`hubspot`,`pipedrive`,`apollo-io`,`attention`,`clay`,`gong`,`zoho-crm`,`brevo`]},{id:`commerce`,title:`Commerce, payments & accounting`,providers:[`stripe`,`paddle`,`polar`,`chargebee`,`shopify`,`woocommerce`,`prestashop`,`lightspeed`,`xero`,`wave`,`zoho-books`,`lexware`,`sevdesk`]},{id:`data`,title:`Databases & storage`,providers:[`bigquery`,`snowflake`,`airtable`,`supabase`,`clickhouse`,`aws-s3`,`aws-athena`,`amazon-redshift`,`databricks`,`microsoft-fabric`,`dbt-semantic-layer`,`hex`]},{id:`marketing`,title:`Marketing, analytics & social`,providers:[`google-ads`,`google-search-console`,`google-analytics`,`posthog`,`amplitude`,`semrush`,`tiktok`,`x-twitter`,`linkedin`,`twitch`,`confidence-flags`,`confidence-exp`]},{id:`content`,title:`Content, design & forms`,providers:[`wix`,`contentful`,`storyblok`,`sanity`,`wordpress-com`,`wordpress-self-hosted`,`canva`,`figma`,`klipy`,`tally`]},{id:`development`,title:`Developer tools & automation`,providers:[`github-api`,`gitlab-api`,`wiz`,`sentry`,`incident-io`,`n8n`,`inngest`,`firecrawl`,`apify`,`algolia`,`mapbox`,`google-maps-platform`,`logo-dev`]},{id:`people`,title:`People & wellbeing`,providers:[`workday`,`ashby`,`oura`]}];function groupIntegrationProviders(providers,search=``){const query=String(search||``).trim().toLowerCase();const groups=integrationCategories.map(category=>({id:category.id,title:category.title,providers:providers.filter(provider=>category.providers.includes(provider.id))}));const assigned=new Set(integrationCategories.flatMap(category=>category.providers));groups.push({id:`other`,title:`Other services`,providers:providers.filter(provider=>!assigned.has(provider.id))});return groups.map(group=>({...group,providers:group.providers.filter(provider=>`${provider.name} ${provider.description} ${group.title}`.toLowerCase().includes(query)).sort((left,right)=>left.name.localeCompare(right.name))})).filter(group=>group.providers.length)}var _hoisted_1={class:`integrations-panel`};var _hoisted_2={class:`integrations-panel__header`};var _hoisted_3={key:0};var _hoisted_4={key:2};var _hoisted_5={class:`integrations-panel__layout`};var _hoisted_6={class:`integrations-panel__catalogue`,"aria-label":`Integrations catalogue`};var _hoisted_7={class:`text-title-medium mt-6 mb-2`};var _hoisted_8={key:1,role:`status`,class:`text-body-medium`};var _hoisted_9={key:2,class:`text-title-medium mt-6 mb-2`};var _hoisted_10={class:`text-title-small`};var _hoisted_11={key:4,role:`status`,class:`text-body-medium`};var _hoisted_12={class:`integrations-panel__header mb-4`};var _hoisted_13={class:`d-flex align-center`};var _hoisted_14={"aria-label":`Application connection`,class:`mb-6`};var _hoisted_15={class:`text-title-medium`};var _hoisted_16={role:`status`};var _hoisted_17={key:1};var _hoisted_18={key:0};var _hoisted_19={role:`status`};var _hoisted_20={key:0};var _hoisted_21={key:1};var _hoisted_22={key:2};var _hoisted_23={key:3};var _hoisted_24={key:4};var _hoisted_25={key:5};var _hoisted_26=[`datetime`];var _hoisted_27={key:6};var _hoisted_28={class:`integrations-panel__actions`};var _hoisted_29={key:0,class:`w-100`};var _hoisted_30={key:0};var _hoisted_31={key:1};var _hoisted_32={key:4,"aria-label":`n8n OAuth discovery`,class:`mt-4`};var _hoisted_33={key:0,role:`alert`};var _hoisted_34={key:0,role:`alert`};var _hoisted_35={key:2,role:`alert`};var _hoisted_36=[`aria-label`];var _hoisted_37={key:0,role:`alert`};var _hoisted_38={key:6};var _hoisted_39=[`aria-label`];var _hoisted_40={class:`text-title-medium`};var _hoisted_41={key:0};var _hoisted_42={key:1};var _hoisted_43={key:7,"aria-label":`Callback setup`,class:`mt-4`};var _hoisted_44={key:0};var _hoisted_45={key:1};var _hoisted_46={key:2,role:`status`};var _hoisted_47={key:0};var _hoisted_48={class:`integrations-panel__instructions`};var _hoisted_49={key:1,"aria-label":`Client metadata document`,class:`mt-4`};var _hoisted_50={key:0,role:`status`};var _hoisted_51={key:1,role:`status`};var _hoisted_52={key:2,"aria-label":`OAuth client registration`,class:`mt-4`};var _hoisted_53={key:0};var _hoisted_54={key:1,role:`status`};var _hoisted_55={key:3,class:`integrations-panel__footer`};var _hoisted_56={class:`integrations-panel__actions`};var _sfc_main$1={__name:`IntegrationsPanel`,props:{dashboardContext:{type:Object,required:true}},setup(__props){const props=__props;const route=useRoute();const router=useRouter();const selectedId=ref(``);const environment=ref(`development`);const production=computed(()=>environment.value===`production`);const integrationContext=computed(()=>({...props.dashboardContext,integrationEnvironment:environment.value,integrationSetupRequest:{sessionId:route.query.integrationSession,integrationId:route.query.integration,turnId:route.query.integrationTurn,requestId:route.query.integrationRequest}}));const{adsResult,adsError,runAdsOperation,paymentResult,paymentError,paymentOperation,runPaymentOperation,registrationCommand,registrationError,registrationNeedsReview,registerOAuthClient,discoveryCommand,discoveryError,discoverN8n,releaseId,connection,connectionError,verificationInput,setupCommand,runSetup,refreshConnection,configuration,dirty,resource,command,fieldErrors,error,changedElsewhere,save,discard}=useVibe64Integrations(integrationContext,selectedId);const projectSlug=useVibe64ProjectSlug();function openPaymentEnv({key,value,secret}){return router.push({path:projectAppPath(projectSlug.value,production.value?`/dashboard/deploy`:`/dashboard/env`),query:{prefillKey:key,...secret?{prefillSecret:`true`}:{},...value===void 0?{}:{prefillValue:value}}})}watch([projectSlug,()=>props.dashboardContext.productionIntegrationsApiPath],([slug,apiPath])=>{environment.value=apiPath&&readLocalStorageJson(`vibe64:integrations:environment:${slug}`,`development`)===`production`?`production`:`development`},{immediate:true,flush:`sync`});watch(environment,value=>{writeLocalStorageJson(`vibe64:integrations:environment:${projectSlug.value}`,value)});const search=ref(``);const navigationKey=computed(()=>`vibe64:integrations:${encodeURIComponent(projectSlug.value)}:${production.value?`published`:encodeURIComponent(props.dashboardContext.sessionId||``)}:${environment.value}`);watch(navigationKey,key=>{const saved=readLocalStorageJson(key,{});selectedId.value=typeof saved?.selectedId===`string`?saved.selectedId:``;search.value=typeof saved?.search===`string`?saved.search:``},{immediate:true,flush:`sync`});watch([selectedId,search],()=>{if(production.value||props.dashboardContext.sessionId)writeLocalStorageJson(navigationKey.value,{selectedId:selectedId.value,search:search.value})});const requestedIntegration=computed(()=>{const id=typeof route.query.integration===`string`&&route.query.integration.length<=200?route.query.integration:``;const target=route.query.integrationEnvironment===`production`?`production`:`development`;if(target===`production`&&!props.dashboardContext.productionIntegrationsApiPath)return null;if(target===`development`&&route.query.integrationSession!==props.dashboardContext.sessionId)return null;return id||route.query.integrationEnvironment?{id,environment:target}:null});const integrationDetail=ref(null);const pendingReveal=ref(null);function selectIntegration(id,target=`development`){if(target===`production`&&!props.dashboardContext.productionIntegrationsApiPath)return;const alreadySelected=environment.value===target&&selectedId.value===id;environment.value=target;if(!id)return;selectedId.value=id;search.value=``;if(alreadySelected)refreshConnection();pendingReveal.value={id,key:navigationKey.value}}watch([()=>requestedIntegration.value?.id,()=>requestedIntegration.value?.environment,projectSlug,()=>requestedIntegration.value?.environment===`development`?props.dashboardContext.sessionId:``],()=>{const selection=requestedIntegration.value;if(selection)selectIntegration(selection.id,selection.environment)},{immediate:true,flush:`sync`});const discardOpen=ref(false);const removeOpen=ref(false);const disconnectOpen=ref(false);const providers=[googleCalendarDefinition,...connectorDefinitions];const providerGroups=computed(()=>groupIntegrationProviders(providers,search.value));const expandedCategories=ref([]);const visibleCategories=computed({get:()=>String(search.value||``).trim()?providerGroups.value.map(group=>group.id):expandedCategories.value,set:value=>{if(!String(search.value||``).trim())expandedCategories.value=value}});const entries=computed(()=>Object.entries(configuration.value?.integrations||{}));const filteredEntries=computed(()=>entries.value.filter(([id,entry])=>`${id} ${entry.displayName||``} ${entry.provider}`.toLowerCase().includes(String(search.value||``).toLowerCase())));const selected=computed(()=>Object.hasOwn(configuration.value?.integrations||{},selectedId.value)?configuration.value.integrations[selectedId.value]:void 0);watchEffect(()=>{const request=pendingReveal.value;if(!request)return;if(request.key!==navigationKey.value||request.id!==selectedId.value){pendingReveal.value=null;return}if(!integrationDetail.value||props.dashboardContext.active===false)return;pendingReveal.value=null;if(selected.value)integrationDetail.value.scrollIntoView({block:`start`,inline:`nearest`,behavior:`instant`})},{flush:`post`});const provider=computed(()=>providers.find(entry=>entry.id===selected.value?.provider));const configurationOnly=computed(()=>provider.value?.configurationOnly||provider.value?.configurationOnlyForSettings?.(selected.value?.settings||{}));const verificationIncomplete=computed(()=>provider.value?.verificationFields?.some(field=>field.required&&!String(verificationInput.value[field.name]||``).trim())===true);const setupPrompt=computed(()=>[`Implement the saved integration ${JSON.stringify(selectedId.value)} (${JSON.stringify(selected.value?.provider)}) from integrations.json.`,`Use this project's selected framework and existing backend composition. Keep credentials, connections, callbacks and refresh owned by this application so it runs independently of Vibe64.`,...provider.value?.setup?[`Selected provider setup instructions:\n\n${(provider.value.setup.stepsForSettings?.(selected.value?.settings||{},selected.value?.authentication.method)||provider.value.setup.stepsByAuthentication?.[selected.value?.authentication.method]||provider.value.setup.steps||[]).join(`
|
|
935
|
+
`;var airtable_default=`data:image/png;base64,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`;var algolia_default=`data:image/svg+xml,%3csvg%20width='250'%20height='250'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M124.997%200C56.683%200%20.997%2055.037.013%20123.075-.99%20192.166%2055.11%20249.424%20124.26%20249.817c21.362.128%2041.927-5.091%2060.191-15.017%201.78-.963%202.055-3.411.541-4.757l-11.694-10.359c-2.38-2.103-5.764-2.702-8.685-1.454-12.746%205.425-26.603%208.186-40.884%208.019-55.873-.688-101.025-47.144-100.13-102.977.875-55.125%2046.028-99.705%20101.399-99.705h101.419v180.127l-57.535-51.085c-1.859-1.652-4.711-1.327-6.216.658-9.235%2012.216-24.283%2019.823-40.992%2018.663-23.182-1.602-41.966-20.245-43.697-43.4-2.076-27.617%2019.827-50.752%2047.031-50.752%2024.607%200%2044.867%2018.93%2046.981%2042.978.187%202.143%201.151%204.138%202.764%205.563l14.989%2013.277c1.701%201.504%204.396.58%204.819-1.651a71.016%2071.016%200%200%200%201.033-17.955c-2.41-35.165-30.922-63.46-66.131-65.632-40.363-2.486-74.117%2029.072-75.189%2068.629-1.043%2038.545%2030.557%2071.774%2069.14%2072.629%2016.11.353%2031.03-4.708%2043.098-13.474l75.178%2066.594c3.226%202.85%208.311.57%208.311-3.735V4.737A4.741%204.741%200%200%200%20245.259%200H124.997Z'%20fill='%23003DFF'/%3e%3c/svg%3e`;var amazon_redshift_default=`data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20width='40px'%20height='40px'%20viewBox='0%200%2040%2040'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%3e%3ctitle%3eIcon-Architecture/32/Arch_Amazon-Redshift_32%3c/title%3e%3cg%20id='Icon-Architecture/32/Arch_Amazon-Redshift_32'%20stroke='none'%20stroke-width='1'%20fill='none'%20fill-rule='evenodd'%3e%3cg%20id='Icon-Architecture-BG/32/Analytics'%20fill='%238C4FFF'%3e%3crect%20id='Rectangle'%20x='0'%20y='0'%20width='40'%20height='40'%3e%3c/rect%3e%3c/g%3e%3cpath%20d='M25.912,17.5868263%20C25.384,17.5868263%2024.953,17.1576846%2024.953,16.6297405%20C24.953,16.1007984%2025.384,15.6716567%2025.912,15.6716567%20C26.441,15.6716567%2026.872,16.1007984%2026.872,16.6297405%20C26.872,17.1576846%2026.441,17.5868263%2025.912,17.5868263%20M23.479,23.4131737%20C22.951,23.4131737%2022.52,22.9840319%2022.52,22.4550898%20C22.52,21.9271457%2022.951,21.498004%2023.479,21.498004%20C24.009,21.498004%2024.439,21.9271457%2024.439,22.4550898%20C24.439,22.9840319%2024.009,23.4131737%2023.479,23.4131737%20M17.641,22.4421158%20C17.113,22.4421158%2016.683,22.0129741%2016.683,21.4840319%20C16.683,20.9560878%2017.113,20.5269461%2017.641,20.5269461%20C18.171,20.5269461%2018.601,20.9560878%2018.601,21.4840319%20C18.601,22.0129741%2018.171,22.4421158%2017.641,22.4421158%20M15.21,27.7824351%20C14.681,27.7824351%2014.25,27.3532934%2014.25,26.8253493%20C14.25,26.2974052%2014.681,25.8672655%2015.21,25.8672655%20C15.738,25.8672655%2016.169,26.2974052%2016.169,26.8253493%20C16.169,27.3532934%2015.738,27.7824351%2015.21,27.7824351%20M25.912,14.6736527%20C24.832,14.6736527%2023.953,15.5508982%2023.953,16.6297405%20C23.953,17.2904192%2024.285,17.8732535%2024.79,18.2275449%20L23.877,20.5399202%20C23.748,20.5139721%2023.615,20.5%2023.479,20.5%20C22.62,20.5%2021.897,21.0588822%2021.634,21.8283433%20L19.589,21.3642715%20C19.525,20.3423154%2018.682,19.5289421%2017.641,19.5289421%20C16.561,19.5289421%2015.683,20.4061876%2015.683,21.4840319%20C15.683,21.988024%2015.88,22.4441118%2016.194,22.7904192%20L15.302,24.8792415%20C15.27,24.8772455%2015.241,24.8692615%2015.21,24.8692615%20C14.129,24.8692615%2013.25,25.746507%2013.25,26.8253493%20C13.25,27.9031936%2014.129,28.7804391%2015.21,28.7804391%20C16.29,28.7804391%2017.169,27.9031936%2017.169,26.8253493%20C17.169,26.1327345%2016.805,25.5279441%2016.261,25.1796407%20L17.048,23.3383234%20C17.236,23.3982036%2017.433,23.4401198%2017.641,23.4401198%20C18.412,23.4401198%2019.073,22.99002%2019.393,22.3433134%20L21.558,22.8343313%20C21.736,23.7315369%2022.529,24.4111776%2023.479,24.4111776%20C24.56,24.4111776%2025.439,23.5339321%2025.439,22.4550898%20C25.439,21.8722555%2025.178,21.3542914%2024.77,20.996008%20L25.729,18.5658683%20C25.791,18.5718563%2025.85,18.5848303%2025.912,18.5848303%20C26.993,18.5848303%2027.872,17.7075848%2027.872,16.6297405%20C27.872,15.5508982%2026.993,14.6736527%2025.912,14.6736527%20M20.5,33.001996%20C15.635,33.001996%2012,31.5419162%2012,30.2365269%20L12,11.5898204%20C13.663,12.9281437%2017.153,13.6387226%2020.5,13.6387226%20C23.847,13.6387226%2027.337,12.9281437%2029,11.5898204%20L29,30.2365269%20C29,31.5419162%2025.365,33.001996%2020.5,33.001996%20M20.5,6.99800399%20C25.509,6.99800399%2029,8.48403194%2029,9.81936128%20C29,11.1536926%2025.509,12.6407186%2020.5,12.6407186%20C15.491,12.6407186%2012,11.1536926%2012,9.81936128%20C12,8.48403194%2015.491,6.99800399%2020.5,6.99800399%20M30,9.81936128%20C30,7.33832335%2025.105,6%2020.5,6%20C15.894,6%2011,7.33832335%2011,9.81936128%20C11,9.82335329%2011.002,9.82734531%2011.002,9.83133733%20L11,9.83133733%20L11,30.2365269%20C11,32.6806387%2015.894,34%2020.5,34%20C25.105,34%2030,32.6806387%2030,30.2365269%20L30,9.83133733%20L29.998,9.83133733%20C29.998,9.82734531%2030,9.82335329%2030,9.81936128'%20id='Amazon-Redshift_Icon_32_Squid'%20fill='%23FFFFFF'%3e%3c/path%3e%3c/g%3e%3c/svg%3e`;var amplitude_default=`/assets/amplitude-CCAWdeGL.png`;var apify_default=`data:image/svg+xml,%3csvg%20width='1080'%20height='1080'%20viewBox='0%200%201080%201080'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M607.859%2078.2218H987.785C995.513%2078.2218%201001.78%2084.4868%201001.78%2092.2151V672.834C1001.78%20686.742%20983.69%20692.134%20976.075%20680.496L596.15%2099.877C590.06%2090.5703%20596.737%2078.2218%20607.859%2078.2218Z'%20fill='%23246DFF'/%3e%3cpath%20d='M472.141%2078.2218H92.215C84.4867%2078.2218%2078.2217%2084.4868%2078.2217%2092.2151V672.834C78.2217%20686.742%2096.3094%20692.134%20103.924%20680.496L483.85%2099.877C489.94%2090.5703%20483.263%2078.2218%20472.141%2078.2218Z'%20fill='%2320A34E'/%3e%3cpath%20d='M533.491%20543.086L101.895%20977.927C93.1302%20986.758%2099.3849%201001.78%20111.826%201001.78H968.529C980.919%201001.78%20987.197%20986.863%20978.535%20978.003L553.429%20543.161C547.969%20537.576%20538.993%20537.542%20533.491%20543.086Z'%20fill='%23F86606'/%3e%3c/svg%3e`;var apollo_io_default=`/assets/apollo-io-DSa-SGjz.svg`;var asana_default=`/assets/asana--NYpVJKi.ico`;var ashby_default=`data:image/png;base64,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`;var atlassian_default=`/assets/atlassian-DlYQurNH.ico`;var attention_default=`/assets/attention-DJmlCPcV.png`;var aws_athena_default=`/assets/aws-athena-iyRsleas.svg`;var aws_s3_default=`data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20width='40px'%20height='40px'%20viewBox='0%200%2040%2040'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%3e%3ctitle%3eIcon-Architecture/32/Arch_Amazon-Simple-Storage-Service_32%3c/title%3e%3cg%20id='Icon-Architecture/32/Arch_Amazon-Simple-Storage-Service_32'%20stroke='none'%20stroke-width='1'%20fill='none'%20fill-rule='evenodd'%3e%3cg%20id='Icon-Architecture-BG/32/Storage'%20fill='%237AA116'%3e%3crect%20id='Rectangle'%20x='0'%20y='0'%20width='40'%20height='40'%3e%3c/rect%3e%3c/g%3e%3cg%20id='Icon-Service/32/Amazon-Simple-Storage-Service_32'%20transform='translate(7.000200,%206.000100)'%20fill='%23FFFFFF'%3e%3cpath%20d='M23.532,15.391%20L23.729,13.932%20C25.821,15.131%2025.864,15.626%2025.8630149,15.64%20C25.859,15.643%2025.509,15.923%2023.532,15.391%20L23.532,15.391%20Z%20M22.564,15.103%20C19.722,14.206%2015.904,12.531%2013.723,11.504%20C13.723,11.497%2013.727,11.491%2013.727,11.484%20C13.727,10.821%2013.187,10.281%2012.524,10.281%20C11.861,10.281%2011.321,10.821%2011.321,11.484%20C11.321,12.148%2011.861,12.687%2012.524,12.687%20C12.814,12.687%2013.07,12.571%2013.278,12.4%20C14.547,12.994%2019.075,15.076%2022.428,16.113%20L21.249,24.85%20C21.249,25.716%2017.575,27%2012.5,27%20C7.425,27%203.751,25.716%203.746,24.784%20L1.283,6.563%20C3.458,8.155%208.074,9%2012.5,9%20C16.926,9%2021.543,8.155%2023.718,6.563%20L22.564,15.103%20Z%20M1.003,4.489%20C1.032,3.609%205.104,1%2012.5,1%20C19.895,1%2023.97,3.609%2024,4.489%20L24,4.603%20C23.81,6.231%2019.137,8%2012.5,8%20C5.863,8%201.209,6.231%201.018,4.604%20L1.003,4.489%20Z%20M25,4.5%20C25,2.665%2020.131,0%2012.5,0%20C4.869,0%200,2.665%200,4.5%20L0,4.567%20L2.751,24.85%20C2.751,26.896%207.773,28%2012.5,28%20C17.226,28%2022.249,26.896%2022.244,24.917%20L23.396,16.39%20C24.217,16.604%2024.881,16.718%2025.392,16.718%20C25.985,16.718%2026.386,16.574%2026.628,16.285%20C26.827,16.047%2026.903,15.76%2026.845,15.454%20C26.708,14.716%2025.797,13.919%2023.89,12.87%20L23.869,12.896%20L25,4.567%20L25,4.5%20Z'%20id='Amazon-Simple-Storage-Service-Icon_32_Squid'%3e%3c/path%3e%3c/g%3e%3c/g%3e%3c/svg%3e`;var bigquery_default=`data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20id='standard_product_icon'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%20viewBox='0%200%20512%20512'%3e%3c!--%20Generator:%20Adobe%20Illustrator%2029.1.0,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%202.1.0%20Build%20142)%20--%3e%3cdefs%3e%3cstyle%3e%20.st0%20{%20fill:%20none;%20}%20.st1%20{%20fill:%20%234285f4;%20}%20.st2%20{%20fill:%20%2334a853;%20}%20.st3%20{%20fill:%20%23fbbc04;%20}%20.st4%20{%20fill:%20%23ea4335;%20}%20%3c/style%3e%3c/defs%3e%3cg%20id='bounding_box'%3e%3crect%20class='st0'%20width='512'%20height='512'/%3e%3c/g%3e%3cg%20id='art'%3e%3cpath%20class='st2'%20d='M311.9,418.9c-8.8,0-16-7.2-16-16v-145.8c0-8.8,7.2-16,16-16s16,7.2,16,16v145.8c0,8.8-7.2,16-16,16h0Z'/%3e%3cpath%20class='st2'%20d='M147.6,418.9c-8.8,0-16-7.2-16-16v-200.5c0-8.8,7.2-16,16-16s16,7.2,16,16v200.5c0,8.8-7.2,16-16,16Z'/%3e%3cpath%20class='st2'%20d='M229.8,437.4c-8.8,0-16-7.2-16-16V147.6c0-8.8,7.2-16,16-16s16,7.2,16,16v273.7c0,8.8-7.2,16-16,16h0Z'/%3e%3cpath%20class='st3'%20d='M229.8,437.4c-114.5,0-207.6-93.1-207.6-207.6h32c0,96.8,78.8,175.6,175.6,175.6s175.6-78.8,175.6-175.6h32c0,114.5-93.1,207.6-207.6,207.6h0Z'/%3e%3cpath%20class='st4'%20d='M437.4,229.8h-32c0-96.8-78.8-175.6-175.6-175.6S54.1,132.9,54.1,229.8H22.1c0-114.5,93.2-207.7,207.7-207.7s207.6,93.1,207.6,207.6h0Z'/%3e%3cpath%20class='st1'%20d='M487.4,464.8l-100-100c32.3-37.6,49.9-85,49.9-135.1s-21.6-107.6-60.8-146.8l-22.6,22.6c33.2,33.2,51.4,77.3,51.4,124.2s-18.3,90.9-51.5,124.1h0c-5,5-7.5,7-11.8,10.8l122.8,122.8c3.1,3.1,7.2,4.7,11.3,4.7h0c4.1,0,8.2-1.6,11.3-4.7,6.2-6.2,6.2-16.4,0-22.6h0Z'/%3e%3c/g%3e%3c/svg%3e`;var brevo_default=`data:image/svg+xml,%3csvg%20width='32'%20height='32'%20viewBox='0%200%2032%2032'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M32%2016C32%2024.8366%2024.8366%2032%2016%2032C7.16344%2032%200%2024.8366%200%2016C0%207.16344%207.16344%200%2016%200C24.8366%200%2032%207.16344%2032%2016Z'%20fill='%230B996E'/%3e%3cpath%20d='M21.0024%2014.5395C21.9917%2013.5708%2022.4552%2012.4513%2022.4552%2011.0897C22.4552%208.27639%2020.3848%206.4%2017.2642%206.4H9.6V26.4H15.7803C20.478%2026.4%2024%2023.5258%2024%2019.7135C24%2017.6254%2022.9188%2015.7502%2021.0024%2014.5395ZM12.3813%209.00158H16.9547C18.4995%209.00158%2019.5198%209.87892%2019.5198%2011.2101C19.5198%2012.7227%2018.1913%2013.8726%2015.4721%2014.7499C13.6179%2015.3242%2012.784%2015.8086%2012.4746%2016.3842L12.3813%2016.385V9.00158ZM15.533%2023.7984H12.3813V20.7125C12.3813%2019.3509%2013.5558%2018.0197%2015.1937%2017.5049C16.6466%2017.0206%2017.8508%2016.5363%2018.8711%2016.0228C20.2307%2016.8101%2021.0646%2018.1705%2021.0646%2019.593C21.0646%2022.0133%2018.7157%2023.7984%2015.533%2023.7984Z'%20fill='white'/%3e%3c/svg%3e`;var calendly_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='32'%20height='32'%20viewBox='0%200%2032%2032'%20fill='none'%3e%3cpath%20d='M32%2016C32%2028.0702%2026.5636%2032%2016%2032C5.43644%2032%200%2028.0498%200%2016C0%203.95022%205.43644%200%2016%200C26.5636%200%2032%203.95022%2032%2016Z'%20fill='url(%23paint0_linear_38184_90)'%3e%3c/path%3e%3cpath%20d='M16.0001%2028.5779C7.69694%2028.5779%203.42236%2025.488%203.42236%2016.0004C3.42236%206.51285%207.69614%203.42236%2016.0001%203.42236C24.3041%203.42236%2028.5779%206.51187%2028.5779%2016.0004C28.5779%2025.4889%2024.3037%2028.5779%2016.0001%2028.5779ZM22.8505%209.18627C18.4643%204.79925%2011.8407%204.31045%208.05747%208.09356C4.27392%2011.8771%204.76316%2018.5005%209.14974%2022.8866C13.5364%2027.2737%2020.1593%2027.762%2023.9425%2023.9788C27.726%2020.1953%2027.2371%2013.5723%2022.8506%209.18619L22.8505%209.18627ZM16.0001%2020.3382C17.7685%2020.3382%2019.2715%2019.1249%2019.8168%2017.4368C19.865%2017.2862%2020.0042%2017.184%2020.162%2017.184H22.0489C22.2106%2017.184%2022.3353%2017.3251%2022.3169%2017.4859C21.9008%2021.1848%2019.7653%2022.4363%2016.0001%2022.4363C11.7797%2022.4363%209.60761%2020.8641%209.60761%2016.0361C9.60761%2011.2082%2011.7793%209.63632%2016.0001%209.63632C19.7656%209.63632%2021.9008%2010.8875%2022.3169%2014.5868C22.3353%2014.7475%2022.2105%2014.8888%2022.0489%2014.8888H20.162C20.0041%2014.8888%2019.865%2014.7865%2019.8168%2014.6359C19.2715%2012.9478%2017.7689%2011.7345%2016.0001%2011.7345C13.7715%2011.7345%2011.9649%2013.6601%2011.9649%2016.0361C11.9649%2018.412%2013.7715%2020.338%2016.0001%2020.338V20.3382Z'%20fill='white'%3e%3c/path%3e%3cdefs%3e%3clinearGradient%20id='paint0_linear_38184_90'%20x1='16'%20y1='0'%20x2='16'%20y2='32'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%236AB0FF'%3e%3c/stop%3e%3cstop%20offset='1'%20stop-color='%234793EB'%3e%3c/stop%3e%3c/linearGradient%3e%3c/defs%3e%3c/svg%3e`;var canva_default=`/assets/canva-B5mQPODE.png`;var chargebee_default=`/assets/chargebee-C9RrJZH9.png`;var clay_default=`/assets/clay-CKiqv_h5.png`;var clickhouse_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='512'%20height='512'%20viewBox='0%200%20512%20512'%3e%3crect%20width='512'%20height='512'%20rx='8'%20fill='%23161616'/%3e%3cg%20fill='%23FCFF74'%3e%3crect%20x='83'%20y='83'%20width='38'%20height='346'%20rx='3'/%3e%3crect%20x='160'%20y='83'%20width='38'%20height='346'%20rx='3'/%3e%3crect%20x='237'%20y='83'%20width='38'%20height='346'%20rx='3'/%3e%3crect%20x='314'%20y='83'%20width='38'%20height='346'%20rx='3'/%3e%3crect%20x='391'%20y='218'%20width='38'%20height='76'%20rx='3'/%3e%3c/g%3e%3c/svg%3e`;var confidence_exp_default=`data:image/svg+xml,%3csvg%20width='32'%20height='32'%20viewBox='0%200%2032%2032'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cstyle%3e%20.bg%20{%20fill:%20%23000000;%20}%20.fg%20{%20fill:%20%23ffffff;%20}%20@media%20(prefers-color-scheme:%20dark)%20{%20.bg%20{%20fill:%20%23ffffff;%20}%20.fg%20{%20fill:%20%23000000;%20}%20}%20%3c/style%3e%3crect%20width='32'%20height='32'%20rx='4.92308'%20class='bg'/%3e%3cpath%20d='M25.8462%2021.2185C25.8462%2023.7743%2023.7743%2025.8462%2021.2185%2025.8462C18.6627%2025.8462%2016.5908%2023.7743%2016.5908%2021.2185C16.5908%2018.6627%2018.6627%2016.5908%2021.2185%2016.5908C23.7743%2016.5908%2025.8462%2018.6627%2025.8462%2021.2185Z'%20class='fg'/%3e%3cpath%20d='M25.8462%209.10769C25.8462%2012.5879%2023.0249%2015.4092%2019.5446%2015.4092H17.3785C16.9434%2015.4092%2016.5908%2015.0566%2016.5908%2014.6215V6.94154C16.5908%206.50651%2016.9434%206.15385%2017.3785%206.15385L25.0585%206.15385C25.4935%206.15385%2025.8462%206.50651%2025.8462%206.94154V9.10769Z'%20class='fg'/%3e%3cpath%20d='M15.4092%2014.6215C15.4092%2015.0566%2015.0566%2015.4092%2014.6215%2015.4092H6.94154C6.50651%2015.4092%206.15385%2015.0566%206.15385%2014.6215L6.15385%206.94154C6.15385%206.50651%206.50651%206.15385%206.94154%206.15385L14.6215%206.15385C15.0566%206.15385%2015.4092%206.50651%2015.4092%206.94154V14.6215Z'%20class='fg'/%3e%3cpath%20d='M15.4092%2021.2185C15.4092%2023.7743%2013.3373%2025.8462%2010.7815%2025.8462H6.94154C6.50651%2025.8462%206.15385%2025.4935%206.15385%2025.0585L6.15385%2021.2185C6.15385%2018.6627%208.22574%2016.5908%2010.7815%2016.5908C13.3373%2016.5908%2015.4092%2018.6627%2015.4092%2021.2185Z'%20class='fg'/%3e%3c/svg%3e`;var confidence_flags_default=`data:image/svg+xml,%3csvg%20width='32'%20height='32'%20viewBox='0%200%2032%2032'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cstyle%3e%20.bg%20{%20fill:%20%23000000;%20}%20.fg%20{%20fill:%20%23ffffff;%20}%20@media%20(prefers-color-scheme:%20dark)%20{%20.bg%20{%20fill:%20%23ffffff;%20}%20.fg%20{%20fill:%20%23000000;%20}%20}%20%3c/style%3e%3crect%20width='32'%20height='32'%20rx='4.92308'%20class='bg'/%3e%3cpath%20d='M25.8462%2021.2185C25.8462%2023.7743%2023.7743%2025.8462%2021.2185%2025.8462C18.6627%2025.8462%2016.5908%2023.7743%2016.5908%2021.2185C16.5908%2018.6627%2018.6627%2016.5908%2021.2185%2016.5908C23.7743%2016.5908%2025.8462%2018.6627%2025.8462%2021.2185Z'%20class='fg'/%3e%3cpath%20d='M25.8462%209.10769C25.8462%2012.5879%2023.0249%2015.4092%2019.5446%2015.4092H17.3785C16.9434%2015.4092%2016.5908%2015.0566%2016.5908%2014.6215V6.94154C16.5908%206.50651%2016.9434%206.15385%2017.3785%206.15385L25.0585%206.15385C25.4935%206.15385%2025.8462%206.50651%2025.8462%206.94154V9.10769Z'%20class='fg'/%3e%3cpath%20d='M15.4092%2014.6215C15.4092%2015.0566%2015.0566%2015.4092%2014.6215%2015.4092H6.94154C6.50651%2015.4092%206.15385%2015.0566%206.15385%2014.6215L6.15385%206.94154C6.15385%206.50651%206.50651%206.15385%206.94154%206.15385L14.6215%206.15385C15.0566%206.15385%2015.4092%206.50651%2015.4092%206.94154V14.6215Z'%20class='fg'/%3e%3cpath%20d='M15.4092%2021.2185C15.4092%2023.7743%2013.3373%2025.8462%2010.7815%2025.8462H6.94154C6.50651%2025.8462%206.15385%2025.4935%206.15385%2025.0585L6.15385%2021.2185C6.15385%2018.6627%208.22574%2016.5908%2010.7815%2016.5908C13.3373%2016.5908%2015.4092%2018.6627%2015.4092%2021.2185Z'%20class='fg'/%3e%3c/svg%3e`;var contentful_default=`data:image/svg+xml,%3csvg%20width='80'%20height='80'%20viewBox='0%200%2080%2080'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M31.3383%2013.6374C33.8106%2016.1097%2034.7627%2019.7261%2033.8106%2023.0945C36.8589%2021.2623%2040.3474%2020.3022%2043.8998%2020.3022H43.9718C49.1964%2020.3182%2054.197%2022.4144%2057.8695%2026.1269C60.8138%2029.2232%2065.7104%2029.3433%2068.7988%2026.3989C71.8951%2023.4546%2072.0152%2018.558%2069.0708%2015.4696C68.9988%2015.3896%2068.9188%2015.3176%2068.8388%2015.2376C62.278%208.60478%2053.3409%204.86033%2044.0118%204.84433H43.8758C36.891%204.82833%2030.0661%206.90858%2024.2734%2010.813H24.4895C27.0578%2010.813%2029.5141%2011.8292%2031.3303%2013.6454L31.3383%2013.6374Z'%20fill='%231770E6'/%3e%3cpath%20d='M63.2228%2051.7217C61.1825%2051.7217%2059.2223%2052.5298%2057.7741%2053.9619C54.0937%2057.6264%2049.1091%2059.6826%2043.9085%2059.6826H43.8365C40.276%2059.6826%2036.7796%2058.6985%2033.7393%2056.8423C33.9713%2057.6824%2034.0833%2058.5545%2034.0833%2059.4266C34.0833%2064.7632%2029.7548%2069.0917%2024.4181%2069.0917H24.1621C29.9468%2073.0282%2036.7796%2075.1485%2043.7805%2075.1565H43.9165C53.1976%2075.1725%2062.1027%2071.5%2068.6714%2064.9472C71.7038%2061.9389%2071.7198%2057.0423%2068.7194%2054.01C67.2713%2052.5458%2065.287%2051.7217%2063.2308%2051.7217H63.2228Z'%20fill='%23E44F20'/%3e%3cpath%20d='M17.5772%2052.5862C19.3854%2050.77%2021.8497%2049.7459%2024.418%2049.7539C25.3061%2049.7539%2026.1862%2049.8739%2027.0343%2050.1139C23.2738%2043.8652%2023.2898%2036.0482%2027.0743%2029.8155C21.9217%2031.2317%2016.601%2028.1993%2015.1849%2023.0467C14.9528%2022.2066%2014.8408%2021.3425%2014.8408%2020.4784V20.2144C6.75186%2032.0958%206.71985%2047.7056%2014.7448%2059.627V59.427C14.7448%2056.8587%2015.7529%2054.4024%2017.5772%2052.5862Z'%20fill='%23FFDA00'/%3e%3cpath%20d='M24.5055%2012.5254C22.3052%2012.5254%2020.7691%2013.4375%2018.9048%2015.3017C17.1286%2017.0779%2016.5685%2018.6301%2016.5605%2020.4783C16.5605%2024.8709%2020.121%2028.4233%2024.5135%2028.4233C28.906%2028.4233%2032.4585%2024.8629%2032.4585%2020.4703C32.4585%2016.0858%2028.898%2012.5254%2024.5135%2012.5254H24.5055Z'%20fill='%231770E6'/%3e%3cpath%20d='M16.4492%2059.4346C16.4492%2061.6268%2017.3613%2063.171%2019.2256%2065.0352C21.0018%2066.8115%2022.5539%2067.3795%2024.4022%2067.3795C28.7787%2067.3635%2032.3151%2063.8111%2032.2991%2059.4346C32.2831%2055.0581%2028.7307%2051.5216%2024.3542%2051.5377C19.9856%2051.5537%2016.4572%2055.0901%2016.4572%2059.4586V59.4346H16.4492Z'%20fill='%23E44F20'/%3e%3c/svg%3e`;var databricks_default=`data:image/png;base64,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`;var dbt_semantic_layer_default=`/assets/dbt-semantic-layer-Bm4o12g2.png`;var elevenlabs_default=`data:image/svg+xml,%3csvg%20width='500'%20height='500'%20viewBox='0%200%20500%20500'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20clip-path='url(%23clip0_470_2)'%3e%3crect%20width='500'%20height='500'%20rx='100'%20fill='white'/%3e%3cpath%20d='M314%20355H271V145H314V355Z'%20fill='black'/%3e%3cpath%20d='M229%20355H186V145H229V355Z'%20fill='black'/%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_470_2'%3e%3crect%20width='500'%20height='500'%20fill='white'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e`;var figma_default=`data:image/svg+xml,%3csvg%20width='64'%20height='64'%20viewBox='0%200%2064%2064'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M11.9999%2052.0001C11.9999%2046.4772%2016.477%2042.0001%2021.9999%2042.0001H31.9999V52.0001C31.9999%2057.5229%2027.5227%2062.0001%2021.9999%2062.0001V62.0001C16.477%2062.0001%2011.9999%2057.5229%2011.9999%2052.0001V52.0001Z'%20fill='%2324CB71'/%3e%3cpath%20d='M32%202V22H42C47.5228%2022%2052%2017.5228%2052%2012V12C52%206.47715%2047.5228%202%2042%202L32%202Z'%20fill='%23FF7237'/%3e%3ccircle%20cx='41.9166'%20cy='31.9999'%20r='10'%20fill='%2300B6FF'/%3e%3cpath%20d='M11.9999%2011.9999C11.9999%2017.5228%2016.477%2021.9999%2021.9999%2021.9999L31.9999%2021.9999L31.9999%201.99994L21.9999%201.99994C16.477%201.99994%2011.9999%206.47709%2011.9999%2011.9999V11.9999Z'%20fill='%23FF3737'/%3e%3cpath%20d='M11.9999%2032.0001C11.9999%2037.5229%2016.477%2042.0001%2021.9999%2042.0001H31.9999L31.9999%2022.0001L21.9999%2022.0001C16.477%2022.0001%2011.9999%2026.4772%2011.9999%2032.0001V32.0001Z'%20fill='%23874FFF'/%3e%3c/svg%3e`;var firebase_cloud_messaging_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALQAAAC0CAYAAAA9zQYyAAAKkklEQVR42u2de2xURRTGDwqiiEoUNDExIYg8dveuxapojBHlL1TQhPhK1BhjjIn+YUIgMRrFB2oM0NIWQYgKCYqIGhIqEVQK9AE0SgwGebTdvkspDxUEpULHudvdutZtu9u9987Mme9LvjSbsE0z8+PkzMyZM0QQBEEQBEEQBEEQBEEQlLViDh3EKEAs1BolUReRDlMJRgMyVmIaDY1FEjAnXBumuzEykHFqDNH0ul4wu5aAd7Xl0wiMEGSMZGrxogtuOqBd10tjlCAjVOvQV32B3NsYLUjvyByhpZnCnPBxjBrEBebunDpMGzB6kLFpRtqc2qGnMIqQHjBH6K1cYE76wES6FqMJKZVMF2Z6AbPrRgeLREih6vNolFcwA2pIfXT2GOYUn8XoQoGqxfEN5qR3Y5ShQNTkP8zJ08TXMNqQ3zsavwQBc9LNeXQDRh3yB+YwPRokzIlCJlE/li7G6EOeqmY8DY8FDHPSDdj5gLxWs6MG5qQ7bgTUkEeSQP2sEuaeiwEROoLZgHJSQ4Qm6wBzSk69BLMCGZtqpPNBhyZhZqDBpBoHdIM5eYULswNlJfdyq44wp27nYZagbKKz0N1tUUANZQKzQyUmAB2P1A7VY8agfhUzBOYUf4FZg9Kq1qHOOvOAdq9w3YXZg4zMnftaJMqE+gLMIJQK8x+mAo3mNdB/VHMjTTEZ5hT/jdmE/u0OysC1EfoRM2pzdJ5CY7jAjNsuEB2J8oK5x7jtgp0NTsbxuJ0wt3MFGn0+LFSMMcxJH8dtF2ui85o6C4BOuBwzzlw6Fu/77Kcx60x1yKFxlsHcXXI6gUZj9hmq1b7ojONxbNXxNQjgtLPhULHtQEvHQAKf6NwJoKUdWgQakG6wcmuErgMRBqs2SnMBMo7HEZ05R2ncHjd4QQiA+4rU50GHaemGzBcBb78XA9aBErOA3gdwBzh4idJUkGKImhwAm8kicT5uj2NByMktqKE2IN24icYD1qwOXTrksA0BObpG5zAdBKhZd2OaB3J03a5z6AwgHcSzcmG6EvRoqHrAiRe4sCCEEz6NfFqndCNEdwLKnPtQF4EkXaKzQ4sBZe7vutTl0xWgSQ+g6wElrm+xkfsKK4D0zL+DKMVqxpG3t0VMUboHVGGHA+3FIA/2n8fSxYDQFzeCLgVqy6fRgM+nRaIMFiAsYKGo31fjiea+JH6gK0QF3SwqqVTsISF2S1dJVwxg999US++Jf/5YlNM4sZkuTf7emgg9DvB83Z+eA3pdgMtpgvRa8VOG4GbrXdKVJE69SntjeXLww4APC0Q/ga70AeJ0XiW9RLqIxN9vy0mIAkIfovR2u2GuoIZAYHa9IgF0qiXcJ1+IF7EDSPTK8wRoEZhL0gCdYkRtz9xuK8ztgQK9uH+gk+5aRKJ2MsBElNY5OmcBdE/EXoBUJAdX2wVzFW3SHehkjn3iSQA6yD55Q2wCWhgBdNKFSEMG0X1puS37zjMDhzlXoBM+fD9ARS7dG+hqBTBXdKcPuQIdz63fkdEnBFgzcU2EpmEx6Jc/8AbopHHimJH/4g7zQWVAr/IWaNcx7FvbnXYoWQwmvc57oN00puEWQDvA4nAl15qNq5XB7LrUB6ARqe19FUCU03qlQG/1D2hA3b/3hWgkP6D3KITZ9TZ/gXbTjxhuladvIxahBbxgLqOhSmF2vcNnoBNQA2AL+kzHi/hVA10ZANCu3wfA7Hc7JFBHlQNd0X2EHQTUnW8C4DS+mQ/QuzSA2aPj70zdPhMQs213oAXMPpwWDniaCIhTfR5Ae+21wQItigEyu6eXxXaaow3QmwIGWrpjNmBO+gSHNrwSpBZtgN4ZPNDuVh5qqXv8HAegT2kDdKUCoKVPzwXMcYdpEwqSvHaxGqhxPzHuswDaa6+k8yqA7lwAoA9zKFQKrDNSpv5eTYR2XTvJbqCbOByBawWzwjy6pzUCjsANhnkHjdEO6ACPwNPueFgepcum0VBzgf5Og6IkDU4MU33sMdRGm5xu3KYl0GXqgLa9Gs/oN8MlPPdqCbTCPDp+u8XiiwD7J9FVANoPKwT65PNWPwV3NYD2w19SlzKoSwC0qTdVpmoL9E61UdrW+g6zc+gdFNIWaA/bg+ECQBbtwcbT5eYCvVlxL46BvF4d0OfetRPotnwagZNCjrsdlt4QF6b3jdYaaNcFqO0I7MXZCIqTgihWOq8K6IZb0Z8D5aOMajvaH7AL6CNRHtV2Z7QHeg0OWALyUQ5At2oPdJUaoDvfsO7m92cccuhC7YHufpgz+Fx6qXWLwkeIg4wAugqVd75v2eXTMADNtFWYbRGaTaOZONA7DQF6u4IiJXseH2LUCuwHQ4AOuqy02Cqg+TxqL8rpIWOA3gqgfVkQRuk2ThF6hDFAB1mFZ1HKQdyk7AVZnYuWLFkUNjkcga6gKqOiNLbtvLul4tA2fkBX0u1GAV1B6B/tVf6cR6OIo7SvvOvtz/wF+uxrFly5chg/jywhOYYobV1x0la+QNfQcOOALvcP6CMWlI8emEiXEWcZc2qY6mU+9YyOsj/u7iLukoB8YhzQflwCsOGpCodK+AOtwzPJg/EWj4EuxGEKpyh91EioV6BXdBbRud4eoAUNMRJoD1OPlnuY1z4/RBeSTTLirqGPux61IdZAN5FtElV0ibFReiNqOAZo9zWcbJTYayjQOb4C0PEw6626E2SrjCsr9Sif5rz/TLZLVFK10VAXoCApxZsJMrBoKYdFYvss1DzbsOPxutFRelsWp4NMdzdqIvQESE6FutpgoF2XDgz0mXlsU41OEPz/BeIwmXp0GQ3153buPYPevlOPl4wG2vXq9DD/+RLbI24H5PYPdafxUH+aplt/mCXMLSA2M6gFJ6h/ewatvewGuoxGsoB6Nd/cGZRmvzc9jwPUJ19gGJ3DNBOEDi712G800IlDl9NzWOXNH4LMXKAup3NGwlzZq9ajgMXCsBlEegH1LibVeAbfI2zE0bbF9R5fD1Bt55gFcwNgthjqDIuVWqcbA/RZkGdrzUeWXUv/elnvvBqRObjdjy5OBf81E7Q8ODkD0oKFWq9Ltjk+ONQxWyuY60CYmi29tayaoxfLaH2D4l7OEXoPZKnd0gtx6056/HE1tRn1eTQWRNm8A1JAvnb3j+UFBLND50CQnlD/GNh7hoUUyLMVp+f6W9wkYd4AcnSGuozGq75q5bmLSBx7zPstuaPcezczi9bNnsO8VAHMvRaNTXd4AvReEGLmgvEaT+pAynzOlwfRSuzwjOxBbouS2BeikSDDdLCr6NlBLRrd7yzXCOQ0PnxfBq9QuQ5RHkjgl4Z8lzHYpXqD3DvH/vXp9CAfCtMrmHn+YH8kdvdTKVdgEMy9n4qbL1OLW+L7ynMw07aBXUGzenLsjeZCnLp3Lf8z3oSZhUgC0RLYo/UepxvyJ26SQH2AXUDTXEDcLTJtIS6J/zwkCmkqZgzKHO6FNFpGwKoEQMq36uTPUvm3XIWZgbwBvIiul1B9K33Kt/SkqPsARUbf3+TnLfLzGIw8FGSKMkoC+KAEcKGEr0xC2C5WJi7JLkt4aWLBlvz8Qc8l2kb5vW/k9xbI3zFDzKeLMKIQBEEQBEEQBEEQBEEQBDHUP3adQPAL0BMlAAAAAElFTkSuQmCC`;var firecrawl_default=`/assets/firecrawl-C0P1e2_8.ico`;var fireflies_default=`/assets/fireflies-ByblPuPy.png`;var fireworks_ai_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20xmlns:svgjs='http://svgjs.dev/svgjs'%20width='32'%20height='32'%3e%3csvg%20width='32'%20height='32'%20viewBox='0%200%2032%2032'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M15.9851%2019.1274C15.0969%2019.1274%2014.2999%2018.6001%2013.96%2017.7838L9.86258%208H12.2608L15.9991%2016.9499L19.7339%208H22.1321L18.0102%2017.7873C17.6686%2018.6001%2016.8733%2019.1274%2015.9851%2019.1274Z'%20fill='%236720FF'%3e%3c/path%3e%3cpath%20d='M21.3316%2023.8029C20.4469%2023.8029%2019.6533%2023.2792%2019.31%2022.4698C18.9649%2021.6535%2019.1436%2020.7215%2019.7672%2020.0891L27.2299%2012.5302L28.1618%2014.7287L21.3298%2021.636L31.068%2021.5817L32%2023.7802L21.3333%2023.8065L21.3298%2023.8029H21.3316Z'%20fill='%236720FF'%3e%3c/path%3e%3cpath%20d='M0%2023.7766L0.931955%2021.5781L10.6702%2021.6324L3.83993%2014.7234L4.77189%2012.5249L12.2345%2020.0838C12.8582%2020.7145%2013.0386%2021.65%2012.6918%2022.4645C12.3484%2023.2756%2011.5513%2023.7977%2010.6702%2023.7977L0.00350359%2023.7731L0%2023.7766Z'%20fill='%236720FF'%3e%3c/path%3e%3c/svg%3e%3cstyle%3e@media%20(prefers-color-scheme:%20light)%20{%20:root%20{%20filter:%20none;%20}%20}%20@media%20(prefers-color-scheme:%20dark)%20{%20:root%20{%20filter:%20none;%20}%20}%20%3c/style%3e%3c/svg%3e`;var gatewayapi_default=`/assets/gatewayapi-Cnu1G9ls.png`;var gemini_enterprise_default=`/assets/gemini-enterprise-C8b_xt1q.png`;var github_api_default=`data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2018.1.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Layer_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%2036%2036'%20enable-background='new%200%200%2036%2036'%20xml:space='preserve'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20fill='%23191717'%20d='M18,1.4C9,1.4,1.7,8.7,1.7,17.7c0,7.2,4.7,13.3,11.1,15.5%20c0.8,0.1,1.1-0.4,1.1-0.8c0-0.4,0-1.4,0-2.8c-4.5,1-5.5-2.2-5.5-2.2c-0.7-1.9-1.8-2.4-1.8-2.4c-1.5-1,0.1-1,0.1-1%20c1.6,0.1,2.5,1.7,2.5,1.7c1.5,2.5,3.8,1.8,4.7,1.4c0.1-1.1,0.6-1.8,1-2.2c-3.6-0.4-7.4-1.8-7.4-8.1c0-1.8,0.6-3.2,1.7-4.4%20c-0.2-0.4-0.7-2.1,0.2-4.3c0,0,1.4-0.4,4.5,1.7c1.3-0.4,2.7-0.5,4.1-0.5c1.4,0,2.8,0.2,4.1,0.5c3.1-2.1,4.5-1.7,4.5-1.7%20c0.9,2.2,0.3,3.9,0.2,4.3c1,1.1,1.7,2.6,1.7,4.4c0,6.3-3.8,7.6-7.4,8c0.6,0.5,1.1,1.5,1.1,3c0,2.2,0,3.9,0,4.5%20c0,0.4,0.3,0.9,1.1,0.8c6.5-2.2,11.1-8.3,11.1-15.5C34.3,8.7,27,1.4,18,1.4z'/%3e%3c/svg%3e`;var gitlab_api_default=`/assets/gitlab-api-D0BEk8al.png`;var gmail_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='192'%20height='192'%20fill='none'%20viewBox='0%200%20192%20192'%3e%3cpath%20fill='url(%23a)'%20d='M146%2044h38v110c0%206.627-5.373%2012-12%2012h-20a6%206%200%200%201-6-6z'/%3e%3cpath%20fill='%23fc413d'%20d='M46%2044H8v110c0%206.627%205.373%2012%2012%2012h20a6%206%200%200%200%206-6z'/%3e%3cpath%20fill='url(%23b)'%20d='M39.226%2030.456c-8.033-6.752-20.018-5.714-26.77%202.319-6.752%208.032-5.714%2020.017%202.319%2026.77l76.078%2063.949a8%208%200%200%200%2010.295%200l76.078-63.95c8.032-6.752%209.07-18.737%202.318-26.77-6.752-8.032-18.737-9.07-26.769-2.318L96%2078.18z'/%3e%3cdefs%3e%3clinearGradient%20id='a'%20x1='165'%20x2='165'%20y1='44'%20y2='166'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%2360d673'/%3e%3cstop%20offset='.17'%20stop-color='%2342c868'/%3e%3cstop%20offset='.39'%20stop-color='%230ebc5f'/%3e%3cstop%20offset='.62'%20stop-color='%2300a9bb'/%3e%3cstop%20offset='.86'%20stop-color='%233c90ff'/%3e%3cstop%20offset='1'%20stop-color='%233186ff'/%3e%3c/linearGradient%3e%3clinearGradient%20id='b'%20x1='8'%20x2='184'%20y1='46.13'%20y2='46.13'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='.08'%20stop-color='%23ff63a0'/%3e%3cstop%20offset='.3'%20stop-color='%23fc413d'/%3e%3cstop%20offset='.5'%20stop-color='%23fc413d'/%3e%3cstop%20offset='.65'%20stop-color='%23fc413d'/%3e%3cstop%20offset='.72'%20stop-color='%23fc5c30'/%3e%3cstop%20offset='.86'%20stop-color='%23feb10c'/%3e%3cstop%20offset='.91'%20stop-color='%23fec700'/%3e%3cstop%20offset='.96'%20stop-color='%23ffdb0f'/%3e%3c/linearGradient%3e%3c/defs%3e%3c/svg%3e`;var gong_default=`data:image/svg+xml,%3csvg%20width='512'%20height='512'%20viewBox='0%200%20512%20512'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3crect%20width='512'%20height='512'%20rx='85.3333'%20fill='%238039DF'/%3e%3crect%20x='53.4446'%20y='53.4446'%20width='21.3333'%20height='21.3333'%20fill='%233E0075'/%3e%3crect%20x='437.333'%20y='53.3333'%20width='21.3333'%20height='21.3333'%20fill='%233E0075'/%3e%3crect%20x='437.333'%20y='437.333'%20width='21.3333'%20height='21.3333'%20fill='%233E0075'/%3e%3crect%20x='53.3333'%20y='437.333'%20width='21.3333'%20height='21.3333'%20fill='%233E0075'/%3e%3cpath%20d='M427.2%20229.814H328.146C322.677%20229.814%20318.423%20235.887%20320.246%20240.745L343.946%20302.075C345.162%20304.504%20342.731%20307.54%20339.693%20307.54L309.308%20305.719C308.093%20305.719%20306.877%20306.326%20305.662%20307.54L282.57%20340.938C281.354%20342.76%20278.924%20343.367%20276.493%20342.153L241.247%20318.471C240.031%20317.256%20238.208%20317.256%20236.385%20318.471L187.77%20351.261C184.732%20353.69%20180.478%20350.654%20181.693%20347.011L195.67%20298.432C196.278%20296.61%20195.062%20294.181%20193.239%20293.574L167.716%20283.251C165.285%20282.037%20164.07%20279%20165.893%20277.179L188.378%20249.246C189.593%20248.031%20189.593%20245.602%20188.378%20244.388L169.539%20217.062C167.716%20214.634%20169.539%20210.99%20172.578%20210.99L202.355%20208.561C204.785%20208.561%20206.001%20206.74%20206.001%20204.311L203.57%20163.019C203.57%20159.982%20206.608%20158.161%20209.039%20158.768L245.501%20173.949C247.324%20174.556%20249.147%20173.949%20250.362%20172.734L275.885%20144.802C277.708%20142.373%20281.354%20142.98%20282.57%20146.016L297.762%20184.879C299.585%20189.737%20305.662%20191.559%20309.916%20188.522L369.469%20144.194C376.154%20139.337%20371.9%20128.406%20363.392%20129.621L325.108%20134.479C323.285%20134.479%20321.462%20133.871%20320.854%20132.05L300.193%2079.2203C297.762%2073.7552%20291.077%2072.5408%20286.823%2076.7914L241.854%20125.37C240.639%20126.585%20238.816%20127.192%20236.993%20126.585L178.047%20101.688C172.578%2099.2591%20167.109%20102.902%20166.501%20108.975L164.07%20169.698C164.07%20172.127%20162.247%20173.342%20160.424%20173.342L106.339%20176.985C100.263%20177.592%2096.6164%20184.272%20100.263%20189.737L136.116%20242.566C137.332%20243.781%20137.332%20246.21%20136.116%20247.424L99.6549%20289.323C96.6164%20292.36%2098.4395%20299.039%20103.301%20300.861L145.232%20319.078C147.055%20319.685%20148.27%20322.114%20147.662%20323.936L120.924%20427.773C119.101%20435.06%20127.609%20440.525%20133.686%20436.274L233.954%20364.62C235.17%20363.406%20236.993%20363.406%20238.816%20364.62L284.393%20396.804C288.039%20399.233%20293.508%20398.626%20295.939%20394.375L324.5%20350.654C325.108%20349.44%20326.931%20348.832%20328.146%20348.832L396.208%20357.334C401.677%20357.941%20407.146%20353.69%20405.323%20348.225L376.762%20274.75C376.154%20272.928%20376.762%20270.499%20379.192%20269.285L430.846%20244.995C438.138%20241.352%20435.708%20229.814%20427.2%20229.814Z'%20fill='white'/%3e%3c/svg%3e`;var google_ads_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20enable-background='new%200%200%20192%20192'%20height='192'%20viewBox='0%200%20192%20192'%20width='192'%3e%3cg%3e%3crect%20fill='none'%20height='192'%20width='192'/%3e%3cg%3e%3crect%20fill='%23FBBC04'%20height='58.67'%20transform='matrix(0.5%20-0.866%200.866%200.5%20-46.2127%20103.666)'%20width='117.33'%20x='8'%20y='62.52'/%3e%3cpath%20d='M180.07,127.99L121.4,26.38c-8.1-14.03-26.04-18.84-40.07-10.74c-14.03,8.1-18.84,26.04-10.74,40.07%20l58.67,101.61c8.1,14.03,26.04,18.83,40.07,10.74C183.36,159.96,188.16,142.02,180.07,127.99z'%20fill='%234285F4'/%3e%3ccircle%20cx='37.34'%20cy='142.66'%20fill='%2334A853'%20r='29.33'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e`;var google_analytics_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20enable-background='new%200%200%20192%20192'%20height='192'%20viewBox='0%200%20192%20192'%20width='192'%3e%3crect%20fill='none'%20height='192'%20width='192'/%3e%3cg%3e%3cg%3e%3cpath%20d='M174,162c0,13.03-11.08,23.42-24.12,21.84C138.91,182.52,131,172.4,131,161.09c0-28.4,0-101.79,0-130.19%20c0-11.3,7.91-21.43,18.9-22.75C162.94,6.58,174,16.97,174,30V162z'%20fill='%23F6AA1B'/%3e%3cellipse%20cx='39.5'%20cy='162.21'%20fill='%23E27625'%20rx='21.5'%20ry='21.79'/%3e%3cpath%20d='M95.93,74.01C84.12,74.32,75,84.91,75,97.02v58.82c0,15.95,6.9,25.6,17.01,27.69%20c13.85,2.86,25.99-7.88,25.99-21.55V96.01C118,83.66,108.08,73.69,95.93,74.01z'%20fill='%23E27625'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e`;var google_calendar_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='192'%20height='192'%20fill='none'%3e%3cpath%20fill='%23bbe2ff'%20d='M32%2036.8C32%2020.894%2044.894%208%2060.8%208h70.4C147.106%208%20160%2020.894%20160%2036.8v30.4c0%2015.906-12.894%2028.8-28.8%2028.8H60.8C44.894%2096%2032%2083.106%2032%2067.2z'/%3e%3cpath%20fill='%233c90ff'%20d='M19.867%2049.392C17.818%2033.82%2029.94%2020%2045.645%2020h100.71c15.706%200%2027.827%2013.82%2025.778%2029.392L166%2096l6.133%2046.608C174.182%20158.18%20162.061%20172%20146.355%20172H45.645c-15.706%200-27.827-13.82-25.778-29.392L26%2096z'/%3e%3cmask%20id='a'%20width='154'%20height='152'%20x='19'%20y='20'%20maskUnits='userSpaceOnUse'%20style='mask-type:alpha'%3e%3cpath%20fill='%233c90ff'%20d='M19.867%2049.392C17.818%2033.82%2029.94%2020%2045.645%2020h100.71c15.706%200%2027.827%2013.82%2025.778%2029.392L166%2096l6.133%2046.608C174.182%20158.18%20162.061%20172%20146.355%20172H45.645c-15.706%200-27.827-13.82-25.778-29.392L26%2096z'/%3e%3c/mask%3e%3cg%20mask='url(%23a)'%3e%3cpath%20fill='url(%23b)'%20d='M0%200h166v76H0z'%20transform='matrix(1%200%200%20-1%2013%20172)'/%3e%3c/g%3e%3cmask%20id='c'%20width='154'%20height='152'%20x='19'%20y='20'%20maskUnits='userSpaceOnUse'%20style='mask-type:alpha'%3e%3cpath%20fill='%233186ff'%20d='M19.867%2049.392C17.818%2033.82%2029.94%2020%2045.645%2020h100.71c15.706%200%2027.827%2013.82%2025.778%2029.392L166%2096l6.133%2046.608C174.182%20158.18%20162.061%20172%20146.355%20172H45.645c-15.706%200-27.827-13.82-25.778-29.392L26%2096z'/%3e%3c/mask%3e%3cg%20mask='url(%23c)'%3e%3cpath%20fill='url(%23d)'%20d='M32%2027.2C32%2016.596%2040.596%208%2051.2%208h89.6c10.604%200%2019.2%208.596%2019.2%2019.2V96H32z'%20filter='url(%23e)'/%3e%3c/g%3e%3cpath%20fill='%23fff'%20d='M75.353%20133.336q-6.282%200-10.777-2.043t-7.61-5.465q-3.065-3.474-4.342-6.793T51.603%20115a2.07%202.07%200%200%201%201.021-1.124l5.67-2.247q.714-.357%201.43-.102.714.204%201.685%202.349%201.022%202.145%202.86%204.546a14.3%2014.3%200%200%200%204.495%203.728q2.606%201.328%206.435%201.328%206.18%200%209.807-3.575%203.677-3.575%203.677-9.091%200-5.976-3.882-9.194-3.881-3.269-10.266-3.269h-5.362a1.9%201.9%200%200%201-1.328-.51q-.51-.562-.511-1.277v-5.465q0-.767.51-1.277a1.82%201.82%200%200%201%201.329-.562h4.647q5.721%200%209.194-3.116t3.473-8.07q0-4.902-3.116-7.916t-8.58-3.014q-3.065%200-5.312%201.022a11.5%2011.5%200%200%200-3.882%202.86%2022.7%2022.7%200%200%200-2.809%203.78q-1.174%201.941-1.89%202.145-.714.153-1.379-.255l-5.363-2.605q-.664-.358-.868-1.124t1.226-3.575q1.481-2.86%204.494-5.823a21%2021%200%200%201%207.049-4.597q4.035-1.635%209.398-1.634%209.96%200%2015.782%205.26%205.823%205.21%205.823%2013.791%200%205.925-2.86%2010.266-2.81%204.34-7.968%206.13v.204q6.231%201.838%209.806%206.741%203.627%204.853%203.626%2011.594%200%209.654-6.742%2015.834-6.74%206.18-17.57%206.18zm51.25-1.175q-.868%200-1.533-.664a2.25%202.25%200%200%201-.612-1.583V73.118l-11.492%208.274q-.614.46-1.431.307a1.96%201.96%200%200%201-1.225-.766l-3.32-4.7a1.98%201.98%200%200%201-.358-1.43q.153-.816.817-1.276l20.379-14.557q.256-.204.562-.306.307-.153.715-.153h4.291q.868%200%201.379.613.562.56.562%201.43v69.36q0%20.92-.664%201.583a2%202%200%200%201-1.533.664z'/%3e%3cdefs%3e%3clinearGradient%20id='b'%20x1='83'%20x2='83'%20y1='76'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%234fa0ff'/%3e%3cstop%20offset='1'%20stop-color='%233186ff'/%3e%3c/linearGradient%3e%3clinearGradient%20id='d'%20x1='89.06'%20x2='89.06'%20y1='21.75'%20y2='96.39'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23a9a8ff'/%3e%3cstop%20offset='.8'%20stop-color='%233c90ff'/%3e%3c/linearGradient%3e%3cfilter%20id='e'%20width='152'%20height='112'%20x='20'%20y='-4'%20color-interpolation-filters='sRGB'%20filterUnits='userSpaceOnUse'%3e%3cfeFlood%20flood-opacity='0'%20result='BackgroundImageFix'/%3e%3cfeBlend%20in='SourceGraphic'%20in2='BackgroundImageFix'%20result='shape'/%3e%3cfeGaussianBlur%20result='effect1_foregroundBlur_37330_7673'%20stdDeviation='6'/%3e%3c/filter%3e%3c/defs%3e%3c/svg%3e`;var google_docs_default=`data:image/svg+xml,%3csvg%20width='192'%20height='192'%20viewBox='0%200%20192%20192'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cmask%20id='mask0_37242_8762'%20style='mask-type:alpha'%20maskUnits='userSpaceOnUse'%20x='32'%20y='8'%20width='128'%20height='176'%3e%3cpath%20d='M130.334%20184L61.6%20184C52.6565%20184%2048.1848%20184%2044.6375%20182.596C39.5029%20180.563%2035.4374%20176.497%2033.4045%20171.362C32%20167.815%2032%20163.343%2032%20154.4L32%2037.6C32%2028.6565%2032%2024.1848%2033.4045%2020.6375C35.4374%2015.5029%2039.5029%2011.4374%2044.6375%209.40447C48.1848%208%2052.6565%208%2061.6%208L100%208L154.793%2062.7933L154.793%2062.7934C156.454%2064.4543%20157.285%2065.2848%20157.923%2066.2239C158.845%2067.5811%20159.479%2069.1131%20159.785%2070.725C159.997%2071.8404%20159.997%2073.0264%20159.995%2075.3985C159.96%20124.317%20159.938%20124.799%20159.937%20154.366C159.937%20163.332%20159.937%20167.816%20158.532%20171.363C156.499%20176.498%20152.434%20180.562%20147.299%20182.596C143.752%20184%20139.279%20184%20130.334%20184Z'%20fill='%233186FF'/%3e%3c/mask%3e%3cg%20mask='url(%23mask0_37242_8762)'%3e%3cpath%20d='M159.94%20184L31.9999%20184L31.9999%208.00001L99.9999%208L159.999%2068L159.94%20184Z'%20fill='%233186FF'/%3e%3cg%20filter='url(%23filter0_f_37242_8762)'%3e%3cpath%20d='M43%20192H149V70.2271V20H43V192Z'%20fill='url(%23paint0_linear_37242_8762)'/%3e%3c/g%3e%3c/g%3e%3cpath%20d='M154.995%2062.9951C152.489%2061.1143%20149.375%2060%20146%2060H112.8C105.731%2060%20100%2054.2692%20100%2047.2002V8L154.995%2062.9951Z'%20fill='%2376BBFF'/%3e%3crect%20x='64.001'%20y='114'%20width='64'%20height='12'%20rx='6'%20fill='white'/%3e%3crect%20x='64.001'%20y='143'%20width='48'%20height='12'%20rx='6'%20fill='white'/%3e%3cdefs%3e%3cfilter%20id='filter0_f_37242_8762'%20x='31'%20y='8'%20width='130'%20height='196'%20filterUnits='userSpaceOnUse'%20color-interpolation-filters='sRGB'%3e%3cfeFlood%20flood-opacity='0'%20result='BackgroundImageFix'/%3e%3cfeBlend%20mode='normal'%20in='SourceGraphic'%20in2='BackgroundImageFix'%20result='shape'/%3e%3cfeGaussianBlur%20stdDeviation='6'%20result='effect1_foregroundBlur_37242_8762'/%3e%3c/filter%3e%3clinearGradient%20id='paint0_linear_37242_8762'%20x1='96'%20y1='59.2839'%20x2='54.6124'%20y2='171.338'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0.33'%20stop-color='%233186FF'/%3e%3cstop%20offset='1'%20stop-color='%23A9A8FF'/%3e%3c/linearGradient%3e%3c/defs%3e%3c/svg%3e`;var google_drive_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='192'%20height='192'%20fill='none'%3e%3cmask%20id='a'%20width='168'%20height='154'%20x='12'%20y='18'%20maskUnits='userSpaceOnUse'%20style='mask-type:alpha'%3e%3cpath%20fill='%23b43333'%20d='M63.09%2037c14.626-25.333%2051.193-25.334%2065.819%200l45.033%2078c14.626%2025.334-3.657%2057.001-32.91%2057.001H50.967c-29.253%200-47.536-31.667-32.91-57.001z'/%3e%3c/mask%3e%3cg%20mask='url(%23a)'%3e%3cpath%20fill='url(%23b)'%20d='M206.905%20172.02h-91.888l-19.015-32.934%2045.944-79.578z'/%3e%3cpath%20fill='url(%23c)'%20d='M-14.919%20172.006%2050.04%2059.494v.002L31.032%2092.422h38.02L115%20172.004l-129.918.001z'/%3e%3cpath%20fill='url(%23d)'%20d='M96.007-20.085%20141.954%2059.5l-19.011%2032.928H31.048z'/%3e%3c/g%3e%3cdefs%3e%3clinearGradient%20id='b'%20x1='193.6'%20x2='103.09'%20y1='165.6'%20y2='111.21'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='.09'%20stop-color='%23ffe921'/%3e%3cstop%20offset='1'%20stop-color='%23fec700'/%3e%3c/linearGradient%3e%3clinearGradient%20id='c'%20x1='114.4'%20x2='15.53'%20y1='181.61'%20y2='121.8'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='.15'%20stop-color='%23a9a8ff'/%3e%3cstop%20offset='.33'%20stop-color='%236d97ff'/%3e%3cstop%20offset='.48'%20stop-color='%233186ff'/%3e%3c/linearGradient%3e%3clinearGradient%20id='d'%20x1='128.88'%20x2='28.7'%20y1='37.88'%20y2='84.64'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='.55'%20stop-color='%230ebc5f'/%3e%3cstop%20offset='.85'%20stop-color='%2378c9ff'/%3e%3c/linearGradient%3e%3c/defs%3e%3c/svg%3e`;var google_maps_platform_default=`/assets/google-maps-platform-rs6t4EX0.png`;var google_search_console_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACHklEQVR4AWKgFXBoAFRfBhDNRAEAPu5+P4FJKKgREGm2VZF03VKUdG0E0IAiLCgpadVuAbYQFJVUW5FBxLocIMAIITiEaPHUltUtXvcuPWvq6eq96PHB4b7v3r173gGHFH2Yl5S8bgIRPiWv+aL5EY71EBXgkpQcsMQfkzEDnWzky8BJkpfOBpOALvPGRHkJ+HXQfXqylOksiEs5EQu+BqAaICn3QZsB8G8HuDZlh2dPlr0JfxjRFktt/VpA80Eg5EkGgDcZgG80xBZh7fgFdM9csw3w7vvnsbgsoGb03KJx6opNgDvhD2IpIQDROpelH2C+68xXA+pDl9QC8KLDQnIARly6pxfgTcii3YCOBfCHA6DGOYxTPoh4Vnl58rAtyDoAi4sqnyqqAiwlu1MJY5PdbAMKGuc0VF4vk1sUNhzwxtcMz4bbYef2EJsALCcEINZCEv2A4okgYiE5wGJ4dYBugKEKcTsBkdkeugGmRLMTsDsm0g14SvNbpICnwwosx+vAXgD5RPR48m/CkhHI9rtxwPRi748CfJG89sH3LwBSwN10nSXX+1pg3/rgjwLE8lOxoXGuosoTA4yj//DW34Q3pG8HRHMpgpwUwQN9vyrsSQb07wZ0mVOPft0+lRtpzlU45pzG66LMGKe8bpEW4tC8XnY40VAMomElrFePnr+jPQx0U/pK5CGFju5Y/JmcYzgIW++vy/HmEyfImY8XZOkOdzPDZqcAAAAASUVORK5CYII=`;var google_sheets_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='192'%20height='192'%20fill='none'%20viewBox='0%200%20192%20192'%3e%3cpath%20fill='%23009954'%20d='M183.96%20117.4c0%208.94%200%2013.41-1.4%2016.96a20%2020%200%200%201-11.23%2011.24c-3.55%201.4-8.02%201.4-16.97%201.4h-60.8c-8.94%200-13.41%200-16.96-1.4a20%2020%200%200%201-11.23-11.24c-1.4-3.55-1.4-8.02-1.4-16.96V74.6c0-8.94%200-13.42%201.4-16.96A20%2020%200%200%201%2076.6%2046.4C80.15%2045%2084.62%2045%2093.56%2045h60.8c8.95%200%2013.42%200%2016.97%201.4a20%2020%200%200%201%2011.23%2011.24c1.4%203.54%201.4%208.02%201.4%2016.96z'/%3e%3cmask%20id='a'%20width='161'%20height='128'%20x='7'%20y='32'%20maskUnits='userSpaceOnUse'%20style='mask-type:alpha'%3e%3cpath%20fill='%230ebc5f'%20d='M167.96%20130.4c0%208.94%200%2013.41-1.4%2016.96a20%2020%200%200%201-11.23%2011.24c-3.55%201.4-8.02%201.4-16.97%201.4H37.56c-8.94%200-13.41%200-16.96-1.4a20%2020%200%200%201-11.23-11.24c-1.4-3.55-1.4-8.02-1.4-16.96V61.6c0-8.94%200-13.42%201.4-16.96A20%2020%200%200%201%2020.6%2033.4C24.15%2032%2028.62%2032%2037.56%2032h100.8c8.95%200%2013.42%200%2016.97%201.4a20%2020%200%200%201%2011.23%2011.24c1.4%203.54%201.4%208.02%201.4%2016.96z'/%3e%3c/mask%3e%3cg%20mask='url(%23a)'%3e%3cpath%20fill='%230ebc5f'%20d='M167.96%20160h-160V32h160z'/%3e%3cg%20filter='url(%23b)'%3e%3cpath%20fill='url(%23c)'%20d='M183.96%2065a20%2020%200%200%200-20-20h-104a20%2020%200%200%200-20%2020v62a20%2020%200%200%200%2020%2020h104a20%2020%200%200%200%2020-20z'/%3e%3c/g%3e%3c/g%3e%3cpath%20fill='%23fff'%20d='M47.96%20122a6%206%200%200%201-6-6V77h-14a6%206%200%200%201%200-12h14V52a6%206%200%200%201%2012%200v13h58a6%206%200%201%201%200%2012h-58v39a6%206%200%200%201-6%206'/%3e%3cdefs%3e%3clinearGradient%20id='c'%20x1='61.73'%20x2='163.21'%20y1='88.31'%20y2='88.31'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%230ebc5f'/%3e%3cstop%20offset='.95'%20stop-color='%2378c9ff'/%3e%3c/linearGradient%3e%3cfilter%20id='b'%20width='168'%20height='126'%20x='27.96'%20y='33'%20color-interpolation-filters='sRGB'%20filterUnits='userSpaceOnUse'%3e%3cfeFlood%20flood-opacity='0'%20result='BackgroundImageFix'/%3e%3cfeBlend%20in='SourceGraphic'%20in2='BackgroundImageFix'%20result='shape'/%3e%3cfeGaussianBlur%20result='effect1_foregroundBlur_2015_872'%20stdDeviation='6'/%3e%3c/filter%3e%3c/defs%3e%3c/svg%3e`;var google_slides_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='192'%20height='192'%20fill='none'%20viewBox='0%200%20192%20192'%3e%3cpath%20fill='url(%23a)'%20d='M12.591%2063.318c-2.493-15.262%207.858-29.655%2023.12-32.148l96.724-15.8c15.262-2.492%2029.655%207.859%2032.148%2023.12l14.732%2090.189c2.493%2015.262-7.858%2029.655-23.12%2032.148l-96.724%2015.8c-15.262%202.493-29.655-7.858-32.148-23.12z'/%3e%3cpath%20fill='url(%23b)'%20d='M12%2061.6c0-8.943%200-13.415%201.405-16.962a20%2020%200%200%201%2011.233-11.233C28.185%2032%2032.656%2032%2041.6%2032h108.8c8.943%200%2013.415%200%2016.962%201.404a20%2020%200%200%201%2011.234%2011.234C180%2048.185%20180%2052.657%20180%2061.6v68.8c0%208.943%200%2013.415-1.404%2016.962a20%2020%200%200%201-11.234%2011.234C163.815%20160%20159.343%20160%20150.4%20160H41.6c-8.943%200-13.415%200-16.963-1.404a20%2020%200%200%201-11.232-11.234C12%20143.815%2012%20139.343%2012%20130.4z'/%3e%3cmask%20id='e'%20width='168'%20height='128'%20x='12'%20y='32'%20maskUnits='userSpaceOnUse'%20style='mask-type:alpha'%3e%3cpath%20fill='%23fec700'%20d='M12%2061.6c0-8.943%200-13.415%201.405-16.962a20%2020%200%200%201%2011.233-11.233C28.185%2032%2032.656%2032%2041.6%2032h108.8c8.943%200%2013.415%200%2016.962%201.404a20%2020%200%200%201%2011.234%2011.234C180%2048.185%20180%2052.657%20180%2061.6v68.8c0%208.943%200%2013.415-1.404%2016.962a20%2020%200%200%201-11.234%2011.234C163.815%20160%20159.343%20160%20150.4%20160H41.6c-8.943%200-13.415%200-16.963-1.404a20%2020%200%200%201-11.232-11.234C12%20143.815%2012%20139.343%2012%20130.4z'/%3e%3c/mask%3e%3cg%20filter='url(%23c)'%20mask='url(%23e)'%3e%3cpath%20fill='%23ffbe00'%20d='m33.74%20191.516%20144.396-21.58L153.304%203.781%208.907%2025.361z'/%3e%3cpath%20fill='url(%23f)'%20d='m33.74%20191.516%20144.396-21.58L153.304%203.781%208.907%2025.361z'/%3e%3c/g%3e%3cpath%20fill='%23fff'%20fill-rule='evenodd'%20d='M148%2058a6%206%200%200%201%206%206v64a6%206%200%200%201-6%206H44l-.309-.008A6%206%200%200%201%2038%20128V64a6%206%200%200%201%205.691-5.992L44%2058zm-98%2064h92V70H50z'%20clip-rule='evenodd'/%3e%3cdefs%3e%3clinearGradient%20id='a'%20x1='84.07'%20x2='157.2'%20y1='23.27'%20y2='160.82'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='.2'%20stop-color='%23ffdb0f'/%3e%3cstop%20offset='.67'%20stop-color='%23ffbe00'/%3e%3cstop%20offset='.91'%20stop-color='%23ffa8e3'/%3e%3c/linearGradient%3e%3clinearGradient%20id='b'%20x1='96'%20x2='96'%20y1='32'%20y2='160'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23ffbe00'/%3e%3cstop%20offset='1'%20stop-color='%23fec700'/%3e%3c/linearGradient%3e%3clinearGradient%20id='f'%20x1='108.52'%20x2='83.96'%20y1='168.16'%20y2='25.27'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='.07'%20stop-color='%23fff549'/%3e%3cstop%20offset='.78'%20stop-color='%23ffbe00'%20stop-opacity='0'/%3e%3c/linearGradient%3e%3cfilter%20id='c'%20width='193.23'%20height='211.73'%20x='-3.09'%20y='-8.22'%20color-interpolation-filters='sRGB'%20filterUnits='userSpaceOnUse'%3e%3cfeFlood%20flood-opacity='0'%20result='BackgroundImageFix'/%3e%3cfeBlend%20in='SourceGraphic'%20in2='BackgroundImageFix'%20result='shape'/%3e%3cfeGaussianBlur%20result='effect1_foregroundBlur_37552_9023'%20stdDeviation='6'/%3e%3c/filter%3e%3c/defs%3e%3c/svg%3e`;var granola_default=`/assets/granola-7dR8tPQ_.svg`;var hex_default=`data:image/svg+xml,%3csvg%20viewBox='0%200%20280%20280'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3crect%20width='280'%20height='280'%20rx='20'%20fill='%2301011B'/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M61.5382%2086V118.184H52.3075V86H20V112.092V112.184V142.892V178.307H52.3075V132.154H61.5382V178.307H93.8456V86H61.5382ZM103.075%20178.307H176.921V141.384H144.613V164.461H135.383V132.154H176.921V86H103.075V178.307ZM135.383%20118.307V99.8461H144.613V118.307H135.383ZM227.693%20118.307V86H260V109.077L246.154%20125.23L260%20141.384V178.307H227.693V132.03H218.462V178.307H186.154V141.384L200%20125.23L186.154%20109.077V86H218.462V118.307H227.693Z'%20fill='%23F5C0C0'/%3e%3c/svg%3e`;var heygen_default=`/assets/heygen-CeXJ1Sy4.ico`;var hubspot_default=`/assets/hubspot-BQJQ5DfV.png`;var incident_io_default=`data:image/png;base64,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`;var inngest_default=`data:image/svg+xml,%3csvg%20width='192'%20height='192'%20viewBox='0%200%20192%20192'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M21.4072%20129.294C19.0746%20129.294%2016.9123%20127.809%2016.17%20125.48C12.2674%20113.258%2015.1639%20103.03%2025.2893%2093.2902L66.5214%2054.0973C72.8173%2048.0347%2081.6973%2046.4807%2089.7012%2050.0448C97.6725%2053.5967%20102.419%2061.177%20102.106%2069.8471V74.061C102.106%2077.0843%2099.6441%2079.5303%2096.6097%2079.5303C93.5753%2079.5303%2091.1129%2077.0802%2091.1129%2074.061V69.7421C91.1129%2069.6655%2091.1129%2069.5928%2091.1169%2069.5202C91.2914%2065.3022%2089.0845%2061.7542%2085.2104%2060.0307C81.3363%2058.3072%2077.2066%2059.0297%2074.1641%2061.9681C74.156%2061.9762%2074.1439%2061.9883%2074.1358%2061.9964L32.9159%20101.177C25.8816%20107.946%2024.0602%20114.037%2026.6565%20122.166C27.5774%20125.044%2025.9749%20128.12%2023.0825%20129.036C22.5268%20129.21%2021.9669%20129.294%2021.4152%20129.294H21.4072Z'%20fill='%23292524'/%3e%3cpath%20d='M112.284%20144.019C109.371%20144.019%20106.41%20143.397%20103.562%20142.13C95.591%20138.578%2090.8447%20130.998%2091.1571%20122.328V118.142C91.1571%20115.119%2093.6195%20112.673%2096.6539%20112.673C99.6883%20112.673%20102.151%20115.123%20102.151%20118.142V122.433C102.151%20122.509%20102.151%20122.582%20102.147%20122.659C101.972%20126.877%20104.179%20130.425%20108.053%20132.148C111.927%20133.872%20116.057%20133.149%20119.099%20130.211L160.031%2091.0136C167.195%2084.1195%20169.025%2078.0569%20166.335%2070.0972C165.37%2067.2314%20166.915%2064.1315%20169.796%2063.1668C172.676%2062.2062%20175.791%2063.744%20176.761%2066.6098C180.797%2078.5574%20177.824%2089.1165%20167.67%2098.8885L126.746%20138.077C122.698%20141.985%20117.566%20144.023%20112.284%20144.023V144.019Z'%20fill='%23292524'/%3e%3cpath%20d='M42.9198%20143.918C39.6664%20143.918%2036.4211%20143.333%2033.3339%20142.126C33.0337%20142.009%2032.7336%20141.888%2032.4374%20141.758C29.6464%20140.564%2028.3604%20137.347%2029.5612%20134.57C30.762%20131.793%2033.9952%20130.513%2036.7862%20131.708C36.9728%20131.789%2037.1593%20131.865%2037.3459%20131.938C42.8995%20134.102%2049.4267%20132.818%2054.3921%20128.592C54.6274%20128.378%2055.4022%20127.655%2055.5077%20127.555L129.485%2057.4512C129.485%2057.4512%20131.075%2055.9578%20131.42%2055.6712C136.45%2051.4532%20142.162%2048.9264%20147.939%2048.3654C149.164%2048.2443%20150.405%2048.208%20151.626%2048.2524C154.357%2048.3452%20157.35%2048.6358%20160.604%2050.1333C163.358%2051.4048%20164.559%2054.654%20163.281%2057.3987C162.003%2060.1394%20158.738%2061.3342%20155.979%2060.0627C154.576%2059.4169%20153.18%2059.2514%20151.237%2059.1868C150.491%2059.1586%20149.748%2059.1828%20149.01%2059.2555C145.472%2059.5985%20141.862%2061.2373%20138.56%2063.9941C138.296%2064.2323%20137.237%2065.2171%20137.067%2065.3746L63.0897%20135.482C63.0897%20135.482%2061.8766%20136.62%2061.6089%20136.85C56.2014%20141.484%2049.5443%20143.918%2042.9198%20143.922V143.918Z'%20fill='%23292524'/%3e%3c/svg%3e`;var klipy_default=`/assets/klipy-DId2OM2v.ico`;var lexware_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20xmlns:svgjs='http://svgjs.dev/svgjs'%20width='32'%20height='32'%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%20viewBox='0%200%2032%2032'%3e%3cdefs%3e%3cstyle%3e%20.cls-1%20{%20fill:%20%23ff4554;%20}%20%3c/style%3e%3c/defs%3e%3c!--%20Generator:%20Adobe%20Illustrator%2028.6.0,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%201.2.0%20Build%20709)%20--%3e%3cg%3e%3cg%20id='SvgjsG1023'%3e%3cg%3e%3cpolygon%20class='cls-1'%20points='22.2%2017.7%2017.4%2023.6%2021.4%2028.5%2024.1%2028.5%2027.5%2028.5%2031%2028.5%2022.2%2017.7'%3e%3c/polygon%3e%3cpolygon%20class='cls-1'%20points='30.8%203.5%2027.5%203.5%2027.5%203.5%2027.5%203.5%2027.5%203.5%2024.1%203.5%2024.1%203.5%2021.4%203.5%2017.4%208.4%2022.2%2014.3%2022.2%2014.3%2031%203.5%2030.8%203.5'%3e%3c/polygon%3e%3cpolygon%20class='cls-1'%20points='15.7%209.6%2010.7%203.5%201%203.5%201%203.5%206%209.6%2011.2%2016%206%2022.4%201%2028.5%2010.4%2028.5%2010.7%2028.5%2015.7%2022.4%2020.8%2016%2015.7%209.6'%3e%3c/polygon%3e%3c/g%3e%3c/g%3e%3c/g%3e%3c/svg%3e%3cstyle%3e@media%20(prefers-color-scheme:%20light)%20{%20:root%20{%20filter:%20none;%20}%20}%20@media%20(prefers-color-scheme:%20dark)%20{%20:root%20{%20filter:%20none;%20}%20}%20%3c/style%3e%3c/svg%3e`;var lightspeed_default=`data:image/svg+xml,%3csvg%20width='32'%20height='32'%20viewBox='0%200%2032%2032'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M16.3236%201L17.7569%203.48479C17.9007%203.73688%2017.9763%204.02199%2017.9763%204.31209C17.9763%204.6022%2017.9007%204.88731%2017.7569%205.1394L9.28015%2019.8935L13.2763%2026.8498C13.5811%2027.3881%2014.0235%2027.8359%2014.5584%2028.1475C15.0933%2028.4591%2015.7015%2028.6233%2016.3207%2028.6233C16.94%2028.6233%2017.5481%2028.4591%2018.0829%2028.1475C18.6179%2027.8359%2019.0604%2027.3881%2019.3651%2026.8498L23.3612%2019.8935L22.2806%2018.0042L17.7569%2025.9051C17.6118%2026.1567%2017.403%2026.3656%2017.1514%2026.5108C16.8997%2026.6561%2016.6142%2026.7325%2016.3236%2026.7325C16.0329%2026.7325%2015.7474%2026.6561%2015.4957%2026.5108C15.2442%2026.3656%2015.0353%2026.1567%2014.8902%2025.9051L11.4502%2019.8935L19.3049%206.18999L20.7383%208.67193C20.8825%208.92436%2020.9585%209.20999%2020.9585%209.50066C20.9585%209.79133%2020.8825%2010.077%2020.7383%2010.3294L15.2428%2019.8935L16.3236%2021.76L22.2862%2011.38L26.1936%2018.1759C26.4881%2018.6918%2026.643%2019.2753%2026.643%2019.8692C26.643%2020.463%2026.4881%2021.0466%2026.1936%2021.5625L22.2203%2028.4815C21.6069%2029.5406%2019.7321%2031.9167%2016.3149%2031.9167C12.8979%2031.9167%2011.0346%2029.5521%2010.424%2028.4815L6.45362%2021.5768C6.15639%2021.0592%206%2020.473%206%2019.8764C6%2019.2798%206.15639%2018.6934%206.45362%2018.1759L16.3236%201Z'%20fill='%23E81C1C'/%3e%3c/svg%3e`;var linear_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='16'%20height='16'%20viewBox='0%200%2016%2016'%3e%3crect%20width='16'%20height='16'%20rx='2'%20fill='%23000'/%3e%3cpath%20d='M2.147%209.383c-.027-.114.109-.186.192-.103l4.381%204.38c.083.083.011.219-.103.192a6.02%206.02%200%200%201-4.47-4.47ZM2%207.627a.12.12%200%200%200%20.035.091l6.247%206.247a.12.12%200%200%200%20.091.035q.428-.027.836-.111a.117.117%200%200%200%20.057-.198L2.31%206.734a.117.117%200%200%200-.198.057%206%206%200%200%200-.11.836Zm.505-2.062a.12.12%200%200%200%20.025.132l7.773%207.773a.12.12%200%200%200%20.132.025q.322-.144.623-.322a.118.118%200%200%200%20.022-.185L3.012%204.92a.118.118%200%200%200-.185.022q-.178.3-.322.623m1.014-1.396a.12.12%200%200%201-.005-.163%206.006%206.006%200%201%201%208.48%208.48.12.12%200%200%201-.163-.005z'%20fill='%23FFF'%20/%3e%3c/svg%3e`;var linkedin_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADkAAAA5CAYAAACMGIOFAAAEtElEQVR4Ae2aA5DkWhSG82xb+2wbpafis+2xZ2pHa9u2ObZt27btWf3vnk5l2X3T894i6eq/6p+dyT03nS8nuXtOJ4JWuQZ/wLyFOY+5g3lAge5lrmYOZrZgvlrQQwT3AHMAM1ToBuYf5AApe33MULlX6gJ8ihkG5EVnA17O3MIMA/OHp0PaM8MA3XA6ZIfeEycHQnAMoH/VAvqpBAmup4RCcPCH8MchCFY+EJwYpKUP/U3baVzJkIfkIQnA3AuCjS+svAoQVdmJ4rZBRFR0wsIzX7NdsPBWMmgeH9I9RJO5y219EV/dDW2Kq+qCYO1DcRSvyPuSD+kcBOGvw/At6wBPfmxc+NuD4pUI2cSHNPHE6+uToY/e3JBC8SrM5O8HsSS+GvpoYVwVhN8Oqg+SLtXd2U3QRzuzGsXV1kVlkJQZ17Ay6CPn0DLKvAozaeWDu2dFQB/dOzuS4lUI6R6iyY69XxF4svMtFC9VtxAVQrqJZRwBWHjkYWjsGE7XwOhRWBzOoxNBcRSvPkgpmxIoXbomXgWYEVGBvz0LcOfMcAZ4iI0HSYWASiHJbuQQsbL58xBlTvzX2pfgzn8GnYOoPiaLJ9gl6AJDEhx9mL2/btP46fejBO3AmUNjUiydKAIz8RTvbXNvCHZ+oi29xWrqd7E5kI7p/GfSRfpXizXbOfM4vkzTAISIcMxvr07EgqhKhLAyMb2xFxnM0ZVd2JHRAAt2mzw0J1I8CdY+1BCcv9qVzuRW9iF1PSOo0WLaviOrgeJO1a4sAzfOCNd0K7Va5tC23JZ+XDs9DMJ3e/DIzAj4F7RCTkePHcf6hBpc5RhA2SXQ8wRp6onkul7wlNbQQ3GnIG18cMuscMhJMPHAqwuiMcIOfiKq6BrGA9PCGOhhAj0PkKyXDChpB0/BZe0UdwrS1hc3s5V3aPwYdCm1vhfPLo7FGP6bqvpGxauH7ls3hUKWtg+iil22/0fz4qsh/HqAFiJlQp4PHT1+Ale40Brgb7iQpM/2ZNOKqx7I+s4hlLNVd3j8KPTVxrR6Kk6UD7ktuwkvz4/GZY5i0XGnWzCsPPOhj5LreqhIoMpIuZB7c5shfLtH06ALBOnETAf92Q58fSAHcmrqH5OqK2VCjh49jqunhooVj/tZZSHB/uOBnOZ+8DTG9nHrrAj6alSRkLRfyqDumvmXA5gfUwU5Pbwohv7PVCbkgtgqsfB20/31i5VMw056cmkcBAuFQjoHl3KXf2rnfj6YCzk9pWRI+4BiLiRdyt/vz1F3Jm31gPxB7ZB25wfSCGmENEIaIY2QRkgjpBHSCNkkD2nigfyWAfBU1D5AcacgrX00jaycZkdVaHpG3pNuM+8CyOn5FQkQTL107aeaD+lCWfGDnX8xdmQ2YjvzDi12CCymuFPPRBz9cd20UGxMradxnf54WzovA5q3vt5am0yxXN8zN4q+ZNa1n2T9nk9S1/2Ph27TOMWd3tW7iE+puPPowKaGyr/uRrE8Tw7kPR9dIkEmcUFdyEEc65oXNPF5E9+P3PzHJcj3mGGAPnz2i727DAxwnPlmba9oJxoQ5Hu8l+33qhyugfktQUYE+jNzNvOAitzMvIL5Bm1I/wJ/Y1lMazKh/AAAAABJRU5ErkJggg==`;var logo_dev_default=`data:image/webp;base64,UklGRoQFAABXRUJQVlA4THgFAAAvf8AfAA1dYCGi/9EuCgQACZKj3eQ++STJP7m75JI7ib8kySUnckJe/sglwV3+SDghd0kkkktC7iSS491J7pPc3Z0QTk4S3gMC+ZdPDiT/5PkQCQRciCBxAkEkkoTgP5Lkdqnu3enZ7Xb/4AoBEAAAAADAAQCAAwAABwAAAAAAAAAAAAAcAAAAAAAAAAgADwAAAIAAAAAAAAAAAAAABADgAIAAAIDCAQAAAAAAWAAAAAAAAABwAAAAAAAAAAAAgAcAAAAAAAAAAAAAAAAAAAAeAAAAAAAADyAAAAAAAGgAAAAIAABAAQAAAAQBDgAAAAAAAAAAAAAAwAEABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAgAUAAAAAABAAAAAAgAAHwAEAAAAAAAAAAAAAAgAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAPAAAAAAIIBIGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMgJDjQJN7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL8NCAigho326WjbxMVTVd0PAABgcodN//+Fq+/gcY1+u8Kjxv3Nix8kHMySfc7x3MLQ5XAwJ1rFbwaDuMLKPMTMwcSUecWMhDBJY+8qZr7IxzAKlidkWGRNJZ9sVb9JSH6H/H3+zmEIdSQi1BwO4uz1DEUVb0KGDTE2oLM4iLuLlwngKxhU446ImeGmviecah2JsPWheNj5K9+xnd6Z/bzqLV4M6qiEE42IRWFutPwK+QQm2L50W9qBzIv3PNeZcgdvjxYpTjEapFjN0w4dvvTzH0wQ29OIrFBlxtGUbY6EXivSzuB7phBIezzVrADu6Dfd4pfbSSzqKkUpVPApwcyNtpA19qHZHEYb3bxlyMvVGIruZggcAQrSnizZbcSh1TXo1+DjibRMRTAVIE057nr/OwMxyGEcKEQiM8vIA2umG3HO5huGoy5IIeFFOBv7K63eLI+g5LJwo0agDf9MB+zSYWdPp5lOUzjFOiYIEcKt+iOKN+vMJSf8NHmBs8Fo7jYRlfy58gESHgB/6yBopgFNLm2z7a7cXFzNlwDhd+DsHXAm1CUnYotF+wrJpFy6kdveHUAvnGLw5WjjdygVdzQl5ogfcBaUYm4wXi9yE20WctQr9xoMH/FDX4PzuuCliB/8EUccwiqF0BhQvfcLQYMg6MA5Tsa0lIz25gJB4CGka3wb8L1mnfi4x9acIpBPpksUcBtnO9AeBKI/2J5d/Ivodx4XidxwNW59d73TLOkIGWa/kcdaajjEYfaxseXkpxhajoCk66nluxzIkZz3IP6bW5WyhXJEpP9mDlGECOJmrvgr8t8TkLEoJENGaQfUoBQx2QIYZ1vMry7Guj8h3VGUbiH8K+VxiMWGPA3IENOs6r8d+Wu67mPgkPyezV8+/4m424+GTh5jHbMQMta+/+JCjRaslM9AaEzYZudc3IwHnV2Pc5H5Yyu3gUzyNRRBSqaSL3BbpGgNQ4Rs3grVanQE/PA2nWeIhnpb0YCYw/N4jE47WlfzpF9UycZeTKDlI9QbBk9q6+kVQdawFYTQ8YFMF7m7ZFmS1psWZsDNiBSb7Uwr/yVhaP8fSfjW6KptoFXHRm9IgGTqhdiSYI/S0NrBS4J1kb6to4w3bUW8V4OoLwpaAYaogUAIm+FrHsXtE2Zwgt/5X+7KOG8MYhCKRmz49RESlzqWyoVDod52FsQVi3x6eReYEPYB7Yv9ybm/1UOp9CGKxt5H+Lo2mhTA9OIogJ3TF0whA9NsR/ynshAN04om03/OAA==`;var mailgun_default=`/assets/mailgun-jMUCQaNg.ico`;var mapbox_default=`/assets/mapbox-d4keJUxZ.png`;var microsoft_excel_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2048%2048'%3e%3cdefs%3e%3clinearGradient%20id='a'%20x1='5.822'%20y1='11.568'%20x2='20.178'%20y2='36.432'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%2318884f'/%3e%3cstop%20offset='.5'%20stop-color='%23117e43'/%3e%3cstop%20offset='1'%20stop-color='%230b6631'/%3e%3c/linearGradient%3e%3c/defs%3e%3cpath%20d='M29%2023l-17-3v22.167A1.833%201.833%200%200%200%2013.833%2044h29.334A1.833%201.833%200%200%200%2045%2042.167V34z'%20fill='%23185c37'/%3e%3cpath%20d='M29%204H13.833A1.833%201.833%200%200%200%2012%205.833V14l17%2010%209%203%207-3V14z'%20fill='%2321a366'/%3e%3cpath%20fill='%23107c41'%20d='M12%2014h17v10H12z'/%3e%3cpath%20fill='none'%20d='M0%200h48v48H0z'/%3e%3cpath%20d='M24.167%2012H12v25h12.167A1.839%201.839%200%200%200%2026%2035.167V13.833A1.839%201.839%200%200%200%2024.167%2012z'%20opacity='.1'/%3e%3cpath%20d='M23.167%2013H12v25h11.167A1.839%201.839%200%200%200%2025%2036.167V14.833A1.839%201.839%200%200%200%2023.167%2013z'%20opacity='.2'/%3e%3cpath%20d='M23.167%2013H12v23h11.167A1.839%201.839%200%200%200%2025%2034.167V14.833A1.839%201.839%200%200%200%2023.167%2013z'%20opacity='.2'/%3e%3cpath%20d='M22.167%2013H12v23h10.167A1.839%201.839%200%200%200%2024%2034.167V14.833A1.839%201.839%200%200%200%2022.167%2013z'%20opacity='.2'/%3e%3crect%20x='2'%20y='13'%20width='22'%20height='22'%20rx='1.833'%20fill='url(%23a)'/%3e%3cpath%20d='M7.677%2029.958l3.856-5.975L8%2018.041h2.842l1.928%203.8c.178.361.3.629.366.806h.025q.19-.432.4-.839l2.061-3.765h2.609l-3.623%205.907%203.715%206.008h-2.776l-2.227-4.171a3.5%203.5%200%200%201-.266-.557h-.033a2.638%202.638%200%200%201-.258.54l-2.293%204.188z'%20fill='%23fff'/%3e%3cpath%20d='M43.167%204H29v10h16V5.833A1.833%201.833%200%200%200%2043.167%204z'%20fill='%2333c481'/%3e%3cpath%20fill='%23107c41'%20d='M29%2024h16v10H29z'/%3e%3c/svg%3e`;var microsoft_fabric_default=`/assets/microsoft-fabric-CkTccQJB.svg`;var microsoft_onedrive_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2048%2048'%3e%3cpath%20d='M28%2027s8.854-6.054%209.045-6.041A13.126%2013.126%200%200%200%2013.366%2017h.134z'%20fill='%230364b8'/%3e%3cpath%20d='M19.016%2018.564A10.447%2010.447%200%200%200%2013.5%2017h-.134a10.5%2010.5%200%200%200-8.479%2016.5L19%2032l8.833-8.155z'%20fill='%230f78d4'/%3e%3cpath%20d='M37.045%2020.959a8.455%208.455%200%200%200-.576-.021%208.506%208.506%200%200%200-3.382.7l-5.254%202.21L34%2031l9.98%202.517a8.532%208.532%200%200%200-6.935-12.558z'%20fill='%231490df'/%3e%3cpath%20d='M36.529%2029.054l-2.178-1.3-4.994-2.991-1.524-.913-4.019%201.692-7.7%203.238-3.452%201.45-7.775%203.27A10.484%2010.484%200%200%200%2013.5%2038h22.969a8.531%208.531%200%200%200%207.511-4.483z'%20fill='%2328a8ea'/%3e%3cpath%20fill='none'%20d='M0%200h48v48H0z'/%3e%3c/svg%3e`;var microsoft_onenote_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2048%2048'%3e%3cdefs%3e%3clinearGradient%20id='a'%20x1='5.822'%20y1='11.568'%20x2='20.178'%20y2='36.432'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%238324b3'/%3e%3cstop%20offset='.5'%20stop-color='%237a1bac'/%3e%3cstop%20offset='1'%20stop-color='%23621197'/%3e%3c/linearGradient%3e%3c/defs%3e%3cpath%20d='M35%2044H13.831A1.831%201.831%200%200%201%2012%2042.169V5.831A1.831%201.831%200%200%201%2013.831%204h29.338A1.831%201.831%200%200%201%2045%205.831V14z'%20fill='%23ca64ea'/%3e%3cpath%20fill='%23ae4bd5'%20d='M45%2024l-5%203-5-3V14h10v10z'/%3e%3cpath%20fill='%239332bf'%20d='M45%2034l-5%203-5-3V24h10v10z'/%3e%3cpath%20d='M35%2034h10v8.125A1.875%201.875%200%200%201%2043.125%2044H35V34z'%20fill='%237719aa'/%3e%3cpath%20fill='none'%20d='M0%200h48v48H0z'/%3e%3cpath%20d='M24.167%2012H12v25h12.167A1.839%201.839%200%200%200%2026%2035.167V13.833A1.839%201.839%200%200%200%2024.167%2012z'%20opacity='.2'/%3e%3cpath%20d='M23.167%2013H12v25h11.167A1.839%201.839%200%200%200%2025%2036.167V14.833A1.839%201.839%200%200%200%2023.167%2013z'%20opacity='.2'/%3e%3cpath%20d='M23.167%2013H12v23h11.167A1.839%201.839%200%200%200%2025%2034.167V14.833A1.839%201.839%200%200%200%2023.167%2013z'%20opacity='.5'/%3e%3cpath%20d='M22.167%2013H12v23h10.167A1.839%201.839%200%200%200%2024%2034.167V14.833A1.839%201.839%200%200%200%2022.167%2013z'%20opacity='.5'/%3e%3crect%20x='2'%20y='13'%20width='22'%20height='22'%20rx='1.833'%20fill='url(%23a)'/%3e%3cpath%20d='M8.026%2018.042h2.485l4.883%207.9q.333.531.5.855h.032a12.032%2012.032%200%200%201-.072-1.62v-7.135h2.12v11.916h-2.326l-5.066-8.119A6.313%206.313%200%200%201%2010.13%2021h-.04a17.54%2017.54%200%200%201%20.063%201.778v7.18H8.026z'%20fill='%23fff'/%3e%3c/svg%3e`;var microsoft_outlook_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2048%2048'%3e%3cdefs%3e%3clinearGradient%20id='a'%20x1='28.5'%20y1='25'%20x2='28.5'%20y2='44'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%2335b8f1'/%3e%3cstop%20offset='1'%20stop-color='%2328a8ea'/%3e%3c/linearGradient%3e%3clinearGradient%20id='b'%20x1='5.822'%20y1='11.568'%20x2='20.178'%20y2='36.432'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%231784d9'/%3e%3cstop%20offset='.5'%20stop-color='%23107ad5'/%3e%3cstop%20offset='1'%20stop-color='%230a63c9'/%3e%3c/linearGradient%3e%3c/defs%3e%3cpath%20d='M45%2025a.96.96%200%200%200-.458-.825h-.005l-.018-.01-14.9-8.82a2.026%202.026%200%200%200-.2-.119%202%202%200%200%200-1.834%200%202.026%202.026%200%200%200-.2.119l-14.9%208.82-.018.01a.971.971%200%200%200%20.023%201.663l14.9%208.82a2.241%202.241%200%200%200%20.2.119%202%202%200%200%200%201.834%200%202.241%202.241%200%200%200%20.2-.119l14.9-8.82A.959.959%200%200%200%2045%2025z'%20fill='%230a2767'/%3e%3cpath%20fill='%230364b8'%20d='M14.222%2019.111H24v8.963h-9.778zM43%2010V5.9A1.858%201.858%200%200%200%2041.187%204H15.813A1.858%201.858%200%200%200%2014%205.9V10l15%204z'/%3e%3cpath%20fill='%230078d4'%20d='M14%2010h10v9H14z'/%3e%3cpath%20fill='%2328a8ea'%20d='M34%2010H24v9l10%209h9v-9l-9-9z'/%3e%3cpath%20fill='%230078d4'%20d='M24%2019h10v9H24z'/%3e%3cpath%20fill='%230364b8'%20d='M24%2028h10v9H24z'/%3e%3cpath%20fill='%2314447d'%20d='M14.222%2028.074H24v8.148h-9.778z'/%3e%3cpath%20fill='%230078d4'%20d='M34%2028h9v9h-9z'/%3e%3cpath%20d='M44.542%2025.783l-.019.01-14.9%208.38c-.065.04-.131.078-.2.112a2.077%202.077%200%200%201-.808.2l-.814-.476a2.033%202.033%200%200%201-.2-.115l-15.1-8.618h-.007L12%2025v16.964A2.05%202.05%200%200%200%2014.063%2044h28.906c.017%200%20.032-.008.05-.008a2.531%202.531%200%200%200%20.7-.146A2.019%202.019%200%200%200%2044%2043.7c.067-.038.182-.121.182-.121A2.019%202.019%200%200%200%2045%2041.964V25a.9.9%200%200%201-.458.783z'%20fill='url(%23a)'/%3e%3cpath%20d='M44.2%2024.933v1.04L28.62%2036.7%2012.49%2025.283a.01.01%200%200%200-.01-.01l-1.48-.89v-.75l.61-.01%201.29.74.03.01.11.07s15.16%208.65%2015.2%208.67l.58.34c.05-.02.1-.04.16-.06.03-.02%2015.05-8.47%2015.05-8.47z'%20fill='%230a2767'%20opacity='.5'/%3e%3cpath%20fill='none'%20d='M0%200h48v48H0z'/%3e%3cpath%20d='M44.542%2025.783l-.019.011-14.9%208.38c-.065.04-.131.078-.2.112a2.089%202.089%200%200%201-1.834%200%202.264%202.264%200%200%201-.2-.112l-14.9-8.38-.018-.011A.9.9%200%200%201%2012%2025v16.964A2.049%202.049%200%200%200%2014.062%2044h28.876A2.049%202.049%200%200%200%2045%2041.964V25a.9.9%200%200%201-.458.783z'%20fill='%231490df'/%3e%3cpath%20d='M29.84%2034.05l-.223.125a2.183%202.183%200%200%201-.2.113%202.071%202.071%200%200%201-.786.208L34.3%2041.2l9.889%202.383a2.038%202.038%200%200%200%20.627-.783z'%20opacity='.1'/%3e%3cpath%20d='M30.85%2033.482l-1.233.693a2.183%202.183%200%200%201-.2.113%202.071%202.071%200%200%201-.786.208l2.656%207.323%2012.905%201.761A2.022%202.022%200%200%200%2045%2041.964v-.219z'%20opacity='.05'/%3e%3cpath%20d='M14.09%2044h28.845a2.074%202.074%200%200%200%201.235-.4L27.8%2034.011a2.033%202.033%200%200%201-.2-.115l-15.1-8.618h-.007L12%2025v16.906A2.092%202.092%200%200%200%2014.09%2044z'%20fill='%2328a8ea'/%3e%3cpath%20d='M26%2013.833v21.33a1.838%201.838%200%200%201-1.15%201.7%201.723%201.723%200%200%201-.68.14H12V13h2v-1h10.17A1.837%201.837%200%200%201%2026%2013.833z'%20opacity='.1'/%3e%3cpath%20d='M25%2014.833v21.33a1.629%201.629%200%200%201-.15.7A1.822%201.822%200%200%201%2023.17%2038H12V13h11.17a1.679%201.679%200%200%201%20.83.21%201.818%201.818%200%200%201%201%201.623z'%20opacity='.2'/%3e%3cpath%20d='M25%2014.833v19.33A1.846%201.846%200%200%201%2023.17%2036H12V13h11.17a1.679%201.679%200%200%201%20.83.21%201.818%201.818%200%200%201%201%201.623z'%20opacity='.2'/%3e%3cpath%20d='M24%2014.833v19.33A1.839%201.839%200%200%201%2022.17%2036H12V13h10.17A1.831%201.831%200%200%201%2024%2014.833z'%20opacity='.2'/%3e%3crect%20x='2'%20y='13'%20width='22'%20height='22'%20rx='1.833'%20fill='url(%23b)'/%3e%3cpath%20d='M7.729%2020.688a5.332%205.332%200%200%201%202.094-2.313%206.33%206.33%200%200%201%203.327-.834%205.892%205.892%200%200%201%203.079.791%205.284%205.284%200%200%201%202.037%202.21%207.133%207.133%200%200%201%20.714%203.25%207.528%207.528%200%200%201-.735%203.4%205.41%205.41%200%200%201-2.1%202.287%206.126%206.126%200%200%201-3.194.812%206.02%206.02%200%200%201-3.147-.8%205.366%205.366%200%200%201-2.064-2.214%206.963%206.963%200%200%201-.722-3.211%207.733%207.733%200%200%201%20.711-3.378zm2.232%205.43a3.461%203.461%200%200%200%201.178%201.522%203.077%203.077%200%200%200%201.84.554%203.223%203.223%200%200%200%201.964-.572%203.315%203.315%200%200%200%201.144-1.522%205.908%205.908%200%200%200%20.365-2.123%206.463%206.463%200%200%200-.344-2.15A3.4%203.4%200%200%200%2015%2020.241a3.043%203.043%200%200%200-1.947-.6%203.175%203.175%200%200%200-1.883.559%203.49%203.49%200%200%200-1.2%201.535%206.1%206.1%200%200%200-.008%204.385z'%20fill='%23fff'/%3e%3cpath%20fill='%2350d9ff'%20d='M34%2010h9v9h-9z'/%3e%3c/svg%3e`;var microsoft_powerpoint_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2048%2048'%3e%3cdefs%3e%3clinearGradient%20id='a'%20x1='5.822'%20y1='11.568'%20x2='20.178'%20y2='36.432'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%23ca4c28'/%3e%3cstop%20offset='.5'%20stop-color='%23c5401e'/%3e%3cstop%20offset='1'%20stop-color='%23b62f14'/%3e%3c/linearGradient%3e%3c/defs%3e%3cpath%20d='M28%2026L25%204h-.224A19.834%2019.834%200%200%200%205%2023.776V24z'%20fill='%23ed6c47'/%3e%3cpath%20d='M25.224%204H25v20l10%204%2010-4v-.224A19.834%2019.834%200%200%200%2025.224%204z'%20fill='%23ff8f6b'/%3e%3cpath%20d='M45%2024v.22A19.837%2019.837%200%200%201%2025.22%2044h-.44A19.837%2019.837%200%200%201%205%2024.22V24z'%20fill='%23d35230'/%3e%3cpath%20fill='none'%20d='M0%200h48v48H0z'/%3e%3cpath%20d='M26%2013.83v21.34a1.841%201.841%200%200%201-1.14%201.69%201.772%201.772%200%200%201-.69.14H9.72c-.28-.32-.55-.66-.8-1A19.614%2019.614%200%200%201%205%2024.22v-.44A19.555%2019.555%200%200%201%208.22%2013c.22-.34.45-.68.7-1h15.25A1.844%201.844%200%200%201%2026%2013.83z'%20opacity='.1'/%3e%3cpath%20d='M25%2014.83v21.34a1.772%201.772%200%200%201-.14.69A1.841%201.841%200%200%201%2023.17%2038H10.63a17.1%2017.1%200%200%201-.91-1c-.28-.32-.55-.66-.8-1A19.614%2019.614%200%200%201%205%2024.22v-.44A19.555%2019.555%200%200%201%208.22%2013h14.95A1.844%201.844%200%200%201%2025%2014.83z'%20opacity='.2'/%3e%3cpath%20d='M25%2014.83v19.34A1.844%201.844%200%200%201%2023.17%2036H8.92A19.614%2019.614%200%200%201%205%2024.22v-.44A19.555%2019.555%200%200%201%208.22%2013h14.95A1.844%201.844%200%200%201%2025%2014.83z'%20opacity='.2'/%3e%3cpath%20d='M24%2014.83v19.34A1.844%201.844%200%200%201%2022.17%2036H8.92A19.614%2019.614%200%200%201%205%2024.22v-.44A19.555%2019.555%200%200%201%208.22%2013h13.95A1.844%201.844%200%200%201%2024%2014.83z'%20opacity='.2'/%3e%3crect%20x='2'%20y='13'%20width='22'%20height='22'%20rx='1.833'%20fill='url(%23a)'/%3e%3cpath%20d='M13.2%2017.889a5.039%205.039%200%200%201%203.338.978A3.5%203.5%200%200%201%2017.7%2021.7a3.942%203.942%200%200%201-.573%202.117%203.829%203.829%200%200%201-1.627%201.438%205.524%205.524%200%200%201-2.447.514h-2.319v4.31H8.359v-12.19zm-2.468%206.018h2.044a2.654%202.654%200%200%200%201.807-.539%202%202%200%200%200%20.611-1.577q0-2.015-2.342-2.015h-2.12z'%20fill='%23fff'/%3e%3c/svg%3e`;var microsoft_sharepoint_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2048%2048'%3e%3cdefs%3e%3clinearGradient%20id='a'%20x1='5.822'%20y1='11.568'%20x2='20.178'%20y2='36.432'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%23058f92'/%3e%3cstop%20offset='.5'%20stop-color='%23038489'/%3e%3cstop%20offset='1'%20stop-color='%23026d71'/%3e%3c/linearGradient%3e%3c/defs%3e%3ccircle%20cx='24'%20cy='15'%20r='12'%20fill='%23036c70'/%3e%3ccircle%20cx='34'%20cy='26'%20r='11'%20fill='%231a9ba1'/%3e%3ccircle%20cx='25.5'%20cy='36.5'%20r='8.5'%20fill='%2337c6d0'/%3e%3cpath%20fill='none'%20d='M0%200h48v48H0z'/%3e%3cpath%20d='M26%2013.83v21.34a1.841%201.841%200%200%201-1.14%201.69%201.772%201.772%200%200%201-.69.14h-7.16c-.01-.17-.01-.33-.01-.5a4.18%204.18%200%200%201%20.02-.5%208.473%208.473%200%200%201%205.09-7.29v-1.86A11.986%2011.986%200%200%201%2012.17%2013a8.455%208.455%200%200%201%20.21-1h11.79A1.837%201.837%200%200%201%2026%2013.83z'%20opacity='.1'/%3e%3cpath%20d='M23.17%2013h-11a11.987%2011.987%200%200%200%2010.4%2013.915c-3.1%201.47-5.359%205.645-5.551%209.085a4.18%204.18%200%200%200-.02.5c0%20.17%200%20.33.01.5a6.673%206.673%200%200%200%20.13%201h6.03a1.841%201.841%200%200%200%201.69-1.14%201.772%201.772%200%200%200%20.14-.69V14.83A1.837%201.837%200%200%200%2023.17%2013z'%20opacity='.2'/%3e%3cpath%20d='M23.17%2013h-11a11.988%2011.988%200%200%200%2010.208%2013.891c-3%201.576-5.17%205.741-5.358%209.109h6.15A1.844%201.844%200%200%200%2025%2034.17V14.83A1.837%201.837%200%200%200%2023.17%2013z'%20opacity='.2'/%3e%3cpath%20d='M22.17%2013h-10a11.988%2011.988%200%200%200%208.87%2013.632A16.522%2016.522%200%200%200%2017.02%2036h5.15A1.837%201.837%200%200%200%2024%2034.17V14.83A1.831%201.831%200%200%200%2022.17%2013z'%20opacity='.2'/%3e%3crect%20x='2'%20y='13'%20width='22'%20height='22'%20rx='1.833'%20fill='url(%23a)'/%3e%3cpath%20d='M10.187%2023.776a3.384%203.384%200%200%201-1.049-1.109%203.018%203.018%200%200%201-.365-1.517%202.919%202.919%200%200%201%20.679-1.965%204.011%204.011%200%200%201%201.806-1.178%207.629%207.629%200%200%201%202.467-.382%209.392%209.392%200%200%201%203.25.455v2.3a5.073%205.073%200%200%200-1.47-.6%207.159%207.159%200%200%200-1.719-.206%203.719%203.719%200%200%200-1.767.374%201.159%201.159%200%200%200-.7%201.062%201.076%201.076%200%200%200%20.3.752%202.69%202.69%200%200%200%20.8.572q.5.249%201.5.662a1.519%201.519%200%200%201%20.214.086%2012.341%2012.341%200%200%201%201.892.933%203.387%203.387%200%200%201%201.118%201.126%203.264%203.264%200%200%201%20.4%201.7%203.162%203.162%200%200%201-.636%202.046%203.557%203.557%200%200%201-1.7%201.144%207.71%207.71%200%200%201-2.424.352%2012.824%2012.824%200%200%201-2.2-.18%207.534%207.534%200%200%201-1.783-.524v-2.425a5.746%205.746%200%200%200%201.8.86%207.042%207.042%200%200%200%201.986.318%203.42%203.42%200%200%200%201.8-.382A1.208%201.208%200%200%200%2015%2026.971a1.15%201.15%200%200%200-.34-.826%203.425%203.425%200%200%200-.937-.653q-.6-.3-1.767-.791a10.044%2010.044%200%200%201-1.769-.925z'%20fill='%23fff'/%3e%3c/svg%3e`;var microsoft_teams_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2048%2048'%3e%3cdefs%3e%3clinearGradient%20id='a'%20x1='5.822'%20y1='11.568'%20x2='20.178'%20y2='36.432'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%235a62c3'/%3e%3cstop%20offset='.5'%20stop-color='%234d55bd'/%3e%3cstop%20offset='1'%20stop-color='%233940ab'/%3e%3c/linearGradient%3e%3c/defs%3e%3cpath%20d='M31.993%2019H43.1a1.9%201.9%200%200%201%201.9%201.9v10.117A6.983%206.983%200%200%201%2038.017%2038h-.033A6.983%206.983%200%200%201%2031%2031.017V19.993a.993.993%200%200%201%20.993-.993z'%20fill='%235059c9'/%3e%3ccircle%20cx='39.5'%20cy='12.5'%20r='4.5'%20fill='%235059c9'/%3e%3ccircle%20cx='25.5'%20cy='10.5'%20r='6.5'%20fill='%237b83eb'/%3e%3cpath%20d='M34.167%2019H15.833A1.88%201.88%200%200%200%2014%2020.923v11.539A11.279%2011.279%200%200%200%2025%2044a11.279%2011.279%200%200%200%2011-11.538V20.923A1.88%201.88%200%200%200%2034.167%2019z'%20fill='%237b83eb'/%3e%3cpath%20fill='none'%20d='M0%200h48v48H0z'/%3e%3cpath%20d='M26%2019v16.17a1.841%201.841%200%200%201-1.14%201.69%201.772%201.772%200%200%201-.69.14h-9.29c-.13-.33-.25-.66-.35-1a12.179%2012.179%200%200%201-.53-3.54V20.92A1.877%201.877%200%200%201%2015.83%2019z'%20opacity='.1'/%3e%3cpath%20d='M25%2019v17.17a1.772%201.772%200%200%201-.14.69A1.841%201.841%200%200%201%2023.17%2038h-7.82c-.17-.33-.33-.66-.47-1s-.25-.66-.35-1a12.179%2012.179%200%200%201-.53-3.54V20.92A1.877%201.877%200%200%201%2015.83%2019z'%20opacity='.2'/%3e%3cpath%20d='M25%2019v15.17A1.844%201.844%200%200%201%2023.17%2036h-8.64a12.179%2012.179%200%200%201-.53-3.54V20.92A1.877%201.877%200%200%201%2015.83%2019z'%20opacity='.2'/%3e%3cpath%20d='M24%2019v15.17A1.844%201.844%200%200%201%2022.17%2036h-7.64a12.179%2012.179%200%200%201-.53-3.54V20.92A1.877%201.877%200%200%201%2015.83%2019z'%20opacity='.2'/%3e%3cpath%20d='M26%2013.83v3.15c-.17.01-.33.02-.5.02s-.33-.01-.5-.02a5.489%205.489%200%200%201-1-.16A6.5%206.5%200%200%201%2019.5%2013a5.556%205.556%200%200%201-.32-1h4.99A1.837%201.837%200%200%201%2026%2013.83z'%20opacity='.1'/%3e%3cpath%20d='M25%2014.83v2.15a5.489%205.489%200%200%201-1-.16A6.5%206.5%200%200%201%2019.5%2013h3.67A1.837%201.837%200%200%201%2025%2014.83z'%20opacity='.2'/%3e%3cpath%20d='M25%2014.83v2.15a5.489%205.489%200%200%201-1-.16A6.5%206.5%200%200%201%2019.5%2013h3.67A1.837%201.837%200%200%201%2025%2014.83z'%20opacity='.2'/%3e%3cpath%20d='M24%2014.83v1.99A6.5%206.5%200%200%201%2019.5%2013h2.67A1.837%201.837%200%200%201%2024%2014.83z'%20opacity='.2'/%3e%3crect%20x='2'%20y='13'%20width='22'%20height='22'%20rx='1.833'%20fill='url(%23a)'/%3e%3cpath%20d='M17.824%2019.978h-3.665v9.98h-2.335v-9.98H8.176v-1.936h9.648z'%20fill='%23fff'/%3e%3c/svg%3e`;var microsoft_word_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2048%2048'%3e%3cdefs%3e%3clinearGradient%20id='a'%20x1='5.822'%20y1='11.568'%20x2='20.178'%20y2='36.432'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%232368c4'/%3e%3cstop%20offset='.5'%20stop-color='%231a5dbe'/%3e%3cstop%20offset='1'%20stop-color='%231146ac'/%3e%3c/linearGradient%3e%3c/defs%3e%3cpath%20d='M43.167%204H13.833A1.833%201.833%200%200%200%2012%205.833V14l17%205%2016-5V5.833A1.833%201.833%200%200%200%2043.167%204z'%20fill='%2341a5ee'/%3e%3cpath%20fill='%232b7cd3'%20d='M45%2014H12v10l17%203%2016-3V14z'/%3e%3cpath%20fill='%23185abd'%20d='M12%2024v10l16%202%2017-2V24H12z'/%3e%3cpath%20d='M13.833%2044h29.334A1.833%201.833%200%200%200%2045%2042.167V34H12v8.167A1.833%201.833%200%200%200%2013.833%2044z'%20fill='%23103f91'/%3e%3cpath%20fill='none'%20d='M0%200h48v48H0z'/%3e%3cpath%20d='M24.167%2012H12v25h12.167A1.839%201.839%200%200%200%2026%2035.167V13.833A1.839%201.839%200%200%200%2024.167%2012z'%20opacity='.1'/%3e%3cpath%20d='M23.167%2013H12v25h11.167A1.839%201.839%200%200%200%2025%2036.167V14.833A1.839%201.839%200%200%200%2023.167%2013z'%20opacity='.2'/%3e%3cpath%20d='M23.167%2013H12v23h11.167A1.839%201.839%200%200%200%2025%2034.167V14.833A1.839%201.839%200%200%200%2023.167%2013z'%20opacity='.2'/%3e%3cpath%20d='M22.167%2013H12v23h10.167A1.839%201.839%200%200%200%2024%2034.167V14.833A1.839%201.839%200%200%200%2022.167%2013z'%20opacity='.2'/%3e%3crect%20x='2'%20y='13'%20width='22'%20height='22'%20rx='1.833'%20fill='url(%23a)'/%3e%3cpath%20d='M9.522%2027.058c.036.283.06.529.071.74h.042q.024-.3.1-.723t.137-.715l1.928-8.318h2.493l2%208.193a12.133%2012.133%200%200%201%20.249%201.546h.033a11.853%2011.853%200%200%201%20.208-1.5l1.595-8.243h2.269l-2.802%2011.92h-2.651l-1.9-7.894c-.055-.227-.118-.524-.187-.889s-.112-.632-.129-.8h-.033q-.033.291-.129.864t-.154.848l-1.786%207.869H8.18L5.363%2018.042h2.31l1.737%208.335c.039.171.076.399.112.681z'%20fill='%23fff'/%3e%3c/svg%3e`;var miro_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAAKlBMVEVMaXH62TL/3TL/3TP/3zT/3TP/3TMcHB58bSc2MiFZUCSrlirewTDGrS6/psk0AAAABnRSTlMA7lyIIKo0OOpZAAAACXBIWXMAABYlAAAWJQFJUiTwAAAEY0lEQVR42s2b7ZrqIAyEl37QQOD+b/esukdbnUDSdpvlJ/qQNzMBWoWvL6FNwziHEE9oIczjMH2Z2jCeEnqDMQ/q8OdH/2HQ6fBb4e8IYxdh+MXwDxWa4ac5/noLk1/6PRHGeFEbcfw5XtZmFD/EC1twzR9qMMaL21sdDPHytpkLU7geYLMeOMTflMEQXdrgacDGhDE6tdFXgKcEQ4y+EgQ/gOAswGMizJ4Ao68Ddw8m+VNatRUmr7rLq7uuullNMLVKgJZXSy+Cuu5+hQpp1Z+Luggaq9BmyPQaMq+6F4Jg6/5OEbRqcC3BimAbKQcItqSq25FaNbiN9CIg3L/9+rcIRVOFzUmQcaSyDfQsBFqED1oAzY/fcnoSvEciUDTvlSO0NkB8G/G/r+U90E8hvIMpirED8DEiC/2PVD8l6PrQAfgc8TFcSTgOL6A1i7EDAESlptgZEbRE6AEEIRAS+7b81QU2uRh7ACglEiS4hyFMsFDYCYBSIkGCm9awvyFCFwC6eksHp0qiBMteAFjY35ujkGouggRppwUfi9FTUCHVJPTzbgASLJXcTsnggAZACJSK6LbBAQ2AqLXo9rLo9wQNQJWSyrgMLQ6oAPD6KjayOKADqCYAtjigA4gWszNUoB4D4EXvNmeLA0oAPBPhkpOgXHQQAM9EgttENDlwCACuA7WYHNACZLjtwFBsckALgHJlHIr1G5EeAOdK0OxscuDANCQhVLa9G3ztrsGCfCHoFh8GQO8b6IH5mwr1hqMAAdZVhQ6A3hyPAlSYK0Ot2eaADgC/BhHc9MnmwO7ngYoKI8Pv5ngYIMGZjbVONgdUAAWGKtCBoH8Y0wMwHJSh1tXowM6nYoK9DGH5OECC23sGr2sIqxwGCHhzSbofKHI8DFChAwVrnYwOaAAYqsp4z7U6oAHAqhJ0oFgeBXa/njPEqlAtOg4gJJVgL1kd2PMLCcGpQdCurgMKAJxUxakmqwM7fqTKUJefVPUvJHoAPLEz/gXX7ID9d8KEp0aButAJAMKYeMFlswP2n2oL1JrhlxUO9AGSKtUCAegEgKL6wyJj2noCAIM9/zNVhhu3xgHrHxaEUw1wxtAZABl6XXAktj0KqAASFFWIRHYHegDFFCmbHsZUAIw314y9TnYHegCqSBU/vYYzADSRkvCvejwBQBWJsF98BkDFQzJ+6iLbw5gGQBgy49mWdzjQARAOayQsddrhQAcg4a1FkHqPA22AgqUuWOqyx4E2AGMHGEvNexxoAxDW1NbdAwjKEsi4NIXuFNVnuYJyGWLM1e/uAcy6ZSgJpRnwC0TRH60ddSVAuDQz5kqG83yDbhkqmIsxF0X9icbGcb78ausRadW/nrOr7mI4zud+oNHvVPH/493uh1rdj/V6ejD8jaPd7ofb/Y/3u19wcDreHf7SJRf3az7+F538r3r5X3bzv+7nf+HR/8rnNevBPP3la783EZwvPt+vvQfP8A8j5vMvv4+D7QL+Vdf//wEiJIEtRtSRlQAAAABJRU5ErkJggg==`;var n8n_default=`/assets/n8n-CViEi-uo.ico`;var notion_default=`/assets/notion-egi6fb2a.png`;var oura_default=`data:image/png;base64,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`;var paddle_default=`/assets/paddle-PTFXjZtt.ico`;var perplexity_default=`/assets/perplexity-CwIseVmg.ico`;var pipedrive_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADkAAAA5CAMAAAC7xnO3AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADeUExURQAAAACAQABwMAB4OABwOAB6NQB1OgB1NQB4OAB0OAB2OQB2NgB4OAB1OAJ3NwB2OQB2NwJ3NwJ3NgJ3NwB3NwJ3NwB3OAJ2NgB2NgF3NwF3NgB3NwB3NwF1NwB1NwF3OAF3NwB3OAB3NwF3NwF3NgF2NwB2NwF3NwF3NwB3NwF3NwF3Nv///+/38+/38t/u5s/m2c/l2s/l2b/dza/VwKDMtJ/MtJDEp5DDqJDDp4C7m3Czj3CzjnCyj2CqglCidVChdkCZaTGRXTCRXTCRXDCQXSGIUCCIUBF/RAF3N2IgZcAAAAAsdFJOUwAQECAgMDAwQEBQUGBgb3Bwj4+QkJ+foKCvr6+wsLC/v7+/z8/Pz9Df3+/vG4DFfgAAAgNJREFUeNqd1et20lAQhuHBqEVJWpR4wKpFKO0uiUlr2oqoaJQmfPd/Qy1NYEj2IRueX1ks3jVMTpDSU6/XFwGAYDTovXTI0oueQJV4c0DNvAFURl7TPAEdYWqdAUz62oUPA5hNuqT0Cs1ek6w1gI1+SwrPYWdUTz/A1sBuxzxN0/+mXQ9RmiaPbnMAyKZRuBJdz7Gty6EToJSEpRT4EbI4B5vwde1DKi+LQzZXrepBLkM+UqRtKgipVPmaY0PwSF0ZR3ycgHm0Mgabz2bf+KvpEljchGtpbdPnqNp8c4rCnD+obvpOU8ZY+73eFMzn8yOVqbx99Rw5kEppwC/FhXGooykTsLuy/Anmka8pb8GyspxVFj3Zs/xIY0152fBrBQWNZ4iv6B+wCQH2V+UfwPTllTQyhl0ZfkchjcLCDbap9uQ7HkDOr4YMlT2FXLKIn7L6yFP6JJdqcYZtQ8U9ZBXCJ09TXsXGEB3ts5JkScimS9Q4REJTAn+vo2LeLAPjd5hvesoWabpYQuEtEbV1pdEzenCyR3lKK+4epUuPxM6loEJbV5pH8qb25bH0/2lZBg5tHO1UdomYv0PpE6ususwL5iXZkzHsnLeonvZhY8ihcle7HdlRALOgSxrOZ5gMHdJzBXREm8zcM/U8l5odvBeouvDbZMnp+F/OAgDBxbHvqte7B2OaieXxJBWIAAAAAElFTkSuQmCC`;var polar_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAVFBMVEVMaXEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhs3HqAAAAG3RSTlMA+Tgkj/HC3WkP6Z3NgNVcrwZApRd2l0svuFKY7s38AAAACXBIWXMAAAsTAAALEwEAmpwYAAAByklEQVR42m1TibKjMAxzgJwQSrkK6P//c2UoR3eeZzqta0Wy7ETkjiXUa0pumAr5K0KLK1KO/5c3D9QNYLRuPGz4rc8sL51BHsuagBCA9UnigCA+odJkoISeSOOzvkny2RypBT4CYxFv/hdBMeUjnwAnFao2HXkPUgd8CryPP6KBkYi0HJKS4OVNWe9PyRUopUURoG28gIIqvSCfgEk1qSHomLVoSGCo1J+AApgo2kpD1VJbDqilxmWLTWT5wJJ9Y80qSy/+7JHhSU8antaDnYz8LQq8B3MAImUc5V5sY4S/Ad0OsOzNcmwbG66ZNzdg2HvwZIAYynfMtyeg5moCVnVAJwU/gTLtk2Hb59BzfgMZWs4lIN2AlZNsaH8i7cTiATDjwyZd0faKQRbMBKsTLBeAbB/aj3pNxFjKVPyDNOckecixtwydbgZPr2T6Lne/AKXoWOy+rDeqUadobhsVuN6CXwTuyy0b6rfflGFqISdnXX979oFc86VRIjruwV7GI3ihdWrm2KfrMpvzN6OUvMedanTHdXEoY9KLdkXUh9HzVc1v4VdT0LRffp4WLa9eXyV5XF536G+UMx4x/PXA42t23trUDOHeivwDcIcm+XPo6+QAAAAASUVORK5CYII=`;var posthog_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='300'%20height='300'%20fill='none'%20viewBox='0%200%20300%20300'%3e%3crect%20width='300'%20height='300'%20fill='%23000'/%3e%3cpath%20fill='%23fff'%20d='M33%20179.379L72.0038%20218.33H33V179.379ZM33%20169.641L81.7548%20218.33H120.759L33%20130.689V169.641ZM33%20120.951L130.51%20218.33H169.513L33%2082V120.951ZM81.7548%20120.951L179.264%20218.33V179.379L81.7548%2082V120.951ZM130.51%2082V120.951L179.264%20169.641V130.689L130.51%2082Z'/%3e%3cpath%20fill='%23fff'%20d='M266.863%20203.174C256.87%20203.174%20247.291%20199.208%20240.231%20192.158L186%20138V218.754H266.863V203.174Z'/%3e%3cpath%20fill='%23000'%20d='M209.563%20202.75C213.871%20202.75%20217.363%20199.262%20217.363%20194.959C217.363%20190.657%20213.871%20187.169%20209.563%20187.169C205.254%20187.169%20201.762%20190.657%20201.762%20194.959C201.762%20199.262%20205.254%20202.75%20209.563%20202.75Z'/%3e%3cpath%20fill='%23fff'%20d='M33%20218.33H72.0038L33%20179.379V218.33Z'/%3e%3cpath%20fill='%23fff'%20d='M81.7548%20130.689L33%2082V120.951L81.7548%20169.641V130.689Z'/%3e%3cpath%20fill='%23fff'%20d='M33%20130.689V169.641L81.7548%20218.33V179.379L33%20130.689Z'/%3e%3cpath%20fill='%23fff'%20d='M130.51%20130.689L81.7548%2082V120.951L130.51%20169.641V130.689Z'/%3e%3cpath%20fill='%23fff'%20d='M81.7548%20218.33H120.759L81.7548%20179.379V218.33Z'/%3e%3cpath%20fill='%23fff'%20d='M81.7548%20130.689V169.641L130.51%20218.33V179.379L81.7548%20130.689Z'/%3e%3c/svg%3e`;var prestashop_default=`/assets/prestashop-BQtyl3tL.ico`;var replicate_default=`/assets/replicate-CKiqAkf2.png`;var resend_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADkAAAA5CAYAAACMGIOFAAAACXBIWXMAAAsTAAALEwB3nayOAAAAAXNSR0IB2cksfwAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABGdBTUEAALGPC/xhBQAAAzhJREFUeNrlm9uN4jAUhimBEugAOoAOKIHZLQCoAKYC6AC2AmYrgA6gglEQVwmBhvDCTSibLyKjDGImdmLntpGOeAHsz8c+57d9kstJPvP5vLJYLJrL5fLN/jTsz4/1em3pMrs9025ncm+vaVspp+MxDCNvN9Kmsc1mYx0OB+t0OlnX69W63W7ajXaOx6PTLu0zuLa9KAOczWa/8JZpmpFB+dnlcrF2u114WLxn/8Fou906f5oEuB9g+/bULkgB8gNGiemRRLhHo5/0VxiUL65WK4M1lwZA1+gv/fYFdT2YNkAvKP1nqX0LaQeYflqmqM/UHT0FJEqxiNMM6BrBcjqd/n4GaSQ1igaJuqS9L9M2S150bb/fo5ZeM+lFr0pCobmAJaRSlgBdgwutDWRTNqK+v79bvV5PiQ0GA2s8HuuMtE3SxhviV+bHdM6eBEotn89btVrNGUCVedP25F88OZEV3jogvVav11WuS4P9oSn7Y92QGF5VAUoqQcpZSYTEOp1OaEj4AkEOh0NnpINYpVKRWqdh83dgyLBGcKlWq0KgDGgqIV0rFou+kO12O92Q3W5XewCKHVIkgDUajXRDAuAHyUCkFpLgUygUfCHDKqDYIImYIoAqBEFkkOQ6wFqtllUul4VSB4OgQsdqhQQMxQIUSV1G6agC1AqJx4LuRMiLKk8ptEDiAdFtlWt4PKyyiRSSzop4DW9HEeS0QDLVRNdgFKDa1qTMVkw3qNbomhRQ7XmSAyrRqavqyCMWMSADqurIIxbFI6pTdYBGql1lQNlMqxIEkQv0OEBj2YXIgirZanEumdS9pAqxzrmyc6MVR+kKHRc5yAoD+nmzxV3I+XyO5XSANcdWDAg/43uya5Q7HvcupJn2OgHfWy3u77J8P/lZixfkZisNdQPOjZan8vGVO/YsQd7L0V4eqyA/slT98cWL3mpI6l8y6cWHWp5RRiqy+n7ln0ZceVNVbZ1QESHVhmkDFa6S/G/qXR9A/7CIk1y5TLAklvxY/un3EKUYpSTBIlzI66S9p9WQYWHdtwkQv1G+TUCM8LxNMEHAhPKeD2zJ814IjZk63wvBW/f3T5z3QpxaOcnnH3sz9lYT9VTiAAAAAElFTkSuQmCC`;var salesforce_default=`/assets/salesforce-aAWnuvNz.ico`;var sanity_default=`data:image/svg+xml,%3csvg%20width='192'%20height='192'%20viewBox='0%200%20192%20192'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M146.306%20108.9L142.197%20101.77L122.32%20113.84L144.397%2085.8165L147.735%2083.864L146.909%2082.6271L148.425%2080.6954L141.459%2074.9142L138.27%2078.9652L73.9066%20116.508L97.7035%2087.9775L142.027%2063.7548L137.816%2055.6389L113.674%2068.8273L125.562%2054.5827L118.752%2048.6L91.9963%2080.6746L65.4237%2095.204L85.7678%2068.3895L98.5159%2061.7745L94.4674%2053.5682L57.3267%2072.8435L67.4547%2059.4814L60.38%2053.8322L39%2082.0434L39.3317%2082.3075L43.3261%2090.4165L67.0282%2078.1106L45.4248%20106.579L48.9656%20109.407L51.0711%20113.465L76.0257%2099.8248L48.5458%20132.775L55.3566%20138.758L56.7241%20137.118L123.017%2098.3239L101.007%20126.271L101.366%20126.57L101.332%20126.591L105.895%20134.505L135.169%20116.724L123.897%20134.86L131.452%20139.8L149.4%20110.929L146.306%20108.9Z'%20fill='%230D0E12'%20/%3e%3c/svg%3e`;var semrush_default=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='48'%20height='48'%20fill='none'%20viewBox='0%200%2048%2048'%3e%3cpath%20fill='%23c190ff'%20d='M32.54%209c-2.22%200-4.65.81-7.35%202.23L11%2019h12L0%2031h25l-13%207.06L32.9%2038c7.84-.2%2014.1-6.6%2014.1-14.5S40.5%209%2032.54%209'/%3e%3c/svg%3e`;var sentry_default=`/assets/sentry-Y4ADGpgF.ico`;var sevdesk_default=`/assets/sevdesk-Dr_WIz1k.png`;var shopify_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAYAAAA5ZDbSAAAAJGVYSWZJSSoACAAAAAEAPAECAAkAAAAaAAAAAAAAAGltYWdlcnk0AAAnPYy6AAABYmlDQ1BEaXNwbGF5IFAzAAB4nH2Qu0sDQRyEv/OBEGMhWlhYXCUWUcNF0MbCBwRF8PABSawul5eQnMtdRCJ2YiuC/4EK1oKFIqJgY2EhiBYi2lmlUrDRsLKXSLTQafZjGGZ/DDR0WULkm4CCU3Rno2N6LJ7QW17Q0PBl2Z4YNc1pxd/vb73fV7O3faqrXNnbGt6MXhaOzmbWHroG+F+BVNqzgU8gbAu3CFoIMFeLQvE60OnG4gnQthVnq7yvOFnlYz8zPzsO2jWg2zkrBVoZCCV/+NkfXMivqH+V1PXBtLMwp3qAbiZYwkOQx6KEjknkj/ygnx9nGUEJlyWy5CiiM4rwG9LoTOJg008IHYMwBobaubbfXW2/UN3beIaRcynlad2bOofDIQic1L3eYWhvhasTYbmWbzUCDZkMvB5AWxw6biCw6GUiRvX64Bg0P0n51gMtO1DZlvJjV8rKHjQ+woXzBRcparyYp1NxAAAM00lEQVR4Ae2dXWwcVxXHz8y6tqu47VYxtCSRMkkr0QeIzQMICKK7RSWBFzuPSECcJ2gCqi0kxFtinhAScqMSWvoShyIhwUOcF5IQwZqqUKRWiptWalFDvBVpVKJULInT2PHuXO7ZnXFmxzs7d+49M3Nndn/S1uv17Mb1f8+55+OeuwbkhJOVyeJtuDNVABizAUr8IQsfZwA1A6DKb4sGGMefKZ+rQg9hQMZ5obLfsoEd5UJO8v+ZYtj1/Jrn1uD+2ZnyQg16gEwL/ELl60cbYEyLCOujaoJR7gVrzqTAjtWe5nfHg68yqq2vzAq4YMnkN7xjg/E+v7/IBV+EnJE5gU9Unh5nYFY6WS1fYxcbALMjMLx0yOOCn6/sL5nA5qDrG6IJt2w2/0z5T7OQEzIlcJC4rrA/7GCBGHx9DHdO8ruTIE5uXHhmBA62XGP2SPncsaDnAJjoyi2IDvcAhfKR8h+XIMOYkAFwzUWhvOKypgDGoW7i4hsCfOK2nufDMOb5f6u+R/m/1aicqHwzzK1rjfYCo4vlAdUmoQywuXWdm+/0nC7r9PEtcP8uzInbXouxN4+Uz+/iwZZ/7UWRT8/x3wEyivYC34E7R2GTi0XLvdDRdQZZOxePvyHOT2PwxQshZ3xPm8D/8DX8GF7n+5k11PodMonWAp+o7J/i4ky3P9pcc+eDnsOAYUBleR6qorV7A7ACGAvtz7kXXeN1/PsZ38+n+RunBBlEW4FblsjaLYevlUFrLnKCFz5Yq0zpwT7gt3YnOq56Hiq+5Flrf1A+/xz3AL43AcukFWsrMP+DPgs+SzQZBOan+IZgvKrV/howE+TKeWr1V+/362CP+36OVlzzvFbppQwGXFoK3BJrs2vulpdiPbotqOLWjpbY5Xq/8Jb3G+ffOuV9jL8J2nJpDABR9J/8rmSBpmgpsN3ZNc8HXd9y5zDlfaybtTdfEoy2dMk0YCds+j3a12pux8+iqL+s7Jv+VWVfhXevltehcXHlFix/d+6rWrpw7QR+vhXMTHkfCxNr0xsixNpbz2nPe23GHvZfgwGXL6XCqth/+WNz6LLbPAaDYzqKrJ3Ahdba66G7WB2sl5cZYR5CGPAJzC36Id/rlriVztnh9et7aCjyAGiE0yXyrnOhYnWw3lMyNWQe1BVRVP51gos6xV+3aZ2Ra7ktkeE3M69o0bDQyoIlxSp5vxGx3gDGsWKGwZ1Ef7kdjSxZG4E7BkohYjnrtbXxAA/Gwt4QbpDkFETiQxORtXHRtr9AgWKVuovFe7cH257CjDOdrsNUpgH1CZ4nl3iQhMER5rXxo4G71kZgg4vl/aPfx8zjAk8ree7XDpfPbqQ17nqKe7V4KmOl1hl1RDbBdHPq2vzMYmL7wbToBzvB1bLnoSp2d7o9x+n1XnS/x3SGW+gpbtVPNgQ34FHxzntrcHPFBkVqhgHzp2ZemQFCtFiDG+2RM4olYL2FtvSlVYNmJzECTlJcQoqMwfTUXIn0d9fCRfN32YTXPRubKkj3cPc/g2/9zREWOJsBKdBCYF8HqOqPhFutOvtJb5CUVxp2Az1TfgRupToe+zWMRbTSVVgdby865FnWNvLlonn03N6mY8zCIr67jvaMrA6maY4BIakGWWipprNdxmVTEb/3IO05J27B/vUU+rTBWOAkhhSJeEBvET+P1kmUB29gGubDVMWQWCzYDZIwlcGig3RnpnexgCiSJhW45X7ZQR4kTfZqkEQBZapEIrA77Wc7EXFfVDV4occCIkiiaKcTlLkdh7pimMZOIIJEYJ7LTkAfSsiMhSoP7uW8lRzKVIlkDWYpu+ehgS2wrbgHHhh+FB4c/iQMDozwr49suu7Gyr/g5ur15tdrtUugMUXeVbJ4qlQFRZQFnqs021uJWzAKunv0S7Br9Mtc2EeEn+OyVr8Nf7v8Irz74QXQFJK/qbLAg3CfBQmBlrpnx4HmDe+rvhaKrCtUqZKywDYUeD053h1OlMJ6QVetK4ZhkCx7ygL7u0HU7OJueO/j3++4pqpwY+UK3Fr9D2iMBQQQCEzzi3TiK1zYPTsmIQ6u1d4EzSFpG1IIvJPaQaMb/sZnjrYFRdRcufEaaA5JkKWcB7MYLHhi/Oexiot8pPH669BMlUARikKHBYSgWx4deQziBHNgnSNoD8rxjZLA1Dnw561vx7bmevlA7yLHBjxVskARJYEHYJgsgsZiBQqcBFkRmKdKFiii6KJtMutF15wEa/UV3cuUXixQRElgE0wSC8aACvPdJPiI578ZQjlVUkyTGIkFf0HRNWPAdJdbprdwgS6/U436yo2/Q4awQBElgXkOPKaaA6MIMikRinrp6ulmPtst5cHXxqgcGxN4/1rtLcgSql0lJYEZQQSN3aCoYAcIO0EiqQ6ut3jDNwO+mTQvT3YCl8EqSKJayVJeg3dHXHtRrL+8+wuQIYPiKqdK0kGWc+SCEkO8MR/VPb96+dfQS6iOskgLXCcIALaO7I50PaY4Orf44mBgwLBAAWmBTQKBhyP2djOW4pCwvm5boIBKHmyBIlsj1pwfIO4JZwRLZepfWuA4+8BByKZUOcACSRQsmJFtzo7C1574Uc9ZsrM/SwppgVkKFoyguJO8X9xLIg8NFiyQJNU1WLYn64r8xKNPQy+wXpf3llICt86oUgfrx7KgyE9xd/1Ub7jsZF00bpUFAij6smjFebdmlVEWKYGptspi6fAmQfmwB6y5KJsqSQpskDX6/0k4OpJza7ZAAlkLJjvqh3o2yLXmpLb/JIVsqiQbRZNZMLrpS1cXgBoUGIXOC4ODheQEph4Xfb36W5K12A+66ryIXK+zh0CCyALHMS6KXaKzb/8U4gBF3pvQhr6YScaC4xoXxW03f5Zs5IcxtmMy84GXbKoUWWAbDAtiAiPqs2/PxjJ1sPfx75GOnqaA1ChLZIEpj/jpxPKN1+D3bxwmX5Nx9wjOF2eZraPRAy0JgeNvMmBk/Yc3jpCnUDgWk2Urvn79buTYR0Zg0uNug8DACzfX4Y3KZaMVfzrDa7HM1H9kgVnCB66gFVO6bJltuhphQURk8mALEsZ12RRD26MRN/ppRmTvGUngtI5MQtBln+MRtmoHaijgDK0sUCgYFkQkksCU46KynOMFEdU1eSSjAjcaDKKmShFdtJ2K9XpBS8YxFBWyasEOkYwsksBU46KqaHw6XexEHWWJJLCR0kY7Pxh0ZeSMDXKiTv1HdNE0W2UpjmtQKVjczOAQmgcrysWRBKbKgbcX9zQF/s4XT0ltsVFNde5m2/ojpUpR82CyIxsQFBdFjrqXSrWmfGv1Q8gw1lxlUtjQhOeDnc9lAAr852BhKw9vGDzhrdshKWj5Kq0/PKMy6+v3+9WaBYIn0QoLjOOiFKemYaEhyMW6QmMQhWOiH9Te2tg7jRaOrl11NikP46erH4PwUcPCAptEEfT24mdDr3EPUImjbrys/xmVodxebQi76ChGaQEB24qJNKM6gp5hOVun7HQkytS/sMBUW2XTLPZn5YS7MIaGxNuGUSyYJEVKa74XrRd3b+aB+rr4/ixhgSm2yqY5vI3ReRZP2elEvcGER1kSteDtKQmMaVderNeDJXKRkMBU46L4R45jiqEbaLVxbcdNE9FRFiGBqcZFkVcvv5iYNaG4C0s/zo1r9iI69S8kMPUnq6DAL//jYKwpC7rlvIqLiE79CxU64mgT4h8ex1Xc6hVVAIZlyNerLye+FKSAkNGJCkz+ySoubv0Zz8zCERMUWmbHhXv6LN56oVcsOsoi9FnOJyr7LkKCH0CJYn+CF0RGm7fHmh82if1fLF+6Z0PjV6wrY/Mg7Q+bfOe9Nbi5YkPSbPuUuetn3+p+1LBoLdqCBMFBtAx87E3qrNcLoUcNhwZZaW6V7dMdkVGWUIF12CrbpzMiU/8CaVL6W2X7BMDCT6I1wy/QY6tsn80wZoR2+AQsmPUtWFNEzgsNFTipcdE+0REZZaHYZtUnRcKm/kMFPlw+X+aB1udsYAe4Pc9yi8YaoNCGrz7xc+t/3UdZhAodR8oXUFC8tRV4sY2Ih7JgIIZbepw1oR+UJUgjZCuV0ucmdRL+ZGWyuAKrKPg4NikMMMbs1v1+sBYHzLC6/Vj5I979HCov1PiXRee2QV/4eAj7VBZygYMIEr7v5uUZKBgwPNy9XyTUTUqDLAmfVDcJBR24z6iyBpzZMmIu1Wr2wvzMYq3bc7QVuBOum29NWaB718PNxyWwK+iACWcGh8ylMevBBccTCpMpgYNIe32nEphCUD+5EDiIlpsvFLnFl+J087ICxyGon1wLHAT1+i4qcBKC+ulJgTvhunlsj5pglKK4+SCB0xDUT1/gEETWd1dgHQT10xdYEnd9R+H/fXXdWquDFoL6+T/K4FUFKhVmmwAAAABJRU5ErkJggg==`;var slack_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAiCAMAAADiW5DOAAABDlBMVEUAAAD/xgD/swD/xgD/wgDgCnDrCmxIt1hDtFrjB2o+ulrkB2tEu13mBmr5wQbkBWdCuFdBtFr6vwUAsv8Asf8AtP8Asv8As/8AtP9AuFb7vwTnB23/vgMAsv//wANBtVdBtVnmBmwAs//8wQMAtP8As//jBWsAs//jB2xDtVf6wAUAsv/lBmnmBmxDt1nmB2vkB2pBt1gAtP/9wgNCt1n8wAP8wANCtlgAs/8AtP8Atf8Atv8At/8AuP9BtlhBt1hCuFlCuVlCuVpCulpDu1pDvFtEvVxEvlzjBmrkBmrkBmvlBmvnBmzoBmzqBm3rBm7tBm/8wAP9wQP/wgP/wwP/xAP/xQP/xgP/xwP/yAN1pSH6AAAAOHRSTlMACQoSFRkaICIkJSYpKS0vMjM4PD5BQkNERERLS0xNT1ZaXmJjZWZsbW9xfn6Cio2OkZaam6qutiE9PJgAAAEnSURBVDjLrdBnV8MgFAbg1733qHvvvSWNiaMOqq2WVq3+/z8i3EgCiuegx/fLvQeehAtAlqGIRcOqmSvEN51wZZSp5ID1WKXbZUIyIUAkvnYZlkSb2GUCD7PpYXDgYXT+aHIhS5NfsMzReXzVL+sIs7JkmFOq7UBkm7xhknqbPl2ab+YCOLNJoLcKurkDxmyzDOzT1rg2bXLo6cD4y6q66Y48YPbzgpcD+MesFbmMbHZl2VMrxyJLdUouzHOemC2q28CJsDIIlLW5p1oEbCLeAK5N2nwxNeBJf56aqm3qQAftrBhm0TYNcuiuR16ehGEw82JM02S+QWZ+zq8MnXHoYcSGh3n2MMJlSkRK+g3rLtNHpgeYINPsHLq18lBpUU3ve+21MVv/AMnhmxQ0lrxLAAAAAElFTkSuQmCC`;var snowflake_default=`/assets/snowflake-CP8ObIkg.svg`;var storyblok_default=`data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3csvg%20width='32'%20height='32'%20viewBox='0%200%2032%2032'%20fill='none'%20version='1.1'%20id='svg1'%20sodipodi:docname='favicon.svg'%20inkscape:version='1.4%20(e7c3feb1,%202024-10-09)'%20inkscape:export-filename='favicon.png'%20inkscape:export-xdpi='3840'%20inkscape:export-ydpi='3840'%20xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape'%20xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:svg='http://www.w3.org/2000/svg'%3e%3cdefs%20id='defs1'%20/%3e%3csodipodi:namedview%20id='namedview1'%20pagecolor='%23ffffff'%20bordercolor='%23000000'%20borderopacity='0.25'%20inkscape:showpageshadow='2'%20inkscape:pageopacity='0.0'%20inkscape:pagecheckerboard='0'%20inkscape:deskcolor='%23d1d1d1'%20inkscape:zoom='18.909091'%20inkscape:cx='12.084135'%20inkscape:cy='10.3125'%20inkscape:window-width='2560'%20inkscape:window-height='1387'%20inkscape:window-x='2'%20inkscape:window-y='25'%20inkscape:window-maximized='0'%20inkscape:current-layer='svg1'%20/%3e%3crect%20style='fill:%23ffffff'%20id='rect1'%20width='22.528847'%20height='23.586538'%20x='4.7067308'%20y='2.5384614'%20/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M%201.743,2.6012379%20C%201.743,1.1646115%202.9035511,0%204.3351688,0%20H%2027.664688%20c%201.431617,0%202.592183,1.1646115%202.592183,2.6012379%20V%2026.012379%20c%200,1.436626%20-1.160566,2.601252%20-2.592183,2.601252%20H%2012.547857%20L%208.6763382,31.821524%20C%208.1737645,32.237962%207.4150178,31.879147%207.4150178,31.225223%20V%2028.613631%20H%204.3351688%20C%202.9035511,28.613631%201.743,27.449005%201.743,26.012379%20Z%20M%207.4130027,4.7276243%20H%2019.874954%20c%202.691272,0%204.873167,2.1894373%204.873167,4.890231%200,2.1642747%20-1.401013,4.0001737%20-3.342613,4.6441847%202.270225,0.416621%203.990772,2.411735%203.990772,4.810319%200,2.700839%20-2.181743,4.890215%20-4.873166,4.890215%20H%207.4132148%20V%2014.508102%20H%207.4130027%20Z%20M%2017.777299,9.1282408%20h%20-5.828482%20v%202.9341452%20h%205.828482%20c%200.807397,0%201.46192,-0.656829%201.46192,-1.467065%200,-0.810252%20-0.654523,-1.4670802%20-1.46192,-1.4670802%20z%20m%20-5.828482,6.5204812%20h%206.314071%20c%200.897091,0%201.62449,0.729791%201.62449,1.630172%200,0.90023%20-0.727399,1.630022%20-1.62449,1.630022%20h%20-6.314071%20z'%20fill='%231f1f1f'%20id='path1'%20style='stroke-width:1.51775'%20/%3e%3c/svg%3e`;var stripe_default=`data:image/svg+xml,%3csvg%20width='512'%20height='512'%20viewBox='0%200%20512%20512'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20clip-path='url(%23clip0_159_20)'%3e%3crect%20width='512'%20height='512'%20fill='%23533AFD'/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M120%20392L392%20334.317V120L120%20178.357V392Z'%20fill='white'/%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_159_20'%3e%3crect%20width='512'%20height='512'%20rx='64'%20fill='white'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e`;var supabase_default=`data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAABMLAAATCwAAAAAAAAAAAAAcHBxyHBwc6xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHOscHBxyHBwc6hwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc6hwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHRz/ICId/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cGxz/Iyce/1d8Kv8xPiH/Gxoc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/Gxsc/yUrHv9toC//aZgw/ygvH/8bGhz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xsaHP8aGRv/Ghkb/xkYG/8kKR3/aJks/3+7Nf9giC//IiUe/xsbHP8cHBz/HBwc/xwcHP8cHBz/HBwc/x4eHP87TSX/S2Yq/0tlKv9LZSr/Tmwq/2qeLP95szH/gr83/1V2LP8eHx3/HBwc/xwcHP8cHBz/HBwc/xsbHP8lKh//ea44/5DSP/+P0D7/j9A+/4nJO/9upCz/c6wv/3+7Nf+EwTr/SGIp/xwcHP8cHBz/HBwc/xwcHP8cHBz/HB0c/0xoKv+Lyj3/jtA+/47QPv+Ixjr/Z5oo/22jK/96tDL/h8Y5/3esN/8lKh//Gxsc/xwcHP8cHBz/HBwc/xwbHP8eIB3/W38v/47PPv+P0D7/gr46/0JdIv8+VCL/RF4l/0tnKP8/Uyb/Hh8d/xwcHP8cHBz/HBwc/xwcHP8cHBz/Gxsc/yMoHv9pljP/kNM//362Of8nLSD/Ghkc/xsaHP8aGRz/Gxoc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8bGhz/KzQh/3erN/+AuTr/KC8g/xsbHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xsaHP83RiT/Z5Ey/yUqH/8bGxz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/yIlHv8dHRz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHOocHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cGxz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHOocHBxyHBwc6xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHOscHBxyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==`;var tally_default=`data:image/svg+xml,%3csvg%20width='128'%20height='124'%20viewBox='0%200%20128%20124'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M79.9335%2017.1445C79.9335%2024.2262%2077.3191%2033.969%2073.4647%2047.0615L70.7069%2057.1173L79.4337%2051.4172C96.022%2039.7688%20106.04%2035.397%20112.67%2035.397C120.212%2035.397%20128%2040.7864%20128%2051.5052C128%2065.1402%20113.443%2069.0136%2085.3379%2069.4912L74.8298%2069.9849L83.1169%2076.5821C102.791%2091.747%20109.612%2099.1764%20109.612%20108.59C109.612%20115.999%20102.727%20123.715%2094.1897%20123.715C81.3632%20123.715%2075.5655%20110.387%2067.7502%2087.7575L63.7662%2077.922L60.0183%2087.7575C51.2591%20113.46%2044.5174%20123.479%2033.343%20123.479C24.334%20123.479%2017.9208%20115.289%2017.9208%20108.354C17.9208%2097.9942%2027.3369%2089.3825%2044.6517%2076.5821L52.9388%2069.9849L42.6666%2069.4912C12.8171%2069.2501%200%2064.957%200%2051.2688C0%2040.55%208.02804%2035.1605%2015.4268%2035.1605C24.3617%2035.1605%2034.1064%2041.1875%2048.5708%2051.4172L57.2976%2057.1173L54.5398%2047.0615C50.3616%2033.2597%2048.3996%2023.1344%2048.3996%2017.1445C48.3996%207.76783%2053.6838%200%2064.0023%200C74.5567%201.03096e-07%2079.9335%207.76783%2079.9335%2017.1445Z'%20fill='black'/%3e%3c/svg%3e`;var telegram_default=`data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20width='16px'%20height='16px'%20viewBox='0%200%2016%2016'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%3e%3cdefs%3e%3clinearGradient%20x1='50%25'%20y1='0%25'%20x2='50%25'%20y2='100%25'%20id='linearGradient-1'%3e%3cstop%20stop-color='%2338AEEB'%20offset='0%25'%3e%3c/stop%3e%3cstop%20stop-color='%23279AD1'%20offset='100%25'%3e%3c/stop%3e%3c/linearGradient%3e%3c/defs%3e%3cg%20id='Artboard'%20stroke='none'%20stroke-width='1'%20fill='none'%20fill-rule='evenodd'%3e%3ccircle%20id='Oval'%20fill='url(%23linearGradient-1)'%20cx='8'%20cy='8'%20r='8'%3e%3c/circle%3e%3cpath%20d='M3.17026167,7.83635602%20C5.78750201,6.74265999%207.53273882,6.02162863%208.40597211,5.67326193%20C10.8992306,4.67860423%2011.2454541,4.53439191%2011.5831299,4.52864956%20C11.6573986,4.52743168%2011.8385417,4.55776042%2011.9798438,4.67645833%20C12.1211458,4.79515625%2012.1635786,4.87206678%2012.1755371,4.93908691%20C12.1874957,5.00610705%2012.1862759,5.21456762%2012.1744385,5.3338623%20C12.0393279,6.69547283%2011.5259342,9.83829771%2011.2285121,11.3633248%20C11.1026617,12.008621%2010.8548582,12.2249854%2010.6149558,12.2461596%20C10.0935924,12.2921758%209.69769267,11.9156852%209.19272668,11.5981993%20C8.40255458,11.1013965%208.13911734,10.9180161%207.3721185,10.4332283%20C6.48571864,9.87297217%206.85080034,9.6784879%207.35595703,9.17524981%20C7.48815894,9.04355001%209.67825076,7.04590073%209.71077046,6.86250183%20C9.7391276,6.70257812%209.7494847,6.68189389%209.67664063,6.60973958%20C9.60379655,6.53758527%209.51674192,6.54658941%209.46083149,6.55876051%20C9.38158015,6.57601267%208.17521836,7.33962686%205.84174612,8.84960308%20C5.48344358,9.08558775%205.15890428,9.20056741%204.86812819,9.19454205%20C4.54757089,9.18789957%203.93094724,9.02070014%203.47255094,8.87778221%20C2.91030922,8.70248755%202.46345069,8.609808%202.50236203,8.31210343%20C2.52262946,8.15704047%202.74526267,7.998458%203.17026167,7.83635602%20Z'%20id='Path-3'%20fill='%23FFFFFF'%3e%3c/path%3e%3c/g%3e%3c/svg%3e`;var tiktok_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAC4jAAAuIwF4pT92AAAC/ElEQVR42u3XWUhUcRTH8TtzZ5xRJ1PH0Wm1KHOYLNuhxSiEFiorWiiKigkLood6MCyShHYMWoweoh7aC2kTo9JcSK1UCk2iHhRMxtw1SZt07r3fRNQc6Elnxhd/cN7uhc//4Zz/+QvdUbqL4aoRwAhgSABx1CjM+w4w5WgSUxOPEzJzFmqvAkLDWJ6Zy9sOB2VdTvKv3iJGF+xdwKrXObTKMgBU1XJ+dqz3Ac2STF8q014QZTQPHwAFXj15xpTZcxC0Wm8CXFNqr+Hg/UdY1m3AR1B5B6A4OkFR6IsEVN55js0wcegAlU6Pz9QI/BbH4DtvAYJGRG0KdQE43xTx/fIt2hua6M+jTJIDI4cAUKsxLFnK5MvXWJ1fxLGKKlILiomfFI2fyewCkB9nc9E0gx3zY3ifdIG2hy9xJqaSHDRIgEqjwbjbxpLCEm40NFPX5exvt8LodQSHjmXlAIDyNJezwdaef42CyDK9EVtAOAv1QYMDjF4Tx9LiUrJ//sIllXYKZq79L+Cc0eqeOaAJCSHywWPuNrYAgCQj5ZbgSLxC7fYjPJmwiMAwDwIMy2PZWv6NFqcEgPN5HlXW9ST4TyJaNDBOrUPb0wUeAhht8aTU1APAny7adx3nkH84rm0Y6jmAaf8B7je1AkD7b6rjDhIl+rsCzGNYlZX3D5CWxblgNwECN27mbn1T/3itOXYJq8rX5Ru/hYvZ9KmcNkkCQEp9SHJAhHsA2mkWTn7+Ql+kqhoOr9+KoNcjaH3QWayE37hNir0OBaCziw7bCfb4jnMPQBBFYs+cp2XAaG1obSUpPYNlN2+zIreQU9U/aOydDXJBKRXWOKxag/uuY/2EiVzPyWNgFKBRVqh3SkgAgGyvx7ElgbOBFtSCyr37wPhICxnpGdDbjq4aBfnjVxzbEkkzzcUs6jyzE5pHB5GyMx77vXSkd2Xwobyn5RwJF6mYtann5GGizrNLqbq7onwCiDdFcHpsNKeMVvb6jWe6xoBaUI28C0YAQwMMZ/0FmrrK3uRP9CwAAAAASUVORK5CYII=`;var twilio_default=`data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%2020010904//EN'%20'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd'%3e%3csvg%20version='1.0'%20xmlns='http://www.w3.org/2000/svg'%20width='520.000000pt'%20height='520.000000pt'%20viewBox='0%200%20520.000000%20520.000000'%20preserveAspectRatio='xMidYMid%20meet'%3e%3cmetadata%3e%20Created%20by%20potrace%201.14,%20written%20by%20Peter%20Selinger%202001-2017%20%3c/metadata%3e%3cg%20transform='translate(0.000000,520.000000)%20scale(0.100000,-0.100000)'%20fill='%23000000'%20stroke='none'%3e%3cpath%20d='M2105%205194%20c-382%20-27%20-618%20-74%20-856%20-169%20-652%20-262%20-1072%20-797%20-1198%20-1525%20-41%20-236%20-46%20-335%20-46%20-900%200%20-580%206%20-682%2050%20-925%20162%20-881%20760%20-1471%201645%20-1624%20236%20-41%20335%20-46%20900%20-46%20580%200%20682%206%20925%2050%20881%20162%201471%20760%201624%201645%2041%20236%2046%20335%2046%20900%200%20580%20-6%20682%20-50%20925%20-160%20869%20-748%201458%20-1615%201620%20-220%2041%20-332%2047%20-860%2050%20-283%201%20-537%201%20-565%20-1z%20m799%20-924%20c344%20-68%20625%20-218%20871%20-465%20152%20-151%20240%20-272%20324%20-440%2075%20-149%20114%20-262%20148%20-424%2023%20-111%2027%20-149%2027%20-326%201%20-170%20-3%20-217%20-22%20-313%20-71%20-353%20-219%20-630%20-467%20-877%20-151%20-152%20-272%20-240%20-440%20-324%20-149%20-75%20-262%20-114%20-424%20-148%20-111%20-23%20-149%20-27%20-326%20-27%20-170%20-1%20-217%203%20-313%2022%20-353%2071%20-630%20219%20-877%20467%20-152%20151%20-240%20272%20-324%20440%20-74%20149%20-114%20261%20-148%20424%20-24%20112%20-27%20148%20-27%20326%20-1%20170%203%20217%2022%20313%2047%20235%20133%20442%20263%20638%2091%20135%20292%20340%20426%20434%20232%20161%20487%20261%20768%20299%20117%2016%20394%206%20519%20-19z'/%3e%3cpath%20d='M2376%203834%20c-491%20-92%20-871%20-448%20-992%20-929%20-35%20-136%20-43%20-358%20-20%20-495%2087%20-498%20444%20-884%20931%20-1006%20136%20-35%20358%20-43%20495%20-20%20498%2087%20884%20444%201006%20931%2035%20136%2043%20358%2020%20495%20-87%20498%20-443%20883%20-931%201007%20-128%2032%20-384%2041%20-509%2017z%20m-132%20-459%20c98%20-16%20194%20-93%20243%20-193%2025%20-50%2028%20-68%2028%20-152%200%20-76%20-4%20-104%20-22%20-142%20-30%20-66%20-105%20-143%20-172%20-175%20-49%20-25%20-68%20-28%20-151%20-28%20-82%200%20-103%204%20-151%2026%20-247%20116%20-273%20464%20-46%20614%2055%2036%20160%2067%20207%2060%2014%20-2%2043%20-7%2064%20-10z%20m881%20-11%20c157%20-47%20261%20-219%20234%20-386%20-19%20-118%20-89%20-212%20-197%20-265%20-50%20-25%20-68%20-28%20-152%20-28%20-83%200%20-102%203%20-151%2028%20-67%2032%20-142%20109%20-172%20175%20-18%2038%20-22%2066%20-22%20142%200%2082%204%20103%2026%20151%2049%20103%20149%20179%20261%20198%2060%2010%20101%206%20173%20-15z%20m-803%20-857%20c66%20-32%20141%20-109%20171%20-175%2018%20-38%2022%20-66%2022%20-142%200%20-82%20-4%20-103%20-26%20-151%20-116%20-247%20-464%20-273%20-614%20-46%20-83%20125%20-76%20292%2018%20419%2028%2038%20114%2096%20168%20114%2071%2023%20194%2014%20261%20-19z%20m839%201%20c249%20-114%20272%20-469%2040%20-617%20-176%20-113%20-414%20-44%20-508%20147%20-25%2050%20-28%2068%20-28%20152%200%20112%2018%20161%2085%20234%2081%2087%20154%20117%20275%20113%2060%20-2%2094%20-10%20136%20-29z'/%3e%3c/g%3e%3c/svg%3e`;var twitch_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAETSURBVHgB7ZU7DoJAEIb/JV7MBq/hCVROIJ7AqI2t0d5WsTF2dhzBI1hbsLIYwyPADgzrFvI1PJbk+5lZBoEaNq6cR4APA0wDIdTRgQV5lgGI8skZnbAe5a8ditwkjk15LoANeS5AW7nqabGvdfcrA9iiD9AHsB5gACZVI5o6uv+rBbct7AW4H4Dw+DmPp+7ipwGU/L5P5V4g/O8aexM2kkusvEsqVxitQOHNd7F8VnyGXIHiny37mWVFZSTyQIzL1tgV0MljQrwwq1pkBaDIoxeG3lU80XUAgvyhk/MC6OSOXs4KoJWfxIPysACRlSslV1YGpwIhV65oOwlDygYzEqBuqLShUQuSWd6hvBFLV/owwBuAI3t8NBey8QAAAABJRU5ErkJggg==`;var wave_default=`/assets/wave-C0GgAw0V.png`;var wix_default=`data:image/png;base64,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`;var wiz_default=`data:image/png;base64,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`;var woocommerce_default=`data:image/png;base64,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`;var wordpress_com_default=`/assets/wordpress-com-DACYVXJ9.png`;var wordpress_self_hosted_default=`/assets/wordpress-self-hosted-DrkgDH4I.png`;var workday_default=`/assets/workday-Ds_SFYKi.ico`;var x_twitter_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAB7ElEQVR4Ae1XMZLCMAwUdw0ldJQ8ATpKnkBJByUd8ALyA/gBdJTQUtHS8QT4AaRM5ctmThmfogQ75CYNmhGTbGJr45Vk0yAiQzXaF9VsHwIZAofDgYwxqo9GI/K16/X6cqyxvdVqmdvtZh6PhwmCIHXcw7vdrpFj8ny9XhsYxhe8lwWHw2EycLFYpNh0Ok2w8/nsFHy1WrkE1wnAN5tNMkGv10ux3W6XIab5fD5P3ovldCGrP2Ap4LiW8uRJAcIwe1wpArYU0FJimhQgxaQ9cqX4BZYCgSVmS8HBfRP1JQEsY1xKGSmAcTC+l0QrIWDraicVMBBA4O1265ScpQnAMbkMwphjub1HAI7EkxoDK7n0/gQQGATsCmDMo+z++Hf8E5CjPZ9PiqKIZrMZhWFIl8slxcbjMTWbTTqdTuRrXoz5i2WXRIL+WxWw2+Uml13rnJUT4K9E9nMFaF3SxiojoO1u2rJzl4z3/+oIcHBMLiUp2rDe3ozg+BIYtNee87KjGzLGndPx7JD/0K7xog2Gl30ymaSY1jm9CPhsrXnnBK1zOhHgCWWtF7l2TtA6p3S1E+73exoMBrRcLul4PJKL3e93arfbSUeMA1O/36eYPHU6nWQu7pyaqRlfZnezV05anhSN34va7PPXrHYCP+VaTG3LBV1KAAAAAElFTkSuQmCC`;var xero_default=`data:image/svg+xml,%3csvg%20width='144'%20height='144'%20viewBox='0%200%20144%20144'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3crect%20width='144'%20height='144'%20rx='20'%20fill='%2313B5EA'/%3e%3cg%20clip-path='url(%23clip0_17_14)'%3e%3cpath%20d='M95.4078%2056.7108C92.5715%2056.7108%2089.5481%2058.9181%2088.0019%2063.7231V59.5987C88.0019%2058.0063%2086.7094%2056.7108%2085.1207%2056.7108C83.532%2056.7108%2082.2395%2058.0063%2082.2395%2059.5987L82.2395%2084.4689C82.2395%2086.0613%2083.532%2087.3567%2085.1207%2087.3567C86.7094%2087.3567%2088.0018%2086.0613%2088.0018%2084.4689V72.7875C88.0019%2067.1691%2091.1671%2063.8367%2096.0274%2062.7445C97.5808%2062.3954%2098.5457%2061.2203%2098.5457%2059.6775C98.5457%2057.9307%2097.2554%2056.7108%2095.4078%2056.7108Z'%20fill='white'/%3e%3cpath%20d='M113.715%2056.7108C105.285%2056.7108%2098.4275%2063.5847%2098.4275%2072.0338C98.4275%2080.4828%20105.285%2087.3568%20113.715%2087.3568C122.144%2087.3568%20129.002%2080.4829%20129.002%2072.0338C129.002%2063.5846%20122.144%2056.7108%20113.715%2056.7108ZM113.715%2081.5832C108.461%2081.5832%20104.188%2077.2993%20104.188%2072.0338C104.188%2066.7683%20108.461%2062.4845%20113.715%2062.4845C118.968%2062.4845%20123.242%2066.7682%20123.242%2072.0338C123.242%2077.2993%20118.968%2081.5832%20113.715%2081.5832Z'%20fill='white'/%3e%3cpath%20d='M113.715%2068.2172C111.615%2068.2172%20109.907%2069.9292%20109.907%2072.0338C109.907%2074.1383%20111.615%2075.8503%20113.715%2075.8503C115.814%2075.8503%20117.522%2074.1383%20117.522%2072.0338C117.522%2069.9292%20115.814%2068.2172%20113.715%2068.2172Z'%20fill='white'/%3e%3cpath%20d='M62.5329%2056.7108C54.1%2056.7108%2047.2395%2063.5847%2047.2395%2072.0338C47.2395%2080.5593%2053.8973%2087.3567%2063.1062%2087.3567C67.601%2087.3567%2071.3115%2085.9869%2074.4498%2083.169C74.7887%2082.829%2075.3665%2082.0927%2075.3665%2081.0404C75.3665%2079.4477%2074.1842%2078.2466%2072.6162%2078.2466C71.8075%2078.2466%2071.3509%2078.4792%2070.8356%2078.8809C68.5694%2080.7517%2066.0794%2081.6623%2063.2265%2081.6623C58.3607%2081.6623%2054.385%2078.7931%2053.2963%2074.4681L74.4249%2074.4681C76.3729%2074.4606%2077.7854%2072.8862%2077.7854%2070.7189C77.7854%2065.4781%2072.6592%2056.7108%2062.5329%2056.7108ZM53.2879%2069.5911C54.3109%2065.3616%2057.9613%2062.3439%2062.5329%2062.3439C67.0384%2062.3439%2070.7216%2065.0415%2071.769%2069.5911H53.2879Z'%20fill='white'/%3e%3cpath%20d='M46.4185%2059.5632C46.4185%2057.9848%2045.1421%2056.7108%2043.573%2056.7108C42.8129%2056.7108%2042.0983%2057.0075%2041.5608%2057.5463L31.1316%2067.9996L20.7025%2057.5463C20.165%2057.0076%2019.4504%2056.7108%2018.6903%2056.7108C17.1211%2056.7108%2015.8447%2057.9848%2015.8447%2059.5632C15.8447%2060.3251%2016.1406%2061.0414%2016.6781%2061.5801L27.1072%2072.0334L16.6781%2082.4867C16.1407%2083.0254%2015.8447%2083.7417%2015.8447%2084.5036C15.8447%2086.0814%2017.1177%2087.356%2018.6903%2087.356C19.4504%2087.356%2020.1651%2087.0593%2020.7025%2086.5205L31.1316%2076.0672L41.5607%2086.5205C42.0982%2087.0593%2042.8128%2087.356%2043.5729%2087.356C45.1455%2087.356%2046.4185%2086.0814%2046.4185%2084.5036C46.4185%2083.7417%2046.1225%2083.0254%2045.5851%2082.4867L35.156%2072.0334L45.5851%2061.5801C46.1226%2061.0414%2046.4185%2060.3252%2046.4185%2059.5632Z'%20fill='white'/%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_17_14'%3e%3crect%20width='113.157'%20height='30.6459'%20fill='white'%20transform='translate(15.8447%2056.7108)'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e`;var zoho_books_default=`/assets/zoho-books-D1l1EKOy.png`;var zoho_crm_default=`/assets/zoho-crm-BRYEeDgr.ico`;var _hoisted_1$1={class:`integration-service-logo mr-3`,"aria-hidden":`true`};var _hoisted_2$1=[`src`];var logos=Object.fromEntries(Object.entries(Object.assign({"../../assets/integrations/airtable.png":airtable_default,"../../assets/integrations/algolia.svg":algolia_default,"../../assets/integrations/amazon-redshift.svg":amazon_redshift_default,"../../assets/integrations/amplitude.png":amplitude_default,"../../assets/integrations/apify.svg":apify_default,"../../assets/integrations/apollo-io.svg":apollo_io_default,"../../assets/integrations/asana.ico":asana_default,"../../assets/integrations/ashby.png":ashby_default,"../../assets/integrations/atlassian.ico":atlassian_default,"../../assets/integrations/attention.png":attention_default,"../../assets/integrations/aws-athena.svg":aws_athena_default,"../../assets/integrations/aws-s3.svg":aws_s3_default,"../../assets/integrations/bigquery.svg":bigquery_default,"../../assets/integrations/brevo.svg":brevo_default,"../../assets/integrations/calendly.svg":calendly_default,"../../assets/integrations/canva.png":canva_default,"../../assets/integrations/chargebee.png":chargebee_default,"../../assets/integrations/clay.png":clay_default,"../../assets/integrations/clickhouse.svg":clickhouse_default,"../../assets/integrations/confidence-exp.svg":confidence_exp_default,"../../assets/integrations/confidence-flags.svg":confidence_flags_default,"../../assets/integrations/contentful.svg":contentful_default,"../../assets/integrations/databricks.png":databricks_default,"../../assets/integrations/dbt-semantic-layer.png":dbt_semantic_layer_default,"../../assets/integrations/elevenlabs.svg":elevenlabs_default,"../../assets/integrations/figma.svg":figma_default,"../../assets/integrations/firebase-cloud-messaging.png":firebase_cloud_messaging_default,"../../assets/integrations/firecrawl.ico":firecrawl_default,"../../assets/integrations/fireflies.png":fireflies_default,"../../assets/integrations/fireworks-ai.svg":fireworks_ai_default,"../../assets/integrations/gatewayapi.png":gatewayapi_default,"../../assets/integrations/gemini-enterprise.png":gemini_enterprise_default,"../../assets/integrations/github-api.svg":github_api_default,"../../assets/integrations/gitlab-api.png":gitlab_api_default,"../../assets/integrations/gmail.svg":gmail_default,"../../assets/integrations/gong.svg":gong_default,"../../assets/integrations/google-ads.svg":google_ads_default,"../../assets/integrations/google-analytics.svg":google_analytics_default,"../../assets/integrations/google-calendar.svg":google_calendar_default,"../../assets/integrations/google-docs.svg":google_docs_default,"../../assets/integrations/google-drive.svg":google_drive_default,"../../assets/integrations/google-maps-platform.png":google_maps_platform_default,"../../assets/integrations/google-search-console.png":google_search_console_default,"../../assets/integrations/google-sheets.svg":google_sheets_default,"../../assets/integrations/google-slides.svg":google_slides_default,"../../assets/integrations/granola.svg":granola_default,"../../assets/integrations/hex.svg":hex_default,"../../assets/integrations/heygen.ico":heygen_default,"../../assets/integrations/hubspot.png":hubspot_default,"../../assets/integrations/incident-io.png":incident_io_default,"../../assets/integrations/inngest.svg":inngest_default,"../../assets/integrations/klipy.ico":klipy_default,"../../assets/integrations/lexware.svg":lexware_default,"../../assets/integrations/lightspeed.svg":lightspeed_default,"../../assets/integrations/linear.svg":linear_default,"../../assets/integrations/linkedin.png":linkedin_default,"../../assets/integrations/logo-dev.webp":logo_dev_default,"../../assets/integrations/mailgun.ico":mailgun_default,"../../assets/integrations/mapbox.png":mapbox_default,"../../assets/integrations/microsoft-excel.svg":microsoft_excel_default,"../../assets/integrations/microsoft-fabric.svg":microsoft_fabric_default,"../../assets/integrations/microsoft-onedrive.svg":microsoft_onedrive_default,"../../assets/integrations/microsoft-onenote.svg":microsoft_onenote_default,"../../assets/integrations/microsoft-outlook.svg":microsoft_outlook_default,"../../assets/integrations/microsoft-powerpoint.svg":microsoft_powerpoint_default,"../../assets/integrations/microsoft-sharepoint.svg":microsoft_sharepoint_default,"../../assets/integrations/microsoft-teams.svg":microsoft_teams_default,"../../assets/integrations/microsoft-word.svg":microsoft_word_default,"../../assets/integrations/miro.png":miro_default,"../../assets/integrations/n8n.ico":n8n_default,"../../assets/integrations/notion.png":notion_default,"../../assets/integrations/oura.png":oura_default,"../../assets/integrations/paddle.ico":paddle_default,"../../assets/integrations/perplexity.ico":perplexity_default,"../../assets/integrations/pipedrive.png":pipedrive_default,"../../assets/integrations/polar.png":polar_default,"../../assets/integrations/posthog.svg":posthog_default,"../../assets/integrations/prestashop.ico":prestashop_default,"../../assets/integrations/replicate.png":replicate_default,"../../assets/integrations/resend.png":resend_default,"../../assets/integrations/salesforce.ico":salesforce_default,"../../assets/integrations/sanity.svg":sanity_default,"../../assets/integrations/semrush.svg":semrush_default,"../../assets/integrations/sentry.ico":sentry_default,"../../assets/integrations/sevdesk.png":sevdesk_default,"../../assets/integrations/shopify.png":shopify_default,"../../assets/integrations/slack.png":slack_default,"../../assets/integrations/snowflake.svg":snowflake_default,"../../assets/integrations/storyblok.svg":storyblok_default,"../../assets/integrations/stripe.svg":stripe_default,"../../assets/integrations/supabase.ico":supabase_default,"../../assets/integrations/tally.svg":tally_default,"../../assets/integrations/telegram.svg":telegram_default,"../../assets/integrations/tiktok.png":tiktok_default,"../../assets/integrations/twilio.svg":twilio_default,"../../assets/integrations/twitch.png":twitch_default,"../../assets/integrations/wave.png":wave_default,"../../assets/integrations/wix.png":wix_default,"../../assets/integrations/wiz.png":wiz_default,"../../assets/integrations/woocommerce.png":woocommerce_default,"../../assets/integrations/wordpress-com.png":wordpress_com_default,"../../assets/integrations/wordpress-self-hosted.png":wordpress_self_hosted_default,"../../assets/integrations/workday.ico":workday_default,"../../assets/integrations/x-twitter.png":x_twitter_default,"../../assets/integrations/xero.svg":xero_default,"../../assets/integrations/zoho-books.png":zoho_books_default,"../../assets/integrations/zoho-crm.ico":zoho_crm_default})).map(([path,url])=>[path.split(`/`).at(-1).replace(/\.[^.]+$/u,``),url]));var _sfc_main$2={__name:`IntegrationServiceLogo`,props:{provider:{type:String,required:true}},setup(__props){const props=__props;const logo=computed(()=>logos[props.provider]);return(_ctx,_cache)=>{return openBlock(),createElementBlock(`span`,_hoisted_1$1,[logo.value?(openBlock(),createElementBlock(`img`,{key:0,src:logo.value,alt:``,width:`28`,height:`28`,loading:`lazy`},null,8,_hoisted_2$1)):(openBlock(),createBlock(VIcon,{key:1,icon:__props.provider===`ai`?unref(mdiCreation):unref(mdiConnection),size:`28`,color:`grey-darken-3`},null,8,[`icon`]))])}}};var IntegrationServiceLogo_default=_plugin_vue_export_helper_default(_sfc_main$2,[[`__scopeId`,`data-v-f4539ec4`]]);var integrationCategories=[{id:`ai`,title:`AI & generation`,providers:[`ai`,`gemini-enterprise`,`elevenlabs`,`replicate`,`perplexity`,`fireworks-ai`,`heygen`]},{id:`productivity`,title:`Productivity & collaboration`,providers:[`google-calendar`,`google-drive`,`google-docs`,`google-sheets`,`google-slides`,`notion`,`calendly`,`microsoft-onedrive`,`microsoft-excel`,`microsoft-onenote`,`microsoft-sharepoint`,`microsoft-word`,`microsoft-powerpoint`,`asana`,`linear`,`atlassian`,`miro`,`fireflies`,`granola`]},{id:`communication`,title:`Email & messaging`,providers:[`gmail`,`microsoft-outlook`,`microsoft-teams`,`slack`,`telegram`,`twilio`,`gatewayapi`,`resend`,`mailgun`,`firebase-cloud-messaging`]},{id:`sales`,title:`Sales & customer relationships`,providers:[`salesforce`,`hubspot`,`pipedrive`,`apollo-io`,`attention`,`clay`,`gong`,`zoho-crm`,`brevo`]},{id:`commerce`,title:`Commerce, payments & accounting`,providers:[`stripe`,`paddle`,`polar`,`chargebee`,`shopify`,`woocommerce`,`prestashop`,`lightspeed`,`xero`,`wave`,`zoho-books`,`lexware`,`sevdesk`]},{id:`data`,title:`Databases & storage`,providers:[`bigquery`,`snowflake`,`airtable`,`supabase`,`clickhouse`,`aws-s3`,`aws-athena`,`amazon-redshift`,`databricks`,`microsoft-fabric`,`dbt-semantic-layer`,`hex`]},{id:`marketing`,title:`Marketing, analytics & social`,providers:[`google-ads`,`google-search-console`,`google-analytics`,`posthog`,`amplitude`,`semrush`,`tiktok`,`x-twitter`,`linkedin`,`twitch`,`confidence-flags`,`confidence-exp`]},{id:`content`,title:`Content, design & forms`,providers:[`wix`,`contentful`,`storyblok`,`sanity`,`wordpress-com`,`wordpress-self-hosted`,`canva`,`figma`,`klipy`,`tally`]},{id:`development`,title:`Developer tools & automation`,providers:[`github-api`,`gitlab-api`,`wiz`,`sentry`,`incident-io`,`n8n`,`inngest`,`firecrawl`,`apify`,`algolia`,`mapbox`,`google-maps-platform`,`logo-dev`]},{id:`people`,title:`People & wellbeing`,providers:[`workday`,`ashby`,`oura`]}];function groupIntegrationProviders(providers,search=``){const query=String(search||``).trim().toLowerCase();const groups=integrationCategories.map(category=>({id:category.id,title:category.title,providers:providers.filter(provider=>category.providers.includes(provider.id))}));const assigned=new Set(integrationCategories.flatMap(category=>category.providers));groups.push({id:`other`,title:`Other services`,providers:providers.filter(provider=>!assigned.has(provider.id))});return groups.map(group=>({...group,providers:group.providers.filter(provider=>`${provider.name} ${provider.description} ${group.title}`.toLowerCase().includes(query)).sort((left,right)=>left.name.localeCompare(right.name))})).filter(group=>group.providers.length)}var _hoisted_1={class:`integrations-panel`};var _hoisted_2={class:`integrations-panel__header`};var _hoisted_3={key:0};var _hoisted_4={key:2};var _hoisted_5={class:`integrations-panel__layout`};var _hoisted_6={class:`integrations-panel__catalogue`,"aria-label":`Integrations catalogue`};var _hoisted_7={class:`text-title-medium mt-6 mb-2`};var _hoisted_8={key:1,role:`status`,class:`text-body-medium`};var _hoisted_9={key:2,class:`text-title-medium mt-6 mb-2`};var _hoisted_10={class:`text-title-small`};var _hoisted_11={key:4,role:`status`,class:`text-body-medium`};var _hoisted_12={class:`integrations-panel__header mb-4`};var _hoisted_13={class:`d-flex align-center`};var _hoisted_14={"aria-label":`Application connection`,class:`mb-6`};var _hoisted_15={class:`text-title-medium`};var _hoisted_16={role:`status`};var _hoisted_17={key:1};var _hoisted_18={key:0};var _hoisted_19={role:`status`};var _hoisted_20={key:0};var _hoisted_21={key:1};var _hoisted_22={key:2};var _hoisted_23={key:3};var _hoisted_24={key:4};var _hoisted_25={key:5};var _hoisted_26=[`datetime`];var _hoisted_27={key:6};var _hoisted_28={class:`integrations-panel__actions`};var _hoisted_29={key:0,class:`w-100`};var _hoisted_30={key:0};var _hoisted_31={key:1};var _hoisted_32={key:4,"aria-label":`n8n OAuth discovery`,class:`mt-4`};var _hoisted_33={key:0,role:`alert`};var _hoisted_34={key:0,role:`alert`};var _hoisted_35={key:2,role:`alert`};var _hoisted_36=[`aria-label`];var _hoisted_37={key:0,role:`alert`};var _hoisted_38={key:6};var _hoisted_39=[`aria-label`];var _hoisted_40={class:`text-title-medium`};var _hoisted_41={key:0};var _hoisted_42={key:1};var _hoisted_43={class:`integrations-panel__credential-actions`};var _hoisted_44={key:7,"aria-label":`Callback setup`,class:`mt-4`};var _hoisted_45={key:0};var _hoisted_46={key:1};var _hoisted_47={key:2,role:`status`};var _hoisted_48={key:0};var _hoisted_49={class:`integrations-panel__instructions`};var _hoisted_50={key:1,"aria-label":`Client metadata document`,class:`mt-4`};var _hoisted_51={key:0,role:`status`};var _hoisted_52={key:1,role:`status`};var _hoisted_53={key:2,"aria-label":`OAuth client registration`,class:`mt-4`};var _hoisted_54={key:0};var _hoisted_55={key:1,role:`status`};var _hoisted_56={key:3,class:`integrations-panel__footer`};var _hoisted_57={class:`integrations-panel__actions`};var _sfc_main$1={__name:`IntegrationsPanel`,props:{dashboardContext:{type:Object,required:true}},setup(__props){const props=__props;const route=useRoute();const router=useRouter();const selectedId=ref(``);const environment=ref(`development`);const production=computed(()=>environment.value===`production`);const integrationContext=computed(()=>({...props.dashboardContext,integrationEnvironment:environment.value,integrationSetupRequest:{sessionId:route.query.integrationSession,integrationId:route.query.integration,turnId:route.query.integrationTurn,requestId:route.query.integrationRequest}}));const{adsResult,adsError,runAdsOperation,paymentResult,paymentError,paymentOperation,runPaymentOperation,registrationCommand,registrationError,registrationNeedsReview,registerOAuthClient,discoveryCommand,discoveryError,discoverN8n,releaseId,connection,connectionError,verificationInput,setupCommand,runSetup,refreshConnection,configuration,dirty,resource,command,fieldErrors,error,changedElsewhere,save,discard}=useVibe64Integrations(integrationContext,selectedId);const projectSlug=useVibe64ProjectSlug();function openPaymentEnv({key,value,secret}){return router.push({path:projectAppPath(projectSlug.value,production.value?`/dashboard/deploy`:`/dashboard/env`),query:{prefillKey:key,...secret?{prefillSecret:`true`}:{},...value===void 0?{}:{prefillValue:value}}})}watch([projectSlug,()=>props.dashboardContext.productionIntegrationsApiPath],([slug,apiPath])=>{environment.value=apiPath&&readLocalStorageJson(`vibe64:integrations:environment:${slug}`,`development`)===`production`?`production`:`development`},{immediate:true,flush:`sync`});watch(environment,value=>{writeLocalStorageJson(`vibe64:integrations:environment:${projectSlug.value}`,value)});const search=ref(``);const navigationKey=computed(()=>`vibe64:integrations:${encodeURIComponent(projectSlug.value)}:${production.value?`published`:encodeURIComponent(props.dashboardContext.sessionId||``)}:${environment.value}`);watch(navigationKey,key=>{const saved=readLocalStorageJson(key,{});selectedId.value=typeof saved?.selectedId===`string`?saved.selectedId:``;search.value=typeof saved?.search===`string`?saved.search:``},{immediate:true,flush:`sync`});watch([selectedId,search],()=>{if(production.value||props.dashboardContext.sessionId)writeLocalStorageJson(navigationKey.value,{selectedId:selectedId.value,search:search.value})});const requestedIntegration=computed(()=>{const id=typeof route.query.integration===`string`&&route.query.integration.length<=200?route.query.integration:``;const target=route.query.integrationEnvironment===`production`?`production`:`development`;if(target===`production`&&!props.dashboardContext.productionIntegrationsApiPath)return null;if(target===`development`&&route.query.integrationSession!==props.dashboardContext.sessionId)return null;return id||route.query.integrationEnvironment?{id,environment:target}:null});const integrationDetail=ref(null);const pendingReveal=ref(null);function selectIntegration(id,target=`development`){if(target===`production`&&!props.dashboardContext.productionIntegrationsApiPath)return;const alreadySelected=environment.value===target&&selectedId.value===id;environment.value=target;if(!id)return;selectedId.value=id;search.value=``;if(alreadySelected)refreshConnection();pendingReveal.value={id,key:navigationKey.value}}watch([()=>requestedIntegration.value?.id,()=>requestedIntegration.value?.environment,projectSlug,()=>requestedIntegration.value?.environment===`development`?props.dashboardContext.sessionId:``],()=>{const selection=requestedIntegration.value;if(selection)selectIntegration(selection.id,selection.environment)},{immediate:true,flush:`sync`});const discardOpen=ref(false);const removeOpen=ref(false);const disconnectOpen=ref(false);const providers=[googleCalendarDefinition,...connectorDefinitions];const providerGroups=computed(()=>groupIntegrationProviders(providers,search.value));const expandedCategories=ref([]);const visibleCategories=computed({get:()=>String(search.value||``).trim()?providerGroups.value.map(group=>group.id):expandedCategories.value,set:value=>{if(!String(search.value||``).trim())expandedCategories.value=value}});const entries=computed(()=>Object.entries(configuration.value?.integrations||{}));const filteredEntries=computed(()=>entries.value.filter(([id,entry])=>`${id} ${entry.displayName||``} ${entry.provider}`.toLowerCase().includes(String(search.value||``).toLowerCase())));const selected=computed(()=>Object.hasOwn(configuration.value?.integrations||{},selectedId.value)?configuration.value.integrations[selectedId.value]:void 0);watchEffect(()=>{const request=pendingReveal.value;if(!request)return;if(request.key!==navigationKey.value||request.id!==selectedId.value){pendingReveal.value=null;return}if(!integrationDetail.value||props.dashboardContext.active===false)return;pendingReveal.value=null;if(selected.value)integrationDetail.value.scrollIntoView({block:`start`,inline:`nearest`,behavior:`instant`})},{flush:`post`});const provider=computed(()=>providers.find(entry=>entry.id===selected.value?.provider));const configurationOnly=computed(()=>provider.value?.configurationOnly||provider.value?.configurationOnlyForSettings?.(selected.value?.settings||{}));const verificationIncomplete=computed(()=>provider.value?.verificationFields?.some(field=>field.required&&!String(verificationInput.value[field.name]||``).trim())===true);const setupPrompt=computed(()=>[`Implement the saved integration ${JSON.stringify(selectedId.value)} (${JSON.stringify(selected.value?.provider)}) from integrations.json.`,`Use this project's selected framework and existing backend composition. Keep credentials, connections, callbacks and refresh owned by this application so it runs independently of Vibe64.`,...provider.value?.setup?[`Selected provider setup instructions:\n\n${(provider.value.setup.stepsForSettings?.(selected.value?.settings||{},selected.value?.authentication.method)||provider.value.setup.stepsByAuthentication?.[selected.value?.authentication.method]||provider.value.setup.steps||[]).join(`
|
|
936
936
|
|
|
937
937
|
`)}`,`Provider setup guide: ${provider.value.setup.urlForSettings?.(selected.value?.settings||{},selected.value?.authentication.method)||provider.value.setup.urlByAuthentication?.[selected.value?.authentication.method]||provider.value.setup.url}`]:[],configurationOnly.value?`Use the saved public settings to implement this integration through the selected framework. Do not create a connection command, OAuth flow or provider verification request. For Analytics, preserve existing tag-manager and consent behavior, avoid duplicate tags, and do not send test tracking events.`:selected.value?.accountMode===`per-user`?`Implement connection settings inside this application's authenticated user account screen: status, connect, reconnect, cancel and disconnect. Derive each connection owner from the authenticated app user, isolate their grants, and bind OAuth callbacks to the initiating user. This configures individual accounts, not a shared administrator connection or a new application login method.`:`Implement the Integration setup command using the documented application-owned contract, with safe status, connect, cancel and disconnect results.`,...[`stripe`,`paddle`].includes(selected.value?.provider)&&configuration.value?.extensions?.payments?[`Selected provider payment setup:\n\n${provider.value.paymentSetup.steps.join(`
|
|
938
938
|
|
|
939
|
-
`)}\n\n${provider.value.paymentSetup.url}`,`Implement the saved extensions.payments contract as well as credential verification. Use the selected framework's existing billing owner; do not add a parallel billing system. Plans and Env references stay in integrations.json; customers, subscriptions, credits and catalogue mappings stay in this application's database.`,`Implement authenticated billing-account reads, checkout and customer portal routes, raw-byte signed provider webhooks, current-state subscription reconciliation, feature enforcement and transactional renewal credits. Derive the billable subject from authenticated app membership. A checkout redirect is not payment proof. Keep sandbox/live accounts, mappings and credentials isolated.`,`Extend the existing Integration setup command with payments-preview, payments-publish, payments-readiness, payments-recover and payments-history using the documented vibe64.integration-setup.command.v1 payment contract. Preserve other operations. Read the public application-integration-setup.md contract: paymentEnvironment and reviewed reviewId inputs; bounded payments results with providerAccountId, changes, drift, removed and pending. Preview must be read-only; publish must revalidate the review and retain partial-write recovery and historical price mappings.`,`For JSKIT, compose payments-core and the optional payments-web component using normal app routes, storage and HTTP hooks. For Laravel, follow application-payments-laravel.md and the same portable configuration/operation semantics using native framework libraries. Do not add PHP to JSKIT or require Node payment execution from Laravel. Neither implementation may call Vibe64 to authorize customer billing.`,selected.value?.provider===`paddle`?`Paddle needs a separate public client-side token and an app-owned Paddle.js checkout page; keep the private API key and signing secret server-side. Domain and merchant approval remain explicit provider steps.`:`Stripe needs the environment's own webhook destination/signing secret and configured customer portal. Handle invoice payment failures and subscription lifecycle updates without granting unpaid renewal credits.`,`Expose the app billing screen with plans, credits, subscription status, customer-scoped subscription/invoice/transaction history and management actions. Authorize history separately, resolve the customer from this app's subject binding and preserve provider status; invoice/transaction totals are not proof of payment. Use controlled fixtures for authorization, webhook signatures, retries, plan/credit behavior and management output; report unimplemented capabilities honestly. Do not
|
|
939
|
+
`)}\n\n${provider.value.paymentSetup.url}`,`Implement the saved extensions.payments contract as well as credential verification. Use the selected framework's existing billing owner; do not add a parallel billing system. Plans and Env references stay in integrations.json; customers, subscriptions, credits and catalogue mappings stay in this application's database.`,`Implement authenticated billing-account reads, checkout and customer portal routes, raw-byte signed provider webhooks, current-state subscription reconciliation, feature enforcement and transactional renewal credits. Derive the billable subject from authenticated app membership. A checkout redirect is not payment proof. Keep sandbox/live accounts, mappings and credentials isolated.`,`Extend the existing Integration setup command with payments-preview, payments-publish, payments-readiness, payments-recover and payments-history using the documented vibe64.integration-setup.command.v1 payment contract. Preserve other operations. Read the public application-integration-setup.md contract: paymentEnvironment and reviewed reviewId inputs; bounded payments results with providerAccountId, changes, drift, removed and pending. Preview must be read-only; publish must revalidate the review and retain partial-write recovery and historical price mappings.`,`For JSKIT, compose payments-core and the optional payments-web component using normal app routes, storage and HTTP hooks. For Laravel, follow application-payments-laravel.md and the same portable configuration/operation semantics using native framework libraries. Do not add PHP to JSKIT or require Node payment execution from Laravel. Neither implementation may call Vibe64 to authorize customer billing.`,selected.value?.provider===`paddle`?`Paddle needs a separate public client-side token and an app-owned Paddle.js checkout page; keep the private API key and signing secret server-side. Domain and merchant approval remain explicit provider steps.`:`Stripe needs the environment's own webhook destination/signing secret and configured customer portal. Handle invoice payment failures and subscription lifecycle updates without granting unpaid renewal credits.`,`Expose the app billing screen with plans, credits, subscription status, customer-scoped subscription/invoice/transaction history and management actions. Authorize history separately, resolve the customer from this app's subject binding and preserve provider status; invoice/transaction totals are not proof of payment. Use controlled fixtures for authorization, webhook signatures, retries, plan/credit behavior and management output; report unimplemented capabilities honestly. Do not apply catalogue changes to the provider or perform charges during implementation.`,`Portable payment semantics (applies to every framework):\n\n${contract_default}`,`Payment configuration JSON Schema (validate extensions.payments; no JSKIT runtime required):\n\n${JSON.stringify(configuration_schema_default,null,2)}`,`Portable conformance instructions:\n\n${conformance_default}`,`Portable conformance JSON (translate these fixtures into this framework's native tests; do not install a Node sidecar for another framework):\n\n${JSON.stringify(conformance_default$1,null,2)}`,`Public app-operation contract (apply its payment section as well as the command envelope):\n\n${application_integration_setup_default}`,`Native Laravel guidance (only when this project selects Laravel; other frameworks implement the same contract with their own libraries):\n\n${application_payments_laravel_default}`]:[],...selected.value?.provider===`google-ads`?[application_google_ads_default]:[],`Use the saved Env references without putting secret values in source or chat.`,`Preserve the existing configuration and implement controlled tests. Do not register provider accounts, perform live consent, send real messages or deploy.`].join(`
|
|
940
940
|
|
|
941
|
-
`));const callbackOverride=ref(null);const setupCopyMessage=ref(``);const registration=computed(()=>configuration.value?.registrations[selected.value?.authentication.registrationRef]);const permissionLabels=computed(()=>Object.fromEntries(provider.value?getProviderScopes(provider.value,selected.value?.settings||{},registration.value?.grantType||`authorization_code`).map(scope=>[scope.value,scope.label]):[]));const credentials=computed(()=>{const reference=selected.value?.authentication.method===`oauth2`?registration.value?.clientSecretRef:selected.value?.authentication.secretRef;const primaryKey=/^env:([A-Z_][A-Z0-9_]*)$/u.exec(reference||``)?.[1];const entries=primaryKey?[{key:primaryKey,label:`Application credential`,public:false}]:[];for(const field of provider.value?.settingsFields||[]){if(!field.environmentCredential)continue;const key=/^env:([A-Z_][A-Z0-9_]*)$/u.exec(selected.value?.settings?.[field.name]||``)?.[1];if(key)entries.push({key,...field.environmentCredential})}return entries});const callbackKey=computed(()=>/^env:([A-Z_][A-Z0-9_]*)$/u.exec(registration.value?.callbackUrlRef||``)?.[1]||``);const callbackUrl=computed({get:()=>callbackOverride.value??integrationCallbackUrl(props.dashboardContext.applicationPublicUrl,provider.value?.setup?.callbackPath||`/integrations/${selected.value?.authentication.registrationRef}/callback`),set:value=>{callbackOverride.value=value}});const clientRegistrationEndpoint=computed(()=>{if(selected.value?.authentication.method!==`oauth2`)return void 0;const endpoint=provider.value?.setup?.clientRegistrationEndpoint;return typeof endpoint===`function`?endpoint(selected.value?.settings||{}):endpoint});const clientRegistrationBody=computed(()=>!clientRegistrationEndpoint.value||!callbackUrl.value?``:JSON.stringify({client_name:`${projectSlug.value} — ${selected.value?.displayName||provider.value.name}`,redirect_uris:[callbackUrl.value],token_endpoint_auth_method:`client_secret_post`,grant_types:[`authorization_code`,`refresh_token`],response_types:[`code`],scope:(selected.value?.scopes||[]).join(` `)},null,2));const clientMetadata=computed(()=>{const build=provider.value?.setup?.createClientMetadata;if(!build)return null;try{return{json:JSON.stringify(build({clientId:registration.value?.clientId,clientName:selected.value?.displayName||provider.value.name,callbackUrl:callbackUrl.value}),null,2)}}catch{return{json:``,error:`Enter a valid Client metadata URL, display name and suggested callback to prepare the document.`}}});watch([selectedId,navigationKey,releaseId],()=>{callbackOverride.value=null;setupCopyMessage.value=``;discardOpen.value=false;removeOpen.value=false;disconnectOpen.value=false},{flush:`sync`});async function copySetupValue(value,label=`Callback URL`){setupCopyMessage.value=``;try{await navigator.clipboard.writeText(value);setupCopyMessage.value=`${label} copied.`}catch{setupCopyMessage.value=`Could not copy. Select the value in its field and copy it manually.`}}const disabled=computed(()=>registrationCommand.isRunning||discoveryCommand.isRunning||command.isRunning||setupCommand.isRunning||!production.value&&props.dashboardContext.sourceOperationsSuspended===true||production.value&&props.dashboardContext.owner!==true||changedElsewhere.value);const loadError=computed(()=>resource.loadError.value||(resource.data.value?.ok===false?resource.data.value.error:``));const colleagueIntegrations=inject(VIBE64_COLLEAGUE_INTEGRATIONS_KEY,null);const displayedIntegrations={get projectSlug(){return projectSlug.value},get sessionId(){return props.dashboardContext.sessionId||``},get environment(){return environment.value},get integrationId(){return selectedId.value},get ready(){return Boolean(configuration.value&&!resource.isInitialLoading.value&&!loadError.value)},get error(){return loadError.value?`Integrations could not load.`:``},get exists(){return Boolean(selected.value)},get dirty(){return dirty.value},select:selectIntegration};watchEffect(()=>{if(!colleagueIntegrations)return;if(props.dashboardContext.active!==false)colleagueIntegrations.value=displayedIntegrations;else if(colleagueIntegrations.value===displayedIntegrations)colleagueIntegrations.value=null});onUnmounted(()=>{if(colleagueIntegrations?.value===displayedIntegrations)colleagueIntegrations.value=null});function add(provider){if(production.value)return;const current=configuration.value;let id=provider.id;let suffix=2;while(current.integrations[id]||current.registrations[id])id=`${provider.id}-${suffix++}`;const prefix=id.toUpperCase().replaceAll(`-`,`_`);const method=provider.authenticationMethods[0];const authentication={method};if(method===`api-key`&&!provider.apiKeySecretOptional)authentication.secretRef=`env:${prefix}_API_KEY`;else if(method===`service-account`)authentication.secretRef=`env:${prefix}_SERVICE_ACCOUNT`;else if(method===`oauth2`)authentication.registrationRef=id;const grantType=provider.oauthGrantTypes?.[0]||`authorization_code`;const clientAuthentication=getProviderClientAuthenticationMethods(provider,grantType)[0];configuration.value={...current,integrations:{...current.integrations,[id]:{provider:provider.id,displayName:provider.name,accountMode:provider.accountModes[0],scopes:getProviderScopes(provider,{},grantType,method).filter(scope=>scope.required||scope.recommended).map(scope=>scope.value),authentication}},registrations:method!==`oauth2`?current.registrations:{...current.registrations,[id]:{source:`own`,clientId:``,...grantType===`authorization_code`?{callbackUrlRef:`env:${prefix}_CALLBACK_URL`}:{grantType},...clientAuthentication!==`client_secret_post`?{tokenEndpointAuthMethod:clientAuthentication}:{},...clientAuthentication!==`none`?{clientSecretRef:`env:${prefix}_CLIENT_SECRET`}:{}}}};selectedId.value=id}function remove(){if(production.value)return;const next={...configuration.value.integrations};const registrations={...configuration.value.registrations};const registrationId=selected.value.authentication.registrationRef;delete next[selectedId.value];if(!registrations[registrationId]?.clientId&®istrations[registrationId]?.source===`own`&&!Object.values(next).some(entry=>entry.authentication.registrationRef===registrationId))delete registrations[registrationId];configuration.value={...configuration.value,integrations:next,registrations};selectedId.value=``;removeOpen.value=false}function warnBeforeUnload(event){if(!dirty.value)return;event.preventDefault();event.returnValue=``}onMounted(()=>window.addEventListener(`beforeunload`,warnBeforeUnload));onUnmounted(()=>window.removeEventListener(`beforeunload`,warnBeforeUnload));return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1,[createBaseVNode(`header`,_hoisted_2,[_cache[38]||(_cache[38]=createBaseVNode(`div`,null,[createBaseVNode(`h1`,{class:`text-headline-small font-weight-bold ma-0`},`Integrations`)],-1)),createVNode(VBtn,{height:`48`,variant:`text`,disabled:unref(command).isRunning,onClick:_cache[0]||(_cache[0]=$event=>unref(dirty)?discardOpen.value=true:unref(resource).reload())},{default:withCtx(()=>[..._cache[37]||(_cache[37]=[createTextVNode(`Refresh`,-1)])]),_:1},8,[`disabled`])]),__props.dashboardContext.productionIntegrationsApiPath?(openBlock(),createBlock(VBtnToggle,{key:0,modelValue:environment.value,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>environment.value=$event),mandatory:``,"aria-label":`Integration environment`},{default:withCtx(()=>[createVNode(VBtn,{value:`development`},{default:withCtx(()=>[..._cache[39]||(_cache[39]=[createTextVNode(`Development`,-1)])]),_:1}),createVNode(VBtn,{value:`production`},{default:withCtx(()=>[..._cache[40]||(_cache[40]=[createTextVNode(`Production`,-1)])]),_:1})]),_:1},8,[`modelValue`])):createCommentVNode(``,true),production.value?(openBlock(),createBlock(VAlert,{key:1,type:`info`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(` Published configuration`+toDisplayString(unref(releaseId)?` (${unref(releaseId)})`:``)+`. Make configuration changes in Development, then publish them. `,1),!__props.dashboardContext.owner?(openBlock(),createElementBlock(`p`,_hoisted_3,`Only the workspace owner can manage production connections.`)):createCommentVNode(``,true)]),_:1})):createCommentVNode(``,true),!production.value&&!__props.dashboardContext.sessionId?(openBlock(),createElementBlock(`p`,_hoisted_4,`Open a session to configure its integrations.`)):unref(resource).isInitialLoading.value||loadError.value?(openBlock(),createBlock(Vibe64AsyncModuleState_default,{key:3,label:`Integrations`,loading:unref(resource).isInitialLoading.value,message:loadError.value||`Loading integrations.`,onRetry:_cache[2]||(_cache[2]=$event=>unref(resource).reload()),onReload:_cache[3]||(_cache[3]=$event=>unref(resource).reload())},null,8,[`loading`,`message`])):unref(configuration)?(openBlock(),createElementBlock(Fragment,{key:4},[unref(changedElsewhere)?(openBlock(),createBlock(VAlert,{key:0,type:`warning`,variant:`tonal`},{default:withCtx(()=>[..._cache[41]||(_cache[41]=[createTextVNode(`This configuration changed outside this form. Your draft is preserved. Reload before saving.`,-1)])]),_:1})):createCommentVNode(``,true),unref(error)?(openBlock(),createBlock(VAlert,{key:1,role:`alert`,type:`error`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(error)),1)]),_:1})):createCommentVNode(``,true),!production.value&&requestedIntegration.value&&unref(configuration)&&!Object.hasOwn(unref(configuration).integrations,requestedIntegration.value)?(openBlock(),createBlock(VAlert,{key:2,type:`warning`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(` The requested integration `+toDisplayString(requestedIntegration.value)+` is not configured in this session. Return to the conversation to finish its setup. `,1)]),_:1})):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_5,[createBaseVNode(`aside`,_hoisted_6,[createVNode(VTextField,{modelValue:search.value,"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>search.value=$event),label:`Search integrations`,"hide-details":``,clearable:``,"onClick:clear":_cache[5]||(_cache[5]=$event=>search.value=``)},null,8,[`modelValue`]),createBaseVNode(`h2`,_hoisted_7,toDisplayString(production.value?`Configured in the published release`:`Configured in this session`),1),filteredEntries.value.length?(openBlock(),createBlock(VList,{key:0,"aria-label":`Configured integrations`,"bg-color":`transparent`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(filteredEntries.value,([id,entry])=>{return openBlock(),createBlock(VListItem,{key:id,active:selectedId.value===id,"min-height":`48`,title:entry.displayName||entry.provider,subtitle:id,onClick:$event=>selectedId.value=id},{prepend:withCtx(()=>[createVNode(IntegrationServiceLogo_default,{provider:entry.provider},null,8,[`provider`])]),_:2},1032,[`active`,`title`,`subtitle`,`onClick`])}),128))]),_:1})):(openBlock(),createElementBlock(`p`,_hoisted_8,toDisplayString(entries.value.length?`No configured integrations match your search.`:`No integrations configured yet.`),1)),!production.value?(openBlock(),createElementBlock(`h2`,_hoisted_9,`Available services`)):createCommentVNode(``,true),!production.value&&providerGroups.value.length?(openBlock(),createBlock(VExpansionPanels,{key:3,modelValue:visibleCategories.value,"onUpdate:modelValue":_cache[6]||(_cache[6]=$event=>visibleCategories.value=$event),multiple:``,variant:`accordion`,"aria-label":`Available services`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(providerGroups.value,group=>{return openBlock(),createBlock(VExpansionPanel,{key:group.id,value:group.id},{default:withCtx(()=>[createVNode(VExpansionPanelTitle,{"min-height":`56`},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_10,toDisplayString(group.title),1),createVNode(VChip,{class:`ml-3`,size:`small`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(group.providers.length),1)]),_:2},1024)]),_:2},1024),createVNode(VExpansionPanelText,null,{default:withCtx(()=>[createVNode(VList,{"aria-label":group.title,"bg-color":`transparent`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(group.providers,entry=>{return openBlock(),createBlock(VListItem,{key:entry.id,title:entry.name,subtitle:entry.description},{prepend:withCtx(()=>[createVNode(IntegrationServiceLogo_default,{provider:entry.id},null,8,[`provider`])]),append:withCtx(()=>[createVNode(VBtn,{"aria-label":`Add ${entry.name}`,height:`48`,variant:`text`,disabled:disabled.value,onClick:$event=>add(entry)},{default:withCtx(()=>[..._cache[42]||(_cache[42]=[createTextVNode(`Add`,-1)])]),_:1},8,[`aria-label`,`disabled`,`onClick`])]),_:2},1032,[`title`,`subtitle`])}),128))]),_:2},1032,[`aria-label`])]),_:2},1024)]),_:2},1032,[`value`])}),128))]),_:1},8,[`modelValue`])):!production.value?(openBlock(),createElementBlock(`p`,_hoisted_11,`No services match your search.`)):createCommentVNode(``,true)]),createBaseVNode(`main`,{ref_key:`integrationDetail`,ref:integrationDetail,class:`integrations-panel__detail`},[selected.value?(openBlock(),createElementBlock(Fragment,{key:0},[createBaseVNode(`header`,_hoisted_12,[createBaseVNode(`div`,_hoisted_13,[createVNode(IntegrationServiceLogo_default,{provider:selected.value.provider},null,8,[`provider`]),createBaseVNode(`div`,null,[createBaseVNode(`h2`,null,toDisplayString(selected.value.displayName||selected.value.provider),1),_cache[43]||(_cache[43]=createBaseVNode(`p`,null,`Application configuration`,-1))])]),!production.value?(openBlock(),createBlock(VBtn,{key:0,height:`48`,variant:`text`,color:`error`,disabled:disabled.value,onClick:_cache[7]||(_cache[7]=$event=>removeOpen.value=true)},{default:withCtx(()=>[..._cache[44]||(_cache[44]=[createTextVNode(`Remove`,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true)]),createBaseVNode(`section`,_hoisted_14,[createBaseVNode(`h3`,_hoisted_15,toDisplayString(production.value?`Production connection`:`Development connection`),1),configurationOnly.value?(openBlock(),createElementBlock(Fragment,{key:0},[createBaseVNode(`p`,_hoisted_16,toDisplayString(unref(dirty)?`Unsaved configuration`:`Configured`),1),_cache[45]||(_cache[45]=createBaseVNode(`p`,null,`Your application uses these public settings. Saving does not install the integration or verify that your application can use it.`,-1))],64)):selected.value.accountMode===`per-user`?(openBlock(),createElementBlock(`p`,_hoisted_17,`Each user connects in your application's own account screen.`)):(openBlock(),createElementBlock(Fragment,{key:2},[createBaseVNode(`p`,null,`This account is used by `+toDisplayString(unref(projectSlug))+` in `+toDisplayString(environment.value)+`. Your application owns its access.`,1),unref(dirty)?(openBlock(),createElementBlock(`p`,_hoisted_18,`Save configuration before checking or connecting this account.`)):unref(setupCommand).isRunning&&!unref(connection)?(openBlock(),createBlock(VSkeletonLoader,{key:1,type:`list-item-two-line`,"aria-label":`Checking connection`})):unref(connection)?(openBlock(),createElementBlock(Fragment,{key:2},[createBaseVNode(`p`,_hoisted_19,toDisplayString({unconfigured:unref(connection).setupIssue?`Application setup needs attention.`:`Application connection setup is not implemented yet.`,disconnected:`Not connected`,connected:`Connected`,pending:`Waiting for provider approval`,"reconnect-required":`Reconnect required`,cancelled:`Connection cancelled`}[unref(connection).status]),1),unref(connection).status===`disconnected`?(openBlock(),createElementBlock(`p`,_hoisted_20,`No account is connected here. Provider permissions and credentials in Env are managed separately; disconnecting here does not revoke them.`)):createCommentVNode(``,true),unref(connection).setupIssue===`credentials-missing`?(openBlock(),createElementBlock(`p`,_hoisted_21,`Complete the required provider settings and credentials. Blank values and MISSING placeholders cannot connect. Use the credential and Env controls below, then check again.`)):unref(connection).setupIssue===`callback-invalid`?(openBlock(),createElementBlock(`p`,_hoisted_22,`Set a valid application callback URL in Env and register that exact URL with the provider. Your application must serve the callback route.`)):unref(connection).status===`unconfigured`?(openBlock(),createElementBlock(`p`,_hoisted_23,`Ask the project assistant to implement this integration. Saving credentials alone does not connect it.`)):createCommentVNode(``,true),unref(connection).grantedScopes?.length?(openBlock(),createElementBlock(`div`,_hoisted_24,[_cache[46]||(_cache[46]=createBaseVNode(`p`,null,`Granted permissions`,-1)),createBaseVNode(`ul`,null,[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(connection).grantedScopes,scope=>{return openBlock(),createElementBlock(`li`,{key:scope},toDisplayString(permissionLabels.value[scope]||scope),1)}),128))])])):createCommentVNode(``,true),unref(connection).verifiedAt?(openBlock(),createElementBlock(`p`,_hoisted_25,[_cache[47]||(_cache[47]=createTextVNode(`Last verified: `,-1)),createBaseVNode(`time`,{datetime:unref(connection).verifiedAt},toDisplayString(new Date(unref(connection).verifiedAt).toLocaleString()),9,_hoisted_26)])):createCommentVNode(``,true),unref(connection).accountLabel?(openBlock(),createElementBlock(`p`,_hoisted_27,`Connected account: `+toDisplayString(unref(connection).accountLabel),1)):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_28,[unref(connection).status===`pending`?(openBlock(),createElementBlock(Fragment,{key:0},[createVNode(VBtn,{height:`48`,href:unref(connection).authorizationUrl,target:`_blank`,rel:`noopener noreferrer`,disabled:disabled.value},{default:withCtx(()=>[..._cache[48]||(_cache[48]=[createTextVNode(`Continue with provider`,-1)])]),_:1},8,[`href`,`disabled`]),createVNode(VBtn,{height:`48`,variant:`text`,disabled:disabled.value,onClick:_cache[8]||(_cache[8]=$event=>unref(runSetup)(`cancel`))},{default:withCtx(()=>[..._cache[49]||(_cache[49]=[createTextVNode(`Cancel connection`,-1)])]),_:1},8,[`disabled`])],64)):[`disconnected`,`connected`,`reconnect-required`].includes(unref(connection).status)?(openBlock(),createElementBlock(Fragment,{key:1},[provider.value?.verificationFields?.length?(openBlock(),createElementBlock(`div`,_hoisted_29,[_cache[50]||(_cache[50]=createBaseVNode(`h4`,null,`Verify access`,-1)),_cache[51]||(_cache[51]=createBaseVNode(`p`,null,`These values are used for this connection check and are not saved in source.`,-1)),(openBlock(true),createElementBlock(Fragment,null,renderList(provider.value.verificationFields,field=>{return openBlock(),createBlock(VTextField,{key:field.name,modelValue:unref(verificationInput)[field.name],"onUpdate:modelValue":$event=>unref(verificationInput)[field.name]=$event,label:field.label,hint:field.hint,"persistent-hint":``,required:field.required,disabled:unref(dirty)||disabled.value},null,8,[`modelValue`,`onUpdate:modelValue`,`label`,`hint`,`required`,`disabled`])}),128)),verificationIncomplete.value?(openBlock(),createElementBlock(`p`,_hoisted_30,`Enter the required verification inputs before connecting.`)):createCommentVNode(``,true)])):createCommentVNode(``,true),createVNode(VBtn,{height:`48`,color:`primary`,disabled:unref(dirty)||disabled.value||verificationIncomplete.value,onClick:_cache[9]||(_cache[9]=$event=>unref(runSetup)(`connect`))},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(connection).status===`disconnected`?`Connect account`:unref(connection).status===`connected`&&selected.value.authentication.method!==`oauth2`?`Verify again`:`Reconnect`),1)]),_:1},8,[`disabled`])],64)):createCommentVNode(``,true),[`connected`,`reconnect-required`].includes(unref(connection).status)?(openBlock(),createBlock(VBtn,{key:2,height:`48`,variant:`text`,disabled:unref(dirty)||disabled.value,onClick:_cache[10]||(_cache[10]=$event=>disconnectOpen.value=true)},{default:withCtx(()=>[..._cache[52]||(_cache[52]=[createTextVNode(`Disconnect`,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true)])],64)):createCommentVNode(``,true),unref(connectionError)?(openBlock(),createBlock(VAlert,{key:3,type:`error`,variant:`tonal`,role:`alert`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(connectionError)),1)]),_:1})):createCommentVNode(``,true),createVNode(VBtn,{height:`48`,variant:`text`,disabled:unref(dirty)||disabled.value,onClick:_cache[11]||(_cache[11]=$event=>unref(runSetup)(`status`))},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(setupCommand).isRunning?`Checking…`:`Check connection`),1)]),_:1},8,[`disabled`])],64)),!production.value&&__props.dashboardContext.requestAssistantDraft&&__props.dashboardContext.assistantDraftAvailable&&(configurationOnly.value||selected.value.accountMode===`per-user`||unref(connection)?.status===`unconfigured`&&!unref(connection).setupIssue)?(openBlock(),createElementBlock(Fragment,{key:3},[createVNode(VBtn,{height:`48`,variant:`tonal`,disabled:unref(dirty)||disabled.value,onClick:_cache[12]||(_cache[12]=$event=>__props.dashboardContext.requestAssistantDraft(setupPrompt.value))},{default:withCtx(()=>[createTextVNode(toDisplayString(selected.value.accountMode===`per-user`?`Prepare app user connection request`:`Prepare setup request`),1)]),_:1},8,[`disabled`]),_cache[53]||(_cache[53]=createBaseVNode(`p`,null,`Adds a request to your chat draft for review before sending.`,-1))],64)):createCommentVNode(``,true)]),provider.value?(openBlock(),createBlock(unref(IntegrationConfigurationFields_default),{key:0,modelValue:unref(configuration),"onUpdate:modelValue":_cache[13]||(_cache[13]=$event=>isRef(configuration)?configuration.value=$event:null),"integration-id":selectedId.value,provider:provider.value,"field-errors":unref(fieldErrors),disabled:production.value||disabled.value},null,8,[`modelValue`,`integration-id`,`provider`,`field-errors`,`disabled`])):(openBlock(),createElementBlock(`p`,_hoisted_31,`This provider's configuration is preserved. Edit its configuration in Files.`)),provider.value?.id===`google-ads`&&selected.value.accountMode===`shared`?(openBlock(),createBlock(_sfc_main$4,{key:navigationKey.value+selectedId.value,modelValue:unref(configuration),"onUpdate:modelValue":_cache[14]||(_cache[14]=$event=>isRef(configuration)?configuration.value=$event:null),"integration-id":selectedId.value,disabled:production.value||disabled.value,"application-public-url":__props.dashboardContext.applicationPublicUrl,result:unref(adsResult),error:unref(adsError),loading:unref(setupCommand).isRunning,"management-disabled":production.value||unref(dirty)||disabled.value||__props.dashboardContext.owner===false,"can-prepare":!production.value&&Boolean(__props.dashboardContext.requestAssistantDraft)&&__props.dashboardContext.assistantDraftAvailable&&__props.dashboardContext.owner!==false,onManage:unref(runAdsOperation),onPrepare:_cache[15]||(_cache[15]=$event=>__props.dashboardContext.requestAssistantDraft(setupPrompt.value))},null,8,[`modelValue`,`integration-id`,`disabled`,`application-public-url`,`result`,`error`,`loading`,`management-disabled`,`can-prepare`,`onManage`])):createCommentVNode(``,true),[`stripe`,`paddle`].includes(provider.value?.id)?(openBlock(),createBlock(_sfc_main$3,{key:3,modelValue:unref(configuration),"onUpdate:modelValue":_cache[16]||(_cache[16]=$event=>isRef(configuration)?configuration.value=$event:null),"integration-id":selectedId.value,disabled:production.value||disabled.value,"application-public-url":__props.dashboardContext.applicationPublicUrl,onSetEnv:openPaymentEnv,management:unref(paymentResult),"management-error":unref(paymentError),"management-loading":unref(setupCommand).isRunning,"management-operation":unref(paymentOperation),"management-disabled":unref(dirty)||disabled.value||__props.dashboardContext.owner===false||production.value&&!unref(releaseId),"can-prepare":!production.value&&Boolean(__props.dashboardContext.requestAssistantDraft)&&__props.dashboardContext.assistantDraftAvailable&&__props.dashboardContext.owner!==false,onPrepare:_cache[17]||(_cache[17]=$event=>__props.dashboardContext.requestAssistantDraft(setupPrompt.value)),onManage:unref(runPaymentOperation)},null,8,[`modelValue`,`integration-id`,`disabled`,`application-public-url`,`management`,`management-error`,`management-loading`,`management-operation`,`management-disabled`,`can-prepare`,`onManage`])):createCommentVNode(``,true),provider.value?.id===`n8n`&&!production.value?(openBlock(),createElementBlock(`section`,_hoisted_32,[_cache[60]||(_cache[60]=createBaseVNode(`h3`,{class:`text-title-medium`},`Connect with n8n OAuth`,-1)),_cache[61]||(_cache[61]=createBaseVNode(`p`,null,`In n8n, open Settings → Instance-level MCP and enable access. Copy its full Server URL into the field above, then discover OAuth settings. This reads public metadata; it does not register a client or connect an account.`,-1)),createVNode(VBtn,{height:`48`,variant:`outlined`,disabled:disabled.value||!selected.value.settings?.serverUrl,loading:unref(discoveryCommand).isRunning,onClick:unref(discoverN8n)},{default:withCtx(()=>[..._cache[54]||(_cache[54]=[createTextVNode(`Discover OAuth settings`,-1)])]),_:1},8,[`disabled`,`loading`,`onClick`]),unref(discoveryError)?(openBlock(),createElementBlock(`p`,_hoisted_33,toDisplayString(unref(discoveryError)),1)):createCommentVNode(``,true),selected.value.settings?.oauthDiscovery?(openBlock(),createElementBlock(Fragment,{key:1},[createBaseVNode(`p`,null,`Discovered authority: `+toDisplayString(selected.value.settings.oauthDiscovery.oauth.issuer),1),selected.value.settings.oauthDiscovery.resource!==selected.value.settings.serverUrl?(openBlock(),createElementBlock(`p`,_hoisted_34,`The Server URL has changed. Discover its settings again before using OAuth.`)):createCommentVNode(``,true),_cache[59]||(_cache[59]=createBaseVNode(`p`,null,`Choose OAuth in Authentication above, then select the permissions this application needs. Follow the OAuth setup instructions to register your client. You can also keep the API key method.`,-1)),selected.value.authentication.method===`oauth2`&&(!registration.value?.clientId||registration.value.clientId===`MISSING`)?(openBlock(),createElementBlock(Fragment,{key:1},[_cache[56]||(_cache[56]=createBaseVNode(`p`,null,`Set the Suggested callback URL below and choose permissions above. Registering creates one client at the displayed n8n authority, saves this configuration and stores its secret, callback and recovery client ID in development Env. Existing Env values will not be replaced. Your application must already serve the callback and connection setup command to continue into consent.`,-1)),createVNode(VBtn,{height:`48`,color:`primary`,disabled:disabled.value||__props.dashboardContext.owner===false||unref(registrationNeedsReview)||!callbackUrl.value||!selected.value.scopes.length||selected.value.settings.oauthDiscovery.resource!==selected.value.settings.serverUrl,loading:unref(registrationCommand).isRunning,onClick:_cache[18]||(_cache[18]=$event=>unref(registerOAuthClient)(callbackUrl.value))},{default:withCtx(()=>[..._cache[55]||(_cache[55]=[createTextVNode(`Register client and connect`,-1)])]),_:1},8,[`disabled`,`loading`])],64)):createCommentVNode(``,true),unref(registrationError)?(openBlock(),createElementBlock(`p`,_hoisted_35,toDisplayString(unref(registrationError)),1)):createCommentVNode(``,true),unref(registrationNeedsReview)&&!unref(registrationCommand).isRunning?(openBlock(),createElementBlock(Fragment,{key:3},[_cache[58]||(_cache[58]=createBaseVNode(`p`,null,`A failed request may still have created a client. Inspect n8n and project Env before another attempt; recover saved credentials when present.`,-1)),createVNode(VBtn,{height:`48`,variant:`text`,disabled:disabled.value,onClick:_cache[19]||(_cache[19]=$event=>registrationNeedsReview.value=false)},{default:withCtx(()=>[..._cache[57]||(_cache[57]=[createTextVNode(`I checked n8n and Env — allow another attempt`,-1)])]),_:1},8,[`disabled`])],64)):createCommentVNode(``,true)],64)):createCommentVNode(``,true)])):createCommentVNode(``,true),[`amplitude`,`atlassian`,`confidence-exp`,`confidence-flags`,`sanity`,`sentry`,`granola`,`hex`,`heygen`].includes(provider.value?.id)&&selected.value?.authentication.method===`oauth2`&&!production.value&&(!registration.value?.clientId||registration.value.clientId===`MISSING`)?(openBlock(),createElementBlock(`section`,{key:5,"aria-label":`${provider.value.name} client registration`,class:`mt-4`},[createBaseVNode(`p`,null,`Choose permissions above (and Region for Amplitude or workspace endpoint for Hex), then set the Suggested callback URL below. Registering creates a `+toDisplayString(provider.value.name)+` OAuth client and saves its ID in configuration and its secret, callback and recovery ID in development Env. Existing Env values will not be replaced. Your application must implement the callback and setup command to complete consent.`,1),createVNode(VBtn,{height:`48`,color:`primary`,disabled:disabled.value||__props.dashboardContext.owner===false||unref(registrationNeedsReview)||unref(registrationCommand).isRunning||!callbackUrl.value||!selected.value.scopes.length||provider.value.id===`amplitude`&&!selected.value.scopes.includes(`mcp:read`),onClick:_cache[20]||(_cache[20]=$event=>unref(registerOAuthClient)(callbackUrl.value))},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(registrationCommand).isRunning?`Registering client…`:`Register client and connect`),1)]),_:1},8,[`disabled`]),unref(registrationError)?(openBlock(),createElementBlock(`p`,_hoisted_37,toDisplayString(unref(registrationError)),1)):createCommentVNode(``,true),unref(registrationNeedsReview)&&!unref(registrationCommand).isRunning?(openBlock(),createElementBlock(Fragment,{key:1},[createBaseVNode(`p`,null,`An unsuccessful request may still have created a client. Inspect `+toDisplayString(provider.value.name)+` and project Env before another attempt; recover saved credentials when present.`,1),createVNode(VBtn,{height:`48`,variant:`text`,disabled:disabled.value,onClick:_cache[21]||(_cache[21]=$event=>registrationNeedsReview.value=false)},{default:withCtx(()=>[createTextVNode(`I checked `+toDisplayString(provider.value.name)+` and Env — allow another attempt`,1)]),_:1},8,[`disabled`])],64)):createCommentVNode(``,true)],8,_hoisted_36)):createCommentVNode(``,true),production.value?(openBlock(),createElementBlock(`p`,_hoisted_38,`Production Env is managed on Deploy. Publish changes to apply them to the running release.`)):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(credentials.value,credential=>{return openBlock(),createElementBlock(`section`,{key:credential.label,"aria-label":credential.label,class:`mt-4`},[createBaseVNode(`h3`,_hoisted_40,toDisplayString(credential.label),1),createBaseVNode(`p`,null,`Save the credential as `+toDisplayString(credential.key)+` in `+toDisplayString(environment.value)+` Env. Your application receives it through Env.`,1),credential.public?(openBlock(),createElementBlock(`p`,_hoisted_41,`Your application may publish this key in its frontend. Use a key restricted to data those users may read.`)):createCommentVNode(``,true),unref(dirty)?(openBlock(),createElementBlock(`p`,_hoisted_42,`Save configuration first, then enter the credential.`)):createCommentVNode(``,true),createVNode(VBtn,{height:`48`,variant:`text`,disabled:unref(dirty)||disabled.value,to:{path:unref(projectAppPath)(unref(projectSlug),production.value?`/dashboard/deploy`:`/dashboard/env`),query:{prefillKey:credential.key,prefillSecret:`true`}}},{default:withCtx(()=>[createTextVNode(toDisplayString(production.value?`Open production Env`:`Set credential in Env`),1)]),_:1},8,[`disabled`,`to`])],8,_hoisted_39)}),128)),callbackKey.value?(openBlock(),createElementBlock(`section`,_hoisted_43,[_cache[64]||(_cache[64]=createBaseVNode(`h3`,{class:`text-title-medium`},`Application callback`,-1)),unref(connection)?.callbackUrl?(openBlock(),createElementBlock(Fragment,{key:0},[createVNode(VTextField,{"model-value":unref(connection).callbackUrl,label:`Configured callback URL`,readonly:``,"persistent-hint":``,hint:`Reported by your application's setup command from its current configuration.`},null,8,[`model-value`]),createVNode(VBtn,{height:`48`,variant:`text`,onClick:_cache[22]||(_cache[22]=$event=>copySetupValue(unref(connection).callbackUrl))},{default:withCtx(()=>[..._cache[62]||(_cache[62]=[createTextVNode(`Copy configured callback URL`,-1)])]),_:1}),callbackUrl.value&&callbackUrl.value!==unref(connection).callbackUrl?(openBlock(),createElementBlock(`p`,_hoisted_44,`The proposed URL differs from the application's configured callback. To change it, update Env and the provider's allowed redirect URLs. You may need to reconnect the account after changing the callback. Existing Env values are preserved until you save a replacement.`)):createCommentVNode(``,true)],64)):createCommentVNode(``,true),createVNode(VTextField,{modelValue:callbackUrl.value,"onUpdate:modelValue":_cache[23]||(_cache[23]=$event=>callbackUrl.value=$event),label:`Suggested callback URL`,"persistent-hint":``,hint:`Your application must serve this route. Register the same URL with the provider and save it in Env.`},null,8,[`modelValue`]),!callbackUrl.value?(openBlock(),createElementBlock(`p`,_hoisted_45,`An application address is not available for this suggestion. Enter the full callback URL your application serves; do not use the editor dashboard address.`)):createCommentVNode(``,true),_cache[65]||(_cache[65]=createBaseVNode(`p`,null,`This suggestion does not replace an existing Env value.`,-1)),createVNode(VBtn,{height:`48`,variant:`text`,disabled:!callbackUrl.value,onClick:_cache[24]||(_cache[24]=$event=>copySetupValue(callbackUrl.value))},{default:withCtx(()=>[..._cache[63]||(_cache[63]=[createTextVNode(`Copy callback URL`,-1)])]),_:1},8,[`disabled`]),setupCopyMessage.value?(openBlock(),createElementBlock(`p`,_hoisted_46,toDisplayString(setupCopyMessage.value),1)):createCommentVNode(``,true),createVNode(VBtn,{height:`48`,variant:`text`,disabled:!callbackUrl.value,to:{path:unref(projectAppPath)(unref(projectSlug),production.value?`/dashboard/deploy`:`/dashboard/env`),query:{prefillKey:callbackKey.value,prefillValue:callbackUrl.value}}},{default:withCtx(()=>[createTextVNode(toDisplayString(production.value?`Open production Env`:`Set callback in Env`),1)]),_:1},8,[`disabled`,`to`])])):createCommentVNode(``,true),provider.value?.setup?(openBlock(),createBlock(VExpansionPanels,{key:8,class:`mt-4`},{default:withCtx(()=>[createVNode(VExpansionPanel,{title:`Set up ${provider.value.name}`},{default:withCtx(()=>[createVNode(VExpansionPanelText,null,{default:withCtx(()=>[production.value?(openBlock(),createElementBlock(`p`,_hoisted_47,`For the credential and callback Env steps below, use Open production Env. Save values in the published application's environment.`)):createCommentVNode(``,true),createBaseVNode(`ol`,_hoisted_48,[(openBlock(true),createElementBlock(Fragment,null,renderList(provider.value.setup.stepsForSettings?.(selected.value?.settings||{},selected.value?.authentication.method)||provider.value.setup.stepsByAuthentication?.[selected.value?.authentication.method]||provider.value.setup.steps,step=>{return openBlock(),createElementBlock(`li`,{key:step},toDisplayString(step),1)}),128))]),clientMetadata.value?(openBlock(),createElementBlock(`section`,_hoisted_49,[_cache[67]||(_cache[67]=createBaseVNode(`h3`,{class:`text-title-medium`},`Client metadata document`,-1)),_cache[68]||(_cache[68]=createBaseVNode(`p`,null,`Serve this public JSON at the Client metadata URL entered above, with Content-Type application/json and no login requirement. Your application owns that endpoint.`,-1)),createVNode(VTextarea,{"model-value":clientMetadata.value.json,label:`Client metadata JSON`,readonly:``,rows:`10`},null,8,[`model-value`]),clientMetadata.value.error?(openBlock(),createElementBlock(`p`,_hoisted_50,toDisplayString(clientMetadata.value.error),1)):createCommentVNode(``,true),createVNode(VBtn,{height:`48`,variant:`text`,disabled:!clientMetadata.value.json,onClick:_cache[25]||(_cache[25]=$event=>copySetupValue(clientMetadata.value.json,`Client metadata`))},{default:withCtx(()=>[..._cache[66]||(_cache[66]=[createTextVNode(`Copy client metadata`,-1)])]),_:1},8,[`disabled`]),setupCopyMessage.value?(openBlock(),createElementBlock(`p`,_hoisted_51,toDisplayString(setupCopyMessage.value),1)):createCommentVNode(``,true),_cache[69]||(_cache[69]=createBaseVNode(`p`,null,`This document uses the current name, metadata URL and suggested callback. Update the hosted document when these change, and obtain any required callback approval. Copying does not publish it or grant provider access.`,-1))])):createCommentVNode(``,true),clientRegistrationEndpoint.value?(openBlock(),createElementBlock(`section`,_hoisted_52,[_cache[72]||(_cache[72]=createBaseVNode(`h3`,{class:`text-title-medium`},`OAuth client registration`,-1)),_cache[73]||(_cache[73]=createBaseVNode(`p`,null,`Before entering a Client ID, register a client for this application. In your HTTP client, create a POST request to the address below, set Content-Type to application/json, and paste the request body as raw JSON.`,-1)),createVNode(VTextField,{"model-value":clientRegistrationEndpoint.value,label:`Registration endpoint`,readonly:``},null,8,[`model-value`]),createVNode(VBtn,{height:`48`,variant:`text`,onClick:_cache[26]||(_cache[26]=$event=>copySetupValue(clientRegistrationEndpoint.value,`Registration endpoint`))},{default:withCtx(()=>[..._cache[70]||(_cache[70]=[createTextVNode(`Copy registration endpoint`,-1)])]),_:1}),_cache[74]||(_cache[74]=createBaseVNode(`p`,null,`The request uses the suggested callback above and the permissions currently selected in this form. Confirm the callback is the route your application will serve. Changing the form does not update a client already registered with the provider.`,-1)),createVNode(VTextarea,{"model-value":clientRegistrationBody.value,label:`Registration request body`,readonly:``,rows:`10`},null,8,[`model-value`]),!clientRegistrationBody.value?(openBlock(),createElementBlock(`p`,_hoisted_53,`Enter your application's suggested callback URL above to prepare the request.`)):createCommentVNode(``,true),createVNode(VBtn,{height:`48`,variant:`text`,disabled:!clientRegistrationBody.value,onClick:_cache[27]||(_cache[27]=$event=>copySetupValue(clientRegistrationBody.value,`Registration request`))},{default:withCtx(()=>[..._cache[71]||(_cache[71]=[createTextVNode(`Copy registration request`,-1)])]),_:1},8,[`disabled`]),setupCopyMessage.value?(openBlock(),createElementBlock(`p`,_hoisted_54,toDisplayString(setupCopyMessage.value),1)):createCommentVNode(``,true),createBaseVNode(`p`,null,`Send the request once. Copy client_id from a successful response into Client ID, then save configuration. Store client_secret in the project's Env using `+toDisplayString(registration.value.clientSecretRef)+`. Store the exact registered callback using `+toDisplayString(registration.value.callbackUrlRef)+`. The fields here contain Env references, not the secret itself.`,1),_cache[75]||(_cache[75]=createBaseVNode(`p`,null,`Keep the response private. Missing credentials, an error response or a different returned redirect URI is not a completed registration. A timeout may leave a client created: investigate before retrying. Copying this request does not send it or connect an account; user consent happens later.`,-1))])):createCommentVNode(``,true),createVNode(VBtn,{class:`mt-3`,height:`48`,to:unref(projectAppPath)(unref(projectSlug),production.value?`/dashboard/deploy`:`/dashboard/env`),variant:`text`},{default:withCtx(()=>[..._cache[76]||(_cache[76]=[createTextVNode(`Open Env`,-1)])]),_:1},8,[`to`]),createVNode(VBtn,{height:`48`,href:provider.value.setup.urlForSettings?.(selected.value?.settings||{},selected.value?.authentication.method)||provider.value.setup.urlByAuthentication?.[selected.value?.authentication.method]||provider.value.setup.url,target:`_blank`,rel:`noopener`,variant:`text`},{default:withCtx(()=>[..._cache[77]||(_cache[77]=[createTextVNode(`Provider setup guide`,-1)])]),_:1},8,[`href`])]),_:1})]),_:1},8,[`title`])]),_:1})):createCommentVNode(``,true)],64)):(openBlock(),createElementBlock(Fragment,{key:1},[createBaseVNode(`h2`,null,toDisplayString(production.value?`Select a published integration`:`Add a service`),1),_cache[78]||(_cache[78]=createBaseVNode(`p`,null,`Choose a service or an existing configuration to get started.`,-1))],64))],512)]),!production.value?(openBlock(),createElementBlock(`footer`,_hoisted_55,[createBaseVNode(`p`,null,toDisplayString(unref(dirty)?`Unsaved configuration changes.`:`Configuration matches integrations.json.`)+` Account access is verified by your application when a user connects.`,1),createBaseVNode(`div`,_hoisted_56,[createVNode(VBtn,{height:`48`,variant:`text`,disabled:!unref(dirty)||unref(command).isRunning,onClick:_cache[28]||(_cache[28]=$event=>discardOpen.value=true)},{default:withCtx(()=>[..._cache[79]||(_cache[79]=[createTextVNode(`Discard`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{height:`48`,color:`primary`,disabled:!unref(dirty)||disabled.value,onClick:unref(save)},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(command).isRunning?`Saving…`:`Save configuration`),1)]),_:1},8,[`disabled`,`onClick`])])])):createCommentVNode(``,true)],64)):createCommentVNode(``,true),createVNode(VDialog,{modelValue:discardOpen.value,"onUpdate:modelValue":_cache[31]||(_cache[31]=$event=>discardOpen.value=$event),"max-width":`440`},{default:withCtx(()=>[createVNode(VCard,{title:`Discard configuration changes?`},{default:withCtx(()=>[createVNode(VCardText,null,{default:withCtx(()=>[..._cache[80]||(_cache[80]=[createTextVNode(`Your unsaved form changes will be replaced by integrations.json.`,-1)])]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VBtn,{height:`48`,onClick:_cache[29]||(_cache[29]=$event=>discardOpen.value=false)},{default:withCtx(()=>[..._cache[81]||(_cache[81]=[createTextVNode(`Keep editing`,-1)])]),_:1}),createVNode(VBtn,{height:`48`,onClick:_cache[30]||(_cache[30]=$event=>{discardOpen.value=false;unref(discard)()})},{default:withCtx(()=>[..._cache[82]||(_cache[82]=[createTextVNode(`Discard and reload`,-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`]),createVNode(VDialog,{modelValue:disconnectOpen.value,"onUpdate:modelValue":_cache[34]||(_cache[34]=$event=>disconnectOpen.value=$event),"max-width":`440`},{default:withCtx(()=>[createVNode(VCard,{title:`Disconnect this application account?`},{default:withCtx(()=>[createVNode(VCardText,null,{default:withCtx(()=>[createBaseVNode(`p`,null,`This removes `+toDisplayString(unref(projectSlug))+`'s saved `+toDisplayString(environment.value)+` connection and pending consent attempts. Features using this connection will need it connected again.`,1),_cache[83]||(_cache[83]=createBaseVNode(`p`,{class:`mt-3`},`Provider permissions are not revoked. To revoke consent or an API key, use the provider's account settings; that may affect other apps using the same registration or key. Saved configuration and credentials in Env stay available.`,-1))]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VBtn,{height:`48`,onClick:_cache[32]||(_cache[32]=$event=>disconnectOpen.value=false)},{default:withCtx(()=>[..._cache[84]||(_cache[84]=[createTextVNode(`Keep connection`,-1)])]),_:1}),createVNode(VBtn,{height:`48`,color:`error`,onClick:_cache[33]||(_cache[33]=$event=>{disconnectOpen.value=false;unref(runSetup)(`disconnect`)})},{default:withCtx(()=>[..._cache[85]||(_cache[85]=[createTextVNode(`Disconnect account`,-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`]),createVNode(VDialog,{modelValue:removeOpen.value,"onUpdate:modelValue":_cache[36]||(_cache[36]=$event=>removeOpen.value=$event),"max-width":`440`},{default:withCtx(()=>[createVNode(VCard,{title:`Remove this integration?`},{default:withCtx(()=>[configurationOnly.value?(openBlock(),createBlock(VCardText,{key:0},{default:withCtx(()=>[..._cache[86]||(_cache[86]=[createTextVNode(`This removes the public settings when you save. Your application applies the change through its normal configuration or deployment lifecycle. It does not delete provider data or undo events already sent.`,-1)])]),_:1})):(openBlock(),createBlock(VCardText,{key:1},{default:withCtx(()=>[..._cache[87]||(_cache[87]=[createTextVNode(`This changes the application's configuration when you save. Existing account grants and shared app registrations remain available.`,-1)])]),_:1})),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VBtn,{height:`48`,onClick:_cache[35]||(_cache[35]=$event=>removeOpen.value=false)},{default:withCtx(()=>[..._cache[88]||(_cache[88]=[createTextVNode(`Cancel`,-1)])]),_:1}),createVNode(VBtn,{height:`48`,color:`error`,onClick:remove},{default:withCtx(()=>[..._cache[89]||(_cache[89]=[createTextVNode(`Remove integration`,-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`])])}}};var IntegrationsPanel_default=_plugin_vue_export_helper_default(_sfc_main$1,[[`__scopeId`,`data-v-58d7a2fa`]]);var _sfc_main={__name:`index`,props:{dashboardContext:{type:Object,default:()=>({})}},setup(__props){return(_ctx,_cache)=>{return openBlock(),createBlock(IntegrationsPanel_default,{key:__props.dashboardContext.sessionId||`none`,"dashboard-context":__props.dashboardContext},null,8,[`dashboard-context`])}}};export{_sfc_main as default};
|
|
941
|
+
`));const callbackOverride=ref(null);const setupCopyMessage=ref(``);const registration=computed(()=>configuration.value?.registrations[selected.value?.authentication.registrationRef]);const permissionLabels=computed(()=>Object.fromEntries(provider.value?getProviderScopes(provider.value,selected.value?.settings||{},registration.value?.grantType||`authorization_code`).map(scope=>[scope.value,scope.label]):[]));const credentials=computed(()=>{const reference=selected.value?.authentication.method===`oauth2`?registration.value?.clientSecretRef:selected.value?.authentication.secretRef;const primaryKey=/^env:([A-Z_][A-Z0-9_]*)$/u.exec(reference||``)?.[1];const entries=primaryKey?[{key:primaryKey,label:`Application credential`,public:false}]:[];const refreshTokenKey=/^env:([A-Z_][A-Z0-9_]*)$/u.exec(selected.value?.authentication.refreshTokenRef||``)?.[1];if(refreshTokenKey)entries.push({key:refreshTokenKey,label:`Connected account`,public:false});for(const field of provider.value?.settingsFields||[]){if(!field.environmentCredential)continue;const key=/^env:([A-Z_][A-Z0-9_]*)$/u.exec(selected.value?.settings?.[field.name]||``)?.[1];if(key)entries.push({key,...field.environmentCredential})}return entries});const savedValues=useVibe64SavedEnvValues();const linkedCredentials=ref({});function credentialLinked(key){return linkedCredentials.value[`${environment.value}:${key}`]===true}function setCredentialLinked(key,linked){linkedCredentials.value={...linkedCredentials.value,[`${environment.value}:${key}`]:linked===true}}const callbackKey=computed(()=>/^env:([A-Z_][A-Z0-9_]*)$/u.exec(registration.value?.callbackUrlRef||``)?.[1]||``);const callbackUrl=computed({get:()=>callbackOverride.value??integrationCallbackUrl(props.dashboardContext.applicationPublicUrl,provider.value?.setup?.callbackPath||`/integrations/${selected.value?.authentication.registrationRef}/callback`),set:value=>{callbackOverride.value=value}});const clientRegistrationEndpoint=computed(()=>{if(selected.value?.authentication.method!==`oauth2`)return void 0;const endpoint=provider.value?.setup?.clientRegistrationEndpoint;return typeof endpoint===`function`?endpoint(selected.value?.settings||{}):endpoint});const clientRegistrationBody=computed(()=>!clientRegistrationEndpoint.value||!callbackUrl.value?``:JSON.stringify({client_name:`${projectSlug.value} — ${selected.value?.displayName||provider.value.name}`,redirect_uris:[callbackUrl.value],token_endpoint_auth_method:`client_secret_post`,grant_types:[`authorization_code`,`refresh_token`],response_types:[`code`],scope:(selected.value?.scopes||[]).join(` `)},null,2));const clientMetadata=computed(()=>{const build=provider.value?.setup?.createClientMetadata;if(!build)return null;try{return{json:JSON.stringify(build({clientId:registration.value?.clientId,clientName:selected.value?.displayName||provider.value.name,callbackUrl:callbackUrl.value}),null,2)}}catch{return{json:``,error:`Enter a valid Client metadata URL, display name and suggested callback to prepare the document.`}}});watch([selectedId,navigationKey,releaseId],()=>{callbackOverride.value=null;setupCopyMessage.value=``;discardOpen.value=false;removeOpen.value=false;disconnectOpen.value=false},{flush:`sync`});async function copySetupValue(value,label=`Callback URL`){setupCopyMessage.value=``;try{await navigator.clipboard.writeText(value);setupCopyMessage.value=`${label} copied.`}catch{setupCopyMessage.value=`Could not copy. Select the value in its field and copy it manually.`}}const disabled=computed(()=>registrationCommand.isRunning||discoveryCommand.isRunning||command.isRunning||setupCommand.isRunning||!production.value&&props.dashboardContext.sourceOperationsSuspended===true||production.value&&props.dashboardContext.owner!==true||changedElsewhere.value);const loadError=computed(()=>resource.loadError.value||(resource.data.value?.ok===false?resource.data.value.error:``));const colleagueIntegrations=inject(VIBE64_COLLEAGUE_INTEGRATIONS_KEY,null);const displayedIntegrations={get projectSlug(){return projectSlug.value},get sessionId(){return props.dashboardContext.sessionId||``},get environment(){return environment.value},get integrationId(){return selectedId.value},get ready(){return Boolean(configuration.value&&!resource.isInitialLoading.value&&!loadError.value)},get error(){return loadError.value?`Integrations could not load.`:``},get exists(){return Boolean(selected.value)},get dirty(){return dirty.value},select:selectIntegration};watchEffect(()=>{if(!colleagueIntegrations)return;if(props.dashboardContext.active!==false)colleagueIntegrations.value=displayedIntegrations;else if(colleagueIntegrations.value===displayedIntegrations)colleagueIntegrations.value=null});onUnmounted(()=>{if(colleagueIntegrations?.value===displayedIntegrations)colleagueIntegrations.value=null});function add(provider){if(production.value)return;const current=configuration.value;let id=provider.id;let suffix=2;while(current.integrations[id]||current.registrations[id])id=`${provider.id}-${suffix++}`;const prefix=id.toUpperCase().replaceAll(`-`,`_`);const method=provider.authenticationMethods[0];const authentication={method};if(method===`api-key`&&!provider.apiKeySecretOptional)authentication.secretRef=`env:${prefix}_API_KEY`;else if(method===`service-account`)authentication.secretRef=`env:${prefix}_SERVICE_ACCOUNT`;else if(method===`oauth2`)authentication.registrationRef=id;const grantType=provider.oauthGrantTypes?.[0]||`authorization_code`;const clientAuthentication=getProviderClientAuthenticationMethods(provider,grantType)[0];configuration.value={...current,integrations:{...current.integrations,[id]:{provider:provider.id,displayName:provider.name,accountMode:provider.accountModes[0],scopes:getProviderScopes(provider,{},grantType,method).filter(scope=>scope.required||scope.recommended).map(scope=>scope.value),authentication}},registrations:method!==`oauth2`?current.registrations:{...current.registrations,[id]:{source:`own`,clientId:``,...grantType===`authorization_code`?{callbackUrlRef:`env:${prefix}_CALLBACK_URL`}:{grantType},...clientAuthentication!==`client_secret_post`?{tokenEndpointAuthMethod:clientAuthentication}:{},...clientAuthentication!==`none`?{clientSecretRef:`env:${prefix}_CLIENT_SECRET`}:{}}}};selectedId.value=id}function remove(){if(production.value)return;const next={...configuration.value.integrations};const registrations={...configuration.value.registrations};const registrationId=selected.value.authentication.registrationRef;delete next[selectedId.value];if(!registrations[registrationId]?.clientId&®istrations[registrationId]?.source===`own`&&!Object.values(next).some(entry=>entry.authentication.registrationRef===registrationId))delete registrations[registrationId];configuration.value={...configuration.value,integrations:next,registrations};selectedId.value=``;removeOpen.value=false}function warnBeforeUnload(event){if(!dirty.value)return;event.preventDefault();event.returnValue=``}onMounted(()=>window.addEventListener(`beforeunload`,warnBeforeUnload));onUnmounted(()=>window.removeEventListener(`beforeunload`,warnBeforeUnload));return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1,[createBaseVNode(`header`,_hoisted_2,[_cache[38]||(_cache[38]=createBaseVNode(`div`,null,[createBaseVNode(`h1`,{class:`text-headline-small font-weight-bold ma-0`},`Integrations`)],-1)),createVNode(VBtn,{height:`48`,variant:`text`,disabled:unref(command).isRunning,onClick:_cache[0]||(_cache[0]=$event=>unref(dirty)?discardOpen.value=true:unref(resource).reload())},{default:withCtx(()=>[..._cache[37]||(_cache[37]=[createTextVNode(`Refresh`,-1)])]),_:1},8,[`disabled`])]),__props.dashboardContext.productionIntegrationsApiPath?(openBlock(),createBlock(VBtnToggle,{key:0,modelValue:environment.value,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>environment.value=$event),mandatory:``,"aria-label":`Integration environment`},{default:withCtx(()=>[createVNode(VBtn,{value:`development`},{default:withCtx(()=>[..._cache[39]||(_cache[39]=[createTextVNode(`Development`,-1)])]),_:1}),createVNode(VBtn,{value:`production`},{default:withCtx(()=>[..._cache[40]||(_cache[40]=[createTextVNode(`Production`,-1)])]),_:1})]),_:1},8,[`modelValue`])):createCommentVNode(``,true),production.value?(openBlock(),createBlock(VAlert,{key:1,type:`info`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(` Deployed configuration`+toDisplayString(unref(releaseId)?` (${unref(releaseId)})`:``)+`. Make configuration changes in Development, then deploy them. `,1),!__props.dashboardContext.owner?(openBlock(),createElementBlock(`p`,_hoisted_3,`Only the workspace owner can manage production connections.`)):createCommentVNode(``,true)]),_:1})):createCommentVNode(``,true),!production.value&&!__props.dashboardContext.sessionId?(openBlock(),createElementBlock(`p`,_hoisted_4,`Open a session to configure its integrations.`)):unref(resource).isInitialLoading.value||loadError.value?(openBlock(),createBlock(Vibe64AsyncModuleState_default,{key:3,label:`Integrations`,loading:unref(resource).isInitialLoading.value,message:loadError.value||`Loading integrations.`,onRetry:_cache[2]||(_cache[2]=$event=>unref(resource).reload()),onReload:_cache[3]||(_cache[3]=$event=>unref(resource).reload())},null,8,[`loading`,`message`])):unref(configuration)?(openBlock(),createElementBlock(Fragment,{key:4},[unref(changedElsewhere)?(openBlock(),createBlock(VAlert,{key:0,type:`warning`,variant:`tonal`},{default:withCtx(()=>[..._cache[41]||(_cache[41]=[createTextVNode(`This configuration changed outside this form. Your draft is preserved. Reload before saving.`,-1)])]),_:1})):createCommentVNode(``,true),unref(error)?(openBlock(),createBlock(VAlert,{key:1,role:`alert`,type:`error`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(error)),1)]),_:1})):createCommentVNode(``,true),!production.value&&requestedIntegration.value&&unref(configuration)&&!Object.hasOwn(unref(configuration).integrations,requestedIntegration.value)?(openBlock(),createBlock(VAlert,{key:2,type:`warning`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(` The requested integration `+toDisplayString(requestedIntegration.value)+` is not configured in this session. Return to the conversation to finish its setup. `,1)]),_:1})):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_5,[createBaseVNode(`aside`,_hoisted_6,[createVNode(VTextField,{modelValue:search.value,"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>search.value=$event),label:`Search integrations`,"hide-details":``,clearable:``,"onClick:clear":_cache[5]||(_cache[5]=$event=>search.value=``)},null,8,[`modelValue`]),createBaseVNode(`h2`,_hoisted_7,toDisplayString(production.value?`Configured in the deployed release`:`Configured in this session`),1),filteredEntries.value.length?(openBlock(),createBlock(VList,{key:0,"aria-label":`Configured integrations`,"bg-color":`transparent`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(filteredEntries.value,([id,entry])=>{return openBlock(),createBlock(VListItem,{key:id,active:selectedId.value===id,"min-height":`48`,title:entry.displayName||entry.provider,subtitle:id,onClick:$event=>selectedId.value=id},{prepend:withCtx(()=>[createVNode(IntegrationServiceLogo_default,{provider:entry.provider},null,8,[`provider`])]),_:2},1032,[`active`,`title`,`subtitle`,`onClick`])}),128))]),_:1})):(openBlock(),createElementBlock(`p`,_hoisted_8,toDisplayString(entries.value.length?`No configured integrations match your search.`:`No integrations configured yet.`),1)),!production.value?(openBlock(),createElementBlock(`h2`,_hoisted_9,`Available services`)):createCommentVNode(``,true),!production.value&&providerGroups.value.length?(openBlock(),createBlock(VExpansionPanels,{key:3,modelValue:visibleCategories.value,"onUpdate:modelValue":_cache[6]||(_cache[6]=$event=>visibleCategories.value=$event),multiple:``,variant:`accordion`,"aria-label":`Available services`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(providerGroups.value,group=>{return openBlock(),createBlock(VExpansionPanel,{key:group.id,value:group.id},{default:withCtx(()=>[createVNode(VExpansionPanelTitle,{"min-height":`56`},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_10,toDisplayString(group.title),1),createVNode(VChip,{class:`ml-3`,size:`small`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(group.providers.length),1)]),_:2},1024)]),_:2},1024),createVNode(VExpansionPanelText,null,{default:withCtx(()=>[createVNode(VList,{"aria-label":group.title,"bg-color":`transparent`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(group.providers,entry=>{return openBlock(),createBlock(VListItem,{key:entry.id,title:entry.name,subtitle:entry.description},{prepend:withCtx(()=>[createVNode(IntegrationServiceLogo_default,{provider:entry.id},null,8,[`provider`])]),append:withCtx(()=>[createVNode(VBtn,{"aria-label":`Add ${entry.name}`,height:`48`,variant:`text`,disabled:disabled.value,onClick:$event=>add(entry)},{default:withCtx(()=>[..._cache[42]||(_cache[42]=[createTextVNode(`Add`,-1)])]),_:1},8,[`aria-label`,`disabled`,`onClick`])]),_:2},1032,[`title`,`subtitle`])}),128))]),_:2},1032,[`aria-label`])]),_:2},1024)]),_:2},1032,[`value`])}),128))]),_:1},8,[`modelValue`])):!production.value?(openBlock(),createElementBlock(`p`,_hoisted_11,`No services match your search.`)):createCommentVNode(``,true)]),createBaseVNode(`main`,{ref_key:`integrationDetail`,ref:integrationDetail,class:`integrations-panel__detail`},[selected.value?(openBlock(),createElementBlock(Fragment,{key:0},[createBaseVNode(`header`,_hoisted_12,[createBaseVNode(`div`,_hoisted_13,[createVNode(IntegrationServiceLogo_default,{provider:selected.value.provider},null,8,[`provider`]),createBaseVNode(`div`,null,[createBaseVNode(`h2`,null,toDisplayString(selected.value.displayName||selected.value.provider),1),_cache[43]||(_cache[43]=createBaseVNode(`p`,null,`Application configuration`,-1))])]),!production.value?(openBlock(),createBlock(VBtn,{key:0,height:`48`,variant:`text`,color:`error`,disabled:disabled.value,onClick:_cache[7]||(_cache[7]=$event=>removeOpen.value=true)},{default:withCtx(()=>[..._cache[44]||(_cache[44]=[createTextVNode(`Remove`,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true)]),createBaseVNode(`section`,_hoisted_14,[createBaseVNode(`h3`,_hoisted_15,toDisplayString(production.value?`Production connection`:`Development connection`),1),configurationOnly.value?(openBlock(),createElementBlock(Fragment,{key:0},[createBaseVNode(`p`,_hoisted_16,toDisplayString(unref(dirty)?`Unsaved configuration`:`Configured`),1),_cache[45]||(_cache[45]=createBaseVNode(`p`,null,`Your application uses these public settings. Saving does not install the integration or verify that your application can use it.`,-1))],64)):selected.value.accountMode===`per-user`?(openBlock(),createElementBlock(`p`,_hoisted_17,`Each user connects in your application's own account screen.`)):(openBlock(),createElementBlock(Fragment,{key:2},[createBaseVNode(`p`,null,`This account is used by `+toDisplayString(unref(projectSlug))+` in `+toDisplayString(environment.value)+`. Your application owns its access.`,1),unref(dirty)?(openBlock(),createElementBlock(`p`,_hoisted_18,`Save configuration before checking or connecting this account.`)):unref(setupCommand).isRunning&&!unref(connection)?(openBlock(),createBlock(VSkeletonLoader,{key:1,type:`list-item-two-line`,"aria-label":`Checking connection`})):unref(connection)?(openBlock(),createElementBlock(Fragment,{key:2},[createBaseVNode(`p`,_hoisted_19,toDisplayString({unconfigured:unref(connection).setupIssue?`Application setup needs attention.`:`Application connection setup is not implemented yet.`,disconnected:`Not connected`,connected:`Connected`,pending:`Waiting for provider approval`,"reconnect-required":`Reconnect required`,cancelled:`Connection cancelled`}[unref(connection).status]),1),unref(connection).status===`disconnected`?(openBlock(),createElementBlock(`p`,_hoisted_20,`No account is connected here. Provider permissions and credentials in Env are managed separately; disconnecting here does not revoke them.`)):createCommentVNode(``,true),unref(connection).setupIssue===`credentials-missing`?(openBlock(),createElementBlock(`p`,_hoisted_21,`Complete the required provider settings and credentials. Blank values and MISSING placeholders cannot connect. Use the credential and Env controls below, then check again.`)):unref(connection).setupIssue===`callback-invalid`?(openBlock(),createElementBlock(`p`,_hoisted_22,`Set a valid application callback URL in Env and register that exact URL with the provider. Your application must serve the callback route.`)):unref(connection).status===`unconfigured`?(openBlock(),createElementBlock(`p`,_hoisted_23,`Ask the project assistant to implement this integration. Saving credentials alone does not connect it.`)):createCommentVNode(``,true),unref(connection).grantedScopes?.length?(openBlock(),createElementBlock(`div`,_hoisted_24,[_cache[46]||(_cache[46]=createBaseVNode(`p`,null,`Granted permissions`,-1)),createBaseVNode(`ul`,null,[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(connection).grantedScopes,scope=>{return openBlock(),createElementBlock(`li`,{key:scope},toDisplayString(permissionLabels.value[scope]||scope),1)}),128))])])):createCommentVNode(``,true),unref(connection).verifiedAt?(openBlock(),createElementBlock(`p`,_hoisted_25,[_cache[47]||(_cache[47]=createTextVNode(`Last verified: `,-1)),createBaseVNode(`time`,{datetime:unref(connection).verifiedAt},toDisplayString(new Date(unref(connection).verifiedAt).toLocaleString()),9,_hoisted_26)])):createCommentVNode(``,true),unref(connection).accountLabel?(openBlock(),createElementBlock(`p`,_hoisted_27,`Connected account: `+toDisplayString(unref(connection).accountLabel),1)):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_28,[unref(connection).status===`pending`?(openBlock(),createElementBlock(Fragment,{key:0},[createVNode(VBtn,{height:`48`,href:unref(connection).authorizationUrl,target:`_blank`,rel:`noopener noreferrer`,disabled:disabled.value},{default:withCtx(()=>[..._cache[48]||(_cache[48]=[createTextVNode(`Continue with provider`,-1)])]),_:1},8,[`href`,`disabled`]),createVNode(VBtn,{height:`48`,variant:`text`,disabled:disabled.value,onClick:_cache[8]||(_cache[8]=$event=>unref(runSetup)(`cancel`))},{default:withCtx(()=>[..._cache[49]||(_cache[49]=[createTextVNode(`Cancel connection`,-1)])]),_:1},8,[`disabled`])],64)):[`disconnected`,`connected`,`reconnect-required`].includes(unref(connection).status)?(openBlock(),createElementBlock(Fragment,{key:1},[provider.value?.verificationFields?.length?(openBlock(),createElementBlock(`div`,_hoisted_29,[_cache[50]||(_cache[50]=createBaseVNode(`h4`,null,`Verify access`,-1)),_cache[51]||(_cache[51]=createBaseVNode(`p`,null,`These values are used for this connection check and are not saved in source.`,-1)),(openBlock(true),createElementBlock(Fragment,null,renderList(provider.value.verificationFields,field=>{return openBlock(),createBlock(VTextField,{key:field.name,modelValue:unref(verificationInput)[field.name],"onUpdate:modelValue":$event=>unref(verificationInput)[field.name]=$event,label:field.label,hint:field.hint,"persistent-hint":``,required:field.required,disabled:unref(dirty)||disabled.value},null,8,[`modelValue`,`onUpdate:modelValue`,`label`,`hint`,`required`,`disabled`])}),128)),verificationIncomplete.value?(openBlock(),createElementBlock(`p`,_hoisted_30,`Enter the required verification inputs before connecting.`)):createCommentVNode(``,true)])):createCommentVNode(``,true),createVNode(VBtn,{height:`48`,color:`primary`,disabled:unref(dirty)||disabled.value||verificationIncomplete.value,onClick:_cache[9]||(_cache[9]=$event=>unref(runSetup)(`connect`))},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(connection).status===`disconnected`?`Connect account`:unref(connection).status===`connected`&&selected.value.authentication.method!==`oauth2`?`Verify again`:`Reconnect`),1)]),_:1},8,[`disabled`])],64)):createCommentVNode(``,true),[`connected`,`reconnect-required`].includes(unref(connection).status)?(openBlock(),createBlock(VBtn,{key:2,height:`48`,variant:`text`,disabled:unref(dirty)||disabled.value,onClick:_cache[10]||(_cache[10]=$event=>disconnectOpen.value=true)},{default:withCtx(()=>[..._cache[52]||(_cache[52]=[createTextVNode(`Disconnect`,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true)])],64)):createCommentVNode(``,true),unref(connectionError)?(openBlock(),createBlock(VAlert,{key:3,type:`error`,variant:`tonal`,role:`alert`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(connectionError)),1)]),_:1})):createCommentVNode(``,true),createVNode(VBtn,{height:`48`,variant:`text`,disabled:unref(dirty)||disabled.value,onClick:_cache[11]||(_cache[11]=$event=>unref(runSetup)(`status`))},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(setupCommand).isRunning?`Checking…`:`Check connection`),1)]),_:1},8,[`disabled`])],64)),!production.value&&__props.dashboardContext.requestAssistantDraft&&__props.dashboardContext.assistantDraftAvailable&&(configurationOnly.value||selected.value.accountMode===`per-user`||unref(connection)?.status===`unconfigured`&&!unref(connection).setupIssue)?(openBlock(),createElementBlock(Fragment,{key:3},[createVNode(VBtn,{height:`48`,variant:`tonal`,disabled:unref(dirty)||disabled.value,onClick:_cache[12]||(_cache[12]=$event=>__props.dashboardContext.requestAssistantDraft(setupPrompt.value))},{default:withCtx(()=>[createTextVNode(toDisplayString(selected.value.accountMode===`per-user`?`Prepare app user connection request`:`Prepare setup request`),1)]),_:1},8,[`disabled`]),_cache[53]||(_cache[53]=createBaseVNode(`p`,null,`Adds a request to your chat draft for review before sending.`,-1))],64)):createCommentVNode(``,true)]),provider.value?(openBlock(),createBlock(unref(IntegrationConfigurationFields_default),{key:0,modelValue:unref(configuration),"onUpdate:modelValue":_cache[13]||(_cache[13]=$event=>isRef(configuration)?configuration.value=$event:null),"integration-id":selectedId.value,provider:provider.value,"field-errors":unref(fieldErrors),disabled:production.value||disabled.value},null,8,[`modelValue`,`integration-id`,`provider`,`field-errors`,`disabled`])):(openBlock(),createElementBlock(`p`,_hoisted_31,`This provider's configuration is preserved. Edit its configuration in Files.`)),provider.value?.id===`google-ads`&&selected.value.accountMode===`shared`?(openBlock(),createBlock(_sfc_main$4,{key:navigationKey.value+selectedId.value,modelValue:unref(configuration),"onUpdate:modelValue":_cache[14]||(_cache[14]=$event=>isRef(configuration)?configuration.value=$event:null),"integration-id":selectedId.value,disabled:production.value||disabled.value,"application-public-url":__props.dashboardContext.applicationPublicUrl,result:unref(adsResult),error:unref(adsError),loading:unref(setupCommand).isRunning,"management-disabled":production.value||unref(dirty)||disabled.value||__props.dashboardContext.owner===false,"can-prepare":!production.value&&Boolean(__props.dashboardContext.requestAssistantDraft)&&__props.dashboardContext.assistantDraftAvailable&&__props.dashboardContext.owner!==false,onManage:unref(runAdsOperation),onPrepare:_cache[15]||(_cache[15]=$event=>__props.dashboardContext.requestAssistantDraft(setupPrompt.value))},null,8,[`modelValue`,`integration-id`,`disabled`,`application-public-url`,`result`,`error`,`loading`,`management-disabled`,`can-prepare`,`onManage`])):createCommentVNode(``,true),[`stripe`,`paddle`].includes(provider.value?.id)?(openBlock(),createBlock(_sfc_main$3,{key:3,modelValue:unref(configuration),"onUpdate:modelValue":_cache[16]||(_cache[16]=$event=>isRef(configuration)?configuration.value=$event:null),"integration-id":selectedId.value,disabled:production.value||disabled.value,"application-public-url":__props.dashboardContext.applicationPublicUrl,onSetEnv:openPaymentEnv,management:unref(paymentResult),"management-error":unref(paymentError),"management-loading":unref(setupCommand).isRunning,"management-operation":unref(paymentOperation),"management-disabled":unref(dirty)||disabled.value||__props.dashboardContext.owner===false||production.value&&!unref(releaseId),"can-prepare":!production.value&&Boolean(__props.dashboardContext.requestAssistantDraft)&&__props.dashboardContext.assistantDraftAvailable&&__props.dashboardContext.owner!==false,onPrepare:_cache[17]||(_cache[17]=$event=>__props.dashboardContext.requestAssistantDraft(setupPrompt.value)),onManage:unref(runPaymentOperation)},null,8,[`modelValue`,`integration-id`,`disabled`,`application-public-url`,`management`,`management-error`,`management-loading`,`management-operation`,`management-disabled`,`can-prepare`,`onManage`])):createCommentVNode(``,true),provider.value?.id===`n8n`&&!production.value?(openBlock(),createElementBlock(`section`,_hoisted_32,[_cache[60]||(_cache[60]=createBaseVNode(`h3`,{class:`text-title-medium`},`Connect with n8n OAuth`,-1)),_cache[61]||(_cache[61]=createBaseVNode(`p`,null,`In n8n, open Settings → Instance-level MCP and enable access. Copy its full Server URL into the field above, then discover OAuth settings. This reads public metadata; it does not register a client or connect an account.`,-1)),createVNode(VBtn,{height:`48`,variant:`outlined`,disabled:disabled.value||!selected.value.settings?.serverUrl,loading:unref(discoveryCommand).isRunning,onClick:unref(discoverN8n)},{default:withCtx(()=>[..._cache[54]||(_cache[54]=[createTextVNode(`Discover OAuth settings`,-1)])]),_:1},8,[`disabled`,`loading`,`onClick`]),unref(discoveryError)?(openBlock(),createElementBlock(`p`,_hoisted_33,toDisplayString(unref(discoveryError)),1)):createCommentVNode(``,true),selected.value.settings?.oauthDiscovery?(openBlock(),createElementBlock(Fragment,{key:1},[createBaseVNode(`p`,null,`Discovered authority: `+toDisplayString(selected.value.settings.oauthDiscovery.oauth.issuer),1),selected.value.settings.oauthDiscovery.resource!==selected.value.settings.serverUrl?(openBlock(),createElementBlock(`p`,_hoisted_34,`The Server URL has changed. Discover its settings again before using OAuth.`)):createCommentVNode(``,true),_cache[59]||(_cache[59]=createBaseVNode(`p`,null,`Choose OAuth in Authentication above, then select the permissions this application needs. Follow the OAuth setup instructions to register your client. You can also keep the API key method.`,-1)),selected.value.authentication.method===`oauth2`&&(!registration.value?.clientId||registration.value.clientId===`MISSING`)?(openBlock(),createElementBlock(Fragment,{key:1},[_cache[56]||(_cache[56]=createBaseVNode(`p`,null,`Set the Suggested callback URL below and choose permissions above. Registering creates one client at the displayed n8n authority, saves this configuration and stores its secret, callback and recovery client ID in development Env. Existing Env values will not be replaced. Your application must already serve the callback and connection setup command to continue into consent.`,-1)),createVNode(VBtn,{height:`48`,color:`primary`,disabled:disabled.value||__props.dashboardContext.owner===false||unref(registrationNeedsReview)||!callbackUrl.value||!selected.value.scopes.length||selected.value.settings.oauthDiscovery.resource!==selected.value.settings.serverUrl,loading:unref(registrationCommand).isRunning,onClick:_cache[18]||(_cache[18]=$event=>unref(registerOAuthClient)(callbackUrl.value))},{default:withCtx(()=>[..._cache[55]||(_cache[55]=[createTextVNode(`Register client and connect`,-1)])]),_:1},8,[`disabled`,`loading`])],64)):createCommentVNode(``,true),unref(registrationError)?(openBlock(),createElementBlock(`p`,_hoisted_35,toDisplayString(unref(registrationError)),1)):createCommentVNode(``,true),unref(registrationNeedsReview)&&!unref(registrationCommand).isRunning?(openBlock(),createElementBlock(Fragment,{key:3},[_cache[58]||(_cache[58]=createBaseVNode(`p`,null,`A failed request may still have created a client. Inspect n8n and project Env before another attempt; recover saved credentials when present.`,-1)),createVNode(VBtn,{height:`48`,variant:`text`,disabled:disabled.value,onClick:_cache[19]||(_cache[19]=$event=>registrationNeedsReview.value=false)},{default:withCtx(()=>[..._cache[57]||(_cache[57]=[createTextVNode(`I checked n8n and Env — allow another attempt`,-1)])]),_:1},8,[`disabled`])],64)):createCommentVNode(``,true)],64)):createCommentVNode(``,true)])):createCommentVNode(``,true),[`amplitude`,`atlassian`,`confidence-exp`,`confidence-flags`,`sanity`,`sentry`,`granola`,`hex`,`heygen`].includes(provider.value?.id)&&selected.value?.authentication.method===`oauth2`&&!production.value&&(!registration.value?.clientId||registration.value.clientId===`MISSING`)?(openBlock(),createElementBlock(`section`,{key:5,"aria-label":`${provider.value.name} client registration`,class:`mt-4`},[createBaseVNode(`p`,null,`Choose permissions above (and Region for Amplitude or workspace endpoint for Hex), then set the Suggested callback URL below. Registering creates a `+toDisplayString(provider.value.name)+` OAuth client and saves its ID in configuration and its secret, callback and recovery ID in development Env. Existing Env values will not be replaced. Your application must implement the callback and setup command to complete consent.`,1),createVNode(VBtn,{height:`48`,color:`primary`,disabled:disabled.value||__props.dashboardContext.owner===false||unref(registrationNeedsReview)||unref(registrationCommand).isRunning||!callbackUrl.value||!selected.value.scopes.length||provider.value.id===`amplitude`&&!selected.value.scopes.includes(`mcp:read`),onClick:_cache[20]||(_cache[20]=$event=>unref(registerOAuthClient)(callbackUrl.value))},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(registrationCommand).isRunning?`Registering client…`:`Register client and connect`),1)]),_:1},8,[`disabled`]),unref(registrationError)?(openBlock(),createElementBlock(`p`,_hoisted_37,toDisplayString(unref(registrationError)),1)):createCommentVNode(``,true),unref(registrationNeedsReview)&&!unref(registrationCommand).isRunning?(openBlock(),createElementBlock(Fragment,{key:1},[createBaseVNode(`p`,null,`An unsuccessful request may still have created a client. Inspect `+toDisplayString(provider.value.name)+` and project Env before another attempt; recover saved credentials when present.`,1),createVNode(VBtn,{height:`48`,variant:`text`,disabled:disabled.value,onClick:_cache[21]||(_cache[21]=$event=>registrationNeedsReview.value=false)},{default:withCtx(()=>[createTextVNode(`I checked `+toDisplayString(provider.value.name)+` and Env — allow another attempt`,1)]),_:1},8,[`disabled`])],64)):createCommentVNode(``,true)],8,_hoisted_36)):createCommentVNode(``,true),production.value?(openBlock(),createElementBlock(`p`,_hoisted_38,`Production Env is managed on Deploy. Deploy changes to apply them to the running release.`)):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(credentials.value,credential=>{return openBlock(),createElementBlock(`section`,{key:credential.label,"aria-label":credential.label,class:`mt-4`},[createBaseVNode(`h3`,_hoisted_40,toDisplayString(credential.label),1),createBaseVNode(`p`,null,`Save the credential as `+toDisplayString(credential.key)+` in `+toDisplayString(environment.value)+` Env. Your application receives it through Env.`,1),credential.public?(openBlock(),createElementBlock(`p`,_hoisted_41,`Your application may expose this key in its frontend. Use a key restricted to data those users may read.`)):createCommentVNode(``,true),unref(dirty)?(openBlock(),createElementBlock(`p`,_hoisted_42,`Save configuration first, then enter the credential.`)):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_43,[!credentialLinked(credential.key)?(openBlock(),createBlock(VBtn,{key:0,height:`48`,variant:`text`,disabled:unref(dirty)||disabled.value,to:{path:unref(projectAppPath)(unref(projectSlug),production.value?`/dashboard/deploy`:`/dashboard/env`),query:{prefillKey:credential.key,prefillSecret:`true`}}},{default:withCtx(()=>[createTextVNode(toDisplayString(production.value?`Open production Env`:`Set credential in Env`),1)]),_:1},8,[`disabled`,`to`])):createCommentVNode(``,true),unref(savedValues)&&!unref(dirty)?(openBlock(),createBlock(resolveDynamicComponent(unref(savedValues).component),{key:`${environment.value}:${credential.key}`,environment:environment.value,placement:`integration-credential`,"project-slug":unref(projectSlug),provider:selected.value?.provider||``,secret:!credential.public,variable:credential.key,onLinked:$event=>setCredentialLinked(credential.key,$event)},null,40,[`environment`,`project-slug`,`provider`,`secret`,`variable`,`onLinked`])):createCommentVNode(``,true)])],8,_hoisted_39)}),128)),callbackKey.value?(openBlock(),createElementBlock(`section`,_hoisted_44,[_cache[64]||(_cache[64]=createBaseVNode(`h3`,{class:`text-title-medium`},`Application callback`,-1)),unref(connection)?.callbackUrl?(openBlock(),createElementBlock(Fragment,{key:0},[createVNode(VTextField,{"model-value":unref(connection).callbackUrl,label:`Configured callback URL`,readonly:``,"persistent-hint":``,hint:`Reported by your application's setup command from its current configuration.`},null,8,[`model-value`]),createVNode(VBtn,{height:`48`,variant:`text`,onClick:_cache[22]||(_cache[22]=$event=>copySetupValue(unref(connection).callbackUrl))},{default:withCtx(()=>[..._cache[62]||(_cache[62]=[createTextVNode(`Copy configured callback URL`,-1)])]),_:1}),callbackUrl.value&&callbackUrl.value!==unref(connection).callbackUrl?(openBlock(),createElementBlock(`p`,_hoisted_45,`The proposed URL differs from the application's configured callback. To change it, update Env and the provider's allowed redirect URLs. You may need to reconnect the account after changing the callback. Existing Env values are preserved until you save a replacement.`)):createCommentVNode(``,true)],64)):createCommentVNode(``,true),createVNode(VTextField,{modelValue:callbackUrl.value,"onUpdate:modelValue":_cache[23]||(_cache[23]=$event=>callbackUrl.value=$event),label:`Suggested callback URL`,"persistent-hint":``,hint:`Your application must serve this route. Register the same URL with the provider and save it in Env.`},null,8,[`modelValue`]),!callbackUrl.value?(openBlock(),createElementBlock(`p`,_hoisted_46,`An application address is not available for this suggestion. Enter the full callback URL your application serves; do not use the editor dashboard address.`)):createCommentVNode(``,true),_cache[65]||(_cache[65]=createBaseVNode(`p`,null,`This suggestion does not replace an existing Env value.`,-1)),createVNode(VBtn,{height:`48`,variant:`text`,disabled:!callbackUrl.value,onClick:_cache[24]||(_cache[24]=$event=>copySetupValue(callbackUrl.value))},{default:withCtx(()=>[..._cache[63]||(_cache[63]=[createTextVNode(`Copy callback URL`,-1)])]),_:1},8,[`disabled`]),setupCopyMessage.value?(openBlock(),createElementBlock(`p`,_hoisted_47,toDisplayString(setupCopyMessage.value),1)):createCommentVNode(``,true),createVNode(VBtn,{height:`48`,variant:`text`,disabled:!callbackUrl.value,to:{path:unref(projectAppPath)(unref(projectSlug),production.value?`/dashboard/deploy`:`/dashboard/env`),query:{prefillKey:callbackKey.value,prefillValue:callbackUrl.value}}},{default:withCtx(()=>[createTextVNode(toDisplayString(production.value?`Open production Env`:`Set callback in Env`),1)]),_:1},8,[`disabled`,`to`])])):createCommentVNode(``,true),provider.value?.setup?(openBlock(),createBlock(VExpansionPanels,{key:8,class:`mt-4`},{default:withCtx(()=>[createVNode(VExpansionPanel,{title:`Set up ${provider.value.name}`},{default:withCtx(()=>[createVNode(VExpansionPanelText,null,{default:withCtx(()=>[production.value?(openBlock(),createElementBlock(`p`,_hoisted_48,`For the credential and callback Env steps below, use Open production Env. Save values in the deployed application's environment.`)):createCommentVNode(``,true),createBaseVNode(`ol`,_hoisted_49,[(openBlock(true),createElementBlock(Fragment,null,renderList(provider.value.setup.stepsForSettings?.(selected.value?.settings||{},selected.value?.authentication.method)||provider.value.setup.stepsByAuthentication?.[selected.value?.authentication.method]||provider.value.setup.steps,step=>{return openBlock(),createElementBlock(`li`,{key:step},toDisplayString(step),1)}),128))]),clientMetadata.value?(openBlock(),createElementBlock(`section`,_hoisted_50,[_cache[67]||(_cache[67]=createBaseVNode(`h3`,{class:`text-title-medium`},`Client metadata document`,-1)),_cache[68]||(_cache[68]=createBaseVNode(`p`,null,`Serve this public JSON at the Client metadata URL entered above, with Content-Type application/json and no login requirement. Your application owns that endpoint.`,-1)),createVNode(VTextarea,{"model-value":clientMetadata.value.json,label:`Client metadata JSON`,readonly:``,rows:`10`},null,8,[`model-value`]),clientMetadata.value.error?(openBlock(),createElementBlock(`p`,_hoisted_51,toDisplayString(clientMetadata.value.error),1)):createCommentVNode(``,true),createVNode(VBtn,{height:`48`,variant:`text`,disabled:!clientMetadata.value.json,onClick:_cache[25]||(_cache[25]=$event=>copySetupValue(clientMetadata.value.json,`Client metadata`))},{default:withCtx(()=>[..._cache[66]||(_cache[66]=[createTextVNode(`Copy client metadata`,-1)])]),_:1},8,[`disabled`]),setupCopyMessage.value?(openBlock(),createElementBlock(`p`,_hoisted_52,toDisplayString(setupCopyMessage.value),1)):createCommentVNode(``,true),_cache[69]||(_cache[69]=createBaseVNode(`p`,null,`This document uses the current name, metadata URL and suggested callback. Update the hosted document when these change, and obtain any required callback approval. Copying does not put it online or grant provider access.`,-1))])):createCommentVNode(``,true),clientRegistrationEndpoint.value?(openBlock(),createElementBlock(`section`,_hoisted_53,[_cache[72]||(_cache[72]=createBaseVNode(`h3`,{class:`text-title-medium`},`OAuth client registration`,-1)),_cache[73]||(_cache[73]=createBaseVNode(`p`,null,`Before entering a Client ID, register a client for this application. In your HTTP client, create a POST request to the address below, set Content-Type to application/json, and paste the request body as raw JSON.`,-1)),createVNode(VTextField,{"model-value":clientRegistrationEndpoint.value,label:`Registration endpoint`,readonly:``},null,8,[`model-value`]),createVNode(VBtn,{height:`48`,variant:`text`,onClick:_cache[26]||(_cache[26]=$event=>copySetupValue(clientRegistrationEndpoint.value,`Registration endpoint`))},{default:withCtx(()=>[..._cache[70]||(_cache[70]=[createTextVNode(`Copy registration endpoint`,-1)])]),_:1}),_cache[74]||(_cache[74]=createBaseVNode(`p`,null,`The request uses the suggested callback above and the permissions currently selected in this form. Confirm the callback is the route your application will serve. Changing the form does not update a client already registered with the provider.`,-1)),createVNode(VTextarea,{"model-value":clientRegistrationBody.value,label:`Registration request body`,readonly:``,rows:`10`},null,8,[`model-value`]),!clientRegistrationBody.value?(openBlock(),createElementBlock(`p`,_hoisted_54,`Enter your application's suggested callback URL above to prepare the request.`)):createCommentVNode(``,true),createVNode(VBtn,{height:`48`,variant:`text`,disabled:!clientRegistrationBody.value,onClick:_cache[27]||(_cache[27]=$event=>copySetupValue(clientRegistrationBody.value,`Registration request`))},{default:withCtx(()=>[..._cache[71]||(_cache[71]=[createTextVNode(`Copy registration request`,-1)])]),_:1},8,[`disabled`]),setupCopyMessage.value?(openBlock(),createElementBlock(`p`,_hoisted_55,toDisplayString(setupCopyMessage.value),1)):createCommentVNode(``,true),createBaseVNode(`p`,null,`Send the request once. Copy client_id from a successful response into Client ID, then save configuration. Store client_secret in the project's Env using `+toDisplayString(registration.value.clientSecretRef)+`. Store the exact registered callback using `+toDisplayString(registration.value.callbackUrlRef)+`. The fields here contain Env references, not the secret itself.`,1),_cache[75]||(_cache[75]=createBaseVNode(`p`,null,`Keep the response private. Missing credentials, an error response or a different returned redirect URI is not a completed registration. A timeout may leave a client created: investigate before retrying. Copying this request does not send it or connect an account; user consent happens later.`,-1))])):createCommentVNode(``,true),createVNode(VBtn,{class:`mt-3`,height:`48`,to:unref(projectAppPath)(unref(projectSlug),production.value?`/dashboard/deploy`:`/dashboard/env`),variant:`text`},{default:withCtx(()=>[..._cache[76]||(_cache[76]=[createTextVNode(`Open Env`,-1)])]),_:1},8,[`to`]),createVNode(VBtn,{height:`48`,href:provider.value.setup.urlForSettings?.(selected.value?.settings||{},selected.value?.authentication.method)||provider.value.setup.urlByAuthentication?.[selected.value?.authentication.method]||provider.value.setup.url,target:`_blank`,rel:`noopener`,variant:`text`},{default:withCtx(()=>[..._cache[77]||(_cache[77]=[createTextVNode(`Provider setup guide`,-1)])]),_:1},8,[`href`])]),_:1})]),_:1},8,[`title`])]),_:1})):createCommentVNode(``,true)],64)):(openBlock(),createElementBlock(Fragment,{key:1},[createBaseVNode(`h2`,null,toDisplayString(production.value?`Select a deployed integration`:`Add a service`),1),_cache[78]||(_cache[78]=createBaseVNode(`p`,null,`Choose a service or an existing configuration to get started.`,-1))],64))],512)]),!production.value?(openBlock(),createElementBlock(`footer`,_hoisted_56,[createBaseVNode(`p`,null,toDisplayString(unref(dirty)?`Unsaved configuration changes.`:`Configuration matches integrations.json.`)+` Account access is verified by your application when a user connects.`,1),createBaseVNode(`div`,_hoisted_57,[createVNode(VBtn,{height:`48`,variant:`text`,disabled:!unref(dirty)||unref(command).isRunning,onClick:_cache[28]||(_cache[28]=$event=>discardOpen.value=true)},{default:withCtx(()=>[..._cache[79]||(_cache[79]=[createTextVNode(`Discard`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{height:`48`,color:`primary`,disabled:!unref(dirty)||disabled.value,onClick:unref(save)},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(command).isRunning?`Saving…`:`Save configuration`),1)]),_:1},8,[`disabled`,`onClick`])])])):createCommentVNode(``,true)],64)):createCommentVNode(``,true),createVNode(VDialog,{modelValue:discardOpen.value,"onUpdate:modelValue":_cache[31]||(_cache[31]=$event=>discardOpen.value=$event),"max-width":`440`},{default:withCtx(()=>[createVNode(VCard,{title:`Discard configuration changes?`},{default:withCtx(()=>[createVNode(VCardText,null,{default:withCtx(()=>[..._cache[80]||(_cache[80]=[createTextVNode(`Your unsaved form changes will be replaced by integrations.json.`,-1)])]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VBtn,{height:`48`,onClick:_cache[29]||(_cache[29]=$event=>discardOpen.value=false)},{default:withCtx(()=>[..._cache[81]||(_cache[81]=[createTextVNode(`Keep editing`,-1)])]),_:1}),createVNode(VBtn,{height:`48`,onClick:_cache[30]||(_cache[30]=$event=>{discardOpen.value=false;unref(discard)()})},{default:withCtx(()=>[..._cache[82]||(_cache[82]=[createTextVNode(`Discard and reload`,-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`]),createVNode(VDialog,{modelValue:disconnectOpen.value,"onUpdate:modelValue":_cache[34]||(_cache[34]=$event=>disconnectOpen.value=$event),"max-width":`440`},{default:withCtx(()=>[createVNode(VCard,{title:`Disconnect this application account?`},{default:withCtx(()=>[createVNode(VCardText,null,{default:withCtx(()=>[createBaseVNode(`p`,null,`This removes `+toDisplayString(unref(projectSlug))+`'s saved `+toDisplayString(environment.value)+` connection and pending consent attempts. Features using this connection will need it connected again.`,1),_cache[83]||(_cache[83]=createBaseVNode(`p`,{class:`mt-3`},`Provider permissions are not revoked. To revoke consent or an API key, use the provider's account settings; that may affect other apps using the same registration or key. Saved configuration and credentials in Env stay available.`,-1))]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VBtn,{height:`48`,onClick:_cache[32]||(_cache[32]=$event=>disconnectOpen.value=false)},{default:withCtx(()=>[..._cache[84]||(_cache[84]=[createTextVNode(`Keep connection`,-1)])]),_:1}),createVNode(VBtn,{height:`48`,color:`error`,onClick:_cache[33]||(_cache[33]=$event=>{disconnectOpen.value=false;unref(runSetup)(`disconnect`)})},{default:withCtx(()=>[..._cache[85]||(_cache[85]=[createTextVNode(`Disconnect account`,-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`]),createVNode(VDialog,{modelValue:removeOpen.value,"onUpdate:modelValue":_cache[36]||(_cache[36]=$event=>removeOpen.value=$event),"max-width":`440`},{default:withCtx(()=>[createVNode(VCard,{title:`Remove this integration?`},{default:withCtx(()=>[configurationOnly.value?(openBlock(),createBlock(VCardText,{key:0},{default:withCtx(()=>[..._cache[86]||(_cache[86]=[createTextVNode(`This removes the public settings when you save. Your application applies the change through its normal configuration or deployment lifecycle. It does not delete provider data or undo events already sent.`,-1)])]),_:1})):(openBlock(),createBlock(VCardText,{key:1},{default:withCtx(()=>[..._cache[87]||(_cache[87]=[createTextVNode(`This changes the application's configuration when you save. Existing account grants and shared app registrations remain available.`,-1)])]),_:1})),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VBtn,{height:`48`,onClick:_cache[35]||(_cache[35]=$event=>removeOpen.value=false)},{default:withCtx(()=>[..._cache[88]||(_cache[88]=[createTextVNode(`Cancel`,-1)])]),_:1}),createVNode(VBtn,{height:`48`,color:`error`,onClick:remove},{default:withCtx(()=>[..._cache[89]||(_cache[89]=[createTextVNode(`Remove integration`,-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`])])}}};var IntegrationsPanel_default=_plugin_vue_export_helper_default(_sfc_main$1,[[`__scopeId`,`data-v-7575554e`]]);var _sfc_main={__name:`index`,props:{dashboardContext:{type:Object,default:()=>({})}},setup(__props){return(_ctx,_cache)=>{return openBlock(),createBlock(IntegrationsPanel_default,{key:__props.dashboardContext.sessionId||`none`,"dashboard-context":__props.dashboardContext},null,8,[`dashboard-context`])}}};export{_sfc_main as default};
|