@lcas58/esmi-api-types 1.0.18 → 1.0.20

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.
@@ -1,5 +1,7 @@
1
1
  import type { AppRouteHandler } from "../../lib/types.js";
2
- import type { DiscoverRoute, GetOneRoute, ListRoute } from "./events.routes.js";
2
+ import type { DiscoverExternalRoute, DiscoverRoute, GetOneRoute, ListRoute, SaveExternalRoute } from "./events.routes.js";
3
3
  export declare const list: AppRouteHandler<ListRoute>;
4
4
  export declare const getOne: AppRouteHandler<GetOneRoute>;
5
5
  export declare const discover: AppRouteHandler<DiscoverRoute>;
6
+ export declare const discoverExternal: AppRouteHandler<DiscoverExternalRoute>;
7
+ export declare const saveExternal: AppRouteHandler<SaveExternalRoute>;
@@ -1,7 +1,8 @@
1
1
  import { and, eq, gte, ilike, inArray, isNotNull, lte } from "drizzle-orm";
2
2
  import * as HttpStatusCodes from "stoker/http-status-codes";
3
3
  import * as HttpStatusPhrases from "stoker/http-status-phrases";
4
- import { runDiscoveryAgent } from "../../agent/runner.js";
4
+ import { agentEventsToRaw, runExternalDiscoveryAgent } from "../../agent/runner.js";
5
+ import { saveEvents, searchLocalEvents } from "../../agent/tools.js";
5
6
  import { createDb } from "../../db/index.js";
6
7
  import { event, location } from "../../db/schema/index.js";
