@telefonica/ios-common-cookies 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # iOS Common Cookies
2
+
3
+ Expo module to sync cookies between HTTPCookieStorage and WKWebView.
@@ -0,0 +1,22 @@
1
+ import { NativeModule } from 'expo-modules-core';
2
+
3
+ type CookieSyncResult = {
4
+ synced: number;
5
+ cookieNames: string[];
6
+ };
7
+ type CookieBidirectionalSyncResult = CookieSyncResult & {
8
+ fromHTTP: number;
9
+ fromWebView: number;
10
+ };
11
+
12
+ declare class iOSCommonCookiesModule extends NativeModule {
13
+ /** Copy cookies from HTTPCookieStorage -> WKWebsiteDataStore.default().httpCookieStore */
14
+ syncCookiesToWebView(): Promise<CookieSyncResult>;
15
+ /** Copy cookies from WKWebsiteDataStore.default().httpCookieStore -> HTTPCookieStorage */
16
+ syncCookiesFromWebView(): Promise<CookieSyncResult>;
17
+ /** Best-effort two-way sync (HTTP -> WebView, then WebView -> HTTP) */
18
+ syncCookiesBidirectional(): Promise<CookieBidirectionalSyncResult>;
19
+ }
20
+ declare const _default: iOSCommonCookiesModule;
21
+
22
+ export { type CookieBidirectionalSyncResult, type CookieSyncResult, _default as default };
@@ -0,0 +1,22 @@
1
+ import { NativeModule } from 'expo-modules-core';
2
+
3
+ type CookieSyncResult = {
4
+ synced: number;
5
+ cookieNames: string[];
6
+ };
7
+ type CookieBidirectionalSyncResult = CookieSyncResult & {
8
+ fromHTTP: number;
9
+ fromWebView: number;
10
+ };
11
+
12
+ declare class iOSCommonCookiesModule extends NativeModule {
13
+ /** Copy cookies from HTTPCookieStorage -> WKWebsiteDataStore.default().httpCookieStore */
14
+ syncCookiesToWebView(): Promise<CookieSyncResult>;
15
+ /** Copy cookies from WKWebsiteDataStore.default().httpCookieStore -> HTTPCookieStorage */
16
+ syncCookiesFromWebView(): Promise<CookieSyncResult>;
17
+ /** Best-effort two-way sync (HTTP -> WebView, then WebView -> HTTP) */
18
+ syncCookiesBidirectional(): Promise<CookieBidirectionalSyncResult>;
19
+ }
20
+ declare const _default: iOSCommonCookiesModule;
21
+
22
+ export { type CookieBidirectionalSyncResult, type CookieSyncResult, _default as default };
package/dist/index.js ADDED
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ default: () => iOSCommonCookies_default
24
+ });
25
+ module.exports = __toCommonJS(index_exports);
26
+
27
+ // src/iOSCommonCookies.ts
28
+ var import_expo_modules_core = require("expo-modules-core");
29
+ var iOSCommonCookies_default = (0, import_expo_modules_core.requireNativeModule)("iOSCommonCookies");
package/dist/index.mjs ADDED
@@ -0,0 +1,6 @@
1
+ // src/iOSCommonCookies.ts
2
+ import { requireNativeModule } from "expo-modules-core";
3
+ var iOSCommonCookies_default = requireNativeModule("iOSCommonCookies");
4
+ export {
5
+ iOSCommonCookies_default as default
6
+ };
@@ -0,0 +1,6 @@
1
+ {
2
+ "platforms": ["apple"],
3
+ "apple": {
4
+ "modules": ["iOSCommonCookiesModule"]
5
+ }
6
+ }
@@ -0,0 +1,22 @@
1
+ Pod::Spec.new do |s|
2
+ s.name = 'iOSCommonCookies'
3
+ s.version = '1.0.0'
4
+ s.summary = 'Sync cookies between HTTPCookieStorage and WKWebView'
5
+ s.description = 'Expo iOS module that syncs cookies between HTTPCookieStorage and WKWebsiteDataStore.httpCookieStore.'
6
+ s.author = 'Telefónica'
7
+ s.homepage = 'https://github.com/telefonica/platform-react-native-modules'
8
+ s.platforms = {
9
+ :ios => '13.0'
10
+ }
11
+ s.source = { git: 'https://github.com/telefonica/platform-react-native-modules.git', tag: s.version.to_s }
12
+ s.static_framework = true
13
+
14
+ s.dependency 'ExpoModulesCore'
15
+
16
+ # Swift/Objective-C compatibility
17
+ s.pod_target_xcconfig = {
18
+ 'DEFINES_MODULE' => 'YES',
19
+ }
20
+
21
+ s.source_files = "**/*.{h,m,mm,swift,hpp,cpp}"
22
+ end
@@ -0,0 +1,79 @@
1
+ import ExpoModulesCore
2
+ import WebKit
3
+
4
+ public class iOSCommonCookiesModule: Module {
5
+ public func definition() -> ModuleDefinition {
6
+ Name("iOSCommonCookies")
7
+
8
+ // Copy cookies from HTTPCookieStorage -> WKWebView cookie store.
9
+ AsyncFunction("syncCookiesToWebView") { (promise: Promise) in
10
+ DispatchQueue.main.async {
11
+ let cookieStore = WKWebsiteDataStore.default().httpCookieStore
12
+ let cookies = HTTPCookieStorage.shared.cookies ?? []
13
+ var cookieNames: [String] = []
14
+
15
+ for cookie in cookies {
16
+ cookieNames.append(cookie.name)
17
+ cookieStore.setCookie(cookie)
18
+ }
19
+
20
+ promise.resolve([
21
+ "synced": cookies.count,
22
+ "cookieNames": cookieNames
23
+ ])
24
+ }
25
+ }
26
+
27
+ // Copy cookies from WKWebView cookie store -> HTTPCookieStorage.
28
+ AsyncFunction("syncCookiesFromWebView") { (promise: Promise) in
29
+ DispatchQueue.main.async {
30
+ let cookieStore = WKWebsiteDataStore.default().httpCookieStore
31
+
32
+ cookieStore.getAllCookies { cookies in
33
+ var cookieNames: [String] = []
34
+
35
+ for cookie in cookies {
36
+ cookieNames.append(cookie.name)
37
+ HTTPCookieStorage.shared.setCookie(cookie)
38
+ }
39
+
40
+ promise.resolve([
41
+ "synced": cookies.count,
42
+ "cookieNames": cookieNames
43
+ ])
44
+ }
45
+ }
46
+ }
47
+
48
+ // Best-effort two-way sync: HTTP -> WebView, then WebView -> HTTP.
49
+ AsyncFunction("syncCookiesBidirectional") { (promise: Promise) in
50
+ DispatchQueue.main.async {
51
+ let cookieStore = WKWebsiteDataStore.default().httpCookieStore
52
+ let httpCookies = HTTPCookieStorage.shared.cookies ?? []
53
+
54
+ // 1) HTTP -> WebView
55
+ for cookie in httpCookies {
56
+ cookieStore.setCookie(cookie)
57
+ }
58
+
59
+ // 2) WebView -> HTTP
60
+ cookieStore.getAllCookies { webViewCookies in
61
+ for cookie in webViewCookies {
62
+ HTTPCookieStorage.shared.setCookie(cookie)
63
+ }
64
+
65
+ let httpCookieNames = Set(httpCookies.map { $0.name })
66
+ let webViewCookieNames = Set(webViewCookies.map { $0.name })
67
+ let allCookieNames = httpCookieNames.union(webViewCookieNames)
68
+
69
+ promise.resolve([
70
+ "synced": allCookieNames.count,
71
+ "cookieNames": Array(allCookieNames),
72
+ "fromHTTP": httpCookies.count,
73
+ "fromWebView": webViewCookies.count
74
+ ])
75
+ }
76
+ }
77
+ }
78
+ }
79
+ }
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@telefonica/ios-common-cookies",
3
+ "version": "1.0.0",
4
+ "description": "Expo iOS module for synchronizing cookies between HTTPCookieStorage and WKWebView",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/Telefonica/platform-react-native-modules"
9
+ },
10
+ "main": "dist/index.js",
11
+ "types": "dist/index.d.ts",
12
+ "exports": {
13
+ ".": {
14
+ "types": "./dist/index.d.ts",
15
+ "import": "./dist/index.mjs",
16
+ "require": "./dist/index.js"
17
+ }
18
+ },
19
+ "files": [
20
+ "dist",
21
+ "ios",
22
+ "expo-module.config.json",
23
+ "README.md",
24
+ "iOSCommonCookies.podspec"
25
+ ],
26
+ "dependencies": {
27
+ "expo-modules-core": "^2.5.0"
28
+ },
29
+ "peerDependencies": {
30
+ "react": ">=18",
31
+ "react-native": ">=0.72"
32
+ },
33
+ "scripts": {
34
+ "build": "tsup index.ts --format cjs,esm --dts --clean",
35
+ "ts:check": "tsc --noEmit --project tsconfig.json",
36
+ "prepublishOnly": "npm run build"
37
+ },
38
+ "devDependencies": {
39
+ "tsup": "^8.0.2",
40
+ "typescript": "^5.6.3"
41
+ },
42
+ "publishConfig": {
43
+ "access": "public"
44
+ }
45
+ }