@zero-transfer/sdk 0.1.0-alpha.0 → 0.1.1
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/LICENSE +21 -21
- package/README.md +182 -213
- package/assets/zero-transfer-logo.svg +201 -201
- package/dist/index.cjs +12 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +309 -4
- package/dist/index.d.ts +309 -4
- package/dist/index.mjs +11 -4
- package/dist/index.mjs.map +1 -1
- package/package.json +16 -4
- package/CHANGELOG.md +0 -177
|
@@ -1,201 +1,201 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 880 200" width="880" height="200" role="img" aria-label="Zero Transfer">
|
|
2
|
-
<defs>
|
|
3
|
-
<!--
|
|
4
|
-
The 3D ring illusion works by COMBINING two animations on each ring:
|
|
5
|
-
1. animateTransform rotate on the GROUP → the ring's plane tilts/gyrates in 2D
|
|
6
|
-
2. animate ry on the ELLIPSE → ry oscillates 22→56→22→5→22
|
|
7
|
-
This approximates the projection of a 3D ring rotating through one full turn:
|
|
8
|
-
56≈face-on (near), 22≈tilted, 5≈edge-on (far). The human visual system reads
|
|
9
|
-
the compound motion as genuine 3D rotation.
|
|
10
|
-
-->
|
|
11
|
-
|
|
12
|
-
<!-- Color-shifting accent – the stop-colors drift between cyan/indigo/violet -->
|
|
13
|
-
<linearGradient id="gAccent" x1="0%" y1="0%" x2="100%" y2="0%">
|
|
14
|
-
<stop offset="0%" stop-color="#22d3ee">
|
|
15
|
-
<animate attributeName="stop-color"
|
|
16
|
-
values="#22d3ee;#818cf8;#22d3ee" dur="7s" repeatCount="indefinite"/>
|
|
17
|
-
</stop>
|
|
18
|
-
<stop offset="100%" stop-color="#c084fc">
|
|
19
|
-
<animate attributeName="stop-color"
|
|
20
|
-
values="#c084fc;#06b6d4;#c084fc" dur="7s" repeatCount="indefinite"/>
|
|
21
|
-
</stop>
|
|
22
|
-
</linearGradient>
|
|
23
|
-
|
|
24
|
-
<!-- Nucleus glow -->
|
|
25
|
-
<filter id="nucGlow" x="-100%" y="-100%" width="300%" height="300%">
|
|
26
|
-
<feGaussianBlur stdDeviation="4" result="b"/>
|
|
27
|
-
<feMerge><feMergeNode in="b"/><feMergeNode in="SourceGraphic"/></feMerge>
|
|
28
|
-
</filter>
|
|
29
|
-
|
|
30
|
-
<!-- Sweep bar glow -->
|
|
31
|
-
<filter id="sweepGlow" x="-50%" y="-300%" width="200%" height="700%">
|
|
32
|
-
<feGaussianBlur stdDeviation="2.5" result="b"/>
|
|
33
|
-
<feMerge><feMergeNode in="b"/><feMergeNode in="SourceGraphic"/></feMerge>
|
|
34
|
-
</filter>
|
|
35
|
-
|
|
36
|
-
<!-- Clips the sweep highlight so it never exits the track bounds -->
|
|
37
|
-
<clipPath id="barClip">
|
|
38
|
-
<rect x="0" y="145" width="600" height="12"/>
|
|
39
|
-
</clipPath>
|
|
40
|
-
</defs>
|
|
41
|
-
|
|
42
|
-
<!-- ╔══════════════════════════════════════════════╗ -->
|
|
43
|
-
<!-- ║ ATOM MARK (centred at 106,100) ║ -->
|
|
44
|
-
<!-- ╚══════════════════════════════════════════════╝ -->
|
|
45
|
-
<g transform="translate(106,100)">
|
|
46
|
-
|
|
47
|
-
<!-- Soft breathing halo — gives the mark a "live energy" feel -->
|
|
48
|
-
<circle r="70" fill="none" stroke="url(#gAccent)" stroke-width="1" opacity="0.06">
|
|
49
|
-
<animate attributeName="r" values="66;76;66" dur="5.5s" repeatCount="indefinite"/>
|
|
50
|
-
<animate attributeName="opacity" values="0.03;0.11;0.03" dur="5.5s" repeatCount="indefinite"/>
|
|
51
|
-
</circle>
|
|
52
|
-
|
|
53
|
-
<!-- Ambient particles around the mark (twinkle, no motion to keep it clean) -->
|
|
54
|
-
<circle cx="-67" cy="-20" r="1.8" fill="#22d3ee">
|
|
55
|
-
<animate attributeName="opacity" values="0.12;0.65;0.12" dur="2.4s" repeatCount="indefinite"/>
|
|
56
|
-
</circle>
|
|
57
|
-
<circle cx="69" cy="14" r="1.4" fill="#c084fc">
|
|
58
|
-
<animate attributeName="opacity" values="0.08;0.5;0.08" dur="3.2s" begin="0.9s" repeatCount="indefinite"/>
|
|
59
|
-
</circle>
|
|
60
|
-
<circle cx="-28" cy="67" r="1.6" fill="#818cf8">
|
|
61
|
-
<animate attributeName="opacity" values="0.1;0.55;0.1" dur="2.9s" begin="1.6s" repeatCount="indefinite"/>
|
|
62
|
-
</circle>
|
|
63
|
-
<circle cx="44" cy="-60" r="1.4" fill="#22d3ee">
|
|
64
|
-
<animate attributeName="opacity" values="0.1;0.45;0.1" dur="3.7s" begin="0.5s" repeatCount="indefinite"/>
|
|
65
|
-
</circle>
|
|
66
|
-
<circle cx="55" cy="-38" r="1.2" fill="#c084fc">
|
|
67
|
-
<animate attributeName="opacity" values="0.08;0.4;0.08" dur="2.1s" begin="1.2s" repeatCount="indefinite"/>
|
|
68
|
-
</circle>
|
|
69
|
-
|
|
70
|
-
<!-- ─── RING A (cyan, plane gyrates CW 18 s, ry starts phase 0) ─── -->
|
|
71
|
-
<g>
|
|
72
|
-
<animateTransform attributeName="transform" type="rotate"
|
|
73
|
-
from="0" to="360" dur="18s" repeatCount="indefinite"/>
|
|
74
|
-
<!-- ghost track -->
|
|
75
|
-
<ellipse rx="62" ry="22" fill="none" stroke="#22d3ee" stroke-width="0.75" opacity="0.1"/>
|
|
76
|
-
<!-- 3D-tipping ring -->
|
|
77
|
-
<ellipse rx="62" ry="22" fill="none" stroke="#22d3ee" stroke-linecap="round">
|
|
78
|
-
<animate attributeName="ry"
|
|
79
|
-
values="22;56;22;5;22" keyTimes="0;0.25;0.5;0.75;1"
|
|
80
|
-
dur="7s" repeatCount="indefinite"
|
|
81
|
-
calcMode="spline"
|
|
82
|
-
keySplines="0.42 0 0.58 1;0.42 0 0.58 1;0.42 0 0.58 1;0.42 0 0.58 1"/>
|
|
83
|
-
<animate attributeName="stroke-width"
|
|
84
|
-
values="1.5;3.2;1.5;0.7;1.5" keyTimes="0;0.25;0.5;0.75;1" dur="7s" repeatCount="indefinite"/>
|
|
85
|
-
<animate attributeName="stroke-opacity"
|
|
86
|
-
values="0.28;0.95;0.28;0.5;0.28" keyTimes="0;0.25;0.5;0.75;1" dur="7s" repeatCount="indefinite"/>
|
|
87
|
-
</ellipse>
|
|
88
|
-
<!-- comet dash -->
|
|
89
|
-
<ellipse rx="62" ry="22" fill="none" stroke="#22d3ee"
|
|
90
|
-
stroke-width="3" stroke-dasharray="68 232" stroke-linecap="round" opacity="0.85">
|
|
91
|
-
<animate attributeName="stroke-dashoffset" values="0;-300" dur="2.2s" repeatCount="indefinite"/>
|
|
92
|
-
</ellipse>
|
|
93
|
-
</g>
|
|
94
|
-
|
|
95
|
-
<!-- ─── RING B (indigo, plane gyrates CCW 24 s, ry phase +2.33 s) ─── -->
|
|
96
|
-
<g>
|
|
97
|
-
<animateTransform attributeName="transform" type="rotate"
|
|
98
|
-
from="60" to="-300" dur="24s" repeatCount="indefinite"/>
|
|
99
|
-
<ellipse rx="62" ry="22" fill="none" stroke="#818cf8" stroke-width="0.75" opacity="0.1"/>
|
|
100
|
-
<ellipse rx="62" ry="22" fill="none" stroke="#818cf8" stroke-linecap="round">
|
|
101
|
-
<animate attributeName="ry"
|
|
102
|
-
values="22;56;22;5;22" keyTimes="0;0.25;0.5;0.75;1"
|
|
103
|
-
dur="7s" begin="2.33s" repeatCount="indefinite"
|
|
104
|
-
calcMode="spline"
|
|
105
|
-
keySplines="0.42 0 0.58 1;0.42 0 0.58 1;0.42 0 0.58 1;0.42 0 0.58 1"/>
|
|
106
|
-
<animate attributeName="stroke-width"
|
|
107
|
-
values="1.5;3.2;1.5;0.7;1.5" keyTimes="0;0.25;0.5;0.75;1" dur="7s" begin="2.33s" repeatCount="indefinite"/>
|
|
108
|
-
<animate attributeName="stroke-opacity"
|
|
109
|
-
values="0.28;0.95;0.28;0.5;0.28" keyTimes="0;0.25;0.5;0.75;1" dur="7s" begin="2.33s" repeatCount="indefinite"/>
|
|
110
|
-
</ellipse>
|
|
111
|
-
<ellipse rx="62" ry="22" fill="none" stroke="#818cf8"
|
|
112
|
-
stroke-width="3" stroke-dasharray="68 232" stroke-linecap="round" opacity="0.85">
|
|
113
|
-
<animate attributeName="stroke-dashoffset" values="0;-300" dur="2.8s" repeatCount="indefinite"/>
|
|
114
|
-
</ellipse>
|
|
115
|
-
</g>
|
|
116
|
-
|
|
117
|
-
<!-- ─── RING C (violet, plane gyrates CW 21 s, ry phase +4.67 s) ─── -->
|
|
118
|
-
<g>
|
|
119
|
-
<animateTransform attributeName="transform" type="rotate"
|
|
120
|
-
from="120" to="480" dur="21s" repeatCount="indefinite"/>
|
|
121
|
-
<ellipse rx="62" ry="22" fill="none" stroke="#c084fc" stroke-width="0.75" opacity="0.1"/>
|
|
122
|
-
<ellipse rx="62" ry="22" fill="none" stroke="#c084fc" stroke-linecap="round">
|
|
123
|
-
<animate attributeName="ry"
|
|
124
|
-
values="22;56;22;5;22" keyTimes="0;0.25;0.5;0.75;1"
|
|
125
|
-
dur="7s" begin="4.67s" repeatCount="indefinite"
|
|
126
|
-
calcMode="spline"
|
|
127
|
-
keySplines="0.42 0 0.58 1;0.42 0 0.58 1;0.42 0 0.58 1;0.42 0 0.58 1"/>
|
|
128
|
-
<animate attributeName="stroke-width"
|
|
129
|
-
values="1.5;3.2;1.5;0.7;1.5" keyTimes="0;0.25;0.5;0.75;1" dur="7s" begin="4.67s" repeatCount="indefinite"/>
|
|
130
|
-
<animate attributeName="stroke-opacity"
|
|
131
|
-
values="0.28;0.95;0.28;0.5;0.28" keyTimes="0;0.25;0.5;0.75;1" dur="7s" begin="4.67s" repeatCount="indefinite"/>
|
|
132
|
-
</ellipse>
|
|
133
|
-
<ellipse rx="62" ry="22" fill="none" stroke="#c084fc"
|
|
134
|
-
stroke-width="3" stroke-dasharray="68 232" stroke-linecap="round" opacity="0.85">
|
|
135
|
-
<animate attributeName="stroke-dashoffset" values="0;-300" dur="3.4s" repeatCount="indefinite"/>
|
|
136
|
-
</ellipse>
|
|
137
|
-
</g>
|
|
138
|
-
|
|
139
|
-
<!-- Nucleus — sits on top of all rings, dark fill masks ring backs for z-depth -->
|
|
140
|
-
<circle r="14" fill="#08111e"/>
|
|
141
|
-
<circle r="14" fill="none" stroke="url(#gAccent)" stroke-width="2" filter="url(#nucGlow)">
|
|
142
|
-
<animate attributeName="r" values="13;15;13" dur="4s" repeatCount="indefinite"/>
|
|
143
|
-
<animate attributeName="stroke-opacity" values="0.5;1;0.5" dur="4s" repeatCount="indefinite"/>
|
|
144
|
-
</circle>
|
|
145
|
-
<!-- Z glyph — no fill, no stroke beyond the gradient line -->
|
|
146
|
-
<path d="M -7,-5 L 7,-5 L -7,5 L 7,5"
|
|
147
|
-
fill="none" stroke="url(#gAccent)"
|
|
148
|
-
stroke-width="2.3" stroke-linecap="round" stroke-linejoin="round">
|
|
149
|
-
<animate attributeName="opacity" values="0.65;1;0.65" dur="4s" repeatCount="indefinite"/>
|
|
150
|
-
</path>
|
|
151
|
-
</g>
|
|
152
|
-
|
|
153
|
-
<!-- ╔══════════════════════════════════════════════╗ -->
|
|
154
|
-
<!-- ║ WORDMARK ║ -->
|
|
155
|
-
<!-- ╚══════════════════════════════════════════════╝ -->
|
|
156
|
-
<g transform="translate(220,0)"
|
|
157
|
-
font-family="-apple-system, BlinkMacSystemFont, 'Segoe UI', Inter, system-ui, sans-serif">
|
|
158
|
-
|
|
159
|
-
<!-- "zero" — clean off-white, gentle breath (no stroke, no shadow) -->
|
|
160
|
-
<g>
|
|
161
|
-
<animate attributeName="opacity" values="0.82;1;0.82" dur="5.5s" repeatCount="indefinite"/>
|
|
162
|
-
<text x="0" y="108" font-size="62" font-weight="800"
|
|
163
|
-
fill="#f1f5f9" letter-spacing="-2">zero</text>
|
|
164
|
-
</g>
|
|
165
|
-
|
|
166
|
-
<!-- "transfer" — animated gradient, out-of-phase with "zero" -->
|
|
167
|
-
<g>
|
|
168
|
-
<animate attributeName="opacity" values="1;0.86;1" dur="5.5s" repeatCount="indefinite"/>
|
|
169
|
-
<text x="153" y="108" font-size="62" font-weight="800"
|
|
170
|
-
fill="url(#gAccent)" letter-spacing="-2">transfer</text>
|
|
171
|
-
</g>
|
|
172
|
-
|
|
173
|
-
<!-- Tagline -->
|
|
174
|
-
<g>
|
|
175
|
-
<animate attributeName="opacity" values="0.55;0.85;0.55" dur="8s" repeatCount="indefinite"/>
|
|
176
|
-
<text x="3" y="138" font-size="11.5" font-weight="600" letter-spacing="2.5">
|
|
177
|
-
<tspan fill="#94a3b8">UNIVERSAL TRANSFER SDK</tspan>
|
|
178
|
-
<tspan fill="#2d3f55"> · </tspan><tspan fill="#64748b">FTP</tspan>
|
|
179
|
-
<tspan fill="#2d3f55"> · </tspan><tspan fill="#64748b">FTPS</tspan>
|
|
180
|
-
<tspan fill="#2d3f55"> · </tspan><tspan fill="#64748b">SFTP</tspan>
|
|
181
|
-
<tspan fill="#2d3f55"> · </tspan><tspan fill="#64748b">S3</tspan>
|
|
182
|
-
<tspan fill="#2d3f55"> · </tspan><tspan fill="#64748b">HTTP</tspan>
|
|
183
|
-
</text>
|
|
184
|
-
</g>
|
|
185
|
-
|
|
186
|
-
<!-- Static track -->
|
|
187
|
-
<rect x="0" y="153" width="600" height="1.5" rx="1" fill="#1c2a3a"/>
|
|
188
|
-
|
|
189
|
-
<!-- Sweep highlight — clipped so it never exits the track -->
|
|
190
|
-
<g clip-path="url(#barClip)">
|
|
191
|
-
<rect x="-130" y="152.5" width="130" height="2" rx="1"
|
|
192
|
-
fill="url(#gAccent)" filter="url(#sweepGlow)">
|
|
193
|
-
<animate attributeName="x"
|
|
194
|
-
values="-130;600;-130" dur="5.5s" repeatCount="indefinite"/>
|
|
195
|
-
<animate attributeName="opacity"
|
|
196
|
-
values="0;0.85;1;0.85;0" keyTimes="0;0.07;0.5;0.93;1"
|
|
197
|
-
dur="5.5s" repeatCount="indefinite"/>
|
|
198
|
-
</rect>
|
|
199
|
-
</g>
|
|
200
|
-
</g>
|
|
201
|
-
</svg>
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 880 200" width="880" height="200" role="img" aria-label="Zero Transfer">
|
|
2
|
+
<defs>
|
|
3
|
+
<!--
|
|
4
|
+
The 3D ring illusion works by COMBINING two animations on each ring:
|
|
5
|
+
1. animateTransform rotate on the GROUP → the ring's plane tilts/gyrates in 2D
|
|
6
|
+
2. animate ry on the ELLIPSE → ry oscillates 22→56→22→5→22
|
|
7
|
+
This approximates the projection of a 3D ring rotating through one full turn:
|
|
8
|
+
56≈face-on (near), 22≈tilted, 5≈edge-on (far). The human visual system reads
|
|
9
|
+
the compound motion as genuine 3D rotation.
|
|
10
|
+
-->
|
|
11
|
+
|
|
12
|
+
<!-- Color-shifting accent – the stop-colors drift between cyan/indigo/violet -->
|
|
13
|
+
<linearGradient id="gAccent" x1="0%" y1="0%" x2="100%" y2="0%">
|
|
14
|
+
<stop offset="0%" stop-color="#22d3ee">
|
|
15
|
+
<animate attributeName="stop-color"
|
|
16
|
+
values="#22d3ee;#818cf8;#22d3ee" dur="7s" repeatCount="indefinite"/>
|
|
17
|
+
</stop>
|
|
18
|
+
<stop offset="100%" stop-color="#c084fc">
|
|
19
|
+
<animate attributeName="stop-color"
|
|
20
|
+
values="#c084fc;#06b6d4;#c084fc" dur="7s" repeatCount="indefinite"/>
|
|
21
|
+
</stop>
|
|
22
|
+
</linearGradient>
|
|
23
|
+
|
|
24
|
+
<!-- Nucleus glow -->
|
|
25
|
+
<filter id="nucGlow" x="-100%" y="-100%" width="300%" height="300%">
|
|
26
|
+
<feGaussianBlur stdDeviation="4" result="b"/>
|
|
27
|
+
<feMerge><feMergeNode in="b"/><feMergeNode in="SourceGraphic"/></feMerge>
|
|
28
|
+
</filter>
|
|
29
|
+
|
|
30
|
+
<!-- Sweep bar glow -->
|
|
31
|
+
<filter id="sweepGlow" x="-50%" y="-300%" width="200%" height="700%">
|
|
32
|
+
<feGaussianBlur stdDeviation="2.5" result="b"/>
|
|
33
|
+
<feMerge><feMergeNode in="b"/><feMergeNode in="SourceGraphic"/></feMerge>
|
|
34
|
+
</filter>
|
|
35
|
+
|
|
36
|
+
<!-- Clips the sweep highlight so it never exits the track bounds -->
|
|
37
|
+
<clipPath id="barClip">
|
|
38
|
+
<rect x="0" y="145" width="600" height="12"/>
|
|
39
|
+
</clipPath>
|
|
40
|
+
</defs>
|
|
41
|
+
|
|
42
|
+
<!-- ╔══════════════════════════════════════════════╗ -->
|
|
43
|
+
<!-- ║ ATOM MARK (centred at 106,100) ║ -->
|
|
44
|
+
<!-- ╚══════════════════════════════════════════════╝ -->
|
|
45
|
+
<g transform="translate(106,100)">
|
|
46
|
+
|
|
47
|
+
<!-- Soft breathing halo — gives the mark a "live energy" feel -->
|
|
48
|
+
<circle r="70" fill="none" stroke="url(#gAccent)" stroke-width="1" opacity="0.06">
|
|
49
|
+
<animate attributeName="r" values="66;76;66" dur="5.5s" repeatCount="indefinite"/>
|
|
50
|
+
<animate attributeName="opacity" values="0.03;0.11;0.03" dur="5.5s" repeatCount="indefinite"/>
|
|
51
|
+
</circle>
|
|
52
|
+
|
|
53
|
+
<!-- Ambient particles around the mark (twinkle, no motion to keep it clean) -->
|
|
54
|
+
<circle cx="-67" cy="-20" r="1.8" fill="#22d3ee">
|
|
55
|
+
<animate attributeName="opacity" values="0.12;0.65;0.12" dur="2.4s" repeatCount="indefinite"/>
|
|
56
|
+
</circle>
|
|
57
|
+
<circle cx="69" cy="14" r="1.4" fill="#c084fc">
|
|
58
|
+
<animate attributeName="opacity" values="0.08;0.5;0.08" dur="3.2s" begin="0.9s" repeatCount="indefinite"/>
|
|
59
|
+
</circle>
|
|
60
|
+
<circle cx="-28" cy="67" r="1.6" fill="#818cf8">
|
|
61
|
+
<animate attributeName="opacity" values="0.1;0.55;0.1" dur="2.9s" begin="1.6s" repeatCount="indefinite"/>
|
|
62
|
+
</circle>
|
|
63
|
+
<circle cx="44" cy="-60" r="1.4" fill="#22d3ee">
|
|
64
|
+
<animate attributeName="opacity" values="0.1;0.45;0.1" dur="3.7s" begin="0.5s" repeatCount="indefinite"/>
|
|
65
|
+
</circle>
|
|
66
|
+
<circle cx="55" cy="-38" r="1.2" fill="#c084fc">
|
|
67
|
+
<animate attributeName="opacity" values="0.08;0.4;0.08" dur="2.1s" begin="1.2s" repeatCount="indefinite"/>
|
|
68
|
+
</circle>
|
|
69
|
+
|
|
70
|
+
<!-- ─── RING A (cyan, plane gyrates CW 18 s, ry starts phase 0) ─── -->
|
|
71
|
+
<g>
|
|
72
|
+
<animateTransform attributeName="transform" type="rotate"
|
|
73
|
+
from="0" to="360" dur="18s" repeatCount="indefinite"/>
|
|
74
|
+
<!-- ghost track -->
|
|
75
|
+
<ellipse rx="62" ry="22" fill="none" stroke="#22d3ee" stroke-width="0.75" opacity="0.1"/>
|
|
76
|
+
<!-- 3D-tipping ring -->
|
|
77
|
+
<ellipse rx="62" ry="22" fill="none" stroke="#22d3ee" stroke-linecap="round">
|
|
78
|
+
<animate attributeName="ry"
|
|
79
|
+
values="22;56;22;5;22" keyTimes="0;0.25;0.5;0.75;1"
|
|
80
|
+
dur="7s" repeatCount="indefinite"
|
|
81
|
+
calcMode="spline"
|
|
82
|
+
keySplines="0.42 0 0.58 1;0.42 0 0.58 1;0.42 0 0.58 1;0.42 0 0.58 1"/>
|
|
83
|
+
<animate attributeName="stroke-width"
|
|
84
|
+
values="1.5;3.2;1.5;0.7;1.5" keyTimes="0;0.25;0.5;0.75;1" dur="7s" repeatCount="indefinite"/>
|
|
85
|
+
<animate attributeName="stroke-opacity"
|
|
86
|
+
values="0.28;0.95;0.28;0.5;0.28" keyTimes="0;0.25;0.5;0.75;1" dur="7s" repeatCount="indefinite"/>
|
|
87
|
+
</ellipse>
|
|
88
|
+
<!-- comet dash -->
|
|
89
|
+
<ellipse rx="62" ry="22" fill="none" stroke="#22d3ee"
|
|
90
|
+
stroke-width="3" stroke-dasharray="68 232" stroke-linecap="round" opacity="0.85">
|
|
91
|
+
<animate attributeName="stroke-dashoffset" values="0;-300" dur="2.2s" repeatCount="indefinite"/>
|
|
92
|
+
</ellipse>
|
|
93
|
+
</g>
|
|
94
|
+
|
|
95
|
+
<!-- ─── RING B (indigo, plane gyrates CCW 24 s, ry phase +2.33 s) ─── -->
|
|
96
|
+
<g>
|
|
97
|
+
<animateTransform attributeName="transform" type="rotate"
|
|
98
|
+
from="60" to="-300" dur="24s" repeatCount="indefinite"/>
|
|
99
|
+
<ellipse rx="62" ry="22" fill="none" stroke="#818cf8" stroke-width="0.75" opacity="0.1"/>
|
|
100
|
+
<ellipse rx="62" ry="22" fill="none" stroke="#818cf8" stroke-linecap="round">
|
|
101
|
+
<animate attributeName="ry"
|
|
102
|
+
values="22;56;22;5;22" keyTimes="0;0.25;0.5;0.75;1"
|
|
103
|
+
dur="7s" begin="2.33s" repeatCount="indefinite"
|
|
104
|
+
calcMode="spline"
|
|
105
|
+
keySplines="0.42 0 0.58 1;0.42 0 0.58 1;0.42 0 0.58 1;0.42 0 0.58 1"/>
|
|
106
|
+
<animate attributeName="stroke-width"
|
|
107
|
+
values="1.5;3.2;1.5;0.7;1.5" keyTimes="0;0.25;0.5;0.75;1" dur="7s" begin="2.33s" repeatCount="indefinite"/>
|
|
108
|
+
<animate attributeName="stroke-opacity"
|
|
109
|
+
values="0.28;0.95;0.28;0.5;0.28" keyTimes="0;0.25;0.5;0.75;1" dur="7s" begin="2.33s" repeatCount="indefinite"/>
|
|
110
|
+
</ellipse>
|
|
111
|
+
<ellipse rx="62" ry="22" fill="none" stroke="#818cf8"
|
|
112
|
+
stroke-width="3" stroke-dasharray="68 232" stroke-linecap="round" opacity="0.85">
|
|
113
|
+
<animate attributeName="stroke-dashoffset" values="0;-300" dur="2.8s" repeatCount="indefinite"/>
|
|
114
|
+
</ellipse>
|
|
115
|
+
</g>
|
|
116
|
+
|
|
117
|
+
<!-- ─── RING C (violet, plane gyrates CW 21 s, ry phase +4.67 s) ─── -->
|
|
118
|
+
<g>
|
|
119
|
+
<animateTransform attributeName="transform" type="rotate"
|
|
120
|
+
from="120" to="480" dur="21s" repeatCount="indefinite"/>
|
|
121
|
+
<ellipse rx="62" ry="22" fill="none" stroke="#c084fc" stroke-width="0.75" opacity="0.1"/>
|
|
122
|
+
<ellipse rx="62" ry="22" fill="none" stroke="#c084fc" stroke-linecap="round">
|
|
123
|
+
<animate attributeName="ry"
|
|
124
|
+
values="22;56;22;5;22" keyTimes="0;0.25;0.5;0.75;1"
|
|
125
|
+
dur="7s" begin="4.67s" repeatCount="indefinite"
|
|
126
|
+
calcMode="spline"
|
|
127
|
+
keySplines="0.42 0 0.58 1;0.42 0 0.58 1;0.42 0 0.58 1;0.42 0 0.58 1"/>
|
|
128
|
+
<animate attributeName="stroke-width"
|
|
129
|
+
values="1.5;3.2;1.5;0.7;1.5" keyTimes="0;0.25;0.5;0.75;1" dur="7s" begin="4.67s" repeatCount="indefinite"/>
|
|
130
|
+
<animate attributeName="stroke-opacity"
|
|
131
|
+
values="0.28;0.95;0.28;0.5;0.28" keyTimes="0;0.25;0.5;0.75;1" dur="7s" begin="4.67s" repeatCount="indefinite"/>
|
|
132
|
+
</ellipse>
|
|
133
|
+
<ellipse rx="62" ry="22" fill="none" stroke="#c084fc"
|
|
134
|
+
stroke-width="3" stroke-dasharray="68 232" stroke-linecap="round" opacity="0.85">
|
|
135
|
+
<animate attributeName="stroke-dashoffset" values="0;-300" dur="3.4s" repeatCount="indefinite"/>
|
|
136
|
+
</ellipse>
|
|
137
|
+
</g>
|
|
138
|
+
|
|
139
|
+
<!-- Nucleus — sits on top of all rings, dark fill masks ring backs for z-depth -->
|
|
140
|
+
<circle r="14" fill="#08111e"/>
|
|
141
|
+
<circle r="14" fill="none" stroke="url(#gAccent)" stroke-width="2" filter="url(#nucGlow)">
|
|
142
|
+
<animate attributeName="r" values="13;15;13" dur="4s" repeatCount="indefinite"/>
|
|
143
|
+
<animate attributeName="stroke-opacity" values="0.5;1;0.5" dur="4s" repeatCount="indefinite"/>
|
|
144
|
+
</circle>
|
|
145
|
+
<!-- Z glyph — no fill, no stroke beyond the gradient line -->
|
|
146
|
+
<path d="M -7,-5 L 7,-5 L -7,5 L 7,5"
|
|
147
|
+
fill="none" stroke="url(#gAccent)"
|
|
148
|
+
stroke-width="2.3" stroke-linecap="round" stroke-linejoin="round">
|
|
149
|
+
<animate attributeName="opacity" values="0.65;1;0.65" dur="4s" repeatCount="indefinite"/>
|
|
150
|
+
</path>
|
|
151
|
+
</g>
|
|
152
|
+
|
|
153
|
+
<!-- ╔══════════════════════════════════════════════╗ -->
|
|
154
|
+
<!-- ║ WORDMARK ║ -->
|
|
155
|
+
<!-- ╚══════════════════════════════════════════════╝ -->
|
|
156
|
+
<g transform="translate(220,0)"
|
|
157
|
+
font-family="-apple-system, BlinkMacSystemFont, 'Segoe UI', Inter, system-ui, sans-serif">
|
|
158
|
+
|
|
159
|
+
<!-- "zero" — clean off-white, gentle breath (no stroke, no shadow) -->
|
|
160
|
+
<g>
|
|
161
|
+
<animate attributeName="opacity" values="0.82;1;0.82" dur="5.5s" repeatCount="indefinite"/>
|
|
162
|
+
<text x="0" y="108" font-size="62" font-weight="800"
|
|
163
|
+
fill="#f1f5f9" letter-spacing="-2">zero</text>
|
|
164
|
+
</g>
|
|
165
|
+
|
|
166
|
+
<!-- "transfer" — animated gradient, out-of-phase with "zero" -->
|
|
167
|
+
<g>
|
|
168
|
+
<animate attributeName="opacity" values="1;0.86;1" dur="5.5s" repeatCount="indefinite"/>
|
|
169
|
+
<text x="153" y="108" font-size="62" font-weight="800"
|
|
170
|
+
fill="url(#gAccent)" letter-spacing="-2">transfer</text>
|
|
171
|
+
</g>
|
|
172
|
+
|
|
173
|
+
<!-- Tagline -->
|
|
174
|
+
<g>
|
|
175
|
+
<animate attributeName="opacity" values="0.55;0.85;0.55" dur="8s" repeatCount="indefinite"/>
|
|
176
|
+
<text x="3" y="138" font-size="11.5" font-weight="600" letter-spacing="2.5">
|
|
177
|
+
<tspan fill="#94a3b8">UNIVERSAL TRANSFER SDK</tspan>
|
|
178
|
+
<tspan fill="#2d3f55"> · </tspan><tspan fill="#64748b">FTP</tspan>
|
|
179
|
+
<tspan fill="#2d3f55"> · </tspan><tspan fill="#64748b">FTPS</tspan>
|
|
180
|
+
<tspan fill="#2d3f55"> · </tspan><tspan fill="#64748b">SFTP</tspan>
|
|
181
|
+
<tspan fill="#2d3f55"> · </tspan><tspan fill="#64748b">S3</tspan>
|
|
182
|
+
<tspan fill="#2d3f55"> · </tspan><tspan fill="#64748b">HTTP</tspan>
|
|
183
|
+
</text>
|
|
184
|
+
</g>
|
|
185
|
+
|
|
186
|
+
<!-- Static track -->
|
|
187
|
+
<rect x="0" y="153" width="600" height="1.5" rx="1" fill="#1c2a3a"/>
|
|
188
|
+
|
|
189
|
+
<!-- Sweep highlight — clipped so it never exits the track -->
|
|
190
|
+
<g clip-path="url(#barClip)">
|
|
191
|
+
<rect x="-130" y="152.5" width="130" height="2" rx="1"
|
|
192
|
+
fill="url(#gAccent)" filter="url(#sweepGlow)">
|
|
193
|
+
<animate attributeName="x"
|
|
194
|
+
values="-130;600;-130" dur="5.5s" repeatCount="indefinite"/>
|
|
195
|
+
<animate attributeName="opacity"
|
|
196
|
+
values="0;0.85;1;0.85;0" keyTimes="0;0.07;0.5;0.93;1"
|
|
197
|
+
dur="5.5s" repeatCount="indefinite"/>
|
|
198
|
+
</rect>
|
|
199
|
+
</g>
|
|
200
|
+
</g>
|
|
201
|
+
</svg>
|
package/dist/index.cjs
CHANGED
|
@@ -3634,7 +3634,8 @@ function normalizeFeatureLines(input) {
|
|
|
3634
3634
|
// src/providers/classic/sftp/SftpProvider.ts
|
|
3635
3635
|
var import_node_buffer4 = require("buffer");
|
|
3636
3636
|
var import_node_crypto = require("crypto");
|
|
3637
|
-
var import_ssh2 = require("ssh2");
|
|
3637
|
+
var import_ssh2 = __toESM(require("ssh2"));
|
|
3638
|
+
var { Client: SshClientCtor, utils } = import_ssh2.default;
|
|
3638
3639
|
var SFTP_PROVIDER_ID = "sftp";
|
|
3639
3640
|
var SFTP_DEFAULT_PORT = 22;
|
|
3640
3641
|
var SFTP_PROVIDER_CAPABILITIES = {
|
|
@@ -3794,7 +3795,7 @@ var SftpFileSystem = class {
|
|
|
3794
3795
|
}
|
|
3795
3796
|
};
|
|
3796
3797
|
async function connectSshClient(profile, options, username, authentication) {
|
|
3797
|
-
const client = new
|
|
3798
|
+
const client = new SshClientCtor();
|
|
3798
3799
|
let config;
|
|
3799
3800
|
try {
|
|
3800
3801
|
config = await createConnectConfig(profile, options, username, authentication);
|
|
@@ -3993,7 +3994,7 @@ function parseKnownHostsLine(line, lineNumber) {
|
|
|
3993
3994
|
};
|
|
3994
3995
|
}
|
|
3995
3996
|
function parseKnownHostPublicKey(value, lineNumber) {
|
|
3996
|
-
const parsed =
|
|
3997
|
+
const parsed = utils.parseKey(value);
|
|
3997
3998
|
if (parsed instanceof Error) {
|
|
3998
3999
|
throw createKnownHostsConfigurationError(lineNumber, parsed.message);
|
|
3999
4000
|
}
|
|
@@ -4510,7 +4511,8 @@ function noop() {
|
|
|
4510
4511
|
|
|
4511
4512
|
// src/providers/classic/sftp/jumpHost.ts
|
|
4512
4513
|
var import_node_buffer5 = require("buffer");
|
|
4513
|
-
var import_ssh22 = require("ssh2");
|
|
4514
|
+
var import_ssh22 = __toESM(require("ssh2"));
|
|
4515
|
+
var { Client: SshClientCtor2 } = import_ssh22.default;
|
|
4514
4516
|
function createSftpJumpHostSocketFactory(options) {
|
|
4515
4517
|
if (options.bastion === void 0 && options.buildBastion === void 0) {
|
|
4516
4518
|
throw new ConfigurationError({
|
|
@@ -4531,7 +4533,7 @@ function createSftpJumpHostSocketFactory(options) {
|
|
|
4531
4533
|
}
|
|
4532
4534
|
function openJumpHostChannel(options) {
|
|
4533
4535
|
const { bastionConfig, context } = options;
|
|
4534
|
-
const client = options.createClient ? options.createClient() : new
|
|
4536
|
+
const client = options.createClient ? options.createClient() : new SshClientCtor2();
|
|
4535
4537
|
if (context.signal?.aborted === true) {
|
|
4536
4538
|
return Promise.reject(
|
|
4537
4539
|
new AbortError({
|
|
@@ -7180,6 +7182,11 @@ function normalizeLocalProviderPath(input) {
|
|
|
7180
7182
|
}
|
|
7181
7183
|
function resolveLocalPath(rootPath, remotePath) {
|
|
7182
7184
|
const normalizedRemotePath = normalizeLocalProviderPath(remotePath);
|
|
7185
|
+
const resolvedRootPath = import_node_path2.default.resolve(rootPath);
|
|
7186
|
+
const candidateAbsolute = import_node_path2.default.resolve(normalizedRemotePath.split("/").join(import_node_path2.default.sep));
|
|
7187
|
+
if (candidateAbsolute === resolvedRootPath || candidateAbsolute.startsWith(resolvedRootPath + import_node_path2.default.sep)) {
|
|
7188
|
+
return candidateAbsolute;
|
|
7189
|
+
}
|
|
7183
7190
|
const relativePath = normalizedRemotePath === "/" ? "." : normalizedRemotePath.slice(1);
|
|
7184
7191
|
const resolvedPath = import_node_path2.default.resolve(rootPath, relativePath.split("/").join(import_node_path2.default.sep));
|
|
7185
7192
|
const relativeToRoot = import_node_path2.default.relative(rootPath, resolvedPath);
|