@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 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
- child.stdout?.on("data", (data) => {
1200
- output += data.toString();
1201
- });
1202
- child.stderr?.on("data", (data) => {
1203
- output += data.toString();
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
- spinner.start("Building and deploying to Cloudflare...");
2124
+ p.log.step("Deploying to Cloudflare...");
2102
2125
  try {
2103
- await runCommand(pm === "npm" ? "npm" : pm, ["run", "build"]);
2104
- await runCommand(pm === "npm" ? "npm" : pm, ["run", "deploy"]);
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,
@@ -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":";;;;;;;;;;;;;;;;cAUa,iBAAA,SACJ,kBAAA,YACG;EAFC,QAAA,GAAA;EAIa,WAAA,CAAA,GAAA,EAAA,UAAA;EA2FA;;;;EAiCR,UAAA,CAAA,aAAA,CAAA,EAAA,OAAA,CAAA,EAAA,IAAA;EAQG;;;EAcL,OAAA,CAAA,CAAA,EAvDE,OAuDF,CAvDU,GAuDV,GAAA,IAAA,CAAA;EAAM;;;EAU8C,MAAA,CAAA,CAAA,EApDnD,OAoDmD,CAAA,MAAA,GAAA,IAAA,CAAA;EAArC;;;EAmB4B,MAAA,CAAA,CAAA,EA7D1C,OA6D0C,CAAA,MAAA,CAAA;EAYpC;;;EAoBmB,OAAA,CAAA,CAAA,EAnFxB,OAmFwB,CAAA,MAAA,CAAA;EAWf;;;EA6CT,QAAA,CAAA,GAAA,EAnIG,GAmIH,CAAA,EAnIS,OAmIT,CAnIiB,UAmIjB,GAAA,IAAA,CAAA;EAUI;;;EAoCF,GAAA,CAAA,GAAA,EAnKJ,GAmKI,CAAA,EAnKE,OAmKF,CAAA,OAAA,CAAA;EAUe;;;EA2JtB,SAAA,CAAA,IAAA,EA9TU,GA8TV,EAAA,CAAA,EA9TkB,OA8TlB,CAAA;IA8BI,MAAA,EA5VgC,QA4VhC;IA3fR,OAAA,EA+J2D,GA/J3D,EAAA;EACG,CAAA,CAAA;EAAW;;;gBAiLF,YAAY,0BAA0B;EC/K9C;;;EAuG0C,OAAA,CAAA,MAAA,EDoFhC,QCpFgC,EAAA,GAAA,EAAA,MAAA,CAAA,EDoFR,OCpFQ,CAAA,IAAA,CAAA;EAgBb;;;EAsClB,UAAA,CAAA,GAAA,EDkDD,GClDC,EAAA,GAAA,EAAA,MAAA,CAAA,EDkDkB,OClDlB,CAAA,IAAA,CAAA;EAAY;;;EAiDoB,WAAA,CAAA,MAAA,EDY7B,UCZ6B,CAAA,EDYhB,OCZgB,CAAA,IAAA,CAAA;EAAR;;;EA4CF,WAAA,CAAA,CAAA,EDGxB,OCHwB,CAAA,MAAA,CAAA;EAAiB;;;EAwCtB,OAAA,CAAA,CAAA,ED3BvB,OC2BuB,CAAA,IAAA,CAAA;EAAU;;;EAuCb,WAAA,CAAA,CAAA,EDxDhB,OCwDgB,CAAA,MAAA,CAAA;EAWG;;;oBDzDhB;;;AEvSzB;0CFyT+C;;;AGpT/C;EAkBiC,SAAA,CAAA,CAAA,EH0Sb,OG1Sa,CAAA,OAAA,CAAA;EAAvB;;;8BHoTyB;;;AItSnC;EAAwD,aAAA,CAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAUtC;;;EA6GW,cAAA,CAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA;EAAR;;;EAgBK,iBAAA,CAAA,SAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAAR;;;EAqBG,iBAAA,CAAA,GAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAQA;;;EAsCX,cAAI,CAAA,GAAA,EAAA,MAAA,CAAA,EAAA,OAAA;EAFV;;;EA8EA,kBAAA,CAAA,CAAA,EAAA,MAAA;EA8EA;;;EA6JO,kBAAA,CAAA,CAAA,EAAA,MAAA;EAFP;;;EA6KoB,gBAAA,CAAA,KAAA,CAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,MAAA,CAAA,EAAA;IA6BqB,KAAA,EJ7UhC,KI6UgC,CAAA;MAAR,GAAA,EAAA,MAAA;MA2BN,SAAA,EAAA,MAAA;IAAa,CAAA,CAAA;IAsEhB,MAAA,CAAA,EAAA,MAAA;EAAuC,CAAA;EAAR;;;EAiJrB,iBAAA,CAAA,CAAA,EAAA,IAAA;EAAkB;;;EAqCnC,WAAA,CAAA,YAAA,EAAA,MAAA,EAAA,SAAA,EJljBR,UIkjBQ,EAAA,OAAA,EAAA,MAAA,EAAA,IAAA,CAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EASd;;;EAkBqB,UAAA,CAAA,YAAA,EAAA,MAAA,CAAA,EAAA;IASsB,YAAA,EAAA,MAAA;IAQ3B,SAAA,EJ3kBV,UI2kBU;IAQM,OAAA,EAAA,MAAA;IAQE,IAAA,EAAA,MAAA,GAAA,IAAA;IAYN,SAAA,EAAA,MAAA;IAQC,UAAA,EAAA,MAAA,GAAA,IAAA;EAYM,CAAA,GAAA,IAAA;EAQA;;;EAwBJ,YAAA,CAAA,CAAA,EJ7nBX,KI6nBW,CAAA;IAkCiB,YAAA,EAAA,MAAA;IAkDpB,IAAA,EAAA,MAAA,GAAA,IAAA;IAQM,SAAA,EAAA,MAAA;IAAO,UAAA,EAAA,MAAA,GAsBM,IAAA;EACxC,CAAA,CAAA;EAAO;;;EAcoC,aAAA,CAAA,YAOH,EAAA,MAAA,CAAA,EAAA,OAAA;EACxC;;;EAQO,oBAAA,CAAA,YAQqC,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAA5C;;;EAY2C,WAAA,CAAA,CAAA,EAAA,OAAA;EAS3C;;;EAQO,gBAAA,CAAA,KAAA,EAQiC,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,IAAA,CAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EACxC;;;EAcqC,mBAAA,CAAA,KAAA,EAAA,MAAA,CAAA,EAAA;IAMG,SAAA,EAAA,MAAA;IAY/B,IAAA,EAAA,MAAA,GAAA,IAAA;EAGT,CAAA,GAAA,IAAA;EAQS;;;EAWa,oBAAA,CAAA,CAAA,EAAA,IAAA;;;;;;;;;;cH12Cb,kBAAA,YAA8B;;mBACjB;EDLb;;;EA+FK,UAAA,CAAA,CAAA,EAAA,IAAA;EAaD;;;EA4BI,OAAA,CAAA,CAAA,EAAA,IAAA;EAAc,YAAA,CAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EC7BK,YD6BL,CAAA,EC7BoB,OD6BpB,CAAA,IAAA,CAAA;EAAR,WAAA,CAAA,IAAA,EAAA,MAAA,CAAA,ECbO,ODaP,CCbe,YDaf,GAAA,IAAA,CAAA;EAcX,cAAA,CAAA,IAAA,EAAA,MAAA,CAAA,ECGqB,ODHrB,CAAA,IAAA,CAAA;EAAM,UAAA,CAAA,IAAA,ECWE,SDXF,CAAA,ECWc,ODXd,CAAA,IAAA,CAAA;EAUC,gBAAA,CAAA,WAAA,EAAA,MAAA,CAAA,ECkBuB,ODlBvB,CCkB+B,SDlB/B,GAAA,IAAA,CAAA;EAA0B,iBAAA,CAAA,YAAA,EAAA,MAAA,CAAA,ECkDD,ODlDC,CCkDO,SDlDP,GAAA,IAAA,CAAA;EAAmB,WAAA,CAAA,WAAA,EAAA,MAAA,CAAA,EC+E3B,OD/E2B,CAAA,IAAA,CAAA;EAArC,eAAA,CAAA,GAAA,EAAA,MAAA,CAAA,ECsFM,ODtFN,CAAA,IAAA,CAAA;EAmBV,UAAA,CAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EC2EyB,cD3EzB,CAAA,EC2E0C,OD3E1C,CAAA,IAAA,CAAA;EAAY,SAAA,CAAA,QAAA,EAAA,MAAA,CAAA,ECyFG,ODzFH,CCyFW,cDzFX,GAAA,IAAA,CAAA;EAA0B,OAAA,CAAA,UAAA,EAAA,MAAA,EAAA,IAAA,ECmHlB,ODnHkB,CAAA,ECmHR,ODnHQ,CAAA,IAAA,CAAA;EAYpC,MAAA,CAAA,UAAA,EAAA,MAAA,CAAA,ECkHY,ODlHZ,CCkHoB,ODlHpB,GAAA,IAAA,CAAA;EAAwB,SAAA,CAAA,UAAA,EAAA,MAAA,CAAA,EC8IT,OD9IS,CAAA,IAAA,CAAA;EAoBxB,iBAAA,CAAA,KAAA,EAAA,MAAA,CAAA,ECqIkB,ODrIlB,CAAA,OAAA,CAAA;EAAmB;;;EA8CpB,OAAA,CAAA,CAAA,EAAA,IAAA;EAUJ;;;EAsC6B,qBAAA,CAAA,SAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAQ3B;;;;EAqKP,wBAAA,CAAA,SAAA,EAAA,MAAA,CAAA,EAAA,OAAA;;;;UEteI,OAAA;;;;;;;;;;;;;;UCKA,MAAA;;;;EHGJ,MAAA,EAAA,MAAA;EAIa;EA2FA,YAAA,EAAA,MAAA;EAAR;EAaD,UAAA,EAAA,MAAA;EAUA;EAUC,WAAA,EAAA,MAAA;EAQG;EAAc,kBAAA,EAAA,MAAA;EAAR;EAcX,UAAA,EAAA,MAAA;EAAM;EAUC,aAAA,EAAA,MAAA;EAA0B;EAAmB,OAAA,EGjJ1D,sBHiJ0D,CGjJnC,oBHiJmC,CAAA;EAArC;EAmBV,KAAA,CAAA,EGlKZ,QHkKY;EAAY;EAA0B,cAAA,CAAA,EAAA,MAAA;;;;;;;AAnL3D;;;;;;AAgIkB,cInGL,oBAAA,SAA6B,aJmGxB,CInGsC,MJmGtC,CAAA,CAAA;EAQG,QAAA,OAAA;EAAc,QAAA,YAAA;EAAR,QAAA,IAAA;EAcX,QAAA,OAAA;EAAM,QAAA,SAAA;EAUC,QAAA,SAAA;EAA0B,QAAA,kBAAA;EAAmB,QAAA,eAAA;EAArC,WAAA,CAAA,GAAA,EIzHb,kBJyHa,EAAA,GAAA,EIzHY,MJyHZ;EAmBV;;;EAYE,QAAA,wBAAA;EAAwB;;;EA+BpB,QAAA,UAAA;EAAa;;;;EAiEf,KAAA,CAAA,CAAA,EItLA,OJsLA,CAAA,IAAA,CAAA;EAkBsB;;;EAwGlC,QAAA,qBAAA;EAkDA;;;EA1cJ,UAAA,CAAA,CAAA,EImJY,OJnJZ,CImJoB,iBJnJpB,CAAA;EACG;;;qBI0Jc,QAAQ;;AHxJlC;;EAuGwC,OAAA,CAAA,CAAA,EGyDtB,OHzDsB,CGyDd,IHzDc,CAAA;EAAe;;;EA8ClB,YAAA,CAAA,CAAA,EGmBd,OHnBc,CAAA,IAAA,CAAA;EAQb;;;EAiBsB,UAAA,CAAA,CAAA,EGOzB,OHPyB,CGOjB,gBHPiB,CAAA;EAgCU;;;EAoCnB,OAAA,CAAA,IAAA,EGrDhB,IHqDgB,CAAA,EGrDT,OHqDS,CAAA,IAAA,CAAA;EAQS;;;EAcV,eAAA,CAAA,CAAA,EGpEV,OHoEU,CAAA;IA0BK,GAAA,EAAA,MAAA;IAAU,WAAA,EAAA,MAAA,EAAA;IAWR,GAAA,EAAA,MAAA;EAAR,CAAA,CAAA;EA4BG;;;EAzUiB,YAAA,CAAA,UAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,CAAA,EGiOnD,OHjOmD,CAAA;;YGmO7C,GAAA,CAAI;;EF/OG;;;;ICKA,KAAM,EAAA,MAAA;IAkBU,MAAA,CAAA,EAAA,MAAA;IAAvB,OAAA,CAAA,EAAA,OAAA;EAED,CAAA,CAAA,ECuPL,ODvPK,CAAA;IAAQ,OAAA,ECwPN,KDxPM,CAAA;;;;ICYJ,CAAA,CAAA;IAA2C,MAAA,CAAA,EAAA,MAAA;EAUtC,CAAA,CAAA;EAAyB;;;EA6GtB,eAAA,CAAA,UAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,GAAA,SAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EA+JjB,OA/JiB,CAAA;IAQa,GAAA,EAAA,MAAA;IAAR,GAAA,EAAA,MAAA;IAQA,MAAA,EAAA;MAAR,GAAA,EAAA,MAAA;MAQK,GAAA,EAAA,MAAA;IAaM,CAAA;EAAR,CAAA,CAAA;EAQA;;;EAsCX,eAAI,CAAA,UAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,CAAA,EA0JV,OA1JU,CAAA;IAFV,MAAA,EAAA;MAoCO,GAAA,EAAA,MAAA;MADP,GAAA,EAAA,MAAA;IA2CA,CAAA;EA8EA,CAAA,GAAA,IAAA,CAAA;EA+DA;;;EA4FA,YAAA,CAAA,UAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EA5FA,OA4FA,CAAA;IA6JuB,GAAA,EAAA,MAAA;IAgBK,GAAA,EAAA,MAAA;IAAR,MAAA,EAAA;MA6BqB,GAAA,EAAA,MAAA;MAAR,GAAA,EAAA,MAAA;IA2BN,CAAA;IAAa,gBAAA,EAAA,MAAA;EAsEhB,CAAA,CAAA;EAAuC;;;EAyBhC,cAAA,CAAA,MAAA,EA1UzB,KA0UyB,CAAA;IAwHG,KAAA,EAAA,MAAA;IAAkB,UAAA,EAAA,MAAA;IAAR,IAAA,CAAA,EAAA,MAAA;IAoCzC,KAAA,CAAA,EAAA,OAAA;EACc,CAAA,CAAA,CAAA,EAjejB,OAieiB,CAAA;IASd,MAAA,EAAA;MAWuB,GAAA,EAAA,MAAA;MAAkB,GAAA,EAAA,MAAA;IAOpB,CAAA;IASsB,OAAA,EAngBvC,KAmgBuC,CAAA;MAQ3B,KAAA,EAAA,MAAA;MAQM,GAAA,CAAA,EAAA,MAAA;MAQE,GAAA,CAAA,EAAA,MAAA;MAYN,gBAAA,CAAA,EAAA,MAAA;IAQC,CAAA,CAAA;EAYM,CAAA,CAAA;EAQA;;;EAwBJ,gBAAA,CAAA,CAAA,EAhcD,OAgcC,CAAA;IAkCiB,GAAA,EAAA,MAAA;IAkDpB,IAAA,EAAA,MAAA;IAQM,GAAA,EAAA,MAAA;EAAO,CAAA,CAAA;EAuBlC;;;EAcoC,aAAA,CAAA,CAAA,EAjjBhB,OAijBgB,CAjjBR,UAijBQ,CAAA;EAAO;;;;EAgBpC,YAAA,CAAA,IAAA,EAAA,MAQqC,EAAA,CAAA,EA5iBX,OA4iBW,CA5iBH,UA4iBG,CAAA;EAA5C;;;;;EAqBO,aAAA,CAAA,QAAA,EAtiBoB,UA8iBiB,CAAA,EA9iBJ,OA8iBI,CAAA;IAA5C,GAAA,EAAA,MAAA;IAAO,GAAA,EAAA,MAAA;IASP,GAAA,EAAA,MAAA;EAAO,CAAA,CAAA;EAQP;;;EAwBS,aAAA,CAAA,KAAA,EAjhBe,UAihBf,EAAA,QAAA,EAAA,MAAA,CAAA,EAjhB8C,OAihB9C,CAjhBsD,OAihBtD,CAAA;EAGT;;;EAmB8B,UAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EA9gBC,OA8gBD,CA9gBS,YA8gBT,GAAA,IAAA,CAAA;EAAR;;;EA0BD,QAAA,WAAA;EAWrB;;;EAoBmD,QAAA,iBAAA;EASxB;;;EAn5CW,QAAA,mBAAA;EAAa;;;;ECiCjD;;;EAAG,QAAA,gBAAA;EAAA;;;;;;;;;;;iCD05B6B,UAAU,QAAQ;;;;wBAoCjD,8BACc;;;;sBASd;;;;sBAWuB,kBAAkB;;;;uBAOpB;;;;;;6CASsB;;;;kBAQ3B;;;;wBAQM;;;;0BAQE;;;;oBAYN;;;;qBAQC;;;;2BAYM;;;;2BAQA;;;;wDAW5B;WACK;;;;;;;;;;;uBAYmB;;;;;;;wCAkCiB;;;;;;oBAkDpB;;;;;;0BAQM;;;;;sCAAO,0BAAA,CAsBM,eACxC;;gCAQA,QARO,0BAAA,CAQqC,YAAA;;mCAMR;;sBAAO,0BAAA,CAOH,YACxC;;4CAQA,QARO,0BAAA,CAQqC,SAAA;;8CAQ5C,QARO,0BAAA,CAQqC,SAAA;;uCAMJ;;mCAMJ;;4CAAO,0BAAA,CAQC,iBAC5C;;kCAQA,QARO,0BAAA,CAQqC,cAAA;;uCAArC,0BAAA,CAQiC,UACxC;;iCAQA,QARO,0BAAA,CAQqC,OAAA;;oCAMP;;uCAMG;;kDAY/B,6CAGT;;uCAMwC;;eAE/B;;;;;;;qBAWa,QAAQ;;;;;;;0CAWa;;kEAS3C;;oBAMqB;;2FAWrB;;yCAQA;;;;;+CAMgD;;kDAMG;;;;;iBASxB,UAAU,QAAQ;;;;cCl3C3C,KAAG;YAAwB;GAAM,WAAA,CAAA,WAAA"}
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":";;;;;;;;;;;;;;;;cAUa,iBAAA,SACJ,kBAAA,YACG;EAFC,QAAA,GAAA;EAIa,WAAA,CAAA,GAAA,EAAA,UAAA;EA2FA;;;;EAiCR,UAAA,CAAA,aAAA,CAAA,EAAA,OAAA,CAAA,EAAA,IAAA;EAQG;;;EAcL,OAAA,CAAA,CAAA,EAvDE,OAuDF,CAvDU,GAuDV,GAAA,IAAA,CAAA;EAAM;;;EAU8C,MAAA,CAAA,CAAA,EApDnD,OAoDmD,CAAA,MAAA,GAAA,IAAA,CAAA;EAArC;;;EAmB4B,MAAA,CAAA,CAAA,EA7D1C,OA6D0C,CAAA,MAAA,CAAA;EAYpC;;;EAoBmB,OAAA,CAAA,CAAA,EAnFxB,OAmFwB,CAAA,MAAA,CAAA;EAWf;;;EA6CT,QAAA,CAAA,GAAA,EAnIG,GAmIH,CAAA,EAnIS,OAmIT,CAnIiB,UAmIjB,GAAA,IAAA,CAAA;EAUI;;;EAoCF,GAAA,CAAA,GAAA,EAnKJ,GAmKI,CAAA,EAnKE,OAmKF,CAAA,OAAA,CAAA;EAUe;;;EA2JtB,SAAA,CAAA,IAAA,EA9TU,GA8TV,EAAA,CAAA,EA9TkB,OA8TlB,CAAA;IA8BI,MAAA,EA5VgC,QA4VhC;IA3fR,OAAA,EA+J2D,GA/J3D,EAAA;EACG,CAAA,CAAA;EAAW;;;gBAiLF,YAAY,0BAA0B;EC/K9C;;;EAuG0C,OAAA,CAAA,MAAA,EDoFhC,QCpFgC,EAAA,GAAA,EAAA,MAAA,CAAA,EDoFR,OCpFQ,CAAA,IAAA,CAAA;EAgBb;;;EAsClB,UAAA,CAAA,GAAA,EDkDD,GClDC,EAAA,GAAA,EAAA,MAAA,CAAA,EDkDkB,OClDlB,CAAA,IAAA,CAAA;EAAY;;;EAiDoB,WAAA,CAAA,MAAA,EDY7B,UCZ6B,CAAA,EDYhB,OCZgB,CAAA,IAAA,CAAA;EAAR;;;EA4CF,WAAA,CAAA,CAAA,EDGxB,OCHwB,CAAA,MAAA,CAAA;EAAiB;;;EAwCtB,OAAA,CAAA,CAAA,ED3BvB,OC2BuB,CAAA,IAAA,CAAA;EAAU;;;EAuCb,WAAA,CAAA,CAAA,EDxDhB,OCwDgB,CAAA,MAAA,CAAA;EAWG;;;oBDzDhB;;;AEvSzB;0CFyT+C;;;AGpT/C;EAkBiC,SAAA,CAAA,CAAA,EH0Sb,OG1Sa,CAAA,OAAA,CAAA;EAAvB;;;8BHoTyB;;;AItSnC;EAAwD,aAAA,CAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAUtC;;;EA6GW,cAAA,CAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA;EAAR;;;EAgBK,iBAAA,CAAA,SAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAAR;;;EAqBG,iBAAA,CAAA,GAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAQA;;;EAsCX,cAAI,CAAA,GAAA,EAAA,MAAA,CAAA,EAAA,OAAA;EAFV;;;EA8EA,kBAAA,CAAA,CAAA,EAAA,MAAA;EA8EA;;;EA6JO,kBAAA,CAAA,CAAA,EAAA,MAAA;EAFP;;;EA6KoB,gBAAA,CAAA,KAAA,CAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,MAAA,CAAA,EAAA;IA6BqB,KAAA,EJ7UhC,KI6UgC,CAAA;MAAR,GAAA,EAAA,MAAA;MA2BN,SAAA,EAAA,MAAA;IAAa,CAAA,CAAA;IAsEhB,MAAA,CAAA,EAAA,MAAA;EAAuC,CAAA;EAAR;;;EAiJrB,iBAAA,CAAA,CAAA,EAAA,IAAA;EAAkB;;;EAqCnC,WAAA,CAAA,YAAA,EAAA,MAAA,EAAA,SAAA,EJljBR,UIkjBQ,EAAA,OAAA,EAAA,MAAA,EAAA,IAAA,CAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EASd;;;EAkBqB,UAAA,CAAA,YAAA,EAAA,MAAA,CAAA,EAAA;IASsB,YAAA,EAAA,MAAA;IAQ3B,SAAA,EJ3kBV,UI2kBU;IAQM,OAAA,EAAA,MAAA;IAQE,IAAA,EAAA,MAAA,GAAA,IAAA;IAYN,SAAA,EAAA,MAAA;IAQC,UAAA,EAAA,MAAA,GAAA,IAAA;EAYM,CAAA,GAAA,IAAA;EAQA;;;EAwBJ,YAAA,CAAA,CAAA,EJ7nBX,KI6nBW,CAAA;IAkCiB,YAAA,EAAA,MAAA;IAkDpB,IAAA,EAAA,MAAA,GAAA,IAAA;IAQM,SAAA,EAAA,MAAA;IAAO,UAAA,EAAA,MAAA,GAsBM,IAAA;EACxC,CAAA,CAAA;EAAO;;;EAcoC,aAAA,CAAA,YAOH,EAAA,MAAA,CAAA,EAAA,OAAA;EACxC;;;EAQO,oBAAA,CAAA,YAQqC,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAA5C;;;EAY2C,WAAA,CAAA,CAAA,EAAA,OAAA;EAS3C;;;EAQO,gBAAA,CAAA,KAAA,EAQiC,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,IAAA,CAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EACxC;;;EAcqC,mBAAA,CAAA,KAAA,EAAA,MAAA,CAAA,EAAA;IAMG,SAAA,EAAA,MAAA;IAY/B,IAAA,EAAA,MAAA,GAAA,IAAA;EAGT,CAAA,GAAA,IAAA;EAQS;;;EAWa,oBAAA,CAAA,CAAA,EAAA,IAAA;;;;;;;;;;cH12Cb,kBAAA,YAA8B;;mBACjB;EDLb;;;EA+FK,UAAA,CAAA,CAAA,EAAA,IAAA;EAaD;;;EA4BI,OAAA,CAAA,CAAA,EAAA,IAAA;EAAc,YAAA,CAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EC7BK,YD6BL,CAAA,EC7BoB,OD6BpB,CAAA,IAAA,CAAA;EAAR,WAAA,CAAA,IAAA,EAAA,MAAA,CAAA,ECbO,ODaP,CCbe,YDaf,GAAA,IAAA,CAAA;EAcX,cAAA,CAAA,IAAA,EAAA,MAAA,CAAA,ECGqB,ODHrB,CAAA,IAAA,CAAA;EAAM,UAAA,CAAA,IAAA,ECWE,SDXF,CAAA,ECWc,ODXd,CAAA,IAAA,CAAA;EAUC,gBAAA,CAAA,WAAA,EAAA,MAAA,CAAA,ECkBuB,ODlBvB,CCkB+B,SDlB/B,GAAA,IAAA,CAAA;EAA0B,iBAAA,CAAA,YAAA,EAAA,MAAA,CAAA,ECkDD,ODlDC,CCkDO,SDlDP,GAAA,IAAA,CAAA;EAAmB,WAAA,CAAA,WAAA,EAAA,MAAA,CAAA,EC+E3B,OD/E2B,CAAA,IAAA,CAAA;EAArC,eAAA,CAAA,GAAA,EAAA,MAAA,CAAA,ECsFM,ODtFN,CAAA,IAAA,CAAA;EAmBV,UAAA,CAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EC2EyB,cD3EzB,CAAA,EC2E0C,OD3E1C,CAAA,IAAA,CAAA;EAAY,SAAA,CAAA,QAAA,EAAA,MAAA,CAAA,ECyFG,ODzFH,CCyFW,cDzFX,GAAA,IAAA,CAAA;EAA0B,OAAA,CAAA,UAAA,EAAA,MAAA,EAAA,IAAA,ECmHlB,ODnHkB,CAAA,ECmHR,ODnHQ,CAAA,IAAA,CAAA;EAYpC,MAAA,CAAA,UAAA,EAAA,MAAA,CAAA,ECkHY,ODlHZ,CCkHoB,ODlHpB,GAAA,IAAA,CAAA;EAAwB,SAAA,CAAA,UAAA,EAAA,MAAA,CAAA,EC8IT,OD9IS,CAAA,IAAA,CAAA;EAoBxB,iBAAA,CAAA,KAAA,EAAA,MAAA,CAAA,ECqIkB,ODrIlB,CAAA,OAAA,CAAA;EAAmB;;;EA8CpB,OAAA,CAAA,CAAA,EAAA,IAAA;EAUJ;;;EAsC6B,qBAAA,CAAA,SAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAQ3B;;;;EAqKP,wBAAA,CAAA,SAAA,EAAA,MAAA,CAAA,EAAA,OAAA;;;;UEteI,OAAA;;;;;;;;;;;;;;UCKA,MAAA;;;;EHGJ,MAAA,EAAA,MAAA;EAIa;EA2FA,YAAA,EAAA,MAAA;EAAR;EAaD,UAAA,EAAA,MAAA;EAUA;EAUC,WAAA,EAAA,MAAA;EAQG;EAAc,kBAAA,EAAA,MAAA;EAAR;EAcX,UAAA,EAAA,MAAA;EAAM;EAUC,aAAA,EAAA,MAAA;EAA0B;EAAmB,OAAA,EGjJ1D,sBHiJ0D,CGjJnC,oBHiJmC,CAAA;EAArC;EAmBV,KAAA,CAAA,EGlKZ,QHkKY;EAAY;EAA0B,cAAA,CAAA,EAAA,MAAA;;;;;;;AAnL3D;;;;;;AAgIkB,cInGL,oBAAA,SAA6B,aJmGxB,CInGsC,MJmGtC,CAAA,CAAA;EAQG,QAAA,OAAA;EAAc,QAAA,YAAA;EAAR,QAAA,IAAA;EAcX,QAAA,OAAA;EAAM,QAAA,SAAA;EAUC,QAAA,SAAA;EAA0B,QAAA,kBAAA;EAAmB,QAAA,eAAA;EAArC,WAAA,CAAA,GAAA,EIzHb,kBJyHa,EAAA,GAAA,EIzHY,MJyHZ;EAmBV;;;EAYE,QAAA,wBAAA;EAAwB;;;EA+BpB,QAAA,UAAA;EAAa;;;;EAiEf,KAAA,CAAA,CAAA,EItLA,OJsLA,CAAA,IAAA,CAAA;EAkBsB;;;EAwGlC,QAAA,qBAAA;EAkDA;;;EA1cJ,UAAA,CAAA,CAAA,EImJY,OJnJZ,CImJoB,iBJnJpB,CAAA;EACG;;;qBI0Jc,QAAQ;;AHxJlC;;EAuGwC,OAAA,CAAA,CAAA,EGyDtB,OHzDsB,CGyDd,IHzDc,CAAA;EAAe;;;EA8ClB,YAAA,CAAA,CAAA,EGmBd,OHnBc,CAAA,IAAA,CAAA;EAQb;;;EAiBsB,UAAA,CAAA,CAAA,EGOzB,OHPyB,CGOjB,gBHPiB,CAAA;EAgCU;;;EAoCnB,OAAA,CAAA,IAAA,EGrDhB,IHqDgB,CAAA,EGrDT,OHqDS,CAAA,IAAA,CAAA;EAQS;;;EAcV,eAAA,CAAA,CAAA,EGpEV,OHoEU,CAAA;IA0BK,GAAA,EAAA,MAAA;IAAU,WAAA,EAAA,MAAA,EAAA;IAWR,GAAA,EAAA,MAAA;EAAR,CAAA,CAAA;EA4BG;;;EAzUiB,YAAA,CAAA,UAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,CAAA,EGiOnD,OHjOmD,CAAA;;YGmO7C,GAAA,CAAI;;EF/OG;;;;ICKA,KAAM,EAAA,MAAA;IAkBU,MAAA,CAAA,EAAA,MAAA;IAAvB,OAAA,CAAA,EAAA,OAAA;EAED,CAAA,CAAA,ECuPL,ODvPK,CAAA;IAAQ,OAAA,ECwPN,KDxPM,CAAA;;;;ICYJ,CAAA,CAAA;IAA2C,MAAA,CAAA,EAAA,MAAA;EAUtC,CAAA,CAAA;EAAyB;;;EA6GtB,eAAA,CAAA,UAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,GAAA,SAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EA+JjB,OA/JiB,CAAA;IAQa,GAAA,EAAA,MAAA;IAAR,GAAA,EAAA,MAAA;IAQA,MAAA,EAAA;MAAR,GAAA,EAAA,MAAA;MAQK,GAAA,EAAA,MAAA;IAaM,CAAA;EAAR,CAAA,CAAA;EAQA;;;EAsCX,eAAI,CAAA,UAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,CAAA,EA0JV,OA1JU,CAAA;IAFV,MAAA,EAAA;MAoCO,GAAA,EAAA,MAAA;MADP,GAAA,EAAA,MAAA;IA2CA,CAAA;EA8EA,CAAA,GAAA,IAAA,CAAA;EA+DA;;;EA4FA,YAAA,CAAA,UAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EA5FA,OA4FA,CAAA;IA6JuB,GAAA,EAAA,MAAA;IAgBK,GAAA,EAAA,MAAA;IAAR,MAAA,EAAA;MA6BqB,GAAA,EAAA,MAAA;MAAR,GAAA,EAAA,MAAA;IA2BN,CAAA;IAAa,gBAAA,EAAA,MAAA;EAsEhB,CAAA,CAAA;EAAuC;;;EAyBhC,cAAA,CAAA,MAAA,EA1UzB,KA0UyB,CAAA;IAwHG,KAAA,EAAA,MAAA;IAAkB,UAAA,EAAA,MAAA;IAAR,IAAA,CAAA,EAAA,MAAA;IAoCzC,KAAA,CAAA,EAAA,OAAA;EACc,CAAA,CAAA,CAAA,EAjejB,OAieiB,CAAA;IASd,MAAA,EAAA;MAWuB,GAAA,EAAA,MAAA;MAAkB,GAAA,EAAA,MAAA;IAOpB,CAAA;IASsB,OAAA,EAngBvC,KAmgBuC,CAAA;MAQ3B,KAAA,EAAA,MAAA;MAQM,GAAA,CAAA,EAAA,MAAA;MAQE,GAAA,CAAA,EAAA,MAAA;MAYN,gBAAA,CAAA,EAAA,MAAA;IAQC,CAAA,CAAA;EAYM,CAAA,CAAA;EAQA;;;EAwBJ,gBAAA,CAAA,CAAA,EAhcD,OAgcC,CAAA;IAkCiB,GAAA,EAAA,MAAA;IAkDpB,IAAA,EAAA,MAAA;IAQM,GAAA,EAAA,MAAA;EAAO,CAAA,CAAA;EAuBlC;;;EAcoC,aAAA,CAAA,CAAA,EAjjBhB,OAijBgB,CAjjBR,UAijBQ,CAAA;EAAO;;;;EAgBpC,YAAA,CAAA,IAAA,EAAA,MAQqC,EAAA,CAAA,EA5iBX,OA4iBW,CA5iBH,UA4iBG,CAAA;EAA5C;;;;;EAqBO,aAAA,CAAA,QAAA,EAtiBoB,UA8iBiB,CAAA,EA9iBJ,OA8iBI,CAAA;IAA5C,GAAA,EAAA,MAAA;IAAO,GAAA,EAAA,MAAA;IASP,GAAA,EAAA,MAAA;EAAO,CAAA,CAAA;EAQP;;;EAwBS,aAAA,CAAA,KAAA,EAjhBe,UAihBf,EAAA,QAAA,EAAA,MAAA,CAAA,EAjhB8C,OAihB9C,CAjhBsD,OAihBtD,CAAA;EAGT;;;EAmB8B,UAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EA9gBC,OA8gBD,CA9gBS,YA8gBT,GAAA,IAAA,CAAA;EAAR;;;EA0BD,QAAA,WAAA;EAWrB;;;EAoBmD,QAAA,iBAAA;EASxB;;;EAn5CW,QAAA,mBAAA;EAAa;;;;ECkCjD;;;EAAG,QAAA,gBAAA;EAAA;;;;;;;;;;;iCDy5B6B,UAAU,QAAQ;;;;wBAoCjD,8BACc;;;;sBASd;;;;sBAWuB,kBAAkB;;;;uBAOpB;;;;;;6CASsB;;;;kBAQ3B;;;;wBAQM;;;;0BAQE;;;;oBAYN;;;;qBAQC;;;;2BAYM;;;;2BAQA;;;;wDAW5B;WACK;;;;;;;;;;;uBAYmB;;;;;;;wCAkCiB;;;;;;oBAkDpB;;;;;;0BAQM;;;;;sCAAO,0BAAA,CAsBM,eACxC;;gCAQA,QARO,0BAAA,CAQqC,YAAA;;mCAMR;;sBAAO,0BAAA,CAOH,YACxC;;4CAQA,QARO,0BAAA,CAQqC,SAAA;;8CAQ5C,QARO,0BAAA,CAQqC,SAAA;;uCAMJ;;mCAMJ;;4CAAO,0BAAA,CAQC,iBAC5C;;kCAQA,QARO,0BAAA,CAQqC,cAAA;;uCAArC,0BAAA,CAQiC,UACxC;;iCAQA,QARO,0BAAA,CAQqC,OAAA;;oCAMP;;uCAMG;;kDAY/B,6CAGT;;uCAMwC;;eAE/B;;;;;;;qBAWa,QAAQ;;;;;;;0CAWa;;kEAS3C;;oBAMqB;;2FAWrB;;yCAQA;;;;;+CAMgD;;kDAMG;;;;;iBASxB,UAAU,QAAQ;;;;cCj3C3C,KAAG;YAAwB;GAAM,WAAA,CAAA,WAAA"}
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 MINUTE = 60 * 1e3;
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 + MINUTE / 1e3;
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 = "2h";
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.7.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);