Changelog
Muudatuste logi
Viimaste väljalasete kureeritud esiletõstmised. Täielike API versioonide ja katkestavate muudatuste poliitika kohta vaata API versioonihaldus ja LTS-poliitika.
Üksikasjalikud muudatused konkreetsetes otspunktides (endpoints): OpenAPI spetsifikatsioon ja interaktiivne API viide.
2026-10 · Värvid Dashboardis
- Uus: Koodi detailvaates on kaart Värvid: esiplaan ja taust hex-väärtusena, läbipaistev taust ning eelvaade päris pildimarsruudi kaudu. Kontroll on sama mis
PATCH /v1/codes/{id}puhul: kriitilised paarid vajavad kinnitust, alla 1,5:1 paare ei saa salvestada. - Taastamine must-valgeks annab kõigis neljas vormingus taas samad baidid nagu ilma värvideta. Värvideta koodid ei muutu.
- Läbipaistvad koodid kuvatakse kõigis Dashboardi eelvaadetes malelauamustril. Üksikasjad: Värvid Dashboardis.
2026-10 · Värvid PDF-is ja EPS-is
- Uus:
qr.pdfjaqr.epsjoonistavadfgjabgnii parameetritena kui ka salvestatud värvidena. Must ja kõik halltoonid kirjutatakse halltoonina (ainult must plaat), mis tahes muu värv CMYK-vormingus täisprotsentides, näiteks1F4E79kui C74 M36 Y0 K53. - Taust nagu SVG puhul: Niipea kui värv on valitud, on koodi ja selle vaikse tsooni taga kattev pind, kas valge või
bg.bg=transparentei joonista midagi. Pealkiri jääb mustaks, logo alusplaat valgeks. - Muudatusteta ilma värvideta: Ilma
fg/bgja ilma salvestatud värvideta väljastavad mõlemad vormingud samad baidid nagu varem. Tootepassi PDF jääb värvimata. - Piirangud: puudub ICC-profiil, puudub PDF/X. Üksikasjad: Värvid trükis.
2026-09 · Staatilised koodid ilma suunamisvahemäluta, samaaegne kustutamine
- Muudetud: Staatilised koodid ei asu enam suunamisvahemälus. Nende lühilingi (
redirect_url) avamine loeb alati praegust olekut. Seetõttu ei suuna staatiline kood pärast päringutDELETE /v1/accountjärgmisel avamisel enam edasi (varem võis see toimida kuni 24 tundi). Samuti mõjub paketivahetus staatiliste koodide puhul koheselt. Dünaamilised koodid eemaldatakse konto kustutamisel nagu varemgi. Prinditud staatilised koodid sisaldavad oma sihtkohta otse ja neid see ei mõjuta. - Parandatud: Kaks samaaegset päringut
DELETE /v1/codes/:idsamale koodile tagastavad ühe korra200ja ühe korra404. Webhookqr.deletedsaadetakse täpselt üks kord, varem kaks korda. - Uus: Päringud
POSTjaDELETE /v1/codes/:id/logovastavad koodiga409(errors/conflict), kui mõni teine päring on sama koodi logo samal ajal muutnud, ning ei muuda sel juhul midagi. Varem võis üleslaaditud logo jääda kasutamata salvestatuks. Kaks samaaegset päringutDELETE /v1/codes/:id/logotagastavad mõlemad200. Üksikasjad: Logo.
2026-09 · TypeScript-SDK 1.2.0
- Uut versioonis
@qr3/sdk1.2.0:client.codes.update()võtab vastu parameetriappearanceja tagastab tulemuses kontrastikontrolli leiud väljalissues; leidude puudumisel see väli puudub.client.codes.imageUrl()võtab vastu parameetridfg,bgjaecc. Iga kood, mille API tagastab (get,list,create,update,batchCreate), sisaldab väljutitlejaappearance. - Uuendamine:
npm install @qr3/sdk@latest. Python, Go ja PHP järgnevad. Detailid: SDK-d ja CLI ja Värvide salvestamine koodi juurde.
2026-09 · Muudetud aegumisaeg hakkab kehtima umbes ühe minuti jooksul
- Parandatud: Päring
PATCHväljaleexpires_attühjendab nüüd koodi suunamisvahemälu. Uus aegumisaeg hakkab seega kehtima umbes ühe minuti jooksul, mitte alles kuni 24 tundi hiljem. Eelmise lahenduse puhul tagastas eemaldatud või edasilükatud aegumine kuni 24 tundi edasi koodi410ning praegusele hetkele määratud aegumine laskis suunamisel kuni 24 tundi edasi töötada. - Parandatud: Väljaga
expires_atloodud kood aegub õigeaegselt ka siis, kui aegumine on määratud esimese 24 tunni sisse. - Parandatud: Kui kood kustutatakse ajal, mil selle logo laaditakse üles või eemaldatakse, vastavad
POSTjaDELETE /v1/codes/:id/logostaatusega404ega muuda kustutatud koodi, sarnaselt päringulePATCH. - Parandatud: Ka staatiline kood, mille lühilinki (
redirect_url) on külastatud, salvestatakse suunamisvahemällu. Selle muutmine, peatamine ja kustutamine tühjendavad nüüd samuti vahemälu, mitte ainult dünaamiliste koodide puhul.
2026-09 · Värvide salvestamine koodi juurde
- Uus:
PATCH /v1/codes/:idaktsepteerib parameetritappearancekoos väärtustegaforeground_colorjabackground_color(#RRGGBB, taustaks katransparent).qr.svgjaqr.pngjoonistavad salvestatud värvid ilma parameetriteta; päringu parameeter nagu?fg=000000on endiselt eelistatud. PDF ja EPS joonistavad värve alles hilisemas versioonis. - Kontrastsuse kontroll: Paar, mille suhe on alla 1,5:1, annab tulemuseks
422. Nõrgema kontrastsusega paarid salvestatakse ja neist teavitatakse jaotisesmeta.issuesmärkegawarningvõicritical; läbipaistev taust on alaticritical, seda ei blokeerita kunagi. - Ühendamine: Väljajäetud väljad säilitavad oma salvestatud väärtuse,
nulllähtestab selle. Sama koodi samaaegsed muudatused ei kirjuta enam üksteist üle. - Igas koodi vastuses:
appearanceon olemas igas koodi vastuses ning webhookidesqr.createdjaqr.updated. PäringPOST, partii ja import lükkavad selle tagasi veakoodiga422. - Olemasolevate koodide puhul muudatusi pole: Ilma salvestatud värvideta tagastab iga kood täpselt samad baidid nagu varem. Üksikasjad: Värvide salvestamine koodi juurde.
2026-09 · Värvid ja veaparandus pildimarsruutide parameetritena
- Uus: Kõik neli pildimarsruuti aktsepteerivad parameetreid
fg(esiplaani värv),bg(taustavärv võitransparent) jaecc(veaparandusL,M,Q,H). SVG ja PNG joonistavad värvid; PDF ja EPS aktsepteerivad neid, kuid joonistavad need alles hilisemas versioonis.ecctoimib kõigis neljas vormingus, logo nõuab jätkuvalt tasetH. - Läbipaistev:
bg=transparenttagastab ilma taustata SVG ja tõelise alfakanaliga PNG. Aluspind peab olema hele ja jätma vaikse tsooni vabaks. - Mitte kunagi viga: Vigaseid väärtusi ignoreeritakse; pilt tagastatakse täpselt samasugusena nagu ilma parameetriteta.
- Vahemälu: Iga toimiv parameeter tagastab päise
Cache-Control: public, max-age=300vaikimisi pildi 24 tunni asemel. - Käitumise muutuseta ilma parameetriteta: Mis tahes olemasolev kood tagastab kõigis neljas vormingus täpselt samad baidid nagu varem.
- Saadaval igas paketis. Üksikasjad: Värvid ja veaparandus.
2026-09 · PDF ja EPS manustavad nüüd samuti logo
- Laiendus:
qr.pdfjaqr.epsmanustavad määratud logo nüüd samamoodi naguqr.svgjaqr.png(vt allpool) — manustatud pildina (PDF läbiImage XObject, EPS läbi pildisõnastiku PostScriptis, seal ainult koos%%LanguageLevel: 3märgistusega), tsentreerituna samale alale, koos veaparanduse tõstmisega tasemeleH. Mõlemad formaadid ei väljastanud varem logo; see on nüüd lahendatud. - Vahemälu: Määratud logoga tagastavad nüüd ka
qr.pdfjaqr.epspäiseCache-Control: public, max-age=300tavapärase 24 tunni asemel — täpselt nagu SVG/PNG. - Varulahendus: Kui logo pilti ennast ei saa töödelda (näiteks kahjustatud salvestatud objekt), jääb veaparandus tasemele
H, kuid reserveeritud ala jääb pildi asemel tühjaks — see ei põhjusta kunagi serveritõrget. - Käitumise muutuseta ilma logota: Ilma logota koodid väljastavad
qr.pdf/qr.epsfaile endiselt bait-haaval identselt, muutmata 24-tunnise vahemäluga. - Üksikasjad ja trükijuhised: Logo QR-koodis.
2026-09 · Logo QR-koodis — Dashboard ja API
- Uus: Koodil võib nüüd olla logo keskel. Dashboardis loob koodi üksikasjade leht eraldi logo-kaardi: Vali logo, esmakordsel lisamisel või eemaldamisel kinnita kohustusliku märkeruuduga hoiatus (mõlemad muudavad punktimustrit), seejärel Laadi logo üles/Eemalda logo. Asendamine ei vaja kinnitust — muutub ainult pilt, mitte muster. Roll
viewernäeb staatust ja eelvaadet, kuid mitte ühtegi kolmest toimingust. - API:
POST /v1/codes/{id}/logo(multipart-välifile; PNG, JPEG või WebP, maksimaalselt 1 MB, SVG lükatakse tagasi) loob logo või asendab selle;DELETE /v1/codes/{id}/logoeemaldab selle uuesti ja on idempotentne. Liiga suur pilt tagastab413, toetamata formaat422, rollviewer403. - Renderdamine:
qr.svgjaqr.pngpõimivad logo tegelike pikslitena (512 × 512, normaliseeritud) ja tõstavad selleks veaparanduse tasemeleH. Lisamine ja eemaldamine muudavad seega punktimustrit (M↔H), asendamine mitte.qr.pdfjaqr.epsei põimi logo ja jäävad muutmata. Juba prinditud kood töötab igal juhul edasi, sest kodeeritud sihtkoht ei sõltu logost — uuesti peab printima vaid see, kes soovib (uut) logo välimust ka materjalil näha, ning sealjuures ei tohiks vanu ja uusi prindifaile omavahel segada. - Vahemälu: Määratud logoga tagastavad
qr.svgjaqr.pngpäiseCache-Control: public, max-age=300tavapärase 24 tunni asemel. Üksikasjad, piirangud ja printimisjuhised: Logo QR-koodis.
2026-08 · operationId kõigile 75 operatsioonile ja „millal kasutada“ juhend agentidele
- Täiendus: Kõik OpenAPI spetsifikatsiooni 75 operatsiooni sisaldavad nüüd välja
operationId—listCodes,createCode,getCodeStats,archiveWorkspaceja nii edasi. Seni puudus see väli täielikult, mistõttu pidi iga generaator tuletama meetodi nime HTTP-meetodist ja teest (postV1Codes). Sellised nimed sõltuvad teest ja muutuvad iga tee muutmise korral. Nime kuju on kõigis 75 kohas sama:list/get/create/update/replace/delete, muul juhul äriloogika tegevust väljendav tegusõna (validateDpp,registerGs1Identifier,pingWebhook). Tegusõna järgib äriloogikat, mitte HTTP-meetodit —archiveWorkspaceonDELETE,importDppsonPOST. - Mõju ise genereeritud klientidele: Need, kes genereerivad oma SDK spetsifikatsioonist, saavad järgmisel käivitamisel ümbernimetatud meetodid (
postV1Codes→createCode). See ongi muudatuse eesmärk, kuid tegemist on ümbernimetamisega võõras koodis — seetõttu on see siin eraldi välja toodud. Teed, parameetrid, vastuse vormingud ja staatusekoodid on muutmata; ametlikud SDK-d, CLI ja MCP-server ei ole mõjutatud. - Agentide sissejuhatus: Failis
https://qr3.app/llms.txton jaotis## When to use qr3.app— kuus ülesannet kuue funktsiooni asemel, pluss lause selle kohta, mille jaoks qr3.app ei ole õige tööriist. Sama teavet jagab MCP-server nüüd ühenduse loomisel: päringinitializeaadressilehttps://mcp.qr3.app/mcpvastab väljagainstructions(varem: üksteist tööriista ilma igasuguse liigituseta). Samuti on kirjas, millised päringud vajavad API-võtit —initializejatools/listmitte, kuid igatools/callvajab. - Parandused failis
llms.txt: Nelja andmetust kontrolliti toodangukeskkonnas ja need ei pidanud paika: (1) Pythoni SDKqr3appei ole PyPI-s avaldatud — ridapip installon ilma asenduseta eemaldatud; (2)Accept: text/markdownkehtib avalehe ja blogi kohta, mitte iga serveris renderdatud lehe kohta; (3) kontaktiaadress on[email protected], samuti avalehe JSON-LD-s; (4)/de/security/on ümbersuunamine ankrulinkile, mitte eraldi leht. Uus link:docs.qr3.app/de/skills/. - Tagamine: Kolm kontrolli failis
openapi-spec.test.ts— täielikkus, kordumatus,lowerCamelCase—, igaüks neist mutatsioonitestiga üle kontrollitud. Üheksa täiendavat testi fikseerivad neli parandatud andmetust, et need uuesti ei ilmneks. - Teadaolev piirang: Kaks 75-st operatsioonist on spetsifikatsioonis kirjeldatud, kuid vastavad koodiga
404(GET /v1/codes/{id}/statsjaGET /v1/account). Neile anti siin nimi ja nad kaotavad selle uuesti, kui on otsustatud, kas need luuakse või eemaldatakse.
2026-08 · Paketi taseme alandamised ja tühistamised mõjutavad nüüd ka limiite
- Parandus: Stripe’i webhook kirjutas paketi vahetusel ja tühistamisel ainult paketi nime, mitte organisatsiooni nelja limiidisveergu (
max_workspaces,max_members,max_dynamic_codes,max_scans_per_month). Kuna piirangute rakendamine võtab maksimumi salvestatud väärtusest ja paketi baseline’ist, säilitas madalamale paketile viidud või tühistatud organisatsioon oma vanad, kõrgemad limiidid — downgraadimine oli mõjutu. Webhook määrab nüüd iga tegeliku paketivahetuse korral veerud uue paketi baseline’ile ja tühistamise korral Free-baseline’ile — täpselt nii, nagu admin-haldus juba teeb. - Käitumine: Tellimuse (subscription) rutiinsed uuendused (pikendamine, makseviis, proration) ei puuduta endiselt limiite; individuaalselt antud kõrgemad limiidid jäävad muutumatuks. Alles tegelik paketivahetus viib need uue paketi baseline’ile.
- Mõju: API või vastusevormingu muudatusi ei ole. Organisatsioonid, kelle paketi taset alandati enne seda parandust, säilitavad vanad väärtused, kuni rakendub järgmine paketivahetus või tugi neid kohandab.
2026-08 · Keyset-kursor nüüd kõigil loendi lõpp-punktidel
- Parandus: Kursori parandus lõpp-punktide
GET /v1/codesjaGET /v1/dppjaoks (vt allpool) on nüüd laiendatud kõigile ülejäänud kursoriga lehekülgedeks jagatud loenditele:GET /v1/qr-codes/:id/comments,/v1/workspaces,/v1/gs1/identifiers,/v1/members,/v1/audit-logs,/v1/admin/orgs,/v1/admin/usersja/v1/webhooks/:id/deliveries. Kõik need lehitsesid ainult väljacreated_atalusel; identse ajatempliga read (batch-operatsiooni auditisissekanded, veebikonksude korduskatsed, liikmete impordid) võisid järgmisel lehel kaduma minna. Sorteerimisvõtmeks on nüüd igal pool tuupel(created_at, id). - API muudatus: Nendes loendites on
meta.pagination.next_cursornüüdsest samuti läbipaistmatu väärtus (base64url) palja ajatempli asemel; loetamatud kursorid tagastavad vastuse400, vanu ajatempliga kursoreid aktsepteeritakse üleminekuperioodil edasi. Erand onGET /v1/webhooks/:id/deliveries: seal jääbnext_cursorviimase kohaletoimetamise ID-ks (tundmatu ID → esimene lehekülg). Kliendid, mis tagastavad väärtusenext_cursormuutmata kujul — Töölaud, CLI, SDK-d, MCP —, ei pea midagi muutma. - Mõju: Migratsiooni pole vaja. Kui keegi tundis mõnes neist loenditest (nt auditi logi või kohaletoimetamise logi Töölaual) lehitsemisel puudust mõnest sissekandest: need polnud kunagi kadunud — loendid kuvavad neid nüüdsest täielikult.
2026-08 · Ajatemplid pärast muutmist ja kustutamist taas OpenAPI-ga kooskõlas
- Parandus: Pärast
PATCH /v1/codes/{id}päringut tagastatiupdated_atSQLite-vormingus ilma ajavööndita (2026-08-17 09:00:00), kuigi OpenAPI-spetsifikatsioon lubabformat: date-timeja loomine (POST) tagastab ISO-ajatempli (2026-08-17T09:00:00.000Z). Sama kehtisdeleted_at/updated_atkohta pehme kustutamise puhul ning API-võtmete, organisatsioonide, tööruumide (Workspaces), liikmete, kommentaaride ja veebikonksude (Webhooks) muutmise/kustutamise teede puhul, samuti API-võtmetelast_used_atja veebikonksudelast_triggered_atpuhul. Kõik kirjutusteed kasutavad nüüd ISO 8601 ajatemplit (UTC,TjaZ). - Mõju: Kliendid, mis parsivad
updated_atväärtust funktsiooniganew Date(...)(SDK-d, CLI, Töölaud), lugesid tühikuga vormingut kui kohalikku aega — CLI näitas korra muudetud koodide puhul aega kohaliku nihke võrra nihutatuna (Viin: −2 h). See on lahendatud. Lisaks normaliseerib andmete migratsioon juba salvestatud vana vorminguga väärtused ISO-vormingusse, et sorteerimine ja võrdlused segatud andmete puhul toimiksid õigesti. Väljade nimesid ega vastuse struktuuri ei muudeta. - Taust: Sama veaklass nagu kahel allpool toodud parandusel (API-võtmete aegumine, korduvskannimise piiraeg): SQLite’i
datetime('now')kirjutabYYYY-MM-DD HH:MM:SS, kõik ülejäänud kirjutajad ISO 8601. Lähtekoodi kaitsetest (guard-test) hoiab edaspidi ära uued juhtumid.
2026-08 · Loendi pagineerimine ei kaota enam batch-koode
- Parandus:
GET /v1/codesjaGET /v1/dpppagineerisid varem ainultcreated_atjärgi. Kuid koodid päringutestPOST /v1/codes/batch,POST /v1/dpp/batchja CSV/XLSX-impordist jagavad ühte ajatemplit — niipea kui batch oli suurem kuilimit(vaikimisi 20), ei tagastanud teine lehekülg enam sama ajatempliga ülejäänud ridu. Koodid olid olemas ja kättesaadavad päringugaGET /v1/codes/:id, kuid ei ilmunud kunagi loendisse (Töölaud, CLIqr3 list, SDK-d, MCP). Kursor on nüüd võtmekogum (keyset) üle(created_at, id). - API muudatus:
meta.pagination.next_cursoron nüüdsest läbipaistmatu väärtus (base64url) palja ajatempli asemel. Need, kes edastavad kursori muutmata kujul parameetrina?cursor=— nagu teevad Töölaud, CLI, kõik SDK-d ja MCP-server —, ei pea midagi muutma. Vanu ajatempli kursoreid aktsepteeritakse üleminekuperioodil edasi; loetamatud kursorid tagastavad nüüd koodi400, selle asemel et vaikselt esimene lehekülg tagastada. - Mõju: Kui nägite pärast batch-importi loendis vähem koode, kui tegelikult loodi: koodid ei olnud kunagi kadunud — loend kuvab neid nüüdsest täielikult. Migreerimine pole vajalik.
2026-08 · Turvalisuse korduvskannimised toimuvad taas 24-tunnise intervalliga
- Parandus: Siht-URL-ide ja maandumislehtede linkide (Google Web Risk) perioodiline korduvskannimine jättis vahele koodid, mille viimane skannimine toimus samal kalendripäeval kui 24-tunnine piiraeg — olenevalt kellaajast viibis korduvskannimine kuni ühe päeva võrra. Piiraega arvutatakse nüüd samas ISO-vormingus, milles on salvestatud skannimise ajatemplid.
- Mõju: Siht-URL, mis liigitatakse pärast viimast skannimist ebaturvaliseks, põhjustab taas koodi automaatse peatamise dokumenteeritud 24-tunnise akna jooksul. API või vastuse vormingu muudatusi ei ole.
2026-08 · API-võtmed aeguvad täpselt aegumisajal
- Parandus: API-võtit, mille
expires_atoli samal päeval, aktsepteeriti edasi kuni UTC keskööni. Aegumist võrreldakse nüüd ajatemplina, mitte sõnena — aegunud võti tagastab kohe401. - Taust:
expires_atsalvestatakse ISO-ajatemplina (2026-08-14T09:00:00Z), kuid võrdluspool andis tühikuga vormingu (2026-08-14 09:00:00). Seetõttu klappis toores sõnevõrdlus ainult siis, kui juba kuupäev oli erinev. - Mõju: Migreerimine pole vajalik, päringu
GET /v1/api-keysvastuse vorming jääb muutmata. Loetamatuid aegumisväärtusi loetakse nüüd aegunuks, mitte kehtivaks.
2026-08 · API viide: tenandi haldus dokumenteeritud
- OpenAPI: Spetsifikatsioon — ja seega ka interaktiivne viide — dokumenteerib nüüd organisatsioone (sh
GET /v1/organizations/usage), tööruume (Workspaces), liikmeid ja rolle ning auditiloge. - Arveldus: Pakettide ülevaade (
GET /v1/billing/plans) on avalik; Checkout (POST /v1/billing/checkout) ja Stripe’i kliendiportaal (GET /v1/billing/portal) on määratletud lõpp-punktidena organisatsiooni administraatoritele. - Skannimise eksport: Skannimisstatistika (
GET /v1/codes/{id}/scans) ja toorandmete eksport (…/scans.csv,…/scans.xlsx) on täielikult dokumenteeritud — sealhulgas GDPR-i märkus:ip_hashei sisaldu kunagi ekspordis. - Vigade käitumine: Uuena on dokumenteeritud ka päringu valideerimise
400-vastus: vastuse keha on töötlemata Zod-viga, mitte RFC-7807 probleemidokument — sellest hoolimata väljastatakse see sisutüübigaapplication/problem+json.
2026-08 · Avalike faililinkide kopeerimine
- Dashboard: Koodi detailide lehel olevatel avalikel failidel on nüüd nupp, mis kopeerib nende avaliku lingi lõikelauale – seda saab kohe kasutada QR-koodi siht-URL-ina, kui skannimine peab avama kindla dokumendi failide loendiga maandumislehe asemel.
- API: Failide lõpp-punktid (
/v1/files) tagastavad lisaks väljapublic_url. Väli on määratud ainult failidel, millel onvisibility: public– privaatsed failid avalikku aadressi ei saa. - Käitumine: Link ei vaja sisselogimist ja avab faili otse brauseris. Toiming Asenda jätab selle muutmata, nii et selle lingiga trükitud kood jääb kehtima. Üksikasjad: Failid ja andmelehed.
2026-07 · Meeskonna rollid: Kaastööline ilma kustutamisõiguseta ja administraatori arveldus
- Uus: liikmeroll Kaastööline (kustutamiseta) — loob ja muudab QR-koode, faile ning Digital Product Passports, kuid ei saa midagi kustutada ega API-võtmeid luua. Kõik destruktiivsed lõpp-punktid kontrollivad rolli serveri poolel (
403). - Arveldus: paketi uuendamised ja Stripe kliendiportaal (
POST /v1/billing/checkout,GET /v1/billing/portal) on nüüd reserveeritud organisatsiooni administraatoritele — kõik teised rollid näevad kirjutuskaitstud paketi ülevaadet. - Dashboard: toimingud, mida kasutaja roll ei luba, peidetakse: Vaataja ei näe näiteks loomise, muutmise ega kustutamise nuppe; loendid, allalaadimised ja statistika jäävad nähtavaks. Üksikasjad: Meeskond ja rollid.
2026-06 · Välised lingid koodi maandumislehel
- Maandumisleht: Koodi qr3-majutatud maandumisleht võib nüüd loetleda väliseid, ise majutatud linke (
{ label, url }) lisaks üleslaaditud failidele või nende asemel – näiteks andmelehtede jaoks sinu enda saidil. - API:
POST/PATCH /v1/codesaktsepteerivad massiivilinks(0–20 kirjet,http(s), ≤ 2048 märki). Iga URL kontrollitakse teenusega Google Web Risk; ebaturvaline URL tagastab422. Tühi massiiv kustutab kõik lingid. - Dashboard: Linkide lisamine, ümberjärjestamine ja eemaldamine koodi üksikasjade lehel.
- Turvalisus: Renderdatud lingid jäävad XSS-turvaliseks (escape’itud, ainult
http(s)) ja leht säilitab omanoindexpäise.
2026-04 · Dashboardi analüütika QR-koodi kohta
- Dashboard: QR-koodide loendis olev analüütika nupp avab nüüd vastava QR-koodi statistikalehe aadressil
/dashboard/codes/{id}. - Marsruutimine (Routing): Alias
/dashboard/codessuunab endiselt aadressile/dashboard, kuid ei püüa enam kinni detailseid marsruute nagu/dashboard/codes/{id}. - API: Detailne leht laeb QR-koodi otse päringuga
GET /v1/codes/:id; seetõttu ei sõltu see enam loendi lehekülgede jaotuse (pagination) piirangutest. - Testid: Regressioonitestid katavad aliase ümbersuunamist ja koodi otsest laadimist.
2026-04 · Dashboardi kustutamise dialoog QR-koodidele
- Dashboard: QR-koodide loendis olev prügikasti ikoon avab nüüd brauseri algupärase (native) hüpikakna asemel spetsiaalse Reacti dialoogiakna.
- Tagasiside: Pärast kustutamist kuvatakse edu või vea kohta teavitustekst (toast-teavitus).
- Testid:
packages/dashboard/tests/dashboard.test.tshoiab ära regressioonid funktsioonileconfirm()QR-koodi kustutamise voos.
2026-04 · Dashboardi lühilingi test dünaamilistele QR-koodidele
- Dashboard: QR-koodide loendis olevad lühikoodid (shortcodes) on nüüd otse klõpsatavad väliste ümbersuunamislinkidena. Välimise lingi ikoon näiteks koodi
wu3qaakõrval avab aadressihttps://qr3.app/{shortCode}uuel vahekaardil. - i18n: Lisatud saksa- ja ingliskeelsed vihjetekstid (tooltips).
- Testid:
packages/dashboard/tests/dashboard.test.tskaitseb lingi href-i, uue vahekaardi käitumist, atribuutinoopener noreferrerja ikooni regressioonide eest.
2026-04 · Suunamise Workeri marsruut dünaamilistele QR-koodidele
- Parandus: Dünaamilisi QR-koode aadressil
https://qr3.app/{shortCode}töötleb uuesti suunamise Worker (Redirect Worker). Tootmismarsruut (production route) kasutab nüüd mustritqr3.app/*, kuna Cloudflare Workeri marsruudid ei toeta:codeteekonnaparameetreid. - Tugevdamine: Mittesobivad teed suunatakse edasi maandumislehe algpunkti (landing origin), et suunamise Worker ei blokeeriks tavalisi lehti nagu
/de/pricing. - Testid:
packages/redirect/tests/unit/redirect.test.tskontrollib metamärgi (wildcard) marsruuti, lühikoodi töötlemist ja algpunkti edasisuunamist (origin pass-through).
2026-04 · Tööruumi (Workspace) DPP skannimiste ülevaade (Q3.4.2)
- Uus:
GET /v1/workspace/stats/dpp?days=30— koondab kõik API-võtme tööruumidpp_scansandmed (active_dpps,scans_by_day,top_dppskoos tootenime/kategooriaga). - Dashboard: Kaart avalehel (
/dashboard) koos 30 päeva tulpdiagrammiga + edetabelid — paralleelselt QR-koodi kaartidega. - Avalik: Turunduse lühilink
GET /dpp/dpp_<id>(üks segment) reaalajas demode jaoks, paralleelselt teega/dpp/{gtin}/{serial}.
2026-04 · DPP skannimiste analüütika (Q3.4.1)
- Uus:
GET /v1/dpp/:id/stats?days=30— avaliku GS1 lahendaja (resolver) koondatud skannimised DPP kohta. Väljad:total_scans,period_scans,scans_by_day,top_countries,top_devices,top_representations. - Uus: Tabel
dpp_scans(migratsioon0011) — eraldiseisev tabelistscans(suunamise Worker). IP-aadressid räsivad iga päev roteeruva soolaga (salt), toored IP-aadressid ei jõua kunagi andmebaasi D1. - Dashboard: Mini-graafiku kaart (SVG, ilma graafikute teegita) aadressil
/dashboard/dpp/:dppIdkoos 30 päeva tulpade + top 3 jaotustega. Tühja oleku (empty state) vaade, kui DPP on avalik, kuid pole veel skannimisi saanud.
2026-04 · Reaalajas EL-i vastavuse simulaator (Q3.3.7)
- Uus:
POST /v1/dpp/:id/validate-update— simuleerib osalisi värskendusi olekuta (stateless) (olek, turgude loend jne) ilma andmete salvestamiseta. Vastus sisaldab väljueu_compliance+preview.changed_fields. - Dashboard: Simulaatori kaart DPP detailvaates (
/dashboard/dpp/:dppId) — nupud (chips) riikideleDE/AT/FR/IT/ES/NL+ kohandatud, oleku rippmenüü, Preview EU impact / Save changes / Reset. Mitteblokeeriv RemixiuseFetcherkaudu. - Tugevdamine: Eraldatud simulaatori abifunktsioonid (
readUpdatePatchFromForm,marketCountriesKey) + 18 uut üksustesti (unit tests); veaparandus: üksik mitte-ISO sisend ei kustuta enam turgude loendit.
2026-04 · Reaalajas EL-i vastavuse eelvaade loomisvormis (Q3.3.6)
- Muudetud:
POST /v1/dpp/validatetagastab lisaks väljaeu_compliance— sama validaator misGET /v1/dpp/:id/eu-compliance, olekuta (stateless) enne salvestamist. - Dashboard: Eelvaade olemasoleva valideerimispaneeli all + uus Save-Guard-bänner enne saatmisnuppe (submit), kui esineb lahendamata vigu/hoiatusi (i18n mitmuse vormid DE/EN).
2026-04 · EL-i validaator + tekstiili kasutajaliides (Q3.3.4 + Q3.3.5)
- Uus: EL-i vastavuse validaator 5 tekstiilireegliga (
TEXTILE_AGEC_REQUIRED,TEXTILE_MICROPLASTICS_CONSISTENCY,TEXTILE_SVHC_THRESHOLD,TEXTILE_GREENWASHING,TEXTILE_ESPR_READY). - Uus:
GET /v1/dpp/:id/eu-compliancekoos väljadegacompliant/espr_ready/issues[]/summary. - Dashboard: EL-i vastavuse jaotis (EU-Compliance-Section) DPP detailvaates (kokkuvõtte kaardid, rühmitatud probleemide kaardid, ESPR-Ready-märk päises).
2026-04 · Tekstiili DPP skeem (Q3.3.1–Q3.3.3)
- Uus: Kategooria
textilekoos kohustusliku AGEC-ahelaga (kudumine/silmkoes valmistamine → värvimine/trükkimine → rõivaste valmistamine), kiu kohtaorigin_country+recycled_pct,svhc_substances[], ESPR-Opt-in (PEF, kasutusiga, ringlussevõetavus). - Uus: Baasväli
market_countries: string[](ISO 3166-1 alpha-2) kõikides DPP kategooriates — juhib Prantsusmaa-spetsiifilisi AGEC-reegleid ja prantsuskeelset kohustuslikku tarbijateavet. - Uus: Tarbija HTML-mall koos AGEC mikroplasti hoiatuskastiga, 3-astmelise päritoluahelaga (lipu-mullid), SVHC-loendiga ning vastupidavuse (Durability) ja ringlussevõetavuse (Recyclability) jaotisega.
- Migratsioon:
0010_dpp_market_countries(D1).
2026-04 · DPP hulgisissevedu (Bulk Import) (Q3.2.1–Q3.2.5)
- Uus:
POST /v1/dpp/importtoetab CSV- ja XLSX-vormingut (Worker-ühilduv SheetJSxlsxkaudu, ~283 KB gzip-pakett). - Skaleeritud: paketipõhine limiit (Free 100 → Enterprise 10k) + osadeks jaotatud
db.batch()à 100 + 5 MB päringu keha (body) limiit. - Uus: Veaaruanne CSV-vormingus vastuse 201 väljal
errors_csv;GET /v1/dpp/import/templates/:category?format=csv|xlsxpakub valmis malle aku ja tekstiili jaoks. - Dashboard: Pukseeri (Drag-and-Drop) üleslaadimine aadressil
/dashboard/dpp/importkoos malli puhverserveri (template proxy) ja vahetu CSV-allalaadimisega.
Mitte-katkestavad (Non-Breaking) — LTS-laiendused
Kõik ülaltoodud muudatused on additiivsed (lisanduvad):
- Olemasolevad
POST /v1/dpp/validatekliendid ignoreerivad uut väljaeu_complianceilma muudatusteta. - Olemasolevad
batteryvood on muutmata. market_countrieson valikuline ja selle vaikeväärtus on[].
Katkestavate muudatuste poliitika kohta vaata API versioonihaldus.