@cortexkit/antigravity-auth-core 2.2.1 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +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 +2282 -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-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/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/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/claude.d.ts +7 -3
- package/dist/transform/claude.d.ts.map +1 -1
- package/dist/transform/claude.js +6 -2
- package/dist/transform/claude.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,183 @@
|
|
|
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 type { CommonAuthClaustrumModule } from './common-auth-runtime.ts';
|
|
29
|
+
import { type AntigravityVaultHost } from './vault-family.ts';
|
|
30
|
+
import { type AntigravityVaultStateFs, type AntigravityVaultStateUpdate, type VaultProviderStateCommitResult, type VaultStateAttribution } from './vault-provider-state.ts';
|
|
31
|
+
type ClaustrumConsumerClass = CommonAuthClaustrumModule['ClaustrumConsumer'];
|
|
32
|
+
type ClaustrumConsumerInstance = InstanceType<ClaustrumConsumerClass>;
|
|
33
|
+
export type VaultConsumerOptions = ConstructorParameters<ClaustrumConsumerClass>[0];
|
|
34
|
+
export type VaultScopedClient = Awaited<ReturnType<VaultConsumerOptions['connect']>>;
|
|
35
|
+
export type VaultScopedReceipt = Awaited<ReturnType<ClaustrumConsumerInstance['authorize']>>;
|
|
36
|
+
export type VaultRoster = NonNullable<ReturnType<ClaustrumConsumerInstance['snapshot']>>;
|
|
37
|
+
export type VaultRosterRow = VaultRoster['rows'][number];
|
|
38
|
+
export type VaultReporterSource = Parameters<ClaustrumConsumerInstance['reportFailure']>[2];
|
|
39
|
+
export type VaultLogger = NonNullable<VaultConsumerOptions['logger']>;
|
|
40
|
+
/** The consumer methods this source calls. */
|
|
41
|
+
export type VaultClaustrumConsumer = Pick<ClaustrumConsumerInstance, 'snapshot' | 'refresh' | 'start' | 'authorize' | 'reportFailure' | 'decline' | 'accept' | 'close'>;
|
|
42
|
+
/**
|
|
43
|
+
* The part of `./claustrum` this source uses. The module namespace itself
|
|
44
|
+
* assigns to it; tests can pass a smaller stand-in.
|
|
45
|
+
*/
|
|
46
|
+
export interface VaultClaustrumPort extends Pick<CommonAuthClaustrumModule, 'decideScopedRetryAfter401' | 'isDeclined' | 'mutateVaultRoster'> {
|
|
47
|
+
ClaustrumConsumer: new (options: VaultConsumerOptions) => VaultClaustrumConsumer;
|
|
48
|
+
}
|
|
49
|
+
export type AntigravityVaultSourceFailureKind = 'closed' | 'not-active' | 'route-unavailable' | 'api-key-refused' | 'identity-unasserted' | 'identity-contradicted' | 'project-missing' | 'invalid-receipt' | 'not-issued' | 'state-unavailable';
|
|
50
|
+
/**
|
|
51
|
+
* A refusal by this source before any request reaches Google. Refusals made
|
|
52
|
+
* by the Claustrum library itself arrive as the library's own errors.
|
|
53
|
+
*/
|
|
54
|
+
export declare class AntigravityVaultSourceError extends Error {
|
|
55
|
+
readonly kind: AntigravityVaultSourceFailureKind;
|
|
56
|
+
constructor(kind: AntigravityVaultSourceFailureKind, message: string);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* A selectable vault account: the route plus the credential id and account
|
|
60
|
+
* identity the roster named when it was captured, before any await. `admit`
|
|
61
|
+
* refuses the ref once the current roster routes it to another credential or
|
|
62
|
+
* account.
|
|
63
|
+
*/
|
|
64
|
+
export interface VaultRouteRef {
|
|
65
|
+
readonly routeId: string;
|
|
66
|
+
readonly credentialId: string;
|
|
67
|
+
readonly accountIdentity: string;
|
|
68
|
+
/** The roster row's display label; may hold personal data. */
|
|
69
|
+
readonly label: string;
|
|
70
|
+
readonly email?: string;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* The inputs of one send attempt, all taken from one Claustrum receipt. Use it
|
|
74
|
+
* for exactly one attempt. `accessToken` is non-enumerable, so spreads and JSON
|
|
75
|
+
* never copy it.
|
|
76
|
+
*/
|
|
77
|
+
export interface VaultSendAdmission {
|
|
78
|
+
readonly routeId: string;
|
|
79
|
+
readonly credentialId: string;
|
|
80
|
+
readonly accountIdentity: string;
|
|
81
|
+
/** The record version Claustrum served; a 401 is reported against it. */
|
|
82
|
+
readonly recordVersion: number;
|
|
83
|
+
/** Antigravity project to put in the model request body. */
|
|
84
|
+
readonly projectId: string;
|
|
85
|
+
readonly accessToken: string;
|
|
86
|
+
readonly expiresAtMs: number | null;
|
|
87
|
+
}
|
|
88
|
+
export interface VaultSendOptions {
|
|
89
|
+
/**
|
|
90
|
+
* Request kind (`model`, `quota`, `profile`). The library logs it with its
|
|
91
|
+
* decision whether to retry a 401.
|
|
92
|
+
*/
|
|
93
|
+
site: string;
|
|
94
|
+
signal?: AbortSignal;
|
|
95
|
+
reporterSource?: VaultReporterSource;
|
|
96
|
+
}
|
|
97
|
+
export interface AntigravityVaultSourceOptions {
|
|
98
|
+
claustrum: VaultClaustrumPort;
|
|
99
|
+
host: AntigravityVaultHost;
|
|
100
|
+
rosterPath: string;
|
|
101
|
+
/** Enrollment token file that setup wrote for this host (`host`). */
|
|
102
|
+
tokenPath: string;
|
|
103
|
+
connect: () => Promise<VaultScopedClient>;
|
|
104
|
+
isCustodyActive: () => boolean | Promise<boolean>;
|
|
105
|
+
/**
|
|
106
|
+
* How a 401 reached this plugin, passed to Claustrum with the 401 report
|
|
107
|
+
* that `send` makes.
|
|
108
|
+
*/
|
|
109
|
+
reporterSource: VaultReporterSource;
|
|
110
|
+
/**
|
|
111
|
+
* Credential-free per-account state file (see `vault-provider-state.ts`) and
|
|
112
|
+
* the `./fs` functions that lock and write it. Without it `commitState` has
|
|
113
|
+
* nowhere to write and is refused.
|
|
114
|
+
*/
|
|
115
|
+
state?: {
|
|
116
|
+
path: string;
|
|
117
|
+
fs: AntigravityVaultStateFs;
|
|
118
|
+
};
|
|
119
|
+
reservedRouteIds?: () => Iterable<string>;
|
|
120
|
+
routePrefix?: string;
|
|
121
|
+
onRoster?: (roster: VaultRoster) => void;
|
|
122
|
+
onError?: (error: unknown) => void;
|
|
123
|
+
pollIntervalMs?: number;
|
|
124
|
+
now?: () => number;
|
|
125
|
+
logger?: VaultLogger;
|
|
126
|
+
}
|
|
127
|
+
export interface AntigravityVaultAccountSource {
|
|
128
|
+
readonly host: AntigravityVaultHost;
|
|
129
|
+
start(): void;
|
|
130
|
+
refresh(): Promise<VaultRoster | undefined>;
|
|
131
|
+
/** Selectable accounts from the last committed roster. */
|
|
132
|
+
routes(): VaultRouteRef[];
|
|
133
|
+
/** A fresh receipt for one physical send on `ref`. */
|
|
134
|
+
admit(ref: VaultRouteRef, signal?: AbortSignal): Promise<VaultSendAdmission>;
|
|
135
|
+
/**
|
|
136
|
+
* Admit and dispatch. When the original response status of the dispatch is
|
|
137
|
+
* 401, retry once with a fresh receipt only if the vault now serves a newer
|
|
138
|
+
* version of the same credential and account; a final 401 is reported with
|
|
139
|
+
* the receipt that dispatch used. When the caller tries another Antigravity
|
|
140
|
+
* endpoint after a failure, that attempt is a new `send` with a new
|
|
141
|
+
* admission.
|
|
142
|
+
*/
|
|
143
|
+
send(ref: VaultRouteRef, dispatch: (admission: VaultSendAdmission, signal?: AbortSignal) => Promise<Response>, options: VaultSendOptions): Promise<Response>;
|
|
144
|
+
/**
|
|
145
|
+
* Report to Claustrum that the request sent with `admission` got a 401, so
|
|
146
|
+
* the vault can mark that served record version bad. Pass the original
|
|
147
|
+
* response status; only 401 is reported, once per admission, against that
|
|
148
|
+
* admission's own receipt and record version. Other statuses return false.
|
|
149
|
+
*/
|
|
150
|
+
reportServedStatus(admission: VaultSendAdmission, status: number, reporterSource?: VaultReporterSource): Promise<boolean>;
|
|
151
|
+
/**
|
|
152
|
+
* The non-secret facts that tie an observation (usage, quota) to the send
|
|
153
|
+
* that produced it: route, credential id, asserted account and served record
|
|
154
|
+
* version. Carries no token or project; pass it to `commitState`.
|
|
155
|
+
*/
|
|
156
|
+
attribution(admission: VaultSendAdmission): VaultStateAttribution;
|
|
157
|
+
/**
|
|
158
|
+
* Update the account's provider state; see `commitVaultProviderState`. The
|
|
159
|
+
* write is refused unless the roster and a fresh receipt still show the
|
|
160
|
+
* attributed credential, account and record version. If the vault has since
|
|
161
|
+
* served a newer record version, even for the same account, the observation
|
|
162
|
+
* is dropped rather than attributed to the newer version.
|
|
163
|
+
*/
|
|
164
|
+
commitState(attribution: VaultStateAttribution, update: AntigravityVaultStateUpdate): Promise<VaultProviderStateCommitResult>;
|
|
165
|
+
decline(ref: VaultRouteRef): Promise<void>;
|
|
166
|
+
accept(ref: VaultRouteRef): Promise<void>;
|
|
167
|
+
/** Close the vault connection; later calls are refused. */
|
|
168
|
+
close(): void;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Path of the Claustrum connection file to pass as the client's
|
|
172
|
+
* `connectionFile`, resolved by `@cortexkit/claustrum-client`'s own
|
|
173
|
+
* `resolveClaustrumConnectionPath`: `explicit` when given, else the
|
|
174
|
+
* `SUBC_CONNECTION_FILE` or `CLAUSTRUM_SUBC_CONNECTION` environment variable,
|
|
175
|
+
* else the client's default path. The client package is imported only when
|
|
176
|
+
* this is called, so importing core never loads it, and its errors pass
|
|
177
|
+
* through unchanged. Resolving the path opens no connection and reads no
|
|
178
|
+
* enrollment or host credential.
|
|
179
|
+
*/
|
|
180
|
+
export declare function resolveClaustrumConnectionPath(explicit?: string): Promise<string>;
|
|
181
|
+
export declare function createAntigravityVaultAccountSource(options: AntigravityVaultSourceOptions): AntigravityVaultAccountSource;
|
|
182
|
+
export {};
|
|
183
|
+
//# sourceMappingURL=vault-account-source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-account-source.d.ts","sourceRoot":"","sources":["../src/vault-account-source.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|