@qrush/types 2.1.71 → 2.1.73

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.
package/README.md CHANGED
@@ -5,7 +5,7 @@ Shared TypeScript types for the QRush ecosystem. This package provides type defi
5
5
  ## Installation
6
6
 
7
7
  ```bash
8
- npm install @qrush/types
8
+ bun add @qrush/types
9
9
  ```
10
10
 
11
11
  ## Usage
package/dist/Artist.d.ts CHANGED
@@ -17,19 +17,21 @@ export interface ArtistSameAs {
17
17
  tiktok?: string;
18
18
  website?: string;
19
19
  }
20
- /** A single Deezer track with a 30-second preview URL */
21
- export interface DeezerTrack {
22
- id: number;
20
+ /** A single music preview track with a permanent CDN preview URL (Apple Music) */
21
+ export interface MusicPreviewTrack {
22
+ id: string;
23
23
  title: string;
24
- /** Direct 30-sec MP3 CDN URL (no auth required) */
24
+ /** Permanent CDN URL for 30-sec preview (Apple Music M4A) */
25
25
  previewUrl: string;
26
- albumCoverSmall?: string;
26
+ artworkUrl?: string;
27
27
  }
28
- /** Deezer enrichment data stored on the artist document */
29
- export interface ArtistDeezer {
30
- /** Deezer artist ID — auto-matched by name or manually set via admin */
31
- artistId?: number;
32
- topTracks?: DeezerTrack[];
28
+ /** Music preview configuration stored on the artist document */
29
+ export interface MusicPreviewConfig {
30
+ /** Apple Music artist ID — auto-matched by name or manually set via admin */
31
+ appleMusicId?: string;
32
+ tracks?: MusicPreviewTrack[];
33
+ /** ISO timestamp of last enrichment */
34
+ lastEnrichedAt?: string;
33
35
  }
34
36
  /**
35
37
  * Full artist document stored in the `artists` collection
@@ -45,8 +47,8 @@ export interface IFireArtist {
45
47
  /** Structured genre selections for the artist */
46
48
  genres?: GenreSelection[];
47
49
  sameAs?: ArtistSameAs;
48
- /** Deezer music preview data (enriched at import time) */
49
- deezer?: ArtistDeezer;
50
+ /** Apple Music preview data (permanent CDN URLs, enriched at import time) */
51
+ musicPreview?: MusicPreviewConfig;
50
52
  /** true if created by promoter (name-only, no SEO links) */
51
53
  isFallback: boolean;
52
54
  createdAt?: Timestamp;
package/dist/Social.d.ts CHANGED
@@ -16,6 +16,21 @@ export interface ISocialProfileVisibility {
16
16
  partyDrugsConsumption: FieldVisibility;
17
17
  hardDrugsConsumption: FieldVisibility;
18
18
  }
19
+ export type PrivacyTier = 'public_full' | 'public_restricted' | 'private' | 'custom';
20
+ export interface ICustomPrivacyRules {
21
+ ageRange?: {
22
+ min: number;
23
+ max: number;
24
+ } | null;
25
+ gender?: ('male' | 'female' | 'diverse')[] | null;
26
+ minAccountAgeDays?: number | null;
27
+ onlyVerified?: boolean;
28
+ }
29
+ export interface IPrivacySettings {
30
+ tier: PrivacyTier;
31
+ onlyVerified?: boolean;
32
+ customRules?: ICustomPrivacyRules;
33
+ }
19
34
  export interface ISocialProfile {
20
35
  bio?: string;
21
36
  images?: string[];
@@ -35,26 +50,19 @@ export interface ISocialProfile {
35
50
  partyDrugs?: string;
36
51
  hardDrugs?: string;
37
52
  };
38
- socialProfileStatus?: SocialProfileStatus;
39
- trustScore?: number;
40
- hasTrustBadge?: boolean;
41
- trustSignals?: ITrustSignals;
53
+ privacySettings?: IPrivacySettings;
42
54
  visibility: ISocialProfileVisibility;
43
55
  }
44
- export interface ISocialUserEntry {
56
+ export interface ISocialEntry {
45
57
  name: string;
46
58
  avatarURL: string;
47
- listVisibility: FieldVisibility;
48
59
  createdAt: Timestamp;
49
- /** Present on weeklyGoingUsers entries */
50
60
  userUID?: string;
51
61
  /** Day of week for weekly entries */
52
62
  day?: string;
53
63
  /** Resolved occurrence date (YYYY-MM-DD) for weekly entries */
54
64
  occurrenceDate?: string;
55
- hasSocialProfile?: boolean;
56
- socialProfileStatus?: SocialProfileStatus;
57
- hasTrustBadge?: boolean;
65
+ type: 'going' | 'interested';
58
66
  citySlug?: string;
59
67
  entityId?: string;
60
68
  entityType?: SocialEntityType;
@@ -64,6 +72,24 @@ export interface ISocialUserEntry {
64
72
  entityStartTime?: Timestamp;
65
73
  /** Flat boolean for efficient Firestore indexing (avoids != null on map field) */
66
74
  hasLookingFor?: boolean;
75
+ privacyTier: PrivacyTier;
76
+ isVerified: boolean;
77
+ onlyVerified?: boolean;
78
+ gender?: string;
79
+ birthday?: Timestamp;
80
+ accountCreatedAt?: Timestamp;
81
+ customRules?: ICustomPrivacyRules;
82
+ }
83
+ export interface IFilteredEntry {
84
+ id: string;
85
+ name: string;
86
+ avatarURL: string;
87
+ isVerified: boolean;
88
+ type: 'going' | 'interested';
89
+ visibility: 'clear' | 'anonymous';
90
+ lookingFor?: ILookingFor;
91
+ hasLookingFor?: boolean;
92
+ entryRef?: string;
67
93
  }
68
94
  export type SocialAction = 'going' | 'interested';
69
95
  export type SocialEntityType = 'event' | 'location' | 'weekly';
@@ -90,25 +116,7 @@ export interface IUpdateLookingForRequest {
90
116
  export interface IUpdateLookingForResponse {
91
117
  success: boolean;
92
118
  }
93
- export type SocialProfileStatus = 'none' | 'basic' | 'full';
94
119
  export type EntryVisibility = 'clear' | 'blurred' | 'hidden';
95
- export type ListVisibility = 'all' | 'contacts' | 'hidden';
96
- export declare const TRUST_THRESHOLDS: {
97
- readonly UNBLURRED_ACCESS: 5;
98
- readonly TRUSTED_BADGE: 10;
99
- };
100
- export type TrustSignal = 'phone_verified' | 'profile_image' | 'bio_filled' | 'social_fields_3' | 'social_fields_5' | 'connections_1' | 'connections_3' | 'qrush_plus' | 'promo_redeemed' | 'account_age_7d' | 'account_age_30d' | 'social_actions_3';
101
- export interface ITrustSignals {
102
- phoneVerified: boolean;
103
- hasProfileImage: boolean;
104
- hasBio: boolean;
105
- socialFieldsCount: number;
106
- acceptedContactsCount: number;
107
- isQrushPlusSubscriber: boolean;
108
- promoRedemptionCount: number;
109
- accountAgeDays: number;
110
- socialActionsCount: number;
111
- }
112
120
  export interface ILookingFor {
113
121
  preset?: 'group' | 'dance_partner' | 'going_together';
114
122
  text?: string;
package/dist/Social.js CHANGED
@@ -1,4 +1 @@
1
- export const TRUST_THRESHOLDS = {
2
- UNBLURRED_ACCESS: 5,
3
- TRUSTED_BADGE: 10,
4
- };
1
+ export {};
package/dist/Users.d.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  import type { DocumentReference, FieldValue, Timestamp } from '@firebase/firestore';
2
2
  import { FireQueryDocSnapshotRef } from './CustomDocType.js';
3
- import type { SocialProfileStatus } from './Social.js';
4
3
  export type Maybe<T> = T | null | undefined;
5
4
  export type IFireUser = {
6
5
  phone?: Phone;
@@ -17,7 +16,6 @@ export type IFireUser = {
17
16
  attendedEvents: DocumentReference[];
18
17
  /** @deprecated replace with group collection query on goingUsers */
19
18
  attendingEvent: string | null;
20
- listVisibility?: 'all' | 'contacts' | 'hidden';
21
19
  sharingToken: SharingToken | null;
22
20
  notificationTokens: string[];
23
21
  markedForDeletion: boolean;
@@ -29,10 +27,13 @@ export type IFireUser = {
29
27
  profileImageUrl?: string;
30
28
  totalSavings: number;
31
29
  redemptionIds?: string[];
32
- trustScore?: number;
33
- socialProfileStatus?: SocialProfileStatus;
34
- hasTrustBadge?: boolean;
35
30
  isQrushPlus?: boolean;
31
+ hasSocialProfile?: boolean;
32
+ isVerified?: boolean;
33
+ xp?: number;
34
+ deviceIds?: string[];
35
+ genderChangedAt?: Timestamp;
36
+ birthdayChangedAt?: Timestamp;
36
37
  };
37
38
  export type UserRole = 'user' | 'staff' | 'team' | 'admin';
38
39
  export type UserAvatar = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qrush/types",
3
- "version": "2.1.71",
3
+ "version": "2.1.73",
4
4
  "description": "Shared TypeScript types for the QRush ecosystem",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",