diff --git a/packages/public/ios-common-cookies/ios/iOSCommonCookiesModule.swift b/packages/public/ios-common-cookies/ios/iOSCommonCookiesModule.swift index eeb55dc..f8f36d2 100644 --- a/packages/public/ios-common-cookies/ios/iOSCommonCookiesModule.swift +++ b/packages/public/ios-common-cookies/ios/iOSCommonCookiesModule.swift @@ -45,6 +45,40 @@ public class iOSCommonCookiesModule: Module { } } + // Clear all cookies from HTTPCookieStorage and WKWebView cookie store. + AsyncFunction("clearAllCookies") { (promise: Promise) in + DispatchQueue.main.async { + // 1) Clear HTTPCookieStorage + let httpStorage = HTTPCookieStorage.shared + let httpCookies = httpStorage.cookies ?? [] + let httpCount = httpCookies.count + for cookie in httpCookies { + httpStorage.deleteCookie(cookie) + } + + // 2) Clear WKWebView cookie store + let cookieStore = WKWebsiteDataStore.default().httpCookieStore + cookieStore.getAllCookies { wkCookies in + let wkCount = wkCookies.count + let group = DispatchGroup() + + for cookie in wkCookies { + group.enter() + cookieStore.delete(cookie) { + group.leave() + } + } + + group.notify(queue: .main) { + promise.resolve([ + "clearedHTTP": httpCount, + "clearedWebView": wkCount + ]) + } + } + } + } + // Best-effort two-way sync: HTTP -> WebView, then WebView -> HTTP. AsyncFunction("syncCookiesBidirectional") { (promise: Promise) in DispatchQueue.main.async { diff --git a/packages/public/ios-common-cookies/src/iOSCommonCookies.ts b/packages/public/ios-common-cookies/src/iOSCommonCookies.ts index 6a4e904..88acc5a 100644 --- a/packages/public/ios-common-cookies/src/iOSCommonCookies.ts +++ b/packages/public/ios-common-cookies/src/iOSCommonCookies.ts @@ -1,6 +1,6 @@ import { NativeModule, requireNativeModule } from "expo-modules-core"; -import type { CookieBidirectionalSyncResult, CookieSyncResult } from "./iOSCommonCookies.types"; +import type { CookieBidirectionalSyncResult, CookieSyncResult, CookieClearResult } from "./iOSCommonCookies.types"; declare class iOSCommonCookiesModule extends NativeModule { /** Copy cookies from HTTPCookieStorage -> WKWebsiteDataStore.default().httpCookieStore */ @@ -9,6 +9,9 @@ declare class iOSCommonCookiesModule extends NativeModule { /** Copy cookies from WKWebsiteDataStore.default().httpCookieStore -> HTTPCookieStorage */ syncCookiesFromWebView(): Promise; + /** Clear all cookies from HTTPCookieStorage and WKWebView cookie store */ + clearAllCookies(): Promise; + /** Best-effort two-way sync (HTTP -> WebView, then WebView -> HTTP) */ syncCookiesBidirectional(): Promise; } diff --git a/packages/public/ios-common-cookies/src/iOSCommonCookies.types.ts b/packages/public/ios-common-cookies/src/iOSCommonCookies.types.ts index 8efd634..4f54be1 100644 --- a/packages/public/ios-common-cookies/src/iOSCommonCookies.types.ts +++ b/packages/public/ios-common-cookies/src/iOSCommonCookies.types.ts @@ -7,3 +7,8 @@ export type CookieBidirectionalSyncResult = CookieSyncResult & { fromHTTP: number; fromWebView: number; }; + +export type CookieClearResult = { + clearedHTTP: number; + clearedWebView: number; +};