ftown 0.20.9 → 0.24.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.
Files changed (154) hide show
  1. package/dist/attention-events.d.ts +1 -1
  2. package/dist/attention-store.d.ts +3 -0
  3. package/dist/attention-store.js +25 -1
  4. package/dist/attention-store.js.map +1 -1
  5. package/dist/centrifugo-client.d.ts +28 -11
  6. package/dist/centrifugo-client.js +84 -70
  7. package/dist/centrifugo-client.js.map +1 -1
  8. package/dist/cli-client.d.ts +11 -1
  9. package/dist/cli-client.js +23 -3
  10. package/dist/cli-client.js.map +1 -1
  11. package/dist/command-rpc.d.ts +2 -0
  12. package/dist/command-rpc.js +59 -17
  13. package/dist/command-rpc.js.map +1 -1
  14. package/dist/identity-reset.d.ts +4 -1
  15. package/dist/identity-reset.js +54 -6
  16. package/dist/identity-reset.js.map +1 -1
  17. package/dist/index.js +194 -288
  18. package/dist/index.js.map +1 -1
  19. package/dist/ledger-pairing-client.d.ts +28 -0
  20. package/dist/ledger-pairing-client.js +154 -0
  21. package/dist/ledger-pairing-client.js.map +1 -0
  22. package/dist/ledger-relay.d.ts +159 -0
  23. package/dist/ledger-relay.js +595 -0
  24. package/dist/ledger-relay.js.map +1 -0
  25. package/dist/ledger-reoffer.d.ts +56 -0
  26. package/dist/ledger-reoffer.js +210 -0
  27. package/dist/ledger-reoffer.js.map +1 -0
  28. package/dist/ledger-startup.d.ts +176 -0
  29. package/dist/ledger-startup.js +233 -0
  30. package/dist/ledger-startup.js.map +1 -0
  31. package/dist/local-api-server.d.ts +3 -0
  32. package/dist/local-api-server.js +68 -6
  33. package/dist/local-api-server.js.map +1 -1
  34. package/dist/mail-delivery.d.ts +26 -3
  35. package/dist/mail-delivery.js +65 -7
  36. package/dist/mail-delivery.js.map +1 -1
  37. package/dist/preview-protocol.d.ts +19 -3
  38. package/dist/preview-protocol.js +14 -0
  39. package/dist/preview-protocol.js.map +1 -1
  40. package/dist/relay-token.d.ts +45 -0
  41. package/dist/relay-token.js +138 -0
  42. package/dist/relay-token.js.map +1 -0
  43. package/dist/revocation-gating.d.ts +0 -13
  44. package/dist/revocation-gating.js +0 -16
  45. package/dist/revocation-gating.js.map +1 -1
  46. package/dist/security/bridge/identity.d.ts +2 -47
  47. package/dist/security/bridge/identity.js +3 -3
  48. package/dist/security/bridge/identity.js.map +1 -1
  49. package/dist/security/bridge/ledger-identity.d.ts +48 -0
  50. package/dist/security/bridge/ledger-identity.js +342 -0
  51. package/dist/security/bridge/ledger-identity.js.map +1 -0
  52. package/dist/security/bridge/ledger-rpc.d.ts +34 -0
  53. package/dist/security/bridge/ledger-rpc.js +58 -0
  54. package/dist/security/bridge/ledger-rpc.js.map +1 -0
  55. package/dist/security/bridge/ledger-store.d.ts +153 -0
  56. package/dist/security/bridge/ledger-store.js +825 -0
  57. package/dist/security/bridge/ledger-store.js.map +1 -0
  58. package/dist/security/bridge/metadata.d.ts +2 -2
  59. package/dist/security/bridge/permissions.js +4 -3
  60. package/dist/security/bridge/permissions.js.map +1 -1
  61. package/dist/security/bridge/policy.d.ts +43 -23
  62. package/dist/security/bridge/policy.js +214 -146
  63. package/dist/security/bridge/policy.js.map +1 -1
  64. package/dist/security/bridge/security.d.ts +212 -33
  65. package/dist/security/bridge/security.js +437 -165
  66. package/dist/security/bridge/security.js.map +1 -1
  67. package/dist/security/crypto.js +1 -1
  68. package/dist/security/crypto.js.map +1 -1
  69. package/dist/security/ledger/announce.d.ts +32 -0
  70. package/dist/security/ledger/announce.js +101 -0
  71. package/dist/security/ledger/announce.js.map +1 -0
  72. package/dist/security/ledger/channels.d.ts +5 -0
  73. package/dist/security/ledger/channels.js +21 -0
  74. package/dist/security/ledger/channels.js.map +1 -0
  75. package/dist/security/ledger/ledger.d.ts +154 -0
  76. package/dist/security/ledger/ledger.js +878 -0
  77. package/dist/security/ledger/ledger.js.map +1 -0
  78. package/dist/security/ledger/pairing.d.ts +81 -0
  79. package/dist/security/ledger/pairing.js +414 -0
  80. package/dist/security/ledger/pairing.js.map +1 -0
  81. package/dist/security/ledger/proof.d.ts +36 -0
  82. package/dist/security/ledger/proof.js +193 -0
  83. package/dist/security/ledger/proof.js.map +1 -0
  84. package/dist/security/ledger/protocol.d.ts +113 -0
  85. package/dist/security/ledger/protocol.js +16 -0
  86. package/dist/security/ledger/protocol.js.map +1 -0
  87. package/dist/security/ledger/testing.d.ts +27 -0
  88. package/dist/security/ledger/testing.js +70 -0
  89. package/dist/security/ledger/testing.js.map +1 -0
  90. package/dist/security/ledger/webauthn.d.ts +12 -0
  91. package/dist/security/ledger/webauthn.js +147 -0
  92. package/dist/security/ledger/webauthn.js.map +1 -0
  93. package/dist/security/protocol.d.ts +5 -10
  94. package/dist/security-cli.d.ts +5 -0
  95. package/dist/security-cli.js +28 -16
  96. package/dist/security-cli.js.map +1 -1
  97. package/dist/session-controller.d.ts +9 -3
  98. package/dist/session-controller.js +120 -20
  99. package/dist/session-controller.js.map +1 -1
  100. package/dist/session-inbox-protocol.d.ts +2 -0
  101. package/dist/session-preview.d.ts +20 -5
  102. package/dist/session-preview.js +185 -37
  103. package/dist/session-preview.js.map +1 -1
  104. package/dist/session-store.js +19 -1
  105. package/dist/session-store.js.map +1 -1
  106. package/dist/sessions-commands.js +41 -7
  107. package/dist/sessions-commands.js.map +1 -1
  108. package/dist/token-provider.d.ts +39 -0
  109. package/dist/token-provider.js +101 -0
  110. package/dist/token-provider.js.map +1 -0
  111. package/dist/types.d.ts +1 -1
  112. package/opencode-plugin/ftown.js +15 -2
  113. package/package.json +2 -2
  114. package/skills/ftown/SKILL.md +18 -7
  115. package/skills/ftown/references/sessions.md +38 -12
  116. package/dist/bridge-auth.d.ts +0 -31
  117. package/dist/bridge-auth.js +0 -70
  118. package/dist/bridge-auth.js.map +0 -1
  119. package/dist/pairing-client.d.ts +0 -62
  120. package/dist/pairing-client.js +0 -469
  121. package/dist/pairing-client.js.map +0 -1
  122. package/dist/rotating-token-refresher.d.ts +0 -42
  123. package/dist/rotating-token-refresher.js +0 -91
  124. package/dist/rotating-token-refresher.js.map +0 -1
  125. package/dist/security/account-crypto.d.ts +0 -33
  126. package/dist/security/account-crypto.js +0 -649
  127. package/dist/security/account-crypto.js.map +0 -1
  128. package/dist/security/account-protocol.d.ts +0 -228
  129. package/dist/security/account-protocol.js +0 -2
  130. package/dist/security/account-protocol.js.map +0 -1
  131. package/dist/security/bridge/account-client.d.ts +0 -7
  132. package/dist/security/bridge/account-client.js +0 -101
  133. package/dist/security/bridge/account-client.js.map +0 -1
  134. package/dist/security/bridge/account-state.d.ts +0 -105
  135. package/dist/security/bridge/account-state.js +0 -79
  136. package/dist/security/bridge/account-state.js.map +0 -1
  137. package/dist/security/bridge/pending-approval.d.ts +0 -21
  138. package/dist/security/bridge/pending-approval.js +0 -80
  139. package/dist/security/bridge/pending-approval.js.map +0 -1
  140. package/dist/security/bridge/pending-enrollment.d.ts +0 -33
  141. package/dist/security/bridge/pending-enrollment.js +0 -177
  142. package/dist/security/bridge/pending-enrollment.js.map +0 -1
  143. package/dist/security/bridge/revocation.d.ts +0 -14
  144. package/dist/security/bridge/revocation.js +0 -40
  145. package/dist/security/bridge/revocation.js.map +0 -1
  146. package/dist/security/pending-approval-crypto.d.ts +0 -29
  147. package/dist/security/pending-approval-crypto.js +0 -716
  148. package/dist/security/pending-approval-crypto.js.map +0 -1
  149. package/dist/security/pending-approval-protocol.d.ts +0 -329
  150. package/dist/security/pending-approval-protocol.js +0 -2
  151. package/dist/security/pending-approval-protocol.js.map +0 -1
  152. package/dist/security/security-nudge.d.ts +0 -31
  153. package/dist/security/security-nudge.js +0 -98
  154. package/dist/security/security-nudge.js.map +0 -1
@@ -1,91 +0,0 @@
1
- import { UnauthorizedError } from 'centrifuge';
2
- const COOLDOWN_BASE_MS = 15_000;
3
- const COOLDOWN_MAX_MS = 600_000;
4
- /**
5
- * Owns the bridge's single-use refresh token.
6
- *
7
- * Token rotation is single-flight inside this process: if centrifuge-js asks
8
- * for a token twice concurrently, both callers share one exchange instead of
9
- * racing the same credential. If another process already rotated the token and
10
- * persisted its replacement, a rejected in-memory token gets one recovery
11
- * attempt from disk — the same state repair that previously required restart.
12
- *
13
- * Transient failures (network errors, 5xx) arm an exponential cooldown during
14
- * which getToken() rejects without calling the API, because centrifuge-js
15
- * retries a failed token fetch every 5-10 s with no growth. The cooldown error
16
- * is deliberately not an UnauthorizedError: centrifuge-js treats that as
17
- * permanent and stops retrying for good.
18
- */
19
- export class RotatingTokenRefresher {
20
- options;
21
- currentRefreshToken;
22
- inFlight = null;
23
- consecutiveFailures = 0;
24
- cooldownUntil = 0;
25
- now;
26
- random;
27
- constructor(options) {
28
- this.options = options;
29
- this.currentRefreshToken = options.initialRefreshToken;
30
- this.now = options.now ?? (() => performance.now());
31
- this.random = options.random ?? Math.random;
32
- }
33
- cooldownRemainingMs() {
34
- return Math.max(0, this.cooldownUntil - this.now());
35
- }
36
- getToken() {
37
- if (this.inFlight)
38
- return this.inFlight;
39
- const remaining = this.cooldownRemainingMs();
40
- if (remaining > 0) {
41
- return Promise.reject(new Error(`Token refresh cooling down for ${Math.ceil(remaining / 1000)}s after ${this.consecutiveFailures} failed attempts`));
42
- }
43
- const operation = this.refreshAndRotate().finally(() => {
44
- if (this.inFlight === operation)
45
- this.inFlight = null;
46
- });
47
- this.inFlight = operation;
48
- return operation;
49
- }
50
- async refreshAndRotate() {
51
- try {
52
- const token = await this.exchange();
53
- this.consecutiveFailures = 0;
54
- this.cooldownUntil = 0;
55
- return token;
56
- }
57
- catch (error) {
58
- if (!(error instanceof UnauthorizedError))
59
- this.armCooldown();
60
- throw error;
61
- }
62
- }
63
- armCooldown() {
64
- this.consecutiveFailures++;
65
- const base = Math.min(COOLDOWN_BASE_MS * 2 ** (this.consecutiveFailures - 1), COOLDOWN_MAX_MS);
66
- this.cooldownUntil = this.now() + base * (0.8 + 0.4 * this.random());
67
- }
68
- async exchange() {
69
- let refreshed;
70
- try {
71
- refreshed = await this.options.refresh(this.currentRefreshToken);
72
- }
73
- catch (error) {
74
- if (!(error instanceof UnauthorizedError))
75
- throw error;
76
- const persistedToken = this.options.loadPersistedRefreshToken();
77
- if (!persistedToken || persistedToken === this.currentRefreshToken) {
78
- throw error;
79
- }
80
- // Another bridge process sharing this data directory completed a
81
- // rotation first. Adopt its persisted token and retry exactly once.
82
- this.currentRefreshToken = persistedToken;
83
- this.options.onPersistedTokenRecovery?.();
84
- refreshed = await this.options.refresh(this.currentRefreshToken);
85
- }
86
- this.currentRefreshToken = refreshed.refreshToken;
87
- this.options.persistRefreshToken(this.currentRefreshToken);
88
- return refreshed.token;
89
- }
90
- }
91
- //# sourceMappingURL=rotating-token-refresher.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rotating-token-refresher.js","sourceRoot":"","sources":["../src/rotating-token-refresher.ts"],"names":[],"mappings":"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"}
@@ -1,33 +0,0 @@
1
- import type { EndpointIdentity, EndpointPublic } from './protocol.js';
2
- import type { AccountCheckpoint, AccountEnrollmentBundle, AccountEnrollmentLink, AccountEnrollmentRequest, AccountErrorCode, AccountHistory, AccountOperation, AccountSigningIdentity, AccountTrustFailure, SignedAccountGenesis, SignedAccountTransition, VerifiedAccountTrust } from './account-protocol.js';
3
- export declare const ACCOUNT_TRUST_LIMITS: Readonly<{
4
- maxHistoryBytes: 2097152;
5
- maxTransitions: 1024;
6
- maxDevices: 128;
7
- maxBridges: 128;
8
- enrollmentLifetimeMs: 300000;
9
- refreshIntervalMs: 600000;
10
- offlineGraceMs: 86400000;
11
- maxFutureSkewMs: 30000;
12
- maxLabelLength: 200;
13
- }>;
14
- /** No untrusted text, key material or underlying crypto error enters this error. */
15
- export declare class AccountTrustError extends Error implements AccountTrustFailure {
16
- readonly code: AccountErrorCode;
17
- readonly retryable: boolean;
18
- constructor(code: AccountErrorCode);
19
- }
20
- export declare function parseAccountHistory(value: unknown): AccountHistory;
21
- export declare function generateAccountSigningIdentity(extractable?: boolean): Promise<AccountSigningIdentity>;
22
- export declare function generateAccountBridgeCandidate(bridgeId: string, extractable?: boolean): Promise<EndpointIdentity>;
23
- export declare function importAccountBridgeCandidate(value: EndpointPublic, privateKey: JsonWebKey, extractable?: boolean): Promise<EndpointIdentity>;
24
- export declare function createAccountGenesis(ownerId: string, value: EndpointPublic, signing: AccountSigningIdentity, name: string, now?: number): Promise<SignedAccountGenesis>;
25
- export declare function signAccountTransition(value: AccountCheckpoint, signerId: string, signing: AccountSigningIdentity, op: AccountOperation, now?: number): Promise<SignedAccountTransition>;
26
- export declare function verifyAccountHistory(history: AccountHistory, pinned: AccountCheckpoint | null, now?: number): Promise<AccountCheckpoint>;
27
- export declare function parseAccountEnrollmentRequest(value: unknown, now?: number): Promise<AccountEnrollmentRequest>;
28
- export declare function createAccountEnrollment(identity: EndpointIdentity, name: string, signing: AccountSigningIdentity | null, bridgeId: string | null, now?: number): Promise<AccountEnrollmentLink>;
29
- export declare function encodeAccountEnrollmentLink(link: AccountEnrollmentLink): string;
30
- export declare function parseAccountEnrollmentLink(value: unknown, now?: number): Promise<AccountEnrollmentLink>;
31
- export declare function accountComparisonCode(link: AccountEnrollmentLink): Promise<string>;
32
- export declare function sealAccountApproval(approver: EndpointIdentity, link: AccountEnrollmentLink, history: AccountHistory, now?: number): Promise<AccountEnrollmentBundle>;
33
- export declare function openAccountApproval(candidate: EndpointIdentity, link: AccountEnrollmentLink, bundle: AccountEnrollmentBundle, history: AccountHistory, now?: number): Promise<VerifiedAccountTrust>;