@peac/telemetry 0.12.5 → 0.12.6

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.
@@ -11,6 +11,7 @@ export declare const PEAC_ATTRS: {
11
11
  readonly VERSION: "peac.version";
12
12
  readonly EVENT: "peac.event";
13
13
  readonly RECEIPT_HASH: "peac.receipt.hash";
14
+ readonly RECEIPT_REF: "peac.receipt.ref";
14
15
  readonly POLICY_HASH: "peac.policy.hash";
15
16
  readonly DECISION: "peac.decision";
16
17
  readonly REASON_CODE: "peac.reason_code";
@@ -1 +1 @@
1
- {"version":3,"file":"attributes.d.ts","sourceRoot":"","sources":["../src/attributes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;CA0Bb,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,WAAW;;;;CAId,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;CASf,CAAC;AAEX;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB;;;CAG3B,CAAC"}
1
+ {"version":3,"file":"attributes.d.ts","sourceRoot":"","sources":["../src/attributes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;CA2Bb,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,WAAW;;;;CAId,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;CASf,CAAC;AAEX;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB;;;CAG3B,CAAC"}
package/dist/index.cjs CHANGED
@@ -30,6 +30,7 @@ var PEAC_ATTRS = {
30
30
  VERSION: "peac.version",
31
31
  EVENT: "peac.event",
32
32
  RECEIPT_HASH: "peac.receipt.hash",
33
+ RECEIPT_REF: "peac.receipt.ref",
33
34
  POLICY_HASH: "peac.policy.hash",
34
35
  DECISION: "peac.decision",
35
36
  REASON_CODE: "peac.reason_code",
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/noop.ts","../src/provider.ts","../src/attributes.ts"],"names":[],"mappings":";;;AAeO,IAAM,YAAA,GAAkC;AAAA,EAC7C,iBAAiB,MAAM;AAAA,EAAC,CAAA;AAAA,EACxB,mBAAmB,MAAM;AAAA,EAAC,CAAA;AAAA,EAC1B,kBAAkB,MAAM;AAAA,EAAC;AAC3B;;;ACSO,IAAM,WAAA,GAA+C;AAAA,EAC1D,OAAA,EAAS;AACX;AAUO,SAAS,qBAAqB,QAAA,EAA+C;AAClF,EAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AACxB;AAUO,SAAS,oBAAA,GAAsD;AACpE,EAAA,OAAO,WAAA,CAAY,OAAA;AACrB;AAOO,SAAS,kBAAA,GAA8B;AAC5C,EAAA,OAAO,YAAY,OAAA,KAAY,MAAA;AACjC;;;ACrDO,IAAM,UAAA,GAAa;AAAA;AAAA,EAExB,OAAA,EAAS,cAAA;AAAA,EACT,KAAA,EAAO,YAAA;AAAA,EACP,YAAA,EAAc,mBAAA;AAAA,EACd,WAAA,EAAa,kBAAA;AAAA,EACb,QAAA,EAAU,eAAA;AAAA,EACV,WAAA,EAAa,kBAAA;AAAA,EACb,MAAA,EAAQ,aAAA;AAAA,EACR,WAAA,EAAa,kBAAA;AAAA,EACb,GAAA,EAAK,UAAA;AAAA,EACL,KAAA,EAAO,YAAA;AAAA;AAAA,EAGP,WAAA,EAAa,qBAAA;AAAA,EACb,SAAA,EAAW,UAAA;AAAA;AAAA,EACX,cAAA,EAAgB,qBAAA;AAAA,EAChB,gBAAA,EAAkB,uBAAA;AAAA;AAAA,EAGlB,YAAA,EAAc,mBAAA;AAAA,EACd,cAAA,EAAgB,qBAAA;AAAA,EAChB,gBAAA,EAAkB,uBAAA;AAAA;AAAA,EAGlB,WAAA,EAAa;AACf;AAKO,IAAM,WAAA,GAAc;AAAA,EACzB,cAAA,EAAgB,qBAAA;AAAA,EAChB,gBAAA,EAAkB,uBAAA;AAAA,EAClB,eAAA,EAAiB;AACnB;AAKO,IAAM,YAAA,GAAe;AAAA;AAAA,EAE1B,eAAA,EAAiB,sBAAA;AAAA,EACjB,iBAAA,EAAmB,wBAAA;AAAA,EACnB,gBAAA,EAAkB,uBAAA;AAAA;AAAA,EAGlB,cAAA,EAAgB,qBAAA;AAAA,EAChB,eAAA,EAAiB;AACnB;AAQO,IAAM,wBAAA,GAA2B;AAAA,EACtC,WAAA,EAAa,iBAAA;AAAA,EACb,UAAA,EAAY;AACd","file":"index.cjs","sourcesContent":["/**\n * @peac/telemetry - No-op telemetry provider\n *\n * This provider does nothing. Use it when telemetry is disabled\n * or when you need a fallback provider.\n */\n\nimport type { TelemetryProvider } from './types.js';\n\n/**\n * No-op telemetry provider\n *\n * All methods are empty functions that do nothing.\n * Use this as the default when no telemetry is configured.\n */\nexport const noopProvider: TelemetryProvider = {\n onReceiptIssued: () => {},\n onReceiptVerified: () => {},\n onAccessDecision: () => {},\n};\n","/**\n * @peac/telemetry - Provider registry\n *\n * Zero-throw provider ref pattern for hot-path performance.\n * When undefined, telemetry is disabled with NO function calls.\n */\n\nimport type { TelemetryProvider } from './types.js';\n\n/**\n * Singleton provider reference for zero-overhead hot path.\n *\n * When undefined, telemetry is disabled with NO function calls\n * beyond the initial `if (!p)` check.\n *\n * @example\n * ```typescript\n * // In hot path (issue/verify)\n * const p = providerRef.current;\n * if (p) {\n * try {\n * p.onReceiptIssued({ receiptHash: '...' });\n * } catch {\n * // Telemetry MUST NOT break core flow\n * }\n * }\n * ```\n */\nexport const providerRef: { current?: TelemetryProvider } = {\n current: undefined,\n};\n\n/**\n * Set the telemetry provider.\n *\n * Idempotent, no-throw, safe to call multiple times.\n * Pass undefined to disable telemetry.\n *\n * @param provider - The provider to use, or undefined to disable\n */\nexport function setTelemetryProvider(provider: TelemetryProvider | undefined): void {\n providerRef.current = provider;\n}\n\n/**\n * Get the current telemetry provider.\n *\n * Returns undefined if no provider is set (telemetry disabled).\n *\n * For hot paths, prefer direct access to `providerRef.current`\n * to avoid the function call overhead.\n */\nexport function getTelemetryProvider(): TelemetryProvider | undefined {\n return providerRef.current;\n}\n\n/**\n * Check if telemetry is enabled.\n *\n * Convenience function for conditional logic outside hot paths.\n */\nexport function isTelemetryEnabled(): boolean {\n return providerRef.current !== undefined;\n}\n","/**\n * @peac/telemetry - Attribute constants\n *\n * Standard attribute names for PEAC telemetry.\n * Uses stable OTel semantic conventions where applicable.\n */\n\n/**\n * PEAC-specific attribute names\n */\nexport const PEAC_ATTRS = {\n // Core (always emitted)\n VERSION: 'peac.version',\n EVENT: 'peac.event',\n RECEIPT_HASH: 'peac.receipt.hash',\n POLICY_HASH: 'peac.policy.hash',\n DECISION: 'peac.decision',\n REASON_CODE: 'peac.reason_code',\n ISSUER: 'peac.issuer',\n ISSUER_HASH: 'peac.issuer_hash',\n KID: 'peac.kid',\n VALID: 'peac.valid',\n\n // HTTP (privacy-safe, stable OTel semconv)\n HTTP_METHOD: 'http.request.method',\n HTTP_PATH: 'url.path', // No query string\n HTTP_HOST_HASH: 'peac.http.host_hash',\n HTTP_CLIENT_HASH: 'peac.http.client_hash',\n\n // Payment (balanced/custom mode only)\n PAYMENT_RAIL: 'peac.payment.rail',\n PAYMENT_AMOUNT: 'peac.payment.amount',\n PAYMENT_CURRENCY: 'peac.payment.currency',\n\n // Duration\n DURATION_MS: 'peac.duration_ms',\n} as const;\n\n/**\n * PEAC event names\n */\nexport const PEAC_EVENTS = {\n RECEIPT_ISSUED: 'peac.receipt.issued',\n RECEIPT_VERIFIED: 'peac.receipt.verified',\n ACCESS_DECISION: 'peac.access.decision',\n} as const;\n\n/**\n * PEAC metric names\n */\nexport const PEAC_METRICS = {\n // Counters\n RECEIPTS_ISSUED: 'peac.receipts.issued',\n RECEIPTS_VERIFIED: 'peac.receipts.verified',\n ACCESS_DECISIONS: 'peac.access.decisions',\n\n // Histograms\n ISSUE_DURATION: 'peac.issue.duration',\n VERIFY_DURATION: 'peac.verify.duration',\n} as const;\n\n/**\n * Extension keys for trace context binding\n *\n * Uses w3c/ namespace for vendor neutrality.\n * W3C owns the Trace Context spec; OTel implements it.\n */\nexport const TRACE_CONTEXT_EXTENSIONS = {\n TRACEPARENT: 'w3c/traceparent',\n TRACESTATE: 'w3c/tracestate',\n} as const;\n"]}
1
+ {"version":3,"sources":["../src/noop.ts","../src/provider.ts","../src/attributes.ts"],"names":[],"mappings":";;;AAeO,IAAM,YAAA,GAAkC;AAAA,EAC7C,iBAAiB,MAAM;AAAA,EAAC,CAAA;AAAA,EACxB,mBAAmB,MAAM;AAAA,EAAC,CAAA;AAAA,EAC1B,kBAAkB,MAAM;AAAA,EAAC;AAC3B;;;ACSO,IAAM,WAAA,GAA+C;AAAA,EAC1D,OAAA,EAAS;AACX;AAUO,SAAS,qBAAqB,QAAA,EAA+C;AAClF,EAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AACxB;AAUO,SAAS,oBAAA,GAAsD;AACpE,EAAA,OAAO,WAAA,CAAY,OAAA;AACrB;AAOO,SAAS,kBAAA,GAA8B;AAC5C,EAAA,OAAO,YAAY,OAAA,KAAY,MAAA;AACjC;;;ACrDO,IAAM,UAAA,GAAa;AAAA;AAAA,EAExB,OAAA,EAAS,cAAA;AAAA,EACT,KAAA,EAAO,YAAA;AAAA,EACP,YAAA,EAAc,mBAAA;AAAA,EACd,WAAA,EAAa,kBAAA;AAAA,EACb,WAAA,EAAa,kBAAA;AAAA,EACb,QAAA,EAAU,eAAA;AAAA,EACV,WAAA,EAAa,kBAAA;AAAA,EACb,MAAA,EAAQ,aAAA;AAAA,EACR,WAAA,EAAa,kBAAA;AAAA,EACb,GAAA,EAAK,UAAA;AAAA,EACL,KAAA,EAAO,YAAA;AAAA;AAAA,EAGP,WAAA,EAAa,qBAAA;AAAA,EACb,SAAA,EAAW,UAAA;AAAA;AAAA,EACX,cAAA,EAAgB,qBAAA;AAAA,EAChB,gBAAA,EAAkB,uBAAA;AAAA;AAAA,EAGlB,YAAA,EAAc,mBAAA;AAAA,EACd,cAAA,EAAgB,qBAAA;AAAA,EAChB,gBAAA,EAAkB,uBAAA;AAAA;AAAA,EAGlB,WAAA,EAAa;AACf;AAKO,IAAM,WAAA,GAAc;AAAA,EACzB,cAAA,EAAgB,qBAAA;AAAA,EAChB,gBAAA,EAAkB,uBAAA;AAAA,EAClB,eAAA,EAAiB;AACnB;AAKO,IAAM,YAAA,GAAe;AAAA;AAAA,EAE1B,eAAA,EAAiB,sBAAA;AAAA,EACjB,iBAAA,EAAmB,wBAAA;AAAA,EACnB,gBAAA,EAAkB,uBAAA;AAAA;AAAA,EAGlB,cAAA,EAAgB,qBAAA;AAAA,EAChB,eAAA,EAAiB;AACnB;AAQO,IAAM,wBAAA,GAA2B;AAAA,EACtC,WAAA,EAAa,iBAAA;AAAA,EACb,UAAA,EAAY;AACd","file":"index.cjs","sourcesContent":["/**\n * @peac/telemetry - No-op telemetry provider\n *\n * This provider does nothing. Use it when telemetry is disabled\n * or when you need a fallback provider.\n */\n\nimport type { TelemetryProvider } from './types.js';\n\n/**\n * No-op telemetry provider\n *\n * All methods are empty functions that do nothing.\n * Use this as the default when no telemetry is configured.\n */\nexport const noopProvider: TelemetryProvider = {\n onReceiptIssued: () => {},\n onReceiptVerified: () => {},\n onAccessDecision: () => {},\n};\n","/**\n * @peac/telemetry - Provider registry\n *\n * Zero-throw provider ref pattern for hot-path performance.\n * When undefined, telemetry is disabled with NO function calls.\n */\n\nimport type { TelemetryProvider } from './types.js';\n\n/**\n * Singleton provider reference for zero-overhead hot path.\n *\n * When undefined, telemetry is disabled with NO function calls\n * beyond the initial `if (!p)` check.\n *\n * @example\n * ```typescript\n * // In hot path (issue/verify)\n * const p = providerRef.current;\n * if (p) {\n * try {\n * p.onReceiptIssued({ receiptHash: '...' });\n * } catch {\n * // Telemetry MUST NOT break core flow\n * }\n * }\n * ```\n */\nexport const providerRef: { current?: TelemetryProvider } = {\n current: undefined,\n};\n\n/**\n * Set the telemetry provider.\n *\n * Idempotent, no-throw, safe to call multiple times.\n * Pass undefined to disable telemetry.\n *\n * @param provider - The provider to use, or undefined to disable\n */\nexport function setTelemetryProvider(provider: TelemetryProvider | undefined): void {\n providerRef.current = provider;\n}\n\n/**\n * Get the current telemetry provider.\n *\n * Returns undefined if no provider is set (telemetry disabled).\n *\n * For hot paths, prefer direct access to `providerRef.current`\n * to avoid the function call overhead.\n */\nexport function getTelemetryProvider(): TelemetryProvider | undefined {\n return providerRef.current;\n}\n\n/**\n * Check if telemetry is enabled.\n *\n * Convenience function for conditional logic outside hot paths.\n */\nexport function isTelemetryEnabled(): boolean {\n return providerRef.current !== undefined;\n}\n","/**\n * @peac/telemetry - Attribute constants\n *\n * Standard attribute names for PEAC telemetry.\n * Uses stable OTel semantic conventions where applicable.\n */\n\n/**\n * PEAC-specific attribute names\n */\nexport const PEAC_ATTRS = {\n // Core (always emitted)\n VERSION: 'peac.version',\n EVENT: 'peac.event',\n RECEIPT_HASH: 'peac.receipt.hash',\n RECEIPT_REF: 'peac.receipt.ref',\n POLICY_HASH: 'peac.policy.hash',\n DECISION: 'peac.decision',\n REASON_CODE: 'peac.reason_code',\n ISSUER: 'peac.issuer',\n ISSUER_HASH: 'peac.issuer_hash',\n KID: 'peac.kid',\n VALID: 'peac.valid',\n\n // HTTP (privacy-safe, stable OTel semconv)\n HTTP_METHOD: 'http.request.method',\n HTTP_PATH: 'url.path', // No query string\n HTTP_HOST_HASH: 'peac.http.host_hash',\n HTTP_CLIENT_HASH: 'peac.http.client_hash',\n\n // Payment (balanced/custom mode only)\n PAYMENT_RAIL: 'peac.payment.rail',\n PAYMENT_AMOUNT: 'peac.payment.amount',\n PAYMENT_CURRENCY: 'peac.payment.currency',\n\n // Duration\n DURATION_MS: 'peac.duration_ms',\n} as const;\n\n/**\n * PEAC event names\n */\nexport const PEAC_EVENTS = {\n RECEIPT_ISSUED: 'peac.receipt.issued',\n RECEIPT_VERIFIED: 'peac.receipt.verified',\n ACCESS_DECISION: 'peac.access.decision',\n} as const;\n\n/**\n * PEAC metric names\n */\nexport const PEAC_METRICS = {\n // Counters\n RECEIPTS_ISSUED: 'peac.receipts.issued',\n RECEIPTS_VERIFIED: 'peac.receipts.verified',\n ACCESS_DECISIONS: 'peac.access.decisions',\n\n // Histograms\n ISSUE_DURATION: 'peac.issue.duration',\n VERIFY_DURATION: 'peac.verify.duration',\n} as const;\n\n/**\n * Extension keys for trace context binding\n *\n * Uses w3c/ namespace for vendor neutrality.\n * W3C owns the Trace Context spec; OTel implements it.\n */\nexport const TRACE_CONTEXT_EXTENSIONS = {\n TRACEPARENT: 'w3c/traceparent',\n TRACESTATE: 'w3c/tracestate',\n} as const;\n"]}
package/dist/index.mjs CHANGED
@@ -28,6 +28,7 @@ var PEAC_ATTRS = {
28
28
  VERSION: "peac.version",
29
29
  EVENT: "peac.event",
30
30
  RECEIPT_HASH: "peac.receipt.hash",
31
+ RECEIPT_REF: "peac.receipt.ref",
31
32
  POLICY_HASH: "peac.policy.hash",
32
33
  DECISION: "peac.decision",
33
34
  REASON_CODE: "peac.reason_code",
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/noop.ts","../src/provider.ts","../src/attributes.ts"],"names":[],"mappings":";AAeO,IAAM,YAAA,GAAkC;AAAA,EAC7C,iBAAiB,MAAM;AAAA,EAAC,CAAA;AAAA,EACxB,mBAAmB,MAAM;AAAA,EAAC,CAAA;AAAA,EAC1B,kBAAkB,MAAM;AAAA,EAAC;AAC3B;;;ACSO,IAAM,WAAA,GAA+C;AAAA,EAC1D,OAAA,EAAS;AACX;AAUO,SAAS,qBAAqB,QAAA,EAA+C;AAClF,EAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AACxB;AAUO,SAAS,oBAAA,GAAsD;AACpE,EAAA,OAAO,WAAA,CAAY,OAAA;AACrB;AAOO,SAAS,kBAAA,GAA8B;AAC5C,EAAA,OAAO,YAAY,OAAA,KAAY,MAAA;AACjC;;;ACrDO,IAAM,UAAA,GAAa;AAAA;AAAA,EAExB,OAAA,EAAS,cAAA;AAAA,EACT,KAAA,EAAO,YAAA;AAAA,EACP,YAAA,EAAc,mBAAA;AAAA,EACd,WAAA,EAAa,kBAAA;AAAA,EACb,QAAA,EAAU,eAAA;AAAA,EACV,WAAA,EAAa,kBAAA;AAAA,EACb,MAAA,EAAQ,aAAA;AAAA,EACR,WAAA,EAAa,kBAAA;AAAA,EACb,GAAA,EAAK,UAAA;AAAA,EACL,KAAA,EAAO,YAAA;AAAA;AAAA,EAGP,WAAA,EAAa,qBAAA;AAAA,EACb,SAAA,EAAW,UAAA;AAAA;AAAA,EACX,cAAA,EAAgB,qBAAA;AAAA,EAChB,gBAAA,EAAkB,uBAAA;AAAA;AAAA,EAGlB,YAAA,EAAc,mBAAA;AAAA,EACd,cAAA,EAAgB,qBAAA;AAAA,EAChB,gBAAA,EAAkB,uBAAA;AAAA;AAAA,EAGlB,WAAA,EAAa;AACf;AAKO,IAAM,WAAA,GAAc;AAAA,EACzB,cAAA,EAAgB,qBAAA;AAAA,EAChB,gBAAA,EAAkB,uBAAA;AAAA,EAClB,eAAA,EAAiB;AACnB;AAKO,IAAM,YAAA,GAAe;AAAA;AAAA,EAE1B,eAAA,EAAiB,sBAAA;AAAA,EACjB,iBAAA,EAAmB,wBAAA;AAAA,EACnB,gBAAA,EAAkB,uBAAA;AAAA;AAAA,EAGlB,cAAA,EAAgB,qBAAA;AAAA,EAChB,eAAA,EAAiB;AACnB;AAQO,IAAM,wBAAA,GAA2B;AAAA,EACtC,WAAA,EAAa,iBAAA;AAAA,EACb,UAAA,EAAY;AACd","file":"index.mjs","sourcesContent":["/**\n * @peac/telemetry - No-op telemetry provider\n *\n * This provider does nothing. Use it when telemetry is disabled\n * or when you need a fallback provider.\n */\n\nimport type { TelemetryProvider } from './types.js';\n\n/**\n * No-op telemetry provider\n *\n * All methods are empty functions that do nothing.\n * Use this as the default when no telemetry is configured.\n */\nexport const noopProvider: TelemetryProvider = {\n onReceiptIssued: () => {},\n onReceiptVerified: () => {},\n onAccessDecision: () => {},\n};\n","/**\n * @peac/telemetry - Provider registry\n *\n * Zero-throw provider ref pattern for hot-path performance.\n * When undefined, telemetry is disabled with NO function calls.\n */\n\nimport type { TelemetryProvider } from './types.js';\n\n/**\n * Singleton provider reference for zero-overhead hot path.\n *\n * When undefined, telemetry is disabled with NO function calls\n * beyond the initial `if (!p)` check.\n *\n * @example\n * ```typescript\n * // In hot path (issue/verify)\n * const p = providerRef.current;\n * if (p) {\n * try {\n * p.onReceiptIssued({ receiptHash: '...' });\n * } catch {\n * // Telemetry MUST NOT break core flow\n * }\n * }\n * ```\n */\nexport const providerRef: { current?: TelemetryProvider } = {\n current: undefined,\n};\n\n/**\n * Set the telemetry provider.\n *\n * Idempotent, no-throw, safe to call multiple times.\n * Pass undefined to disable telemetry.\n *\n * @param provider - The provider to use, or undefined to disable\n */\nexport function setTelemetryProvider(provider: TelemetryProvider | undefined): void {\n providerRef.current = provider;\n}\n\n/**\n * Get the current telemetry provider.\n *\n * Returns undefined if no provider is set (telemetry disabled).\n *\n * For hot paths, prefer direct access to `providerRef.current`\n * to avoid the function call overhead.\n */\nexport function getTelemetryProvider(): TelemetryProvider | undefined {\n return providerRef.current;\n}\n\n/**\n * Check if telemetry is enabled.\n *\n * Convenience function for conditional logic outside hot paths.\n */\nexport function isTelemetryEnabled(): boolean {\n return providerRef.current !== undefined;\n}\n","/**\n * @peac/telemetry - Attribute constants\n *\n * Standard attribute names for PEAC telemetry.\n * Uses stable OTel semantic conventions where applicable.\n */\n\n/**\n * PEAC-specific attribute names\n */\nexport const PEAC_ATTRS = {\n // Core (always emitted)\n VERSION: 'peac.version',\n EVENT: 'peac.event',\n RECEIPT_HASH: 'peac.receipt.hash',\n POLICY_HASH: 'peac.policy.hash',\n DECISION: 'peac.decision',\n REASON_CODE: 'peac.reason_code',\n ISSUER: 'peac.issuer',\n ISSUER_HASH: 'peac.issuer_hash',\n KID: 'peac.kid',\n VALID: 'peac.valid',\n\n // HTTP (privacy-safe, stable OTel semconv)\n HTTP_METHOD: 'http.request.method',\n HTTP_PATH: 'url.path', // No query string\n HTTP_HOST_HASH: 'peac.http.host_hash',\n HTTP_CLIENT_HASH: 'peac.http.client_hash',\n\n // Payment (balanced/custom mode only)\n PAYMENT_RAIL: 'peac.payment.rail',\n PAYMENT_AMOUNT: 'peac.payment.amount',\n PAYMENT_CURRENCY: 'peac.payment.currency',\n\n // Duration\n DURATION_MS: 'peac.duration_ms',\n} as const;\n\n/**\n * PEAC event names\n */\nexport const PEAC_EVENTS = {\n RECEIPT_ISSUED: 'peac.receipt.issued',\n RECEIPT_VERIFIED: 'peac.receipt.verified',\n ACCESS_DECISION: 'peac.access.decision',\n} as const;\n\n/**\n * PEAC metric names\n */\nexport const PEAC_METRICS = {\n // Counters\n RECEIPTS_ISSUED: 'peac.receipts.issued',\n RECEIPTS_VERIFIED: 'peac.receipts.verified',\n ACCESS_DECISIONS: 'peac.access.decisions',\n\n // Histograms\n ISSUE_DURATION: 'peac.issue.duration',\n VERIFY_DURATION: 'peac.verify.duration',\n} as const;\n\n/**\n * Extension keys for trace context binding\n *\n * Uses w3c/ namespace for vendor neutrality.\n * W3C owns the Trace Context spec; OTel implements it.\n */\nexport const TRACE_CONTEXT_EXTENSIONS = {\n TRACEPARENT: 'w3c/traceparent',\n TRACESTATE: 'w3c/tracestate',\n} as const;\n"]}
1
+ {"version":3,"sources":["../src/noop.ts","../src/provider.ts","../src/attributes.ts"],"names":[],"mappings":";AAeO,IAAM,YAAA,GAAkC;AAAA,EAC7C,iBAAiB,MAAM;AAAA,EAAC,CAAA;AAAA,EACxB,mBAAmB,MAAM;AAAA,EAAC,CAAA;AAAA,EAC1B,kBAAkB,MAAM;AAAA,EAAC;AAC3B;;;ACSO,IAAM,WAAA,GAA+C;AAAA,EAC1D,OAAA,EAAS;AACX;AAUO,SAAS,qBAAqB,QAAA,EAA+C;AAClF,EAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AACxB;AAUO,SAAS,oBAAA,GAAsD;AACpE,EAAA,OAAO,WAAA,CAAY,OAAA;AACrB;AAOO,SAAS,kBAAA,GAA8B;AAC5C,EAAA,OAAO,YAAY,OAAA,KAAY,MAAA;AACjC;;;ACrDO,IAAM,UAAA,GAAa;AAAA;AAAA,EAExB,OAAA,EAAS,cAAA;AAAA,EACT,KAAA,EAAO,YAAA;AAAA,EACP,YAAA,EAAc,mBAAA;AAAA,EACd,WAAA,EAAa,kBAAA;AAAA,EACb,WAAA,EAAa,kBAAA;AAAA,EACb,QAAA,EAAU,eAAA;AAAA,EACV,WAAA,EAAa,kBAAA;AAAA,EACb,MAAA,EAAQ,aAAA;AAAA,EACR,WAAA,EAAa,kBAAA;AAAA,EACb,GAAA,EAAK,UAAA;AAAA,EACL,KAAA,EAAO,YAAA;AAAA;AAAA,EAGP,WAAA,EAAa,qBAAA;AAAA,EACb,SAAA,EAAW,UAAA;AAAA;AAAA,EACX,cAAA,EAAgB,qBAAA;AAAA,EAChB,gBAAA,EAAkB,uBAAA;AAAA;AAAA,EAGlB,YAAA,EAAc,mBAAA;AAAA,EACd,cAAA,EAAgB,qBAAA;AAAA,EAChB,gBAAA,EAAkB,uBAAA;AAAA;AAAA,EAGlB,WAAA,EAAa;AACf;AAKO,IAAM,WAAA,GAAc;AAAA,EACzB,cAAA,EAAgB,qBAAA;AAAA,EAChB,gBAAA,EAAkB,uBAAA;AAAA,EAClB,eAAA,EAAiB;AACnB;AAKO,IAAM,YAAA,GAAe;AAAA;AAAA,EAE1B,eAAA,EAAiB,sBAAA;AAAA,EACjB,iBAAA,EAAmB,wBAAA;AAAA,EACnB,gBAAA,EAAkB,uBAAA;AAAA;AAAA,EAGlB,cAAA,EAAgB,qBAAA;AAAA,EAChB,eAAA,EAAiB;AACnB;AAQO,IAAM,wBAAA,GAA2B;AAAA,EACtC,WAAA,EAAa,iBAAA;AAAA,EACb,UAAA,EAAY;AACd","file":"index.mjs","sourcesContent":["/**\n * @peac/telemetry - No-op telemetry provider\n *\n * This provider does nothing. Use it when telemetry is disabled\n * or when you need a fallback provider.\n */\n\nimport type { TelemetryProvider } from './types.js';\n\n/**\n * No-op telemetry provider\n *\n * All methods are empty functions that do nothing.\n * Use this as the default when no telemetry is configured.\n */\nexport const noopProvider: TelemetryProvider = {\n onReceiptIssued: () => {},\n onReceiptVerified: () => {},\n onAccessDecision: () => {},\n};\n","/**\n * @peac/telemetry - Provider registry\n *\n * Zero-throw provider ref pattern for hot-path performance.\n * When undefined, telemetry is disabled with NO function calls.\n */\n\nimport type { TelemetryProvider } from './types.js';\n\n/**\n * Singleton provider reference for zero-overhead hot path.\n *\n * When undefined, telemetry is disabled with NO function calls\n * beyond the initial `if (!p)` check.\n *\n * @example\n * ```typescript\n * // In hot path (issue/verify)\n * const p = providerRef.current;\n * if (p) {\n * try {\n * p.onReceiptIssued({ receiptHash: '...' });\n * } catch {\n * // Telemetry MUST NOT break core flow\n * }\n * }\n * ```\n */\nexport const providerRef: { current?: TelemetryProvider } = {\n current: undefined,\n};\n\n/**\n * Set the telemetry provider.\n *\n * Idempotent, no-throw, safe to call multiple times.\n * Pass undefined to disable telemetry.\n *\n * @param provider - The provider to use, or undefined to disable\n */\nexport function setTelemetryProvider(provider: TelemetryProvider | undefined): void {\n providerRef.current = provider;\n}\n\n/**\n * Get the current telemetry provider.\n *\n * Returns undefined if no provider is set (telemetry disabled).\n *\n * For hot paths, prefer direct access to `providerRef.current`\n * to avoid the function call overhead.\n */\nexport function getTelemetryProvider(): TelemetryProvider | undefined {\n return providerRef.current;\n}\n\n/**\n * Check if telemetry is enabled.\n *\n * Convenience function for conditional logic outside hot paths.\n */\nexport function isTelemetryEnabled(): boolean {\n return providerRef.current !== undefined;\n}\n","/**\n * @peac/telemetry - Attribute constants\n *\n * Standard attribute names for PEAC telemetry.\n * Uses stable OTel semantic conventions where applicable.\n */\n\n/**\n * PEAC-specific attribute names\n */\nexport const PEAC_ATTRS = {\n // Core (always emitted)\n VERSION: 'peac.version',\n EVENT: 'peac.event',\n RECEIPT_HASH: 'peac.receipt.hash',\n RECEIPT_REF: 'peac.receipt.ref',\n POLICY_HASH: 'peac.policy.hash',\n DECISION: 'peac.decision',\n REASON_CODE: 'peac.reason_code',\n ISSUER: 'peac.issuer',\n ISSUER_HASH: 'peac.issuer_hash',\n KID: 'peac.kid',\n VALID: 'peac.valid',\n\n // HTTP (privacy-safe, stable OTel semconv)\n HTTP_METHOD: 'http.request.method',\n HTTP_PATH: 'url.path', // No query string\n HTTP_HOST_HASH: 'peac.http.host_hash',\n HTTP_CLIENT_HASH: 'peac.http.client_hash',\n\n // Payment (balanced/custom mode only)\n PAYMENT_RAIL: 'peac.payment.rail',\n PAYMENT_AMOUNT: 'peac.payment.amount',\n PAYMENT_CURRENCY: 'peac.payment.currency',\n\n // Duration\n DURATION_MS: 'peac.duration_ms',\n} as const;\n\n/**\n * PEAC event names\n */\nexport const PEAC_EVENTS = {\n RECEIPT_ISSUED: 'peac.receipt.issued',\n RECEIPT_VERIFIED: 'peac.receipt.verified',\n ACCESS_DECISION: 'peac.access.decision',\n} as const;\n\n/**\n * PEAC metric names\n */\nexport const PEAC_METRICS = {\n // Counters\n RECEIPTS_ISSUED: 'peac.receipts.issued',\n RECEIPTS_VERIFIED: 'peac.receipts.verified',\n ACCESS_DECISIONS: 'peac.access.decisions',\n\n // Histograms\n ISSUE_DURATION: 'peac.issue.duration',\n VERIFY_DURATION: 'peac.verify.duration',\n} as const;\n\n/**\n * Extension keys for trace context binding\n *\n * Uses w3c/ namespace for vendor neutrality.\n * W3C owns the Trace Context spec; OTel implements it.\n */\nexport const TRACE_CONTEXT_EXTENSIONS = {\n TRACEPARENT: 'w3c/traceparent',\n TRACESTATE: 'w3c/tracestate',\n} as const;\n"]}
package/dist/types.d.ts CHANGED
@@ -39,6 +39,8 @@ export interface TelemetryConfig {
39
39
  export interface ReceiptIssuedInput {
40
40
  /** Hash of the receipt (never raw content) */
41
41
  receiptHash: string;
42
+ /** Content-addressed receipt reference (sha256:<hex64>) */
43
+ receiptRef?: string;
42
44
  /** Hash of the policy used */
43
45
  policyHash?: string;
44
46
  /** Issuer identifier (may be hashed based on privacy mode) */
@@ -56,6 +58,8 @@ export interface ReceiptIssuedInput {
56
58
  export interface ReceiptVerifiedInput {
57
59
  /** Hash of the receipt */
58
60
  receiptHash: string;
61
+ /** Content-addressed receipt reference (sha256:<hex64>) */
62
+ receiptRef?: string;
59
63
  /** Issuer identifier */
60
64
  issuer?: string;
61
65
  /** Key ID used */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;AAE7D;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;IAEpB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,WAAW,CAAC;IAE1B,wEAAwE;IACxE,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAE3B,2CAA2C;IAC3C,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAErE,sEAAsE;IACtE,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,8CAA8C;IAC9C,WAAW,EAAE,MAAM,CAAC;IAEpB,8BAA8B;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,8BAA8B;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,uDAAuD;IACvD,IAAI,CAAC,EAAE,WAAW,CAAC;IAEnB,kDAAkD;IAClD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IAEpB,wBAAwB;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,kBAAkB;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,qCAAqC;IACrC,KAAK,EAAE,OAAO,CAAC;IAEf,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,mBAAmB;IACnB,IAAI,CAAC,EAAE,WAAW,CAAC;IAEnB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,mCAAmC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,uBAAuB;IACvB,QAAQ,EAAE,iBAAiB,CAAC;IAE5B,mCAAmC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,kDAAkD;IAClD,OAAO,CAAC,EAAE,cAAc,CAAC;IAEzB,mBAAmB;IACnB,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,kBAAkB;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,iCAAiC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,4BAA4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,oBAAoB;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAEjD;;OAEG;IACH,iBAAiB,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAErD;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI,CAAC;CACpD"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@peac/telemetry",
3
- "version": "0.12.5",
3
+ "version": "0.12.6",
4
4
  "description": "Telemetry interfaces and no-op implementation for PEAC protocol",
5
5
  "main": "dist/index.cjs",
6
6
  "types": "dist/index.d.ts",
@@ -19,13 +19,13 @@
19
19
  ],
20
20
  "repository": {
21
21
  "type": "git",
22
- "url": "https://github.com/peacprotocol/peac.git",
22
+ "url": "git+https://github.com/peacprotocol/peac.git",
23
23
  "directory": "packages/telemetry"
24
24
  },
25
- "author": "PEAC Protocol contributors",
25
+ "author": "PEAC Protocol Contributors",
26
26
  "license": "Apache-2.0",
27
27
  "dependencies": {
28
- "@peac/kernel": "0.12.5"
28
+ "@peac/kernel": "0.12.6"
29
29
  },
30
30
  "devDependencies": {
31
31
  "@types/node": "^22.19.11",
@@ -34,6 +34,22 @@
34
34
  "tsup": "^8.0.0"
35
35
  },
36
36
  "sideEffects": false,
37
+ "bugs": {
38
+ "url": "https://github.com/peacprotocol/peac/issues"
39
+ },
40
+ "homepage": "https://github.com/peacprotocol/peac#readme",
41
+ "keywords": [
42
+ "peac",
43
+ "peacprotocol",
44
+ "interaction-records",
45
+ "signed-records",
46
+ "receipts",
47
+ "originary",
48
+ "telemetry",
49
+ "observability",
50
+ "metrics",
51
+ "instrumentation"
52
+ ],
37
53
  "scripts": {
38
54
  "prebuild": "rm -rf dist",
39
55
  "build": "pnpm run build:js && pnpm run build:types",