@onequery/cli 0.1.1-linux-x64 → 0.1.1
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/onequery.js +156 -0
- package/bin/package-constants.js +95 -0
- package/package.json +20 -15
- package/runtime/migrations/20260327065242_curious_nightmare.sql +403 -0
- package/runtime/migrations/meta/20260327065242_snapshot.json +2817 -0
- package/runtime/migrations/meta/_journal.json +13 -0
- package/runtime/web/assets/CompositeItem-BV7KhPQk.js +1 -0
- package/runtime/web/assets/CompositeList-CX7HHxYw.js +1 -0
- package/runtime/web/assets/DialogTitle-z5f0waCI.js +1 -0
- package/runtime/web/assets/IconArrowRight-DsOD7mDl.js +1 -0
- package/runtime/web/assets/IconCheck-Gc24xPT2.js +1 -0
- package/runtime/web/assets/IconChevronDown-B-39MA7-.js +1 -0
- package/runtime/web/assets/IconCoins-C7Nn0L6R.js +1 -0
- package/runtime/web/assets/IconHistory-BqAd-xl2.js +1 -0
- package/runtime/web/assets/IconLoader2-B3B6M8nQ.js +1 -0
- package/runtime/web/assets/IconPlus-C3-kRhGX.js +1 -0
- package/runtime/web/assets/IconX-BQkA009b.js +1 -0
- package/runtime/web/assets/Separator-vw4jPN_6.js +1 -0
- package/runtime/web/assets/_authenticated-C5CjK6Mu.js +1 -0
- package/runtime/web/assets/_org_slug-D94kykq2.js +1 -0
- package/runtime/web/assets/api-base-url-DIb6qukm.js +1 -0
- package/runtime/web/assets/api-client-w1GRwBWy.js +1 -0
- package/runtime/web/assets/api-error-KjK7uFAE.js +1 -0
- package/runtime/web/assets/api-paths-ClEWWGwS.js +1 -0
- package/runtime/web/assets/app-routes-DdRvA1bK.js +1 -0
- package/runtime/web/assets/audit-TXhp0u8O.js +1 -0
- package/runtime/web/assets/auth-bootstrap-query-BhAn1APx.js +1 -0
- package/runtime/web/assets/auth-client-BlMeXgb4.js +3 -0
- package/runtime/web/assets/avatar-DzUYMSvr.js +1 -0
- package/runtime/web/assets/badge-DHOXVqXh.js +1 -0
- package/runtime/web/assets/budget-BaZbMGkP.js +1 -0
- package/runtime/web/assets/callback-8KQafZFQ.js +1 -0
- package/runtime/web/assets/card-Bsy6azfK.js +1 -0
- package/runtime/web/assets/checkbox-L6MjK5Df.js +1 -0
- package/runtime/web/assets/compiler-runtime-DCc3R3Xn.js +1 -0
- package/runtime/web/assets/connect-database-DhHeQ0pY.js +1 -0
- package/runtime/web/assets/create-org-C60JHlxs.js +1 -0
- package/runtime/web/assets/createReactComponent-_L2mp4Ui.js +1 -0
- package/runtime/web/assets/data-source-connection-form-Dbf1vMmU.js +173 -0
- package/runtime/web/assets/device-BKmB0Ojy.js +1 -0
- package/runtime/web/assets/dropdown-menu-CEyg7UUK.js +1 -0
- package/runtime/web/assets/empty-COnWCwda.js +1 -0
- package/runtime/web/assets/getDisabledMountTransitionStyles-BYKRz4ha.js +1 -0
- package/runtime/web/assets/getPseudoElementBounds-InhM-dWf.js +12 -0
- package/runtime/web/assets/home-BN45-W_R.js +1 -0
- package/runtime/web/assets/index-Dh_88m70.js +10 -0
- package/runtime/web/assets/index-FAyK3-UK.css +2 -0
- package/runtime/web/assets/input-DZ9QHu2b.js +1 -0
- package/runtime/web/assets/integrations-BSVo3EhL.js +1 -0
- package/runtime/web/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- package/runtime/web/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- package/runtime/web/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- package/runtime/web/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- package/runtime/web/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- package/runtime/web/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- package/runtime/web/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- package/runtime/web/assets/invite._invitationId-BFlHHn20.js +1 -0
- package/runtime/web/assets/jsx-runtime-DG_AJzB_.js +1 -0
- package/runtime/web/assets/label-CWOhoN_L.js +1 -0
- package/runtime/web/assets/link-Cgvqhh5w.js +1 -0
- package/runtime/web/assets/matchContext-CDajBC0L.js +1 -0
- package/runtime/web/assets/organization-permissions-BQQ5PJbI.js +1 -0
- package/runtime/web/assets/organization-query-keys-uOvv8Ob1.js +1 -0
- package/runtime/web/assets/query-timing-LGzitMXx.js +1 -0
- package/runtime/web/assets/queryOptions-BHw87wTZ.js +1 -0
- package/runtime/web/assets/removable-BfDesq3B.js +1 -0
- package/runtime/web/assets/routes-6XMkyZd6.js +1 -0
- package/runtime/web/assets/schemas-BdEYnr23.js +39 -0
- package/runtime/web/assets/select-CxmfKkmB.js +1 -0
- package/runtime/web/assets/separator-BQc-hryc.js +1 -0
- package/runtime/web/assets/settings-5_Ep5M2N.js +1 -0
- package/runtime/web/assets/signin-BtRJc1yx.js +1 -0
- package/runtime/web/assets/src-DCIPwIx0.js +1 -0
- package/runtime/web/assets/table-DCvfJyLS.js +1 -0
- package/runtime/web/assets/team-DrtYsBm8.js +1 -0
- package/runtime/web/assets/textarea-DiU04l_U.js +1 -0
- package/runtime/web/assets/theme-toggle-b9r_T-hF.js +1 -0
- package/runtime/web/assets/use-optimistic-mutation-BlewMk5s.js +1 -0
- package/runtime/web/assets/useBaseQuery-BATLGzdG.js +1 -0
- package/runtime/web/assets/useBaseUiId-BLFGpnYJ.js +1 -0
- package/runtime/web/assets/useCompositeItem-DkdkBgiU.js +1 -0
- package/runtime/web/assets/useControlled-C1S7R-1A.js +1 -0
- package/runtime/web/assets/useQuery-FSZF3_9j.js +1 -0
- package/runtime/web/assets/useRender-DFMo54_d.js +1 -0
- package/runtime/web/assets/useRouterState-DpT8luFk.js +1 -0
- package/runtime/web/assets/useSuspenseQuery-BGsqElb3.js +1 -0
- package/runtime/web/assets/useValueChanged-CqxkrqWn.js +1 -0
- package/runtime/web/assets/utils-C8DGLIgm.js +1 -0
- package/runtime/web/assets/xstate-react.esm-BlF76DuP.js +1 -0
- package/runtime/web/assets/zod-D2loGbpH.js +1 -0
- package/runtime/web/images/amplitude/step1_settings_sidebar.png +0 -0
- package/runtime/web/images/amplitude/step2_projects.png +0 -0
- package/runtime/web/images/amplitude/step3_project_keys.png +0 -0
- package/runtime/web/images/amplitude/step4_api_keys.png +0 -0
- package/runtime/web/images/bigquery/step1_service_accounts.png +0 -0
- package/runtime/web/images/bigquery/step2_bigquery_roles.png +0 -0
- package/runtime/web/images/bigquery/step3_add_key_menu.png +0 -0
- package/runtime/web/images/bigquery/step4_create_json_key.png +0 -0
- package/runtime/web/images/ga4/step1_service_accounts.png +0 -0
- package/runtime/web/images/ga4/step2_create_json_key.png +0 -0
- package/runtime/web/images/ga4/step3_add_user_viewer.png +0 -0
- package/runtime/web/images/ga4/step4_property_details.png +0 -0
- package/runtime/web/images/github-token-guide/step1_signin.png +0 -0
- package/runtime/web/images/github-token-guide/step2_new_fine_grained_token_sanitized.png +0 -0
- package/runtime/web/images/github-token-guide/step3_permissions_configured_sanitized.png +0 -0
- package/runtime/web/images/github-token-guide/step4_token_created_sanitized.png +0 -0
- package/runtime/web/images/mixpanel/step1_service_accounts.png +0 -0
- package/runtime/web/images/mixpanel/step2_create_service_account.png +0 -0
- package/runtime/web/images/mixpanel/step3_credentials.png +0 -0
- package/runtime/web/images/mixpanel/step4_project_settings.png +0 -0
- package/runtime/web/images/postgresql/step1_create_user.png +0 -0
- package/runtime/web/images/postgresql/step2_connection.png +0 -0
- package/runtime/web/images/rds/step1_connect.png +0 -0
- package/runtime/web/images/rds/step2_create_user.png +0 -0
- package/runtime/web/images/rds/step3_grant.png +0 -0
- package/runtime/web/images/rds/step4_info.png +0 -0
- package/runtime/web/images/sentry/step1_personal_tokens.png +0 -0
- package/runtime/web/images/sentry/step2_create_token_permissions.png +0 -0
- package/runtime/web/images/sentry/step3_organization_slug.png +0 -0
- package/runtime/web/images/sentry/step4_project_slug.png +0 -0
- package/runtime/web/index.html +47 -0
- package/runtime/web/linear.svg +1 -0
- package/runtime/web/onequery.svg +14 -0
- package/vendor/x86_64-unknown-linux-musl/onequery/onequery +0 -0
- package/vendor/x86_64-unknown-linux-musl/server/onequery-server +0 -0
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import{i as e,n as t,t as n}from"./jsx-runtime-DG_AJzB_.js";import{t as r}from"./compiler-runtime-DCc3R3Xn.js";import{n as i}from"./api-base-url-DIb6qukm.js";import{S as a,a as o,d as s,g as c,i as l,n as u,x as d,y as f}from"./createReactComponent-_L2mp4Ui.js";import{t as p}from"./utils-C8DGLIgm.js";import{a as m,i as h,n as g,r as _,t as v}from"./select-CxmfKkmB.js";import{c as y,i as b,l as x,r as S,s as C,t as w}from"./use-optimistic-mutation-BlewMk5s.js";import{E as T,i as E,nt as D,tt as O}from"./getDisabledMountTransitionStyles-BYKRz4ha.js";import{i as k,t as A}from"./CompositeList-CX7HHxYw.js";import{d as j,n as M,t as N}from"./useBaseUiId-BLFGpnYJ.js";import{c as P,d as F,f as I,i as L,l as R,r as z,s as B,u as V}from"./schemas-BdEYnr23.js";import{t as H}from"./src-DCIPwIx0.js";import{r as ee}from"./api-error-KjK7uFAE.js";import{X as te,m as ne,p as re}from"./index-Dh_88m70.js";import{t as U}from"./input-DZ9QHu2b.js";import{t as ie}from"./useControlled-C1S7R-1A.js";import"./separator-BQc-hryc.js";import{t as ae}from"./useCompositeItem-DkdkBgiU.js";import{t as W}from"./label-CWOhoN_L.js";import{n as oe,r as G,t as se}from"./textarea-DiU04l_U.js";import{t as ce}from"./api-paths-ClEWWGwS.js";import{n as le,t as ue}from"./zod-D2loGbpH.js";var K=r(),q=e(t(),1),J=n();function Y(e){let t=(0,K.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({size:r,...n}=e,t[0]=e,t[1]=n,t[2]=r);let i=r===void 0?24:r,a,o;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,J.jsx)(`title`,{children:`Linear`}),o=(0,J.jsx)(`path`,{d:`M1.22541 61.5228c-.2225-.9485.90748-1.5459 1.59638-.857L39.3342 97.1782c.6889.6889.0915 1.8189-.857 1.5964C20.0515 94.4522 5.54779 79.9485 1.22541 61.5228ZM.00189135 46.8891c-.01764375.2833.08887215.5599.28957165.7606L52.3503 99.7085c.2007.2007.4773.3075.7606.2896 2.3692-.1476 4.6938-.46 6.9624-.9259.7645-.157 1.0301-1.0963.4782-1.6481L2.57595 39.4485c-.55186-.5519-1.49117-.2863-1.648174.4782-.465915 2.2686-.77832 4.5932-.92588465 6.9624ZM4.21093 29.7054c-.16649.3738-.08169.8106.20765 1.1l64.77602 64.776c.2894.2894.7262.3742 1.1.2077 1.7861-.7956 3.5171-1.6927 5.1855-2.684.5521-.328.6373-1.0867.1832-1.5407L8.43566 24.3367c-.45409-.4541-1.21271-.3689-1.54074.1832-.99132 1.6684-1.88843 3.3994-2.68399 5.1855ZM12.6587 18.074c-.3701-.3701-.393-.9637-.0443-1.3541C21.7795 6.45931 35.1114 0 49.9519 0 77.5927 0 100 22.4073 100 50.0481c0 14.8405-6.4593 28.1724-16.7199 37.3375-.3903.3487-.984.3258-1.3542-.0443L12.6587 18.074Z`}),t[3]=a,t[4]=o):(a=t[3],o=t[4]);let s;return t[5]!==n||t[6]!==i?(s=(0,J.jsxs)(`svg`,{viewBox:`0 0 100 100`,fill:`currentColor`,width:i,height:i,...n,children:[a,o]}),t[5]=n,t[6]=i,t[7]=s):s=t[7],s}function de(e){let t=(0,K.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({size:r,...n}=e,t[0]=e,t[1]=n,t[2]=r);let i=r===void 0?24:r,a,o;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,J.jsx)(`title`,{children:`PostgreSQL`}),o=(0,J.jsx)(`path`,{fillRule:`evenodd`,clipRule:`evenodd`,d:`M123.258 76.784c-.45-2.918-2.901-4.829-5.752-4.958-1.032-.047-2.08.061-3.109.192-1.243.158-2.471.438-3.711.623-.857.128-1.726.187-2.582.275l-.021-.111c1.598-3.018 3.263-6.003 4.775-9.064 1.159-2.348 2.151-4.781 3.176-7.194 1.696-3.998 3.051-8.12 4.173-12.309 1.075-4.011 1.995-8.066 2.284-12.227.116-1.662.196-3.331.187-4.995-.008-1.327-.151-2.656-.284-3.979-.15-1.516-.608-2.953-1.242-4.336-.836-1.822-2.132-3.317-3.496-4.737-1.092-1.137-2.293-2.173-3.484-3.208-1.698-1.477-3.607-2.656-5.59-3.703a32.18 32.18 0 00-7.09-2.75c-1.493-.381-3.02-.664-4.532-.966-.544-.11-1.089-.337-1.633-.337H85.086c-.37 0-.737.191-1.11.233-2.452.273-4.875.735-7.228 1.464-.88.273-1.684.101-2.52.024-.641-.059-1.271-.231-1.912-.263-2.442-.122-4.887-.301-7.328-.275-2.339.024-4.654.409-6.918 1.052-1.895.538-3.749 1.195-5.447 2.191-.727.426-1.303.346-2.055.129-2.527-.729-5.072-1.414-7.639-1.989-1.6-.358-3.245-.536-4.879-.707a57.214 57.214 0 00-4.718-.294c-1.538-.033-3.087-.032-4.618.104a30.16 30.16 0 00-7.158 1.513 23.813 23.813 0 00-7.086 3.865c-2.167 1.715-3.905 3.809-5.303 6.2-1.473 2.523-2.483 5.224-3.111 8.061-.34 1.537-.555 3.117-.788 4.678-.073.486.732.972-.268 1.456v6.794c1 .452.208.903.266 1.356.139 1.089.262 2.187.446 3.268.291 1.711.636 3.417.988 5.117a324.86 324.86 0 001.546 7.111c.396 1.72.847 3.43 1.319 5.131.721 2.598 1.431 5.201 2.246 7.77.757 2.387 1.624 4.74 2.484 7.093 1.191 3.255 2.617 6.405 4.327 9.424 1.479 2.614 3.169 5.062 5.436 7.076 1.494 1.327 3.157 2.347 5.093 2.857 1.521.4 3.067.448 4.624.129a10.979 10.979 0 004.824-2.311c.163-.134.342-.236.535.01.735.931 1.719 1.552 2.748 2.089 2.777 1.448 5.803 1.882 8.877 2.059.744.043 1.496-.064 2.246-.085 1.461-.04 2.881-.325 4.278-.729.732-.212 1.447-.481 2.192-.732.039.793.089 1.557.112 2.321l.104 4.166c.019.634.044 1.27.103 1.901.151 1.627.299 3.255.493 4.877.135 1.118.275 2.245.538 3.336a38.176 38.176 0 002.158 6.428 13.81 13.81 0 003.9 5.185c2.22 1.836 4.822 2.619 7.632 2.764 1.162.061 2.357.004 3.501-.204a49.01 49.01 0 005.387-1.275c3.591-1.084 6.695-2.956 9.014-5.981 1.32-1.724 2.404-3.589 3.1-5.648.574-1.701 1.115-3.419 1.545-5.16.34-1.372.508-2.787.715-4.188.137-.927.219-1.863.305-2.797.14-1.517.283-3.033.384-4.553.07-1.058.067-2.121.109-3.181.013-.323.065-.644.095-.966.028-.298.178-.401.482-.396 1.071.016 2.144.044 3.212-.004 1.197-.054 2.405-.105 3.583-.303a56.542 56.542 0 004.99-1.067c1.943-.508 3.725-1.418 5.44-2.455 1.998-1.207 3.819-2.623 5.297-4.447 1.285-1.591 1.894-3.43 1.584-5.438zm-3.412.982c-.066.915-.485 1.699-1.093 2.369-2.869 3.163-6.468 5.082-10.585 6.027-1.564.358-3.178.544-4.779.692a32.093 32.093 0 01-4.114.097c-1.006-.038-2.004-.268-3.032-.416-.103.94-.201 1.919-.32 2.896l-.479 3.745c-.145 1.187-.258 2.378-.407 3.564-.146 1.151-.328 2.298-.481 3.449-.143 1.072-.248 2.149-.407 3.219-.245 1.64-.479 3.284-.799 4.911-.384 1.945-.973 3.829-1.934 5.583-1.172 2.141-2.834 3.772-4.949 4.98-2.18 1.246-4.563 1.894-6.979 2.436-1.71.384-3.472.447-5.204.291-3.004-.272-5.568-1.557-7.506-3.886-1.85-2.223-3.102-4.771-3.55-7.655a63.102 63.102 0 01-.491-4.136 108.067 108.067 0 01-.299-4.62 250.203 250.203 0 01-.197-5.871c-.053-2.406-.07-4.812-.104-7.218l-.006-.092c-1.224.734-2.427 1.538-3.703 2.2a12.392 12.392 0 01-4.798 1.353c-1.318.1-2.653.191-3.965.086-2.151-.173-4.3-.51-6.226-1.569-.781-.43-1.596-.953-2.134-1.64-1.29-1.646-.672-3.726 1.273-4.727 1.344-.693 2.811-.982 4.268-1.319a44.368 44.368 0 003.761-1.029c1.222-.4 1.993-1.391 2.754-2.363l1.206-1.551c-.503-.053-.977-.107-1.451-.151-1.439-.136-2.812-.532-4.125-1.114-1.124-.497-1.141-.551-1.965.343-1.376 1.494-2.714 3.023-4.062 4.542-.992 1.117-1.978 2.241-2.965 3.361-.978 1.108-1.894 2.279-2.947 3.31-1.564 1.531-3.449 2.452-5.698 2.348-1.443-.066-2.764-.572-3.952-1.399-2.452-1.708-4.104-4.097-5.608-6.606-1.927-3.215-3.406-6.64-4.672-10.159-.876-2.432-1.756-4.866-2.521-7.333-.831-2.681-1.56-5.396-2.277-8.11a157.373 157.373 0 01-1.482-6.182 216.117 216.117 0 01-1.464-7.079c-.298-1.599-.471-3.221-.712-4.831-.325-2.17-.385-4.36-.267-6.539.105-1.963.387-3.921.667-5.871.388-2.698 1.277-5.244 2.556-7.648.783-1.473 1.755-2.812 2.879-4.056 1.845-2.042 4.078-3.518 6.562-4.626 1.736-.774 3.57-1.24 5.439-1.604 2.774-.54 5.573-.519 8.373-.461 1.224.025 2.443.248 3.666.369 2.633.262 5.214.816 7.762 1.5 1.857.498 3.676 1.143 5.518 1.703.185.056.456.051.607-.048 2.496-1.629 5.224-2.704 8.125-3.319 1.101-.233 2.237-.335 3.363-.407 1.369-.087 2.749-.167 4.115-.088 1.642.094 3.276.336 4.908.56.792.108 1.565.383 2.359.458.38.036.783-.242 1.185-.335 2.049-.473 4.089-1 6.156-1.374 1.539-.278 3.111-.409 4.676-.499 1.745-.1 3.503-.173 5.247-.089a36.66 36.66 0 016.555.923c2.677.623 5.245 1.528 7.686 2.784 1.824.938 3.558 2.026 5.119 3.364 1.023.878 2.07 1.745 2.994 2.723 1.14 1.206 2.303 2.413 3.018 3.958.538 1.165.922 2.371 1.028 3.647.132 1.586.292 3.178.277 4.766-.014 1.519-.221 3.037-.368 4.552-.334 3.454-1.085 6.833-1.997 10.167a116.972 116.972 0 01-2.589 8.17c-.879 2.481-1.893 4.917-2.918 7.343a80.07 80.07 0 01-2.458 5.303c-1.677 3.286-3.421 6.538-5.438 9.633-.348.535-.678 1.083-1.018 1.629.88.594 1.877.803 2.881.911.955.104 1.929.166 2.883.095 1.527-.113 3.049-.331 4.567-.544 1.504-.21 2.978-.638 4.522-.525 1.542.112 2.645 1.284 2.54 2.729zm-22.013-3.353c-.655-.846-1.323-1.682-1.964-2.538-1.006-1.344-1.729-2.845-2.455-4.353-.688-1.429-1.532-2.782-2.257-4.195-1.265-2.465-2.553-4.922-3.718-7.435-1.465-3.157-2.62-6.426-2.984-9.923-.154-1.48-.193-2.958.106-4.424.479-2.341 1.702-4.172 3.758-5.428 1.907-1.165 4.032-1.541 6.209-1.659 1.351-.073 2.708-.013 4.11-.013l-.047-.237c-.872-1.823-1.687-3.677-2.641-5.457-1.346-2.512-3.068-4.777-4.986-6.877-1.421-1.555-2.96-2.998-4.646-4.273-1.658-1.255-3.405-2.376-5.269-3.293-2.223-1.093-4.538-1.938-6.967-2.477-2.334-.518-4.683-.835-7.077-.861-2.042-.022-4.071.07-6.06.531-3.002.695-5.748 1.931-8.137 3.933a21.143 21.143 0 00-3.517 3.77c-1.196 1.643-2.161 3.417-2.986 5.277-1.132 2.552-1.909 5.208-2.44 7.938-.266 1.361-.474 2.734-.686 4.106-.074.48-.08.971-.123 1.521.369-.192.635-.34.907-.472l.885-.397c2.993-1.369 6.094-2.25 9.427-2.149 1.416.043 2.771.323 4.03.943 2.415 1.191 3.828 3.216 4.442 5.779.424 1.769.714 3.573.996 5.372.221 1.405.447 2.825.473 4.242.037 2.071-.068 4.146-.181 6.216a17.386 17.386 0 01-1.08 5.146c-1.12 2.993-2.368 5.937-3.534 8.913-.385.983-.681 2.001-1.045 3.082.562 0 1.018-.004 1.474.002.178.003.36.008.532.049 1.34.316 2.502.923 3.455 1.954 1.271 1.372 1.938 2.973 1.972 4.826.019 1.027-.089 2.057-.084 3.084.021 4.786.057 9.572.097 14.357.007.782.046 1.565.102 2.346.117 1.635.235 3.271.395 4.902.112 1.157.268 2.312.451 3.461.259 1.628 1 3.077 1.841 4.462.724 1.191 1.665 2.203 2.905 2.901 2.107 1.186 4.376 1.285 6.663.848 1.545-.295 3.062-.769 4.562-1.258a10.128 10.128 0 003.937-2.354c1.051-1.019 1.797-2.261 2.3-3.632.976-2.659 1.28-5.459 1.684-8.237.151-1.04.282-2.083.42-3.125.157-1.186.316-2.371.468-3.556.112-.883.214-1.768.322-2.651.154-1.268.317-2.535.464-3.804.113-.981.209-1.966.309-2.949.129-1.256.268-2.512.379-3.77.086-.955.051-1.927.22-2.864.311-1.718 1.123-3.18 2.646-4.125.637-.395 1.356-.655 2.063-.989l-.12-.186zm-57.597-7.052a17.526 17.526 0 01-1.354-5.622c-.128-1.825.089-3.643.276-5.46.182-1.76.333-3.528.386-5.296.088-2.906-.108-5.808-.247-8.712-.084-1.729.117-3.479.271-5.212.139-1.561.312-3.126.607-4.664.495-2.581 1.152-5.125 2.086-7.591.887-2.338 1.906-4.615 3.345-6.665.986-1.406 2.105-2.72 3.18-4.094l-.319-.113c-3.498-1.111-7.053-1.979-10.709-2.358-1.729-.179-3.464-.284-5.198-.387-.532-.032-1.072.04-1.606.091-1.322.126-2.66.176-3.961.424-2.214.421-4.338 1.129-6.305 2.282-1.766 1.035-3.249 2.373-4.491 3.978-1.372 1.772-2.295 3.776-2.958 5.913-.783 2.521-1.156 5.115-1.257 7.733-.088 2.295-.132 4.603.264 6.889.295 1.702.492 3.422.817 5.117.443 2.311.918 4.617 1.467 6.904.785 3.274 1.569 6.553 2.499 9.787.89 3.099 1.894 6.17 2.982 9.204.89 2.476 1.919 4.906 3.003 7.304.706 1.562 1.561 3.065 2.457 4.528.953 1.553 2.037 3.027 3.508 4.154 1.856 1.423 3.293 1.644 5.179.083.808-.669 1.491-1.495 2.194-2.282 1.117-1.25 2.195-2.534 3.307-3.788 1.416-1.598 2.85-3.179 4.273-4.769.301-.336.59-.682.883-1.022l-.484-.425a17.695 17.695 0 01-4.095-5.931zm53.688-47.569a61.488 61.488 0 013.309 4.204c2 2.809 3.598 5.842 4.775 9.087.521 1.43.937 2.874.751 4.439-.129 1.096-.118 2.208-.215 3.31-.081.917-.226 1.829-.345 2.743-.178 1.378-.436 2.752-.513 4.136-.073 1.317.003 2.648.086 3.968.084 1.341.265 2.676.388 4.015.139 1.518.326 3.036.369 4.557.035 1.249-.076 2.506-.185 3.753-.13 1.502-.511 2.956-1.079 4.351-.399.982-.876 1.934-1.327 2.917l.181.192.275.213.277-.496a93.621 93.621 0 006.222-11.493 186.333 186.333 0 003.287-7.766c1.624-4.064 2.909-8.242 3.903-12.503.446-1.913.787-3.855 1.09-5.797.236-1.518.433-3.054.477-4.586.047-1.625-.043-3.263-.193-4.884-.112-1.224-.414-2.456-1.181-3.451-1.233-1.602-2.564-3.134-4.201-4.346-1.378-1.021-2.751-2.068-4.23-2.927-2.345-1.36-4.883-2.266-7.535-2.883-2.588-.603-5.21-.863-7.849-.918-1.556-.033-3.119.134-4.672.28-1.407.132-2.805.357-4.222.543 1.52.855 3.019 1.615 4.433 2.511 2.973 1.883 5.637 4.149 7.924 6.831zM55.299 72.514c.961-3.073 2.27-6.007 3.538-8.959 1.028-2.394 1.59-4.916 1.777-7.506.093-1.277.067-2.57.004-3.851a44.628 44.628 0 00-.392-4.259c-.266-1.801-.569-3.603-.995-5.371-.462-1.913-1.627-3.245-3.623-3.736-1.216-.299-2.424-.287-3.653-.093-3.002.473-5.75 1.579-8.31 3.199-.515.326-.798.589-.709 1.328.188 1.565.229 3.155.222 4.735-.01 2.236-.105 4.472-.19 6.707-.028.728-.133 1.452-.211 2.177-.12 1.11-.351 2.219-.344 3.327.007 1.142.124 2.311.401 3.417.88 3.507 2.744 6.377 5.799 8.402 1.879 1.245 3.958 1.873 6.24 1.992.155-.524.293-1.019.446-1.509zm-3.586-30.087c-.402-.844-.172-1.543.76-1.867.227-.08.461-.165.697-.188.324-.032.654-.008.982-.008 1.182.006 2.319.171 3.295.923.626.482.794 1.122.389 1.779-.575.932-1.452 1.4-2.529 1.49-1.697.141-2.888-.65-3.594-2.129zm47.04-.308c.136-1.124.245-2.251.384-3.375.056-.452-.182-.574-.561-.585-1.192-.033-2.384-.075-3.576-.097-1.344-.024-2.652.192-3.896.703-1.38.568-2.431 1.478-2.86 2.98a9.042 9.042 0 00-.293 3.41 20.11 20.11 0 001.193 5.176c.834 2.221 1.707 4.441 2.75 6.569 1.413 2.881 3.012 5.67 4.513 8.507.401.757.738 1.547 1.156 2.431a13.783 13.783 0 001.351-5.622c.041-1.61-.088-3.227-.182-4.838-.059-.986-.198-1.966-.294-2.95-.134-1.371-.337-2.741-.368-4.115-.031-1.397.068-2.802.188-4.197.113-1.338.334-2.665.495-3.997zm-2.689-1.082c-.443 1.223-1.39 1.913-2.618 2.116-1.145.188-2.148-.235-2.894-1.148-.531-.65-.328-1.42.468-1.859.914-.506 1.919-.634 3.104-.711.322.059.807.108 1.268.24.669.189.916.692.672 1.362zm-35.422 37.66c-.655-.535-1.521-.566-2.144.021-.773.73-1.453 1.565-2.133 2.388-.785.951-1.521 1.94-2.534 2.677-1.474 1.071-3.192 1.515-4.919 1.935-1.373.334-2.752.644-4.129.965l-.017.178c.409.189.805.425 1.231.56 2.1.665 4.236.996 6.455.808 1.602-.136 3.128-.485 4.574-1.171 1.99-.943 3.521-2.437 4.823-4.175.218-.29.317-.719.343-1.093.089-1.321-.582-2.303-1.55-3.093zm51.751.526c-1.69.181-3.382.373-5.077.47-.818.047-1.648-.109-2.474-.176-1.385-.112-2.737-.42-3.908-1.16-.678-.427-1.241-.475-1.961-.233-1.028.346-1.867.872-2.115 1.986-.169.753-.23 1.533-.298 2.304-.013.136.157.386.287.42.793.209 1.59.456 2.401.529.996.09 2.01.061 3.013.011 1.083-.054 2.173-.124 3.24-.304 2.515-.422 4.948-1.11 7.109-2.536.779-.515 1.551-1.041 2.325-1.562l-.064-.11c-.826.123-1.648.273-2.478.361z`}),t[3]=a,t[4]=o):(a=t[3],o=t[4]);let s;return t[5]!==n||t[6]!==i?(s=(0,J.jsxs)(`svg`,{viewBox:`0 0 128 128`,fill:`currentColor`,width:i,height:i,...n,children:[a,o]}),t[5]=n,t[6]=i,t[7]=s):s=t[7],s}function fe(e){let t=(0,K.c)(10),n,r;t[0]===e?(n=t[1],r=t[2]):({size:r,...n}=e,t[0]=e,t[1]=n,t[2]=r);let i=r===void 0?24:r,a,o,s,c;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,J.jsx)(`title`,{children:`Supabase`}),o=(0,J.jsx)(`path`,{d:`M63.707 110.284c-2.236 2.807-6.774 1.224-6.774-2.365V48.383h39.308c7.119 0 11.089 8.182 6.694 13.801l-39.228 48.1Z`}),s=(0,J.jsx)(`path`,{d:`M63.707 110.284c-2.236 2.807-6.774 1.224-6.774-2.365V48.383h39.308c7.119 0 11.089 8.182 6.694 13.801l-39.228 48.1Z`,opacity:`.2`}),c=(0,J.jsx)(`path`,{d:`M45.287 2.071C47.524-.737 52.062.846 52.062 4.435V63.97H12.754c-7.119 0-11.089-8.182-6.694-13.801L45.287 2.071Z`}),t[3]=a,t[4]=o,t[5]=s,t[6]=c):(a=t[3],o=t[4],s=t[5],c=t[6]);let l;return t[7]!==n||t[8]!==i?(l=(0,J.jsxs)(`svg`,{viewBox:`0 0 109 113`,fill:`currentColor`,width:i,height:i,...n,children:[a,o,s,c]}),t[7]=n,t[8]=i,t[9]=l):l=t[9],l}function pe(e){let t=(0,K.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({size:r,...n}=e,t[0]=e,t[1]=n,t[2]=r);let i=r===void 0?24:r,a,o;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,J.jsx)(`title`,{children:`MySQL`}),o=(0,J.jsx)(`path`,{d:`M117.688 98.242c-6.973-.191-12.297.461-16.852 2.379-1.293.547-3.355.559-3.566 2.18.711.746.82 1.859 1.387 2.777 1.086 1.754 2.922 4.113 4.559 5.352 1.789 1.348 3.633 2.793 5.551 3.961 3.414 2.082 7.223 3.27 10.504 5.352 1.938 1.23 3.859 2.777 5.75 4.164.934.684 1.563 1.75 2.773 2.18v-.195c-.637-.812-.801-1.93-1.387-2.777l-2.578-2.578c-2.52-3.344-5.719-6.281-9.117-8.719-2.711-1.949-8.781-4.578-9.91-7.73l-.199-.199c1.922-.219 4.172-.914 5.949-1.391 2.98-.797 5.645-.59 8.719-1.387l4.164-1.187v-.793c-1.555-1.594-2.664-3.707-4.359-5.152-4.441-3.781-9.285-7.555-14.273-10.703-2.766-1.746-6.184-2.883-9.117-4.363-.988-.496-2.719-.758-3.371-1.586-1.539-1.961-2.379-4.449-3.566-6.738-2.488-4.793-4.93-10.023-7.137-15.066-1.504-3.437-2.484-6.828-4.359-9.91-9-14.797-18.687-23.73-33.695-32.508-3.195-1.867-7.039-2.605-11.102-3.57l-6.543-.395c-1.332-.555-2.715-2.184-3.965-2.977C16.977 3.52 4.223-3.312.539 5.672-1.785 11.34 4.016 16.871 6.09 19.746c1.457 2.012 3.32 4.273 4.359 6.539.688 1.492.805 2.984 1.391 4.559 1.438 3.883 2.695 8.109 4.559 11.695.941 1.816 1.98 3.727 3.172 5.352.727.996 1.98 1.438 2.18 2.973-1.227 1.715-1.297 4.375-1.984 6.543-3.098 9.77-1.926 21.91 2.578 29.137 1.383 2.223 4.641 6.98 9.117 5.156 3.918-1.598 3.043-6.539 4.164-10.902.254-.988.098-1.715.594-2.379v.199l3.57 7.133c2.641 4.254 7.324 8.699 11.297 11.699 2.059 1.555 3.68 4.242 6.344 5.152v-.199h-.199c-.516-.805-1.324-1.137-1.98-1.781-1.551-1.523-3.277-3.414-4.559-5.156-3.613-4.902-6.805-10.27-9.711-15.855-1.391-2.668-2.598-5.609-3.77-8.324-.453-1.047-.445-2.633-1.387-3.172-1.281 1.988-3.172 3.598-4.164 5.945-1.582 3.754-1.789 8.336-2.375 13.082-.348.125-.195.039-.398.199-2.762-.668-3.73-3.508-4.758-5.949-2.594-6.164-3.078-16.09-.793-23.191.59-1.836 3.262-7.617 2.18-9.316-.516-1.691-2.219-2.672-3.172-3.965-1.18-1.598-2.355-3.703-3.172-5.551-2.125-4.805-3.113-10.203-5.352-15.062-1.07-2.324-2.875-4.676-4.359-6.738-1.645-2.289-3.484-3.977-4.758-6.742-.453-.984-1.066-2.559-.398-3.566.215-.684.516-.969 1.191-1.191 1.148-.887 4.352.297 5.547.793 3.18 1.32 5.832 2.578 8.527 4.363 1.289.855 2.598 2.512 4.16 2.973h1.785c2.789.641 5.914.195 8.523.988 4.609 1.402 8.738 3.582 12.488 5.949 11.422 7.215 20.766 17.48 27.156 29.734 1.027 1.973 1.473 3.852 2.379 5.945 1.824 4.219 4.125 8.559 5.941 12.688 1.816 4.113 3.582 8.27 6.148 11.695 1.348 1.801 6.551 2.766 8.918 3.766 1.66.699 4.379 1.43 5.949 2.379 3 1.809 5.906 3.965 8.723 5.945 1.402.992 5.73 3.168 5.945 4.957zm-88.605-75.52c-1.453-.027-2.48.156-3.566.395v.199h.195c.695 1.422 1.918 2.34 2.777 3.566l1.98 4.164.199-.195c1.227-.867 1.789-2.25 1.781-4.363-.492-.52-.562-1.164-.992-1.785-.562-.824-1.66-1.289-2.375-1.98zm0 0`}),t[3]=a,t[4]=o):(a=t[3],o=t[4]);let s;return t[5]!==n||t[6]!==i?(s=(0,J.jsxs)(`svg`,{viewBox:`0 0 128 128`,fill:`currentColor`,width:i,height:i,...n,children:[a,o]}),t[5]=n,t[6]=i,t[7]=s):s=t[7],s}function me(e){let t=(0,K.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({size:r,...n}=e,t[0]=e,t[1]=n,t[2]=r);let i=r===void 0?24:r,a,o;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,J.jsx)(`title`,{children:`MongoDB`}),o=(0,J.jsx)(`path`,{d:`M17.193 9.555c-1.264-5.58-4.252-7.414-4.573-8.115-.28-.394-.53-.954-.735-1.44-.036.495-.055.685-.523 1.184-.723.566-4.438 3.682-4.74 10.02-.282 5.912 4.27 9.435 4.888 9.884l.07.05A73.49 73.49 0 0111.91 24h.481c.114-1.032.284-2.056.51-3.07.417-.296.604-.463.85-.693a11.342 11.342 0 003.639-8.464c.01-.814-.103-1.662-.197-2.218zm-5.336 8.195s0-8.291.275-8.29c.213 0 .49 10.695.49 10.695-.381-.045-.765-1.76-.765-2.405z`}),t[3]=a,t[4]=o):(a=t[3],o=t[4]);let s;return t[5]!==n||t[6]!==i?(s=(0,J.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`currentColor`,width:i,height:i,...n,children:[a,o]}),t[5]=n,t[6]=i,t[7]=s):s=t[7],s}function X(e){let t=(0,K.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({size:r,...n}=e,t[0]=e,t[1]=n,t[2]=r);let i=r===void 0?24:r,a,o;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,J.jsx)(`title`,{children:`Google Analytics`}),o=(0,J.jsx)(`path`,{d:`M22.84 2.9982v17.9987c.0086 1.6473-1.3197 2.9897-2.967 2.9984a2.9808 2.9808 0 01-.3677-.0208c-1.528-.226-2.6477-1.5558-2.6105-3.1V3.1204c-.0369-1.5458 1.0856-2.8762 2.6157-3.1 1.6361-.1915 3.1178.9796 3.3093 2.6158.014.1201.0208.241.0202.3619zM4.1326 18.0548c-1.6417 0-2.9726 1.331-2.9726 2.9726C1.16 22.6691 2.4909 24 4.1326 24s2.9726-1.3309 2.9726-2.9726-1.331-2.9726-2.9726-2.9726zm7.8728-9.0098c-.0171 0-.0342 0-.0513.0003-1.6495.0904-2.9293 1.474-2.891 3.1256v7.9846c0 2.167.9535 3.4825 2.3505 3.763 1.6118.3266 3.1832-.7152 3.5098-2.327.04-.1974.06-.3983.0593-.5998v-8.9585c.003-1.6474-1.33-2.9852-2.9773-2.9882z`}),t[3]=a,t[4]=o):(a=t[3],o=t[4]);let s;return t[5]!==n||t[6]!==i?(s=(0,J.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`currentColor`,width:i,height:i,...n,children:[a,o]}),t[5]=n,t[6]=i,t[7]=s):s=t[7],s}function he(e){let t=(0,K.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({size:r,...n}=e,t[0]=e,t[1]=n,t[2]=r);let i=r===void 0?24:r,a,o;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,J.jsx)(`title`,{children:`BigQuery`}),o=(0,J.jsx)(`path`,{d:`M5.676 10.595h2.052v5.244a5.892 5.892 0 0 1-2.052-2.088v-3.156zm18.179 10.836a.504.504 0 0 1 0 .708l-1.716 1.716a.504.504 0 0 1-.708 0l-4.248-4.248a.206.206 0 0 1-.007-.007c-.02-.02-.028-.045-.043-.066a10.736 10.736 0 0 1-6.334 2.065C4.835 21.599 0 16.764 0 10.799S4.835 0 10.8 0s10.799 4.835 10.799 10.8c0 2.369-.772 4.553-2.066 6.333.025.017.052.028.074.05l4.248 4.248zm-5.028-10.632a8.015 8.015 0 1 0-8.028 8.028h.024a8.016 8.016 0 0 0 8.004-8.028zm-4.86 4.98a6.002 6.002 0 0 0 2.04-2.184v-1.764h-2.04v3.948zm-4.5.948c.442.057.887.08 1.332.072.4.025.8.025 1.2 0V7.692H9.468v9.035z`}),t[3]=a,t[4]=o):(a=t[3],o=t[4]);let s;return t[5]!==n||t[6]!==i?(s=(0,J.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`currentColor`,width:i,height:i,...n,children:[a,o]}),t[5]=n,t[6]=i,t[7]=s):s=t[7],s}function ge(e){let t=(0,K.c)(9),n,r;t[0]===e?(n=t[1],r=t[2]):({size:r,...n}=e,t[0]=e,t[1]=n,t[2]=r);let i=r===void 0?24:r,a,o,s;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,J.jsx)(`title`,{children:`Amplitude`}),o=(0,J.jsx)(`path`,{d:`M17.6,9c-0.1-0.1-0.2-0.2-0.4-0.2c-0.1,0-0.2,0.1-0.3,0.1c-1.1,0.8-2.5,4.4-3.7,9l1.1,0c2.1,0,4.2,0,6.4,0.1 c-0.6-2.1-1.1-4-1.6-5.5C18.4,10.4,17.9,9.4,17.6,9z`}),s=(0,J.jsx)(`path`,{d:`M20,0C9,0,0,9,0,20c0,11,9,20,20,20s20-9,20-20C40,9,31,0,20,0z M34.4,20.4C34.4,20.4,34.4,20.4,34.4,20.4 C34.4,20.4,34.3,20.4,34.4,20.4C34.3,20.4,34.3,20.4,34.4,20.4c-0.1,0.1-0.1,0.1-0.1,0.1c0,0,0,0,0,0c0,0,0,0,0,0 c-0.1,0.1-0.3,0.1-0.5,0.1c0,0-9.5,0-9.5,0c0.1,0.3,0.2,0.7,0.2,1.1c0.5,2.2,1.9,8.2,3.4,8.2l0,0l0,0l0,0c1.1,0,1.7-1.7,3-5.3l0,0 c0.2-0.6,0.4-1.2,0.7-1.9l0.1-0.2l0,0c0.1-0.2,0.2-0.3,0.4-0.3c0.3,0,0.5,0.2,0.5,0.5c0,0,0,0.1,0,0.1l0,0l-0.1,0.2 c-0.1,0.4-0.3,1-0.4,1.7c-0.8,3.2-1.9,7.9-4.9,7.9l0,0c-1.9,0-3.1-3.1-3.5-4.4c-0.9-2.4-1.6-5-2.3-7.6h-8.7l-1.8,5.8l0,0 c-0.2,0.3-0.5,0.4-0.8,0.4c-0.5,0-0.9-0.4-0.9-0.9l0,0l0.1-0.7c0.3-1.5,0.5-3,0.9-4.6H6.4l0,0c-0.7-0.1-1.2-0.7-1.2-1.4 c0-0.7,0.5-1.2,1.1-1.4c0.1,0,0.2,0,0.4,0c0.1,0,0.1,0,0.2,0c1.2,0,2.4,0,3.8,0.1c1.9-7.8,4.1-11.8,6.6-11.8c2.7,0,4.6,6,6.2,11.9 l0,0c3.2,0.1,6.7,0.2,10,0.4l0.1,0c0.1,0,0.1,0,0.2,0l0,0c0,0,0,0,0,0c0,0,0,0,0,0c0.5,0.1,0.8,0.5,0.8,1 C34.8,19.9,34.6,20.2,34.4,20.4z`}),t[3]=a,t[4]=o,t[5]=s):(a=t[3],o=t[4],s=t[5]);let c;return t[6]!==n||t[7]!==i?(c=(0,J.jsxs)(`svg`,{viewBox:`0 0 40 40`,fill:`currentColor`,width:i,height:i,...n,children:[a,o,s]}),t[6]=n,t[7]=i,t[8]=c):c=t[8],c}function _e(e){let t=(0,K.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({size:r,...n}=e,t[0]=e,t[1]=n,t[2]=r);let i=r===void 0?24:r,a,o;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,J.jsx)(`title`,{children:`Laminar`}),o=(0,J.jsx)(`path`,{fillRule:`evenodd`,clipRule:`evenodd`,d:`M1.32507 73.4886C0.00220402 72.0863 0.0802819 69.9867 0.653968 68.1462C3.57273 58.7824 5.14534 48.8249 5.14534 38.5C5.14534 27.8899 3.48464 17.6677 0.408998 8.0791C-0.129499 6.40029 -0.266346 4.50696 0.811824 3.11199C2.27491 1.21902 4.56777 0 7.14535 0H37.1454C58.1322 0 75.1454 17.0132 75.1454 38C75.1454 58.9868 58.1322 76 37.1454 76H7.14535C4.85185 76 2.78376 75.0349 1.32507 73.4886Z`}),t[3]=a,t[4]=o):(a=t[3],o=t[4]);let s;return t[5]!==n||t[6]!==i?(s=(0,J.jsxs)(`svg`,{viewBox:`0 0 76 76`,fill:`currentColor`,width:i,height:i,...n,children:[a,o]}),t[5]=n,t[6]=i,t[7]=s):s=t[7],s}function ve(e){let t=(0,K.c)(10),n,r;t[0]===e?(n=t[1],r=t[2]):({size:r,...n}=e,t[0]=e,t[1]=n,t[2]=r);let i=r===void 0?24:r,a,o,s,c;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,J.jsx)(`title`,{children:`AWS Athena`}),o=(0,J.jsx)(`path`,{d:`M144.3 214.1c0 6.3.7 11.4 1.9 15.2 1.4 3.7 3.1 7.8 5.4 12.3.9 1.4 1.2 2.7 1.2 3.9 0 1.7-1 3.4-3.2 5.1l-10.7 7.2c-1.5 1-3.1 1.5-4.4 1.5-1.7 0-3.4-.9-5.1-2.4-2.4-2.6-4.4-5.3-6.1-8-1.7-2.9-3.4-6.1-5.3-10-13.3 15.7-30 23.5-50.1 23.5-14.3 0-25.7-4.1-34.1-12.3-8.3-8.2-12.6-19.1-12.6-32.7 0-14.5 5.1-26.2 15.5-35.1S60.8 169 78.4 169c5.8 0 11.7.5 18.1 1.4s12.8 2.2 19.6 3.7v-12.4c0-12.9-2.7-22-8-27.2-5.4-5.3-14.6-7.8-27.8-7.8-6 0-12.1.7-18.4 2.2s-12.4 3.4-18.4 5.8c-2.7 1.2-4.8 1.9-6 2.2s-2 .5-2.7.5c-2.4 0-3.6-1.7-3.6-5.3v-8.3c0-2.7.3-4.8 1.2-6s2.4-2.4 4.8-3.6c6-3.1 13.1-5.6 21.5-7.7 8.3-2.2 17.2-3.2 26.6-3.2 20.3 0 35.1 4.6 44.6 13.8 9.4 9.2 14.1 23.2 14.1 41.9v55.2h.3zM75.2 240c5.6 0 11.4-1 17.5-3.1 6.1-2 11.6-5.8 16.2-10.9 2.7-3.2 4.8-6.8 5.8-10.9s1.7-9 1.7-14.8v-7.2c-4.9-1.2-10.2-2.2-15.7-2.9-5.4-.7-10.7-1-16-1-11.4 0-19.8 2.2-25.4 6.8S51 207.1 51 215.6c0 8 2 14 6.3 18.1 4.1 4.2 10 6.3 17.9 6.3m136.7 18.4c-3.1 0-5.1-.5-6.5-1.7-1.4-1-2.6-3.4-3.6-6.6l-40-131.6c-1-3.4-1.5-5.6-1.5-6.8 0-2.7 1.4-4.3 4.1-4.3h16.7c3.2 0 5.4.5 6.6 1.7 1.4 1 2.4 3.4 3.4 6.6l28.6 112.7 26.6-112.7c.9-3.4 1.9-5.6 3.2-6.6 1.4-1 3.7-1.7 6.8-1.7H270c3.2 0 5.4.5 6.8 1.7 1.4 1 2.6 3.4 3.2 6.6l26.9 114.1 29.5-114.1c1-3.4 2.2-5.6 3.4-6.6 1.4-1 3.6-1.7 6.6-1.7h15.8c2.7 0 4.3 1.4 4.3 4.3 0 .9-.2 1.7-.3 2.7-.2 1-.5 2.4-1.2 4.3l-41 131.6q-1.5 5.1-3.6 6.6c-1.4 1-3.6 1.7-6.5 1.7h-14.6c-3.2 0-5.4-.5-6.8-1.7s-2.6-3.4-3.2-6.8l-26.4-109.8L236.7 250c-.9 3.4-1.9 5.6-3.2 6.8-1.4 1.2-3.7 1.7-6.8 1.7h-14.8zm218.8 4.6c-8.9 0-17.7-1-26.2-3.1-8.5-2-15.2-4.3-19.6-6.8-2.7-1.5-4.6-3.2-5.3-4.8s-1-3.2-1-4.8v-8.7c0-3.6 1.4-5.3 3.9-5.3 1 0 2 .2 3.1.5 1 .3 2.6 1 4.3 1.7 5.8 2.6 12.1 4.6 18.7 6 6.8 1.4 13.5 2 20.3 2 10.7 0 19.1-1.9 24.9-5.6s8.9-9.2 8.9-16.2c0-4.8-1.5-8.7-4.6-11.9s-8.9-6.1-17.2-8.9l-24.7-7.7c-12.4-3.9-21.6-9.7-27.2-17.4-5.6-7.5-8.5-15.8-8.5-24.7 0-7.2 1.5-13.5 4.6-18.9s7.2-10.2 12.3-14c5.1-3.9 10.9-6.8 17.7-8.9 6.8-2 14-2.9 21.5-2.9 3.7 0 7.7.2 11.4.7 3.9.5 7.5 1.2 11.1 1.9 3.4.9 6.6 1.7 9.7 2.7s5.4 2 7.2 3.1c2.4 1.4 4.1 2.7 5.1 4.3 1 1.4 1.5 3.2 1.5 5.6v8c0 3.6-1.4 5.4-3.9 5.4-1.4 0-3.6-.7-6.5-2q-14.55-6.6-32.7-6.6c-9.7 0-17.4 1.5-22.6 4.8s-8 8.2-8 15.2c0 4.8 1.7 8.9 5.1 12.1s9.7 6.5 18.7 9.4l24.2 7.7c12.3 3.9 21.1 9.4 26.4 16.3s7.8 15 7.8 23.8c0 7.3-1.5 14-4.4 19.8-3.1 5.8-7.2 10.9-12.4 15-5.3 4.3-11.6 7.3-18.9 9.5-8 2.5-16 3.7-24.7 3.7`,fill:`#000`}),s=(0,J.jsx)(`path`,{d:`M462.9 345.7c-56 41.4-137.4 63.3-207.4 63.3-98.1 0-186.5-36.3-253.2-96.6-5.3-4.8-.5-11.2 5.8-7.5 72.2 41.9 161.3 67.3 253.4 67.3 62.2 0 130.4-12.9 193.3-39.5 9.3-4.2 17.3 6.2 8.1 13`,fill:`#f90`,fillRule:`evenodd`,clipRule:`evenodd`}),c=(0,J.jsx)(`path`,{d:`M486.2 319.2c-7.2-9.2-47.3-4.4-65.6-2.2-5.4.7-6.3-4.1-1.4-7.7 32-22.5 84.6-16 90.8-8.5 6.1 7.7-1.7 60.3-31.7 85.5-4.6 3.9-9 1.9-7-3.2 6.9-16.9 22.1-54.9 14.9-63.9`,fill:`#f90`,fillRule:`evenodd`,clipRule:`evenodd`}),t[3]=a,t[4]=o,t[5]=s,t[6]=c):(a=t[3],o=t[4],s=t[5],c=t[6]);let l;return t[7]!==n||t[8]!==i?(l=(0,J.jsxs)(`svg`,{xmlSpace:`preserve`,viewBox:`0.02 102.6 511.9 306.4`,width:i,height:i,...n,children:[a,o,s,c]}),t[7]=n,t[8]=i,t[9]=l):l=t[9],l}function ye(e){let t=(0,K.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({size:r,...n}=e,t[0]=e,t[1]=n,t[2]=r);let i=r===void 0?24:r,a,o;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,J.jsx)(`title`,{children:`Mixpanel`}),o=(0,J.jsx)(`path`,{d:`M6.967 9.996h3.053c-.763-.477-1.048-1.145-1.431-2.384L7.443 3.366C6.919 1.458 6.49.551 4.39.551H.004v1.145h.621c1.286 0 1.431.477 1.814 1.908L3.44 7.326c.524 1.814 1.337 2.67 3.53 2.67h-.003Zm7.06 0h3.053c2.194 0 2.956-.86 3.484-2.67l1.001-3.722c.382-1.431.57-1.908 1.814-1.908H24V.551h-4.34c-2.146 0-2.576.86-3.053 2.815l-1.145 4.246c-.384 1.286-.673 1.907-1.435 2.384Zm-4.007 4.008h4.007V9.996H10.02v4.008ZM0 23.449h4.39c2.1 0 2.529-.907 3.053-2.815l1.146-4.246c.383-1.239.668-1.907 1.431-2.384H6.967c-2.194 0-3.007.86-3.531 2.67l-1.001 3.722c-.383 1.431-.524 1.907-1.814 1.907H0v1.146Zm19.65 0h4.343v-1.146h-.622c-1.239 0-1.431-.476-1.814-1.907l-1.001-3.722c-.524-1.814-1.286-2.67-3.483-2.67h-3.046c.762.477 1.041 1.098 1.424 2.384l1.145 4.246c.477 1.955.907 2.815 3.054 2.815Z`}),t[3]=a,t[4]=o):(a=t[3],o=t[4]);let s;return t[5]!==n||t[6]!==i?(s=(0,J.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`currentColor`,width:i,height:i,...n,children:[a,o]}),t[5]=n,t[6]=i,t[7]=s):s=t[7],s}function be(e){let t=(0,K.c)(12),n,r;t[0]===e?(n=t[1],r=t[2]):({size:r,...n}=e,t[0]=e,t[1]=n,t[2]=r);let i=r===void 0?24:r,a,o,s,c,l,u;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,J.jsx)(`title`,{children:`PostHog`}),o=(0,J.jsx)(`path`,{d:`M116.2 272c-3.9 7.9-15.2 7.9-19.1 0l-9.4-18.8c-1.5-3-1.5-6.5 0-9.5l9.4-18.8c3.9-7.9 15.2-7.9 19.1 0l9.4 18.8c1.5 3 1.5 6.5 0 9.5zm0 106.7c-3.9 7.9-15.2 7.9-19.1 0l-9.4-18.8c-1.5-3-1.5-6.5 0-9.5l9.4-18.8c3.9-7.9 15.2-7.9 19.1 0l9.4 18.8c1.5 3 1.5 6.5 0 9.5z`,fill:`#1d4aff`}),s=(0,J.jsx)(`path`,{d:`M0 338.2c0-9.5 11.5-14.3 18.2-7.5l48.9 48.9c6.7 6.7 2 18.2-7.5 18.2H10.7C4.8 397.8 0 393 0 387.1zm0-51.5c0 2.8 1.1 5.5 3.1 7.5l100.4 100.4c2 2 4.7 3.1 7.5 3.1h55.2c9.5 0 14.3-11.5 7.5-18.2L18.2 224c-6.7-6.7-18.2-2-18.2 7.5zM0 180c0 2.8 1.1 5.5 3.1 7.5l207.1 207.1c2 2 4.7 3.1 7.5 3.1h55.2c9.5 0 14.3-11.5 7.5-18.2L18.2 117.3c-6.7-6.7-18.2-2-18.2 7.5zm106.7 0c0 2.8 1.1 5.5 3.1 7.5l192 192c6.7 6.7 18.2 2 18.2-7.5v-55.2c0-2.8-1.1-5.5-3.1-7.5l-192-192c-6.7-6.7-18.2-2-18.2 7.5zm124.8-62.7c-6.7-6.7-18.2-2-18.2 7.5V180c0 2.8 1.1 5.5 3.1 7.5l85.3 85.3c6.7 6.7 18.2 2 18.2-7.5v-55.2c0-2.8-1.1-5.5-3.1-7.5z`,fill:`#f9bd2b`}),c=(0,J.jsx)(`path`,{d:`M453.7 339.5 353.3 239.1c-6.7-6.7-18.2-2-18.2 7.5v140.5c0 5.9 4.8 10.7 10.7 10.7h155.6c5.9 0 10.7-4.8 10.7-10.7v-12.8c0-5.9-4.8-10.6-10.6-11.4-18.1-2.3-34.8-10.4-47.8-23.4m-67.4 24.2c-9.4 0-17.1-7.6-17.1-17.1 0-9.4 7.6-17.1 17.1-17.1 9.4 0 17.1 7.6 17.1 17.1 0 9.4-7.7 17.1-17.1 17.1`}),l=(0,J.jsx)(`path`,{d:`M0 387.1c0 5.9 4.8 10.7 10.7 10.7h48.9c9.5 0 14.3-11.5 7.5-18.2l-48.9-48.9c-6.7-6.7-18.2-2-18.2 7.5zm106.7-181.3-88.5-88.5c-6.7-6.7-18.2-2-18.2 7.5V180c0 2.8 1.1 5.5 3.1 7.5L106.6 291v-85.2zM18.2 224c-6.7-6.7-18.2-2-18.2 7.5v55.2c0 2.8 1.1 5.5 3.1 7.5l103.5 103.5v-85.3z`,fill:`#1d4aff`}),u=(0,J.jsx)(`path`,{d:`M213.3 210.2c0-2.8-1.1-5.5-3.1-7.5l-85.3-85.3c-6.7-6.7-18.2-2-18.2 7.5V180c0 2.8 1.1 5.5 3.1 7.5L213.3 291zM106.7 397.8h59.6c9.5 0 14.3-11.5 7.5-18.2l-67.1-67.1zm0-192v80.9c0 2.8 1.1 5.5 3.1 7.5l103.5 103.5v-80.9c0-2.8-1.1-5.5-3.1-7.5z`,fill:`#f54e00`}),t[3]=a,t[4]=o,t[5]=s,t[6]=c,t[7]=l,t[8]=u):(a=t[3],o=t[4],s=t[5],c=t[6],l=t[7],u=t[8]);let d;return t[9]!==n||t[10]!==i?(d=(0,J.jsxs)(`svg`,{xmlSpace:`preserve`,viewBox:`0 114.15 512.1 283.65`,width:i,height:i,...n,children:[a,o,s,c,l,u]}),t[9]=n,t[10]=i,t[11]=d):d=t[11],d}function xe(e){let t=(0,K.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({size:r,...n}=e,t[0]=e,t[1]=n,t[2]=r);let i=r===void 0?24:r,a,o;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,J.jsx)(`title`,{children:`Sentry`}),o=(0,J.jsx)(`path`,{d:`M505.4 460.4c8.8-14.8 8.8-33.2 0-48L296.8 51c-8.4-14.6-24.1-23.4-40.9-23-16.8-.2-32.4 8.5-40.9 23l-67.2 117.1 16.6 10.2c50.3 28.9 92 70.6 120.9 120.9 25.8 44.3 40.7 94 43.5 145.2h-47.3c-3-42.8-15.7-84.4-37.1-121.5-24.6-43.4-60.4-79.4-103.6-104.3l-17.3-9.6-62.7 108.7L77.4 328c42.4 24.8 70.9 67.8 77.4 116.4H46.1c-2.7-.1-5.1-1.5-6.4-3.8-1.6-2.5-1.6-5.8 0-8.3l30.7-51.2c-10.2-8.8-21.9-15.8-34.5-20.5L6.4 413c-8.6 14.6-8.6 32.7 0 47.3 8.3 14.7 24 23.8 40.9 23.7h148.4v-20.5c0-34.3-8.8-68-25.6-97.9-14.1-24.1-33-45-55.6-61.4l23.7-40.9c29.6 20.5 54.3 47.4 72.3 78.7 21.3 37 32.6 78.9 32.6 121.5v19.2h126v-19.2c-.1-64.7-17.3-128.3-49.9-184.2-28.7-50.7-69-93.9-117.7-126l48-83.2c1.3-2.3 3.7-3.8 6.4-3.8 2.7.1 5.1 1.5 6.4 3.8l209.2 361.4c1.4 2.4 1.4 5.3 0 7.7a6.88 6.88 0 0 1-6.4 3.8h-49.3v39.7h49.3c16.8.2 32.3-8.9 40.3-23.7z`,fill:`currentColor`}),t[3]=a,t[4]=o):(a=t[3],o=t[4]);let s;return t[5]!==n||t[6]!==i?(s=(0,J.jsxs)(`svg`,{xmlSpace:`preserve`,viewBox:`-0.05 27.99 512.05 456.01`,width:i,height:i,...n,children:[a,o]}),t[5]=n,t[6]=i,t[7]=s):s=t[7],s}function Se(e){let t=(0,K.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({size:r,...n}=e,t[0]=e,t[1]=n,t[2]=r);let i=r===void 0?24:r,a,o;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,J.jsx)(`title`,{children:`GitHub`}),o=(0,J.jsx)(`path`,{d:`M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12`}),t[3]=a,t[4]=o):(a=t[3],o=t[4]);let s;return t[5]!==n||t[6]!==i?(s=(0,J.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`currentColor`,width:i,height:i,...n,children:[a,o]}),t[5]=n,t[6]=i,t[7]=s):s=t[7],s}function Ce(e){let t=(0,K.c)(112),n,r;t[0]===e?(n=t[1],r=t[2]):({size:r,...n}=e,t[0]=e,t[1]=n,t[2]=r);let i=r===void 0?24:r,a=(0,q.useId)(),o;t[3]===a?o=t[4]:(o=a.replaceAll(`:`,``),t[3]=a,t[4]=o);let s=o,c=`${s}-a`,l=`${s}-b`,u=`${s}-c`,d=`${s}-d`,f=`${s}-e`,p=`${s}-f`,m=`${s}-g`,h=`${s}-h`,g=`${s}-i`,_=`${s}-j`,v=`${s}-k`,y=`${s}-l`,b=`${s}-m`,x=`${s}-n`,S=`${s}-o`,C=`${s}-p`,w;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(w=(0,J.jsx)(`title`,{children:`Google Docs`}),t[5]=w):w=t[5];let T;t[6]===c?T=t[7]:(T=(0,J.jsx)(`path`,{id:c,d:`M29.375 0H4.406C1.983 0 0 1.994 0 4.432v56.136C0 63.006 1.983 65 4.406 65h38.188C45.017 65 47 63.006 47 60.568v-42.84z`}),t[6]=c,t[7]=T);let E;t[8]===u?E=t[9]:(E=(0,J.jsx)(`path`,{id:u,d:`M29.375 0H4.406C1.983 0 0 1.994 0 4.432v56.136C0 63.006 1.983 65 4.406 65h38.188C45.017 65 47 63.006 47 60.568v-42.84z`}),t[8]=u,t[9]=E);let D;t[10]===p?D=t[11]:(D=(0,J.jsx)(`path`,{id:p,d:`M29.375 0H4.406C1.983 0 0 1.994 0 4.432v56.136C0 63.006 1.983 65 4.406 65h38.188C45.017 65 47 63.006 47 60.568v-42.84z`}),t[10]=p,t[11]=D);let O;t[12]===h?O=t[13]:(O=(0,J.jsx)(`path`,{id:h,d:`M29.375 0H4.406C1.983 0 0 1.994 0 4.432v56.136C0 63.006 1.983 65 4.406 65h38.188C45.017 65 47 63.006 47 60.568v-42.84z`}),t[12]=h,t[13]=O);let k;t[14]===_?k=t[15]:(k=(0,J.jsx)(`path`,{id:_,d:`M29.375 0H4.406C1.983 0 0 1.994 0 4.432v56.136C0 63.006 1.983 65 4.406 65h38.188C45.017 65 47 63.006 47 60.568v-42.84z`}),t[14]=_,t[15]=k);let A;t[16]===y?A=t[17]:(A=(0,J.jsx)(`path`,{id:y,d:`M29.375 0H4.406C1.983 0 0 1.994 0 4.432v56.136C0 63.006 1.983 65 4.406 65h38.188C45.017 65 47 63.006 47 60.568v-42.84z`}),t[16]=y,t[17]=A);let j;t[18]===x?j=t[19]:(j=(0,J.jsx)(`path`,{id:x,d:`M29.375 0H4.406C1.983 0 0 1.994 0 4.432v56.136C0 63.006 1.983 65 4.406 65h38.188C45.017 65 47 63.006 47 60.568v-42.84z`}),t[18]=x,t[19]=j);let M,N;t[20]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,J.jsx)(`stop`,{offset:`0%`,stopColor:`#FFF`,stopOpacity:`.1`}),N=(0,J.jsx)(`stop`,{offset:`100%`,stopColor:`#FFF`,stopOpacity:`0`}),t[20]=M,t[21]=N):(M=t[20],N=t[21]);let P;t[22]===C?P=t[23]:(P=(0,J.jsxs)(`radialGradient`,{id:C,cx:`3.168%`,cy:`2.717%`,r:`161.249%`,fx:`3.168%`,fy:`2.717%`,gradientTransform:`matrix(1 0 0 .72308 0 .008)`,children:[M,N]}),t[22]=C,t[23]=P);let F,I;t[24]===Symbol.for(`react.memo_cache_sentinel`)?(F=(0,J.jsx)(`stop`,{offset:`0%`,stopColor:`#1A237E`,stopOpacity:`.2`}),I=(0,J.jsx)(`stop`,{offset:`100%`,stopColor:`#1A237E`,stopOpacity:`.02`}),t[24]=F,t[25]=I):(F=t[24],I=t[25]);let L;t[26]===d?L=t[27]:(L=(0,J.jsxs)(`linearGradient`,{id:d,x1:`50.005%`,x2:`50.005%`,y1:`8.586%`,y2:`100.014%`,children:[F,I]}),t[26]=d,t[27]=L);let R;t[28]!==j||t[29]!==P||t[30]!==L||t[31]!==T||t[32]!==E||t[33]!==D||t[34]!==O||t[35]!==k||t[36]!==A?(R=(0,J.jsxs)(`defs`,{children:[T,E,D,O,k,A,j,P,L]}),t[28]=j,t[29]=P,t[30]=L,t[31]=T,t[32]=E,t[33]=D,t[34]=O,t[35]=k,t[36]=A,t[37]=R):R=t[37];let z=`#${c}`,B;t[38]===z?B=t[39]:(B=(0,J.jsx)(`use`,{xlinkHref:z}),t[38]=z,t[39]=B);let V;t[40]!==l||t[41]!==B?(V=(0,J.jsx)(`mask`,{id:l,fill:`#fff`,children:B}),t[40]=l,t[41]=B,t[42]=V):V=t[42];let H=`url(#${l})`,ee;t[43]===H?ee=t[44]:(ee=(0,J.jsx)(`path`,{fill:`#4285F4`,fillRule:`nonzero`,d:`M29.375 0H4.406C1.983 0 0 1.994 0 4.432v56.136C0 63.006 1.983 65 4.406 65h38.188C45.017 65 47 63.006 47 60.568v-42.84L36.719 10.34z`,mask:H}),t[43]=H,t[44]=ee);let te=`#${u}`,ne;t[45]===te?ne=t[46]:(ne=(0,J.jsx)(`use`,{xlinkHref:te}),t[45]=te,t[46]=ne);let re;t[47]!==f||t[48]!==ne?(re=(0,J.jsx)(`mask`,{id:f,fill:`#fff`,children:ne}),t[47]=f,t[48]=ne,t[49]=re):re=t[49];let U=`url(#${d})`,ie=`url(#${f})`,ae;t[50]!==U||t[51]!==ie?(ae=(0,J.jsx)(`path`,{fill:U,fillRule:`nonzero`,d:`M30.664 16.431 47 32.858V17.727z`,mask:ie}),t[50]=U,t[51]=ie,t[52]=ae):ae=t[52];let W=`#${p}`,oe;t[53]===W?oe=t[54]:(oe=(0,J.jsx)(`use`,{xlinkHref:W}),t[53]=W,t[54]=oe);let G;t[55]!==m||t[56]!==oe?(G=(0,J.jsx)(`mask`,{id:m,fill:`#fff`,children:oe}),t[55]=m,t[56]=oe,t[57]=G):G=t[57];let se=`url(#${m})`,ce;t[58]===se?ce=t[59]:(ce=(0,J.jsx)(`path`,{fill:`#F1F1F1`,fillRule:`nonzero`,d:`M11.75 47.273h23.5v-2.955h-23.5zm0 5.909h17.625v-2.955H11.75zm0-20.682v2.955h23.5V32.5zm0 8.864h23.5v-2.955h-23.5z`,mask:se}),t[58]=se,t[59]=ce);let le=`#${h}`,ue;t[60]===le?ue=t[61]:(ue=(0,J.jsx)(`use`,{xlinkHref:le}),t[60]=le,t[61]=ue);let Y;t[62]!==g||t[63]!==ue?(Y=(0,J.jsx)(`mask`,{id:g,fill:`#fff`,children:ue}),t[62]=g,t[63]=ue,t[64]=Y):Y=t[64];let de=`url(#${g})`,fe;t[65]===Symbol.for(`react.memo_cache_sentinel`)?(fe=(0,J.jsx)(`path`,{fill:`#A1C2FA`,fillRule:`nonzero`,d:`M29.375 0v13.295c0 2.449 1.972 4.432 4.406 4.432H47z`}),t[65]=fe):fe=t[65];let pe;t[66]===de?pe=t[67]:(pe=(0,J.jsx)(`g`,{mask:de,children:fe}),t[66]=de,t[67]=pe);let me=`#${_}`,X;t[68]===me?X=t[69]:(X=(0,J.jsx)(`use`,{xlinkHref:me}),t[68]=me,t[69]=X);let he;t[70]!==v||t[71]!==X?(he=(0,J.jsx)(`mask`,{id:v,fill:`#fff`,children:X}),t[70]=v,t[71]=X,t[72]=he):he=t[72];let ge=`url(#${v})`,_e;t[73]===ge?_e=t[74]:(_e=(0,J.jsx)(`path`,{fill:`#FFF`,fillOpacity:`.2`,fillRule:`nonzero`,d:`M4.406 0C1.983 0 0 1.994 0 4.432v.37C0 2.363 1.983.368 4.406.368h24.969V0z`,mask:ge}),t[73]=ge,t[74]=_e);let ve=`#${y}`,ye;t[75]===ve?ye=t[76]:(ye=(0,J.jsx)(`use`,{xlinkHref:ve}),t[75]=ve,t[76]=ye);let be;t[77]!==b||t[78]!==ye?(be=(0,J.jsx)(`mask`,{id:b,fill:`#fff`,children:ye}),t[77]=b,t[78]=ye,t[79]=be):be=t[79];let xe=`url(#${b})`,Se;t[80]===xe?Se=t[81]:(Se=(0,J.jsx)(`path`,{fill:`#1A237E`,fillOpacity:`.2`,fillRule:`nonzero`,d:`M42.594 64.63H4.406C1.983 64.63 0 62.637 0 60.2v.37C0 63.005 1.983 65 4.406 65h38.188C45.017 65 47 63.006 47 60.568v-.37c0 2.438-1.983 4.433-4.406 4.433`,mask:xe}),t[80]=xe,t[81]=Se);let Ce=`#${x}`,we;t[82]===Ce?we=t[83]:(we=(0,J.jsx)(`use`,{xlinkHref:Ce}),t[82]=Ce,t[83]=we);let Z;t[84]!==S||t[85]!==we?(Z=(0,J.jsx)(`mask`,{id:S,fill:`#fff`,children:we}),t[84]=S,t[85]=we,t[86]=Z):Z=t[86];let Te=`url(#${S})`,Ee;t[87]===Te?Ee=t[88]:(Ee=(0,J.jsx)(`path`,{fill:`#1A237E`,fillOpacity:`.1`,fillRule:`nonzero`,d:`M33.781 17.727c-2.434 0-4.406-1.983-4.406-4.432v.37c0 2.448 1.972 4.432 4.406 4.432H47v-.37z`,mask:Te}),t[87]=Te,t[88]=Ee);let De=`url(#${C})`,Oe;t[89]===De?Oe=t[90]:(Oe=(0,J.jsx)(`path`,{fill:De,fillRule:`nonzero`,d:`M29.375 0H4.406C1.983 0 0 1.994 0 4.432v56.136C0 63.006 1.983 65 4.406 65h38.188C45.017 65 47 63.006 47 60.568v-42.84z`}),t[89]=De,t[90]=Oe);let ke;t[91]!==V||t[92]!==ee||t[93]!==re||t[94]!==ae||t[95]!==G||t[96]!==ce||t[97]!==Y||t[98]!==pe||t[99]!==he||t[100]!==_e||t[101]!==be||t[102]!==Se||t[103]!==Z||t[104]!==Ee||t[105]!==Oe?(ke=(0,J.jsxs)(`g`,{fill:`none`,fillRule:`evenodd`,children:[V,ee,re,ae,G,ce,Y,pe,he,_e,be,Se,Z,Ee,Oe]}),t[91]=V,t[92]=ee,t[93]=re,t[94]=ae,t[95]=G,t[96]=ce,t[97]=Y,t[98]=pe,t[99]=he,t[100]=_e,t[101]=be,t[102]=Se,t[103]=Z,t[104]=Ee,t[105]=Oe,t[106]=ke):ke=t[106];let Ae;return t[107]!==n||t[108]!==i||t[109]!==R||t[110]!==ke?(Ae=(0,J.jsxs)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,xmlnsXlink:`http://www.w3.org/1999/xlink`,viewBox:`0 0 47 65`,width:i,height:i,preserveAspectRatio:`xMidYMid meet`,...n,children:[w,R,ke]}),t[107]=n,t[108]=i,t[109]=R,t[110]=ke,t[111]=Ae):Ae=t[111],Ae}function we(e){let t=(0,K.c)(10),n,r;t[0]===e?(n=t[1],r=t[2]):({size:r,...n}=e,t[0]=e,t[1]=n,t[2]=r);let i=r===void 0?24:r,a,o,s,c;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,J.jsx)(`title`,{children:`Unknown provider`}),o=(0,J.jsx)(`circle`,{cx:`12`,cy:`12`,r:`9`,strokeWidth:`2`}),s=(0,J.jsx)(`path`,{d:`M9.5 9.25a2.5 2.5 0 1 1 4.77 1.08c-.44 1.02-1.77 1.39-2.27 2.42`,strokeWidth:`2`,strokeLinecap:`round`}),c=(0,J.jsx)(`circle`,{cx:`12`,cy:`17`,r:`1`,fill:`currentColor`,stroke:`none`}),t[3]=a,t[4]=o,t[5]=s,t[6]=c):(a=t[3],o=t[4],s=t[5],c=t[6]);let l;return t[7]!==n||t[8]!==i?(l=(0,J.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,width:i,height:i,...n,children:[a,o,s,c]}),t[7]=n,t[8]=i,t[9]=l):l=t[9],l}var Z={amplitude:ge,aws_athena_connector:ve,bigquery:he,ga:X,github:Se,google_docs:Ce,laminar:_e,linear:Y,mixpanel:ye,mongodb:me,mysql:pe,postgres:de,supabase:fe,posthog:be,sentry:xe};function Te(e){return e in Z}function Ee(e){return Te(e)?Z[e]:we}var De=q.createContext(void 0);function Oe(){let e=q.useContext(De);if(e===void 0)throw Error(f(64));return e}var ke=function(e){return e.activationDirection=`data-activation-direction`,e.orientation=`data-orientation`,e}({}),Ae={tabActivationDirection:e=>({[ke.activationDirection]:e})},je=q.forwardRef(function(e,t){let{className:n,defaultValue:r=0,onValueChange:i,orientation:s=`horizontal`,render:c,value:l,...u}=e,f=E(),p=Object.hasOwn(e,`defaultValue`),m=q.useRef([]),[h,g]=q.useState(()=>new Map),[_,v]=ie({controlled:l,default:r,name:`Tabs`,state:`value`}),y=l!==void 0,[b,x]=q.useState(()=>new Map),[S,C]=q.useState(`none`),w=a((e,t)=>{i?.(e,t),!t.isCanceled&&(v(e),C(t.activationDirection))}),T=a((e,t)=>{g(n=>{if(n.get(e)===t)return n;let r=new Map(n);return r.set(e,t),r})}),D=a((e,t)=>{g(n=>{if(!n.has(e)||n.get(e)!==t)return n;let r=new Map(n);return r.delete(e),r})}),O=q.useCallback(e=>h.get(e),[h]),k=q.useCallback(e=>{for(let t of b.values())if(e===t?.value)return t?.id},[b]),j=q.useCallback(e=>{if(e===void 0)return null;for(let[t,n]of b.entries())if(n!=null&&e===(n.value??n.index))return t;return null},[b]),M=q.useMemo(()=>({direction:f,getTabElementBySelectedValue:j,getTabIdByPanelValue:k,getTabPanelIdByValue:O,onValueChange:w,orientation:s,registerMountedTabPanel:T,setTabMap:x,unregisterMountedTabPanel:D,tabActivationDirection:S,value:_}),[f,j,k,O,w,s,T,x,D,S,_]),N=q.useMemo(()=>{for(let e of b.values())if(e!=null&&e.value===_)return e},[b,_]),P=q.useMemo(()=>{for(let e of b.values())if(e!=null&&!e.disabled)return e.value},[b]);d(()=>{if(y||b.size===0)return;let e=N?.disabled;if(p&&e&&_===r||!e&&!(N==null&&_!==null))return;let t=P??null;_!==t&&(v(t),C(`none`))},[r,P,p,y,N,C,v,b,_]);let F=o(`div`,e,{state:{orientation:s,tabActivationDirection:S},ref:t,props:u,stateAttributesMapping:Ae});return(0,J.jsx)(De.Provider,{value:M,children:(0,J.jsx)(A,{elementsRef:m,children:F})})}),Me=q.createContext(void 0);function Ne(){let e=q.useContext(Me);if(e===void 0)throw Error(f(65));return e}var Pe=q.forwardRef(function(e,t){let{className:n,disabled:r=!1,render:i,value:a,id:s,nativeButton:l=!0,...u}=e,{value:f,getTabPanelIdByValue:p,orientation:m}=Oe(),{activateOnFocus:h,highlightedTabIndex:g,onTabActivation:_,setHighlightedTabIndex:v,tabsListElement:y}=Ne(),b=N(s),{compositeProps:x,compositeRef:S,index:C}=ae({metadata:q.useMemo(()=>({disabled:r,id:b,value:a}),[r,b,a])}),w=a===f,E=q.useRef(!1);d(()=>{if(E.current){E.current=!1;return}if(!(w&&C>-1&&g!==C))return;let e=y;if(e!=null){let t=O(T(e));if(t&&D(e,t))return}r||v(C)},[w,C,g,v,r,y]);let{getButtonProps:k,buttonRef:A}=c({disabled:r,native:l,focusableWhenDisabled:!0}),P=p(a),F=q.useRef(!1),I=q.useRef(!1);function L(e){w||r||_(a,M(j,e.nativeEvent,void 0,{activationDirection:`none`}))}function R(e){w||(C>-1&&!r&&v(C),!r&&h&&(!F.current||F.current&&I.current)&&_(a,M(j,e.nativeEvent,void 0,{activationDirection:`none`})))}function z(e){if(w||r)return;F.current=!0;function t(){F.current=!1,I.current=!1}(!e.button||e.button===0)&&(I.current=!0,T(e.currentTarget).addEventListener(`pointerup`,t,{once:!0}))}return o(`button`,e,{state:q.useMemo(()=>({disabled:r,active:w,orientation:m}),[r,w,m]),ref:[t,A,S],props:[x,{role:`tab`,"aria-controls":P,"aria-selected":w,id:b,onClick:L,onFocus:R,onPointerDown:z,[G]:w?``:void 0,onKeyDownCapture(){E.current=!0}},u,k]})}),Fe=function(e){return e.index=`data-index`,e.activationDirection=`data-activation-direction`,e.orientation=`data-orientation`,e.hidden=`data-hidden`,e}({}),Ie=q.forwardRef(function(e,t){let{className:n,value:r,render:i,keepMounted:a=!1,...s}=e,{value:c,getTabIdByPanelValue:l,orientation:u,tabActivationDirection:f,registerMountedTabPanel:p,unregisterMountedTabPanel:m}=Oe(),h=N(),{ref:g,index:_}=k({metadata:q.useMemo(()=>({id:h,value:r}),[h,r])}),v=r!==c,y=l(r),b=o(`div`,e,{state:q.useMemo(()=>({hidden:v,orientation:u,tabActivationDirection:f}),[v,u,f]),ref:[t,g],props:[{"aria-labelledby":y,hidden:v,id:h??void 0,role:`tabpanel`,tabIndex:v?-1:0,[Fe.index]:_},s],stateAttributesMapping:Ae});return d(()=>{if(!(v&&!a)&&h!=null)return p(r,h),()=>{m(r,h)}},[v,a,r,h,p,m]),!v||a?b:null}),Le=q.forwardRef(function(e,t){let{activateOnFocus:n=!1,className:r,loopFocus:i=!0,render:o,...c}=e,{getTabElementBySelectedValue:l,onValueChange:u,orientation:d,value:f,setTabMap:p,tabActivationDirection:m}=Oe(),[h,g]=q.useState(0),[_,v]=q.useState(null),y=ze(f,d,_,l),b=a((e,t)=>{e!==f&&(t.activationDirection=y(e),u(e,t))}),x=q.useMemo(()=>({orientation:d,tabActivationDirection:m}),[d,m]),S={"aria-orientation":d===`vertical`?`vertical`:void 0,role:`tablist`},C=q.useMemo(()=>({activateOnFocus:n,highlightedTabIndex:h,onTabActivation:b,setHighlightedTabIndex:g,tabsListElement:_,value:f}),[n,h,b,g,_,f]);return(0,J.jsx)(Me.Provider,{value:C,children:(0,J.jsx)(oe,{render:o,className:r,state:x,refs:[t,v],props:[S,c],stateAttributesMapping:Ae,highlightedIndex:h,enableHomeAndEndKeys:!0,loopFocus:i,orientation:d,onHighlightedIndexChange:g,onMapChange:p,disabledIndices:s})})});function Re(e,t){let{left:n,top:r}=e.getBoundingClientRect(),{left:i,top:a}=t.getBoundingClientRect();return{left:n-i,top:r-a}}function ze(e,t,n,r){let[i,a]=q.useState(null);return d(()=>{if(e==null||n==null){a(null);return}let i=r(e);if(i==null){a(null);return}let{left:o,top:s}=Re(i,n);a(t===`horizontal`?o:s)},[t,r,n,e]),q.useCallback(o=>{if(o===e)return`none`;if(o==null)return a(null),`none`;if(o!=null&&n!=null){let e=r(o);if(e!=null){let{left:r,top:o}=Re(e,n);if(i==null)return a(t===`horizontal`?r:o),`none`;if(t===`horizontal`){if(r<i)return a(r),`left`;if(r>i)return a(r),`right`}else if(o<i)return a(o),`up`;else if(o>i)return a(o),`down`}}return`none`},[r,t,i,n,e])}function Be(e){let t=(0,K.c)(10),n,r,i;t[0]===e?(n=t[1],r=t[2],i=t[3]):({className:n,orientation:i,...r}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i);let a=i===void 0?`horizontal`:i,o;t[4]===n?o=t[5]:(o=p(`gap-2 group/tabs flex data-[orientation=horizontal]:flex-col`,n),t[4]=n,t[5]=o);let s;return t[6]!==a||t[7]!==r||t[8]!==o?(s=(0,J.jsx)(je,{"data-slot":`tabs`,"data-orientation":a,className:o,...r}),t[6]=a,t[7]=r,t[8]=o,t[9]=s):s=t[9],s}var Ve=l(`rounded-lg p-[3px] group-data-horizontal/tabs:h-8 data-[variant=line]:rounded-none group/tabs-list text-muted-foreground inline-flex w-fit items-center justify-center group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col`,{variants:{variant:{default:`bg-muted`,line:`gap-1 bg-transparent`}},defaultVariants:{variant:`default`}});function He(e){let t=(0,K.c)(11),n,r,i;t[0]===e?(n=t[1],r=t[2],i=t[3]):({className:n,variant:i,...r}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i);let a=i===void 0?`default`:i,o;t[4]!==n||t[5]!==a?(o=p(Ve({variant:a}),n),t[4]=n,t[5]=a,t[6]=o):o=t[6];let s;return t[7]!==r||t[8]!==o||t[9]!==a?(s=(0,J.jsx)(Le,{"data-slot":`tabs-list`,"data-variant":a,className:o,...r}),t[7]=r,t[8]=o,t[9]=a,t[10]=s):s=t[10],s}function Ue(e){let t=(0,K.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=p(`gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-sm font-medium group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg:not([class*='size-'])]:size-4 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring text-foreground/60 hover:text-foreground dark:text-muted-foreground dark:hover:text-foreground relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center whitespace-nowrap transition-all group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0`,`group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent`,`data-active:bg-background dark:data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 data-active:text-foreground`,`after:bg-foreground after:absolute after:opacity-0 after:transition-opacity group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,J.jsx)(Pe,{"data-slot":`tabs-trigger`,className:i,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function We(e){let t=(0,K.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=p(`text-sm flex-1 outline-none`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,J.jsx)(Ie,{"data-slot":`tabs-content`,className:i,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}var Ge=`__ONEQUERY_CONNECTOR_BASE_URL__`,Ke={amplitude:{providerLabel:`Amplitude`,ko:{title:`Amplitude API Key 연결 가이드`,description:"OneQuery에 Amplitude를 연결하려면 프로젝트의 `API Key`, `Secret Key`, 그리고 올바른 `region` 값이 필요합니다.",steps:[{title:`Settings 열기`,paragraphs:[`Amplitude에 로그인해 주세요. 일반 워크스페이스는 https://app.amplitude.com/, EU 워크스페이스는 Amplitude EU URL에서 열립니다.`,"우측 상단의 Settings를 열고, 좌측 사이드바에서 `Projects`와 `API Keys` 메뉴를 확인하세요."],imageSrc:`/images/amplitude/step1_settings_sidebar.png`,imageAlt:`Amplitude settings sidebar`},{title:`대상 프로젝트 선택`,paragraphs:["`Projects`를 클릭한 뒤 OneQuery이 읽을 프로젝트를 선택하세요.","프로젝트를 클릭하면 `General` 탭의 Project Details 카드로 이동합니다."],imageSrc:`/images/amplitude/step2_projects.png`,imageAlt:`Amplitude projects list`,reverse:!0},{title:`Secret Key 확인`,paragraphs:["프로젝트 `General` 화면의 `Project Details` 카드에서 `Secret Key` 옆 `Show`를 눌러 값을 확인하세요.","`API Key` 옆 `Manage`를 누르면 API Key 목록 페이지로 이동합니다."],note:"이 화면은 프로젝트별 Secret Key를 보여 줍니다. OneQuery에서는 이 값을 `credentials.secretKey`에 넣습니다.",imageSrc:`/images/amplitude/step3_project_keys.png`,imageAlt:`Amplitude project details card with secret key and API key actions`},{title:`API Key 복사 후 OneQuery에 연결`,paragraphs:["`API and Secret Keys` 페이지에서 대상 프로젝트의 활성 API Key를 복사하세요. 필요한 키가 없으면 `Generate API Key`를 사용하세요.","복사한 값을 `credentials.apiKey`에 넣고, `region`은 EU Amplitude 프로젝트일 때만 `eu`, 그 외에는 `us`로 설정하세요."],code:`{
|
|
2
|
+
"name": "amplitude_product",
|
|
3
|
+
"credentials": {
|
|
4
|
+
"type": "amplitude",
|
|
5
|
+
"apiKey": "amplitude_api_key",
|
|
6
|
+
"secretKey": "amplitude_secret_key",
|
|
7
|
+
"region": "us"
|
|
8
|
+
}
|
|
9
|
+
}`,note:"`onequery source connect --source amplitude --input '<json>'`로 연결할 수 있습니다.",imageSrc:`/images/amplitude/step4_api_keys.png`,imageAlt:`Amplitude API and Secret Keys page`,reverse:!0}],closingTitle:`연동 준비 완료!`,closingDescription:`이제 Amplitude의 API Key, Secret Key, region 값을 OneQuery에 넣어 연결을 마칠 수 있습니다.`,closingNote:`Amplitude 화면에서 Secret Key를 노출했다면 채팅이나 스크린샷에 남기지 말고, 노출되었을 경우 새 값으로 교체하세요.`},en:{title:`Amplitude API Key Guide`,description:"To connect Amplitude to OneQuery, collect the project's `API Key`, `Secret Key`, and the correct `region` value.",steps:[{title:`Open Settings`,paragraphs:[`Sign in to Amplitude. Standard workspaces open at https://app.amplitude.com/, while EU workspaces use the Amplitude EU app URL.`,"Open Settings from the top-right corner, then use the left sidebar to reach `Projects` and `API Keys`."],imageSrc:`/images/amplitude/step1_settings_sidebar.png`,imageAlt:`Amplitude settings sidebar`},{title:`Select the target project`,paragraphs:["Open `Projects`, then click the project that OneQuery should read.","That takes you to the project's `General` settings page."],imageSrc:`/images/amplitude/step2_projects.png`,imageAlt:`Amplitude projects list`,reverse:!0},{title:`Reveal the secret key`,paragraphs:["In the `Project Details` card on the `General` tab, click `Show` next to `Secret Key` to reveal the value you need for OneQuery.","Use `Manage` next to `API Key` to open the API key inventory page."],note:"Use the revealed value as `credentials.secretKey` in OneQuery.",imageSrc:`/images/amplitude/step3_project_keys.png`,imageAlt:`Amplitude project details card with secret key and API key actions`},{title:`Copy the API key and connect OneQuery`,paragraphs:["On `API and Secret Keys`, copy an active API key for the target project, or click `Generate API Key` if you need a new one.","Use that value as `credentials.apiKey`, and set `region` to `eu` only for Amplitude EU projects; otherwise use `us`."],code:`{
|
|
10
|
+
"name": "amplitude_product",
|
|
11
|
+
"credentials": {
|
|
12
|
+
"type": "amplitude",
|
|
13
|
+
"apiKey": "amplitude_api_key",
|
|
14
|
+
"secretKey": "amplitude_secret_key",
|
|
15
|
+
"region": "us"
|
|
16
|
+
}
|
|
17
|
+
}`,note:"Connect with `onequery source connect --source amplitude --input '<json>'`.",imageSrc:`/images/amplitude/step4_api_keys.png`,imageAlt:`Amplitude API and Secret Keys page`,reverse:!0}],closingTitle:`Integration Ready!`,closingDescription:`You now have the exact Amplitude fields OneQuery expects: API key, secret key, and region.`,closingNote:`If a secret key is ever exposed in chat or screenshots, rotate it before using it again.`}},aws_athena_connector:{providerLabel:`AWS Athena Connector`,ko:{title:`AWS Athena Connector Connection Guide`,description:`먼저 고객 AWS 환경에 OneQuery Connector를 배포하고, 커넥터가 발급받은 Connector ID와 Athena 설정값을 OneQuery에 입력해야 합니다.`,steps:[{title:`AWS에 커넥터 배포`,paragraphs:[`OneQuery Connector는 고객 AWS 계정 안에서 실행되어 Athena에 직접 질의합니다.`,`EC2, ECS, 혹은 다른 실행 환경에 커넥터를 띄우고 아래 환경 변수를 설정해 주세요.`],code:`ONEQUERY_BASE_URL=${Ge}
|
|
18
|
+
CONNECTOR_ENROLLMENT_TOKEN=<issued-by-onequery>
|
|
19
|
+
ORGANIZATION_ID=<your-onequery-organization-id>
|
|
20
|
+
AWS_REGION=<athena-region>`,note:`커넥터는 등록 후 주기적으로 heartbeat를 보내므로 외부에서 Athena 자격증명을 OneQuery에 직접 저장할 필요가 없습니다.`},{title:`Connector ID 확인`,paragraphs:[`커넥터가 정상 등록되면 로그에 connector.registration.succeeded 와 함께 Connector ID가 출력됩니다.`,`OneQuery의 Connector ID 입력칸에는 이 값을 그대로 넣어 주세요.`],code:`connector.registration.succeeded
|
|
21
|
+
connectorId=connector_12345678-abcd-ef01-2345-6789abcdef01`,note:`커넥터를 삭제 후 다시 등록하면 Connector ID가 바뀔 수 있습니다. 그 경우 OneQuery 데이터소스 설정도 새 ID로 업데이트해야 합니다.`},{title:`Athena Database 입력`,paragraphs:[`Athena Database에는 Athena 콘솔 또는 AWS Glue Data Catalog에 보이는 데이터베이스 이름을 입력합니다.`,`즉, 쿼리에서 FROM 앞에 붙는 카탈로그 내 데이터베이스 이름입니다. 테이블 이름이나 S3 버킷 이름을 넣는 칸이 아닙니다.`],bullets:[`예: analytics`,`예: prod_events`,`현재 Dev 테스트 환경 예시: onequery_connector_test`],code:`-- database가 analytics 라면
|
|
22
|
+
SELECT * FROM analytics.orders LIMIT 10;`},{title:`Athena Workgroup 입력`,paragraphs:[`Workgroup은 선택값입니다. 별도 워크그룹을 운영 중이면 그 이름을 입력하고, 아니라면 비워 두거나 기본값 primary를 사용하면 됩니다.`,`커넥터 IAM 권한과 Athena 설정이 해당 워크그룹에서 쿼리 실행을 허용해야 합니다.`],bullets:[`비워두면 커넥터 기본값 또는 Athena 기본 워크그룹을 사용합니다.`,`현재 Dev 테스트 환경 예시: onequery_connector_test`]},{title:`OneQuery에서 연결 테스트`,paragraphs:[`OneQuery Integration 페이지에서 AWS Athena Connector 데이터소스를 생성한 뒤 Test Connection을 실행합니다.`,`성공하면 OneQuery은 이 데이터소스를 다른 데이터베이스 데이터소스와 동일하게 쿼리할 수 있습니다.`],note:`만약 Connector query failed 또는 AWS_ACCESS_DENIED가 발생하면, 커넥터 실행 IAM 역할에 athena:StartQueryExecution, athena:GetQueryExecution, athena:GetQueryResults, Glue 조회 권한, 결과 S3 쓰기 권한이 있는지 확인해 주세요.`}],closingTitle:`입력값 요약`,closingDescription:`Connector ID에는 커넥터 등록 로그의 ID를, Athena Database에는 조회할 Athena/Glue 데이터베이스 이름을 입력합니다.`,closingNote:`현재 Dev 테스트 환경 기준 입력 예시는 Connector ID: 등록된 connector_* 값, Athena Database: onequery_connector_test, Athena Workgroup: onequery_connector_test 입니다.`},en:{title:`AWS Athena Connector Connection Guide`,description:`Deploy the OneQuery Connector inside the customer's AWS environment first, then enter the registered Connector ID and Athena settings in OneQuery.`,steps:[{title:`Deploy the connector in AWS`,paragraphs:[`The OneQuery Connector runs inside the customer's AWS account and queries Athena directly.`,`Run the connector on EC2, ECS, or another compute environment and configure the following environment variables.`],code:`ONEQUERY_BASE_URL=${Ge}
|
|
23
|
+
CONNECTOR_ENROLLMENT_TOKEN=<issued-by-onequery>
|
|
24
|
+
ORGANIZATION_ID=<your-onequery-organization-id>
|
|
25
|
+
AWS_REGION=<athena-region>`,note:`After enrollment, the connector sends heartbeats to OneQuery. You do not store Athena credentials directly in OneQuery.`},{title:`Find the Connector ID`,paragraphs:[`After successful enrollment, the connector logs print connector.registration.succeeded with a Connector ID.`,`Paste that exact value into the Connector ID field in OneQuery.`],code:`connector.registration.succeeded
|
|
26
|
+
connectorId=connector_12345678-abcd-ef01-2345-6789abcdef01`,note:`If the connector is recreated, the Connector ID can change. Update the OneQuery data source to the new value in that case.`},{title:`What to enter for Athena Database`,paragraphs:[`Enter the Athena database name shown in the Athena console or AWS Glue Data Catalog.`,`This is the database portion of the SQL path. Do not enter a table name or an S3 bucket name here.`],bullets:[`Example: analytics`,`Example: prod_events`,`Current Dev test environment example: onequery_connector_test`],code:`-- if the database is analytics
|
|
27
|
+
SELECT * FROM analytics.orders LIMIT 10;`},{title:`What to enter for Athena Workgroup`,paragraphs:[`The workgroup field is optional. Enter it only if your Athena queries must run in a specific workgroup.`,`If you do not use a dedicated workgroup, leave it blank or use the default workgroup primary.`],bullets:[`Leave it empty to use the connector default or Athena default workgroup.`,`Current Dev test environment example: onequery_connector_test`]},{title:`Run Test Connection in OneQuery`,paragraphs:[`Create the AWS Athena Connector data source in the OneQuery Integration page and run Test Connection.`,`When the test succeeds, OneQuery can query Athena through this connector the same way it queries other database-style data sources.`],note:`If you see Connector query failed or AWS_ACCESS_DENIED, verify the connector IAM role allows athena:StartQueryExecution, athena:GetQueryExecution, athena:GetQueryResults, Glue read access, and S3 write access for Athena query results.`}],closingTitle:`Field summary`,closingDescription:`Connector ID should be the ID printed by the connector enrollment log, and Athena Database should be the Athena/Glue database name you want OneQuery to query.`,closingNote:`For the current Dev test environment, the example values are Connector ID: the registered connector_* value, Athena Database: onequery_connector_test, Athena Workgroup: onequery_connector_test.`}},bigquery:{providerLabel:`BigQuery`,ko:{title:`BigQuery 서비스 계정 연결 가이드`,description:`OneQuery의 BigQuery 연결은 API 키가 아니라 Google Cloud Service Account JSON 키와 정확한 IAM 역할이 필요합니다.`,steps:[{title:`Service Accounts 페이지 열기`,paragraphs:[`Google Cloud Console에 로그인한 뒤 대상 BigQuery 프로젝트를 선택하세요: https://console.cloud.google.com`,"`IAM & Admin` > `Service Accounts`로 이동하고 `Create service account`를 클릭하세요.",`서비스 계정 이름은 자유롭게 정해도 됩니다. 이 계정이 나중에 OneQuery의 BigQuery 자격 증명이 됩니다.`],imageSrc:`/images/bigquery/step1_service_accounts.png`,imageAlt:`Google Cloud service accounts page`},{title:`정확한 BigQuery 역할 2개 부여하기`,paragraphs:["권한 단계에서 `BigQuery Data Viewer`와 `BigQuery Job User`를 둘 다 추가하세요.",`첫 번째 역할은 데이터셋 읽기용이고, 두 번째 역할은 쿼리 작업 실행용입니다.`],bullets:[`BigQuery Data Viewer`,`BigQuery Job User`],note:"Repo 코드상 OneQuery은 연결 테스트 때 `SELECT 1 AS onequery_connection_test`를 실행하므로, 읽기 권한만으로는 부족하고 Job 실행 권한도 필요합니다.",imageSrc:`/images/bigquery/step2_bigquery_roles.png`,imageAlt:`Google Cloud BigQuery roles`,reverse:!0},{title:`Keys 탭에서 JSON 키 만들기`,paragraphs:["서비스 계정을 만든 뒤 해당 계정 상세 페이지를 열고 `Keys` 탭으로 이동하세요.","`Add key` > `Create new key`를 누르세요."],imageSrc:`/images/bigquery/step3_add_key_menu.png`,imageAlt:`Google Cloud add key menu`},{title:`JSON 키를 OneQuery 형식으로 넣기`,paragraphs:["`JSON`을 선택하고 `Create`를 누르면 키 파일이 다운로드됩니다.",`웹 가이드는 이 실시간 흐름을 기준으로 작성되었고, OneQuery 웹 폼은 다운로드한 Google Service Account JSON 파일 자체를 바로 업로드하거나 붙여넣을 수 있습니다.`,'CLI에서는 raw Google JSON을 그대로 넣지 말고, 아래처럼 `authType: "service_account"`와 camelCase `serviceAccount` 필드로 정규화해서 사용하세요.'],code:`{
|
|
28
|
+
"name": "bigquery_prod",
|
|
29
|
+
"credentials": {
|
|
30
|
+
"type": "bigquery",
|
|
31
|
+
"authType": "service_account",
|
|
32
|
+
"projectId": "my-gcp-project",
|
|
33
|
+
"serviceAccount": {
|
|
34
|
+
"projectId": "my-gcp-project",
|
|
35
|
+
"clientEmail": "onequery@my-gcp-project.iam.gserviceaccount.com",
|
|
36
|
+
"privateKeyId": "key-id",
|
|
37
|
+
"privateKey": "-----BEGIN PRIVATE KEY-----\\n...\\n-----END PRIVATE KEY-----\\n"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}`,note:"OAuth도 지원되지만, 그 경우 repo는 `https://www.googleapis.com/auth/bigquery.readonly` 범위의 토큰을 기대합니다. JSON 키가 노출되었다면 즉시 해당 키를 삭제하거나 서비스 계정을 폐기하세요.",imageSrc:`/images/bigquery/step4_create_json_key.png`,imageAlt:`Google Cloud JSON key type selection`,reverse:!0}],closingTitle:`연결 준비 완료!`,closingDescription:`이제 프로젝트 ID와 서비스 계정 JSON 키로 OneQuery BigQuery 연결을 만들 수 있습니다.`,closingNote:"웹 폼은 raw Google JSON을 받아주지만, CLI JSON은 `projectId`와 nested `serviceAccount`를 명시적으로 넣어야 합니다."},en:{title:`BigQuery Service Account Guide`,description:`OneQuery's BigQuery connection uses a Google Cloud service account JSON key plus the correct IAM roles, not a generic API key.`,steps:[{title:`Open the Service Accounts page`,paragraphs:[`Sign in to Google Cloud Console and select the BigQuery project you want OneQuery to query: https://console.cloud.google.com`,"Open `IAM & Admin` > `Service Accounts`, then click `Create service account`.",`You can choose any recognizable service account name. This account becomes OneQuery's BigQuery credential.`],imageSrc:`/images/bigquery/step1_service_accounts.png`,imageAlt:`Google Cloud service accounts page`},{title:`Grant the exact BigQuery roles`,paragraphs:["In the permissions step, add both `BigQuery Data Viewer` and `BigQuery Job User`.",`The first role lets OneQuery read datasets, and the second lets it run query jobs.`],bullets:[`BigQuery Data Viewer`,`BigQuery Job User`],note:"Repo code verifies the connection by running `SELECT 1 AS onequery_connection_test`, so read access alone is not enough. The credential also needs permission to start jobs.",imageSrc:`/images/bigquery/step2_bigquery_roles.png`,imageAlt:`Google Cloud BigQuery roles`,reverse:!0},{title:`Open the Keys tab and add a key`,paragraphs:["After the service account is created, open it and go to the `Keys` tab.","Click `Add key` > `Create new key`."],imageSrc:`/images/bigquery/step3_add_key_menu.png`,imageAlt:`Google Cloud add key menu`},{title:`Use the JSON key in OneQuery's credential shape`,paragraphs:["Select `JSON` and click `Create` to download the key file.",`The OneQuery web form can accept the downloaded Google service-account JSON file directly by upload or paste.`,'For `onequery source connect`, normalize that file into OneQuery\'s schema with `authType: "service_account"` and camelCase `serviceAccount` fields.'],code:`{
|
|
41
|
+
"name": "bigquery_prod",
|
|
42
|
+
"credentials": {
|
|
43
|
+
"type": "bigquery",
|
|
44
|
+
"authType": "service_account",
|
|
45
|
+
"projectId": "my-gcp-project",
|
|
46
|
+
"serviceAccount": {
|
|
47
|
+
"projectId": "my-gcp-project",
|
|
48
|
+
"clientEmail": "onequery@my-gcp-project.iam.gserviceaccount.com",
|
|
49
|
+
"privateKeyId": "key-id",
|
|
50
|
+
"privateKey": "-----BEGIN PRIVATE KEY-----\\n...\\n-----END PRIVATE KEY-----\\n"
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}`,note:"OAuth is also accepted, but repo code expects `https://www.googleapis.com/auth/bigquery.readonly` for that flow. If a JSON key appears in a screenshot or chat, delete the key or delete the temporary service account.",imageSrc:`/images/bigquery/step4_create_json_key.png`,imageAlt:`Google Cloud JSON key type selection`,reverse:!0}],closingTitle:`Ready to Connect`,closingDescription:`You now have the project ID, service-account roles, and JSON key shape that OneQuery expects for BigQuery.`,closingNote:"The web form can normalize raw Google JSON, but the CLI payload must include both the top-level `projectId` and the nested `serviceAccount` object."}},ga:{providerLabel:`Google Analytics`,ko:{title:`Google Analytics 4 서비스 계정 연결 가이드`,description:`OneQuery의 GA4 연결은 Google Cloud Service Account JSON 키, GA4 Property 접근 권한, 그리고 Property ID가 필요합니다.`,steps:[{title:`Google Cloud Service Account 만들기`,paragraphs:["Google Cloud Console에서 `IAM & Admin` > `Service Accounts`를 열고 `Create service account`를 클릭하세요.",`서비스 계정 이름은 자유롭게 정해도 됩니다.`,"다운로드할 JSON 안의 `client_email` 값이 나중에 GA4 `Property access management`에 추가할 사용자 이메일이 됩니다."],imageSrc:`/images/ga4/step1_service_accounts.png`,imageAlt:`Google Cloud service accounts page`},{title:`JSON 키 다운로드하기`,paragraphs:["생성한 서비스 계정을 열고 `Keys` 탭으로 이동하세요.","`Add key` > `Create new key`를 누른 뒤 `JSON`을 선택하세요.","다운로드되는 파일에는 `project_id`, `client_email`, `private_key`, 그리고 경우에 따라 `private_key_id`가 들어 있습니다."],note:`OneQuery 웹 폼은 이 raw Google JSON 파일 자체를 업로드하거나 붙여넣을 수 있습니다.`,imageSrc:`/images/ga4/step2_create_json_key.png`,imageAlt:`Google Cloud JSON key type selection`,reverse:!0},{title:`GA4 Property에 Viewer 권한 추가하기`,paragraphs:["https://analytics.google.com 에서 `Admin` > `Property access management`를 여세요.","`Add users`를 누르고, 방금 받은 JSON 파일의 `client_email` 값을 이메일 주소로 붙여넣으세요.","표준 역할은 `Viewer`로 두고, `No Cost Metrics`와 `No Revenue Metrics` 체크박스는 선택하지 마세요."],note:"Repo 코드상 OneQuery은 `runReport`로 `activeUsers`를 조회해 연결을 테스트하므로, 최소 읽기 권한인 `Viewer`면 충분합니다.",imageSrc:`/images/ga4/step3_add_user_viewer.png`,imageAlt:`GA4 add user dialog with Viewer role`},{title:`Property ID를 복사해 OneQuery에 넣기`,paragraphs:["`Admin` > `Property details`로 이동해 `Copy property ID`를 클릭하세요.","OneQuery은 `123456789`처럼 숫자만 넣어도 되고, `properties/123456789` 형태도 받아들입니다.","CLI에서는 raw Google JSON 대신 아래처럼 정규화된 `serviceAccount` 구조를 사용하세요."],code:`{
|
|
54
|
+
"name": "ga_marketing",
|
|
55
|
+
"credentials": {
|
|
56
|
+
"type": "ga",
|
|
57
|
+
"authType": "service_account",
|
|
58
|
+
"propertyId": "123456789",
|
|
59
|
+
"serviceAccount": {
|
|
60
|
+
"projectId": "my-gcp-project",
|
|
61
|
+
"clientEmail": "onequery@my-gcp-project.iam.gserviceaccount.com",
|
|
62
|
+
"privateKeyId": "key-id",
|
|
63
|
+
"privateKey": "-----BEGIN PRIVATE KEY-----\\n...\\n-----END PRIVATE KEY-----\\n"
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}`,note:"OAuth도 지원되며, 그 경우 repo는 `https://www.googleapis.com/auth/analytics.readonly` 범위의 토큰을 기대합니다.",imageSrc:`/images/ga4/step4_property_details.png`,imageAlt:`GA4 property details page`,reverse:!0}],closingTitle:`연결 준비 완료!`,closingDescription:`이제 GA4 Property ID와 서비스 계정 JSON 키를 사용해 OneQuery 연결을 만들 수 있습니다.`,closingNote:`서비스 계정 키가 노출되었다면 즉시 해당 키를 삭제하거나 임시 서비스 계정을 폐기하세요.`},en:{title:`Google Analytics 4 Service Account Guide`,description:`OneQuery's GA4 connection needs a Google Cloud service account JSON key, GA4 property access, and the property ID.`,steps:[{title:`Create the Google Cloud service account`,paragraphs:["In Google Cloud Console, open `IAM & Admin` > `Service Accounts` and click `Create service account`.",`Any recognizable service-account name is fine.`,"The downloaded JSON file will include the `client_email` value that you later add to GA4 as a user."],imageSrc:`/images/ga4/step1_service_accounts.png`,imageAlt:`Google Cloud service accounts page`},{title:`Download the JSON key`,paragraphs:["Open the new service account and go to the `Keys` tab.","Click `Add key` > `Create new key`, then keep `JSON` selected.","The downloaded file contains `project_id`, `client_email`, `private_key`, and sometimes `private_key_id`."],note:`The OneQuery web form can accept that raw Google JSON file directly by upload or paste.`,imageSrc:`/images/ga4/step2_create_json_key.png`,imageAlt:`Google Cloud JSON key type selection`,reverse:!0},{title:`Grant Viewer access in GA4`,paragraphs:["In GA4, open `Admin` > `Property access management`.","Click `Add users`, paste the service-account email from the JSON file's `client_email`, and keep the standard role set to `Viewer`.","Leave `No Cost Metrics` and `No Revenue Metrics` unchecked."],note:"Repo code tests GA by calling `runReport` for `activeUsers`, so the minimal read-only property role, `Viewer`, is enough.",imageSrc:`/images/ga4/step3_add_user_viewer.png`,imageAlt:`GA4 add user dialog with Viewer role`},{title:`Copy the property ID and connect OneQuery`,paragraphs:["Open `Admin` > `Property details` and click `Copy property ID`.","OneQuery accepts either plain digits such as `123456789` or the prefixed form `properties/123456789`.","For `onequery source connect`, normalize the Google JSON into OneQuery's `serviceAccount` schema as shown below."],code:`{
|
|
67
|
+
"name": "ga_marketing",
|
|
68
|
+
"credentials": {
|
|
69
|
+
"type": "ga",
|
|
70
|
+
"authType": "service_account",
|
|
71
|
+
"propertyId": "123456789",
|
|
72
|
+
"serviceAccount": {
|
|
73
|
+
"projectId": "my-gcp-project",
|
|
74
|
+
"clientEmail": "onequery@my-gcp-project.iam.gserviceaccount.com",
|
|
75
|
+
"privateKeyId": "key-id",
|
|
76
|
+
"privateKey": "-----BEGIN PRIVATE KEY-----\\n...\\n-----END PRIVATE KEY-----\\n"
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}`,note:"OAuth is also supported, and repo code expects the `https://www.googleapis.com/auth/analytics.readonly` scope for that flow.",imageSrc:`/images/ga4/step4_property_details.png`,imageAlt:`GA4 property details page`,reverse:!0}],closingTitle:`Ready to Connect`,closingDescription:`You now have the GA4 property ID, the service-account JSON key, and the exact Viewer permission OneQuery expects.`,closingNote:`If the service-account key was exposed while documenting or sharing setup steps, delete that key or delete the temporary service account.`}},github:{providerLabel:`GitHub`,ko:{title:`GitHub Fine-grained Token 생성 가이드`,description:`OneQuery에 GitHub를 연결하려면 선택한 저장소만 읽을 수 있는 Fine-grained personal access token이 필요합니다.`,steps:[{title:`GitHub 토큰 생성 페이지 열기`,paragraphs:[`GitHub에 로그인한 뒤 다음 페이지로 이동하세요: https://github.com/settings/personal-access-tokens/new`,`좌측 메뉴에서 Settings > Developer settings > Personal access tokens > Fine-grained tokens 경로로 들어가도 됩니다.`],imageSrc:`/images/github-token-guide/step1_signin.png`,imageAlt:`GitHub sign-in page for personal access tokens`},{title:`토큰 기본 정보 입력`,paragraphs:["Token name에는 `OneQuery`처럼 알아보기 쉬운 이름을 입력하세요.",`Resource owner는 연결할 저장소를 소유한 계정 또는 조직으로 선택하세요.`,"Expiration을 정하고, Repository access는 `Only select repositories`로 설정한 뒤 OneQuery이 읽을 저장소를 선택하세요."],note:"Description은 선택 사항이지만 `Read-only token for OneQuery`처럼 적어두면 관리가 쉽습니다.",imageSrc:`/images/github-token-guide/step2_new_fine_grained_token_sanitized.png`,imageAlt:`GitHub fine-grained token form`,reverse:!0},{title:`읽기 전용 권한 설정`,paragraphs:[`Permissions 섹션에서 Add permissions를 클릭하세요.`,"`Contents`, `Issues`, `Pull requests`를 모두 `Read-only`로 설정하세요.","GitHub가 자동으로 요구하는 `Metadata: Read-only`도 함께 포함됩니다."],note:`이 설정이면 OneQuery이 저장소 내용을 읽고, 이슈와 PR 데이터를 조회할 수 있습니다.`,imageSrc:`/images/github-token-guide/step3_permissions_configured_sanitized.png`,imageAlt:`GitHub repository permissions configured for OneQuery`},{title:`토큰 복사 후 OneQuery에 연결`,paragraphs:[`Generate token을 누른 뒤 표시되는 토큰 값을 즉시 복사하세요. GitHub는 이 값을 다시 보여주지 않습니다.`,"복사한 값을 `onequery source connect --source github --input '<json>'`의 `credentials.accessToken`에 넣어 연결하세요."],code:`{
|
|
80
|
+
"name": "github_main",
|
|
81
|
+
"credentials": {
|
|
82
|
+
"type": "github",
|
|
83
|
+
"accessToken": "github_pat_..."
|
|
84
|
+
}
|
|
85
|
+
}`,note:`토큰 값은 민감 정보입니다. 채팅이나 스크린샷에 노출되었다면 즉시 폐기하고 새 토큰을 발급하세요.`,imageSrc:`/images/github-token-guide/step4_token_created_sanitized.png`,imageAlt:`GitHub one-time personal access token copy screen`,reverse:!0}],closingTitle:`연결 준비 완료!`,closingDescription:`이제 생성한 토큰을 OneQuery GitHub 연결 화면이나 CLI 입력 JSON에 넣으면 됩니다.`,closingNote:`필요한 저장소만 선택하고 Read-only 권한만 부여하는 것이 가장 안전합니다.`},en:{title:`GitHub Fine-Grained Token Guide`,description:`To connect GitHub to OneQuery, create a fine-grained personal access token with read-only access to the repositories you want OneQuery to query.`,steps:[{title:`Open the GitHub token page`,paragraphs:[`Sign in to GitHub, then open https://github.com/settings/personal-access-tokens/new`,`You can also navigate there from Settings > Developer settings > Personal access tokens > Fine-grained tokens.`],imageSrc:`/images/github-token-guide/step1_signin.png`,imageAlt:`GitHub sign-in page for personal access tokens`},{title:`Fill in the token details`,paragraphs:["Set `Token name` to something recognizable such as `OneQuery`.","Choose the account or organization that owns the repositories as the `Resource owner`.","Set an expiration, choose `Only select repositories`, and select the repositories that OneQuery should read."],note:"The description is optional, but `Read-only token for OneQuery` makes the token easier to identify later.",imageSrc:`/images/github-token-guide/step2_new_fine_grained_token_sanitized.png`,imageAlt:`GitHub fine-grained token form`,reverse:!0},{title:`Grant read-only repository permissions`,paragraphs:[`In the Permissions section, click Add permissions.`,"Set `Contents`, `Issues`, and `Pull requests` to `Read-only`.","GitHub also includes the required `Metadata: Read-only` permission."],note:`These permissions let OneQuery read repository contents plus issue and pull request data without write access.`,imageSrc:`/images/github-token-guide/step3_permissions_configured_sanitized.png`,imageAlt:`GitHub repository permissions configured for OneQuery`},{title:`Copy the token and connect OneQuery`,paragraphs:[`Click Generate token, then copy the token value immediately. GitHub only shows it once.`,"Use that value as `credentials.accessToken` in `onequery source connect --source github --input '<json>'`."],code:`{
|
|
86
|
+
"name": "github_main",
|
|
87
|
+
"credentials": {
|
|
88
|
+
"type": "github",
|
|
89
|
+
"accessToken": "github_pat_..."
|
|
90
|
+
}
|
|
91
|
+
}`,note:`Treat the token as sensitive. If it appears in a screenshot or chat, revoke it and create a new one.`,imageSrc:`/images/github-token-guide/step4_token_created_sanitized.png`,imageAlt:`GitHub one-time personal access token copy screen`,reverse:!0}],closingTitle:`Ready to Connect`,closingDescription:`Paste the token into the OneQuery GitHub connection form or the CLI JSON payload to finish the setup.`,closingNote:`For least privilege, keep repository access limited to the repos you actually want OneQuery to read.`}},laminar:{providerLabel:`Laminar`},mixpanel:{providerLabel:`Mixpanel`,ko:{title:`Mixpanel 서비스 계정 연결 가이드`,description:`OneQuery에 Mixpanel을 연결하려면 조직 단위 Service Account와 대상 Project ID가 필요합니다.`,steps:[{title:`Organization Service Accounts 열기`,paragraphs:[`Mixpanel에 로그인해 주세요: https://mixpanel.com`,"Settings를 연 뒤 `Org` 탭으로 이동하고, 좌측 메뉴에서 `Service Accounts`를 선택하세요.","우측 상단의 `Add Service Account`를 클릭해 새 계정을 만드세요."],imageSrc:`/images/mixpanel/step1_service_accounts.png`,imageAlt:`Mixpanel organization service accounts page`},{title:`Service Account 생성하기`,paragraphs:["이름을 입력한 뒤 `Organization Role`은 `Member`로 두세요.","연결할 프로젝트를 선택하고 `Project Role`은 `Consumer`로 유지하세요.","`Expires`는 `Never`로 둘 수 있고, 조직 정책이 있다면 더 짧은 만료일을 선택해도 됩니다."],note:`OneQuery의 Mixpanel 연결은 프로젝트 접근 권한과 읽기 가능한 서비스 계정 자격 증명만 필요합니다.`,imageSrc:`/images/mixpanel/step2_create_service_account.png`,imageAlt:`Mixpanel create service account modal`,reverse:!0},{title:`Username과 Secret 저장하기`,paragraphs:["생성 직후 표시되는 `Username`과 `Secret`을 복사해 두세요.","OneQuery에서는 이 값을 각각 `credentials.username`, `credentials.secret`에 입력합니다."],note:`Secret은 이 화면을 닫으면 다시 볼 수 없습니다. 스크린샷이나 채팅에 노출되었다면 해당 계정을 폐기하거나 Secret을 다시 발급하세요.`,imageSrc:`/images/mixpanel/step3_credentials.png`,imageAlt:`Mixpanel service account credentials`},{title:`Project ID와 Region 확인하기`,paragraphs:["Settings의 `Project` 탭 `Overview`에서 `Project ID`를 복사해 `credentials.projectId`에 넣으세요.","`Data Residency`를 보고 `US -> us`, `EU -> eu`, `India -> in`으로 `credentials.region`을 맞추세요.","`workspaceId`는 선택 사항입니다. 특정 Mixpanel workspace/data view를 강제로 쓰는 경우가 아니면 비워 두면 됩니다."],code:`{
|
|
92
|
+
"name": "mixpanel_growth",
|
|
93
|
+
"credentials": {
|
|
94
|
+
"type": "mixpanel",
|
|
95
|
+
"projectId": "12345",
|
|
96
|
+
"username": "service-account-username",
|
|
97
|
+
"secret": "service-account-secret",
|
|
98
|
+
"region": "us"
|
|
99
|
+
}
|
|
100
|
+
}`,note:"`onequery source connect --source mixpanel --input '<json>'`에서 위 JSON을 그대로 사용하고, 필요할 때만 `workspaceId`를 추가하세요.",imageSrc:`/images/mixpanel/step4_project_settings.png`,imageAlt:`Mixpanel project settings with project ID and data residency`,reverse:!0}],closingTitle:`연결 준비 완료!`,closingDescription:`이제 Mixpanel Service Account 자격 증명과 Project ID로 OneQuery 연결을 마칠 수 있습니다.`,closingNote:`서비스 계정 Secret이 한 번이라도 노출되었다면 즉시 삭제하거나 새로 발급하는 것이 안전합니다.`},en:{title:`Mixpanel Service Account Guide`,description:`To connect Mixpanel to OneQuery, create an org-level service account and collect the target project ID.`,steps:[{title:`Open Organization Service Accounts`,paragraphs:[`Sign in to Mixpanel at https://mixpanel.com`,"Open Settings, switch to the `Org` tab, and choose `Service Accounts` from the left navigation.","Click `Add Service Account` in the top-right corner."],imageSrc:`/images/mixpanel/step1_service_accounts.png`,imageAlt:`Mixpanel organization service accounts page`},{title:`Create the service account`,paragraphs:["Enter a name, keep `Organization Role` set to `Member`, and select the project that OneQuery should read.","Keep `Project Role` set to `Consumer`.","Leave `Expires` as `Never`, or choose a shorter expiration if your security policy requires rotation."],note:`OneQuery only needs project access plus working read credentials for the Mixpanel Query API.`,imageSrc:`/images/mixpanel/step2_create_service_account.png`,imageAlt:`Mixpanel create service account modal`,reverse:!0},{title:`Copy the username and secret`,paragraphs:["After you create the account, Mixpanel shows the `Username` and `Secret` once.","Use them as `credentials.username` and `credentials.secret` in OneQuery."],note:`Treat the secret as compromised if it appears in a screenshot or chat. Delete the account or rotate the secret and create a new one.`,imageSrc:`/images/mixpanel/step3_credentials.png`,imageAlt:`Mixpanel service account credentials`},{title:`Copy the project ID and choose the region`,paragraphs:["Open Settings > `Project` > `Overview`, then copy `Project ID` into `credentials.projectId`.","Map `Data Residency` to OneQuery's `region` value: `US -> us`, `EU -> eu`, `India -> in`.","Leave `workspaceId` empty unless you already know that your Mixpanel setup requires a specific workspace or data view override."],code:`{
|
|
101
|
+
"name": "mixpanel_growth",
|
|
102
|
+
"credentials": {
|
|
103
|
+
"type": "mixpanel",
|
|
104
|
+
"projectId": "12345",
|
|
105
|
+
"username": "service-account-username",
|
|
106
|
+
"secret": "service-account-secret",
|
|
107
|
+
"region": "us"
|
|
108
|
+
}
|
|
109
|
+
}`,note:"Run `onequery source connect --source mixpanel --input '<json>'` with that payload, and add `workspaceId` only when you intentionally need it.",imageSrc:`/images/mixpanel/step4_project_settings.png`,imageAlt:`Mixpanel project settings with project ID and data residency`,reverse:!0}],closingTitle:`Ready to Connect`,closingDescription:`You now have the exact Mixpanel fields OneQuery expects: username, secret, project ID, and region.`,closingNote:`If the one-time secret was exposed while documenting or sharing setup steps, revoke or delete that temporary service account.`}},mongodb:{providerLabel:`MongoDB`},mysql:{providerLabel:`MySQL`,ko:{title:`AWS RDS 읽기 전용 계정 생성`,description:`OneQuery이 데이터베이스를 안전하게 분석할 수 있도록 Read-only 권한을 가진 계정을 생성해 주세요.`,steps:[{title:`데이터베이스 접속하기`,paragraphs:[`사용 중인 데이터베이스 클라이언트(DBeaver, pgAdmin 등)나 터미널을 이용해 AWS RDS의 Admin 계정으로 접속해 주세요.`,`접속 후 SQL 쿼리를 실행할 수 있는 에디터 창을 열어주세요.`],imageSrc:`/images/rds/step1_connect.png`,imageAlt:`Database Client Connection`},{title:`읽기 전용 유저 생성 (SQL)`,paragraphs:[`아래 SQL 명령어를 복사하여 실행해 주세요.`],code:`CREATE USER onequery_reader WITH PASSWORD 'your_secure_password';
|
|
110
|
+
-- DB 접속 권한 부여
|
|
111
|
+
GRANT CONNECT ON DATABASE your_db_name TO onequery_reader;`,note:`'your_secure_password'와 'your_db_name'을 실제 값으로 변경해 주세요.`,imageSrc:`/images/rds/step2_create_user.png`,imageAlt:`SQL Create User Query`,reverse:!0},{title:`조회 권한 부여 (SQL)`,paragraphs:[`생성한 유저에게 테이블 조회 권한을 부여합니다.`],code:`-- PostgreSQL의 경우:
|
|
112
|
+
GRANT USAGE ON SCHEMA public TO onequery_reader;
|
|
113
|
+
GRANT SELECT ON ALL TABLES IN SCHEMA public TO onequery_reader;
|
|
114
|
+
|
|
115
|
+
-- MySQL의 경우:
|
|
116
|
+
GRANT SELECT ON your_db_name.* TO 'onequery_reader';`,note:`이 명령어는 현재 존재하는 테이블에 대해서만 권한을 부여합니다.`,imageSrc:`/images/rds/step3_grant.png`,imageAlt:`SQL Grant Privileges Query`},{title:`연결 정보 입력`,paragraphs:[`OneQuery에 다음 정보를 입력해 주세요:`],bullets:[`Host (Endpoint): adb-xxx...aws.com`,`Database Name: your_db_name`,`Username: onequery_reader`,`Password: 설정한 비밀번호`],imageSrc:`/images/rds/step4_info.png`,imageAlt:`Connection Details Form`,reverse:!0}],closingTitle:`설정이 완료되었습니다!`,closingDescription:`이제 OneQuery을 통해 RDS 데이터를 안전하게 분석할 수 있습니다.`},en:{title:`AWS RDS Read-Only Account Guide`,description:`Create a Read-only account so OneQuery can safely analyze your database.`,steps:[{title:`Connect to Database`,paragraphs:[`Use your database client (DBeaver, pgAdmin, etc.) or terminal to connect to the Admin account of your AWS RDS.`,`After connecting, open an editor window where you can execute SQL queries.`],imageSrc:`/images/rds/step1_connect.png`,imageAlt:`Database Client Connection`},{title:`Create Read-Only User (SQL)`,paragraphs:[`Copy and execute the SQL command below.`],code:`CREATE USER onequery_reader WITH PASSWORD 'your_secure_password';
|
|
117
|
+
-- Grant DB connection privileges
|
|
118
|
+
GRANT CONNECT ON DATABASE your_db_name TO onequery_reader;`,note:`Please change 'your_secure_password' and 'your_db_name' to actual values.`,imageSrc:`/images/rds/step2_create_user.png`,imageAlt:`SQL Create User Query`,reverse:!0},{title:`Grant Select Privileges (SQL)`,paragraphs:[`Grant table select privileges to the created user.`],code:`-- For PostgreSQL:
|
|
119
|
+
GRANT USAGE ON SCHEMA public TO onequery_reader;
|
|
120
|
+
GRANT SELECT ON ALL TABLES IN SCHEMA public TO onequery_reader;
|
|
121
|
+
|
|
122
|
+
-- For MySQL:
|
|
123
|
+
GRANT SELECT ON your_db_name.* TO 'onequery_reader';`,note:`This command grants privileges only for currently existing tables.`,imageSrc:`/images/rds/step3_grant.png`,imageAlt:`SQL Grant Privileges Query`},{title:`Enter Connection Details`,paragraphs:[`Please enter the following information into OneQuery:`],bullets:[`Host (Endpoint): adb-xxx...aws.com`,`Database Name: your_db_name`,`Username: onequery_reader`,`Password: Set password`],imageSrc:`/images/rds/step4_info.png`,imageAlt:`Connection Details Form`,reverse:!0}],closingTitle:`Setup Complete!`,closingDescription:`You can now securely analyze RDS data via OneQuery.`}},postgres:{providerLabel:`PostgreSQL`,ko:{title:`PostgreSQL 연동 가이드`,description:`PostgreSQL 데이터베이스의 연결 정보(Host, DB Name 등)를 확인하고 읽기 전용 사용자를 생성해 주세요.`,steps:[{title:`읽기 전용 사용자 생성`,paragraphs:[`데이터베이스의 안전을 위해 OneQuery 전용 읽기 권한 사용자를 생성하는 것을 권장합니다.`,`다음 SQL 명령어를 실행하여 사용자를 생성하고 권한을 부여하세요.`],code:`-- 사용자 생성
|
|
124
|
+
CREATE USER onequery_readonly WITH PASSWORD 'secure_password';
|
|
125
|
+
|
|
126
|
+
-- 읽기 권한 부여
|
|
127
|
+
GRANT CONNECT ON DATABASE your_database TO onequery_readonly;
|
|
128
|
+
GRANT USAGE ON SCHEMA public TO onequery_readonly;
|
|
129
|
+
GRANT SELECT ON ALL TABLES IN SCHEMA public TO onequery_readonly;
|
|
130
|
+
|
|
131
|
+
-- 향후 생성될 테이블에도 권한 자동 부여 (선택)
|
|
132
|
+
ALTER DEFAULT PRIVILEGES IN SCHEMA public
|
|
133
|
+
GRANT SELECT ON TABLES TO onequery_readonly;`,imageSrc:`/images/postgresql/step1_create_user.png`,imageAlt:`PostgreSQL Create User SQL`},{title:`연결 정보 확인`,paragraphs:[`다음 정보를 준비해 주세요:`],bullets:[`Host: 데이터베이스 주소 (예: db.example.com)`,`Port: 기본값은 5432 입니다.`,`Database Name: 연결할 데이터베이스 이름`,`Username: onequery_readonly`,`Password: 설정한 비밀번호`],imageSrc:`/images/postgresql/step2_connection.png`,imageAlt:`PostgreSQL Connection Form`,reverse:!0}]},en:{title:`PostgreSQL Integration Guide`,description:`Check your PostgreSQL database connection details (Host, DB Name, etc.) and create a read-only user.`,steps:[{title:`Create Read-Only User`,paragraphs:[`For database security, we recommend creating a OneQuery-specific read-only user.`,`Run the following SQL commands to create the user and grant permissions.`],code:`-- Create User
|
|
134
|
+
CREATE USER onequery_readonly WITH PASSWORD 'secure_password';
|
|
135
|
+
|
|
136
|
+
-- Grant Read Permissions
|
|
137
|
+
GRANT CONNECT ON DATABASE your_database TO onequery_readonly;
|
|
138
|
+
GRANT USAGE ON SCHEMA public TO onequery_readonly;
|
|
139
|
+
GRANT SELECT ON ALL TABLES IN SCHEMA public TO onequery_readonly;
|
|
140
|
+
|
|
141
|
+
-- Automatically grant permissions on future tables (Optional)
|
|
142
|
+
ALTER DEFAULT PRIVILEGES IN SCHEMA public
|
|
143
|
+
GRANT SELECT ON TABLES TO onequery_readonly;`,imageSrc:`/images/postgresql/step1_create_user.png`,imageAlt:`PostgreSQL Create User SQL`},{title:`Check Connection Details`,paragraphs:[`Please prepare the following information:`],bullets:[`Host: Database Address (e.g., db.example.com)`,`Port: Default is 5432.`,`Database Name: Name of the database to connect to`,`Username: onequery_readonly`,`Password: The password you set`],imageSrc:`/images/postgresql/step2_connection.png`,imageAlt:`PostgreSQL Connection Form`,reverse:!0}]}},supabase:{providerLabel:`Supabase`,ko:{title:`Supabase 연동 가이드`,description:`Supabase는 내부적으로 PostgreSQL이므로 Project Settings에서 연결 정보와 Database password를 확인한 뒤 읽기 전용 계정 또는 전용 접속 정보를 사용해 연결해 주세요.`,steps:[{title:`Connection string 확인`,paragraphs:["Supabase Dashboard에서 대상 프로젝트를 연 뒤 `Project Settings > Database`로 이동하세요.","`Connection string` 또는 `Connection info` 섹션에서 Host, Port, Database, User 정보를 확인할 수 있습니다."]},{title:`Database password 준비`,paragraphs:[`Supabase는 데이터베이스 비밀번호가 필요합니다. 프로젝트 생성 시 설정한 Database password를 준비하세요.`,`비밀번호를 잊어버렸다면 Supabase Dashboard에서 데이터베이스 비밀번호를 재설정한 뒤 새 값을 사용하세요.`],reverse:!0},{title:`가급적 읽기 전용 계정 사용`,paragraphs:[`운영 환경이라면 Supabase 기본 관리자 계정보다 OneQuery 전용 읽기 계정을 만들어 사용하는 편이 안전합니다.`,`Supabase SQL Editor에서 아래 예시처럼 읽기 전용 권한을 부여할 수 있습니다.`],code:`CREATE USER onequery_readonly WITH PASSWORD 'secure_password';
|
|
144
|
+
|
|
145
|
+
GRANT CONNECT ON DATABASE postgres TO onequery_readonly;
|
|
146
|
+
GRANT USAGE ON SCHEMA public TO onequery_readonly;
|
|
147
|
+
GRANT SELECT ON ALL TABLES IN SCHEMA public TO onequery_readonly;
|
|
148
|
+
|
|
149
|
+
ALTER DEFAULT PRIVILEGES IN SCHEMA public
|
|
150
|
+
GRANT SELECT ON TABLES TO onequery_readonly;`},{title:`OneQuery에 입력`,paragraphs:[`OneQuery에서는 Supabase를 선택한 뒤 Supabase connection string 또는 수동 입력 값을 그대로 넣으면 됩니다.`,`Supabase는 SSL이 필요하므로 이 integration은 내부적으로 PostgreSQL + SSL required 설정으로 저장됩니다.`],bullets:[`Host 예시: db.<project-ref>.supabase.co`,`Port: 5432`,`Database: postgres`,`Username 예시: postgres.<project-ref> 또는 읽기 전용 사용자`],reverse:!0}],closingTitle:`연동 준비 완료!`,closingDescription:`이제 Supabase 프로젝트의 Postgres 데이터를 OneQuery에서 직접 조회할 수 있습니다.`},en:{title:`Supabase Integration Guide`,description:`Supabase is backed by PostgreSQL. Open the project database settings, collect the connection details and database password, then connect it in OneQuery.`,steps:[{title:`Find the connection string`,paragraphs:["Open the target project in the Supabase Dashboard and go to `Project Settings > Database`.","Use the `Connection string` or `Connection info` section to collect host, port, database, and username."]},{title:`Prepare the database password`,paragraphs:[`Supabase requires the database password. Use the database password configured for the project.`,`If you no longer have it, reset the database password in Supabase and use the new value.`],reverse:!0},{title:`Prefer a read-only user`,paragraphs:[`For production projects, using a OneQuery-specific read-only user is safer than reusing the default admin connection.`,`You can create one from the Supabase SQL editor with the example below.`],code:`CREATE USER onequery_readonly WITH PASSWORD 'secure_password';
|
|
151
|
+
|
|
152
|
+
GRANT CONNECT ON DATABASE postgres TO onequery_readonly;
|
|
153
|
+
GRANT USAGE ON SCHEMA public TO onequery_readonly;
|
|
154
|
+
GRANT SELECT ON ALL TABLES IN SCHEMA public TO onequery_readonly;
|
|
155
|
+
|
|
156
|
+
ALTER DEFAULT PRIVILEGES IN SCHEMA public
|
|
157
|
+
GRANT SELECT ON TABLES TO onequery_readonly;`},{title:`Enter it in OneQuery`,paragraphs:[`Select Supabase in OneQuery, then paste the Supabase connection string or fill the connection details manually.`,`This integration is stored internally as PostgreSQL with SSL required, so the runtime path stays identical to Postgres.`],bullets:[`Host example: db.<project-ref>.supabase.co`,`Port: 5432`,`Database: postgres`,`Username example: postgres.<project-ref> or your read-only user`],reverse:!0}],closingTitle:`Integration Ready!`,closingDescription:`You can now query your Supabase Postgres data directly from OneQuery.`}},posthog:{providerLabel:`PostHog`,ko:{title:`PostHog API 연동 가이드`,description:`OneQuery과 연동하려면 PostHog의 Project ID, Personal API Key, 그리고 올바른 Host URL이 필요합니다.`,steps:[{title:`Host URL 확인하기`,paragraphs:[`PostHog Cloud를 사용 중이면 리전별 Host URL을 확인해 주세요.`,`미국 리전은 https://us.posthog.com, 유럽 리전은 https://eu.posthog.com 입니다. Self-hosted 환경이면 해당 배포의 Base URL을 사용하세요.`]},{title:`Project ID 찾기`,paragraphs:[`PostHog에서 연결하려는 프로젝트를 연 뒤 Project settings 또는 프로젝트 상세 정보 화면으로 이동해 주세요.`,`Project ID 값을 복사해 주세요.`],reverse:!0},{title:`Personal API Key 발급`,paragraphs:[`Settings에서 Personal API keys 메뉴를 열고 새 키를 생성해 주세요.`,`분석/조회에 필요한 읽기 권한이 포함된 키를 사용하세요.`],note:`Personal API Key는 생성 직후에만 다시 볼 수 있는 경우가 있으니 안전한 곳에 저장해 두세요.`},{title:`OneQuery에 입력`,paragraphs:[`복사한 Project ID, Personal API Key, Host URL을 OneQuery 연결 화면에 입력해 주세요.`],bullets:[`Project ID`,`Personal API Key`,`Host URL`],reverse:!0}],closingTitle:`연동 준비 완료!`,closingDescription:`이제 OneQuery에서 PostHog 데이터를 안전하게 조회할 수 있습니다.`},en:{title:`PostHog API Guide`,description:`To connect PostHog to OneQuery, you need the Project ID, a Personal API Key, and the correct Host URL.`,steps:[{title:`Confirm Your Host URL`,paragraphs:[`Check which PostHog host your project lives on before connecting.`,`Use https://us.posthog.com for US Cloud, https://eu.posthog.com for EU Cloud, or the base URL of your self-hosted deployment.`]},{title:`Find the Project ID`,paragraphs:[`Open the PostHog project you want to connect, then navigate to the project settings or project details page.`,`Copy the Project ID value.`],reverse:!0},{title:`Create a Personal API Key`,paragraphs:[`Open Settings and go to Personal API keys.`,`Create a key with the read/query access required for analytics requests.`],note:`Save the key immediately if your workspace only shows it once.`},{title:`Enter the Values in OneQuery`,paragraphs:[`Paste the copied values into the OneQuery setup form.`],bullets:[`Project ID`,`Personal API Key`,`Host URL`],reverse:!0}],closingTitle:`Integration Ready!`,closingDescription:`You can now query PostHog data from OneQuery.`}},sentry:{providerLabel:`Sentry`,ko:{title:`Sentry Personal Token 연결 가이드`,description:"OneQuery의 Sentry 연결은 `authToken`, `organizationSlug`, optional `projectSlug`, optional `apiBaseUrl`를 받습니다. 아래 단계대로 Sentry Personal Token과 slug 값을 확인해 주세요.",steps:[{title:`Personal Tokens 페이지 열기`,paragraphs:[`Sentry에 로그인한 뒤 Settings > Developer Settings > Personal Tokens로 이동해 주세요.`,`직접 열려면 https://sentry.io/settings/account/api/auth-tokens/ 를 사용해도 됩니다.`],note:"목록이 비어 있어도 괜찮습니다. `Create New Token`으로 바로 다음 단계로 이동할 수 있습니다.",imageSrc:`/images/sentry/step1_personal_tokens.png`,imageAlt:`Sentry Personal Tokens page`},{title:`필요한 읽기 권한으로 토큰 생성`,paragraphs:["`Create New Token`을 누르고 이름은 `OneQuery`처럼 알아보기 쉽게 입력해 주세요.","권한은 `Project = Read`, `Issue & Event = Read`, `Organization = Read`로 설정해 주세요."],bullets:["`Project = Read` -> `project:read`","`Issue & Event = Read` -> `event:read`","`Organization = Read` -> `organization:read`"],note:"Sentry는 토큰 값을 한 번만 보여줍니다. `Create Token` 후 즉시 복사하고, 스크린샷이나 채팅에 노출하지 마세요.",imageSrc:`/images/sentry/step2_create_token_permissions.png`,imageAlt:`Sentry personal token permission selection`,reverse:!0},{title:`Organization Slug 확인`,paragraphs:["Settings > Organization > General의 `Organization Slug` 값을 `organizationSlug`로 사용해 주세요.","`projectSlug`를 비워 두면 OneQuery은 연결 테스트에서 `/organizations/{organizationSlug}/projects/`로 조직 접근만 확인합니다."],imageSrc:`/images/sentry/step3_organization_slug.png`,imageAlt:`Sentry organization settings showing the Organization Slug field`},{title:`Project Slug 확인 후 OneQuery에 입력`,paragraphs:["특정 프로젝트에 연결을 고정하려면 Settings > Projects > <project> > General의 `Slug` 값을 `projectSlug`에 넣어 주세요.","`projectSlug`를 넣으면 OneQuery은 `/projects/{organizationSlug}/{projectSlug}/events/`로 프로젝트 접근을 확인하므로 `Issue & Event = Read`가 필요합니다.","Sentry Cloud는 `apiBaseUrl`를 비워 두면 되고, self-hosted Sentry만 `https://<your-host>/api/0`를 넣어 주세요."],bullets:["`authToken`: 방금 생성한 Personal Token","`organizationSlug`: Organization Settings의 Slug","`projectSlug` (optional): Project Settings의 Slug","`apiBaseUrl` (optional): self-hosted API root"],code:`{
|
|
158
|
+
"name": "sentry_main",
|
|
159
|
+
"credentials": {
|
|
160
|
+
"type": "sentry",
|
|
161
|
+
"authToken": "sntrys_...",
|
|
162
|
+
"organizationSlug": "your-org-slug",
|
|
163
|
+
"projectSlug": "your-project-slug"
|
|
164
|
+
}
|
|
165
|
+
}`,note:"Self-hosted Sentry라면 `credentials.apiBaseUrl`에 `https://<your-host>/api/0`를 추가하세요.",imageSrc:`/images/sentry/step4_project_slug.png`,imageAlt:`Sentry project settings showing the Slug field`,reverse:!0}],closingTitle:`준비가 완료되었습니다!`,closingDescription:"이제 생성한 Personal Token과 slug 값을 OneQuery 웹 폼이나 `onequery source connect --source sentry` 입력 JSON에 넣으면 됩니다.",closingNote:"`projectSlug` 없이 연결하면 조직 프로젝트 목록 접근부터 확인하고, `projectSlug`를 넣으면 프로젝트 이벤트 접근까지 바로 확인합니다."},en:{title:`Sentry Personal Token Connection Guide`,description:"The OneQuery Sentry connection accepts `authToken`, `organizationSlug`, optional `projectSlug`, and optional `apiBaseUrl`. Follow the live Sentry Personal Token flow below.",steps:[{title:`Open the Personal Tokens page`,paragraphs:[`Sign in to Sentry, then open Settings > Developer Settings > Personal Tokens.`,`You can also open https://sentry.io/settings/account/api/auth-tokens/ directly.`],note:"It is fine if the list is empty. Click `Create New Token` to continue.",imageSrc:`/images/sentry/step1_personal_tokens.png`,imageAlt:`Sentry Personal Tokens page`},{title:`Create the token with the required read permissions`,paragraphs:["Click `Create New Token` and give it a recognizable name such as `OneQuery`.","Set `Project = Read`, `Issue & Event = Read`, and `Organization = Read`."],bullets:["`Project = Read` -> `project:read`","`Issue & Event = Read` -> `event:read`","`Organization = Read` -> `organization:read`"],note:"Sentry only shows the token value once after you click `Create Token`. Copy it immediately and do not leave it in screenshots or chat.",imageSrc:`/images/sentry/step2_create_token_permissions.png`,imageAlt:`Sentry personal token permission selection`,reverse:!0},{title:`Find the organization slug`,paragraphs:["Read the `Organization Slug` value from Settings > Organization > General and use it as `organizationSlug`.","If you leave `projectSlug` empty, OneQuery validates organization access with `/organizations/{organizationSlug}/projects/` during connect."],imageSrc:`/images/sentry/step3_organization_slug.png`,imageAlt:`Sentry organization settings showing the Organization Slug field`},{title:`Find the project slug and enter the fields in OneQuery`,paragraphs:["If you want to pin the connection to one project, read the `Slug` value from Settings > Projects > <project> > General and use it as `projectSlug`.","When `projectSlug` is present, OneQuery validates project access with `/projects/{organizationSlug}/{projectSlug}/events/`, so `Issue & Event = Read` is required.","Leave `apiBaseUrl` empty for Sentry Cloud. Only set it for self-hosted Sentry, using the canonical API root such as `https://<your-host>/api/0`."],bullets:["`authToken`: the Personal Token you just created","`organizationSlug`: the slug from Organization Settings","`projectSlug` (optional): the slug from Project Settings","`apiBaseUrl` (optional): self-hosted API root"],code:`{
|
|
166
|
+
"name": "sentry_main",
|
|
167
|
+
"credentials": {
|
|
168
|
+
"type": "sentry",
|
|
169
|
+
"authToken": "sntrys_...",
|
|
170
|
+
"organizationSlug": "your-org-slug",
|
|
171
|
+
"projectSlug": "your-project-slug"
|
|
172
|
+
}
|
|
173
|
+
}`,note:"For self-hosted Sentry, also add `credentials.apiBaseUrl`, for example `https://<your-host>/api/0`.",imageSrc:`/images/sentry/step4_project_slug.png`,imageAlt:`Sentry project settings showing the Slug field`,reverse:!0}],closingTitle:`Ready to Go!`,closingDescription:"Paste the Personal Token and slug values into the OneQuery form or `onequery source connect --source sentry` JSON payload to finish the setup.",closingNote:"Without `projectSlug`, OneQuery checks organization-level project access first. With `projectSlug`, it also checks project event access during connect."}}};function qe(e){let t=(0,K.c)(33),n=!!e.step.imageSrc,r=n?`grid gap-5 rounded-xl border p-4 md:grid-cols-2`:`rounded-xl border p-4`,a=e.step.reverse?`md:order-2`:``,o=e.step.reverse?`md:order-1`:``,s;t[0]===e.step.code?s=t[1]:(s=e.step.code?.replaceAll(Ge,`${i()}${ce}`),t[0]=e.step.code,t[1]=s);let c=s,l=e.index+1,u;t[2]===l?u=t[3]:(u=(0,J.jsxs)(`p`,{className:`mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground`,children:[`Step `,l]}),t[2]=l,t[3]=u);let d;t[4]===e.step.title?d=t[5]:(d=(0,J.jsx)(`h3`,{className:`mb-3 text-lg font-semibold`,children:e.step.title}),t[4]=e.step.title,t[5]=d);let f;t[6]===e.step.paragraphs?f=t[7]:(f=e.step.paragraphs.map(Ye),t[6]=e.step.paragraphs,t[7]=f);let p;t[8]===f?p=t[9]:(p=(0,J.jsx)(`div`,{className:`space-y-2 text-sm text-muted-foreground`,children:f}),t[8]=f,t[9]=p);let m;t[10]===e.step.bullets?m=t[11]:(m=e.step.bullets&&e.step.bullets.length>0&&(0,J.jsx)(`ul`,{className:`mt-3 list-disc space-y-1 pl-5 text-sm text-muted-foreground`,children:e.step.bullets.map(Je)}),t[10]=e.step.bullets,t[11]=m);let h;t[12]===c?h=t[13]:(h=c&&(0,J.jsx)(`pre`,{className:`mt-3 overflow-x-auto rounded-md border bg-muted p-3 text-xs leading-relaxed`,children:c}),t[12]=c,t[13]=h);let g;t[14]===e.step.note?g=t[15]:(g=e.step.note&&(0,J.jsx)(`p`,{className:`mt-3 rounded-md border bg-muted/60 p-2 text-xs text-muted-foreground`,children:e.step.note}),t[14]=e.step.note,t[15]=g);let _;t[16]!==u||t[17]!==d||t[18]!==p||t[19]!==m||t[20]!==h||t[21]!==g||t[22]!==a?(_=(0,J.jsxs)(`div`,{className:a,children:[u,d,p,m,h,g]}),t[16]=u,t[17]=d,t[18]=p,t[19]=m,t[20]=h,t[21]=g,t[22]=a,t[23]=_):_=t[23];let v;t[24]!==n||t[25]!==o||t[26]!==e.step.imageAlt||t[27]!==e.step.imageSrc?(v=n&&e.step.imageSrc&&e.step.imageAlt&&(0,J.jsx)(`div`,{className:o,children:(0,J.jsx)(`img`,{src:e.step.imageSrc,alt:e.step.imageAlt,className:`h-auto max-h-[400px] w-full rounded-lg border object-contain`})}),t[24]=n,t[25]=o,t[26]=e.step.imageAlt,t[27]=e.step.imageSrc,t[28]=v):v=t[28];let y;return t[29]!==r||t[30]!==v||t[31]!==_?(y=(0,J.jsxs)(`section`,{className:r,children:[_,v]}),t[29]=r,t[30]=v,t[31]=_,t[32]=y):y=t[32],y}function Je(e){return(0,J.jsx)(`li`,{children:e},e)}function Ye(e){return(0,J.jsx)(`p`,{children:e},e)}function Xe(e){let t=(0,K.c)(19);if(!e.content){let n;return t[0]===e.providerLabel?n=t[1]:(n=(0,J.jsx)(`div`,{className:`rounded-lg border p-4 text-sm text-muted-foreground`,children:(0,J.jsxs)(`p`,{children:[e.providerLabel,` 가이드는 아직 wb-landing 원문 페이지가 없습니다.`]})}),t[0]=e.providerLabel,t[1]=n),n}let n;t[2]===e.content.title?n=t[3]:(n=(0,J.jsx)(`h2`,{className:`text-lg font-semibold`,children:e.content.title}),t[2]=e.content.title,t[3]=n);let r;t[4]===e.content.description?r=t[5]:(r=(0,J.jsx)(`p`,{className:`mt-2 text-sm text-muted-foreground`,children:e.content.description}),t[4]=e.content.description,t[5]=r);let i;t[6]!==n||t[7]!==r?(i=(0,J.jsxs)(`section`,{className:`rounded-xl border p-4`,children:[n,r]}),t[6]=n,t[7]=r,t[8]=i):i=t[8];let a;t[9]===e.content.steps?a=t[10]:(a=e.content.steps.map(Ze),t[9]=e.content.steps,t[10]=a);let o;t[11]!==e.content.closingDescription||t[12]!==e.content.closingNote||t[13]!==e.content.closingTitle?(o=e.content.closingTitle&&(0,J.jsxs)(`section`,{className:`rounded-xl border p-4`,children:[(0,J.jsx)(`h3`,{className:`text-base font-semibold`,children:e.content.closingTitle}),e.content.closingDescription&&(0,J.jsx)(`p`,{className:`mt-2 text-sm text-muted-foreground`,children:e.content.closingDescription}),e.content.closingNote&&(0,J.jsx)(`p`,{className:`mt-2 rounded-md border bg-muted/60 p-2 text-xs text-muted-foreground`,children:e.content.closingNote})]}),t[11]=e.content.closingDescription,t[12]=e.content.closingNote,t[13]=e.content.closingTitle,t[14]=o):o=t[14];let s;return t[15]!==i||t[16]!==a||t[17]!==o?(s=(0,J.jsxs)(`div`,{className:`space-y-4`,children:[i,a,o]}),t[15]=i,t[16]=a,t[17]=o,t[18]=s):s=t[18],s}function Ze(e,t){return(0,J.jsx)(qe,{step:e,index:t},`${e.title}-${t}`)}function Qe(e){let t=(0,K.c)(19),[n,r]=(0,q.useState)(!1),i=Ke[e.provider],a;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,J.jsx)(x,{render:(0,J.jsx)(u,{variant:`outline`,size:`sm`,children:`How to connect`})}),t[0]=a):a=t[0];let o;t[1]===i.providerLabel?o=t[2]:(o=(0,J.jsx)(C,{className:`border-b px-5 py-4`,children:(0,J.jsxs)(y,{children:[i.providerLabel,` Connection Guide`]})}),t[1]=i.providerLabel,t[2]=o);let s;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(s=(0,J.jsxs)(He,{className:`mt-4 w-full max-w-[320px]`,children:[(0,J.jsx)(Ue,{value:`en`,className:`flex-1`,children:`English`}),(0,J.jsx)(Ue,{value:`ko`,className:`flex-1`,children:`한국어`})]}),t[3]=s):s=t[3];let c;t[4]!==i.en||t[5]!==i.providerLabel?(c=(0,J.jsx)(We,{value:`en`,className:`mt-4 min-h-0 flex-1 overflow-y-auto pr-1`,children:(0,J.jsx)(Xe,{content:i.en,providerLabel:i.providerLabel})}),t[4]=i.en,t[5]=i.providerLabel,t[6]=c):c=t[6];let l;t[7]!==i.ko||t[8]!==i.providerLabel?(l=(0,J.jsx)(We,{value:`ko`,className:`mt-4 min-h-0 flex-1 overflow-y-auto pr-1`,children:(0,J.jsx)(Xe,{content:i.ko,providerLabel:i.providerLabel})}),t[7]=i.ko,t[8]=i.providerLabel,t[9]=l):l=t[9];let d;t[10]!==c||t[11]!==l?(d=(0,J.jsxs)(Be,{defaultValue:`en`,className:`flex h-full min-h-0 flex-col overflow-hidden px-5 pb-5`,children:[s,c,l]}),t[10]=c,t[11]=l,t[12]=d):d=t[12];let f;t[13]!==o||t[14]!==d?(f=(0,J.jsxs)(b,{overlayClassName:`bg-black/35 supports-backdrop-filter:backdrop-blur-lg`,className:`h-[94vh] max-h-[94vh] w-[96vw] max-w-[96vw] overflow-hidden gap-0 p-0 sm:max-w-[96vw]`,children:[o,d]}),t[13]=o,t[14]=d,t[15]=f):f=t[15];let p;return t[16]!==n||t[17]!==f?(p=(0,J.jsxs)(S,{open:n,onOpenChange:r,children:[a,f]}),t[16]=n,t[17]=f,t[18]=p):p=t[18],p}var $e={amplitude:{icon:Z.amplitude,label:`Amplitude`,testable:!0},aws_athena_connector:{icon:Z.aws_athena_connector,label:`AWS Athena Connector`,testable:!0},bigquery:{icon:Z.bigquery,label:`BigQuery`,testable:!1},ga:{icon:Z.ga,label:`Google Analytics`,testable:!0},github:{icon:Z.github,label:`GitHub`,testable:!1},laminar:{icon:Z.laminar,label:`Laminar`,testable:!1},mixpanel:{icon:Z.mixpanel,label:`Mixpanel`,testable:!0},mongodb:{icon:Z.mongodb,label:`MongoDB`,testable:!0},mysql:{icon:Z.mysql,label:`MySQL`,testable:!0},postgres:{icon:Z.postgres,label:`PostgreSQL`,testable:!0},posthog:{icon:Z.posthog,label:`PostHog`,testable:!0},sentry:{icon:Z.sentry,label:`Sentry`,testable:!0},supabase:{icon:Z.supabase,label:`Supabase`,testable:!0}},et=[{value:`postgres`,...$e.postgres},{value:`supabase`,...$e.supabase},{value:`mysql`,...$e.mysql},{value:`mongodb`,...$e.mongodb},{value:`ga`,...$e.ga},{value:`bigquery`,...$e.bigquery},{value:`laminar`,...$e.laminar},{value:`aws_athena_connector`,...$e.aws_athena_connector},{value:`amplitude`,...$e.amplitude},{value:`mixpanel`,...$e.mixpanel},{value:`posthog`,...$e.posthog},{value:`sentry`,...$e.sentry},{value:`github`,...$e.github}],tt=new Set(et.map(e=>e.value)),nt=new Set(et.flatMap(e=>e.testable?[e.value]:[])),rt={linear:`Linear`,...Object.fromEntries(et.map(e=>[e.value,e.label]))},it=et[0].value,at=et.map(e=>e.value);function ot(e){return tt.has(e)}function st(e){return nt.has(e)}function ct(e){return rt[e]??e}l(`data-[invalid=true]:text-destructive gap-2 group/field flex w-full`,{variants:{orientation:{vertical:`flex-col [&>*]:w-full [&>.sr-only]:w-auto`,horizontal:`flex-row items-center [&>[data-slot=field-label]]:flex-auto has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px`,responsive:`flex-col [&>*]:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto @md/field-group:[&>[data-slot=field-label]]:flex-auto @md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px`}},defaultVariants:{orientation:`vertical`}});function lt(e){let t=(0,K.c)(15),n,r,i,a;t[0]===e?(n=t[1],r=t[2],i=t[3],a=t[4]):({className:r,children:n,errors:i,...a}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i,t[4]=a);let o;bb0:{if(n){o=n;break bb0}if(!i?.length){o=null;break bb0}let e;t[5]===i?e=t[6]:(e=[...new Map(i.map(dt)).values()],t[5]=i,t[6]=e);let r=e;if(r?.length==1){o=r[0]?.message;break bb0}let a;t[7]===r?a=t[8]:(a=(0,J.jsx)(`ul`,{className:`ml-4 flex list-disc flex-col gap-1`,children:r.map(ut)}),t[7]=r,t[8]=a),o=a}let s=o;if(!s)return null;let c;t[9]===r?c=t[10]:(c=p(`text-destructive text-sm font-normal`,r),t[9]=r,t[10]=c);let l;return t[11]!==s||t[12]!==a||t[13]!==c?(l=(0,J.jsx)(`div`,{role:`alert`,"data-slot":`field-error`,className:c,...a,children:s}),t[11]=s,t[12]=a,t[13]=c,t[14]=l):l=t[14],l}function ut(e,t){return e?.message&&(0,J.jsx)(`li`,{children:e.message},t)}function dt(e){return[e?.message,e]}function Q(e){let t=(0,K.c)(3),{message:n,className:r}=e;if(!n)return null;let i;return t[0]!==r||t[1]!==n?(i=(0,J.jsx)(lt,{className:r,children:n}),t[0]=r,t[1]=n,t[2]=i):i=t[2],i}function ft(e){let t=(0,K.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=p(`size-4 animate-spin`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,J.jsx)(te,{role:`status`,"aria-label":`Loading`,className:i,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function pt(e){let t=(0,K.c)(21),n,r,i,a,o,s,c;t[0]===e?(n=t[1],r=t[2],i=t[3],a=t[4],o=t[5],s=t[6],c=t[7]):({className:n,disabled:r,fullWidth:s,idleLabel:i,isPending:c,pendingLabel:a,...o}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i,t[4]=a,t[5]=o,t[6]=s,t[7]=c);let l=s===void 0?!0:s,d=c===void 0?!1:c,f=l&&`w-full`,m;t[8]!==n||t[9]!==f?(m=p(f,n),t[8]=n,t[9]=f,t[10]=m):m=t[10];let h=r||d,g;t[11]!==i||t[12]!==d||t[13]!==a?(g=d?(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(ft,{className:`size-4`}),(0,J.jsx)(`span`,{children:a??i})]}):i,t[11]=i,t[12]=d,t[13]=a,t[14]=g):g=t[14];let _;return t[15]!==d||t[16]!==o||t[17]!==m||t[18]!==h||t[19]!==g?(_=(0,J.jsx)(u,{type:`submit`,"aria-busy":d,className:m,disabled:h,...o,children:g}),t[15]=d,t[16]=o,t[17]=m,t[18]=h,t[19]=g,t[20]=_):_=t[20],_}var mt=(e,t,n)=>!ee(e,`data_source_name_duplicate`)||!(e instanceof Error)?!1:(t(n,{message:e.message}),!0),ht=[{label:`US (Standard)`,value:`us`},{label:`EU (Europe)`,value:`eu`}],gt=R({apiKey:F().min(1,`API Key is required`),name:F().min(1,`Name is required`),region:z([`us`,`eu`]),secretKey:F().min(1,`Secret Key is required`)});function _t(e){return e===`us`||e===`eu`}function vt({onSuccess:e,organizationId:t}){let n=le({defaultValues:{name:``,apiKey:``,secretKey:``,region:`us`},resolver:ue(gt)}),r=w({createOptimisticItem:e=>({id:`temp-${crypto.randomUUID()}`,provider:`amplitude`,name:e.name,status:`active`,useAsDataSource:!0,errorMessage:null,lastUsedAt:null,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}),mutationFn:async e=>{let n={type:`amplitude`,apiKey:e.apiKey,secretKey:e.secretKey,region:e.region};return re({organizationId:t,provider:`amplitude`,name:e.name,credentials:n})},onError:e=>{mt(e,n.setError,`name`)},onSuccess:t=>{e(t.dataSource.id)},queryKey:ne(t).queryKey,successMessage:`Data source created successfully`});return(0,J.jsxs)(`form`,{onSubmit:n.handleSubmit(e=>r.mutate(e)),className:`space-y-4`,children:[(0,J.jsxs)(`div`,{className:`space-y-2`,children:[(0,J.jsx)(W,{htmlFor:`amplitude-name`,children:`Data Source Name`}),(0,J.jsx)(U,{id:`amplitude-name`,placeholder:`My Amplitude`,...n.register(`name`)}),(0,J.jsx)(Q,{message:n.formState.errors.name?.message})]}),(0,J.jsxs)(`div`,{className:`space-y-2`,children:[(0,J.jsx)(W,{htmlFor:`amplitude-apiKey`,children:`API Key`}),(0,J.jsx)(U,{id:`amplitude-apiKey`,placeholder:`Enter your Amplitude API Key`,...n.register(`apiKey`)}),(0,J.jsx)(Q,{message:n.formState.errors.apiKey?.message})]}),(0,J.jsxs)(`div`,{className:`space-y-2`,children:[(0,J.jsx)(W,{htmlFor:`amplitude-secretKey`,children:`Secret Key`}),(0,J.jsx)(U,{id:`amplitude-secretKey`,type:`password`,placeholder:`Enter your Amplitude Secret Key`,...n.register(`secretKey`)}),(0,J.jsx)(Q,{message:n.formState.errors.secretKey?.message})]}),(0,J.jsxs)(`div`,{className:`space-y-2`,children:[(0,J.jsx)(W,{htmlFor:`amplitude-region`,children:`Region`}),(0,J.jsxs)(v,{items:[...ht],value:n.watch(`region`),onValueChange:e=>{_t(e)&&n.setValue(`region`,e)},children:[(0,J.jsx)(h,{id:`amplitude-region`,children:(0,J.jsx)(m,{})}),(0,J.jsx)(g,{children:ht.map(e=>(0,J.jsx)(_,{value:e.value,children:e.label},e.value))})]})]}),(0,J.jsx)(pt,{idleLabel:`Create Data Source`,isPending:r.isPending,pendingLabel:`Creating...`})]})}var yt=R({connectorId:F().min(1,`Connector ID is required`),database:F().min(1,`Athena database is required`),name:F().min(1,`Name is required`),workgroup:F().optional()});function bt(e){let t=(0,K.c)(68),{organizationId:n,onSuccess:r}=e,i;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(i={defaultValues:{name:``,connectorId:``,database:``,workgroup:``},resolver:ue(yt)},t[0]=i):i=t[0];let a=le(i),o;t[1]===n?o=t[2]:(o=async e=>{let t={type:`aws_athena_connector`,connectorId:e.connectorId.trim(),database:e.database.trim()},r=e.workgroup?.trim();return r&&(t.workgroup=r),re({organizationId:n,provider:`aws_athena_connector`,name:e.name.trim(),credentials:t})},t[1]=n,t[2]=o);let s;t[3]===a.setError?s=t[4]:(s=e=>{mt(e,a.setError,`name`)},t[3]=a.setError,t[4]=s);let c;t[5]===r?c=t[6]:(c=e=>{r(e.dataSource.id)},t[5]=r,t[6]=c);let l;t[7]===n?l=t[8]:(l=ne(n),t[7]=n,t[8]=l);let u;t[9]!==o||t[10]!==s||t[11]!==c||t[12]!==l.queryKey?(u={createOptimisticItem:xt,mutationFn:o,onError:s,onSuccess:c,queryKey:l.queryKey,successMessage:`Data source created successfully`},t[9]=o,t[10]=s,t[11]=c,t[12]=l.queryKey,t[13]=u):u=t[13];let d=w(u),f;t[14]===d?f=t[15]:(f=e=>{d.mutate(e)},t[14]=d,t[15]=f);let p=f,m;t[16]!==a||t[17]!==p?(m=a.handleSubmit(p),t[16]=a,t[17]=p,t[18]=m):m=t[18];let h;t[19]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,J.jsx)(W,{htmlFor:`connector-name`,children:`Data Source Name`}),t[19]=h):h=t[19];let g;t[20]===a?g=t[21]:(g=a.register(`name`),t[20]=a,t[21]=g);let _;t[22]===g?_=t[23]:(_=(0,J.jsx)(U,{id:`connector-name`,placeholder:`Customer Athena Connector`,...g}),t[22]=g,t[23]=_);let v=a.formState.errors.name?.message,y;t[24]===v?y=t[25]:(y=(0,J.jsx)(Q,{message:v}),t[24]=v,t[25]=y);let b;t[26]!==_||t[27]!==y?(b=(0,J.jsxs)(`div`,{className:`space-y-2`,children:[h,_,y]}),t[26]=_,t[27]=y,t[28]=b):b=t[28];let x;t[29]===Symbol.for(`react.memo_cache_sentinel`)?(x=(0,J.jsx)(W,{htmlFor:`connector-id`,children:`Connector ID`}),t[29]=x):x=t[29];let S;t[30]===a?S=t[31]:(S=a.register(`connectorId`),t[30]=a,t[31]=S);let C;t[32]===S?C=t[33]:(C=(0,J.jsx)(U,{id:`connector-id`,placeholder:`connector_...`,...S}),t[32]=S,t[33]=C);let T=a.formState.errors.connectorId?.message,E;t[34]===T?E=t[35]:(E=(0,J.jsx)(Q,{message:T}),t[34]=T,t[35]=E);let D;t[36]!==C||t[37]!==E?(D=(0,J.jsxs)(`div`,{className:`space-y-2`,children:[x,C,E]}),t[36]=C,t[37]=E,t[38]=D):D=t[38];let O;t[39]===Symbol.for(`react.memo_cache_sentinel`)?(O=(0,J.jsx)(W,{htmlFor:`connector-database`,children:`Athena Database`}),t[39]=O):O=t[39];let k;t[40]===a?k=t[41]:(k=a.register(`database`),t[40]=a,t[41]=k);let A;t[42]===k?A=t[43]:(A=(0,J.jsx)(U,{id:`connector-database`,placeholder:`analytics`,...k}),t[42]=k,t[43]=A);let j;t[44]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,J.jsx)(`code`,{children:`analytics`}),t[44]=j):j=t[44];let M;t[45]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,J.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`Enter the Athena or AWS Glue database name, such as`,` `,j,` or `,(0,J.jsx)(`code`,{children:`onequery_connector_test`}),`.`]}),t[45]=M):M=t[45];let N=a.formState.errors.database?.message,P;t[46]===N?P=t[47]:(P=(0,J.jsx)(Q,{message:N}),t[46]=N,t[47]=P);let F;t[48]!==A||t[49]!==P?(F=(0,J.jsxs)(`div`,{className:`space-y-2`,children:[O,A,M,P]}),t[48]=A,t[49]=P,t[50]=F):F=t[50];let I;t[51]===Symbol.for(`react.memo_cache_sentinel`)?(I=(0,J.jsx)(W,{htmlFor:`connector-workgroup`,children:`Athena Workgroup (optional)`}),t[51]=I):I=t[51];let L;t[52]===a?L=t[53]:(L=a.register(`workgroup`),t[52]=a,t[53]=L);let R;t[54]===L?R=t[55]:(R=(0,J.jsx)(U,{id:`connector-workgroup`,placeholder:`primary`,...L}),t[54]=L,t[55]=R);let z;t[56]===Symbol.for(`react.memo_cache_sentinel`)?(z=(0,J.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Leave blank to use the default workgroup, or enter a specific workgroup name if your Athena setup requires one.`}),t[56]=z):z=t[56];let B;t[57]===R?B=t[58]:(B=(0,J.jsxs)(`div`,{className:`space-y-2`,children:[I,R,z]}),t[57]=R,t[58]=B);let V;t[59]===d.isPending?V=t[60]:(V=(0,J.jsx)(pt,{idleLabel:`Create Data Source`,isPending:d.isPending,pendingLabel:`Creating...`}),t[59]=d.isPending,t[60]=V);let H;return t[61]!==b||t[62]!==D||t[63]!==F||t[64]!==B||t[65]!==V||t[66]!==m?(H=(0,J.jsxs)(`form`,{onSubmit:m,className:`space-y-4`,children:[b,D,F,B,V]}),t[61]=b,t[62]=D,t[63]=F,t[64]=B,t[65]=V,t[66]=m,t[67]=H):H=t[67],H}function xt(e){return{id:`temp-${crypto.randomUUID()}`,provider:`aws_athena_connector`,name:e.name,status:`active`,useAsDataSource:!0,errorMessage:null,lastUsedAt:null,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}}var St=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Ct=e=>typeof e==`string`&&e.trim().length===0?void 0:e,$=e=>F().trim().min(1,e),wt=e=>V(Ct,$(e).optional()),Tt=e=>F().refine(e=>e.trim().length>0,e),Et=e=>V(Ct,Tt(e).optional()),Dt=(e,t)=>F().trim().min(1,e).url(t),Ot=e=>V(Ct,F().trim().url(e).optional()),kt=e=>!St(e)||`sslMode`in e?e:typeof e.ssl==`boolean`?{...e,sslMode:e.ssl?`prefer`:`disable`}:{...e},At=$(`Connection string is required`).refine(e=>e.startsWith(`mongodb://`)||e.startsWith(`mongodb+srv://`),`Connection string must start with mongodb:// or mongodb+srv://`),jt=z([`disable`,`prefer`,`require`]),Mt=V(kt,R({database:$(`Database name is required`),host:$(`Host is required`),password:Tt(`Password is required`),port:P().int().min(1).max(65535).default(5432),sslMode:jt.default(`prefer`),type:B(`postgres`),username:$(`Username is required`)})),Nt=V(kt,R({database:$(`Database name is required`),host:$(`Host is required`),password:Tt(`Password is required`),port:P().int().min(1).max(65535).default(3306),sslMode:jt.default(`prefer`),type:B(`mysql`),username:$(`Username is required`)})),Pt=R({connectionString:At,database:wt(`Database name is required`),databases:L($(`Database name is required`)).optional(),type:B(`mongodb`)}),Ft=R({clientEmail:F().trim().min(1,`Client email is required`).email(`Client email must be a valid email address`),privateKey:Tt(`Private key is required`),privateKeyId:Et(`Private key ID is required`),projectId:$(`Project ID is required`)}),It=I([Mt,Nt,Pt,I([R({accessToken:Tt(`Access token is required`),authType:B(`oauth`).optional(),expiresAt:P().int().min(0,`Expiration time must be positive`),propertyId:$(`Property ID is required`),refreshToken:Tt(`Refresh token is required`),type:B(`ga`)}),R({authType:B(`service_account`),propertyId:$(`Property ID is required`),serviceAccount:Ft,type:B(`ga`)})]),I([R({accessToken:Tt(`Access token is required`),authType:B(`oauth`).optional(),expiresAt:P().int().min(0,`Expiration time must be positive`),projectId:$(`Project ID is required`),refreshToken:Tt(`Refresh token is required`),type:B(`bigquery`)}),R({authType:B(`service_account`),projectId:$(`Project ID is required`),serviceAccount:Ft,type:B(`bigquery`)})]),R({apiBaseUrl:Ot(`API base URL must be a valid URL`),apiKey:Tt(`API key is required`),type:B(`laminar`)}),R({connectorId:$(`Connector ID is required`),database:$(`Athena database is required`),maxRows:P().int().positive().optional(),timeoutMs:P().int().positive().optional(),type:B(`aws_athena_connector`),workgroup:wt(`Workgroup is required`)}),R({apiKey:Tt(`API Key is required`),region:z([`us`,`eu`]).default(`us`),secretKey:Tt(`Secret Key is required`),type:B(`amplitude`)}),R({projectId:$(`Project ID is required`),region:z([`us`,`eu`,`in`]).default(`us`),secret:Tt(`Service Account Secret is required`),type:B(`mixpanel`),username:$(`Service Account Username is required`),workspaceId:wt(`Workspace ID is required`)}),R({hostUrl:Dt(`Host URL is required`,`Host URL must be a valid URL`).transform(e=>e.replace(/\/+$/,``)),personalApiKey:Tt(`Personal API Key is required`),projectId:$(`Project ID is required`),type:B(`posthog`)}),R({apiBaseUrl:Ot(`API base URL must be a valid URL`),authToken:Tt(`Auth token is required`),organizationSlug:$(`Organization slug is required`),projectSlug:wt(`Project slug is required`),type:B(`sentry`)}),R({accessToken:Tt(`Access token is required`),installationId:wt(`Installation ID is required`),repositories:L($(`Repository is required`)).optional(),type:B(`github`)}),I([R({apiKey:Tt(`API key is required`),type:B(`linear`)}),R({accessToken:Tt(`Access token is required`),appUserId:wt(`App user ID is required`),expiresAt:wt(`Expiration timestamp is required`),linearOrganizationId:$(`Linear organization ID is required`),linearOrganizationName:wt(`Linear organization name is required`),refreshToken:Et(`Refresh token is required`),scope:wt(`Scope is required`),tokenType:wt(`Token type is required`),type:B(`linear`)})])]),Lt={BIGQUERY:`bigquery`,CONNECTOR:`aws_athena_connector`,LAMINAR:`laminar`,MYSQL:`mysql`,POSTGRES:`postgres`};Lt.POSTGRES,Lt.MYSQL,Lt.BIGQUERY,Lt.LAMINAR,Lt.CONNECTOR;var Rt=R({credentialsText:F().optional(),name:F().min(1,`Name is required`),projectId:F().optional(),propertyId:F().optional()});function zt(e){return e&&e.trim()||null}function Bt(e,t){let n=e[t];return typeof n==`string`?zt(n):null}function Vt(e){let t=Bt(e,`project_id`)??Bt(e,`projectId`);if(!t)return{error:`Project ID is required in service account JSON`};let n=Bt(e,`client_email`)??Bt(e,`clientEmail`);if(!n)return{error:`Client email is required in service account JSON`};let r=Bt(e,`private_key`)??Bt(e,`privateKey`);if(!r)return{error:`Private key is required in service account JSON`};let i=Bt(e,`private_key_id`)??Bt(e,`privateKeyId`),a={clientEmail:n,privateKey:r,projectId:t};return{projectId:t,serviceAccount:i?{...a,privateKeyId:i}:a}}function Ht(e,t){let n=e.trim();if(!n)return{error:`Credentials are required`};let r;try{r=JSON.parse(n)}catch{return{error:`Credentials must be valid JSON`}}if(!H(r))return{error:`Credentials must be a JSON object`};let i=typeof r.type==`string`?r.type:null;if(i===`service_account`){let e=Vt(r);if(`error`in e)return e;let n={authType:`service_account`,serviceAccount:e.serviceAccount,type:t};return t===`bigquery`?{credentials:{...n,projectId:e.projectId}}:{credentials:n}}return i&&i!==t?{error:`Credentials type must be '${t}'`}:{credentials:i?r:{...r,type:t}}}function Ut(e,t,n){let r={...e};if(t===`ga`){let e=zt(n.propertyId)??(`propertyId`in r&&typeof r.propertyId==`string`?zt(r.propertyId):null);if(!e)return{error:`Property ID is required`};r.propertyId=e}if(t===`bigquery`){let e=`serviceAccount`in r&&H(r.serviceAccount)?Bt(r.serviceAccount,`projectId`):null,t=zt(n.projectId)??(`projectId`in r&&typeof r.projectId==`string`?zt(r.projectId):null)??e;if(!t)return{error:`Project ID is required`};r.projectId=t}let i=It.safeParse(r);return i.success?{credentials:i.data}:{error:i.error.issues.map(e=>e.message).join(`, `)}}function Wt(e){let t=(0,K.c)(92),{provider:n,onSuccess:r,organizationId:i}=e,[a,o]=(0,q.useState)(null),[s,c]=(0,q.useState)(null),l=n===`ga`?`Google Analytics`:`BigQuery`,u;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(u={defaultValues:{name:``,credentialsText:``,propertyId:``,projectId:``},resolver:ue(Rt)},t[0]=u):u=t[0];let d=le(u),f;t[1]===n?f=t[2]:(f=e=>({id:`temp-${crypto.randomUUID()}`,provider:n,name:e.name,status:`active`,useAsDataSource:!0,errorMessage:null,lastUsedAt:null,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}),t[1]=n,t[2]=f);let p;t[3]!==i||t[4]!==n?(p=async e=>re({organizationId:i,provider:n,name:e.name,credentials:e.credentials}),t[3]=i,t[4]=n,t[5]=p):p=t[5];let m;t[6]===d.setError?m=t[7]:(m=e=>{mt(e,d.setError,`name`)},t[6]=d.setError,t[7]=m);let h;t[8]===r?h=t[9]:(h=e=>{r(e.dataSource.id)},t[8]=r,t[9]=h);let g;t[10]===i?g=t[11]:(g=ne(i),t[10]=i,t[11]=g);let _;t[12]!==f||t[13]!==p||t[14]!==m||t[15]!==h||t[16]!==g.queryKey?(_={createOptimisticItem:f,mutationFn:p,onError:m,onSuccess:h,queryKey:g.queryKey,successMessage:`Data source created successfully`},t[12]=f,t[13]=p,t[14]=m,t[15]=h,t[16]=g.queryKey,t[17]=_):_=t[17];let v=w(_),y;t[18]===d?y=t[19]:(y=e=>{let t=e.target.files?.[0];t&&t.text().then(e=>{d.setValue(`credentialsText`,e,{shouldValidate:!0}),c(t.name),o(null)}).catch(()=>{o(`Failed to read credentials file`)})},t[18]=d,t[19]=y);let b=y,x;t[20]===d?x=t[21]:(x=d.register(`credentialsText`),t[20]=d,t[21]=x);let S=x,C;if(t[22]!==d||t[23]!==v||t[24]!==n){let e;t[26]!==v||t[27]!==n?(e=e=>{o(null);let t=e.credentialsText??``;if(!t.trim()){o(`Provide a credentials file or JSON.`);return}let r=Ht(t,n);if(`error`in r){o(r.error);return}let i=Ut(r.credentials,n,e);if(`error`in i){o(i.error);return}v.mutate({...e,credentials:i.credentials})},t[26]=v,t[27]=n,t[28]=e):e=t[28],C=d.handleSubmit(e),t[22]=d,t[23]=v,t[24]=n,t[25]=C}else C=t[25];let T=`${n}-credentials-name`,E;t[29]===T?E=t[30]:(E=(0,J.jsx)(W,{htmlFor:T,children:`Data Source Name`}),t[29]=T,t[30]=E);let D=`${n}-credentials-name`,O=`My ${l}`,k;t[31]===d?k=t[32]:(k=d.register(`name`),t[31]=d,t[32]=k);let A;t[33]!==D||t[34]!==O||t[35]!==k?(A=(0,J.jsx)(U,{id:D,placeholder:O,...k}),t[33]=D,t[34]=O,t[35]=k,t[36]=A):A=t[36];let j=d.formState.errors.name?.message,M;t[37]===j?M=t[38]:(M=(0,J.jsx)(Q,{message:j}),t[37]=j,t[38]=M);let N;t[39]!==E||t[40]!==A||t[41]!==M?(N=(0,J.jsxs)(`div`,{className:`space-y-2`,children:[E,A,M]}),t[39]=E,t[40]=A,t[41]=M,t[42]=N):N=t[42];let P=`${n}-credentials-file`,F;t[43]===P?F=t[44]:(F=(0,J.jsx)(W,{htmlFor:P,children:`Credentials File`}),t[43]=P,t[44]=F);let I=`${n}-credentials-file`,L;t[45]!==b||t[46]!==I?(L=(0,J.jsx)(U,{id:I,type:`file`,accept:`.json,application/json`,onChange:b}),t[45]=b,t[46]=I,t[47]=L):L=t[47];let R;t[48]===s?R=t[49]:(R=s&&(0,J.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Loaded: `,s]}),t[48]=s,t[49]=R);let z;t[50]!==F||t[51]!==L||t[52]!==R?(z=(0,J.jsxs)(`div`,{className:`space-y-2`,children:[F,L,R]}),t[50]=F,t[51]=L,t[52]=R,t[53]=z):z=t[53];let B;t[54]===Symbol.for(`react.memo_cache_sentinel`)?(B=(0,J.jsxs)(`div`,{className:`my-4 flex items-center gap-3 text-xs text-muted-foreground`,children:[(0,J.jsx)(`div`,{className:`h-px flex-1 bg-border`}),(0,J.jsx)(`span`,{className:`uppercase tracking-widest`,children:`Or`}),(0,J.jsx)(`div`,{className:`h-px flex-1 bg-border`})]}),t[54]=B):B=t[54];let V=`${n}-credentials-text`,H;t[55]===V?H=t[56]:(H=(0,J.jsx)(W,{htmlFor:V,children:`Credentials JSON`}),t[55]=V,t[56]=H);let ee=`${n}-credentials-text`,te=`Paste ${l} credentials JSON`,ie;t[57]===S?ie=t[58]:(ie=e=>{S.onChange(e),o(null)},t[57]=S,t[58]=ie);let ae;t[59]===Symbol.for(`react.memo_cache_sentinel`)?(ae={fieldSizing:`fixed`},t[59]=ae):ae=t[59];let oe;t[60]!==S||t[61]!==ee||t[62]!==te||t[63]!==ie?(oe=(0,J.jsx)(se,{id:ee,placeholder:te,rows:8,...S,onChange:ie,className:`font-mono text-sm h-48 max-h-64 overflow-y-auto resize-y field-sizing-fixed`,style:ae}),t[60]=S,t[61]=ee,t[62]=te,t[63]=ie,t[64]=oe):oe=t[64];let G;t[65]===a?G=t[66]:(G=(0,J.jsx)(Q,{message:a}),t[65]=a,t[66]=G);let ce=n===`ga`?` propertyId`:` projectId`,Y;t[67]===ce?Y=t[68]:(Y=(0,J.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Include accessToken, refreshToken, and expiresAt for OAuth. Service account JSON is also supported. Provide`,ce,` here or in the JSON.`]}),t[67]=ce,t[68]=Y);let de;t[69]!==H||t[70]!==oe||t[71]!==G||t[72]!==Y?(de=(0,J.jsxs)(`div`,{className:`space-y-2`,children:[H,oe,G,Y]}),t[69]=H,t[70]=oe,t[71]=G,t[72]=Y,t[73]=de):de=t[73];let fe;t[74]!==z||t[75]!==de?(fe=(0,J.jsxs)(`div`,{className:`rounded-lg border border-dashed p-4`,children:[z,B,de]}),t[74]=z,t[75]=de,t[76]=fe):fe=t[76];let pe;t[77]!==d||t[78]!==n?(pe=n===`ga`&&(0,J.jsxs)(`div`,{className:`space-y-2`,children:[(0,J.jsx)(W,{htmlFor:`ga-property-id`,children:`Property ID`}),(0,J.jsx)(U,{id:`ga-property-id`,placeholder:`properties/123456789`,...d.register(`propertyId`)}),(0,J.jsx)(Q,{message:d.formState.errors.propertyId?.message})]}),t[77]=d,t[78]=n,t[79]=pe):pe=t[79];let me;t[80]!==d||t[81]!==n?(me=n===`bigquery`&&(0,J.jsxs)(`div`,{className:`space-y-2`,children:[(0,J.jsx)(W,{htmlFor:`bigquery-project-id`,children:`Project ID`}),(0,J.jsx)(U,{id:`bigquery-project-id`,placeholder:`my-project-id`,...d.register(`projectId`)}),(0,J.jsx)(Q,{message:d.formState.errors.projectId?.message})]}),t[80]=d,t[81]=n,t[82]=me):me=t[82];let X;t[83]===v.isPending?X=t[84]:(X=(0,J.jsx)(pt,{idleLabel:`Create Data Source`,isPending:v.isPending,pendingLabel:`Creating...`}),t[83]=v.isPending,t[84]=X);let he;return t[85]!==C||t[86]!==N||t[87]!==fe||t[88]!==pe||t[89]!==me||t[90]!==X?(he=(0,J.jsxs)(`form`,{onSubmit:C,className:`space-y-4 py-4`,children:[N,fe,pe,me,X]}),t[85]=C,t[86]=N,t[87]=fe,t[88]=pe,t[89]=me,t[90]=X,t[91]=he):he=t[91],he}var Gt=`localhost`,Kt=`postgres://user:password@host:port/database`,qt=`postgresql://postgres.[project-ref]:password@db.[project-ref].supabase.co:5432/postgres`,Jt=`mysql://user:password@host:port/database`,Yt={mysql:{connectionStringFormat:Jt,connectionStringPlaceholder:`mysql://user:password@host:3306/database`,databasePlaceholder:`mydb`,defaultDatabase:``,defaultPort:3306,defaultSslMode:`prefer`,fallbackHost:Gt,hostPlaceholder:Gt,invalidConnectionStringFormat:Jt,isPostgresFamily:!1,namePlaceholder:`My Database`,supportedProtocols:[`mysql`],usernamePlaceholder:`root`},postgres:{connectionStringFormat:Kt,connectionStringPlaceholder:`postgres://user:password@host:5432/database`,databasePlaceholder:`mydb`,defaultDatabase:``,defaultPort:5432,defaultSslMode:`prefer`,fallbackHost:Gt,hostPlaceholder:Gt,invalidConnectionStringFormat:Kt,isPostgresFamily:!0,namePlaceholder:`My Database`,supportedProtocols:[`postgres`,`postgresql`],usernamePlaceholder:`postgres`},supabase:{connectionStringFormat:qt,connectionStringPlaceholder:qt,databasePlaceholder:`postgres`,defaultDatabase:`postgres`,defaultPort:5432,defaultSslMode:`require`,fallbackHost:Gt,hostPlaceholder:`db.your-project-ref.supabase.co`,invalidConnectionStringFormat:Kt,isPostgresFamily:!0,namePlaceholder:`My Supabase`,supportedProtocols:[`postgres`,`postgresql`],usernamePlaceholder:`postgres.your-project-ref`}};function Xt(e){return e===`postgres`||e===`supabase`||e===`mysql`}function Zt(e){return Yt[e]}function Qt(e,t){let n=e.trim();if(!n)return null;try{let e=new URL(n),r=e.protocol.replace(`:`,``),i=Zt(t);return i.supportedProtocols.includes(r)?{database:e.pathname.slice(1)||``,host:e.hostname||i.fallbackHost,password:decodeURIComponent(e.password)||``,port:e.port?Number.parseInt(e.port,10):i.defaultPort,username:decodeURIComponent(e.username)||``}:null}catch{return null}}function $t(e){return Zt(e).connectionStringPlaceholder}function en(e){return Zt(e).connectionStringFormat}function tn(e){return`Invalid connection string format. Expected: ${Zt(e).invalidConnectionStringFormat}`}var nn=R({database:F().min(1,`Database name is required`),host:F().min(1,`Host is required`),name:F().min(1,`Name is required`),password:F().min(1,`Password is required`),port:P().min(1).max(65535),provider:z([`postgres`,`supabase`,`mysql`]),username:F().min(1,`Username is required`)});function rn(e){let t=(0,K.c)(117),{provider:n,onSuccess:r,organizationId:i}=e,a;t[0]===n?a=t[1]:(a=Zt(n),t[0]=n,t[1]=a);let o=a,[s,c]=(0,q.useState)(``),[l,u]=(0,q.useState)(null),d;t[2]!==n||t[3]!==o.defaultDatabase||t[4]!==o.defaultPort?(d={provider:n,name:``,host:``,port:o.defaultPort,database:o.defaultDatabase,username:``,password:``},t[2]=n,t[3]=o.defaultDatabase,t[4]=o.defaultPort,t[5]=d):d=t[5];let f;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(f=ue(nn),t[6]=f):f=t[6];let p;t[7]===d?p=t[8]:(p={defaultValues:d,resolver:f},t[7]=d,t[8]=p);let m=le(p),h;t[9]===i?h=t[10]:(h=async e=>{let t=Zt(e.provider),n=t.isPostgresFamily?{type:`postgres`,host:e.host,port:e.port,database:e.database,username:e.username,password:e.password,sslMode:t.defaultSslMode}:{type:`mysql`,host:e.host,port:e.port,database:e.database,username:e.username,password:e.password,sslMode:t.defaultSslMode};return re({organizationId:i,provider:e.provider,name:e.name,credentials:n})},t[9]=i,t[10]=h);let g;t[11]===m.setError?g=t[12]:(g=e=>{mt(e,m.setError,`name`)},t[11]=m.setError,t[12]=g);let _;t[13]===r?_=t[14]:(_=e=>{r(e.dataSource.id)},t[13]=r,t[14]=_);let v;t[15]===i?v=t[16]:(v=ne(i),t[15]=i,t[16]=v);let y;t[17]!==h||t[18]!==g||t[19]!==_||t[20]!==v.queryKey?(y={createOptimisticItem:an,mutationFn:h,onError:g,onSuccess:_,queryKey:v.queryKey,successMessage:`Data source created successfully`},t[17]=h,t[18]=g,t[19]=_,t[20]=v.queryKey,t[21]=y):y=t[21];let b=w(y),x;t[22]===b?x=t[23]:(x=e=>{b.mutate(e)},t[22]=b,t[23]=x);let S=x,C;t[24]!==s||t[25]!==m||t[26]!==b||t[27]!==n||t[28]!==o.defaultPort||t[29]!==o.fallbackHost?(C=e=>{e.preventDefault(),u(null);let t=m.getValues(`name`);if(!t){m.setError(`name`,{message:`Name is required`});return}let r=Qt(s,n);if(!r){u(tn(n));return}if(!r.database){u(`Database name is required in connection string`);return}if(!r.username){u(`Username is required in connection string`);return}b.mutate({database:r.database,host:r.host??o.fallbackHost,name:t,password:r.password??``,port:r.port??o.defaultPort,provider:n,username:r.username})},t[24]=s,t[25]=m,t[26]=b,t[27]=n,t[28]=o.defaultPort,t[29]=o.fallbackHost,t[30]=C):C=t[30];let T=C,E;t[31]===Symbol.for(`react.memo_cache_sentinel`)?(E=(0,J.jsx)(W,{htmlFor:`name`,children:`Data Source Name`}),t[31]=E):E=t[31];let D=o.namePlaceholder,O;t[32]===m?O=t[33]:(O=m.register(`name`),t[32]=m,t[33]=O);let k;t[34]!==o.namePlaceholder||t[35]!==O?(k=(0,J.jsx)(U,{id:`name`,placeholder:D,...O}),t[34]=o.namePlaceholder,t[35]=O,t[36]=k):k=t[36];let A=m.formState.errors.name?.message,j;t[37]===A?j=t[38]:(j=(0,J.jsx)(Q,{message:A}),t[37]=A,t[38]=j);let M;t[39]!==k||t[40]!==j?(M=(0,J.jsxs)(`div`,{className:`space-y-2`,children:[E,k,j]}),t[39]=k,t[40]=j,t[41]=M):M=t[41];let N;t[42]===Symbol.for(`react.memo_cache_sentinel`)?(N=(0,J.jsxs)(He,{className:`w-full`,children:[(0,J.jsx)(Ue,{value:`url`,className:`flex-1`,children:`Connection URL`}),(0,J.jsx)(Ue,{value:`manual`,className:`flex-1`,children:`Manual`})]}),t[42]=N):N=t[42];let P;t[43]===Symbol.for(`react.memo_cache_sentinel`)?(P=(0,J.jsx)(W,{htmlFor:`connectionString`,children:`Connection String`}),t[43]=P):P=t[43];let F;t[44]===n?F=t[45]:(F=$t(n),t[44]=n,t[45]=F);let I;t[46]===Symbol.for(`react.memo_cache_sentinel`)?(I=e=>{c(e.target.value),u(null)},t[46]=I):I=t[46];let L;t[47]!==s||t[48]!==F?(L=(0,J.jsx)(U,{id:`connectionString`,type:`text`,placeholder:F,value:s,onChange:I,className:`font-mono text-sm`}),t[47]=s,t[48]=F,t[49]=L):L=t[49];let R;t[50]===l?R=t[51]:(R=(0,J.jsx)(Q,{message:l}),t[50]=l,t[51]=R);let z;t[52]===n?z=t[53]:(z=en(n),t[52]=n,t[53]=z);let B;t[54]===z?B=t[55]:(B=(0,J.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Format: `,z]}),t[54]=z,t[55]=B);let V;t[56]!==L||t[57]!==R||t[58]!==B?(V=(0,J.jsxs)(`div`,{className:`space-y-2`,children:[P,L,R,B]}),t[56]=L,t[57]=R,t[58]=B,t[59]=V):V=t[59];let H;t[60]===b.isPending?H=t[61]:(H=(0,J.jsx)(pt,{idleLabel:`Create Data Source`,isPending:b.isPending,pendingLabel:`Creating...`}),t[60]=b.isPending,t[61]=H);let ee;t[62]!==T||t[63]!==V||t[64]!==H?(ee=(0,J.jsx)(We,{value:`url`,className:`pt-4`,children:(0,J.jsxs)(`form`,{onSubmit:T,className:`space-y-4`,children:[V,H]})}),t[62]=T,t[63]=V,t[64]=H,t[65]=ee):ee=t[65];let te;t[66]!==m||t[67]!==S?(te=m.handleSubmit(S),t[66]=m,t[67]=S,t[68]=te):te=t[68];let ie;t[69]===Symbol.for(`react.memo_cache_sentinel`)?(ie=(0,J.jsx)(W,{htmlFor:`host`,children:`Host`}),t[69]=ie):ie=t[69];let ae=o.hostPlaceholder,oe;t[70]===m?oe=t[71]:(oe=m.register(`host`),t[70]=m,t[71]=oe);let G;t[72]!==o.hostPlaceholder||t[73]!==oe?(G=(0,J.jsxs)(`div`,{className:`space-y-2`,children:[ie,(0,J.jsx)(U,{id:`host`,placeholder:ae,...oe})]}),t[72]=o.hostPlaceholder,t[73]=oe,t[74]=G):G=t[74];let se;t[75]===Symbol.for(`react.memo_cache_sentinel`)?(se=(0,J.jsx)(W,{htmlFor:`port`,children:`Port`}),t[75]=se):se=t[75];let ce;t[76]===m?ce=t[77]:(ce=m.register(`port`,{valueAsNumber:!0}),t[76]=m,t[77]=ce);let Y;t[78]===ce?Y=t[79]:(Y=(0,J.jsxs)(`div`,{className:`space-y-2`,children:[se,(0,J.jsx)(U,{id:`port`,type:`number`,...ce})]}),t[78]=ce,t[79]=Y);let de;t[80]!==G||t[81]!==Y?(de=(0,J.jsxs)(`div`,{className:`grid grid-cols-2 gap-4`,children:[G,Y]}),t[80]=G,t[81]=Y,t[82]=de):de=t[82];let fe;t[83]===Symbol.for(`react.memo_cache_sentinel`)?(fe=(0,J.jsx)(W,{htmlFor:`database`,children:`Database`}),t[83]=fe):fe=t[83];let pe=o.databasePlaceholder,me;t[84]===m?me=t[85]:(me=m.register(`database`),t[84]=m,t[85]=me);let X;t[86]!==o.databasePlaceholder||t[87]!==me?(X=(0,J.jsxs)(`div`,{className:`space-y-2`,children:[fe,(0,J.jsx)(U,{id:`database`,placeholder:pe,...me})]}),t[86]=o.databasePlaceholder,t[87]=me,t[88]=X):X=t[88];let he;t[89]===Symbol.for(`react.memo_cache_sentinel`)?(he=(0,J.jsx)(W,{htmlFor:`username`,children:`Username`}),t[89]=he):he=t[89];let ge=o.usernamePlaceholder,_e;t[90]===m?_e=t[91]:(_e=m.register(`username`),t[90]=m,t[91]=_e);let ve;t[92]!==o.usernamePlaceholder||t[93]!==_e?(ve=(0,J.jsxs)(`div`,{className:`space-y-2`,children:[he,(0,J.jsx)(U,{id:`username`,placeholder:ge,..._e})]}),t[92]=o.usernamePlaceholder,t[93]=_e,t[94]=ve):ve=t[94];let ye;t[95]===Symbol.for(`react.memo_cache_sentinel`)?(ye=(0,J.jsx)(W,{htmlFor:`password`,children:`Password`}),t[95]=ye):ye=t[95];let be;t[96]===m?be=t[97]:(be=m.register(`password`),t[96]=m,t[97]=be);let xe;t[98]===be?xe=t[99]:(xe=(0,J.jsxs)(`div`,{className:`space-y-2`,children:[ye,(0,J.jsx)(U,{id:`password`,type:`password`,...be})]}),t[98]=be,t[99]=xe);let Se;t[100]!==ve||t[101]!==xe?(Se=(0,J.jsxs)(`div`,{className:`grid grid-cols-2 gap-4`,children:[ve,xe]}),t[100]=ve,t[101]=xe,t[102]=Se):Se=t[102];let Ce;t[103]===b.isPending?Ce=t[104]:(Ce=(0,J.jsx)(pt,{idleLabel:`Create Data Source`,isPending:b.isPending,pendingLabel:`Creating...`}),t[103]=b.isPending,t[104]=Ce);let we;t[105]!==te||t[106]!==de||t[107]!==X||t[108]!==Se||t[109]!==Ce?(we=(0,J.jsx)(We,{value:`manual`,className:`pt-4`,children:(0,J.jsxs)(`form`,{onSubmit:te,className:`space-y-4`,children:[de,X,Se,Ce]})}),t[105]=te,t[106]=de,t[107]=X,t[108]=Se,t[109]=Ce,t[110]=we):we=t[110];let Z;t[111]!==ee||t[112]!==we?(Z=(0,J.jsxs)(Be,{defaultValue:`url`,children:[N,ee,we]}),t[111]=ee,t[112]=we,t[113]=Z):Z=t[113];let Te;return t[114]!==M||t[115]!==Z?(Te=(0,J.jsxs)(`div`,{className:`space-y-4`,children:[M,Z]}),t[114]=M,t[115]=Z,t[116]=Te):Te=t[116],Te}function an(e){return{id:`temp-${crypto.randomUUID()}`,provider:e.provider,name:e.name,status:`active`,useAsDataSource:!0,errorMessage:null,lastUsedAt:null,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}}var on=R({accessToken:F().min(1,`Access token is required`),name:F().min(1,`Name is required`)});function sn(e){let t=(0,K.c)(47),{organizationId:n,onSuccess:r}=e,i;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(i={defaultValues:{name:``,accessToken:``},resolver:ue(on)},t[0]=i):i=t[0];let a=le(i),o;t[1]===n?o=t[2]:(o=async e=>{let t={type:`github`,accessToken:e.accessToken};return re({organizationId:n,provider:`github`,name:e.name,credentials:t})},t[1]=n,t[2]=o);let s;t[3]===a.setError?s=t[4]:(s=e=>{mt(e,a.setError,`name`)},t[3]=a.setError,t[4]=s);let c;t[5]===r?c=t[6]:(c=e=>{r?.(e.dataSource.id)},t[5]=r,t[6]=c);let l;t[7]===n?l=t[8]:(l=ne(n),t[7]=n,t[8]=l);let u;t[9]!==o||t[10]!==s||t[11]!==c||t[12]!==l.queryKey?(u={createOptimisticItem:cn,mutationFn:o,onError:s,onSuccess:c,queryKey:l.queryKey,successMessage:`GitHub connected`},t[9]=o,t[10]=s,t[11]=c,t[12]=l.queryKey,t[13]=u):u=t[13];let d=w(u),f;if(t[14]!==a||t[15]!==d){let e;t[17]===d?e=t[18]:(e=e=>d.mutate(e),t[17]=d,t[18]=e),f=a.handleSubmit(e),t[14]=a,t[15]=d,t[16]=f}else f=t[16];let p;t[19]===Symbol.for(`react.memo_cache_sentinel`)?(p=(0,J.jsx)(W,{htmlFor:`github-token-name`,children:`Data Source Name`}),t[19]=p):p=t[19];let m;t[20]===a?m=t[21]:(m=a.register(`name`),t[20]=a,t[21]=m);let h;t[22]===m?h=t[23]:(h=(0,J.jsx)(U,{id:`github-token-name`,placeholder:`GitHub`,...m}),t[22]=m,t[23]=h);let g=a.formState.errors.name?.message,_;t[24]===g?_=t[25]:(_=(0,J.jsx)(Q,{message:g}),t[24]=g,t[25]=_);let v;t[26]!==h||t[27]!==_?(v=(0,J.jsxs)(`div`,{className:`space-y-2`,children:[p,h,_]}),t[26]=h,t[27]=_,t[28]=v):v=t[28];let y;t[29]===Symbol.for(`react.memo_cache_sentinel`)?(y=(0,J.jsx)(W,{htmlFor:`github-access-token`,children:`Access Token`}),t[29]=y):y=t[29];let b;t[30]===a?b=t[31]:(b=a.register(`accessToken`),t[30]=a,t[31]=b);let x;t[32]===b?x=t[33]:(x=(0,J.jsx)(U,{id:`github-access-token`,type:`password`,placeholder:`ghp_...`,...b}),t[32]=b,t[33]=x);let S=a.formState.errors.accessToken?.message,C;t[34]===S?C=t[35]:(C=(0,J.jsx)(Q,{message:S}),t[34]=S,t[35]=C);let T;t[36]===Symbol.for(`react.memo_cache_sentinel`)?(T=(0,J.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Use a fine-grained personal access token with read-only access to repositories and issues.`}),t[36]=T):T=t[36];let E;t[37]!==x||t[38]!==C?(E=(0,J.jsxs)(`div`,{className:`space-y-2`,children:[y,x,C,T]}),t[37]=x,t[38]=C,t[39]=E):E=t[39];let D;t[40]===d.isPending?D=t[41]:(D=(0,J.jsx)(pt,{idleLabel:`Connect GitHub`,isPending:d.isPending,pendingLabel:`Connecting...`}),t[40]=d.isPending,t[41]=D);let O;return t[42]!==v||t[43]!==E||t[44]!==D||t[45]!==f?(O=(0,J.jsxs)(`form`,{onSubmit:f,className:`space-y-4`,children:[v,E,D]}),t[42]=v,t[43]=E,t[44]=D,t[45]=f,t[46]=O):O=t[46],O}function cn(e){return{id:`temp-${crypto.randomUUID()}`,provider:`github`,name:e.name,status:`active`,useAsDataSource:!0,errorMessage:null,lastUsedAt:null,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}}var ln=R({apiBaseUrl:I([F().url(`API Base URL must be a valid URL`),B(``)]),apiKey:F().min(1,`API Key is required`),name:F().min(1,`Name is required`)});function un(e){let t=(0,K.c)(58),{organizationId:n,onSuccess:r}=e,i;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(i={defaultValues:{name:``,apiKey:``,apiBaseUrl:``},resolver:ue(ln)},t[0]=i):i=t[0];let a=le(i),o;t[1]===n?o=t[2]:(o=async e=>{let t={type:`laminar`,apiKey:e.apiKey.trim()},r=e.apiBaseUrl.trim();return r&&(t.apiBaseUrl=r),re({organizationId:n,provider:`laminar`,name:e.name.trim(),credentials:t})},t[1]=n,t[2]=o);let s;t[3]===a.setError?s=t[4]:(s=e=>{mt(e,a.setError,`name`)},t[3]=a.setError,t[4]=s);let c;t[5]===r?c=t[6]:(c=e=>{r(e.dataSource.id)},t[5]=r,t[6]=c);let l;t[7]===n?l=t[8]:(l=ne(n),t[7]=n,t[8]=l);let u;t[9]!==o||t[10]!==s||t[11]!==c||t[12]!==l.queryKey?(u={createOptimisticItem:dn,mutationFn:o,onError:s,onSuccess:c,queryKey:l.queryKey,successMessage:`Data source created successfully`},t[9]=o,t[10]=s,t[11]=c,t[12]=l.queryKey,t[13]=u):u=t[13];let d=w(u),f;t[14]===d?f=t[15]:(f=e=>{d.mutate(e)},t[14]=d,t[15]=f);let p=f,m;t[16]!==a||t[17]!==p?(m=a.handleSubmit(p),t[16]=a,t[17]=p,t[18]=m):m=t[18];let h;t[19]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,J.jsx)(W,{htmlFor:`laminar-name`,children:`Data Source Name`}),t[19]=h):h=t[19];let g;t[20]===a?g=t[21]:(g=a.register(`name`),t[20]=a,t[21]=g);let _;t[22]===g?_=t[23]:(_=(0,J.jsx)(U,{id:`laminar-name`,placeholder:`Laminar`,...g}),t[22]=g,t[23]=_);let v=a.formState.errors.name?.message,y;t[24]===v?y=t[25]:(y=(0,J.jsx)(Q,{message:v}),t[24]=v,t[25]=y);let b;t[26]!==_||t[27]!==y?(b=(0,J.jsxs)(`div`,{className:`space-y-2`,children:[h,_,y]}),t[26]=_,t[27]=y,t[28]=b):b=t[28];let x;t[29]===Symbol.for(`react.memo_cache_sentinel`)?(x=(0,J.jsx)(W,{htmlFor:`laminar-api-key`,children:`API Key`}),t[29]=x):x=t[29];let S;t[30]===a?S=t[31]:(S=a.register(`apiKey`),t[30]=a,t[31]=S);let C;t[32]===S?C=t[33]:(C=(0,J.jsx)(U,{id:`laminar-api-key`,type:`password`,placeholder:`lmnr_project_key_...`,...S}),t[32]=S,t[33]=C);let T=a.formState.errors.apiKey?.message,E;t[34]===T?E=t[35]:(E=(0,J.jsx)(Q,{message:T}),t[34]=T,t[35]=E);let D;t[36]!==C||t[37]!==E?(D=(0,J.jsxs)(`div`,{className:`space-y-2`,children:[x,C,E]}),t[36]=C,t[37]=E,t[38]=D):D=t[38];let O;t[39]===Symbol.for(`react.memo_cache_sentinel`)?(O=(0,J.jsx)(W,{htmlFor:`laminar-api-base-url`,children:`API Base URL (optional)`}),t[39]=O):O=t[39];let k;t[40]===a?k=t[41]:(k=a.register(`apiBaseUrl`),t[40]=a,t[41]=k);let A;t[42]===k?A=t[43]:(A=(0,J.jsx)(U,{id:`laminar-api-base-url`,placeholder:`https://api.lmnr.ai`,...k}),t[42]=k,t[43]=A);let j=a.formState.errors.apiBaseUrl?.message,M;t[44]===j?M=t[45]:(M=(0,J.jsx)(Q,{message:j}),t[44]=j,t[45]=M);let N;t[46]===Symbol.for(`react.memo_cache_sentinel`)?(N=(0,J.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Leave blank to use the default Laminar endpoint.`}),t[46]=N):N=t[46];let P;t[47]!==A||t[48]!==M?(P=(0,J.jsxs)(`div`,{className:`space-y-2`,children:[O,A,M,N]}),t[47]=A,t[48]=M,t[49]=P):P=t[49];let F;t[50]===d.isPending?F=t[51]:(F=(0,J.jsx)(pt,{idleLabel:`Create Data Source`,isPending:d.isPending,pendingLabel:`Creating...`}),t[50]=d.isPending,t[51]=F);let I;return t[52]!==b||t[53]!==D||t[54]!==P||t[55]!==F||t[56]!==m?(I=(0,J.jsxs)(`form`,{onSubmit:m,className:`space-y-4`,children:[b,D,P,F]}),t[52]=b,t[53]=D,t[54]=P,t[55]=F,t[56]=m,t[57]=I):I=t[57],I}function dn(e){return{id:`temp-${crypto.randomUUID()}`,provider:`laminar`,name:e.name,status:`active`,useAsDataSource:!0,errorMessage:null,lastUsedAt:null,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}}var fn=R({name:F().min(1,`Name is required`),projectId:F().min(1,`Project ID is required`),region:z([`us`,`eu`,`in`]),secret:F().min(1,`Service Account Secret is required`),username:F().min(1,`Service Account Username is required`),workspaceId:F().optional()}),pn=[{label:`US (Standard)`,value:`us`},{label:`EU (Europe)`,value:`eu`},{label:`IN (India)`,value:`in`}];function mn(e){return e===`us`||e===`eu`||e===`in`}function hn({onSuccess:e,organizationId:t}){let n=le({defaultValues:{name:``,username:``,secret:``,projectId:``,workspaceId:``,region:`us`},resolver:ue(fn)}),r=w({createOptimisticItem:e=>({id:`temp-${crypto.randomUUID()}`,provider:`mixpanel`,name:e.name,status:`active`,useAsDataSource:!0,errorMessage:null,lastUsedAt:null,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}),mutationFn:async e=>{let n={type:`mixpanel`,username:e.username,secret:e.secret,projectId:e.projectId,workspaceId:e.workspaceId?.trim()||void 0,region:e.region};return re({organizationId:t,provider:`mixpanel`,name:e.name,credentials:n})},onError:e=>{mt(e,n.setError,`name`)},onSuccess:t=>{e(t.dataSource.id)},queryKey:ne(t).queryKey,successMessage:`Data source created successfully`});return(0,J.jsxs)(`form`,{onSubmit:n.handleSubmit(e=>r.mutate(e)),className:`space-y-4`,children:[(0,J.jsxs)(`div`,{className:`space-y-2`,children:[(0,J.jsx)(W,{htmlFor:`mixpanel-name`,children:`Data Source Name`}),(0,J.jsx)(U,{id:`mixpanel-name`,placeholder:`My Mixpanel`,...n.register(`name`)}),(0,J.jsx)(Q,{message:n.formState.errors.name?.message})]}),(0,J.jsxs)(`div`,{className:`space-y-2`,children:[(0,J.jsx)(W,{htmlFor:`mixpanel-projectId`,children:`Project ID`}),(0,J.jsx)(U,{id:`mixpanel-projectId`,placeholder:`Enter your Mixpanel Project ID`,...n.register(`projectId`)}),(0,J.jsx)(Q,{message:n.formState.errors.projectId?.message})]}),(0,J.jsxs)(`div`,{className:`space-y-2`,children:[(0,J.jsx)(W,{htmlFor:`mixpanel-username`,children:`Service Account Username`}),(0,J.jsx)(U,{id:`mixpanel-username`,placeholder:`Enter your Service Account Username`,...n.register(`username`)}),(0,J.jsx)(Q,{message:n.formState.errors.username?.message})]}),(0,J.jsxs)(`div`,{className:`space-y-2`,children:[(0,J.jsx)(W,{htmlFor:`mixpanel-secret`,children:`Service Account Secret`}),(0,J.jsx)(U,{id:`mixpanel-secret`,type:`password`,placeholder:`Enter your Service Account Secret`,...n.register(`secret`)}),(0,J.jsx)(Q,{message:n.formState.errors.secret?.message})]}),(0,J.jsxs)(`div`,{className:`space-y-2`,children:[(0,J.jsx)(W,{htmlFor:`mixpanel-workspaceId`,children:`Workspace ID (optional)`}),(0,J.jsx)(U,{id:`mixpanel-workspaceId`,placeholder:`Enter workspace ID if your project uses Data Views`,...n.register(`workspaceId`)})]}),(0,J.jsxs)(`div`,{className:`space-y-2`,children:[(0,J.jsx)(W,{htmlFor:`mixpanel-region`,children:`Region`}),(0,J.jsxs)(v,{items:[...pn],value:n.watch(`region`),onValueChange:e=>{mn(e)&&n.setValue(`region`,e)},children:[(0,J.jsx)(h,{id:`mixpanel-region`,children:(0,J.jsx)(m,{})}),(0,J.jsx)(g,{children:pn.map(e=>(0,J.jsx)(_,{value:e.value,children:e.label},e.value))})]})]}),(0,J.jsx)(pt,{idleLabel:`Create Data Source`,isPending:r.isPending,pendingLabel:`Creating...`})]})}var gn=R({connectionString:F().min(1,`Connection string is required`),database:F().optional(),databases:F().optional(),name:F().min(1,`Name is required`)});function _n(e){let t=e?.trim();if(!t)return;let n=new Set,r=[],i=t.split(`,`);for(let e of i){let t=e.trim();!t||n.has(t)||(n.add(t),r.push(t))}return r.length>0?r:void 0}function vn(e){return e?.trim()||void 0}function yn(e){let t=(0,K.c)(62),{onSuccess:n,organizationId:r}=e,i;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(i={defaultValues:{name:``,connectionString:``,database:``,databases:``},resolver:ue(gn)},t[0]=i):i=t[0];let a=le(i),o;t[1]===r?o=t[2]:(o=async e=>{let t={type:`mongodb`,connectionString:e.connectionString.trim()},n=vn(e.database);n&&(t.database=n);let i=_n(e.databases);return i&&(t.databases=i),re({organizationId:r,provider:`mongodb`,name:e.name.trim(),credentials:t})},t[1]=r,t[2]=o);let s;t[3]===a.setError?s=t[4]:(s=e=>{mt(e,a.setError,`name`)},t[3]=a.setError,t[4]=s);let c;t[5]===n?c=t[6]:(c=e=>{n(e.dataSource.id)},t[5]=n,t[6]=c);let l;t[7]===r?l=t[8]:(l=ne(r),t[7]=r,t[8]=l);let u;t[9]!==o||t[10]!==s||t[11]!==c||t[12]!==l.queryKey?(u={createOptimisticItem:bn,mutationFn:o,onError:s,onSuccess:c,queryKey:l.queryKey,successMessage:`Data source created successfully`},t[9]=o,t[10]=s,t[11]=c,t[12]=l.queryKey,t[13]=u):u=t[13];let d=w(u),f;t[14]===d?f=t[15]:(f=e=>{d.mutate(e)},t[14]=d,t[15]=f);let p=f,m;t[16]!==a||t[17]!==p?(m=a.handleSubmit(p),t[16]=a,t[17]=p,t[18]=m):m=t[18];let h;t[19]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,J.jsx)(W,{htmlFor:`mongodb-name`,children:`Data Source Name`}),t[19]=h):h=t[19];let g;t[20]===a?g=t[21]:(g=a.register(`name`),t[20]=a,t[21]=g);let _;t[22]===g?_=t[23]:(_=(0,J.jsx)(U,{id:`mongodb-name`,placeholder:`MongoDB`,...g}),t[22]=g,t[23]=_);let v=a.formState.errors.name?.message,y;t[24]===v?y=t[25]:(y=(0,J.jsx)(Q,{message:v}),t[24]=v,t[25]=y);let b;t[26]!==_||t[27]!==y?(b=(0,J.jsxs)(`div`,{className:`space-y-2`,children:[h,_,y]}),t[26]=_,t[27]=y,t[28]=b):b=t[28];let x;t[29]===Symbol.for(`react.memo_cache_sentinel`)?(x=(0,J.jsx)(W,{htmlFor:`mongodb-connection`,children:`Connection String`}),t[29]=x):x=t[29];let S;t[30]===a?S=t[31]:(S=a.register(`connectionString`),t[30]=a,t[31]=S);let C;t[32]===S?C=t[33]:(C=(0,J.jsx)(U,{id:`mongodb-connection`,placeholder:`mongodb+srv://user:pass@cluster0.example.mongodb.net/`,className:`font-mono text-sm`,...S}),t[32]=S,t[33]=C);let T=a.formState.errors.connectionString?.message,E;t[34]===T?E=t[35]:(E=(0,J.jsx)(Q,{message:T}),t[34]=T,t[35]=E);let D;t[36]===Symbol.for(`react.memo_cache_sentinel`)?(D=(0,J.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Include the database in the URL path or set it below.`}),t[36]=D):D=t[36];let O;t[37]!==C||t[38]!==E?(O=(0,J.jsxs)(`div`,{className:`space-y-2`,children:[x,C,E,D]}),t[37]=C,t[38]=E,t[39]=O):O=t[39];let k;t[40]===Symbol.for(`react.memo_cache_sentinel`)?(k=(0,J.jsx)(W,{htmlFor:`mongodb-database`,children:`Default Database (optional)`}),t[40]=k):k=t[40];let A;t[41]===a?A=t[42]:(A=a.register(`database`),t[41]=a,t[42]=A);let j;t[43]===A?j=t[44]:(j=(0,J.jsxs)(`div`,{className:`space-y-2`,children:[k,(0,J.jsx)(U,{id:`mongodb-database`,placeholder:`analytics`,...A})]}),t[43]=A,t[44]=j);let M;t[45]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,J.jsx)(W,{htmlFor:`mongodb-databases`,children:`Allowed Databases (optional)`}),t[45]=M):M=t[45];let N;t[46]===a?N=t[47]:(N=a.register(`databases`),t[46]=a,t[47]=N);let P;t[48]===N?P=t[49]:(P=(0,J.jsx)(se,{id:`mongodb-databases`,placeholder:`analytics, app, reporting`,...N}),t[48]=N,t[49]=P);let F;t[50]===Symbol.for(`react.memo_cache_sentinel`)?(F=(0,J.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Comma-separated list of databases the agent can access.`}),t[50]=F):F=t[50];let I;t[51]===P?I=t[52]:(I=(0,J.jsxs)(`div`,{className:`space-y-2`,children:[M,P,F]}),t[51]=P,t[52]=I);let L;t[53]===d.isPending?L=t[54]:(L=(0,J.jsx)(pt,{idleLabel:`Create Data Source`,isPending:d.isPending,pendingLabel:`Creating...`}),t[53]=d.isPending,t[54]=L);let R;return t[55]!==b||t[56]!==O||t[57]!==j||t[58]!==I||t[59]!==L||t[60]!==m?(R=(0,J.jsxs)(`form`,{onSubmit:m,className:`space-y-4`,children:[b,O,j,I,L]}),t[55]=b,t[56]=O,t[57]=j,t[58]=I,t[59]=L,t[60]=m,t[61]=R):R=t[61],R}function bn(e){return{id:`temp-${crypto.randomUUID()}`,provider:`mongodb`,name:e.name,status:`active`,useAsDataSource:!0,errorMessage:null,lastUsedAt:null,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}}var xn=R({hostUrl:F().min(1,`Host URL is required`).url(`Invalid host URL`),name:F().min(1,`Name is required`),personalApiKey:F().min(1,`Personal API Key is required`),projectId:F().min(1,`Project ID is required`)});function Sn(e){let t=(0,K.c)(69),{onSuccess:n,organizationId:r}=e,i;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(i={defaultValues:{name:``,projectId:``,personalApiKey:``,hostUrl:`https://us.posthog.com`},resolver:ue(xn)},t[0]=i):i=t[0];let a=le(i),o;t[1]===r?o=t[2]:(o=async e=>{let t={type:`posthog`,projectId:e.projectId,personalApiKey:e.personalApiKey,hostUrl:e.hostUrl.trim()};return re({organizationId:r,provider:`posthog`,name:e.name,credentials:t})},t[1]=r,t[2]=o);let s;t[3]===a.setError?s=t[4]:(s=e=>{mt(e,a.setError,`name`)},t[3]=a.setError,t[4]=s);let c;t[5]===n?c=t[6]:(c=e=>{n(e.dataSource.id)},t[5]=n,t[6]=c);let l;t[7]===r?l=t[8]:(l=ne(r),t[7]=r,t[8]=l);let u;t[9]!==o||t[10]!==s||t[11]!==c||t[12]!==l.queryKey?(u={createOptimisticItem:Cn,mutationFn:o,onError:s,onSuccess:c,queryKey:l.queryKey,successMessage:`Data source created successfully`},t[9]=o,t[10]=s,t[11]=c,t[12]=l.queryKey,t[13]=u):u=t[13];let d=w(u),f;if(t[14]!==a||t[15]!==d){let e;t[17]===d?e=t[18]:(e=e=>d.mutate(e),t[17]=d,t[18]=e),f=a.handleSubmit(e),t[14]=a,t[15]=d,t[16]=f}else f=t[16];let p;t[19]===Symbol.for(`react.memo_cache_sentinel`)?(p=(0,J.jsx)(W,{htmlFor:`posthog-name`,children:`Data Source Name`}),t[19]=p):p=t[19];let m;t[20]===a?m=t[21]:(m=a.register(`name`),t[20]=a,t[21]=m);let h;t[22]===m?h=t[23]:(h=(0,J.jsx)(U,{id:`posthog-name`,placeholder:`My PostHog`,...m}),t[22]=m,t[23]=h);let g=a.formState.errors.name?.message,_;t[24]===g?_=t[25]:(_=(0,J.jsx)(Q,{message:g}),t[24]=g,t[25]=_);let v;t[26]!==h||t[27]!==_?(v=(0,J.jsxs)(`div`,{className:`space-y-2`,children:[p,h,_]}),t[26]=h,t[27]=_,t[28]=v):v=t[28];let y;t[29]===Symbol.for(`react.memo_cache_sentinel`)?(y=(0,J.jsx)(W,{htmlFor:`posthog-projectId`,children:`Project ID`}),t[29]=y):y=t[29];let b;t[30]===a?b=t[31]:(b=a.register(`projectId`),t[30]=a,t[31]=b);let x;t[32]===b?x=t[33]:(x=(0,J.jsx)(U,{id:`posthog-projectId`,placeholder:`Enter your PostHog Project ID`,...b}),t[32]=b,t[33]=x);let S=a.formState.errors.projectId?.message,C;t[34]===S?C=t[35]:(C=(0,J.jsx)(Q,{message:S}),t[34]=S,t[35]=C);let T;t[36]!==x||t[37]!==C?(T=(0,J.jsxs)(`div`,{className:`space-y-2`,children:[y,x,C]}),t[36]=x,t[37]=C,t[38]=T):T=t[38];let E;t[39]===Symbol.for(`react.memo_cache_sentinel`)?(E=(0,J.jsx)(W,{htmlFor:`posthog-personalApiKey`,children:`Personal API Key`}),t[39]=E):E=t[39];let D;t[40]===a?D=t[41]:(D=a.register(`personalApiKey`),t[40]=a,t[41]=D);let O;t[42]===D?O=t[43]:(O=(0,J.jsx)(U,{id:`posthog-personalApiKey`,type:`password`,placeholder:`Enter your PostHog Personal API Key`,...D}),t[42]=D,t[43]=O);let k=a.formState.errors.personalApiKey?.message,A;t[44]===k?A=t[45]:(A=(0,J.jsx)(Q,{message:k}),t[44]=k,t[45]=A);let j;t[46]!==O||t[47]!==A?(j=(0,J.jsxs)(`div`,{className:`space-y-2`,children:[E,O,A]}),t[46]=O,t[47]=A,t[48]=j):j=t[48];let M;t[49]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,J.jsx)(W,{htmlFor:`posthog-hostUrl`,children:`Host URL`}),t[49]=M):M=t[49];let N;t[50]===a?N=t[51]:(N=a.register(`hostUrl`),t[50]=a,t[51]=N);let P;t[52]===N?P=t[53]:(P=(0,J.jsx)(U,{id:`posthog-hostUrl`,placeholder:`https://us.posthog.com`,...N}),t[52]=N,t[53]=P);let F=a.formState.errors.hostUrl?.message,I;t[54]===F?I=t[55]:(I=(0,J.jsx)(Q,{message:F}),t[54]=F,t[55]=I);let L;t[56]===Symbol.for(`react.memo_cache_sentinel`)?(L=(0,J.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:"Use `https://us.posthog.com`, `https://eu.posthog.com`, or your self-hosted base URL."}),t[56]=L):L=t[56];let R;t[57]!==P||t[58]!==I?(R=(0,J.jsxs)(`div`,{className:`space-y-2`,children:[M,P,I,L]}),t[57]=P,t[58]=I,t[59]=R):R=t[59];let z;t[60]===d.isPending?z=t[61]:(z=(0,J.jsx)(pt,{idleLabel:`Create Data Source`,isPending:d.isPending,pendingLabel:`Creating...`}),t[60]=d.isPending,t[61]=z);let B;return t[62]!==v||t[63]!==T||t[64]!==j||t[65]!==R||t[66]!==z||t[67]!==f?(B=(0,J.jsxs)(`form`,{onSubmit:f,className:`space-y-4`,children:[v,T,j,R,z]}),t[62]=v,t[63]=T,t[64]=j,t[65]=R,t[66]=z,t[67]=f,t[68]=B):B=t[68],B}function Cn(e){return{id:`temp-${crypto.randomUUID()}`,provider:`posthog`,name:e.name,status:`active`,useAsDataSource:!0,errorMessage:null,lastUsedAt:null,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}}var wn=R({apiBaseUrl:I([B(``),F().url(`API base URL must be a valid URL`)]),authToken:F().min(1,`Auth token is required`),name:F().min(1,`Name is required`),organizationSlug:F().min(1,`Organization slug is required`),projectSlug:F().optional()});function Tn(e){let t=(0,K.c)(74),{onSuccess:n,organizationId:r}=e,i;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(i={defaultValues:{name:``,authToken:``,organizationSlug:``,projectSlug:``,apiBaseUrl:``},resolver:ue(wn)},t[0]=i):i=t[0];let a=le(i),o;t[1]===r?o=t[2]:(o=async e=>{let t={type:`sentry`,authToken:e.authToken,organizationSlug:e.organizationSlug,projectSlug:e.projectSlug?.trim()||void 0,apiBaseUrl:e.apiBaseUrl.trim()||void 0};return re({organizationId:r,provider:`sentry`,name:e.name,credentials:t})},t[1]=r,t[2]=o);let s;t[3]===a.setError?s=t[4]:(s=e=>{mt(e,a.setError,`name`)},t[3]=a.setError,t[4]=s);let c;t[5]===n?c=t[6]:(c=e=>{n(e.dataSource.id)},t[5]=n,t[6]=c);let l;t[7]===r?l=t[8]:(l=ne(r),t[7]=r,t[8]=l);let u;t[9]!==o||t[10]!==s||t[11]!==c||t[12]!==l.queryKey?(u={createOptimisticItem:En,mutationFn:o,onError:s,onSuccess:c,queryKey:l.queryKey,successMessage:`Data source created successfully`},t[9]=o,t[10]=s,t[11]=c,t[12]=l.queryKey,t[13]=u):u=t[13];let d=w(u),f;if(t[14]!==a||t[15]!==d){let e;t[17]===d?e=t[18]:(e=e=>d.mutate(e),t[17]=d,t[18]=e),f=a.handleSubmit(e),t[14]=a,t[15]=d,t[16]=f}else f=t[16];let p;t[19]===Symbol.for(`react.memo_cache_sentinel`)?(p=(0,J.jsx)(W,{htmlFor:`sentry-name`,children:`Data Source Name`}),t[19]=p):p=t[19];let m;t[20]===a?m=t[21]:(m=a.register(`name`),t[20]=a,t[21]=m);let h;t[22]===m?h=t[23]:(h=(0,J.jsx)(U,{id:`sentry-name`,placeholder:`My Sentry`,...m}),t[22]=m,t[23]=h);let g=a.formState.errors.name?.message,_;t[24]===g?_=t[25]:(_=(0,J.jsx)(Q,{message:g}),t[24]=g,t[25]=_);let v;t[26]!==h||t[27]!==_?(v=(0,J.jsxs)(`div`,{className:`space-y-2`,children:[p,h,_]}),t[26]=h,t[27]=_,t[28]=v):v=t[28];let y;t[29]===Symbol.for(`react.memo_cache_sentinel`)?(y=(0,J.jsx)(W,{htmlFor:`sentry-organizationSlug`,children:`Organization Slug`}),t[29]=y):y=t[29];let b;t[30]===a?b=t[31]:(b=a.register(`organizationSlug`),t[30]=a,t[31]=b);let x;t[32]===b?x=t[33]:(x=(0,J.jsx)(U,{id:`sentry-organizationSlug`,placeholder:`acme`,...b}),t[32]=b,t[33]=x);let S=a.formState.errors.organizationSlug?.message,C;t[34]===S?C=t[35]:(C=(0,J.jsx)(Q,{message:S}),t[34]=S,t[35]=C);let T;t[36]!==x||t[37]!==C?(T=(0,J.jsxs)(`div`,{className:`space-y-2`,children:[y,x,C]}),t[36]=x,t[37]=C,t[38]=T):T=t[38];let E;t[39]===Symbol.for(`react.memo_cache_sentinel`)?(E=(0,J.jsx)(W,{htmlFor:`sentry-projectSlug`,children:`Project Slug (optional)`}),t[39]=E):E=t[39];let D;t[40]===a?D=t[41]:(D=a.register(`projectSlug`),t[40]=a,t[41]=D);let O;t[42]===D?O=t[43]:(O=(0,J.jsxs)(`div`,{className:`space-y-2`,children:[E,(0,J.jsx)(U,{id:`sentry-projectSlug`,placeholder:`frontend`,...D})]}),t[42]=D,t[43]=O);let k;t[44]===Symbol.for(`react.memo_cache_sentinel`)?(k=(0,J.jsx)(W,{htmlFor:`sentry-authToken`,children:`Auth Token`}),t[44]=k):k=t[44];let A;t[45]===a?A=t[46]:(A=a.register(`authToken`),t[45]=a,t[46]=A);let j;t[47]===A?j=t[48]:(j=(0,J.jsx)(U,{id:`sentry-authToken`,type:`password`,placeholder:`sntrys_...`,...A}),t[47]=A,t[48]=j);let M=a.formState.errors.authToken?.message,N;t[49]===M?N=t[50]:(N=(0,J.jsx)(Q,{message:M}),t[49]=M,t[50]=N);let P;t[51]!==j||t[52]!==N?(P=(0,J.jsxs)(`div`,{className:`space-y-2`,children:[k,j,N]}),t[51]=j,t[52]=N,t[53]=P):P=t[53];let F;t[54]===Symbol.for(`react.memo_cache_sentinel`)?(F=(0,J.jsx)(W,{htmlFor:`sentry-apiBaseUrl`,children:`API Base URL (optional)`}),t[54]=F):F=t[54];let I;t[55]===a?I=t[56]:(I=a.register(`apiBaseUrl`),t[55]=a,t[56]=I);let L;t[57]===I?L=t[58]:(L=(0,J.jsx)(U,{id:`sentry-apiBaseUrl`,placeholder:`https://sentry.io/api/0`,...I}),t[57]=I,t[58]=L);let R=a.formState.errors.apiBaseUrl?.message,z;t[59]===R?z=t[60]:(z=(0,J.jsx)(Q,{message:R}),t[59]=R,t[60]=z);let B;t[61]!==L||t[62]!==z?(B=(0,J.jsxs)(`div`,{className:`space-y-2`,children:[F,L,z]}),t[61]=L,t[62]=z,t[63]=B):B=t[63];let V;t[64]===d.isPending?V=t[65]:(V=(0,J.jsx)(pt,{idleLabel:`Create Data Source`,isPending:d.isPending,pendingLabel:`Creating...`}),t[64]=d.isPending,t[65]=V);let H;return t[66]!==v||t[67]!==T||t[68]!==O||t[69]!==P||t[70]!==B||t[71]!==V||t[72]!==f?(H=(0,J.jsxs)(`form`,{onSubmit:f,className:`space-y-4`,children:[v,T,O,P,B,V]}),t[66]=v,t[67]=T,t[68]=O,t[69]=P,t[70]=B,t[71]=V,t[72]=f,t[73]=H):H=t[73],H}function En(e){return{id:`temp-${crypto.randomUUID()}`,provider:`sentry`,name:e.name,status:`active`,useAsDataSource:!0,errorMessage:null,lastUsedAt:null,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}}function Dn(e){let t=(0,K.c)(66),[n,r]=(0,q.useState)(e.initialProvider??it),i,a;t[0]!==e.initialProvider||t[1]!==n?(i=()=>{e.initialProvider&&e.initialProvider!==n&&r(e.initialProvider)},a=[e.initialProvider,n],t[0]=e.initialProvider,t[1]=n,t[2]=i,t[3]=a):(i=t[2],a=t[3]),(0,q.useEffect)(i,a);let o;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(o=e=>{e&&ot(e)&&r(e)},t[4]=o):o=t[4];let s=o,c=e.className?`space-y-4 ${e.className}`:`space-y-4`,l;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,J.jsx)(W,{htmlFor:`type`,children:`Type`}),t[5]=l):l=t[5];let u;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(u=[...et],t[6]=u):u=t[6];let d;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,J.jsx)(h,{id:`type`,children:(0,J.jsx)(m,{})}),t[7]=d):d=t[7];let f;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(f=(0,J.jsx)(g,{children:et.map(On)}),t[8]=f):f=t[8];let p,_;t[9]===n?(p=t[10],_=t[11]):(p=(0,J.jsxs)(`div`,{className:`space-y-2`,children:[l,(0,J.jsxs)(v,{items:u,value:n,onValueChange:s,children:[d,f]})]}),_=(0,J.jsx)(Qe,{provider:n}),t[9]=n,t[10]=p,t[11]=_);let y;t[12]!==e.onSuccess||t[13]!==e.organizationId||t[14]!==n?(y=Xt(n)&&(0,J.jsx)(rn,{provider:n,organizationId:e.organizationId,onSuccess:e.onSuccess}),t[12]=e.onSuccess,t[13]=e.organizationId,t[14]=n,t[15]=y):y=t[15];let b;t[16]!==e.onSuccess||t[17]!==e.organizationId||t[18]!==n?(b=n===`mongodb`&&(0,J.jsx)(yn,{organizationId:e.organizationId,onSuccess:e.onSuccess}),t[16]=e.onSuccess,t[17]=e.organizationId,t[18]=n,t[19]=b):b=t[19];let x;t[20]!==e.onSuccess||t[21]!==e.organizationId||t[22]!==n?(x=(n===`ga`||n===`bigquery`)&&(0,J.jsx)(Wt,{provider:n,organizationId:e.organizationId,onSuccess:e.onSuccess}),t[20]=e.onSuccess,t[21]=e.organizationId,t[22]=n,t[23]=x):x=t[23];let S;t[24]!==e.onSuccess||t[25]!==e.organizationId||t[26]!==n?(S=n===`amplitude`&&(0,J.jsx)(vt,{organizationId:e.organizationId,onSuccess:e.onSuccess}),t[24]=e.onSuccess,t[25]=e.organizationId,t[26]=n,t[27]=S):S=t[27];let C;t[28]!==e.onSuccess||t[29]!==e.organizationId||t[30]!==n?(C=n===`laminar`&&(0,J.jsx)(un,{organizationId:e.organizationId,onSuccess:e.onSuccess}),t[28]=e.onSuccess,t[29]=e.organizationId,t[30]=n,t[31]=C):C=t[31];let w;t[32]!==e.onSuccess||t[33]!==e.organizationId||t[34]!==n?(w=n===`aws_athena_connector`&&(0,J.jsx)(bt,{organizationId:e.organizationId,onSuccess:e.onSuccess}),t[32]=e.onSuccess,t[33]=e.organizationId,t[34]=n,t[35]=w):w=t[35];let T;t[36]!==e.onSuccess||t[37]!==e.organizationId||t[38]!==n?(T=n===`mixpanel`&&(0,J.jsx)(hn,{organizationId:e.organizationId,onSuccess:e.onSuccess}),t[36]=e.onSuccess,t[37]=e.organizationId,t[38]=n,t[39]=T):T=t[39];let E;t[40]!==e.onSuccess||t[41]!==e.organizationId||t[42]!==n?(E=n===`sentry`&&(0,J.jsx)(Tn,{organizationId:e.organizationId,onSuccess:e.onSuccess}),t[40]=e.onSuccess,t[41]=e.organizationId,t[42]=n,t[43]=E):E=t[43];let D;t[44]!==e.onSuccess||t[45]!==e.organizationId||t[46]!==n?(D=n===`posthog`&&(0,J.jsx)(Sn,{organizationId:e.organizationId,onSuccess:e.onSuccess}),t[44]=e.onSuccess,t[45]=e.organizationId,t[46]=n,t[47]=D):D=t[47];let O;t[48]!==e.onSuccess||t[49]!==e.organizationId||t[50]!==n?(O=n===`github`&&(0,J.jsx)(sn,{organizationId:e.organizationId,onSuccess:e.onSuccess}),t[48]=e.onSuccess,t[49]=e.organizationId,t[50]=n,t[51]=O):O=t[51];let k;return t[52]!==c||t[53]!==b||t[54]!==x||t[55]!==S||t[56]!==C||t[57]!==w||t[58]!==T||t[59]!==E||t[60]!==D||t[61]!==O||t[62]!==p||t[63]!==_||t[64]!==y?(k=(0,J.jsxs)(`div`,{className:c,children:[p,_,y,b,x,S,C,w,T,E,D,O]}),t[52]=c,t[53]=b,t[54]=x,t[55]=S,t[56]=C,t[57]=w,t[58]=T,t[59]=E,t[60]=D,t[61]=O,t[62]=p,t[63]=_,t[64]=y,t[65]=k):k=t[65],k}function On(e){return(0,J.jsx)(_,{value:e.value,children:(0,J.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,J.jsx)(e.icon,{className:`h-4 w-4`}),(0,J.jsx)(`span`,{children:e.label})]})},e.value)}export{Z as a,st as i,at as n,Ee as o,ct as r,Dn as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{i as e,n as t,t as n}from"./jsx-runtime-DG_AJzB_.js";import{t as r}from"./link-Cgvqhh5w.js";import{t as i}from"./compiler-runtime-DCc3R3Xn.js";import{a,o}from"./api-base-url-DIb6qukm.js";import{n as s,r as c,t as l}from"./createReactComponent-_L2mp4Ui.js";import{t as u}from"./utils-C8DGLIgm.js";import{t as d}from"./IconCheck-Gc24xPT2.js";import{t as f}from"./theme-toggle-b9r_T-hF.js";import{t as p}from"./IconX-BQkA009b.js";import{a as m,n as h,o as g}from"./app-routes-DdRvA1bK.js";import{t as _}from"./api-client-w1GRwBWy.js";import{T as v}from"./index-Dh_88m70.js";import{t as y}from"./input-DZ9QHu2b.js";import{t as b}from"./label-CWOhoN_L.js";import{a as x,n as S,o as C,r as w,t as T}from"./card-Bsy6azfK.js";import{a as E,i as D,o as O,r as k,s as A,t as ee}from"./xstate-react.esm-BlF76DuP.js";var j=l(`outline`,`key`,`Key`,[[`path`,{d:`M16.555 3.843l3.602 3.602a2.877 2.877 0 0 1 0 4.069l-2.643 2.643a2.877 2.877 0 0 1 -4.069 0l-.301 -.301l-6.558 6.558a2 2 0 0 1 -1.239 .578l-.175 .008h-1.172a1 1 0 0 1 -.993 -.883l-.007 -.117v-1.172a2 2 0 0 1 .467 -1.284l.119 -.13l.414 -.414h2v-2h2v-2l2.144 -2.144l-.301 -.301a2.877 2.877 0 0 1 0 -4.069l2.643 -2.643a2.877 2.877 0 0 1 4.069 0`,key:`svg-0`}],[`path`,{d:`M15 9h.01`,key:`svg-1`}]]),M=l(`outline`,`login-2`,`Login2`,[[`path`,{d:`M9 8v-2a2 2 0 0 1 2 -2h7a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-7a2 2 0 0 1 -2 -2v-2`,key:`svg-0`}],[`path`,{d:`M3 12h13l-3 -3`,key:`svg-1`}],[`path`,{d:`M13 15l3 -3`,key:`svg-2`}]]),N=l(`outline`,`shield-check`,`ShieldCheck`,[[`path`,{d:`M11.46 20.846a12 12 0 0 1 -7.96 -14.846a12 12 0 0 0 8.5 -3a12 12 0 0 0 8.5 3a12 12 0 0 1 -.09 7.06`,key:`svg-0`}],[`path`,{d:`M15 19l2 2l4 -4`,key:`svg-1`}]]),P=l(`outline`,`sparkles`,`Sparkles`,[[`path`,{d:`M16 18a2 2 0 0 1 2 2a2 2 0 0 1 2 -2a2 2 0 0 1 -2 -2a2 2 0 0 1 -2 2m0 -12a2 2 0 0 1 2 2a2 2 0 0 1 2 -2a2 2 0 0 1 -2 -2a2 2 0 0 1 -2 2m-7 12a6 6 0 0 1 6 -6a6 6 0 0 1 -6 -6a6 6 0 0 1 -6 6a6 6 0 0 1 6 6`,key:`svg-0`}]]),F=l(`outline`,`terminal-2`,`Terminal2`,[[`path`,{d:`M8 9l3 3l-3 3`,key:`svg-0`}],[`path`,{d:`M13 15l3 0`,key:`svg-1`}],[`path`,{d:`M3 6a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2l0 -12`,key:`svg-2`}]]),I=i(),L=e(t(),1),R=_(),z=`The device code could not be verified. Try again.`,B=`The device request could not be completed. Try again.`;function V(){return{activeUserCode:null,decisionAction:null,error:null,inputCode:``,navigation:null,nextNavigationId:1,result:null,session:{kind:`pending`}}}function H(e){return{...V(),nextNavigationId:e.nextNavigationId}}function U(e,t,n){return{navigation:{id:e.nextNavigationId,phase:`pending`,replace:n,userCode:t},nextNavigationId:e.nextNavigationId+1}}var W=A(async({input:e})=>{if(!e.userCode)return{kind:`error`,message:`Enter the code shown in your terminal to continue.`};try{let t=await R.api.device.verify.$get({query:{user_code:e.userCode}});if(!t.ok)return{kind:`error`,message:K(await t.json().catch(()=>null),z)};let n=await t.json();return{kind:`verified`,status:n.status,userCode:n.userCode}}catch(e){return console.error(`[device-auth] failed to verify device code`,{errorName:Y(e)}),{kind:`error`,message:z}}}),te=A(async({input:e})=>{if(!e.userCode)return{kind:`error`,message:`The device request could not be completed. Try again.`};try{let t=await(e.action===`approve`?R.api.device.approve.$post:R.api.device.deny.$post)({form:{user_code:e.userCode}});if(!t.ok)return{kind:`error`,message:K(await t.json().catch(()=>null),B)};let n=await t.json();return{kind:`success`,message:n.message,title:n.title,tone:e.action===`approve`?`success`:`error`}}catch(t){return console.error(`[device-auth] failed to submit device decision`,{action:e.action,errorName:Y(t)}),{kind:`error`,message:B}}}),ne=E({actions:{resetToEntry:O(({context:e})=>H(e)),syncRouteToVerification:O(({event:e})=>(D(e,`deviceAuth/routeSynced`),e.userCode===null?{}:{inputCode:e.userCode,activeUserCode:e.userCode,error:null,result:null,decisionAction:null,navigation:null})),setInputCode:O(({event:e})=>(D(e,`deviceAuth/inputChanged`),{inputCode:e.value,error:null})),stageVerificationFromInput:O(({context:e})=>{let t=G(e.inputCode);return t===null?{}:{inputCode:t,activeUserCode:t,error:null,result:null,decisionAction:null,...U(e,t,!1)}}),setMissingCodeError:O({error:()=>`Enter the code shown in your terminal to continue.`}),syncSession:O(({event:e})=>(D(e,`deviceAuth/sessionSynced`),{session:e.session,error:null})),queueClearCodeNavigation:O(({context:e})=>{let t=H(e);return{...t,...U(t,null,!1)}}),stageApproveDecision:O({decisionAction:()=>`approve`,error:()=>null}),stageDenyDecision:O({decisionAction:()=>`deny`,error:()=>null}),markNavigationRunning:O(({context:e,event:t})=>(D(t,`deviceAuth/navigationStarted`),e.navigation===null||e.navigation.id!==t.id?{}:{navigation:{...e.navigation,phase:`running`}})),completeNavigation:O(({context:e,event:t})=>(D(t,`deviceAuth/navigationCompleted`),e.navigation===null||e.navigation.id!==t.id?{}:{navigation:null})),failNavigation:O(({context:e,event:t})=>(D(t,`deviceAuth/navigationFailed`),e.navigation===null||e.navigation.id!==t.id?{}:{navigation:null,error:t.message}))},actors:{verifyCode:W,submitDecision:te},guards:{routeCleared:({event:e})=>e.type===`deviceAuth/routeSynced`&&e.userCode===null,routeChanged:({context:e,event:t})=>t.type===`deviceAuth/routeSynced`&&t.userCode!==null&&t.userCode!==e.activeUserCode,hasNormalizedInputCode:({context:e})=>G(e.inputCode)!==null,sessionSignedIn:({event:e})=>e.type===`deviceAuth/sessionSynced`&&e.session.kind===`signedIn`,sessionSignedOut:({event:e})=>e.type===`deviceAuth/sessionSynced`&&e.session.kind===`signedOut`},types:{}}).createMachine({context:V(),id:`deviceAuth`,initial:`entry`,on:{"deviceAuth/routeSynced":[{guard:`routeCleared`,target:`.entry`,actions:`resetToEntry`},{guard:`routeChanged`,target:`.verifying`,actions:`syncRouteToVerification`}],"deviceAuth/navigationStarted":{actions:`markNavigationRunning`},"deviceAuth/navigationCompleted":{actions:`completeNavigation`},"deviceAuth/navigationFailed":{actions:`failNavigation`}},states:{entry:{on:{"deviceAuth/inputChanged":{actions:`setInputCode`},"deviceAuth/submit":[{guard:`hasNormalizedInputCode`,target:`verifying`,actions:`stageVerificationFromInput`},{actions:`setMissingCodeError`}]}},verifying:{invoke:{src:`verifyCode`,input:({context:e})=>({userCode:e.activeUserCode}),onDone:[{guard:({event:e})=>se(e.output),target:`entry`,actions:O(({context:e,event:t})=>({inputCode:e.activeUserCode??e.inputCode,error:ue(t.output),result:null,decisionAction:null}))},{guard:({event:e})=>ce(e.output),target:`pending`,actions:O(({context:e,event:t})=>J({context:e,output:t.output,result:null}))},{guard:({event:e})=>le(e.output),target:`result`,actions:O(({context:e,event:t})=>J({context:e,output:t.output,result:{title:`Device Approved`,message:`Return to your terminal to continue. You can close this tab.`,tone:`success`}}))},{target:`result`,actions:O(({context:e,event:t})=>J({context:e,output:t.output,result:{title:`Device Denied`,message:`This device code has already been denied. Start onequery auth login again if you need a new code.`,tone:`error`}}))}]}},pending:{initial:`sessionCheck`,on:{"deviceAuth/sessionSynced":[{guard:`sessionSignedIn`,target:`.review`,actions:`syncSession`},{guard:`sessionSignedOut`,target:`.signInRequired`,actions:`syncSession`},{target:`.sessionCheck`,actions:`syncSession`}],"deviceAuth/useDifferentCode":{target:`#deviceAuth.entry`,actions:`queueClearCodeNavigation`}},states:{sessionCheck:{},signInRequired:{},review:{on:{"deviceAuth/approve":{target:`submittingDecision`,actions:`stageApproveDecision`},"deviceAuth/deny":{target:`submittingDecision`,actions:`stageDenyDecision`}}},submittingDecision:{invoke:{src:`submitDecision`,input:({context:e})=>({action:q(e),userCode:e.activeUserCode}),onDone:[{guard:({event:e})=>pe(e.output),target:`#deviceAuth.entry`,actions:O(({context:e,event:t})=>({inputCode:e.activeUserCode??``,error:me(t.output),result:null,decisionAction:null}))},{target:`#deviceAuth.result`,actions:O(({event:e})=>({error:null,result:he(e.output),decisionAction:null}))}]}}}},result:{on:{"deviceAuth/useDifferentCode":{target:`entry`,actions:`queueClearCodeNavigation`}}}}});function re(e){return e.matches(`entry`)?`entry`:e.matches(`verifying`)?`verifying`:e.matches({pending:`sessionCheck`})?`sessionCheck`:e.matches({pending:`signInRequired`})?`signInRequired`:e.matches({pending:`review`})||e.matches({pending:`submittingDecision`})?`review`:`result`}function ie(e){return e.context.session.kind===`signedIn`?e.context.session.email:null}function G(e){return v(e)??null}function ae(e){return e.isSessionPending?{kind:`pending`}:e.email?{email:e.email,kind:`signedIn`}:{kind:`signedOut`}}function oe(e){return`Couldn't update the device URL. Try the same action again.`}function K(e,t){return e&&`error`in e,t}function q(e){if(e.decisionAction===null)throw Error(`Decision action is required before submitting.`);return e.decisionAction}function J(e){let t=de(e.output,e.context.activeUserCode);return{activeUserCode:t,decisionAction:null,error:null,inputCode:t??e.context.inputCode,result:e.result,...fe(e.context.activeUserCode,e.output)&&t!==null?U(e.context,t,!0):{navigation:null,nextNavigationId:e.context.nextNavigationId}}}function se(e){return e.kind===`error`}function ce(e){return e.kind===`verified`&&e.status===`pending`}function le(e){return e.kind===`verified`&&e.status===`approved`}function ue(e){return e.kind===`error`?e.message:`The device code could not be verified. Try again.`}function de(e,t){return e.kind===`verified`?e.userCode:t}function fe(e,t){return t.kind===`verified`&&t.userCode!==e}function pe(e){return e.kind===`error`}function me(e){return e.kind===`error`?e.message:`The device request could not be completed. Try again.`}function he(e){return e.kind===`success`?{message:e.message,title:e.title,tone:e.tone}:{message:e.message,title:`Device Request Failed`,tone:`error`}}function Y(e){return e instanceof Error?e.name:`unknown`}var X=n();function ge(e){return e.panelView===`entry`?{badge:`Enter code`,description:`Paste the code from your terminal to verify the device login request before approving access.`,icon:F,title:`Authorize OneQuery CLI`,tone:`primary`}:e.panelView===`verifying`?{badge:`Checking request`,description:`We’re validating the code from your terminal and loading the next step in the authorization flow.`,icon:j,title:`Checking device code`,tone:`neutral`}:e.panelView===`sessionCheck`?{badge:`Checking session`,description:`We’re checking whether you already have an active OneQuery session for this device request.`,icon:M,title:`Confirming your browser session`,tone:`neutral`}:e.panelView===`signInRequired`?{badge:`Sign in required`,description:`Sign in with the account that should own this CLI session.`,icon:M,title:`Sign in to approve this device`,tone:`primary`}:e.panelView===`review`?{badge:`Review request`,description:`Review the request and decide whether to authorize this CLI sign-in.`,icon:N,title:`Approve device login`,tone:`primary`}:e.result?.tone===`success`?{badge:`Approved`,description:e.result.message,icon:d,title:e.result.title,tone:`success`}:{badge:`Denied`,description:e.result?.message??`This device request has been denied or could not be completed.`,icon:p,title:e.result?.title??`Device Denied`,tone:`error`}}function _e(e){switch(e){case`primary`:return`border-primary/15 bg-primary/5 text-primary`;case`success`:return`border-primary/15 bg-primary/5 text-primary`;case`error`:return`border-destructive/15 bg-destructive/5 text-destructive`;case`neutral`:return`border-border bg-muted/40 text-foreground`}}function ve(e){switch(e){case`primary`:return`bg-primary/10 text-primary`;case`success`:return`bg-primary/10 text-primary`;case`error`:return`bg-destructive/10 text-destructive`;case`neutral`:return`bg-background text-foreground`}}function Z(e){let t=(0,I.c)(10),{label:n,value:r,emphasis:i}=e,a=i===`error`?`border-destructive/15 bg-destructive/5`:`border-primary/15 bg-primary/5`,o;t[0]===a?o=t[1]:(o=u(`rounded-2xl border p-4`,a),t[0]=a,t[1]=o);let s;t[2]===n?s=t[3]:(s=(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:n}),t[2]=n,t[3]=s);let c;t[4]===r?c=t[5]:(c=(0,X.jsx)(`p`,{className:`mt-2 font-mono text-xl font-semibold tracking-[0.32em] text-foreground sm:text-2xl`,children:r}),t[4]=r,t[5]=c);let l;return t[6]!==o||t[7]!==s||t[8]!==c?(l=(0,X.jsxs)(`div`,{className:o,children:[s,c]}),t[6]=o,t[7]=s,t[8]=c,t[9]=l):l=t[9],l}function ye(e){let t=(0,I.c)(10),{label:n,value:r,tone:i}=e,a=i===`error`?`border-destructive/15 bg-destructive/5`:`border-border bg-muted/30`,o;t[0]===a?o=t[1]:(o=u(`rounded-2xl border p-4`,a),t[0]=a,t[1]=o);let s;t[2]===n?s=t[3]:(s=(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:n}),t[2]=n,t[3]=s);let c;t[4]===r?c=t[5]:(c=(0,X.jsx)(`p`,{className:`mt-2 font-medium text-foreground`,children:r}),t[4]=r,t[5]=c);let l;return t[6]!==o||t[7]!==s||t[8]!==c?(l=(0,X.jsxs)(`div`,{className:o,children:[s,c]}),t[6]=o,t[7]=s,t[8]=c,t[9]=l):l=t[9],l}var Q=a(h);function be(){let e=(0,I.c)(46),t=o(),{user_code:n}=Q.useSearch(),{auth:r}=Q.useRouteContext(),i;e[0]===n?i=e[1]:(i=v(n??null)??null,e[0]=n,e[1]=i);let a=i,s=ee(ne),c=k(s,re),l=k(s,$),u=k(s,De),d=k(s,Ee),f=k(s,Te),p=k(s,ie),m=k(s,we),_=k(s,Ce),y=k(s,Se),b=k(s,xe),x=u??a,S;e[2]===x?S=e[3]:(S=g(x),e[2]=x,e[3]=S);let C=S,w;e[4]!==c||e[5]!==f?(w=ge({panelView:c,result:f}),e[4]=c,e[5]=f,e[6]=w):w=e[6];let T=w,E,D;e[7]!==s||e[8]!==a?(E=()=>{s.send({type:`deviceAuth/routeSynced`,userCode:a})},D=[s,a],e[7]=s,e[8]=a,e[9]=E,e[10]=D):(E=e[9],D=e[10]),(0,L.useEffect)(E,D);let O;e[11]!==s||e[12]!==r.session?.user.email||e[13]!==y?(O=()=>{y&&s.send({session:ae({isSessionPending:!1,email:r.session?.user.email??null}),type:`deviceAuth/sessionSynced`})},e[11]=s,e[12]=r.session?.user.email,e[13]=y,e[14]=O):O=e[14];let A=r.session?.user.email,j;e[15]!==s||e[16]!==y||e[17]!==A?(j=[s,A,y],e[15]=s,e[16]=y,e[17]=A,e[18]=j):j=e[18],(0,L.useEffect)(O,j);let M,N;e[19]!==s||e[20]!==t||e[21]!==m?(M=()=>{m===null||m.phase!==`pending`||(s.send({id:m.id,type:`deviceAuth/navigationStarted`}),t({replace:m.replace,search:m.userCode===null?{}:{user_code:m.userCode},to:h}).then(()=>{s.send({id:m.id,type:`deviceAuth/navigationCompleted`})}).catch(e=>{console.error(`[device-auth] failed to sync device route`,{errorName:Oe(e),navigationId:m.id,replace:m.replace}),s.send({id:m.id,message:oe(e),type:`deviceAuth/navigationFailed`})}))},N=[s,t,m],e[19]=s,e[20]=t,e[21]=m,e[22]=M,e[23]=N):(M=e[22],N=e[23]),(0,L.useEffect)(M,N);let P=b&&_===`approve`,F=b&&_===`deny`,R,z,B,V,H;e[24]===s?(R=e[25],z=e[26],B=e[27],V=e[28],H=e[29]):(R=()=>{s.send({type:`deviceAuth/approve`})},z=()=>{s.send({type:`deviceAuth/deny`})},B=e=>{s.send({type:`deviceAuth/inputChanged`,value:e.toUpperCase()})},V=()=>{s.send({type:`deviceAuth/submit`})},H=()=>{s.send({type:`deviceAuth/useDifferentCode`})},e[24]=s,e[25]=R,e[26]=z,e[27]=B,e[28]=V,e[29]=H);let U;return e[30]!==u||e[31]!==d||e[32]!==l||e[33]!==T||e[34]!==c||e[35]!==f||e[36]!==C||e[37]!==p||e[38]!==P||e[39]!==F||e[40]!==R||e[41]!==z||e[42]!==B||e[43]!==V||e[44]!==H?(U={activeUserCode:u,errorMessage:d,inputCode:l,isSubmittingApprove:P,isSubmittingDeny:F,onApprove:R,onDeny:z,onInputChange:B,onSubmit:V,onUseDifferentCode:H,panelMeta:T,panelView:c,result:f,resumePath:C,sessionEmail:p},e[30]=u,e[31]=d,e[32]=l,e[33]=T,e[34]=c,e[35]=f,e[36]=C,e[37]=p,e[38]=P,e[39]=F,e[40]=R,e[41]=z,e[42]=B,e[43]=V,e[44]=H,e[45]=U):U=e[45],U}function xe(e){return e.matches({pending:`submittingDecision`})}function Se(e){return e.matches(`pending`)}function Ce(e){return e.context.decisionAction}function we(e){return e.context.navigation}function Te(e){return e.context.result}function Ee(e){return e.context.error}function De(e){return e.context.activeUserCode}function $(e){return e.context.inputCode}function Oe(e){return e instanceof Error?e.name:`unknown`}function ke(e){let t=(0,I.c)(33),{controller:n}=e,i;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(i=(0,X.jsxs)(`div`,{"aria-hidden":!0,className:`pointer-events-none absolute inset-0`,children:[(0,X.jsx)(`div`,{className:`absolute left-[-7rem] top-[-8rem] h-64 w-64 rounded-full bg-primary/10 blur-3xl`}),(0,X.jsx)(`div`,{className:`absolute right-[-8rem] top-20 h-80 w-80 rounded-full bg-muted blur-3xl`}),(0,X.jsx)(`div`,{className:`absolute inset-0 bg-[linear-gradient(to_right,rgba(127,127,127,0.06)_1px,transparent_1px),linear-gradient(to_bottom,rgba(127,127,127,0.06)_1px,transparent_1px)] bg-[size:4.5rem_4.5rem] [mask-image:linear-gradient(to_bottom,white,rgba(255,255,255,0.3))]`})]}),t[0]=i):i=t[0];let a;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,X.jsx)(`header`,{className:`relative z-10 border-b border-border/60 bg-background/80 backdrop-blur`,children:(0,X.jsxs)(`div`,{className:`mx-auto flex h-16 w-full max-w-6xl items-center justify-between px-6`,children:[(0,X.jsxs)(r,{to:`/`,className:`flex items-center gap-3`,children:[(0,X.jsx)(`img`,{src:`/onequery.svg`,alt:`OneQuery`,className:`h-9 w-9 rounded-lg`}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`p`,{className:`font-semibold text-lg leading-none`,children:`OneQuery`}),(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Device authorization`})]})]}),(0,X.jsx)(f,{})]})}),t[1]=a):a=t[1];let o;t[2]===n.panelMeta.tone?o=t[3]:(o=u(`inline-flex items-center gap-2 rounded-full border px-3 py-1 text-xs font-medium uppercase tracking-[0.18em]`,_e(n.panelMeta.tone)),t[2]=n.panelMeta.tone,t[3]=o);let s;t[4]===n.panelMeta.tone?s=t[5]:(s=u(`flex h-6 w-6 items-center justify-center rounded-full`,ve(n.panelMeta.tone)),t[4]=n.panelMeta.tone,t[5]=s);let c;t[6]===n.panelMeta.icon?c=t[7]:(c=(0,X.jsx)(n.panelMeta.icon,{size:14,stroke:1.9}),t[6]=n.panelMeta.icon,t[7]=c);let l;t[8]!==s||t[9]!==c?(l=(0,X.jsx)(`div`,{className:s,children:c}),t[8]=s,t[9]=c,t[10]=l):l=t[10];let d;t[11]!==n.panelMeta.badge||t[12]!==o||t[13]!==l?(d=(0,X.jsx)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:(0,X.jsxs)(`div`,{className:o,children:[l,n.panelMeta.badge]})}),t[11]=n.panelMeta.badge,t[12]=o,t[13]=l,t[14]=d):d=t[14];let p;t[15]===n.panelMeta.title?p=t[16]:(p=(0,X.jsx)(C,{className:`mt-4 text-2xl`,children:n.panelMeta.title}),t[15]=n.panelMeta.title,t[16]=p);let m;t[17]===n.panelMeta.description?m=t[18]:(m=(0,X.jsx)(w,{className:`max-w-2xl text-base leading-7`,children:n.panelMeta.description}),t[17]=n.panelMeta.description,t[18]=m);let h;t[19]!==d||t[20]!==p||t[21]!==m?(h=(0,X.jsxs)(x,{className:`border-b border-border/60 pb-5`,children:[d,p,m]}),t[19]=d,t[20]=p,t[21]=m,t[22]=h):h=t[22];let g;t[23]===n.errorMessage?g=t[24]:(g=n.errorMessage?(0,X.jsx)(`div`,{className:`rounded-xl border border-destructive/20 bg-destructive/5 px-3 py-2 text-sm text-destructive`,children:n.errorMessage}):null,t[23]=n.errorMessage,t[24]=g);let _;t[25]===n?_=t[26]:(_=Ae(n),t[25]=n,t[26]=_);let v;t[27]!==g||t[28]!==_?(v=(0,X.jsxs)(S,{className:`space-y-5 pt-6`,children:[g,_]}),t[27]=g,t[28]=_,t[29]=v):v=t[29];let y;return t[30]!==h||t[31]!==v?(y=(0,X.jsxs)(`div`,{className:`relative min-h-screen overflow-hidden bg-background`,children:[i,a,(0,X.jsx)(`main`,{className:`relative z-10 flex flex-1 items-center justify-center px-6 py-10 lg:min-h-[calc(100vh-4rem)] lg:py-14`,children:(0,X.jsx)(`section`,{className:`w-full max-w-3xl`,children:(0,X.jsx)(`div`,{className:`rounded-[2rem] border border-border/70 bg-background/75 p-2 shadow-2xl shadow-foreground/5 backdrop-blur`,children:(0,X.jsxs)(T,{className:`w-full border-0 bg-card/95 shadow-none ring-0`,children:[h,v]})})})})]}),t[30]=h,t[31]=v,t[32]=y):y=t[32],y}function Ae(e){switch(e.panelView){case`entry`:return(0,X.jsxs)(`form`,{onSubmit:t=>{t.preventDefault(),e.onSubmit()},className:`space-y-5`,children:[(0,X.jsxs)(`div`,{className:`space-y-2`,children:[(0,X.jsx)(b,{htmlFor:`user-code`,children:`Device code`}),(0,X.jsx)(y,{id:`user-code`,value:e.inputCode,onChange:t=>e.onInputChange(t.target.value),placeholder:`ABCD1234`,autoCapitalize:`characters`,autoComplete:`one-time-code`,required:!0,className:`h-11 font-mono text-base tracking-[0.25em] uppercase`}),(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Enter the 8-character code shown in your terminal.`})]}),(0,X.jsxs)(`div`,{className:`space-y-3`,children:[(0,X.jsx)(s,{type:`submit`,className:`h-11 w-full`,children:`Continue`}),(0,X.jsx)(`p`,{className:`text-center text-sm text-muted-foreground`,children:`You’ll review the request before any access is granted.`})]})]});case`verifying`:return(0,X.jsxs)(`div`,{className:`space-y-4`,children:[(0,X.jsx)(Z,{label:`Verifying code`,value:e.activeUserCode??e.inputCode,emphasis:`primary`}),(0,X.jsx)(`div`,{className:`rounded-2xl border bg-muted/40 p-4`,children:(0,X.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,X.jsx)(`div`,{className:`flex h-9 w-9 items-center justify-center rounded-full bg-primary/10 text-primary`,children:(0,X.jsx)(P,{size:18,stroke:1.75})}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`p`,{className:`font-medium`,children:`Checking request details`}),(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`We’re validating that this device code is still active and can be approved.`})]})]})})]});case`sessionCheck`:return(0,X.jsxs)(`div`,{className:`space-y-4`,children:[(0,X.jsx)(Z,{label:`Ready to approve`,value:e.activeUserCode??``,emphasis:`primary`}),(0,X.jsx)(`div`,{className:`rounded-2xl border bg-muted/40 p-4`,children:(0,X.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,X.jsx)(`div`,{className:`flex h-9 w-9 items-center justify-center rounded-full bg-muted`,children:(0,X.jsx)(M,{size:18,stroke:1.75})}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`p`,{className:`font-medium`,children:`Checking your browser session`}),(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Once we know who you are, you’ll be able to approve or deny this request.`})]})]})})]});case`signInRequired`:return(0,X.jsxs)(`div`,{className:`space-y-4`,children:[(0,X.jsx)(Z,{label:`Device code`,value:e.activeUserCode??``,emphasis:`primary`}),(0,X.jsx)(r,{to:m,search:{redirect:e.resumePath},className:c({variant:`default`,size:`lg`,className:`h-11 w-full`}),children:`Sign in`}),(0,X.jsx)(s,{type:`button`,variant:`ghost`,size:`sm`,className:`mx-auto flex h-9 px-3 text-muted-foreground`,onClick:e.onUseDifferentCode,children:`Use a different code`})]});case`review`:return e.sessionEmail?(0,X.jsxs)(`div`,{className:`space-y-4`,children:[(0,X.jsx)(Z,{label:`Device code`,value:e.activeUserCode??``,emphasis:`primary`}),(0,X.jsx)(ye,{label:`Signed in as`,value:e.sessionEmail,tone:`neutral`}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-3 sm:flex-row`,children:[(0,X.jsx)(s,{type:`button`,variant:`outline`,size:`lg`,className:`h-11 flex-1`,onClick:e.onDeny,disabled:e.isSubmittingApprove||e.isSubmittingDeny,children:e.isSubmittingDeny?`Denying...`:`Deny`}),(0,X.jsx)(s,{type:`button`,size:`lg`,className:`h-11 flex-1`,onClick:e.onApprove,disabled:e.isSubmittingApprove||e.isSubmittingDeny,children:e.isSubmittingApprove?`Approving...`:`Approve`})]})]}):null;case`result`:return e.result?(0,X.jsx)(`div`,{className:`space-y-4`,children:(0,X.jsx)(Z,{label:e.result.tone===`success`?`Approved code`:`Resolved code`,value:e.activeUserCode??``,emphasis:e.result.tone})}):null}}function je(){let e=(0,I.c)(2),t=be(),n;return e[0]===t?n=e[1]:(n=(0,X.jsx)(ke,{controller:t}),e[0]=t,e[1]=n),n}function Me(){let e=(0,I.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,X.jsx)(je,{}),e[0]=t):t=e[0],t}var Ne=Me;export{Ne as component};
|