···
1
1
{
2
2
"$schema": "https://unpkg.com/oxlint/configuration_schema.json",
3
3
-
"plugins": ["unicorn", "typescript", "oxc", "vue", "vitest"],
3
3
+
"plugins": ["unicorn", "typescript", "oxc"],
4
4
"jsPlugins": ["@e18e/eslint-plugin", "eslint-plugin-regexp"],
5
5
"categories": {
6
6
"correctness": "error",
···
32
32
this.migratePrefs = true
33
33
/** @type {boolean} */
34
34
this.migratePlcRecord = true
35
35
+
/**
36
36
+
* How many blobs have been uploaded to the new PDS in the current step
37
37
+
@type {number} */
38
38
+
this.uploadedBlobsCount = 0
39
39
+
}
40
40
+
41
41
+
/**
42
42
+
* Uploads blobs to the new PDS
43
43
+
* @param {AtpAgent} oldAgent
44
44
+
* @param {AtpAgent} newAgent
45
45
+
* @param {string} usersDid
46
46
+
* @param {[string]} cids
47
47
+
* @param {number} totalBlobs
48
48
+
* @param {function|null} statusUpdateHandler
49
49
+
*/
50
50
+
async uploadBlobs(oldAgent, newAgent, usersDid, cids, totalBlobs, statusUpdateHandler) {
51
51
+
console.log('uploading blobs', cids)
52
52
+
for (const cid of cids) {
53
53
+
try {
54
54
+
const blobRes = await oldAgent.com.atproto.sync.getBlob({
55
55
+
did: usersDid,
56
56
+
cid,
57
57
+
})
58
58
+
await newAgent.com.atproto.repo.uploadBlob(blobRes.data, {
59
59
+
encoding: blobRes.headers['content-type'],
60
60
+
})
61
61
+
this.uploadedBlobsCount++
62
62
+
if (this.uploadedBlobsCount % 10 === 0) {
63
63
+
safeStatusUpdate(
64
64
+
statusUpdateHandler,
65
65
+
`Migrating blobs: ${this.uploadedBlobsCount}/${totalBlobs}`,
66
66
+
)
67
67
+
}
68
68
+
} catch (error) {
69
69
+
console.error(error)
70
70
+
}
71
71
+
}
35
72
}
36
73
37
74
/**
···
61
98
twoFactorCode = null,
62
99
verificationCode = null,
63
100
) {
64
64
-
//Leaving this logic that either sets the agent to bsky.social, or the PDS since it's what I found worked best for migrations.
65
65
-
// handleAndPDSResolver should be able to handle it, but there have been edge cases and this was what worked best
66
101
oldHandle = cleanHandle(oldHandle)
67
102
let oldAgent
68
103
let usersDid
···
143
178
} catch (error) {
144
179
// Ideally should catch if the repo already exists, and if so silently log it and move along to the next step
145
180
if (error?.error === 'AlreadyExists') {
181
181
+
// Sets the migrate blobs flag to false so it moves on to just migrate missing blobs in the event of a retry
182
182
+
this.migrateBlobs = false
146
183
console.log('Repo already exists, logging in')
147
184
} else {
148
185
// Catches any other error and stops the migration process
···
186
223
limit: 100,
187
224
})
188
225
189
189
-
for (const cid of listedBlobs.data.cids) {
190
190
-
try {
191
191
-
const blobRes = await oldAgent.com.atproto.sync.getBlob({
192
192
-
did: usersDid,
193
193
-
cid,
194
194
-
})
195
195
-
await newAgent.com.atproto.repo.uploadBlob(blobRes.data, {
196
196
-
encoding: blobRes.headers['content-type'],
197
197
-
})
198
198
-
uploadedBlobs++
199
199
-
if (uploadedBlobs % 10 === 0) {
200
200
-
safeStatusUpdate(
201
201
-
statusUpdateHandler,
202
202
-
`Migrating blobs: ${uploadedBlobs}/${newAccountStatus.data.expectedBlobs}`,
203
203
-
)
204
204
-
}
205
205
-
} catch (error) {
206
206
-
console.error(error)
207
207
-
}
208
208
-
}
226
226
+
await this.uploadBlobs(
227
227
+
oldAgent,
228
228
+
newAgent,
229
229
+
usersDid,
230
230
+
listedBlobs.data.cids,
231
231
+
newAccountStatus.data.expectedBlobs,
232
232
+
statusUpdateHandler,
233
233
+
)
209
234
blobCursor = listedBlobs.data.cursor
210
235
} while (blobCursor)
236
236
+
// Resets since this is a shared state with missing blobs job
237
237
+
this.uploadedBlobsCount = 0
211
238
}
212
239
213
240
if (this.migrateMissingBlobs) {
···
233
260
limit: 100,
234
261
})
235
262
236
236
-
for (const recordBlob of missingBlobs.data.blobs) {
237
237
-
try {
238
238
-
const blobRes = await oldAgent.com.atproto.sync.getBlob({
239
239
-
did: usersDid,
240
240
-
cid: recordBlob.cid,
241
241
-
})
242
242
-
await newAgent.com.atproto.repo.uploadBlob(blobRes.data, {
243
243
-
encoding: blobRes.headers['content-type'],
244
244
-
})
245
245
-
if (missingUploadedBlobs % 10 === 0) {
246
246
-
safeStatusUpdate(
247
247
-
statusUpdateHandler,
248
248
-
`Migrating blobs: ${missingUploadedBlobs}/${totalMissingBlobs}`,
249
249
-
)
250
250
-
}
251
251
-
missingUploadedBlobs++
252
252
-
} catch (error) {
253
253
-
//TODO silently logging prob should list them so user can manually download
254
254
-
console.error(error)
255
255
-
this.missingBlobs.push(recordBlob.cid)
256
256
-
}
257
257
-
}
263
263
+
let missingCids = missingBlobs.data.blobs.map(blob => blob.cid)
264
264
+
await this.uploadBlobs(
265
265
+
oldAgent,
266
266
+
newAgent,
267
267
+
usersDid,
268
268
+
missingCids,
269
269
+
totalMissingBlobs,
270
270
+
statusUpdateHandler,
271
271
+
)
272
272
+
258
273
missingBlobCursor = missingBlobs.data.cursor
259
274
} while (missingBlobCursor)
275
275
+
// Resets since this is a shared state with the migrate blobs job
276
276
+
this.uploadedBlobsCount = 0
260
277
}
261
278
}
262
279
if (this.migratePrefs) {
···
269
286
270
287
if (this.migratePlcRecord) {
271
288
await oldAgent.com.atproto.identity.requestPlcOperationSignature()
272
272
-
safeStatusUpdate(statusUpdateHandler, 'Please check your email for a PLC token')
289
289
+
safeStatusUpdate(
290
290
+
statusUpdateHandler,
291
291
+
'Please check your email attached to your previous account for a PLC token',
292
292
+
)
273
293
}
274
294
}
275
295
···
34
34
"scripts": {
35
35
"dev": "vite",
36
36
"build": "vite build",
37
37
+
"build:watch": "vite build --watch",
37
38
"gen:types": "tsc -p .",
38
38
-
"preview": "vite preview",
39
39
-
"generate:lexicons": "lex build --lexicons lexicons --out lib/lexicons --clear"
39
39
+
"preview": "vite preview"
40
40
},
41
41
"devDependencies": {
42
42
"eslint": "^9.34.0",
···
17
17
"@atcute/client": "^4.0.5",
18
18
"@atcute/lexicons": "^1.2.2",
19
19
"@pds-moover/lexicons": "^1.0.1",
20
20
-
"@pds-moover/moover": "^1.0.6"
20
20
+
"@pds-moover/moover": "link:../packages/moover"
21
21
},
22
22
"devDependencies": {
23
23
"@eslint/compat": "^1.4.0",
···
30
30
"eslint": "^9.36.0",
31
31
"eslint-plugin-svelte": "^3.12.4",
32
32
"globals": "^16.4.0",
33
33
+
"oxlint": "^1.48.0",
33
34
"svelte": "^5.39.5",
34
35
"svelte-check": "^4.3.2",
35
36
"typescript": "^5.9.2",
···
21
21
specifier: ^1.0.1
22
22
version: 1.0.1
23
23
'@pds-moover/moover':
24
24
-
specifier: ^1.0.6
25
25
-
version: 1.0.6(@atcute/identity@1.1.1)(vite@7.1.12(@types/node@22.19.0))
24
24
+
specifier: link:../packages/moover
25
25
+
version: link:../packages/moover
26
26
devDependencies:
27
27
'@eslint/compat':
28
28
specifier: ^1.4.0
···
54
54
globals:
55
55
specifier: ^16.4.0
56
56
version: 16.5.0
57
57
+
oxlint:
58
58
+
specifier: ^1.48.0
59
59
+
version: 1.48.0
57
60
svelte:
58
61
specifier: ^5.39.5
59
62
version: 5.43.2
···
79
82
'@atcute/atproto@3.1.9':
80
83
resolution: {integrity: sha512-DyWwHCTdR4hY2BPNbLXgVmm7lI+fceOwWbE4LXbGvbvVtSn+ejSVFaAv01Ra3kWDha0whsOmbJL8JP0QPpf1+w==}
81
84
82
82
-
'@atcute/cbor@2.3.2':
83
83
-
resolution: {integrity: sha512-xP2SORSau/VVI00x2V4BjwIkHr6EQ7l/MXEOPaa4LGYtePFc4gnD4L1yN10dT5NEuUnvGEuCh6arLB7gz1smVQ==}
84
84
-
85
85
-
'@atcute/cid@2.4.1':
86
86
-
resolution: {integrity: sha512-bwhna69RCv7yetXudtj+2qrMPYvhhIQqvJz6YUpUS98v7OdF3X2dnye9Nig2NDrklZcuyOsu7sQo7GOykJXRLQ==}
87
87
-
88
85
'@atcute/client@4.0.5':
89
86
resolution: {integrity: sha512-R8Qen8goGmEkynYGg2m6XFlVmz0GTDvQ+9w+4QqOob+XMk8/WDpF4aImev7WKEde/rV2gjcqW7zM8E6W9NShDA==}
90
87
91
91
-
'@atcute/crypto@2.3.0':
92
92
-
resolution: {integrity: sha512-w5pkJKCjbNMQu+F4JRHbR3ROQyhi1wbn+GSC6WDQamcYHkZmEZk1/eoI354bIQOOfkEM6aFLv718iskrkon4GQ==}
93
93
-
94
94
-
'@atcute/did-plc@0.1.7':
95
95
-
resolution: {integrity: sha512-a7yOQNqViae3rB5/xa3U0EPJbFD9l8zOHXx6XASZ5F8+Vy2uTgXK3omurpNZ5UxRpy1ni1AMhSohXr61cqWbkg==}
96
96
-
97
97
-
'@atcute/identity-resolver@1.2.2':
98
98
-
resolution: {integrity: sha512-eUh/UH4bFvuXS0X7epYCeJC/kj4rbBXfSRumLEH4smMVwNOgTo7cL/0Srty+P/qVPoZEyXdfEbS0PHJyzoXmHw==}
99
99
-
peerDependencies:
100
100
-
'@atcute/identity': ^1.0.0
101
101
-
102
88
'@atcute/identity@1.1.1':
103
89
resolution: {integrity: sha512-zax42n693VEhnC+5tndvO2KLDTMkHOz8UExwmklvJv7R9VujfEwiSWhcv6Jgwb3ellaG8wjiQ1lMOIjLLvwh0Q==}
104
90
105
91
'@atcute/lexicons@1.2.2':
106
92
resolution: {integrity: sha512-bgEhJq5Z70/0TbK5sx+tAkrR8FsCODNiL2gUEvS5PuJfPxmFmRYNWaMGehxSPaXWpU2+Oa9ckceHiYbrItDTkA==}
107
107
-
108
108
-
'@atcute/lexicons@1.2.9':
109
109
-
resolution: {integrity: sha512-/RRHm2Cw9o8Mcsrq0eo8fjS9okKYLGfuFwrQ0YoP/6sdSDsXshaTLJsvLlcUcaDaSJ1YFOuHIo3zr2Om2F/16g==}
110
110
-
111
111
-
'@atcute/multibase@1.1.8':
112
112
-
resolution: {integrity: sha512-pJgtImMZKCjqwRbu+2GzB+4xQjKBXDwdZOzeqe0u97zYKRGftpGYGvYv3+pMe2xXe+msDyu7Nv8iJp+U14otTA==}
113
113
-
114
114
-
'@atcute/uint8array@1.1.1':
115
115
-
resolution: {integrity: sha512-3LsC8XB8TKe9q/5hOA5sFuzGaIFdJZJNewC5OKa3o/eU6+K7JR6see9Zy2JbQERNVnRl11EzbNov1efgLMAs4g==}
116
116
-
117
117
-
'@atcute/util-fetch@1.0.5':
118
118
-
resolution: {integrity: sha512-qjHj01BGxjSjIFdPiAjSARnodJIIyKxnCMMEcXMESo9TAyND6XZQqrie5fia+LlYWVXdpsTds8uFQwc9jdKTig==}
119
119
-
120
120
-
'@atcute/util-text@1.1.1':
121
121
-
resolution: {integrity: sha512-JH0SxzUQJAmbOBTYyhxQbkkI6M33YpjlVLEcbP5GYt43xgFArzV0FJVmEpvIj0kjsmphHB45b6IitdvxPdec9w==}
122
122
-
123
123
-
'@atproto/api@0.16.11':
124
124
-
resolution: {integrity: sha512-1dhfQNHiclb102RW+Ea8Nft5olfqU0Ev/vlQaSX6mWNo1aP5zT+sPODJ8+BTUOYk3vcuvL7QMkqA/rLYy2PMyw==}
125
93
126
94
'@atproto/common-web@0.4.3':
127
95
resolution: {integrity: sha512-nRDINmSe4VycJzPo6fP/hEltBcULFxt9Kw7fQk6405FyAWZiTluYHlXOnU7GkQfeUK44OENG1qFTBcmCJ7e8pg==}
···
374
342
'@jridgewell/trace-mapping@0.3.31':
375
343
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
376
344
377
377
-
'@noble/secp256k1@3.0.0':
378
378
-
resolution: {integrity: sha512-NJBaR352KyIvj3t6sgT/+7xrNyF9Xk9QlLSIqUGVUYlsnDTAUqY8LOmwpcgEx4AMJXRITQ5XEVHD+mMaPfr3mg==}
379
379
-
380
345
'@nodelib/fs.scandir@2.1.5':
381
346
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
382
347
engines: {node: '>= 8'}
···
389
354
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
390
355
engines: {node: '>= 8'}
391
356
357
357
+
'@oxlint/binding-android-arm-eabi@1.48.0':
358
358
+
resolution: {integrity: sha512-1Pz/stJvveO9ZO7ll4ZoEY3f6j2FiUgBLBcCRCiW6ylId9L9UKs+gn3X28m3eTnoiFCkhKwmJJ+VO6vwsu7Qtg==}
359
359
+
engines: {node: ^20.19.0 || >=22.12.0}
360
360
+
cpu: [arm]
361
361
+
os: [android]
362
362
+
363
363
+
'@oxlint/binding-android-arm64@1.48.0':
364
364
+
resolution: {integrity: sha512-Zc42RWGE8huo6Ht0lXKjd0NH2lWNmimQHUmD0JFcvShLOuwN+RSEE/kRakc2/0LIgOUuU/R7PaDMCOdQlPgNUQ==}
365
365
+
engines: {node: ^20.19.0 || >=22.12.0}
366
366
+
cpu: [arm64]
367
367
+
os: [android]
368
368
+
369
369
+
'@oxlint/binding-darwin-arm64@1.48.0':
370
370
+
resolution: {integrity: sha512-jgZs563/4vaG5jH2RSt2TSh8A2jwsFdmhLXrElMdm3Mmto0HPf85FgInLSNi9HcwzQFvkYV8JofcoUg2GH1HTA==}
371
371
+
engines: {node: ^20.19.0 || >=22.12.0}
372
372
+
cpu: [arm64]
373
373
+
os: [darwin]
374
374
+
375
375
+
'@oxlint/binding-darwin-x64@1.48.0':
376
376
+
resolution: {integrity: sha512-kvo87BujEUjCJREuWDC4aPh1WoXCRFFWE4C7uF6wuoMw2f6N2hypA/cHHcYn9DdL8R2RrgUZPefC8JExyeIMKA==}
377
377
+
engines: {node: ^20.19.0 || >=22.12.0}
378
378
+
cpu: [x64]
379
379
+
os: [darwin]
380
380
+
381
381
+
'@oxlint/binding-freebsd-x64@1.48.0':
382
382
+
resolution: {integrity: sha512-eyzzPaHQKn0RIM+ueDfgfJF2RU//Wp4oaKs2JVoVYcM5HjbCL36+O0S3wO5Xe1NWpcZIG3cEHc/SuOCDRqZDSg==}
383
383
+
engines: {node: ^20.19.0 || >=22.12.0}
384
384
+
cpu: [x64]
385
385
+
os: [freebsd]
386
386
+
387
387
+
'@oxlint/binding-linux-arm-gnueabihf@1.48.0':
388
388
+
resolution: {integrity: sha512-p3kSloztK7GRO7FyO3u38UCjZxQTl92VaLDsMQAq0eGoiNmeeEF1KPeE4+Fr+LSkQhF8WvJKSuls6TwOlurdPA==}
389
389
+
engines: {node: ^20.19.0 || >=22.12.0}
390
390
+
cpu: [arm]
391
391
+
os: [linux]
392
392
+
393
393
+
'@oxlint/binding-linux-arm-musleabihf@1.48.0':
394
394
+
resolution: {integrity: sha512-uWM+wiTqLW/V0ZmY/eyTWs8ykhIkzU+K2tz/8m35YepYEzohiUGRbnkpAFXj2ioXpQL+GUe5vmM3SLH6ozlfFw==}
395
395
+
engines: {node: ^20.19.0 || >=22.12.0}
396
396
+
cpu: [arm]
397
397
+
os: [linux]
398
398
+
399
399
+
'@oxlint/binding-linux-arm64-gnu@1.48.0':
400
400
+
resolution: {integrity: sha512-OhQNPjs/OICaYqxYJjKKMaIY7p3nJ9IirXcFoHKD+CQE1BZFCeUUAknMzUeLclDCfudH9Vb/UgjFm8+ZM5puAg==}
401
401
+
engines: {node: ^20.19.0 || >=22.12.0}
402
402
+
cpu: [arm64]
403
403
+
os: [linux]
404
404
+
405
405
+
'@oxlint/binding-linux-arm64-musl@1.48.0':
406
406
+
resolution: {integrity: sha512-adu5txuwGvQ4C4fjYHJD+vnY+OCwCixBzn7J3KF3iWlVHBBImcosSv+Ye+fbMMJui4HGjifNXzonjKm9pXmOiw==}
407
407
+
engines: {node: ^20.19.0 || >=22.12.0}
408
408
+
cpu: [arm64]
409
409
+
os: [linux]
410
410
+
411
411
+
'@oxlint/binding-linux-ppc64-gnu@1.48.0':
412
412
+
resolution: {integrity: sha512-inlQQRUnHCny/7b7wA6NjEoJSSZPNea4qnDhWyeqBYWx8ukf2kzNDSiamfhOw6bfAYPm/PVlkVRYaNXQbkLeTQ==}
413
413
+
engines: {node: ^20.19.0 || >=22.12.0}
414
414
+
cpu: [ppc64]
415
415
+
os: [linux]
416
416
+
417
417
+
'@oxlint/binding-linux-riscv64-gnu@1.48.0':
418
418
+
resolution: {integrity: sha512-YiJx6sW6bYebQDZRVWLKm/Drswx/hcjIgbLIhULSn0rRcBKc7d9V6mkqPjKDbhcxJgQD5Zi0yVccJiOdF40AWA==}
419
419
+
engines: {node: ^20.19.0 || >=22.12.0}
420
420
+
cpu: [riscv64]
421
421
+
os: [linux]
422
422
+
423
423
+
'@oxlint/binding-linux-riscv64-musl@1.48.0':
424
424
+
resolution: {integrity: sha512-zwSqxMgmb2ITamNfDv9Q9EKBc/4ZhCBP9gkg2hhcgR6sEVGPUDl1AKPC89CBKMxkmPUi3685C38EvqtZn5OtHw==}
425
425
+
engines: {node: ^20.19.0 || >=22.12.0}
426
426
+
cpu: [riscv64]
427
427
+
os: [linux]
428
428
+
429
429
+
'@oxlint/binding-linux-s390x-gnu@1.48.0':
430
430
+
resolution: {integrity: sha512-c/+2oUWAOsQB5JTem0rW8ODlZllF6pAtGSGXoLSvPTonKI1vAwaKhD9Qw1X36jRbcI3Etkpu/9z/RRjMba8vFQ==}
431
431
+
engines: {node: ^20.19.0 || >=22.12.0}
432
432
+
cpu: [s390x]
433
433
+
os: [linux]
434
434
+
435
435
+
'@oxlint/binding-linux-x64-gnu@1.48.0':
436
436
+
resolution: {integrity: sha512-PhauDqeFW5DGed6QxCY5lXZYKSlcBdCXJnH03ZNU6QmDZ0BFM/zSy1oPT2MNb1Afx1G6yOOVk8ErjWsQ7c59ng==}
437
437
+
engines: {node: ^20.19.0 || >=22.12.0}
438
438
+
cpu: [x64]
439
439
+
os: [linux]
440
440
+
441
441
+
'@oxlint/binding-linux-x64-musl@1.48.0':
442
442
+
resolution: {integrity: sha512-6d7LIFFZGiavbHndhf1cK9kG9qmy2Dmr37sV9Ep7j3H+ciFdKSuOzdLh85mEUYMih+b+esMDlF5DU0WQRZPQjw==}
443
443
+
engines: {node: ^20.19.0 || >=22.12.0}
444
444
+
cpu: [x64]
445
445
+
os: [linux]
446
446
+
447
447
+
'@oxlint/binding-openharmony-arm64@1.48.0':
448
448
+
resolution: {integrity: sha512-r+0KK9lK6vFp3tXAgDMOW32o12dxvKS3B9La1uYMGdWAMoSeu2RzG34KmzSpXu6MyLDl4aSVyZLFM8KGdEjwaw==}
449
449
+
engines: {node: ^20.19.0 || >=22.12.0}
450
450
+
cpu: [arm64]
451
451
+
os: [openharmony]
452
452
+
453
453
+
'@oxlint/binding-win32-arm64-msvc@1.48.0':
454
454
+
resolution: {integrity: sha512-Nkw/MocyT3HSp0OJsKPXrcbxZqSPMTYnLLfsqsoiFKoL1ppVNL65MFa7vuTxJehPlBkjy+95gUgacZtuNMECrg==}
455
455
+
engines: {node: ^20.19.0 || >=22.12.0}
456
456
+
cpu: [arm64]
457
457
+
os: [win32]
458
458
+
459
459
+
'@oxlint/binding-win32-ia32-msvc@1.48.0':
460
460
+
resolution: {integrity: sha512-reO1SpefvRmeZSP+WeyWkQd1ArxxDD1MyKgMUKuB8lNuUoxk9QEohYtKnsfsxJuFwMT0JTr7p9wZjouA85GzGQ==}
461
461
+
engines: {node: ^20.19.0 || >=22.12.0}
462
462
+
cpu: [ia32]
463
463
+
os: [win32]
464
464
+
465
465
+
'@oxlint/binding-win32-x64-msvc@1.48.0':
466
466
+
resolution: {integrity: sha512-T6zwhfcsrorqAybkOglZdPkTLlEwipbtdO1qjE+flbawvwOMsISoyiuaa7vM7zEyfq1hmDvMq1ndvkYFioranA==}
467
467
+
engines: {node: ^20.19.0 || >=22.12.0}
468
468
+
cpu: [x64]
469
469
+
os: [win32]
470
470
+
392
471
'@pds-moover/lexicons@1.0.1':
393
472
resolution: {integrity: sha512-fv5b/DtHM7FEo/JklyF9gdK0ainlb6mWjWrBe6cmSAeg9G/4O2jBlQUOqfOAICY9gOcrCpkOrk9PHgGw//JQ2A==}
394
394
-
395
395
-
'@pds-moover/moover@1.0.6':
396
396
-
resolution: {integrity: sha512-Zy+wcrZwoyne7NhuG+5MDFoJ+lpteCpfS6w2pmma9F2IKrVTj2G3Pca7ZVDaibGmCMTJMo21XYaPg+9nLXFD4Q==}
397
473
398
474
'@polka/url@1.0.0-next.29':
399
475
resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==}
···
547
623
'@standard-schema/spec@1.0.0':
548
624
resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==}
549
625
550
550
-
'@standard-schema/spec@1.1.0':
551
551
-
resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==}
552
552
-
553
626
'@sveltejs/acorn-typescript@1.0.6':
554
627
resolution: {integrity: sha512-4awhxtMh4cx9blePWl10HRHj8Iivtqj+2QdDCSMDzxG+XKa9+VCNupQuCuvzEhYPzZSrX+0gC+0lHA/0fFKKQQ==}
555
628
peerDependencies:
···
667
740
resolution: {integrity: sha512-uk574k8IU0rOF/AjniX8qbLSGURJVUCeM5e4MIMKBFFi8weeiLrG1fyQejyLXQpRZbU/1BuQasleV/RfHC3hHg==}
668
741
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
669
742
670
670
-
'@vue/reactivity@3.1.5':
671
671
-
resolution: {integrity: sha512-1tdfLmNjWG6t/CsPldh+foumYFo3cpyCHgBYQ34ylaMsJ+SNHQ1kApMIa8jN+i593zQuaw3AdWH0nJTARzCFhg==}
672
672
-
673
673
-
'@vue/shared@3.1.5':
674
674
-
resolution: {integrity: sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA==}
675
675
-
676
743
acorn-jsx@5.3.2:
677
744
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
678
745
peerDependencies:
···
686
753
ajv@6.12.6:
687
754
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
688
755
689
689
-
alpinejs@3.15.8:
690
690
-
resolution: {integrity: sha512-zxIfCRTBGvF1CCLIOMQOxAyBuqibxSEwS6Jm1a3HGA9rgrJVcjEWlwLcQTVGAWGS8YhAsTRLVrtQ5a5QT9bSSQ==}
691
691
-
692
756
ansi-styles@4.3.0:
693
757
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
694
758
engines: {node: '>=8'}
···
700
764
resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==}
701
765
engines: {node: '>= 0.4'}
702
766
703
703
-
await-lock@2.2.2:
704
704
-
resolution: {integrity: sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw==}
705
705
-
706
767
axobject-query@4.1.0:
707
768
resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
708
769
engines: {node: '>= 0.4'}
···
1062
1123
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
1063
1124
engines: {node: '>= 0.8.0'}
1064
1125
1126
1126
+
oxlint@1.48.0:
1127
1127
+
resolution: {integrity: sha512-m5vyVBgPtPhVCJc3xI//8je9lRc8bYuYB4R/1PH3VPGOjA4vjVhkHtyJukdEjYEjwrw4Qf1eIf+pP9xvfhfMow==}
1128
1128
+
engines: {node: ^20.19.0 || >=22.12.0}
1129
1129
+
hasBin: true
1130
1130
+
peerDependencies:
1131
1131
+
oxlint-tsgolint: '>=0.12.2'
1132
1132
+
peerDependenciesMeta:
1133
1133
+
oxlint-tsgolint:
1134
1134
+
optional: true
1135
1135
+
1065
1136
p-limit@3.1.0:
1066
1137
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
1067
1138
engines: {node: '>=10'}
···
1229
1300
resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
1230
1301
engines: {node: '>=12.0.0'}
1231
1302
1232
1232
-
tlds@1.261.0:
1233
1233
-
resolution: {integrity: sha512-QXqwfEl9ddlGBaRFXIvNKK6OhipSiLXuRuLJX5DErz0o0Q0rYxulWLdFryTkV5PkdZct5iMInwYEGe/eR++1AA==}
1234
1234
-
hasBin: true
1235
1235
-
1236
1303
to-regex-range@5.0.1:
1237
1304
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1238
1305
engines: {node: '>=8.0'}
···
1269
1336
undici-types@6.21.0:
1270
1337
resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
1271
1338
1272
1272
-
unicode-segmenter@0.14.5:
1273
1273
-
resolution: {integrity: sha512-jHGmj2LUuqDcX3hqY12Ql+uhUTn8huuxNZGq7GvtF6bSybzH3aFgedYu/KTzQStEgt1Ra2F3HxadNXsNjb3m3g==}
1274
1274
-
1275
1339
uri-js@4.4.1:
1276
1340
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
1277
1341
1278
1342
util-deprecate@1.0.2:
1279
1343
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
1280
1344
1281
1281
-
vite-plugin-full-reload@1.2.0:
1282
1282
-
resolution: {integrity: sha512-kz18NW79x0IHbxRSHm0jttP4zoO9P9gXh+n6UTwlNKnviTTEpOlum6oS9SmecrTtSr+muHEn5TUuC75UovQzcA==}
1283
1283
-
1284
1284
-
vite-rs-plugin@1.0.1:
1285
1285
-
resolution: {integrity: sha512-YhgflKQIRzuS5x66J3yICoVLH25D2fNU+jThK8tpYl/jGrXeIKT4w5VH1lkLPRC0SjK2ZCm9S6K9Z2ZFVDHjPQ==}
1286
1286
-
hasBin: true
1287
1287
-
peerDependencies:
1288
1288
-
vite: ^5.0.0
1289
1289
-
1290
1345
vite@7.1.12:
1291
1346
resolution: {integrity: sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==}
1292
1347
engines: {node: ^20.19.0 || >=22.12.0}
···
1364
1419
dependencies:
1365
1420
'@atcute/lexicons': 1.2.2
1366
1421
1367
1367
-
'@atcute/cbor@2.3.2':
1368
1368
-
dependencies:
1369
1369
-
'@atcute/cid': 2.4.1
1370
1370
-
'@atcute/multibase': 1.1.8
1371
1371
-
'@atcute/uint8array': 1.1.1
1372
1372
-
1373
1373
-
'@atcute/cid@2.4.1':
1374
1374
-
dependencies:
1375
1375
-
'@atcute/multibase': 1.1.8
1376
1376
-
'@atcute/uint8array': 1.1.1
1377
1377
-
1378
1422
'@atcute/client@4.0.5':
1379
1423
dependencies:
1380
1424
'@atcute/identity': 1.1.1
1381
1425
'@atcute/lexicons': 1.2.2
1382
1426
1383
1383
-
'@atcute/crypto@2.3.0':
1384
1384
-
dependencies:
1385
1385
-
'@atcute/multibase': 1.1.8
1386
1386
-
'@atcute/uint8array': 1.1.1
1387
1387
-
'@noble/secp256k1': 3.0.0
1388
1388
-
1389
1389
-
'@atcute/did-plc@0.1.7':
1390
1390
-
dependencies:
1391
1391
-
'@atcute/cbor': 2.3.2
1392
1392
-
'@atcute/cid': 2.4.1
1393
1393
-
'@atcute/crypto': 2.3.0
1394
1394
-
'@atcute/identity': 1.1.1
1395
1395
-
'@atcute/lexicons': 1.2.2
1396
1396
-
'@atcute/multibase': 1.1.8
1397
1397
-
'@atcute/uint8array': 1.1.1
1398
1398
-
'@badrap/valita': 0.4.6
1399
1399
-
1400
1400
-
'@atcute/identity-resolver@1.2.2(@atcute/identity@1.1.1)':
1401
1401
-
dependencies:
1402
1402
-
'@atcute/identity': 1.1.1
1403
1403
-
'@atcute/lexicons': 1.2.9
1404
1404
-
'@atcute/util-fetch': 1.0.5
1405
1405
-
'@badrap/valita': 0.4.6
1406
1406
-
1407
1427
'@atcute/identity@1.1.1':
1408
1428
dependencies:
1409
1429
'@atcute/lexicons': 1.2.2
···
1413
1433
dependencies:
1414
1434
'@standard-schema/spec': 1.0.0
1415
1435
esm-env: 1.2.2
1416
1416
-
1417
1417
-
'@atcute/lexicons@1.2.9':
1418
1418
-
dependencies:
1419
1419
-
'@atcute/uint8array': 1.1.1
1420
1420
-
'@atcute/util-text': 1.1.1
1421
1421
-
'@standard-schema/spec': 1.1.0
1422
1422
-
esm-env: 1.2.2
1423
1423
-
1424
1424
-
'@atcute/multibase@1.1.8':
1425
1425
-
dependencies:
1426
1426
-
'@atcute/uint8array': 1.1.1
1427
1427
-
1428
1428
-
'@atcute/uint8array@1.1.1': {}
1429
1429
-
1430
1430
-
'@atcute/util-fetch@1.0.5':
1431
1431
-
dependencies:
1432
1432
-
'@badrap/valita': 0.4.6
1433
1433
-
1434
1434
-
'@atcute/util-text@1.1.1':
1435
1435
-
dependencies:
1436
1436
-
unicode-segmenter: 0.14.5
1437
1437
-
1438
1438
-
'@atproto/api@0.16.11':
1439
1439
-
dependencies:
1440
1440
-
'@atproto/common-web': 0.4.3
1441
1441
-
'@atproto/lexicon': 0.5.1
1442
1442
-
'@atproto/syntax': 0.4.1
1443
1443
-
'@atproto/xrpc': 0.7.5
1444
1444
-
await-lock: 2.2.2
1445
1445
-
multiformats: 9.9.0
1446
1446
-
tlds: 1.261.0
1447
1447
-
zod: 3.25.76
1448
1436
1449
1437
'@atproto/common-web@0.4.3':
1450
1438
dependencies:
···
1630
1618
'@jridgewell/resolve-uri': 3.1.2
1631
1619
'@jridgewell/sourcemap-codec': 1.5.5
1632
1620
1633
1633
-
'@noble/secp256k1@3.0.0': {}
1634
1634
-
1635
1621
'@nodelib/fs.scandir@2.1.5':
1636
1622
dependencies:
1637
1623
'@nodelib/fs.stat': 2.0.5
···
1644
1630
'@nodelib/fs.scandir': 2.1.5
1645
1631
fastq: 1.19.1
1646
1632
1633
1633
+
'@oxlint/binding-android-arm-eabi@1.48.0':
1634
1634
+
optional: true
1635
1635
+
1636
1636
+
'@oxlint/binding-android-arm64@1.48.0':
1637
1637
+
optional: true
1638
1638
+
1639
1639
+
'@oxlint/binding-darwin-arm64@1.48.0':
1640
1640
+
optional: true
1641
1641
+
1642
1642
+
'@oxlint/binding-darwin-x64@1.48.0':
1643
1643
+
optional: true
1644
1644
+
1645
1645
+
'@oxlint/binding-freebsd-x64@1.48.0':
1646
1646
+
optional: true
1647
1647
+
1648
1648
+
'@oxlint/binding-linux-arm-gnueabihf@1.48.0':
1649
1649
+
optional: true
1650
1650
+
1651
1651
+
'@oxlint/binding-linux-arm-musleabihf@1.48.0':
1652
1652
+
optional: true
1653
1653
+
1654
1654
+
'@oxlint/binding-linux-arm64-gnu@1.48.0':
1655
1655
+
optional: true
1656
1656
+
1657
1657
+
'@oxlint/binding-linux-arm64-musl@1.48.0':
1658
1658
+
optional: true
1659
1659
+
1660
1660
+
'@oxlint/binding-linux-ppc64-gnu@1.48.0':
1661
1661
+
optional: true
1662
1662
+
1663
1663
+
'@oxlint/binding-linux-riscv64-gnu@1.48.0':
1664
1664
+
optional: true
1665
1665
+
1666
1666
+
'@oxlint/binding-linux-riscv64-musl@1.48.0':
1667
1667
+
optional: true
1668
1668
+
1669
1669
+
'@oxlint/binding-linux-s390x-gnu@1.48.0':
1670
1670
+
optional: true
1671
1671
+
1672
1672
+
'@oxlint/binding-linux-x64-gnu@1.48.0':
1673
1673
+
optional: true
1674
1674
+
1675
1675
+
'@oxlint/binding-linux-x64-musl@1.48.0':
1676
1676
+
optional: true
1677
1677
+
1678
1678
+
'@oxlint/binding-openharmony-arm64@1.48.0':
1679
1679
+
optional: true
1680
1680
+
1681
1681
+
'@oxlint/binding-win32-arm64-msvc@1.48.0':
1682
1682
+
optional: true
1683
1683
+
1684
1684
+
'@oxlint/binding-win32-ia32-msvc@1.48.0':
1685
1685
+
optional: true
1686
1686
+
1687
1687
+
'@oxlint/binding-win32-x64-msvc@1.48.0':
1688
1688
+
optional: true
1689
1689
+
1647
1690
'@pds-moover/lexicons@1.0.1':
1648
1691
dependencies:
1649
1692
'@atproto/lexicon': 0.5.1
1650
1693
'@atproto/xrpc': 0.7.5
1651
1651
-
1652
1652
-
'@pds-moover/moover@1.0.6(@atcute/identity@1.1.1)(vite@7.1.12(@types/node@22.19.0))':
1653
1653
-
dependencies:
1654
1654
-
'@atcute/cbor': 2.3.2
1655
1655
-
'@atcute/client': 4.0.5
1656
1656
-
'@atcute/crypto': 2.3.0
1657
1657
-
'@atcute/did-plc': 0.1.7
1658
1658
-
'@atcute/identity-resolver': 1.2.2(@atcute/identity@1.1.1)
1659
1659
-
'@atcute/lexicons': 1.2.2
1660
1660
-
'@atcute/multibase': 1.1.8
1661
1661
-
'@atproto/api': 0.16.11
1662
1662
-
'@pds-moover/lexicons': 1.0.1
1663
1663
-
alpinejs: 3.15.8
1664
1664
-
vite-plugin-full-reload: 1.2.0
1665
1665
-
vite-rs-plugin: 1.0.1(vite@7.1.12(@types/node@22.19.0))
1666
1666
-
transitivePeerDependencies:
1667
1667
-
- '@atcute/identity'
1668
1668
-
- vite
1669
1694
1670
1695
'@polka/url@1.0.0-next.29': {}
1671
1696
···
1773
1798
1774
1799
'@standard-schema/spec@1.0.0': {}
1775
1800
1776
1776
-
'@standard-schema/spec@1.1.0': {}
1777
1777
-
1778
1801
'@sveltejs/acorn-typescript@1.0.6(acorn@8.15.0)':
1779
1802
dependencies:
1780
1803
acorn: 8.15.0
···
1936
1959
'@typescript-eslint/types': 8.46.3
1937
1960
eslint-visitor-keys: 4.2.1
1938
1961
1939
1939
-
'@vue/reactivity@3.1.5':
1940
1940
-
dependencies:
1941
1941
-
'@vue/shared': 3.1.5
1942
1942
-
1943
1943
-
'@vue/shared@3.1.5': {}
1944
1944
-
1945
1962
acorn-jsx@5.3.2(acorn@8.15.0):
1946
1963
dependencies:
1947
1964
acorn: 8.15.0
···
1955
1972
json-schema-traverse: 0.4.1
1956
1973
uri-js: 4.4.1
1957
1974
1958
1958
-
alpinejs@3.15.8:
1959
1959
-
dependencies:
1960
1960
-
'@vue/reactivity': 3.1.5
1961
1961
-
1962
1975
ansi-styles@4.3.0:
1963
1976
dependencies:
1964
1977
color-convert: 2.0.1
···
1966
1979
argparse@2.0.1: {}
1967
1980
1968
1981
aria-query@5.3.2: {}
1969
1969
-
1970
1970
-
await-lock@2.2.2: {}
1971
1982
1972
1983
axobject-query@4.1.0: {}
1973
1984
···
2329
2340
type-check: 0.4.0
2330
2341
word-wrap: 1.2.5
2331
2342
2343
2343
+
oxlint@1.48.0:
2344
2344
+
optionalDependencies:
2345
2345
+
'@oxlint/binding-android-arm-eabi': 1.48.0
2346
2346
+
'@oxlint/binding-android-arm64': 1.48.0
2347
2347
+
'@oxlint/binding-darwin-arm64': 1.48.0
2348
2348
+
'@oxlint/binding-darwin-x64': 1.48.0
2349
2349
+
'@oxlint/binding-freebsd-x64': 1.48.0
2350
2350
+
'@oxlint/binding-linux-arm-gnueabihf': 1.48.0
2351
2351
+
'@oxlint/binding-linux-arm-musleabihf': 1.48.0
2352
2352
+
'@oxlint/binding-linux-arm64-gnu': 1.48.0
2353
2353
+
'@oxlint/binding-linux-arm64-musl': 1.48.0
2354
2354
+
'@oxlint/binding-linux-ppc64-gnu': 1.48.0
2355
2355
+
'@oxlint/binding-linux-riscv64-gnu': 1.48.0
2356
2356
+
'@oxlint/binding-linux-riscv64-musl': 1.48.0
2357
2357
+
'@oxlint/binding-linux-s390x-gnu': 1.48.0
2358
2358
+
'@oxlint/binding-linux-x64-gnu': 1.48.0
2359
2359
+
'@oxlint/binding-linux-x64-musl': 1.48.0
2360
2360
+
'@oxlint/binding-openharmony-arm64': 1.48.0
2361
2361
+
'@oxlint/binding-win32-arm64-msvc': 1.48.0
2362
2362
+
'@oxlint/binding-win32-ia32-msvc': 1.48.0
2363
2363
+
'@oxlint/binding-win32-x64-msvc': 1.48.0
2364
2364
+
2332
2365
p-limit@3.1.0:
2333
2366
dependencies:
2334
2367
yocto-queue: 0.1.0
···
2504
2537
fdir: 6.5.0(picomatch@4.0.3)
2505
2538
picomatch: 4.0.3
2506
2539
2507
2507
-
tlds@1.261.0: {}
2508
2508
-
2509
2540
to-regex-range@5.0.1:
2510
2541
dependencies:
2511
2542
is-number: 7.0.0
···
2539
2570
2540
2571
undici-types@6.21.0: {}
2541
2572
2542
2542
-
unicode-segmenter@0.14.5: {}
2543
2543
-
2544
2573
uri-js@4.4.1:
2545
2574
dependencies:
2546
2575
punycode: 2.3.1
2547
2576
2548
2577
util-deprecate@1.0.2: {}
2549
2549
-
2550
2550
-
vite-plugin-full-reload@1.2.0:
2551
2551
-
dependencies:
2552
2552
-
picocolors: 1.1.1
2553
2553
-
picomatch: 2.3.1
2554
2554
-
2555
2555
-
vite-rs-plugin@1.0.1(vite@7.1.12(@types/node@22.19.0)):
2556
2556
-
dependencies:
2557
2557
-
vite: 7.1.12(@types/node@22.19.0)
2558
2558
-
vite-plugin-full-reload: 1.2.0
2559
2578
2560
2579
vite@7.1.12(@types/node@22.19.0):
2561
2580
dependencies:
···
138
138
justify-content: center;
139
139
}
140
140
141
141
-
142
141
.section {
143
142
margin-top: 30px;
144
143
}
···
179
178
}
180
179
181
180
.form-checkbox {
182
182
-
183
181
font-size: 2rem;
184
182
font-weight: bold;
185
183
line-height: 1.1;
···
244
242
text-decoration: none;
245
243
padding: 6px 10px;
246
244
border-radius: 8px;
247
247
-
transition: background-color 0.2s ease, color 0.2s ease;
245
245
+
transition:
246
246
+
background-color 0.2s ease,
247
247
+
color 0.2s ease;
248
248
}
249
249
250
250
.nav-links a:hover,
···
326
326
flex-direction: column;
327
327
gap: 4px;
328
328
padding: 10px 16px 12px 16px;
329
329
-
background: rgba(36, 36, 36, 0.95); /* solid enough to not bleed into title */
329
329
+
background: rgba(
330
330
+
36,
331
331
+
36,
332
332
+
36,
333
333
+
0.95
334
334
+
); /* solid enough to not bleed into title */
330
335
backdrop-filter: saturate(180%) blur(10px);
331
336
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
332
337
z-index: 1001; /* above page content */
···
426
431
}
427
432
}
428
433
429
429
-
430
434
/* Stats grid and cards for the index page */
431
435
.stats-grid {
432
436
display: grid;
···
462
466
font-size: 0.85rem;
463
467
opacity: 0.7;
464
468
margin-top: 6px;
465
465
-
}
469
469
+
}
470
470
+
471
471
+
.warning {
472
472
+
/*text-decoration: underline;*/
473
473
+
font-weight: bold;
474
474
+
}
···
4
4
import {resolve} from '$app/paths';
5
5
import {Migrator} from '@pds-moover/moover';
6
6
import SignThePapers from './SignThePapers.svelte';
7
7
-
import Captcha from './Captcha.svelte';
7
7
+
import Captcha from '$lib/components/Captcha.svelte';
8
8
+
8
9
9
10
let {data} = $props();
10
11
···
66
67
let askForPlcToken = $state(false);
67
68
let disableSubmit = $state(false);
68
69
let showCaptcha = $state(false);
70
70
+
let migrationInProgress = $state(false);
69
71
70
72
let errorMessage: null | string = $state(null);
71
73
let statusMessage: null | string = $state(null);
···
134
136
135
137
async function performMigration() {
136
138
try {
137
137
-
139
139
+
migrationInProgress = true;
138
140
if (showTwoFactorCodeInput) {
139
141
if (showTwoFactorCodeInput === null) {
140
142
errorMessage = 'Please enter the 2FA that was sent to your email.'
···
151
153
migrator.migratePrefs = formData.migratePrefs;
152
154
migrator.migratePlcRecord = formData.migratePlcRecord;
153
155
154
154
-
console.log(formData.newPds, newHandle);
155
156
156
157
updateStatusHandler('Starting migration...');
157
158
showStatusMessage = true;
···
183
184
}
184
185
//@ts-expect-error: JS being js. doesn't like not having the type'
185
186
errorMessage = error.message;
187
187
+
// migrationInProgress = false;
186
188
}
187
189
}
190
190
+
188
191
</script>
189
192
190
193
<svelte:head>
···
194
197
</svelte:head>
195
198
196
199
<div class="container">
197
197
-
<MooHeader title="PDS MOOver"/>
198
198
-
{#if !askForPlcToken}
200
200
+
<MooHeader title="PDS MOOver"/>
201
201
+
{#if !migrationInProgress}
199
202
<a href={resolve('/info')}>Idk if I trust a cow to move my atproto account to a new PDS</a>
200
203
<br/>
201
204
<a href="https://blacksky.community/profile/did:plc:g7j6qok5us4hjqlwjxwrrkjm/post/3lw3hcuojck2u">Video guide for
202
205
joining blacksky.app</a>
203
206
{#if showCaptcha}
204
207
<Captcha
205
205
-
pdsUrl={formData.newPds}
208
208
+
pdsUrl={`https://${cleanSelectedPds}`}
206
209
handle={newHandle}
207
210
onSuccess={handleCaptchaSuccess}
208
211
onError={handleCaptchaError}
···
388
391
<span>I understand</span>
389
392
</label>
390
393
</div>
394
394
+
<div>
395
395
+
<button disabled={disableSubmit}
396
396
+
type="submit">{selectedPds ? `MOOve to ${cleanSelectedPds}` : 'MOOve'}</button>
397
397
+
</div>
398
398
+
399
399
+
</form>
400
400
+
{/if}
401
401
+
{:else}
402
402
+
{#if !askForPlcToken}
403
403
+
<div id="messageBoxes">
404
404
+
<div class="warning">***Please make sure to stay on this page during the MOOve for the
405
405
+
best result.***
406
406
+
</div>
407
407
+
391
408
{#if errorMessage !== null}
392
409
<div class="error-message">{errorMessage}</div>
410
410
+
411
411
+
<div id="status-message" class="status-message">A error has occurred. Please take a screenshot of this screen for support. You can also retry by refreshing the page, it will not harm your account.</div>
412
412
+
393
413
{/if}
394
414
395
415
{#if showStatusMessage}
396
396
-
<div id="warning">*Please make sure to stay on this page during the MOOve for the
397
397
-
best result
398
398
-
</div>
399
416
<div id="status-message" class="status-message">{statusMessage}</div>
400
417
{/if}
418
418
+
</div>
419
419
+
{/if}
420
420
+
{/if}
401
421
402
422
403
403
-
<div>
404
404
-
<button disabled={disableSubmit}
405
405
-
type="submit">{selectedPds ? `MOOve to ${cleanSelectedPds}` : 'MOOve'}</button>
406
406
-
</div>
407
407
-
408
408
-
</form>
409
409
-
{/if}
410
410
-
{:else}
423
423
+
{#if askForPlcToken}
411
424
<SignThePapers migrator={migrator} newHandle={newHandle}/>
412
425
{/if}
413
413
-
</div>
426
426
+
427
427
+
428
428
+
</div>
···
1
1
<script lang="ts">
2
2
import {onMount} from 'svelte';
3
3
+
import { browser } from '$app/environment';
3
4
4
5
interface CaptchaProps {
5
6
pdsUrl: string;
···
21
22
let isLoading = $state(true);
22
23
23
24
25
25
+
24
26
const gateUrl = $derived(
25
25
-
`${pdsUrl}/gate/signup?state=${encodeURIComponent(captcha_state)}&handle=${encodeURIComponent(handle)}&redirect_url=${encodeURIComponent(window.location.origin)}`,
27
27
+
`${pdsUrl}/gate/signup?state=${encodeURIComponent(captcha_state)}&handle=${encodeURIComponent(handle)}&redirect_url=${encodeURIComponent(browser ? window.location.origin : 'https://pdsmoover.com')}`,
26
28
);
27
29
28
30
// Monitor iframe for URL changes
···
80
80
<form onsubmit="{signPlcOperation}">
81
81
{#if !done}
82
82
<div>
83
83
-
<h2>Please enter your PLC Token you received in an email</h2>
83
83
+
<h2>Please check your email attached to your previous account for a PLC token to enter below</h2>
84
84
<div class="form-group">
85
85
<label for="plc-token">PLC Token:</label>
86
86
<input type="text" id="plc-token" name="plc-token" bind:value={plcToken} required>
87
87
</div>
88
88
-
<p style="text-align: left">You can now select to add a new Rotation Key during migration and sign up
89
89
-
for PDS MOOver's free backup service. With a Rotation Key and backups if your new PDS ever goes down
90
90
-
you can recover your account and it's data.</p>
88
88
+
<p style="text-align: left">
89
89
+
Please check the boxes below if you would like to add a Rotation Key to your account and to sign up for PDS MOOver's free backup service.
90
90
+
With a Rotation Key and backups if your new PDS ever goes down
91
91
+
you can recover your account and it's data. This is not required but highly recommended.</p>
91
92
<div class="form-group">
92
93
<label for="rotation-key" class="moove-checkbox-label">
93
94
<input bind:checked={createANewRotationKey} type="checkbox" id="rotation-key"
···
165
166
166
167
{#if done}
167
168
<div class="status-message">Congratulations! You have MOOved to a new PDS! Remember to use
168
168
-
your new PDS URL under "Hosting provider" when logging in on Bluesky. Can find more detail information
169
169
+
your new PDS URL under "Hosting provider" when logging in on Bluesky. If you cannot login or see "Your account is deactivated" please follow the directions here
169
170
<a href={resolve('/info#cant-login')}>here.</a></div>
170
171
{:else }
171
172
<div>
···
175
176
176
177
177
178
</form>
178
178
-
</div>
179
179
+
</div>