Commit Graph

4205 Commits

Author SHA1 Message Date
KernelDeimos
d85f5fad5e dev: expose 'kv' as 'cache' from data extension 2025-09-26 17:31:00 -04:00
KernelDeimos
d5a2a34f53 dev(extensions): add extension.use
The extension.use method allows registering routers and generic handlers
(not wrapped by eggspress) to express.
2025-09-26 17:30:09 -04:00
KernelDeimos
601eb019a2 dev(extensions): [+] data
The data extension adds convenient access to the database and kvstore
via it's 'db' and 'kv' exports.

Example usage:
  const { db, kv } = extensions.import('data');
  await kv.set('some-key', 'some-value');
  await db.write('INSERT INTO something (a, b) VALUES (1, 2)');
2025-09-26 15:28:00 -04:00
KernelDeimos
63bf4eccbe dev: make services importable by extensions
For example you can access WebServerService with
extension.import('service:web')
2025-09-26 15:28:00 -04:00
KernelDeimos
0c30a9e157 fixup! dev(extensions): [+] whoami 2025-09-26 15:28:00 -04:00
KernelDeimos
dabf8cac56 fix: add missing dep to whoami extension 2025-09-26 15:28:00 -04:00
KernelDeimos
570409ef15 doc: add more extension internals documentation 2025-09-26 15:28:00 -04:00
KernelDeimos
27d7668a72 dev: '@extension name' and priority in puter.json
Adds the '@extension name <name>' directive for single-file Puter
extensions, and adds support for defining priority in 'puter.json'.
2025-09-26 15:27:59 -04:00
KernelDeimos
cb31c1d44e dev: add command to list extensions
This commit adds the `extension:list` command for listing extensions.
This command is itself defined in an extension. To make this possible,
an event called 'create.commands' is emitted form CommandService with
the event object holding a function that can be used to add commands.
2025-09-26 15:27:59 -04:00
KernelDeimos
7b4c62d1c3 lint: minor formatting issue with catch(e)
The custom eslint pluggin for the formatting rule I have for the
expressions in control structures isn't a good fit when the condition is
a single variable named by a single character. This happens a lot with
`catch`. `catch ( e ) {` has too much spacing, but `catch (e) {` looks
relatively normal.
2025-09-26 15:27:59 -04:00
KernelDeimos
62e77a15a2 conf: add block in eslint.config.js for extensions 2025-09-26 15:27:59 -04:00
KernelDeimos
353cf397cb dev: remove legacy whoami and use extension 2025-09-26 15:27:59 -04:00
KernelDeimos
db5aef51b0 fix: missing await in extension loader 2025-09-26 15:27:59 -04:00
KernelDeimos
ebbe18f72d dev(extensions): [+] whoami 2025-09-26 15:27:59 -04:00
KernelDeimos
943a3c7bab type(extensions): config and add core.util.helpers 2025-09-26 15:27:58 -04:00
KernelDeimos
1358e98c5b devex: add some types for extension intellisense 2025-09-26 15:27:58 -04:00
KernelDeimos
dde652fb27 dev: expose 'core' from useapi as runtime module 2025-09-26 15:27:58 -04:00
KernelDeimos
15cb98107c doc: add extension documentation for core devs
Extensions need to be documented at different layers of concern:
1. How to use/run extensions
2. How to create extensions as a contributor
3. How extensions work under the hood

