Commit graph

759 commits

Author SHA1 Message Date
PalmDevs
b258ac70d6
fix(plugins): remove developer-kit
This plugin has been moved to an external repository.
The goal of bundling internal plugins are including what's needed by _the user_ by default.

Developer Kit is not needed by most users, nor is it a "safe" plugin (it exposes a few attack surfaces, even if unlikely to be used).
2026-07-31 02:50:59 +07:00
PalmDevs
0f75551c36
fix(plugins/developer-kit): migrate to FlashList v2 2026-07-31 02:38:46 +07:00
PalmDevs
1c58b7a5a1
chore: use AnyFunction from lib everywhere 2026-07-31 02:38:45 +07:00
PalmDevs
10371ff000
fix: settings UI refreshing 2026-07-31 02:38:41 +07:00
PalmDevs
8040d3be07
fix(lib/externals/react-native-safe-area-context): update filters for 341202+ 2026-07-29 23:42:44 +07:00
PalmDevs
bb0919ef0a
fix(lib/discord): bring back support for <341202 2026-07-29 23:18:11 +07:00
PalmDevs
16ef99dcd8
chore: update dependencies 2026-07-29 22:18:02 +07:00
PalmDevs
6bdff25482
feat: better types + typegen output
- Add dependencies to types package.json
- Make temp file names deterministic
2026-07-29 22:15:23 +07:00
PalmDevs
2e944b0f25
fix: support 341202+
First Android Static Hermes version incoming, with Metro issues.

