Giter Site home page Giter Site logo

Comments (41)

dario-99 avatar dario-99 commented on June 7, 2024 47

Actually found a way to inject the js function by injecting the script in the .asar file of Notion.
First i installed asar from my package manager to handle the archived js files

sudo pacman -S asar

In the developer console i discovered the js file path
Screenshot_20230728_122031
In my pc the folder was

/opt/Notion/resources/app.asar

Made a backup

sudo cp app.asar app.asar.bak

Extracted the content with asar

sudo asar extract app.asar app
cd ./app

Inject the js script into the renderer/preload.js file
Then repack the app folder with asar

sudo asar pack ./app app.asar

and it should work! I choose preload.js randomly i think any js file in the source tab of the developer console should work.
Not a js developer by any means, just went with common sense, if i made any mistake let me now

from notion-repackaged.

dario-99 avatar dario-99 commented on June 7, 2024 45

Searching the web i found a partial solution by imlementing manually the .at function:
Press alt and in the View menu open the developer console.
Screenshot_20230728_115105
Paste in the console the following function (Found here):

function at(n) {
    // ToInteger() abstract op
    n = Math.trunc(n) || 0;
    // Allow negative indexing from the end
    if (n < 0) n += this.length;
    // OOB access is guaranteed to return undefined
    if (n < 0 || n >= this.length) return undefined;
    // Otherwise, this is just normal property access
    return this[n];
}

const TypedArray = Reflect.getPrototypeOf(Int8Array);
for (const C of [Array, String, TypedArray]) {
    Object.defineProperty(C.prototype, "at",
                          { value: at,
                            writable: true,
                            enumerable: false,
                            configurable: true });
}

Screenshot_20230728_115149
As you can see the / menu works, also it types ':' correctly now.
Screenshot_20230728_115235
Hope it helps.

from notion-repackaged.

lhecht avatar lhecht commented on June 7, 2024 9

Is this issue ever going to be fixed? This is literally making Notion unusable for me on Windows 10, so now I'm stuck looking for a replacement for this app.

This is what I did on Windows 11, source is a comment by @dragonwocky on the Discord server (I have no idea if all these steps are necessary, someone please correct me if needed):

0. Close Notion Enhanced, if needed go to Task Manager and make sure all its processes are closed.

1. install node.js

2. open cmd as administrator and paste `npx @electron/asar extract "%localappdata%\Programs\Notion Enhanced\resources\app.asar" "%localappdata%\Programs\Notion Enhanced\resources\app"` and hit enter

