drops-mcp 0.1.0

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.
@@ -0,0 +1,327 @@
1
+ <!DOCTYPE html>
2
+ <html class="staticrypt-html" lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title>/*[|template_title|]*/0</title>
6
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
7
+ <link rel="icon" href="__DROP_FAVICON__" />
8
+ __DROP_META__
9
+
10
+ <!-- do not cache this page -->
11
+ <meta http-equiv="cache-control" content="max-age=0" />
12
+ <meta http-equiv="cache-control" content="no-cache" />
13
+ <meta http-equiv="expires" content="0" />
14
+ <meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
15
+ <meta http-equiv="pragma" content="no-cache" />
16
+
17
+ <style>
18
+ :root {
19
+ --drop-primary: #ff6b35;
20
+ --drop-primary-strong: #c2410c;
21
+ --drop-primary-hover: #9a3412;
22
+ --drop-accent: #ea580c;
23
+ }
24
+
25
+ * { box-sizing: border-box; }
26
+
27
+ .staticrypt-html { height: 100%; }
28
+
29
+ .staticrypt-body {
30
+ height: 100%;
31
+ margin: 0;
32
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
33
+ -webkit-font-smoothing: antialiased;
34
+ -moz-osx-font-smoothing: grayscale;
35
+ }
36
+
37
+ .staticrypt-content {
38
+ height: 100%;
39
+ margin-bottom: 0;
40
+ background:
41
+ radial-gradient(1200px 600px at 50% -10%, rgba(255, 107, 53, 0.22), transparent 60%),
42
+ radial-gradient(900px 500px at 90% 110%, rgba(234, 88, 12, 0.16), transparent 60%),
43
+ #0b0b0d;
44
+ color: #f5f5f5;
45
+ }
46
+
47
+ .staticrypt-page {
48
+ width: 100%;
49
+ max-width: 400px;
50
+ padding: 8% 16px 0;
51
+ margin: auto;
52
+ }
53
+
54
+ .drop-logo {
55
+ display: block;
56
+ height: 40px;
57
+ margin: 0 auto 26px;
58
+ opacity: 0.95;
59
+ }
60
+
61
+ .staticrypt-form {
62
+ position: relative;
63
+ z-index: 1;
64
+ background: rgba(255, 255, 255, 0.06);
65
+ border: 1px solid rgba(255, 255, 255, 0.1);
66
+ border-radius: 18px;
67
+ max-width: 400px;
68
+ margin: 0 auto 100px;
69
+ padding: 34px 30px 30px;
70
+ text-align: center;
71
+ backdrop-filter: blur(18px) saturate(160%);
72
+ -webkit-backdrop-filter: blur(18px) saturate(160%);
73
+ box-shadow: 0 18px 60px -20px rgba(0, 0, 0, 0.7), inset 0 0.5px 0 rgba(255, 255, 255, 0.12);
74
+ }
75
+
76
+ .staticrypt-instructions { margin: 0 0 6px; }
77
+
78
+ .staticrypt-title {
79
+ font-size: 1.35em;
80
+ font-weight: 650;
81
+ margin: 0 0 6px;
82
+ letter-spacing: -0.01em;
83
+ }
84
+
85
+ .staticrypt-instructions p:last-child {
86
+ margin: 0;
87
+ color: rgba(245, 245, 245, 0.62);
88
+ font-size: 0.92em;
89
+ }
90
+
91
+ .staticrypt-hr {
92
+ margin: 20px 0;
93
+ border: 0;
94
+ border-top: 1px solid rgba(255, 255, 255, 0.08);
95
+ }
96
+
97
+ .staticrypt-password-container {
98
+ position: relative;
99
+ background: rgba(0, 0, 0, 0.28);
100
+ border: 1px solid rgba(255, 255, 255, 0.12);
101
+ border-radius: 11px;
102
+ width: 100%;
103
+ margin: 0 0 14px;
104
+ overflow: hidden;
105
+ }
106
+
107
+ .staticrypt-form input[type="password"],
108
+ .staticrypt-form input[type="text"] {
109
+ background: transparent;
110
+ border: 0;
111
+ color: #fff;
112
+ font-size: 15px;
113
+ outline: 0;
114
+ padding: 15px 46px 15px 16px;
115
+ width: 100%;
116
+ }
117
+
118
+ .staticrypt-form input::placeholder { color: rgba(245, 245, 245, 0.4); }
119
+
120
+ .staticrypt-toggle-password-visibility {
121
+ cursor: pointer;
122
+ height: 20px;
123
+ width: 20px;
124
+ opacity: 0.55;
125
+ padding: 13px;
126
+ position: absolute;
127
+ right: 0;
128
+ top: 50%;
129
+ transform: translateY(-50%);
130
+ filter: invert(1);
131
+ }
132
+
133
+ .staticrypt-form .staticrypt-decrypt-button {
134
+ text-transform: uppercase;
135
+ letter-spacing: 0.04em;
136
+ outline: 0;
137
+ background: linear-gradient(135deg, var(--drop-primary), var(--drop-accent));
138
+ width: 100%;
139
+ border: 0;
140
+ border-radius: 11px;
141
+ padding: 15px;
142
+ color: #fff;
143
+ font-size: 14px;
144
+ font-weight: 650;
145
+ cursor: pointer;
146
+ transition: filter 0.15s ease, transform 0.05s ease;
147
+ }
148
+
149
+ .staticrypt-form .staticrypt-decrypt-button:hover { filter: brightness(108%); }
150
+ .staticrypt-form .staticrypt-decrypt-button:active { transform: translateY(1px); }
151
+
152
+ label.staticrypt-remember {
153
+ display: flex;
154
+ align-items: center;
155
+ margin-bottom: 1em;
156
+ color: rgba(245, 245, 245, 0.7);
157
+ font-size: 0.9em;
158
+ }
159
+
160
+ .staticrypt-remember input[type="checkbox"] {
161
+ accent-color: var(--drop-primary);
162
+ transform: scale(1.4);
163
+ margin-right: 1em;
164
+ }
165
+
166
+ .drop-footer {
167
+ text-align: center;
168
+ margin: 22px 0 0;
169
+ font-size: 0.78em;
170
+ color: rgba(245, 245, 245, 0.4);
171
+ }
172
+ .drop-footer a { color: rgba(255, 107, 53, 0.85); text-decoration: none; }
173
+
174
+ .hidden { display: none !important; }
175
+
176
+ .staticrypt-spinner-container {
177
+ height: 100%;
178
+ display: flex;
179
+ align-items: center;
180
+ justify-content: center;
181
+ background: #0b0b0d;
182
+ }
183
+
184
+ .staticrypt-spinner {
185
+ display: inline-block;
186
+ width: 2rem;
187
+ height: 2rem;
188
+ border: 0.25em solid rgba(255, 107, 53, 0.35);
189
+ border-right-color: transparent;
190
+ border-radius: 50%;
191
+ animation: spinner-border 0.75s linear infinite;
192
+ }
193
+
194
+ @keyframes spinner-border {
195
+ 100% { transform: rotate(360deg); }
196
+ }
197
+
198
+ @media screen and (-webkit-min-device-pixel-ratio: 0) {
199
+ .staticrypt-form input[type="password"],
200
+ .staticrypt-form input[type="text"] { font-size: 16px; }
201
+ }
202
+ </style>
203
+ </head>
204
+
205
+ <body class="staticrypt-body">
206
+ <div id="staticrypt_loading" class="staticrypt-spinner-container">
207
+ <div class="staticrypt-spinner"></div>
208
+ </div>
209
+
210
+ <div id="staticrypt_content" class="staticrypt-content hidden">
211
+ <div class="staticrypt-page">
212
+ <img class="drop-logo" src="__DROP_LOGO__" alt="logo" />
213
+ <div class="staticrypt-form">
214
+ <div class="staticrypt-instructions">
215
+ <p class="staticrypt-title">/*[|template_title|]*/0</p>
216
+ <p>/*[|template_instructions|]*/0</p>
217
+ </div>
218
+
219
+ <hr class="staticrypt-hr" />
220
+
221
+ <form id="staticrypt-form" action="#" method="post">
222
+ <div class="staticrypt-password-container">
223
+ <input
224
+ id="staticrypt-password"
225
+ type="password"
226
+ name="password"
227
+ placeholder="/*[|template_placeholder|]*/0"
228
+ autofocus
229
+ />
230
+
231
+ <img
232
+ class="staticrypt-toggle-password-visibility"
233
+ alt="/*[|template_toggle_show|]*/0"
234
+ title="/*[|template_toggle_show|]*/0"
235
+ src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NDAgNTEyIj48IS0tIUZvbnQgQXdlc29tZSBGcmVlIDYuNS4yIGJ5IEBmb250YXdlc29tZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tIExpY2Vuc2UgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbS9saWNlbnNlL2ZyZWUgQ29weXJpZ2h0IDIwMjQgRm9udGljb25zLCBJbmMuLS0+PHBhdGggZD0iTTM4LjggNS4xQzI4LjQtMy4xIDEzLjMtMS4yIDUuMSA5LjJTLTEuMiAzNC43IDkuMiA0Mi45bDU5MiA0NjRjMTAuNCA4LjIgMjUuNSA2LjMgMzMuNy00LjFzNi4zLTI1LjUtNC4xLTMzLjdMNTI1LjYgMzg2LjdjMzkuNi00MC42IDY2LjQtODYuMSA3OS45LTExOC40YzMuMy03LjkgMy4zLTE2LjcgMC0yNC42Yy0xNC45LTM1LjctNDYuMi04Ny43LTkzLTEzMS4xQzQ2NS41IDY4LjggNDAwLjggMzIgMzIwIDMyYy02OC4yIDAtMTI1IDI2LjMtMTY5LjMgNjAuOEwzOC44IDUuMXpNMjIzLjEgMTQ5LjVDMjQ4LjYgMTI2LjIgMjgyLjcgMTEyIDMyMCAxMTJjNzkuNSAwIDE0NCA2NC41IDE0NCAxNDRjMCAyNC45LTYuMyA0OC4zLTE3LjQgNjguN0w0MDggMjk0LjVjOC40LTE5LjMgMTAuNi00MS40IDQuOC02My4zYy0xMS4xLTQxLjUtNDcuOC02OS40LTg4LjYtNzEuMWMtNS44LS4yLTkuMiA2LjEtNy40IDExLjdjMi4xIDYuNCAzLjMgMTMuMiAzLjMgMjAuM2MwIDEwLjItMi40IDE5LjgtNi42IDI4LjNsLTkwLjMtNzAuOHpNMzczIDM4OS45Yy0xNi40IDYuNS0zNC4zIDEwLjEtNTMgMTAuMWMtNzkuNSAwLTE0NC02NC41LTE0NC0xNDRjMC02LjkgLjUtMTMuNiAxLjQtMjAuMkw4My4xIDE2MS41QzYwLjMgMTkxLjIgNDQgMjIwLjggMzQuNSAyNDMuN2MtMy4zIDcuOS0zLjMgMTYuNyAwIDI0LjZjMTQuOSAzNS43IDQ2LjIgODcuNyA5MyAxMzEuMUMxNzQuNSA0NDMuMiAyMzkuMiA0ODAgMzIwIDQ4MGM0Ny44IDAgODkuOS0xMi45IDEyNi4yLTMyLjVMMzczIDM4OS45eiIvPjwvc3ZnPg=="
236
+ />
237
+ </div>
238
+
239
+ <label id="staticrypt-remember-label" class="staticrypt-remember hidden">
240
+ <input id="staticrypt-remember" type="checkbox" name="remember" />
241
+ /*[|template_remember|]*/0
242
+ </label>
243
+
244
+ <input type="submit" class="staticrypt-decrypt-button" value="/*[|template_button|]*/0" />
245
+ </form>
246
+ </div>
247
+ <p class="drop-footer">Shared via <a href="https://__DROP_DOMAIN__">__DROP_DOMAIN__</a></p>
248
+ </div>
249
+ </div>
250
+
251
+ <script>
252
+ // these variables will be filled when generating the file - the template format is '/*[|variable_name|]*/0'
253
+ const staticryptInitiator = /*[|js_staticrypt|]*/ 0;
254
+ const templateError = "/*[|template_error|]*/0",
255
+ templateToggleAltShow = "/*[|template_toggle_show|]*/0",
256
+ templateToggleAltHide = "/*[|template_toggle_hide|]*/0",
257
+ isRememberEnabled = /*[|is_remember_enabled|]*/ 0,
258
+ staticryptConfig = /*[|staticrypt_config|]*/ 0;
259
+
260
+ // you can edit these values to customize some of the behavior of StatiCrypt
261
+ const templateConfig = {
262
+ rememberExpirationKey: "staticrypt_expiration",
263
+ rememberPassphraseKey: "staticrypt_passphrase",
264
+ replaceHtmlCallback: null,
265
+ clearLocalStorageCallback: null,
266
+ };
267
+
268
+ // init the staticrypt engine
269
+ const staticrypt = staticryptInitiator.init(staticryptConfig, templateConfig);
270
+
271
+ // try to automatically decrypt on load if there is a saved password
272
+ window.onload = async function () {
273
+ const { isSuccessful } = await staticrypt.handleDecryptOnLoad();
274
+
275
+ // if we didn't decrypt anything on load, show the password prompt. Otherwise the content has already been
276
+ // replaced, no need to do anything
277
+ if (!isSuccessful) {
278
+ // hide loading screen
279
+ document.getElementById("staticrypt_loading").classList.add("hidden");
280
+ document.getElementById("staticrypt_content").classList.remove("hidden");
281
+ document.getElementById("staticrypt-password").focus();
282
+
283
+ // show the remember me checkbox
284
+ if (isRememberEnabled) {
285
+ document.getElementById("staticrypt-remember-label").classList.remove("hidden");
286
+ }
287
+ }
288
+ };
289
+
290
+ // toggle password visibility
291
+ const toggleIcon = document.querySelector(".staticrypt-toggle-password-visibility");
292
+ // these two icons are coming from FontAwesome
293
+ const imgSrcEyeClosed =
294
+ "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NDAgNTEyIj48IS0tIUZvbnQgQXdlc29tZSBGcmVlIDYuNS4yIGJ5IEBmb250YXdlc29tZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tIExpY2Vuc2UgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbS9saWNlbnNlL2ZyZWUgQ29weXJpZ2h0IDIwMjQgRm9udGljb25zLCBJbmMuLS0+PHBhdGggZD0iTTM4LjggNS4xQzI4LjQtMy4xIDEzLjMtMS4yIDUuMSA5LjJTLTEuMiAzNC43IDkuMiA0Mi45bDU5MiA0NjRjMTAuNCA4LjIgMjUuNSA2LjMgMzMuNy00LjFzNi4zLTI1LjUtNC4xLTMzLjdMNTI1LjYgMzg2LjdjMzkuNi00MC42IDY2LjQtODYuMSA3OS45LTExOC40YzMuMy03LjkgMy4zLTE2LjcgMC0yNC42Yy0xNC45LTM1LjctNDYuMi04Ny43LTkzLTEzMS4xQzQ2NS41IDY4LjggNDAwLjggMzIgMzIwIDMyYy02OC4yIDAtMTI1IDI2LjMtMTY5LjMgNjAuOEwzOC44IDUuMXpNMjIzLjEgMTQ5LjVDMjQ4LjYgMTI2LjIgMjgyLjcgMTEyIDMyMCAxMTJjNzkuNSAwIDE0NCA2NC41IDE0NCAxNDRjMCAyNC45LTYuMyA0OC4zLTE3LjQgNjguN0w0MDggMjk0LjVjOC40LTE5LjMgMTAuNi00MS40IDQuOC02My4zYy0xMS4xLTQxLjUtNDcuOC02OS40LTg4LjYtNzEuMWMtNS44LS4yLTkuMiA2LjEtNy40IDExLjdjMi4xIDYuNCAzLjMgMTMuMiAzLjMgMjAuM2MwIDEwLjItMi40IDE5LjgtNi42IDI4LjNsLTkwLjMtNzAuOHpNMzczIDM4OS45Yy0xNi40IDYuNS0zNC4zIDEwLjEtNTMgMTAuMWMtNzkuNSAwLTE0NC02NC41LTE0NC0xNDRjMC02LjkgLjUtMTMuNiAxLjQtMjAuMkw4My4xIDE2MS41QzYwLjMgMTkxLjIgNDQgMjIwLjggMzQuNSAyNDMuN2MtMy4zIDcuOS0zLjMgMTYuNyAwIDI0LjZjMTQuOSAzNS43IDQ2LjIgODcuNyA5MyAxMzEuMUMxNzQuNSA0NDMuMiAyMzkuMiA0ODAgMzIwIDQ4MGM0Ny44IDAgODkuOS0xMi45IDEyNi4yLTMyLjVMMzczIDM4OS45eiIvPjwvc3ZnPg==";
295
+ const imgSrcEyeOpened =
296
+ "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1NzYgNTEyIj48IS0tIUZvbnQgQXdlc29tZSBGcmVlIDYuNS4yIGJ5IEBmb250YXdlc29tZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tIExpY2Vuc2UgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbS9saWNlbnNlL2ZyZWUgQ29weXJpZ2h0IDIwMjQgRm9udGljb25zLCBJbmMuLS0+PHBhdGggZD0iTTI4OCAzMmMtODAuOCAwLTE0NS41IDM2LjgtMTkyLjYgODAuNkM0OC42IDE1NiAxNy4zIDIwOCAyLjUgMjQzLjdjLTMuMyA3LjktMy4zIDE2LjcgMCAyNC42QzE3LjMgMzA0IDQ4LjYgMzU2IDk1LjQgMzk5LjRDMTQyLjUgNDQzLjIgMjA3LjIgNDgwIDI4OCA0ODBzMTQ1LjUtMzYuOCAxOTIuNi04MC42YzQ2LjgtNDMuNSA3OC4xLTk1LjQgOTMtMTMxLjFjMy4zLTcuOSAzLjMtMTYuNyAwLTI0LjZjLTE0LjktMzUuNy00Ni4yLTg3LjctOTMtMTMxLjFDNDMzLjUgNjguOCAzNjguOCAzMiAyODggMzJ6TTE0NCAyNTZhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMTQ0LTY0YzAgMzUuMy0yOC43IDY0LTY0IDY0Yy03LjEgMC0xMy45LTEuMi0yMC4zLTMuM2MtNS41LTEuOC0xMS45IDEuNi0xMS43IDcuNGMuMyA2LjkgMS4zIDEzLjggMy4yIDIwLjdjMTMuNyA1MS4yIDY2LjQgODEuNiAxMTcuNiA2Ny45czgxLjYtNjYuNCA2Ny45LTExNy42Yy0xMS4xLTQxLjUtNDcuOC02OS40LTg4LjYtNzEuMWMtNS44LS4yLTkuMiA2LjEtNy40IDExLjdjMi4xIDYuNCAzLjMgMTMuMiAzLjMgMjAuM3oiLz48L3N2Zz4=";
297
+ toggleIcon.addEventListener("click", function () {
298
+ const passwordInput = document.getElementById("staticrypt-password");
299
+ if (passwordInput.type === "password") {
300
+ passwordInput.type = "text";
301
+ toggleIcon.src = imgSrcEyeOpened;
302
+ toggleIcon.alt = templateToggleAltHide;
303
+ toggleIcon.title = templateToggleAltHide;
304
+ } else {
305
+ passwordInput.type = "password";
306
+ toggleIcon.src = imgSrcEyeClosed;
307
+ toggleIcon.alt = templateToggleAltShow;
308
+ toggleIcon.title = templateToggleAltShow;
309
+ }
310
+ });
311
+
312
+ // handle password form submission
313
+ document.getElementById("staticrypt-form").addEventListener("submit", async function (e) {
314
+ e.preventDefault();
315
+
316
+ const password = document.getElementById("staticrypt-password").value,
317
+ isRememberChecked = document.getElementById("staticrypt-remember").checked;
318
+
319
+ const { isSuccessful } = await staticrypt.handleDecryptionOfPage(password, isRememberChecked);
320
+
321
+ if (!isSuccessful) {
322
+ alert(templateError);
323
+ }
324
+ });
325
+ </script>
326
+ </body>
327
+ </html>
Binary file
Binary file
@@ -0,0 +1,13 @@
1
+ <!-- drop: branded head meta + favicon + link-preview card (injected into <head>) -->
2
+ <link rel="icon" href="__DROP_FAVICON__" />
3
+ <meta property="og:type" content="website" />
4
+ <meta property="og:site_name" content="__DROP_DOMAIN__" />
5
+ <meta property="og:title" content="__DROP_TITLE__" />
6
+ <meta property="og:description" content="Shared securely via __DROP_DOMAIN__" />
7
+ <meta property="og:url" content="__DROP_URL__" />
8
+ <meta property="og:image" content="__DROP_OG_IMAGE__" />
9
+ <meta name="twitter:card" content="summary" />
10
+ <meta name="twitter:title" content="__DROP_TITLE__" />
11
+ <meta name="twitter:description" content="Shared securely via __DROP_DOMAIN__" />
12
+ <meta name="twitter:image" content="__DROP_OG_IMAGE__" />
13
+ <meta name="theme-color" content="#ff6b35" />