@urbankitstudio/atlas 0.5.1 → 0.5.3

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 (58) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +146 -110
  3. package/data/alabama.json +103 -103
  4. package/data/alaska.json +51 -51
  5. package/data/arizona.json +149 -148
  6. package/data/arkansas.json +143 -143
  7. package/data/california.json +435 -435
  8. package/data/colorado.json +150 -150
  9. package/data/connecticut.json +164 -164
  10. package/data/delaware.json +46 -46
  11. package/data/florida.json +455 -455
  12. package/data/georgia.json +176 -175
  13. package/data/hawaii.json +82 -82
  14. package/data/idaho.json +54 -54
  15. package/data/illinois.json +337 -337
  16. package/data/index.json +411 -411
  17. package/data/indiana.json +132 -132
  18. package/data/iowa.json +51 -51
  19. package/data/kansas.json +49 -49
  20. package/data/kentucky.json +52 -52
  21. package/data/louisiana.json +102 -102
  22. package/data/maine.json +138 -138
  23. package/data/maryland.json +94 -94
  24. package/data/massachusetts.json +78 -78
  25. package/data/michigan.json +92 -92
  26. package/data/minnesota.json +94 -94
  27. package/data/mississippi.json +98 -98
  28. package/data/missouri.json +99 -99
  29. package/data/montana.json +196 -196
  30. package/data/nebraska.json +137 -137
  31. package/data/nevada.json +98 -98
  32. package/data/new-hampshire.json +42 -42
  33. package/data/new-jersey.json +493 -493
  34. package/data/new-mexico.json +49 -49
  35. package/data/new-york.json +318 -318
  36. package/data/north-carolina.json +303 -303
  37. package/data/north-dakota.json +57 -57
  38. package/data/ohio.json +304 -304
  39. package/data/oklahoma.json +49 -49
  40. package/data/oregon.json +144 -144
  41. package/data/pennsylvania.json +86 -86
  42. package/data/rhode-island.json +25 -25
  43. package/data/south-carolina.json +101 -101
  44. package/data/south-dakota.json +58 -58
  45. package/data/tennessee.json +154 -154
  46. package/data/texas.json +430 -430
  47. package/data/utah.json +193 -193
  48. package/data/vermont.json +59 -59
  49. package/data/virginia.json +88 -88
  50. package/data/washington.json +183 -183
  51. package/data/west-virginia.json +172 -176
  52. package/data/wisconsin.json +374 -374
  53. package/data/wyoming.json +58 -58
  54. package/dist/index.cjs +44 -42
  55. package/dist/index.d.cts +26 -1
  56. package/dist/index.d.ts +26 -1
  57. package/dist/index.js +44 -43
  58. package/package.json +68 -68
