@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.
Files changed (253) hide show
  1. package/README.md +24 -2
  2. package/dist/abort-forwarding.d.ts +3 -0
  3. package/dist/abort-forwarding.d.ts.map +1 -0
  4. package/dist/abort-forwarding.js +19 -0
  5. package/dist/abort-forwarding.js.map +1 -0
  6. package/dist/account-identity.d.ts +52 -0
  7. package/dist/account-identity.d.ts.map +1 -0
  8. package/dist/account-identity.js +66 -0
  9. package/dist/account-identity.js.map +1 -0
  10. package/dist/account-manager.d.ts +228 -43
  11. package/dist/account-manager.d.ts.map +1 -1
  12. package/dist/account-manager.js +942 -903
  13. package/dist/account-manager.js.map +1 -1
  14. package/dist/account-migration.d.ts +309 -0
  15. package/dist/account-migration.d.ts.map +1 -0
  16. package/dist/account-migration.js +2284 -0
  17. package/dist/account-migration.js.map +1 -0
  18. package/dist/account-repository-codecs.d.ts +82 -0
  19. package/dist/account-repository-codecs.d.ts.map +1 -0
  20. package/dist/account-repository-codecs.js +609 -0
  21. package/dist/account-repository-codecs.js.map +1 -0
  22. package/dist/account-repository-types.d.ts +831 -0
  23. package/dist/account-repository-types.d.ts.map +1 -0
  24. package/dist/account-repository-types.js +137 -0
  25. package/dist/account-repository-types.js.map +1 -0
  26. package/dist/account-repository.d.ts +442 -0
  27. package/dist/account-repository.d.ts.map +1 -0
  28. package/dist/account-repository.js +2253 -0
  29. package/dist/account-repository.js.map +1 -0
  30. package/dist/account-selector.d.ts +470 -0
  31. package/dist/account-selector.d.ts.map +1 -0
  32. package/dist/account-selector.js +1383 -0
  33. package/dist/account-selector.js.map +1 -0
  34. package/dist/account-storage.d.ts.map +1 -1
  35. package/dist/account-storage.js +5 -0
  36. package/dist/account-storage.js.map +1 -1
  37. package/dist/agy-request-metadata.d.ts.map +1 -1
  38. package/dist/agy-request-metadata.js +8 -21
  39. package/dist/agy-request-metadata.js.map +1 -1
  40. package/dist/agy-transport.d.ts.map +1 -1
  41. package/dist/agy-transport.js +21 -35
  42. package/dist/agy-transport.js.map +1 -1
  43. package/dist/antigravity-command-menu.d.ts +171 -0
  44. package/dist/antigravity-command-menu.d.ts.map +1 -0
  45. package/dist/antigravity-command-menu.js +523 -0
  46. package/dist/antigravity-command-menu.js.map +1 -0
  47. package/dist/atomic-write.d.ts +18 -1
  48. package/dist/atomic-write.d.ts.map +1 -1
  49. package/dist/atomic-write.js +15 -3
  50. package/dist/atomic-write.js.map +1 -1
  51. package/dist/common-auth-embedded/NOTICE.txt +21 -0
  52. package/dist/common-auth-embedded/auth-menu/accounts.d.ts +97 -0
  53. package/dist/common-auth-embedded/auth-menu/accounts.js +387 -0
  54. package/dist/common-auth-embedded/auth-menu/ansi.d.ts +26 -0
  55. package/dist/common-auth-embedded/auth-menu/ansi.js +98 -0
  56. package/dist/common-auth-embedded/auth-menu/confirm.d.ts +7 -0
  57. package/dist/common-auth-embedded/auth-menu/confirm.js +21 -0
  58. package/dist/common-auth-embedded/auth-menu/doctor.d.ts +52 -0
  59. package/dist/common-auth-embedded/auth-menu/doctor.js +81 -0
  60. package/dist/common-auth-embedded/auth-menu/index.d.ts +17 -0
  61. package/dist/common-auth-embedded/auth-menu/index.js +12 -0
  62. package/dist/common-auth-embedded/auth-menu/login.d.ts +55 -0
  63. package/dist/common-auth-embedded/auth-menu/login.js +83 -0
  64. package/dist/common-auth-embedded/auth-menu/menu.d.ts +59 -0
  65. package/dist/common-auth-embedded/auth-menu/menu.js +73 -0
  66. package/dist/common-auth-embedded/auth-menu/opencode-v1.d.ts +49 -0
  67. package/dist/common-auth-embedded/auth-menu/opencode-v1.js +47 -0
  68. package/dist/common-auth-embedded/auth-menu/select.d.ts +21 -0
  69. package/dist/common-auth-embedded/auth-menu/select.js +159 -0
  70. package/dist/common-auth-embedded/auth-menu/terminal.d.ts +43 -0
  71. package/dist/common-auth-embedded/auth-menu/terminal.js +19 -0
  72. package/dist/common-auth-embedded/claustrum/consumer.d.ts +102 -0
  73. package/dist/common-auth-embedded/claustrum/consumer.js +298 -0
  74. package/dist/common-auth-embedded/claustrum/custody.d.ts +175 -0
  75. package/dist/common-auth-embedded/claustrum/custody.js +354 -0
  76. package/dist/common-auth-embedded/claustrum/enrollment.d.ts +158 -0
  77. package/dist/common-auth-embedded/claustrum/enrollment.js +759 -0
  78. package/dist/common-auth-embedded/claustrum/errors.d.ts +16 -0
  79. package/dist/common-auth-embedded/claustrum/errors.js +8 -0
  80. package/dist/common-auth-embedded/claustrum/host-slot.d.ts +39 -0
  81. package/dist/common-auth-embedded/claustrum/host-slot.js +72 -0
  82. package/dist/common-auth-embedded/claustrum/index.d.ts +18 -0
  83. package/dist/common-auth-embedded/claustrum/index.js +22 -0
  84. package/dist/common-auth-embedded/claustrum/interlock.d.ts +27 -0
  85. package/dist/common-auth-embedded/claustrum/interlock.js +29 -0
  86. package/dist/common-auth-embedded/claustrum/roster.d.ts +208 -0
  87. package/dist/common-auth-embedded/claustrum/roster.js +536 -0
  88. package/dist/common-auth-embedded/commands/builtins.d.ts +71 -0
  89. package/dist/common-auth-embedded/commands/builtins.js +534 -0
  90. package/dist/common-auth-embedded/commands/index.d.ts +10 -0
  91. package/dist/common-auth-embedded/commands/index.js +5 -0
  92. package/dist/common-auth-embedded/commands/menu.d.ts +61 -0
  93. package/dist/common-auth-embedded/commands/menu.js +300 -0
  94. package/dist/common-auth-embedded/commands/model.d.ts +238 -0
  95. package/dist/common-auth-embedded/commands/model.js +16 -0
  96. package/dist/common-auth-embedded/commands/pi.d.ts +23 -0
  97. package/dist/common-auth-embedded/commands/pi.js +206 -0
  98. package/dist/common-auth-embedded/commands/seam.d.ts +72 -0
  99. package/dist/common-auth-embedded/commands/seam.js +301 -0
  100. package/dist/common-auth-embedded/fs/atomic-write.d.ts +20 -0
  101. package/dist/common-auth-embedded/fs/atomic-write.js +80 -0
  102. package/dist/common-auth-embedded/fs/index.d.ts +7 -0
  103. package/dist/common-auth-embedded/fs/index.js +6 -0
  104. package/dist/common-auth-embedded/fs/lock-constants.d.ts +14 -0
  105. package/dist/common-auth-embedded/fs/lock-constants.js +14 -0
  106. package/dist/common-auth-embedded/fs/refresh-file-lock.d.ts +33 -0
  107. package/dist/common-auth-embedded/fs/refresh-file-lock.js +501 -0
  108. package/dist/common-auth-embedded/fs/with-lock.d.ts +33 -0
  109. package/dist/common-auth-embedded/fs/with-lock.js +48 -0
  110. package/dist/common-auth-embedded/logger/capture-sink.d.ts +14 -0
  111. package/dist/common-auth-embedded/logger/capture-sink.js +13 -0
  112. package/dist/common-auth-embedded/logger/engine.d.ts +100 -0
  113. package/dist/common-auth-embedded/logger/engine.js +246 -0
  114. package/dist/common-auth-embedded/logger/index.d.ts +6 -0
  115. package/dist/common-auth-embedded/logger/index.js +3 -0
  116. package/dist/common-auth-embedded/logger/redact.d.ts +11 -0
  117. package/dist/common-auth-embedded/logger/redact.js +83 -0
  118. package/dist/common-auth-embedded/pi-slot/index.d.ts +3 -0
  119. package/dist/common-auth-embedded/pi-slot/index.js +2 -0
  120. package/dist/common-auth-embedded/pi-slot/lock.js +212 -0
  121. package/dist/common-auth-embedded/pi-slot/slot.d.ts +49 -0
  122. package/dist/common-auth-embedded/pi-slot/slot.js +383 -0
  123. package/dist/common-auth-embedded/quota/codec.d.ts +11 -0
  124. package/dist/common-auth-embedded/quota/codec.js +12 -0
  125. package/dist/common-auth-embedded/quota/format.d.ts +46 -0
  126. package/dist/common-auth-embedded/quota/format.js +138 -0
  127. package/dist/common-auth-embedded/quota/index.d.ts +10 -0
  128. package/dist/common-auth-embedded/quota/index.js +5 -0
  129. package/dist/common-auth-embedded/quota/map.d.ts +63 -0
  130. package/dist/common-auth-embedded/quota/map.js +105 -0
  131. package/dist/common-auth-embedded/quota/merge.d.ts +48 -0
  132. package/dist/common-auth-embedded/quota/merge.js +162 -0
  133. package/dist/common-auth-embedded/quota/projection.d.ts +64 -0
  134. package/dist/common-auth-embedded/quota/projection.js +134 -0
  135. package/dist/common-auth-embedded/routing/admission.d.ts +93 -0
  136. package/dist/common-auth-embedded/routing/admission.js +142 -0
  137. package/dist/common-auth-embedded/routing/index.d.ts +8 -0
  138. package/dist/common-auth-embedded/routing/index.js +4 -0
  139. package/dist/common-auth-embedded/routing/ordered.d.ts +47 -0
  140. package/dist/common-auth-embedded/routing/ordered.js +58 -0
  141. package/dist/common-auth-embedded/routing/pins.d.ts +22 -0
  142. package/dist/common-auth-embedded/routing/pins.js +34 -0
  143. package/dist/common-auth-embedded/routing/sticky.d.ts +158 -0
  144. package/dist/common-auth-embedded/routing/sticky.js +339 -0
  145. package/dist/common-auth-embedded/source-output.json +1090 -0
  146. package/dist/common-auth-embedded/store/attribution.d.ts +28 -0
  147. package/dist/common-auth-embedded/store/attribution.js +60 -0
  148. package/dist/common-auth-embedded/store/errors.d.ts +55 -0
  149. package/dist/common-auth-embedded/store/errors.js +38 -0
  150. package/dist/common-auth-embedded/store/hooks.d.ts +12 -0
  151. package/dist/common-auth-embedded/store/hooks.js +34 -0
  152. package/dist/common-auth-embedded/store/identity.d.ts +39 -0
  153. package/dist/common-auth-embedded/store/identity.js +79 -0
  154. package/dist/common-auth-embedded/store/index.d.ts +21 -0
  155. package/dist/common-auth-embedded/store/index.js +7 -0
  156. package/dist/common-auth-embedded/store/mutate.d.ts +189 -0
  157. package/dist/common-auth-embedded/store/mutate.js +500 -0
  158. package/dist/common-auth-embedded/store/pool.d.ts +196 -0
  159. package/dist/common-auth-embedded/store/pool.js +120 -0
  160. package/dist/common-auth-embedded/store/provider-state.d.ts +131 -0
  161. package/dist/common-auth-embedded/store/provider-state.js +226 -0
  162. package/dist/common-auth-embedded/store/publication.d.ts +47 -0
  163. package/dist/common-auth-embedded/store/publication.js +304 -0
  164. package/dist/common-auth-embedded/store/pull.d.ts +36 -0
  165. package/dist/common-auth-embedded/store/pull.js +143 -0
  166. package/dist/common-auth-embedded/store/refresh-lock.d.ts +63 -0
  167. package/dist/common-auth-embedded/store/refresh-lock.js +136 -0
  168. package/dist/common-auth-embedded/store/refresh.d.ts +72 -0
  169. package/dist/common-auth-embedded/store/refresh.js +225 -0
  170. package/dist/common-auth-embedded/store/reserved.js +13 -0
  171. package/dist/common-auth-embedded/store/rows.d.ts +313 -0
  172. package/dist/common-auth-embedded/store/rows.js +1258 -0
  173. package/dist/common-auth-embedded/store/runtime.d.ts +36 -0
  174. package/dist/common-auth-embedded/store/runtime.js +68 -0
  175. package/dist/common-auth-embedded/store/schema.d.ts +443 -0
  176. package/dist/common-auth-embedded/store/schema.js +754 -0
  177. package/dist/common-auth-embedded/store/settings.d.ts +63 -0
  178. package/dist/common-auth-embedded/store/settings.js +120 -0
  179. package/dist/common-auth-embedded/store/torn.d.ts +78 -0
  180. package/dist/common-auth-embedded/store/torn.js +294 -0
  181. package/dist/common-auth-embedded/util/any-signal.js +42 -0
  182. package/dist/common-auth-runtime.d.ts +73 -0
  183. package/dist/common-auth-runtime.d.ts.map +1 -0
  184. package/dist/common-auth-runtime.js +65 -0
  185. package/dist/common-auth-runtime.js.map +1 -0
  186. package/dist/credential-redaction.d.ts +13 -0
  187. package/dist/credential-redaction.d.ts.map +1 -0
  188. package/dist/credential-redaction.js +230 -0
  189. package/dist/credential-redaction.js.map +1 -0
  190. package/dist/fetch-timeout.d.ts +4 -2
  191. package/dist/fetch-timeout.d.ts.map +1 -1
  192. package/dist/fetch-timeout.js +121 -14
  193. package/dist/fetch-timeout.js.map +1 -1
  194. package/dist/fingerprint.d.ts +3 -3
  195. package/dist/fingerprint.d.ts.map +1 -1
  196. package/dist/fingerprint.js +4 -4
  197. package/dist/fingerprint.js.map +1 -1
  198. package/dist/index.d.ts +16 -1
  199. package/dist/index.d.ts.map +1 -1
  200. package/dist/index.js +15 -0
  201. package/dist/index.js.map +1 -1
  202. package/dist/model-registry.d.ts +16 -0
  203. package/dist/model-registry.d.ts.map +1 -1
  204. package/dist/model-registry.js +242 -30
  205. package/dist/model-registry.js.map +1 -1
  206. package/dist/quota-manager.d.ts.map +1 -1
  207. package/dist/quota-manager.js +35 -10
  208. package/dist/quota-manager.js.map +1 -1
  209. package/dist/quota-presentation.d.ts +10 -0
  210. package/dist/quota-presentation.d.ts.map +1 -0
  211. package/dist/quota-presentation.js +60 -0
  212. package/dist/quota-presentation.js.map +1 -0
  213. package/dist/quota-types.d.ts +2 -0
  214. package/dist/quota-types.d.ts.map +1 -1
  215. package/dist/rotation.d.ts +8 -0
  216. package/dist/rotation.d.ts.map +1 -1
  217. package/dist/rotation.js +24 -0
  218. package/dist/rotation.js.map +1 -1
  219. package/dist/transform/agy-generation.d.ts +3 -0
  220. package/dist/transform/agy-generation.d.ts.map +1 -0
  221. package/dist/transform/agy-generation.js +28 -0
  222. package/dist/transform/agy-generation.js.map +1 -0
  223. package/dist/transform/claude.d.ts +7 -3
  224. package/dist/transform/claude.d.ts.map +1 -1
  225. package/dist/transform/claude.js +8 -2
  226. package/dist/transform/claude.js.map +1 -1
  227. package/dist/transform/index.d.ts +1 -0
  228. package/dist/transform/index.d.ts.map +1 -1
  229. package/dist/transform/index.js +1 -0
  230. package/dist/transform/index.js.map +1 -1
  231. package/dist/transform/model-resolver.d.ts +2 -1
  232. package/dist/transform/model-resolver.d.ts.map +1 -1
  233. package/dist/transform/model-resolver.js +46 -5
  234. package/dist/transform/model-resolver.js.map +1 -1
  235. package/dist/transform/types.d.ts +1 -1
  236. package/dist/transform/types.d.ts.map +1 -1
  237. package/dist/vault-account-source.d.ts +183 -0
  238. package/dist/vault-account-source.d.ts.map +1 -0
  239. package/dist/vault-account-source.js +296 -0
  240. package/dist/vault-account-source.js.map +1 -0
  241. package/dist/vault-enrollment-authority.d.ts +16 -0
  242. package/dist/vault-enrollment-authority.d.ts.map +1 -0
  243. package/dist/vault-enrollment-authority.js +19 -0
  244. package/dist/vault-enrollment-authority.js.map +1 -0
  245. package/dist/vault-family.d.ts +11 -0
  246. package/dist/vault-family.d.ts.map +1 -0
  247. package/dist/vault-family.js +24 -0
  248. package/dist/vault-family.js.map +1 -0
  249. package/dist/vault-provider-state.d.ts +162 -0
  250. package/dist/vault-provider-state.d.ts.map +1 -0
  251. package/dist/vault-provider-state.js +422 -0
  252. package/dist/vault-provider-state.js.map +1 -0
  253. package/package.json +39 -2
