emuhealth 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/README.md +9 -1
  2. package/THIRD_PARTY_NOTICES.md +15 -6
  3. package/dist/api.d.ts +1 -1
  4. package/dist/api.js +181 -16
  5. package/dist/api.js.map +1 -1
  6. package/dist/{chunk-WKE2IMP5.js → chunk-5PAJ6LLN.js} +182 -17
  7. package/dist/chunk-5PAJ6LLN.js.map +1 -0
  8. package/dist/{dist-YK2XJNH7.js → dist-4CPLP2NQ.js} +3 -1
  9. package/dist/dist-4CPLP2NQ.js.map +1 -0
  10. package/dist/dist-65JH5Z2J.js +5424 -0
  11. package/dist/dist-65JH5Z2J.js.map +1 -0
  12. package/dist/{dist-ATXASBBA.js → dist-6OM56NLC.js} +3 -1
  13. package/dist/dist-6OM56NLC.js.map +1 -0
  14. package/dist/{dist-L3SNHIRB.js → dist-6TPEFTAK.js} +3 -1
  15. package/dist/dist-6TPEFTAK.js.map +1 -0
  16. package/dist/{dist-22OZW7MU.js → dist-AZA2TRAN.js} +3 -1
  17. package/dist/dist-AZA2TRAN.js.map +1 -0
  18. package/dist/dist-CLJBPXNS.js +961 -0
  19. package/dist/dist-CLJBPXNS.js.map +1 -0
  20. package/dist/{dist-EUMN2OAH.js → dist-DVBHDPLP.js} +3 -1
  21. package/dist/dist-DVBHDPLP.js.map +1 -0
  22. package/dist/{dist-KRJZAPPL.js → dist-DWUKLYZG.js} +3 -1
  23. package/dist/dist-DWUKLYZG.js.map +1 -0
  24. package/dist/dist-HUDK42DK.js +555 -0
  25. package/dist/dist-HUDK42DK.js.map +1 -0
  26. package/dist/{dist-575EVZLI.js → dist-IJ7LRDHX.js} +3 -1
  27. package/dist/{dist-575EVZLI.js.map → dist-IJ7LRDHX.js.map} +1 -1
  28. package/dist/dist-JAQBQLBJ.js +1068 -0
  29. package/dist/dist-JAQBQLBJ.js.map +1 -0
  30. package/dist/{dist-NSZJMYCW.js → dist-JJIQYFJ4.js} +1938 -448
  31. package/dist/dist-JJIQYFJ4.js.map +1 -0
  32. package/dist/{dist-KAYD3L2O.js → dist-KQGIGONJ.js} +3 -1
  33. package/dist/{dist-KAYD3L2O.js.map → dist-KQGIGONJ.js.map} +1 -1
  34. package/dist/dist-MD4P4BXL.js +1023 -0
  35. package/dist/dist-MD4P4BXL.js.map +1 -0
  36. package/dist/dist-MRCWT2JC.js +799 -0
  37. package/dist/dist-MRCWT2JC.js.map +1 -0
  38. package/dist/{dist-YMRASK5I.js → dist-QUEHZ2IC.js} +3 -1
  39. package/dist/dist-QUEHZ2IC.js.map +1 -0
  40. package/dist/{dist-M5TIXC2F.js → dist-RWIGUWMG.js} +3 -1
  41. package/dist/dist-RWIGUWMG.js.map +1 -0
  42. package/dist/{dist-ZGCIWJJM.js → dist-TOCHFEDO.js} +3 -1
  43. package/dist/dist-TOCHFEDO.js.map +1 -0
  44. package/dist/{dist-B4K5JXTS.js → dist-UFXXFP3R.js} +3 -1
  45. package/dist/dist-UFXXFP3R.js.map +1 -0
  46. package/dist/{dist-IMIDQ6CJ.js → dist-UKXOY2NR.js} +3 -1
  47. package/dist/dist-UKXOY2NR.js.map +1 -0
  48. package/dist/dist-WDXPM6L6.js +664 -0
  49. package/dist/dist-WDXPM6L6.js.map +1 -0
  50. package/dist/dist-WRDU25DF.js +985 -0
  51. package/dist/dist-WRDU25DF.js.map +1 -0
  52. package/dist/index.js +65 -3
  53. package/dist/index.js.map +1 -1
  54. package/dist/project-worker.js +1 -1
  55. package/package.json +14 -6
  56. package/dist/chunk-WKE2IMP5.js.map +0 -1
  57. package/dist/dist-22OZW7MU.js.map +0 -1
  58. package/dist/dist-ATXASBBA.js.map +0 -1
  59. package/dist/dist-B4K5JXTS.js.map +0 -1
  60. package/dist/dist-EUMN2OAH.js.map +0 -1
  61. package/dist/dist-IMIDQ6CJ.js.map +0 -1
  62. package/dist/dist-KRJZAPPL.js.map +0 -1
  63. package/dist/dist-L3SNHIRB.js.map +0 -1
  64. package/dist/dist-M5TIXC2F.js.map +0 -1
  65. package/dist/dist-NSZJMYCW.js.map +0 -1
  66. package/dist/dist-YK2XJNH7.js.map +0 -1
  67. package/dist/dist-YMRASK5I.js.map +0 -1
  68. package/dist/dist-ZGCIWJJM.js.map +0 -1
