@peac/audit 0.12.2 → 0.12.4

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/dist/index.d.ts CHANGED
@@ -58,4 +58,7 @@ export { BUNDLE_VERSION, createCaseBundle, generateBundleSummary, filterByDisput
58
58
  export { BUNDLE_VERSION as DISPUTE_BUNDLE_VERSION_v2, DISPUTE_BUNDLE_VERSION, VERIFICATION_REPORT_VERSION, type BundleKind, type BundleRef, type ManifestFileEntry, type ManifestReceiptEntry, type ManifestKeyEntry, type BundleTimeRange, type DisputeBundleManifest, type CreateDisputeBundleOptions, type JsonWebKeySet, type JsonWebKey, type DisputeBundleContents, type ReceiptVerificationResult, type KeyUsageEntry, type AuditorSummary, type VerificationReport, type VerifyBundleOptions, type BundleError, type BundleResult, } from './dispute-bundle-types.js';
59
59
  export { createDisputeBundle, readDisputeBundle, verifyBundleIntegrity, getBundleContentHash, } from './dispute-bundle.js';
60
60
  export { verifyBundle, serializeReport, formatReportText } from './verification-report.js';
61
+ export type { CommerceEvidenceBundle, CommerceSummary, CreateCommerceBundleOptions, ProtocolEvidence, TimelineEntry, ObservedAmount, } from './commerce-bundle-types.js';
62
+ export { COMMERCE_BUNDLE_VERSION } from './commerce-bundle-types.js';
63
+ export { createCommerceEvidenceBundle, addProtocolEvidence, addTimelineEntry, addReceiptRef, computeCommerceSummary, serializeCommerceBundle, } from './commerce-bundle.js';
61
64
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AAEH,eAAO,MAAM,qBAAqB,WAAW,CAAC;AAG9C,YAAY,EACV,cAAc,EACd,aAAa,EACb,YAAY,EACZ,UAAU,EACV,aAAa,EACb,YAAY,EACZ,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,uBAAuB,EACvB,uBAAuB,EACvB,YAAY,EACZ,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,gBAAgB,GACtB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,eAAe,EACf,WAAW,EACX,cAAc,EACd,UAAU,EACV,mBAAmB,EACnB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,GACtB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,KAAK,gBAAgB,GACtB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,cAAc,IAAI,yBAAyB,EAC3C,sBAAsB,EACtB,2BAA2B,EAC3B,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,KAAK,YAAY,GAClB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AAEH,eAAO,MAAM,qBAAqB,WAAW,CAAC;AAG9C,YAAY,EACV,cAAc,EACd,aAAa,EACb,YAAY,EACZ,UAAU,EACV,aAAa,EACb,YAAY,EACZ,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,uBAAuB,EACvB,uBAAuB,EACvB,YAAY,EACZ,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,gBAAgB,GACtB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,eAAe,EACf,WAAW,EACX,cAAc,EACd,UAAU,EACV,mBAAmB,EACnB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,GACtB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,KAAK,gBAAgB,GACtB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,cAAc,IAAI,yBAAyB,EAC3C,sBAAsB,EACtB,2BAA2B,EAC3B,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,KAAK,YAAY,GAClB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG3F,YAAY,EACV,sBAAsB,EACtB,eAAe,EACf,2BAA2B,EAC3B,gBAAgB,EAChB,aAAa,EACb,cAAc,GACf,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAErE,OAAO,EACL,4BAA4B,EAC5B,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC"}
package/dist/index.mjs CHANGED
@@ -1525,9 +1525,106 @@ function formatReportText(report) {
1525
1525
  return lines.join("\n");
1526
1526
  }
1527
1527
 
1528
+ // src/commerce-bundle-types.ts
1529
+ var COMMERCE_BUNDLE_VERSION = "peac.commerce-bundle/0.1-experimental";
1530
+
1531
+ // src/commerce-bundle.ts
1532
+ function createCommerceEvidenceBundle(options) {
1533
+ const evidence = options.evidence ?? [];
1534
+ const timeline = options.timeline ?? [];
1535
+ const receipts = options.receipts ?? [];
1536
+ const bundle = {
1537
+ version: COMMERCE_BUNDLE_VERSION,
1538
+ transaction_ref: options.transaction_ref,
1539
+ rails_observed: extractRails(evidence),
1540
+ protocol_evidence: evidence,
1541
+ timeline: sortTimeline(timeline),
1542
+ receipts,
1543
+ summary: computeCommerceSummary(evidence),
1544
+ created_at: options.created_at ?? (/* @__PURE__ */ new Date()).toISOString()
1545
+ };
1546
+ return bundle;
1547
+ }
1548
+ function addProtocolEvidence(bundle, evidence) {
1549
+ const newEvidence = [...bundle.protocol_evidence, evidence];
1550
+ return {
1551
+ ...bundle,
1552
+ protocol_evidence: newEvidence,
1553
+ rails_observed: extractRails(newEvidence),
1554
+ summary: computeCommerceSummary(newEvidence)
1555
+ };
1556
+ }
1557
+ function addTimelineEntry(bundle, entry) {
1558
+ return {
1559
+ ...bundle,
1560
+ timeline: sortTimeline([...bundle.timeline, entry])
1561
+ };
1562
+ }
1563
+ function addReceiptRef(bundle, receiptRef) {
1564
+ return {
1565
+ ...bundle,
1566
+ receipts: [...bundle.receipts, receiptRef]
1567
+ };
1568
+ }
1569
+ function computeCommerceSummary(evidence) {
1570
+ const observedAmounts = [];
1571
+ const currencies = /* @__PURE__ */ new Set();
1572
+ const rails = /* @__PURE__ */ new Set();
1573
+ for (const ev of evidence) {
1574
+ const data = ev.data;
1575
+ const amount = typeof data.amount_minor === "string" ? data.amount_minor : typeof data.amount === "string" ? data.amount : typeof data.amount === "number" ? String(data.amount) : void 0;
1576
+ const currency = typeof data.currency === "string" ? data.currency : void 0;
1577
+ const rail = typeof data.payment_rail === "string" ? data.payment_rail : void 0;
1578
+ const stage = typeof data.commerce_event === "string" ? data.commerce_event : typeof data.semantic_stage === "string" ? data.semantic_stage : void 0;
1579
+ if (amount && currency) {
1580
+ observedAmounts.push({
1581
+ source: ev.source,
1582
+ amount,
1583
+ currency: currency.toUpperCase(),
1584
+ semantic_stage: stage
1585
+ });
1586
+ currencies.add(currency.toUpperCase());
1587
+ }
1588
+ if (rail) rails.add(rail);
1589
+ }
1590
+ return {
1591
+ observed_amounts: observedAmounts,
1592
+ currencies_observed: [...currencies].sort(),
1593
+ rails_observed: [...rails].sort(),
1594
+ evidence_count: evidence.length
1595
+ };
1596
+ }
1597
+ function serializeCommerceBundle(bundle) {
1598
+ return JSON.stringify(stableSort(bundle), null, 2);
1599
+ }
1600
+ function stableSort(value) {
1601
+ if (value === null || value === void 0) return value;
1602
+ if (typeof value !== "object") return value;
1603
+ if (Array.isArray(value)) return value.map(stableSort);
1604
+ const sorted = {};
1605
+ for (const key of Object.keys(value).sort()) {
1606
+ sorted[key] = stableSort(value[key]);
1607
+ }
1608
+ return sorted;
1609
+ }
1610
+ function extractRails(evidence) {
1611
+ const rails = /* @__PURE__ */ new Set();
1612
+ for (const ev of evidence) {
1613
+ if (typeof ev.data.payment_rail === "string") {
1614
+ rails.add(ev.data.payment_rail);
1615
+ }
1616
+ }
1617
+ return [...rails].sort();
1618
+ }
1619
+ function sortTimeline(entries) {
1620
+ return [...entries].sort(
1621
+ (a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime()
1622
+ );
1623
+ }
1624
+
1528
1625
  // src/index.ts
1529
1626
  var AUDIT_PACKAGE_VERSION = "0.9.27";
1530
1627
 
1531
- export { AUDIT_EVENT_TYPES, AUDIT_PACKAGE_VERSION, AUDIT_SEVERITIES, AUDIT_VERSION, BUNDLE_VERSION, DISPUTE_BUNDLE_VERSION, BUNDLE_VERSION2 as DISPUTE_BUNDLE_VERSION_v2, VERIFICATION_REPORT_VERSION, correlateByTrace, createAuditEntry, createCaseBundle, createDisputeBundle, createJsonlAppender, filterByDispute, filterByResource, filterByTimeRange, filterByTraceId, formatJsonl, formatJsonlLine, formatReportText, generateAuditId, generateBundleSummary, getBundleContentHash, isValidAuditEntry, isValidTraceContext, isValidUlid, parseJsonl, parseJsonlLine, readDisputeBundle, serializeBundle, serializeReport, validateAuditEntry, verifyBundle, verifyBundleIntegrity };
1628
+ export { AUDIT_EVENT_TYPES, AUDIT_PACKAGE_VERSION, AUDIT_SEVERITIES, AUDIT_VERSION, BUNDLE_VERSION, COMMERCE_BUNDLE_VERSION, DISPUTE_BUNDLE_VERSION, BUNDLE_VERSION2 as DISPUTE_BUNDLE_VERSION_v2, VERIFICATION_REPORT_VERSION, addProtocolEvidence, addReceiptRef, addTimelineEntry, computeCommerceSummary, correlateByTrace, createAuditEntry, createCaseBundle, createCommerceEvidenceBundle, createDisputeBundle, createJsonlAppender, filterByDispute, filterByResource, filterByTimeRange, filterByTraceId, formatJsonl, formatJsonlLine, formatReportText, generateAuditId, generateBundleSummary, getBundleContentHash, isValidAuditEntry, isValidTraceContext, isValidUlid, parseJsonl, parseJsonlLine, readDisputeBundle, serializeBundle, serializeCommerceBundle, serializeReport, validateAuditEntry, verifyBundle, verifyBundleIntegrity };
1532
1629
  //# sourceMappingURL=index.mjs.map
1533
1630
  //# sourceMappingURL=index.mjs.map