From fe1291cf4b44e9ca9d970a3ebd6b056f0f1a3cd2 Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Thu, 3 Nov 2022 08:55:51 -0600
Subject: [PATCH 01/12] rename

---
 .../{models => }/calc/exceedance-model.util.ts      |  0
 src/nshmp-lib/{models => }/calc/index.ts            |  0
 src/nshmp-lib/{models => }/calc/maths.util.ts       |  0
 src/nshmp-lib/{models => }/data/index.ts            |  0
 .../{models => }/data/uncertainty-model.model.ts    |  0
 .../{models => }/data/xy-sequence.model.ts          |  0
 src/nshmp-lib/{models => }/geo/basin.model.ts       |  0
 src/nshmp-lib/{models => }/geo/index.ts             |  0
 src/nshmp-lib/{models => }/geo/region.model.ts      |  0
 src/nshmp-lib/{models => }/geo/site.model.ts        |  0
 src/nshmp-lib/{models => }/gmm/gmm-input.model.ts   |  0
 src/nshmp-lib/{models => }/gmm/gmm.model.ts         |  0
 src/nshmp-lib/{models => }/gmm/imt.model.ts         |  0
 src/nshmp-lib/{models => }/gmm/index.ts             |  0
 .../{models => }/gmm/nehrp-site-class.model.ts      |  0
 src/nshmp-lib/{models => }/gmm/rate-type.model.ts   |  0
 src/nshmp-lib/index.ts                              | 13 +++++--------
 src/nshmp-lib/model/index.ts                        |  4 ++++
 src/nshmp-lib/{models => }/model/mfd.ts             |  8 ++++----
 src/nshmp-lib/{models => }/model/models.ts          |  0
 src/nshmp-lib/{models => }/model/source-type.ts     |  0
 .../{models => }/model/tectonic-setting.ts          |  0
 src/nshmp-lib/models/model/index.ts                 |  4 ----
 src/nshmp-lib/nshm/index.ts                         |  2 ++
 src/nshmp-lib/{models => nshm}/nshm-region.model.ts |  0
 src/nshmp-lib/{models => nshm}/nshm.model.ts        |  0
 26 files changed, 15 insertions(+), 16 deletions(-)
 rename src/nshmp-lib/{models => }/calc/exceedance-model.util.ts (100%)
 rename src/nshmp-lib/{models => }/calc/index.ts (100%)
 rename src/nshmp-lib/{models => }/calc/maths.util.ts (100%)
 rename src/nshmp-lib/{models => }/data/index.ts (100%)
 rename src/nshmp-lib/{models => }/data/uncertainty-model.model.ts (100%)
 rename src/nshmp-lib/{models => }/data/xy-sequence.model.ts (100%)
 rename src/nshmp-lib/{models => }/geo/basin.model.ts (100%)
 rename src/nshmp-lib/{models => }/geo/index.ts (100%)
 rename src/nshmp-lib/{models => }/geo/region.model.ts (100%)
 rename src/nshmp-lib/{models => }/geo/site.model.ts (100%)
 rename src/nshmp-lib/{models => }/gmm/gmm-input.model.ts (100%)
 rename src/nshmp-lib/{models => }/gmm/gmm.model.ts (100%)
 rename src/nshmp-lib/{models => }/gmm/imt.model.ts (100%)
 rename src/nshmp-lib/{models => }/gmm/index.ts (100%)
 rename src/nshmp-lib/{models => }/gmm/nehrp-site-class.model.ts (100%)
 rename src/nshmp-lib/{models => }/gmm/rate-type.model.ts (100%)
 create mode 100644 src/nshmp-lib/model/index.ts
 rename src/nshmp-lib/{models => }/model/mfd.ts (73%)
 rename src/nshmp-lib/{models => }/model/models.ts (100%)
 rename src/nshmp-lib/{models => }/model/source-type.ts (100%)
 rename src/nshmp-lib/{models => }/model/tectonic-setting.ts (100%)
 delete mode 100644 src/nshmp-lib/models/model/index.ts
 create mode 100644 src/nshmp-lib/nshm/index.ts
 rename src/nshmp-lib/{models => nshm}/nshm-region.model.ts (100%)
 rename src/nshmp-lib/{models => nshm}/nshm.model.ts (100%)

diff --git a/src/nshmp-lib/models/calc/exceedance-model.util.ts b/src/nshmp-lib/calc/exceedance-model.util.ts
similarity index 100%
rename from src/nshmp-lib/models/calc/exceedance-model.util.ts
rename to src/nshmp-lib/calc/exceedance-model.util.ts
diff --git a/src/nshmp-lib/models/calc/index.ts b/src/nshmp-lib/calc/index.ts
similarity index 100%
rename from src/nshmp-lib/models/calc/index.ts
rename to src/nshmp-lib/calc/index.ts
diff --git a/src/nshmp-lib/models/calc/maths.util.ts b/src/nshmp-lib/calc/maths.util.ts
similarity index 100%
rename from src/nshmp-lib/models/calc/maths.util.ts
rename to src/nshmp-lib/calc/maths.util.ts
diff --git a/src/nshmp-lib/models/data/index.ts b/src/nshmp-lib/data/index.ts
similarity index 100%
rename from src/nshmp-lib/models/data/index.ts
rename to src/nshmp-lib/data/index.ts
diff --git a/src/nshmp-lib/models/data/uncertainty-model.model.ts b/src/nshmp-lib/data/uncertainty-model.model.ts
similarity index 100%
rename from src/nshmp-lib/models/data/uncertainty-model.model.ts
rename to src/nshmp-lib/data/uncertainty-model.model.ts
diff --git a/src/nshmp-lib/models/data/xy-sequence.model.ts b/src/nshmp-lib/data/xy-sequence.model.ts
similarity index 100%
rename from src/nshmp-lib/models/data/xy-sequence.model.ts
rename to src/nshmp-lib/data/xy-sequence.model.ts
diff --git a/src/nshmp-lib/models/geo/basin.model.ts b/src/nshmp-lib/geo/basin.model.ts
similarity index 100%
rename from src/nshmp-lib/models/geo/basin.model.ts
rename to src/nshmp-lib/geo/basin.model.ts
diff --git a/src/nshmp-lib/models/geo/index.ts b/src/nshmp-lib/geo/index.ts
similarity index 100%
rename from src/nshmp-lib/models/geo/index.ts
rename to src/nshmp-lib/geo/index.ts
diff --git a/src/nshmp-lib/models/geo/region.model.ts b/src/nshmp-lib/geo/region.model.ts
similarity index 100%
rename from src/nshmp-lib/models/geo/region.model.ts
rename to src/nshmp-lib/geo/region.model.ts
diff --git a/src/nshmp-lib/models/geo/site.model.ts b/src/nshmp-lib/geo/site.model.ts
similarity index 100%
rename from src/nshmp-lib/models/geo/site.model.ts
rename to src/nshmp-lib/geo/site.model.ts
diff --git a/src/nshmp-lib/models/gmm/gmm-input.model.ts b/src/nshmp-lib/gmm/gmm-input.model.ts
similarity index 100%
rename from src/nshmp-lib/models/gmm/gmm-input.model.ts
rename to src/nshmp-lib/gmm/gmm-input.model.ts
diff --git a/src/nshmp-lib/models/gmm/gmm.model.ts b/src/nshmp-lib/gmm/gmm.model.ts
similarity index 100%
rename from src/nshmp-lib/models/gmm/gmm.model.ts
rename to src/nshmp-lib/gmm/gmm.model.ts
diff --git a/src/nshmp-lib/models/gmm/imt.model.ts b/src/nshmp-lib/gmm/imt.model.ts
similarity index 100%
rename from src/nshmp-lib/models/gmm/imt.model.ts
rename to src/nshmp-lib/gmm/imt.model.ts
diff --git a/src/nshmp-lib/models/gmm/index.ts b/src/nshmp-lib/gmm/index.ts
similarity index 100%
rename from src/nshmp-lib/models/gmm/index.ts
rename to src/nshmp-lib/gmm/index.ts
diff --git a/src/nshmp-lib/models/gmm/nehrp-site-class.model.ts b/src/nshmp-lib/gmm/nehrp-site-class.model.ts
similarity index 100%
rename from src/nshmp-lib/models/gmm/nehrp-site-class.model.ts
rename to src/nshmp-lib/gmm/nehrp-site-class.model.ts
diff --git a/src/nshmp-lib/models/gmm/rate-type.model.ts b/src/nshmp-lib/gmm/rate-type.model.ts
similarity index 100%
rename from src/nshmp-lib/models/gmm/rate-type.model.ts
rename to src/nshmp-lib/gmm/rate-type.model.ts
diff --git a/src/nshmp-lib/index.ts b/src/nshmp-lib/index.ts
index e05f6db..ea79905 100644
--- a/src/nshmp-lib/index.ts
+++ b/src/nshmp-lib/index.ts
@@ -1,8 +1,5 @@
-export * from './models/calc';
-export * from './models/data';
-export * from './models/geo';
-export * from './models/gmm';
-export * from './models/model';
-export * as model from './models/model';
-export * from './models/nshm.model';
-export * from './models/nshm-region.model';
+export * as calc from './calc';
+export * as data from './data';
+export * as geo from './geo';
+export * as model from './model';
+export * as nshm from './nshm';
diff --git a/src/nshmp-lib/model/index.ts b/src/nshmp-lib/model/index.ts
new file mode 100644
index 0000000..624e47b
--- /dev/null
+++ b/src/nshmp-lib/model/index.ts
@@ -0,0 +1,4 @@
+export * from './mfd';
+export * from './models';
+export * from './source-type';
+export * from './tectonic-setting';
diff --git a/src/nshmp-lib/models/model/mfd.ts b/src/nshmp-lib/model/mfd.ts
similarity index 73%
rename from src/nshmp-lib/models/model/mfd.ts
rename to src/nshmp-lib/model/mfd.ts
index 629dc0b..31e91f7 100644
--- a/src/nshmp-lib/models/model/mfd.ts
+++ b/src/nshmp-lib/model/mfd.ts
@@ -9,7 +9,7 @@ export enum MfdType {
   SINGLE = 'SINGLE',
 }
 
