@groovenet/contracts 0.1.0 → 1.0.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spins.d.ts","sourceRoot":"","sources":["../src/spins.ts"],"names":[],"mappings":"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"}
package/build/spins.js ADDED
@@ -0,0 +1,258 @@
1
+ import { z } from "zod";
2
+ import { trackGenreSchema } from "./tracks.js";
3
+ // Vinyl spins (#552). A spin session is one sitting with one album; its
4
+ // selections say which sides or tracks were played, and its track events are
5
+ // the per-track play log that top-tracks counts.
6
+ //
7
+ // The enums mirror CHECK constraints in the app's
8
+ // `migrations/1790900000000_add-playlist-spin-sessions.js` (selection_mode,
9
+ // provenance) and `1772300000000_add_spin_logging_tables.js` (selection_type);
10
+ // widening one needs a migration too.
11
+ export const spinSelectionModeSchema = z.enum(["sides", "tracks", "automatic", "playlist"]);
12
+ export const spinProvenanceSchema = z.enum(["manual", "automatic", "playlist"]);
13
+ export const spinSelectionTypeSchema = z.enum(["side", "track"]);
14
+ export const SPIN_SELECTION_MODES = spinSelectionModeSchema.options;
15
+ export const SPIN_PROVENANCES = spinProvenanceSchema.options;
16
+ export const SPIN_SELECTION_TYPES = spinSelectionTypeSchema.options;
17
+ // Timestamps are ISO strings on the wire; `format` documents that without
18
+ // making the response parser stricter than it has been.
19
+ const dateTime = () => z.string().meta({ format: "date-time" });
20
+ export const spinTrackRefSchema = z.object({
21
+ track_id: z.string().min(1),
22
+ friend_id: z.number().int(),
23
+ });
24
+ export const spinSessionSchema = z.object({
25
+ id: z.number().int(),
26
+ friend_id: z.number().int(),
27
+ release_id: z.string(),
28
+ medium: z.literal("vinyl"),
29
+ selection_mode: spinSelectionModeSchema,
30
+ played_at: dateTime(),
31
+ note: z.string().nullable().optional(),
32
+ context_type: z.string().nullable().optional(),
33
+ provenance: spinProvenanceSchema
34
+ .optional()
35
+ .meta({ description: "`automatic` when the listener detected the spin" }),
36
+ source_id: z.string().nullable().optional(),
37
+ confidence: z.number().nullable().optional(),
38
+ playlist_id: z.number().int().nullable().optional(),
39
+ live_set_performance_id: z.number().int().nullable().optional(),
40
+ playlist_played_at: dateTime().nullable().optional(),
41
+ playlist_position: z.number().int().nullable().optional(),
42
+ corrected_at: dateTime()
43
+ .nullable()
44
+ .optional()
45
+ .meta({ description: "When a detected spin was corrected by hand; null otherwise" }),
46
+ created_at: dateTime(),
47
+ updated_at: dateTime(),
48
+ });
49
+ export const spinSelectionSchema = z.object({
50
+ id: z.number().int().optional(),
51
+ session_id: z.number().int().optional(),
52
+ ordinal: z.number().int(),
53
+ selection_type: spinSelectionTypeSchema,
54
+ side_key: z.string().nullable().optional(),
55
+ track_id: z.string().nullable().optional(),
56
+ friend_id: z.number().int().nullable().optional(),
57
+ position_snapshot: z.string().nullable().optional(),
58
+ created_at: dateTime().optional(),
59
+ });
60
+ export const trackSpinEventSchema = z.object({
61
+ id: z.number().int().optional(),
62
+ session_id: z.number().int().optional(),
63
+ friend_id: z.number().int(),
64
+ release_id: z.string(),
65
+ track_id: z.string(),
66
+ played_at: dateTime(),
67
+ ordinal: z.number().int(),
68
+ side_key: z.string().nullable().optional(),
69
+ position_snapshot: z.string().nullable().optional(),
70
+ title_snapshot: z.string().optional(),
71
+ artist_snapshot: z.string().optional(),
72
+ album_snapshot: z.string().optional(),
73
+ created_at: dateTime().optional(),
74
+ });
75
+ export const spinDerivedSchema = z.object({
76
+ is_full_album_spin: z.boolean(),
77
+ selected_side_count: z.number().int(),
78
+ album_side_count: z.number().int(),
79
+ track_count: z.number().int(),
80
+ });
81
+ export const spinAlbumSummarySchema = z.object({
82
+ title: z.string().nullable(),
83
+ artist: z.string().nullable(),
84
+ thumbnail: z.string().nullable(),
85
+ });
86
+ /** A session with what was played; `album` is joined in on list and edit responses. */
87
+ export const spinSessionDetailSchema = z.object({
88
+ session: spinSessionSchema,
89
+ selections: z.array(spinSelectionSchema),
90
+ track_events: z.array(trackSpinEventSchema),
91
+ derived: spinDerivedSchema,
92
+ album: spinAlbumSummarySchema
93
+ .nullable()
94
+ .optional()
95
+ .meta({ description: "Null when the album is no longer in the collection" }),
96
+ });
97
+ export const spinCreateResponseSchema = z.object({
98
+ session: spinSessionSchema,
99
+ selections: z.array(spinSelectionSchema),
100
+ expanded_tracks: z.array(trackSpinEventSchema),
101
+ derived: spinDerivedSchema,
102
+ });
103
+ export const spinUpdateResponseSchema = spinSessionDetailSchema;
104
+ export const spinListResponseSchema = z.object({
105
+ items: z.array(spinSessionDetailSchema),
106
+ limit: z.number().int(),
107
+ offset: z.number().int(),
108
+ });
109
+ export const spinDeleteResponseSchema = z.object({
110
+ success: z.boolean(),
111
+ session: spinSessionSchema,
112
+ });
113
+ export const spinTopTrackSchema = z.object({
114
+ friend_id: z.number().int(),
115
+ release_id: z.string(),
116
+ track_id: z.string(),
117
+ play_count: z.number().int(),
118
+ last_played_at: dateTime(),
119
+ title_snapshot: z.string(),
120
+ artist_snapshot: z.string(),
121
+ album_snapshot: z.string(),
122
+ side_key: z.string().nullable().optional(),
123
+ position_snapshot: z.string().nullable().optional(),
124
+ album_thumbnail: z.string().nullable().optional(),
125
+ audio_file_album_art_url: z.string().nullable().optional(),
126
+ local_audio_url: z.string().nullable().optional(),
127
+ bpm: z.union([z.number(), z.string()]).nullable().optional(),
128
+ key: z.string().nullable().optional(),
129
+ star_rating: z.number().nullable().optional(),
130
+ styles: z.array(z.string()).optional(),
131
+ library_identifier: z.string().nullable().optional(),
132
+ hasVectors: z.boolean().optional(),
133
+ track_genres: z.array(trackGenreSchema).optional(),
134
+ });
135
+ export const spinTopTracksResponseSchema = z.object({
136
+ items: z.array(spinTopTrackSchema),
137
+ limit: z.number().int(),
138
+ offset: z.number().int(),
139
+ });
140
+ // ── Requests ────────────────────────────────────────────────────────────────
141
+ // Bodies are exported twice, as record care's are: the plain object
142
+ // (`*ObjectSchema`), which the app extends with its text-coercing `friend_id`,
143
+ // and the refined wire schema. Zod refuses to `.extend()` an object once it
144
+ // carries a refinement, so each refinement is exported too and the app
145
+ // reapplies it.
146
+ export const spinCreateObjectSchema = z.object({
147
+ friend_id: z.number().int(),
148
+ release_id: z.string().min(1),
149
+ played_at: z.string().min(1).meta({ format: "date-time" }),
150
+ note: z.string().nullable().optional(),
151
+ context_type: z.string().nullable().optional(),
152
+ side_keys: z.array(z.string().min(1)).optional(),
153
+ track_refs: z.array(spinTrackRefSchema).optional(),
154
+ });
155
+ /** Exactly one non-empty selection; a single JSON Schema cannot say so. */
156
+ export function refineSpinCreate(value, ctx) {
157
+ const hasSides = Array.isArray(value.side_keys) && value.side_keys.length > 0;
158
+ const hasTracks = Array.isArray(value.track_refs) && value.track_refs.length > 0;
159
+ if (hasSides === hasTracks) {
160
+ ctx.addIssue({
161
+ code: "custom",
162
+ message: "Provide exactly one of side_keys or track_refs",
163
+ });
164
+ }
165
+ }
166
+ export const spinCreateSchema = spinCreateObjectSchema.superRefine(refineSpinCreate);
167
+ export const spinUpdateObjectSchema = z.object({
168
+ friend_id: z.number().int(),
169
+ played_at: z.string().min(1).optional().meta({ format: "date-time" }),
170
+ note: z.string().nullable().optional(),
171
+ context_type: z.string().nullable().optional(),
172
+ side_keys: z.array(z.string().min(1)).min(1).optional(),
173
+ track_refs: z.array(spinTrackRefSchema).min(1).optional(),
174
+ });
175
+ /** At most one selection form, and something to change. */
176
+ export function refineSpinUpdate(value, ctx) {
177
+ if (value.side_keys && value.track_refs) {
178
+ ctx.addIssue({
179
+ code: "custom",
180
+ message: "Provide at most one of side_keys or track_refs",
181
+ });
182
+ }
183
+ const changes = [
184
+ value.played_at,
185
+ value.note,
186
+ value.context_type,
187
+ value.side_keys,
188
+ value.track_refs,
189
+ ];
190
+ if (changes.every((change) => change === undefined)) {
191
+ ctx.addIssue({ code: "custom", message: "Nothing to update" });
192
+ }
193
+ }
194
+ export const spinUpdateSchema = spinUpdateObjectSchema.superRefine(refineSpinUpdate);
195
+ export const spinAggregateRequestSchema = z.object({
196
+ since: z.string().min(1).meta({
197
+ format: "date-time",
198
+ description: "Both automatic triggers only look back PLAY_AGGREGATION_LOOKBACK_MINUTES (default 60), so this is the manual escape hatch for anything older.",
199
+ }),
200
+ source_id: z
201
+ .string()
202
+ .min(1)
203
+ .optional()
204
+ .meta({ description: "Omit to aggregate every source active since `since`." }),
205
+ });
206
+ export const spinAggregateSourceResultSchema = z.object({
207
+ source_id: z.string(),
208
+ created: z.number().int(),
209
+ skipped: z.number().int(),
210
+ });
211
+ export const spinAggregateResultSchema = z.object({
212
+ since: z.string(),
213
+ created: z.number().int(),
214
+ skipped: z.number().int(),
215
+ sources: z.array(spinAggregateSourceResultSchema),
216
+ });
217
+ // Query strings: these describe the coerced wire values. The app's route
218
+ // schemas keep their own text coercion and defaults.
219
+ export const spinListQuerySchema = z.object({
220
+ friend_id: z.number().int(),
221
+ release_id: z.string().optional(),
222
+ track_id: z.string().optional(),
223
+ from: z.string().optional().meta({ format: "date-time" }),
224
+ to: z.string().optional().meta({ format: "date-time" }),
225
+ /** Defaults to 50. */
226
+ limit: z.number().int().min(0).optional(),
227
+ offset: z.number().int().min(0).optional(),
228
+ });
229
+ export const spinTopTracksQuerySchema = z.object({
230
+ friend_id: z.number().int(),
231
+ release_id: z.string().optional(),
232
+ /** Defaults to 20. */
233
+ limit: z.number().int().min(0).optional(),
234
+ offset: z.number().int().min(0).optional(),
235
+ });
236
+ export const spinJsonSchemas = {
237
+ SpinSelectionMode: z.toJSONSchema(spinSelectionModeSchema),
238
+ SpinProvenance: z.toJSONSchema(spinProvenanceSchema),
239
+ SpinSelectionType: z.toJSONSchema(spinSelectionTypeSchema),
240
+ SpinTrackRef: z.toJSONSchema(spinTrackRefSchema),
241
+ SpinSession: z.toJSONSchema(spinSessionSchema),
242
+ SpinSelection: z.toJSONSchema(spinSelectionSchema),
243
+ TrackSpinEvent: z.toJSONSchema(trackSpinEventSchema),
244
+ SpinDerived: z.toJSONSchema(spinDerivedSchema),
245
+ SpinAlbumSummary: z.toJSONSchema(spinAlbumSummarySchema),
246
+ SpinSessionDetail: z.toJSONSchema(spinSessionDetailSchema),
247
+ SpinCreateResponse: z.toJSONSchema(spinCreateResponseSchema),
248
+ SpinListResponse: z.toJSONSchema(spinListResponseSchema),
249
+ SpinDeleteResponse: z.toJSONSchema(spinDeleteResponseSchema),
250
+ SpinTopTrack: z.toJSONSchema(spinTopTrackSchema),
251
+ SpinTopTracksResponse: z.toJSONSchema(spinTopTracksResponseSchema),
252
+ SpinAggregateSourceResult: z.toJSONSchema(spinAggregateSourceResultSchema),
253
+ SpinAggregateResult: z.toJSONSchema(spinAggregateResultSchema),
254
+ SpinCreateInput: z.toJSONSchema(spinCreateSchema, { io: "input" }),
255
+ SpinUpdateInput: z.toJSONSchema(spinUpdateSchema, { io: "input" }),
256
+ SpinAggregateRequest: z.toJSONSchema(spinAggregateRequestSchema, { io: "input" }),
257
+ };
258
+ //# sourceMappingURL=spins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spins.js","sourceRoot":"","sources":["../src/spins.ts"],"names":[],"mappings":"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"}