diff --git a/404.html b/404.html index f7992c1..28fdcbc 100644 --- a/404.html +++ b/404.html @@ -1 +1 @@ -404: This page could not be found

404

This page could not be found.

\ No newline at end of file +404: This page could not be found

404

This page could not be found.

\ No newline at end of file diff --git a/_next/data/nfGNNmx_-8nDmKJQe29fQ/docs/quick-start/infrastructure/cloudformation.json b/_next/data/0Akm0Byol70cG45xa-hSt/docs/quick-start/infrastructure/cloudformation.json similarity index 100% rename from _next/data/nfGNNmx_-8nDmKJQe29fQ/docs/quick-start/infrastructure/cloudformation.json rename to _next/data/0Akm0Byol70cG45xa-hSt/docs/quick-start/infrastructure/cloudformation.json diff --git a/_next/data/nfGNNmx_-8nDmKJQe29fQ/docs/quick-start/infrastructure/terraform.json b/_next/data/0Akm0Byol70cG45xa-hSt/docs/quick-start/infrastructure/terraform.json similarity index 100% rename from _next/data/nfGNNmx_-8nDmKJQe29fQ/docs/quick-start/infrastructure/terraform.json rename to _next/data/0Akm0Byol70cG45xa-hSt/docs/quick-start/infrastructure/terraform.json diff --git a/_next/static/nfGNNmx_-8nDmKJQe29fQ/_buildManifest.js b/_next/static/0Akm0Byol70cG45xa-hSt/_buildManifest.js similarity index 100% rename from _next/static/nfGNNmx_-8nDmKJQe29fQ/_buildManifest.js rename to _next/static/0Akm0Byol70cG45xa-hSt/_buildManifest.js diff --git a/_next/static/nfGNNmx_-8nDmKJQe29fQ/_ssgManifest.js b/_next/static/0Akm0Byol70cG45xa-hSt/_ssgManifest.js similarity index 100% rename from _next/static/nfGNNmx_-8nDmKJQe29fQ/_ssgManifest.js rename to _next/static/0Akm0Byol70cG45xa-hSt/_ssgManifest.js diff --git a/about.html b/about.html index e70c5e6..fe07da3 100644 --- a/about.html +++ b/about.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 209deg; --nextra-primary-saturation: 100%; } -

About

+
\ No newline at end of file +

Serverless IIIF is available under the Apache 2.0 license.

\ No newline at end of file diff --git a/docs.html b/docs.html index aafb942..bfaeaab 100644 --- a/docs.html +++ b/docs.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 209deg; --nextra-primary-saturation: 100%; } -
Documentation
Introduction

serverless-iiif

+
Documentation
Introduction

serverless-iiif

Description

A cost-effective, infinitely scalable IIIF 2.1 (opens in a new tab) and 3.0 (opens in a new tab) image API compliant service packaged as an AWS Serverless Application (opens in a new tab) with minimum setup and no maintenance. Suitable for large institutional collections or small digital humanities projects.

@@ -29,4 +29,4 @@

💡

Note: The Lambda Function will be granted read access to this bucket.

License

-

serverless-iiif is available under the Apache 2.0 license.

\ No newline at end of file +

serverless-iiif is available under the Apache 2.0 license.

Options
\ No newline at end of file diff --git a/docs/advanced-usage/cors.html b/docs/advanced-usage/cors.html index 888307f..f2c5ebd 100644 --- a/docs/advanced-usage/cors.html +++ b/docs/advanced-usage/cors.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 209deg; --nextra-primary-saturation: 100%; } -
Documentation
Advanced Usage
Cross-Origin Request Sharing (CORS)

Cross-Origin Request Sharing (CORS)

+
Documentation
Advanced Usage
Cross-Origin Request Sharing (CORS)

Cross-Origin Request Sharing (CORS)

For security reasons, web browsers have built in limits on what sort of requests can be made to a given domain from a page hosted under a different domain. Since this is a common use case for IIIF (resources embedded in pages whose domains differ from that of the server), IIIF interactions are particularly susceptible to these limits.

The mechanism for determining which of these requests should be allowed or blocked is known as Cross-Origin Resource Sharing, or CORS (opens in a new tab). A full explanation of CORS is beyond the scope of this project, but the SAM deploy template contains five parameters relating to how the IIIF server handles CORS:

    @@ -21,4 +21,4 @@
  • CorsExposeHeaders contains the value that will be returned in the Access-Control-Expose-Headers response header.
  • CorsMaxAge contains the value that will be returned in the Access-Control-Max-Age response header.
