All notable changes to this project will be documented in this file.
v2.0.1 - 2021-11-02
- fix: Added a content-type parser to HeaderUtil
- fix: Allow URLs with multiple leading slashes.
- fix: Do not serve UI on special pages.
v2.0.0 - 2021-10-15
- feat: Keep track of last modified date of resources
- feat: Expose Last-Modified and ETag headers
- feat: Create conditions based on input headers
- feat: Verify conditions in DataAccessorBasedStore
- feat: Use RequestParser and ResponseWriter for IDP
- feat: Support content negotiation for IDP requests
- feat: Add support for agentGroup ACL rules
- feat: Support LDN inbox headers
- feat: Convert IDP input data to JSON
- feat: Support JSON errors
- feat: Patch containers by recreating Representation from metadata
- feat: Create SetupHttpHandler
- feat: Integrate setup behaviour
- feat: Let CredentialsExtractors specify what type of Credentials they generate
- feat: Create UnionHandler to combine AsyncHandler results
- feat: Combine the results of multiple CredentialsExtractors
- feat: Extract set of required modes instead of PermissionSet
- feat: Use PermissionReaders to determine available permissions
- feat: Create OperationMetadataCollector to handle operation metadata
- feat: Store account settings separately
- feat: Always grant control permissions to pod owners
- feat: Support acl authorization for IDP components
- fix: Explain why logging in will not work
- fix: Prevent parent containers from storing generated metadata
- fix: Make json-ld prefix generation deterministic
- fix: Hide internal data by making it auxiliary
- fix: Only check DataAccessor canHandle call for Documents
- feat: Replace acl specific permissions with generic permissions
- fix: Add required triple to pod README acl
- fix: Let Representations always have a body
- fix: Return 201 when creating new resources
- fix: Return 409 when there is a slash semantics issue
v1.1.0 - 2021-09-03
- feat: Throw error when trying to complete interaction out of session
- feat: Indicate to templates if this is part of an auth request
- feat: Allow filtering in ConstantConverter based on type
- fix: Allow clients to be remembered in the SessionHttpHandler
- fix: Convert data to SparqlDataAccessor in regex config
- fix(deps): update dependency @solid/access-token-verifier to ^0.12.0
v1.0.0 - 2021-08-04
v1.0.0-beta.2 - 2021-07-30
- feat: Allow registration to be disabled
- feat: Prevent access to internal storage containers
- feat: Cache static assets.
- feat: Update ExtensionBasedMapper custom types
- docs: Make registration form self-explanatory.
- fix: Trust X-Forwarded headers in the IDP
- fix: Prevent cyclical dependency with locker and storage
- fix: Use memory key/value storage for sparql backends
- fix: Expose WAC-Allow via CORS.
- fix: Expose Link via CORS.
v1.0.0-beta.1 - 2021-07-23
- feat: Support metadata in multiple graphs
- feat: Allow HttpErrors to store cause and errorCode
- feat: Convert errorCodes using markdown
- feat: Add IndexRepresentationStore to support index resources
- feat: Style main template.
- refactor: Match IDP templates to main template.
- feat: Render Markdown documents as HTML.
- feat: Add HTML container listing.
- feat: Add support for client_id WebIDs
- fix: Use #me for WebID generation
- fix: Fix incorrect path in https example config
- fix: Always find the best path with ChainedConverter
- fix: Prevent generated metadata from being stored
- fix: Throw internal error with invalid ACL.
- fix: Make sure there is always a fallback for error handling
- fix: Remove the cache from the ChainedConverter
v1.0.0-beta.0 - 2021-06-29
- feat: Support creation of HTTPS server
- feat: Combine pod creation with IDP registration
- feat: Create ErrorHandler to convert errors to Representations
- feat: Add showStackTrace CLI variable
- feat: Create WWW-Authenticate metadata writer
- Expose constant Allow header
- feat: Add ErrorToHtmlConverter using templates
- fix: Support BGPs with variables in SPARQL UPDATE queries
- refactor: Move config templates to templates folder
- feat: Split preset configurations by feature
- feat: Remove /interaction/:uid from IDP URLs
- fix: Support missing type preferences in ChainedConverter
- fix: Add solid_oidc_supported to openid config
v0.9.0 - 2021-05-04
- feat: Add identity provider (#455)
- feat: Add redis based locking mechanism
- feat: enable more compact config props using type-scoped contexts
- feat: Update ChainedConverter to create dynamic paths
- feat: Expose AppRunner.run for easily serving from JS apps
- fix: Prevent CliRunner tests from outputting errors
- fix: Use HttpErrors instead of Errors
- fix: Prevent HttpRequest from being closed
- fix: Allow owners to edit their own profile
v0.8.1 - 2021-03-23
- fix: Make new pod profile card public
- fix: Fix issue when there are multiple values for the same CLI parameter
v0.8.0 - 2021-03-04
- feat: Static favicon asset
- feat: Introduce internal storing mechanism
- feat: Create GreedyReadWriteLocker using read/write locking algorithm
- feat: Introduce generic auxiliary resource support
- feat: Support auxiliary behaviour in DataAccessorBasedStore
- feat: Add WAC-Allow header when required
- feat: Emit container pub event on PUT.
- feat: Create SubdomainExtensionBasedMapper
- feat: Added resourceExists method to ResourceStore
- feat: Solid community server Docker image
- feat: Create pod manager for generating dynamic pods
- feat: Create KeyValueStorage with a JSON file backend
- fix: Error when unknown parameters are passed to the main executable
- feat: Replace express with native http module
- feat: Make stores return modified resources.
- change: Query string does not influence identifier.
- fix: Do not re-encode static assets. (#566)
- fix: Preserve query string in transformations.
- fix: Test error classes correctly
- fix: Close unpiped streams
- fix: Prevent race condition in OPTIONS call
- fix: Fix problem with piping streams for PATCH requests
- fix: Fixed bug with empty Accept headers and internal/quads bodies
- fix: Simply GuardedStream check
- fix: Prevent setRepresentation crash if there is no root container
- fix: Remove default root container from InMemoryDataAccessor
- test: Remove root folder creation from integration tests
- fix: Make mkdir recursive in FileDataAccessor
- fix: do not output filesystem container size
- Fix #621: acl:AuthenticatedAgent instead of foaf:AuthenticatedAgent
- fix: Allow non-variable BGP boedies in SPARQL updates
- Correctly handle slugs in POST requests
- fix: Update faulty token verifier
- fix: SPARQL PATCH Content Type
- fix: SPARQL body parser test content type metadata
v0.7.0 - 2021-01-28
- feat: Update config to include LockingResourceStore
- feat: Add ConstantMetadataWriter.
- feat: Set MS-Author-Via header.
- feat: Set Accept-Patch header.
- feat: Add acl link header writer
- feat: Add ParallelHandler.
- feat: Support folders in StaticAssetHandler.
- feat: Update ResourceLocker interface
- feat: Update WrappedExpiringResourceLocker to new interface
- fix: Remove locking from the SparqlUpdatePatchHandler
- feat: Update LockingResourceStore to use new locking interface
v0.6.0 - 2021-01-21
- feat: Export UnsecureConstantCredentialsExtractor.
- feat: Add IfNeededConverter and PassthroughConverter.
- feat: Support composite PATCH updates
- Add optional path and url suffixes to FixedContentTypeMapper
- feat: Implement UnsupportedAsyncHandler.
- feat: Add ConstantConverter.
- feat: Set Vary header.
- feat: Add StaticAssetHandler.
- feat: Add placeholders for static assets to configuration.
v0.4.1 - 2021-01-13
- feat: Only convert when needed.
- feat: Add BaseResourceStore.
- fix: Update acl authorizer to make write rights imply append rights
- feat: Add transformSafely.
- refactor: Make request related handle calls consistent
- feat: Store target identifier when parsing metadata
- fix: Use base IRI when parsing SPARQL update queries
- feat: Add Content-Type constructor to metadata.
- feat: Add BasicRepresentation.
- feat: Use ldp: prefix in container representations.
- fix: Prevent POST BasicRequestParserests from creating intermediate containers
- fix: Don't get normalized metadata for root containers
- fix: Take baseIRI into account when calling parseQuads
- test: Move diamond identifier test to ldp handler tests
- fix: Generalize typing on pushQuad.
- fix: Allow Content-Type: 0 on GET.
- fix: Always keep guarded error listener attached
v0.4.0 - 2021-01-06
- feat: Create new resources when patching
- feat: Add read-only store.
- feat: Create ContainerManager for containing container conventions
- feat: Add constant WebID extractor.
- feat: Initialize root containers with RootContainerInitializer
- feat: ExtensionBasedMapper no longer throws if there is no file
- feat: Support .meta files for pod provisioning
- feat: Add pod template to indicate storage
- feat: Add RecordObject.
- feat: Bearer token support
- feat: Add extra logging for root container creation.
- feat: Add mainModulePath and globalModules CLI flags.
- feat: Improve path logging.
- feat: Expose UriConstants.
- feat: Expose ConversionUtil.
- feat: Expose ContentTypes.
- feat: Expose GuardedStream.
- feat: Support strings in addQuad.
- feat: Expose UriUtil.
- feat: Incorporate server-side representation quality.
- feat: Validate Accept-DateTime.
- feat: Allow querying metadata.
- feat: Support writer prefixes.
- refactor: Split off AclInitializer.
- refactor: Split off LoggerInitializer.
- refactor: Split off ServerInitializer.
- refactor: Remove Setup.
- change: Refactor AllVoidCompositeHandler into SequenceHandler.
- change: Rename FirstCompositeHandler into WaterfallHandler.
- change: Make RepresentationMetadata accept a ResourceIdentifier.
- refactor: Replace getParentContainer util function with ContainerManager
- refactor: Also create named nodes for vocabularies.
- refactor: Rename UriUtil into TermUtil.
- refactor: Use record for representation preference.
- refactor: Rename RepresentationPreference into ValuePreferences.
- fix: Only set content-type for documents in sparql store
- fix: Allow quad data for containers
- fix: Do not write error if response already started.
- fix: Allow overwriting and deleting root container in SparqlDataAccessor
- fix: Allow deletion of root in InMemoryDataAccessor
- fix: Allow DataAccessorBasedStore to create root
- fix: Remove metadata content-type assumption from FileDataAccessor
- fix: Remove metadata content-type assumption from QuadUtil
- fix: Only check relevant type triples
- fix: Execute only one main handler.
- fix: Prevent deletion of root storage containers
- fix: Remove faulty no-routing configuration.
- fix: Expose Location header via CORS.
- fix: Export all errors.
- fix: Distinguish instantiation and initialization errors.
- fix: Ensure root file path is absolute.
- fix: Emit all guarded errors to all listeners.
- fix: Sort preferences by descending weight.
- fix: Allow credentials over CORS.
- fix: Join and normalize paths consistently.
- fix: Prefer Turtle as default content type.
v0.3.0 - 2020-12-03
- feat: Store status, body and metadata in ResponseDescription
- feat: Create MetadataSerializer
- feat: Reject unacceptable content types
- feat: Make internal/quads unacceptable output
- feat: Implement ExpiringLock and -ResourceLocker
- feat: Add a monitoring store.
- feat: Add WebSocket functionality to server.
- feat: Implement the Solid WebSocket protocol.
- feat: Include parent containers in POST and DELETE changes.
- feat: Advertise WebSocket via Updates-Via header.
- feat: Create function to wrap streams to not lose errors
- feat: Export WebSocket classes.
- feat: Wire up WebSockets.
- feat: Add DPoPWebIdExtractor.
- feat: Add patch logging.
- feat: Make HeaderHandler customizable.
- feat: Make CorsHandler customizable.
- feat: Expose Updates-Via header via CORS.
- feat: Implement --baseUrl flag.
- feat: Add LDP request logging.
- feat: Support the Forwarded header.
- feat: create PodHttpHandler with default interfaces
- feat: add implementations of pod-related interfaces
- feat: add template based data generator
- feat: integrate pod creation
- refactor: Create multiple composite handlers
- refactor: Make piping consistent
- refactor: Remove identifier parameter
- refactor: Clean up utility functions
- refactor: Add isContainerPath function
- refactor: Add ExpressHttpServerFactory.
- refactor: move ExtensionBasedMapper into mapping directory
- refactor: abstract parts of ExtensionBasedMapper into MapperUtil
- change: use isContainerIdentifier in FixedContentTypeMapper
- refactor: Move lock stuff in its own folder
- change: Drop Node 10 support.
- change: Make credential extractors specialized.
- change: Do not warn in canHandle.
- change: Increase logging level of lock expiry.
- refactor: Separate middleware from Express.
- change: Move WebSocketAdvertiser to middleware.
- refactor: Refactor runCli to take optional arguments.
- fix: Integrate wrapStreamError to prevent uncaught errors
- fix: Correctly handle acl behaviour for acl identifiers
- fix: Update quad converter config parameters
- fix: Rename UnsupportedHttpError into BadRequestError.
- fix: Always release lock when patching
- fix: Create container data before adding content-type
- fix: Do not generate empty INSERT graph.
- fix: Do not overwrite existing root ACL.
v0.2.0 - 2020-11-05
- feat: Expose types
- feat: Implement resource mapper for the file resource store (#142)
- feat: More integration tests and test configs (#154)
- feat: Update RepresentationMetadata to store triples
- feat: Add logging
- feat: Implement HEAD request support
- feat: Have ExtensionBasedMapper handle extensions correctly
- feat: Decode URI in target extractor
- feat: Create MetadataHandler
- feat: Integrate MetadataHandler
- feat: Add support for mocking fs
- feat: Create DataAccessorBasedStore to have a standard store implementation
- feat: Create file-based DataAccessor
- feat: Add DataAccessorBasedStore integration
- feat: Create InMemoryDataAccessor
- feat: Fully support storing content-type in file extensions
- feat: Implement SPARQL-based ResourceStore
- feat: Support SPARQL store backends
- feat: Update RepresentationConvertingStore to convert incoming data
- feat: Implement a first draft of the RoutingResourceStore
- feat: Create a RoutingResourceStore that takes routing rules
- feat: Create multiple configs supporting different store backends
- feat: Create routing configs and partially clean up config structure
- refactor: Rename BasePermissionsExtractor to MethodPermissionsExtractor
- refactor: Simplify MethodPermissionsExtractor
- refactor: More precise error messages
- refactor: Make PassthroughStore generic
- chore: update to componentsjs-generator with generics support
- refactor: Remove RuntimeConfig in favor of config variables, Closes #106
- refactor: Streamline RepresentationMetadata interface
- refactor: Make URI constants consistent
- refactor: Fix typo
- refactor: Update eslint related dependencies
- refactor: Apply naming-convention rules
- refactor: Rename UriUtil functions
- refactor: Remove Turtle to Quad and Quad to Turtle converters
- refactor: Move file related metadata to FileResourceStore
- refactor: Let caller decide which error pipeStreamAndErrors should throw
- refactor: Rename instances of data resource to document
- refactor: Remove file and in memory stores
- refactor: Make ExtensionBasedMapper only expose what is needed
- refactor: Implement empty canHandle on base class. (#289)
- chore: Organize tests (#292)
- chore: Use Jest recommended linting.
- refactor: Change constructor so it is supported by Components.js
- refactor: Change routing constructors to work with Components.js
- refactor: Change PreferenceSupport constructor to work with Components.js
- chore: Add docker npm scripts.
- chore: Enable/disable Docker testing with a flag.
- fix: metadata file error in FileResourceStore
- fix: Retain status codes when combining errors
- fix: Have AsyncHandlers only check what is necessary
- Fix typo.
- fix: Make sure all URI characters are correctly encoded
- fix: Fix test issues
- fix: Remove metadata file if no new metadata is stored
- fix: Provide full coverage for util functions
- fix: Correctly parse URL domain
- fix: Resolve duplicate error message and no trailing newline
- fix: Write tests and fix related bugs, refactor code
v0.1.1 - 2020-09-03
v0.1.0 - 2020-09-03
- feat: Send server identification
- feat: Integrate ChainedConverter into the server
- feat: Dynamically determine matching types in ChainedConverter
- feat: Create RepresentationConverter that chains other converters
- feat: allow custom config to be passed
- feat: Enable dependency injection with auto-generated components
- feat: add support for parsing more RDF formats using rdf-parse
- feat: Support link and slug headers in SimpleBodyParser
- feat: Move runtime config into dedicated component, Closes #67
- feat: Add file based ResourceStore (#52)
- feat: Add more extensive permission parsing support
- feat: Integrate acl with rest of server
- feat: Add acl support
- feat: Integrate data conversion with rest of server
- feat: Convert data from ResourceStore based on preferences
- feat: Specifiy constants in separate file
- feat: Integrate PATCH functionality
- feat: Add support for SPARQL updates on ResourceStores
- feat: Add OperationHandler for PATCH
- feat: Add BodyParser for SPARQL updates
- feat: Add lock functionality
- feat: Add prepare script
- feat: Set up server using express
- feat: Add coveralls support
- feat: Validate Accept* headers while parsing
- feat: Fully support Accept* headers
- feat: add simple response writer
- feat: add simple operation handlers
- feat: add simple resource store
- feat: add simple permissions related handlers
- feat: add response description interface
- feat: add simple request parser
- feat: add simple preference parser
- feat: add simple target extractor
- feat: add simple body parser
- feat: add request parsing related interfaces
- feat: add typed readable
- feat: Add README with architecture links
- feat: add AuthenticatedLdpHandler
- feat: add FirstCompositeHandler to support multiple handlers
- feat: add custom errors
- feat: add additional supported interfaces
- Initial configuration