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,172 @@
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 { StatsGroups } from './StatsGroups';
17
+ import {
18
+ StatsGroupsFromJSON,
19
+ StatsGroupsFromJSONTyped,
20
+ StatsGroupsToJSON,
21
+ StatsGroupsToJSONTyped,
22
+ } from './StatsGroups';
23
+ import type { StatsLocations } from './StatsLocations';
24
+ import {
25
+ StatsLocationsFromJSON,
26
+ StatsLocationsFromJSONTyped,
27
+ StatsLocationsToJSON,
28
+ StatsLocationsToJSONTyped,
29
+ } from './StatsLocations';
30
+ import type { StatsMeetings } from './StatsMeetings';
31
+ import {
32
+ StatsMeetingsFromJSON,
33
+ StatsMeetingsFromJSONTyped,
34
+ StatsMeetingsToJSON,
35
+ StatsMeetingsToJSONTyped,
36
+ } from './StatsMeetings';
37
+ import type { StatsSources } from './StatsSources';
38
+ import {
39
+ StatsSourcesFromJSON,
40
+ StatsSourcesFromJSONTyped,
41
+ StatsSourcesToJSON,
42
+ StatsSourcesToJSONTyped,
43
+ } from './StatsSources';
44
+ import type { StatsProgramsBreakdownInner } from './StatsProgramsBreakdownInner';
45
+ import {
46
+ StatsProgramsBreakdownInnerFromJSON,
47
+ StatsProgramsBreakdownInnerFromJSONTyped,
48
+ StatsProgramsBreakdownInnerToJSON,
49
+ StatsProgramsBreakdownInnerToJSONTyped,
50
+ } from './StatsProgramsBreakdownInner';
51
+ import type { StatsMeetingTypes } from './StatsMeetingTypes';
52
+ import {
53
+ StatsMeetingTypesFromJSON,
54
+ StatsMeetingTypesFromJSONTyped,
55
+ StatsMeetingTypesToJSON,
56
+ StatsMeetingTypesToJSONTyped,
57
+ } from './StatsMeetingTypes';
58
+
59
+ /**
60
+ * Aggregator-wide counts snapshot. Cached 60 seconds (per program filter).
61
+ * @export
62
+ * @interface Stats
63
+ */
64
+ export interface Stats {
65
+ /**
66
+ *
67
+ * @type {Date}
68
+ * @memberof Stats
69
+ */
70
+ generatedAt?: Date;
71
+ /**
72
+ * Echoes the `?program=` filter, or null when unfiltered.
73
+ * @type {string}
74
+ * @memberof Stats
75
+ */
76
+ program?: string | null;
77
+ /**
78
+ *
79
+ * @type {StatsMeetings}
80
+ * @memberof Stats
81
+ */
82
+ meetings?: StatsMeetings;
83
+ /**
84
+ *
85
+ * @type {StatsLocations}
86
+ * @memberof Stats
87
+ */
88
+ locations?: StatsLocations;
89
+ /**
90
+ *
91
+ * @type {StatsGroups}
92
+ * @memberof Stats
93
+ */
94
+ groups?: StatsGroups;
95
+ /**
96
+ *
97
+ * @type {StatsSources}
98
+ * @memberof Stats
99
+ */
100
+ sources?: StatsSources;
101
+ /**
102
+ *
103
+ * @type {StatsMeetingTypes}
104
+ * @memberof Stats
105
+ */
106
+ meetingTypes?: StatsMeetingTypes;
107
+ /**
108
+ *
109
+ * @type {Array<StatsProgramsBreakdownInner>}
110
+ * @memberof Stats
111
+ */
112
+ programsBreakdown?: Array<StatsProgramsBreakdownInner>;
113
+ /**
114
+ *
115
+ * @type {Date}
116
+ * @memberof Stats
117
+ */
118
+ lastSuccessfulIngestAt?: Date | null;
119
+ }
120
+
121
+ /**
122
+ * Check if a given object implements the Stats interface.
123
+ */
124
+ export function instanceOfStats(value: object): value is Stats {
125
+ return true;
126
+ }
127
+
128
+ export function StatsFromJSON(json: any): Stats {
129
+ return StatsFromJSONTyped(json, false);
130
+ }
131
+
132
+ export function StatsFromJSONTyped(json: any, ignoreDiscriminator: boolean): Stats {
133
+ if (json == null) {
134
+ return json;
135
+ }
136
+ return {
137
+
138
+ 'generatedAt': json['generated_at'] == null ? undefined : (new Date(json['generated_at'])),
139
+ 'program': json['program'] == null ? undefined : json['program'],
140
+ 'meetings': json['meetings'] == null ? undefined : StatsMeetingsFromJSON(json['meetings']),
141
+ 'locations': json['locations'] == null ? undefined : StatsLocationsFromJSON(json['locations']),
142
+ 'groups': json['groups'] == null ? undefined : StatsGroupsFromJSON(json['groups']),
143
+ 'sources': json['sources'] == null ? undefined : StatsSourcesFromJSON(json['sources']),
144
+ 'meetingTypes': json['meeting_types'] == null ? undefined : StatsMeetingTypesFromJSON(json['meeting_types']),
145
+ 'programsBreakdown': json['programs_breakdown'] == null ? undefined : ((json['programs_breakdown'] as Array<any>).map(StatsProgramsBreakdownInnerFromJSON)),
146
+ 'lastSuccessfulIngestAt': json['last_successful_ingest_at'] == null ? undefined : (new Date(json['last_successful_ingest_at'])),
147
+ };
148
+ }
149
+
150
+ export function StatsToJSON(json: any): Stats {
151
+ return StatsToJSONTyped(json, false);
152
+ }
153
+
154
+ export function StatsToJSONTyped(value?: Stats | null, ignoreDiscriminator: boolean = false): any {
155
+ if (value == null) {
156
+ return value;
157
+ }
158
+
159
+ return {
160
+
161
+ 'generated_at': value['generatedAt'] == null ? value['generatedAt'] : value['generatedAt'].toISOString(),
162
+ 'program': value['program'],
163
+ 'meetings': StatsMeetingsToJSON(value['meetings']),
164
+ 'locations': StatsLocationsToJSON(value['locations']),
165
+ 'groups': StatsGroupsToJSON(value['groups']),
166
+ 'sources': StatsSourcesToJSON(value['sources']),
167
+ 'meeting_types': StatsMeetingTypesToJSON(value['meetingTypes']),
168
+ 'programs_breakdown': value['programsBreakdown'] == null ? undefined : ((value['programsBreakdown'] as Array<any>).map(StatsProgramsBreakdownInnerToJSON)),
169
+ 'last_successful_ingest_at': value['lastSuccessfulIngestAt'] == null ? value['lastSuccessfulIngestAt'] : value['lastSuccessfulIngestAt'].toISOString(),
170
+ };
171
+ }
172
+
@@ -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
+ * Group-count breakdowns in Stats.
18
+ * @export
19
+ * @interface StatsGroups
20
+ */
21
+ export interface StatsGroups {
22
+ /**
23
+ *
24
+ * @type {number}
25
+ * @memberof StatsGroups
26
+ */
27
+ total?: number;
28
+ }
29
+
30
+ /**
31
+ * Check if a given object implements the StatsGroups interface.
32
+ */
33
+ export function instanceOfStatsGroups(value: object): value is StatsGroups {
34
+ return true;
35
+ }
36
+
37
+ export function StatsGroupsFromJSON(json: any): StatsGroups {
38
+ return StatsGroupsFromJSONTyped(json, false);
39
+ }
40
+
41
+ export function StatsGroupsFromJSONTyped(json: any, ignoreDiscriminator: boolean): StatsGroups {
42
+ if (json == null) {
43
+ return json;
44
+ }
45
+ return {
46
+
47
+ 'total': json['total'] == null ? undefined : json['total'],
48
+ };
49
+ }
50
+
51
+ export function StatsGroupsToJSON(json: any): StatsGroups {
52
+ return StatsGroupsToJSONTyped(json, false);
53
+ }
54
+
55
+ export function StatsGroupsToJSONTyped(value?: StatsGroups | null, ignoreDiscriminator: boolean = false): any {
56
+ if (value == null) {
57
+ return value;
58
+ }
59
+
60
+ return {
61
+
62
+ 'total': value['total'],
63
+ };
64
+ }
65
+
@@ -0,0 +1,73 @@
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
+ * Location-count breakdowns in Stats.
18
+ * @export
19
+ * @interface StatsLocations
20
+ */
21
+ export interface StatsLocations {
22
+ /**
23
+ *
24
+ * @type {number}
25
+ * @memberof StatsLocations
26
+ */
27
+ total?: number;
28
+ /**
29
+ *
30
+ * @type {number}
31
+ * @memberof StatsLocations
32
+ */
33
+ withCoords?: number;
34
+ }
35
+
36
+ /**
37
+ * Check if a given object implements the StatsLocations interface.
38
+ */
39
+ export function instanceOfStatsLocations(value: object): value is StatsLocations {
40
+ return true;
41
+ }
42
+
43
+ export function StatsLocationsFromJSON(json: any): StatsLocations {
44
+ return StatsLocationsFromJSONTyped(json, false);
45
+ }
46
+
47
+ export function StatsLocationsFromJSONTyped(json: any, ignoreDiscriminator: boolean): StatsLocations {
48
+ if (json == null) {
49
+ return json;
50
+ }
51
+ return {
52
+
53
+ 'total': json['total'] == null ? undefined : json['total'],
54
+ 'withCoords': json['with_coords'] == null ? undefined : json['with_coords'],
55
+ };
56
+ }
57
+
58
+ export function StatsLocationsToJSON(json: any): StatsLocations {
59
+ return StatsLocationsToJSONTyped(json, false);
60
+ }
61
+
62
+ export function StatsLocationsToJSONTyped(value?: StatsLocations | null, ignoreDiscriminator: boolean = false): any {
63
+ if (value == null) {
64
+ return value;
65
+ }
66
+
67
+ return {
68
+
69
+ 'total': value['total'],
70
+ 'with_coords': value['withCoords'],
71
+ };
72
+ }
73
+
@@ -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
+ * Meeting-type-count breakdowns in Stats.
18
+ * @export
19
+ * @interface StatsMeetingTypes
20
+ */
21
+ export interface StatsMeetingTypes {
22
+ /**
23
+ *
24
+ * @type {number}
25
+ * @memberof StatsMeetingTypes
26
+ */
27
+ total?: number;
28
+ }
29
+
30
+ /**
31
+ * Check if a given object implements the StatsMeetingTypes interface.
32
+ */
33
+ export function instanceOfStatsMeetingTypes(value: object): value is StatsMeetingTypes {
34
+ return true;
35
+ }
36
+
37
+ export function StatsMeetingTypesFromJSON(json: any): StatsMeetingTypes {
38
+ return StatsMeetingTypesFromJSONTyped(json, false);
39
+ }
40
+
41
+ export function StatsMeetingTypesFromJSONTyped(json: any, ignoreDiscriminator: boolean): StatsMeetingTypes {
42
+ if (json == null) {
43
+ return json;
44
+ }
45
+ return {
46
+
47
+ 'total': json['total'] == null ? undefined : json['total'],
48
+ };
49
+ }
50
+
51
+ export function StatsMeetingTypesToJSON(json: any): StatsMeetingTypes {
52
+ return StatsMeetingTypesToJSONTyped(json, false);
53
+ }
54
+
55
+ export function StatsMeetingTypesToJSONTyped(value?: StatsMeetingTypes | null, ignoreDiscriminator: boolean = false): any {
56
+ if (value == null) {
57
+ return value;
58
+ }
59
+
60
+ return {
61
+
62
+ 'total': value['total'],
63
+ };
64
+ }
65
+
@@ -0,0 +1,105 @@
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
+ * Meeting-count breakdowns in Stats.
18
+ * @export
19
+ * @interface StatsMeetings
20
+ */
21
+ export interface StatsMeetings {
22
+ /**
23
+ *
24
+ * @type {number}
25
+ * @memberof StatsMeetings
26
+ */
27
+ total?: number;
28
+ /**
29
+ *
30
+ * @type {number}
31
+ * @memberof StatsMeetings
32
+ */
33
+ active?: number;
34
+ /**
35
+ *
36
+ * @type {number}
37
+ * @memberof StatsMeetings
38
+ */
39
+ inactive?: number;
40
+ /**
41
+ *
42
+ * @type {{ [key: string]: number; }}
43
+ * @memberof StatsMeetings
44
+ */
45
+ byProgram?: { [key: string]: number; };
46
+ /**
47
+ *
48
+ * @type {{ [key: string]: number; }}
49
+ * @memberof StatsMeetings
50
+ */
51
+ byAttendanceOption?: { [key: string]: number; };
52
+ /**
53
+ * Keys are "0"–"6" (Sun–Sat)
54
+ * @type {{ [key: string]: number; }}
55
+ * @memberof StatsMeetings
56
+ */
57
+ byDay?: { [key: string]: number; };
58
+ }
59
+
60
+ /**
61
+ * Check if a given object implements the StatsMeetings interface.
62
+ */
63
+ export function instanceOfStatsMeetings(value: object): value is StatsMeetings {
64
+ return true;
65
+ }
66
+
67
+ export function StatsMeetingsFromJSON(json: any): StatsMeetings {
68
+ return StatsMeetingsFromJSONTyped(json, false);
69
+ }
70
+
71
+ export function StatsMeetingsFromJSONTyped(json: any, ignoreDiscriminator: boolean): StatsMeetings {
72
+ if (json == null) {
73
+ return json;
74
+ }
75
+ return {
76
+
77
+ 'total': json['total'] == null ? undefined : json['total'],
78
+ 'active': json['active'] == null ? undefined : json['active'],
79
+ 'inactive': json['inactive'] == null ? undefined : json['inactive'],
80
+ 'byProgram': json['by_program'] == null ? undefined : json['by_program'],
81
+ 'byAttendanceOption': json['by_attendance_option'] == null ? undefined : json['by_attendance_option'],
82
+ 'byDay': json['by_day'] == null ? undefined : json['by_day'],
83
+ };
84
+ }
85
+
86
+ export function StatsMeetingsToJSON(json: any): StatsMeetings {
87
+ return StatsMeetingsToJSONTyped(json, false);
88
+ }
89
+
90
+ export function StatsMeetingsToJSONTyped(value?: StatsMeetings | null, ignoreDiscriminator: boolean = false): any {
91
+ if (value == null) {
92
+ return value;
93
+ }
94
+
95
+ return {
96
+
97
+ 'total': value['total'],
98
+ 'active': value['active'],
99
+ 'inactive': value['inactive'],
100
+ 'by_program': value['byProgram'],
101
+ 'by_attendance_option': value['byAttendanceOption'],
102
+ 'by_day': value['byDay'],
103
+ };
104
+ }
105
+
@@ -0,0 +1,105 @@
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-program counts. When `?program=` filters the response, the breakdown is scoped to that program; otherwise it lists every registered program.
18
+ * @export
19
+ * @interface StatsProgramsBreakdownInner
20
+ */
21
+ export interface StatsProgramsBreakdownInner {
22
+ /**
23
+ *
24
+ * @type {string}
25
+ * @memberof StatsProgramsBreakdownInner
26
+ */
27
+ code?: string;
28
+ /**
29
+ *
30
+ * @type {string}
31
+ * @memberof StatsProgramsBreakdownInner
32
+ */
33
+ name?: string;
34
+ /**
35
+ *
36
+ * @type {number}
37
+ * @memberof StatsProgramsBreakdownInner
38
+ */
39
+ meetingsTotal?: number;
40
+ /**
41
+ *
42
+ * @type {number}
43
+ * @memberof StatsProgramsBreakdownInner
44
+ */
45
+ meetingsActive?: number;
46
+ /**
47
+ *
48
+ * @type {number}
49
+ * @memberof StatsProgramsBreakdownInner
50
+ */
51
+ sourcesTotal?: number;
52
+ /**
53
+ *
54
+ * @type {number}
55
+ * @memberof StatsProgramsBreakdownInner
56
+ */
57
+ sourcesActive?: number;
58
+ }
59
+
60
+ /**
61
+ * Check if a given object implements the StatsProgramsBreakdownInner interface.
62
+ */
63
+ export function instanceOfStatsProgramsBreakdownInner(value: object): value is StatsProgramsBreakdownInner {
64
+ return true;
65
+ }
66
+
67
+ export function StatsProgramsBreakdownInnerFromJSON(json: any): StatsProgramsBreakdownInner {
68
+ return StatsProgramsBreakdownInnerFromJSONTyped(json, false);
69
+ }
70
+
71
+ export function StatsProgramsBreakdownInnerFromJSONTyped(json: any, ignoreDiscriminator: boolean): StatsProgramsBreakdownInner {
72
+ if (json == null) {
73
+ return json;
74
+ }
75
+ return {
76
+
77
+ 'code': json['code'] == null ? undefined : json['code'],
78
+ 'name': json['name'] == null ? undefined : json['name'],
79
+ 'meetingsTotal': json['meetings_total'] == null ? undefined : json['meetings_total'],
80
+ 'meetingsActive': json['meetings_active'] == null ? undefined : json['meetings_active'],
81
+ 'sourcesTotal': json['sources_total'] == null ? undefined : json['sources_total'],
82
+ 'sourcesActive': json['sources_active'] == null ? undefined : json['sources_active'],
83
+ };
84
+ }
85
+
86
+ export function StatsProgramsBreakdownInnerToJSON(json: any): StatsProgramsBreakdownInner {
87
+ return StatsProgramsBreakdownInnerToJSONTyped(json, false);
88
+ }
89
+
90
+ export function StatsProgramsBreakdownInnerToJSONTyped(value?: StatsProgramsBreakdownInner | null, ignoreDiscriminator: boolean = false): any {
91
+ if (value == null) {
92
+ return value;
93
+ }
94
+
95
+ return {
96
+
97
+ 'code': value['code'],
98
+ 'name': value['name'],
99
+ 'meetings_total': value['meetingsTotal'],
100
+ 'meetings_active': value['meetingsActive'],
101
+ 'sources_total': value['sourcesTotal'],
102
+ 'sources_active': value['sourcesActive'],
103
+ };
104
+ }
105
+
@@ -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 { StatsSourcesTopByMeetingCountInner } from './StatsSourcesTopByMeetingCountInner';
17
+ import {
18
+ StatsSourcesTopByMeetingCountInnerFromJSON,
19
+ StatsSourcesTopByMeetingCountInnerFromJSONTyped,
20
+ StatsSourcesTopByMeetingCountInnerToJSON,
21
+ StatsSourcesTopByMeetingCountInnerToJSONTyped,
22
+ } from './StatsSourcesTopByMeetingCountInner';
23
+
24
+ /**
25
+ * Source-count breakdowns in Stats.
26
+ * @export
27
+ * @interface StatsSources
28
+ */
29
+ export interface StatsSources {
30
+ /**
31
+ *
32
+ * @type {number}
33
+ * @memberof StatsSources
34
+ */
35
+ total?: number;
36
+ /**
37
+ *
38
+ * @type {{ [key: string]: number; }}
39
+ * @memberof StatsSources
40
+ */
41
+ byState?: { [key: string]: number; };
42
+ /**
43
+ *
44
+ * @type {Array<StatsSourcesTopByMeetingCountInner>}
45
+ * @memberof StatsSources
46
+ */
47
+ topByMeetingCount?: Array<StatsSourcesTopByMeetingCountInner>;
48
+ }
49
+
50
+ /**
51
+ * Check if a given object implements the StatsSources interface.
52
+ */
53
+ export function instanceOfStatsSources(value: object): value is StatsSources {
54
+ return true;
55
+ }
56
+
57
+ export function StatsSourcesFromJSON(json: any): StatsSources {
58
+ return StatsSourcesFromJSONTyped(json, false);
59
+ }
60
+
61
+ export function StatsSourcesFromJSONTyped(json: any, ignoreDiscriminator: boolean): StatsSources {
62
+ if (json == null) {
63
+ return json;
64
+ }
65
+ return {
66
+
67
+ 'total': json['total'] == null ? undefined : json['total'],
68
+ 'byState': json['by_state'] == null ? undefined : json['by_state'],
69
+ 'topByMeetingCount': json['top_by_meeting_count'] == null ? undefined : ((json['top_by_meeting_count'] as Array<any>).map(StatsSourcesTopByMeetingCountInnerFromJSON)),
70
+ };
71
+ }
72
+
73
+ export function StatsSourcesToJSON(json: any): StatsSources {
74
+ return StatsSourcesToJSONTyped(json, false);
75
+ }
76
+
77
+ export function StatsSourcesToJSONTyped(value?: StatsSources | null, ignoreDiscriminator: boolean = false): any {
78
+ if (value == null) {
79
+ return value;
80
+ }
81
+
82
+ return {
83
+
84
+ 'total': value['total'],
85
+ 'by_state': value['byState'],
86
+ 'top_by_meeting_count': value['topByMeetingCount'] == null ? undefined : ((value['topByMeetingCount'] as Array<any>).map(StatsSourcesTopByMeetingCountInnerToJSON)),
87
+ };
88
+ }
89
+