package/data/wyoming.json CHANGED
@@ -1,58 +1,58 @@
1
- {
2
- "stateSlug": "wyoming",
3
- "stateName": "Wyoming",
4
- "stateAbbrev": "WY",
5
- "lastUpdated": "2026-06-20",
6
- "counties": [
7
- {
8
- "id": "wy-laramie",
9
- "state": "WY",
10
- "stateName": "Wyoming",
11
- "stateSlug": "wyoming",
12
- "county": "Laramie",
13
- "countySlug": "laramie-county",
14
- "countyFips": "56021",
15
- "hasPublicRest": true,
16
- "endpoints": [
17
- {
18
- "url": "https://maps.laramiecounty.com/arcgis/rest/services/Planning/SmartGovParcels/MapServer/1",
19
- "serviceType": "MapServer",
20
- "layerIndex": 1,
21
- "layerName": "SmartGovParcels",
22
- "supportsQuery": true,
23
- "corsEnabled": null,
24
- "searchFields": [
25
- { "name": "statepidn", "label": "State Parcel ID Number", "searchable": true },
26
- { "name": "accountno", "label": "Account Number", "searchable": true },
27
- { "name": "owner_name1", "label": "Owner Name 1", "searchable": true },
28
- { "name": "owner_name2", "label": "Owner Name 2", "searchable": false },
29
- { "name": "owner_address", "label": "Owner Address", "searchable": false },
30
- { "name": "owner_town", "label": "Owner Town", "searchable": false },
31
- { "name": "owner_state", "label": "Owner State", "searchable": false },
32
- { "name": "owner_zip", "label": "Owner ZIP", "searchable": false },
33
- { "name": "site_address1", "label": "Site Address", "searchable": true },
34
- { "name": "site_address2", "label": "Site Address 2", "searchable": false },
35
- { "name": "site_town", "label": "Site Town", "searchable": false },
36
- { "name": "site_state", "label": "Site State", "searchable": false },
37
- { "name": "site_zip", "label": "Site ZIP", "searchable": false },
38
- { "name": "trsec", "label": "Township/Range/Section", "searchable": false },
39
- { "name": "fema_zone", "label": "FEMA Flood Zone", "searchable": false },
40
- { "name": "latitude", "label": "Latitude", "searchable": false }
41
- ],
42
- "sampleQuery": "https://maps.laramiecounty.com/arcgis/rest/services/Planning/SmartGovParcels/MapServer/1/query?where=UPPER(owner_name1)+LIKE+UPPER('%25SMITH%25')&outFields=statepidn,owner_name1,owner_name2,owner_address,owner_town,site_address1,site_town&returnGeometry=false&f=json&resultRecordCount=10",
43
- "license": "public",
44
- "licenseUrl": "https://maps.laramiecounty.com/",
45
- "status": "live",
46
- "lastVerified": "2026-06-20",
47
- "verifiedBy": "automated"
48
- }
49
- ],
50
- "contact": {
51
- "department": "Laramie County GIS / Laramie County Planning and Development",
52
- "url": "https://www.laramiecounty.com/171/GIS",
53
- "email": null
54
- },
55
- "notes": "Laramie County WY (Cheyenne; county seat Cheyenne; state capital; FIPS 56021; most populous county in WY, pop. 100,000) provides parcel data via maps.laramiecounty.com. The Planning/SmartGovParcels/MapServer layer at layerIndex=1 (NOT layer 0) exposes 20 fields: objectid, statepidn (14-digit state parcel ID, e.g., '12600210000200'), accountno, fema_zone, trsec, site_address1/2, site_town, site_state, site_zip, owner_name1, owner_name2, owner_address, owner_town, owner_state, owner_zip, latitude, and shape fields. CRITICAL: use layerIndex=1 (the /1 suffix). Layer 0 is a different geometry layer. Owner search via UPPER(owner_name1) LIKE works well. Verified 2026-06-20: SMITH query returns Cheyenne-area addresses (e.g., owner_name1 'BAKER, KATHARINE M LIVING TR' at '261 ROAD 164' Pine Bluffs). Laramie County WY (FIPS 56021) must not be confused with the City of Laramie (Albany County WY). The county seat is Cheyenne, not Laramie city."
56
- }
57
- ]
58
- }
1
+ {
2
+ "stateSlug": "wyoming",
3
+ "stateName": "Wyoming",
4
+ "stateAbbrev": "WY",
5
+ "lastUpdated": "2026-06-20",
6
+ "counties": [
7
+ {
8
+ "id": "wy-laramie",
9
+ "state": "WY",
10
+ "stateName": "Wyoming",
11
+ "stateSlug": "wyoming",
12
+ "county": "Laramie",
13
+ "countySlug": "laramie-county",
14
+ "countyFips": "56021",
15
+ "hasPublicRest": true,
16
+ "endpoints": [
17
+ {
18
+ "url": "https://maps.laramiecounty.com/arcgis/rest/services/Planning/SmartGovParcels/MapServer/1",
19
+ "serviceType": "MapServer",
20
+ "layerIndex": 1,
21
+ "layerName": "SmartGovParcels",
22
+ "supportsQuery": true,
23
+ "corsEnabled": null,
24
+ "searchFields": [
25
+ { "name": "statepidn", "label": "State Parcel ID Number", "searchable": true },
26
+ { "name": "accountno", "label": "Account Number", "searchable": true },
27
+ { "name": "owner_name1", "label": "Owner Name 1", "searchable": true },
28
+ { "name": "owner_name2", "label": "Owner Name 2", "searchable": false },
29
+ { "name": "owner_address", "label": "Owner Address", "searchable": false },
30
+ { "name": "owner_town", "label": "Owner Town", "searchable": false },
31
+ { "name": "owner_state", "label": "Owner State", "searchable": false },
32
+ { "name": "owner_zip", "label": "Owner ZIP", "searchable": false },
33
+ { "name": "site_address1", "label": "Site Address", "searchable": true },
34
+ { "name": "site_address2", "label": "Site Address 2", "searchable": false },
35
+ { "name": "site_town", "label": "Site Town", "searchable": false },
36
+ { "name": "site_state", "label": "Site State", "searchable": false },
37
+ { "name": "site_zip", "label": "Site ZIP", "searchable": false },
38
+ { "name": "trsec", "label": "Township/Range/Section", "searchable": false },
39
+ { "name": "fema_zone", "label": "FEMA Flood Zone", "searchable": false },
40
+ { "name": "latitude", "label": "Latitude", "searchable": false }
41
+ ],
42
+ "sampleQuery": "https://maps.laramiecounty.com/arcgis/rest/services/Planning/SmartGovParcels/MapServer/1/query?where=UPPER(owner_name1)+LIKE+UPPER('%25SMITH%25')&outFields=statepidn,owner_name1,owner_name2,owner_address,owner_town,site_address1,site_town&returnGeometry=false&f=json&resultRecordCount=10",
43
+ "license": "public",
44
+ "licenseUrl": "https://maps.laramiecounty.com/",
45
+ "status": "live",
46
+ "lastVerified": "2026-06-20",
47
+ "verifiedBy": "automated"
48
+ }
49
+ ],
50
+ "contact": {
51
+ "department": "Laramie County GIS / Laramie County Planning and Development",
52
+ "url": "https://www.laramiecounty.com/171/GIS",
53
+ "email": null
54
+ },
55
+ "notes": "Laramie County WY (Cheyenne; county seat Cheyenne; state capital; FIPS 56021; most populous county in WY, pop. 100,000) provides parcel data via maps.laramiecounty.com. The Planning/SmartGovParcels/MapServer layer at layerIndex=1 (NOT layer 0) exposes 20 fields: objectid, statepidn (14-digit state parcel ID, e.g., '12600210000200'), accountno, fema_zone, trsec, site_address1/2, site_town, site_state, site_zip, owner_name1, owner_name2, owner_address, owner_town, owner_state, owner_zip, latitude, and shape fields. CRITICAL: use layerIndex=1 (the /1 suffix). Layer 0 is a different geometry layer. Owner search via UPPER(owner_name1) LIKE works well. Verified 2026-06-20: SMITH query returns Cheyenne-area addresses (e.g., owner_name1 'BAKER, KATHARINE M LIVING TR' at '261 ROAD 164' Pine Bluffs). Laramie County WY (FIPS 56021) must not be confused with the City of Laramie (Albany County WY). The county seat is Cheyenne, not Laramie city."
56
+ }
57
+ ]
58
+ }
package/dist/index.cjs CHANGED
@@ -1,9 +1,12 @@
1
1
  'use strict';
2
2
 
3
+ // src/types.ts
4
+ var LIVE_STATUS_URL = "https://urbankitstudio.com/api/atlas/status";
5
+
3
6
  // data/index.json
