@emilia-protocol/gate 0.11.0 → 0.13.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.
- package/CHANGELOG.md +58 -0
- package/README.md +252 -0
- package/action-control-manifest.js +3 -268
- package/action-escrow-custodian.js +3 -394
- package/action-escrow-evidence.js +3 -858
- package/action-escrow-package.js +3 -1668
- package/action-escrow-postgres.js +3 -337
- package/action-escrow-state.js +3 -396
- package/action-escrow-verifiers.js +3 -331
- package/action-escrow.js +3 -2447
- package/action-packs.js +3 -140
- package/adapters/_kit.js +3 -104
- package/adapters/aws.js +3 -108
- package/adapters/cloudflare.js +3 -54
- package/adapters/gcp.js +3 -70
- package/adapters/github.js +3 -109
- package/adapters/jira.js +3 -55
- package/adapters/k8s.js +3 -70
- package/adapters/linear.js +3 -55
- package/adapters/salesforce.js +3 -55
- package/adapters/stripe.js +3 -81
- package/adapters/supabase.js +3 -121
- package/adapters/terraform.js +3 -59
- package/adapters/vercel.js +3 -84
- package/aec-execution.js +3 -312
- package/breakglass.js +3 -582
- package/capability-receipt.js +4 -0
- package/cf1-conformance.js +3 -106
- package/challenge-store.js +3 -69
- package/control-plane.js +3 -340
- package/coverage.js +3 -721
- package/demo.mjs +1 -1
- package/deployment-attestation.js +3 -247
- package/dist/action-control-manifest.d.ts +82 -0
- package/dist/action-control-manifest.d.ts.map +1 -0
- package/dist/action-control-manifest.js +422 -0
- package/dist/action-control-manifest.js.map +1 -0
- package/dist/action-escrow-custodian.d.ts +74 -0
- package/dist/action-escrow-custodian.d.ts.map +1 -0
- package/dist/action-escrow-custodian.js +363 -0
- package/dist/action-escrow-custodian.js.map +1 -0
- package/dist/action-escrow-evidence.d.ts +130 -0
- package/dist/action-escrow-evidence.d.ts.map +1 -0
- package/dist/action-escrow-evidence.js +1012 -0
- package/dist/action-escrow-evidence.js.map +1 -0
- package/dist/action-escrow-package.d.ts +10 -0
- package/dist/action-escrow-package.d.ts.map +1 -0
- package/dist/action-escrow-package.js +1583 -0
- package/dist/action-escrow-package.js.map +1 -0
- package/dist/action-escrow-postgres.d.ts +62 -0
- package/dist/action-escrow-postgres.d.ts.map +1 -0
- package/dist/action-escrow-postgres.js +339 -0
- package/dist/action-escrow-postgres.js.map +1 -0
- package/dist/action-escrow-state.d.ts +141 -0
- package/dist/action-escrow-state.d.ts.map +1 -0
- package/dist/action-escrow-state.js +413 -0
- package/dist/action-escrow-state.js.map +1 -0
- package/dist/action-escrow-verifiers.d.ts +65 -0
- package/dist/action-escrow-verifiers.d.ts.map +1 -0
- package/dist/action-escrow-verifiers.js +421 -0
- package/dist/action-escrow-verifiers.js.map +1 -0
- package/dist/action-escrow.d.ts +112 -0
- package/dist/action-escrow.d.ts.map +1 -0
- package/dist/action-escrow.js +2661 -0
- package/dist/action-escrow.js.map +1 -0
- package/dist/action-packs.d.ts +54 -0
- package/dist/action-packs.d.ts.map +1 -0
- package/dist/action-packs.js +143 -0
- package/dist/action-packs.js.map +1 -0
- package/dist/adapters/_kit.d.ts +50 -0
- package/dist/adapters/_kit.d.ts.map +1 -0
- package/dist/adapters/_kit.js +98 -0
- package/dist/adapters/_kit.js.map +1 -0
- package/dist/adapters/aws.d.ts +158 -0
- package/dist/adapters/aws.d.ts.map +1 -0
- package/dist/adapters/aws.js +136 -0
- package/dist/adapters/aws.js.map +1 -0
- package/dist/adapters/cloudflare.d.ts +116 -0
- package/dist/adapters/cloudflare.d.ts.map +1 -0
- package/dist/adapters/cloudflare.js +75 -0
- package/dist/adapters/cloudflare.js.map +1 -0
- package/dist/adapters/gcp.d.ts +139 -0
- package/dist/adapters/gcp.d.ts.map +1 -0
- package/dist/adapters/gcp.js +69 -0
- package/dist/adapters/gcp.js.map +1 -0
- package/dist/adapters/github.d.ts +123 -0
- package/dist/adapters/github.d.ts.map +1 -0
- package/dist/adapters/github.js +105 -0
- package/dist/adapters/github.js.map +1 -0
- package/dist/adapters/jira.d.ts +109 -0
- package/dist/adapters/jira.d.ts.map +1 -0
- package/dist/adapters/jira.js +54 -0
- package/dist/adapters/jira.js.map +1 -0
- package/dist/adapters/k8s.d.ts +139 -0
- package/dist/adapters/k8s.d.ts.map +1 -0
- package/dist/adapters/k8s.js +69 -0
- package/dist/adapters/k8s.js.map +1 -0
- package/dist/adapters/linear.d.ts +109 -0
- package/dist/adapters/linear.d.ts.map +1 -0
- package/dist/adapters/linear.js +54 -0
- package/dist/adapters/linear.js.map +1 -0
- package/dist/adapters/salesforce.d.ts +109 -0
- package/dist/adapters/salesforce.d.ts.map +1 -0
- package/dist/adapters/salesforce.js +54 -0
- package/dist/adapters/salesforce.js.map +1 -0
- package/dist/adapters/stripe.d.ts +116 -0
- package/dist/adapters/stripe.d.ts.map +1 -0
- package/dist/adapters/stripe.js +77 -0
- package/dist/adapters/stripe.js.map +1 -0
- package/dist/adapters/supabase.d.ts +127 -0
- package/dist/adapters/supabase.d.ts.map +1 -0
- package/dist/adapters/supabase.js +112 -0
- package/dist/adapters/supabase.js.map +1 -0
- package/dist/adapters/terraform.d.ts +109 -0
- package/dist/adapters/terraform.d.ts.map +1 -0
- package/dist/adapters/terraform.js +58 -0
- package/dist/adapters/terraform.js.map +1 -0
- package/dist/adapters/vercel.d.ts +114 -0
- package/dist/adapters/vercel.d.ts.map +1 -0
- package/dist/adapters/vercel.js +81 -0
- package/dist/adapters/vercel.js.map +1 -0
- package/dist/aec-execution.d.ts +107 -0
- package/dist/aec-execution.d.ts.map +1 -0
- package/dist/aec-execution.js +334 -0
- package/dist/aec-execution.js.map +1 -0
- package/dist/breakglass.d.ts +205 -0
- package/dist/breakglass.d.ts.map +1 -0
- package/dist/breakglass.js +627 -0
- package/dist/breakglass.js.map +1 -0
- package/dist/capability-receipt.d.ts +601 -0
- package/dist/capability-receipt.d.ts.map +1 -0
- package/dist/capability-receipt.js +1177 -0
- package/dist/capability-receipt.js.map +1 -0
- package/dist/cf1-conformance.d.ts +83 -0
- package/dist/cf1-conformance.d.ts.map +1 -0
- package/dist/cf1-conformance.js +94 -0
- package/dist/cf1-conformance.js.map +1 -0
- package/dist/challenge-store.d.ts +20 -0
- package/dist/challenge-store.d.ts.map +1 -0
- package/dist/challenge-store.js +62 -0
- package/dist/challenge-store.js.map +1 -0
- package/dist/control-plane.d.ts +136 -0
- package/dist/control-plane.d.ts.map +1 -0
- package/dist/control-plane.js +349 -0
- package/dist/control-plane.js.map +1 -0
- package/dist/coverage.d.ts +156 -0
- package/dist/coverage.d.ts.map +1 -0
- package/dist/coverage.js +768 -0
- package/dist/coverage.js.map +1 -0
- package/dist/deployment-attestation.d.ts +93 -0
- package/dist/deployment-attestation.d.ts.map +1 -0
- package/dist/deployment-attestation.js +262 -0
- package/dist/deployment-attestation.js.map +1 -0
- package/dist/eg1-conformance.d.ts +286 -0
- package/dist/eg1-conformance.d.ts.map +1 -0
- package/dist/eg1-conformance.js +379 -0
- package/dist/eg1-conformance.js.map +1 -0
- package/dist/enterprise.d.ts +88 -0
- package/dist/enterprise.d.ts.map +1 -0
- package/dist/enterprise.js +194 -0
- package/dist/enterprise.js.map +1 -0
- package/dist/evidence-postgres.d.ts +123 -0
- package/dist/evidence-postgres.d.ts.map +1 -0
- package/dist/evidence-postgres.js +343 -0
- package/dist/evidence-postgres.js.map +1 -0
- package/dist/evidence.d.ts +113 -0
- package/dist/evidence.d.ts.map +1 -0
- package/dist/evidence.js +369 -0
- package/dist/evidence.js.map +1 -0
- package/dist/execution-binding.d.ts +49 -0
- package/dist/execution-binding.d.ts.map +1 -0
- package/dist/execution-binding.js +243 -0
- package/dist/execution-binding.js.map +1 -0
- package/dist/formal-runtime-map.d.ts +42 -0
- package/dist/formal-runtime-map.d.ts.map +1 -0
- package/dist/formal-runtime-map.js +23 -0
- package/dist/formal-runtime-map.js.map +1 -0
- package/dist/index.d.ts +1002 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1736 -0
- package/dist/index.js.map +1 -0
- package/dist/key-registry.d.ts +60 -0
- package/dist/key-registry.d.ts.map +1 -0
- package/dist/key-registry.js +144 -0
- package/dist/key-registry.js.map +1 -0
- package/dist/mcp.d.ts +53 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +112 -0
- package/dist/mcp.js.map +1 -0
- package/dist/metering.d.ts +80 -0
- package/dist/metering.d.ts.map +1 -0
- package/dist/metering.js +227 -0
- package/dist/metering.js.map +1 -0
- package/dist/metrics.d.ts +68 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +242 -0
- package/dist/metrics.js.map +1 -0
- package/dist/network-witness.d.ts +167 -0
- package/dist/network-witness.d.ts.map +1 -0
- package/dist/network-witness.js +520 -0
- package/dist/network-witness.js.map +1 -0
- package/dist/protocol-state.d.ts +141 -0
- package/dist/protocol-state.d.ts.map +1 -0
- package/dist/protocol-state.js +106 -0
- package/dist/protocol-state.js.map +1 -0
- package/dist/receipt-program.d.ts +59 -0
- package/dist/receipt-program.d.ts.map +1 -0
- package/dist/receipt-program.js +1053 -0
- package/dist/receipt-program.js.map +1 -0
- package/dist/reliance-kernel.d.ts +66 -0
- package/dist/reliance-kernel.d.ts.map +1 -0
- package/dist/reliance-kernel.js +103 -0
- package/dist/reliance-kernel.js.map +1 -0
- package/dist/reliance-packet.d.ts +67 -0
- package/dist/reliance-packet.d.ts.map +1 -0
- package/dist/reliance-packet.js +176 -0
- package/dist/reliance-packet.js.map +1 -0
- package/dist/remedy-program-postgres.d.ts +37 -0
- package/dist/remedy-program-postgres.d.ts.map +1 -0
- package/dist/remedy-program-postgres.js +291 -0
- package/dist/remedy-program-postgres.js.map +1 -0
- package/dist/remedy-program-receipt.d.ts +97 -0
- package/dist/remedy-program-receipt.d.ts.map +1 -0
- package/dist/remedy-program-receipt.js +817 -0
- package/dist/remedy-program-receipt.js.map +1 -0
- package/dist/remedy-program.d.ts +76 -0
- package/dist/remedy-program.d.ts.map +1 -0
- package/dist/remedy-program.js +1346 -0
- package/dist/remedy-program.js.map +1 -0
- package/dist/reports/art14.d.ts +101 -0
- package/dist/reports/art14.d.ts.map +1 -0
- package/dist/reports/art14.js +340 -0
- package/dist/reports/art14.js.map +1 -0
- package/dist/reports/assurance-package.d.ts +197 -0
- package/dist/reports/assurance-package.d.ts.map +1 -0
- package/dist/reports/assurance-package.js +313 -0
- package/dist/reports/assurance-package.js.map +1 -0
- package/dist/reports/auditor-workpaper.d.ts +194 -0
- package/dist/reports/auditor-workpaper.d.ts.map +1 -0
- package/dist/reports/auditor-workpaper.js +545 -0
- package/dist/reports/auditor-workpaper.js.map +1 -0
- package/dist/reports/external-verification.d.ts +76 -0
- package/dist/reports/external-verification.d.ts.map +1 -0
- package/dist/reports/external-verification.js +209 -0
- package/dist/reports/external-verification.js.map +1 -0
- package/dist/reports/reperform.d.ts +122 -0
- package/dist/reports/reperform.d.ts.map +1 -0
- package/dist/reports/reperform.js +432 -0
- package/dist/reports/reperform.js.map +1 -0
- package/dist/reports/underwriter.d.ts +127 -0
- package/dist/reports/underwriter.d.ts.map +1 -0
- package/dist/reports/underwriter.js +348 -0
- package/dist/reports/underwriter.js.map +1 -0
- package/dist/retention.d.ts +88 -0
- package/dist/retention.d.ts.map +1 -0
- package/dist/retention.js +90 -0
- package/dist/retention.js.map +1 -0
- package/dist/roster.d.ts +113 -0
- package/dist/roster.d.ts.map +1 -0
- package/dist/roster.js +261 -0
- package/dist/roster.js.map +1 -0
- package/dist/runtime-monitor.d.ts +132 -0
- package/dist/runtime-monitor.d.ts.map +1 -0
- package/dist/runtime-monitor.js +197 -0
- package/dist/runtime-monitor.js.map +1 -0
- package/dist/settlement.d.ts +68 -0
- package/dist/settlement.d.ts.map +1 -0
- package/dist/settlement.js +306 -0
- package/dist/settlement.js.map +1 -0
- package/dist/siem.d.ts +261 -0
- package/dist/siem.d.ts.map +1 -0
- package/dist/siem.js +247 -0
- package/dist/siem.js.map +1 -0
- package/dist/store-postgres.d.ts +107 -0
- package/dist/store-postgres.d.ts.map +1 -0
- package/dist/store-postgres.js +152 -0
- package/dist/store-postgres.js.map +1 -0
- package/dist/store.d.ts +95 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +202 -0
- package/dist/store.js.map +1 -0
- package/dist/strict-json.d.ts +14 -0
- package/dist/strict-json.d.ts.map +1 -0
- package/dist/strict-json.js +132 -0
- package/dist/strict-json.js.map +1 -0
- package/dist/trust-program-adapters.d.ts +122 -0
- package/dist/trust-program-adapters.d.ts.map +1 -0
- package/dist/trust-program-adapters.js +802 -0
- package/dist/trust-program-adapters.js.map +1 -0
- package/dist/trust-program-postgres.d.ts +41 -0
- package/dist/trust-program-postgres.d.ts.map +1 -0
- package/dist/trust-program-postgres.js +346 -0
- package/dist/trust-program-postgres.js.map +1 -0
- package/dist/trust-program-revocation.d.ts +206 -0
- package/dist/trust-program-revocation.d.ts.map +1 -0
- package/dist/trust-program-revocation.js +600 -0
- package/dist/trust-program-revocation.js.map +1 -0
- package/dist/trust-program.d.ts +197 -0
- package/dist/trust-program.d.ts.map +1 -0
- package/dist/trust-program.js +1351 -0
- package/dist/trust-program.js.map +1 -0
- package/dist/witness-postgres.d.ts +43 -0
- package/dist/witness-postgres.d.ts.map +1 -0
- package/dist/witness-postgres.js +92 -0
- package/dist/witness-postgres.js.map +1 -0
- package/dist/zk-range-proof.d.ts +78 -0
- package/dist/zk-range-proof.d.ts.map +1 -0
- package/dist/zk-range-proof.js +228 -0
- package/dist/zk-range-proof.js.map +1 -0
- package/eg1-conformance.js +3 -404
- package/enterprise.js +3 -180
- package/ep-assure.mjs +1 -0
- package/evidence-postgres.js +3 -356
- package/evidence.js +4 -360
- package/execution-binding.js +3 -212
- package/formal-runtime-map.js +4 -0
- package/index.js +4 -1249
- package/key-registry.js +3 -134
- package/mcp.js +3 -109
- package/metering.js +3 -226
- package/metrics.js +3 -231
- package/network-witness.js +3 -499
- package/package.json +31 -2
- package/receipt-program.js +4 -0
- package/reliance-kernel.js +3 -112
- package/reliance-packet.js +3 -175
- package/remedy-program-postgres.js +4 -0
- package/remedy-program-receipt.js +4 -0
- package/remedy-program.js +4 -0
- package/reports/art14.js +0 -0
- package/reports/assurance-package.js +2 -312
- package/reports/auditor-workpaper.js +3 -537
- package/reports/external-verification.js +3 -222
- package/reports/reperform.js +3 -424
- package/reports/underwriter.js +3 -339
- package/retention.js +3 -84
- package/roster.js +3 -264
- package/runtime-monitor.js +4 -0
- package/settlement.js +3 -299
- package/siem.js +3 -235
- package/src/action-control-manifest.ts +424 -0
- package/src/action-escrow-custodian.ts +427 -0
- package/src/action-escrow-evidence.ts +1178 -0
- package/src/action-escrow-package.ts +1821 -0
- package/src/action-escrow-postgres.ts +366 -0
- package/src/action-escrow-state.ts +498 -0
- package/src/action-escrow-verifiers.ts +484 -0
- package/src/action-escrow.ts +3039 -0
- package/src/action-packs.ts +170 -0
- package/src/adapters/_kit.ts +117 -0
- package/src/adapters/aws.ts +142 -0
- package/src/adapters/cloudflare.ts +78 -0
- package/src/adapters/gcp.ts +71 -0
- package/src/adapters/github.ts +110 -0
- package/src/adapters/jira.ts +56 -0
- package/src/adapters/k8s.ts +71 -0
- package/src/adapters/linear.ts +56 -0
- package/src/adapters/salesforce.ts +56 -0
- package/src/adapters/stripe.ts +82 -0
- package/src/adapters/supabase.ts +122 -0
- package/src/adapters/terraform.ts +60 -0
- package/src/adapters/vercel.ts +85 -0
- package/src/aec-execution.ts +354 -0
- package/src/breakglass.ts +647 -0
- package/src/capability-receipt.ts +1258 -0
- package/src/cf1-conformance.ts +120 -0
- package/src/challenge-store.ts +70 -0
- package/src/control-plane.ts +374 -0
- package/src/coverage.ts +832 -0
- package/src/deployment-attestation.ts +259 -0
- package/src/eg1-conformance.ts +471 -0
- package/src/enterprise.ts +195 -0
- package/src/evidence-postgres.ts +374 -0
- package/src/evidence.ts +367 -0
- package/src/execution-binding.ts +236 -0
- package/src/formal-runtime-map.ts +24 -0
- package/src/index.ts +2122 -0
- package/src/key-registry.ts +150 -0
- package/src/mcp.ts +120 -0
- package/src/metering.ts +237 -0
- package/src/metrics.ts +232 -0
- package/src/network-witness.ts +585 -0
- package/src/protocol-state.ts +143 -0
- package/src/protocol-state.typecheck.ts +94 -0
- package/src/receipt-program.ts +1105 -0
- package/src/reliance-kernel.ts +119 -0
- package/src/reliance-packet.ts +206 -0
- package/src/remedy-program-postgres.ts +367 -0
- package/src/remedy-program-receipt.ts +891 -0
- package/src/remedy-program.ts +1388 -0
- package/src/reports/art14.ts +361 -0
- package/src/reports/assurance-package.ts +330 -0
- package/src/reports/auditor-workpaper.ts +558 -0
- package/src/reports/external-verification.ts +232 -0
- package/src/reports/reperform.ts +441 -0
- package/src/reports/underwriter.ts +356 -0
- package/src/retention.ts +100 -0
- package/src/roster.ts +273 -0
- package/src/runtime-monitor.ts +217 -0
- package/src/settlement.ts +313 -0
- package/src/siem.ts +247 -0
- package/src/store-postgres.ts +167 -0
- package/src/store.ts +214 -0
- package/src/strict-json.ts +115 -0
- package/src/trust-program-adapters.ts +847 -0
- package/src/trust-program-postgres.ts +429 -0
- package/src/trust-program-revocation.ts +751 -0
- package/src/trust-program.ts +1460 -0
- package/src/witness-postgres.ts +106 -0
- package/src/zk-range-proof.ts +250 -0
- package/store-postgres.js +3 -161
- package/store.js +4 -198
- package/strict-json.js +3 -102
- package/trust-program-adapters.js +4 -0
- package/trust-program-postgres.js +4 -0
- package/trust-program-revocation.js +4 -0
- package/trust-program.js +4 -0
- package/witness-postgres.js +3 -96
- package/zk-range-proof.js +4 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eg1-conformance.js","sourceRoot":"","sources":["../src/eg1-conformance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
export declare const ENTITLEMENT_VERSION = "EP-GATE-ENTITLEMENT-v1";
|
|
2
|
+
export declare const ENTITLEMENT_TIERS: string[];
|
|
3
|
+
/**
|
|
4
|
+
* Mint a signed entitlement (test/ops helper — the licensing service, not the
|
|
5
|
+
* verifier, holds the private key). Throws on invalid fields: a malformed
|
|
6
|
+
* license must never be issued, only refused.
|
|
7
|
+
* @param {crypto.KeyObject} privateKey Ed25519 private key
|
|
8
|
+
* @param {object} fields { org, tier, features?, limits?, not_before, expires_at, kid }
|
|
9
|
+
* @returns {{ '@version': string, payload: object, signature: { algorithm: 'Ed25519', value: string } }}
|
|
10
|
+
*/
|
|
11
|
+
export declare function mintEntitlement(privateKey: any, { org, tier, features, limits, not_before, expires_at, kid, }: {
|
|
12
|
+
org: string;
|
|
13
|
+
tier: string;
|
|
14
|
+
features?: string[];
|
|
15
|
+
limits?: Record<string, any>;
|
|
16
|
+
not_before: string | number;
|
|
17
|
+
expires_at: string | number;
|
|
18
|
+
kid: string;
|
|
19
|
+
}): {
|
|
20
|
+
'@version': string;
|
|
21
|
+
payload: {
|
|
22
|
+
org: string;
|
|
23
|
+
tier: string;
|
|
24
|
+
features: string[];
|
|
25
|
+
limits: Record<string, any>;
|
|
26
|
+
not_before: string | number;
|
|
27
|
+
expires_at: string | number;
|
|
28
|
+
kid: string;
|
|
29
|
+
};
|
|
30
|
+
signature: {
|
|
31
|
+
algorithm: string;
|
|
32
|
+
value: string;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Verify an entitlement. NEVER throws for a bad artifact — every failure
|
|
37
|
+
* resolves to the community tier with a machine-readable reason, so a licensing
|
|
38
|
+
* problem degrades gracefully instead of bricking the gate. Enterprise features
|
|
39
|
+
* remain gated by `requireFeature`, which fails closed on any non-valid result.
|
|
40
|
+
*
|
|
41
|
+
* @param {object|string|null} entitlementJson the artifact (object or JSON string); absence -> community
|
|
42
|
+
* @param {object} [o]
|
|
43
|
+
* @param {object|Array<{kid:string,key:string}>} [o.issuerKeys] pinned kid -> base64url SPKI-DER public key
|
|
44
|
+
* @param {number|string|function} [o.now=Date.now] injected clock (ms, ISO, or () => ms)
|
|
45
|
+
* @returns {{ valid: boolean, tier: string, features: string[], limits: object|null, reason: string, org?: string, kid?: string, not_before?: any, expires_at?: any }}
|
|
46
|
+
*/
|
|
47
|
+
export declare function verifyEntitlement(entitlementJson: any, { issuerKeys, now, }?: {
|
|
48
|
+
issuerKeys?: Record<string, string> | Array<{
|
|
49
|
+
kid: string;
|
|
50
|
+
key: string;
|
|
51
|
+
}>;
|
|
52
|
+
now?: number | string | (() => number);
|
|
53
|
+
}): {
|
|
54
|
+
valid: boolean;
|
|
55
|
+
tier: string;
|
|
56
|
+
features: never[];
|
|
57
|
+
limits: null;
|
|
58
|
+
reason: any;
|
|
59
|
+
} | {
|
|
60
|
+
valid: boolean;
|
|
61
|
+
tier: any;
|
|
62
|
+
features: any;
|
|
63
|
+
limits: any;
|
|
64
|
+
reason: string;
|
|
65
|
+
org: any;
|
|
66
|
+
kid: any;
|
|
67
|
+
not_before: any;
|
|
68
|
+
expires_at: any;
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Is `feature` licensed? FAIL CLOSED: true only for a valid entitlement that
|
|
72
|
+
* explicitly lists the feature. Community fallback, invalid/expired/tampered
|
|
73
|
+
* artifacts, and unlisted features are all false — no enterprise code path
|
|
74
|
+
* runs without a live license naming it.
|
|
75
|
+
* @param {object} verified the result of verifyEntitlement
|
|
76
|
+
* @param {string} feature
|
|
77
|
+
* @returns {boolean}
|
|
78
|
+
*/
|
|
79
|
+
export declare function requireFeature(verified: any, feature: any): any;
|
|
80
|
+
declare const _default: {
|
|
81
|
+
mintEntitlement: typeof mintEntitlement;
|
|
82
|
+
verifyEntitlement: typeof verifyEntitlement;
|
|
83
|
+
requireFeature: typeof requireFeature;
|
|
84
|
+
ENTITLEMENT_VERSION: string;
|
|
85
|
+
ENTITLEMENT_TIERS: string[];
|
|
86
|
+
};
|
|
87
|
+
export default _default;
|
|
88
|
+
//# sourceMappingURL=enterprise.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enterprise.d.ts","sourceRoot":"","sources":["../src/enterprise.ts"],"names":[],"mappings":"AAyBA,eAAO,MAAM,mBAAmB,2BAA2B,CAAC;AAC5D,eAAO,MAAM,iBAAiB,UAA+D,CAAC;AA0B9F;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,UAAU,KAAA,EAAE,EAC1C,GAAG,EAAE,IAAI,EAAE,QAAa,EAAE,MAAW,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,GACnE,EAAE;IACD,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,GAAG,EAAE,MAAM,CAAC;CACb;;;;;;;;;;;;;;;EAoBA;AAaD;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,eAAe,KAAA,EAAE,EACjD,UAAU,EACV,GAAc,GACf,GAAE;IACD,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1E,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;CACnC;;;;;;;;;;;;;;;;EAwDL;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,QAAQ,KAAA,EAAE,OAAO,KAAA,OAI/C;;;;;;;;AAED,wBAA8G"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
/**
|
|
4
|
+
* EMILIA Gate — enterprise entitlement layer (EP-GATE-ENTITLEMENT-v1).
|
|
5
|
+
*
|
|
6
|
+
* The license key IS an EP-style artifact: a signed entitlement — Ed25519 over
|
|
7
|
+
* canonical JSON (sorted keys, same idiom as receipts/evidence) of
|
|
8
|
+
* { org, tier, features[], limits, not_before, expires_at, kid }. Verifiers pin
|
|
9
|
+
* issuer keys by kid; nothing in the artifact is trusted until the signature
|
|
10
|
+
* verifies against a pinned key.
|
|
11
|
+
*
|
|
12
|
+
* OPEN-CORE SEMANTICS — two different fail directions, by design:
|
|
13
|
+
* - The CORE gate is never bricked. No entitlement, an expired one, a
|
|
14
|
+
* tampered one, an unknown kid — all resolve to { valid:false,
|
|
15
|
+
* tier:'community' } with a machine-readable reason. Community tier always
|
|
16
|
+
* works; a licensing failure can never block the firewall itself.
|
|
17
|
+
* - Enterprise FEATURES fail closed. `requireFeature` returns true ONLY for
|
|
18
|
+
* a cryptographically valid, in-window entitlement that explicitly lists
|
|
19
|
+
* the feature. Everything else — including community fallback — is false.
|
|
20
|
+
*
|
|
21
|
+
* Pure functions: inputs in, verdict out. Time is injected (`now`), never read
|
|
22
|
+
* from the wall clock implicitly, so verification is deterministic.
|
|
23
|
+
*/
|
|
24
|
+
import crypto from 'node:crypto';
|
|
25
|
+
import { strictJsonGate } from './strict-json.js';
|
|
26
|
+
export const ENTITLEMENT_VERSION = 'EP-GATE-ENTITLEMENT-v1';
|
|
27
|
+
export const ENTITLEMENT_TIERS = ['community', 'team', 'business', 'enterprise', 'regulated'];
|
|
28
|
+
/** The tier every failure path resolves to — the gate keeps working on it. */
|
|
29
|
+
const COMMUNITY = 'community';
|
|
30
|
+
/** Canonical JSON (recursive sorted keys) — matches @emilia-protocol/verify. */
|
|
31
|
+
function canonical(v) {
|
|
32
|
+
if (v === null || v === undefined)
|
|
33
|
+
return JSON.stringify(v);
|
|
34
|
+
if (Array.isArray(v))
|
|
35
|
+
return `[${v.map(canonical).join(',')}]`;
|
|
36
|
+
if (typeof v === 'object') {
|
|
37
|
+
return `{${Object.keys(v).sort().map((k) => JSON.stringify(k) + ':' + canonical(v[k])).join(',')}}`;
|
|
38
|
+
}
|
|
39
|
+
return JSON.stringify(v);
|
|
40
|
+
}
|
|
41
|
+
function toMs(t) {
|
|
42
|
+
if (t == null)
|
|
43
|
+
return null;
|
|
44
|
+
const ms = typeof t === 'number' ? t : Date.parse(t);
|
|
45
|
+
return Number.isFinite(ms) ? ms : null;
|
|
46
|
+
}
|
|
47
|
+
/** Community fallback — every refusal shape is identical and machine-readable. */
|
|
48
|
+
function community(reason, extra = {}) {
|
|
49
|
+
return { valid: false, tier: COMMUNITY, features: [], limits: null, reason, ...extra };
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Mint a signed entitlement (test/ops helper — the licensing service, not the
|
|
53
|
+
* verifier, holds the private key). Throws on invalid fields: a malformed
|
|
54
|
+
* license must never be issued, only refused.
|
|
55
|
+
* @param {crypto.KeyObject} privateKey Ed25519 private key
|
|
56
|
+
* @param {object} fields { org, tier, features?, limits?, not_before, expires_at, kid }
|
|
57
|
+
* @returns {{ '@version': string, payload: object, signature: { algorithm: 'Ed25519', value: string } }}
|
|
58
|
+
*/
|
|
59
|
+
export function mintEntitlement(privateKey, { org, tier, features = [], limits = {}, not_before, expires_at, kid, }) {
|
|
60
|
+
if (!org || typeof org !== 'string')
|
|
61
|
+
throw new Error('entitlement: org is required');
|
|
62
|
+
if (!ENTITLEMENT_TIERS.includes(tier)) {
|
|
63
|
+
throw new Error(`entitlement: unknown tier "${tier}" (expected one of ${ENTITLEMENT_TIERS.join('|')})`);
|
|
64
|
+
}
|
|
65
|
+
if (!Array.isArray(features) || features.some((f) => typeof f !== 'string')) {
|
|
66
|
+
throw new Error('entitlement: features must be an array of strings');
|
|
67
|
+
}
|
|
68
|
+
if (!limits || typeof limits !== 'object' || Array.isArray(limits)) {
|
|
69
|
+
throw new Error('entitlement: limits must be an object');
|
|
70
|
+
}
|
|
71
|
+
if (toMs(not_before) == null)
|
|
72
|
+
throw new Error('entitlement: not_before is required (ISO or ms)');
|
|
73
|
+
if (toMs(expires_at) == null)
|
|
74
|
+
throw new Error('entitlement: expires_at is required (ISO or ms)');
|
|
75
|
+
if (!kid || typeof kid !== 'string')
|
|
76
|
+
throw new Error('entitlement: kid is required');
|
|
77
|
+
// Snapshot features/limits into the signed payload: embedding the caller's live
|
|
78
|
+
// array/object would let a licensing service mutate them after minting and
|
|
79
|
+
// diverge the entitlement from its signature.
|
|
80
|
+
const payload = { org, tier, features: structuredClone(features), limits: structuredClone(limits), not_before, expires_at, kid };
|
|
81
|
+
const value = crypto.sign(null, Buffer.from(canonical(payload), 'utf8'), privateKey).toString('base64url');
|
|
82
|
+
return { '@version': ENTITLEMENT_VERSION, payload, signature: { algorithm: 'Ed25519', value } };
|
|
83
|
+
}
|
|
84
|
+
/** Resolve a base64url SPKI-DER key for `kid` from a map or an entry list. */
|
|
85
|
+
function issuerKeyFor(issuerKeys, kid) {
|
|
86
|
+
if (!issuerKeys)
|
|
87
|
+
return null;
|
|
88
|
+
if (Array.isArray(issuerKeys)) {
|
|
89
|
+
const e = issuerKeys.find((x) => x && x.kid === kid && typeof x.key === 'string');
|
|
90
|
+
return e ? e.key : null;
|
|
91
|
+
}
|
|
92
|
+
const k = issuerKeys[kid];
|
|
93
|
+
return typeof k === 'string' ? k : null;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Verify an entitlement. NEVER throws for a bad artifact — every failure
|
|
97
|
+
* resolves to the community tier with a machine-readable reason, so a licensing
|
|
98
|
+
* problem degrades gracefully instead of bricking the gate. Enterprise features
|
|
99
|
+
* remain gated by `requireFeature`, which fails closed on any non-valid result.
|
|
100
|
+
*
|
|
101
|
+
* @param {object|string|null} entitlementJson the artifact (object or JSON string); absence -> community
|
|
102
|
+
* @param {object} [o]
|
|
103
|
+
* @param {object|Array<{kid:string,key:string}>} [o.issuerKeys] pinned kid -> base64url SPKI-DER public key
|
|
104
|
+
* @param {number|string|function} [o.now=Date.now] injected clock (ms, ISO, or () => ms)
|
|
105
|
+
* @returns {{ valid: boolean, tier: string, features: string[], limits: object|null, reason: string, org?: string, kid?: string, not_before?: any, expires_at?: any }}
|
|
106
|
+
*/
|
|
107
|
+
export function verifyEntitlement(entitlementJson, { issuerKeys, now = Date.now, } = {}) {
|
|
108
|
+
// Absence is NOT an error: the open-core floor. Community keeps working.
|
|
109
|
+
if (entitlementJson == null || entitlementJson === '')
|
|
110
|
+
return community('no_entitlement');
|
|
111
|
+
let doc = entitlementJson;
|
|
112
|
+
if (typeof doc === 'string') {
|
|
113
|
+
try {
|
|
114
|
+
if (Buffer.byteLength(doc, 'utf8') > 1024 * 1024 || !strictJsonGate(doc).ok)
|
|
115
|
+
return community('entitlement_unparseable');
|
|
116
|
+
doc = JSON.parse(doc);
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
return community('entitlement_unparseable');
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
if (!doc || typeof doc !== 'object' || Array.isArray(doc))
|
|
123
|
+
return community('entitlement_malformed');
|
|
124
|
+
if (doc['@version'] !== ENTITLEMENT_VERSION)
|
|
125
|
+
return community('unsupported_version');
|
|
126
|
+
const p = doc.payload;
|
|
127
|
+
const sig = doc.signature;
|
|
128
|
+
if (!p || typeof p !== 'object' || !sig || typeof sig !== 'object')
|
|
129
|
+
return community('entitlement_malformed');
|
|
130
|
+
if (sig.algorithm !== 'Ed25519' || typeof sig.value !== 'string')
|
|
131
|
+
return community('unsupported_algorithm');
|
|
132
|
+
if (!ENTITLEMENT_TIERS.includes(p.tier))
|
|
133
|
+
return community('unknown_tier');
|
|
134
|
+
if (!Array.isArray(p.features) || p.features.some((f) => typeof f !== 'string'))
|
|
135
|
+
return community('entitlement_malformed');
|
|
136
|
+
// Issuer pinning: the kid must resolve to a PINNED key. An entitlement can
|
|
137
|
+
// never nominate its own key — unknown kid (or no pins at all) fails closed.
|
|
138
|
+
const keyB64 = issuerKeyFor(issuerKeys, p.kid);
|
|
139
|
+
if (!keyB64)
|
|
140
|
+
return community('unknown_kid', { kid: p.kid ?? null });
|
|
141
|
+
let ok = false;
|
|
142
|
+
try {
|
|
143
|
+
const pub = crypto.createPublicKey({ key: Buffer.from(keyB64, 'base64url'), format: 'der', type: 'spki' });
|
|
144
|
+
ok = crypto.verify(null, Buffer.from(canonical(p), 'utf8'), pub, Buffer.from(sig.value, 'base64url'));
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
ok = false;
|
|
148
|
+
}
|
|
149
|
+
// One reason covers both tampering and a wrong key: the signature does not
|
|
150
|
+
// verify against the pinned key for this kid.
|
|
151
|
+
if (!ok)
|
|
152
|
+
return community('bad_signature', { kid: p.kid });
|
|
153
|
+
// Validity window — checked only AFTER the signature, so the timestamps
|
|
154
|
+
// themselves are authenticated. Both bounds are required; an unparseable
|
|
155
|
+
// window fails closed.
|
|
156
|
+
const nowMs = typeof now === 'function' ? now() : toMs(now);
|
|
157
|
+
const nbf = toMs(p.not_before);
|
|
158
|
+
const exp = toMs(p.expires_at);
|
|
159
|
+
if (nbf == null || exp == null || nowMs == null)
|
|
160
|
+
return community('invalid_validity_window', { kid: p.kid });
|
|
161
|
+
if (nowMs < nbf)
|
|
162
|
+
return community('not_yet_valid', { kid: p.kid, not_before: p.not_before });
|
|
163
|
+
if (nowMs > exp)
|
|
164
|
+
return community('expired', { kid: p.kid, expires_at: p.expires_at });
|
|
165
|
+
return {
|
|
166
|
+
valid: true,
|
|
167
|
+
tier: p.tier,
|
|
168
|
+
features: p.features.slice(),
|
|
169
|
+
limits: (p.limits && typeof p.limits === 'object') ? { ...p.limits } : {},
|
|
170
|
+
reason: 'entitlement_verified',
|
|
171
|
+
org: p.org,
|
|
172
|
+
kid: p.kid,
|
|
173
|
+
not_before: p.not_before,
|
|
174
|
+
expires_at: p.expires_at,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Is `feature` licensed? FAIL CLOSED: true only for a valid entitlement that
|
|
179
|
+
* explicitly lists the feature. Community fallback, invalid/expired/tampered
|
|
180
|
+
* artifacts, and unlisted features are all false — no enterprise code path
|
|
181
|
+
* runs without a live license naming it.
|
|
182
|
+
* @param {object} verified the result of verifyEntitlement
|
|
183
|
+
* @param {string} feature
|
|
184
|
+
* @returns {boolean}
|
|
185
|
+
*/
|
|
186
|
+
export function requireFeature(verified, feature) {
|
|
187
|
+
if (!verified || verified.valid !== true)
|
|
188
|
+
return false;
|
|
189
|
+
if (typeof feature !== 'string' || feature.length === 0)
|
|
190
|
+
return false;
|
|
191
|
+
return Array.isArray(verified.features) && verified.features.includes(feature);
|
|
192
|
+
}
|
|
193
|
+
export default { mintEntitlement, verifyEntitlement, requireFeature, ENTITLEMENT_VERSION, ENTITLEMENT_TIERS };
|
|
194
|
+
//# sourceMappingURL=enterprise.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enterprise.js","sourceRoot":"","sources":["../src/enterprise.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EMILIA Gate production evidence backend for Postgres.
|
|
3
|
+
*
|
|
4
|
+
* The deployment SQL exposes one SECURITY DEFINER append function. That
|
|
5
|
+
* function locks the tenant/gate/stream head, checks the caller's expected
|
|
6
|
+
* head, inserts one immutable record, and advances the head in the same SQL
|
|
7
|
+
* statement transaction. Runtime roles receive SELECT and EXECUTE only; they
|
|
8
|
+
* cannot insert, update, delete, or truncate evidence tables directly.
|
|
9
|
+
*
|
|
10
|
+
* Database errors and malformed driver responses always propagate on the
|
|
11
|
+
* write path. A storage outage must never be mistaken for a successful append
|
|
12
|
+
* or an ordinary contention retry.
|
|
13
|
+
*/
|
|
14
|
+
export declare const PG_EVIDENCE_VERSION = "EP-GATE-PG-EVIDENCE-v1";
|
|
15
|
+
export declare const EVIDENCE_SCHEMA = "emilia_gate_evidence";
|
|
16
|
+
export declare const EVIDENCE_RECORDS_TABLE = "emilia_gate_evidence.records";
|
|
17
|
+
export declare const EVIDENCE_HEADS_TABLE = "emilia_gate_evidence.heads";
|
|
18
|
+
export declare const EVIDENCE_APPEND_FUNCTION = "emilia_gate_evidence.append_record";
|
|
19
|
+
/** Exact statements issued by the adapter, exported for audit and test fakes. */
|
|
20
|
+
export declare const EVIDENCE_SQL: Readonly<{
|
|
21
|
+
health: "SELECT\n to_regclass('emilia_gate_evidence.records') IS NOT NULL AS records_ready,\n to_regclass('emilia_gate_evidence.heads') IS NOT NULL AS heads_ready,\n to_regprocedure('emilia_gate_evidence.append_record(text,text,text,text,jsonb,text)') IS NOT NULL AS append_ready,\n CASE WHEN to_regclass('emilia_gate_evidence.records') IS NULL THEN FALSE\n ELSE has_table_privilege(current_user, to_regclass('emilia_gate_evidence.records'), 'SELECT') END AS can_read_records,\n CASE WHEN to_regclass('emilia_gate_evidence.heads') IS NULL THEN FALSE\n ELSE has_table_privilege(current_user, to_regclass('emilia_gate_evidence.heads'), 'SELECT') END AS can_read_heads,\n CASE WHEN to_regclass('emilia_gate_evidence.records') IS NULL THEN FALSE ELSE (\n has_table_privilege(current_user, to_regclass('emilia_gate_evidence.records'), 'INSERT')\n OR has_table_privilege(current_user, to_regclass('emilia_gate_evidence.records'), 'UPDATE')\n OR has_table_privilege(current_user, to_regclass('emilia_gate_evidence.records'), 'DELETE')\n OR has_table_privilege(current_user, to_regclass('emilia_gate_evidence.records'), 'TRUNCATE')\n ) END AS can_write_records_directly,\n CASE WHEN to_regclass('emilia_gate_evidence.heads') IS NULL THEN FALSE ELSE (\n has_table_privilege(current_user, to_regclass('emilia_gate_evidence.heads'), 'INSERT')\n OR has_table_privilege(current_user, to_regclass('emilia_gate_evidence.heads'), 'UPDATE')\n OR has_table_privilege(current_user, to_regclass('emilia_gate_evidence.heads'), 'DELETE')\n OR has_table_privilege(current_user, to_regclass('emilia_gate_evidence.heads'), 'TRUNCATE')\n ) END AS can_write_heads_directly,\n CASE WHEN to_regprocedure('emilia_gate_evidence.append_record(text,text,text,text,jsonb,text)') IS NULL THEN FALSE\n ELSE has_function_privilege(current_user,\n to_regprocedure('emilia_gate_evidence.append_record(text,text,text,text,jsonb,text)'), 'EXECUTE') END AS can_append";
|
|
22
|
+
readHead: "SELECT head_seq AS seq, head_hash AS hash\nFROM emilia_gate_evidence.heads\nWHERE tenant_id = $1 AND gate_id = $2 AND stream_id = $3";
|
|
23
|
+
getById: "SELECT seq, record_id, prev_hash, hash, record\nFROM emilia_gate_evidence.records\nWHERE tenant_id = $1 AND gate_id = $2 AND stream_id = $3 AND record_id = $4";
|
|
24
|
+
readAll: "SELECT seq, record_id, prev_hash, hash, record\nFROM emilia_gate_evidence.records\nWHERE tenant_id = $1 AND gate_id = $2 AND stream_id = $3\nORDER BY seq ASC";
|
|
25
|
+
snapshot: "SELECT\n COALESCE((\n SELECT jsonb_agg(jsonb_build_object(\n 'seq', r.seq,\n 'record_id', r.record_id,\n 'prev_hash', r.prev_hash,\n 'hash', r.hash,\n 'record', r.record\n ) ORDER BY r.seq ASC)\n FROM emilia_gate_evidence.records r\n WHERE r.tenant_id = $1 AND r.gate_id = $2 AND r.stream_id = $3\n ), '[]'::jsonb) AS record_rows,\n (\n SELECT CASE WHEN h.head_seq = -1 THEN NULL ELSE jsonb_build_object(\n 'seq', h.head_seq, 'hash', h.head_hash\n ) END\n FROM emilia_gate_evidence.heads h\n WHERE h.tenant_id = $1 AND h.gate_id = $2 AND h.stream_id = $3\n ) AS head";
|
|
26
|
+
appendIfHead: "SELECT emilia_gate_evidence.append_record($1, $2, $3, $4, $5::jsonb, $6) AS appended";
|
|
27
|
+
}>;
|
|
28
|
+
/**
|
|
29
|
+
* Create a tenant-and-gate-bound backend for createAtomicEvidenceLog().
|
|
30
|
+
*
|
|
31
|
+
* `query` is a node-postgres style function such as `pool.query.bind(pool)`.
|
|
32
|
+
* The migration must be installed and the connection role must inherit or SET
|
|
33
|
+
* ROLE to `emilia_gate_evidence_runtime`.
|
|
34
|
+
*
|
|
35
|
+
* @param {{ query?: (text: string, params: any[]) => Promise<{ rowCount: number, rows?: any[] }>, tenantId?: any, gateId?: any }} [options]
|
|
36
|
+
*/
|
|
37
|
+
export declare function createPostgresEvidenceBackend({ query, tenantId, gateId, }?: {
|
|
38
|
+
query?: (text: string, params: any[]) => Promise<{
|
|
39
|
+
rowCount: number;
|
|
40
|
+
rows?: any[];
|
|
41
|
+
}>;
|
|
42
|
+
tenantId?: string;
|
|
43
|
+
gateId?: string;
|
|
44
|
+
}): {
|
|
45
|
+
durable: boolean;
|
|
46
|
+
persisted: boolean;
|
|
47
|
+
strict: boolean;
|
|
48
|
+
forkAware: boolean;
|
|
49
|
+
atomicAppend: boolean;
|
|
50
|
+
appendOnly: boolean;
|
|
51
|
+
version: string;
|
|
52
|
+
scope: Readonly<{
|
|
53
|
+
tenantId: string;
|
|
54
|
+
gateId: string;
|
|
55
|
+
}>;
|
|
56
|
+
readHead: (streamId: any) => Promise<{
|
|
57
|
+
seq: any;
|
|
58
|
+
hash: any;
|
|
59
|
+
} | null>;
|
|
60
|
+
head: (streamId: any) => Promise<{
|
|
61
|
+
seq: any;
|
|
62
|
+
hash: any;
|
|
63
|
+
} | null>;
|
|
64
|
+
getById: (streamId: any, recordId: any) => Promise<any>;
|
|
65
|
+
appendIfHead: (streamId: any, expectedHeadHash: any, record: any) => Promise<any>;
|
|
66
|
+
readAll: (streamId: any) => Promise<any>;
|
|
67
|
+
all: (streamId: any) => Promise<any>;
|
|
68
|
+
verify(streamId: any): Promise<{
|
|
69
|
+
ok: boolean;
|
|
70
|
+
at: any;
|
|
71
|
+
reason: string;
|
|
72
|
+
length?: undefined;
|
|
73
|
+
head?: undefined;
|
|
74
|
+
} | {
|
|
75
|
+
ok: boolean;
|
|
76
|
+
reason: string;
|
|
77
|
+
at?: undefined;
|
|
78
|
+
length?: undefined;
|
|
79
|
+
head?: undefined;
|
|
80
|
+
} | {
|
|
81
|
+
ok: boolean;
|
|
82
|
+
length: any;
|
|
83
|
+
head: string | null;
|
|
84
|
+
at?: undefined;
|
|
85
|
+
reason?: undefined;
|
|
86
|
+
}>;
|
|
87
|
+
health(): Promise<{
|
|
88
|
+
ok: boolean;
|
|
89
|
+
version: string;
|
|
90
|
+
scope: Readonly<{
|
|
91
|
+
tenantId: string;
|
|
92
|
+
gateId: string;
|
|
93
|
+
}>;
|
|
94
|
+
checks: {
|
|
95
|
+
recordsReady: boolean;
|
|
96
|
+
headsReady: boolean;
|
|
97
|
+
appendReady: boolean;
|
|
98
|
+
canReadRecords: boolean;
|
|
99
|
+
canReadHeads: boolean;
|
|
100
|
+
noDirectRecordWrites: boolean;
|
|
101
|
+
noDirectHeadWrites: boolean;
|
|
102
|
+
canAppend: boolean;
|
|
103
|
+
};
|
|
104
|
+
}>;
|
|
105
|
+
};
|
|
106
|
+
declare const postgresEvidence: {
|
|
107
|
+
createPostgresEvidenceBackend: typeof createPostgresEvidenceBackend;
|
|
108
|
+
EVIDENCE_SQL: Readonly<{
|
|
109
|
+
health: "SELECT\n to_regclass('emilia_gate_evidence.records') IS NOT NULL AS records_ready,\n to_regclass('emilia_gate_evidence.heads') IS NOT NULL AS heads_ready,\n to_regprocedure('emilia_gate_evidence.append_record(text,text,text,text,jsonb,text)') IS NOT NULL AS append_ready,\n CASE WHEN to_regclass('emilia_gate_evidence.records') IS NULL THEN FALSE\n ELSE has_table_privilege(current_user, to_regclass('emilia_gate_evidence.records'), 'SELECT') END AS can_read_records,\n CASE WHEN to_regclass('emilia_gate_evidence.heads') IS NULL THEN FALSE\n ELSE has_table_privilege(current_user, to_regclass('emilia_gate_evidence.heads'), 'SELECT') END AS can_read_heads,\n CASE WHEN to_regclass('emilia_gate_evidence.records') IS NULL THEN FALSE ELSE (\n has_table_privilege(current_user, to_regclass('emilia_gate_evidence.records'), 'INSERT')\n OR has_table_privilege(current_user, to_regclass('emilia_gate_evidence.records'), 'UPDATE')\n OR has_table_privilege(current_user, to_regclass('emilia_gate_evidence.records'), 'DELETE')\n OR has_table_privilege(current_user, to_regclass('emilia_gate_evidence.records'), 'TRUNCATE')\n ) END AS can_write_records_directly,\n CASE WHEN to_regclass('emilia_gate_evidence.heads') IS NULL THEN FALSE ELSE (\n has_table_privilege(current_user, to_regclass('emilia_gate_evidence.heads'), 'INSERT')\n OR has_table_privilege(current_user, to_regclass('emilia_gate_evidence.heads'), 'UPDATE')\n OR has_table_privilege(current_user, to_regclass('emilia_gate_evidence.heads'), 'DELETE')\n OR has_table_privilege(current_user, to_regclass('emilia_gate_evidence.heads'), 'TRUNCATE')\n ) END AS can_write_heads_directly,\n CASE WHEN to_regprocedure('emilia_gate_evidence.append_record(text,text,text,text,jsonb,text)') IS NULL THEN FALSE\n ELSE has_function_privilege(current_user,\n to_regprocedure('emilia_gate_evidence.append_record(text,text,text,text,jsonb,text)'), 'EXECUTE') END AS can_append";
|
|
110
|
+
readHead: "SELECT head_seq AS seq, head_hash AS hash\nFROM emilia_gate_evidence.heads\nWHERE tenant_id = $1 AND gate_id = $2 AND stream_id = $3";
|
|
111
|
+
getById: "SELECT seq, record_id, prev_hash, hash, record\nFROM emilia_gate_evidence.records\nWHERE tenant_id = $1 AND gate_id = $2 AND stream_id = $3 AND record_id = $4";
|
|
112
|
+
readAll: "SELECT seq, record_id, prev_hash, hash, record\nFROM emilia_gate_evidence.records\nWHERE tenant_id = $1 AND gate_id = $2 AND stream_id = $3\nORDER BY seq ASC";
|
|
113
|
+
snapshot: "SELECT\n COALESCE((\n SELECT jsonb_agg(jsonb_build_object(\n 'seq', r.seq,\n 'record_id', r.record_id,\n 'prev_hash', r.prev_hash,\n 'hash', r.hash,\n 'record', r.record\n ) ORDER BY r.seq ASC)\n FROM emilia_gate_evidence.records r\n WHERE r.tenant_id = $1 AND r.gate_id = $2 AND r.stream_id = $3\n ), '[]'::jsonb) AS record_rows,\n (\n SELECT CASE WHEN h.head_seq = -1 THEN NULL ELSE jsonb_build_object(\n 'seq', h.head_seq, 'hash', h.head_hash\n ) END\n FROM emilia_gate_evidence.heads h\n WHERE h.tenant_id = $1 AND h.gate_id = $2 AND h.stream_id = $3\n ) AS head";
|
|
114
|
+
appendIfHead: "SELECT emilia_gate_evidence.append_record($1, $2, $3, $4, $5::jsonb, $6) AS appended";
|
|
115
|
+
}>;
|
|
116
|
+
EVIDENCE_SCHEMA: string;
|
|
117
|
+
EVIDENCE_RECORDS_TABLE: string;
|
|
118
|
+
EVIDENCE_HEADS_TABLE: string;
|
|
119
|
+
EVIDENCE_APPEND_FUNCTION: string;
|
|
120
|
+
PG_EVIDENCE_VERSION: string;
|
|
121
|
+
};
|
|
122
|
+
export default postgresEvidence;
|
|
123
|
+
//# sourceMappingURL=evidence-postgres.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evidence-postgres.d.ts","sourceRoot":"","sources":["../src/evidence-postgres.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;GAYG;AAOH,eAAO,MAAM,mBAAmB,2BAA2B,CAAC;AAC5D,eAAO,MAAM,eAAe,yBAAyB,CAAC;AACtD,eAAO,MAAM,sBAAsB,iCAA+B,CAAC;AACnE,eAAO,MAAM,oBAAoB,+BAA6B,CAAC;AAC/D,eAAO,MAAM,wBAAwB,uCAAqC,CAAC;AAO3E,iFAAiF;AACjF,eAAO,MAAM,YAAY;;;;;;;EA4DvB,CAAC;AA8IH;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CAAC,EAC5C,KAAK,EACL,QAAQ,EACR,MAAM,GACP,GAAE;IACD,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC,CAAC;IACrF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8GL;AAED,QAAA,MAAM,gBAAgB;;;;;;;;;;;;;;;CAQrB,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|