Skip to content

Changelog

Changelog

Punti ewlenin ikkurati mill-aħħar rilaxxi. Għal verżjonijiet sħaħ tal-API u l-politika dwar bidliet li jinterrompu s-servizz (breaking changes), ara l-Verżjonar tal-API u Politika LTS.

Bidliet dettaljati fuq endpoints individwali: Speċifikazzjoni OpenAPI u Referenza tal-API interattiva.


2026-10 · Kuluri fid-Dashboard

  • Ġdid: il-paġna tad-dettalji ta’ kodiċi għandha l-karta Kuluri: quddiem u sfond bħala valur hex, sfond trasparenti, previżjoni permezz tar-rotta reali tal-immaġni. Il-verifika hija l-istess bħal dik ta’ PATCH /v1/codes/{id}: pari kritiċi jeħtieġu konferma, pari taħt 1.5:1 ma jistgħux jiġu ssejvjati.
  • Ir-reset għal iswed fuq abjad jerġa’ jagħti fl-erba’ formati kollha l-istess bytes bħal mingħajr kuluri. Kodiċijiet mingħajr kuluri ma jinbidlux.
  • Kodiċijiet trasparenti jidhru fuq disinn ta’ kwadri fil-previżjonijiet kollha tad-Dashboard. Dettalji: Kuluri fid-Dashboard.

2026-10 · Kuluri f’PDF u EPS

  • Ġdid: qr.pdf u qr.eps ipinġu fg u bg, bħala parametri u bħala kuluri salvati. L-iswed u kull griż jinkitbu bħala skala ta’ griż (pjanċa sewda biss), u kull kulur ieħor bħala CMYK f’perċentwali sħaħ, bħal 1F4E79 bħala C74 M36 Y0 K53.
  • Sfond bħall-SVG: Ladarba jintgħażel kulur, ikun hemm wiċċ opak wara l-kodiċi u ż-żona kwieta tiegħu, abjad jew bg. bg=transparent ma jpinġi xejn. It-titlu jibqa’ iswed, il-pjanċa tal-logo bajda.
  • L-ebda bidla mingħajr kuluri: Mingħajr fg/bg u mingħajr kuluri salvati, iż-żewġ formati jipprovdu l-istess bytes bħal qabel. Il-PDF ta’ passaport tal-prodott jibqa’ mingħajr kulur.
  • Limiti: l-ebda profil ICC, l-ebda PDF/X. Dettalji: Kuluri fl-istampar.

2026-09 · Kodiċijiet statiċi mingħajr cache tar-ridirezzjoni, tħassir simultanju

  • Mibdul: Kodiċijiet statiċi mhumiex maħżuna aktar fil-cache tar-ridirezzjoni. Sejħa tal-link qasira tagħhom (redirect_url) dejjem taqra l-istat attwali. Wara DELETE /v1/account, kodiċi statiku għalhekk ma jidderiġix aktar mas-sejħa li jmiss, filwaqt li qabel dan seta’ jieħu sa 24 siegħa. Bidla fil-pjan taffettwa wkoll il-kodiċijiet statiċi immedjatament. It-tħassir tal-kont ineħħi l-kodiċijiet dinamiċi bħal qabel. Kodiċijiet statiċi stampati fihom id-destinazzjoni tagħhom direttament u mhumiex affettwati.
  • Irranġat: Żewġ talbiet simultanji ta’ DELETE /v1/codes/:id fuq l-istess kodiċi jagħtu 200 darba u 404 darba. Il-webhook qr.deleted jintbagħat eżattament darba, filwaqt li qabel kien jintbagħat darbtejn.
  • Ġdid: POST u DELETE /v1/codes/:id/logo iwieġbu b’ 409 (errors/conflict) jekk talba oħra tkun bidlet il-logo tal-istess kodiċi fl-istess ħin, u f’dak il-każ ma jibdlu xejn. Qabel, logo mtella’ seta’ jibqa’ maħżun mingħajr ma jintuża. Żewġ talbiet simultanji ta’ DELETE /v1/codes/:id/logo jagħtu 200 it-tnejn li huma. Dettalji: Logo.

2026-09 · TypeScript-SDK 1.2.0

  • Ġdid f’@qr3/sdk 1.2.0: client.codes.update() jaċċetta appearance u jipprovdi r-riżultati tal-verifika tal-kuntrast bħala issues fuq ir-riżultat; mingħajr sejbiet, il-kamp ikun nieqes. client.codes.imageUrl() jaċċetta fg, bg u ecc. Kull kodiċi li l-API tirritorna (get, list, create, update, batchCreate) fih title u appearance.
  • Aġġorna: npm install @qr3/sdk@latest. Python, Go u PHP se jsegwu. Dettalji: SDKs & CLI u Issejvja l-kuluri fuq il-kodiċi.