@@ -0,0 +1,422 @@
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 { readFile } from 'node:fs/promises';
29
+ import { AccountCodecError, decodeProviderMetadata, decodeQuotaState, encodeProviderMetadata, encodeQuotaState, } from "./account-repository-codecs.js";
30
+ export const VAULT_PROVIDER_STATE_SCHEMA_VERSION = 1;
31
+ /**
32
+ * File lock (`./fs` `withLock`) a commit holds on the state file, so two
33
+ * writers cannot interleave their read and rename.
34
+ */
35
+ export const VAULT_PROVIDER_STATE_LOCK = Object.freeze({
36
+ name: 'antigravity-vault-state',
37
+ ttlMs: 10_000,
38
+ timeoutMs: 10_000,
39
+ renew: true,
40
+ });
41
+ /**
42
+ * A refused read or commit. Messages name the field path or step that was
43
+ * refused, never the stored value.
44
+ */
45
+ export class VaultProviderStateError extends Error {
46
+ kind;
47
+ constructor(kind, message) {
48
+ super(message);
49
+ this.name = 'VaultProviderStateError';
50
+ this.kind = kind;
51
+ }
52
+ }
53
+ // ---------------------------------------------------------------------------
54
+ // Validation
55
+ // ---------------------------------------------------------------------------
56
+ function isRecord(value) {
57
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
58
+ }
59
+ function isNonEmpty(value) {
60
+ return typeof value === 'string' && value.trim().length > 0;
61
+ }
62
+ /**
63
+ * Key names refused anywhere in the file because they hold credentials. Keys
64
+ * are compared lower-case with punctuation removed, so `access_token`,
65
+ * `accessToken` and `access-token` all match `accesstoken`.
66
+ */
67
+ const CREDENTIAL_KEYS = new Set([
68
+ 'access',
69
+ 'accesstoken',
70
+ 'refresh',
71
+ 'refreshtoken',
72
+ 'idtoken',
73
+ 'token',
74
+ 'bearer',
75
+ 'authorization',
76
+ 'apikey',
77
+ 'key',
78
+ 'secret',
79
+ 'clientsecret',
80
+ 'password',
81
+ 'enrollmenttoken',
82
+ 'cookie',
83
+ 'receipt',
84
+ ]);
85
+ /**
86
+ * String values refused anywhere in the file: those starting like a Google
87
+ * access token (`ya29.`), a Google refresh token (`1//`) or an Authorization
88
+ * header (`Bearer `).
89
+ */
90
+ const CREDENTIAL_VALUE = /^(?:ya29\.|1\/\/|bearer\s)/i;
91
+ const PROJECT_KEYS = new Set(['projectid', 'managedprojectid', 'project']);
92
+ function normalizedKey(key) {
93
+ return key.toLowerCase().replace(/[^a-z0-9]/g, '');
94
+ }
95
+ /**
96
+ * True for `metadata.fingerprint.sessionToken` and for the same field in each
97
+ * `metadata.fingerprintHistory` entry: the one token-named field the file may
98
+ * keep, because it is local tracking metadata.
99
+ */
100
+ function isFingerprintSessionToken(path) {
101
+ const n = path.length;
102
+ if (path[n - 1] !== 'sessionToken' || path[n - 2] !== 'fingerprint')
103
+ return false;
104
+ if (n === 3 && path[0] === 'metadata')
105
+ return true;
106
+ return n === 5 && path[0] === 'metadata' && path[1] === 'fingerprintHistory';
107
+ }
108
+ function scanForSecrets(value, path) {
109
+ if (typeof value === 'string') {
110
+ if (CREDENTIAL_VALUE.test(value.trim()) && !isFingerprintSessionToken(path))
111
+ throw new VaultProviderStateError('credential-material', `${path.join('.')} holds credential material`);
112
+ return;
113
+ }
114
+ if (Array.isArray(value)) {
115
+ for (const [index, item] of value.entries())
116
+ scanForSecrets(item, [...path, `${index}`]);
117
+ return;
118
+ }
119
+ if (!isRecord(value))
120
+ return;
121
+ for (const [key, item] of Object.entries(value)) {
122
+ const next = [...path, key];
123
+ const name = normalizedKey(key);
124
+ if (CREDENTIAL_KEYS.has(name) && !isFingerprintSessionToken(next))
125
+ throw new VaultProviderStateError('credential-material', `${next.join('.')} is a credential field`);
126
+ if (name === 'sessiontoken' && !isFingerprintSessionToken(next))
127
+ throw new VaultProviderStateError('credential-material', `${next.join('.')} is a credential field`);
128
+ if (PROJECT_KEYS.has(name))
129
+ throw new VaultProviderStateError('project-field', `${next.join('.')} would persist an Antigravity project`);
130
+ scanForSecrets(item, next);
131
+ }
132
+ }
133
+ function decodeProvenance(raw, path) {
134
+ if (!isRecord(raw) ||
135
+ Object.keys(raw).some((key) => !['routeId', 'credentialId', 'recordVersion'].includes(key)) ||
136
+ !isNonEmpty(raw.routeId) ||
137
+ !isNonEmpty(raw.credentialId) ||
138
+ typeof raw.recordVersion !== 'number' ||
139
+ !Number.isSafeInteger(raw.recordVersion) ||
140
+ raw.recordVersion < 0)
141
+ throw new VaultProviderStateError('malformed', `${path} is not a valid provenance`);
142
+ return Object.freeze({
143
+ routeId: raw.routeId,
144
+ credentialId: raw.credentialId,
145
+ recordVersion: raw.recordVersion,
146
+ });
147
+ }
148
+ function codecRefusal(error, path) {
149
+ if (error instanceof AccountCodecError)
150
+ throw new VaultProviderStateError('malformed', `${path}: ${error.problem} at ${error.path}`);
151
+ throw error;
152
+ }
153
+ function decodeExtensions(raw, path) {
154
+ if (raw === undefined)
155
+ return undefined;
156
+ if (!isRecord(raw))
157
+ throw new VaultProviderStateError('malformed', `${path} must be an object`);
158
+ return JSON.parse(JSON.stringify(raw));
159
+ }
160
+ /**
161
+ * Decodes the parts of an account entry an update may set: `metadata`,
162
+ * `quota` and `extensions` (never `observed`). `stored` is the JSON form read
163
+ * from the file; `typed` is the in-memory form an update returns, which is
164
+ * encoded first so both pass the same codec checks.
165
+ */
166
+ function decodeValue(raw, path, form) {
167
+ if (!isRecord(raw))
168
+ throw new VaultProviderStateError('malformed', `${path} must be an object`);
169
+ for (const key of Object.keys(raw))
170
+ if (!['metadata', 'quota', 'extensions'].includes(key))
171
+ throw new VaultProviderStateError('malformed', `${path} has an unknown field`);
172
+ scanForSecrets(raw, []);
173
+ const value = {};
174
+ if (raw.metadata !== undefined) {
175
+ try {
176
+ value.metadata = decodeProviderMetadata(form === 'typed'
177
+ ? encodeProviderMetadata(raw.metadata)
178
+ : raw.metadata);
179
+ }
180
+ catch (error) {
181
+ codecRefusal(error, `${path}.metadata`);
182
+ }
183
+ }
184
+ if (raw.quota !== undefined) {
185
+ try {
186
+ value.quota = decodeQuotaState(form === 'typed'
187
+ ? encodeQuotaState(raw.quota)
188
+ : raw.quota);
189
+ }
190
+ catch (error) {
191
+ codecRefusal(error, `${path}.quota`);
192
+ }
193
+ }
194
+ const extensions = decodeExtensions(raw.extensions, `${path}.extensions`);
195
+ if (extensions)
196
+ value.extensions = extensions;
197
+ return value;
198
+ }
199
+ function decodeAccount(raw, path) {
200
+ if (!isRecord(raw))
201
+ throw new VaultProviderStateError('malformed', `${path} must be an object`);
202
+ const { observed, ...rest } = raw;
203
+ return Object.freeze({
204
+ observed: decodeProvenance(observed, `${path}.observed`),
205
+ ...decodeValue(rest, path, 'stored'),
206
+ });
207
+ }
208
+ /**
209
+ * Reads a sidecar value. A newer schema, an unknown field, a credential or a
210
+ * project anywhere in it is refused; nothing is silently dropped.
211
+ */
212
+ export function decodeVaultProviderState(raw) {
213
+ if (!isRecord(raw) || typeof raw.schemaVersion !== 'number')
214
+ throw new VaultProviderStateError('malformed', 'state file is malformed');
215
+ if (raw.schemaVersion > VAULT_PROVIDER_STATE_SCHEMA_VERSION)
216
+ throw new VaultProviderStateError('newer-schema', 'state file was written by a newer version');
217
+ if (raw.schemaVersion !== VAULT_PROVIDER_STATE_SCHEMA_VERSION)
218
+ throw new VaultProviderStateError('malformed', 'state file version is invalid');
219
+ for (const key of Object.keys(raw))
220
+ if (!['schemaVersion', 'accounts', 'extensions'].includes(key))
221
+ throw new VaultProviderStateError('malformed', 'state file has an unknown field');
222
+ if (!isRecord(raw.accounts))
223
+ throw new VaultProviderStateError('malformed', 'accounts must be an object');
224
+ const accounts = {};
225
+ for (const [identity, entry] of Object.entries(raw.accounts)) {
226
+ if (!isNonEmpty(identity))
227
+ throw new VaultProviderStateError('malformed', 'blank account identity');
228
+ accounts[identity] = decodeAccount(entry, 'accounts[]');
229
+ }
230
+ const extensions = decodeExtensions(raw.extensions, 'extensions');
231
+ return Object.freeze({
232
+ schemaVersion: VAULT_PROVIDER_STATE_SCHEMA_VERSION,
233
+ accounts: Object.freeze(accounts),
234
+ ...(extensions && { extensions }),
235
+ });
236
+ }
237
+ function encodeAccount(state) {
238
+ const out = {
239
+ observed: {
240
+ routeId: state.observed.routeId,
241
+ credentialId: state.observed.credentialId,
242
+ recordVersion: state.observed.recordVersion,
243
+ },
244
+ };
245
+ if (state.metadata)
246
+ out.metadata = encodeProviderMetadata(state.metadata);
247
+ if (state.quota)
248
+ out.quota = encodeQuotaState(state.quota);
249
+ if (state.extensions)
250
+ out.extensions = state.extensions;
251
+ return out;
252
+ }
253
+ export function encodeVaultProviderState(file) {
254
+ const accounts = {};
255
+ for (const [identity, state] of Object.entries(file.accounts))
256
+ accounts[identity] = encodeAccount(state);
257
+ const out = {
258
+ schemaVersion: VAULT_PROVIDER_STATE_SCHEMA_VERSION,
259
+ accounts,
260
+ };
261
+ if (file.extensions)
262
+ out.extensions = file.extensions;
263
+ // Decoding what is about to be written enforces the same refusals on writes.
264
+ decodeVaultProviderState(out);
265
+ return out;
266
+ }
267
+ const EMPTY_FILE = Object.freeze({
268
+ schemaVersion: VAULT_PROVIDER_STATE_SCHEMA_VERSION,
269
+ accounts: Object.freeze({}),
270
+ });
271
+ /** Reads the sidecar; a missing file is an empty one, anything unreadable is refused. */
272
+ export async function readVaultProviderState(statePath) {
273
+ let text;
274
+ try {
275
+ text = await readFile(statePath, 'utf8');
276
+ }
277
+ catch (error) {
278
+ if (isRecord(error) && error.code === 'ENOENT')
279
+ return EMPTY_FILE;
280
+ throw error;
281
+ }
282
+ let raw;
283
+ try {
284
+ raw = JSON.parse(text);
285
+ }
286
+ catch {
287
+ throw new VaultProviderStateError('malformed', 'state file is not JSON');
288
+ }
289
+ return decodeVaultProviderState(raw);
290
+ }
291
+ /** The stored state of one asserted account, if any. */
292
+ export function vaultAccountState(file, accountIdentity) {
293
+ return Object.hasOwn(file.accounts, accountIdentity)
294
+ ? file.accounts[accountIdentity]
295
+ : undefined;
296
+ }
297
+ // ---------------------------------------------------------------------------
298
+ // Commit
299
+ // ---------------------------------------------------------------------------
300
+ const ATTRIBUTION_FIELDS = [
301
+ 'accountIdentity',
302
+ 'credentialId',
303
+ 'recordVersion',
304
+ 'routeId',
305
+ ];
306
+ /**
307
+ * Copies an attribution after checking it is a plain object with exactly the
308
+ * four own data fields, non-blank strings and a non-negative integer version
309
+ * (a boolean, string or fraction is refused). Later checks use only the copy,
310
+ * so a getter or a later mutation cannot move the fence.
311
+ */
312
+ function pinAttribution(raw) {
313
+ const invalid = () => new VaultProviderStateError('invalid-attribution', 'state commit needs exactly a route, credential, asserted account and record version');
314
+ if (!isRecord(raw) || Object.getPrototypeOf(raw) !== Object.prototype)
315
+ throw invalid();
316
+ const keys = Reflect.ownKeys(raw);
317
+ if (keys.length !== ATTRIBUTION_FIELDS.length ||
318
+ !ATTRIBUTION_FIELDS.every((key) => {
319
+ const field = Object.getOwnPropertyDescriptor(raw, key);
320
+ return field !== undefined && 'value' in field && field.enumerable;
321
+ }))
322
+ throw invalid();
323
+ const { routeId, credentialId, accountIdentity, recordVersion } = raw;
324
+ if (!isNonEmpty(routeId) ||
325
+ !isNonEmpty(credentialId) ||
326
+ !isNonEmpty(accountIdentity) ||
327
+ typeof recordVersion !== 'number' ||
328
+ !Number.isSafeInteger(recordVersion) ||
329
+ recordVersion < 0)
330
+ throw invalid();
331
+ return Object.freeze({
332
+ routeId,
333
+ credentialId,
334
+ accountIdentity,
335
+ recordVersion,
336
+ });
337
+ }
338
+ /**
339
+ * The roster must still route the attributed credential to the attributed
340
+ * account: the row exists, is enabled, active and not declined, and is
341
+ * neither stale nor unclaimed. A removed account is never brought back by a
342
+ * state write.
343
+ */
344
+ function assertRosterBinding(roster, attribution, claustrum) {
345
+ const row = roster?.rows.find((entry) => entry.routeId === attribution.routeId);
346
+ if (!roster ||
347
+ !row?.enabled ||
348
+ row.state !== 'active' ||
349
+ row.stale === true ||
350
+ row.unclaimed === true ||
351
+ row.credentialId !== attribution.credentialId ||
352
+ row.accountIdentity !== attribution.accountIdentity ||
353
+ claustrum.isDeclined(roster.declined, attribution.credentialId, attribution.accountIdentity))
354
+ throw new VaultProviderStateError('binding-stale', 'the vault route no longer serves the attributed credential and account');
355
+ }
356
+ export async function commitVaultProviderState(input) {
357
+ const { claustrum, fs, statePath } = input;
358
+ const attribution = pinAttribution(input.attribution);
359
+ const identity = attribution.accountIdentity;
360
+ return claustrum.mutateVaultRoster(input.rosterPath, async (roster, rosterLock) => {
361
+ assertRosterBinding(roster, attribution, claustrum);
362
+ const result = await fs.withLock(statePath, VAULT_PROVIDER_STATE_LOCK, async (stateLock) => {
363
+ await input.verify(attribution);
364
+ const file = await readVaultProviderState(statePath);
365
+ const current = vaultAccountState(file, identity);
366
+ const requested = input.update(current);
367
+ if (isRecord(requested) &&
368
+ typeof requested.then === 'function')
369
+ throw new VaultProviderStateError('invalid-update', 'a state update must be synchronous');
370
+ if (requested === undefined)
371
+ return current
372
+ ? { status: 'unchanged', state: current }
373
+ : { status: 'unchanged' };
374
+ const accounts = {
375
+ ...file.accounts,
376
+ };
377
+ let next;
378
+ if (requested === null) {
379
+ if (!current)
380
+ return { status: 'unchanged' };
381
+ delete accounts[identity];
382
+ }
383
+ else {
384
+ next = Object.freeze({
385
+ observed: Object.freeze({
386
+ routeId: attribution.routeId,
387
+ credentialId: attribution.credentialId,
388
+ recordVersion: attribution.recordVersion,
389
+ }),
390
+ ...decodeValue(requested, 'update', 'typed'),
391
+ });
392
+ accounts[identity] = next;
393
+ }
394
+ const encoded = encodeVaultProviderState({ ...file, accounts });
395
+ try {
396
+ await fs.writeJsonAtomic(statePath, encoded, {
397
+ beforeRename: async () => {
398
+ await rosterLock.assertOwned();
399
+ await stateLock.assertOwned();
400
+ },
401
+ });
402
+ }
403
+ catch (error) {
404
+ let reloaded;
405
+ try {
406
+ reloaded = vaultAccountState(await readVaultProviderState(statePath), identity);
407
+ }
408
+ catch {
409
+ reloaded = undefined;
410
+ }
411
+ return reloaded
412
+ ? { status: 'uncertain', error, state: reloaded }
413
+ : { status: 'uncertain', error };
414
+ }
415
+ return next
416
+ ? { status: 'written', state: next }
417
+ : { status: 'cleared' };
418
+ });
419
+ return { result };
420
+ });
421
+ }
422
+ //# sourceMappingURL=vault-provider-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault-provider-state.js","sourceRoot":"","sources":["../src/vault-provider-state.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cortexkit/antigravity-auth-core",
3
- "version": "2.2.1",
3
+ "version": "3.0.1",
4
4
  "description": "Harness-agnostic core for Google Antigravity OAuth: transport, fingerprint, request transforms, accounts, quota",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -17,6 +17,10 @@
