deere-sdk 1.0.10 → 2.1.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 (159) hide show
  1. package/CHANGELOG.md +223 -0
  2. package/README.md +130 -20
  3. package/dist/api/aemp.d.ts +4 -0
  4. package/dist/api/aemp.d.ts.map +1 -1
  5. package/dist/api/aemp.js +5 -1
  6. package/dist/api/aemp.js.map +1 -1
  7. package/dist/api/assets.d.ts +4 -0
  8. package/dist/api/assets.d.ts.map +1 -1
  9. package/dist/api/assets.js +13 -9
  10. package/dist/api/assets.js.map +1 -1
  11. package/dist/api/boundaries.d.ts +4 -0
  12. package/dist/api/boundaries.d.ts.map +1 -1
  13. package/dist/api/boundaries.js +12 -8
  14. package/dist/api/boundaries.js.map +1 -1
  15. package/dist/api/clients.d.ts +4 -0
  16. package/dist/api/clients.d.ts.map +1 -1
  17. package/dist/api/clients.js +12 -8
  18. package/dist/api/clients.js.map +1 -1
  19. package/dist/api/connection-management.d.ts +4 -0
  20. package/dist/api/connection-management.d.ts.map +1 -1
  21. package/dist/api/connection-management.js +8 -4
  22. package/dist/api/connection-management.js.map +1 -1
  23. package/dist/api/crop-types.d.ts +4 -0
  24. package/dist/api/crop-types.d.ts.map +1 -1
  25. package/dist/api/crop-types.js +9 -5
  26. package/dist/api/crop-types.js.map +1 -1
  27. package/dist/api/equipment-measurement.d.ts +4 -0
  28. package/dist/api/equipment-measurement.d.ts.map +1 -1
  29. package/dist/api/equipment-measurement.js +5 -1
  30. package/dist/api/equipment-measurement.js.map +1 -1
  31. package/dist/api/equipment.d.ts +4 -0
  32. package/dist/api/equipment.d.ts.map +1 -1
  33. package/dist/api/equipment.js +20 -16
  34. package/dist/api/equipment.js.map +1 -1
  35. package/dist/api/farms.d.ts +4 -0
  36. package/dist/api/farms.d.ts.map +1 -1
  37. package/dist/api/farms.js +12 -8
  38. package/dist/api/farms.js.map +1 -1
  39. package/dist/api/field-operations-api.d.ts +4 -0
  40. package/dist/api/field-operations-api.d.ts.map +1 -1
  41. package/dist/api/field-operations-api.js +8 -4
  42. package/dist/api/field-operations-api.js.map +1 -1
  43. package/dist/api/fields.d.ts +4 -0
  44. package/dist/api/fields.d.ts.map +1 -1
  45. package/dist/api/fields.js +12 -8
  46. package/dist/api/fields.js.map +1 -1
  47. package/dist/api/files.d.ts +4 -0
  48. package/dist/api/files.d.ts.map +1 -1
  49. package/dist/api/files.js +10 -6
  50. package/dist/api/files.js.map +1 -1
  51. package/dist/api/flags.d.ts +4 -0
  52. package/dist/api/flags.d.ts.map +1 -1
  53. package/dist/api/flags.js +11 -7
  54. package/dist/api/flags.js.map +1 -1
  55. package/dist/api/guidance-lines.d.ts +4 -0
  56. package/dist/api/guidance-lines.d.ts.map +1 -1
  57. package/dist/api/guidance-lines.js +9 -5
  58. package/dist/api/guidance-lines.js.map +1 -1
  59. package/dist/api/harvest-id.d.ts +4 -0
  60. package/dist/api/harvest-id.d.ts.map +1 -1
  61. package/dist/api/harvest-id.js +7 -3
  62. package/dist/api/harvest-id.js.map +1 -1
  63. package/dist/api/machine-alerts.d.ts +4 -0
  64. package/dist/api/machine-alerts.d.ts.map +1 -1
  65. package/dist/api/machine-alerts.js +6 -2
  66. package/dist/api/machine-alerts.js.map +1 -1
  67. package/dist/api/machine-device-state-reports.d.ts +4 -0
  68. package/dist/api/machine-device-state-reports.d.ts.map +1 -1
  69. package/dist/api/machine-device-state-reports.js +5 -1
  70. package/dist/api/machine-device-state-reports.js.map +1 -1
  71. package/dist/api/machine-engine-hours.d.ts +4 -0
  72. package/dist/api/machine-engine-hours.d.ts.map +1 -1
  73. package/dist/api/machine-engine-hours.js +6 -2
  74. package/dist/api/machine-engine-hours.js.map +1 -1
  75. package/dist/api/machine-hours-of-operation.d.ts +4 -0
  76. package/dist/api/machine-hours-of-operation.d.ts.map +1 -1
  77. package/dist/api/machine-hours-of-operation.js +6 -2
  78. package/dist/api/machine-hours-of-operation.js.map +1 -1
  79. package/dist/api/machine-locations.d.ts +4 -0
  80. package/dist/api/machine-locations.d.ts.map +1 -1
  81. package/dist/api/machine-locations.js +5 -1
  82. package/dist/api/machine-locations.js.map +1 -1
  83. package/dist/api/map-layers.d.ts +4 -0
  84. package/dist/api/map-layers.d.ts.map +1 -1
  85. package/dist/api/map-layers.js +9 -5
  86. package/dist/api/map-layers.js.map +1 -1
  87. package/dist/api/notifications.d.ts +4 -0
  88. package/dist/api/notifications.d.ts.map +1 -1
  89. package/dist/api/notifications.js +9 -5
  90. package/dist/api/notifications.js.map +1 -1
  91. package/dist/api/operators.d.ts +4 -0
  92. package/dist/api/operators.d.ts.map +1 -1
  93. package/dist/api/operators.js +11 -7
  94. package/dist/api/operators.js.map +1 -1
  95. package/dist/api/organizations.d.ts +4 -0
  96. package/dist/api/organizations.d.ts.map +1 -1
  97. package/dist/api/organizations.js +9 -5
  98. package/dist/api/organizations.js.map +1 -1
  99. package/dist/api/partnerships.d.ts +4 -0
  100. package/dist/api/partnerships.d.ts.map +1 -1
  101. package/dist/api/partnerships.js +11 -7
  102. package/dist/api/partnerships.js.map +1 -1
  103. package/dist/api/products.d.ts +4 -0
  104. package/dist/api/products.d.ts.map +1 -1
  105. package/dist/api/products.js +14 -10
  106. package/dist/api/products.js.map +1 -1
  107. package/dist/api/users.d.ts +4 -0
  108. package/dist/api/users.d.ts.map +1 -1
  109. package/dist/api/users.js +5 -1
  110. package/dist/api/users.js.map +1 -1
  111. package/dist/api/webhook.d.ts +4 -0
  112. package/dist/api/webhook.d.ts.map +1 -1
  113. package/dist/api/webhook.js +9 -5
  114. package/dist/api/webhook.js.map +1 -1
  115. package/dist/api-servers.generated.d.ts +72 -0
  116. package/dist/api-servers.generated.d.ts.map +1 -0
  117. package/dist/api-servers.generated.js +344 -0
  118. package/dist/api-servers.generated.js.map +1 -0
  119. package/dist/client.d.ts +95 -47
  120. package/dist/client.d.ts.map +1 -1
  121. package/dist/client.js +196 -105
  122. package/dist/client.js.map +1 -1
  123. package/dist/deere.d.ts +14 -0
  124. package/dist/deere.d.ts.map +1 -1
  125. package/dist/deere.js +20 -0
  126. package/dist/deere.js.map +1 -1
  127. package/dist/environment-resolver.d.ts +40 -0
  128. package/dist/environment-resolver.d.ts.map +1 -0
  129. package/dist/environment-resolver.js +79 -0
  130. package/dist/environment-resolver.js.map +1 -0
  131. package/dist/errors.d.ts +36 -0
  132. package/dist/errors.d.ts.map +1 -0
  133. package/dist/errors.js +54 -0
  134. package/dist/errors.js.map +1 -0
  135. package/dist/hateoas-map.d.ts +9 -0
  136. package/dist/hateoas-map.d.ts.map +1 -1
  137. package/dist/hateoas-map.js +84 -37
  138. package/dist/hateoas-map.js.map +1 -1
  139. package/dist/index.d.ts +1 -0
  140. package/dist/index.d.ts.map +1 -1
  141. package/dist/index.js +3 -0
  142. package/dist/index.js.map +1 -1
  143. package/dist/safe/field-operations.d.ts +73 -0
  144. package/dist/safe/field-operations.d.ts.map +1 -0
  145. package/dist/safe/field-operations.js +74 -0
  146. package/dist/safe/field-operations.js.map +1 -0
  147. package/dist/safe/index.d.ts +41 -0
  148. package/dist/safe/index.d.ts.map +1 -0
  149. package/dist/safe/index.js +47 -0
  150. package/dist/safe/index.js.map +1 -0
  151. package/dist/types/generated/field-operations-api.d.ts +17 -0
  152. package/dist/types/generated/field-operations-api.d.ts.map +1 -1
  153. package/dist/types/generated/index.d.ts +1 -1
  154. package/dist/types/generated/index.js +1 -1
  155. package/package.json +3 -2
  156. package/dist/api/field-operations.d.ts +0 -83
  157. package/dist/api/field-operations.d.ts.map +0 -1
  158. package/dist/api/field-operations.js +0 -134
  159. package/dist/api/field-operations.js.map +0 -1
