These used to serve a purpose but now they only cause a dependency loop
between LL*/HL* operations and FilesystemService itself, making it
difficult to strategize filesystem behavior.
When getting a stream for an SVG icon from AppIconService with a
previously-fetched stored icon provided, a double-encoding bug was
preventing a valid image from being obtained.
Adds an event for app invalidation.
Moves iconify_apps to AppIconService and adds RecommenededAppsService,
which holds some logic that used to be in get-launch-apps. The event for
app invalidation is then used by RecommenededAppsService to determine
when to clear the recommended apps cache.
Moves AppIconService, OldAppNameService, and ProtectedAppService to the
new apps module to keep things organized, and updates imports. There
were no interesting init errors. Services creating a database at init
were tested for failures but this wasn't an issue. It turns out
initializing with a database accessor before the db service inits is
okay, but using that database accessor at init is not.
There are now several services related to apps, and
RecommendedAppsService is about to be added, making this a good time to
create a separate module for these services and migrate the legacy
service AppInformationService.
During migration it was realized that most of the initialization needed
to occur at boot.consolidation rather than boot.init because the
database needs to be initialized first.
There were a few things which made this rather difficult:
- AWS SDK doesn't appear to have a utility to validate message
signatures.
- The only available node.js module that does this is known to be
unreliable.
- SNS sends 'text/plain' MIME type even though the data is in JSON
format, so a middleware had to be added to account for this.
- We don't accept POST requests with no Origin header. Since SNS doesn't
send the Origin header, an exception had to be made for this.
- The endpoint needs to be public and SNS doesn't seem to have a
proxying utility for developers such as what Stripe has.
- Because of the above point, debugging time was affected by deployment
time to the staging server.
This commit fixes the timing of the /whoami call used for the
PrefixLogger (a logger for puter.js that displays app names) to ensure
the API origin and token are available. This is done by waiting for a
service called 'api-access' to be initialized first.
This was discovered while testing changes for /whoami responses that
display icons, because the current behavior breaks the call for
non-puter.com instances.
Calls to `/whoami` generally don't require app icons. Fetching icons of
the smallest size still incurs round-trip latency from the database and
S3, as well as additional delay for any retries due to failed icon
generation.
Although this is technically a regression in `/whoami`, the impact is
localized to Puter's desktop only because apps are not allowed to
receive taskbar icons.
Current issue with get-launch-apps wasn't fixed by catching errors while
reading the stream so this next attempt catches errors from the call to
start reading.
If the error occurs asynchronously this may not work either.
This happened because the return signature of get_app_icon was changed
so that the MIME type can be returned when the uploaded or default icon
is being used as a fallback. AppES was not updated to account for this
change.
Fix explorer table was always too wide with extra white space on right side causing an unnecessary horizontal scrollbar. Changed width for both the header row and item rows from 100vw to 100%, and added min-width.
Apparently there were two things:
- had to remove contextlink from the test command (that was expected)
- can't import libs from putility in the test environment. The error
produced for this doesn't really explain why.
Updated the romanian translations.
I kept the terms "Professional" and "Business" in English as they are commonly used this way in Romanian in IT services context
I adapted the forms of address to second person singular ("tu") instead of formal ("dumneavoastră") to maintain a friendly and modern tone
I maintained consistency with existing translations in the file
Placeholders (%strong%, %%) were kept in grammatically correct positions for Romanian language
A legacy mkdir function was still being used by the
generate_system_fsentries function. However, it wasn't necessary because
we now associate fsentries by uuid, eliminating the requirement to
create the home directory separately from its subdirectories.
The old mkdir function was removed, and generate_system_fsentries was
moved to a new service called UserService, which is intended to
eventually hold all methods related creating, removing, and updating
users.
* added validation function
* tagify implementation (incomplete)
* tagify implementation (completed)
* feat:implemented Tagify and filetype validation on filetype associaction in dev center
* tweak: removed unnessary tagify from dependency (its streamed from CDN)
* removed unnecessary tagify import
Currently the AI comment writer is trusting the AI to write comment
markers. This means sometimes the syntax of a source file is broken by
comment generation. The instructions in the prompt were pretty clear, so
rather than --fixup'ing the previous commit I'm adding these changes
separately as an interesting case study of how different models behave.
Following this result, I am going to be removing mistral from the
comment writer. It is the most likely to misbehave.
I will also be removing gpt-4o-mini, which sometimes included source
lines despite the "no surrounding text" instruction.
Complete missing Igbo translations in src/gui/src/i18n/translations/ig.js
- Translated all missing keys in the Igbo localization file.
- Ensured cultural appropriateness and accurate representation of English text.
- Carefully handled placeholders like %strong% for proper placement within the translated text.
Adds AIChatService, an implementor of puter-chat-completion which can
delegate to other implementors (implementors that have registered with
AIChatService at initialization) based on details of the request.
Makes AIChatService the test implementation. AIChatService then
delegates to FakeChatService when in test mode.
Adds `models()` method to puter-chat-completion. This method, instead of
returning only the names of supported models, includes other details
such as the cost and maximum output size.
Implements `models()` on Claude and XAI.
Registers Claude and XAI with AIChatService.
Replaces Claude with Grok pretending to be Claude. This is in lieu of a
proper fallback system which will be implemented later.
Grok will always say it's pretending to be Claude rather than
identifying itself as Claude.
This new endpoint shows permissions granted by the current user to the
specified user in the scope of a specified filesystem node, including
permissions on the affecting parent nodes.
This is related to two future tasks:
- prevent users from sharing a file with the same user twice
- add an endpoint to modify the access mode of a shared file
Recursively checking for files with 'see' permission? What was I
thinking? This replaces the disasterously awful approach of scanning a
user's entire file tree to find shares, with an approach which instead
selects on the permissions table and extracts file UUIDs from
permissions.
I need this for development/debugging purposes. I figure I may as well
start developing the system dialog we'll eventually have to create
rather than make a temporary debugging element. This window could
eventually become a full-featured group manager, and can easily be moved
to a settings tab.
This was a really small refactor - about 30mins - that moves the concern
of common constructor args for modules outside of each individual call.
A Context object is now used for common constructor arguments. Some of
the values on this object - such as APIOrigin and authToken - are
following values on the instance of the Puter class. This means that for
some modules it is already possible to eliminate the setAuthToken and
setAPIOrigin listeners (out of scope for this commit). Any which remain
could eventually be replaced with a listener on the Context object
itself.
This commit also moves the initSubmodules method to the top of the class
so that it's easier for new devs to find, in case they're looking into
an issue on a specific module rather than the Puter class itself.
The kdmod module was broken since we renamed packages/ to src/. Also,
the update to mod loading for some unknown reason now requires each call
to require to end with `.js`. As far as I know, this was working
previously.
Allows modules to register a listener to the 'install' event without
creating a Module class. This changes how external modules are
installed.
External modules are now referred to as "extensions"; this commit does
not update the term but does use 'extension' as the name of the global.
This was hilariously difficult to debug. This isn't the first time an
issue like this occurred; this happens because of a deviation between
mysql and sqlite, where a JSON-typed column in mysql will return as a
native object in queries, whereas a JSON-typed column in sqlite is a
string column and will therefore return as an un-parsed JSON string in
queries.
Fixes errors that were noticed being thrown by launch_app, specifically
in the branch of logic when launch_app is called NOT via ExecService.
This branch of logic was added to fix an issue where notepad wasn't
prompting to save unsaved changes on close because data-appusessdk was
not properly set to true. The fix still worked, despite throwing these
errors, because setting data-appUsesSDK to true is the first thing it
does. However, broadcast messages to apps launched with launch_app NOT
via ExecService would have been broken.
Adds a filesystem relay service to GUI-side which currently reports an
exmaple fsentry for /stat and /readdir. Added filesystem services for
both sides. Moved filesystem implementations from src/modules to src/lib
since they're being called by services now rather than modules.
This functionality is effectively disabled unless
src/puter-js/src/services/Filesystem.js is updated to use init_app_fs_()
when the environment is 'app'.
Adds XDIncomingService to manage messages from another window. IPC now
registers with XDIncoming and reports whether it was handled, that way
messages intended to reach GUI can be reliably ignored.
On GUI-side, XDIncomingService will be used by FSRelayService (not yet
implemented) to handle requests for filesystem operations from another
window.
On App-side, XDIncomingService might be used by the PostMessageFS
client-side filesystem implementation terminal to listen for filesystem
events that were relayed by GUI (after a permission check) from their
original websocket source. Either that, or we'll open a filesystem
socket for each app using that app's token.
NoPuterYetService was added because IPC.js is loaded before
globalThis.puter exists, and was the easiest way to still allow IPC's
listener to be registered with XDIncomingService.
APIAccessService was added. This service currently holds auth_token and
api_token and does nothing else. FilesystemService listens to this to
maintain a websocket connection. APIAccessService will help to manage
the complexity of all further code dependent on being informed about
changes to the auth token or origin. Currently in puter.js these are
passed around to several modules which manage the same piece of state
information independantly.
mkdir operation was passing user instead if actor. I really think I
changed this already; getting a crazy deja-vu feeling about it. Maybe a
commit was lost somewhere along the road, but not sure.
Dispatching and listening to events is non-trivial. The apparent
triviality is in implementing a list of listeners and calling them. The
non-triviality is in the nature of what happens to a system when it has
multiple different interfaces to register listeners and publish events.
This commit adds TopicsFeature, which allows any class extending
AdvancedBase to declare topics. A topic is a simple pub/sub channel.
TopicsFeature will manage the state of listeners so the class doesn't
need to. A GC-friendly mechanism for detaching listeners is also provided.
The ServiceManager will replace manual management of services within
initgui, and will also be used within puter.js. Eventually Puter's
backend might use this instead of the existing Container class, although
this will be a large change that needs to be done incrementally.
The difference between ServiceManager and Container is the logic behind
when initialization occurs. Rather than have all services initialized at
once when Container's init() method is called, services are initialized
as soon as their dependencies have been initialized.
Adds CachedFilesystem layer to client filesystem chain. Currently only
stat is implemented. The stat implementation will hold onto an entry for
3 seconds as per hardcoded configuration. Eventually, once invalidation
via websockets is working, this TTL should be extended.
Support for trait method overrides will make it possible to use putility
traits with the decorator pattern while using a proxy class to avoid
redundant re-implementation of proxy methods.
Use of the pattern described above will occur in the implementation of
client-side filesystem caching.
- de-coupled xhr callback passing from the interface of the underlying
filesystem implementation.
- This makes the interface to delegate calls more suitable for use with
the decorator pattern.
- The decorator pattern will be used to manage the complexity of the
caching layer by separating the concerns of different caching methods.
This hides database entries with empty types from the list of suggested
apps for files that have no extension. These entries should also be
removed from the database and the bug causing them should be fixed in
dev center.
This could not be tested locally due to another but only affecting
self-hosted installations. This will be tested in staging in the
meantime while the other bug is being fixed.
Return to phoenix shell when a pty stream is closed by twisp.
Pipes in phoenix with commands from the emulator do not appear to be
working properly, but something in there is working.
This involves establishing the protocol through which phoenix instances
run a command on the emulator. The pty is able to communicate with the
terminal in both directions. This commit adds logs to be removed later.
There are a few things left that this commit does not address:
- handling close of delegate process
- handling sigint from phoenix to delegate process
- closing the connection to twisp
I'll elaborate here because the commit name is confusing. Any time an
app gets a connection to another app, either because it launched that
app (or was launched by that app) or requested a connection to that app,
the ID the app gets to represent the app it's communicating with is now
a pseudo app id rather than the app instance ID. This accomplishes two
things:
1. It's more secure. There are multiple places where GUI assumes that
knowing an app's instance ID means you can do things as that app.
2. Between the same two apps, there may now be more than one connection.
This is useful for situations like Phoenix shell talking to the
emulator in multiple separate instances to pipe commands. (this is
coming later)
Changing the email address on an account that did not already have a
confirmed email would result in the email_confirmed column never being
set. This commit fixes that.
Additionally, an SQL statement using the unconfirmed email to identify a
row was changed so it now uses the user ID instead, which is safer.
Resolves: 759
The literal translation for Pictures IS Gambar-gambar, but after reviewing how it looks on live demo Puter, this translation seems a bit off, since other word like Videos is not Video-video, documents is not Dokumen-dokumen.
So, I think it's better to just translate Pictures to Gambar only. Indonesian actually does not care about singular and plural. If we really need to emphasize it plural, we just repeat the word. Which in this context, it is not that necessary to emphasize it.
This is in preparation for the chat completions driver. OpenAI asks that
a user ID be provided in requests when service is being provided to
other users, so we deterministically generate different UUIDs for this
purpose to prevent user information from being exposed.
This issue was caused by an INSERT statement which adds the admin user
to the admin group. The admin user is created at initialization, so for
new installs it does not exist at the time migration scripts are run.
Additionally, new javascript-coded migrations (.mig.js) would not have
run for new installs because of redundant (WET; not DRY) code for
initial setup.
This commit also improves error handling of the migration service, which
was necessary to diagnose this issue.
In the future, setup always needs to be tested after updating migration
scripts, even though migration of existing databases is where most of
the issues will happen.
Resolves: #639
From what I understand, we shouldn't need both `\x1B[2J` and `\x1B[3J`
sequences to clear everything, but xterm.js would not correctly clear
the visible region with only `\x1B[3J`. So, we have both.
filesystem.readdir() can throw, which previously would crash Phoenix and
leave the terminal unresponsive. This change makes it return no results
instead.
Having the parent app send us arbitrary config values was a holdover
from when phoenix was an embedded iframe and not a separate app. It led
to a security issue previously. Let's only take the auth parameters
since we can't get those otherwise, and they're safe to read.
Everything else should be available in our own URL params.
I tried implementing --source=foo too, but was bumping into weird
behaviour with isomorphic-git, so I've removed that for now. Eventually
we'll want it, but it seems fairly niche.
Specifically, we previously didn't resolve short commit hashes into the
full ones.
These functions provide a single place to later add more ways of
selection a commit, such as `HEAD~1`.
Previously, this:
```sh
> rm deleted.txt
> git add deleted.txt
```
...would unhelpfully complain that deleted.txt cannot be found. Now, it
records the deleted file to the index, just as canonical git does.
These allow the user to force color on or off. The chalk library is used
for the output, because it's already used elsewhere in Puter and seems
like a good choice.
Ideally, the default will be based on whether stdout is a tty, but Puter
doesn't yet have that concept, so we just default to color.
For now, the authentication is by --username and --password options,
which obviously is not good because the password is visible. But doing
it in a nicer way requires features that Phoenix or Puter are currently
missing.
I prefer the other names, but being able to type `{ dir, gitdir }` is
shorter and a lot less error-prone than `{ dir: repository_dir, gitdir:
git_dir }`.
A command can optionally define a `completer(args)` function. It takes
an array of strings for the current arguments, and returns an array of
completion results for the last argument.
Includes a few completers:
- alarm:info/clear/inspect completes the first argument as an alarm id
or short_id
- script:run completes the first argument as a script name
- params:get/set completes the first argument as a parameter name
Using npm install appears to have different results depending on whether
or not the parent directory of the puter repository happens to have a
package.json file (ex: nested workspaces).
A package called "useapi" is introduced to provide a dynamic import
system. This import system, rather than relying on the state of the
filesystem, is populated as modules are installed into Puter's kernel.
The "useapi" package is then used to add support for loading external
mod directories as Puter kernel modules, making it possible to mod puter
without any tooling.
* Update docker-image.yaml
* Update docker-image.yaml
* Update docker-image.yaml
* Update docker-image.yaml
* Update docker-image.yaml
* Create Docker on Tag and push on main
Some shell apps care about what order the arguments appear in. When
`parseArgs()` is called with `tokens: true`, it produces this `tokens`
array which represents all the command line options and arguments, in
order, which is useful for these more advanced cases.
This is ported over from an old forgotten branch I'd deleted, then
thankfully managed to dig up again. 😅
Instead of making GroupCommand contain child commands, use a flat array
for commands and implement groups as GroupStartCommand and
GroupEndCommand. This makes it much simpler to iterate the commands
list in order to jump to labels.
Then implement those labels and the commands that use them: b, t, and T.
Also add the s SubstituteCommand, and combine the code for the q and Q
commands.
The following improvements were made:
- do not require empty object in constructor
- allow components to override render mode based on constructor values
- improve error handling in get()
- allow array of property names in on_ready()->listen()
- allow components to be attached to shadow roots
ExportService gets removed and instead a global class registry is added.
The `init.js` file is split into `init_sync.js` and `init_async.js`
so that synchronous code that isn't dependent on imports is guarenteed
to run before initgui.js. The globalThis scope and service-script API
now expose `def`, a function for registering class definitions, and
`use`, a function for obtaining registered classes.
In the first pass I add a `register` method and update `defineComponent`
so it calls `register` as well. This made it possible to create a
proof-of-concept for registered classes. Additionally ExportService was
added to expose registered classes to service scripts. This first pass
works, but it would be better if all types of classes (components or
otherwise) were registered via the same method.
THe `a.stringOf(' \r\n\t'.split('')),` pattern works fine for small sets
of characters, but is horrible for situations like "any alphanumeric".
Instead, let's make it take a callback function that is run on each
character.
- Detect exit status of Puter apps, now that that's available.
- Store the exit status of each pipeline.
- Display a message when the exit status was non-zero.
That message is temporary, until we have a better way of displaying or
querying it, such as the `$?` shell variable.
`puter.exit()` now takes a status code, similar to the exit status on
desktop OSes. This is passed to the appClosed event, so that eg a
parent app can know whether its child app ran successfully.
This is also basic:
git config key # To read a value
git config key value # To set a value
git config --unset key # To delete a value
As noted, --list is not possible to implement currently.
Previously, this would crash in upload() when trying to iterate the
`entries` array, which is undefined when the `items` parameter is an
unsupported type.
Xterm.js produces two kinds of events: onKey and onData. On a desktop,
these are effectively the same, but on mobile, IME inputs produce data
but not key presses. By listening to onData instead of onKey, we get
that input.
With some experimentation, I also found that we don't need the code to
handle enter, home, end, or Ctrl-Shift-V. All of these function as
expected without that code, so we can remove it and simplify this
further. :^)
From version 5.4.0 onwards, xterm scopes its package names as
`@xterm/foo` instead of just `xterm-foo`.
We currently have a copy of xterm.css which we use instead of directly
including the one from the `@xterm/xterm` package, so I've updated the
contents of that too.
We were triggering webserver events in Kernel. This change improves
adherence to separation-of-concerns and ensures event cascading is
working as expected. This also better formalizes the boot sequence.
Every user previously set the max_length as window.TRUNCATE_LENGTH, so
I've moved that constant into the truncate_filename file and set it as
the default if max_length is not specified.
Most of the time, we'll already have a TaskManagerRow for the given
process, so we can just update its properties.
Iterating the results from #iter_tasks means we also insert the rows in
the correct order, regardless of their previous order.
If the Component gets removed from the DOM and then re-added, it already
has contents, and we don't need to create them again. It also has
already had on_ready called, so that doesn't need to happen again
either.
This fix stops Components duplicating their content elements and
listener callbacks whenever they're moved around the document.
This currently behaves the same as it did before: It still recreates the
table contents every half a second. It should also look identical,
though it's possible I missed some small differences.
The component structure is:
TaskManagerTable
- Table
- TaskManagerRow
- TaskManagerRow
- TaskManagerRow
- ...
TaskManagerRow is implemented so that we can later move to modifying
them in place as the process tree changes, instead of having to replace
them all.
Otherwise, most of the code is just moved around, and not changed much.
The object returned from UIWindowProgress() now has a `show_error()`
method, taking a title and message. Calling it will replace the content
of the window with those messages.
I've made use of this for file uploads. The only other place we
currently have errors we could show is for zipping and downloading
files, but we do not always have a progress dialog in that case, so I'll
leave that for now.
I think ideally, we would always create a progress dialog, and it would
then support being invisible initially, but appearing after a delay.
Then we'd always have an object to call `show_error()` on, and it could
then immediately show the dialog. But I'll get to that another day. :^)
Previously we showed "Moving /foo" which was confusing.
Also, make use of i18n replacements instead of gluing strings together,
because other languages might put the words in a different order. For
now, I've modified all the translations so that the "Moving foo" text
will appear as it did before, but these will require someone who
actually knows the different languages to check and correct them.
I noticed during this that emptying the trash from inside the Trash
window uses a different code path without a progress dialog, so I've
added a TODO to merge that in. I tried just using it directly but the
behaviour is a bit different. (The Trash one makes all the items fade
out.)
Run the ESLint static analysis tool on any code that is submitted, to
find possible bugs such as undefined functions and variables. We may
want to adjust the ESLint settings over time, but this seems like a
good start.
This is merged into the previous check-translations.yml action, because
that's also a form of linting. Possibly that could be reimplemented as
an ESLint plugin.
These two seem like bugs but are unclear to me how to fix, so I've added
FIXMEs.
/puter/packages/backend/src/routers/kvstore/clearItems.js
41:32 error 'DB_MODE_WRITE' is not defined no-undef
/puter/packages/backend/src/routers/whoami.js
104:35 error 'db' is not defined no-undef
/puter/src/UI/Settings/UITabSecurity.js
13:13 error 'user' is not defined no-undef
31:13 error 'user' is not defined no-undef
32:70 error 'user' is not defined no-undef
36:30 error 'user' is not defined no-undef
40:82 error 'user' is not defined no-undef
41:83 error 'user' is not defined no-undef
87:41 error 'api_origin' is not defined no-undef
/puter/src/UI/UIWindow2FASetup.js
39:33 error 'api_origin' is not defined no-undef
51:37 error 'api_origin' is not defined no-undef
69:37 error 'api_origin' is not defined no-undef
/puter/src/UI/UIWindowLogin.js
202:73 error 'api_origin' is not defined no-undef
271:73 error 'api_origin' is not defined no-undef
When exiting a window there should be a confirmation if exiting that window will irreversibly destroy work. For example, when you're working on a document and if you exit unsaved changes will be lost.
This doesn't seem to be the case. What work will be irreversibly lost?
I couldn't figure out how to get a name for the no_suitable_app error
unfortunately, so that's just commented out.
/puter/packages/backend/src/routers/sign.js
65:74 error 'subject' is not defined no-undef
114:59 error 'subject' is not defined no-undef
/puter/src/index.js
58:15 error 'loadScript' is not defined no-undef
59:15 error 'loadScript' is not defined no-undef
65:13 error 'gui_env' is not defined no-undef
66:15 error 'loadScript' is not defined no-undef
68:15 error 'loadCSS' is not defined no-undef
69:15 error 'loadScript' is not defined no-undef
73:5 error 'initgui' is not defined no-undef
Almost entirely clarifying use of window fields
/puter/src/initgui.js
82:28 error 'api_origin' is not defined no-undef
118:34 error 'url_query_params' is not defined no-undef
120:17 error 'app_query_params' is not defined no-undef
136:8 error 'url_query_params' is not defined no-undef
136:51 error 'url_query_params' is not defined no-undef
136:105 error 'url_query_params' is not defined no-undef
138:14 error 'url_query_params' is not defined no-undef
138:57 error 'url_query_params' is not defined no-undef
138:110 error 'url_query_params' is not defined no-undef
154:8 error 'url_query_params' is not defined no-undef
154:54 error 'url_query_params' is not defined no-undef
154:110 error 'url_query_params' is not defined no-undef
164:17 error 'openerOrigin' is not defined no-undef
171:30 error 'openerOrigin' is not defined no-undef
173:37 error 'is_auth' is not defined no-undef
184:23 error 'getUserAppToken' is not defined no-undef
184:39 error 'openerOrigin' is not defined no-undef
186:41 error 'is_auth' is not defined no-undef
195:23 error 'getUserAppToken' is not defined no-undef
195:39 error 'openerOrigin' is not defined no-undef
205:8 error 'url_query_params' is not defined no-undef
206:32 error 'url_query_params' is not defined no-undef
218:23 error 'url_query_params' is not defined no-undef
219:22 error 'openerOrigin' is not defined no-undef
219:38 error 'url_query_params' is not defined no-undef
220:26 error 'url_query_params' is not defined no-undef
228:29 error 'embedded_in_popup' is not defined no-undef
238:20 error 'url_query_params' is not defined no-undef
239:21 error 'url_query_params' is not defined no-undef
270:36 error 'openerOrigin' is not defined no-undef
271:30 error 'checkUserSiteRelationship' is not defined no-undef
271:56 error 'openerOrigin' is not defined no-undef
274:44 error 'logged_in_users' is not defined no-undef
274:76 error 'userAppToken' is not defined no-undef
274:92 error 'url_query_params' is not defined no-undef
284:17 error 'userAppToken' is not defined no-undef
288:25 error 'is_auth' is not defined no-undef
302:13 error 'url_query_params' is not defined no-undef
303:38 error 'url_query_params' is not defined no-undef
309:17 error 'logout' is not defined no-undef
331:13 error 'update_auth_data' is not defined no-undef
363:8 error 'is_auth' is not defined no-undef
388:13 error 'update_auth_data' is not defined no-undef
394:23 error 'get_auto_arrange_data' is not defined no-undef
395:31 error 'desktop_path' is not defined no-undef
403:30 error 'url_query_params' is not defined no-undef
405:38 error 'getUserAppToken' is not defined no-undef
405:62 error 'openerOrigin' is not defined no-undef
415:35 error 'user' is not defined no-undef
417:24 error 'openerOrigin' is not defined no-undef
430:24 error 'openerOrigin' is not defined no-undef
438:20 error 'openerOrigin' is not defined no-undef
439:37 error 'getAppUIDFromOrigin' is not defined no-undef
439:57 error 'openerOrigin' is not defined no-undef
444:35 error 'url_query_params' is not defined no-undef
508:46 error 'url_query_params' is not defined no-undef
630:54 error 'busy_indicator_hide_delay' is not defined no-undef
636:49 error 'busy_indicator_hide_delay' is not defined no-undef
647:13 error 'update_sites_cache' is not defined no-undef
656:9 error 'refresh_desktop_background' is not defined no-undef
661:9 error 'is_auth' is not defined no-undef
661:23 error 'first_visit_ever' is not defined no-undef
662:12 error 'logged_in_users' is not defined no-undef
679:14 error 'is_auth' is not defined no-undef
679:27 error 'first_visit_ever' is not defined no-undef
693:12 error 'url_query_params' is not defined no-undef
696:47 error 'url_query_params' is not defined no-undef
704:18 error 'gui_origin' is not defined no-undef
715:17 error 'update_auth_data' is not defined no-undef
728:8 error 'feature_flags' is not defined no-undef
746:19 error 'get_auto_arrange_data' is not defined no-undef
747:27 error 'desktop_path' is not defined no-undef
755:26 error 'url_query_params' is not defined no-undef
758:34 error 'getUserAppToken' is not defined no-undef
758:58 error 'openerOrigin' is not defined no-undef
768:31 error 'user' is not defined no-undef
770:20 error 'openerOrigin' is not defined no-undef
783:20 error 'openerOrigin' is not defined no-undef
792:16 error 'openerOrigin' is not defined no-undef
793:33 error 'getAppUIDFromOrigin' is not defined no-undef
793:53 error 'openerOrigin' is not defined no-undef
801:31 error 'url_query_params' is not defined no-undef
864:42 error 'url_query_params' is not defined no-undef
987:50 error 'busy_indicator_hide_delay' is not defined no-undef
993:45 error 'busy_indicator_hide_delay' is not defined no-undef
1021:13 error 'update_explorer_footer_selected_items_count' is not defined no-undef
1057:13 error 'active_item_container' is not defined no-undef
1061:17 error 'active_item_container' is not defined no-undef
1065:21 error 'active_item_container' is not defined no-undef
1071:9 error 'active_element' is not defined no-undef
1179:21 error 'select_ctxmenu_item' is not defined no-undef
1185:21 error 'select_ctxmenu_item' is not defined no-undef
1198:21 error 'select_ctxmenu_item' is not defined no-undef
1211:21 error 'select_ctxmenu_item' is not defined no-undef
1222:25 error 'select_ctxmenu_item' is not defined no-undef
1255:22 error 'active_item_container' is not defined no-undef
1256:39 error 'active_item_container' is not defined no-undef
1257:21 error 'active_element' is not defined no-undef
1258:23 error 'active_item_container' is not defined no-undef
1263:27 error 'active_item_container' is not defined no-undef
1264:39 error 'active_item_container' is not defined no-undef
1267:27 error 'active_item_container' is not defined no-undef
1268:39 error 'active_element' is not defined no-undef
1268:74 error 'active_element' is not defined no-undef
1268:93 error 'active_element' is not defined no-undef
1271:27 error 'active_item_container' is not defined no-undef
1272:39 error 'active_item_container' is not defined no-undef
1275:39 error 'active_element' is not defined no-undef
1275:74 error 'active_element' is not defined no-undef
1275:93 error 'active_element' is not defined no-undef
1323:114 error 'active_item_container' is not defined no-undef
1331:21 error 'active_element' is not defined no-undef
1334:27 error 'active_item_container' is not defined no-undef
1390:37 error 'active_element' is not defined no-undef
1407:31 error 'delete_item' is not defined no-undef
1419:37 error 'active_element' is not defined no-undef
1419:115 error 'trash_path' is not defined no-undef
1436:31 error 'delete_item' is not defined no-undef
1438:55 error 'trash_path' is not defined no-undef
1445:59 error 'trash_path' is not defined no-undef
1446:61 error 'trash_path' is not defined no-undef
1452:37 error 'active_element' is not defined no-undef
1456:25 error 'move_items' is not defined no-undef
1456:53 error 'trash_path' is not defined no-undef
1467:16 error 'keypress_item_seach_term' is not defined no-undef
1468:30 error 'keypress_item_seach_buffer_timeout' is not defined no-undef
1470:13 error 'keypress_item_seach_buffer_timeout' is not defined no-undef
1471:17 error 'keypress_item_seach_term' is not defined no-undef
1474:13 error 'keypress_item_seach_term' is not defined no-undef
1477:38 error 'active_item_container' is not defined no-undef
1480:108 error 'keypress_item_seach_term' is not defined no-undef
1485:30 error 'active_item_container' is not defined no-undef
1487:78 error 'keypress_item_seach_term' is not defined no-undef
1505:19 error 'active_item_container' is not defined no-undef
1509:17 error 'update_explorer_footer_selected_items_count' is not defined no-undef
1509:63 error 'active_element' is not defined no-undef
1518:16 error 'keypress_item_seach_term' is not defined no-undef
1519:30 error 'keypress_item_seach_buffer_timeout' is not defined no-undef
1521:13 error 'keypress_item_seach_buffer_timeout' is not defined no-undef
1522:17 error 'keypress_item_seach_term' is not defined no-undef
1525:13 error 'keypress_item_seach_term' is not defined no-undef
1531:97 error 'keypress_item_seach_term' is not defined no-undef
1538:67 error 'keypress_item_seach_term' is not defined no-undef
1581:39 error 'active_element' is not defined no-undef
1583:39 error 'active_element' is not defined no-undef
1590:17 error 'update_explorer_footer_selected_items_count' is not defined no-undef
1600:36 error 'active_element' is not defined no-undef
1602:36 error 'active_element' is not defined no-undef
1615:15 error 'mouseover_window' is not defined no-undef
1616:15 error 'mouseover_window' is not defined no-undef
1616:55 error 'trash_path' is not defined no-undef
1621:38 error 'active_element' is not defined no-undef
1623:38 error 'active_element' is not defined no-undef
1628:21 error 'clipboard' is not defined no-undef
1629:21 error 'clipboard_op' is not defined no-undef
1632:58 error 'trash_path' is not defined no-undef
1636:25 error 'clipboard' is not defined no-undef
1648:38 error 'active_element' is not defined no-undef
1650:38 error 'active_element' is not defined no-undef
1655:21 error 'clipboard' is not defined no-undef
1656:21 error 'clipboard_op' is not defined no-undef
1658:25 error 'clipboard' is not defined no-undef
1668:107 error 'last_enter_pressed_to_rename_ts' is not defined no-undef
1682:21 error 'launch_app' is not defined no-undef
1705:21 error 'select_ctxmenu_item' is not defined no-undef
1713:21 error 'active_item_container' is not defined no-undef
1714:37 error 'active_item_container' is not defined no-undef
1717:25 error 'open_item' is not defined no-undef
1736:16 error 'clipboard' is not defined no-undef
1745:37 error 'trash_path' is not defined no-undef
1745:74 error 'trash_path' is not defined no-undef
1745:96 error 'clipboard_op' is not defined no-undef
1748:20 error 'clipboard_op' is not defined no-undef
1749:21 error 'copy_clipboard_items' is not defined no-undef
1750:25 error 'clipboard_op' is not defined no-undef
1751:21 error 'move_clipboard_items' is not defined no-undef
1760:13 error 'undo_last_action' is not defined no-undef
1767:9 error 'mouseX' is not defined no-undef
1768:9 error 'mouseY' is not defined no-undef
1771:13 error 'mouseX' is not defined no-undef
1771:29 error 'mouseY' is not defined no-undef
1771:38 error 'toolbar_height' is not defined no-undef
1771:63 error 'mouseX' is not defined no-undef
1771:78 error 'mouseY' is not defined no-undef
1772:13 error 'current_active_snap_zone' is not defined no-undef
1774:17 error 'mouseX' is not defined no-undef
1774:32 error 'mouseY' is not defined no-undef
1774:49 error 'mouseY' is not defined no-undef
1774:58 error 'desktop_height' is not defined no-undef
1775:13 error 'current_active_snap_zone' is not defined no-undef
1777:17 error 'mouseX' is not defined no-undef
1777:32 error 'mouseY' is not defined no-undef
1777:41 error 'desktop_height' is not defined no-undef
1778:13 error 'current_active_snap_zone' is not defined no-undef
1780:17 error 'mouseX' is not defined no-undef
1780:26 error 'desktop_width' is not defined no-undef
1780:48 error 'mouseY' is not defined no-undef
1780:65 error 'mouseY' is not defined no-undef
1780:74 error 'desktop_height' is not defined no-undef
1781:13 error 'current_active_snap_zone' is not defined no-undef
1783:18 error 'mouseX' is not defined no-undef
1783:27 error 'desktop_width' is not defined no-undef
1783:50 error 'mouseY' is not defined no-undef
1783:59 error 'toolbar_height' is not defined no-undef
1783:84 error 'mouseX' is not defined no-undef
1783:93 error 'desktop_width' is not defined no-undef
1783:115 error 'mouseY' is not defined no-undef
1784:13 error 'current_active_snap_zone' is not defined no-undef
1786:17 error 'mouseX' is not defined no-undef
1786:26 error 'desktop_width' is not defined no-undef
1786:48 error 'mouseY' is not defined no-undef
1786:58 error 'desktop_height' is not defined no-undef
1787:13 error 'current_active_snap_zone' is not defined no-undef
1789:17 error 'mouseY' is not defined no-undef
1789:26 error 'toolbar_height' is not defined no-undef
1789:49 error 'mouseX' is not defined no-undef
1789:66 error 'mouseX' is not defined no-undef
1789:75 error 'desktop_width' is not defined no-undef
1790:13 error 'current_active_snap_zone' is not defined no-undef
1793:13 error 'current_active_snap_zone' is not defined no-undef
1802:21 error 'mouseX' is not defined no-undef
1802:41 error 'mouseX' is not defined no-undef
1802:75 error 'mouseY' is not defined no-undef
1802:95 error 'mouseY' is not defined no-undef
1819:21 error 'mouseX' is not defined no-undef
1819:41 error 'mouseX' is not defined no-undef
1819:75 error 'mouseY' is not defined no-undef
1819:95 error 'mouseY' is not defined no-undef
1840:12 error 'mouseover_window' is not defined no-undef
1841:15 error 'mouseover_window' is not defined no-undef
1876:17 error 'upload_items' is not defined no-undef
1934:21 error 'logout' is not defined no-undef
1936:17 error 'logout' is not defined no-undef
1946:22 error 'gui_origin' is not defined no-undef
1951:50 error 'auth_token' is not defined no-undef
1958:18 error Empty block statement no-empty
/puter/src/helpers/determine_active_container_parent.js
22:30 error 'active_element' is not defined no-undef
25:30 error 'active_element' is not defined no-undef
29:30 error 'active_element' is not defined no-undef
32:41 error 'active_element' is not defined no-undef
32:61 error 'active_element' is not defined no-undef
33:30 error 'active_element' is not defined no-undef
36:41 error 'active_item_container' is not defined no-undef
37:28 error 'active_item_container' is not defined no-undef
/puter/src/helpers/download.js
51:27 error 'api_origin' is not defined no-undef
52:59 error 'auth_token' is not defined no-undef
92:16 error 'operation_cancelled' is not defined no-undef
/puter/src/helpers/new_context_menu_item.js
38:21 error 'create_folder' is not defined no-undef
48:21 error 'create_file' is not defined no-undef
56:21 error 'create_file' is not defined no-undef
70:25 error 'create_file' is not defined no-undef
/puter/src/helpers/refresh_item_container.js
83:13 error 'update_window_layout' is not defined no-undef
86:13 error 'update_details_layout_sort_visuals' is not defined no-undef
124:35 error 'trash_path' is not defined no-undef
162:29 error Empty block statement no-empty
166:51 error 'path' is not defined no-undef
168:34 error 'trash_path' is not defined no-undef
168:62 error 'appdata_path' is not defined no-undef
171:38 error 'desktop_item_positions' is not defined no-undef
178:37 error 'item_icon' is not defined no-undef
207:31 error 'trash_path' is not defined no-undef
216:21 error 'sort_items' is not defined no-undef
217:26 error Empty block statement no-empty
222:13 error 'sort_items' is not defined no-undef
233:17 error 'update_explorer_footer_item_count' is not defined no-undef
/puter/src/helpers/update_title_based_on_uploads.js
21:41 error 'active_uploads' is not defined no-undef
22:59 error 'active_uploads' is not defined no-undef
23:51 error 'active_uploads' is not defined no-undef
27:51 error 'active_uploads' is not defined no-undef
Most of these are window fields that wanted `window.` prepended, but a
couple of issues are code that was using undefined variables (`ht` and
`dir_uuid`) and some switch-cases that I believe are intentionally
falling through.
/puter/src/helpers.js
39:55 error 'auth_token' is not defined no-undef
47:14 error 'api_origin' is not defined no-undef
55:40 error 'auth_token' is not defined no-undef
59:17 error 'logout' is not defined no-undef
199:14 error 'api_origin' is not defined no-undef
208:40 error 'auth_token' is not defined no-undef
212:17 error 'logout' is not defined no-undef
224:14 error 'api_origin' is not defined no-undef
234:40 error 'auth_token' is not defined no-undef
238:17 error 'logout' is not defined no-undef
316:13 error Expected a 'break' statement before 'case' no-fallthrough
323:13 error Expected a 'break' statement before 'case' no-fallthrough
330:13 error Expected a 'break' statement before 'case' no-fallthrough
337:13 error Expected a 'break' statement before 'case' no-fallthrough
367:47 error Unnecessary escape character: \/ no-useless-escape
411:14 error 'isString' is not defined no-undef
420:47 error 'config' is not defined no-undef
519:21 error 'globToRegExp' is not defined no-undef
651:14 error Empty block statement no-empty
656:9 error 'update_auth_data' is not defined no-undef
678:36 error 'api_origin' is not defined no-undef
722:5 error 'update_user_preferences' is not defined no-undef
740:24 error 'uuidv4' is not defined no-undef
746:9 error 'appCallbackFunctions' is not defined no-undef
789:14 error 'api_origin' is not defined no-undef
794:40 error 'auth_token' is not defined no-undef
861:33 error 'trash_path' is not defined no-undef
867:21 error Empty block statement no-empty
889:70 error 'trash_path' is not defined no-undef
891:59 error 'trash_path' is not defined no-undef
894:49 error 'trash_path' is not defined no-undef
907:29 error 'docs_path' is not defined no-undef
909:35 error 'pictures_path' is not defined no-undef
911:35 error 'home_path' is not defined no-undef
913:35 error 'videos_path' is not defined no-undef
915:35 error 'desktop_path' is not defined no-undef
1037:5 error 'getItem' is not defined no-undef
1041:17 error 'setItem' is not defined no-undef
1070:54 error Empty block statement no-empty
1089:51 error 'ht' is not defined no-undef
1091:20 error 'desktop_loading_fade_delay' is not defined no-undef
1150:27 error 'operation_id' is not defined no-undef
1151:5 error 'operation_cancelled' is not defined no-undef
1169:21 error 'activate_item_name_editor' is not defined no-undef
1172:21 error 'actions_history' is not defined no-undef
1181:54 error 'copy_progress_hide_delay' is not defined no-undef
1187:37 error 'copy_progress_hide_delay' is not defined no-undef
1211:21 error 'activate_item_name_editor' is not defined no-undef
1214:21 error 'actions_history' is not defined no-undef
1245:22 error 'operation_id' is not defined no-undef
1246:5 error 'operation_cancelled' is not defined no-undef
1249:5 error 'update_explorer_footer_selected_items_count' is not defined no-undef
1263:24 error 'clipboard' is not defined no-undef
1264:29 error 'clipboard' is not defined no-undef
1273:20 error 'operation_cancelled' is not defined no-undef
1302:38 error 'clipboard' is not defined no-undef
1303:38 error 'clipboard' is not defined no-undef
1327:9 error 'actions_history' is not defined no-undef
1335:40 error 'copy_progress_hide_delay' is not defined no-undef
1341:29 error 'copy_progress_hide_delay' is not defined no-undef
1354:22 error 'operation_id' is not defined no-undef
1377:20 error 'operation_cancelled' is not defined no-undef
1432:9 error 'actions_history' is not defined no-undef
1440:40 error 'copy_progress_hide_delay' is not defined no-undef
1446:29 error 'copy_progress_hide_delay' is not defined no-undef
1486:17 error 'update_explorer_footer_item_count' is not defined no-undef
1487:17 error 'update_explorer_footer_selected_items_count' is not defined no-undef
1500:8 error 'clipboard' is not defined no-undef
1501:24 error 'clipboard' is not defined no-undef
1502:61 error 'clipboard' is not defined no-undef
1505:13 error 'move_items' is not defined no-undef
1508:5 error 'clipboard' is not defined no-undef
1537:23 error 'api_origin' is not defined no-undef
1537:84 error 'auth_token' is not defined no-undef
1556:34 error 'uuidv4' is not defined no-undef
1565:45 error 'get_apps' is not defined no-undef
1572:13 error This branch can never execute. Its condition is a duplicate or covered by previous conditions in the if-else-if chain no-dupe-else-if
1639:21 error 'root_dirname' is not defined no-undef
1684:37 error 'gui_origin' is not defined no-undef
1711:60 error 'app_domain' is not defined no-undef
1723:64 error 'auth_token' is not defined no-undef
1737:49 error 'auth_token' is not defined no-undef
1748:12 error 'api_origin' is not defined no-undef
1749:64 error 'api_origin' is not defined no-undef
1800:13 error 'launch_apps' is not defined no-undef
1803:13 error 'launch_apps' is not defined no-undef
1803:43 error 'launch_apps' is not defined no-undef
1806:13 error 'launch_apps' is not defined no-undef
1806:34 error 'launch_apps' is not defined no-undef
1810:22 error 'api_origin' is not defined no-undef
1819:48 error 'auth_token' is not defined no-undef
1867:56 error 'trash_path' is not defined no-undef
1873:34 error 'trash_path' is not defined no-undef
1942:30 error 'busy_indicator_hide_delay' is not defined no-undef
1948:25 error 'busy_indicator_hide_delay' is not defined no-undef
1954:48 error 'user_preferences' is not defined no-undef
1955:9 error 'launch_app' is not defined no-undef
1956:19 error 'user_preferences' is not defined no-undef
1967:9 error 'launch_app' is not defined no-undef
1978:25 error 'item_icon' is not defined no-undef
1992:9 error 'window_nav_history' is not defined no-undef
1992:45 error 'window_nav_history' is not defined no-undef
1992:88 error 'window_nav_history_current_position' is not defined no-undef
1993:9 error 'window_nav_history' is not defined no-undef
1994:9 error 'window_nav_history_current_position' is not defined no-undef
1996:9 error 'update_window_path' is not defined no-undef
2009:22 error 'api_origin' is not defined no-undef
2017:48 error 'auth_token' is not defined no-undef
2021:25 error 'logout' is not defined no-undef
2025:20 error Empty block statement no-empty
2029:70 error 'suggest_apps_for_fsentry' is not defined no-undef
2040:17 error 'unzipItem' is not defined no-undef
2057:17 error 'trigger_download' is not defined no-undef
2065:13 error 'launch_app' is not defined no-undef
2087:22 error 'operation_id' is not defined no-undef
2088:5 error 'operation_cancelled' is not defined no-undef
2129:12 error 'operation_cancelled' is not defined no-undef
2166:30 error Empty block statement no-empty
2173:20 error 'operation_cancelled' is not defined no-undef
2182:34 error 'trash_path' is not defined no-undef
2196:55 error 'trash_path' is not defined no-undef
2196:116 error 'trash_path' is not defined no-undef
2197:57 error 'trash_path' is not defined no-undef
2201:46 error 'trash_path' is not defined no-undef
2215:47 error 'trash_path' is not defined no-undef
2254:25 error 'update_explorer_footer_item_count' is not defined no-undef
2255:25 error 'update_explorer_footer_selected_items_count' is not defined no-undef
2260:34 error 'trash_path' is not defined no-undef
2270:25 error 'update_window_path' is not defined no-undef
2274:34 error 'trash_path' is not defined no-undef
2279:46 error 'dir_uuid' is not defined no-undef
2302:33 error 'item_icon' is not defined no-undef
2303:42 error 'trash_path' is not defined no-undef
2309:47 error 'trash_path' is not defined no-undef
2331:41 error 'item_icon' is not defined no-undef
2343:21 error 'sort_items' is not defined no-undef
2348:21 error 'sort_items' is not defined no-undef
2391:47 error 'trash_path' is not defined no-undef
2397:51 error 'trash_path' is not defined no-undef
2398:53 error 'trash_path' is not defined no-undef
2413:34 error 'trash_path' is not defined no-undef
2414:9 error 'actions_history' is not defined no-undef
2418:40 error 'trash_path' is not defined no-undef
2419:9 error 'actions_history' is not defined no-undef
2428:12 error 'copy_progress_hide_delay' is not defined no-undef
2641:21 error 'upload_items' is not defined no-undef
2659:21 error 'trash_path' is not defined no-undef
2679:21 error 'show_save_account_notice_if_needed' is not defined no-undef
2683:17 error 'active_uploads' is not defined no-undef
2695:17 error 'active_uploads' is not defined no-undef
2714:17 error 'actions_history' is not defined no-undef
2722:25 error 'show_save_account_notice_if_needed' is not defined no-undef
2723:33 error 'upload_progress_hide_delay' is not defined no-undef
2726:24 error 'active_uploads' is not defined no-undef
2733:24 error 'active_uploads' is not defined no-undef
2739:24 error 'active_uploads' is not defined no-undef
2766:17 error 'uuidv4' is not defined no-undef
2772:16 error 'trash_path' is not defined no-undef
2782:47 error 'trash_path' is not defined no-undef
2782:108 error 'trash_path' is not defined no-undef
2783:37 error 'trash_path' is not defined no-undef
2786:36 error 'trash_path' is not defined no-undef
2788:13 error 'update_explorer_footer_item_count' is not defined no-undef
2788:71 error 'trash_path' is not defined no-undef
2793:28 error 'copy_progress_hide_delay' is not defined no-undef
2799:28 error 'copy_progress_hide_delay' is not defined no-undef
2815:18 error 'api_origin' is not defined no-undef
2818:42 error 'auth_token' is not defined no-undef
2991:28 error 'copy_progress_hide_delay' is not defined no-undef
2998:28 error 'copy_progress_hide_delay' is not defined no-undef
3066:24 error 'copy_progress_hide_delay' is not defined no-undef
3074:24 error 'copy_progress_hide_delay' is not defined no-undef
3086:17 error 'actions_history' is not defined no-undef
3095:17 error 'suggest_apps_for_fsentry' is not defined no-undef
3104:95 error 'truncate_filename' is not defined no-undef
3104:123 error 'TRUNCATE_LENGTH' is not defined no-undef
3111:84 error 'item_icon' is not defined no-undef
3150:23 error 'update_sites_cache' is not defined no-undef
3153:27 error 'determine_website_url' is not defined no-undef
3158:17 error 'update_window_path' is not defined no-undef
3166:17 error 'sort_items' is not defined no-undef
3171:34 error 'truncate_filename' is not defined no-undef
3171:66 error 'TRUNCATE_LENGTH' is not defined no-undef
3205:9 error 'actions_history' is not defined no-undef
3206:29 error 'actions_history' is not defined no-undef
3211:13 error 'undo_create_file_or_folder' is not defined no-undef
3214:13 error 'rename_file' is not defined no-undef
3217:13 error 'undo_upload' is not defined no-undef
3220:13 error 'undo_copy' is not defined no-undef
3223:13 error 'undo_move' is not defined no-undef
3226:13 error 'undo_delete' is not defined no-undef
3249:26 error 'get_html_element_from_options' is not defined no-undef
3251:9 error 'move_items' is not defined no-undef
3257:26 error 'get_html_element_from_options' is not defined no-undef
3259:9 error 'move_items' is not defined no-undef
3265:21 error 'global_element_id' is not defined no-undef
3282:23 error 'determine_website_url' is not defined no-undef
3324:42 error 'byte_format' is not defined no-undef
3381:116 error 'truncate_filename' is not defined no-undef
3381:148 error 'TRUNCATE_LENGTH' is not defined no-undef
3396:5 error 'is_auto_arrange_enabled' is not defined no-undef
3398:5 error 'desktop_item_positions' is not defined no-undef
3408:8 error 'reset_item_positions' is not defined no-undef
3409:9 error 'delete_desktop_item_positions' is not defined no-undef
3415:26 error 'desktop_item_positions' is not defined no-undef
3426:44 error 'desktop_item_positions' is not defined no-undef
3430:5 error 'desktop_item_positions' is not defined no-undef
3438:28 error 'is_fullscreen' is not defined no-undef
3462:14 error 'window_for_app_instance' is not defined no-undef
3469:31 error 'iframe_for_app_instance' is not defined no-undef
3483:23 error 'window_for_app_instance' is not defined no-undef
3514:42 error Unnecessary escape character: \[ no-useless-escape
3514:59 error Unnecessary escape character: \/ no-useless-escape
/puter/src/UI/UIWindowSignup.js
154:22 error 'is_email' is not defined no-undef
170:35 error 'check_password_strength' is not defined no-undef
188:22 error 'gui_origin' is not defined no-undef
203:21 error 'update_auth_data' is not defined no-undef
/puter/src/UI/UIWindowSessionList.js
33:117 error 'icons' is not defined no-undef
34:41 error 'logged_in_users' is not defined no-undef
35:32 error 'logged_in_users' is not defined no-undef
134:36 error 'logged_in_users' is not defined no-undef
141:17 error 'update_auth_data' is not defined no-undef
/puter/src/UI/UIWindowSaveAccount.js
130:22 error 'api_origin' is not defined no-undef
142:48 error 'auth_token' is not defined no-undef
145:21 error 'update_auth_data' is not defined no-undef
/puter/src/UI/UIWindowRefer.js
25:20 error 'gui_origin' is not defined no-undef
25:37 error 'user' is not defined no-undef
73:30 error 'socialLink' is not defined no-undef
/puter/src/UI/UIWindowRecoverPassword.js
84:16 error 'is_email' is not defined no-undef
91:22 error 'api_origin' is not defined no-undef
101:25 error 'logout' is not defined no-undef
Line 107 tries to use `url` but can't see it.
Also, clarify usage of window fields.
/puter/src/UI/UIWindowPublishWebsite.js
67:67 error 'generate_identifier' is not defined no-undef
107:54 error 'url' is not defined no-undef
110:17 error 'update_sites_cache' is not defined no-undef
/puter/src/UI/UIWindowNewPassword.js
48:38 error 'api_origin' is not defined no-undef
153:35 error 'check_password_strength' is not defined no-undef
163:22 error 'api_origin' is not defined no-undef
/puter/src/UI/UIWindowMyWebsites.js
156:30 error 'api_origin' is not defined no-undef
164:56 error 'auth_token' is not defined no-undef
168:33 error 'logout' is not defined no-undef
/puter/src/UI/UIWindowMoveProgress.js
74:9 error 'operation_cancelled' is not defined no-undef
/puter/src/UI/UIWindowNewFolderProgress.js
67:9 error 'operation_cancelled' is not defined no-undef
/puter/src/UI/UIWindowProgressEmptyTrash.js
67:9 error 'operation_cancelled' is not defined no-undef
/puter/src/UI/UIWindowLogin.js
141:16 error 'is_email' is not defined no-undef
160:22 error 'gui_origin' is not defined no-undef
167:21 error 'update_auth_data' is not defined no-undef
180:59 error 'gui_origin' is not defined no-undef
186:29 error 'app_domain' is not defined no-undef
188:54 error 'gui_origin' is not defined no-undef
/puter/src/UI/UIWindowItemProperties.js
135:26 error Empty block statement no-empty
147:120 error 'byte_format' is not defined no-undef
155:395 error 'extractSubdomain' is not defined no-undef
/puter/src/UI/UIWindowDesktopBGSettings.js
168:26 error 'api_origin' is not defined no-undef
178:52 error 'auth_token' is not defined no-undef
182:29 error 'logout' is not defined no-undef
188:24 error Empty block statement no-empty
/puter/src/UI/UIWindowEmailConfirmationRequired.js
113:26 error 'api_origin' is not defined no-undef
121:52 error 'auth_token' is not defined no-undef
125:29 error 'logout' is not defined no-undef
131:29 error 'refresh_user_data' is not defined no-undef
160:22 error 'api_origin' is not defined no-undef
165:48 error 'auth_token' is not defined no-undef
169:25 error 'logout' is not defined no-undef
188:13 error 'logout' is not defined no-undef
/puter/src/UI/UIWindowChangePassword.js
107:31 error 'check_password_strength' is not defined no-undef
117:18 error 'api_origin' is not defined no-undef
121:44 error 'auth_token' is not defined no-undef
And also add some missing imports.
/puter/src/UI/UIWindow.js
33:20 error 'global_element_id' is not defined no-undef
34:5 error 'last_window_zindex' is not defined no-undef
48:5 error 'window_stack' is not defined no-undef
69:52 error 'uuidv4' is not defined no-undef
90:9 error 'is_embedded' is not defined no-undef
174:52 error 'last_window_zindex' is not defined no-undef
174:94 error 'last_window_zindex' is not defined no-undef
244:77 error 'is_embedded' is not defined no-undef
289:57 error 'navbar_path' is not defined no-undef
436:25 error 'launch_app' is not defined no-undef
456:9 error 'window_nav_history' is not defined no-undef
457:9 error 'window_nav_history_current_position' is not defined no-undef
524:9 error 'animate_window_opening' is not defined no-undef
599:17 error 'validate_fsentry_name' is not defined no-undef
790:9 error 'navbar_path_droppable' is not defined no-undef
791:9 error 'sidebar_item_droppable' is not defined no-undef
801:33 error 'window_nav_history' is not defined no-undef
801:63 error 'window_nav_history_current_position' is not defined no-undef
804:46 error 'root_dirname' is not defined no-undef
812:17 error 'window_nav_history_current_position' is not defined no-undef
812:68 error 'window_nav_history_current_position' is not defined no-undef
813:34 error 'window_nav_history' is not defined no-undef
813:64 error 'window_nav_history_current_position' is not defined no-undef
815:17 error 'update_window_path' is not defined no-undef
825:29 error 'window_nav_history_current_position' is not defined no-undef
826:38 error 'window_nav_history' is not defined no-undef
834:25 error 'window_nav_history_current_position' is not defined no-undef
835:42 error 'window_nav_history' is not defined no-undef
835:72 error 'window_nav_history_current_position' is not defined no-undef
840:59 error 'root_dirname' is not defined no-undef
847:29 error 'update_window_path' is not defined no-undef
869:33 error 'window_nav_history' is not defined no-undef
869:63 error 'window_nav_history_current_position' is not defined no-undef
872:46 error 'root_dirname' is not defined no-undef
880:17 error 'window_nav_history_current_position' is not defined no-undef
882:37 error 'window_nav_history' is not defined no-undef
882:67 error 'window_nav_history_current_position' is not defined no-undef
885:21 error 'update_window_path' is not defined no-undef
896:29 error 'window_nav_history_current_position' is not defined no-undef
896:86 error 'window_nav_history' is not defined no-undef
897:38 error 'window_nav_history' is not defined no-undef
905:25 error 'window_nav_history_current_position' is not defined no-undef
906:42 error 'window_nav_history' is not defined no-undef
906:72 error 'window_nav_history_current_position' is not defined no-undef
911:59 error 'root_dirname' is not defined no-undef
918:29 error 'update_window_path' is not defined no-undef
941:50 error 'root_dirname' is not defined no-undef
950:17 error 'window_nav_history' is not defined no-undef
950:46 error 'window_nav_history' is not defined no-undef
950:82 error 'window_nav_history_current_position' is not defined no-undef
951:17 error 'window_nav_history' is not defined no-undef
952:17 error 'window_nav_history_current_position' is not defined no-undef
954:17 error 'update_window_path' is not defined no-undef
968:25 error 'update_window_layout' is not defined no-undef
983:25 error 'update_window_layout' is not defined no-undef
986:25 error 'update_window_layout' is not defined no-undef
997:13 error 'is_auth' is not defined no-undef
1023:13 error 'update_explorer_footer_selected_items_count' is not defined no-undef
1106:21 error 'active_element' is not defined no-undef
1117:13 error 'update_explorer_footer_selected_items_count' is not defined no-undef
1143:18 error 'mouseover_window' is not defined no-undef
1205:82 error 'mouseX' is not defined no-undef
1205:107 error 'mouseY' is not defined no-undef
1219:83 error 'mouseover_window' is not defined no-undef
1244:31 error 'mouseover_window' is not defined no-undef
1246:17 error 'copy_items' is not defined no-undef
1246:45 error 'mouseover_window' is not defined no-undef
1252:21 error 'create_shortcut' is not defined no-undef
1255:27 error 'mouseover_window' is not defined no-undef
1264:17 error 'move_items' is not defined no-undef
1264:45 error 'mouseover_window' is not defined no-undef
1286:13 error 'scale_window' is not defined no-undef
1302:13 error 'scale_window' is not defined no-undef
1359:21 error 'upload_items' is not defined no-undef
1413:47 error 'window_width_threshold_for_sidebar' is not defined no-undef
1414:49 error 'window_width_threshold_for_sidebar' is not defined no-undef
1420:53 error 'window_width_threshold_for_sidebar' is not defined no-undef
1435:17 error 'last_window_zindex' is not defined no-undef
1460:29 error 'current_active_snap_zone' is not defined no-undef
1469:50 error 'current_active_snap_zone' is not defined no-undef
1473:43 error 'desktop_height' is not defined no-undef
1474:40 error 'toolbar_height' is not defined no-undef
1476:44 error 'last_window_zindex' is not defined no-undef
1480:55 error 'current_active_snap_zone' is not defined no-undef
1484:43 error 'desktop_height' is not defined no-undef
1485:40 error 'toolbar_height' is not defined no-undef
1487:44 error 'last_window_zindex' is not defined no-undef
1491:55 error 'current_active_snap_zone' is not defined no-undef
1495:43 error 'desktop_height' is not defined no-undef
1496:40 error 'toolbar_height' is not defined no-undef
1497:41 error 'desktop_width' is not defined no-undef
1498:44 error 'last_window_zindex' is not defined no-undef
1502:55 error 'current_active_snap_zone' is not defined no-undef
1506:43 error 'desktop_height' is not defined no-undef
1507:40 error 'toolbar_height' is not defined no-undef
1510:44 error 'last_window_zindex' is not defined no-undef
1514:55 error 'current_active_snap_zone' is not defined no-undef
1517:42 error 'desktop_width' is not defined no-undef
1518:43 error 'desktop_height' is not defined no-undef
1519:40 error 'toolbar_height' is not defined no-undef
1521:44 error 'last_window_zindex' is not defined no-undef
1525:55 error 'current_active_snap_zone' is not defined no-undef
1528:40 error 'toolbar_height' is not defined no-undef
1528:57 error 'desktop_height' is not defined no-undef
1531:43 error 'desktop_height' is not defined no-undef
1532:44 error 'last_window_zindex' is not defined no-undef
1536:55 error 'current_active_snap_zone' is not defined no-undef
1539:40 error 'toolbar_height' is not defined no-undef
1539:57 error 'desktop_height' is not defined no-undef
1540:41 error 'desktop_width' is not defined no-undef
1542:43 error 'desktop_height' is not defined no-undef
1543:44 error 'last_window_zindex' is not defined no-undef
1559:52 error 'current_active_snap_zone' is not defined no-undef
1590:28 error 'current_active_snap_zone' is not defined no-undef
1592:40 error 'toolbar_height' is not defined no-undef
1595:43 error 'desktop_height' is not defined no-undef
1599:33 error 'current_active_snap_zone' is not defined no-undef
1601:40 error 'toolbar_height' is not defined no-undef
1604:43 error 'desktop_height' is not defined no-undef
1608:33 error 'current_active_snap_zone' is not defined no-undef
1610:40 error 'toolbar_height' is not defined no-undef
1613:43 error 'desktop_height' is not defined no-undef
1617:33 error 'current_active_snap_zone' is not defined no-undef
1619:40 error 'toolbar_height' is not defined no-undef
1619:57 error 'desktop_height' is not defined no-undef
1622:43 error 'desktop_height' is not defined no-undef
1626:33 error 'current_active_snap_zone' is not defined no-undef
1628:40 error 'toolbar_height' is not defined no-undef
1628:57 error 'desktop_height' is not defined no-undef
1629:41 error 'desktop_width' is not defined no-undef
1631:43 error 'desktop_height' is not defined no-undef
1635:33 error 'current_active_snap_zone' is not defined no-undef
1637:40 error 'toolbar_height' is not defined no-undef
1640:43 error 'desktop_height' is not defined no-undef
1644:33 error 'current_active_snap_zone' is not defined no-undef
1645:29 error 'scale_window' is not defined no-undef
1656:51 error 'window_width_threshold_for_sidebar' is not defined no-undef
1657:53 error 'window_width_threshold_for_sidebar' is not defined no-undef
1663:57 error 'window_width_threshold_for_sidebar' is not defined no-undef
1674:71 error 'taskbar_height' is not defined no-undef
1676:51 error 'taskbar_height' is not defined no-undef
1703:35 error 'window_width_threshold_for_sidebar' is not defined no-undef
1718:36 error 'window_width_threshold_for_sidebar' is not defined no-undef
1719:49 error 'window_width_threshold_for_sidebar' is not defined no-undef
1725:42 error 'window_width_threshold_for_sidebar' is not defined no-undef
1733:50 error 'toolbar_height' is not defined no-undef
1734:38 error 'toolbar_height' is not defined no-undef
1736:32 error 'toolbar_height' is not defined no-undef
1773:13 error 'setItem' is not defined no-undef
1820:21 error 'scale_window' is not defined no-undef
1867:51 error 'trash_path' is not defined no-undef
1881:41 error 'sort_items' is not defined no-undef
1882:41 error 'set_sort_by' is not defined no-undef
1889:41 error 'sort_items' is not defined no-undef
1890:41 error 'set_sort_by' is not defined no-undef
1897:41 error 'sort_items' is not defined no-undef
1898:41 error 'set_sort_by' is not defined no-undef
1905:41 error 'sort_items' is not defined no-undef
1906:41 error 'set_sort_by' is not defined no-undef
1918:41 error 'sort_items' is not defined no-undef
1919:41 error 'set_sort_by' is not defined no-undef
1927:41 error 'sort_items' is not defined no-undef
1928:41 error 'set_sort_by' is not defined no-undef
1973:40 error 'clipboard' is not defined no-undef
1975:36 error 'clipboard_op' is not defined no-undef
1976:37 error 'copy_clipboard_items' is not defined no-undef
1977:41 error 'clipboard_op' is not defined no-undef
1978:37 error 'move_clipboard_items' is not defined no-undef
1986:39 error 'actions_history' is not defined no-undef
1988:33 error 'undo_last_action' is not defined no-undef
1998:33 error 'init_upload_using_dialog' is not defined no-undef
2014:48 error 'UIWindowSaveAccount' is not defined no-undef
2023:85 error 'UIWindowEmailConfirmationRequired' is not defined no-undef
2036:33 error 'launch_app' is not defined no-undef
2059:44 error 'mouseX' is not defined no-undef
2063:43 error 'mouseY' is not defined no-undef
2102:68 error 'trash_path' is not defined no-undef
2103:37 error 'delete_item' is not defined no-undef
2110:67 error 'trash_path' is not defined no-undef
2110:128 error 'trash_path' is not defined no-undef
2146:21 error 'upload_items' is not defined no-undef
2163:13 error 'enter_fullpage_mode' is not defined no-undef
2173:8 error 'active_element' is not defined no-undef
2174:9 error 'active_element' is not defined no-undef
2195:25 error 'item_icon' is not defined no-undef
2210:9 error 'window_nav_history' is not defined no-undef
2210:45 error 'window_nav_history' is not defined no-undef
2210:88 error 'window_nav_history_current_position' is not defined no-undef
2211:9 error 'window_nav_history' is not defined no-undef
2212:9 error 'window_nav_history_current_position' is not defined no-undef
2214:9 error 'update_window_path' is not defined no-undef
2257:37 error 'item_icon' is not defined no-undef
2364:9 error 'update_window_path' is not defined no-undef
2380:38 error 'root_dirname' is not defined no-undef
2389:9 error 'window_nav_history' is not defined no-undef
2389:45 error 'window_nav_history' is not defined no-undef
2389:88 error 'window_nav_history_current_position' is not defined no-undef
2390:9 error 'window_nav_history' is not defined no-undef
2391:9 error 'window_nav_history_current_position' is not defined no-undef
2391:62 error 'window_nav_history' is not defined no-undef
2392:9 error 'update_window_path' is not defined no-undef
2436:59 error 'root_dirname' is not defined no-undef
2453:19 error 'clipboard' is not defined no-undef
2455:16 error 'clipboard_op' is not defined no-undef
2456:17 error 'copy_clipboard_items' is not defined no-undef
2457:21 error 'clipboard_op' is not defined no-undef
2458:17 error 'move_clipboard_items' is not defined no-undef
2484:18 error 'mouseover_window' is not defined no-undef
2503:21 error 'create_shortcut' is not defined no-undef
2515:17 error 'move_items' is not defined no-undef
2525:18 error 'mouseover_window' is not defined no-undef
2605:12 error 'window_nav_history' is not defined no-undef
2605:42 error 'window_nav_history' is not defined no-undef
2605:84 error 'window_nav_history_current_position' is not defined no-undef
2612:12 error 'window_nav_history_current_position' is not defined no-undef
2626:55 error 'navbar_path' is not defined no-undef
2687:17 error 'update_window_layout' is not defined no-undef
2690:21 error 'update_details_layout_sort_visuals' is not defined no-undef
2698:13 error 'update_window_path' is not defined no-undef
2707:54 error 'root_dirname' is not defined no-undef
2712:9 error 'navbar_path_droppable' is not defined no-undef
2715:5 error 'update_explorer_footer_selected_items_count' is not defined no-undef
2727:18 error 'mouseover_window' is not defined no-undef
2746:21 error 'create_shortcut' is not defined no-undef
2758:17 error 'move_items' is not defined no-undef
2768:18 error 'mouseover_window' is not defined no-undef
2807:36 error 'sendWindowWillCloseMsg' is not defined no-undef
2819:23 error 'window_stack' is not defined no-undef
2829:17 error 'remove_taskbar_item' is not defined no-undef
2836:17 error 'exit_fullpage_mode' is not defined no-undef
2853:31 error 'window_stack' is not defined no-undef
2854:73 error 'window_stack' is not defined no-undef
2854:86 error 'window_stack' is not defined no-undef
2857:47 error 'window_stack' is not defined no-undef
2857:60 error 'window_stack' is not defined no-undef
2916:22 error 'window_stack' is not defined no-undef
2924:13 error 'active_item_container' is not defined no-undef
2949:20 error 'toolbar_height' is not defined no-undef
3007:14 error 'api_origin' is not defined no-undef
3017:40 error 'auth_token' is not defined no-undef
3021:17 error 'logout' is not defined no-undef
3083:43 error 'last_window_zindex' is not defined no-undef
3123:38 error 'last_window_zindex' is not defined no-undef
3127:98 error 'last_window_zindex' is not defined no-undef
3131:100 error 'last_window_zindex' is not defined no-undef
3147:81 error 'mouseX' is not defined no-undef
3147:106 error 'mouseY' is not defined no-undef
3151:9 error 'active_item_container' is not defined no-undef
3153:34 error 'active_item_container' is not defined no-undef
3155:9 error 'window_stack' is not defined no-undef
3157:11 error 'active_item_container' is not defined no-undef
3252:5 error 'sort_items' is not defined no-undef
3253:5 error 'set_sort_by' is not defined no-undef
3258:14 error 'api_origin' is not defined no-undef
3267:40 error 'auth_token' is not defined no-undef
3271:17 error 'logout' is not defined no-undef
3280:21 error 'update_details_layout_sort_visuals' is not defined no-undef
/puter/src/UI/UITaskbarItem.js
31:24 error 'global_element_id' is not defined no-undef
124:21 error 'launch_app' is not defined no-undef
143:21 error 'empty_trash' is not defined no-undef
158:25 error 'remove_taskbar_item' is not defined no-undef
160:21 error 'update_taskbar' is not defined no-undef
174:21 error 'update_taskbar' is not defined no-undef
250:73 error 'mouseover_window' is not defined no-undef
254:33 error 'path' is not defined no-undef
297:21 error 'launch_app' is not defined no-undef
328:89 error 'mouseover_window' is not defined no-undef
/puter/src/UI/UITaskbar.js
24:5 error 'global_element_id' is not defined no-undef
31:14 error 'api_origin' is not defined no-undef
36:40 error 'auth_token' is not defined no-undef
44:33 error 'global_element_id' is not defined no-undef
77:17 error 'launch_apps' is not defined no-undef
77:33 error 'launch_apps' is not defined no-undef
77:55 error 'launch_apps' is not defined no-undef
79:17 error 'launch_apps' is not defined no-undef
80:26 error 'api_origin' is not defined no-undef
85:52 error 'auth_token' is not defined no-undef
99:16 error 'launch_apps' is not defined no-undef
105:88 error 'launch_apps' is not defined no-undef
106:38 error 'launch_apps' is not defined no-undef
119:16 error 'launch_apps' is not defined no-undef
121:107 error 'launch_apps' is not defined no-undef
125:45 error 'launch_apps' is not defined no-undef
126:38 error 'launch_apps' is not defined no-undef
179:17 error 'launch_app' is not defined no-undef
201:25 error 'launch_app' is not defined no-undef
215:39 error 'trash_path' is not defined no-undef
228:68 error 'trash_path' is not defined no-undef
230:17 error 'launch_app' is not defined no-undef
236:13 error 'move_items' is not defined no-undef
236:31 error 'trash_path' is not defined no-undef
240:5 error 'make_taskbar_sortable' is not defined no-undef
262:22 error Empty block statement no-empty
284:29 error 'launch_app' is not defined no-undef
297:17 error 'update_taskbar' is not defined no-undef
301:17 error 'update_taskbar' is not defined no-undef
/puter/src/UI/UIPopover.js
28:5 error 'global_element_id' is not defined no-undef
33:30 error 'global_element_id' is not defined no-undef
40:59 error 'global_element_id' is not defined no-undef
76:59 error 'taskbar_height' is not defined no-undef
The click handler also makes use of the `options` parameter from
UINotification(), which isn't available there, so I've commented that
out. This needs more work.
/puter/src/UI/UINotification.js
21:5 error 'global_element_id' is not defined no-undef
26:39 error 'global_element_id' is not defined no-undef
34:73 error 'global_element_id' is not defined no-undef
47:14 error 'toolbar_height' is not defined no-undef
55:12 error 'options' is not defined no-undef
55:36 error 'options' is not defined no-undef
56:13 error 'options' is not defined no-undef
/puter/src/UI/UIItem.js
42:21 error 'global_element_id' is not defined no-undef
62:23 error 'determine_website_url' is not defined no-undef
100:58 error 'timeago' is not defined no-undef
104:42 error 'byte_format' is not defined no-undef
161:151 error 'truncate_filename' is not defined no-undef
161:183 error 'TRUNCATE_LENGTH' is not defined no-undef
171:5 error 'show_or_hide_empty_folder_message' is not defined no-undef
178:64 error 'trash_path' is not defined no-undef
186:9 error 'update_explorer_footer_item_count' is not defined no-undef
190:10 error 'is_auto_arrange_enabled' is not defined no-undef
217:21 error 'upload_items' is not defined no-undef
336:16 error 'mouseover_window' is not defined no-undef
337:39 error 'mouseover_window' is not defined no-undef
338:23 error 'mouseover_window' is not defined no-undef
341:24 error 'mouseX' is not defined no-undef
341:46 error 'mouseX' is not defined no-undef
341:69 error 'mouseY' is not defined no-undef
341:90 error 'mouseY' is not defined no-undef
342:88 error 'mouseX' is not defined no-undef
342:113 error 'mouseY' is not defined no-undef
350:18 error 'is_auto_arrange_enabled' is not defined no-undef
350:78 error 'trash_path' is not defined no-undef
352:17 error 'mouseover_window' is not defined no-undef
358:17 error 'desktop_item_positions' is not defined no-undef
359:17 error 'save_desktop_item_positions' is not defined no-undef
383:73 error 'mouseover_window' is not defined no-undef
427:21 error 'launch_app' is not defined no-undef
448:25 error 'copy_items' is not defined no-undef
450:25 error 'copy_items' is not defined no-undef
455:25 error 'create_shortcut' is not defined no-undef
468:32 error 'desktop_item_positions' is not defined no-undef
469:25 error 'save_desktop_item_positions' is not defined no-undef
471:21 error 'move_items' is not defined no-undef
483:89 error 'mouseover_window' is not defined no-undef
525:13 error 'open_item' is not defined no-undef
540:13 error 'open_item' is not defined no-undef
579:9 error 'update_explorer_footer_selected_items_count' is not defined no-undef
596:13 error 'update_explorer_footer_selected_items_count' is not defined no-undef
651:34 error 'truncate_filename' is not defined no-undef
651:66 error 'TRUNCATE_LENGTH' is not defined no-undef
661:9 error 'rename_file' is not defined no-undef
678:13 error 'last_enter_pressed_to_rename_ts' is not defined no-undef
679:13 error 'update_explorer_footer_selected_items_count' is not defined no-undef
718:25 error 'activate_item_name_editor' is not defined no-undef
763:78 error 'trash_path' is not defined no-undef
775:29 error 'move_items' is not defined no-undef
796:25 error 'zipItems' is not defined no-undef
810:25 error 'zipItems' is not defined no-undef
875:39 error 'delete_item' is not defined no-undef
877:63 error 'trash_path' is not defined no-undef
885:67 error 'trash_path' is not defined no-undef
885:116 error 'trash_path' is not defined no-undef
886:69 error 'trash_path' is not defined no-undef
906:29 error 'create_shortcut' is not defined no-undef
925:25 error 'move_items' is not defined no-undef
925:53 error 'trash_path' is not defined no-undef
936:63 error 'trash_path' is not defined no-undef
936:122 error 'trash_path' is not defined no-undef
945:25 error 'open_item' is not defined no-undef
962:49 error 'suggest_apps_for_fsentry' is not defined no-undef
984:37 error 'user_preferences' is not defined no-undef
987:43 error 'user_preferences' is not defined no-undef
989:42 error 'user_preferences' is not defined no-undef
1007:41 error 'user_preferences' is not defined no-undef
1008:72 error 'user_preferences' is not defined no-undef
1011:33 error 'launch_app' is not defined no-undef
1047:29 error 'open_item' is not defined no-undef
1093:25 error 'launch_app' is not defined no-undef
1114:25 error 'empty_trash' is not defined no-undef
1127:29 error 'zipItems' is not defined no-undef
1129:29 error 'trigger_download' is not defined no-undef
1140:25 error 'zipItems' is not defined no-undef
1151:41 error 'JSZip' is not defined no-undef
1180:25 error 'move_items' is not defined no-undef
1219:31 error 'clipboard' is not defined no-undef
1221:28 error 'clipboard_op' is not defined no-undef
1222:29 error 'copy_clipboard_items' is not defined no-undef
1223:33 error 'clipboard_op' is not defined no-undef
1224:29 error 'move_clipboard_items' is not defined no-undef
1247:25 error 'create_shortcut' is not defined no-undef
1265:25 error 'move_items' is not defined no-undef
1265:47 error 'trash_path' is not defined no-undef
1290:35 error 'delete_item' is not defined no-undef
1292:63 error 'trash_path' is not defined no-undef
1299:67 error 'trash_path' is not defined no-undef
1299:128 error 'trash_path' is not defined no-undef
1300:57 error 'trash_path' is not defined no-undef
1313:25 error 'activate_item_name_editor' is not defined no-undef
1373:9 error 'sort_items' is not defined no-undef
1376:9 error 'activate_item_name_editor' is not defined no-undef
1433:31 error 'copy_to_clipboard' is not defined no-undef
1517:9 error 'show_or_hide_empty_folder_message' is not defined no-undef
/puter/src/UI/UIDesktop.js
44:24 error 'gui_origin' is not defined no-undef
46:25 error 'auth_token' is not defined no-undef
86:5 error 'socket' is not defined no-undef
95:5 error 'socket' is not defined no-undef
104:5 error 'socket' is not defined no-undef
105:43 error 'trash_path' is not defined no-undef
106:45 error 'trash_path' is not defined no-undef
109:49 error 'trash_path' is not defined no-undef
112:5 error 'socket' is not defined no-undef
118:9 error 'launch_apps' is not defined no-undef
121:9 error 'launch_apps' is not defined no-undef
121:39 error 'launch_apps' is not defined no-undef
124:9 error 'launch_apps' is not defined no-undef
124:30 error 'launch_apps' is not defined no-undef
127:5 error 'socket' is not defined no-undef
146:5 error 'socket' is not defined no-undef
153:85 error 'truncate_filename' is not defined no-undef
153:114 error 'TRUNCATE_LENGTH' is not defined no-undef
156:77 error 'item_icon' is not defined no-undef
192:13 error 'update_window_path' is not defined no-undef
199:13 error 'sort_items' is not defined no-undef
203:5 error 'socket' is not defined no-undef
206:9 error 'sendItemChangeEventToWatchingApps' is not defined no-undef
220:25 error 'fsentry.path' is assigned to itself no-self-assign
233:17 error 'update_explorer_footer_item_count' is not defined no-undef
234:17 error 'update_explorer_footer_selected_items_count' is not defined no-undef
239:26 error 'trash_path' is not defined no-undef
249:17 error 'update_window_path' is not defined no-undef
253:26 error 'trash_path' is not defined no-undef
280:25 error 'item_icon' is not defined no-undef
281:34 error 'trash_path' is not defined no-undef
287:39 error 'trash_path' is not defined no-undef
308:37 error 'item_icon' is not defined no-undef
319:17 error 'sort_items' is not defined no-undef
324:13 error 'sort_items' is not defined no-undef
328:5 error 'socket' is not defined no-undef
333:9 error 'refresh_user_data' is not defined no-undef
336:5 error 'socket' is not defined no-undef
341:9 error 'refresh_user_data' is not defined no-undef
344:5 error 'socket' is not defined no-undef
346:9 error 'sendItemChangeEventToWatchingApps' is not defined no-undef
360:85 error 'truncate_filename' is not defined no-undef
360:114 error 'TRUNCATE_LENGTH' is not defined no-undef
363:77 error 'item_icon' is not defined no-undef
398:13 error 'update_window_path' is not defined no-undef
405:13 error 'sort_items' is not defined no-undef
409:5 error 'socket' is not defined no-undef
415:9 error 'sendItemChangeEventToWatchingApps' is not defined no-undef
440:81 error 'item_icon' is not defined no-undef
445:17 error 'sort_items' is not defined no-undef
455:29 error 'item_icon' is not defined no-undef
463:17 error Duplicate key 'associated_app_name' no-dupe-keys
470:17 error 'sort_items' is not defined no-undef
491:42 error 'desktop_path' is not defined no-undef
496:5 error 'getItem' is not defined no-undef
508:8 error 'url_query_params' is not defined no-undef
525:9 error 'update_user_preferences' is not defined no-undef
560:17 error 'upload_items' is not defined no-undef
560:52 error 'desktop_path' is not defined no-undef
577:16 error 'mouseover_window' is not defined no-undef
585:69 error 'desktop_path' is not defined no-undef
613:17 error 'copy_items' is not defined no-undef
613:43 error 'desktop_path' is not defined no-undef
617:17 error 'move_items' is not defined no-undef
617:43 error 'desktop_path' is not defined no-undef
649:39 error 'is_auto_arrange_enabled' is not defined no-undef
651:37 error 'is_auto_arrange_enabled' is not defined no-undef
651:64 error 'is_auto_arrange_enabled' is not defined no-undef
652:37 error 'store_auto_arrange_preference' is not defined no-undef
652:67 error 'is_auto_arrange_enabled' is not defined no-undef
653:40 error 'is_auto_arrange_enabled' is not defined no-undef
654:41 error 'sort_items' is not defined no-undef
655:41 error 'set_sort_by' is not defined no-undef
656:41 error 'clear_desktop_item_positions' is not defined no-undef
658:41 error 'set_desktop_item_positions' is not defined no-undef
668:44 error 'is_auto_arrange_enabled' is not defined no-undef
671:37 error 'sort_items' is not defined no-undef
672:37 error 'set_sort_by' is not defined no-undef
677:44 error 'is_auto_arrange_enabled' is not defined no-undef
680:37 error 'sort_items' is not defined no-undef
681:37 error 'set_sort_by' is not defined no-undef
686:44 error 'is_auto_arrange_enabled' is not defined no-undef
689:37 error 'sort_items' is not defined no-undef
690:37 error 'set_sort_by' is not defined no-undef
695:44 error 'is_auto_arrange_enabled' is not defined no-undef
698:37 error 'sort_items' is not defined no-undef
699:37 error 'set_sort_by' is not defined no-undef
708:44 error 'is_auto_arrange_enabled' is not defined no-undef
712:37 error 'sort_items' is not defined no-undef
713:37 error 'set_sort_by' is not defined no-undef
718:44 error 'is_auto_arrange_enabled' is not defined no-undef
722:37 error 'sort_items' is not defined no-undef
723:37 error 'set_sort_by' is not defined no-undef
757:43 error 'desktop_path' is not defined no-undef
767:35 error 'clipboard' is not defined no-undef
769:32 error 'clipboard_op' is not defined no-undef
770:33 error 'copy_clipboard_items' is not defined no-undef
770:54 error 'desktop_path' is not defined no-undef
771:37 error 'clipboard_op' is not defined no-undef
772:33 error 'move_clipboard_items' is not defined no-undef
780:35 error 'actions_history' is not defined no-undef
782:29 error 'undo_last_action' is not defined no-undef
791:29 error 'init_upload_using_dialog' is not defined no-undef
818:9 error 'is_embedded' is not defined no-undef
911:12 error 'user' is not defined no-undef
922:13 error 'is_embedded' is not defined no-undef
940:8 error 'url_query_params' is not defined no-undef
941:28 error 'url_query_params' is not defined no-undef
943:35 error 'home_path' is not defined no-undef
944:16 error 'url_query_params' is not defined no-undef
945:34 error 'url_query_params' is not defined no-undef
950:29 error 'item_icon' is not defined no-undef
966:13 error 'launch_app' is not defined no-undef
967:23 error 'app_launched_from_url' is not defined no-undef
970:25 error 'app_query_params' is not defined no-undef
1017:40 error 'taskbar_height' is not defined no-undef
1023:40 error 'user' is not defined no-undef
1024:9 error 'getItem' is not defined no-undef
1031:21 error 'setItem' is not defined no-undef
1125:47 error 'user' is not defined no-undef
1128:48 error 'user' is not defined no-undef
1131:25 error 'update_auth_data' is not defined no-undef
1170:37 error 'listSupportedLanguages' is not defined no-undef
1249:29 error 'logout' is not defined no-undef
1253:25 error 'logout' is not defined no-undef
1261:9 error 'is_fullscreen' is not defined no-undef
1308:5 error 'launch_app' is not defined no-undef
1381:9 error 'launch_apps' is not defined no-undef
1460:14 error 'api_origin' is not defined no-undef
1468:40 error 'auth_token' is not defined no-undef
1488:14 error 'toolbar_height' is not defined no-undef
1502:9 error 'reset_window_size_and_position' is not defined no-undef
1513:5 error 'refresh_desktop_background' is not defined no-undef
1520:26 error 'window_border_radius' is not defined no-undef
/puter/src/UI/UIContextMenu.js
23:21 error 'global_element_id' is not defined no-undef
117:57 error 'taskbar_height' is not defined no-undef
118:52 error 'taskbar_height' is not defined no-undef
260:17 error 'make_taskbar_sortable' is not defined no-undef
Solves these eslint issues:
/puter/src/UI/Settings/UITabAccount.js
34:13 error 'user' is not defined no-undef
47:99 error 'user' is not defined no-undef
55:12 error 'user' is not defined no-undef
59:105 error 'user' is not defined no-undef
/puter/src/UI/Settings/UITabLanguage.js
35:37 error 'listSupportedLanguages' is not defined no-undef
/puter/src/UI/Settings/UITabUsage.js
45:18 error 'api_origin' is not defined no-undef
50:46 error 'auth_token' is not defined no-undef
54:21 error 'logout' is not defined no-undef
96:18 error 'api_origin' is not defined no-undef
101:46 error 'auth_token' is not defined no-undef
105:21 error 'logout' is not defined no-undef
116:51 error 'byte_format' is not defined no-undef
123:41 error 'byte_format' is not defined no-undef
124:45 error 'byte_format' is not defined no-undef
/puter/src/UI/Settings/UIWindowChangeEmail.js
96:18 error 'api_origin' is not defined no-undef
100:44 error 'auth_token' is not defined no-undef
/puter/src/UI/Settings/UIWindowFinalizeUserDeletion.js
29:12 error 'user' is not defined no-undef
97:16 error 'user' is not defined no-undef
115:22 error 'api_origin' is not defined no-undef
120:50 error 'auth_token' is not defined no-undef
127:25 error 'logout' is not defined no-undef
139:25 error 'logout' is not defined no-undef
/puter/src/UI/Settings/UIWindowSettings.js
48:162 error 'icons' is not defined no-undef
86:13 error Duplicate key 'height' no-dupe-keys
Solves these eslint issues:
/puter/run-selfhosted.js
49:9 error 'console' is not defined no-undef
64:5 error 'console' is not defined no-undef
127:5 error 'console' is not defined no-undef
Resolves these eslint errors:
/puter/src/IPC.js
53:69 error 'appCallbackFunctions' is not defined no-undef
55:9 error 'appCallbackFunctions' is not defined no-undef
57:16 error 'appCallbackFunctions' is not defined no-undef
81:33 error 'window_for_app_instance' is not defined no-undef
84:27 error 'iframe_for_app_instance' is not defined no-undef
105:48 error Empty block statement no-empty
180:18 error 'api_origin' is not defined no-undef
190:44 error 'auth_token' is not defined no-undef
194:21 error 'logout' is not defined no-undef
207:18 error 'api_origin' is not defined no-undef
216:44 error 'auth_token' is not defined no-undef
220:21 error 'logout' is not defined no-undef
239:18 error 'api_origin' is not defined no-undef
248:44 error 'auth_token' is not defined no-undef
252:21 error 'logout' is not defined no-undef
268:13 error 'is_auth' is not defined no-undef
309:13 error 'is_auth' is not defined no-undef
348:27 error 'window_for_app_instance' is not defined no-undef
360:27 error 'window_for_app_instance' is not defined no-undef
576:35 error 'uuidv4' is not defined no-undef
582:9 error 'launch_app' is not defined no-undef
597:37 error 'appdata_path' is not defined no-undef
629:12 error 'appdata_signatures' is not defined no-undef
633:23 error 'appdata_signatures' is not defined no-undef
638:30 error 'appdata_path' is not defined no-undef
647:25 error 'appdata_signatures' is not defined no-undef
664:29 error 'appdata_signatures' is not defined no-undef
682:13 error 'is_auth' is not defined no-undef
717:13 error 'is_auth' is not defined no-undef
745:13 error 'is_auth' is not defined no-undef
773:13 error 'is_auth' is not defined no-undef
783:22 error 'api_origin' is not defined no-undef
793:48 error 'auth_token' is not defined no-undef
797:25 error 'logout' is not defined no-undef
825:13 error 'is_auth' is not defined no-undef
857:36 error 'operation_id' is not defined no-undef
872:41 error 'auth_token' is not defined no-undef
873:41 error 'api_origin' is not defined no-undef
939:45 error 'item_icon' is not defined no-undef
951:33 error 'sort_items' is not defined no-undef
954:29 error 'show_save_account_notice_if_needed' is not defined no-undef
998:38 error 'busy_indicator_hide_delay' is not defined no-undef
1004:33 error 'busy_indicator_hide_delay' is not defined no-undef
1018:37 error 'pictures_path' is not defined no-undef
1020:37 error 'desktop_path' is not defined no-undef
1022:37 error 'documents_path' is not defined no-undef
1024:37 error 'videos_path' is not defined no-undef
1026:37 error 'audio_path' is not defined no-undef
1028:37 error 'appdata_path' is not defined no-undef
1032:13 error 'is_auth' is not defined no-undef
1044:28 error 'operation_id' is not defined no-undef
1059:33 error 'auth_token' is not defined no-undef
1060:33 error 'api_origin' is not defined no-undef
1145:31 error 'iframe_for_app_instance' is not defined no-undef
1163:31 error 'window_for_app_instance' is not defined no-undef
1178:36 error 'get_apps' is not defined no-undef
1199:11 error 'window_for_app_instance' is not defined no-undef
Solves these eslint issues:
/puter/packages/puter-js/src/modules/UI.js
418:20 error 'itemWatchCallbackFunctions' is not defined no-undef
418:74 error 'itemWatchCallbackFunctions' is not defined no-undef
419:21 error 'itemWatchCallbackFunctions' is not defined no-undef
A couple of issues here:
- We didn't pass the line number to do_grep_line() so `i` was undefined
- Operator precedence messed with the ternary so when line numbers were
requested, the line wouldn't be output.
Found thanks to this now-solved eslint issue:
/puter/packages/phoenix/src/puter-shell/coreutils/grep.js
100:60 error 'i' is not defined no-undef
This was confusing its fallthrough detection:
/puter/packages/phoenix/src/puter-shell/coreutils/date.js
132:21 error Expected a 'break' statement before 'case' no-fallthrough
Found by this eslint issue:
/puter/packages/phoenix/src/puter-shell/coreutils/coreutil_lib/echo_escapes.js
107:59 error 'hexchars' is not defined no-undef
Also make tmp_value non-const because it gets modified later.
Solves these eslint issues:
/puter/packages/phoenix/src/ansi-shell/ioutil/SignalReader.js
45:14 error Unexpected negating the left operand of 'instanceof' operator no-unsafe-negation
46:13 error 'tmp_value' is constant no-const-assign
The `return` looks temporary but I don't know this code well enough.
Solves this eslint issue:
/puter/packages/backend/src/services/runtime-analysis/ExpectationService.js
94:9 error Unreachable code no-unreachable
Fixes these eslint issues:
/puter/packages/backend/src/services/auth/TokenService.js
3:1 error 'def' is not defined no-undef
18:1 error 'defv' is not defined no-undef
61:11 error 'def' is not defined no-undef
69:21 error 'defv' is not defined no-undef
The variable doesn't exist, and we never use it after this. Seems like a
copy-paste error.
Solves these eslint errors:
/puter/packages/backend/src/routers/save_account.js
90:9 error 'uuid_user' is not defined no-undef
91:9 error 'uuid_user' is not defined no-undef
91:21 error 'uuid_user' is not defined no-undef
/puter/packages/backend/src/util/stdioutil.js
26:24 error Unexpected control character(s) in regular expression: \x1b no-control-regex
/puter/packages/backend/src/util/streamutil.js
368:1 error 'string_to_stream' is not defined no-undef
463:5 error 'string_to_stream' is not defined no-undef
/puter/packages/backend/src/util/strutil.js
42:1 error 'format_as_usd' is not defined no-undef
56:5 error 'format_as_usd' is not defined no-undef
/puter/packages/backend/src/services/ContextInitService.js
57:18 error 'async_factory' is not defined no-undef
/puter/packages/backend/src/services/StorageService.js
22:5 error Expected to call 'super()' constructor-super
/puter/packages/backend/src/services/WebServerService.js
258:35 error 'services' is not defined no-undef
/puter/packages/backend/src/services/auth/AuthService.js
52:13 error Unreachable code no-unreachable
/puter/packages/backend/src/services/drivers/implementations/BaseImplementation.js
64:25 error 'services' is not defined no-undef
75:39 error 'services' is not defined no-undef
117:39 error 'services' is not defined no-undef
123:42 error 'services' is not defined no-undef
149:42 error 'services' is not defined no-undef
168:38 error 'services' is not defined no-undef
/puter/packages/backend/src/services/drivers/implementations/PuterDriverProxy.js
43:5 error Expected to call 'super()' constructor-super
44:9 error 'this' is not allowed before 'super()' no-this-before-super
/puter/packages/backend/src/services/drivers/meta/Construct.js
125:9 error Unreachable code no-unreachable
/puter/packages/backend/src/services/runtime-analysis/PagerService.js
49:41 error 'util' is not defined no-undef
/puter/packages/backend/src/routers/open_item.js
48:10 error Unexpected negating the left operand of 'instanceof' operator no-unsafe-negation
/puter/packages/backend/src/routers/save_account.js
106:34 error 'get_user' is not defined no-undef
/puter/packages/backend/src/routers/sign.js
37:10 error Unexpected negating the left operand of 'instanceof' operator no-unsafe-negation
/puter/packages/backend/src/routers/auth/list-permissions.js
36:15 error 'APIError' is not defined no-undef
/puter/packages/backend/src/routers/auth/list-sessions.js
17:15 error 'APIError' is not defined no-undef
/puter/packages/backend/src/routers/auth/revoke-user-app.js
34:15 error 'APIError' is not defined no-undef
43:15 error 'APIError' is not defined no-undef
/puter/packages/backend/src/routers/delete-site.js
43:11 error Unexpected empty object pattern no-empty-pattern
/puter/packages/backend/src/routers/drivers/usage.js
146:11 error 'k' is not defined no-undef
147:21 error 'k' is not defined no-undef
147:52 error 'k' is not defined no-undef
/puter/packages/backend/src/routers/drivers/xd.js
68:5 error 'window' is not defined no-undef
69:21 error Parsing error: The keyword 'interface' is reserved
/puter/packages/backend/src/routers/filesystem_api/batch/all.js
51:21 error 'get_app' is not defined no-undef
224:13 error Unexpected constant condition no-constant-condition
/puter/packages/backend/src/routers/filesystem_api/copy.js
70:10 error Unexpected constant condition no-constant-condition
106:13 error Duplicate key 'new_name' no-dupe-keys
/puter/packages/backend/src/routers/filesystem_api/read.js
80:5 error Unreachable code no-unreachable
/puter/packages/backend/src/routers/filesystem_api/token-read.js
53:9 error Unreachable code no-unreachable
58:9 error Unreachable code no-unreachable
104:5 error Unreachable code no-unreachable
/puter/packages/backend/src/routers/hosting/puter-site.js
65:21 error Unexpected constant nullishness on the left-hand side of a `??` expression no-constant-binary-expression
/puter/packages/backend/src/om/entitystorage/ValidationES.js
89:25 error Do not assign to the exception parameter no-ex-assign
/puter/packages/backend/src/om/proptypes/__all__.js
166:17 warning Unexpected 'debugger' statement no-debugger
/puter/packages/backend/src/routers/_default.js
405:31 error 'err' is not defined no-undef
/puter/packages/backend/src/helpers.js
682:9 error 'sharing_users' is not defined no-undef
689:12 error 'sharing_users' is not defined no-undef
690:28 error 'sharing_users' is not defined no-undef
695:28 error 'sharing_users' is not defined no-undef
720:9 error 'shared_fsentries' is not defined no-undef
733:12 error 'shared_fsentries' is not defined no-undef
734:28 error 'shared_fsentries' is not defined no-undef
735:17 error 'shared_fsentries' is not defined no-undef
735:58 error 'shared_fsentries' is not defined no-undef
736:31 error 'shared_fsentries' is not defined no-undef
900:57 error 'e' is not defined no-undef
1849:18 error Empty block statement no-empty
These currently work in a way that's different from what eslint expects,
so disable it. At some point it would be good if it could check them
(and if the tests could run on CI) but right now they just make a lot of
noise.
Removes or disables the following eslint errors/warnings:
/puter/packages/backend/src/api/filesystem/FlagParam.js
33:19 error 'APIError' is not defined no-undef
47:19 error 'APIError' is not defined no-undef
58:15 error 'APIError' is not defined no-undef
/puter/packages/backend/src/api/filesystem/StringParam.js
32:19 error 'APIError' is not defined no-undef
39:13 error 'APIError' is not defined no-undef
46:19 error 'APIError' is not defined no-undef
/puter/packages/backend/src/filesystem/FilesystemService.js
141:17 warning Unexpected 'debugger' statement no-debugger
366:21 error 'services' is not defined no-undef
/puter/packages/backend/src/filesystem/batch/BatchExecutor.js
121:21 error Do not assign to the exception parameter no-ex-assign
/puter/packages/backend/src/filesystem/hl_operations/hl_data_read.js
44:19 error 'APIError' is not defined no-undef
47:22 error 'chkperm' is not defined no-undef
48:19 error 'APIError' is not defined no-undef
51:29 error 'LLRead' is not defined no-undef
54:13 error 'version_id' is not defined no-undef
88:35 error 'PassThrough' is not defined no-undef
/puter/packages/backend/src/filesystem/hl_operations/hl_mkdir.js
68:49 error 'fs' is not defined no-undef
/puter/packages/backend/src/filesystem/hl_operations/hl_move.js
102:33 error 'get_user' is not defined no-undef
104:35 error 'get_user' is not defined no-undef
110:33 error 'df' is not defined no-undef
/puter/packages/backend/src/filesystem/hl_operations/hl_read.js
54:13 error 'stream' is constant no-const-assign
/puter/packages/backend/src/filesystem/hl_operations/hl_stat.js
40:37 error 'APIError' is not defined no-undef
/puter/packages/backend/src/filesystem/lib/PuterPath.js
67:5 error Expected to return a value in getter 'hasRelativePortion' getter-return
/puter/packages/backend/src/filesystem/ll_operations/ll_copy_idea.js
53:21 error 'UploadProgressTracker' is not defined no-undef
73:17 error 'PuterS3StorageStrategy' is not defined no-undef
137:22 error 'LLFilesystemOperation' is not defined no-undef
/puter/packages/backend/src/filesystem/ll_operations/ll_read.js
102:65 error 'offset' is not defined no-undef
102:73 error 'offset' is not defined no-undef
102:80 error 'length' is not defined no-undef
/puter/packages/backend/src/filesystem/ll_operations/ll_rmnode.js
43:23 error 'APIError' is not defined no-undef
/puter/packages/backend/src/filesystem/storage/SystemFSEntryService.js
101:26 error '_path' is not defined no-undef
/puter/packages/backend/src/filesystem/validation.js
27:29 error Unexpected control character(s) in regular expression: \x00, \x1f no-control-regex
28:29 error Unexpected control character(s) in regular expression: \x00, \x1f no-control-regex
28:31 error Unnecessary escape character: \/ no-useless-escape
eslint is a static analysis tool that tries to identify bugs and
mistakes in the code. We have quite a variety of code in this repo so
the config is a little complicated, but I've tried to make it clear.
It's found a *lot* of issues (over 1700), and while many of which will
not be actual problems, (it doesn't like us using window properties
without `window.`,) but some definitely are.
When using axios, its dependency follow-redirects only clears authorization header during cross-domain redirect, but allows the proxy-authentication header which contains credentials too.
## Steps To Reproduce & PoC
```js
const axios = require('axios');
axios.get('http://127.0.0.1:10081/', {
headers: {
'AuThorization': 'Rear Test',
'ProXy-AuthoriZation': 'Rear Test',
'coOkie': 't=1'
}
})
.then((response) => {
console.log(response);
})
```
When I meet the cross-domain redirect, the sensitive headers like authorization and cookie are cleared, but proxy-authentication header is kept.
```diff
- removeMatchingHeaders(/^(?:authorization|cookie)$/i, this._options.headers);
+ removeMatchingHeaders(/^(?:authorization|proxy-authorization|cookie)$/i, this._options.headers);
```
CWE-200
`CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N`
CVE-2024-28849
Gives CommandProviders a `complete(query, {ctx})` method where they can provide completed command names, and then make use of this in CommandCompleter.
Supported CommandProvider sources:
- Shell built-ins (was supported previously)
- PATH executables (when running under Node)
- Puter app names (when running in Puter)
Script filenames are not yet supported.
`../bin/foo` should only find `foo` relative to the current working
directory, not to directories in PATH.
Also switch to using the Node path library since PathCommandProvider is
Node-only, and this means getting the correct path separator and
delimiter values on Windows.
BetterReader.read_with_cancel() returns both the read promise, and a
function that can be used to cancel the read. A cancelled read is
placed back into the BetterReader's chunk buffer, to be consumed by the
next user that requests a read.
This is used by Coupler so that when the coupler is closed, its pending
read() call does not consume the next batch of input.
This fixes the problem we were having with child applications consuming
one chunk of stdin after they are closed, meaning the first key you
press after an app exits would disappear.
Co-authored-by: KernelDeimos <[email protected]>
After launching an app, if successful, we connect stdio streams to it,
and wait for it to exit before we return to the prompt.
stdio is implemented as regular AppConnection messages:
- stdin: `{ $: 'stdin', data: Uint8Array }` from phoenix -> child
- stdout: `{ $: 'stdout', data: Uint8Array }` from child -> phoenix
Terminal and Phoenix now communicate with each other using the same
style, instead of 'input' and 'output' messages. This will help with
eventually running subshells.
SIGINT currently is not sent. We also suffer from the same "one more
read from stdin happens after app exits" bug that's in
PathCommandProvider where I copied the stdin code from.
puter.ui.launchApp() returns a Promise that needs to resolve whether the
app uses the Puter SDK or not. Non-SDK apps are tricky because they
don't send a READY message on startup, and we don't know in advance
whether an app will use the SDK or not.
This is a workaround to ensure that launchApp() always resolves. When an
app is closed, if it wasn't using the SDK, we send an artificial
notification that it launched, followed by an extra notification that
it has closed (because the original close notification was sent before
this point). This means any users of launchApp() can await it, and get
an AppConnection, and listen to the close event. They can't otherwise
interact with a non-SDK app because it will have closed already, but we
can improve this in the future without breaking the API.
Apps are not required to use the Puter SDK. If they don't, then we can
still launch them, close them, and listen to their close event, but are
unable to send messages to them.
This brings Phoenix's minimum required version from 20.x down to 16.x.
ReadableStream.from() is deemed experimental, and requires Node 20.x
(or at least, something higher than 18.x). This was the only code that
made us require version 20.x.
ReadableStream and WritableStream are available from Node 16.5, but
require that they be explicitly imported.
This also runs the tests for contextlink, which I think we previously
never ran. I don't see any other packages that define an `npm test`
command. Having to manually list all the sub-package test directories in
the top-level package.json is a bit unfortunate, but it works.
For Puter itself we support Node 16.x IIRC, but Phoenix requires at
least 20.x currently.
Firstly, I was missing an `async` here, which somehow still worked for
me then, but produced errors for me when I tried it today.
Then, actually await the promise.
Finally, actually check the target's parent is us, and not just that it
has the attribute!
I don't know what was going on in my head that day. 🤦♂️
Sending a 'closeApp' message allows an app to close a target app, if it
has permission to do so. Currently, permission is granted if the
requesting app is the parent of the target app, or has godmode set.
Send an appClosed message with the instance ID of the app that was
closed. This will be picked up by Puter.js's AppConnection and reported
as a 'close' event.
To make this work, a `data-parent_instance_id` attribute is set on child
app windows. This is very similar to the `data-parent_uuid` attribute,
which tracks parent windows instead of parent app instances. (Dialogs
have a parent window, but are not apps, so don't have a parent app
instance.) The difference is subtle, and we may want to combine these in
the future, but currently closing an app will close any child windows,
which is not behaviour we want for child apps.
This is left open to future additions, by naming it 'locale', and having
the language just be an object field.
Side note, maybe we should have a LocaleService for this?
A broadcast is a message sent to every running app that uses Puter.js.
Broadcasts have a name and a data payload, and are sent as a 'broadcast'
message.
Send a broadcast using:
`globalThis.services.get('broadcast').sendBroadcast(...)`
When doing so, you have the option to keep the broadcast message around,
so that it can be sent to any newly-launched apps. Sending another
broadcast with the same name will overwrite the previous one, so you
don't have to worry about flooding a new app with duplicates.
Previously, we just output whatever err.responseText was. However, that
has some downsides:
- If there's no responseText (as for when we can't find the domain) then
the user gets a blank message.
- If it's a 404 error, the responseText includes the full HTML for
Puter's 404 page, which we don't want to dump in the error box! This
is unlikely to happen in practice, but was easy enough to cater for.
So, add a nicer message in those cases.
The misconfiguration message is taken from here:
https://github.com/HeyPuter/puter/issues/185#issuecomment-2037977592Resolves#235.
Calling `puter.ui.launchApp()` now treats the new app as a child of the
one that launched it.
A child app is given a `puter.parent_instance_id` URL param, containing
its parent's instance ID.
Previously, `launchApp()` would resolve as soon as the app was launched.
This commit changes that, so that it is notified after the child app
sends its READY event to Puter. This means that as soon as `launchApp()`
has completed, the child app is ready to receive messages. The downside
is that launching an app that does not include Puter.js will now not
cause a notification, so `await puter.ui.launchApp()` will not resolve
in that case.
This lets apps communicate with each other, via Puter.
We probably want to limit this in some way, but for now, all apps are
allowed to send messages to any other apps.
The message is:
- `targetAppInstanceID`: The instance ID to send the message to
- `targetAppOrigin`: targetOrigin passed to postMessage(), in case we
want to restrict which URL can receive the message
- `contents`: The message to send to the target
Related to #214; added additional architectures which may or may not work. I'd rather someone find out it doesn't work then for them to be blocked from even trying.
If code uses `i18n('foo')` and 'foo' is not in the dictionary for the en
translation, then this script will now report it as an error. This has
already helped catch a few mistakes.
value:Please fill this form to report the bug you encoutered on Puter
- type:textarea
id:description
attributes:
label:Issue Description
description:Type a description of what the bug does
validations:
required:true
- type:textarea
id:reproduce
attributes:
label:Steps to reproduce
description:Type how we may reproduce the bug
placeholder:Open the menu, click that button...
validations:
required:false
- type:textarea
id:expected-behaviour
attributes:
label:Expected behaviour
description:Tell us what you would expect to happen if the bug wasn't there
placeholder:Its supposed to...
validations:
required:false
- type:textarea
id:additional-info
attributes:
label:Addition Information or Screenshots (if applicable)
description:You can add any additional informations, such as screenshots of the bug
placeholder:You can add a screenshot by clicking the image icon in the text zone
validations:
required:false
- type:checkboxes
id:deployment
attributes:
label:Deployment
description:Select on which deployment(s) you encountered the bug
options:
- label:Production (puter.com)
- label:Development (`npm run start`)
- label:Docker (via `docker run`)
- label:Docker (via `docker-compose`)
validations:
required:true
- type:input
id:version
attributes:
label:Puter version
description:Type the version of Puter you were using when you encountered the bug. This is not required. If you can't access the version, then continue without adding the version number.
placeholder:Click the profile button on the top-right, then "Settings". The version number will be printed at the bottom
- add Escape key functionality to UIPrompt for closing the prompt ([e1b6c83](https://github.com/HeyPuter/puter/commit/e1b6c83813d03809aba0abdecbf6de5529728031))
- set max token to 8096 ([b2ea8a3](https://github.com/HeyPuter/puter/commit/b2ea8a3888c5496858d257018071ba54abd6f4a8))
- added tagify in Filetype-Association input in dev center ([0cd1f15](https://github.com/HeyPuter/puter/commit/0cd1f151b5986ede431f1792139fa1a5471ae059))
- add reset edit changes button to dev-center ([55ffd80](https://github.com/HeyPuter/puter/commit/55ffd801e007723758eacc17ec732ee5a336123e))
- enable/disable save button in dev-center iff changes made ([63a0053](https://github.com/HeyPuter/puter/commit/63a0053da8c76bf4ac175c7f17353225443dd342))
- record signup metadata for abuse prevention ([66016b9](https://github.com/HeyPuter/puter/commit/66016b9db602ca85e8f0ddc846865d4641e64190))
- add support for categories in the Dev Center ([7cf215a](https://github.com/HeyPuter/puter/commit/7cf215ab677e3fc912a3bd1ac52795c1e8860c32))
- puter.js's showSpinner() will keep the spinner active for at least 1200ms ([fc5aca1](https://github.com/HeyPuter/puter/commit/fc5aca1f72de22c1530054272b55a59021ba9caa))
- allow developers to set social media images for their apps ([be36d31](https://github.com/HeyPuter/puter/commit/be36d31509280340e2a62a8c478b1e64617792a4))
- automatically open the browser when starting Puter ([2d43129](https://github.com/HeyPuter/puter/commit/2d4312972a1377a64732694811fe889f59573432))
- spinner for the `showWorking()` overlay in puter.js ([1062363](https://github.com/HeyPuter/puter/commit/1062363096418f164a6d00ed8872770ff64237b5))
- show profile pics in sharing notifications ([0e45132](https://github.com/HeyPuter/puter/commit/0e45132c05aa1106503fef02b7e4c97ecc675e10))
- allow `launchApp` to open explorer at a specific path ([8fefd4a](https://github.com/HeyPuter/puter/commit/8fefd4a61f0005d4f3ec2e43f7249f3edd91c837))
- Require email confirmation before sharing ([cdd1a8c](https://github.com/HeyPuter/puter/commit/cdd1a8c4e379b885ff48a874ae5577d2f0efae06))
- show unread notification count in the browser tab's title ([045259c](https://github.com/HeyPuter/puter/commit/045259cefbe24e3f52fe3840e4975d3243e99957))
- in Share window, display access level next to recipient ([cf4b6aa](https://github.com/HeyPuter/puter/commit/cf4b6aa1c24d936f9a42ca1e2945eea40939c970))
- when sharing, users can choose between 'viewer' and 'editor' for permissions ([0cbe013](https://github.com/HeyPuter/puter/commit/0cbe0139d7f306ce62992f1eda94d99e09b32df8))
- handle `notif.ack` in desktop ([a6650ee](https://github.com/HeyPuter/puter/commit/a6650ee2d8074aeb7c476e5572334853f1b6d7e8))
- add error handling to the share flow ([b5bb95e](https://github.com/HeyPuter/puter/commit/b5bb95e2d7f6021a6341e26cf15d5449ada48830))
- the `socialLink` UI component ([1adfe5c](https://github.com/HeyPuter/puter/commit/1adfe5c70947d9de008c9d601f91b1ee14128d5d))
- Reaload App option in the window title bar context menu ([27c01c9](https://github.com/HeyPuter/puter/commit/27c01c9bd991ef871153eb5931f78fec265a62e4))
- collapsible sidebar menu in Dev Center ([1056231](https://github.com/HeyPuter/puter/commit/1056231004a629f3f76f2525ec7d83b67d3d7fa5))
- customize the order of Explorer sidebar items ([ff30de1](https://github.com/HeyPuter/puter/commit/ff30de1d6947e4692b5cf0da2e19ab37aacf1ec8))
- add extension API for modules ([14d45a2](https://github.com/HeyPuter/puter/commit/14d45a27edb99f63b4f6e010221e3a0880ae246d))
- first extension that implements a custom user options menu ([fc5e15f](https://github.com/HeyPuter/puter/commit/fc5e15f2a6d4eb5e5847fa7f2dd87b1fa382fc7c))
- add support for extensions ([b018571](https://github.com/HeyPuter/puter/commit/b018571a86f4114eab9b5edde4ecd87e343d22a7))
- add an 'Upload' button at the bottom of `OpenFilePicker` ([54ae69b](https://github.com/HeyPuter/puter/commit/54ae69b7b76016307c3b92437ca06dc2aa1eddb9))
- Allow apps to toggle `credentialless` via Dev Center ([af511c0](https://github.com/HeyPuter/puter/commit/af511c05e3ddddcce661c5406d5c831a21689608))
- add config for blocked email domains ([955b087](https://github.com/HeyPuter/puter/commit/955b087297f829b11b82dc9bd79a0e03721c5f33))
- add support for `fadeIn` effect for `UIWindow` ([13248a9](https://github.com/HeyPuter/puter/commit/13248a99bfa318e84cb99e2954a5f46805eda34f))
- welcome screen to quickly explain what Puter is ([564ff65](https://github.com/HeyPuter/puter/commit/564ff65363258cab4196b967dd556105e424d48c))
- v86 9p server support ([b145e30](https://github.com/HeyPuter/puter/commit/b145e30a90ff2f0d44d89f83dbda4de1bf2991d4))
- support readdir for directory symlinks ([7f1b870](https://github.com/HeyPuter/puter/commit/7f1b870d302421972c4f6221ae6d93b5979d51dd))
- allow passing cli args via url ([5317adf](https://github.com/HeyPuter/puter/commit/5317adf8a4961be3f0ca2a8c403c922633f934fa))
- add -c flag for phoenix ([b6c0cb6](https://github.com/HeyPuter/puter/commit/b6c0cb6abc1c29846b4b7e696812476bea24bbc7))
- progress indicator for emulator ([08601ae](https://github.com/HeyPuter/puter/commit/08601ae2af7b1f564690e6a9cae7e689cb7ba48a))
- translate README.md to Dutch ([31e2773](https://github.com/HeyPuter/puter/commit/31e2773743c336630c917e893b0148441f5fc515))
- add connectToInstance method to puter.ui ([62634b0](https://github.com/HeyPuter/puter/commit/62634b0afe4d33da08768975322d4deb23041442))
- add method to list models ([fd86934](https://github.com/HeyPuter/puter/commit/fd86934bc9021541810447cf7e2a5f33b3e283b3))
- add streaming to XHR driver client ([7600d9b](https://github.com/HeyPuter/puter/commit/7600d9b07c5b719d529f8a48c38d9178efefa266))
- add writable attribute to fs items ([2386d87](https://github.com/HeyPuter/puter/commit/2386d87229aa6205ef8ced6563371ab40a0def62))
- report feature flags in /whoami ([4561b89](https://github.com/HeyPuter/puter/commit/4561b8937de025471c2dfb1771465d779cefab5d))
- make public folders a config opt-in ([209555c](https://github.com/HeyPuter/puter/commit/209555c1d93845fa129bea450f9c25d595a3c60f))
- add feature flag for /share ([461ea3e](https://github.com/HeyPuter/puter/commit/461ea3eae6ad32bf34c43a822de7a06f08efb556))
- add message encryption between Puter peers ([cea2964](https://github.com/HeyPuter/puter/commit/cea29645fec493020a4f66e378b087fa17ae03d4))
- add test_mode flag ([9a9bd5e](https://github.com/HeyPuter/puter/commit/9a9bd5eaf0aca8fd1cc57455db03dba55801d5a0))
- add tts driver to puterai module ([78fa77d](https://github.com/HeyPuter/puter/commit/78fa77d9200e0b9fafc4014f8d0cb08c74cd16cb))
- add image generation driver to puterai module ([fb26fdb](https://github.com/HeyPuter/puter/commit/fb26fdbc561d5545d28352427553695cd3237ad5))
- add chat completions driver to puterai module ([4e3bd18](https://github.com/HeyPuter/puter/commit/4e3bd1831e92e83ce9b4e30a16afd562b0221dd8))
- add --overwrite-config and configurable uuid masking ([ef6671d](https://github.com/HeyPuter/puter/commit/ef6671da18f6841cb2143808fe21586ac3505942))
- add textract driver to puterai module ([f924d48](https://github.com/HeyPuter/puter/commit/f924d48b02f39884931db45a05dd61b65f2cee4a))
- add password reset from server console ([984ae9e](https://github.com/HeyPuter/puter/commit/984ae9e6a23da17414e43d58fc0e861827031269))
- add server command to scan permissions ([54471fa](https://github.com/HeyPuter/puter/commit/54471fada946a70eaa0df6bfceae995bc4e5848c))
- grant user driver perms from admin ([c9ded89](https://github.com/HeyPuter/puter/commit/c9ded89b22bb822c20aea379a17a8bdf74a658de))
- replace default_user with admin ([f0c36a1](https://github.com/HeyPuter/puter/commit/f0c36a1cdf16f11765c29360a5c38140008b90c7))
- add system user ([ab15629](https://github.com/HeyPuter/puter/commit/ab156297a746c0754145c2abdb2c99bb1b30651a))
- add options to disable winston and devwatch ([5d5f566](https://github.com/HeyPuter/puter/commit/5d5f5660b4020650b68b79ccf3860d3fb0bf98a9))
- add new file templates ([1f7f094](https://github.com/HeyPuter/puter/commit/1f7f094282fae915a2436701cfb756444cd3f781))
- add option to disable temporary users ([f9333b3](https://github.com/HeyPuter/puter/commit/f9333b3d1e05bd0dffaecd2e29afd08ea61559fc))
- add some default groups ([ba50d0f](https://github.com/HeyPuter/puter/commit/ba50d0f96d58075abec067d24e6532bd874093f0))
- Add support for dropping multiple Puter items onto Dev Center (close #311) ([8e7306c](https://github.com/HeyPuter/puter/commit/8e7306c23be01ee6c31cdb4c99f2fb1f71a2247f))
#### Translations
- complete Hungarian translation of Puter #972 ([7d2787d](https://github.com/HeyPuter/puter/commit/7d2787d26b3a64cbc128fb2cb3871b43b41912fe))
- add missing Igbo translations for billing-related terms ([f0f19e7](https://github.com/HeyPuter/puter/commit/f0f19e727e574a8558fcbbf27ba501f434db69f8))
- Complete the Vietnamese translation of Puter #954 ([56489c3](https://github.com/HeyPuter/puter/commit/56489c33f611fc053096b455e4cb7b3d8f20852c))
- Complete the French (Français) translation of Puter #975 ([c840bc8](https://github.com/HeyPuter/puter/commit/c840bc8161055b90e040bdae3196817e0791ecf5))
- Complete the German (Deutsch) translation of Puter ([05fef67](https://github.com/HeyPuter/puter/commit/05fef6749e8d80f13ab94a4e0ea49ce4972a0961))
- (#954) Add Vietnamese translations for billing-related terms ([267a55a](https://github.com/HeyPuter/puter/commit/267a55aae50f87edb483abb375029ff79e736112))
- add vietnamese translations for billing in vi.js ([3e26dbe](https://github.com/HeyPuter/puter/commit/3e26dbe6a0411fe75c36cf2866d34f28a2dcb553))
- added a few Korean translatations ([b23e800](https://github.com/HeyPuter/puter/commit/b23e800f4e70f162b52cc15053d03961a37033bb))
- add brazillian translations for billing-related terms in br.js (revision) ([fdfc90a](https://github.com/HeyPuter/puter/commit/fdfc90a9317a19d45a0b2b3ad283be9a10a92732))
- add brazillian translations for billing-related terms in br.js ([e66df14](https://github.com/HeyPuter/puter/commit/e66df14862e6dd7278623279e43e2189e7ddafe5))
- Add Indonesian Translation for i18n ([033643b](https://github.com/HeyPuter/puter/commit/033643b0e757b51ea0be90e2198bbec65d31cfc5))
- add Polish translations for billing-related terms ([15f9ade](https://github.com/HeyPuter/puter/commit/15f9aded26eaa4c630fe948350d3a53cdb0278a3))
- update Urdu localization with missing translations ([0c4b994](https://github.com/HeyPuter/puter/commit/0c4b9946442ad92549522fcd91ea6aefbb9f19d6))
- Update zhtw.js, Complete Traditional Chinese translation based on English file #550 ([b9e73b7](https://github.com/HeyPuter/puter/commit/b9e73b7288aebb14e6bbf1915743e9157fc950b1))
- update zhtw.js to match en.js ([37fd666](https://github.com/HeyPuter/puter/commit/37fd666a9a6788d5f0c59311499f29896b48bc82))
- Add Tamil translation to translations.js ([8a3d043](https://github.com/HeyPuter/puter/commit/8a3d0430f39f872b8a460c344cce652c340b700b))
- Move Tamil translation to the rest of translations ([333d6e3](https://github.com/HeyPuter/puter/commit/333d6e3b651e460caca04a896cbc8c175555b79b))
- Translation improvements, mainly style and context-based ([8bece96](https://github.com/HeyPuter/puter/commit/8bece96f6224a060d5b408e08c58865fadb8b79c))
- update translation file es.js to be up to date with the file en.js ([1515278](https://github.com/HeyPuter/puter/commit/151527825f1eb4b060aaf97feb7d18af4fcddbf2))
- Translate en.js as of 2024-07-10 ([8e297cd](https://github.com/HeyPuter/puter/commit/8e297cd7e30757073e2f96593c363a273b639466))
- Create hu.js hungarian language ([69a80ab](https://github.com/HeyPuter/puter/commit/69a80ab3d2c94ee43d96021c3bcbdab04a4b5dc6))
- Update translations.js to Hungarian lang ([56820cf](https://github.com/HeyPuter/puter/commit/56820cf6ee56ff810a6b495a281ccbb2e7f9d8fb))
- Tamil translation ([81781f8](https://github.com/HeyPuter/puter/commit/81781f80afc07cd1e6278906cdc68c8092fbfedf))
- share only emails email_confirmed recipients ([2336a62](https://github.com/HeyPuter/puter/commit/2336a62b4f635c025b02bb7efe91b5ddf58bae25))
- database issue with KBKV update ([7ba1b76](https://github.com/HeyPuter/puter/commit/7ba1b7656b5e24375cad639b9a8e37577b526c09))
- taskbar items of apps should always appear before Trash ([94e7f5d](https://github.com/HeyPuter/puter/commit/94e7f5deb4330a844a680c22f55b8753225a1a7e))
- bug in writeFile rename ([298609c](https://github.com/HeyPuter/puter/commit/298609c6e9080e00c90b66c673e104d90f9d3ed0))
- remove unnecessary `item_path` definition in `delete` fs api ([c792f4a](https://github.com/HeyPuter/puter/commit/c792f4a345b307d024f73ff2817ae473b2620913))
- add id to the setting menu item in user option menu ([67ca4cc](https://github.com/HeyPuter/puter/commit/67ca4ccf20fd714848121192d5ae7c41f3763da4))
- add an id to `My Websites` content menu item ([e662c78](https://github.com/HeyPuter/puter/commit/e662c782b745f4f98024d1353a6a162d5fe58c44))
- remove unnecessary `integrity` and `crossorigin` attributes in dev center when linking to jquery ([8dec78b](https://github.com/HeyPuter/puter/commit/8dec78b090ec4434ad77003d6f3c25de98779864))
- remove inactive links in README ([f3d270c](https://github.com/HeyPuter/puter/commit/f3d270ccbcd8990270cf968a3638b7affa2df6ba))
- improve backend mod error handling ([fe1a4cf](https://github.com/HeyPuter/puter/commit/fe1a4cfd4d5dd1eddbb2d50ef3f5ebf78a81656d))
- app query should return app metadata ([3cedd17](https://github.com/HeyPuter/puter/commit/3cedd17b8ed4acb1099bc2e87aba0137339c8a17))
- safe parsing of app metadata ([a2c7b37](https://github.com/HeyPuter/puter/commit/a2c7b379f8181b373b0513d9166f75adc147aafa))
- configuration for browser launch ([791f774](https://github.com/HeyPuter/puter/commit/791f7748c7c1959f63327a73a7e24e41b574a910))
- always adapt model for ClaudeEnough ([56710e1](https://github.com/HeyPuter/puter/commit/56710e17f3b06eef07e54c243f6b725fcc4a4583))
- automatically open browser when starting only if in dev env ([f500fb4](https://github.com/HeyPuter/puter/commit/f500fb47061f8f3a3dc7d871cb529f5c0b058185))
- image generation supports test mode ([f533dca](https://github.com/HeyPuter/puter/commit/f533dca1a6d88ca7a14bd69f15d0a151e24c58e1))
- share issue with prefix usernames ([d30d62f](https://github.com/HeyPuter/puter/commit/d30d62f558ca5f8c74090900aa39c13ca3ca1d2e))
- permission grants in open_item ([16257a7](https://github.com/HeyPuter/puter/commit/16257a7b5459550ee3782cf32c87a8241325878d))
- don't access `metadata.credentialless` if it doesn't exist ([9590bbd](https://github.com/HeyPuter/puter/commit/9590bbdad1099cf75d6073663a9fcec5f3136482))
- reinitialize settings tabs for DOM events ([16b9f09](https://github.com/HeyPuter/puter/commit/16b9f09e66ffe1584f925cb1a9f261bc159c8dda))
- use correct cursor when hovering over sidebar items ([c44b9ab](https://github.com/HeyPuter/puter/commit/c44b9ab8d5f575393bf864fd30235287f845a4e8))
- issue with context menu divider item stealing the event from previous item ([121043d](https://github.com/HeyPuter/puter/commit/121043d312577a6e048497108309cd08b73df4d0))
- issue with non-scrollable window body and document Context Menu ([0315cb3](https://github.com/HeyPuter/puter/commit/0315cb333719b08c6581b556c69a14cbe671b7bd))
- temporary fix because .on can't call ensure_service ([f836ac3](https://github.com/HeyPuter/puter/commit/f836ac30a901a7b3258399a54eab5c7c8cc47463))
- issues in kdmod ([0a47daa](https://github.com/HeyPuter/puter/commit/0a47daa2896d97c318aec2e2288f61ade5f4ea48))
- Collector bug on undefined body ([14f477a](https://github.com/HeyPuter/puter/commit/14f477a6330c9169145a7f8b2721d02e7517513b))
- app close issue in phoenix ([38adb57](https://github.com/HeyPuter/puter/commit/38adb5741b241081dd3f30de2f9afdd708cc9fa5))
- reading JSON string from service_usage_monthly ([b30de5b](https://github.com/HeyPuter/puter/commit/b30de5bf786ae8f28f3248277c5b2df2f0e5ebf4))
- recently broke counting service sql ([7ba16d1](https://github.com/HeyPuter/puter/commit/7ba16d1c21d07e58cefebf967e5ca2b74502e841))
- ignore invalid entries from service_usage_monthly ([f108795](https://github.com/HeyPuter/puter/commit/f1087953b57297a1e066ea68563e8a273a1af4c0))
- service usage screen ([193da63](https://github.com/HeyPuter/puter/commit/193da633044f463ec1ed60eca4608761fc40b1d7))
- continue work on blocked_email_domains (2) ([4dc1e01](https://github.com/HeyPuter/puter/commit/4dc1e01682571f16a25eebb2e9c7918587ca89ae))
- continue work on blocked_email_domains ([515051d](https://github.com/HeyPuter/puter/commit/515051dabf9f2a145ae2d090f829df7188e9fd28))
- errors thrown by launch_app ([c22a69f](https://github.com/HeyPuter/puter/commit/c22a69ffb1809ad7959f8a8fe934052369b5d44f))
- notepad save issue ([bc51d4b](https://github.com/HeyPuter/puter/commit/bc51d4bd52b5d0a7bb4feddea7bb9d73e449f7d8))
- height 100% on flexer and step view ([c6bc42f](https://github.com/HeyPuter/puter/commit/c6bc42f551a46919b4b70a9ae3dfec85086b0233))
- wait no ([12e0cec](https://github.com/HeyPuter/puter/commit/12e0cecf02f4d906035a6f0059557416475db106))
- phoenix incorrect lookup order ([c8f913d](https://github.com/HeyPuter/puter/commit/c8f913d710454d0ab3da2147309b442a78965720))
- turns out we don't support `utm_source` I learn something new about Puter every day! ([99ce3bd](https://github.com/HeyPuter/puter/commit/99ce3bde199de729c4796a681c188c4a0da9165e))
- issue with service scripts that use TestView ([e0b9072](https://github.com/HeyPuter/puter/commit/e0b90721299fa3013f66c866ba637c52efe9df1d))
- small issue in Service.js ([3c5d2af](https://github.com/HeyPuter/puter/commit/3c5d2af8c8341ef78236ef38153ed0b4f20c5cac))
- prevent code from breaking just because it was bundled ([fb1216d](https://github.com/HeyPuter/puter/commit/fb1216d488bed8ee8d88c7c71e4a6f1054e3a01c))
- don't display all apps for extensionless files ([010282e](https://github.com/HeyPuter/puter/commit/010282edf299c2a39e53de7441b8850d0b8011b8))
- creating app shortcut in self-hosted ([38dcb60](https://github.com/HeyPuter/puter/commit/38dcb60d3f407dd185999d01d8e14355b47df0b8))
- disable thumbnails for AppData uploads ([37e7b6a](https://github.com/HeyPuter/puter/commit/37e7b6ad70f197db3be8712315446079caa23892))
- thumbnail service updates ([c2a9506](https://github.com/HeyPuter/puter/commit/c2a9506b4855f67d320eb479a67800098d73e8ec))
- remove redundant openai model fallback ([9db55fc](https://github.com/HeyPuter/puter/commit/9db55fc5f7a975ab301c88bbac493b7a5b1933bb))
- app pseudonym in wrong conditional block ([9985996](https://github.com/HeyPuter/puter/commit/99859966866ebce005f88e3a916c68dc04ba97bf))
- properly add owner object to fsentries ([04c05a5](https://github.com/HeyPuter/puter/commit/04c05a5bb8b73dda21093a2bf563f5cd6faaa356))
- add progress bar fix ([a70d0dd](https://github.com/HeyPuter/puter/commit/a70d0dd0881b0a07cea404fe13515a5e10321e3e))
- allow ETX to propagate to bash ([259877b](https://github.com/HeyPuter/puter/commit/259877b677a7bfc8e5b377c8852d687978c9bc24))
- error deleting entry from My Websites window ([fff8993](https://github.com/HeyPuter/puter/commit/fff89932002d67bf0f121532709c871263e33473))
- second half of connectToInstance ([4311b48](https://github.com/HeyPuter/puter/commit/4311b482fd629c6d1f65956eb711c8e890453179))
- error in process.handle_connection ([cb324cc](https://github.com/HeyPuter/puter/commit/cb324cc125285b5cd6a6b0cebf444a6cd873ded9))
- quick patch to avoid columnify error ([4396534](https://github.com/HeyPuter/puter/commit/439653458eab38e622cf215ae96b6af34d1db7d4))
- upsert subdomain check to insert only ([f2acd83](https://github.com/HeyPuter/puter/commit/f2acd83b72c388939233fd7145f2dcf78d8ad39e))
- simplify callback listener and fix async bug ([db3e0b5](https://github.com/HeyPuter/puter/commit/db3e0b5ce84e4b0b35550f380da97b5d6fcb394b))
- email change on account with unverified email ([33de981](https://github.com/HeyPuter/puter/commit/33de98107f6e3284acb180b1a44bb02ae082642f))
- html-webpack-plugin dev dep ([cc4ab1c](https://github.com/HeyPuter/puter/commit/cc4ab1cb36a002929f26a39f252a262fc1f1aab4))
- double-echo in phoenix ([6bdcae7](https://github.com/HeyPuter/puter/commit/6bdcae769d311b5deb82136d5e35d7ad986bca28))
-`launch_app` not considering `explorer` as a special case ([98e6964](https://github.com/HeyPuter/puter/commit/98e69642d027a83975a0b2b825317213098bb689))
- well kinda (HOSTNAME in phoenix) ([7043b94](https://github.com/HeyPuter/puter/commit/7043b9400c63842c4c54d82724167666708d3119))
- it was github actions the entire time ([602a198](https://github.com/HeyPuter/puter/commit/602a19895c05b45a7d283470e7af3ae786be1bf2))
- run mocha within packages in monorepo ([58c199c](https://github.com/HeyPuter/puter/commit/58c199c15356ac087a04b16dd18e8fe0f1aea359))
- make webpack output not look like errors ([ad3d318](https://github.com/HeyPuter/puter/commit/ad3d318d07377c78c0429247225655e489b68be4))
- No scrollbar for session list ([45f131f](https://github.com/HeyPuter/puter/commit/45f131f8eaf94cf3951ca7ffeb6f311590233b8a))
- fix path issues under win32 platform ([d80f2fa](https://github.com/HeyPuter/puter/commit/d80f2fa847bfaef98dc8d482898f5c15f268e4bd))
- add option to disable temporary users ([f9333b3](https://github.com/HeyPuter/puter/commit/f9333b3d1e05bd0dffaecd2e29afd08ea61559fc))
- add some default groups ([ba50d0f](https://github.com/HeyPuter/puter/commit/ba50d0f96d58075abec067d24e6532bd874093f0))
- Add support for dropping multiple Puter items onto Dev Center (close #311) ([8e7306c](https://github.com/HeyPuter/puter/commit/8e7306c23be01ee6c31cdb4c99f2fb1f71a2247f))
- Update zhtw.js, Complete Traditional Chinese translation based on English file #550 ([b9e73b7](https://github.com/HeyPuter/puter/commit/b9e73b7288aebb14e6bbf1915743e9157fc950b1))
- update zhtw.js to match en.js ([37fd666](https://github.com/HeyPuter/puter/commit/37fd666a9a6788d5f0c59311499f29896b48bc82))
- Add Tamil translation to translations.js ([8a3d043](https://github.com/HeyPuter/puter/commit/8a3d0430f39f872b8a460c344cce652c340b700b))
- Move Tamil translation to the rest of translations ([333d6e3](https://github.com/HeyPuter/puter/commit/333d6e3b651e460caca04a896cbc8c175555b79b))
- Translation improvements, mainly style and context-based ([8bece96](https://github.com/HeyPuter/puter/commit/8bece96f6224a060d5b408e08c58865fadb8b79c))
- update translation file es.js to be up to date with the file en.js ([1515278](https://github.com/HeyPuter/puter/commit/151527825f1eb4b060aaf97feb7d18af4fcddbf2))
- Translate en.js as of 2024-07-10 ([8e297cd](https://github.com/HeyPuter/puter/commit/8e297cd7e30757073e2f96593c363a273b639466))
- Create hu.js hungarian language ([69a80ab](https://github.com/HeyPuter/puter/commit/69a80ab3d2c94ee43d96021c3bcbdab04a4b5dc6))
- Update translations.js to Hungarian lang ([56820cf](https://github.com/HeyPuter/puter/commit/56820cf6ee56ff810a6b495a281ccbb2e7f9d8fb))
- Tamil translation ([81781f8](https://github.com/HeyPuter/puter/commit/81781f80afc07cd1e6278906cdc68c8092fbfedf))
-`launch_app` not considering `explorer` as a special case ([98e6964](https://github.com/HeyPuter/puter/commit/98e69642d027a83975a0b2b825317213098bb689))
- well kinda (HOSTNAME in phoenix) ([7043b94](https://github.com/HeyPuter/puter/commit/7043b9400c63842c4c54d82724167666708d3119))
- it was github actions the entire time ([602a198](https://github.com/HeyPuter/puter/commit/602a19895c05b45a7d283470e7af3ae786be1bf2))
- fix CI attempt #7 ([614f2c5](https://github.com/HeyPuter/puter/commit/614f2c5061525f230ccd879bfb047434ac46a9ba))
- fix CI attempt #6 ([9d549b1](https://github.com/HeyPuter/puter/commit/9d549b192d149eac96c316ded645bf7c2e96153d))
- fix CI attempt #5 ([74adcdd](https://github.com/HeyPuter/puter/commit/74adcddc1d60e0a513408a0716ed2b301126225d))
- fix CI attempt #4 ([84b993b](https://github.com/HeyPuter/puter/commit/84b993bce913c3ad99127063bcfaae19331b199c))
- fix CI attempt #3 ([3bca973](https://github.com/HeyPuter/puter/commit/3bca973f5f4e65a2bd24c634c347fbd681a7458b))
- fix CI attempt #2 ([aebe89a](https://github.com/HeyPuter/puter/commit/aebe89a1acb070764551e8e89e325325ffbed8f9))
- run mocha within packages in monorepo ([58c199c](https://github.com/HeyPuter/puter/commit/58c199c15356ac087a04b16dd18e8fe0f1aea359))
- make webpack output not look like errors ([ad3d318](https://github.com/HeyPuter/puter/commit/ad3d318d07377c78c0429247225655e489b68be4))
- No scrollbar for session list ([45f131f](https://github.com/HeyPuter/puter/commit/45f131f8eaf94cf3951ca7ffeb6f311590233b8a))
- fix path issues under win32 platform ([d80f2fa](https://github.com/HeyPuter/puter/commit/d80f2fa847bfaef98dc8d482898f5c15f268e4bd))
- Added missing Romanian translations. ([8440f56](https://github.com/HeyPuter/puter/commit/8440f566b91c9eb4f01addcb850061e3fbe3afc7))
- Add 2FA Romanian translations ([473b651](https://github.com/HeyPuter/puter/commit/473b6512c697854e3f3badae1eb7b87742954da5))
- Add Japanese Translation ([47ec74f](https://github.com/HeyPuter/puter/commit/47ec74f0aa6adb3952e6460909029a4acb0c3039))
- Completing Italian translation based on English file ([f5a8ee1](https://github.com/HeyPuter/puter/commit/f5a8ee1c6ab950d62c90b6257791f026a508b4e4))
- Completing Italian translation based on English file. ([a96abb5](https://github.com/HeyPuter/puter/commit/a96abb5793528d0dc56d75f95d771e1dcf5960d1))
- Completing Arabic translation based on English file ([78a0ace](https://github.com/HeyPuter/puter/commit/78a0acea6980b6d491da4874edbd98e17c0d9577))
- Update Arabic translations in src/gui/src/i18n/translations/ar.js to match English version in src/gui/src/i18n/translations/en.js ([fe5be7f](https://github.com/HeyPuter/puter/commit/fe5be7f3cf7f336730137293ba86a637e8d8591d))
- Update Arabic translations in src/gui/src/i18n/translations/ar.js to match English version in src/gui/src/i18n/translations/en.js ([bffa192](https://github.com/HeyPuter/puter/commit/bffa192805216fc17045cd8d629f34784dca7f3f))
- remove flag that breaks puter-js webpack ([7aadae5](https://github.com/HeyPuter/puter/commit/7aadae58ce1a51f925bf64c3d65ac1fa6971b164))
- Improve `getMimeType` to remove trailing dot in the extension if preset ([535475b](https://github.com/HeyPuter/puter/commit/535475b3c36a37e3319ed067a24fb671790dcda3))
## 2.4.0 (2024-07-08)
### Features
* add (pt-br) translation for system settings. ([77211c4](https://github.com/HeyPuter/puter/commit/77211c4f71b0285fb3060f7e5c8d493b4d7c4f0c))
* **backend:** add script service ([30550fc](https://github.com/HeyPuter/puter/commit/30550fcddda18469735499546de502d29b85e2ad))
* **backend:** Add tab completion to server console command arguments ([fa81dca](https://github.com/HeyPuter/puter/commit/fa81dca9507b7fa0f82099b75f2ab89c865626ac))
* **backend:** Add tab-completion to server console command names ([e1e76c6](https://github.com/HeyPuter/puter/commit/e1e76c6be71fdeb3b6246307b626734d8dc26f86))
* **backend:** add tip of day ([2d8e624](https://github.com/HeyPuter/puter/commit/2d8e6240c61dc6301f49cbdcd1c3b04736f9ca93))
* **backend:** allow services to provide user properties ([522664d](https://github.com/HeyPuter/puter/commit/522664d415c33342500defec309c2ff15bc94804))
* **backend:** allow services to provide whoami values ([fccabf1](https://github.com/HeyPuter/puter/commit/fccabf1bc0c4418f3599222616dd63bf98c14fe1))
* **backend:** improve logger and reduce logs ([4bdad75](https://github.com/HeyPuter/puter/commit/4bdad75766d0617a164024b39b79bf5373c495a6))
* Display app icon and description in embeds ([ef298ce](https://github.com/HeyPuter/puter/commit/ef298ce3aa3ce90224e883fb0ba33f9cd3a3da44))
* get first test working on share-test service ([88d6bee](https://github.com/HeyPuter/puter/commit/88d6bee9546f36d689c53ec7fe95f01f772f5211))
* **git:** Add --color and --no-color options ([d6dd1a5](https://github.com/HeyPuter/puter/commit/d6dd1a5bb0a2b2bba2cfe86d2e51ff2a6e42841c))
* **git:** Add a --debug option, which sets the DEBUG global ([fa3df72](https://github.com/HeyPuter/puter/commit/fa3df72f6ed2d45a440ebc2aacbbae67bf042478))
* **git:** Add authentication to clone, fetch, and pull. ([364d580](https://github.com/HeyPuter/puter/commit/364d580ff896691ee70d3735f495c720651a9f41))
* **git:** Add diff display to `show` and `log` subcommands ([3cad1ec](https://github.com/HeyPuter/puter/commit/3cad1ec436f99a78f782ab9576325d4341284964))
* **git:** Add start-revision and file arguments to `git log` ([49c2f16](https://github.com/HeyPuter/puter/commit/49c2f163515d2130c17a6f6a6a16bc27ea69336a))
* **git:** Allow checking out a commit instead of a branch ([057b3ac](https://github.com/HeyPuter/puter/commit/057b3acf00af49c005b9bf7069c5d22983a32e1e))
* **git:** Color output for `git status` files ([bab5204](https://github.com/HeyPuter/puter/commit/bab5204209aa2efc0c053643677a78db6ede0929))
* **git:** Display file contents as a string for `git show FILE_OID` ([a680371](https://github.com/HeyPuter/puter/commit/a68037111a04580cfa2688694a68ef6ac7a495fa))
* **git:** Display ref names in `git log` and `git show` ([45cdfcb](https://github.com/HeyPuter/puter/commit/45cdfcb5bfa66937b33054a127e0b17001f3faa4))
* **git:** Format output closer to canonical git ([60976b1](https://github.com/HeyPuter/puter/commit/60976b1ed61984d9d290f3a0ae99dd97632e9909))
* **git:** Handle detached HEAD in `git status` and `git branch --list` ([2c9b1a3](https://github.com/HeyPuter/puter/commit/2c9b1a3ffc3d5e282ffe5b83a86314e99445bbc6))
* **git:** Make `git add` work for deleted files ([9551544](https://github.com/HeyPuter/puter/commit/955154468f48e45028dad2e916708d6a763affad))
* **git:** Make shorten_hash() guaranteed to produce a unique hash ([dd10a37](https://github.com/HeyPuter/puter/commit/dd10a377493c0d8f10a1ac8779dc27f3f3bf6c37))
* **git:** Resolve more forms of commit reference ([b6906bb](https://github.com/HeyPuter/puter/commit/b6906bbcaaa50fc8a8c60beb6d2d38bcb7dda758))
* **git:** Understand references like `HEAD^` and `main~3` ([711dbc0](https://github.com/HeyPuter/puter/commit/711dbc0d2fde9c2ddc6c86f64fb4caa7837c9dcb))
* implicit access from apps to shared appdata dirs ([31d4eb0](https://github.com/HeyPuter/puter/commit/31d4eb090efb340fdfb7cb6b751145e859624eeb))
* introduce notification selection via driver ([c5334b0](https://github.com/HeyPuter/puter/commit/c5334b0e19cf9762f536ec482c3ff872e9c12399))
* **phoenix:** Add --dump and --file options to sed ([f250f86](https://github.com/HeyPuter/puter/commit/f250f86446a506f24fa2ad396328e3a2212a68d0))
* **phoenix:** Add more commands to sed, including labels and branching ([306014a](https://github.com/HeyPuter/puter/commit/306014adc77a7ca155feb95d1146cb46ee075b52))
* **phoenix:** Expose parsed arg tokens to apps that request them ([4067c82](https://github.com/HeyPuter/puter/commit/4067c82486c99cad20f41927ad39ebea438b717f))
* **phoenix:** Implement an `exit` builtin ([3184d34](https://github.com/HeyPuter/puter/commit/3184d3482c7b95c0fd1fc0745555ff82fc9a8c99))
* **phoenix:** Implement parsing of sed scripts ([0d4f907](https://github.com/HeyPuter/puter/commit/0d4f907b6675b15bd50a55f50aa28f0803b18b7b))
* **phoenix:** Make `clear` clear scrollback unless `-x` is given ([75a989a](https://github.com/HeyPuter/puter/commit/75a989a7b69bfdfdf69e5f0365027c5b27d8bfc6))
* **Phoenix:** Pass command line arguments and ENV when launching apps ([8f1c4fc](https://github.com/HeyPuter/puter/commit/8f1c4fcda98e72a7b970e8c6fc2fe39a5e012264))
* **phoenix:** Respond to exit status codes ([5de3052](https://github.com/HeyPuter/puter/commit/5de305202656a172b187dac87543d6c1c69a2958))
* **phoenix:** Show actual host name in prompt and neofetch ([4539408](https://github.com/HeyPuter/puter/commit/4539408a218a50244dc615cf7de56c29dcac53e6))
* rate-limit for excessive groups ([4af279a](https://github.com/HeyPuter/puter/commit/4af279a72fc9de89ddc3ba51806ca3760a36265d))
* re-send unreads on login ([02fc4d8](https://github.com/HeyPuter/puter/commit/02fc4d86b7166fb4803be5d28e2a593d6b7d9785))
* register dev center to apps ([10f4d7d](https://github.com/HeyPuter/puter/commit/10f4d7d50ce9314f9c3888c74cb17c8ebbecee98))
* send notification when file gets shared ([2f6c428](https://github.com/HeyPuter/puter/commit/2f6c428a403a006f7878861d2f0356c3294519be))
* start directory index frame ([fb1e2f2](https://github.com/HeyPuter/puter/commit/fb1e2f21fb67aefe0602f6c978199c7cd019bbf7))
* support canonical puter.js url in dev ([fd41ae2](https://github.com/HeyPuter/puter/commit/fd41ae217c7a9f7229326f62a829471580a744bd))
* **ui:** add new components ([577bd59](https://github.com/HeyPuter/puter/commit/577bd59b6cc94810e851ad544f8234e25a4e6e27))
* **ui:** add new components ([38ba425](https://github.com/HeyPuter/puter/commit/38ba42575ce9f3506f8ce219b9580202b3ed9993))
* update share endpoint to support more things ([dd5fde5](https://github.com/HeyPuter/puter/commit/dd5fde5130c1840ab598e6622766ae835142e58a))
### Bug Fixes
* add app_uid param to kv interface ([f7a0549](https://github.com/HeyPuter/puter/commit/f7a054956b8739a3bc305a49faee929ea0da1e15))
* add missing columns for public directory update ([b10302a](https://github.com/HeyPuter/puter/commit/b10302ad744fd9c58f9735743e075815183c772c))
* Add missing file extension to 0009_app-prefix-fix.sql in DB init ([a8160a8](https://github.com/HeyPuter/puter/commit/a8160a8cdcdd6aff98728a6f1643d93386e6bb5a))
* add permission implicator for file modes ([e63ab3a](https://github.com/HeyPuter/puter/commit/e63ab3a67f6555eb13d6af477a8da9f1b54d6608))
* **backend:** remove a bad thing that really doesn't work ([8d22276](https://github.com/HeyPuter/puter/commit/8d22276f13106f7642d11da30b1500817a20ad43))
* bug introduced when refactoring /share to Sequence ([ecb9978](https://github.com/HeyPuter/puter/commit/ecb997885c1efb766827c84d2ffb8dc6ddabe992))
* check subdomain earlier for /apps ([4e3a24e](https://github.com/HeyPuter/puter/commit/4e3a24e6093e279e210765e07e436f4e63b74072))
* do not delegate to select on read like ever that is really dumb ([a2a10b9](https://github.com/HeyPuter/puter/commit/a2a10b94be59403e03fb08bec5d7c056ce5b554f))
* docker runtime fail because stdout columns ([94c0449](https://github.com/HeyPuter/puter/commit/94c0449437ce4cb26d00a15a3f277bc7b09367b4))
* fix issues with apps in /share endpoint ([0cf90ee](https://github.com/HeyPuter/puter/commit/0cf90ee39af6548d271dec45ed8ee9e6df1cd14d))
* fix owner ids for default apps ([283f409](https://github.com/HeyPuter/puter/commit/283f409a662d126e7f3ce811f1467ac6fab9a522))
* fix permission cascade properly this time ([de58866](https://github.com/HeyPuter/puter/commit/de5886698e1eae2b250baac174b57029f3244e96))
* Fix phoenix app prefix and TokenService test ([afb9d86](https://github.com/HeyPuter/puter/commit/afb9d866b5091058711db931cde904947e661c15))
* fix that fix ([b126b67](https://github.com/HeyPuter/puter/commit/b126b670940a0e20cfe7bd0eba3db891bab5c142))
* **git:** Make git commit display detached HEAD correctly ([73d0f5a](https://github.com/HeyPuter/puter/commit/73d0f5a90cb5dcbadfc6d0fd22f14e8bc0e61f86))
* group permission audit table ([7d2f6d2](https://github.com/HeyPuter/puter/commit/7d2f6d256f56e30d752e9999c6e8bde68f9d9637))
* handle subpaths under another user ([d128cee](https://github.com/HeyPuter/puter/commit/d128ceed6f4928fa0793815feb2e2715cd273ff8))
* handling of batch requests with zero files ([c0063a8](https://github.com/HeyPuter/puter/commit/c0063a871fd891a1774f1bee00e86170fed249fa))
* i forgot to test reloading ([7eabb43](https://github.com/HeyPuter/puter/commit/7eabb43bd4257b4129d67eaeda2aa27e8268dc78))
* improve console experience on mac ([15465bf](https://github.com/HeyPuter/puter/commit/15465bfc5035a64762f7c86a3d38af8be6be5b59))
* incorrect error from suggested_apps ([b648817](https://github.com/HeyPuter/puter/commit/b648817f2743c2b6214ebe4177d921c9b9027594))
* Make polyfilled import.meta.filename getter a valid function ([85c6798](https://github.com/HeyPuter/puter/commit/85c679844869b6b05fcbda231d8dc7026a66da97))
* null email in request to /share ([bf63144](https://github.com/HeyPuter/puter/commit/bf63144f7a79c48bd650ae851ddd0c8a10d748c3))
* Only run Component initialization functions once ([5b43358](https://github.com/HeyPuter/puter/commit/5b43358219402bee3eadf4a0f184a4b924d3293b))
* **parsely:** Make Repeat parser work when no separator is given ([9b4d16f](https://github.com/HeyPuter/puter/commit/9b4d16fbe9d5698c57f9da725a22b528a7d7cac2))
* **phoenix:** Add missing newlines to sed command output ([e047b0b](https://github.com/HeyPuter/puter/commit/e047b0bf302284da61e677432e4cc25b531b24f2))
* **phoenix:** Gracefully handle completing a non-existent path ([d76e713](https://github.com/HeyPuter/puter/commit/d76e7130cba9f0ca05940abafe4fd1a41464aa83))
* property validation on some permission endpoints ([0855f2b](https://github.com/HeyPuter/puter/commit/0855f2b36eca3bbdaa8429cbde3aa1242e8e96ee))
* readdir on file ([a72ec97](https://github.com/HeyPuter/puter/commit/a72ec9799ac3bd76ceafa22cce149e373a13f3b9))
* remove last component when share URL is file ([1166e69](https://github.com/HeyPuter/puter/commit/1166e69c76688d1811701c56cd4df9d38e286793))
* remove legacy permission check in stat ([f2c6e01](https://github.com/HeyPuter/puter/commit/f2c6e01296e4214336e63bc2d69bcbf17f59890f))
* Remove null or duplicate app entries from suggest_app_for_fsentry() ([6900233](https://github.com/HeyPuter/puter/commit/6900233c5aaa2d1a49f495e9f9a060796757a91e))
* **security:** Move token for socket.io to request body ([49b257e](https://github.com/HeyPuter/puter/commit/49b257ecffbb1e12090b86a67528a5ad09da69db))
* switch share notif username to sender ([cd65217](https://github.com/HeyPuter/puter/commit/cd65217f5cda1c986ee231e2eeeef5abefa36ecb))
* **Terminal:** Accept input from Chrome on Android ([4ef3e53](https://github.com/HeyPuter/puter/commit/4ef3e53de34f0097950a7e707ca2483863beafb5))
* Throw an error when readdir is called on a non-directory ([46eb4ed](https://github.com/HeyPuter/puter/commit/46eb4ed2b96c235e10e15645a30d2f192a1af0de))
* type error in puter-site ([d96f924](https://github.com/HeyPuter/puter/commit/d96f924cad7a13ea6e9084bb0ebb79ecc5fcb8a3))
* ui color input attributes ([d9c4fbb](https://github.com/HeyPuter/puter/commit/d9c4fbbd1dcce12ee05ee33652a5fa518196463d))
* **ui:** improve Component base class ([f8780d0](https://github.com/HeyPuter/puter/commit/f8780d032b10138851c22af53b8610c578139acc))
* **security:** add ip rate limiting ([ccf1afc](https://github.com/HeyPuter/puter/commit/ccf1afc93c24ee7f9a126216209a185d6b4d9fe4))
* Show "Deleting /foo" in progress window when deleting files ([f07c13a](https://github.com/HeyPuter/puter/commit/f07c13a50cee790eec44bce2f6e56fbcbf73f9b0))
### Bug Fixes
* Add missing file extension to 0009_app-prefix-fix.sql in DB init ([a8160a8](https://github.com/HeyPuter/puter/commit/a8160a8cdcdd6aff98728a6f1643d93386e6bb5a))
* Add missing TextEncoder to PTT ([8d4a1e0](https://github.com/HeyPuter/puter/commit/8d4a1e0ed3872e2c82b9e4be9b6d8b359e9cea09))
* fix error handling for outdated node versions ([4c1d5a4](https://github.com/HeyPuter/puter/commit/4c1d5a4b6d009ce075897d499d3517219bd745a4))
* Fix phoenix app prefix and TokenService test ([afb9d86](https://github.com/HeyPuter/puter/commit/afb9d866b5091058711db931cde904947e661c15))
* increase QR code size ([d2de46e](https://github.com/HeyPuter/puter/commit/d2de46edfbc05d132d5c929f6935b82515fbbda0))
* Make PathCommandProvider reject queries with path separators ([d733119](https://github.com/HeyPuter/puter/commit/d73311945610417a1ebc7bb0723ced0a599594b4))
* Make url variable accessible to all users of it ([2f30ae7](https://github.com/HeyPuter/puter/commit/2f30ae7a825adcd8da95888c38fe39c34acee0ff))
* Only run Component initialization functions once ([5b43358](https://github.com/HeyPuter/puter/commit/5b43358219402bee3eadf4a0f184a4b924d3293b))
* Remove null or duplicate app entries from suggest_app_for_fsentry() ([6900233](https://github.com/HeyPuter/puter/commit/6900233c5aaa2d1a49f495e9f9a060796757a91e))
* **security:** always use application/octet-stream ([74e213a](https://github.com/HeyPuter/puter/commit/74e213a534dbf2844c8cebeee7eb59ec70de306e))
* **security:** Move token for socket.io to request body ([49b257e](https://github.com/HeyPuter/puter/commit/49b257ecffbb1e12090b86a67528a5ad09da69db))
We maintain a list of issues that are good for first-time contributors. You can find these issues by searching for the [`good first issue`](https://github.com/HeyPuter/puter/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) label in our [GitHub repository](https://github.com/HeyPuter/puter). These issues are designed to be relatively easy to fix, and we're happy to help you get started. Pick an issue that interests you, and leave a comment on the issue to let us know you're working on it.
<br>
## Documentation for Contributors
See [doc/contributors/index.md](./doc/contributors/index.md) for more information.
### Backend
See [src/backend/CONTRIBUTING.md](src/backend/CONTRIBUTING.md)
<br>
## PR Standards
We expect the following from pull requests (it makes things easier):
- If you're closing an issue, please reference that issue in the PR description
- Avoid whitespace changes
- No regressions for "appspace" (Puter apps)
<br>
## Commit Messages
**Note:** we will squash-merge some PRs so they follow . Large PRs should follow conventional commits also. The instructions below are outdated but suitable for most PRs.
### Conventional Commits
We use [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) with the following prefixes:
-`fix:` for bug fixes
-`dev:` instead of `refactor:`; covers more basis
-`tweak:` for small updates
-`sync:` when updating data from another source
-`feat:` for a commit that first introduces a new feature
Commit messages after the prefix should use the imperative (the same convention used in the repo for Linux, which Git was built for):
- correct: `dev: improve performance of readdir`
- incorrect: `dev: improved readdir`
- incorrect: `dev: improving readdir`
We have the following exceptions to this rule:
- If the commit message is in _past tense_, it's a shorthand for the following:
-`dev: apply changes that would be applied after one had <past tense message>`
- If the commit message is in _present tense_, it's shorthand for the following:
-`dev: apply changes that would be applied after <present-tense message>`
For example, the following are correct:
-`dev: improved readdir`
- interpret this as: `dev: apply changes that would be applied after one had improved readdir`
-`dev: improving readdir`
- interpret this as: `dev: apply changes that would be applied after improving readdir`
<h3 align="center"><img width="80" alt="Puter.com, The Personal Cloud Computer: All your files, apps, and games in one place accessible from anywhere at any time." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">The Internet OS! Free, Open-Source, and Self-Hostable!</h3>
<h3 align="center">The Internet OS! Free, Open-Source, and Self-Hostable.</h3>
<p align="center">
<a href="https://puter.com/"><strong>« LIVE DEMO »</strong></a>
Puter is an advanced, open-source internet operating system designed to be feature-rich, exceptionally fast, and highly extensible. It can be used to build remote desktop environments or serve as an interface for cloud storage services, remote servers, web hosting platforms, and more.
Puter is an advanced, open-source internet operating system designed to be feature-rich, exceptionally fast, and highly extensible. Puter can be used as:
- A privacy-first personal cloud to keep all your files, apps, and games in one secure place, accessible from anywhere at any time.
- A platform for building and publishing websites, web apps, and games.
- An alternative to Dropbox, Google Drive, OneDrive, etc. with a fresh interface and powerful features.
- A remote desktop environment for servers and workstations.
- A friendly, open-source project and community to learn about web development, cloud computing, distributed systems, and much more!
<br/>
## Getting Started
### Local Development
### 💻 Local Development
```bash
git clone https://github.com/HeyPuter/puter
@@ -38,75 +48,121 @@ npm install
npm start
```
This will launch Puter at http://localhost:4000 (or the next available port).
This will launch Puter at http://puter.localhost:4100 (or the next available port).
If this does not work, see [First Run Issues](./doc/first-run-issues.md) for
The self-hosted version of Puter is currently in alpha stage and should not be used in production yet. It is under active development and may contain bugs, other issues. Please exercise caution and use it for testing and evaluation purposes only.
- An alternative to Dropbox, Google Drive, OneDrive, etc. with a fresh interface and powerful features.
- Remote desktop environment for servers and workstations.
- A platform for building and hosting websites, web apps, and games.
- A friendly, open-source project and community to learn about web development, cloud computing, distributed systems, and much more!
For detailed guides on self-hosting Puter, including configuration options and best practices, see our [Self-Hosting Documentation](https://github.com/HeyPuter/puter/blob/main/doc/self-hosters/instructions.md).
<br/>
### ☁️ Puter.com
### ❓ Why isn't Puter built with React, Angular, Vue, etc.?
For performance reasons, Puter is built with vanilla JavaScript and jQuery. Additionally, we'd like to avoid complex abstractions and to remain in control of the entire stack, as much as possible.
Also partly inspired by some of our favorite projects that are not built with frameworks: [VSCode](https://github.com/microsoft/vscode), [Photopea](https://www.photopea.com/), and [OnlyOffice](https://www.onlyoffice.com/).
Puter is available as a hosted service at [**puter.com**](https://puter.com).
<br/>
### ❓ Why jQuery?
## System Requirements
Puter interacts directly with the DOM and jQuery provides an elegant yet powerful API to manipulate the DOM, handle events, and much more. It's also fast, mature, and battle-tested.
- **Operating Systems:** Linux, macOS, Windows
- **RAM:** 2GB minimum (4GB recommended)
- **Disk Space:** 1GB free space
- **Node.js:** Version 16+ (Version 22+ recommended)
We are always happy to help you with any questions you may have. Don't hesitate to ask!
<br/>
## Credits
## License
The default wallpaper is created by [Milad Fakurian](https://unsplash.com/photos/blue-orange-and-yellow-wallpaper-E8Ufcyxz514) and published on [Unsplash](https://unsplash.com/).
This repository, including all its contents, sub-projects, modules, and components, is licensed under [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) unless explicitly stated otherwise. Third-party libraries included in this repository may be subject to their own licenses.
Icons by [Papirus](https://github.com/PapirusDevelopmentTeam/papirus-icon-theme) under GPL-3.0 license.
<br/>
Icons by [Iconoir](https://iconoir.com/) under MIT license.
## Translations
Icons by [Elementary Icons](https://github.com/elementary/icons) under GPL-3.0 license.
Icons by [Tabler Icons](https://tabler.io/) under MIT license.
Icons by [bootstrap-icons](https://icons.getbootstrap.com/) under MIT license.
<mxCell id="skmebJAFKBwesmhEX21R-8" value="only most important directories shown" style="rounded=1;whiteSpace=wrap;html=1;align=right;" vertex="1" parent="1">
<mxCell id="skmebJAFKBwesmhEX21R-4" value="Every directory under src/ is a node module." style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;size=14;align=left;" vertex="1" parent="1">
<mxCell id="skmebJAFKBwesmhEX21R-28" value="Manages communication between Desktop and apps" style="rounded=1;whiteSpace=wrap;html=1;fontSize=13;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxCell id="skmebJAFKBwesmhEX21R-68" value="<div>These directories mostly contain code for</div><div>the permission system to make it easier to maintain.</div><div><br></div><div>structured/&lt;pattern&gt;/ contains code that is formatted according to "&lt;pattern&gt;"</div><div><br></div><div>unstructured/ contains miscellaneous code used by the permission system.</div>" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;size=18;fillColor=#f5f5f5;strokeColor=#666666;align=left;verticalAlign=top;fontSize=13;fontColor=#333333;" vertex="1" parent="1">
<mxCell id="skmebJAFKBwesmhEX21R-71" value="these should go to:<div>modules/auth/</div><div>in the future</div>" style="rounded=1;whiteSpace=wrap;html=1;glass=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
<mxCell id="skmebJAFKBwesmhEX21R-74" value="<div>Utilities used by various services in Puter's backend.</div><div><br></div><div>These should be incrementally moved to individual `lib` directories in modules/</div>" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;size=18;fillColor=#f5f5f5;strokeColor=#666666;align=left;verticalAlign=top;fontSize=13;fontColor=#333333;" vertex="1" parent="1">
<mxCell id="skmebJAFKBwesmhEX21R-77" value="<div>Services here should be incrementally</div><div>migrated into the modules/ directory.</div>" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;size=18;fillColor=#fff2cc;strokeColor=#d6b656;align=left;verticalAlign=top;fontSize=13;" vertex="1" parent="1">
<h3 align="center"><img width="80" alt="Puter.com، الحاسوب السحابي الشخصي: جميع ملفاتك وتطبيقاتك وألعابك في مكان واحد يمكن الوصول إليه من أي مكان في أي وقت." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">نظام تشغيل الإنترنت! مجاني ومفتوح المصدر وقابل للاستضافة الذاتية.</h3>
<p>بيوتر هو نظام تشغيل إنترنت متقدم ومفتوح المصدر، مصمم ليكون غنيًا بالميزات وسريعًا بشكل استثنائي وقابلًا للتوسع بدرجة كبيرة. يمكن استخدام بيوتر كـ:</p>
<ul>
<li>سحابة شخصية تعطي الأولوية للخصوصية لحفظ جميع ملفاتك وتطبيقاتك وألعابك في مكان آمن واحد، يمكن الوصول إليه من أي مكان وفي أي وقت.</li>
<li>منصة لبناء ونشر المواقع الإلكترونية وتطبيقات الويب والألعاب</li>
<li>بديل لـ Dropbox وGoogle Drive وOneDrive وغيرها، مع واجهة جديدة وميزات قوية.</li>
<li>بيئة سطح مكتب عن بُعد للخوادم ومحطات العمل.</li>
<li>مشروع ومجتمع ودود ومفتوح المصدر للتعلم عن تطوير الويب والحوسبة السحابية والأنظمة الموزعة والكثير غير ذلك!</li>
</ul>
</div>
<br/>
## البدء
### 💻 التطوير المحلي
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
سيؤدي هذا إلى تشغيل Puter على http://puter.localhost:4100 (أو المنفذ التالي المتاح).
نحن دائمًا سعداء لمساعدتك في أي أسئلة قد تكون لديك. لا تتردد في السؤال!
<br/>
## الترخيص
هذا المستودع، بما في ذلك جميع محتوياته ومشاريعه الفرعية ووحداته ومكوناته، مرخص تحت [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) ما لم ينص على خلاف ذلك صراحةً. قد تخضع المكتبات الخارجية المدرجة في هذا المستودع لتراخيصها الخاصة.
<h3 align="center"><img width="80" alt="Puter.com, ব্যক্তিগত ক্লাউড কম্পিউটার: আপনার সমস্ত ফাইল, অ্যাপস, এবং গেম এক জায়গায়, যেকোনো সময়, যেকোনো স্থান থেকে অ্যাক্সেসযোগ্য।" src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">ইন্টারনেট ওএস! ফ্রি, ওপেন-সোর্স, এবং সেল্ফ-হোস্টেবল।</h3>
Puter একটি উন্নত, ওপেন-সোর্স ইন্টারনেট অপারেটিং সিস্টেম যা বৈশিষ্ট্যপূর্ণ, অত্যন্ত দ্রুত এবং উচ্চ মাত্রায় সম্প্রসারণযোগ্য। Puter ব্যবহার করা যেতে পারে:
- একটি প্রাইভেসি-প্রথম পার্সোনাল ক্লাউড হিসাবে যা আপনার সমস্ত ফাইল, অ্যাপস এবং গেমসকে এক জায়গায় নিরাপদে রাখে, যেকোনো সময় যেকোনো স্থান থেকে অ্যাক্সেসযোগ্য।
- ওয়েবসাইট, ওয়েব অ্যাপ এবং গেম তৈরি ও প্রকাশ করার একটি প্ল্যাটফর্ম হিসাবে।
- ড্রপবক্স, গুগল ড্রাইভ, ওয়ানড্রাইভ ইত্যাদির বিকল্প হিসাবে একটি নতুন ইন্টারফেস এবং শক্তিশালী বৈশিষ্ট্য সহ।
- সার্ভার এবং ওয়ার্কস্টেশনের জন্য একটি রিমোট ডেস্কটপ এনভায়রনমেন্ট হিসাবে।
- ওয়েব ডেভেলপমেন্ট, ক্লাউড কম্পিউটিং, ডিস্ট্রিবিউটেড সিস্টেম এবং আরও অনেক কিছু শিখতে একটি বন্ধুত্বপূর্ণ, ওপেন-সোর্স প্রকল্প এবং কমিউনিটি হিসাবে!
<br/>
## শুরু করার জন্য
## 💻 লোকাল ডেভেলপমেন্ট
```bash
Copy code
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
এটি Puter কে http://puter.localhost:4100 (অথবা পরবর্তী উপলব্ধ পোর্টে) চালু করবে।
মেইনটেইনার এবং কমিউনিটির সাথে এই চ্যানেলগুলির মাধ্যমে সংযোগ করুন:
- বাগ রিপোর্ট বা ফিচার রিকোয়েস্ট? অনুগ্রহ করে একটি ইস্যু খুলুন।
- ডিসকর্ড: discord.com/invite/PQcx7Teh8u
- X (টুইটার): x.com/HeyPuter
- রেডিট: reddit.com/r/puter/
- মাস্টডন: mastodon.social/@puter
- সিকিউরিটি ইস্যু? security@puter.com
- মেইনটেইনারদের ইমেইল করুন hi@puter.com এ
আপনার যেকোনো প্রশ্নের জন্য আমরা সবসময় সাহায্য করতে প্রস্তুত। জিজ্ঞাসা করতে দ্বিধা করবেন না!
<br/>
## লাইসেন্স
এই রিপোজিটরি, এর সমস্ত বিষয়বস্তু, সাব-প্রকল্প, মডিউল, এবং কম্পোনেন্ট সহ [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) লাইসেন্সের অধীনে লাইসেন্সকৃত, যদি অন্যথায় স্পষ্টভাবে উল্লেখ না করা হয়। এই রিপোজিটরিতে অন্তর্ভুক্ত তৃতীয় পক্ষের লাইব্রেরিগুলি তাদের নিজস্ব লাইসেন্সের অধীনে হতে পারে।
<h3 align="center"><img width="80" alt="Puter.com, Den Personlige Cloudcomputer: Alle dine filer, apps og spil på ét sted tilgængelige fra hvor som helst til enhver tid." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">Internet OS'et! Gratis, Open-Source og kan selvhostes.</h3>
Puter er et avanceret, open-source internetoperativsystem designet til at være funktionsrigt, exceptionelt hurtigt og meget udvideligt. Puter kan bruges som:
- En privatlivsfokuseret personlig sky til at opbevare alle dine filer, apps og spil på ét sikkert sted, tilgængeligt hvor som helst og når som helst.
- En platform til at bygge og publicere hjemmesider, webapplikationer og spil.
- Et alternativ til Dropbox, Google Drive, OneDrive osv. med et friskt interface og kraftfulde funktioner.
- Et fjernskrivebordsmiljø for servere og arbejdsstationer.
- Et venligt, open-source projekt og fællesskab til at lære om webudvikling, cloud computing, distribuerede systemer og meget mere!
<br/>
## Kom godt i gang
### 💻 Lokal Udvikling
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
Dette vil starte Puter på http://puter.localhost:4100 (eller den næste tilgængelige port).
Vi er altid glade for at hjælpe dig med eventuelle spørgsmål, du måtte have. Tøv ikke med at spørge!
<br/>
## Licens
Dette repository, inklusive alt dets indhold, underprojekter, moduler og komponenter, er licenseret under [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt), medmindre andet er udtrykkeligt angivet. Tredjepartsbiblioteker inkluderet i dette repository kan være underlagt deres egne licenser.
<h3 align="center"><img width="80" alt="Puter.com, Der persönliche Cloud-Computer: Alle Ihre Dateien, Apps und Spiele an einem Ort, jederzeit und überall zugänglich." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">Das Internet-Betriebssystem! Kostenlos, Open-Source und selbst hostbar.</h3>
Puter ist ein fortschrittliches, Open-Source-Internet-Betriebssystem, das funktionsreich, außergewöhnlich schnell und hochgradig erweiterbar konzipiert wurde. Puter kann verwendet werden als:
- Eine datenschutzfreundliche persönliche Cloud, um alle Ihre Dateien, Apps und Spiele an einem sicheren Ort aufzubewahren, jederzeit und überall zugänglich.
- Eine Plattform zum Erstellen und Veröffentlichen von Websites, Webanwendungen und Spielen.
- Eine Alternative zu Dropbox, Google Drive, OneDrive usw. mit einer frischen Benutzeroberfläche und leistungsstarken Funktionen.
- Eine Remote-Desktop-Umgebung für Server und Workstations.
- Ein freundliches, Open-Source-Projekt und eine Community, um mehr über Webentwicklung, Cloud Computing, verteilte Systeme und vieles mehr zu lernen!
<br/>
## Erste Schritte
### 💻 Lokale Entwicklung
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
Dies startet Puter unter http://puter.localhost:4100 (oder dem nächsten verfügbaren Port).
Wir helfen Ihnen gerne bei allen Fragen, die Sie haben könnten. Zögern Sie nicht zu fragen!
<br/>
## Lizenz
Dieses Repository, einschließlich aller Inhalte, Unterprojekte, Module und Komponenten, ist unter [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) lizenziert, sofern nicht ausdrücklich anders angegeben. In diesem Repository enthaltene Bibliotheken von Drittanbietern können ihren eigenen Lizenzen unterliegen.
<h3 align="center"><img width="80" alt="Puter.com, The Personal Cloud Computer: All your files, apps, and games in one place accessible from anywhere at any time." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">The Internet OS! Free, Open-Source, and Self-Hostable.</h3>
Puter is an advanced, open-source internet operating system designed to be feature-rich, exceptionally fast, and highly extensible. Puter can be used as:
- A privacy-first personal cloud to keep all your files, apps, and games in one secure place, accessible from anywhere at any time.
- A platform for building and publishing websites, web apps, and games.
- An alternative to Dropbox, Google Drive, OneDrive, etc. with a fresh interface and powerful features.
- A remote desktop environment for servers and workstations.
- A friendly, open-source project and community to learn about web development, cloud computing, distributed systems, and much more!
<br/>
## Getting Started
### 💻 Local Development
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
This will launch Puter at http://puter.localhost:4100 (or the next available port).
We are always happy to help you with any questions you may have. Don't hesitate to ask!
<br/>
## License
This repository, including all its contents, sub-projects, modules, and components, is licensed under [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) unless explicitly stated otherwise. Third-party libraries included in this repository may be subject to their own licenses.
<h3 align="center"><img width="80" alt="Puter.com, El Computador Personal en Nube: Todos tus archivos, apps y juegos en un solo lugar accesible desde cualquier lugar en cualquier momento" src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">El Sistema Operativo de Internet! Gratis, de Código abierto, y Autohospedable.</h3>
Puter es un sistema operativo en internet avanzado y de código abierto, diseñado para ser rico en funcionalidades, excepcionalmente rápido y altamente extensible. Puter puede ser usado como:
- Una nube personal privada para almacenar todos tus archivos, aplicaciones y juegos en un lugar seguro, accesible y desde cualquier lugar en cualquier momento.
- Una plataforma para construir y publicar páginas web, aplicativos sobre la web y juegos.
- Una alternativa a Dropbox, Google Drive, OneDrive, etc. con una interfaz fresca y llena de funcionalidades.
- Un entorno de escritorio remoto para servidores y estaciones de trabajo.
- Un proyecto y comunidad abiertas y amigables para aprender sobre desarrollo web, computación en la nube, sistemas distribuidos y mucho más!
<br/>
## Primeros Pasos
### 💻 Desarrollo Local
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
Esto ejecutará Puter en http://puter.localhost:4100 (o el siguiente puerto disponible).
Estamos siempre felices de ayudar con cualquier pregunta que puedas tener. No dudes en preguntar!
<br/>
## Licencia
Este repositorio, incluyendo todo su contenido, sub-proyectos, modulos y componentes, esta licenciado bajo [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) a menos que se indique explícitamente lo contrario. Librerías de terceros incluidos en este repositorio pueden estar sujetas a sus propias licencias.
<h3 align="center"><img width="80" alt="Puter.com، رایانش ابری شخصی: همه فایلها، برنامهها و بازیهای شما در یک مکان قابل دسترسی از هر جا و در هر زمان." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">سیستمعامل اینترنت! رایگان، متنباز، و قابل میزبانی شخصی.</h3>
<p>پیوتر یک سیستم عامل تحت وب پیشرفتهی متنباز است که به منظور ایجاد ویژگیهای متنوع، سرعت بسیار بالا، و مقیاسپذیری طراحی شده است. از پیوتر میتوان بهعنوان:</p>
<ul>
<li>یک فضای ابری شخصی که بر حریم خصوصی تمرکز دارد و تمام فایلها، برنامهها، و بازیهای شما را در یک مکان امن ذخیره میکند، قابل دسترسی از هر جا و در هر زمان.</li>
<li>پلتفرمی برای ساخت و انتشار وبسایتها، اپلیکیشنهای وب، و بازیها.</li>
<li>جایگزینی برای Dropbox، Google Drive، OneDrive، و سایر موارد، با یک رابط کاربری مدرن و قابلیتهای قدرتمند.</li>
<li>یک محیط دسکتاپ از راه دور برای سرورها و ایستگاههای کاری.</li>
<li> یک پروژه و جامعهی متنباز دوستانه برای یادگیری توسعه وب، رایانش ابری، سیستمهای توزیعشده، و موارد دیگر نام برد!</li>
</ul>
</div>
<br/>
## نحوهی استفاده
### 💻 توسعهی محلی
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
این کار پیوتر را در http://puter.localhost:4100 (یا پورت در دسترس بعدی) اجرا میکند.
ما همیشه از پاسخگویی به سوالات شما خرسند هستیم. در سوال پرسیدن درنگ نکنید!
## گواهی
این مخزن، شامل تمام محتویات، پروژههای فرعی، ماژولها و اجزای آن، تحت مجوز [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) است مگر آنکه خلاف آن بهطور صریح ذکر شده باشد. کتابخانههای خارجی ممکن است گواهیهای جداگانه داشته باشند.
<h3 align="center"><img width="80" alt="Puter.com, The Personal Cloud Computer: All your files, apps, and games in one place accessible from anywhere at any time." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">Internetin käyttöjärjestelmä! Ilmainen, avoimen lähdekoodin ja itse isännöitävä.</h3>
Puter on kehittynyt, avoimen lähdekoodin internetin käyttöjärjestelmä, joka on suunniteltu olemaan ominaisuuksiltaan rikas, poikkeuksellisen nopea ja erittäin laajennettava. Puteria voidaan käyttää:
- Yksityisyyttä kunnioittavana henkilökohtaisena pilvenä, johon voit tallentaa kaikki tiedostosi, sovelluksesi ja pelisi turvallisesti yhdessä paikassa, josta ne ovat saatavilla missä tahansa ja milloin tahansa.
- Alustana verkkosivustojen, web-sovellusten ja pelien rakentamiseen ja julkaisemiseen.
- Vaihtoehtona Dropboxille, Google Drivelle, OneDrivelle jne. tuoreella käyttöliittymällä ja tehokkailla ominaisuuksilla.
- Etätyöpöytäympäristönä palvelimille ja työasemille.
- Ystävällisenä, avoimen lähdekoodin projektina ja yhteisönä, jossa voit oppia verkkokehityksestä, pilvipalveluista, hajautetuista järjestelmistä ja paljon muusta!
<br/>
## Aloittaminen
### 💻 Paikallinen kehitys
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
Tämä käynnistää Puterin osoitteessa http://puter.localhost:4100 (tai seuraavassa vapaassa portissa).
Olemme aina valmiita auttamaan sinua kaikissa kysymyksissäsi. Älä epäröi kysyä!
<br/>
## Lisenssi
Tämä repository, mukaan lukien kaikki sen sisältö, aliprojektit, moduulit ja komponentit, on lisensoitu [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt)-lisenssillä, ellei toisin mainita. Tämän repositoryn mukana tulevat kolmannen osapuolen kirjastot voivat olla omien lisenssiensä alaisia.
<h3 align="center"><img width="80" alt="Puter.com, L'ordinateur cloud personnel : Tous vos fichiers, applications et jeux en un seul endroit accessible de partout à tout moment." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">L'OS Internet ! Gratuit, open-source et auto-hébergeable.</h3>
Puter est un système d'exploitation internet avancé, open-source, conçu pour être riche en fonctionnalités, extrêmement rapide et hautement extensible. Puter peut être utilisé comme :
- Un cloud personnel axé sur la confidentialité pour garder tous vos fichiers, applications et jeux en un seul endroit sécurisé, accessible de partout à tout moment.
- Une plateforme pour créer et publier des sites web, des applications web et des jeux.
- Une alternative à Dropbox, Google Drive, OneDrive, etc. avec une interface renouvelée et des fonctionnalités puissantes.
- Un environnement de bureau à distance pour serveurs et stations de travail.
- Un projet et une communauté open-source accueillants pour apprendre le développement web, l'informatique en nuage, les systèmes distribués, et bien plus encore !
<br/>
## Démarrage
### 💻 Développement Local
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
Cela lancera Puter à http://puter.localhost:4100 (ou au port disponible suivant).
Nous sommes toujours heureux de vous aider avec toutes les questions que vous pourriez avoir. N'hésitez pas à nous demander !
<br/>
## License
Ce dépôt, y compris tout son contenu, sous-projets, modules et composants, est licencié sous [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) sauf indication contraire explicite. Les bibliothèques tierces incluses dans ce dépôt peuvent être soumises à leurs propres licences.
אנחנו תמיד שמחים לעזור עם כל שאלה שיש. אל תהסס לשאול!
<br/>
## רישיון
ספריה זו, כולל כל התכנים שלה, תתי הפרויקטים, המודולים והרכיבים שלה, מורשית תחת [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) אלא אם נאמר אחרת במפורש. לספריות צד שלישי הכלולות בספרייה זו עשויות להיות רישיונות משלהן.
<h3 align="center"><img width="80" alt="Puter.com, व्यक्तिगत क्लाउड कंप्यूटर: आपकी सभी फाइलें, ऐप्स और गेम एक ही स्थान पर, कभी भी, कहीं से भी पहुँच योग्य." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">इंटरनेट ऑपरेटिंग सिस्टम! मुफ़्त, ओपन-सोर्स, और स्वयं-होस्ट करने योग्य|</h3>
Puter एक उन्नत, ओपन-सोर्स इंटरनेट ऑपरेटिंग सिस्टम है जिसे फीचर-रिच, असाधारण रूप से तेज़ और अत्यधिक विस्तार योग्य बनाने के लिए डिज़ाइन किया गया है। Puter का उपयोग इस प्रकार किया जा सकता है:
- एक गोपनीयता-पहले व्यक्तिगत क्लाउड जो आपकी सभी फ़ाइलों, ऐप्स और गेम को एक सुरक्षित स्थान पर रखता है, जिसे कहीं से भी किसी भी समय एक्सेस किया जा सकता है।
- वेबसाइट, वेब ऐप्स और गेम बनाने और प्रकाशित करने के लिए एक प्लेटफ़ॉर्म।
- ड्रॉपबॉक्स, Google ड्राइव, OneDrive आदि का एक विकल्प नए इंटरफ़ेस और शक्तिशाली सुविधाओं के साथ सर्वर और वर्कस्टेशन के लिए एक रिमोट डेस्कटॉप वातावरण।
- वेब विकास, क्लाउड कंप्यूटिंग, वितरित सिस्टम और बहुत कुछ सीखने के लिए एक दोस्ताना, ओपन-सोर्स प्रोजेक्ट और समुदाय!
<br/>
## शुरू करें
### 💻 स्थानीय विकास
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
यह Puter को लॉन्च करेगा http://puter.localhost:4100 (या अगले उपलब्ध पोर्ट पर).
हमें आपकी किसी भी प्रश्न में मदद करने में खुशी होगी। बेझिझक पूछें!
<br/>
## लाइसेंस
यह रिपॉजिटरी, इसकी सभी सामग्री, उप-प्रोजेक्ट्स, मॉड्यूल और घटकों सहित, लाइसेंस के तहत है [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) जब तक स्पष्ट रूप से अन्यथा नहीं कहा गया है। इस रिपॉजिटरी में शामिल तृतीय-पक्ष पुस्तकालयों के अपने स्वयं के लाइसेंस के अधीन हो सकते हैं।
<h3 align="center"><img width="80" alt="Puter.com, A személyi felhő számítógép: Minden fájl, alkalmazás és játék egy helyen elérhető bárhonnan, bármikor." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">Az internetes oprendszer! Ingyenes, nyílt-forráskódú, saját szerveren futtatható.</h3>
A Puter egy fejlett, nyílt forráskódú internetes operációs rendszer, amelyet úgy terveztek, hogy funkciókban gazdag, kivételesen gyors és nagymértékben bővíthető legyen. A Puter a következőképpen használható:
- Egy adatvédelmet előtérbe helyező személyes felhő, amely minden fájlt, alkalmazást és játékot egy biztonságos helyen tart. Bárhonnan és bármikor elérhető.
- Egy platform weboldalak, web-appok, és játékok készítéséhez/közzétételéhez.
- A Dropbox, Google Drive, OneDrive (stb.) alternatívája megújult felülettel és hatékony funkciókkal.
- Egy távoli desktop-környezet szervereknek és workstation-öknek.
- Egy barátságos, nyílt forráskódú projekt és közösség, amely a webfejlesztéssel, a felhőalapú számítástechnikával, elosztott rendszerekkel és sok más érdekes témával foglalkozik!
<br/>
## Első lépések
### 💻 Helyi (lokális) fejlesztés
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
Ezzel a http://puter.localhost:4100 -on futtatjuk Putert. (vagy a legközelebbi elérhető porton).
Mindig örömmel segítünk bármilyen felmerülő kérdésben. Bátran kérdezz tőlünk!
<br/>
## License
Ez a repo, beleértve annak minden tartalmát, alprojektjeit, moduljait és komponenseit, az [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) licenc alatt áll, hacsak másképp nem rendelkeznek róla. A repoban szereplő harmadik fél által fejlesztett könyvtárak saját licencfeltételek alá eshetnek.
<h3 align="center"><img width="80" alt="Puter.com, The Personal Cloud Computer: All your files, apps, and games in one place accessible from anywhere at any time." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">Ինտերնետ ՕՀ! Անվճար, բաց կոդով և ինքնահոսթ հնարավորությամբ։</h3>
Puter-ը առաջադեմ, բաց կոդով ինտերնետային օպերացիոն համակարգ է, որը նախագծված է լինել ֆունկցիոնալ հարուստ, բացառիկ արագ և բարձր ընդլայնելի։ Puter-ը կարող է օգտագործվել հետևյալ կերպ․
- Անձնական ամպային համակարգ՝ առաջնային գաղտնիությամբ, որը թույլ է տալիս պահել ձեր բոլոր ֆայլերը, հավելվածները և խաղերը մեկ անվտանգ վայրում, որը հասանելի է ցանկացած վայրից և ցանկացած ժամանակ։
- Պլատֆորմ կայքերի, վեբ հավելվածների և խաղերի ստեղծման և հրապարակման համար։
- Dropbox, Google Drive, OneDrive և այլ ծառայությունների այլընտրանք՝ նոր ինտերֆեյսով և հզոր գործառույթներով։
- Հեռավոր աշխատասեղանի միջավայր սերվերների և աշխատանքային կայանների համար։
- Պարզ, բաց կոդով նախագիծ և համայնք՝ վեբ ծրագրավորման, ամպային հաշվարկների, բաշխված համակարգերի և այլ թեմաների մասին սովորելու համար։
<br/>
## Սկսել
### 💻 Լոկալ ծրագրավորում
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
Սա կգործակի Puter-ը հետևյալ հասցեով՝ http://puter.localhost:4100 (կամ հաջորդ հասանելի պորտով)։
Մենք միշտ ուրախ ենք օգնել ձեզ ցանկացած հարցում։ Մի կաշկանդվեք հարցնել։
<br/>
## Լիցենզիա
Այս պահոցարանը, ներառյալ բոլոր իր բովանդակությունը, ենթա-պրոյեկտները, մոդուլները և բաղադրիչները, լիցենզավորվում են [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) լիցենզիայի տակ, եթե այլ կերպ հստակ նշված չէ։ Այս պահոցարանում ներառված երրորդ կողմի գրադարանները կարող են ենթարկվել իրենց սեփական լիցենզիաներին։
<h3 align="center"><img width="80" alt="Puter.com, Komputer Cloud Pribadi: Semua file, aplikasi, dan permainan Anda berada di satu tempat yang dapat diakses dari mana saja kapan saja." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">Sistem Operasi Internet! Gratis, Sumber Terbuka, dan Dapat Dihosting Sendiri.</h3>
Puter adalah sistem operasi internet canggih, open-source, yang dirancang untuk menjadi kaya fitur, sangat cepat, dan sangat dapat diperluas. Puter dapat digunakan sebagai:
- Cloud pribadi yang mengutamakan privasi untuk menyimpan semua file, aplikasi, dan permainan Anda di satu tempat yang aman, yang dapat diakses dari mana saja kapan saja.
- Platform untuk membangun dan mempublikasikan situs web, aplikasi web, dan permainan.
- Alternatif untuk Dropbox, Google Drive, OneDrive, dll. Dengan antarmuka baru dan fitur-fitur canggih.
- Lingkungan desktop jarak jauh untuk server dan workstation.
- Proyek dan komunitas open-source yang ramah untuk belajar tentang pengembangan web, komputasi gemawan (cloud), sistem terdistribusi, dan banyak lagi!
<br/>
## Memulai
### 💻 Pengembangan Lokal
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
Ini akan menjalankan Puter di http://puter.localhost:4100 (atau di port berikutnya yang tersedia)
Kami selalu senang membantu Anda dengan pertanyaan apa pun yang Anda miliki. Jangan ragu untuk bertanya!
<br/>
## Lisensi
Repositori ini, termasuk semua isinya, sub-proyek, modul, dan komponen, dilisensikan di bawah [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) kecuali dinyatakan sebaliknya secara eksplisit. Perpustakaan pihak ketiga yang termasuk dalam repositori ini mungkin tunduk pada lisensinya sendiri.
<h3 align="center"><img width="80" alt="Puter.com, The Personal Cloud Computer: All your files, apps, and games in one place accessible from anywhere at any time." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">Il sistema operativo di Internet! Gratuito, Open-Source e Auto-Hostabile.</h3>
Puter è un sistema operativo di Internet avanzato e open-source, progettato per essere ricco di funzionalità, eccezionalmente veloce e altamente estensibile. Puter può essere utilizzato come:
- Un cloud personale che tiene conto della privacy per conservare tutti i file, le app e i giochi in un luogo sicuro, accessibile da qualsiasi luogo e in qualsiasi momento.
- Una piattaforma per creare e pubblicare siti web, app e giochi.
- Un'alternativa a Dropbox, Google Drive, OneDrive, ecc. con un'interfaccia nuova e funzioni potenti.
- Un ambiente desktop remoto per server e workstation.
- Un progetto e una comunità open-source amichevole per imparare lo sviluppo web, il cloud computing, i sistemi distribuiti e molto altro ancora!
<br/>
## Getting Started
### 💻 Local Development
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
In questo modo Puter verrà avviato all'indirizzo http://puter.localhost:4100 (o alla prossima porta disponibile).
Siamo sempre felici di aiutarvi con qualsiasi domanda. Non esitate a chiedere!
<br/>
## Licenza
Questo repository, compresi tutti i suoi contenuti, sottoprogetti, moduli e componenti, è concesso in licenza [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt), a meno che non sia esplicitamente indicato diversamente. Le librerie di terze parti incluse in questo repository possono essere soggette alle loro licenze.
<h3 align="center"><img width="80" alt="Puter.com, The Personal Cloud Computer: All your files, apps, and games in one place accessible from anywhere at any time." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">Puter: 인터넷 OS! 무료이고 오픈소스이며 자체 호스팅이 가능합니다.</h3>
이 저장소는 모든 내용, 하위 프로젝트, 모듈 및 구성 요소를 포함하여 명시적으로 달리 명시되지 않는 한 [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) 라이선스 하에 제공됩니다. 이 저장소에 포함된 제3자 라이브러리는 해당 라이브러리의 고유 라이선스를 따를 수 있습니다.
<h3 align="center"><img width="80" alt="Puter.com, The Personal Cloud Computer: All your files, apps, and games in one place accessible from anywhere at any time." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">ഇന്റർനെറ്റ് ഓപ്പറേറ്റിംഗ് സിസ്റ്റം!<br> സൗജന്യവും, ഓപ്പൺ സോഴ്സും സ്വയം ഹോസ്റ്റ് ചെയ്യാൻ പറ്റുന്നതും</h3>
ഫീച്ചറുകളാൽ സമ്പുഷ്ടവും അസാധാരണമാംവിധം വേഗതയേറിയതും,വളരെ വിപുലീകരിക്കാവുന്നതുമായ ഒരു നൂതന, ഓപ്പൺ സോഴ്സ് ഇന്റർനെറ്റ് ഓപ്പറേറ്റിംഗ് സിസ്റ്റമാണ് പ്യൂട്ടർ. പ്യൂട്ടർ ഇനിപ്പറയുന്ന രീതിയിൽ ഉപയോഗിക്കാം:
- നിങ്ങളുടെ എല്ലാ ഫയലുകളും ആപ്പുകളും ഗെയിമുകളും ഒരു സുരക്ഷിത സ്ഥലത്ത് സൂക്ഷിക്കുന്നതിനുള്ള, സ്വകാര്യതയ്ക്ക് മുൻഗണന കൊടുക്കുന്ന ആദ്യത്തെ വ്യക്തിഗത ക്ലൗഡ്, എവിടെ നിന്നും എപ്പോൾ വേണമെങ്കിലും ആക്സസ് ചെയ്യാൻ കഴിയും.
- വെബ്സൈറ്റുകൾ, വെബ് ആപ്പുകൾ, ഗെയിമുകൾ എന്നിവ നിർമ്മിക്കുന്നതിനും പ്രസിദ്ധീകരിക്കുന്നതിനുമുള്ള ഒരു പ്ലാറ്റ്ഫോം.
- പുതിയ ഇന്റർഫേസും, ശക്തമായ ഫീച്ചറുകളും അടങ്ങിയ, ഡ്രോപ്പ്ബോക്സ്, ഗൂഗിൾ ഡ്രൈവ്, വൺഡ്രൈവ് മുതലായവയ്ക്കുള്ള ബദൽ.
- സെർവറുകൾക്കും വർക്ക്സ്റ്റേഷനുകൾക്കും, ഒരു വിദൂര ഡെസ്ക്ടോപ്പ് പരിസ്ഥിതി.
- വെബ് ഡെവലപ്മെന്റ്, ക്ലൗഡ് കംപ്യൂട്ടിംഗ്, ഡിസ്ട്രിബ്യൂട്ടഡ് സിസ്റ്റങ്ങൾ എന്നിവയെ കുറിച്ചും, അതിലേറെ കാര്യങ്ങളെ കുറിച്ചും അറിയാനുള്ള സൗഹൃദപരവും ഓപ്പൺ സോഴ്സുമായ പ്രോജക്റ്റും കമ്മ്യൂണിറ്റിയും!
<br/>
## തുടങ്ങാനായി
### 💻 ലോക്കൽ ഡെവലപ്മെന്റ്
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
ഇത് http://puter.localhost:4100 (അല്ലെങ്കിൽ അടുത്ത ലഭ്യമായ പോർട്ടിൽ) എന്നതിൽ Puter സമാരംഭിക്കും
നിങ്ങൾക്ക് ഉണ്ടായേക്കാവുന്ന ഏത് ചോദ്യങ്ങളിലും നിങ്ങളെ സഹായിക്കുന്നതിൽ ഞങ്ങൾക്ക് എപ്പോഴും സന്തോഷമുണ്ട്. ചോദിക്കാൻ മടിക്കേണ്ട!
<br/>
## ലൈസൻസ്
ഈ ശേഖരം, അതിന്റെ എല്ലാ ഉള്ളടക്കങ്ങളും, ഉപപദ്ധതികളും, മൊഡ്യൂളുകളും, ഘടകങ്ങളും ഉൾപ്പെടെ, [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) എന്നതിന് കീഴിൽ ലൈസൻസുള്ളതാണ്. ഈ ശേഖരത്തിൽ ഉൾപ്പെടുത്തിയിരിക്കുന്ന മൂന്നാം കക്ഷി ലൈബ്രറികൾ അവരുടെ സ്വന്തം ലൈസൻസുകൾക്ക് വിധേയമായിരിക്കാം.
<h3 align="center"><img width="80" alt="Puter.com, De Persoonlijke Cloud Computer: Al je bestanden, apps en games op één plek, overal en altijd toegankelijk." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">Het Internet OS! Gratis, Open-Source en Zelf te Hosten.</h3>
Puter is een geavanceerd, open-source internetbesturingssysteem ontworpen om functierijk, uitzonderlijk snel en zeer uitbreidbaar te zijn. Puter kan worden gebruikt als:
- Een privacy-gerichte persoonlijke cloud om al je bestanden, apps en games op één veilige plek te bewaren, overal en altijd toegankelijk.
- Een platform voor het bouwen en publiceren van websites, web-apps en games.
- Een alternatief voor Dropbox, Google Drive, OneDrive, etc. met een frisse interface en krachtige functies.
- Een externe desktopomgeving voor servers en werkstations.
- Een vriendelijk, open-source project en gemeenschap om te leren over webontwikkeling, cloud computing, gedistribueerde systemen en veel meer!
<br/>
## Aan de slag
### 💻 Lokale Ontwikkeling
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
Dit zal Puter starten op http://puter.localhost:4100 (of de eerstvolgende beschikbare poort).
We helpen je graag met al je vragen. Aarzel niet om te vragen!
<br/>
## Licentie
Deze repository, inclusief alle inhoud, subprojecten, modules en componenten, is gelicentieerd onder [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) tenzij expliciet anders vermeld. Bibliotheken van derden die in deze repository zijn opgenomen, kunnen onderworpen zijn aan hun eigen licenties.
<h3 align="center"><img width="80" alt="Puter.com, Osobisty Komputer Chmurowy: Wszystkie twoje pliki, aplikacje i gry w jednym miejscu, dostępne z dowolnego miejsca o dowolnej porze." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">System Operacyjny Internetu! Darmowy, Open-Source i Możliwy do Samodzielnego Hostowania.</h3>
Puter to zaawansowany, open-source'owy system operacyjny internetowy, zaprojektowany tak, aby był bogaty w funkcje, wyjątkowo szybki i wysoce rozszerzalny. Puter może być używany jako:
- Prywatna chmura osobista do przechowywania wszystkich plików, aplikacji i gier w jednym bezpiecznym miejscu, dostępnym z dowolnego miejsca o dowolnej porze.
- Platforma do budowania i publikowania stron internetowych, aplikacji webowych i gier.
- Alternatywa dla Dropbox, Google Drive, OneDrive itp. ze świeżym interfejsem i potężnymi funkcjami.
- Zdalne środowisko pulpitu dla serwerów i stacji roboczych.
- Przyjazny, open-source'owy projekt i społeczność do nauki o tworzeniu stron internetowych, chmurze obliczeniowej, systemach rozproszonych i wielu innych!
<br/>
## Rozpoczęcie pracy
## 💻 Rozwój lokalny
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
To uruchomi Puter na http://puter.localhost:4100 (lub na następnym dostępnym porcie).
Puter jest dostępny jako usługa hostowana na [**puter.com**](https://puter.com).
<br/>
## Wymagania systemowe
- **Systemy operacyjne:** Linux, macOS, Windows
- **RAM:** Minimum 2GB (zalecane 4GB)
- **Przestrzeń dyskowa:** 1GB wolnego miejsca
- **Node.js:** Wersja 16+ (zalecana wersja 22+)
- **npm:** Najnowsza stabilna wersja
<br/>
## Wsparcie
Połącz się z opiekunami i społecznością przez te kanały:
- Raport o błędzie lub prośba o funkcję? Proszę otworzyć zgłoszenie.
- Discord: discord.com/invite/PQcx7Teh8u
- X (Twitter): x.com/HeyPuter
- Reddit: reddit.com/r/puter/
- Mastodon: mastodon.social/@puter
- Problemy z bezpieczeństwem? security@puter.com
- Email do opiekunów: hi@puter.com
Zawsze chętnie pomożemy Ci z wszelkimi pytaniami, jakie możesz mieć. Nie wahaj się pytać!
<br/>
## Licencja
To repozytorium, w tym cała jego zawartość, podprojekty, moduły i komponenty, jest licencjonowane na podstawie [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt), chyba że wyraźnie zaznaczono inaczej. Biblioteki stron trzecich zawarte w tym repozytorium mogą podlegać własnym licencjom.
<h3 align="center"><img width="80" alt="Puter.com, O Computador Pessoal em Nuvem: Todos os seus arquivos, aplicativos e jogos em um único lugar, acessíveis de qualquer lugar e a qualquer hora." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">O Sistema Operacional da Internet! Gratuito, de Código Aberto e Auto-Hospedável.</h3>
<p align="center">
<img alt="Tamanho do repositório do GitHub" src="https://img.shields.io/github/repo-size/HeyPuter/puter"> <img alt="Lançamento no GitHub" src="https://img.shields.io/github/v/release/HeyPuter/puter?label=latest%20version"> <img alt="Licença do GitHub" src="https://img.shields.io/github/license/HeyPuter/puter">
</p>
<p align="center">
<a href="https://puter.com/"><strong>« DEMONSTRAÇÃO AO VIVO »</strong></a>
Puter é um sistema operacional de internet avançado e de código aberto, projetado para ser rico em recursos, excepcionalmente rápido e altamente extensível. Puter pode ser usado como:
- Um serviço de nuvem pessoal com foco na privacidade para manter todos os seus arquivos, aplicativos e jogos em um local seguro, acessível de qualquer lugar e a qualquer hora.
- Uma plataforma para construir e publicar websites, aplicativos web e jogos.
- Uma alternativa ao Dropbox, Google Drive, OneDrive, etc., com uma interface renovada e recursos poderosos.
- Um ambiente de desktop remoto para servidores e estações de trabalho.
- Um projeto e comunidade de código aberto e amigável para aprender sobre desenvolvimento web, computação em nuvem, sistemas distribuídos e muito mais!
<br/>
## Iniciando o Projeto
### 💻 Desenvolvimento Local
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
Isso iniciará o Puter em http://puter.localhost:4100 (ou na próxima porta disponível).
Estamos sempre felizes em ajudá-lo com quaisquer perguntas que você possa ter. Não hesite em perguntar!
<br/>
## Licença
Este repositório, incluindo todos os seus conteúdos, subprojetos, módulos e componentes, está licenciado sob [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) a menos que explicitamente indicado de outra forma. Bibliotecas de terceiros incluídas neste repositório podem estar sujeitas às suas próprias licenças.
<h3 align="center"><img width="80" alt="Puter.com, Calculatorul Personal Cloud: Toate fișierele, aplicațiile și jocurile dumneavoastră într-un singur loc, accesibile de oriunde și oricând." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">Sistemul de Operare Internet! Gratuit, Open-Source și Găzduibil Autonom.</h3>
Puter este un sistem de operare pe internet avansat, open-source, proiectat să fie bogat în funcții, extrem de rapid și foarte extensibil. Puter poate fi folosit ca:
- Un cloud personal care pune pe primul loc confidențialitatea pentru a păstra toate fișierele, aplicațiile și jocurile tale într-un loc sigur, accesibil de oriunde și oricând.
- O platforma pentru a construi și publica site-uri web, aplicații web și jocuri.
- O alternativă la Dropbox, Google Drive, OneDrive, etc. cu o interfață nouă și funcționalități puternice.
- Un mediu desktop la distanță pentru servere si stații de lucru.
- Un proiect prietenos, open-source și o comunitate pentru a învăța despre dezvoltarea web, cloud computing, sisteme distribuite și multe altele!
<br/>
## Începeți
### 💻 Dezvoltare Locală
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
Aceasta va lansa Puter la adresa http://puter.localhost:4100 (sau la următorul port disponibil).
Suntem întotdeauna bucuroși să vă ajutăm cu orice întrebări aveți. Nu ezitați să ne întrebați!
<br/>
## Licență
Acest depozit, inclusiv toate conținuturile sale, sub-proiectele, modulele și componentele, sunt licențiate sub [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt), cu excepția cazului în care se menționează altfel în mod explicit. Bibliotecile terțe incluse în acest depozit pot fi supuse propriilor licențe.
<h3 align="center"><img width="80" alt="Puter.com, персональный облачный компьютер: все ваши файлы, приложения и игры в одном месте, доступные из любой точки мира в любое время." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">Интернет ОС! Бесплатная, с открытым исходным кодом и возможностью самостоятельной установки.</h3>
Puter — это передовая операционная система с открытым исходным кодом, разработанная для обеспечения широкого функционала, исключительной скорости и высокой масштабируемости. Puter можно использовать как:
- Персональное облако с приоритетом конфиденциальности для хранения всех ваших файлов, приложений и игр в одном безопасном месте, доступном из любой точки мира в любое время.
- Платформа для создания и публикации веб-сайтов, веб-приложений и игр.
- Альтернатива Dropbox, Google Drive, OneDrive и т. д. с новым интерфейсом и мощными функциями.
- Удаленное рабочее окружение для серверов и рабочих станций.
- Дружественный проект с открытым исходным кодом и сообщество для изучения веб-разработки, облачных вычислений, распределенных систем и многого другого!
<br/>
## Начало работы
### 💻 Локальная разработка
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
Это запустит Puter по адресу http://puter.localhost:4100 (или на следующем доступном порту).
Мы всегда рады помочь вам с любыми вопросами. Не стесняйтесь спрашивать!
<br/>
## Лицензия
Этот репозиторий, включая все его содержимое, подпроекты, модули и компоненты, лицензирован в соответствии с [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt), если явно не указано иное. Сторонние библиотеки, включенные в этот репозиторий, могут подпадать под действие их собственных лицензий.
<h3 align="center"><img width="80" alt="Puter.com, Den personliga molndatorn: Alla dina filer, appar och spel på ett ställe tillgängliga var som helst när som helst." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">Internet OS! Gratis, öppen källkod och självhostad.</h3>
Puter är ett avancerat, öppen källkod internetoperativsystem designat för att vara funktionsrikt, exceptionellt snabbt och mycket utbyggbart. Puter kan användas som:
- Ett integritetsfokuserat personligt moln för att hålla alla dina filer, appar och spel på ett säkert ställe, tillgängligt var som helst när som helst.
- En plattform för att bygga och publicera webbplatser, webbappar och spel.
- Ett alternativ till Dropbox, Google Drive, OneDrive, etc. med ett fräscht gränssnitt och kraftfulla funktioner.
- En fjärrskrivbordsmiljö för servrar och arbetsstationer.
- Ett vänligt, öppen källkod-projekt och gemenskap för att lära sig om webbutveckling, molndatorer, distribuerade system och mycket mer!
<br/>
## Komma igång
### 💻 Lokal Utveckling
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
Detta kommer att starta Puter på http://puter.localhost:4100 (eller nästa lediga port).
Vi hjälper dig gärna med eventuella frågor du kan ha. Tveka inte att fråga!
<br/>
## Licens
Detta arkiv, inklusive allt dess innehåll, delprojekt, moduler och komponenter, är licensierat under [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) om inte annat uttryckligen anges. Tredjepartsbibliotek som ingår i detta arkiv kan vara föremål för sina egna licenser.
<h3 align="center"><img width="80" alt="Puter.com, The Personal Cloud Computer: உங்கள் கோப்புகள், ஆப்ஸ் மற்றும் கேம்கள் அனைத்தும் ஒரே இடத்தில் எங்கிருந்தும் எந்த நேரத்திலும் அணுகலாம்." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">இன்டர்நெட் OS! இலவசம், ஓப்பன் சோர்ஸ் மற்றும் Self-Hostable</h3>
புட்டர்(putter) என்பது ஒரு மேம்பட்ட, திறந்த மூல இலவசமாக இணைய இயக்க முறைமையாகும், இது அம்சம் நிறைந்ததாகவும், விதிவிலக்காக வேகமாகவும், அதிக விரிவாக்கக்கூடியதாகவும் வடிவமைக்கப்பட்டுள்ளது. புட்டரை இவ்வாறு பயன்படுத்தலாம்:
- உங்கள் கோப்புகள், பயன்பாடுகள் மற்றும் கேம்கள் அனைத்தையும் ஒரே பாதுகாப்பான இடத்தில் வைத்திருக்க, எந்த நேரத்திலும் எங்கிருந்தும் அணுகக்கூடிய தனியுரிமை-முதல் தனிப்பட்ட கிளவுட்.
- இணையதளங்கள், இணைய பயன்பாடுகள் மற்றும் கேம்களை உருவாக்கி வெளியிடுவதற்கான தளம் இதுவாகும்.
- புதிய இடைமுகம் மற்றும் சக்திவாய்ந்த அம்சங்களுடன் Dropbox, Google Drive, OneDrive போன்றவற்றுக்கு மாற்றீடாக உபயோகிக்க கூடியது.
- சர்வர்கள் மற்றும் பணிநிலையங்களுக்கான தொலைநிலை டெஸ்க்டாப்(desktop) சூழல்.
- வலை மேம்பாடு, கிளவுட் கம்ப்யூட்டிங், விநியோகிக்கப்பட்ட அமைப்புகள் மற்றும் பலவற்றைப் பற்றி அறிந்து ஒரு நட்பு ரீதியான, திறந்த மூல திட்டம் மற்றும் சமூக அறிவியலில் சார்ந்த ஒன்று.
<br/>
## தொடங்குதல்
### 💻 உள்ளூர் வளர்ச்சி
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
``` தொடக்கம்
```
இது புட்டரை <http://puter.localhost:4100> இல் தொடங்கும் (அல்லது அடுத்து கிடைக்கும் இடம்).
உங்களுக்கு ஏதேனும் கேள்விகள் இருந்தால் உங்களுக்கு உதவ நாங்கள் எப்போதும் மகிழ்ச்சியடைகிறோம். தயங்காமல் கேளுங்கள்!
<br/>
## உரிமம்
இந்தக் களஞ்சியமானது, அதன் அனைத்து உள்ளடக்கங்கள், துணைத் திட்டங்கள், தொகுதிகள் மற்றும் கூறுகள் உட்பட, வெளிப்படையாகக் கூறப்படாவிட்டால், [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) இன் கீழ் உரிமம் பெற்றுள்ளது. . இந்தக் களஞ்சியத்தில் சேர்க்கப்பட்டுள்ள மூன்றாம் தரப்பு நூலகங்கள் அவற்றின் சொந்த உரிமங்களுக்கு உட்பட்டதாக இருக்கும்.
<h3 align="center"><img width="80" alt="Puter.com, The Personal Cloud Computer: మీ అన్ని ఫైల్లు, యాప్లు మరియు గేమ్లను ఒకే స్థలంలో ఎక్కడి నుండైనా ఎప్పుడైనా యాక్సెస్ చేయవచ్చు." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center"> ఇంటర్నెట్ OS! ఉచిత, ఓపెన్ సోర్స్, and Self-Hostable.</h3>
పుటర్ అనేది అధునాతన, ఓపెన్ సోర్స్ ఇంటర్నెట్ ఆపరేటింగ్ సిస్టమ్, ఇది ఫీచర్-రిచ్, అనూహ్యంగా వేగవంతమైన మరియు అత్యంత విస్తరించదగినదిగా రూపొందించబడింది. పుటర్ను ఇలా ఉపయోగించవచ్చు:
- మీ అన్ని ఫైల్లు, యాప్లు మరియు గేమ్లను ఒకే సురక్షిత స్థలంలో ఉంచడానికి గోప్యత-మొదటి వ్యక్తిగత క్లౌడ్, ఎప్పుడైనా ఎక్కడి నుండైనా యాక్సెస్ చేయవచ్చు.
- వెబ్సైట్లు, వెబ్ యాప్లు మరియు గేమ్లను రూపొందించడానికి మరియు ప్రచురించడానికి ఒక వేదిక.
- తాజా ఇంటర్ఫేస్ మరియు శక్తివంతమైన ఫీచర్లతో Dropbox, Google Drive, OneDrive మొదలైన వాటికి ప్రత్యామ్నాయం.
- సర్వర్లు మరియు వర్క్స్టేషన్ల కోసం రిమోట్ డెస్క్టాప్ వాతావరణం.
- వెబ్ డెవలప్మెంట్, క్లౌడ్ కంప్యూటింగ్, డిస్ట్రిబ్యూట్ సిస్టమ్లు మరియు మరిన్నింటి గురించి తెలుసుకోవడానికి స్నేహపూర్వక, ఓపెన్ సోర్స్ ప్రాజెక్ట్ మరియు కమ్యూనిటీ!
<br/>
## ప్రారంభించడం
### లోకల్ డెవలప్మెంట్
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
ఇది http://puter.localhost:4100 (లేదా తదుపరి అందుబాటులో ఉన్న పోర్ట్) వద్ద పుటర్ని ప్రారంభిస్తుంది.
ఇది పని చేయకపోతే, దీని కోసం [మొదటి రన్ సమస్యలు](./doc/first-run-issues.md) చూడండి
మీకు ఏవైనా సందేహాలు ఉంటే మీకు సహాయం చేయడానికి మేము ఎల్లప్పుడూ సంతోషిస్తాము. అడగడానికి సంకోచించకండి!
<br/>
## లైసెన్సు
ఈ రిపోజిటరీ, దాని మొత్తం కంటెంట్లు, ఉప-ప్రాజెక్ట్లు, మాడ్యూల్స్ మరియు కాంపోనెంట్లతో సహా, [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) కింద లైసెన్స్ని కలిగి ఉంటుంది. . ఈ రిపోజిటరీలో చేర్చబడిన థర్డ్-పార్టీ లైబ్రరీలు వాటి స్వంత లైసెన్స్లకు లోబడి ఉండవచ్చు.
<h3 align="center"><img width="80" alt="Puter.com, The Personal Cloud Computer: All your files, apps, and games in one place accessible from anywhere at any time." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center"><img width="80" alt="Puter.com, Kişisel Bulut Bilgisayar: Tüm dosyalarınız, uygulamalarınız ve oyunlarınız her zaman her yerden erişilebilen tek bir yerde." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">İnternet İşletim Sistemi! Ücretsiz, Açık Kaynaklı ve Kendi Kendine Barındırılabilir</h3>
Puter, zengin özelliklere sahip, son derece hızlı ve son derece genişletilebilir olacak şekilde tasarlanmış gelişmiş, açık kaynaklı bir internet işletim sistemidir. Puter şu şekilde kullanılabilir:
- Tüm dosyalarınızı, uygulamalarınızı ve oyunlarınızı tek bir güvenli yerde tutmak için gizlilik öncelikli bir kişisel bulut, her yerden her zaman erişilebilir.
- Web siteleri, web uygulamaları ve oyunlar oluşturmak ve yayınlamak için bir platform.
- Yeni bir arayüz ve güçlü özelliklerle Dropbox, Google Drive, OneDrive vb. uygulamalara bir alternatif.
- Sunucular ve iş istasyonları için bir uzak masaüstü ortamı.
- Web geliştirme, bulut bilişim, dağıtık sistemler ve çok daha fazlası hakkında bilgi edinmek için dost canlısı, açık kaynaklı bir proje ve topluluk!
<br/>
## Başlarken
### 💻 Yerel Geliştirme
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
Bu, Puter'ı http://puter.localhost:4100 adresinde (veya bir sonraki kullanılabilir portta) başlatacaktır.
Sorularınız varsa size her zaman yardımcı olmaktan mutluluk duyarız. Sormaktan çekinmeyin!
<br/>
## Lisans
Bu depo, tüm içeriği, alt projeleri, modülleri ve bileşenleri dahil olmak üzere, aksi açıkça belirtilmedikçe [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) altında lisanslanmıştır. Bu depoda yer alan üçüncü taraf kütüphaneler kendi lisanslarına tabi olabilir.
<h3 align="center"><img width="80" alt="Puter.com, The Personal Cloud Computer: Всі ваші файли, додатки та ігри в одному місці, доступні з будь-якого куточка світу в будь-який час." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">Інтернет ОС! Безкоштовна, відкрита та self-hosted.</h3>
<p align="center">
<img alt="Розмір репозиторію на GitHub" src="https://img.shields.io/github/repo-size/HeyPuter/puter"> <img alt="Остання версія на GitHub" src="https://img.shields.io/github/v/release/HeyPuter/puter?label=latest%20version"> <img alt="Ліцензія GitHub" src="https://img.shields.io/github/license/HeyPuter/puter">
Puter — це просунута, інтернет-ОС, з відкритим кодом, створена для того, щоб бути багатофункціональною, надзвичайно швидкою та розширюваною. Puter може використовуватися як:
- Приватний хмарний сервіс для збереження всіх ваших файлів, додатків і ігор у безпечному місці, доступному в будь-який час з будь-якого місця.
- Платформа для створення та публікації вебсайтів, вебдодатків і ігор.
- Альтернатива Dropbox, Google Drive, OneDrive і тд, з свіженьким інтерфейсом та потужними функціями.
- Віддалене робоче середовище для серверів і робочих станцій.
- Дружній, відкритий проєкт та спільнота для вивчення веброзробки, хмарних обчислень, розподілених систем і багато іншого!
<br/>
## Початок роботи
### Локальна розробка
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
Це запустить Puter на http://puter.localhost:4100 (або на наступному доступному порті).
Ми завжди готові допомогти Вам з будь-якими питаннями, що можуть виникнути. Не соромтеся ставити нам питання!
<br/>
## License
Цей репорзиторій, включаючи увесь його контент, дочірні проєкти, модулі, і компоненти, ліцензовано за [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt), якщо явно не вказано інше. Сторонні бібліотеки, включені в цей репозиторій, можуть підпадати під дію інших ліцензій.
<h3 align="center"><img width="80" alt="Puter.com, ذاتی کلاؤڈ کمپیوٹر: آپ کی تمام فائلیں، ایپس، اور کھیل ایک جگہ پر، کہیں سے بھی اور کسی بھی وقت قابل رسائی۔" src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">انٹرنیٹ OS! مفت، اوپن سورس، اور خود میزبان.</h3>
ایک جدید، اوپن سورس انٹرنیٹ آپریٹنگ سسٹم ہے جو کہ خصوصیات سے بھرپور، بہت تیز، اور انتہائی توسیع پذیر ہے۔ Puter
: کو استعمال کیا جا سکتا ہے Puter
- ایک پرائیویسی فرسٹ ذاتی کلاؤڈ کے طور پر تاکہ آپ کی تمام فائلیں، ایپس، اور کھیل ایک محفوظ جگہ پر رکھی جا سکیں، کہیں سے بھی اور کسی بھی وقت قابل رسائی ہوں۔
- ویب سائٹس، ویب ایپس، اور کھیل بنانے اور شائع کرنے کے لئے ایک پلیٹ فارم کے طور پر۔
- وغیرہ کا متبادل، نئے انٹرفیس اور طاقتور خصوصیات کے ساتھ۔ Dropbox، Google Drive، OneDrive
- سرورز اور ورک اسٹیشنز کے لیے ایک ریموٹ ڈیسک ٹاپ ماحول کے طور پر۔
- ویب ڈویلپمنٹ، کلاؤڈ کمپیوٹنگ، تقسیم شدہ نظاموں، اور بہت کچھ سیکھنے کے لیے ایک دوستانہ، اوپن سورس پروجیکٹ اور کمیونٹی!
<br/>
## شروع کرنے کا طریقہ
### 💻 مقامی ترقی
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
یہ Puter کو http://puter.localhost:4100 (یا اگلے دستیاب پورٹ) پر لانچ کرے گا۔
ہم ہمیشہ آپ کی مدد کے لیے خوش ہیں۔ سوالات پوچھنے میں ہچکچاہٹ نہ کریں
!
<br/>
## لائسنس
اس ریپوزٹری، بشمول اس کے تمام مواد، ذیلی پروجیکٹس، ماڈیولز، اور کمپوننٹس، کو [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) کے تحت لائسنس کیا گیا ہے جب تک کہ واضح طور پر کہیں اور نہ کہا گیا ہو۔ اس ریپوزٹری میں شامل تھرڈ پارٹی لائبریریاں اپنی لائسنس کے تابع ہو سکتی ہیں۔
<h3 align="center"><img width="80" alt="Puter.com, Máy Tính Đám Mây Cá Nhân: Tất cả các tệp, ứng dụng, và trò chơi của bạn ở một nơi, có thể truy cập từ bất cứ đâu vào bất kỳ lúc nào." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">Hệ điều hành Internet! Miễn phí, Mã nguồn mở và Có thể tự lưu trữ.</h3>
<p align="center">
<img alt="Kích thước repo GitHub" src="https://img.shields.io/github/repo-size/HeyPuter/puter"> <img alt="Phiên bản phát hành GitHub" src="https://img.shields.io/github/v/release/HeyPuter/puter?label=Phi%C3%AAn%20b%E1%BA%A3n%20ph%C3%A1t%20h%C3%A0nh%20GitHub"> <img alt="Giấy phép GitHub" src="https://img.shields.io/github/license/HeyPuter/puter">
</p>
<p align="center">
<a href="https://puter.com/"><strong>« DEMO TRỰC TIẾP »</strong></a>
Puter là một hệ điều hành internet tiên tiến, mã nguồn mở được thiết kế để có nhiều tính năng, tốc độ vượt trội và khả năng mở rộng cao. Puter có thể được sử dụng như:
- Một đám mây cá nhân ưu tiên quyền riêng tư để lưu trữ tất cả các tệp, ứng dụng và trò chơi của bạn ở một nơi an toàn, có thể truy cập từ bất cứ đâu, bất cứ lúc nào.
- Một nền tảng để xây dựng và xuất bản các trang web, ứng dụng web và trò chơi.
- Một sự thay thế cho Dropbox, Google Drive, OneDrive, v.v. với giao diện mới mẻ và nhiều tính năng mạnh mẽ.
- Một môi trường máy tính từ xa cho các máy chủ và máy trạm.
- Một dự án thân thiện, mã nguồn mở và cộng đồng để học hỏi về phát triển web, điện toán đám mây, hệ thống phân tán và nhiều hơn nữa!
<br/>
## Bắt Đầu
## 💻 Phát Triển Cục Bộ
```bash
Copy code
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
Điều này sẽ khởi chạy Puter tại http://puter.localhost:4100 (hoặc cổng kế tiếp có sẵn).
Puter có sẵn dưới dạng dịch vụ lưu trữ tại [**puter.com**](https://puter.com).
<br/>
## Yêu Cầu Hệ Thống
- **Hệ Điều Hành:** Linux, macOS, Windows
- **RAM:** Tối thiểu 2GB (Khuyến nghị 4GB)
- **Dung Lượng Ổ Cứng:** Còn trống 1GB
- **Node.js:** Phiên bản 16+ (Khuyến nghị phiên bản 22+)
- **npm:** Phiên bản ổn định mới nhất
<br/>
## Hỗ Trợ
Kết nối với các nhà bảo trì và cộng đồng thông qua các kênh sau:
- Báo cáo lỗi hoặc yêu cầu tính năng? Vui lòng mở một vấn đề.
- Discord: discord.com/invite/PQcx7Teh8u
- X (Twitter): x.com/HeyPuter
- Reddit: reddit.com/r/puter/
- Mastodon: mastodon.social/@puter
- Vấn đề bảo mật? security@puter.com
- Email các nhà bảo trì tại hi@puter.com
Chúng tôi luôn sẵn sàng giúp đỡ bạn với bất kỳ câu hỏi nào bạn có. Đừng ngần ngại hỏi!
<br/>
## Giấy Phép
Kho lưu trữ này, bao gồm tất cả nội dung, dự án con, mô-đun và thành phần của nó, được cấp phép theo [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt), trừ khi được tuyên bố rõ ràng khác. Các thư viện của bên thứ ba được bao gồm trong kho lưu trữ này có thể phải tuân theo các giấy phép riêng của chúng.
@@ -124,6 +124,18 @@ The GUI is a single page application (SPA) and as best practice any route under
In other words, consider the routes above as "reserved" for Puter.
### Publish My Website
Right-click anywhere on the desktop to display options
From the options menu, select "New".
Then, choose "Folder".
Give the folder a name according to your preference.
After creating the folder:
Right-click on the folder.
Select the option "Publish as Website".
### Best Practices
- The `title` tags and meta tags (`<title></title>`, `<meta property="og:title"`, `<meta name="twitter:title"`, ...) should be dynamically set by the server. For example, if the URL is of an app (e.g. `https://puter.com/app/editor`) the `title` tags and meta tags should contain the app's title rather than the generic Puter title.
Ensure the hosting device has a static IP address to prevent potential connectivity issues due to IP changes. This setup will enable seamless access to Puter and its services across your local network.
### Using Hosts Files
The hosts file is a straightforward way to map domain names to IP addresses on individual devices. It's simple to set up but requires manual changes on each device that needs access to the domains.
#### Windows
1. Open Notepad as an administrator.
2. Open the file located at `C:\Windows\System32\drivers\etc\hosts`.
3. Add lines for your domain and subdomain with the server's IP address, in the
following format:
```
192.168.1.10 puter.local
192.168.1.10 api.puter.local
```
#### For macOS and Linux:
1. Open a terminal.
2. Edit the hosts file with a text editor, e.g., `sudo nano /etc/hosts`.
3. Add lines for your domain and subdomain with the server's IP address, in the
following format:
```
192.168.1.10 puter.local
192.168.1.10 api.puter.local
```
4. Save and exit the editor.
### Using Router Configuration
Some routers allow you to add custom DNS rules, letting you configure domain names network-wide without touching each device.
1. Access your router’s admin interface (usually through a web browser).
2. Look for DNS or DHCP settings.
3. Add custom DNS mappings for `puter.local` and `api.puter.local` to the hosting device's IP address.
4. Save the changes and reboot the router if necessary.
This method's availability and steps may vary depending on your router's model and firmware.
### Using Local DNS
Setting up a local DNS server on your network allows for flexible and scalable domain name resolution. This method works across all devices automatically once they're configured to use the DNS server.
#### Options for DNS Software:
- **Pi-hole**: Acts as both an ad-blocker and a DNS server. Ideal for easy setup and maintenance.
- **BIND9**: Offers comprehensive DNS server capabilities for complex setups.
- **dnsmasq**: Lightweight and suitable for smaller networks or those new to running a DNS server.
**contributors note:** feel free to add any software you're aware of
which might help with this to the list. Also, feel free to add instructions here for specific software; our goal is for Puter to be easy to setup with tools you're already familiar with.
#### General Steps:
1. Choose and install DNS server software on a device within your network.
2. Configure the DNS server to resolve `puter.local` and `api.puter.local` to the IP address of your Puter hosting device.
3. Update your router's DHCP settings to distribute the DNS server's IP address to all devices on the network.
By setting up a local DNS server, you gain the most flexibility and control over your network's domain name resolution, ensuring that all devices can access Puter and its API without manual configuration.
## Production Configuration
Please note the self-hosting feature is still in alpha and a public production
deployment is not recommended at this time. However, if you wish to host
publicly you can do so following the same steps you normally would to configure
a domain name and ensuring the `api` subdomain points to the server as well.
> The self-hosted version of Puter is currently in alpha stage and should not be used in production yet. It is under active development and may contain bugs, other issues. Please exercise caution and use it for testing and evaluation purposes only.
### Self-Hosting Differences
Currently, the self-hosted version of Puter is different in a few ways from [Puter.com](https://puter.com):
- There is no built-in way to access apps from puter.com (see below)
- Several "core" apps are missing, such as **Code** or **Draw**
- Some assets are different
Work is ongoing to improve the **App Center** and make it available on self-hosted.
Until then, it is still possible to add apps using the **Dev Center** app.
<br/>
## Configuration
Running the server will generate a configuration file in one of these locations:
-`config/config.json` when [Using Docker](#using-docker)
-`volatile/config/config.json` in [Local Development](#local-development)
-`/etc/puter/config.json` on a server (or within a Docker container)
### Domain Name
To access Puter on your device, you can simply go to the address printed in
the server console (usually `puter.localhost:4100`).
To access Puter from another device, a domain name must be configured, as well as
an `api` subdomain. For example, `example.local` might be the domain name pointing
to the IP address of the server running puter, and `api.example.com` must point to
this address as well. This domain must be specified in the configuration file
(usually `volatile/config/config.json`) as well.
See [domain configuration](./domains.md) for more information.
### Configure the Port
- You can specify a custom port by setting `http_port` to a desired value
- If you're using a reverse-proxy such as nginx or cloudflare, you should
also set `pub_port` to the public (external) port (usually `443`)
- If you have HTTPS enabled on your reverse-proxy, ensure that
`protocol` in config.json is set accordingly
### Default User
By default, Puter will create a user called `default_user`.
This user will have a randomly generated password, which will be printed
in the development console.
A warning will persist in the dev console until this user's
password is changed. Please login to this user and change the password as
Loaded 100 of 1620 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.