@cortexkit/antigravity-auth-core 2.2.1 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -2
- package/dist/abort-forwarding.d.ts +3 -0
- package/dist/abort-forwarding.d.ts.map +1 -0
- package/dist/abort-forwarding.js +19 -0
- package/dist/abort-forwarding.js.map +1 -0
- package/dist/account-identity.d.ts +52 -0
- package/dist/account-identity.d.ts.map +1 -0
- package/dist/account-identity.js +66 -0
- package/dist/account-identity.js.map +1 -0
- package/dist/account-manager.d.ts +228 -43
- package/dist/account-manager.d.ts.map +1 -1
- package/dist/account-manager.js +942 -903
- package/dist/account-manager.js.map +1 -1
- package/dist/account-migration.d.ts +309 -0
- package/dist/account-migration.d.ts.map +1 -0
- package/dist/account-migration.js +2284 -0
- package/dist/account-migration.js.map +1 -0
- package/dist/account-repository-codecs.d.ts +82 -0
- package/dist/account-repository-codecs.d.ts.map +1 -0
- package/dist/account-repository-codecs.js +609 -0
- package/dist/account-repository-codecs.js.map +1 -0
- package/dist/account-repository-types.d.ts +831 -0
- package/dist/account-repository-types.d.ts.map +1 -0
- package/dist/account-repository-types.js +137 -0
- package/dist/account-repository-types.js.map +1 -0
- package/dist/account-repository.d.ts +442 -0
- package/dist/account-repository.d.ts.map +1 -0
- package/dist/account-repository.js +2253 -0
- package/dist/account-repository.js.map +1 -0
- package/dist/account-selector.d.ts +470 -0
- package/dist/account-selector.d.ts.map +1 -0
- package/dist/account-selector.js +1383 -0
- package/dist/account-selector.js.map +1 -0
- package/dist/account-storage.d.ts.map +1 -1
- package/dist/account-storage.js +5 -0
- package/dist/account-storage.js.map +1 -1
- package/dist/agy-request-metadata.d.ts.map +1 -1
- package/dist/agy-request-metadata.js +8 -21
- package/dist/agy-request-metadata.js.map +1 -1
- package/dist/agy-transport.d.ts.map +1 -1
- package/dist/agy-transport.js +21 -35
- package/dist/agy-transport.js.map +1 -1
- package/dist/antigravity-command-menu.d.ts +171 -0
- package/dist/antigravity-command-menu.d.ts.map +1 -0
- package/dist/antigravity-command-menu.js +523 -0
- package/dist/antigravity-command-menu.js.map +1 -0
- package/dist/atomic-write.d.ts +18 -1
- package/dist/atomic-write.d.ts.map +1 -1
- package/dist/atomic-write.js +15 -3
- package/dist/atomic-write.js.map +1 -1
- package/dist/common-auth-embedded/NOTICE.txt +21 -0
- package/dist/common-auth-embedded/auth-menu/accounts.d.ts +97 -0
- package/dist/common-auth-embedded/auth-menu/accounts.js +387 -0
- package/dist/common-auth-embedded/auth-menu/ansi.d.ts +26 -0
- package/dist/common-auth-embedded/auth-menu/ansi.js +98 -0
- package/dist/common-auth-embedded/auth-menu/confirm.d.ts +7 -0
- package/dist/common-auth-embedded/auth-menu/confirm.js +21 -0
- package/dist/common-auth-embedded/auth-menu/doctor.d.ts +52 -0
- package/dist/common-auth-embedded/auth-menu/doctor.js +81 -0
- package/dist/common-auth-embedded/auth-menu/index.d.ts +17 -0
- package/dist/common-auth-embedded/auth-menu/index.js +12 -0
- package/dist/common-auth-embedded/auth-menu/login.d.ts +55 -0
- package/dist/common-auth-embedded/auth-menu/login.js +83 -0
- package/dist/common-auth-embedded/auth-menu/menu.d.ts +59 -0
- package/dist/common-auth-embedded/auth-menu/menu.js +73 -0
- package/dist/common-auth-embedded/auth-menu/opencode-v1.d.ts +49 -0
- package/dist/common-auth-embedded/auth-menu/opencode-v1.js +47 -0
- package/dist/common-auth-embedded/auth-menu/select.d.ts +21 -0
- package/dist/common-auth-embedded/auth-menu/select.js +159 -0
- package/dist/common-auth-embedded/auth-menu/terminal.d.ts +43 -0
- package/dist/common-auth-embedded/auth-menu/terminal.js +19 -0
- package/dist/common-auth-embedded/claustrum/consumer.d.ts +102 -0
- package/dist/common-auth-embedded/claustrum/consumer.js +298 -0
- package/dist/common-auth-embedded/claustrum/custody.d.ts +175 -0
- package/dist/common-auth-embedded/claustrum/custody.js +354 -0
- package/dist/common-auth-embedded/claustrum/enrollment.d.ts +158 -0
- package/dist/common-auth-embedded/claustrum/enrollment.js +759 -0
- package/dist/common-auth-embedded/claustrum/errors.d.ts +16 -0
- package/dist/common-auth-embedded/claustrum/errors.js +8 -0
- package/dist/common-auth-embedded/claustrum/host-slot.d.ts +39 -0
- package/dist/common-auth-embedded/claustrum/host-slot.js +72 -0
- package/dist/common-auth-embedded/claustrum/index.d.ts +18 -0
- package/dist/common-auth-embedded/claustrum/index.js +22 -0
- package/dist/common-auth-embedded/claustrum/interlock.d.ts +27 -0
- package/dist/common-auth-embedded/claustrum/interlock.js +29 -0
- package/dist/common-auth-embedded/claustrum/roster.d.ts +208 -0
- package/dist/common-auth-embedded/claustrum/roster.js +536 -0
- package/dist/common-auth-embedded/commands/builtins.d.ts +71 -0
- package/dist/common-auth-embedded/commands/builtins.js +534 -0
- package/dist/common-auth-embedded/commands/index.d.ts +10 -0
- package/dist/common-auth-embedded/commands/index.js +5 -0
- package/dist/common-auth-embedded/commands/menu.d.ts +61 -0
- package/dist/common-auth-embedded/commands/menu.js +300 -0
- package/dist/common-auth-embedded/commands/model.d.ts +238 -0
- package/dist/common-auth-embedded/commands/model.js +16 -0
- package/dist/common-auth-embedded/commands/pi.d.ts +23 -0
- package/dist/common-auth-embedded/commands/pi.js +206 -0
- package/dist/common-auth-embedded/commands/seam.d.ts +72 -0
- package/dist/common-auth-embedded/commands/seam.js +301 -0
- package/dist/common-auth-embedded/fs/atomic-write.d.ts +20 -0
- package/dist/common-auth-embedded/fs/atomic-write.js +80 -0
- package/dist/common-auth-embedded/fs/index.d.ts +7 -0
- package/dist/common-auth-embedded/fs/index.js +6 -0
- package/dist/common-auth-embedded/fs/lock-constants.d.ts +14 -0
- package/dist/common-auth-embedded/fs/lock-constants.js +14 -0
- package/dist/common-auth-embedded/fs/refresh-file-lock.d.ts +33 -0
- package/dist/common-auth-embedded/fs/refresh-file-lock.js +501 -0
- package/dist/common-auth-embedded/fs/with-lock.d.ts +33 -0
- package/dist/common-auth-embedded/fs/with-lock.js +48 -0
- package/dist/common-auth-embedded/logger/capture-sink.d.ts +14 -0
- package/dist/common-auth-embedded/logger/capture-sink.js +13 -0
- package/dist/common-auth-embedded/logger/engine.d.ts +100 -0
- package/dist/common-auth-embedded/logger/engine.js +246 -0
- package/dist/common-auth-embedded/logger/index.d.ts +6 -0
- package/dist/common-auth-embedded/logger/index.js +3 -0
- package/dist/common-auth-embedded/logger/redact.d.ts +11 -0
- package/dist/common-auth-embedded/logger/redact.js +83 -0
- package/dist/common-auth-embedded/pi-slot/index.d.ts +3 -0
- package/dist/common-auth-embedded/pi-slot/index.js +2 -0
- package/dist/common-auth-embedded/pi-slot/lock.js +212 -0
- package/dist/common-auth-embedded/pi-slot/slot.d.ts +49 -0
- package/dist/common-auth-embedded/pi-slot/slot.js +383 -0
- package/dist/common-auth-embedded/quota/codec.d.ts +11 -0
- package/dist/common-auth-embedded/quota/codec.js +12 -0
- package/dist/common-auth-embedded/quota/format.d.ts +46 -0
- package/dist/common-auth-embedded/quota/format.js +138 -0
- package/dist/common-auth-embedded/quota/index.d.ts +10 -0
- package/dist/common-auth-embedded/quota/index.js +5 -0
- package/dist/common-auth-embedded/quota/map.d.ts +63 -0
- package/dist/common-auth-embedded/quota/map.js +105 -0
- package/dist/common-auth-embedded/quota/merge.d.ts +48 -0
- package/dist/common-auth-embedded/quota/merge.js +162 -0
- package/dist/common-auth-embedded/quota/projection.d.ts +64 -0
- package/dist/common-auth-embedded/quota/projection.js +134 -0
- package/dist/common-auth-embedded/routing/admission.d.ts +93 -0
- package/dist/common-auth-embedded/routing/admission.js +142 -0
- package/dist/common-auth-embedded/routing/index.d.ts +8 -0
- package/dist/common-auth-embedded/routing/index.js +4 -0
- package/dist/common-auth-embedded/routing/ordered.d.ts +47 -0
- package/dist/common-auth-embedded/routing/ordered.js +58 -0
- package/dist/common-auth-embedded/routing/pins.d.ts +22 -0
- package/dist/common-auth-embedded/routing/pins.js +34 -0
- package/dist/common-auth-embedded/routing/sticky.d.ts +158 -0
- package/dist/common-auth-embedded/routing/sticky.js +339 -0
- package/dist/common-auth-embedded/source-output.json +1090 -0
- package/dist/common-auth-embedded/store/attribution.d.ts +28 -0
- package/dist/common-auth-embedded/store/attribution.js +60 -0
- package/dist/common-auth-embedded/store/errors.d.ts +55 -0
- package/dist/common-auth-embedded/store/errors.js +38 -0
- package/dist/common-auth-embedded/store/hooks.d.ts +12 -0
- package/dist/common-auth-embedded/store/hooks.js +34 -0
- package/dist/common-auth-embedded/store/identity.d.ts +39 -0
- package/dist/common-auth-embedded/store/identity.js +79 -0
- package/dist/common-auth-embedded/store/index.d.ts +21 -0
- package/dist/common-auth-embedded/store/index.js +7 -0
- package/dist/common-auth-embedded/store/mutate.d.ts +189 -0
- package/dist/common-auth-embedded/store/mutate.js +500 -0
- package/dist/common-auth-embedded/store/pool.d.ts +196 -0
- package/dist/common-auth-embedded/store/pool.js +120 -0
- package/dist/common-auth-embedded/store/provider-state.d.ts +131 -0
- package/dist/common-auth-embedded/store/provider-state.js +226 -0
- package/dist/common-auth-embedded/store/publication.d.ts +47 -0
- package/dist/common-auth-embedded/store/publication.js +304 -0
- package/dist/common-auth-embedded/store/pull.d.ts +36 -0
- package/dist/common-auth-embedded/store/pull.js +143 -0
- package/dist/common-auth-embedded/store/refresh-lock.d.ts +63 -0
- package/dist/common-auth-embedded/store/refresh-lock.js +136 -0
- package/dist/common-auth-embedded/store/refresh.d.ts +72 -0
- package/dist/common-auth-embedded/store/refresh.js +225 -0
- package/dist/common-auth-embedded/store/reserved.js +13 -0
- package/dist/common-auth-embedded/store/rows.d.ts +313 -0
- package/dist/common-auth-embedded/store/rows.js +1258 -0
- package/dist/common-auth-embedded/store/runtime.d.ts +36 -0
- package/dist/common-auth-embedded/store/runtime.js +68 -0
- package/dist/common-auth-embedded/store/schema.d.ts +443 -0
- package/dist/common-auth-embedded/store/schema.js +754 -0
- package/dist/common-auth-embedded/store/settings.d.ts +63 -0
- package/dist/common-auth-embedded/store/settings.js +120 -0
- package/dist/common-auth-embedded/store/torn.d.ts +78 -0
- package/dist/common-auth-embedded/store/torn.js +294 -0
- package/dist/common-auth-embedded/util/any-signal.js +42 -0
- package/dist/common-auth-runtime.d.ts +73 -0
- package/dist/common-auth-runtime.d.ts.map +1 -0
- package/dist/common-auth-runtime.js +65 -0
- package/dist/common-auth-runtime.js.map +1 -0
- package/dist/credential-redaction.d.ts +13 -0
- package/dist/credential-redaction.d.ts.map +1 -0
- package/dist/credential-redaction.js +230 -0
- package/dist/credential-redaction.js.map +1 -0
- package/dist/fetch-timeout.d.ts +4 -2
- package/dist/fetch-timeout.d.ts.map +1 -1
- package/dist/fetch-timeout.js +121 -14
- package/dist/fetch-timeout.js.map +1 -1
- package/dist/fingerprint.d.ts +3 -3
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js +4 -4
- package/dist/fingerprint.js.map +1 -1
- package/dist/index.d.ts +16 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -1
- package/dist/model-registry.d.ts +16 -0
- package/dist/model-registry.d.ts.map +1 -1
- package/dist/model-registry.js +242 -30
- package/dist/model-registry.js.map +1 -1
- package/dist/quota-manager.d.ts.map +1 -1
- package/dist/quota-manager.js +35 -10
- package/dist/quota-manager.js.map +1 -1
- package/dist/quota-presentation.d.ts +10 -0
- package/dist/quota-presentation.d.ts.map +1 -0
- package/dist/quota-presentation.js +60 -0
- package/dist/quota-presentation.js.map +1 -0
- package/dist/quota-types.d.ts +2 -0
- package/dist/quota-types.d.ts.map +1 -1
- package/dist/rotation.d.ts +8 -0
- package/dist/rotation.d.ts.map +1 -1
- package/dist/rotation.js +24 -0
- package/dist/rotation.js.map +1 -1
- package/dist/transform/agy-generation.d.ts +3 -0
- package/dist/transform/agy-generation.d.ts.map +1 -0
- package/dist/transform/agy-generation.js +28 -0
- package/dist/transform/agy-generation.js.map +1 -0
- package/dist/transform/claude.d.ts +7 -3
- package/dist/transform/claude.d.ts.map +1 -1
- package/dist/transform/claude.js +8 -2
- package/dist/transform/claude.js.map +1 -1
- package/dist/transform/index.d.ts +1 -0
- package/dist/transform/index.d.ts.map +1 -1
- package/dist/transform/index.js +1 -0
- package/dist/transform/index.js.map +1 -1
- package/dist/transform/model-resolver.d.ts +2 -1
- package/dist/transform/model-resolver.d.ts.map +1 -1
- package/dist/transform/model-resolver.js +46 -5
- package/dist/transform/model-resolver.js.map +1 -1
- package/dist/transform/types.d.ts +1 -1
- package/dist/transform/types.d.ts.map +1 -1
- package/dist/vault-account-source.d.ts +183 -0
- package/dist/vault-account-source.d.ts.map +1 -0
- package/dist/vault-account-source.js +296 -0
- package/dist/vault-account-source.js.map +1 -0
- package/dist/vault-enrollment-authority.d.ts +16 -0
- package/dist/vault-enrollment-authority.d.ts.map +1 -0
- package/dist/vault-enrollment-authority.js +19 -0
- package/dist/vault-enrollment-authority.js.map +1 -0
- package/dist/vault-family.d.ts +11 -0
- package/dist/vault-family.d.ts.map +1 -0
- package/dist/vault-family.js +24 -0
- package/dist/vault-family.js.map +1 -0
- package/dist/vault-provider-state.d.ts +162 -0
- package/dist/vault-provider-state.d.ts.map +1 -0
- package/dist/vault-provider-state.js +422 -0
- package/dist/vault-provider-state.js.map +1 -0
- package/package.json +39 -2
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Antigravity accounts served from a Claustrum vault ("custody mode").
|
|
3
|
+
*
|
|
4
|
+
* Terms used below:
|
|
5
|
+
* - roster: the non-secret list of vault accounts this host may route to
|
|
6
|
+
* (route id, credential id, account identity, enabled/declined state).
|
|
7
|
+
* - receipt: what Claustrum serves for one send attempt: a fresh bearer, the
|
|
8
|
+
* Antigravity project for the model request, the account identity the vault
|
|
9
|
+
* asserted, and the record version it served for the credential.
|
|
10
|
+
* - host auth slot: the host's own Google credential record. Pi temporarily
|
|
11
|
+
* replaces it with a non-secret marker and retains a backup; OpenCode may
|
|
12
|
+
* keep its existing login. Neither is read by this vault account source.
|
|
13
|
+
*
|
|
14
|
+
* The host passes in the library's public `./claustrum` module; every library
|
|
15
|
+
* type here is taken from that module's own declarations.
|
|
16
|
+
*
|
|
17
|
+
* Rules:
|
|
18
|
+
* - Each send attempt to Google (each endpoint fallback, each 401 retry,
|
|
19
|
+
* quota and profile reads) gets a new admission with a fresh receipt, and
|
|
20
|
+
* takes its bearer and project from that receipt only. Nothing is cached or
|
|
21
|
+
* refreshed locally.
|
|
22
|
+
* - Google bearers are opaque: a receipt is accepted only when the vault
|
|
23
|
+
* asserted the credential and the account the selected route names. No
|
|
24
|
+
* token is parsed for an identity, and API-key credentials are refused.
|
|
25
|
+
* - Nothing is served unless custody is active. The host's local credentials
|
|
26
|
+
* stay dormant: this source never reads or refreshes them.
|
|
27
|
+
*/
|
|
28
|
+
import { ANTIGRAVITY_VAULT_FAMILY, ANTIGRAVITY_VAULT_REQUIRE_ASSERTION, } from "./vault-family.js";
|
|
29
|
+
import { commitVaultProviderState, } from "./vault-provider-state.js";
|
|
30
|
+
/**
|
|
31
|
+
* A refusal by this source before any request reaches Google. Refusals made
|
|
32
|
+
* by the Claustrum library itself arrive as the library's own errors.
|
|
33
|
+
*/
|
|
34
|
+
export class AntigravityVaultSourceError extends Error {
|
|
35
|
+
kind;
|
|
36
|
+
constructor(kind, message) {
|
|
37
|
+
super(message);
|
|
38
|
+
this.name = 'AntigravityVaultSourceError';
|
|
39
|
+
this.kind = kind;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Path of the Claustrum connection file to pass as the client's
|
|
44
|
+
* `connectionFile`, resolved by `@cortexkit/claustrum-client`'s own
|
|
45
|
+
* `resolveClaustrumConnectionPath`: `explicit` when given, else the
|
|
46
|
+
* `SUBC_CONNECTION_FILE` or `CLAUSTRUM_SUBC_CONNECTION` environment variable,
|
|
47
|
+
* else the client's default path. The client package is imported only when
|
|
48
|
+
* this is called, so importing core never loads it, and its errors pass
|
|
49
|
+
* through unchanged. Resolving the path opens no connection and reads no
|
|
50
|
+
* enrollment or host credential.
|
|
51
|
+
*/
|
|
52
|
+
export async function resolveClaustrumConnectionPath(explicit) {
|
|
53
|
+
const client = await import('@cortexkit/claustrum-client');
|
|
54
|
+
return client.resolveClaustrumConnectionPath(explicit);
|
|
55
|
+
}
|
|
56
|
+
function isNonEmpty(value) {
|
|
57
|
+
return typeof value === 'string' && value.trim().length > 0;
|
|
58
|
+
}
|
|
59
|
+
/** Rows whose route, credential and account are all known and serviceable. */
|
|
60
|
+
function routeRefs(roster, isDeclined) {
|
|
61
|
+
if (!roster)
|
|
62
|
+
return [];
|
|
63
|
+
const refs = [];
|
|
64
|
+
for (const row of roster.rows) {
|
|
65
|
+
if (!isServiceableRow(row, roster, isDeclined))
|
|
66
|
+
continue;
|
|
67
|
+
refs.push(Object.freeze({
|
|
68
|
+
routeId: row.routeId,
|
|
69
|
+
credentialId: row.credentialId,
|
|
70
|
+
accountIdentity: row.accountIdentity,
|
|
71
|
+
label: row.label,
|
|
72
|
+
...(row.email !== undefined && { email: row.email }),
|
|
73
|
+
}));
|
|
74
|
+
}
|
|
75
|
+
return refs;
|
|
76
|
+
}
|
|
77
|
+
function isServiceableRow(row, roster, isDeclined) {
|
|
78
|
+
return (row.enabled &&
|
|
79
|
+
row.state === 'active' &&
|
|
80
|
+
row.credentialType === 'oauth' &&
|
|
81
|
+
row.stale !== true &&
|
|
82
|
+
row.unclaimed !== true &&
|
|
83
|
+
isNonEmpty(row.accountIdentity) &&
|
|
84
|
+
!isDeclined(roster.declined, row.credentialId, row.accountIdentity));
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Check a receipt against the selected route and turn it into an admission.
|
|
88
|
+
* Throws before anything is sent when the receipt does not prove the route's
|
|
89
|
+
* credential and account, or carries no project.
|
|
90
|
+
*/
|
|
91
|
+
function admissionFromReceipt(ref, receipt) {
|
|
92
|
+
if (receipt.credentialType !== 'oauth')
|
|
93
|
+
throw new AntigravityVaultSourceError('api-key-refused', 'Antigravity vault routes serve OAuth credentials only');
|
|
94
|
+
if (receipt.accountIdentitySource !== 'asserted' ||
|
|
95
|
+
receipt.assertedCredentialId === undefined ||
|
|
96
|
+
receipt.assertedAccountIdentity === undefined)
|
|
97
|
+
throw new AntigravityVaultSourceError('identity-unasserted', 'The vault did not assert the credential and account for this send');
|
|
98
|
+
if (receipt.credentialId !== ref.credentialId ||
|
|
99
|
+
receipt.assertedCredentialId !== ref.credentialId ||
|
|
100
|
+
receipt.assertedAccountIdentity !== ref.accountIdentity ||
|
|
101
|
+
receipt.accountIdentity !== ref.accountIdentity ||
|
|
102
|
+
receipt.expectedAccountIdentity !== ref.accountIdentity)
|
|
103
|
+
throw new AntigravityVaultSourceError('identity-contradicted', 'The vault served a different credential or account than the selected route');
|
|
104
|
+
if (!isNonEmpty(receipt.projectId) || /\s/.test(receipt.projectId))
|
|
105
|
+
throw new AntigravityVaultSourceError('project-missing', 'The vault served no Antigravity project for this send');
|
|
106
|
+
if (!isNonEmpty(receipt.accessToken) ||
|
|
107
|
+
!Number.isSafeInteger(receipt.recordVersion) ||
|
|
108
|
+
receipt.recordVersion < 0)
|
|
109
|
+
throw new AntigravityVaultSourceError('invalid-receipt', 'The vault receipt carries no usable token or record version');
|
|
110
|
+
const admission = {
|
|
111
|
+
routeId: ref.routeId,
|
|
112
|
+
credentialId: receipt.credentialId,
|
|
113
|
+
accountIdentity: receipt.assertedAccountIdentity,
|
|
114
|
+
recordVersion: receipt.recordVersion,
|
|
115
|
+
projectId: receipt.projectId,
|
|
116
|
+
expiresAtMs: receipt.expiresAtMs,
|
|
117
|
+
};
|
|
118
|
+
Object.defineProperty(admission, 'accessToken', {
|
|
119
|
+
value: receipt.accessToken,
|
|
120
|
+
enumerable: false,
|
|
121
|
+
});
|
|
122
|
+
return Object.freeze(admission);
|
|
123
|
+
}
|
|
124
|
+
export function createAntigravityVaultAccountSource(options) {
|
|
125
|
+
const { claustrum } = options;
|
|
126
|
+
const consumer = new claustrum.ClaustrumConsumer({
|
|
127
|
+
rosterPath: options.rosterPath,
|
|
128
|
+
tokenPath: options.tokenPath,
|
|
129
|
+
family: { ...ANTIGRAVITY_VAULT_FAMILY },
|
|
130
|
+
connect: options.connect,
|
|
131
|
+
isCustodyActive: options.isCustodyActive,
|
|
132
|
+
requireAssertion: ANTIGRAVITY_VAULT_REQUIRE_ASSERTION,
|
|
133
|
+
...(options.reservedRouteIds && {
|
|
134
|
+
reservedRouteIds: options.reservedRouteIds,
|
|
135
|
+
}),
|
|
136
|
+
...(options.routePrefix !== undefined && {
|
|
137
|
+
routePrefix: options.routePrefix,
|
|
138
|
+
}),
|
|
139
|
+
...(options.onRoster && { onRoster: options.onRoster }),
|
|
140
|
+
...(options.onError && { onError: options.onError }),
|
|
141
|
+
...(options.pollIntervalMs !== undefined && {
|
|
142
|
+
pollIntervalMs: options.pollIntervalMs,
|
|
143
|
+
}),
|
|
144
|
+
...(options.now && { now: options.now }),
|
|
145
|
+
...(options.logger && { logger: options.logger }),
|
|
146
|
+
});
|
|
147
|
+
const issued = new WeakMap();
|
|
148
|
+
const isDeclined = claustrum.isDeclined.bind(claustrum);
|
|
149
|
+
let closed = false;
|
|
150
|
+
const assertOpen = (signal) => {
|
|
151
|
+
if (closed)
|
|
152
|
+
throw new AntigravityVaultSourceError('closed', 'Antigravity vault source is closed');
|
|
153
|
+
signal?.throwIfAborted();
|
|
154
|
+
};
|
|
155
|
+
/** Require approved vault access before obtaining credentials for an operation. */
|
|
156
|
+
const assertServing = async (signal) => {
|
|
157
|
+
assertOpen(signal);
|
|
158
|
+
if (!(await options.isCustodyActive()))
|
|
159
|
+
throw new AntigravityVaultSourceError('not-active', 'Antigravity vault custody is not active for this host');
|
|
160
|
+
assertOpen(signal);
|
|
161
|
+
};
|
|
162
|
+
/** The ref must still name a serviceable row of the last committed roster. */
|
|
163
|
+
const assertCurrentRoute = (ref) => {
|
|
164
|
+
const roster = consumer.snapshot();
|
|
165
|
+
const row = roster?.rows.find((entry) => entry.routeId === ref.routeId);
|
|
166
|
+
if (!roster ||
|
|
167
|
+
!row ||
|
|
168
|
+
row.credentialId !== ref.credentialId ||
|
|
169
|
+
row.accountIdentity !== ref.accountIdentity ||
|
|
170
|
+
!isServiceableRow(row, roster, isDeclined))
|
|
171
|
+
throw new AntigravityVaultSourceError('route-unavailable', 'The selected vault route is declined, removed or changed');
|
|
172
|
+
};
|
|
173
|
+
const admit = async (ref, signal) => {
|
|
174
|
+
await assertServing(signal);
|
|
175
|
+
assertCurrentRoute(ref);
|
|
176
|
+
const receipt = await consumer.authorize(ref.routeId, signal);
|
|
177
|
+
assertOpen(signal);
|
|
178
|
+
const admission = admissionFromReceipt(ref, receipt);
|
|
179
|
+
issued.set(admission, { receipt, reported: false });
|
|
180
|
+
return admission;
|
|
181
|
+
};
|
|
182
|
+
const issuedEntry = (admission) => {
|
|
183
|
+
const entry = issued.get(admission);
|
|
184
|
+
if (!entry)
|
|
185
|
+
throw new AntigravityVaultSourceError('not-issued', 'This admission was not issued by this vault source');
|
|
186
|
+
return entry;
|
|
187
|
+
};
|
|
188
|
+
const reportServedStatus = async (admission, status, reporterSource) => {
|
|
189
|
+
const entry = issuedEntry(admission);
|
|
190
|
+
if (status !== 401 || entry.reported)
|
|
191
|
+
return false;
|
|
192
|
+
assertOpen();
|
|
193
|
+
entry.reported = true;
|
|
194
|
+
await consumer.reportFailure(entry.receipt, 401, reporterSource ?? options.reporterSource);
|
|
195
|
+
return true;
|
|
196
|
+
};
|
|
197
|
+
/**
|
|
198
|
+
* Fresh proof that the attributed credential, account and record version
|
|
199
|
+
* are still what the vault serves. The proving receipt's token and project
|
|
200
|
+
* are dropped here; they never reach a send.
|
|
201
|
+
*/
|
|
202
|
+
const verifyAttribution = async (attribution) => {
|
|
203
|
+
await assertServing();
|
|
204
|
+
// Authorizing without a committed roster would make the consumer discover
|
|
205
|
+
// and commit one, which takes the roster lock the caller already holds.
|
|
206
|
+
if (!consumer.snapshot())
|
|
207
|
+
throw new AntigravityVaultSourceError('state-unavailable', 'No committed vault roster to verify the account against');
|
|
208
|
+
const ref = {
|
|
209
|
+
routeId: attribution.routeId,
|
|
210
|
+
credentialId: attribution.credentialId,
|
|
211
|
+
accountIdentity: attribution.accountIdentity,
|
|
212
|
+
label: '',
|
|
213
|
+
};
|
|
214
|
+
const proof = admissionFromReceipt(ref, await consumer.authorize(attribution.routeId));
|
|
215
|
+
if (proof.recordVersion !== attribution.recordVersion)
|
|
216
|
+
throw new AntigravityVaultSourceError('state-unavailable', 'The vault now serves another record version for this account');
|
|
217
|
+
};
|
|
218
|
+
return {
|
|
219
|
+
host: options.host,
|
|
220
|
+
start: () => {
|
|
221
|
+
assertOpen();
|
|
222
|
+
consumer.start();
|
|
223
|
+
},
|
|
224
|
+
refresh: async () => {
|
|
225
|
+
assertOpen();
|
|
226
|
+
return consumer.refresh();
|
|
227
|
+
},
|
|
228
|
+
routes: () => (closed ? [] : routeRefs(consumer.snapshot(), isDeclined)),
|
|
229
|
+
admit,
|
|
230
|
+
send: async (ref, dispatch, sendOptions) => {
|
|
231
|
+
const signal = sendOptions.signal;
|
|
232
|
+
let admission = await admit(ref, signal);
|
|
233
|
+
let response = await dispatch(admission, signal);
|
|
234
|
+
if (response.status === 401 && !signal?.aborted) {
|
|
235
|
+
let current;
|
|
236
|
+
try {
|
|
237
|
+
current = await admit(ref, signal);
|
|
238
|
+
}
|
|
239
|
+
catch {
|
|
240
|
+
// No retry: the original 401 response is kept and reported below
|
|
241
|
+
// with the receipt of the dispatch that received it.
|
|
242
|
+
}
|
|
243
|
+
const servedReceipt = issuedEntry(admission).receipt;
|
|
244
|
+
const currentReceipt = current && issuedEntry(current).receipt;
|
|
245
|
+
if (current &&
|
|
246
|
+
claustrum.decideScopedRetryAfter401(sendOptions.site, servedReceipt, currentReceipt, options.logger)) {
|
|
247
|
+
await response.body?.cancel().catch(() => { });
|
|
248
|
+
admission = current;
|
|
249
|
+
response = await dispatch(current, signal);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
if (response.status === 401)
|
|
253
|
+
await reportServedStatus(admission, 401, sendOptions.reporterSource).catch((error) => options.onError?.(error));
|
|
254
|
+
return response;
|
|
255
|
+
},
|
|
256
|
+
reportServedStatus,
|
|
257
|
+
attribution: (admission) => {
|
|
258
|
+
issuedEntry(admission);
|
|
259
|
+
return Object.freeze({
|
|
260
|
+
routeId: admission.routeId,
|
|
261
|
+
credentialId: admission.credentialId,
|
|
262
|
+
accountIdentity: admission.accountIdentity,
|
|
263
|
+
recordVersion: admission.recordVersion,
|
|
264
|
+
});
|
|
265
|
+
},
|
|
266
|
+
commitState: async (attribution, update) => {
|
|
267
|
+
assertOpen();
|
|
268
|
+
if (!options.state)
|
|
269
|
+
throw new AntigravityVaultSourceError('state-unavailable', 'No provider-state sidecar is configured for this vault source');
|
|
270
|
+
return commitVaultProviderState({
|
|
271
|
+
claustrum,
|
|
272
|
+
fs: options.state.fs,
|
|
273
|
+
rosterPath: options.rosterPath,
|
|
274
|
+
statePath: options.state.path,
|
|
275
|
+
attribution,
|
|
276
|
+
verify: verifyAttribution,
|
|
277
|
+
update,
|
|
278
|
+
});
|
|
279
|
+
},
|
|
280
|
+
decline: async (ref) => {
|
|
281
|
+
assertOpen();
|
|
282
|
+
await consumer.decline(ref.routeId);
|
|
283
|
+
},
|
|
284
|
+
accept: async (ref) => {
|
|
285
|
+
assertOpen();
|
|
286
|
+
await consumer.accept(ref.routeId);
|
|
287
|
+
},
|
|
288
|
+
close: () => {
|
|
289
|
+
if (closed)
|
|
290
|
+
return;
|
|
291
|
+
closed = true;
|
|
292
|
+
consumer.close();
|
|
293
|
+
},
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
//# sourceMappingURL=vault-account-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-account-source.js","sourceRoot":"","sources":["../src/vault-account-source.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type CommonAuthClaustrumModule } from './common-auth-runtime.ts';
|
|
2
|
+
export type EnrollmentAuthority = 'vault' | 'local' | 'unreadable';
|
|
3
|
+
type EnrollmentPaths = Parameters<CommonAuthClaustrumModule['readClaustrumEnrollmentStatus']>[0];
|
|
4
|
+
type EnrollmentReader = Pick<CommonAuthClaustrumModule, 'enrollmentAuthority'>;
|
|
5
|
+
export declare const VAULT_ACCOUNT_REMEDY = "Vault account access is unavailable. Connect accounts in the vault, or disconnect the vault to use local accounts.";
|
|
6
|
+
/**
|
|
7
|
+
* The operator's approval to access the vault selects its accounts instead of local OAuth accounts,
|
|
8
|
+
* regardless of a saved local-mode preference.
|
|
9
|
+
* An approved record whose token disappeared still excludes local accounts.
|
|
10
|
+
* Failed reads never authorize local work. Call at the start of each unit of
|
|
11
|
+
* work; a refresh that already started must finish saving the replacement
|
|
12
|
+
* OAuth credentials.
|
|
13
|
+
*/
|
|
14
|
+
export declare function enrollmentAuthority(paths: EnrollmentPaths, proposedName: string, reader?: EnrollmentReader): Promise<EnrollmentAuthority>;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=vault-enrollment-authority.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-enrollment-authority.d.ts","sourceRoot":"","sources":["../src/vault-enrollment-authority.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,yBAAyB,EAE/B,MAAM,0BAA0B,CAAA;AAEjC,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,OAAO,GAAG,YAAY,CAAA;AAClE,KAAK,eAAe,GAAG,UAAU,CAC/B,yBAAyB,CAAC,+BAA+B,CAAC,CAC3D,CAAC,CAAC,CAAC,CAAA;AACJ,KAAK,gBAAgB,GAAG,IAAI,CAAC,yBAAyB,EAAE,qBAAqB,CAAC,CAAA;AAE9E,eAAO,MAAM,oBAAoB,uHACqF,CAAA;AAEtH;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,eAAe,EACtB,YAAY,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,mBAAmB,CAAC,CAQ9B"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { loadCommonAuthClaustrum, } from "./common-auth-runtime.js";
|
|
2
|
+
export const VAULT_ACCOUNT_REMEDY = 'Vault account access is unavailable. Connect accounts in the vault, or disconnect the vault to use local accounts.';
|
|
3
|
+
/**
|
|
4
|
+
* The operator's approval to access the vault selects its accounts instead of local OAuth accounts,
|
|
5
|
+
* regardless of a saved local-mode preference.
|
|
6
|
+
* An approved record whose token disappeared still excludes local accounts.
|
|
7
|
+
* Failed reads never authorize local work. Call at the start of each unit of
|
|
8
|
+
* work; a refresh that already started must finish saving the replacement
|
|
9
|
+
* OAuth credentials.
|
|
10
|
+
*/
|
|
11
|
+
export async function enrollmentAuthority(paths, proposedName, reader) {
|
|
12
|
+
try {
|
|
13
|
+
return await (reader ?? (await loadCommonAuthClaustrum())).enrollmentAuthority(paths, proposedName);
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return 'unreadable';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=vault-enrollment-authority.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-enrollment-authority.js","sourceRoot":"","sources":["../src/vault-enrollment-authority.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,uBAAuB,GACxB,MAAM,0BAA0B,CAAA;AAQjC,MAAM,CAAC,MAAM,oBAAoB,GAC/B,oHAAoH,CAAA;AAEtH;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,KAAsB,EACtB,YAAoB,EACpB,MAAyB;IAEzB,IAAI,CAAC;QACH,OAAO,MAAM,CACX,MAAM,IAAI,CAAC,MAAM,uBAAuB,EAAE,CAAC,CAC5C,CAAC,mBAAmB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAA;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,YAAY,CAAA;IACrB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type AntigravityVaultHost = 'opencode' | 'pi';
|
|
2
|
+
export declare const ANTIGRAVITY_VAULT_FAMILY: Readonly<{
|
|
3
|
+
readonly refreshAdapter: "antigravity";
|
|
4
|
+
readonly category: "antigravity-native";
|
|
5
|
+
readonly apiKeys: false;
|
|
6
|
+
}>;
|
|
7
|
+
export declare const ANTIGRAVITY_VAULT_REQUIRE_ASSERTION: true;
|
|
8
|
+
export type AntigravityVaultEnrollmentName = `antigravity-auth-${AntigravityVaultHost}`;
|
|
9
|
+
export declare const ANTIGRAVITY_VAULT_ENROLLMENT_NAMES: Readonly<Record<AntigravityVaultHost, AntigravityVaultEnrollmentName>>;
|
|
10
|
+
export declare function getAntigravityVaultEnrollmentName(host: AntigravityVaultHost): AntigravityVaultEnrollmentName;
|
|
11
|
+
//# sourceMappingURL=vault-family.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-family.d.ts","sourceRoot":"","sources":["../src/vault-family.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAAG,UAAU,GAAG,IAAI,CAAA;AAEpD,eAAO,MAAM,wBAAwB;;;;EAI1B,CAAA;AAEX,eAAO,MAAM,mCAAmC,EAAG,IAAa,CAAA;AAEhE,MAAM,MAAM,8BAA8B,GACxC,oBAAoB,oBAAoB,EAAE,CAAA;AAE5C,eAAO,MAAM,kCAAkC,EAAE,QAAQ,CACvD,MAAM,CAAC,oBAAoB,EAAE,8BAA8B,CAAC,CAI5D,CAAA;AAMF,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,oBAAoB,GACzB,8BAA8B,CAShC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export const ANTIGRAVITY_VAULT_FAMILY = Object.freeze({
|
|
2
|
+
refreshAdapter: 'antigravity',
|
|
3
|
+
category: 'antigravity-native',
|
|
4
|
+
apiKeys: false,
|
|
5
|
+
});
|
|
6
|
+
export const ANTIGRAVITY_VAULT_REQUIRE_ASSERTION = true;
|
|
7
|
+
export const ANTIGRAVITY_VAULT_ENROLLMENT_NAMES = Object.freeze({
|
|
8
|
+
opencode: 'antigravity-auth-opencode',
|
|
9
|
+
pi: 'antigravity-auth-pi',
|
|
10
|
+
});
|
|
11
|
+
function assertNeverHost(host) {
|
|
12
|
+
throw new TypeError(`Unsupported Antigravity vault host: ${String(host)}`);
|
|
13
|
+
}
|
|
14
|
+
export function getAntigravityVaultEnrollmentName(host) {
|
|
15
|
+
switch (host) {
|
|
16
|
+
case 'opencode':
|
|
17
|
+
return ANTIGRAVITY_VAULT_ENROLLMENT_NAMES.opencode;
|
|
18
|
+
case 'pi':
|
|
19
|
+
return ANTIGRAVITY_VAULT_ENROLLMENT_NAMES.pi;
|
|
20
|
+
default:
|
|
21
|
+
return assertNeverHost(host);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=vault-family.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-family.js","sourceRoot":"","sources":["../src/vault-family.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAC,MAAM,CAAC;IACpD,cAAc,EAAE,aAAa;IAC7B,QAAQ,EAAE,oBAAoB;IAC9B,OAAO,EAAE,KAAK;CACN,CAAC,CAAA;AAEX,MAAM,CAAC,MAAM,mCAAmC,GAAG,IAAa,CAAA;AAKhE,MAAM,CAAC,MAAM,kCAAkC,GAE3C,MAAM,CAAC,MAAM,CAAC;IAChB,QAAQ,EAAE,2BAA2B;IACrC,EAAE,EAAE,qBAAqB;CAC1B,CAAC,CAAA;AAEF,SAAS,eAAe,CAAC,IAAW;IAClC,MAAM,IAAI,SAAS,CAAC,uCAAuC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAC5E,CAAC;AAED,MAAM,UAAU,iCAAiC,CAC/C,IAA0B;IAE1B,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,UAAU;YACb,OAAO,kCAAkC,CAAC,QAAQ,CAAA;QACpD,KAAK,IAAI;YACP,OAAO,kCAAkC,CAAC,EAAE,CAAA;QAC9C;YACE,OAAO,eAAe,CAAC,IAAI,CAAC,CAAA;IAChC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider-state file ("sidecar") for vault accounts: non-credential
|
|
3
|
+
* Antigravity metadata (label, usage, cooldowns, verification, tier,
|
|
4
|
+
* fingerprint, quota) keyed by the account identity the vault asserted, with
|
|
5
|
+
* the route, credential and record version that last wrote it.
|
|
6
|
+
*
|
|
7
|
+
* The roster (the Claustrum library's non-secret list of vault accounts this
|
|
8
|
+
* host may route to) keeps only the fields the library defines and drops any
|
|
9
|
+
* other field when it rewrites the file, so Antigravity's own state lives in
|
|
10
|
+
* this separate file. Keying by asserted account means a different account
|
|
11
|
+
* inherits nothing, while the same account keeps its state across token
|
|
12
|
+
* refreshes. The file never holds a bearer, refresh or enrollment secret, a
|
|
13
|
+
* receipt or a project (a vault send's project comes from the receipt
|
|
14
|
+
* Claustrum serves for that send attempt); such input is refused, not
|
|
15
|
+
* stripped. The fingerprint `sessionToken` is locally generated tracking
|
|
16
|
+
* metadata, not a credential, and is kept.
|
|
17
|
+
*
|
|
18
|
+
* A write holds the roster lock as an ownership guard (the roster is not
|
|
19
|
+
* rewritten), then this file's lock, re-checks the roster binding and asks the
|
|
20
|
+
* vault for a fresh receipt for the same version, and re-asserts both locks
|
|
21
|
+
* just before the atomic rename.
|
|
22
|
+
*
|
|
23
|
+
* A write must carry the record version its observation was served under.
|
|
24
|
+
* Once the vault serves a newer record version, even for the same account,
|
|
25
|
+
* that write is refused and the observation (usage, quota) is dropped; it is
|
|
26
|
+
* never re-attributed to the newer version.
|
|
27
|
+
*/
|
|
28
|
+
import type { JsonObject, ProviderMetadata, QuotaState } from './account-repository-types.ts';
|
|
29
|
+
import type { CommonAuthFsModule } from './common-auth-runtime.ts';
|
|
30
|
+
import type { VaultClaustrumPort } from './vault-account-source.ts';
|
|
31
|
+
export declare const VAULT_PROVIDER_STATE_SCHEMA_VERSION = 1;
|
|
32
|
+
/**
|
|
33
|
+
* File lock (`./fs` `withLock`) a commit holds on the state file, so two
|
|
34
|
+
* writers cannot interleave their read and rename.
|
|
35
|
+
*/
|
|
36
|
+
export declare const VAULT_PROVIDER_STATE_LOCK: Readonly<{
|
|
37
|
+
name: "antigravity-vault-state";
|
|
38
|
+
ttlMs: 10000;
|
|
39
|
+
timeoutMs: 10000;
|
|
40
|
+
renew: true;
|
|
41
|
+
}>;
|
|
42
|
+
/**
|
|
43
|
+
* The `./fs` lock and atomic-write functions `commitVaultProviderState`
|
|
44
|
+
* uses.
|
|
45
|
+
*/
|
|
46
|
+
export type AntigravityVaultStateFs = Pick<CommonAuthFsModule, 'withLock' | 'writeJsonAtomic'>;
|
|
47
|
+
/**
|
|
48
|
+
* The `./claustrum` functions `commitVaultProviderState` uses: the roster write
|
|
49
|
+
* lock as an ownership guard and the decline check.
|
|
50
|
+
*/
|
|
51
|
+
export type VaultRosterGuardModule = Pick<VaultClaustrumPort, 'mutateVaultRoster' | 'isDeclined'>;
|
|
52
|
+
/**
|
|
53
|
+
* Non-secret facts tying an observation (usage, quota) to the send attempt
|
|
54
|
+
* that produced it: the selected route, the credential id and asserted
|
|
55
|
+
* account, and the record version Claustrum served. Carries no token and no
|
|
56
|
+
* project.
|
|
57
|
+
*/
|
|
58
|
+
export interface VaultStateAttribution {
|
|
59
|
+
readonly routeId: string;
|
|
60
|
+
readonly credentialId: string;
|
|
61
|
+
readonly accountIdentity: string;
|
|
62
|
+
readonly recordVersion: number;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Provider metadata a vault account may keep. The project fields are left
|
|
66
|
+
* out because a send's project comes only from the receipt Claustrum serves
|
|
67
|
+
* for that attempt, and
|
|
68
|
+
* `enabled` because the roster owns whether an account routes.
|
|
69
|
+
*/
|
|
70
|
+
export type VaultProviderMetadata = Omit<ProviderMetadata, 'projectId' | 'managedProjectId' | 'enabled'>;
|
|
71
|
+
/**
|
|
72
|
+
* The route, credential and served record version of the send whose
|
|
73
|
+
* observation last wrote this state. Kept as a record only; never counted or
|
|
74
|
+
* compared as a local version number.
|
|
75
|
+
*/
|
|
76
|
+
export interface VaultStateProvenance {
|
|
77
|
+
readonly routeId: string;
|
|
78
|
+
readonly credentialId: string;
|
|
79
|
+
readonly recordVersion: number;
|
|
80
|
+
}
|
|
81
|
+
export interface VaultAccountState {
|
|
82
|
+
readonly observed: VaultStateProvenance;
|
|
83
|
+
readonly metadata?: VaultProviderMetadata;
|
|
84
|
+
readonly quota?: QuotaState;
|
|
85
|
+
readonly extensions?: JsonObject;
|
|
86
|
+
}
|
|
87
|
+
export interface VaultProviderStateFile {
|
|
88
|
+
readonly schemaVersion: typeof VAULT_PROVIDER_STATE_SCHEMA_VERSION;
|
|
89
|
+
readonly accounts: Readonly<Record<string, VaultAccountState>>;
|
|
90
|
+
readonly extensions?: JsonObject;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* What an update asks to store for the account. `observed` is not part of it:
|
|
94
|
+
* `commitVaultProviderState` sets it from the attribution.
|
|
95
|
+
*/
|
|
96
|
+
export interface VaultAccountStateValue {
|
|
97
|
+
metadata?: VaultProviderMetadata;
|
|
98
|
+
quota?: QuotaState;
|
|
99
|
+
extensions?: JsonObject;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Computes the account's next state from its current one. The function must
|
|
103
|
+
* be synchronous and must not start another commit. Return `undefined` to
|
|
104
|
+
* leave the state as it is and `null` to remove the account's entry.
|
|
105
|
+
*/
|
|
106
|
+
export type AntigravityVaultStateUpdate = (current: VaultAccountState | undefined) => VaultAccountStateValue | null | undefined;
|
|
107
|
+
export type VaultProviderStateCommitResult = {
|
|
108
|
+
status: 'written';
|
|
109
|
+
state: VaultAccountState;
|
|
110
|
+
} | {
|
|
111
|
+
status: 'cleared';
|
|
112
|
+
} | {
|
|
113
|
+
status: 'unchanged';
|
|
114
|
+
state?: VaultAccountState;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* The write failed part-way; the file may or may not hold the new state.
|
|
118
|
+
* The write is not retried. `state` is what a reload of the file found,
|
|
119
|
+
* when the reload could read it.
|
|
120
|
+
*/
|
|
121
|
+
| {
|
|
122
|
+
status: 'uncertain';
|
|
123
|
+
error: unknown;
|
|
124
|
+
state?: VaultAccountState;
|
|
125
|
+
};
|
|
126
|
+
export type VaultProviderStateFailureKind = 'invalid-attribution' | 'binding-stale' | 'malformed' | 'newer-schema' | 'credential-material' | 'project-field' | 'invalid-update';
|
|
127
|
+
/**
|
|
128
|
+
* A refused read or commit. Messages name the field path or step that was
|
|
129
|
+
* refused, never the stored value.
|
|
130
|
+
*/
|
|
131
|
+
export declare class VaultProviderStateError extends Error {
|
|
132
|
+
readonly kind: VaultProviderStateFailureKind;
|
|
133
|
+
constructor(kind: VaultProviderStateFailureKind, message: string);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Reads a sidecar value. A newer schema, an unknown field, a credential or a
|
|
137
|
+
* project anywhere in it is refused; nothing is silently dropped.
|
|
138
|
+
*/
|
|
139
|
+
export declare function decodeVaultProviderState(raw: unknown): VaultProviderStateFile;
|
|
140
|
+
export declare function encodeVaultProviderState(file: VaultProviderStateFile): JsonObject;
|
|
141
|
+
/** Reads the sidecar; a missing file is an empty one, anything unreadable is refused. */
|
|
142
|
+
export declare function readVaultProviderState(statePath: string): Promise<VaultProviderStateFile>;
|
|
143
|
+
/** The stored state of one asserted account, if any. */
|
|
144
|
+
export declare function vaultAccountState(file: VaultProviderStateFile, accountIdentity: string): VaultAccountState | undefined;
|
|
145
|
+
export interface CommitVaultProviderStateInput {
|
|
146
|
+
claustrum: VaultRosterGuardModule;
|
|
147
|
+
fs: AntigravityVaultStateFs;
|
|
148
|
+
rosterPath: string;
|
|
149
|
+
statePath: string;
|
|
150
|
+
attribution: VaultStateAttribution;
|
|
151
|
+
/**
|
|
152
|
+
* Fresh proof, while the roster write lock and the state-file lock are both
|
|
153
|
+
* held, that custody is still active, the host's stored credential record
|
|
154
|
+
* is still not a real login, and the vault still serves the attributed
|
|
155
|
+
* credential, account and record version. Throws to refuse. Must not use
|
|
156
|
+
* or keep the proving receipt's token or project.
|
|
157
|
+
*/
|
|
158
|
+
verify: (attribution: VaultStateAttribution) => Promise<void>;
|
|
159
|
+
update: AntigravityVaultStateUpdate;
|
|
160
|
+
}
|
|
161
|
+
export declare function commitVaultProviderState(input: CommitVaultProviderStateInput): Promise<VaultProviderStateCommitResult>;
|
|
162
|
+
//# sourceMappingURL=vault-provider-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-provider-state.d.ts","sourceRoot":"","sources":["../src/vault-provider-state.ts"],"names":[],"mappings":"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"}
|