2026-09 · Il-ħin tal-iskadenza modifikat japplika fi żmien madwar minuta

  • Irranġat: PATCH fuq expires_at issa jnaddaf il-cache tar-ridirezzjoni tal-kodiċi. Il-ħin tal-iskadenza l-ġdid b’hekk japplika fi żmien madwar minuta minflok sa 24 siegħa wara. Preċedentement, skadenza mneħħija jew posposta kienet tkompli tirritorna 410 sa 24 siegħa wara, u skadenza ssettjata għal issa kienet tħalli r-ridirezzjoni tkompli taħdem sa 24 siegħa.
  • Irranġat: Kodiċi maħluq b’expires_at jiskadi fil-ħin ukoll jekk l-iskadenza tkun fi żmien l-ewwel 24 siegħa.
  • Irranġat: Jekk kodiċi jitħassar waqt li l-logo tiegħu jkun qed jittella’ jew jitneħħa, POST u DELETE /v1/codes/:id/logo iwieġbu b’404 u ma jimmodifikawx il-kodiċi mħassar, bħalma diġà jagħmel PATCH.
  • Irranġat: Anke kodiċi statiku li l-link qasir tiegħu (redirect_url) ġie msejjaħ, jinsab fil-cache tar-ridirezzjoni. Il-modifika, il-pawża u t-tħassir issa jnaddfuh ukoll, mhux biss fil-każ ta’ kodiċijiet dinamiċi.

