c4r-aggregator-client 1.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 (271) hide show
  1. package/.idea/misc.xml +6 -0
  2. package/.idea/modules.xml +8 -0
  3. package/.idea/ts.iml +9 -0
  4. package/.idea/vcs.xml +6 -0
  5. package/.openapi-generator/FILES +91 -0
  6. package/.openapi-generator/VERSION +1 -0
  7. package/.openapi-generator-ignore +23 -0
  8. package/README.md +174 -0
  9. package/dist/apis/AdminApi.d.ts +187 -0
  10. package/dist/apis/AdminApi.js +515 -0
  11. package/dist/apis/CatalogApi.d.ts +84 -0
  12. package/dist/apis/CatalogApi.js +191 -0
  13. package/dist/apis/MeetingsApi.d.ts +98 -0
  14. package/dist/apis/MeetingsApi.js +235 -0
  15. package/dist/apis/SourcesApi.d.ts +35 -0
  16. package/dist/apis/SourcesApi.js +73 -0
  17. package/dist/apis/index.d.ts +4 -0
  18. package/dist/apis/index.js +22 -0
  19. package/dist/esm/apis/AdminApi.d.ts +187 -0
  20. package/dist/esm/apis/AdminApi.js +511 -0
  21. package/dist/esm/apis/CatalogApi.d.ts +84 -0
  22. package/dist/esm/apis/CatalogApi.js +187 -0
  23. package/dist/esm/apis/MeetingsApi.d.ts +98 -0
  24. package/dist/esm/apis/MeetingsApi.js +231 -0
  25. package/dist/esm/apis/SourcesApi.d.ts +35 -0
  26. package/dist/esm/apis/SourcesApi.js +69 -0
  27. package/dist/esm/apis/index.d.ts +4 -0
  28. package/dist/esm/apis/index.js +6 -0
  29. package/dist/esm/index.d.ts +3 -0
  30. package/dist/esm/index.js +5 -0
  31. package/dist/esm/models/AdminSource.d.ts +190 -0
  32. package/dist/esm/models/AdminSource.js +112 -0
  33. package/dist/esm/models/AuthError.d.ts +32 -0
  34. package/dist/esm/models/AuthError.js +41 -0
  35. package/dist/esm/models/CreateSourceRequest.d.ts +76 -0
  36. package/dist/esm/models/CreateSourceRequest.js +64 -0
  37. package/dist/esm/models/CreateSourceResponse.d.ts +45 -0
  38. package/dist/esm/models/CreateSourceResponse.js +46 -0
  39. package/dist/esm/models/DedupCounters.d.ts +86 -0
  40. package/dist/esm/models/DedupCounters.js +59 -0
  41. package/dist/esm/models/DedupStats.d.ts +65 -0
  42. package/dist/esm/models/DedupStats.js +54 -0
  43. package/dist/esm/models/DedupStatsLatestRun.d.ts +60 -0
  44. package/dist/esm/models/DedupStatsLatestRun.js +56 -0
  45. package/dist/esm/models/DedupStatsRecentRunsInner.d.ts +45 -0
  46. package/dist/esm/models/DedupStatsRecentRunsInner.js +46 -0
  47. package/dist/esm/models/FeedValidationError.d.ts +54 -0
  48. package/dist/esm/models/FeedValidationError.js +54 -0
  49. package/dist/esm/models/IngestRun.d.ts +107 -0
  50. package/dist/esm/models/IngestRun.js +71 -0
  51. package/dist/esm/models/MapFeature.d.ts +46 -0
  52. package/dist/esm/models/MapFeature.js +47 -0
  53. package/dist/esm/models/MapFeatureCollection.d.ts +45 -0
  54. package/dist/esm/models/MapFeatureCollection.js +46 -0
  55. package/dist/esm/models/MapFeatureGeometry.d.ts +38 -0
  56. package/dist/esm/models/MapFeatureGeometry.js +43 -0
  57. package/dist/esm/models/MapFeatureProperties.d.ts +69 -0
  58. package/dist/esm/models/MapFeatureProperties.js +54 -0
  59. package/dist/esm/models/MapMeeting.d.ts +50 -0
  60. package/dist/esm/models/MapMeeting.js +47 -0
  61. package/dist/esm/models/Meeting.d.ts +272 -0
  62. package/dist/esm/models/Meeting.js +131 -0
  63. package/dist/esm/models/MeetingPage.d.ts +47 -0
  64. package/dist/esm/models/MeetingPage.js +48 -0
  65. package/dist/esm/models/MeetingPageLinks.d.ts +50 -0
  66. package/dist/esm/models/MeetingPageLinks.js +47 -0
  67. package/dist/esm/models/MeetingPageMeta.d.ts +50 -0
  68. package/dist/esm/models/MeetingPageMeta.js +47 -0
  69. package/dist/esm/models/MeetingType.d.ts +56 -0
  70. package/dist/esm/models/MeetingType.js +49 -0
  71. package/dist/esm/models/MeetingsFilterError.d.ts +44 -0
  72. package/dist/esm/models/MeetingsFilterError.js +45 -0
  73. package/dist/esm/models/Program.d.ts +44 -0
  74. package/dist/esm/models/Program.js +45 -0
  75. package/dist/esm/models/PublicSource.d.ts +113 -0
  76. package/dist/esm/models/PublicSource.js +80 -0
  77. package/dist/esm/models/SourceEnvelope.d.ts +33 -0
  78. package/dist/esm/models/SourceEnvelope.js +42 -0
  79. package/dist/esm/models/SourceRefreshResponse.d.ts +39 -0
  80. package/dist/esm/models/SourceRefreshResponse.js +44 -0
  81. package/dist/esm/models/Stats.d.ts +86 -0
  82. package/dist/esm/models/Stats.js +63 -0
  83. package/dist/esm/models/StatsGroups.d.ts +32 -0
  84. package/dist/esm/models/StatsGroups.js +41 -0
  85. package/dist/esm/models/StatsLocations.d.ts +38 -0
  86. package/dist/esm/models/StatsLocations.js +43 -0
  87. package/dist/esm/models/StatsMeetingTypes.d.ts +32 -0
  88. package/dist/esm/models/StatsMeetingTypes.js +41 -0
  89. package/dist/esm/models/StatsMeetings.d.ts +68 -0
  90. package/dist/esm/models/StatsMeetings.js +51 -0
  91. package/dist/esm/models/StatsProgramsBreakdownInner.d.ts +62 -0
  92. package/dist/esm/models/StatsProgramsBreakdownInner.js +51 -0
  93. package/dist/esm/models/StatsSources.d.ts +47 -0
  94. package/dist/esm/models/StatsSources.js +46 -0
  95. package/dist/esm/models/StatsSourcesTopByMeetingCountInner.d.ts +44 -0
  96. package/dist/esm/models/StatsSourcesTopByMeetingCountInner.js +45 -0
  97. package/dist/esm/models/StoreSourceValidationError.d.ts +23 -0
  98. package/dist/esm/models/StoreSourceValidationError.js +51 -0
  99. package/dist/esm/models/UpdateSourceRequest.d.ts +70 -0
  100. package/dist/esm/models/UpdateSourceRequest.js +58 -0
  101. package/dist/esm/models/ValidationError.d.ts +40 -0
  102. package/dist/esm/models/ValidationError.js +43 -0
  103. package/dist/esm/models/index.d.ts +36 -0
  104. package/dist/esm/models/index.js +38 -0
  105. package/dist/esm/runtime.d.ts +184 -0
  106. package/dist/esm/runtime.js +349 -0
  107. package/dist/index.d.ts +3 -0
  108. package/dist/index.js +21 -0
  109. package/dist/models/AdminSource.d.ts +190 -0
  110. package/dist/models/AdminSource.js +120 -0
  111. package/dist/models/AuthError.d.ts +32 -0
  112. package/dist/models/AuthError.js +48 -0
  113. package/dist/models/CreateSourceRequest.d.ts +76 -0
  114. package/dist/models/CreateSourceRequest.js +72 -0
  115. package/dist/models/CreateSourceResponse.d.ts +45 -0
  116. package/dist/models/CreateSourceResponse.js +53 -0
  117. package/dist/models/DedupCounters.d.ts +86 -0
  118. package/dist/models/DedupCounters.js +66 -0
  119. package/dist/models/DedupStats.d.ts +65 -0
  120. package/dist/models/DedupStats.js +61 -0
  121. package/dist/models/DedupStatsLatestRun.d.ts +60 -0
  122. package/dist/models/DedupStatsLatestRun.js +64 -0
  123. package/dist/models/DedupStatsRecentRunsInner.d.ts +45 -0
  124. package/dist/models/DedupStatsRecentRunsInner.js +53 -0
  125. package/dist/models/FeedValidationError.d.ts +54 -0
  126. package/dist/models/FeedValidationError.js +62 -0
  127. package/dist/models/IngestRun.d.ts +107 -0
  128. package/dist/models/IngestRun.js +79 -0
  129. package/dist/models/MapFeature.d.ts +46 -0
  130. package/dist/models/MapFeature.js +54 -0
  131. package/dist/models/MapFeatureCollection.d.ts +45 -0
  132. package/dist/models/MapFeatureCollection.js +53 -0
  133. package/dist/models/MapFeatureGeometry.d.ts +38 -0
  134. package/dist/models/MapFeatureGeometry.js +50 -0
  135. package/dist/models/MapFeatureProperties.d.ts +69 -0
  136. package/dist/models/MapFeatureProperties.js +61 -0
  137. package/dist/models/MapMeeting.d.ts +50 -0
  138. package/dist/models/MapMeeting.js +54 -0
  139. package/dist/models/Meeting.d.ts +272 -0
  140. package/dist/models/Meeting.js +139 -0
  141. package/dist/models/MeetingPage.d.ts +47 -0
  142. package/dist/models/MeetingPage.js +55 -0
  143. package/dist/models/MeetingPageLinks.d.ts +50 -0
  144. package/dist/models/MeetingPageLinks.js +54 -0
  145. package/dist/models/MeetingPageMeta.d.ts +50 -0
  146. package/dist/models/MeetingPageMeta.js +54 -0
  147. package/dist/models/MeetingType.d.ts +56 -0
  148. package/dist/models/MeetingType.js +56 -0
  149. package/dist/models/MeetingsFilterError.d.ts +44 -0
  150. package/dist/models/MeetingsFilterError.js +52 -0
  151. package/dist/models/Program.d.ts +44 -0
  152. package/dist/models/Program.js +52 -0
  153. package/dist/models/PublicSource.d.ts +113 -0
  154. package/dist/models/PublicSource.js +88 -0
  155. package/dist/models/SourceEnvelope.d.ts +33 -0
  156. package/dist/models/SourceEnvelope.js +49 -0
  157. package/dist/models/SourceRefreshResponse.d.ts +39 -0
  158. package/dist/models/SourceRefreshResponse.js +51 -0
  159. package/dist/models/Stats.d.ts +86 -0
  160. package/dist/models/Stats.js +70 -0
  161. package/dist/models/StatsGroups.d.ts +32 -0
  162. package/dist/models/StatsGroups.js +48 -0
  163. package/dist/models/StatsLocations.d.ts +38 -0
  164. package/dist/models/StatsLocations.js +50 -0
  165. package/dist/models/StatsMeetingTypes.d.ts +32 -0
  166. package/dist/models/StatsMeetingTypes.js +48 -0
  167. package/dist/models/StatsMeetings.d.ts +68 -0
  168. package/dist/models/StatsMeetings.js +58 -0
  169. package/dist/models/StatsProgramsBreakdownInner.d.ts +62 -0
  170. package/dist/models/StatsProgramsBreakdownInner.js +58 -0
  171. package/dist/models/StatsSources.d.ts +47 -0
  172. package/dist/models/StatsSources.js +53 -0
  173. package/dist/models/StatsSourcesTopByMeetingCountInner.d.ts +44 -0
  174. package/dist/models/StatsSourcesTopByMeetingCountInner.js +52 -0
  175. package/dist/models/StoreSourceValidationError.d.ts +23 -0
  176. package/dist/models/StoreSourceValidationError.js +57 -0
  177. package/dist/models/UpdateSourceRequest.d.ts +70 -0
  178. package/dist/models/UpdateSourceRequest.js +66 -0
  179. package/dist/models/ValidationError.d.ts +40 -0
  180. package/dist/models/ValidationError.js +50 -0
  181. package/dist/models/index.d.ts +36 -0
  182. package/dist/models/index.js +54 -0
  183. package/dist/runtime.d.ts +184 -0
  184. package/dist/runtime.js +365 -0
  185. package/docs/AdminApi.md +734 -0
  186. package/docs/AdminSource.md +77 -0
  187. package/docs/AuthError.md +34 -0
  188. package/docs/CatalogApi.md +270 -0
  189. package/docs/CreateSourceRequest.md +46 -0
  190. package/docs/CreateSourceResponse.md +38 -0
  191. package/docs/DedupCounters.md +53 -0
  192. package/docs/DedupStats.md +45 -0
  193. package/docs/DedupStatsLatestRun.md +41 -0
  194. package/docs/DedupStatsRecentRunsInner.md +39 -0
  195. package/docs/FeedValidationError.md +39 -0
  196. package/docs/IngestRun.md +57 -0
  197. package/docs/MapFeature.md +39 -0
  198. package/docs/MapFeatureCollection.md +39 -0
  199. package/docs/MapFeatureGeometry.md +37 -0
  200. package/docs/MapFeatureProperties.md +47 -0
  201. package/docs/MapMeeting.md +41 -0
  202. package/docs/Meeting.md +109 -0
  203. package/docs/MeetingPage.md +39 -0
  204. package/docs/MeetingPageLinks.md +41 -0
  205. package/docs/MeetingPageMeta.md +41 -0
  206. package/docs/MeetingType.md +42 -0
  207. package/docs/MeetingsApi.md +323 -0
  208. package/docs/MeetingsFilterError.md +39 -0
  209. package/docs/Program.md +38 -0
  210. package/docs/PublicSource.md +55 -0
  211. package/docs/SourceEnvelope.md +35 -0
  212. package/docs/SourceRefreshResponse.md +37 -0
  213. package/docs/SourcesApi.md +76 -0
  214. package/docs/Stats.md +51 -0
  215. package/docs/StatsGroups.md +35 -0
  216. package/docs/StatsLocations.md +37 -0
  217. package/docs/StatsMeetingTypes.md +35 -0
  218. package/docs/StatsMeetings.md +45 -0
  219. package/docs/StatsProgramsBreakdownInner.md +45 -0
  220. package/docs/StatsSources.md +39 -0
  221. package/docs/StatsSourcesTopByMeetingCountInner.md +39 -0
  222. package/docs/StoreSourceValidationError.md +41 -0
  223. package/docs/UpdateSourceRequest.md +44 -0
  224. package/docs/ValidationError.md +36 -0
  225. package/package.json +21 -0
  226. package/src/apis/AdminApi.ts +659 -0
  227. package/src/apis/CatalogApi.ts +220 -0
  228. package/src/apis/MeetingsApi.ts +305 -0
  229. package/src/apis/SourcesApi.ts +74 -0
  230. package/src/apis/index.ts +6 -0
  231. package/src/index.ts +5 -0
  232. package/src/models/AdminSource.ts +270 -0
  233. package/src/models/AuthError.ts +65 -0
  234. package/src/models/CreateSourceRequest.ts +126 -0
  235. package/src/models/CreateSourceResponse.ts +89 -0
  236. package/src/models/DedupCounters.ts +137 -0
  237. package/src/models/DedupStats.ts +127 -0
  238. package/src/models/DedupStatsLatestRun.ts +109 -0
  239. package/src/models/DedupStatsRecentRunsInner.ts +89 -0
  240. package/src/models/FeedValidationError.ts +94 -0
  241. package/src/models/IngestRun.ts +165 -0
  242. package/src/models/MapFeature.ts +96 -0
  243. package/src/models/MapFeatureCollection.ts +89 -0
  244. package/src/models/MapFeatureGeometry.ts +73 -0
  245. package/src/models/MapFeatureProperties.ts +121 -0
  246. package/src/models/MapMeeting.ts +89 -0
  247. package/src/models/Meeting.ts +383 -0
  248. package/src/models/MeetingPage.ts +103 -0
  249. package/src/models/MeetingPageLinks.ts +89 -0
  250. package/src/models/MeetingPageMeta.ts +89 -0
  251. package/src/models/MeetingType.ts +97 -0
  252. package/src/models/MeetingsFilterError.ts +81 -0
  253. package/src/models/Program.ts +81 -0
  254. package/src/models/PublicSource.ts +170 -0
  255. package/src/models/SourceEnvelope.ts +73 -0
  256. package/src/models/SourceRefreshResponse.ts +81 -0
  257. package/src/models/Stats.ts +172 -0
  258. package/src/models/StatsGroups.ts +65 -0
  259. package/src/models/StatsLocations.ts +73 -0
  260. package/src/models/StatsMeetingTypes.ts +65 -0
  261. package/src/models/StatsMeetings.ts +105 -0
  262. package/src/models/StatsProgramsBreakdownInner.ts +105 -0
  263. package/src/models/StatsSources.ts +89 -0
  264. package/src/models/StatsSourcesTopByMeetingCountInner.ts +81 -0
  265. package/src/models/StoreSourceValidationError.ts +76 -0
  266. package/src/models/UpdateSourceRequest.ts +116 -0
  267. package/src/models/ValidationError.ts +73 -0
  268. package/src/models/index.ts +38 -0
  269. package/src/runtime.ts +449 -0
  270. package/tsconfig.esm.json +7 -0
  271. package/tsconfig.json +16 -0
