Thanks atdre for the opening.
On this note, pentesting JavaScript applications has become very complex. Newer web architectures have essentially become containers. Now some would argue on the term(s) I use, but the idea remains straightforward - web apps now run in objects.
The impact on the way we scan and pentest apps is then greatly impacted. Simply, the usual web proxy approach just doesn't cut it anymore. From Burp to Zap, Charles, AppScan and many others - these tools are more and more limited when it comes to rich JavaScript apps including Angular, Node.js and many other libraries and architectures (front and back-end).
Especially true in the last year, we now have to use the web consoles in browsers and more modern tools and approaches as apps are running in the back-end and in the front-end only or mostly. We don't get that back and forth from the server and the client anymore - at least, less and less.
As JavaScript essentially runs in the client/user browser, I've seen augmentation in this reality during my lasts pentests (12-24 months). The more I try to intercept and play around with comms between both... the less I see and can do.
On this note, most of my processes needed to be "upgraded" and updated.
As such, I now most usually run recorded sessions with tools. One of this example is using the Burp recorder. In the last year it was greatly updated to enable the recording of web sessions and not only login sequences. Simply import.
This approach has the capacity for the tool to record a real user session (think selenium script) and then replay this session with the included data and "real-time" user and data flow.
Remember, as more complex JavaScript runs in the browser, the only way you will see the flow and related data and logic is within the web session itself! And from one session to another you may gain more perspective in the process. It's nuts, long and yes, very frustrating sometimes.
Yeah, at some point you'll see a comm leave for a back-end server or API but most of the logic and processing has been done in the browser (input, validation, construction, rules, variables, etc.).
This now means that we can't rely on a "simple" proxy or plugin for interceptions, manipulation or similar. Again, maybe you'll see the occasional comms going out, but not like we used to see.
So my biggest recommendation at this moment is this. Record, replay and reuse (wash, rinse and repeat) and stick to that browser web console (check versions, variables, functions and rules). And trust me, it will take time to understand the app flow, certainly longer than a simple interception.
We now have to dig deep in the JavaScript code and hope teams and tools will get updated with modern scanners as this is becoming a serious mission manually. What used to take a few hours may take a week now.
As most app I test - I don't know them. So I think the quick blackbox tests are a thing of the past. We now have to go much deeper in code and flow to get results.
Some links to help...
https://forum.portswigger.net/thread/burp-seems-not-able-to-crawl-html-in-angular-js-application-9b9a9a2b
https://forum.portswigger.net/thread/singe-page-application-built-using-angular-js-6-e9a88e65
https://blog.nvisium.com/angular-for-pentesters-part-2