Wypróbuj interfejs API dla programistów rozszerzeń
Skorzystaj z tego przewodnika, jeśli chcesz utworzyć rozszerzenie Chastify, hostować stronę rozszerzenia iframe lub wywołać interfejs API dla programistów z własnego zaplecza.
Ta strona stanowi punkt wyjścia: jaki środek transportu wybrać, dokąd najpierw zadzwonić i dokąd się udać.
Aby zapoznać się z konkretnymi zachowaniami rozszerzeń, takimi jak odblokowywanie blokad, wymagane regularne działania, nagrody i kary, zobacz Funkcje API rozszerzeń.
Chcesz po prostu kontrolować swój własny zamek?
Jeśli nie musisz budować publicznego rozszerzenia, strona Zewnętrzne API i programy to najłatwiejszy sposób na rozpoczęcie pracy. Wystarczy utworzyć token DEV i wywołać proste punkty końcowe REST — bez konfiguracji rozszerzenia, bez ramki iframe ani zarządzania sesjami. Obsługuje ona dodawanie/usuwanie czasu, zamrażanie, zadania, polecenia dotyczące urządzeń i wiele innych.
Do czego służy to API
Interfejs API dla programistów rozszerzeń umożliwia tworzenie rozszerzeń innych firm, które działają w sesjach blokady Chastify.
Dzięki niemu możesz:
- Odczyt sesji i kontekstu blokady (
session.getdla rozszerzeń,/api/apps/v1/sessiondla własnej automatyzacji blokady) - Odczytaj dane należące do rozszerzenia na sesję blokady (
state.get) i zapisz je z zaplecza (PUT/PATCH /state) - Przechowuj pliki obrazów będące własnością rozszerzenia w pamięci masowej R2 zarządzanej przez Chastify (
files.*) - Dodaj działania interfejsu użytkownika rozszerzenia na kartach blokady (
metadata.homeActions) - Przepływ odblokowania bramy z blokadami odblokowania należącymi do rozszerzenia (
metadata.unlockBlockers) - Wyzwalaj akcje blokady z zaufanego zaplecza (dodawanie/usuwanie czasu, zamrażanie/odmrażanie, łatanie ustawień)
- Wyzwalacz zadań i działań higienicznych (
task.assign,task.start_timer,task.complete,hygienic_unlock.start) - Prześlij regularne akcje z obsługą liczników/kadencji
- Wysyłaj polecenia dotyczące obsługiwanych urządzeń, jeśli są dostępne
- Zapisuj niestandardowe wpisy w dzienniku rozszerzeń, aby zablokować historię
Co możesz zbudować
Właściwy zestaw funkcji zależy od tego, gdzie panuje zaufanie.
Rozszerzenia iframe przeznaczone wyłącznie dla front-endu umożliwiają tworzenie środowisk zorientowanych na interfejs użytkownika, które nie wymagają mutacji zaufanej blokady:
- Strony konfiguracji gromadzące konfigurację rozszerzeń
- Panele odczytujące kontekst sesji
- Interfejsy użytkownika łamigłówek, list kontrolnych lub gier odczytujące stan sesji i wysyłające zweryfikowany postęp przez zaplecze
- Przepływy oparte na mediach, które odczytują pliki rozszerzeń już zapisane przez Chastify
- Punkty wejścia akcji domowej, które otwierają ramkę iframe z intencją
Rozszerzenia oparte na serwerze mogą tworzyć funkcje powodujące blokadę, ponieważ zaplecze weryfikuje wyniki przed wywołaniem uprzywilejowanych interfejsów API:
- Systemy zadań lub nawyków z wymaganiami odblokowania
- Wymagania dzienne lub tygodniowe z zaplanowanymi karami za pominięte okienko
- Gry, które nagradzają sukces lub karzą porażkę poprzez zmianę czasu blokady
- Przepływy weryfikacji, które usuwają blokady odblokowujące po walidacji po stronie serwera
- Przepływy towarzyszące sterowaniu urządzeniami przy użyciu obsługiwanych poleceń urządzeń
- Przepływy pracy webhooków/baz danych, które utrzymują stan rozszerzenia poza ramką iframe
Programy zewnętrzne służą do prywatnej automatyzacji własnego aktywnego zamka:
- Skrypty lokalne
- Osobiste panele
- Narzędzia automatyzacji wykorzystujące klucz DEV dla całego użytkownika
Wybierz swój tryb
Wybierz jeden z tych trybów:
Hosted iframe extension: hostuj statyczny interfejs użytkownika iframe na Cloudflare Pages lub podobnej usłudze. Użyj mostu do konfiguracji, kontekstu sesji i bezpiecznych odczytów. Nie używaj tego trybu samodzielnie do zapisu stanu, nagród, kar, ukończenia odblokowania ani postępu zaufanych wymagań.Server-backed extension: hostuj interfejs użytkownika iframe i uruchom własny backend. Iframe wysyła kod startowymainTokendo backendu, a backend wywołuje interfejs API rozszerzenia Chastify z kluczem API programisty o zasięgu aplikacji oraz kodemx-chastify-main-token. Użyj tego trybu do akcji uprzywilejowanych, odblokowywania blokad, zaufanego postępu, nagród, kar, webhooków i zewnętrznych baz danych.External API & Programs: użyj klucza DEV dla całego użytkownika w przypadku skryptów, programów lokalnych lub automatyzacji kontrolujących własną aktywną blokadę. Ten tryb nie jest przeznaczony dla użytkowników zewnętrznych instalujących Twoje rozszerzenie.
Jeśli testujesz szybko, zacznij od trybu iframe dla interfejsu użytkownika i bezpiecznych odczytów. Dodaj zaplecze przed wdrożeniem zapisu stanu, zaufanych nagród, zmian czasu, zaplanowanego postępu wymagań lub ukończenia odblokowania blokady.
Kod iframe nie stanowi granicy zaufania. Wszystko, co jest widoczne dla iframe, w tym ładunki hashujące i tokeny uruchomieniowe, może zostać sprawdzone i odtworzone przez użytkownika.
Pierwsze 10 minut (tryb iframe)
- Odczytaj ładunek
location.hashz ramki iframe Chastify. - Utwórz żądanie mostu dla
session.get. - Potwierdź odpowiedź za pomocą
type: "chastify:ext:resp"iok: true. - Stan testu odczytuje się za pomocą
state.get. - Dodaj automatyczną zmianę rozmiaru i obsługę motywu, aby ramka iframe zachowywała się prawidłowo w interfejsie użytkownika.
Obsługa motywu jest częścią gotowej do produkcji ramki iframe. Chastify przekazuje wartości ui w hashu startowym i wysyła aktualizacje motywu na żywo, gdy ramka iframe jest otwarta. Zobacz Motywowanie ramek iframe, aby zapoznać się z przykładami jasnych/ciemnych kolorów i wzorcami Tailwind zapewniającymi bezpieczeństwo kontrastu.
Wymagane wartości ładunku:
bridge.noncebridge.parentOriginsessionIdlockId
Przykładowa prośba o most:
{
"type": "chastify:ext:req",
"v": 1,
"id": "request-id", // unique id per request
"nonce": "nonce-from-hash",
"action": "session.get",
"payload": {}
}
Przykładowa odpowiedź mostu:
{
"type": "chastify:ext:resp",
"v": 1,
"id": "request-id",
"ok": true,
"data": {}
}
Podstawowe działania, których należy się najpierw nauczyć
session.getstate.get
Odczytaj pamięć JSON należącą do rozszerzenia dla sesji blokady. Zapisz stan z zaplecza za pomocą danych uwierzytelniających API dla programistów.files.capabilities,files.list,files.getUżyj odczytu pamięci plików dla multimediów binarnych, takich jak obrazy puzzli lub generowane podglądy. Przechowuj identyfikatory plików w stanie zapisanym przez backend, a następnie odświeżaj podpisane adresy URL za pomocąfiles.get.metadata.getOdczytaj blokady sesji blokowania i odblokowywania oraz akcje/zamiary domowe kart rozszerzeń.regularActions.get
Mutacje sesji, takie jak zapisy stanu, przesyłanie standardowych akcji, przesyłanie/usuwanie plików w czasie wykonywania, zmiany czasu, aktualizacje blokad odblokowujących, ukończenie zadań, uruchamianie higieny i polecenia urządzenia, muszą być wywoływane z poziomu zaplecza za pomocą klucza API dla programistów. Kod iframe przeglądarki nie jest zaufany w przypadku tych akcji.
Pełne adresy URL API (obsługiwane)
Domena bazowa: https://chastify.net
Interfejsy API sesji rozszerzeń (/api/extensions/*)
Te trasy mają różne tryby dostępu. Nie traktuj całej powierzchni /api/extensions/* jako bezpiecznej dla ramek iframe.
Bezpieczne trasy mostów iframe są kierowane przez obiekt nadrzędny Chastify po żądaniach mostu postMessage:
GET https://chastify.net/api/extensions/sessions/:sessionIdGET https://chastify.net/api/extensions/sessions/:sessionId/stateGET https://chastify.net/api/extensions/sessions/:sessionId/metadataGET https://chastify.net/api/extensions/sessions/:sessionId/regular-actionsGET https://chastify.net/api/extensions/sessions/:sessionId/files/capabilitiesGET https://chastify.net/api/extensions/sessions/:sessionId/filesGET https://chastify.net/api/extensions/sessions/:sessionId/files/:fileId
Trasy z zainstalowanymi rozszerzeniami wyłącznie zaplecza wymagają klucza API dla programistów obejmującego aplikację oraz tokenu uruchamiającego iframe:
Authorization: Bearer YOUR_APP_SCOPED_DEVELOPER_KEY
x-chastify-main-token: MAIN_TOKEN_FROM_IFRAME_HASH
Ten dwutokenowy model wiąże żądanie zaplecza zarówno z twórcą rozszerzenia (Authorization), jak i z aktualnie otwartą sesją rozszerzenia (x-chastify-main-token).
PATCH https://chastify.net/api/extensions/sessions/:sessionId/metadataPUT https://chastify.net/api/extensions/sessions/:sessionId/statePATCH https://chastify.net/api/extensions/sessions/:sessionId/statePATCH https://chastify.net/api/extensions/sessions/:sessionId/regular-actions/configPOST https://chastify.net/api/extensions/sessions/:sessionId/regular-actionsPOST https://chastify.net/api/extensions/sessions/:sessionId/filesDELETE https://chastify.net/api/extensions/sessions/:sessionId/files/:fileIdPOST https://chastify.net/api/extensions/sessions/:sessionId/logs/customPOST https://chastify.net/api/extensions/sessions/:sessionId/notifications/customPOST https://chastify.net/api/extensions/sessions/:sessionId/device-commandPOST https://chastify.net/api/extensions/sessions/:sessionId/actionPOST https://chastify.net/api/extensions/sessions/:sessionId/requirements/progress
Interfejsy API tokenów zaplecza (/api/apps/v1/*)
Użyj Authorization: Bearer <user-wide DEV token>. Te punkty końcowe zarządzają aktywnymi sesjami blokady właściciela tokena i są przeznaczone dla zewnętrznych skryptów/programów API, a nie dla zainstalowanych sesji rozszerzeń innych firm.
GET https://chastify.net/api/apps/v1/sessionGET https://chastify.net/api/apps/v1/statePUT https://chastify.net/api/apps/v1/statePATCH https://chastify.net/api/apps/v1/stateGET https://chastify.net/api/apps/v1/metadataPATCH https://chastify.net/api/apps/v1/metadataPOST https://chastify.net/api/apps/v1/actionPOST https://chastify.net/api/apps/v1/lock/apply-timePOST https://chastify.net/api/apps/v1/lock/freezePOST https://chastify.net/api/apps/v1/lock/unfreezePOST https://chastify.net/api/apps/v1/logs/custom
Polecenia mostu iframe
Ładunki poleceń mostu są wysyłane przez ramkę iframe (chastify:ext:req) i kierowane przez element nadrzędny Chastify. Most jest celowo ograniczony do bezpiecznych operacji interfejsu użytkownika/sesji.
session.get->GET https://chastify.net/api/extensions/sessions/:sessionIdstate.get->GET https://chastify.net/api/extensions/sessions/:sessionId/statefiles.capabilities->GET https://chastify.net/api/extensions/sessions/:sessionId/files/capabilitiesfiles.list->GET https://chastify.net/api/extensions/sessions/:sessionId/filesfiles.get->GET https://chastify.net/api/extensions/sessions/:sessionId/files/:fileIdz{ "fileId": "file_record_id" }metadata.get->GET https://chastify.net/api/extensions/sessions/:sessionId/metadataregularActions.get->GET https://chastify.net/api/extensions/sessions/:sessionId/regular-actions
Punkty końcowe mutacji sesji to bezpośrednie wywołania API zaplecza, a nie polecenia mostu iframe. Obejmuje to zapisy stanu, standardowe przesyłanie akcji oraz przesyłanie/usuwanie plików w czasie wykonywania, ponieważ kod iframe może być kontrolowany przez użytkownika.
Przykłady interfejsu API sesji zaplecza
Twój serwer musi wysłać oba nagłówki dla uprzywilejowanych wywołań installed-extension:
Authorization: Bearer YOUR_APP_SCOPED_DEVELOPER_KEY
x-chastify-main-token: MAIN_TOKEN_FROM_IFRAME_HASH
Przykłady działań zaplecza:
metadata.patch->PATCH /api/extensions/sessions/:sessionId/metadataregularActions.submit->POST /api/extensions/sessions/:sessionId/regular-actionsfiles.upload->POST /api/extensions/sessions/:sessionId/filesfiles.delete->DELETE /api/extensions/sessions/:sessionId/files/:fileIdlock.applyTime->POST /api/extensions/sessions/:sessionId/actionz{ "name": "add_time", "params": <deltaSeconds> }lock.freeze->POST /api/extensions/sessions/:sessionId/actionz{ "name": "freeze", "params": { "durationSeconds": 900 } }lock.unfreeze->POST /api/extensions/sessions/:sessionId/actionz{ "name": "unfreeze", "params": {} }lock.settings.patch->POST /api/extensions/sessions/:sessionId/actionz{ "name": "settings.patch", "params": { ... } }task.assign->POST /api/extensions/sessions/:sessionId/actiontask.start_timer->POST /api/extensions/sessions/:sessionId/actionz{ "name": "task.start_timer", "params": {} }task.complete->POST /api/extensions/sessions/:sessionId/actionz{ "name": "task.complete", "params": { "successful": true } }hygienic_unlock.start->POST /api/extensions/sessions/:sessionId/actionz{ "name": "hygienic_unlock.start", "params": { "durationSeconds": 900 } }pillory.end->POST /api/extensions/sessions/:sessionId/actionz{ "name": "pillory.end", "params": {} }device.command->POST /api/extensions/sessions/:sessionId/device-commandlogs.custom->POST /api/extensions/sessions/:sessionId/logs/customnotifications.custom->POST /api/extensions/sessions/:sessionId/notifications/customrequirements.progress->POST /api/extensions/sessions/:sessionId/requirements/progress
Token, zakres, odwołanie i zachowanie audytu
Użyj właściwego tokena dla właściwej granicy zaufania.
Klucze API dla programistów są tajne. Jeśli któryś z nich zostanie ujawniony w kodzie przeglądarki, należy go natychmiast unieważnić i dokonać rotacji zmiennej środowiskowej zaplecza.
Token uruchomienia iframe (mainToken)
- Dostarczane w ramce iframe, gdy użytkownik otwiera stronę zainstalowanego rozszerzenia.
- Widoczny w przeglądarce z założenia. Identyfikuje otwartą sesję rozszerzenia, ale nie jest tajnym hasłem zaplecza.
- Krótkotrwałe. Obecne tokeny startowe wygasają po 10 godzinach; odśwież, ponownie otwierając stronę rozszerzenia.
- Wymagane jako
x-chastify-main-token, gdy zaplecze wywołuje trasy sesji zainstalowanego rozszerzenia, tak aby Chastify mogło powiązać żądanie zaplecza z użytkownikiem/sesją, która otworzyła rozszerzenie. - Nie można używać tej opcji samodzielnie do autoryzacji zmian czasu, odblokowywania zakończenia blokady, kończenia zadań, poleceń urządzenia, przesyłania/usuwania w czasie wykonywania, tworzenia niestandardowych dzienników lub niestandardowych powiadomień.
Klucz API dla programisty w zakresie aplikacji
- Utworzono w interfejsie programisty dla jednej aplikacji rozszerzenia.
- Tajny kod tylko dla zaplecza. Nigdy nie umieszczaj go w ramkach JavaScript iframe, pakietach aplikacji mobilnych, konfiguracji hostingu statycznego ani logach czytelnych dla przeglądarki.
- Używany z
Authorization: Bearer YOUR_APP_SCOPED_DEVELOPER_KEYix-chastify-main-token. - Można wywoływać interfejsy API sesji zainstalowanego rozszerzenia tylko w przypadku sesji zgodnych z aplikacją rozszerzenia i tokenem uruchomienia.
- Nie wygasa automatycznie. Należy go natychmiast cofnąć w przypadku ujawnienia i dokonać rotacji zmiennej środowiskowej zaplecza.
Klucz API dla programisty dla całego użytkownika
- Utworzono w interfejsie programisty bez wybierania aplikacji rozszerzenia.
- Tajny kod dostępny tylko dla zaplecza dla
/api/apps/v1/*. - Kontroluje bieżące i przyszłe sesje blokady właściciela klucza.
- Nie można używać jako poświadczeń zaplecza rozszerzenia innej firmy.
Unieważnienie
- Unieważnione klucze API dla programistów nie pozwalają już na autoryzację nowych żądań.
- Unieważnione klucze można trwale usunąć z interfejsu programisty.
- Nowe uruchomienia iframe otrzymują nowe tokeny uruchomieniowe. Nie przechowuj
mainTokenjako długoterminowego uwierzytelnienia.
Zakresy i role
- Zakresy aplikacji rozszerzeń opisują, czego aplikacja może żądać.
- Bezpieczne wywołania mostów iframe są ograniczone do rozruchu interfejsu użytkownika, odczytu sesji, stanu należącego do rozszerzenia, odczytu metadanych, odczytu zwykłych akcji i odczytu plików.
- Mutacje sesji instalacyjnej z uprawnieniami wymagają poświadczeń zaplecza, nawet jeśli rozszerzenie ma pasujący zakres.
- Akcje zależne od roli mogą nadal zostać odrzucone w zależności od tego, czy uruchomienie należy do użytkownika, czy posiadacza klucza.
Audyt i limity
- Ostatnio użyte metadane klucza API dla programistów są aktualizowane w momencie użycia kluczy.
- Uprzywilejowane trasy akcji mają ograniczoną przepustowość i zwracają jawne błędy, takie jak
server_credentials_requiredlubuser_wide_dev_key_required, gdy użyty zostanie niewłaściwy typ poświadczeń. - Własne logi zapisują widoczne wpisy historii blokad.
- Powiadomienia niestandardowe tworzą powiadomienia Chastify dla żądanego celu.
- Pełne pokrycie audytem każdej uprzywilejowanej mutacji rozszerzenia jest śledzone jako element wzmocnienia produkcji.
Obsługiwane wartości poleceń
/api/extensions/sessions/:sessionId/action i /api/apps/v1/action
name obsługuje:
add_timeremove_timefreezepilloryunfreezetoggle_freezesettings.patchtask.assigntask.start_timertask.completehygienic_unlock.startpillory.end
Ograniczenia działania:
- Akcje zadań wymagają włączenia rozszerzenia/modułu Zadania na blokadzie.
hygienic_unlock.startwymaga włączonego otwierania higienicznego i braku aktywnej sesji higienicznej.
Pomocnicy danych blokady session.get
session.get / GET /api/apps/v1/session zawiera również lockData z przyjaznymi dla środowiska wykonawczego wartościami logicznymi, liczbami i ciągami znaków dla silników reguł.
Przykłady:
- wartości logiczne:
frozen,unlockable,trusted,taskAssigned(true, gdy istnieje otwartyTaskRun) - numery:
timeLockedSeconds,timeRemainingSeconds,maxTimeRemainingSeconds,taskPoints - ciągi:
lockTitle, pola profilu użytkownika/posiadacza klucza
Prywatność:
wearerLastSeenTimestampikeyholderLastSeenTimestampsąnull, gdy użytkownik wyłączył status online (showOnlineStatus === false).
Polecenia urządzenia
Sesje rozszerzone mogą wykorzystywać punkt końcowy oparty na sesji:
POST /api/extensions/sessions/:sessionId/device-command
Programy zewnętrzne z tokenem DEV mogą używać prostszego punktu końcowego v1 (nie jest wymagany identyfikator sesji):
POST /api/apps/v1/device-command
Oba akceptują tę samą treść żądania i zwracają tę samą odpowiedź. Szczegółowe informacje można znaleźć w Zewnętrznym API i programach.
Strona konfiguracji (opcjonalna, zalecana)
Jeśli Twoje rozszerzenie ma interfejs użytkownika konfiguracji/ustawienia:
- Rodzic wysyła
chastify:ext:setup:init(zapisana konfiguracja + kontekst). - Twoja ramka konfiguracji zwraca aktualizacje z kodem
chastify:ext:setup:config. - Rodzic może zażądać bieżącej konfiguracji za pomocą
chastify:ext:setup:get_config.
Przepływ tokenów zaplecza (gdy potrzebne są wywołania po stronie serwera)
W przypadku prostych skryptów i programów zewnętrznych należy użyć tokenu DEV dla całego użytkownika ze strony API dla programistów. Zobacz Zewnętrzne API i programy.
Domyślny przepływ w trybie rozszerzenia iframe:
- Chastify wydaje krótkotrwały, widoczny w przeglądarce token uruchomienia dla aktywnej sesji rozszerzenia.
- Token startowy jest osadzony w treści skrótu iframe jako
mainToken. - Twoja ramka iframe przekazuje
mainTokendo twojego zaplecza. - Twój back-end wywołuje
https://chastify.net/api/extensions/sessions/:sessionId/*za pomocąAuthorization: Bearer <app-scoped Developer API key>ix-chastify-main-token: <mainToken>.
Nie wysyłaj kluczy API dla programistów do kodu iframe/przeglądarki. mainToken identyfikuje otwartą sesję rozszerzenia; nie jest to tajny kod zaplecza i nie może być używany samodzielnie do wykonywania czynności wymagających uprawnień.
Ręczny powrót:
- Jeśli musisz jawnie pobrać/obrócić token uruchamiania ramki iframe z poziomu interfejsu użytkownika, wywołaj
GET https://chastify.net/api/extensions/sessions/:sessionId/auth.
Użyj trybu zaplecza, jeśli potrzebujesz zaplanowanych zadań, webhooków lub automatyzacji, gdy strona Chastify nie jest otwarta. Obecne mutacje sesji z zainstalowanym rozszerzeniem nadal wymagają ważnego 10-godzinnego tokena uruchomienia iframe, więc zadania nienadzorowane powinny przechowywać oczekujący dowód i przesyłać go przy następnym prawidłowym uruchomieniu, chyba że korzystasz z własnego/wbudowanego przepływu serwera przeznaczonego do wykonywania w tle.
Aby zapewnić w pełni bezobsługowe działanie środowiska produkcyjnego, należy preferować przepływ wbudowany/serwerowy lub poczekać na jawne przyznanie rozszerzeń w tle. Interfejsy API sesji o zasięgu aplikacji są obecnie ograniczone tokenem uruchamiania.
Strony zaplecza kontra strony Cloudflare (bez serwera)
Korzystaj z Cloudflare Pages (bez serwera zaplecza), gdy:
- Potrzebujesz najłatwiejszej i najtańszej konfiguracji (którą można hostować bezpłatnie).
- Akcje obsługiwane przez interfejs użytkownika są potrzebne tylko wtedy, gdy użytkownik aktywnie korzysta ze strony rozszerzenia.
- Nie potrzebujesz zapisu stanu rozszerzenia utrwalanego na serwerze.
- Szybko tworzysz prototypy lub lekkie rozszerzenia.
Przykład testowania lokalnego (PowerShell):
cloudflared tunnel --url http://localhost:5174
Podczas testowania użyj wygenerowanego publicznego adresu URL jako adresu URL ramki iframe.
Użyj serwera zaplecza, gdy:
- Potrzebujesz zaplanowanych zadań (zachowanie podobne do cron).
- Potrzebujesz webhooków lub integracji zewnętrznych.
- Potrzebujesz automatyzacji/przetwarzania w tle, gdy nikogo nie ma na stronie rozszerzenia.
- Potrzebujesz przepływów pracy kontrolowanych przez serwer, które muszą działać nieprzerwanie.
Ważne ograniczenie bez zaplecza:
- Brak wykonywania w tle. Rozszerzenie może wykonywać akcje tylko wtedy, gdy użytkownik ma otwartą ramkę iframe rozszerzenia i wchodzi z nią w interakcję.
Typowe problemy
403 extension_not_enabled: rozszerzenie nie jest włączone dla tej blokady.409 lock_ended: blokada nie jest już aktywna.429: osiągnięto limit przepustowości.- Brak odpowiedzi w ramce iframe: sprawdź
nonce,targetOrigin(parentOrigin) i dozwolone pochodzenia.