7
8
  export const list = async (c) => {
@@ -97,7 +98,7 @@ export const getOne = async (c) => {
97
98
  export const discover = async (c) => {
98
99
  const body = c.req.valid("json");
99
100
  const { db } = createDb(c.env);
100
- const events = await runDiscoveryAgent(c.env, db, {
101
+ const events = await searchLocalEvents(db, {
101
102
  sportId: body.sportId,
102
103
  city: body.city,
103
104
  state: body.state,
@@ -106,3 +107,50 @@ export const discover = async (c) => {
106
107
  });
107
108
  return c.json(events, HttpStatusCodes.OK);
108
109
  };
110
+ export const discoverExternal = async (c) => {
111
+ const body = c.req.valid("json");
112
+ const { db } = createDb(c.env);
113
+ const previews = await runExternalDiscoveryAgent(c.env, db, {
114
+ sportId: body.sportId,
115
+ city: body.city,
116
+ state: body.state,
117
+ from: body.from,
118
+ to: body.to,
119
+ });
120
+ return c.json(previews, HttpStatusCodes.OK);
121
+ };
122
+ export const saveExternal = async (c) => {
123
+ const { events: previews, city, state } = c.req.valid("json");
124
+ const { db } = createDb(c.env);
125
+ const rawEvents = agentEventsToRaw(previews, {
126
+ sportId: "",
127
+ city,
128
+ state,
129
+ });
130
+ if (rawEvents.length === 0) {
131
+ return c.json([], HttpStatusCodes.OK);
132
+ }
133
+ const saveResult = await saveEvents(db, rawEvents);
134
+ if (saveResult.savedIds.length === 0) {
135
+ return c.json([], HttpStatusCodes.OK);
136
+ }
137
+ const savedEvents = await db.query.event.findMany({
138
+ where: inArray(event.id, saveResult.savedIds),
139
+ with: {
140
+ sport: true,
141
+ location: true,
142
+ externalLink: true,
143
+ creator: {
144
+ columns: {
145
+ id: true,
146
+ name: true,
147
+ image: true,
148
+ homeCity: true,
149
+ homeState: true,
150
+ },
151
+ },
152
+ },
153
+ orderBy: (event, { asc }) => [asc(event.startsAt)],
154
+ });
155
+ return c.json(savedEvents, HttpStatusCodes.OK);
156
+ };
@@ -188,5 +188,127 @@ declare const router: import("@hono/zod-openapi").OpenAPIHono<import("../../shar
188
188
  status: 401;
189
189
  };
190
190
  };
191
+ } & {
192
+ "/events/discover/external": {
193
+ $post: {
194
+ input: {
195
+ json: {
196
+ sportId: string;
197
+ city: string;
198
+ state: string;
199
+ from?: string | undefined;
200
+ to?: string | undefined;
201
+ };
202
+ };
203
+ output: {
204
+ message: string;
205
+ };
206
+ outputFormat: "text" | "json";
207
+ status: 401;
208
+ } | {
209
+ input: {
210
+ json: {
211
+ sportId: string;
212
+ city: string;
213
+ state: string;
214
+ from?: string | undefined;
215
+ to?: string | undefined;
216
+ };
217
+ };
218
+ output: {
219
+ url: string;
220
+ title: string;
221
+ sport: string;
222
+ startsAt: string;
223
+ timezone: string;
224
+ formattedAddress: string;
225
+ venueName: string;
226
+ }[];
227
+ outputFormat: "text" | "json";
228
+ status: 200;
229
+ };
230
+ };
231
+ } & {
232
+ "/events/save-external": {
233
+ $post: {
234
+ input: {
235
+ json: {
236
+ events: {
237
+ url: string;
238
+ title: string;
239
+ sport: string;
240
+ startsAt: string;
241
+ timezone: string;
242
+ formattedAddress: string;
243
+ venueName: string;
244
+ }[];
245
+ city: string;
246
+ state: string;
247
+ };
248
+ };
249
+ output: {
250
+ metadata: any;
251
+ id: string;
252
+ title: string;
253
+ createdAt: string;
254
+ sport: {
255
+ id: string;
256
+ name: string;
257
+ icon: string | null;
258
+ } | null;
259
+ sportId: string;
260
+ startsAt: string;
261
+ endsAt: string | null;
262
+ timezone: string;
263
+ location: {
264
+ id: string;
265
+ name: string;
266
+ formattedAddress: string;
267
+ city: string | null;
268
+ state: string | null;
269
+ latitude: number | null;
270
+ longitude: number | null;
271
+ } | null;
272
+ locationId: string | null;
273
+ externalLinkId: string | null;
274
+ source: "external" | "community";
275
+ thumbnailUrl: string | null;
276
+ createdByUserId: string | null;
277
+ creator: {
278
+ image: string | null;
279
+ id: string;
280
+ name: string;
281
+ } | null;
282
+ externalLink: {
283
+ url: string;
284
+ id: string;
285
+ domain: string;
286
+ } | null;
287
+ }[];
288
+ outputFormat: "text" | "json";
289
+ status: 200;
290
+ } | {
291
+ input: {
292
+ json: {
293
+ events: {
294
+ url: string;
295
+ title: string;
296
+ sport: string;
297
+ startsAt: string;
298
+ timezone: string;
299
+ formattedAddress: string;
300
+ venueName: string;
301
+ }[];
302
+ city: string;
303
+ state: string;
304
+ };
305
+ };
306
+ output: {
307
+ message: string;
308
+ };
309
+ outputFormat: "text" | "json";
310
+ status: 401;
311
+ };
312
+ };
191
313
  }, "/">;
192
314
  export default router;
@@ -4,5 +4,7 @@ import * as routes from "./events.routes.js";
4
4
  const router = createRouter()
5
5
  .openapi(routes.list, handlers.list)
6
6
  .openapi(routes.getOne, handlers.getOne)
7
- .openapi(routes.discover, handlers.discover);
7
+ .openapi(routes.discover, handlers.discover)
8
+ .openapi(routes.discoverExternal, handlers.discoverExternal)
9
+ .openapi(routes.saveExternal, handlers.saveExternal);
8
10
  export default router;
@@ -919,6 +919,439 @@ export declare const discover: {
919
919
  } & {
920
920
  getRoutingPath(): "/events/discover";
921
921
  };
922
+ export declare const discoverExternal: {
923
+ path: "/events/discover/external";
924
+ method: "post";
925
+ tags: string[];
926
+ middleware: [import("hono").MiddlewareHandler];
927
+ request: {
928
+ body: {
929
+ required: boolean;
930
+ content: {
931
+ "application/json": {
932
+ schema: z.ZodObject<{
933
+ sportId: z.ZodString;
934
+ city: z.ZodString;
935
+ state: z.ZodString;
936
+ from: z.ZodOptional<z.ZodString>;
937
+ to: z.ZodOptional<z.ZodString>;
938
+ }, "strip", z.ZodTypeAny, {
939
+ sportId: string;
940
+ city: string;
941
+ state: string;
942
+ from?: string | undefined;
943
+ to?: string | undefined;
944
+ }, {
945
+ sportId: string;
946
+ city: string;
947
+ state: string;
948
+ from?: string | undefined;
949
+ to?: string | undefined;
950
+ }>;
951
+ };
952
+ };
953
+ description: string;
954
+ };
955
+ };
956
+ responses: {
957
+ 200: {
958
+ content: {
959
+ "application/json": {
960
+ schema: z.ZodArray<z.ZodObject<{
961
+ title: z.ZodString;
962
+ sport: z.ZodString;
963
+ startsAt: z.ZodString;
964
+ timezone: z.ZodString;
965
+ url: z.ZodString;
966
+ venueName: z.ZodString;
967
+ formattedAddress: z.ZodString;
968
+ }, "strip", z.ZodTypeAny, {
969
+ url: string;
970
+ title: string;
971
+ sport: string;
972
+ startsAt: string;
973
+ timezone: string;
974
+ formattedAddress: string;
975
+ venueName: string;
976
+ }, {
977
+ url: string;
978
+ title: string;
979
+ sport: string;
980
+ startsAt: string;
981
+ timezone: string;
982
+ formattedAddress: string;
983
+ venueName: string;
984
+ }>, "many">;
985
+ };
986
+ };
987
+ description: string;
988
+ };
989
+ 401: {
990
+ content: {
991
+ "application/json": {
992
+ schema: z.ZodObject<{
993
+ message: z.ZodString;
994
+ }, "strip", z.ZodTypeAny, {
995
+ message: string;
996
+ }, {
997
+ message: string;
998
+ }>;
999
+ };
1000
+ };
1001
+ description: string;
1002
+ };
1003
+ };
1004
+ } & {
1005
+ getRoutingPath(): "/events/discover/external";
1006
+ };
1007
+ export declare const saveExternal: {
1008
+ path: "/events/save-external";
1009
+ method: "post";
1010
+ tags: string[];
1011
+ middleware: [import("hono").MiddlewareHandler];
1012
+ request: {
1013
+ body: {
1014
+ required: boolean;
1015
+ content: {
1016
+ "application/json": {
1017
+ schema: z.ZodObject<{
1018
+ events: z.ZodArray<z.ZodObject<{
1019
+ title: z.ZodString;
1020
+ sport: z.ZodString;
1021
+ startsAt: z.ZodString;
1022
+ timezone: z.ZodString;
1023
+ url: z.ZodString;
1024
+ venueName: z.ZodString;
1025
+ formattedAddress: z.ZodString;
1026
+ }, "strip", z.ZodTypeAny, {
1027
+ url: string;
1028
+ title: string;
1029
+ sport: string;
1030
+ startsAt: string;
1031
+ timezone: string;
1032
+ formattedAddress: string;
1033
+ venueName: string;
1034
+ }, {
1035
+ url: string;
1036
+ title: string;
1037
+ sport: string;
1038
+ startsAt: string;
1039
+ timezone: string;
1040
+ formattedAddress: string;
1041
+ venueName: string;
1042
+ }>, "many">;
1043
+ city: z.ZodString;
1044
+ state: z.ZodString;
1045
+ }, "strip", z.ZodTypeAny, {
1046
+ events: {
1047
+ url: string;
1048
+ title: string;
1049
+ sport: string;
1050
+ startsAt: string;
1051
+ timezone: string;
1052
+ formattedAddress: string;
1053
+ venueName: string;
1054
+ }[];
1055
+ city: string;
1056
+ state: string;
1057
+ }, {
1058
+ events: {
1059
+ url: string;
1060
+ title: string;
1061
+ sport: string;
1062
+ startsAt: string;
1063
+ timezone: string;
1064
+ formattedAddress: string;
1065
+ venueName: string;
1066
+ }[];
1067
+ city: string;
1068
+ state: string;
1069
+ }>;
1070
+ };
1071
+ };
1072
+ description: string;
1073
+ };
1074
+ };
1075
+ responses: {
1076
+ 200: {
1077
+ content: {
1078
+ "application/json": {
1079
+ schema: z.ZodArray<z.ZodObject<z.objectUtil.extendShape<{
1080
+ id: z.ZodString;
1081
+ sportId: z.ZodString;
1082
+ title: z.ZodString;
1083
+ startsAt: z.ZodDate;
1084
+ endsAt: z.ZodNullable<z.ZodDate>;
1085
+ timezone: z.ZodString;
1086
+ locationId: z.ZodNullable<z.ZodString>;
1087
+ externalLinkId: z.ZodNullable<z.ZodString>;
1088
+ source: z.ZodEnum<["external", "community"]>;
1089
+ thumbnailUrl: z.ZodNullable<z.ZodString>;
1090
+ metadata: z.ZodNullable<z.ZodType<string | number | boolean | {
1091
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null;
1092
+ } | (string | number | boolean | {
1093
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null;
1094
+ } | (string | number | boolean | {
1095
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null;
1096
+ } | (string | number | boolean | {
1097
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null;
1098
+ } | (string | number | boolean | {
1099
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null;
1100
+ } | (string | number | boolean | {
1101
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null;
1102
+ } | (string | number | boolean | {
1103
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null)[] | null;
1104
+ } | (string | number | boolean | {
1105
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null;
1106
+ } | (string | number | boolean | {
1107
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null;
1108
+ } | (string | number | boolean | {
1109
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null;
1110
+ } | (string | number | boolean | {
1111
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null;
1112
+ } | (string | number | boolean | {
1113
+ [key: string]: string | number | boolean | /*elided*/ any | /*elided*/ any | null;
1114
+ } | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null, z.ZodTypeDef, string | number | boolean | {
1115
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null;
1116
+ } | (string | number | boolean | {
1117
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null;
1118
+ } | (string | number | boolean | {
1119
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null;
1120
+ } | (string | number | boolean | {
1121
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null;
1122
+ } | (string | number | boolean | {
1123
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null;
1124
+ } | (string | number | boolean | {
1125
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null;
1126
+ } | (string | number | boolean | {
1127
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null)[] | null;
1128
+ } | (string | number | boolean | {
1129
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null;
1130
+ } | (string | number | boolean | {
1131
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null;
1132
+ } | (string | number | boolean | {
1133
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null;
1134
+ } | (string | number | boolean | {
1135
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null;
1136
+ } | (string | number | boolean | {
1137
+ [key: string]: string | number | boolean | /*elided*/ any | /*elided*/ any | null;
1138
+ } | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null>>;
1139
+ createdByUserId: z.ZodNullable<z.ZodString>;
1140
+ createdAt: z.ZodDate;
1141
+ }, {
1142
+ sport: z.ZodNullable<z.ZodObject<{
1143
+ id: z.ZodString;
1144
+ name: z.ZodString;
1145
+ icon: z.ZodNullable<z.ZodString>;
1146
+ }, "strip", z.ZodTypeAny, {
1147
+ id: string;
1148
+ name: string;
1149
+ icon: string | null;
1150
+ }, {
1151
+ id: string;
1152
+ name: string;
1153
+ icon: string | null;
1154
+ }>>;
1155
+ location: z.ZodNullable<z.ZodObject<{
1156
+ id: z.ZodString;
1157
+ name: z.ZodString;
1158
+ formattedAddress: z.ZodString;
1159
+ city: z.ZodNullable<z.ZodString>;
1160
+ state: z.ZodNullable<z.ZodString>;
1161
+ latitude: z.ZodNullable<z.ZodNumber>;
1162
+ longitude: z.ZodNullable<z.ZodNumber>;
1163
+ }, "strip", z.ZodTypeAny, {
1164
+ id: string;
1165
+ name: string;
1166
+ formattedAddress: string;
1167
+ city: string | null;
1168
+ state: string | null;
1169
+ latitude: number | null;
1170
+ longitude: number | null;
1171
+ }, {
1172
+ id: string;
1173
+ name: string;
1174
+ formattedAddress: string;
1175
+ city: string | null;
1176
+ state: string | null;
1177
+ latitude: number | null;
1178
+ longitude: number | null;
1179
+ }>>;
1180
+ externalLink: z.ZodNullable<z.ZodObject<{
1181
+ id: z.ZodString;
1182
+ url: z.ZodString;
1183
+ domain: z.ZodString;
1184
+ }, "strip", z.ZodTypeAny, {
1185
+ url: string;
1186
+ id: string;
1187
+ domain: string;
1188
+ }, {
1189
+ url: string;
1190
+ id: string;
1191
+ domain: string;
1192
+ }>>;
1193
+ creator: z.ZodNullable<z.ZodObject<{
1194
+ id: z.ZodString;
1195
+ name: z.ZodString;
1196
+ image: z.ZodNullable<z.ZodString>;
1197
+ }, "strip", z.ZodTypeAny, {
1198
+ image: string | null;
1199
+ id: string;
1200
+ name: string;
1201
+ }, {
1202
+ image: string | null;
1203
+ id: string;
1204
+ name: string;
1205
+ }>>;
1206
+ }>, z.UnknownKeysParam, z.ZodTypeAny, {
1207
+ metadata: string | number | boolean | {
1208
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null;
1209
+ } | (string | number | boolean | {
1210
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null;
1211
+ } | (string | number | boolean | {
1212
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null;
1213
+ } | (string | number | boolean | {
1214
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null;
1215
+ } | (string | number | boolean | {
1216
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null;
1217
+ } | (string | number | boolean | {
1218
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null;
1219
+ } | (string | number | boolean | {
1220
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null)[] | null;
1221
+ } | (string | number | boolean | {
1222
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null;
1223
+ } | (string | number | boolean | {
1224
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null;
1225
+ } | (string | number | boolean | {
1226
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null;
1227
+ } | (string | number | boolean | {
1228
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null;
1229
+ } | (string | number | boolean | {
1230
+ [key: string]: string | number | boolean | /*elided*/ any | /*elided*/ any | null;
1231
+ } | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null;
1232
+ id: string;
1233
+ title: string;
1234
+ createdAt: Date;
1235
+ sport: {
1236
+ id: string;
1237
+ name: string;
1238
+ icon: string | null;
1239
+ } | null;
1240
+ sportId: string;
1241
+ startsAt: Date;
1242
+ endsAt: Date | null;
1243
+ timezone: string;
1244
+ location: {
1245
+ id: string;
1246
+ name: string;
1247
+ formattedAddress: string;
1248
+ city: string | null;
1249
+ state: string | null;
1250
+ latitude: number | null;
1251
+ longitude: number | null;
1252
+ } | null;
1253
+ locationId: string | null;
1254
+ externalLinkId: string | null;
1255
+ source: "external" | "community";
1256
+ thumbnailUrl: string | null;
1257
+ createdByUserId: string | null;
1258
+ creator: {
1259
+ image: string | null;
1260
+ id: string;
1261
+ name: string;
1262
+ } | null;
1263
+ externalLink: {
1264
+ url: string;
1265
+ id: string;
1266
+ domain: string;
1267
+ } | null;
1268
+ }, {
1269
+ metadata: string | number | boolean | {
1270
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null;
1271
+ } | (string | number | boolean | {
1272
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null;
1273
+ } | (string | number | boolean | {
1274
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null;
1275
+ } | (string | number | boolean | {
1276
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null;
1277
+ } | (string | number | boolean | {
1278
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null;
1279
+ } | (string | number | boolean | {
1280
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null;
1281
+ } | (string | number | boolean | {
1282
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null)[] | null;
1283
+ } | (string | number | boolean | {
1284
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null;
1285
+ } | (string | number | boolean | {
1286
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null)[] | null;
1287
+ } | (string | number | boolean | {
1288
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null)[] | null;
1289
+ } | (string | number | boolean | {
1290
+ [key: string]: string | number | boolean | /*elided*/ any | (string | number | boolean | /*elided*/ any | /*elided*/ any | null)[] | null;
1291
+ } | (string | number | boolean | {
1292
+ [key: string]: string | number | boolean | /*elided*/ any | /*elided*/ any | null;
1293
+ } | /*elided*/ any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null;
1294
+ id: string;
1295
+ title: string;
1296
+ createdAt: Date;
1297
+ sport: {
1298
+ id: string;
1299
+ name: string;
1300
+ icon: string | null;
1301
+ } | null;
1302
+ sportId: string;
1303
+ startsAt: Date;
1304
+ endsAt: Date | null;
1305
+ timezone: string;
1306
+ location: {
1307
+ id: string;
1308
+ name: string;
1309
+ formattedAddress: string;
1310
+ city: string | null;
1311
+ state: string | null;
1312
+ latitude: number | null;
1313
+ longitude: number | null;
1314
+ } | null;
1315
+ locationId: string | null;
1316
+ externalLinkId: string | null;
1317
+ source: "external" | "community";
1318
+ thumbnailUrl: string | null;
1319
+ createdByUserId: string | null;
1320
+ creator: {
1321
+ image: string | null;
1322
+ id: string;
1323
+ name: string;
1324
+ } | null;
1325
+ externalLink: {
1326
+ url: string;
1327
+ id: string;
1328
+ domain: string;
1329
+ } | null;
1330
+ }>, "many">;
1331
+ };
1332
+ };
1333
+ description: string;
1334
+ };
1335
+ 401: {
1336
+ content: {
1337
+ "application/json": {
1338
+ schema: z.ZodObject<{
1339
+ message: z.ZodString;
1340
+ }, "strip", z.ZodTypeAny, {
1341
+ message: string;
1342
+ }, {
1343
+ message: string;
1344
+ }>;
1345
+ };
1346
+ };
1347
+ description: string;
1348
+ };
1349
+ };
1350
+ } & {
1351
+ getRoutingPath(): "/events/save-external";
1352
+ };
922
1353
  export type ListRoute = typeof list;
923
1354
  export type GetOneRoute = typeof getOne;
924
1355
  export type DiscoverRoute = typeof discover;
1356
+ export type DiscoverExternalRoute = typeof discoverExternal;
1357
+ export type SaveExternalRoute = typeof saveExternal;
@@ -3,7 +3,7 @@ import * as HttpStatusCodes from "stoker/http-status-codes";
3
3
  import { jsonContent, jsonContentRequired } from "stoker/openapi/helpers";
4
4
  import { notFoundSchema, unauthorizedSchema } from "../../lib/constants.js";
5
5
  import { isAuth } from "../../middlewares/is-auth.js";
6
- import { eventWithRelationsSchema, listEventsQuerySchema } from "./schemas/index.js";
6
+ import { eventWithRelationsSchema, externalEventPreviewSchema, listEventsQuerySchema } from "./schemas/index.js";
7
7
  export const list = createRoute({
8
8
  path: "/events",
9
9
  method: "get",
@@ -49,3 +49,33 @@ export const discover = createRoute({
49
49
  [HttpStatusCodes.UNAUTHORIZED]: jsonContent(unauthorizedSchema, "Unauthorized"),
50
50
  },
51
51
  });
52
+ export const discoverExternal = createRoute({
53
+ path: "/events/discover/external",
54
+ method: "post",
55
+ tags: ["Events"],
56
+ middleware: [isAuth()],
57
+ request: {
58
+ body: jsonContentRequired(discoverRequestSchema, "External event discovery criteria"),
59
+ },
60
+ responses: {
61
+ [HttpStatusCodes.OK]: jsonContent(z.array(externalEventPreviewSchema), "External event previews (not yet saved)"),
62
+ [HttpStatusCodes.UNAUTHORIZED]: jsonContent(unauthorizedSchema, "Unauthorized"),
63
+ },
64
+ });
65
+ export const saveExternal = createRoute({
66
+ path: "/events/save-external",
67
+ method: "post",
68
+ tags: ["Events"],
69
+ middleware: [isAuth()],
70
+ request: {
71
+ body: jsonContentRequired(z.object({
72
+ events: z.array(externalEventPreviewSchema),
73
+ city: z.string().min(1),
74
+ state: z.string().min(1),
75
+ }), "Selected event previews to save"),
76
+ },
77
+ responses: {
78
+ [HttpStatusCodes.OK]: jsonContent(z.array(eventWithRelationsSchema), "Saved events with full relations"),
79
+ [HttpStatusCodes.UNAUTHORIZED]: jsonContent(unauthorizedSchema, "Unauthorized"),
80
+ },
81
+ });
@@ -279,5 +279,31 @@ export declare const listEventsQuerySchema: z.ZodObject<{
279
279
  limit?: number | undefined;
280
280
  offset?: number | undefined;
281
281
  }>;
282
+ export declare const externalEventPreviewSchema: z.ZodObject<{
283
+ title: z.ZodString;
284
+ sport: z.ZodString;
285
+ startsAt: z.ZodString;
286
+ timezone: z.ZodString;
287
+ url: z.ZodString;
288
+ venueName: z.ZodString;
289
+ formattedAddress: z.ZodString;
290
+ }, "strip", z.ZodTypeAny, {
291
+ url: string;
292
+ title: string;
293
+ sport: string;
294
+ startsAt: string;
295
+ timezone: string;
296
+ formattedAddress: string;
297
+ venueName: string;
298
+ }, {
299
+ url: string;
300
+ title: string;
301
+ sport: string;
302
+ startsAt: string;
303
+ timezone: string;
304
+ formattedAddress: string;
305
+ venueName: string;
306
+ }>;
307
+ export type ExternalEventPreview = z.infer<typeof externalEventPreviewSchema>;
282
308
  export type EventWithRelations = z.infer<typeof eventWithRelationsSchema>;
283
309
  export type ListEventsQuery = z.infer<typeof listEventsQuerySchema>;
@@ -36,3 +36,12 @@ export const listEventsQuerySchema = z.object({
36
36
  limit: z.coerce.number().min(1).max(100).optional().default(20),
37
37
  offset: z.coerce.number().min(0).optional().default(0),
38
38
  });
39
+ export const externalEventPreviewSchema = z.object({
40
+ title: z.string(),
41
+ sport: z.string(),
42
+ startsAt: z.string(),
43
+ timezone: z.string(),
44
+ url: z.string(),
45
+ venueName: z.string(),
46
+ formattedAddress: z.string(),
47
+ });
@@ -1 +1 @@
1
- export { type EventWithRelations, eventWithRelationsSchema, type ListEventsQuery, listEventsQuerySchema, } from "./event.schemas.js";
1
+ export { type EventWithRelations, eventWithRelationsSchema, type ExternalEventPreview, externalEventPreviewSchema, type ListEventsQuery, listEventsQuerySchema, } from "./event.schemas.js";
@@ -1 +1 @@
1
- export { eventWithRelationsSchema, listEventsQuerySchema, } from "./event.schemas.js";
1
+ export { eventWithRelationsSchema, externalEventPreviewSchema, listEventsQuerySchema, } from "./event.schemas.js";
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@lcas58/esmi-api-types",
3
3
  "type": "module",
4
- "version": "1.0.18",
4
+ "version": "1.0.20",
5
5
  "license": "MIT",
6
6
  "exports": {
7
7
  ".": {