3. type win+R, paste `%localappdata%\Programs\Notion Enhanced\resources\` and hit enter

4. in that folder, rename `app.asar` to `app.asar.bak`

5. search the same folder for `preload.js` (it's somewhere in the subfolders) and open it

6. paste the code from [this comment](https://github.com/notion-enhancer/notion-repackaged/issues/116#issuecomment-1782243815)  (the one that starts with `(function __polyfill_2() {`) at the end of `preload.js` and save

7. open Notion Enhanced, it should be fixed.

This helped me a lot, but I had to add the semicolon explained here: #116 (comment)

from notion-repackaged.

dario-99 avatar dario-99 commented on June 7, 2024 7

It happens also with my arch installation, both with Notion-app and notion-app-enhanced from the AUR.
When typing '/' the developer console prints this error:

app-f1468bbbf91e50c2009a.js:1 Uncaught TypeError: y.at is not a function
    at Object.b (app-f1468bbbf91e50c2009a.js:1)
    at ge (app-f1468bbbf91e50c2009a.js:1)
    at Pe (app-f1468bbbf91e50c2009a.js:1)
    at Object.Te (app-f1468bbbf91e50c2009a.js:1)
    at perform (app-f1468bbbf91e50c2009a.js:1)
    at app-f1468bbbf91e50c2009a.js:1
    at Function.withListenerIgnored (app-f1468bbbf91e50c2009a.js:1)
    at Module.ve (app-f1468bbbf91e50c2009a.js:1)
    at pe.handleMutation (app-f1468bbbf91e50c2009a.js:1)
    at b.handleMutation (app-f1468bbbf91e50c2009a.js:1)
    at b.delegateMutation (app-f1468bbbf91e50c2009a.js:1)
    at app-f1468bbbf91e50c2009a.js:1
    at app-f1468bbbf91e50c2009a.js:1
    at Set.forEach (<anonymous>)
    at B.emitUpdate (app-f1468bbbf91e50c2009a.js:1)
    at B.handleMutations (app-f1468bbbf91e50c2009a.js:1)
    at g.onMutations (app-f1468bbbf91e50c2009a.js:1)
    at g.stopObservingAndHandleMutations (app-f1468bbbf91e50c2009a.js:1)
    at MutationObserver.observer (app-f1468bbbf91e50c2009a.js:1)

Similiar error is printed when typing ':' occurs.
Using the web app instead seems to work flawlessly.

from notion-repackaged.

Kaspary avatar Kaspary commented on June 7, 2024 7

The @dario-99 answer works for me!

I'm currently using Pop OS 22.04 (Ubuntu). To install the asar package, I use NPM with the following command:

npm install -g asar

Once it's installed, I proceed to unpack and pack the app.asar file. I prefer moving the app.asar to my user workspace, avoiding the need to configure my root user. After packing, I return the app.asar to notion path - /opt/Notion/resources/.

from notion-repackaged.

dragonwocky avatar dragonwocky commented on June 7, 2024 3

It's a bug related to the desktop app not being updated for a while, rather than something specifically caused by the notion-enhancer (which is why it doesn't happen when using the notion-enhancer as a browser extension). Thanks for reporting it here.

There's no simple fix-all yet, but as a partial workaround: you can use Ctrl + / (or ⌘ + / on macOS) to trigger the slash menu. Alternatively, you can follow @dario-99's instructions below to manually polyfill the Array.at method in the Notion app.

from notion-repackaged.

hanshou101 avatar hanshou101 commented on June 7, 2024 3

From my point of view, based on my existing front-end knowledge, I would try to make a temporary fix like this (to get myself back to work quickly).

1. Upgrade the 【Chromium】 version used by 【Electron Application】, and then repackage an 【Electron Application】.

But the problem I encountered is that I don't have the source code to build, so I can't complete the repackaging by replacing the 【electron version】 in 【package.json】.

2. By loading a 【polyfill.js】 script before 【app-[hash].js】 of 【Notion】 is loaded, the compatibility support for 【Array.at()】 syntax is completed.

So that this exception error can be bypassed very well. (Or, I can write a 【Array.prototype.at = function(idx){ ... }】 by myself; it is not a complicated thing)

The problem I encountered here is that I don't have a good means of inserting when 【html is loaded】. If it is in the Chrome browser, I can use 【TamperMonkey】 or other plug-ins, or even write a 【DevTools - Sources - Overrides】 to achieve it.

But in 【Electron】, there is no support for 【extended plug-ins】; moreover, I cannot see the existence of 【app-[hash].js】 in 【DevTools —— Sources】. (It was placed in 【DevTools —— Application —— Scripts】??? Is it just me?)

3.There are some other alternatives, such as using 【BurpSuite】 for network capture, and inserting the loading <script> of 【polyfill.js】 when 【html】 of 【Notion】 is loaded.

But that seems a bit too much trouble—I need to keep 【BurpSuite】 open all the time.


To sum up, here are some of my current discoveries and attempts.

from notion-repackaged.

dario-99 avatar dario-99 commented on June 7, 2024 3

@hanshou101 Thanks!
Couldn't have done it without your previous discoveries, thank you so much for your contribution

from notion-repackaged.

hanshou101 avatar hanshou101 commented on June 7, 2024 2

After my personal experimentation, I found out that the 【 Array.at() 】 API is available in the latest version of the 【Chrome browser】; but it is not supported by the 【Chromium】 engine that comes with 【Electron】.

That is, the 【Chromium】 engine of 【Notion】's 【Electron】 currently uses an older JS version; it cannot recognize the new version of the API syntax of the 【js file】 distributed by 【Notion】.

from notion-repackaged.

supermavster avatar supermavster commented on June 7, 2024 2

Thanks @dario-99 ;) it worked!

from notion-repackaged.

kidonng avatar kidonng commented on June 7, 2024 2

👋 For anyone on Linux, I have built an updated AppImage repack of Notion: https://github.com/kidonng/notion-appimage

It is inspired by notion-repackaged but with up-to-date Electron that fixes many issues, including this one.

from notion-repackaged.

acerspyro avatar acerspyro commented on June 7, 2024 2

See #116 (comment)

I wrote an automated patcher for Linux.

from notion-repackaged.

archetyped avatar archetyped commented on June 7, 2024 2

Is this issue ever going to be fixed? This is literally making Notion unusable for me on Windows 10, so now I'm stuck looking for a replacement for this app.

@matt-derrick you do realize that this is not the official Notion app, right? It's an unofficial mod that @dragonwocky has shared with the community.

If you're "stuck looking for a replacement", perhaps consider the official desktop app.

from notion-repackaged.

pinetreemoonlight avatar pinetreemoonlight commented on June 7, 2024 2

Is this issue ever going to be fixed? This is literally making Notion unusable for me on Windows 10, so now I'm stuck looking for a replacement for this app.

This is what I did on Windows 11, source is a comment by @dragonwocky on the Discord server (I have no idea if all these steps are necessary, someone please correct me if needed):

  1. Close Notion Enhanced, if needed go to Task Manager and make sure all its processes are closed.
  2. install node.js
  3. open cmd as administrator and paste npx @electron/asar extract "%localappdata%\Programs\Notion Enhanced\resources\app.asar" "%localappdata%\Programs\Notion Enhanced\resources\app" and hit enter
  4. type win+R, paste %localappdata%\Programs\Notion Enhanced\resources\ and hit enter
  5. in that folder, rename app.asar to app.asar.bak
  6. search the same folder for preload.js (it's somewhere in the subfolders) and open it
  7. paste the code from this comment (the one that starts with (function __polyfill_2() {) at the end of preload.js and save
  8. open Notion Enhanced, it should be fixed.

from notion-repackaged.

hanshou101 avatar hanshou101 commented on June 7, 2024 1

Inject the js script into the renderer/preload.js file Then repack the app folder with asar

sudo asar pack ./app app.asar

and it should work! I choose preload.js randomly i think any js file in the source tab of the developer console should work. Not a js developer by any means, just went with common sense, if i made any mistake let me now

@dario-99

Awesome Solution !

Brother, you accomplished what I always wanted to do. I have read a lot of Electron reverse analysis articles before, but I ignored 【the key details that are correctly used by you now】! Your solution filled my dead end and inspired me too!

from notion-repackaged.

archetyped avatar archetyped commented on June 7, 2024 1

Workaround works on MacOS as well.

Thanks @dario-99 and @hanshou101 for your contributions.

from notion-repackaged.

RHeinig avatar RHeinig commented on June 7, 2024 1

Actually found a way to inject the js function by injecting the script in the .asar file of Notion. First i installed asar from my package manager to handle the archived js files

sudo pacman -S asar

In the developer console i discovered the js file path Screenshot_20230728_122031 In my pc the folder was

/opt/Notion/resources/app.asar

Made a backup

sudo cp app.asar app.asar.bak

Extracted the content with asar

sudo asar extract app.asar app
cd ./app

Inject the js script into the renderer/preload.js file Then repack the app folder with asar

sudo asar pack ./app app.asar

and it should work! I choose preload.js randomly i think any js file in the source tab of the developer console should work. Not a js developer by any means, just went with common sense, if i made any mistake let me now

As a macOS noobie, I got it to work with a few tweaks, I'll write those down for docs when someone as noobie with mac as me stumbles upon this:

  1. Make sure you are opening the terminal at the base layer (for me it opens at Users/myname, it should be at the base of your mac, basically do cd .. twice and it's fine)
  2. My command was with file extensions + Contents app, and looked like this:
    npx @electron/asar extract "/Applications/Notion Enhanced.app/Contents/resources/app.asar" "/Applications/Notion Enhanced.app/Contents/resources/app"

from notion-repackaged.

orribu avatar orribu commented on June 7, 2024 1

That's another +1 for the @dario-99 answer! Thanks a ton!

from notion-repackaged.

dario-99 avatar dario-99 commented on June 7, 2024 1

First of all, thanks @dario-99 for the answer! However, I'm struggling to understand how exactly do I "inject the js script into the renderer/preload.js". I've tried to paste the code into the file with a text editor, but I don't know exactly where to place it. Could you/someone explain me how to proceed and help a n00b? :P

@BrasileroPeDuro At the end of the file will be fine, let me now if it worked.

from notion-repackaged.

matt-derrick avatar matt-derrick commented on June 7, 2024 1

Is this issue ever going to be fixed? This is literally making Notion unusable for me on Windows 10, so now I'm stuck looking for a replacement for this app.

from notion-repackaged.

matt-derrick avatar matt-derrick commented on June 7, 2024 1

Is this issue ever going to be fixed? This is literally making Notion unusable for me on Windows 10, so now I'm stuck looking for a replacement for this app.

@matt-derrick you do realize that this is not the official Notion app, right? It's an unofficial mod that @dragonwocky has shared with the community.

If you're "stuck looking for a replacement", perhaps consider the official desktop app.

I apologize, I did not realize that. I am using the vanilla version of notion and having this same issue; I came across it in an internet search and should have been paying more attention.

from notion-repackaged.

ChinaNuke avatar ChinaNuke commented on June 7, 2024

Same problem on my ArchLinux. Unable to type / and :. When I'm typing the two keys they behave like the right arrow, just moving the cursor forward.
I'm using notion-app 2.0.18-1.

from notion-repackaged.

dolikemedo avatar dolikemedo commented on June 7, 2024

Thank you very much @dario-99 , @hanshou101 !! :-)

from notion-repackaged.

liqnuks avatar liqnuks commented on June 7, 2024

Thanks a lot @dario-99 and @hanshou101 ! That's awesome.

from notion-repackaged.

dario-99 avatar dario-99 commented on June 7, 2024

@giorgioindelicato11 Look here
Maybe you can extract the content of the appimage, modify the js file and rebuild the appimage with the appimagetool.
There's also this thread on superuser which may help you.
Let us know if you found a solution, it may be useful to other appimage user

from notion-repackaged.

BrasileroPeDuro avatar BrasileroPeDuro commented on June 7, 2024

Actually found a way to inject the js function by injecting the script in the .asar file of Notion. First i installed asar from my package manager to handle the archived js files

sudo pacman -S asar

In the developer console i discovered the js file path Screenshot_20230728_122031 In my pc the folder was

/opt/Notion/resources/app.asar

Made a backup

sudo cp app.asar app.asar.bak

Extracted the content with asar

sudo asar extract app.asar app
cd ./app

Inject the js script into the renderer/preload.js file Then repack the app folder with asar

sudo asar pack ./app app.asar

and it should work! I choose preload.js randomly i think any js file in the source tab of the developer console should work. Not a js developer by any means, just went with common sense, if i made any mistake let me now

First of all, thanks @dario-99 for the answer! However, I'm struggling to understand how exactly do I "inject the js script into the renderer/preload.js". I've tried to paste the code into the file with a text editor, but I don't know exactly where to place it. Could you/someone explain me how to proceed and help a n00b? :P

from notion-repackaged.

BrasileroPeDuro avatar BrasileroPeDuro commented on June 7, 2024

First of all, thanks @dario-99 for the answer! However, I'm struggling to understand how exactly do I "inject the js script into the renderer/preload.js". I've tried to paste the code into the file with a text editor, but I don't know exactly where to place it. Could you/someone explain me how to proceed and help a n00b? :P

@BrasileroPeDuro At the end of the file will be fine, let me now if it worked.

It worked perfectly! Thanks a lot!!

from notion-repackaged.

adriandelgg avatar adriandelgg commented on June 7, 2024

Similar issue on my end.
notion-enhancer/notion-enhancer#807

from notion-repackaged.

lietu avatar lietu commented on June 7, 2024

I also ran into this a while ago on the AUR notion-app-enhanced package. Based on the comments here I found that this fixes it:

sudo pacman -S asar
cd "/opt/Notion Enhanced/resources"
sudo asar extract app.asar app

cd app
echo '"use strict;"' | sudo tee preload.new.js
echo 'function at(n) { n = Math.trunc(n) || 0; if (n < 0) n += this.length; if (n < 0 || n >= this.length) return undefined; return this[n]; }; const TypedArray = Reflect.getPrototypeOf(Int8Array); for (const C of [Array, String, TypedArray]) { Object.defineProperty(C.prototype, "at", {value: at, writable: true, enumerable: false, configurable: true }); }; console.log("Applied .at polyfill")' | sudo tee -a preload.new.js
cat renderer/preload.js | tail -n+2 | sudo tee -a preload.new.js
sudo mv preload.new.js renderer/preload.js
cd ..

sudo rm app.asar
sudo asar pack ./app app.asar
sudo rm -rf app

from notion-repackaged.

AmodeusR avatar AmodeusR commented on June 7, 2024

Actually found a way to inject the js function by injecting the script in the .asar file of Notion. First i installed asar from my package manager to handle the archived js files

sudo pacman -S asar

In the developer console i discovered the js file path Screenshot_20230728_122031 In my pc the folder was

/opt/Notion/resources/app.asar

Made a backup

sudo cp app.asar app.asar.bak

Extracted the content with asar

sudo asar extract app.asar app
cd ./app

Inject the js script into the renderer/preload.js file Then repack the app folder with asar

sudo asar pack ./app app.asar

and it should work! I choose preload.js randomly i think any js file in the source tab of the developer console should work. Not a js developer by any means, just went with common sense, if i made any mistake let me now

Isn't it possible to share the fixed file? I don't really want to install unnecessary things in my PC.

from notion-repackaged.

tkdemd1234 avatar tkdemd1234 commented on June 7, 2024

20231030_160723
After unzipping the app.asar file, I found the preload.js file, what should I do here after that?

from notion-repackaged.

dolikemedo avatar dolikemedo commented on June 7, 2024

@tkdemd1234 Try and inject the function provided by @dario-99 into the end of file

from notion-repackaged.

kotobuki09 avatar kotobuki09 commented on June 7, 2024

Thank you for the solution. But this solution somehow breaks all other enhanced features for me. Even the theme is not apply after this fix

from notion-repackaged.

esmewang27 avatar esmewang27 commented on June 7, 2024

2. app.asar

I'm even more of a noob than you are. I'm a Mac OS user & while I was previously been able to fix the : and / problems, the new "window comes up, gray thing spins" problem has been beyond me.

I've been recommended to not try anything with sudo (though I did anyway out of desperation) because I have zero idea how to code.

What I did do was put the following code in the Terminal:

function at(n) {
// ToInteger() abstract op
n = Math.trunc(n) || 0;
// Allow negative indexing from the end
if (n < 0) n += this.length;
// OOB access is guaranteed to return undefined
if (n < 0 || n >= this.length) return undefined;
// Otherwise, this is just normal property access
return this[n];
}

const TypedArray = Reflect.getPrototypeOf(Int8Array);
for (const C of [Array, String, TypedArray]) {
Object.defineProperty(C.prototype, "at",
{ value: at,
writable: true,
enumerable: false,
configurable: true });
}

And then I put the following in the Developer Tools:

npx @electron/asar extract "/Applications/Notion Enhanced.app/Contents/resources/app.asar" "/Applications/Notion Enhanced.app/Contents/resources/app"

All of this, in the end, did not help at all.

At this point, I'm really desperate to have the Notion Enhancer app back--I'm willing to give someone money to explain it to me like I'm a third-grader. And if I just have to give up on it, I guess I'll wait until a more substantial fix comes. I did already spend over three hours on this, to no avail.

from notion-repackaged.

dragonwocky avatar dragonwocky commented on June 7, 2024

What I did do was put the following code in the Terminal:

And then I put the following in the Developer Tools:

@esmewang27 you've got those the wrong way around, so I'm not surprised things didn't work for you. You shouldn't be running either of those snippets in either of those places. You have two options:

  • For a fix that will only last until you next restart the app, you can paste the code that starts with function at(n) into the Developer Tools - not the Terminal.

  • For a more permanent fix:

    1. Quit the app fully.
    2. Run the command that starts with npx in the Terminal - not the Developer Tools.
    3. Go to the /Applications/Notion Enhanced.app/Contents/resources folder in Finder.
    4. Rename the app.asar file to app.asar.bak.
    5. Go to the /Applications/Notion Enhanced.app/Contents/resources/app/renderer folder in Finder.
    6. Open the preload.js file, go to the end and paste in the code that starts with function at(n) on a new line. Do not delete anything, just add the code to the end of the file and save it.
    7. Now, when you open the app, this particular problem should be fixed.

However, please note that this will not fix the issue described in #116. You can follow the same steps to fix that issue, but the code to paste into the file in step 6 is different. You will probably need to paste the code from both issues into that file for things to start working as normal.

from notion-repackaged.

esmewang27 avatar esmewang27 commented on June 7, 2024

Hi @dragonwocky. I really appreciate your patience with an idiot like me who knows absolutely nothing about this (and greatly appreciates what you've created for us).

This seems to have solved the issue. I am so relieved and grateful—is there some kind of tip jar that you have that I can contribute to?

from notion-repackaged.

dragonwocky avatar dragonwocky commented on June 7, 2024

This does not seem to have done anything to fix the #116 problem, although I might be doing something else completely stupid, and I truly, truly appreciate your help.

Hmm, can you show me what the output in the Notion DevTools console is?

from notion-repackaged.

esmewang27 avatar esmewang27 commented on June 7, 2024

@dragonwocky Oh, I edited the post because I ended up figuring out the problem myself. And I wanted to thank you! Do you have a tip jar or something I can put money in?

from notion-repackaged.

dragonwocky avatar dragonwocky commented on June 7, 2024

@esmewang27 glad you got it working! If it was a problem you think others may run into as well, it could be helpful to include your solution in the post for the next person who comes along 🙂

You can donate to me through my GitHub Sponsors profile: https://github.com/sponsors/dragonwocky

from notion-repackaged.

acerspyro avatar acerspyro commented on June 7, 2024

Is this issue ever going to be fixed? This is literally making Notion unusable for me on Windows 10, so now I'm stuck looking for a replacement for this app.

@dragonwocky is currently busy with exams, and is donating their free time to this project whenever the opportunity to do so arises.

If you'd like to help this issue along, please consider a donation to support them, it goes a long way ☺️

https://github.com/sponsors/dragonwocky/

from notion-repackaged.

archetyped avatar archetyped commented on June 7, 2024

I apologize, I did not realize that. I am using the vanilla version of notion and having this same issue; I came across it in an internet search and should have been paying more attention.

If you're using Notion's official app, I'd recommending ensuring that you're using the latest version by uninstalling the current app, downloading the latest build, and reinstall it.

from notion-repackaged.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.