-

The default values will work in most circumstances, but if you need the IIIF server to accept requests that include credentials or other potentially sensitive information (e.g., Authorization and/or Cookie headers), you'll need to set CorsAllowOrigin to REFLECT_ORIGIN and CorsAllowCredentials to true. Other settings allow further customization.

\ No newline at end of file +

The default values will work in most circumstances, but if you need the IIIF server to accept requests that include credentials or other potentially sensitive information (e.g., Authorization and/or Cookie headers), you'll need to set CorsAllowOrigin to REFLECT_ORIGIN and CorsAllowCredentials to true. Other settings allow further customization.

\ No newline at end of file diff --git a/docs/advanced-usage/request-response-functions.html b/docs/advanced-usage/request-response-functions.html index c38b1e8..123c1e5 100644 --- a/docs/advanced-usage/request-response-functions.html +++ b/docs/advanced-usage/request-response-functions.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 209deg; --nextra-primary-saturation: 100%; } -
Documentation
Advanced Usage
Request Response Functions

Request/Response Functions

+
Documentation
Advanced Usage
Request Response Functions

Request/Response Functions

The IIIF service can be heavily customized through the use of CloudFront Functions (opens in a new tab) or Lambda@Edge Functions (opens in a new tab) attached to a CloudFront distribution in front of the service. It's important to understand the four stages of CloudFront processing in order to know where a given type of customization belongs.

  • A viewer-request function will be called on every request, cached or not. This is the appropriate place to attach @@ -56,4 +56,4 @@
    { width: 2048, height: 1536, limit: 480 }

The limit calculator will keep going until both dimensions are less than the limit, not less than or equal to. So a limit: 512 on the third example above would generate a fourth page at { width: 256, height: 192 }.

-
💡

If you plan to use CloudFront functions to add either of the above x-preflight- headers to incoming requests, you must set the value of the Preflight parameter to true when deploying serverless-iiif. The function will only look for the preflight headers if this environment variable is true. This prevents requests from including those headers directly if no preflight function is present. If you do use a preflight function, make sure it strips out any x-preflight-location and x-preflight-dimensions headers that it doesn't set itself.

\ No newline at end of file +
💡

If you plan to use CloudFront functions to add either of the above x-preflight- headers to incoming requests, you must set the value of the Preflight parameter to true when deploying serverless-iiif. The function will only look for the preflight headers if this environment variable is true. This prevents requests from including those headers directly if no preflight function is present. If you do use a preflight function, make sure it strips out any x-preflight-location and x-preflight-dimensions headers that it doesn't set itself.

\ No newline at end of file diff --git a/docs/communities/iiif.html b/docs/communities/iiif.html index d3e0d15..697ee12 100644 --- a/docs/communities/iiif.html +++ b/docs/communities/iiif.html @@ -11,4 +11,4 @@ --nextra-primary-hue: 209deg; --nextra-primary-saturation: 100%; } -
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/communities/samvera.html b/docs/communities/samvera.html index 4a39167..96b5e92 100644 --- a/docs/communities/samvera.html +++ b/docs/communities/samvera.html @@ -11,4 +11,4 @@ --nextra-primary-hue: 209deg; --nextra-primary-saturation: 100%; } -
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/contributors.html b/docs/contributors.html index c94a40a..26ec311 100644 --- a/docs/contributors.html +++ b/docs/contributors.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 209deg; --nextra-primary-saturation: 100%; } -
Documentation
Contributors

Contributors

+
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/custom-sharp-layer.html b/docs/custom-sharp-layer.html index a06efd7..2759e78 100644 --- a/docs/custom-sharp-layer.html +++ b/docs/custom-sharp-layer.html @@ -11,6 +11,6 @@ --nextra-primary-hue: 209deg; --nextra-primary-saturation: 100%; } -
Documentation
Custom Sharp Layer

Custom Sharp Layer

+
\ No newline at end of file +

You can build your own local version using that code and then deploy your own layer and set that layer in your SAM template.

\ No newline at end of file diff --git a/docs/how-to-contribute.html b/docs/how-to-contribute.html index f29d457..8109169 100644 --- a/docs/how-to-contribute.html +++ b/docs/how-to-contribute.html @@ -11,6 +11,6 @@ --nextra-primary-hue: 209deg; --nextra-primary-saturation: 100%; } -
Documentation
Guide