17
17
  "import": "./dist/index.js",
18
18
  "types": "./dist/index.d.ts"
19
19
  },
20
+ "./account-identity": {
21
+ "types": "./dist/account-identity.d.ts",
22
+ "import": "./dist/account-identity.js"
23
+ },
20
24
  "./file-lock": {
21
25
  "types": "./dist/file-lock.d.ts",
22
26
  "import": "./dist/file-lock.js"
@@ -28,6 +32,38 @@
28
32
  "./fetch-timeout": {
29
33
  "types": "./dist/fetch-timeout.d.ts",
30
34
  "import": "./dist/fetch-timeout.js"
35
+ },
36
+ "./common-auth/store": {
37
+ "types": "./dist/common-auth-embedded/store/index.d.ts",
38
+ "import": "./dist/common-auth-embedded/store/index.js"
39
+ },
40
+ "./common-auth/fs": {
41
+ "types": "./dist/common-auth-embedded/fs/index.d.ts",
42
+ "import": "./dist/common-auth-embedded/fs/index.js"
43
+ },
44
+ "./common-auth/routing": {
45
+ "types": "./dist/common-auth-embedded/routing/index.d.ts",
46
+ "import": "./dist/common-auth-embedded/routing/index.js"
47
+ },
48
+ "./common-auth/quota": {
49
+ "types": "./dist/common-auth-embedded/quota/index.d.ts",
50
+ "import": "./dist/common-auth-embedded/quota/index.js"
51
+ },
52
+ "./common-auth/commands": {
53
+ "types": "./dist/common-auth-embedded/commands/index.d.ts",
54
+ "import": "./dist/common-auth-embedded/commands/index.js"
55
+ },
56
+ "./common-auth/auth-menu": {
57
+ "types": "./dist/common-auth-embedded/auth-menu/index.d.ts",
58
+ "import": "./dist/common-auth-embedded/auth-menu/index.js"
59
+ },
60
+ "./common-auth/claustrum": {
61
+ "types": "./dist/common-auth-embedded/claustrum/index.d.ts",
62
+ "import": "./dist/common-auth-embedded/claustrum/index.js"
63
+ },
64
+ "./common-auth/logger": {
65
+ "types": "./dist/common-auth-embedded/logger/index.d.ts",
66
+ "import": "./dist/common-auth-embedded/logger/index.js"
31
67
  }
32
68
  },
33
69
  "files": [
@@ -36,12 +72,13 @@
36
72
  "LICENSE"
37
73
  ],
38
74
  "scripts": {
39
- "build": "rm -rf dist && tsc -p tsconfig.build.json",
75
+ "build": "rm -rf dist && tsc -p tsconfig.build.json && bun scripts/copy-common-auth-embedded.mjs",
40
76
  "typecheck": "tsc --noEmit",
41
77
  "test": "bun test --isolate ./src",
42
78
  "prepublishOnly": "bun run build"
43
79
  },
44
80
  "dependencies": {
81
+ "@cortexkit/claustrum-client": "0.6.2",
45
82
  "xdg-basedir": "^5.1.0",
46
83
  "zod": "^4.0.0"
47
84
  },