Przejdź do głównej zawartości

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ń.

wskazówka

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.get dla rozszerzeń, /api/apps/v1/session dla 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:

  1. 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ń.
  2. Server-backed extension: hostuj interfejs użytkownika iframe i uruchom własny backend. Iframe wysyła kod startowy mainToken do backendu, a backend wywołuje interfejs API rozszerzenia Chastify z kluczem API programisty o zasięgu aplikacji oraz kodem x-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.
  3. 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.

uwaga

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)

  1. Odczytaj ładunek location.hash z ramki iframe Chastify.
  2. Utwórz żądanie mostu dla session.get.
  3. Potwierdź odpowiedź za pomocą type: "chastify:ext:resp" i ok: true.
  4. Stan testu odczytuje się za pomocą state.get.
  5. 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.nonce
  • bridge.parentOrigin
  • sessionId
  • lockId

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.get
  • state.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.get Uż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.get Odczytaj 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/:sessionId
  • GET https://chastify.net/api/extensions/sessions/:sessionId/state
  • GET https://chastify.net/api/extensions/sessions/:sessionId/metadata
  • GET https://chastify.net/api/extensions/sessions/:sessionId/regular-actions
  • GET https://chastify.net/api/extensions/sessions/:sessionId/files/capabilities
  • GET https://chastify.net/api/extensions/sessions/:sessionId/files
  • GET 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
informacja

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/metadata
  • PUT https://chastify.net/api/extensions/sessions/:sessionId/state
  • PATCH https://chastify.net/api/extensions/sessions/:sessionId/state
  • PATCH https://chastify.net/api/extensions/sessions/:sessionId/regular-actions/config
  • POST https://chastify.net/api/extensions/sessions/:sessionId/regular-actions
  • POST https://chastify.net/api/extensions/sessions/:sessionId/files
  • DELETE https://chastify.net/api/extensions/sessions/:sessionId/files/:fileId
  • POST https://chastify.net/api/extensions/sessions/:sessionId/logs/custom
  • POST https://chastify.net/api/extensions/sessions/:sessionId/notifications/custom
  • POST https://chastify.net/api/extensions/sessions/:sessionId/device-command
  • POST https://chastify.net/api/extensions/sessions/:sessionId/action
  • POST 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/session
  • GET https://chastify.net/api/apps/v1/state
  • PUT https://chastify.net/api/apps/v1/state
  • PATCH https://chastify.net/api/apps/v1/state
  • GET https://chastify.net/api/apps/v1/metadata
  • PATCH https://chastify.net/api/apps/v1/metadata
  • POST https://chastify.net/api/apps/v1/action
  • POST https://chastify.net/api/apps/v1/lock/apply-time
  • POST https://chastify.net/api/apps/v1/lock/freeze
  • POST https://chastify.net/api/apps/v1/lock/unfreeze
  • POST 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/:sessionId
  • state.get -> GET https://chastify.net/api/extensions/sessions/:sessionId/state
  • files.capabilities -> GET https://chastify.net/api/extensions/sessions/:sessionId/files/capabilities
  • files.list -> GET https://chastify.net/api/extensions/sessions/:sessionId/files
  • files.get -> GET https://chastify.net/api/extensions/sessions/:sessionId/files/:fileId z { "fileId": "file_record_id" }
  • metadata.get -> GET https://chastify.net/api/extensions/sessions/:sessionId/metadata
  • regularActions.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/metadata
  • regularActions.submit -> POST /api/extensions/sessions/:sessionId/regular-actions
  • files.upload -> POST /api/extensions/sessions/:sessionId/files
  • files.delete -> DELETE /api/extensions/sessions/:sessionId/files/:fileId
  • lock.applyTime -> POST /api/extensions/sessions/:sessionId/action z { "name": "add_time", "params": <deltaSeconds> }
  • lock.freeze -> POST /api/extensions/sessions/:sessionId/action z { "name": "freeze", "params": { "durationSeconds": 900 } }
  • lock.unfreeze -> POST /api/extensions/sessions/:sessionId/action z { "name": "unfreeze", "params": {} }
  • lock.settings.patch -> POST /api/extensions/sessions/:sessionId/action z { "name": "settings.patch", "params": { ... } }
  • task.assign -> POST /api/extensions/sessions/:sessionId/action
  • task.start_timer -> POST /api/extensions/sessions/:sessionId/action z { "name": "task.start_timer", "params": {} }
  • task.complete -> POST /api/extensions/sessions/:sessionId/action z { "name": "task.complete", "params": { "successful": true } }
  • hygienic_unlock.start -> POST /api/extensions/sessions/:sessionId/action z { "name": "hygienic_unlock.start", "params": { "durationSeconds": 900 } }
  • pillory.end -> POST /api/extensions/sessions/:sessionId/action z { "name": "pillory.end", "params": {} }
  • device.command -> POST /api/extensions/sessions/:sessionId/device-command
  • logs.custom -> POST /api/extensions/sessions/:sessionId/logs/custom
  • notifications.custom -> POST /api/extensions/sessions/:sessionId/notifications/custom
  • requirements.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.

ostrzeżenie

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_KEY i x-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 mainToken jako 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_required lub user_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_time
  • remove_time
  • freeze
  • pillory
  • unfreeze
  • toggle_freeze
  • settings.patch
  • task.assign
  • task.start_timer
  • task.complete
  • hygienic_unlock.start
  • pillory.end

Ograniczenia działania:

  • Akcje zadań wymagają włączenia rozszerzenia/modułu Zadania na blokadzie.
  • hygienic_unlock.start wymaga 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 otwarty TaskRun)
  • numery: timeLockedSeconds, timeRemainingSeconds, maxTimeRemainingSeconds, taskPoints
  • ciągi: lockTitle, pola profilu użytkownika/posiadacza klucza

Prywatność:

  • wearerLastSeenTimestamp i keyholderLastSeenTimestampnull, 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.

Jeśli Twoje rozszerzenie ma interfejs użytkownika konfiguracji/ustawienia:

  1. Rodzic wysyła chastify:ext:setup:init (zapisana konfiguracja + kontekst).
  2. Twoja ramka konfiguracji zwraca aktualizacje z kodem chastify:ext:setup:config.
  3. 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:

  1. Chastify wydaje krótkotrwały, widoczny w przeglądarce token uruchomienia dla aktywnej sesji rozszerzenia.
  2. Token startowy jest osadzony w treści skrótu iframe jako mainToken.
  3. Twoja ramka iframe przekazuje mainToken do twojego zaplecza.
  4. Twój back-end wywołuje https://chastify.net/api/extensions/sessions/:sessionId/* za pomocą Authorization: Bearer <app-scoped Developer API key> i x-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.

informacja

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.

Następne przewodniki