Skip to content

build(deps): bump firebase-admin from 13.10.0 to 14.0.0 in /functions#4

Closed
dependabot[bot] wants to merge 1 commit into
masterfrom
dependabot/npm_and_yarn/functions/firebase-admin-14.0.0
Closed

build(deps): bump firebase-admin from 13.10.0 to 14.0.0 in /functions#4
dependabot[bot] wants to merge 1 commit into
masterfrom
dependabot/npm_and_yarn/functions/firebase-admin-14.0.0

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Jun 14, 2026

Copy link
Copy Markdown

Bumps firebase-admin from 13.10.0 to 14.0.0.

Release notes

Sourced from firebase-admin's releases.

Firebase Admin Node.js SDK v14.0.0

Breaking Changes

  • change(instance-id): Remove deprecated Instance ID service (#3166)
  • change: Remove Deprecated Legacy Namespace Support (#3164)
  • change(fcm): Drop legacy messaging types (#3157)
  • change: Drop support for Node.js 18 and 20 (v14) (#3138)

New Features

  • feat(auth): Enhance emulator support across authentication classes (#3080)
  • feat(core): Error Handling Revamp (v14) (#3140)

Bug Fixes

  • fix(functions): store CLOUD_TASKS_EMULATOR_HOST at construction time (#3167)
  • fix(auth): Decouple CreateRequest interface from UpdateRequest (#3165)
  • fix(auth): skip project config name assertion when using the Auth emulator (#3142)
  • fix(api-request): replace deprecated url.parse() with WHATWG URL (#3124)
  • fix: resolve failing getApplicationDefault unit tests in gcloud SDK environment (#3163)
  • fix(fcm): Map topic subscription RESOURCE_EXHAUSTED server code to new TOPICS_SUBSCRIPTION_RATE_EXCEEDED SDK error code (#3148)

Miscellaneous

  • [chore] Release 14.0.0 (#3171)
  • build: upgrade compilation target and lib to ES2021 (#3172)
  • build(deps): bump @​tootallnate/once from 2.0.0 to 2.0.1 (#3160)
  • build(deps): bump fast-uri from 3.1.0 to 3.1.2 (#3168)
  • build(deps): bump fast-xml-builder from 1.1.5 to 1.2.0 (#3169)
  • chore: fixed api docs typos and omissions (#3170)
  • build(deps-dev): bump eslint from 10.3.0 to 10.4.1 (#3155)
  • Merge pull request #3162 from firebase/v14
  • chore(deps): bump jwks-rsa to 4.0.1 (#3125)
  • fix package.json
  • chore: Drop send-tweet and upgrade GitHub Actions (#3158)
  • chore: upgrade nock to v14 and fix api-request unit tests (#3153)
  • chore: bump eslint to 10.3.0 and migrate to flat config (#3150)
  • build(deps-dev): bump sinon from 18.0.1 to 22.0.0 (#3149)
  • chore(deps): bump jwks-rsa to 4.0.1 (#3125)
  • chore: Upgrade dependencies for v14 (#3137)
Commits
  • 4754a2f [chore] Release 14.0.0 (#3171)
  • 25285ee build: upgrade compilation target and lib to ES2021 (#3172)
  • d96319e build(deps): bump @​tootallnate/once from 2.0.0 to 2.0.1 (#3160)
  • 0c34e89 build(deps): bump fast-uri from 3.1.0 to 3.1.2 (#3168)
  • 52d02f7 build(deps): bump fast-xml-builder from 1.1.5 to 1.2.0 (#3169)
  • dc788b2 chore: fixed api docs typos and omissions (#3170)
  • a39e897 build(deps-dev): bump eslint from 10.3.0 to 10.4.1 (#3155)
  • ce6c4dc Merge pull request #3162 from firebase/v14
  • fe71c55 fix(functions): store CLOUD_TASKS_EMULATOR_HOST at construction time (#3167)
  • 659c056 change(instance-id): Remove deprecated Instance ID service (#3166)
  • Additional commits viewable in compare view

@dependabot @github

dependabot Bot commented on behalf of github Jun 14, 2026

Copy link
Copy Markdown
Author

Labels

The following labels could not be found: dependencies, functions. Please create them before Dependabot can add them to a pull request.

Please fix the above issues or remove invalid values from dependabot.yml.

@dependabot dependabot Bot changed the title Bump firebase-admin from 12.7.0 to 14.0.0 in /functions build(deps): Bump firebase-admin from 12.7.0 to 14.0.0 in /functions Jun 14, 2026
@dependabot dependabot Bot force-pushed the dependabot/npm_and_yarn/functions/firebase-admin-14.0.0 branch 3 times, most recently from 41e753e to 83c182e Compare June 14, 2026 17:32
@dependabot dependabot Bot changed the title build(deps): Bump firebase-admin from 12.7.0 to 14.0.0 in /functions build(deps): Bump firebase-admin from 13.10.0 to 14.0.0 in /functions Jun 14, 2026
@dependabot dependabot Bot force-pushed the dependabot/npm_and_yarn/functions/firebase-admin-14.0.0 branch from 83c182e to 222d4c2 Compare June 14, 2026 17:55
miningtheblocks added a commit that referenced this pull request Jun 17, 2026
…list + deep-link

Cierra Fase 2 del Audit Round 2. 6 items que comparten "infraestructura cross-cutting"
del frontend ↔ backend.

1. requireRegistered con whitelist explícito de providers.

   Pre-fix: blacklist ("rechazar 'anonymous'"). Si Firebase habilita un
   provider nuevo (Anonymous via Console, OIDC custom, beforeSignIn blocking
   function que devuelve un provider desconocido), el flow lo aceptaba por
   default. Whitelist = default-deny: solo password / google.com / apple.com
   pasan. Provider desconocido → permission-denied:provider_not_allowed:{X}.
   (Agente #6 CRIT)

2. notifyAllUsers FCM/Expo ramificación + token cleanup automático.

   Pre-fix: TODOS los tokens iban al endpoint Expo Push API (incluyendo los
   FCM nativos que el cliente registra desde V1.1.0+). Expo respondía error
   sin tirar excepción → audit log decía "sent=N" cuando realmente fueron 0.
   La única broadcast feature del producto NO entregaba mensajes y el admin
   nunca se enteraba.

   Fix: ramificar por pushTokenType. FCM via
   getMessaging().sendEachForMulticast (hasta 500 tokens/call, devuelve
   success/error por token). Expo legacy sigue por exp.host. Tokens con
   responses "registration-token-not-registered" / "invalid-registration-token"
   se borran en batch del user doc.
   (Agente #10 CRIT-10-01 + CRIT-10-03)

3. sendPushToUser respeta settings.notify* del user + data payload + cleanup.

   Pre-fix (Agente #4 + #10 CRIT-10-02): los toggles de Config.js
   (notifyAdReady, notifyDaily, notifyRewards, notifyNewLayer) se persistían
   en users/{uid}.settings.* pero el backend nunca los leía — dark pattern
   explícito reportable a Play Store / GDPR.

   Fix: signature ampliada a sendPushToUser(uid, titles, bodies, opts). Si
   opts.notifyKey está y user.settings[notifyKey]===false, skip silencioso.
   Default opt-in (undefined → enviar, conserva flow viejo).

   3 call sites actualizados: mint complete + payment received + referral
   bonus pasan { notifyKey: 'notifyRewards', data: { url: ... } }.

   data payload + Object.fromEntries(String(v)) para que FCM acepte (FCM
   exige todos los values como strings).
   (Agente #10 CRIT-10-02 + CRIT-10-03 + HIGH-10-09)

4. t(key, vars) motor con interpolación + __DEV__ warnings.

   Pre-fix: 17 call sites reimplementaban .replace('{x}', y) — riesgo de
   reentrancia (si value contenía '{other}' el segundo .replace lo
   interpretaba), keys faltantes mostraban el key literal al usuario.

   Nuevo motor:
   - t('msg', { name, h }) interpola {name} y {h} con String(v).
   - En __DEV__ warna si la key no existe o un var declarado no fue provisto.
   - Object.prototype.hasOwnProperty.call para evitar prototype pollution.

   Profile.js migrado a la nueva API (las 2 sites con walletCooldown +
   emailNotVerified). Los otros 15 call sites siguen funcionando con la
   nueva t() porque vars es opcional (backwards-compat).
   (Agente #10 CRIT-10-04 parcial — full migration de los 15 sites queda P2)

5. addNotificationResponseReceivedListener + DeepLinkHandler ampliado.

   Pre-fix: push payload sin data → tap del push solo abre la app en la
   última screen. User que recibe "Tu NFT llegó!" no llega a MyGems.

   Fix: response listener en App.js dispara Linking.openURL(data.url) si
   el push trae data.url con scheme conocido. DeepLinkHandler ampliado de
   solo 'peaks' a peaks/gems/profile/buycredits/config/servers — alineado
   con los modal keys del OverlayModalsProvider.

   Subscription tracked en let-binding + cleanup en outer useEffect return
   para evitar leak (paralelo al notifSetupTimer cleanup).
   (Agente #10 HIGH-10-09 + HIGH-09-04 cross-ref)

Tests: 24/24 helpers tests pasan sin cambio. functions/index.js parsea OK.

Fase 2 cerrada (4 commits + Tier 1):
  Tier 1:   1e1e160 (6 quick wins)
  Commit A: d33f627 (schema + reorg + nonce lock)
  Commit B: c9b2544 (wallet hot-swap + checkRevoked + password reset)
  Commit C: 545c92c (effectiveSeed + payment checkpoint + markGemRedeemed)
  Commit D: <hash>  (push + i18n + providers + deep-link)

14 CRIT del Audit Round 2 cerrados. Próximo: Fase 3 (compliance + ops).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
miningtheblocks added a commit that referenced this pull request Jun 17, 2026
… scrub PII)

Cierra 4 items operacionales del Audit Round 2 que tenían en común "señales
que existían pero nadie miraba" + leak de PII en logs.

1. maticBalanceCheckScheduled — alert proactivo de MATIC bajo.

   Pre-fix (Agente #11 CRIT-11-02 + #12 MED-11-49): mints fallaban
   silenciosamente cuando MATIC llegaba a 0. 5 retries × ~30s = 2-3h de
   holders esperando ANTES del email de fail (que solo se manda tras
   FALLAR 5 veces). Sin proactive alert.

   Nueva CF cada 6h: lee balance via Polygon RPC, compara contra
   threshold 2 MATIC (~50 mints futuros @ gas típico). Si < threshold:
   - dedupe via runtime/maticBalanceAlert.lastAlertAt (max 1/día).
   - email a NOTIFY_EMAIL con balance, threshold, instrucciones para top-up.

2. errorLogSummaryWeekly — digest semanal del errorLog Firestore.

   Pre-fix (Agente #11 HIGH-11-21): errorLog era write-only en regla; nadie
   lo leía programáticamente. El dev tenía que abrir Firebase Console
   manualmente y scrollear. Regresiones del cliente quedaban invisibles
   hasta que un user reportaba "la app me crashea" via reportProblem.

   Nueva CF every monday 08:00 ART: query últimos 7 días, agrupa por scope,
   email HTML con top 25 scopes ordenados por count + sample message.

3. adminActionsAnomalyWeekly — anomaly detection en adminActions.

   Pre-fix (Agente #11 HIGH-11-22): adminActions también write-only; nadie
   monitorea. Si un admin se compromete y hace 50 grant_admin +
   addServerCredit + notifyAllUsers, el log existe pero el operador no se
   entera hasta auditoría manual mensual (que no está agendada).

   Nueva CF every monday 08:30 ART: agrupa últimos 7 días por adminUid +
   action. Si CUALQUIER admin tuvo >50 ops/sem, marca ⚠️ HIGH en la fila
   + subject line con flag. Email HTML con 2 tablas (by admin, by action).

4. PII scrub:

   a) sendVerificationEmail: pre-fix logueaba `prefix:
      verificationLink.slice(0, 80)` que incluye el oobCode (1h-valid
      password reset token) + email del user. Fix: usar URL parser para
      loguear solo protocol+host (suficiente para diagnóstico).
      (Agente #11 MED-11-25)

   b) src/utils/logError.js: pre-fix scrubeaba PII solo por nombre de key
      (_SENSITIVE_KEY_RE). Si un caller pasaba `{ formData: { email:
      'a@b.com' } }`, el value leakeaba porque "formData" no matchea.
      Fix: scrub adicional por VALOR con 3 regex (email, wallet 0x{40},
      phone +CC{8-15}) reemplazando por placeholders genéricos preservando
      el resto del contexto para debug.
      (Agente #4 MED-FE-23 + Agente #11 MED-11-41)

Tests: 24/24 helpers pasan, functions/index.js parsea OK.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
miningtheblocks added a commit that referenced this pull request Jun 17, 2026
…ecesarias)

Cierra Agente #4 MED-FE-17 + Agente #5 MEDIUM (dead code confirmados por
grep como NO importados desde ningún módulo activo).

Archivos eliminados (verificados vía `grep -rn from.*Name` → 0 matches en
src/ y App.js):

  - src/components/MassiveCube.js       (169 LOC) — usaba @react-three/fiber
  - src/components/Layer100Renderer.js  (250 LOC) — exp del renderer alterno
  - src/components/FaceGrid201.js       (484 LOC) — renderer de cara alterno
  - src/utils/ThreeSetup.js             (104 LOC) — helper de three.js sin uso
  - src/utils/CubeCalculations.js       (150 LOC) — math helpers ahora en helpers.js backend
  - src/utils/ads.js                    ( 66 LOC) — RewardedAd manual; el flow real está inline en GetPeaks.js

Total: ~1223 LOC eliminadas del bundle JS del cliente.

Deps removidas de package.json (solo usadas por MassiveCube.js):
  - @react-three/fiber  (^9.3.0)
  - @react-three/drei   (^10.7.6)

Reducción de bundle estimada: ~650KB (deps no minificadas) según Agente #4.
APK más liviano → install rate más alto + cold-start más rápido.

NO ELIMINADO (deferred por scope — refactor de DynamicCube201.js requiere
test browser):
  - State `miningAnimations` + `setMiningAnimations` en DynamicCube201.js:1505
    (state nunca actualizado pero referenciado en 4+ lugares — necesita
    revisión cuidadosa para evitar regresiones en animaciones).
  - Ref `minedPollRef` en DynamicCube201.js:1514 (mismo).

Próximo paso operacional (no código): `npm install` para actualizar
package-lock.json + sacar @react-three/{fiber,drei} de node_modules.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
miningtheblocks added a commit that referenced this pull request Jun 17, 2026
…TURE.md

1. Pre-permission UI antes del system prompt nativo de notificaciones.

   Cierra CRIT (Agente #4 CRIT-FE-01 + Agente #10 HIGH-10-06): pre-fix,
   requestPermissionsAsync se disparaba auto a los 2s del login sin contexto.
   Apple HIG y Google Play recomiendan modal explicativo ANTES del prompt
   nativo — sin esto, el user rechaza por sorpresa y queda imposible de
   re-promptear sin deep-link a Settings.

   Flow nuevo (App.js useEffect [user]):
   1. Cold start con user logueado → leer AsyncStorage NOTIFICATIONS_CONSENT.
   2. Si 'yes' → setupPushToken directo.
   3. Si 'no' → skip (respetar opt-out, NO volver a preguntar).
   4. Si absent (primer login) → Alert.alert con:
      - Title: "¿Querés enterarte cuándo pasa algo?"
      - Body: explica los 3 tipos (NFT mint, payment credit, referral
        bonus) + nota "podés mutear cada categoría en Settings, sin spam".
      - Buttons: "Activar" / "No gracias" (cancelable:false).
      - On accept: setItem 'yes' + setupPushToken (que internamente llama
        requestPermissionsAsync).
      - On decline: setItem 'no' (final — no más prompts).

   StorageKeys.NOTIFICATIONS_CONSENT agregado a constants.js.
   i18n keys EN+ES agregadas (notificationsConsent{Title,Body,Accept,Decline})
   para futuro uso si migran a un modal custom (esta versión usa Alert.alert
   nativo porque i18n context no es trivialmente accesible desde App.js).

2. ARCHITECTURE.md — visión técnica del sistema.

   Cierra Agente #11 MED-11-53 — single-operator hoy, pero si llega otro dev
   o pasan el proyecto, el ramp-up es muy duro sin documentación del por qué
   detrás del cómo.

   Contenido (~350 líneas):
   - Stack (RN+Expo+Firebase+Polygon+Ethereum tooling).
   - Diagrama ASCII de componentes principales.
   - Modelo de datos Firestore (colecciones + subcolecciones + runtime locks).
   - 3 flows críticos paso a paso (mineCube, crypto payment, NFT claim) con
     referencias a qué commits del Audit Round 2 cambiaron qué.
   - Modelo de seguridad: 5 capas de defense in depth con qué cubre cada una.
   - Secrets: tabla de 3 secrets, sus consumers, rotation procedure, blast
     radius si leak.
   - Tradeoffs documentados: por qué sideload, por qué FCM nativo, por qué
     soft-delete, por qué Polygon, por qué single-operator backend.
   - Code layout completo.
   - Roadmap operacional + code-only restantes.

   Complementa RUNBOOK.md (incident response) y reports de auditoría.

Tests: App.js parsea OK. helpers tests no afectados (sin cambios funcionales
en lógica que toquen).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
miningtheblocks added a commit that referenced this pull request Jun 17, 2026
Cierra 6 hallazgos críticos pendientes pre-launch. Cambios localizados, sin
refactor estructural.

1. activityFeed TTL `expiresAt` (Agente #12 + #11 HIGH-11-40).
   writeActivity ahora agrega expiresAt = now + 7d. Firestore TTL Console
   borrará docs viejos automáticamente (después de activar la policy —
   pendiente operacional en RUNBOOK).
   Pre-fix: feed crecía infinito → cost amplification + PII histórica.

2. mineCube docId `${K}_${cubeNumber}` (Agente #1 CRIT-1).
   Pre-fix: `mined/${cubeNumber}` colisionaba entre layers. K=100 mina N=5;
   cuando K decrementa a 99 y otro user mina N=5 en K=99, el docId "5"
   colisiona → data mixing.
   Pre-launch: 0 mines reales en producción → forward-only safe.

3. processPendingMints audit log en adminActions (Agente #6 HIGH).
   La invocación manual del cron de mints no quedaba en adminActions, solo
   en Cloud Logging (retención 30d). Para forensic post-incidente esencial.

4. Override global de console.log REMOVIDO (Agente #4 CRIT-FE-06).
   Pre-fix: console.log = wrapper que filtraba un warning de expo-gl.
   Anti-pattern: HMR re-importa el módulo → wrappea otra vez → cadena
   infinita de wrappers. Plus dead code en prod (babel strippea console.log).

5. miningAnimations dead state REMOVIDO (Agente #5).
   const [miningAnimations, setMiningAnimations] = useState(new Map())
   declarado pero setMiningAnimations nunca se llamaba. 3 sites
   referenciaban este state muerto: useEffect cleanup forEach (no-op,
   removido), render loop check hasActiveAnimations (siempre false), comments
   documentan migración a useRef si vuelve la necesidad.

6. getFaceRange() lee del cache faceRangesRef (Agente #5 CRIT-4).
   Pre-fix: iteraba 240k cubeNumbers por call. JSX lo llamaba en cada
   re-render = 15-60×/seg × 240k = 14M iter/seg = stutter Android low-end.
   Fix: cache hit primero (faceRangesRef ya populated por
   recomputeFaceRanges en buildLayer). Loop solo en cache miss.

Bonus: setCorsHeaders unused import removido (post Commit K).

Tests: helpers OK, lint clean, parse OK.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
miningtheblocks added a commit that referenced this pull request Jun 17, 2026
…, UpdateModal hardening, verifyBeforeUpdateEmail)

Cierra 4 hallazgos del bloque auth/identity pendientes post Commit B.

1. mineCube + assertFreshToken (Agente #6 CRIT — deferred en Commit B).

   Commit B aplicó checkRevoked en claimGemNFT, createCryptoPayment,
   submitGemClaim pero defirió mineCube por costo (~100 Auth Admin calls
   por sesión típica de mineo). Re-evaluación: costo real ~$0-10/mes a
   <10k DAU. Aceptable para garantizar que tokens revocados (post password
   reset, post admin-suspensión, post deleteMyAccount) no puedan mintear
   gemas hasta que el JWT TTL natural (~60min) los pesque.

2. Login.js: clear password post-login (Agente #4 ALTO-FE-15).

   Pre-fix: tras `signInWithEmailAndPassword`, el password seguía en React
   state hasta unmount o next render. Si la app queda en background, otra
   app con memory dump capability puede leerlo. Best-effort en JS (no hay
   SecureString native) — `setPassword('')` después de éxito + después de
   "email no verificado + signOut".

3. UpdateModal: rechazar userinfo + custom port (Agente #4 ALTO-FE-11).

   Pre-fix: `new URL("https://attacker.com@miningtheblocks.com/evil.apk")`
   parsea hostname=miningtheblocks.com (passa el allowlist) pero algunos
   clientes Android Linking navegan al userinfo en lugar del host.
   Bypass de la última línea de defensa contra APK malicioso via
   downloadUrl.
   Fix: explícitamente reject `u.username`, `u.password`, `u.port !== 443`.

4. Registration.js: verifyBeforeUpdateEmail en lugar de updateEmail
   (Agente #6 HIGH-12).

   Pre-fix: `updateEmail(u, newEmail)` cambiaba el email inmediatamente +
   dejaba emailVerified=false silenciosamente → limbo (user cree email
   cambió; no puede recuperar password porque nuevo no está verified;
   viejo ya no funciona). Plus escalation vector en account takeover.

   Fix: `verifyBeforeUpdateEmail(u, newEmail)`. Manda email de
   verificación al NUEVO address; el email solo cambia cuando el user
   clickea el link. Hasta entonces puede seguir con el email viejo.
   API moderna de Firebase Auth v9+ que reemplaza updateEmail.

Tests: parse OK + lint OK + 24/24 helpers tests.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
miningtheblocks added a commit that referenced this pull request Jun 17, 2026
…rofile uid, audio dedupe)

Cierra 3 hallazgos pendientes del Agente #4.

1. BuyCredits.js restore preserva amount + wallet (ALTO-FE-14).
   Pre-fix: cache guardaba solo {paymentId, expiresAt}; al restaurar tras
   crash/swipe, user veía timer corriendo pero amount=null y wallet=null
   → no sabía cuánto pagar ni a qué dirección. Fix: cachear también
   amount + wallet (devueltos por callCreateCryptoPayment).

2. Profile.js subscribe al uid actual via onAuthStateChanged (ALTO-FE-07).
   Pre-fix: useEffect deps=[] capturaba auth.currentUser al mount. Si el
   user cambiaba durante el componente lifetime (logout + login con otra
   cuenta), el listener servía data del uid VIEJO → cross-user data leak
   (mostraba wallet/email del primer user al segundo).
   Fix: subscribe a onAuthStateChanged; restart onSnapshot cuando uid
   cambia (incluye uid=null = signed out). Cleanup completo en unmount.

3. AudioManager double-unload warning (ALTO-FE-13).
   Pre-fix: cap eviction (line 165) llama oldest.unloadAsync(). Si el
   callback didJustFinish del oldest dispara después (race), llama
   unloadAsync de nuevo → "already unloaded" warning. Doble issue:
   también re-evalúa el indexOf que ya no existe.
   Fix: (a) clear setOnPlaybackStatusUpdate(null) ANTES del unload en
   eviction; (b) guard en el callback: solo unload si todavía está en
   activeSounds (defensive against race).

Tests: parse OK. helpers no afectados (cliente only).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
miningtheblocks added a commit that referenced this pull request Jun 17, 2026
…d dep, i18n hardcoded)

3 cleanups menores.

1. audioManager.cleanup() en signOut (Agente #4 MED-FE-21).
   Pre-fix: música seguía sonando después de signOut sobre la pantalla
   de Login. ~5MB residente + UX disonante.
   Fix: en App.js onAuthStateChanged, cuando u === null (signOut)
   llamamos audioManager.cleanup() antes de setUser(null). El cleanup
   es idempotente (resetea flags para que un re-init después funcione).
   Esto cubre TODOS los signOut paths (DrawerItem, ServerList session
   expired, cold-start con KEEP_SIGNED_IN=0, etc.) sin tener que
   modificar cada caller.

2. react-native-svg-transformer removido (Agente #9 MED-09-23).
   Verificado: 0 references en metro.config.js + 0 imports en src/.
   El transformer está instalado pero no se conecta — dead dep ~50KB.
   metro.config.js usa el default config sin transformer custom.
   Si en el futuro necesitan SVG como componentes (no como assets),
   re-instalar + agregar el transformer.

3. i18n key picksSuffix EN+ES en namespace profile (Agente #10 MED-10-25).
   GetPeaks.js:203 mostraba "picks" hardcoded en EN para todos los users.
   Usuarios en ES veían "picks" en lugar de "picos".
   Fix: key picksSuffix = "picks"/"picos" + GetPeaks usa t('profile.picksSuffix').

Tests: parse OK + JSON valid.

Próximo paso operacional: `npm install` para sacar react-native-svg-transformer
de node_modules + actualizar lockfile.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
miningtheblocks added a commit that referenced this pull request Jun 23, 2026
Smart contract V2 (cierra CRIT-S1/S2/S3 + MED-S1 + HIGH-S1):
- Deploy: 0x2933Ff14AdeC0a4D74aD8380E5c491321bBd3195 (Polygon mainnet, verified)
- AccessControl 2-of-3 Safe (0x83a3F5...86aCD) ADMIN+PAUSER, EOA nftv2 MINTER
- Supply caps inmutables por tier [1,1,5,50,100,500,1000,4000,10000]
- tokenURI canónico por tier (caller no controla URI)
- renounceRole(ADMIN) bloqueado (anti-bricking)
- functions/index.js: ABI actualizado (mintGem 3 args sin tokenURI_)

Backend fixes (batch 3):
- #2 HIGH-1 cross-attribution USDC: senderWalletAddress opt-in + match con event.args.from
- #4 HIGH-M1 gem-loss window: gem + pendingMint dentro del TX con docIds determinísticos
- #4 HIGH-R1 cap referrer bonus: 50 invitados rewarded max (campo referralsRewarded)
- #2 HIGH-2 rateLimits TTL: expiresAt usa Timestamp.fromMillis
- #3 MED-4 Sentry PII scrubber: beforeSend + beforeBreadcrumb sobre email/wallet/phone

Build / Deploy (batch 1):
- #9 HIGH-1 credentialsSource:local en eas.json production
- #9 HIGH-3 versionCode:5 en app.json
- #9 HIGH-4 runtimeVersion appVersion en app.json
- #9 HIGH-7 MTB-v1.1.0.apk.sha256 copiado a docs/
- #9 HIGH-8 download URL -> releases/latest

Supply chain (batch 1+2):
- #5 HIGH-2 nodemailer ^8.0.10 -> ^9.0.1
- #5 HIGH-3 npm overrides ws@^8.21.0 + undici@^6.27.0
- #5 HIGH-4 npm audit en root agregado al CI
- #5 HIGH-5 @cyclonedx/cdxgen pinned a 11.5.0 (no @latest)

Privacy / Legal (batch 1+2):
- #8 HIGH-1 retention 5y AML/KYC explícito (EN + ES)
- #8 HIGH-2 governing law: Argentina/Buenos Aires (EN + ES)
- #8 HIGH-8 clarificado solo email+password sin OAuth Apple/Google (EN + ES)

Frontend security (batch 2):
- #3 HIGH-1 verify.html inline script -> public/verify.js + removido unsafe-inline
- #3 HIGH-2 el() helper sin innerHTML

Web / SEO / a11y (batch 1+2):
- #10 HIGH-5 frame-buster JS anti-clickjacking
- #10 HIGH-6 docs/robots.txt + docs/sitemap.xml
- #10 HIGH-7 OG + Twitter Card + canonical en docs/index.html
- #10 HIGH-8 label for=... en form inputs + .sr-only utility

Smart contract tooling:
- contracts/MTBGemsV2.sol (source) + contracts_build/ (hardhat 0.8.27 cancun, 17/17 tests)

Pre-commit hook: refinado patrón anti-secret para no flagear tx hashes públicos
en docs y constantes role de OpenZeppelin.

Pendiente acción manual (documentado en PENDING_FIXES.md):
- cd functions && npm install
- firebase deploy --only functions / --only hosting
- GitHub Settings -> Pages -> Enforce HTTPS
- DNS records SPF/DMARC/CAA en Cloudflare

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Bumps [firebase-admin](https://github.com/firebase/firebase-admin-node) from 13.10.0 to 14.0.0.
- [Release notes](https://github.com/firebase/firebase-admin-node/releases)
- [Changelog](https://github.com/firebase/firebase-admin-node/blob/main/CHANGELOG.md)
- [Commits](firebase/firebase-admin-node@v13.10.0...v14.0.0)

---
updated-dependencies:
- dependency-name: firebase-admin
  dependency-version: 14.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot changed the title build(deps): Bump firebase-admin from 13.10.0 to 14.0.0 in /functions build(deps): bump firebase-admin from 13.10.0 to 14.0.0 in /functions Jun 23, 2026
@dependabot dependabot Bot force-pushed the dependabot/npm_and_yarn/functions/firebase-admin-14.0.0 branch from 222d4c2 to f507e6e Compare June 23, 2026 18:15
miningtheblocks added a commit that referenced this pull request Jun 23, 2026
- sentry.properties: defaults.org/project/url, auth.token vía env (commented)
- .env.example: documenta SENTRY_AUTH_TOKEN con link al settings page Sentry
- .easignore: + contracts_build/, audit_*/, RUNBOOK.md, *.sha256 (#6 Cleanup #4 bonus)

SENTRY_AUTH_TOKEN ya registrado como sensitive EAS env var en environment
production. Próximo `eas build --profile production` va a subir source maps
automáticamente vía el plugin @sentry/react-native (configurado en app.json).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@dependabot @github

dependabot Bot commented on behalf of github Jun 29, 2026

Copy link
Copy Markdown
Author

Superseded by #28.

@dependabot dependabot Bot closed this Jun 29, 2026
@dependabot dependabot Bot deleted the dependabot/npm_and_yarn/functions/firebase-admin-14.0.0 branch June 29, 2026 15:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants