2026-07-17 21:43:03 +09:00
|
|
|
cabal-version: 3.0
|
|
|
|
|
name: nuthatch
|
|
|
|
|
version: 0.1.0.0
|
|
|
|
|
synopsis: User-facing S3 BFF
|
|
|
|
|
license: NONE
|
|
|
|
|
author: Nuthatch
|
|
|
|
|
maintainer: nuthatch@localhost
|
|
|
|
|
category: Network
|
|
|
|
|
build-type: Simple
|
|
|
|
|
extra-source-files:
|
2026-07-19 15:21:24 +09:00
|
|
|
sql/001_initial_schema.sql
|
2026-07-17 21:43:03 +09:00
|
|
|
|
|
|
|
|
common shared
|
|
|
|
|
default-language: Haskell2010
|
|
|
|
|
default-extensions:
|
|
|
|
|
OverloadedStrings
|
|
|
|
|
RecordWildCards
|
|
|
|
|
DeriveGeneric
|
|
|
|
|
DerivingStrategies
|
|
|
|
|
GeneralizedNewtypeDeriving
|
|
|
|
|
LambdaCase
|
|
|
|
|
ScopedTypeVariables
|
|
|
|
|
TupleSections
|
|
|
|
|
NamedFieldPuns
|
|
|
|
|
FlexibleContexts
|
2026-07-18 13:17:40 +09:00
|
|
|
FlexibleInstances
|
|
|
|
|
DataKinds
|
|
|
|
|
TypeOperators
|
|
|
|
|
TypeFamilies
|
|
|
|
|
MultiParamTypeClasses
|
|
|
|
|
UndecidableInstances
|
2026-07-17 21:43:03 +09:00
|
|
|
|
|
|
|
|
ghc-options:
|
|
|
|
|
-Wall
|
|
|
|
|
-Wcompat
|
|
|
|
|
-Widentities
|
|
|
|
|
-Wincomplete-record-updates
|
|
|
|
|
-Wincomplete-uni-patterns
|
|
|
|
|
-Wmissing-export-lists
|
|
|
|
|
-Wpartial-fields
|
|
|
|
|
-Wredundant-constraints
|
|
|
|
|
|
|
|
|
|
build-depends:
|
|
|
|
|
, aeson >= 2.1 && < 2.3
|
|
|
|
|
, async >= 2.2 && < 2.3
|
2026-07-18 15:22:57 +09:00
|
|
|
, aws >= 0.25.2 && < 0.26
|
2026-07-17 21:43:03 +09:00
|
|
|
, base >= 4.18 && < 5
|
|
|
|
|
, base16-bytestring >= 1.0 && < 1.1
|
|
|
|
|
, base64-bytestring >= 1.2 && < 1.3
|
|
|
|
|
, bytestring >= 0.11 && < 0.13
|
|
|
|
|
, case-insensitive >= 1.2 && < 1.3
|
|
|
|
|
, containers >= 0.6 && < 0.8
|
2026-07-18 15:22:57 +09:00
|
|
|
, conduit >= 1.3 && < 1.4
|
2026-07-18 18:08:41 +09:00
|
|
|
, cookie >= 0.5.1 && < 0.6
|
2026-07-17 21:43:03 +09:00
|
|
|
, crypton >= 0.34 && < 1.1
|
|
|
|
|
, directory >= 1.3 && < 1.4
|
|
|
|
|
, entropy >= 0.4 && < 0.5
|
2026-07-19 03:41:01 +09:00
|
|
|
, envparse >= 0.6 && < 0.7
|
2026-07-17 21:43:03 +09:00
|
|
|
, filepath >= 1.4 && < 1.6
|
|
|
|
|
, hedis >= 0.15 && < 0.16
|
|
|
|
|
, http-client >= 0.7 && < 0.8
|
|
|
|
|
, http-client-tls >= 0.3 && < 0.4
|
|
|
|
|
, http-conduit >= 2.3 && < 2.4
|
2026-07-18 13:17:40 +09:00
|
|
|
, http-api-data >= 0.7 && < 0.8
|
|
|
|
|
, http-media >= 0.8 && < 0.9
|
2026-07-17 21:43:03 +09:00
|
|
|
, http-types >= 0.12 && < 0.13
|
2026-07-18 18:08:41 +09:00
|
|
|
, jose >= 0.12 && < 0.13
|
|
|
|
|
, lens >= 5.2 && < 5.4
|
2026-07-17 21:43:03 +09:00
|
|
|
, memory >= 0.18 && < 0.19
|
|
|
|
|
, mime-types >= 0.1 && < 0.2
|
2026-07-19 03:41:01 +09:00
|
|
|
, modern-uri >= 0.3.6 && < 0.4
|
2026-07-17 21:43:03 +09:00
|
|
|
, mtl >= 2.3 && < 2.4
|
|
|
|
|
, network-uri >= 2.6 && < 2.8
|
|
|
|
|
, postgresql-simple >= 0.7 && < 0.8
|
2026-07-18 15:22:57 +09:00
|
|
|
, postgresql-migration >= 0.2.1.8 && < 0.3
|
2026-07-17 21:43:03 +09:00
|
|
|
, resource-pool >= 0.4 && < 0.5
|
2026-07-18 15:22:57 +09:00
|
|
|
, resourcet >= 1.3 && < 1.4
|
2026-07-18 22:49:19 +09:00
|
|
|
, retry >= 0.9 && < 0.10
|
2026-07-17 21:43:03 +09:00
|
|
|
, scientific >= 0.3 && < 0.4
|
2026-07-18 13:17:40 +09:00
|
|
|
, servant >= 0.20 && < 0.21
|
|
|
|
|
, servant-server >= 0.20 && < 0.21
|
2026-07-17 21:43:03 +09:00
|
|
|
, stm >= 2.5 && < 2.6
|
|
|
|
|
, temporary >= 1.3 && < 1.4
|
|
|
|
|
, text >= 2.0 && < 2.2
|
|
|
|
|
, time >= 1.12 && < 1.15
|
|
|
|
|
, transformers >= 0.6 && < 0.7
|
2026-07-18 00:54:47 +09:00
|
|
|
, unicode-transforms >= 0.4 && < 0.5
|
2026-07-17 21:43:03 +09:00
|
|
|
, unordered-containers >= 0.2 && < 0.3
|
|
|
|
|
, uuid >= 1.3 && < 1.4
|
|
|
|
|
, wai >= 3.2 && < 3.3
|
|
|
|
|
, wai-extra >= 3.1 && < 3.2
|
|
|
|
|
, warp >= 3.3 && < 3.5
|
2026-07-18 18:08:41 +09:00
|
|
|
, warp-tls >= 3.4 && < 3.5
|
2026-07-17 21:43:03 +09:00
|
|
|
, xml-conduit >= 1.9 && < 1.11
|
|
|
|
|
|
|
|
|
|
library
|
|
|
|
|
import: shared
|
|
|
|
|
hs-source-dirs: src
|
|
|
|
|
exposed-modules:
|
|
|
|
|
Nuthatch
|
2026-07-18 13:17:40 +09:00
|
|
|
Nuthatch.Api
|
2026-07-17 21:43:03 +09:00
|
|
|
Nuthatch.App
|
2026-07-19 18:22:33 +09:00
|
|
|
Nuthatch.App.Env
|
2026-07-17 21:43:03 +09:00
|
|
|
Nuthatch.Audit
|
2026-07-19 18:22:33 +09:00
|
|
|
Nuthatch.Browse
|
2026-07-17 21:43:03 +09:00
|
|
|
Nuthatch.Config
|
|
|
|
|
Nuthatch.Db
|
2026-07-19 18:22:33 +09:00
|
|
|
Nuthatch.Http.Auth
|
|
|
|
|
Nuthatch.Http.Error
|
|
|
|
|
Nuthatch.Http.Server
|
|
|
|
|
Nuthatch.Mutation.Effects
|
|
|
|
|
Nuthatch.Mutation.Recovery
|
|
|
|
|
Nuthatch.Mutation.Service
|
2026-07-18 18:08:41 +09:00
|
|
|
Nuthatch.Oidc
|
2026-07-17 21:43:03 +09:00
|
|
|
Nuthatch.Paths
|
2026-07-20 02:21:33 +09:00
|
|
|
Nuthatch.Product.Limits
|
2026-07-17 21:43:03 +09:00
|
|
|
Nuthatch.Protocol
|
|
|
|
|
Nuthatch.Redis
|
2026-07-18 22:49:19 +09:00
|
|
|
Nuthatch.Recovery
|
2026-07-19 03:41:01 +09:00
|
|
|
Nuthatch.Runtime
|
2026-07-17 21:43:03 +09:00
|
|
|
Nuthatch.S3
|
|
|
|
|
Nuthatch.Session
|
2026-07-18 20:48:26 +09:00
|
|
|
Nuthatch.Streaming
|
2026-07-19 18:22:33 +09:00
|
|
|
Nuthatch.Transfer
|
2026-07-17 21:43:03 +09:00
|
|
|
Nuthatch.Types
|
|
|
|
|
|
|
|
|
|
executable nuthatch
|
|
|
|
|
import: shared
|
|
|
|
|
main-is: Main.hs
|
|
|
|
|
hs-source-dirs: app
|
|
|
|
|
build-depends:
|
|
|
|
|
, nuthatch
|
|
|
|
|
, base
|
|
|
|
|
ghc-options:
|
|
|
|
|
-threaded
|
|
|
|
|
-rtsopts
|
|
|
|
|
-with-rtsopts=-N
|
|
|
|
|
|
2026-07-19 15:21:24 +09:00
|
|
|
executable nuthatch-storage-integration
|
2026-07-18 15:22:57 +09:00
|
|
|
import: shared
|
|
|
|
|
main-is: Integration.hs
|
|
|
|
|
hs-source-dirs: test
|
|
|
|
|
build-depends:
|
|
|
|
|
, nuthatch
|
|
|
|
|
, base
|
|
|
|
|
, async
|
|
|
|
|
, bytestring
|
|
|
|
|
, text
|
|
|
|
|
ghc-options:
|
|
|
|
|
-threaded
|
|
|
|
|
-rtsopts
|
|
|
|
|
-with-rtsopts=-N
|
|
|
|
|
|
2026-07-19 15:21:24 +09:00
|
|
|
executable nuthatch-recovery-probe
|
2026-07-18 22:49:19 +09:00
|
|
|
import: shared
|
|
|
|
|
main-is: RecoveryPhase.hs
|
|
|
|
|
hs-source-dirs: test
|
|
|
|
|
build-depends:
|
|
|
|
|
, nuthatch
|
|
|
|
|
, base
|
|
|
|
|
, bytestring
|
|
|
|
|
, text
|
|
|
|
|
ghc-options:
|
|
|
|
|
-threaded
|
|
|
|
|
-rtsopts
|
|
|
|
|
-with-rtsopts=-N
|
|
|
|
|
|
2026-07-19 15:21:24 +09:00
|
|
|
executable nuthatch-protocol-conformance
|
2026-07-18 23:52:45 +09:00
|
|
|
import: shared
|
|
|
|
|
main-is: ProtocolConformance.hs
|
|
|
|
|
hs-source-dirs: test
|
2026-07-19 19:51:26 +09:00
|
|
|
other-modules:
|
|
|
|
|
Nuthatch.ModelEvidence
|
2026-07-18 23:52:45 +09:00
|
|
|
build-depends:
|
|
|
|
|
, nuthatch
|
|
|
|
|
, base
|
|
|
|
|
, bytestring
|
|
|
|
|
, crypton
|
|
|
|
|
, memory
|
|
|
|
|
, postgresql-simple
|
|
|
|
|
, text
|
|
|
|
|
ghc-options:
|
|
|
|
|
-threaded
|
|
|
|
|
-rtsopts
|
|
|
|
|
-with-rtsopts=-N
|
|
|
|
|
|
2026-07-19 19:51:26 +09:00
|
|
|
executable nuthatch-model-evidence
|
|
|
|
|
import: shared
|
|
|
|
|
main-is: ModelEvidenceMain.hs
|
|
|
|
|
hs-source-dirs: test
|
|
|
|
|
other-modules:
|
|
|
|
|
Nuthatch.ModelEvidence
|
|
|
|
|
build-depends:
|
|
|
|
|
, nuthatch
|
|
|
|
|
, aeson
|
|
|
|
|
, base
|
|
|
|
|
, text
|
|
|
|
|
|
2026-07-19 15:21:24 +09:00
|
|
|
executable nuthatch-runtime-probe
|
2026-07-19 03:41:01 +09:00
|
|
|
import: shared
|
|
|
|
|
main-is: RuntimeProbe.hs
|
|
|
|
|
hs-source-dirs: test
|
|
|
|
|
build-depends:
|
|
|
|
|
, nuthatch
|
|
|
|
|
, base
|
|
|
|
|
ghc-options:
|
|
|
|
|
-threaded
|
|
|
|
|
-rtsopts
|
|
|
|
|
-with-rtsopts=-N
|
|
|
|
|
|
2026-07-19 23:57:21 +09:00
|
|
|
executable nuthatch-auth-probe
|
|
|
|
|
import: shared
|
|
|
|
|
main-is: AuthProbe.hs
|
|
|
|
|
hs-source-dirs: test
|
|
|
|
|
other-modules:
|
|
|
|
|
Nuthatch.Probe.Assert
|
|
|
|
|
Nuthatch.Probe.Curl
|
|
|
|
|
Nuthatch.Probe.Oidc
|
|
|
|
|
Nuthatch.Probe.ProductClient
|
|
|
|
|
build-depends:
|
|
|
|
|
, nuthatch
|
|
|
|
|
, aeson
|
|
|
|
|
, base
|
|
|
|
|
, bytestring
|
|
|
|
|
, crypton
|
|
|
|
|
, memory
|
|
|
|
|
, process
|
|
|
|
|
, temporary
|
|
|
|
|
ghc-options:
|
|
|
|
|
-threaded
|
|
|
|
|
-rtsopts
|
|
|
|
|
-with-rtsopts=-N
|
|
|
|
|
|
|
|
|
|
executable nuthatch-product-probe
|
|
|
|
|
import: shared
|
|
|
|
|
main-is: ProductProbe.hs
|
|
|
|
|
hs-source-dirs: test
|
|
|
|
|
other-modules:
|
|
|
|
|
Nuthatch.Probe.Assert
|
|
|
|
|
Nuthatch.Probe.Curl
|
|
|
|
|
Nuthatch.Probe.Oidc
|
|
|
|
|
Nuthatch.Probe.ProductClient
|
|
|
|
|
build-depends:
|
|
|
|
|
, nuthatch
|
|
|
|
|
, aeson
|
|
|
|
|
, base
|
|
|
|
|
, bytestring
|
|
|
|
|
, crypton
|
|
|
|
|
, memory
|
|
|
|
|
, process
|
|
|
|
|
, temporary
|
|
|
|
|
ghc-options:
|
|
|
|
|
-threaded
|
|
|
|
|
-rtsopts
|
|
|
|
|
-with-rtsopts=-N
|
|
|
|
|
|
|
|
|
|
executable nuthatch-idempotency-probe
|
|
|
|
|
import: shared
|
|
|
|
|
main-is: IdempotencyProbe.hs
|
|
|
|
|
hs-source-dirs: test
|
|
|
|
|
other-modules:
|
|
|
|
|
Nuthatch.Probe.Assert
|
|
|
|
|
Nuthatch.Probe.Curl
|
|
|
|
|
Nuthatch.Probe.Oidc
|
|
|
|
|
Nuthatch.Probe.ProductClient
|
|
|
|
|
build-depends:
|
|
|
|
|
, nuthatch
|
|
|
|
|
, aeson
|
|
|
|
|
, async
|
|
|
|
|
, base
|
|
|
|
|
, bytestring
|
|
|
|
|
, crypton
|
|
|
|
|
, memory
|
|
|
|
|
, process
|
|
|
|
|
, temporary
|
|
|
|
|
ghc-options:
|
|
|
|
|
-threaded
|
|
|
|
|
-rtsopts
|
|
|
|
|
-with-rtsopts=-N
|
|
|
|
|
|
|
|
|
|
executable nuthatch-streaming-probe
|
|
|
|
|
import: shared
|
|
|
|
|
main-is: StreamingProbe.hs
|
|
|
|
|
hs-source-dirs: test
|
|
|
|
|
other-modules:
|
|
|
|
|
Nuthatch.Probe.Assert
|
|
|
|
|
Nuthatch.Probe.Curl
|
|
|
|
|
Nuthatch.Probe.Oidc
|
|
|
|
|
Nuthatch.Probe.ProductClient
|
|
|
|
|
build-depends:
|
|
|
|
|
, nuthatch
|
|
|
|
|
, aeson
|
|
|
|
|
, async
|
|
|
|
|
, base
|
|
|
|
|
, bytestring
|
|
|
|
|
, crypton
|
|
|
|
|
, directory
|
|
|
|
|
, memory
|
|
|
|
|
, process
|
|
|
|
|
, temporary
|
|
|
|
|
ghc-options:
|
|
|
|
|
-threaded
|
|
|
|
|
-rtsopts
|
|
|
|
|
-with-rtsopts=-N
|
|
|
|
|
|
|
|
|
|
executable nuthatch-runtime-http-probe
|
|
|
|
|
import: shared
|
|
|
|
|
main-is: RuntimeHttpProbe.hs
|
|
|
|
|
hs-source-dirs: test
|
|
|
|
|
other-modules:
|
|
|
|
|
Nuthatch.Probe.Assert
|
|
|
|
|
Nuthatch.Probe.Curl
|
|
|
|
|
Nuthatch.Probe.Oidc
|
|
|
|
|
Nuthatch.Probe.ProductClient
|
|
|
|
|
build-depends:
|
|
|
|
|
, nuthatch
|
|
|
|
|
, aeson
|
|
|
|
|
, base
|
|
|
|
|
, bytestring
|
|
|
|
|
, crypton
|
|
|
|
|
, memory
|
|
|
|
|
, process
|
|
|
|
|
, temporary
|
|
|
|
|
ghc-options:
|
|
|
|
|
-threaded
|
|
|
|
|
-rtsopts
|
|
|
|
|
-with-rtsopts=-N
|
|
|
|
|
|
|
|
|
|
executable nuthatch-runtime-audit-probe
|
|
|
|
|
import: shared
|
|
|
|
|
main-is: RuntimeAuditProbe.hs
|
|
|
|
|
hs-source-dirs: test
|
|
|
|
|
other-modules:
|
|
|
|
|
Nuthatch.Probe.Assert
|
|
|
|
|
build-depends:
|
|
|
|
|
, nuthatch
|
|
|
|
|
, aeson
|
|
|
|
|
, base
|
|
|
|
|
, bytestring
|
|
|
|
|
, text
|
|
|
|
|
|
|
|
|
|
executable nuthatch-fixture-probe
|
|
|
|
|
import: shared
|
|
|
|
|
main-is: FixtureProbe.hs
|
|
|
|
|
hs-source-dirs: test
|
|
|
|
|
other-modules:
|
|
|
|
|
Nuthatch.Probe.Assert
|
|
|
|
|
Nuthatch.Probe.Curl
|
|
|
|
|
build-depends:
|
|
|
|
|
, nuthatch
|
|
|
|
|
, base
|
|
|
|
|
, bytestring
|
|
|
|
|
, crypton
|
|
|
|
|
, memory
|
|
|
|
|
, postgresql-simple
|
|
|
|
|
, process
|
|
|
|
|
, temporary
|
|
|
|
|
, text
|
|
|
|
|
|
|
|
|
|
executable nuthatch-dependency-probe
|
|
|
|
|
import: shared
|
|
|
|
|
main-is: DependencyProbe.hs
|
|
|
|
|
hs-source-dirs: test
|
|
|
|
|
other-modules:
|
|
|
|
|
Nuthatch.Probe.Assert
|
|
|
|
|
Nuthatch.Probe.Curl
|
|
|
|
|
build-depends:
|
|
|
|
|
, nuthatch
|
|
|
|
|
, base
|
|
|
|
|
, bytestring
|
|
|
|
|
, hedis
|
|
|
|
|
, postgresql-simple
|
|
|
|
|
, process
|
|
|
|
|
, temporary
|
|
|
|
|
|
2026-07-17 21:43:03 +09:00
|
|
|
test-suite nuthatch-unit
|
|
|
|
|
import: shared
|
|
|
|
|
type: exitcode-stdio-1.0
|
|
|
|
|
main-is: Spec.hs
|
|
|
|
|
hs-source-dirs: test
|
2026-07-20 01:47:55 +09:00
|
|
|
other-modules:
|
|
|
|
|
Nuthatch.Test.Config
|
|
|
|
|
Nuthatch.Test.Http
|
|
|
|
|
Nuthatch.Test.Identity
|
|
|
|
|
Nuthatch.Test.Oidc
|
|
|
|
|
Nuthatch.Test.Path
|
|
|
|
|
Nuthatch.Test.PathFixture
|
|
|
|
|
Nuthatch.Test.Product
|
|
|
|
|
Nuthatch.Test.Protocol
|
|
|
|
|
Nuthatch.Test.Recovery
|
|
|
|
|
Nuthatch.Test.Runtime
|
|
|
|
|
Nuthatch.Test.Streaming
|
2026-07-17 21:43:03 +09:00
|
|
|
build-depends:
|
|
|
|
|
, nuthatch
|
|
|
|
|
, base
|
|
|
|
|
, bytestring
|
2026-07-18 00:54:47 +09:00
|
|
|
, hedgehog >= 1.7 && < 1.8
|
|
|
|
|
, tasty >= 1.5 && < 1.6
|
|
|
|
|
, tasty-hedgehog >= 1.4 && < 1.5
|
|
|
|
|
, tasty-hunit >= 0.10 && < 0.11
|
2026-07-17 21:43:03 +09:00
|
|
|
, text
|
|
|
|
|
ghc-options:
|
|
|
|
|
-threaded
|