@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,609 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure codecs for the Antigravity values the account store keeps for each
|
|
3
|
+
* row: the provider metadata beside its credential in the state file, the
|
|
4
|
+
* latest quota reading in its config entry, and the account selection kept in
|
|
5
|
+
* plugin settings.
|
|
6
|
+
*
|
|
7
|
+
* The store never interprets these values itself; it asks the codec whether a
|
|
8
|
+
* value is valid before every write and on every load. A value the codec
|
|
9
|
+
* refuses is hidden from readers but kept on disk, so these codecs refuse
|
|
10
|
+
* anything malformed instead of filtering it: dropping a bad field here
|
|
11
|
+
* would rewrite the user's data with the field silently gone.
|
|
12
|
+
*
|
|
13
|
+
* Decoding turns the stored JSON into the typed shapes of
|
|
14
|
+
* `account-repository-types.ts`, moving unrecognised keys into `extensions`;
|
|
15
|
+
* encoding puts them back. Both directions validate fully and return fresh
|
|
16
|
+
* copies, keep absent and `null` apart, and keep every dynamic map key and
|
|
17
|
+
* array order. Migration from older file versions is not done here.
|
|
18
|
+
*/
|
|
19
|
+
import { CREDENTIAL_BOUND_METADATA_FIELDS, PROVIDER_STATE_SCHEMA_VERSION, QUOTA_STATE_SCHEMA_VERSION, ROUTING_SETTINGS_SCHEMA_VERSION, } from "./account-repository-types.js";
|
|
20
|
+
/**
|
|
21
|
+
* Thrown for a value a codec refuses. The message names where and why, never
|
|
22
|
+
* the value itself: the values can hold emails, labels and other personal
|
|
23
|
+
* data.
|
|
24
|
+
*/
|
|
25
|
+
export class AccountCodecError extends Error {
|
|
26
|
+
path;
|
|
27
|
+
problem;
|
|
28
|
+
constructor(path, problem) {
|
|
29
|
+
super(`${path} ${problem}`);
|
|
30
|
+
this.name = 'AccountCodecError';
|
|
31
|
+
this.path = path;
|
|
32
|
+
this.problem = problem;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function fail(path, problem) {
|
|
36
|
+
throw new AccountCodecError(path, problem);
|
|
37
|
+
}
|
|
38
|
+
/** Deep enough for any real value; a guard against runaway nesting. */
|
|
39
|
+
const MAX_JSON_DEPTH = 64;
|
|
40
|
+
const IDENTIFIER = /^[A-Za-z_$][A-Za-z0-9_$-]*$/;
|
|
41
|
+
function childPath(path, key) {
|
|
42
|
+
if (typeof key === 'number')
|
|
43
|
+
return `${path}[${key}]`;
|
|
44
|
+
return IDENTIFIER.test(key)
|
|
45
|
+
? `${path}.${key}`
|
|
46
|
+
: `${path}[${JSON.stringify(key)}]`;
|
|
47
|
+
}
|
|
48
|
+
function isPlainObject(value) {
|
|
49
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value)) {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
const proto = Object.getPrototypeOf(value);
|
|
53
|
+
return proto === Object.prototype || proto === null;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* The own entries of a plain JSON object, refusing anything a JSON round trip
|
|
57
|
+
* would lose or that is unsafe to copy by assignment: symbol keys, hidden or
|
|
58
|
+
* accessor properties, and a `__proto__` key (which `JSON.parse` creates as
|
|
59
|
+
* an ordinary key but assignment would turn into a prototype change).
|
|
60
|
+
*/
|
|
61
|
+
function objectEntries(value, path) {
|
|
62
|
+
if (!isPlainObject(value))
|
|
63
|
+
fail(path, 'must be a JSON object');
|
|
64
|
+
if (Object.getOwnPropertySymbols(value).length > 0) {
|
|
65
|
+
fail(path, 'has symbol keys, which JSON cannot hold');
|
|
66
|
+
}
|
|
67
|
+
const names = Object.getOwnPropertyNames(value);
|
|
68
|
+
const entries = [];
|
|
69
|
+
for (const key of names) {
|
|
70
|
+
const at = childPath(path, key);
|
|
71
|
+
if (key === '__proto__')
|
|
72
|
+
fail(at, 'is a prototype key');
|
|
73
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
74
|
+
if (!descriptor?.enumerable || !('value' in descriptor)) {
|
|
75
|
+
fail(at, 'is not a plain enumerable data property');
|
|
76
|
+
}
|
|
77
|
+
entries.push([key, descriptor.value]);
|
|
78
|
+
}
|
|
79
|
+
return entries;
|
|
80
|
+
}
|
|
81
|
+
function arrayItems(value, path) {
|
|
82
|
+
if (!Array.isArray(value) ||
|
|
83
|
+
Object.getPrototypeOf(value) !== Array.prototype) {
|
|
84
|
+
fail(path, 'must be a JSON array');
|
|
85
|
+
}
|
|
86
|
+
const names = Object.getOwnPropertyNames(value);
|
|
87
|
+
// An array's own names are its indices plus `length`; anything else is a
|
|
88
|
+
// property JSON would drop.
|
|
89
|
+
if (names.length !== value.length + 1) {
|
|
90
|
+
fail(path, 'has holes or non-index properties, which JSON cannot hold');
|
|
91
|
+
}
|
|
92
|
+
return Array.from(value);
|
|
93
|
+
}
|
|
94
|
+
function jsonCopy(value, path, depth, ancestors) {
|
|
95
|
+
if (value === null ||
|
|
96
|
+
typeof value === 'string' ||
|
|
97
|
+
typeof value === 'boolean') {
|
|
98
|
+
return value;
|
|
99
|
+
}
|
|
100
|
+
if (typeof value === 'number') {
|
|
101
|
+
if (!Number.isFinite(value))
|
|
102
|
+
fail(path, 'must be a finite number');
|
|
103
|
+
return value;
|
|
104
|
+
}
|
|
105
|
+
if (typeof value !== 'object')
|
|
106
|
+
fail(path, 'is not a JSON value');
|
|
107
|
+
if (depth >= MAX_JSON_DEPTH)
|
|
108
|
+
fail(path, 'is nested too deeply');
|
|
109
|
+
if (ancestors.has(value))
|
|
110
|
+
fail(path, 'is circular');
|
|
111
|
+
ancestors.add(value);
|
|
112
|
+
try {
|
|
113
|
+
if (Array.isArray(value)) {
|
|
114
|
+
return arrayItems(value, path).map((item, index) => jsonCopy(item, childPath(path, index), depth + 1, ancestors));
|
|
115
|
+
}
|
|
116
|
+
const out = {};
|
|
117
|
+
for (const [key, item] of objectEntries(value, path)) {
|
|
118
|
+
out[key] = jsonCopy(item, childPath(path, key), depth + 1, ancestors);
|
|
119
|
+
}
|
|
120
|
+
return out;
|
|
121
|
+
}
|
|
122
|
+
finally {
|
|
123
|
+
ancestors.delete(value);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/** Any JSON value, copied; used for data this build does not recognise. */
|
|
127
|
+
const jsonValue = {
|
|
128
|
+
decode: (raw, path) => jsonCopy(raw, path, 0, new Set()),
|
|
129
|
+
encode: (value, path) => jsonCopy(value, path, 0, new Set()),
|
|
130
|
+
};
|
|
131
|
+
/** A codec whose stored and typed forms are the same primitive. */
|
|
132
|
+
function primitive(check, expected) {
|
|
133
|
+
const read = (value, path) => check(value) ? value : fail(path, `must be ${expected}`);
|
|
134
|
+
return { decode: read, encode: read };
|
|
135
|
+
}
|
|
136
|
+
const string = primitive((value) => typeof value === 'string', 'a string');
|
|
137
|
+
const nonEmptyString = primitive((value) => typeof value === 'string' && value.length > 0, 'a non-empty string');
|
|
138
|
+
const finiteNumber = primitive((value) => typeof value === 'number' && Number.isFinite(value), 'a finite number');
|
|
139
|
+
const count = primitive((value) => typeof value === 'number' && Number.isSafeInteger(value) && value >= 0, 'a non-negative integer');
|
|
140
|
+
const credentialEpoch = primitive((value) => typeof value === 'number' && Number.isSafeInteger(value) && value > 0, 'a positive safe integer');
|
|
141
|
+
const boolean = primitive((value) => typeof value === 'boolean', 'a boolean');
|
|
142
|
+
/**
|
|
143
|
+
* A row id as the store accepts it: stored exactly as given, so an id that
|
|
144
|
+
* older readers would trim or that names an object prototype member is
|
|
145
|
+
* refused rather than rewritten.
|
|
146
|
+
*/
|
|
147
|
+
const rowId = primitive((value) => typeof value === 'string' &&
|
|
148
|
+
value.length > 0 &&
|
|
149
|
+
value.trim() === value &&
|
|
150
|
+
!(value in Object.prototype), 'a non-empty id without surrounding whitespace or prototype names');
|
|
151
|
+
function enumOf(values) {
|
|
152
|
+
return primitive((value) => typeof value === 'string' && values.includes(value), `one of ${values.map((value) => JSON.stringify(value)).join(', ')}`);
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* The schema version this build writes. A higher one comes from a newer
|
|
156
|
+
* build whose meaning this one cannot know, so it is refused, not read as
|
|
157
|
+
* the current one.
|
|
158
|
+
*/
|
|
159
|
+
function schemaVersion(version) {
|
|
160
|
+
const read = (value, path) => {
|
|
161
|
+
if (value === version)
|
|
162
|
+
return version;
|
|
163
|
+
if (typeof value === 'number' &&
|
|
164
|
+
Number.isSafeInteger(value) &&
|
|
165
|
+
value > version) {
|
|
166
|
+
fail(path, `is a newer schema version than ${version}`);
|
|
167
|
+
}
|
|
168
|
+
return fail(path, `must be ${version}`);
|
|
169
|
+
};
|
|
170
|
+
return { decode: read, encode: read };
|
|
171
|
+
}
|
|
172
|
+
function nullable(codec) {
|
|
173
|
+
return {
|
|
174
|
+
decode: (raw, path) => (raw === null ? null : codec.decode(raw, path)),
|
|
175
|
+
encode: (value, path) => value === null ? null : codec.encode(value, path),
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
function arrayOf(codec) {
|
|
179
|
+
return {
|
|
180
|
+
decode: (raw, path) => arrayItems(raw, path).map((item, index) => codec.decode(item, childPath(path, index))),
|
|
181
|
+
encode: (value, path) => arrayItems(value, path).map((item, index) => codec.encode(item, childPath(path, index))),
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
/** A map with caller-chosen keys; every key is data and is kept. */
|
|
185
|
+
function mapOf(codec) {
|
|
186
|
+
return {
|
|
187
|
+
decode(raw, path) {
|
|
188
|
+
const out = {};
|
|
189
|
+
for (const [key, item] of objectEntries(raw, path)) {
|
|
190
|
+
out[key] = codec.decode(item, childPath(path, key));
|
|
191
|
+
}
|
|
192
|
+
return out;
|
|
193
|
+
},
|
|
194
|
+
encode(value, path) {
|
|
195
|
+
const out = {};
|
|
196
|
+
for (const [key, item] of objectEntries(value, path)) {
|
|
197
|
+
out[key] = codec.encode(item, childPath(path, key));
|
|
198
|
+
}
|
|
199
|
+
return out;
|
|
200
|
+
},
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
const required = (codec) => ({
|
|
204
|
+
codec,
|
|
205
|
+
required: true,
|
|
206
|
+
});
|
|
207
|
+
const optional = (codec) => ({
|
|
208
|
+
codec,
|
|
209
|
+
required: false,
|
|
210
|
+
});
|
|
211
|
+
/** Key of the typed slot holding keys the shape does not know. */
|
|
212
|
+
const EXTENSIONS = 'extensions';
|
|
213
|
+
function buildRecord(shape, open, options) {
|
|
214
|
+
const forbidden = options.forbidden ?? {};
|
|
215
|
+
const knownField = (key) => Object.hasOwn(shape, key) ? shape[key] : undefined;
|
|
216
|
+
const refusal = (key) => Object.hasOwn(forbidden, key) ? forbidden[key] : undefined;
|
|
217
|
+
const requireFields = (present, path) => {
|
|
218
|
+
for (const [key, field] of Object.entries(shape)) {
|
|
219
|
+
if (field.required && !Object.hasOwn(present, key)) {
|
|
220
|
+
fail(childPath(path, key), 'is required');
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
};
|
|
224
|
+
return {
|
|
225
|
+
decode(raw, path) {
|
|
226
|
+
const out = {};
|
|
227
|
+
let extensions;
|
|
228
|
+
for (const [key, value] of objectEntries(raw, path)) {
|
|
229
|
+
const at = childPath(path, key);
|
|
230
|
+
const field = knownField(key);
|
|
231
|
+
if (field) {
|
|
232
|
+
out[key] = field.codec.decode(value, at);
|
|
233
|
+
continue;
|
|
234
|
+
}
|
|
235
|
+
const reason = refusal(key);
|
|
236
|
+
if (reason !== undefined)
|
|
237
|
+
fail(at, reason);
|
|
238
|
+
if (!open)
|
|
239
|
+
fail(at, 'is not a known field');
|
|
240
|
+
extensions ??= {};
|
|
241
|
+
extensions[key] = jsonValue.decode(value, at);
|
|
242
|
+
}
|
|
243
|
+
requireFields(out, path);
|
|
244
|
+
if (extensions)
|
|
245
|
+
out[EXTENSIONS] = extensions;
|
|
246
|
+
return out;
|
|
247
|
+
},
|
|
248
|
+
encode(value, path) {
|
|
249
|
+
const out = {};
|
|
250
|
+
let extensions;
|
|
251
|
+
for (const [key, item] of objectEntries(value, path)) {
|
|
252
|
+
const at = childPath(path, key);
|
|
253
|
+
if (open && key === EXTENSIONS) {
|
|
254
|
+
extensions = item;
|
|
255
|
+
continue;
|
|
256
|
+
}
|
|
257
|
+
const field = knownField(key);
|
|
258
|
+
if (!field) {
|
|
259
|
+
fail(at, open
|
|
260
|
+
? 'is not a known field; unknown data belongs in extensions'
|
|
261
|
+
: 'is not a known field');
|
|
262
|
+
}
|
|
263
|
+
if (item === undefined) {
|
|
264
|
+
fail(at, 'is undefined; leave the key out to keep it absent');
|
|
265
|
+
}
|
|
266
|
+
out[key] = field.codec.encode(item, at);
|
|
267
|
+
}
|
|
268
|
+
requireFields(out, path);
|
|
269
|
+
if (extensions !== undefined) {
|
|
270
|
+
const extensionsPath = childPath(path, EXTENSIONS);
|
|
271
|
+
for (const [key, item] of objectEntries(extensions, extensionsPath)) {
|
|
272
|
+
const at = childPath(extensionsPath, key);
|
|
273
|
+
if (knownField(key))
|
|
274
|
+
fail(at, 'collides with a known field');
|
|
275
|
+
const reason = refusal(key);
|
|
276
|
+
if (reason !== undefined)
|
|
277
|
+
fail(at, reason);
|
|
278
|
+
out[key] = jsonValue.encode(item, at);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
return out;
|
|
282
|
+
},
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
/** An object whose unknown keys are kept in `extensions`. */
|
|
286
|
+
function openRecord(shape, options = {}) {
|
|
287
|
+
// The record builder checks every field against `shape`, which is exactly
|
|
288
|
+
// what `Open<S>` describes; TypeScript cannot follow that through the
|
|
289
|
+
// generic loop, hence the one narrowing here.
|
|
290
|
+
return buildRecord(shape, true, options);
|
|
291
|
+
}
|
|
292
|
+
/** An object that refuses keys it does not know. */
|
|
293
|
+
function closedRecord(shape) {
|
|
294
|
+
return buildRecord(shape, false, {});
|
|
295
|
+
}
|
|
296
|
+
// ---------------------------------------------------------------------------
|
|
297
|
+
// Field rules shared by the shapes below
|
|
298
|
+
// ---------------------------------------------------------------------------
|
|
299
|
+
const CREDENTIAL_REFUSAL = "is a credential field; credentials live only in the store's own credential entry";
|
|
300
|
+
/** Keys that would put a credential into the metadata or quota values. */
|
|
301
|
+
const CREDENTIAL_KEYS = {
|
|
302
|
+
refreshToken: CREDENTIAL_REFUSAL,
|
|
303
|
+
accessToken: CREDENTIAL_REFUSAL,
|
|
304
|
+
access: CREDENTIAL_REFUSAL,
|
|
305
|
+
refresh: CREDENTIAL_REFUSAL,
|
|
306
|
+
expires: CREDENTIAL_REFUSAL,
|
|
307
|
+
apiKey: CREDENTIAL_REFUSAL,
|
|
308
|
+
};
|
|
309
|
+
const POOL_FIELD_REFUSAL = "belongs to the store's roster or to the routing settings, not provider metadata";
|
|
310
|
+
const QUOTA_FIELD_REFUSAL = 'belongs to the quota value, not provider metadata';
|
|
311
|
+
const LEGACY_FIELD_REFUSAL = 'is a pre-v4 field; the migration normalises it before import';
|
|
312
|
+
const METADATA_FIELD_REFUSAL = 'belongs to provider metadata, not quota';
|
|
313
|
+
// ---------------------------------------------------------------------------
|
|
314
|
+
// Provider metadata
|
|
315
|
+
// ---------------------------------------------------------------------------
|
|
316
|
+
const clientMetadataCodec = openRecord({
|
|
317
|
+
ideType: required(string),
|
|
318
|
+
platform: required(string),
|
|
319
|
+
pluginType: required(string),
|
|
320
|
+
});
|
|
321
|
+
const fingerprintCodec = openRecord({
|
|
322
|
+
deviceId: required(string),
|
|
323
|
+
sessionToken: required(string),
|
|
324
|
+
userAgent: required(string),
|
|
325
|
+
apiClient: required(string),
|
|
326
|
+
clientMetadata: required(clientMetadataCodec),
|
|
327
|
+
createdAt: required(finiteNumber),
|
|
328
|
+
});
|
|
329
|
+
const fingerprintVersionCodec = openRecord({
|
|
330
|
+
fingerprint: required(fingerprintCodec),
|
|
331
|
+
timestamp: required(finiteNumber),
|
|
332
|
+
reason: required(enumOf(['initial', 'regenerated', 'restored'])),
|
|
333
|
+
});
|
|
334
|
+
const dailyRequestCountsCodec = openRecord({
|
|
335
|
+
date: required(string),
|
|
336
|
+
claude: required(count),
|
|
337
|
+
gemini: required(count),
|
|
338
|
+
});
|
|
339
|
+
const metadataShape = {
|
|
340
|
+
email: optional(nullable(string)),
|
|
341
|
+
projectId: optional(nullable(string)),
|
|
342
|
+
managedProjectId: optional(nullable(string)),
|
|
343
|
+
addedAt: required(finiteNumber),
|
|
344
|
+
lastUsed: required(finiteNumber),
|
|
345
|
+
enabled: optional(nullable(boolean)),
|
|
346
|
+
lastSwitchReason: optional(nullable(enumOf(['rate-limit', 'initial', 'rotation']))),
|
|
347
|
+
rateLimitResetTimes: optional(nullable(mapOf(nullable(finiteNumber)))),
|
|
348
|
+
coolingDownUntil: optional(nullable(finiteNumber)),
|
|
349
|
+
cooldownReason: optional(nullable(enumOf([
|
|
350
|
+
'auth-failure',
|
|
351
|
+
'network-error',
|
|
352
|
+
'project-error',
|
|
353
|
+
'validation-required',
|
|
354
|
+
]))),
|
|
355
|
+
label: optional(nullable(string)),
|
|
356
|
+
fingerprint: optional(nullable(fingerprintCodec)),
|
|
357
|
+
fingerprintHistory: optional(nullable(arrayOf(fingerprintVersionCodec))),
|
|
358
|
+
verificationRequired: optional(nullable(boolean)),
|
|
359
|
+
verificationRequiredAt: optional(nullable(finiteNumber)),
|
|
360
|
+
verificationRequiredReason: optional(nullable(string)),
|
|
361
|
+
verificationUrl: optional(nullable(string)),
|
|
362
|
+
accountIneligible: optional(nullable(boolean)),
|
|
363
|
+
accountIneligibleAt: optional(nullable(finiteNumber)),
|
|
364
|
+
accountIneligibleReason: optional(nullable(string)),
|
|
365
|
+
eligibilityStateUpdatedAt: optional(nullable(finiteNumber)),
|
|
366
|
+
capturedTierId: optional(nullable(string)),
|
|
367
|
+
capturedPaidTierId: optional(nullable(string)),
|
|
368
|
+
capturedTierAt: optional(nullable(finiteNumber)),
|
|
369
|
+
capturedTierSchemaVersion: optional(nullable(finiteNumber)),
|
|
370
|
+
dailyRequestCounts: optional(nullable(dailyRequestCountsCodec)),
|
|
371
|
+
};
|
|
372
|
+
const quotaShape = {
|
|
373
|
+
schemaVersion: required(schemaVersion(QUOTA_STATE_SCHEMA_VERSION)),
|
|
374
|
+
cachedQuotaAccountId: optional(nullable(string)),
|
|
375
|
+
cachedQuota: optional(nullable(mapOf(openRecord({
|
|
376
|
+
remainingFraction: optional(nullable(finiteNumber)),
|
|
377
|
+
resetTime: optional(nullable(string)),
|
|
378
|
+
modelCount: required(finiteNumber),
|
|
379
|
+
windows: optional(nullable(arrayOf(openRecord({
|
|
380
|
+
window: required(enumOf(['weekly', '5h'])),
|
|
381
|
+
remainingFraction: required(finiteNumber),
|
|
382
|
+
resetTime: required(string),
|
|
383
|
+
})))),
|
|
384
|
+
})))),
|
|
385
|
+
cachedPerModelQuota: optional(nullable(arrayOf(openRecord({
|
|
386
|
+
modelId: required(string),
|
|
387
|
+
displayName: optional(nullable(string)),
|
|
388
|
+
group: required(nullable(string)),
|
|
389
|
+
remainingFraction: required(finiteNumber),
|
|
390
|
+
resetTime: optional(nullable(string)),
|
|
391
|
+
})))),
|
|
392
|
+
cachedQuotaUpdatedAt: optional(nullable(finiteNumber)),
|
|
393
|
+
};
|
|
394
|
+
const metadataForbidden = {
|
|
395
|
+
...CREDENTIAL_KEYS,
|
|
396
|
+
version: POOL_FIELD_REFUSAL,
|
|
397
|
+
accounts: POOL_FIELD_REFUSAL,
|
|
398
|
+
activeIndex: POOL_FIELD_REFUSAL,
|
|
399
|
+
activeIndexByFamily: POOL_FIELD_REFUSAL,
|
|
400
|
+
isRateLimited: LEGACY_FIELD_REFUSAL,
|
|
401
|
+
rateLimitResetTime: LEGACY_FIELD_REFUSAL,
|
|
402
|
+
...Object.fromEntries(Object.keys(quotaShape)
|
|
403
|
+
.filter((key) => key !== 'schemaVersion')
|
|
404
|
+
.map((key) => [key, QUOTA_FIELD_REFUSAL])),
|
|
405
|
+
};
|
|
406
|
+
const quotaForbidden = {
|
|
407
|
+
...CREDENTIAL_KEYS,
|
|
408
|
+
...Object.fromEntries(Object.keys(metadataShape).map((key) => [key, METADATA_FIELD_REFUSAL])),
|
|
409
|
+
};
|
|
410
|
+
const metadataCodec = openRecord(metadataShape, {
|
|
411
|
+
forbidden: metadataForbidden,
|
|
412
|
+
});
|
|
413
|
+
const providerStateCodec = openRecord({
|
|
414
|
+
schemaVersion: required(schemaVersion(PROVIDER_STATE_SCHEMA_VERSION)),
|
|
415
|
+
metadata: required(metadataCodec),
|
|
416
|
+
}, { forbidden: CREDENTIAL_KEYS });
|
|
417
|
+
const quotaCodec = openRecord(quotaShape, { forbidden: quotaForbidden });
|
|
418
|
+
// ---------------------------------------------------------------------------
|
|
419
|
+
// Account selection
|
|
420
|
+
// ---------------------------------------------------------------------------
|
|
421
|
+
const rowRefCodec = closedRecord({
|
|
422
|
+
id: required(rowId),
|
|
423
|
+
credentialEpoch: required(credentialEpoch),
|
|
424
|
+
identity: optional(nonEmptyString),
|
|
425
|
+
});
|
|
426
|
+
const routingCodec = openRecord({
|
|
427
|
+
schemaVersion: required(schemaVersion(ROUTING_SETTINGS_SCHEMA_VERSION)),
|
|
428
|
+
activeIndex: optional(nullable(finiteNumber)),
|
|
429
|
+
activeIndexByFamily: optional(nullable(openRecord({
|
|
430
|
+
claude: optional(nullable(finiteNumber)),
|
|
431
|
+
gemini: optional(nullable(finiteNumber)),
|
|
432
|
+
}))),
|
|
433
|
+
activeRow: optional(nullable(rowRefCodec)),
|
|
434
|
+
activeRowByFamily: optional(nullable(openRecord({
|
|
435
|
+
claude: optional(nullable(rowRefCodec)),
|
|
436
|
+
gemini: optional(nullable(rowRefCodec)),
|
|
437
|
+
}))),
|
|
438
|
+
}, { forbidden: CREDENTIAL_KEYS });
|
|
439
|
+
const codecContractHolds = true;
|
|
440
|
+
void codecContractHolds;
|
|
441
|
+
function asObject(value) {
|
|
442
|
+
// Every record codec encodes to an object; this only narrows the type.
|
|
443
|
+
return isPlainObject(value)
|
|
444
|
+
? value
|
|
445
|
+
: fail('$', 'did not encode to an object');
|
|
446
|
+
}
|
|
447
|
+
function validates(read, raw) {
|
|
448
|
+
try {
|
|
449
|
+
read(raw);
|
|
450
|
+
return true;
|
|
451
|
+
}
|
|
452
|
+
catch (error) {
|
|
453
|
+
if (error instanceof AccountCodecError)
|
|
454
|
+
return false;
|
|
455
|
+
throw error;
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
/**
|
|
459
|
+
* Deterministic JSON: object keys sorted at every depth, arrays in order.
|
|
460
|
+
* The store digests the credential-bound projection, so equal values must
|
|
461
|
+
* serialise identically whatever order their keys were written in.
|
|
462
|
+
*/
|
|
463
|
+
function canonical(value) {
|
|
464
|
+
if (Array.isArray(value))
|
|
465
|
+
return value.map(canonical);
|
|
466
|
+
if (value === null || typeof value !== 'object')
|
|
467
|
+
return value;
|
|
468
|
+
const out = {};
|
|
469
|
+
for (const key of Object.keys(value).sort()) {
|
|
470
|
+
const item = value[key];
|
|
471
|
+
if (item !== undefined)
|
|
472
|
+
out[key] = canonical(item);
|
|
473
|
+
}
|
|
474
|
+
return out;
|
|
475
|
+
}
|
|
476
|
+
// ---------------------------------------------------------------------------
|
|
477
|
+
// Public API
|
|
478
|
+
// ---------------------------------------------------------------------------
|
|
479
|
+
/** Reads a stored provider state; throws `AccountCodecError` when refused. */
|
|
480
|
+
export function decodeProviderState(raw) {
|
|
481
|
+
return providerStateCodec.decode(raw, '$');
|
|
482
|
+
}
|
|
483
|
+
/** Produces the JSON to store for a provider state; throws when invalid. */
|
|
484
|
+
export function encodeProviderState(value) {
|
|
485
|
+
return asObject(providerStateCodec.encode(value, '$'));
|
|
486
|
+
}
|
|
487
|
+
/** Reads one row's metadata on its own (without the envelope). */
|
|
488
|
+
export function decodeProviderMetadata(raw) {
|
|
489
|
+
return metadataCodec.decode(raw, '$.metadata');
|
|
490
|
+
}
|
|
491
|
+
export function encodeProviderMetadata(value) {
|
|
492
|
+
return asObject(metadataCodec.encode(value, '$.metadata'));
|
|
493
|
+
}
|
|
494
|
+
export function isValidProviderState(raw) {
|
|
495
|
+
return validates(decodeProviderState, raw);
|
|
496
|
+
}
|
|
497
|
+
/**
|
|
498
|
+
* The credential-bound projection of a stored provider state: the schema
|
|
499
|
+
* version and every field named in `CREDENTIAL_BOUND_METADATA_FIELDS` that
|
|
500
|
+
* is present (a `null` counts as present), with keys sorted at every depth.
|
|
501
|
+
* Unknown top-level metadata is left out: nothing says it describes the
|
|
502
|
+
* signed-in account. Throws for an invalid value; the store only asks for
|
|
503
|
+
* valid ones.
|
|
504
|
+
*/
|
|
505
|
+
export function providerStateCredentialBound(raw) {
|
|
506
|
+
const stored = encodeProviderState(decodeProviderState(raw));
|
|
507
|
+
const metadata = asObject(stored.metadata ?? null);
|
|
508
|
+
const bound = {};
|
|
509
|
+
for (const key of CREDENTIAL_BOUND_METADATA_FIELDS) {
|
|
510
|
+
const value = metadata[key];
|
|
511
|
+
if (value !== undefined)
|
|
512
|
+
bound[key] = value;
|
|
513
|
+
}
|
|
514
|
+
return asObject(canonical({
|
|
515
|
+
schemaVersion: PROVIDER_STATE_SCHEMA_VERSION,
|
|
516
|
+
metadata: bound,
|
|
517
|
+
}));
|
|
518
|
+
}
|
|
519
|
+
/** Reads a stored quota value; throws `AccountCodecError` when refused. */
|
|
520
|
+
export function decodeQuotaState(raw) {
|
|
521
|
+
return quotaCodec.decode(raw, '$');
|
|
522
|
+
}
|
|
523
|
+
export function encodeQuotaState(value) {
|
|
524
|
+
return asObject(quotaCodec.encode(value, '$'));
|
|
525
|
+
}
|
|
526
|
+
export function isValidQuotaState(raw) {
|
|
527
|
+
return validates(decodeQuotaState, raw);
|
|
528
|
+
}
|
|
529
|
+
/**
|
|
530
|
+
* Combines a stored quota value with a new reading. A reading is complete
|
|
531
|
+
* for every field it carries, so each present top-level field (and each
|
|
532
|
+
* unknown key) replaces the stored one wholesale; fields the reading leaves
|
|
533
|
+
* out are kept. Both values must be valid.
|
|
534
|
+
*/
|
|
535
|
+
export function mergeQuotaState(stored, observation) {
|
|
536
|
+
const incoming = encodeQuotaState(decodeQuotaState(observation));
|
|
537
|
+
if (stored === undefined)
|
|
538
|
+
return incoming;
|
|
539
|
+
const prior = encodeQuotaState(decodeQuotaState(stored));
|
|
540
|
+
return encodeQuotaState(decodeQuotaState({ ...prior, ...incoming }));
|
|
541
|
+
}
|
|
542
|
+
/** Reads the routing settings value; throws `AccountCodecError` when refused. */
|
|
543
|
+
export function decodeRoutingSettings(raw) {
|
|
544
|
+
return routingCodec.decode(raw, '$');
|
|
545
|
+
}
|
|
546
|
+
export function encodeRoutingSettings(value) {
|
|
547
|
+
return asObject(routingCodec.encode(value, '$'));
|
|
548
|
+
}
|
|
549
|
+
export function decodeRowRef(raw) {
|
|
550
|
+
return rowRefCodec.decode(raw, '$');
|
|
551
|
+
}
|
|
552
|
+
export function encodeRowRef(value) {
|
|
553
|
+
return asObject(rowRefCodec.encode(value, '$'));
|
|
554
|
+
}
|
|
555
|
+
/**
|
|
556
|
+
* The provider-state codec to open the store with. The repository's merge
|
|
557
|
+
* and replacement rules are required: without them the store would fall
|
|
558
|
+
* back to its defaults (incoming metadata replacing the stored metadata on a
|
|
559
|
+
* refresh, a replace keeping only what it was handed), silently bypassing
|
|
560
|
+
* those rules. A policy missing either rule is refused here, before any
|
|
561
|
+
* store is opened.
|
|
562
|
+
*
|
|
563
|
+
* The rules see decoded values and return decoded values; the codec
|
|
564
|
+
* validates both sides, so a rule can neither be shown nor store malformed
|
|
565
|
+
* metadata, and a rule that returns nothing from `merge` is refused rather
|
|
566
|
+
* than read as "clear".
|
|
567
|
+
*/
|
|
568
|
+
export function createProviderStateCodec(policy) {
|
|
569
|
+
if (policy === null || typeof policy !== 'object') {
|
|
570
|
+
fail('policy', 'must be an object with merge and onReplace rules');
|
|
571
|
+
}
|
|
572
|
+
for (const rule of ['merge', 'onReplace']) {
|
|
573
|
+
if (typeof policy[rule] !== 'function') {
|
|
574
|
+
fail(`policy.${rule}`, "must be a function; the store's default would bypass the repository's rule");
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
return {
|
|
578
|
+
validate: isValidProviderState,
|
|
579
|
+
credentialBound: providerStateCredentialBound,
|
|
580
|
+
merge(onDisk, incoming) {
|
|
581
|
+
return encodeProviderState(policy.merge(decodeProviderState(onDisk), decodeProviderState(incoming)));
|
|
582
|
+
},
|
|
583
|
+
onReplace(previous, replacement) {
|
|
584
|
+
const next = policy.onReplace(previous === undefined ? undefined : decodeProviderState(previous), {
|
|
585
|
+
id: replacement.id,
|
|
586
|
+
credentialEpoch: replacement.credentialEpoch,
|
|
587
|
+
...(replacement.previousIdentity !== undefined
|
|
588
|
+
? { previousIdentity: replacement.previousIdentity }
|
|
589
|
+
: {}),
|
|
590
|
+
...(replacement.identity !== undefined
|
|
591
|
+
? { identity: replacement.identity }
|
|
592
|
+
: {}),
|
|
593
|
+
...(replacement.incoming !== undefined
|
|
594
|
+
? { incoming: decodeProviderState(replacement.incoming) }
|
|
595
|
+
: {}),
|
|
596
|
+
});
|
|
597
|
+
return next === undefined ? undefined : encodeProviderState(next);
|
|
598
|
+
},
|
|
599
|
+
};
|
|
600
|
+
}
|
|
601
|
+
/**
|
|
602
|
+
* The quota codec to open the store with. Its merge is the whole quota rule
|
|
603
|
+
* (`mergeQuotaState`), so it needs no configuration.
|
|
604
|
+
*/
|
|
605
|
+
export const QUOTA_CODEC = {
|
|
606
|
+
validate: isValidQuotaState,
|
|
607
|
+
merge: mergeQuotaState,
|
|
608
|
+
};
|
|
609
|
+
//# sourceMappingURL=account-repository-codecs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account-repository-codecs.js","sourceRoot":"","sources":["../src/account-repository-codecs.ts"],"names":[],"mappings":"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"}
|