@urbankitstudio/atlas 0.5.0 → 0.5.2

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 (56) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +110 -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 -333
  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 +46 -44
  55. package/dist/index.js +46 -44
  56. package/package.json +68 -68
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  // data/index.json
2
2
  var data_default = {
3
- version: "0.5.0",
4
- lastUpdated: "2026-06-20",
3
+ version: "0.3.0",
4
+ lastUpdated: "2026-08-04",
5
5
  totals: {
6
6
  states: 50,
7
7
  counties: 155,
@@ -583,6 +583,7 @@ var arizona_default = {
583
583
  stateSlug: "arizona",
584
584
  county: "Maricopa",
585
585
  countySlug: "maricopa-county",
586
+ relatedPropertyCitySlug: "phoenix",
586
587
  countyFips: "04013",
587
588
  hasPublicRest: true,
588
589
  endpoints: [
@@ -2137,6 +2138,7 @@ var georgia_default = {
2137
2138
  stateSlug: "georgia",
2138
2139
  county: "Fulton",
2139
2140
  countySlug: "fulton-county",
2141
+ relatedPropertyCitySlug: "atlanta",
2140
2142
  countyFips: "13121",
2141
2143
  hasPublicRest: true,
2142
2144
  endpoints: [
@@ -2635,7 +2637,11 @@ var illinois_default = {
2635
2637
  url: "https://willcounty.gov/County-Offices/Administration/GIS-Division",
2636
2638
  email: "gis@willcounty.gov"
2637
2639
  },
2638
- notes: "NOTE 2026-06-27: Parcels_21/MapServer became a zombie service (service listed but layers:[]. All layer queries return HTTP 500 'json' error). Parcels_20/MapServer/0 is the active fallback (prior-year snapshot, 276,644 parcels confirmed live). No Parcels_22 or newer service exists on the server as of 2026-06-27. URL updated from Parcels_21 to Parcels_20. Owner-name and address fields are NOT exposed in this public endpoint, only PIN and subtype metadata (Base Parcel, Condo, Leasehold, Mineral Rights, etc.). Owner/address data exists in the county's Geocortex viewer at gisapp.willcountyillinois.com but is not queryable via REST without a token. The ParcelFabric folder on the same server is token-gated. FIPS 17197 (Joliet / Chicago south suburbs). Contact GIS Division at gis@willcounty.gov for endpoint status updates."
2640
+ notes: "NOTE 2026-06-27: Parcels_21/MapServer became a zombie service (service listed but layers:[]. All layer queries return HTTP 500 'json' error). Parcels_20/MapServer/0 is the active fallback (prior-year snapshot, 276,644 parcels confirmed live). No Parcels_22 or newer service exists on the server as of 2026-06-27. URL updated from Parcels_21 to Parcels_20. Owner-name and address fields are NOT exposed in this public endpoint, only PIN and subtype metadata (Base Parcel, Condo, Leasehold, Mineral Rights, etc.). Owner/address data exists in the county's Geocortex viewer at gisapp.willcountyillinois.com but is not queryable via REST without a token. The ParcelFabric folder on the same server is token-gated. FIPS 17197 (Joliet / Chicago south suburbs). Contact GIS Division at gis@willcounty.gov for endpoint status updates.",
2641
+ ownerFieldNote: {
2642
+ body: "Will County's public parcel REST layer exposes only the Parcel Identification Number (PIN), no owner-name or address field. Search by PIN below, or look up the owner of record at the Will County Supervisor of Assessments.",
2643
+ source: { label: "Property search at willcountysoa.com", url: "https://www.willcountysoa.com/PropertySearchPortal" }
2644
+ }
2639
2645
  },
2640
2646
  {
2641
2647
  id: "il-mchenry",
@@ -3072,7 +3078,7 @@ var louisiana_default = {
3072
3078
  stateSlug: "louisiana",
3073
3079
  stateName: "Louisiana",
3074
3080
  stateAbbrev: "LA",
3075
- lastUpdated: "2026-05-15",
3081
+ lastUpdated: "2026-08-04",
3076
3082
  counties: [
3077
3083
  {
3078
3084
  id: "la-east-baton-rouge-parish",
@@ -3166,7 +3172,7 @@ var louisiana_default = {
3166
3172
  url: "https://gis.nola.gov/",
3167
3173
  email: null
3168
3174
  },
3169
- 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."
3175
+ 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."
3170
3176
  }
3171
3177
  ]
3172
3178
  };
@@ -3883,7 +3889,7 @@ var montana_default = {
3883
3889
  stateSlug: "montana",
3884
3890
  stateName: "Montana",
3885
3891
  stateAbbrev: "MT",
3886
- lastUpdated: "2026-06-20",
3892
+ lastUpdated: "2026-08-04",
3887
3893
  counties: [
3888
3894
  {
3889
3895
  id: "mt-yellowstone",
@@ -3896,10 +3902,10 @@ var montana_default = {
3896
3902
  hasPublicRest: true,
3897
3903
  endpoints: [
3898
3904
  {
3899
- url: "https://gisservicemt.gov/arcgis/rest/services/MSDI_Framework/Parcels/MapServer/0",
3905
+ url: "https://gisservice.mt.gov/arcgis/rest/services/msdi_cadastral_map_v1/MapServer/1",
3900
3906
  serviceType: "MapServer",
3901
- layerIndex: 0,
3902
- layerName: "Parcels",
3907
+ layerIndex: 1,
3908
+ layerName: "Montana Parcels",
3903
3909
  supportsQuery: true,
3904
3910
  corsEnabled: null,
3905
3911
  searchFields: [
@@ -3917,9 +3923,9 @@ var montana_default = {
3917
3923
  { name: "TotalValue", label: "Total Assessed Value", searchable: false },
3918
3924
  { name: "TaxYear", label: "Tax Year", searchable: false }
3919
3925
  ],
3920
- 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",
3926
+ 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",
3921
3927
  license: "public",
3922
- licenseUrl: "https://gisservicemt.gov/",
3928
+ licenseUrl: "https://gisservice.mt.gov/",
3923
3929
  status: "live",
3924
3930
  lastVerified: "2026-06-20",
3925
3931
  verifiedBy: "automated"
@@ -3943,10 +3949,10 @@ var montana_default = {
3943
3949
  hasPublicRest: true,
3944
3950
  endpoints: [
3945
3951
  {
3946
- url: "https://gisservicemt.gov/arcgis/rest/services/MSDI_Framework/Parcels/MapServer/0",
3952
+ url: "https://gisservice.mt.gov/arcgis/rest/services/msdi_cadastral_map_v1/MapServer/1",
3947
3953
  serviceType: "MapServer",
3948
- layerIndex: 0,
3949
- layerName: "Parcels",
3954
+ layerIndex: 1,
3955
+ layerName: "Montana Parcels",
3950
3956
  supportsQuery: true,
3951
3957
  corsEnabled: null,
3952
3958
  searchFields: [
@@ -3964,9 +3970,9 @@ var montana_default = {
3964
3970
  { name: "TotalValue", label: "Total Assessed Value", searchable: false },
3965
3971
  { name: "TaxYear", label: "Tax Year", searchable: false }
3966
3972
  ],
3967
- 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",
3973
+ 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",
3968
3974
  license: "public",
3969
- licenseUrl: "https://gisservicemt.gov/",
3975
+ licenseUrl: "https://gisservice.mt.gov/",
3970
3976
  status: "live",
3971
3977
  lastVerified: "2026-06-20",
3972
3978
  verifiedBy: "automated"
@@ -3990,10 +3996,10 @@ var montana_default = {
3990
3996
  hasPublicRest: true,
3991
3997
  endpoints: [
3992
3998
  {
3993
- url: "https://gisservicemt.gov/arcgis/rest/services/MSDI_Framework/Parcels/MapServer/0",
3999
+ url: "https://gisservice.mt.gov/arcgis/rest/services/msdi_cadastral_map_v1/MapServer/1",
3994
4000
  serviceType: "MapServer",
3995
- layerIndex: 0,
3996
- layerName: "Parcels",
4001
+ layerIndex: 1,
4002
+ layerName: "Montana Parcels",
3997
4003
  supportsQuery: true,
3998
4004
  corsEnabled: null,
3999
4005
  searchFields: [
@@ -4011,9 +4017,9 @@ var montana_default = {
4011
4017
  { name: "TotalValue", label: "Total Assessed Value", searchable: false },
4012
4018
  { name: "TaxYear", label: "Tax Year", searchable: false }
4013
4019
  ],
4014
- 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",
4020
+ 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",
4015
4021
  license: "public",
4016
- licenseUrl: "https://gisservicemt.gov/",
4022
+ licenseUrl: "https://gisservice.mt.gov/",
4017
4023
  status: "live",
4018
4024
  lastVerified: "2026-06-20",
4019
4025
  verifiedBy: "automated"
@@ -4037,10 +4043,10 @@ var montana_default = {
4037
4043
  hasPublicRest: true,
4038
4044
  endpoints: [
4039
4045
  {
4040
- url: "https://gisservicemt.gov/arcgis/rest/services/MSDI_Framework/Parcels/MapServer/0",
4046
+ url: "https://gisservice.mt.gov/arcgis/rest/services/msdi_cadastral_map_v1/MapServer/1",
4041
4047
  serviceType: "MapServer",
4042
- layerIndex: 0,
4043
- layerName: "Parcels",
4048
+ layerIndex: 1,
4049
+ layerName: "Montana Parcels",
4044
4050
  supportsQuery: true,
4045
4051
  corsEnabled: null,
4046
4052
  searchFields: [
@@ -4058,9 +4064,9 @@ var montana_default = {
4058
4064
  { name: "TotalValue", label: "Total Assessed Value", searchable: false },
4059
4065
  { name: "TaxYear", label: "Tax Year", searchable: false }
4060
4066
  ],
4061
- 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",
4067
+ 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",
4062
4068
  license: "public",
4063
- licenseUrl: "https://gisservicemt.gov/",
4069
+ licenseUrl: "https://gisservice.mt.gov/",
4064
4070
  status: "live",
4065
4071
  lastVerified: "2026-06-20",
4066
4072
  verifiedBy: "automated"
@@ -6314,7 +6320,7 @@ var south_dakota_default = {
6314
6320
  stateSlug: "south-dakota",
6315
6321
  stateName: "South Dakota",
6316
6322
  stateAbbrev: "SD",
6317
- lastUpdated: "2026-06-20",
6323
+ lastUpdated: "2026-08-04",
6318
6324
  counties: [
6319
6325
  {
6320
6326
  id: "sd-minnehaha",
@@ -6327,7 +6333,7 @@ var south_dakota_default = {
6327
6333
  hasPublicRest: true,
6328
6334
  endpoints: [
6329
6335
  {
6330
- url: "https://gis.minnehahacounty.org/minnemap/rest/services/Parcels/MapServer/0",
6336
+ url: "https://gis.minnehahacounty.gov/minnemap/rest/services/Parcels/MapServer/0",
6331
6337
  serviceType: "MapServer",
6332
6338
  layerIndex: 0,
6333
6339
  layerName: "Parcels",
@@ -6351,9 +6357,9 @@ var south_dakota_default = {
6351
6357
  { name: "TRACT", label: "Tract", searchable: false },
6352
6358
  { name: "SUBDIVISION", label: "Subdivision", searchable: false }
6353
6359
  ],
6354
- 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",
6360
+ 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",
6355
6361
  license: "public",
6356
- licenseUrl: "https://gis.minnehahacounty.org/",
6362
+ licenseUrl: "https://gis.minnehahacounty.gov/",
6357
6363
  status: "live",
6358
6364
  lastVerified: "2026-06-20",
6359
6365
  verifiedBy: "automated"
@@ -6364,7 +6370,7 @@ var south_dakota_default = {
6364
6370
  url: "https://www.minnehahacounty.org/dept/eq/eq.php",
6365
6371
  email: null
6366
6372
  },
6367
- 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."
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.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."
6368
6374
  }
6369
6375
  ]
6370
6376
  };
@@ -6477,7 +6483,7 @@ var tennessee_default = {
6477
6483
  url: "https://www.shelbycountytn.gov/467/REGIS-Regional-GIS",
6478
6484
  email: null
6479
6485
  },
6480
- 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."
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). 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."
6481
6487
  },
6482
6488
  {
6483
6489
  id: "tn-hamilton",
@@ -7216,7 +7222,7 @@ var virginia_default = {
7216
7222
  stateSlug: "virginia",
7217
7223
  stateName: "Virginia",
7218
7224
  stateAbbrev: "VA",
7219
- lastUpdated: "2026-06-20",
7225
+ lastUpdated: "2026-08-04",
7220
7226
  counties: [
7221
7227
  {
7222
7228
  id: "va-fairfax",
@@ -7296,7 +7302,7 @@ var virginia_default = {
7296
7302
  url: "https://www.pwcva.gov/department/geographic-information-systems-gis",
7297
7303
  email: null
7298
7304
  },
7299
- 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."
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. 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."
7300
7306
  }
7301
7307
  ]
7302
7308
  };
@@ -7343,7 +7349,7 @@ var washington_default = {
7343
7349
  url: "https://kingcounty.gov/services/gis.aspx",
7344
7350
  email: null
7345
7351
  },
7346
- notes: "King County, Washington (Seattle metro, pop. 2.3M, county seat Seattle) is the most populous Washington county, containing Seattle, Bellevue, Redmond, Renton, and Kent. The KingCo_Parcels MapServer layer publishes parcel polygons with three identifier fields: PIN (10-digit Parcel Identification Number), MAJOR (first 6 digits of PIN, identifying the parcel block), and MINOR (last 4 digits, the parcel within the block). No owner name, situs address, or assessment values are on this public REST layer. Washington State law broadly restricts owner-name exposure on public REST endpoints; King County follows this consistently. Confirmed live 2026-06-06 -- 638,577 parcels, PIN-searchable. For ownership lookups, use the King County Assessor's eReal Property portal at info.kingcounty.gov/assessor/emap/ (search by address, PIN, or complex name). The interactive Parcel Viewer is at gismaps.kingcounty.gov/parcelviewer2/. Bulk GIS downloads: kingcounty.gov/services/gis/GISData.aspx.",
7352
+ notes: "King County, Washington (Seattle metro, pop. 2.3M, county seat Seattle) is the most populous Washington county, containing Seattle, Bellevue, Redmond, Renton, and Kent. The KingCo_Parcels MapServer layer publishes parcel polygons with three identifier fields: PIN (10-digit Parcel Identification Number), MAJOR (first 6 digits of PIN, identifying the parcel block), and MINOR (last 4 digits, the parcel within the block). No owner name, situs address, or assessment values are on this public REST layer. Washington State law broadly restricts owner-name exposure on public REST endpoints; King County follows this consistently. Confirmed live 2026-06-06 -- 638,577 parcels, PIN-searchable. For ownership lookups, use the King County Assessor's eReal Property portal at info.kingcounty.gov/assessor/emap/ (search by address, PIN, or complex name). The interactive Parcel Viewer is at gismaps.kingcounty.gov/parcelviewer2/. Bulk GIS downloads: kingcounty.gov/services/gis/GISData.aspx.\n\nKing County's open-data portal at data.kingcounty.gov runs on Socrata and does not carry a live, address-searchable parcel master table. The id tise-fzs9 surfaces in King County parcel searches; it identifies a Metro vanpool-ridership dataset, not parcels. Two Socrata tables carry the same PIN format used above and stay current: Property Legal Descriptions (id 4854-i48r, filter by parcel_number, https://data.kingcounty.gov/resource/4854-i48r.csv) and Real Property Tax Receivables (id dkna-i698, filter by account_number, https://data.kingcounty.gov/resource/dkna-i698.csv). Resolve an address to a PIN with eReal Property or Parcel Viewer above, then query either table with that PIN as the filter value. Parcel 0000200001, the same PIN in the ArcGIS sample query, returns its legal description at https://data.kingcounty.gov/resource/4854-i48r.csv?parcel_number=0000200001.",
7347
7353
  relatedPropertyCitySlug: "seattle"
7348
7354
  },
7349
7355
  {
@@ -7491,7 +7497,7 @@ var west_virginia_default = {
7491
7497
  stateSlug: "west-virginia",
7492
7498
  stateName: "West Virginia",
7493
7499
  stateAbbrev: "WV",
7494
- lastUpdated: "2026-06-20",
7500
+ lastUpdated: "2026-08-04",
7495
7501
  counties: [
7496
7502
  {
7497
7503
  id: "wv-kanawha",
@@ -7517,8 +7523,7 @@ var west_virginia_default = {
7517
7523
  { name: "FullOwnerAddress", label: "Owner Mailing Address", searchable: false },
7518
7524
  { name: "FullLegalDescription", label: "Legal Description", searchable: false },
7519
7525
  { name: "CountyID", label: "County ID string ('20' = Kanawha)", searchable: false },
7520
- { name: "GISPID", label: "GIS Parcel ID", searchable: false },
7521
- { name: "Acres_C", label: "Calculated Acres", searchable: false }
7526
+ { name: "GISPID", label: "GIS Parcel ID", searchable: false }
7522
7527
  ],
7523
7528
  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",
7524
7529
  license: "public",
@@ -7559,8 +7564,7 @@ var west_virginia_default = {
7559
7564
  { name: "FullOwnerAddress", label: "Owner Mailing Address", searchable: false },
7560
7565
  { name: "FullLegalDescription", label: "Legal Description", searchable: false },
7561
7566
  { name: "CountyID", label: "County ID string ('31' = Monongalia)", searchable: false },
7562
- { name: "GISPID", label: "GIS Parcel ID", searchable: false },
7563
- { name: "Acres_C", label: "Calculated Acres", searchable: false }
7567
+ { name: "GISPID", label: "GIS Parcel ID", searchable: false }
7564
7568
  ],
7565
7569
  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",
7566
7570
  license: "public",
@@ -7601,8 +7605,7 @@ var west_virginia_default = {
7601
7605
  { name: "FullOwnerAddress", label: "Owner Mailing Address", searchable: false },
7602
7606
  { name: "FullLegalDescription", label: "Legal Description", searchable: false },
7603
7607
  { name: "CountyID", label: "County ID string ('40' = Raleigh)", searchable: false },
7604
- { name: "GISPID", label: "GIS Parcel ID", searchable: false },
7605
- { name: "Acres_C", label: "Calculated Acres", searchable: false }
7608
+ { name: "GISPID", label: "GIS Parcel ID", searchable: false }
7606
7609
  ],
7607
7610
  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",
7608
7611
  license: "public",
@@ -7643,8 +7646,7 @@ var west_virginia_default = {
7643
7646
  { name: "FullOwnerAddress", label: "Owner Mailing Address", searchable: false },
7644
7647
  { name: "FullLegalDescription", label: "Legal Description", searchable: false },
7645
7648
  { name: "CountyID", label: "County ID string ('06' = Cabell)", searchable: false },
7646
- { name: "GISPID", label: "GIS Parcel ID", searchable: false },
7647
- { name: "Acres_C", label: "Calculated Acres", searchable: false }
7649
+ { name: "GISPID", label: "GIS Parcel ID", searchable: false }
7648
7650
  ],
7649
7651
  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",
7650
7652
  license: "public",
package/package.json CHANGED
@@ -1,68 +1,68 @@
1
- {
2
- "name": "@urbankitstudio/atlas",
3
- "version": "0.5.0",
4
- "description": "JS SDK for the UrbanKit County Parcel REST API Atlas — public ArcGIS REST endpoints for US county parcel data, with searchable field metadata, sample queries, and license info.",
5
- "keywords": [
6
- "parcel",
7
- "arcgis",
8
- "gis",
9
- "county",
10
- "assessor",
11
- "rest",
12
- "api",
13
- "geojson",
14
- "featureserver",
15
- "mapserver"
16
- ],
17
- "homepage": "https://urbankitstudio.com/parcel-atlas",
18
- "repository": {
19
- "type": "git",
20
- "url": "git+https://github.com/LEOyrh/urbankitstudio.git",
21
- "directory": "packages/atlas"
22
- },
23
- "bugs": {
24
- "url": "https://github.com/LEOyrh/urbankitstudio/issues"
25
- },
26
- "author": "Leo Yong <leoyrhbiz@gmail.com>",
27
- "license": "MIT",
28
- "type": "module",
29
- "main": "./dist/index.cjs",
30
- "module": "./dist/index.js",
31
- "types": "./dist/index.d.ts",
32
- "exports": {
33
- ".": {
34
- "import": {
35
- "types": "./dist/index.d.ts",
36
- "default": "./dist/index.js"
37
- },
38
- "require": {
39
- "types": "./dist/index.d.cts",
40
- "default": "./dist/index.cjs"
41
- }
42
- }
43
- },
44
- "files": [
45
- "dist",
46
- "data",
47
- "README.md",
48
- "LICENSE"
49
- ],
50
- "sideEffects": false,
51
- "scripts": {
52
- "build": "tsup",
53
- "typecheck": "tsc --noEmit",
54
- "test": "vitest run",
55
- "prepublishOnly": "npm run typecheck && npm run test && npm run build"
56
- },
57
- "devDependencies": {
58
- "tsup": "^8.3.5",
59
- "typescript": "^5.8.3",
60
- "vitest": "^2.1.8"
61
- },
62
- "publishConfig": {
63
- "access": "public"
64
- },
65
- "engines": {
66
- "node": ">=18"
67
- }
68
- }
1
+ {
2
+ "name": "@urbankitstudio/atlas",
3
+ "version": "0.5.2",
4
+ "description": "JS SDK for the UrbanKit County Parcel REST API Atlas — public ArcGIS REST endpoints for US county parcel data, with searchable field metadata, sample queries, and license info.",
5
+ "keywords": [
6
+ "parcel",
7
+ "arcgis",
8
+ "gis",
9
+ "county",
10
+ "assessor",
11
+ "rest",
12
+ "api",
13
+ "geojson",
14
+ "featureserver",
15
+ "mapserver"
16
+ ],
17
+ "homepage": "https://urbankitstudio.com/parcel-atlas",
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "git+https://github.com/LEOyrh/urbankitstudio.git",
21
+ "directory": "packages/atlas"
22
+ },
23
+ "bugs": {
24
+ "url": "https://github.com/LEOyrh/urbankitstudio/issues"
25
+ },
26
+ "author": "Leo Yong <leoyrhbiz@gmail.com>",
27
+ "license": "MIT",
28
+ "type": "module",
29
+ "main": "./dist/index.cjs",
30
+ "module": "./dist/index.js",
31
+ "types": "./dist/index.d.ts",
32
+ "exports": {
33
+ ".": {
34
+ "import": {
35
+ "types": "./dist/index.d.ts",
36
+ "default": "./dist/index.js"
37
+ },
38
+ "require": {
39
+ "types": "./dist/index.d.cts",
40
+ "default": "./dist/index.cjs"
41
+ }
42
+ }
43
+ },
44
+ "files": [
45
+ "dist",
46
+ "data",
47
+ "README.md",
48
+ "LICENSE"
49
+ ],
50
+ "sideEffects": false,
51
+ "scripts": {
52
+ "build": "tsup",
53
+ "typecheck": "tsc --noEmit",
54
+ "test": "vitest run",
55
+ "prepublishOnly": "npm run typecheck && npm run test && npm run build"
56
+ },
57
+ "devDependencies": {
58
+ "tsup": "^8.3.5",
59
+ "typescript": "^5.8.3",
60
+ "vitest": "^2.1.8"
61
+ },
62
+ "publishConfig": {
63
+ "access": "public"
64
+ },
65
+ "engines": {
66
+ "node": ">=18"
67
+ }
68
+ }