This documentation addresses the third layer, describing how Kernel
and core modules interact with extensions.
2025-09-26 15:27:58 -04:00
KernelDeimos
4353c2dc46 dev: expose 'web' from useapi as runtime module
This will allow extensions to import from the 'web' module:
const { Endpoint } = extension.import('web');
2025-09-26 15:27:58 -04:00
KernelDeimos
f6be6952dc dev: export runtime module registry to context 2025-09-26 15:27:58 -04:00
KernelDeimos
b328355a90 fix: apparently setters shadow getting
I thought you could:
  method() {}
  set method (v) { /* ... /* }

but you can't. You have to:
  get method() { return (function () {}).bind(this) }
  set method (v) { /* ... /* }

I don't know why a setter can't just only shadow setting, but that's
how they designed the language. ¯\_(ツ)_/¯
2025-09-26 15:27:57 -04:00
KernelDeimos
6ff3d154fa devex: .git is not an extension
This change makes sure Kernel skips `.git` directories when scanning
for extensions. This allows me to make a git repository containing
example extensions for Puter.
2025-09-26 15:27:57 -04:00
KernelDeimos
bdd60c63d8 devex: add '{repo}' variable for extension paths
Previously '{source}' was added but this is a bit difficult to work
with since it's the path from the source file, which is usually the
'src/' directory under the repository. This won't be obvious anyone
who doesn't already know this. '{repo}' just points to the path of
the repository itself.
2025-09-26 15:27:57 -04:00
KernelDeimos
06cd14353a doc: document import/export mechanism for extensions 2025-09-26 15:27:57 -04:00
KernelDeimos
e271476e0b tweak: alias 'runtime' to 'extension'
Extension developers should not have to remember what comes form
where between two different globals. This change makes Extension
effectively a facade (Facade Pattern) containing the behaviors
of both extensions and runtime modules.
2025-09-26 15:27:57 -04:00
KernelDeimos
9aef281ad2 dev: add runtime modules for imports and exports
RuntimeModule is a new construct which represents the import/export
mechanism for Puter extensions. This can be thought of as analogous
to node's Module class. These are called "runtime modules" because
extensions have less control of what they're consuming than a typical
npm module; i.e. `runtime.import('database')` will provide a version
of 'database' that's compatible with the importing extension, but the
version used can't be locked or otherwise determined by the extension.
2025-09-26 15:27:57 -04:00
Xiaochen Cui
860388c3cb update client-cache logic (#1626)
* client-cache: remove pulling

* client-cache: fix wrong ts field

* client-cache: purge cache on any local update

* client-cache: last_updated_time -> last_valid_time

* client-cache: update cache on remote update

* client-cache: update last_valid_ts every sec

* client-cache: switch to localstorage

* do the cache and purge test when `setAuthToken` is called

---------

Co-authored-by: Nariman Jelveh <nj@puter.com>
2025-09-26 11:44:12 -07:00
Nariman Jelveh
a0b567da52 chore: update @heyputer/kv.js dependency to version 0.2.0 and initialize cache with dbName in puter-js (#1623) 2025-09-26 10:58:16 -07:00
Daniel Salazar
3fc183297f revert: eslint config rules (#1625) 2025-09-26 10:52:00 -07:00
Daniel Salazar
d70d412115 feat: DAV Locks support + refactor of DAV method handler (#1486)
* feat: DAV Locks support + refactor of DAV method handler

* format: Restore old whitespace for CoreModule.js

* fix: options route registering after likecycle hooks

---------

Co-authored-by: Neal Shah <30693865+ProgrammerIn-wonderland@users.noreply.github.com>
2025-09-26 11:00:29 -04:00
Xiaochen Cui
7bfa85d4fe client-cache: remove pulling (#1620)
* client-cache: remove pulling

* client-cache: fix wrong ts field

* client-cache: purge cache on any local update
2025-09-25 16:56:01 -07:00
Daniel Salazar
8d36e52ae7 Merge pull request #1621 from HeyPuter/DS/main
dep: updating node dep version to one that supports modules
2025-09-25 12:17:15 -07:00
Daniel Salazar
9705c58160 dep: updating node dep version to one that supports modules 2025-09-25 12:08:36 -07:00
Onitsag
1cff4fd46a feat: Add missing Portuguese translations (#1615)
* feat: Add missing Portuguese translations

* feat: Add missing Swedish translations

* remove missing translations comment

---------

Co-authored-by: Nariman Jelveh <nj@puter.com>
2025-09-25 11:47:04 -07:00
velzie
8b9fefa4a2 fix puterjs throwing errors after consuming message events not meant for it (#1612) 2025-09-25 11:11:34 -07:00
Thomas NGUYEN
72ee05fefb feat: Add missing Urdu translations (#1618) 2025-09-25 10:58:46 -07:00
Xiaochen Cui
681c084180 client-cache: update cache-invalidation policy to ts-based comparison (#1611) 2025-09-24 18:08:09 -07:00
Nariman Jelveh
8b7e764af9 add instancesOpen to puter.js UI 2025-09-24 17:03:36 -07:00
KernelDeimos
fa436a7775 devex: make it impossible to commit eslint errors 2025-09-24 17:41:48 -04:00
KernelDeimos
fe1d78d5bf conf(eslint): fix backend rule, -@stylistic/quotes
This commit fixes the block that's meant to match backend files. There
was an error in the arguments for '@stylistic/indent' which was
effectively disabling the entire block. In vscode, it is very unclear
that this is happening, so I had to manually run this command:

npx eslint "src/backend/**/*.js" --debug

This commit also disables @stylistic/quotes; I disagree with this
rule for several reasons:
1. Sometimes the appropriate quote depends on the contents:
   i.e. '""""' + "''''" is cleaner than '""""\'\'\'\''.
2. If you argue that mixing quotes between concatenated strings
   (like the previous example) is a bad idea, then I can further
   state that this rule forces me to mix quotes:
   `we use a ${templateString}` + "but can't do it here"
2025-09-24 16:58:28 -04:00
Khilfi KA
99ebbfa00d Add Bahasa Malaysia (Malay) i18n Support (#1609)
* Complete Bahasa Malaysia (Malay) translation of Puter

* Fix code styling

* Add Malay README.md

* Removed dash from `sub-projek`

* Make `Library` italic

* Add Malay language to `Translations` section
2025-09-24 12:44:41 -07:00
ProgrammerIn-wonderland
cf05413b83 ux: Whitelist onlyoffice applications from copy dialog in IPC 2025-09-23 18:10:54 -04:00
Daniel Salazar
25de96c8c9 Merge pull request #1607 from HeyPuter/DS/main
chore: add jsdoc typings for KV interface
2025-09-23 14:26:48 -07:00
Daniel Salazar
8cc14fece3 chore: add jsdoc typings for KV interface 2025-09-23 14:26:35 -07:00
Daniel Salazar
06f89a8a80 Merge pull request #1606 from HeyPuter/DS/main
feat: allow setting puter origin via globalThis variables
2025-09-23 14:26:17 -07:00
Daniel Salazar
bf76a1edea feat: allow setting puter origin via globalThis variables 2025-09-23 13:26:12 -07:00
KernelDeimos
aae3da39f8 sync: package-lock.json 2025-09-23 15:03:09 -04:00
Hariz
67be35b6a0 Don't raise window if close/minimize btn clicked (#1589) 2025-09-22 18:52:57 -07:00
Nariman Jelveh
e0316b9cbe remove unnecessary console.log() 2025-09-22 16:36:48 -07:00
KernelDeimos
1ea8f9ddf1 devex: performance monitor environment variable
Instead of requiring developers to keep changes in their git index to
use the performance monitor, make it configurable through the .env
file.
2025-09-22 19:31:03 -04:00