How to Contribute?

+
Documentation
Guide

How to Contribute?

If you're working on a PR (opens in a new tab) for this project, create a feature branch off of main.

-

This repository follows the Samvera Community Code of Conduct (opens in a new tab) and language recommendations (opens in a new tab). Please do not create a branch called master for this repository or as part of your pull request; the branch will either need to be removed or renamed before it can be considered for inclusion in the code base and history of this repository.

\ No newline at end of file +

This repository follows the Samvera Community Code of Conduct (opens in a new tab) and language recommendations (opens in a new tab). Please do not create a branch called master for this repository or as part of your pull request; the branch will either need to be removed or renamed before it can be considered for inclusion in the code base and history of this repository.

\ No newline at end of file diff --git a/docs/notes.html b/docs/notes.html index 830d15a..9058342 100644 --- a/docs/notes.html +++ b/docs/notes.html @@ -11,5 +11,5 @@ --nextra-primary-hue: 209deg; --nextra-primary-saturation: 100%; } -
Documentation
Notes

Notes

-

serverless-iiif takes advantage of AWS Lambda URLs' streaming response (opens in a new tab) functionality to overcome the 6MB response limit that previous versions were subject to. Instead of a hard limit of 6MB, there is now a soft limit of approximately 20MB for each response. This limit can be adjusted by opening a support ticket with AWS requesting a quota increase. In addition, the streaming rate for the first 6MB of each response is uncapped; data over 6MB is capped at 2MB/s.

\ No newline at end of file +
Documentation
Notes

Notes

+

serverless-iiif takes advantage of AWS Lambda URLs' streaming response (opens in a new tab) functionality to overcome the 6MB response limit that previous versions were subject to. Instead of a hard limit of 6MB, there is now a soft limit of approximately 20MB for each response. This limit can be adjusted by opening a support ticket with AWS requesting a quota increase. In addition, the streaming rate for the first 6MB of each response is uncapped; data over 6MB is capped at 2MB/s.

\ No newline at end of file diff --git a/docs/quick-start.html b/docs/quick-start.html index 3af6d51..da0f8bf 100644 --- a/docs/quick-start.html +++ b/docs/quick-start.html @@ -11,4 +11,4 @@ --nextra-primary-hue: 209deg; --nextra-primary-saturation: 100%; } -
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/quick-start/deleting-the-app.html b/docs/quick-start/deleting-the-app.html index dc65c89..5331aa7 100644 --- a/docs/quick-start/deleting-the-app.html +++ b/docs/quick-start/deleting-the-app.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 209deg; --nextra-primary-saturation: 100%; } -
Documentation
Quick Start
Deleting the App

Deleting the application

+
Documentation
Quick Start
Deleting the App

Deleting the application

If you deployed the application on its own, the easiest way to delete the application is either from the Lambda Applications Console (opens in a new tab) or by deleting its CloudFormation Stack (opens in a new tab).

If you deployed from the command line, you can also use the npm run delete command.

-

If you deployed using an infrastructure tool such as AWS CloudFormation or Terraform, you should use that tool's destroy/teardown functionality to remove the IIIF stack as well.

\ No newline at end of file +

If you deployed using an infrastructure tool such as AWS CloudFormation or Terraform, you should use that tool's destroy/teardown functionality to remove the IIIF stack as well.

\ No newline at end of file diff --git a/docs/quick-start/deployment-command-line.html b/docs/quick-start/deployment-command-line.html index 18fa113..ceaeb3d 100644 --- a/docs/quick-start/deployment-command-line.html +++ b/docs/quick-start/deployment-command-line.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 209deg; --nextra-primary-saturation: 100%; } -
Documentation
Quick Start
Deploying via the Command Line

Deploying via the Command Line

+
Documentation
Quick Start
Deploying via the Command Line

Deploying via the Command Line

Prerequisites

  • Docker (opens in a new tab)
  • @@ -22,4 +22,4 @@

    $ npm run deploy-guided # To deploy using the current configuration, prompting only for changeset confirmation -$ npm run deploy

If you use the guided deploy, you'll be prompted for various configuration parameters, confirmations, and acknowledgments of specific issues (particularly the creation of IAM resources and the deployment of an open/unauthenticated Lambda Function URL). Otherwise, you'll simply be asked to confirm the calculated changeset.

