tangled
alpha
login
or
join now
baileytownsend.dev
/
pds-moover
126
fork
atom
Client side atproto account migrator in your web browser, along with services for backups and adversarial migrations.
pdsmoover.com
pds
atproto
migrations
moo
cow
126
fork
atom
overview
issues
2
pulls
1
pipelines
new flags no logic
baileytownsend.dev
7 months ago
580db768
0f931222
+78
3 changed files
expand all
collapse all
unified
split
index.html
public
style.css
src
pdsmoover.js
+59
index.html
···
3
<head>
4
<meta charset="UTF-8"/>
5
<link rel="icon" type="image/webp" href="/moo.webp"/>
0
0
6
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
7
<title>PDS MOOver</title>
8
<link rel="stylesheet" href="/style.css">
···
32
askForPlcToken: false,
33
plcToken: null,
34
plcStatus: null,
0
0
0
0
0
0
0
0
0
0
0
35
updateStatusHandler(status) {
36
console.log("Status update:", status);
37
document.getElementById("status-message").innerText = status;
···
151
x-model="inviteCode" required>
152
</div>
153
</div>
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
154
<div class="form-group">
155
<label for="confirmation">I understand the risks that come with doing an account migration.
156
(Can view them
···
3
<head>
4
<meta charset="UTF-8"/>
5
<link rel="icon" type="image/webp" href="/moo.webp"/>
6
+
<meta property="og:description" content="ATProto account migration tool"/>
7
+
<meta property="og:image" content="/moo.webp">
8
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
9
<title>PDS MOOver</title>
10
<link rel="stylesheet" href="/style.css">
···
34
askForPlcToken: false,
35
plcToken: null,
36
plcStatus: null,
37
+
//advance
38
+
showAdvance: false,
39
+
createNewAccount: true,
40
+
migrateRepo: true,
41
+
migrateBlobs: true,
42
+
migrateMissingBlobs: true,
43
+
migratePrefs: true,
44
+
migratePlcRecord: true,
45
+
toggleAdvanceMenu() {
46
+
this.showAdvance = !this.showAdvance;
47
+
},
48
updateStatusHandler(status) {
49
console.log("Status update:", status);
50
document.getElementById("status-message").innerText = status;
···
164
x-model="inviteCode" required>
165
</div>
166
</div>
167
+
<div class="form-group">
168
+
<button type="button" @click="toggleAdvanceMenu()" id="advance" name="advance">Advance Options
169
+
</button>
170
+
</div>
171
+
<div x-show="showAdvance" class="section">
172
+
<span>Pick and choose which actions to run</span>
173
+
<div class="form-control">
174
+
<label>
175
+
<input type="checkbox" id="createNewAccount" name="createNewAccount" x-model="createNewAccount">
176
+
Create New Account
177
+
</label>
178
+
</div>
179
+
<div class="form-control">
180
+
<label>
181
+
<input type="checkbox" id="migrateRepo" name="migrateRepo" x-model="migrateRepo">
182
+
Migrate Repo
183
+
</label>
184
+
</div>
185
+
<div class="form-control">
186
+
<label>
187
+
<input type="checkbox" id="migrateBlobs" name="migrateBlobs" x-model="migrateBlobs">
188
+
Migrate Blobs
189
+
</label>
190
+
</div>
191
+
<div class="form-control">
192
+
<label>
193
+
<input type="checkbox" id="migrateMissingBlobs" name="migrateMissingBlobs"
194
+
x-model="migrateMissingBlobs">
195
+
Migrate Missing Blobs
196
+
</label>
197
+
</div>
198
+
<div class="form-control">
199
+
<label>
200
+
<input type="checkbox" id="migratePrefs" name="migratePrefs" x-model="migratePrefs">
201
+
Migrate Prefs
202
+
</label>
203
+
</div>
204
+
<div class="form-control">
205
+
<label>
206
+
<input type="checkbox" id="migratePlcRecord" name="migratePlcRecord" x-model="migratePlcRecord">
207
+
Migrate PLC Record
208
+
</label>
209
+
</div>
210
+
211
+
</div>
212
+
213
<div class="form-group">
214
<label for="confirmation">I understand the risks that come with doing an account migration.
215
(Can view them
+10
public/style.css
···
124
font-weight: bold;
125
text-align: center;
126
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
0
0
0
0
0
0
0
0
0
0
127
}
···
124
font-weight: bold;
125
text-align: center;
126
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
127
+
}
128
+
129
+
.form-checkbox {
130
+
131
+
font-size: 2rem;
132
+
font-weight: bold;
133
+
line-height: 1.1;
134
+
display: grid;
135
+
grid-template-columns: 1em auto;
136
+
gap: 0.5em;
137
}
+9
src/pdsmoover.js
···
36
this.oldAgent = null;
37
this.newAgent = null;
38
this.missingBlobs = [];
0
0
0
0
0
0
0
0
0
39
}
40
41
/**
···
36
this.oldAgent = null;
37
this.newAgent = null;
38
this.missingBlobs = [];
39
+
//State for reruns
40
+
this.oldAccountStatus = null;
41
+
this.newAccountStatus = null;
42
+
this.createNewAccount = true;
43
+
this.migrateRepo = true;
44
+
this.migrateBlobs = true;
45
+
this.migrateMissingBlobs = true;
46
+
this.migratePrefs = true;
47
+
this.migratePlcRecord = true;
48
}
49
50
/**