@emilia-protocol/gate 0.18.2 → 0.20.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.
Files changed (70) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/README.md +64 -0
  3. package/action-refusal-statement.js +1 -0
  4. package/coverage-reconciliation-attestation.js +1 -0
  5. package/dist/action-refusal-statement.d.ts +109 -0
  6. package/dist/action-refusal-statement.d.ts.map +1 -0
  7. package/dist/action-refusal-statement.js +333 -0
  8. package/dist/action-refusal-statement.js.map +1 -0
  9. package/dist/coverage-reconciliation-attestation.d.ts +29 -0
  10. package/dist/coverage-reconciliation-attestation.d.ts.map +1 -0
  11. package/dist/coverage-reconciliation-attestation.js +111 -0
  12. package/dist/coverage-reconciliation-attestation.js.map +1 -0
  13. package/dist/gate-qualification-v2.d.ts +4 -0
  14. package/dist/gate-qualification-v2.d.ts.map +1 -1
  15. package/dist/gate-qualification-v2.js +39 -47
  16. package/dist/gate-qualification-v2.js.map +1 -1
  17. package/dist/index.d.ts +7 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +7 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/loss-allocation-schedule.d.ts +53 -0
  22. package/dist/loss-allocation-schedule.d.ts.map +1 -0
  23. package/dist/loss-allocation-schedule.js +351 -0
  24. package/dist/loss-allocation-schedule.js.map +1 -0
  25. package/dist/loss-experience-feed.d.ts +82 -0
  26. package/dist/loss-experience-feed.d.ts.map +1 -0
  27. package/dist/loss-experience-feed.js +314 -0
  28. package/dist/loss-experience-feed.js.map +1 -0
  29. package/dist/open-exposure-ledger-postgres.d.ts +40 -0
  30. package/dist/open-exposure-ledger-postgres.d.ts.map +1 -0
  31. package/dist/open-exposure-ledger-postgres.js +577 -0
  32. package/dist/open-exposure-ledger-postgres.js.map +1 -0
  33. package/dist/open-exposure-ledger.d.ts +243 -0
  34. package/dist/open-exposure-ledger.d.ts.map +1 -0
  35. package/dist/open-exposure-ledger.js +794 -0
  36. package/dist/open-exposure-ledger.js.map +1 -0
  37. package/dist/receipt-census.d.ts +21 -0
  38. package/dist/receipt-census.d.ts.map +1 -0
  39. package/dist/receipt-census.js +162 -0
  40. package/dist/receipt-census.js.map +1 -0
  41. package/dist/reliance-program.d.ts +88 -0
  42. package/dist/reliance-program.d.ts.map +1 -0
  43. package/dist/reliance-program.js +437 -0
  44. package/dist/reliance-program.js.map +1 -0
  45. package/dist/reliance-risk-crypto.d.ts +28 -0
  46. package/dist/reliance-risk-crypto.d.ts.map +1 -0
  47. package/dist/reliance-risk-crypto.js +110 -0
  48. package/dist/reliance-risk-crypto.js.map +1 -0
  49. package/dist/remedy-program.d.ts.map +1 -1
  50. package/dist/remedy-program.js +28 -18
  51. package/dist/remedy-program.js.map +1 -1
  52. package/loss-allocation-schedule.js +1 -0
  53. package/loss-experience-feed.js +1 -0
  54. package/open-exposure-ledger-postgres.js +1 -0
  55. package/open-exposure-ledger.js +1 -0
  56. package/package.json +42 -2
  57. package/receipt-census.js +1 -0
  58. package/reliance-program.js +3 -0
  59. package/src/action-refusal-statement.ts +396 -0
  60. package/src/coverage-reconciliation-attestation.ts +107 -0
  61. package/src/gate-qualification-v2.ts +56 -46
  62. package/src/index.ts +7 -0
  63. package/src/loss-allocation-schedule.ts +427 -0
  64. package/src/loss-experience-feed.ts +398 -0
  65. package/src/open-exposure-ledger-postgres.ts +701 -0
  66. package/src/open-exposure-ledger.ts +1213 -0
  67. package/src/receipt-census.ts +163 -0
  68. package/src/reliance-program.ts +499 -0
  69. package/src/reliance-risk-crypto.ts +114 -0
  70. package/src/remedy-program.ts +28 -17
