@parmana/shared 0.0.0-stage → 0.1.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/LICENSE +202 -0
- package/NOTICE +8 -0
- package/README.md +16 -2
- package/dist/.tsbuildinfo +1 -0
- package/dist/config/ApiKeyEntry.d.ts +97 -0
- package/dist/config/ApiKeyEntry.d.ts.map +1 -0
- package/dist/config/ApiKeyEntry.js +2 -0
- package/dist/config/ApiKeyEntry.js.map +1 -0
- package/dist/config/Config.d.ts +202 -0
- package/dist/config/Config.d.ts.map +1 -0
- package/dist/config/Config.js +172 -0
- package/dist/config/Config.js.map +1 -0
- package/dist/config/ConfigLoader.d.ts +5 -0
- package/dist/config/ConfigLoader.d.ts.map +1 -0
- package/dist/config/ConfigLoader.js +8 -0
- package/dist/config/ConfigLoader.js.map +1 -0
- package/dist/config/ConfigUtils.d.ts +6 -0
- package/dist/config/ConfigUtils.d.ts.map +1 -0
- package/dist/config/ConfigUtils.js +8 -0
- package/dist/config/ConfigUtils.js.map +1 -0
- package/dist/config/ConfigValidation.d.ts +30 -0
- package/dist/config/ConfigValidation.d.ts.map +1 -0
- package/dist/config/ConfigValidation.js +170 -0
- package/dist/config/ConfigValidation.js.map +1 -0
- package/dist/config/CryptoAlgorithms.d.ts +42 -0
- package/dist/config/CryptoAlgorithms.d.ts.map +1 -0
- package/dist/config/CryptoAlgorithms.js +42 -0
- package/dist/config/CryptoAlgorithms.js.map +1 -0
- package/dist/config/KeyProviders.d.ts +9 -0
- package/dist/config/KeyProviders.d.ts.map +1 -0
- package/dist/config/KeyProviders.js +8 -0
- package/dist/config/KeyProviders.js.map +1 -0
- package/dist/config/SecretsProviders.d.ts +6 -0
- package/dist/config/SecretsProviders.d.ts.map +1 -0
- package/dist/config/SecretsProviders.js +5 -0
- package/dist/config/SecretsProviders.js.map +1 -0
- package/dist/config/StorageProviders.d.ts +18 -0
- package/dist/config/StorageProviders.d.ts.map +1 -0
- package/dist/config/StorageProviders.js +20 -0
- package/dist/config/StorageProviders.js.map +1 -0
- package/dist/config/TrustProfiles.d.ts +5 -0
- package/dist/config/TrustProfiles.d.ts.map +1 -0
- package/dist/config/TrustProfiles.js +4 -0
- package/dist/config/TrustProfiles.js.map +1 -0
- package/dist/config/index.d.ts +11 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +11 -0
- package/dist/config/index.js.map +1 -0
- package/dist/domain/approval-artifact.d.ts +136 -0
- package/dist/domain/approval-artifact.d.ts.map +1 -0
- package/dist/domain/approval-artifact.js +2 -0
- package/dist/domain/approval-artifact.js.map +1 -0
- package/dist/domain/approval-issuer.d.ts +52 -0
- package/dist/domain/approval-issuer.d.ts.map +1 -0
- package/dist/domain/approval-issuer.js +2 -0
- package/dist/domain/approval-issuer.js.map +1 -0
- package/dist/domain/authority-grant.d.ts +54 -0
- package/dist/domain/authority-grant.d.ts.map +1 -0
- package/dist/domain/authority-grant.js +2 -0
- package/dist/domain/authority-grant.js.map +1 -0
- package/dist/domain/authority.d.ts +42 -0
- package/dist/domain/authority.d.ts.map +1 -0
- package/dist/domain/authority.js +11 -0
- package/dist/domain/authority.js.map +1 -0
- package/dist/domain/authorization.d.ts +54 -0
- package/dist/domain/authorization.d.ts.map +1 -0
- package/dist/domain/authorization.js +2 -0
- package/dist/domain/authorization.js.map +1 -0
- package/dist/domain/business-signal-source.d.ts +52 -0
- package/dist/domain/business-signal-source.d.ts.map +1 -0
- package/dist/domain/business-signal-source.js +2 -0
- package/dist/domain/business-signal-source.js.map +1 -0
- package/dist/domain/business-transaction.d.ts +99 -0
- package/dist/domain/business-transaction.d.ts.map +1 -0
- package/dist/domain/business-transaction.js +16 -0
- package/dist/domain/business-transaction.js.map +1 -0
- package/dist/domain/business-validation.d.ts +177 -0
- package/dist/domain/business-validation.d.ts.map +1 -0
- package/dist/domain/business-validation.js +60 -0
- package/dist/domain/business-validation.js.map +1 -0
- package/dist/domain/challenge-record.d.ts +181 -0
- package/dist/domain/challenge-record.d.ts.map +1 -0
- package/dist/domain/challenge-record.js +2 -0
- package/dist/domain/challenge-record.js.map +1 -0
- package/dist/domain/decision.d.ts +89 -0
- package/dist/domain/decision.d.ts.map +1 -0
- package/dist/domain/decision.js +9 -0
- package/dist/domain/decision.js.map +1 -0
- package/dist/domain/evidence-anchor.d.ts +54 -0
- package/dist/domain/evidence-anchor.d.ts.map +1 -0
- package/dist/domain/evidence-anchor.js +2 -0
- package/dist/domain/evidence-anchor.js.map +1 -0
- package/dist/domain/executable-content.d.ts +45 -0
- package/dist/domain/executable-content.d.ts.map +1 -0
- package/dist/domain/executable-content.js +39 -0
- package/dist/domain/executable-content.js.map +1 -0
- package/dist/domain/execution-audit-event.d.ts +65 -0
- package/dist/domain/execution-audit-event.d.ts.map +1 -0
- package/dist/domain/execution-audit-event.js +2 -0
- package/dist/domain/execution-audit-event.js.map +1 -0
- package/dist/domain/execution-authorization.d.ts +224 -0
- package/dist/domain/execution-authorization.d.ts.map +1 -0
- package/dist/domain/execution-authorization.js +2 -0
- package/dist/domain/execution-authorization.js.map +1 -0
- package/dist/domain/execution-evidence.d.ts +38 -0
- package/dist/domain/execution-evidence.d.ts.map +1 -0
- package/dist/domain/execution-evidence.js +2 -0
- package/dist/domain/execution-evidence.js.map +1 -0
- package/dist/domain/execution-intent.d.ts +92 -0
- package/dist/domain/execution-intent.d.ts.map +1 -0
- package/dist/domain/execution-intent.js +2 -0
- package/dist/domain/execution-intent.js.map +1 -0
- package/dist/domain/execution-metadata.d.ts +8 -0
- package/dist/domain/execution-metadata.d.ts.map +1 -0
- package/dist/domain/execution-metadata.js +2 -0
- package/dist/domain/execution-metadata.js.map +1 -0
- package/dist/domain/execution-outcome-store.d.ts +49 -0
- package/dist/domain/execution-outcome-store.d.ts.map +1 -0
- package/dist/domain/execution-outcome-store.js +10 -0
- package/dist/domain/execution-outcome-store.js.map +1 -0
- package/dist/domain/execution-result.d.ts +49 -0
- package/dist/domain/execution-result.d.ts.map +1 -0
- package/dist/domain/execution-result.js +2 -0
- package/dist/domain/execution-result.js.map +1 -0
- package/dist/domain/execution-trust-record.d.ts +142 -0
- package/dist/domain/execution-trust-record.d.ts.map +1 -0
- package/dist/domain/execution-trust-record.js +2 -0
- package/dist/domain/execution-trust-record.js.map +1 -0
- package/dist/domain/execution.d.ts +108 -0
- package/dist/domain/execution.d.ts.map +1 -0
- package/dist/domain/execution.js +18 -0
- package/dist/domain/execution.js.map +1 -0
- package/dist/domain/external-connector.d.ts +68 -0
- package/dist/domain/external-connector.d.ts.map +1 -0
- package/dist/domain/external-connector.js +2 -0
- package/dist/domain/external-connector.js.map +1 -0
- package/dist/domain/index.d.ts +37 -0
- package/dist/domain/index.d.ts.map +1 -0
- package/dist/domain/index.js +37 -0
- package/dist/domain/index.js.map +1 -0
- package/dist/domain/intent.d.ts +66 -0
- package/dist/domain/intent.d.ts.map +1 -0
- package/dist/domain/intent.js +2 -0
- package/dist/domain/intent.js.map +1 -0
- package/dist/domain/metadata.d.ts +53 -0
- package/dist/domain/metadata.d.ts.map +1 -0
- package/dist/domain/metadata.js +11 -0
- package/dist/domain/metadata.js.map +1 -0
- package/dist/domain/override.d.ts +39 -0
- package/dist/domain/override.d.ts.map +1 -0
- package/dist/domain/override.js +2 -0
- package/dist/domain/override.js.map +1 -0
- package/dist/domain/pending-policy-change.d.ts +109 -0
- package/dist/domain/pending-policy-change.d.ts.map +1 -0
- package/dist/domain/pending-policy-change.js +12 -0
- package/dist/domain/pending-policy-change.js.map +1 -0
- package/dist/domain/policy-change-approval-record.d.ts +81 -0
- package/dist/domain/policy-change-approval-record.d.ts.map +1 -0
- package/dist/domain/policy-change-approval-record.js +2 -0
- package/dist/domain/policy-change-approval-record.js.map +1 -0
- package/dist/domain/policy-change-step-up-authorization.d.ts +97 -0
- package/dist/domain/policy-change-step-up-authorization.d.ts.map +1 -0
- package/dist/domain/policy-change-step-up-authorization.js +2 -0
- package/dist/domain/policy-change-step-up-authorization.js.map +1 -0
- package/dist/domain/policy-reference.d.ts +58 -0
- package/dist/domain/policy-reference.d.ts.map +1 -0
- package/dist/domain/policy-reference.js +2 -0
- package/dist/domain/policy-reference.js.map +1 -0
- package/dist/domain/receipt.d.ts +72 -0
- package/dist/domain/receipt.d.ts.map +1 -0
- package/dist/domain/receipt.js +2 -0
- package/dist/domain/receipt.js.map +1 -0
- package/dist/domain/refusal-record.d.ts +110 -0
- package/dist/domain/refusal-record.d.ts.map +1 -0
- package/dist/domain/refusal-record.js +2 -0
- package/dist/domain/refusal-record.js.map +1 -0
- package/dist/domain/release-approval.d.ts +14 -0
- package/dist/domain/release-approval.d.ts.map +1 -0
- package/dist/domain/release-approval.js +2 -0
- package/dist/domain/release-approval.js.map +1 -0
- package/dist/domain/signals.d.ts +10 -0
- package/dist/domain/signals.d.ts.map +1 -0
- package/dist/domain/signals.js +2 -0
- package/dist/domain/signals.js.map +1 -0
- package/dist/domain/signature-entry.d.ts +23 -0
- package/dist/domain/signature-entry.d.ts.map +1 -0
- package/dist/domain/signature-entry.js +2 -0
- package/dist/domain/signature-entry.js.map +1 -0
- package/dist/domain/signature.d.ts +26 -0
- package/dist/domain/signature.d.ts.map +1 -0
- package/dist/domain/signature.js +2 -0
- package/dist/domain/signature.js.map +1 -0
- package/dist/domain/unsigned-execution-trust-record.d.ts +7 -0
- package/dist/domain/unsigned-execution-trust-record.d.ts.map +1 -0
- package/dist/domain/unsigned-execution-trust-record.js +2 -0
- package/dist/domain/unsigned-execution-trust-record.js.map +1 -0
- package/dist/domain/verification.d.ts +48 -0
- package/dist/domain/verification.d.ts.map +1 -0
- package/dist/domain/verification.js +9 -0
- package/dist/domain/verification.js.map +1 -0
- package/dist/errors/approval-issuer-change-not-found-error.d.ts +9 -0
- package/dist/errors/approval-issuer-change-not-found-error.d.ts.map +1 -0
- package/dist/errors/approval-issuer-change-not-found-error.js +11 -0
- package/dist/errors/approval-issuer-change-not-found-error.js.map +1 -0
- package/dist/errors/authority-grant-change-not-found-error.d.ts +9 -0
- package/dist/errors/authority-grant-change-not-found-error.d.ts.map +1 -0
- package/dist/errors/authority-grant-change-not-found-error.js +11 -0
- package/dist/errors/authority-grant-change-not-found-error.js.map +1 -0
- package/dist/errors/authority-required-error.d.ts +5 -0
- package/dist/errors/authority-required-error.d.ts.map +1 -0
- package/dist/errors/authority-required-error.js +7 -0
- package/dist/errors/authority-required-error.js.map +1 -0
- package/dist/errors/authorization-no-longer-valid-error.d.ts +19 -0
- package/dist/errors/authorization-no-longer-valid-error.d.ts.map +1 -0
- package/dist/errors/authorization-no-longer-valid-error.js +23 -0
- package/dist/errors/authorization-no-longer-valid-error.js.map +1 -0
- package/dist/errors/authorization-required-error.d.ts +5 -0
- package/dist/errors/authorization-required-error.d.ts.map +1 -0
- package/dist/errors/authorization-required-error.js +7 -0
- package/dist/errors/authorization-required-error.js.map +1 -0
- package/dist/errors/business-signal-source-change-not-found-error.d.ts +9 -0
- package/dist/errors/business-signal-source-change-not-found-error.d.ts.map +1 -0
- package/dist/errors/business-signal-source-change-not-found-error.js +11 -0
- package/dist/errors/business-signal-source-change-not-found-error.js.map +1 -0
- package/dist/errors/business-transaction-not-found-error.d.ts +5 -0
- package/dist/errors/business-transaction-not-found-error.d.ts.map +1 -0
- package/dist/errors/business-transaction-not-found-error.js +7 -0
- package/dist/errors/business-transaction-not-found-error.js.map +1 -0
- package/dist/errors/challenge-record-not-found-error.d.ts +9 -0
- package/dist/errors/challenge-record-not-found-error.d.ts.map +1 -0
- package/dist/errors/challenge-record-not-found-error.js +11 -0
- package/dist/errors/challenge-record-not-found-error.js.map +1 -0
- package/dist/errors/conflict-error.d.ts +5 -0
- package/dist/errors/conflict-error.d.ts.map +1 -0
- package/dist/errors/conflict-error.js +7 -0
- package/dist/errors/conflict-error.js.map +1 -0
- package/dist/errors/connector-not-registered-error.d.ts +21 -0
- package/dist/errors/connector-not-registered-error.d.ts.map +1 -0
- package/dist/errors/connector-not-registered-error.js +24 -0
- package/dist/errors/connector-not-registered-error.js.map +1 -0
- package/dist/errors/decision-not-approved-error.d.ts +5 -0
- package/dist/errors/decision-not-approved-error.d.ts.map +1 -0
- package/dist/errors/decision-not-approved-error.js +7 -0
- package/dist/errors/decision-not-approved-error.js.map +1 -0
- package/dist/errors/duplicate-business-transaction-error.d.ts +26 -0
- package/dist/errors/duplicate-business-transaction-error.d.ts.map +1 -0
- package/dist/errors/duplicate-business-transaction-error.js +28 -0
- package/dist/errors/duplicate-business-transaction-error.js.map +1 -0
- package/dist/errors/external-connector-change-not-found-error.d.ts +9 -0
- package/dist/errors/external-connector-change-not-found-error.d.ts.map +1 -0
- package/dist/errors/external-connector-change-not-found-error.js +11 -0
- package/dist/errors/external-connector-change-not-found-error.js.map +1 -0
- package/dist/errors/forbidden-error.d.ts +5 -0
- package/dist/errors/forbidden-error.d.ts.map +1 -0
- package/dist/errors/forbidden-error.js +7 -0
- package/dist/errors/forbidden-error.js.map +1 -0
- package/dist/errors/index.d.ts +30 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +30 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/intent-required-error.d.ts +5 -0
- package/dist/errors/intent-required-error.d.ts.map +1 -0
- package/dist/errors/intent-required-error.js +7 -0
- package/dist/errors/intent-required-error.js.map +1 -0
- package/dist/errors/non-human-caller-denied-error.d.ts +10 -0
- package/dist/errors/non-human-caller-denied-error.d.ts.map +1 -0
- package/dist/errors/non-human-caller-denied-error.js +12 -0
- package/dist/errors/non-human-caller-denied-error.js.map +1 -0
- package/dist/errors/nonce-already-consumed-error.d.ts +26 -0
- package/dist/errors/nonce-already-consumed-error.d.ts.map +1 -0
- package/dist/errors/nonce-already-consumed-error.js +29 -0
- package/dist/errors/nonce-already-consumed-error.js.map +1 -0
- package/dist/errors/outcome-unknown-error.d.ts +15 -0
- package/dist/errors/outcome-unknown-error.d.ts.map +1 -0
- package/dist/errors/outcome-unknown-error.js +19 -0
- package/dist/errors/outcome-unknown-error.js.map +1 -0
- package/dist/errors/override-not-allowed-error.d.ts +5 -0
- package/dist/errors/override-not-allowed-error.d.ts.map +1 -0
- package/dist/errors/override-not-allowed-error.js +7 -0
- package/dist/errors/override-not-allowed-error.js.map +1 -0
- package/dist/errors/parmana-error.d.ts +15 -0
- package/dist/errors/parmana-error.d.ts.map +1 -0
- package/dist/errors/parmana-error.js +21 -0
- package/dist/errors/parmana-error.js.map +1 -0
- package/dist/errors/pending-policy-change-not-found-error.d.ts +9 -0
- package/dist/errors/pending-policy-change-not-found-error.d.ts.map +1 -0
- package/dist/errors/pending-policy-change-not-found-error.js +11 -0
- package/dist/errors/pending-policy-change-not-found-error.js.map +1 -0
- package/dist/errors/policy-not-found-error.d.ts +5 -0
- package/dist/errors/policy-not-found-error.d.ts.map +1 -0
- package/dist/errors/policy-not-found-error.js +7 -0
- package/dist/errors/policy-not-found-error.js.map +1 -0
- package/dist/errors/receipt-generation-error.d.ts +5 -0
- package/dist/errors/receipt-generation-error.d.ts.map +1 -0
- package/dist/errors/receipt-generation-error.js +7 -0
- package/dist/errors/receipt-generation-error.js.map +1 -0
- package/dist/errors/same-actor-cannot-approve-own-change-error.d.ts +12 -0
- package/dist/errors/same-actor-cannot-approve-own-change-error.d.ts.map +1 -0
- package/dist/errors/same-actor-cannot-approve-own-change-error.js +15 -0
- package/dist/errors/same-actor-cannot-approve-own-change-error.js.map +1 -0
- package/dist/errors/step-up-authorization-invalid-error.d.ts +25 -0
- package/dist/errors/step-up-authorization-invalid-error.d.ts.map +1 -0
- package/dist/errors/step-up-authorization-invalid-error.js +28 -0
- package/dist/errors/step-up-authorization-invalid-error.js.map +1 -0
- package/dist/errors/trust-chain-validation-error.d.ts +5 -0
- package/dist/errors/trust-chain-validation-error.d.ts.map +1 -0
- package/dist/errors/trust-chain-validation-error.js +7 -0
- package/dist/errors/trust-chain-validation-error.js.map +1 -0
- package/dist/errors/unauthorized-error.d.ts +5 -0
- package/dist/errors/unauthorized-error.d.ts.map +1 -0
- package/dist/errors/unauthorized-error.js +7 -0
- package/dist/errors/unauthorized-error.js.map +1 -0
- package/dist/errors/validation-error.d.ts +5 -0
- package/dist/errors/validation-error.d.ts.map +1 -0
- package/dist/errors/validation-error.js +7 -0
- package/dist/errors/validation-error.js.map +1 -0
- package/dist/errors/verification-failed-error.d.ts +5 -0
- package/dist/errors/verification-failed-error.d.ts.map +1 -0
- package/dist/errors/verification-failed-error.js +7 -0
- package/dist/errors/verification-failed-error.js.map +1 -0
- package/dist/gateway/GatewayAuthentication.d.ts +8 -0
- package/dist/gateway/GatewayAuthentication.d.ts.map +1 -0
- package/dist/gateway/GatewayAuthentication.js +2 -0
- package/dist/gateway/GatewayAuthentication.js.map +1 -0
- package/dist/gateway/GatewayAuthenticationClaims.d.ts +10 -0
- package/dist/gateway/GatewayAuthenticationClaims.d.ts.map +1 -0
- package/dist/gateway/GatewayAuthenticationClaims.js +2 -0
- package/dist/gateway/GatewayAuthenticationClaims.js.map +1 -0
- package/dist/gateway/GatewayAuthenticationPayload.d.ts +15 -0
- package/dist/gateway/GatewayAuthenticationPayload.d.ts.map +1 -0
- package/dist/gateway/GatewayAuthenticationPayload.js +2 -0
- package/dist/gateway/GatewayAuthenticationPayload.js.map +1 -0
- package/dist/gateway/SignedGatewayAuthentication.d.ts +9 -0
- package/dist/gateway/SignedGatewayAuthentication.d.ts.map +1 -0
- package/dist/gateway/SignedGatewayAuthentication.js +2 -0
- package/dist/gateway/SignedGatewayAuthentication.js.map +1 -0
- package/dist/gateway/index.d.ts +4 -0
- package/dist/gateway/index.d.ts.map +1 -0
- package/dist/gateway/index.js +4 -0
- package/dist/gateway/index.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/logging/Logger.d.ts +65 -0
- package/dist/logging/Logger.d.ts.map +1 -0
- package/dist/logging/Logger.js +97 -0
- package/dist/logging/Logger.js.map +1 -0
- package/dist/network/externalEndpointAddress.d.ts +48 -0
- package/dist/network/externalEndpointAddress.d.ts.map +1 -0
- package/dist/network/externalEndpointAddress.js +147 -0
- package/dist/network/externalEndpointAddress.js.map +1 -0
- package/dist/repositories/approval-issuer-repository.d.ts +31 -0
- package/dist/repositories/approval-issuer-repository.d.ts.map +1 -0
- package/dist/repositories/approval-issuer-repository.js +2 -0
- package/dist/repositories/approval-issuer-repository.js.map +1 -0
- package/dist/repositories/authority-grant-repository.d.ts +22 -0
- package/dist/repositories/authority-grant-repository.d.ts.map +1 -0
- package/dist/repositories/authority-grant-repository.js +2 -0
- package/dist/repositories/authority-grant-repository.js.map +1 -0
- package/dist/repositories/business-signal-source-repository.d.ts +17 -0
- package/dist/repositories/business-signal-source-repository.d.ts.map +1 -0
- package/dist/repositories/business-signal-source-repository.js +2 -0
- package/dist/repositories/business-signal-source-repository.js.map +1 -0
- package/dist/repositories/business-transaction-repository.d.ts +34 -0
- package/dist/repositories/business-transaction-repository.d.ts.map +1 -0
- package/dist/repositories/business-transaction-repository.js +2 -0
- package/dist/repositories/business-transaction-repository.js.map +1 -0
- package/dist/repositories/challenge-record-repository.d.ts +67 -0
- package/dist/repositories/challenge-record-repository.d.ts.map +1 -0
- package/dist/repositories/challenge-record-repository.js +76 -0
- package/dist/repositories/challenge-record-repository.js.map +1 -0
- package/dist/repositories/execution-intent-repository.d.ts +38 -0
- package/dist/repositories/execution-intent-repository.d.ts.map +1 -0
- package/dist/repositories/execution-intent-repository.js +2 -0
- package/dist/repositories/execution-intent-repository.js.map +1 -0
- package/dist/repositories/execution-trust-record-repository.d.ts +62 -0
- package/dist/repositories/execution-trust-record-repository.d.ts.map +1 -0
- package/dist/repositories/execution-trust-record-repository.js +2 -0
- package/dist/repositories/execution-trust-record-repository.js.map +1 -0
- package/dist/repositories/external-connector-repository.d.ts +37 -0
- package/dist/repositories/external-connector-repository.d.ts.map +1 -0
- package/dist/repositories/external-connector-repository.js +2 -0
- package/dist/repositories/external-connector-repository.js.map +1 -0
- package/dist/repositories/handbook-download-lead-repository.d.ts +18 -0
- package/dist/repositories/handbook-download-lead-repository.d.ts.map +1 -0
- package/dist/repositories/handbook-download-lead-repository.js +2 -0
- package/dist/repositories/handbook-download-lead-repository.js.map +1 -0
- package/dist/repositories/index.d.ts +14 -0
- package/dist/repositories/index.d.ts.map +1 -0
- package/dist/repositories/index.js +14 -0
- package/dist/repositories/index.js.map +1 -0
- package/dist/repositories/pending-policy-change-repository.d.ts +72 -0
- package/dist/repositories/pending-policy-change-repository.d.ts.map +1 -0
- package/dist/repositories/pending-policy-change-repository.js +46 -0
- package/dist/repositories/pending-policy-change-repository.js.map +1 -0
- package/dist/repositories/policy-change-approval-record-repository.d.ts +39 -0
- package/dist/repositories/policy-change-approval-record-repository.d.ts.map +1 -0
- package/dist/repositories/policy-change-approval-record-repository.js +2 -0
- package/dist/repositories/policy-change-approval-record-repository.js.map +1 -0
- package/dist/repositories/policy-repository.d.ts +15 -0
- package/dist/repositories/policy-repository.d.ts.map +1 -0
- package/dist/repositories/policy-repository.js +2 -0
- package/dist/repositories/policy-repository.js.map +1 -0
- package/dist/repositories/refusal-record-repository.d.ts +13 -0
- package/dist/repositories/refusal-record-repository.d.ts.map +1 -0
- package/dist/repositories/refusal-record-repository.js +2 -0
- package/dist/repositories/refusal-record-repository.js.map +1 -0
- package/dist/types/Json.d.ts +7 -0
- package/dist/types/Json.d.ts.map +1 -0
- package/dist/types/Json.js +2 -0
- package/dist/types/Json.js.map +1 -0
- package/dist/utils/normalize-policy.d.ts +16 -0
- package/dist/utils/normalize-policy.d.ts.map +1 -0
- package/dist/utils/normalize-policy.js +10 -0
- package/dist/utils/normalize-policy.js.map +1 -0
- package/package.json +39 -4
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import type { CryptoMode, HashAlgorithm, SignatureAlgorithm } from "./CryptoAlgorithms.js";
|
|
2
|
+
import type { StorageProvider } from "./StorageProviders.js";
|
|
3
|
+
import type { KeyProvider } from "./KeyProviders.js";
|
|
4
|
+
import type { SecretsProvider } from "./SecretsProviders.js";
|
|
5
|
+
import type { TrustProfile } from "./TrustProfiles.js";
|
|
6
|
+
import type { ApiKeyEntry } from "./ApiKeyEntry.js";
|
|
7
|
+
/**
|
|
8
|
+
* Parmana Configuration.
|
|
9
|
+
*
|
|
10
|
+
* Centralized immutable configuration.
|
|
11
|
+
*
|
|
12
|
+
* This is the only configuration model used by
|
|
13
|
+
* Parmana. Environment variables are converted
|
|
14
|
+
* into strongly typed values through the
|
|
15
|
+
* ConfigValidation module.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Root configuration.
|
|
19
|
+
*/
|
|
20
|
+
export interface Config {
|
|
21
|
+
readonly environment: EnvironmentConfig;
|
|
22
|
+
readonly storage: StorageConfig;
|
|
23
|
+
readonly crypto: CryptoConfig;
|
|
24
|
+
readonly keys: KeyConfig;
|
|
25
|
+
readonly secrets: SecretsConfig;
|
|
26
|
+
readonly authorization: AuthorizationConfig;
|
|
27
|
+
readonly policy: PolicyConfig;
|
|
28
|
+
readonly trust: TrustConfig;
|
|
29
|
+
readonly api: ApiConfig;
|
|
30
|
+
readonly auth: ApiAuthConfig;
|
|
31
|
+
readonly rateLimit: RateLimitConfig;
|
|
32
|
+
readonly logging: LoggingConfig;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Runtime environment.
|
|
36
|
+
*/
|
|
37
|
+
export interface EnvironmentConfig {
|
|
38
|
+
readonly nodeEnv: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Storage configuration.
|
|
42
|
+
*/
|
|
43
|
+
export interface StorageConfig {
|
|
44
|
+
readonly provider: StorageProvider;
|
|
45
|
+
readonly databaseUrl?: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Cryptographic configuration.
|
|
49
|
+
*/
|
|
50
|
+
export interface CryptoConfig {
|
|
51
|
+
/**
|
|
52
|
+
* Crypto operating mode.
|
|
53
|
+
*/
|
|
54
|
+
readonly mode: CryptoMode;
|
|
55
|
+
/**
|
|
56
|
+
* Hash algorithm.
|
|
57
|
+
*/
|
|
58
|
+
readonly hashProvider: HashAlgorithm;
|
|
59
|
+
/**
|
|
60
|
+
* Primary signature algorithm.
|
|
61
|
+
*/
|
|
62
|
+
readonly primarySignatureProvider: SignatureAlgorithm;
|
|
63
|
+
/**
|
|
64
|
+
* Secondary signature algorithm.
|
|
65
|
+
*
|
|
66
|
+
* Required only in hybrid mode.
|
|
67
|
+
*/
|
|
68
|
+
readonly secondarySignatureProvider?: SignatureAlgorithm;
|
|
69
|
+
/**
|
|
70
|
+
* When true, verification of a hybrid-schema-capable artifact
|
|
71
|
+
* (an ExecutionTrustRecord) MUST find a valid `signatures` array
|
|
72
|
+
* covering every configured algorithm -- a record with `signatures`
|
|
73
|
+
* absent, empty, or partial is rejected outright, never silently
|
|
74
|
+
* verified via the legacy single signature alone.
|
|
75
|
+
*
|
|
76
|
+
* Off by default so no already-issued record (hybrid or not) is
|
|
77
|
+
* affected by turning CRYPTO_MODE=hybrid on: a deployment opts into
|
|
78
|
+
* this once it is confident every record going forward is genuinely
|
|
79
|
+
* hybrid-signed. See VerificationCrypto.verifySignature()'s own
|
|
80
|
+
* comment for the exact downgrade this closes.
|
|
81
|
+
*/
|
|
82
|
+
readonly requireHybridSignature: boolean;
|
|
83
|
+
/**
|
|
84
|
+
* Cutover (ADR-0016, option 2): a record created at or after this ISO-8601
|
|
85
|
+
* UTC instant must carry a valid hybrid envelope. Unset means no cutover.
|
|
86
|
+
* The same instant belongs in the offline verifier's trust file.
|
|
87
|
+
*/
|
|
88
|
+
readonly hybridRequiredFrom?: string;
|
|
89
|
+
/**
|
|
90
|
+
* Schema version that hybrid signatures are made under (ADR-0016).
|
|
91
|
+
*
|
|
92
|
+
* 2 (default) signs the canonical fields plus schemaVersion. 3 signs
|
|
93
|
+
* every top-level field except the signature envelope and the
|
|
94
|
+
* post-signing fields (verifications, receipts). Records made under 3
|
|
95
|
+
* are not readable by verifiers that implement only version 2, so
|
|
96
|
+
* switch to 3 only once those consumers are updated.
|
|
97
|
+
*/
|
|
98
|
+
readonly hybridSchemaVersion: 2 | 3;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Key management.
|
|
102
|
+
*/
|
|
103
|
+
export interface KeyConfig {
|
|
104
|
+
readonly provider: KeyProvider;
|
|
105
|
+
/**
|
|
106
|
+
* Root directory containing all Parmana keys.
|
|
107
|
+
*/
|
|
108
|
+
readonly keyDirectory: string;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Secrets backend configuration (ADR-0009). Selects where connector
|
|
112
|
+
* credentials that are opaque bearer values -- not signing keys, see
|
|
113
|
+
* KeyConfig/Signer for those -- are resolved from at request time.
|
|
114
|
+
* "env" (default) is an identity pass-through: the value each
|
|
115
|
+
* connector's own env var already holds IS the secret. In
|
|
116
|
+
* "aws-secrets-manager" mode, that same env var's value is instead
|
|
117
|
+
* treated as the Secrets Manager secret's name/ARN to fetch.
|
|
118
|
+
*/
|
|
119
|
+
export interface SecretsConfig {
|
|
120
|
+
readonly provider: SecretsProvider;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Execution authorization configuration.
|
|
124
|
+
*/
|
|
125
|
+
export interface AuthorizationConfig {
|
|
126
|
+
/**
|
|
127
|
+
* Default TTL, in seconds, applied to a signed
|
|
128
|
+
* Execution Authorization when the caller does
|
|
129
|
+
* not specify one.
|
|
130
|
+
*/
|
|
131
|
+
readonly ttlSeconds: number;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Policy configuration.
|
|
135
|
+
*/
|
|
136
|
+
export interface PolicyConfig {
|
|
137
|
+
/**
|
|
138
|
+
* Root directory containing policy files.
|
|
139
|
+
*/
|
|
140
|
+
readonly directory: string;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Trust profile configuration.
|
|
144
|
+
*/
|
|
145
|
+
export interface TrustConfig {
|
|
146
|
+
readonly profile: TrustProfile;
|
|
147
|
+
readonly receiptVersion: string;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* API configuration.
|
|
151
|
+
*/
|
|
152
|
+
export interface ApiConfig {
|
|
153
|
+
readonly port: number;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* API caller authentication.
|
|
157
|
+
*
|
|
158
|
+
* Fail-closed by design: an empty `keys` array means the
|
|
159
|
+
* caller-authenticator bootstrap refuses to start the
|
|
160
|
+
* server unless `disabled` is explicitly true (local
|
|
161
|
+
* development and tutorials only).
|
|
162
|
+
*/
|
|
163
|
+
export interface ApiAuthConfig {
|
|
164
|
+
readonly keys: readonly ApiKeyEntry[];
|
|
165
|
+
readonly disabled: boolean;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Rate limiting configuration.
|
|
169
|
+
*
|
|
170
|
+
* Both are per-caller/per-IP-per-minute ceilings applied by
|
|
171
|
+
* packages/api/src/middleware/rate-limit.ts; see that file for exactly
|
|
172
|
+
* where and how each is keyed.
|
|
173
|
+
*/
|
|
174
|
+
export interface RateLimitConfig {
|
|
175
|
+
/**
|
|
176
|
+
* POST /execute, keyed by authenticated caller identity.
|
|
177
|
+
*/
|
|
178
|
+
readonly executePerMinute: number;
|
|
179
|
+
/**
|
|
180
|
+
* GET /health and GET /ready, keyed by IP.
|
|
181
|
+
*/
|
|
182
|
+
readonly healthPerMinute: number;
|
|
183
|
+
/**
|
|
184
|
+
* The unauthenticated verify routes, /handbook and key discovery,
|
|
185
|
+
* keyed by IP (G-78).
|
|
186
|
+
*/
|
|
187
|
+
readonly publicPerMinute: number;
|
|
188
|
+
/**
|
|
189
|
+
* Failed caller authentications (401) on every authenticated route,
|
|
190
|
+
* keyed by IP. Each one writes a signed audit event, so an unlimited
|
|
191
|
+
* stream of bad keys would spend signing capacity real requests need.
|
|
192
|
+
*/
|
|
193
|
+
readonly authFailurePerMinute: number;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Logging configuration.
|
|
197
|
+
*/
|
|
198
|
+
export interface LoggingConfig {
|
|
199
|
+
readonly level: string;
|
|
200
|
+
}
|
|
201
|
+
export declare function loadConfig(): Readonly<Config>;
|
|
202
|
+
//# sourceMappingURL=Config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../../src/config/Config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import dotenv from "dotenv";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { optionalProperty } from "./ConfigUtils.js";
|
|
6
|
+
import { parseStorageProvider, parseCryptoMode, parseHashAlgorithm, parseSignatureAlgorithm, parseKeyProvider, parseSecretsProvider, parseTrustProfile, parseApiKeys, } from "./ConfigValidation.js";
|
|
7
|
+
/**
|
|
8
|
+
* Resolve the repository .env file.
|
|
9
|
+
*
|
|
10
|
+
* This implementation is independent of the
|
|
11
|
+
* current working directory, allowing every
|
|
12
|
+
* Parmana package to share the same
|
|
13
|
+
* configuration.
|
|
14
|
+
*/
|
|
15
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
16
|
+
const __dirname = dirname(__filename);
|
|
17
|
+
function findEnvFile() {
|
|
18
|
+
let current = __dirname;
|
|
19
|
+
while (true) {
|
|
20
|
+
const candidate = join(current, ".env");
|
|
21
|
+
if (existsSync(candidate)) {
|
|
22
|
+
return candidate;
|
|
23
|
+
}
|
|
24
|
+
const parent = dirname(current);
|
|
25
|
+
if (parent === current) {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
current = parent;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//
|
|
32
|
+
// The .env file is read on first use of loadConfig(), not when this module
|
|
33
|
+
// is imported. Importing a package (for example the offline verifier) then
|
|
34
|
+
// reads no file from the working tree.
|
|
35
|
+
//
|
|
36
|
+
let dotEnvLoaded = false;
|
|
37
|
+
function loadDotEnvOnce() {
|
|
38
|
+
// Test runs set PARMANA_SKIP_DOTENV so a local .env cannot leak into them.
|
|
39
|
+
if (dotEnvLoaded || process.env.PARMANA_SKIP_DOTENV === "1") {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
dotEnvLoaded = true;
|
|
43
|
+
const envFile = findEnvFile();
|
|
44
|
+
if (envFile) {
|
|
45
|
+
dotenv.config({
|
|
46
|
+
path: envFile,
|
|
47
|
+
quiet: true,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
dotenv.config({ quiet: true });
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Fail-closed by design, same discipline as caller authentication
|
|
56
|
+
* (see createCallerAuthenticator.ts): refuses to start rather than let
|
|
57
|
+
* an unset policy directory surface later as a raw filesystem error
|
|
58
|
+
* (ERR_INVALID_ARG_TYPE from path.join(undefined, ...)) inside
|
|
59
|
+
* FilePolicyRepository.load at request time.
|
|
60
|
+
*/
|
|
61
|
+
function requirePolicyDirectory() {
|
|
62
|
+
const directory = process.env.PARMANA_POLICY_DIR;
|
|
63
|
+
if (directory === undefined || directory.trim() === "") {
|
|
64
|
+
throw new Error("PARMANA_POLICY_DIR is not set. Refusing to start without a " +
|
|
65
|
+
"configured policy directory; the server cannot load or evaluate " +
|
|
66
|
+
"policies without it. Set PARMANA_POLICY_DIR to the directory " +
|
|
67
|
+
"containing policy files (e.g. ./policies).");
|
|
68
|
+
}
|
|
69
|
+
return directory;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Loads the immutable Parmana configuration.
|
|
73
|
+
*
|
|
74
|
+
* This is the only location where process.env
|
|
75
|
+
* should be accessed.
|
|
76
|
+
*/
|
|
77
|
+
/**
|
|
78
|
+
* HYBRID_SCHEMA_VERSION: unset means 2. Any other value must be exactly
|
|
79
|
+
* 2 or 3, and anything else throws, so a typo cannot pick a schema
|
|
80
|
+
* version silently.
|
|
81
|
+
*/
|
|
82
|
+
function parseHybridSchemaVersion(value, acknowledged) {
|
|
83
|
+
if (value === undefined || value.trim() === "") {
|
|
84
|
+
return 2;
|
|
85
|
+
}
|
|
86
|
+
if (value === "2") {
|
|
87
|
+
return 2;
|
|
88
|
+
}
|
|
89
|
+
if (value === "3") {
|
|
90
|
+
//
|
|
91
|
+
// Schema version 3 records are not readable by the SDKs and by
|
|
92
|
+
// the published third-party verifier until those are updated (ADR-0016 issuance gate).
|
|
93
|
+
// Refuse to start unless the operator also sets the acknowledgement,
|
|
94
|
+
// so a stray value cannot switch v3 on.
|
|
95
|
+
//
|
|
96
|
+
if (acknowledged !== "true") {
|
|
97
|
+
throw new Error("HYBRID_SCHEMA_VERSION=3 is refused unless HYBRID_SCHEMA_V3_ACKNOWLEDGED=true is also set (ADR-0016 issuance gate).");
|
|
98
|
+
}
|
|
99
|
+
return 3;
|
|
100
|
+
}
|
|
101
|
+
throw new Error(`HYBRID_SCHEMA_VERSION must be 2 or 3, got "${value}".`);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* HYBRID_REQUIRED_FROM: unset or blank means no cutover. Otherwise it must be
|
|
105
|
+
* an ISO-8601 UTC timestamp ending in "Z", so it means the same time everywhere.
|
|
106
|
+
*/
|
|
107
|
+
function parseHybridRequiredFrom(value) {
|
|
108
|
+
if (value === undefined || value.trim() === "") {
|
|
109
|
+
return undefined;
|
|
110
|
+
}
|
|
111
|
+
if (!value.endsWith("Z") || Number.isNaN(Date.parse(value))) {
|
|
112
|
+
throw new Error(`HYBRID_REQUIRED_FROM must be an ISO-8601 UTC timestamp ending in "Z", got "${value}".`);
|
|
113
|
+
}
|
|
114
|
+
return value;
|
|
115
|
+
}
|
|
116
|
+
export function loadConfig() {
|
|
117
|
+
loadDotEnvOnce();
|
|
118
|
+
return Object.freeze({
|
|
119
|
+
environment: Object.freeze({
|
|
120
|
+
nodeEnv: process.env.NODE_ENV ?? "development",
|
|
121
|
+
}),
|
|
122
|
+
storage: Object.freeze({
|
|
123
|
+
provider: parseStorageProvider(process.env.PARMANA_STORAGE),
|
|
124
|
+
...optionalProperty("databaseUrl", process.env.DATABASE_URL),
|
|
125
|
+
}),
|
|
126
|
+
crypto: Object.freeze({
|
|
127
|
+
mode: parseCryptoMode(process.env.CRYPTO_MODE),
|
|
128
|
+
hashProvider: parseHashAlgorithm(process.env.HASH_PROVIDER),
|
|
129
|
+
primarySignatureProvider: parseSignatureAlgorithm(process.env.PRIMARY_SIGNATURE_PROVIDER),
|
|
130
|
+
...optionalProperty("secondarySignatureProvider", process.env.SECONDARY_SIGNATURE_PROVIDER
|
|
131
|
+
? parseSignatureAlgorithm(process.env.SECONDARY_SIGNATURE_PROVIDER)
|
|
132
|
+
: undefined),
|
|
133
|
+
requireHybridSignature: process.env.HYBRID_SIGNATURE_REQUIRED === "true",
|
|
134
|
+
...optionalProperty("hybridRequiredFrom", parseHybridRequiredFrom(process.env.HYBRID_REQUIRED_FROM)),
|
|
135
|
+
hybridSchemaVersion: parseHybridSchemaVersion(process.env.HYBRID_SCHEMA_VERSION, process.env.HYBRID_SCHEMA_V3_ACKNOWLEDGED),
|
|
136
|
+
}),
|
|
137
|
+
keys: Object.freeze({
|
|
138
|
+
provider: parseKeyProvider(process.env.KEY_PROVIDER),
|
|
139
|
+
keyDirectory: process.env.PARMANA_KEY_DIR,
|
|
140
|
+
}),
|
|
141
|
+
secrets: Object.freeze({
|
|
142
|
+
provider: parseSecretsProvider(process.env.PARMANA_SECRETS_PROVIDER),
|
|
143
|
+
}),
|
|
144
|
+
authorization: Object.freeze({
|
|
145
|
+
ttlSeconds: Number(process.env.EXECUTION_AUTHORIZATION_TTL_SECONDS ?? 120),
|
|
146
|
+
}),
|
|
147
|
+
policy: Object.freeze({
|
|
148
|
+
directory: requirePolicyDirectory(),
|
|
149
|
+
}),
|
|
150
|
+
trust: Object.freeze({
|
|
151
|
+
profile: parseTrustProfile(process.env.TRUST_PROFILE),
|
|
152
|
+
receiptVersion: process.env.RECEIPT_VERSION ?? "1",
|
|
153
|
+
}),
|
|
154
|
+
api: Object.freeze({
|
|
155
|
+
port: Number(process.env.PORT ?? 3000),
|
|
156
|
+
}),
|
|
157
|
+
auth: Object.freeze({
|
|
158
|
+
keys: parseApiKeys(process.env.PARMANA_API_KEYS),
|
|
159
|
+
disabled: process.env.PARMANA_AUTH_DISABLED === "true",
|
|
160
|
+
}),
|
|
161
|
+
rateLimit: Object.freeze({
|
|
162
|
+
executePerMinute: Number(process.env.RATE_LIMIT_EXECUTE_PER_MINUTE ?? 30),
|
|
163
|
+
healthPerMinute: Number(process.env.RATE_LIMIT_HEALTH_PER_MINUTE ?? 300),
|
|
164
|
+
publicPerMinute: Number(process.env.RATE_LIMIT_PUBLIC_PER_MINUTE ?? 60),
|
|
165
|
+
authFailurePerMinute: Number(process.env.RATE_LIMIT_AUTH_FAILURE_PER_MINUTE ?? 30),
|
|
166
|
+
}),
|
|
167
|
+
logging: Object.freeze({
|
|
168
|
+
level: process.env.LOG_LEVEL ?? "info",
|
|
169
|
+
}),
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=Config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Config.js","sourceRoot":"","sources":["../../src/config/Config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigLoader.d.ts","sourceRoot":"","sources":["../../src/config/ConfigLoader.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,SAAS,2CAExB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigLoader.js","sourceRoot":"","sources":["../../src/config/ConfigLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;GAEG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,UAAU,EAAE,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigUtils.d.ts","sourceRoot":"","sources":["../../src/config/ConfigUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,CAAC,GAAG,SAAS,GACnB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAEnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigUtils.js","sourceRoot":"","sources":["../../src/config/ConfigUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,GAAW,EACX,KAAoB;IAEpB,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type CryptoMode, type HashAlgorithm, type SignatureAlgorithm } from "./CryptoAlgorithms.js";
|
|
2
|
+
import { type StorageProvider } from "./StorageProviders.js";
|
|
3
|
+
import { type KeyProvider } from "./KeyProviders.js";
|
|
4
|
+
import { type SecretsProvider } from "./SecretsProviders.js";
|
|
5
|
+
import { type TrustProfile } from "./TrustProfiles.js";
|
|
6
|
+
import type { ApiKeyEntry } from "./ApiKeyEntry.js";
|
|
7
|
+
export declare const parseStorageProvider: (value?: string) => StorageProvider;
|
|
8
|
+
export declare const parseCryptoMode: (value?: string) => CryptoMode;
|
|
9
|
+
export declare const parseHashAlgorithm: (value?: string) => HashAlgorithm;
|
|
10
|
+
export declare const parseSignatureAlgorithm: (value?: string) => SignatureAlgorithm;
|
|
11
|
+
export declare const parseKeyProvider: (value?: string) => KeyProvider;
|
|
12
|
+
/**
|
|
13
|
+
* Unlike the other settings, an invalid value is not echoed: a value set
|
|
14
|
+
* in the wrong variable can be a real secret (a token pasted into
|
|
15
|
+
* PARMANA_SECRETS_PROVIDER, say), and this message reaches logs. Kept
|
|
16
|
+
* separate from parse() so the value never reaches its message.
|
|
17
|
+
*/
|
|
18
|
+
export declare const parseSecretsProvider: (value?: string) => SecretsProvider;
|
|
19
|
+
export declare const parseTrustProfile: (value?: string) => TrustProfile;
|
|
20
|
+
/**
|
|
21
|
+
* Parses PARMANA_API_KEYS: a JSON array of
|
|
22
|
+
* { "callerId": string, "keyHash": string } entries.
|
|
23
|
+
*
|
|
24
|
+
* Returns an empty array when unset — callers of this
|
|
25
|
+
* function decide what an empty result means (the
|
|
26
|
+
* caller-authenticator bootstrap treats it as "refuse to
|
|
27
|
+
* start unless auth is explicitly disabled").
|
|
28
|
+
*/
|
|
29
|
+
export declare function parseApiKeys(value?: string): ApiKeyEntry[];
|
|
30
|
+
//# sourceMappingURL=ConfigValidation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigValidation.d.ts","sourceRoot":"","sources":["../../src/config/ConfigValidation.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,UAAU,EAEf,KAAK,aAAa,EAElB,KAAK,kBAAkB,EACxB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE/E,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEnE,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE/E,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAItE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAkBpD,eAAO,MAAM,oBAAoB,WAAY,MAAM,KAAG,eAarD,CAAC;AAEF,eAAO,MAAM,eAAe,WAAY,MAAM,KAAG,UACa,CAAC;AAE/D,eAAO,MAAM,kBAAkB,WAAY,MAAM,KAAG,aACkB,CAAC;AAgBvE,eAAO,MAAM,uBAAuB,WAAY,MAAM,KAAG,kBAMtD,CAAC;AAEJ,eAAO,MAAM,gBAAgB,WAAY,MAAM,KAAG,WACc,CAAC;AAEjE;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,WAAY,MAAM,KAAG,eAerD,CAAC;AAEF,eAAO,MAAM,iBAAiB,WAAY,MAAM,KAAG,YACa,CAAC;AAIjE;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE,CAuJ1D"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { CryptoModes, HashAlgorithms, SignatureAlgorithms, } from "./CryptoAlgorithms.js";
|
|
2
|
+
import { StorageProviders } from "./StorageProviders.js";
|
|
3
|
+
import { KeyProviders } from "./KeyProviders.js";
|
|
4
|
+
import { SecretsProviders } from "./SecretsProviders.js";
|
|
5
|
+
import { TrustProfiles } from "./TrustProfiles.js";
|
|
6
|
+
import { createPublicKey } from "node:crypto";
|
|
7
|
+
import { AuthorityType } from "../domain/authority.js";
|
|
8
|
+
function parse(value, values, name, defaultValue) {
|
|
9
|
+
const resolved = value ?? defaultValue;
|
|
10
|
+
if (Object.values(values).includes(resolved)) {
|
|
11
|
+
return resolved;
|
|
12
|
+
}
|
|
13
|
+
throw new Error(`Invalid ${name}: ${resolved}`);
|
|
14
|
+
}
|
|
15
|
+
export const parseStorageProvider = (value) => {
|
|
16
|
+
if (process.env.DATABASE_PROVIDER !== undefined) {
|
|
17
|
+
throw new Error("DATABASE_PROVIDER is no longer read; set PARMANA_STORAGE instead.");
|
|
18
|
+
}
|
|
19
|
+
return parse(value, StorageProviders, "PARMANA_STORAGE", StorageProviders.MEMORY);
|
|
20
|
+
};
|
|
21
|
+
export const parseCryptoMode = (value) => parse(value, CryptoModes, "CRYPTO_MODE", CryptoModes.SINGLE);
|
|
22
|
+
export const parseHashAlgorithm = (value) => parse(value, HashAlgorithms, "HASH_PROVIDER", HashAlgorithms.SHA256);
|
|
23
|
+
/**
|
|
24
|
+
* Accepted input aliases for a SignatureAlgorithm config value, resolved
|
|
25
|
+
* to the canonical internal identifier before validation. Additive only:
|
|
26
|
+
* the canonical identifiers themselves (SignatureAlgorithms' own values,
|
|
27
|
+
* e.g. "dilithium3") are never renamed, so an existing
|
|
28
|
+
* PRIMARY_SIGNATURE_PROVIDER=dilithium3 deployment is unaffected. Lets a
|
|
29
|
+
* new deployment use "ml-dsa-65" (the NIST/FIPS 204 standard name this
|
|
30
|
+
* codebase's own docs already use when describing "dilithium3" to
|
|
31
|
+
* readers) without a breaking rename of the internal identifier itself.
|
|
32
|
+
*/
|
|
33
|
+
const SIGNATURE_ALGORITHM_ALIASES = {
|
|
34
|
+
"ml-dsa-65": SignatureAlgorithms.DILITHIUM3,
|
|
35
|
+
};
|
|
36
|
+
export const parseSignatureAlgorithm = (value) => parse(value !== undefined ? (SIGNATURE_ALGORITHM_ALIASES[value] ?? value) : value, SignatureAlgorithms, "SIGNATURE_PROVIDER", SignatureAlgorithms.ED25519);
|
|
37
|
+
export const parseKeyProvider = (value) => parse(value, KeyProviders, "KEY_PROVIDER", KeyProviders.LOCAL);
|
|
38
|
+
/**
|
|
39
|
+
* Unlike the other settings, an invalid value is not echoed: a value set
|
|
40
|
+
* in the wrong variable can be a real secret (a token pasted into
|
|
41
|
+
* PARMANA_SECRETS_PROVIDER, say), and this message reaches logs. Kept
|
|
42
|
+
* separate from parse() so the value never reaches its message.
|
|
43
|
+
*/
|
|
44
|
+
export const parseSecretsProvider = (value) => {
|
|
45
|
+
const accepted = Object.values(SecretsProviders);
|
|
46
|
+
const match = accepted.find((provider) => provider === value);
|
|
47
|
+
if (value === undefined) {
|
|
48
|
+
return SecretsProviders.ENV;
|
|
49
|
+
}
|
|
50
|
+
if (match === undefined) {
|
|
51
|
+
throw new Error(`Invalid PARMANA_SECRETS_PROVIDER: expected one of ${accepted.join(", ")}`);
|
|
52
|
+
}
|
|
53
|
+
return match;
|
|
54
|
+
};
|
|
55
|
+
export const parseTrustProfile = (value) => parse(value, TrustProfiles, "TRUST_PROFILE", TrustProfiles.V1);
|
|
56
|
+
const API_KEY_HASH_PATTERN = /^[0-9a-f]{64}$/;
|
|
57
|
+
/**
|
|
58
|
+
* Parses PARMANA_API_KEYS: a JSON array of
|
|
59
|
+
* { "callerId": string, "keyHash": string } entries.
|
|
60
|
+
*
|
|
61
|
+
* Returns an empty array when unset — callers of this
|
|
62
|
+
* function decide what an empty result means (the
|
|
63
|
+
* caller-authenticator bootstrap treats it as "refuse to
|
|
64
|
+
* start unless auth is explicitly disabled").
|
|
65
|
+
*/
|
|
66
|
+
export function parseApiKeys(value) {
|
|
67
|
+
if (value === undefined || value.trim() === "") {
|
|
68
|
+
return [];
|
|
69
|
+
}
|
|
70
|
+
let parsed;
|
|
71
|
+
try {
|
|
72
|
+
parsed = JSON.parse(value);
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
throw new Error("PARMANA_API_KEYS is not valid JSON. Expected an array of " +
|
|
76
|
+
'{ "callerId": string, "keyHash": string } entries.');
|
|
77
|
+
}
|
|
78
|
+
if (!Array.isArray(parsed)) {
|
|
79
|
+
throw new Error("PARMANA_API_KEYS must be a JSON array of " +
|
|
80
|
+
'{ "callerId": string, "keyHash": string } entries.');
|
|
81
|
+
}
|
|
82
|
+
return parsed.map((entry, index) => {
|
|
83
|
+
const record = entry;
|
|
84
|
+
const validEntry = typeof entry === "object" &&
|
|
85
|
+
entry !== null &&
|
|
86
|
+
typeof record.callerId === "string" &&
|
|
87
|
+
record.callerId !== "" &&
|
|
88
|
+
typeof record.keyHash === "string" &&
|
|
89
|
+
API_KEY_HASH_PATTERN.test(record.keyHash);
|
|
90
|
+
if (!validEntry) {
|
|
91
|
+
throw new Error(`PARMANA_API_KEYS[${index}] is invalid. Each entry must be ` +
|
|
92
|
+
'{ "callerId": non-empty string, "keyHash": 64-character lowercase hex }.');
|
|
93
|
+
}
|
|
94
|
+
const allowedPrincipalIds = record.allowedPrincipalIds;
|
|
95
|
+
if (allowedPrincipalIds !== undefined) {
|
|
96
|
+
const validAllowedPrincipalIds = Array.isArray(allowedPrincipalIds) &&
|
|
97
|
+
allowedPrincipalIds.every((id) => typeof id === "string" && id !== "");
|
|
98
|
+
if (!validAllowedPrincipalIds) {
|
|
99
|
+
throw new Error(`PARMANA_API_KEYS[${index}].allowedPrincipalIds must be an array ` +
|
|
100
|
+
"of non-empty strings when present.");
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
const allowedCapabilities = record.allowedCapabilities;
|
|
104
|
+
if (allowedCapabilities !== undefined) {
|
|
105
|
+
const validAllowedCapabilities = Array.isArray(allowedCapabilities) &&
|
|
106
|
+
allowedCapabilities.every((capability) => typeof capability === "string" && capability !== "");
|
|
107
|
+
if (!validAllowedCapabilities) {
|
|
108
|
+
throw new Error(`PARMANA_API_KEYS[${index}].allowedCapabilities must be an array ` +
|
|
109
|
+
'of non-empty strings when present. Use "*" as an entry to ' +
|
|
110
|
+
"grant every capability.");
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
const allowedTenantIds = record.allowedTenantIds;
|
|
114
|
+
if (allowedTenantIds !== undefined) {
|
|
115
|
+
const validAllowedTenantIds = Array.isArray(allowedTenantIds) &&
|
|
116
|
+
allowedTenantIds.every((id) => typeof id === "string" && id !== "");
|
|
117
|
+
if (!validAllowedTenantIds) {
|
|
118
|
+
throw new Error(`PARMANA_API_KEYS[${index}].allowedTenantIds must be an array ` +
|
|
119
|
+
"of non-empty strings when present.");
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
const credentialHolderType = record.credentialHolderType;
|
|
123
|
+
if (credentialHolderType !== undefined) {
|
|
124
|
+
const validCredentialHolderType = typeof credentialHolderType === "string" &&
|
|
125
|
+
Object.values(AuthorityType).includes(credentialHolderType);
|
|
126
|
+
if (!validCredentialHolderType) {
|
|
127
|
+
throw new Error(`PARMANA_API_KEYS[${index}].credentialHolderType must be one of ` +
|
|
128
|
+
`${Object.values(AuthorityType).join(", ")} when present.`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
const stepUpPublicKey = record.stepUpPublicKey;
|
|
132
|
+
if (stepUpPublicKey !== undefined) {
|
|
133
|
+
const validShape = typeof stepUpPublicKey === "string" && stepUpPublicKey.trim() !== "";
|
|
134
|
+
let validKey = false;
|
|
135
|
+
if (validShape) {
|
|
136
|
+
try {
|
|
137
|
+
const keyObject = createPublicKey(stepUpPublicKey);
|
|
138
|
+
validKey = keyObject.asymmetricKeyType === "ed25519";
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
validKey = false;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if (!validShape || !validKey) {
|
|
145
|
+
throw new Error(`PARMANA_API_KEYS[${index}].stepUpPublicKey must be a PEM-encoded ` +
|
|
146
|
+
"Ed25519 public key when present.");
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return {
|
|
150
|
+
callerId: record.callerId,
|
|
151
|
+
keyHash: record.keyHash,
|
|
152
|
+
...(allowedPrincipalIds !== undefined
|
|
153
|
+
? { allowedPrincipalIds: allowedPrincipalIds }
|
|
154
|
+
: {}),
|
|
155
|
+
...(allowedCapabilities !== undefined
|
|
156
|
+
? { allowedCapabilities: allowedCapabilities }
|
|
157
|
+
: {}),
|
|
158
|
+
...(allowedTenantIds !== undefined
|
|
159
|
+
? { allowedTenantIds: allowedTenantIds }
|
|
160
|
+
: {}),
|
|
161
|
+
...(credentialHolderType !== undefined
|
|
162
|
+
? { credentialHolderType: credentialHolderType }
|
|
163
|
+
: {}),
|
|
164
|
+
...(stepUpPublicKey !== undefined
|
|
165
|
+
? { stepUpPublicKey: stepUpPublicKey }
|
|
166
|
+
: {}),
|
|
167
|
+
};
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=ConfigValidation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigValidation.js","sourceRoot":"","sources":["../../src/config/ConfigValidation.ts"],"names":[],"mappings":"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"}
|