instar 1.3.1257 → 1.3.1259

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.
Files changed (76) hide show
  1. package/dist/core/AnthropicReloginBrowserDriver.d.ts +6 -1
  2. package/dist/core/AnthropicReloginBrowserDriver.d.ts.map +1 -1
  3. package/dist/core/AnthropicReloginBrowserDriver.js +6 -2
  4. package/dist/core/AnthropicReloginBrowserDriver.js.map +1 -1
  5. package/dist/core/PasskeyCellActions.d.ts +73 -0
  6. package/dist/core/PasskeyCellActions.d.ts.map +1 -0
  7. package/dist/core/PasskeyCellActions.js +153 -0
  8. package/dist/core/PasskeyCellActions.js.map +1 -0
  9. package/dist/core/PasskeyCellMandate.d.ts +100 -0
  10. package/dist/core/PasskeyCellMandate.d.ts.map +1 -0
  11. package/dist/core/PasskeyCellMandate.js +143 -0
  12. package/dist/core/PasskeyCellMandate.js.map +1 -0
  13. package/dist/core/PasskeyGrantStore.d.ts +105 -0
  14. package/dist/core/PasskeyGrantStore.d.ts.map +1 -0
  15. package/dist/core/PasskeyGrantStore.js +243 -0
  16. package/dist/core/PasskeyGrantStore.js.map +1 -0
  17. package/dist/core/PasskeyIssuerSet.d.ts +67 -0
  18. package/dist/core/PasskeyIssuerSet.d.ts.map +1 -0
  19. package/dist/core/PasskeyIssuerSet.js +116 -0
  20. package/dist/core/PasskeyIssuerSet.js.map +1 -0
  21. package/dist/core/PasskeyNonceLedger.d.ts +58 -0
  22. package/dist/core/PasskeyNonceLedger.d.ts.map +1 -0
  23. package/dist/core/PasskeyNonceLedger.js +127 -0
  24. package/dist/core/PasskeyNonceLedger.js.map +1 -0
  25. package/dist/core/PlaywrightProfileRegistry.d.ts +60 -9
  26. package/dist/core/PlaywrightProfileRegistry.d.ts.map +1 -1
  27. package/dist/core/PlaywrightProfileRegistry.js +87 -3
  28. package/dist/core/PlaywrightProfileRegistry.js.map +1 -1
  29. package/dist/core/PostUpdateMigrator.d.ts +2 -0
  30. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  31. package/dist/core/PostUpdateMigrator.js +30 -1
  32. package/dist/core/PostUpdateMigrator.js.map +1 -1
  33. package/dist/core/SubscriptionReloginOrchestrator.d.ts +1 -1
  34. package/dist/core/SubscriptionReloginOrchestrator.d.ts.map +1 -1
  35. package/dist/core/SubscriptionReloginOrchestrator.js +3 -1
  36. package/dist/core/SubscriptionReloginOrchestrator.js.map +1 -1
  37. package/dist/core/SubscriptionReloginPolicy.d.ts +12 -1
  38. package/dist/core/SubscriptionReloginPolicy.d.ts.map +1 -1
  39. package/dist/core/SubscriptionReloginPolicy.js +24 -1
  40. package/dist/core/SubscriptionReloginPolicy.js.map +1 -1
  41. package/dist/core/SubscriptionReloginRuntime.d.ts +12 -0
  42. package/dist/core/SubscriptionReloginRuntime.d.ts.map +1 -1
  43. package/dist/core/SubscriptionReloginRuntime.js +23 -4
  44. package/dist/core/SubscriptionReloginRuntime.js.map +1 -1
  45. package/dist/core/SubscriptionReloginService.d.ts +2 -0
  46. package/dist/core/SubscriptionReloginService.d.ts.map +1 -1
  47. package/dist/core/SubscriptionReloginService.js.map +1 -1
  48. package/dist/core/SubscriptionReloginStore.d.ts +14 -3
  49. package/dist/core/SubscriptionReloginStore.d.ts.map +1 -1
  50. package/dist/core/SubscriptionReloginStore.js +38 -8
  51. package/dist/core/SubscriptionReloginStore.js.map +1 -1
  52. package/dist/core/WriteDomainRegistry.d.ts.map +1 -1
  53. package/dist/core/WriteDomainRegistry.js +77 -0
  54. package/dist/core/WriteDomainRegistry.js.map +1 -1
  55. package/dist/core/devGatedFeatures.d.ts.map +1 -1
  56. package/dist/core/devGatedFeatures.js +6 -0
  57. package/dist/core/devGatedFeatures.js.map +1 -1
  58. package/dist/data/standards-guard-index.json +1 -1
  59. package/dist/data/standards-guard-index.meta.json +2 -2
  60. package/dist/data/standards-registry.meta.json +1 -1
  61. package/dist/server/CapabilityIndex.d.ts.map +1 -1
  62. package/dist/server/CapabilityIndex.js +1 -0
  63. package/dist/server/CapabilityIndex.js.map +1 -1
  64. package/dist/server/routes.d.ts +10 -0
  65. package/dist/server/routes.d.ts.map +1 -1
  66. package/dist/server/routes.js +373 -0
  67. package/dist/server/routes.js.map +1 -1
  68. package/package.json +1 -1
  69. package/src/data/builtin-manifest.json +63 -63
  70. package/src/data/standards-guard-index.json +1 -1
  71. package/src/data/standards-guard-index.meta.json +2 -2
  72. package/src/data/standards-registry.meta.json +1 -1
  73. package/upgrades/1.3.1258.md +42 -0
  74. package/upgrades/1.3.1259.md +40 -0
  75. package/upgrades/side-effects/passkey-inc4-login-method.md +221 -0
  76. package/upgrades/side-effects/passkey-inc5-grants-mandate.md +256 -0