@@ -0,0 +1,351 @@
1
+ // @ts-nocheck
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ /**
4
+ * EP-LOSS-ALLOCATION-SCHEDULE-v1.
5
+ *
6
+ * A separately signed, status-gated record of responsibility terms for one
7
+ * relying party and one exact Reliance Program. It does not adjudicate legal
8
+ * liability, prove solvency or coverage, authorize an action, or move money.
9
+ */
10
+ import { canonicalize } from './execution-binding.js';
11
+ import { RISK_DIGEST, riskDigest, riskExact, riskFreeze, riskIdentifier, riskInstant, riskRecord, signRiskBody, verifyRiskBody, } from './reliance-risk-crypto.js';
12
+ export const LOSS_ALLOCATION_SCHEDULE_VERSION = 'EP-LOSS-ALLOCATION-SCHEDULE-v1';
13
+ export const LOSS_ALLOCATION_SCHEDULE_CLAIM_BOUNDARY = 'signed_terms_not_legal_liability_adjudication_enforceability_insurance_coverage_solvency_authorization_or_payment';
14
+ const SOURCE_KEYS = [
15
+ 'schedule_id', 'relying_party_id', 'program', 'issued_at', 'valid_from',
16
+ 'expires_at', 'status_target', 'rules', 'claim_boundary',
17
+ ];
18
+ const BODY_KEYS = ['@version', ...SOURCE_KEYS, 'issuer'];
19
+ const PROGRAM_KEYS = ['program_id', 'version', 'source_digest', 'program_digest'];
20
+ const STATUS_TARGET_KEYS = ['type', 'usage'];
21
+ const RULE_KEYS = [
22
+ 'failure_class', 'responsible_party_id', 'allocation', 'terms_digest',
23
+ 'dispute_endpoint',
24
+ ];
25
+ const ALLOCATION_KEYS = ['currency', 'max_amount_minor'];
26
+ const ISSUER_KEYS = ['id', 'key_id'];
27
+ const STATUS_KEYS = ['outcome', 'target_digest'];
28
+ const FAILURE_CLASS = /^[a-z][a-z0-9._-]{0,127}$/;
29
+ const CURRENCY = /^[A-Z]{3}$/;
30
+ const MINOR_AMOUNT = /^(0|[1-9][0-9]*)$/;
31
+ const MAX_RULES = 256;
32
+ const ADMISSIBILITY_VERDICTS = Object.freeze([
33
+ 'unverifiable', 'conflicted', 'stale', 'missing_evidence', 'admissible',
34
+ ]);
35
+ export class LossAllocationScheduleValidationError extends TypeError {
36
+ code;
37
+ constructor(code, message) {
38
+ super(message);
39
+ this.name = 'LossAllocationScheduleValidationError';
40
+ this.code = code;
41
+ }
42
+ }
43
+ function refuse(code, message) {
44
+ throw new LossAllocationScheduleValidationError(code, message);
45
+ }
46
+ function validateProgram(value) {
47
+ return riskExact(value, PROGRAM_KEYS)
48
+ && riskIdentifier(value.program_id)
49
+ && Number.isSafeInteger(value.version) && value.version >= 1
50
+ && typeof value.source_digest === 'string' && RISK_DIGEST.test(value.source_digest)
51
+ && typeof value.program_digest === 'string' && RISK_DIGEST.test(value.program_digest);
52
+ }
53
+ function httpsEndpoint(value) {
54
+ if (value === null)
55
+ return true;
56
+ if (typeof value !== 'string' || value.length > 2048)
57
+ return false;
58
+ try {
59
+ const parsed = new URL(value);
60
+ return parsed.protocol === 'https:' && parsed.username === '' && parsed.password === '';
61
+ }
62
+ catch {
63
+ return false;
64
+ }
65
+ }
66
+ function validateRules(value) {
67
+ if (!Array.isArray(value) || value.length < 1 || value.length > MAX_RULES) {
68
+ refuse('schedule_rules_invalid', 'loss-allocation rules must be a bounded non-empty array');
69
+ }
70
+ const classes = new Map();
71
+ let previousFailureClass = null;
72
+ for (const rule of value) {
73
+ if (!riskExact(rule, RULE_KEYS)
74
+ || typeof rule.failure_class !== 'string' || !FAILURE_CLASS.test(rule.failure_class)
75
+ || !riskIdentifier(rule.responsible_party_id)
76
+ || !riskExact(rule.allocation, ALLOCATION_KEYS)
77
+ || typeof rule.allocation.currency !== 'string' || !CURRENCY.test(rule.allocation.currency)
78
+ || typeof rule.allocation.max_amount_minor !== 'string'
79
+ || !MINOR_AMOUNT.test(rule.allocation.max_amount_minor)
80
+ || typeof rule.terms_digest !== 'string' || !RISK_DIGEST.test(rule.terms_digest)
81
+ || !httpsEndpoint(rule.dispute_endpoint)) {
82
+ refuse('failure_rule_invalid', 'failure rule or decimal monetary allocation is invalid');
83
+ }
84
+ const canonicalRule = canonicalize(rule);
85
+ const previous = classes.get(rule.failure_class);
86
+ if (previous !== undefined) {
87
+ refuse(previous === canonicalRule ? 'duplicate_failure_rule' : 'conflicting_failure_rule', 'duplicate or conflicting failure class is not allowed');
88
+ }
89
+ if (previousFailureClass !== null && previousFailureClass > rule.failure_class) {
90
+ refuse('rules_not_canonical_order', 'failure rules must be strictly ordered by ASCII failure class');
91
+ }
92
+ previousFailureClass = rule.failure_class;
93
+ classes.set(rule.failure_class, canonicalRule);
94
+ }
95
+ }
96
+ function validateTimes(value) {
97
+ const issuedAt = riskInstant(value.issued_at);
98
+ const validFrom = riskInstant(value.valid_from);
99
+ const expiresAt = riskInstant(value.expires_at);
100
+ if (!Number.isFinite(issuedAt) || !Number.isFinite(validFrom) || !Number.isFinite(expiresAt)
101
+ || expiresAt <= validFrom || issuedAt > expiresAt) {
102
+ refuse('schedule_validity_invalid', 'schedule issuance and validity window are invalid');
103
+ }
104
+ }
105
+ function validateSource(value) {
106
+ try {
107
+ canonicalize(value);
108
+ }
109
+ catch {
110
+ refuse('schedule_not_canonical', 'loss-allocation source is not canonicalizable JSON');
111
+ }
112
+ if (!riskExact(value, SOURCE_KEYS)
113
+ || !riskIdentifier(value.schedule_id)
114
+ || !riskIdentifier(value.relying_party_id)
115
+ || !validateProgram(value.program)
116
+ || !riskExact(value.status_target, STATUS_TARGET_KEYS)
117
+ || value.status_target.type !== 'loss-allocation-schedule'
118
+ || value.status_target.usage !== 'reliance') {
119
+ refuse('schedule_schema_invalid', 'loss-allocation source is not a closed v1 object');
120
+ }
121
+ validateTimes(value);
122
+ validateRules(value.rules);
123
+ if (value.claim_boundary !== LOSS_ALLOCATION_SCHEDULE_CLAIM_BOUNDARY) {
124
+ refuse('claim_boundary_invalid', 'loss-allocation claim boundary is missing or changed');
125
+ }
126
+ }
127
+ function validateBody(value) {
128
+ try {
129
+ canonicalize(value);
130
+ }
131
+ catch {
132
+ refuse('schedule_not_canonical', 'signed loss-allocation body is not canonicalizable JSON');
133
+ }
134
+ if (!riskExact(value, BODY_KEYS)
135
+ || value['@version'] !== LOSS_ALLOCATION_SCHEDULE_VERSION
136
+ || !riskExact(value.issuer, ISSUER_KEYS)
137
+ || !riskIdentifier(value.issuer.id)
138
+ || !riskIdentifier(value.issuer.key_id)) {
139
+ refuse('schedule_schema_invalid', 'signed loss-allocation body is not a closed v1 object');
140
+ }
141
+ const { '@version': _version, issuer: _issuer, ...source } = value;
142
+ validateSource(source);
143
+ }
144
+ function signedParts(artifact) {
145
+ if (!riskRecord(artifact) || !riskRecord(artifact.proof)) {
146
+ refuse('artifact_shape_invalid', 'signed loss-allocation artifact is malformed');
147
+ }
148
+ const { proof: _proof, ...body } = artifact;
149
+ validateBody(body);
150
+ return { artifact, body };
151
+ }
152
+ function verificationTime(value) {
153
+ if (value === undefined)
154
+ return Date.now();
155
+ if (value instanceof Date)
156
+ return value.getTime();
157
+ if (typeof value === 'number')
158
+ return Number.isFinite(value) ? value : NaN;
159
+ return riskInstant(value);
160
+ }
161
+ function sameProgram(actual, expected) {
162
+ return actual.program_id === expected.program_id
163
+ && actual.version === expected.version
164
+ && actual.source_digest === expected.source_digest
165
+ && actual.program_digest === expected.program_digest;
166
+ }
167
+ /** Digest of the complete signed artifact, including its proof. */
168
+ export function lossAllocationScheduleDigest(artifact) {
169
+ const signed = signedParts(artifact);
170
+ return riskDigest(signed.artifact);
171
+ }
172
+ /** Digest of the exact versioned failure-class rules, excluding program pins. */
173
+ export function lossAllocationRulesDigest(artifact) {
174
+ const signed = signedParts(artifact);
175
+ return riskDigest({
176
+ '@version': LOSS_ALLOCATION_SCHEDULE_VERSION,
177
+ rules: signed.body.rules,
178
+ });
179
+ }
180
+ /**
181
+ * Compact digest pin for an RP-owned Admissibility Profile. Status remains a
182
+ * separate required input; this reference does not claim global freshness.
183
+ */
184
+ export function lossAllocationScheduleProfileReference(artifact) {
185
+ return riskFreeze({
186
+ artifact_type: LOSS_ALLOCATION_SCHEDULE_VERSION,
187
+ artifact_digest: lossAllocationScheduleDigest(artifact),
188
+ required_status: true,
189
+ });
190
+ }
191
+ /** Sign a closed schedule under the shared JCS/Ed25519 risk-artifact proof. */
192
+ export function signLossAllocationSchedule(input, signer) {
193
+ validateSource(input);
194
+ if (!riskRecord(signer)
195
+ || !riskIdentifier(signer.issuer_id)
196
+ || !riskIdentifier(signer.key_id)
197
+ || !Object.hasOwn(signer, 'private_key')) {
198
+ refuse('signing_key_invalid', 'loss-allocation signer is invalid');
199
+ }
200
+ const body = {
201
+ '@version': LOSS_ALLOCATION_SCHEDULE_VERSION,
202
+ ...input,
203
+ issuer: { id: signer.issuer_id, key_id: signer.key_id },
204
+ };
205
+ validateBody(body);
206
+ try {
207
+ return signRiskBody(LOSS_ALLOCATION_SCHEDULE_VERSION, body, signer);
208
+ }
209
+ catch {
210
+ refuse('signing_key_invalid', 'loss-allocation signing key must be Ed25519');
211
+ }
212
+ }
213
+ /** Verify signature, RP/program pins, external current status, and validity. */
214
+ export function verifyLossAllocationSchedule(artifact, options = {}) {
215
+ const fail = (reason, verified = false, scheduleDigest = null) => ({
216
+ accepted: false,
217
+ verified,
218
+ reason,
219
+ schedule_digest: scheduleDigest,
220
+ rules_digest: null,
221
+ claim_boundary: LOSS_ALLOCATION_SCHEDULE_CLAIM_BOUNDARY,
222
+ });
223
+ const signed = verifyRiskBody(artifact, LOSS_ALLOCATION_SCHEDULE_VERSION, options.trusted_keys);
224
+ if (!signed.valid || !signed.body || !signed.artifact_digest) {
225
+ return fail(signed.reason ?? 'schedule_invalid');
226
+ }
227
+ try {
228
+ validateBody(signed.body);
229
+ }
230
+ catch (error) {
231
+ return fail(error instanceof LossAllocationScheduleValidationError
232
+ ? error.code : 'schedule_schema_invalid');
233
+ }
234
+ const body = signed.body;
235
+ const artifactDigest = signed.artifact_digest;
236
+ if (!riskExact(options.status, STATUS_KEYS)
237
+ || typeof options.status.target_digest !== 'string'
238
+ || !RISK_DIGEST.test(options.status.target_digest)) {
239
+ return fail('schedule_status_required', true, artifactDigest);
240
+ }
241
+ if (options.status.target_digest !== artifactDigest) {
242
+ return fail('status_target_mismatch', true, artifactDigest);
243
+ }
244
+ if (options.status.outcome === 'revoked') {
245
+ return fail('schedule_revoked', true, artifactDigest);
246
+ }
247
+ if (options.status.outcome !== 'current_not_revoked') {
248
+ return fail('schedule_status_not_current', true, artifactDigest);
249
+ }
250
+ const now = verificationTime(options.now);
251
+ if (!Number.isFinite(now))
252
+ return fail('verification_time_invalid', true, artifactDigest);
253
+ if (now < riskInstant(body.issued_at)) {
254
+ return fail('schedule_not_yet_issued', true, artifactDigest);
255
+ }
256
+ if (now < riskInstant(body.valid_from)) {
257
+ return fail('schedule_not_yet_valid', true, artifactDigest);
258
+ }
259
+ if (now >= riskInstant(body.expires_at)) {
260
+ return fail('schedule_stale', true, artifactDigest);
261
+ }
262
+ if (options.expected_relying_party_id === undefined) {
263
+ return fail('relying_party_binding_required', true, artifactDigest);
264
+ }
265
+ if (!riskIdentifier(options.expected_relying_party_id)
266
+ || options.expected_relying_party_id !== body.relying_party_id) {
267
+ return fail('relying_party_binding_mismatch', true, artifactDigest);
268
+ }
269
+ if (options.expected_program === undefined) {
270
+ return fail('program_binding_required', true, artifactDigest);
271
+ }
272
+ if (!validateProgram(options.expected_program)) {
273
+ return fail('expected_program_invalid', true, artifactDigest);
274
+ }
275
+ if (!sameProgram(body.program, options.expected_program)) {
276
+ return fail('reliance_program_binding_mismatch', true, artifactDigest);
277
+ }
278
+ return riskFreeze({
279
+ accepted: true,
280
+ verified: true,
281
+ reason: null,
282
+ schedule_digest: artifactDigest,
283
+ rules_digest: lossAllocationRulesDigest(artifact),
284
+ schedule_id: body.schedule_id,
285
+ relying_party_id: body.relying_party_id,
286
+ program_id: body.program.program_id,
287
+ program_version: body.program.version,
288
+ source_digest: body.program.source_digest,
289
+ program_digest: body.program.program_digest,
290
+ issuer_id: body.issuer.id,
291
+ key_id: body.issuer.key_id,
292
+ status: 'current_not_revoked',
293
+ claim_boundary: LOSS_ALLOCATION_SCHEDULE_CLAIM_BOUNDARY,
294
+ });
295
+ }
296
+ /**
297
+ * Build a standard self-hashed Admissibility Profile and its unchanged
298
+ * Reliance Program v1 profile reference. Only schedule identity, RP, issuer,
299
+ * and exact rules are pinned here; final program digests are deliberately
300
+ * excluded to avoid a profile/program/schedule digest cycle.
301
+ */
302
+ export function createLossAllocationAdmissibilityProfilePin(artifact, { profileId, evaluationMaxAgeSec, }, verification) {
303
+ const signed = signedParts(artifact);
304
+ const verified = verifyLossAllocationSchedule(artifact, verification);
305
+ if (verified.accepted !== true) {
306
+ refuse('schedule_verification_required', `cannot pin an unaccepted schedule: ${verified.reason}`);
307
+ }
308
+ if (!riskIdentifier(profileId)
309
+ || !Number.isSafeInteger(evaluationMaxAgeSec)
310
+ || evaluationMaxAgeSec < 1 || evaluationMaxAgeSec > 31_536_000) {
311
+ refuse('admissibility_profile_pin_invalid', 'profile id and evaluation age must be bounded');
312
+ }
313
+ const profileBody = {
314
+ id: profileId,
315
+ version: 1,
316
+ authored_by: signed.body.relying_party_id,
317
+ requires: [{
318
+ evidence: 'loss_allocation_schedule',
319
+ max_staleness_sec: evaluationMaxAgeSec,
320
+ checks: [
321
+ 'signature_valid',
322
+ 'reliance_program_binding_valid',
323
+ 'rules_digest_matches',
324
+ 'status_current',
325
+ ],
326
+ }],
327
+ verdicts: [...ADMISSIBILITY_VERDICTS],
328
+ loss_allocation_schedule: {
329
+ artifact_version: LOSS_ALLOCATION_SCHEDULE_VERSION,
330
+ schedule_id: signed.body.schedule_id,
331
+ relying_party_id: signed.body.relying_party_id,
332
+ issuer_id: signed.body.issuer.id,
333
+ issuer_key_id: signed.body.issuer.key_id,
334
+ rules_digest: lossAllocationRulesDigest(artifact),
335
+ },
336
+ };
337
+ const profile = {
338
+ ...profileBody,
339
+ profile_hash: riskDigest(profileBody),
340
+ };
341
+ return riskFreeze({
342
+ profile,
343
+ reference: {
344
+ profile_id: profile.id,
345
+ profile_hash: profile.profile_hash,
346
+ evaluation_max_age_sec: evaluationMaxAgeSec,
347
+ revocation_required: true,
348
+ },
349
+ });
350
+ }
351
+ //# sourceMappingURL=loss-allocation-schedule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loss-allocation-schedule.js","sourceRoot":"","sources":["../src/loss-allocation-schedule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Signed external loss-experience observations with governed action classes.
3
+ *
4
+ * The feed records what its issuer reports. It deliberately does not establish
5
+ * causation, insurance coverage, legal liability, adjudicated loss, solvency,
6
+ * payment, or authorization.
7
+ */
8
+ import { type RiskRecord, type TrustedRiskKeys } from './reliance-risk-crypto.js';
9
+ export declare const LOSS_EXPERIENCE_FEED_VERSION = "EP-LOSS-EXPERIENCE-FEED-v1";
10
+ export declare const LOSS_EXPERIENCE_FEED_CLAIM_BOUNDARY = "externally_reported_observation_not_verified_causation_not_insurance_coverage_not_legal_liability_not_adjudicated_loss_not_solvency_not_payment_not_authorization";
11
+ export interface VerifyLossExperienceFeedOptions {
12
+ trusted_keys?: TrustedRiskKeys;
13
+ now?: string | number;
14
+ expected_program?: RiskRecord;
15
+ expected_census_digest?: string;
16
+ expected_taxonomy_digest?: string;
17
+ expected_relying_party_id?: string;
18
+ expected_action_classes?: readonly string[];
19
+ commit_lineage_batch?: (request: Readonly<LossExperienceLineageCommitRequest>) => LossExperienceLineageCommitResult;
20
+ }
21
+ export interface LossExperiencePredecessorResolution {
22
+ current_head: boolean;
23
+ reporting_party_id: string;
24
+ relying_party_id: string;
25
+ program_digest: string;
26
+ record: RiskRecord;
27
+ }
28
+ export interface LossExperienceLineageTransition {
29
+ lineage_digest: string;
30
+ event_type: 'OBSERVED' | 'CORRECTED' | 'WITHDRAWN';
31
+ predecessor_digest: string | null;
32
+ successor_digest: string;
33
+ reporting_party_id: string;
34
+ relying_party_id: string;
35
+ program_digest: string;
36
+ receipt_digest: string;
37
+ action_class: string;
38
+ currency: string;
39
+ reported_at: string;
40
+ record: Readonly<RiskRecord>;
41
+ }
42
+ export interface LossExperienceLineageCommitRequest {
43
+ feed_digest: string;
44
+ transitions: readonly LossExperienceLineageTransition[];
45
+ /**
46
+ * The lineage store MUST invoke this callback inside the same transaction
47
+ * after locking/loading the current heads and before making successors
48
+ * visible. A refusal MUST leave every lineage unchanged.
49
+ */
50
+ validate_predecessors: (predecessors: Readonly<Record<string, LossExperiencePredecessorResolution>>) => LossExperienceLineageValidationResult;
51
+ }
52
+ export type LossExperienceLineageValidationResult = {
53
+ accepted: true;
54
+ } | {
55
+ accepted: false;
56
+ reason: string;
57
+ };
58
+ export type LossExperienceLineageCommitResult = {
59
+ accepted: true;
60
+ } | {
61
+ accepted: false;
62
+ reason: string;
63
+ };
64
+ export declare function signLossExperienceFeed(input: RiskRecord, signer: {
65
+ issuer_id: string;
66
+ key_id: string;
67
+ private_key: any;
68
+ }): RiskRecord;
69
+ export declare function verifyLossExperienceFeed(feed: unknown, options?: VerifyLossExperienceFeedOptions): {
70
+ accepted: boolean;
71
+ verified: boolean;
72
+ reason: string;
73
+ feed_digest: string | null;
74
+ claim_boundary: string;
75
+ } | {
76
+ accepted: boolean;
77
+ verified: boolean;
78
+ reason: null;
79
+ feed_digest: string;
80
+ claim_boundary: string;
81
+ };
82
+ //# sourceMappingURL=loss-experience-feed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loss-experience-feed.d.ts","sourceRoot":"","sources":["../src/loss-experience-feed.ts"],"names":[],"mappings":"AACA;;;;;;GAMG;AACH,OAAO,EASL,KAAK,UAAU,EACf,KAAK,eAAe,EACrB,MAAM,2BAA2B,CAAC;AAEnC,eAAO,MAAM,4BAA4B,+BAA+B,CAAC;AACzE,eAAO,MAAM,mCAAmC,sKACqH,CAAC;AAgJtK,MAAM,WAAW,+BAA+B;IAC9C,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,UAAU,CAAC;IAC9B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,uBAAuB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,oBAAoB,CAAC,EAAE,CACrB,OAAO,EAAE,QAAQ,CAAC,kCAAkC,CAAC,KAClD,iCAAiC,CAAC;CACxC;AAED,MAAM,WAAW,mCAAmC;IAClD,YAAY,EAAE,OAAO,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,WAAW,+BAA+B;IAC9C,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,UAAU,GAAG,WAAW,GAAG,WAAW,CAAC;IACnD,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,kCAAkC;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,SAAS,+BAA+B,EAAE,CAAC;IACxD;;;;OAIG;IACH,qBAAqB,EAAE,CACrB,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,mCAAmC,CAAC,CAAC,KACxE,qCAAqC,CAAC;CAC5C;AAED,MAAM,MAAM,qCAAqC,GAC7C;IAAE,QAAQ,EAAE,IAAI,CAAA;CAAE,GAClB;IAAE,QAAQ,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC,MAAM,MAAM,iCAAiC,GACzC;IAAE,QAAQ,EAAE,IAAI,CAAA;CAAE,GAClB;IAAE,QAAQ,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AA+FxC,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,GAAG,CAAA;CAAE,cAQhE;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,OAAO,EACb,OAAO,GAAE,+BAAoC;;;;;;;;;;;;EAkE9C"}