Step 6

Follow the prompts to complete the deployment process and get the resulting endpoint.

\ No newline at end of file +$ npm run deploy

If you use the guided deploy, you'll be prompted for various configuration parameters, confirmations, and acknowledgments of specific issues (particularly the creation of IAM resources and the deployment of an open/unauthenticated Lambda Function URL). Otherwise, you'll simply be asked to confirm the calculated changeset.

Step 6

Follow the prompts to complete the deployment process and get the resulting endpoint.

Deploying via the AWS Serverless Application RepositoryIntroduction
\ No newline at end of file diff --git a/docs/quick-start/deployment-sam.html b/docs/quick-start/deployment-sam.html index 22e69c4..51ed8df 100644 --- a/docs/quick-start/deployment-sam.html +++ b/docs/quick-start/deployment-sam.html @@ -11,11 +11,11 @@ --nextra-primary-hue: 209deg; --nextra-primary-saturation: 100%; } -
Documentation
Quick Start
Deploying via the AWS Serverless Application Repository

Deploying via the AWS Serverless Application Repository

+
Documentation
Quick Start
Deploying via the AWS Serverless Application Repository

Deploying via the AWS Serverless Application Repository

serverless-iiif is distributed and deployed via the AWS Serverless Application Repository (opens in a new tab). To deploy it using the AWS Console:

Step 1

Find the serverless-iiif application (opens in a new tab) in the AWS Serverless Application Repository.

Step 2

Make sure your currently selected region (in the console's top navigation bar) is the one you want to deploy to.

Step 3

Scroll down to the Application settings section.

Step 4

Configure the deploy template:

  • Give your stack a unique Application name
  • Enter the name of the SourceBucket the service will serve images from
  • Check the box acknowledging that the app will create a custom IAM roles and resource policies (and if deploying the Caching version, that it will also deploy a nested application)
  • Optional: Enter or change any other parameters that apply to your desired configuration.
  • -

Step 5

Click Deploy.

Step 6

When all the resources are properly created and configured, the new stack should be in the CREATE_COMPLETE stage. If there's an error, it will delete all the resources it created, roll back any changes it made, and eventually reach the ROLLBACK_COMPLETE stage.

Step 7

Click the CloudFormation stack link.

Step 8

Click the Outputs tab to see (and copy) the IIIF Endpoint URL.

\ No newline at end of file +

Step 5

Click Deploy.

Step 6

When all the resources are properly created and configured, the new stack should be in the CREATE_COMPLETE stage. If there's an error, it will delete all the resources it created, roll back any changes it made, and eventually reach the ROLLBACK_COMPLETE stage.

Step 7

Click the CloudFormation stack link.

Step 8

Click the Outputs tab to see (and copy) the IIIF Endpoint URL.

\ No newline at end of file diff --git a/docs/quick-start/infrastructure.html b/docs/quick-start/infrastructure.html index df77fad..819a71b 100644 --- a/docs/quick-start/infrastructure.html +++ b/docs/quick-start/infrastructure.html @@ -11,5 +11,5 @@ --nextra-primary-hue: 209deg; --nextra-primary-saturation: 100%; } -
Documentation
Quick Start
Deploying via Infrastructure Tools
Introduction

Deploying via Infrastructure Tools

-

You will most likely want to deploy serverless-iiif as part of a larger infrastructure stack. This stack might include a caching layer (AWS CloudFront), functions to customize the services behavior, a custom domain name, and more. This section provides documentation and examples of how to deploy the service using AWS CloudFormation or Terraform.

\ No newline at end of file +
Documentation
Quick Start
Deploying via Infrastructure Tools
Introduction

Deploying via Infrastructure Tools

+

You will most likely want to deploy serverless-iiif as part of a larger infrastructure stack. This stack might include a caching layer (AWS CloudFront), functions to customize the services behavior, a custom domain name, and more. This section provides documentation and examples of how to deploy the service using AWS CloudFormation or Terraform.

\ No newline at end of file diff --git a/docs/quick-start/infrastructure/cloudformation.html b/docs/quick-start/infrastructure/cloudformation.html index 3e4d584..1a42f4e 100644 --- a/docs/quick-start/infrastructure/cloudformation.html +++ b/docs/quick-start/infrastructure/cloudformation.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 209deg; --nextra-primary-saturation: 100%; } -
Documentation
Quick Start
Deploying via Infrastructure Tools
AWS CloudFormation