- scripts/plugins/hermesc: use hermes-compiler
- plugins/settings: get React Native version correctly
- lib/modules/finders/filters: support null ID in DependencyMap for `withDependencies`
- lib/discord: update filters for 341202+
2026-07-29 21:48:18 +07:00
PalmDevs
89ae4d910c
feat(plugins/settings.plugins): show repo description + add Copy URL option 2026-07-29 21:48:17 +07:00
PalmDevs
0c9cd9f8e3
fix(plugins/settings.plugins): don't restore default repo multiple times 2026-07-29 21:48:16 +07:00
PalmDevs
49c1b1e68d
fix(lib/utils/object): lazy properties shouldn't delete itself when loader errors 2026-07-29 21:48:15 +07:00
PalmDevs
c7b5ae8ee6
fix(lib/plugins): external JS plugins not loading 2026-07-29 21:48:10 +07:00
PalmDevs
e73bbc03ba
fix(lib/json-storage): clarify how JsonStorage.get() and JsonStorageUpdateMode.Load works 2026-07-28 12:44:31 +07:00
PalmDevs
9e2ac7185d
feat(plugins/settings.plugins): restore default plugin repo when needed 2026-07-28 12:43:55 +07:00
PalmDevs
da08b94f76
fix(lib/assets): skip useless comparison during pre-init 2026-07-28 12:12:22 +07:00
PalmDevs
9781ed5ee3
feat(scripts/types): make dist/types directly publishable 2026-07-28 12:11:38 +07:00
PalmDevs
0fdc1f1cff
fix: plugin API types + JS options validation 2026-07-28 12:07:28 +07:00
PalmDevs
a629b2ad44
fix(lib/discord/types): export API types to expose plugin API decoration 2026-07-26 16:13:13 +07:00
PalmDevs
b250450367
feat(lib/plugins): reexpose EnabledLate flags property as startedLate 2026-07-26 16:01:09 +07:00
PalmDevs
f67c8db768
fix(scripts): make compatible with all Node runtimes 2026-07-26 15:45:08 +07:00
PalmDevs
ee8d5620a0
fix(scripts/types): types generation 2026-07-26 15:24:35 +07:00
PalmDevs
f6d119a210
fix(lib/externals/shopify): update filters for 340206+ 2026-07-26 13:47:31 +07:00
PalmDevs
793574d185
fix: lockfile 2026-07-26 03:09:27 +07:00
Palm
f6a796f02f
chore: merge feat/external-and-native-plugins to main (#10)
This PR introduces native and external plugins support. The list of changes here are NOT comprehensive and only mentions the most important changes. Check commits from `00047da` to `d2c7f47` (and diff) for full list of changes.

BREAKING CHANGES:

- lib/modules!: Renamed `callBridgeMethod*` to `callNativeMethod*` and interface `Methods` to `NativeMethods`. This is to achieve naming consistency with the native API and be more clear.
- lib/storage!: Renamed to `@revenge-mod/json-storage`. A storage can be in any arbitrary format. While there's little potential for non-JSON storage formats, but the naming should allow for it regardless. This is not a drop-in replacements. There are breaking changes in export names and new APIs.
- plugins/revenge.api.storage!: Renamed to `revenge.api.jsonStorage`. Plugin options are renamed and its structure has changed as well.
- Native now holds the path for official storage APIs. This update uses new paths without any migration!
- lib/plugins!: `Plugin.errors` is now read-only. Use `Plugin.reportError(e)` instead.
- lib/plugins!: `Plugin.flags` has been completely removed in favor of these methods: `Plugin.requireReload()`, `Plugin.disable()`.
- New versioning system: Allowing any amount of number segments, with prerelease support.
  - Any number of segments is supported: 1, 1.0, 1.0.0, 1.0.0.0, ...
  - Prerelease labels are compared "digit-run", similar to Debian.
  - Plugins must specify a version.
  - User-facing plugins should use CalVer. API plugins should use SemVer.
    Revenge APIs use SemVer while the new `discord` dependency parses the Discord version string directly.
- Dependency is now a Map, with support for version ranges and optional. Suggested URL is removed. (See new repo system)
- Plugins will now have to declare a dependency on `revenge.api` (Revenge API version) and `discord` (Discord version).
- Manifest now requires a format version (currently `1`)

New APIs:

- lib/plugins/utils: Utilities to format versioning
- lib/discord/design: `FloatingActionButton` types

Features:

- New repo system: Repository design is inspired by Linux package repositories.
  - Repos host manifest, versions, channels, download URL/size, and hash for multiple plugins.
  - New dependency system: Plugins are versioned, and shouldn't break when updates come.
    Plugins can now declare dependency on supported Discord/Revenge API versions, so they won't break with auto-updates.
    Dependencies can be optional, but dependency on `revenge.api` and `discord` must be required.
    Dependents are soft-disabled when dependencies don't satisfy. Once satisfied, the plugin can start again.
  - All updates for running plugins REQUIRE a reload to prevent stale linking issues. Both native and JS-side.
  - Update checking is handled entirely by JS. But the native-side still handles installation, indexing, and verification.
  - Local indexes are updated against remote indexes. Dependency checking always uses local indexes.
  - Users can add custom repositories and custom their priority order. URL is the identity.
- Plugins can now have custom data URI icons instead of being restricted to React Native app assets.
- External plugin installs require UI confirmation before installing.
- Pending Update and Pending Reload filters in Plugins page.
- Ability to browse external plugins in repositories. Official repository will be added soon.

Fixes/Refactor:

- lib/modules/native/fs: `rmSync` not actually deleting anything.
- Refactored Plugin-related settings to a separate "Plugin Settings" plugin.
- Masonry layout fixes in landscape.
- Removed dead code.
- Fixed sorting for 'Enabled first'.
- Updated native method names to be more consistent.
- Make methods more 'safe' by removing non-null assertion casts.
2026-07-25 23:48:15 +04:00
PalmDevs
d2c7f47fe7
fix(plugins/settings.plugins): match the version, channel, and repo exactly from the card when installing plugins from the Browse screen 2026-07-26 02:01:58 +07:00
PalmDevs
5432276ab0
fix(plugins/settings.plugins): small errors & inconsistencies
- Soft errors now nudge UI to rerender.
- `runPluginLate` will throw anyway, so early return is cleaner.
- `confirmInstall` returns a `Promise` which the AlertModal should await before closing.
2026-07-26 02:01:57 +07:00
PalmDevs
ff263a2282
chore: remove dead code and correct comments 2026-07-26 02:01:56 +07:00
PalmDevs
da1e34dc62
fix(plugins/settings.plugins): last updated date logic
Only update when repos are actually refreshed, and when no errors occurred.
2026-07-26 02:01:37 +07:00
PalmDevs
a5290d314f
fix(lib/plugins): forget initial persisted states when un/reinstalling a plugin 2026-07-26 01:21:02 +07:00
PalmDevs
2b665164e9
fix(plugin/api.json-storage): handle when plugin hasn't been initialized when clearing storage 2026-07-26 00:54:20 +07:00
PalmDevs
7aa8582efc
chore: update dependencies 2026-07-26 00:26:13 +07:00
PalmDevs
61dad36056
fix(plugins/settings.plugins): cache repo listings when building an alert to confirm an install plan 2026-07-26 00:12:55 +07:00
PalmDevs
41e9186966
fix(plugins/settings.plugins): show toast for errors during missing dependencies installation when enabling plugins 2026-07-26 00:10:03 +07:00
PalmDevs
a06bf73d06
fix(lib/modules/native/fs): rmSync not actually deleting anything 2026-07-25 23:59:06 +07:00
PalmDevs
6e4d128951
fix(plugins/settings.plugins): pending reload uninstall alert text 2026-07-25 23:58:36 +07:00
PalmDevs
eed74947c3
chore: format and fix potential type errors 2026-07-25 23:58:01 +07:00
PalmDevs
9b412a9404
feat!: new repo system + versioning system support + bug fixes
BREAKING CHANGES:
- New versioning system: Allowing any amount of number segments, with prerelease support.
  - Any number of segments is supported: 1, 1.0, 1.0.0, 1.0.0.0, ...
  - Prerelease labels are compared "digit-run", similar to Debian.
  - Plugins must specify a version.
  - User-facing plugins should use CalVer. API plugins should use SemVer.
    Revenge APIs use SemVer while the new `discord` dependency parses the Discord version string directly.
- Dependency is now a Map, with support for version ranges and optional. Suggested URL is removed. (See new repo system)
- Plugins will now have to declare a dependency on `revenge.api` (Revenge API version) and `discord` (Discord version).
- Manifest now requires a format version (currently `1`)

New APIs:
- lib/plugins/utils: Utilities to format versioning

Features:
- New repo system: Repository design is inspired by Linux package repositories.
  - Repos host manifest, versions, channels, download URL/size, and hash for multiple plugins.
  - New dependency system: Plugins are versioned, and shouldn't break when updates come.
    Plugins can now declare dependency on supported Discord/Revenge API versions, so they won't break with auto-updates.
    Dependencies can be optional, but dependency on `revenge.api` and `discord` must be required.
    Dependents are soft-disabled when dependencies don't satisfy. Once satisfied, the plugin can start again.
  - All updates for running plugins REQUIRE a reload to prevent stale linking issues. Both native and JS-side.
  - Update checking is handled entirely by JS. But the native-side still handles installation, indexing, and verification.
  - Local indexes are updated against remote indexes. Dependency checking always uses local indexes.
  - Users can add custom repositories and custom their priority order. URL is the identity.
- Plugins can now have custom data URI icons instead of being restricted to React Native app assets.
- External plugin installs require UI confirmation before installing.
- Pending Update and Pending Reload filters in Plugins page.
- Ability to browse external plugins in repositories. Official repository will be added soon.

Fixes/Refactor:
- Refactored Plugin-related settings to a separate "Plugin Settings" plugin.
- Masonry layout fixes in landscape.
- Updated plugins now show "reload to apply" toast instead.
- Removed dead code.
2026-07-25 23:43:44 +07:00
PalmDevs
fb35d7af95
fix(plugins/api.json-storage): remove entire dir when clearing and only update storage when needed 2026-07-19 20:19:19 +07:00
PalmDevs
f97c273bef
feat(lib/discord/modules/settings): allow adding setting items to sections with index and by lambda 2026-07-19 15:36:22 +07:00
PalmDevs
eb3f03fb60
feat(lib/discord): add types for FloatingActionButton 2026-07-17 21:10:29 +07:00
PalmDevs
3f60b4dfb7
feat!: more plugin system improvements + API changes + other fixes
BREAKING CHANGES:

- lib/modules!: Renamed `callBridgeMethod*` to `callNativeMethod*` and interface `Methods` to `NativeMethods`. This is to achieve naming consistency with the native API and be more clear.
- lib/storage!: Renamed to `@revenge-mod/json-storage`. A storage can be in any arbitrary format. While there's little potential for non-JSON storage formats, but the naming should allow for it regardless. This is not a drop-in replacements. There are breaking changes in export names and new APIs.
- plugins/revenge.api.storage!: Renamed to `revenge.api.jsonStorage`. Plugin options are renamed and its structure has changed as well.
- Native now holds the path for official storage APIs. This update uses new paths without any migration!
- lib/plugins!: `Plugin.errors` is now read-only. Use `Plugin.reportError(e)` instead.
- lib/plugins!: `Plugin.flags` has been completely removed in favor of these methods: `Plugin.requireReload()`, `Plugin.disable()`.

OTHER CHANGES:

- Fixed sorting for 'Enabled first'
- Updated native method names to be more consistent
- Cleand up dead code
- Make methods more 'safe' by removing non-null assertion casts
2026-07-09 23:47:53 +07:00
PalmDevs
fb3692bc2d
feat: plugin system improvement
- Stop plugins prior to an update
- Native calls are now awaited in relevant places
- External plugin install feedback
- Plugins that are pending reloads now can't be started after an update
2026-07-07 23:19:58 +07:00
PalmDevs
fb1a31640f
fix(plugins/settings): use new imported path for settings navigator patch 2026-07-07 23:06:54 +07:00
PalmDevs
27c445e196
fix(lib/modules/native): await callable method properly 2026-07-07 21:50:36 +07:00
PalmDevs
420f3e803e
fix(lib/plugins)!: update storage layout
No migration here. It also replaces some specific APIs.
2026-07-07 00:28:05 +07:00
PalmDevs
bf8b99efb9
feat(lib/plugins): external plugins support
This is the first draft. Things may change in the future.
Loader changes are required as well.
2026-07-07 00:03:46 +07:00
PalmDevs
00047da9b3
feat(lib/modules): support native to JS bridge 2026-07-06 23:48:27 +07:00
PalmDevs
ddb02d2887
fix(lib/externals/shopify): update filters for 337206+ 2026-07-05 21:07:00 +07:00
PalmDevs
bb144c08ea
fix(plugins/developer-kit): restore DevTools alias correctly 2026-06-13 21:42:27 +07:00