-export interface GutenbergRichter extends Properties {
+export interface GutenbergRichter extends MfdProperties {
   a: number;
   b: number;
   Δm: number;
@@ -19,14 +19,14 @@ export interface GutenbergRichter extends Properties {
 
 export interface Mfd {
   data: XySequence;
-  props: Properties;
+  props: MfdProperties;
 }
 
-export interface Properties {
+export interface MfdProperties {
   type: MfdType;
 }
 
-export interface Single extends Properties {
+export interface Single extends MfdProperties {
   m: number;
   rate: number;
 }
diff --git a/src/nshmp-lib/models/model/models.ts b/src/nshmp-lib/model/models.ts
similarity index 100%
rename from src/nshmp-lib/models/model/models.ts
rename to src/nshmp-lib/model/models.ts
diff --git a/src/nshmp-lib/models/model/source-type.ts b/src/nshmp-lib/model/source-type.ts
similarity index 100%
rename from src/nshmp-lib/models/model/source-type.ts
rename to src/nshmp-lib/model/source-type.ts
diff --git a/src/nshmp-lib/models/model/tectonic-setting.ts b/src/nshmp-lib/model/tectonic-setting.ts
similarity index 100%
rename from src/nshmp-lib/models/model/tectonic-setting.ts
rename to src/nshmp-lib/model/tectonic-setting.ts
diff --git a/src/nshmp-lib/models/model/index.ts b/src/nshmp-lib/models/model/index.ts
deleted file mode 100644
index 5b20569..0000000
--- a/src/nshmp-lib/models/model/index.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export * as mfd from './mfd';
-export * as models from './models';
-export * as sourceType from './source-type';
-export * as tectonicSettings from './tectonic-setting';
diff --git a/src/nshmp-lib/nshm/index.ts b/src/nshmp-lib/nshm/index.ts
new file mode 100644
index 0000000..1fe7851
--- /dev/null
+++ b/src/nshmp-lib/nshm/index.ts
@@ -0,0 +1,2 @@
+export * from './nshm.model';
+export * from './nshm-region.model';
diff --git a/src/nshmp-lib/models/nshm-region.model.ts b/src/nshmp-lib/nshm/nshm-region.model.ts
similarity index 100%
rename from src/nshmp-lib/models/nshm-region.model.ts
rename to src/nshmp-lib/nshm/nshm-region.model.ts
diff --git a/src/nshmp-lib/models/nshm.model.ts b/src/nshmp-lib/nshm/nshm.model.ts
similarity index 100%
rename from src/nshmp-lib/models/nshm.model.ts
rename to src/nshmp-lib/nshm/nshm.model.ts
-- 
GitLab


From d978f298d4077332d92dc4ff52b8b6101e81185c Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Thu, 3 Nov 2022 09:15:06 -0600
Subject: [PATCH 02/12] refactor

---
 libs/aws/index.ts                             |   1 +
 libs/aws/run-nshmp-haz/dynamo-db-item.ts      |  35 +++
 libs/aws/run-nshmp-haz/index.ts               |   4 +
 libs/aws/run-nshmp-haz/job-status.model.ts    |   8 +
 .../aws/run-nshmp-haz/run-nshmp-haz-config.ts |  93 ++++++++
 .../run-nshmp-haz/run-nshmp-haz-response.ts   |  11 +
 libs/index.ts                                 |   8 +
 libs/leaflet/index.ts                         |   4 +
 libs/leaflet/map-baselayer.model.ts           |  66 ++++++
 libs/leaflet/map.utils.ts                     | 214 ++++++++++++++++++
 libs/nshmp-haz/index.ts                       |   2 +
 libs/nshmp-haz/www/constraint.model.ts        |   5 +
 .../disagg-service/disagg-response.model.ts   |  89 ++++++++
 .../www/disagg-service/disagg-usage.model.ts  |  15 ++
 libs/nshmp-haz/www/disagg-service/index.ts    |   2 +
 .../hazard-service/hazard-response.model.ts   |  68 ++++++
 .../www/hazard-service/hazard-usage.model.ts  |  24 ++
 libs/nshmp-haz/www/hazard-service/index.ts    |   2 +
 libs/nshmp-haz/www/index.ts                   |   7 +
 .../www/source-logic-trees-service/index.ts   |   2 +
 .../source-logic-trees-response.ts            |  11 +
 .../source-logic-trees-usage.ts               |   9 +
 libs/nshmp-haz/www/source-model.model.ts      |  15 ++
 libs/nshmp-haz/www/xy-data-group.model.ts     |  14 ++
 libs/nshmp-lib/calc/exceedance-model.util.ts  | 109 +++++++++
 libs/nshmp-lib/calc/index.ts                  |   3 +
 libs/nshmp-lib/calc/maths.util.ts             | 120 ++++++++++
 libs/nshmp-lib/data/index.ts                  |   2 +
 .../nshmp-lib/data/uncertainty-model.model.ts |  13 ++
 libs/nshmp-lib/data/xy-sequence.model.ts      |   4 +
 libs/nshmp-lib/geo/basin.model.ts             |  25 ++
 libs/nshmp-lib/geo/index.ts                   |   3 +
 libs/nshmp-lib/geo/region.model.ts            |   7 +
 libs/nshmp-lib/geo/site.model.ts              |  17 ++
 libs/nshmp-lib/gmm/gmm-input.model.ts         |  15 ++
 libs/nshmp-lib/gmm/gmm.model.ts               | 190 ++++++++++++++++
 libs/nshmp-lib/gmm/imt.model.ts               | 119 ++++++++++
 libs/nshmp-lib/gmm/index.ts                   |   5 +
 libs/nshmp-lib/gmm/nehrp-site-class.model.ts  |  35 +++
 libs/nshmp-lib/gmm/rate-type.model.ts         |   5 +
 libs/nshmp-lib/index.ts                       |   5 +
 libs/nshmp-lib/model/index.ts                 |   4 +
 libs/nshmp-lib/model/mfd.ts                   |  36 +++
 libs/nshmp-lib/model/models.ts                |  42 ++++
 libs/nshmp-lib/model/source-type.ts           |  59 +++++
 libs/nshmp-lib/model/tectonic-setting.ts      |  19 ++
 libs/nshmp-lib/nshm/index.ts                  |   2 +
 libs/nshmp-lib/nshm/nshm-region.model.ts      |  26 +++
 libs/nshmp-lib/nshm/nshm.model.ts             |  45 ++++
 libs/nshmp-ws-static/index.ts                 |   2 +
 .../static-hazard-response.model.ts           |  50 ++++
 .../static-hazard-usage.model.ts              |  54 +++++
 libs/nshmp-ws-utils/index.ts                  |   4 +
 .../metadata/double-parameter.model.ts        |  12 +
 .../nshmp-ws-utils/metadata/enum-parameter.ts |  18 ++
 libs/nshmp-ws-utils/metadata/index.ts         |   5 +
 .../metadata/parameter.model.ts               |  10 +
 libs/nshmp-ws-utils/metadata/server.model.ts  |  11 +
 .../metadata/string-parameter.model.ts        |   9 +
 libs/nshmp-ws-utils/response.model.ts         |  30 +++
 libs/nshmp-ws-utils/service-error.model.ts    |   3 +
 libs/nshmp-ws-utils/status.model.ts           |   8 +
 .../fault-sections-response.model.ts          |  26 +++
 .../fault-sections-usage.model.ts             |  16 ++
 libs/nshmp-ws/fault-sections-service/index.ts |   2 +
 .../gmm-services/gmm-response.model.ts        |  44 ++++
 libs/nshmp-ws/gmm-services/gmm-usage.model.ts | 145 ++++++++++++
 libs/nshmp-ws/gmm-services/index.ts           |   2 +
 libs/nshmp-ws/index.ts                        |   3 +
 libs/nshmp-ws/utilities-service/index.ts      |   2 +
 .../utilities-service/test-sites-response.ts  |   7 +
 .../test-sites-usage.model.ts                 |  15 ++
 libs/plotly/index.ts                          |   6 +
 libs/plotly/plotly-config.model.ts            |  18 ++
 libs/plotly/plotly-layout.model.ts            |  14 ++
 libs/plotly/plotly-legend.model.ts            |   8 +
 libs/plotly/plotly-plot.model.ts              |  15 ++
 libs/plotly/plotly-utils.ts                   |  20 ++
 78 files changed, 2178 insertions(+)
 create mode 100644 libs/aws/index.ts
 create mode 100644 libs/aws/run-nshmp-haz/dynamo-db-item.ts
 create mode 100644 libs/aws/run-nshmp-haz/index.ts
 create mode 100644 libs/aws/run-nshmp-haz/job-status.model.ts
 create mode 100644 libs/aws/run-nshmp-haz/run-nshmp-haz-config.ts
 create mode 100644 libs/aws/run-nshmp-haz/run-nshmp-haz-response.ts
 create mode 100644 libs/index.ts
 create mode 100644 libs/leaflet/index.ts
 create mode 100644 libs/leaflet/map-baselayer.model.ts
 create mode 100644 libs/leaflet/map.utils.ts
 create mode 100644 libs/nshmp-haz/index.ts
 create mode 100644 libs/nshmp-haz/www/constraint.model.ts
 create mode 100644 libs/nshmp-haz/www/disagg-service/disagg-response.model.ts
 create mode 100644 libs/nshmp-haz/www/disagg-service/disagg-usage.model.ts
 create mode 100644 libs/nshmp-haz/www/disagg-service/index.ts
 create mode 100644 libs/nshmp-haz/www/hazard-service/hazard-response.model.ts
 create mode 100644 libs/nshmp-haz/www/hazard-service/hazard-usage.model.ts
 create mode 100644 libs/nshmp-haz/www/hazard-service/index.ts
 create mode 100644 libs/nshmp-haz/www/index.ts
 create mode 100644 libs/nshmp-haz/www/source-logic-trees-service/index.ts
 create mode 100644 libs/nshmp-haz/www/source-logic-trees-service/source-logic-trees-response.ts
 create mode 100644 libs/nshmp-haz/www/source-logic-trees-service/source-logic-trees-usage.ts
 create mode 100644 libs/nshmp-haz/www/source-model.model.ts
 create mode 100644 libs/nshmp-haz/www/xy-data-group.model.ts
 create mode 100644 libs/nshmp-lib/calc/exceedance-model.util.ts
 create mode 100644 libs/nshmp-lib/calc/index.ts
 create mode 100644 libs/nshmp-lib/calc/maths.util.ts
 create mode 100644 libs/nshmp-lib/data/index.ts
 create mode 100644 libs/nshmp-lib/data/uncertainty-model.model.ts
 create mode 100644 libs/nshmp-lib/data/xy-sequence.model.ts
 create mode 100644 libs/nshmp-lib/geo/basin.model.ts
 create mode 100644 libs/nshmp-lib/geo/index.ts
 create mode 100644 libs/nshmp-lib/geo/region.model.ts
 create mode 100644 libs/nshmp-lib/geo/site.model.ts
 create mode 100644 libs/nshmp-lib/gmm/gmm-input.model.ts
 create mode 100644 libs/nshmp-lib/gmm/gmm.model.ts
 create mode 100644 libs/nshmp-lib/gmm/imt.model.ts
 create mode 100644 libs/nshmp-lib/gmm/index.ts
 create mode 100644 libs/nshmp-lib/gmm/nehrp-site-class.model.ts
 create mode 100644 libs/nshmp-lib/gmm/rate-type.model.ts
 create mode 100644 libs/nshmp-lib/index.ts
 create mode 100644 libs/nshmp-lib/model/index.ts
 create mode 100644 libs/nshmp-lib/model/mfd.ts
 create mode 100644 libs/nshmp-lib/model/models.ts
 create mode 100644 libs/nshmp-lib/model/source-type.ts
 create mode 100644 libs/nshmp-lib/model/tectonic-setting.ts
 create mode 100644 libs/nshmp-lib/nshm/index.ts
 create mode 100644 libs/nshmp-lib/nshm/nshm-region.model.ts
 create mode 100644 libs/nshmp-lib/nshm/nshm.model.ts
 create mode 100644 libs/nshmp-ws-static/index.ts
 create mode 100644 libs/nshmp-ws-static/static-hazard-response.model.ts
 create mode 100644 libs/nshmp-ws-static/static-hazard-usage.model.ts
 create mode 100644 libs/nshmp-ws-utils/index.ts
 create mode 100644 libs/nshmp-ws-utils/metadata/double-parameter.model.ts
 create mode 100644 libs/nshmp-ws-utils/metadata/enum-parameter.ts
 create mode 100644 libs/nshmp-ws-utils/metadata/index.ts
 create mode 100644 libs/nshmp-ws-utils/metadata/parameter.model.ts
 create mode 100644 libs/nshmp-ws-utils/metadata/server.model.ts
 create mode 100644 libs/nshmp-ws-utils/metadata/string-parameter.model.ts
 create mode 100644 libs/nshmp-ws-utils/response.model.ts
 create mode 100644 libs/nshmp-ws-utils/service-error.model.ts
 create mode 100644 libs/nshmp-ws-utils/status.model.ts
 create mode 100644 libs/nshmp-ws/fault-sections-service/fault-sections-response.model.ts
 create mode 100644 libs/nshmp-ws/fault-sections-service/fault-sections-usage.model.ts
 create mode 100644 libs/nshmp-ws/fault-sections-service/index.ts
 create mode 100644 libs/nshmp-ws/gmm-services/gmm-response.model.ts
 create mode 100644 libs/nshmp-ws/gmm-services/gmm-usage.model.ts
 create mode 100644 libs/nshmp-ws/gmm-services/index.ts
 create mode 100644 libs/nshmp-ws/index.ts
 create mode 100644 libs/nshmp-ws/utilities-service/index.ts
 create mode 100644 libs/nshmp-ws/utilities-service/test-sites-response.ts
 create mode 100644 libs/nshmp-ws/utilities-service/test-sites-usage.model.ts
 create mode 100644 libs/plotly/index.ts
 create mode 100644 libs/plotly/plotly-config.model.ts
 create mode 100644 libs/plotly/plotly-layout.model.ts
 create mode 100644 libs/plotly/plotly-legend.model.ts
 create mode 100644 libs/plotly/plotly-plot.model.ts
 create mode 100644 libs/plotly/plotly-utils.ts

diff --git a/libs/aws/index.ts b/libs/aws/index.ts
new file mode 100644
index 0000000..476e027
--- /dev/null
+++ b/libs/aws/index.ts
@@ -0,0 +1 @@
+export * as runNshmpHaz from './run-nshmp-haz';
diff --git a/libs/aws/run-nshmp-haz/dynamo-db-item.ts b/libs/aws/run-nshmp-haz/dynamo-db-item.ts
new file mode 100644
index 0000000..122b778
--- /dev/null
+++ b/libs/aws/run-nshmp-haz/dynamo-db-item.ts
@@ -0,0 +1,35 @@
+import {JobStatus} from './job-status.model';
+import {RunNshmpHazHttpPostConfig} from './run-nshmp-haz-config';
+
+/**
+ * Dynamo DB item to add to table
+ */
+export interface DynamoDBItem {
+  email: string;
+  jobId: string;
+
+  calc?: DynamoDBItemCalc;
+  inputs?: RunNshmpHazHttpPostConfig;
+  job?: DynamoDBItemJob;
+  results?: DynamoDBItemResults;
+}
+
+export interface DynamoDBItemCalc {
+  completedOn?: string;
+  cores?: string;
+  createdOn?: string;
+  memory?: string;
+  totalTime?: string;
+}
+
+export interface DynamoDBItemJob {
+  environment?: string;
+  errorMessage?: string;
+  instanceId?: string;
+  jobStatus?: JobStatus;
+}
+
+export interface DynamoDBItemResults {
+  viewLogs?: string;
+  zipFile?: string;
+}
diff --git a/libs/aws/run-nshmp-haz/index.ts b/libs/aws/run-nshmp-haz/index.ts
new file mode 100644
index 0000000..766403a
--- /dev/null
+++ b/libs/aws/run-nshmp-haz/index.ts
@@ -0,0 +1,4 @@
+export * from './dynamo-db-item';
+export * from './job-status.model';
+export * from './run-nshmp-haz-config';
+export * from './run-nshmp-haz-response';
diff --git a/libs/aws/run-nshmp-haz/job-status.model.ts b/libs/aws/run-nshmp-haz/job-status.model.ts
new file mode 100644
index 0000000..53c621c
--- /dev/null
+++ b/libs/aws/run-nshmp-haz/job-status.model.ts
@@ -0,0 +1,8 @@
+/** Job status */
+export enum JobStatus {
+  COMPLETED = 'Completed',
+  CREATED = 'Created',
+  FAILED = 'Failed',
+  RUNNING = 'Running',
+  TERMINATED = 'Terminated',
+}
diff --git a/libs/aws/run-nshmp-haz/run-nshmp-haz-config.ts b/libs/aws/run-nshmp-haz/run-nshmp-haz-config.ts
new file mode 100644
index 0000000..9a547d8
--- /dev/null
+++ b/libs/aws/run-nshmp-haz/run-nshmp-haz-config.ts
@@ -0,0 +1,93 @@
+/**
+ * nshmp-haz calc config
+ */
+export interface CalcConfig {
+  deagg?: unknown;
+  hazard?: unknown;
+  output?: CalcConfigOutput;
+  performance?: unknown;
+  rate?: unknown;
+  site?: unknown;
+}
+
+/** nshmp-haz calc config output section */
+export interface CalcConfigOutput {
+  directory: string;
+}
+
+/** AWS cloud config */
+export interface CloudConfig {
+  /** EC2 instance type */
+  instanceType: string;
+
+  /** Whether to debug; sets "set -x" in user data script for EC2 */
+  debug?: boolean;
+}
+
+/** NSHMP config */
+export interface NshmpConfig {
+  /**
+   * Java class name of class to run.
+   *
+   * Example: HazardCalc
+   */
+  className: string;
+
+  /** Email to get notifications */
+  email: string;
+
+  /**
+   * The URL to the git repository of the model to use.
+   */
+  modelGitUrl: string;
+
+  /** The SHA (branch, tag, etc) of the model to use */
+  modelSha?: string;
+
+  /**
+   * URL to nshmp-lib.
+   *
+   * Defaults to using version defined in nshmp-haz Gradle file.
+   */
+  nshmpLibGitUrl?: string;
+
+  /** The SHA of nshmp-lib */
+  nshmpLibSha?: string;
+
+  /** URL to site file. */
+  siteFileUrl: string;
+
+  /** Intensity measure level for deagg-epsilon */
+  iml?: number;
+
+  /** Path inside model tarball for hazard code to run */
+  modelPath?: string;
+
+  /** Return period for deagg */
+  returnPeriod?: number;
+
+  /**
+   * The URL to the repository of the hazard to use.
+   */
+  sourceCodeGitUrl?: string;
+
+  /** The SHA (branch, tag, etc) of the source code to use*/
+  sourceCodeSha?: string;
+}
+
+/** State machine input */
+export interface NshmpHazJobConfig extends RunNshmpHazHttpPostConfig {
+  jobId: string;
+}
+
+/** HTTP POST config for running nshmp-haz on AWS */
+export interface RunNshmpHazHttpPostConfig {
+  /** AWS cloud config */
+  cloudConfig: CloudConfig;
+
+  /** NSHMP config to run nshmp-haz */
+  nshmpConfig: NshmpConfig;
+
+  /** The nshmp-haz calc config */
+  calcConfig?: CalcConfig;
+}
diff --git a/libs/aws/run-nshmp-haz/run-nshmp-haz-response.ts b/libs/aws/run-nshmp-haz/run-nshmp-haz-response.ts
new file mode 100644
index 0000000..b173b89
--- /dev/null
+++ b/libs/aws/run-nshmp-haz/run-nshmp-haz-response.ts
@@ -0,0 +1,11 @@
+import {Response} from '../../nshmp-ws-utils';
+import {RunNshmpHazHttpPostConfig} from './run-nshmp-haz-config';
+
+export type RunNshmpHazResponse = Response<
+  RunNshmpHazHttpPostConfig,
+  RunNshmpHazResponseData
+>;
+
+export interface RunNshmpHazResponseData {
+  jobId: string;
+}
diff --git a/libs/index.ts b/libs/index.ts
new file mode 100644
index 0000000..7ff5ba8
--- /dev/null
+++ b/libs/index.ts
@@ -0,0 +1,8 @@
+export * as aws from './aws';
+export * as leaflet from './leaflet';
+export * as nshmpHaz from './nshmp-haz';
+export * as nshmpLib from './nshmp-lib';
+export * as nshmpWs from './nshmp-ws';
+export * as nshmpWsStatic from './nshmp-ws-static';
+export * as nshmpWsUtils from './nshmp-ws-utils';
+export * as plotly from './plotly';
diff --git a/libs/leaflet/index.ts b/libs/leaflet/index.ts
new file mode 100644
index 0000000..0e71ca2
--- /dev/null
+++ b/libs/leaflet/index.ts
@@ -0,0 +1,4 @@
+/* Export Leaflet package */
+
+export * from './map.utils';
+export * from './map-baselayer.model';
diff --git a/libs/leaflet/map-baselayer.model.ts b/libs/leaflet/map-baselayer.model.ts
new file mode 100644
index 0000000..734d77e
--- /dev/null
+++ b/libs/leaflet/map-baselayer.model.ts
@@ -0,0 +1,66 @@
+/**
+ * Base layers for mapping.
+ *
+ * These base layers map to concrete styles in lib/state/map/map.utils.
+ */
+export enum MapBaseLayer {
+  /**
+   * Esri light grey base.
+   * @see https://doc.arcgis.com/en/data-appliance/2022/maps/world-light-gray-base.htm
+   */
+  GREYSCALE = 'Greyscale',
+
+  /**
+   * Esri dark grey base.
+   * @see https://doc.arcgis.com/en/data-appliance/2022/maps/world-dark-gray-base.htm
+   */
+  GREYSCALE_DARK = 'Greyscale Dark',
+
+  /**
+   * Esri hillshade.
+   * @see https://doc.arcgis.com/en/data-appliance/2022/maps/world-hillshade.htm
+   */
+  HILLSHADE = 'Hillshade',
+
+  /**
+   * Esri dark hillshade.
+   * @see https://doc.arcgis.com/en/data-appliance/2022/maps/world-hillshade-dark.htm
+   */
+  HILLSHADE_DARK = 'Hillshade Dark',
+
+  /**
+   * Esri National Geographic world map.
+   * @see https://doc.arcgis.com/en/data-appliance/2022/maps/national-geographic-world-map.htm
+   */
+  NAT_GEO = 'Natational Geographic',
+
+  /**
+   * Esri ocean map.
+   * @see https://doc.arcgis.com/en/data-appliance/2022/maps/world-ocean-base.htm
+   */
+  OCEAN = 'Ocean',
+
+  /**
+   * Esri physical map
+   * @see https://doc.arcgis.com/en/data-appliance/2022/maps/world-physical-map.htm
+   */
+  PHYSICAL = 'Physical',
+
+  /**
+   * Esri satellite map.
+   * @see https://doc.arcgis.com/en/data-appliance/2022/maps/world-imagery.htm
+   */
+  SATELLITE = 'Satellite',
+
+  /**
+   * Esir street map.
+   * @see https://doc.arcgis.com/en/data-appliance/2022/maps/world-street-map.htm
+   */
+  STREET = 'Street',
+
+  /**
+   * Esri topographic map.
+   * @see https://doc.arcgis.com/en/data-appliance/2022/maps/world-topographic-map.htm
+   */
+  TOPO = 'Topographic',
+}
diff --git a/libs/leaflet/map.utils.ts b/libs/leaflet/map.utils.ts
new file mode 100644
index 0000000..7bad778
--- /dev/null
+++ b/libs/leaflet/map.utils.ts
@@ -0,0 +1,214 @@
+import * as L from 'leaflet';
+
+import {Location} from '../nshmp-lib/geo';
+import {MapBaseLayer} from './map-baselayer.model';
+
+/** Location transform */
+export type LocationTransform = (location: Location) => Location;
+
+/**
+ * Esri raster base layers for Leaflet.
+ *
+ * https://doc.arcgis.com/en/data-appliance/2022/maps/directory-maps-data.htm
+ */
+export function baseLayers(): Record<MapBaseLayer, L.TileLayer> {
+  return BASE_LAYERS;
+}
+
+/**
+ * Returns a specific Esri raster base layer.
+ */
+export function baseLayer(baseLayer: MapBaseLayer): L.TileLayer {
+  return BASE_LAYERS[baseLayer];
+}
+
+/**
+ * Transform coordinates in a Feature Collection.
+ *
+ * @param featureCollection The feature collection
+ * @param transform The transform function to use
+ */
+export function transformCoordinates(
+  featureCollection: GeoJSON.FeatureCollection,
+  transform: LocationTransform = loc => loc
+): GeoJSON.FeatureCollection {
+  for (const feature of featureCollection.features) {
+    const geometry = feature.geometry;
+
+    switch (geometry.type) {
+      case 'LineString': {
+        geometry.coordinates = geometry.coordinates.map(coord =>
+          transformCoordinate(coord, transform)
+        );
+        break;
+      }
+      case 'MultiLineString': {
+        geometry.coordinates = geometry.coordinates.map(position =>
+          position.map(coord => transformCoordinate(coord, transform))
+        );
+        break;
+      }
+      case 'MultiPoint': {
+        geometry.coordinates = geometry.coordinates.map(coord =>
+          transformCoordinate(coord, transform)
+        );
+        break;
+      }
+      case 'MultiPolygon': {
+        geometry.coordinates = geometry.coordinates.map(positions =>
+          positions.map(position =>
+            position.map(coord => transformCoordinate(coord, transform))
+          )
+        );
+        break;
+      }
+      case 'Point': {
+        geometry.coordinates = transformCoordinate(
+          geometry.coordinates,
+          transform
+        );
+        break;
+      }
+      case 'Polygon': {
+        geometry.coordinates = geometry.coordinates.map(position =>
+          position.map(coord => transformCoordinate(coord, transform))
+        );
+        break;
+      }
+    }
+  }
+
+  return featureCollection;
+}
+
+const ARCGIS_URL_START =
+  'https://services.arcgisonline.com/arcgis/rest/services/';
+const ARCGIS_URL_END = '/MapServer/tile/{z}/{y}/{x}';
+const OPTIONS: L.MapOptions = {
+  maxZoom: 16,
+};
+
+const BASE_LAYERS: Record<MapBaseLayer, L.TileLayer> = {
+  /* Esri light gray */
+  [MapBaseLayer.GREYSCALE]: L.tileLayer(
+    `${ARCGIS_URL_START}Canvas/World_Light_Gray_Base${ARCGIS_URL_END}`,
+    {
+      ...OPTIONS,
+      attribution:
+        'Esri, HERE, Garmin, © OpenStreetMap contributors, and the GIS user community',
+      id: MapBaseLayer.GREYSCALE,
+    }
+  ),
+  /* Esri dark gray */
+  [MapBaseLayer.GREYSCALE_DARK]: L.tileLayer(
+    `${ARCGIS_URL_START}Canvas/World_Dark_Gray_Base${ARCGIS_URL_END}`,
+    {
+      ...OPTIONS,
+      attribution:
+        'Esri, HERE, Garmin, © OpenStreetMap contributors, and the GIS user community',
+      id: MapBaseLayer.GREYSCALE_DARK,
+    }
+  ),
+  /* Esri world hillshade */
+  [MapBaseLayer.HILLSHADE]: L.tileLayer(
+    `${ARCGIS_URL_START}Elevation/World_Hillshade${ARCGIS_URL_END}`,
+    {
+      ...OPTIONS,
+      attribution:
+        'Esri, USGS, NGA, NASA, CGIAR, N Robinson, NCEAS, NLS, OS, NMA, ' +
+        'Geodatastyrelsen, Rijkswaterstaat, GSA, Geoland, FEMA, Intermap, ' +
+        'and the GIS user community',
+      id: MapBaseLayer.HILLSHADE,
+    }
+  ),
+  /* Esri world hillshade */
+  [MapBaseLayer.HILLSHADE_DARK]: L.tileLayer(
+    `${ARCGIS_URL_START}Elevation/World_Hillshade_Dark${ARCGIS_URL_END}`,
+    {
+      ...OPTIONS,
+      attribution:
+        'Esri, USGS, NGA, NASA, CGIAR, N Robinson, NCEAS, NLS, OS, NMA, ' +
+        'Geodatastyrelsen, Rijkswaterstaat, GSA, Geoland, FEMA, Intermap, ' +
+        'and the GIS user community',
+      id: MapBaseLayer.HILLSHADE_DARK,
+    }
+  ),
+  /* Esri National Geographics world map */
+  [MapBaseLayer.NAT_GEO]: L.tileLayer(
+    `${ARCGIS_URL_START}NatGeo_World_Map${ARCGIS_URL_END}`,
+    {
+      ...OPTIONS,
+      attribution:
+        'National Geographic, Esri, Garmin, HERE, UNEP-WCMC, USGS, ' +
+        'NASA, ESA, METI, NRCan, GEBCO, NOAA, INCREMENT P',
+      id: MapBaseLayer.NAT_GEO,
+    }
+  ),
+  /* Esri world ocean */
+  [MapBaseLayer.OCEAN]: L.tileLayer(
+    `${ARCGIS_URL_START}Ocean/World_Ocean_Base${ARCGIS_URL_END}`,
+    {
+      ...OPTIONS,
+      attribution: 'Esri, Garmin, GEBCO, NOAA NGDC, and other contributors',
+      id: MapBaseLayer.OCEAN,
+      maxZoom: 10,
+    }
+  ),
+  /* Esri world physical map */
+  [MapBaseLayer.PHYSICAL]: L.tileLayer(
+    `${ARCGIS_URL_START}World_Physical_Map${ARCGIS_URL_END}`,
+    {
+      ...OPTIONS,
+      attribution: 'U.S. National Park Service',
+      id: MapBaseLayer.PHYSICAL,
+      maxZoom: 8,
+    }
+  ),
+  [MapBaseLayer.SATELLITE]: L.tileLayer(
+    `${ARCGIS_URL_START}World_Imagery${ARCGIS_URL_END}`,
+    {
+      ...OPTIONS,
+      attribution:
+        'Esri, Maxar, Earthstar Geographics, and the GIS User Community',
+      id: MapBaseLayer.SATELLITE,
+    }
+  ),
+  [MapBaseLayer.STREET]: L.tileLayer(
+    `${ARCGIS_URL_START}World_Street_Map${ARCGIS_URL_END}`,
+    {
+      ...OPTIONS,
+      attribution:
+        'Esri, HERE, Garmin, USGS, Intermap, INCREMENT P, ' +
+        'NRCan, Esri Japan, METI, Esri China (Hong Kong), Esri Korea, ' +
+        'Esri (Thailand), NGCC, © OpenStreetMap contributors, and the ' +
+        'GIS User Community',
+      id: MapBaseLayer.STREET,
+    }
+  ),
+  [MapBaseLayer.TOPO]: L.tileLayer(
+    `${ARCGIS_URL_START}World_Topo_Map${ARCGIS_URL_END}`,
+    {
+      ...OPTIONS,
+      attribution:
+        'Esri, HERE, Garmin, USGS, Intermap, INCREMENT P, NRCan, ' +
+        'Esri Japan, METI, Mapwithyou, NOSTRA, © OpenStreetMap ' +
+        'contributors, and the GIS User Community',
+      id: MapBaseLayer.TOPO,
+    }
+  ),
+};
+
+function transformCoordinate(
+  coordinates: number[],
+  transform: LocationTransform
+): number[] {
+  const longitude = coordinates[0];
+  const latitude = coordinates[1];
+
+  const location = transform({
+    latitude,
+    longitude,
+  });
+
+  return [location.longitude, location.latitude];
+}
diff --git a/libs/nshmp-haz/index.ts b/libs/nshmp-haz/index.ts
new file mode 100644
index 0000000..0537828
--- /dev/null
+++ b/libs/nshmp-haz/index.ts
@@ -0,0 +1,2 @@
+/* Export nshmp package */
+export * from './www';
diff --git a/libs/nshmp-haz/www/constraint.model.ts b/libs/nshmp-haz/www/constraint.model.ts
new file mode 100644
index 0000000..be8a4ca
--- /dev/null
+++ b/libs/nshmp-haz/www/constraint.model.ts
@@ -0,0 +1,5 @@
+export interface Constraint {
+  id: string;
+  min: object;
+  max: object;
+}
diff --git a/libs/nshmp-haz/www/disagg-service/disagg-response.model.ts b/libs/nshmp-haz/www/disagg-service/disagg-response.model.ts
new file mode 100644
index 0000000..7f548e9
--- /dev/null
+++ b/libs/nshmp-haz/www/disagg-service/disagg-response.model.ts
@@ -0,0 +1,89 @@
+import {Imt} from '../../../nshmp-lib/gmm';
+import {Response} from '../../../nshmp-ws-utils';
+import {Parameter, Server} from '../../../nshmp-ws-utils/metadata';
+import {HazardRequestData} from '../hazard-service/hazard-response.model';
+
+export type DisaggResponse = Response<DisaggRequestData, DisaggResponseData>;
+
+export enum DataType {
+  GMM = 'GMM',
+  SOURCE = 'SOURCE',
+  DISAGG_DATA = 'DISAGG_DATA',
+}
+
+export interface DisaggRequestData extends HazardRequestData {
+  imts: Imt[];
+  returnPeriod: number;
+  dataTypes: DataType[];
+}
+
+export interface DisaggResponseMetadata {
+  rlabel: string;
+  mlabel: string;
+  εlabel: string;
+  εbins: EBin[];
+  server: Server;
+}
+
+export interface EBin {
+  id: number;
+  min: number;
+  max: number;
+}
+
+export interface DisaggResponseData {
+  metadata: DisaggResponseMetadata;
+  disaggs: DisaggResponseDataValues[];
+}
+
+export interface DisaggResponseDataValues {
+  imt: Parameter;
+  data: DisaggComponentData[];
+}
+
+export interface DisaggComponentData {
+  component: string;
+  data: DisaggData[];
+  summary: DisaggSummary[];
+  sources: DisaggSource[];
+}
+
+export interface DisaggData {
+  r: number;
+  m: number;
+  rBar: number;
+  mBar: number;
+  εBar: number;
+  εdata: EData[];
+}
+
+export interface EData {
+  εbin: number;
+  value: number;
+}
+
+export interface DisaggSummary {
+  name: string;
+  display: boolean;
+  data: DisaggSummaryData[];
+}
+
+export interface DisaggSummaryData {
+  name: string;
+  value: number;
+  units: string;
+}
+
+export interface DisaggSource {
+  name: string;
+  source: string;
+  type: string;
+  contribution: number;
+  id: number;
+  r: number;
+  m: number;
+  ε: number;
+  azimuth: number;
+  longitude: number;
+  latitude: number;
+}
diff --git a/libs/nshmp-haz/www/disagg-service/disagg-usage.model.ts b/libs/nshmp-haz/www/disagg-service/disagg-usage.model.ts
new file mode 100644
index 0000000..8e95caa
--- /dev/null
+++ b/libs/nshmp-haz/www/disagg-service/disagg-usage.model.ts
@@ -0,0 +1,15 @@
+import {Response} from '../../../nshmp-ws-utils';
+import {DoubleParameter} from '../../../nshmp-ws-utils/metadata';
+import {HazardRequestMetadata} from '../hazard-service';
+
+export type DisaggUsage = Response<string, DisaggRequestMetadata>;
+
+export interface DisaggRequestMetadata extends HazardRequestMetadata {
+  iml: ImlMetadata;
+  returnPeriod: DoubleParameter;
+}
+
+export interface ImlMetadata {
+  name: string;
+  range: Record<string, DoubleParameter>;
+}
diff --git a/libs/nshmp-haz/www/disagg-service/index.ts b/libs/nshmp-haz/www/disagg-service/index.ts
new file mode 100644
index 0000000..01ddf85
--- /dev/null
+++ b/libs/nshmp-haz/www/disagg-service/index.ts
@@ -0,0 +1,2 @@
+export * from './disagg-response.model';
+export * from './disagg-usage.model';
diff --git a/libs/nshmp-haz/www/hazard-service/hazard-response.model.ts b/libs/nshmp-haz/www/hazard-service/hazard-response.model.ts
new file mode 100644
index 0000000..e999031
--- /dev/null
+++ b/libs/nshmp-haz/www/hazard-service/hazard-response.model.ts
@@ -0,0 +1,68 @@
+import {XySequence} from '../../../nshmp-lib/data';
+import {Response} from '../../../nshmp-ws-utils';
+import {Parameter, Server} from '../../../nshmp-ws-utils/metadata';
+
+/**
+ * The hazard calculation response.
+ */
+export type HazardCalcResponse = Response<
+  HazardRequestData,
+  HazardResponseData
+>;
+
+/*
+ * The hazard service request data.
+ *
+ * Ported from: https://code.usgs.gov/ghsc/nshmp/nshmp-haz-v2
+ *    /-/blob/master/src/main/java/gov/usgs/earthquake/nshmp/www/services/HazardService.java
+ */
+export interface HazardRequestData {
+  latitude: number;
+  longitude: number;
+  vs30: number;
+}
+
+/*
+ * The hazard service calculation response data.
+ *
+ * Ported from: https://code.usgs.gov/ghsc/nshmp/nshmp-haz-v2
+ *    /-/blob/master/src/main/java/gov/usgs/earthquake/nshmp/www/services/HazardService.java
+ */
+export interface HazardResponseData {
+  metadata: HazardResponseMetadata;
+  hazardCurves: HazardResponse[];
+}
+
+/*
+ * The hazard service calculation response.
+ *
+ * Ported from: https://code.usgs.gov/ghsc/nshmp/nshmp-haz-v2
+ *    /-/blob/master/src/main/java/gov/usgs/earthquake/nshmp/www/services/HazardService.java
+ */
+export interface HazardResponse {
+  imt: Parameter;
+  data: HazardCurve[];
+}
+
+/*
+ * The hazard service calculation response metadata.
+ *
+ * Ported from: https://code.usgs.gov/ghsc/nshmp/nshmp-haz-v2
+ *    /-/blob/master/src/main/java/gov/usgs/earthquake/nshmp/www/services/HazardService.java
+ */
+export interface HazardResponseMetadata {
+  xlabel: string;
+  ylabel: string;
+  server: Server;
+}
+
+/*
+ * The hazard service hazard curve.
+ *
+ * Ported from: https://code.usgs.gov/ghsc/nshmp/nshmp-haz-v2
+ *    /-/blob/master/src/main/java/gov/usgs/earthquake/nshmp/www/services/HazardService.java
+ */
+export interface HazardCurve {
+  component: string;
+  values: XySequence;
+}
diff --git a/libs/nshmp-haz/www/hazard-service/hazard-usage.model.ts b/libs/nshmp-haz/www/hazard-service/hazard-usage.model.ts
new file mode 100644
index 0000000..07c2376
--- /dev/null
+++ b/libs/nshmp-haz/www/hazard-service/hazard-usage.model.ts
@@ -0,0 +1,24 @@
+import {Response} from '../../../nshmp-ws-utils';
+import {DoubleParameter} from '../../../nshmp-ws-utils/metadata';
+import {SourceModel} from '../source-model.model';
+
+/**
+ * The hazard service usage response.
+ */
+export type HazardUsageResponse = Response<string, HazardRequestMetadata>;
+
+/**
+ * Base source model metadata.
+ */
+export interface HazardModelMetadata {
+  model: SourceModel;
+}
+
+/**
+ * The hazard service usage request metadata.
+ */
+export interface HazardRequestMetadata extends HazardModelMetadata {
+  latitude: DoubleParameter;
+  longitude: DoubleParameter;
+  vs30: DoubleParameter;
+}
diff --git a/libs/nshmp-haz/www/hazard-service/index.ts b/libs/nshmp-haz/www/hazard-service/index.ts
new file mode 100644
index 0000000..a60a10c
--- /dev/null
+++ b/libs/nshmp-haz/www/hazard-service/index.ts
@@ -0,0 +1,2 @@
+export * from './hazard-response.model';
+export * from './hazard-usage.model';
diff --git a/libs/nshmp-haz/www/index.ts b/libs/nshmp-haz/www/index.ts
new file mode 100644
index 0000000..79a5596
--- /dev/null
+++ b/libs/nshmp-haz/www/index.ts
@@ -0,0 +1,7 @@
+/* Export www packages */
+export * from './constraint.model';
+export * as disaggService from './disagg-service';
+export * as hazardService from './hazard-service';
+export * as sourceLogicTreesService from './source-logic-trees-service';
+export * from './source-model.model';
+export * from './xy-data-group.model';
diff --git a/libs/nshmp-haz/www/source-logic-trees-service/index.ts b/libs/nshmp-haz/www/source-logic-trees-service/index.ts
new file mode 100644
index 0000000..1a70c3c
--- /dev/null
+++ b/libs/nshmp-haz/www/source-logic-trees-service/index.ts
@@ -0,0 +1,2 @@
+export * from './source-logic-trees-response';
+export * from './source-logic-trees-usage';
diff --git a/libs/nshmp-haz/www/source-logic-trees-service/source-logic-trees-response.ts b/libs/nshmp-haz/www/source-logic-trees-service/source-logic-trees-response.ts
new file mode 100644
index 0000000..1759eb7
--- /dev/null
+++ b/libs/nshmp-haz/www/source-logic-trees-service/source-logic-trees-response.ts
@@ -0,0 +1,11 @@
+import {Tree} from '../../../nshmp-lib/model';
+import {Response} from '../../../nshmp-ws-utils';
+
+export type SourceLogicTreesResponse = Response<
+  SourceLogicTreesRequestData,
+  Tree
+>;
+
+export interface SourceLogicTreesRequestData {
+  id: number;
+}
diff --git a/libs/nshmp-haz/www/source-logic-trees-service/source-logic-trees-usage.ts b/libs/nshmp-haz/www/source-logic-trees-service/source-logic-trees-usage.ts
new file mode 100644
index 0000000..800e4d6
--- /dev/null
+++ b/libs/nshmp-haz/www/source-logic-trees-service/source-logic-trees-usage.ts
@@ -0,0 +1,9 @@
+import {SettingGroup} from '../../../nshmp-lib/model';
+import {Response} from '../../../nshmp-ws-utils';
+import {HazardModelMetadata} from '../hazard-service';
+
+export type SourceLogicTreesUsage = Response<string, SourceLogicTreesMetadata>;
+
+export interface SourceLogicTreesMetadata extends HazardModelMetadata {
+  trees: SettingGroup[];
+}
diff --git a/libs/nshmp-haz/www/source-model.model.ts b/libs/nshmp-haz/www/source-model.model.ts
new file mode 100644
index 0000000..077ae33
--- /dev/null
+++ b/libs/nshmp-haz/www/source-model.model.ts
@@ -0,0 +1,15 @@
+import {Gmm} from '../../nshmp-lib/gmm';
+import {metadata} from '../../nshmp-ws-utils';
+
+/**
+ * Source model.
+ */
+export interface SourceModel {
+  bounds: number[];
+  gmms: Set<Gmm>;
+  imts: metadata.Parameter[];
+  map: GeoJSON.FeatureCollection<GeoJSON.Polygon>;
+  name: string;
+  siteClasses: Record<string, number>;
+  sites: GeoJSON.FeatureCollection<GeoJSON.Point>;
+}
diff --git a/libs/nshmp-haz/www/xy-data-group.model.ts b/libs/nshmp-haz/www/xy-data-group.model.ts
new file mode 100644
index 0000000..e2ec020
--- /dev/null
+++ b/libs/nshmp-haz/www/xy-data-group.model.ts
@@ -0,0 +1,14 @@
+import {XySequence} from '../../nshmp-lib/data';
+
+export interface XyDataGroup<T> {
+  label: string;
+  xLabel: string;
+  yLabel: string;
+  data: T[];
+}
+
+export interface Series {
+  id: string;
+  label: string;
+  data: XySequence;
+}
diff --git a/libs/nshmp-lib/calc/exceedance-model.util.ts b/libs/nshmp-lib/calc/exceedance-model.util.ts
new file mode 100644
index 0000000..d642c19
--- /dev/null
+++ b/libs/nshmp-lib/calc/exceedance-model.util.ts
@@ -0,0 +1,109 @@
+import {UncertaintyModel} from '../data';
+import {Maths} from './maths.util';
+
+/**
+ * No truncation; model ignores truncation level n.
+ *
+ * Compute the probability of exceeding a value.
+ * @param model to compute exceedance
+ * @param value for which to compute the exceedance probability
+ */
+const truncationOff = (model: UncertaintyModel, value: number) => {
+  return boundedCcdFn(model, value, 0.0, 1.0);
+};
+
+/**
+ * No truncation; model ignores truncation level n.
+ *
+ * Compute the probability of exceeding a value.
+ *
+ * @param model to compute exceedance
+ * @param sequence for which to compute the exceedance probability
+ */
+const truncationOffSequence = (model: UncertaintyModel, sequence: number[]) => {
+  const yValues: number[] = [];
+
+  for (const x of sequence) {
+    yValues.push(truncationOff(model, x));
+  }
+
+  return yValues;
+};
+
+/**
+ * Upper truncation only at μ + σ * n.
+ *
+ * Compute the probability of exceeding a value.
+ *
+ * @param model to compute exceedance
+ * @param value for which to compute the exceedance probability
+ */
+const truncationUpperOnly = (model: UncertaintyModel, value: number) => {
+  return boundedCcdFn(model, value, prob(model), 1.0);
+};
+
+/**
+ * Upper truncation only at μ + σ * n.
+ *
+ * Compute the probability of exceeding a value.
+ *
+ * @param model to compute exceedance
+ * @param sequence for which to compute the exceedance probability
+ */
+const truncationUpperOnlySequence = (
+  model: UncertaintyModel,
+  sequence: number[]
+) => {
+  const yValues = [];
+
+  for (const x of sequence) {
+    yValues.push(truncationUpperOnly(model, x));
+  }
+
+  return yValues;
+};
+
+/**
+ * Bounded complementary cumulative distribution. Compute the probability that
+ * a value will be exceeded, subject to upper and lower probability limits.
+ *
+ * @param model to compute exceedance
+ */
+const boundedCcdFn = (
+  model: UncertaintyModel,
+  value: number,
+  pHi: number,
+  pLo: number
+) => {
+  const p = Maths.normalCcdf(model.μ, model.σ, value);
+  return probBoundsCheck((p - pHi) / (pLo - pHi));
+};
+
+/**
+ * For truncated distributions, p may be out of range. For upper truncations,
+ * p may be less than pHi, yielding a negative value in boundedCcdFn(); for
+ * lower truncations, p may be greater than pLo, yielding a value > 1.0 in
+ * boundedCcdFn().
+ */
+const probBoundsCheck = (p: number) => {
+  return p < 0.0 ? 0.0 : p > 1.0 ? 1.0 : p;
+};
+
+/**
+ * Compute ccd value at μ + nσ.
+ *
+ * @param model to compute exceedance
+ */
+const prob = (model: UncertaintyModel) => {
+  return Maths.normalCcdf(model.μ, model.σ, model.μ + model.n * model.σ);
+};
+
+/**
+ * Export functions
+ */
+export const ExceedanceModel = {
+  truncationOff,
+  truncationOffSequence,
+  truncationUpperOnly,
+  truncationUpperOnlySequence,
+};
diff --git a/libs/nshmp-lib/calc/index.ts b/libs/nshmp-lib/calc/index.ts
new file mode 100644
index 0000000..7d54174
--- /dev/null
+++ b/libs/nshmp-lib/calc/index.ts
@@ -0,0 +1,3 @@
+/* calc export */
+export {ExceedanceModel} from './exceedance-model.util';
+export {Maths} from './maths.util';
diff --git a/libs/nshmp-lib/calc/maths.util.ts b/libs/nshmp-lib/calc/maths.util.ts
new file mode 100644
index 0000000..5a5a814
--- /dev/null
+++ b/libs/nshmp-lib/calc/maths.util.ts
@@ -0,0 +1,120 @@
+import * as d3 from 'd3-format';
+
+import {XySequence} from '../data';
+import {Imt} from '../gmm';
+import {imtToPeriod} from '../gmm/imt.model';
+
+/**
+ * Normal complementary cumulative distribution function.
+ *
+ * @param μ mean
+ * @param σ standard deviation
+ * @param x variate
+ */
+const normalCcdf = (μ: number, σ: number, x: number) => {
+  return (1.0 + erf((μ - x) / (σ * Math.sqrt(2)))) * 0.5;
+};
+
+/**
+ * Error function approximation of Abramowitz and Stegun, formula 7.1.26 in
+ * the <em>Handbook of Mathematical Functions with Formulas, Graphs, and
+ * Mathematical Tables</em>. Although the approximation is only valid for
+ * x ≥ 0, because erf(x) is an odd function,
+ * erf(x) = −erf(−x) and negative values are supported.
+ */
+const erf = (x: number) => {
+  return x < 0.0 ? -erfBase(-x) : erfBase(x);
+};
+
+/**
+ * Round a number to specific format
+ *
+ * @param value Value to round
+ * @param scale Format scale
+ */
+const round = (value: number, scale: number) => {
+  const format = d3.format(`.${scale}f`);
+  return Number(format(value));
+};
+
+/**
+ * Calculate the response sepectrum for each IMT.
+ *
+ * @param hazards The hazard curves by imt
+ * @param returnPeriod The return period (in years) to calculate at
+ */
+const responseSpectrum = (
+  hazards: Map<Imt, XySequence>,
+  returnPeriod: number
+): XySequence => {
+  const xs: number[] = [];
+  const ys: number[] = [];
+
+  for (const [imt, xySequence] of hazards) {
+    xs.push(imtToPeriod(imt));
+    ys.push(calculateResponseSpectrum(xySequence, returnPeriod));
+  }
+
+  return {
+    xs,
+    ys,
+  };
+};
+
+const calculateResponseSpectrum = (
+  xySequence: XySequence,
+  returnPeriod: number
+): number => {
+  returnPeriod = 1 / returnPeriod;
+  const xValues = xySequence.xs;
+  const yValues = xySequence.ys;
+
+  const afeIndexBelowReturnPeriod = yValues.findIndex(y => {
+    return y < returnPeriod;
+  });
+
+  const x0 = xValues[afeIndexBelowReturnPeriod - 1];
+  const x1 = xValues[afeIndexBelowReturnPeriod];
+  const y0 = yValues[afeIndexBelowReturnPeriod - 1];
+  const y1 = yValues[afeIndexBelowReturnPeriod];
+  const x = returnPeriodInterpolation(x0, x1, y0, y1, returnPeriod);
+  return isNaN(x) ? x : round(x, 6);
+};
+
+const returnPeriodInterpolation = (
+  x0: number,
+  x1: number,
+  y0: number,
+  y1: number,
+  returnPeriod: number
+): number => {
+  return x0 + (Math.log10(returnPeriod / y0) * (x1 - x0)) / Math.log10(y1 / y0);
+};
+
+const erfBase = (x: number) => {
+  const P = 0.3275911;
+  const A1 = 0.254829592;
+  const A2 = -0.284496736;
+  const A3 = 1.421413741;
+  const A4 = -1.453152027;
+  const A5 = 1.061405429;
+
+  const t = 1 / (1 + P * x);
+  const tsq = t * t;
+
+  return (
+    1 -
+    (A1 * t + A2 * tsq + A3 * tsq * t + A4 * tsq * tsq + A5 * tsq * tsq * t) *
+      Math.exp(-x * x)
+  );
+};
+
+/**
+ * Export functions
+ */
+export const Maths = {
+  normalCcdf,
+  erf,
+  round,
+  responseSpectrum,
+};
diff --git a/libs/nshmp-lib/data/index.ts b/libs/nshmp-lib/data/index.ts
new file mode 100644
index 0000000..cbb3b00
--- /dev/null
+++ b/libs/nshmp-lib/data/index.ts
@@ -0,0 +1,2 @@
+export * from './uncertainty-model.model';
+export * from './xy-sequence.model';
diff --git a/libs/nshmp-lib/data/uncertainty-model.model.ts b/libs/nshmp-lib/data/uncertainty-model.model.ts
new file mode 100644
index 0000000..4390c8c
--- /dev/null
+++ b/libs/nshmp-lib/data/uncertainty-model.model.ts
@@ -0,0 +1,13 @@
+/**
+ * Container for mean, standard deviation, and truncation level.
+ */
+export interface UncertaintyModel {
+  /** Mean */
+  μ: number;
+
+  /** Standard deviation */
+  σ: number;
+
+  /** Truncation level */
+  n: number;
+}
diff --git a/libs/nshmp-lib/data/xy-sequence.model.ts b/libs/nshmp-lib/data/xy-sequence.model.ts
new file mode 100644
index 0000000..f3030ad
--- /dev/null
+++ b/libs/nshmp-lib/data/xy-sequence.model.ts
@@ -0,0 +1,4 @@
+export interface XySequence {
+  xs: number[];
+  ys: number[];
+}
diff --git a/libs/nshmp-lib/geo/basin.model.ts b/libs/nshmp-lib/geo/basin.model.ts
new file mode 100644
index 0000000..279106c
--- /dev/null
+++ b/libs/nshmp-lib/geo/basin.model.ts
@@ -0,0 +1,25 @@
+import {Region} from './region.model';
+
+export enum Basin {
+  BAY_AREA = 'Bay Area',
+  LOS_ANGELES = 'Los Angeles',
+  PUGET_LOWLAND = 'Puget Lowland',
+  WASATCH_FRONT = 'Wasatch Front',
+}
+
+export interface BasinRegion {
+  title: string;
+  basin: Basin;
+  model: string;
+  region: Region;
+}
+
+export interface BasinValues {
+  z1p0: BasinValue;
+  z2p5: BasinValue;
+}
+
+export interface BasinValue {
+  model: string;
+  value: number;
+}
diff --git a/libs/nshmp-lib/geo/index.ts b/libs/nshmp-lib/geo/index.ts
new file mode 100644
index 0000000..fe5e905
--- /dev/null
+++ b/libs/nshmp-lib/geo/index.ts
@@ -0,0 +1,3 @@
+export * from './basin.model';
+export * from './region.model';
+export * from './site.model';
diff --git a/libs/nshmp-lib/geo/region.model.ts b/libs/nshmp-lib/geo/region.model.ts
new file mode 100644
index 0000000..67a67a9
--- /dev/null
+++ b/libs/nshmp-lib/geo/region.model.ts
@@ -0,0 +1,7 @@
+import {Location} from './site.model';
+
+export interface Region {
+  name: string;
+  border: Location[];
+  interiors: Location[][];
+}
diff --git a/libs/nshmp-lib/geo/site.model.ts b/libs/nshmp-lib/geo/site.model.ts
new file mode 100644
index 0000000..7dc22cb
--- /dev/null
+++ b/libs/nshmp-lib/geo/site.model.ts
@@ -0,0 +1,17 @@
+export interface Site {
+  location: Location;
+  vs30: number;
+  vsInferred: boolean;
+  z1p0: number;
+  z2p5: number;
+}
+
+export interface Location {
+  latitude: number;
+  longitude: number;
+}
+
+export interface Bounds {
+  min: Location;
+  max: Location;
+}
diff --git a/libs/nshmp-lib/gmm/gmm-input.model.ts b/libs/nshmp-lib/gmm/gmm-input.model.ts
new file mode 100644
index 0000000..8a8f2a6
--- /dev/null
+++ b/libs/nshmp-lib/gmm/gmm-input.model.ts
@@ -0,0 +1,15 @@
+export interface GmmInput {
+  Mw: number;
+  rJB: number;
+  rRup: number;
+  rX: number;
+  dip: number;
+  width: number;
+  zTor: number;
+  zHyp: number;
+  rake: number;
+  vs30: number;
+  vsInf: boolean;
+  z1p0: number;
+  z2p5: number;
+}
diff --git a/libs/nshmp-lib/gmm/gmm.model.ts b/libs/nshmp-lib/gmm/gmm.model.ts
new file mode 100644
index 0000000..91bb1fd
--- /dev/null
+++ b/libs/nshmp-lib/gmm/gmm.model.ts
@@ -0,0 +1,190 @@
+export enum Gmm {
+  /* Active continent NGA-West1 WUS 2008 */
+
+  BA_08,
+  CB_08,
+  CY_08,
+
+  /* Active continent NGA-West2 WUS 2014 */
+
+  ASK_14,
+  BSSA_14,
+  CB_14,
+  CY_14,
+  IDRISS_14,
+
+  /*
+   * Active continent NGA-West2 WUS 2018. These have basin amplification-only
+   * effects implemented.
+   */
+
+  ASK_14_BASIN,
+  BSSA_14_BASIN,
+  CB_14_BASIN,
+  CY_14_BASIN,
+
+  /* Active Continent AK 2007, HI 1998 */
+
+  AS_97,
+  BJF_97,
+  CAMPBELL_97,
+  CB_03,
+  MT_97,
+  SADIGH_97,
+
+  /* Subduction Interface and Slab WUS 2008 2014 2018, AK 2007 */
+
+  AB_03_GLOBAL_INTERFACE,
+  AB_03_GLOBAL_SLAB,
+  AB_03_GLOBAL_SLAB_LOW_SAT,
+  AB_03_CASCADIA_INTERFACE,
+  AB_03_CASCADIA_SLAB,
+  AB_03_CASCADIA_SLAB_LOW_SAT,
+  AM_09_INTERFACE,
+  AM_09_INTERFACE_BASIN,
+  NGA_SUB_USGS_INTERFACE,
+  NGA_SUB_USGS_SLAB,
+  NGA_SUB_USGS_INTERFACE_NO_EPI,
+  NGA_SUB_USGS_SLAB_NO_EPI,
+  BCHYDRO_12_INTERFACE,
+  BCHYDRO_12_SLAB,
+  BCHYDRO_12_INTERFACE_BASIN,
+  BCHYDRO_12_SLAB_BASIN,
+  BCHYDRO_12_INTERFACE_BACKARC,
+  BCHYDRO_12_SLAB_BACKARC,
+  BCHYDRO_12_INTERFACE_BASIN_BACKARC,
+  BCHYDRO_12_SLAB_BASIN_BACKARC,
+  YOUNGS_97_INTERFACE,
+  YOUNGS_97_SLAB,
+  ZHAO_06_INTERFACE,
+  ZHAO_06_SLAB,
+  ZHAO_06_INTERFACE_BASIN,
+  ZHAO_06_SLAB_BASIN,
+
+  /* Stable continent CEUS 2008 2014 */
+
+  AB_06_PRIME,
+  AB_06_140BAR,
+  AB_06_200BAR,
+  ATKINSON_08_PRIME,
+  CAMPBELL_03,
+  FRANKEL_96,
+  PEZESHK_11,
+  SILVA_02,
+  SOMERVILLE_01,
+  TP_05,
+  TORO_97_MW,
+
+  /* Johnston mag converting flavors of CEUS 2008 */
+
+  AB_06_140BAR_J,
+  AB_06_200BAR_J,
+  CAMPBELL_03_J,
+  FRANKEL_96_J,
+  SILVA_02_J,
+  TP_05_J,
+
+  /* Atkinson Boore mag converting flavors of CEUS 2008 */
+
+  AB_06_140BAR_AB,
+  AB_06_200BAR_AB,
+  CAMPBELL_03_AB,
+  FRANKEL_96_AB,
+  SILVA_02_AB,
+  TP_05_AB,
+  TORO_97_MB,
+
+  /* Other */
+
+  ATKINSON_10,
+  ATKINSON_15,
+  GK_15,
+  WONG_15,
+  ZHAO_16_SHALLOW_CRUST,
+  ZHAO_16_UPPER_MANTLE,
+  ZHAO_16_INTERFACE,
+  ZHAO_16_SLAB,
+  MCVERRY_00_CRUSTAL,
+  MCVERRY_00_INTERFACE,
+  MCVERRY_00_SLAB,
+  MCVERRY_00_VOLCANIC,
+
+  /* NGA-East for USGS */
+
+  NGA_EAST_USGS,
+  NGA_EAST_USGS_1,
+  NGA_EAST_USGS_2,
+  NGA_EAST_USGS_3,
+  NGA_EAST_USGS_4,
+  NGA_EAST_USGS_5,
+  NGA_EAST_USGS_6,
+  NGA_EAST_USGS_7,
+  NGA_EAST_USGS_8,
+  NGA_EAST_USGS_9,
+  NGA_EAST_USGS_10,
+  NGA_EAST_USGS_11,
+  NGA_EAST_USGS_12,
+  NGA_EAST_USGS_13,
+  NGA_EAST_USGS_14,
+  NGA_EAST_USGS_15,
+  NGA_EAST_USGS_16,
+  NGA_EAST_USGS_17,
+
+  /* NGA-East USGS Seed Tree */
+
+  NGA_EAST_USGS_SEEDS,
+
+  /* NGA-East Seed Models */
+
+  NGA_EAST_SEED_1CCSP,
+  NGA_EAST_SEED_1CVSP,
+  NGA_EAST_SEED_2CCSP,
+  NGA_EAST_SEED_2CVSP,
+  NGA_EAST_SEED_B_A04,
+  NGA_EAST_SEED_B_AB14,
+  NGA_EAST_SEED_B_AB95,
+  NGA_EAST_SEED_B_BCA10D,
+  NGA_EAST_SEED_B_BS11,
+  NGA_EAST_SEED_B_SGD02,
+  NGA_EAST_SEED_FRANKEL,
+  NGA_EAST_SEED_GRAIZER,
+  NGA_EAST_SEED_GRAIZER16,
+  NGA_EAST_SEED_GRAIZER17,
+  NGA_EAST_SEED_HA15,
+  NGA_EAST_SEED_PEER_EX,
+  NGA_EAST_SEED_PEER_GP,
+  NGA_EAST_SEED_PZCT15_M1SS,
+  NGA_EAST_SEED_PZCT15_M2ES,
+  NGA_EAST_SEED_SP15,
+  NGA_EAST_SEED_SP16,
+  NGA_EAST_SEED_YA15,
+
+  /**
+   * 2014 CEUS weight-averaged GMM. This is the fault-variant that includes
+   * Somerville ,2011).
+   */
+  COMBINED_CEUS_2014,
+
+  /**
+   * 2018 CEUS weight-averaged GMM.
+   */
+  COMBINED_CEUS_2018,
+
+  /**
+   * 2018 WUS weight-averaged GMM. These are the basin-amplifying flavors of
+   * NGA-West2 and does not include Idriss.
+   */
+  COMBINED_WUS_2014_41,
+
+  /**
+   * 2018 WUS weight-averaged GMM. These are the basin-amplifying flavors of
+   * NGA-West2 and does not include Idriss.
+   */
+  COMBINED_WUS_2014_42,
+
+  /**
+   * 2018 WUS weight-averaged GMM. These are the basin-amplifying flavors of
+   * NGA-West2 and does not include Idriss.
+   */
+  COMBINED_WUS_2018,
+}
diff --git a/libs/nshmp-lib/gmm/imt.model.ts b/libs/nshmp-lib/gmm/imt.model.ts
new file mode 100644
index 0000000..c23e2e1
--- /dev/null
+++ b/libs/nshmp-lib/gmm/imt.model.ts
@@ -0,0 +1,119 @@
+export enum Imt {
+  PGA = 'PGA',
+  PGV = 'PGV',
+  PGD = 'PGD',
+  ASI = 'ASI',
+  SI = 'SI',
+  DSI = 'DSI',
+  CAV = 'CAV',
+  DS575 = 'DS575',
+  DS595 = 'DS595',
+  AI = 'AI',
+  SA0P01 = 'SA0P01',
+  SA0P02 = 'SA0P02',
+  SA0P025 = 'SA0P025',
+  SA0P03 = 'SA0P03',
+  SA0P04 = 'SA0P04',
+  SA0P05 = 'SA0P05',
+  SA0P06 = 'SA0P06',
+  SA0P07 = 'SA0P07',
+  SA0P075 = 'SA0P075',
+  SA0P08 = 'SA0P08',
+  SA0P09 = 'SA0P09',
+  SA0P1 = 'SA0P1',
+  SA0P12 = 'SA0P12',
+  SA0P14 = 'SA0P14',
+  SA0P15 = 'SA0P15',
+  SA0P16 = 'SA0P16',
+  SA0P17 = 'SA0P17',
+  SA0P18 = 'SA0P18',
+  SA0P2 = 'SA0P2',
+  SA0P25 = 'SA0P25',
+  SA0P3 = 'SA0P3',
+  SA0P35 = 'SA0P35',
+  SA0P4 = 'SA0P4',
+  SA0P45 = 'SA0P45',
+  SA0P5 = 'SA0P5',
+  SA0P6 = 'SA0P6',
+  SA0P7 = 'SA0P7',
+  SA0P75 = 'SA0P75',
+  SA0P8 = 'SA0P8',
+  SA0P9 = 'SA0P9',
+  SA1P0 = 'SA1P0',
+  SA1P25 = 'SA1P25',
+  SA1P5 = 'SA1P5',
+  SA2P0 = 'SA2P0',
+  SA2P5 = 'SA2P5',
+  SA3P0 = 'SA3P0',
+  SA3P5 = 'SA3P5',
+  SA4P0 = 'SA4P0',
+  SA4P5 = 'SA4P5',
+  SA5P0 = 'SA5P0',
+  SA6P0 = 'SA6P0',
+  SA7P5 = 'SA7P5',
+  SA10P0 = 'SA10P0',
+}
+
+export const imtToPeriod = (imt: Imt): number => {
+  if (imt === Imt.PGA || imt === Imt.PGV) {
+    return 0.001;
+  } else if (imt.startsWith('SA')) {
+    return Number(imt.substring(2).replace('P', '.'));
+  } else {
+    throw new Error(`Cannot convert ${imt}`);
+  }
+};
+
+export const imtToString = (imt: Imt): string => {
+  switch (imt) {
+    case Imt.PGA:
+      return 'Peak Ground Acceleration';
+    case Imt.PGV:
+      return 'Peak Ground Velocity';
+    case Imt.PGD:
+      return 'Peak Ground Displacement';
+    case Imt.AI:
+      return 'Arias Intensity';
+    case Imt.ASI:
+      return 'Acceleration Spectrum Intensity';
+    case Imt.DSI:
+      return 'Displacement Spectrum Intensity';
+    case Imt.SI:
+      return 'Spectrum intensity';
+    case Imt.CAV:
+      return 'Cumulative Absolute Velocity';
+    case Imt.DS575:
+      return 'Significant Duration 5-75%';
+    case Imt.DS595:
+      return 'Significant Duration 5-95%';
+    default:
+      return `${imtToPeriod(imt)} Second Spectral Acceleration`;
+  }
+};
+
+export const imtToUnits = (imt: Imt): string => {
+  switch (imt) {
+    case Imt.PGA:
+      return 'g';
+    case Imt.PGV:
+      return 'cm/s';
+    case Imt.PGD:
+      return 'cm';
+    case Imt.AI:
+      return 'm/s';
+    case Imt.ASI:
+      return 'gâ‹…s';
+    case Imt.DSI:
+      return 'cmâ‹…s';
+    case Imt.SI:
+      return 'cmâ‹…s/s';
+    case Imt.CAV:
+      return 'gâ‹…s';
+    case Imt.DS575:
+      return 's';
+    case Imt.DS595:
+      return 's';
+    default:
+      return 'g';
+  }
+};
diff --git a/libs/nshmp-lib/gmm/index.ts b/libs/nshmp-lib/gmm/index.ts
new file mode 100644
index 0000000..a9cb89d
--- /dev/null
+++ b/libs/nshmp-lib/gmm/index.ts
@@ -0,0 +1,5 @@
+export * from './gmm.model';
+export * from './gmm-input.model';
+export * from './imt.model';
+export * from './nehrp-site-class.model';
+export * from './rate-type.model';
diff --git a/libs/nshmp-lib/gmm/nehrp-site-class.model.ts b/libs/nshmp-lib/gmm/nehrp-site-class.model.ts
new file mode 100644
index 0000000..90c140c
--- /dev/null
+++ b/libs/nshmp-lib/gmm/nehrp-site-class.model.ts
@@ -0,0 +1,35 @@
+/**
+ * NEHRP site class.
+ *
+ * Ported from: https://code.usgs.gov/ghsc/nshmp/nshmp-lib
+ *    /-/blob/master/src/main/java/gov/usgs/earthquake/nshmp/gmm/NehrpSiteClass.java
+ */
+export enum NehrpSiteClass {
+  A = 'A',
+  AB = 'AB',
+  B = 'B',
+  BC = 'BC',
+  C = 'C',
+  CD = 'CD',
+  D = 'D',
+  DE = 'DE',
+  E = 'E',
+}
+
+/**
+ * The NEHRP site class condition.
+ *
+ * Ported from: https://code.usgs.gov/ghsc/nshmp/nshmp-lib
+ *    /-/blob/master/src/main/java/gov/usgs/earthquake/nshmp/gmm/NehrpSiteClass.java
+ */
+export enum NehrpCondition {
+  A = 'very hard rock',
+  AB = 'hard rock',
+  B = 'medium hard rock',
+  BC = 'soft rock',
+  C = 'very dense soil or hard clay',
+  CD = 'dense sand or very stiff clay',
+  D = 'medium dense sand or stiff clay',
+  DE = 'loose sand or medium stiff clay',
+  E = 'very loose sand or soft clay',
+}
diff --git a/libs/nshmp-lib/gmm/rate-type.model.ts b/libs/nshmp-lib/gmm/rate-type.model.ts
new file mode 100644
index 0000000..e31b35e
--- /dev/null
+++ b/libs/nshmp-lib/gmm/rate-type.model.ts
@@ -0,0 +1,5 @@
+export enum RateType {
+  RECURRENCE,
+  SLIP_RATE,
+  VERTICAL_SLIP_RATE,
+}
diff --git a/libs/nshmp-lib/index.ts b/libs/nshmp-lib/index.ts
new file mode 100644
index 0000000..ea79905
--- /dev/null
+++ b/libs/nshmp-lib/index.ts
@@ -0,0 +1,5 @@
+export * as calc from './calc';
+export * as data from './data';
+export * as geo from './geo';
+export * as model from './model';
+export * as nshm from './nshm';
diff --git a/libs/nshmp-lib/model/index.ts b/libs/nshmp-lib/model/index.ts
new file mode 100644
index 0000000..624e47b
--- /dev/null
+++ b/libs/nshmp-lib/model/index.ts
@@ -0,0 +1,4 @@
+export * from './mfd';
+export * from './models';
+export * from './source-type';
+export * from './tectonic-setting';
diff --git a/libs/nshmp-lib/model/mfd.ts b/libs/nshmp-lib/model/mfd.ts
new file mode 100644
index 0000000..31e91f7
--- /dev/null
+++ b/libs/nshmp-lib/model/mfd.ts
@@ -0,0 +1,36 @@
+import {XySequence} from '../data';
+
+export enum MfdType {
+  GR = 'GR',
+  GR_MMAX_GR = 'GR_MMAX_GR',
+  GR_MMAX_SINGLE = 'GR_MMAX_SINGLE',
+  GR_TAPER = 'GR_TAPER',
+  INCR = 'INCR',
+  SINGLE = 'SINGLE',
+}
+
+export interface GutenbergRichter extends MfdProperties {
+  a: number;
+  b: number;
+  Δm: number;
+  mMin: number;
+  mMax: number;
+}
+
+export interface Mfd {
+  data: XySequence;
+  props: MfdProperties;
+}
+
+export interface MfdProperties {
+  type: MfdType;
+}
+
+export interface Single extends MfdProperties {
+  m: number;
+  rate: number;
+}
+
+export interface TaperedGr extends GutenbergRichter {
+  mc: number;
+}
diff --git a/libs/nshmp-lib/model/models.ts b/libs/nshmp-lib/model/models.ts
new file mode 100644
index 0000000..238af8e
--- /dev/null
+++ b/libs/nshmp-lib/model/models.ts
@@ -0,0 +1,42 @@
+import {XySequence} from '../data';
+import {Mfd} from './mfd';
+import {SourceType} from './source-type';
+import {TectonicSettings} from './tectonic-setting';
+
+export interface MfdBranch {
+  id: string;
+  mfd: Mfd;
+  weight: number;
+}
+
+export interface SettingGroup {
+  data: SourceGroup[];
+  setting: TectonicSettings;
+}
+
+export interface SourceBranch {
+  branch: string;
+  mfds: MfdBranch[];
+  name: string;
+  path: string;
+  weight: number;
+}
+
+export interface SourceGroup {
+  data: TreeInfo[];
+  type: SourceType;
+}
+
+export interface Tree {
+  branches: SourceBranch[];
+  id: number;
+  name: string;
+  setting: TectonicSettings;
+  totalMfd: XySequence;
+  type: SourceType;
+}
+
+export interface TreeInfo {
+  id: number;
+  name: string;
+}
diff --git a/libs/nshmp-lib/model/source-type.ts b/libs/nshmp-lib/model/source-type.ts
new file mode 100644
index 0000000..059b13b
--- /dev/null
+++ b/libs/nshmp-lib/model/source-type.ts
@@ -0,0 +1,59 @@
+import {capitalCase} from 'change-case';
+
+/**
+ * Identifier for different earthquake {@link Source} types. These are declared
+ * in a preferred order of iteration, with potentially longer running source
+ * types coming first.
+ *
+ * Ported from: https://code.usgs.gov/ghsc/nshmp/nshmp-lib
+ *    /-/blob/master/src/main/java/gov/usgs/earthquake/nshmp/model/SourceType.java
+ */
+export enum SourceType {
+  /** Finite fault. */
+  FAULT = 'FAULT',
+
+  /** Fault cluster. */
+  FAULT_CLUSTER = 'FAULT_CLUSTER',
+
+  /** Fault system. */
+  FAULT_SYSTEM = 'FAULT_SYSTEM',
+
+  /** Gridded (background) seismicity. */
+  GRID = 'GRID',
+
+  /** Subduction interface. */
+  INTERFACE = 'INTERFACE',
+
+  /** Subduction intraslab. */
+  INTRASLAB = 'INSTRASLAB',
+
+  /** The combined source types, used in web services */
+  TOTAL = 'TOTAL',
+
+  /** Zone (a.k.a. Area). */
+  ZONE = 'ZONE',
+}
+
+/**
+ * Returns the capital case of the source type string.
+ *
+ * @param sourceType The source type
+ */
+export function sourceTypeToString(sourceType: SourceType): string {
+  return capitalCase(sourceType);
+}
+
+/**
+ * Converts source type string into a source type.
+ *
+ * @param s The pascal case of the source type
+ */
+export function sourceTypeFromString(s: string): SourceType {
+  const sourceType = Object.values(SourceType).find(type => type === s);
+
+  if (sourceType === undefined) {
+    throw new Error(`Source type [${s}] does not exists`);
+  }
+
+  return sourceType;
+}
diff --git a/libs/nshmp-lib/model/tectonic-setting.ts b/libs/nshmp-lib/model/tectonic-setting.ts
new file mode 100644
index 0000000..7741e2b
--- /dev/null
+++ b/libs/nshmp-lib/model/tectonic-setting.ts
@@ -0,0 +1,19 @@
+import {capitalCase} from 'change-case';
+
+export enum TectonicSettings {
+  /** Active, shallow crust. */
+  ACTIVE_CRUST = 'ACTIVE_CRUST',
+
+  /** Stable, shallow crust. */
+  STABLE_CRUST = 'STABLE_CRUST',
+
+  /** Subduction */
+  SUBDUCTION = 'SUBDUCTION',
+
+  /** Volcanic. */
+  VOLCANIC = 'VOLCANIC',
+}
+
+export function tectonicSettingsToString(setting: TectonicSettings): string {
+  return capitalCase(setting);
+}
diff --git a/libs/nshmp-lib/nshm/index.ts b/libs/nshmp-lib/nshm/index.ts
new file mode 100644
index 0000000..1fe7851
--- /dev/null
+++ b/libs/nshmp-lib/nshm/index.ts
@@ -0,0 +1,2 @@
+export * from './nshm.model';
+export * from './nshm-region.model';
diff --git a/libs/nshmp-lib/nshm/nshm-region.model.ts b/libs/nshmp-lib/nshm/nshm-region.model.ts
new file mode 100644
index 0000000..fa97606
--- /dev/null
+++ b/libs/nshmp-lib/nshm/nshm-region.model.ts
@@ -0,0 +1,26 @@
+/**
+ * NSHM regions.
+ */
+export enum NshmRegion {
+  ALASKA = 'ALASKA',
+  CONUS = 'CONUS',
+  HAWAII = 'HAWAII',
+}
+
+/**
+ * Returns the short form of the region.
+ *
+ * @param region The NSHM region
+ */
+export function nshmRegionShort(region: NshmRegion): string {
+  switch (region) {
+    case NshmRegion.ALASKA:
+      return 'AK';
+    case NshmRegion.CONUS:
+      return NshmRegion.CONUS;
+    case NshmRegion.HAWAII:
+      return 'HI';
+    default:
+      throw new Error(`Region [${region}] not supported`);
+  }
+}
diff --git a/libs/nshmp-lib/nshm/nshm.model.ts b/libs/nshmp-lib/nshm/nshm.model.ts
new file mode 100644
index 0000000..b041232
--- /dev/null
+++ b/libs/nshmp-lib/nshm/nshm.model.ts
@@ -0,0 +1,45 @@
+import {NshmRegion} from './nshm-region.model';
+
+/**
+ * ID for NSHMs
+ */
+export enum NshmId {
+  ALASKA_2007 = 'ALASKA_2007',
+  ALASKA_2023 = 'ALASKA_2023',
+  AMSAM_2012 = 'AMSAM_2012',
+  CONUS_2018 = 'CONUS_2018',
+  CONUS_2023 = 'CONUS_2023',
+  GNMI_2012 = 'GNMI_2012',
+  HAWAII_2021 = 'HAWAII_2021',
+  PRVI_2003 = 'PRVI_2003',
+}
+
+/**
+ * Returns the region associated with the NSHM.
+ *
+ * @param nshmId The NSHM id
+ */
+export function nshmRegion(nshmId: NshmId): NshmRegion {
+  const region = nshmId.split('_').shift();
+
+  if (region === undefined) {
+    throw new Error(`NSHM ${nshmId} not supported`);
+  }
+
+  return region as NshmRegion;
+}
+
+/**
+ * Returns the year associated with NSHM.
+ *
+ * @param nshmId The NSHM id
+ */
+export function nshmYear(nshmId: NshmId): number {
+  const year = nshmId.split('_').pop();
+
+  if (year === undefined) {
+    throw new Error(`NSHM ${nshmId} not supported`);
+  }
+
+  return Number.parseInt(year);
+}
diff --git a/libs/nshmp-ws-static/index.ts b/libs/nshmp-ws-static/index.ts
new file mode 100644
index 0000000..eefa09d
--- /dev/null
+++ b/libs/nshmp-ws-static/index.ts
@@ -0,0 +1,2 @@
+export * from './static-hazard-response.model';
+export * from './static-hazard-usage.model';
diff --git a/libs/nshmp-ws-static/static-hazard-response.model.ts b/libs/nshmp-ws-static/static-hazard-response.model.ts
new file mode 100644
index 0000000..a05c9a1
--- /dev/null
+++ b/libs/nshmp-ws-static/static-hazard-response.model.ts
@@ -0,0 +1,50 @@
+import {XySequence} from '../nshmp-lib/data';
+import {Response} from '../nshmp-ws-utils';
+import {Parameter} from '../nshmp-ws-utils/metadata';
+
+export type StaticHazardResponse = Response<
+  StaticRequestData,
+  StaticResponseData<HazardResponseMetadata>[][]
+>;
+
+export type StaticHazardResponseSiteClass = Response<
+  StaticRequestDataSiteClass,
+  StaticResponseData<HazardResponseMetadata>[]
+>;
+
+export type StaticGroundMotionResponse = Response<
+  StaticRequestData,
+  StaticResponseData<GroundMotionResponseMetadata>[]
+>;
+
+export type StaticGroundMotionResponseSiteClass = Response<
+  StaticRequestData,
+  StaticResponseData<GroundMotionResponseMetadata>
+>;
+export interface StaticRequestData {
+  latitude: number;
+  longitude: number;
+}
+
+export interface StaticRequestDataSiteClass extends StaticRequestData {
+  siteClass: string;
+}
+
+export interface StaticResponseData<T extends StaticResponseMetadata> {
+  metadata: T;
+  data: XySequence;
+}
+
+export interface StaticResponseMetadata {
+  siteClass: string;
+  xLabel: string;
+  yLabel: string;
+}
+
+export interface HazardResponseMetadata extends StaticResponseMetadata {
+  imt: Parameter;
+}
+
+export interface GroundMotionResponseMetadata extends StaticResponseMetadata {
+  imtValues: Record<string, number>;
+}
diff --git a/libs/nshmp-ws-static/static-hazard-usage.model.ts b/libs/nshmp-ws-static/static-hazard-usage.model.ts
new file mode 100644
index 0000000..43c24c2
--- /dev/null
+++ b/libs/nshmp-ws-static/static-hazard-usage.model.ts
@@ -0,0 +1,54 @@
+import {Response} from '../nshmp-ws-utils';
+import {DoubleParameter, Parameter} from '../nshmp-ws-utils/metadata';
+
+export type StaticHazardUsage = Response<string, StaticHazardUsageResponse>;
+
+export interface StaticHazardUsageResponse {
+  description: string;
+  syntax: string[];
+  models: HazardSourceModel;
+  vs30: DoubleParameter;
+}
+
+export interface HazardSourceModel {
+  imts: Parameter[];
+  latitude: DoubleParameter;
+  longitude: DoubleParameter;
+  map: GeoJSON.FeatureCollection<GeoJSON.Polygon>;
+  name: string;
+  netcdfMetadata: NetcdfMetadata;
+  siteClasses: Record<string, number>;
+  sites: GeoJSON.FeatureCollection<GeoJSON.Point>;
+}
+
+export interface NetcdfMetadata {
+  netcdfFile: string;
+  scienceBaseMetadata: object;
+}
+
+export interface ScienceBaseMetadata {
+  catalogId: string;
+  dataType: string;
+  description: string;
+  gridStep: number;
+  history: string;
+  label: string;
+  region: string;
+  scieneBaseInfo: ScienceBaseInfo[];
+  year: number;
+}
+
+export interface ScienceBaseInfo {
+  id: string;
+  file: string;
+  files: CatalogFileInfo[];
+  scienceBaseVersion: string;
+  title: string;
+  url: string;
+}
+
+export interface CatalogFileInfo {
+  file: string;
+  siteClass: string;
+  vs30: string;
+}
diff --git a/libs/nshmp-ws-utils/index.ts b/libs/nshmp-ws-utils/index.ts
new file mode 100644
index 0000000..f36b209
--- /dev/null
+++ b/libs/nshmp-ws-utils/index.ts
@@ -0,0 +1,4 @@
+export * as metadata from './metadata';
+export * from './response.model';
+export * from './service-error.model';
+export * from './status.model';
diff --git a/libs/nshmp-ws-utils/metadata/double-parameter.model.ts b/libs/nshmp-ws-utils/metadata/double-parameter.model.ts
new file mode 100644
index 0000000..32c53f6
--- /dev/null
+++ b/libs/nshmp-ws-utils/metadata/double-parameter.model.ts
@@ -0,0 +1,12 @@
+/**
+ * Double parameter metadata.
+ *
+ * Ported from: https://code.usgs.gov/ghsc/nshmp/nshmp-haz-v2
+ *  /-/blob/master/src/main/java/gov/usgs/earthquake/nshmp/www/meta/DoubleParameter.java
+ */
+export interface DoubleParameter {
+  name: string;
+  units: string;
+  min: number;
+  max: number;
+}
diff --git a/libs/nshmp-ws-utils/metadata/enum-parameter.ts b/libs/nshmp-ws-utils/metadata/enum-parameter.ts
new file mode 100644
index 0000000..53f9a47
--- /dev/null
+++ b/libs/nshmp-ws-utils/metadata/enum-parameter.ts
@@ -0,0 +1,18 @@
+/**
+ * Enum parameter from nshmp usage.
+ */
+export interface EnumParameter<T> {
+  label: string;
+  type: string;
+  values: T[];
+}
+
+/**
+ * Enum parameter values from nshmp usage.
+ */
+export interface EnumParameterValues {
+  id: number;
+  value: string;
+  display: string;
+  displayorder: number;
+}
diff --git a/libs/nshmp-ws-utils/metadata/index.ts b/libs/nshmp-ws-utils/metadata/index.ts
new file mode 100644
index 0000000..99f5dfe
--- /dev/null
+++ b/libs/nshmp-ws-utils/metadata/index.ts
@@ -0,0 +1,5 @@
+export * from './double-parameter.model';
+export * from './enum-parameter';
+export * from './parameter.model';
+export * from './server.model';
+export * from './string-parameter.model';
diff --git a/libs/nshmp-ws-utils/metadata/parameter.model.ts b/libs/nshmp-ws-utils/metadata/parameter.model.ts
new file mode 100644
index 0000000..1162afd
--- /dev/null
+++ b/libs/nshmp-ws-utils/metadata/parameter.model.ts
@@ -0,0 +1,10 @@
+/**
+ * Simple parameter.
+ *
+ * Ported from: https://code.usgs.gov/ghsc/nshmp/nshmp-haz-v2
+ *    /-/blob/master/src/main/java/gov/usgs/earthquake/nshmp/www/meta/Parameter.java
+ */
+export interface Parameter {
+  display: string;
+  value: string;
+}
diff --git a/libs/nshmp-ws-utils/metadata/server.model.ts b/libs/nshmp-ws-utils/metadata/server.model.ts
new file mode 100644
index 0000000..ee229f1
--- /dev/null
+++ b/libs/nshmp-ws-utils/metadata/server.model.ts
@@ -0,0 +1,11 @@
+/**
+ * Server information from responses.
+ *
+ * Ported from: https://code.usgs.gov/ghsc/nshmp/nshmp-haz-v2
+ *    /-/blob/master/src/main/java/gov/usgs/earthquake/nshmp/www/meta/Metadata.java
+ */
+export interface Server {
+  threads: number;
+  timer: string;
+  version: string;
+}
diff --git a/libs/nshmp-ws-utils/metadata/string-parameter.model.ts b/libs/nshmp-ws-utils/metadata/string-parameter.model.ts
new file mode 100644
index 0000000..5f4a40b
--- /dev/null
+++ b/libs/nshmp-ws-utils/metadata/string-parameter.model.ts
@@ -0,0 +1,9 @@
+export interface StringParameter<T> {
+  label: string;
+  values: T[];
+}
+
+export interface StringParameterValues {
+  id: string;
+  label: string;
+}
diff --git a/libs/nshmp-ws-utils/response.model.ts b/libs/nshmp-ws-utils/response.model.ts
new file mode 100644
index 0000000..d588898
--- /dev/null
+++ b/libs/nshmp-ws-utils/response.model.ts
@@ -0,0 +1,30 @@
+import {Status} from './status.model';
+
+/**
+ * Generic web service response used for usage, error, and results.
+ */
+export interface Response<T, V> {
+  name: string;
+  date: string;
+  status: Status;
+  url: string;
+  metadata: ResponseMetadata;
+  request: T;
+  response: V;
+}
+
+export interface ResponseMetadata {
+  repositories: VersionInfo[];
+}
+
+export interface VersionInfo {
+  projectName: string;
+  url: string;
+  version: string;
+  branchName: string;
+  commitDistance: number;
+  gitHash: string;
+  gitHashFull: string;
+  isCleanTag: boolean;
+  lastTag: string;
+}
diff --git a/libs/nshmp-ws-utils/service-error.model.ts b/libs/nshmp-ws-utils/service-error.model.ts
new file mode 100644
index 0000000..fb8c032
--- /dev/null
+++ b/libs/nshmp-ws-utils/service-error.model.ts
@@ -0,0 +1,3 @@
+import {Response} from './response.model';
+
+export type ServivceError = Response<string, string>;
diff --git a/libs/nshmp-ws-utils/status.model.ts b/libs/nshmp-ws-utils/status.model.ts
new file mode 100644
index 0000000..4d52b03
--- /dev/null
+++ b/libs/nshmp-ws-utils/status.model.ts
@@ -0,0 +1,8 @@
+/**
+ * Service request status identifier.
+ */
+export enum Status {
+  ERROR = 'error',
+  SUCCESS = 'success',
+  USAGE = 'usage',
+}
diff --git a/libs/nshmp-ws/fault-sections-service/fault-sections-response.model.ts b/libs/nshmp-ws/fault-sections-service/fault-sections-response.model.ts
new file mode 100644
index 0000000..dc96730
--- /dev/null
+++ b/libs/nshmp-ws/fault-sections-service/fault-sections-response.model.ts
@@ -0,0 +1,26 @@
+import {FeatureCollection} from 'geojson';
+
+import {RateType} from '../../nshmp-lib/gmm';
+import {NshmId} from '../../nshmp-lib/nshm';
+import {Response} from '../../nshmp-ws-utils';
+
+export type FaultSectionsResponse = Response<
+  FaultSectionRequestData,
+  FeatureCollection
+>;
+
+export interface FaultSectionRequestData {
+  nshmFaultSection: NshmId;
+  raw: boolean;
+}
+
+export interface FaultSectionProperties {
+  name: string;
+  state: string | string[];
+  dip?: number;
+  lowerDepth?: number;
+  rake: number;
+  rate?: number;
+  rateType?: RateType;
+  upperDepth?: number;
+}
diff --git a/libs/nshmp-ws/fault-sections-service/fault-sections-usage.model.ts b/libs/nshmp-ws/fault-sections-service/fault-sections-usage.model.ts
new file mode 100644
index 0000000..b55636e
--- /dev/null
+++ b/libs/nshmp-ws/fault-sections-service/fault-sections-usage.model.ts
@@ -0,0 +1,16 @@
+import {NshmId} from '../../nshmp-lib/nshm';
+import {Response} from '../../nshmp-ws-utils';
+import {StringParameter} from '../../nshmp-ws-utils/metadata';
+
+export type FaultSectionUsage = Response<string, FaultSectionMetadataResponse>;
+
+export interface FaultSectionMetadataResponse {
+  description: string;
+  syntax: string[];
+  parameters: FaultSectionParameters;
+}
+
+export interface FaultSectionParameters {
+  nshm: StringParameter<NshmId>;
+  raw: StringParameter<boolean>;
+}
diff --git a/libs/nshmp-ws/fault-sections-service/index.ts b/libs/nshmp-ws/fault-sections-service/index.ts
new file mode 100644
index 0000000..380a265
--- /dev/null
+++ b/libs/nshmp-ws/fault-sections-service/index.ts
@@ -0,0 +1,2 @@
+export * from './fault-sections-response.model';
+export * from './fault-sections-usage.model';
diff --git a/libs/nshmp-ws/gmm-services/gmm-response.model.ts b/libs/nshmp-ws/gmm-services/gmm-response.model.ts
new file mode 100644
index 0000000..00c0c79
--- /dev/null
+++ b/libs/nshmp-ws/gmm-services/gmm-response.model.ts
@@ -0,0 +1,44 @@
+import {Constraint, Series, XyDataGroup} from '../../nshmp-haz';
+import {Gmm, GmmInput, Imt} from '../../nshmp-lib/gmm';
+import {Response} from '../../nshmp-ws-utils';
+
+export type GmmSpectraResponse = Response<GmmRequestData, GmmResponseData>;
+
+export type GmmDistanceResponse = Response<
+  GmmRequestDataDistance,
+  GmmResponseData
+>;
+
+export type GmmMagnitudeResponse = Response<
+  GmmRequestDataMagnitude,
+  GmmResponseData
+>;
+
+export interface GmmResponseData {
+  means: XyDataGroup<GmmSeries>;
+  sigmas: XyDataGroup<GmmSeries>;
+}
+
+export interface GmmRequestData {
+  gmms: Gmm[];
+  input: GmmInput;
+}
+
+export interface GmmRequestDataDistance extends GmmRequestData {
+  imt: Imt;
+  rMin: number;
+  rMax: number;
+}
+
+export interface GmmRequestDataMagnitude extends GmmRequestData {
+  imt: Imt;
+  mMin: number;
+  mMax: number;
+  distance: number;
+  step: number;
+}
+
+export interface GmmSeries extends Series {
+  constraints: Constraint[];
+  supportedImts: string[];
+}
diff --git a/libs/nshmp-ws/gmm-services/gmm-usage.model.ts b/libs/nshmp-ws/gmm-services/gmm-usage.model.ts
new file mode 100644
index 0000000..2399171
--- /dev/null
+++ b/libs/nshmp-ws/gmm-services/gmm-usage.model.ts
@@ -0,0 +1,145 @@
+import {Response} from '../../nshmp-ws-utils';
+import {
+  EnumParameter,
+  EnumParameterValues,
+} from '../../nshmp-ws-utils/metadata';
+
+/**
+ * Marker interface for gmm usage from nshmp-ws.
+ */
+export type GmmSpectraUsage = Response<string, GmmSpectraUsageResponse>;
+
+/**
+ * Marker interface for gmm/distance and gmm/hw-fw usage.
+ */
+export type GmmDistanceUsage = Response<string, GmmDistanceUsageResponse>;
+
+/**
+ * Marker interface for gmm/distance and gmm/hw-fw usage.
+ */
+export type GmmMagnitudeUsage = Response<string, GmmMagnitudeUsageResponse>;
+
+/**
+ * Gmm usage response in Response object.
+ */
+export interface GmmUsageResponse {
+  description: string;
+  syntax: string;
+  parameters: GmmUsageParameters;
+}
+
+/**
+ * Gmm vs distance usage response in Response object.
+ */
+export interface GmmSpectraUsageResponse extends GmmUsageResponse {
+  parameters: GmmSpectraUsageParameters;
+}
+
+/**
+ * Gmm vs distance usage response in Response object.
+ */
+export interface GmmDistanceUsageResponse extends GmmUsageResponse {
+  parameters: GmmDistanceUsageParameters;
+}
+
+/**
+ * Gmm vs magnitude usage response in Response object.
+ */
+export interface GmmMagnitudeUsageResponse extends GmmUsageResponse {
+  parameters: GmmMagnitudeUsageParameters;
+}
+
+/**
+ * gmm parameter.
+ */
+export interface GmmParameter {
+  label: string;
+  info: string;
+  values: GmmValue[];
+}
+
+/**
+ * gmm value.
+ */
+export interface GmmValue {
+  id: string;
+  label: string;
+  supportedImts: string[];
+}
+
+/**
+ * gmm group parameters.
+ */
+export interface GmmGroupParameter {
+  label: string;
+  info: string;
+  values: GmmGroupValue[];
+}
+
+/**
+ * gmm group values.
+ */
+export interface GmmGroupValue {
+  id: string;
+  label: string;
+  data: string[];
+}
+/**
+ * gmm usage parameter.
+ */
+export interface GmmUsageParameter {
+  label: string;
+  info: string;
+  units?: string;
+  min?: number;
+  max?: number;
+  value: number | boolean;
+}
+
+/**
+ * gmm usage parameters.
+ */
+export interface GmmUsageParameters {
+  Mw: GmmUsageParameter;
+  dip: GmmUsageParameter;
+  width: GmmUsageParameter;
+  zTor: GmmUsageParameter;
+  zHyp: GmmUsageParameter;
+  rake: GmmUsageParameter;
+  vs30: GmmUsageParameter;
+  vsInf: GmmUsageParameter;
+  z1p0: GmmUsageParameter;
+  z2p5: GmmUsageParameter;
+  zSed: GmmUsageParameter;
+  gmm: GmmParameter;
+  group: GmmGroupParameter;
+}
+
+/**
+ * gmm/spectra usage parameters.
+ */
+export interface GmmSpectraUsageParameters extends GmmUsageParameters {
+  rJB: GmmUsageParameter;
+  rRup: GmmUsageParameter;
+  rX: GmmUsageParameter;
+}
+
+/**
+ * gmm/distance usage parameters.
+ */
+export interface GmmDistanceUsageParameters extends GmmUsageParameters {
+  imt: EnumParameter<EnumParameterValues>;
+  rMin: GmmUsageParameter;
+  rMax: GmmUsageParameter;
+}
+
+/**
+ * gmm/magnitude usage parameters.
+ */
+export interface GmmMagnitudeUsageParameters extends GmmUsageParameters {
+  imt: EnumParameter<EnumParameterValues>;
+  mMin: GmmUsageParameter;
+  mMax: GmmUsageParameter;
+  distance: GmmUsageParameter;
+  step: GmmUsageParameter;
+}
diff --git a/libs/nshmp-ws/gmm-services/index.ts b/libs/nshmp-ws/gmm-services/index.ts
new file mode 100644
index 0000000..33d7b2f
--- /dev/null
+++ b/libs/nshmp-ws/gmm-services/index.ts
@@ -0,0 +1,2 @@
+export * from './gmm-response.model';
+export * from './gmm-usage.model';
diff --git a/libs/nshmp-ws/index.ts b/libs/nshmp-ws/index.ts
new file mode 100644
index 0000000..0dcc337
--- /dev/null
+++ b/libs/nshmp-ws/index.ts
@@ -0,0 +1,3 @@
+export * as faultSectionsService from './fault-sections-service';
+export * as gmmService from './gmm-services';
+export * as utilitiesService from './utilities-service';
diff --git a/libs/nshmp-ws/utilities-service/index.ts b/libs/nshmp-ws/utilities-service/index.ts
new file mode 100644
index 0000000..904cf15
--- /dev/null
+++ b/libs/nshmp-ws/utilities-service/index.ts
@@ -0,0 +1,2 @@
+export * from './test-sites-response';
+export * from './test-sites-usage.model';
diff --git a/libs/nshmp-ws/utilities-service/test-sites-response.ts b/libs/nshmp-ws/utilities-service/test-sites-response.ts
new file mode 100644
index 0000000..4c544e3
--- /dev/null
+++ b/libs/nshmp-ws/utilities-service/test-sites-response.ts
@@ -0,0 +1,7 @@
+import {NshmRegion} from '../../nshmp-lib/nshm';
+
+export interface TestSitesProperties {
+  title: string;
+  regionId: NshmRegion;
+  regionTitle: string;
+}
diff --git a/libs/nshmp-ws/utilities-service/test-sites-usage.model.ts b/libs/nshmp-ws/utilities-service/test-sites-usage.model.ts
new file mode 100644
index 0000000..461da0e
--- /dev/null
+++ b/libs/nshmp-ws/utilities-service/test-sites-usage.model.ts
@@ -0,0 +1,15 @@
+import {NshmRegion} from '../../nshmp-lib/nshm';
+import {Response} from '../../nshmp-ws-utils';
+import {StringParameter} from '../../nshmp-ws-utils/metadata';
+
+export type TestSitesUsage = Response<string, TestSitesMetadataResponse>;
+
+export interface TestSitesMetadataResponse {
+  description: string;
+  syntax: string[];
+  parameters: TestSitesParameters;
+}
+
+export interface TestSitesParameters {
+  region: StringParameter<NshmRegion>;
+}
diff --git a/libs/plotly/index.ts b/libs/plotly/index.ts
new file mode 100644
index 0000000..cd96c0e
--- /dev/null
+++ b/libs/plotly/index.ts
@@ -0,0 +1,6 @@
+/* Export Plotly package */
+export * from './plotly-config.model';
+export * from './plotly-layout.model';
+export * from './plotly-legend.model';
+export * from './plotly-plot.model';
+export * from './plotly-utils';
diff --git a/libs/plotly/plotly-config.model.ts b/libs/plotly/plotly-config.model.ts
new file mode 100644
index 0000000..addbe7f
--- /dev/null
+++ b/libs/plotly/plotly-config.model.ts
@@ -0,0 +1,18 @@
+import {Config} from 'plotly.js';
+
+/**
+ * The plot config.
+ *
+ * See https://github.com/plotly/angular-plotly.js#basic-props for
+ * added properties to Plotly config.
+ */
+export interface PlotlyConfig extends Partial<Config> {
+  className?: string | string[];
+  debug?: boolean;
+  revision?: number;
+  style?: {[key: string]: string};
+  updateOnDataChange?: boolean;
+  updateOnLayoutChange?: boolean;
+  updateOnlyWithRevision?: boolean;
+  useResizeHandler?: boolean;
+}
diff --git a/libs/plotly/plotly-layout.model.ts b/libs/plotly/plotly-layout.model.ts
new file mode 100644
index 0000000..4dcf6c0
--- /dev/null
+++ b/libs/plotly/plotly-layout.model.ts
@@ -0,0 +1,14 @@
+import {Layout} from 'plotly.js';
+
+import {PlotlyLegend} from './plotly-legend.model';
+
+export interface PlotlyLayout extends Partial<Layout> {
+  /** Aspect ratio of plot */
+  aspectRatio?: string;
+
+  /** Aspect ratio for mobile size */
+  aspectRatioMobile?: string;
+
+  /** Plotly legend */
+  legend?: Partial<PlotlyLegend>;
+}
diff --git a/libs/plotly/plotly-legend.model.ts b/libs/plotly/plotly-legend.model.ts
new file mode 100644
index 0000000..77dcfe8
--- /dev/null
+++ b/libs/plotly/plotly-legend.model.ts
@@ -0,0 +1,8 @@
+import {Legend} from 'plotly.js';
+
+export type LegendClick = 'toggle' | 'toggleothers' | false;
+
+export interface PlotlyLegend extends Partial<Legend> {
+  itemclick: LegendClick;
+  itemdoubleclick: LegendClick;
+}
diff --git a/libs/plotly/plotly-plot.model.ts b/libs/plotly/plotly-plot.model.ts
new file mode 100644
index 0000000..a721434
--- /dev/null
+++ b/libs/plotly/plotly-plot.model.ts
@@ -0,0 +1,15 @@
+import {PlotData} from 'plotly.js';
+
+import {PlotlyConfig} from './plotly-config.model';
+import {PlotlyLayout} from './plotly-layout.model';
+
+/**
+ * A Plotly plot.
+ */
+export interface PlotlyPlot {
+  data: Partial<PlotData>[];
+  id: string;
+
+  config?: Partial<PlotlyConfig>;
+  layout?: Partial<PlotlyLayout>;
+}
diff --git a/libs/plotly/plotly-utils.ts b/libs/plotly/plotly-utils.ts
new file mode 100644
index 0000000..e0d53e2
--- /dev/null
+++ b/libs/plotly/plotly-utils.ts
@@ -0,0 +1,20 @@
+/**
+ * Calculate the height based on element width and aspect ratio.
+ *
+ * @param el The svg element
+ * @param aspectRatio The aspect ratio in form `number:number`
+ */
+export function heightFromAspectRatio(
+  el: SVGElement,
+  aspectRatio: string
+): number {
+  const width = Number.parseFloat(el.getAttribute('width') ?? '0');
+
+  if (!/[\d]+:[\d]+/.test(aspectRatio)) {
+    throw new Error(
+      `Aspect ratio [${aspectRatio}] is not in form number:number`
+    );
+  }
+
+  return width / eval(aspectRatio.split(':').join('/'));
+}
-- 
GitLab


From 90a1167f735d55d8c4bcb7b2104558131649ed5b Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Thu, 3 Nov 2022 09:27:14 -0600
Subject: [PATCH 03/12] refactor

---
 src/aws/index.ts                              |   1 -
 src/aws/models/index.ts                       |   1 -
 .../models/run-nshmp-haz/dynamo-db-item.ts    |  35 ---
 src/aws/models/run-nshmp-haz/index.ts         |   4 -
 .../models/run-nshmp-haz/job-status.model.ts  |   8 -
 .../run-nshmp-haz/run-nshmp-haz-config.ts     |  93 --------
 .../run-nshmp-haz/run-nshmp-haz-response.ts   |  11 -
 src/index.ts                                  |   8 -
 src/leaflet/index.ts                          |   4 -
 src/leaflet/models/index.ts                   |   2 -
 src/leaflet/models/map-baselayer.model.ts     |  66 ------
 src/leaflet/utils/map.utils.ts                | 214 ------------------
 src/nshmp-haz/index.ts                        |   2 -
 src/nshmp-haz/models/www/constraint.model.ts  |   5 -
 .../disagg-service/disagg-response.model.ts   |  91 --------
 .../www/disagg-service/disagg-usage.model.ts  |  15 --
 .../models/www/disagg-service/index.ts        |   2 -
 .../hazard-service/hazard-response.model.ts   |  67 ------
 .../www/hazard-service/hazard-usage.model.ts  |  26 ---
 .../models/www/hazard-service/index.ts        |   2 -
 src/nshmp-haz/models/www/index.ts             |   7 -
 .../www/source-logic-trees-service/index.ts   |   2 -
 .../source-logic-trees-response.ts            |  11 -
 .../source-logic-trees-usage.ts               |  12 -
 .../models/www/source-model.model.ts          |  15 --
 .../models/www/xy-data-group.model.ts         |  14 --
 src/nshmp-lib/calc/exceedance-model.util.ts   | 109 ---------
 src/nshmp-lib/calc/index.ts                   |   3 -
 src/nshmp-lib/calc/maths.util.ts              | 120 ----------
 src/nshmp-lib/data/index.ts                   |   2 -
 src/nshmp-lib/data/uncertainty-model.model.ts |  13 --
 src/nshmp-lib/data/xy-sequence.model.ts       |   4 -
 src/nshmp-lib/geo/basin.model.ts              |  25 --
 src/nshmp-lib/geo/index.ts                    |   3 -
 src/nshmp-lib/geo/region.model.ts             |   7 -
 src/nshmp-lib/geo/site.model.ts               |  17 --
 src/nshmp-lib/gmm/gmm-input.model.ts          |  15 --
 src/nshmp-lib/gmm/gmm.model.ts                | 190 ----------------
 src/nshmp-lib/gmm/imt.model.ts                | 119 ----------
 src/nshmp-lib/gmm/index.ts                    |   5 -
 src/nshmp-lib/gmm/nehrp-site-class.model.ts   |  35 ---
 src/nshmp-lib/gmm/rate-type.model.ts          |   5 -
 src/nshmp-lib/index.ts                        |   5 -
 src/nshmp-lib/model/index.ts                  |   4 -
 src/nshmp-lib/model/mfd.ts                    |  36 ---
 src/nshmp-lib/model/models.ts                 |  42 ----
 src/nshmp-lib/model/source-type.ts            |  59 -----
 src/nshmp-lib/model/tectonic-setting.ts       |  19 --
 src/nshmp-lib/nshm/index.ts                   |   2 -
 src/nshmp-lib/nshm/nshm-region.model.ts       |  26 ---
 src/nshmp-lib/nshm/nshm.model.ts              |  45 ----
 src/nshmp-ws-static/index.ts                  |   1 -
 src/nshmp-ws-static/models/index.ts           |   2 -
 .../models/static-hazard-response.model.ts    |  49 ----
 .../models/static-hazard-usage.model.ts       |  57 -----
 src/nshmp-ws-utils/index.ts                   |   1 -
 src/nshmp-ws-utils/models/index.ts            |   4 -
 .../models/metadata/double-parameter.model.ts |  12 -
 .../models/metadata/enum-parameter.ts         |  18 --
 src/nshmp-ws-utils/models/metadata/index.ts   |   5 -
 .../models/metadata/parameter.model.ts        |  10 -
 .../models/metadata/server.model.ts           |  11 -
 .../models/metadata/string-parameter.model.ts |   9 -
 src/nshmp-ws-utils/models/response.model.ts   |  30 ---
 .../models/service-error.model.ts             |   3 -
 src/nshmp-ws-utils/models/status.model.ts     |   8 -
 src/nshmp-ws/index.ts                         |   1 -
 .../fault-sections-response.model.ts          |  26 ---
 .../fault-sections-usage.model.ts             |  16 --
 .../models/fault-sections-service/index.ts    |   2 -
 .../models/gmm-services/gmm-response.model.ts |  47 ----
 .../models/gmm-services/gmm-usage.model.ts    | 150 ------------
 src/nshmp-ws/models/gmm-services/index.ts     |   2 -
 src/nshmp-ws/models/index.ts                  |   3 -
 .../models/utilities-service/index.ts         |   2 -
 .../utilities-service/test-sites-response.ts  |   7 -
 .../test-sites-usage.model.ts                 |  15 --
 src/plotly/index.ts                           |   6 -
 src/plotly/models/plotly-config.model.ts      |  18 --
 src/plotly/models/plotly-layout.model.ts      |  14 --
 src/plotly/models/plotly-legend.model.ts      |   8 -
 src/plotly/models/plotly-plot.model.ts        |  15 --
 src/plotly/utils/plotly-utils.ts              |  20 --
 83 files changed, 2200 deletions(-)
 delete mode 100644 src/aws/index.ts
 delete mode 100644 src/aws/models/index.ts
 delete mode 100644 src/aws/models/run-nshmp-haz/dynamo-db-item.ts
 delete mode 100644 src/aws/models/run-nshmp-haz/index.ts
 delete mode 100644 src/aws/models/run-nshmp-haz/job-status.model.ts
 delete mode 100644 src/aws/models/run-nshmp-haz/run-nshmp-haz-config.ts
 delete mode 100644 src/aws/models/run-nshmp-haz/run-nshmp-haz-response.ts
 delete mode 100644 src/index.ts
 delete mode 100644 src/leaflet/index.ts
 delete mode 100644 src/leaflet/models/index.ts
 delete mode 100644 src/leaflet/models/map-baselayer.model.ts
 delete mode 100644 src/leaflet/utils/map.utils.ts
 delete mode 100644 src/nshmp-haz/index.ts
 delete mode 100644 src/nshmp-haz/models/www/constraint.model.ts
 delete mode 100644 src/nshmp-haz/models/www/disagg-service/disagg-response.model.ts
 delete mode 100644 src/nshmp-haz/models/www/disagg-service/disagg-usage.model.ts
 delete mode 100644 src/nshmp-haz/models/www/disagg-service/index.ts
 delete mode 100644 src/nshmp-haz/models/www/hazard-service/hazard-response.model.ts
 delete mode 100644 src/nshmp-haz/models/www/hazard-service/hazard-usage.model.ts
 delete mode 100644 src/nshmp-haz/models/www/hazard-service/index.ts
 delete mode 100644 src/nshmp-haz/models/www/index.ts
 delete mode 100644 src/nshmp-haz/models/www/source-logic-trees-service/index.ts
 delete mode 100644 src/nshmp-haz/models/www/source-logic-trees-service/source-logic-trees-response.ts
 delete mode 100644 src/nshmp-haz/models/www/source-logic-trees-service/source-logic-trees-usage.ts
 delete mode 100644 src/nshmp-haz/models/www/source-model.model.ts
 delete mode 100644 src/nshmp-haz/models/www/xy-data-group.model.ts
 delete mode 100644 src/nshmp-lib/calc/exceedance-model.util.ts
 delete mode 100644 src/nshmp-lib/calc/index.ts
 delete mode 100644 src/nshmp-lib/calc/maths.util.ts
 delete mode 100644 src/nshmp-lib/data/index.ts
 delete mode 100644 src/nshmp-lib/data/uncertainty-model.model.ts
 delete mode 100644 src/nshmp-lib/data/xy-sequence.model.ts
 delete mode 100644 src/nshmp-lib/geo/basin.model.ts
 delete mode 100644 src/nshmp-lib/geo/index.ts
 delete mode 100644 src/nshmp-lib/geo/region.model.ts
 delete mode 100644 src/nshmp-lib/geo/site.model.ts
 delete mode 100644 src/nshmp-lib/gmm/gmm-input.model.ts
 delete mode 100644 src/nshmp-lib/gmm/gmm.model.ts
 delete mode 100644 src/nshmp-lib/gmm/imt.model.ts
 delete mode 100644 src/nshmp-lib/gmm/index.ts
 delete mode 100644 src/nshmp-lib/gmm/nehrp-site-class.model.ts
 delete mode 100644 src/nshmp-lib/gmm/rate-type.model.ts
 delete mode 100644 src/nshmp-lib/index.ts
 delete mode 100644 src/nshmp-lib/model/index.ts
 delete mode 100644 src/nshmp-lib/model/mfd.ts
 delete mode 100644 src/nshmp-lib/model/models.ts
 delete mode 100644 src/nshmp-lib/model/source-type.ts
 delete mode 100644 src/nshmp-lib/model/tectonic-setting.ts
 delete mode 100644 src/nshmp-lib/nshm/index.ts
 delete mode 100644 src/nshmp-lib/nshm/nshm-region.model.ts
 delete mode 100644 src/nshmp-lib/nshm/nshm.model.ts
 delete mode 100644 src/nshmp-ws-static/index.ts
 delete mode 100644 src/nshmp-ws-static/models/index.ts
 delete mode 100644 src/nshmp-ws-static/models/static-hazard-response.model.ts
 delete mode 100644 src/nshmp-ws-static/models/static-hazard-usage.model.ts
 delete mode 100644 src/nshmp-ws-utils/index.ts
 delete mode 100644 src/nshmp-ws-utils/models/index.ts
 delete mode 100644 src/nshmp-ws-utils/models/metadata/double-parameter.model.ts
 delete mode 100644 src/nshmp-ws-utils/models/metadata/enum-parameter.ts
 delete mode 100644 src/nshmp-ws-utils/models/metadata/index.ts
 delete mode 100644 src/nshmp-ws-utils/models/metadata/parameter.model.ts
 delete mode 100644 src/nshmp-ws-utils/models/metadata/server.model.ts
 delete mode 100644 src/nshmp-ws-utils/models/metadata/string-parameter.model.ts
 delete mode 100644 src/nshmp-ws-utils/models/response.model.ts
 delete mode 100644 src/nshmp-ws-utils/models/service-error.model.ts
 delete mode 100644 src/nshmp-ws-utils/models/status.model.ts
 delete mode 100644 src/nshmp-ws/index.ts
 delete mode 100644 src/nshmp-ws/models/fault-sections-service/fault-sections-response.model.ts
 delete mode 100644 src/nshmp-ws/models/fault-sections-service/fault-sections-usage.model.ts
 delete mode 100644 src/nshmp-ws/models/fault-sections-service/index.ts
 delete mode 100644 src/nshmp-ws/models/gmm-services/gmm-response.model.ts
 delete mode 100644 src/nshmp-ws/models/gmm-services/gmm-usage.model.ts
 delete mode 100644 src/nshmp-ws/models/gmm-services/index.ts
 delete mode 100644 src/nshmp-ws/models/index.ts
 delete mode 100644 src/nshmp-ws/models/utilities-service/index.ts
 delete mode 100644 src/nshmp-ws/models/utilities-service/test-sites-response.ts
 delete mode 100644 src/nshmp-ws/models/utilities-service/test-sites-usage.model.ts
 delete mode 100644 src/plotly/index.ts
 delete mode 100644 src/plotly/models/plotly-config.model.ts
 delete mode 100644 src/plotly/models/plotly-layout.model.ts
 delete mode 100644 src/plotly/models/plotly-legend.model.ts
 delete mode 100644 src/plotly/models/plotly-plot.model.ts
 delete mode 100644 src/plotly/utils/plotly-utils.ts

diff --git a/src/aws/index.ts b/src/aws/index.ts
deleted file mode 100644
index e9644da..0000000
--- a/src/aws/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from './models';
diff --git a/src/aws/models/index.ts b/src/aws/models/index.ts
deleted file mode 100644
index 476e027..0000000
--- a/src/aws/models/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * as runNshmpHaz from './run-nshmp-haz';
diff --git a/src/aws/models/run-nshmp-haz/dynamo-db-item.ts b/src/aws/models/run-nshmp-haz/dynamo-db-item.ts
deleted file mode 100644
index 122b778..0000000
--- a/src/aws/models/run-nshmp-haz/dynamo-db-item.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-import {JobStatus} from './job-status.model';
-import {RunNshmpHazHttpPostConfig} from './run-nshmp-haz-config';
-
-/**
- * Dynamo DB item to add to table
- */
-export interface DynamoDBItem {
-  email: string;
-  jobId: string;
-
-  calc?: DynamoDBItemCalc;
-  inputs?: RunNshmpHazHttpPostConfig;
-  job?: DynamoDBItemJob;
-  results?: DynamoDBItemResults;
-}
-
-export interface DynamoDBItemCalc {
-  completedOn?: string;
-  cores?: string;
-  createdOn?: string;
-  memory?: string;
-  totalTime?: string;
-}
-
-export interface DynamoDBItemJob {
-  environment?: string;
-  errorMessage?: string;
-  instanceId?: string;
-  jobStatus?: JobStatus;
-}
-
-export interface DynamoDBItemResults {
-  viewLogs?: string;
-  zipFile?: string;
-}
diff --git a/src/aws/models/run-nshmp-haz/index.ts b/src/aws/models/run-nshmp-haz/index.ts
deleted file mode 100644
index 766403a..0000000
--- a/src/aws/models/run-nshmp-haz/index.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export * from './dynamo-db-item';
-export * from './job-status.model';
-export * from './run-nshmp-haz-config';
-export * from './run-nshmp-haz-response';
diff --git a/src/aws/models/run-nshmp-haz/job-status.model.ts b/src/aws/models/run-nshmp-haz/job-status.model.ts
deleted file mode 100644
index 53c621c..0000000
--- a/src/aws/models/run-nshmp-haz/job-status.model.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-/** Job status */
-export enum JobStatus {
-  COMPLETED = 'Completed',
-  CREATED = 'Created',
-  FAILED = 'Failed',
-  RUNNING = 'Running',
-  TERMINATED = 'Terminated',
-}
diff --git a/src/aws/models/run-nshmp-haz/run-nshmp-haz-config.ts b/src/aws/models/run-nshmp-haz/run-nshmp-haz-config.ts
deleted file mode 100644
index 9a547d8..0000000
--- a/src/aws/models/run-nshmp-haz/run-nshmp-haz-config.ts
+++ /dev/null
@@ -1,93 +0,0 @@
-/**
- * nshmp-haz calc config
- */
-export interface CalcConfig {
-  deagg?: unknown;
-  hazard?: unknown;
-  output?: CalcConfigOutput;
-  performance?: unknown;
-  rate?: unknown;
-  site?: unknown;
-}
-
-/** nshmp-haz calc config output section */
-export interface CalcConfigOutput {
-  directory: string;
-}
-
-/** AWS cloud config */
-export interface CloudConfig {
-  /** EC2 instance type */
-  instanceType: string;
-
-  /** Whether to debug; sets "set -x" in user data script for EC2 */
-  debug?: boolean;
-}
-
-/** NSHMP config */
-export interface NshmpConfig {
-  /**
-   * Java class name of class to run.
-   *
-   * Example: HazardCalc
-   */
-  className: string;
-
-  /** Email to get notifications */
-  email: string;
-
-  /**
-   * The URL to the git repository of the model to use.
-   */
-  modelGitUrl: string;
-
-  /** The SHA (branch, tag, etc) of the model to use */
-  modelSha?: string;
-
-  /**
-   * URL to nshmp-lib.
-   *
-   * Defaults to using version defined in nshmp-haz Gradle file.
-   */
-  nshmpLibGitUrl?: string;
-
-  /** The SHA of nshmp-lib */
-  nshmpLibSha?: string;
-
-  /** URL to site file. */
-  siteFileUrl: string;
-
-  /** Intensity measure level for deagg-epsilon */
-  iml?: number;
-
-  /** Path inside model tarball for hazard code to run */
-  modelPath?: string;
-
-  /** Return period for deagg */
-  returnPeriod?: number;
-
-  /**
-   * The URL to the repository of the hazard to use.
-   */
-  sourceCodeGitUrl?: string;
-
-  /** The SHA (branch, tag, etc) of the source code to use*/
-  sourceCodeSha?: string;
-}
-
-/** State machine input */
-export interface NshmpHazJobConfig extends RunNshmpHazHttpPostConfig {
-  jobId: string;
-}
-
-/** HTTP POST config for running nshmp-haz on AWS */
-export interface RunNshmpHazHttpPostConfig {
-  /** AWS cloud config */
-  cloudConfig: CloudConfig;
-
-  /** NSHMP config to run nshmp-haz */
-  nshmpConfig: NshmpConfig;
-
-  /** The nshmp-haz calc config */
-  calcConfig?: CalcConfig;
-}
diff --git a/src/aws/models/run-nshmp-haz/run-nshmp-haz-response.ts b/src/aws/models/run-nshmp-haz/run-nshmp-haz-response.ts
deleted file mode 100644
index b6a5b8e..0000000
--- a/src/aws/models/run-nshmp-haz/run-nshmp-haz-response.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import * as nshmpWsUtils from '../../../nshmp-ws-utils';
-import {RunNshmpHazHttpPostConfig} from './run-nshmp-haz-config';
-
-export type RunNshmpHazResponse = nshmpWsUtils.Response<
-  RunNshmpHazHttpPostConfig,
-  RunNshmpHazResponseData
->;
-
-export interface RunNshmpHazResponseData {
-  jobId: string;
-}
diff --git a/src/index.ts b/src/index.ts
deleted file mode 100644
index 0fbb98f..0000000
--- a/src/index.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-export * as nshmpAws from './aws';
-export * as nshmpLeaflet from './leaflet';
-export * as nshmpHaz from './nshmp-haz';
-export * as nshmpLib from './nshmp-lib';
-export * as nshmpWs from './nshmp-ws';
-export * as nshmpWsStatic from './nshmp-ws-static';
-export * as nshmpWsUtils from './nshmp-ws-utils';
-export * as nshmpPlotly from './plotly';
diff --git a/src/leaflet/index.ts b/src/leaflet/index.ts
deleted file mode 100644
index b28c177..0000000
--- a/src/leaflet/index.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Export Leaflet package */
-
-export * from './models';
-export * from './utils/map.utils';
diff --git a/src/leaflet/models/index.ts b/src/leaflet/models/index.ts
deleted file mode 100644
index 0a1a5ba..0000000
--- a/src/leaflet/models/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Export nshmp package */
-export * from './map-baselayer.model';
diff --git a/src/leaflet/models/map-baselayer.model.ts b/src/leaflet/models/map-baselayer.model.ts
deleted file mode 100644
index 734d77e..0000000
--- a/src/leaflet/models/map-baselayer.model.ts
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * Base layers for mapping.
- *
- * These base layers map to concrete styles in lib/state/map/map.utils.
- */
-export enum MapBaseLayer {
-  /**
-   * Esri light grey base.
-   * @see https://doc.arcgis.com/en/data-appliance/2022/maps/world-light-gray-base.htm
-   */
-  GREYSCALE = 'Greyscale',
-
-  /**
-   * Esri dark grey base.
-   * @see https://doc.arcgis.com/en/data-appliance/2022/maps/world-dark-gray-base.htm
-   */
-  GREYSCALE_DARK = 'Greyscale Dark',
-
-  /**
-   * Esri hillshade.
-   * @see https://doc.arcgis.com/en/data-appliance/2022/maps/world-hillshade.htm
-   */
-  HILLSHADE = 'Hillshade',
-
-  /**
-   * Esri dark hillshade.
-   * @see https://doc.arcgis.com/en/data-appliance/2022/maps/world-hillshade-dark.htm
-   */
-  HILLSHADE_DARK = 'Hillshade Dark',
-
-  /**
-   * Esri National Geographic world map.
-   * @see https://doc.arcgis.com/en/data-appliance/2022/maps/national-geographic-world-map.htm
-   */
-  NAT_GEO = 'Natational Geographic',
-
-  /**
-   * Esri ocean map.
-   * @see https://doc.arcgis.com/en/data-appliance/2022/maps/world-ocean-base.htm
-   */
-  OCEAN = 'Ocean',
-
-  /**
-   * Esri physical map
-   * @see https://doc.arcgis.com/en/data-appliance/2022/maps/world-physical-map.htm
-   */
-  PHYSICAL = 'Physical',
-
-  /**
-   * Esri satellite map.
-   * @see https://doc.arcgis.com/en/data-appliance/2022/maps/world-imagery.htm
-   */
-  SATELLITE = 'Satellite',
-
-  /**
-   * Esir street map.
-   * @see https://doc.arcgis.com/en/data-appliance/2022/maps/world-street-map.htm
-   */
-  STREET = 'Street',
-
-  /**
-   * Esri topographic map.
-   * @see https://doc.arcgis.com/en/data-appliance/2022/maps/world-topographic-map.htm
-   */
-  TOPO = 'Topographic',
-}
diff --git a/src/leaflet/utils/map.utils.ts b/src/leaflet/utils/map.utils.ts
deleted file mode 100644
index 1cfa0d4..0000000
--- a/src/leaflet/utils/map.utils.ts
+++ /dev/null
@@ -1,214 +0,0 @@
-import * as L from 'leaflet';
-
-import {Location} from '../../nshmp-lib';
-import {MapBaseLayer} from '../models';
-
-/** Location transform */
-export type LocationTransform = (location: Location) => Location;
-
-/**
- * Esri raster base layers for Leaflet.
- *
- * https://doc.arcgis.com/en/data-appliance/2022/maps/directory-maps-data.htm
- */
-export function baseLayers(): Record<MapBaseLayer, L.TileLayer> {
-  return BASE_LAYERS;
-}
-
-/**
- * Returns a specific Esri raster base layer.
- */
-export function baseLayer(baseLayer: MapBaseLayer): L.TileLayer {
-  return BASE_LAYERS[baseLayer];
-}
-
-/**
- * Transform coordinates in a Feature Collection.
- *
- * @param featureCollection The feature collection
- * @param transform The transform function to use
- */
-export function transformCoordinates(
-  featureCollection: GeoJSON.FeatureCollection,
-  transform: LocationTransform = loc => loc
-): GeoJSON.FeatureCollection {
-  for (const feature of featureCollection.features) {
-    const geometry = feature.geometry;
-
-    switch (geometry.type) {
-      case 'LineString': {
-        geometry.coordinates = geometry.coordinates.map(coord =>
-          transformCoordinate(coord, transform)
-        );
-        break;
-      }
-      case 'MultiLineString': {
-        geometry.coordinates = geometry.coordinates.map(position =>
-          position.map(coord => transformCoordinate(coord, transform))
-        );
-        break;
-      }
-      case 'MultiPoint': {
-        geometry.coordinates = geometry.coordinates.map(coord =>
-          transformCoordinate(coord, transform)
-        );
-        break;
-      }
-      case 'MultiPolygon': {
-        geometry.coordinates = geometry.coordinates.map(positions =>
-          positions.map(position =>
-            position.map(coord => transformCoordinate(coord, transform))
-          )
-        );
-        break;
-      }
-      case 'Point': {
-        geometry.coordinates = transformCoordinate(
-          geometry.coordinates,
-          transform
-        );
-        break;
-      }
-      case 'Polygon': {
-        geometry.coordinates = geometry.coordinates.map(position =>
-          position.map(coord => transformCoordinate(coord, transform))
-        );
-        break;
-      }
-    }
-  }
-
-  return featureCollection;
-}
-
-const ARCGIS_URL_START =
-  'https://services.arcgisonline.com/arcgis/rest/services/';
-const ARCGIS_URL_END = '/MapServer/tile/{z}/{y}/{x}';
-const OPTIONS: L.MapOptions = {
-  maxZoom: 16,
-};
-
-const BASE_LAYERS: Record<MapBaseLayer, L.TileLayer> = {
-  /* Esri light gray */
-  [MapBaseLayer.GREYSCALE]: L.tileLayer(
-    `${ARCGIS_URL_START}Canvas/World_Light_Gray_Base${ARCGIS_URL_END}`,
-    {
-      ...OPTIONS,
-      attribution:
-        'Esri, HERE, Garmin, © OpenStreetMap contributors, and the GIS user community',
-      id: MapBaseLayer.GREYSCALE,
-    }
-  ),
-  /* Esri dark gray */
-  [MapBaseLayer.GREYSCALE_DARK]: L.tileLayer(
-    `${ARCGIS_URL_START}Canvas/World_Dark_Gray_Base${ARCGIS_URL_END}`,
-    {
-      ...OPTIONS,
-      attribution:
-        'Esri, HERE, Garmin, © OpenStreetMap contributors, and the GIS user community',
-      id: MapBaseLayer.GREYSCALE_DARK,
-    }
-  ),
-  /* Esri world hillshade */
-  [MapBaseLayer.HILLSHADE]: L.tileLayer(
-    `${ARCGIS_URL_START}Elevation/World_Hillshade${ARCGIS_URL_END}`,
-    {
-      ...OPTIONS,
-      attribution:
-        'Esri, USGS, NGA, NASA, CGIAR, N Robinson, NCEAS, NLS, OS, NMA, ' +
-        'Geodatastyrelsen, Rijkswaterstaat, GSA, Geoland, FEMA, Intermap, ' +
-        'and the GIS user community',
-      id: MapBaseLayer.HILLSHADE,
-    }
-  ),
-  /* Esri world hillshade */
-  [MapBaseLayer.HILLSHADE_DARK]: L.tileLayer(
-    `${ARCGIS_URL_START}Elevation/World_Hillshade_Dark${ARCGIS_URL_END}`,
-    {
-      ...OPTIONS,
-      attribution:
-        'Esri, USGS, NGA, NASA, CGIAR, N Robinson, NCEAS, NLS, OS, NMA, ' +
-        'Geodatastyrelsen, Rijkswaterstaat, GSA, Geoland, FEMA, Intermap, ' +
-        'and the GIS user community',
-      id: MapBaseLayer.HILLSHADE_DARK,
-    }
-  ),
-  /* Esri National Geographics world map */
-  [MapBaseLayer.NAT_GEO]: L.tileLayer(
-    `${ARCGIS_URL_START}NatGeo_World_Map${ARCGIS_URL_END}`,
-    {
-      ...OPTIONS,
-      attribution:
-        'National Geographic, Esri, Garmin, HERE, UNEP-WCMC, USGS, ' +
-        'NASA, ESA, METI, NRCan, GEBCO, NOAA, INCREMENT P',
-      id: MapBaseLayer.NAT_GEO,
-    }
-  ),
-  /* Esri world ocean */
-  [MapBaseLayer.OCEAN]: L.tileLayer(
-    `${ARCGIS_URL_START}Ocean/World_Ocean_Base${ARCGIS_URL_END}`,
-    {
-      ...OPTIONS,
-      attribution: 'Esri, Garmin, GEBCO, NOAA NGDC, and other contributors',
-      id: MapBaseLayer.OCEAN,
-      maxZoom: 10,
-    }
-  ),
-  /* Esri world physical map */
-  [MapBaseLayer.PHYSICAL]: L.tileLayer(
-    `${ARCGIS_URL_START}World_Physical_Map${ARCGIS_URL_END}`,
-    {
-      ...OPTIONS,
-      attribution: 'U.S. National Park Service',
-      id: MapBaseLayer.PHYSICAL,
-      maxZoom: 8,
-    }
-  ),
-  [MapBaseLayer.SATELLITE]: L.tileLayer(
-    `${ARCGIS_URL_START}World_Imagery${ARCGIS_URL_END}`,
-    {
-      ...OPTIONS,
-      attribution:
-        'Esri, Maxar, Earthstar Geographics, and the GIS User Community',
-      id: MapBaseLayer.SATELLITE,
-    }
-  ),
-  [MapBaseLayer.STREET]: L.tileLayer(
-    `${ARCGIS_URL_START}World_Street_Map${ARCGIS_URL_END}`,
-    {
-      ...OPTIONS,
-      attribution:
-        'Esri, HERE, Garmin, USGS, Intermap, INCREMENT P, ' +
-        'NRCan, Esri Japan, METI, Esri China (Hong Kong), Esri Korea, ' +
-        'Esri (Thailand), NGCC, © OpenStreetMap contributors, and the ' +
-        'GIS User Community',
-      id: MapBaseLayer.STREET,
-    }
-  ),
-  [MapBaseLayer.TOPO]: L.tileLayer(
-    `${ARCGIS_URL_START}World_Topo_Map${ARCGIS_URL_END}`,
-    {
-      ...OPTIONS,
-      attribution:
-        'Esri, HERE, Garmin, USGS, Intermap, INCREMENT P, NRCan, ' +
-        'Esri Japan, METI, Mapwithyou, NOSTRA, © OpenStreetMap ' +
-        'contributors, and the GIS User Community',
-      id: MapBaseLayer.TOPO,
-    }
-  ),
-};
-
-function transformCoordinate(
-  coordinates: number[],
-  transform: LocationTransform
-): number[] {
-  const longitude = coordinates[0];
-  const latitude = coordinates[1];
-
-  const location = transform({
-    latitude,
-    longitude,
-  });
-
-  return [location.longitude, location.latitude];
-}
diff --git a/src/nshmp-haz/index.ts b/src/nshmp-haz/index.ts
deleted file mode 100644
index b4404b0..0000000
--- a/src/nshmp-haz/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Export nshmp package */
-export * from './models/www';
diff --git a/src/nshmp-haz/models/www/constraint.model.ts b/src/nshmp-haz/models/www/constraint.model.ts
deleted file mode 100644
index be8a4ca..0000000
--- a/src/nshmp-haz/models/www/constraint.model.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export interface Constraint {
-  id: string;
-  min: object;
-  max: object;
-}
diff --git a/src/nshmp-haz/models/www/disagg-service/disagg-response.model.ts b/src/nshmp-haz/models/www/disagg-service/disagg-response.model.ts
deleted file mode 100644
index 3c97b46..0000000
--- a/src/nshmp-haz/models/www/disagg-service/disagg-response.model.ts
+++ /dev/null
@@ -1,91 +0,0 @@
-import {Imt} from '../../../../nshmp-lib';
-import * as nshmpWsUtils from '../../../../nshmp-ws-utils';
-import {HazardRequestData} from '../hazard-service/hazard-response.model';
-
-export type DisaggResponse = nshmpWsUtils.Response<
-  DisaggRequestData,
-  DisaggResponseData
->;
-
-export enum DataType {
-  GMM = 'GMM',
-  SOURCE = 'SOURCE',
-  DISAGG_DATA = 'DISAGG_DATA',
-}
-
-export interface DisaggRequestData extends HazardRequestData {
-  imts: Imt[];
-  returnPeriod: number;
-  dataTypes: DataType[];
-}
-
-export interface DisaggResponseMetadata {
-  rlabel: string;
-  mlabel: string;
-  εlabel: string;
-  εbins: EBin[];
-  server: nshmpWsUtils.metadata.Server;
-}
-
-export interface EBin {
-  id: number;
-  min: number;
-  max: number;
-}
-
-export interface DisaggResponseData {
-  metadata: DisaggResponseMetadata;
-  disaggs: DisaggResponseDataValues[];
-}
-
-export interface DisaggResponseDataValues {
-  imt: nshmpWsUtils.metadata.Parameter;
-  data: DisaggComponentData[];
-}
-
-export interface DisaggComponentData {
-  component: string;
-  data: DisaggData[];
-  summary: DisaggSummary[];
-  sources: DisaggSource[];
-}
-
-export interface DisaggData {
-  r: number;
-  m: number;
-  rBar: number;
-  mBar: number;
-  εBar: number;
-  εdata: EData[];
-}
-
-export interface EData {
-  εbin: number;
-  value: number;
-}
-
-export interface DisaggSummary {
-  name: string;
-  display: boolean;
-  data: DisaggSummaryData[];
-}
-
-export interface DisaggSummaryData {
-  name: string;
-  value: number;
-  units: string;
-}
-
-export interface DisaggSource {
-  name: string;
-  source: string;
-  type: string;
-  contribution: number;
-  id: number;
-  r: number;
-  m: number;
-  ε: number;
-  azimuth: number;
-  longitude: number;
-  latitude: number;
-}
diff --git a/src/nshmp-haz/models/www/disagg-service/disagg-usage.model.ts b/src/nshmp-haz/models/www/disagg-service/disagg-usage.model.ts
deleted file mode 100644
index dd4085b..0000000
--- a/src/nshmp-haz/models/www/disagg-service/disagg-usage.model.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import {Response} from '../../../../nshmp-ws-utils';
-import {DoubleParameter} from '../../../../nshmp-ws-utils/models/metadata';
-import {HazardRequestMetadata} from '../hazard-service';
-
-export type DisaggUsage = Response<string, DisaggRequestMetadata>;
-
-export interface DisaggRequestMetadata extends HazardRequestMetadata {
-  iml: ImlMetadata;
-  returnPeriod: DoubleParameter;
-}
-
-export interface ImlMetadata {
-  name: string;
-  range: Record<string, DoubleParameter>;
-}
diff --git a/src/nshmp-haz/models/www/disagg-service/index.ts b/src/nshmp-haz/models/www/disagg-service/index.ts
deleted file mode 100644
index 01ddf85..0000000
--- a/src/nshmp-haz/models/www/disagg-service/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export * from './disagg-response.model';
-export * from './disagg-usage.model';
diff --git a/src/nshmp-haz/models/www/hazard-service/hazard-response.model.ts b/src/nshmp-haz/models/www/hazard-service/hazard-response.model.ts
deleted file mode 100644
index 1db487d..0000000
--- a/src/nshmp-haz/models/www/hazard-service/hazard-response.model.ts
+++ /dev/null
@@ -1,67 +0,0 @@
-import {XySequence} from '../../../../nshmp-lib/models/data';
-import * as nshmpWsUtils from '../../../../nshmp-ws-utils';
-
-/**
- * The hazard calculation response.
- */
-export type HazardCalcResponse = nshmpWsUtils.Response<
-  HazardRequestData,
-  HazardResponseData
->;
-
-/*
- * The hazard service request data.
- *
- * Ported from: https://code.usgs.gov/ghsc/nshmp/nshmp-haz-v2
- *    /-/blob/master/src/main/java/gov/usgs/earthquake/nshmp/www/services/HazardService.java
- */
-export interface HazardRequestData {
-  latitude: number;
-  longitude: number;
-  vs30: number;
-}
-
-/*
- * The hazard service calculation response data.
- *
- * Ported from: https://code.usgs.gov/ghsc/nshmp/nshmp-haz-v2
- *    /-/blob/master/src/main/java/gov/usgs/earthquake/nshmp/www/services/HazardService.java
- */
-export interface HazardResponseData {
-  metadata: HazardResponseMetadata;
-  hazardCurves: HazardResponse[];
-}
-
-/*
- * The hazard service calculation response.
- *
- * Ported from: https://code.usgs.gov/ghsc/nshmp/nshmp-haz-v2
- *    /-/blob/master/src/main/java/gov/usgs/earthquake/nshmp/www/services/HazardService.java
- */
-export interface HazardResponse {
-  imt: nshmpWsUtils.metadata.Parameter;
-  data: HazardCurve[];
-}
-
-/*
- * The hazard service calculation response metadata.
- *
- * Ported from: https://code.usgs.gov/ghsc/nshmp/nshmp-haz-v2
- *    /-/blob/master/src/main/java/gov/usgs/earthquake/nshmp/www/services/HazardService.java
- */
-export interface HazardResponseMetadata {
-  xlabel: string;
-  ylabel: string;
-  server: nshmpWsUtils.metadata.Server;
-}
-
-/*
- * The hazard service hazard curve.
- *
- * Ported from: https://code.usgs.gov/ghsc/nshmp/nshmp-haz-v2
- *    /-/blob/master/src/main/java/gov/usgs/earthquake/nshmp/www/services/HazardService.java
- */
-export interface HazardCurve {
-  component: string;
-  values: XySequence;
-}
diff --git a/src/nshmp-haz/models/www/hazard-service/hazard-usage.model.ts b/src/nshmp-haz/models/www/hazard-service/hazard-usage.model.ts
deleted file mode 100644
index e272e94..0000000
--- a/src/nshmp-haz/models/www/hazard-service/hazard-usage.model.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import * as nshmpWsUtils from '../../../../nshmp-ws-utils';
-import {SourceModel} from '../source-model.model';
-
-/**
- * The hazard service usage response.
- */
-export type HazardUsageResponse = nshmpWsUtils.Response<
-  string,
-  HazardRequestMetadata
->;
-
-/**
- * Base source model metadata.
- */
-export interface HazardModelMetadata {
-  model: SourceModel;
-}
-
-/**
- * The hazard service usage request metadata.
- */
-export interface HazardRequestMetadata extends HazardModelMetadata {
-  latitude: nshmpWsUtils.metadata.DoubleParameter;
-  longitude: nshmpWsUtils.metadata.DoubleParameter;
-  vs30: nshmpWsUtils.metadata.DoubleParameter;
-}
diff --git a/src/nshmp-haz/models/www/hazard-service/index.ts b/src/nshmp-haz/models/www/hazard-service/index.ts
deleted file mode 100644
index a60a10c..0000000
--- a/src/nshmp-haz/models/www/hazard-service/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export * from './hazard-response.model';
-export * from './hazard-usage.model';
diff --git a/src/nshmp-haz/models/www/index.ts b/src/nshmp-haz/models/www/index.ts
deleted file mode 100644
index 79a5596..0000000
--- a/src/nshmp-haz/models/www/index.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-/* Export www packages */
-export * from './constraint.model';
-export * as disaggService from './disagg-service';
-export * as hazardService from './hazard-service';
-export * as sourceLogicTreesService from './source-logic-trees-service';
-export * from './source-model.model';
-export * from './xy-data-group.model';
diff --git a/src/nshmp-haz/models/www/source-logic-trees-service/index.ts b/src/nshmp-haz/models/www/source-logic-trees-service/index.ts
deleted file mode 100644
index 1a70c3c..0000000
--- a/src/nshmp-haz/models/www/source-logic-trees-service/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export * from './source-logic-trees-response';
-export * from './source-logic-trees-usage';
diff --git a/src/nshmp-haz/models/www/source-logic-trees-service/source-logic-trees-response.ts b/src/nshmp-haz/models/www/source-logic-trees-service/source-logic-trees-response.ts
deleted file mode 100644
index 839f2e4..0000000
--- a/src/nshmp-haz/models/www/source-logic-trees-service/source-logic-trees-response.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import {Tree} from '../../../../nshmp-lib/models/model/models';
-import * as nshmpWsUtils from '../../../../nshmp-ws-utils';
-
-export type SourceLogicTreesResponse = nshmpWsUtils.Response<
-  SourceLogicTreesRequestData,
-  Tree
->;
-
-export interface SourceLogicTreesRequestData {
-  id: number;
-}
diff --git a/src/nshmp-haz/models/www/source-logic-trees-service/source-logic-trees-usage.ts b/src/nshmp-haz/models/www/source-logic-trees-service/source-logic-trees-usage.ts
deleted file mode 100644
index 00f17e5..0000000
--- a/src/nshmp-haz/models/www/source-logic-trees-service/source-logic-trees-usage.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import {SettingGroup} from '../../../../nshmp-lib/models/model/models';
-import * as nshmpWsUtils from '../../../../nshmp-ws-utils';
-import {HazardModelMetadata} from '../hazard-service';
-
-export type SourceLogicTreesUsage = nshmpWsUtils.Response<
-  string,
-  SourceLogicTreesMetadata
->;
-
-export interface SourceLogicTreesMetadata extends HazardModelMetadata {
-  trees: SettingGroup[];
-}
diff --git a/src/nshmp-haz/models/www/source-model.model.ts b/src/nshmp-haz/models/www/source-model.model.ts
deleted file mode 100644
index faa984b..0000000
--- a/src/nshmp-haz/models/www/source-model.model.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import {Gmm} from '../../../nshmp-lib/models/gmm';
-import {metadata} from '../../../nshmp-ws-utils';
-
-/**
- * Source model.
- */
-export interface SourceModel {
-  bounds: number[];
-  gmms: Set<Gmm>;
-  imts: metadata.Parameter[];
-  map: GeoJSON.FeatureCollection<GeoJSON.Polygon>;
-  name: string;
-  siteClasses: Record<string, number>;
-  sites: GeoJSON.FeatureCollection<GeoJSON.Point>;
-}
diff --git a/src/nshmp-haz/models/www/xy-data-group.model.ts b/src/nshmp-haz/models/www/xy-data-group.model.ts
deleted file mode 100644
index e57af87..0000000
--- a/src/nshmp-haz/models/www/xy-data-group.model.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import {XySequence} from '../../../nshmp-lib/models/data';
-
-export interface XyDataGroup<T> {
-  label: string;
-  xLabel: string;
-  yLabel: string;
-  data: T[];
-}
-
-export interface Series {
-  id: string;
-  label: string;
-  data: XySequence;
-}
diff --git a/src/nshmp-lib/calc/exceedance-model.util.ts b/src/nshmp-lib/calc/exceedance-model.util.ts
deleted file mode 100644
index d642c19..0000000
--- a/src/nshmp-lib/calc/exceedance-model.util.ts
+++ /dev/null
@@ -1,109 +0,0 @@
-import {UncertaintyModel} from '../data';
-import {Maths} from './maths.util';
-
-/**
- * No truncation; model ignores truncation level n.
- *
- * Compute the probability of exceeding a value.
- * @param model to compute exceedance
- * @param value for which to compute the exceedance probability
- */
-const truncationOff = (model: UncertaintyModel, value: number) => {
-  return boundedCcdFn(model, value, 0.0, 1.0);
-};
-
-/**
- * No truncation; model ignores truncation level n.
- *
- * Compute the probability of exceeding a value.
- *
- * @param model to compute exceedance
- * @param sequence for which to compute the exceedance probability
- */
-const truncationOffSequence = (model: UncertaintyModel, sequence: number[]) => {
-  const yValues: number[] = [];
-
-  for (const x of sequence) {
-    yValues.push(truncationOff(model, x));
-  }
-
-  return yValues;
-};
-
-/**
- * Upper truncation only at μ + σ * n.
- *
- * Compute the probability of exceeding a value.
- *
- * @param model to compute exceedance
- * @param value for which to compute the exceedance probability
- */
-const truncationUpperOnly = (model: UncertaintyModel, value: number) => {
-  return boundedCcdFn(model, value, prob(model), 1.0);
-};
-
-/**
- * Upper truncation only at μ + σ * n.
- *
- * Compute the probability of exceeding a value.
- *
- * @param model to compute exceedance
- * @param sequence for which to compute the exceedance probability
- */
-const truncationUpperOnlySequence = (
-  model: UncertaintyModel,
-  sequence: number[]
-) => {
-  const yValues = [];
-
-  for (const x of sequence) {
-    yValues.push(truncationUpperOnly(model, x));
-  }
-
-  return yValues;
-};
-
-/**
- * Bounded complementary cumulative distribution. Compute the probability that
- * a value will be exceeded, subject to upper and lower probability limits.
- *
- * @param model to compute exceedance
- */
-const boundedCcdFn = (
-  model: UncertaintyModel,
-  value: number,
-  pHi: number,
-  pLo: number
-) => {
-  const p = Maths.normalCcdf(model.μ, model.σ, value);
-  return probBoundsCheck((p - pHi) / (pLo - pHi));
-};
-
-/**
- * For truncated distributions, p may be out of range. For upper truncations,
- * p may be less than pHi, yielding a negative value in boundedCcdFn(); for
- * lower truncations, p may be greater than pLo, yielding a value > 1.0 in
- * boundedCcdFn().
- */
-const probBoundsCheck = (p: number) => {
-  return p < 0.0 ? 0.0 : p > 1.0 ? 1.0 : p;
-};
-
-/**
- * Compute ccd value at μ + nσ.
- *
- * @param model to compute exceedance
- */
-const prob = (model: UncertaintyModel) => {
-  return Maths.normalCcdf(model.μ, model.σ, model.μ + model.n * model.σ);
-};
-
-/**
- * Export functions
- */
-export const ExceedanceModel = {
-  truncationOff,
-  truncationOffSequence,
-  truncationUpperOnly,
-  truncationUpperOnlySequence,
-};
diff --git a/src/nshmp-lib/calc/index.ts b/src/nshmp-lib/calc/index.ts
deleted file mode 100644
index 7d54174..0000000
--- a/src/nshmp-lib/calc/index.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-/* calc export */
-export {ExceedanceModel} from './exceedance-model.util';
-export {Maths} from './maths.util';
diff --git a/src/nshmp-lib/calc/maths.util.ts b/src/nshmp-lib/calc/maths.util.ts
deleted file mode 100644
index 5a5a814..0000000
--- a/src/nshmp-lib/calc/maths.util.ts
+++ /dev/null
@@ -1,120 +0,0 @@
-import * as d3 from 'd3-format';
-
-import {XySequence} from '../data';
-import {Imt} from '../gmm';
-import {imtToPeriod} from '../gmm/imt.model';
-
-/**
- * Normal complementary cumulative distribution function.
- *
- * @param μ mean
- * @param σ standard deviation
- * @param x variate
- */
-const normalCcdf = (μ: number, σ: number, x: number) => {
-  return (1.0 + erf((μ - x) / (σ * Math.sqrt(2)))) * 0.5;
-};
-
-/**
- * Error function approximation of Abramowitz and Stegun, formula 7.1.26 in
- * the <em>Handbook of Mathematical Functions with Formulas, Graphs, and
- * Mathematical Tables</em>. Although the approximation is only valid for
- * x ≥ 0, because erf(x) is an odd function,
- * erf(x) = −erf(−x) and negative values are supported.
- */
-const erf = (x: number) => {
-  return x < 0.0 ? -erfBase(-x) : erfBase(x);
-};
-
-/**
- * Round a number to specific format
- *
- * @param value Value to round
- * @param scale Format scale
- */
-const round = (value: number, scale: number) => {
-  const format = d3.format(`.${scale}f`);
-  return Number(format(value));
-};
-
-/**
- * Calculate the response sepectrum for each IMT.
- *
- * @param hazards The hazard curves by imt
- * @param returnPeriod The return period (in years) to calculate at
- */
-const responseSpectrum = (
-  hazards: Map<Imt, XySequence>,
-  returnPeriod: number
-): XySequence => {
-  const xs: number[] = [];
-  const ys: number[] = [];
-
-  for (const [imt, xySequence] of hazards) {
-    xs.push(imtToPeriod(imt));
-    ys.push(calculateResponseSpectrum(xySequence, returnPeriod));
-  }
-
-  return {
-    xs,
-    ys,
-  };
-};
-
-const calculateResponseSpectrum = (
-  xySequence: XySequence,
-  returnPeriod: number
-): number => {
-  returnPeriod = 1 / returnPeriod;
-  const xValues = xySequence.xs;
-  const yValues = xySequence.ys;
-
-  const afeIndexBelowReturnPeriod = yValues.findIndex(y => {
-    return y < returnPeriod;
-  });
-
-  const x0 = xValues[afeIndexBelowReturnPeriod - 1];
-  const x1 = xValues[afeIndexBelowReturnPeriod];
-  const y0 = yValues[afeIndexBelowReturnPeriod - 1];
-  const y1 = yValues[afeIndexBelowReturnPeriod];
-  const x = returnPeriodInterpolation(x0, x1, y0, y1, returnPeriod);
-  return isNaN(x) ? x : round(x, 6);
-};
-
-const returnPeriodInterpolation = (
-  x0: number,
-  x1: number,
-  y0: number,
-  y1: number,
-  returnPeriod: number
-): number => {
-  return x0 + (Math.log10(returnPeriod / y0) * (x1 - x0)) / Math.log10(y1 / y0);
-};
-
-const erfBase = (x: number) => {
-  const P = 0.3275911;
-  const A1 = 0.254829592;
-  const A2 = -0.284496736;
-  const A3 = 1.421413741;
-  const A4 = -1.453152027;
-  const A5 = 1.061405429;
-
-  const t = 1 / (1 + P * x);
-  const tsq = t * t;
-
-  return (
-    1 -
-    (A1 * t + A2 * tsq + A3 * tsq * t + A4 * tsq * tsq + A5 * tsq * tsq * t) *
-      Math.exp(-x * x)
-  );
-};
-
-/**
- * Export functions
- */
-export const Maths = {
-  normalCcdf,
-  erf,
-  round,
-  responseSpectrum,
-};
diff --git a/src/nshmp-lib/data/index.ts b/src/nshmp-lib/data/index.ts
deleted file mode 100644
index cbb3b00..0000000
--- a/src/nshmp-lib/data/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export * from './uncertainty-model.model';
-export * from './xy-sequence.model';
diff --git a/src/nshmp-lib/data/uncertainty-model.model.ts b/src/nshmp-lib/data/uncertainty-model.model.ts
deleted file mode 100644
index 4390c8c..0000000
--- a/src/nshmp-lib/data/uncertainty-model.model.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * Container for mean, standard deviation, and truncation level.
- */
-export interface UncertaintyModel {
-  /** Mean */
-  μ: number;
-
-  /** Standard deviation */
-  σ: number;
-
-  /** Truncation level */
-  n: number;
-}
diff --git a/src/nshmp-lib/data/xy-sequence.model.ts b/src/nshmp-lib/data/xy-sequence.model.ts
deleted file mode 100644
index f3030ad..0000000
--- a/src/nshmp-lib/data/xy-sequence.model.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export interface XySequence {
-  xs: number[];
-  ys: number[];
-}
diff --git a/src/nshmp-lib/geo/basin.model.ts b/src/nshmp-lib/geo/basin.model.ts
deleted file mode 100644
index 279106c..0000000
--- a/src/nshmp-lib/geo/basin.model.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import {Region} from './region.model';
-
-export enum Basin {
-  BAY_AREA = 'Bay Area',
-  LOS_ANGELES = 'Los Angeles',
-  PUGET_LOWLAND = 'Puget Lowland',
-  WASATCH_FRONT = 'Wasatch Front',
-}
-
-export interface BasinRegion {
-  title: string;
-  basin: Basin;
-  model: string;
-  region: Region;
-}
-
-export interface BasinValues {
-  z1p0: BasinValue;
-  z2p5: BasinValue;
-}
-
-export interface BasinValue {
-  model: string;
-  value: number;
-}
diff --git a/src/nshmp-lib/geo/index.ts b/src/nshmp-lib/geo/index.ts
deleted file mode 100644
index fe5e905..0000000
--- a/src/nshmp-lib/geo/index.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export * from './basin.model';
-export * from './region.model';
-export * from './site.model';
diff --git a/src/nshmp-lib/geo/region.model.ts b/src/nshmp-lib/geo/region.model.ts
deleted file mode 100644
index 67a67a9..0000000
--- a/src/nshmp-lib/geo/region.model.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import {Location} from './site.model';
-
-export interface Region {
-  name: string;
-  border: Location[];
-  interiors: Location[][];
-}
diff --git a/src/nshmp-lib/geo/site.model.ts b/src/nshmp-lib/geo/site.model.ts
deleted file mode 100644
index 7dc22cb..0000000
--- a/src/nshmp-lib/geo/site.model.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-export interface Site {
-  location: Location;
-  vs30: number;
-  vsInferred: boolean;
-  z1p0: number;
-  z2p5: number;
-}
-
-export interface Location {
-  latitude: number;
-  longitude: number;
-}
-
-export interface Bounds {
-  min: Location;
-  max: Location;
-}
diff --git a/src/nshmp-lib/gmm/gmm-input.model.ts b/src/nshmp-lib/gmm/gmm-input.model.ts
deleted file mode 100644
index 8a8f2a6..0000000
--- a/src/nshmp-lib/gmm/gmm-input.model.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-export interface GmmInput {
-  Mw: number;
-  rJB: number;
-  rRup: number;
-  rX: number;
-  dip: number;
-  width: number;
-  zTor: number;
-  zHyp: number;
-  rake: number;
-  vs30: number;
-  vsInf: boolean;
-  z1p0: number;
-  z2p5: number;
-}
diff --git a/src/nshmp-lib/gmm/gmm.model.ts b/src/nshmp-lib/gmm/gmm.model.ts
deleted file mode 100644
index 91bb1fd..0000000
--- a/src/nshmp-lib/gmm/gmm.model.ts
+++ /dev/null
@@ -1,190 +0,0 @@
-export enum Gmm {
-  /* Active continent NGA-West1 WUS 2008 */
-
-  BA_08,
-  CB_08,
-  CY_08,
-
-  /* Active continent NGA-West2 WUS 2014 */
-
-  ASK_14,
-  BSSA_14,
-  CB_14,
-  CY_14,
-  IDRISS_14,
-
-  /*
-   * Active continent NGA-West2 WUS 2018. These have basin amplification-only
-   * effects implemented.
-   */
-
-  ASK_14_BASIN,
-  BSSA_14_BASIN,
-  CB_14_BASIN,
-  CY_14_BASIN,
-
-  /* Active Continent AK 2007, HI 1998 */
-
-  AS_97,
-  BJF_97,
-  CAMPBELL_97,
-  CB_03,
-  MT_97,
-  SADIGH_97,
-
-  /* Subduction Interface and Slab WUS 2008 2014 2018, AK 2007 */
-
-  AB_03_GLOBAL_INTERFACE,
-  AB_03_GLOBAL_SLAB,
-  AB_03_GLOBAL_SLAB_LOW_SAT,
-  AB_03_CASCADIA_INTERFACE,
-  AB_03_CASCADIA_SLAB,
-  AB_03_CASCADIA_SLAB_LOW_SAT,
-  AM_09_INTERFACE,
-  AM_09_INTERFACE_BASIN,
-  NGA_SUB_USGS_INTERFACE,
-  NGA_SUB_USGS_SLAB,
-  NGA_SUB_USGS_INTERFACE_NO_EPI,
-  NGA_SUB_USGS_SLAB_NO_EPI,
-  BCHYDRO_12_INTERFACE,
-  BCHYDRO_12_SLAB,
-  BCHYDRO_12_INTERFACE_BASIN,
-  BCHYDRO_12_SLAB_BASIN,
-  BCHYDRO_12_INTERFACE_BACKARC,
-  BCHYDRO_12_SLAB_BACKARC,
-  BCHYDRO_12_INTERFACE_BASIN_BACKARC,
-  BCHYDRO_12_SLAB_BASIN_BACKARC,
-  YOUNGS_97_INTERFACE,
-  YOUNGS_97_SLAB,
-  ZHAO_06_INTERFACE,
-  ZHAO_06_SLAB,
-  ZHAO_06_INTERFACE_BASIN,
-  ZHAO_06_SLAB_BASIN,
-
-  /* Stable continent CEUS 2008 2014 */
-
-  AB_06_PRIME,
-  AB_06_140BAR,
-  AB_06_200BAR,
-  ATKINSON_08_PRIME,
-  CAMPBELL_03,
-  FRANKEL_96,
-  PEZESHK_11,
-  SILVA_02,
-  SOMERVILLE_01,
-  TP_05,
-  TORO_97_MW,
-
-  /* Johnston mag converting flavors of CEUS 2008 */
-
-  AB_06_140BAR_J,
-  AB_06_200BAR_J,
-  CAMPBELL_03_J,
-  FRANKEL_96_J,
-  SILVA_02_J,
-  TP_05_J,
-
-  /* Atkinson Boore mag converting flavors of CEUS 2008 */
-
-  AB_06_140BAR_AB,
-  AB_06_200BAR_AB,
-  CAMPBELL_03_AB,
-  FRANKEL_96_AB,
-  SILVA_02_AB,
-  TP_05_AB,
-  TORO_97_MB,
-
-  /* Other */
-
-  ATKINSON_10,
-  ATKINSON_15,
-  GK_15,
-  WONG_15,
-  ZHAO_16_SHALLOW_CRUST,
-  ZHAO_16_UPPER_MANTLE,
-  ZHAO_16_INTERFACE,
-  ZHAO_16_SLAB,
-  MCVERRY_00_CRUSTAL,
-  MCVERRY_00_INTERFACE,
-  MCVERRY_00_SLAB,
-  MCVERRY_00_VOLCANIC,
-
-  /* NGA-East for USGS */
-
-  NGA_EAST_USGS,
-  NGA_EAST_USGS_1,
-  NGA_EAST_USGS_2,
-  NGA_EAST_USGS_3,
-  NGA_EAST_USGS_4,
-  NGA_EAST_USGS_5,
-  NGA_EAST_USGS_6,
-  NGA_EAST_USGS_7,
-  NGA_EAST_USGS_8,
-  NGA_EAST_USGS_9,
-  NGA_EAST_USGS_10,
-  NGA_EAST_USGS_11,
-  NGA_EAST_USGS_12,
-  NGA_EAST_USGS_13,
-  NGA_EAST_USGS_14,
-  NGA_EAST_USGS_15,
-  NGA_EAST_USGS_16,
-  NGA_EAST_USGS_17,
-
-  /* NGA-East USGS Seed Tree */
-
-  NGA_EAST_USGS_SEEDS,
-
-  /* NGA-East Seed Models */
-
-  NGA_EAST_SEED_1CCSP,
-  NGA_EAST_SEED_1CVSP,
-  NGA_EAST_SEED_2CCSP,
-  NGA_EAST_SEED_2CVSP,
-  NGA_EAST_SEED_B_A04,
-  NGA_EAST_SEED_B_AB14,
-  NGA_EAST_SEED_B_AB95,
-  NGA_EAST_SEED_B_BCA10D,
-  NGA_EAST_SEED_B_BS11,
-  NGA_EAST_SEED_B_SGD02,
-  NGA_EAST_SEED_FRANKEL,
-  NGA_EAST_SEED_GRAIZER,
-  NGA_EAST_SEED_GRAIZER16,
-  NGA_EAST_SEED_GRAIZER17,
-  NGA_EAST_SEED_HA15,
-  NGA_EAST_SEED_PEER_EX,
-  NGA_EAST_SEED_PEER_GP,
-  NGA_EAST_SEED_PZCT15_M1SS,
-  NGA_EAST_SEED_PZCT15_M2ES,
-  NGA_EAST_SEED_SP15,
-  NGA_EAST_SEED_SP16,
-  NGA_EAST_SEED_YA15,
-
-  /**
-   * 2014 CEUS weight-averaged GMM. This is the fault-variant that includes
-   * Somerville ,2011).
-   */
-  COMBINED_CEUS_2014,
-
-  /**
-   * 2018 CEUS weight-averaged GMM.
-   */
-  COMBINED_CEUS_2018,
-
-  /**
-   * 2018 WUS weight-averaged GMM. These are the basin-amplifying flavors of
-   * NGA-West2 and does not include Idriss.
-   */
-  COMBINED_WUS_2014_41,
-
-  /**
-   * 2018 WUS weight-averaged GMM. These are the basin-amplifying flavors of
-   * NGA-West2 and does not include Idriss.
-   */
-  COMBINED_WUS_2014_42,
-
-  /**
-   * 2018 WUS weight-averaged GMM. These are the basin-amplifying flavors of
-   * NGA-West2 and does not include Idriss.
-   */
-  COMBINED_WUS_2018,
-}
diff --git a/src/nshmp-lib/gmm/imt.model.ts b/src/nshmp-lib/gmm/imt.model.ts
deleted file mode 100644
index c23e2e1..0000000
--- a/src/nshmp-lib/gmm/imt.model.ts
+++ /dev/null
@@ -1,119 +0,0 @@
-export enum Imt {
-  PGA = 'PGA',
-  PGV = 'PGV',
-  PGD = 'PGD',
-  ASI = 'ASI',
-  SI = 'SI',
-  DSI = 'DSI',
-  CAV = 'CAV',
-  DS575 = 'DS575',
-  DS595 = 'DS595',
-  AI = 'AI',
-  SA0P01 = 'SA0P01',
-  SA0P02 = 'SA0P02',
-  SA0P025 = 'SA0P025',
-  SA0P03 = 'SA0P03',
-  SA0P04 = 'SA0P04',
-  SA0P05 = 'SA0P05',
-  SA0P06 = 'SA0P06',
-  SA0P07 = 'SA0P07',
-  SA0P075 = 'SA0P075',
-  SA0P08 = 'SA0P08',
-  SA0P09 = 'SA0P09',
-  SA0P1 = 'SA0P1',
-  SA0P12 = 'SA0P12',
-  SA0P14 = 'SA0P14',
-  SA0P15 = 'SA0P15',
-  SA0P16 = 'SA0P16',
-  SA0P17 = 'SA0P17',
-  SA0P18 = 'SA0P18',
-  SA0P2 = 'SA0P2',
-  SA0P25 = 'SA0P25',
-  SA0P3 = 'SA0P3',
-  SA0P35 = 'SA0P35',
-  SA0P4 = 'SA0P4',
-  SA0P45 = 'SA0P45',
-  SA0P5 = 'SA0P5',
-  SA0P6 = 'SA0P6',
-  SA0P7 = 'SA0P7',
-  SA0P75 = 'SA0P75',
-  SA0P8 = 'SA0P8',
-  SA0P9 = 'SA0P9',
-  SA1P0 = 'SA1P0',
-  SA1P25 = 'SA1P25',
-  SA1P5 = 'SA1P5',
-  SA2P0 = 'SA2P0',
-  SA2P5 = 'SA2P5',
-  SA3P0 = 'SA3P0',
-  SA3P5 = 'SA3P5',
-  SA4P0 = 'SA4P0',
-  SA4P5 = 'SA4P5',
-  SA5P0 = 'SA5P0',
-  SA6P0 = 'SA6P0',
-  SA7P5 = 'SA7P5',
-  SA10P0 = 'SA10P0',
-}
-
-export const imtToPeriod = (imt: Imt): number => {
-  if (imt === Imt.PGA || imt === Imt.PGV) {
-    return 0.001;
-  } else if (imt.startsWith('SA')) {
-    return Number(imt.substring(2).replace('P', '.'));
-  } else {
-    throw new Error(`Cannot convert ${imt}`);
-  }
-};
-
-export const imtToString = (imt: Imt): string => {
-  switch (imt) {
-    case Imt.PGA:
-      return 'Peak Ground Acceleration';
-    case Imt.PGV:
-      return 'Peak Ground Velocity';
-    case Imt.PGD:
-      return 'Peak Ground Displacement';
-    case Imt.AI:
-      return 'Arias Intensity';
-    case Imt.ASI:
-      return 'Acceleration Spectrum Intensity';
-    case Imt.DSI:
-      return 'Displacement Spectrum Intensity';
-    case Imt.SI:
-      return 'Spectrum intensity';
-    case Imt.CAV:
-      return 'Cumulative Absolute Velocity';
-    case Imt.DS575:
-      return 'Significant Duration 5-75%';
-    case Imt.DS595:
-      return 'Significant Duration 5-95%';
-    default:
-      return `${imtToPeriod(imt)} Second Spectral Acceleration`;
-  }
-};
-
-export const imtToUnits = (imt: Imt): string => {
-  switch (imt) {
-    case Imt.PGA:
-      return 'g';
-    case Imt.PGV:
-      return 'cm/s';
-    case Imt.PGD:
-      return 'cm';
-    case Imt.AI:
-      return 'm/s';
-    case Imt.ASI:
-      return 'gâ‹…s';
-    case Imt.DSI:
-      return 'cmâ‹…s';
-    case Imt.SI:
-      return 'cmâ‹…s/s';
-    case Imt.CAV:
-      return 'gâ‹…s';
-    case Imt.DS575:
-      return 's';
-    case Imt.DS595:
-      return 's';
-    default:
-      return 'g';
-  }
-};
diff --git a/src/nshmp-lib/gmm/index.ts b/src/nshmp-lib/gmm/index.ts
deleted file mode 100644
index a9cb89d..0000000
--- a/src/nshmp-lib/gmm/index.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export * from './gmm.model';
-export * from './gmm-input.model';
-export * from './imt.model';
-export * from './nehrp-site-class.model';
-export * from './rate-type.model';
diff --git a/src/nshmp-lib/gmm/nehrp-site-class.model.ts b/src/nshmp-lib/gmm/nehrp-site-class.model.ts
deleted file mode 100644
index 90c140c..0000000
--- a/src/nshmp-lib/gmm/nehrp-site-class.model.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * NEHRP site class.
- *
- * Ported from: https://code.usgs.gov/ghsc/nshmp/nshmp-lib
- *    /-/blob/master/src/main/java/gov/usgs/earthquake/nshmp/gmm/NehrpSiteClass.java
- */
-export enum NehrpSiteClass {
-  A = 'A',
-  AB = 'AB',
-  B = 'B',
-  BC = 'BC',
-  C = 'C',
-  CD = 'CD',
-  D = 'D',
-  DE = 'DE',
-  E = 'E',
-}
-
-/**
- * The NEHRP site class condition.
- *
- * Ported from: https://code.usgs.gov/ghsc/nshmp/nshmp-lib
- *    /-/blob/master/src/main/java/gov/usgs/earthquake/nshmp/gmm/NehrpSiteClass.java
- */
-export enum NehrpCondition {
-  A = 'very hard rock',
-  AB = 'hard rock',
-  B = 'medium hard rock',
-  BC = 'soft rock',
-  C = 'very dense soil or hard clay',
-  CD = 'dense sand or very stiff clay',
-  D = 'medium dense sand or stiff clay',
-  DE = 'loose sand or medium stiff clay',
-  E = 'very loose sand or soft clay',
-}
diff --git a/src/nshmp-lib/gmm/rate-type.model.ts b/src/nshmp-lib/gmm/rate-type.model.ts
deleted file mode 100644
index e31b35e..0000000
--- a/src/nshmp-lib/gmm/rate-type.model.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export enum RateType {
-  RECURRENCE,
-  SLIP_RATE,
-  VERTICAL_SLIP_RATE,
-}
diff --git a/src/nshmp-lib/index.ts b/src/nshmp-lib/index.ts
deleted file mode 100644
index ea79905..0000000
--- a/src/nshmp-lib/index.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export * as calc from './calc';
-export * as data from './data';
-export * as geo from './geo';
-export * as model from './model';
-export * as nshm from './nshm';
diff --git a/src/nshmp-lib/model/index.ts b/src/nshmp-lib/model/index.ts
deleted file mode 100644
index 624e47b..0000000
--- a/src/nshmp-lib/model/index.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export * from './mfd';
-export * from './models';
-export * from './source-type';
-export * from './tectonic-setting';
diff --git a/src/nshmp-lib/model/mfd.ts b/src/nshmp-lib/model/mfd.ts
deleted file mode 100644
index 31e91f7..0000000
--- a/src/nshmp-lib/model/mfd.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-import {XySequence} from '../data';
-
-export enum MfdType {
-  GR = 'GR',
-  GR_MMAX_GR = 'GR_MMAX_GR',
-  GR_MMAX_SINGLE = 'GR_MMAX_SINGLE',
-  GR_TAPER = 'GR_TAPER',
-  INCR = 'INCR',
-  SINGLE = 'SINGLE',
-}
-
-export interface GutenbergRichter extends MfdProperties {
-  a: number;
-  b: number;
-  Δm: number;
-  mMin: number;
-  mMax: number;
-}
-
-export interface Mfd {
-  data: XySequence;
-  props: MfdProperties;
-}
-
-export interface MfdProperties {
-  type: MfdType;
-}
-
-export interface Single extends MfdProperties {
-  m: number;
-  rate: number;
-}
-
-export interface TaperedGr extends GutenbergRichter {
-  mc: number;
-}
diff --git a/src/nshmp-lib/model/models.ts b/src/nshmp-lib/model/models.ts
deleted file mode 100644
index 238af8e..0000000
--- a/src/nshmp-lib/model/models.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-import {XySequence} from '../data';
-import {Mfd} from './mfd';
-import {SourceType} from './source-type';
-import {TectonicSettings} from './tectonic-setting';
-
-export interface MfdBranch {
-  id: string;
-  mfd: Mfd;
-  weight: number;
-}
-
-export interface SettingGroup {
-  data: SourceGroup[];
-  setting: TectonicSettings;
-}
-
-export interface SourceBranch {
-  branch: string;
-  mfds: MfdBranch[];
-  name: string;
-  path: string;
-  weight: number;
-}
-
-export interface SourceGroup {
-  data: TreeInfo[];
-  type: SourceType;
-}
-
-export interface Tree {
-  branches: SourceBranch[];
-  id: number;
-  name: string;
-  setting: TectonicSettings;
-  totalMfd: XySequence;
-  type: SourceType;
-}
-
-export interface TreeInfo {
-  id: number;
-  name: string;
-}
diff --git a/src/nshmp-lib/model/source-type.ts b/src/nshmp-lib/model/source-type.ts
deleted file mode 100644
index 059b13b..0000000
--- a/src/nshmp-lib/model/source-type.ts
+++ /dev/null
@@ -1,59 +0,0 @@
-import {capitalCase} from 'change-case';
-
-/**
- * Identifier for different earthquake {@link Source} types. These are declared
- * in a preferred order of iteration, with potentially longer running source
- * types coming first.
- *
- * Ported from: https://code.usgs.gov/ghsc/nshmp/nshmp-lib
- *    /-/blob/master/src/main/java/gov/usgs/earthquake/nshmp/model/SourceType.java
- */
-export enum SourceType {
-  /** Finite fault. */
-  FAULT = 'FAULT',
-
-  /** Fault cluster. */
-  FAULT_CLUSTER = 'FAULT_CLUSTER',
-
-  /** Fault system. */
-  FAULT_SYSTEM = 'FAULT_SYSTEM',
-
-  /** Gridded (background) seismicity. */
-  GRID = 'GRID',
-
-  /** Subduction interface. */
-  INTERFACE = 'INTERFACE',
-
-  /** Subduction intraslab. */
-  INTRASLAB = 'INSTRASLAB',
-
-  /** The combined source types, used in web services */
-  TOTAL = 'TOTAL',
-
-  /** Zone (a.k.a. Area). */
-  ZONE = 'ZONE',
-}
-
-/**
- * Returns the capital case of the source type string.
- *
- * @param sourceType The source type
- */
-export function sourceTypeToString(sourceType: SourceType): string {
-  return capitalCase(sourceType);
-}
-
-/**
- * Converts source type string into a source type.
- *
- * @param s The pascal case of the source type
- */
-export function sourceTypeFromString(s: string): SourceType {
-  const sourceType = Object.values(SourceType).find(type => type === s);
-
-  if (sourceType === undefined) {
-    throw new Error(`Source type [${s}] does not exists`);
-  }
-
-  return sourceType;
-}
diff --git a/src/nshmp-lib/model/tectonic-setting.ts b/src/nshmp-lib/model/tectonic-setting.ts
deleted file mode 100644
index 7741e2b..0000000
--- a/src/nshmp-lib/model/tectonic-setting.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import {capitalCase} from 'change-case';
-
-export enum TectonicSettings {
-  /** Active, shallow crust. */
-  ACTIVE_CRUST = 'ACTIVE_CRUST',
-
-  /** Stable, shallow crust. */
-  STABLE_CRUST = 'STABLE_CRUST',
-
-  /** Subduction */
-  SUBDUCTION = 'SUBDUCTION',
-
-  /** Volcanic. */
-  VOLCANIC = 'VOLCANIC',
-}
-
-export function tectonicSettingsToString(setting: TectonicSettings): string {
-  return capitalCase(setting);
-}
diff --git a/src/nshmp-lib/nshm/index.ts b/src/nshmp-lib/nshm/index.ts
deleted file mode 100644
index 1fe7851..0000000
--- a/src/nshmp-lib/nshm/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export * from './nshm.model';
-export * from './nshm-region.model';
diff --git a/src/nshmp-lib/nshm/nshm-region.model.ts b/src/nshmp-lib/nshm/nshm-region.model.ts
deleted file mode 100644
index fa97606..0000000
--- a/src/nshmp-lib/nshm/nshm-region.model.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * NSHM regions.
- */
-export enum NshmRegion {
-  ALASKA = 'ALASKA',
-  CONUS = 'CONUS',
-  HAWAII = 'HAWAII',
-}
-
-/**
- * Returns the short form of the region.
- *
- * @param region The NSHM region
- */
-export function nshmRegionShort(region: NshmRegion): string {
-  switch (region) {
-    case NshmRegion.ALASKA:
-      return 'AK';
-    case NshmRegion.CONUS:
-      return NshmRegion.CONUS;
-    case NshmRegion.HAWAII:
-      return 'HI';
-    default:
-      throw new Error(`Region [${region}] not supported`);
-  }
-}
diff --git a/src/nshmp-lib/nshm/nshm.model.ts b/src/nshmp-lib/nshm/nshm.model.ts
deleted file mode 100644
index b041232..0000000
--- a/src/nshmp-lib/nshm/nshm.model.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-import {NshmRegion} from './nshm-region.model';
-
-/**
- * ID for NSHMs
- */
-export enum NshmId {
-  ALASKA_2007 = 'ALASKA_2007',
-  ALASKA_2023 = 'ALASKA_2023',
-  AMSAM_2012 = 'AMSAM_2012',
-  CONUS_2018 = 'CONUS_2018',
-  CONUS_2023 = 'CONUS_2023',
-  GNMI_2012 = 'GNMI_2012',
-  HAWAII_2021 = 'HAWAII_2021',
-  PRVI_2003 = 'PRVI_2003',
-}
-
-/**
- * Returns the region associated with the NSHM.
- *
- * @param nshmId The NSHM id
- */
-export function nshmRegion(nshmId: NshmId): NshmRegion {
-  const region = nshmId.split('_').shift();
-
-  if (region === undefined) {
-    throw new Error(`NSHM ${nshmId} not supported`);
-  }
-
-  return region as NshmRegion;
-}
-
-/**
- * Returns the year associated with NSHM.
- *
- * @param nshmId The NSHM id
- */
-export function nshmYear(nshmId: NshmId): number {
-  const year = nshmId.split('_').pop();
-
-  if (year === undefined) {
-    throw new Error(`NSHM ${nshmId} not supported`);
-  }
-
-  return Number.parseInt(year);
-}
diff --git a/src/nshmp-ws-static/index.ts b/src/nshmp-ws-static/index.ts
deleted file mode 100644
index e9644da..0000000
--- a/src/nshmp-ws-static/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from './models';
diff --git a/src/nshmp-ws-static/models/index.ts b/src/nshmp-ws-static/models/index.ts
deleted file mode 100644
index eefa09d..0000000
--- a/src/nshmp-ws-static/models/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export * from './static-hazard-response.model';
-export * from './static-hazard-usage.model';
diff --git a/src/nshmp-ws-static/models/static-hazard-response.model.ts b/src/nshmp-ws-static/models/static-hazard-response.model.ts
deleted file mode 100644
index 23b27b7..0000000
--- a/src/nshmp-ws-static/models/static-hazard-response.model.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-import {XySequence} from '../../nshmp-lib';
-import * as nshmpWsUtils from '../../nshmp-ws-utils';
-
-export type StaticHazardResponse = nshmpWsUtils.Response<
-  StaticRequestData,
-  StaticResponseData<HazardResponseMetadata>[][]
->;
-
-export type StaticHazardResponseSiteClass = nshmpWsUtils.Response<
-  StaticRequestDataSiteClass,
-  StaticResponseData<HazardResponseMetadata>[]
->;
-
-export type StaticGroundMotionResponse = nshmpWsUtils.Response<
-  StaticRequestData,
-  StaticResponseData<GroundMotionResponseMetadata>[]
->;
-
-export type StaticGroundMotionResponseSiteClass = nshmpWsUtils.Response<
-  StaticRequestData,
-  StaticResponseData<GroundMotionResponseMetadata>
->;
-export interface StaticRequestData {
-  latitude: number;
-  longitude: number;
-}
-
-export interface StaticRequestDataSiteClass extends StaticRequestData {
-  siteClass: string;
-}
-
-export interface StaticResponseData<T extends StaticResponseMetadata> {
-  metadata: T;
-  data: XySequence;
-}
-
-export interface StaticResponseMetadata {
-  siteClass: string;
-  xLabel: string;
-  yLabel: string;
-}
-
-export interface HazardResponseMetadata extends StaticResponseMetadata {
-  imt: nshmpWsUtils.metadata.Parameter;
-}
-
-export interface GroundMotionResponseMetadata extends StaticResponseMetadata {
-  imtValues: Record<string, number>;
-}
diff --git a/src/nshmp-ws-static/models/static-hazard-usage.model.ts b/src/nshmp-ws-static/models/static-hazard-usage.model.ts
deleted file mode 100644
index 89c71af..0000000
--- a/src/nshmp-ws-static/models/static-hazard-usage.model.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-import * as nshmpWsUtils from '../../nshmp-ws-utils';
-import {DoubleParameter, Parameter} from '../../nshmp-ws-utils/models/metadata';
-
-export type StaticHazardUsage = nshmpWsUtils.Response<
-  string,
-  StaticHazardUsageResponse
->;
-
-export interface StaticHazardUsageResponse {
-  description: string;
-  syntax: string[];
-  models: HazardSourceModel;
-  vs30: DoubleParameter;
-}
-
-export interface HazardSourceModel {
-  imts: Parameter[];
-  latitude: DoubleParameter;
-  longitude: DoubleParameter;
-  map: GeoJSON.FeatureCollection<GeoJSON.Polygon>;
-  name: string;
-  netcdfMetadata: NetcdfMetadata;
-  siteClasses: Record<string, number>;
-  sites: GeoJSON.FeatureCollection<GeoJSON.Point>;
-}
-
-export interface NetcdfMetadata {
-  netcdfFile: string;
-  scienceBaseMetadata: object;
-}
-
-export interface ScienceBaseMetadata {
-  catalogId: string;
-  dataType: string;
-  description: string;
-  gridStep: number;
-  history: string;
-  label: string;
-  region: string;
-  scieneBaseInfo: ScienceBaseInfo[];
-  year: number;
-}
-
-export interface ScienceBaseInfo {
-  id: string;
-  file: string;
-  files: CatalogFileInfo[];
-  scienceBaseVersion: string;
-  title: string;
-  url: string;
-}
-
-export interface CatalogFileInfo {
-  file: string;
-  siteClass: string;
-  vs30: string;
-}
diff --git a/src/nshmp-ws-utils/index.ts b/src/nshmp-ws-utils/index.ts
deleted file mode 100644
index e9644da..0000000
--- a/src/nshmp-ws-utils/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from './models';
diff --git a/src/nshmp-ws-utils/models/index.ts b/src/nshmp-ws-utils/models/index.ts
deleted file mode 100644
index f36b209..0000000
--- a/src/nshmp-ws-utils/models/index.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export * as metadata from './metadata';
-export * from './response.model';
-export * from './service-error.model';
-export * from './status.model';
diff --git a/src/nshmp-ws-utils/models/metadata/double-parameter.model.ts b/src/nshmp-ws-utils/models/metadata/double-parameter.model.ts
deleted file mode 100644
index 32c53f6..0000000
--- a/src/nshmp-ws-utils/models/metadata/double-parameter.model.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * Double parameter metadata.
- *
- * Ported from: https://code.usgs.gov/ghsc/nshmp/nshmp-haz-v2
- *  /-/blob/master/src/main/java/gov/usgs/earthquake/nshmp/www/meta/DoubleParameter.java
- */
-export interface DoubleParameter {
-  name: string;
-  units: string;
-  min: number;
-  max: number;
-}
diff --git a/src/nshmp-ws-utils/models/metadata/enum-parameter.ts b/src/nshmp-ws-utils/models/metadata/enum-parameter.ts
deleted file mode 100644
index 53f9a47..0000000
--- a/src/nshmp-ws-utils/models/metadata/enum-parameter.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * Enum parameter from nshmp usage.
- */
-export interface EnumParameter<T> {
-  label: string;
-  type: string;
-  values: T[];
-}
-
-/**
- * Enum parameter values from nshmp usage.
- */
-export interface EnumParameterValues {
-  id: number;
-  value: string;
-  display: string;
-  displayorder: number;
-}
diff --git a/src/nshmp-ws-utils/models/metadata/index.ts b/src/nshmp-ws-utils/models/metadata/index.ts
deleted file mode 100644
index 99f5dfe..0000000
--- a/src/nshmp-ws-utils/models/metadata/index.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export * from './double-parameter.model';
-export * from './enum-parameter';
-export * from './parameter.model';
-export * from './server.model';
-export * from './string-parameter.model';
diff --git a/src/nshmp-ws-utils/models/metadata/parameter.model.ts b/src/nshmp-ws-utils/models/metadata/parameter.model.ts
deleted file mode 100644
index 1162afd..0000000
--- a/src/nshmp-ws-utils/models/metadata/parameter.model.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-/**
- * Simple parameter.
- *
- * Ported from: https://code.usgs.gov/ghsc/nshmp/nshmp-haz-v2
- *    /-/blob/master/src/main/java/gov/usgs/earthquake/nshmp/www/meta/Parameter.java
- */
-export interface Parameter {
-  display: string;
-  value: string;
-}
diff --git a/src/nshmp-ws-utils/models/metadata/server.model.ts b/src/nshmp-ws-utils/models/metadata/server.model.ts
deleted file mode 100644
index ee229f1..0000000
--- a/src/nshmp-ws-utils/models/metadata/server.model.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * Server information from responses.
- *
- * Ported from: https://code.usgs.gov/ghsc/nshmp/nshmp-haz-v2
- *    /-/blob/master/src/main/java/gov/usgs/earthquake/nshmp/www/meta/Metadata.java
- */
-export interface Server {
-  threads: number;
-  timer: string;
-  version: string;
-}
diff --git a/src/nshmp-ws-utils/models/metadata/string-parameter.model.ts b/src/nshmp-ws-utils/models/metadata/string-parameter.model.ts
deleted file mode 100644
index 5f4a40b..0000000
--- a/src/nshmp-ws-utils/models/metadata/string-parameter.model.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-export interface StringParameter<T> {
-  label: string;
-  values: T[];
-}
-
-export interface StringParameterValues {
-  id: string;
-  label: string;
-}
diff --git a/src/nshmp-ws-utils/models/response.model.ts b/src/nshmp-ws-utils/models/response.model.ts
deleted file mode 100644
index d588898..0000000
--- a/src/nshmp-ws-utils/models/response.model.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import {Status} from './status.model';
-
-/**
- * Generic web service response used for usage, error, and results.
- */
-export interface Response<T, V> {
-  name: string;
-  date: string;
-  status: Status;
-  url: string;
-  metadata: ResponseMetadata;
-  request: T;
-  response: V;
-}
-
-export interface ResponseMetadata {
-  repositories: VersionInfo[];
-}
-
-export interface VersionInfo {
-  projectName: string;
-  url: string;
-  version: string;
-  branchName: string;
-  commitDistance: number;
-  gitHash: string;
-  gitHashFull: string;
-  isCleanTag: boolean;
-  lastTag: string;
-}
diff --git a/src/nshmp-ws-utils/models/service-error.model.ts b/src/nshmp-ws-utils/models/service-error.model.ts
deleted file mode 100644
index fb8c032..0000000
--- a/src/nshmp-ws-utils/models/service-error.model.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-import {Response} from './response.model';
-
-export type ServivceError = Response<string, string>;
diff --git a/src/nshmp-ws-utils/models/status.model.ts b/src/nshmp-ws-utils/models/status.model.ts
deleted file mode 100644
index 4d52b03..0000000
--- a/src/nshmp-ws-utils/models/status.model.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * Service request status identifier.
- */
-export enum Status {
-  ERROR = 'error',
-  SUCCESS = 'success',
-  USAGE = 'usage',
-}
diff --git a/src/nshmp-ws/index.ts b/src/nshmp-ws/index.ts
deleted file mode 100644
index e9644da..0000000
--- a/src/nshmp-ws/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from './models';
diff --git a/src/nshmp-ws/models/fault-sections-service/fault-sections-response.model.ts b/src/nshmp-ws/models/fault-sections-service/fault-sections-response.model.ts
deleted file mode 100644
index 5807b65..0000000
--- a/src/nshmp-ws/models/fault-sections-service/fault-sections-response.model.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import {FeatureCollection} from 'geojson';
-
-import {NshmId} from '../../../nshmp-lib';
-import {RateType} from '../../../nshmp-lib/models/gmm';
-import * as nshmpWsUtils from '../../../nshmp-ws-utils';
-
-export type FaultSectionsResponse = nshmpWsUtils.Response<
-  FaultSectionRequestData,
-  FeatureCollection
->;
-
-export interface FaultSectionRequestData {
-  nshmFaultSection: NshmId;
-  raw: boolean;
-}
-
-export interface FaultSectionProperties {
-  name: string;
-  state: string | string[];
-  dip?: number;
-  lowerDepth?: number;
-  rake: number;
-  rate?: number;
-  rateType?: RateType;
-  upperDepth?: number;
-}
diff --git a/src/nshmp-ws/models/fault-sections-service/fault-sections-usage.model.ts b/src/nshmp-ws/models/fault-sections-service/fault-sections-usage.model.ts
deleted file mode 100644
index 62ae374..0000000
--- a/src/nshmp-ws/models/fault-sections-service/fault-sections-usage.model.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import {NshmId} from '../../../nshmp-lib/models/nshm.model';
-import {Response} from '../../../nshmp-ws-utils';
-import {StringParameter} from '../../../nshmp-ws-utils/models/metadata';
-
-export type FaultSectionUsage = Response<string, FaultSectionMetadataResponse>;
-
-export interface FaultSectionMetadataResponse {
-  description: string;
-  syntax: string[];
-  parameters: FaultSectionParameters;
-}
-
-export interface FaultSectionParameters {
-  nshm: StringParameter<NshmId>;
-  raw: StringParameter<boolean>;
-}
diff --git a/src/nshmp-ws/models/fault-sections-service/index.ts b/src/nshmp-ws/models/fault-sections-service/index.ts
deleted file mode 100644
index 380a265..0000000
--- a/src/nshmp-ws/models/fault-sections-service/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export * from './fault-sections-response.model';
-export * from './fault-sections-usage.model';
diff --git a/src/nshmp-ws/models/gmm-services/gmm-response.model.ts b/src/nshmp-ws/models/gmm-services/gmm-response.model.ts
deleted file mode 100644
index 4e9b978..0000000
--- a/src/nshmp-ws/models/gmm-services/gmm-response.model.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-import {Constraint, Series, XyDataGroup} from '../../../nshmp-haz';
-import {Gmm, GmmInput, Imt} from '../../../nshmp-lib/models/gmm';
-import * as nshmpWsUtils from '../../../nshmp-ws-utils';
-
-export type GmmSpectraResponse = nshmpWsUtils.Response<
-  GmmRequestData,
-  GmmResponseData
->;
-
-export type GmmDistanceResponse = nshmpWsUtils.Response<
-  GmmRequestDataDistance,
-  GmmResponseData
->;
-
-export type GmmMagnitudeResponse = nshmpWsUtils.Response<
-  GmmRequestDataMagnitude,
-  GmmResponseData
->;
-
-export interface GmmResponseData {
-  means: XyDataGroup<GmmSeries>;
-  sigmas: XyDataGroup<GmmSeries>;
-}
-
-export interface GmmRequestData {
-  gmms: Gmm[];
-  input: GmmInput;
-}
-
-export interface GmmRequestDataDistance extends GmmRequestData {
-  imt: Imt;
-  rMin: number;
-  rMax: number;
-}
-
-export interface GmmRequestDataMagnitude extends GmmRequestData {
-  imt: Imt;
-  mMin: number;
-  mMax: number;
-  distance: number;
-  step: number;
-}
-
-export interface GmmSeries extends Series {
-  constraints: Constraint[];
-  supportedImts: string[];
-}
diff --git a/src/nshmp-ws/models/gmm-services/gmm-usage.model.ts b/src/nshmp-ws/models/gmm-services/gmm-usage.model.ts
deleted file mode 100644
index ca50b0e..0000000
--- a/src/nshmp-ws/models/gmm-services/gmm-usage.model.ts
+++ /dev/null
@@ -1,150 +0,0 @@
-import * as nshmpWsUtils from '../../../nshmp-ws-utils';
-
-/**
- * Marker interface for gmm usage from nshmp-ws.
- */
-export type GmmSpectraUsage = nshmpWsUtils.Response<
-  string,
-  GmmSpectraUsageResponse
->;
-
-/**
- * Marker interface for gmm/distance and gmm/hw-fw usage.
- */
-export type GmmDistanceUsage = nshmpWsUtils.Response<
-  string,
-  GmmDistanceUsageResponse
->;
-
-/**
- * Marker interface for gmm/distance and gmm/hw-fw usage.
- */
-export type GmmMagnitudeUsage = nshmpWsUtils.Response<
-  string,
-  GmmMagnitudeUsageResponse
->;
-
-/**
- * Gmm usage response in Response object.
- */
-export interface GmmUsageResponse {
-  description: string;
-  syntax: string;
-  parameters: GmmUsageParameters;
-}
-
-/**
- * Gmm vs distance usage response in Response object.
- */
-export interface GmmSpectraUsageResponse extends GmmUsageResponse {
-  parameters: GmmSpectraUsageParameters;
-}
-
-/**
- * Gmm vs distance usage response in Response object.
- */
-export interface GmmDistanceUsageResponse extends GmmUsageResponse {
-  parameters: GmmDistanceUsageParameters;
-}
-
-/**
- * Gmm vs magnitude usage response in Response object.
- */
-export interface GmmMagnitudeUsageResponse extends GmmUsageResponse {
-  parameters: GmmMagnitudeUsageParameters;
-}
-
-/**
- * gmm parameter.
- */
-export interface GmmParameter {
-  label: string;
-  info: string;
-  values: GmmValue[];
-}
-
-/**
- * gmm value.
- */
-export interface GmmValue {
-  id: string;
-  label: string;
-  supportedImts: string[];
-}
-
-/**
- * gmm group parameters.
- */
-export interface GmmGroupParameter {
-  label: string;
-  info: string;
-  values: GmmGroupValue[];
-}
-
-/**
- * gmm group values.
- */
-export interface GmmGroupValue {
-  id: string;
-  label: string;
-  data: string[];
-}
-/**
- * gmm usage parameter.
- */
-export interface GmmUsageParameter {
-  label: string;
-  info: string;
-  units?: string;
-  min?: number;
-  max?: number;
-  value: number | boolean;
-}
-
-/**
- * gmm usage parameters.
- */
-export interface GmmUsageParameters {
-  Mw: GmmUsageParameter;
-  dip: GmmUsageParameter;
-  width: GmmUsageParameter;
-  zTor: GmmUsageParameter;
-  zHyp: GmmUsageParameter;
-  rake: GmmUsageParameter;
-  vs30: GmmUsageParameter;
-  vsInf: GmmUsageParameter;
-  z1p0: GmmUsageParameter;
-  z2p5: GmmUsageParameter;
-  zSed: GmmUsageParameter;
-  gmm: GmmParameter;
-  group: GmmGroupParameter;
-}
-
-/**
- * gmm/spectra usage parameters.
- */
-export interface GmmSpectraUsageParameters extends GmmUsageParameters {
-  rJB: GmmUsageParameter;
-  rRup: GmmUsageParameter;
-  rX: GmmUsageParameter;
-}
-
-/**
- * gmm/distance usage parameters.
- */
-export interface GmmDistanceUsageParameters extends GmmUsageParameters {
-  imt: nshmpWsUtils.metadata.EnumParameter<nshmpWsUtils.metadata.EnumParameterValues>;
-  rMin: GmmUsageParameter;
-  rMax: GmmUsageParameter;
-}
-
-/**
- * gmm/magnitude usage parameters.
- */
-export interface GmmMagnitudeUsageParameters extends GmmUsageParameters {
-  imt: nshmpWsUtils.metadata.EnumParameter<nshmpWsUtils.metadata.EnumParameterValues>;
-  mMin: GmmUsageParameter;
-  mMax: GmmUsageParameter;
-  distance: GmmUsageParameter;
-  step: GmmUsageParameter;
-}
diff --git a/src/nshmp-ws/models/gmm-services/index.ts b/src/nshmp-ws/models/gmm-services/index.ts
deleted file mode 100644
index 33d7b2f..0000000
--- a/src/nshmp-ws/models/gmm-services/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export * from './gmm-response.model';
-export * from './gmm-usage.model';
diff --git a/src/nshmp-ws/models/index.ts b/src/nshmp-ws/models/index.ts
deleted file mode 100644
index c406362..0000000
--- a/src/nshmp-ws/models/index.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export * as faultSectionsService from './fault-sections-service';
-export * as gmmServices from './gmm-services';
-export * as utilitiesService from './utilities-service';
diff --git a/src/nshmp-ws/models/utilities-service/index.ts b/src/nshmp-ws/models/utilities-service/index.ts
deleted file mode 100644
index 904cf15..0000000
--- a/src/nshmp-ws/models/utilities-service/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export * from './test-sites-response';
-export * from './test-sites-usage.model';
diff --git a/src/nshmp-ws/models/utilities-service/test-sites-response.ts b/src/nshmp-ws/models/utilities-service/test-sites-response.ts
deleted file mode 100644
index c4b79db..0000000
--- a/src/nshmp-ws/models/utilities-service/test-sites-response.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import {NshmRegion} from '../../../nshmp-lib/models/nshm-region.model';
-
-export interface TestSitesProperties {
-  title: string;
-  regionId: NshmRegion;
-  regionTitle: string;
-}
diff --git a/src/nshmp-ws/models/utilities-service/test-sites-usage.model.ts b/src/nshmp-ws/models/utilities-service/test-sites-usage.model.ts
deleted file mode 100644
index 8579bfa..0000000
--- a/src/nshmp-ws/models/utilities-service/test-sites-usage.model.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import {NshmRegion} from '../../../nshmp-lib/models/nshm-region.model';
-import {Response} from '../../../nshmp-ws-utils';
-import {StringParameter} from '../../../nshmp-ws-utils/models/metadata';
-
-export type TestSitesUsage = Response<string, TestSitesMetadataResponse>;
-
-export interface TestSitesMetadataResponse {
-  description: string;
-  syntax: string[];
-  parameters: TestSitesParameters;
-}
-
-export interface TestSitesParameters {
-  region: StringParameter<NshmRegion>;
-}
diff --git a/src/plotly/index.ts b/src/plotly/index.ts
deleted file mode 100644
index 621f4f1..0000000
--- a/src/plotly/index.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-/* Export Plotly package */
-export * from './models/plotly-config.model';
-export * from './models/plotly-layout.model';
-export * from './models/plotly-legend.model';
-export * from './models/plotly-plot.model';
-export * from './utils/plotly-utils';
diff --git a/src/plotly/models/plotly-config.model.ts b/src/plotly/models/plotly-config.model.ts
deleted file mode 100644
index addbe7f..0000000
--- a/src/plotly/models/plotly-config.model.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import {Config} from 'plotly.js';
-
-/**
- * The plot config.
- *
- * See https://github.com/plotly/angular-plotly.js#basic-props for
- * added properties to Plotly config.
- */
-export interface PlotlyConfig extends Partial<Config> {
-  className?: string | string[];
-  debug?: boolean;
-  revision?: number;
-  style?: {[key: string]: string};
-  updateOnDataChange?: boolean;
-  updateOnLayoutChange?: boolean;
-  updateOnlyWithRevision?: boolean;
-  useResizeHandler?: boolean;
-}
diff --git a/src/plotly/models/plotly-layout.model.ts b/src/plotly/models/plotly-layout.model.ts
deleted file mode 100644
index 4dcf6c0..0000000
--- a/src/plotly/models/plotly-layout.model.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import {Layout} from 'plotly.js';
-
-import {PlotlyLegend} from './plotly-legend.model';
-
-export interface PlotlyLayout extends Partial<Layout> {
-  /** Aspect ratio of plot */
-  aspectRatio?: string;
-
-  /** Aspect ratio for mobile size */
-  aspectRatioMobile?: string;
-
-  /** Plotly legend */
-  legend?: Partial<PlotlyLegend>;
-}
diff --git a/src/plotly/models/plotly-legend.model.ts b/src/plotly/models/plotly-legend.model.ts
deleted file mode 100644
index 77dcfe8..0000000
--- a/src/plotly/models/plotly-legend.model.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import {Legend} from 'plotly.js';
-
-export type LegendClick = 'toggle' | 'toggleothers' | false;
-
-export interface PlotlyLegend extends Partial<Legend> {
-  itemclick: LegendClick;
-  itemdoubleclick: LegendClick;
-}
diff --git a/src/plotly/models/plotly-plot.model.ts b/src/plotly/models/plotly-plot.model.ts
deleted file mode 100644
index a721434..0000000
--- a/src/plotly/models/plotly-plot.model.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import {PlotData} from 'plotly.js';
-
-import {PlotlyConfig} from './plotly-config.model';
-import {PlotlyLayout} from './plotly-layout.model';
-
-/**
- * A Plotly plot.
- */
-export interface PlotlyPlot {
-  data: Partial<PlotData>[];
-  id: string;
-
-  config?: Partial<PlotlyConfig>;
-  layout?: Partial<PlotlyLayout>;
-}
diff --git a/src/plotly/utils/plotly-utils.ts b/src/plotly/utils/plotly-utils.ts
deleted file mode 100644
index e0d53e2..0000000
--- a/src/plotly/utils/plotly-utils.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * Calculate the height based on element width and aspect ratio.
- *
- * @param el The svg element
- * @param aspectRatio The aspect ratio in form `number:number`
- */
-export function heightFromAspectRatio(
-  el: SVGElement,
-  aspectRatio: string
-): number {
-  const width = Number.parseFloat(el.getAttribute('width') ?? '0');
-
-  if (!/[\d]+:[\d]+/.test(aspectRatio)) {
-    throw new Error(
-      `Aspect ratio [${aspectRatio}] is not in form number:number`
-    );
-  }
-
-  return width / eval(aspectRatio.split(':').join('/'));
-}
-- 
GitLab


From fbeae3c03c8d3a63360868a39776292a4f24cf47 Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Thu, 3 Nov 2022 09:27:38 -0600
Subject: [PATCH 04/12] ignore types and javsacript

---
 .gitignore | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/.gitignore b/.gitignore
index 463640d..b8c6c84 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,9 +3,9 @@
 # compiled output
 /dist
 /tmp
-/out-tsc
-# Only exists if Bazel was run
-/bazel-out
+*.d.ts
+*.js
+*js.map
 
 # dependencies
 /node_modules
-- 
GitLab


From cd9e30d8697867e3ef7ff8a32b579acc53e0ba67 Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Thu, 3 Nov 2022 09:28:50 -0600
Subject: [PATCH 05/12] ignore output

---
 .gitignore | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/.gitignore b/.gitignore
index b8c6c84..00527a7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,9 +3,9 @@
 # compiled output
 /dist
 /tmp
-*.d.ts
-*.js
-*js.map
+libs/**/*.d.ts
+libs/**/*.js
+libs/**/*js.map
 
 # dependencies
 /node_modules
-- 
GitLab


From 13a1792bfdc81967e8079f6672a1f091163394b7 Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Thu, 3 Nov 2022 09:29:00 -0600
Subject: [PATCH 06/12] allow libs driectory

---
 .npmignore | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.npmignore b/.npmignore
index a63b6ca..27259e3 100644
--- a/.npmignore
+++ b/.npmignore
@@ -5,7 +5,7 @@
 !DISCLAIMER.md
 !LICENSE.md
 !README.md
+!code.json
 
-!dist/**
+!libs/**
 !package.json
-!scripts/**
-- 
GitLab


From a14ce1190a185959d37f1fe3138a335db948155a Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Thu, 3 Nov 2022 09:29:13 -0600
Subject: [PATCH 07/12] change path to libs

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 277b28e..3793c32 100644
--- a/package.json
+++ b/package.json
@@ -2,8 +2,8 @@
   "name": "@ghsc/nshmp-web-utils",
   "version": "0.1.0",
   "description": "nshmp web utilities",
-  "types": "dist/src/index.d.ts",
-  "main": "dist/src/index.js",
+  "types": "libs/index.d.ts",
+  "main": "libs/index.js",
   "author": {
     "name": "Brandon Clayton",
     "email": "bclayton@usgs.gov"
-- 
GitLab


From eb5316322c38dc77f4134dc7008925e2ae051afc Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Thu, 3 Nov 2022 09:29:21 -0600
Subject: [PATCH 08/12] change paths

---
 tsconfig.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tsconfig.json b/tsconfig.json
index b49355e..9993f29 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -2,11 +2,11 @@
   "extends": "./node_modules/gts/tsconfig-google.json",
   "compilerOptions": {
     "rootDir": ".",
-    "outDir": "./dist/",
+    "outDir": ".",
     "emitDecoratorMetadata": true,
     "experimentalDecorators": true,
     "lib": ["es2018", "DOM"]
   },
   "exclude": ["node_modules", "tmp", "dist"],
-  "include": ["src"]
+  "include": ["libs"]
 }
-- 
GitLab


From 49e0caeed440b8ac44f850a72443286fbbf1a06a Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Thu, 3 Nov 2022 09:45:35 -0600
Subject: [PATCH 09/12] add nshm service

---
 libs/nshmp-haz/www/index.ts                         |  1 +
 libs/nshmp-haz/www/nshm-service/index.ts            |  1 +
 libs/nshmp-haz/www/nshm-service/nshm-usage.model.ts | 11 +++++++++++
 3 files changed, 13 insertions(+)
 create mode 100644 libs/nshmp-haz/www/nshm-service/index.ts
 create mode 100644 libs/nshmp-haz/www/nshm-service/nshm-usage.model.ts

diff --git a/libs/nshmp-haz/www/index.ts b/libs/nshmp-haz/www/index.ts
index 79a5596..433f135 100644
--- a/libs/nshmp-haz/www/index.ts
+++ b/libs/nshmp-haz/www/index.ts
@@ -2,6 +2,7 @@
 export * from './constraint.model';
 export * as disaggService from './disagg-service';
 export * as hazardService from './hazard-service';
+export * as nshmService from './nshm-service';
 export * as sourceLogicTreesService from './source-logic-trees-service';
 export * from './source-model.model';
 export * from './xy-data-group.model';
diff --git a/libs/nshmp-haz/www/nshm-service/index.ts b/libs/nshmp-haz/www/nshm-service/index.ts
new file mode 100644
index 0000000..b1c316a
--- /dev/null
+++ b/libs/nshmp-haz/www/nshm-service/index.ts
@@ -0,0 +1 @@
+export * from './nshm-usage.model';
diff --git a/libs/nshmp-haz/www/nshm-service/nshm-usage.model.ts b/libs/nshmp-haz/www/nshm-service/nshm-usage.model.ts
new file mode 100644
index 0000000..4677738
--- /dev/null
+++ b/libs/nshmp-haz/www/nshm-service/nshm-usage.model.ts
@@ -0,0 +1,11 @@
+import {NshmId} from '../../../nshmp-lib/nshm';
+import {Response} from '../../../nshmp-ws-utils';
+
+export type NshmUsage = Response<string, NshmMetadata[]>;
+
+export interface NshmMetadata {
+  model: NshmId;
+  project: string;
+  tag: string;
+  url: string;
+}
-- 
GitLab


From de3654d99a01767a3cfafdb46b2245846b3f9524 Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Thu, 3 Nov 2022 09:57:47 -0600
Subject: [PATCH 10/12] dont include ts files

---
 .npmignore | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/.npmignore b/.npmignore
index 27259e3..c1e0b52 100644
--- a/.npmignore
+++ b/.npmignore
@@ -7,5 +7,6 @@
 !README.md
 !code.json
 
-!libs/**
+!libs/**/*.d.ts
+!libs/**/*.js*
 !package.json
-- 
GitLab


From 27640bcdd133f04ec6de3f6c99024798b28f89c0 Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Thu, 3 Nov 2022 10:19:59 -0600
Subject: [PATCH 11/12] add needs

---
 .gitlab-ci.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index d555b15..1060d3f 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -93,6 +93,7 @@ Publish npm:
   needs:
     - Audit
     - Build
+    - Build Node Image
     - Init
     - Lint
   script:
-- 
GitLab


From b9ed3c423131c2fb13859b79dc57e2d0d4370b44 Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Thu, 3 Nov 2022 10:23:40 -0600
Subject: [PATCH 12/12] update deps

---
 package-lock.json | 42 +++++++++++++++++++++---------------------
 package.json      |  6 +++---
 2 files changed, 24 insertions(+), 24 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index ebc34ff..8ec5bd1 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,16 +10,16 @@
       "license": "CC0-1.0",
       "dependencies": {
         "@types/d3-format": "^3.0.1",
-        "@types/leaflet": "^1.8.0",
+        "@types/leaflet": "^1.9.0",
         "@types/plotly.js": "^1.54.22",
         "change-case": "^4.1.2",
         "d3-format": "^3.1.0",
         "geojson": "^0.5.0",
         "leaflet": "^1.9.2",
-        "plotly.js": "^2.14.0"
+        "plotly.js": "^2.16.1"
       },
       "devDependencies": {
-        "@types/node": "^18.8.2",
+        "@types/node": "^18.11.9",
         "eslint-plugin-simple-import-sort": "^8.0.0",
         "gts": "^3.1.1",
         "husky": "^8.0.1",
@@ -480,9 +480,9 @@
       "dev": true
     },
     "node_modules/@types/leaflet": {
-      "version": "1.8.0",
-      "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.8.0.tgz",
-      "integrity": "sha512-+sXFmiJTFdhaXXIGFlV5re9AdqtAODoXbGAvxx02e5SHXL3ir7ClP5J7pahO8VmzKY3dth4RUS1nf2BTT+DW1A==",
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.0.tgz",
+      "integrity": "sha512-7LeOSj7EloC5UcyOMo+1kc3S1UT3MjJxwqsMT1d2PTyvQz53w0Y0oSSk9nwZnOZubCmBvpSNGceucxiq+ZPEUw==",
       "dependencies": {
         "@types/geojson": "*"
       }
@@ -500,9 +500,9 @@
       "dev": true
     },
     "node_modules/@types/node": {
-      "version": "18.8.2",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.2.tgz",
-      "integrity": "sha512-cRMwIgdDN43GO4xMWAfJAecYn8wV4JbsOGHNfNUIDiuYkUYAR5ec4Rj7IO2SAhFPEfpPtLtUTbbny/TCT7aDwA==",
+      "version": "18.11.9",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz",
+      "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==",
       "dev": true
     },
     "node_modules/@types/normalize-package-data": {
@@ -3900,9 +3900,9 @@
       }
     },
     "node_modules/plotly.js": {
-      "version": "2.14.0",
-      "resolved": "https://registry.npmjs.org/plotly.js/-/plotly.js-2.14.0.tgz",
-      "integrity": "sha512-bv3Re8FmgVJOyIFidAc24mbKLZQ/y/xEFWoFhJMAIpl9pPrB9I6OjAv/gYCKEraWj4VTK5nAPAOGnjcDjodf2g==",
+      "version": "2.16.1",
+      "resolved": "https://registry.npmjs.org/plotly.js/-/plotly.js-2.16.1.tgz",
+      "integrity": "sha512-83BJWgbXSjeEl31+zq66ZzU/QWfd/CItzGm5mtYeWHWHyoOcCzHDW4I+QgkicGq0ntLZ2PfEb0fjM0qMzGGXVw==",
       "dependencies": {
         "@plotly/d3": "3.8.0",
         "@plotly/d3-sankey": "0.7.2",
@@ -5937,9 +5937,9 @@
       "dev": true
     },
     "@types/leaflet": {
-      "version": "1.8.0",
-      "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.8.0.tgz",
-      "integrity": "sha512-+sXFmiJTFdhaXXIGFlV5re9AdqtAODoXbGAvxx02e5SHXL3ir7ClP5J7pahO8VmzKY3dth4RUS1nf2BTT+DW1A==",
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.0.tgz",
+      "integrity": "sha512-7LeOSj7EloC5UcyOMo+1kc3S1UT3MjJxwqsMT1d2PTyvQz53w0Y0oSSk9nwZnOZubCmBvpSNGceucxiq+ZPEUw==",
       "requires": {
         "@types/geojson": "*"
       }
@@ -5957,9 +5957,9 @@
       "dev": true
     },
     "@types/node": {
-      "version": "18.8.2",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.2.tgz",
-      "integrity": "sha512-cRMwIgdDN43GO4xMWAfJAecYn8wV4JbsOGHNfNUIDiuYkUYAR5ec4Rj7IO2SAhFPEfpPtLtUTbbny/TCT7aDwA==",
+      "version": "18.11.9",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz",
+      "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==",
       "dev": true
     },
     "@types/normalize-package-data": {
@@ -8678,9 +8678,9 @@
       "dev": true
     },
     "plotly.js": {
-      "version": "2.14.0",
-      "resolved": "https://registry.npmjs.org/plotly.js/-/plotly.js-2.14.0.tgz",
-      "integrity": "sha512-bv3Re8FmgVJOyIFidAc24mbKLZQ/y/xEFWoFhJMAIpl9pPrB9I6OjAv/gYCKEraWj4VTK5nAPAOGnjcDjodf2g==",
+      "version": "2.16.1",
+      "resolved": "https://registry.npmjs.org/plotly.js/-/plotly.js-2.16.1.tgz",
+      "integrity": "sha512-83BJWgbXSjeEl31+zq66ZzU/QWfd/CItzGm5mtYeWHWHyoOcCzHDW4I+QgkicGq0ntLZ2PfEb0fjM0qMzGGXVw==",
       "requires": {
         "@plotly/d3": "3.8.0",
         "@plotly/d3-sankey": "0.7.2",
diff --git a/package.json b/package.json
index 3793c32..40fc8a9 100644
--- a/package.json
+++ b/package.json
@@ -20,16 +20,16 @@
   },
   "dependencies": {
     "@types/d3-format": "^3.0.1",
-    "@types/leaflet": "^1.8.0",
+    "@types/leaflet": "^1.9.0",
     "@types/plotly.js": "^1.54.22",
     "change-case": "^4.1.2",
     "d3-format": "^3.1.0",
     "geojson": "^0.5.0",
     "leaflet": "^1.9.2",
-    "plotly.js": "^2.14.0"
+    "plotly.js": "^2.16.1"
   },
   "devDependencies": {
-    "@types/node": "^18.8.2",
+    "@types/node": "^18.11.9",
     "eslint-plugin-simple-import-sort": "^8.0.0",
     "gts": "^3.1.1",
     "husky": "^8.0.1",
-- 
GitLab