Installing serverless-iiif as part of a CloudFormation (opens in a new tab) template makes it easy to integrate the service with other components. Please refer to the example and the CloudFormation documentation (opens in a new tab) for more information on how you might tailor these templates to your own needs and deploy them to AWS.

+
Documentation
Quick Start
Deploying via Infrastructure Tools
AWS CloudFormation

Installing serverless-iiif as part of a CloudFormation (opens in a new tab) template makes it easy to integrate the service with other components. Please refer to the example and the CloudFormation documentation (opens in a new tab) for more information on how you might tailor these templates to your own needs and deploy them to AWS.

Syntax

To declare this entity in your AWS CloudFormation template, use the following syntax:

Type: AWS::Serverless::Application
@@ -149,4 +149,4 @@ 

Value: !Ref CachingEndpoint Export: Name: !Sub "${AWS::StackName}:DistributionId" -

\ No newline at end of file +
IntroductionTerraform
\ No newline at end of file diff --git a/docs/quick-start/infrastructure/terraform.html b/docs/quick-start/infrastructure/terraform.html index 398253c..6375703 100644 --- a/docs/quick-start/infrastructure/terraform.html +++ b/docs/quick-start/infrastructure/terraform.html @@ -11,8 +11,8 @@ --nextra-primary-hue: 209deg; --nextra-primary-saturation: 100%; } -
Documentation
Quick Start
Deploying via Infrastructure Tools
Terraform

The serverless-iiif GitHub repository includes a Terraform Module (opens in a new tab) that can be used as a drop-in component in any +

Documentation
Quick Start
Deploying via Infrastructure Tools
Terraform

The serverless-iiif GitHub repository includes a Terraform Module (opens in a new tab) that can be used as a drop-in component in any Terraform manifest. Please refer to the documentation and examples below, as well as the Terraform documentation (opens in a new tab) for more information on how you might use these tools to deploy your own custom stack to AWS.

Required Inputs


These variables must be set in the module block when using this module.

source_bucket string

Description: Name of bucket containing source images

Optional Inputs


These variables have default values and don't have to be set to use this module. You may set these variables to override their default -values.

cors_allow_headers string

Description: Value of the CORS Access-Control-Allow-Headers response header

Default: *

cors_allow_origin string

Description: Value of the CORS Access-Control-Allow-Origin response header. Use the special value REFLECT_ORIGIN to copy the value from the Origin request header (required to emulate * for XHR requests using Authorization and/or Cookie headers).

Default: *

cors_expose_headers string

Description: Value of the CORS Access-Control-Expose-Headers response header

Default: cache-control,content-language,content-length,content-type,date,expires,last-modified,pragma

cors_max_age number

Description: Value of the CORS Access-Control-MaxAge response header

Default: 3600

force_host string

Description: Forced hostname to use in responses

Default: ""

iiif_lambda_memory number

Description: The memory provisioned for the lambda.

Default: 3008

iiif_lambda_timeout number

Description: The timeout for the lambda.

Default: 10

pixel_density number

Description: Hardcoded DPI/Pixel Density/Resolution to encode in output images

Default: 0

pyramid_limit number

Description: Smallest pyramid image dimension. Set to 0 to prevent server from auto-calculating pyramid page sizes.

Default: 256

resolver_template string

Description: A printf-style format string that determines the location of source image within the bucket given the image ID

Default: %s.tif

sharp_layer string

Description: ARN of a custom AWS Lambda Layer containing the sharp and libvips dependencies. Use the special value JP2 to use the managed JPEG2000-compatible layer, or INTERNAL to use the built-in dependencies (without JPEG2000 support).

Default: JP2

\ No newline at end of file +values.

cors_allow_headers string

Description: Value of the CORS Access-Control-Allow-Headers response header

Default: *

cors_allow_origin string

Description: Value of the CORS Access-Control-Allow-Origin response header. Use the special value REFLECT_ORIGIN to copy the value from the Origin request header (required to emulate * for XHR requests using Authorization and/or Cookie headers).

Default: *

cors_expose_headers string

Description: Value of the CORS Access-Control-Expose-Headers response header

Default: cache-control,content-language,content-length,content-type,date,expires,last-modified,pragma