4
7
  var data_default = {
5
- version: "0.5.1",
6
- lastUpdated: "2026-06-20",
8
+ version: "0.3.0",
9
+ lastUpdated: "2026-08-04",
7
10
  totals: {
8
11
  states: 50,
9
12
  counties: 155,
@@ -585,6 +588,7 @@ var arizona_default = {
585
588
  stateSlug: "arizona",
586
589
  county: "Maricopa",
587
590
  countySlug: "maricopa-county",
591
+ relatedPropertyCitySlug: "phoenix",
588
592
  countyFips: "04013",
589
593
  hasPublicRest: true,
590
594
  endpoints: [
@@ -2139,6 +2143,7 @@ var georgia_default = {
2139
2143
  stateSlug: "georgia",
2140
2144
  county: "Fulton",
2141
2145
  countySlug: "fulton-county",
2146
+ relatedPropertyCitySlug: "atlanta",
2142
2147
  countyFips: "13121",
2143
2148
  hasPublicRest: true,
2144
2149
  endpoints: [
@@ -3078,7 +3083,7 @@ var louisiana_default = {
3078
3083
  stateSlug: "louisiana",
3079
3084
  stateName: "Louisiana",
3080
3085
  stateAbbrev: "LA",
3081
- lastUpdated: "2026-05-15",
3086
+ lastUpdated: "2026-08-04",
3082
3087
  counties: [
3083
3088
  {
3084
3089
  id: "la-east-baton-rouge-parish",
@@ -3172,7 +3177,7 @@ var louisiana_default = {
3172
3177
  url: "https://gis.nola.gov/",
3173
3178
  email: null
3174
3179
  },
3175
- notes: "Orleans Parish (New Orleans, pop. 383,000) Property Information layer at index 15 of the apps/property3 composite MapServer. Note: the 'LandBase/Parcels' MapServer at gis.nola.gov only exposes GEOPIN (parcel geometry key, no attributes). For owner + address data, use apps/property3/MapServer/15 which is an assessor join. 20 fields confirmed: OBJECTID, BUILDING, UNIT, SITEADDRESS, OWNERNME1/2, PSTLADDRESS/CITY/STATE/ZIP5/ZIP4, USECD, PRPRTYDSCRP, PARCELID, TAXBILLID, LOT, SQUARE, BLOCK, PARID. New Orleans uses a Square/Lot system (not typical street address) for legal parcel identification. NOTE 2026-06-27: the liveness check 'fetch failed' was transient (metadata at /MapServer/15?f=json now returns 200). However, this ArcGIS Server 10.4 instance has two persistent query limitations: (1) LIKE/UPPER() queries return HTTP 400; (2) count-all queries (where=1=1&returnCountOnly=true) timeout >35s. PARCELID equality queries (where=PARCELID='...') return valid JSON structure. OWNERNME1 and SITEADDRESS marked searchable:false accordingly; sampleQuery changed to IS NOT NULL filter. For PARCELID-based lookups use the PARCELID or PARID fields. The countySlug 'orleans-parish' matches countySlugFromName('Orleans Parish') per atlas slugify rules."
3180
+ notes: "Orleans Parish's public parcel layer still serves metadata, but its attribute-query operation is currently failing on the county's ArcGIS server. Owner and address searches are unavailable while the county repairs the service; automatic probes continue to check for recovery. New Orleans uses Square/Lot identifiers for legal parcels. The city also publishes a weekly situs-and-geometry dataset on data.nola.gov, but it does not include owner names. An older 2018 parcel snapshot was not substituted because its ownership data is dated and the service was unstable during verification. LIVENESS 2026-08-04: the layer's metadata still loads, but EVERY query against it times out, including a bare returnCountOnly count. 161 consecutive failed checks and last_ok_at has never been set. This is a county-side outage, not a schema drift; there is nothing to fix on our side and the endpoint stays honestly degraded until New Orleans repairs it."
3176
3181
  }
3177
3182
  ]
3178
3183
  };
@@ -3889,7 +3894,7 @@ var montana_default = {
3889
3894
  stateSlug: "montana",
3890
3895
  stateName: "Montana",
3891
3896
  stateAbbrev: "MT",
3892
- lastUpdated: "2026-06-20",
3897
+ lastUpdated: "2026-08-04",
3893
3898
  counties: [
3894
3899
  {
3895
3900
  id: "mt-yellowstone",
@@ -3902,10 +3907,10 @@ var montana_default = {
3902
3907
  hasPublicRest: true,
3903
3908
  endpoints: [
3904
3909
  {
3905
- url: "https://gisservicemt.gov/arcgis/rest/services/MSDI_Framework/Parcels/MapServer/0",
3910
+ url: "https://gisservice.mt.gov/arcgis/rest/services/msdi_cadastral_map_v1/MapServer/1",
3906
3911
  serviceType: "MapServer",
3907
- layerIndex: 0,
3908
- layerName: "Parcels",
3912
+ layerIndex: 1,
3913
+ layerName: "Montana Parcels",
3909
3914
  supportsQuery: true,
3910
3915
  corsEnabled: null,
3911
3916
  searchFields: [
@@ -3923,9 +3928,9 @@ var montana_default = {
3923
3928
  { name: "TotalValue", label: "Total Assessed Value", searchable: false },
3924
3929
  { name: "TaxYear", label: "Tax Year", searchable: false }
3925
3930
  ],
3926
- sampleQuery: "https://gisservicemt.gov/arcgis/rest/services/MSDI_Framework/Parcels/MapServer/0/query?where=CountyName%3D'Yellowstone'+AND+UPPER(OwnerName)+LIKE+UPPER('%25SMITH%25')&outFields=PARCELID,OwnerName,AddressLine1,CityStateZip,CountyName&returnGeometry=false&f=json&resultRecordCount=10",
3931
+ sampleQuery: "https://gisservice.mt.gov/arcgis/rest/services/msdi_cadastral_map_v1/MapServer/1/query?where=CountyName%3D'Yellowstone'+AND+UPPER(OwnerName)+LIKE+UPPER('%25SMITH%25')&outFields=PARCELID,OwnerName,AddressLine1,CityStateZip,CountyName&returnGeometry=false&f=json&resultRecordCount=10",
3927
3932
  license: "public",
3928
- licenseUrl: "https://gisservicemt.gov/",
3933
+ licenseUrl: "https://gisservice.mt.gov/",
3929
3934
  status: "live",
3930
3935
  lastVerified: "2026-06-20",
3931
3936
  verifiedBy: "automated"
@@ -3949,10 +3954,10 @@ var montana_default = {
3949
3954
  hasPublicRest: true,
3950
3955
  endpoints: [
3951
3956
  {
3952
- url: "https://gisservicemt.gov/arcgis/rest/services/MSDI_Framework/Parcels/MapServer/0",
3957
+ url: "https://gisservice.mt.gov/arcgis/rest/services/msdi_cadastral_map_v1/MapServer/1",
3953
3958
  serviceType: "MapServer",
3954
- layerIndex: 0,
3955
- layerName: "Parcels",
3959
+ layerIndex: 1,
3960
+ layerName: "Montana Parcels",
3956
3961
  supportsQuery: true,
3957
3962
  corsEnabled: null,
3958
3963
  searchFields: [
@@ -3970,9 +3975,9 @@ var montana_default = {
3970
3975
  { name: "TotalValue", label: "Total Assessed Value", searchable: false },
3971
3976
  { name: "TaxYear", label: "Tax Year", searchable: false }
3972
3977
  ],
3973
- sampleQuery: "https://gisservicemt.gov/arcgis/rest/services/MSDI_Framework/Parcels/MapServer/0/query?where=CountyName%3D'Missoula'+AND+UPPER(OwnerName)+LIKE+UPPER('%25SMITH%25')&outFields=PARCELID,OwnerName,AddressLine1,CityStateZip,CountyName&returnGeometry=false&f=json&resultRecordCount=10",
3978
+ sampleQuery: "https://gisservice.mt.gov/arcgis/rest/services/msdi_cadastral_map_v1/MapServer/1/query?where=CountyName%3D'Missoula'+AND+UPPER(OwnerName)+LIKE+UPPER('%25SMITH%25')&outFields=PARCELID,OwnerName,AddressLine1,CityStateZip,CountyName&returnGeometry=false&f=json&resultRecordCount=10",
3974
3979
  license: "public",
3975
- licenseUrl: "https://gisservicemt.gov/",
3980
+ licenseUrl: "https://gisservice.mt.gov/",
3976
3981
  status: "live",
3977
3982
  lastVerified: "2026-06-20",
3978
3983
  verifiedBy: "automated"
@@ -3996,10 +4001,10 @@ var montana_default = {
3996
4001
  hasPublicRest: true,
3997
4002
  endpoints: [
3998
4003
  {
3999
- url: "https://gisservicemt.gov/arcgis/rest/services/MSDI_Framework/Parcels/MapServer/0",
4004
+ url: "https://gisservice.mt.gov/arcgis/rest/services/msdi_cadastral_map_v1/MapServer/1",
4000
4005
  serviceType: "MapServer",
4001
- layerIndex: 0,
4002
- layerName: "Parcels",
4006
+ layerIndex: 1,
4007
+ layerName: "Montana Parcels",
4003
4008
  supportsQuery: true,
4004
4009
  corsEnabled: null,
4005
4010
  searchFields: [
@@ -4017,9 +4022,9 @@ var montana_default = {
4017
4022
  { name: "TotalValue", label: "Total Assessed Value", searchable: false },
4018
4023
  { name: "TaxYear", label: "Tax Year", searchable: false }
4019
4024
  ],
4020
- sampleQuery: "https://gisservicemt.gov/arcgis/rest/services/MSDI_Framework/Parcels/MapServer/0/query?where=CountyName%3D'Cascade'+AND+UPPER(OwnerName)+LIKE+UPPER('%25SMITH%25')&outFields=PARCELID,OwnerName,AddressLine1,CityStateZip,CountyName&returnGeometry=false&f=json&resultRecordCount=10",
4025
+ sampleQuery: "https://gisservice.mt.gov/arcgis/rest/services/msdi_cadastral_map_v1/MapServer/1/query?where=CountyName%3D'Cascade'+AND+UPPER(OwnerName)+LIKE+UPPER('%25SMITH%25')&outFields=PARCELID,OwnerName,AddressLine1,CityStateZip,CountyName&returnGeometry=false&f=json&resultRecordCount=10",
4021
4026
  license: "public",
4022
- licenseUrl: "https://gisservicemt.gov/",
4027
+ licenseUrl: "https://gisservice.mt.gov/",
4023
4028
  status: "live",
4024
4029
  lastVerified: "2026-06-20",
4025
4030
  verifiedBy: "automated"
@@ -4043,10 +4048,10 @@ var montana_default = {
4043
4048
  hasPublicRest: true,
4044
4049
  endpoints: [
4045
4050
  {
4046
- url: "https://gisservicemt.gov/arcgis/rest/services/MSDI_Framework/Parcels/MapServer/0",
4051
+ url: "https://gisservice.mt.gov/arcgis/rest/services/msdi_cadastral_map_v1/MapServer/1",
4047
4052
  serviceType: "MapServer",
4048
- layerIndex: 0,
4049
- layerName: "Parcels",
4053
+ layerIndex: 1,
4054
+ layerName: "Montana Parcels",
4050
4055
  supportsQuery: true,
4051
4056
  corsEnabled: null,
4052
4057
  searchFields: [
@@ -4064,9 +4069,9 @@ var montana_default = {
4064
4069
  { name: "TotalValue", label: "Total Assessed Value", searchable: false },
4065
4070
  { name: "TaxYear", label: "Tax Year", searchable: false }
4066
4071
  ],
4067
- sampleQuery: "https://gisservicemt.gov/arcgis/rest/services/MSDI_Framework/Parcels/MapServer/0/query?where=CountyName%3D'Flathead'+AND+UPPER(OwnerName)+LIKE+UPPER('%25SMITH%25')&outFields=PARCELID,OwnerName,AddressLine1,CityStateZip,CountyName&returnGeometry=false&f=json&resultRecordCount=10",
4072
+ sampleQuery: "https://gisservice.mt.gov/arcgis/rest/services/msdi_cadastral_map_v1/MapServer/1/query?where=CountyName%3D'Flathead'+AND+UPPER(OwnerName)+LIKE+UPPER('%25SMITH%25')&outFields=PARCELID,OwnerName,AddressLine1,CityStateZip,CountyName&returnGeometry=false&f=json&resultRecordCount=10",
4068
4073
  license: "public",
4069
- licenseUrl: "https://gisservicemt.gov/",
4074
+ licenseUrl: "https://gisservice.mt.gov/",
4070
4075
  status: "live",
4071
4076
  lastVerified: "2026-06-20",
4072
4077
  verifiedBy: "automated"
@@ -6320,7 +6325,7 @@ var south_dakota_default = {
6320
6325
  stateSlug: "south-dakota",
6321
6326
  stateName: "South Dakota",
6322
6327
  stateAbbrev: "SD",
6323
- lastUpdated: "2026-06-20",
6328
+ lastUpdated: "2026-08-04",
6324
6329
  counties: [
6325
6330
  {
6326
6331
  id: "sd-minnehaha",
@@ -6333,7 +6338,7 @@ var south_dakota_default = {
6333
6338
  hasPublicRest: true,
6334
6339
  endpoints: [
6335
6340
  {
6336
- url: "https://gis.minnehahacounty.org/minnemap/rest/services/Parcels/MapServer/0",
6341
+ url: "https://gis.minnehahacounty.gov/minnemap/rest/services/Parcels/MapServer/0",
6337
6342
  serviceType: "MapServer",
6338
6343
  layerIndex: 0,
6339
6344
  layerName: "Parcels",
@@ -6357,9 +6362,9 @@ var south_dakota_default = {
6357
6362
  { name: "TRACT", label: "Tract", searchable: false },
6358
6363
  { name: "SUBDIVISION", label: "Subdivision", searchable: false }
6359
6364
  ],
6360
- sampleQuery: "https://gis.minnehahacounty.org/minnemap/rest/services/Parcels/MapServer/0/query?where=UPPER(MRTNM1)+LIKE+UPPER('%25SMITH%25')&outFields=TAG,MRTNM1,MRTNM2,MRTCTY,FULL_ADDRESS&returnGeometry=false&f=json&resultRecordCount=10",
6365
+ sampleQuery: "https://gis.minnehahacounty.gov/minnemap/rest/services/Parcels/MapServer/0/query?where=UPPER(MRTNM1)+LIKE+UPPER('%25SMITH%25')&outFields=TAG,MRTNM1,MRTNM2,MRTCTY,FULL_ADDRESS&returnGeometry=false&f=json&resultRecordCount=10",
6361
6366
  license: "public",
6362
- licenseUrl: "https://gis.minnehahacounty.org/",
6367
+ licenseUrl: "https://gis.minnehahacounty.gov/",
6363
6368
  status: "live",
6364
6369
  lastVerified: "2026-06-20",
6365
6370
  verifiedBy: "automated"
@@ -6370,7 +6375,7 @@ var south_dakota_default = {
6370
6375
  url: "https://www.minnehahacounty.org/dept/eq/eq.php",
6371
6376
  email: null
6372
6377
  },
6373
- notes: "Minnehaha County SD (Sioux Falls metro; county seat Sioux Falls; FIPS 46099; most populous county in SD, pop. 210,000) provides parcel data via gis.minnehahacounty.org. The Parcels/MapServer/0 layer exposes 20 fields: OBJECTID, FULL_ADDRESS, TAG (parcel ID), MAP_ID, MRRDID, MRTNM1 (owner name 1), MRTNM2 (owner name 2), MRTCTY (owner city), MRTSTATE, MRTZPC (ZIP), MRTZPC2, NWLOCN, NWPRED, NWLOCS (street name), NWSTYP, NWPOSD, LOT, BLOCK, TRACT, SUBDIVISION. Owner search via UPPER(MRTNM1) LIKE on MRTNM1. To get both owners, also query MRTNM2. Verified 2026-06-20: SMITH query returns Sioux Falls addresses. Minnehaha County SD (FIPS 46099) must not be confused with Minnehaha County in any other state."
6378
+ notes: "Minnehaha County SD (Sioux Falls metro; county seat Sioux Falls; FIPS 46099; most populous county in SD, pop. 210,000) provides parcel data via gis.minnehahacounty.gov. The Parcels/MapServer/0 layer exposes 20 fields: OBJECTID, FULL_ADDRESS, TAG (parcel ID), MAP_ID, MRRDID, MRTNM1 (owner name 1), MRTNM2 (owner name 2), MRTCTY (owner city), MRTSTATE, MRTZPC (ZIP), MRTZPC2, NWLOCN, NWPRED, NWLOCS (street name), NWSTYP, NWPOSD, LOT, BLOCK, TRACT, SUBDIVISION. Owner search via UPPER(MRTNM1) LIKE on MRTNM1. To get both owners, also query MRTNM2. Verified 2026-06-20: SMITH query returns Sioux Falls addresses. Minnehaha County SD (FIPS 46099) must not be confused with Minnehaha County in any other state."
6374
6379
  }
6375
6380
  ]
6376
6381
  };
@@ -6483,7 +6488,7 @@ var tennessee_default = {
6483
6488
  url: "https://www.shelbycountytn.gov/467/REGIS-Regional-GIS",
6484
6489
  email: null
6485
6490
  },
6486
- notes: "Shelby County (Memphis and suburbs, pop. 934,000) hosts parcel data through ReGIS (Regional Geographic Information Systems), a multi-jurisdictional GIS consortium established by the Shelby County Commission in 2004. The CurrentParcels MapServer at scgis.shelbycountytn.gov exposes 47 confirmed fields. Parcel identifiers: PARCELID (primary display key) and PARID (the CAMA account ID used by the Shelby County Assessor of Property). Owner field is OWNER; OWNER_EXT holds overflow text. Mailing address is split across OWN_ADRNO, ADRPREDIR, ADRSTR, ADRSUF, ADRPOSTDIR for the street component, plus OWN_CITY, OWN_STATE, OWN_ZIP/ZIP4; also available concatenated as OWN_ADDR1/2/3. The MUNI field identifies the municipality -- Memphis, Bartlett, Collierville, Germantown, Lakeland, Millington, or blank for unincorporated Shelby County. That distinction carries real workflow consequences: Memphis's Division of Planning handles incorporated parcels, while the Shelby County Land Use Control Board handles unincorporated ones. Verified 2026-05-15: SMITH returns results from Germantown, Arlington, and unincorporated areas. Last countywide reappraisal was 2025; next scheduled 2029. LEGACY TLS (first documented 2026-06-06, confirmed 2026-06-27): scgis.shelbycountytn.gov requires legacy TLS renegotiation (UNSAFE_LEGACY_RENEGOTIATION). Modern runtimes (Node.js 18+, undici fetch, Python 3.10+ ssl, standard curl) reject the handshake; curl --legacy-server-connect or OpenSSL OP_LEGACY_SERVER_CONNECT succeeds. The endpoint itself is live (353,448 parcels). The atlas liveness check will always flag this endpoint FAIL because Node's native fetch rejects the TLS handshake. This is expected behavior, NOT a server outage. FIX NEEDED (flagged for lead): add a narrow per-host legacy-TLS fetch path in atlas-liveness-check.mjs and in the server-side parcel fetch for this specific host. Weakening TLS globally is not an option."
6491
+ notes: "Shelby County (Memphis and suburbs, pop. 934,000) hosts parcel data through ReGIS (Regional Geographic Information Systems), a multi-jurisdictional GIS consortium established by the Shelby County Commission in 2004. The CurrentParcels MapServer at scgis.shelbycountytn.gov exposes 47 confirmed fields. Parcel identifiers: PARCELID (primary display key) and PARID (the CAMA account ID used by the Shelby County Assessor of Property). Owner field is OWNER; OWNER_EXT holds overflow text. Mailing address is split across OWN_ADRNO, ADRPREDIR, ADRSTR, ADRSUF, ADRPOSTDIR for the street component, plus OWN_CITY, OWN_STATE, OWN_ZIP/ZIP4; also available concatenated as OWN_ADDR1/2/3. The MUNI field identifies the municipality -- Memphis, Bartlett, Collierville, Germantown, Lakeland, Millington, or blank for unincorporated Shelby County. That distinction carries real workflow consequences: Memphis's Division of Planning handles incorporated parcels, while the Shelby County Land Use Control Board handles unincorporated ones. Verified 2026-05-15: SMITH returns results from Germantown, Arlington, and unincorporated areas. Last countywide reappraisal was 2025; next scheduled 2029. LEGACY TLS (first documented 2026-06-06, confirmed 2026-06-27): scgis.shelbycountytn.gov requires legacy TLS renegotiation (UNSAFE_LEGACY_RENEGOTIATION). Modern runtimes (Node.js 18+, undici fetch, Python 3.10+ ssl, standard curl) reject the handshake; curl --legacy-server-connect or OpenSSL OP_LEGACY_SERVER_CONNECT succeeds. The endpoint itself is live (353,448 parcels). RESOLVED (2026-07-21): the canonical liveness prober (api/cron/liveness.ts) and the server-side parcel fetch (api/_lib/atlas-resilient-fetch.ts) both use a narrow legacy-TLS path scoped to this hostname alone, so the endpoint probes and fetches correctly; global TLS behavior is unchanged."
6487
6492
  },
6488
6493
  {
6489
6494
  id: "tn-hamilton",
@@ -7222,7 +7227,7 @@ var virginia_default = {
7222
7227
  stateSlug: "virginia",
7223
7228
  stateName: "Virginia",
7224
7229
  stateAbbrev: "VA",
7225
- lastUpdated: "2026-06-20",
7230
+ lastUpdated: "2026-08-04",
7226
7231
  counties: [
7227
7232
  {
7228
7233
  id: "va-fairfax",
@@ -7302,7 +7307,7 @@ var virginia_default = {
7302
7307
  url: "https://www.pwcva.gov/department/geographic-information-systems-gis",
7303
7308
  email: null
7304
7309
  },
7305
- notes: "Prince William County (Northern Virginia, pop. ~490,000; county seat unincorporated, courts in Manassas) publishes an Open Data parcel MapServer at gisweb.pwcva.gov (note the host is gisweb.pwcva.gov, NOT pwcgov.org). Layer 0 exposes 49 fields and -- unlike neighboring Fairfax County -- includes owner name directly: CAMA_OWNER_CUR (current owner from the CAMA system) and CAMA_DEEDOWNER (deed owner). Parcel identifier is GPIN, a hyphenated geographic id (e.g. '7201-09-8851'). Site address is split across ST_NO / ST_NAME / ST_TYPE / CITY / ZIP. Verified 2026-06-20: 159,174 parcels; UPPER(CAMA_OWNER_CUR) LIKE '%SMITH%' returns real owners with Haymarket/Manassas-area addresses and ZIPs. IMPORTANT: this entry covers Prince William COUNTY only. The independent cities of Manassas (FIPS 51683) and Manassas Park (FIPS 51685) sit within the county's geographic bounds but are separate Census FIPS jurisdictions, governed and assessed independently. For authoritative assessment records use the PWC Real Estate Assessments office."
7310
+ notes: "Prince William County (Northern Virginia, pop. ~490,000; county seat unincorporated, courts in Manassas) publishes an Open Data parcel MapServer at gisweb.pwcva.gov (note the host is gisweb.pwcva.gov, NOT pwcgov.org). Layer 0 exposes 49 fields and -- unlike neighboring Fairfax County -- includes owner name directly: CAMA_OWNER_CUR (current owner from the CAMA system) and CAMA_DEEDOWNER (deed owner). Parcel identifier is GPIN, a hyphenated geographic id (e.g. '7201-09-8851'). Site address is split across ST_NO / ST_NAME / ST_TYPE / CITY / ZIP. Verified 2026-06-20: 159,174 parcels; UPPER(CAMA_OWNER_CUR) LIKE '%SMITH%' returns real owners with Haymarket/Manassas-area addresses and ZIPs. IMPORTANT: this entry covers Prince William COUNTY only. The independent cities of Manassas (FIPS 51683) and Manassas Park (FIPS 51685) sit within the county's geographic bounds but are separate Census FIPS jurisdictions, governed and assessed independently. For authoritative assessment records use the PWC Real Estate Assessments office. LIVENESS 2026-08-04: answers a home-network probe in ~2.6s with 10 correct parcel rows, but exceeds even the raised 15s host budget from the Vercel probe region on 112 consecutive checks. That pattern reads as datacenter-IP throttling rather than a slow server, so raising the budget further would risk the 60s shard ceiling for no gain. Stays honestly degraded."
7306
7311
  }
7307
7312
  ]
7308
7313
  };
@@ -7497,7 +7502,7 @@ var west_virginia_default = {
7497
7502
  stateSlug: "west-virginia",
7498
7503
  stateName: "West Virginia",
7499
7504
  stateAbbrev: "WV",
7500
- lastUpdated: "2026-06-20",
7505
+ lastUpdated: "2026-08-04",
7501
7506
  counties: [
7502
7507
  {
7503
7508
  id: "wv-kanawha",
@@ -7523,8 +7528,7 @@ var west_virginia_default = {
7523
7528
  { name: "FullOwnerAddress", label: "Owner Mailing Address", searchable: false },
7524
7529
  { name: "FullLegalDescription", label: "Legal Description", searchable: false },
7525
7530
  { name: "CountyID", label: "County ID string ('20' = Kanawha)", searchable: false },
7526
- { name: "GISPID", label: "GIS Parcel ID", searchable: false },
7527
- { name: "Acres_C", label: "Calculated Acres", searchable: false }
7531
+ { name: "GISPID", label: "GIS Parcel ID", searchable: false }
7528
7532
  ],
7529
7533
  sampleQuery: "https://services.wvgis.wvu.edu/arcgis/rest/services/Planning_Cadastre/WV_Parcels/MapServer/0/query?where=CountyID%3D'20'+AND+UPPER(FullOwnerName)+LIKE+UPPER('%25SMITH%25')&outFields=CleanParcelID,FullOwnerName,FullPhysicalAddress,FullOwnerAddress,CountyID&returnGeometry=false&f=json&resultRecordCount=10",
7530
7534
  license: "public",
@@ -7565,8 +7569,7 @@ var west_virginia_default = {
7565
7569
  { name: "FullOwnerAddress", label: "Owner Mailing Address", searchable: false },
7566
7570
  { name: "FullLegalDescription", label: "Legal Description", searchable: false },
7567
7571
  { name: "CountyID", label: "County ID string ('31' = Monongalia)", searchable: false },
7568
- { name: "GISPID", label: "GIS Parcel ID", searchable: false },
7569
- { name: "Acres_C", label: "Calculated Acres", searchable: false }
7572
+ { name: "GISPID", label: "GIS Parcel ID", searchable: false }
7570
7573
  ],
7571
7574
  sampleQuery: "https://services.wvgis.wvu.edu/arcgis/rest/services/Planning_Cadastre/WV_Parcels/MapServer/0/query?where=CountyID%3D'31'+AND+UPPER(FullOwnerName)+LIKE+UPPER('%25SMITH%25')&outFields=CleanParcelID,FullOwnerName,FullPhysicalAddress,FullOwnerAddress,CountyID&returnGeometry=false&f=json&resultRecordCount=10",
7572
7575
  license: "public",
@@ -7607,8 +7610,7 @@ var west_virginia_default = {
7607
7610
  { name: "FullOwnerAddress", label: "Owner Mailing Address", searchable: false },
7608
7611
  { name: "FullLegalDescription", label: "Legal Description", searchable: false },
7609
7612
  { name: "CountyID", label: "County ID string ('40' = Raleigh)", searchable: false },
7610
- { name: "GISPID", label: "GIS Parcel ID", searchable: false },
7611
- { name: "Acres_C", label: "Calculated Acres", searchable: false }
7613
+ { name: "GISPID", label: "GIS Parcel ID", searchable: false }
7612
7614
  ],
7613
7615
  sampleQuery: "https://services.wvgis.wvu.edu/arcgis/rest/services/Planning_Cadastre/WV_Parcels/MapServer/0/query?where=CountyID%3D'40'+AND+UPPER(FullOwnerName)+LIKE+UPPER('%25SMITH%25')&outFields=CleanParcelID,FullOwnerName,FullPhysicalAddress,FullOwnerAddress,CountyID&returnGeometry=false&f=json&resultRecordCount=10",
7614
7616
  license: "public",
@@ -7649,8 +7651,7 @@ var west_virginia_default = {
7649
7651
  { name: "FullOwnerAddress", label: "Owner Mailing Address", searchable: false },
7650
7652
  { name: "FullLegalDescription", label: "Legal Description", searchable: false },
7651
7653
  { name: "CountyID", label: "County ID string ('06' = Cabell)", searchable: false },
7652
- { name: "GISPID", label: "GIS Parcel ID", searchable: false },
7653
- { name: "Acres_C", label: "Calculated Acres", searchable: false }
7654
+ { name: "GISPID", label: "GIS Parcel ID", searchable: false }
7654
7655
  ],
7655
7656
  sampleQuery: "https://services.wvgis.wvu.edu/arcgis/rest/services/Planning_Cadastre/WV_Parcels/MapServer/0/query?where=CountyID%3D'06'+AND+UPPER(FullOwnerName)+LIKE+UPPER('%25SMITH%25')&outFields=CleanParcelID,FullOwnerName,FullPhysicalAddress,FullOwnerAddress,CountyID&returnGeometry=false&f=json&resultRecordCount=10",
7656
7657
  license: "public",
@@ -8227,6 +8228,7 @@ function countyPath(stateSlug, countySlug) {
8227
8228
  return `/parcel-atlas/${stateSlug}/${countySlug}`;
8228
8229
  }
8229
8230
 
8231
+ exports.LIVE_STATUS_URL = LIVE_STATUS_URL;
8230
8232
  exports.atlas = atlas;
8231
8233
  exports.atlasIndex = atlasIndex;
8232
8234
  exports.buildParcelLookupDeepLink = buildParcelLookupDeepLink;
package/dist/index.d.cts CHANGED
@@ -1,7 +1,29 @@
1
1
  type ServiceType = "FeatureServer" | "MapServer";
2
2
  type LicenseType = "public" | "open-data" | "restricted" | "unknown";
3
+ /**
4
+ * The registry's curation stamp for an endpoint, AS OF THE MOMENT THIS PACKAGE
5
+ * WAS PUBLISHED. It is not a live signal and cannot be — this package ships
6
+ * static JSON and makes no network calls.
7
+ *
8
+ * So `"live"` here means "a check passed before publish", not "this endpoint is
9
+ * up right now". A county can go down the day after a release and every
10
+ * installed copy will keep reporting `"live"` until the next one.
11
+ *
12
+ * For the current answer, query the public health endpoint, which reports what
13
+ * the liveness probe last observed (every two hours) and requires no API key:
14
+ *
15
+ * GET https://urbankitstudio.com/api/atlas/status?fips=17089
16
+ *
17
+ * A `found: false` there means no observation exists — which is not the same as
18
+ * healthy. See LIVE_STATUS_URL below.
19
+ */
3
20
  type EndpointStatus = "live" | "stale" | "unreachable" | "unverified";
4
21
  type VerifiedBy = "manual" | "arcgis-hub-seed" | "automated";
22
+ /**
23
+ * Where to ask whether an endpoint is actually up right now. Keyless.
24
+ * Omit the query string for every tracked county.
25
+ */
26
+ declare const LIVE_STATUS_URL = "https://urbankitstudio.com/api/atlas/status";
5
27
  interface SearchField {
6
28
  name: string;
7
29
  label: string;
@@ -18,7 +40,10 @@ interface EndpointRecord {
18
40
  sampleQuery: string | null;
19
41
  license: LicenseType;
20
42
  licenseUrl: string | null;
43
+ /** Publish-time claim, NOT live. See {@link EndpointStatus}. */
21
44
  status: EndpointStatus;
45
+ /** ISO date this entry was last verified before publish — a human curation
46
+ * date, not a probe result, and always at least as old as this release. */
22
47
  lastVerified: string;
23
48
  verifiedBy: VerifiedBy;
24
49
  }
@@ -121,4 +146,4 @@ interface Atlas {
121
146
  }
122
147
  declare const atlas: Atlas;
123
148
 
124
- export { type Atlas, type AtlasIndex, type ContactInfo, type CountyRecord, type EndpointRecord, type EndpointStatus, type LicenseType, type SearchField, type ServiceType, type StateFile, type StateIndexEntry, type VerifiedBy, atlas, atlasIndex, buildParcelLookupDeepLink, countyPath, countySlugFromName, findCounty, findCountyByFips, findState, listCountiesByState, listStates, slugify, statePath };
149
+ export { type Atlas, type AtlasIndex, type ContactInfo, type CountyRecord, type EndpointRecord, type EndpointStatus, LIVE_STATUS_URL, type LicenseType, type SearchField, type ServiceType, type StateFile, type StateIndexEntry, type VerifiedBy, atlas, atlasIndex, buildParcelLookupDeepLink, countyPath, countySlugFromName, findCounty, findCountyByFips, findState, listCountiesByState, listStates, slugify, statePath };
package/dist/index.d.ts CHANGED
@@ -1,7 +1,29 @@
1
1
  type ServiceType = "FeatureServer" | "MapServer";
2
2
  type LicenseType = "public" | "open-data" | "restricted" | "unknown";
3
+ /**
4
+ * The registry's curation stamp for an endpoint, AS OF THE MOMENT THIS PACKAGE
5
+ * WAS PUBLISHED. It is not a live signal and cannot be — this package ships
6
+ * static JSON and makes no network calls.
7
+ *
8
+ * So `"live"` here means "a check passed before publish", not "this endpoint is
9
+ * up right now". A county can go down the day after a release and every
10
+ * installed copy will keep reporting `"live"` until the next one.
11
+ *
12
+ * For the current answer, query the public health endpoint, which reports what
13
+ * the liveness probe last observed (every two hours) and requires no API key:
14
+ *
15
+ * GET https://urbankitstudio.com/api/atlas/status?fips=17089
16
+ *
17
+ * A `found: false` there means no observation exists — which is not the same as
18
+ * healthy. See LIVE_STATUS_URL below.
19
+ */
3
20
  type EndpointStatus = "live" | "stale" | "unreachable" | "unverified";
4
21
  type VerifiedBy = "manual" | "arcgis-hub-seed" | "automated";
22
+ /**
23
+ * Where to ask whether an endpoint is actually up right now. Keyless.
24
+ * Omit the query string for every tracked county.
25
+ */
26
+ declare const LIVE_STATUS_URL = "https://urbankitstudio.com/api/atlas/status";
5
27
  interface SearchField {
6
28
  name: string;
7
29
  label: string;
@@ -18,7 +40,10 @@ interface EndpointRecord {
18
40
  sampleQuery: string | null;
19
41
  license: LicenseType;
20
42
  licenseUrl: string | null;
43
+ /** Publish-time claim, NOT live. See {@link EndpointStatus}. */
21
44
  status: EndpointStatus;
45
+ /** ISO date this entry was last verified before publish — a human curation
46
+ * date, not a probe result, and always at least as old as this release. */
22
47
  lastVerified: string;
23
48
  verifiedBy: VerifiedBy;
24
49
  }
@@ -121,4 +146,4 @@ interface Atlas {
121
146
  }
122
147
  declare const atlas: Atlas;
123
148
 
124
- export { type Atlas, type AtlasIndex, type ContactInfo, type CountyRecord, type EndpointRecord, type EndpointStatus, type LicenseType, type SearchField, type ServiceType, type StateFile, type StateIndexEntry, type VerifiedBy, atlas, atlasIndex, buildParcelLookupDeepLink, countyPath, countySlugFromName, findCounty, findCountyByFips, findState, listCountiesByState, listStates, slugify, statePath };
149
+ export { type Atlas, type AtlasIndex, type ContactInfo, type CountyRecord, type EndpointRecord, type EndpointStatus, LIVE_STATUS_URL, type LicenseType, type SearchField, type ServiceType, type StateFile, type StateIndexEntry, type VerifiedBy, atlas, atlasIndex, buildParcelLookupDeepLink, countyPath, countySlugFromName, findCounty, findCountyByFips, findState, listCountiesByState, listStates, slugify, statePath };