@@ -30,7 +30,12 @@ export interface AnthropicReloginBrowserRequest {
30
30
  verificationUrl: string;
31
31
  provider: 'anthropic' | 'openai';
32
32
  expectedIdentity: string;
33
- loginMethod: 'session-cookie' | 'password' | 'password+totp';
33
+ /**
34
+ * The ONE method this repair was admitted under. `google-passkey` (spec
35
+ * agent-held-google-passkey §3.4) never falls through to a password fill even when a
36
+ * password binding is also present — a named refusal instead.
37
+ */
38
+ loginMethod: 'session-cookie' | 'password' | 'password+totp' | 'google-passkey';
34
39
  secretRefs: {
35
40
  password?: string;
36
41
  totp?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"AnthropicReloginBrowserDriver.d.ts","sourceRoot":"","sources":["../../src/core/AnthropicReloginBrowserDriver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AnthropicReloginBrowserDriver.d.ts","sourceRoot":"","sources":["../../src/core/AnthropicReloginBrowserDriver.ts"],"names":[],"mappings":"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"}
@@ -106,7 +106,7 @@ export class AnthropicReloginBrowserDriver {
106
106
  return true;
107
107
  }
108
108
  case 'fill-password': {
109
- if (req.loginMethod === 'session-cookie' || !req.secretRefs.password)
109
+ if (!usesPassword(req.loginMethod) || !req.secretRefs.password)
110
110
  return false;
111
111
  let secret = await this.deps.resolveSecret(req.secretRefs.password);
112
112
  if (!secret)
@@ -146,6 +146,10 @@ export class AnthropicReloginBrowserDriver {
146
146
  }
147
147
  }
148
148
  }
149
+ /** Only the password-family methods may ever fill a password (no fall-through from other methods). */
150
+ function usesPassword(loginMethod) {
151
+ return loginMethod === 'password' || loginMethod === 'password+totp';
152
+ }
149
153
  export function allowedActions(snapshot, request) {
150
154
  switch (snapshot.pageClass) {
151
155
  case 'provider-choice': return snapshot.hasGoogleSignIn ? ['click-google-signin'] : [];
@@ -154,7 +158,7 @@ export function allowedActions(snapshot, request) {
154
158
  case 'email': return ['fill-email'];
155
159
  case 'device-code': return request.artifact?.kind === 'device-code' && request.artifact.userCode
156
160
  ? ['fill-device-code'] : [];
157
- case 'password': return request.loginMethod !== 'session-cookie' && request.secretRefs.password
161
+ case 'password': return usesPassword(request.loginMethod) && request.secretRefs.password
158
162
  ? ['fill-password'] : [];
159
163
  case 'totp': return request.loginMethod === 'password+totp' && request.secretRefs.totp
160
164
  ? ['fill-totp'] : [];
@@ -1 +1 @@
1
- {"version":3,"file":"AnthropicReloginBrowserDriver.js","sourceRoot":"","sources":["../../src/core/AnthropicReloginBrowserDriver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAwEzC,MAAM,iBAAiB,GAAG;IACxB,mBAAmB;IACnB,oBAAoB;IACpB,6BAA6B;IAC7B,+BAA+B;IAC/B,4BAA4B;IAC5B,6BAA6B;CAC9B,CAAC;AACF,MAAM,cAAc,GAAG;IACrB,yBAAyB;IACzB,qBAAqB;IACrB,6BAA6B;IAC7B,6BAA6B;CAC9B,CAAC;AAEF,+EAA+E;AAC/E,MAAM,OAAO,6BAA6B;IAIX;IAHZ,GAAG,CAAe;IAClB,QAAQ,CAAS;IAElC,YAA6B,IAAuC;QAAvC,SAAI,GAAJ,IAAI,CAAmC;QAClE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAAuC,EAAE,SAAsB,IAAI,eAAe,EAAE,CAAC,MAAM;QACrG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,QAAQ,CAAC;YAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,mBAAmB,EAAE,CAAC;QACjI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE;YAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,kBAAkB,EAAE,CAAC;QAC5H,MAAM,QAAQ,GAAG,wBAAwB,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;QACtE,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAC;QAC7E,IAAI,CAAC,KAAK,CAAC,QAAQ;YAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;QAChF,MAAM,KAAK,GAAG,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,IAAI,CAAC;YACH,MAAM,CAAC,cAAc,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YACtD,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC;gBAChD,MAAM,CAAC,cAAc,EAAE,CAAC;gBACxB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;gBAC5E,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAC7D,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,mBAAmB,EAAE,CAAC;gBACnE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,aAAa,CAAC;oBACjE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,sBAAsB,EAAE,CAAC;gBAC5E,IAAI,QAAQ,CAAC,SAAS,KAAK,SAAS;oBAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;gBACnG,IAAI,QAAQ,CAAC,SAAS,KAAK,oBAAoB;oBAC7C,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAC;gBAC1E,IAAI,QAAQ,CAAC,SAAS,KAAK,sBAAsB;oBAC/C,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,sBAAsB,EAAE,CAAC;gBAC5E,IAAI,QAAQ,CAAC,SAAS,KAAK,iBAAiB;uBACvC,CAAC,QAAQ,CAAC,yBAAyB,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;oBAC1F,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC;gBAChE,IAAI,QAAQ,CAAC,SAAS,KAAK,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC;oBAC7E,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,sBAAsB,EAAE,CAAC;gBAC5E,IAAI,QAAQ,CAAC,SAAS,KAAK,iBAAiB;uBACvC,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,aAAa,CAAC;oBAC7E,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,mBAAmB,EAAE,CAAC;gBACnE,IAAI,QAAQ,CAAC,SAAS,KAAK,SAAS;oBAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;gBACrE,IAAI,QAAQ,CAAC,SAAS,KAAK,YAAY,EAAE,CAAC;oBACxC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;oBACrD,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAC;gBACxH,CAAC;gBACD,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAClD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAC;gBAC9F,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,CAAC;gBAChF,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,mBAAmB,EAAE,CAAC;gBAChG,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAClD,IAAI,CAAC,KAAK;oBAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,yBAAyB,EAAE,CAAC;YACrF,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAC;QACtE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,sHAAsH;YACtH,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC;gBAAE,MAAM,KAAK,CAAC;YAC3F,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAC;QACtE,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC3C,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAqH,CAAC,CAAC,CAAC;YACnK,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,MAA4B,EAAE,GAAmC;QACrF,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,yBAAyB;gBAAE,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;gBAAC,OAAO,IAAI,CAAC;YACjH,KAAK,qBAAqB;gBAAE,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAAC,OAAO,IAAI,CAAC;YACjF,KAAK,YAAY;gBAAE,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;gBAAC,OAAO,IAAI,CAAC;YAClG,KAAK,kBAAkB,CAAC,CAAC,CAAC;gBACxB,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ;oBAAE,OAAO,KAAK,CAAC;gBAChF,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAAC,OAAO,IAAI,CAAC;YACxF,CAAC;YACD,KAAK,eAAe,CAAC,CAAC,CAAC;gBACrB,IAAI,GAAG,CAAC,WAAW,KAAK,gBAAgB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ;oBAAE,OAAO,KAAK,CAAC;gBACnF,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBACpE,IAAI,CAAC,MAAM;oBAAE,OAAO,KAAK,CAAC;gBAC1B,IAAI,CAAC;oBAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;gBAAC,CAAC;wBACvD,CAAC;oBAAC,MAAM,GAAG,EAAE,CAAC;gBAAC,CAAC;gBACxB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,IAAI,GAAG,CAAC,WAAW,KAAK,eAAe,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI;oBAAE,OAAO,KAAK,CAAC;gBAC9E,IAAI,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC9D,IAAI,CAAC,IAAI;oBAAE,OAAO,KAAK,CAAC;gBACxB,IAAI,CAAC;oBAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAAC,CAAC;wBAC3E,CAAC;oBAAC,IAAI,GAAG,EAAE,CAAC;gBAAC,CAAC;gBACtB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,KAAK,YAAY;gBAAE,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAAC,OAAO,IAAI,CAAC;YACtE,KAAK,iBAAiB;gBAAE,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAAC,OAAO,IAAI,CAAC;YAChF,KAAK,MAAM;gBAAE,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAAC,OAAO,IAAI,CAAC;YAC5D,KAAK,iBAAiB,CAAC,CAAC,OAAO,IAAI,CAAC;QACtC,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,cAAc,CAC5B,QAAgC,EAChC,OAAwF;IAExF,QAAQ,QAAQ,CAAC,SAAS,EAAE,CAAC;QAC3B,KAAK,iBAAiB,CAAC,CAAC,OAAO,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,KAAK,iBAAiB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,yBAAyB,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACpH,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,KAAK,OAAO,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACpC,KAAK,aAAa,CAAC,CAAC,OAAO,OAAO,CAAC,QAAQ,EAAE,IAAI,KAAK,aAAa,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ;YAC9F,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9B,KAAK,UAAU,CAAC,CAAC,OAAO,OAAO,CAAC,WAAW,KAAK,gBAAgB,IAAI,OAAO,CAAC,UAAU,CAAC,QAAQ;YAC7F,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,KAAK,MAAM,CAAC,CAAC,OAAO,OAAO,CAAC,WAAW,KAAK,eAAe,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI;YACpF,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvB,KAAK,iBAAiB,CAAC,CAAC,OAAO,OAAO,CAAC,QAAQ,EAAE,IAAI,KAAK,aAAa,IAAI,QAAQ,CAAC,YAAY;YAC9F,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,KAAK,WAAW,CAAC,CAAC,OAAO,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,KAAK,SAAS,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAChC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;IACrB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,KAAa,EACb,QAAqD;IAErD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC5E,OAAO,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;YAC7D,CAAC,CAAC,CAAC,GAAG,iBAAiB,EAAE,GAAG,cAAc,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC,CAAC,oFAAoF;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;AAChH,CAAC;AAED,SAAS,cAAc,CAAC,QAAoD;IAC1E,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,iBAAiB,CAAC;AACpE,CAAC;AAED,SAAS,aAAa,CAAC,SAAmB,EAAE,OAAiB;IAC3D,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IAC/B,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAChG,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,EAAU,EAAE,MAAM,GAAG,CAAC,EAAE,aAAa,GAAG,EAAE;IACrF,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,GAAG,aAAa,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;IAC/D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;IAChD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;UACvE,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnD,OAAO,MAAM,CAAC,MAAM,GAAG,EAAE,IAAI,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,MAAM,QAAQ,GAAG,kCAAkC,CAAC;IACpD,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACzD,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACxG,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,IAAI,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5F,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC"}
1
+ {"version":3,"file":"AnthropicReloginBrowserDriver.js","sourceRoot":"","sources":["../../src/core/AnthropicReloginBrowserDriver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * PasskeyCellActions — apply a VERIFIED `passkey-cell` mandate (or the equivalent local PIN action)
3
+ * on THIS machine (spec docs/specs/agent-held-google-passkey.md §3.2 / §3.3).
4
+ *
5
+ * One funnel for both origins so the PIN route and the mesh receiver cannot drift: the route
6
+ * verifies the PIN and calls `applyLocal`; the receiver verifies the signature/issuer/nonce and
7
+ * calls `applyMandate`. Every application follows the same discipline:
8
+ * 1. write the nonce as RECEIVED — for a revoke together with the cutoff it will apply — BEFORE
9
+ * touching authority (crash-safe: a boot sweep can finish a revoke left `received`);
10
+ * 2. act idempotently (grant / revoke / issuer-add / issuer-remove / revert-method);
11
+ * 3. read back, then mark the nonce APPLIED.
12
+ * A duplicate of a `received` revoke re-applies the STORED cutoff (never recomputed); a duplicate of
13
+ * an `applied` op answers applied without acting.
14
+ *
15
+ * Ops this build applies: grant, revoke (local cell), issuer-add, issuer-remove, revert-method.
16
+ * The remaining ops verify but answer `op-not-available-on-this-build` — they land with the
17
+ * enrollment / health / suspension increments of the same run.
18
+ */
19
+ import type { PasskeyGrantStore, PasskeyGrant } from './PasskeyGrantStore.js';
20
+ import type { PasskeyIssuerSet } from './PasskeyIssuerSet.js';
21
+ import type { PasskeyNonceLedger } from './PasskeyNonceLedger.js';
22
+ import { type PasskeyCellMandateBody, type PasskeyCellVerifyDeps, type PasskeyCellVerifyResult } from './PasskeyCellMandate.js';
23
+ export interface RevertMethodOutcome {
24
+ reverted: boolean;
25
+ to?: string;
26
+ reason?: string;
27
+ bindingMissing?: boolean;
28
+ }
29
+ export interface PasskeyCellActionDeps {
30
+ selfMachineId: string;
31
+ grants: PasskeyGrantStore;
32
+ issuers: PasskeyIssuerSet;
33
+ nonces: PasskeyNonceLedger;
34
+ /** Revert every browser-profile account for the email back to its prior method (registry-owned). */
35
+ revertMethod: (canonicalEmail: string) => RevertMethodOutcome[];
36
+ /** Drop the passkey binding + credential for the cell after a revoke; returns what changed (names only). */
37
+ onRevoked?: (canonicalEmail: string, covered: PasskeyGrant[]) => {
38
+ changed: string[];
39
+ } | Promise<{
40
+ changed: string[];
41
+ }>;
42
+ /** True when at least one OTHER machine is registered and active (issuer bootstrap applies). */
43
+ hasActivePeers: () => boolean;
44
+ log?: (line: string) => void;
45
+ }
46
+ export type PasskeyCellApplyResult = {
47
+ applied: true;
48
+ op: string;
49
+ duplicate?: boolean;
50
+ result: Record<string, unknown>;
51
+ } | {
52
+ applied: false;
53
+ op: string;
54
+ reason: string;
55
+ detail?: Record<string, unknown>;
56
+ };
57
+ /** Apply a mandate that already passed `verifyPasskeyCellMandate` (or handle its replay honestly). */
58
+ export declare function applyVerifiedPasskeyCellMandate(deps: PasskeyCellActionDeps, verified: PasskeyCellVerifyResult, issuerMachineIdForReplay?: string): Promise<PasskeyCellApplyResult>;
59
+ /** The PIN route's entry: the same funnel, the local machine as issuer, no signature to check. */
60
+ export declare function applyLocalPasskeyCellAction(deps: PasskeyCellActionDeps, body: PasskeyCellMandateBody): Promise<PasskeyCellApplyResult>;
61
+ /** Verify + apply in one step (the receiver route). */
62
+ export declare function receivePasskeyCellMandate(deps: PasskeyCellActionDeps & {
63
+ verify: Omit<PasskeyCellVerifyDeps, 'selfMachineId' | 'issuers' | 'nonces'>;
64
+ }, portable: unknown): Promise<PasskeyCellApplyResult>;
65
+ /**
66
+ * Boot sweep (spec §3.2): finish every revoke left `received` (a crash between the ledger write and
67
+ * the read-back). Re-applies each one's STORED cutoff and marks it applied. Idempotent; call before
68
+ * any grant-writing route acts (the routes call it when they build the authority set).
69
+ */
70
+ export declare function sweepReceivedPasskeyRevokes(deps: PasskeyCellActionDeps): Promise<{
71
+ finished: string[];
72
+ }>;
73
+ //# sourceMappingURL=PasskeyCellActions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PasskeyCellActions.d.ts","sourceRoot":"","sources":["../../src/core/PasskeyCellActions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAe,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAA4C,KAAK,sBAAsB,EAAE,KAAK,qBAAqB,EAAE,KAAK,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAE1K,MAAM,WAAW,mBAAmB;IAAG,QAAQ,EAAE,OAAO,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE;AAElH,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,oGAAoG;IACpG,YAAY,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,mBAAmB,EAAE,CAAC;IAChE,4GAA4G;IAC5G,SAAS,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK;QAAE,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACxH,gGAAgG;IAChG,cAAc,EAAE,MAAM,OAAO,CAAC;IAC9B,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED,MAAM,MAAM,sBAAsB,GAC9B;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GACnF;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC;AAErF,sGAAsG;AACtG,wBAAsB,+BAA+B,CAAC,IAAI,EAAE,qBAAqB,EAAE,QAAQ,EAAE,uBAAuB,EAAE,wBAAwB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAOxL;AAED,kGAAkG;AAClG,wBAAsB,2BAA2B,CAAC,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAG5I;AAED,uDAAuD;AACvD,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,qBAAqB,GAAG;IAAE,MAAM,EAAE,IAAI,CAAC,qBAAqB,EAAE,eAAe,GAAG,SAAS,GAAG,QAAQ,CAAC,CAAA;CAAE,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAGjN;AAoGD;;;;GAIG;AACH,wBAAsB,2BAA2B,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAU9G"}
@@ -0,0 +1,153 @@
1
+ import { passkeyCellKey, verifyPasskeyCellMandate } from './PasskeyCellMandate.js';
2
+ /** Apply a mandate that already passed `verifyPasskeyCellMandate` (or handle its replay honestly). */
3
+ export async function applyVerifiedPasskeyCellMandate(deps, verified, issuerMachineIdForReplay) {
4
+ if (!verified.ok) {
5
+ if (verified.reason === 'replay' && verified.replayOf)
6
+ return replay(deps, verified.replayOf);
7
+ return { applied: false, op: 'unknown', reason: verified.reason, ...(verified.detail ? { detail: { detail: verified.detail } } : {}) };
8
+ }
9
+ void issuerMachineIdForReplay;
10
+ return apply(deps, verified.body, verified.issuerMachineId, 'mandate');
11
+ }
12
+ /** The PIN route's entry: the same funnel, the local machine as issuer, no signature to check. */
13
+ export async function applyLocalPasskeyCellAction(deps, body) {
14
+ if (body.targetMachineId !== deps.selfMachineId)
15
+ return { applied: false, op: body.op, reason: 'target-not-this-machine' };
16
+ return apply(deps, body, deps.selfMachineId, 'local-pin');
17
+ }
18
+ /** Verify + apply in one step (the receiver route). */
19
+ export async function receivePasskeyCellMandate(deps, portable) {
20
+ const verified = verifyPasskeyCellMandate(portable, { ...deps.verify, selfMachineId: deps.selfMachineId, issuers: deps.issuers, nonces: deps.nonces });
21
+ return applyVerifiedPasskeyCellMandate(deps, verified);
22
+ }
23
+ async function replay(deps, nonce) {
24
+ const rec = deps.nonces.get(nonce);
25
+ if (!rec)
26
+ return { applied: false, op: 'unknown', reason: 'replay' };
27
+ if (rec.state === 'applied')
28
+ return { applied: true, op: rec.op, duplicate: true, result: { nonce: rec.nonce, appliedAt: rec.appliedAt ?? null } };
29
+ if (rec.state === 'dismissed')
30
+ return { applied: false, op: rec.op, reason: 'dismissed-by-operator' };
31
+ if (rec.op === 'revoke') {
32
+ // A received-but-unapplied revoke: re-run the idempotent delete with the STORED cutoff.
33
+ const email = rec.cellKey.slice(0, rec.cellKey.lastIndexOf('@'));
34
+ const r = deps.grants.revoke({ email, revokedBy: rec.issuerMachineId, nonce: rec.nonce, cutoffSeq: rec.appliedCutoffSeq ?? 0 });
35
+ const changed = (await deps.onRevoked?.(email, r.covered))?.changed ?? [];
36
+ deps.nonces.markApplied(rec.nonce);
37
+ return { applied: true, op: 'revoke', duplicate: true, result: { covered: r.covered.map((g) => g.localSeq), changed } };
38
+ }
39
+ return { applied: false, op: rec.op, reason: 'replay' };
40
+ }
41
+ async function apply(deps, body, issuerMachineId, origin) {
42
+ const cellKey = passkeyCellKey(body);
43
+ const record = (extra = {}) => deps.nonces.receive({
44
+ nonce: body.nonce, op: body.op, cellKey, issuerMachineId, expiresAt: body.expiresAt,
45
+ ...(body.replacesNonce ? { replacesNonce: body.replacesNonce } : {}), ...extra,
46
+ });
47
+ switch (body.op) {
48
+ case 'grant': {
49
+ if (!body.canonicalEmail)
50
+ return { applied: false, op: body.op, reason: 'email-required' };
51
+ // FD21 — no trust-on-first-use: a multi-machine agent refuses its first grant until at least one
52
+ // peer issuer is confirmed on THIS machine's own dashboard.
53
+ if (deps.hasActivePeers() && deps.issuers.peerIssuers().length === 0) {
54
+ return { applied: false, op: body.op, reason: 'issuer-bootstrap-required', detail: { hint: 'confirm at least one peer issuer with the PIN on this machine (POST /passkeys/issuer-add) before the first grant' } };
55
+ }
56
+ const rec = record();
57
+ if (!rec.recorded)
58
+ return replay(deps, rec.existing.nonce);
59
+ const r = deps.grants.grant({ email: body.canonicalEmail, grantedBy: body.principal, origin: origin === 'mandate' ? 'mandate' : 'local-pin',
60
+ ...(typeof body.args.googleCreatedAt === 'string' ? { googleCreatedAt: body.args.googleCreatedAt } : {}) });
61
+ if (!deps.grants.has(body.canonicalEmail))
62
+ return { applied: false, op: body.op, reason: 'read-back-failed' };
63
+ deps.nonces.markApplied(body.nonce);
64
+ return { applied: true, op: body.op, result: { localSeq: r.grant.localSeq, created: r.created, grantedBy: r.grant.grantedBy } };
65
+ }
66
+ case 'revoke': {
67
+ if (!body.canonicalEmail)
68
+ return { applied: false, op: body.op, reason: 'email-required' };
69
+ // The cutoff written with the RECEIVED nonce is always CONCRETE: the issuer's sequence when it
70
+ // knew one, else the target's current active instance (0 = nothing to revoke). A replay then
71
+ // re-applies exactly this number — a grant made AFTER the first application can never be caught.
72
+ const seq = body.args.revokesGrantSeq;
73
+ const cutoff = Number.isSafeInteger(seq) ? seq : (deps.grants.get(body.canonicalEmail)?.localSeq ?? 0);
74
+ const rec = record({ appliedCutoffSeq: cutoff });
75
+ if (!rec.recorded)
76
+ return replay(deps, rec.existing.nonce);
77
+ const r = deps.grants.revoke({ email: body.canonicalEmail, revokedBy: body.principal, nonce: body.nonce, cutoffSeq: cutoff });
78
+ const changed = (await deps.onRevoked?.(body.canonicalEmail, r.covered))?.changed ?? [];
79
+ const reverted = deps.revertMethod(body.canonicalEmail);
80
+ if (deps.grants.get(body.canonicalEmail) && deps.grants.get(body.canonicalEmail).localSeq <= cutoff) {
81
+ return { applied: false, op: body.op, reason: 'read-back-failed' };
82
+ }
83
+ deps.nonces.markApplied(body.nonce);
84
+ return { applied: true, op: body.op, result: { covered: r.covered.map((g) => g.localSeq), nothingToRevoke: r.nothingToRevoke, appliedCutoffSeq: r.appliedCutoffSeq, changed, reverted,
85
+ note: 'this stops THIS agent\'s passkey path only; the profile\'s live session and any stored password remain' } };
86
+ }
87
+ case 'issuer-add': {
88
+ const machineId = typeof body.args.machineId === 'string' ? body.args.machineId.trim() : '';
89
+ if (!machineId)
90
+ return { applied: false, op: body.op, reason: 'machine-id-required' };
91
+ // Both origins: only a machine that is ACTIVE in THIS machine's registry can become an issuer.
92
+ if (deps.issuers.status(machineId) !== 'active')
93
+ return { applied: false, op: body.op, reason: 'machine-not-active', detail: { status: deps.issuers.status(machineId) } };
94
+ const rec = record();
95
+ if (!rec.recorded)
96
+ return replay(deps, rec.existing.nonce);
97
+ const r = deps.issuers.add({ machineId, addedVia: origin === 'mandate' ? 'issuer-add' : 'operator-confirmed', ...(origin === 'mandate' ? { addedByIssuer: issuerMachineId } : {}) });
98
+ if (!deps.issuers.isListed(machineId))
99
+ return { applied: false, op: body.op, reason: 'read-back-failed' };
100
+ deps.nonces.markApplied(body.nonce);
101
+ return { applied: true, op: body.op, result: { machineId, added: r.added } };
102
+ }
103
+ case 'issuer-remove': {
104
+ const machineId = typeof body.args.machineId === 'string' ? body.args.machineId.trim() : '';
105
+ if (!machineId)
106
+ return { applied: false, op: body.op, reason: 'machine-id-required' };
107
+ const rec = record();
108
+ if (!rec.recorded)
109
+ return replay(deps, rec.existing.nonce);
110
+ const r = deps.issuers.remove(machineId);
111
+ if (deps.issuers.isListed(machineId))
112
+ return { applied: false, op: body.op, reason: 'read-back-failed' };
113
+ deps.nonces.markApplied(body.nonce);
114
+ return { applied: true, op: body.op, result: { machineId, removed: r.removed } };
115
+ }
116
+ case 'revert-method': {
117
+ if (!body.canonicalEmail)
118
+ return { applied: false, op: body.op, reason: 'email-required' };
119
+ const rec = record();
120
+ if (!rec.recorded)
121
+ return replay(deps, rec.existing.nonce);
122
+ const reverted = deps.revertMethod(body.canonicalEmail);
123
+ deps.nonces.markApplied(body.nonce);
124
+ return { applied: true, op: body.op, result: { reverted } };
125
+ }
126
+ default: {
127
+ // Verified but not applicable on this build: record the nonce so a later replay is honest, and
128
+ // name the gap rather than pretending the op ran.
129
+ const rec = record();
130
+ if (!rec.recorded)
131
+ return replay(deps, rec.existing.nonce);
132
+ deps.log?.(`[passkey-cell] op ${body.op} verified but not available on this build (cell ${cellKey})`);
133
+ return { applied: false, op: body.op, reason: 'op-not-available-on-this-build' };
134
+ }
135
+ }
136
+ }
137
+ /**
138
+ * Boot sweep (spec §3.2): finish every revoke left `received` (a crash between the ledger write and
139
+ * the read-back). Re-applies each one's STORED cutoff and marks it applied. Idempotent; call before
140
+ * any grant-writing route acts (the routes call it when they build the authority set).
141
+ */
142
+ export async function sweepReceivedPasskeyRevokes(deps) {
143
+ const finished = [];
144
+ for (const rec of deps.nonces.receivedRevokes()) {
145
+ const email = rec.cellKey.slice(0, rec.cellKey.lastIndexOf('@'));
146
+ const r = deps.grants.revoke({ email, revokedBy: rec.issuerMachineId, nonce: rec.nonce, cutoffSeq: rec.appliedCutoffSeq ?? 0 });
147
+ await deps.onRevoked?.(email, r.covered);
148
+ deps.nonces.markApplied(rec.nonce);
149
+ finished.push(rec.nonce);
150
+ }
151
+ return { finished };
152
+ }
153
+ //# sourceMappingURL=PasskeyCellActions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PasskeyCellActions.js","sourceRoot":"","sources":["../../src/core/PasskeyCellActions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * PasskeyCellMandate — the signed, cross-machine authority carrier for agent-held Google passkeys
3
+ * (spec docs/specs/agent-held-google-passkey.md §3.3, FD12).
4
+ *
5
+ * A mandate type SEPARATE from `account-follow-me`. It reuses the WS5.2 idea (an Ed25519 signature
6
+ * by the issuing machine's identity key, bound to that machine's fingerprint) with three additions
7
+ * the follow-me scheme does not have: an EXPECTED-ISSUER SET on the receiver, a durable NONCE
8
+ * LEDGER, and a short EXPIRY (15 minutes, ±2 minutes skew) — except for `revoke`, which only removes
9
+ * authority and is deliberately exempt from expiry so it can be re-delivered for weeks unchanged.
10
+ *
11
+ * Isolation both ways is structural: the signed bytes carry a DISTINCT domain tag, so a follow-me
12
+ * issuance signature can never verify as a passkey-cell mandate and vice versa, whatever the
13
+ * payload claims; the follow-me consumer additionally refuses any bundle without an
14
+ * `account-follow-me` authority, and the passkey receiver refuses any body whose `type` is not
15
+ * `passkey-cell`.
16
+ *
17
+ * Pure logic over injected seams (issuer public-key resolver, issuer set, nonce ledger, clock) so
18
+ * the authority decision is unit-testable without a server. The dashboard PIN never appears here.
19
+ */
20
+ import crypto from 'node:crypto';
21
+ import type { PasskeyIssuerSet, IssuerTrustVerdict } from './PasskeyIssuerSet.js';
22
+ import type { PasskeyNonceLedger } from './PasskeyNonceLedger.js';
23
+ /** Domain-separation tag — never interchangeable with the follow-me issuance tag. */
24
+ export declare const PASSKEY_CELL_DOMAIN = "instar-passkey-cell-mandate-v1";
25
+ export declare const PASSKEY_MANDATE_TTL_MS: number;
26
+ export declare const PASSKEY_MANDATE_SKEW_MS: number;
27
+ export declare const PASSKEY_CELL_OPS: readonly ["grant", "revoke", "enroll", "prove", "adopt", "delete-legacy", "revert-method", "attest-google-removed", "suspend-now", "resume-suspension", "issuer-add", "issuer-remove", "exclude-peer", "include-peer", "recheck-chrome"];
28
+ export type PasskeyCellOp = typeof PASSKEY_CELL_OPS[number];
29
+ export interface PasskeyCellMandateBody {
30
+ v: 1;
31
+ type: 'passkey-cell';
32
+ /** The VERIFIED principal on the issuing machine (operator uid / dashboard-PIN identity). */
33
+ principal: string;
34
+ /** Canonical account email the op addresses ('' for non-cell ops such as issuer-add). */
35
+ canonicalEmail: string;
36
+ /** The machine that must act — the receiver refuses anything not addressed to itself. */
37
+ targetMachineId: string;
38
+ op: PasskeyCellOp;
39
+ /** Op arguments (e.g. revoke: { revokesGrantSeq?: number }; issuer-add: { machineId }). */
40
+ args: Record<string, unknown>;
41
+ issuedAt: string;
42
+ nonce: string;
43
+ expiresAt: string;
44
+ /** Re-signed revoke: the nonce of the copy it replaces (same principal/issuedAt/cutoff). */
45
+ replacesNonce?: string;
46
+ }
47
+ export interface PasskeyCellSignature {
48
+ alg: 'ed25519';
49
+ /** The issuing machine's id/fingerprint — bound into the signed bytes. */
50
+ issuerFingerprint: string;
51
+ sig: string;
52
+ }
53
+ export interface PortablePasskeyCellMandate {
54
+ body: PasskeyCellMandateBody;
55
+ signature: PasskeyCellSignature;
56
+ }
57
+ /** Deterministic canonical form: sorted keys, no whitespace. */
58
+ export declare function canonicalPasskeyCellBody(body: PasskeyCellMandateBody): string;
59
+ export declare function mintPasskeyCellBody(input: {
60
+ principal: string;
61
+ canonicalEmail: string;
62
+ targetMachineId: string;
63
+ op: PasskeyCellOp;
64
+ args?: Record<string, unknown>;
65
+ now?: number;
66
+ ttlMs?: number;
67
+ replacesNonce?: string;
68
+ }): PasskeyCellMandateBody;
69
+ /** Sign on the issuing machine with its Ed25519 identity private key. */
70
+ export declare function signPasskeyCellMandate(body: PasskeyCellMandateBody, issuerFingerprint: string, ed25519PrivateKey: crypto.KeyObject | string): PortablePasskeyCellMandate;
71
+ export type PasskeyCellVerifyReason = 'malformed' | 'not-a-passkey-cell-mandate' | 'unknown-op' | 'unsupported-alg' | 'issuer-not-trusted' | 'no-issuer-key' | 'bad-issuer-key' | 'bad-signature' | 'target-not-this-machine' | 'expired' | 'not-yet-valid' | 'replay' | 'nonce-ledger-unreadable' | 'ttl-too-long';
72
+ export type PasskeyCellVerifyResult = {
73
+ ok: true;
74
+ body: PasskeyCellMandateBody;
75
+ issuerMachineId: string;
76
+ } | {
77
+ ok: false;
78
+ reason: PasskeyCellVerifyReason;
79
+ detail?: string;
80
+ issuerVerdict?: IssuerTrustVerdict;
81
+ replayOf?: string;
82
+ };
83
+ export interface PasskeyCellVerifyDeps {
84
+ selfMachineId: string;
85
+ /** The REGISTERED Ed25519 public key (PEM) for a machine id, from THIS machine's registry — never from the payload. */
86
+ issuerPublicKeyPem: (machineId: string) => string | null;
87
+ issuers: Pick<PasskeyIssuerSet, 'verdict'>;
88
+ nonces: Pick<PasskeyNonceLedger, 'get'>;
89
+ now?: () => number;
90
+ skewMs?: number;
91
+ }
92
+ /**
93
+ * Verify a received mandate. FAILS CLOSED on every uncertainty. Order: shape → issuer trusted →
94
+ * signature → target → freshness (revoke exempt) → replay. Recording the nonce is the CALLER's
95
+ * step (it must be written together with the revoke cutoff BEFORE acting).
96
+ */
97
+ export declare function verifyPasskeyCellMandate(portable: unknown, deps: PasskeyCellVerifyDeps): PasskeyCellVerifyResult;
98
+ /** `<canonicalEmail>@<targetMachineId>` — the ledger's cell key. */
99
+ export declare function passkeyCellKey(body: Pick<PasskeyCellMandateBody, 'canonicalEmail' | 'targetMachineId'>): string;
100
+ //# sourceMappingURL=PasskeyCellMandate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PasskeyCellMandate.d.ts","sourceRoot":"","sources":["../../src/core/PasskeyCellMandate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * PasskeyCellMandate — the signed, cross-machine authority carrier for agent-held Google passkeys
3
+ * (spec docs/specs/agent-held-google-passkey.md §3.3, FD12).
4
+ *
5
+ * A mandate type SEPARATE from `account-follow-me`. It reuses the WS5.2 idea (an Ed25519 signature
6
+ * by the issuing machine's identity key, bound to that machine's fingerprint) with three additions
7
+ * the follow-me scheme does not have: an EXPECTED-ISSUER SET on the receiver, a durable NONCE
8
+ * LEDGER, and a short EXPIRY (15 minutes, ±2 minutes skew) — except for `revoke`, which only removes
9
+ * authority and is deliberately exempt from expiry so it can be re-delivered for weeks unchanged.
10
+ *
11
+ * Isolation both ways is structural: the signed bytes carry a DISTINCT domain tag, so a follow-me
12
+ * issuance signature can never verify as a passkey-cell mandate and vice versa, whatever the
13
+ * payload claims; the follow-me consumer additionally refuses any bundle without an
14
+ * `account-follow-me` authority, and the passkey receiver refuses any body whose `type` is not
15
+ * `passkey-cell`.
16
+ *
17
+ * Pure logic over injected seams (issuer public-key resolver, issuer set, nonce ledger, clock) so
18
+ * the authority decision is unit-testable without a server. The dashboard PIN never appears here.
19
+ */
20
+ import crypto from 'node:crypto';
21
+ /** Domain-separation tag — never interchangeable with the follow-me issuance tag. */
22
+ export const PASSKEY_CELL_DOMAIN = 'instar-passkey-cell-mandate-v1';
23
+ export const PASSKEY_MANDATE_TTL_MS = 15 * 60_000;
24
+ export const PASSKEY_MANDATE_SKEW_MS = 2 * 60_000;
25
+ export const PASSKEY_CELL_OPS = [
26
+ 'grant', 'revoke', 'enroll', 'prove', 'adopt', 'delete-legacy', 'revert-method', 'attest-google-removed',
27
+ 'suspend-now', 'resume-suspension', 'issuer-add', 'issuer-remove', 'exclude-peer', 'include-peer', 'recheck-chrome',
28
+ ];
29
+ /** Deterministic canonical form: sorted keys, no whitespace. */
30
+ export function canonicalPasskeyCellBody(body) {
31
+ const sortKeys = (v) => {
32
+ if (Array.isArray(v))
33
+ return v.map(sortKeys);
34
+ if (v && typeof v === 'object') {
35
+ return Object.fromEntries(Object.keys(v).sort().map((k) => [k, sortKeys(v[k])]));
36
+ }
37
+ return v;
38
+ };
39
+ return JSON.stringify(sortKeys(body));
40
+ }
41
+ function signingInput(canonical, issuerFingerprint) {
42
+ return Buffer.from(`${PASSKEY_CELL_DOMAIN}\x1f${issuerFingerprint}\x1f${canonical}`, 'utf-8');
43
+ }
44
+ export function mintPasskeyCellBody(input) {
45
+ const now = input.now ?? Date.now();
46
+ return {
47
+ v: 1, type: 'passkey-cell', principal: input.principal, canonicalEmail: input.canonicalEmail.trim().toLowerCase(),
48
+ targetMachineId: input.targetMachineId, op: input.op, args: input.args ?? {},
49
+ issuedAt: new Date(now).toISOString(), nonce: crypto.randomUUID(),
50
+ expiresAt: new Date(now + (input.ttlMs ?? PASSKEY_MANDATE_TTL_MS)).toISOString(),
51
+ ...(input.replacesNonce ? { replacesNonce: input.replacesNonce } : {}),
52
+ };
53
+ }
54
+ /** Sign on the issuing machine with its Ed25519 identity private key. */
55
+ export function signPasskeyCellMandate(body, issuerFingerprint, ed25519PrivateKey) {
56
+ if (!issuerFingerprint)
57
+ throw new Error('passkey-cell-issuer-fingerprint-required');
58
+ if (body.type !== 'passkey-cell' || !PASSKEY_CELL_OPS.includes(body.op))
59
+ throw new Error('passkey-cell-body-invalid');
60
+ const key = typeof ed25519PrivateKey === 'string' ? crypto.createPrivateKey(ed25519PrivateKey) : ed25519PrivateKey;
61
+ const sig = crypto.sign(null, signingInput(canonicalPasskeyCellBody(body), issuerFingerprint), key);
62
+ return { body, signature: { alg: 'ed25519', issuerFingerprint, sig: sig.toString('base64') } };
63
+ }
64
+ /**
65
+ * Verify a received mandate. FAILS CLOSED on every uncertainty. Order: shape → issuer trusted →
66
+ * signature → target → freshness (revoke exempt) → replay. Recording the nonce is the CALLER's
67
+ * step (it must be written together with the revoke cutoff BEFORE acting).
68
+ */
69
+ export function verifyPasskeyCellMandate(portable, deps) {
70
+ const p = portable;
71
+ if (!p || typeof p !== 'object' || !p.body || typeof p.body !== 'object' || !p.signature || typeof p.signature !== 'object') {
72
+ return { ok: false, reason: 'malformed' };
73
+ }
74
+ const body = p.body;
75
+ const signature = p.signature;
76
+ if (body.v !== 1 || body.type !== 'passkey-cell')
77
+ return { ok: false, reason: 'not-a-passkey-cell-mandate' };
78
+ if (!PASSKEY_CELL_OPS.includes(body.op))
79
+ return { ok: false, reason: 'unknown-op', detail: String(body.op) };
80
+ for (const f of ['principal', 'targetMachineId', 'issuedAt', 'nonce', 'expiresAt']) {
81
+ if (typeof body[f] !== 'string' || !body[f])
82
+ return { ok: false, reason: 'malformed', detail: f };
83
+ }
84
+ if (typeof body.canonicalEmail !== 'string' || !body.args || typeof body.args !== 'object')
85
+ return { ok: false, reason: 'malformed' };
86
+ if (signature.alg !== 'ed25519' || typeof signature.issuerFingerprint !== 'string' || typeof signature.sig !== 'string') {
87
+ return { ok: false, reason: 'unsupported-alg' };
88
+ }
89
+ // Expected-issuer set FIRST: an untrusted issuer is refused before any key lookup (no TOFU).
90
+ const issuerVerdict = deps.issuers.verdict(signature.issuerFingerprint);
91
+ if (!issuerVerdict.trusted)
92
+ return { ok: false, reason: 'issuer-not-trusted', issuerVerdict };
93
+ const pem = deps.issuerPublicKeyPem(signature.issuerFingerprint);
94
+ if (!pem)
95
+ return { ok: false, reason: 'no-issuer-key' };
96
+ let pub;
97
+ try {
98
+ pub = crypto.createPublicKey(pem);
99
+ }
100
+ catch (err) {
101
+ return { ok: false, reason: 'bad-issuer-key', detail: err instanceof Error ? err.message : String(err) };
102
+ }
103
+ let valid = false;
104
+ try {
105
+ valid = crypto.verify(null, signingInput(canonicalPasskeyCellBody(body), signature.issuerFingerprint), pub, Buffer.from(signature.sig, 'base64'));
106
+ }
107
+ catch {
108
+ valid = false;
109
+ }
110
+ if (!valid)
111
+ return { ok: false, reason: 'bad-signature' };
112
+ if (body.targetMachineId !== deps.selfMachineId)
113
+ return { ok: false, reason: 'target-not-this-machine' };
114
+ const now = (deps.now ?? Date.now)();
115
+ const skew = deps.skewMs ?? PASSKEY_MANDATE_SKEW_MS;
116
+ const issued = Date.parse(body.issuedAt);
117
+ const expires = Date.parse(body.expiresAt);
118
+ if (!Number.isFinite(issued) || !Number.isFinite(expires))
119
+ return { ok: false, reason: 'malformed', detail: 'timestamps' };
120
+ if (issued - skew > now)
121
+ return { ok: false, reason: 'not-yet-valid' };
122
+ // Defence in depth: an issuer cannot mint a long-lived mandate by stretching expiresAt.
123
+ if (expires - issued > PASSKEY_MANDATE_TTL_MS + skew)
124
+ return { ok: false, reason: 'ttl-too-long' };
125
+ // Only `revoke` is exempt from expiry (it can only remove authority); every other op must be fresh.
126
+ if (body.op !== 'revoke' && now > expires + skew)
127
+ return { ok: false, reason: 'expired' };
128
+ let seen;
129
+ try {
130
+ seen = deps.nonces.get(body.nonce) ?? (body.replacesNonce ? deps.nonces.get(body.replacesNonce) : null);
131
+ }
132
+ catch (err) {
133
+ return { ok: false, reason: 'nonce-ledger-unreadable', detail: err instanceof Error ? err.message : String(err) };
134
+ }
135
+ if (seen)
136
+ return { ok: false, reason: 'replay', replayOf: seen.nonce };
137
+ return { ok: true, body, issuerMachineId: signature.issuerFingerprint };
138
+ }
139
+ /** `<canonicalEmail>@<targetMachineId>` — the ledger's cell key. */
140
+ export function passkeyCellKey(body) {
141
+ return `${body.canonicalEmail}@${body.targetMachineId}`;
142
+ }
143
+ //# sourceMappingURL=PasskeyCellMandate.js.map