@hlos-ai/schemas 0.6.0 → 0.7.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 +1 -1
- package/dist/index.cjs +178 -13
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +389 -9
- package/dist/index.d.ts +389 -9
- package/dist/index.js +162 -13
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1219,9 +1219,57 @@ var SignedRejectionReceiptV0Schema = z13.object({
|
|
|
1219
1219
|
signature: Base64urlEd25519SigSchema
|
|
1220
1220
|
}).strict();
|
|
1221
1221
|
|
|
1222
|
-
// src/
|
|
1223
|
-
|
|
1224
|
-
var
|
|
1222
|
+
// src/liability-waiver-terms-v0.ts
|
|
1223
|
+
import { z as z14 } from "zod";
|
|
1224
|
+
var LIABILITY_WAIVER_TERMS_TYPE_URI = "https://hlos.ai/schema/LiabilityWaiverTermsV0";
|
|
1225
|
+
var LIABILITY_WAIVER_TERMS_VERSION = 0;
|
|
1226
|
+
var LiabilityDispositionSchema = z14.enum([
|
|
1227
|
+
"ABSORB",
|
|
1228
|
+
"RELEASE",
|
|
1229
|
+
"TRANSFER",
|
|
1230
|
+
"DISPUTE"
|
|
1231
|
+
]);
|
|
1232
|
+
var LiabilityWaiverTermsPartiesSchema = z14.object({
|
|
1233
|
+
offered_by: z14.string().min(1).optional(),
|
|
1234
|
+
offered_to: z14.string().min(1).optional(),
|
|
1235
|
+
beneficiary: z14.string().min(1).optional(),
|
|
1236
|
+
burdened_party: z14.string().min(1).optional()
|
|
1237
|
+
}).strict();
|
|
1238
|
+
var LiabilityWaiverTermsScopeSchema = z14.object({
|
|
1239
|
+
crossing_id: z14.string().min(1).optional(),
|
|
1240
|
+
commitment_hash: Base64urlSha256Schema.optional(),
|
|
1241
|
+
claim_scope: z14.string().min(1).optional()
|
|
1242
|
+
}).strict();
|
|
1243
|
+
var LiabilityWaiverTermsConditionsSchema = z14.object({
|
|
1244
|
+
effective_if: z14.record(z14.unknown()).optional(),
|
|
1245
|
+
expires_at: z14.string().datetime().optional(),
|
|
1246
|
+
jurisdiction: z14.string().min(1).optional()
|
|
1247
|
+
}).strict();
|
|
1248
|
+
var LiabilityWaiverTermsHashInputSchema = z14.object({
|
|
1249
|
+
parties: LiabilityWaiverTermsPartiesSchema,
|
|
1250
|
+
liability_effect: LiabilityDispositionSchema,
|
|
1251
|
+
scope: LiabilityWaiverTermsScopeSchema,
|
|
1252
|
+
conditions: LiabilityWaiverTermsConditionsSchema.optional(),
|
|
1253
|
+
canonical_terms: z14.record(z14.unknown()).optional()
|
|
1254
|
+
}).strict();
|
|
1255
|
+
var LiabilityWaiverTermsRefV0Schema = z14.object({
|
|
1256
|
+
waiver_id: z14.string().min(1).optional(),
|
|
1257
|
+
terms_hash: Base64urlSha256Schema,
|
|
1258
|
+
type: z14.literal(LIABILITY_WAIVER_TERMS_TYPE_URI),
|
|
1259
|
+
version: z14.literal(LIABILITY_WAIVER_TERMS_VERSION)
|
|
1260
|
+
}).strict();
|
|
1261
|
+
var LiabilityWaiverTermsV0Schema = z14.object({
|
|
1262
|
+
"@type": z14.literal(LIABILITY_WAIVER_TERMS_TYPE_URI),
|
|
1263
|
+
version: z14.literal(LIABILITY_WAIVER_TERMS_VERSION),
|
|
1264
|
+
waiver_id: z14.string().min(1),
|
|
1265
|
+
terms_hash: Base64urlSha256Schema,
|
|
1266
|
+
parties: LiabilityWaiverTermsPartiesSchema,
|
|
1267
|
+
liability_effect: LiabilityDispositionSchema,
|
|
1268
|
+
scope: LiabilityWaiverTermsScopeSchema,
|
|
1269
|
+
conditions: LiabilityWaiverTermsConditionsSchema.optional(),
|
|
1270
|
+
human_readable_summary: z14.string().min(1).optional(),
|
|
1271
|
+
canonical_terms: z14.record(z14.unknown()).optional()
|
|
1272
|
+
}).strict();
|
|
1225
1273
|
var cachedSha256 = null;
|
|
1226
1274
|
function loadSha256() {
|
|
1227
1275
|
if (cachedSha256) return cachedSha256;
|
|
@@ -1237,24 +1285,104 @@ function loadSha256() {
|
|
|
1237
1285
|
sha256 = _require("@noble/hashes/sha2").sha256;
|
|
1238
1286
|
} catch {
|
|
1239
1287
|
throw new Error(
|
|
1240
|
-
"
|
|
1288
|
+
"Liability waiver hashing requires @noble/hashes as a peer dependency. Install it: npm install @noble/hashes"
|
|
1241
1289
|
);
|
|
1242
1290
|
}
|
|
1243
1291
|
}
|
|
1244
1292
|
cachedSha256 = sha256;
|
|
1245
1293
|
return sha256;
|
|
1246
1294
|
}
|
|
1247
|
-
function
|
|
1295
|
+
function toLiabilityWaiverTermsHashInput(terms) {
|
|
1296
|
+
return {
|
|
1297
|
+
parties: terms.parties,
|
|
1298
|
+
liability_effect: terms.liability_effect,
|
|
1299
|
+
scope: terms.scope,
|
|
1300
|
+
...terms.conditions !== void 0 ? { conditions: terms.conditions } : {},
|
|
1301
|
+
...terms.canonical_terms !== void 0 ? { canonical_terms: terms.canonical_terms } : {}
|
|
1302
|
+
};
|
|
1303
|
+
}
|
|
1304
|
+
function computeLiabilityWaiverTermsHash(input) {
|
|
1248
1305
|
const sha256 = loadSha256();
|
|
1306
|
+
const canonical = jcsCanonicalize(input);
|
|
1307
|
+
const digest = sha256(new TextEncoder().encode(canonical));
|
|
1308
|
+
return bytesToBase64url(digest);
|
|
1309
|
+
}
|
|
1310
|
+
|
|
1311
|
+
// src/srr-v1.ts
|
|
1312
|
+
import { z as z15 } from "zod";
|
|
1313
|
+
var SRR_V1_TYPE_URI = "https://hlos.ai/schema/SignedRejectionReceiptV1";
|
|
1314
|
+
var SRR_V1_VERSION = 1;
|
|
1315
|
+
var SRR_V1_REJECTION_DOMAIN = "kernel:u:rejection:v1";
|
|
1316
|
+
var SRR_V1_SIGNATURE_ALGORITHM = SRR_SIGNATURE_ALGORITHM;
|
|
1317
|
+
var SignedRejectionReceiptV1Schema = z15.object({
|
|
1318
|
+
"@type": z15.literal(SRR_V1_TYPE_URI),
|
|
1319
|
+
version: z15.literal(SRR_V1_VERSION),
|
|
1320
|
+
receipt_id: z15.string().regex(
|
|
1321
|
+
/^srr_[0-9A-HJKMNP-TV-Z]{26}$/i,
|
|
1322
|
+
"receipt_id must be srr_ + 26-char ULID"
|
|
1323
|
+
),
|
|
1324
|
+
crossing_id: z15.string().min(1),
|
|
1325
|
+
reason_code: z15.string().regex(REASON_CODE_PATTERN, "reason_code must be UPPER_SNAKE_CASE, 3-64 chars"),
|
|
1326
|
+
reason_message: z15.string().min(1),
|
|
1327
|
+
details: z15.record(z15.unknown()).optional(),
|
|
1328
|
+
commitment_hash: Base64urlSha256Schema.optional(),
|
|
1329
|
+
issuer_id: z15.string().min(1),
|
|
1330
|
+
rejected_at: z15.string().datetime(),
|
|
1331
|
+
issuer_public_key_ref: z15.string().min(1),
|
|
1332
|
+
signature_algorithm: z15.literal(SRR_V1_SIGNATURE_ALGORITHM),
|
|
1333
|
+
liability_disposition: LiabilityDispositionSchema,
|
|
1334
|
+
waiver_terms_ref: LiabilityWaiverTermsRefV0Schema.optional(),
|
|
1335
|
+
signature: Base64urlEd25519SigSchema
|
|
1336
|
+
}).strict().superRefine((value, ctx) => {
|
|
1337
|
+
if ((value.liability_disposition === "RELEASE" || value.liability_disposition === "TRANSFER") && value.waiver_terms_ref === void 0) {
|
|
1338
|
+
ctx.addIssue({
|
|
1339
|
+
code: z15.ZodIssueCode.custom,
|
|
1340
|
+
path: ["waiver_terms_ref"],
|
|
1341
|
+
message: "waiver_terms_ref is required for RELEASE and TRANSFER"
|
|
1342
|
+
});
|
|
1343
|
+
}
|
|
1344
|
+
});
|
|
1345
|
+
|
|
1346
|
+
// src/srr-signing.ts
|
|
1347
|
+
var textEncoder = new TextEncoder();
|
|
1348
|
+
var DOMAIN_BYTES_V0 = textEncoder.encode(SRR_REJECTION_DOMAIN);
|
|
1349
|
+
var DOMAIN_BYTES_V1 = textEncoder.encode(SRR_V1_REJECTION_DOMAIN);
|
|
1350
|
+
var cachedSha2562 = null;
|
|
1351
|
+
function loadSha2562() {
|
|
1352
|
+
if (cachedSha2562) return cachedSha2562;
|
|
1353
|
+
const moduleApi = typeof process.getBuiltinModule === "function" ? process.getBuiltinModule("module") : __require("module");
|
|
1354
|
+
const createRequire = moduleApi.createRequire;
|
|
1355
|
+
const requireBase = typeof __filename === "string" ? __filename : `${process.cwd()}/package.json`;
|
|
1356
|
+
const _require = createRequire(requireBase);
|
|
1357
|
+
let sha256;
|
|
1358
|
+
try {
|
|
1359
|
+
sha256 = _require("@noble/hashes/sha2.js").sha256;
|
|
1360
|
+
} catch {
|
|
1361
|
+
try {
|
|
1362
|
+
sha256 = _require("@noble/hashes/sha2").sha256;
|
|
1363
|
+
} catch {
|
|
1364
|
+
throw new Error(
|
|
1365
|
+
"SRR signing requires @noble/hashes as a peer dependency. Install it: npm install @noble/hashes"
|
|
1366
|
+
);
|
|
1367
|
+
}
|
|
1368
|
+
}
|
|
1369
|
+
cachedSha2562 = sha256;
|
|
1370
|
+
return sha256;
|
|
1371
|
+
}
|
|
1372
|
+
function computeSrrSigningPayload(unsignedSrr) {
|
|
1373
|
+
const sha256 = loadSha2562();
|
|
1249
1374
|
const canonical = jcsCanonicalize(unsignedSrr);
|
|
1250
1375
|
const digest = sha256(textEncoder.encode(canonical));
|
|
1251
|
-
const
|
|
1252
|
-
|
|
1253
|
-
|
|
1376
|
+
const domainBytes = unsignedSrr["@type"] === SRR_V1_TYPE_URI ? DOMAIN_BYTES_V1 : unsignedSrr["@type"] === SRR_TYPE_URI ? DOMAIN_BYTES_V0 : (() => {
|
|
1377
|
+
throw new Error("Unsupported SRR type for signing payload construction");
|
|
1378
|
+
})();
|
|
1379
|
+
const payload = new Uint8Array(domainBytes.length + digest.length);
|
|
1380
|
+
payload.set(domainBytes, 0);
|
|
1381
|
+
payload.set(digest, domainBytes.length);
|
|
1254
1382
|
return payload;
|
|
1255
1383
|
}
|
|
1256
1384
|
function computeSrrDigest(signedSrr) {
|
|
1257
|
-
const sha256 =
|
|
1385
|
+
const sha256 = loadSha2562();
|
|
1258
1386
|
const canonical = jcsCanonicalize(signedSrr);
|
|
1259
1387
|
return bytesToBase64url(sha256(textEncoder.encode(canonical)));
|
|
1260
1388
|
}
|
|
@@ -1310,23 +1438,28 @@ async function verifySignedRejectionReceipt(params) {
|
|
|
1310
1438
|
if (!srr || typeof srr !== "object") {
|
|
1311
1439
|
return { valid: false, reason: "SCHEMA_VIOLATION" };
|
|
1312
1440
|
}
|
|
1313
|
-
if (srr.signature_algorithm !== SRR_SIGNATURE_ALGORITHM) {
|
|
1441
|
+
if (typeof srr.signature_algorithm === "string" && srr.signature_algorithm !== SRR_SIGNATURE_ALGORITHM) {
|
|
1314
1442
|
return { valid: false, reason: "UNSUPPORTED_ALGORITHM" };
|
|
1315
1443
|
}
|
|
1316
|
-
const
|
|
1444
|
+
const wireType = srr["@type"];
|
|
1445
|
+
if (wireType !== SRR_V1_TYPE_URI && wireType !== SRR_TYPE_URI) {
|
|
1446
|
+
return { valid: false, reason: "SCHEMA_VIOLATION" };
|
|
1447
|
+
}
|
|
1448
|
+
const parseResult = wireType === SRR_V1_TYPE_URI ? SignedRejectionReceiptV1Schema.safeParse(srr) : SignedRejectionReceiptV0Schema.safeParse(srr);
|
|
1317
1449
|
if (!parseResult.success) {
|
|
1318
1450
|
return { valid: false, reason: "SCHEMA_VIOLATION" };
|
|
1319
1451
|
}
|
|
1452
|
+
const parsedSrr = parseResult.data;
|
|
1320
1453
|
let signingPayload;
|
|
1321
1454
|
try {
|
|
1322
|
-
const { signature, ...unsignedFields } =
|
|
1455
|
+
const { signature, ...unsignedFields } = parsedSrr;
|
|
1323
1456
|
signingPayload = computeSrrSigningPayload(unsignedFields);
|
|
1324
1457
|
} catch {
|
|
1325
1458
|
return { valid: false, reason: "PAYLOAD_CONSTRUCTION_ERROR" };
|
|
1326
1459
|
}
|
|
1327
1460
|
let signatureBytes;
|
|
1328
1461
|
try {
|
|
1329
|
-
signatureBytes = base64urlToBytes(
|
|
1462
|
+
signatureBytes = base64urlToBytes(parsedSrr.signature);
|
|
1330
1463
|
} catch {
|
|
1331
1464
|
return { valid: false, reason: "INVALID_SIGNATURE" };
|
|
1332
1465
|
}
|
|
@@ -1382,7 +1515,16 @@ export {
|
|
|
1382
1515
|
KernelErrorCodeSchema2 as KernelErrorCodeSchema,
|
|
1383
1516
|
KernelErrorSchema,
|
|
1384
1517
|
KernelOkSchema,
|
|
1518
|
+
LIABILITY_WAIVER_TERMS_TYPE_URI,
|
|
1519
|
+
LIABILITY_WAIVER_TERMS_VERSION,
|
|
1385
1520
|
LiabilityAttestationContentSchema,
|
|
1521
|
+
LiabilityDispositionSchema,
|
|
1522
|
+
LiabilityWaiverTermsConditionsSchema,
|
|
1523
|
+
LiabilityWaiverTermsHashInputSchema,
|
|
1524
|
+
LiabilityWaiverTermsPartiesSchema,
|
|
1525
|
+
LiabilityWaiverTermsRefV0Schema,
|
|
1526
|
+
LiabilityWaiverTermsScopeSchema,
|
|
1527
|
+
LiabilityWaiverTermsV0Schema,
|
|
1386
1528
|
LogInclusionProofSchema,
|
|
1387
1529
|
NA_ID_PREFIX,
|
|
1388
1530
|
NotarizeResponseSchema,
|
|
@@ -1409,6 +1551,10 @@ export {
|
|
|
1409
1551
|
SRR_REJECTION_DOMAIN,
|
|
1410
1552
|
SRR_SIGNATURE_ALGORITHM,
|
|
1411
1553
|
SRR_TYPE_URI,
|
|
1554
|
+
SRR_V1_REJECTION_DOMAIN,
|
|
1555
|
+
SRR_V1_SIGNATURE_ALGORITHM,
|
|
1556
|
+
SRR_V1_TYPE_URI,
|
|
1557
|
+
SRR_V1_VERSION,
|
|
1412
1558
|
SRR_VERSION,
|
|
1413
1559
|
SURFACES,
|
|
1414
1560
|
SettlementAnchorContentSchema,
|
|
@@ -1419,6 +1565,7 @@ export {
|
|
|
1419
1565
|
SignedReceiptV0LooseSchema,
|
|
1420
1566
|
SignedReceiptV0Schema,
|
|
1421
1567
|
SignedRejectionReceiptV0Schema,
|
|
1568
|
+
SignedRejectionReceiptV1Schema,
|
|
1422
1569
|
StackConnectionSchema,
|
|
1423
1570
|
StackProviderSchema,
|
|
1424
1571
|
StackSchema,
|
|
@@ -1436,6 +1583,7 @@ export {
|
|
|
1436
1583
|
base64urlToBytes,
|
|
1437
1584
|
bytesToBase64url,
|
|
1438
1585
|
computeContentHash,
|
|
1586
|
+
computeLiabilityWaiverTermsHash,
|
|
1439
1587
|
computeReceiptHash,
|
|
1440
1588
|
computeSrrDigest,
|
|
1441
1589
|
computeSrrSigningPayload,
|
|
@@ -1459,6 +1607,7 @@ export {
|
|
|
1459
1607
|
kernelError,
|
|
1460
1608
|
kernelOk,
|
|
1461
1609
|
success,
|
|
1610
|
+
toLiabilityWaiverTermsHashInput,
|
|
1462
1611
|
validateTimeWindow,
|
|
1463
1612
|
verifyAAR,
|
|
1464
1613
|
verifyDetachedEd25519,
|