package/README.md CHANGED
@@ -37,7 +37,15 @@ All services listen on IPv4 loopback (`127.0.0.1`) by default. No config file ne
37
37
 
38
38
  Health and life science services use a fixed range starting at `http://localhost:4100`. Each health service keeps its port no matter which other services run or how many upstream services exist.
39
39
 
40
- - **FHIR R4** on `http://localhost:4100` (create, read, update, JSON Patch, delete, versioning, `_history`, search, batch and transaction Bundles, and a CapabilityStatement at `/metadata`, `Patient/$everything`; starts with 5 generated synthetic patients; SMART App Launch with patient and practitioner pickers, an EHR launch simulator, PKCE, and scope and patient enforcement for presented tokens)
40
+ - **FHIR R4** on `http://localhost:4100` (create, read, update, JSON Patch, delete, versioning, `_history`, search, batch and transaction Bundles, and a CapabilityStatement at `/metadata`, `Patient/$everything`, Bulk Data `$export` with NDJSON output; starts with 5 generated synthetic patients; SMART App Launch with patient and practitioner pickers, an EHR launch simulator, PKCE, SMART Backend Services with `private_key_jwt`, and scope and patient enforcement for presented tokens; terminology fixtures with `CodeSystem/$lookup` and `$validate-code`; browse it at `/_inspector`)
41
+ - **Epic** on `http://localhost:4101` (the FHIR R4 server under Epic's `/api/FHIR/R4` base, OAuth 2.0 at `/oauth2/authorize` and `/oauth2/token` with SMART App Launch and Backend Services, `__epic.dstu2.patient` in token responses, Epic's informational OperationOutcome on empty searches, and Schedules and Slots with `Appointment/$find` and `Appointment/$book`)
42
+ - **openFDA** on `http://localhost:4102` (`/drug/label.json`, `/drug/event.json`, and `/drug/enforcement.json`, `/device/enforcement.json`, `/food/enforcement.json` recalls with the openFDA query language: `search` with fields, phrases, `.exact`, ranges, `AND`/`OR`/`NOT`, plus `sort`, `count`, `limit`, and `skip`; synthetic labels, adverse event reports, and recalls; browse them at `/_inspector`)
43
+ - **RxNav** on `http://localhost:4103` (the RxNorm REST API under `/REST`: `rxcui`, `drugs`, `properties`, `related`, `allrelated`, `ndcs`, `approximateTerm`, `spellingsuggestions`, and `displaynames`, with or without `.json`, over a verified RxNorm subset plus concepts you add; browse it at `/_inspector`)
44
+ - **ClinicalTrials.gov** on `http://localhost:4104` (API v2 under `/api/v2`: `/studies` with `query.*`, `filter.overallStatus`, `filter.ids`, `filter.advanced` `AREA[]` clauses, `sort`, `fields`, `pageSize`, `pageToken`, and `countTotal`, plus `/studies/{nctId}`, `/version`, and `/stats/size`; synthetic studies with `NCT99` ids; browse them at `/_inspector`)
45
+ - **NCBI E-utilities** on `http://localhost:4105` (`/entrez/eutils/einfo`, `esearch` with field tags, `AND`/`OR`/`NOT`, date ranges, paging, and `usehistory`, `esummary`, `efetch` with PubMed XML and abstract text, and `elink` between Gene and PubMed, in JSON or XML; synthetic PubMed articles and a small set of real human genes; browse them at `/_inspector`)
46
+ - **NPPES NPI Registry** on `http://localhost:4106` (`/api/?version=2.1` with `number`, `enumeration_type`, names and organization names with `*` wildcards, `taxonomy_description`, `city`, `state`, `postal_code`, `limit`, and `skip`, and the registry's `Errors` responses; synthetic providers whose NPIs have valid check digits but start with 0, so they never match a real provider; browse them at `/_inspector`)
47
+ - **Benchling** on `http://localhost:4107` (API v2 under `/api/v2` with an API key as the Basic auth username or a client credentials token: DNA and AA sequences with filters, `nextToken` paging, create, update, archive, and registration through `registries/{id}:register-entities` and `tasks`, notebook `entries`, `assay-results` with schemas, `events`, and Svix-signed webhooks; a synthetic tenant; browse it at `/_inspector`)
48
+ - **REDCap** on `http://localhost:4108` (`POST /api/` with a token and `content`: `version`, `project`, `metadata`, `instrument`, `exportFieldNames`, and `record` export with `records`, `fields`, `forms`, `filterLogic`, labels, and flat or EAV output, import with validation against the data dictionary, and delete, in JSON, CSV, or XML; a synthetic project; browse it at `/_inspector`)
41
49
 
42
50
  Stripe webhooks configured with a secret include a `Stripe-Signature` header signed over the timestamp and raw request body.
43
51
 
@@ -42,8 +42,9 @@ SOFTWARE.
42
42
 
43
43
  The emuhealth synthetic data generator in
44
44
  `packages/@emuhealth/fhir-core/src/generator.ts` uses a small number of codes from
45
- the following code systems to make generated records realistic. No full code
46
- system is redistributed.
45
+ the following code systems to make generated records realistic, and the RxNav
46
+ emulator in `packages/@emuhealth/rxnav` serves the same small RxNorm subset. No
47
+ full code system is redistributed.
47
48
 
48
49
  ### LOINC
49
50
 
@@ -60,8 +61,16 @@ Medicine (NLM), National Institutes of Health, Department of Health and Human
60
61
  Services; NLM is not responsible for the product and does not endorse or
61
62
  recommend this or any other product.
62
63
 
63
- ### ICD-10-CM and CVX
64
+ ### ICD-10-CM, ICD-10-PCS, CVX, and CDC Race and Ethnicity
64
65
 
65
- ICD-10-CM codes are published by the National Center for Health Statistics and
66
- CVX codes by the Centers for Disease Control and Prevention. Both are U.S.
67
- government works in the public domain.
66
+ ICD-10-CM codes are published by the National Center for Health Statistics,
67
+ ICD-10-PCS codes by the Centers for Medicare & Medicaid Services, and CVX codes
68
+ and the Race and Ethnicity code set by the Centers for Disease Control and
69
+ Prevention. All are U.S. government works in the public domain.
70
+
71
+ ### NCBI Gene
72
+
73
+ The E-utilities emulator in `packages/@emuhealth/ncbi` includes the ids, symbols,
74
+ names, and chromosomal locations of ten human genes as published by the National
75
+ Center for Biotechnology Information (NCBI), a U.S. government work in the public
76
+ domain. The gene summaries were written for emuhealth.
package/dist/api.d.ts CHANGED
@@ -249,7 +249,7 @@ declare function defineConfig<Definitions extends Record<string, EmulatorDefinit
249
249
  tokens?: EmulateConfig["tokens"];
250
250
  }): typeof config;
