@getcirrus/pds 0.7.0 → 0.8.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.
- package/README.md +18 -0
- package/dist/cli.js +127 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +180 -7
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -177,6 +177,24 @@ pds migrate --clean # Reset and re-import
|
|
|
177
177
|
pds activate # Go live again
|
|
178
178
|
```
|
|
179
179
|
|
|
180
|
+
### `pds migrate-token`
|
|
181
|
+
|
|
182
|
+
Generates a migration token for migrating away from this PDS to another one.
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
pds migrate-token # Generate token for production PDS
|
|
186
|
+
pds migrate-token --dev # Generate token for local development PDS
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
When migrating to a new PDS, the destination will ask for a confirmation token. This command generates a stateless HMAC-based token that:
|
|
190
|
+
|
|
191
|
+
- Is valid for 15 minutes
|
|
192
|
+
- Contains your DID and expiry time
|
|
193
|
+
- Is cryptographically signed with your JWT secret
|
|
194
|
+
- Requires no database storage
|
|
195
|
+
|
|
196
|
+
The token is copied to your clipboard and displayed in the terminal. After migration completes, run `pds deactivate` on this PDS.
|
|
197
|
+
|
|
180
198
|
### `pds passkey`
|
|
181
199
|
|
|
182
200
|
Manage passkeys for passwordless authentication.
|
package/dist/cli.js
CHANGED
|
@@ -977,6 +977,27 @@ var PDSClient = class PDSClient {
|
|
|
977
977
|
}
|
|
978
978
|
return res.json();
|
|
979
979
|
}
|
|
980
|
+
/**
|
|
981
|
+
* Get a migration token for outbound migration.
|
|
982
|
+
* This token can be used to migrate to another PDS.
|
|
983
|
+
*/
|
|
984
|
+
async getMigrationToken() {
|
|
985
|
+
const url = new URL("/xrpc/gg.mk.experimental.getMigrationToken", this.baseUrl);
|
|
986
|
+
const headers = {};
|
|
987
|
+
if (this.authToken) headers["Authorization"] = `Bearer ${this.authToken}`;
|
|
988
|
+
const res = await fetch(url.toString(), {
|
|
989
|
+
method: "GET",
|
|
990
|
+
headers
|
|
991
|
+
});
|
|
992
|
+
if (!res.ok) return {
|
|
993
|
+
success: false,
|
|
994
|
+
error: (await res.json().catch(() => ({}))).message ?? `Request failed: ${res.status}`
|
|
995
|
+
};
|
|
996
|
+
return {
|
|
997
|
+
success: true,
|
|
998
|
+
token: (await res.json()).token
|
|
999
|
+
};
|
|
1000
|
+
}
|
|
980
1001
|
static RELAY_URLS = ["https://relay1.us-west.bsky.network", "https://relay1.us-east.bsky.network"];
|
|
981
1002
|
/**
|
|
982
1003
|
* Get relay's view of this PDS host status from a single relay.
|
|
@@ -1192,20 +1213,22 @@ async function saveTo1Password(key, handle) {
|
|
|
1192
1213
|
* Captures output and throws on non-zero exit code.
|
|
1193
1214
|
* Use this for running npm/pnpm/yarn scripts etc.
|
|
1194
1215
|
*/
|
|
1195
|
-
function runCommand(cmd, args) {
|
|
1216
|
+
function runCommand(cmd, args, options = {}) {
|
|
1196
1217
|
return new Promise((resolve$1, reject) => {
|
|
1197
|
-
const child = spawn(cmd, args, { stdio: "pipe" });
|
|
1218
|
+
const child = spawn(cmd, args, { stdio: options.stream ? "inherit" : "pipe" });
|
|
1198
1219
|
let output = "";
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1220
|
+
if (!options.stream) {
|
|
1221
|
+
child.stdout?.on("data", (data) => {
|
|
1222
|
+
output += data.toString();
|
|
1223
|
+
});
|
|
1224
|
+
child.stderr?.on("data", (data) => {
|
|
1225
|
+
output += data.toString();
|
|
1226
|
+
});
|
|
1227
|
+
}
|
|
1205
1228
|
child.on("close", (code) => {
|
|
1206
1229
|
if (code === 0) resolve$1();
|
|
1207
1230
|
else {
|
|
1208
|
-
if (output) console.error(output);
|
|
1231
|
+
if (output && !options.stream) console.error(output);
|
|
1209
1232
|
reject(/* @__PURE__ */ new Error(`${cmd} ${args.join(" ")} failed with code ${code}`));
|
|
1210
1233
|
}
|
|
1211
1234
|
});
|
|
@@ -2098,14 +2121,12 @@ const initCommand = defineCommand({
|
|
|
2098
2121
|
initialValue: true
|
|
2099
2122
|
});
|
|
2100
2123
|
if (!p.isCancel(deployWorker) && deployWorker) {
|
|
2101
|
-
|
|
2124
|
+
p.log.step("Deploying to Cloudflare...");
|
|
2102
2125
|
try {
|
|
2103
|
-
await runCommand(pm
|
|
2104
|
-
|
|
2105
|
-
spinner.stop("Deployed to Cloudflare! 🚀");
|
|
2126
|
+
await runCommand(pm, ["run", "deploy"], { stream: true });
|
|
2127
|
+
p.log.success("Deployed to Cloudflare! 🚀");
|
|
2106
2128
|
deployed = true;
|
|
2107
2129
|
} catch (error) {
|
|
2108
|
-
spinner.stop("Deployment failed");
|
|
2109
2130
|
p.log.error(`Failed to deploy: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
2110
2131
|
p.log.info(`You can deploy manually with: ${formatCommand(pm, "deploy")}`);
|
|
2111
2132
|
}
|
|
@@ -2495,6 +2516,97 @@ function showNextSteps(pm, sourceDomain) {
|
|
|
2495
2516
|
]), "Almost there!");
|
|
2496
2517
|
}
|
|
2497
2518
|
|
|
2519
|
+
//#endregion
|
|
2520
|
+
//#region src/cli/commands/migrate-token.ts
|
|
2521
|
+
/**
|
|
2522
|
+
* Generate a migration token for outbound migration
|
|
2523
|
+
*
|
|
2524
|
+
* Calls the PDS API to generate a stateless HMAC token that another PDS
|
|
2525
|
+
* can use to request a signed PLC operation. The token is valid for 15 minutes.
|
|
2526
|
+
*/
|
|
2527
|
+
const migrateTokenCommand = defineCommand({
|
|
2528
|
+
meta: {
|
|
2529
|
+
name: "migrate-token",
|
|
2530
|
+
description: "Generate a migration token for moving to another PDS"
|
|
2531
|
+
},
|
|
2532
|
+
args: { dev: {
|
|
2533
|
+
type: "boolean",
|
|
2534
|
+
description: "Target local development server instead of production",
|
|
2535
|
+
default: false
|
|
2536
|
+
} },
|
|
2537
|
+
async run({ args }) {
|
|
2538
|
+
const isDev = args.dev;
|
|
2539
|
+
const pm = detectPackageManager();
|
|
2540
|
+
p.intro("Generate Migration Token");
|
|
2541
|
+
const spinner = p.spinner();
|
|
2542
|
+
spinner.start("Loading configuration...");
|
|
2543
|
+
const wranglerVars = getVars();
|
|
2544
|
+
const config = {
|
|
2545
|
+
...readDevVars(),
|
|
2546
|
+
...wranglerVars
|
|
2547
|
+
};
|
|
2548
|
+
const pdsHostname = config.PDS_HOSTNAME;
|
|
2549
|
+
const authToken = config.AUTH_TOKEN;
|
|
2550
|
+
if (!pdsHostname && !isDev) {
|
|
2551
|
+
spinner.stop("No PDS_HOSTNAME configured");
|
|
2552
|
+
p.log.error("Run 'pds init' first to set up your PDS.");
|
|
2553
|
+
p.outro("Token generation cancelled.");
|
|
2554
|
+
process.exit(1);
|
|
2555
|
+
}
|
|
2556
|
+
if (!authToken) {
|
|
2557
|
+
spinner.stop("No AUTH_TOKEN found");
|
|
2558
|
+
p.log.error("AUTH_TOKEN is required to authenticate with your PDS.");
|
|
2559
|
+
p.outro("Token generation cancelled.");
|
|
2560
|
+
process.exit(1);
|
|
2561
|
+
}
|
|
2562
|
+
let targetUrl;
|
|
2563
|
+
try {
|
|
2564
|
+
targetUrl = getTargetUrl(isDev, pdsHostname);
|
|
2565
|
+
} catch (err) {
|
|
2566
|
+
spinner.stop("Configuration error");
|
|
2567
|
+
p.log.error(err instanceof Error ? err.message : "Configuration error");
|
|
2568
|
+
p.outro("Token generation cancelled.");
|
|
2569
|
+
process.exit(1);
|
|
2570
|
+
}
|
|
2571
|
+
spinner.stop("Configuration loaded");
|
|
2572
|
+
spinner.start("Connecting to PDS...");
|
|
2573
|
+
const pdsClient = new PDSClient(targetUrl, authToken);
|
|
2574
|
+
if (!await pdsClient.healthCheck()) {
|
|
2575
|
+
spinner.stop("PDS not responding");
|
|
2576
|
+
p.log.error(`Your PDS isn't responding at ${targetUrl}`);
|
|
2577
|
+
if (isDev) p.log.info(`Start it with: ${formatCommand(pm, "dev")}`);
|
|
2578
|
+
else p.log.info(`Make sure your worker is deployed: ${formatCommand(pm, "deploy")}`);
|
|
2579
|
+
p.outro("Token generation cancelled.");
|
|
2580
|
+
process.exit(1);
|
|
2581
|
+
}
|
|
2582
|
+
spinner.stop("Connected to PDS");
|
|
2583
|
+
spinner.start("Generating migration token...");
|
|
2584
|
+
const result = await pdsClient.getMigrationToken();
|
|
2585
|
+
if (!result.success || !result.token) {
|
|
2586
|
+
spinner.stop("Failed to generate token");
|
|
2587
|
+
p.log.error(result.error ?? "Could not generate migration token");
|
|
2588
|
+
p.outro("Token generation cancelled.");
|
|
2589
|
+
process.exit(1);
|
|
2590
|
+
}
|
|
2591
|
+
spinner.stop("Token generated");
|
|
2592
|
+
if (await copyToClipboard(result.token)) p.log.success("Migration token copied to clipboard!");
|
|
2593
|
+
else p.log.info("Could not copy to clipboard. Token:");
|
|
2594
|
+
console.log("");
|
|
2595
|
+
console.log(pc.bold(result.token));
|
|
2596
|
+
console.log("");
|
|
2597
|
+
p.note([
|
|
2598
|
+
"This token is valid for 15 minutes.",
|
|
2599
|
+
"",
|
|
2600
|
+
"Paste it into the new PDS when prompted for",
|
|
2601
|
+
"a migration/confirmation code.",
|
|
2602
|
+
"",
|
|
2603
|
+
"Once migration is complete, you can deactivate",
|
|
2604
|
+
"this PDS with: pnpm pds deactivate"
|
|
2605
|
+
].join("\n"), "Next Steps");
|
|
2606
|
+
p.outro("Good luck with the migration!");
|
|
2607
|
+
}
|
|
2608
|
+
});
|
|
2609
|
+
|
|
2498
2610
|
//#endregion
|
|
2499
2611
|
//#region src/cli/utils/plc-client.ts
|
|
2500
2612
|
/**
|
|
@@ -3724,6 +3836,7 @@ runMain(defineCommand({
|
|
|
3724
3836
|
secret: secretCommand,
|
|
3725
3837
|
passkey: passkeyCommand,
|
|
3726
3838
|
migrate: migrateCommand,
|
|
3839
|
+
"migrate-token": migrateTokenCommand,
|
|
3727
3840
|
identity: identityCommand,
|
|
3728
3841
|
activate: activateCommand,
|
|
3729
3842
|
deactivate: deactivateCommand,
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/storage.ts","../src/oauth-storage.ts","../src/blobs.ts","../src/types.ts","../src/account-do.ts","../src/index.ts"],"sourcesContent":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/storage.ts","../src/oauth-storage.ts","../src/blobs.ts","../src/types.ts","../src/account-do.ts","../src/index.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -8,7 +8,7 @@ import { CODEC_RAW, create, fromString, toString } from "@atcute/cid";
|
|
|
8
8
|
import { Hono } from "hono";
|
|
9
9
|
import { cors } from "hono/cors";
|
|
10
10
|
import { isDid, isHandle } from "@atcute/lexicons/syntax";
|
|
11
|
-
import { SignJWT, jwtVerify } from "jose";
|
|
11
|
+
import { SignJWT, base64url, jwtVerify } from "jose";
|
|
12
12
|
import { compare, compare as compare$1 } from "bcryptjs";
|
|
13
13
|
import { ATProtoOAuthProvider } from "@getcirrus/oauth-provider";
|
|
14
14
|
import { generateAuthenticationOptions, generateRegistrationOptions, verifyAuthenticationResponse, verifyRegistrationResponse } from "@simplewebauthn/server";
|
|
@@ -1816,7 +1816,7 @@ function extractBlobCids(obj) {
|
|
|
1816
1816
|
|
|
1817
1817
|
//#endregion
|
|
1818
1818
|
//#region src/service-auth.ts
|
|
1819
|
-
const
|
|
1819
|
+
const SERVICE_JWT_EXPIRY_SECONDS = 300;
|
|
1820
1820
|
/**
|
|
1821
1821
|
* Shared keypair cache for signing and verification.
|
|
1822
1822
|
*/
|
|
@@ -1847,7 +1847,7 @@ function noUndefinedVals(obj) {
|
|
|
1847
1847
|
async function createServiceJwt(params) {
|
|
1848
1848
|
const { iss, aud, keypair } = params;
|
|
1849
1849
|
const iat = Math.floor(Date.now() / 1e3);
|
|
1850
|
-
const exp = iat +
|
|
1850
|
+
const exp = iat + SERVICE_JWT_EXPIRY_SECONDS;
|
|
1851
1851
|
const lxm = params.lxm ?? void 0;
|
|
1852
1852
|
const jti = randomStr(16, "hex");
|
|
1853
1853
|
const header = {
|
|
@@ -1893,7 +1893,7 @@ async function verifyServiceJwt(token, signingKey, expectedAudience, expectedIss
|
|
|
1893
1893
|
|
|
1894
1894
|
//#endregion
|
|
1895
1895
|
//#region src/session.ts
|
|
1896
|
-
const ACCESS_TOKEN_LIFETIME = "
|
|
1896
|
+
const ACCESS_TOKEN_LIFETIME = "15m";
|
|
1897
1897
|
const REFRESH_TOKEN_LIFETIME = "90d";
|
|
1898
1898
|
/**
|
|
1899
1899
|
* Create a secret key from string for HS256 signing
|
|
@@ -2387,7 +2387,7 @@ async function requireAuth(c, next) {
|
|
|
2387
2387
|
* Uses @atcute/identity-resolver which is already Workers-compatible
|
|
2388
2388
|
* (uses redirect: "manual" internally).
|
|
2389
2389
|
*/
|
|
2390
|
-
const PLC_DIRECTORY = "https://plc.directory";
|
|
2390
|
+
const PLC_DIRECTORY$1 = "https://plc.directory";
|
|
2391
2391
|
const TIMEOUT_MS = 3e3;
|
|
2392
2392
|
/**
|
|
2393
2393
|
* Wrapper that always uses globalThis.fetch so it can be mocked in tests.
|
|
@@ -2404,7 +2404,7 @@ var DidResolver = class {
|
|
|
2404
2404
|
this.cache = opts.didCache;
|
|
2405
2405
|
this.resolver = new CompositeDidDocumentResolver({ methods: {
|
|
2406
2406
|
plc: new PlcDidDocumentResolver({
|
|
2407
|
-
apiUrl: opts.plcUrl ?? PLC_DIRECTORY,
|
|
2407
|
+
apiUrl: opts.plcUrl ?? PLC_DIRECTORY$1,
|
|
2408
2408
|
fetch: stubbableFetch
|
|
2409
2409
|
}),
|
|
2410
2410
|
web: new WebDidDocumentResolver({ fetch: stubbableFetch })
|
|
@@ -3334,6 +3334,176 @@ async function resetMigration(c, accountDO) {
|
|
|
3334
3334
|
}
|
|
3335
3335
|
}
|
|
3336
3336
|
|
|
3337
|
+
//#endregion
|
|
3338
|
+
//#region src/migration-token.ts
|
|
3339
|
+
/**
|
|
3340
|
+
* Stateless migration tokens for outbound account migration
|
|
3341
|
+
*
|
|
3342
|
+
* Uses HMAC-SHA256 to create tokens that encode the DID and expiry time.
|
|
3343
|
+
* No database storage required - validity is verified by the signature.
|
|
3344
|
+
*
|
|
3345
|
+
* Token format: base64url(payload).base64url(signature)
|
|
3346
|
+
* Payload: {"did":"did:plc:xxx","exp":1736600000}
|
|
3347
|
+
*
|
|
3348
|
+
* Tokens expire after 15 minutes - enough time to complete the migration
|
|
3349
|
+
* process but short enough to limit exposure if the token is leaked.
|
|
3350
|
+
*/
|
|
3351
|
+
const TOKEN_EXPIRY = 15 * (60 * 1e3);
|
|
3352
|
+
/**
|
|
3353
|
+
* Create an HMAC-SHA256 signature
|
|
3354
|
+
*/
|
|
3355
|
+
async function hmacSign(data, secret) {
|
|
3356
|
+
const encoder = new TextEncoder();
|
|
3357
|
+
const key = await crypto.subtle.importKey("raw", encoder.encode(secret), {
|
|
3358
|
+
name: "HMAC",
|
|
3359
|
+
hash: "SHA-256"
|
|
3360
|
+
}, false, ["sign"]);
|
|
3361
|
+
return crypto.subtle.sign("HMAC", key, encoder.encode(data));
|
|
3362
|
+
}
|
|
3363
|
+
/**
|
|
3364
|
+
* Verify an HMAC-SHA256 signature
|
|
3365
|
+
*/
|
|
3366
|
+
async function hmacVerify(data, signature, secret) {
|
|
3367
|
+
const encoder = new TextEncoder();
|
|
3368
|
+
const key = await crypto.subtle.importKey("raw", encoder.encode(secret), {
|
|
3369
|
+
name: "HMAC",
|
|
3370
|
+
hash: "SHA-256"
|
|
3371
|
+
}, false, ["verify"]);
|
|
3372
|
+
return crypto.subtle.verify("HMAC", key, signature, encoder.encode(data));
|
|
3373
|
+
}
|
|
3374
|
+
/**
|
|
3375
|
+
* Create a migration token for outbound migration
|
|
3376
|
+
*
|
|
3377
|
+
* @param did - The user's DID
|
|
3378
|
+
* @param jwtSecret - The JWT_SECRET used for signing
|
|
3379
|
+
* @returns A stateless, signed token
|
|
3380
|
+
*/
|
|
3381
|
+
async function createMigrationToken(did, jwtSecret) {
|
|
3382
|
+
const payload = {
|
|
3383
|
+
did,
|
|
3384
|
+
exp: Math.floor((Date.now() + TOKEN_EXPIRY) / 1e3)
|
|
3385
|
+
};
|
|
3386
|
+
const payloadStr = JSON.stringify(payload);
|
|
3387
|
+
const payloadB64 = base64url.encode(new TextEncoder().encode(payloadStr));
|
|
3388
|
+
const signature = await hmacSign(payloadB64, jwtSecret);
|
|
3389
|
+
return `${payloadB64}.${base64url.encode(new Uint8Array(signature))}`;
|
|
3390
|
+
}
|
|
3391
|
+
/**
|
|
3392
|
+
* Validate a migration token
|
|
3393
|
+
*
|
|
3394
|
+
* @param token - The token to validate
|
|
3395
|
+
* @param expectedDid - The expected DID (must match token payload)
|
|
3396
|
+
* @param jwtSecret - The JWT_SECRET used for verification
|
|
3397
|
+
* @returns The payload if valid, null if invalid/expired
|
|
3398
|
+
*/
|
|
3399
|
+
async function validateMigrationToken(token, expectedDid, jwtSecret) {
|
|
3400
|
+
const parts = token.split(".");
|
|
3401
|
+
if (parts.length !== 2) return null;
|
|
3402
|
+
const [payloadB64, signatureB64] = parts;
|
|
3403
|
+
try {
|
|
3404
|
+
if (!await hmacVerify(payloadB64, base64url.decode(signatureB64).buffer, jwtSecret)) return null;
|
|
3405
|
+
const payloadStr = new TextDecoder().decode(base64url.decode(payloadB64));
|
|
3406
|
+
const payload = JSON.parse(payloadStr);
|
|
3407
|
+
if (payload.did !== expectedDid) return null;
|
|
3408
|
+
const now$1 = Math.floor(Date.now() / 1e3);
|
|
3409
|
+
if (payload.exp < now$1) return null;
|
|
3410
|
+
return payload;
|
|
3411
|
+
} catch {
|
|
3412
|
+
return null;
|
|
3413
|
+
}
|
|
3414
|
+
}
|
|
3415
|
+
|
|
3416
|
+
//#endregion
|
|
3417
|
+
//#region src/xrpc/identity.ts
|
|
3418
|
+
const PLC_DIRECTORY = "https://plc.directory";
|
|
3419
|
+
/**
|
|
3420
|
+
* Request a PLC operation signature for outbound migration.
|
|
3421
|
+
*
|
|
3422
|
+
* In Bluesky's implementation, this sends an email with a token.
|
|
3423
|
+
* In Cirrus, we're single-user with no email, so we just return success.
|
|
3424
|
+
* The user gets the token via `pds migrate-token` CLI.
|
|
3425
|
+
*
|
|
3426
|
+
* Endpoint: POST com.atproto.identity.requestPlcOperationSignature
|
|
3427
|
+
*/
|
|
3428
|
+
async function requestPlcOperationSignature(c) {
|
|
3429
|
+
return new Response(null, { status: 200 });
|
|
3430
|
+
}
|
|
3431
|
+
/**
|
|
3432
|
+
* Sign a PLC operation for migrating to a new PDS.
|
|
3433
|
+
*
|
|
3434
|
+
* Validates the migration token and returns a signed PLC operation
|
|
3435
|
+
* that updates the DID document to point to the new PDS.
|
|
3436
|
+
*
|
|
3437
|
+
* Endpoint: POST com.atproto.identity.signPlcOperation
|
|
3438
|
+
*/
|
|
3439
|
+
async function signPlcOperation(c) {
|
|
3440
|
+
const body = await c.req.json();
|
|
3441
|
+
const { token } = body;
|
|
3442
|
+
if (!token) return c.json({
|
|
3443
|
+
error: "InvalidRequest",
|
|
3444
|
+
message: "Missing required parameter: token"
|
|
3445
|
+
}, 400);
|
|
3446
|
+
if (!await validateMigrationToken(token, c.env.DID, c.env.JWT_SECRET)) return c.json({
|
|
3447
|
+
error: "InvalidToken",
|
|
3448
|
+
message: "Invalid or expired migration token"
|
|
3449
|
+
}, 400);
|
|
3450
|
+
const currentOp = await getLatestPlcOperation(c.env.DID);
|
|
3451
|
+
if (!currentOp) return c.json({
|
|
3452
|
+
error: "InternalServerError",
|
|
3453
|
+
message: "Could not fetch current PLC state"
|
|
3454
|
+
}, 500);
|
|
3455
|
+
const signedOp = await signOperation({
|
|
3456
|
+
type: "plc_operation",
|
|
3457
|
+
prev: currentOp.cid,
|
|
3458
|
+
rotationKeys: body.rotationKeys ?? currentOp.operation.rotationKeys,
|
|
3459
|
+
alsoKnownAs: body.alsoKnownAs ?? currentOp.operation.alsoKnownAs,
|
|
3460
|
+
verificationMethods: body.verificationMethods ?? currentOp.operation.verificationMethods,
|
|
3461
|
+
services: body.services ?? currentOp.operation.services
|
|
3462
|
+
}, await Secp256k1Keypair.import(c.env.SIGNING_KEY));
|
|
3463
|
+
return c.json({ operation: signedOp });
|
|
3464
|
+
}
|
|
3465
|
+
/**
|
|
3466
|
+
* Get the latest PLC operation for a DID
|
|
3467
|
+
*/
|
|
3468
|
+
async function getLatestPlcOperation(did) {
|
|
3469
|
+
try {
|
|
3470
|
+
const res = await fetch(`${PLC_DIRECTORY}/${did}/log/audit`);
|
|
3471
|
+
if (!res.ok) return null;
|
|
3472
|
+
return (await res.json()).filter((op) => !op.nullified).pop() ?? null;
|
|
3473
|
+
} catch {
|
|
3474
|
+
return null;
|
|
3475
|
+
}
|
|
3476
|
+
}
|
|
3477
|
+
/**
|
|
3478
|
+
* Sign a PLC operation with the given keypair
|
|
3479
|
+
*
|
|
3480
|
+
* PLC operations are signed by:
|
|
3481
|
+
* 1. CBOR-encoding the unsigned operation
|
|
3482
|
+
* 2. Signing the bytes with secp256k1
|
|
3483
|
+
* 3. Adding the signature as base64url
|
|
3484
|
+
*/
|
|
3485
|
+
async function signOperation(op, keypair) {
|
|
3486
|
+
const bytes = encode(op);
|
|
3487
|
+
const sig = await keypair.sign(bytes);
|
|
3488
|
+
return {
|
|
3489
|
+
...op,
|
|
3490
|
+
sig: base64url.encode(sig)
|
|
3491
|
+
};
|
|
3492
|
+
}
|
|
3493
|
+
/**
|
|
3494
|
+
* Generate a migration token for the CLI.
|
|
3495
|
+
*
|
|
3496
|
+
* This endpoint allows the CLI to generate a token that can be used
|
|
3497
|
+
* to complete an outbound migration without requiring the secret
|
|
3498
|
+
* to be available client-side.
|
|
3499
|
+
*
|
|
3500
|
+
* Endpoint: GET gg.mk.experimental.getMigrationToken
|
|
3501
|
+
*/
|
|
3502
|
+
async function getMigrationToken(c) {
|
|
3503
|
+
const token = await createMigrationToken(c.env.DID, c.env.JWT_SECRET);
|
|
3504
|
+
return c.json({ token });
|
|
3505
|
+
}
|
|
3506
|
+
|
|
3337
3507
|
//#endregion
|
|
3338
3508
|
//#region src/passkey-ui.ts
|
|
3339
3509
|
/**
|
|
@@ -3755,7 +3925,7 @@ function renderPasskeyErrorPage(error, description) {
|
|
|
3755
3925
|
|
|
3756
3926
|
//#endregion
|
|
3757
3927
|
//#region package.json
|
|
3758
|
-
var version = "0.
|
|
3928
|
+
var version = "0.8.0";
|
|
3759
3929
|
|
|
3760
3930
|
//#endregion
|
|
3761
3931
|
//#region src/index.ts
|
|
@@ -3920,6 +4090,9 @@ app.use("/xrpc/com.atproto.identity.resolveHandle", async (c, next) => {
|
|
|
3920
4090
|
if (c.req.query("handle") === c.env.HANDLE) return c.json({ did: c.env.DID });
|
|
3921
4091
|
await next();
|
|
3922
4092
|
});
|
|
4093
|
+
app.post("/xrpc/com.atproto.identity.requestPlcOperationSignature", requireAuth, requestPlcOperationSignature);
|
|
4094
|
+
app.post("/xrpc/com.atproto.identity.signPlcOperation", requireAuth, signPlcOperation);
|
|
4095
|
+
app.get("/xrpc/gg.mk.experimental.getMigrationToken", requireAuth, getMigrationToken);
|
|
3923
4096
|
app.post("/xrpc/com.atproto.server.createSession", createSession);
|
|
3924
4097
|
app.post("/xrpc/com.atproto.server.refreshSession", refreshSession);
|
|
3925
4098
|
app.get("/xrpc/com.atproto.server.getSession", getSession);
|