Skip to content
Closed
2 changes: 2 additions & 0 deletions src/features/AutoCheckin/utils/autoCheckin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ export function translateAutoCheckinMessageKey(
"autoCheckin:providerFallback.endpointNotSupported",
messageParams,
)
case "autoCheckin:providerFallback.sub2apiDisabled":
return t("autoCheckin:providerFallback.sub2apiDisabled", messageParams)
case "autoCheckin:providerFallback.nativePageIdentityMismatch":
return t(
"autoCheckin:providerFallback.nativePageIdentityMismatch",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ import { createLogger } from "~/utils/core/logger"
import { getPreferenceWriteFailureMessage } from "~/utils/core/toastHelpers"
import { pushWithinOptionsPage } from "~/utils/navigation"

import { AUTO_CHECKIN_SUB2API_TARGET_ID } from "./targetIds"

/**
* Unified logger scoped to the Basic Settings auto check-in section.
*/
Expand Down Expand Up @@ -231,6 +233,22 @@ export default function AutoCheckinSettings() {
}
/>

{/* Sub2API check-in opt-in */}
<CardItem
id={AUTO_CHECKIN_SUB2API_TARGET_ID}
title={t("autoCheckin:settings.sub2apiEnabled")}
description={t("autoCheckin:settings.sub2apiEnabledDesc")}
rightContent={
<Switch
checked={preferences.sub2apiEnabled}
onChange={(checked) =>
savePreferences({ sub2apiEnabled: checked })
}
disabled={isSaving}
/>
}
/>

{/* Time Window Start */}
<CardItem
id="auto-checkin-window-start"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import {
} from "~/entrypoints/options/search/registryHelpers"
import type { OptionsSearchItemDefinition } from "~/entrypoints/options/search/types"

import { AUTO_CHECKIN_SUB2API_TARGET_ID } from "./targetIds"

export const checkinRedeemSearchSections: OptionsSearchItemDefinition[] = [
buildSectionDefinition(
"section:auto-checkin",
Expand Down Expand Up @@ -39,6 +41,22 @@ export const checkinRedeemSearchControls: OptionsSearchItemDefinition[] = [
keywords: ["auto checkin", "check-in", "sign in"],
},
),
buildControlDefinition(
"control:auto-checkin-sub2api-enable",
"checkinRedeem",
AUTO_CHECKIN_SUB2API_TARGET_ID,
"autoCheckin:settings.sub2apiEnabled",
578,
{
descriptionKey: "autoCheckin:settings.sub2apiEnabledDesc",
breadcrumbsKeys: [
...DEFAULT_BREADCRUMBS,
"settings:tabs.checkinRedeem",
"autoCheckin:settings.title",
],
keywords: ["sub2api", "auto checkin", "check-in"],
},
),
buildControlDefinition(
"control:auto-checkin-window-start",
"checkinRedeem",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export const AUTO_CHECKIN_SUB2API_TARGET_ID =
"auto-checkin-sub2api-enable" as const
3 changes: 3 additions & 0 deletions src/locales/en/autoCheckin.json
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,7 @@
"nativePageStatusUnconfirmed": "The page check-in action was clicked, but the target account status was not confirmed. Please open the check-in page and check manually: {{checkInUrl}}",
"nativePageTargetNotFound": "The check-in button could not be found on the page. Please open the check-in page and complete check-in manually: {{checkInUrl}}",
"nativePageTriggerFailed": "The page check-in action could not be triggered. Please open the check-in page and complete check-in manually: {{checkInUrl}}",
"sub2apiDisabled": "Sub2API check-in is disabled. Enable it under Basic Settings → Check-in & Redeem.",
"turnstileIncognitoAccessRequired": "The extension must be allowed to run in Incognito/Private windows to fetch the Turnstile token in a private temporary window (multi-account scenario). Please enable \"Allow in incognito\" for this extension and retry, or open the check-in page to complete verification: {{checkInUrl}}",
"turnstileManualRequired": "Cloudflare Turnstile verification is required. Please open the check-in page to complete verification: {{checkInUrl}}",
"unknownError": "Unknown error occurred"
Expand All @@ -150,6 +151,8 @@
"scheduleModeDeterministic": "Deterministic",
"scheduleModeRandom": "Random",
"scheduleModeTitle": "Schedule mode",
"sub2apiEnabled": "Enable Sub2API check-in",
"sub2apiEnabledDesc": "Sub2API upstream ships no check-in endpoint; only some deployments and forks serve one. Turn this on to detect and run check-in for Sub2API accounts.",
"title": "Auto Check-in",
"viewExecution": "Auto check-in history",
"viewExecutionButton": "Open results",
Expand Down
1 change: 1 addition & 0 deletions src/locales/en/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,7 @@
"updateFailed": "Failed to update account"
},
"sub2api": {
"checkinUnsupported": "This Sub2API site does not expose a check-in endpoint.",
"createRequiresAvailableGroup": "This account has no group available for key creation. Check the account's available groups and try again.",
"groupMissing": "Sub2API group '{{group}}' is no longer available. Refresh the group list and try again.",
"loginRequired": "Please log in to the Sub2API dashboard first (so the extension can read auth_token/auth_user from localStorage) and try again.",
Expand Down
3 changes: 3 additions & 0 deletions src/locales/es-419/autoCheckin.json
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@
"nativePageStatusUnconfirmed": "Se hizo clic en la acción de check-in de la página, pero no se confirmó el estado de la cuenta de destino. Abre la página de check-in y revisa manualmente: {{checkInUrl}}",
"nativePageTargetNotFound": "No se pudo encontrar el botón de check-in en la página. Abre la página de check-in y completa el check-in manualmente: {{checkInUrl}}",
"nativePageTriggerFailed": "No se pudo activar la acción de check-in de la página. Abre la página de check-in y completa el check-in manualmente: {{checkInUrl}}",
"sub2apiDisabled": "El registro diario de Sub2API está desactivado. Actívalo en Configuración básica → Registro y canje.",
"turnstileIncognitoAccessRequired": "La extensión debe tener permiso para ejecutarse en ventanas de incógnito/privadas para obtener el token de Turnstile en una ventana temporal privada (escenario multi-cuenta). Habilita \"Permitir en incógnito\" para esta extensión y reintenta, o abre la página de check-in para completar la verificación: {{checkInUrl}}",
"turnstileManualRequired": "Se requiere verificación de Cloudflare Turnstile. Abre la página de check-in para completar la verificación: {{checkInUrl}}",
"unknownError": "Ocurrió un error desconocido"
Expand All @@ -152,6 +153,8 @@
"scheduleModeDeterministic": "Determinista",
"scheduleModeRandom": "Aleatorio",
"scheduleModeTitle": "Modo de programación",
"sub2apiEnabled": "Activar el registro diario de Sub2API",
"sub2apiEnabledDesc": "El proyecto original de Sub2API no incluye un endpoint de registro diario; solo algunos despliegues y forks lo ofrecen. Actívalo para detectar y ejecutar el registro de las cuentas de Sub2API.",
"title": "Check-in automático",
"viewExecution": "Historial de check-in automático",
"viewExecutionButton": "Abrir resultados",
Expand Down
1 change: 1 addition & 0 deletions src/locales/es-419/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,7 @@
"updateFailed": "No se pudo actualizar la cuenta"
},
"sub2api": {
"checkinUnsupported": "Este sitio de Sub2API no expone un endpoint de registro diario.",
"createRequiresAvailableGroup": "Esta cuenta no tiene ningún grupo disponible para crear claves. Revisa los grupos disponibles de la cuenta y vuelve a intentarlo.",
"groupMissing": "El grupo de Sub2API '{{group}}' ya no está disponible. Actualiza la lista de grupos y vuelve a intentarlo.",
"loginRequired": "Primero inicia sesión en el panel de Sub2API (para que la extensión pueda leer auth_token/auth_user desde localStorage) y vuelve a intentarlo.",
Expand Down
3 changes: 3 additions & 0 deletions src/locales/ja/autoCheckin.json
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@
"nativePageStatusUnconfirmed": "ページ上のチェックイン操作はクリックされましたが、対象アカウントの状態を確認できませんでした。チェックインページを開いて手動で確認してください: {{checkInUrl}}",
"nativePageTargetNotFound": "ページ上でチェックインボタンが見つかりませんでした。チェックインページを開いて手動で完了してください: {{checkInUrl}}",
"nativePageTriggerFailed": "ページ上のチェックイン操作を実行できませんでした。チェックインページを開いて手動で完了してください: {{checkInUrl}}",
"sub2apiDisabled": "Sub2API のチェックインが無効です。「基本設定 → チェックインと交換」で有効にしてください。",
"turnstileIncognitoAccessRequired": "プライベート一時ウィンドウで Turnstile トークンを取得するには、拡張機能のシークレット / プライベートウィンドウ実行を許可する必要があります(複数アカウントの場面)。この拡張機能の「シークレットモードでの実行を許可」を有効にして再試行するか、チェックインページを開いて認証を完了してください: {{checkInUrl}}",
"turnstileManualRequired": "Cloudflare Turnstile 認証が必要です。チェックインページを開いて認証を完了してください: {{checkInUrl}}",
"unknownError": "不明なエラーが発生しました"
Expand All @@ -148,6 +149,8 @@
"scheduleModeDeterministic": "固定",
"scheduleModeRandom": "ランダム",
"scheduleModeTitle": "スケジュールモード",
"sub2apiEnabled": "Sub2API のチェックインを有効化",
"sub2apiEnabledDesc": "Sub2API の本家にはチェックイン用のエンドポイントがなく、一部のデプロイやフォークのみが対応しています。有効にすると Sub2API アカウントのチェックインを検出して実行します。",
"title": "自動チェックイン",
"viewExecution": "自動チェックイン履歴",
"viewExecutionButton": "結果を開く",
Expand Down
1 change: 1 addition & 0 deletions src/locales/ja/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,7 @@
"updateFailed": "アカウントの更新に失敗しました"
},
"sub2api": {
"checkinUnsupported": "この Sub2API サイトはチェックイン用のエンドポイントを提供していません。",
"createRequiresAvailableGroup": "このアカウントにはキー作成に使えるグループがありません。利用可能なグループ設定を確認してから再試行してください。",
"groupMissing": "Sub2API グループ '{{group}}' は現在利用できません。グループ一覧を更新して再試行してください。",
"loginRequired": "先に Sub2API ダッシュボードへログインして(拡張機能が localStorage から auth_token / auth_user を読めるようにして)、再試行してください。",
Expand Down
3 changes: 3 additions & 0 deletions src/locales/pt-BR/autoCheckin.json
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@
"nativePageStatusUnconfirmed": "A ação de check-in da página foi clicada, mas o status da conta de destino não foi confirmado. Por favor, abra a página de check-in e verifique manualmente: {{checkInUrl}}",
"nativePageTargetNotFound": "O botão de check-in não foi encontrado na página. Abra a página de check-in e conclua o check-in manualmente: {{checkInUrl}}",
"nativePageTriggerFailed": "A ação de check-in da página não pôde ser acionada. Abra a página de check-in e conclua o check-in manualmente: {{checkInUrl}}",
"sub2apiDisabled": "O check-in do Sub2API está desativado. Ative-o em Configurações básicas → Check-in e resgate.",
"turnstileIncognitoAccessRequired": "A extensão deve ter permissão para ser executada em janelas anônimas/privadas para buscar o token Turnstile em uma janela temporária privada (cenário de múltiplas contas). Ative \"Permitir modo anônimo\" para esta extensão e tente novamente ou abra a página de check-in para concluir a verificação: {{checkInUrl}}",
"turnstileManualRequired": "A verificação Cloudflare Turnstile é necessária. Abra a página de check-in para concluir a verificação: {{checkInUrl}}",
"unknownError": "Ocorreu um erro desconhecido"
Expand All @@ -152,6 +153,8 @@
"scheduleModeDeterministic": "Determinístico",
"scheduleModeRandom": "Aleatório",
"scheduleModeTitle": "Modo de programação",
"sub2apiEnabled": "Ativar check-in do Sub2API",
"sub2apiEnabledDesc": "O projeto original do Sub2API não inclui um endpoint de check-in; apenas alguns deployments e forks o oferecem. Ative para detectar e executar o check-in das contas Sub2API.",
"title": "Check-in automático",
"viewExecution": "Histórico de check-in automático",
"viewExecutionButton": "Abrir resultados",
Expand Down
1 change: 1 addition & 0 deletions src/locales/pt-BR/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,7 @@
"updateFailed": "Falha ao atualizar conta"
},
"sub2api": {
"checkinUnsupported": "Este site Sub2API não expõe um endpoint de check-in.",
"createRequiresAvailableGroup": "Esta conta não possui nenhum grupo disponível para criação de chave. Verifique os grupos disponíveis da conta e tente novamente.",
"groupMissing": "O grupo '{{group}}' do Sub2API não está mais disponível. Atualize a lista de grupos e tente novamente.",
"loginRequired": "Faça login no painel do Sub2API primeiro (para que a extensão possa ler auth_token/auth_user do localStorage) e tente novamente.",
Expand Down
3 changes: 3 additions & 0 deletions src/locales/vi/autoCheckin.json
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@
"nativePageStatusUnconfirmed": "Đã bấm thao tác điểm danh trên trang, nhưng chưa xác nhận được trạng thái của tài khoản mục tiêu. Vui lòng mở trang điểm danh để kiểm tra thủ công: {{checkInUrl}}",
"nativePageTargetNotFound": "Không tìm thấy nút điểm danh trên trang. Vui lòng mở trang điểm danh và hoàn tất thủ công: {{checkInUrl}}",
"nativePageTriggerFailed": "Không thể kích hoạt thao tác điểm danh trên trang. Vui lòng mở trang điểm danh và hoàn tất thủ công: {{checkInUrl}}",
"sub2apiDisabled": "Điểm danh Sub2API đang tắt. Hãy bật trong Cài đặt cơ bản → Điểm danh và đổi thưởng.",
"turnstileIncognitoAccessRequired": "Cần cho phép tiện ích mở rộng chạy ở chế độ ẩn danh để nhận Turnstile Token trên trang ẩn danh (kịch bản nhiều tài khoản). Vui lòng bật \"Cho phép chạy ở chế độ ẩn danh\" trong trang quản lý tiện ích mở rộng và thử lại; hoặc mở trang điểm danh theo cách thủ công để hoàn tất xác minh: {{checkInUrl}}",
"turnstileManualRequired": "Cần hoàn tất xác minh Cloudflare Turnstile, vui lòng mở trang điểm danh để hoàn tất xác minh: {{checkInUrl}}",
"unknownError": "Đã xảy ra lỗi không xác định"
Expand All @@ -148,6 +149,8 @@
"scheduleModeDeterministic": "Thời gian cố định",
"scheduleModeRandom": "Ngẫu nhiên",
"scheduleModeTitle": "Chế độ kế hoạch",
"sub2apiEnabled": "Bật điểm danh Sub2API",
"sub2apiEnabledDesc": "Bản gốc Sub2API không cung cấp endpoint điểm danh; chỉ một số bản triển khai và fork hỗ trợ. Bật tùy chọn này để phát hiện và chạy điểm danh cho tài khoản Sub2API.",
"title": "Điểm danh tự động",
"viewExecution": "Xem lịch sử điểm danh",
"viewExecutionButton": "Mở hồ sơ",
Expand Down
1 change: 1 addition & 0 deletions src/locales/vi/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,7 @@
"updateFailed": "Cập nhật tài khoản thất bại"
},
"sub2api": {
"checkinUnsupported": "Trang Sub2API này không cung cấp endpoint điểm danh.",
"createRequiresAvailableGroup": "Tài khoản hiện tại không có nhóm khả dụng để tạo khóa, vui lòng kiểm tra tình trạng nhóm của tài khoản trước khi thử lại.",
"groupMissing": "Nhóm Sub2API \"{{group}}\" không còn khả dụng. Vui lòng làm mới danh sách nhóm rồi thử lại.",
"loginRequired": "Vui lòng đăng nhập vào bảng điều khiển Sub2API (tiện ích sẽ đọc auth_token/auth_user để nhập phiên) rồi thử lại.",
Expand Down
3 changes: 3 additions & 0 deletions src/locales/zh-CN/autoCheckin.json
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@
"nativePageStatusUnconfirmed": "已点击页面签到操作,但未确认目标账号完成签到。请打开签到页面手动确认:{{checkInUrl}}",
"nativePageTargetNotFound": "未在页面上找到签到按钮。请打开签到页面手动完成签到:{{checkInUrl}}",
"nativePageTriggerFailed": "无法触发页面签到操作。请打开签到页面手动完成签到:{{checkInUrl}}",
"sub2apiDisabled": "Sub2API 签到未启用,请先在「基础设置 → 签到与兑换」中开启。",
"turnstileIncognitoAccessRequired": "需要允许扩展在无痕模式运行,才能在无痕页面获取 Turnstile Token(多账号场景)。请在扩展管理页开启“允许在无痕模式运行”后重试;或手动打开签到页面完成验证:{{checkInUrl}}",
"turnstileManualRequired": "需要完成 Cloudflare Turnstile 验证,请打开签到页面完成验证:{{checkInUrl}}",
"unknownError": "发生未知错误"
Expand All @@ -148,6 +149,8 @@
"scheduleModeDeterministic": "固定时间",
"scheduleModeRandom": "随机",
"scheduleModeTitle": "计划模式",
"sub2apiEnabled": "启用 Sub2API 签到",
"sub2apiEnabledDesc": "Sub2API 上游主线未提供签到接口,仅部分站点或分支支持。开启后才会检测并执行 Sub2API 账号的签到。",
"title": "自动签到",
"viewExecution": "查看签到历史",
"viewExecutionButton": "打开记录",
Expand Down
1 change: 1 addition & 0 deletions src/locales/zh-CN/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,7 @@
"updateFailed": "更新账号失败"
},
"sub2api": {
"checkinUnsupported": "该 Sub2API 站点未提供签到接口。",
"createRequiresAvailableGroup": "当前账号没有可用于创建密钥的分组,请先确认账号分组情况后再试。",
"groupMissing": "Sub2API 分组“{{group}}”已不可用。请刷新分组列表后重试。",
"loginRequired": "请先登录 Sub2API 控制台(插件会读取 auth_token/auth_user 用于导入会话)后再重试。",
Expand Down
3 changes: 3 additions & 0 deletions src/locales/zh-TW/autoCheckin.json
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@
"nativePageStatusUnconfirmed": "已點擊頁面簽到操作,但未確認目標帳號完成簽到。請開啟簽到頁面手動確認:{{checkInUrl}}",
"nativePageTargetNotFound": "未在頁面上找到簽到按鈕。請開啟簽到頁面手動完成簽到:{{checkInUrl}}",
"nativePageTriggerFailed": "無法觸發頁面簽到操作。請開啟簽到頁面手動完成簽到:{{checkInUrl}}",
"sub2apiDisabled": "Sub2API 簽到未啟用,請先在「基本設定 → 簽到與兌換」中開啟。",
"turnstileIncognitoAccessRequired": "需要允許擴充套件在無痕模式執行,才能在無痕頁面獲取 Turnstile Token(多帳號場景)。請在擴充套件管理頁開啟“允許在無痕模式執行”後重試;或手動開啟簽到頁面完成驗證:{{checkInUrl}}",
"turnstileManualRequired": "需要完成 Cloudflare Turnstile 驗證,請開啟簽到頁面完成驗證:{{checkInUrl}}",
"unknownError": "發生未知錯誤"
Expand All @@ -148,6 +149,8 @@
"scheduleModeDeterministic": "固定時間",
"scheduleModeRandom": "隨機",
"scheduleModeTitle": "計劃模式",
"sub2apiEnabled": "啟用 Sub2API 簽到",
"sub2apiEnabledDesc": "Sub2API 上游主線未提供簽到介面,僅部分站點或分支支援。開啟後才會偵測並執行 Sub2API 帳號的簽到。",
"title": "自動簽到",
"viewExecution": "檢視簽到歷史",
"viewExecutionButton": "開啟記錄",
Expand Down
1 change: 1 addition & 0 deletions src/locales/zh-TW/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,7 @@
"updateFailed": "更新帳號失敗"
},
"sub2api": {
"checkinUnsupported": "此 Sub2API 站點未提供簽到介面。",
"createRequiresAvailableGroup": "目前這個帳號沒有可用於建立金鑰的分組,請先確認帳號分組情況後再試。",
"groupMissing": "Sub2API 分組“{{group}}”已不可用。請重新整理分組列表後重試。",
"loginRequired": "請先登入 Sub2API 控制台(外掛會讀取 auth_token/auth_user 用於匯入會話)後再重試。",
Expand Down
4 changes: 3 additions & 1 deletion src/services/accountSiteDefinitions/definitions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,9 @@ const ACCOUNT_SITE_DEFINITIONS = [
defaultAuthType: ACCOUNT_SITE_AUTH_TYPES.AccessToken,
defaultAuthHostnames: [],
supportsCookieAuth: false,
supportsBuiltInCheckInDetection: false,
// Daily check-in is fork-only upstream, so the capability is exposed
// here and gated at runtime by the global Sub2API check-in opt-in.
supportsBuiltInCheckInDetection: true,
},
authSession: {
kind: ACCOUNT_SITE_SUPPLEMENTAL_AUTH_KINDS.Sub2ApiRefreshToken,
Expand Down
Loading
Loading