251
251
 
252
- declare const HEALTH_SERVICE_NAME_LIST: readonly ["fhir"];
252
+ declare const HEALTH_SERVICE_NAME_LIST: readonly ["fhir", "epic", "openfda", "rxnav", "clinicaltrials", "ncbi", "nppes", "benchling", "redcap"];
253
253
  type HealthServiceName = (typeof HEALTH_SERVICE_NAME_LIST)[number];
254
254
 
255
255
  declare const SERVICE_NAME_LIST: readonly ["vercel", "github", "google", "slack", "apple", "microsoft", "okta", "aws", "resend", "stripe", "mongoatlas", "clerk", "linear", "twilio"];
package/dist/api.js CHANGED
@@ -1158,6 +1158,8 @@ body{
1158
1158
  .inspector-table tbody tr{transition:background .1s;}
1159
1159
  .inspector-table tbody tr:hover{background:#0a3300;}
1160
1160
  .inspector-empty{color:#1a8c00;text-align:center;padding:20px 0;font-size:.8125rem;}
1161
+ .inspector-section a{color:#33ff00;text-decoration:underline;text-decoration-color:#1a8c00;text-underline-offset:2px;}
1162
+ .inspector-section a:hover{text-decoration-color:#33ff00;}
1161
1163
 
1162
1164
  .checkout-layout{
1163
1165
  display:flex;min-height:calc(100vh - 42px);
@@ -1940,14 +1942,24 @@ function defineConfig(config) {
1940
1942
  }
1941
1943
 
1942
1944
  // src/registry-health.ts
1943
- var HEALTH_SERVICE_NAME_LIST = ["fhir"];
1945
+ var HEALTH_SERVICE_NAME_LIST = [
1946
+ "fhir",
1947
+ "epic",
1948
+ "openfda",
1949
+ "rxnav",
1950
+ "clinicaltrials",
1951
+ "ncbi",
1952
+ "nppes",
1953
+ "benchling",
1954
+ "redcap"
1955
+ ];
1944
1956
  var HEALTH_SERVICE_NAMES = HEALTH_SERVICE_NAME_LIST;
1945
1957
  var HEALTH_SERVICE_REGISTRY = {
1946
1958
  fhir: {
1947
1959
  label: "FHIR R4 server emulator",
1948
- endpoints: "create, read, vread, update (including create on update), JSON Patch, logical delete, _history, search with includes and chaining, batch and transaction Bundles, CapabilityStatement at /metadata, Patient/$everything, SMART App Launch, ETag and If-Match, generated synthetic patients",
1960
+ endpoints: "create, read, vread, update (including create on update), JSON Patch, logical delete, _history, search with includes and chaining, batch and transaction Bundles, CapabilityStatement at /metadata, Patient/$everything, Bulk Data $export, SMART App Launch and Backend Services, ETag and If-Match, generated synthetic patients, terminology $lookup and $validate-code, inspector at /_inspector",
1949
1961
  async load() {
1950
- const mod = await import("./dist-NSZJMYCW.js");
1962
+ const mod = await import("./dist-JJIQYFJ4.js");
1951
1963
  return { plugin: mod.fhirPlugin, seedFromConfig: mod.seedFromConfig };
1952
1964
  },
1953
1965
  defaultFallback() {
@@ -1967,6 +1979,159 @@ var HEALTH_SERVICE_REGISTRY = {
1967
1979
  ]
1968
1980
  }
1969
1981
  }
1982
+ },
1983
+ epic: {
1984
+ label: "Epic FHIR R4 emulator",
1985
+ endpoints: "Epic URL shape (/api/FHIR/R4) over the full FHIR server, OAuth 2.0 at /oauth2/authorize and /oauth2/token with SMART App Launch and Backend Services, __epic.dstu2.patient in token responses, informational OperationOutcome (4101) on empty searches, Schedules and Slots with Appointment/$find and Appointment/$book, generated synthetic patients, inspector at /_inspector",
1986
+ async load() {
1987
+ const mod = await import("./dist-65JH5Z2J.js");
1988
+ return { plugin: mod.epicPlugin, seedFromConfig: mod.seedFromConfig };
1989
+ },
1990
+ defaultFallback() {
1991
+ return { login: "epic-user", id: 1, scopes: [] };
1992
+ },
1993
+ initConfig: {
1994
+ epic: {
1995
+ generate: { patients: 5, seed: 1 },
1996
+ scheduling: { days: 10 },
1997
+ smart: { clients: [{ client_id: "my-epic-app", redirect_uris: ["http://localhost:3000/callback"] }] }
1998
+ }
1999
+ }
2000
+ },
2001
+ openfda: {
2002
+ label: "openFDA API emulator",
2003
+ endpoints: "drug labels (/drug/label.json), adverse event reports (/drug/event.json), and recalls (/drug/enforcement.json, /device/enforcement.json, /food/enforcement.json) with the openFDA query language (search, sort, count, limit, skip), synthetic datasets, inspector at /_inspector",
2004
+ async load() {
2005
+ const mod = await import("./dist-WRDU25DF.js");
2006
+ return { plugin: mod.openfdaPlugin, seedFromConfig: mod.seedFromConfig };
2007
+ },
2008
+ defaultFallback() {
2009
+ return { login: "openfda-user", id: 1, scopes: [] };
2010
+ },
2011
+ initConfig: {
2012
+ openfda: {
2013
+ generate: { seed: 1, events: 300 }
2014
+ }
2015
+ }
2016
+ },
2017
+ rxnav: {
2018
+ label: "NLM RxNav (RxNorm API) emulator",
2019
+ endpoints: "RxNorm REST API under /REST: rxcui by name, drugs, properties, related and allrelated concepts, ndcs, approximateTerm, spellingsuggestions, displaynames, with or without .json; built-in RxNorm subset plus configured concepts; inspector at /_inspector",
2020
+ async load() {
2021
+ const mod = await import("./dist-HUDK42DK.js");
2022
+ return { plugin: mod.rxnavPlugin, seedFromConfig: mod.seedFromConfig };
2023
+ },
2024
+ defaultFallback() {
2025
+ return { login: "rxnav-user", id: 1, scopes: [] };
2026
+ },
2027
+ initConfig: {
2028
+ rxnav: {
2029
+ concepts: [
2030
+ {
2031
+ rxcui: "900001",
2032
+ name: "examplemab",
2033
+ tty: "IN"
2034
+ }
2035
+ ]
2036
+ }
2037
+ }
2038
+ },
2039
+ clinicaltrials: {
2040
+ label: "ClinicalTrials.gov API v2 emulator",
2041
+ endpoints: "ClinicalTrials.gov API v2 under /api/v2: studies search (query.cond, query.term, query.intr, query.titles, query.locn, query.spons, query.id, filter.overallStatus, filter.ids, filter.advanced AREA[], sort, fields, pageSize, pageToken, countTotal), single studies, version, stats/size; synthetic studies in the NCT99 range; inspector at /_inspector",
2042
+ async load() {
2043
+ const mod = await import("./dist-MRCWT2JC.js");
2044
+ return { plugin: mod.clinicaltrialsPlugin, seedFromConfig: mod.seedFromConfig };
2045
+ },
2046
+ defaultFallback() {
2047
+ return { login: "clinicaltrials-user", id: 1, scopes: [] };
2048
+ },
2049
+ initConfig: {
2050
+ clinicaltrials: {
2051
+ generate: {
2052
+ studies: 60,
2053
+ seed: 1
2054
+ }
2055
+ }
2056
+ }
2057
+ },
2058
+ ncbi: {
2059
+ label: "NCBI E-utilities emulator (PubMed and Gene)",
2060
+ endpoints: "E-utilities under /entrez/eutils: einfo, esearch (field tags, AND/OR/NOT, [dp] ranges, retstart/retmax, usehistory WebEnv), esummary, efetch (PubMed XML and abstract text), elink (gene and pubmed), GET or POST, JSON or XML; synthetic PubMed articles and real human genes; inspector at /_inspector",
2061
+ async load() {
2062
+ const mod = await import("./dist-MD4P4BXL.js");
2063
+ return { plugin: mod.ncbiPlugin, seedFromConfig: mod.seedFromConfig };
2064
+ },
2065
+ defaultFallback() {
2066
+ return { login: "ncbi-user", id: 1, scopes: [] };
2067
+ },
2068
+ initConfig: {
2069
+ ncbi: {
2070
+ generate: {
2071
+ articles: 80,
2072
+ seed: 1
2073
+ }
2074
+ }
2075
+ }
2076
+ },
2077
+ nppes: {
2078
+ label: "NPPES NPI Registry API emulator",
2079
+ endpoints: "NPI Registry API at /api/?version=2.1: number, enumeration_type, first_name, last_name, organization_name (trailing * wildcards), taxonomy_description, address_purpose, city, state, postal_code, country_code, limit (max 200), skip; the registry's Errors shapes; synthetic providers with NPIs that start with 0; inspector at /_inspector",
2080
+ async load() {
2081
+ const mod = await import("./dist-WDXPM6L6.js");
2082
+ return { plugin: mod.nppesPlugin, seedFromConfig: mod.seedFromConfig };
2083
+ },
2084
+ defaultFallback() {
2085
+ return { login: "nppes-user", id: 1, scopes: [] };
2086
+ },
2087
+ initConfig: {
2088
+ nppes: {
2089
+ generate: {
2090
+ individuals: 40,
2091
+ organizations: 15,
2092
+ seed: 1
2093
+ }
2094
+ }
2095
+ }
2096
+ },
2097
+ benchling: {
2098
+ label: "Benchling API v2 emulator",
2099
+ endpoints: "Benchling API v2 under /api/v2 with API key (Basic) or client credentials (Bearer) auth: dna-sequences and aa-sequences (list, filter, page, create, update, archive), entries, registries and register-entities with tasks, assay-results and schemas, projects, folders, events, Svix-signed webhooks; synthetic tenant; inspector at /_inspector",
2100
+ async load() {
2101
+ const mod = await import("./dist-JAQBQLBJ.js");
2102
+ return { plugin: mod.benchlingPlugin, seedFromConfig: mod.seedFromConfig };
2103
+ },
2104
+ defaultFallback() {
2105
+ return { login: "benchling-user", id: 1, scopes: [] };
2106
+ },
2107
+ initConfig: {
2108
+ benchling: {
2109
+ generate: {
2110
+ seed: 1,
2111
+ dnaSequences: 10
2112
+ },
2113
+ webhooks: []
2114
+ }
2115
+ }
2116
+ },
2117
+ redcap: {
2118
+ label: "REDCap API emulator",
2119
+ endpoints: "REDCap API at POST /api/ with token and content: version, project, metadata, instrument, exportFieldNames, record export (records, fields, forms, filterLogic, rawOrLabel, flat or eav), record import (json or csv, overwriteBehavior, forceAutoNumber, returnContent), record delete, generateNextRecordName; json, csv, or xml; synthetic classic project; inspector at /_inspector",
2120
+ async load() {
2121
+ const mod = await import("./dist-CLJBPXNS.js");
2122
+ return { plugin: mod.redcapPlugin, seedFromConfig: mod.seedFromConfig };
2123
+ },
2124
+ defaultFallback() {
2125
+ return { login: "redcap-user", id: 1, scopes: [] };
2126
+ },
2127
+ initConfig: {
2128
+ redcap: {
2129
+ generate: {
2130
+ records: 20,
2131
+ seed: 1
2132
+ }
2133
+ }
2134
+ }
1970
2135
  }
1971
2136
  };
1972
2137
  var HEALTH_PORT_OFFSET = 100;
@@ -1999,7 +2164,7 @@ var SERVICE_REGISTRY = {
1999
2164
  label: "Vercel REST API emulator",
2000
2165
  endpoints: "projects, deployments, domains, env vars, users, teams, file uploads, protection bypass, blob storage",
2001
2166
  async load() {
2002
- const mod = await import("./dist-YK2XJNH7.js");
2167
+ const mod = await import("./dist-4CPLP2NQ.js");
2003
2168
  return { plugin: mod.vercelPlugin, seedFromConfig: mod.seedFromConfig };
2004
2169
  },
2005
2170
  defaultFallback(cfg) {
@@ -2026,7 +2191,7 @@ var SERVICE_REGISTRY = {
2026
2191
  label: "GitHub REST API emulator",
2027
2192
  endpoints: "users, repos, issues, PRs, comments, reviews, labels, milestones, branches, git data, orgs, teams, releases, webhooks, search, actions, checks, rate limit",
2028
2193
  async load() {
2029
- const mod = await import("./dist-M5TIXC2F.js");
2194
+ const mod = await import("./dist-RWIGUWMG.js");
2030
2195
  return {
2031
2196
  plugin: mod.githubPlugin,
2032
2197
  seedFromConfig: mod.seedFromConfig,
@@ -2090,7 +2255,7 @@ var SERVICE_REGISTRY = {
2090
2255
  label: "Google OAuth 2.0 / OpenID Connect + Gmail, Calendar, and Drive emulator",
2091
2256
  endpoints: "OAuth authorize, token exchange, userinfo, RS256 OIDC discovery and JWKS, token revocation, Gmail messages/drafts/threads/labels/history/settings, Calendar discovery/lists/events/freebusy, Drive files/uploads",
2092
2257
  async load() {
2093
- const mod = await import("./dist-575EVZLI.js");
2258
+ const mod = await import("./dist-IJ7LRDHX.js");
2094
2259
  return { plugin: mod.googlePlugin, seedFromConfig: mod.seedFromConfig };
2095
2260
  },
2096
2261
  defaultFallback(cfg) {
@@ -2172,7 +2337,7 @@ var SERVICE_REGISTRY = {
2172
2337
  label: "Slack API emulator",
2173
2338
  endpoints: "auth, chat, conversations, users, profiles, presence, files, pins, bookmarks, views, reactions, team, OAuth, incoming webhooks, inspector",
2174
2339
  async load() {
2175
- const mod = await import("./dist-IMIDQ6CJ.js");
2340
+ const mod = await import("./dist-UKXOY2NR.js");
2176
2341
  return { plugin: mod.slackPlugin, seedFromConfig: mod.seedFromConfig };
2177
2342
  },
2178
2343
  defaultFallback() {
@@ -2253,7 +2418,7 @@ var SERVICE_REGISTRY = {
2253
2418
  label: "Apple Sign In / OAuth emulator",
2254
2419
  endpoints: "OAuth authorize, token exchange, JWKS",
2255
2420
  async load() {
2256
- const mod = await import("./dist-L3SNHIRB.js");
2421
+ const mod = await import("./dist-6TPEFTAK.js");
2257
2422
  return { plugin: mod.applePlugin, seedFromConfig: mod.seedFromConfig };
2258
2423
  },
2259
2424
  defaultFallback(cfg) {
@@ -2278,7 +2443,7 @@ var SERVICE_REGISTRY = {
2278
2443
  label: "Microsoft Entra ID OAuth 2.0 / OpenID Connect emulator",
2279
2444
  endpoints: "OAuth authorize, token exchange, userinfo, OIDC discovery, Graph /me, logout, token revocation",
2280
2445
  async load() {
2281
- const mod = await import("./dist-ZGCIWJJM.js");
2446
+ const mod = await import("./dist-TOCHFEDO.js");
2282
2447
  return { plugin: mod.microsoftPlugin, seedFromConfig: mod.seedFromConfig };
2283
2448
  },
2284
2449
  defaultFallback(cfg) {
@@ -2303,7 +2468,7 @@ var SERVICE_REGISTRY = {
2303
2468
  label: "Okta OAuth 2.0 / OpenID Connect + management API emulator",
2304
2469
  endpoints: "OIDC discovery, JWKS, OAuth authorize/token/userinfo/introspect/revoke/logout, users, groups, apps, authorization servers",
2305
2470
  async load() {
2306
- const mod = await import("./dist-EUMN2OAH.js");
2471
+ const mod = await import("./dist-DVBHDPLP.js");
2307
2472
  return { plugin: mod.oktaPlugin, seedFromConfig: mod.seedFromConfig };
2308
2473
  },
2309
2474
  defaultFallback(cfg) {
@@ -2331,7 +2496,7 @@ var SERVICE_REGISTRY = {
2331
2496
  label: "AWS cloud service emulator",
2332
2497
  endpoints: "S3 (buckets, objects), SQS (queues, messages), Cognito (User Pools, OAuth, JWTs, Identity Pools), IAM (users, roles, access keys), STS (assume role, caller identity)",
2333
2498
  async load() {
2334
- const mod = await import("./dist-22OZW7MU.js");
2499
+ const mod = await import("./dist-AZA2TRAN.js");
2335
2500
  return { plugin: mod.awsPlugin, seedFromConfig: mod.seedFromConfig };
2336
2501
  },
2337
2502
  defaultFallback() {
@@ -2353,7 +2518,7 @@ var SERVICE_REGISTRY = {
2353
2518
  label: "Resend email API emulator",
2354
2519
  endpoints: "emails with idempotency, recipient restrictions, send attempts, domains, contacts, API keys, inbox UI",
2355
2520
  async load() {
2356
- const mod = await import("./dist-B4K5JXTS.js");
2521
+ const mod = await import("./dist-UFXXFP3R.js");
2357
2522
  return { plugin: mod.resendPlugin, seedFromConfig: mod.seedFromConfig };
2358
2523
  },
2359
2524
  defaultFallback() {
@@ -2370,7 +2535,7 @@ var SERVICE_REGISTRY = {
2370
2535
  label: "Stripe payments emulator",
2371
2536
  endpoints: "customers, payment methods, customer sessions, payment intents, charges, products, prices, checkout sessions, webhooks",
2372
2537
  async load() {
2373
- const mod = await import("./dist-KRJZAPPL.js");
2538
+ const mod = await import("./dist-DWUKLYZG.js");
2374
2539
  return { plugin: mod.stripePlugin, seedFromConfig: mod.seedFromConfig };
2375
2540
  },
2376
2541
  defaultFallback() {
@@ -2407,7 +2572,7 @@ var SERVICE_REGISTRY = {
2407
2572
  label: "Clerk authentication and user management emulator",
2408
2573
  endpoints: "OIDC discovery, JWKS, OAuth authorize/token/userinfo, users, email addresses, organizations, memberships, invitations, sessions",
2409
2574
  async load() {
2410
- const mod = await import("./dist-YMRASK5I.js");
2575
+ const mod = await import("./dist-QUEHZ2IC.js");
2411
2576
  return { plugin: mod.clerkPlugin, seedFromConfig: mod.seedFromConfig };
2412
2577
  },
2413
2578
  defaultFallback(cfg) {
@@ -2446,7 +2611,7 @@ var SERVICE_REGISTRY = {
2446
2611
  label: "Linear GraphQL API emulator",
2447
2612
  endpoints: "GraphQL, OAuth, issues, teams, users, workflow states, comments, labels, projects, cycles, webhooks, agents, inspector",
2448
2613
  async load() {
2449
- const mod = await import("./dist-ATXASBBA.js");
2614
+ const mod = await import("./dist-6OM56NLC.js");
2450
2615
  return { plugin: mod.linearPlugin, seedFromConfig: mod.seedFromConfig };
2451
2616
  },
2452
2617
  defaultFallback(cfg) {
@@ -2511,7 +2676,7 @@ var SERVICE_REGISTRY = {
2511
2676
  label: "Twilio API emulator",
2512
2677
  endpoints: "accounts, API keys, phone numbers, Programmable Messaging, Messaging Services, Verify, Voice, webhooks, simulator, inspector",
2513
2678
  async load() {
2514
- const mod = await import("./dist-KAYD3L2O.js");
2679
+ const mod = await import("./dist-KQGIGONJ.js");
2515
2680
  return { plugin: mod.twilioPlugin, seedFromConfig: mod.seedFromConfig };
2516
2681
  },
2517
2682
  defaultFallback(cfg) {