Compare commits

...

2192 Commits

Author SHA1 Message Date
Gregory Schier
9c5479b206 Tweak font sizes 2025-12-22 14:40:18 -08:00
Gregory Schier
5f8902e57b Fix cookies not being persisted after HTTP requests (#328) 2025-12-22 10:58:03 -08:00
Gregory Schier
089c7e8dce Http response events (#326) 2025-12-21 14:34:37 -08:00
Gregory Schier
7e0aa919fb Immediate cancellation 2025-12-21 06:28:36 -08:00
Gregory Schier
5776bab288 Tweak response pane and refactor timings 2025-12-21 06:24:01 -08:00
Gregory Schier
6b52a0cbed Try fix tests on Windows 2025-12-20 14:48:23 -08:00
Gregory Schier
46933059f6 Split up HTTP sending logic (#320) 2025-12-20 14:10:55 -08:00
Gregory Schier
cfbfd66eef Reformat project 2025-12-13 08:10:12 -08:00
Gregory Schier
c20c0eff32 Update entitlements.plist for 1Password shared lib 2025-12-11 09:22:27 -08:00
Gregory Schier
9d40949043 Fix warning: unused variable: window on non-mac OSs 2025-12-11 07:18:31 -08:00
Gregory Schier
d435337f2a Don't strip symbols hotfix 2025-12-11 06:49:06 -08:00
Gregory Schier
a32145c054 Merge branch 'hotfix/2025.9.3' 2025-12-11 06:32:35 -08:00
Gregory Schier
e0f547b93f Update tauri 2025-12-11 06:32:14 -08:00
Gregory Schier
5d4268d6a1 Merge branch 'hotfix/2025.9.3' 2025-12-11 06:00:47 -08:00
Gregory Schier
0a3506f81e Also move defaultValue out 2025-12-11 05:59:40 -08:00
Gregory Schier
375b2287b7 Merge branch 'hotfix/2025.9.3' 2025-12-11 05:54:23 -08:00
Gregory Schier
e72c1e68e5 Unify 1Password field back to static name 2025-12-11 05:48:19 -08:00
Gregory Schier
3484db3371 Default cert to open when just added 2025-12-10 15:08:59 -08:00
Gregory Schier
c4b559f34b Support client certificates (#319) 2025-12-10 13:54:22 -08:00
Mikhail Mamontov
ef1ba9b834 fix(gRPC): Cache descriptor pools to avoid re-reflection; add manual “Refresh Schema” to force re-fetch (#317) 2025-12-09 15:35:35 -08:00
Jake Oliver
846f4d9551 Update 1Password template to support the new Desktop authentication method (#316) 2025-12-09 14:50:08 -08:00
Gregory Schier
4780bfe41f Fix curl import: decode Unicode escape sequences in $'...' strings (#318)
Co-authored-by: Claude <noreply@anthropic.com>
2025-12-09 14:15:39 -08:00
Gregory Schier
d0d01b3897 Update license check to use status instead of type 2025-12-09 14:12:13 -08:00
Gregory Schier
fc1e8baa23 Catch any 4XX error on refresh token failure
https://feedback.yaak.app/p/folders-oauth2-refresh-token-issue
2025-12-09 14:08:31 -08:00
Gregory Schier
d35116c494 Add license handling for expired licenses 2025-12-09 13:51:02 -08:00
gschier
1d257b365b Deploying to main from @ mountain-loop/yaak@1076d57e8a 🚀 2025-12-09 18:15:05 +00:00
Gregory Schier
1076d57e8a Remove unused funding model entries from FUNDING.yml 2025-12-09 10:14:19 -08:00
Gregory Schier
1c93d5775f Shorter titles when using native titlebar 2025-12-06 06:47:34 -08:00
Gregory Schier
7b78fac24e Fix native titlebar. Get menu ready for native Mac menus 2025-12-05 15:14:13 -08:00
Gregory Schier
6534b3f622 Debug Window 2025-12-05 17:37:54 -08:00
Gregory Schier
daba21fbca Couple small fixes for Windows 2025-12-05 10:18:21 -08:00
Gregory Schier
3b99ea1cad Try fixing titlebar thing for Windows 2025-12-05 10:03:54 -08:00
Gregory Schier
937d7aa72a Fix Git invokation on Windows (#313) 2025-12-05 09:22:34 -08:00
Gregory Schier
5bf7278479 Add setting to use native window titlebar (#312) 2025-12-05 09:15:48 -08:00
Gregory Schier
095af8cf4b Refresh query when plugins reload in useTemplateFunctionConfig hook 2025-12-02 08:07:53 -08:00
Gregory Schier
e1c1ecc34d Try fix quotes for Windows 2025-12-02 05:45:01 -08:00
Gregory Schier
6e4c167bfd Add beta warning banners to OAuth 1.0 and NTLM plugins 2025-12-01 09:26:55 -08:00
Gregory Schier
25d8357471 Merge remote-tracking branch 'origin/main' 2025-12-01 07:56:12 -08:00
Gregory Schier
8e00693af3 Fix JSON lint error location 2025-12-01 07:54:02 -08:00
gschier
079da67889 Deploying to main from @ mountain-loop/yaak@9ed3dacd28 🚀 2025-12-01 15:39:07 +00:00
Gregory Schier
9ed3dacd28 Fix dropdown menu keys
https://feedback.yaak.app/p/response-history-bug
2025-12-01 06:32:04 -08:00
Gregory Schier
ba6e64ef37 Explicit targets 2025-11-28 09:07:01 -08:00
Gregory Schier
d7a68c2d53 Fix Rust version 2025-11-28 09:04:59 -08:00
Gregory Schier
e8e1d9246e Try using window-latest for ARM build 2025-11-28 08:53:44 -08:00
Gregory Schier
a7574f2e5a Fix vendor scripts for arm 2025-11-28 08:16:24 -08:00
Gregory Schier
69f9661813 Upgrade @yaakapp/cli again 2025-11-28 07:49:54 -08:00
Gregory Schier
302b0a4747 Upgrade @yaakapp/cli 2025-11-28 07:10:27 -08:00
Gregory Schier
07f4696a2c Install wasm-pack from cargo for Windows ARM compat 2025-11-28 06:04:48 -08:00
Gregory Schier
2ddb1096df Try building Windows ARM too 2025-11-27 15:41:17 -08:00
Gregory Schier
0149355d66 Try fix xdg-mime missing on ARM 2025-11-27 14:10:13 -08:00
Gregory Schier
2e7749a883 Fix? 2025-11-27 13:53:50 -08:00
Gregory Schier
cd0e8c0bc2 Try arm linux builds 2025-11-27 13:47:58 -08:00
Gregory Schier
64e4e352a0 Fix package order 2025-11-27 13:46:30 -08:00
Gregory Schier
b512365f5a Oops, remove body too 2025-11-27 13:31:16 -08:00
Gregory Schier
13c84e3fb6 Add doNotEncodePath to aws4 plugin 2025-11-27 13:29:59 -08:00
Gregory Schier
8d1b17cac1 Add previewArgs support for template functions and enhance validation logic for form inputs 2025-11-27 12:55:39 -08:00
Gregory Schier
0c7034eefc Fix text cutting off on <Select/> 2025-11-27 06:22:29 -08:00
Gregory Schier
3ec236462f Merge remote-tracking branch 'origin/main'
# Conflicts:
#	src-web/components/MarkdownEditor.tsx
2025-11-26 14:12:46 -08:00
Gregory Schier
1b5ac6fc89 Some fixes 2025-11-26 14:10:02 -08:00
Gregory Schier
d356bac135 Fix icon and segmented control and dev icon 2025-11-26 11:22:10 -08:00
Gregory Schier
8a80e7b833 Add ability to conditionally disable auth (#309) 2025-11-26 11:05:07 -08:00
Gregory Schier
a1ae065d37 PR feedback 2025-11-26 11:01:13 -08:00
Gregory Schier
79dd50474d Conditionally disable auth 2025-11-26 10:30:16 -08:00
Gregory Schier
dfa6f1c5b4 Fix collapse all folders 2025-11-26 07:19:12 -08:00
Gregory Schier
2edd33b6e3 TSC check and set editor key 2025-11-26 06:25:02 -08:00
Gregory Schier
8b851d4685 Fix better 2025-11-25 09:46:02 -08:00
Gregory Schier
20e1b5c00e Fix dialog and invalid variable style 2025-11-25 09:37:19 -08:00
Gregory Schier
c4ab2965f7 Scrollable tables, specify multi-part filename, fix required prop in prompt, better tab padding 2025-11-25 08:45:33 -08:00
Gregory Schier
0cad8f69e2 Fix imports 2025-11-24 08:55:55 -08:00
Zhizhen He
a8402824ed Fix useState (#307) 2025-11-24 08:55:37 -08:00
Gregory Schier
acf9458616 Enable updater artifacts creation in Tauri release configuration 2025-11-23 09:26:34 -08:00
Gregory Schier
0a58f7dfc8 Add back vendor-node 2025-11-23 08:58:57 -08:00
Gregory Schier
6e05d85ae4 Move icon definition to make Windows tests pass 2025-11-23 08:55:47 -08:00
Gregory Schier
a04db485de Run CI on main 2025-11-23 08:46:26 -08:00
Gregory Schier
d7043e75d6 Biome tweaks 2025-11-23 08:45:15 -08:00
Gregory Schier
ec3e2e16a9 Switch to BiomeJS (#306) 2025-11-23 08:38:13 -08:00
Gregory Schier
2bac610efe Official 1Password Template Function (#305) 2025-11-22 06:08:13 -08:00
Gregory Schier
43a7132014 Support Any type for gRPC reflection 2025-11-21 13:15:09 -08:00
Gregory Schier
bddc6e35a0 Bail out if sync directory is deleted 2025-11-19 13:42:48 -08:00
Gregory Schier
0e98a3e498 Fix prompt default value 2025-11-19 10:10:13 -08:00
Gregory Schier
17b6c945e6 Cap max height on template function dialog 2025-11-19 09:39:43 -08:00
Gregory Schier
474e761eb7 Fix prompt 2025-11-19 09:21:59 -08:00
Gregory Schier
1fbf9e50c4 Better keychain function descriptions 2025-11-19 09:15:50 -08:00
Gregory Schier
6863decd8e Fix sidebar scroll into view 2025-11-18 13:30:37 -08:00
Gregory Schier
569e506f32 Try rel imports 2025-11-18 09:09:56 -08:00
Gregory Schier
6d7a08758f Try rel imports 2025-11-18 09:09:39 -08:00
Gregory Schier
20dfd50a7d Try without && 2025-11-18 09:08:16 -08:00
Gregory Schier
d747eb5e45 Try again 2025-11-18 09:02:10 -08:00
Gregory Schier
81fca7c54f Reverse order 2025-11-18 08:55:46 -08:00
Gregory Schier
5465efea84 Don't build in vendor-plugins 2025-11-18 08:53:55 -08:00
Gregory Schier
96a3630725 Fix package build order 2025-11-18 08:48:58 -08:00
Gregory Schier
f1b6c89186 Fix package types? 2025-11-18 08:39:07 -08:00
Gregory Schier
9c52652a5e Move a bunch of git ops to use the git binary (#302) 2025-11-17 15:22:39 -08:00
Gregory Schier
84219571e8 Improved prompt function add add ctx.* functions (#301) 2025-11-15 08:19:58 -08:00
iammordaty
7ced183b11 Change wording from "Show sidebar" to "Toggle sidebar" (#300) 2025-11-13 13:40:51 -08:00
Gregor Majcen
593a7ab7e5 Add an option to allow jsonpath/xpath to return as array (#297)
Co-authored-by: Gregory Schier <gschier1990@gmail.com>
2025-11-13 05:57:11 -08:00
Zhizhen He
a4c4663011 Merge pull request #298
* fix: replace unstable from_mins to stable from_secs
2025-11-12 07:01:58 -08:00
jzhangdev
5745a96106 Merge pull request #299
* Fix scroll bar layout in EventStreamViewer
2025-11-12 06:58:35 -08:00
Gregory Schier
5449e3c620 Add sidebar action to select the active request 2025-11-11 14:38:05 -08:00
Gregory Schier
7b6278405c Focus request/folder after creation 2025-11-11 14:11:43 -08:00
goldlinker
8164a61376 chore: make some documents clearer (#276) 2025-11-10 17:25:54 -08:00
Jeroen Van den Berghe
2e9f21f838 Convert Insomnia variables syntax in headers, parameters and form data (#291)
Co-authored-by: Gregory Schier <gschier1990@gmail.com>
2025-11-10 17:24:30 -08:00
Gregory Schier
0d725b59bd Verify trusted-signing-cli version 2025-11-10 15:02:10 -08:00
Gregory Schier
632860c29b Try again 2025-11-10 14:58:54 -08:00
Gregory Schier
e1cf16f6e1 Try again 2025-11-10 14:49:15 -08:00
Gregory Schier
47c9cfb295 Fix release? 2025-11-10 14:46:09 -08:00
Gregory Schier
6389fd3b8f Connection re-use for plugin networking and beta NTLM plugin (#295) 2025-11-10 14:41:49 -08:00
Gregory Schier
d318546d0c Back to vertical tabs in workspace settings 2025-11-10 06:21:26 -08:00
Gregory Schier
2f60b7b1f3 Switch trusted-signing-cli install method 2025-11-09 13:55:51 -08:00
Gregory Schier
75dc82570b Rename BadgeButton to PillButton 2025-11-09 08:18:26 -08:00
Gregory Schier
d7a7a64ec4 New "Triangle" theme 2025-11-09 07:55:31 -08:00
Gregory Schier
3aae1b52d1 Update commercial use trial wording 2025-11-09 07:19:05 -08:00
Gregory Schier
9eddf716e1 Update commercial use trial wording 2025-11-09 07:07:18 -08:00
Gregory Schier
554e632c19 Minor license handling tweaks 2025-11-09 06:01:03 -08:00
Gregory Schier
054916b7af JSON linting 2025-11-08 15:24:31 -08:00
Gregory Schier
f2a63087b0 Actually fix GraphQLEditor.tsx properly 2025-11-06 09:33:12 -08:00
Gregory Schier
6f0d4ad5e4 Fix GraphQL editor 2025-11-06 06:31:56 -08:00
Gregory Schier
cd3530f598 Dropdown to setup sync now opens the correct workspace settings tab 2025-11-06 05:13:18 -08:00
Gregory Schier
53aea914ac Don't drag tree item when editing
https://feedback.yaak.app/p/select-text-of-navbar-in-edit-mode
2025-11-06 05:10:23 -08:00
Gregory Schier
dc0c1decee Fix copy-curl with API key
https://feedback.yaak.app/p/copy-as-curl-bug-when-auth-use-api-key-with
2025-11-05 10:21:26 -08:00
Gregory Schier
32d56f2274 OAuth 1 Authentication Plugin (#292) 2025-11-05 10:12:48 -08:00
Gregory Schier
ef86c1d189 Recursively collapse during "coolapse all" 2025-11-05 10:12:10 -08:00
Gregory Schier
e264c50427 Show more resopnse header y height 2025-11-05 10:11:55 -08:00
Gregory Schier
f05ad62301 Fix zoom hotkey
https://feedback.yaak.app/p/zoom-in-not-working-on-linux-mint
2025-11-05 10:11:46 -08:00
Gregory Schier
0a6228bf16 Fix Input ref timing, PairEditor initialization, and environment variable focus 2025-11-04 14:04:12 -08:00
Gregory Schier
fa3a0b57f9 Fix Editor.tsx wonkiness 2025-11-04 13:44:18 -08:00
Gregory Schier
4390c02117 Fix gRPC message editing 2025-11-04 12:35:36 -08:00
Gregory Schier
77011176af Fix tab flexbox issue 2025-11-04 09:22:28 -08:00
Gregory Schier
759fc503d3 Fix accidental typing 2025-11-04 08:51:46 -08:00
Gregory Schier
0cb633e479 A bunch of fixes 2025-11-04 08:44:08 -08:00
Gregory Schier
81ceb981e8 Oops 2025-11-03 15:05:50 -08:00
Gregory Schier
4dae1a7955 Improve selecting items during filter 2025-11-03 15:04:02 -08:00
Gregory Schier
d119f4cab2 Fix confirm with text autofocus 2025-11-03 14:42:30 -08:00
Gregory Schier
7e1eb90d29 Show error when enabling encryption fails 2025-11-03 14:34:43 -08:00
Gregory Schier
bf97ea1659 Some sidebar fixes 2025-11-03 14:17:11 -08:00
Gregory Schier
749ca968ec Fix environment sorting 2025-11-03 13:53:41 -08:00
Gregory Schier
0c54b481fb Fix unused variable 2025-11-03 13:29:47 -08:00
Jeroen Van den Berghe
4943bad8ec Import query parameters from Insomnia v4 and v5 exports (#290) 2025-11-03 13:03:24 -08:00
Gregory Schier
450dbd0053 Better syntax highlighting for filter expressions 2025-11-03 06:30:41 -08:00
Gregory Schier
236c8fa656 Fix sidebar reselection after dragging non-selelected item or renaming 2025-11-03 06:19:04 -08:00
Gregory Schier
1dfc2ee602 Support encoding values to base64 (url safe) 2025-11-03 06:07:34 -08:00
Gregory Schier
1d158082f6 Pass host environment variable to plugin runtime
https://feedback.yaak.app/p/when-i-use-clash-yaak-fails-to-launch
2025-11-03 06:02:18 -08:00
Gregory Schier
f3e44c53d7 Show full paths in command palette switcher
https://feedback.yaak.app/p/command-palette-search-should-include-parent-folder-names
2025-11-03 05:54:29 -08:00
Gregory Schier
c8d5e7c97b Add support for API key authentication in cURL conversion
https://feedback.yaak.app/p/copy-as-curl-without-api-key
2025-11-03 05:05:54 -08:00
Gregory Schier
9bde6bbd0a More efficient editor state saves 2025-11-02 06:16:45 -08:00
Gregory Schier
df5be218a5 Remove debug console logs from Input component 2025-11-02 05:52:56 -08:00
Gregory Schier
2deb870bb6 Fix pair editor 2025-11-02 05:52:36 -08:00
Gregory Schier
0f9975339c Fixes for last commit 2025-11-01 09:33:57 -07:00
Gregory Schier
6ad4e7bbb5 Click env var to edit AND improve input/editor ref handling 2025-11-01 08:39:07 -07:00
Gregory Schier
2bcf67aaa6 Fallback to jsonpath for response filter 2025-10-31 09:45:29 -07:00
Gregory Schier
c01b8ce4ca Fix sort priority 2025-10-31 09:40:37 -07:00
Gregory Schier
f7bb649b16 Fix ref type 2025-10-31 09:25:04 -07:00
Gregory Schier
e3e67c8df7 Use TRee component for Environment dialog (#288) 2025-10-31 09:16:29 -07:00
gschier
c9698c0f23 Deploying to main from @ mountain-loop/yaak@2cdd1d8136 🚀 2025-10-31 15:36:52 +00:00
Gregory Schier
2cdd1d8136 Tree fixes and sidebar filter DSL 2025-10-31 05:59:46 -07:00
gschier
8d8e5c0317 Deploying to main from @ mountain-loop/yaak@4e66a73677 🚀 2025-10-30 00:20:16 +00:00
Gregory Schier
4e66a73677 npm i 2025-10-29 15:37:46 -07:00
Gregory Schier
08f1bc4e65 Disable sidebar filtering for now 2025-10-29 15:30:18 -07:00
Gregory Schier
c6d9cb9c9e Narrow vim keys selector 2025-10-29 14:59:33 -07:00
Gregory Schier
efbb90dd60 Prevent vim hotkeys from activating tree in sidebar filter 2025-10-29 14:59:13 -07:00
Gregory Schier
7a7940d365 Change response history dropdown icon 2025-10-29 14:58:56 -07:00
Börge Kiss
8a6f80a181 Fix dismissable banner action button title (#273) 2025-10-29 08:16:33 -07:00
Quentin Ross
e8e0097e2d Fix websocket url parameters not parsing variables (#281) 2025-10-29 08:16:07 -07:00
Zhizhen He
f475b05c51 Allow specifying time for unix / unix millis / iso 8601 format (#283)
Co-authored-by: Gregory Schier <gschier1990@gmail.com>
2025-10-29 08:15:19 -07:00
Madeleaan
7e5f9004e2 Fix text on plugin installation button (#284) 2025-10-29 08:14:40 -07:00
Gregory Schier
660771b48c Add random.range() template function 2025-10-29 08:02:12 -07:00
Gregory Schier
030e8b837e Fix incorrect Postman AWS auth key mapping and update test fixtures 2025-10-29 07:08:02 -07:00
Gregory Schier
a42cba567c Support all possible Postman auth types 2025-10-29 07:06:10 -07:00
Gregory Schier
484b5b2fd8 Switch to vkbeautify for XML
https://feedback.yaak.app/p/xml-pretty-formatter-not-rendering-correctly
2025-10-28 14:03:49 -07:00
Gregory Schier
a71fb8ed6c Don't trigger hotkeys within sidebar edit input 2025-10-28 13:03:37 -07:00
Gregory Schier
5b8114f6f3 Add context menu support and Vim keybindings in Sidebar and Tree components 2025-10-28 08:45:36 -07:00
Gregory Schier
68637d24c7 Don't throw on empty variable values
https://feedback.yaak.app/p/variable-with-empty-value-in-request-will-cause-error
2025-10-28 07:20:41 -07:00
Gregory Schier
c097afe657 Skip disabled headers and URL parameters during rendering 2025-10-28 07:11:37 -07:00
Gregory Schier
78bc7d7909 Update label for "trialing" state to "Commercial Trial" in LicenseBadge 2025-10-28 07:11:17 -07:00
Gregory Schier
b68ce44d52 Colorize HTTP methods in dropdown
https://feedback.yaak.app/p/colorized-methods-on-dropdown-select
2025-10-28 07:11:03 -07:00
Gregory Schier
632344d166 Adjust LicenseBadge color for "trialing" state to secondary 2025-10-28 07:04:16 -07:00
Gregory Schier
f3814b7d2b Show cursor in response view 2025-10-28 07:03:19 -07:00
Gregory Schier
618a544dbd Adjust default font sizes for editor and interface settings 2025-10-28 07:03:06 -07:00
Gregory Schier
9a55426236 Fix incorrect Sidebar hidden state logic 2025-10-28 06:58:31 -07:00
Gregory Schier
b7ad490c9b Add setting to disable checking for notifications 2025-10-28 06:55:56 -07:00
Gregory Schier
2095cb88c2 Fix entering encryption key
https://feedback.yaak.app/p/encryption-feature-error
2025-10-28 06:55:03 -07:00
Gregory Schier
a9e05ae988 Copy on "type to confirm" dialog 2025-10-28 06:15:44 -07:00
Gregory Schier
99a6c38632 Sidebar filtering and improvements (#285) 2025-10-27 14:10:28 -07:00
Gregory Schier
b2766509e3 Hotkey for creating environment when dialog open 2025-10-26 12:10:41 -07:00
Gregory Schier
3f5b5a397c Better environment color picker (#282) 2025-10-26 12:05:03 -07:00
Gregory Schier
923b1ac830 Fix indent guide on drag and drop after expand folder
https://feedback.yaak.app/p/displace-moving-caret-on-spring-loaded-folder
2025-10-25 09:41:06 -07:00
Gregory Schier
17dbe7c9a7 API key auth to copy-as-grpcurl 2025-10-25 08:43:50 -07:00
Gregory Schier
df80cdfe33 Copy as curl AWS auth, and handle disabled auth 2025-10-25 08:33:27 -07:00
Gregory Schier
eb1916b773 Fix tests 2025-10-24 15:22:20 -07:00
Gregory Schier
a3df0489b1 Fix Insomnia v4 environment importer 2025-10-24 15:21:20 -07:00
Gregory Schier
b19e036a61 Better CSS 2025-10-24 15:06:08 -07:00
Gregory Schier
b51e37f221 Try fix folder variable pane layout 2025-10-24 14:53:07 -07:00
Gregory Schier
cf9882b5b9 Fix response viewer stream scrolling 2025-10-24 14:39:25 -07:00
Gregory Schier
bbf85c953d Better XML formatting, fix pointer cursor in sidebar, copy/create URL in response 2025-10-24 09:50:42 -07:00
Gregory Schier
17ddc76223 Better XML beautify 2025-10-24 08:59:16 -07:00
Gregory Schier
754ec0ba86 Fix AWS auth
https://x.com/NilsFleischer63/status/1981719735432511553
2025-10-24 08:42:18 -07:00
Gregory Schier
1198aa7d87 Add tree rename (on Enter) and global rename hotkeys (#279) 2025-10-24 08:01:38 -07:00
Gregory Schier
43437abae7 Add custom DNS resolver for *.localhost (#280) 2025-10-24 08:01:12 -07:00
moebiuscorzer
9439cfa2ba fix: typo 'validatation' corrected into 'validation' (#278) 2025-10-24 06:09:00 -07:00
gschier
a731ccc8bd Deploying to main from @ mountain-loop/yaak@451c8b9dde 🚀 2025-10-23 15:36:39 +00:00
Gregory Schier
451c8b9dde Fix PDF viewer 2025-10-22 08:56:36 -07:00
Gregory Schier
b7682db9a3 Remove duplicate themes in getThemes function 2025-10-22 06:56:00 -07:00
Gregory Schier
7e2d72c4e3 Fix secure() function editing 2025-10-21 20:09:56 -07:00
Gregory Schier
28bb460409 Add empty workspaces array to environment output fixture 2025-10-21 08:16:33 -07:00
Gregory Schier
56d635166b Add tsconfig.json for importer-postman-environment plugin 2025-10-21 08:08:27 -07:00
Gregory Schier
f6a7257104 Text color for selected 2025-10-21 07:46:55 -07:00
Gregory Schier
1fce060ef7 Npm i 2025-10-21 07:36:21 -07:00
Gregory Schier
5c966e5a95 Add bracket matching 2025-10-21 07:27:07 -07:00
Gregory Schier
0520ef5d43 Import postman environments
https://feedback.yaak.app/p/import-postman-environments
2025-10-21 07:20:37 -07:00
dependabot[bot]
25b110778a Bump vite from 7.0.7 to 7.0.8 (#269) 2025-10-20 21:19:55 -07:00
Gregory Schier
327bf84e57 Clarify proto import buttons 2025-10-20 09:23:12 -07:00
Gregory Schier
1c48b309b5 Fix indent guide hovering 2025-10-20 09:13:00 -07:00
Gregory Schier
7c5dec821d Remove React.lazy on overlay and tooltip 2025-10-19 12:00:30 -07:00
gschier
dcd8f6c08a Deploying to main from @ mountain-loop/yaak@31f9a63c3b 🚀 2025-10-19 17:19:55 +00:00
Gregory Schier
31f9a63c3b Don't force push 2025-10-19 10:18:32 -07:00
Gregory Schier
e902b67a63 Replace arrayMove with custom implementation in PairEditor to remove dependency on @dnd-kit/sortable. 2025-10-19 09:40:11 -07:00
Gregory Schier
b11c72fde4 Add back creation items to context menu 2025-10-19 08:52:03 -07:00
Gregory Schier
07b90c6ae3 Make plugins scrollable 2025-10-19 08:21:36 -07:00
Gregory Schier
ba6163b6d8 Better code splitting and removed final instances of react-dnd 2025-10-19 08:16:56 -07:00
Gregory Schier
8055b625d0 Improve handling of drag-and-drop for collapsed and empty folders in tree component 2025-10-18 07:59:14 -07:00
Gregory Schier
3a61ffbbb0 Better drag for empty folders 2025-10-18 07:41:33 -07:00
Gregory Schier
f8478677c5 Pass the previous app version to the notification endpoint so the update notification can display all missed changelogs, not just the latest one. 2025-10-18 07:13:52 -07:00
Gregory Schier
f5094c5a94 Fix drop marker 2025-10-17 16:15:14 -07:00
Étienne Lévesque
8300187566 [Plugins] [Auth] [oauth2] Support identity platforms with underlying IDPs (#261)
Co-authored-by: Gregory Schier <gschier1990@gmail.com>
2025-10-17 16:07:25 -07:00
Kien Dang
cd8ab3616e Fix GraphQL doc explorer CountBadge stacking order (#262) 2025-10-17 15:33:40 -07:00
Maksim Karelov
be0c92b755 Add ability to select fs.readFile encoding (#267) 2025-10-17 15:32:04 -07:00
Gregory Schier
c34ea20406 Flattened the sidebar tree 2025-10-17 15:07:02 -07:00
Gregory Schier
6e9b1db196 Bump version 2025-10-16 14:42:02 -07:00
Gregory Schier
d83aabd2be Dynamic template function args and TTL option for request chaining (#266) 2025-10-16 14:39:30 -07:00
Gregory Schier
d46479cd22 Remove debug console log from TreeDragOverlay component 2025-10-15 14:08:21 -07:00
Gregory Schier
19cae33382 Fix crash when delete after drag 2025-10-15 14:07:55 -07:00
Gregory Schier
267cd079ad New sidebar and folder view (#263) 2025-10-15 13:46:57 -07:00
Gregory Schier
19c1efc73e Resolve 2025-10-11 08:28:07 -07:00
Gregory Schier
dfa9a22861 Merge remote-tracking branch 'origin/main' 2025-10-11 06:29:17 -07:00
Gregory Schier
533f9bacc4 Add AWS authentication 2025-10-11 06:29:06 -07:00
Zhizhen He
0358748729 Fix icon paths in package.json (#265) 2025-10-09 04:24:44 -07:00
Zhizhen He
1540d0a5a5 Fix typo (#264) 2025-10-08 19:54:18 -07:00
Gregory Schier
d177e164f1 Fix log 2025-10-08 04:25:06 -07:00
Gregory Schier
f1355c9d15 Fix non-release build 2025-10-08 04:25:00 -07:00
Gregory Schier
485a9ea47c Show toast on plugin event handling errors instead of crashing
Also set folder context on template render and fix timestamp function
2025-10-06 06:53:45 -07:00
Gregory Schier
dbc606fb53 Update README 2025-10-04 08:22:39 -07:00
Gregory Schier
a00b4ae232 Always open new window when clicking current workspace:
https://feedback.yaak.app/p/dont-trigger-workspace-change-when-clicking-same-workspace
2025-10-04 06:47:50 -07:00
Gregory Schier
998b5cf78a Add RenderOptions and RenderErrorBehavior to ensure auth UI still loads with missing variables 2025-10-04 06:29:29 -07:00
Gregory Schier
b4deae6e8d Batch insert environments last, to handle folder case 2025-10-04 05:48:08 -07:00
Gregory Schier
87fdf17010 Fix plugin refresh toasts having no timeout 2025-10-04 05:47:39 -07:00
Gregory Schier
c6975a9e8b Allow toast interaction when dialog is open 2025-10-04 05:47:16 -07:00
Gregory Schier
b44ac55bc2 Fix broken environment migration 2025-10-04 05:47:00 -07:00
Gregory Schier
9c65c95ba9 Fix batch import potentially creating a useless base environment 2025-10-04 05:46:42 -07:00
Gregory Schier
7beb9f4e69 Merge remote-tracking branch 'origin/main' 2025-10-04 05:46:13 -07:00
Gregory Schier
dbecd74f46 Allow selecting confirm text 2025-10-04 05:46:06 -07:00
Gregory Schier
6826ee1672 Revise README for clarity and updated features
Updated the README to enhance clarity and organization, including feature descriptions and removing outdated content.
2025-10-03 10:29:19 -07:00
Gregory Schier
a12ae7ef56 Update README 2025-10-03 09:53:40 -07:00
gschier
dbc100409d Deploying to main from @ mountain-loop/yaak@6b87cd9655 🚀 2025-10-03 16:52:47 +00:00
Gregory Schier
6b87cd9655 Merge remote-tracking branch 'origin/main' 2025-10-03 09:52:31 -07:00
Gregory Schier
7ce2cdc9cc Update tiers 2025-10-03 09:52:26 -07:00
gschier
1f4e38b7a7 Deploying to main from @ mountain-loop/yaak@0013a0797b 🚀 2025-10-03 16:50:09 +00:00
Gregory Schier
0013a0797b Merge remote-tracking branch 'origin/main' 2025-10-03 09:49:45 -07:00
Gregory Schier
5e9b14dc0b Update workflow 2025-10-03 09:49:39 -07:00
gschier
b7cfb0db13 Deploying to main from @ mountain-loop/yaak@8948bfbf45 🚀 2025-10-03 16:46:35 +00:00
Gregory Schier
8948bfbf45 Merge remote-tracking branch 'origin/main' 2025-10-03 09:46:19 -07:00
Gregory Schier
4218e90bf4 Set active-only to true in sponsors workflow 2025-10-03 09:44:56 -07:00
gschier
2172d7ac60 Deploying to main from @ mountain-loop/yaak@5e45cb4908 🚀 2025-10-03 16:42:45 +00:00
Gregory Schier
5e45cb4908 Update sponsors workflow to use SPONSORS_PAT secret 2025-10-03 09:42:21 -07:00
Gregory Schier
d662883fdd Update README 2025-10-03 09:41:17 -07:00
Gregory Schier
f83f3d4682 Refine Yaak description in README
Updated the description of Yaak in the README.
2025-10-03 09:36:22 -07:00
gschier
e03c745093 Deploying to main from @ mountain-loop/yaak@73b9d699ed 🚀 2025-10-03 16:35:10 +00:00
Gregory Schier
73b9d699ed Merge remote-tracking branch 'origin/main' 2025-10-03 09:34:35 -07:00
Gregory Schier
5a7b9aba2f Sponsors workflow 2025-10-03 09:34:22 -07:00
Gregory Schier
cf433b26a5 Revise sponsor section in README.md
Updated sponsor section in README.md to include new sponsor images and links.
2025-10-03 09:32:36 -07:00
gschier
573035b17d Deploying to main from @ mountain-loop/yaak@3844fec968 🚀 2025-10-03 16:31:42 +00:00
Gregory Schier
a267c0c53f Update README 2025-10-03 09:31:21 -07:00
gschier
328563f4e6 Deploying to main from @ mountain-loop/yaak@3844fec968 🚀 2025-10-03 16:30:09 +00:00
Gregory Schier
3844fec968 Merge remote-tracking branch 'origin/main' 2025-10-03 09:29:35 -07:00
Gregory Schier
8557a2477b Sponsors workflow 2025-10-03 09:29:31 -07:00
Gregory Schier
d02519ab74 Update README header 2025-10-03 09:19:17 -07:00
Gregory Schier
1a1751c23e Fix window path issue 2025-10-02 08:25:00 -07:00
Gregory Schier
17de0678b0 Remove unused import from window.rs 2025-10-02 08:05:07 -07:00
Gregory Schier
20bb89de33 Try fix oauth window creation 2025-10-02 07:45:50 -07:00
Gregory Schier
8a634b1056 Add back environment.base (#260) 2025-10-02 06:04:27 -07:00
Gregory Schier
57f231ca00 Add trial status to links 2025-10-01 21:14:26 -07:00
Gregory Schier
cb1c0e4d8c Fix ref 2025-10-01 21:07:44 -07:00
Gregory Schier
2152cf87d7 Tweak license badge and fix keyring dep 2025-10-01 21:01:27 -07:00
Gregory Schier
8662b230e7 Oops, actually fix 2025-10-01 16:54:05 -07:00
Gregory Schier
3a8a6484c7 Fix release windows signing 2025-10-01 16:42:38 -07:00
Gregory Schier
f92594a16d Fix release tauri config 2025-10-01 10:51:26 -07:00
Gregory Schier
7969fcb76c Alias keyring function 2025-10-01 10:22:06 -07:00
Gregory Schier
eafefb1894 Fix setting 2025-10-01 09:44:18 -07:00
Gregory Schier
9a94a15c82 Integrated update experience (#259) 2025-10-01 09:36:36 -07:00
Gregory Schier
757d28c235 License and updater Cargo features (#258) 2025-09-29 22:08:05 -07:00
Gregory Schier
6c79c1ef3f Rework licensing flows to be more friendly 2025-09-29 15:40:15 -07:00
Gregory Schier
7262eccac5 Fix keyring errors 2025-09-29 10:53:20 -07:00
Gregory Schier
4989a5f759 Add back cmd palette icon 2025-09-29 09:39:15 -07:00
Gregory Schier
0b0b05d29c Add keyring template function 2025-09-29 08:56:24 -07:00
Gregory Schier
b3d6d87bee Delete duplicate folder environments on upsert 2025-09-29 07:48:07 -07:00
Gregory Schier
6abbdc8726 Filter out current variable from autocomplete and show sub environment variables in base environment autocomplete 2025-09-29 06:57:04 -07:00
Gregory Schier
b9613591f8 Update resource links in README.md 2025-09-28 15:38:14 -07:00
Gregory Schier
eb555989ac Force grpcurl to posix paths 2025-09-25 08:40:57 -07:00
Gregory Schier
b77f1375fd Fix test with timezone 2025-09-25 08:03:07 -07:00
Gregory Schier
3c438b3da7 Add cmdctrl+Backspace for request delete 2025-09-25 07:28:01 -07:00
Gregory Schier
df15543c80 Explicitly set the request layout (#257) 2025-09-25 07:23:52 -07:00
Gregory Schier
73ad86c6b9 Fix workspace settings scroll with long description 2025-09-25 07:22:42 -07:00
Gregory Schier
615de8b3cc Update importers for folder environment and fix tests 2025-09-25 07:12:50 -07:00
Gregory Schier
2418bd0672 Update README.md 2025-09-24 11:03:23 -07:00
Gregory Schier
b3414ee60f Fix ephemeral response body reading 2025-09-22 14:07:25 -07:00
Gregory Schier
8fe50959b9 Add migrate for base environment to sync logic 2025-09-22 11:15:32 -07:00
Gregory Schier
523e7dcf16 Add bootstrap to release script (to fix lint) 2025-09-22 08:57:05 -07:00
Gregory Schier
7951f3a7bd Tweak light theme, high contrast themes, and fix env null reference 2025-09-22 08:36:40 -07:00
Gregory Schier
c6666b9623 Update tauri and signing deps to try fixing windows signing 2025-09-21 08:40:43 -07:00
Gregory Schier
fa98351e30 Fix lint 2025-09-21 08:04:47 -07:00
Gregory Schier
3c8be3f5b9 Gen models 2025-09-21 08:01:49 -07:00
Gregory Schier
eb3d1c409b Merge pull request #256
* Update environment model to get ready for request/folder environments

* Folder environments in UI

* Folder environments working

* Tweaks and fixes

* Tweak environment encryption UX

* Tweak environment encryption UX

* Address comments

* Update fn name

* Add tsc back to lint rules

* Update src-web/components/EnvironmentEditor.tsx

* Merge remote-tracking branch 'origin/folder-environments' into folder…
2025-09-21 07:54:26 -07:00
Jhonatan Matías
46b049c72b Fix Typos (#255) 2025-09-18 10:40:32 -07:00
Hao Xiang
fec64b5c02 fix http response load when filter (#251) 2025-09-16 13:01:00 -07:00
dependabot[bot]
8c3ed60579 Bump vite-plugin-static-copy from 3.1.1 to 3.1.2 (#252)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-16 11:20:34 -07:00
moshyfawn
907e09a417 [Plugins] [CopyAsCURL] [Auth] [JWT] Include custom bearer prefix to copy CURL (#253)
Co-authored-by: Gregory Schier <gschier1990@gmail.com>
2025-09-16 11:20:23 -07:00
dependabot[bot]
28c6af8f94 Bump vite from 7.0.4 to 7.0.7 (#254)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-16 10:25:34 -07:00
Gabriel Oliveira
f8b0510d08 feat(settings): add do not check for updates (#246)
Co-authored-by: Gregory Schier <gschier1990@gmail.com>
2025-08-08 13:25:55 -07:00
Gregory Schier
5f99b7df05 Use logger for plugin logs so they actually show
https://feedback.yaak.app/p/log-statements-dont-appear-from-within-plugins
2025-08-08 13:00:38 -07:00
Gregory Schier
158877b355 Fix SVG viewer crashing 2025-08-08 12:59:59 -07:00
Gregory Schier
8b84545b67 Prevent curl copy from using stale body data
https://feedback.yaak.app/p/copy-as-curl-includes-wrong-data-property
2025-08-02 10:03:35 -07:00
Gregory Schier
0e28079965 Fix GraphQL introspection breaking app
https://feedback.yaak.app/p/workspace-crash-when-graphql-introspection-returns-unexpected-response
2025-08-02 09:58:53 -07:00
Gregory Schier
5d5f9cc943 Better iFrame sandboxing
https://feedback.yaak.app/p/completely-white-ui
2025-08-02 09:47:34 -07:00
Gregory Schier
b71bc2cc92 Fix gRPC/WS hang because of ALPN
https://feedback.yaak.app/p/grpc-stalls-at-inspecting-schema-no-timeout-no-manual-proto
2025-08-02 09:37:28 -07:00
Gregory Schier
23191dcfc3 Revert change 2025-07-27 08:54:57 -07:00
Gregory Schier
372b15689d Fix min-size on md code 2025-07-27 08:54:44 -07:00
Gregory Schier
5c6d6fb7e4 Switch to menu right more easily 2025-07-27 08:45:56 -07:00
Gregory Schier
835a2e93e9 Text selection and syntax highlighting to markdown previews
https://feedback.yaak.app/p/enable-text-selection-in-the-info-section
2025-07-27 08:33:44 -07:00
Gregory Schier
93c6f6d611 re-enable http/2 support 2025-07-27 07:38:12 -07:00
Gregory Schier
b445261b32 Some tweaks 2025-07-26 15:48:58 -07:00
Gregory Schier
685b59cee9 Fix error 2025-07-26 14:34:40 -07:00
Gregory Schier
38529cc89e Plugin init/dispose 2025-07-26 14:28:59 -07:00
Gregory Schier
0d98b95b61 Don't prompt for updates on Linux unless APPIMAGE env exists 2025-07-25 15:10:04 -07:00
Gregory Schier
e044dcae3e Add back Rose Pine themes 2025-07-25 09:39:37 -07:00
Gregory Schier
b5b7b1638d Use physical key codes for zoom hotkeys 2025-07-24 09:15:57 -07:00
Gregory Schier
9d6ac8a107 Add template.desktop to make icon work until we can upgrade Tauri CLI 2025-07-24 08:44:55 -07:00
Gregory Schier
6440df492e Generate icons 2025-07-24 08:07:16 -07:00
Gregory Schier
2cdd97cabb Fix header spacing for window controls
https://feedback.yaak.app/p/app-bar-icons-not-aligned-correctly-when-fullscreen
2025-07-24 07:57:38 -07:00
Gregory Schier
20681e5be3 Scoped OAuth 2 tokens 2025-07-23 22:03:03 -07:00
Gregory Schier
a258a80fbd Prevent auth from adding lone ? to URL
https://feedback.yaak.app/p/using-inherited-api-key-causes-a-question-mark-to-be
2025-07-23 17:20:17 -07:00
Gregory Schier
1b90842d30 Regex template function 2025-07-23 13:33:58 -07:00
Carter Costic
f1acb3c925 Merge pull request #245
* Attach cookies to WS Upgrade

* Merge branch 'main' into main

* Move reqwest_cookie_store to workspace dep
2025-07-23 13:14:15 -07:00
Gregory Schier
28630bbb6c Remove template as default value 2025-07-23 12:46:26 -07:00
Gregory Schier
86a09642e7 Rename template-function-datetime 2025-07-23 12:42:54 -07:00
Song
0b38948826 add template-function-datetime (#244) 2025-07-23 12:41:24 -07:00
Gregory Schier
c09083ddec Fix up export dialog 2025-07-21 14:45:13 -07:00
Gregory Schier
44ee020383 Plugins menu item and link to run button 2025-07-21 14:38:29 -07:00
Gregory Schier
c609d0ff0c Fix GraphQL schema getting nuked on codemirror language refresh 2025-07-21 14:17:36 -07:00
Gregory Schier
7eb3f123c6 Add run button link 2025-07-21 07:47:29 -07:00
Gregory Schier
2bd8a50df4 Tweak tab padding 2025-07-21 07:45:11 -07:00
Gregory Schier
178cc88efb Fix Authenticatin typo
https://feedback.yaak.app/p/authentication-misspelled-in-request-auth-tooltip
2025-07-21 07:39:54 -07:00
Gregory Schier
38b2893cbf npm i 2025-07-20 09:48:57 -07:00
Gregory Schier
144faad31f Add API key auth
https://feedback.yaak.app/p/header-as-auth-option
2025-07-20 09:15:03 -07:00
Gregory Schier
947926ca34 Fix deadlock 2025-07-20 08:58:22 -07:00
Gregory Schier
86f23990eb Fixed bugs in Plugin settings pane 2025-07-20 08:28:00 -07:00
Gregory Schier
861b41b5ae JSONPath plugin README 2025-07-20 06:42:33 -07:00
Gregory Schier
7f4ccbe014 OAuth 2 plugin README 2025-07-19 21:47:19 -07:00
Gregory Schier
3b61c836be Merge remote-tracking branch 'origin/main' 2025-07-19 21:39:47 -07:00
Gregory Schier
6616cb67cd JWT plugin README 2025-07-19 21:39:40 -07:00
Song
e5fd4134ba inline url search param and use --data (#239) 2025-07-19 21:28:39 -07:00
Gregory Schier
31b0b14c04 Merge remote-tracking branch 'origin/main' 2025-07-19 21:25:21 -07:00
Gregory Schier
daeaf2a999 Bearer plugin README 2025-07-19 21:25:15 -07:00
Song
ca2fe07265 Optimize request function (#242)
Co-authored-by: Gregory Schier <gschier1990@gmail.com>
2025-07-19 09:29:42 -07:00
Song
adca071574 fix padding and hover highlight in tabs (#243) 2025-07-19 09:19:48 -07:00
Gregory Schier
d6057aa1ec Basic auth plugin README 2025-07-19 09:15:06 -07:00
Gregory Schier
60883cc1b9 copy grpcurl readme and fix 2025-07-19 09:10:49 -07:00
Gregory Schier
b32fe466b1 Copy as curl readme 2025-07-19 07:38:46 -07:00
Gregory Schier
f81ff27a9e Don't wrap tab content 2025-07-18 14:52:19 -07:00
Gregory Schier
8f737d799b Pad dynamic form for scrollbar 2025-07-18 14:52:08 -07:00
Gregory Schier
b67ea29aff Better error 2025-07-18 14:49:13 -07:00
Gregory Schier
a657c32445 Better authorization URL handling 2025-07-18 14:48:45 -07:00
Andrew Berezovskyi
5061e17700 Update mimetypes.ts with RDF mime types beyond JSON-LD and N3 (#235) 2025-07-18 14:37:14 -07:00
Song
d9d5c4d564 remove unnecessary semicolon in tailwind config file (#236) 2025-07-18 14:36:28 -07:00
Song
343986c018 make monospace font family follows app setting in auto completion menu (#237)
Co-authored-by: Gregory Schier <gschier1990@gmail.com>
2025-07-18 14:35:57 -07:00
Song
0d4b7bb5e2 Improve <details> component (#238)
Co-authored-by: Gregory Schier <gschier1990@gmail.com>
2025-07-18 14:28:24 -07:00
Song
4a2fb6ed48 Improve layout resizer (#240)
Co-authored-by: Gregory Schier <gschier1990@gmail.com>
2025-07-18 13:35:29 -07:00
Gregory Schier
74b6f4fb42 Fix pair editor creating new entry by clicking value 2025-07-18 08:54:37 -07:00
Gregory Schier
bcde4de4a7 Tweak workspace settings and a bunch of small things 2025-07-18 08:47:14 -07:00
Gregory Schier
4c375ed3e9 Tweak 2025-07-15 07:25:34 -07:00
Gregory Schier
2fcd2a3c07 Fix docs explorer cmd+click 2025-07-15 07:02:08 -07:00
Gregory Schier
0c60d190af Fix lint errors and show docs explorer on Cmd click 2025-07-14 14:52:16 -07:00
Gregory Schier
6f1fd7a254 Fix lint errors after upgrades and narrow tsc 2025-07-14 10:09:08 -07:00
Gregory Schier
5c1fba4b0c Fix Postman import description
https://feedback.yaak.app/p/missing-documentation-info-when-importing-postman-requests
2025-07-14 07:36:04 -07:00
Gregory Schier
6df13c452b Upgrade dependencies 2025-07-14 07:35:37 -07:00
Gregory Schier
209ac45ed2 Fix pop out scroll 2025-07-11 08:52:31 -07:00
Gregory Schier
ad4e073f62 Pop out dynamic form editor into dialog 2025-07-11 08:33:04 -07:00
Gregory Schier
791e5ad486 Fixes for websocket closing 2025-07-11 08:10:14 -07:00
Gregory Schier
fef6cc47f9 Smaller cancel button 2025-07-10 14:37:32 -07:00
Gregory Schier
c94331f454 Support GET GraphQL queries
https://feedback.yaak.app/p/support-get-graphql-queries-out-of-the-box
2025-07-10 14:06:54 -07:00
Gregory Schier
a31f818424 Don't show plugin error for response filter
https://feedback.yaak.app/p/increase-debounce-time-for-jsonpath-xpath-filter
https://feedback.yaak.app/p/possibility-to-cancel-request
2025-07-10 13:49:53 -07:00
Gregory Schier
f63da432b9 Fix split in curl importer
https://feedback.yaak.app/p/import-from-curl-does-not-work-properly-sometimes
2025-07-10 13:13:28 -07:00
Gregory Schier
456c8bd95f Add env key to useRenderTemplate()
https://feedback.yaak.app/p/environment-preview-is-inaccurate
2025-07-10 13:06:00 -07:00
Gregory Schier
b529bab578 Lower large response confirm 2025-07-10 12:59:45 -07:00
Gregory Schier
840f15c997 Always update response if error
https://feedback.yaak.app/p/cant-re-send-request-if-there-is-one-ongoing
2025-07-10 12:51:04 -07:00
Gregory Schier
f745435d26 Add comment 2025-07-10 11:47:26 -07:00
Gregory Schier
4038666986 Update single line filter extension 2025-07-10 11:46:27 -07:00
mooonfly
2b07d1a493 Fix duplicated character when composing text (#234) 2025-07-10 11:37:29 -07:00
Gregory Schier
333b64e7f3 Resolve requests for request actions
https://feedback.yaak.app/p/plugin-cannot-get-inhereted-parameters-when-rendering-a-request
2025-07-10 11:32:03 -07:00
Gregory Schier
9cd430b3de Docs explorer tweaks 2025-07-10 06:35:52 -07:00
Gregory Schier
f0bafb21cc Fix 2025-07-09 14:25:11 -07:00
Gregory Schier
f00adf6fce A bunch of responsiveness fixes 2025-07-09 14:24:29 -07:00
Gregory Schier
d9f9ea4047 Fix state bug 2025-07-09 12:48:40 -07:00
Gregory Schier
036e85d006 Schema filtering and a bunch of fixes 2025-07-09 12:39:27 -07:00
Gregory Schier
a03ec8875c Persist gql docs shown state 2025-07-08 09:29:56 -07:00
Gregory Schier
a3f50a2bb7 Clean up GraphQL explorer 2025-07-08 07:44:50 -07:00
Gregory Schier
6c0f9377cd Fix plugin builds 2025-07-07 14:17:47 -07:00
Gregory Schier
bd2662fbe3 Show implements and fix non-null and list types 2025-07-07 14:12:28 -07:00
Gregory Schier
f5dbff4682 Add docs close button 2025-07-07 13:59:06 -07:00
Gregory Schier
7a11da42af Some fixes 2025-07-07 13:52:54 -07:00
Gregory Schier
01f9c072a7 I think we're good 2025-07-07 13:41:26 -07:00
Gregory Schier
47722643ee Add descriptions to plugins 2025-07-06 12:47:13 -07:00
Gregory Schier
cf35658fea Revert Tauri CLI 2025-07-05 16:45:07 -07:00
Gregory Schier
6330c77948 Fix linux build 2025-07-05 16:16:50 -07:00
Gregory Schier
77d2edd947 Add log 2025-07-05 16:00:46 -07:00
Gregory Schier
4f0f60cb99 Add log 2025-07-05 16:00:20 -07:00
Gregory Schier
dd2b665982 Tweak protos CLI arg generation 2025-07-05 15:58:36 -07:00
Gregory Schier
19ffcd18a6 gRPC request actions and "copy as gRPCurl" (#232) 2025-07-05 15:40:41 -07:00
Gregory Schier
ad4d6d9720 Merge branch 'theme-plugins'
# Conflicts:
#	packages/plugin-runtime-types/src/bindings/gen_events.ts
2025-07-05 06:37:32 -07:00
Gregory Schier
9e98b5f905 Fix macos window theme calculation 2025-07-05 06:37:02 -07:00
Gregory Schier
19c6ad9d97 Theme plugins (#231) 2025-07-03 13:06:30 -07:00
Gregory Schier
a0e5e60803 Fix filter plugin names 2025-07-03 12:28:34 -07:00
Gregory Schier
2a6f139d36 Better plugin reloading and theme parsing 2025-07-03 12:25:22 -07:00
Gregory Schier
36bbb87a5e Mostly working 2025-07-03 11:48:17 -07:00
Gregory Schier
a6979cf37e Print table/col/val when row not found 2025-07-02 08:14:52 -07:00
Gregory Schier
ff26cc1344 Tweaks 2025-07-02 07:47:36 -07:00
Gregory Schier
fa62f88fa4 Allow moving requests and folders to end of list 2025-06-29 08:40:14 -07:00
Gregory Schier
99975c3223 Fix sidebar folder dragging collapse
https://feedback.yaak.app/p/a-folder-may-hide-its-content-if-i-move-a
2025-06-29 08:02:55 -07:00
Gregory Schier
d3cda19be2 Hide large request bodies by default 2025-06-29 07:30:07 -07:00
Gregory Schier
9b0a767ac8 Prevent command palette from jumping with less results 2025-06-28 07:37:15 -07:00
Gregory Schier
81c3de807d Add json.minify 2025-06-28 07:29:24 -07:00
Gregory Schier
9ab02130b0 Fix sync import issues:
https://feedback.yaak.app/p/yaml-error-missing-field-type-at-line-4521-column-1
2025-06-27 13:32:52 -07:00
Gregory Schier
25d50246c0 Revert notification endpoint URL for dev 2025-06-27 11:58:04 -07:00
Gregory Schier
bb0cc16a70 Use API client for notifications/license 2025-06-25 08:17:17 -07:00
Gregory Schier
8817be679b Fix PKCE flow and clean up other flows 2025-06-25 07:10:11 -07:00
Gregory Schier
f476d87613 Add back unsigned memory entitlement 2025-06-24 06:21:07 -07:00
Gregory Schier
1438e8bacc Upgrade eslint and fix issues 2025-06-23 14:09:09 -07:00
Gregory Schier
7be2767527 Fix lint error 2025-06-23 09:51:44 -07:00
Gregory Schier
a1b1eafd39 Add links to plugins 2025-06-23 09:46:54 -07:00
Gregory Schier
1948fb78bd Fix bad import 2025-06-23 08:57:31 -07:00
Gregory Schier
cb7c44cc65 Install plugins from Yaak plugin registry (#230) 2025-06-23 08:55:38 -07:00
Gregory Schier
b5620fcdf3 Merge pull request #227
* Search and install plugins PoC

* Checksum

* Tab sidebar for settings

* Fix nested tabs, and tweaks

* Table for plugin results

* Deep links working

* Focus window during deep links

* Merge branch 'master' into plugin-directory

* More stuff
2025-06-22 07:06:43 -07:00
Mr0Bread
b8e6dbc7c7 GraphQL Documentation explorer (#208) 2025-06-17 17:08:39 -07:00
Gregory Schier
aadfbfdfca Fix lint errors 2025-06-10 08:16:02 -07:00
Gregory Schier
383fd05c6c Split appearance settings into theme/interface 2025-06-09 21:19:44 -07:00
Gregory Schier
be0a8fc27a Add proxy bypass setting and rewrite proxy logic 2025-06-09 14:29:12 -07:00
Gregory Schier
648a1ac53c Update DEVELOPMENT.md 2025-06-08 22:49:43 -07:00
Gregory Schier
9fab37fb17 Custom font selection (#226) 2025-06-08 22:48:27 -07:00
Gregory Schier
e0aaa33ccb Update README 2025-06-08 08:17:11 -07:00
Gregory Schier
20f7d20031 Enable socks reqwest feature 2025-06-08 08:10:55 -07:00
Gregory Schier
4d90bc78b1 Link docs in readme 2025-06-08 08:05:59 -07:00
Gregory Schier
97763a1301 Add README to types package 2025-06-08 08:03:11 -07:00
Gregory Schier
d8b5a201b6 I'm stupid 2025-06-07 20:17:28 -07:00
Gregory Schier
88e87a1999 Fix stupid typo 2025-06-07 20:15:32 -07:00
Gregory Schier
2c4c1abd20 Pin tauri cli 2025-06-07 20:04:04 -07:00
Gregory Schier
67026fc5b3 Tweak 2025-06-07 19:37:28 -07:00
Gregory Schier
423a1a0a52 Fix environment color editing 2025-06-07 19:32:23 -07:00
Gregory Schier
1abe01aa5a Embed migrations into Rust binary 2025-06-07 19:25:36 -07:00
Gregory Schier
d0fde99b1c Environment colors (#225) 2025-06-07 18:21:54 -07:00
Gregory Schier
27901231dc Clarify proxy HTTP/HTTPS setting 2025-06-06 20:34:23 -07:00
Gregory Schier
1d9d80319b Upgrade dependencies 2025-06-06 19:32:25 -07:00
Gregory Schier
f62e90297d Fix recent workspaces when open in new window 2025-06-06 14:10:30 -07:00
Gregory Schier
fcda6f8d32 Fix lint errors 2025-06-04 11:33:10 -07:00
Gregory Schier
021f2171d6 Show error dialog on migration failure 2025-06-04 11:20:28 -07:00
Gregory Schier
2562cf7c55 Setting to colorize HTTP methods
https://feedback.yaak.app/p/support-colors-for-http-method-in-sidebar
2025-06-04 10:59:40 -07:00
Gregory Schier
58873ea606 Fix text streaming breaking scroll 2025-06-04 10:38:55 -07:00
Gregory Schier
9d9e83d59f Remove sqlx for migrations (#224) 2025-06-03 14:42:32 -07:00
Gregory Schier
01d40f5b0d Fix context_id for Workspace/Folder auth 2025-06-03 13:08:48 -07:00
Gregory Schier
bdb1adcce1 Fix TS type 2025-06-03 12:44:14 -07:00
Gregory Schier
9f6a3da8d3 Disable auth for OAuth token http requests 2025-06-03 12:42:31 -07:00
Gregory Schier
158487e3a6 sqlx log DEBUG to debug failed migrations 2025-06-03 11:01:51 -07:00
Gregory Schier
c1b18105b5 Fix log toast 2025-06-03 09:33:03 -07:00
James Cleverley-Prance
eb5ef7d7d5 fix: send id_token in OAuth2 requests (#223) 2025-06-03 09:28:56 -07:00
Gregory Schier
6eb16afd96 Add debug logs for oauth plugin 2025-06-03 09:27:54 -07:00
Gregory Schier
9e68e276a1 Fix plugin runtime not quitting on cmd+Q
Related https://github.com/tauri-apps/tauri/issues/9198
2025-06-01 07:46:31 -07:00
Gregory Schier
af230a8f45 Separate model for GQL introspection data (#222) 2025-06-01 06:56:00 -07:00
Gregory Schier
f9ac36caf0 SyncState migration to include sync_dir in unique index:
https://feedback.yaak.app/p/after-setting-up-sync-to-folder-there-is-a-yaml
2025-05-31 12:56:13 -07:00
Gregory Schier
a7a301ceba Add JSON language check 2025-05-30 10:02:43 -07:00
Gregory Schier
4166daf0a2 Hide escape character for forward slash in JSON 2025-05-30 10:00:17 -07:00
Gregory Schier
b52570bf58 Support id_token for OAuth 2.0
https://feedback.yaak.app/p/unable-to-use-idtoken-for-auth-in-authorization-code-oauth2
2025-05-30 08:02:29 -07:00
Gregory Schier
1e27e1d8cb Remove .idea 2025-05-29 21:45:58 -07:00
Gregory Schier
7047260697 Remove yaakapp/cli from release CI 2025-05-29 21:44:41 -07:00
John D. Chancey
fa33a89b63 fix: add missing yaakcli to dev dependencies (#221) 2025-05-29 15:57:13 -07:00
dependabot[bot]
00c0884616 Bump jsonpath-plus from 9.0.0 to 10.3.0 (#220)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-29 08:05:45 -07:00
Gregory Schier
a70768b61d Merge remote-tracking branch 'origin/master' 2025-05-29 08:03:06 -07:00
Gregory Schier
8e3826b6c3 Delete unneeded 2025-05-29 08:02:57 -07:00
Gregory Schier
101efdd512 Merge plugins repo into mono 2025-05-29 08:02:24 -07:00
Gregory Schier
723e8d2874 Move everything into subdir for repo merge 2025-05-29 07:16:39 -07:00
John D. Chancey
385a369699 Fix: Add yaakcli to dev dependencies (#9) 2025-05-29 07:07:59 -07:00
James Cleverley-Prance
79362c81e5 fix: oauth2 audience not sent (#10) 2025-05-29 07:06:24 -07:00
Andy Bao
bd1986f31f Fix "Validate TLS Certificates" option for WS and GRPC (#218) 2025-05-29 07:02:27 -07:00
Gregory Schier
085b640b3c Update plugins 2025-05-28 14:07:00 -07:00
Gregory Schier
d07272003b Fix JSONPath function quoting strings 2025-05-28 14:06:17 -07:00
Gregory Schier
bbf2b6dec0 Remove console.log 2025-05-28 13:14:46 -07:00
Gregory Schier
399cd35b2b Don't return "undefined" when no XPath match 2025-05-28 13:14:32 -07:00
Gregory Schier
72dd768f55 Proper handling of boolean template function args 2025-05-28 13:08:43 -07:00
Gregory Schier
053cbe49f9 UUID, json/x path 2025-05-28 13:07:29 -07:00
Gregory Schier
862d85e48d Better inheritance empty state 2025-05-28 10:42:57 -07:00
Gregory Schier
a6d03cbeeb Fix context menu closing immediately when using ctrl+click
https://feedback.yaak.app/p/right-click-on-mac-automatically-closes
2025-05-28 07:36:18 -07:00
Gregory Schier
7d1ca1c232 Render inherited auth and headers (#217) 2025-05-26 07:18:57 -07:00
Gregory Schier
261911b57e Fix weird import 2025-05-25 20:45:12 -07:00
Gregory Schier
245054cd7d Move react-pdf dynamic import 2025-05-25 20:39:14 -07:00
Gregory Schier
21b9e5a02b Url encode/decode functions 2025-05-25 20:34:05 -07:00
Gregory Schier
6d6012fe67 More template functions 2025-05-25 20:27:04 -07:00
Gregory Schier
101582e540 Merge remote-tracking branch 'origin/master' 2025-05-25 20:25:22 -07:00
Gregory Schier
0a932798a0 API support for added template functions (eg. cookies) 2025-05-25 20:25:13 -07:00
Gregory Schier
4609c95ad5 Fix env editor switching (#216) 2025-05-25 08:03:29 -07:00
Gregory Schier
9d54e40aa8 Add list/get cookie plugin APIs 2025-05-25 08:02:36 -07:00
Gregory Schier
9ec9222216 Fix cookie jar not updating during chained requests
https://feedback.yaak.app/p/request-chaining-cookie-not-appear
2025-05-25 07:04:40 -07:00
Gregory Schier
4d1dda0786 Fix auth none 2025-05-23 08:43:52 -07:00
Gregory Schier
31605881ac Render inherited headers in UI 2025-05-23 08:18:29 -07:00
Gregory Schier
4cd2e9cd31 Request Inheritance (#209) 2025-05-23 08:13:25 -07:00
nguyen
13d959799a fix: prevent button stealing focus from url input (#212) 2025-05-23 08:12:06 -07:00
Pannawich Lohanimit
a6b18c23e1 fix: change incorrect default GraphQL request name (#213) 2025-05-23 08:11:16 -07:00
Gregory Schier
041298b3f8 Detect JSON language if application/javascript returns JSON 2025-05-21 11:05:20 -07:00
Gregory Schier
b400940f0e Fix import curl 2025-05-21 11:04:57 -07:00
Gregory Schier
2e144f064d Fix syntax highlighting 2025-05-21 08:26:15 -07:00
Gregory Schier
d8b1cadae6 Fix model deletion 2025-05-21 08:25:12 -07:00
Gregory Schier
c2f9760d08 Fix template parsing 2025-05-21 08:18:09 -07:00
Gregory Schier
a4c600cb48 Lint errors 2025-05-20 08:15:19 -07:00
Gregory Schier
bc3a5e3e58 Include license status in notification endpoint 2025-05-20 08:13:57 -07:00
Gregory Schier
d02883282f Merge remote-tracking branch 'origin/main' 2025-05-20 08:09:11 -07:00
Gregory Schier
2c3fb25932 Fix Insomnia v5 importer 2025-05-20 08:08:56 -07:00
Gregory Schier
4c3a02ac53 Show decrypt error in secure input 2025-05-20 07:41:32 -07:00
Gregory Schier
1974d61aa4 Fix syntax highlighting 2025-05-19 15:41:19 -07:00
Gregory Schier
0bcb092854 Update README.md 2025-05-19 15:10:56 -07:00
Gregory Schier
409620f533 More advanced template grammar
Fixes https://feedback.yaak.app/p/cannot-escape-call-to-variable-in-json-body
2025-05-19 13:37:12 -07:00
Étienne Lévesque
4ae7f99264 fix: Fixes the implicit OAuth flow not waiting for user to authenticate (#8) 2025-05-17 13:47:24 -07:00
Gregory Schier
3e9037f70a No longer mark environments as external in Git 2025-05-17 06:06:36 -07:00
Desperate Necromancer
be82b67ed3 Allow disabling window decorations/controls (#176)
Co-authored-by: Gregory Schier <gschier1990@gmail.com>
2025-05-16 13:33:59 -07:00
Gregory Schier
432b366105 Fix grpc/ws events error 2025-05-16 13:00:50 -07:00
Hao Xiang
42e70b941d fix proto to json-schema (#194) 2025-05-16 12:53:53 -07:00
Gregory Schier
3808215210 Better unicode un-escaping 2025-05-16 12:42:08 -07:00
Walyson G Oliveira
763a60982a Adjusting the JSON viewing response to accept accentuation (#203) 2025-05-16 12:37:00 -07:00
dependabot[bot]
a05679fd93 Bump vite from 6.2.6 to 6.2.7 in /src-web (#205)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-16 12:31:46 -07:00
Gregory Schier
73c366dc27 Hopefully fix weird env routing issue 2025-05-16 09:12:36 -07:00
Gregory Schier
c73f0b02bd print body in OAuth 2 http errors 2025-05-16 08:16:18 -07:00
Gregory Schier
0be7d0283b Add ref=<app_id> to external links pointing to yaak.app 2025-05-16 07:53:22 -07:00
Gregory Schier
9615d3e29b Add audience parameter to OAuth 2
Closes https://feedback.yaak.app/p/how-do-i-send-an-audience-using-oauth2
2025-05-16 07:17:22 -07:00
Gregory Schier
749df338c5 Disable wasm-opt 2025-05-15 14:29:29 -07:00
Gregory Schier
3184c1b79e Remove dynamic imports 2025-05-15 12:29:45 -07:00
Gregory Schier
b52bf7cd56 Fix HttpResponse AnyModel deserialization 2025-05-15 09:37:05 -07:00
Gregory Schier
d962d7f94b remove codemirror dep and restructure a bit 2025-05-15 09:28:14 -07:00
Gregory Schier
21e2a67c1e Fix sidebar scroll drag
https://feedback.yaak.app/p/endpoinst-scrollbar-not-clickable
2025-05-15 07:10:08 -07:00
Gregory Schier
c188435524 Fix obscured text overflow
https://feedback.yaak.app/p/pasting-token-auth-results-in-invisible-text
2025-05-15 07:00:25 -07:00
Gregory Schier
8a7a7ba49d Try fixing trusted-signing-cli 2025-05-14 20:43:59 -07:00
Gregory Schier
cbc40230bb Fix cursor position after variable on Linux
Closes https://feedback.yaak.app/p/editing-the-url-sometimes-freezes-the-app
2025-05-14 20:05:04 -07:00
Gregory Schier
bc4c3178c9 Add Content-Length: 0 default for post/put/patch
https://feedback.yaak.app/p/missing-content-length
2025-05-13 21:58:00 -07:00
Gregory Schier
121fe5b3ea Fix help text 2025-05-13 11:53:46 -07:00
Gregory Schier
861609ddc0 Update encryption help 2025-05-13 11:38:02 -07:00
Gregory Schier
e5070513ac Regenerate types 2025-05-13 10:45:41 -07:00
Gregory Schier
f5c3798df9 Ability to disable proxy config
Closes https://feedback.yaak.app/p/proxy-save-last-data
2025-05-13 10:35:02 -07:00
Gregory Schier
469d12fede Don't query KeyValue.id == NULL 2025-05-13 10:11:24 -07:00
Gregory Schier
417a02744b Don't select <Input/> text when focus is due to window focus
Closes https://feedback.yaak.app/p/url-input-auto-selects-all-text-when-regaining-focus-after
2025-05-12 22:19:16 -07:00
Gregory Schier
81e78ef24c Fix auth padding 2025-05-12 16:57:43 -07:00
Gregory Schier
dad9cebb9e Don't send empty ? for ws query params 2025-05-12 16:57:13 -07:00
Gregory Schier
b3ede3d6d6 Add error boundaries 2025-05-12 15:53:21 -07:00
Gregory Schier
035fe54df0 Send grpc metadata/auth with reflection requests
Closes https://feedback.yaak.app/p/send-metadata-during-grpc-reflection
2025-05-11 07:20:57 -07:00
Gregory Schier
5f8d99ba64 Build plugins 2025-05-11 06:46:51 -07:00
Gregory Schier
8c0f889dd2 Insomnia v5 importer (#7)
Add support for the new Insomnia 5 export format
2025-05-11 06:44:54 -07:00
Gregory Schier
84b8d130dc Some small tweaks for plugins 2025-05-11 06:36:50 -07:00
Gregory Schier
20b0b4fb69 Add test 2025-05-11 06:31:21 -07:00
mooonfly
8be9c4c388 fix curl import params (#6) 2025-05-11 06:22:36 -07:00
Gregory Schier
a5333deb71 Logic for new Environment.base field 2025-05-08 14:28:41 -07:00
Gregory Schier
94d4227bc1 Ability to sync environments to folder (#207) 2025-05-08 14:10:07 -07:00
Gregory Schier
77cdea2f9f Merge remote-tracking branch 'origin/master' 2025-05-08 08:02:32 -07:00
Gregory Schier
8b1ca4cb47 Fix copy response body reference
Closes https://feedback.yaak.app/p/copy-body-only-works-on-first-click
2025-05-08 08:02:27 -07:00
Gregory Schier
d3b8a42180 Update README.md 2025-05-07 12:00:34 -07:00
Gregory Schier
95f39c514a Update README.md 2025-05-07 11:59:01 -07:00
hexchain
7cba082eb0 Allow building and running on aarch64 Linux (#206)
Co-authored-by: Haochen Tong <haochentong@bytedance.com>
2025-05-01 08:06:13 -07:00
Billzabob
3b9b320be2 Send cookies for introspection (#204) 2025-04-30 10:13:06 -07:00
Gregory Schier
18664975a9 Padding on encrypted input 2025-04-26 07:33:32 -07:00
Gregory Schier
bb014b7c43 Remove folder/environment foreign keys to make sync/import easier, and simplify batch upsert code. 2025-04-24 19:57:02 -07:00
Gregory Schier
9fa0650647 Add scrollbar to sidebar
Fixes: https://feedback.yaak.app/p/missing-scrollbar-on-request-list
2025-04-22 07:48:34 -07:00
Gregory Schier
b8c42677ca Fix cmd+p filtering reference
https://feedback.yaak.app/p/search-doesnt-actually-search-through-all-the-apis
2025-04-22 07:46:10 -07:00
Gregory Schier
2eb3c2241c Fix duration tag
Closes: https://feedback.yaak.app/p/elapsed-time-not-stopping-on-failed-request
2025-04-22 07:29:17 -07:00
Gregory Schier
8fb7bbfe2e Don't prompt user for keychain password more than once 2025-04-22 07:23:05 -07:00
Gregory Schier
52eba74151 Handle no text 2025-04-22 07:01:48 -07:00
Gregory Schier
e651760713 Merge remote-tracking branch 'origin/master' 2025-04-22 06:59:11 -07:00
Gregory Schier
82451a26f6 Use mimeType for response viewer 2025-04-22 06:58:53 -07:00
jzhangdev
cc15f60fb6 Fix header layout (#182) 2025-04-22 06:51:39 -07:00
Gregory Schier
2f8b2a81c7 Fix jotai/index imports 2025-04-21 07:08:13 -07:00
Gregory Schier
6d4fdc91fe Fix text decoding when no content-type
Closes https://feedback.yaak.app/p/not-rendering-response
2025-04-21 06:54:03 -07:00
Gregory Schier
faca29c789 Fix key/value re-render issue 2025-04-20 07:08:46 -07:00
Gregory Schier
1ab937aae4 Fix infinite GraphQL render loop 2025-04-17 14:45:33 -07:00
Gregory Schier
45fcea1954 Real-time response time
Closes https://feedback.yaak.app/p/real-time-display-of-request-execution-timer
2025-04-17 14:16:10 -07:00
Gregory Schier
73554078d1 Add elapsed after headers 2025-04-17 07:01:31 -07:00
Gregory Schier
a42a88de7b Don't parse URI for HTTP requests anymore.
Fixes https://feedback.yaak.app/p/using-chinese-characters-in-request-parameters-can-result-in-errors
2025-04-17 06:48:39 -07:00
Gregory Schier
14a6079176 Fix URL grammar for path parameters 2025-04-17 06:30:48 -07:00
Gregory Schier
6c513616c0 Don't vendor keyring (libdbus) 2025-04-16 10:46:12 -07:00
Gregory Schier
cdf5f1b7a5 Fix vite and top-level-await build error 2025-04-15 07:57:32 -07:00
Gregory Schier
6566857d54 Adjust keychain config for dev 2025-04-15 07:28:01 -07:00
Gregory Schier
2e55a1bd6d [WIP] Encryption for secure values (#183) 2025-04-15 07:18:26 -07:00
Gregory Schier
e114a85c39 Render gRPC request for reflection.
Closes https://feedback.yaak.app/p/grpc-address-reflection-and-address-bar-issues
2025-03-31 12:26:07 -07:00
Gregory Schier
92be088e6c useClickOutside account for right click 2025-03-31 11:57:50 -07:00
Gregory Schier
f1757ae427 Generalized frontend model store (#193) 2025-03-31 11:56:17 -07:00
Gregory Schier
ce885c3551 port window ext from encryption PR 2025-03-26 11:46:55 -07:00
Gregory Schier
17657a4d04 plugin:yaak-models|upsert PoC 2025-03-26 09:54:42 -07:00
Gregory Schier
b7f62b78b1 Clean up DB refactor access (#192) 2025-03-26 07:54:58 -07:00
Gregory Schier
006284b99c Fix scrollbars 2025-03-25 09:38:15 -07:00
Gregory Schier
bac3968aac Revert scrollbar fix 2025-03-25 09:23:45 -07:00
Gregory Schier
e5fa044eda Merge remote-tracking branch 'origin/master' 2025-03-25 09:23:33 -07:00
Gregory Schier
5969120140 Fix folder upsert 2025-03-25 09:23:26 -07:00
dependabot[bot]
8801936ad2 Bump vite from 6.0.6 to 6.0.12 (#191)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-25 09:13:56 -07:00
Gregory Schier
1d37d46130 Database access refactor (#190) 2025-03-25 08:35:10 -07:00
Gregory Schier
445c30f3a9 Fix iframe scrollbar 2025-03-23 06:57:36 -07:00
Gregory Schier
5fedea38c2 Fix lint error 2025-03-21 07:42:05 -07:00
Gregory Schier
d86549f492 Always show GQL schema dropdown.
Fixes https://feedback.yaak.app/p/unable-to-disable-graphql-automatic-introspection
2025-03-21 07:28:08 -07:00
Gregory Schier
4c4eaba7d2 Queries now use AppHandle instead of Window (#189) 2025-03-20 09:43:14 -07:00
Gregory Schier
cf8f8743bb Remove non-existing import 2025-03-20 06:23:36 -07:00
Andy Bao
aa75636026 Fix labels in GRPC service/method selector dropdown (#188) 2025-03-20 06:07:31 -07:00
Gregory Schier
2c41b243b6 Some cleanup around window creation 2025-03-20 06:05:17 -07:00
Gregory Schier
6aea343d4f Shorten data directory description 2025-03-19 11:41:14 -07:00
Gregory Schier
c300e8cbd5 Fix dropdown refresh after Git init 2025-03-19 11:35:20 -07:00
dependabot[bot]
6e25c26e9f Bump zip from 2.1.6 to 2.4.1 in /src-tauri (#185)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-19 09:09:02 -07:00
Gregory Schier
dce1455be7 Inline to_fixed_hash fn 2025-03-19 08:52:02 -07:00
Gregory Schier
736025b12f Move editor search to top 2025-03-19 08:22:57 -07:00
Gregory Schier
cb9e9a67a3 Try registering URL scheme 2025-03-19 07:58:12 -07:00
Gregory Schier
93c323458f Tweak Git history table 2025-03-19 06:59:54 -07:00
Gregory Schier
6f8c03d8c1 Fix git confid for commit 2025-03-19 06:59:43 -07:00
Gregory Schier
afd4228fcf Don't style scrollbars on mac 2025-03-19 06:49:14 -07:00
Gregory Schier
d478e5a12e Hotkey scrolling 2025-03-19 06:48:29 -07:00
Gregory Schier
0db9ebe67d Better Codemirror search match styles 2025-03-19 06:48:07 -07:00
Gregory Schier
80ea5e6b91 Fix autoscroller header scrolling 2025-03-19 06:37:02 -07:00
Gregory Schier
cb773babe1 Nested template functions (#186) 2025-03-18 12:49:19 -07:00
Gregory Schier
b9ed554aca Remove useTemplating prop (#184) 2025-03-18 05:34:38 -07:00
Gregory Schier
f42f3d0e27 Support multi-line params and env vars 2025-03-17 09:29:37 -07:00
Gregory Schier
93ba5b6e5c Fix close bracket bug 2025-03-13 13:09:13 -07:00
Gregory Schier
be11d5968e Fix notification not showing all 2025-03-12 06:41:53 -07:00
Gregory Schier
0828599e4f Don't switch to XML for HTML responses.
Fixes https://feedback.yaak.app/p/issue-with-rendering-html-responses-after-update
2025-03-08 08:34:41 -08:00
dependabot[bot]
f47d22c395 Bump ring from 0.17.8 to 0.17.13 in /src-tauri (#181)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-08 08:11:38 -08:00
Gregory Schier
edf65a62c2 Bump openapi-to-postmanv2 2025-03-08 08:06:27 -08:00
Gregory Schier
12233cb6f6 Build plugins 2025-03-08 08:06:18 -08:00
Hao Xiang
cdce2ac53a fix ws connection state (#175)
Co-authored-by: Gregory Schier <gschier1990@gmail.com>
2025-03-08 08:03:16 -08:00
Gregory Schier
f4d0371060 Merge remote-tracking branch 'origin/master' 2025-03-06 07:15:07 -08:00
Gregory Schier
787a0433cb Support _PREFIXED variable names and fail when variable missing 2025-03-06 07:15:02 -08:00
Gregory Schier
2cf2c13175 Bump dep 2025-03-06 07:00:19 -08:00
Gregory Schier
493e844c01 Fix access token refreshing 2025-03-06 07:00:11 -08:00
Gregory Schier
60ea408e51 Add sponsor button
Some people want to contribute additional funds, so this makes it easier.
2025-03-06 06:46:02 -08:00
Gregory Schier
0db0cdfd6c Only font rendering fix for Linux 2025-03-06 06:29:03 -08:00
Gregory Schier
26371e5f6b Ignore whitespace during content type detection 2025-03-06 06:22:21 -08:00
Hermes Junior
6b7c144a11 Fix font aliasing on webkit. (#178) 2025-03-06 06:19:16 -08:00
Andy Bao
62f43ca24c Fix wrong protoc includes path (#179) 2025-03-06 06:18:06 -08:00
Gregory Schier
fbf4d3c11e Make rendering return Result, and handle infinite recursion 2025-03-05 13:49:45 -08:00
Gregory Schier
7a1a0689b0 Add ability to deactivate license 2025-03-05 07:13:19 -08:00
Hao Xiang
9ead45d67a fix plugin manager listen addr (#177) 2025-03-02 05:51:19 -08:00
Gregory Schier
eb8153f409 Better trial activation flows 2025-02-25 22:16:55 -08:00
Gregory Schier
80de232bec Fix dropdown button icon 2025-02-25 19:52:57 -08:00
Gregory Schier
7af8c95fea Allow opening workspace if sync dir not empty 2025-02-25 06:54:30 -08:00
Gregory Schier
2db72fe6ef Fix WS duplication from context menu 2025-02-25 06:10:35 -08:00
Gregory Schier
d297e92a5a Fix content type parsing exception 2025-02-24 22:44:58 -08:00
Gregory Schier
7e1da4395d Build OAuth 2 plugin 2025-02-24 22:34:29 -08:00
Gregory Schier
dfaeda224d Merge remote-tracking branch 'origin/main' 2025-02-24 22:34:15 -08:00
Gregory Schier
c0dbe46318 Better data key for window 2025-02-24 22:34:10 -08:00
Gregory Schier
7f8b0479e1 Plugin window data directory key 2025-02-24 22:32:40 -08:00
Gregory Schier
c8d6183456 Reduce plugin runtime memory 2025-02-24 12:20:47 -08:00
Gregory Schier
9d5f7784c4 Fix code splitting from tanstack/router migration 2025-02-24 07:12:45 -08:00
Gregory Schier
05ac836265 Remove analytics and add more update headers 2025-02-24 06:31:49 -08:00
Gregory Schier
af7782c93b Better license flows 2025-02-24 05:59:15 -08:00
Gregory Schier
2b1431d041 Merge remote-tracking branch 'origin/master' 2025-02-23 06:25:59 -08:00
Gregory Schier
9d8b7a5265 Tweak getting content type 2025-02-23 06:25:53 -08:00
dependabot[bot]
95c12ad291 Bump openssl from 0.10.66 to 0.10.70 in /src-tauri (#161)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-23 06:09:26 -08:00
Gregory Schier
dac2cec52f Merge remote-tracking branch 'origin/master' 2025-02-23 06:06:43 -08:00
Gregory Schier
efe4eef1b7 Fix deleting selected environment 2025-02-23 06:05:01 -08:00
Hao Xiang
a0e196a9e7 adding alternate key combinations for special shift (#173) 2025-02-22 07:00:04 -08:00
Gregory Schier
abea5e6b5d Update README.md 2025-02-21 14:02:41 -08:00
Gregory Schier
c6427dc724 Update README.md 2025-02-21 14:02:29 -08:00
Gregory Schier
8ce1e22b4e Update README.md 2025-02-21 13:57:51 -08:00
Gregory Schier
022d725e03 Update issue templates 2025-02-21 13:53:54 -08:00
Gregory Schier
ed7fdb1b4c Only close brackets for json-like langs
Fixes #162
2025-02-21 13:50:21 -08:00
Gregory Schier
52937c3097 Soft required field 2025-02-21 13:43:19 -08:00
Gregory Schier
597b5bb783 Make all OAuth 2.0 fields optional
Closes mountain-loop/yaak#165
2025-02-21 13:40:05 -08:00
Gregory Schier
e510204b8c More monospace fallbacks
Closes #167
2025-02-21 13:36:54 -08:00
Gregory Schier
d31b4448df Pass templating vars to recursive children (closes #171) 2025-02-21 13:34:15 -08:00
Gregory Schier
e420a0a45e Don't expand the directory setting when creating workspace 2025-02-21 13:18:47 -08:00
Gregory Schier
84ecbe0cd6 Better querystring import (https://feedback.yaak.app/p/url-pasted-params-parsed-incorrectly) 2025-02-21 13:16:09 -08:00
Gregory Schier
6a63cc26b9 Fix commit-and-push loading state 2025-02-19 10:35:41 -08:00
Gregory Schier
8ed0fd55c3 Remove environments from synced folder, and stop syncing 2025-02-19 10:35:31 -08:00
Gregory Schier
74f14a8392 Tweak some things for launch 2025-02-18 21:28:03 -08:00
Gregory Schier
ccbc8d4e18 Update 2025-02-15 12:04:35 -08:00
Gregory Schier
e4cc11aec5 Update 2025-02-15 07:29:50 -08:00
Gregory Schier
7fdf6f2798 Update 2025-02-15 07:12:12 -08:00
Gregory Schier
2aa27f7003 Create FUNDING.yml 2025-02-15 05:22:39 -08:00
Gregory Schier
3aaa0355e1 Show folders in sync confirm dialog 2025-02-09 08:35:29 -08:00
Gregory Schier
325c88f251 Show push errors in commit dialog 2025-02-07 22:50:12 -08:00
Gregory Schier
83ab93cebf Show push errors in commit dialog 2025-02-07 22:20:39 -08:00
Gregory Schier
c6289f13c1 Handle external files 2025-02-07 22:14:40 -08:00
Gregory Schier
266892dc8d Error for http remotes 2025-02-07 13:31:27 -08:00
Gregory Schier
a42bee098b Handle remote branches 2025-02-07 13:21:30 -08:00
Gregory Schier
2da898d2d4 Cargo lock 2025-02-07 12:38:59 -08:00
Gregory Schier
246e0d3f79 Vendor openssl for lib git 2025-02-07 12:38:39 -08:00
Gregory Schier
1a7c27663a Git support (#143) 2025-02-07 07:59:48 -08:00
Gregory Schier
cffc7714c1 Update README.md 2025-02-04 06:58:34 -08:00
Gregory Schier
25c1b04043 New loading icon 2025-02-04 06:52:25 -08:00
Gregory Schier
4d80c8d993 Actually handle "enabled" checkbox on auth form 2025-02-03 12:53:11 -08:00
Gregory Schier
1682d1ef0c Fix banner height 2025-02-03 12:46:15 -08:00
Gregory Schier
903bae2a18 Fix large response banner height 2025-02-03 12:41:11 -08:00
Gregory Schier
a15176841b Add features to README 2025-02-03 12:19:13 -08:00
Gregory Schier
11ef1ff2c6 Add features to README 2025-02-03 12:17:36 -08:00
Gregory Schier
615ad81ab5 Fix row height debug thing 2025-02-03 12:00:51 -08:00
Gregory Schier
fcf2577430 Url parameters for websocket URLs 2025-02-03 11:40:19 -08:00
Gregory Schier
dd0516cc55 Support list of notifications 2025-02-03 07:12:32 -08:00
Gregory Schier
17dc1991f1 Auto-scroll component for websocket/grpc/sse 2025-02-03 07:05:14 -08:00
Gregory Schier
be0ef7afce Fix sync 2025-01-31 09:27:38 -08:00
Gregory Schier
6ab9c1c3a0 Pre-publish stuff 2025-01-31 09:05:44 -08:00
Gregory Schier
d9a1e124f5 package-lock.json 2025-01-31 09:05:19 -08:00
Gregory Schier
5f0b7055bf Bump plugin types 2025-01-31 09:05:09 -08:00
Gregory Schier
c8be8082c5 Websocket Support (#159) 2025-01-31 09:00:11 -08:00
Gregory Schier
d411713502 Fix dynamic form defaults 2025-01-27 08:38:53 -08:00
Gregory Schier
1ae6837842 Remove log 2025-01-27 08:37:54 -08:00
Gregory Schier
93bd437e71 Fix editor formatting 2025-01-27 08:17:31 -08:00
Gregory Schier
229d9c1bd6 Better HTTP methods 2025-01-27 07:59:00 -08:00
Gregory Schier
662c38d7a0 Multi-line multi-part values 2025-01-27 07:30:06 -08:00
Gregory Schier
1d37a15cfe Fix types 2025-01-27 06:06:02 -08:00
Gregory Schier
252d23bb0e Support for OAuth 2.0 (#5) 2025-01-26 13:32:17 -08:00
Gregory Schier
22db739413 Swap curl and license badge 2025-01-26 13:19:26 -08:00
Gregory Schier
6393bbbc0e Slight padding 2025-01-26 13:18:40 -08:00
Gregory Schier
f678593903 OAuth 2 (#158) 2025-01-26 13:13:45 -08:00
Gregory Schier
82b1ad35ff Fix UrlBar wrapping on focus 2025-01-22 06:43:38 -08:00
Gregory Schier
4ae045cf18 Fix Faker issue 2025-01-21 13:23:13 -08:00
Gregory Schier
5d505d1366 Fix plugin runtime port 2025-01-21 06:09:36 -08:00
Gregory Schier
c58bfeb109 Use less sessionStorage for editor state 2025-01-20 14:56:25 -08:00
Gregory Schier
2a2fe700b4 Fix loading state 2025-01-20 14:23:24 -08:00
Gregory Schier
19403983b7 Better reading of response body 2025-01-20 14:12:49 -08:00
Gregory Schier
8ad7ac0bef Clean up model fetching and loading states 2025-01-20 13:44:11 -08:00
Gregory Schier
d142966d0c Update plugins 2025-01-20 13:07:04 -08:00
Gregory Schier
0453e84d38 Remove response text state key 2025-01-20 10:58:32 -08:00
Gregory Schier
b698a56549 Websockets for plugin runtime communication (#156) 2025-01-20 10:55:53 -08:00
Gregory Schier
095aaa5e92 Update release.yml 2025-01-19 06:34:50 -08:00
Gregory Schier
b1fe763591 Update release.yml 2025-01-19 05:53:09 -08:00
Gregory Schier
2257e88c51 Fix window creation due to manual state restore 2025-01-18 23:04:52 -08:00
Gregory Schier
9415a3a8d7 Remember size of settings window 2025-01-18 21:14:20 -08:00
Gregory Schier
590ef7839c NPM install 2025-01-18 17:57:47 -08:00
Gregory Schier
d6767f2e72 Merge remote-tracking branch 'origin/master' 2025-01-18 17:56:39 -08:00
Gregory Schier
cdcff7fd8c Create DB if missing 2025-01-18 17:56:26 -08:00
Gregory Schier
a477b10109 Fix default values for template tags 2025-01-17 16:07:13 -08:00
Gregory Schier
a221b05cc6 Even better 2025-01-17 15:55:21 -08:00
Gregory Schier
dcd1be3fec Fix default values in dynamic forms 2025-01-17 15:51:00 -08:00
Gregory Schier
7a6ab60d30 Tweaks for JWT auth 2025-01-17 15:23:15 -08:00
Gregory Schier
26cce077bb Secret key to editor type 2025-01-17 15:21:41 -08:00
Gregory Schier
0491bed46d A few tweaks 2025-01-17 15:10:02 -08:00
Gregory Schier
16af8bf008 JWT plugin 2025-01-17 14:38:17 -08:00
Gregory Schier
6ae0bc1ef6 Work required to support the JWT plugin 2025-01-17 14:36:55 -08:00
Gregory Schier
153a40cfb1 Fix DB connection on Windows 2025-01-17 14:02:03 -08:00
Gregory Schier
07ff709429 JWT auth plugin and necessary updates 2025-01-17 08:02:55 -08:00
Gregory Schier
064416398b JWT auth plugin and updates 2025-01-17 08:01:50 -08:00
Gregory Schier
bd322162c8 Auth plugins (#155) 2025-01-17 05:53:03 -08:00
Gregory Schier
ebb7b69dd8 Add auth plugins 2025-01-16 15:28:25 -08:00
Gregory Schier
e21df98a30 Timeout release builds 2025-01-15 08:55:22 -08:00
Gregory Schier
3614c2acd5 Better mutation errors and fix workspace creation 2025-01-15 07:40:35 -08:00
Gregory Schier
0e21d901cd save window state on window close 2025-01-15 07:06:51 -08:00
Gregory Schier
ef8806212c Merge remote-tracking branch 'origin/master' 2025-01-15 06:02:44 -08:00
Gregory Schier
4ee5c26e7d Update window state logic 2025-01-15 06:02:27 -08:00
Gregory Schier
13fb40b225 Merge remote-tracking branch 'origin/master' 2025-01-15 05:53:24 -08:00
Gregory Schier
155413f8ac Fix window maximization state 2025-01-15 05:53:17 -08:00
Gregory Schier
24f4b62cff Fix window state preservation 2025-01-15 05:53:00 -08:00
Gregory Schier
fdb4331032 Build plugins 2025-01-14 11:03:15 -08:00
Gregory Schier
e213c76870 More plugins (#4) 2025-01-14 10:52:32 -08:00
Gregory Schier
8d645eb8c6 Fix sync setting truncation 2025-01-14 06:49:53 -08:00
Gregory Schier
592cf38e38 Fix yaak schema in export 2025-01-14 06:31:48 -08:00
Gregory Schier
ac0ecb342d Fix tab jiggle 2025-01-14 06:15:52 -08:00
Gregory Schier
439a29ab46 Update README 2025-01-14 06:15:46 -08:00
Gregory Schier
a80a25a90e Update for standalone base environments 2025-01-13 17:04:35 -08:00
Gregory Schier
db64b54c79 Slight cleanup 2025-01-13 16:59:39 -08:00
Gregory Schier
49f5e980de Clean up filesystem sync setting 2025-01-13 16:46:56 -08:00
Gregory Schier
658e2179ca Add beta feedback badge 2025-01-13 16:16:01 -08:00
Gregory Schier
e7184e4d47 Fix releases lint 2025-01-13 12:32:20 -08:00
Gregory Schier
6719573b2b Preserve dropdown trigger button background when menu is open 2025-01-13 12:28:31 -08:00
Gregory Schier
4479164321 Merge remote-tracking branch 'origin/master' 2025-01-13 12:11:42 -08:00
Gregory Schier
4295a09515 Adjust settings window and fix dynamic dialog 2025-01-13 12:11:38 -08:00
Gregory Schier
bb5da84c82 Fix Windows/Linux CmdCtrl hotkey 2025-01-13 12:10:23 -08:00
Gregory Schier
72ab3f0a3c Better SegmentedControl styles 2025-01-13 11:08:48 -08:00
Gregory Schier
eea87ac02f Better SegmentedControl styles 2025-01-13 11:08:04 -08:00
Gregory Schier
587667fe79 Better markdown editor and SegmentedControl 2025-01-13 10:46:13 -08:00
Gregory Schier
84c3987c34 Fix unused var 2025-01-13 09:58:37 -08:00
Gregory Schier
40a77be556 Update plugins 2025-01-13 08:53:14 -08:00
Gregory Schier
d37cfad862 Fix var underscores 2025-01-13 07:41:13 -08:00
Gregory Schier
34c0449a40 Merge remote-tracking branch 'origin/master' 2025-01-13 07:15:13 -08:00
Gregory Schier
ad4d695b75 Fix environment activation and setting active cookie jar 2025-01-13 07:15:01 -08:00
OTonGitHub
969e1b965d fix grammer in readme (#154) 2025-01-13 06:40:03 -08:00
Gregory Schier
88ff7f4300 Support dashes in template variable/fn names 2025-01-13 06:38:21 -08:00
Gregory Schier
8cd9c031e8 Add back sidebar hover style 2025-01-12 21:17:29 -08:00
Gregory Schier
806ce2f0ba Fix request pane name styling 2025-01-11 14:33:00 -08:00
Gregory Schier
dcb17c3ed4 Comment 2025-01-11 14:18:16 -08:00
Gregory Schier
d2936cb022 Ensure only one dropdown can be open at a time 2025-01-11 14:16:37 -08:00
Gregory Schier
ba330047ca Cargo format 2025-01-11 13:53:30 -08:00
Gregory Schier
295aea4f2e Add single-instance plugin 2025-01-11 13:50:44 -08:00
Gregory Schier
476dbc432b Add FocusTrap to dropdown menu to fix filtering 2025-01-11 12:15:01 -08:00
Gregory Schier
8dff75ad4f Add ability to exclude environments from data export 2025-01-11 11:36:00 -08:00
Gregory Schier
88b410bf99 Fix pairs language not highlighting 2025-01-11 08:54:45 -08:00
Gregory Schier
3d3ff2824f Improve Dropdown selection handling 2025-01-11 08:15:45 -08:00
Gregory Schier
3b56f4e142 Support TLS 1.3 (#153) 2025-01-11 06:51:34 -08:00
Gregory Schier
576340db33 Improve initial sync subscription 2025-01-11 06:47:03 -08:00
Gregory Schier
bcf5b3db84 Fix dropdown not closing when clicking trigger 2025-01-11 06:46:47 -08:00
Gregory Schier
8b5b66acf0 Don't load response when blocking large responses 2025-01-10 06:27:57 -08:00
Gregory Schier
f694456ddc Fix workspace creation, reveal sync dir, and don't update timestamps on sync/import 2025-01-09 07:50:23 -08:00
Gregory Schier
0a7257c55a Fix redirecting to latest workspace 2025-01-08 22:08:59 -08:00
Gregory Schier
328e3db56e Fix UpdateSource for sync upserts 2025-01-08 15:25:03 -08:00
Gregory Schier
cbc443075a Ability to open workspace from directory, WorkspaceMeta, and many sync improvements 2025-01-08 14:57:13 -08:00
Gregory Schier
37671a50f2 Ensure fs_sync always writes to current state's path (even if Yaak changes the default) 2025-01-08 09:20:59 -08:00
Gregory Schier
95266a9177 Tweak workspace settings dialog and Markdown editor 2025-01-08 08:54:40 -08:00
Gregory Schier
eeb66ca28a Fix UrlBar padding 2025-01-08 06:43:45 -08:00
Gregory Schier
d745e91f80 Backspace to delete selected in sidebar 2025-01-08 06:42:32 -08:00
Gregory Schier
7a9c2e2223 Move info tab to last 2025-01-08 06:21:44 -08:00
Gregory Schier
1d51bd642a Menu now uses "click away" instead of backdrop 2025-01-08 06:20:21 -08:00
Gregory Schier
1920f720a9 Some small tweaks for Vim mode 2025-01-08 06:11:05 -08:00
Gregory Schier
81005165f3 Vim/emacs/vscode keybindings 2025-01-07 22:27:43 -08:00
Gregory Schier
3cf372c01e Fix workspace creation dialog 2025-01-07 07:05:23 -08:00
Gregory Schier
2f7b66fc92 A bunch of changes, including moving prompt/confirm out of context 2025-01-07 06:56:51 -08:00
Gregory Schier
4776bbc753 Fix more 2025-01-07 05:37:50 -08:00
Gregory Schier
79f668c863 Fix split layout not always working 2025-01-07 05:36:27 -08:00
Gregory Schier
a164875104 Move saved tab state to jotai with LS 2025-01-06 17:06:56 -08:00
Gregory Schier
bc50891edb Remove useNavigate everywhere, and make request a query param. And convert dialog to Jotai 2025-01-06 16:54:07 -08:00
Gregory Schier
806a8eb801 Remove useToast everywhere 2025-01-06 12:21:21 -08:00
Gregory Schier
ab55c2e0ce Move toast state to Jotai 2025-01-06 12:05:43 -08:00
Gregory Schier
c2ea2a5fe5 Dir sync filesystem watching 2025-01-06 09:24:07 -08:00
Gregory Schier
c72180bb59 Upgrade Tauri and add Tauri devtools 2025-01-05 11:33:39 -08:00
Gregory Schier
17fdd608d1 Optimize directory sync performance 2025-01-05 10:56:40 -08:00
Gregory Schier
40adce921b Move JS monorepo packages to folder 2025-01-04 16:55:18 -08:00
Gregory Schier
75ead9cc8a Fix error handling 2025-01-04 07:44:39 -08:00
Gregory Schier
609bd4cdea Update license message 2025-01-04 07:36:38 -08:00
Gregory Schier
68e1b5d746 Update license message 2025-01-04 07:32:42 -08:00
Gregory Schier
53f5ef3515 Add separate SVG response viewer 2025-01-04 07:14:33 -08:00
Gregory Schier
592c1228f1 Fix tauri event listener hook 2025-01-04 07:01:31 -08:00
Gregory Schier
36cecb2d29 Fix active workspace deletion 2025-01-03 20:50:18 -08:00
Gregory Schier
31440eea76 Filesystem Sync (#142) 2025-01-03 20:41:00 -08:00
Gregory Schier
6ad27c4458 Put delete workspace in settings 2025-01-02 08:41:44 -08:00
Gregory Schier
0dd09062e3 Sort workspaces, envs, jars 2025-01-02 08:33:04 -08:00
Gregory Schier
5ebf7dc499 Tackled remaining perf wins 2025-01-02 06:51:54 -08:00
Gregory Schier
42cd4a5f0f Split out slow pathParameters extension and skip unnecessary model updates 2025-01-01 16:42:53 -08:00
Gregory Schier
add39bda6e Revert to preserving editor state with fromJson due to state callbacks not being preserved 2025-01-01 08:19:41 -08:00
Gregory Schier
be938a81dc Fix settings update bug 2025-01-01 07:10:29 -08:00
Gregory Schier
4b807f221b A bunch of fixes 2025-01-01 07:01:41 -08:00
Gregory Schier
80119f6574 Prevent a bunch more stuff from re-rendering 2024-12-31 23:24:41 -08:00
Gregory Schier
dfca17f9b7 Prevent sidebar re-render on every keypress (#152) 2024-12-31 15:02:10 -08:00
Gregory Schier
135c366e32 Preserve Editor State (#151) 2024-12-31 07:31:43 -08:00
Gregory Schier
f8b211be1c Support --url-query in curl import 2024-12-31 07:21:14 -08:00
Gregory Schier
31f2bff0f6 Optimize sidebar collapsing 2024-12-23 05:05:04 -08:00
Gregory Schier
61d094d9fd Some fixes around environments 2024-12-21 11:04:49 -08:00
Gregory Schier
c1d5881167 Merge branch 'master' into cleanup
# Conflicts:
#	src-web/components/MarkdownEditor.tsx
#	src-web/components/RequestPane.tsx
#	src-web/hooks/useActiveEnvironment.ts
2024-12-21 05:46:33 -08:00
Gregory Schier
dd8ccfe21f Extract base environment (#149) 2024-12-21 05:44:55 -08:00
Gregory Schier
b4b29babfd Adjust markdown editor 2024-12-21 05:39:11 -08:00
Gregory Schier
ecabe9b6ef Cleanup (#148) 2024-12-20 23:49:48 -08:00
Gregory Schier
ec999015ab Fixed the circular imports and things 2024-12-20 23:49:15 -08:00
Gregory Schier
51a11b6495 Switch to useMutation in some places 2024-12-20 17:38:41 -08:00
Gregory Schier
27134a52ad Performance sweep (#147) 2024-12-20 17:31:15 -08:00
Gregory Schier
42bf016e90 Add the ability to duplicate folders (#144) 2024-12-19 13:06:08 -08:00
Gregory Schier
833dc7d3f7 Markdown documentation for HTTP requests (#145) 2024-12-19 05:57:40 -08:00
Gregory Schier
42d350ef27 Disallow drag-n-drop when editing request name 2024-12-17 06:22:29 -08:00
Gregory Schier
a81f9d07cb Tweak license message 2024-12-17 06:14:12 -08:00
Gregory Schier
cb6e3d4ac8 Better insight into settings updates 2024-12-16 16:27:13 -08:00
Gregory Schier
5ff5d6fb1d Update release info 2024-12-16 13:53:45 -08:00
Gregory Schier
e2253786dc Tweak license flow 2024-12-16 13:46:58 -08:00
Gregory Schier
20140148bf Update gruvbox theme 2024-12-13 06:38:54 -08:00
Albert Hansrisuk
4b9dce26ac feat: add gruvbox dark theme (#140) 2024-12-13 06:30:10 -08:00
Jeffrey Mitchell
3b2c2960a9 Fix: Settings Window Title Bar Draggable Region Deadzone (#139) 2024-12-09 20:58:55 -08:00
Gregory Schier
a79578142d Port some stuff from sync PR 2024-12-05 11:27:49 -08:00
Gregory Schier
2b61257e50 Fix date 2024-12-03 11:48:39 -08:00
Gregory Schier
1f4eea89c5 Better license badge placement 2024-12-03 11:06:50 -08:00
Gregory Schier
1609e46660 Fix CI 2024-12-03 10:58:39 -08:00
Gregory Schier
28d5a2a019 Add copy 2024-12-03 10:09:44 -08:00
Gregory Schier
40f0f5387a Fix lint problems 2024-12-03 09:43:16 -08:00
Gregory Schier
88bcfb9e66 Changes for commercial use (#138) 2024-12-03 09:28:27 -08:00
Gregory Schier
2b076c90e4 Increase gRPC max message sizes 2024-12-03 09:24:14 -08:00
Leandro Otoni
0443fbdfdb Merge pull request #137
* add codeFolding config for json
2024-12-03 07:15:38 -08:00
Gregory Schier
36d24bdac0 Tweaked header size logic 2024-12-03 07:11:25 -08:00
Peiman Nourani
d4dfc1c820 Hide window controls in macOS fullscreen mode (#134) 2024-12-03 07:08:01 -08:00
Bad3r
00178ad197 Feat: Add Support for Nord Theme 🏔️ (#132)
Signed-off-by: Bad3r <bad3r@pm.me>
2024-12-03 07:00:47 -08:00
Bad3r
f8efd1a31a fix: Add Missing Themes Moonlight & Dracula (#133)
Signed-off-by: Bad3r <bad3r@pm.me>
2024-12-03 06:57:33 -08:00
Gregory Schier
e1363cf151 Make protoc writable before signing 2024-11-23 06:18:17 -08:00
Gregory Schier
38e0f5ede7 Remove unnecessary things in Windows signing conf 2024-11-23 05:27:12 -08:00
Gregory Schier
9663018e21 Update tauri.conf.json 2024-11-22 08:51:29 -08:00
Gregory Schier
80a7c2a9c7 Try updating protoc 2024-11-22 07:09:59 -08:00
Gregory Schier
4687723176 Fix Tauri signing account name 2024-11-22 06:17:37 -08:00
Gregory Schier
41ce2df00c Move signing into Tauri 2024-11-22 05:49:24 -08:00
Gregory Schier
794967904a Try signing again 2024-11-21 13:43:05 -08:00
Gregory Schier
74a7a1a21a Merge remote-tracking branch 'origin/master' 2024-11-21 13:13:10 -08:00
Gregory Schier
d9587aa314 First attempt at Windows signing 2024-11-21 13:13:05 -08:00
dependabot[bot]
6b208ef67c Bump cross-spawn (#135)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-20 21:15:30 -08:00
Gregory Schier
0cfec0ada6 Fix GraphQL body handling 2024-11-18 07:17:19 -08:00
Gregory Schier
3ecfb15c89 Fix lint 2024-11-16 15:31:14 -08:00
Gregory Schier
23c026126f Tweak schema menu 2024-11-16 15:17:26 -08:00
Gregory Schier
ff9abab547 More control over GraphQL introspection 2024-11-16 14:27:13 -08:00
Gregory Schier
c9c48c77e4 Update Tauri deps 2024-11-16 13:56:32 -08:00
Hao Xiang
83efc58f29 don't lost request's name and folder when updated by curl (#131) 2024-11-14 14:03:22 -08:00
Gregory Schier
632e1ff091 Update README.md 2024-11-12 19:31:55 -08:00
Gregory Schier
40286756b9 Update README.md 2024-11-11 07:48:39 -08:00
Hao Xiang
1050ac5e3c fix(grpc): proto dep topo order to solve panic (#130) 2024-10-29 14:19:11 -07:00
Gregory Schier
6d2c3712c0 Fix active cookie jar and improve routing 2024-10-28 10:06:43 -07:00
Gregory Schier
4a52095033 Better template function fetching 2024-10-24 08:17:58 -07:00
Gregory Schier
55b12d7329 Try fix for template tags not re-fetching on Windows 2024-10-24 07:47:20 -07:00
Gregory Schier
f4240e5229 Prevent bg flash on context menu in sidebar 2024-10-23 10:07:31 -07:00
Gregory Schier
7759649963 Update local model stores in all mutations (#129) 2024-10-23 09:54:43 -07:00
Gregory Schier
c5e6d6f2cb Some tweaks to request deletion 2024-10-23 06:27:38 -07:00
Gregory Schier
ec850f2cf0 Properly handle charset in content-type 2024-10-23 05:49:14 -07:00
Gregory Schier
ff52ad5345 Handle quotes around charset 2024-10-23 05:44:37 -07:00
Gregory Schier
5de50c70c6 Fix workspace/request creation race 2024-10-22 14:27:12 -07:00
Gregory Schier
94f8949ca2 Fix formatter < 0 error 2024-10-22 14:26:45 -07:00
Gregory Schier
44fc3c8d2d Add formatter test for escaped characters 2024-10-22 08:11:03 -07:00
Gregory Schier
57a05d5486 Fix up some of the new formatting stuff 2024-10-22 08:07:56 -07:00
Gregory Schier
ab48f118af Handle no GraphQL variables 2024-10-22 08:05:58 -07:00
Gregory Schier
59b0b7321f Fix GraphQL variables 2024-10-22 07:41:28 -07:00
Gregory Schier
d91e60f7e0 Support new GraphQL body type in curl export 2024-10-22 07:26:16 -07:00
Gregory Schier
e216214085 Custom JSON formatter that works with template syntax (#128) 2024-10-21 15:17:14 -07:00
Gregory Schier
aa7f18a16f Order cmd+k results by match score 2024-10-21 12:54:15 -07:00
Gregory Schier
b9f397e04a Fix response filtering 2024-10-21 07:26:50 -07:00
Gregory Schier
57c3a86799 Animate up instead of down when dropdowns open up 2024-10-18 11:22:05 -07:00
Gregory Schier
52ac41b0c6 Move elapsed calculation 2024-10-18 10:53:04 -07:00
Gregory Schier
741ccbe741 Add labels to plugin event subscribers 2024-10-18 10:46:30 -07:00
Gregory Schier
2ecd86da78 Update README.md 2024-10-18 08:27:24 -07:00
Gregory Schier
30e4e7665a Remove ios config 2024-10-18 07:59:28 -07:00
Gregory Schier
516dfd1f19 Fix GraphQL introspection 2024-10-18 06:57:44 -07:00
Gregory Schier
0cd08499aa Render sending gRPC events 2024-10-17 12:03:35 -07:00
Gregory Schier
c652df82a3 Fix SSE event selection 2024-10-17 11:28:10 -07:00
Gregory Schier
c8342fb0a9 Delete send history for workspace 2024-10-17 11:17:27 -07:00
Gregory Schier
d0b59a0fb4 Show folder structure in request selection 2024-10-17 10:53:48 -07:00
Gregory Schier
6f50f35519 Bump Tauri to fix macOS 13 launch issue 2024-10-15 09:54:21 -07:00
Gregory Schier
4e775b2b49 Undo minimumSystemVersion 2024-10-15 07:49:27 -07:00
Gregory Schier
e77a9e5d44 Rebuild plugins 2024-10-15 07:48:26 -07:00
Gregory Schier
9d24aefba1 Add template function descriptions 2024-10-15 07:47:26 -07:00
Gregory Schier
17a429525f Tweak plugins 2024-10-15 07:45:45 -07:00
Gregory Schier
a381e44d8c Prevent stale content flash after editing request name 2024-10-15 07:32:00 -07:00
Gregory Schier
4acf0969e8 Only sync models from active workspace 2024-10-15 07:31:42 -07:00
Gregory Schier
30c4178269 Disable autocomplete/correct/etc in plain input 2024-10-14 21:46:48 -07:00
Gregory Schier
dffe6e0a16 Intelligent readonly editor updates, to preserve scroll 2024-10-14 10:40:09 -07:00
Gregory Schier
8090e67b9e Revert hyper v1 for gRPC 2024-10-12 22:05:17 -07:00
Gregory Schier
f1beabcb6f Try again 2024-10-12 21:33:45 -07:00
Gregory Schier
647b8e2313 Try fix windows build 2024-10-12 21:17:44 -07:00
Gregory Schier
f5b4697608 Npm i 2024-10-12 21:06:19 -07:00
Gregory Schier
f201857d51 Bump Tauri to fix settings window 2024-10-12 20:57:01 -07:00
Gregory Schier
0d982057a5 Add proxy setting for HTTP requests (#127) 2024-10-12 20:55:09 -07:00
Gregory Schier
6fb94384b9 Better fuzzy matching in cmd palette 2024-10-12 07:41:01 -07:00
Gregory Schier
d754e7233d Server sent event response viewer (#126) 2024-10-11 06:52:32 -07:00
Gregory Schier
f974a66086 Fix double-click-maximize and backdrop 2024-10-10 07:11:43 -07:00
Gregory Schier
250625fc0e Always show window controls, and open Linux settings in dialog 2024-10-10 06:22:11 -07:00
Gregory Schier
16e090b520 Fix content type detection 2024-10-09 17:20:09 -07:00
Gregory Schier
be9fbbcb6e Fix content type detection 2024-10-09 17:19:41 -07:00
Gregory Schier
8be3c3d0e1 Disable response copy until response is done 2024-10-09 16:38:12 -07:00
Gregory Schier
c680e15cb5 Max width on request name in header 2024-10-09 16:38:03 -07:00
Gregory Schier
da6baf72f5 Response Streaming (#124) 2024-10-09 16:27:37 -07:00
Gregory Schier
2ca30bcb31 Fix Codemirror undo history 2024-10-09 12:00:52 -07:00
Gregory Schier
2e2b3128c5 Fix cookie jar query 2024-10-09 11:26:19 -07:00
Gregory Schier
4a81818d05 Add descriptions to template functions 2024-10-09 11:25:51 -07:00
Gregory Schier
0eb98a3882 Log query errors 2024-10-09 11:25:05 -07:00
Gregory Schier
d28100d682 Add new plugins 2024-10-09 09:54:15 -07:00
Gregory Schier
0f4d3bdbb5 Allow space in dropdown filter text 2024-10-09 09:54:07 -07:00
Gregory Schier
61543fb10f Merge remote-tracking branch 'origin/main' 2024-10-08 14:49:37 -07:00
Gregory Schier
9291950554 Fix curl import when using boolean flags 2024-10-08 14:49:03 -07:00
Gregory Schier
c7eccddac9 Fix performance related to having 100s of requests (#123) 2024-10-08 14:16:57 -07:00
Gregory Schier
4b7712df80 Better Dropdown size calculation for scrolling when not enough room 2024-10-02 16:17:28 -07:00
Gregory Schier
e5c6c31e02 Fix prompt again 2024-10-02 12:53:58 -07:00
Gregory Schier
7e62bb6b68 Fix prompt 2024-10-02 12:19:43 -07:00
Gregory Schier
3b2ee25d75 Fix tauri dialog API usage 2024-10-02 11:45:42 -07:00
Gregory Schier
4a9e2ac9b6 Specify minimum macOS version 13 in tauri conf 2024-10-02 11:39:48 -07:00
Gregory Schier
d890b8be0a Tauri 2.0.0 stable 2024-10-02 11:30:39 -07:00
Gregory Schier
bb1ba93676 Better KeyValueRow sizing 2024-10-02 11:22:20 -07:00
Gregory Schier
f8c3f71cfe Increase node download timeout 2024-10-02 10:14:51 -07:00
Gregory Schier
c9050bd3bb Add CLI to release.yml 2024-10-02 10:04:21 -07:00
Gregory Schier
d0fe1beee0 Fix lint errors 2024-10-02 10:00:58 -07:00
Gregory Schier
e401e8f1cf Fix response header table sizing 2024-10-02 08:22:38 -07:00
Gregory Schier
54689d19ef Add more template tag plugins (#3) 2024-10-02 06:56:07 -07:00
Gregory Schier
4160e5b1c4 Make prompt() to return null on cancel 2024-10-02 05:54:44 -07:00
Gregory Schier
89ff25cd54 Fix variables in bulk editor 2024-10-02 05:10:34 -07:00
Gregory Schier
7a941016a9 Fix plugin types 2024-10-01 11:02:38 -07:00
Gregory Schier
7e4f807f75 Add prompt() plugin API (#121) 2024-10-01 08:32:42 -07:00
Gregory Schier
be60e4648a Apply Request path parameters during render (#120) 2024-10-01 08:26:59 -07:00
Gregory Schier
6060ddcd87 Add aliases field to template functions 2024-09-30 18:28:52 -07:00
Gregory Schier
9df586cb59 NPM workspaces 2024-09-30 18:11:51 -07:00
Gregory Schier
9915c57817 Plugin execution context (#119) 2024-09-30 17:45:51 -07:00
Gregory Schier
917adcfb2e Better plugin development experience (#118) 2024-09-29 10:41:07 -07:00
Gregory Schier
1c5e62a468 Set max-width on toast 2024-09-29 07:20:56 -07:00
Gregory Schier
f5e8c525e9 Add brackets to URL regex 2024-09-28 14:31:18 -07:00
Gregory Schier
6583615885 Update package.json 2024-09-27 06:01:31 -07:00
Gregory Schier
0f0eba244c Update config.yml 2024-09-27 05:59:23 -07:00
Gregory Schier
3911b7b583 Update README.md 2024-09-27 05:58:29 -07:00
Gregory Schier
3634d315ed Update config.yml 2024-09-27 05:49:58 -07:00
Gregory Schier
89b85c2e27 Update issue description 2024-09-27 05:49:20 -07:00
Gregory Schier
bbff3f5969 Remove bug report template 2024-09-27 05:47:24 -07:00
Gregory Schier
eb8f66dca2 Add npm start command back 2024-09-27 05:46:12 -07:00
Gregory Schier
08531fa1ff Update development doc 2024-09-27 05:45:48 -07:00
i-usebruno
662bc41cb3 Improve dev docs (#117)
Co-authored-by: i-usebruno <anon.repressed498@passinbox.com>
Co-authored-by: Gregory Schier <gschier1990@gmail.com>
2024-09-27 05:34:15 -07:00
Gregory Schier
974425afee Fix JSONPath/XPath filtering 2024-09-26 06:45:03 -07:00
Gregory Schier
9f7f06a142 Don't adhere to wrapLines in single-line inputs 2024-09-25 22:16:35 -07:00
Gregory Schier
598bbd6f69 Prevent theme flashing on initial window load (#115) 2024-09-25 14:01:24 -07:00
Gregory Schier
b19748c42e Make settings menu a regular window (#113) 2024-09-25 12:52:12 -07:00
Gregory Schier
2be45d6101 Simpler Tauri resource paths (#112) 2024-09-25 09:25:51 -07:00
Gregory Schier
d2c33f821c Preserve invalid GraphQL variables (#111) 2024-09-25 09:02:31 -07:00
Gregory Schier
215fcef3ea bump 2024-09-25 08:08:49 -07:00
Gregory Schier
7d97404c11 Improved querystring import on paste (#110) 2024-09-25 08:03:19 -07:00
Gregory Schier
de7097ff1d Faster time-to-theme (#109) 2024-09-25 07:35:27 -07:00
Gregory Schier
0100a3983d Code split <Workspace> and <Settings> routes 2024-09-24 11:18:39 -07:00
Gregory Schier
aa82ef8636 Revert codemirror-json-schema due to bundle bloat 2024-09-24 10:50:09 -07:00
Gregory Schier
4e316dcf60 Fix tauri-before-build 2024-09-24 10:29:23 -07:00
Gregory Schier
296221a22e Lazily render variables (#108) 2024-09-24 10:18:56 -07:00
Gregory Schier
3818154e82 Show all requests in template fn dialog 2024-09-24 07:14:36 -07:00
Gregory Schier
574a92f5b7 Only download protoc if necessary 2024-09-24 07:14:15 -07:00
Gregory Schier
44e5c2b1d7 Fix plugin runtime (response fn) deadlock 2024-09-24 07:13:34 -07:00
Gregory Schier
c938b62d35 Fix plugin runtime 2024-09-23 07:46:32 -07:00
Gregory Schier
9bb1e1232f Don't build internal TS packages 2024-09-23 07:22:25 -07:00
Gregory Schier
164865c845 Delete unused files 2024-09-23 07:05:17 -07:00
Gregory Schier
921f1de62a Bootstrap command 2024-09-22 22:17:45 -07:00
Gregory Schier
38b36b80a5 Fix Vite build dir 2024-09-22 21:59:31 -07:00
Gregory Schier
2ab4f79aed Fix scripts 2024-09-22 21:33:46 -07:00
Gregory Schier
101b6284d6 [WIP] Refactor to NPM workspaces (#104) 2024-09-22 21:27:10 -07:00
Gregory Schier
035d7927f9 Fix types 2024-09-22 11:09:18 -07:00
Gregory Schier
93633875ac snake_case icons and better toast styles 2024-09-20 07:30:11 -07:00
Gregory Schier
1a4e6de1f4 Merge remote-tracking branch 'origin/main' 2024-09-20 07:09:06 -07:00
Gregory Schier
aed73482d1 Bump @yaakapp/api deps 2024-09-20 07:09:01 -07:00
Gregory Schier
a18271d306 Sort Codemirror widgets Fixes #101 2024-09-20 05:45:04 -07:00
Gregory Schier
32d7af94a5 Fix environment dialog hotkey 2024-09-20 05:36:56 -07:00
Gregory Schier
48dbd5f9f8 Regenerate icons 2024-09-19 15:00:34 -07:00
Gregory Schier
085580b94a Add migration steps to DEVELOPMENT.md 2024-09-19 14:20:57 -07:00
Gregory Schier
31dbb15448 Update README.md 2024-09-19 14:01:29 -07:00
Gregory Schier
53b8463223 All generated TS models in two files 2024-09-19 13:22:56 -07:00
Gregory Schier
3ee9ed8bf4 Env dropdown becomes button when no sub envs 2024-09-19 13:01:22 -07:00
Gregory Schier
ed368cd251 Fix pair editor adding new entry when clicking below 2024-09-19 08:55:35 -07:00
Gregory Schier
d9fb7f1b21 Fix autoSelect for PlainInput.tsx 2024-09-19 08:03:18 -07:00
Gregory Schier
1c6c979278 Use PlainInput for Prompt.tsx 2024-09-19 07:56:29 -07:00
Gregory Schier
17f835e713 Fix app header selection on double click 2024-09-19 07:53:17 -07:00
Gregory Schier
99e91a692b Fix lint issue 2024-09-19 06:27:02 -07:00
Gregory Schier
24ea76e753 Better native app styling. Hopefully this fixes the issue!
Fixes #97
2024-09-19 06:19:16 -07:00
Gregory Schier
1d9a001036 Only replace path params when starting with :
Fixes #99
2024-09-19 06:07:19 -07:00
Gregory Schier
7e056aa93a Maximize window on header double-click 2024-09-19 06:03:46 -07:00
Gregory Schier
6247603cec Fix gRPC basic auth encoding
Fixes #98
2024-09-19 06:00:33 -07:00
Gregory Schier
a3b64423fd Refactor plugin manager and gRPC server (#96) 2024-09-19 05:58:12 -07:00
Gregory Schier
844d795014 Namespaced template functions (#95) 2024-09-18 05:36:37 -07:00
dependabot[bot]
d48b29c6e9 Bump vite from 5.4.5 to 5.4.6 (#94)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-17 19:05:03 -07:00
Gregory Schier
e0c00579af Reload template functions on window focus 2024-09-17 09:48:53 -07:00
Gregory Schier
024edb6674 Cargo lock 2024-09-17 09:13:23 -07:00
Gregory Schier
4a79a67b8d Bump Tauri deps 2024-09-17 06:59:23 -07:00
Gregory Schier
92ac91733e Handle Postman URL query and variable fields 2024-09-17 05:58:21 -07:00
Gregory Schier
61c333fd04 Fix Tauri config 2024-09-16 08:58:39 -07:00
Gregory Schier
94654cddef Update tauri config 2024-09-16 08:57:20 -07:00
Gregory Schier
2951023ee8 Fix all lint errors 2024-09-16 08:36:02 -07:00
Gregory Schier
974ecd511d Fix replacement 2024-09-16 08:11:38 -07:00
dependabot[bot]
606bfb6a83 Bump quinn-proto from 0.11.6 to 0.11.8 in /src-tauri (#91)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-16 08:08:56 -07:00
Gregory Schier
72649b670e Link to docs in plugin settings 2024-09-16 08:06:32 -07:00
Gregory Schier
d70c8be85d Add publisher/copyright 2024-09-16 06:45:42 -07:00
Gregory Schier
a55e27ec20 Remove unused Makefile 2024-09-16 06:41:13 -07:00
Gregory Schier
29d2d0ec62 Prevent infinite recursion in response tag
Closes yaakapp/app#90
2024-09-16 06:37:48 -07:00
Gregory Schier
873d02ea37 Re-gen proto stuff 2024-09-16 06:35:46 -07:00
Gregory Schier
ebc45ca687 Account for zoom for macOS stoplight padding 2024-09-16 06:20:50 -07:00
Gregory Schier
8913833157 Parse and import querystring on paste (#89) 2024-09-15 11:41:26 -07:00
Samuel Marks
75552cbb7d Upgrade dependencies (#74) 2024-09-15 10:33:50 -07:00
Gregory Schier
ea67304151 Update README.md 2024-09-14 08:39:03 -07:00
Gregory Schier
db416cea31 Update README.md 2024-09-12 10:20:36 -07:00
Gregory Schier
a479c5627c Update README.md 2024-09-12 10:06:58 -07:00
Gregory Schier
fad2702218 Update bug-report.yml 2024-09-12 08:26:55 -07:00
Mohammed Kafeel Shahjahan Sheikh
95e7dc3e6c Update README.md (#82)
Minor spelling mistake change.

Co-authored-by: Gregory Schier <gschier1990@gmail.com>
2024-09-12 07:22:14 -07:00
Teymour Aldridge
6b76753f56 Update README.md (#83) 2024-09-12 07:21:19 -07:00
Gregory Schier
db344454be Merge remote-tracking branch 'origin/master' 2024-09-12 07:19:43 -07:00
Gregory Schier
590ea559e3 Make variable dialog more clear
Closes #73
2024-09-12 07:19:32 -07:00
Gregory Schier
f0f629f26f Update bug-report.yml 2024-09-12 07:17:45 -07:00
Gregory Schier
3d74d29775 Update bug-report.yml 2024-09-12 07:16:50 -07:00
Gregory Schier
aeb550034d Update config.yml 2024-09-12 07:11:28 -07:00
Gregory Schier
b8fdf7ec94 Update bug-report.yml 2024-09-12 07:11:02 -07:00
Gregory Schier
9900b09793 Update config.yml 2024-09-12 07:09:47 -07:00
Gregory Schier
31dc76727a Update config.yml 2024-09-12 07:08:29 -07:00
Gregory Schier
aab0386565 Require OS in bug report 2024-09-12 07:06:03 -07:00
Gregory Schier
77153525fb Update and rename bug-report.md to bug-report.yml 2024-09-12 07:04:40 -07:00
Gregory Schier
aeecac7ded Issue Template 2024-09-12 06:58:52 -07:00
Gregory Schier
b08750a72b Rename config.yaml to config.yml 2024-09-12 06:54:19 -07:00
Gregory Schier
a0c7090fda Create config.yaml 2024-09-12 06:53:41 -07:00
Gregory Schier
a805e39da9 Update issue templates 2024-09-12 06:51:46 -07:00
Michal Polko
65b7db873e Use padding for Basic auth (#77) 2024-09-11 22:26:03 -07:00
Gregory Schier
ed48e1d52a Fix * breaking response URL detection
Fixes #71
2024-09-11 07:34:58 -07:00
Gregory Schier
b5fa3efb9e Update README.md 2024-09-10 15:36:18 -07:00
Gregory Schier
b616c5d78f Create LICENSE 2024-09-10 11:29:31 -07:00
Gregory Schier
f7bf245a4c Update README.md 2024-09-10 10:38:43 -07:00
Gregory Schier
e1fdf174c1 Mention open source in README 2024-09-10 10:29:09 -07:00
Gregory Schier
7907dcc220 Don't notify twice 2024-09-09 15:44:35 -07:00
Gregory Schier
36890b9a32 Show toast after plugin reload 2024-09-09 12:36:05 -07:00
Gregory Schier
75df5f8094 setup-node v4 2024-09-09 12:17:24 -07:00
Gregory Schier
9ae932823f Oops, missed one 2024-09-09 12:13:52 -07:00
Gregory Schier
107fe46852 Add @yaakapp/cli dependency 2024-09-09 12:11:37 -07:00
Gregory Schier
63f391ea5f Build plugins in workflow 2024-09-09 12:08:33 -07:00
Gregory Schier
035441a492 Fix tests and lint 2024-09-09 11:49:05 -07:00
Gregory Schier
48e62eb1d9 CI workflow 2024-09-09 11:43:21 -07:00
Gregory Schier
b72e037e6a Remove commented code 2024-09-09 11:37:44 -07:00
Gregory Schier
c0707bb246 Reload plugins on change 2024-09-09 11:34:52 -07:00
Gregory Schier
de6ed1a0cc Undo CI job 2024-09-09 08:54:04 -07:00
Gregory Schier
41c0027391 Try something else 2024-09-09 08:53:37 -07:00
Gregory Schier
3bf192953d Update workflow 2024-09-06 11:09:03 -07:00
Gregory Schier
0c8953c471 Fix lint issues 2024-09-06 10:59:14 -07:00
Gregory Schier
c02aa4f2d0 Dynamic plugins (#68) 2024-09-06 10:43:25 -07:00
Gregory Schier
e4e888c47a Don't introspect schema on interval 2024-09-06 10:37:10 -07:00
Gregory Schier
6ce1369a88 Upgrade deps 2024-09-06 06:39:57 -07:00
Gregory Schier
d032495861 Bump plugin-runtime-types version 2024-09-06 06:32:35 -07:00
Gregory Schier
167a446ad8 re-gen plugin-runtime-types 2024-09-06 06:26:05 -07:00
Gregory Schier
74edadf7c4 Remove prints 2024-09-06 06:21:21 -07:00
Gregory Schier
021dceeac5 Fix import order for nested folders to prevent foreign key constraint error 2024-09-06 06:20:27 -07:00
Gregory Schier
c663537ca9 Support non-utf8 charsets 2024-09-05 13:58:06 -07:00
Gregory Schier
48b288b1a6 Fix banner overflow 2024-09-04 07:33:21 -07:00
Gregory Schier
9600d8ba1c Fix interface zoom 2024-09-03 14:37:44 -07:00
Gregory Schier
7ef264223f Create request/folder with proper folderId 2024-09-03 08:06:30 -07:00
Gregory Schier
d99fe98347 Separate active tabs per request 2024-09-03 07:52:35 -07:00
Gregory Schier
ff459d1570 Separate active tabs per request 2024-09-03 07:33:48 -07:00
Gregory Schier
7f952300b3 Print plugin dir on failure to read 2024-09-03 07:18:00 -07:00
Gregory Schier
90e2eb67e5 Clean up 2024-09-03 06:44:51 -07:00
Gregory Schier
942f959c36 Request pane context (#70) 2024-09-03 06:18:25 -07:00
Gregory Schier
0b9483954d Request pane context (#69) 2024-09-02 14:36:55 -07:00
Gregory Schier
3e8c556999 Fix white screen 2024-09-02 12:52:42 -07:00
Gregory Schier
155d0ce3ba Placeholder CM tags working 2024-09-02 12:35:05 -07:00
Gregory Schier
bdc0ecfcd8 Rename var 2024-08-30 05:39:58 -07:00
Gregory Schier
71d9e7ddb5 Check for updates less often on stable 2024-08-30 05:39:29 -07:00
Gregory Schier
737da7e0ae Only check for updates once per day 2024-08-30 05:36:30 -07:00
Gregory Schier
afa64acf83 URL path placeholders 2024-08-30 05:24:07 -07:00
Gregory Schier
b3865d383b Detect JSON APIs returning HTML content-type 2024-08-29 10:52:41 -07:00
Gregory Schier
fdc60445c8 Better content-type detection for editor 2024-08-29 06:07:31 -07:00
Gregory Schier
690ef02a38 Fix Windows/linux close icon color 2024-08-28 09:46:35 -07:00
Gregory Schier
a92a85be0d Kill plugin manager before NSIS update on Windows 2024-08-28 09:14:39 -07:00
Gregory Schier
5f1286ef6f Remove tauri "unstable" feature to fix Codemirror selection 2024-08-28 06:48:02 -07:00
Gregory Schier
ffd0010a59 Hotfix for window focusing 2024-08-27 16:56:04 -07:00
Gregory Schier
9320162e22 Special case Response()->response() 2024-08-26 15:26:43 -07:00
Gregory Schier
959ace8720 Clean up code 2024-08-26 15:10:29 -07:00
Gregory Schier
af9c5c0294 Lowercase response function name 2024-08-26 15:02:44 -07:00
Gregory Schier
55122b042b Default template fn args 2024-08-26 13:10:22 -07:00
Gregory Schier
d4baddc8d4 Fix bug 2024-08-26 13:10:22 -07:00
Gregory Schier
f404aa53c6 Option to disable telemetry 2024-08-26 12:06:56 -07:00
Gregory Schier
c80ebdb156 Node syntaxTree to parse template tags 2024-08-26 11:30:10 -07:00
Gregory Schier
6f6bec5764 Force codemirror to parse more to be able to show code folding 2024-08-23 14:09:28 -07:00
Gregory Schier
e89905fd04 Publish plugin-runtime-types 2024-08-23 13:37:47 -07:00
Gregory Schier
7ca3b9bd20 Send purpose with render request 2024-08-23 13:31:39 -07:00
Gregory Schier
ad81d35c71 Fix recursive plugin call locking 2024-08-23 13:20:48 -07:00
Gregory Schier
e36f61b2c7 Surface plugin error on import 2024-08-23 11:53:40 -07:00
Gregory Schier
8d03ba5bdd Fix initial apply text 2024-08-22 12:49:42 -07:00
Gregory Schier
11f811d900 Switch to single quotes for template strings 2024-08-22 12:48:14 -07:00
Gregory Schier
5ba11ca788 Bump plugin deps 2024-08-22 11:27:57 -07:00
Gregory Schier
9cdc13b632 Pass render purpose to render 2024-08-22 11:27:55 -07:00
Gregory Schier
e5ec86bfcf Move to workspace crate 2024-08-22 10:49:51 -07:00
Gregory Schier
e35f34eaf5 Fix compile 2024-08-22 06:30:19 -07:00
Gregory Schier
503b7f1c87 Fix deadlock on getting the focused window 2024-08-22 05:46:09 -07:00
Gregory Schier
d1871b19ee Template response plugin 2024-08-19 19:11:36 -07:00
Gregory Schier
4c6684623f Some tweaks for beta 2024-08-19 19:10:08 -07:00
Gregory Schier
dbfe2dc93d A bit more chaining cleanup 2024-08-19 16:38:28 -07:00
Gregory Schier
96125a0741 A bunch of improvements to chaining 2024-08-19 14:10:44 -07:00
Gregory Schier
0f8aea3afd Actually call template functions 2024-08-19 10:34:22 -07:00
Gregory Schier
1fbcfeaa30 Async template functions working 2024-08-19 06:21:03 -07:00
Gregory Schier
ec22191409 Colored autocompletion icons 2024-08-17 05:47:05 -07:00
Gregory Schier
aa85ecb618 Template Tag Function Editor (#67)
![CleanShot 2024-08-15 at 16 53
09@2x](https://github.com/user-attachments/assets/8c0eb655-1daf-4dc8-811f-f606c770f7dc)
2024-08-16 08:31:19 -07:00
Gregory Schier
a7f0fadeae Fix sidebar scroll into view 2024-08-15 09:09:18 -07:00
Gregory Schier
54efb6ae4e Add @yaakapp/api everywhere 2024-08-15 06:17:33 -07:00
Gregory Schier
6bc697e4a7 Fix some more styles 2024-08-15 05:58:09 -07:00
Gregory Schier
795aaae2f5 Keep sidebar and cmd+p items in view 2024-08-15 05:50:38 -07:00
Gregory Schier
522d293087 Request actions in command palette 2024-08-15 05:37:10 -07:00
Gregory Schier
637e5196c3 Request actions (#65) 2024-08-14 15:31:52 -07:00
Gregory Schier
c484dd4041 Start on plugin ctx API (#64) 2024-08-14 06:42:54 -07:00
Gregory Schier
5eef910b8c Variable value as title attr 2024-08-13 10:19:21 -07:00
Gregory Schier
ed214367d3 Fix dollar sign in Twig grammar 2024-08-13 10:12:09 -07:00
Gregory Schier
c69bee251d Fix rose pine themes 2024-08-13 07:51:26 -07:00
Gregory Schier
c9b4e6181c Use new theme vars (#63)
This PR swaps the theme to use the new stuff from the Theme Studio
2024-08-13 07:44:28 -07:00
Gregory Schier
ecc7192bde Don't persist settings tab 2024-08-10 08:10:14 -07:00
Gregory Schier
08ea48b996 Better curl import 2024-08-10 07:53:26 -07:00
Gregory Schier
2f9532cf53 Catch clipboard errors 2024-08-10 07:33:10 -07:00
Gregory Schier
dab10d79fe Don't show unnamed variables in autocomplete 2024-08-10 07:09:23 -07:00
Gregory Schier
d5b0b5481c Append [DEV] to window title in dev 2024-08-09 15:35:21 -07:00
Gregory Schier
d280df4a0b Fix gRPC request creation 2024-08-09 14:37:43 -07:00
Gregory Schier
fbaf750c91 Correctly wrap small dialog text 2024-08-09 14:28:20 -07:00
Gregory Schier
877f9ce15a GraphQL variables now reset if entire thing deleted 2024-08-09 14:05:38 -07:00
Gregory Schier
00367c2b18 Fix Windows paths for new plugin runtime 2024-08-09 12:43:56 -07:00
Gregory Schier
23f8f5ff7f Better Windows pathing 2024-08-09 11:52:18 -07:00
Gregory Schier
b3bd070a8a UNC paths for plugins 2024-08-09 11:33:54 -07:00
Gregory Schier
1a9dfda90c Fix up DB creation and migration 2024-08-09 11:20:04 -07:00
Gregory Schier
411fd4f530 Vendor in build script 2024-08-09 08:51:21 -07:00
Gregory Schier
6232a46ca8 Fix body change setting headers/method 2024-08-09 08:33:49 -07:00
Gregory Schier
0c9d532c1f Remove problematic tests from release.yml 2024-08-09 08:33:01 -07:00
Gregory Schier
d907b0bdcd Fix release script 2024-08-09 07:53:33 -07:00
Gregory Schier
fb847ac1f0 Switch to proper log plugin 2024-08-09 07:49:48 -07:00
Gregory Schier
5a5a443ff9 Fix release script 2024-08-09 07:42:39 -07:00
Gregory Schier
ffb7ab55be Fix variable regex 2024-08-09 07:41:52 -07:00
Gregory Schier
da29d80c82 Run build before test as well 2024-08-09 07:29:48 -07:00
Gregory Schier
209af3d149 Fix 2024-08-09 07:12:32 -07:00
Gregory Schier
3c4df087ea Fix lint errors 2024-08-09 06:58:36 -07:00
Gregory Schier
4bf6ddec9f Run vendor as separate script 2024-08-09 06:49:18 -07:00
Gregory Schier
b5eed9bf9d Fix xpath filtering 2024-08-08 22:54:15 -07:00
Gregory Schier
3153a38b7b Better TS type generation 2024-08-08 22:07:05 -07:00
Gregory Schier
063e6cf00c Plugin runtime v2 (#62) 2024-08-08 21:30:59 -07:00
Gregory Schier
f967820f12 Model and DB refactor (#61)
- [x] Move from `sqlx` to `rusqlite`
- [x] Generate TS types from Rust models
2024-08-05 07:58:20 -07:00
Gregory Schier
e5511922bf Use @yaakapp/api in models 2024-08-01 15:14:33 -07:00
Gregory Schier
d6e5bc6df5 Updated plugin APIs 2024-08-01 07:01:57 -07:00
Gregory Schier
5639e358bc Start of plugin types refactor 2024-07-31 14:56:55 -07:00
Gregory Schier
a3988188f3 More flexible placeholder match 2024-07-31 07:42:18 -07:00
Gregory Schier
082be6e1dd Template function return Result 2024-07-31 07:32:37 -07:00
Gregory Schier
c2d5ad7c9f Apply forceUpdateKey to bulk pair editor 2024-07-30 15:50:29 -07:00
Gregory Schier
3dfb435386 Always enable pairs from bulk editor 2024-07-30 15:35:06 -07:00
Gregory Schier
86856e3506 Add rename/delete/send to cmd+k 2024-07-30 15:10:24 -07:00
Gregory Schier
a75b1a3472 Fix hotkey state messing up on Enter->submit 2024-07-30 15:10:08 -07:00
Gregory Schier
ff3b32ba64 Add timestamp() to template fns 2024-07-30 14:04:33 -07:00
Gregory Schier
9d2de4a0b1 Fix fold gutter icon direction 2024-07-30 13:58:30 -07:00
Gregory Schier
84e5618307 Named arguments in templating 2024-07-30 08:02:10 -07:00
Gregory Schier
5efd0c9c10 Tweak release things 2024-07-29 14:38:57 -07:00
Gregory Schier
4803539dd4 Remove canny-specific links 2024-07-29 11:50:00 -07:00
Gregory Schier
71e0d846b7 Generate v1 updater artifacts 2024-07-28 18:32:50 -07:00
Gregory Schier
3001bafb7f Update vendor scripts again 2024-07-28 16:04:05 -07:00
Gregory Schier
430599d8b8 Refine vendor scripts 2024-07-28 15:56:48 -07:00
Gregory Schier
375287eeb3 Merge remote-tracking branch 'origin/master' 2024-07-28 15:40:37 -07:00
Gregory Schier
f91dd24a9b Fix killing command on Windows 2024-07-28 15:40:19 -07:00
Gregory Schier
3618fc198c Send full request to cmd_send_http_request to prevent
update->send race
2024-07-28 15:33:12 -07:00
Gregory Schier
410cb7969c Remove command group 2024-07-28 14:13:01 -07:00
Gregory Schier
c8a99a6603 Upgrade Tauri dependencies 2024-07-28 13:44:50 -07:00
Gregory Schier
def9a3cfd2 Better wait for kill signal 2024-07-27 09:13:34 -07:00
Gregory Schier
f925a0cc54 Fix spin lock 2024-07-27 09:05:43 -07:00
Gregory Schier
54090614ad Add sleep to child polling 2024-07-27 08:26:14 -07:00
Gregory Schier
307ca480f3 Better NodeJS vendoring 2024-07-26 00:01:21 -07:00
Gregory Schier
ff81ab4414 Put updater back into targets 2024-07-25 20:56:47 -07:00
Gregory Schier
0ff3ec304c Fix targets 2024-07-25 13:33:00 -07:00
Gregory Schier
203cbc5788 Log when plugin runtime exits 2024-07-25 09:28:08 -07:00
Gregory Schier
97947e5680 Remove unused import 2024-07-25 07:58:04 -07:00
Gregory Schier
4ed5489092 Fix dunce usage 2024-07-25 07:52:53 -07:00
Gregory Schier
3825280380 Convert UNC paths in more places 2024-07-25 07:47:00 -07:00
Gregory Schier
bd46e5bdb4 Use process group for node runtime 2024-07-24 10:14:40 -07:00
Gregory Schier
2a35decf8c Remove UNC prefix for protoc exec 2024-07-24 08:07:06 -07:00
Gregory Schier
9f268a9316 Protoc stderr into error 2024-07-24 07:41:51 -07:00
Gregory Schier
f51575508e Fix external bin names 2024-07-24 07:05:05 -07:00
Gregory Schier
2170a04ccc Unique sidecar names 2024-07-24 07:04:14 -07:00
Gregory Schier
2273bb2df5 Fix NodeJS vendoring on Linux 2024-07-23 20:41:50 -07:00
Gregory Schier
f622f12bee Fix nodejs vendoring 2024-07-23 15:37:27 -07:00
Gregory Schier
e05d73965a Fix Windows vendor tmp path 2024-07-23 15:28:31 -07:00
Gregory Schier
bf1ad208c5 NODE_ARCH -> YAAK_TARGET_ARCH 2024-07-23 14:52:25 -07:00
Gregory Schier
73e815d059 Fix protoc vendoring 2024-07-23 14:35:39 -07:00
Gregory Schier
b019496bca Fix NodeJS vendoring 2024-07-23 14:31:53 -07:00
Gregory Schier
bb3f948596 Don't add duplicate body headers for Postman 2024-07-23 12:41:01 -07:00
Gregory Schier
25033dc831 Response info in new tab 2024-07-23 12:13:09 -07:00
Gregory Schier
fd2c6930f0 Use SelectFile component in more places 2024-07-23 11:54:35 -07:00
Gregory Schier
a4e223f261 Guess mime type on multi-part when not set 2024-07-23 11:39:21 -07:00
Gregory Schier
1db44a1f16 Set minimum windows size 2024-07-23 11:35:16 -07:00
Gregory Schier
38e0882dd1 Better handling of large responses 2024-07-23 08:59:15 -07:00
Gregory Schier
ac8b1c018b Better import flow 2024-07-23 08:29:09 -07:00
Gregory Schier
afaf4e62d8 Better body handling in Postman 2024-07-23 08:26:00 -07:00
Gregory Schier
b7148d510b Revert version 2024-07-23 07:31:00 -07:00
Gregory Schier
ad6b8a126a Fix notification status code handling 2024-07-23 07:30:47 -07:00
Gregory Schier
5db8f9117f Use cross-env 2024-07-22 18:44:33 -07:00
Gregory Schier
2d422dab4b Back to @latest 2024-07-22 18:28:27 -07:00
Gregory Schier
5aa3c06112 Force bump Yaak CLI 2024-07-22 18:27:24 -07:00
Gregory Schier
c57096640d Remove test runs 2024-07-22 18:12:12 -07:00
Gregory Schier
01441b26db Checkout plugins later in the release workflow 2024-07-22 18:08:49 -07:00
Gregory Schier
27e6668be5 Try fix import 2024-07-22 18:03:17 -07:00
Gregory Schier
6a24b31c6c Improved Postman and OpenAPI import 2024-07-22 18:00:13 -07:00
Gregory Schier
8c2da49412 Various tweaks 2024-07-22 17:55:28 -07:00
Gregory Schier
75a7cac783 Merge remote-tracking branch 'origin/main' 2024-07-22 14:42:01 -07:00
Gregory Schier
373bc75e98 OpenAPI import plugins 2024-07-22 14:04:37 -07:00
Gregory Schier
680d599f04 Plugin tweaks 2024-07-22 12:17:46 -07:00
Gregory Schier
9c08c5fea8 Better wording for moving workspace 2024-07-22 09:46:46 -07:00
Gregory Schier
02fd8f22b2 Create README.md 2024-07-22 09:46:18 -07:00
Gregory Schier
110ffc7529 Lowercase product name for Linux 2024-07-22 09:03:31 -07:00
Gregory Schier
5abf460fce Some small refactoring 2024-07-21 22:18:45 -07:00
Gregory Schier
f1433b59d4 From SEA to regular NodeJS 2024-07-21 22:14:17 -07:00
Gregory Schier
4cbfe50fce Tweak 2024-07-21 16:04:29 -07:00
Gregory Schier
63ba00d1a7 Fixed plugins on Windows 2024-07-21 16:01:13 -07:00
Gregory Schier
a684d71033 Fix import plugin hook 2024-07-21 15:46:47 -07:00
Gregory Schier
eb782353a0 Change app name 2024-07-20 11:33:02 -07:00
Gregory Schier
72c58460e2 Fix Windows key map 2024-07-20 10:49:08 -07:00
Gregory Schier
63a193bb3e Don't resign SEA binary 2024-07-20 10:28:50 -07:00
Gregory Schier
54817fa6a4 Fix tool location 2024-07-19 17:38:57 -07:00
Gregory Schier
42127874e0 Fix deps 2024-07-19 17:31:37 -07:00
Gregory Schier
1e106015f7 Dynamic signtool.exe location 2024-07-19 17:30:20 -07:00
Gregory Schier
f1e1acdb22 Fix signtool path 2024-07-19 17:28:13 -07:00
Gregory Schier
1bf542d49a Add ampersand 2024-07-19 17:21:23 -07:00
Gregory Schier
c3a4b3f68a Fix signtool path? 2024-07-19 17:18:52 -07:00
Gregory Schier
a7a88ab490 Absolute signtool path 2024-07-19 17:11:53 -07:00
Gregory Schier
52ee0b524f Remove tmp dirs 2024-07-19 16:58:55 -07:00
Gregory Schier
f0f12f7606 Again 2024-07-19 16:53:37 -07:00
Gregory Schier
c480c8d6cf Better tmp dir creation 2024-07-19 16:51:05 -07:00
Gregory Schier
1d6ea42448 Fix tmpdir on Windows 2024-07-19 16:43:22 -07:00
Gregory Schier
c48ffb2b94 Fix script for Windows? 2024-07-19 16:30:20 -07:00
Gregory Schier
fa611df585 Add protoc back 2024-07-19 16:23:16 -07:00
Gregory Schier
5ba18af021 Remove Yaak CLI npm package 2024-07-19 16:14:13 -07:00
Gregory Schier
0be8426af2 Install Yaak CLI 2024-07-19 16:13:39 -07:00
Gregory Schier
f5b8b92d95 Oops, fix arch 2024-07-19 16:10:40 -07:00
Gregory Schier
c1fae5951a Fix Node arch 2024-07-19 16:08:37 -07:00
Gregory Schier
7c1ccbec6d Debug log 2024-07-19 16:01:05 -07:00
Gregory Schier
12ab7ae045 Add repo token 2024-07-19 15:45:54 -07:00
Gregory Schier
324e7da282 Proper exit code 2024-07-19 15:40:46 -07:00
Gregory Schier
9979dd3ca6 Add protoc installation 2024-07-19 15:38:44 -07:00
Gregory Schier
d8d338d5d4 Add download-protoc to build 2024-07-19 15:25:20 -07:00
Gregory Schier
bf265a2f22 Deps for plugin-runtime 2024-07-19 15:16:35 -07:00
Gregory Schier
0863c0f802 Ignore plugins checkout for eslint 2024-07-19 15:13:19 -07:00
Gregory Schier
66c6ebaacf Fix is valid 2024-07-19 15:09:45 -07:00
Gregory Schier
8efc38b3eb Vendor yaak-cli 2024-07-19 15:06:09 -07:00
Gregory Schier
cc3cb6d14f Add npm ci to plugin builds 2024-07-19 14:41:59 -07:00
Gregory Schier
4e889b1688 Update yaak cli path 2024-07-19 14:39:48 -07:00
Gregory Schier
77825ee89e Update plugins 2024-07-19 14:39:10 -07:00
Gregory Schier
6c6250a41b Fix Go install 2024-07-19 14:28:59 -07:00
Gregory Schier
cf01ea7656 Fix again 2024-07-19 14:28:05 -07:00
Gregory Schier
3e6df98e51 Fix setup go 2024-07-19 14:26:47 -07:00
Gregory Schier
80e09c207c Install Yaak CLI with Go 2024-07-19 14:25:21 -07:00
Gregory Schier
b829f370cd Specify version 2024-07-19 14:06:33 -07:00
Gregory Schier
748d956eb0 Fix directory 2024-07-19 14:01:21 -07:00
Gregory Schier
544f6ff6b3 Install Yaak CLI in workflow 2024-07-19 13:57:04 -07:00
Gregory Schier
3f15ea85c2 Fix checkout 2024-07-19 11:16:15 -07:00
Gregory Schier
7ea20a3fb8 Fix working directory 2024-07-19 11:13:58 -07:00
Gregory Schier
6df1af4f94 Remove failing step 2024-07-19 11:10:45 -07:00
Gregory Schier
7625727324 package-lock 2024-07-19 11:10:35 -07:00
Gregory Schier
1d6624602f Move ci/build to workflow 2024-07-19 11:09:07 -07:00
Gregory Schier
ac42767aaf Debug where npm is 2024-07-19 11:06:39 -07:00
Gregory Schier
a722797b6a Inherit env for exec 2024-07-19 11:04:03 -07:00
Gregory Schier
d630f4362c TRy again 2024-07-19 11:02:15 -07:00
Gregory Schier
0ed5c61fac Add debug 2024-07-19 10:58:48 -07:00
Gregory Schier
c3442f4326 Fix copy plugins script 2024-07-19 10:53:39 -07:00
Gregory Schier
9617ee95e0 Fix workflow 2024-07-19 10:49:29 -07:00
Gregory Schier
102bd588c2 NodeJS Plugin Runtime (#53) 2024-07-19 10:41:47 -07:00
Gregory Schier
47b8c4dd6b A few tweaks 2024-07-18 16:37:20 -07:00
Gregory Schier
7e5408fc92 Update useSaveResponse.tsx 2024-06-27 22:05:41 -07:00
Gregory Schier
a63b485b95 Move plugins to this repo 2024-06-27 21:44:45 -07:00
Gregory Schier
d1d08963fb Initial commit 2024-06-27 21:35:39 -07:00
Gregory Schier
408f42b86b Fix RadioDropdown key 2024-06-24 11:18:38 -07:00
Gregory Schier
94abb6838a Better performance on large workspaces 2024-06-21 10:53:11 -07:00
Gregory Schier
fdc96001db Better active workspace change notification 2024-06-21 10:11:00 -07:00
Gregory Schier
b6cd6e415a Consolidate any* hooks 2024-06-21 10:01:45 -07:00
Gregory Schier
146fc133f0 Add mutationKey everywhere 2024-06-21 09:25:25 -07:00
Gregory Schier
3b784378bf Move request to another workspace (#52) 2024-06-21 09:01:18 -07:00
Gregory Schier
bc35195ca8 Bump CI node version 2024-06-20 16:45:59 -07:00
Gregory Schier
0d106bdd90 Safe URI for reflection 2024-06-20 13:11:40 -07:00
Gregory Schier
ba9b914303 Fix button styles 2024-06-20 12:55:13 -07:00
Gregory Schier
3c12b14572 Refactor gRPC reflection! 2024-06-20 12:49:58 -07:00
Gregory Schier
907836a751 Update script 2024-06-20 09:23:50 -07:00
Gregory Schier
c993a5e658 Actually write the file 2024-06-20 09:20:04 -07:00
Gregory Schier
4275169005 Generic build version 2024-06-20 09:17:28 -07:00
Gregory Schier
c511a053df Bump version 2024-06-20 09:07:38 -07:00
Gregory Schier
1b036aabc1 Better fallback request name generation 2024-06-20 09:03:24 -07:00
Gregory Schier
d29e503309 Fix GRPC with files not refreshing, and tight render loop 2024-06-20 08:40:10 -07:00
Gregory Schier
f81ffe249e Better gRPC reflection errors 2024-06-18 10:54:39 -07:00
Gregory Schier
5cdcbc8dce Bump version 2024-06-18 10:41:22 -07:00
Gregory Schier
0545c2d598 Editor autocomplete same font size as editor 2024-06-18 09:43:51 -07:00
Gregory Schier
9520359e62 Move GraphQL introspection out of LocalStorage 2024-06-18 09:43:28 -07:00
Gregory Schier
cbfd259436 REvert other thing 2024-06-17 17:05:51 -07:00
Gregory Schier
f2213ff4e8 Fix editor tags wrapping behavior 2024-06-17 17:05:29 -07:00
Gregory Schier
82abb4b004 Change version 2024-06-17 15:09:44 -07:00
Gregory Schier
73b2e44094 Recursive environments 2024-06-17 12:24:06 -07:00
Gregory Schier
0317c46f8f Fix flash loading response viewer 2024-06-17 11:43:45 -07:00
Gregory Schier
ab1224c997 Fix parsing notification timestamp 2024-06-17 11:43:20 -07:00
Gregory Schier
2589e3e0dd More dynamic plugin access 2024-06-15 22:13:01 -07:00
Gregory Schier
b49081cd06 Workspace dropdown to RadioDropdown 2024-06-14 17:07:35 -07:00
Gregory Schier
6c331ed734 Fix plugins 2024-06-13 07:03:50 -07:00
Gregory Schier
4469b84ad6 Support nested functions 2024-06-12 23:13:36 -07:00
Gregory Schier
f9cd2fa7fa Parse window title and theme better 2024-06-12 10:15:14 -07:00
Gregory Schier
0674bae787 Move binary detection to TextViewer 2024-06-12 09:47:34 -07:00
Gregory Schier
53833e1345 Bump version 2024-06-12 00:23:50 -07:00
Gregory Schier
b9c6d9d877 Entitlement for v8/Deno 2024-06-12 00:23:32 -07:00
Gregory Schier
a5041d4229 Variables in pair editor 2024-06-11 12:33:43 -07:00
Gregory Schier
44ad8c7f30 Put toast on top 2024-06-11 12:04:46 -07:00
Gregory Schier
a479df5254 Fix bulk edit label 2024-06-11 09:02:11 -07:00
Gregory Schier
ec0a84d588 Bump version 2024-06-11 08:35:29 -07:00
Gregory Schier
43ca9a9390 Adjust fuzzy threshold 2024-06-10 23:25:57 -07:00
Gregory Schier
06707ed54c Fix window drag above cmd+k 2024-06-10 23:24:03 -07:00
Gregory Schier
6e4ee0045f Fix delete request in sidebar 2024-06-10 23:17:12 -07:00
Gregory Schier
55a426fc85 Don't arrow-nav to hidden dropdown items 2024-06-10 23:16:37 -07:00
Gregory Schier
81ff405874 Bulk edit environments 2024-06-10 23:16:21 -07:00
Gregory Schier
8c7f7a7a03 Fix hotkey react keys 2024-06-10 22:29:06 -07:00
Gregory Schier
47fcb8bad4 Cmd Palette Improvements (#50)
- Fuzzy matching
- Show hotkeys
- Add actions
2024-06-10 21:37:41 -07:00
Gregory Schier
f0c7a83134 Download Active Response (#49)
This PR prompts you to save un-previewable file types and adds an option
to save to the response history.
2024-06-10 16:36:09 -07:00
Gregory Schier
3875f90fea Remove jump to request hotkey 2024-06-10 09:00:26 -07:00
Gregory Schier
016c3f7dac Response viewer for PDF (#48)
This PR adds a response viewer for PDF files using `react-pdf`
2024-06-10 08:57:08 -07:00
Gregory Schier
302a69ed98 Don't focus sidebar on cmd+0 2024-06-09 08:36:12 -07:00
Gregory Schier
526b64cc5a Try fix CI 2024-06-09 08:09:47 -07:00
Gregory Schier
f1f1a02d79 Bump version 2024-06-09 07:56:44 -07:00
Gregory Schier
d277c5677f Remove CI again 2024-06-09 07:56:09 -07:00
Gregory Schier
d63dabe2fb Add it back 2024-06-09 07:23:28 -07:00
Gregory Schier
a0bc0ff87c Remove CI in release stage 2024-06-09 07:22:49 -07:00
Gregory Schier
35072669ec Remove GH Action step names 2024-06-09 07:16:53 -07:00
Gregory Schier
9bfd0d1fbf Back to other 2024-06-09 07:14:07 -07:00
Gregory Schier
c9a798c9cd Fix action step 2024-06-09 07:10:44 -07:00
Gregory Schier
4dad19db31 Rust cache release 2024-06-09 07:09:46 -07:00
Gregory Schier
dd483dbdd8 Cmd jump to request 2024-06-09 07:03:16 -07:00
Gregory Schier
7b2cb64b14 Only CI on PR 2024-06-09 06:47:47 -07:00
Gregory Schier
b6927435e5 Fix Rust lint 2024-06-09 06:43:53 -07:00
Gregory Schier
a576ba7a23 Remove slow udeps from CI 2024-06-08 21:03:17 -07:00
Gregory Schier
714a96120a Rust CI to release 2024-06-08 20:51:03 -07:00
Gregory Schier
6585c049c3 Try again 2024-06-08 20:47:48 -07:00
Gregory Schier
c89359cf55 Remove cache 2024-06-08 20:47:18 -07:00
Gregory Schier
2c060e5769 Try removing git db 2024-06-08 20:44:58 -07:00
Gregory Schier
595a92c324 Cargo check 2024-06-08 20:36:56 -07:00
Gregory Schier
53b922cc7c Remove Cargo fmt 2024-06-08 20:34:24 -07:00
Gregory Schier
117b4bd285 Fix tests 2024-06-08 20:30:52 -07:00
Gregory Schier
a522236885 Cargo format 2024-06-08 20:28:45 -07:00
Gregory Schier
acb629919b Set max dropdown width 2024-06-08 19:55:25 -07:00
Gregory Schier
99c8ffe121 Bump version 2024-06-08 19:46:32 -07:00
Gregory Schier
c7cc086d1d Upgrade reqwest and add ALPN for http/2 2024-06-08 19:40:35 -07:00
Gregory Schier
0e3918d5a2 Fix curl exporter 2024-06-08 19:40:11 -07:00
Gregory Schier
3a09752322 Fix cmd+k filtering 2024-06-07 22:52:23 -07:00
Gregory Schier
aa8c1649f9 Remove delete hotkey for request 2024-06-07 22:52:10 -07:00
Gregory Schier
b456e8ce94 Short method tags and hide active in cmd+k 2024-06-07 22:39:11 -07:00
Gregory Schier
f9412e6d8f Add command palette (#46)
This PR finished the initial PoC command palette. It currently only
supports switching between requests and workspaces, but can easily be
extended for more.
2024-06-07 21:59:57 -07:00
Gregory Schier
4a88e80669 Bulk editor (#45)
Bulk editor for all pair editors except multipart/form-data
2024-06-07 13:42:08 -07:00
Gregory Schier
e9bf97bd3f Fix rose pine and method tags 2024-06-07 12:01:31 -07:00
Gregory Schier
3ed78d1088 Generate things 2024-06-07 11:58:08 -07:00
Gregory Schier
1c1a794c2a Remove tauri-plugin-deep-link 2024-06-07 11:57:44 -07:00
Gregory Schier
0e47622e64 Update CI script 2024-06-07 11:01:21 -07:00
Gregory Schier
dbf5b5bdd7 Fix workflow 2024-06-07 10:54:50 -07:00
Gregory Schier
acfc254a58 Deno plugins (#42)
Switch from BoaJS to Deno core
2024-06-07 10:47:41 -07:00
Gregory Schier
f43b38c893 Open workspace pref (#44)
Ability to remember workspace window opening selection.
2024-06-07 09:04:53 -07:00
Gregory Schier
372588f541 Templating (#43)
Add new `templating` crate with custom parser/renderer for dealing with
variables
2024-06-07 08:39:12 -07:00
Gregory Schier
558b429807 Fix copy-as-curl variables 2024-06-05 06:53:38 -07:00
Gregory Schier
cc1b3a9f25 Bump version 2024-06-04 23:53:45 -07:00
Gregory Schier
366dbc9f2a Only release on tag again 2024-06-04 23:53:31 -07:00
Gregory Schier
30ee2bea34 Fix default workspace settings on initial Workspace 2024-06-04 17:06:40 -07:00
Gregory Schier
6992436fc7 Better analytics error log 2024-06-04 16:27:22 -07:00
Gregory Schier
71afaa74d3 Merge branch 'beta' into master 2024-06-04 15:01:55 -07:00
Gregory Schier
bcb991c83b Bump version 2024-06-04 15:00:34 -07:00
Gregory Schier
83c6250a8c Hopefully fix AppImage build not finding migrations. I think it was because the productName had a capital Yaak in it. 2024-06-04 14:59:40 -07:00
Gregory Schier
6d2e9b29d4 Remove Windows plugin 2024-06-04 02:56:52 -07:00
Gregory Schier
3135f9c187 2024.5.0-beta.2 (#38) 2024-06-03 14:03:25 -07:00
Gregory Schier
ba166cc509 Bump version 2024-06-03 14:00:49 -07:00
Gregory Schier
c53df99105 Move Postman to first plugin 2024-06-03 14:00:40 -07:00
Gregory Schier
a0b08614f0 Preserve JSON/XPath filter (Closes #22) 2024-06-03 13:49:51 -07:00
Gregory Schier
f4c91d131c Don't send request on completion (Fixes #27) 2024-06-03 07:49:13 -07:00
Gregory Schier
28e396cb1b Don't always change request method. Closes #29 2024-06-03 07:26:40 -07:00
Gregory Schier
a669ed2c6d Tweak settings labels 2024-06-02 23:54:00 -07:00
Gregory Schier
4a418be11f Fix dropdown icon color 2024-06-02 23:50:26 -07:00
Gregory Schier
09953ff7d5 Don't call is_fullscreen so much 2024-06-02 23:38:56 -07:00
Gregory Schier
5127de831a Fix autocomplete for environment editor names 2024-06-02 17:52:51 -07:00
Gregory Schier
0b6997f59c <Select> uses custom component on Windows 2024-06-02 16:57:23 -07:00
Gregory Schier
ddbd342033 Tweak Moonlight theme 2024-06-02 15:48:27 -07:00
Gregory Schier
d8d0622773 Fix font size 2024-06-02 11:53:41 -07:00
Gregory Schier
23dec8e96f Better invalid URL errors 2024-06-02 11:53:35 -07:00
Gregory Schier
cc9e8c4f1e Import content-type from Postman multi-part form 2024-06-02 11:53:25 -07:00
Gregory Schier
ee6c7b6b1a Also release on beta branch 2024-05-31 10:37:21 -07:00
Gregory Schier
8d605f3190 Bump version 2024-05-31 09:46:57 -07:00
Gregory Schier
6ddaa99ef1 Fix multipart files 2024-05-31 09:32:16 -07:00
Gregory Schier
a1102d2ba6 Fade in window contents (Layout) 2024-05-31 09:16:52 -07:00
Gregory Schier
0133432049 Window border on Linux 2024-05-31 08:43:35 -07:00
Gregory Schier
bb9f0b1607 Try tweaking settings/theme for Windows. Setting the theme didn't work. 2024-05-30 23:38:49 -07:00
Gregory Schier
ac1902c18b Ignore stoplights when centering settings title 2024-05-30 12:33:59 -07:00
Gregory Schier
b13207072a Tweak appearance settings 2024-05-30 12:32:12 -07:00
Gregory Schier
3efb5bb4eb Dracula theme 2024-05-30 11:56:57 -07:00
Gregory Schier
606977d795 Tweak 2024-05-30 11:45:40 -07:00
Gregory Schier
9e8afc3cc9 Theme analytics and Moonlight 2024-05-30 11:00:50 -07:00
Gregory Schier
a481cf403d Tweak settings for release 2024-05-30 10:28:59 -07:00
Gregory Schier
0b4e367dfc Unlisten to window event and fix hotkeys 2024-05-30 00:29:01 -07:00
Gregory Schier
e4022cf532 Window title working again 2024-05-30 00:11:55 -07:00
Gregory Schier
b942c22b20 Fix window stoplights 2024-05-29 22:59:34 -07:00
Gregory Schier
fbc684140b Custom font sizes and better zoom 2024-05-29 12:10:01 -07:00
Gregory Schier
7c71d8b751 Merge branch 'refs/heads/release'
# Conflicts:
#	src-tauri/src/updates.rs
2024-05-26 09:11:29 -07:00
Gregory Schier
d5c52e2ae5 Initial handler for yaak:// protocol 2024-05-26 08:45:15 -07:00
Gregory Schier
4f736b4656 Better theme export 2024-05-24 18:54:30 -07:00
Gregory Schier
f3024a259e More theme stuff 2024-05-24 17:36:48 -07:00
Gregory Schier
11814b56f1 Tweak themes 2024-05-23 10:16:29 -07:00
Gregory Schier
a936038f23 Hotdog stand 2024-05-23 10:14:07 -07:00
Gregory Schier
9e6bce0e41 More themes! 2024-05-23 09:40:11 -07:00
Gregory Schier
ab33630ef6 Set window title on Mac 2024-05-23 09:40:00 -07:00
Gregory Schier
656c90b54f More tweaks 2024-05-22 23:44:47 -07:00
Gregory Schier
33768af571 Tweak Yaak default themes 2024-05-22 23:28:53 -07:00
Gregory Schier
56acec473b A bunch more theme stuff 2024-05-22 23:14:53 -07:00
Gregory Schier
4c5087659b Theme system refactor (#31) 2024-05-21 17:56:06 -07:00
Gregory Schier
f1db72eb77 Move is_dev check for updates 2024-05-16 10:28:25 -07:00
Gregory Schier
6465d8732e Fix release (#30) 2024-05-14 15:35:53 -07:00
Gregory Schier
9780584f82 Merge remote-tracking branch 'refs/remotes/origin/release'
# Conflicts:
#	src-tauri/tauri.conf.json
2024-05-14 15:35:33 -07:00
Gregory Schier
aad4110cc7 Bump version 2024-05-14 15:34:34 -07:00
Gregory Schier
636a73d151 Oops 2024-05-14 15:33:27 -07:00
Gregory Schier
ed371c8cb7 Release 2024.4.1 (#28) 2024-05-14 15:01:55 -07:00
Gregory Schier
92709774f1 Fix maximize permission 2024-05-14 14:54:09 -07:00
Gregory Schier
8925fe9892 Fix autocomplete 2024-05-14 14:47:33 -07:00
Gregory Schier
5dd9539ab3 Add num launches to notification call 2024-05-14 14:25:10 -07:00
Gregory Schier
2c70b8bb0f Fix window clicking on Linux 2024-05-14 12:19:19 -07:00
Gregory Schier
1f88b7a41a Slight refactor 2024-05-14 08:44:15 -07:00
Gregory Schier
c9e69b4b35 Build plugin 2024-05-14 08:28:20 -07:00
Gregory Schier
4842832468 Improve Curl imports 2024-05-14 08:28:01 -07:00
Gregory Schier
affa7fec29 Bump version for release 2024-05-14 07:50:01 -07:00
Gregory Schier
77e7bfbbc1 Fix upgrade cancel 2024-05-14 07:08:57 -07:00
Gregory Schier
cbbc01a7c6 Toast after data export 2024-05-14 00:36:15 -07:00
Gregory Schier
0a98f08f2a Fix selection of HTTP Request on create dropdown hotkey 2024-05-14 00:17:33 -07:00
Gregory Schier
9875d2353d Fix curl export with multi-line body 2024-05-14 00:05:54 -07:00
Gregory Schier
4894677599 Autocomplete URLs of other requests 2024-05-13 23:54:52 -07:00
Gregory Schier
3f40f36217 Fixed asset:// loading and tweak curl stuff 2024-05-13 23:20:30 -07:00
Gregory Schier
9480117be5 Bump version 2024-05-13 16:52:32 -07:00
Gregory Schier
50dc494b58 Better notifications 2024-05-13 16:52:20 -07:00
Gregory Schier
22aa14cdc2 Improve copy-as-curl 2024-05-13 11:30:10 -07:00
Gregory Schier
b18c042483 Refactor UpdateMode 2024-05-13 07:28:45 -07:00
Gregory Schier
80ea4c14a4 Hide large GRPC messages by default 2024-05-13 07:19:26 -07:00
Gregory Schier
0e22228766 Bump version 2024-05-12 12:11:14 -07:00
Gregory Schier
9ce1732d75 Add curl banner to import dialog 2024-05-10 13:36:30 -07:00
Gregory Schier
fd6ad952fe Change curl import to post-toast 2024-05-10 13:06:40 -07:00
Gregory Schier
582da26574 Toast component and use for copy-as-curl 2024-05-10 12:37:04 -07:00
Gregory Schier
b533a01677 Insomnia YAML and loading state on import 2024-05-10 09:46:20 -07:00
Gregory Schier
acc07780a7 Some fixes after upgrading react-query 2024-05-10 09:19:29 -07:00
Gregory Schier
9f4c80ecf1 Update deps 2024-05-10 08:52:06 -07:00
Gregory Schier
19d2574e33 Fix paste handler in Editor.tsx 2024-05-09 23:17:43 -07:00
Gregory Schier
2e3af37d16 Fix release targets 2024-05-09 15:38:27 -07:00
Gregory Schier
9e14aae069 Don't commit .cargo 2024-05-09 10:17:35 -07:00
Gregory Schier
d67c0a614d Fix args 2024-05-09 09:35:39 -07:00
Gregory Schier
1c9a3512a0 Update GH action 2024-05-09 09:33:47 -07:00
Gregory Schier
6b354413f3 Try fix linux 2024-05-09 08:37:18 -07:00
Gregory Schier
819b54f376 Fix env var in GH Action 2024-05-09 08:29:45 -07:00
Gregory Schier
53ce4bfc4f Fix curl export tests 2024-05-09 08:18:06 -07:00
Gregory Schier
a14f41a77a Default .app/.dev/etc domains to https protos 2024-05-09 08:16:06 -07:00
Gregory Schier
0f0cbe7bcb Bump version for beta 2024-05-09 07:52:36 -07:00
Gregory Schier
657153beff Fix GRPC event.emit permissions 2024-05-09 07:45:00 -07:00
Gregory Schier
bf4eee72df Import from Curl 2024-05-09 07:31:52 -07:00
Gregory Schier
c64c794f86 Package lock 2024-05-08 15:37:53 -07:00
Gregory Schier
e10ff3d136 Slight refactor to copy-as-curl 2024-05-08 00:28:40 -07:00
Gregory Schier
b4d268b202 Add rename request to context menu
Closes #21
2024-05-08 00:08:18 -07:00
Gregory Schier
88ee60c97f Copy as curl 2024-05-08 00:00:50 -07:00
Gregory Schier
82e2a6b73e Curl import (#24) 2024-05-07 21:57:03 -07:00
Gregory Schier
896e3d5831 Upgrade to Tauri 2.0 (#23) 2024-05-04 14:14:19 -07:00
Gregory Schier
7f02060b9c Fix horizontal scroll on GraphQL variables editor 2024-04-18 10:53:36 -07:00
Gregory Schier
91fdbe4d33 Oops 2024-04-02 10:11:37 +02:00
Gregory Schier
ba5bfd07f7 Postman text body import 2024-04-02 10:10:16 +02:00
Gregory Schier
fd2132994b Bump version 2024-04-01 08:48:26 +02:00
Gregory Schier
612a38d6e1 Separate floating sidebar hidden state 2024-03-22 10:43:10 -07:00
Gregory Schier
d2211c5e9e Filtering for cmd palette 2024-03-22 10:42:45 -07:00
Gregory Schier
b8d5e5cecb Space between var placeholders and code fold cursor 2024-03-22 10:42:35 -07:00
Gregory Schier
6779251ff3 Fix Postman variable import 2024-03-22 10:40:51 -07:00
Gregory Schier
2904caea79 Adjust highlight color 2024-03-22 10:37:45 -07:00
Gregory Schier
290636c098 Some scrolling tweaks 2024-03-20 17:27:47 -07:00
Gregory Schier
0a44635bcf Fix URL bar buttons in expanded state 2024-03-20 16:17:05 -07:00
Gregory Schier
1683271198 Bump version 2024-03-20 16:05:14 -07:00
Gregory Schier
cf46243e6d Fix dialog height 2024-03-20 16:05:01 -07:00
Gregory Schier
d2d5f2b957 Remove openOnHotKeyAction in favor of putting hotkey on the trigger button= 2024-03-20 15:56:39 -07:00
Gregory Schier
e2220f771d Use SQLite connect options 2024-03-20 13:33:11 -07:00
Gregory Schier
6096199174 Pass workspace id to import 2024-03-20 07:30:59 -07:00
Gregory Schier
09a23ce357 Handle import errors 2024-03-20 07:27:12 -07:00
Gregory Schier
a49ead969e Postman bearer, global auth, global vars 2024-03-20 07:26:46 -07:00
Gregory Schier
8d24e8c282 Implement select for command palette 2024-03-19 17:24:57 -07:00
Gregory Schier
25de5460ad Tweak checkbox and autocomplete styles 2024-03-19 17:08:06 -07:00
Gregory Schier
776679e2c3 Fix sidebar border 2024-03-19 16:44:37 -07:00
Gregory Schier
351cfae042 Export multiple workspaces 2024-03-19 13:43:33 -07:00
Gregory Schier
bb561d7b98 Fix settings query store and analytics 2024-03-19 10:23:21 -07:00
Gregory Schier
88ae30101a Start of command palette 2024-03-18 17:09:01 -07:00
Gregory Schier
2d6caa1126 useRequests hook 2024-03-18 13:49:36 -07:00
Gregory Schier
e2166d8a26 Fix editor key events 2024-03-18 13:40:15 -07:00
Gregory Schier
c49e81cde4 Simple tests for Postman and Yaak importers 2024-03-18 13:40:00 -07:00
Gregory Schier
fa46611d76 Set filename on Multipart part 2024-03-18 13:24:27 -07:00
Gregory Schier
93f9eee884 Fix GraphQL editor large variables quirk 2024-03-18 13:10:55 -07:00
Gregory Schier
9d547dee3d Fix postman import and import Insomnia gRPC 2024-03-18 08:18:04 -07:00
Gregory Schier
f75446de87 Better padding 2024-03-16 13:59:06 -07:00
Gregory Schier
e4bd257bae Remove debug log 2024-03-16 12:50:27 -07:00
Gregory Schier
901cf53cd2 Custom content-type for multipart items 2024-03-16 12:49:17 -07:00
Gregory Schier
4b33a696ac Content menu on entire sidebar 2024-03-16 10:47:10 -07:00
Gregory Schier
3a9d4045d0 Obfuscate environment variables 2024-03-16 10:42:46 -07:00
Gregory Schier
d514880cd8 Fix light mode text selection 2024-03-16 09:48:55 -07:00
Gregory Schier
49da0e5aa8 Stubbed out global commands helper 2024-03-16 09:46:11 -07:00
Gregory Schier
40f8a41a8d Fix deleting workspace staying on deleted workspace path 2024-03-15 13:07:02 -07:00
Gregory Schier
76d1478f19 Bump version 2024-03-10 18:15:00 -07:00
Gregory Schier
8c09558f62 Fix recent workspaces 2024-03-10 17:42:25 -07:00
Gregory Schier
b177993f8a Fix adding header if not exist 2024-03-10 17:10:16 -07:00
Gregory Schier
6e102175c0 Remove completion debug blur thing 2024-03-10 16:46:18 -07:00
Gregory Schier
dc1af2faec Adjust detected content-type header 2024-03-10 16:26:06 -07:00
Gregory Schier
ef8528d2b4 Clickable links in response viewer 2024-03-10 13:41:44 -07:00
Gregory Schier
d51c58aa3d Better error handling for file not found 2024-03-10 11:02:32 -07:00
Gregory Schier
11e7fb88cb Cancel file selection sets to undefined 2024-03-10 10:57:49 -07:00
Gregory Schier
efd7e7bf84 Binary file uploads and missing workspace empty state 2024-03-10 10:56:38 -07:00
Gregory Schier
ce9ccd34e7 Fix GraphQL Header backend 2024-02-28 13:38:22 -08:00
Gregory Schier
9dc2435e43 Fix GraphQL content type on creation, and placeholder 2024-02-28 13:04:17 -08:00
Gregory Schier
4f6a678ca6 Include default protoc includes 2024-02-28 09:45:11 -08:00
Gregory Schier
5804344bbf Bump version 2024-02-28 08:51:34 -08:00
Gregory Schier
18caa927b7 Fix dropdown arrow keys 2024-02-28 08:51:08 -08:00
Gregory Schier
e5bafd088c Track GRPC 2024-02-28 07:32:05 -08:00
Gregory Schier
33b15c52c2 Analytics ID 2024-02-28 07:27:19 -08:00
Gregory Schier
796ceb56c4 Analytics ID 2024-02-28 07:26:02 -08:00
Gregory Schier
597664d6f9 Remove Escape from hotkeys 2024-02-27 18:58:41 -08:00
Gregory Schier
a40437a7fb Fix sidebar focus 2024-02-27 10:33:20 -08:00
Gregory Schier
902030bfff Fix gap in dropdown menu items 2024-02-27 10:27:04 -08:00
Gregory Schier
5e7b2db28d Methods in recent dropdown 2024-02-27 10:20:35 -08:00
Gregory Schier
e12b85daae Many hotkey improvements 2024-02-27 10:10:38 -08:00
Gregory Schier
2705e90016 Info logs in build 2024-02-26 17:27:08 -08:00
Gregory Schier
fd9056179d Introspection tweak 2024-02-26 17:24:44 -08:00
Gregory Schier
ac1f4395d2 Tweak editor find/replace 2024-02-26 17:17:37 -08:00
Gregory Schier
d5afc37dd7 Fix find/replace CM styling 2024-02-26 17:07:09 -08:00
Gregory Schier
4876ff587a Fix lint errors 2024-02-26 07:43:08 -08:00
Gregory Schier
c2f3fac22b Autocomplete icons and transfer proto files on duplicate 2024-02-26 07:39:53 -08:00
Gregory Schier
eae1177365 Prompt folder name on create 2024-02-26 07:14:27 -08:00
Gregory Schier
5a3596478a Better creation from folder menu 2024-02-26 07:09:59 -08:00
Gregory Schier
629e92a98e Auto-fill link to changelog in release script 2024-02-25 18:42:04 -08:00
Gregory Schier
964e6ddb63 Protoc sidecar 2024-02-25 17:43:29 -08:00
Gregory Schier
31b5032817 Fix deletion in sidebar 2024-02-25 12:56:57 -08:00
Gregory Schier
520ff0f68c Fix create dropdown hotkey 2024-02-24 22:02:04 -08:00
Gregory Schier
3d61bac030 Try changing macOS version 2024-02-24 21:25:58 -08:00
Gregory Schier
34a7c39637 Bump some things 2024-02-24 21:23:02 -08:00
Gregory Schier
4d481b82a5 Fix response pane height 2024-02-24 19:31:59 -08:00
Gregory Schier
79ee5a29b1 Don't build plugins 2024-02-24 18:58:51 -08:00
Gregory Schier
73f0e29c59 Remove npm ci plugins 2024-02-24 18:28:07 -08:00
Gregory Schier
9a28a28ae6 Check in built plugins again 2024-02-24 18:27:36 -08:00
Gregory Schier
06177c8077 Add pkg locks 2024-02-24 18:19:16 -08:00
Gregory Schier
ea61428ff5 Install plugins in CI 2024-02-24 16:29:22 -08:00
Gregory Schier
2e980660c8 Bump version 2024-02-24 16:22:55 -08:00
Gregory Schier
ad890e01b0 Got json-schema autocomplete working again 2024-02-24 16:22:22 -08:00
Gregory Schier
5bd2d0959a Proto files off model 2024-02-24 14:16:58 -08:00
Gregory Schier
046a569ebe Better gRPC status on error 2024-02-24 12:41:43 -08:00
Gregory Schier
fd044005a6 More analytics, and cancel requests 2024-02-24 11:30:07 -08:00
Gregory Schier
0857ef9afd Hook up empty state buttons for first-launch experience 2024-02-23 16:34:19 -08:00
Gregory Schier
3dfb8b3fb2 gRPC in import/export 2024-02-23 16:16:13 -08:00
Gregory Schier
4571d7dc93 Everything in messages now 2024-02-22 19:51:30 -08:00
Gregory Schier
321b013ce6 Format XML responses 2024-02-22 01:00:02 -08:00
Gregory Schier
ca4d9b1ad6 Refactor into grpc events 2024-02-22 00:49:22 -08:00
Gregory Schier
bb628e699f Fix split layout placeholder 2024-02-18 09:12:44 -08:00
Gregory Schier
a9d0bb3915 Add other body type 2024-02-18 08:59:14 -08:00
Gregory Schier
555389b667 Add metadata and squash migrations 2024-02-18 08:35:31 -08:00
Gregory Schier
ed55eb2238 Better environment edit dialog 2024-02-18 07:44:53 -08:00
Gregory Schier
e934ca9586 Allow editing base environment 2024-02-18 00:14:47 -08:00
Gregory Schier
d953a75073 Render gRPC message body 2024-02-18 00:14:26 -08:00
Gregory Schier
8d29fad261 gRPC authentication 2024-02-17 23:47:28 -08:00
Gregory Schier
ab8503d87c Even better dropdown filtering 2024-02-17 22:27:01 -08:00
Gregory Schier
daf138c967 Started gRPC tabs 2024-02-17 22:15:44 -08:00
Gregory Schier
2205464e1e Better dropdown filtering 2024-02-17 22:03:42 -08:00
Gregory Schier
44b45fc900 Prevent dragging folders into itself 2024-02-17 15:32:15 -08:00
Gregory Schier
323449b205 Fix deps 2024-02-17 15:20:13 -08:00
Gregory Schier
63f762a891 Upgrade Vite deps and fix windows DnD 2024-02-17 14:57:12 -08:00
Gregory Schier
2679f5ebdf Fix postman importer TS ref 2024-02-17 11:05:57 -08:00
Gregory Schier
29571b4942 Add more info to settings 2024-02-17 11:04:19 -08:00
Gregory Schier
4d97dce6b1 Adjust placeholder error colors 2024-02-15 21:15:18 -08:00
Gregory Schier
c8fedd3d2c Tweak tab padding 2024-02-15 16:38:14 -08:00
Gregory Schier
939117d5c8 Responsive (scroll) workspace header 2024-02-15 16:30:08 -08:00
Gregory Schier
a1b4d24907 Better button highlight border 2024-02-15 15:55:32 -08:00
Gregory Schier
c8feb6482b Refactor recentRequest/Env/Workspace 2024-02-15 15:14:18 -08:00
Gregory Schier
b7d9f0bf92 Better sidebar collapse, debuonce container uqeries, fix recent requests 2024-02-15 15:07:15 -08:00
Gregory Schier
fe4696daf7 Better recent work/env/req logic 2024-02-13 17:21:54 -08:00
Gregory Schier
d63d9ca213 Fix active environment on workspace change 2024-02-13 16:42:07 -08:00
Gregory Schier
a57ad3bd7c Active environment in query param 2024-02-13 16:32:31 -08:00
Gregory Schier
b0a341b29f Better variable placeholder styles 2024-02-13 16:32:17 -08:00
Gregory Schier
8f8bd00487 Show GQL for graphql requests in sidebar 2024-02-13 16:32:00 -08:00
Gregory Schier
bd084cdf02 Better highlight on JSON tree 2024-02-13 16:31:38 -08:00
Gregory Schier
2cd184f0c7 Cmd+n to open dropdown 2024-02-11 14:17:09 -08:00
Gregory Schier
27112a39f8 Tab-to-indent in editor 2024-02-11 14:16:36 -08:00
Gregory Schier
0a33a32475 Make editor variables more prominent 2024-02-11 14:16:25 -08:00
Gregory Schier
eb08db3d4a Fix dropdown open index 2024-02-11 14:16:11 -08:00
Gregory Schier
630e573777 Catch URL error when URL = "{{HOST}}" 2024-02-11 09:04:27 -08:00
Gregory Schier
c71790195b Grap gRPC status codes 2024-02-11 08:52:12 -08:00
Gregory Schier
90b0112f14 Use basemsg 2024-02-11 08:29:57 -08:00
Gregory Schier
d274b85db1 Combine grpc handlers, fix duplicate 2024-02-10 10:41:45 -08:00
Gregory Schier
a55cf9e216 Fix response emit and sidebar flex 2024-02-09 16:16:02 -08:00
Gregory Schier
7a960574a5 Sidebar methods and fix model hooks 2024-02-09 16:09:24 -08:00
Gregory Schier
017de296a0 Fix editor selection/cursor and lint errors 2024-02-09 14:32:58 -08:00
Gregory Schier
c7620e90a1 Remove built plugins from source control 2024-02-09 05:09:37 -08:00
Gregory Schier
0d8203da47 Merge branch 'grpc' 2024-02-09 05:07:45 -08:00
Gregory Schier
671d0fe847 Move plugins to build folder 2024-02-09 05:07:34 -08:00
Gregory Schier
9f54eb77a0 gRPC Support (#20) 2024-02-09 05:01:00 -08:00
Gregory Schier
bc4ef2d9f7 Better message serialization 2024-02-09 05:00:48 -08:00
Gregory Schier
9c35f7c85c Working sidebar actions for grpc 2024-02-07 00:02:02 -08:00
Gregory Schier
d668244f9b Change hotkey handling to capture phase 2024-02-06 23:44:10 -08:00
Gregory Schier
a2a36ceb54 Fix pool management 2024-02-06 23:26:24 -08:00
Gregory Schier
14582e6bf4 Minor tweaks 2024-02-06 19:32:03 -08:00
Gregory Schier
2ea7e6ba27 gRPC schema from files! 2024-02-06 19:20:32 -08:00
Gregory Schier
395481b5cb Proto selection UI/models 2024-02-06 12:29:23 -08:00
Gregory Schier
0dc6b2d9e7 Better reflect failure UI 2024-02-05 14:50:47 -08:00
Gregory Schier
5ad13a61e6 Async connection management 2024-02-05 11:29:27 -08:00
Gregory Schier
3ed00c0955 Refactor model emit, and recent conn dropdown 2024-02-05 10:39:47 -08:00
Gregory Schier
e113f86c5d db to app_handle! 2024-02-04 22:52:04 -08:00
Gregory Schier
236087fdc8 Single upserted_model event 2024-02-04 21:19:15 -08:00
Gregory Schier
7bb620e6d5 Fix DB mutex deadlock 2024-02-04 21:17:05 -08:00
Gregory Schier
acb01cf086 More messages 2024-02-04 19:08:31 -08:00
Gregory Schier
07cad2e337 Client streaming working 2024-02-04 17:53:15 -08:00
Gregory Schier
4ac0f20f2a Bidirectional working 2024-02-04 14:10:38 -08:00
Gregory Schier
be0cc4bfe4 Messages are flowing! 2024-02-04 12:09:10 -08:00
Gregory Schier
6d6f865fb7 Use req/conn/msg models in unary/server 2024-02-04 11:57:12 -08:00
Gregory Schier
d2b44cb7d2 Remove console log 2024-02-03 13:39:45 -08:00
Gregory Schier
1c7bdb346a Grpc layout use new models 2024-02-03 13:28:31 -08:00
Gregory Schier
4360b3658f Show gRPC requests in sidebar 2024-02-03 13:08:24 -08:00
Gregory Schier
47a8f06c90 gRPC models and tables 2024-02-03 11:14:42 -08:00
Gregory Schier
2a10113a57 Tiny fixes 2024-02-02 18:41:00 -08:00
Gregory Schier
fb817bc2d5 Better formatting 2024-02-02 13:37:44 -08:00
Gregory Schier
6c69fff27d A bit better handling of responses 2024-02-02 13:32:06 -08:00
Gregory Schier
d8948bb061 Split layouts and things 2024-02-02 12:41:37 -08:00
Gregory Schier
fdedb9bd28 bidi hacked! 2024-02-02 01:10:54 -08:00
Gregory Schier
4e781b752d Implement cancel 2024-02-02 00:18:37 -08:00
Gregory Schier
b526ea506b Better connection management 2024-02-01 20:29:32 -08:00
Gregory Schier
e3a2b7146b gRPC manager mostly working 2024-02-01 15:36:50 -08:00
Gregory Schier
1ae123bb51 Small refactor 2024-02-01 02:42:59 -08:00
Gregory Schier
c655557313 Refactor commands and DB 2024-02-01 02:29:24 -08:00
Gregory Schier
3ab1f5308c Some minor tweaks 2024-02-01 00:48:03 -08:00
Gregory Schier
9a2688617d Revert response JSON tree 2024-02-01 00:38:57 -08:00
Gregory Schier
a3c979a987 Even better styles 2024-02-01 00:36:49 -08:00
Gregory Schier
1628d0c843 Styled it up a bit 2024-02-01 00:16:09 -08:00
Gregory Schier
393df4e269 Merge remote-tracking branch 'origin/grpc' into grpc 2024-01-31 22:14:15 -08:00
Gregory Schier
1e309e821e Hacky server streaming done 2024-01-31 22:14:08 -08:00
Gregory Schier
acdec8c96d Hacky client streaming done 2024-01-31 22:13:46 -08:00
Gregory Schier
c64f1108f0 Initial frontend for gRPC UI 2024-01-30 16:43:54 -08:00
Gregory Schier
c51d5c5377 Hooked up test call from frontend! 2024-01-29 20:50:43 -08:00
Gregory Schier
373915671e Fix cookie jar 2024-01-28 17:49:04 -08:00
Gregory Schier
650aa240ea Track dialogs 2024-01-28 16:33:36 -08:00
Gregory Schier
2983f2544d Fix dropdown separator 2024-01-28 16:21:41 -08:00
Gregory Schier
2be41475e6 Better format 2024-01-28 16:19:46 -08:00
Gregory Schier
65c023c8b8 More response info 2024-01-28 16:02:49 -08:00
Gregory Schier
a54fff93a6 Better BG color 2024-01-28 14:43:04 -08:00
Gregory Schier
6104a8b3c2 Cookie Support (#19) 2024-01-28 14:39:51 -08:00
Gregory Schier
6c44035d2b Add shift to hotkey dialog hotkey 2024-01-19 22:11:20 -08:00
Gregory Schier
29e7bb1dcb Show alert after force checking updates 2024-01-19 22:11:02 -08:00
Gregory Schier
ae9c23b740 Better dialog padding 2024-01-19 22:08:32 -08:00
Gregory Schier
1df65fbf87 Change env hotkey to use shift 2024-01-19 21:53:48 -08:00
Gregory Schier
13fdf9d9e4 Fix URL 2px grow on focus 2024-01-19 21:49:51 -08:00
Gregory Schier
7da01e21e2 Bump version 2024-01-19 13:42:02 -08:00
Gregory Schier
05e8841e82 Fix analytics again 2024-01-18 22:28:25 -08:00
Gregory Schier
a837ffd7bb Fix dialog close button 2024-01-18 20:57:42 -08:00
Gregory Schier
def44d3266 Fix URLBar expanded state inner buttons 2024-01-18 20:40:56 -08:00
Gregory Schier
60acc86e52 Some analytics fixes 2024-01-18 20:23:02 -08:00
Gregory Schier
874c73b50f Launch analytics events, changelog, better filter styles 2024-01-18 14:42:02 -08:00
Gregory Schier
99d69687b6 Bump version 2024-01-17 14:56:47 -08:00
Gregory Schier
a49ae3d89d Custom HTTP method names 2024-01-17 14:52:19 -08:00
Gregory Schier
59f723827e Workspace header tweak Windows 2024-01-17 18:48:43 -08:00
Gregory Schier
b1e14a6dc4 Fix header in fullscreen mode on Mac 2024-01-17 09:34:47 -08:00
Gregory Schier
e459674338 Download response, and some fixes 2024-01-16 17:02:55 -08:00
Gregory Schier
e196f1d98e Fix editor toolbar blocking things 2024-01-15 21:44:53 -08:00
Gregory Schier
dc552b8099 Better request creation (Closes #14) 2024-01-15 21:39:27 -08:00
Gregory Schier
9658434503 XPath plugin 2024-01-15 21:27:47 -08:00
Gregory Schier
ade6c1c4f7 Fix send icon 2024-01-15 15:43:55 -08:00
Gregory Schier
2a759144d6 Switch to Lucide icons 2024-01-15 15:42:28 -08:00
Gregory Schier
b0e1614aac Improve response filter UX 2024-01-15 15:19:29 -08:00
Gregory Schier
13307a76af JSONPath filter plugins working 2024-01-15 15:06:49 -08:00
Gregory Schier
d23de93917 Move plugin stuff around 2024-01-15 14:33:51 -08:00
Gregory Schier
f55c8aba56 Fix request duplication 2024-01-15 13:47:44 -08:00
Gregory Schier
009036b004 Fix workspace defaults 2024-01-15 12:25:13 -08:00
Gregory Schier
8887d2a8e9 Better settings dialog 2024-01-15 12:16:44 -08:00
Gregory Schier
4df7356950 Fix resize observer 2024-01-15 12:02:08 -08:00
Gregory Schier
34a8fc4e22 Move request-related settings to workspace 2024-01-15 11:52:36 -08:00
Gregory Schier
b01747299f Bump beta version 2024-01-14 20:30:25 -08:00
Gregory Schier
3e9a89a4c9 fix mac decorations 2024-01-14 17:22:31 -08:00
Gregory Schier
2ef6885949 Integrated titlebar windows 2024-01-14 16:44:04 -08:00
Gregory Schier
218b593bfa Further titlebar tweaks 2024-01-14 12:02:44 -08:00
Gregory Schier
b60bc091b8 Better titlebar control icons 2024-01-14 11:56:21 -08:00
Gregory Schier
55a2d92c8b Basic Linux/Windows integrated titlebar 2024-01-13 23:40:32 -08:00
Gregory Schier
b212b80927 Fix hotkey formatting 2024-01-12 22:12:01 -08:00
Gregory Schier
9c4cd898a2 beta tag 2024-01-12 22:00:55 -08:00
Gregory Schier
93d1ff778e fix appearance init 2024-01-12 21:59:46 -08:00
Gregory Schier
a8630ede38 Vendor Openssl 2024-01-12 21:03:28 -08:00
Gregory Schier
3600f3aa26 Hotkeys for request switcher 2024-01-12 21:03:20 -08:00
Gregory Schier
905bce0322 Appearance setting and gzip/etc support 2024-01-12 13:39:08 -08:00
Gregory Schier
202e272e90 Initial settings implementation 2024-01-11 21:13:17 -08:00
Gregory Schier
11161fda51 Dropdown manages hotkeys now 2024-01-11 10:18:05 -08:00
Gregory Schier
9f75497f15 Hotkey for keyboard shortcut help 2024-01-10 22:05:16 -08:00
Gregory Schier
8dcf9a8921 Bump version number 2024-01-10 16:25:55 -08:00
Gregory Schier
d414709d1a Add hotkey dialog and rust-only analytics 2024-01-10 16:18:08 -08:00
Gregory Schier
94361f7c27 Fix beta icon 2024-01-08 17:07:42 -08:00
Gregory Schier
6056859da6 Bump version to 2024.0.0 2024-01-08 15:57:59 -08:00
Gregory Schier
b1692b41f0 Hotkey labels 2024-01-08 15:57:21 -08:00
Gregory Schier
312c01e405 Show hotkeys on empty views 2024-01-08 15:13:44 -08:00
Gregory Schier
6f15d1352b Remove base env, fix hotkeys, and QoL improvements 2024-01-07 22:24:19 -08:00
Gregory Schier
cb9960bbc8 Fix hotkeys getting stuck on cmd+tab 2024-01-07 21:32:25 -08:00
Gregory Schier
9e31bbcfa3 Always show settings dropdown 2023-11-22 09:39:30 -08:00
Gregory Schier
43706009a2 Tweak margin 2023-11-22 09:37:50 -08:00
Gregory Schier
c11a0ca823 Fix bottom-up dropdown positioning 2023-11-22 09:35:56 -08:00
Gregory Schier
77e3f4cc40 Bump version 2023-11-22 09:06:47 -08:00
Gregory Schier
884909d449 Better linux/Windows support for hotkeys 2023-11-22 09:06:22 -08:00
Gregory Schier
e5e356a822 Good hotkey support 2023-11-22 09:01:48 -08:00
Gregory Schier
1d9aa6748d Reset URL bar when request changes 2023-11-21 23:26:29 -08:00
Gregory Schier
7742cde11a Env dialog hotkey 2023-11-21 22:35:28 -08:00
Gregory Schier
7381dcec05 Remove response body and basic hotkeys 2023-11-21 22:15:01 -08:00
Gregory Schier
2c7bf29ec6 Remove app-specific menu items 2023-11-21 19:18:40 -08:00
Gregory Schier
dafaa5940a Fix macOS menu and fallback URL 2023-11-21 09:24:13 -08:00
Gregory Schier
0281396d58 Hide menu on windows/linux 2023-11-21 08:17:37 -08:00
Gregory Schier
e98081b9f2 Disable sandboxing (again) 2023-11-19 21:59:55 -08:00
Gregory Schier
0f7839bfaf Fix drag-drop reorder 2023-11-19 21:43:01 -08:00
Gregory Schier
d2f0e690e0 Postman ID generation 2023-11-19 20:54:02 -08:00
Gregory Schier
c7581d283e Bump beta.3 2023-11-19 20:46:55 -08:00
Gregory Schier
a68024604b Postman variables + urlencoded forms 2023-11-19 20:29:24 -08:00
Gregory Schier
ceb55bc56b Add back Windows/Linux builds 2023-11-19 18:22:13 -08:00
Gregory Schier
c9b2842e62 Remove Tauri context menu plugin 2023-11-19 18:21:10 -08:00
Gregory Schier
cb55bc1746 Fix header padding windows/linux 2023-11-19 18:14:49 -08:00
Gregory Schier
af59695a55 Some tweaks 2023-11-19 18:13:32 -08:00
Gregory Schier
a7a2608c44 Beta 2 2023-11-19 17:41:58 -08:00
Gregory Schier
78b8b96b8f Network entitlement 2023-11-19 17:41:46 -08:00
Gregory Schier
ed1427d421 Try sandboxing again 2023-11-19 17:06:31 -08:00
Gregory Schier
5c3f1af87b Remove sandboxing 2023-11-17 09:33:16 -08:00
Gregory Schier
8872b96efa Out of beta 2023-11-17 07:53:26 -08:00
Gregory Schier
44fa2c8dbb Tweak 2023-11-17 07:52:03 -08:00
Gregory Schier
3ad06be9d6 Format GraphQL variables 2023-11-17 07:51:03 -08:00
Gregory Schier
21bbb29a4f Drag into folder (Closes #8) 2023-11-17 07:36:01 -08:00
Gregory Schier
48923634d9 Mostly move some stuff around 2023-11-16 18:53:34 -08:00
Gregory Schier
f9703fbc1d Better update logic 2023-11-14 14:28:06 -08:00
Gregory Schier
8839a0b7af Better dropdown menu 2023-11-14 10:56:56 -08:00
Gregory Schier
edb820c7d9 Version to beta 2023-11-14 10:07:39 -08:00
Gregory Schier
8584f0aa33 Beta channel updates 2023-11-14 08:57:46 -08:00
Gregory Schier
f60cb35b5e Multipart form UI and fixes 2023-11-14 00:32:02 -08:00
Gregory Schier
a4f5e4a6b8 Got multipart working (text-only) 2023-11-13 23:26:11 -08:00
Gregory Schier
ecb3ace6a9 Fix window title moving stoplights (for now) 2023-11-13 23:25:47 -08:00
Gregory Schier
5f2b20a0da Postman import form data 2023-11-13 11:48:28 -08:00
Gregory Schier
2158692291 Some small improvements 2023-11-13 11:44:29 -08:00
Gregory Schier
feab2abe0c Form urlencoded bodies! 2023-11-13 11:28:37 -08:00
Gregory Schier
ae62a581a2 Url parameters done 2023-11-13 10:52:11 -08:00
Gregory Schier
92dcbedf2a Minor tweaks 2023-11-12 21:16:42 -08:00
Gregory Schier
356b8acd5b Custom updater code 2023-11-12 21:16:33 -08:00
Gregory Schier
5fd16b922c Request body is now an object 2023-11-12 11:16:12 -08:00
Gregory Schier
f1fc57830d Some postman import improvements 2023-11-11 10:43:11 -08:00
Gregory Schier
8951973f02 Sync window title (Closes #13) 2023-11-10 15:55:50 -08:00
Gregory Schier
2377b29d86 Dev app icon 2023-11-10 13:06:12 -08:00
Gregory Schier
f9879824d2 Upgrade sqlx 2023-11-10 12:28:33 -08:00
Gregory Schier
184ce2cb72 Clean up importers 2023-11-10 11:39:17 -08:00
Gregory Schier
2a2fb07c60 Fix is_empty check 2023-11-10 09:12:20 -08:00
Gregory Schier
feb542fd2b Postman importer semi-complete 2023-11-10 09:08:20 -08:00
Gregory Schier
d5295efd82 Tidy up logs and general cleanup 2023-11-09 20:33:09 -08:00
Gregory Schier
8156b51bda Move error alert to hook 2023-11-09 20:02:42 -08:00
Gregory Schier
b04b56d240 Show import errors 2023-11-09 20:00:19 -08:00
Gregory Schier
3685786cb5 Hacky Yaak import complete! 2023-11-09 19:40:31 -08:00
Gregory Schier
0d94306b28 More fallback request handing 2023-11-09 17:42:10 -08:00
Gregory Schier
895fdce1b7 Request fallback name in header 2023-11-09 17:34:57 -08:00
Gregory Schier
29e0b9e5d2 Better default request names 2023-11-09 17:26:04 -08:00
Gregory Schier
3f717d4c5a Better non-named requests 2023-11-09 17:17:03 -08:00
Gregory Schier
4ce2436ac5 Better Yaak export 2023-11-09 17:03:29 -08:00
Gregory Schier
8ec735a419 Refactor previous commit 2023-11-09 16:50:57 -08:00
Gregory Schier
c09bea29a2 Default request name to URL(ish) 2023-11-09 16:47:00 -08:00
Gregory Schier
97c5d2c7eb Rename initial workspace to "Yaak" 2023-11-09 13:17:21 -08:00
Gregory Schier
95b2e0ae62 No analytics in dev 2023-11-09 11:46:52 -08:00
Gregory Schier
6dd9a112fe Analytics event properties 2023-11-09 11:44:59 -08:00
Gregory Schier
95b428dcd6 Context menu, logs in DevTools, export, tweaks 2023-11-09 09:28:01 -08:00
Gregory Schier
d0c08fc8ef Fix plugin (again) 2023-11-08 13:33:15 -08:00
Gregory Schier
53452875da Bundle plugin in Git 2023-11-08 13:06:49 -08:00
Gregory Schier
a6609833c2 Move plugins back 2023-11-08 12:34:14 -08:00
Gregory Schier
6f68e11c4d Fix permissions 2023-11-08 12:02:17 -08:00
Gregory Schier
fe8365e860 Bump version 2023-11-08 10:12:01 -08:00
Gregory Schier
81188acac1 Tweak theme 2023-11-08 10:11:29 -08:00
Gregory Schier
bdb5305d16 Tweak theme 2023-11-08 09:56:13 -08:00
Gregory Schier
c4926f430a Track screen size, os, and version 2023-11-08 09:49:29 -08:00
Gregory Schier
98ed12a2df Rust analytics and a few tweaks 2023-11-08 09:13:32 -08:00
Gregory Schier
b35c692d58 Add basic analytics 2023-11-07 09:53:59 -08:00
Gregory Schier
7657166bfa Cancel responses on startup 2023-11-06 13:06:15 -08:00
Gregory Schier
bed0e034aa Send all in a folder 2023-11-06 10:53:39 -08:00
Gregory Schier
0ecb16a2e7 Rework workspace header 2023-11-06 10:42:59 -08:00
Gregory Schier
a30adb1fe9 Fix sidebar focus max recursion 2023-11-06 10:40:02 -08:00
Gregory Schier
1db78af0ad Save after formatting GraphQL (Closes #9) 2023-11-06 07:20:47 -08:00
Gregory Schier
0d2eb509e8 Move plugins back to root dir 2023-11-06 07:18:53 -08:00
Gregory Schier
5bfcccbb2f Persist sidebar collapsed state (Closes #10) 2023-11-06 07:18:42 -08:00
Gregory Schier
7eafff082c Vite to bundle insomnia plugin 2023-11-05 22:13:22 -08:00
Gregory Schier
8c51cb94b8 Better import conversion 2023-11-05 14:46:08 -08:00
Gregory Schier
b0612b8632 Basic import of request body and bearer auth 2023-11-05 14:35:25 -08:00
Gregory Schier
36a44c9ca6 Recursive Insomnia import! 2023-11-05 13:33:23 -08:00
Gregory Schier
94048a0337 Remove numbers from recent requests 2023-11-04 16:19:21 -07:00
Gregory Schier
11166470aa Fix drop marker indent 2023-11-04 11:16:41 -07:00
Gregory Schier
de190ca8fa Folder actions 2023-11-04 10:48:18 -07:00
Gregory Schier
9471009b8b Folder chevron icon 2023-11-03 23:10:44 -07:00
Gregory Schier
de165b5c55 Fix arrow navigation for nested sidebar 2023-11-03 17:29:33 -07:00
Gregory Schier
99e4b08653 Folder-based drag-n-drop complete! 2023-11-03 16:29:21 -07:00
Gregory Schier
65648ac877 Sidebar ordering 95% done! 2023-11-03 15:02:17 -07:00
Gregory Schier
b8a859895b Nested sidebar ordering almost working 2023-11-03 14:08:46 -07:00
Gregory Schier
60fa9dcf13 Add folder model 2023-11-03 07:49:44 -07:00
Gregory Schier
9f7fa3709e Even better focus state 2023-11-02 22:23:21 -07:00
Gregory Schier
1bf711826e Remove focus on env sidebar buttons 2023-11-02 22:18:13 -07:00
Gregory Schier
ff6969d41c Rearrange menus 2023-11-02 21:41:35 -07:00
Gregory Schier
1e7f629b28 Refactor environment edit dialog 2023-11-02 20:38:33 -07:00
Gregory Schier
68ea718c77 Base environments fully working 2023-11-02 18:43:39 -07:00
Gregory Schier
1cd6e0af06 Initial "plugin" system with importer (#7) 2023-11-02 18:08:43 -07:00
Gregory Schier
749025640f Fix cursor color in single-line mode 2023-10-31 15:10:33 -07:00
Gregory Schier
2e72cad591 Fix sending of ephemeral requests 2023-10-30 08:24:49 -07:00
Gregory Schier
7ce4ac3239 Fix GQL introspection and bearer auth templating 2023-10-30 08:07:34 -07:00
Gregory Schier
9d4f4bef5d Fix button styles 2023-10-30 07:27:27 -07:00
Gregory Schier
3b1e4f538d Fix editor stale callbacks and recent item deletion 2023-10-30 07:07:14 -07:00
Gregory Schier
8a73636f43 Refactored some core UI 2023-10-30 06:35:52 -07:00
Gregory Schier
451ffad24a Plugin module loading 2023-10-29 20:50:23 -07:00
Gregory Schier
851082be9d Bump version 2023-10-29 17:22:27 -07:00
Gregory Schier
bc3515d71e Fix sidebar scroll 2023-10-29 17:19:03 -07:00
Gregory Schier
ed87192468 A bit more playing with JS runtime 2023-10-29 17:05:48 -07:00
Gregory Schier
9a56b2f331 Initial "Hello World" for plugins 2023-10-29 16:43:28 -07:00
Gregory Schier
46470160a9 Fix request creation 2023-10-29 12:05:05 -07:00
Gregory Schier
9dd4489049 Restore recent environment on workspace change
Fixes #6
2023-10-29 11:32:55 -07:00
Gregory Schier
7dac299edd Fix var complete and env dialog actions 2023-10-29 11:18:55 -07:00
Gregory Schier
a9c67f59fc Remove broken key/value enter/backspace logic 2023-10-29 10:45:05 -07:00
Gregory Schier
c37c020cf0 Delete key/value on backspace 2023-10-29 10:26:38 -07:00
Gregory Schier
4d93892249 Move workspace menu, better env mgmt, QoL 2023-10-29 09:45:16 -07:00
Gregory Schier
b1764d0508 Bump version 2023-10-28 23:41:58 -07:00
Gregory Schier
76218365fc Better listening for path changes 2023-10-28 23:41:24 -07:00
Gregory Schier
aebaa8d4b7 Bump version 2023-10-28 22:14:51 -07:00
Gregory Schier
235ab2056d Fixed auto-focus in prompt and env dropdown 2023-10-28 22:14:12 -07:00
Gregory Schier
7b7e43a185 Clear selected sidebar index on drag-drop end 2023-10-28 21:47:00 -07:00
Gregory Schier
8baaa9beb2 Revert debug name 2023-10-28 21:43:09 -07:00
Gregory Schier
b9d1e70e04 Fix drag-n-drop things 2023-10-28 21:42:35 -07:00
Gregory Schier
b2150181b3 Persist window paths 2023-10-28 21:23:46 -07:00
Gregory Schier
e8b5e9de02 Bump version to 2023.1.0 2023-10-28 19:15:33 -07:00
Gregory Schier
9c68e62db3 Update placeholders when env changes 2023-10-28 19:14:51 -07:00
Gregory Schier
73190958fa Placeholder error and fix env nav 2023-10-28 19:08:31 -07:00
Gregory Schier
68fbb1a3ff Recent requests/workspaces. Closes #1 2023-10-28 18:46:54 -07:00
Gregory Schier
ac036ff814 Fix recent requests loading on startup 2023-10-28 18:27:18 -07:00
Gregory Schier
34bfc6840c Add tauri window save state plugin 2023-10-28 13:14:27 -07:00
Gregory Schier
805ea4a656 Fix rustfmt 2023-10-28 12:45:25 -07:00
Gregory Schier
677f436bcb Handle enabled/disabled variables and render multi 2023-10-28 11:36:40 -07:00
Gregory Schier
a44e88f53d Remove unused Variable type 2023-10-28 11:31:45 -07:00
Gregory Schier
3ad132d77d Variables under Environment, and render all props 2023-10-28 11:29:29 -07:00
Gregory Schier
d0387bdf76 Native Codemirror cursor 2023-10-27 13:14:41 -07:00
Gregory Schier
9f2577db66 Only wrap URLBar on focus and hotkey to open recent requests 2023-10-27 12:40:43 -07:00
Gregory Schier
ede0f1890f Resizing window no longer changes sidebar visibility
Fixes #4
2023-10-27 11:21:59 -07:00
Gregory Schier
439af5e8f2 Auto-expand URL bar height 2023-10-27 10:57:07 -07:00
Gregory Schier
4bf82ec3e9 Environment deletion and better actions menu 2023-10-26 16:18:47 -07:00
Gregory Schier
0e85d40f47 Stop autocomplete from jumping around 2023-10-26 15:27:48 -07:00
Gregory Schier
d62702f7dd Fix request creation from menu 2023-10-26 10:41:14 -07:00
Gregory Schier
d1bc5900fb Send requests with active environment 2023-10-26 10:32:06 -07:00
Gregory Schier
cba8a055d5 Move create request and fix slow HTML highlighting 2023-10-26 09:42:19 -07:00
Gregory Schier
8fd7979474 Better project selector, Fixes #2, and a bunch more 2023-10-26 09:11:44 -07:00
Gregory Schier
598cef948a Fixed some routing and introspection requests 2023-10-25 21:53:18 -07:00
Gregory Schier
51cadaf53b Environments in URL and better rendering 2023-10-25 11:13:00 -07:00
Gregory Schier
7715668e96 Move responses dropdown to separate component 2023-10-25 07:59:10 -07:00
Gregory Schier
4c2c0dd1de Fix dialog height 2023-10-25 00:02:51 -07:00
Gregory Schier
2567e72bfe Better style when no active environment 2023-10-24 23:58:12 -07:00
Gregory Schier
8665ca9acb Environment dropdown and actions 2023-10-24 09:17:29 -07:00
Gregory Schier
fa16e1f957 Started on environment edit dialog 2023-10-23 21:00:36 -07:00
Gregory Schier
83e2cab1b6 Hacky implementation of variable autocomplete 2023-10-23 10:31:21 -07:00
Gregory Schier
4ad5d7f291 Rendered first variable! 2023-10-22 22:30:29 -07:00
Gregory Schier
51f48d3883 Updating environments! 2023-10-22 22:06:51 -07:00
Gregory Schier
5cf59d7d70 Update .gitignore 2023-10-22 20:40:00 -07:00
Gregory Schier
39a441d118 Prettier and start of env editor 2023-10-22 20:38:57 -07:00
Gregory Schier
adea2c0e81 Environments data model 2023-10-22 18:28:56 -07:00
Gregory Schier
5821e4c232 Environment data model backend 2023-10-22 16:05:09 -07:00
Gregory Schier
75b108c6cd Fix some eslint warnings 2023-10-22 11:02:39 -07:00
Gregory Schier
66c80d4d9a Add APPLE_TEAM_ID 2023-10-18 14:12:08 -07:00
Gregory Schier
cd83d7d7ea Revert artifacts things 2023-10-18 13:25:35 -07:00
Gregory Schier
ee868203f6 Bump cargo deps 2023-10-18 13:25:20 -07:00
Gregory Schier
add21457ec Bump version 2023-10-18 12:14:38 -07:00
Gregory Schier
a43fa761c7 Fix sidebar drag-n-drop 2023-10-18 11:58:58 -07:00
Gregory Schier
5dae591c79 Retry button on introspection errors 2023-06-12 13:20:42 -07:00
Gregory Schier
e02954f396 Fix autocomplete doc font size 2023-05-31 21:32:48 -07:00
Gregory Schier
2297ee2a1d Persist introspection queries and also improve 2023-05-31 21:29:41 -07:00
Gregory Schier
0fec8d117b Update tauri NPM 2023-05-29 12:49:50 -07:00
Gregory Schier
465ccdd2b2 Fix graphql instrospection 2023-05-29 12:31:34 -07:00
Gregory Schier
6decba8a4a Change version 2023-04-27 16:53:39 -07:00
Gregory Schier
5a4fa40ab4 Version 1.0.0 2023-04-27 16:47:49 -07:00
Gregory Schier
f3ff0b660b Fix window methods on Linux/Windows 2023-04-27 16:27:02 -07:00
Gregory Schier
2a4889bc01 Cross platform window controls 2023-04-27 10:19:49 -07:00
Gregory Schier
8dfd3579e4 Fix ubuntu build 2023-04-26 17:00:30 -07:00
Gregory Schier
4741791673 Windows and Linux 2023-04-26 16:54:51 -07:00
Gregory Schier
2edfa9bd75 Bump version 2023-04-26 16:47:50 -07:00
Gregory Schier
8d37497eb7 Very basic CSV viewer 2023-04-22 21:53:04 +08:00
Gregory Schier
f4dcb67caa Truncate response files 2023-04-14 14:15:33 -07:00
Gregory Schier
d5774c6067 Randomly offset new windows 2023-04-14 14:05:23 -07:00
Gregory Schier
67007b1f5c Fix text encoding and delete responses 2023-04-14 13:50:41 -07:00
Gregory Schier
9755833577 Delete response files 2023-04-14 12:17:11 -07:00
Gregory Schier
b7909de566 Readonly editor disable tabindex 2023-04-13 22:36:11 -07:00
Gregory Schier
114ae4285d Fix imageview padding 2023-04-13 22:33:47 -07:00
Gregory Schier
a22154e8ce Duration and size tags 2023-04-13 20:50:17 -07:00
Gregory Schier
f33ef73f43 Comment 2023-04-13 18:55:32 -07:00
Gregory Schier
55c879abc2 Always store response on filesystem 2023-04-13 18:52:56 -07:00
Gregory Schier
c941cb6989 Support binary responses! 2023-04-13 18:48:40 -07:00
Gregory Schier
f8c5960156 Blur backdrop 2023-04-11 16:12:26 -07:00
Gregory Schier
6f625cdfd9 Autofocus buttons 2023-04-11 14:04:23 -07:00
Gregory Schier
11200677a0 Better opening workspaces and redirect workspace to recent request 2023-04-11 11:11:36 -07:00
Gregory Schier
f802d9d655 Button disabled style opacity 2023-04-10 16:03:45 -07:00
Gregory Schier
8c7409a24f Dropdown keys and pointer events 2023-04-10 16:02:29 -07:00
Gregory Schier
db2dc823f2 Upgrade deno core 2023-04-10 11:16:25 -07:00
Gregory Schier
ce26d1b86f Tweak response history 2023-04-09 23:15:51 -07:00
Gregory Schier
6c5ae5fcaa Fixed multi-window model sync 2023-04-09 22:32:47 -07:00
Gregory Schier
45c35eae31 Tweak recent requests 2023-04-09 22:25:00 -07:00
Gregory Schier
cb4ce9fdba Toggle settings 2023-04-09 22:12:16 -07:00
Gregory Schier
d9916f520e Fix sidebar request focus 2023-04-09 22:03:41 -07:00
Gregory Schier
0f33fd2588 More stuff on sidebar 2023-04-09 21:52:04 -07:00
Gregory Schier
5cc5f27420 Small tweaks 2023-04-09 15:32:13 -07:00
Gregory Schier
feec6fedfa Request history navigator 2023-04-09 15:26:54 -07:00
Gregory Schier
fb38708fad Enter name on create workspace 2023-04-09 12:27:02 -07:00
Gregory Schier
b82798bf49 Rename workspace 2023-04-09 12:23:41 -07:00
Gregory Schier
37f0eca79f Sidebar hover transitions 2023-04-06 16:30:46 -07:00
Gregory Schier
72bcc17799 Remove some more key value usage 2023-04-06 16:26:56 -07:00
Gregory Schier
b2524c1de0 A bunch of tweaks 2023-04-06 16:05:25 -07:00
Gregory Schier
0b3bd6313f macOS 12 2023-04-06 08:39:30 -07:00
Gregory Schier
afe075829a Remove system tray icon 2023-04-06 08:15:40 -07:00
Gregory Schier
d008324c3e Minor tweaks 2023-04-04 17:21:02 -07:00
Gregory Schier
79634532fd Fix some things 2023-04-04 16:56:45 -07:00
Gregory Schier
95622bc44b Editor line wrapping support (not used yet) 2023-04-04 16:40:37 -07:00
Gregory Schier
197bc38b69 remove janky last location tracking 2023-04-04 16:23:08 -07:00
Gregory Schier
fe9a06185d Fix resize cursor 2023-04-04 16:12:45 -07:00
Gregory Schier
8eb2a14737 Better button styles 2023-04-04 15:40:25 -07:00
Gregory Schier
7c7eba5f63 Bump version 2023-04-04 13:56:24 -07:00
Gregory Schier
302f1402cf Some small fixes 2023-04-04 13:56:14 -07:00
Gregory Schier
0ffe459a8b A few fixes 2023-04-04 13:31:48 -07:00
Gregory Schier
54310983a3 Better status tags and delete request on key 2023-04-04 12:36:30 -07:00
Gregory Schier
fcbe923770 Remove expects from request sending 2023-04-04 08:14:32 -07:00
Gregory Schier
b2a7d95922 Fix web view height 2023-04-04 07:51:41 -07:00
Gregory Schier
7da45506d4 Fix autocomplete spacing 2023-04-04 07:51:19 -07:00
Gregory Schier
51445b0d99 Fix input focus border 2023-04-03 12:19:37 -07:00
Gregory Schier
712626ac1f Hot keys and cleanup 2023-04-03 07:59:49 -07:00
Gregory Schier
c1d7f6e544 Add entitlemet for v8 2023-04-02 20:23:21 -07:00
Gregory Schier
5a81c5de17 Debug codesigned build 2023-04-02 19:09:14 -07:00
Gregory Schier
2faf2986cf Disable code signing 2023-04-02 18:27:14 -07:00
Gregory Schier
8c2e058ced Fix tauri script command 2023-04-02 17:25:24 -07:00
Gregory Schier
5a31c2c930 Fix universal binary 2023-04-02 17:12:20 -07:00
Gregory Schier
0931faeeb8 Bump version 2023-04-02 15:44:41 -07:00
Gregory Schier
79ecc0ae38 Fix toolchain 2023-04-02 15:44:21 -07:00
Gregory Schier
2ba401dde1 Add proper target 2023-04-02 15:42:19 -07:00
Gregory Schier
7d93dc7d62 Try universal binary 2023-04-02 15:33:13 -07:00
Gregory Schier
427d786ef1 Fix version 2023-04-02 15:25:24 -07:00
Gregory Schier
2accf518c3 Bump version 2023-04-02 14:54:41 -07:00
Gregory Schier
91e10e6a0a Notorization (hopefully) 2023-04-02 14:53:49 -07:00
Gregory Schier
01f12c5161 Change tabs again 2023-04-02 11:11:53 -07:00
Gregory Schier
62a367cd0c Better response headers 2023-04-02 10:45:41 -07:00
Gregory Schier
ceefbd1de1 Show response headers 2023-04-01 23:43:22 -07:00
Gregory Schier
3f713d878c Some more refactoring 2023-04-01 21:48:30 -07:00
Gregory Schier
bc35429670 Refactor debounce and tauri event listeners 2023-04-01 21:39:46 -07:00
Gregory Schier
5b563b8a16 Fix dropdown and dialog key handling 2023-04-01 21:04:39 -07:00
Gregory Schier
35e25842be Refactor sidebar display 2023-04-01 20:58:53 -07:00
Gregory Schier
55ce39e39d Better GraphQL schema fetching 2023-04-01 17:53:36 -07:00
Gregory Schier
9ab1df1c99 More eslint fixes 2023-04-01 15:48:37 -07:00
Gregory Schier
b23e56c3af Add React hooks eslint 2023-04-01 15:26:57 -07:00
Gregory Schier
604254257d Fix Tauri listeners 2023-04-01 00:02:17 -07:00
Gregory Schier
d7c9fe7991 Memo editor 2023-03-31 23:19:15 -07:00
Gregory Schier
ebc9939498 Fix request duplication 2023-03-31 22:54:32 -07:00
Gregory Schier
3fc5f72074 Fix tauri listeners causing too many updates 2023-03-31 22:48:34 -07:00
Gregory Schier
625abf2acb Remove import 2023-03-31 22:42:41 -07:00
Gregory Schier
0ad5ebde47 Fix 2023-03-31 22:42:26 -07:00
Gregory Schier
9a8c208a15 Upgrade Deno 2023-03-31 22:42:08 -07:00
Gregory Schier
72223c2dea Tweak 2023-03-31 16:14:25 -07:00
Gregory Schier
0b1f3466ec Fix send hotkey 2023-03-31 16:13:34 -07:00
Gregory Schier
f9206c7a01 Better schema fetching 2023-03-31 16:02:09 -07:00
Gregory Schier
4feb31390d Finally fix the editor! 2023-03-31 15:56:35 -07:00
Gregory Schier
3c517e0739 Fix editor blurring bug! 2023-03-31 13:53:28 -07:00
Gregory Schier
4f1c8b0d53 Better model updates 2023-03-31 13:21:02 -07:00
Gregory Schier
68159dfa95 Fix text obscuring 2023-03-30 17:22:52 -07:00
Gregory Schier
60d4ecda1a Button ring colors 2023-03-30 17:17:07 -07:00
Gregory Schier
6843823efc Remove dummy button 2023-03-30 17:12:38 -07:00
Gregory Schier
8998b8ab17 Confirm deletions 2023-03-30 17:09:11 -07:00
Gregory Schier
728d30f360 Dedicated event for model creation 2023-03-30 16:49:49 -07:00
Gregory Schier
90a96ef8e5 Unify text selection color 2023-03-30 16:36:24 -07:00
Gregory Schier
42de045263 Some icon tweaks 2023-03-30 16:29:14 -07:00
Gregory Schier
801b29402d Fix strict mode editor blur bug 2023-03-30 10:38:33 -07:00
Gregory Schier
bb2ba21bbd Better tauri listeners and stuff 2023-03-30 09:05:54 -07:00
Gregory Schier
7fcf709efe Remove updated_by, remember last location 2023-03-30 08:11:51 -07:00
Gregory Schier
904d20b9b8 Remove hardcoded window config 2023-03-29 22:16:21 -07:00
Gregory Schier
fa32829b2e Fix build 2023-03-29 22:15:55 -07:00
Gregory Schier
968e80b3ad Remove unused import 2023-03-29 21:53:49 -07:00
Gregory Schier
b721396340 Better multi-window updates 2023-03-29 21:53:20 -07:00
Gregory Schier
4b2c1b18a9 Fixed key/value stuff 2023-03-29 14:46:36 -07:00
Gregory Schier
06ce7abfb9 Fix bundle parts 2023-03-29 14:00:34 -07:00
Gregory Schier
ab15782019 Fix(ish) multiwindow updates 2023-03-29 11:15:37 -07:00
Gregory Schier
3548945202 Obscure text 2023-03-29 10:16:51 -07:00
Gregory Schier
5852877f4d Simple auth schemes 2023-03-29 09:03:38 -07:00
Gregory Schier
e96527ab27 Good start to multi-window 2023-03-28 18:29:40 -07:00
Gregory Schier
314b51db49 Focus traps for dialog and dropdown 2023-03-26 23:07:09 -07:00
Gregory Schier
d3d64b38a5 Confirmation Dialogs 2023-03-26 12:02:20 -07:00
Gregory Schier
9eb0fcd441 Floating sidebar 2023-03-26 10:09:28 -07:00
Gregory Schier
56a30aa7c4 Panel icons 2023-03-25 23:29:04 -07:00
Gregory Schier
def3c712c9 Update dialog 2023-03-25 21:59:18 -07:00
Gregory Schier
1589235b3f Optimistically-update key values 2023-03-25 21:54:00 -07:00
Gregory Schier
567b516bd0 More tweaks 2023-03-25 21:40:14 -07:00
Gregory Schier
1e8498b52c Animate dropdown 2023-03-25 21:36:17 -07:00
Gregory Schier
e3ef29bdfd Animate sidebar transition 2023-03-25 21:31:52 -07:00
Gregory Schier
ae4a43f406 Refactor and improve layout resizing 2023-03-25 21:16:10 -07:00
Gregory Schier
391a436ed3 Even better layouts 2023-03-25 18:33:01 -07:00
Gregory Schier
8f86c46f49 Better grid layouts 2023-03-25 18:12:09 -07:00
Gregory Schier
44710a8021 Global layout component 2023-03-25 13:26:31 -07:00
Gregory Schier
09c574bf30 Better dropdown separator 2023-03-25 11:06:05 -07:00
Gregory Schier
41390e9142 Fix sidebar drag 2023-03-24 08:37:52 -07:00
Gregory Schier
dcc2c053f8 Upgrade TYpescript 2023-03-23 15:37:36 -07:00
Gregory Schier
5ea45537d3 Fix resize 2023-03-23 07:47:58 -07:00
Gregory Schier
ae82bdc225 Style tweak 2023-03-21 23:59:09 -07:00
Gregory Schier
aeda504e64 GraphQL autocomplete and duplicate request 2023-03-21 23:54:45 -07:00
Gregory Schier
225b0956a8 Tweak sidebar drag resizer 2023-03-21 19:36:32 -07:00
Gregory Schier
7a6f0ccc46 Minor style tweaks 2023-03-21 18:31:05 -07:00
Gregory Schier
c51805fe69 Pull out resize bar 2023-03-21 16:53:49 -07:00
Gregory Schier
2caa13fdec Resize titlebar and tweak things 2023-03-21 16:42:52 -07:00
Gregory Schier
55970f0a92 Remove icon generation from build script 2023-03-21 14:21:07 -07:00
Gregory Schier
6f873fa186 query client cache and better body types 2023-03-21 11:38:37 -07:00
Gregory Schier
4adb8274ab Fix workspace deletion 2023-03-21 09:32:15 -07:00
Gregory Schier
a3783205b8 Use proper gray for syntax 2023-03-20 17:15:12 -07:00
Gregory Schier
a98487634c fix import 2023-03-20 17:13:14 -07:00
Gregory Schier
3bd4795def Minor tweaks 2023-03-20 17:12:19 -07:00
Gregory Schier
5a3b47846a Fix URL bar spacing 2023-03-20 17:01:29 -07:00
Gregory Schier
4b0793ebef Better radio dropdown type 2023-03-20 16:54:26 -07:00
Gregory Schier
f855d8ab16 Typesafe routing and CM line height issue 2023-03-20 16:47:36 -07:00
Gregory Schier
c5ca3daab3 Better tab dropdown handling 2023-03-20 14:14:30 -07:00
Gregory Schier
ec8bec32ba Fix request creation priority 2023-03-20 13:56:03 -07:00
Gregory Schier
54aa594a70 Remove log 2023-03-20 13:49:35 -07:00
Gregory Schier
15bc08390b Handle "no body" case 2023-03-20 13:49:21 -07:00
Gregory Schier
8b16258627 Small fix 2023-03-20 13:37:14 -07:00
Gregory Schier
6b5f1b4ade Fix pointer window drag 2023-03-20 13:34:49 -07:00
Gregory Schier
4de95e49e9 Fix extra dropdown element 2023-03-20 13:19:23 -07:00
Gregory Schier
e19ea612f5 Remove most of Radix UI 2023-03-20 13:16:58 -07:00
Gregory Schier
b84a5530be Better Header validation 2023-03-20 01:38:05 -07:00
Gregory Schier
9fc988b1de Tweak sidebar 2023-03-20 01:30:45 -07:00
Gregory Schier
c5b50c10f4 Fix pair editor container 2023-03-20 01:18:44 -07:00
Gregory Schier
b487938ffb Fix input thingy 2023-03-20 01:14:13 -07:00
Gregory Schier
e754dbc563 Container queries! 2023-03-20 01:08:41 -07:00
Gregory Schier
24ed6f0ee2 Better pair editor delete button 2023-03-20 00:30:42 -07:00
Gregory Schier
333b9319b6 Pair validation 2023-03-20 00:17:29 -07:00
Gregory Schier
b16d74d55b Don't send disabled headers 2023-03-20 00:05:19 -07:00
Gregory Schier
c5f5d72611 Small tweak 2023-03-20 00:04:40 -07:00
Gregory Schier
d57dfbf225 Pair checkboxes and fix twig indent 2023-03-20 00:03:33 -07:00
Gregory Schier
31e09aba4b Rewrote twig grammar 2023-03-19 22:12:11 -07:00
Gregory Schier
7314c8f36f Re-order of pair editor 2023-03-19 13:28:57 -07:00
Gregory Schier
05f20af9ed Better header editor and added completion data 2023-03-19 11:09:21 -07:00
Gregory Schier
c591394004 A couple tweaks 2023-03-19 01:01:13 -07:00
Gregory Schier
b586318d4b Persist sort priority! 2023-03-19 00:48:09 -07:00
Gregory Schier
9ac5572094 Create new workspace, and more optimizations 2023-03-18 19:36:31 -07:00
Gregory Schier
b1835561a8 Optimized a few components 2023-03-18 18:49:01 -07:00
Gregory Schier
6fc9b5a185 Fix sidebar drag-n-drop 2023-03-18 18:09:36 -07:00
Gregory Schier
1258550695 Got drag opacity working 2023-03-18 15:06:38 -07:00
Gregory Schier
0b6133efae Good start to drag-n-drop sidebar! 2023-03-18 14:41:07 -07:00
Gregory Schier
d02d4bc76f Fix mixed parser 2023-03-17 17:57:43 -07:00
Gregory Schier
43787a6b9e Dropdown highlight 2023-03-17 17:32:24 -07:00
Gregory Schier
e33085a7b4 Beginnings of autocomplete for headers 2023-03-17 16:51:20 -07:00
Gregory Schier
10616001df Flatten migrations, kvs lib, fix tabs 2023-03-17 08:36:21 -07:00
Gregory Schier
637c220475 Sidebar item dropdown 2023-03-16 15:37:53 -07:00
Gregory Schier
e472249133 Sidebar dragging 2023-03-16 14:34:49 -07:00
Gregory Schier
7b5df2feb4 Add devtools toggle hotkey 2023-03-16 11:25:38 -07:00
Gregory Schier
4bedcf3949 Adjust window sizes 2023-03-16 11:16:23 -07:00
Gregory Schier
cbe8cf3a05 Store appearance in k/v 2023-03-16 11:01:30 -07:00
Gregory Schier
48e43c3f9f Hotkeys and view mode kvs 2023-03-16 09:24:28 -07:00
Gregory Schier
03e36e7f1c Some fixes 2023-03-15 23:33:46 -07:00
Gregory Schier
e4d34c2943 Got key values working 2023-03-15 23:24:41 -07:00
Gregory Schier
ed468571d0 Fix editor padding 2023-03-15 17:29:35 -07:00
Gregory Schier
5292a03171 Minor style updates 2023-03-15 17:25:04 -07:00
Gregory Schier
0043c5fbda Add stuff to app header 2023-03-15 16:35:19 -07:00
Gregory Schier
3bbe9d9201 Better request delete and formatting 2023-03-15 09:41:38 -07:00
Gregory Schier
97db32fdf2 Fix graphql and other things 2023-03-15 09:06:56 -07:00
Gregory Schier
b599ab9f5b Header editor to pair editor 2023-03-15 08:09:45 -07:00
Gregory Schier
3aaf365e4a Better header editor 2023-03-15 07:54:04 -07:00
Gregory Schier
34589f8b06 Strict mode and tweak layout padding 2023-03-14 20:19:45 -07:00
Gregory Schier
b761e3d9c1 Add GraphQL variables editor 2023-03-14 19:56:02 -07:00
Gregory Schier
3247190a46 GraphQL query editor transformer works! 2023-03-14 19:08:18 -07:00
Gregory Schier
b9294ff994 Add body type to request and tab dropdown 2023-03-14 11:18:56 -07:00
Gregory Schier
e67118bfa9 Improved header editor 2023-03-14 00:54:41 -07:00
Gregory Schier
4a949b2720 Fix platform check 2023-03-14 00:15:01 -07:00
Gregory Schier
1e09f09bd6 Some small changes 2023-03-14 00:08:03 -07:00
Gregory Schier
a209a486aa Move stuff around 2023-03-13 23:30:14 -07:00
Gregory Schier
02574cf5e0 Refactor hooks to be easier to use 2023-03-13 23:25:41 -07:00
Gregory Schier
d7ff52038d Fix header editor and scroll in general 2023-03-13 19:37:36 -07:00
Gregory Schier
e2fa188ca3 Lazy load routes 2023-03-13 13:56:13 -07:00
Gregory Schier
90c873e37e Back to React 2023-03-13 09:50:49 -07:00
Gregory Schier
03461ffa77 Move some stuff around 2023-03-13 09:24:38 -07:00
Gregory Schier
9245805c92 Fix URL bar 2023-03-13 00:13:25 -07:00
Gregory Schier
7ad1bd54ac Fix ButtonLink and edit request names 2023-03-13 00:11:23 -07:00
Gregory Schier
4ad91b4553 Remove old rust cache action 2023-03-12 22:48:43 -07:00
Gregory Schier
8cf3b1ae02 Better rust cache 2023-03-12 22:47:43 -07:00
Gregory Schier
47c753045c Start GraphQL support 2023-03-12 22:43:25 -07:00
Gregory Schier
389a0d785c Fix artifact tag 2023-03-12 21:41:15 -07:00
Gregory Schier
364cdb06df Remove wasm stuff 2023-03-12 21:25:31 -07:00
Gregory Schier
1b6c32c7ac Use tauri action 2023-03-12 21:13:08 -07:00
Gregory Schier
3af720d93a Fix traffic lights thingy 2023-03-12 20:47:52 -07:00
Gregory Schier
babe9adc3d Cache cargo bin for "install" 2023-03-12 19:10:39 -07:00
Gregory Schier
790a3daddd Refformat 2023-03-12 19:03:27 -07:00
Gregory Schier
072d0ade88 Fix artifact upload 2023-03-12 19:01:48 -07:00
Gregory Schier
f6fcb54a6e Fix dev 2023-03-12 18:39:02 -07:00
Gregory Schier
1ffad989f9 Split out macos deps 2023-03-12 18:36:25 -07:00
Gregory Schier
f1326620bc Cache workflow 2023-03-12 18:28:14 -07:00
Gregory Schier
7e815444ff Add wasm-pack 2023-03-12 18:19:20 -07:00
Gregory Schier
37bae62a4d Install rsw 2023-03-12 18:14:38 -07:00
Gregory Schier
085916dfe4 Fix artifact names 2023-03-12 18:13:00 -07:00
Gregory Schier
6394c380fc Fix build command 2023-03-12 18:11:24 -07:00
Gregory Schier
e08d8414b7 Update secrets context 2023-03-12 18:07:57 -07:00
Gregory Schier
7e6e605cdb Update workflow name 2023-03-12 18:05:45 -07:00
Gregory Schier
f9e0c4bc24 Fix workflow 2023-03-12 18:05:13 -07:00
Gregory Schier
9dfe3db720 Start of auto updates 2023-03-12 18:04:11 -07:00
Gregory Schier
a709e4b19f Fix tabbing to tabs 2023-03-11 23:32:39 -08:00
Gregory Schier
971cd02142 Fix eslint errors 2023-03-11 23:29:25 -08:00
Gregory Schier
f846fa8dbc Got tab content scrolling working 2023-03-11 22:36:13 -08:00
Gregory Schier
df22285d15 Removed some debug stuff 2023-03-10 10:43:15 -08:00
Gregory Schier
0b3497e5a1 Refactor editor to update better 2023-03-10 10:39:23 -08:00
Gregory Schier
e9e3ba283c Fix headers persistence and better sending 2023-03-09 13:38:17 -08:00
Gregory Schier
de0bd57622 Hook up header editor! 2023-03-09 13:07:13 -08:00
Gregory Schier
109006db66 Fix 2023-03-09 10:58:27 -08:00
Gregory Schier
cb43f17efc Fix blur de-select speed 2023-03-09 10:57:34 -08:00
Gregory Schier
d8da396c2f Fix Codemirror performance!! 2023-03-09 10:50:55 -08:00
Gregory Schier
5fbc5edb15 Switch to Preact!!! 2023-03-09 00:47:25 -08:00
Gregory Schier
17c734af11 Move some things around 2023-03-08 23:20:15 -08:00
Gregory Schier
226781af8e Better scrollbar color 2023-03-08 19:23:24 -08:00
Gregory Schier
6c8f4c943a Zoom, better sizes, color picker, sidebar footer 2023-03-08 19:22:04 -08:00
Gregory Schier
c37cfaf0e4 Read-only editor 2023-03-08 16:53:13 -08:00
Gregory Schier
956a2ef5ce More theme tweaks 2023-03-08 16:37:20 -08:00
Gregory Schier
571293a34d Debounce autocomplete 2023-03-08 11:25:20 -08:00
Gregory Schier
6eaad1352a Minor theme updates again 2023-03-08 09:43:35 -08:00
Gregory Schier
eec65f8721 Editor tweaks 2023-03-07 23:05:33 -08:00
Gregory Schier
25fc0c2f07 Remove unneeded space 2023-03-07 22:58:13 -08:00
Gregory Schier
317ca24dcf Fix small view 2023-03-07 22:55:51 -08:00
Gregory Schier
366116ab1b Minor style tweaks 2023-03-07 22:21:58 -08:00
Gregory Schier
520db48234 Lots more theme stuff 2023-03-07 21:52:21 -08:00
Gregory Schier
5aa80d8ea8 Start of themes 2023-03-07 11:24:38 -08:00
Gregory Schier
b48a41aaec More subtle layout tweaks 2023-03-06 08:57:57 -08:00
Gregory Schier
986cd56662 More layout fiddling and error page 2023-03-04 22:26:00 -08:00
Gregory Schier
1ecf642181 More work on the layout 2023-03-04 21:51:17 -08:00
Gregory Schier
1f5e7dbaa9 Try new layout and a bunch of editor fixes 2023-03-04 19:06:12 -08:00
Gregory Schier
030ba26c5e Fix autocomplete inside dialog 2023-03-03 17:03:20 -08:00
Gregory Schier
7668a093a9 Beginnings of Header Editor 2023-03-03 13:18:57 -08:00
Gregory Schier
534d45bccf Fix tailwind dark selector 2023-03-03 07:54:19 -08:00
Gregory Schier
c30caf11fe Fix content type in URL 2023-03-02 23:17:09 -08:00
Gregory Schier
420f7aa7c3 Add Dialog component 2023-03-02 18:46:10 -08:00
Gregory Schier
77ca90779c More colors 2023-03-02 17:56:53 -08:00
Gregory Schier
a7488b389d Minor style tweaks 2023-03-02 16:16:41 -08:00
Gregory Schier
016adbcb30 Improved autocompletion! 2023-03-02 11:14:51 -08:00
Gregory Schier
132466f03b Rename, fix autocomplete and singleline, etc... 2023-03-02 10:42:43 -08:00
Gregory Schier
b5496f0f48 Editor placeholder 2023-03-01 14:22:10 -08:00
Gregory Schier
4d7df9023e Some minor bugs 2023-03-01 14:16:02 -08:00
Gregory Schier
c6ba978069 Fix migrations for build and iframe rendering 2023-03-01 10:31:50 -08:00
Gregory Schier
7490106014 Tweaks 2023-03-01 10:19:21 -08:00
Gregory Schier
569a9454ad Response streaming 2023-03-01 09:05:00 -08:00
Gregory Schier
5040d73a8b Autocomplete, and more CM stuff! 2023-02-28 22:54:54 -08:00
Gregory Schier
1e57890d2e Some small tweaks 2023-02-28 17:25:59 -08:00
Gregory Schier
af964ac383 Better editor updating 2023-02-28 12:41:03 -08:00
Gregory Schier
88c9df4577 URL highlighting with inline CM 2023-02-28 11:26:26 -08:00
Gregory Schier
74dd4ee979 Implement request deletion 2023-02-27 15:42:06 -08:00
Gregory Schier
8efd95fdbe Tauri events for request model updates 2023-02-27 13:28:50 -08:00
Gregory Schier
d0846dcd11 Split request upsert command 2023-02-27 10:00:57 -08:00
Gregory Schier
9dc8234f4b Add toggle for pretty view 2023-02-27 09:08:48 -08:00
Gregory Schier
fe18cd1806 Small tweaks 2023-02-26 15:25:55 -08:00
Gregory Schier
2c0a891838 Add variable highlighting widgets 2023-02-26 15:06:14 -08:00
Gregory Schier
640d2a1bb4 Dropdown scrolling 2023-02-25 23:33:07 -08:00
Gregory Schier
bf691017fd Show response body size 2023-02-25 23:08:19 -08:00
Gregory Schier
b166401d4f A bunch more small things 2023-02-25 23:04:31 -08:00
Gregory Schier
2cf7ced1f2 Added react-router 2023-02-25 18:04:14 -08:00
Gregory Schier
e4a257b807 Migrations and initial data stuff 2023-02-25 16:39:18 -08:00
Gregory Schier
b8bb9f43e3 Minor tweaks 2023-02-24 17:01:48 -08:00
Gregory Schier
5b2f1e40aa Dummy requests in sidebar 2023-02-24 16:46:56 -08:00
Gregory Schier
2b92b7ab01 Codemirror initial value support 2023-02-24 16:43:47 -08:00
Gregory Schier
a77e378730 Send request body 2023-02-24 16:09:19 -08:00
Gregory Schier
b3795d99b5 Vendor basicSetup 2023-02-24 14:51:56 -08:00
Gregory Schier
2d83a536b9 Additional methods and tweaks 2023-02-24 14:10:25 -08:00
Gregory Schier
a5829a9b6b Focus states 2023-02-24 12:35:13 -08:00
Gregory Schier
5a9fb5a3a7 Hook up theme and clear responses 2023-02-24 12:13:30 -08:00
Gregory Schier
4319ce9a7b SQLite store in proper dir 2023-02-22 20:18:14 -08:00
Gregory Schier
e5551c489f Started on grid layout 2023-02-22 19:44:44 -08:00
Gregory Schier
21a562c6fd Save responses in DB 2023-02-22 18:53:44 -08:00
Gregory Schier
302f0a1860 Better URL bar 2023-02-22 16:15:25 -08:00
Gregory Schier
3b591d241c Cleaner URL bar and some improvements 2023-02-22 15:58:04 -08:00
Gregory Schier
238bd3df78 Refactor classname usage 2023-02-21 18:03:57 -08:00
Gregory Schier
30b1b87fea Some minor tweaks 2023-02-21 17:56:48 -08:00
1079 changed files with 99819 additions and 12068 deletions

View File

@@ -1,5 +0,0 @@
node_modules/
dist/
.prettierrc.cjs
.eslintrc.cjs
env.d.ts

View File

@@ -1,25 +0,0 @@
module.exports = {
extends: [
'eslint:recommended',
'plugin:react/recommended',
'plugin:import/recommended',
'plugin:jsx-a11y/recommended',
'plugin:@typescript-eslint/recommended',
'eslint-config-prettier',
],
ignorePatterns: ['src-tauri/**/*'],
settings: {
react: {
version: 'detect',
},
'import/resolver': {
node: {
paths: ['src-web'],
extensions: ['.js', '.jsx', '.ts', '.tsx'],
},
},
},
rules: {
"react/react-in-jsx-scope": "off",
},
};

5
.gitattributes vendored Normal file
View File

@@ -0,0 +1,5 @@
src-tauri/vendored/**/* linguist-generated=true
src-tauri/gen/schemas/**/* linguist-generated=true
# Ensure consistent line endings for test files that check exact content
src-tauri/yaak-http/tests/test.txt text eol=lf

3
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1,3 @@
# These are supported funding model platforms
github: gschier

38
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@@ -0,0 +1,38 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]
**Smartphone (please complete the following information):**
- Device: [e.g. iPhone6]
- OS: [e.g. iOS8.1]
- Browser [e.g. stock browser, safari]
- Version [e.g. 22]
**Additional context**
Add any other context about the problem here.

5
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@@ -0,0 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: Bugs, Feedback, Feature Requests, and Questions
url: https://feedback.yaak.app
about: "Please report to Yaak's public feedback board. Issues will be created and linked here when applicable."

31
.github/workflows/ci.yml vendored Normal file
View File

@@ -0,0 +1,31 @@
on:
pull_request:
push:
branches:
- main
name: Lint and Test
permissions:
contents: read
jobs:
test:
name: Lint/Test
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
with:
workspaces: 'src-tauri'
shared-key: ci
cache-on-failure: true
- run: npm ci
- run: npm run lint
- name: Run JS Tests
run: npm test
- name: Run Rust Tests
run: cargo test --all
working-directory: src-tauri

131
.github/workflows/release.yml vendored Normal file
View File

@@ -0,0 +1,131 @@
name: Generate Artifacts
on:
push:
tags: [ v* ]
jobs:
build-artifacts:
permissions:
contents: write
name: Build
strategy:
fail-fast: false
matrix:
include:
- platform: 'macos-latest' # for Arm-based Macs (M1 and above).
args: '--target aarch64-apple-darwin'
yaak_arch: 'arm64'
os: 'macos'
targets: 'aarch64-apple-darwin'
- platform: 'macos-latest' # for Intel-based Macs.
args: '--target x86_64-apple-darwin'
yaak_arch: 'x64'
os: 'macos'
targets: 'x86_64-apple-darwin'
- platform: 'ubuntu-22.04'
args: ''
yaak_arch: 'x64'
os: 'ubuntu'
targets: ''
- platform: 'ubuntu-22.04-arm'
args: ''
yaak_arch: 'arm64'
os: 'ubuntu'
targets: ''
- platform: 'windows-latest'
args: ''
yaak_arch: 'x64'
os: 'windows'
targets: ''
# Windows ARM64
- platform: 'windows-latest'
args: '--target aarch64-pc-windows-msvc'
yaak_arch: 'arm64'
os: 'windows'
targets: 'aarch64-pc-windows-msvc'
runs-on: ${{ matrix.platform }}
timeout-minutes: 40
steps:
- name: Checkout yaakapp/app
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
- name: install Rust stable
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.targets }}
- uses: Swatinem/rust-cache@v2
with:
workspaces: 'src-tauri'
shared-key: ci
cache-on-failure: true
- name: install dependencies (Linux only)
if: matrix.os == 'ubuntu'
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf xdg-utils
- name: Install Protoc for plugin-runtime
uses: arduino/setup-protoc@v3
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Install trusted-signing-cli (Windows only)
if: matrix.os == 'windows'
shell: pwsh
run: |
$ErrorActionPreference = 'Stop'
$dir = "$env:USERPROFILE\trusted-signing"
New-Item -ItemType Directory -Force -Path $dir | Out-Null
$url = "https://github.com/Levminer/trusted-signing-cli/releases/download/0.8.0/trusted-signing-cli.exe"
$exe = Join-Path $dir "trusted-signing-cli.exe"
Invoke-WebRequest -Uri $url -OutFile $exe
echo $dir >> $env:GITHUB_PATH
& $exe --version
- run: npm ci
- run: npm run lint
- name: Run JS Tests
run: npm test
- name: Run Rust Tests
run: cargo test --all
working-directory: src-tauri
- name: Set version
run: npm run replace-version
env:
YAAK_VERSION: ${{ github.ref_name }}
- uses: tauri-apps/tauri-action@v0
env:
YAAK_TARGET_ARCH: ${{ matrix.yaak_arch }}
ENABLE_CODE_SIGNING: ${{ secrets.APPLE_CERTIFICATE }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
# Apple signing stuff
APPLE_CERTIFICATE: ${{ matrix.os == 'macos' && secrets.APPLE_CERTIFICATE }}
APPLE_CERTIFICATE_PASSWORD: ${{ matrix.os == 'macos' && secrets.APPLE_CERTIFICATE_PASSWORD }}
APPLE_ID: ${{ matrix.os == 'macos' && secrets.APPLE_ID }}
APPLE_PASSWORD: ${{ matrix.os == 'macos' && secrets.APPLE_PASSWORD }}
APPLE_SIGNING_IDENTITY: ${{ matrix.os == 'macos' && secrets.APPLE_SIGNING_IDENTITY }}
APPLE_TEAM_ID: ${{ matrix.os == 'macos' && secrets.APPLE_TEAM_ID }}
# Windows signing stuff
AZURE_CLIENT_ID: ${{ matrix.os == 'windows' && secrets.AZURE_CLIENT_ID }}
AZURE_CLIENT_SECRET: ${{ matrix.os == 'windows' && secrets.AZURE_CLIENT_SECRET }}
AZURE_TENANT_ID: ${{ matrix.os == 'windows' && secrets.AZURE_TENANT_ID }}
with:
tagName: 'v__VERSION__'
releaseName: 'Release __VERSION__'
releaseBody: '[Changelog __VERSION__](https://yaak.app/blog/__VERSION__)'
releaseDraft: true
prerelease: true
args: '${{ matrix.args }} --config ./src-tauri/tauri.release.conf.json'

44
.github/workflows/sponsors.yml vendored Normal file
View File

@@ -0,0 +1,44 @@
name: Generate Sponsors README
on:
workflow_dispatch:
schedule:
- cron: 30 15 * * 0-6
permissions:
contents: write
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout 🛎️
uses: actions/checkout@v2
- name: Generate Sponsors
uses: JamesIves/github-sponsors-readme-action@v1
with:
token: ${{ secrets.SPONSORS_PAT }}
file: 'README.md'
maximum: 1999
template: '<a href="https://github.com/{{{ login }}}"><img src="{{{ avatarUrl }}}" width="50px" alt="User avatar: {{{ login }}}" /></a>&nbsp;&nbsp;'
active-only: false
include-private: true
marker: 'sponsors-base'
- name: Generate Sponsors
uses: JamesIves/github-sponsors-readme-action@v1
with:
token: ${{ secrets.SPONSORS_PAT }}
file: 'README.md'
minimum: 2000
template: '<a href="https://github.com/{{{ login }}}"><img src="{{{ avatarUrl }}}" width="80px" alt="User avatar: {{{ login }}}" /></a>&nbsp;&nbsp;'
active-only: false
include-private: true
marker: 'sponsors-premium'
# ⚠️ Note: You can use any deployment step here to automatically push the README
# changes back to your branch.
- name: Commit Changes
uses: JamesIves/github-pages-deploy-action@v4
with:
branch: main
force: false
folder: '.'

14
.gitignore vendored
View File

@@ -15,6 +15,8 @@ dist-ssr
# Editor directories and files
.vscode/*
!.vscode/extensions.json
!.vscode/settings.json
!.vscode/launch.json
.idea
.DS_Store
*.suo
@@ -22,5 +24,15 @@ dist-ssr
*.njsproj
*.sln
*.sw?
.eslintcache
out
.rsw
*.sqlite
*.sqlite-*
.cargo
.tmp
tmp
.zed
codebook.toml

2
.nvmrc
View File

@@ -1 +1 @@
18
20

View File

@@ -1,3 +0,0 @@
node_modules/
dist/
.prettierrc.cjs

View File

@@ -1,8 +0,0 @@
module.exports = {
"trailingComma": "all",
"tabWidth": 2,
"semi": true,
"singleQuote": true,
"printWidth": 100,
"bracketSpacing": true
}

3
.vscode/extensions.json vendored Normal file
View File

@@ -0,0 +1,3 @@
{
"recommendations": ["biomejs.biome", "rust-lang.rust-analyzer", "bradlc.vscode-tailwindcss"]
}

26
.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,26 @@
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Dev App",
"runtimeExecutable": "npm",
"runtimeArgs": ["run", "start"]
},
{
"type": "node",
"request": "launch",
"name": "Build App",
"runtimeExecutable": "npm",
"runtimeArgs": ["run", "start"]
},
{
"type": "node",
"request": "launch",
"name": "Bootstrap",
"runtimeExecutable": "npm",
"runtimeArgs": ["run", "bootstrap"]
}
]
}

6
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,6 @@
{
"editor.defaultFormatter": "biomejs.biome",
"editor.formatOnSave": true,
"biome.enabled": true,
"biome.lint.format.enable": true
}

88
DEVELOPMENT.md Normal file
View File

@@ -0,0 +1,88 @@
# Developer Setup
Yaak is a combined Node.js and Rust monorepo. It is a [Tauri](https://tauri.app) project, so
uses Rust and HTML/CSS/JS for the main application but there is also a plugin system powered
by a Node.js sidecar that communicates to the app over gRPC.
Because of the moving parts, there are a few setup steps required before development can
begin.
## Prerequisites
Make sure you have the following tools installed:
- [Node.js](https://nodejs.org/en/download/package-manager)
- [Rust](https://www.rust-lang.org/tools/install)
Check the installations with the following commands:
```shell
node -v
npm -v
rustc --version
```
Install the NPM dependencies:
```shell
npm install
```
Run the `bootstrap` command to do some initial setup:
```shell
npm run bootstrap
```
## Run the App
After bootstrapping, start the app in development mode:
```shell
npm start
```
## SQLite Migrations
New migrations can be created from the `src-tauri/` directory:
```shell
npm run migration
```
Rerun the app to apply the migrations.
_Note: For safety, development builds use a separate database location from production builds._
## Lezer Grammar Generation
```sh
# Example
lezer-generator components/core/Editor/<LANG>/<LANG>.grammar > components/core/Editor/<LANG>/<LANG>.ts
```
## Linting & Formatting
This repo uses Biome for linting and formatting (replacing ESLint + Prettier).
- Lint the entire repo:
```sh
npm run lint
```
- Auto-fix lint issues where possible:
```sh
npm run lint:fix
```
- Format code:
```sh
npm run format
```
Notes:
- Many workspace packages also expose the same scripts (`lint`, `lint:fix`, and `format`).
- TypeScript type-checking still runs separately via `tsc --noEmit` in relevant packages.

21
LICENSE Normal file
View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2024 Yaak
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -1,3 +1,70 @@
# Tauri REST Client
<p align="center">
<a href="https://github.com/JamesIves/github-sponsors-readme-action">
<img width="200px" src="https://github.com/mountain-loop/yaak/raw/main/src-tauri/icons/icon.png">
</a>
</p>
It's a REST client, yo.
<h1 align="center">
💫 Yaak ➟ Desktop API Client 💫
</h1>
<p align="center">
A fast, privacy-first API client for REST, GraphQL, SSE, WebSocket, and gRPC built with Tauri, Rust, and React.
</p>
<p align="center">
Development is funded by community-purchased <a href="https://yaak.app/pricing">licenses</a>. You can also <a href="https://github.com/sponsors/gschier">become a sponsor</a> to have your logo appear below. 💖
</p>
<br>
<p align="center">
<!-- sponsors-premium --><a href="https://github.com/MVST-Solutions"><img src="https:&#x2F;&#x2F;github.com&#x2F;MVST-Solutions.png" width="80px" alt="User avatar: MVST-Solutions" /></a>&nbsp;&nbsp;<a href="https://github.com/dharsanb"><img src="https:&#x2F;&#x2F;github.com&#x2F;dharsanb.png" width="80px" alt="User avatar: dharsanb" /></a>&nbsp;&nbsp;<a href="https://github.com/railwayapp"><img src="https:&#x2F;&#x2F;github.com&#x2F;railwayapp.png" width="80px" alt="User avatar: railwayapp" /></a>&nbsp;&nbsp;<a href="https://github.com/caseyamcl"><img src="https:&#x2F;&#x2F;github.com&#x2F;caseyamcl.png" width="80px" alt="User avatar: caseyamcl" /></a>&nbsp;&nbsp;<a href="https://github.com/"><img src="https:&#x2F;&#x2F;raw.githubusercontent.com&#x2F;JamesIves&#x2F;github-sponsors-readme-action&#x2F;dev&#x2F;.github&#x2F;assets&#x2F;placeholder.png" width="80px" alt="User avatar: " /></a>&nbsp;&nbsp;<!-- sponsors-premium -->
</p>
<p align="center">
<!-- sponsors-base --><a href="https://github.com/seanwash"><img src="https:&#x2F;&#x2F;github.com&#x2F;seanwash.png" width="50px" alt="User avatar: seanwash" /></a>&nbsp;&nbsp;<a href="https://github.com/jerath"><img src="https:&#x2F;&#x2F;github.com&#x2F;jerath.png" width="50px" alt="User avatar: jerath" /></a>&nbsp;&nbsp;<a href="https://github.com/itsa-sh"><img src="https:&#x2F;&#x2F;github.com&#x2F;itsa-sh.png" width="50px" alt="User avatar: itsa-sh" /></a>&nbsp;&nbsp;<a href="https://github.com/dmmulroy"><img src="https:&#x2F;&#x2F;github.com&#x2F;dmmulroy.png" width="50px" alt="User avatar: dmmulroy" /></a>&nbsp;&nbsp;<a href="https://github.com/timcole"><img src="https:&#x2F;&#x2F;github.com&#x2F;timcole.png" width="50px" alt="User avatar: timcole" /></a>&nbsp;&nbsp;<a href="https://github.com/VLZH"><img src="https:&#x2F;&#x2F;github.com&#x2F;VLZH.png" width="50px" alt="User avatar: VLZH" /></a>&nbsp;&nbsp;<a href="https://github.com/terasaka2k"><img src="https:&#x2F;&#x2F;github.com&#x2F;terasaka2k.png" width="50px" alt="User avatar: terasaka2k" /></a>&nbsp;&nbsp;<a href="https://github.com/andriyor"><img src="https:&#x2F;&#x2F;github.com&#x2F;andriyor.png" width="50px" alt="User avatar: andriyor" /></a>&nbsp;&nbsp;<a href="https://github.com/majudhu"><img src="https:&#x2F;&#x2F;github.com&#x2F;majudhu.png" width="50px" alt="User avatar: majudhu" /></a>&nbsp;&nbsp;<a href="https://github.com/axelrindle"><img src="https:&#x2F;&#x2F;github.com&#x2F;axelrindle.png" width="50px" alt="User avatar: axelrindle" /></a>&nbsp;&nbsp;<a href="https://github.com/jirizverina"><img src="https:&#x2F;&#x2F;github.com&#x2F;jirizverina.png" width="50px" alt="User avatar: jirizverina" /></a>&nbsp;&nbsp;<a href="https://github.com/chip-well"><img src="https:&#x2F;&#x2F;github.com&#x2F;chip-well.png" width="50px" alt="User avatar: chip-well" /></a>&nbsp;&nbsp;<a href="https://github.com/GRAYAH"><img src="https:&#x2F;&#x2F;github.com&#x2F;GRAYAH.png" width="50px" alt="User avatar: GRAYAH" /></a>&nbsp;&nbsp;<!-- sponsors-base -->
</p>
![Yaak API Client](https://yaak.app/static/screenshot.png)
## Features
Yaak is an offline-first API client designed to stay out of your way while giving you everything you need when you need it.
Built with [Tauri](https://tauri.app), Rust, and React, its fast, lightweight, and private. No telemetry, no VC funding, and no cloud lock-in.
### 🌐 Work with any API
- Import collections from Postman, Insomnia, OpenAPI, Swagger, or Curl.
- Send requests via REST, GraphQL, gRPC, WebSocket, or Server-Sent Events.
- Filter and inspect responses with JSONPath or XPath.
### 🔐 Stay secure
- Use OAuth 2.0, JWT, Basic Auth, or custom plugins for authentication.
- Secure sensitive values with encrypted secrets.
- Store secrets in your OS keychain.
### ☁️ Organize & collaborate
- Group requests into workspaces and nested folders.
- Use environment variables to switch between dev, staging, and prod.
- Mirror workspaces to your filesystem for versioning in Git or syncing with Dropbox.
### 🧩 Extend & customize
- Insert dynamic values like UUIDs or timestamps with template tags.
- Pick from built-in themes or build your own.
- Create plugins to extend authentication, template tags, or the UI.
## Contribution Policy
Yaak is open source but only accepting contributions for bug fixes. To get started,
visit [`DEVELOPMENT.md`](DEVELOPMENT.md) for tips on setting up your environment.
## Useful Resources
- [Feedback and Bug Reports](https://feedback.yaak.app)
- [Documentation](https://feedback.yaak.app/help)
- [Yaak vs Postman](https://yaak.app/alternatives/postman)
- [Yaak vs Bruno](https://yaak.app/alternatives/bruno)
- [Yaak vs Insomnia](https://yaak.app/alternatives/insomnia)

51
biome.json Normal file
View File

@@ -0,0 +1,51 @@
{
"$schema": "https://biomejs.dev/schemas/2.3.7/schema.json",
"linter": {
"enabled": true,
"rules": {
"recommended": true,
"a11y": {
"useKeyWithClickEvents": "off"
}
}
},
"formatter": {
"enabled": true,
"indentStyle": "space",
"indentWidth": 2,
"lineWidth": 100,
"bracketSpacing": true
},
"css": {
"parser": {
"tailwindDirectives": true
},
"linter": {
"enabled": false
}
},
"javascript": {
"formatter": {
"quoteStyle": "single",
"jsxQuoteStyle": "double",
"trailingCommas": "all",
"semicolons": "always"
}
},
"files": {
"includes": [
"**",
"!**/node_modules",
"!**/dist",
"!**/build",
"!scripts",
"!packages/plugin-runtime",
"!packages/plugin-runtime-types",
"!src-tauri",
"!src-web/tailwind.config.cjs",
"!src-web/postcss.config.cjs",
"!src-web/vite.config.ts",
"!src-web/routeTree.gen.ts"
]
}
}

View File

@@ -1,15 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Tauri + React + TS</title>
</head>
<body>
<div id="root"></div>
<div id="radix-portal"></div>
<script type="module" src="/src-web/main.tsx"></script>
</body>
</html>

24944
package-lock.json generated
View File

File diff suppressed because it is too large Load Diff

View File

@@ -1,51 +1,99 @@
{
"name": "tauri-app",
"name": "yaak-app",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"build": "rsw build && tsc && vite build",
"dev": "vite",
"lint": "eslint . --ext .ts,.tsx",
"preview": "vite preview",
"tauri-dev": "concurrently -n app,rsw \"tauri dev\" \"rsw watch\""
"repository": {
"type": "git",
"url": "git+https://github.com/mountain-loop/yaak.git"
},
"dependencies": {
"@codemirror/lang-html": "^6.4.2",
"@codemirror/lang-javascript": "^6.1.4",
"@codemirror/lang-json": "^6.0.1",
"@radix-ui/react-dropdown-menu": "^2.0.2",
"@radix-ui/react-icons": "^1.2.0",
"@radix-ui/react-popover": "1.0.3",
"@tauri-apps/api": "^1.2.0",
"@typescript-eslint/eslint-plugin": "^5.52.0",
"@typescript-eslint/parser": "^5.52.0",
"classnames": "^2.3.2",
"codemirror": "^6.0.1",
"eslint": "^8.34.0",
"eslint-config-prettier": "^8.6.0",
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-jsx-a11y": "^6.7.1",
"eslint-plugin-react": "^7.32.2",
"framer-motion": "^9.0.4",
"prettier": "^2.8.4",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-helmet-async": "^1.3.0"
"workspaces": [
"packages/common-lib",
"packages/plugin-runtime",
"packages/plugin-runtime-types",
"plugins/action-copy-curl",
"plugins/action-copy-grpcurl",
"plugins/auth-apikey",
"plugins/auth-aws",
"plugins/auth-basic",
"plugins/auth-bearer",
"plugins/auth-jwt",
"plugins/auth-ntlm",
"plugins/auth-oauth2",
"plugins/auth-oauth1",
"plugins/filter-jsonpath",
"plugins/filter-xpath",
"plugins/importer-curl",
"plugins/importer-insomnia",
"plugins/importer-openapi",
"plugins/importer-postman",
"plugins/importer-postman-environment",
"plugins/importer-yaak",
"plugins/template-function-1password",
"plugins/template-function-cookie",
"plugins/template-function-ctx",
"plugins/template-function-encode",
"plugins/template-function-fs",
"plugins/template-function-hash",
"plugins/template-function-json",
"plugins/template-function-prompt",
"plugins/template-function-random",
"plugins/template-function-regex",
"plugins/template-function-timestamp",
"plugins/template-function-uuid",
"plugins/template-function-xml",
"plugins/template-function-request",
"plugins/template-function-response",
"plugins/themes-yaak",
"src-tauri",
"src-tauri/yaak-crypto",
"src-tauri/yaak-fonts",
"src-tauri/yaak-git",
"src-tauri/yaak-license",
"src-tauri/yaak-mac-window",
"src-tauri/yaak-models",
"src-tauri/yaak-plugins",
"src-tauri/yaak-sse",
"src-tauri/yaak-sync",
"src-tauri/yaak-templates",
"src-tauri/yaak-ws",
"src-web"
],
"scripts": {
"start": "npm run app-dev",
"app-build": "tauri build",
"app-dev": "tauri dev --no-watch --config ./src-tauri/tauri.development.conf.json",
"migration": "node scripts/create-migration.cjs",
"build": "npm run --workspaces --if-present build",
"build-plugins": "npm run --workspaces --if-present build",
"test": "npm run --workspaces --if-present test",
"icons": "run-p icons:*",
"icons:dev": "tauri icon src-tauri/icons/icon-dev.png --output src-tauri/icons/dev",
"icons:release": "tauri icon src-tauri/icons/icon.png --output src-tauri/icons/release",
"bootstrap": "run-s bootstrap:*",
"bootstrap:install-wasm-pack": "node scripts/install-wasm-pack.cjs",
"bootstrap:build": "npm run build",
"bootstrap:vendor": "npm run vendor",
"vendor": "run-p vendor:*",
"vendor:vendor-plugins": "node scripts/vendor-plugins.cjs",
"vendor:vendor-protoc": "node scripts/vendor-protoc.cjs",
"vendor:vendor-node": "node scripts/vendor-node.cjs",
"lint": "run-p lint:*",
"lint:biome": "biome lint",
"lint:extra": "npm run --workspaces --if-present lint",
"format": "biome format --write .",
"replace-version": "node scripts/replace-version.cjs",
"tauri": "tauri",
"tauri-before-build": "npm run bootstrap",
"tauri-before-dev": "workspaces-run --parallel -- npm run --workspaces --if-present dev"
},
"devDependencies": {
"@tauri-apps/cli": "^1.2.2",
"@types/node": "^18.7.10",
"@types/react": "^18.0.15",
"@types/react-dom": "^18.0.6",
"@vitejs/plugin-react": "^3.0.0",
"autoprefixer": "^10.4.13",
"concurrently": "^7.6.0",
"postcss": "^8.4.21",
"tailwindcss": "^3.2.7",
"typescript": "^4.6.4",
"vite": "^4.0.0",
"vite-plugin-rsw": "^2.0.11",
"vite-plugin-top-level-await": "^1.2.4"
"@biomejs/biome": "^2.3.7",
"@tauri-apps/cli": "^2.9.6",
"@yaakapp/cli": "^0.3.4",
"nodejs-file-downloader": "^4.13.0",
"npm-run-all": "^4.1.5",
"typescript": "^5.8.3",
"vitest": "^3.2.4",
"workspaces-run": "^1.0.2"
}
}

View File

@@ -0,0 +1,13 @@
// biome-ignore lint/suspicious/noExplicitAny: none
export function debounce(fn: (...args: any[]) => void, delay = 500) {
let timer: ReturnType<typeof setTimeout>;
// biome-ignore lint/suspicious/noExplicitAny: none
const result = (...args: any[]) => {
clearTimeout(timer);
timer = setTimeout(() => fn(...args), delay);
};
result.cancel = () => {
clearTimeout(timer);
};
return result;
}

View File

@@ -0,0 +1,20 @@
export function formatSize(bytes: number): string {
let num: number;
let unit: string;
if (bytes > 1000 * 1000 * 1000) {
num = bytes / 1000 / 1000 / 1000;
unit = 'GB';
} else if (bytes > 1000 * 1000) {
num = bytes / 1000 / 1000;
unit = 'MB';
} else if (bytes > 1000) {
num = bytes / 1000;
unit = 'KB';
} else {
num = bytes;
unit = 'B';
}
return `${Math.round(num * 10) / 10} ${unit}`;
}

View File

@@ -0,0 +1,3 @@
export * from './debounce';
export * from './formatSize';
export * from './templateFunction';

View File

@@ -0,0 +1,6 @@
{
"name": "@yaakapp-internal/lib",
"private": true,
"version": "1.0.0",
"main": "index.ts"
}

View File

@@ -0,0 +1,49 @@
import type {
CallTemplateFunctionArgs,
JsonPrimitive,
TemplateFunctionArg,
} from '@yaakapp-internal/plugins';
export function validateTemplateFunctionArgs(
fnName: string,
args: TemplateFunctionArg[],
values: CallTemplateFunctionArgs['values'],
): string | null {
for (const arg of args) {
if ('inputs' in arg && arg.inputs) {
// Recurse down
const err = validateTemplateFunctionArgs(fnName, arg.inputs, values);
if (err) return err;
}
if (!('name' in arg)) continue;
if (arg.optional) continue;
if (arg.defaultValue != null) continue;
if (arg.hidden) continue;
if (values[arg.name] != null) continue;
return `Missing required argument "${arg.label || arg.name}" for template function ${fnName}()`;
}
return null;
}
/** Recursively apply form input defaults to a set of values */
export function applyFormInputDefaults(
inputs: TemplateFunctionArg[],
values: { [p: string]: JsonPrimitive | undefined },
) {
let newValues: { [p: string]: JsonPrimitive | undefined } = { ...values };
for (const input of inputs) {
if ('defaultValue' in input && values[input.name] === undefined) {
newValues[input.name] = input.defaultValue;
}
if (input.type === 'checkbox' && values[input.name] === undefined) {
newValues[input.name] = false;
}
// Recurse down to all child inputs
if ('inputs' in input) {
newValues = applyFormInputDefaults(input.inputs ?? [], newValues);
}
}
return newValues;
}

View File

@@ -0,0 +1,2 @@
lib
node_modules

View File

@@ -0,0 +1,28 @@
# Yaak Plugin API
Yaak is a desktop [API client](https://yaak.app/blog/yet-another-api-client) for
interacting with REST, GraphQL, Server Sent Events (SSE), WebSocket, and gRPC APIs. It's
built using Tauri, Rust, and ReactJS.
Plugins can be created in TypeScript, which are executed alongside Yaak in a NodeJS
runtime. This package contains the TypeScript type definitions required to make building
Yaak plugins a breeze.
## Quick Start
The easiest way to get started is by generating a plugin with the Yaak CLI:
```shell
npx @yaakapp/cli generate
```
For more details on creating plugins, check out
the [Quick Start Guide](https://feedback.yaak.app/help/articles/6911763-plugins-quick-start)
## Installation
If you prefer starting from scratch, manually install the types package:
```shell
npm install -D @yaakapp/api
```

View File

@@ -0,0 +1,47 @@
{
"name": "@yaakapp/api",
"version": "0.1.17",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@yaakapp/api",
"version": "0.1.17",
"dependencies": {
"@types/node": "^22.5.4"
},
"devDependencies": {
"typescript": "^5.6.2"
}
},
"node_modules/@types/node": {
"version": "22.5.4",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz",
"integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==",
"license": "MIT",
"dependencies": {
"undici-types": "~6.19.2"
}
},
"node_modules/typescript": {
"version": "5.6.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz",
"integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==",
"dev": true,
"license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
},
"engines": {
"node": ">=14.17"
}
},
"node_modules/undici-types": {
"version": "6.19.8",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
"integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
"license": "MIT"
}
}
}

View File

@@ -0,0 +1,39 @@
{
"name": "@yaakapp/api",
"version": "0.7.1",
"keywords": [
"api-client",
"insomnia-alternative",
"bruno-alternative",
"postman-alternative"
],
"repository": {
"type": "git",
"url": "https://github.com/mountain-loop/yaak"
},
"bugs": {
"url": "https://feedback.yaak.app"
},
"homepage": "https://yaak.app",
"main": "lib/index.js",
"typings": "./lib/index.d.ts",
"files": [
"lib/**/*"
],
"scripts": {
"bootstrap": "npm run build",
"build": "run-s build:copy-types build:tsc",
"build:tsc": "tsc",
"build:copy-types": "run-p build:copy-types:*",
"build:copy-types:root": "cpy --flat ../../src-tauri/yaak-plugins/bindings/*.ts ./src/bindings",
"build:copy-types:next": "cpy --flat ../../src-tauri/yaak-plugins/bindings/serde_json/*.ts ./src/bindings/serde_json",
"publish": "npm publish",
"prepublishOnly": "npm run build"
},
"dependencies": {
"@types/node": "^24.0.13"
},
"devDependencies": {
"cpy-cli": "^5.0.0"
}
}

View File

@@ -0,0 +1,8 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { PluginVersion } from "./gen_search";
export type PluginNameVersion = { name: string, version: string, };
export type PluginSearchResponse = { plugins: Array<PluginVersion>, };
export type PluginUpdatesResponse = { plugins: Array<PluginNameVersion>, };

View File

@@ -0,0 +1,502 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Environment, Folder, GrpcRequest, HttpRequest, HttpResponse, WebsocketRequest, Workspace } from "./gen_models";
import type { JsonValue } from "./serde_json/JsonValue";
export type BootRequest = { dir: string, watch: boolean, };
export type CallGrpcRequestActionArgs = { grpcRequest: GrpcRequest, protoFiles: Array<string>, };
export type CallGrpcRequestActionRequest = { index: number, pluginRefId: string, args: CallGrpcRequestActionArgs, };
export type CallHttpAuthenticationActionArgs = { contextId: string, values: { [key in string]?: JsonPrimitive }, };
export type CallHttpAuthenticationActionRequest = { index: number, pluginRefId: string, args: CallHttpAuthenticationActionArgs, };
export type CallHttpAuthenticationRequest = { contextId: string, values: { [key in string]?: JsonPrimitive }, method: string, url: string, headers: Array<HttpHeader>, };
export type CallHttpAuthenticationResponse = {
/**
* HTTP headers to add to the request. Existing headers will be replaced, while
* new headers will be added.
*/
setHeaders?: Array<HttpHeader>,
/**
* Query parameters to add to the request. Existing params will be replaced, while
* new params will be added.
*/
setQueryParameters?: Array<HttpHeader>, };
export type CallHttpRequestActionArgs = { httpRequest: HttpRequest, };
export type CallHttpRequestActionRequest = { index: number, pluginRefId: string, args: CallHttpRequestActionArgs, };
export type CallTemplateFunctionArgs = { purpose: RenderPurpose, values: { [key in string]?: JsonPrimitive }, };
export type CallTemplateFunctionRequest = { name: string, args: CallTemplateFunctionArgs, };
export type CallTemplateFunctionResponse = { value: string | null, error?: string, };
export type CloseWindowRequest = { label: string, };
export type Color = "primary" | "secondary" | "info" | "success" | "notice" | "warning" | "danger";
export type CompletionOptionType = "constant" | "variable";
export type Content = { "type": "text", content: string, } | { "type": "markdown", content: string, };
export type CopyTextRequest = { text: string, };
export type DeleteKeyValueRequest = { key: string, };
export type DeleteKeyValueResponse = { deleted: boolean, };
export type EditorLanguage = "text" | "javascript" | "json" | "html" | "xml" | "graphql" | "markdown";
export type EmptyPayload = {};
export type ErrorResponse = { error: string, };
export type ExportHttpRequestRequest = { httpRequest: HttpRequest, };
export type ExportHttpRequestResponse = { content: string, };
export type FileFilter = { name: string,
/**
* File extensions to require
*/
extensions: Array<string>, };
export type FilterRequest = { content: string, filter: string, };
export type FilterResponse = { content: string, error?: string, };
export type FindHttpResponsesRequest = { requestId: string, limit?: number, };
export type FindHttpResponsesResponse = { httpResponses: Array<HttpResponse>, };
export type FormInput = { "type": "text" } & FormInputText | { "type": "editor" } & FormInputEditor | { "type": "select" } & FormInputSelect | { "type": "checkbox" } & FormInputCheckbox | { "type": "file" } & FormInputFile | { "type": "http_request" } & FormInputHttpRequest | { "type": "accordion" } & FormInputAccordion | { "type": "h_stack" } & FormInputHStack | { "type": "banner" } & FormInputBanner | { "type": "markdown" } & FormInputMarkdown;
export type FormInputAccordion = { label: string, inputs?: Array<FormInput>, hidden?: boolean, };
export type FormInputBanner = { inputs?: Array<FormInput>, hidden?: boolean, color?: Color, };
export type FormInputBase = {
/**
* The name of the input. The value will be stored at this object attribute in the resulting data
*/
name: string,
/**
* Whether this input is visible for the given configuration. Use this to
* make branching forms.
*/
hidden?: boolean,
/**
* Whether the user must fill in the argument
*/
optional?: boolean,
/**
* The label of the input
*/
label?: string,
/**
* Visually hide the label of the input
*/
hideLabel?: boolean,
/**
* The default value
*/
defaultValue?: string, disabled?: boolean,
/**
* Longer description of the input, likely shown in a tooltip
*/
description?: string, };
export type FormInputCheckbox = {
/**
* The name of the input. The value will be stored at this object attribute in the resulting data
*/
name: string,
/**
* Whether this input is visible for the given configuration. Use this to
* make branching forms.
*/
hidden?: boolean,
/**
* Whether the user must fill in the argument
*/
optional?: boolean,
/**
* The label of the input
*/
label?: string,
/**
* Visually hide the label of the input
*/
hideLabel?: boolean,
/**
* The default value
*/
defaultValue?: string, disabled?: boolean,
/**
* Longer description of the input, likely shown in a tooltip
*/
description?: string, };
export type FormInputEditor = {
/**
* Placeholder for the text input
*/
placeholder?: string | null,
/**
* Don't show the editor gutter (line numbers, folds, etc.)
*/
hideGutter?: boolean,
/**
* Language for syntax highlighting
*/
language?: EditorLanguage, readOnly?: boolean, completionOptions?: Array<GenericCompletionOption>,
/**
* The name of the input. The value will be stored at this object attribute in the resulting data
*/
name: string,
/**
* Whether this input is visible for the given configuration. Use this to
* make branching forms.
*/
hidden?: boolean,
/**
* Whether the user must fill in the argument
*/
optional?: boolean,
/**
* The label of the input
*/
label?: string,
/**
* Visually hide the label of the input
*/
hideLabel?: boolean,
/**
* The default value
*/
defaultValue?: string, disabled?: boolean,
/**
* Longer description of the input, likely shown in a tooltip
*/
description?: string, };
export type FormInputFile = {
/**
* The title of the file selection window
*/
title: string,
/**
* Allow selecting multiple files
*/
multiple?: boolean, directory?: boolean, defaultPath?: string, filters?: Array<FileFilter>,
/**
* The name of the input. The value will be stored at this object attribute in the resulting data
*/
name: string,
/**
* Whether this input is visible for the given configuration. Use this to
* make branching forms.
*/
hidden?: boolean,
/**
* Whether the user must fill in the argument
*/
optional?: boolean,
/**
* The label of the input
*/
label?: string,
/**
* Visually hide the label of the input
*/
hideLabel?: boolean,
/**
* The default value
*/
defaultValue?: string, disabled?: boolean,
/**
* Longer description of the input, likely shown in a tooltip
*/
description?: string, };
export type FormInputHStack = { inputs?: Array<FormInput>, hidden?: boolean, };
export type FormInputHttpRequest = {
/**
* The name of the input. The value will be stored at this object attribute in the resulting data
*/
name: string,
/**
* Whether this input is visible for the given configuration. Use this to
* make branching forms.
*/
hidden?: boolean,
/**
* Whether the user must fill in the argument
*/
optional?: boolean,
/**
* The label of the input
*/
label?: string,
/**
* Visually hide the label of the input
*/
hideLabel?: boolean,
/**
* The default value
*/
defaultValue?: string, disabled?: boolean,
/**
* Longer description of the input, likely shown in a tooltip
*/
description?: string, };
export type FormInputMarkdown = { content: string, hidden?: boolean, };
export type FormInputSelect = {
/**
* The options that will be available in the select input
*/
options: Array<FormInputSelectOption>,
/**
* The name of the input. The value will be stored at this object attribute in the resulting data
*/
name: string,
/**
* Whether this input is visible for the given configuration. Use this to
* make branching forms.
*/
hidden?: boolean,
/**
* Whether the user must fill in the argument
*/
optional?: boolean,
/**
* The label of the input
*/
label?: string,
/**
* Visually hide the label of the input
*/
hideLabel?: boolean,
/**
* The default value
*/
defaultValue?: string, disabled?: boolean,
/**
* Longer description of the input, likely shown in a tooltip
*/
description?: string, };
export type FormInputSelectOption = { label: string, value: string, };
export type FormInputText = {
/**
* Placeholder for the text input
*/
placeholder?: string | null,
/**
* Placeholder for the text input
*/
password?: boolean,
/**
* Whether to allow newlines in the input, like a <textarea/>
*/
multiLine?: boolean, completionOptions?: Array<GenericCompletionOption>,
/**
* The name of the input. The value will be stored at this object attribute in the resulting data
*/
name: string,
/**
* Whether this input is visible for the given configuration. Use this to
* make branching forms.
*/
hidden?: boolean,
/**
* Whether the user must fill in the argument
*/
optional?: boolean,
/**
* The label of the input
*/
label?: string,
/**
* Visually hide the label of the input
*/
hideLabel?: boolean,
/**
* The default value
*/
defaultValue?: string, disabled?: boolean,
/**
* Longer description of the input, likely shown in a tooltip
*/
description?: string, };
export type GenericCompletionOption = { label: string, detail?: string, info?: string, type?: CompletionOptionType, boost?: number, };
export type GetCookieValueRequest = { name: string, };
export type GetCookieValueResponse = { value: string | null, };
export type GetGrpcRequestActionsResponse = { actions: Array<GrpcRequestAction>, pluginRefId: string, };
export type GetHttpAuthenticationConfigRequest = { contextId: string, values: { [key in string]?: JsonPrimitive }, };
export type GetHttpAuthenticationConfigResponse = { args: Array<FormInput>, pluginRefId: string, actions?: Array<HttpAuthenticationAction>, };
export type GetHttpAuthenticationSummaryResponse = { name: string, label: string, shortLabel: string, };
export type GetHttpRequestActionsResponse = { actions: Array<HttpRequestAction>, pluginRefId: string, };
export type GetHttpRequestByIdRequest = { id: string, };
export type GetHttpRequestByIdResponse = { httpRequest: HttpRequest | null, };
export type GetKeyValueRequest = { key: string, };
export type GetKeyValueResponse = { value?: string, };
export type GetTemplateFunctionConfigRequest = { contextId: string, name: string, values: { [key in string]?: JsonPrimitive }, };
export type GetTemplateFunctionConfigResponse = { function: TemplateFunction, pluginRefId: string, };
export type GetTemplateFunctionSummaryResponse = { functions: Array<TemplateFunction>, pluginRefId: string, };
export type GetThemesRequest = Record<string, never>;
export type GetThemesResponse = { themes: Array<Theme>, };
export type GrpcRequestAction = { label: string, icon?: Icon, };
export type HttpAuthenticationAction = { label: string, icon?: Icon, };
export type HttpHeader = { name: string, value: string, };
export type HttpRequestAction = { label: string, icon?: Icon, };
export type Icon = "alert_triangle" | "check" | "check_circle" | "chevron_down" | "copy" | "info" | "pin" | "search" | "trash" | "_unknown";
export type ImportRequest = { content: string, };
export type ImportResources = { workspaces: Array<Workspace>, environments: Array<Environment>, folders: Array<Folder>, httpRequests: Array<HttpRequest>, grpcRequests: Array<GrpcRequest>, websocketRequests: Array<WebsocketRequest>, };
export type ImportResponse = { resources: ImportResources, };
export type InternalEvent = { id: string, pluginRefId: string, pluginName: string, replyId: string | null, context: PluginContext, payload: InternalEventPayload, };
export type InternalEventPayload = { "type": "boot_request" } & BootRequest | { "type": "boot_response" } | { "type": "reload_response" } & ReloadResponse | { "type": "terminate_request" } | { "type": "terminate_response" } | { "type": "import_request" } & ImportRequest | { "type": "import_response" } & ImportResponse | { "type": "filter_request" } & FilterRequest | { "type": "filter_response" } & FilterResponse | { "type": "export_http_request_request" } & ExportHttpRequestRequest | { "type": "export_http_request_response" } & ExportHttpRequestResponse | { "type": "send_http_request_request" } & SendHttpRequestRequest | { "type": "send_http_request_response" } & SendHttpRequestResponse | { "type": "list_cookie_names_request" } & ListCookieNamesRequest | { "type": "list_cookie_names_response" } & ListCookieNamesResponse | { "type": "get_cookie_value_request" } & GetCookieValueRequest | { "type": "get_cookie_value_response" } & GetCookieValueResponse | { "type": "get_http_request_actions_request" } & EmptyPayload | { "type": "get_http_request_actions_response" } & GetHttpRequestActionsResponse | { "type": "call_http_request_action_request" } & CallHttpRequestActionRequest | { "type": "get_grpc_request_actions_request" } & EmptyPayload | { "type": "get_grpc_request_actions_response" } & GetGrpcRequestActionsResponse | { "type": "call_grpc_request_action_request" } & CallGrpcRequestActionRequest | { "type": "get_template_function_summary_request" } & EmptyPayload | { "type": "get_template_function_summary_response" } & GetTemplateFunctionSummaryResponse | { "type": "get_template_function_config_request" } & GetTemplateFunctionConfigRequest | { "type": "get_template_function_config_response" } & GetTemplateFunctionConfigResponse | { "type": "call_template_function_request" } & CallTemplateFunctionRequest | { "type": "call_template_function_response" } & CallTemplateFunctionResponse | { "type": "get_http_authentication_summary_request" } & EmptyPayload | { "type": "get_http_authentication_summary_response" } & GetHttpAuthenticationSummaryResponse | { "type": "get_http_authentication_config_request" } & GetHttpAuthenticationConfigRequest | { "type": "get_http_authentication_config_response" } & GetHttpAuthenticationConfigResponse | { "type": "call_http_authentication_request" } & CallHttpAuthenticationRequest | { "type": "call_http_authentication_response" } & CallHttpAuthenticationResponse | { "type": "call_http_authentication_action_request" } & CallHttpAuthenticationActionRequest | { "type": "call_http_authentication_action_response" } & EmptyPayload | { "type": "copy_text_request" } & CopyTextRequest | { "type": "copy_text_response" } & EmptyPayload | { "type": "render_http_request_request" } & RenderHttpRequestRequest | { "type": "render_http_request_response" } & RenderHttpRequestResponse | { "type": "render_grpc_request_request" } & RenderGrpcRequestRequest | { "type": "render_grpc_request_response" } & RenderGrpcRequestResponse | { "type": "template_render_request" } & TemplateRenderRequest | { "type": "template_render_response" } & TemplateRenderResponse | { "type": "get_key_value_request" } & GetKeyValueRequest | { "type": "get_key_value_response" } & GetKeyValueResponse | { "type": "set_key_value_request" } & SetKeyValueRequest | { "type": "set_key_value_response" } & SetKeyValueResponse | { "type": "delete_key_value_request" } & DeleteKeyValueRequest | { "type": "delete_key_value_response" } & DeleteKeyValueResponse | { "type": "open_window_request" } & OpenWindowRequest | { "type": "window_navigate_event" } & WindowNavigateEvent | { "type": "window_close_event" } | { "type": "close_window_request" } & CloseWindowRequest | { "type": "show_toast_request" } & ShowToastRequest | { "type": "show_toast_response" } & EmptyPayload | { "type": "prompt_text_request" } & PromptTextRequest | { "type": "prompt_text_response" } & PromptTextResponse | { "type": "window_info_request" } & WindowInfoRequest | { "type": "window_info_response" } & WindowInfoResponse | { "type": "get_http_request_by_id_request" } & GetHttpRequestByIdRequest | { "type": "get_http_request_by_id_response" } & GetHttpRequestByIdResponse | { "type": "find_http_responses_request" } & FindHttpResponsesRequest | { "type": "find_http_responses_response" } & FindHttpResponsesResponse | { "type": "get_themes_request" } & GetThemesRequest | { "type": "get_themes_response" } & GetThemesResponse | { "type": "empty_response" } & EmptyPayload | { "type": "error_response" } & ErrorResponse;
export type JsonPrimitive = string | number | boolean | null;
export type ListCookieNamesRequest = {};
export type ListCookieNamesResponse = { names: Array<string>, };
export type OpenWindowRequest = { url: string,
/**
* Label for the window. If not provided, a random one will be generated.
*/
label: string, title?: string, size?: WindowSize, dataDirKey?: string, };
export type PluginContext = { id: string, label: string | null, workspaceId: string | null, };
export type PromptTextRequest = { id: string, title: string, label: string, description?: string, defaultValue?: string, placeholder?: string,
/**
* Text to add to the confirmation button
*/
confirmText?: string, password?: boolean,
/**
* Text to add to the cancel button
*/
cancelText?: string,
/**
* Require the user to enter a non-empty value
*/
required?: boolean, };
export type PromptTextResponse = { value: string | null, };
export type ReloadResponse = { silent: boolean, };
export type RenderGrpcRequestRequest = { grpcRequest: GrpcRequest, purpose: RenderPurpose, };
export type RenderGrpcRequestResponse = { grpcRequest: GrpcRequest, };
export type RenderHttpRequestRequest = { httpRequest: HttpRequest, purpose: RenderPurpose, };
export type RenderHttpRequestResponse = { httpRequest: HttpRequest, };
export type RenderPurpose = "send" | "preview";
export type SendHttpRequestRequest = { httpRequest: Partial<HttpRequest>, };
export type SendHttpRequestResponse = { httpResponse: HttpResponse, };
export type SetKeyValueRequest = { key: string, value: string, };
export type SetKeyValueResponse = {};
export type ShowToastRequest = { message: string, color?: Color, icon?: Icon, timeout?: number, };
export type TemplateFunction = { name: string, previewType?: TemplateFunctionPreviewType, description?: string,
/**
* Also support alternative names. This is useful for not breaking existing
* tags when changing the `name` property
*/
aliases?: Array<string>, args: Array<TemplateFunctionArg>,
/**
* A list of arg names to show in the inline preview. If not provided, none will be shown (for privacy reasons).
*/
previewArgs?: Array<string>, };
/**
* Similar to FormInput, but contains
*/
export type TemplateFunctionArg = FormInput;
export type TemplateFunctionPreviewType = "live" | "click" | "none";
export type TemplateRenderRequest = { data: JsonValue, purpose: RenderPurpose, };
export type TemplateRenderResponse = { data: JsonValue, };
export type Theme = {
/**
* How the theme is identified. This should never be changed
*/
id: string,
/**
* The friendly name of the theme to be displayed to the user
*/
label: string,
/**
* Whether the theme will be used for dark or light appearance
*/
dark: boolean,
/**
* The default top-level colors for the theme
*/
base: ThemeComponentColors,
/**
* Optionally override theme for individual UI components for more control
*/
components?: ThemeComponents, };
export type ThemeComponentColors = { surface?: string, surfaceHighlight?: string, surfaceActive?: string, text?: string, textSubtle?: string, textSubtlest?: string, border?: string, borderSubtle?: string, borderFocus?: string, shadow?: string, backdrop?: string, selection?: string, primary?: string, secondary?: string, info?: string, success?: string, notice?: string, warning?: string, danger?: string, };
export type ThemeComponents = { dialog?: ThemeComponentColors, menu?: ThemeComponentColors, toast?: ThemeComponentColors, sidebar?: ThemeComponentColors, responsePane?: ThemeComponentColors, appHeader?: ThemeComponentColors, button?: ThemeComponentColors, banner?: ThemeComponentColors, templateTag?: ThemeComponentColors, urlBar?: ThemeComponentColors, editor?: ThemeComponentColors, input?: ThemeComponentColors, };
export type WindowInfoRequest = { label: string, };
export type WindowInfoResponse = { requestId: string | null, environmentId: string | null, workspaceId: string | null, label: string, };
export type WindowNavigateEvent = { url: string, };
export type WindowSize = { width: number, height: number, };

View File

@@ -0,0 +1,25 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
export type Environment = { model: "environment", id: string, workspaceId: string, createdAt: string, updatedAt: string, name: string, public: boolean, parentModel: string, parentId: string | null, variables: Array<EnvironmentVariable>, color: string | null, sortPriority: number, };
export type EnvironmentVariable = { enabled?: boolean, name: string, value: string, id?: string, };
export type Folder = { model: "folder", id: string, createdAt: string, updatedAt: string, workspaceId: string, folderId: string | null, authentication: Record<string, any>, authenticationType: string | null, description: string, headers: Array<HttpRequestHeader>, name: string, sortPriority: number, };
export type GrpcRequest = { model: "grpc_request", id: string, createdAt: string, updatedAt: string, workspaceId: string, folderId: string | null, authenticationType: string | null, authentication: Record<string, any>, description: string, message: string, metadata: Array<HttpRequestHeader>, method: string | null, name: string, service: string | null, sortPriority: number, url: string, };
export type HttpRequest = { model: "http_request", id: string, createdAt: string, updatedAt: string, workspaceId: string, folderId: string | null, authentication: Record<string, any>, authenticationType: string | null, body: Record<string, any>, bodyType: string | null, description: string, headers: Array<HttpRequestHeader>, method: string, name: string, sortPriority: number, url: string, urlParameters: Array<HttpUrlParameter>, };
export type HttpRequestHeader = { enabled?: boolean, name: string, value: string, id?: string, };
export type HttpResponse = { model: "http_response", id: string, createdAt: string, updatedAt: string, workspaceId: string, requestId: string, bodyPath: string | null, contentLength: number | null, elapsed: number, elapsedHeaders: number, error: string | null, headers: Array<HttpResponseHeader>, remoteAddr: string | null, status: number, statusReason: string | null, state: HttpResponseState, url: string, version: string | null, };
export type HttpResponseHeader = { name: string, value: string, };
export type HttpResponseState = "initialized" | "connected" | "closed";
export type HttpUrlParameter = { enabled?: boolean, name: string, value: string, id?: string, };
export type WebsocketRequest = { model: "websocket_request", id: string, createdAt: string, updatedAt: string, workspaceId: string, folderId: string | null, authentication: Record<string, any>, authenticationType: string | null, description: string, headers: Array<HttpRequestHeader>, message: string, name: string, sortPriority: number, url: string, urlParameters: Array<HttpUrlParameter>, };
export type Workspace = { model: "workspace", id: string, createdAt: string, updatedAt: string, authentication: Record<string, any>, authenticationType: string | null, description: string, headers: Array<HttpRequestHeader>, name: string, encryptionKeyChallenge: string | null, settingValidateCertificates: boolean, settingFollowRedirects: boolean, settingRequestTimeout: number, };

View File

@@ -0,0 +1,5 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
export type PluginMetadata = { version: string, name: string, displayName: string, description: string | null, homepageUrl: string | null, repositoryUrl: string | null, };
export type PluginVersion = { id: string, version: string, url: string, description: string | null, name: string, displayName: string, homepageUrl: string | null, repositoryUrl: string | null, checksum: string, readme: string | null, yanked: boolean, };

View File

@@ -0,0 +1,3 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
export type JsonValue = number | string | boolean | Array<JsonValue> | { [key in string]?: JsonValue } | null;

View File

@@ -0,0 +1,2 @@
export type AtLeast<T, K extends keyof T> = Partial<T> & Pick<T, K>;
export type MaybePromise<T> = Promise<T> | T;

View File

@@ -0,0 +1,9 @@
export type * from './plugins';
export type * from './themes';
export * from './bindings/gen_models';
export * from './bindings/gen_events';
// Some extras for utility
export type { PartialImportResources } from './plugins/ImporterPlugin';

View File

@@ -0,0 +1,44 @@
import {
CallHttpAuthenticationActionArgs,
CallHttpAuthenticationRequest,
CallHttpAuthenticationResponse,
FormInput,
GetHttpAuthenticationSummaryResponse,
HttpAuthenticationAction,
} from '../bindings/gen_events';
import { MaybePromise } from '../helpers';
import { Context } from './Context';
type AddDynamicMethod<T> = {
dynamic?: (
ctx: Context,
args: CallHttpAuthenticationActionArgs,
) => MaybePromise<Partial<T> | null | undefined>;
};
type AddDynamic<T> = T extends any
? T extends { inputs?: FormInput[] }
? Omit<T, 'inputs'> & {
inputs: Array<AddDynamic<FormInput>>;
dynamic?: (
ctx: Context,
args: CallHttpAuthenticationActionArgs,
) => MaybePromise<
Partial<Omit<T, 'inputs'> & { inputs: Array<AddDynamic<FormInput>> }> | null | undefined
>;
}
: T & AddDynamicMethod<T>
: never;
export type DynamicAuthenticationArg = AddDynamic<FormInput>;
export type AuthenticationPlugin = GetHttpAuthenticationSummaryResponse & {
args: DynamicAuthenticationArg[];
onApply(
ctx: Context,
args: CallHttpAuthenticationRequest,
): MaybePromise<CallHttpAuthenticationResponse>;
actions?: (HttpAuthenticationAction & {
onSelect(ctx: Context, args: CallHttpAuthenticationActionArgs): Promise<void> | void;
})[];
};

View File

@@ -0,0 +1,70 @@
import type {
FindHttpResponsesRequest,
FindHttpResponsesResponse,
GetCookieValueRequest,
GetCookieValueResponse,
GetHttpRequestByIdRequest,
GetHttpRequestByIdResponse,
ListCookieNamesResponse,
OpenWindowRequest,
PromptTextRequest,
PromptTextResponse,
RenderGrpcRequestRequest,
RenderGrpcRequestResponse,
RenderHttpRequestRequest,
RenderHttpRequestResponse,
SendHttpRequestRequest,
SendHttpRequestResponse,
ShowToastRequest,
TemplateRenderRequest,
} from '../bindings/gen_events.ts';
import type { JsonValue } from '../bindings/serde_json/JsonValue';
export interface Context {
clipboard: {
copyText(text: string): Promise<void>;
};
toast: {
show(args: ShowToastRequest): Promise<void>;
};
prompt: {
text(args: PromptTextRequest): Promise<PromptTextResponse['value']>;
};
store: {
set<T>(key: string, value: T): Promise<void>;
get<T>(key: string): Promise<T | undefined>;
delete(key: string): Promise<boolean>;
};
window: {
requestId(): Promise<string | null>;
workspaceId(): Promise<string | null>;
environmentId(): Promise<string | null>;
openUrl(
args: OpenWindowRequest & {
onNavigate?: (args: { url: string }) => void;
onClose?: () => void;
},
): Promise<{ close: () => void }>;
};
cookies: {
listNames(): Promise<ListCookieNamesResponse['names']>;
getValue(args: GetCookieValueRequest): Promise<GetCookieValueResponse['value']>;
};
grpcRequest: {
render(args: RenderGrpcRequestRequest): Promise<RenderGrpcRequestResponse['grpcRequest']>;
};
httpRequest: {
send(args: SendHttpRequestRequest): Promise<SendHttpRequestResponse['httpResponse']>;
getById(args: GetHttpRequestByIdRequest): Promise<GetHttpRequestByIdResponse['httpRequest']>;
render(args: RenderHttpRequestRequest): Promise<RenderHttpRequestResponse['httpRequest']>;
};
httpResponse: {
find(args: FindHttpResponsesRequest): Promise<FindHttpResponsesResponse['httpResponses']>;
};
templates: {
render<T extends JsonValue>(args: TemplateRenderRequest & { data: T }): Promise<T>;
};
plugin: {
reload(): void;
};
}

View File

@@ -0,0 +1,11 @@
import { FilterResponse } from '../bindings/gen_events';
import type { Context } from './Context';
export type FilterPlugin = {
name: string;
description?: string;
onFilter(
ctx: Context,
args: { payload: string; filter: string; mimeType: string },
): Promise<FilterResponse> | FilterResponse;
};

View File

@@ -0,0 +1,6 @@
import { CallGrpcRequestActionArgs, GrpcRequestAction } from '../bindings/gen_events';
import type { Context } from './Context';
export type GrpcRequestActionPlugin = GrpcRequestAction & {
onSelect(ctx: Context, args: CallGrpcRequestActionArgs): Promise<void> | void;
};

View File

@@ -0,0 +1,6 @@
import type { CallHttpRequestActionArgs, HttpRequestAction } from '../bindings/gen_events';
import type { Context } from './Context';
export type HttpRequestActionPlugin = HttpRequestAction & {
onSelect(ctx: Context, args: CallHttpRequestActionArgs): Promise<void> | void;
};

View File

@@ -0,0 +1,28 @@
import { ImportResources } from '../bindings/gen_events';
import { AtLeast, MaybePromise } from '../helpers';
import type { Context } from './Context';
type RootFields = 'name' | 'id' | 'model';
type CommonFields = RootFields | 'workspaceId';
export type PartialImportResources = {
workspaces: Array<AtLeast<ImportResources['workspaces'][0], RootFields>>;
environments: Array<AtLeast<ImportResources['environments'][0], CommonFields>>;
folders: Array<AtLeast<ImportResources['folders'][0], CommonFields>>;
httpRequests: Array<AtLeast<ImportResources['httpRequests'][0], CommonFields>>;
grpcRequests: Array<AtLeast<ImportResources['grpcRequests'][0], CommonFields>>;
websocketRequests: Array<AtLeast<ImportResources['websocketRequests'][0], CommonFields>>;
};
export type ImportPluginResponse = null | {
resources: PartialImportResources;
};
export type ImporterPlugin = {
name: string;
description?: string;
onImport(
ctx: Context,
args: { text: string },
): MaybePromise<ImportPluginResponse | null | undefined>;
};

View File

@@ -0,0 +1,31 @@
import { CallTemplateFunctionArgs, FormInput, TemplateFunction } from '../bindings/gen_events';
import { MaybePromise } from '../helpers';
import { Context } from './Context';
type AddDynamicMethod<T> = {
dynamic?: (
ctx: Context,
args: CallTemplateFunctionArgs,
) => MaybePromise<Partial<T> | null | undefined>;
};
type AddDynamic<T> = T extends any
? T extends { inputs?: FormInput[] }
? Omit<T, 'inputs'> & {
inputs: Array<AddDynamic<FormInput>>;
dynamic?: (
ctx: Context,
args: CallTemplateFunctionArgs,
) => MaybePromise<
Partial<Omit<T, 'inputs'> & { inputs: Array<AddDynamic<FormInput>> }> | null | undefined
>;
}
: T & AddDynamicMethod<T>
: never;
export type DynamicTemplateFunctionArg = AddDynamic<FormInput>;
export type TemplateFunctionPlugin = Omit<TemplateFunction, 'args'> & {
args: DynamicTemplateFunctionArg[];
onRender(ctx: Context, args: CallTemplateFunctionArgs): Promise<string | null>;
};

View File

@@ -0,0 +1,3 @@
import { Theme } from '../bindings/gen_events';
export type ThemePlugin = Theme;

View File

@@ -0,0 +1,29 @@
import { AuthenticationPlugin } from './AuthenticationPlugin';
import type { Context } from './Context';
import type { FilterPlugin } from './FilterPlugin';
import { GrpcRequestActionPlugin } from './GrpcRequestActionPlugin';
import type { HttpRequestActionPlugin } from './HttpRequestActionPlugin';
import type { ImporterPlugin } from './ImporterPlugin';
import type { TemplateFunctionPlugin } from './TemplateFunctionPlugin';
import type { ThemePlugin } from './ThemePlugin';
export type { Context };
export type { DynamicTemplateFunctionArg } from './TemplateFunctionPlugin';
export type { DynamicAuthenticationArg } from './AuthenticationPlugin';
export type { TemplateFunctionPlugin };
/**
* The global structure of a Yaak plugin
*/
export type PluginDefinition = {
init?: (ctx: Context) => void | Promise<void>;
dispose?: () => void | Promise<void>;
importer?: ImporterPlugin;
themes?: ThemePlugin[];
filter?: FilterPlugin;
authentication?: AuthenticationPlugin;
httpRequestActions?: HttpRequestActionPlugin[];
grpcRequestActions?: GrpcRequestActionPlugin[];
templateFunctions?: TemplateFunctionPlugin[];
};

View File

@@ -0,0 +1,44 @@
export type Colors = {
surface: string;
surfaceHighlight?: string;
surfaceActive?: string;
text: string;
textSubtle?: string;
textSubtlest?: string;
border?: string;
borderSubtle?: string;
borderFocus?: string;
shadow?: string;
backdrop?: string;
selection?: string;
primary?: string;
secondary?: string;
info?: string;
success?: string;
notice?: string;
warning?: string;
danger?: string;
};
export type Index = Colors & {
id: string;
name: string;
components?: Partial<{
dialog: Partial<Colors>;
menu: Partial<Colors>;
toast: Partial<Colors>;
sidebar: Partial<Colors>;
responsePane: Partial<Colors>;
appHeader: Partial<Colors>;
button: Partial<Colors>;
banner: Partial<Colors>;
placeholder: Partial<Colors>;
urlBar: Partial<Colors>;
editor: Partial<Colors>;
input: Partial<Colors>;
}>;
};

View File

@@ -0,0 +1,20 @@
{
"compilerOptions": {
"module": "node16",
"target": "es6",
"lib": [
"es2021",
"dom"
],
"declaration": true,
"declarationDir": "./lib",
"outDir": "./lib",
"strict": true,
"types": [
"node"
]
},
"files": [
"src/index.ts"
]
}

View File

@@ -0,0 +1,10 @@
{
"name": "@yaakapp-internal/plugin-runtime",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@yaakapp-internal/plugin-runtime"
}
}
}

View File

@@ -0,0 +1,14 @@
{
"name": "@yaakapp-internal/plugin-runtime",
"scripts": {
"bootstrap": "npm run build",
"build": "run-p build:*",
"build:main": "esbuild src/index.ts --bundle --platform=node --outfile=../../src-tauri/vendored/plugin-runtime/index.cjs"
},
"dependencies": {
"ws": "^8.18.0"
},
"devDependencies": {
"@types/ws": "^8.5.13"
}
}

View File

@@ -0,0 +1,19 @@
import type { InternalEvent } from '@yaakapp/api';
export class EventChannel {
#listeners = new Set<(event: InternalEvent) => void>();
emit(e: InternalEvent) {
for (const l of this.#listeners) {
l(e);
}
}
listen(cb: (e: InternalEvent) => void) {
this.#listeners.add(cb);
}
unlisten(cb: (e: InternalEvent) => void) {
this.#listeners.delete(cb);
}
}

View File

@@ -0,0 +1,26 @@
import { PluginContext } from '@yaakapp-internal/plugins';
import type { BootRequest, InternalEvent } from '@yaakapp/api';
import type { EventChannel } from './EventChannel';
import { PluginInstance, PluginWorkerData } from './PluginInstance';
export class PluginHandle {
#instance: PluginInstance;
constructor(
pluginRefId: string,
context: PluginContext,
bootRequest: BootRequest,
pluginToAppEvents: EventChannel,
) {
const workerData: PluginWorkerData = { pluginRefId, context, bootRequest };
this.#instance = new PluginInstance(workerData, pluginToAppEvents);
}
sendToWorker(event: InternalEvent) {
this.#instance.postMessage(event);
}
async terminate() {
await this.#instance.terminate();
}
}

View File

@@ -0,0 +1,696 @@
import { applyFormInputDefaults, validateTemplateFunctionArgs } from '@yaakapp-internal/lib/templateFunction';
import {
BootRequest,
DeleteKeyValueResponse,
FindHttpResponsesResponse,
GetCookieValueRequest,
GetCookieValueResponse,
GetHttpRequestByIdResponse,
GetKeyValueResponse,
GrpcRequestAction,
HttpAuthenticationAction,
HttpRequestAction,
InternalEvent,
InternalEventPayload,
ListCookieNamesResponse,
PluginContext,
PromptTextResponse,
RenderGrpcRequestResponse,
RenderHttpRequestResponse,
SendHttpRequestResponse,
TemplateFunction,
TemplateRenderResponse,
WindowInfoResponse,
} from '@yaakapp-internal/plugins';
import { Context, PluginDefinition } from '@yaakapp/api';
import console from 'node:console';
import { type Stats, statSync, watch } from 'node:fs';
import path from 'node:path';
import { applyDynamicFormInput } from './common';
import { EventChannel } from './EventChannel';
import { migrateTemplateFunctionSelectOptions } from './migrations';
export interface PluginWorkerData {
bootRequest: BootRequest;
pluginRefId: string;
context: PluginContext;
}
export class PluginInstance {
#workerData: PluginWorkerData;
#mod: PluginDefinition;
#pluginToAppEvents: EventChannel;
#appToPluginEvents: EventChannel;
constructor(workerData: PluginWorkerData, pluginEvents: EventChannel) {
this.#workerData = workerData;
this.#pluginToAppEvents = pluginEvents;
this.#appToPluginEvents = new EventChannel();
// Forward incoming events to onMessage()
this.#appToPluginEvents.listen(async (event) => {
await this.#onMessage(event);
});
this.#mod = {} as any;
const fileChangeCallback = async () => {
await this.#mod?.dispose?.();
this.#importModule();
await this.#mod?.init?.(this.#newCtx(workerData.context));
return this.#sendPayload(
workerData.context,
{
type: 'reload_response',
silent: false,
},
null,
);
};
if (this.#workerData.bootRequest.watch) {
watchFile(this.#pathMod(), fileChangeCallback);
watchFile(this.#pathPkg(), fileChangeCallback);
}
this.#importModule();
}
postMessage(event: InternalEvent) {
this.#appToPluginEvents.emit(event);
}
async terminate() {
await this.#mod?.dispose?.();
this.#unimportModule();
}
async #onMessage(event: InternalEvent) {
const ctx = this.#newCtx(event.context);
const { context, payload, id: replyId } = event;
try {
if (payload.type === 'boot_request') {
await this.#mod?.init?.(ctx);
this.#sendPayload(context, { type: 'boot_response' }, replyId);
return;
}
if (payload.type === 'terminate_request') {
const payload: InternalEventPayload = {
type: 'terminate_response',
};
await this.terminate();
this.#sendPayload(context, payload, replyId);
return;
}
if (
payload.type === 'import_request' &&
typeof this.#mod?.importer?.onImport === 'function'
) {
const reply = await this.#mod.importer.onImport(ctx, {
text: payload.content,
});
if (reply != null) {
const replyPayload: InternalEventPayload = {
type: 'import_response',
// deno-lint-ignore no-explicit-any
resources: reply.resources as any,
};
this.#sendPayload(context, replyPayload, replyId);
return;
} else {
// Send back an empty reply (below)
}
}
if (payload.type === 'filter_request' && typeof this.#mod?.filter?.onFilter === 'function') {
const reply = await this.#mod.filter.onFilter(ctx, {
filter: payload.filter,
payload: payload.content,
mimeType: payload.type,
});
this.#sendPayload(context, { type: 'filter_response', ...reply }, replyId);
return;
}
if (
payload.type === 'get_grpc_request_actions_request' &&
Array.isArray(this.#mod?.grpcRequestActions)
) {
const reply: GrpcRequestAction[] = this.#mod.grpcRequestActions.map((a) => ({
...a,
// Add everything except onSelect
onSelect: undefined,
}));
const replyPayload: InternalEventPayload = {
type: 'get_grpc_request_actions_response',
pluginRefId: this.#workerData.pluginRefId,
actions: reply,
};
this.#sendPayload(context, replyPayload, replyId);
return;
}
if (
payload.type === 'get_http_request_actions_request' &&
Array.isArray(this.#mod?.httpRequestActions)
) {
const reply: HttpRequestAction[] = this.#mod.httpRequestActions.map((a) => ({
...a,
// Add everything except onSelect
onSelect: undefined,
}));
const replyPayload: InternalEventPayload = {
type: 'get_http_request_actions_response',
pluginRefId: this.#workerData.pluginRefId,
actions: reply,
};
this.#sendPayload(context, replyPayload, replyId);
return;
}
if (payload.type === 'get_themes_request' && Array.isArray(this.#mod?.themes)) {
const replyPayload: InternalEventPayload = {
type: 'get_themes_response',
themes: this.#mod.themes,
};
this.#sendPayload(context, replyPayload, replyId);
return;
}
if (
payload.type === 'get_template_function_summary_request' &&
Array.isArray(this.#mod?.templateFunctions)
) {
const functions: TemplateFunction[] = this.#mod.templateFunctions.map(
(templateFunction) => {
return {
...migrateTemplateFunctionSelectOptions(templateFunction),
// Add everything except render
onRender: undefined,
};
},
);
const replyPayload: InternalEventPayload = {
type: 'get_template_function_summary_response',
pluginRefId: this.#workerData.pluginRefId,
functions,
};
this.#sendPayload(context, replyPayload, replyId);
return;
}
if (
payload.type === 'get_template_function_config_request' &&
Array.isArray(this.#mod?.templateFunctions)
) {
let templateFunction = this.#mod.templateFunctions.find((f) => f.name === payload.name);
if (templateFunction == null) {
this.#sendEmpty(context, replyId);
return;
}
const fn = {
...migrateTemplateFunctionSelectOptions(templateFunction),
onRender: undefined,
};
payload.values = applyFormInputDefaults(fn.args, payload.values);
const p = { ...payload, purpose: 'preview' } as const;
const resolvedArgs = await applyDynamicFormInput(ctx, fn.args, p);
const replyPayload: InternalEventPayload = {
type: 'get_template_function_config_response',
pluginRefId: this.#workerData.pluginRefId,
function: { ...fn, args: resolvedArgs },
};
this.#sendPayload(context, replyPayload, replyId);
return;
}
if (payload.type === 'get_http_authentication_summary_request' && this.#mod?.authentication) {
const replyPayload: InternalEventPayload = {
type: 'get_http_authentication_summary_response',
...this.#mod.authentication,
};
this.#sendPayload(context, replyPayload, replyId);
return;
}
if (payload.type === 'get_http_authentication_config_request' && this.#mod?.authentication) {
const { args, actions } = this.#mod.authentication;
payload.values = applyFormInputDefaults(args, payload.values);
const resolvedArgs = await applyDynamicFormInput(ctx, args, payload);
const resolvedActions: HttpAuthenticationAction[] = [];
for (const { onSelect, ...action } of actions ?? []) {
resolvedActions.push(action);
}
const replyPayload: InternalEventPayload = {
type: 'get_http_authentication_config_response',
args: resolvedArgs,
actions: resolvedActions,
pluginRefId: this.#workerData.pluginRefId,
};
this.#sendPayload(context, replyPayload, replyId);
return;
}
if (payload.type === 'call_http_authentication_request' && this.#mod?.authentication) {
const auth = this.#mod.authentication;
if (typeof auth?.onApply === 'function') {
auth.args = await applyDynamicFormInput(ctx, auth.args, payload);
payload.values = applyFormInputDefaults(auth.args, payload.values);
this.#sendPayload(
context,
{
type: 'call_http_authentication_response',
...(await auth.onApply(ctx, payload)),
},
replyId,
);
return;
}
}
if (
payload.type === 'call_http_authentication_action_request' &&
this.#mod.authentication != null
) {
const action = this.#mod.authentication.actions?.[payload.index];
if (typeof action?.onSelect === 'function') {
await action.onSelect(ctx, payload.args);
this.#sendEmpty(context, replyId);
return;
}
}
if (
payload.type === 'call_http_request_action_request' &&
Array.isArray(this.#mod.httpRequestActions)
) {
const action = this.#mod.httpRequestActions[payload.index];
if (typeof action?.onSelect === 'function') {
await action.onSelect(ctx, payload.args);
this.#sendEmpty(context, replyId);
return;
}
}
if (
payload.type === 'call_grpc_request_action_request' &&
Array.isArray(this.#mod.grpcRequestActions)
) {
const action = this.#mod.grpcRequestActions[payload.index];
if (typeof action?.onSelect === 'function') {
await action.onSelect(ctx, payload.args);
this.#sendEmpty(context, replyId);
return;
}
}
if (
payload.type === 'call_template_function_request' &&
Array.isArray(this.#mod?.templateFunctions)
) {
const fn = this.#mod.templateFunctions.find((a) => a.name === payload.name);
if (
payload.args.purpose === 'preview' &&
(fn?.previewType === 'click' || fn?.previewType === 'none')
) {
// Send empty render response
this.#sendPayload(
context,
{
type: 'call_template_function_response',
value: null,
error: 'Live preview disabled for this function',
},
replyId,
);
} else if (typeof fn?.onRender === 'function') {
const resolvedArgs = await applyDynamicFormInput(ctx, fn.args, payload.args);
const values = applyFormInputDefaults(resolvedArgs, payload.args.values);
const error = validateTemplateFunctionArgs(fn.name, resolvedArgs, values);
if (error && payload.args.purpose !== 'preview') {
this.#sendPayload(
context,
{ type: 'call_template_function_response', value: null, error },
replyId,
);
return;
}
try {
const result = await fn.onRender(ctx, { ...payload.args, values });
this.#sendPayload(
context,
{ type: 'call_template_function_response', value: result ?? null },
replyId,
);
} catch (err) {
this.#sendPayload(
context,
{
type: 'call_template_function_response',
value: null,
error: `${err}`.replace(/^Error:\s*/g, ''),
},
replyId,
);
}
return;
}
}
} catch (err) {
const error = `${err}`.replace(/^Error:\s*/g, '');
console.log('Plugin call threw exception', payload.type, '→', error);
this.#sendPayload(context, { type: 'error_response', error }, replyId);
return;
}
// No matches, so send back an empty response so the caller doesn't block forever
this.#sendEmpty(context, replyId);
}
#pathMod() {
return path.posix.join(this.#workerData.bootRequest.dir, 'build', 'index.js');
}
#pathPkg() {
return path.join(this.#workerData.bootRequest.dir, 'package.json');
}
#unimportModule() {
const id = require.resolve(this.#pathMod());
delete require.cache[id];
}
#importModule() {
const id = require.resolve(this.#pathMod());
delete require.cache[id];
this.#mod = require(id).plugin;
}
#buildEventToSend(
context: PluginContext,
payload: InternalEventPayload,
replyId: string | null = null,
): InternalEvent {
return {
pluginRefId: this.#workerData.pluginRefId,
pluginName: path.basename(this.#workerData.bootRequest.dir),
id: genId(),
replyId,
payload,
context,
};
}
#sendPayload(
context: PluginContext,
payload: InternalEventPayload,
replyId: string | null,
): string {
const event = this.#buildEventToSend(context, payload, replyId);
this.#sendEvent(event);
return event.id;
}
#sendEvent(event: InternalEvent) {
// if (event.payload.type !== 'empty_response') {
// console.log('Sending event to app', this.#pkg.name, event.id, event.payload.type);
// }
this.#pluginToAppEvents.emit(event);
}
#sendEmpty(context: PluginContext, replyId: string | null = null): string {
return this.#sendPayload(context, { type: 'empty_response' }, replyId);
}
#sendForReply<T extends Omit<InternalEventPayload, 'type'>>(
context: PluginContext,
payload: InternalEventPayload,
): Promise<T> {
// 1. Build event to send
const eventToSend = this.#buildEventToSend(context, payload, null);
// 2. Spawn listener in background
const promise = new Promise<T>((resolve) => {
const cb = (event: InternalEvent) => {
if (event.replyId === eventToSend.id) {
this.#appToPluginEvents.unlisten(cb); // Unlisten, now that we're done
const { type: _, ...payload } = event.payload;
resolve(payload as T);
}
};
this.#appToPluginEvents.listen(cb);
});
// 3. Send the event after we start listening (to prevent race)
this.#sendEvent(eventToSend);
// 4. Return the listener promise
return promise as unknown as Promise<T>;
}
#sendAndListenForEvents(
context: PluginContext,
payload: InternalEventPayload,
onEvent: (event: InternalEventPayload) => void,
): void {
// 1. Build event to send
const eventToSend = this.#buildEventToSend(context, payload, null);
// 2. Listen for replies in the background
this.#appToPluginEvents.listen((event: InternalEvent) => {
if (event.replyId === eventToSend.id) {
onEvent(event.payload);
}
});
// 3. Send the event after we start listening (to prevent race)
this.#sendEvent(eventToSend);
}
#newCtx(context: PluginContext): Context {
const _windowInfo = async () => {
if (context.label == null) {
throw new Error("Can't get window context without an active window");
}
const payload: InternalEventPayload = {
type: 'window_info_request',
label: context.label,
};
return this.#sendForReply<WindowInfoResponse>(context, payload);
};
return {
clipboard: {
copyText: async (text) => {
await this.#sendForReply(context, {
type: 'copy_text_request',
text,
});
},
},
toast: {
show: async (args) => {
await this.#sendForReply(context, {
type: 'show_toast_request',
// Handle default here because null/undefined both convert to None in Rust translation
timeout: args.timeout === undefined ? 5000 : args.timeout,
...args,
});
},
},
window: {
requestId: async () => {
return (await _windowInfo()).requestId;
},
async workspaceId(): Promise<string | null> {
return (await _windowInfo()).workspaceId;
},
async environmentId(): Promise<string | null> {
return (await _windowInfo()).environmentId;
},
openUrl: async ({ onNavigate, onClose, ...args }) => {
args.label = args.label || `${Math.random()}`;
const payload: InternalEventPayload = { type: 'open_window_request', ...args };
const onEvent = (event: InternalEventPayload) => {
if (event.type === 'window_navigate_event') {
onNavigate?.(event);
} else if (event.type === 'window_close_event') {
onClose?.();
}
};
this.#sendAndListenForEvents(context, payload, onEvent);
return {
close: () => {
const closePayload: InternalEventPayload = {
type: 'close_window_request',
label: args.label,
};
this.#sendPayload(context, closePayload, null);
},
};
},
},
prompt: {
text: async (args) => {
const reply: PromptTextResponse = await this.#sendForReply(context, {
type: 'prompt_text_request',
...args,
});
return reply.value;
},
},
httpResponse: {
find: async (args) => {
const payload = {
type: 'find_http_responses_request',
...args,
} as const;
const { httpResponses } = await this.#sendForReply<FindHttpResponsesResponse>(
context,
payload,
);
return httpResponses;
},
},
grpcRequest: {
render: async (args) => {
const payload = {
type: 'render_grpc_request_request',
...args,
} as const;
const { grpcRequest } = await this.#sendForReply<RenderGrpcRequestResponse>(
context,
payload,
);
return grpcRequest;
},
},
httpRequest: {
getById: async (args) => {
const payload = {
type: 'get_http_request_by_id_request',
...args,
} as const;
const { httpRequest } = await this.#sendForReply<GetHttpRequestByIdResponse>(
context,
payload,
);
return httpRequest;
},
send: async (args) => {
const payload = {
type: 'send_http_request_request',
...args,
} as const;
const { httpResponse } = await this.#sendForReply<SendHttpRequestResponse>(
context,
payload,
);
return httpResponse;
},
render: async (args) => {
const payload = {
type: 'render_http_request_request',
...args,
} as const;
const { httpRequest } = await this.#sendForReply<RenderHttpRequestResponse>(
context,
payload,
);
return httpRequest;
},
},
cookies: {
getValue: async (args: GetCookieValueRequest) => {
const payload = {
type: 'get_cookie_value_request',
...args,
} as const;
const { value } = await this.#sendForReply<GetCookieValueResponse>(context, payload);
return value;
},
listNames: async () => {
const payload = { type: 'list_cookie_names_request' } as const;
const { names } = await this.#sendForReply<ListCookieNamesResponse>(context, payload);
return names;
},
},
templates: {
/**
* Invoke Yaak's template engine to render a value. If the value is a nested type
* (eg. object), it will be recursively rendered.
*/
render: async (args) => {
const payload = { type: 'template_render_request', ...args } as const;
const result = await this.#sendForReply<TemplateRenderResponse>(context, payload);
return result.data as any;
},
},
store: {
get: async <T>(key: string) => {
const payload = { type: 'get_key_value_request', key } as const;
const result = await this.#sendForReply<GetKeyValueResponse>(context, payload);
return result.value ? (JSON.parse(result.value) as T) : undefined;
},
set: async <T>(key: string, value: T) => {
const valueStr = JSON.stringify(value);
const payload: InternalEventPayload = {
type: 'set_key_value_request',
key,
value: valueStr,
};
await this.#sendForReply<GetKeyValueResponse>(context, payload);
},
delete: async (key: string) => {
const payload = { type: 'delete_key_value_request', key } as const;
const result = await this.#sendForReply<DeleteKeyValueResponse>(context, payload);
return result.deleted;
},
},
plugin: {
reload: () => {
this.#sendPayload(context, { type: 'reload_response', silent: true }, null);
},
},
};
}
}
function genId(len = 5): string {
const alphabet = '01234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
let id = '';
for (let i = 0; i < len; i++) {
id += alphabet[Math.floor(Math.random() * alphabet.length)];
}
return id;
}
const watchedFiles: Record<string, Stats | null> = {};
/**
* Watch a file and trigger a callback on change.
*
* We also track the stat for each file because fs.watch() will
* trigger a "change" event when the access date changes.
*/
function watchFile(filepath: string, cb: () => void) {
watch(filepath, () => {
const stat = statSync(filepath, { throwIfNoEntry: false });
if (stat == null || stat.mtimeMs !== watchedFiles[filepath]?.mtimeMs) {
watchedFiles[filepath] = stat ?? null;
cb();
}
});
}

View File

@@ -0,0 +1,37 @@
import { CallHttpAuthenticationActionArgs, CallTemplateFunctionArgs } from '@yaakapp-internal/plugins';
import { Context, DynamicAuthenticationArg, DynamicTemplateFunctionArg } from '@yaakapp/api';
export async function applyDynamicFormInput(
ctx: Context,
args: DynamicTemplateFunctionArg[],
callArgs: CallTemplateFunctionArgs,
): Promise<DynamicTemplateFunctionArg[]>;
export async function applyDynamicFormInput(
ctx: Context,
args: DynamicAuthenticationArg[],
callArgs: CallHttpAuthenticationActionArgs,
): Promise<DynamicAuthenticationArg[]>;
export async function applyDynamicFormInput(
ctx: Context,
args: (DynamicTemplateFunctionArg | DynamicAuthenticationArg)[],
callArgs: CallTemplateFunctionArgs | CallHttpAuthenticationActionArgs,
): Promise<(DynamicTemplateFunctionArg | DynamicAuthenticationArg)[]> {
const resolvedArgs: any[] = [];
for (const { dynamic, ...arg } of args) {
const newArg: any = {
...arg,
...(typeof dynamic === 'function' ? await dynamic(ctx, callArgs as any) : undefined),
};
if ('inputs' in newArg && Array.isArray(newArg.inputs)) {
try {
newArg.inputs = await applyDynamicFormInput(ctx, newArg.inputs, callArgs as any);
} catch (e) {
console.error('Failed to apply dynamic form input', e);
}
}
resolvedArgs.push(newArg);
}
return resolvedArgs;
}

View File

@@ -0,0 +1,64 @@
import type { InternalEvent } from '@yaakapp/api';
import { EventChannel } from './EventChannel';
import { PluginHandle } from './PluginHandle';
import WebSocket from 'ws';
const port = process.env.PORT;
if (!port) {
throw new Error('Plugin runtime missing PORT')
}
const host = process.env.HOST;
if (!host) {
throw new Error('Plugin runtime missing HOST')
}
const pluginToAppEvents = new EventChannel();
const plugins: Record<string, PluginHandle> = {};
const ws = new WebSocket(`ws://${host}:${port}`);
ws.on('message', async (e: Buffer) => {
try {
await handleIncoming(e.toString());
} catch (err) {
console.log('Failed to handle incoming plugin event', err);
}
});
ws.on('open', () => console.log('Plugin runtime connected to websocket'));
ws.on('error', (err: any) => console.error('Plugin runtime websocket error', err));
ws.on('close', (code: number) => console.log('Plugin runtime websocket closed', code));
// Listen for incoming events from plugins
pluginToAppEvents.listen((e) => {
const eventStr = JSON.stringify(e);
ws.send(eventStr);
});
async function handleIncoming(msg: string) {
const pluginEvent: InternalEvent = JSON.parse(msg);
// Handle special event to bootstrap plugin
if (pluginEvent.payload.type === 'boot_request') {
const plugin = new PluginHandle(pluginEvent.pluginRefId, pluginEvent.context, pluginEvent.payload, pluginToAppEvents);
plugins[pluginEvent.pluginRefId] = plugin;
}
// Once booted, forward all events to the plugin worker
const plugin = plugins[pluginEvent.pluginRefId];
if (!plugin) {
console.warn('Failed to get plugin for event by', pluginEvent.pluginRefId);
return;
}
if (pluginEvent.payload.type === 'terminate_request') {
await plugin.terminate();
console.log('Terminated plugin worker', pluginEvent.pluginRefId);
delete plugins[pluginEvent.pluginRefId];
}
plugin.sendToWorker(pluginEvent);
}
process.on('unhandledRejection', (reason, promise) => {
console.error('Unhandled Rejection at:', promise, 'reason:', reason);
});

View File

@@ -0,0 +1,37 @@
import process from "node:process";
export function interceptStdout(
intercept: (text: string) => string,
) {
const old_stdout_write = process.stdout.write;
const old_stderr_write = process.stderr.write;
process.stdout.write = (function (write) {
return function (text: string) {
arguments[0] = interceptor(text, intercept);
// deno-lint-ignore no-explicit-any
write.apply(process.stdout, arguments as any);
return true;
};
})(process.stdout.write);
process.stderr.write = (function (write) {
return function (text: string) {
arguments[0] = interceptor(text, intercept);
// deno-lint-ignore no-explicit-any
write.apply(process.stderr, arguments as any);
return true;
};
})(process.stderr.write);
// puts back to original
return function unhook() {
process.stdout.write = old_stdout_write;
process.stderr.write = old_stderr_write;
};
}
function interceptor(text: string, fn: (text: string) => string) {
return fn(text).replace(/\n$/, "") +
(fn(text) && /\n$/.test(text) ? "\n" : "");
}

View File

@@ -0,0 +1,17 @@
import type { TemplateFunctionPlugin } from '@yaakapp/api';
export function migrateTemplateFunctionSelectOptions(
f: TemplateFunctionPlugin,
): TemplateFunctionPlugin {
const migratedArgs = f.args.map((a) => {
if (a.type === 'select') {
a.options = a.options.map((o) => ({
...o,
label: o.label || (o as any).name,
}));
}
return a;
});
return { ...f, args: migratedArgs };
}

View File

@@ -0,0 +1,150 @@
import { CallTemplateFunctionArgs } from '@yaakapp-internal/plugins';
import { Context, DynamicTemplateFunctionArg } from '@yaakapp/api';
import { describe, expect, test } from 'vitest';
import { applyDynamicFormInput, applyFormInputDefaults } from '../src/common';
describe('applyFormInputDefaults', () => {
test('Works with top-level select', () => {
const args: DynamicTemplateFunctionArg[] = [
{
type: 'select',
name: 'test',
options: [{ label: 'Option 1', value: 'one' }],
defaultValue: 'one',
},
];
expect(applyFormInputDefaults(args, {})).toEqual({
test: 'one',
});
});
test('Works with existing value', () => {
const args: DynamicTemplateFunctionArg[] = [
{
type: 'select',
name: 'test',
options: [{ label: 'Option 1', value: 'one' }],
defaultValue: 'one',
},
];
expect(applyFormInputDefaults(args, { test: 'explicit' })).toEqual({
test: 'explicit',
});
});
test('Works with recursive select', () => {
const args: DynamicTemplateFunctionArg[] = [
{ type: 'text', name: 'dummy', defaultValue: 'top' },
{
type: 'accordion',
label: 'Test',
inputs: [
{ type: 'text', name: 'name', defaultValue: 'hello' },
{
type: 'select',
name: 'test',
options: [{ label: 'Option 1', value: 'one' }],
defaultValue: 'one',
},
],
},
];
expect(applyFormInputDefaults(args, {})).toEqual({
dummy: 'top',
test: 'one',
name: 'hello',
});
});
test('Works with dynamic options', () => {
const args: DynamicTemplateFunctionArg[] = [
{
type: 'select',
name: 'test',
defaultValue: 'one',
options: [],
dynamic() {
return { options: [{ label: 'Option 1', value: 'one' }] };
},
},
];
expect(applyFormInputDefaults(args, {})).toEqual({
test: 'one',
});
expect(applyFormInputDefaults(args, {})).toEqual({
test: 'one',
});
});
});
describe('applyDynamicFormInput', () => {
test('Works with plain input', async () => {
const ctx = {} as Context;
const args: DynamicTemplateFunctionArg[] = [
{ type: 'text', name: 'name' },
{ type: 'checkbox', name: 'checked' },
];
const callArgs: CallTemplateFunctionArgs = {
values: {},
purpose: 'preview',
};
expect(await applyDynamicFormInput(ctx, args, callArgs)).toEqual([
{ type: 'text', name: 'name' },
{ type: 'checkbox', name: 'checked' },
]);
});
test('Works with dynamic input', async () => {
const ctx = {} as Context;
const args: DynamicTemplateFunctionArg[] = [
{
type: 'text',
name: 'name',
async dynamic(_ctx, _args) {
return { hidden: true };
},
},
];
const callArgs: CallTemplateFunctionArgs = {
values: {},
purpose: 'preview',
};
expect(await applyDynamicFormInput(ctx, args, callArgs)).toEqual([
{ type: 'text', name: 'name', hidden: true },
]);
});
test('Works with recursive dynamic input', async () => {
const ctx = {} as Context;
const callArgs: CallTemplateFunctionArgs = {
values: { hello: 'world' },
purpose: 'preview',
};
const args: DynamicTemplateFunctionArg[] = [
{
type: 'banner',
inputs: [
{
type: 'text',
name: 'name',
async dynamic(_ctx, args) {
return { hidden: args.values.hello === 'world' };
},
},
],
},
];
expect(await applyDynamicFormInput(ctx, args, callArgs)).toEqual([
{
type: 'banner',
inputs: [
{
type: 'text',
name: 'name',
hidden: true,
},
],
},
]);
});
});

View File

@@ -0,0 +1,25 @@
{
"compilerOptions": {
"module": "node16",
"strict": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"target": "es2021",
"lib": ["es2021"],
"noImplicitAny": false,
"moduleResolution": "node16",
"resolveJsonModule": true,
"sourceMap": true,
"outDir": "build",
"baseUrl": ".",
"paths": {
"*": [
"node_modules/*",
"src/types/*"
]
}
},
"include": [
"src"
]
}

1
plugins/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
*/build

View File

@@ -0,0 +1,68 @@
# Copy as cUrl
A request action plugin for Yaak that converts HTTP requests into [curl](https://curl.se)
commands, making it easy to share, debug, and execute requests outside Yaak.
![Screenshot of context menu](screenshot.png)
## Overview
This plugin adds a 'Copy as Curl' action to HTTP requests, converting any request into its
equivalent curl command. This is useful for debugging, sharing requests with team members,
and executing requests in terminal environments where `curl` is available.
## How It Works
The plugin analyzes the given HTTP request and generates a properly formatted curl command
that includes:
- HTTP method (GET, POST, PUT, DELETE, etc.)
- Request URL with query parameters
- Headers (including authentication headers)
- Request body (for POST, PUT, PATCH requests)
- Authentication credentials
## Usage
1. Configure an HTTP request as usual in Yaak
2. Right-click on the request in the sidebar
3. Select 'Copy as Curl'
4. The command is copied to your clipboard
5. Share or execute the command
## Generated Curl Examples
### Simple GET Request
```bash
curl -X GET 'https://api.example.com/users' \
--header 'Accept: application/json'
```
### POST Request with JSON Data
```bash
curl -X POST 'https://api.example.com/users' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data '{
"name": "John Doe",
"email": "john@example.com"
}'
```
### Request with Multi-part Form Data
```bash
curl -X POST 'yaak.app' \
--header 'Content-Type: multipart/form-data' \
--form 'hello=world' \
--form file=@/path/to/file.json
```
### Request with Authentication
```bash
curl -X GET 'https://api.example.com/protected' \
--user 'username:password'
```

View File

@@ -0,0 +1,17 @@
{
"name": "@yaak/action-copy-curl",
"displayName": "Copy as Curl",
"description": "Copy request as a curl command",
"repository": {
"type": "git",
"url": "https://github.com/mountain-loop/yaak.git",
"directory": "plugins/action-copy-curl"
},
"private": true,
"version": "0.1.0",
"scripts": {
"build": "yaakcli build",
"dev": "yaakcli dev",
"test": "vitest --run tests"
}
}

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 496 KiB

View File

@@ -0,0 +1,173 @@
import type { HttpRequest, PluginDefinition } from '@yaakapp/api';
const NEWLINE = '\\\n ';
export const plugin: PluginDefinition = {
httpRequestActions: [
{
label: 'Copy as Curl',
icon: 'copy',
async onSelect(ctx, args) {
const rendered_request = await ctx.httpRequest.render({
httpRequest: args.httpRequest,
purpose: 'preview',
});
const data = await convertToCurl(rendered_request);
await ctx.clipboard.copyText(data);
await ctx.toast.show({
message: 'Command copied to clipboard',
icon: 'copy',
color: 'success',
});
},
},
],
};
export async function convertToCurl(request: Partial<HttpRequest>) {
const xs = ['curl'];
// Add method and URL all on first line
if (request.method) xs.push('-X', request.method);
// Build final URL with parameters (compatible with old curl)
let finalUrl = request.url || '';
const urlParams = (request.urlParameters ?? []).filter(onlyEnabled);
if (urlParams.length > 0) {
// Build url
const [base, hash] = finalUrl.split('#');
const separator = base?.includes('?') ? '&' : '?';
const queryString = urlParams
.map((p) => `${encodeURIComponent(p.name)}=${encodeURIComponent(p.value)}`)
.join('&');
finalUrl = base + separator + queryString + (hash ? `#${hash}` : '');
}
// Add API key authentication
if (request.authenticationType === 'apikey') {
if (request.authentication?.location === 'query') {
const sep = finalUrl.includes('?') ? '&' : '?';
finalUrl = [
finalUrl,
sep,
encodeURIComponent(request.authentication?.key ?? 'token'),
'=',
encodeURIComponent(request.authentication?.value ?? ''),
].join('');
} else {
request.headers = request.headers ?? [];
request.headers.push({
name: request.authentication?.key ?? 'X-Api-Key',
value: request.authentication?.value ?? '',
});
}
}
xs.push(quote(finalUrl));
xs.push(NEWLINE);
// Add headers
for (const h of (request.headers ?? []).filter(onlyEnabled)) {
xs.push('--header', quote(`${h.name}: ${h.value}`));
xs.push(NEWLINE);
}
// Add form params
const type = request.bodyType ?? 'none';
if (
(type === 'multipart/form-data' || type === 'application/x-www-form-urlencoded') &&
Array.isArray(request.body?.form)
) {
const flag = request.bodyType === 'multipart/form-data' ? '--form' : '--data';
for (const p of (request.body?.form ?? []).filter(onlyEnabled)) {
if (p.file) {
let v = `${p.name}=@${p.file}`;
v += p.contentType ? `;type=${p.contentType}` : '';
xs.push(flag, v);
} else {
xs.push(flag, quote(`${p.name}=${p.value}`));
}
xs.push(NEWLINE);
}
} else if (type === 'graphql' && typeof request.body?.query === 'string') {
const body = {
query: request.body.query || '',
variables: maybeParseJSON(request.body.variables, undefined),
};
xs.push('--data', quote(JSON.stringify(body)));
xs.push(NEWLINE);
} else if (type !== 'none' && typeof request.body?.text === 'string') {
xs.push('--data', quote(request.body.text));
xs.push(NEWLINE);
}
// Add basic/digest authentication
if (request.authentication?.disabled !== true) {
if (request.authenticationType === 'basic' || request.authenticationType === 'digest') {
if (request.authenticationType === 'digest') xs.push('--digest');
xs.push(
'--user',
quote(
`${request.authentication?.username ?? ''}:${request.authentication?.password ?? ''}`,
),
);
xs.push(NEWLINE);
}
// Add bearer authentication
if (request.authenticationType === 'bearer') {
const value =
`${request.authentication?.prefix ?? 'Bearer'} ${request.authentication?.token ?? ''}`.trim();
xs.push('--header', quote(`Authorization: ${value}`));
xs.push(NEWLINE);
}
if (request.authenticationType === 'auth-aws-sig-v4') {
xs.push(
'--aws-sigv4',
[
'aws',
'amz',
request.authentication?.region ?? '',
request.authentication?.service ?? '',
].join(':'),
);
xs.push(NEWLINE);
xs.push(
'--user',
quote(
`${request.authentication?.accessKeyId ?? ''}:${request.authentication?.secretAccessKey ?? ''}`,
),
);
if (request.authentication?.sessionToken) {
xs.push(NEWLINE);
xs.push('--header', quote(`X-Amz-Security-Token: ${request.authentication.sessionToken}`));
}
xs.push(NEWLINE);
}
}
// Remove trailing newline
if (xs[xs.length - 1] === NEWLINE) {
xs.splice(xs.length - 1, 1);
}
return xs.join(' ');
}
function quote(arg: string): string {
const escaped = arg.replace(/'/g, "\\'");
return `'${escaped}'`;
}
function onlyEnabled(v: { name?: string; enabled?: boolean }): boolean {
return v.enabled !== false && !!v.name;
}
function maybeParseJSON<T>(v: string, fallback: T) {
try {
return JSON.parse(v);
} catch {
return fallback;
}
}

View File

@@ -0,0 +1,414 @@
import { describe, expect, test } from 'vitest';
import { convertToCurl } from '../src';
describe('exporter-curl', () => {
test('Exports GET with params', async () => {
expect(
await convertToCurl({
url: 'https://yaak.app',
urlParameters: [
{ name: 'a', value: 'aaa' },
{ name: 'b', value: 'bbb', enabled: true },
{ name: 'c', value: 'ccc', enabled: false },
],
}),
).toEqual([`curl 'https://yaak.app?a=aaa&b=bbb'`].join(' \\n '));
});
test('Exports GET with params and hash', async () => {
expect(
await convertToCurl({
url: 'https://yaak.app/path#section',
urlParameters: [
{ name: 'a', value: 'aaa' },
{ name: 'b', value: 'bbb', enabled: true },
{ name: 'c', value: 'ccc', enabled: false },
],
}),
).toEqual([`curl 'https://yaak.app/path?a=aaa&b=bbb#section'`].join(' \\n '));
});
test('Exports POST with url form data', async () => {
expect(
await convertToCurl({
url: 'https://yaak.app',
method: 'POST',
bodyType: 'application/x-www-form-urlencoded',
body: {
form: [
{ name: 'a', value: 'aaa' },
{ name: 'b', value: 'bbb', enabled: true },
{ name: 'c', value: 'ccc', enabled: false },
],
},
}),
).toEqual(
[`curl -X POST 'https://yaak.app'`, `--data 'a=aaa'`, `--data 'b=bbb'`].join(' \\\n '),
);
});
test('Exports POST with GraphQL data', async () => {
expect(
await convertToCurl({
url: 'https://yaak.app',
method: 'POST',
bodyType: 'graphql',
body: {
query: '{foo,bar}',
variables: '{"a": "aaa", "b": "bbb"}',
},
}),
).toEqual(
[
`curl -X POST 'https://yaak.app'`,
`--data '{"query":"{foo,bar}","variables":{"a":"aaa","b":"bbb"}}'`,
].join(' \\\n '),
);
});
test('Exports POST with GraphQL data no variables', async () => {
expect(
await convertToCurl({
url: 'https://yaak.app',
method: 'POST',
bodyType: 'graphql',
body: {
query: '{foo,bar}',
},
}),
).toEqual(
[`curl -X POST 'https://yaak.app'`, `--data '{"query":"{foo,bar}"}'`].join(' \\\n '),
);
});
test('Exports PUT with multipart form', async () => {
expect(
await convertToCurl({
url: 'https://yaak.app',
method: 'PUT',
bodyType: 'multipart/form-data',
body: {
form: [
{ name: 'a', value: 'aaa' },
{ name: 'b', value: 'bbb', enabled: true },
{ name: 'c', value: 'ccc', enabled: false },
{ name: 'f', file: '/foo/bar.png', contentType: 'image/png' },
],
},
}),
).toEqual(
[
`curl -X PUT 'https://yaak.app'`,
`--form 'a=aaa'`,
`--form 'b=bbb'`,
'--form f=@/foo/bar.png;type=image/png',
].join(' \\\n '),
);
});
test('Exports JSON body', async () => {
expect(
await convertToCurl({
url: 'https://yaak.app',
method: 'POST',
bodyType: 'application/json',
body: {
text: `{"foo":"bar's"}`,
},
headers: [{ name: 'Content-Type', value: 'application/json' }],
}),
).toEqual(
[
`curl -X POST 'https://yaak.app'`,
`--header 'Content-Type: application/json'`,
`--data '{"foo":"bar\\'s"}'`,
].join(' \\\n '),
);
});
test('Exports multi-line JSON body', async () => {
expect(
await convertToCurl({
url: 'https://yaak.app',
method: 'POST',
bodyType: 'application/json',
body: {
text: `{"foo":"bar",\n"baz":"qux"}`,
},
headers: [{ name: 'Content-Type', value: 'application/json' }],
}),
).toEqual(
[
`curl -X POST 'https://yaak.app'`,
`--header 'Content-Type: application/json'`,
`--data '{"foo":"bar",\n"baz":"qux"}'`,
].join(' \\\n '),
);
});
test('Exports headers', async () => {
expect(
await convertToCurl({
headers: [
{ name: 'a', value: 'aaa' },
{ name: 'b', value: 'bbb', enabled: true },
{ name: 'c', value: 'ccc', enabled: false },
],
}),
).toEqual([`curl ''`, `--header 'a: aaa'`, `--header 'b: bbb'`].join(' \\\n '));
});
test('Basic auth', async () => {
expect(
await convertToCurl({
url: 'https://yaak.app',
authenticationType: 'basic',
authentication: {
username: 'user',
password: 'pass',
},
}),
).toEqual([`curl 'https://yaak.app'`, `--user 'user:pass'`].join(' \\\n '));
});
test('Basic auth disabled', async () => {
expect(
await convertToCurl({
url: 'https://yaak.app',
authenticationType: 'basic',
authentication: {
disabled: true,
username: 'user',
password: 'pass',
},
}),
).toEqual([`curl 'https://yaak.app'`].join(' \\\n '));
});
test('Broken basic auth', async () => {
expect(
await convertToCurl({
url: 'https://yaak.app',
authenticationType: 'basic',
authentication: {},
}),
).toEqual([`curl 'https://yaak.app'`, `--user ':'`].join(' \\\n '));
});
test('Digest auth', async () => {
expect(
await convertToCurl({
url: 'https://yaak.app',
authenticationType: 'digest',
authentication: {
username: 'user',
password: 'pass',
},
}),
).toEqual([`curl 'https://yaak.app'`, `--digest --user 'user:pass'`].join(' \\\n '));
});
test('Bearer auth', async () => {
expect(
await convertToCurl({
url: 'https://yaak.app',
authenticationType: 'bearer',
authentication: {
token: 'tok',
},
}),
).toEqual([`curl 'https://yaak.app'`, `--header 'Authorization: Bearer tok'`].join(' \\\n '));
});
test('Bearer auth with custom prefix', async () => {
expect(
await convertToCurl({
url: 'https://yaak.app',
authenticationType: 'bearer',
authentication: {
token: 'abc123',
prefix: 'Token',
},
}),
).toEqual(
[`curl 'https://yaak.app'`, `--header 'Authorization: Token abc123'`].join(' \\\n '),
);
});
test('Bearer auth with empty prefix', async () => {
expect(
await convertToCurl({
url: 'https://yaak.app',
authenticationType: 'bearer',
authentication: {
token: 'xyz789',
prefix: '',
},
}),
).toEqual([`curl 'https://yaak.app'`, `--header 'Authorization: xyz789'`].join(' \\\n '));
});
test('Broken bearer auth', async () => {
expect(
await convertToCurl({
url: 'https://yaak.app',
authenticationType: 'bearer',
authentication: {
username: 'user',
password: 'pass',
},
}),
).toEqual([`curl 'https://yaak.app'`, `--header 'Authorization: Bearer'`].join(' \\\n '));
});
test('AWS v4 auth', async () => {
expect(
await convertToCurl({
url: 'https://yaak.app',
authenticationType: 'auth-aws-sig-v4',
authentication: {
accessKeyId: 'ak',
secretAccessKey: 'sk',
sessionToken: '',
region: 'us-east-1',
service: 's3',
},
}),
).toEqual(
[`curl 'https://yaak.app'`, '--aws-sigv4 aws:amz:us-east-1:s3', `--user 'ak:sk'`].join(
' \\\n ',
),
);
});
test('AWS v4 auth with session', async () => {
expect(
await convertToCurl({
url: 'https://yaak.app',
authenticationType: 'auth-aws-sig-v4',
authentication: {
accessKeyId: 'ak',
secretAccessKey: 'sk',
sessionToken: 'st',
region: 'us-east-1',
service: 's3',
},
}),
).toEqual(
[
`curl 'https://yaak.app'`,
'--aws-sigv4 aws:amz:us-east-1:s3',
`--user 'ak:sk'`,
`--header 'X-Amz-Security-Token: st'`,
].join(' \\\n '),
);
});
test('API key auth header', async () => {
expect(
await convertToCurl({
url: 'https://yaak.app',
authenticationType: 'apikey',
authentication: {
location: 'header',
key: 'X-Header',
value: 'my-token',
},
}),
).toEqual([`curl 'https://yaak.app'`, `--header 'X-Header: my-token'`].join(' \\\n '));
});
test('API key auth header query', async () => {
expect(
await convertToCurl({
url: 'https://yaak.app?hi=there',
urlParameters: [{ name: 'param', value: 'hi' }],
authenticationType: 'apikey',
authentication: {
location: 'query',
key: 'foo',
value: 'bar',
},
}),
).toEqual([`curl 'https://yaak.app?hi=there&param=hi&foo=bar'`].join(' \\\n '));
});
test('API key auth header query with params', async () => {
expect(
await convertToCurl({
url: 'https://yaak.app',
urlParameters: [{ name: 'param', value: 'hi' }],
authenticationType: 'apikey',
authentication: {
location: 'query',
key: 'foo',
value: 'bar',
},
}),
).toEqual([`curl 'https://yaak.app?param=hi&foo=bar'`].join(' \\\n '));
});
test('API key auth header default', async () => {
expect(
await convertToCurl({
url: 'https://yaak.app',
authenticationType: 'apikey',
authentication: {
location: 'header',
},
}),
).toEqual([`curl 'https://yaak.app'`, `--header 'X-Api-Key: '`].join(' \\\n '));
});
test('API key auth query', async () => {
expect(
await convertToCurl({
url: 'https://yaak.app',
authenticationType: 'apikey',
authentication: {
location: 'query',
key: 'foo',
value: 'bar-baz',
},
}),
).toEqual([`curl 'https://yaak.app?foo=bar-baz'`].join(' \\\n '));
});
test('API key auth query with existing', async () => {
expect(
await convertToCurl({
url: 'https://yaak.app?foo=bar&baz=qux',
authenticationType: 'apikey',
authentication: {
location: 'query',
key: 'hi',
value: 'there',
},
}),
).toEqual([`curl 'https://yaak.app?foo=bar&baz=qux&hi=there'`].join(' \\\n '));
});
test('API key auth query default', async () => {
expect(
await convertToCurl({
url: 'https://yaak.app?foo=bar&baz=qux',
authenticationType: 'apikey',
authentication: {
location: 'query',
},
}),
).toEqual([`curl 'https://yaak.app?foo=bar&baz=qux&token='`].join(' \\\n '));
});
test('Stale body data', async () => {
expect(
await convertToCurl({
url: 'https://yaak.app',
bodyType: 'none',
body: {
text: 'ignore me',
},
}),
).toEqual([`curl 'https://yaak.app'`].join(' \\\n '));
});
});

View File

@@ -0,0 +1,3 @@
{
"extends": "../../tsconfig.json"
}

View File

@@ -0,0 +1,76 @@
# Copy as gRPCurl
An HTTP request action plugin that converts gRPC requests
into [gRPCurl](https://github.com/fullstorydev/grpcurl) commands, enabling easy sharing,
debugging, and execution of gRPC calls outside Yaak.
![Screenshot of context menu](screenshot.png)
## Overview
This plugin adds a "Copy as gRPCurl" action to gRPC requests, converting any gRPC request
into its equivalent executable command. This is useful for debugging gRPC services,
sharing requests with team members, or executing gRPC calls in terminal environments where
`grpcurl` is available.
## How It Works
The plugin analyzes your gRPC request configuration and generates a properly formatted
`grpcurl` command that includes:
- gRPC service and method names
- Server address and port
- Request message data (JSON format)
- Metadata (headers)
- Authentication credentials
- Protocol buffer definitions
## Usage
1. Configure a gRPC request as usual in Yaak
2. Right-click on the request sidebar item
3. Select "Copy as gRPCurl" from the available actions
4. The command is copied to your clipboard
5. Share or execute the command
## Generated gRPCurl Examples
### Simple Unary Call
```bash
grpcurl -plaintext \
-d '{"name": "John Doe"}' \
localhost:9090 \
user.UserService/GetUser
```
### Call with Metadata
```bash
grpcurl -plaintext \
-H "authorization: Bearer my-token" \
-H "x-api-version: v1" \
-d '{"user_id": "12345"}' \
api.example.com:443 \
user.UserService/GetUserProfile
```
### Call with TLS
```bash
grpcurl \
-d '{"query": "search term"}' \
secure-api.example.com:443 \
search.SearchService/Search
```
### Call with Proto Files
```bash
grpcurl -import-path /path/to/protos \
-proto /other/path/to/user.proto \
-d '{"email": "user@example.com"}' \
localhost:9090 \
user.UserService/CreateUser
```

View File

@@ -0,0 +1,17 @@
{
"name": "@yaak/action-copy-grpcurl",
"displayName": "Copy as gRPCurl",
"description": "Copy gRPC request as a grpcurl command",
"repository": {
"type": "git",
"url": "https://github.com/mountain-loop/yaak.git",
"directory": "plugins/action-copy-grpcurl"
},
"private": true,
"version": "0.1.0",
"scripts": {
"build": "yaakcli build",
"dev": "yaakcli dev",
"test": "vitest --run tests"
}
}

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 492 KiB

View File

@@ -0,0 +1,155 @@
import path from 'node:path';
import type { GrpcRequest, PluginDefinition } from '@yaakapp/api';
const NEWLINE = '\\\n ';
export const plugin: PluginDefinition = {
grpcRequestActions: [
{
label: 'Copy as gRPCurl',
icon: 'copy',
async onSelect(ctx, args) {
const rendered_request = await ctx.grpcRequest.render({
grpcRequest: args.grpcRequest,
purpose: 'preview',
});
const data = await convert(rendered_request, args.protoFiles);
await ctx.clipboard.copyText(data);
await ctx.toast.show({
message: 'Command copied to clipboard',
icon: 'copy',
color: 'success',
});
},
},
],
};
export async function convert(request: Partial<GrpcRequest>, allProtoFiles: string[]) {
const xs = ['grpcurl'];
if (request.url?.startsWith('http://')) {
xs.push('-plaintext');
}
const protoIncludes = allProtoFiles.filter((f) => !f.endsWith('.proto'));
const protoFiles = allProtoFiles.filter((f) => f.endsWith('.proto'));
const inferredIncludes = new Set<string>();
for (const f of protoFiles) {
const protoDir = findParentProtoDir(f);
if (protoDir) {
inferredIncludes.add(protoDir);
} else {
inferredIncludes.add(path.posix.join(f, '..'));
inferredIncludes.add(path.posix.join(f, '..', '..'));
}
}
for (const f of protoIncludes) {
xs.push('-import-path', quote(f));
xs.push(NEWLINE);
}
for (const f of inferredIncludes.values()) {
xs.push('-import-path', quote(f));
xs.push(NEWLINE);
}
for (const f of protoFiles) {
xs.push('-proto', quote(f));
xs.push(NEWLINE);
}
// Add headers
for (const h of (request.metadata ?? []).filter(onlyEnabled)) {
xs.push('-H', quote(`${h.name}: ${h.value}`));
xs.push(NEWLINE);
}
// Add basic authentication
if (request.authentication?.disabled !== true) {
if (request.authenticationType === 'basic') {
const user = request.authentication?.username ?? '';
const pass = request.authentication?.password ?? '';
const encoded = btoa(`${user}:${pass}`);
xs.push('-H', quote(`Authorization: Basic ${encoded}`));
xs.push(NEWLINE);
} else if (request.authenticationType === 'bearer') {
// Add bearer authentication
xs.push('-H', quote(`Authorization: Bearer ${request.authentication?.token ?? ''}`));
xs.push(NEWLINE);
} else if (request.authenticationType === 'apikey') {
if (request.authentication?.location === 'query') {
const sep = request.url?.includes('?') ? '&' : '?';
request.url = [
request.url,
sep,
encodeURIComponent(request.authentication?.key ?? 'token'),
'=',
encodeURIComponent(request.authentication?.value ?? ''),
].join('');
} else {
xs.push(
'-H',
quote(
`${request.authentication?.key ?? 'X-Api-Key'}: ${request.authentication?.value ?? ''}`,
),
);
}
xs.push(NEWLINE);
}
}
// Add form params
if (request.message) {
xs.push('-d', `${quote(JSON.stringify(JSON.parse(request.message)))}`);
xs.push(NEWLINE);
}
// Add the server address
if (request.url) {
const server = request.url.replace(/^https?:\/\//, ''); // remove protocol
xs.push(server);
xs.push(NEWLINE);
}
// Add service + method
if (request.service && request.method) {
xs.push(`${request.service}/${request.method}`);
xs.push(NEWLINE);
}
// Remove trailing newline
if (xs[xs.length - 1] === NEWLINE) {
xs.splice(xs.length - 1, 1);
}
return xs.join(' ');
}
function quote(arg: string): string {
const escaped = arg.replace(/'/g, "\\'");
return `'${escaped}'`;
}
function onlyEnabled(v: { name?: string; enabled?: boolean }): boolean {
return v.enabled !== false && !!v.name;
}
function findParentProtoDir(startPath: string): string | null {
let dir = path.resolve(startPath);
while (true) {
if (path.basename(dir) === 'proto') {
return dir;
}
const parent = path.dirname(dir);
if (parent === dir) {
return null; // Reached root
}
dir = parent;
}
}

View File

@@ -0,0 +1,159 @@
import { describe, expect, test } from 'vitest';
import { convert } from '../src';
describe('exporter-curl', () => {
test('Simple example', async () => {
expect(
await convert(
{
url: 'https://yaak.app',
},
[],
),
).toEqual(['grpcurl yaak.app'].join(' \\\n '));
});
test('Basic metadata', async () => {
expect(
await convert(
{
url: 'https://yaak.app',
metadata: [
{ name: 'aaa', value: 'AAA' },
{ enabled: true, name: 'bbb', value: 'BBB' },
{ enabled: false, name: 'disabled', value: 'ddd' },
],
},
[],
),
).toEqual([`grpcurl -H 'aaa: AAA'`, `-H 'bbb: BBB'`, 'yaak.app'].join(' \\\n '));
});
test('Basic auth', async () => {
expect(
await convert(
{
url: 'https://yaak.app',
authenticationType: 'basic',
authentication: {
username: 'user',
password: 'pass',
},
},
[],
),
).toEqual([`grpcurl -H 'Authorization: Basic dXNlcjpwYXNz'`, 'yaak.app'].join(' \\\n '));
});
test('API key auth', async () => {
expect(
await convert(
{
url: 'https://yaak.app',
authenticationType: 'apikey',
authentication: {
key: 'X-Token',
value: 'tok',
},
},
[],
),
).toEqual([`grpcurl -H 'X-Token: tok'`, 'yaak.app'].join(' \\\n '));
});
test('API key auth', async () => {
expect(
await convert(
{
url: 'https://yaak.app',
authenticationType: 'apikey',
authentication: {
location: 'query',
key: 'token',
value: 'tok 1',
},
},
[],
),
).toEqual(['grpcurl', 'yaak.app?token=tok%201'].join(' \\\n '));
});
test('Single proto file', async () => {
expect(await convert({ url: 'https://yaak.app' }, ['/foo/bar/baz.proto'])).toEqual(
[
`grpcurl -import-path '/foo/bar'`,
`-import-path '/foo'`,
`-proto '/foo/bar/baz.proto'`,
'yaak.app',
].join(' \\\n '),
);
});
test('Multiple proto files, same dir', async () => {
expect(
await convert({ url: 'https://yaak.app' }, ['/foo/bar/aaa.proto', '/foo/bar/bbb.proto']),
).toEqual(
[
`grpcurl -import-path '/foo/bar'`,
`-import-path '/foo'`,
`-proto '/foo/bar/aaa.proto'`,
`-proto '/foo/bar/bbb.proto'`,
'yaak.app',
].join(' \\\n '),
);
});
test('Multiple proto files, different dir', async () => {
expect(
await convert({ url: 'https://yaak.app' }, ['/aaa/bbb/ccc.proto', '/xxx/yyy/zzz.proto']),
).toEqual(
[
`grpcurl -import-path '/aaa/bbb'`,
`-import-path '/aaa'`,
`-import-path '/xxx/yyy'`,
`-import-path '/xxx'`,
`-proto '/aaa/bbb/ccc.proto'`,
`-proto '/xxx/yyy/zzz.proto'`,
'yaak.app',
].join(' \\\n '),
);
});
test('Single include dir', async () => {
expect(await convert({ url: 'https://yaak.app' }, ['/aaa/bbb'])).toEqual(
[`grpcurl -import-path '/aaa/bbb'`, 'yaak.app'].join(' \\\n '),
);
});
test('Multiple include dir', async () => {
expect(await convert({ url: 'https://yaak.app' }, ['/aaa/bbb', '/xxx/yyy'])).toEqual(
[`grpcurl -import-path '/aaa/bbb'`, `-import-path '/xxx/yyy'`, 'yaak.app'].join(' \\\n '),
);
});
test('Mixed proto and dirs', async () => {
expect(
await convert({ url: 'https://yaak.app' }, ['/aaa/bbb', '/xxx/yyy', '/foo/bar.proto']),
).toEqual(
[
`grpcurl -import-path '/aaa/bbb'`,
`-import-path '/xxx/yyy'`,
`-import-path '/foo'`,
`-import-path '/'`,
`-proto '/foo/bar.proto'`,
'yaak.app',
].join(' \\\n '),
);
});
test('Sends data', async () => {
expect(
await convert(
{
url: 'https://yaak.app',
message: JSON.stringify({ foo: 'bar', baz: 1.0 }, null, 2),
},
['/foo.proto'],
),
).toEqual(
[
`grpcurl -import-path '/'`,
`-proto '/foo.proto'`,
`-d '{"foo":"bar","baz":1}'`,
'yaak.app',
].join(' \\\n '),
);
});
});

View File

@@ -0,0 +1,3 @@
{
"extends": "../../tsconfig.json"
}

View File

@@ -0,0 +1,16 @@
{
"name": "@yaak/auth-apikey",
"displayName": "API Key Authentication",
"description": "Authenticate requests using an API key",
"repository": {
"type": "git",
"url": "https://github.com/mountain-loop/yaak.git",
"directory": "plugins/auth-apikey"
},
"private": true,
"version": "0.1.0",
"scripts": {
"build": "yaakcli build",
"dev": "yaakcli dev"
}
}

View File

@@ -0,0 +1,54 @@
import type { PluginDefinition } from '@yaakapp/api';
export const plugin: PluginDefinition = {
authentication: {
name: 'apikey',
label: 'API Key',
shortLabel: 'API Key',
args: [
{
type: 'select',
name: 'location',
label: 'Behavior',
defaultValue: 'header',
options: [
{ label: 'Insert Header', value: 'header' },
{ label: 'Append Query Parameter', value: 'query' },
],
},
{
type: 'text',
name: 'key',
label: 'Key',
dynamic: (_ctx, { values }) => {
return values.location === 'query'
? {
label: 'Parameter Name',
description: 'The name of the query parameter to add to the request',
}
: {
label: 'Header Name',
description: 'The name of the header to add to the request',
};
},
},
{
type: 'text',
name: 'value',
label: 'API Key',
optional: true,
password: true,
},
],
async onApply(_ctx, { values }) {
const key = String(values.key ?? '');
const value = String(values.value ?? '');
const location = String(values.location);
if (location === 'query') {
return { setQueryParameters: [{ name: key, value }] };
}
return { setHeaders: [{ name: key, value }] };
},
},
};

View File

@@ -0,0 +1,3 @@
{
"extends": "../../tsconfig.json"
}

View File

@@ -0,0 +1,49 @@
# AWS Signature Version 4 Auth
A plugin for authenticating AWS-compatible requests using the
[AWS Signature Version 4 signing process](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html).
This enables secure, signed requests to AWS services (or any S3-compatible APIs like
Cloudflare R2).
![Screenshot of AWS SigV4 UI](screenshot.png)
## Overview
This plugin provides AWS Signature authentication for API requests in Yaak. SigV4 is used
by nearly all AWS APIs to verify the authenticity and integrity of requests using
cryptographic signatures.
With this plugin, you can securely sign requests to AWS services such as S3, STS, Lambda,
API Gateway, DynamoDB, and more. You can also authenticate against S3-compatible services
like **Cloudflare R2**, **MinIO**, or **Wasabi**.
## How AWS Signature Version 4 Works
SigV4 signs requests by creating a hash of key request components (method, URL, headers,
and optionally the payload) using your AWS credentials. The resulting HMAC signature is
added in the `Authorization` header along with credential scope metadata.
Example header:
```
Authorization: AWS4-HMAC-SHA256 Credential=AKIA…/20251011/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-date, Signature=abcdef123456…
```
Each request must include a timestamp (`X-Amz-Date`) and may include a session token if
using temporary credentials.
## Configuration
The plugin presents the following fields:
- **Access Key ID** Your AWS access key identifier
- **Secret Access Key** The secret associated with the access key
- **Session Token** *(optional)* Used for temporary or assumed-role credentials (treated as secret)
- **Region** AWS region (e.g., `us-east-1`)
- **Service** AWS service identifier (e.g., `sts`, `s3`, `execute-api`)
## Usage
1. Configure a request, folder, or workspace to use **AWS SigV4 Authentication**
2. Enter your AWS credentials and target service/region
3. The plugin will automatically sign outgoing requests with valid SigV4 headers

View File

@@ -0,0 +1,22 @@
{
"name": "@yaak/auth-aws",
"displayName": "AWS SigV4",
"description": "Authenticate requests using AWS SigV4 signing",
"repository": {
"type": "git",
"url": "https://github.com/mountain-loop/yaak.git",
"directory": "plugins/auth-aws"
},
"private": true,
"version": "0.1.0",
"scripts": {
"build": "yaakcli build",
"dev": "yaakcli dev"
},
"dependencies": {
"aws4": "^1.13.2"
},
"devDependencies": {
"@types/aws4": "^1.11.6"
}
}

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 790 KiB

View File

@@ -0,0 +1,88 @@
import { URL } from 'node:url';
import type { PluginDefinition } from '@yaakapp/api';
import type { CallHttpAuthenticationResponse } from '@yaakapp-internal/plugins';
import type { Request } from 'aws4';
import aws4 from 'aws4';
export const plugin: PluginDefinition = {
authentication: {
name: 'awsv4',
label: 'AWS Signature',
shortLabel: 'AWS v4',
args: [
{ name: 'accessKeyId', label: 'Access Key ID', type: 'text', password: true },
{
name: 'secretAccessKey',
label: 'Secret Access Key',
type: 'text',
password: true,
},
{
name: 'service',
label: 'Service Name',
type: 'text',
defaultValue: 'sts',
placeholder: 'sts',
description: 'The service that is receiving the request (sts, s3, sqs, ...)',
},
{
name: 'region',
label: 'Region',
type: 'text',
placeholder: 'us-east-1',
description: 'The region that is receiving the request (defaults to us-east-1)',
optional: true,
},
{
name: 'sessionToken',
label: 'Session Token',
type: 'text',
password: true,
optional: true,
description: 'Only required if you are using temporary credentials',
},
],
onApply(_ctx, { values, ...args }): CallHttpAuthenticationResponse {
const accessKeyId = String(values.accessKeyId || '');
const secretAccessKey = String(values.secretAccessKey || '');
const sessionToken = String(values.sessionToken || '') || undefined;
const url = new URL(args.url);
const headers: NonNullable<Request['headers']> = {};
for (const headerName of ['content-type', 'host', 'x-amz-date', 'x-amz-security-token']) {
const v = args.headers.find((h) => h.name.toLowerCase() === headerName);
if (v != null) {
headers[headerName] = v.value;
}
}
const signature = aws4.sign(
{
host: url.host,
method: args.method,
path: url.pathname + (url.search || ''),
service: String(values.service || 'sts'),
region: values.region ? String(values.region) : undefined,
headers,
doNotEncodePath: true,
},
{
accessKeyId,
secretAccessKey,
sessionToken,
},
);
if (signature.headers == null) {
return {};
}
return {
setHeaders: Object.entries(signature.headers)
.filter(([name]) => name !== 'content-type') // Don't add this because we already have it
.map(([name, value]) => ({ name, value: String(value || '') })),
};
},
},
};

View File

@@ -0,0 +1,3 @@
{
"extends": "../../tsconfig.json"
}

View File

@@ -0,0 +1,44 @@
# Basic Authentication
A simple Basic Authentication plugin that implements HTTP Basic Auth according
to [RFC 7617](https://datatracker.ietf.org/doc/html/rfc7617), enabling secure
authentication with username and password credentials.
![Screenshot of basic auth UI](screenshot.png)
## Overview
This plugin provides HTTP Basic Authentication support for API requests in Yaak. Basic
Auth is one of the most widely supported authentication methods, making it ideal for APIs
that require simple username/password authentication without the complexity of OAuth
flows.
## How Basic Authentication Works
Basic Authentication encodes your username and password credentials using Base64 encoding
and sends them in the `Authorization` header with each request. The format is:
```
Authorization: Basic <base64-encoded-credentials>
```
Where `<base64-encoded-credentials>` is the Base64 encoding of `username:password`.
## Configuration
The plugin presents two fields:
- **Username**: Username or user identifier
- **Password**: Password or authentication token
## Usage
1. Configure the request, folder, or workspace to use Basic Authentication
2. Enter your username and password in the authentication configuration
3. The plugin will automatically add the proper `Authorization` header to your requests
## Troubleshooting
- **401 Unauthorized**: Verify your username and password are correct
- **403 Forbidden**: Check if your account has the necessary permissions
- **Connection Issues**: Ensure you're using HTTPS for secure transmission

View File

@@ -0,0 +1,16 @@
{
"name": "@yaak/auth-basic",
"displayName": "Basic Authentication",
"description": "Authenticate requests using Basic Auth",
"repository": {
"type": "git",
"url": "https://github.com/mountain-loop/yaak.git",
"directory": "plugins/auth-basic"
},
"private": true,
"version": "0.1.0",
"scripts": {
"build": "yaakcli build",
"dev": "yaakcli dev"
}
}

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 289 KiB

View File

@@ -0,0 +1,29 @@
import type { PluginDefinition } from '@yaakapp/api';
export const plugin: PluginDefinition = {
authentication: {
name: 'basic',
label: 'Basic Auth',
shortLabel: 'Basic',
args: [
{
type: 'text',
name: 'username',
label: 'Username',
optional: true,
},
{
type: 'text',
name: 'password',
label: 'Password',
optional: true,
password: true,
},
],
async onApply(_ctx, { values }) {
const { username, password } = values;
const value = `Basic ${Buffer.from(`${username}:${password}`).toString('base64')}`;
return { setHeaders: [{ name: 'Authorization', value }] };
},
},
};

View File

@@ -0,0 +1,3 @@
{
"extends": "../../tsconfig.json"
}

View File

@@ -0,0 +1,47 @@
# Bearer Token Authentication Plugin
A Bearer Token authentication plugin for Yaak that
implements [RFC 6750](https://datatracker.ietf.org/doc/html/rfc6750), enabling secure API
access using tokens, API keys, and other bearer credentials.
![Screenshot of bearer auth UI](screenshot.png)
## Overview
This plugin provides Bearer Token authentication support for your API requests in Yaak.
Bearer Token authentication is widely used in modern APIs, especially those following REST
principles and OAuth 2.0 standards. It's the preferred method for APIs that issue access
tokens, API keys, or other bearer credentials.
## How Bearer Token Authentication Works
Bearer Token authentication sends your token in the `Authorization` header with each
request using the Bearer scheme:
```
Authorization: Bearer <your-token>
```
The token is transmitted as-is without any additional encoding, making it simple and
efficient for API authentication.
## Configuration
The plugin requires only one field:
- **Token**: Your bearer token, access token, API key, or other credential
- **Prefix**: The prefix to use for the Authorization header, which will be of the
format "<PREFIX> <TOKEN>"
## Usage
1. Configure the request, folder, or workspace to use Bearer Authentication
2. Enter the token and optional prefix in the authentication configuration
3. The plugin will automatically add the proper `Authorization` header to your requests
## Troubleshooting
- **401 Unauthorized**: Verify your token is valid and not expired
- **403 Forbidden**: Check if your token has the necessary permissions/scopes
- **Invalid Token Format**: Ensure you're using the complete token without truncation
- **Token Expiration**: Refresh or regenerate expired tokens

View File

@@ -0,0 +1,17 @@
{
"name": "@yaak/auth-bearer",
"displayName": "Bearer Authentication",
"description": "Authenticate requests using bearer authentication",
"repository": {
"type": "git",
"url": "https://github.com/mountain-loop/yaak.git",
"directory": "plugins/auth-bearer"
},
"private": true,
"version": "0.1.0",
"scripts": {
"build": "yaakcli build",
"dev": "yaakcli dev",
"test": "vitest --run tests"
}
}

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 434 KiB

View File

@@ -0,0 +1,39 @@
import type { PluginDefinition } from '@yaakapp/api';
import type { CallHttpAuthenticationRequest } from '@yaakapp-internal/plugins';
export const plugin: PluginDefinition = {
authentication: {
name: 'bearer',
label: 'Bearer Token',
shortLabel: 'Bearer',
args: [
{
type: 'text',
name: 'token',
label: 'Token',
optional: true,
password: true,
},
{
type: 'text',
name: 'prefix',
label: 'Prefix',
optional: true,
placeholder: '',
defaultValue: 'Bearer',
description:
'The prefix to use for the Authorization header, which will be of the format "<PREFIX> <TOKEN>".',
},
],
async onApply(_ctx, { values }) {
return { setHeaders: [generateAuthorizationHeader(values)] };
},
},
};
function generateAuthorizationHeader(values: CallHttpAuthenticationRequest['values']) {
const token = String(values.token || '').trim();
const prefix = String(values.prefix || '').trim();
const value = `${prefix} ${token}`.trim();
return { name: 'Authorization', value };
}

View File

@@ -0,0 +1,67 @@
import type { Context } from '@yaakapp/api';
import { describe, expect, test } from 'vitest';
import { plugin } from '../src';
const ctx = {} as Context;
describe('auth-bearer', () => {
test('No values', async () => {
expect(
await plugin.authentication?.onApply(ctx, {
values: {},
headers: [],
url: 'https://yaak.app',
method: 'POST',
contextId: '111',
}),
).toEqual({ setHeaders: [{ name: 'Authorization', value: '' }] });
});
test('Only token', async () => {
expect(
await plugin.authentication?.onApply(ctx, {
values: { token: 'my-token' },
headers: [],
url: 'https://yaak.app',
method: 'POST',
contextId: '111',
}),
).toEqual({ setHeaders: [{ name: 'Authorization', value: 'my-token' }] });
});
test('Only prefix', async () => {
expect(
await plugin.authentication?.onApply(ctx, {
values: { prefix: 'Hello' },
headers: [],
url: 'https://yaak.app',
method: 'POST',
contextId: '111',
}),
).toEqual({ setHeaders: [{ name: 'Authorization', value: 'Hello' }] });
});
test('Prefix and token', async () => {
expect(
await plugin.authentication?.onApply(ctx, {
values: { prefix: 'Hello', token: 'my-token' },
headers: [],
url: 'https://yaak.app',
method: 'POST',
contextId: '111',
}),
).toEqual({ setHeaders: [{ name: 'Authorization', value: 'Hello my-token' }] });
});
test('Extra spaces', async () => {
expect(
await plugin.authentication?.onApply(ctx, {
values: { prefix: '\t Hello ', token: ' \nmy-token ' },
headers: [],
url: 'https://yaak.app',
method: 'POST',
contextId: '111',
}),
).toEqual({ setHeaders: [{ name: 'Authorization', value: 'Hello my-token' }] });
});
});

View File

@@ -0,0 +1,3 @@
{
"extends": "../../tsconfig.json"
}

View File

@@ -0,0 +1,53 @@
# JSON Web Token (JWT) Authentication
A [JSON Web Token](https://datatracker.ietf.org/doc/html/rfc7519) (JWT) authentication
plugin that supports token generation, signing, and automatic header management.
![Screenshot of JWT auth UI](screenshot.png)
## Overview
This plugin provides JWT authentication support for API requests. JWT is a compact,
URL-safe means of representing claims between two parties, commonly used for
authentication and information exchange in modern web applications and APIs.
## How JWT Authentication Works
JWT authentication involves creating a signed token containing claims about the user or
application. The token is sent in the `Authorization` header:
```
Authorization: Bearer <jwt-token>
```
A JWT consists of three parts separated by dots:
- **Header**: Contains the token type and signing algorithm
- **Payload**: Contains the claims (user data, permissions, expiration, etc.)
- **Signature**: Ensures the token hasn't been tampered with
## Usage
1. Configure the request, folder, or workspace to use JWT Authentication
2. Set up your signing algorithm and secret/key
3. Configure the required claims for your JWT
4. The plugin will generate, sign, and include the JWT in your requests
## Common Use Cases
JWT authentication is commonly used for:
- **Microservices Authentication**: Service-to-service communication
- **API Gateway Integration**: Authenticating with API gateways
- **Single Sign-On (SSO)**: Sharing authentication across applications
- **Stateless Authentication**: No server-side session storage required
- **Mobile App APIs**: Secure authentication for mobile applications
- **Third-party Integrations**: Authenticating with external services
## Troubleshooting
- **Invalid Signature**: Check your secret/key and algorithm configuration
- **Token Expired**: Verify expiration time settings
- **Invalid Claims**: Ensure required claims are properly configured
- **Algorithm Mismatch**: Verify the algorithm matches what the API expects
- **Key Format Issues**: Ensure RSA keys are in the correct PEM format

View File

@@ -0,0 +1,22 @@
{
"name": "@yaak/auth-jwt",
"displayName": "JSON Web Tokens",
"description": "Authenticate requests using JSON web tokens (JWT)",
"repository": {
"type": "git",
"url": "https://github.com/mountain-loop/yaak.git",
"directory": "plugins/auth-jwt"
},
"private": true,
"version": "0.1.0",
"scripts": {
"build": "yaakcli build",
"dev": "yaakcli dev"
},
"dependencies": {
"jsonwebtoken": "^9.0.2"
},
"devDependencies": {
"@types/jsonwebtoken": "^9.0.7"
}
}

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 325 KiB

View File

@@ -0,0 +1,119 @@
import type { PluginDefinition } from '@yaakapp/api';
import jwt from 'jsonwebtoken';
const algorithms = [
'HS256',
'HS384',
'HS512',
'RS256',
'RS384',
'RS512',
'PS256',
'PS384',
'PS512',
'ES256',
'ES384',
'ES512',
'none',
] as const;
const defaultAlgorithm = algorithms[0];
export const plugin: PluginDefinition = {
authentication: {
name: 'jwt',
label: 'JWT Bearer',
shortLabel: 'JWT',
args: [
{
type: 'select',
name: 'algorithm',
label: 'Algorithm',
hideLabel: true,
defaultValue: defaultAlgorithm,
options: algorithms.map((value) => ({ label: value === 'none' ? 'None' : value, value })),
},
{
type: 'text',
name: 'secret',
label: 'Secret or Private Key',
password: true,
optional: true,
multiLine: true,
},
{
type: 'checkbox',
name: 'secretBase64',
label: 'Secret is base64 encoded',
},
{
type: 'select',
name: 'location',
label: 'Behavior',
defaultValue: 'header',
options: [
{ label: 'Insert Header', value: 'header' },
{ label: 'Append Query Parameter', value: 'query' },
],
},
{
type: 'text',
name: 'name',
label: 'Header Name',
defaultValue: 'Authorization',
optional: true,
dynamic(_ctx, args) {
if (args.values.location === 'query') {
return {
label: 'Parameter Name',
description: 'The name of the query parameter to add to the request',
};
}
return {
label: 'Header Name',
description: 'The name of the header to add to the request',
};
},
},
{
type: 'text',
name: 'headerPrefix',
label: 'Header Prefix',
optional: true,
defaultValue: 'Bearer',
dynamic(_ctx, args) {
if (args.values.location === 'query') {
return {
hidden: true,
};
}
},
},
{
type: 'editor',
name: 'payload',
label: 'Payload',
language: 'json',
defaultValue: '{\n "foo": "bar"\n}',
placeholder: '{ }',
},
],
async onApply(_ctx, { values }) {
const { algorithm, secret: _secret, secretBase64, payload } = values;
const secret = secretBase64 ? Buffer.from(`${_secret}`, 'base64') : `${_secret}`;
const token = jwt.sign(`${payload}`, secret, {
algorithm: algorithm as (typeof algorithms)[number],
});
if (values.location === 'query') {
const paramName = String(values.name || 'token');
const paramValue = String(values.value || '');
return { setQueryParameters: [{ name: paramName, value: paramValue }] };
}
const headerPrefix = values.headerPrefix != null ? values.headerPrefix : 'Bearer';
const headerName = String(values.name || 'Authorization');
const headerValue = `${headerPrefix} ${token}`.trim();
return { setHeaders: [{ name: headerName, value: headerValue }] };
},
},
};

View File

@@ -0,0 +1,3 @@
{
"extends": "../../tsconfig.json"
}

View File

@@ -0,0 +1,19 @@
{
"name": "@yaak/auth-ntlm",
"displayName": "NTLM Authentication",
"description": "Authenticate requests using NTLM authentication",
"repository": {
"type": "git",
"url": "https://github.com/mountain-loop/yaak.git",
"directory": "plugins/auth-ntlm"
},
"private": true,
"version": "0.1.0",
"scripts": {
"build": "yaakcli build",
"dev": "yaakcli dev"
},
"dependencies": {
"httpntlm": "^1.8.13"
}
}

View File

@@ -0,0 +1,87 @@
import type { PluginDefinition } from '@yaakapp/api';
import { ntlm } from 'httpntlm';
export const plugin: PluginDefinition = {
authentication: {
name: 'windows',
label: 'NTLM Auth',
shortLabel: 'NTLM',
args: [
{
type: 'banner',
color: 'info',
inputs: [
{
type: 'markdown',
content:
'NTLM is still in beta. Please submit any issues to [Feedback](https://yaak.app/feedback).',
},
],
},
{
type: 'text',
name: 'username',
label: 'Username',
optional: true,
},
{
type: 'text',
name: 'password',
label: 'Password',
optional: true,
password: true,
},
{
type: 'accordion',
label: 'Advanced',
inputs: [
{ name: 'domain', label: 'Domain', type: 'text', optional: true },
{ name: 'workstation', label: 'Workstation', type: 'text', optional: true },
],
},
],
async onApply(ctx, { values, method, url }) {
const username = values.username ? String(values.username) : undefined;
const password = values.password ? String(values.password) : undefined;
const domain = values.domain ? String(values.domain) : undefined;
const workstation = values.workstation ? String(values.workstation) : undefined;
const options = {
url,
username,
password,
workstation,
domain,
};
const type1 = ntlm.createType1Message(options);
const negotiateResponse = await ctx.httpRequest.send({
httpRequest: {
method,
url,
headers: [
{ name: 'Authorization', value: type1 },
{ name: 'Connection', value: 'keep-alive' },
],
},
});
const wwwAuthenticateHeader = negotiateResponse.headers.find(
(h) => h.name.toLowerCase() === 'www-authenticate',
);
if (!wwwAuthenticateHeader?.value) {
throw new Error('Unable to find www-authenticate response header for NTLM');
}
const type2 = ntlm.parseType2Message(wwwAuthenticateHeader.value, (err: Error | null) => {
if (err != null) throw err;
});
const type3 = ntlm.createType3Message(type2, options);
return { setHeaders: [{ name: 'Authorization', value: type3 }] };
},
},
};

Some files were not shown because too many files have changed in this diff Show More