@@ -1,134 +0,0 @@
1
- /**
2
- * Field Operations API
3
- *
4
- * Typed wrapper for John Deere Field Operations endpoints.
5
- * Includes harvest, planting, and application data.
6
- */
7
- export class FieldOperationsApi {
8
- client;
9
- constructor(client) {
10
- this.client = client;
11
- }
12
- /**
13
- * List field operations for an organization
14
- */
15
- async list(orgId, params, options) {
16
- const query = new URLSearchParams();
17
- if (params?.operationType)
18
- query.set('operationType', params.operationType);
19
- if (params?.startDate)
20
- query.set('startDate', params.startDate);
21
- if (params?.endDate)
22
- query.set('endDate', params.endDate);
23
- if (params?.embed)
24
- query.set('embed', params.embed);
25
- const queryString = query.toString();
26
- const path = queryString
27
- ? `/organizations/${orgId}/fieldOperations?${queryString}`
28
- : `/organizations/${orgId}/fieldOperations`;
29
- return this.client.get(path, options);
30
- }
31
- /**
32
- * List field operations for a specific field
33
- */
34
- async listForField(orgId, fieldId, params, options) {
35
- const query = new URLSearchParams();
36
- if (params?.operationType)
37
- query.set('operationType', params.operationType);
38
- if (params?.startDate)
39
- query.set('startDate', params.startDate);
40
- if (params?.endDate)
41
- query.set('endDate', params.endDate);
42
- if (params?.embed)
43
- query.set('embed', params.embed);
44
- const queryString = query.toString();
45
- const path = queryString
46
- ? `/organizations/${orgId}/fields/${fieldId}/fieldOperations?${queryString}`
47
- : `/organizations/${orgId}/fields/${fieldId}/fieldOperations`;
48
- return this.client.get(path, options);
49
- }
50
- /**
51
- * Get all field operations for an organization (follows pagination)
52
- */
53
- async listAll(orgId, params, options) {
54
- const query = new URLSearchParams();
55
- if (params?.operationType)
56
- query.set('operationType', params.operationType);
57
- if (params?.startDate)
58
- query.set('startDate', params.startDate);
59
- if (params?.endDate)
60
- query.set('endDate', params.endDate);
61
- if (params?.embed)
62
- query.set('embed', params.embed);
63
- const queryString = query.toString();
64
- const path = queryString
65
- ? `/organizations/${orgId}/fieldOperations?${queryString}`
66
- : `/organizations/${orgId}/fieldOperations`;
67
- return this.client.getAll(path, options);
68
- }
69
- /**
70
- * Get a specific field operation
71
- */
72
- async get(orgId, operationId, options) {
73
- return this.client.get(`/organizations/${orgId}/fieldOperations/${operationId}`, options);
74
- }
75
- // Convenience methods for common operation types
76
- /**
77
- * Get harvest data for a field
78
- */
79
- async getHarvestData(orgId, fieldId, params, options) {
80
- const query = new URLSearchParams();
81
- query.set('operationType', 'harvested');
82
- if (params?.startDate)
83
- query.set('startDate', params.startDate);
84
- if (params?.endDate)
85
- query.set('endDate', params.endDate);
86
- if (params?.embed)
87
- query.set('embed', params.embed);
88
- const queryString = query.toString();
89
- const basePath = fieldId
90
- ? `/organizations/${orgId}/fields/${fieldId}/fieldOperations`
91
- : `/organizations/${orgId}/fieldOperations`;
92
- const path = `${basePath}?${queryString}`;
93
- return this.client.getAll(path, options);
94
- }
95
- /**
96
- * Get planting data for a field
97
- */
98
- async getPlantingData(orgId, fieldId, params, options) {
99
- const query = new URLSearchParams();
100
- query.set('operationType', 'seeded');
101
- if (params?.startDate)
102
- query.set('startDate', params.startDate);
103
- if (params?.endDate)
104
- query.set('endDate', params.endDate);
105
- if (params?.embed)
106
- query.set('embed', params.embed);
107
- const queryString = query.toString();
108
- const basePath = fieldId
109
- ? `/organizations/${orgId}/fields/${fieldId}/fieldOperations`
110
- : `/organizations/${orgId}/fieldOperations`;
111
- const path = `${basePath}?${queryString}`;
112
- return this.client.getAll(path, options);
113
- }
114
- /**
115
- * Get application data for a field (fertilizer, herbicide, etc.)
116
- */
117
- async getApplicationData(orgId, fieldId, params, options) {
118
- const query = new URLSearchParams();
119
- query.set('operationType', 'applied');
120
- if (params?.startDate)
121
- query.set('startDate', params.startDate);
122
- if (params?.endDate)
123
- query.set('endDate', params.endDate);
124
- if (params?.embed)
125
- query.set('embed', params.embed);
126
- const queryString = query.toString();
127
- const basePath = fieldId
128
- ? `/organizations/${orgId}/fields/${fieldId}/fieldOperations`
129
- : `/organizations/${orgId}/fieldOperations`;
130
- const path = `${basePath}?${queryString}`;
131
- return this.client.getAll(path, options);
132
- }
133
- }
134
- //# sourceMappingURL=field-operations.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"field-operations.js","sourceRoot":"","sources":["../../src/api/field-operations.ts"],"names":[],"mappings":"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"}