2026-09 · Issejvjar ta’ kuluri mal-kodiċi

  • Ġdid: PATCH /v1/codes/:id jaċċetta appearance b’ foreground_color u background_color (#RRGGBB, l-isfond ukoll transparent). qr.svg u qr.png ipinġu l-kuluri ffrankati mingħajr ebda parametru; parametru bħal ?fg=000000 xorta jieħu l-preċedenza. Il-PDF u l-EPS ipinġu l-kuluri biss f’verżjoni aktar tard.
  • Verifika tal-kuntrast: Par taħt 1,5:1 jagħti 422. Pari b’kuntrast aktar dgħajjef jiġu ssejvjati u rrappurtati f’ meta.issues bħala warning jew critical; sfond trasparenti huwa dejjem critical, qatt mhu mblukkat.
  • Merġjar: Kampi li jitħallew barra jżommu l-valur ssejvjat tagħhom, null iwettaq reset. Bidliet simultanji fuq l-istess kodiċi ma jibqgħux jissostitwixxu lil xulxin.
  • F’kull rispons tal-kodiċi: appearance jinsab f’kull rispons tal-kodiċi u fil-webhooks qr.created u qr.updated. POST, il-batch u l-importazzjoni jirrifjutawh b’ 422.
  • L-ebda bidla għal kodiċijiet eżistenti: Mingħajr kuluri ssejvjati, kull kodiċi jipprovdi l-istess bytes bħal qabel. Dettalji: Issejvjar ta’ kuluri mal-kodiċi.

2026-09 · Kuluri u korrezzjoni tal-iżbalji bħala parametri tar-rotot tal-immaġni

  • Ġdid: L-erba’ rotot tal-immaġni kollha jaċċettaw fg (kulur ta’ quddiem), bg (kulur tal-isfond jew transparent) u ecc (korrezzjoni tal-iżbalji L, M, Q, H). SVG u PNG jpinġu l-kuluri; PDF u EPS jaċċettawhom, iżda jpinġuhom biss f’rilaxx futur. ecc jaħdem fl-erba’ formati kollha, u logo jibqa’ jimponi H.
  • Trasparenti: bg=transparent jipprovdi SVG mingħajr isfond u PNG b’kanal alfa reali. Il-wiċċ ta’ taħt irid ikun ċar u jħalli ż-żona kwieta vojta.
  • Qatt żball: Valuri invalidi jiġu injorati; l-immaġni mbagħad tiġi ġġenerata eżattament bħal mingħajr parametri.
  • Caching: Kull parametru effettiv jipprovdi Cache-Control: public, max-age=300 minflok l-24 siegħa tal-immaġni standard.
  • L-ebda bidla fl-imġiba mingħajr parametri: Kull kodiċi eżistenti jipprovdi l-istess bytes bħal qabel fl-erba’ formati kollha.
  • Disponibbli f’kull pjan. Dettalji: Kuluri u korrezzjoni tal-iżbalji.
  • Estensjoni: qr.pdf u qr.eps issa jinkorporaw logo stabbilit bl-istess mod bħal qr.svg u qr.png (ara hawn taħt) — bħala immaġni inkorporata (PDF permezz ta’ Image XObject, EPS permezz ta’ dizzjunarju tal-immaġni f’PostScript, hemmhekk biss b’ %%LanguageLevel: 3), iċċentrat fuq l-istess żona, bl-istess żieda tal-korrezzjoni tal-iżbalji għal H. S’issa, iż-żewġ formati ma kinux jipprovdu l-logo; dan issa ġie solvut.
  • Caching: B’logo stabbilit, issa qr.pdf u qr.eps jipprovdu wkoll Cache-Control: public, max-age=300 minflok l-24 siegħa tas-soltu — eżattament bħal SVG/PNG.
  • Fallback: Jekk l-immaġni tal-logo nnifisha ma tistax tiġi pproċessata (bħal oġġett maħżun li jkun korrott), il-korrezzjoni tal-iżbalji tibqa’ H, iżda ż-żona rreżervata tibqa’ vojta minflok immaġni — qatt żball tas-server.
  • L-ebda bidla fl-imġiba mingħajr logo: Kodiċijiet mingħajr logo jibqgħu jipprovdu qr.pdf/qr.eps b’mod identiku fil-livell ta’ bytes, b’cache mhux mibdul ta’ 24 siegħa.
  • Dettalji u struzzjonijiet tal-istampar: Logo fil-Kodiċi QR.

2026-09 · Logo fil-kodiċi QR — Dashboard u API

  • Ġdid: Kodiċi issa jista’ jkollu logo fin-nofs. Fid-Dashboard, il-paġna tad-dettalji ta’ kodiċi toħloq kard tal-logo ddedikata: Agħżel logo, fl-ewwel żieda jew meta tneħħih ikkonferma twissija b’kaxxa tal-għażla obbligatorja (it-tnejn li huma jibdlu l-mudell tal-punti), imbagħad Tella’ l-logo/Neħħi l-logo. Sostituzzjoni m’għandhiex bżonn konferma — l-immaġni biss tinbidel, mhux il-mudell. Ir-rwol viewer jara l-istatus u l-preview, iżda l-ebda waħda mit-tliet azzjonijiet.
  • API: POST /v1/codes/{id}/logo (kamp multipart file; PNG, JPEG jew WebP, massimu ta’ 1 MB, SVG jiġi rrifjutat) joħloq logo jew jissostitwih; DELETE /v1/codes/{id}/logo ineħħih mill-ġdid u huwa idempotenti. Immaġni kbira wisq tirritorna 413, format mhux appoġġjat jirritorna 422, u r-rwol viewer jirritorna 403.
  • Dehra: qr.svg u qr.png jinkorporaw il-logo bħala pixels attwali (512 × 512, normalizzati) u għal dan jgħollu l-korrezzjoni tal-iżbalji għal H. Iż-żieda u t-tneħħija b’hekk jibdlu l-mudell tal-punti (M ↔ H), filwaqt li s-sostituzzjoni le. qr.pdf u qr.eps ma jinkorporaw l-ebda logo u jibqgħu mhux mibdula. Kodiċi li diġà ġie stampat jibqa’ jaħdem fi kwalunkwe kasus, peress li d-destinazzjoni kkodifikata ma tiddependix fuq il-logo — dawk biss li jixtiequ jaraw id-dehra (il-ġdida) tal-logo fuq il-materjal għandhom bżonn jistampaw mill-ġdid, u m’għandhomx iħalltu fajls tal-istampar qodma u ġodda.
  • Caching: B’logo ssettjat, qr.svg u qr.png jipprovdu Cache-Control: public, max-age=300 minflok l-24 siegħa tas-soltu. Dettalji, limiti u struzzjonijiet tal-istampar: Logo fil-kodiċi QR.

2026-08 · operationId għall-75 operazzjoni kollha, u gwida dwar meta għall-aġenti

  • Żieda: Il-75 operazzjoni kollha tal-ispeċifikazzjoni tal-OpenAPI issa għandhom operationId — listCodes, createCode, getCodeStats, archiveWorkspace u l-bqija. S’issa, dan il-qasam kien nieqes b’mod konsistenti, u b’hekk kull ġeneratur kellu jidderiva l-isem tal-metodu mill-metodu HTTP u l-passaġġ (postV1Codes). Ismijiet bħal dawn jiddependu fuq il-passaġġ u jinbidlu ma’ kull bidla fil-passaġġ. Il-format tal-isem huwa l-istess fil-75 post kollha: list/get/create/update/replace/delete, inkella l-verb tal-azzjoni tan-negozju (validateDpp, registerGs1Identifier, pingWebhook). Il-verb isegwi l-loġika tan-negozju, mhux il-metodu HTTP — archiveWorkspace huwa DELETE, importDpps huwa POST.
  • Impatt fuq klijenti ġġenerati minnek innifsek: Dawk li jiġġeneraw l-SDK tagħhom mill-ispeċifikazzjoni se jiksbu metodi msemmija mill-ġdid (postV1Codes → createCode) fil-ġirja li jmiss. Dan huwa l-għan tal-bidla, iżda huwa tibdil fl-isem f’kodiċi estern — għalhekk huwa msemmi b’mod espliċitu hawnhekk. Il-passaġġi, il-parametri, il-formati tar-rispons u l-kodiċijiet tal-istatus mhumiex mibdula; l-SDKs uffiċjali, is-CLI u s-server tal-MCP mhumiex affettwati.
  • Bidu għall-aġenti: https://qr3.app/llms.txt għandu sezzjoni ## When to use qr3.app — sitt kompiti minflok sitt funzjonijiet, flimkien mas-sentenza dwar għal xiex qr3.app mhuwiex l-għodda t-tajba. L-istess informazzjoni issa hija pprovduta mis-server tal-MCP waqt il-handshake: initialize kontra https://mcp.qr3.app/mcp iwieġeb b’qasam instructions (qabel: ħdax-il għodda mingħajr ebda klassifikazzjoni). Huwa inkluż ukoll liema sejħiet għandhom bżonn muftieħ tal-API — initialize u tools/list le, iżda kull tools/call iva.
  • Korrezzjonijiet f’llms.txt: Erba’ dettalji ġew ivverifikati mal-produzzjoni u ma rriżultawx korretti: (1) l-SDK tal-Python qr3app mhuwiex ippubblikat fuq PyPI — il-linja pip install tneħħiet mingħajr sostituzzjoni; (2) Accept: text/markdown japplika għall-paġna ewlenija u l-blog, mhux għal kull paġna ġġenerata min-naħa tas-server; (3) l-indirizz tal-kuntatt huwa [email protected], anke fil-JSON-LD tal-paġna ewlenija; (4) /de/security/ huwa rindirizzar għal ankra, mhux paġna separata. Link ġdid: docs.qr3.app/de/skills/.
  • Assigurazzjoni: Tliet asserzjonijiet f’openapi-spec.test.ts — kompletezza, uniċità, lowerCamelCase —, kull waħda vverifikata b’mutazzjoni. Disa’ testijiet oħra jinfurzaw l-erba’ dettalji kkoreġuti biex jiżguraw li ma jerġgħux iseħħu.
  • Limitazzjoni magħrufa: Tnejn mill-75 operazzjoni huma deskritti fl-ispeċifikazzjoni, iżda jwieġbu b’404 (GET /v1/codes/{id}/stats u GET /v1/account). Huma ngħataw isem hawnhekk u jerġgħu jilfuh hekk kif jiġi deċiż jekk humiex se jinbnew jew jitħassru.

2026-08 · Id-downgrades tal-pjanijiet u l-kanċellazzjonijiet issa jaffettwaw ukoll il-limiti

  • Fix: Il-webhook ta’ Stripe, f’każ ta’ bidla fil-pjan u kanċellazzjoni, kien qed jikteb biss l-isem tal-pjan u mhux l-erba’ kolonni tal-limiti tal-organizzazzjoni (max_workspaces, max_members, max_dynamic_codes, max_scans_per_month). Peress li l-infurzar jieħu l-massimu bejn il-valur issejvjat u l-baseline tal-pjan, organizzazzjoni li l-pjan tagħha ġie degradat jew ikkanċellat kienet qed iżżomm il-limiti l-antiki u ogħla tagħha — u b’hekk id-downgrade ma kellu l-ebda effett. Il-webhook issa jissettja dawn il-kolonni għall-baseline tal-pjan il-ġdid ma’ kull bidla reali fil-pjan, u għall-baseline Free f’każ ta’ kanċellazzjoni — eżattament kif diġà tagħmel l-amministrazzjoni tal-admin.
  • Imġiba: L-aġġornamenti ta’ rutina tas-subscription (tiġdid, metodu ta’ ħlas, proration) xorta waħda ma jaffettwawx il-limiti; limiti ogħla mogħtija individwalment jibqgħu mhux mibdula. Hija biss bidla reali fil-pjan li tirrisettjahom għall-baseline tal-pjan il-ġdid.
  • Impatt: L-ebda bidla fl-API jew fil-format tar-rispons. L-organizzazzjonijiet li d-downgrade tagħhom seħħ qabel dan il-fix se jżommu l-valuri l-antiki sakemm tidħol fis-seħħ il-bidla fil-pjan li jmiss u sakemm is-support jaġġustahom.

2026-08 · Keyset cursor issa fuq l-endpoints kollha tal-listi

  • Fix: Il-fix tal-cursor għal GET /v1/codes u GET /v1/dpp (ara hawn taħt) issa ġie estiż għal-listi l-oħra kollha b’paginazzjoni tal-cursor: GET /v1/qr-codes/:id/comments, /v1/workspaces, /v1/gs1/identifiers, /v1/members, /v1/audit-logs, /v1/admin/orgs, /v1/admin/users u /v1/webhooks/:id/deliveries. Kollha kienu qed jagħmlu paginazzjoni abbażi ta’ created_at biss; ringieli b’timestamp identiku (daħliet tal-audit log ta’ operazzjoni f’lott, tentattivi mill-ġdid ta’ webhooks, importazzjonijiet ta’ membri) setgħu jintilfu fuq il-paġna li jmiss. Iċ-ċavetta tal-issortjar issa hija t-tuple (created_at, id) kullimkien.
  • Bidla fl-API: Fuq dawn il-listi, meta.pagination.next_cursor minn issa ‘l quddiem huwa wkoll valur opak (base64url) minflok timestamp sempliċi; cursors li ma jistgħux jinqraw jirritornaw 400, filwaqt li cursors qodma tat-timestamp se jibqgħu jiġu aċċettati b’mod temporanju. Eċċezzjoni GET /v1/webhooks/:id/deliveries: hemmhekk next_cursor jibqa’ l-ID tal-aħħar kunsinna (ID mhux magħrufa → l-ewwel paġna). Klijenti li jirritornaw next_cursor mingħajr tibdil — Dashboard, CLI, SDKs, MCP — m’għandhomx bżonn ibiddlu xejn.
  • Impatt: L-ebda migrazzjoni meħtieġa. Jekk f’waħda minn dawn il-listi (eż. l-audit log jew il-log tal-kunsinni fid-Dashboard) innutajt li kienu nieqsa xi daħliet waqt li kont qed tqalleb il-paġni: dawn qatt ma ntilfu — il-listi issa qed juruhom b’mod sħiħ. — il-listi issa qed juruhom b’mod sħiħ.

2026-08 · Timestamps wara l-editjar u t-tħassir jerġgħu jkunu konformi mal-OpenAPI

  • Fix: Wara PATCH /v1/codes/{id}, updated_at kien qed jiġi rritornat fil-format ta’ SQLite mingħajr żona tal-ħin (2026-08-17 09:00:00), għalkemm l-ispeċifikazzjoni tal-OpenAPI twiegħed format: date-time u l-ħolqien (POST) jipprovdi t-timestamp tal-ISO (2026-08-17T09:00:00.000Z). L-istess kien japplika għal deleted_at/updated_at waqt soft-delete kif ukoll għall-mogħdijiet ta’ editjar/tħassir ta’ API-Keys, organizzazzjonijiet, Workspaces, membri, kummenti u webhooks, kif ukoll għal last_used_at ta’ API-Keys u last_triggered_at ta’ webhooks. Il-mogħdijiet kollha tal-kitba issa jittimbraw ISO 8601 (UTC, T u Z).
  • Impatt: Klijenti li janalizzaw updated_at b’new Date(...) (SDKs, CLI, Dashboard) kienu qed jaqraw il-format bi spazju bħala ħin lokali — is-CLI kienet qed turi l-ħin imċaqlaq bl-offset lokali għal kodiċijiet li ġew editjati darba (Vjenna: −2 h). Dan ġie rranġat. Barra minn hekk, migrazzjoni tad-dejta tinnormalizza valuri diġà ffrankati fil-format il-qadim għal ISO, sabiex l-issortjar u l-paraguni f’rekords imħallta jkunu korretti. L-ebda bidla fl-ismijiet tal-oqsma jew fl-istruttura tar-rispons.
  • Sfond: L-istess klassi ta’ żball bħaż-żewġ soluzzjonijiet hawn taħt (skadenza tal-API-Key, re-scan-cutoff): id-datetime('now') ta’ SQLite jikteb YYYY-MM-DD HH:MM:SS, filwaqt li l-kittieba l-oħra kollha jiktbu ISO 8601. Test ta’ protezzjoni tal-kodiċi sors (guard test) se jipprevjeni okkorrenzi ġodda fil-futur.

2026-08 · Il-paginazzjoni tal-listi ma għadhiex titlef kodiċijiet tal-lott

  • Fix: GET /v1/codes u GET /v1/dpp kienu qed jagħmlu paginazzjoni biss permezz ta’ created_at. Madankollu, il-kodiċijiet minn POST /v1/codes/batch, POST /v1/dpp/batch u l-importazzjoni ta’ CSV/XLSX jaqsmu timestamp wieħed — malli l-lott ikun akbar minn limit (default 20), it-tieni paġna ma kinitx għadha tipprovdi l-bqija tal-linji tal-istess timestamp. Il-kodiċijiet kienu jeżistu u kienu aċċessibbli permezz ta’ GET /v1/codes/:id, iżda qatt ma kienu jidhru fil-lista (Dashboard, CLI qr3 list, SDKs, MCP). Il-cursor issa huwa keyset fuq (created_at, id).
  • Bidla fl-API: meta.pagination.next_cursor minn issa ‘l quddiem huwa valur opak (base64url) minflok timestamp sempliċi. Dawk li jirritornaw il-cursor mhux mibdul bħala ?cursor= — kif jagħmlu d-Dashboard, is-CLI, l-SDKs kollha u s-server tal-MCP — m’għandhomx għalfejn ibiddlu xejn. Cursors qodma tat-timestamp se jkomplu jiġu aċċettati b’mod temporanju; cursors li ma jistgħux jinqraw issa se jirritornaw 400 minflok ma jagħtu l-ewwel paġna b’mod sieket.
  • Impatt: Għal dawk li wara importazzjoni ta’ lott raw inqas kodiċijiet fil-lista milli fil-fatt inħolqu: Il-kodiċijiet qatt ma ntilfu — il-lista issa qed turihom kollha. L-ebda migrazzjoni mhi meħtieġa.

2026-08 · Ir-re-scans tas-sigurtà qed jerġgħu jsiru kull 24 siegħa

  • Fix: Ir-re-scanning perjodiku ta’ URLs tad-destinazzjoni u links tal-landing page (Google Web Risk) kien qed jaqbeż kodiċijiet li l-aħħar scan tagħhom kien fl-istess jum kalendarju bħall-cutoff ta’ 24 siegħa — skont il-ħin, ir-re-scan kien jiġi ttardjat sa jum ieħor. Il-cutoff issa qed jiġi kkalkulat fl-istess format ISO li fih huma ffrankati t-timestamps tal-iscan.
  • Impatt: URL tad-destinazzjoni li tiġi kklassifikata bħala mhux sigura wara l-aħħar scan terġa’ twassal għall-pawża awtomatika tal-kodiċi fi ħdan it-tieqa dokumentata ta’ 24 siegħa. L-ebda bidla fl-API jew fil-format tar-rispons.

2026-08 · L-API-Keys jiskadu fil-ħin tal-iskadenza

  • Fix: API-Key li l-expires_at tiegħu kien fl-istess jum kien jibqa’ jiġi aċċettat sa nofsillejl UTC. L-iskadenza issa tiġi mqabbla bħala timestamp minflok bħala string — API-Key skadut jagħti immedjatament 401.
  • Sfond: expires_at jiġi ffrankat bħala ISO timestamp (2026-08-14T09:00:00Z), filwaqt li n-naħa tal-paragun kienet tipprovdi l-format bi spazju (2026-08-14 09:00:00). Il-paragun dirett tal-istring għalhekk kien ikun korrett biss jekk id-data nnifisha kienet diġà differenti.
  • Impatt: M’hemm bżonn tal-ebda migrazzjoni, il-format tar-rispons ta’ GET /v1/api-keys jibqa’ ma jinbidelx. Valuri tal-iskadenza li ma jistgħux jinqraw issa jitqiesu bħala skaduti minflok validi.

2026-08 · Referenza tal-API: Ġestjoni tat-Tenant dokumentata

  • OpenAPI: L-ispeċifikazzjoni — u għalhekk ir-referenza interattiva — issa tiddokumenta Organizzazzjonijiet (inkluż GET /v1/organizations/usage), Workspaces, Membri u Rwoli u Audit-Logs.
  • Billing: Il-ħarsa ġenerali tal-pjanijiet (GET /v1/billing/plans) hija pubblika; Checkout (POST /v1/billing/checkout) u l-portal tal-klijenti ta’ Stripe (GET /v1/billing/portal) huma indikati bħala endpoints għall-amministraturi tal-organizzazzjoni.
  • Esportazzjoni tal-iskans: L-istatistika tal-iskans (GET /v1/codes/{id}/scans) u l-esportazzjoni tad-dejta mhux ipproċessata (…/scans.csv, …/scans.xlsx) huma ddokumentati bis-sħiħ — inkluża n-nota tal-GDPR: L-ip_hash qatt ma huwa inkluż fl-esportazzjoni.
  • Imġiba tal-iżbalji: Id-dokumentazzjoni l-ġdida tinkludi wkoll ir-rispons 400 tal-validazzjoni tat-talba: Il-body huwa l-iżball Zod mhux ipproċessat, mhux dokument ta’ problema RFC-7807 — madankollu, xorta jiġi kkonsenjat taħt il-Content-Type application/problem+json.
  • Dashboard: Il-fajls pubbliċi fuq il-paġna tad-dettalji tal-kodiċi issa għandhom buttuna li tikkopja l-link pubbliku tagħhom fil-clipboard – jista’ jintuża direttament bħala l-URL tad-destinazzjoni ta’ QR-Code meta skennjar għandu jiftaħ dokument speċifiku mill-ewwel minflok il-landing page bil-lista tal-fajls.
  • API: L-endpoints tal-fajls (/v1/files) jipprovdu wkoll public_url. Il-qasam huwa stabbilit biss għal fajls b’visibility: public – il-fajls privati ma jiksbu l-ebda indirizz pubbliku.
  • Imġiba: Il-link ma jeħtieġx login u jiftaħ il-fajl direttament fil-browser. Is-sostituzzjoni tal-fajl permezz ta’ Issostitwixxi ma tbiddilx il-link, u għalhekk kodiċi stampat bih jibqa’ validu. Dettalji: Fajls u Skedi tad-Dejta.

2026-07 · Rwoli tat-Tim: Kontributur mingħajr tħassir u fatturazzjoni tal-Amministratur

  • Ġdid: Ir-rwol ta’ membru Kontributur (mingħajr tħassir) — joħloq u jeditja QR-Codes, fajls u Digital Product Passports, iżda ma jista’ jħassar xejn u lanqas joħloq API-Keys. L-endpoints distruttivi kollha jivverifikaw ir-rwol fuq is-server (403).
  • Fatturazzjoni: It-titjib fil-pjanijiet u l-portal tal-klijenti ta’ Stripe (POST /v1/billing/checkout, GET /v1/billing/portal) issa huma riżervati għall-Amministraturi tal-organizzazzjoni — ir-rwoli l-oħra kollha jaraw ħarsa ġenerali tal-pjan f’modalità li tista’ tinqara biss.
  • Dashboard: L-azzjonijiet li mhumiex permessi mir-rwol tal-utent stess jiġu moħbija: Osservatur, pereżempju, ma jarax buttuni biex joħloq, jeditja jew iħassar; il-listi, id-downloads u l-istatistika jibqgħu viżibbli. Dettalji: Tim u Rwoli.
  • Landing page: Il-landing page ta’ kodiċi ospitata minn qr3 issa tista’ telenka links esterni self-hosted ({ label, url }) flimkien mal-fajls imtellgħa jew minflokhom – pereżempju għal data sheets fuq is-sit tiegħek stess.
  • API: POST/PATCH /v1/codes jaċċettaw array links (0–20 entrata, http(s), ≤ 2048 karattru). Kull URL jiġi vverifikat b’Google Web Risk; URL mhux sikur jirritorna 422. Array vojt iħassar il-links kollha.
  • Dashboard: Żid, irranġa mill-ġdid u neħħi links fuq il-paġna tad-dettalji tal-kodiċi.
  • Sigurtà: Il-links renderjati jibqgħu siguri mill-XSS (escaped, http(s) biss) u l-paġna żżomm l-header noindex tagħha.

2026-04 · Analitika tad-Dashboard għal kull QR-Code

  • Dashboard: Il-buttuna tal-Analitika fil-lista tal-QR-Codes issa tiftaħ il-paġna tal-istatistika tal-QR-Code rispettiv taħt /dashboard/codes/{id}.
  • Routing: L-alias /dashboard/codes ikompli jidderieġi mill-ġdid lejn /dashboard, iżda ma jibqax jinterċetta rotot dettaljati bħal /dashboard/codes/{id}.
  • API: Il-paġna tad-dettalji tgħabbi l-QR-Code direttament permezz ta’ GET /v1/codes/:id; b’hekk m’għadhiex dipendenti fuq il-limiti tal-paginazzjoni tal-lista.
  • Tests: It-testijiet ta’ rigressjoni jkopru r-redirect tal-alias u t-tagħbija diretta tal-kodiċi.

2026-04 · Djalogu ta’ Tħassir tad-Dashboard għal QR-Codes

  • Dashboard: L-ikona tal-kontenitur tal-iskart fil-lista tal-QR-Codes issa tiftaħ djalogu React apposta minflok popup nattiv tal-browser.
  • Feedback: Wara t-tħassir, tidher notifika toast ta’ suċċess jew żball.
  • Tests: packages/dashboard/tests/dashboard.test.ts jipprevjeni rigressjonijiet fuq confirm() fil-fluss tat-tħassir tal-QR-Code.
  • Dashboard: Ix-shortcodes fil-lista tal-QR-Codes issa jistgħu jiġu kklikkjati direttament bħala links esterni ta’ redirect. L-ikona tal-link estern ħdejn eż. wu3qaa tiftaħ https://qr3.app/{shortCode} f’tab ġdida.
  • i18n: Miżjuda testi tat-tooltip għall-Ġermaniż u l-Ingliż.
  • Tests: packages/dashboard/tests/dashboard.test.ts jipproteġi l-href tal-link, l-imġiba tat-tab il-ġdida, noopener noreferrer u l-ikona kontra rigressjonijiet.

2026-04 · Rotta tar-Redirect-Worker għal QR-Codes Dinamiċi

  • Fix: QR-Codes dinamiċi taħt https://qr3.app/{shortCode} qed jerġgħu jiġu pproċessati mir-Redirect-Worker. Ir-rotta tal-produzzjoni issa tuża qr3.app/*, peress li r-rotot tal-Cloudflare Workers ma jappoġġjawx parametri tal-passaġġ :code.
  • Tisħiħ: Mogħdijiet li ma jaqblux jiġu mgħoddija lill-landing origin, sabiex paġni normali bħal /de/pricing ma jiġux imblukkati mir-Redirect-Worker.
  • Tests: packages/redirect/tests/unit/redirect.test.ts jivverifika r-rotta wildcard, l-ipproċessar tax-shortcode u l-pass-through tal-origin.

2026-04 · Ħarsa Ġenerali tal-Iskanjar tad-DPP tal-Workspace (Q3.4.2)

  • Ġdid: GET /v1/workspace/stats/dpp?days=30 — jaggrega d-dpp_scans kollha tal-workspace tal-API-Key (active_dpps, scans_by_day, top_dpps b’isem il-prodott/kategorija).
  • Dashboard: Karta fuq il-paġna ewlenija (/dashboard) b’bar chart ta’ 30 jum + listi tal-aqwa — b’mod parallel mal-karti tal-QR-Code.
  • Pubbliku: Shortlink tal-marketing GET /dpp/dpp_<id> (segment wieħed) għal live demos, b’mod parallel ma’ /dpp/{gtin}/{serial}.

2026-04 · Analitika tal-Iskanjar tad-DPP (Q3.4.1)

  • Ġdid: GET /v1/dpp/:id/stats?days=30 — skans aggregati tar-resolver pubbliku tal-GS1 għal kull DPP. Oqsma: total_scans, period_scans, scans_by_day, top_countries, top_devices, top_representations.
  • Ġdid: Tabella dpp_scans (migrazzjoni 0011) — separata minn scans (Redirect-Worker). L-indirizzi IP jiġu mħaddma b’hash b’salt li jdur kuljum, b’hekk IPs mhux ipproċessati qatt ma jilħqu D1.
  • Dashboard: Karta b’mini-chart (SVG, l-ebda librerija ta’ charts) fuq /dashboard/dpp/:dppId b’bars ta’ 30 jum + analiżi dettaljata tal-aqwa 3. Stat vojt (empty state) malli DPP ikun live iżda jkun għadu ma kellux skans.

2026-04 · Simulatur tal-Konformità tal-UE Live (Q3.3.7)

  • Ġdid: POST /v1/dpp/:id/validate-update — jissimula aġġornamenti parzjali stateless (status, lista tas-suq, …) mingħajr persistenza. Ir-rispons fih eu_compliance + preview.changed_fields.
  • Dashboard: Karta tas-simulatur fid-dettall tad-DPP (/dashboard/dpp/:dppId) — chips għal DE/AT/FR/IT/ES/NL + Custom, dropdown tal-istatus, Preview EU impact / Save changes / Reset. Mhux imblukkanti (non-blocking) permezz ta’ Remix useFetcher.
  • Tisħiħ: Helpers tas-simulatur esternalizzati (readUpdatePatchFromForm, marketCountriesKey) + 18-il unit test ġdid; Bugfix: Input Lone-Non-ISO ma jibqax iħassar il-lista tas-suq.

2026-04 · Preview tal-Konformità tal-UE Live fil-Formola tal-Ħolqien (Q3.3.6)

  • Mibdul: POST /v1/dpp/validate jipprovdi wkoll eu_compliance — l-istess validatur bħal GET /v1/dpp/:id/eu-compliance, stateless qabel ma jiġi ffrankat.
  • Dashboard: Preview taħt il-pannell tal-validazzjoni eżistenti + banner ġdid ta’ protezzjoni tal-iffrankar (Save-Guard-Banner) qabel il-buttuni tal-inviju, jekk ikun hemm żbalji/twissijiet miftuħa (pluralizzazzjoni i18n DE/EN).

2026-04 · Validatur tal-UE + UI tat-Tessuti (Q3.3.4 + Q3.3.5)

  • Ġdid: Validatur tal-Konformità tal-UE b’5 regoli tat-tessuti (TEXTILE_AGEC_REQUIRED, TEXTILE_MICROPLASTICS_CONSISTENCY, TEXTILE_SVHC_THRESHOLD, TEXTILE_GREENWASHING, TEXTILE_ESPR_READY).
  • Ġdid: GET /v1/dpp/:id/eu-compliance b’compliant / espr_ready / issues[] / summary.
  • Dashboard: Sezzjoni tal-Konformità tal-UE fid-dettall tad-DPP (Summary-Tiles, karti tal-kwistjonijiet raggruppati, ESPR-Ready-Badge fl-header).

2026-04 · Skema tad-DPP tat-Tessuti (Q3.3.1–Q3.3.3)

  • Ġdid: Kategorija textile b’katina ta’ obbligu AGEC (Insiġ/Knitting → Żebgħa/Stampar → Konfezzjoni), għal kull fibra origin_country + recycled_pct, svhc_substances[], ESPR-Opt-in (PEF, ħajja utli, Recyclability).
  • Ġdid: Qasam bażiku market_countries: string[] (ISO 3166-1 alpha-2) fuq il-kategoriji kollha tad-DPP — jikkontrolla r-regoli AGEC speċifiċi għal Franza u n-nota obbligatorja tal-konsumatur Franċiża.
  • Ġdid: Mudell HTML tal-konsumatur b’kaxxa ta’ twissija tal-mikroplastiċi AGEC, katina ta’ oriġini bi 3 stadji (pills tal-bnadar), lista SVHC, sezzjoni ta’ Durability u Recyclability.
  • Migrazzjoni: 0010_dpp_market_countries (D1).

2026-04 · Importazzjoni bl-Ingrossa (Bulk) tad-DPP (Q3.2.1–Q3.2.5)

  • Ġdid: POST /v1/dpp/import jaċċetta CSV u XLSX (kompatibbli mal-Workers permezz ta’ SheetJS xlsx, ~283 KB gzip Bundle).
  • Skalat: limitu bbażat fuq il-pjan (Free 100 → Enterprise 10k) + chunked db.batch() ta’ 100 + limitu tal-body ta’ 5 MB.
  • Ġdid: Rapport tal-iżbalji bħala CSV fil-qasam errors_csv tar-rispons 201; GET /v1/dpp/import/templates/:category?format=csv|xlsx jipprovdi mudelli lesti għall-batteriji u t-tessuti.
  • Dashboard: Upload b’Drag-and-Drop taħt /dashboard/dpp/import bi proxy tal-mudelli u tniżżil inline ta’ CSV.

Mhux Breaking — Estensjonijiet LTS

Il-bidliet kollha msemmija hawn fuq huma addittivi:

  • Klijenti eżistenti ta’ POST /v1/dpp/validate jinjoraw il-qasam il-ġdid eu_compliance mingħajr ebda bidla.
  • Flussi eżistenti ta’ battery mhumiex mibdula.
  • market_countries huwa fakultattiv u b’mod awtomatiku huwa [].

Ara l-Verżjonar tal-API għall-politika dwar bidliet li jinterrompu s-servizz (breaking changes).