@usesigil/kit 0.10.0 → 0.11.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 +230 -17
- package/dist/create-vault.d.ts.map +1 -1
- package/dist/create-vault.js +7 -11
- package/dist/create-vault.js.map +1 -1
- package/dist/errors/codes.d.ts +8 -2
- package/dist/errors/codes.d.ts.map +1 -1
- package/dist/errors/codes.js +6 -0
- package/dist/errors/codes.js.map +1 -1
- package/dist/errors/context.d.ts +17 -1
- package/dist/errors/context.d.ts.map +1 -1
- package/dist/errors/public.d.ts +1 -1
- package/dist/errors/public.d.ts.map +1 -1
- package/dist/errors/public.js +1 -1
- package/dist/errors/public.js.map +1 -1
- package/dist/hooks.d.ts +114 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +118 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -12
- package/dist/index.js.map +1 -1
- package/dist/plugin.d.ts +110 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +119 -0
- package/dist/plugin.js.map +1 -0
- package/dist/presets.d.ts.map +1 -1
- package/dist/presets.js.map +1 -1
- package/dist/react/index.d.ts +69 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +118 -0
- package/dist/react/index.js.map +1 -0
- package/dist/seal.d.ts +50 -31
- package/dist/seal.d.ts.map +1 -1
- package/dist/seal.js +98 -29
- package/dist/seal.js.map +1 -1
- package/dist/sigil.d.ts +187 -0
- package/dist/sigil.d.ts.map +1 -0
- package/dist/sigil.js +194 -0
- package/dist/sigil.js.map +1 -0
- package/dist/types.d.ts +3 -31
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +45 -106
- package/dist/types.js.map +1 -1
- package/dist/vault-handle.d.ts +123 -0
- package/dist/vault-handle.d.ts.map +1 -0
- package/dist/vault-handle.js +136 -0
- package/dist/vault-handle.js.map +1 -0
- package/package.json +16 -2
package/dist/hooks.d.ts
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SealHooks — pluggable lifecycle observability for `seal()` and
|
|
3
|
+
* `SigilClient.executeAndConfirm()`.
|
|
4
|
+
*
|
|
5
|
+
* Rationale: Sprint 1's `SigilClientConfig.onError` was a single post-
|
|
6
|
+
* send telemetry callback — useful but narrow. Consumers building agent
|
|
7
|
+
* frameworks need correlation IDs, pre-build rewrites, and per-stage
|
|
8
|
+
* spans for distributed tracing. `SealHooks` is the observe-only
|
|
9
|
+
* superset that handles those cases without compromising `seal()`'s
|
|
10
|
+
* atomicity guarantee.
|
|
11
|
+
*
|
|
12
|
+
* Semantics:
|
|
13
|
+
* - All hooks are **observe-only** by default. A hook that throws is
|
|
14
|
+
* caught, logged via `getSigilModuleLogger().warn`, and swallowed;
|
|
15
|
+
* `seal()` continues.
|
|
16
|
+
* - `onBeforeBuild` is the only hook that may abort. Returning
|
|
17
|
+
* `{ skipSeal: true, reason }` throws
|
|
18
|
+
* `SigilSdkDomainError(SIGIL_ERROR__SDK__HOOK_ABORTED)` before any
|
|
19
|
+
* RPC round-trip. Use for consent flows, feature flags, dry-run
|
|
20
|
+
* mode.
|
|
21
|
+
* - `onFinalize` fires **only** on success (from
|
|
22
|
+
* `executeAndConfirm`). Standalone `seal()` callers don't see it —
|
|
23
|
+
* they have the result in hand.
|
|
24
|
+
*/
|
|
25
|
+
import type { Address } from "./kit-adapter.js";
|
|
26
|
+
/**
|
|
27
|
+
* Per-seal-invocation context passed to every hook. Populated once at
|
|
28
|
+
* the top of `seal()` so every stage sees the same `correlationId`.
|
|
29
|
+
*/
|
|
30
|
+
export interface SealHookContext {
|
|
31
|
+
readonly vault: Address;
|
|
32
|
+
readonly agent: Address;
|
|
33
|
+
readonly tokenMint: Address;
|
|
34
|
+
readonly amount: bigint;
|
|
35
|
+
readonly network: "devnet" | "mainnet";
|
|
36
|
+
/** Stable per-seal-invocation ID (UUIDv4-like) for trace correlation. */
|
|
37
|
+
readonly correlationId: string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* The `skipSeal` signal from `onBeforeBuild`. Returning this causes
|
|
41
|
+
* `seal()` to throw `SigilSdkDomainError(SIGIL_ERROR__SDK__HOOK_ABORTED)`
|
|
42
|
+
* before any RPC round-trip. Use for consent flows or dry-run mode.
|
|
43
|
+
*/
|
|
44
|
+
export type SealHookAbort = {
|
|
45
|
+
readonly skipSeal: true;
|
|
46
|
+
readonly reason: string;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Result type for `onBeforeBuild` — either `void`/`undefined` (continue)
|
|
50
|
+
* or `SealHookAbort` (stop).
|
|
51
|
+
*/
|
|
52
|
+
export type OnBeforeBuildResult = void | SealHookAbort;
|
|
53
|
+
export interface SealHooks {
|
|
54
|
+
/**
|
|
55
|
+
* Fires before any RPC call, after parameter validation but before
|
|
56
|
+
* `resolveVaultState`. The hook may return `{ skipSeal: true, reason }`
|
|
57
|
+
* to cleanly abort. The `params` argument is shallow-readonly — do
|
|
58
|
+
* NOT mutate, use return value for abort.
|
|
59
|
+
*/
|
|
60
|
+
onBeforeBuild?(ctx: SealHookContext, params: Readonly<unknown>): OnBeforeBuildResult | Promise<OnBeforeBuildResult>;
|
|
61
|
+
/**
|
|
62
|
+
* Fires after the composed transaction is built and size-checked,
|
|
63
|
+
* before any signing. Observe-only — the `tx` argument is the
|
|
64
|
+
* compiled transaction; mutations have no effect on the signed
|
|
65
|
+
* transaction seal() ultimately submits.
|
|
66
|
+
*/
|
|
67
|
+
onBeforeSign?(ctx: SealHookContext, tx: Readonly<unknown>): void | Promise<void>;
|
|
68
|
+
/**
|
|
69
|
+
* Fires after `sendTransaction` resolves with a signature but
|
|
70
|
+
* potentially before confirmation. Use for starting distributed
|
|
71
|
+
* traces that the `onFinalize` hook closes.
|
|
72
|
+
*/
|
|
73
|
+
onAfterSend?(ctx: SealHookContext, signature: string): void | Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* Fires in every error path inside `seal()` and
|
|
76
|
+
* `executeAndConfirm()`. Observe-only — the error is always rethrown
|
|
77
|
+
* after the hook runs.
|
|
78
|
+
*/
|
|
79
|
+
onError?(ctx: SealHookContext, err: Error): void | Promise<void>;
|
|
80
|
+
/**
|
|
81
|
+
* Fires on the success path of `executeAndConfirm()` only, after
|
|
82
|
+
* confirmation. Standalone `seal()` callers do not see this hook
|
|
83
|
+
* (the result is returned synchronously from `seal()` itself).
|
|
84
|
+
*/
|
|
85
|
+
onFinalize?(ctx: SealHookContext, result: Readonly<{
|
|
86
|
+
signature: string;
|
|
87
|
+
}>): void | Promise<void>;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Compose two `SealHooks` objects — each stage runs `outer[stage]`
|
|
91
|
+
* first, then `inner[stage]`. Throws from either hook are caught by
|
|
92
|
+
* `invokeHook` and do NOT propagate. Used to merge client-level hooks
|
|
93
|
+
* (from `SigilClientConfig.hooks`) with per-call hooks
|
|
94
|
+
* (from `ClientSealOpts.hooks` / `SealParams.hooks`).
|
|
95
|
+
*/
|
|
96
|
+
export declare function composeHooks(outer?: SealHooks, inner?: SealHooks): SealHooks | undefined;
|
|
97
|
+
/**
|
|
98
|
+
* Safely invoke a hook by name with arbitrary args. Swallows throws
|
|
99
|
+
* and logs them via `getSigilModuleLogger().warn` so consumer hooks
|
|
100
|
+
* can't corrupt `seal()`'s atomic-transaction guarantee. Returns
|
|
101
|
+
* whatever the hook returned (for `onBeforeBuild`'s `skipSeal` path);
|
|
102
|
+
* returns `undefined` if the hook threw.
|
|
103
|
+
*
|
|
104
|
+
* @internal — used by `seal.ts` and `SigilVault.execute`.
|
|
105
|
+
*/
|
|
106
|
+
export declare function invokeHook<K extends keyof SealHooks>(hooks: SealHooks | undefined, key: K, ...args: any[]): Promise<any>;
|
|
107
|
+
/**
|
|
108
|
+
* Generate a short correlation ID for a single `seal()` invocation.
|
|
109
|
+
* Not cryptographically strong — just unique enough for log grepping.
|
|
110
|
+
* Prefers `crypto.randomUUID()` when available; falls back to a
|
|
111
|
+
* timestamp + random counter in older Node versions.
|
|
112
|
+
*/
|
|
113
|
+
export declare function newCorrelationId(): string;
|
|
114
|
+
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAKhD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,QAAQ,GAAG,SAAS,CAAC;IACvC,yEAAyE;IACzE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAID;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,IAAI,GAAG,aAAa,CAAC;AAEvD,MAAM,WAAW,SAAS;IACxB;;;;;OAKG;IACH,aAAa,CAAC,CACZ,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,GACxB,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAEtD;;;;;OAKG;IACH,YAAY,CAAC,CACX,GAAG,EAAE,eAAe,EACpB,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,GACpB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExB;;;;OAIG;IACH,WAAW,CAAC,CAAC,GAAG,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5E;;;;OAIG;IACH,OAAO,CAAC,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjE;;;;OAIG;IACH,UAAU,CAAC,CACT,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,QAAQ,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,GACtC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAID;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,KAAK,CAAC,EAAE,SAAS,EACjB,KAAK,CAAC,EAAE,SAAS,GAChB,SAAS,GAAG,SAAS,CA4BvB;AAID;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAAC,CAAC,SAAS,MAAM,SAAS,EACxD,KAAK,EAAE,SAAS,GAAG,SAAS,EAC5B,GAAG,EAAE,CAAC,EAEN,GAAG,IAAI,EAAE,GAAG,EAAE,GAEb,OAAO,CAAC,GAAG,CAAC,CAiBd;AAID;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CASzC"}
|
package/dist/hooks.js
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SealHooks — pluggable lifecycle observability for `seal()` and
|
|
3
|
+
* `SigilClient.executeAndConfirm()`.
|
|
4
|
+
*
|
|
5
|
+
* Rationale: Sprint 1's `SigilClientConfig.onError` was a single post-
|
|
6
|
+
* send telemetry callback — useful but narrow. Consumers building agent
|
|
7
|
+
* frameworks need correlation IDs, pre-build rewrites, and per-stage
|
|
8
|
+
* spans for distributed tracing. `SealHooks` is the observe-only
|
|
9
|
+
* superset that handles those cases without compromising `seal()`'s
|
|
10
|
+
* atomicity guarantee.
|
|
11
|
+
*
|
|
12
|
+
* Semantics:
|
|
13
|
+
* - All hooks are **observe-only** by default. A hook that throws is
|
|
14
|
+
* caught, logged via `getSigilModuleLogger().warn`, and swallowed;
|
|
15
|
+
* `seal()` continues.
|
|
16
|
+
* - `onBeforeBuild` is the only hook that may abort. Returning
|
|
17
|
+
* `{ skipSeal: true, reason }` throws
|
|
18
|
+
* `SigilSdkDomainError(SIGIL_ERROR__SDK__HOOK_ABORTED)` before any
|
|
19
|
+
* RPC round-trip. Use for consent flows, feature flags, dry-run
|
|
20
|
+
* mode.
|
|
21
|
+
* - `onFinalize` fires **only** on success (from
|
|
22
|
+
* `executeAndConfirm`). Standalone `seal()` callers don't see it —
|
|
23
|
+
* they have the result in hand.
|
|
24
|
+
*/
|
|
25
|
+
import { getSigilModuleLogger } from "./logger.js";
|
|
26
|
+
// ─── Compose ────────────────────────────────────────────────────────────────
|
|
27
|
+
/**
|
|
28
|
+
* Compose two `SealHooks` objects — each stage runs `outer[stage]`
|
|
29
|
+
* first, then `inner[stage]`. Throws from either hook are caught by
|
|
30
|
+
* `invokeHook` and do NOT propagate. Used to merge client-level hooks
|
|
31
|
+
* (from `SigilClientConfig.hooks`) with per-call hooks
|
|
32
|
+
* (from `ClientSealOpts.hooks` / `SealParams.hooks`).
|
|
33
|
+
*/
|
|
34
|
+
export function composeHooks(outer, inner) {
|
|
35
|
+
if (!outer && !inner)
|
|
36
|
+
return undefined;
|
|
37
|
+
if (!outer)
|
|
38
|
+
return inner;
|
|
39
|
+
if (!inner)
|
|
40
|
+
return outer;
|
|
41
|
+
return {
|
|
42
|
+
async onBeforeBuild(ctx, params) {
|
|
43
|
+
const outerResult = await outer.onBeforeBuild?.(ctx, params);
|
|
44
|
+
if (outerResult && outerResult.skipSeal)
|
|
45
|
+
return outerResult;
|
|
46
|
+
const innerResult = await inner.onBeforeBuild?.(ctx, params);
|
|
47
|
+
if (innerResult && innerResult.skipSeal)
|
|
48
|
+
return innerResult;
|
|
49
|
+
},
|
|
50
|
+
async onBeforeSign(ctx, tx) {
|
|
51
|
+
await outer.onBeforeSign?.(ctx, tx);
|
|
52
|
+
await inner.onBeforeSign?.(ctx, tx);
|
|
53
|
+
},
|
|
54
|
+
async onAfterSend(ctx, sig) {
|
|
55
|
+
await outer.onAfterSend?.(ctx, sig);
|
|
56
|
+
await inner.onAfterSend?.(ctx, sig);
|
|
57
|
+
},
|
|
58
|
+
async onError(ctx, err) {
|
|
59
|
+
await outer.onError?.(ctx, err);
|
|
60
|
+
await inner.onError?.(ctx, err);
|
|
61
|
+
},
|
|
62
|
+
async onFinalize(ctx, result) {
|
|
63
|
+
await outer.onFinalize?.(ctx, result);
|
|
64
|
+
await inner.onFinalize?.(ctx, result);
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
// ─── invokeHook — safe-call with error swallow + logger route ──────────────
|
|
69
|
+
/**
|
|
70
|
+
* Safely invoke a hook by name with arbitrary args. Swallows throws
|
|
71
|
+
* and logs them via `getSigilModuleLogger().warn` so consumer hooks
|
|
72
|
+
* can't corrupt `seal()`'s atomic-transaction guarantee. Returns
|
|
73
|
+
* whatever the hook returned (for `onBeforeBuild`'s `skipSeal` path);
|
|
74
|
+
* returns `undefined` if the hook threw.
|
|
75
|
+
*
|
|
76
|
+
* @internal — used by `seal.ts` and `SigilVault.execute`.
|
|
77
|
+
*/
|
|
78
|
+
export async function invokeHook(hooks, key,
|
|
79
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
80
|
+
...args
|
|
81
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
82
|
+
) {
|
|
83
|
+
if (!hooks)
|
|
84
|
+
return undefined;
|
|
85
|
+
const fn = hooks[key];
|
|
86
|
+
if (!fn)
|
|
87
|
+
return undefined;
|
|
88
|
+
try {
|
|
89
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
90
|
+
return await fn.apply(hooks, args);
|
|
91
|
+
}
|
|
92
|
+
catch (err) {
|
|
93
|
+
getSigilModuleLogger().warn(`[SealHooks] ${String(key)} threw — swallowed to preserve seal() atomicity`, {
|
|
94
|
+
hook: String(key),
|
|
95
|
+
error: err instanceof Error ? err.message : String(err),
|
|
96
|
+
});
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// ─── correlationId helper ───────────────────────────────────────────────────
|
|
101
|
+
/**
|
|
102
|
+
* Generate a short correlation ID for a single `seal()` invocation.
|
|
103
|
+
* Not cryptographically strong — just unique enough for log grepping.
|
|
104
|
+
* Prefers `crypto.randomUUID()` when available; falls back to a
|
|
105
|
+
* timestamp + random counter in older Node versions.
|
|
106
|
+
*/
|
|
107
|
+
export function newCorrelationId() {
|
|
108
|
+
// crypto is available in Node 14.17+ and all modern browsers.
|
|
109
|
+
const g = globalThis;
|
|
110
|
+
if (g.crypto?.randomUUID)
|
|
111
|
+
return g.crypto.randomUUID();
|
|
112
|
+
// Fallback: timestamp + 8 hex chars of random.
|
|
113
|
+
const rand = Math.floor(Math.random() * 0xffffffff)
|
|
114
|
+
.toString(16)
|
|
115
|
+
.padStart(8, "0");
|
|
116
|
+
return `seal-${Date.now().toString(16)}-${rand}`;
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -56,6 +56,14 @@ export { seal, createSigilClient,
|
|
|
56
56
|
SigilClient, replaceAgentAtas, } from "./seal.js";
|
|
57
57
|
export type { SigilClientApi } from "./seal.js";
|
|
58
58
|
export type { SealParams, SealResult, SigilClientConfig, ClientSealOpts, ExecuteResult, } from "./seal.js";
|
|
59
|
+
export { Sigil } from "./sigil.js";
|
|
60
|
+
export type { SigilQuickstartOptions, SigilQuickstartResult, FundedOutcome, FromVaultOptions, } from "./sigil.js";
|
|
61
|
+
export { SigilVault } from "./vault-handle.js";
|
|
62
|
+
export type { SigilVaultExecuteOptions, SigilVaultInternalState, TxOpts as SigilVaultTxOpts, TxResult as SigilVaultTxResult, } from "./vault-handle.js";
|
|
63
|
+
export { composeHooks, invokeHook, newCorrelationId } from "./hooks.js";
|
|
64
|
+
export type { SealHooks, SealHookContext, SealHookAbort, OnBeforeBuildResult, } from "./hooks.js";
|
|
65
|
+
export { runPlugins, validatePluginList } from "./plugin.js";
|
|
66
|
+
export type { SigilPolicyPlugin, PluginContext, PluginResult, PluginAllow, PluginReject, } from "./plugin.js";
|
|
59
67
|
export { createVault, createAndSendVault } from "./create-vault.js";
|
|
60
68
|
export type { CreateVaultOptions, CreateVaultResult, CreateAndSendVaultOptions, CreateAndSendVaultResult, } from "./create-vault.js";
|
|
61
69
|
export { VAULT_PRESETS, getPreset, listPresets, presetToCreateVaultFields, SAFETY_PRESETS, applySafetyPreset, requireResolvedSafetyPreset, } from "./presets.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,cAAc,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -10,19 +10,15 @@
|
|
|
10
10
|
// `types.js` below) for the program ID. Account decoders stay public —
|
|
11
11
|
// they're the supported way to parse vault state fetched from an RPC.
|
|
12
12
|
export * from "./generated/accounts/index.js";
|
|
13
|
-
// ─── Type Constants +
|
|
13
|
+
// ─── Type Constants + Capability ──────────────────────────────────────────────
|
|
14
14
|
//
|
|
15
|
-
//
|
|
16
|
-
// `TRANSFER_ONLY`, `ESCROW_ONLY`, `PERPS_FULL
|
|
17
|
-
//
|
|
18
|
-
// `
|
|
19
|
-
//
|
|
20
|
-
//
|
|
21
|
-
//
|
|
22
|
-
// bitmasks now register agents with invalid capability values (either
|
|
23
|
-
// silently Observer or rejected with `InvalidArgument`). Use
|
|
24
|
-
// {@link FULL_CAPABILITY} / {@link FULL_PERMISSIONS} (both equal `2n`) for
|
|
25
|
-
// any preset or vault-creation flow that needs spending authority.
|
|
15
|
+
// Legacy 21-bit permission bitmasks and their helpers (`SWAP_ONLY`,
|
|
16
|
+
// `PERPS_ONLY`, `TRANSFER_ONLY`, `ESCROW_ONLY`, `PERPS_FULL`,
|
|
17
|
+
// `ACTION_PERMISSION_MAP`, `hasPermission`, `permissionsToStrings`,
|
|
18
|
+
// `stringsToPermissions`, `PermissionBuilder`) were DELETED in the A11
|
|
19
|
+
// cleanup — they encoded a pre-v6 permission model the on-chain program no
|
|
20
|
+
// longer supports. Use {@link FULL_CAPABILITY} (2n) for operator agents and
|
|
21
|
+
// put granular per-action restrictions in `InstructionConstraints`.
|
|
26
22
|
export {
|
|
27
23
|
// Program
|
|
28
24
|
SIGIL_PROGRAM_ADDRESS,
|
|
@@ -110,6 +106,11 @@ export { seal, createSigilClient,
|
|
|
110
106
|
/** @deprecated Use createSigilClient(). Removed at v1.0. */
|
|
111
107
|
SigilClient, replaceAgentAtas, } from "./seal.js";
|
|
112
108
|
// ─── Create Vault ──────────────────────────────────────────────────────────
|
|
109
|
+
// ─── Sprint 2: Sigil Facade + SigilVault + Hooks + Plugins ──────────────────
|
|
110
|
+
export { Sigil } from "./sigil.js";
|
|
111
|
+
export { SigilVault } from "./vault-handle.js";
|
|
112
|
+
export { composeHooks, invokeHook, newCorrelationId } from "./hooks.js";
|
|
113
|
+
export { runPlugins, validatePluginList } from "./plugin.js";
|
|
113
114
|
export { createVault, createAndSendVault } from "./create-vault.js";
|
|
114
115
|
// ─── Vault Presets ───────────────────────────────────────────────────────────
|
|
115
116
|
export { VAULT_PRESETS, getPreset, listPresets, presetToCreateVaultFields,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,oCAAoC;AAEpC,iFAAiF;AACjF,EAAE;AACF,0EAA0E;AAC1E,yEAAyE;AACzE,yEAAyE;AACzE,2EAA2E;AAC3E,sEAAsE;AACtE,uEAAuE;AACvE,sEAAsE;AACtE,cAAc,+BAA+B,CAAC;AAE9C,iFAAiF;AACjF,EAAE;AACF,oEAAoE;AACpE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin.d.ts
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SigilPolicyPlugin — consumer-supplied policy checks that run inside
|
|
3
|
+
* the `seal()` pre-flight.
|
|
4
|
+
*
|
|
5
|
+
* Plugins are the **rejection surface** of the SDK — distinct from
|
|
6
|
+
* `SealHooks`, which are observe-only. A plugin's `check()` returns
|
|
7
|
+
* either `{ allow: true }` or `{ allow: false, reason, code? }`; the
|
|
8
|
+
* first rejection short-circuits and `seal()` throws
|
|
9
|
+
* `SigilSdkDomainError(SIGIL_ERROR__SDK__PLUGIN_REJECTED)`.
|
|
10
|
+
*
|
|
11
|
+
* Run order inside `seal()`:
|
|
12
|
+
* 1. Parameter validation (basic shape checks)
|
|
13
|
+
* 2. `hooks.onBeforeBuild` — may abort cleanly via `{ skipSeal: true }`
|
|
14
|
+
* 3. **Plugin checks** — first `{ allow: false }` throws
|
|
15
|
+
* 4. `resolveVaultState` + capability check + constraint check
|
|
16
|
+
* 5. Transaction assembly
|
|
17
|
+
*
|
|
18
|
+
* Plugins see the vault's resolved on-chain state if they need it, but
|
|
19
|
+
* they MUST NOT perform their own RPC calls — they receive the
|
|
20
|
+
* pre-resolved state as context. Async plugin `check()` is supported
|
|
21
|
+
* for cases where the plugin delegates to an external service
|
|
22
|
+
* (feature-flag servers, compliance APIs) but the plugin runner will
|
|
23
|
+
* log a warning if any plugin takes >1s.
|
|
24
|
+
*
|
|
25
|
+
* Consumer-supplied logger + hooks still fire around plugin execution
|
|
26
|
+
* (a rejecting plugin triggers `onError` before the throw propagates).
|
|
27
|
+
*/
|
|
28
|
+
import type { Address, Instruction } from "./kit-adapter.js";
|
|
29
|
+
import type { SigilSdkErrorCode } from "./errors/codes.js";
|
|
30
|
+
/**
|
|
31
|
+
* Read-only data surface passed to every plugin `check()` call. The
|
|
32
|
+
* plugin runner populates this once per `seal()` invocation and shares
|
|
33
|
+
* it across all plugins; plugins must treat everything as immutable.
|
|
34
|
+
*/
|
|
35
|
+
export interface PluginContext {
|
|
36
|
+
readonly vault: Address;
|
|
37
|
+
readonly agent: Address;
|
|
38
|
+
readonly tokenMint: Address;
|
|
39
|
+
readonly amount: bigint;
|
|
40
|
+
readonly network: "devnet" | "mainnet";
|
|
41
|
+
readonly instructions: readonly Instruction[];
|
|
42
|
+
/** Stable ID for this `seal()` invocation — matches `SealHookContext.correlationId`. */
|
|
43
|
+
readonly correlationId: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Successful plugin check. May carry advisory metadata that downstream
|
|
47
|
+
* plugins or hooks can observe via `SealHooks.onBeforeSign`.
|
|
48
|
+
*/
|
|
49
|
+
export interface PluginAllow {
|
|
50
|
+
readonly allow: true;
|
|
51
|
+
/** Optional metadata (flag names, rule IDs, etc.) for downstream visibility. */
|
|
52
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Rejection result. `reason` must be a human-readable string; `code`
|
|
56
|
+
* is optional but recommended for machine-readable catch blocks.
|
|
57
|
+
*/
|
|
58
|
+
export interface PluginReject {
|
|
59
|
+
readonly allow: false;
|
|
60
|
+
readonly reason: string;
|
|
61
|
+
readonly code?: SigilSdkErrorCode;
|
|
62
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
63
|
+
}
|
|
64
|
+
export type PluginResult = PluginAllow | PluginReject;
|
|
65
|
+
export interface SigilPolicyPlugin {
|
|
66
|
+
/**
|
|
67
|
+
* Display name used in logs + the rejection error's context. Must be
|
|
68
|
+
* unique per plugin instance — the runner enforces this via config
|
|
69
|
+
* validation.
|
|
70
|
+
*/
|
|
71
|
+
readonly name: string;
|
|
72
|
+
/**
|
|
73
|
+
* Observe-only lifecycle: called once when the plugin is registered
|
|
74
|
+
* on a `SigilClient` / `Sigil` facade. Use for opening connections,
|
|
75
|
+
* prewarming caches, etc. Throws during init fail the client
|
|
76
|
+
* construction with `SIGIL_ERROR__SDK__INVALID_CONFIG`.
|
|
77
|
+
*/
|
|
78
|
+
readonly init?: () => void | Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* Policy check. Returns `{ allow: true }` to continue or
|
|
81
|
+
* `{ allow: false, reason, code? }` to reject. Must not throw under
|
|
82
|
+
* normal operation — the plugin runner treats a throw as a hard
|
|
83
|
+
* rejection with the error message as the reason.
|
|
84
|
+
*/
|
|
85
|
+
check(ctx: PluginContext): PluginResult | Promise<PluginResult>;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Run every plugin's `check()` in registration order. Returns on the
|
|
89
|
+
* first rejection with a `SigilSdkDomainError`; otherwise returns
|
|
90
|
+
* successfully. Plugins that take >1 second log a warning via the
|
|
91
|
+
* module logger.
|
|
92
|
+
*
|
|
93
|
+
* Throws:
|
|
94
|
+
* - `SigilSdkDomainError(SIGIL_ERROR__SDK__PLUGIN_REJECTED)` on first
|
|
95
|
+
* plugin that returns `{ allow: false }` OR throws.
|
|
96
|
+
*
|
|
97
|
+
* @internal — consumers invoke this via `seal()` / `SigilClient`.
|
|
98
|
+
*/
|
|
99
|
+
export declare function runPlugins(plugins: readonly SigilPolicyPlugin[] | undefined, ctx: PluginContext): Promise<void>;
|
|
100
|
+
/**
|
|
101
|
+
* Validate a plugin list at client-construction time. Rejects:
|
|
102
|
+
* - Non-array input
|
|
103
|
+
* - Duplicate plugin names
|
|
104
|
+
* - Plugins without `name` or `check`
|
|
105
|
+
*
|
|
106
|
+
* Called by `createSigilClient` / `Sigil.quickstart` / `Sigil.fromVault`
|
|
107
|
+
* when `config.plugins` is present.
|
|
108
|
+
*/
|
|
109
|
+
export declare function validatePluginList(plugins: unknown): asserts plugins is readonly SigilPolicyPlugin[];
|
|
110
|
+
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAU3D;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,QAAQ,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,YAAY,EAAE,SAAS,WAAW,EAAE,CAAC;IAC9C,wFAAwF;IACxF,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAID;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;IACrB,gFAAgF;IAChF,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACvD;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,iBAAiB,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACvD;AAED,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,YAAY,CAAC;AAItD,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3C;;;;;OAKG;IACH,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CACjE;AAID;;;;;;;;;;;GAWG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,SAAS,iBAAiB,EAAE,GAAG,SAAS,EACjD,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC,IAAI,CAAC,CAiDf;AAID;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,OAAO,IAAI,SAAS,iBAAiB,EAAE,CA+CjD"}
|
package/dist/plugin.js
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SigilPolicyPlugin — consumer-supplied policy checks that run inside
|
|
3
|
+
* the `seal()` pre-flight.
|
|
4
|
+
*
|
|
5
|
+
* Plugins are the **rejection surface** of the SDK — distinct from
|
|
6
|
+
* `SealHooks`, which are observe-only. A plugin's `check()` returns
|
|
7
|
+
* either `{ allow: true }` or `{ allow: false, reason, code? }`; the
|
|
8
|
+
* first rejection short-circuits and `seal()` throws
|
|
9
|
+
* `SigilSdkDomainError(SIGIL_ERROR__SDK__PLUGIN_REJECTED)`.
|
|
10
|
+
*
|
|
11
|
+
* Run order inside `seal()`:
|
|
12
|
+
* 1. Parameter validation (basic shape checks)
|
|
13
|
+
* 2. `hooks.onBeforeBuild` — may abort cleanly via `{ skipSeal: true }`
|
|
14
|
+
* 3. **Plugin checks** — first `{ allow: false }` throws
|
|
15
|
+
* 4. `resolveVaultState` + capability check + constraint check
|
|
16
|
+
* 5. Transaction assembly
|
|
17
|
+
*
|
|
18
|
+
* Plugins see the vault's resolved on-chain state if they need it, but
|
|
19
|
+
* they MUST NOT perform their own RPC calls — they receive the
|
|
20
|
+
* pre-resolved state as context. Async plugin `check()` is supported
|
|
21
|
+
* for cases where the plugin delegates to an external service
|
|
22
|
+
* (feature-flag servers, compliance APIs) but the plugin runner will
|
|
23
|
+
* log a warning if any plugin takes >1s.
|
|
24
|
+
*
|
|
25
|
+
* Consumer-supplied logger + hooks still fire around plugin execution
|
|
26
|
+
* (a rejecting plugin triggers `onError` before the throw propagates).
|
|
27
|
+
*/
|
|
28
|
+
import { SigilSdkDomainError } from "./errors/sdk.js";
|
|
29
|
+
import { SIGIL_ERROR__SDK__PLUGIN_REJECTED, SIGIL_ERROR__SDK__INVALID_CONFIG, } from "./errors/codes.js";
|
|
30
|
+
import { getSigilModuleLogger } from "./logger.js";
|
|
31
|
+
// ─── Plugin runner ──────────────────────────────────────────────────────────
|
|
32
|
+
/**
|
|
33
|
+
* Run every plugin's `check()` in registration order. Returns on the
|
|
34
|
+
* first rejection with a `SigilSdkDomainError`; otherwise returns
|
|
35
|
+
* successfully. Plugins that take >1 second log a warning via the
|
|
36
|
+
* module logger.
|
|
37
|
+
*
|
|
38
|
+
* Throws:
|
|
39
|
+
* - `SigilSdkDomainError(SIGIL_ERROR__SDK__PLUGIN_REJECTED)` on first
|
|
40
|
+
* plugin that returns `{ allow: false }` OR throws.
|
|
41
|
+
*
|
|
42
|
+
* @internal — consumers invoke this via `seal()` / `SigilClient`.
|
|
43
|
+
*/
|
|
44
|
+
export async function runPlugins(plugins, ctx) {
|
|
45
|
+
if (!plugins || plugins.length === 0)
|
|
46
|
+
return;
|
|
47
|
+
for (const plugin of plugins) {
|
|
48
|
+
const start = Date.now();
|
|
49
|
+
let result;
|
|
50
|
+
try {
|
|
51
|
+
result = await plugin.check(ctx);
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
const message = err instanceof Error ? err.message : String(err ?? "unknown");
|
|
55
|
+
throw new SigilSdkDomainError(SIGIL_ERROR__SDK__PLUGIN_REJECTED, `Plugin "${plugin.name}" threw during check(): ${message}`, {
|
|
56
|
+
cause: err,
|
|
57
|
+
context: {
|
|
58
|
+
plugin: plugin.name,
|
|
59
|
+
reason: message,
|
|
60
|
+
correlationId: ctx.correlationId,
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
const elapsedMs = Date.now() - start;
|
|
65
|
+
if (elapsedMs > 1000) {
|
|
66
|
+
getSigilModuleLogger().warn(`[SigilPolicyPlugin] "${plugin.name}" took ${elapsedMs}ms — plugin checks should be fast`, { plugin: plugin.name, elapsedMs });
|
|
67
|
+
}
|
|
68
|
+
if (!result.allow) {
|
|
69
|
+
throw new SigilSdkDomainError(SIGIL_ERROR__SDK__PLUGIN_REJECTED, `Plugin "${plugin.name}" rejected the operation: ${result.reason}`, {
|
|
70
|
+
context: {
|
|
71
|
+
plugin: plugin.name,
|
|
72
|
+
reason: result.reason,
|
|
73
|
+
code: result.code,
|
|
74
|
+
metadata: result.metadata,
|
|
75
|
+
correlationId: ctx.correlationId,
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// ─── Plugin list validation ─────────────────────────────────────────────────
|
|
82
|
+
/**
|
|
83
|
+
* Validate a plugin list at client-construction time. Rejects:
|
|
84
|
+
* - Non-array input
|
|
85
|
+
* - Duplicate plugin names
|
|
86
|
+
* - Plugins without `name` or `check`
|
|
87
|
+
*
|
|
88
|
+
* Called by `createSigilClient` / `Sigil.quickstart` / `Sigil.fromVault`
|
|
89
|
+
* when `config.plugins` is present.
|
|
90
|
+
*/
|
|
91
|
+
export function validatePluginList(plugins) {
|
|
92
|
+
if (!Array.isArray(plugins)) {
|
|
93
|
+
throw new SigilSdkDomainError(SIGIL_ERROR__SDK__INVALID_CONFIG, `SigilClientConfig.plugins must be an array of SigilPolicyPlugin (received ${typeof plugins})`, { context: { field: "plugins", expected: "SigilPolicyPlugin[]" } });
|
|
94
|
+
}
|
|
95
|
+
const names = new Set();
|
|
96
|
+
for (let i = 0; i < plugins.length; i++) {
|
|
97
|
+
const p = plugins[i];
|
|
98
|
+
if (!p || typeof p !== "object") {
|
|
99
|
+
throw new SigilSdkDomainError(SIGIL_ERROR__SDK__INVALID_CONFIG, `Plugin at index ${i} is not an object (received ${typeof p})`, { context: { field: `plugins[${i}]`, expected: "object" } });
|
|
100
|
+
}
|
|
101
|
+
const pluginObj = p;
|
|
102
|
+
if (typeof pluginObj.name !== "string" || pluginObj.name.length === 0) {
|
|
103
|
+
throw new SigilSdkDomainError(SIGIL_ERROR__SDK__INVALID_CONFIG, `Plugin at index ${i} is missing a non-empty string "name"`, { context: { field: `plugins[${i}].name`, expected: "string" } });
|
|
104
|
+
}
|
|
105
|
+
if (typeof pluginObj.check !== "function") {
|
|
106
|
+
throw new SigilSdkDomainError(SIGIL_ERROR__SDK__INVALID_CONFIG, `Plugin "${pluginObj.name}" is missing a check() function`, {
|
|
107
|
+
context: {
|
|
108
|
+
field: `plugins[${pluginObj.name}].check`,
|
|
109
|
+
expected: "function",
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
if (names.has(pluginObj.name)) {
|
|
114
|
+
throw new SigilSdkDomainError(SIGIL_ERROR__SDK__INVALID_CONFIG, `Duplicate plugin name "${pluginObj.name}" — plugin names must be unique per client`, { context: { field: "plugins[].name", expected: "unique" } });
|
|
115
|
+
}
|
|
116
|
+
names.add(pluginObj.name);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
package/dist/presets.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../src/presets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../src/presets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAyBpD,sEAAsE;AACtE,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,mBAAmB,EAAE,YAAY,CAAC;IAClC,qDAAqD;IACrD,qBAAqB,EAAE,YAAY,CAAC;IACpC,oCAAoC;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,2DAA2D;IAC3D,YAAY,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,SAAS,EAAE,OAAO,EAAE,CAAC;IACrB,sDAAsD;IACtD,cAAc,EAAE,MAAM,CAAC;IACvB,qCAAqC;IACrC,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAID,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6DsB,CAAC;AAEjD,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,aAAa,CAAC;AAIpD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAI/D;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,UAAU,EAAE,CAE1C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,UAAU,GACf,IAAI,CACL,kBAAkB,EAChB,aAAa,GACb,qBAAqB,GACrB,uBAAuB,GACvB,gBAAgB,GAChB,cAAc,GACd,WAAW,GACX,gBAAgB,GAChB,wBAAwB,CAC3B,CAYA;AAQD;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,oFAAoF;IACpF,gBAAgB,EAAE,MAAM,CAAC;IACzB,+EAA+E;IAC/E,gBAAgB,EAAE,YAAY,GAAG,IAAI,CAAC;IACtC,6EAA6E;IAC7E,mBAAmB,EAAE,YAAY,GAAG,IAAI,CAAC;CAC1C;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;CAW4B,CAAC;AAExD,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,cAAc,CAAC;AAE3D;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,gBAAgB,EACtB,SAAS,GAAE,OAAO,CAAC,kBAAkB,CAAM,GAC1C,kBAAkB,CAQpB;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,kBAAkB,GAAG;IACvE,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,YAAY,CAAC;IAC/B,mBAAmB,EAAE,YAAY,CAAC;CACnC,CAeA"}
|