@codemem/server 0.47.0-beta.3 → 0.47.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/dist/account/context.d.ts +2 -0
- package/dist/account/context.d.ts.map +1 -1
- package/dist/account/link-registry.d.ts +20 -3
- package/dist/account/link-registry.d.ts.map +1 -1
- package/dist/account/owner-recovery-candidates.d.ts +30 -0
- package/dist/account/owner-recovery-candidates.d.ts.map +1 -0
- package/dist/account/owner-recovery-context.d.ts +20 -0
- package/dist/account/owner-recovery-context.d.ts.map +1 -0
- package/dist/account/owner-recovery-evidence.d.ts +24 -0
- package/dist/account/owner-recovery-evidence.d.ts.map +1 -0
- package/dist/account/owner-recovery-service.d.ts +41 -0
- package/dist/account/owner-recovery-service.d.ts.map +1 -0
- package/dist/account/owner-recovery-types.d.ts +65 -0
- package/dist/account/owner-recovery-types.d.ts.map +1 -0
- package/dist/account/owner-status.d.ts +8 -0
- package/dist/account/owner-status.d.ts.map +1 -0
- package/dist/account/rebind.d.ts +41 -0
- package/dist/account/rebind.d.ts.map +1 -0
- package/dist/account/status.d.ts +40 -7
- package/dist/account/status.d.ts.map +1 -1
- package/dist/index.d.ts +10 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3138 -74
- package/dist/index.js.map +1 -1
- package/dist/routes/account-operations.d.ts.map +1 -1
- package/dist/routes/account-owner-recovery.d.ts +7 -0
- package/dist/routes/account-owner-recovery.d.ts.map +1 -0
- package/dist/routes/memory-tools.d.ts +1 -2
- package/dist/routes/memory-tools.d.ts.map +1 -1
- package/dist/routes/memory.d.ts.map +1 -1
- package/dist/routes/pack.d.ts.map +1 -1
- package/dist/routes/sync.d.ts.map +1 -1
- package/dist/routes/team-setup-view.d.ts +2 -0
- package/dist/routes/team-setup-view.d.ts.map +1 -1
- package/dist/routes/team-setup.d.ts.map +1 -1
- package/package.json +3 -3
- package/static/app.js +43 -43
- package/static/app.js.br +0 -0
- package/static/app.js.gz +0 -0
- package/static/index.html +24 -2
|
@@ -13,6 +13,8 @@ export interface AccountContext extends AccountProfile {
|
|
|
13
13
|
coordinatorUrl: string;
|
|
14
14
|
groupId: string;
|
|
15
15
|
fingerprint: string;
|
|
16
|
+
/** Present on real profile contexts; optional for legacy injected readers. */
|
|
17
|
+
publicKeyHash?: string;
|
|
16
18
|
fileIdentity: {
|
|
17
19
|
dev: string;
|
|
18
20
|
ino: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/account/context.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,YAAY,GACrB,OAAO,GACP,4BAA4B,GAC5B,yBAAyB,GACzB,0BAA0B,GAC1B,oBAAoB,GACpB,sBAAsB,CAAC;AAC1B,MAAM,WAAW,cAAc;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AACD,MAAM,WAAW,cAAe,SAAQ,cAAc;IACrD,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3C;AACD,MAAM,MAAM,oBAAoB,GAC7B;IACA,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,WAAW,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACvC,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;CAC9B,GACD;IAAE,KAAK,EAAE,8BAA8B,GAAG,6BAA6B,CAAA;CAAE,CAAC;AAC7E,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,oBAAoB,CAAC;AAC9E,MAAM,WAAW,2BAA2B;IAC3C,UAAU,EAAE,MAAM,cAAc,GAAG,IAAI,CAAC;IACxC,UAAU,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/account/context.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,YAAY,GACrB,OAAO,GACP,4BAA4B,GAC5B,yBAAyB,GACzB,0BAA0B,GAC1B,oBAAoB,GACpB,sBAAsB,CAAC;AAC1B,MAAM,WAAW,cAAc;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AACD,MAAM,WAAW,cAAe,SAAQ,cAAc;IACrD,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,8EAA8E;IAC9E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3C;AACD,MAAM,MAAM,oBAAoB,GAC7B;IACA,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,WAAW,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACvC,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;CAC9B,GACD;IAAE,KAAK,EAAE,8BAA8B,GAAG,6BAA6B,CAAA;CAAE,CAAC;AAC7E,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,oBAAoB,CAAC;AAC9E,MAAM,WAAW,2BAA2B;IAC3C,UAAU,EAAE,MAAM,cAAc,GAAG,IAAI,CAAC;IACxC,UAAU,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AA8GD,qFAAqF;AACrF,wBAAgB,0BAA0B,CACzC,OAAO,EAAE,2BAA2B,GAClC,oBAAoB,CAQtB"}
|
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
import { changeCoordinatorAccount, linkCoordinatorAccount } from "@codemem/core";
|
|
2
2
|
import type { AccountContext, AccountContextReader } from "./context.js";
|
|
3
|
+
import type { AccountRebindRunner } from "./rebind.js";
|
|
3
4
|
type CoordinatorAuthLinkAuthorityKind = Parameters<typeof linkCoordinatorAccount>[0]["expectedAuthority"];
|
|
4
|
-
export type AccountLinkFailure = "schema_upgrade_required" | "configuration_invalid" | "device_unavailable" | "request_failed" | "review_required" | "link_conflict" | "invalid_response" | "context_changed" | "identity_mismatch" | "link_stopped" | "cancellation_unconfirmed" | "receiver_close_failed"
|
|
5
|
+
export type AccountLinkFailure = "schema_upgrade_required" | "configuration_invalid" | "device_unavailable" | "request_failed" | "review_required" | "link_conflict" | "invalid_response" | "context_changed" | "identity_mismatch" | "link_stopped" | "cancellation_unconfirmed" | "receiver_close_failed" | "account_not_linked" | "already_this_identity" | "current_identity_linked" | "device_already_bound" | "daily_limit"
|
|
6
|
+
/** The coordinator can't switch this device (for example, no enrollment names its Identity). */
|
|
7
|
+
| "sign_in_unavailable"
|
|
8
|
+
/** The coordinator may have bound this device; the switch resumes on restart. */
|
|
9
|
+
| "switch_pending"
|
|
10
|
+
/** A self-bind may have committed; this Viewer holds the operation until it restarts. */
|
|
11
|
+
| "bind_unconfirmed";
|
|
12
|
+
export type AccountOperationIntent = "connect" | "refresh" | "disconnect" | "sign_in";
|
|
5
13
|
export interface AccountLinkOperationV1 {
|
|
6
|
-
intent?:
|
|
14
|
+
intent?: AccountOperationIntent;
|
|
7
15
|
operationId: string;
|
|
8
16
|
groupId: string;
|
|
9
17
|
contextId: string;
|
|
@@ -23,8 +31,9 @@ export type AccountLinkStartResult = {
|
|
|
23
31
|
error: "account_shutting_down" | "account_context_changed";
|
|
24
32
|
};
|
|
25
33
|
export interface AccountLinkRegistry {
|
|
34
|
+
tryReserveRecovery?(): AccountRecoveryReservation | null;
|
|
26
35
|
start(options: {
|
|
27
|
-
intent?:
|
|
36
|
+
intent?: AccountOperationIntent;
|
|
28
37
|
context: AccountContext;
|
|
29
38
|
expectedCoordinatorId: string;
|
|
30
39
|
expectedAuthority: CoordinatorAuthLinkAuthorityKind;
|
|
@@ -32,6 +41,8 @@ export interface AccountLinkRegistry {
|
|
|
32
41
|
expectedLinkId?: string;
|
|
33
42
|
}): AccountLinkStartResult;
|
|
34
43
|
lifecycleToken(): symbol;
|
|
44
|
+
/** True when a rebind runner was configured, so sign_in can run. */
|
|
45
|
+
supportsSignIn?(): boolean;
|
|
35
46
|
get(operationId: string): AccountLinkOperationV1 | null;
|
|
36
47
|
forContext(contextId: string): AccountLinkOperationV1 | null;
|
|
37
48
|
hasActive(): boolean;
|
|
@@ -39,10 +50,16 @@ export interface AccountLinkRegistry {
|
|
|
39
50
|
cancel(operationId: string): AccountLinkOperationV1 | null;
|
|
40
51
|
close(): Promise<void>;
|
|
41
52
|
}
|
|
53
|
+
export interface AccountRecoveryReservation {
|
|
54
|
+
isCurrent(): boolean;
|
|
55
|
+
release(): void;
|
|
56
|
+
}
|
|
42
57
|
export interface AccountLinkRegistryOptions {
|
|
43
58
|
readContext: AccountContextReader;
|
|
44
59
|
link?: typeof linkCoordinatorAccount;
|
|
45
60
|
change?: typeof changeCoordinatorAccount;
|
|
61
|
+
/** Sign-in that may switch this device's Identity; without it, sign_in is unavailable. */
|
|
62
|
+
rebind?: AccountRebindRunner;
|
|
46
63
|
now?: () => number;
|
|
47
64
|
}
|
|
48
65
|
export declare function sameAuthority(captured: AccountContext, fresh: AccountContext): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link-registry.d.ts","sourceRoot":"","sources":["../../src/account/link-registry.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"link-registry.d.ts","sourceRoot":"","sources":["../../src/account/link-registry.ts"],"names":[],"mappings":"AACA,OAAO,EAGN,wBAAwB,EACxB,sBAAsB,EACtB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,KAAK,EAAuB,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE5E,KAAK,gCAAgC,GAAG,UAAU,CACjD,OAAO,sBAAsB,CAC7B,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;AAE1B,MAAM,MAAM,kBAAkB,GAC3B,yBAAyB,GACzB,uBAAuB,GACvB,oBAAoB,GACpB,gBAAgB,GAChB,iBAAiB,GACjB,eAAe,GACf,kBAAkB,GAClB,iBAAiB,GACjB,mBAAmB,GACnB,cAAc,GACd,0BAA0B,GAC1B,uBAAuB,GAEvB,oBAAoB,GACpB,uBAAuB,GACvB,yBAAyB,GACzB,sBAAsB,GACtB,aAAa;AACf,gGAAgG;GAC9F,qBAAqB;AACvB,iFAAiF;GAC/E,gBAAgB;AAClB,yFAAyF;GACvF,kBAAkB,CAAC;AACtB,MAAM,MAAM,sBAAsB,GAAG,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,CAAC;AACtF,MAAM,WAAW,sBAAsB;IACtC,MAAM,CAAC,EAAE,sBAAsB,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,UAAU,GAAG,kBAAkB,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,GAAG,iBAAiB,CAAC;IAClG,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACnC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AACD,MAAM,MAAM,sBAAsB,GAC/B;IAAE,SAAS,EAAE,sBAAsB,CAAA;CAAE,GACrC;IAAE,KAAK,EAAE,0BAA0B,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3D;IAAE,KAAK,EAAE,uBAAuB,GAAG,yBAAyB,CAAA;CAAE,CAAC;AAClE,MAAM,WAAW,mBAAmB;IACnC,kBAAkB,CAAC,IAAI,0BAA0B,GAAG,IAAI,CAAC;IACzD,KAAK,CAAC,OAAO,EAAE;QACd,MAAM,CAAC,EAAE,sBAAsB,CAAC;QAChC,OAAO,EAAE,cAAc,CAAC;QACxB,qBAAqB,EAAE,MAAM,CAAC;QAC9B,iBAAiB,EAAE,gCAAgC,CAAC;QACpD,sBAAsB,CAAC,EAAE,MAAM,CAAC;QAChC,cAAc,CAAC,EAAE,MAAM,CAAC;KACxB,GAAG,sBAAsB,CAAC;IAC3B,cAAc,IAAI,MAAM,CAAC;IACzB,oEAAoE;IACpE,cAAc,CAAC,IAAI,OAAO,CAAC;IAC3B,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI,CAAC;IACxD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI,CAAC;IAC7D,SAAS,IAAI,OAAO,CAAC;IACrB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC/C,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI,CAAC;IAC3D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AACD,MAAM,WAAW,0BAA0B;IAC1C,SAAS,IAAI,OAAO,CAAC;IACrB,OAAO,IAAI,IAAI,CAAC;CAChB;AACD,MAAM,WAAW,0BAA0B;IAC1C,WAAW,EAAE,oBAAoB,CAAC;IAClC,IAAI,CAAC,EAAE,OAAO,sBAAsB,CAAC;IACrC,MAAM,CAAC,EAAE,OAAO,wBAAwB,CAAC;IACzC,0FAA0F;IAC1F,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACnB;AAuCD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAMtF;AAkZD,wBAAgB,yBAAyB,CACxC,OAAO,EAAE,0BAA0B,GACjC,mBAAmB,CAErB"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type coordinatorAuthControllerReviewAction } from "@codemem/core";
|
|
2
|
+
export interface RecoveryOwnerCandidate {
|
|
3
|
+
id: string;
|
|
4
|
+
label?: string;
|
|
5
|
+
}
|
|
6
|
+
interface CandidateDevice {
|
|
7
|
+
deviceId: string;
|
|
8
|
+
fingerprint: string;
|
|
9
|
+
identityId: string;
|
|
10
|
+
}
|
|
11
|
+
/** Map each Identity recorded for this device to the groups whose Team history records it. */
|
|
12
|
+
export declare function recordedOwnerGroups(responses: readonly unknown[], device: Pick<CandidateDevice, "deviceId">): Map<string, Set<string>>;
|
|
13
|
+
export declare function candidateList(owners: Map<string, Set<string>>, currentIdentityId: string): RecoveryOwnerCandidate[];
|
|
14
|
+
/**
|
|
15
|
+
* Suggest owners from read-only coordinator previews of this device's current review.
|
|
16
|
+
* Suggestions are display hints: the scoped owner preview still checks the chosen ID.
|
|
17
|
+
*
|
|
18
|
+
* Previews share the coordinator's admin review rate limit with the owner preview and
|
|
19
|
+
* confirmation. History is filtered by device, not group, so this asks one group at a
|
|
20
|
+
* time and stops at the first enrolled group instead of spending one request per group.
|
|
21
|
+
*/
|
|
22
|
+
export declare function readRecoveryCandidates(options: {
|
|
23
|
+
previewDeviceOwner: typeof coordinatorAuthControllerReviewAction;
|
|
24
|
+
remoteUrl: string;
|
|
25
|
+
adminSecret: string;
|
|
26
|
+
groups: readonly string[];
|
|
27
|
+
device: CandidateDevice;
|
|
28
|
+
}): Promise<RecoveryOwnerCandidate[]>;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=owner-recovery-candidates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owner-recovery-candidates.d.ts","sourceRoot":"","sources":["../../src/account/owner-recovery-candidates.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,qCAAqC,EAG1C,MAAM,eAAe,CAAC;AAGvB,MAAM,WAAW,sBAAsB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AACD,UAAU,eAAe;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACnB;AA2BD,8FAA8F;AAC9F,wBAAgB,mBAAmB,CAClC,SAAS,EAAE,SAAS,OAAO,EAAE,EAC7B,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,GACvC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAS1B;AAqBD,wBAAgB,aAAa,CAC5B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EAChC,iBAAiB,EAAE,MAAM,GACvB,sBAAsB,EAAE,CAU1B;AAaD;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE;IACrD,kBAAkB,EAAE,OAAO,qCAAqC,CAAC;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,MAAM,EAAE,eAAe,CAAC;CACxB,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAqBpC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type AccountOwnerProfile, type AccountOwnerProfilePins } from "@codemem/core";
|
|
2
|
+
import type { AccountContext, AccountContextReader } from "./context.js";
|
|
3
|
+
import type { RecoveryProfile, RecoverySelection } from "./owner-recovery-types.js";
|
|
4
|
+
export interface RecoveryCapture {
|
|
5
|
+
context: AccountContext;
|
|
6
|
+
groups: string[];
|
|
7
|
+
publicKey: string;
|
|
8
|
+
semanticId: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function recoverySha(value: string): string;
|
|
11
|
+
export declare function captureRecoveryContext(readContext: AccountContextReader): RecoveryCapture;
|
|
12
|
+
export declare function recoveryProfile(capture: RecoveryCapture, coordinatorId: string): RecoveryProfile;
|
|
13
|
+
export declare function assertRecoverySelection(selection: RecoverySelection, expected: RecoveryProfile): void;
|
|
14
|
+
export declare function recoveryDestinations(capture: RecoveryCapture, coordinatorId: string): Map<string, {
|
|
15
|
+
profile: AccountOwnerProfile;
|
|
16
|
+
pins: AccountOwnerProfilePins;
|
|
17
|
+
}>;
|
|
18
|
+
export type RecoveryDestinations = ReturnType<typeof recoveryDestinations>;
|
|
19
|
+
export declare function assertNoCompetingOwner(destinations: RecoveryDestinations, ownerIdentityId: string): void;
|
|
20
|
+
//# sourceMappingURL=owner-recovery-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owner-recovery-context.d.ts","sourceRoot":"","sources":["../../src/account/owner-recovery-context.ts"],"names":[],"mappings":"AAGA,OAAO,EACN,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAK5B,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEzE,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEpF,MAAM,WAAW,eAAe;IAC/B,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACnB;AACD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjD;AAmBD,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,oBAAoB,GAAG,eAAe,CA4BzF;AACD,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,GAAG,eAAe,CAWhG;AACD,wBAAgB,uBAAuB,CACtC,SAAS,EAAE,iBAAiB,EAC5B,QAAQ,EAAE,eAAe,GACvB,IAAI,CAUN;AACD,wBAAgB,oBAAoB,CACnC,OAAO,EAAE,eAAe,EACxB,aAAa,EAAE,MAAM,GACnB,GAAG,CAAC,MAAM,EAAE;IAAE,OAAO,EAAE,mBAAmB,CAAC;IAAC,IAAI,EAAE,uBAAuB,CAAA;CAAE,CAAC,CAgB9E;AACD,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAC3E,wBAAgB,sBAAsB,CACrC,YAAY,EAAE,oBAAoB,EAClC,eAAe,EAAE,MAAM,GACrB,IAAI,CAKN"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type ResolvedAccountOwnerReceiptReference } from "@codemem/core";
|
|
2
|
+
import type { RecoveryHistoryRow, RecoverySelection, ReviewedWeakLabel } from "./owner-recovery-types.js";
|
|
3
|
+
export declare const RECOVERY_SCOPE = "historical_included_owner_labels_only";
|
|
4
|
+
export declare class AccountOwnerRecoveryError extends Error {
|
|
5
|
+
readonly code: "invalid" | "busy" | "context_changed" | "unavailable";
|
|
6
|
+
constructor(code?: "invalid" | "busy" | "context_changed" | "unavailable");
|
|
7
|
+
}
|
|
8
|
+
export declare function requireRecovery(condition: unknown, code?: AccountOwnerRecoveryError["code"]): asserts condition;
|
|
9
|
+
export declare function recoveryId(value: unknown): value is string;
|
|
10
|
+
export declare function recoveryHash(value: unknown): value is string;
|
|
11
|
+
export declare function recoveryRecord(value: unknown): Record<string, unknown>;
|
|
12
|
+
export declare function exactRecoveryFields(row: Record<string, unknown>, fields: readonly string[]): void;
|
|
13
|
+
export declare function reviewReceipt(row: Record<string, unknown>): ResolvedAccountOwnerReceiptReference;
|
|
14
|
+
export interface ValidatedRecoveryReview {
|
|
15
|
+
state: "ready" | "restored" | "needs_review";
|
|
16
|
+
digest?: string;
|
|
17
|
+
receipt?: ResolvedAccountOwnerReceiptReference;
|
|
18
|
+
rows: RecoveryHistoryRow[];
|
|
19
|
+
labels: ReviewedWeakLabel[];
|
|
20
|
+
reasons: string[];
|
|
21
|
+
}
|
|
22
|
+
export declare function validateRecoveryReview(value: unknown, selection: RecoverySelection, groupId: string): ValidatedRecoveryReview;
|
|
23
|
+
export declare function parseRecoveryReply(text: string, selection: RecoverySelection): Map<string, ResolvedAccountOwnerReceiptReference>;
|
|
24
|
+
//# sourceMappingURL=owner-recovery-evidence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owner-recovery-evidence.d.ts","sourceRoot":"","sources":["../../src/account/owner-recovery-evidence.ts"],"names":[],"mappings":"AAAA,OAAO,EAKN,KAAK,oCAAoC,EACzC,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EACX,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,MAAM,2BAA2B,CAAC;AAEnC,eAAO,MAAM,cAAc,0CAA0C,CAAC;AAKtE,qBAAa,yBAA0B,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,iBAAiB,GAAG,aAAa;IAAjF,YAAqB,IAAI,GAAE,SAAS,GAAG,MAAM,GAAG,iBAAiB,GAAG,aAAyB,EAE5F;CACD;AACD,wBAAgB,eAAe,CAC9B,SAAS,EAAE,OAAO,EAClB,IAAI,GAAE,yBAAyB,CAAC,MAAM,CAAa,GACjD,OAAO,CAAC,SAAS,CAEnB;AACD,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAQ1D;AACD,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE5D;AACD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAGtE;AACD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAIjG;AAqFD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,oCAAoC,CAWhG;AACD,MAAM,WAAW,uBAAuB;IACvC,KAAK,EAAE,OAAO,GAAG,UAAU,GAAG,cAAc,CAAC;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,oCAAoC,CAAC;IAC/C,IAAI,EAAE,kBAAkB,EAAE,CAAC;IAC3B,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;CAClB;AACD,wBAAgB,sBAAsB,CACrC,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,iBAAiB,EAC5B,OAAO,EAAE,MAAM,GACb,uBAAuB,CAiDzB;AA8BD,wBAAgB,kBAAkB,CACjC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,iBAAiB,GAC1B,GAAG,CAAC,MAAM,EAAE,oCAAoC,CAAC,CAmCnD"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { coordinatorAuthControllerReviewAction, readCoordinatorAccountLinkStatus, readCoordinatorResolvedAccountOwnerReceiptStatus, readCoordinatorResolvedAccountOwnerStatus } from "@codemem/core";
|
|
2
|
+
import type { AccountContextReader } from "./context.js";
|
|
3
|
+
import type { AccountLinkRegistry } from "./link-registry.js";
|
|
4
|
+
import { type RecoveryOwnerCandidate } from "./owner-recovery-candidates.js";
|
|
5
|
+
import type { RecoveryPreview, RecoveryPreviewRequest, RecoveryResult, RecoverySelection } from "./owner-recovery-types.js";
|
|
6
|
+
export type { RecoveryPreview, RecoveryPreviewRequest, RecoveryProfile, RecoveryResult, RecoverySelection, } from "./owner-recovery-types.js";
|
|
7
|
+
export interface AccountOwnerRecoveryServiceOptions {
|
|
8
|
+
readContext: AccountContextReader;
|
|
9
|
+
readAdminSecret: () => string | null | undefined;
|
|
10
|
+
registry: AccountLinkRegistry;
|
|
11
|
+
readRemoteStatus?: typeof readCoordinatorAccountLinkStatus;
|
|
12
|
+
readRemoteOwnerStatus?: typeof readCoordinatorResolvedAccountOwnerStatus;
|
|
13
|
+
readRemoteReceiptStatus?: typeof readCoordinatorResolvedAccountOwnerReceiptStatus;
|
|
14
|
+
reviewOwner?: typeof coordinatorAuthControllerReviewAction;
|
|
15
|
+
/** Read-only device-owner preview used only to suggest recorded owners. */
|
|
16
|
+
previewDeviceOwner?: typeof coordinatorAuthControllerReviewAction;
|
|
17
|
+
now?: () => number;
|
|
18
|
+
}
|
|
19
|
+
/** No routes or configuration composition: these callbacks are private server capabilities. */
|
|
20
|
+
declare class AccountOwnerRecoveryService {
|
|
21
|
+
#private;
|
|
22
|
+
constructor(options: AccountOwnerRecoveryServiceOptions);
|
|
23
|
+
getProfile(): Promise<{
|
|
24
|
+
version: 1;
|
|
25
|
+
profile: import("./owner-recovery-types.js").RecoveryProfile;
|
|
26
|
+
reviewAccess: "operator" | "request";
|
|
27
|
+
candidates: RecoveryOwnerCandidate[];
|
|
28
|
+
}>;
|
|
29
|
+
preview(request: RecoveryPreviewRequest): Promise<RecoveryPreview>;
|
|
30
|
+
confirm(input: {
|
|
31
|
+
preview: unknown;
|
|
32
|
+
approvalDigest: string;
|
|
33
|
+
}): Promise<RecoveryResult>;
|
|
34
|
+
importReply(input: {
|
|
35
|
+
selection: RecoverySelection;
|
|
36
|
+
replyText: string;
|
|
37
|
+
}): Promise<RecoveryResult>;
|
|
38
|
+
close(): Promise<void>;
|
|
39
|
+
}
|
|
40
|
+
export declare function createAccountOwnerRecoveryService(options: AccountOwnerRecoveryServiceOptions): AccountOwnerRecoveryService;
|
|
41
|
+
//# sourceMappingURL=owner-recovery-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owner-recovery-service.d.ts","sourceRoot":"","sources":["../../src/account/owner-recovery-service.ts"],"names":[],"mappings":"AACA,OAAO,EACN,qCAAqC,EAGrC,gCAAgC,EAChC,gDAAgD,EAChD,yCAAyC,EACzC,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAA8B,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EACN,KAAK,sBAAsB,EAE3B,MAAM,gCAAgC,CAAC;AAkBxC,OAAO,KAAK,EACX,eAAe,EACf,sBAAsB,EACtB,cAAc,EACd,iBAAiB,EACjB,MAAM,2BAA2B,CAAC;AAEnC,YAAY,EACX,eAAe,EACf,sBAAsB,EACtB,eAAe,EACf,cAAc,EACd,iBAAiB,GACjB,MAAM,2BAA2B,CAAC;AACnC,MAAM,WAAW,kCAAkC;IAClD,WAAW,EAAE,oBAAoB,CAAC;IAClC,eAAe,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACjD,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,gBAAgB,CAAC,EAAE,OAAO,gCAAgC,CAAC;IAC3D,qBAAqB,CAAC,EAAE,OAAO,yCAAyC,CAAC;IACzE,uBAAuB,CAAC,EAAE,OAAO,gDAAgD,CAAC;IAClF,WAAW,CAAC,EAAE,OAAO,qCAAqC,CAAC;IAC3D,2EAA2E;IAC3E,kBAAkB,CAAC,EAAE,OAAO,qCAAqC,CAAC;IAClE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACnB;AAkCD,+FAA+F;AAC/F,cAAM,2BAA2B;;IAOhC,YAAY,OAAO,EAAE,kCAAkC,EAEtD;IA2CK,UAAU;iBAQL,CAAC;;;;OAKX;IAsGK,OAAO,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,eAAe,CAAC,CAoBvE;IA8BK,OAAO,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAc1F;IAqJK,WAAW,CAAC,KAAK,EAAE;QACxB,SAAS,EAAE,iBAAiB,CAAC;QAC7B,SAAS,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,cAAc,CAAC,CAoB1B;IAiBK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAK3B;CACD;AACD,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,kCAAkC,+BAE5F"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/** Noncredential projections only; private paths and review evidence stay in the service. */
|
|
2
|
+
export interface RecoveryProfile {
|
|
3
|
+
contextId: string;
|
|
4
|
+
memoryActorId: string;
|
|
5
|
+
deviceId: string;
|
|
6
|
+
fingerprint: string;
|
|
7
|
+
coordinatorOrigin: string;
|
|
8
|
+
coordinatorId: string;
|
|
9
|
+
configuredGroups: readonly string[];
|
|
10
|
+
}
|
|
11
|
+
export interface RecoverySelection {
|
|
12
|
+
profile: RecoveryProfile;
|
|
13
|
+
existingOwnerId: string;
|
|
14
|
+
groups: readonly string[];
|
|
15
|
+
}
|
|
16
|
+
export interface RecoveryPreviewRequest extends RecoverySelection {
|
|
17
|
+
requestId: string;
|
|
18
|
+
purpose: "review" | "check_status";
|
|
19
|
+
}
|
|
20
|
+
export interface RecoveryHistoryRow {
|
|
21
|
+
id: string;
|
|
22
|
+
groupId: string;
|
|
23
|
+
deviceId: string;
|
|
24
|
+
fingerprint: string;
|
|
25
|
+
identityId: string;
|
|
26
|
+
assignment: "included" | "excluded";
|
|
27
|
+
relation: "exact_subject" | "alias" | "other";
|
|
28
|
+
reason: string;
|
|
29
|
+
}
|
|
30
|
+
export interface ReviewedWeakLabel {
|
|
31
|
+
label: string;
|
|
32
|
+
kind: "legacy_included_owner_label" | "consumed_project_actor_label";
|
|
33
|
+
group_id: string;
|
|
34
|
+
device_id: string;
|
|
35
|
+
evidence_ref: string;
|
|
36
|
+
effect: "account_owner_display_only";
|
|
37
|
+
}
|
|
38
|
+
export interface RecoveryPreview extends RecoverySelection {
|
|
39
|
+
requestId: string;
|
|
40
|
+
scope: "historical_included_owner_labels_only";
|
|
41
|
+
approvalDigest: string;
|
|
42
|
+
groupPreviews: readonly {
|
|
43
|
+
groupId: string;
|
|
44
|
+
action: "new" | "reuse" | "blocked";
|
|
45
|
+
reason: string;
|
|
46
|
+
}[];
|
|
47
|
+
history: {
|
|
48
|
+
complete: true;
|
|
49
|
+
rows: readonly RecoveryHistoryRow[];
|
|
50
|
+
} | {
|
|
51
|
+
complete: false;
|
|
52
|
+
rows: readonly RecoveryHistoryRow[];
|
|
53
|
+
operatorHelp: string;
|
|
54
|
+
};
|
|
55
|
+
reviewedWeakLabels: readonly ReviewedWeakLabel[];
|
|
56
|
+
}
|
|
57
|
+
export interface RecoveryResult {
|
|
58
|
+
preview: RecoveryPreview;
|
|
59
|
+
groups: readonly {
|
|
60
|
+
groupId: string;
|
|
61
|
+
status: "confirmed" | "failed" | "unknown";
|
|
62
|
+
message: string;
|
|
63
|
+
}[];
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=owner-recovery-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owner-recovery-types.d.ts","sourceRoot":"","sources":["../../src/account/owner-recovery-types.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,MAAM,WAAW,eAAe;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AACD,MAAM,WAAW,iBAAiB;IACjC,OAAO,EAAE,eAAe,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1B;AACD,MAAM,WAAW,sBAAuB,SAAQ,iBAAiB;IAChE,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,QAAQ,GAAG,cAAc,CAAC;CACnC;AACD,MAAM,WAAW,kBAAkB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,UAAU,GAAG,UAAU,CAAC;IACpC,QAAQ,EAAE,eAAe,GAAG,OAAO,GAAG,OAAO,CAAC;IAC9C,MAAM,EAAE,MAAM,CAAC;CACf;AACD,MAAM,WAAW,iBAAiB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,6BAA6B,GAAG,8BAA8B,CAAC;IACrE,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,4BAA4B,CAAC;CACrC;AACD,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,uCAAuC,CAAC;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,SAAS;QACvB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,KAAK,GAAG,OAAO,GAAG,SAAS,CAAC;QACpC,MAAM,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;IACJ,OAAO,EACJ;QAAE,QAAQ,EAAE,IAAI,CAAC;QAAC,IAAI,EAAE,SAAS,kBAAkB,EAAE,CAAA;KAAE,GACvD;QACA,QAAQ,EAAE,KAAK,CAAC;QAChB,IAAI,EAAE,SAAS,kBAAkB,EAAE,CAAC;QACpC,YAAY,EAAE,MAAM,CAAC;KACpB,CAAC;IACL,kBAAkB,EAAE,SAAS,iBAAiB,EAAE,CAAC;CACjD;AACD,MAAM,WAAW,cAAc;IAC9B,OAAO,EAAE,eAAe,CAAC;IACzB,MAAM,EAAE,SAAS;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;QAC3C,OAAO,EAAE,MAAM,CAAC;KAChB,EAAE,CAAC;CACJ"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type AccountOwnerAssociation, type CoordinatorResolvedAccountOwnerStatusRead } from "@codemem/core";
|
|
2
|
+
import type { AccountContext } from "./context.js";
|
|
3
|
+
import type { AccountLinkViewV1 } from "./status.js";
|
|
4
|
+
/** The coordinator ID comes from the first signed actor-status read, never the origin. */
|
|
5
|
+
export declare function readOwnerAssociation(context: AccountContext, coordinatorId: string): AccountOwnerAssociation | null;
|
|
6
|
+
export declare function ownerUnavailable(view: AccountLinkViewV1, code: "account_owner_association_invalid" | "context_changed"): AccountLinkViewV1;
|
|
7
|
+
export declare function associatedOwnerView(view: AccountLinkViewV1, context: AccountContext, association: AccountOwnerAssociation, remote: CoordinatorResolvedAccountOwnerStatusRead): AccountLinkViewV1;
|
|
8
|
+
//# sourceMappingURL=owner-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owner-status.d.ts","sourceRoot":"","sources":["../../src/account/owner-status.ts"],"names":[],"mappings":"AAEA,OAAO,EACN,KAAK,uBAAuB,EAC5B,KAAK,yCAAyC,EAO9C,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,0FAA0F;AAC1F,wBAAgB,oBAAoB,CACnC,OAAO,EAAE,cAAc,EACvB,aAAa,EAAE,MAAM,GACnB,uBAAuB,GAAG,IAAI,CAsChC;AA+DD,wBAAgB,gBAAgB,CAC/B,IAAI,EAAE,iBAAiB,EACvB,IAAI,EAAE,mCAAmC,GAAG,iBAAiB,GAC3D,iBAAiB,CAOnB;AA8CD,wBAAgB,mBAAmB,CAClC,IAAI,EAAE,iBAAiB,EACvB,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,uBAAuB,EACpC,MAAM,EAAE,yCAAyC,GAC/C,iBAAiB,CAuDnB"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type DeviceRebindClientRefusal, type MemoryStore } from "@codemem/core";
|
|
2
|
+
import type { AccountContext } from "./context.js";
|
|
3
|
+
export type AccountRebindResult = {
|
|
4
|
+
kind: "switched";
|
|
5
|
+
targetIdentityId: string;
|
|
6
|
+
}
|
|
7
|
+
/** Self-bind: the account is this Identity's, and the device now holds its own binding. */
|
|
8
|
+
| {
|
|
9
|
+
kind: "bound";
|
|
10
|
+
}
|
|
11
|
+
/** A self-bind may have committed; nothing local changes, so status tells. */
|
|
12
|
+
| {
|
|
13
|
+
kind: "bind_unknown";
|
|
14
|
+
} | {
|
|
15
|
+
kind: "refused";
|
|
16
|
+
reason: DeviceRebindClientRefusal;
|
|
17
|
+
beforeBrowser?: true;
|
|
18
|
+
} | {
|
|
19
|
+
kind: "failed";
|
|
20
|
+
}
|
|
21
|
+
/** The coordinator may have committed, or did and the local switch is unfinished. */
|
|
22
|
+
| {
|
|
23
|
+
kind: "pending";
|
|
24
|
+
};
|
|
25
|
+
export type AccountRebindRunner = (input: {
|
|
26
|
+
context: AccountContext;
|
|
27
|
+
signal: AbortSignal;
|
|
28
|
+
onBrowserStart: (url: string) => void;
|
|
29
|
+
/** The registry's live account-context check; false stops the switch before finalize. */
|
|
30
|
+
isCurrent?: () => boolean;
|
|
31
|
+
}) => Promise<AccountRebindResult>;
|
|
32
|
+
export declare function createAccountRebindRunner(store: MemoryStore): AccountRebindRunner;
|
|
33
|
+
/**
|
|
34
|
+
* Picks up a switch an earlier run left open. A recorded attempt is resolved
|
|
35
|
+
* by reading coordinator status, never by sending finalize again.
|
|
36
|
+
*/
|
|
37
|
+
export declare function resumeAccountRebind(store: MemoryStore, paths: {
|
|
38
|
+
keysDir?: string;
|
|
39
|
+
configPath?: string;
|
|
40
|
+
}): Promise<AccountRebindResult | null>;
|
|
41
|
+
//# sourceMappingURL=rebind.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rebind.d.ts","sourceRoot":"","sources":["../../src/account/rebind.ts"],"names":[],"mappings":"AAMA,OAAO,EAIN,KAAK,yBAAyB,EAG9B,KAAK,WAAW,EAOhB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,MAAM,mBAAmB,GAC5B;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE;AAChD,2FAA2F;GACzF;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE;AACnB,8EAA8E;GAC5E;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,yBAAyB,CAAC;IAAC,aAAa,CAAC,EAAE,IAAI,CAAA;CAAE,GAC5E;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE;AACpB,qFAAqF;GACnF;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAEvB,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE;IACzC,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,WAAW,CAAC;IACpB,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,yFAAyF;IACzF,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC;CAC1B,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAmEnC,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,WAAW,GAAG,mBAAmB,CAkBjF;AA0ED;;;GAGG;AACH,wBAAsB,mBAAmB,CACxC,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9C,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAkBrC"}
|
package/dist/account/status.d.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import { type CoordinatorAccountLinkStatusRead, readCoordinatorAccountChangeCapabilities, readCoordinatorAccountLinkStatus } from "@codemem/core";
|
|
1
|
+
import { type CoordinatorAccountLinkStatusRead, type ResolvedAccountOwnerStatus, readCoordinatorAccountChangeCapabilities, readCoordinatorAccountLinkStatus, readCoordinatorResolvedAccountOwnerStatus } from "@codemem/core";
|
|
2
2
|
import type { AccountContext, AccountContextReader, AccountContextResult, AccountSetup } from "./context.js";
|
|
3
3
|
import { type AccountLinkOperationV1, type AccountLinkRegistry } from "./link-registry.js";
|
|
4
4
|
export interface AccountStatusOptions {
|
|
5
5
|
registry?: AccountLinkRegistry;
|
|
6
6
|
readContext?: AccountContextReader;
|
|
7
7
|
readRemoteStatus?: typeof readCoordinatorAccountLinkStatus;
|
|
8
|
+
readRemoteOwnerStatus?: typeof readCoordinatorResolvedAccountOwnerStatus;
|
|
8
9
|
readRemoteCapabilities?: typeof readCoordinatorAccountChangeCapabilities;
|
|
10
|
+
/** The local People name for an Identity, so My Account and Sharing name it the same way. */
|
|
11
|
+
identityName?: (identityId: string) => string | undefined;
|
|
9
12
|
}
|
|
10
13
|
type UnavailableCode = Extract<CoordinatorAccountLinkStatusRead, {
|
|
11
14
|
kind: "unavailable";
|
|
@@ -20,13 +23,26 @@ export interface AccountLinkViewV1 {
|
|
|
20
23
|
coordinator: {
|
|
21
24
|
origin: string;
|
|
22
25
|
} | null;
|
|
26
|
+
/** Display target only; local.identityId and all mutation contexts remain the memory actor. */
|
|
27
|
+
accountOwner?: {
|
|
28
|
+
identityId: string;
|
|
29
|
+
memoryActorId: string;
|
|
30
|
+
displayName?: string;
|
|
31
|
+
};
|
|
32
|
+
/** Read-only owner evidence, never ordinary account authority or management capabilities. */
|
|
33
|
+
ownerProjection?: {
|
|
34
|
+
kind: "resolved_account_owner";
|
|
35
|
+
status: Extract<ResolvedAccountOwnerStatus, {
|
|
36
|
+
state: "owner_confirmed";
|
|
37
|
+
}>;
|
|
38
|
+
};
|
|
23
39
|
remote: {
|
|
24
40
|
kind: "not_checked";
|
|
25
41
|
} | {
|
|
26
42
|
kind: "unsupported";
|
|
27
43
|
} | {
|
|
28
44
|
kind: "unavailable";
|
|
29
|
-
code: UnavailableCode | "context_changed";
|
|
45
|
+
code: UnavailableCode | "context_changed" | "account_owner_association_invalid";
|
|
30
46
|
} | {
|
|
31
47
|
kind: "status";
|
|
32
48
|
coordinatorId: string;
|
|
@@ -41,6 +57,17 @@ export interface AccountLinkViewV1 {
|
|
|
41
57
|
} | null;
|
|
42
58
|
};
|
|
43
59
|
canLink: boolean;
|
|
60
|
+
/** "Sign in with Google": may link this Identity or switch the device to the account's. */
|
|
61
|
+
canSignIn?: boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Where sign-in starts when this view is the owner-only projection, whose
|
|
64
|
+
* own contextId is not a mutation context: this device's own Identity.
|
|
65
|
+
*/
|
|
66
|
+
signIn?: {
|
|
67
|
+
contextId: string;
|
|
68
|
+
coordinatorId: string;
|
|
69
|
+
authority: "controller_attestation" | "device_claim" | null;
|
|
70
|
+
};
|
|
44
71
|
managementActions?: {
|
|
45
72
|
refresh: boolean;
|
|
46
73
|
disconnect: boolean;
|
|
@@ -48,18 +75,24 @@ export interface AccountLinkViewV1 {
|
|
|
48
75
|
unlinkTarget?: string;
|
|
49
76
|
blockedReason: null | "setup_incomplete" | "status_unavailable" | "unsupported" | "review_required" | "already_linked" | "revoked" | "conflict" | "identity_mismatch" | "operation_active";
|
|
50
77
|
operation: AccountLinkOperationV1 | null;
|
|
78
|
+
/** Displayed operation's original context, never a mutation target. */
|
|
79
|
+
operationContextId?: string;
|
|
51
80
|
checkedAt: string;
|
|
52
81
|
}
|
|
53
82
|
type LocalResult = Exclude<AccountContextResult, {
|
|
54
83
|
error: string;
|
|
55
84
|
}>;
|
|
56
85
|
export declare function accountLocalView(result: LocalResult): AccountLinkViewV1;
|
|
86
|
+
type AccountStatusResult = AccountLinkViewV1 | Extract<AccountContextResult, {
|
|
87
|
+
error: string;
|
|
88
|
+
}>;
|
|
89
|
+
type ReadOptions = {
|
|
90
|
+
expectedContext?: AccountContext;
|
|
91
|
+
/** Sign-in checks this device's own Identity, not an owner-only projection. */
|
|
92
|
+
ownIdentityOnly?: boolean;
|
|
93
|
+
};
|
|
57
94
|
export declare function readAccountStatus(options: AccountStatusOptions & {
|
|
58
95
|
readContext: AccountContextReader;
|
|
59
|
-
}, groupId: string | undefined, signal: AbortSignal, readOptions?:
|
|
60
|
-
expectedContext?: AccountContext;
|
|
61
|
-
}): Promise<AccountLinkViewV1 | Extract<AccountContextResult, {
|
|
62
|
-
error: string;
|
|
63
|
-
}>>;
|
|
96
|
+
}, groupId: string | undefined, signal: AbortSignal, readOptions?: ReadOptions): Promise<AccountStatusResult>;
|
|
64
97
|
export {};
|
|
65
98
|
//# sourceMappingURL=status.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/account/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,gCAAgC,
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/account/status.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ import type { DeviceIdentityCoordinatorEvidence, GetUpdateStatusOptions, Observe
|
|
|
11
11
|
import { MemoryStore, type RawEventSweeper, VERSION } from "@codemem/core";
|
|
12
12
|
import { Hono } from "hono";
|
|
13
13
|
import { type AccountLinkOptions } from "./account/guard.js";
|
|
14
|
+
import type { createAccountOwnerRecoveryService } from "./account/owner-recovery-service.js";
|
|
14
15
|
import type { AccountStatusOptions } from "./account/status.js";
|
|
15
16
|
import type { RawEventInbox } from "./raw-event-inbox.js";
|
|
16
17
|
import { type InMemoryRequestRateLimiter } from "./request-rate-limit.js";
|
|
@@ -23,6 +24,9 @@ export { createAccountContextReader } from "./account/context.js";
|
|
|
23
24
|
export type { AccountLinkOptions } from "./account/guard.js";
|
|
24
25
|
export type { AccountLinkFailure, AccountLinkOperationV1, AccountLinkRegistry, AccountLinkRegistryOptions, AccountLinkStartResult, } from "./account/link-registry.js";
|
|
25
26
|
export { createAccountLinkRegistry } from "./account/link-registry.js";
|
|
27
|
+
export type { AccountOwnerRecoveryServiceOptions } from "./account/owner-recovery-service.js";
|
|
28
|
+
export { createAccountOwnerRecoveryService } from "./account/owner-recovery-service.js";
|
|
29
|
+
export { type AccountRebindResult, createAccountRebindRunner, resumeAccountRebind, } from "./account/rebind.js";
|
|
26
30
|
export type { AccountLinkViewV1, AccountStatusOptions } from "./account/status.js";
|
|
27
31
|
export type { AdvancePendingProjectSharesResult, AdvanceProjectShareOperationResult, ReconcileRecipientPolicyProjectsResult, } from "./application/coordinator-maintenance.js";
|
|
28
32
|
export { advancePendingProjectSharesOperation, reconcileRecipientPolicyProjectsOperation, } from "./application/coordinator-maintenance.js";
|
|
@@ -34,14 +38,18 @@ export type { LegacyTeamSetupActionBlockedReasonV1, LegacyTeamSetupActionGateV1,
|
|
|
34
38
|
export { VERSION };
|
|
35
39
|
/** Get (or create) the shared store instance. Exported so the sweeper can share it. */
|
|
36
40
|
export declare function getStore(): MemoryStore;
|
|
37
|
-
/** Close
|
|
41
|
+
/** Close a synchronous-only shared store. Async pack owners use closeStoreAsync(). */
|
|
38
42
|
export declare function closeStore(): void;
|
|
43
|
+
/** Drain semantic work before closing SQLite and releasing the shared store. */
|
|
44
|
+
export declare function closeStoreAsync(): Promise<void>;
|
|
39
45
|
/**
|
|
40
46
|
* Create the Hono app with all viewer routes.
|
|
41
47
|
* Exported for testing — pass a custom store factory to inject test DBs.
|
|
42
48
|
*/
|
|
43
49
|
export interface AppOptions {
|
|
44
|
-
accountLink?: AccountLinkOptions & AccountStatusOptions
|
|
50
|
+
accountLink?: AccountLinkOptions & AccountStatusOptions & {
|
|
51
|
+
ownerRecovery?: ReturnType<typeof createAccountOwnerRecoveryService>;
|
|
52
|
+
};
|
|
45
53
|
storeFactory?: () => MemoryStore;
|
|
46
54
|
rawEventInbox?: RawEventInbox | null;
|
|
47
55
|
rawEventTarget?: ViewerTargetStore;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EACX,iCAAiC,EACjC,sBAAsB,EACtB,cAAc,EACd,YAAY,EACZ,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,WAAW,EAAE,KAAK,eAAe,EAAiB,OAAO,EAAE,MAAM,eAAe,CAAC;AAE1F,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,KAAK,kBAAkB,EAAsB,MAAM,oBAAoB,CAAC;AACjF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAEhE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAEN,KAAK,0BAA0B,EAC/B,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|