@engramx/client 0.7.2 → 0.7.4-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/lineage.d.ts +39 -0
- package/dist/lineage.js +119 -0
- package/dist/lineage.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -96,6 +96,36 @@ const backups = await engram.listBackups('sqlite');
|
|
|
96
96
|
const data = await engram.pullBackupChunk(backupId, 0);
|
|
97
97
|
```
|
|
98
98
|
|
|
99
|
+
## Verify canonical lineage
|
|
100
|
+
|
|
101
|
+
An engram's own `getSpawnedBy()` is a self-report — any fork can claim any spawner.
|
|
102
|
+
The authoritative fact is the registry's testimony: its public, free
|
|
103
|
+
`getCustodyMode(engramId)` query answers `"managed"`/`"sovereign"` only for engrams
|
|
104
|
+
it actually spawned, and `"unknown"` for everything else. The SDK wraps the whole
|
|
105
|
+
check — registry testimony plus a certified (subnet-signed, not self-reported)
|
|
106
|
+
`module_hash` comparison against the registry's attested template — in one call:
|
|
107
|
+
|
|
108
|
+
```typescript
|
|
109
|
+
import { verifyCanonicalLineage } from '@engramx/client';
|
|
110
|
+
|
|
111
|
+
const verdict = await verifyCanonicalLineage(engramId, agent);
|
|
112
|
+
// verdict.lineage:
|
|
113
|
+
// 'canonical' — the canonical registry vouches for it (managed custody)
|
|
114
|
+
// 'canonical-sovereign' — canonical lineage, owner-held keys (code may lawfully differ)
|
|
115
|
+
// 'not-canonical' — the registry does not know it (staging fleet or fork;
|
|
116
|
+
// verdict.spawnedBy hints which — an unverified self-report)
|
|
117
|
+
// 'indeterminate' — the registry could not be asked; NOT evidence either way
|
|
118
|
+
// verdict.codeMatchesCanonicalTemplate: true | false | 'unknown'
|
|
119
|
+
// certified live module hash vs the registry's current template. Lineage ≠ code:
|
|
120
|
+
// false on a managed engram usually just means one release behind, not suspect.
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
The canonical registry id ships in the SDK as `CANONICAL_REGISTRY_CANISTER_ID`
|
|
124
|
+
(empty until the production fleet is live — while empty, calls without an explicit
|
|
125
|
+
registry report `'indeterminate'` by design). Pass `{ registryId }` to ask a
|
|
126
|
+
different fleet (e.g. staging); the answer is then *that fleet's* testimony, not
|
|
127
|
+
canonicity.
|
|
128
|
+
|
|
99
129
|
## OpenClaw Integration
|
|
100
130
|
|
|
101
131
|
The `--target openclaw` option on `pair` handles plugin installation and `openclaw.json` configuration automatically. For manual setup or customization, see [integrations/openclaw/README.md](../../integrations/openclaw/README.md).
|
package/dist/index.d.ts
CHANGED
|
@@ -36,3 +36,4 @@ export type { SignedTransaction, SignedAuthorization, SignedTypedData } from '@i
|
|
|
36
36
|
export type { ServiceDefinition, Job, JobStatus, PricingScheme, VerificationMethod, } from '@ic402/client';
|
|
37
37
|
export { Ic402Error, probeX402, fetchX402, findPaymentOption } from '@ic402/client';
|
|
38
38
|
export { broadcastTransaction, pollReceipt, registerAgent } from '@ic402/client';
|
|
39
|
+
export { verifyCanonicalLineage, classifyLineage, CANONICAL_REGISTRY_CANISTER_ID, type LineageVerdict, type CustodyMode, } from './lineage.js';
|
package/dist/index.js
CHANGED
|
@@ -21,4 +21,7 @@ export { Ic402Client } from '@ic402/client';
|
|
|
21
21
|
export { signVoucher, encodeVoucherPayload } from '@ic402/client';
|
|
22
22
|
export { Ic402Error, probeX402, fetchX402, findPaymentOption } from '@ic402/client';
|
|
23
23
|
export { broadcastTransaction, pollReceipt, registerAgent } from '@ic402/client';
|
|
24
|
+
// Canonical-lineage verification — the one-call check for agents/relying parties: is this
|
|
25
|
+
// engram canonically spawned (registry testimony), and does it run the attested template?
|
|
26
|
+
export { verifyCanonicalLineage, classifyLineage, CANONICAL_REGISTRY_CANISTER_ID, } from './lineage.js';
|
|
24
27
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAG1E,wDAAwD;AACxD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC,qDAAqD;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,2CAA2C;AAC3C,OAAO,EAAE,YAAY,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACjF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE3E,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE3F,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,eAAe,EACf,wBAAwB,GACzB,MAAM,cAAc,CAAC;AAWtB,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC7F,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAwD5C,iEAAiE;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AASlE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACpF,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAG1E,wDAAwD;AACxD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC,qDAAqD;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,2CAA2C;AAC3C,OAAO,EAAE,YAAY,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACjF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE3E,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE3F,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,eAAe,EACf,wBAAwB,GACzB,MAAM,cAAc,CAAC;AAWtB,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC7F,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAwD5C,iEAAiE;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AASlE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACpF,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEjF,0FAA0F;AAC1F,0FAA0F;AAC1F,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,8BAA8B,GAG/B,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type HttpAgent } from '@icp-sdk/core/agent';
|
|
2
|
+
/** The canonical registry — SET AT FLEET DEPLOY (empty until then, like @engramx/owner's
|
|
3
|
+
* config). While empty, verification without an explicit registryId reports 'indeterminate'
|
|
4
|
+
* rather than guessing. */
|
|
5
|
+
export declare const CANONICAL_REGISTRY_CANISTER_ID = "";
|
|
6
|
+
export type CustodyMode = 'managed' | 'sovereign' | 'unknown';
|
|
7
|
+
export interface LineageVerdict {
|
|
8
|
+
/** The verdict:
|
|
9
|
+
* - 'canonical' — the canonical registry vouches it spawned this engram (managed).
|
|
10
|
+
* - 'canonical-sovereign' — canonical lineage, but the owner holds custody (code may differ).
|
|
11
|
+
* - 'not-canonical' — the canonical registry does not know this engram (staging or fork;
|
|
12
|
+
* `spawnedBy` hints at which fleet).
|
|
13
|
+
* - 'indeterminate' — no canonical registry to ask (constant unset and none passed), or
|
|
14
|
+
* the registry was unreachable. NOT evidence either way. */
|
|
15
|
+
lineage: 'canonical' | 'canonical-sovereign' | 'not-canonical' | 'indeterminate';
|
|
16
|
+
/** The engram's own (forgeable) claim of its spawning registry — a hint, never proof. */
|
|
17
|
+
spawnedBy: string | null;
|
|
18
|
+
/** The canonical registry's testimony (authoritative); null when it could not be asked. */
|
|
19
|
+
custodyMode: CustodyMode | null;
|
|
20
|
+
/** Certified live module hash vs the canonical registry's attested template.
|
|
21
|
+
* 'unknown' when either side could not be read. See the module comment: false ≠ suspect. */
|
|
22
|
+
codeMatchesCanonicalTemplate: boolean | 'unknown';
|
|
23
|
+
/** Which registry actually testified (echo of the id used). */
|
|
24
|
+
registryChecked: string | null;
|
|
25
|
+
}
|
|
26
|
+
/** Pure classification — exported for tests. */
|
|
27
|
+
export declare function classifyLineage(custody: CustodyMode | null, registryAsked: boolean): LineageVerdict['lineage'];
|
|
28
|
+
/**
|
|
29
|
+
* Verify an engram's canonical lineage in one call.
|
|
30
|
+
*
|
|
31
|
+
* @param engramId the engram canister id to verify
|
|
32
|
+
* @param agent an HttpAgent pointed at the IC (anonymous is fine — every read is public)
|
|
33
|
+
* @param opts.registryId override the canonical registry (defaults to
|
|
34
|
+
* CANONICAL_REGISTRY_CANISTER_ID; REQUIRED in practice until that constant is set at
|
|
35
|
+
* fleet deploy — without it the verdict is 'indeterminate' by design, never a guess)
|
|
36
|
+
*/
|
|
37
|
+
export declare function verifyCanonicalLineage(engramId: string, agent: HttpAgent, opts?: {
|
|
38
|
+
registryId?: string;
|
|
39
|
+
}): Promise<LineageVerdict>;
|
package/dist/lineage.js
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
// lineage.ts — canonical-lineage verification: the one-call check that tells an agent (or any
|
|
2
|
+
// relying party) whether an engram belongs to the canonical EngramX fleet, is a staging/fork
|
|
3
|
+
// engram, or cannot be determined.
|
|
4
|
+
//
|
|
5
|
+
// TRUST MODEL (why two hops): an engram's own claim about its origin is FORGEABLE — any fork can
|
|
6
|
+
// say "I am canonical". The authoritative watermark is the CANONICAL REGISTRY'S OWN TESTIMONY:
|
|
7
|
+
// its public, free getCustodyMode(engramId) answers "managed"/"sovereign" only for engrams it
|
|
8
|
+
// actually spawned, and "unknown" for everything else. The engram-side getSpawnedBy() is kept as
|
|
9
|
+
// a hint (useful for classifying which non-canonical fleet an engram belongs to), never as proof.
|
|
10
|
+
//
|
|
11
|
+
// LINEAGE vs CODE — deliberately separate facts: canonical lineage proves the canonical registry
|
|
12
|
+
// spawned this canister; it does NOT prove the canister still runs canonical code (a sovereign
|
|
13
|
+
// engram may legitimately run modified code). codeMatchesCanonicalTemplate compares the LIVE
|
|
14
|
+
// certified module hash (read_state — subnet-signed, not self-reported) against the canonical
|
|
15
|
+
// registry's current attested template. A managed engram one release behind will read `false`
|
|
16
|
+
// here without being suspect; treat lineage as the trust fact and the code bit as freshness.
|
|
17
|
+
import { Actor, CanisterStatus } from '@icp-sdk/core/agent';
|
|
18
|
+
import { Principal } from '@icp-sdk/core/principal';
|
|
19
|
+
/** The canonical registry — SET AT FLEET DEPLOY (empty until then, like @engramx/owner's
|
|
20
|
+
* config). While empty, verification without an explicit registryId reports 'indeterminate'
|
|
21
|
+
* rather than guessing. */
|
|
22
|
+
export const CANONICAL_REGISTRY_CANISTER_ID = '';
|
|
23
|
+
const engramLineageIdl = ({ IDL }) => IDL.Service({ getSpawnedBy: IDL.Func([], [IDL.Opt(IDL.Principal)], ['query']) });
|
|
24
|
+
const registryLineageIdl = ({ IDL }) => IDL.Service({
|
|
25
|
+
getCustodyMode: IDL.Func([IDL.Principal], [IDL.Text], ['query']),
|
|
26
|
+
getEngramWasmHash: IDL.Func([], [IDL.Text], ['query']),
|
|
27
|
+
});
|
|
28
|
+
/** Pure classification — exported for tests. */
|
|
29
|
+
export function classifyLineage(custody, registryAsked) {
|
|
30
|
+
if (!registryAsked || custody === null)
|
|
31
|
+
return 'indeterminate';
|
|
32
|
+
if (custody === 'managed')
|
|
33
|
+
return 'canonical';
|
|
34
|
+
if (custody === 'sovereign')
|
|
35
|
+
return 'canonical-sovereign';
|
|
36
|
+
return 'not-canonical';
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Verify an engram's canonical lineage in one call.
|
|
40
|
+
*
|
|
41
|
+
* @param engramId the engram canister id to verify
|
|
42
|
+
* @param agent an HttpAgent pointed at the IC (anonymous is fine — every read is public)
|
|
43
|
+
* @param opts.registryId override the canonical registry (defaults to
|
|
44
|
+
* CANONICAL_REGISTRY_CANISTER_ID; REQUIRED in practice until that constant is set at
|
|
45
|
+
* fleet deploy — without it the verdict is 'indeterminate' by design, never a guess)
|
|
46
|
+
*/
|
|
47
|
+
export async function verifyCanonicalLineage(engramId, agent, opts = {}) {
|
|
48
|
+
const registryId = opts.registryId ?? CANONICAL_REGISTRY_CANISTER_ID;
|
|
49
|
+
// Engram-side hint (forgeable — recorded, never trusted).
|
|
50
|
+
let spawnedBy = null;
|
|
51
|
+
try {
|
|
52
|
+
const engram = Actor.createActor(engramLineageIdl, { agent, canisterId: engramId });
|
|
53
|
+
const sb = (await engram['getSpawnedBy']());
|
|
54
|
+
spawnedBy = sb.length ? sb[0].toText() : null;
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
/* unreachable/frozen engram — the registry testimony below still stands on its own */
|
|
58
|
+
}
|
|
59
|
+
if (!registryId) {
|
|
60
|
+
return {
|
|
61
|
+
lineage: 'indeterminate',
|
|
62
|
+
spawnedBy,
|
|
63
|
+
custodyMode: null,
|
|
64
|
+
codeMatchesCanonicalTemplate: 'unknown',
|
|
65
|
+
registryChecked: null,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
// Registry-side testimony (authoritative).
|
|
69
|
+
let custody = null;
|
|
70
|
+
let templateHash = '';
|
|
71
|
+
try {
|
|
72
|
+
const registry = Actor.createActor(registryLineageIdl, { agent, canisterId: registryId });
|
|
73
|
+
const mode = (await registry['getCustodyMode'](Principal.fromText(engramId)));
|
|
74
|
+
custody = mode === 'managed' || mode === 'sovereign' ? mode : 'unknown';
|
|
75
|
+
try {
|
|
76
|
+
templateHash = (await registry['getEngramWasmHash']())
|
|
77
|
+
.replace(/^0x/, '')
|
|
78
|
+
.toLowerCase();
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
/* template hash unreadable — code check degrades to 'unknown' */
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
/* registry unreachable — indeterminate, never a guess */
|
|
86
|
+
}
|
|
87
|
+
// Code freshness: certified (subnet-signed) live module hash vs the attested template.
|
|
88
|
+
let codeMatches = 'unknown';
|
|
89
|
+
if (custody !== null && custody !== 'unknown' && templateHash) {
|
|
90
|
+
try {
|
|
91
|
+
const status = await CanisterStatus.request({
|
|
92
|
+
agent,
|
|
93
|
+
canisterId: Principal.fromText(engramId),
|
|
94
|
+
paths: ['module_hash'],
|
|
95
|
+
});
|
|
96
|
+
const raw = status.get('module_hash');
|
|
97
|
+
if (raw instanceof ArrayBuffer || ArrayBuffer.isView(raw)) {
|
|
98
|
+
const bytes = raw instanceof ArrayBuffer
|
|
99
|
+
? new Uint8Array(raw)
|
|
100
|
+
: new Uint8Array(raw.buffer, raw.byteOffset, raw.byteLength);
|
|
101
|
+
const liveHash = Array.from(bytes)
|
|
102
|
+
.map((b) => b.toString(16).padStart(2, '0'))
|
|
103
|
+
.join('');
|
|
104
|
+
codeMatches = liveHash === templateHash;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
/* read_state failed — 'unknown' */
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
lineage: classifyLineage(custody, true),
|
|
113
|
+
spawnedBy,
|
|
114
|
+
custodyMode: custody,
|
|
115
|
+
codeMatchesCanonicalTemplate: codeMatches,
|
|
116
|
+
registryChecked: registryId,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=lineage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lineage.js","sourceRoot":"","sources":["../src/lineage.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,6FAA6F;AAC7F,mCAAmC;AACnC,EAAE;AACF,iGAAiG;AACjG,+FAA+F;AAC/F,8FAA8F;AAC9F,iGAAiG;AACjG,kGAAkG;AAClG,EAAE;AACF,iGAAiG;AACjG,+FAA+F;AAC/F,6FAA6F;AAC7F,8FAA8F;AAC9F,8FAA8F;AAC9F,6FAA6F;AAC7F,OAAO,EAAE,KAAK,EAAE,cAAc,EAAkB,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD;;4BAE4B;AAC5B,MAAM,CAAC,MAAM,8BAA8B,GAAG,EAAE,CAAC;AAwBjD,MAAM,gBAAgB,GAAG,CAAC,EAAE,GAAG,EAAgB,EAAE,EAAE,CACjD,GAAG,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AAEnF,MAAM,kBAAkB,GAAG,CAAC,EAAE,GAAG,EAAgB,EAAE,EAAE,CACnD,GAAG,CAAC,OAAO,CAAC;IACV,cAAc,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IAChE,iBAAiB,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;CACvD,CAAC,CAAC;AAEL,gDAAgD;AAChD,MAAM,UAAU,eAAe,CAC7B,OAA2B,EAC3B,aAAsB;IAEtB,IAAI,CAAC,aAAa,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,eAAe,CAAC;IAC/D,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,WAAW,CAAC;IAC9C,IAAI,OAAO,KAAK,WAAW;QAAE,OAAO,qBAAqB,CAAC;IAC1D,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,QAAgB,EAChB,KAAgB,EAChB,OAAgC,EAAE;IAElC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,8BAA8B,CAAC;IAErE,0DAA0D;IAC1D,IAAI,SAAS,GAAkB,IAAI,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;QACpF,MAAM,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,cAAc,CAAE,EAAE,CAAqB,CAAC;QACjE,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,sFAAsF;IACxF,CAAC;IAED,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO;YACL,OAAO,EAAE,eAAe;YACxB,SAAS;YACT,WAAW,EAAE,IAAI;YACjB,4BAA4B,EAAE,SAAS;YACvC,eAAe,EAAE,IAAI;SACtB,CAAC;IACJ,CAAC;IAED,2CAA2C;IAC3C,IAAI,OAAO,GAAuB,IAAI,CAAC;IACvC,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;QAC1F,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,gBAAgB,CAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAW,CAAC;QACzF,OAAO,GAAG,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACxE,IAAI,CAAC;YACH,YAAY,GAAI,CAAC,MAAM,QAAQ,CAAC,mBAAmB,CAAE,EAAE,CAAY;iBAChE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;iBAClB,WAAW,EAAE,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,iEAAiE;QACnE,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,yDAAyD;IAC3D,CAAC;IAED,uFAAuF;IACvF,IAAI,WAAW,GAAwB,SAAS,CAAC;IACjD,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,IAAI,YAAY,EAAE,CAAC;QAC9D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC;gBAC1C,KAAK;gBACL,UAAU,EAAE,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBACxC,KAAK,EAAE,CAAC,aAAa,CAAC;aACvB,CAAC,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YACtC,IAAI,GAAG,YAAY,WAAW,IAAI,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1D,MAAM,KAAK,GACT,GAAG,YAAY,WAAW;oBACxB,CAAC,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC;oBACrB,CAAC,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;gBACjE,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;qBAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;qBAC3C,IAAI,CAAC,EAAE,CAAC,CAAC;gBACZ,WAAW,GAAG,QAAQ,KAAK,YAAY,CAAC;YAC1C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,mCAAmC;QACrC,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC;QACvC,SAAS;QACT,WAAW,EAAE,OAAO;QACpB,4BAA4B,EAAE,WAAW;QACzC,eAAe,EAAE,UAAU;KAC5B,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED