You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
After publishing a new version, no popup or notice appear when restarting the app.
How to reproduce the bug
Cloudflare R2 is an S3-compatible object storage. When using it as a NativePHP updates provider, I set env vars to something like this:
AWS_ACCESS_KEY_ID=[R2 API token access key]
AWS_SECRET_ACCESS_KEY=[R2 API token secret access key]
AWS_DEFAULT_REGION=EEUR
AWS_BUCKET=bucket-name
AWS_URL=https://r2-updates.example-domain.com
AWS_ENDPOINT=https://[long-random-string-from-R2].r2.cloudflarestorage.com
AWS_USE_PATH_STYLE_ENDPOINT=false
AWS_S3_TOKEN_VALUE=[R2 API token value]
Note, AWS_URL value is actually a custom subdomain pointing to the R2 bucket. The only current reliable way to make R2 bucket publicly available is to point a custom (sub)domain.
At this point, building and uploading to R2 works. What is not working – automatic updates. Or, rather, checks if an update is available.
Got some debugging info this way:
I've cloned nativephp/electron and configured local path as Composer repository.
In electron-plugin/dist/index.js changed some code to:
startAutoUpdater(config){constfs=require('fs');constpath=require('path');constcustomLogger={info: (message)=>{fs.appendFileSync('/tmp/ivsa-electron-logs.log',`[INFO] ${newDate().toISOString()} - ${message}\n`);console.info(message);// Optional: keep console logging too},warn: (message)=>{fs.appendFileSync('/tmp/ivsa-electron-logs.log',`[WARN] ${newDate().toISOString()} - ${message}\n`);console.warn(message);},error: (message)=>{fs.appendFileSync('/tmp/ivsa-electron-logs.log',`[ERROR] ${newDate().toISOString()} - ${message}\n`);console.error(message);}};customLogger.info("Starting auto updater");customLogger.warn("Starting auto updater");customLogger.error("Starting auto updater");var_a;if(((_a=config===null||config===void0 ? void0 : config.updater)===null||_a===void0 ? void0 : _a.enabled)===true){customLogger.info("Checking for updates");autoUpdater.logger=customLogger;autoUpdater.checkForUpdatesAndNotify();customLogger.info("Updates checked");}}
Bundled and ran the app.
Got log messages:
[INFO] 2025-04-07T14:38:45.343Z - Starting auto updater
[WARN] 2025-04-07T14:38:45.345Z - Starting auto updater
[ERROR] 2025-04-07T14:38:45.345Z - Starting auto updater
[INFO] 2025-04-07T14:38:45.345Z - Checking for updates
[INFO] 2025-04-07T14:38:45.345Z - Checking for update
[INFO] 2025-04-07T14:38:45.345Z - Updates checked
[ERROR] 2025-04-07T14:38:45.823Z - Error: HttpError: 400 Bad Request
"method: GET url: https://[xxxxxx].r2.cloudflarestorage.com/ivsa-updates/latest-mac.yml?noCache=1io8b10jd\n\n Data:\n <?xml version=\"1.0\" encoding=\"UTF-8\"?><Error><Code>InvalidArgument</Code><Message>Authorization</Message></Error>\n "
Headers: {
"cf-ray": "92ca4540bc0f0ef7-VNO",
"connection": "keep-alive",
"content-length": "113",
"content-type": "application/xml",
"date": "Mon, 07 Apr 2025 14:38:45 GMT",
"server": "cloudflare",
"vary": "Accept-Encoding"
}
at createHttpError (/Applications/Ivsa.app/Contents/Resources/app.asar/node_modules/builder-util-runtime/out/httpExecutor.js:21:12)
at IncomingMessage.<anonymous> (/Applications/Ivsa.app/Contents/Resources/app.asar/node_modules/builder-util-runtime/out/httpExecutor.js:152:28)
at IncomingMessage.emit (node:events:518:28)
at endReadableNT (node:internal/streams/readable:1698:12)
at process.processTicksAndRejections (node:internal/process/task_queues:82:21)
The problem is that https://[xxxxxx].r2.cloudflarestorage.com/ivsa-updates/latest-mac.yml is not the right path to load the latest-mac.yml file. But https://r2-updates.example-domain.com/latest-mac.yml is.
In order to form that URL, AWS_ENDPOINT must be changed to https://r2-updates.example-domain.com, but then bundled app upload to R2 fails with error, R2 response's status code 401.
Package Versions
{
"installed": [
{
"name": "nativephp/electron",
"direct-dependency": true,
"homepage": "https://github.com/nativephp/electron",
"source": null,
"version": "1.0.0-beta.8",
"description": "Electron wrapper for the NativePHP framework.",
"abandoned": false
},
{
"name": "nativephp/laravel",
"direct-dependency": false,
"homepage": "https://github.com/nativephp/laravel",
"source": "https://github.com/NativePHP/laravel/tree/1.0.0-beta.4",
"version": "1.0.0-beta.4",
"description": "Laravel wrapper for the NativePHP framework.",
"abandoned": false
},
{
"name": "nativephp/php-bin",
"direct-dependency": false,
"homepage": "https://nativephp.com",
"source": "https://github.com/NativePHP/php-bin/tree/0.6.1",
"version": "0.6.1",
"description": "PHP binaries used by the NativePHP framework",
"abandoned": false
}
]
}
PHP Version
8.3.16
Laravel Version
12.7.2
Node Version
22.14.0
Which operating systems have you seen this occur on?
macOS
OS version
macOS 15.3.1
Notes
No response
The text was updated successfully, but these errors were encountered:
What were you trying to do?
Use Cloudflare R2 as NativePHP updates provider.
What happened?
After publishing a new version, no popup or notice appear when restarting the app.
How to reproduce the bug
Cloudflare R2 is an S3-compatible object storage. When using it as a NativePHP updates provider, I set env vars to something like this:
AWS_ACCESS_KEY_ID=[R2 API token access key]
AWS_SECRET_ACCESS_KEY=[R2 API token secret access key]
AWS_DEFAULT_REGION=EEUR
AWS_BUCKET=bucket-name
AWS_URL=https://r2-updates.example-domain.com
AWS_ENDPOINT=https://[long-random-string-from-R2].r2.cloudflarestorage.com
AWS_USE_PATH_STYLE_ENDPOINT=false
AWS_S3_TOKEN_VALUE=[R2 API token value]
Note, AWS_URL value is actually a custom subdomain pointing to the R2 bucket. The only current reliable way to make R2 bucket publicly available is to point a custom (sub)domain.
At this point, building and uploading to R2 works.
What is not working – automatic updates. Or, rather, checks if an update is available.
Got some debugging info this way:
The problem is that https://[xxxxxx].r2.cloudflarestorage.com/ivsa-updates/latest-mac.yml is not the right path to load the
latest-mac.yml
file. Buthttps://r2-updates.example-domain.com/latest-mac.yml
is.In order to form that URL, AWS_ENDPOINT must be changed to https://r2-updates.example-domain.com, but then bundled app upload to R2 fails with error, R2 response's status code 401.
Package Versions
PHP Version
8.3.16
Laravel Version
12.7.2
Node Version
22.14.0
Which operating systems have you seen this occur on?
macOS
OS version
macOS 15.3.1
Notes
No response
The text was updated successfully, but these errors were encountered: