@soilsidekick/sdk 1.2.0 → 2.0.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 (503) hide show
  1. package/package.json +5 -17
  2. package/sdks/README.md +254 -0
  3. package/sdks/__tests__/devices.test.ts +87 -0
  4. package/sdks/client.ts +198 -0
  5. package/sdks/dist/client.d.ts +94 -0
  6. package/sdks/dist/client.js +174 -0
  7. package/sdks/dist/index.d.ts +12 -0
  8. package/sdks/dist/index.js +39 -0
  9. package/sdks/dist/sensors/alerts.d.ts +45 -0
  10. package/sdks/dist/sensors/alerts.js +129 -0
  11. package/sdks/dist/sensors/devices.d.ts +65 -0
  12. package/sdks/dist/sensors/devices.js +123 -0
  13. package/sdks/dist/sensors/index.d.ts +4 -0
  14. package/sdks/dist/sensors/index.js +11 -0
  15. package/sdks/dist/sensors/mqtt.d.ts +55 -0
  16. package/sdks/dist/sensors/mqtt.js +179 -0
  17. package/sdks/dist/sensors/readings.d.ts +81 -0
  18. package/sdks/dist/sensors/readings.js +205 -0
  19. package/sdks/dist/test-sdk.d.ts +406 -0
  20. package/sdks/dist/test-sdk.js +366 -0
  21. package/sdks/dist/types.d.ts +162 -0
  22. package/sdks/dist/types.js +7 -0
  23. package/sdks/generate-sdk.sh +169 -0
  24. package/sdks/generated/.gitkeep +5 -0
  25. package/sdks/index.ts +25 -0
  26. package/sdks/jest.config.js +19 -0
  27. package/sdks/openapitools.json +73 -0
  28. package/sdks/package-lock.json +4306 -0
  29. package/sdks/package.json +53 -0
  30. package/sdks/sensors/alerts.ts +153 -0
  31. package/sdks/sensors/devices.ts +147 -0
  32. package/sdks/sensors/index.ts +4 -0
  33. package/sdks/sensors/mqtt.ts +211 -0
  34. package/sdks/sensors/readings.ts +241 -0
  35. package/sdks/test-sdk.ts +432 -0
  36. package/sdks/tsconfig.json +25 -0
  37. package/sdks/types.ts +222 -0
  38. package/soilsidekick-sdk-v2.zip +0 -0
  39. package/.openapi-generator/FILES +0 -156
  40. package/.openapi-generator/VERSION +0 -1
  41. package/.openapi-generator-ignore +0 -23
  42. package/README.md +0 -201
  43. package/dist/apis/AIServicesApi.d.ts +0 -70
  44. package/dist/apis/AIServicesApi.js +0 -177
  45. package/dist/apis/CarbonApi.d.ts +0 -31
  46. package/dist/apis/CarbonApi.js +0 -69
  47. package/dist/apis/EnvironmentalApi.d.ts +0 -31
  48. package/dist/apis/EnvironmentalApi.js +0 -69
  49. package/dist/apis/GeographicApi.d.ts +0 -31
  50. package/dist/apis/GeographicApi.js +0 -69
  51. package/dist/apis/LeafEnginesApi.d.ts +0 -31
  52. package/dist/apis/LeafEnginesApi.js +0 -69
  53. package/dist/apis/SatelliteDataApi.d.ts +0 -31
  54. package/dist/apis/SatelliteDataApi.js +0 -69
  55. package/dist/apis/SoilAnalysisApi.d.ts +0 -57
  56. package/dist/apis/SoilAnalysisApi.js +0 -141
  57. package/dist/apis/VRTApi.d.ts +0 -31
  58. package/dist/apis/VRTApi.js +0 -69
  59. package/dist/apis/WaterQualityApi.d.ts +0 -44
  60. package/dist/apis/WaterQualityApi.js +0 -105
  61. package/dist/apis/index.d.ts +0 -9
  62. package/dist/apis/index.js +0 -27
  63. package/dist/esm/apis/AIServicesApi.d.ts +0 -70
  64. package/dist/esm/apis/AIServicesApi.js +0 -173
  65. package/dist/esm/apis/CarbonApi.d.ts +0 -31
  66. package/dist/esm/apis/CarbonApi.js +0 -65
  67. package/dist/esm/apis/EnvironmentalApi.d.ts +0 -31
  68. package/dist/esm/apis/EnvironmentalApi.js +0 -65
  69. package/dist/esm/apis/GeographicApi.d.ts +0 -31
  70. package/dist/esm/apis/GeographicApi.js +0 -65
  71. package/dist/esm/apis/LeafEnginesApi.d.ts +0 -31
  72. package/dist/esm/apis/LeafEnginesApi.js +0 -65
  73. package/dist/esm/apis/SatelliteDataApi.d.ts +0 -31
  74. package/dist/esm/apis/SatelliteDataApi.js +0 -65
  75. package/dist/esm/apis/SoilAnalysisApi.d.ts +0 -57
  76. package/dist/esm/apis/SoilAnalysisApi.js +0 -137
  77. package/dist/esm/apis/VRTApi.d.ts +0 -31
  78. package/dist/esm/apis/VRTApi.js +0 -65
  79. package/dist/esm/apis/WaterQualityApi.d.ts +0 -44
  80. package/dist/esm/apis/WaterQualityApi.js +0 -101
  81. package/dist/esm/apis/index.d.ts +0 -9
  82. package/dist/esm/apis/index.js +0 -11
  83. package/dist/esm/index.d.ts +0 -3
  84. package/dist/esm/index.js +0 -5
  85. package/dist/esm/models/AIAnalysis.d.ts +0 -45
  86. package/dist/esm/models/AIAnalysis.js +0 -46
  87. package/dist/esm/models/AIAnalysisRecommendationsInner.d.ts +0 -53
  88. package/dist/esm/models/AIAnalysisRecommendationsInner.js +0 -53
  89. package/dist/esm/models/CalculateCarbonCreditsRequest.d.ts +0 -65
  90. package/dist/esm/models/CalculateCarbonCreditsRequest.js +0 -61
  91. package/dist/esm/models/CalculateEnvironmentalImpactRequest.d.ts +0 -59
  92. package/dist/esm/models/CalculateEnvironmentalImpactRequest.js +0 -58
  93. package/dist/esm/models/CalculateEnvironmentalImpactRequestProposedTreatmentsInner.d.ts +0 -41
  94. package/dist/esm/models/CalculateEnvironmentalImpactRequestProposedTreatmentsInner.js +0 -49
  95. package/dist/esm/models/CalculateEnvironmentalImpactRequestSoilData.d.ts +0 -83
  96. package/dist/esm/models/CalculateEnvironmentalImpactRequestSoilData.js +0 -70
  97. package/dist/esm/models/CalculateEnvironmentalImpactRequestWaterBodyData.d.ts +0 -32
  98. package/dist/esm/models/CalculateEnvironmentalImpactRequestWaterBodyData.js +0 -41
  99. package/dist/esm/models/CarbonCreditCalculation.d.ts +0 -46
  100. package/dist/esm/models/CarbonCreditCalculation.js +0 -47
  101. package/dist/esm/models/CarbonCreditCalculationCalculationDetails.d.ts +0 -63
  102. package/dist/esm/models/CarbonCreditCalculationCalculationDetails.js +0 -52
  103. package/dist/esm/models/CarbonCreditCalculationCalculationDetailsMetadata.d.ts +0 -44
  104. package/dist/esm/models/CarbonCreditCalculationCalculationDetailsMetadata.js +0 -45
  105. package/dist/esm/models/CarbonCreditCalculationCreditRecord.d.ts +0 -64
  106. package/dist/esm/models/CarbonCreditCalculationCreditRecord.js +0 -56
  107. package/dist/esm/models/County.d.ts +0 -56
  108. package/dist/esm/models/County.js +0 -49
  109. package/dist/esm/models/CountyLookup200Response.d.ts +0 -33
  110. package/dist/esm/models/CountyLookup200Response.js +0 -42
  111. package/dist/esm/models/CountyLookupRequest.d.ts +0 -32
  112. package/dist/esm/models/CountyLookupRequest.js +0 -43
  113. package/dist/esm/models/EnvironmentalImpact.d.ts +0 -46
  114. package/dist/esm/models/EnvironmentalImpact.js +0 -47
  115. package/dist/esm/models/EnvironmentalImpactDetailedAnalysis.d.ts +0 -58
  116. package/dist/esm/models/EnvironmentalImpactDetailedAnalysis.js +0 -51
  117. package/dist/esm/models/EnvironmentalImpactDetailedAnalysisEcoAlternatives.d.ts +0 -33
  118. package/dist/esm/models/EnvironmentalImpactDetailedAnalysisEcoAlternatives.js +0 -42
  119. package/dist/esm/models/EnvironmentalImpactDetailedAnalysisEcoAlternativesAlternativesInner.d.ts +0 -56
  120. package/dist/esm/models/EnvironmentalImpactDetailedAnalysisEcoAlternativesAlternativesInner.js +0 -49
  121. package/dist/esm/models/EnvironmentalImpactDetailedAnalysisRunoffRisk.d.ts +0 -53
  122. package/dist/esm/models/EnvironmentalImpactDetailedAnalysisRunoffRisk.js +0 -53
  123. package/dist/esm/models/EnvironmentalImpactImpactAssessment.d.ts +0 -56
  124. package/dist/esm/models/EnvironmentalImpactImpactAssessment.js +0 -49
  125. package/dist/esm/models/GenerateSmartReportSummaryRequest.d.ts +0 -46
  126. package/dist/esm/models/GenerateSmartReportSummaryRequest.js +0 -54
  127. package/dist/esm/models/GenerateVRTPrescriptionRequest.d.ts +0 -53
  128. package/dist/esm/models/GenerateVRTPrescriptionRequest.js +0 -57
  129. package/dist/esm/models/GetAgriculturalIntelligenceRequest.d.ts +0 -47
  130. package/dist/esm/models/GetAgriculturalIntelligenceRequest.js +0 -55
  131. package/dist/esm/models/GetLiveAgriculturalDataRequest.d.ts +0 -60
  132. package/dist/esm/models/GetLiveAgriculturalDataRequest.js +0 -64
  133. package/dist/esm/models/GetPlantingCalendarRequest.d.ts +0 -38
  134. package/dist/esm/models/GetPlantingCalendarRequest.js +0 -47
  135. package/dist/esm/models/GetSatelliteDataRequest.d.ts +0 -38
  136. package/dist/esm/models/GetSatelliteDataRequest.js +0 -47
  137. package/dist/esm/models/GetSeasonalPlanningAssistantRequest.d.ts +0 -67
  138. package/dist/esm/models/GetSeasonalPlanningAssistantRequest.js +0 -63
  139. package/dist/esm/models/GetSeasonalPlanningAssistantRequestLocation.d.ts +0 -44
  140. package/dist/esm/models/GetSeasonalPlanningAssistantRequestLocation.js +0 -45
  141. package/dist/esm/models/GetSoilDataRequest.d.ts +0 -32
  142. package/dist/esm/models/GetSoilDataRequest.js +0 -43
  143. package/dist/esm/models/GetTerritorialWaterAnalyticsRequest.d.ts +0 -54
  144. package/dist/esm/models/GetTerritorialWaterAnalyticsRequest.js +0 -54
  145. package/dist/esm/models/GetTerritorialWaterAnalyticsRequestDateRange.d.ts +0 -38
  146. package/dist/esm/models/GetTerritorialWaterAnalyticsRequestDateRange.js +0 -43
  147. package/dist/esm/models/GetWaterQualityRequest.d.ts +0 -32
  148. package/dist/esm/models/GetWaterQualityRequest.js +0 -43
  149. package/dist/esm/models/LeafEnginesCompatibility.d.ts +0 -46
  150. package/dist/esm/models/LeafEnginesCompatibility.js +0 -47
  151. package/dist/esm/models/LeafEnginesCompatibilityData.d.ts +0 -85
  152. package/dist/esm/models/LeafEnginesCompatibilityData.js +0 -65
  153. package/dist/esm/models/LeafEnginesCompatibilityDataBreakdown.d.ts +0 -45
  154. package/dist/esm/models/LeafEnginesCompatibilityDataBreakdown.js +0 -46
  155. package/dist/esm/models/LeafEnginesCompatibilityDataBreakdownSoil.d.ts +0 -44
  156. package/dist/esm/models/LeafEnginesCompatibilityDataBreakdownSoil.js +0 -45
  157. package/dist/esm/models/LeafEnginesCompatibilityDataMetadata.d.ts +0 -44
  158. package/dist/esm/models/LeafEnginesCompatibilityDataMetadata.js +0 -45
  159. package/dist/esm/models/LeafEnginesCompatibilityUsage.d.ts +0 -38
  160. package/dist/esm/models/LeafEnginesCompatibilityUsage.js +0 -43
  161. package/dist/esm/models/LeafenginesQueryRequest.d.ts +0 -47
  162. package/dist/esm/models/LeafenginesQueryRequest.js +0 -52
  163. package/dist/esm/models/LeafenginesQueryRequestLocation.d.ts +0 -50
  164. package/dist/esm/models/LeafenginesQueryRequestLocation.js +0 -47
  165. package/dist/esm/models/LeafenginesQueryRequestOptions.d.ts +0 -44
  166. package/dist/esm/models/LeafenginesQueryRequestOptions.js +0 -45
  167. package/dist/esm/models/LeafenginesQueryRequestPlant.d.ts +0 -51
  168. package/dist/esm/models/LeafenginesQueryRequestPlant.js +0 -48
  169. package/dist/esm/models/LeafenginesQueryRequestPlantCareRequirements.d.ts +0 -63
  170. package/dist/esm/models/LeafenginesQueryRequestPlantCareRequirements.js +0 -62
  171. package/dist/esm/models/LeafenginesQueryRequestPlantCareRequirementsSoilPhRange.d.ts +0 -38
  172. package/dist/esm/models/LeafenginesQueryRequestPlantCareRequirementsSoilPhRange.js +0 -43
  173. package/dist/esm/models/LiveAgriculturalData.d.ts +0 -77
  174. package/dist/esm/models/LiveAgriculturalData.js +0 -61
  175. package/dist/esm/models/LiveAgriculturalDataData.d.ts +0 -50
  176. package/dist/esm/models/LiveAgriculturalDataData.js +0 -47
  177. package/dist/esm/models/ModelError.d.ts +0 -44
  178. package/dist/esm/models/ModelError.js +0 -45
  179. package/dist/esm/models/PlantingCalendar.d.ts +0 -57
  180. package/dist/esm/models/PlantingCalendar.js +0 -50
  181. package/dist/esm/models/SatelliteData.d.ts +0 -56
  182. package/dist/esm/models/SatelliteData.js +0 -49
  183. package/dist/esm/models/SeasonalPlanningResponse.d.ts +0 -52
  184. package/dist/esm/models/SeasonalPlanningResponse.js +0 -49
  185. package/dist/esm/models/SeasonalPlanningResponseRecommendations.d.ts +0 -44
  186. package/dist/esm/models/SeasonalPlanningResponseRecommendations.js +0 -45
  187. package/dist/esm/models/SeasonalPlanningResponseWeatherData.d.ts +0 -62
  188. package/dist/esm/models/SeasonalPlanningResponseWeatherData.js +0 -51
  189. package/dist/esm/models/SmartReportSummary.d.ts +0 -45
  190. package/dist/esm/models/SmartReportSummary.js +0 -46
  191. package/dist/esm/models/SmartReportSummarySummary.d.ts +0 -50
  192. package/dist/esm/models/SmartReportSummarySummary.js +0 -47
  193. package/dist/esm/models/SoilData.d.ts +0 -94
  194. package/dist/esm/models/SoilData.js +0 -61
  195. package/dist/esm/models/TerritorialWaterAnalytics.d.ts +0 -45
  196. package/dist/esm/models/TerritorialWaterAnalytics.js +0 -46
  197. package/dist/esm/models/TerritorialWaterAnalyticsAnalytics.d.ts +0 -50
  198. package/dist/esm/models/TerritorialWaterAnalyticsAnalytics.js +0 -47
  199. package/dist/esm/models/VRTPrescription.d.ts +0 -51
  200. package/dist/esm/models/VRTPrescription.js +0 -48
  201. package/dist/esm/models/VRTPrescriptionZonesInner.d.ts +0 -44
  202. package/dist/esm/models/VRTPrescriptionZonesInner.js +0 -45
  203. package/dist/esm/models/VisualCropAnalysis.d.ts +0 -51
  204. package/dist/esm/models/VisualCropAnalysis.js +0 -48
  205. package/dist/esm/models/VisualCropAnalysisAnalysis.d.ts +0 -65
  206. package/dist/esm/models/VisualCropAnalysisAnalysis.js +0 -57
  207. package/dist/esm/models/VisualCropAnalysisRequest.d.ts +0 -60
  208. package/dist/esm/models/VisualCropAnalysisRequest.js +0 -60
  209. package/dist/esm/models/VisualCropAnalysisRequestLocation.d.ts +0 -44
  210. package/dist/esm/models/VisualCropAnalysisRequestLocation.js +0 -45
  211. package/dist/esm/models/WaterQuality.d.ts +0 -77
  212. package/dist/esm/models/WaterQuality.js +0 -61
  213. package/dist/esm/models/index.d.ts +0 -64
  214. package/dist/esm/models/index.js +0 -66
  215. package/dist/esm/runtime.d.ts +0 -184
  216. package/dist/esm/runtime.js +0 -334
  217. package/dist/index.d.ts +0 -3
  218. package/dist/index.js +0 -21
  219. package/dist/models/AIAnalysis.d.ts +0 -45
  220. package/dist/models/AIAnalysis.js +0 -53
  221. package/dist/models/AIAnalysisRecommendationsInner.d.ts +0 -53
  222. package/dist/models/AIAnalysisRecommendationsInner.js +0 -61
  223. package/dist/models/CalculateCarbonCreditsRequest.d.ts +0 -65
  224. package/dist/models/CalculateCarbonCreditsRequest.js +0 -69
  225. package/dist/models/CalculateEnvironmentalImpactRequest.d.ts +0 -59
  226. package/dist/models/CalculateEnvironmentalImpactRequest.js +0 -65
  227. package/dist/models/CalculateEnvironmentalImpactRequestProposedTreatmentsInner.d.ts +0 -41
  228. package/dist/models/CalculateEnvironmentalImpactRequestProposedTreatmentsInner.js +0 -57
  229. package/dist/models/CalculateEnvironmentalImpactRequestSoilData.d.ts +0 -83
  230. package/dist/models/CalculateEnvironmentalImpactRequestSoilData.js +0 -78
  231. package/dist/models/CalculateEnvironmentalImpactRequestWaterBodyData.d.ts +0 -32
  232. package/dist/models/CalculateEnvironmentalImpactRequestWaterBodyData.js +0 -48
  233. package/dist/models/CarbonCreditCalculation.d.ts +0 -46
  234. package/dist/models/CarbonCreditCalculation.js +0 -54
  235. package/dist/models/CarbonCreditCalculationCalculationDetails.d.ts +0 -63
  236. package/dist/models/CarbonCreditCalculationCalculationDetails.js +0 -59
  237. package/dist/models/CarbonCreditCalculationCalculationDetailsMetadata.d.ts +0 -44
  238. package/dist/models/CarbonCreditCalculationCalculationDetailsMetadata.js +0 -52
  239. package/dist/models/CarbonCreditCalculationCreditRecord.d.ts +0 -64
  240. package/dist/models/CarbonCreditCalculationCreditRecord.js +0 -64
  241. package/dist/models/County.d.ts +0 -56
  242. package/dist/models/County.js +0 -56
  243. package/dist/models/CountyLookup200Response.d.ts +0 -33
  244. package/dist/models/CountyLookup200Response.js +0 -49
  245. package/dist/models/CountyLookupRequest.d.ts +0 -32
  246. package/dist/models/CountyLookupRequest.js +0 -50
  247. package/dist/models/EnvironmentalImpact.d.ts +0 -46
  248. package/dist/models/EnvironmentalImpact.js +0 -54
  249. package/dist/models/EnvironmentalImpactDetailedAnalysis.d.ts +0 -58
  250. package/dist/models/EnvironmentalImpactDetailedAnalysis.js +0 -58
  251. package/dist/models/EnvironmentalImpactDetailedAnalysisEcoAlternatives.d.ts +0 -33
  252. package/dist/models/EnvironmentalImpactDetailedAnalysisEcoAlternatives.js +0 -49
  253. package/dist/models/EnvironmentalImpactDetailedAnalysisEcoAlternativesAlternativesInner.d.ts +0 -56
  254. package/dist/models/EnvironmentalImpactDetailedAnalysisEcoAlternativesAlternativesInner.js +0 -56
  255. package/dist/models/EnvironmentalImpactDetailedAnalysisRunoffRisk.d.ts +0 -53
  256. package/dist/models/EnvironmentalImpactDetailedAnalysisRunoffRisk.js +0 -61
  257. package/dist/models/EnvironmentalImpactImpactAssessment.d.ts +0 -56
  258. package/dist/models/EnvironmentalImpactImpactAssessment.js +0 -56
  259. package/dist/models/GenerateSmartReportSummaryRequest.d.ts +0 -46
  260. package/dist/models/GenerateSmartReportSummaryRequest.js +0 -62
  261. package/dist/models/GenerateVRTPrescriptionRequest.d.ts +0 -53
  262. package/dist/models/GenerateVRTPrescriptionRequest.js +0 -65
  263. package/dist/models/GetAgriculturalIntelligenceRequest.d.ts +0 -47
  264. package/dist/models/GetAgriculturalIntelligenceRequest.js +0 -63
  265. package/dist/models/GetLiveAgriculturalDataRequest.d.ts +0 -60
  266. package/dist/models/GetLiveAgriculturalDataRequest.js +0 -72
  267. package/dist/models/GetPlantingCalendarRequest.d.ts +0 -38
  268. package/dist/models/GetPlantingCalendarRequest.js +0 -54
  269. package/dist/models/GetSatelliteDataRequest.d.ts +0 -38
  270. package/dist/models/GetSatelliteDataRequest.js +0 -54
  271. package/dist/models/GetSeasonalPlanningAssistantRequest.d.ts +0 -67
  272. package/dist/models/GetSeasonalPlanningAssistantRequest.js +0 -71
  273. package/dist/models/GetSeasonalPlanningAssistantRequestLocation.d.ts +0 -44
  274. package/dist/models/GetSeasonalPlanningAssistantRequestLocation.js +0 -52
  275. package/dist/models/GetSoilDataRequest.d.ts +0 -32
  276. package/dist/models/GetSoilDataRequest.js +0 -50
  277. package/dist/models/GetTerritorialWaterAnalyticsRequest.d.ts +0 -54
  278. package/dist/models/GetTerritorialWaterAnalyticsRequest.js +0 -62
  279. package/dist/models/GetTerritorialWaterAnalyticsRequestDateRange.d.ts +0 -38
  280. package/dist/models/GetTerritorialWaterAnalyticsRequestDateRange.js +0 -50
  281. package/dist/models/GetWaterQualityRequest.d.ts +0 -32
  282. package/dist/models/GetWaterQualityRequest.js +0 -50
  283. package/dist/models/LeafEnginesCompatibility.d.ts +0 -46
  284. package/dist/models/LeafEnginesCompatibility.js +0 -54
  285. package/dist/models/LeafEnginesCompatibilityData.d.ts +0 -85
  286. package/dist/models/LeafEnginesCompatibilityData.js +0 -73
  287. package/dist/models/LeafEnginesCompatibilityDataBreakdown.d.ts +0 -45
  288. package/dist/models/LeafEnginesCompatibilityDataBreakdown.js +0 -53
  289. package/dist/models/LeafEnginesCompatibilityDataBreakdownSoil.d.ts +0 -44
  290. package/dist/models/LeafEnginesCompatibilityDataBreakdownSoil.js +0 -52
  291. package/dist/models/LeafEnginesCompatibilityDataMetadata.d.ts +0 -44
  292. package/dist/models/LeafEnginesCompatibilityDataMetadata.js +0 -52
  293. package/dist/models/LeafEnginesCompatibilityUsage.d.ts +0 -38
  294. package/dist/models/LeafEnginesCompatibilityUsage.js +0 -50
  295. package/dist/models/LeafenginesQueryRequest.d.ts +0 -47
  296. package/dist/models/LeafenginesQueryRequest.js +0 -59
  297. package/dist/models/LeafenginesQueryRequestLocation.d.ts +0 -50
  298. package/dist/models/LeafenginesQueryRequestLocation.js +0 -54
  299. package/dist/models/LeafenginesQueryRequestOptions.d.ts +0 -44
  300. package/dist/models/LeafenginesQueryRequestOptions.js +0 -52
  301. package/dist/models/LeafenginesQueryRequestPlant.d.ts +0 -51
  302. package/dist/models/LeafenginesQueryRequestPlant.js +0 -55
  303. package/dist/models/LeafenginesQueryRequestPlantCareRequirements.d.ts +0 -63
  304. package/dist/models/LeafenginesQueryRequestPlantCareRequirements.js +0 -70
  305. package/dist/models/LeafenginesQueryRequestPlantCareRequirementsSoilPhRange.d.ts +0 -38
  306. package/dist/models/LeafenginesQueryRequestPlantCareRequirementsSoilPhRange.js +0 -50
  307. package/dist/models/LiveAgriculturalData.d.ts +0 -77
  308. package/dist/models/LiveAgriculturalData.js +0 -69
  309. package/dist/models/LiveAgriculturalDataData.d.ts +0 -50
  310. package/dist/models/LiveAgriculturalDataData.js +0 -54
  311. package/dist/models/ModelError.d.ts +0 -44
  312. package/dist/models/ModelError.js +0 -52
  313. package/dist/models/PlantingCalendar.d.ts +0 -57
  314. package/dist/models/PlantingCalendar.js +0 -57
  315. package/dist/models/SatelliteData.d.ts +0 -56
  316. package/dist/models/SatelliteData.js +0 -56
  317. package/dist/models/SeasonalPlanningResponse.d.ts +0 -52
  318. package/dist/models/SeasonalPlanningResponse.js +0 -56
  319. package/dist/models/SeasonalPlanningResponseRecommendations.d.ts +0 -44
  320. package/dist/models/SeasonalPlanningResponseRecommendations.js +0 -52
  321. package/dist/models/SeasonalPlanningResponseWeatherData.d.ts +0 -62
  322. package/dist/models/SeasonalPlanningResponseWeatherData.js +0 -58
  323. package/dist/models/SmartReportSummary.d.ts +0 -45
  324. package/dist/models/SmartReportSummary.js +0 -53
  325. package/dist/models/SmartReportSummarySummary.d.ts +0 -50
  326. package/dist/models/SmartReportSummarySummary.js +0 -54
  327. package/dist/models/SoilData.d.ts +0 -94
  328. package/dist/models/SoilData.js +0 -68
  329. package/dist/models/TerritorialWaterAnalytics.d.ts +0 -45
  330. package/dist/models/TerritorialWaterAnalytics.js +0 -53
  331. package/dist/models/TerritorialWaterAnalyticsAnalytics.d.ts +0 -50
  332. package/dist/models/TerritorialWaterAnalyticsAnalytics.js +0 -54
  333. package/dist/models/VRTPrescription.d.ts +0 -51
  334. package/dist/models/VRTPrescription.js +0 -55
  335. package/dist/models/VRTPrescriptionZonesInner.d.ts +0 -44
  336. package/dist/models/VRTPrescriptionZonesInner.js +0 -52
  337. package/dist/models/VisualCropAnalysis.d.ts +0 -51
  338. package/dist/models/VisualCropAnalysis.js +0 -55
  339. package/dist/models/VisualCropAnalysisAnalysis.d.ts +0 -65
  340. package/dist/models/VisualCropAnalysisAnalysis.js +0 -65
  341. package/dist/models/VisualCropAnalysisRequest.d.ts +0 -60
  342. package/dist/models/VisualCropAnalysisRequest.js +0 -68
  343. package/dist/models/VisualCropAnalysisRequestLocation.d.ts +0 -44
  344. package/dist/models/VisualCropAnalysisRequestLocation.js +0 -52
  345. package/dist/models/WaterQuality.d.ts +0 -77
  346. package/dist/models/WaterQuality.js +0 -69
  347. package/dist/models/index.d.ts +0 -64
  348. package/dist/models/index.js +0 -82
  349. package/dist/runtime.d.ts +0 -184
  350. package/dist/runtime.js +0 -350
  351. package/docs/AIAnalysis.md +0 -38
  352. package/docs/AIAnalysisRecommendationsInner.md +0 -38
  353. package/docs/AIServicesApi.md +0 -308
  354. package/docs/CalculateCarbonCreditsRequest.md +0 -42
  355. package/docs/CalculateEnvironmentalImpactRequest.md +0 -42
  356. package/docs/CalculateEnvironmentalImpactRequestProposedTreatmentsInner.md +0 -34
  357. package/docs/CalculateEnvironmentalImpactRequestSoilData.md +0 -44
  358. package/docs/CalculateEnvironmentalImpactRequestWaterBodyData.md +0 -34
  359. package/docs/CarbonApi.md +0 -83
  360. package/docs/CarbonCreditCalculation.md +0 -38
  361. package/docs/CarbonCreditCalculationCalculationDetails.md +0 -44
  362. package/docs/CarbonCreditCalculationCalculationDetailsMetadata.md +0 -38
  363. package/docs/CarbonCreditCalculationCreditRecord.md +0 -42
  364. package/docs/County.md +0 -42
  365. package/docs/CountyLookup200Response.md +0 -34
  366. package/docs/CountyLookupRequest.md +0 -34
  367. package/docs/EnvironmentalApi.md +0 -83
  368. package/docs/EnvironmentalImpact.md +0 -38
  369. package/docs/EnvironmentalImpactDetailedAnalysis.md +0 -42
  370. package/docs/EnvironmentalImpactDetailedAnalysisEcoAlternatives.md +0 -34
  371. package/docs/EnvironmentalImpactDetailedAnalysisEcoAlternativesAlternativesInner.md +0 -42
  372. package/docs/EnvironmentalImpactDetailedAnalysisRunoffRisk.md +0 -38
  373. package/docs/EnvironmentalImpactImpactAssessment.md +0 -42
  374. package/docs/GenerateSmartReportSummaryRequest.md +0 -36
  375. package/docs/GenerateVRTPrescriptionRequest.md +0 -38
  376. package/docs/GeographicApi.md +0 -82
  377. package/docs/GetAgriculturalIntelligenceRequest.md +0 -36
  378. package/docs/GetLiveAgriculturalDataRequest.md +0 -40
  379. package/docs/GetPlantingCalendarRequest.md +0 -36
  380. package/docs/GetSatelliteDataRequest.md +0 -36
  381. package/docs/GetSeasonalPlanningAssistantRequest.md +0 -42
  382. package/docs/GetSeasonalPlanningAssistantRequestLocation.md +0 -38
  383. package/docs/GetSoilDataRequest.md +0 -34
  384. package/docs/GetTerritorialWaterAnalyticsRequest.md +0 -38
  385. package/docs/GetTerritorialWaterAnalyticsRequestDateRange.md +0 -36
  386. package/docs/GetWaterQualityRequest.md +0 -34
  387. package/docs/LeafEnginesApi.md +0 -83
  388. package/docs/LeafEnginesCompatibility.md +0 -38
  389. package/docs/LeafEnginesCompatibilityData.md +0 -48
  390. package/docs/LeafEnginesCompatibilityDataBreakdown.md +0 -38
  391. package/docs/LeafEnginesCompatibilityDataBreakdownSoil.md +0 -38
  392. package/docs/LeafEnginesCompatibilityDataMetadata.md +0 -38
  393. package/docs/LeafEnginesCompatibilityUsage.md +0 -36
  394. package/docs/LeafenginesQueryRequest.md +0 -38
  395. package/docs/LeafenginesQueryRequestLocation.md +0 -40
  396. package/docs/LeafenginesQueryRequestOptions.md +0 -38
  397. package/docs/LeafenginesQueryRequestPlant.md +0 -40
  398. package/docs/LeafenginesQueryRequestPlantCareRequirements.md +0 -38
  399. package/docs/LeafenginesQueryRequestPlantCareRequirementsSoilPhRange.md +0 -36
  400. package/docs/LiveAgriculturalData.md +0 -46
  401. package/docs/LiveAgriculturalDataData.md +0 -40
  402. package/docs/ModelError.md +0 -38
  403. package/docs/PlantingCalendar.md +0 -42
  404. package/docs/SatelliteData.md +0 -42
  405. package/docs/SatelliteDataApi.md +0 -83
  406. package/docs/SeasonalPlanningResponse.md +0 -40
  407. package/docs/SeasonalPlanningResponseRecommendations.md +0 -38
  408. package/docs/SeasonalPlanningResponseWeatherData.md +0 -44
  409. package/docs/SmartReportSummary.md +0 -38
  410. package/docs/SmartReportSummarySummary.md +0 -40
  411. package/docs/SoilAnalysisApi.md +0 -234
  412. package/docs/SoilData.md +0 -54
  413. package/docs/TerritorialWaterAnalytics.md +0 -38
  414. package/docs/TerritorialWaterAnalyticsAnalytics.md +0 -40
  415. package/docs/VRTApi.md +0 -83
  416. package/docs/VRTPrescription.md +0 -40
  417. package/docs/VRTPrescriptionZonesInner.md +0 -38
  418. package/docs/VisualCropAnalysis.md +0 -40
  419. package/docs/VisualCropAnalysisAnalysis.md +0 -42
  420. package/docs/VisualCropAnalysisRequest.md +0 -40
  421. package/docs/VisualCropAnalysisRequestLocation.md +0 -38
  422. package/docs/WaterQuality.md +0 -46
  423. package/docs/WaterQualityApi.md +0 -158
  424. package/package.json.save +0 -8
  425. package/src/apis/AIServicesApi.ts +0 -247
  426. package/src/apis/CarbonApi.ts +0 -82
  427. package/src/apis/EnvironmentalApi.ts +0 -82
  428. package/src/apis/GeographicApi.ts +0 -82
  429. package/src/apis/LeafEnginesApi.ts +0 -82
  430. package/src/apis/SatelliteDataApi.ts +0 -82
  431. package/src/apis/SoilAnalysisApi.ts +0 -192
  432. package/src/apis/VRTApi.ts +0 -82
  433. package/src/apis/WaterQualityApi.ts +0 -137
  434. package/src/apis/index.ts +0 -11
  435. package/src/index.ts +0 -5
  436. package/src/models/AIAnalysis.ts +0 -89
  437. package/src/models/AIAnalysisRecommendationsInner.ts +0 -93
  438. package/src/models/CalculateCarbonCreditsRequest.ts +0 -111
  439. package/src/models/CalculateEnvironmentalImpactRequest.ts +0 -122
  440. package/src/models/CalculateEnvironmentalImpactRequestProposedTreatmentsInner.ts +0 -77
  441. package/src/models/CalculateEnvironmentalImpactRequestSoilData.ts +0 -130
  442. package/src/models/CalculateEnvironmentalImpactRequestWaterBodyData.ts +0 -65
  443. package/src/models/CarbonCreditCalculation.ts +0 -96
  444. package/src/models/CarbonCreditCalculationCalculationDetails.ts +0 -113
  445. package/src/models/CarbonCreditCalculationCalculationDetailsMetadata.ts +0 -81
  446. package/src/models/CarbonCreditCalculationCreditRecord.ts +0 -108
  447. package/src/models/County.ts +0 -97
  448. package/src/models/CountyLookup200Response.ts +0 -73
  449. package/src/models/CountyLookupRequest.ts +0 -66
  450. package/src/models/EnvironmentalImpact.ts +0 -96
  451. package/src/models/EnvironmentalImpactDetailedAnalysis.ts +0 -112
  452. package/src/models/EnvironmentalImpactDetailedAnalysisEcoAlternatives.ts +0 -73
  453. package/src/models/EnvironmentalImpactDetailedAnalysisEcoAlternativesAlternativesInner.ts +0 -97
  454. package/src/models/EnvironmentalImpactDetailedAnalysisRunoffRisk.ts +0 -93
  455. package/src/models/EnvironmentalImpactImpactAssessment.ts +0 -97
  456. package/src/models/GenerateSmartReportSummaryRequest.ts +0 -86
  457. package/src/models/GenerateVRTPrescriptionRequest.ts +0 -95
  458. package/src/models/GetAgriculturalIntelligenceRequest.ts +0 -87
  459. package/src/models/GetLiveAgriculturalDataRequest.ts +0 -106
  460. package/src/models/GetPlantingCalendarRequest.ts +0 -75
  461. package/src/models/GetSatelliteDataRequest.ts +0 -75
  462. package/src/models/GetSeasonalPlanningAssistantRequest.ts +0 -120
  463. package/src/models/GetSeasonalPlanningAssistantRequestLocation.ts +0 -81
  464. package/src/models/GetSoilDataRequest.ts +0 -66
  465. package/src/models/GetTerritorialWaterAnalyticsRequest.ts +0 -101
  466. package/src/models/GetTerritorialWaterAnalyticsRequestDateRange.ts +0 -73
  467. package/src/models/GetWaterQualityRequest.ts +0 -66
  468. package/src/models/LeafEnginesCompatibility.ts +0 -96
  469. package/src/models/LeafEnginesCompatibilityData.ts +0 -148
  470. package/src/models/LeafEnginesCompatibilityDataBreakdown.ts +0 -89
  471. package/src/models/LeafEnginesCompatibilityDataBreakdownSoil.ts +0 -81
  472. package/src/models/LeafEnginesCompatibilityDataMetadata.ts +0 -81
  473. package/src/models/LeafEnginesCompatibilityUsage.ts +0 -73
  474. package/src/models/LeafenginesQueryRequest.ts +0 -105
  475. package/src/models/LeafenginesQueryRequestLocation.ts +0 -89
  476. package/src/models/LeafenginesQueryRequestOptions.ts +0 -81
  477. package/src/models/LeafenginesQueryRequestPlant.ts +0 -97
  478. package/src/models/LeafenginesQueryRequestPlantCareRequirements.ts +0 -111
  479. package/src/models/LeafenginesQueryRequestPlantCareRequirementsSoilPhRange.ts +0 -73
  480. package/src/models/LiveAgriculturalData.ts +0 -132
  481. package/src/models/LiveAgriculturalDataData.ts +0 -89
  482. package/src/models/ModelError.ts +0 -81
  483. package/src/models/PlantingCalendar.ts +0 -105
  484. package/src/models/SatelliteData.ts +0 -97
  485. package/src/models/SeasonalPlanningResponse.ts +0 -104
  486. package/src/models/SeasonalPlanningResponseRecommendations.ts +0 -81
  487. package/src/models/SeasonalPlanningResponseWeatherData.ts +0 -105
  488. package/src/models/SmartReportSummary.ts +0 -89
  489. package/src/models/SmartReportSummarySummary.ts +0 -89
  490. package/src/models/SoilData.ts +0 -145
  491. package/src/models/TerritorialWaterAnalytics.ts +0 -89
  492. package/src/models/TerritorialWaterAnalyticsAnalytics.ts +0 -89
  493. package/src/models/VRTPrescription.ts +0 -97
  494. package/src/models/VRTPrescriptionZonesInner.ts +0 -81
  495. package/src/models/VisualCropAnalysis.ts +0 -97
  496. package/src/models/VisualCropAnalysisAnalysis.ts +0 -109
  497. package/src/models/VisualCropAnalysisRequest.ts +0 -111
  498. package/src/models/VisualCropAnalysisRequestLocation.ts +0 -81
  499. package/src/models/WaterQuality.ts +0 -125
  500. package/src/models/index.ts +0 -66
  501. package/src/runtime.ts +0 -432
  502. package/tsconfig.esm.json +0 -7
  503. package/tsconfig.json +0 -16
