@actuarial-ts/compliance 0.5.0 → 0.6.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 +51 -81
- package/dist/bundle.d.ts +7 -10
- package/dist/bundle.d.ts.map +1 -1
- package/dist/bundle.js +185 -32
- package/dist/bundle.js.map +1 -1
- package/dist/diagnosticRun.d.ts +106 -0
- package/dist/diagnosticRun.d.ts.map +1 -0
- package/dist/diagnosticRun.js +798 -0
- package/dist/diagnosticRun.js.map +1 -0
- package/dist/errors.d.ts +8 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +16 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/ledger.d.ts.map +1 -1
- package/dist/ledger.js +47 -6
- package/dist/ledger.js.map +1 -1
- package/dist/metadata.d.ts.map +1 -1
- package/dist/metadata.js +27 -3
- package/dist/metadata.js.map +1 -1
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/package.json +6 -4
- package/src/bundle.ts +289 -42
- package/src/diagnosticRun.ts +1451 -0
- package/src/errors.ts +12 -0
- package/src/index.ts +3 -1
- package/src/ledger.ts +59 -8
- package/src/metadata.ts +48 -7
- package/src/version.ts +1 -0
- package/dist/diagnostics.d.ts +0 -75
- package/dist/diagnostics.d.ts.map +0 -1
- package/dist/diagnostics.js +0 -44
- package/dist/diagnostics.js.map +0 -1
- package/src/diagnostics.ts +0 -104
package/README.md
CHANGED
|
@@ -1,96 +1,66 @@
|
|
|
1
1
|
# @actuarial-ts/compliance
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
-
|
|
14
|
-
appendix from the analysis itself — written to the "another qualified
|
|
15
|
-
actuary could appraise it" bar, deterministic to the byte.
|
|
16
|
-
- **Model cards** (ASOP 56): intended use, specification, key assumptions,
|
|
17
|
-
known weaknesses, and sensitivities for every method the SDK ships (a
|
|
18
|
-
cross-package sync test enforces the completeness, so the registry can
|
|
19
|
-
never silently fall behind core) — the
|
|
20
|
-
"basic understanding" content an actuary relying on vendor models must
|
|
21
|
-
hold and disclose.
|
|
22
|
-
- **Reproducibility bundles** (ASOP 21 / 56): canonical serialization of
|
|
23
|
-
inputs, parameters, and results with an integrity tag, so an analysis
|
|
24
|
-
re-runs identically years later for an auditor or examiner.
|
|
25
|
-
- **Diagnostics provenance composition**: `createDiagnosticsProvenance`
|
|
26
|
-
snapshots formula-pack/metric versions, executable-definition metadata,
|
|
27
|
-
layer configuration, exposure basis and scale, sparse/age conventions,
|
|
28
|
-
cutoffs, caller-selected filters/groups, and caller-owned input IDs/hashes.
|
|
29
|
-
- **Actual-vs-expected roll-forward**: expected emergence from the prior
|
|
30
|
-
valuation's pattern versus actual, by origin.
|
|
31
|
-
|
|
32
|
-
Everything here is pure, deterministic, and browser-safe: no clock reads,
|
|
33
|
-
no randomness, no node builtins. Identical inputs produce byte-identical
|
|
34
|
-
documents.
|
|
35
|
-
|
|
36
|
-
## Quickstart
|
|
3
|
+
Documentation, judgment, provenance, and reproducibility primitives for actuarial-ts. The package is designed to support compliance work under applicable ASOPs; it neither determines compliance nor replaces the actuary’s review.
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
npm install @actuarial-ts/compliance@0.6.1 @actuarial-ts/core@0.6.1 @actuarial-ts/data@0.6.1 @actuarial-ts/interchange@0.6.1
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
Node 20+, ESM.
|
|
10
|
+
|
|
11
|
+
## Diagnostic provenance
|
|
12
|
+
|
|
13
|
+
`createDiagnosticRunIdentity` accepts only an owner-authenticated, completed data-package run. It does not accept caller-restated formulas, filters, review status, or result identities.
|
|
37
14
|
|
|
38
15
|
```ts
|
|
39
|
-
import {
|
|
40
|
-
import {
|
|
41
|
-
createLedger,
|
|
42
|
-
recordAssumption,
|
|
43
|
-
generateDisclosure,
|
|
44
|
-
} from "@actuarial-ts/compliance";
|
|
45
|
-
|
|
46
|
-
let ledger = createLedger();
|
|
47
|
-
ledger = recordAssumption(ledger, {
|
|
48
|
-
timestamp: "2026-01-05T10:05:00Z",
|
|
49
|
-
actor: "actuary",
|
|
50
|
-
field: "paid.tailFactor",
|
|
51
|
-
value: 1.02,
|
|
52
|
-
rationale: "Exponential-decay fit valid with R^2 0.97; judgmentally confirmed",
|
|
53
|
-
source: "fitted",
|
|
54
|
-
});
|
|
16
|
+
import { createBundle, createDiagnosticRunIdentity } from "@actuarial-ts/compliance";
|
|
55
17
|
|
|
56
|
-
|
|
57
|
-
const mack = runMack(paidTriangle, { selected, tailFactor: 1.02 });
|
|
18
|
+
if (outcome.status !== "completed") throw new Error(`diagnostics blocked at ${outcome.stage}`);
|
|
58
19
|
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
{ methodId: "chainLadder", basisLabel: "paid", parameters: { selected, tailFactor: 1.02 }, resultSummary: { ultimate: cl.totals.ultimate, unpaid: cl.totals.unpaid } },
|
|
69
|
-
{ methodId: "mack", basisLabel: "paid", resultSummary: { standardError: mack.totals.standardError } },
|
|
20
|
+
const provenance = await createDiagnosticRunIdentity({
|
|
21
|
+
completedRun: outcome,
|
|
22
|
+
inputArtifacts: [
|
|
23
|
+
{ id: "loss-run", scope: "input", assurance: "sdk-computed", bytes: lossRunBytes },
|
|
24
|
+
{ id: "exposures", scope: "input", assurance: "sdk-computed", bytes: exposureBytes },
|
|
25
|
+
{ id: "source-archive", scope: "input", assurance: "caller-declared", algorithm: "sha256", value: archiveSha256 },
|
|
26
|
+
],
|
|
27
|
+
preparationArtifacts: [
|
|
28
|
+
{ id: "transform-script", scope: "preparation", assurance: "caller-declared", algorithm: "git-sha", value: transformCommit },
|
|
70
29
|
],
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
30
|
+
preparationLineage: [
|
|
31
|
+
{ outputArtifactId: "loss-run", inputArtifactIds: ["source-archive"], transformationArtifactIds: ["transform-script"] },
|
|
32
|
+
],
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
const bundle = createBundle({
|
|
36
|
+
inputs,
|
|
37
|
+
parameters,
|
|
38
|
+
results: outcome.result,
|
|
39
|
+
sdkVersions: {
|
|
40
|
+
"@actuarial-ts/core": provenance.manifest.engine.packages.core,
|
|
41
|
+
"@actuarial-ts/data": provenance.manifest.engine.packages.data,
|
|
42
|
+
"@actuarial-ts/compliance": provenance.manifest.engine.packages.compliance,
|
|
43
|
+
},
|
|
44
|
+
createdAt: "2026-09-03T00:00:00Z",
|
|
45
|
+
diagnosticRuns: [provenance],
|
|
46
|
+
wrap: { triangles: [], selections: [], results: [] },
|
|
74
47
|
});
|
|
75
48
|
```
|
|
76
49
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
and
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
50
|
+
SDK-computed evidence requires actual `Uint8Array` bytes and records SHA-256 plus exact byte length. Caller-declared digests remain explicitly unverified. All evidence is synchronously validated and copied before hashing. Source, dataset fallback, external transformation, layer-comparability rationale, and fail-override references must resolve to the correct artifact scope. Lineage must have unique producers, resolve completely, be acyclic, and contain no orphan evidence.
|
|
51
|
+
|
|
52
|
+
The manifest contains the complete normalized definition, preparation identity and input audit, filter, cutoffs, expected-grid identity, grouping, review identity, two-gate execution policy, artifact graph, and core/data/compliance versions. The provenance adds the authentic complete result and separate run, result-content, and run-result binding fingerprints. Creation verifies preparation integrity, regenerates review and both gates, reruns core, and compares normalized output before stamping.
|
|
53
|
+
|
|
54
|
+
The returned `VerifiedDiagnosticRunProvenance` is frozen and registered in private owner state. A cast, clone, or parsed JSON object cannot author a new bundle. Use `verifyDiagnosticRunIdentity(stored, sameRunAndEvidence)` to regenerate and authenticate stored provenance; it reports the first mismatching JSON path and returns regenerated authentic review text rather than trusting stored prose.
|
|
55
|
+
|
|
56
|
+
Wrapped bundles include one deduplicated typed `diagnostic-definition` document per definition and require the outer SDK versions/generator to agree with every run manifest. `verifyBundle` also recompiles serialized definitions and rechecks definition, review, result, run, and binding fingerprints plus the typed definition mirror; merely re-stamping inconsistent JSON cannot make it verify. FNV-1a/JCS tags are deterministic integrity aids, not cryptographic authentication.
|
|
57
|
+
|
|
58
|
+
Material host judgments worth recording in the assumption ledger include amount basis and limit application, expense treatment, missingness, exposure timing, period convention, filters/grouping, communicated scale, and any policy that permits a failed review. Helpers never invent an actuary’s rationale.
|
|
83
59
|
|
|
84
|
-
|
|
60
|
+
The package also provides estimate metadata, assumption ledgers, ASOP No. 41 draft disclosure generation, ASOP No. 56 model cards, actual-versus-expected roll-forward, and canonical reproducibility bundles.
|
|
85
61
|
|
|
86
|
-
|
|
87
|
-
be "ASOP-compliant" on its own — compliance is a property of a credentialed
|
|
88
|
-
actuary's work in context. This package is **designed to support the
|
|
89
|
-
actuary's compliance** with ASOP Nos. 41, 43, 23, 56, 21, and 20 by generating
|
|
90
|
-
the disclosures, documentation, and audit artifacts those standards call
|
|
91
|
-
for. The generated documents are draft support material for the responsible
|
|
92
|
-
actuary to review, edit, and adopt.
|
|
62
|
+
See the [formula catalog](https://github.com/yerromnitsuj/actng/blob/v0.6.1/docs/reference/diagnostic-formulas.md) and [migration guide](https://github.com/yerromnitsuj/actng/blob/v0.6.1/docs/migrations/0.6-generalized-diagnostics.md).
|
|
93
63
|
|
|
94
64
|
## License
|
|
95
65
|
|
|
96
|
-
Apache-2.0.
|
|
66
|
+
Apache-2.0. See LICENSE and NOTICE.
|
package/dist/bundle.d.ts
CHANGED
|
@@ -26,7 +26,10 @@
|
|
|
26
26
|
* responsibility for compliance remains with the credentialed actuary.
|
|
27
27
|
*/
|
|
28
28
|
import { canonicalJson, fnv1a64 } from "@actuarial-ts/core";
|
|
29
|
-
import
|
|
29
|
+
import { BundleDoc, MethodResultDoc, SelectionDoc, StochasticResultDoc, TriangleDoc } from "@actuarial-ts/interchange";
|
|
30
|
+
import type { VerifiedDiagnosticRunProvenance } from "./diagnosticRun.js";
|
|
31
|
+
export { ComplianceError, COMPLIANCE_ERROR_CODES, type ComplianceErrorCode, } from "./errors.js";
|
|
32
|
+
export { COMPLIANCE_PACKAGE_VERSION } from "./version.js";
|
|
30
33
|
export { canonicalJson, fnv1a64 };
|
|
31
34
|
/**
|
|
32
35
|
* The wrapped reproducibility bundle: the interchange BundleDoc (spec 3.2),
|
|
@@ -44,13 +47,6 @@ export type WrappedBundleDoc = BundleDoc;
|
|
|
44
47
|
* of this package. Add the code here when introducing a new throw.
|
|
45
48
|
* (UNSUPPORTED_VALUE moved to core's registry with canonicalJson in 0.2.0.)
|
|
46
49
|
*/
|
|
47
|
-
export declare const COMPLIANCE_ERROR_CODES: readonly ["BAD_BUNDLE", "BAD_CDF", "MISSING_RATIONALE"];
|
|
48
|
-
export type ComplianceErrorCode = (typeof COMPLIANCE_ERROR_CODES)[number];
|
|
49
|
-
/** Thrown for invalid compliance input (bad bundles, judgment without rationale, non-positive CDFs). */
|
|
50
|
-
export declare class ComplianceError extends Error {
|
|
51
|
-
readonly code: ComplianceErrorCode;
|
|
52
|
-
constructor(code: ComplianceErrorCode, message: string);
|
|
53
|
-
}
|
|
54
50
|
/**
|
|
55
51
|
* The interchange version the wrapped form is written under. Kept in literal
|
|
56
52
|
* sync with `@actuarial-ts/interchange`'s INTERCHANGE_SPEC_VERSION (the dep
|
|
@@ -58,14 +54,13 @@ export declare class ComplianceError extends Error {
|
|
|
58
54
|
* test parses the emitted doc with the real interchange parser, which
|
|
59
55
|
* refuses a wrong-major version — drift fails loudly.
|
|
60
56
|
*/
|
|
61
|
-
export declare const WRAPPED_BUNDLE_INTERCHANGE_VERSION = "1.
|
|
57
|
+
export declare const WRAPPED_BUNDLE_INTERCHANGE_VERSION = "1.1.0";
|
|
62
58
|
/**
|
|
63
59
|
* This package's version, stamped into a wrapped bundle's `generator`
|
|
64
60
|
* envelope field. A sync test asserts it matches package.json so it cannot
|
|
65
61
|
* silently drift (mirroring interchange's INTERCHANGE_PACKAGE_VERSION
|
|
66
62
|
* discipline).
|
|
67
63
|
*/
|
|
68
|
-
export declare const COMPLIANCE_PACKAGE_VERSION = "0.5.0";
|
|
69
64
|
/**
|
|
70
65
|
* The interchange mirror for a wrapped bundle (spec 3.2): the triangles the
|
|
71
66
|
* analysis consumed, the selections it applied, and the results it produced,
|
|
@@ -113,6 +108,8 @@ export interface CreateBundleInput {
|
|
|
113
108
|
name: string;
|
|
114
109
|
version: string;
|
|
115
110
|
};
|
|
111
|
+
/** Authenticated diagnostic runs included in the canonical body and, when wrapped, as typed definition documents. */
|
|
112
|
+
diagnosticRuns?: readonly VerifiedDiagnosticRunProvenance[];
|
|
116
113
|
}
|
|
117
114
|
export interface ReproducibilityBundle {
|
|
118
115
|
/** Canonical JSON of the full bundle body; the reproducibility record itself. */
|
package/dist/bundle.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../src/bundle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../src/bundle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EACL,aAAa,EACb,OAAO,EAER,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAKL,SAAS,EACT,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,WAAW,EACZ,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAEV,+BAA+B,EAChC,MAAM,oBAAoB,CAAC;AAQ5B,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,KAAK,mBAAmB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC;AAElC;;;;;;;;;GASG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,CAAC;AAEzC;;;;GAIG;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,kCAAkC,UAA2B,CAAC;AAE3E;;;;;GAKG;AAEH;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,OAAO,EAAE,CAAC,eAAe,GAAG,mBAAmB,CAAC,EAAE,CAAC;CACpD;AAED,MAAM,WAAW,iBAAiB;IAChC,gGAAgG;IAChG,MAAM,EAAE,OAAO,CAAC;IAChB,wFAAwF;IACxF,UAAU,EAAE,OAAO,CAAC;IACpB,qFAAqF;IACrF,OAAO,EAAE,OAAO,CAAC;IACjB,6EAA6E;IAC7E,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,gFAAgF;IAChF,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB;;;;;;;;;;OAUG;IACH,SAAS,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,qHAAqH;IACrH,cAAc,CAAC,EAAE,SAAS,+BAA+B,EAAE,CAAC;CAC7D;AAED,MAAM,WAAW,qBAAqB;IACpC,iFAAiF;IACjF,OAAO,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC;CACd;AAED,4EAA4E;AAC5E,MAAM,WAAW,mBAAoB,SAAQ,qBAAqB;IAChE;;;;OAIG;IACH,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,iBAAiB,GAAG;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACnD,mBAAmB,CAAC;AACvB,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,qBAAqB,CAAC;AA8H9E,mEAAmE;AACnE,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,OAAO,CAAC;IACZ,2EAA2E;IAC3E,QAAQ,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,OAAO,CAAC;IACpB;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,cAAc,CAAC,EAAE,mBAAmB,CAAC;CACtC;AA4OD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,qBAAqB,GAAG,gBAAgB,EAChD,YAAY,EAAE,OAAO,GACpB,kBAAkB,CAIpB"}
|
package/dist/bundle.js
CHANGED
|
@@ -25,27 +25,19 @@
|
|
|
25
25
|
* ASOP No. 41 (documentation and reproducibility of the analysis);
|
|
26
26
|
* responsibility for compliance remains with the credentialed actuary.
|
|
27
27
|
*/
|
|
28
|
-
import { canonicalJson, fnv1a64 } from "@actuarial-ts/core";
|
|
28
|
+
import { canonicalJson, fnv1a64, isDiagnosticPlainRecord, } from "@actuarial-ts/core";
|
|
29
|
+
import { INTERCHANGE_SPEC_VERSION, diagnosticDefinitionToDoc, docToDiagnosticDefinition, } from "@actuarial-ts/interchange";
|
|
30
|
+
import { assertVerifiedDiagnosticRunProvenance, serializedDiagnosticRunMismatch, verifiedDefinitionForBundle, } from "./diagnosticRun.js";
|
|
31
|
+
import { ComplianceError } from "./errors.js";
|
|
32
|
+
import { COMPLIANCE_PACKAGE_VERSION } from "./version.js";
|
|
33
|
+
export { ComplianceError, COMPLIANCE_ERROR_CODES, } from "./errors.js";
|
|
34
|
+
export { COMPLIANCE_PACKAGE_VERSION } from "./version.js";
|
|
29
35
|
export { canonicalJson, fnv1a64 };
|
|
30
36
|
/**
|
|
31
37
|
* Every machine-readable code a ComplianceError can carry, across all modules
|
|
32
38
|
* of this package. Add the code here when introducing a new throw.
|
|
33
39
|
* (UNSUPPORTED_VALUE moved to core's registry with canonicalJson in 0.2.0.)
|
|
34
40
|
*/
|
|
35
|
-
export const COMPLIANCE_ERROR_CODES = [
|
|
36
|
-
"BAD_BUNDLE",
|
|
37
|
-
"BAD_CDF",
|
|
38
|
-
"MISSING_RATIONALE",
|
|
39
|
-
];
|
|
40
|
-
/** Thrown for invalid compliance input (bad bundles, judgment without rationale, non-positive CDFs). */
|
|
41
|
-
export class ComplianceError extends Error {
|
|
42
|
-
code;
|
|
43
|
-
constructor(code, message) {
|
|
44
|
-
super(message);
|
|
45
|
-
this.name = "ComplianceError";
|
|
46
|
-
this.code = code;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
41
|
/**
|
|
50
42
|
* The interchange version the wrapped form is written under. Kept in literal
|
|
51
43
|
* sync with `@actuarial-ts/interchange`'s INTERCHANGE_SPEC_VERSION (the dep
|
|
@@ -53,14 +45,7 @@ export class ComplianceError extends Error {
|
|
|
53
45
|
* test parses the emitted doc with the real interchange parser, which
|
|
54
46
|
* refuses a wrong-major version — drift fails loudly.
|
|
55
47
|
*/
|
|
56
|
-
export const WRAPPED_BUNDLE_INTERCHANGE_VERSION =
|
|
57
|
-
/**
|
|
58
|
-
* This package's version, stamped into a wrapped bundle's `generator`
|
|
59
|
-
* envelope field. A sync test asserts it matches package.json so it cannot
|
|
60
|
-
* silently drift (mirroring interchange's INTERCHANGE_PACKAGE_VERSION
|
|
61
|
-
* discipline).
|
|
62
|
-
*/
|
|
63
|
-
export const COMPLIANCE_PACKAGE_VERSION = "0.5.0";
|
|
48
|
+
export const WRAPPED_BUNDLE_INTERCHANGE_VERSION = INTERCHANGE_SPEC_VERSION;
|
|
64
49
|
export function createBundle(input) {
|
|
65
50
|
const body = {
|
|
66
51
|
createdAt: input.createdAt,
|
|
@@ -71,6 +56,39 @@ export function createBundle(input) {
|
|
|
71
56
|
};
|
|
72
57
|
if (input.seeds !== undefined)
|
|
73
58
|
body["seeds"] = input.seeds;
|
|
59
|
+
if (input.diagnosticRuns !== undefined) {
|
|
60
|
+
for (const run of input.diagnosticRuns)
|
|
61
|
+
assertVerifiedDiagnosticRunProvenance(run);
|
|
62
|
+
const seenBindings = new Set();
|
|
63
|
+
for (const [runIndex, run] of input.diagnosticRuns.entries()) {
|
|
64
|
+
if (seenBindings.has(run.runResultFingerprint))
|
|
65
|
+
throw new ComplianceError("BAD_DIAGNOSTIC_RUN", "Duplicate diagnostic run-result fingerprint", `$.diagnosticRuns[${runIndex}].runResultFingerprint`);
|
|
66
|
+
seenBindings.add(run.runResultFingerprint);
|
|
67
|
+
}
|
|
68
|
+
if (input.diagnosticRuns.length > 0) {
|
|
69
|
+
if (!isDiagnosticPlainRecord(input.sdkVersions))
|
|
70
|
+
throw new ComplianceError("BAD_DIAGNOSTIC_RUN", "Diagnostic bundles require a plain SDK-version map", "$.sdkVersions");
|
|
71
|
+
const expected = input.diagnosticRuns[0].manifest.engine.packages;
|
|
72
|
+
for (const [runIndex, run] of input.diagnosticRuns.entries()) {
|
|
73
|
+
if (canonicalJson(run.manifest.engine.packages) !==
|
|
74
|
+
canonicalJson(expected))
|
|
75
|
+
throw new ComplianceError("BAD_DIAGNOSTIC_RUN", "Diagnostic runs disagree on SDK package versions", `$.diagnosticRuns[${runIndex}].manifest.engine.packages`);
|
|
76
|
+
}
|
|
77
|
+
for (const [name, version] of Object.entries({
|
|
78
|
+
"@actuarial-ts/core": expected.core,
|
|
79
|
+
"@actuarial-ts/data": expected.data,
|
|
80
|
+
"@actuarial-ts/compliance": expected.compliance,
|
|
81
|
+
}))
|
|
82
|
+
if (input.sdkVersions[name] !== version)
|
|
83
|
+
throw new ComplianceError("BAD_DIAGNOSTIC_RUN", `Outer sdkVersions must record ${name} at ${version}`, `$.sdkVersions.${name}`);
|
|
84
|
+
if (input.wrap !== undefined &&
|
|
85
|
+
input.generator !== undefined &&
|
|
86
|
+
(input.generator.name !== "@actuarial-ts/compliance" ||
|
|
87
|
+
input.generator.version !== COMPLIANCE_PACKAGE_VERSION))
|
|
88
|
+
throw new ComplianceError("BAD_DIAGNOSTIC_RUN", "Wrapped diagnostic bundles require the actual compliance generator stamp", "$.generator");
|
|
89
|
+
}
|
|
90
|
+
body["diagnosticRuns"] = input.diagnosticRuns;
|
|
91
|
+
}
|
|
74
92
|
const payload = canonicalJson(body);
|
|
75
93
|
const inner = { payload, hash: fnv1a64(payload) };
|
|
76
94
|
if (input.wrap === undefined)
|
|
@@ -78,18 +96,43 @@ export function createBundle(input) {
|
|
|
78
96
|
// The inner record is carried opaquely as the `bundle` segment; the outer
|
|
79
97
|
// tag is fnv1a64(canonicalJson({ bundle, interchange })) — exactly
|
|
80
98
|
// interchange's semanticBodyOf for kind "bundle" (spec 3.2).
|
|
81
|
-
const bundleSegment = {
|
|
99
|
+
const bundleSegment = {
|
|
100
|
+
hash: inner.hash,
|
|
101
|
+
payload: inner.payload,
|
|
102
|
+
};
|
|
103
|
+
const definitions = new Map();
|
|
104
|
+
for (const run of input.diagnosticRuns ?? []) {
|
|
105
|
+
const compiled = verifiedDefinitionForBundle(run);
|
|
106
|
+
definitions.set(run.definition.identities.definition, diagnosticDefinitionToDoc(compiled, {
|
|
107
|
+
createdAt: input.createdAt,
|
|
108
|
+
generator: {
|
|
109
|
+
name: "@actuarial-ts/compliance",
|
|
110
|
+
version: COMPLIANCE_PACKAGE_VERSION,
|
|
111
|
+
},
|
|
112
|
+
}));
|
|
113
|
+
}
|
|
82
114
|
const interchange = {
|
|
83
115
|
triangles: [...input.wrap.triangles],
|
|
84
116
|
selections: [...input.wrap.selections],
|
|
85
117
|
results: [...input.wrap.results],
|
|
118
|
+
...(definitions.size === 0
|
|
119
|
+
? {}
|
|
120
|
+
: {
|
|
121
|
+
diagnosticDefinitions: [...definitions.values()].sort((a, b) => a.diagnosticDefinition.identities.definition <
|
|
122
|
+
b.diagnosticDefinition.identities.definition
|
|
123
|
+
? -1
|
|
124
|
+
: 1),
|
|
125
|
+
}),
|
|
86
126
|
};
|
|
87
127
|
const wrapped = {
|
|
88
128
|
interchangeVersion: WRAPPED_BUNDLE_INTERCHANGE_VERSION,
|
|
89
129
|
kind: "bundle",
|
|
90
130
|
generator: input.generator
|
|
91
131
|
? { ...input.generator }
|
|
92
|
-
: {
|
|
132
|
+
: {
|
|
133
|
+
name: "@actuarial-ts/compliance",
|
|
134
|
+
version: COMPLIANCE_PACKAGE_VERSION,
|
|
135
|
+
},
|
|
93
136
|
createdAt: input.createdAt,
|
|
94
137
|
bundle: bundleSegment,
|
|
95
138
|
interchange,
|
|
@@ -106,10 +149,13 @@ function isPlainObject(value) {
|
|
|
106
149
|
/** First differing path between two canonicalizable structures, or null when equal. */
|
|
107
150
|
function firstDifference(stored, rerun, path) {
|
|
108
151
|
if (isPlainObject(stored) && isPlainObject(rerun)) {
|
|
109
|
-
const keys = [
|
|
152
|
+
const keys = [
|
|
153
|
+
...new Set([...Object.keys(stored), ...Object.keys(rerun)]),
|
|
154
|
+
].sort();
|
|
110
155
|
for (const key of keys) {
|
|
111
156
|
const keyPath = `${path}.${key}`;
|
|
112
|
-
if (!(key
|
|
157
|
+
if (!Object.prototype.hasOwnProperty.call(stored, key) ||
|
|
158
|
+
!Object.prototype.hasOwnProperty.call(rerun, key))
|
|
113
159
|
return keyPath;
|
|
114
160
|
const diff = firstDifference(stored[key], rerun[key], keyPath);
|
|
115
161
|
if (diff !== null)
|
|
@@ -148,12 +194,44 @@ function verifyUnwrapped(bundle, rerunResults) {
|
|
|
148
194
|
if (!isPlainObject(stored) || !("results" in stored)) {
|
|
149
195
|
throw new ComplianceError("BAD_BUNDLE", 'bundle payload has no "results" segment');
|
|
150
196
|
}
|
|
197
|
+
if (Object.prototype.hasOwnProperty.call(stored, "diagnosticRuns")) {
|
|
198
|
+
if (!Array.isArray(stored["diagnosticRuns"]))
|
|
199
|
+
throw new ComplianceError("BAD_BUNDLE", 'bundle payload "diagnosticRuns" must be an array');
|
|
200
|
+
const seen = new Set();
|
|
201
|
+
for (const [index, run] of stored["diagnosticRuns"].entries()) {
|
|
202
|
+
const path = `$.diagnosticRuns[${index}]`;
|
|
203
|
+
const mismatch = serializedDiagnosticRunMismatch(run, path);
|
|
204
|
+
if (mismatch !== null)
|
|
205
|
+
return { reproduced: false, mismatchPath: mismatch };
|
|
206
|
+
const fingerprint = run["runResultFingerprint"];
|
|
207
|
+
if (seen.has(fingerprint))
|
|
208
|
+
return {
|
|
209
|
+
reproduced: false,
|
|
210
|
+
mismatchPath: `${path}.runResultFingerprint`,
|
|
211
|
+
};
|
|
212
|
+
seen.add(fingerprint);
|
|
213
|
+
const packages = run.manifest.engine
|
|
214
|
+
.packages;
|
|
215
|
+
for (const [name, shortName] of [
|
|
216
|
+
["@actuarial-ts/core", "core"],
|
|
217
|
+
["@actuarial-ts/data", "data"],
|
|
218
|
+
["@actuarial-ts/compliance", "compliance"],
|
|
219
|
+
]) {
|
|
220
|
+
if (!isPlainObject(stored["sdkVersions"]) ||
|
|
221
|
+
stored["sdkVersions"][name] !== packages?.[shortName])
|
|
222
|
+
return { reproduced: false, mismatchPath: `$.sdkVersions.${name}` };
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
151
226
|
const storedResults = stored["results"];
|
|
152
227
|
const rerunCanonical = canonicalJson(rerunResults);
|
|
153
228
|
const storedCanonical = canonicalJson(storedResults);
|
|
154
229
|
if (rerunCanonical === storedCanonical)
|
|
155
230
|
return { reproduced: true };
|
|
156
|
-
return {
|
|
231
|
+
return {
|
|
232
|
+
reproduced: false,
|
|
233
|
+
mismatchPath: firstDifference(storedResults, rerunResults, "$") ?? "$",
|
|
234
|
+
};
|
|
157
235
|
}
|
|
158
236
|
function isWrappedBundleDoc(value) {
|
|
159
237
|
return value.kind === "bundle";
|
|
@@ -173,12 +251,85 @@ function verifyWrapped(doc, rerunResults) {
|
|
|
173
251
|
// exactly interchange's semanticBodyOf for kind "bundle" (spec 3.2).
|
|
174
252
|
const expected = fnv1a64(canonicalJson({ bundle: doc.bundle, interchange: doc.interchange }));
|
|
175
253
|
const actual = typeof doc.integrity === "string" ? doc.integrity : null;
|
|
176
|
-
const outerIntegrity = {
|
|
254
|
+
const outerIntegrity = {
|
|
255
|
+
ok: expected === actual,
|
|
256
|
+
expected,
|
|
257
|
+
actual,
|
|
258
|
+
};
|
|
177
259
|
if (!outerIntegrity.ok) {
|
|
178
260
|
return { reproduced: false, mismatchPath: "$.integrity", outerIntegrity };
|
|
179
261
|
}
|
|
180
|
-
const inner = {
|
|
181
|
-
|
|
262
|
+
const inner = {
|
|
263
|
+
payload: innerRaw["payload"],
|
|
264
|
+
hash: innerRaw["hash"],
|
|
265
|
+
};
|
|
266
|
+
const innerResult = verifyUnwrapped(inner, rerunResults);
|
|
267
|
+
if (!innerResult.reproduced)
|
|
268
|
+
return { ...innerResult, outerIntegrity };
|
|
269
|
+
const body = JSON.parse(inner.payload);
|
|
270
|
+
const runs = Array.isArray(body["diagnosticRuns"])
|
|
271
|
+
? body["diagnosticRuns"]
|
|
272
|
+
: [];
|
|
273
|
+
const docs = doc.interchange
|
|
274
|
+
.diagnosticDefinitions;
|
|
275
|
+
if (runs.length > 0) {
|
|
276
|
+
const packages = runs[0].manifest.engine
|
|
277
|
+
.packages;
|
|
278
|
+
if (doc.generator?.name !== "@actuarial-ts/compliance")
|
|
279
|
+
return {
|
|
280
|
+
reproduced: false,
|
|
281
|
+
mismatchPath: "$.generator.name",
|
|
282
|
+
outerIntegrity,
|
|
283
|
+
};
|
|
284
|
+
if (doc.generator.version !== packages.compliance)
|
|
285
|
+
return {
|
|
286
|
+
reproduced: false,
|
|
287
|
+
mismatchPath: "$.generator.version",
|
|
288
|
+
outerIntegrity,
|
|
289
|
+
};
|
|
290
|
+
if (!Array.isArray(docs))
|
|
291
|
+
return {
|
|
292
|
+
reproduced: false,
|
|
293
|
+
mismatchPath: "$.interchange.diagnosticDefinitions",
|
|
294
|
+
outerIntegrity,
|
|
295
|
+
};
|
|
296
|
+
const expected = new Set(runs.map((run) => run.definition.identities.definition));
|
|
297
|
+
const actual = new Set();
|
|
298
|
+
for (const [index, raw] of docs.entries()) {
|
|
299
|
+
try {
|
|
300
|
+
const document = raw;
|
|
301
|
+
const integrity = docToDiagnosticDefinition(document).definition.definitionIntegrity;
|
|
302
|
+
if (actual.has(integrity))
|
|
303
|
+
return {
|
|
304
|
+
reproduced: false,
|
|
305
|
+
mismatchPath: `$.interchange.diagnosticDefinitions[${index}]`,
|
|
306
|
+
outerIntegrity,
|
|
307
|
+
};
|
|
308
|
+
if (document.generator.name !== doc.generator.name ||
|
|
309
|
+
document.generator.version !== doc.generator.version)
|
|
310
|
+
return {
|
|
311
|
+
reproduced: false,
|
|
312
|
+
mismatchPath: `$.interchange.diagnosticDefinitions[${index}].generator`,
|
|
313
|
+
outerIntegrity,
|
|
314
|
+
};
|
|
315
|
+
actual.add(integrity);
|
|
316
|
+
}
|
|
317
|
+
catch {
|
|
318
|
+
return {
|
|
319
|
+
reproduced: false,
|
|
320
|
+
mismatchPath: `$.interchange.diagnosticDefinitions[${index}]`,
|
|
321
|
+
outerIntegrity,
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
if (canonicalJson([...actual].sort()) !== canonicalJson([...expected].sort()))
|
|
326
|
+
return {
|
|
327
|
+
reproduced: false,
|
|
328
|
+
mismatchPath: "$.interchange.diagnosticDefinitions",
|
|
329
|
+
outerIntegrity,
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
return { ...innerResult, outerIntegrity };
|
|
182
333
|
}
|
|
183
334
|
/**
|
|
184
335
|
* Verifies a re-run against a bundle: canonicalizes `rerunResults` and
|
|
@@ -199,6 +350,8 @@ function verifyWrapped(doc, rerunResults) {
|
|
|
199
350
|
* serialized cannot be verified.
|
|
200
351
|
*/
|
|
201
352
|
export function verifyBundle(bundle, rerunResults) {
|
|
202
|
-
return isWrappedBundleDoc(bundle)
|
|
353
|
+
return isWrappedBundleDoc(bundle)
|
|
354
|
+
? verifyWrapped(bundle, rerunResults)
|
|
355
|
+
: verifyUnwrapped(bundle, rerunResults);
|
|
203
356
|
}
|
|
204
357
|
//# sourceMappingURL=bundle.js.map
|
package/dist/bundle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../src/bundle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAS5D,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC;AAclC;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,YAAY;IACZ,SAAS;IACT,mBAAmB;CACX,CAAC;AAIX,wGAAwG;AACxG,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAC/B,IAAI,CAAsB;IACnC,YAAY,IAAyB,EAAE,OAAe;QACpD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAID;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAAG,OAAO,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,OAAO,CAAC;AA8ElD,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,MAAM,IAAI,GAA4B;QACpC,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,WAAW,EAAE,KAAK,CAAC,WAAW;KAC/B,CAAC;IACF,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;QAAE,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;IAC3D,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,KAAK,GAA0B,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;IACzE,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAE3C,0EAA0E;IAC1E,mEAAmE;IACnE,6DAA6D;IAC7D,MAAM,aAAa,GAA4B,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;IAC5F,MAAM,WAAW,GAAG;QAClB,SAAS,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;QACpC,UAAU,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;QACtC,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;KACjC,CAAC;IACF,MAAM,OAAO,GAAqB;QAChC,kBAAkB,EAAE,kCAAkC;QACtD,IAAI,EAAE,QAAQ;QACd,SAAS,EAAE,KAAK,CAAC,SAAS;YACxB,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE;YACxB,CAAC,CAAC,EAAE,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,0BAA0B,EAAE;QAC7E,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,MAAM,EAAE,aAAa;QACrB,WAAW;QACX,SAAS,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,CAAC;KAC1E,CAAC;IACF,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,CAAC;AAC/B,CAAC;AA2BD,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtF,MAAM,KAAK,GAAY,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACpD,OAAO,KAAK,KAAK,MAAM,CAAC,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;AACtD,CAAC;AAED,uFAAuF;AACvF,SAAS,eAAe,CAAC,MAAe,EAAE,KAAc,EAAE,IAAY;IACpE,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAClF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC;YACjC,IAAI,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC;gBAAE,OAAO,OAAO,CAAC;YACxD,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;YAC/D,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;QACjC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;YACnE,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;QACjC,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,MAAM,GAAG,CAAC;IACtE,CAAC;IACD,OAAO,aAAa,CAAC,MAAM,CAAC,KAAK,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACtE,CAAC;AAED,8EAA8E;AAC9E,SAAS,eAAe,CAAC,MAA6B,EAAE,YAAqB;IAC3E,6EAA6E;IAC7E,6EAA6E;IAC7E,4EAA4E;IAC5E,0EAA0E;IAC1E,YAAY;IACZ,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;QAC5C,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;IACvD,CAAC;IACD,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,eAAe,CAAC,YAAY,EAAE,kCAAkC,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,eAAe,CAAC,YAAY,EAAE,yCAAyC,CAAC,CAAC;IACrF,CAAC;IACD,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IACxC,MAAM,cAAc,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;IACnD,MAAM,eAAe,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;IACrD,IAAI,cAAc,KAAK,eAAe;QAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IACpE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,eAAe,CAAC,aAAa,EAAE,YAAY,EAAE,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;AACvG,CAAC;AAED,SAAS,kBAAkB,CAAC,KAA+C;IACzE,OAAQ,KAA4B,CAAC,IAAI,KAAK,QAAQ,CAAC;AACzD,CAAC;AAED,oFAAoF;AACpF,SAAS,aAAa,CAAC,GAAqB,EAAE,YAAqB;IACjE,MAAM,QAAQ,GAAY,GAAG,CAAC,MAAM,CAAC;IACrC,IACE,CAAC,aAAa,CAAC,QAAQ,CAAC;QACxB,OAAO,QAAQ,CAAC,SAAS,CAAC,KAAK,QAAQ;QACvC,OAAO,QAAQ,CAAC,MAAM,CAAC,KAAK,QAAQ,EACpC,CAAC;QACD,MAAM,IAAI,eAAe,CACvB,YAAY,EACZ,kFAAkF,CACnF,CAAC;IACJ,CAAC;IACD,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,GAAG,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;QAC9D,MAAM,IAAI,eAAe,CAAC,YAAY,EAAE,oDAAoD,CAAC,CAAC;IAChG,CAAC;IACD,uEAAuE;IACvE,qEAAqE;IACrE,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC9F,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IACxE,MAAM,cAAc,GAAwB,EAAE,EAAE,EAAE,QAAQ,KAAK,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAC1F,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC;QACvB,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC;IAC5E,CAAC;IACD,MAAM,KAAK,GAA0B,EAAE,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;IAC9F,OAAO,EAAE,GAAG,eAAe,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,cAAc,EAAE,CAAC;AACrE,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,YAAY,CAC1B,MAAgD,EAChD,YAAqB;IAErB,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAClH,CAAC"}
|
|
1
|
+
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../src/bundle.ts"],"names":[],"mappings":"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"}
|