cors_max_age number

Description: Value of the CORS Access-Control-MaxAge response header

Default: 3600

force_host string

Description: Forced hostname to use in responses

Default: ""

iiif_lambda_memory number

Description: The memory provisioned for the lambda.

Default: 3008

iiif_lambda_timeout number

Description: The timeout for the lambda.

Default: 10

pixel_density number

Description: Hardcoded DPI/Pixel Density/Resolution to encode in output images

Default: 0

pyramid_limit number

Description: Smallest pyramid image dimension. Set to 0 to prevent server from auto-calculating pyramid page sizes.

Default: 256

resolver_template string

Description: A printf-style format string that determines the location of source image within the bucket given the image ID

Default: %s.tif

sharp_layer string

Description: ARN of a custom AWS Lambda Layer containing the sharp and libvips dependencies. Use the special value JP2 to use the managed JPEG2000-compatible layer, or INTERNAL to use the built-in dependencies (without JPEG2000 support).

Default: JP2

AWS CloudFormationDeleting the App
\ No newline at end of file diff --git a/docs/source-images.html b/docs/source-images.html index 0d22c56..574ea94 100644 --- a/docs/source-images.html +++ b/docs/source-images.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 209deg; --nextra-primary-saturation: 100%; } -
Documentation
Source Images

Source Images

+
Documentation
Source Images

Source Images

The S3 key of any given file, minus the extension, is its IIIF ID. For example, if you want to access the image manifest for the file at abcdef.tif, you would get https://.../iiif/2/abcdef/info.json. If your key contains slashes, they must be URL-encoded: e.g., ab/cd/ef/gh.tif would be at https://.../iiif/2/ab%2Fcd%2Fef%2Fgh/info.json. (This limitation could easily be fixed by encoding only the necessary slashes in the incoming URL before handing it off to the IIIF processor, but that's beyond the scope of the demo.)

iiif-processor can use any image format natively supported by libvips (opens in a new tab), including JPEG 2000 (.jp2), but best results will come from using tiled, multi-resolution TIFFs. The Lambda Function wrapper included in this application assumes a .tif extension unless you set ResolverTemplate in your .env file.

⚠️

Some versions of libvips and libjpeg have an issue with JPEG-compressed pyramidal TIFF images that include more than 3 channels (e.g., @@ -28,4 +28,4 @@

&& vips tiffsave temp_image.v output_image.tif --tile --pyramid --compression jpeg --tile-width 256 --tile-height 256 \ && rm temp_image.v

Using ImageMagick

-
convert source_image.tif -alpha off -define tiff:tile-geometry=256x256 -compress jpeg 'ptif:output_image.tif'
\ No newline at end of file +
convert source_image.tif -alpha off -define tiff:tile-geometry=256x256 -compress jpeg 'ptif:output_image.tif'
\ No newline at end of file diff --git a/docs/testing.html b/docs/testing.html index 8849d9d..f6005b3 100644 --- a/docs/testing.html +++ b/docs/testing.html @@ -11,8 +11,8 @@ --nextra-primary-hue: 209deg; --nextra-primary-saturation: 100%; } -
Documentation
Testing

Testing

+
Documentation
Testing

Testing

If tests are run locally they will start in "watch" mode. If a CI environment is detected they will only run once. From the project root run:

npm test

To generate a code coverage report run:

-
npm test --coverage
\ No newline at end of file +
npm test --coverage
\ No newline at end of file diff --git a/index.html b/index.html index 85b8ab8..92a70a2 100644 --- a/index.html +++ b/index.html @@ -11,4 +11,4 @@ --nextra-primary-hue: 209deg; --nextra-primary-saturation: 100%; } -

Fast, zoomable images without servers

A cost-effective, infinitely scalable IIIF Image API v2.1 and v3.0 compliant service packaged as an AWS Serverless Application with minimum setup and no maintenance. Suitable for large institutional collections or small digital humanities projects.
Community Driven. Open Source.

Deploy Now  Read the Docs IIIF Image API
\ No newline at end of file +

Fast, zoomable images without servers

A cost-effective, infinitely scalable IIIF Image API v2.1 and v3.0 compliant service packaged as an AWS Serverless Application with minimum setup and no maintenance. Suitable for large institutional collections or small digital humanities projects.
Community Driven. Open Source.

Deploy Now  Read the Docs IIIF Image API
\ No newline at end of file