@@ -0,0 +1,270 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /**
4
+ * C4R Aggregator API
5
+ * Aggregator for public [12-Step Meeting List](https://wordpress.org/plugins/12-step-meeting-list/) WordPress feeds. Ingests registered sources on a schedule, normalizes duplicates across feeds, and exposes a unified read API whose responses follow the [Meeting Guide API spec](https://github.com/code4recovery/spec) for drop-in client compatibility. - **Public endpoints** return Meeting Guide-shape data. `/meetings` requires at least one filter (bounding box, radius, region, source, program, day, or type) and is cursor-paginated. - **Per-source and per-region feeds** return bare JSON arrays — safe drop-in replacements for the upstream TSML endpoint. - **Admin endpoints** under `/admin/_*` require a Sanctum bearer token.
6
+ *
7
+ * The version of the OpenAPI document: 1.0.0
8
+ *
9
+ *
10
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
11
+ * https://openapi-generator.tech
12
+ * Do not edit the class manually.
13
+ */
14
+
15
+ import { mapValues } from '../runtime';
16
+ /**
17
+ * Full admin view of a source, including failure state, backoff, and all entity metadata.
18
+ * @export
19
+ * @interface AdminSource
20
+ */
21
+ export interface AdminSource {
22
+ /**
23
+ *
24
+ * @type {number}
25
+ * @memberof AdminSource
26
+ */
27
+ id?: number;
28
+ /**
29
+ *
30
+ * @type {string}
31
+ * @memberof AdminSource
32
+ */
33
+ program?: string;
34
+ /**
35
+ *
36
+ * @type {string}
37
+ * @memberof AdminSource
38
+ */
39
+ name?: string;
40
+ /**
41
+ *
42
+ * @type {string}
43
+ * @memberof AdminSource
44
+ */
45
+ feedUrl?: string;
46
+ /**
47
+ *
48
+ * @type {AdminSourceFeedKindEnum}
49
+ * @memberof AdminSource
50
+ */
51
+ feedKind?: AdminSourceFeedKindEnum;
52
+ /**
53
+ *
54
+ * @type {AdminSourceStateEnum}
55
+ * @memberof AdminSource
56
+ */
57
+ state?: AdminSourceStateEnum;
58
+ /**
59
+ *
60
+ * @type {number}
61
+ * @memberof AdminSource
62
+ */
63
+ fetchIntervalMinutes?: number;
64
+ /**
65
+ *
66
+ * @type {Date}
67
+ * @memberof AdminSource
68
+ */
69
+ lastFetchedAt?: Date | null;
70
+ /**
71
+ *
72
+ * @type {Date}
73
+ * @memberof AdminSource
74
+ */
75
+ lastSuccessAt?: Date | null;
76
+ /**
77
+ *
78
+ * @type {string}
79
+ * @memberof AdminSource
80
+ */
81
+ lastError?: string | null;
82
+ /**
83
+ *
84
+ * @type {AdminSourceLastErrorTypeEnum}
85
+ * @memberof AdminSource
86
+ */
87
+ lastErrorType?: AdminSourceLastErrorTypeEnum | null;
88
+ /**
89
+ *
90
+ * @type {number}
91
+ * @memberof AdminSource
92
+ */
93
+ consecutiveFailures?: number;
94
+ /**
95
+ *
96
+ * @type {Date}
97
+ * @memberof AdminSource
98
+ */
99
+ nextFetchAt?: Date | null;
100
+ /**
101
+ *
102
+ * @type {number}
103
+ * @memberof AdminSource
104
+ */
105
+ lastSuccessfulMeetingCount?: number | null;
106
+ /**
107
+ *
108
+ * @type {number}
109
+ * @memberof AdminSource
110
+ */
111
+ daysSinceLastSuccess?: number | null;
112
+ /**
113
+ *
114
+ * @type {Date}
115
+ * @memberof AdminSource
116
+ */
117
+ pausedAt?: Date | null;
118
+ /**
119
+ *
120
+ * @type {Date}
121
+ * @memberof AdminSource
122
+ */
123
+ dormantAt?: Date | null;
124
+ /**
125
+ *
126
+ * @type {Date}
127
+ * @memberof AdminSource
128
+ */
129
+ deletedAt?: Date | null;
130
+ /**
131
+ *
132
+ * @type {string}
133
+ * @memberof AdminSource
134
+ */
135
+ entity?: string | null;
136
+ /**
137
+ *
138
+ * @type {string}
139
+ * @memberof AdminSource
140
+ */
141
+ entityEmail?: string | null;
142
+ /**
143
+ *
144
+ * @type {string}
145
+ * @memberof AdminSource
146
+ */
147
+ entityUrl?: string | null;
148
+ /**
149
+ *
150
+ * @type {string}
151
+ * @memberof AdminSource
152
+ */
153
+ notificationWebhookUrl?: string | null;
154
+ }
155
+
156
+
157
+ /**
158
+ * @export
159
+ */
160
+ export const AdminSourceFeedKindEnum = {
161
+ TsmlJson: 'tsml_json',
162
+ GoogleSheet: 'google_sheet'
163
+ } as const;
164
+ export type AdminSourceFeedKindEnum = typeof AdminSourceFeedKindEnum[keyof typeof AdminSourceFeedKindEnum];
165
+
166
+ /**
167
+ * @export
168
+ */
169
+ export const AdminSourceStateEnum = {
170
+ Pending: 'pending',
171
+ Active: 'active',
172
+ Degraded: 'degraded',
173
+ Failing: 'failing',
174
+ Dormant: 'dormant',
175
+ Paused: 'paused',
176
+ Deleted: 'deleted'
177
+ } as const;
178
+ export type AdminSourceStateEnum = typeof AdminSourceStateEnum[keyof typeof AdminSourceStateEnum];
179
+
180
+ /**
181
+ * @export
182
+ */
183
+ export const AdminSourceLastErrorTypeEnum = {
184
+ Network: 'network',
185
+ Http: 'http',
186
+ Parse: 'parse',
187
+ Empty: 'empty',
188
+ Suspicious: 'suspicious'
189
+ } as const;
190
+ export type AdminSourceLastErrorTypeEnum = typeof AdminSourceLastErrorTypeEnum[keyof typeof AdminSourceLastErrorTypeEnum];
191
+
192
+
193
+ /**
194
+ * Check if a given object implements the AdminSource interface.
195
+ */
196
+ export function instanceOfAdminSource(value: object): value is AdminSource {
197
+ return true;
198
+ }
199
+
200
+ export function AdminSourceFromJSON(json: any): AdminSource {
201
+ return AdminSourceFromJSONTyped(json, false);
202
+ }
203
+
204
+ export function AdminSourceFromJSONTyped(json: any, ignoreDiscriminator: boolean): AdminSource {
205
+ if (json == null) {
206
+ return json;
207
+ }
208
+ return {
209
+
210
+ 'id': json['id'] == null ? undefined : json['id'],
211
+ 'program': json['program'] == null ? undefined : json['program'],
212
+ 'name': json['name'] == null ? undefined : json['name'],
213
+ 'feedUrl': json['feed_url'] == null ? undefined : json['feed_url'],
214
+ 'feedKind': json['feed_kind'] == null ? undefined : json['feed_kind'],
215
+ 'state': json['state'] == null ? undefined : json['state'],
216
+ 'fetchIntervalMinutes': json['fetch_interval_minutes'] == null ? undefined : json['fetch_interval_minutes'],
217
+ 'lastFetchedAt': json['last_fetched_at'] == null ? undefined : (new Date(json['last_fetched_at'])),
218
+ 'lastSuccessAt': json['last_success_at'] == null ? undefined : (new Date(json['last_success_at'])),
219
+ 'lastError': json['last_error'] == null ? undefined : json['last_error'],
220
+ 'lastErrorType': json['last_error_type'] == null ? undefined : json['last_error_type'],
221
+ 'consecutiveFailures': json['consecutive_failures'] == null ? undefined : json['consecutive_failures'],
222
+ 'nextFetchAt': json['next_fetch_at'] == null ? undefined : (new Date(json['next_fetch_at'])),
223
+ 'lastSuccessfulMeetingCount': json['last_successful_meeting_count'] == null ? undefined : json['last_successful_meeting_count'],
224
+ 'daysSinceLastSuccess': json['days_since_last_success'] == null ? undefined : json['days_since_last_success'],
225
+ 'pausedAt': json['paused_at'] == null ? undefined : (new Date(json['paused_at'])),
226
+ 'dormantAt': json['dormant_at'] == null ? undefined : (new Date(json['dormant_at'])),
227
+ 'deletedAt': json['deleted_at'] == null ? undefined : (new Date(json['deleted_at'])),
228
+ 'entity': json['entity'] == null ? undefined : json['entity'],
229
+ 'entityEmail': json['entity_email'] == null ? undefined : json['entity_email'],
230
+ 'entityUrl': json['entity_url'] == null ? undefined : json['entity_url'],
231
+ 'notificationWebhookUrl': json['notification_webhook_url'] == null ? undefined : json['notification_webhook_url'],
232
+ };
233
+ }
234
+
235
+ export function AdminSourceToJSON(json: any): AdminSource {
236
+ return AdminSourceToJSONTyped(json, false);
237
+ }
238
+
239
+ export function AdminSourceToJSONTyped(value?: AdminSource | null, ignoreDiscriminator: boolean = false): any {
240
+ if (value == null) {
241
+ return value;
242
+ }
243
+
244
+ return {
245
+
246
+ 'id': value['id'],
247
+ 'program': value['program'],
248
+ 'name': value['name'],
249
+ 'feed_url': value['feedUrl'],
250
+ 'feed_kind': value['feedKind'],
251
+ 'state': value['state'],
252
+ 'fetch_interval_minutes': value['fetchIntervalMinutes'],
253
+ 'last_fetched_at': value['lastFetchedAt'] == null ? value['lastFetchedAt'] : value['lastFetchedAt'].toISOString(),
254
+ 'last_success_at': value['lastSuccessAt'] == null ? value['lastSuccessAt'] : value['lastSuccessAt'].toISOString(),
255
+ 'last_error': value['lastError'],
256
+ 'last_error_type': value['lastErrorType'],
257
+ 'consecutive_failures': value['consecutiveFailures'],
258
+ 'next_fetch_at': value['nextFetchAt'] == null ? value['nextFetchAt'] : value['nextFetchAt'].toISOString(),
259
+ 'last_successful_meeting_count': value['lastSuccessfulMeetingCount'],
260
+ 'days_since_last_success': value['daysSinceLastSuccess'],
261
+ 'paused_at': value['pausedAt'] == null ? value['pausedAt'] : value['pausedAt'].toISOString(),
262
+ 'dormant_at': value['dormantAt'] == null ? value['dormantAt'] : value['dormantAt'].toISOString(),
263
+ 'deleted_at': value['deletedAt'] == null ? value['deletedAt'] : value['deletedAt'].toISOString(),
264
+ 'entity': value['entity'],
265
+ 'entity_email': value['entityEmail'],
266
+ 'entity_url': value['entityUrl'],
267
+ 'notification_webhook_url': value['notificationWebhookUrl'],
268
+ };
269
+ }
270
+
@@ -0,0 +1,65 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /**
4
+ * C4R Aggregator API
5
+ * Aggregator for public [12-Step Meeting List](https://wordpress.org/plugins/12-step-meeting-list/) WordPress feeds. Ingests registered sources on a schedule, normalizes duplicates across feeds, and exposes a unified read API whose responses follow the [Meeting Guide API spec](https://github.com/code4recovery/spec) for drop-in client compatibility. - **Public endpoints** return Meeting Guide-shape data. `/meetings` requires at least one filter (bounding box, radius, region, source, program, day, or type) and is cursor-paginated. - **Per-source and per-region feeds** return bare JSON arrays — safe drop-in replacements for the upstream TSML endpoint. - **Admin endpoints** under `/admin/_*` require a Sanctum bearer token.
6
+ *
7
+ * The version of the OpenAPI document: 1.0.0
8
+ *
9
+ *
10
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
11
+ * https://openapi-generator.tech
12
+ * Do not edit the class manually.
13
+ */
14
+
15
+ import { mapValues } from '../runtime';
16
+ /**
17
+ *
18
+ * @export
19
+ * @interface AuthError
20
+ */
21
+ export interface AuthError {
22
+ /**
23
+ *
24
+ * @type {string}
25
+ * @memberof AuthError
26
+ */
27
+ message?: string;
28
+ }
29
+
30
+ /**
31
+ * Check if a given object implements the AuthError interface.
32
+ */
33
+ export function instanceOfAuthError(value: object): value is AuthError {
34
+ return true;
35
+ }
36
+
37
+ export function AuthErrorFromJSON(json: any): AuthError {
38
+ return AuthErrorFromJSONTyped(json, false);
39
+ }
40
+
41
+ export function AuthErrorFromJSONTyped(json: any, ignoreDiscriminator: boolean): AuthError {
42
+ if (json == null) {
43
+ return json;
44
+ }
45
+ return {
46
+
47
+ 'message': json['message'] == null ? undefined : json['message'],
48
+ };
49
+ }
50
+
51
+ export function AuthErrorToJSON(json: any): AuthError {
52
+ return AuthErrorToJSONTyped(json, false);
53
+ }
54
+
55
+ export function AuthErrorToJSONTyped(value?: AuthError | null, ignoreDiscriminator: boolean = false): any {
56
+ if (value == null) {
57
+ return value;
58
+ }
59
+
60
+ return {
61
+
62
+ 'message': value['message'],
63
+ };
64
+ }
65
+
@@ -0,0 +1,126 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /**
4
+ * C4R Aggregator API
5
+ * Aggregator for public [12-Step Meeting List](https://wordpress.org/plugins/12-step-meeting-list/) WordPress feeds. Ingests registered sources on a schedule, normalizes duplicates across feeds, and exposes a unified read API whose responses follow the [Meeting Guide API spec](https://github.com/code4recovery/spec) for drop-in client compatibility. - **Public endpoints** return Meeting Guide-shape data. `/meetings` requires at least one filter (bounding box, radius, region, source, program, day, or type) and is cursor-paginated. - **Per-source and per-region feeds** return bare JSON arrays — safe drop-in replacements for the upstream TSML endpoint. - **Admin endpoints** under `/admin/_*` require a Sanctum bearer token.
6
+ *
7
+ * The version of the OpenAPI document: 1.0.0
8
+ *
9
+ *
10
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
11
+ * https://openapi-generator.tech
12
+ * Do not edit the class manually.
13
+ */
14
+
15
+ import { mapValues } from '../runtime';
16
+ /**
17
+ *
18
+ * @export
19
+ * @interface CreateSourceRequest
20
+ */
21
+ export interface CreateSourceRequest {
22
+ /**
23
+ *
24
+ * @type {string}
25
+ * @memberof CreateSourceRequest
26
+ */
27
+ feedUrl: string;
28
+ /**
29
+ *
30
+ * @type {string}
31
+ * @memberof CreateSourceRequest
32
+ */
33
+ program: string;
34
+ /**
35
+ * `tsml_json` (default) fetches an upstream Meeting Guide JSON feed. `google_sheet` reads a public Google Sheet backing a tsml-ui front-end (the `data-src` on `<div id="tsml-ui">`); the sheet is fetched via the anonymous gviz CSV export. `google_sheet` sources are forced to run no more than once per day.
36
+ * @type {CreateSourceRequestFeedKindEnum}
37
+ * @memberof CreateSourceRequest
38
+ */
39
+ feedKind?: CreateSourceRequestFeedKindEnum;
40
+ /**
41
+ *
42
+ * @type {string}
43
+ * @memberof CreateSourceRequest
44
+ */
45
+ name?: string | null;
46
+ /**
47
+ * Appended as `?key=…` on each fetch
48
+ * @type {string}
49
+ * @memberof CreateSourceRequest
50
+ */
51
+ sharingKey?: string | null;
52
+ /**
53
+ *
54
+ * @type {number}
55
+ * @memberof CreateSourceRequest
56
+ */
57
+ fetchIntervalMinutes?: number;
58
+ /**
59
+ *
60
+ * @type {string}
61
+ * @memberof CreateSourceRequest
62
+ */
63
+ notificationWebhookUrl?: string | null;
64
+ }
65
+
66
+
67
+ /**
68
+ * @export
69
+ */
70
+ export const CreateSourceRequestFeedKindEnum = {
71
+ TsmlJson: 'tsml_json',
72
+ GoogleSheet: 'google_sheet'
73
+ } as const;
74
+ export type CreateSourceRequestFeedKindEnum = typeof CreateSourceRequestFeedKindEnum[keyof typeof CreateSourceRequestFeedKindEnum];
75
+
76
+
77
+ /**
78
+ * Check if a given object implements the CreateSourceRequest interface.
79
+ */
80
+ export function instanceOfCreateSourceRequest(value: object): value is CreateSourceRequest {
81
+ if ((!('feedUrl' in value) && !('feed_url' in value)) || (value['feedUrl'] === undefined && value['feed_url'] === undefined)) return false;
82
+ if (!('program' in value) || value['program'] === undefined) return false;
83
+ return true;
84
+ }
85
+
86
+ export function CreateSourceRequestFromJSON(json: any): CreateSourceRequest {
87
+ return CreateSourceRequestFromJSONTyped(json, false);
88
+ }
89
+
90
+ export function CreateSourceRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): CreateSourceRequest {
91
+ if (json == null) {
92
+ return json;
93
+ }
94
+ return {
95
+
96
+ 'feedUrl': json['feed_url'],
97
+ 'program': json['program'],
98
+ 'feedKind': json['feed_kind'] == null ? undefined : json['feed_kind'],
99
+ 'name': json['name'] == null ? undefined : json['name'],
100
+ 'sharingKey': json['sharing_key'] == null ? undefined : json['sharing_key'],
101
+ 'fetchIntervalMinutes': json['fetch_interval_minutes'] == null ? undefined : json['fetch_interval_minutes'],
102
+ 'notificationWebhookUrl': json['notification_webhook_url'] == null ? undefined : json['notification_webhook_url'],
103
+ };
104
+ }
105
+
106
+ export function CreateSourceRequestToJSON(json: any): CreateSourceRequest {
107
+ return CreateSourceRequestToJSONTyped(json, false);
108
+ }
109
+
110
+ export function CreateSourceRequestToJSONTyped(value?: CreateSourceRequest | null, ignoreDiscriminator: boolean = false): any {
111
+ if (value == null) {
112
+ return value;
113
+ }
114
+
115
+ return {
116
+
117
+ 'feed_url': value['feedUrl'],
118
+ 'program': value['program'],
119
+ 'feed_kind': value['feedKind'],
120
+ 'name': value['name'],
121
+ 'sharing_key': value['sharingKey'],
122
+ 'fetch_interval_minutes': value['fetchIntervalMinutes'],
123
+ 'notification_webhook_url': value['notificationWebhookUrl'],
124
+ };
125
+ }
126
+
@@ -0,0 +1,89 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /**
4
+ * C4R Aggregator API
5
+ * Aggregator for public [12-Step Meeting List](https://wordpress.org/plugins/12-step-meeting-list/) WordPress feeds. Ingests registered sources on a schedule, normalizes duplicates across feeds, and exposes a unified read API whose responses follow the [Meeting Guide API spec](https://github.com/code4recovery/spec) for drop-in client compatibility. - **Public endpoints** return Meeting Guide-shape data. `/meetings` requires at least one filter (bounding box, radius, region, source, program, day, or type) and is cursor-paginated. - **Per-source and per-region feeds** return bare JSON arrays — safe drop-in replacements for the upstream TSML endpoint. - **Admin endpoints** under `/admin/_*` require a Sanctum bearer token.
6
+ *
7
+ * The version of the OpenAPI document: 1.0.0
8
+ *
9
+ *
10
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
11
+ * https://openapi-generator.tech
12
+ * Do not edit the class manually.
13
+ */
14
+
15
+ import { mapValues } from '../runtime';
16
+ import type { AdminSource } from './AdminSource';
17
+ import {
18
+ AdminSourceFromJSON,
19
+ AdminSourceFromJSONTyped,
20
+ AdminSourceToJSON,
21
+ AdminSourceToJSONTyped,
22
+ } from './AdminSource';
23
+
24
+ /**
25
+ *
26
+ * @export
27
+ * @interface CreateSourceResponse
28
+ */
29
+ export interface CreateSourceResponse {
30
+ /**
31
+ *
32
+ * @type {AdminSource}
33
+ * @memberof CreateSourceResponse
34
+ */
35
+ source?: AdminSource;
36
+ /**
37
+ *
38
+ * @type {number}
39
+ * @memberof CreateSourceResponse
40
+ */
41
+ totalMeetingsFound?: number;
42
+ /**
43
+ * Up to 10 raw upstream rows from the validated feed
44
+ * @type {Array<object>}
45
+ * @memberof CreateSourceResponse
46
+ */
47
+ sampleMeetings?: Array<object>;
48
+ }
49
+
50
+ /**
51
+ * Check if a given object implements the CreateSourceResponse interface.
52
+ */
53
+ export function instanceOfCreateSourceResponse(value: object): value is CreateSourceResponse {
54
+ return true;
55
+ }
56
+
57
+ export function CreateSourceResponseFromJSON(json: any): CreateSourceResponse {
58
+ return CreateSourceResponseFromJSONTyped(json, false);
59
+ }
60
+
61
+ export function CreateSourceResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): CreateSourceResponse {
62
+ if (json == null) {
63
+ return json;
64
+ }
65
+ return {
66
+
67
+ 'source': json['source'] == null ? undefined : AdminSourceFromJSON(json['source']),
68
+ 'totalMeetingsFound': json['total_meetings_found'] == null ? undefined : json['total_meetings_found'],
69
+ 'sampleMeetings': json['sample_meetings'] == null ? undefined : json['sample_meetings'],
70
+ };
71
+ }
72
+
73
+ export function CreateSourceResponseToJSON(json: any): CreateSourceResponse {
74
+ return CreateSourceResponseToJSONTyped(json, false);
75
+ }
76
+
77
+ export function CreateSourceResponseToJSONTyped(value?: CreateSourceResponse | null, ignoreDiscriminator: boolean = false): any {
78
+ if (value == null) {
79
+ return value;
80
+ }
81
+
82
+ return {
83
+
84
+ 'source': AdminSourceToJSON(value['source']),
85
+ 'total_meetings_found': value['totalMeetingsFound'],
86
+ 'sample_meetings': value['sampleMeetings'],
87
+ };
88
+ }
89
+
@@ -0,0 +1,137 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /**
4
+ * C4R Aggregator API
5
+ * Aggregator for public [12-Step Meeting List](https://wordpress.org/plugins/12-step-meeting-list/) WordPress feeds. Ingests registered sources on a schedule, normalizes duplicates across feeds, and exposes a unified read API whose responses follow the [Meeting Guide API spec](https://github.com/code4recovery/spec) for drop-in client compatibility. - **Public endpoints** return Meeting Guide-shape data. `/meetings` requires at least one filter (bounding box, radius, region, source, program, day, or type) and is cursor-paginated. - **Per-source and per-region feeds** return bare JSON arrays — safe drop-in replacements for the upstream TSML endpoint. - **Admin endpoints** under `/admin/_*` require a Sanctum bearer token.
6
+ *
7
+ * The version of the OpenAPI document: 1.0.0
8
+ *
9
+ *
10
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
11
+ * https://openapi-generator.tech
12
+ * Do not edit the class manually.
13
+ */
14
+
15
+ import { mapValues } from '../runtime';
16
+ /**
17
+ * Per-layer dedup counters from a single ingest run or summed across multiple runs.
18
+ * @export
19
+ * @interface DedupCounters
20
+ */
21
+ export interface DedupCounters {
22
+ /**
23
+ *
24
+ * @type {number}
25
+ * @memberof DedupCounters
26
+ */
27
+ locationsCreated?: number;
28
+ /**
29
+ *
30
+ * @type {number}
31
+ * @memberof DedupCounters
32
+ */
33
+ locationsMatchedByUpstreamId?: number;
34
+ /**
35
+ *
36
+ * @type {number}
37
+ * @memberof DedupCounters
38
+ */
39
+ locationsMatchedByAddress?: number;
40
+ /**
41
+ *
42
+ * @type {number}
43
+ * @memberof DedupCounters
44
+ */
45
+ locationsMatchedByProximity?: number;
46
+ /**
47
+ *
48
+ * @type {number}
49
+ * @memberof DedupCounters
50
+ */
51
+ groupsCreated?: number;
52
+ /**
53
+ *
54
+ * @type {number}
55
+ * @memberof DedupCounters
56
+ */
57
+ groupsMatchedByUpstreamId?: number;
58
+ /**
59
+ *
60
+ * @type {number}
61
+ * @memberof DedupCounters
62
+ */
63
+ groupsMatchedByName?: number;
64
+ /**
65
+ *
66
+ * @type {number}
67
+ * @memberof DedupCounters
68
+ */
69
+ meetingsCreated?: number;
70
+ /**
71
+ *
72
+ * @type {number}
73
+ * @memberof DedupCounters
74
+ */
75
+ meetingsMatched?: number;
76
+ /**
77
+ *
78
+ * @type {number}
79
+ * @memberof DedupCounters
80
+ */
81
+ typesAutoDiscovered?: number;
82
+ }
83
+
84
+ /**
85
+ * Check if a given object implements the DedupCounters interface.
86
+ */
87
+ export function instanceOfDedupCounters(value: object): value is DedupCounters {
88
+ return true;
89
+ }
90
+
91
+ export function DedupCountersFromJSON(json: any): DedupCounters {
92
+ return DedupCountersFromJSONTyped(json, false);
93
+ }
94
+
95
+ export function DedupCountersFromJSONTyped(json: any, ignoreDiscriminator: boolean): DedupCounters {
96
+ if (json == null) {
97
+ return json;
98
+ }
99
+ return {
100
+
101
+ 'locationsCreated': json['locations_created'] == null ? undefined : json['locations_created'],
102
+ 'locationsMatchedByUpstreamId': json['locations_matched_by_upstream_id'] == null ? undefined : json['locations_matched_by_upstream_id'],
103
+ 'locationsMatchedByAddress': json['locations_matched_by_address'] == null ? undefined : json['locations_matched_by_address'],
104
+ 'locationsMatchedByProximity': json['locations_matched_by_proximity'] == null ? undefined : json['locations_matched_by_proximity'],
105
+ 'groupsCreated': json['groups_created'] == null ? undefined : json['groups_created'],
106
+ 'groupsMatchedByUpstreamId': json['groups_matched_by_upstream_id'] == null ? undefined : json['groups_matched_by_upstream_id'],
107
+ 'groupsMatchedByName': json['groups_matched_by_name'] == null ? undefined : json['groups_matched_by_name'],
108
+ 'meetingsCreated': json['meetings_created'] == null ? undefined : json['meetings_created'],
109
+ 'meetingsMatched': json['meetings_matched'] == null ? undefined : json['meetings_matched'],
110
+ 'typesAutoDiscovered': json['types_auto_discovered'] == null ? undefined : json['types_auto_discovered'],
111
+ };
112
+ }
113
+
114
+ export function DedupCountersToJSON(json: any): DedupCounters {
115
+ return DedupCountersToJSONTyped(json, false);
116
+ }
117
+
118
+ export function DedupCountersToJSONTyped(value?: DedupCounters | null, ignoreDiscriminator: boolean = false): any {
119
+ if (value == null) {
120
+ return value;
121
+ }
122
+
123
+ return {
124
+
125
+ 'locations_created': value['locationsCreated'],
126
+ 'locations_matched_by_upstream_id': value['locationsMatchedByUpstreamId'],
127
+ 'locations_matched_by_address': value['locationsMatchedByAddress'],
128
+ 'locations_matched_by_proximity': value['locationsMatchedByProximity'],
129
+ 'groups_created': value['groupsCreated'],
130
+ 'groups_matched_by_upstream_id': value['groupsMatchedByUpstreamId'],
131
+ 'groups_matched_by_name': value['groupsMatchedByName'],
132
+ 'meetings_created': value['meetingsCreated'],
133
+ 'meetings_matched': value['meetingsMatched'],
134
+ 'types_auto_discovered': value['typesAutoDiscovered'],
135
+ };
136
+ }
137
+