{"id":288,"date":"2025-10-05T11:20:26","date_gmt":"2025-10-05T09:20:26","guid":{"rendered":"https:\/\/blirtyapp.com\/?page_id=288"},"modified":"2025-10-05T19:44:35","modified_gmt":"2025-10-05T17:44:35","slug":"usuniecie-konta","status":"publish","type":"page","link":"https:\/\/blirtyapp.com\/index.php\/usuniecie-konta\/","title":{"rendered":"Usuni\u0119cie konta"},"content":{"rendered":"\n<div id=\"delete-root\" style=\"max-width:520px;margin:32px auto;padding:24px;border:1px solid #eee;border-radius:12px;font-family:system-ui, -apple-system, Segoe UI, Roboto;\">\n  <div id=\"step-phone\">\n    <label for=\"phone\" style=\"display:block;margin:8px 0 4px;\">Podaj numer telefonu u\u017cyty do tworzenia konta<\/label>\n    <div style=\"display:flex;gap:8px;align-items:center;\">\n      <input id=\"phone\" type=\"tel\" maxlength=\"9\" placeholder=\"123 456 789\" style=\"flex:1;padding:10px 12px;border:1px solid #ccc;border-radius:8px;\">\n      <button id=\"send-sms\" style=\"padding:10px 14px;border:0;background:#111;color:#fff;border-radius:8px;cursor:pointer;\">Wy\u015blij SMS<\/button>\n    <\/div>\n    <small style=\"color:#666;\"><b>+48<\/b> zostanie dodane automatycznie.<\/small>\n  <\/div>\n\n  <div id=\"step-code\" style=\"display:none;margin-top:16px;\">\n    <label for=\"code\" style=\"display:block;margin:8px 0 4px;\">Kod z SMS (6 cyfr)<\/label>\n    <div style=\"display:flex;gap:8px;align-items:center;\">\n      <input id=\"code\" type=\"text\" inputmode=\"numeric\" maxlength=\"6\" placeholder=\"123456\" style=\"flex:1;padding:10px 12px;border:1px solid #ccc;border-radius:8px;\">\n      <button id=\"verify\" style=\"padding:10px 14px;border:0;background:#111;color:#fff;border-radius:8px;cursor:pointer;\">Potwierd\u017a kod<\/button>\n    <\/div>\n  <\/div>\n\n  <div id=\"step-delete\" style=\"display:none;margin-top:16px;\">\n    <label for=\"reason\" style=\"display:block;margin:8px 0 4px;\">Pow\u00f3d (opcjonalnie)<\/label>\n    <select id=\"reason\" style=\"padding:10px 12px;border:1px solid #ccc;border-radius:8px;width:100%;\">\n      <option value=\"\">\u2013 wybierz \u2013<\/option>\n      <option value=\"user_request\">Chc\u0119 usun\u0105\u0107 konto<\/option>\n      <option value=\"privacy\">Prywatno\u015b\u0107<\/option>\n      <option value=\"no_matches\">Za ma\u0142o dopasowa\u0144<\/option>\n      <option value=\"other\">Inny pow\u00f3d<\/option>\n    <\/select>\n\n    <button id=\"delete\" style=\"margin-top:14px;padding:12px 16px;border:0;background:#d32f2f;color:#fff;border-radius:8px;cursor:pointer;width:100%;\">Usu\u0144 konto<\/button>\n  <\/div>\n\n  <div id=\"msg\" style=\"margin-top:12px;color:#333;\"><\/div>\n\n  <!-- Niewidoczny kontener reCAPTCHA (wymagany przez Firebase Phone Auth) -->\n  <div id=\"recaptcha-container\"><\/div>\n<\/div>\n\n<script type=\"module\">\n\nconst friendlyError = (err) => {\n    const code = err?.code || \"\";\n    switch (code) {\n      case \"auth\/invalid-phone-number\":\n        return \"Nieprawid\u0142owy numer telefonu. Sprawd\u017a format (np. +48XXXXXXXXX).\";\n      case \"auth\/missing-phone-number\":\n        return \"Podaj numer telefonu.\";\n      case \"auth\/quota-exceeded\":\n        return \"Przekroczono limit SMS. Spr\u00f3buj p\u00f3\u017aniej.\";\n      case \"auth\/too-many-requests\":\n        return \"Zbyt wiele pr\u00f3b. Spr\u00f3buj ponownie za chwil\u0119.\";\n      case \"auth\/captcha-check-failed\":\n      case \"auth\/captcha-check-expired\":\n        return \"Weryfikacja reCAPTCHA nie powiod\u0142a si\u0119. Od\u015bwie\u017c stron\u0119 i spr\u00f3buj ponownie.\";\n      case \"auth\/network-request-failed\":\n        return \"B\u0142\u0105d sieci. Sprawd\u017a po\u0142\u0105czenie internetowe.\";\n      case \"auth\/unauthorized-domain\":\n        return \"Domena nie jest autoryzowana w Firebase Authentication.\";\n      case \"auth\/invalid-verification-code\":\n        return \"Nieprawid\u0142owy kod SMS.\";\n      case \"auth\/code-expired\":\n        return \"Kod wygas\u0142. Wy\u015blij SMS ponownie.\";\n      default:\n        return `Nie uda\u0142o si\u0119 wykona\u0107 operacji. (${code || \"unknown\"})`;\n    }\n  };\n\n  \/\/ 1) Firebase SDK (modu\u0142owy v10)\n  import { initializeApp } from \"https:\/\/www.gstatic.com\/firebasejs\/10.13.2\/firebase-app.js\";\n  import { getAuth, RecaptchaVerifier, signInWithPhoneNumber, onAuthStateChanged, setPersistence, inMemoryPersistence } from \"https:\/\/www.gstatic.com\/firebasejs\/10.13.2\/firebase-auth.js\";\n  import { initializeAppCheck, ReCaptchaV3Provider } from \"https:\/\/www.gstatic.com\/firebasejs\/10.13.2\/firebase-app-check.js\";\n\n  \/\/ 2) KONFIGURACJA FIREBASE\n  const firebaseConfig = {\n  apiKey: \"AIzaSyAeDy-oSX1PSFNutZehacTve8QsccRALtA\",\n  authDomain: \"blirty-61e48.firebaseapp.com\",\n  projectId: \"blirty-61e48\",\n  storageBucket: \"blirty-61e48.firebasestorage.app\",\n  messagingSenderId: \"245368367879\",\n  appId: \"1:245368367879:web:5d5dededbf737e3bc573a2\",\n  measurementId: \"G-YRS8LXSK3V\"\n  };\n  const app   = initializeApp(firebaseConfig);\n  initializeAppCheck(app, {\n    provider: new ReCaptchaV3Provider(\"6LcdTd8rAAAAAII9d3Im3cV_vDN0zmw2Cmkks6P_\"),\n    isTokenAutoRefreshEnabled: true\n  });\n  const auth  = getAuth(app);\n  await setPersistence(auth, inMemoryPersistence);\n\n  \/\/ 3) UI helpers\n  const $ = (id) => document.getElementById(id);\n  const msg = (t, color=\"#333\") => { const m=$(\"msg\"); m.textContent=t; m.style.color=color; };\n\n  \/\/ 4) reCAPTCHA (niewidoczna)\n  let verifier = new RecaptchaVerifier(auth, \"recaptcha-container\", {\n    size: \"invisible\"\n  });\n\n  let confirmationResult = null;\n\n  const normalizePhone = (raw) => {\n    const digits = raw.replace(\/\\D\/g, \"\").slice(0, 9);\n    if (digits.length !== 9) return null;\n    return \"+48\" + digits;\n  };\n\n$(\"send-sms\").addEventListener(\"click\", async () => {\n  msg(\"Wysy\u0142am SMS\u2026\");\n  try {\n    const phone = normalizePhone($(\"phone\").value.trim());\n    if (!phone) { msg(\"Podaj 9 cyfr numeru telefonu.\", \"#d32f2f\"); return; }\n    if (!\/^\\+\\d{7,15}$\/.test(phone)) { msg(\"Nieprawid\u0142owy numer telefonu.\", \"#d32f2f\"); return; }\n\n    try { await verifier.clear(); } catch(e) {}\n    verifier = new RecaptchaVerifier(auth, \"recaptcha-container\", { size: \"invisible\" });\n\n    confirmationResult = await signInWithPhoneNumber(auth, phone, verifier);\n    $(\"step-code\").style.display = \"\";\n    msg(\"SMS wys\u0142any. Wpisz 6-cyfrowy kod.\");\n  } catch (e) {\n    console.error(e);\n    msg(friendlyError(e), \"#d32f2f\");\n  }\n});\n\n  $(\"verify\").addEventListener(\"click\", async () => {\n    const code = $(\"code\").value.trim();\n    if (code.length !== 6) { msg(\"Kod powinien mie\u0107 6 cyfr.\", \"#d32f2f\"); return; }\n\n    try {\n      await confirmationResult.confirm(code);\n      \/\/ onAuthStateChanged poni\u017cej poka\u017ce sekcj\u0119 usuwania\n    } catch (e) {\n      console.error(e);\n      msg(friendlyError(e), \"#d32f2f\");\n    }\n  });\n\nonAuthStateChanged(auth, async (user) => {\n  if (user) {\n    $(\"step-phone\").style.display = \"none\";\n    $(\"step-code\").style.display  = \"none\";\n    $(\"step-delete\").style.display = \"\";\n    window.__idToken = await user.getIdToken(true);\n    msg(\"Uwierzytelniono. Mo\u017cesz usun\u0105\u0107 konto.\");\n  }\n});\n\nconst REASON_LABELS = {\n  APP_NOT_COOL: \"Aplikacja nie podoba mi si\u0119\",\n  MET_SOMEONE_ON_BLIRTY: \"Pozna\u0142am\/em kogo\u015b na blirty\",\n  MET_SOMEONE_OUTSIDE: \"Pozna\u0142am\/em kogo\u015b poza aplikacj\u0105\",\n  DID_NOT_MEET_ANYONE: \"Nie uda\u0142o mi si\u0119 nikogo pozna\u0107\",\n  NEED_A_BREAK: \"Potrzebuj\u0119 przerwy\",\n  APP_HARD_TO_USE: \"Trudno\u015b\u0107 w obs\u0142udze aplikacji\",\n  TECHNICAL_ISSUES: \"Problemy techniczne\",\n  NONE_OF_THE_ABOVE: \"\u017badne z powy\u017cszych\"\n};\nconst reasonEl = document.getElementById(\"reason\");\nreasonEl.innerHTML =\n  `<option value=\"\">\u2013 wybierz \u2013<\/option>` +\n  Object.entries(REASON_LABELS)\n    .map(([key, label]) => `<option value=\"${key}\">${label}<\/option>`)\n    .join(\"\");\nconst reasonEnum = reasonEl.value || null;\n\n$(\"delete\").addEventListener(\"click\", async () => {\n  const token = window.__idToken;\n  if (!token) { msg(\"Brak uwierzytelnienia.\", \"#d32f2f\"); return; }\n\n  \/\/ wy\u015blij null je\u015bli puste lub nieznany klucz\n  const raw = reasonEl.value;\n  const reason = raw && Object.prototype.hasOwnProperty.call(REASON_LABELS, raw) ? raw : null;\n\n  msg(\"Usuwam konto\u2026\");\n\n  try {\n    const resp = await fetch(\"https:\/\/ktor-service-245368367879.europe-central2.run.app\/api\/delete\", {\n      method: \"POST\",\n      headers: {\n        \"Content-Type\": \"application\/json\",\n        \"Authorization\": \"Bearer \" + token\n      },\n      body: JSON.stringify({ reasonOfAccountDeletion: reason })\n    });\n\n    if (resp.ok) {\n      msg(\"Konto zosta\u0142o usuni\u0119te.\", \"#2e7d32\");\n    } else if (resp.status === 401) {\n      msg(\"Sesja wygas\u0142a \u2014 zaloguj si\u0119 ponownie.\", \"#d32f2f\");\n    } else {\n      msg(\"Nie uda\u0142o si\u0119 usun\u0105\u0107 konta. Spr\u00f3buj ponownie p\u00f3\u017aniej.\", \"#d32f2f\");\n    }\n  } catch (e) {\n    console.error(e);\n    msg(\"B\u0142\u0105d sieci. Spr\u00f3buj ponownie.\", \"#d32f2f\");\n  }\n});\n<\/script>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Podaj numer telefonu u\u017cyty do tworzenia konta Wy\u015blij SMS +48 zostanie dodane automatycznie. Kod z SMS (6 cyfr) Potwierd\u017a kod [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-288","page","type-page","status-publish","hentry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"admin-iPcaUszA","author_link":"https:\/\/blirtyapp.com\/index.php\/author\/admin-ipcausza\/"},"uagb_comment_info":0,"uagb_excerpt":"Podaj numer telefonu u\u017cyty do tworzenia konta Wy\u015blij SMS +48 zostanie dodane automatycznie. Kod z SMS (6 cyfr) Potwierd\u017a kod [&hellip;]","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/blirtyapp.com\/index.php\/wp-json\/wp\/v2\/pages\/288","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blirtyapp.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/blirtyapp.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/blirtyapp.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blirtyapp.com\/index.php\/wp-json\/wp\/v2\/comments?post=288"}],"version-history":[{"count":8,"href":"https:\/\/blirtyapp.com\/index.php\/wp-json\/wp\/v2\/pages\/288\/revisions"}],"predecessor-version":[{"id":309,"href":"https:\/\/blirtyapp.com\/index.php\/wp-json\/wp\/v2\/pages\/288\/revisions\/309"}],"wp:attachment":[{"href":"https:\/\/blirtyapp.com\/index.php\/wp-json\/wp\/v2\/media?parent=288"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}