@ibgib/core-gib 0.1.8 → 0.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-helpers.d.mts +45 -0
- package/dist/agent-helpers.d.mts.map +1 -0
- package/dist/agent-helpers.mjs +36 -0
- package/dist/agent-helpers.mjs.map +1 -0
- package/dist/keystone/keystone-config-builder.respec.d.mts +2 -0
- package/dist/keystone/keystone-config-builder.respec.d.mts.map +1 -0
- package/dist/keystone/keystone-config-builder.respec.mjs +34 -0
- package/dist/keystone/keystone-config-builder.respec.mjs.map +1 -0
- package/dist/keystone/keystone-constants.d.mts +2 -0
- package/dist/keystone/keystone-constants.d.mts.map +1 -1
- package/dist/keystone/keystone-constants.mjs +2 -0
- package/dist/keystone/keystone-constants.mjs.map +1 -1
- package/dist/keystone/keystone-helpers.d.mts +54 -1
- package/dist/keystone/keystone-helpers.d.mts.map +1 -1
- package/dist/keystone/keystone-helpers.mjs +185 -1
- package/dist/keystone/keystone-helpers.mjs.map +1 -1
- package/dist/keystone/keystone-service-v1.d.mts +49 -16
- package/dist/keystone/keystone-service-v1.d.mts.map +1 -1
- package/dist/keystone/keystone-service-v1.mjs +151 -328
- package/dist/keystone/keystone-service-v1.mjs.map +1 -1
- package/dist/keystone/keystone-service-v1.respec.mjs +401 -20
- package/dist/keystone/keystone-service-v1.respec.mjs.map +1 -1
- package/dist/keystone/keystone-types.d.mts +22 -0
- package/dist/keystone/keystone-types.d.mts.map +1 -1
- package/dist/sync/sync-constants.d.mts +17 -0
- package/dist/sync/sync-constants.d.mts.map +1 -0
- package/dist/sync/sync-constants.mjs +16 -0
- package/dist/sync/sync-constants.mjs.map +1 -0
- package/dist/sync/sync-helpers.d.mts +15 -0
- package/dist/sync/sync-helpers.d.mts.map +1 -0
- package/dist/sync/sync-helpers.mjs +46 -0
- package/dist/sync/sync-helpers.mjs.map +1 -0
- package/dist/sync/sync-local-spaces.respec.d.mts +2 -0
- package/dist/sync/sync-local-spaces.respec.d.mts.map +1 -0
- package/dist/sync/sync-local-spaces.respec.mjs +159 -0
- package/dist/sync/sync-local-spaces.respec.mjs.map +1 -0
- package/dist/sync/sync-saga-coordinator.d.mts +118 -0
- package/dist/sync/sync-saga-coordinator.d.mts.map +1 -0
- package/dist/sync/sync-saga-coordinator.mjs +399 -0
- package/dist/sync/sync-saga-coordinator.mjs.map +1 -0
- package/dist/sync/sync-saga-coordinator.respec.d.mts +2 -0
- package/dist/sync/sync-saga-coordinator.respec.d.mts.map +1 -0
- package/dist/sync/sync-saga-coordinator.respec.mjs +40 -0
- package/dist/sync/sync-saga-coordinator.respec.mjs.map +1 -0
- package/dist/sync/sync-types.d.mts +103 -0
- package/dist/sync/sync-types.d.mts.map +1 -0
- package/dist/sync/sync-types.mjs +2 -0
- package/dist/sync/sync-types.mjs.map +1 -0
- package/dist/test/mock-space.d.mts +39 -0
- package/dist/test/mock-space.d.mts.map +1 -0
- package/dist/test/mock-space.mjs +79 -0
- package/dist/test/mock-space.mjs.map +1 -0
- package/dist/witness/space/inner-space/inner-space-v1.respec.mjs +163 -201
- package/dist/witness/space/inner-space/inner-space-v1.respec.mjs.map +1 -1
- package/dist/witness/space/space-helper.d.mts.map +1 -1
- package/dist/witness/space/space-helper.mjs +43 -4
- package/dist/witness/space/space-helper.mjs.map +1 -1
- package/dist/witness/space/space-helper.respec.d.mts +2 -0
- package/dist/witness/space/space-helper.respec.d.mts.map +1 -0
- package/dist/witness/space/space-helper.respec.mjs +30 -0
- package/dist/witness/space/space-helper.respec.mjs.map +1 -0
- package/package.json +2 -2
- package/src/agent-helpers.mts +58 -0
- package/src/keystone/keystone-config-builder.respec.mts +49 -0
- package/src/keystone/keystone-constants.mts +2 -0
- package/src/keystone/keystone-helpers.mts +211 -2
- package/src/keystone/keystone-service-v1.mts +183 -367
- package/src/keystone/keystone-service-v1.respec.mts +484 -21
- package/src/keystone/keystone-types.mts +24 -0
- package/src/sync/sync-constants.mts +24 -0
- package/src/sync/sync-helpers.mts +59 -0
- package/src/sync/sync-local-spaces.respec.mts +200 -0
- package/src/sync/sync-saga-coordinator.mts +477 -0
- package/src/sync/sync-saga-coordinator.respec.mts +52 -0
- package/src/sync/sync-types.mts +120 -0
- package/src/test/mock-space.mts +85 -0
- package/src/witness/space/inner-space/inner-space-v1.respec.mts +181 -228
- package/src/witness/space/space-helper.mts +42 -4
- package/src/witness/space/space-helper.respec.mts +42 -0
- package/tmp.md +11 -0
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
import { extractErrorMsg,
|
|
1
|
+
import { extractErrorMsg, } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
|
|
2
2
|
import { getIbGibAddr } from '@ibgib/ts-gib/dist/helper.mjs';
|
|
3
|
-
import { mut8 } from '@ibgib/ts-gib/dist/V1/transforms/mut8.mjs';
|
|
4
|
-
import { Factory_V1 } from '@ibgib/ts-gib/dist/V1/factory.mjs';
|
|
5
|
-
import { getGib } from '@ibgib/ts-gib/dist/V1/transforms/transform-helper.mjs';
|
|
6
3
|
import { GLOBAL_LOG_A_LOT } from '../core-constants.mjs';
|
|
7
|
-
import { KeystoneReplenishStrategy,
|
|
4
|
+
import { KeystoneReplenishStrategy, } from './keystone-types.mjs';
|
|
8
5
|
import { KeystoneStrategyFactory } from './strategy/keystone-strategy-factory.mjs';
|
|
9
|
-
import {
|
|
10
|
-
import { addToBindingMap,
|
|
6
|
+
import { POOL_ID_REVOKE, KEYSTONE_VERB_REVOKE, KEYSTONE_VERB_MANAGE } from './keystone-constants.mjs';
|
|
7
|
+
import { addToBindingMap, createKeystoneIbGibImpl, evolvePersistAndRegisterKeystone, generateOpaqueChallengeId, resolveTargetPool, selectChallengeIds, solveAndReplenish, validateKeystoneTransition, } from './keystone-helpers.mjs';
|
|
11
8
|
const logalot = GLOBAL_LOG_A_LOT || true;
|
|
12
9
|
/**
|
|
13
10
|
* Facade for managing Keystone Identities.
|
|
@@ -34,7 +31,7 @@ export class KeystoneService_V1 {
|
|
|
34
31
|
const targetSize = config.behavior.size;
|
|
35
32
|
const timestamp = Date.now().toString();
|
|
36
33
|
for (let i = 0; i < targetSize; i++) {
|
|
37
|
-
const challengeId = await
|
|
34
|
+
const challengeId = await generateOpaqueChallengeId({
|
|
38
35
|
salt: config.salt, timestamp, index: i
|
|
39
36
|
});
|
|
40
37
|
const solution = await strategy.generateSolution({
|
|
@@ -52,8 +49,11 @@ export class KeystoneService_V1 {
|
|
|
52
49
|
bindingMap
|
|
53
50
|
});
|
|
54
51
|
}
|
|
52
|
+
if (challengePools.length === 0) {
|
|
53
|
+
throw new Error(`No challenge pools created. (E: 38e538530996940e1f16a8b199995825)`);
|
|
54
|
+
}
|
|
55
55
|
const data = { challengePools, proofs: [] };
|
|
56
|
-
const keystoneIbGib = await
|
|
56
|
+
const keystoneIbGib = await createKeystoneIbGibImpl({ data, metaspace, space });
|
|
57
57
|
return keystoneIbGib;
|
|
58
58
|
}
|
|
59
59
|
catch (error) {
|
|
@@ -67,112 +67,64 @@ export class KeystoneService_V1 {
|
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
/**
|
|
70
|
-
* Signs a claim
|
|
71
|
-
*
|
|
70
|
+
* Signs a claim by solving challenges from a specific pool and evolving the Keystone timeline.
|
|
71
|
+
*
|
|
72
|
+
* Uses a hybrid selection strategy: Mandatory IDs (Alice) + Sequential (FIFO) + Random (Stochastic).
|
|
73
|
+
*
|
|
74
|
+
* Supports Delegation via `poolFilter` to find specific foreign pools.
|
|
72
75
|
*/
|
|
73
|
-
async sign({ latestKeystone, masterSecret, claim, poolId, requiredChallengeIds = [], frameDetails, metaspace, space, }) {
|
|
76
|
+
async sign({ latestKeystone, masterSecret, claim, poolId, poolFilter, requiredChallengeIds = [], frameDetails, metaspace, space, }) {
|
|
74
77
|
const lc = `${this.lc}[${this.sign.name}]`;
|
|
75
78
|
try {
|
|
76
79
|
if (logalot) {
|
|
77
|
-
console.log(`${lc} starting
|
|
80
|
+
console.log(`${lc} starting...`);
|
|
78
81
|
}
|
|
79
82
|
const prevData = latestKeystone.data;
|
|
80
83
|
if (prevData.revocationInfo) {
|
|
81
|
-
throw new Error(`
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
const
|
|
84
|
+
throw new Error(`Keystone has been revoked. Cannot sign. (E: 4f2198c39116d15c48ba191940316825)`);
|
|
85
|
+
}
|
|
86
|
+
// 1. Identify Authority (Resolve Pool)
|
|
87
|
+
const pool = resolveTargetPool({
|
|
88
|
+
pools: prevData.challengePools,
|
|
89
|
+
poolId,
|
|
90
|
+
poolFilter,
|
|
91
|
+
verb: claim.verb
|
|
92
|
+
});
|
|
85
93
|
if (logalot) {
|
|
86
|
-
console.log(`${lc}
|
|
94
|
+
console.log(`${lc} Selected pool: ${pool.id} (size: ${Object.keys(pool.challenges).length}) (I: genuuid)`);
|
|
87
95
|
}
|
|
88
|
-
//
|
|
89
|
-
|
|
90
|
-
// ---------------------------------------------------------------
|
|
91
|
-
if (poolId) {
|
|
92
|
-
// Explicit selection
|
|
93
|
-
pool = poolsToSearch.find(p => p.id === poolId);
|
|
94
|
-
if (!pool) {
|
|
95
|
-
throw new Error(`Pool not found: ${poolId} (E: genuuid)`);
|
|
96
|
-
}
|
|
97
|
-
// Enforce Policy on Explicit Selection
|
|
98
|
-
// FIX: Check length > 0. If empty, it's a default pool (allow all).
|
|
99
|
-
if (pool.config.allowedVerbs && pool.config.allowedVerbs.length > 0 && claim.verb) {
|
|
100
|
-
if (!pool.config.allowedVerbs.includes(claim.verb)) {
|
|
101
|
-
throw new Error(`Pool ${poolId} is not authorized for verb: ${claim.verb} (E: genuuid)`);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
// Automatic Resolution based on Verb
|
|
107
|
-
if (!claim.verb) {
|
|
108
|
-
throw new Error(`Cannot auto-resolve pool without a verb in the claim. (E: genuuid)`);
|
|
109
|
-
}
|
|
110
|
-
// 1. Look for Specific Match
|
|
111
|
-
pool = poolsToSearch.find(p => p.config.allowedVerbs && p.config.allowedVerbs.includes(claim.verb));
|
|
112
|
-
// 2. Look for General/Default (No restrictions)
|
|
113
|
-
if (!pool) {
|
|
114
|
-
pool = poolsToSearch.find(p => !p.config.allowedVerbs || p.config.allowedVerbs.length === 0);
|
|
115
|
-
}
|
|
116
|
-
if (!pool) {
|
|
117
|
-
throw new Error(`No suitable pool found for verb: ${claim.verb} (E: genuuid)`);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
// 1. Get Deterministic Requirements (Demands -> Binding -> FIFO)
|
|
121
|
-
const { mandatoryIds, availableIds } = getDeterministicRequirements({
|
|
96
|
+
// 2. Calculate Costs (Select IDs)
|
|
97
|
+
const idsToSolve = selectChallengeIds({
|
|
122
98
|
pool,
|
|
123
|
-
|
|
124
|
-
|
|
99
|
+
targetAddr: claim.target,
|
|
100
|
+
requiredChallengeIds
|
|
125
101
|
});
|
|
126
|
-
//
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
console.log(`${lc} Pool Info: id=${pool.id} invalid=${!pool} size=${Object.keys(pool.challenges || {}).length}`);
|
|
131
|
-
console.log(`${lc} Behavior: seq=${pool.config.behavior.selectSequentially} rand=${randomCount} binding=${pool.config.behavior.targetBindingChars}`);
|
|
132
|
-
console.log(`${lc} Requirements: mandatory=${mandatoryIds.size} available=${availableIds.length}`);
|
|
133
|
-
}
|
|
134
|
-
if (randomCount > 0) {
|
|
135
|
-
if (availableIds.length < randomCount) {
|
|
136
|
-
throw new Error(`Insufficient challenges for random requirement. Need ${randomCount}, have ${availableIds.length}`);
|
|
137
|
-
}
|
|
138
|
-
// Shuffle & Pick
|
|
139
|
-
const shuffled = availableIds.sort(() => 0.5 - Math.random());
|
|
140
|
-
randomIds.push(...shuffled.slice(0, randomCount));
|
|
141
|
-
}
|
|
142
|
-
// 3. Combine & Solve
|
|
143
|
-
const finalSelectedIds = [...mandatoryIds, ...randomIds];
|
|
144
|
-
const strategy = KeystoneStrategyFactory.create({ config: pool.config });
|
|
145
|
-
const secretToUse = masterSecret;
|
|
146
|
-
const poolSecret = await strategy.derivePoolSecret({ masterSecret: secretToUse });
|
|
147
|
-
const solutions = [];
|
|
148
|
-
for (const id of finalSelectedIds) {
|
|
149
|
-
const solution = await strategy.generateSolution({
|
|
150
|
-
poolSecret, poolId: pool.id, challengeId: id,
|
|
151
|
-
});
|
|
152
|
-
solutions.push(solution);
|
|
153
|
-
}
|
|
154
|
-
// 4. Replenish
|
|
155
|
-
const nextPools = await this.applyReplenishmentStrategy({
|
|
156
|
-
prevPools: poolsToSearch,
|
|
102
|
+
// 3. Pay the Cost (Solve & Replenish)
|
|
103
|
+
// This helper handles the Strategy creation, Secret derivation, Solving,
|
|
104
|
+
// and the calculation of the Next state for ALL pools.
|
|
105
|
+
const { proof, nextPools } = await solveAndReplenish({
|
|
157
106
|
targetPoolId: pool.id,
|
|
158
|
-
|
|
159
|
-
masterSecret
|
|
160
|
-
|
|
161
|
-
config: pool.config
|
|
162
|
-
});
|
|
163
|
-
// 5. Build Proof (Include requiredChallengeIds!)
|
|
164
|
-
const proof = {
|
|
107
|
+
prevPools: prevData.challengePools,
|
|
108
|
+
masterSecret,
|
|
109
|
+
challengeIds: idsToSolve,
|
|
165
110
|
claim,
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
111
|
+
requiredChallengeIds
|
|
112
|
+
});
|
|
113
|
+
// 4. Construct New Data
|
|
169
114
|
const newData = {
|
|
170
115
|
challengePools: nextPools,
|
|
171
116
|
proofs: [proof],
|
|
172
117
|
frameDetails,
|
|
118
|
+
// Revocation info is undefined for a standard sign operation
|
|
173
119
|
};
|
|
174
|
-
|
|
175
|
-
|
|
120
|
+
// 5. Commit (Evolve, Persist, Register)
|
|
121
|
+
const resKeystone = await evolvePersistAndRegisterKeystone({
|
|
122
|
+
prevIbGib: latestKeystone,
|
|
123
|
+
newData,
|
|
124
|
+
metaspace,
|
|
125
|
+
space
|
|
126
|
+
});
|
|
127
|
+
return resKeystone;
|
|
176
128
|
}
|
|
177
129
|
catch (error) {
|
|
178
130
|
console.error(`${lc} ${extractErrorMsg(error)}`);
|
|
@@ -206,83 +158,69 @@ export class KeystoneService_V1 {
|
|
|
206
158
|
*
|
|
207
159
|
* Logic:
|
|
208
160
|
* 1. Locates the 'revoke' pool.
|
|
209
|
-
* 2.
|
|
210
|
-
* 3.
|
|
161
|
+
* 2. Solves required challenges to prove ownership.
|
|
162
|
+
* 3. Wipes the pool (via 'scorched-earth' strategy in solveAndReplenish).
|
|
163
|
+
* 4. Sets the revocationInfo on the new frame.
|
|
211
164
|
*/
|
|
212
165
|
async revoke({ latestKeystone, masterSecret, reason = "User initiated revocation", frameDetails, metaspace, space, }) {
|
|
213
166
|
const lc = `${this.lc}[${this.revoke.name}]`;
|
|
214
167
|
try {
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
if (!space) {
|
|
218
|
-
throw new Error(`(UNEXPECTED) space falsy and couldn't get default local user space from the metaspace? (E: 73c8bfc0e7383a540ea1d6b14b020125)`);
|
|
219
|
-
}
|
|
220
|
-
// 1. Find Revocation Pool
|
|
221
|
-
const pool = prevData.challengePools.find(p => p.id === POOL_ID_REVOKE);
|
|
222
|
-
if (!pool) {
|
|
223
|
-
throw new Error(`Revocation pool not found (E: 8c4f18c5461c1d601283108878c79825)`);
|
|
168
|
+
if (logalot) {
|
|
169
|
+
console.log(`${lc} starting...`);
|
|
224
170
|
}
|
|
225
|
-
|
|
171
|
+
const prevData = latestKeystone.data;
|
|
172
|
+
// 1. Identify Authority (Resolve Revoke Pool)
|
|
173
|
+
const pool = resolveTargetPool({
|
|
174
|
+
pools: prevData.challengePools,
|
|
175
|
+
poolId: POOL_ID_REVOKE // Explicitly require the special revoke pool
|
|
176
|
+
});
|
|
177
|
+
// 2. Construct Claim
|
|
226
178
|
const claim = {
|
|
227
179
|
verb: KEYSTONE_VERB_REVOKE,
|
|
228
180
|
target: getIbGibAddr({ ibGib: latestKeystone })
|
|
229
181
|
};
|
|
230
|
-
|
|
182
|
+
// 3. Calculate Costs
|
|
183
|
+
const idsToSolve = selectChallengeIds({
|
|
231
184
|
pool,
|
|
232
|
-
|
|
233
|
-
|
|
185
|
+
targetAddr: claim.target,
|
|
186
|
+
requiredChallengeIds: []
|
|
234
187
|
});
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
const randomIds = [];
|
|
238
|
-
if (randomCount > 0) {
|
|
239
|
-
if (availableIds.length < randomCount) {
|
|
240
|
-
throw new Error(`Insufficient challenges. availableIds.length (${availableIds.length}) is less than required random count (${randomCount}) (E: b2e3570ab998dfdbab5fbdda1e43d825)`);
|
|
241
|
-
}
|
|
242
|
-
const shuffled = availableIds.sort(() => 0.5 - Math.random());
|
|
243
|
-
randomIds.push(...shuffled.slice(0, randomCount));
|
|
188
|
+
if (idsToSolve.length === 0) {
|
|
189
|
+
throw new Error(`Revocation policy selected 0 challenges? Check config for pool ${pool.id}. Revocation requires proof. (E: 97e5a8356d241ae7b882db791cb1f825)`);
|
|
244
190
|
}
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
}
|
|
249
|
-
// 3. Solve Selected
|
|
250
|
-
const strategy = KeystoneStrategyFactory.create({ config: pool.config });
|
|
251
|
-
const poolSecret = await strategy.derivePoolSecret({ masterSecret });
|
|
252
|
-
const solutions = [];
|
|
253
|
-
for (const id of selectedIds) {
|
|
254
|
-
const solution = await strategy.generateSolution({
|
|
255
|
-
poolSecret, poolId: pool.id, challengeId: id,
|
|
256
|
-
});
|
|
257
|
-
solutions.push(solution);
|
|
258
|
-
}
|
|
259
|
-
// 4. Replenish (Scorched Earth)
|
|
260
|
-
const nextPools = await this.applyReplenishmentStrategy({
|
|
261
|
-
prevPools: prevData.challengePools,
|
|
191
|
+
// 4. Pay the Cost & Scorched Earth
|
|
192
|
+
// The revoke pool config should have 'replenish: scorched-earth',
|
|
193
|
+
// causing solveAndReplenish to return an empty pool in nextPools.
|
|
194
|
+
const { proof, nextPools } = await solveAndReplenish({
|
|
262
195
|
targetPoolId: pool.id,
|
|
263
|
-
|
|
196
|
+
prevPools: prevData.challengePools,
|
|
264
197
|
masterSecret,
|
|
265
|
-
|
|
266
|
-
config: pool.config
|
|
267
|
-
});
|
|
268
|
-
// 5. Construct Proof
|
|
269
|
-
const proof = {
|
|
198
|
+
challengeIds: idsToSolve,
|
|
270
199
|
claim,
|
|
271
|
-
|
|
272
|
-
};
|
|
200
|
+
requiredChallengeIds: []
|
|
201
|
+
});
|
|
202
|
+
// warn if nextPools contains pool.id that isn't empty (we were
|
|
203
|
+
// supposed to do "scorched earth" which empties the pool)
|
|
204
|
+
if (nextPools.find(p => p.id === pool.id && Object.keys(p.challenges).length > 0)) {
|
|
205
|
+
console.warn(`${lc} revocation pool ${pool.id} is not empty after revocation. Is the revocation pool replenish strategy set to ${KeystoneReplenishStrategy.scorchedEarth}? (W: 300c28bc8b98fc3e3c0b0d988344f825)`);
|
|
206
|
+
}
|
|
207
|
+
// 5. Construct Revocation Info
|
|
273
208
|
const revocationInfo = { reason, proof };
|
|
209
|
+
// 6. Construct New Data
|
|
274
210
|
const newData = {
|
|
275
211
|
challengePools: nextPools,
|
|
276
212
|
proofs: [proof],
|
|
277
213
|
revocationInfo,
|
|
278
214
|
frameDetails
|
|
279
215
|
};
|
|
280
|
-
|
|
216
|
+
// 7. Commit
|
|
217
|
+
const newKeystone = await evolvePersistAndRegisterKeystone({
|
|
281
218
|
prevIbGib: latestKeystone,
|
|
282
219
|
newData,
|
|
283
220
|
metaspace,
|
|
284
|
-
space
|
|
221
|
+
space
|
|
285
222
|
});
|
|
223
|
+
return newKeystone;
|
|
286
224
|
}
|
|
287
225
|
catch (error) {
|
|
288
226
|
console.error(`${lc} ${extractErrorMsg(error)}`);
|
|
@@ -295,198 +233,83 @@ export class KeystoneService_V1 {
|
|
|
295
233
|
}
|
|
296
234
|
}
|
|
297
235
|
/**
|
|
298
|
-
*
|
|
299
|
-
*
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
const raw = await hash({ s: `${salt}${timestamp}${index}` });
|
|
306
|
-
return raw.substring(0, 16);
|
|
307
|
-
}
|
|
308
|
-
async applyReplenishmentStrategy({ prevPools, targetPoolId, consumedIds, masterSecret, strategy, config }) {
|
|
309
|
-
const newPools = JSON.parse(JSON.stringify(prevPools));
|
|
310
|
-
if (logalot) {
|
|
311
|
-
console.log(`[applyReplenishmentStrategy] Cloned pools. Ref check: ${prevPools === newPools} (should be false)`);
|
|
312
|
-
}
|
|
313
|
-
const targetIdx = newPools.findIndex((p) => p.id === targetPoolId);
|
|
314
|
-
if (targetIdx === -1) {
|
|
315
|
-
throw new Error(`Target pool ${targetPoolId} not found in keytstone data. (E: 75200388d22744838634524233772545)`);
|
|
316
|
-
}
|
|
317
|
-
const pool = newPools[targetIdx];
|
|
318
|
-
const poolSecret = await strategy.derivePoolSecret({ masterSecret });
|
|
319
|
-
const timestamp = Date.now().toString();
|
|
320
|
-
const strategyType = config.behavior.replenish;
|
|
321
|
-
// Clean up Binding Map for consumed IDs
|
|
322
|
-
consumedIds.forEach(id => {
|
|
323
|
-
if (pool.bindingMap) {
|
|
324
|
-
removeFromBindingMap(pool.bindingMap, id);
|
|
325
|
-
}
|
|
326
|
-
});
|
|
327
|
-
if (strategyType === KeystoneReplenishStrategy.topUp) {
|
|
328
|
-
// Remove consumed
|
|
329
|
-
consumedIds.forEach(id => delete pool.challenges[id]);
|
|
330
|
-
// Add New
|
|
331
|
-
for (let i = 0; i < consumedIds.length; i++) {
|
|
332
|
-
const newId = await this.generateOpaqueChallengeId({
|
|
333
|
-
salt: config.salt, timestamp, index: i
|
|
334
|
-
});
|
|
335
|
-
const solution = await strategy.generateSolution({
|
|
336
|
-
poolSecret, poolId: pool.id, challengeId: newId
|
|
337
|
-
});
|
|
338
|
-
pool.challenges[newId] = await strategy.generateChallenge({ solution });
|
|
339
|
-
// Update Binding Map
|
|
340
|
-
if (!pool.bindingMap) {
|
|
341
|
-
pool.bindingMap = {};
|
|
342
|
-
}
|
|
343
|
-
addToBindingMap(pool.bindingMap, newId);
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
else if (strategyType === KeystoneReplenishStrategy.replaceAll) {
|
|
347
|
-
pool.challenges = {};
|
|
348
|
-
pool.bindingMap = {};
|
|
349
|
-
for (let i = 0; i < config.behavior.size; i++) {
|
|
350
|
-
const newId = await this.generateOpaqueChallengeId({
|
|
351
|
-
salt: config.salt, timestamp, index: i
|
|
352
|
-
});
|
|
353
|
-
const solution = await strategy.generateSolution({
|
|
354
|
-
poolSecret, poolId: pool.id, challengeId: newId
|
|
355
|
-
});
|
|
356
|
-
pool.challenges[newId] = await strategy.generateChallenge({ solution });
|
|
357
|
-
addToBindingMap(pool.bindingMap, newId);
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
else if (strategyType === KeystoneReplenishStrategy.consume) {
|
|
361
|
-
consumedIds.forEach(id => delete pool.challenges[id]);
|
|
362
|
-
}
|
|
363
|
-
else if (strategyType === KeystoneReplenishStrategy.scorchedEarth) {
|
|
364
|
-
pool.challenges = {};
|
|
365
|
-
pool.bindingMap = {};
|
|
366
|
-
}
|
|
367
|
-
else {
|
|
368
|
-
throw new Error(`Unknown replenish strategy: ${strategyType}. Valid list: ${pretty(KEYSTONE_REPLENISH_STRATEGY_VALID_VALUES)} (E: 0acf56f1e1486240080e11e8046d0825)`);
|
|
369
|
-
}
|
|
370
|
-
return newPools;
|
|
371
|
-
}
|
|
372
|
-
/**
|
|
373
|
-
* Creates a new keystone ibgib that has no dna and no past.
|
|
236
|
+
* Structural evolution: Adds new challenge pools to the keystone.
|
|
237
|
+
*
|
|
238
|
+
* Use Case: Adding a delegate (Server) for SSO, adding a recovery key,
|
|
239
|
+
* or rotating to a new set of pools.
|
|
240
|
+
*
|
|
241
|
+
* Requires the Master Secret to authorize the change via a pool containing
|
|
242
|
+
* the 'manage' verb.
|
|
374
243
|
*/
|
|
375
|
-
async
|
|
376
|
-
const lc = `${this.lc}[${this.
|
|
244
|
+
async addPools({ latestKeystone, masterSecret, newPools, metaspace, space, }) {
|
|
245
|
+
const lc = `${this.lc}[${this.addPools.name}]`;
|
|
377
246
|
try {
|
|
378
247
|
if (logalot) {
|
|
379
|
-
console.log(`${lc} starting
|
|
248
|
+
console.log(`${lc} starting...`);
|
|
380
249
|
}
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
throw new Error(`(UNEXPECTED) space was falsy and we couldn't get default local user space from metaspace? (E: 9a6498cf16a8801f19ec376749742225)`);
|
|
250
|
+
if (!latestKeystone.data) {
|
|
251
|
+
throw new Error(`(UNEXPECTED) latestKeystone.data falsy? (E: 7334c8faed128166a999d428c7805b25)`);
|
|
384
252
|
}
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
ib: await getKeystoneIb({ keystoneData: data }),
|
|
389
|
-
data,
|
|
390
|
-
dna: false,
|
|
391
|
-
nCounter: true,
|
|
392
|
-
tjp: {
|
|
393
|
-
timestamp: true,
|
|
394
|
-
uuid: true,
|
|
395
|
-
},
|
|
396
|
-
});
|
|
397
|
-
const keystoneIbGib = resFirstGen.newIbGib;
|
|
398
|
-
if (!keystoneIbGib.data) {
|
|
399
|
-
throw new Error(`(UNEXPECTED) keystoneIbGib.data falsy? We expect the data to be populated with real keystone data. (E: 38a358facdb89d16d81d48c8520d3d25)`);
|
|
400
|
-
}
|
|
401
|
-
if (!keystoneIbGib.rel8ns) {
|
|
402
|
-
throw new Error(`(UNEXPECTED) keystoneIbGib.rel8ns falsy? we expect the rel8ns to have ancestor and past. (E: 20cb7723dc33ae1ef808fe76d1bf4b25)`);
|
|
403
|
-
}
|
|
404
|
-
if (!keystoneIbGib.rel8ns.past || keystoneIbGib.rel8ns.past.length === 0) {
|
|
405
|
-
throw new Error(`(UNEXPECTED) keystoneIbGib.rel8ns.past falsy or empty? we expect the firstGen call to generate an interstitial ibgib that we will splice out. (E: 0fd8388d045ab9f37834c27d67e78825)`);
|
|
253
|
+
const prevData = latestKeystone.data;
|
|
254
|
+
if (prevData.revocationInfo) {
|
|
255
|
+
throw new Error(`Keystone has been revoked. Cannot add pools. (E: 8599f8f51c78d722252ddb2894fdbe25)`);
|
|
406
256
|
}
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
// reset tjp
|
|
410
|
-
keystoneIbGib.data.isTjp = true;
|
|
411
|
-
delete keystoneIbGib.rel8ns.tjp;
|
|
412
|
-
// reset past
|
|
413
|
-
delete keystoneIbGib.rel8ns.past;
|
|
414
|
-
// recalculate gib
|
|
415
|
-
keystoneIbGib.gib = await getGib({ ibGib: keystoneIbGib });
|
|
416
|
-
// save and register
|
|
417
|
-
await metaspace.put({ ibGib: keystoneIbGib, space, });
|
|
418
|
-
await metaspace.registerNewIbGib({ ibGib: keystoneIbGib, space, });
|
|
419
|
-
return keystoneIbGib;
|
|
420
|
-
}
|
|
421
|
-
catch (error) {
|
|
422
|
-
console.error(`${lc} ${extractErrorMsg(error)}`);
|
|
423
|
-
throw error;
|
|
424
|
-
}
|
|
425
|
-
finally {
|
|
426
|
-
if (logalot) {
|
|
427
|
-
console.log(`${lc} complete.`);
|
|
257
|
+
if (newPools.length === 0) {
|
|
258
|
+
throw new Error(`No new pools provided to add. (E: 6599f8f51c78d722252ddb2894fdbe25)`);
|
|
428
259
|
}
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
260
|
+
// 1. Identify Authority (Resolve Admin Pool)
|
|
261
|
+
// We need a pool that allows the 'manage' verb.
|
|
262
|
+
const adminPool = resolveTargetPool({
|
|
263
|
+
pools: prevData.challengePools,
|
|
264
|
+
verb: KEYSTONE_VERB_MANAGE,
|
|
265
|
+
});
|
|
434
266
|
if (logalot) {
|
|
435
|
-
console.log(`${lc}
|
|
436
|
-
}
|
|
437
|
-
if (!prevIbGib.data) {
|
|
438
|
-
throw new Error(`(UNEXPECTED) prevIbGib.data falsy? (E: 5e84875bf992c585b979e6c8ed5bf225)`);
|
|
439
|
-
}
|
|
440
|
-
if (prevIbGib.data.revocationInfo) {
|
|
441
|
-
throw new Error(`Keystone has already been revoked (prevIbGib.data.revocationInfo truthy), so we cannot evolve the keystone. Keystone addr: ${getIbGibAddr({ ibGib: prevIbGib })} (E: 45d7f846556829de6b2a701838c3f825)`);
|
|
267
|
+
console.log(`${lc} Authorized via pool: ${adminPool.id}`);
|
|
442
268
|
}
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
dataToRemove.challengePools = [];
|
|
456
|
-
}
|
|
457
|
-
if (prevData.frameDetails) {
|
|
458
|
-
dataToRemove.frameDetails = {};
|
|
459
|
-
}
|
|
460
|
-
if (Object.keys(dataToRemove).length === 0) {
|
|
461
|
-
dataToRemove = undefined;
|
|
462
|
-
}
|
|
463
|
-
const resMut8 = await mut8({
|
|
464
|
-
src: prevIbGib,
|
|
465
|
-
dataToRemove,
|
|
466
|
-
dataToAddOrPatch: newData,
|
|
467
|
-
// dna: false, // explicitly set to false just to show
|
|
468
|
-
nCounter: true,
|
|
269
|
+
// 2. Construct the Management Claim
|
|
270
|
+
const target = getIbGibAddr({ ibGib: latestKeystone });
|
|
271
|
+
const claim = {
|
|
272
|
+
verb: KEYSTONE_VERB_MANAGE,
|
|
273
|
+
target, // I am managing myself
|
|
274
|
+
// Scope creates a cryptographic commitment to WHICH pools are being added
|
|
275
|
+
scope: JSON.stringify({ add: newPools.map(p => p.id) })
|
|
276
|
+
};
|
|
277
|
+
// 3. Calculate Costs
|
|
278
|
+
const idsToSolve = selectChallengeIds({
|
|
279
|
+
pool: adminPool,
|
|
280
|
+
targetAddr: target
|
|
469
281
|
});
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
}
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
const errors = await this.validate({
|
|
479
|
-
currentIbGib: newKeystoneIbGib,
|
|
480
|
-
prevIbGib,
|
|
282
|
+
// 4. Pay the Cost (Solve & Replenish)
|
|
283
|
+
// This authorizes the change by evolving the admin pool.
|
|
284
|
+
const { proof, nextPools: replenishedExistingPools } = await solveAndReplenish({
|
|
285
|
+
targetPoolId: adminPool.id,
|
|
286
|
+
prevPools: prevData.challengePools,
|
|
287
|
+
masterSecret,
|
|
288
|
+
challengeIds: idsToSolve,
|
|
289
|
+
claim,
|
|
481
290
|
});
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
291
|
+
// 5. Mutate Structure (Add the new pools)
|
|
292
|
+
// We verify ID uniqueness cheaply here to prevent blatant errors
|
|
293
|
+
const existingIds = new Set(replenishedExistingPools.map(p => p.id));
|
|
294
|
+
for (const newPool of newPools) {
|
|
295
|
+
if (existingIds.has(newPool.id)) {
|
|
296
|
+
throw new Error(`Cannot add pool. ID collision: ${newPool.id} (E: 8a4c2b1d3e5f6a7b8c9d0e1f2a3b4c5d)`);
|
|
297
|
+
}
|
|
485
298
|
}
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
299
|
+
const finalPools = [...replenishedExistingPools, ...newPools];
|
|
300
|
+
// 6. Construct New Data
|
|
301
|
+
const newData = {
|
|
302
|
+
challengePools: finalPools,
|
|
303
|
+
proofs: [proof], // The proof authorizes the structure change
|
|
304
|
+
};
|
|
305
|
+
// 7. Commit
|
|
306
|
+
const newKeystone = await evolvePersistAndRegisterKeystone({
|
|
307
|
+
prevIbGib: latestKeystone,
|
|
308
|
+
newData,
|
|
309
|
+
metaspace,
|
|
310
|
+
space
|
|
311
|
+
});
|
|
312
|
+
return newKeystone;
|
|
490
313
|
}
|
|
491
314
|
catch (error) {
|
|
492
315
|
console.error(`${lc} ${extractErrorMsg(error)}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keystone-service-v1.mjs","sourceRoot":"","sources":["../../src/keystone/keystone-service-v1.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,iDAAiD,CAAC;AAChG,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,2CAA2C,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAc,MAAM,uDAAuD,CAAC;AAI3F,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAQH,yBAAyB,EAEzB,wCAAwC,GAC3C,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAC/F,OAAO,EACH,eAAe,EAAE,4BAA4B,EAAE,aAAa,EAC5D,oBAAoB,EACpB,0BAA0B,GAE7B,MAAM,wBAAwB,CAAC;AAMhC,MAAM,OAAO,GAAG,gBAAgB,IAAI,IAAI,CAAC;AAEzC;;;;GAIG;AACH,MAAM,OAAO,kBAAkB;IACjB,EAAE,GAAW,IAAI,kBAAkB,CAAC,IAAI,GAAG,CAAC;IAEtD;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,EACV,YAAY,EACZ,OAAO,EACP,SAAS,EACT,KAAK,GAMR;QACG,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC;QAC9C,IAAI,CAAC;YACD,IAAI,OAAO,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,oDAAoD,CAAC,CAAC;YAAC,CAAC;YAExF,MAAM,cAAc,GAA4B,EAAE,CAAC;YAEnD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC3B,MAAM,QAAQ,GAAG,uBAAuB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC5D,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC;gBACrE,MAAM,UAAU,GAA0B,EAAE,CAAC;gBAC7C,MAAM,UAAU,GAAiC,EAAE,CAAC;gBAEpD,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACxC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;gBAExC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;oBAClC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC;wBACrD,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;qBACzC,CAAC,CAAC;oBAEH,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC;wBAC7C,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW;qBAC/C,CAAC,CAAC;oBACH,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;oBACjE,UAAU,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC;oBAEpC,uBAAuB;oBACvB,eAAe,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;gBAC7C,CAAC;gBAED,cAAc,CAAC,IAAI,CAAC;oBAChB,EAAE,EAAE,MAAM,CAAC,IAAI;oBACf,MAAM;oBACN,UAAU;oBACV,UAAU;iBACb,CAAC,CAAC;YACP,CAAC;YAED,MAAM,IAAI,GAAoB,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;YAC7D,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;YACrF,OAAO,aAAa,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACjD,MAAM,KAAK,CAAC;QAChB,CAAC;gBAAS,CAAC;YACP,IAAI,OAAO,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAAC,CAAC;QACpD,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI,CAAC,EACP,cAAc,EACd,YAAY,EACZ,KAAK,EACL,MAAM,EACN,oBAAoB,GAAG,EAAE,EACzB,YAAY,EACZ,SAAS,EACT,KAAK,GAUR;QACG,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;QAC3C,IAAI,CAAC;YACD,IAAI,OAAO,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,oDAAoD,CAAC,CAAC;YAAC,CAAC;YAExF,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAK,CAAC;YACtC,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAAC,MAAM,IAAI,KAAK,CAAC,kHAAkH,CAAC,CAAC;YAAC,CAAC;YAErK,IAAI,IAAuC,CAAC;YAC5C,MAAM,aAAa,GAAG,QAAQ,CAAC,cAAc,CAAC;YAC9C,IAAI,OAAO,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,qBAAqB,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC;YAAC,CAAC;YAElI,kEAAkE;YAClE,6CAA6C;YAC7C,kEAAkE;YAClE,IAAI,MAAM,EAAE,CAAC;gBACT,qBAAqB;gBACrB,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;gBAChD,IAAI,CAAC,IAAI,EAAE,CAAC;oBAAC,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,eAAe,CAAC,CAAC;gBAAC,CAAC;gBAEzE,uCAAuC;gBACvC,oEAAoE;gBACpE,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBAChF,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;wBACjD,MAAM,IAAI,KAAK,CAAC,QAAQ,MAAM,gCAAgC,KAAK,CAAC,IAAI,eAAe,CAAC,CAAC;oBAC7F,CAAC;gBACL,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,qCAAqC;gBACrC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;oBAAC,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;gBAAC,CAAC;gBAE3G,6BAA6B;gBAC7B,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAC1B,CAAC,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAK,CAAC,CACvE,CAAC;gBAEF,gDAAgD;gBAChD,IAAI,CAAC,IAAI,EAAE,CAAC;oBACR,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAC1B,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,CAC/D,CAAC;gBACN,CAAC;gBAED,IAAI,CAAC,IAAI,EAAE,CAAC;oBAAC,MAAM,IAAI,KAAK,CAAC,oCAAoC,KAAK,CAAC,IAAI,eAAe,CAAC,CAAC;gBAAC,CAAC;YAClG,CAAC;YAGD,iEAAiE;YACjE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,4BAA4B,CAAC;gBAChE,IAAI;gBACJ,oBAAoB;gBACpB,UAAU,EAAE,KAAK,CAAC,MAAM;aAC3B,CAAC,CAAC;YAEH,0BAA0B;YAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC;YACxD,MAAM,SAAS,GAAa,EAAE,CAAC;YAE/B,IAAI,OAAO,EAAE,CAAC;gBACV,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,kBAAkB,IAAI,CAAC,EAAE,YAAY,CAAC,IAAI,SAAS,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;gBACjH,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,kBAAkB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,SAAS,WAAW,YAAY,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,CAAC;gBACrJ,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,4BAA4B,YAAY,CAAC,IAAI,cAAc,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;YACvG,CAAC;YAED,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;gBAClB,IAAI,YAAY,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC;oBACpC,MAAM,IAAI,KAAK,CAAC,wDAAwD,WAAW,UAAU,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;gBACxH,CAAC;gBACD,iBAAiB;gBACjB,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC9D,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;YACtD,CAAC;YAED,qBAAqB;YACrB,MAAM,gBAAgB,GAAG,CAAC,GAAG,YAAY,EAAE,GAAG,SAAS,CAAC,CAAC;YAEzD,MAAM,QAAQ,GAAG,uBAAuB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACzE,MAAM,WAAW,GAAG,YAAY,CAAC;YACjC,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC;YAClF,MAAM,SAAS,GAAuB,EAAE,CAAC;YAEzC,KAAK,MAAM,EAAE,IAAI,gBAAgB,EAAE,CAAC;gBAChC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC;oBAC7C,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE;iBAC/C,CAAC,CAAC;gBACH,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7B,CAAC;YAED,eAAe;YACf,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC;gBACpD,SAAS,EAAE,aAAa;gBACxB,YAAY,EAAE,IAAI,CAAC,EAAE;gBACrB,WAAW,EAAE,gBAAgB;gBAC7B,YAAY,EAAE,WAAW;gBACzB,QAAQ;gBACR,MAAM,EAAE,IAAI,CAAC,MAAM;aACtB,CAAC,CAAC;YAEH,iDAAiD;YACjD,MAAM,KAAK,GAAkB;gBACzB,KAAK;gBACL,SAAS;gBACT,oBAAoB,EAAE,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,SAAS;aAC3F,CAAC;YAEF,MAAM,OAAO,GAAoB;gBAC7B,cAAc,EAAE,SAAS;gBACzB,MAAM,EAAE,CAAC,KAAK,CAAC;gBACf,YAAY;aACf,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;YAC9G,OAAO,QAAQ,CAAC;QAEpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACjD,MAAM,KAAK,CAAC;QAChB,CAAC;gBAAS,CAAC;YACP,IAAI,OAAO,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAAC,CAAC;QACpD,CAAC;IACL,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,QAAQ,CAAC,EACX,YAAY,EACZ,SAAS,GAIZ;QACG,oEAAoE;QACpE,4DAA4D;QAC5D,MAAM,MAAM,GAAG,MAAM,0BAA0B,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC;QAC7E,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,MAAM,CAAC,EACT,cAAc,EACd,YAAY,EACZ,MAAM,GAAG,2BAA2B,EACpC,YAAY,EACZ,SAAS,EACT,KAAK,GAQR;QACG,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;QAC7C,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAK,CAAC;YACtC,KAAK,KAAK,MAAM,SAAS,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7D,IAAI,CAAC,KAAK,EAAE,CAAC;gBAAC,MAAM,IAAI,KAAK,CAAC,8HAA8H,CAAC,CAAC;YAAC,CAAC;YAEhK,0BAA0B;YAC1B,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,cAAc,CAAC,CAAC;YACxE,IAAI,CAAC,IAAI,EAAE,CAAC;gBAAC,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;YAAC,CAAC;YAElG,kDAAkD;YAClD,MAAM,KAAK,GAA2B;gBAClC,IAAI,EAAE,oBAAoB;gBAC1B,MAAM,EAAE,YAAY,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;aAClD,CAAC;YAEF,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,4BAA4B,CAAC;gBAChE,IAAI;gBACJ,oBAAoB,EAAE,EAAE,EAAE,mDAAmD;gBAC7E,UAAU,EAAE,KAAK,CAAC,MAAM;aAC3B,CAAC,CAAC;YAEH,uBAAuB;YACvB,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC;YACxD,MAAM,SAAS,GAAa,EAAE,CAAC;YAC/B,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;gBAClB,IAAI,YAAY,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC;oBAAC,MAAM,IAAI,KAAK,CAAC,iDAAiD,YAAY,CAAC,MAAM,yCAAyC,WAAW,yCAAyC,CAAC,CAAC;gBAAC,CAAC;gBAC9N,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC9D,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;YACtD,CAAC;YAED,MAAM,WAAW,GAAG,CAAC,GAAG,YAAY,EAAE,GAAG,SAAS,CAAC,CAAC;YACpD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAAC,MAAM,IAAI,KAAK,CAAC,uEAAuE,IAAI,CAAC,EAAE,kBAAkB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,wCAAwC,CAAC,CAAC;YAAC,CAAC;YAE/M,oBAAoB;YACpB,MAAM,QAAQ,GAAG,uBAAuB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACzE,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC;YACrE,MAAM,SAAS,GAAuB,EAAE,CAAC;YAEzC,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;gBAC3B,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC;oBAC7C,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE;iBAC/C,CAAC,CAAC;gBACH,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7B,CAAC;YAED,gCAAgC;YAChC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC;gBACpD,SAAS,EAAE,QAAQ,CAAC,cAAc;gBAClC,YAAY,EAAE,IAAI,CAAC,EAAE;gBACrB,WAAW,EAAE,WAAW;gBACxB,YAAY;gBACZ,QAAQ;gBACR,MAAM,EAAE,IAAI,CAAC,MAAM;aACtB,CAAC,CAAC;YAEH,qBAAqB;YACrB,MAAM,KAAK,GAAkB;gBACzB,KAAK;gBACL,SAAS;aACZ,CAAC;YAEF,MAAM,cAAc,GAA2B,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;YAEjE,MAAM,OAAO,GAAoB;gBAC7B,cAAc,EAAE,SAAS;gBACzB,MAAM,EAAE,CAAC,KAAK,CAAC;gBACf,cAAc;gBACd,YAAY;aACf,CAAC;YAEF,OAAO,MAAM,IAAI,CAAC,uBAAuB,CAAC;gBACtC,SAAS,EAAE,cAAc;gBACzB,OAAO;gBACP,SAAS;gBACT,KAAK;aACR,CAAC,CAAC;QAEP,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACjD,MAAM,KAAK,CAAC;QAChB,CAAC;gBAAS,CAAC;YACP,IAAI,OAAO,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAAC,CAAC;QACpD,CAAC;IACL,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,yBAAyB,CAAC,EACpC,IAAI,EACJ,SAAS,EACT,KAAK,EAKR;QACG,sCAAsC;QACtC,wDAAwD;QACxD,kEAAkE;QAClE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,GAAG,SAAS,GAAG,KAAK,EAAE,EAAE,CAAC,CAAC;QAC7D,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChC,CAAC;IAEO,KAAK,CAAC,0BAA0B,CAAC,EACrC,SAAS,EACT,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,MAAM,EAQT;QACG,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;QACvD,IAAI,OAAO,EAAE,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,yDAAyD,SAAS,KAAK,QAAQ,oBAAoB,CAAC,CAAC;QAAC,CAAC;QAClI,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,YAAY,CAAC,CAAC;QACxE,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,eAAe,YAAY,qEAAqE,CAAC,CAAC;QAAC,CAAC;QAC5I,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QAEjC,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC;QACrE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;QAExC,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;QAE/C,wCAAwC;QACxC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YACrB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QAEH,IAAI,YAAY,KAAK,yBAAyB,CAAC,KAAK,EAAE,CAAC;YACnD,kBAAkB;YAClB,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;YAEtD,UAAU;YACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC1C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC;oBAC/C,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;iBACzC,CAAC,CAAC;gBAEH,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC;oBAC7C,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK;iBAClD,CAAC,CAAC;gBACH,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,MAAM,QAAQ,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAExE,qBAAqB;gBACrB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;oBAAC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;gBAAC,CAAC;gBAC/C,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAC5C,CAAC;QACL,CAAC;aAAM,IAAI,YAAY,KAAK,yBAAyB,CAAC,UAAU,EAAE,CAAC;YAC/D,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;YACrB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;YAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC;oBAC/C,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;iBACzC,CAAC,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC;oBAC7C,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK;iBAClD,CAAC,CAAC;gBACH,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,MAAM,QAAQ,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACxE,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAC5C,CAAC;QACL,CAAC;aAAM,IAAI,YAAY,KAAK,yBAAyB,CAAC,OAAO,EAAE,CAAC;YAC5D,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1D,CAAC;aAAM,IAAI,YAAY,KAAK,yBAAyB,CAAC,aAAa,EAAE,CAAC;YAClE,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;YACrB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACzB,CAAC;aAAM,CAAC;YACJ,MAAM,IAAI,KAAK,CAAC,+BAA+B,YAAY,iBAAiB,MAAM,CAAC,wCAAwC,CAAC,wCAAwC,CAAC,CAAC;QAC1K,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,uBAAuB,CAAC,EAClC,IAAI,EACJ,SAAS,EACT,KAAK,GAKR;QACG,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,uBAAuB,CAAC,IAAI,GAAG,CAAC;QAC9D,IAAI,CAAC;YACD,IAAI,OAAO,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,oDAAoD,CAAC,CAAC;YAAC,CAAC;YAExF,KAAK,KAAK,MAAM,SAAS,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7D,IAAI,CAAC,KAAK,EAAE,CAAC;gBAAC,MAAM,IAAI,KAAK,CAAC,iIAAiI,CAAC,CAAC;YAAC,CAAC;YAEnK,kCAAkC;YAClC,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC;gBAC1C,WAAW,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC;gBACxD,EAAE,EAAE,MAAM,aAAa,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;gBAC/C,IAAI;gBACJ,GAAG,EAAE,KAAK;gBACV,QAAQ,EAAE,IAAI;gBACd,GAAG,EAAE;oBACD,SAAS,EAAE,IAAI;oBACf,IAAI,EAAE,IAAI;iBACb;aACJ,CAAsC,CAAC;YACxC,MAAM,aAAa,GAAG,WAAW,CAAC,QAAQ,CAAC;YAE3C,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;gBAAC,MAAM,IAAI,KAAK,CAAC,0IAA0I,CAAC,CAAC;YAAC,CAAC;YACzL,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;gBAAC,MAAM,IAAI,KAAK,CAAC,gIAAgI,CAAC,CAAC;YAAC,CAAC;YACjL,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvE,MAAM,IAAI,KAAK,CAAC,qLAAqL,CAAC,CAAC;YAC3M,CAAC;YAED,UAAU;YACV,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACzB,YAAY;YACZ,aAAa,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAChC,OAAO,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC;YAChC,aAAa;YACb,OAAO,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC;YAEjC,kBAAkB;YAClB,aAAa,CAAC,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;YAE3D,oBAAoB;YACpB,MAAM,SAAS,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,GAAG,CAAC,CAAC;YACtD,MAAM,SAAS,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,GAAG,CAAC,CAAC;YAEnE,OAAO,aAAa,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACjD,MAAM,KAAK,CAAC;QAChB,CAAC;gBAAS,CAAC;YACP,IAAI,OAAO,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAAC,CAAC;QACpD,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,uBAAuB,CAAC,EAClC,SAAS,EACT,OAAO,EACP,SAAS,EACT,KAAK,GAMR;QACG,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,uBAAuB,CAAC,IAAI,GAAG,CAAC;QAC9D,IAAI,CAAC;YACD,IAAI,OAAO,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,oDAAoD,CAAC,CAAC;YAAC,CAAC;YAExF,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;gBAAC,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;YAAC,CAAC;YACrH,IAAI,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;gBAAC,MAAM,IAAI,KAAK,CAAC,8HAA8H,YAAY,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,wCAAwC,CAAC,CAAC;YAAC,CAAC;YAEjQ,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC;YAChC;;;;;eAKG;YACH,IAAI,YAAY,GAAyC,EAAE,CAAA;YAC3D,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAAC,YAAY,CAAC,MAAM,GAAG,EAAE,CAAC;YAAC,CAAC;YAClD,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAAC,YAAY,CAAC,cAAc,GAAG,EAAE,CAAC;YAAC,CAAC;YAClE,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;gBAAC,YAAY,CAAC,YAAY,GAAG,EAAE,CAAC;YAAC,CAAC;YAC9D,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAAC,YAAY,GAAG,SAAS,CAAC;YAAC,CAAC;YAEzE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC;gBACvB,GAAG,EAAE,SAAS;gBACd,YAAY;gBACZ,gBAAgB,EAAE,OAAO;gBACzB,sDAAsD;gBACtD,QAAQ,EAAE,IAAI;aACjB,CAAC,CAAC;YAEH,IAAI,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;gBAAC,MAAM,IAAI,KAAK,CAAC,uOAAuO,CAAC,CAAC;YAAC,CAAC;YAC/R,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBAAC,MAAM,IAAI,KAAK,CAAC,6GAA6G,CAAC,CAAC;YAAC,CAAC;YAGvJ,MAAM,gBAAgB,GAAG,OAAO,CAAC,QAA4B,CAAC;YAE9D,sBAAsB;YACtB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC;gBAC/B,YAAY,EAAE,gBAAgB;gBAC9B,SAAS;aACZ,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,wBAAwB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAChE,MAAM,IAAI,KAAK,CAAC,mEAAmE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;YAClJ,CAAC;YAED,oBAAoB;YACpB,MAAM,SAAS,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,GAAG,CAAC,CAAC;YACzD,MAAM,SAAS,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,GAAG,CAAC,CAAC;YAEtE,OAAO,gBAAgB,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACjD,MAAM,KAAK,CAAC;QAChB,CAAC;gBAAS,CAAC;YACP,IAAI,OAAO,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAAC,CAAC;QACpD,CAAC;IACL,CAAC;CACJ"}
|
|
1
|
+
{"version":3,"file":"keystone-service-v1.mjs","sourceRoot":"","sources":["../../src/keystone/keystone-service-v1.mts"],"names":[],"mappings":"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"}
|