rds_ssm_connect 1.8.0 → 1.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/connect.js +4 -4
- package/package.json +1 -1
- package/src/App.svelte +61 -2
- package/src/lib/ActiveConnections.svelte +9 -2
- package/src/lib/ConfirmDialog.svelte +13 -2
- package/src/lib/ConnectionForm.svelte +6 -3
- package/src/lib/PrerequisitesCheck.svelte +9 -2
- package/src/lib/SavedConnections.svelte +9 -2
- package/src/lib/SessionStatus.svelte +3 -0
- package/src/lib/Settings.svelte +25 -6
- package/src/lib/UpdateBanner.svelte +8 -1
- package/src-tauri/Cargo.lock +127 -147
- package/src-tauri/Cargo.toml +1 -1
- package/src-tauri/tauri.conf.json +1 -1
package/connect.js
CHANGED
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
} from './configLoader.js'
|
|
15
15
|
|
|
16
16
|
// Package info for version checking
|
|
17
|
-
const packageJson = { name: 'rds_ssm_connect', version: '1.8.
|
|
17
|
+
const packageJson = { name: 'rds_ssm_connect', version: '1.8.1' }
|
|
18
18
|
|
|
19
19
|
const execAsync = promisify(exec)
|
|
20
20
|
|
|
@@ -505,12 +505,12 @@ function getLocalPort(ENV, projectConfig) {
|
|
|
505
505
|
async function getConnectionCredentials(ENV, projectConfig) {
|
|
506
506
|
const { region, secretPrefix, database } = projectConfig
|
|
507
507
|
|
|
508
|
-
const secretsListCommand = `aws-vault exec ${ENV} -- aws secretsmanager list-secrets --region ${region} --query "SecretList[?
|
|
508
|
+
const secretsListCommand = `aws-vault exec ${ENV} -- aws secretsmanager list-secrets --region ${region} --query "SecretList[?contains(Name, '${secretPrefix}')].Name | [0]" --output text`
|
|
509
509
|
const SECRET_NAME = await runCommand(secretsListCommand)
|
|
510
510
|
|
|
511
511
|
if (!SECRET_NAME || SECRET_NAME === 'None') {
|
|
512
512
|
throw new Error(
|
|
513
|
-
`No secret found with name
|
|
513
|
+
`No secret found with name containing '${secretPrefix}'.`,
|
|
514
514
|
)
|
|
515
515
|
}
|
|
516
516
|
|
|
@@ -985,7 +985,7 @@ async function main() {
|
|
|
985
985
|
|
|
986
986
|
// Get RDS credentials from Secrets Manager
|
|
987
987
|
console.log('\n⏳ Getting credentials...')
|
|
988
|
-
const secretsListCommand = `aws-vault exec ${ENV} -- aws secretsmanager list-secrets --region ${region} --query "SecretList[?
|
|
988
|
+
const secretsListCommand = `aws-vault exec ${ENV} -- aws secretsmanager list-secrets --region ${region} --query "SecretList[?contains(Name, '${secretPrefix}')].Name | [0]" --output text`
|
|
989
989
|
const SECRET_NAME = await runCommand(secretsListCommand)
|
|
990
990
|
|
|
991
991
|
if (!SECRET_NAME || SECRET_NAME === 'None') {
|
package/package.json
CHANGED
package/src/App.svelte
CHANGED
|
@@ -95,6 +95,16 @@ async function initApp() {
|
|
|
95
95
|
loadingProjects = true
|
|
96
96
|
|
|
97
97
|
try {
|
|
98
|
+
// Wait for Tauri IPC bridge before importing modules
|
|
99
|
+
await withTimeout(
|
|
100
|
+
new Promise((resolve) => {
|
|
101
|
+
if (window.__TAURI_INTERNALS__) return resolve()
|
|
102
|
+
const id = setInterval(() => {
|
|
103
|
+
if (window.__TAURI_INTERNALS__) { clearInterval(id); resolve() }
|
|
104
|
+
}, 50)
|
|
105
|
+
}),
|
|
106
|
+
5000,
|
|
107
|
+
)
|
|
98
108
|
const [core, event, windowModule] = await withTimeout(
|
|
99
109
|
Promise.all([
|
|
100
110
|
import('@tauri-apps/api/core'),
|
|
@@ -672,6 +682,37 @@ const isAlreadySaved = $derived(
|
|
|
672
682
|
</main>
|
|
673
683
|
|
|
674
684
|
<style>
|
|
685
|
+
:global(:root) {
|
|
686
|
+
--glass-bg: rgba(255, 255, 255, 0.04);
|
|
687
|
+
--glass-bg-hover: rgba(255, 255, 255, 0.07);
|
|
688
|
+
--glass-border: rgba(255, 255, 255, 0.08);
|
|
689
|
+
--glass-border-hover: rgba(255, 255, 255, 0.14);
|
|
690
|
+
--glass-blur: blur(16px) saturate(1.8);
|
|
691
|
+
--glass-blur-heavy: blur(32px) saturate(1.8);
|
|
692
|
+
--glass-inner-glow: inset 0 1px 0 rgba(255, 255, 255, 0.06);
|
|
693
|
+
--glass-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
|
|
694
|
+
--press-scale: scale(0.97);
|
|
695
|
+
--transition-fast: 0.15s ease;
|
|
696
|
+
--transition-normal: 0.2s ease;
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
@media (prefers-reduced-transparency) {
|
|
700
|
+
:global(:root) {
|
|
701
|
+
--glass-bg: rgba(30, 30, 50, 0.95);
|
|
702
|
+
--glass-bg-hover: rgba(40, 40, 60, 0.95);
|
|
703
|
+
--glass-blur: none;
|
|
704
|
+
--glass-blur-heavy: none;
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
@media (prefers-reduced-motion) {
|
|
709
|
+
:global(:root) {
|
|
710
|
+
--press-scale: none;
|
|
711
|
+
--transition-fast: 0s;
|
|
712
|
+
--transition-normal: 0s;
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
|
|
675
716
|
:global(*) {
|
|
676
717
|
box-sizing: border-box;
|
|
677
718
|
}
|
|
@@ -793,9 +834,12 @@ const isAlreadySaved = $derived(
|
|
|
793
834
|
flex-direction: column;
|
|
794
835
|
gap: 12px;
|
|
795
836
|
padding: 16px;
|
|
796
|
-
background:
|
|
837
|
+
background: var(--glass-bg);
|
|
838
|
+
-webkit-backdrop-filter: var(--glass-blur);
|
|
839
|
+
backdrop-filter: var(--glass-blur);
|
|
797
840
|
border: 1px solid rgba(251, 191, 36, 0.2);
|
|
798
841
|
border-radius: 12px;
|
|
842
|
+
box-shadow: var(--glass-inner-glow);
|
|
799
843
|
animation: fadeIn 0.3s ease-out;
|
|
800
844
|
}
|
|
801
845
|
|
|
@@ -847,6 +891,10 @@ const isAlreadySaved = $derived(
|
|
|
847
891
|
background: #fcd34d;
|
|
848
892
|
}
|
|
849
893
|
|
|
894
|
+
.btn-save:active {
|
|
895
|
+
transform: var(--press-scale);
|
|
896
|
+
}
|
|
897
|
+
|
|
850
898
|
.btn-dismiss-save {
|
|
851
899
|
padding: 6px 14px;
|
|
852
900
|
font-size: 0.8rem;
|
|
@@ -869,9 +917,12 @@ const isAlreadySaved = $derived(
|
|
|
869
917
|
align-items: flex-start;
|
|
870
918
|
gap: 12px;
|
|
871
919
|
padding: 16px;
|
|
872
|
-
background:
|
|
920
|
+
background: var(--glass-bg);
|
|
921
|
+
-webkit-backdrop-filter: var(--glass-blur);
|
|
922
|
+
backdrop-filter: var(--glass-blur);
|
|
873
923
|
border: 1px solid rgba(239, 68, 68, 0.2);
|
|
874
924
|
border-radius: 16px;
|
|
925
|
+
box-shadow: var(--glass-inner-glow);
|
|
875
926
|
animation: slideIn 0.3s ease-out;
|
|
876
927
|
}
|
|
877
928
|
|
|
@@ -965,6 +1016,10 @@ const isAlreadySaved = $derived(
|
|
|
965
1016
|
color: #a1a1aa;
|
|
966
1017
|
}
|
|
967
1018
|
|
|
1019
|
+
.settings-btn:active {
|
|
1020
|
+
transform: var(--press-scale);
|
|
1021
|
+
}
|
|
1022
|
+
|
|
968
1023
|
.check-updates-btn {
|
|
969
1024
|
padding: 6px 12px;
|
|
970
1025
|
font-size: 0.7rem;
|
|
@@ -983,6 +1038,10 @@ const isAlreadySaved = $derived(
|
|
|
983
1038
|
color: #a1a1aa;
|
|
984
1039
|
}
|
|
985
1040
|
|
|
1041
|
+
.check-updates-btn:active:not(:disabled) {
|
|
1042
|
+
transform: var(--press-scale);
|
|
1043
|
+
}
|
|
1044
|
+
|
|
986
1045
|
.check-updates-btn:disabled {
|
|
987
1046
|
opacity: 0.7;
|
|
988
1047
|
cursor: wait;
|
|
@@ -135,10 +135,13 @@ function handleHeaderKeydown(e, connectionId) {
|
|
|
135
135
|
|
|
136
136
|
<style>
|
|
137
137
|
.active-connections-card {
|
|
138
|
-
background:
|
|
139
|
-
|
|
138
|
+
background: var(--glass-bg);
|
|
139
|
+
-webkit-backdrop-filter: var(--glass-blur);
|
|
140
|
+
backdrop-filter: var(--glass-blur);
|
|
141
|
+
border: 1px solid rgba(16, 185, 129, 0.3);
|
|
140
142
|
border-radius: 20px;
|
|
141
143
|
padding: 24px;
|
|
144
|
+
box-shadow: var(--glass-inner-glow);
|
|
142
145
|
}
|
|
143
146
|
|
|
144
147
|
.card-header {
|
|
@@ -195,6 +198,10 @@ function handleHeaderKeydown(e, connectionId) {
|
|
|
195
198
|
border-color: rgba(239, 68, 68, 0.3);
|
|
196
199
|
}
|
|
197
200
|
|
|
201
|
+
.btn-disconnect-all:active {
|
|
202
|
+
transform: var(--press-scale);
|
|
203
|
+
}
|
|
204
|
+
|
|
198
205
|
.connections-list {
|
|
199
206
|
display: flex;
|
|
200
207
|
flex-direction: column;
|
|
@@ -57,12 +57,15 @@ function handleKeydown(e) {
|
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
.confirm-dialog {
|
|
60
|
-
background:
|
|
61
|
-
|
|
60
|
+
background: rgba(26, 26, 46, 0.85);
|
|
61
|
+
-webkit-backdrop-filter: var(--glass-blur-heavy);
|
|
62
|
+
backdrop-filter: var(--glass-blur-heavy);
|
|
63
|
+
border: 1px solid var(--glass-border);
|
|
62
64
|
border-radius: 16px;
|
|
63
65
|
padding: 24px;
|
|
64
66
|
max-width: 380px;
|
|
65
67
|
width: 100%;
|
|
68
|
+
box-shadow: var(--glass-inner-glow), var(--glass-shadow);
|
|
66
69
|
animation: slideUp 0.2s ease-out;
|
|
67
70
|
}
|
|
68
71
|
|
|
@@ -108,6 +111,10 @@ function handleKeydown(e) {
|
|
|
108
111
|
color: #a1a1aa;
|
|
109
112
|
}
|
|
110
113
|
|
|
114
|
+
.btn-cancel:active {
|
|
115
|
+
transform: var(--press-scale);
|
|
116
|
+
}
|
|
117
|
+
|
|
111
118
|
.btn-confirm {
|
|
112
119
|
padding: 10px 18px;
|
|
113
120
|
font-size: 0.875rem;
|
|
@@ -125,6 +132,10 @@ function handleKeydown(e) {
|
|
|
125
132
|
box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3);
|
|
126
133
|
}
|
|
127
134
|
|
|
135
|
+
.btn-confirm:active {
|
|
136
|
+
transform: var(--press-scale);
|
|
137
|
+
}
|
|
138
|
+
|
|
128
139
|
.btn-confirm.destructive {
|
|
129
140
|
background: #ef4444;
|
|
130
141
|
}
|
|
@@ -112,10 +112,13 @@ function handleConnectClick() {
|
|
|
112
112
|
|
|
113
113
|
<style>
|
|
114
114
|
.connection-card {
|
|
115
|
-
background:
|
|
116
|
-
|
|
115
|
+
background: var(--glass-bg);
|
|
116
|
+
-webkit-backdrop-filter: var(--glass-blur);
|
|
117
|
+
backdrop-filter: var(--glass-blur);
|
|
118
|
+
border: 1px solid var(--glass-border);
|
|
117
119
|
border-radius: 20px;
|
|
118
120
|
padding: 24px;
|
|
121
|
+
box-shadow: var(--glass-inner-glow);
|
|
119
122
|
}
|
|
120
123
|
|
|
121
124
|
.card-header {
|
|
@@ -247,7 +250,7 @@ function handleConnectClick() {
|
|
|
247
250
|
}
|
|
248
251
|
|
|
249
252
|
.btn-connect:active:not(:disabled) {
|
|
250
|
-
transform:
|
|
253
|
+
transform: var(--press-scale);
|
|
251
254
|
}
|
|
252
255
|
|
|
253
256
|
.btn-connect:disabled {
|
|
@@ -81,12 +81,15 @@ function handleKeydown(e) {
|
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
.modal-content {
|
|
84
|
-
background:
|
|
85
|
-
|
|
84
|
+
background: rgba(26, 26, 46, 0.85);
|
|
85
|
+
-webkit-backdrop-filter: var(--glass-blur-heavy);
|
|
86
|
+
backdrop-filter: var(--glass-blur-heavy);
|
|
87
|
+
border: 1px solid var(--glass-border);
|
|
86
88
|
border-radius: 20px;
|
|
87
89
|
padding: 28px;
|
|
88
90
|
max-width: 440px;
|
|
89
91
|
width: 100%;
|
|
92
|
+
box-shadow: var(--glass-inner-glow), var(--glass-shadow);
|
|
90
93
|
animation: slideUp 0.3s ease-out;
|
|
91
94
|
}
|
|
92
95
|
|
|
@@ -243,4 +246,8 @@ function handleKeydown(e) {
|
|
|
243
246
|
background: rgba(255, 255, 255, 0.1);
|
|
244
247
|
color: #e4e4e7;
|
|
245
248
|
}
|
|
249
|
+
|
|
250
|
+
.btn-continue:active {
|
|
251
|
+
transform: var(--press-scale);
|
|
252
|
+
}
|
|
246
253
|
</style>
|
|
@@ -211,10 +211,13 @@ function handleHeaderKeydown(e, activeConn, connectionId) {
|
|
|
211
211
|
|
|
212
212
|
<style>
|
|
213
213
|
.saved-connections-card {
|
|
214
|
-
background:
|
|
215
|
-
|
|
214
|
+
background: var(--glass-bg);
|
|
215
|
+
-webkit-backdrop-filter: var(--glass-blur);
|
|
216
|
+
backdrop-filter: var(--glass-blur);
|
|
217
|
+
border: 1px solid var(--glass-border);
|
|
216
218
|
border-radius: 20px;
|
|
217
219
|
padding: 24px;
|
|
220
|
+
box-shadow: var(--glass-inner-glow);
|
|
218
221
|
}
|
|
219
222
|
|
|
220
223
|
.card-header {
|
|
@@ -383,6 +386,10 @@ function handleHeaderKeydown(e, activeConn, connectionId) {
|
|
|
383
386
|
border-color: rgba(52, 211, 153, 0.3);
|
|
384
387
|
}
|
|
385
388
|
|
|
389
|
+
.btn-connect:active {
|
|
390
|
+
transform: var(--press-scale);
|
|
391
|
+
}
|
|
392
|
+
|
|
386
393
|
.btn-delete {
|
|
387
394
|
color: #71717a;
|
|
388
395
|
}
|
|
@@ -60,8 +60,11 @@ const statusConfig = $derived(STATUS_CONFIGS[connectionStatus])
|
|
|
60
60
|
justify-content: space-between;
|
|
61
61
|
padding: 12px 16px;
|
|
62
62
|
background: var(--status-bg);
|
|
63
|
+
-webkit-backdrop-filter: blur(12px) saturate(1.8);
|
|
64
|
+
backdrop-filter: blur(12px) saturate(1.8);
|
|
63
65
|
border: 1px solid var(--status-border);
|
|
64
66
|
border-radius: 12px;
|
|
67
|
+
box-shadow: var(--glass-inner-glow);
|
|
65
68
|
transition: background-color 0.3s ease, border-color 0.3s ease;
|
|
66
69
|
}
|
|
67
70
|
|
package/src/lib/Settings.svelte
CHANGED
|
@@ -656,8 +656,10 @@ onDestroy(() => {
|
|
|
656
656
|
}
|
|
657
657
|
|
|
658
658
|
.modal-content {
|
|
659
|
-
background:
|
|
660
|
-
|
|
659
|
+
background: rgba(26, 26, 46, 0.85);
|
|
660
|
+
-webkit-backdrop-filter: var(--glass-blur-heavy);
|
|
661
|
+
backdrop-filter: var(--glass-blur-heavy);
|
|
662
|
+
border: 1px solid var(--glass-border);
|
|
661
663
|
border-radius: 20px;
|
|
662
664
|
padding: 24px;
|
|
663
665
|
max-width: 560px;
|
|
@@ -665,6 +667,7 @@ onDestroy(() => {
|
|
|
665
667
|
max-height: 80vh;
|
|
666
668
|
display: flex;
|
|
667
669
|
flex-direction: column;
|
|
670
|
+
box-shadow: var(--glass-inner-glow), var(--glass-shadow);
|
|
668
671
|
animation: slideUp 0.3s ease-out;
|
|
669
672
|
}
|
|
670
673
|
|
|
@@ -726,6 +729,7 @@ onDestroy(() => {
|
|
|
726
729
|
|
|
727
730
|
.tab:hover {
|
|
728
731
|
color: #a1a1aa;
|
|
732
|
+
background: var(--glass-bg-hover);
|
|
729
733
|
}
|
|
730
734
|
|
|
731
735
|
.tab.active {
|
|
@@ -798,6 +802,10 @@ onDestroy(() => {
|
|
|
798
802
|
background: rgba(99, 102, 241, 0.15);
|
|
799
803
|
}
|
|
800
804
|
|
|
805
|
+
.btn-add:active {
|
|
806
|
+
transform: var(--press-scale);
|
|
807
|
+
}
|
|
808
|
+
|
|
801
809
|
.empty-state {
|
|
802
810
|
text-align: center;
|
|
803
811
|
padding: 40px 20px;
|
|
@@ -820,8 +828,8 @@ onDestroy(() => {
|
|
|
820
828
|
}
|
|
821
829
|
|
|
822
830
|
.profile-card {
|
|
823
|
-
background:
|
|
824
|
-
border: 1px solid
|
|
831
|
+
background: var(--glass-bg);
|
|
832
|
+
border: 1px solid var(--glass-border);
|
|
825
833
|
border-radius: 12px;
|
|
826
834
|
padding: 14px;
|
|
827
835
|
}
|
|
@@ -974,6 +982,10 @@ onDestroy(() => {
|
|
|
974
982
|
box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3);
|
|
975
983
|
}
|
|
976
984
|
|
|
985
|
+
.btn-save:active:not(:disabled) {
|
|
986
|
+
transform: var(--press-scale);
|
|
987
|
+
}
|
|
988
|
+
|
|
977
989
|
.btn-save:disabled {
|
|
978
990
|
opacity: 0.5;
|
|
979
991
|
cursor: not-allowed;
|
|
@@ -991,12 +1003,15 @@ onDestroy(() => {
|
|
|
991
1003
|
}
|
|
992
1004
|
|
|
993
1005
|
.edit-modal {
|
|
994
|
-
background:
|
|
995
|
-
|
|
1006
|
+
background: rgba(30, 30, 50, 0.9);
|
|
1007
|
+
-webkit-backdrop-filter: var(--glass-blur-heavy);
|
|
1008
|
+
backdrop-filter: var(--glass-blur-heavy);
|
|
1009
|
+
border: 1px solid var(--glass-border);
|
|
996
1010
|
border-radius: 16px;
|
|
997
1011
|
padding: 24px;
|
|
998
1012
|
width: 400px;
|
|
999
1013
|
max-width: 90%;
|
|
1014
|
+
box-shadow: var(--glass-inner-glow), var(--glass-shadow);
|
|
1000
1015
|
}
|
|
1001
1016
|
|
|
1002
1017
|
.edit-modal.project-modal {
|
|
@@ -1180,4 +1195,8 @@ onDestroy(() => {
|
|
|
1180
1195
|
background: rgba(255, 255, 255, 0.05);
|
|
1181
1196
|
color: #a1a1aa;
|
|
1182
1197
|
}
|
|
1198
|
+
|
|
1199
|
+
.btn-cancel:active {
|
|
1200
|
+
transform: var(--press-scale);
|
|
1201
|
+
}
|
|
1183
1202
|
</style>
|
|
@@ -53,9 +53,12 @@ function handleDismiss() {
|
|
|
53
53
|
align-items: center;
|
|
54
54
|
gap: 12px;
|
|
55
55
|
padding: 12px 16px;
|
|
56
|
-
background:
|
|
56
|
+
background: var(--glass-bg);
|
|
57
|
+
-webkit-backdrop-filter: var(--glass-blur);
|
|
58
|
+
backdrop-filter: var(--glass-blur);
|
|
57
59
|
border: 1px solid rgba(99, 102, 241, 0.3);
|
|
58
60
|
border-radius: 14px;
|
|
61
|
+
box-shadow: var(--glass-inner-glow);
|
|
59
62
|
animation: slideIn 0.3s ease-out;
|
|
60
63
|
}
|
|
61
64
|
|
|
@@ -141,6 +144,10 @@ function handleDismiss() {
|
|
|
141
144
|
box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3);
|
|
142
145
|
}
|
|
143
146
|
|
|
147
|
+
.btn-install:active {
|
|
148
|
+
transform: var(--press-scale);
|
|
149
|
+
}
|
|
150
|
+
|
|
144
151
|
.btn-dismiss {
|
|
145
152
|
width: 28px;
|
|
146
153
|
height: 28px;
|