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,220 @@
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 * as runtime from '../runtime';
16
+ import {
17
+ type MapFeatureCollection,
18
+ MapFeatureCollectionFromJSON,
19
+ MapFeatureCollectionToJSON,
20
+ } from '../models/MapFeatureCollection';
21
+ import {
22
+ type MeetingType,
23
+ MeetingTypeFromJSON,
24
+ MeetingTypeToJSON,
25
+ } from '../models/MeetingType';
26
+ import {
27
+ type Program,
28
+ ProgramFromJSON,
29
+ ProgramToJSON,
30
+ } from '../models/Program';
31
+ import {
32
+ type Stats,
33
+ StatsFromJSON,
34
+ StatsToJSON,
35
+ } from '../models/Stats';
36
+
37
+ export interface GetMapRequest {
38
+ program?: string;
39
+ }
40
+
41
+ export interface GetStatsRequest {
42
+ program?: string;
43
+ }
44
+
45
+ export interface ListMeetingTypesRequest {
46
+ program?: string;
47
+ }
48
+
49
+ /**
50
+ *
51
+ */
52
+ export class CatalogApi extends runtime.BaseAPI {
53
+
54
+ /**
55
+ * Creates request options for getMap without sending the request
56
+ */
57
+ async getMapRequestOpts(requestParameters: GetMapRequest): Promise<runtime.RequestOpts> {
58
+ const queryParameters: any = {};
59
+
60
+ if (requestParameters['program'] != null) {
61
+ queryParameters['program'] = requestParameters['program'];
62
+ }
63
+
64
+ const headerParameters: runtime.HTTPHeaders = {};
65
+
66
+
67
+ let urlPath = `/api/v1/map`;
68
+
69
+ return {
70
+ path: urlPath,
71
+ method: 'GET',
72
+ headers: headerParameters,
73
+ query: queryParameters,
74
+ };
75
+ }
76
+
77
+ /**
78
+ * One Feature per Location (not per meeting), with the list of meetings-at-that-location in the properties. Intended for a coverage-map view — show pins, click to see meeting names. Cached for 5 minutes (per program filter).
79
+ * All geocoded locations with active meetings, as GeoJSON
80
+ */
81
+ async getMapRaw(requestParameters: GetMapRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<MapFeatureCollection>> {
82
+ const requestOptions = await this.getMapRequestOpts(requestParameters);
83
+ const response = await this.request(requestOptions, initOverrides);
84
+
85
+ return new runtime.JSONApiResponse(response, (jsonValue) => MapFeatureCollectionFromJSON(jsonValue));
86
+ }
87
+
88
+ /**
89
+ * One Feature per Location (not per meeting), with the list of meetings-at-that-location in the properties. Intended for a coverage-map view — show pins, click to see meeting names. Cached for 5 minutes (per program filter).
90
+ * All geocoded locations with active meetings, as GeoJSON
91
+ */
92
+ async getMap(requestParameters: GetMapRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<MapFeatureCollection> {
93
+ const response = await this.getMapRaw(requestParameters, initOverrides);
94
+ return await response.value();
95
+ }
96
+
97
+ /**
98
+ * Creates request options for getStats without sending the request
99
+ */
100
+ async getStatsRequestOpts(requestParameters: GetStatsRequest): Promise<runtime.RequestOpts> {
101
+ const queryParameters: any = {};
102
+
103
+ if (requestParameters['program'] != null) {
104
+ queryParameters['program'] = requestParameters['program'];
105
+ }
106
+
107
+ const headerParameters: runtime.HTTPHeaders = {};
108
+
109
+
110
+ let urlPath = `/api/v1/stats`;
111
+
112
+ return {
113
+ path: urlPath,
114
+ method: 'GET',
115
+ headers: headerParameters,
116
+ query: queryParameters,
117
+ };
118
+ }
119
+
120
+ /**
121
+ * Cached for 60s in Redis (per program filter). Useful for dashboards, transparency pages, and monitoring. Pass `?program=AA` to scope every count to a single program; `programs_breakdown` is always included so you can see per-program slices alongside the totals.
122
+ * Aggregator-wide counts and health snapshot
123
+ */
124
+ async getStatsRaw(requestParameters: GetStatsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<Stats>> {
125
+ const requestOptions = await this.getStatsRequestOpts(requestParameters);
126
+ const response = await this.request(requestOptions, initOverrides);
127
+
128
+ return new runtime.JSONApiResponse(response, (jsonValue) => StatsFromJSON(jsonValue));
129
+ }
130
+
131
+ /**
132
+ * Cached for 60s in Redis (per program filter). Useful for dashboards, transparency pages, and monitoring. Pass `?program=AA` to scope every count to a single program; `programs_breakdown` is always included so you can see per-program slices alongside the totals.
133
+ * Aggregator-wide counts and health snapshot
134
+ */
135
+ async getStats(requestParameters: GetStatsRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<Stats> {
136
+ const response = await this.getStatsRaw(requestParameters, initOverrides);
137
+ return await response.value();
138
+ }
139
+
140
+ /**
141
+ * Creates request options for listMeetingTypes without sending the request
142
+ */
143
+ async listMeetingTypesRequestOpts(requestParameters: ListMeetingTypesRequest): Promise<runtime.RequestOpts> {
144
+ const queryParameters: any = {};
145
+
146
+ if (requestParameters['program'] != null) {
147
+ queryParameters['program'] = requestParameters['program'];
148
+ }
149
+
150
+ const headerParameters: runtime.HTTPHeaders = {};
151
+
152
+
153
+ let urlPath = `/api/v1/types`;
154
+
155
+ return {
156
+ path: urlPath,
157
+ method: 'GET',
158
+ headers: headerParameters,
159
+ query: queryParameters,
160
+ };
161
+ }
162
+
163
+ /**
164
+ * Returns all known meeting-type codes. Filter by `program` to scope to one program (e.g. AA).
165
+ * Meeting-type dictionary
166
+ */
167
+ async listMeetingTypesRaw(requestParameters: ListMeetingTypesRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<Array<MeetingType>>> {
168
+ const requestOptions = await this.listMeetingTypesRequestOpts(requestParameters);
169
+ const response = await this.request(requestOptions, initOverrides);
170
+
171
+ return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(MeetingTypeFromJSON));
172
+ }
173
+
174
+ /**
175
+ * Returns all known meeting-type codes. Filter by `program` to scope to one program (e.g. AA).
176
+ * Meeting-type dictionary
177
+ */
178
+ async listMeetingTypes(requestParameters: ListMeetingTypesRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<Array<MeetingType>> {
179
+ const response = await this.listMeetingTypesRaw(requestParameters, initOverrides);
180
+ return await response.value();
181
+ }
182
+
183
+ /**
184
+ * Creates request options for listPrograms without sending the request
185
+ */
186
+ async listProgramsRequestOpts(): Promise<runtime.RequestOpts> {
187
+ const queryParameters: any = {};
188
+
189
+ const headerParameters: runtime.HTTPHeaders = {};
190
+
191
+
192
+ let urlPath = `/api/v1/programs`;
193
+
194
+ return {
195
+ path: urlPath,
196
+ method: 'GET',
197
+ headers: headerParameters,
198
+ query: queryParameters,
199
+ };
200
+ }
201
+
202
+ /**
203
+ * List supported programs
204
+ */
205
+ async listProgramsRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<Array<Program>>> {
206
+ const requestOptions = await this.listProgramsRequestOpts();
207
+ const response = await this.request(requestOptions, initOverrides);
208
+
209
+ return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(ProgramFromJSON));
210
+ }
211
+
212
+ /**
213
+ * List supported programs
214
+ */
215
+ async listPrograms(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<Array<Program>> {
216
+ const response = await this.listProgramsRaw(initOverrides);
217
+ return await response.value();
218
+ }
219
+
220
+ }
@@ -0,0 +1,305 @@
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 * as runtime from '../runtime';
16
+ import {
17
+ type AuthError,
18
+ AuthErrorFromJSON,
19
+ AuthErrorToJSON,
20
+ } from '../models/AuthError';
21
+ import {
22
+ type Meeting,
23
+ MeetingFromJSON,
24
+ MeetingToJSON,
25
+ } from '../models/Meeting';
26
+ import {
27
+ type MeetingPage,
28
+ MeetingPageFromJSON,
29
+ MeetingPageToJSON,
30
+ } from '../models/MeetingPage';
31
+ import {
32
+ type MeetingsFilterError,
33
+ MeetingsFilterErrorFromJSON,
34
+ MeetingsFilterErrorToJSON,
35
+ } from '../models/MeetingsFilterError';
36
+ import {
37
+ type ValidationError,
38
+ ValidationErrorFromJSON,
39
+ ValidationErrorToJSON,
40
+ } from '../models/ValidationError';
41
+
42
+ export interface ExportMeetingsRequest {
43
+ includeInactive?: boolean;
44
+ program?: string;
45
+ }
46
+
47
+ export interface GetRegionFeedRequest {
48
+ region: number;
49
+ }
50
+
51
+ export interface GetSourceFeedRequest {
52
+ source: number;
53
+ }
54
+
55
+ export interface ListMeetingsRequest {
56
+ bbox?: string;
57
+ near?: string;
58
+ radius?: number;
59
+ regionId?: number;
60
+ sourceId?: number;
61
+ program?: string;
62
+ day?: number;
63
+ type?: string;
64
+ includeInactive?: boolean;
65
+ cursor?: string;
66
+ limit?: number;
67
+ }
68
+
69
+ /**
70
+ *
71
+ */
72
+ export class MeetingsApi extends runtime.BaseAPI {
73
+
74
+ /**
75
+ * Creates request options for exportMeetings without sending the request
76
+ */
77
+ async exportMeetingsRequestOpts(requestParameters: ExportMeetingsRequest): Promise<runtime.RequestOpts> {
78
+ const queryParameters: any = {};
79
+
80
+ if (requestParameters['includeInactive'] != null) {
81
+ queryParameters['include_inactive'] = requestParameters['includeInactive'];
82
+ }
83
+
84
+ if (requestParameters['program'] != null) {
85
+ queryParameters['program'] = requestParameters['program'];
86
+ }
87
+
88
+ const headerParameters: runtime.HTTPHeaders = {};
89
+
90
+ if (this.configuration && this.configuration.accessToken) {
91
+ const token = this.configuration.accessToken;
92
+ const tokenString = await token("bearerAuth", []);
93
+
94
+ if (tokenString) {
95
+ headerParameters["Authorization"] = `Bearer ${tokenString}`;
96
+ }
97
+ }
98
+
99
+ let urlPath = `/api/v1/meetings/export`;
100
+
101
+ return {
102
+ path: urlPath,
103
+ method: 'GET',
104
+ headers: headerParameters,
105
+ query: queryParameters,
106
+ };
107
+ }
108
+
109
+ /**
110
+ * Returns every meeting as newline-delimited JSON. Intended for researchers and downstream aggregators. Heavily rate-limited (5/minute) and requires a Sanctum bearer token. Filter by `program` to scope to one program (unknown codes stream an empty body).
111
+ * Streamed NDJSON export of all meetings
112
+ */
113
+ async exportMeetingsRaw(requestParameters: ExportMeetingsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<void>> {
114
+ const requestOptions = await this.exportMeetingsRequestOpts(requestParameters);
115
+ const response = await this.request(requestOptions, initOverrides);
116
+
117
+ return new runtime.VoidApiResponse(response);
118
+ }
119
+
120
+ /**
121
+ * Returns every meeting as newline-delimited JSON. Intended for researchers and downstream aggregators. Heavily rate-limited (5/minute) and requires a Sanctum bearer token. Filter by `program` to scope to one program (unknown codes stream an empty body).
122
+ * Streamed NDJSON export of all meetings
123
+ */
124
+ async exportMeetings(requestParameters: ExportMeetingsRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<void> {
125
+ await this.exportMeetingsRaw(requestParameters, initOverrides);
126
+ }
127
+
128
+ /**
129
+ * Creates request options for getRegionFeed without sending the request
130
+ */
131
+ async getRegionFeedRequestOpts(requestParameters: GetRegionFeedRequest): Promise<runtime.RequestOpts> {
132
+ if (requestParameters['region'] == null) {
133
+ throw new runtime.RequiredError(
134
+ 'region',
135
+ 'Required parameter "region" was null or undefined when calling getRegionFeed().'
136
+ );
137
+ }
138
+
139
+ const queryParameters: any = {};
140
+
141
+ const headerParameters: runtime.HTTPHeaders = {};
142
+
143
+
144
+ let urlPath = `/api/v1/regions/{region}/feed`;
145
+ urlPath = urlPath.replace('{region}', encodeURIComponent(String(requestParameters['region'])));
146
+
147
+ return {
148
+ path: urlPath,
149
+ method: 'GET',
150
+ headers: headerParameters,
151
+ query: queryParameters,
152
+ };
153
+ }
154
+
155
+ /**
156
+ * Returns a bare JSON array of meetings located within the specified region or any sub-region.
157
+ * Full Meeting Guide feed for a region and its descendants
158
+ */
159
+ async getRegionFeedRaw(requestParameters: GetRegionFeedRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<Array<Meeting>>> {
160
+ const requestOptions = await this.getRegionFeedRequestOpts(requestParameters);
161
+ const response = await this.request(requestOptions, initOverrides);
162
+
163
+ return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(MeetingFromJSON));
164
+ }
165
+
166
+ /**
167
+ * Returns a bare JSON array of meetings located within the specified region or any sub-region.
168
+ * Full Meeting Guide feed for a region and its descendants
169
+ */
170
+ async getRegionFeed(requestParameters: GetRegionFeedRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<Array<Meeting>> {
171
+ const response = await this.getRegionFeedRaw(requestParameters, initOverrides);
172
+ return await response.value();
173
+ }
174
+
175
+ /**
176
+ * Creates request options for getSourceFeed without sending the request
177
+ */
178
+ async getSourceFeedRequestOpts(requestParameters: GetSourceFeedRequest): Promise<runtime.RequestOpts> {
179
+ if (requestParameters['source'] == null) {
180
+ throw new runtime.RequiredError(
181
+ 'source',
182
+ 'Required parameter "source" was null or undefined when calling getSourceFeed().'
183
+ );
184
+ }
185
+
186
+ const queryParameters: any = {};
187
+
188
+ const headerParameters: runtime.HTTPHeaders = {};
189
+
190
+
191
+ let urlPath = `/api/v1/sources/{source}/feed`;
192
+ urlPath = urlPath.replace('{source}', encodeURIComponent(String(requestParameters['source'])));
193
+
194
+ return {
195
+ path: urlPath,
196
+ method: 'GET',
197
+ headers: headerParameters,
198
+ query: queryParameters,
199
+ };
200
+ }
201
+
202
+ /**
203
+ * Drop-in replacement for the upstream `/wp-json/tsml/meetings` endpoint. Returns a bare JSON array of meetings — no pagination envelope.
204
+ * Full Meeting Guide feed for a single source
205
+ */
206
+ async getSourceFeedRaw(requestParameters: GetSourceFeedRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<Array<Meeting>>> {
207
+ const requestOptions = await this.getSourceFeedRequestOpts(requestParameters);
208
+ const response = await this.request(requestOptions, initOverrides);
209
+
210
+ return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(MeetingFromJSON));
211
+ }
212
+
213
+ /**
214
+ * Drop-in replacement for the upstream `/wp-json/tsml/meetings` endpoint. Returns a bare JSON array of meetings — no pagination envelope.
215
+ * Full Meeting Guide feed for a single source
216
+ */
217
+ async getSourceFeed(requestParameters: GetSourceFeedRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<Array<Meeting>> {
218
+ const response = await this.getSourceFeedRaw(requestParameters, initOverrides);
219
+ return await response.value();
220
+ }
221
+
222
+ /**
223
+ * Creates request options for listMeetings without sending the request
224
+ */
225
+ async listMeetingsRequestOpts(requestParameters: ListMeetingsRequest): Promise<runtime.RequestOpts> {
226
+ const queryParameters: any = {};
227
+
228
+ if (requestParameters['bbox'] != null) {
229
+ queryParameters['bbox'] = requestParameters['bbox'];
230
+ }
231
+
232
+ if (requestParameters['near'] != null) {
233
+ queryParameters['near'] = requestParameters['near'];
234
+ }
235
+
236
+ if (requestParameters['radius'] != null) {
237
+ queryParameters['radius'] = requestParameters['radius'];
238
+ }
239
+
240
+ if (requestParameters['regionId'] != null) {
241
+ queryParameters['region_id'] = requestParameters['regionId'];
242
+ }
243
+
244
+ if (requestParameters['sourceId'] != null) {
245
+ queryParameters['source_id'] = requestParameters['sourceId'];
246
+ }
247
+
248
+ if (requestParameters['program'] != null) {
249
+ queryParameters['program'] = requestParameters['program'];
250
+ }
251
+
252
+ if (requestParameters['day'] != null) {
253
+ queryParameters['day'] = requestParameters['day'];
254
+ }
255
+
256
+ if (requestParameters['type'] != null) {
257
+ queryParameters['type'] = requestParameters['type'];
258
+ }
259
+
260
+ if (requestParameters['includeInactive'] != null) {
261
+ queryParameters['include_inactive'] = requestParameters['includeInactive'];
262
+ }
263
+
264
+ if (requestParameters['cursor'] != null) {
265
+ queryParameters['cursor'] = requestParameters['cursor'];
266
+ }
267
+
268
+ if (requestParameters['limit'] != null) {
269
+ queryParameters['limit'] = requestParameters['limit'];
270
+ }
271
+
272
+ const headerParameters: runtime.HTTPHeaders = {};
273
+
274
+
275
+ let urlPath = `/api/v1/meetings`;
276
+
277
+ return {
278
+ path: urlPath,
279
+ method: 'GET',
280
+ headers: headerParameters,
281
+ query: queryParameters,
282
+ };
283
+ }
284
+
285
+ /**
286
+ * Returns meetings matching the provided filter(s). At least one of `bbox`, `near`, `region_id`, `source_id`, `program`, `day`, or `type` is required. Results are cursor-paginated (default 500/page, max 2000).
287
+ * Filtered meeting search
288
+ */
289
+ async listMeetingsRaw(requestParameters: ListMeetingsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<MeetingPage>> {
290
+ const requestOptions = await this.listMeetingsRequestOpts(requestParameters);
291
+ const response = await this.request(requestOptions, initOverrides);
292
+
293
+ return new runtime.JSONApiResponse(response, (jsonValue) => MeetingPageFromJSON(jsonValue));
294
+ }
295
+
296
+ /**
297
+ * Returns meetings matching the provided filter(s). At least one of `bbox`, `near`, `region_id`, `source_id`, `program`, `day`, or `type` is required. Results are cursor-paginated (default 500/page, max 2000).
298
+ * Filtered meeting search
299
+ */
300
+ async listMeetings(requestParameters: ListMeetingsRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<MeetingPage> {
301
+ const response = await this.listMeetingsRaw(requestParameters, initOverrides);
302
+ return await response.value();
303
+ }
304
+
305
+ }
@@ -0,0 +1,74 @@
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 * as runtime from '../runtime';
16
+ import {
17
+ type PublicSource,
18
+ PublicSourceFromJSON,
19
+ PublicSourceToJSON,
20
+ } from '../models/PublicSource';
21
+
22
+ export interface ListSourcesRequest {
23
+ program?: string;
24
+ }
25
+
26
+ /**
27
+ *
28
+ */
29
+ export class SourcesApi extends runtime.BaseAPI {
30
+
31
+ /**
32
+ * Creates request options for listSources without sending the request
33
+ */
34
+ async listSourcesRequestOpts(requestParameters: ListSourcesRequest): Promise<runtime.RequestOpts> {
35
+ const queryParameters: any = {};
36
+
37
+ if (requestParameters['program'] != null) {
38
+ queryParameters['program'] = requestParameters['program'];
39
+ }
40
+
41
+ const headerParameters: runtime.HTTPHeaders = {};
42
+
43
+
44
+ let urlPath = `/api/v1/sources`;
45
+
46
+ return {
47
+ path: urlPath,
48
+ method: 'GET',
49
+ headers: headerParameters,
50
+ query: queryParameters,
51
+ };
52
+ }
53
+
54
+ /**
55
+ * Returns every registered source minus admin-only fields (sharing keys, next_fetch_at, failures, etc.). Filter by `program` to scope to one program (e.g. `AA`, `NA`); unknown codes return an empty array.
56
+ * Public list of registered sources
57
+ */
58
+ async listSourcesRaw(requestParameters: ListSourcesRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<Array<PublicSource>>> {
59
+ const requestOptions = await this.listSourcesRequestOpts(requestParameters);
60
+ const response = await this.request(requestOptions, initOverrides);
61
+
62
+ return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(PublicSourceFromJSON));
63
+ }
64
+
65
+ /**
66
+ * Returns every registered source minus admin-only fields (sharing keys, next_fetch_at, failures, etc.). Filter by `program` to scope to one program (e.g. `AA`, `NA`); unknown codes return an empty array.
67
+ * Public list of registered sources
68
+ */
69
+ async listSources(requestParameters: ListSourcesRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<Array<PublicSource>> {
70
+ const response = await this.listSourcesRaw(requestParameters, initOverrides);
71
+ return await response.value();
72
+ }
73
+
74
+ }
@@ -0,0 +1,6 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ export * from './AdminApi';
4
+ export * from './CatalogApi';
5
+ export * from './MeetingsApi';
6
+ export * from './SourcesApi';
package/src/index.ts ADDED
@@ -0,0 +1,5 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ export * from './runtime';
4
+ export * from './apis/index';
5
+ export * from './models/index';