@@ -0,0 +1,241 @@
1
+ import { LeafEnginesClient } from '../client';
2
+ import {
3
+ SensorReading,
4
+ SensorReadingPayload,
5
+ SensorReadingData,
6
+ IngestionResponse,
7
+ ReadingsQueryParams,
8
+ ReadingsAggregation,
9
+ APIResponse,
10
+ Subscription,
11
+ } from '../types';
12
+
13
+ /**
14
+ * Sensor Readings API
15
+ *
16
+ * Query historical data and subscribe to real-time updates
17
+ */
18
+ export class SensorReadingsAPI {
19
+ private client: LeafEnginesClient;
20
+ private subscriptions: Map<string, Subscription> = new Map();
21
+
22
+ constructor(client: LeafEnginesClient) {
23
+ this.client = client;
24
+ }
25
+
26
+ /**
27
+ * Send sensor readings via HTTP (MQTT fallback)
28
+ *
29
+ * @param payload - Sensor data to ingest
30
+ * @returns Ingestion confirmation
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * const result = await client.sensors.readings.send({
35
+ * deviceId: 'skyline-001',
36
+ * deviceType: 'mmwave_radar',
37
+ * timestamp: new Date(),
38
+ * readings: [{
39
+ * metric: 'reflectivity',
40
+ * value: 0.92,
41
+ * unit: 'ratio',
42
+ * confidence: 0.94,
43
+ * timestamp: new Date(),
44
+ * }],
45
+ * metadata: { firmwareVersion: '1.2.0' },
46
+ * });
47
+ * ```
48
+ */
49
+ async send(payload: SensorReadingPayload): Promise<IngestionResponse> {
50
+ const response = await this.client.request<APIResponse<any>>({
51
+ method: 'POST',
52
+ endpoint: '/sensor-data-ingestion',
53
+ body: {
54
+ device_id: payload.deviceId,
55
+ device_type: payload.deviceType,
56
+ timestamp: payload.timestamp.toISOString(),
57
+ readings: payload.readings.map(r => ({
58
+ metric: r.metric,
59
+ value: r.value,
60
+ unit: r.unit,
61
+ confidence: r.confidence,
62
+ timestamp: r.timestamp.toISOString(),
63
+ })),
64
+ metadata: {
65
+ firmware_version: payload.metadata.firmwareVersion,
66
+ battery_level: payload.metadata.batteryLevel,
67
+ signal_strength: payload.metadata.signalStrength,
68
+ },
69
+ },
70
+ });
71
+
72
+ return {
73
+ ingestionId: response.data.ingestion_id,
74
+ queuedAt: new Date(response.data.queued_at),
75
+ processedReadings: response.data.processed_readings,
76
+ estimatedProcessingMs: response.data.estimated_processing_ms,
77
+ status: response.data.status,
78
+ };
79
+ }
80
+
81
+ /**
82
+ * Query historical readings
83
+ *
84
+ * @param params - Query parameters
85
+ * @returns Array of sensor readings
86
+ */
87
+ async query(params: ReadingsQueryParams): Promise<SensorReading[]> {
88
+ const response = await this.client.request<APIResponse<any[]>>({
89
+ method: 'GET',
90
+ endpoint: '/sensor-readings',
91
+ params: {
92
+ device_id: params.deviceId,
93
+ metric: params.metric,
94
+ start_time: params.startTime.toISOString(),
95
+ end_time: params.endTime.toISOString(),
96
+ limit: params.limit || 100,
97
+ offset: params.offset || 0,
98
+ order: params.order || 'desc',
99
+ },
100
+ });
101
+
102
+ return response.data.map(this.parseReading);
103
+ }
104
+
105
+ /**
106
+ * Get latest reading for a device
107
+ *
108
+ * @param deviceId - Device identifier
109
+ * @param metric - Optional metric filter
110
+ * @returns Latest reading or null
111
+ */
112
+ async getLatest(
113
+ deviceId: string,
114
+ metric?: string
115
+ ): Promise<SensorReading | null> {
116
+ try {
117
+ const response = await this.client.request<APIResponse<any>>({
118
+ method: 'GET',
119
+ endpoint: '/sensor-readings/latest',
120
+ params: {
121
+ device_id: deviceId,
122
+ metric,
123
+ },
124
+ });
125
+
126
+ return response.data ? this.parseReading(response.data) : null;
127
+ } catch (error) {
128
+ // Return null if no readings found
129
+ return null;
130
+ }
131
+ }
132
+
133
+ /**
134
+ * Get aggregated readings (hourly, daily, etc.)
135
+ *
136
+ * @param params - Aggregation parameters
137
+ * @returns Aggregated data points
138
+ */
139
+ async aggregate(params: {
140
+ deviceId: string;
141
+ metric: string;
142
+ startTime: Date;
143
+ endTime: Date;
144
+ interval: '1h' | '1d' | '1w' | '1m';
145
+ }): Promise<ReadingsAggregation[]> {
146
+ const response = await this.client.request<APIResponse<any[]>>({
147
+ method: 'GET',
148
+ endpoint: '/sensor-readings/aggregate',
149
+ params: {
150
+ device_id: params.deviceId,
151
+ metric: params.metric,
152
+ start_time: params.startTime.toISOString(),
153
+ end_time: params.endTime.toISOString(),
154
+ interval: params.interval,
155
+ },
156
+ });
157
+
158
+ return response.data.map((agg: any) => ({
159
+ deviceId: agg.device_id,
160
+ metric: agg.metric,
161
+ startTime: new Date(agg.start_time),
162
+ endTime: new Date(agg.end_time),
163
+ count: agg.count,
164
+ avg: agg.avg,
165
+ min: agg.min,
166
+ max: agg.max,
167
+ sum: agg.sum,
168
+ interval: agg.interval,
169
+ }));
170
+ }
171
+
172
+ /**
173
+ * Subscribe to real-time readings (WebSocket)
174
+ *
175
+ * @param deviceId - Device to subscribe to
176
+ * @param callback - Handler for new readings
177
+ * @returns Subscription object
178
+ */
179
+ subscribe(
180
+ deviceId: string,
181
+ callback: (reading: SensorReading) => void
182
+ ): Subscription {
183
+ const wsUrl = this.client.getWebSocketUrl();
184
+ const ws = new WebSocket(`${wsUrl}/sensor-readings/${deviceId}`);
185
+
186
+ ws.onmessage = (event) => {
187
+ try {
188
+ const data = JSON.parse(event.data);
189
+ callback(this.parseReading(data));
190
+ } catch (error) {
191
+ console.error('Failed to parse WebSocket message:', error);
192
+ }
193
+ };
194
+
195
+ ws.onerror = (error) => {
196
+ console.error('WebSocket error:', error);
197
+ };
198
+
199
+ const subscription: Subscription = {
200
+ unsubscribe: () => {
201
+ ws.close();
202
+ this.subscriptions.delete(deviceId);
203
+ },
204
+ isActive: () => ws.readyState === WebSocket.OPEN,
205
+ };
206
+
207
+ this.subscriptions.set(deviceId, subscription);
208
+ return subscription;
209
+ }
210
+
211
+ /**
212
+ * Unsubscribe from device updates
213
+ */
214
+ unsubscribe(deviceId: string): void {
215
+ const sub = this.subscriptions.get(deviceId);
216
+ if (sub) {
217
+ sub.unsubscribe();
218
+ }
219
+ }
220
+
221
+ /**
222
+ * Unsubscribe from all devices
223
+ */
224
+ unsubscribeAll(): void {
225
+ this.subscriptions.forEach(sub => sub.unsubscribe());
226
+ this.subscriptions.clear();
227
+ }
228
+
229
+ private parseReading(data: any): SensorReading {
230
+ return {
231
+ id: data.id,
232
+ deviceId: data.device_id,
233
+ timestamp: new Date(data.timestamp),
234
+ metric: data.metric,
235
+ value: data.value,
236
+ unit: data.unit,
237
+ confidence: data.confidence,
238
+ receivedAt: new Date(data.received_at),
239
+ };
240
+ }
241
+ }
@@ -0,0 +1,432 @@
1
+ /**
2
+ * SoilSidekick Pro SDK Test Script
3
+ *
4
+ * This script validates SDK functionality including:
5
+ * - Authentication with API keys
6
+ * - Rate limiting headers
7
+ * - Tier-based feature access
8
+ * - Error handling
9
+ *
10
+ * Usage:
11
+ * npx ts-node sdks/test-sdk.ts <API_KEY>
12
+ *
13
+ * Or with environment variable:
14
+ * SOILSIDEKICK_API_KEY=ss_prod_xxx npx ts-node sdks/test-sdk.ts
15
+ */
16
+
17
+ const BASE_URL = 'https://wzgnxkoeqzvueypwzvyn.supabase.co/functions/v1';
18
+
19
+ interface TestResult {
20
+ endpoint: string;
21
+ status: 'pass' | 'fail' | 'skip';
22
+ statusCode?: number;
23
+ rateLimitHeaders?: {
24
+ limit?: string;
25
+ remaining?: string;
26
+ reset?: string;
27
+ };
28
+ responseTime: number;
29
+ error?: string;
30
+ tierRequired?: string;
31
+ }
32
+
33
+ interface TestSuite {
34
+ name: string;
35
+ results: TestResult[];
36
+ summary: {
37
+ passed: number;
38
+ failed: number;
39
+ skipped: number;
40
+ };
41
+ }
42
+
43
+ // Test configurations by tier
44
+ const ENDPOINT_TESTS = [
45
+ // Free tier endpoints
46
+ {
47
+ endpoint: '/get-soil-data',
48
+ method: 'POST',
49
+ body: { county_fips: '12086' }, // Miami-Dade
50
+ tierRequired: 'free',
51
+ },
52
+ {
53
+ endpoint: '/county-lookup',
54
+ method: 'POST',
55
+ body: { term: 'Miami' },
56
+ tierRequired: 'free',
57
+ },
58
+ // Starter tier endpoints
59
+ {
60
+ endpoint: '/territorial-water-quality',
61
+ method: 'POST',
62
+ body: { county_fips: '12086' },
63
+ tierRequired: 'starter',
64
+ },
65
+ {
66
+ endpoint: '/territorial-water-analytics',
67
+ method: 'POST',
68
+ body: { territory_type: 'state' },
69
+ tierRequired: 'starter',
70
+ },
71
+ {
72
+ endpoint: '/multi-parameter-planting-calendar',
73
+ method: 'POST',
74
+ body: { county_fips: '12086', crop_type: 'tomato' },
75
+ tierRequired: 'starter',
76
+ },
77
+ {
78
+ endpoint: '/live-agricultural-data',
79
+ method: 'POST',
80
+ body: {
81
+ county_fips: '12086',
82
+ data_types: ['weather', 'soil'],
83
+ state_code: 'FL',
84
+ county_name: 'Miami-Dade'
85
+ },
86
+ tierRequired: 'starter',
87
+ },
88
+ {
89
+ endpoint: '/environmental-impact-engine',
90
+ method: 'POST',
91
+ body: {
92
+ analysis_id: '00000000-0000-0000-0000-000000000000',
93
+ county_fips: '12086',
94
+ soil_data: { ph_level: 6.5, organic_matter: 3.2 }
95
+ },
96
+ tierRequired: 'starter',
97
+ },
98
+ // Pro tier endpoints
99
+ {
100
+ endpoint: '/alpha-earth-environmental-enhancement',
101
+ method: 'POST',
102
+ body: { latitude: 25.7617, longitude: -80.1918 },
103
+ tierRequired: 'pro',
104
+ },
105
+ {
106
+ endpoint: '/agricultural-intelligence',
107
+ method: 'POST',
108
+ body: { county_fips: '12086', analysis_type: 'crop_recommendation' },
109
+ tierRequired: 'pro',
110
+ },
111
+ {
112
+ endpoint: '/seasonal-planning-assistant',
113
+ method: 'POST',
114
+ body: {
115
+ location: { county_fips: '12086', state_code: 'FL' },
116
+ planningType: 'spring_planting'
117
+ },
118
+ tierRequired: 'pro',
119
+ },
120
+ {
121
+ endpoint: '/smart-report-summary',
122
+ method: 'POST',
123
+ body: {
124
+ reportType: 'soil',
125
+ reportData: { ph_level: 6.5, organic_matter: 3.2 }
126
+ },
127
+ tierRequired: 'pro',
128
+ },
129
+ {
130
+ endpoint: '/carbon-credit-calculator',
131
+ method: 'POST',
132
+ body: {
133
+ field_name: 'Test Field',
134
+ field_size_acres: 100
135
+ },
136
+ tierRequired: 'pro',
137
+ },
138
+ {
139
+ endpoint: '/leafengines-query',
140
+ method: 'POST',
141
+ body: {
142
+ location: { county_fips: '12086' },
143
+ plant: { common_name: 'Tomato' }
144
+ },
145
+ tierRequired: 'pro',
146
+ useXApiKey: true, // This endpoint uses x-api-key header
147
+ },
148
+ // Enterprise tier endpoints
149
+ {
150
+ endpoint: '/visual-crop-analysis',
151
+ method: 'POST',
152
+ body: {
153
+ image: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==',
154
+ analysis_type: 'crop_health'
155
+ },
156
+ tierRequired: 'enterprise',
157
+ },
158
+ ];
159
+
160
+ async function testEndpoint(
161
+ apiKey: string,
162
+ config: typeof ENDPOINT_TESTS[0]
163
+ ): Promise<TestResult> {
164
+ const startTime = Date.now();
165
+
166
+ try {
167
+ const headers: Record<string, string> = {
168
+ 'Content-Type': 'application/json',
169
+ };
170
+
171
+ // Some endpoints use x-api-key, others use Authorization Bearer
172
+ if (config.useXApiKey) {
173
+ headers['x-api-key'] = apiKey;
174
+ } else {
175
+ headers['Authorization'] = `Bearer ${apiKey}`;
176
+ }
177
+
178
+ const response = await fetch(`${BASE_URL}${config.endpoint}`, {
179
+ method: config.method,
180
+ headers,
181
+ body: JSON.stringify(config.body),
182
+ });
183
+
184
+ const responseTime = Date.now() - startTime;
185
+
186
+ // Extract rate limit headers
187
+ const rateLimitHeaders = {
188
+ limit: response.headers.get('X-RateLimit-Limit') || undefined,
189
+ remaining: response.headers.get('X-RateLimit-Remaining') || undefined,
190
+ reset: response.headers.get('X-RateLimit-Reset') || undefined,
191
+ };
192
+
193
+ // Determine test result
194
+ let status: 'pass' | 'fail' | 'skip' = 'fail';
195
+ let error: string | undefined;
196
+
197
+ if (response.ok) {
198
+ status = 'pass';
199
+ } else if (response.status === 401) {
200
+ error = 'Authentication failed - check API key';
201
+ } else if (response.status === 403) {
202
+ // Tier restriction is expected for higher tiers
203
+ status = 'skip';
204
+ error = `Tier restriction - requires ${config.tierRequired} tier`;
205
+ } else if (response.status === 429) {
206
+ error = 'Rate limited';
207
+ } else {
208
+ const errorBody = await response.text();
209
+ error = `HTTP ${response.status}: ${errorBody.substring(0, 200)}`;
210
+ }
211
+
212
+ return {
213
+ endpoint: config.endpoint,
214
+ status,
215
+ statusCode: response.status,
216
+ rateLimitHeaders,
217
+ responseTime,
218
+ error,
219
+ tierRequired: config.tierRequired,
220
+ };
221
+ } catch (err) {
222
+ return {
223
+ endpoint: config.endpoint,
224
+ status: 'fail',
225
+ responseTime: Date.now() - startTime,
226
+ error: err instanceof Error ? err.message : 'Unknown error',
227
+ tierRequired: config.tierRequired,
228
+ };
229
+ }
230
+ }
231
+
232
+ async function testRateLimiting(apiKey: string): Promise<TestResult[]> {
233
+ console.log('\nšŸ”„ Testing Rate Limiting...');
234
+ const results: TestResult[] = [];
235
+
236
+ // Make rapid requests to test rate limiting
237
+ const rapidRequests = 5;
238
+ for (let i = 0; i < rapidRequests; i++) {
239
+ const result = await testEndpoint(apiKey, ENDPOINT_TESTS[0]); // Use free tier endpoint
240
+ results.push({
241
+ ...result,
242
+ endpoint: `/get-soil-data (request ${i + 1}/${rapidRequests})`,
243
+ });
244
+
245
+ // Log rate limit headers
246
+ if (result.rateLimitHeaders?.remaining) {
247
+ console.log(` Request ${i + 1}: Remaining: ${result.rateLimitHeaders.remaining}`);
248
+ }
249
+
250
+ // Small delay to avoid overwhelming
251
+ await new Promise(r => setTimeout(r, 100));
252
+ }
253
+
254
+ return results;
255
+ }
256
+
257
+ async function testAuthenticationFailure(): Promise<TestResult> {
258
+ console.log('\nšŸ” Testing Authentication Failure...');
259
+
260
+ const startTime = Date.now();
261
+ const response = await fetch(`${BASE_URL}/get-soil-data`, {
262
+ method: 'POST',
263
+ headers: {
264
+ 'Content-Type': 'application/json',
265
+ 'Authorization': 'Bearer invalid_api_key_12345',
266
+ },
267
+ body: JSON.stringify({ county_fips: '12086' }),
268
+ });
269
+
270
+ const passed = response.status === 401;
271
+
272
+ return {
273
+ endpoint: '/get-soil-data (invalid key)',
274
+ status: passed ? 'pass' : 'fail',
275
+ statusCode: response.status,
276
+ responseTime: Date.now() - startTime,
277
+ error: passed ? undefined : `Expected 401, got ${response.status}`,
278
+ };
279
+ }
280
+
281
+ async function testMissingAuthentication(): Promise<TestResult> {
282
+ console.log('\nšŸ” Testing Missing Authentication...');
283
+
284
+ const startTime = Date.now();
285
+ const response = await fetch(`${BASE_URL}/get-soil-data`, {
286
+ method: 'POST',
287
+ headers: {
288
+ 'Content-Type': 'application/json',
289
+ },
290
+ body: JSON.stringify({ county_fips: '12086' }),
291
+ });
292
+
293
+ const passed = response.status === 401;
294
+
295
+ return {
296
+ endpoint: '/get-soil-data (no auth)',
297
+ status: passed ? 'pass' : 'fail',
298
+ statusCode: response.status,
299
+ responseTime: Date.now() - startTime,
300
+ error: passed ? undefined : `Expected 401, got ${response.status}`,
301
+ };
302
+ }
303
+
304
+ async function runTestSuite(apiKey: string): Promise<TestSuite> {
305
+ console.log('═'.repeat(60));
306
+ console.log('🧪 SoilSidekick Pro SDK Test Suite');
307
+ console.log('═'.repeat(60));
308
+ console.log(`\nšŸ“ Base URL: ${BASE_URL}`);
309
+ console.log(`šŸ”‘ API Key: ${apiKey.substring(0, 12)}...${apiKey.slice(-4)}`);
310
+
311
+ const results: TestResult[] = [];
312
+
313
+ // Test authentication failure scenarios
314
+ results.push(await testAuthenticationFailure());
315
+ results.push(await testMissingAuthentication());
316
+
317
+ // Test all endpoints
318
+ console.log('\nšŸ“‹ Testing Endpoints by Tier...');
319
+
320
+ const tierGroups = {
321
+ free: ENDPOINT_TESTS.filter(t => t.tierRequired === 'free'),
322
+ starter: ENDPOINT_TESTS.filter(t => t.tierRequired === 'starter'),
323
+ pro: ENDPOINT_TESTS.filter(t => t.tierRequired === 'pro'),
324
+ enterprise: ENDPOINT_TESTS.filter(t => t.tierRequired === 'enterprise'),
325
+ };
326
+
327
+ for (const [tier, tests] of Object.entries(tierGroups)) {
328
+ console.log(`\n [${tier.toUpperCase()} TIER]`);
329
+
330
+ for (const test of tests) {
331
+ const result = await testEndpoint(apiKey, test);
332
+ results.push(result);
333
+
334
+ const statusIcon = result.status === 'pass' ? 'āœ…' : result.status === 'skip' ? 'ā­ļø' : 'āŒ';
335
+ console.log(` ${statusIcon} ${test.endpoint} (${result.responseTime}ms)`);
336
+
337
+ if (result.error && result.status === 'fail') {
338
+ console.log(` └─ ${result.error}`);
339
+ }
340
+
341
+ // Small delay between requests
342
+ await new Promise(r => setTimeout(r, 200));
343
+ }
344
+ }
345
+
346
+ // Test rate limiting
347
+ const rateLimitResults = await testRateLimiting(apiKey);
348
+ results.push(...rateLimitResults);
349
+
350
+ // Calculate summary
351
+ const summary = {
352
+ passed: results.filter(r => r.status === 'pass').length,
353
+ failed: results.filter(r => r.status === 'fail').length,
354
+ skipped: results.filter(r => r.status === 'skip').length,
355
+ };
356
+
357
+ return {
358
+ name: 'SoilSidekick Pro SDK Tests',
359
+ results,
360
+ summary,
361
+ };
362
+ }
363
+
364
+ function printSummary(suite: TestSuite) {
365
+ console.log('\n' + '═'.repeat(60));
366
+ console.log('šŸ“Š Test Summary');
367
+ console.log('═'.repeat(60));
368
+
369
+ console.log(`\n āœ… Passed: ${suite.summary.passed}`);
370
+ console.log(` āŒ Failed: ${suite.summary.failed}`);
371
+ console.log(` ā­ļø Skipped: ${suite.summary.skipped}`);
372
+ console.log(` šŸ“ Total: ${suite.results.length}`);
373
+
374
+ // List failed tests
375
+ const failed = suite.results.filter(r => r.status === 'fail');
376
+ if (failed.length > 0) {
377
+ console.log('\n Failed Tests:');
378
+ for (const test of failed) {
379
+ console.log(` - ${test.endpoint}: ${test.error}`);
380
+ }
381
+ }
382
+
383
+ // Print rate limit info from last successful request
384
+ const lastWithRateLimit = suite.results
385
+ .filter(r => r.rateLimitHeaders?.limit)
386
+ .pop();
387
+
388
+ if (lastWithRateLimit?.rateLimitHeaders) {
389
+ console.log('\n Rate Limit Status:');
390
+ console.log(` Limit: ${lastWithRateLimit.rateLimitHeaders.limit}`);
391
+ console.log(` Remaining: ${lastWithRateLimit.rateLimitHeaders.remaining}`);
392
+ console.log(` Reset: ${lastWithRateLimit.rateLimitHeaders.reset}`);
393
+ }
394
+
395
+ console.log('\n' + '═'.repeat(60));
396
+
397
+ // Exit code based on failures
398
+ const exitCode = suite.summary.failed > 0 ? 1 : 0;
399
+ console.log(`\n${exitCode === 0 ? 'āœ… All tests passed!' : 'āŒ Some tests failed.'}\n`);
400
+
401
+ return exitCode;
402
+ }
403
+
404
+ // Export for programmatic use
405
+ export { runTestSuite, testEndpoint, ENDPOINT_TESTS, TestResult, TestSuite };
406
+
407
+ // CLI entry point
408
+ async function main() {
409
+ const apiKey = process.argv[2] || process.env.SOILSIDEKICK_API_KEY;
410
+
411
+ if (!apiKey) {
412
+ console.error('āŒ Error: API key required');
413
+ console.error('\nUsage:');
414
+ console.error(' npx ts-node sdks/test-sdk.ts <API_KEY>');
415
+ console.error(' SOILSIDEKICK_API_KEY=xxx npx ts-node sdks/test-sdk.ts');
416
+ process.exit(1);
417
+ }
418
+
419
+ try {
420
+ const suite = await runTestSuite(apiKey);
421
+ const exitCode = printSummary(suite);
422
+ process.exit(exitCode);
423
+ } catch (error) {
424
+ console.error('āŒ Test suite failed:', error);
425
+ process.exit(1);
426
+ }
427
+ }
428
+
429
+ // Run if executed directly
430
+ if (typeof require !== 'undefined' && require.main === module) {
431
+ main();
432
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2020",
4
+ "module": "commonjs",
5
+ "lib": ["ES2020", "DOM"],
6
+ "declaration": true,
7
+ "outDir": "./dist",
8
+ "rootDir": ".",
9
+ "strict": true,
10
+ "esModuleInterop": true,
11
+ "skipLibCheck": true,
12
+ "forceConsistentCasingInFileNames": true,
13
+ "resolveJsonModule": true,
14
+ "moduleResolution": "node"
15
+ },
16
+ "include": [
17
+ "*.ts",
18
+ "sensors/**/*.ts"
19
+ ],
20
+ "exclude": [
21
+ "node_modules",
22
+ "dist",
23
+ "__tests__"
24
+ ]
25
+ }