@ingenx-io/valets-schema-mcp-server 0.1.3 → 0.1.4

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 (43) hide show
  1. package/data/docs/collections/firestore-paths.md +21 -2
  2. package/data/docs/enums/attention-status.md +24 -0
  3. package/data/docs/enums/booking-status.md +2 -2
  4. package/data/docs/enums/customer-payment-status.md +2 -2
  5. package/data/docs/enums/customer-payment-target-type.md +2 -2
  6. package/data/docs/enums/delivery-type.md +2 -2
  7. package/data/docs/enums/event-status.md +2 -2
  8. package/data/docs/enums/fulfillment-status.md +2 -2
  9. package/data/docs/enums/loyalty-transaction-type.md +2 -2
  10. package/data/docs/enums/order-status.md +2 -2
  11. package/data/docs/enums/payment-method.md +2 -2
  12. package/data/docs/enums/payment-proof-status.md +2 -2
  13. package/data/docs/enums/payment-status.md +2 -2
  14. package/data/docs/enums/pending-issue.md +31 -0
  15. package/data/docs/enums/return-status.md +2 -2
  16. package/data/docs/enums/session-status.md +2 -2
  17. package/data/docs/enums/ticket-status.md +2 -2
  18. package/data/docs/index.md +8 -2
  19. package/data/docs/models/allowed-user.md +188 -0
  20. package/data/docs/models/analytics-event.md +533 -0
  21. package/data/docs/models/booking-version.md +2 -2
  22. package/data/docs/models/booking.md +2 -2
  23. package/data/docs/models/customer-payment-allocation.md +2 -2
  24. package/data/docs/models/customer-payment.md +2 -2
  25. package/data/docs/models/customer.md +2 -2
  26. package/data/docs/models/event.md +2 -2
  27. package/data/docs/models/loyalty-config.md +2 -2
  28. package/data/docs/models/loyalty-reward.md +2 -2
  29. package/data/docs/models/loyalty-status.md +2 -2
  30. package/data/docs/models/loyalty-transaction.md +2 -2
  31. package/data/docs/models/magic-link-request.md +285 -0
  32. package/data/docs/models/metrics-current.md +2 -2
  33. package/data/docs/models/metrics-daily.md +2 -2
  34. package/data/docs/models/metrics-monthly.md +2 -2
  35. package/data/docs/models/order-item.md +2 -2
  36. package/data/docs/models/order.md +2 -2
  37. package/data/docs/models/sale.md +2 -2
  38. package/data/docs/models/site-payment.md +200 -0
  39. package/data/docs/models/ticket.md +2 -2
  40. package/data/static/llms.txt +164 -1
  41. package/data/static/openapi.yaml +451 -0
  42. package/data/static/schemas.json +511 -44
  43. package/package.json +1 -1
@@ -20,6 +20,16 @@ info:
20
20
  paths: {}
21
21
  components:
22
22
  schemas:
23
+ AttentionStatus:
24
+ type: string
25
+ enum:
26
+ - ACTIVE
27
+ - STALE
28
+ - ON_HOLD
29
+ - ESCALATED
30
+ description: Operational attention status for Order and Booking (D39). Controls
31
+ home-page queue assignment. Server-owned — set via triggers or callable fn
32
+ only.
23
33
  BookingStatus:
24
34
  type: string
25
35
  enum:
@@ -135,6 +145,23 @@ components:
135
145
  - PARTIALLY_REFUNDED
136
146
  description: Payment lifecycle status (D01 amended). Used by Order, Sale/Purchase,
137
147
  Booking.
148
+ PendingIssue:
149
+ type: string
150
+ enum:
151
+ - PAYMENT_PROOF_PENDING
152
+ - PAYMENT_PROOF_REJECTED
153
+ - AMOUNT_DISCREPANCY
154
+ - RETURN_UNRESOLVED
155
+ - OVERDUE_DELIVERY
156
+ - SESSION_OVERDUE
157
+ - PAYMENT_INCOMPLETE
158
+ - CANCELLATION_REQUESTED
159
+ - UNREFUNDED_CANCELLATION
160
+ - UPCOMING_UNPAID
161
+ - NO_SHOW_UNRESOLVED
162
+ description: Specific detected conditions on an Order or Booking requiring human
163
+ action (D39). Stored as an array — multiple issues can be active simultaneously.
164
+ Server-owned.
138
165
  ReturnStatus:
139
166
  type: string
140
167
  enum:
@@ -180,6 +207,247 @@ components:
180
207
  - _nanoseconds
181
208
  additionalProperties: false
182
209
  description: Firestore Timestamp serialized representation
210
+ AllowedUser:
211
+ type: object
212
+ properties:
213
+ id:
214
+ readOnly: true
215
+ description: (Read-only) Firestore document ID = contact identifier (email
216
+ or E.164 phone), URL-escaped.
217
+ type:
218
+ - string
219
+ - 'null'
220
+ companyId:
221
+ type: string
222
+ x-immutable: true
223
+ description: (Immutable) FK → Company document ID.
224
+ siteId:
225
+ type: string
226
+ x-immutable: true
227
+ description: (Immutable) FK → Site document ID (D40 sub-tenant scope).
228
+ contact:
229
+ type: string
230
+ description: Email or E.164 phone number. Canonical identifier for this
231
+ user within the site.
232
+ tier:
233
+ type: string
234
+ description: Access tier. Free string per site (ING-304 open question —
235
+ tier values are site-specific today).
236
+ amount:
237
+ type: number
238
+ description: Amount paid. Generalized from amount_xof per D40 decision.
239
+ currency:
240
+ default: XOF
241
+ description: Currency code (ISO 4217). Defaults to XOF for legacy SR-Single
242
+ parity.
243
+ type: string
244
+ transactionId:
245
+ type: string
246
+ description: Payment provider transaction ID (e.g. Wave).
247
+ paidAt:
248
+ $ref: '#/components/schemas/FirestoreTimestamp'
249
+ description: RFC3339Nano UTC when payment was completed.
250
+ required:
251
+ - companyId
252
+ - siteId
253
+ - contact
254
+ - tier
255
+ - amount
256
+ - currency
257
+ - transactionId
258
+ - paidAt
259
+ additionalProperties: false
260
+ description: 'AllowedUser model (D40 / ING-304). Collection: companies/{companyId}/sites/{siteId}/allowed_users/{contactId}.
261
+ Authoritative paid-access allowlist. Upsert semantics — tier upgrades overwrite.
262
+ Source of truth for access checks and referral code resolution.'
263
+ AllowedUserCreate:
264
+ allOf:
265
+ - $ref: '#/components/schemas/AllowedUser'
266
+ description: Write payload for creating a new AllowedUser document. Fields marked
267
+ `readOnly` are server-set and must not be included. Fields marked `x-immutable`
268
+ may be set once at creation.
269
+ required:
270
+ - companyId
271
+ - siteId
272
+ - contact
273
+ - tier
274
+ - amount
275
+ - currency
276
+ - transactionId
277
+ - paidAt
278
+ AllowedUserUpdate:
279
+ allOf:
280
+ - $ref: '#/components/schemas/AllowedUser'
281
+ description: Write payload for partial update (PATCH) of a AllowedUser document.
282
+ All fields optional. Fields marked `readOnly` or `x-immutable` must not be
283
+ sent.
284
+ AnalyticsEvent:
285
+ type: object
286
+ properties:
287
+ id:
288
+ readOnly: true
289
+ description: (Read-only) Firestore document ID. Equal to eventId.
290
+ type:
291
+ - string
292
+ - 'null'
293
+ companyId:
294
+ type: string
295
+ x-immutable: true
296
+ description: (Immutable) FK → Company document ID.
297
+ siteId:
298
+ type: string
299
+ x-immutable: true
300
+ description: (Immutable) FK → Site document ID (D40 sub-tenant scope).
301
+ eventId:
302
+ type: string
303
+ x-immutable: true
304
+ description: (Immutable) Client-generated UUID. Matches document ID.
305
+ eventName:
306
+ type: string
307
+ description: Event name. Free string; canonical vocabulary is encouraged
308
+ (see CANONICAL_ANALYTICS_EVENT_NAMES).
309
+ timestamp:
310
+ type: string
311
+ description: Client-side ISO 8601 — "when it happened on device". Can diverge
312
+ from serverTimestamp for queued offline events.
313
+ serverTimestamp:
314
+ $ref: '#/components/schemas/FirestoreTimestamp'
315
+ description: (Read-only) Firestore serverTimestamp() — authoritative for
316
+ ordering.
317
+ readOnly: true
318
+ sessionId:
319
+ type: string
320
+ description: 30-minute rolling session identifier.
321
+ userId:
322
+ anyOf:
323
+ - type: string
324
+ - type: 'null'
325
+ description: Stable user ID if identified; explicitly null (not omitted)
326
+ for anonymous sessions — simplifies querying.
327
+ properties:
328
+ type: object
329
+ propertyNames:
330
+ type: string
331
+ additionalProperties: {}
332
+ description: 'Free-form event-specific payload. Contract is at the event-name
333
+ level. PII posture: follow-up issue pending.'
334
+ context:
335
+ type: object
336
+ properties:
337
+ url:
338
+ description: Full URL at event time.
339
+ type: string
340
+ origin:
341
+ description: Protocol + host.
342
+ type: string
343
+ hostname:
344
+ description: Hostname only — useful for deployment identification.
345
+ type: string
346
+ page:
347
+ description: Current route/pathname.
348
+ type: string
349
+ title:
350
+ description: Page title.
351
+ type: string
352
+ referrer:
353
+ description: Referrer URL.
354
+ type: string
355
+ deviceType:
356
+ type: string
357
+ enum:
358
+ - mobile
359
+ - tablet
360
+ - desktop
361
+ platform:
362
+ description: OS/platform string.
363
+ type: string
364
+ screenWidth:
365
+ description: Viewport width (flattened from screen.width).
366
+ type: integer
367
+ minimum: -9007199254740991
368
+ maximum: 9007199254740991
369
+ screenHeight:
370
+ description: Viewport height (flattened from screen.height).
371
+ type: integer
372
+ minimum: -9007199254740991
373
+ maximum: 9007199254740991
374
+ appVersion:
375
+ description: Consuming app version.
376
+ type: string
377
+ online:
378
+ description: Connectivity state at event time.
379
+ type: boolean
380
+ locale:
381
+ description: User locale.
382
+ type: string
383
+ timezone:
384
+ description: IANA timezone.
385
+ type: string
386
+ utm:
387
+ description: UTM parameters; null when not a campaign-landed session.
388
+ anyOf:
389
+ - type: object
390
+ properties:
391
+ source:
392
+ type: string
393
+ medium:
394
+ type: string
395
+ campaign:
396
+ type: string
397
+ term:
398
+ type: string
399
+ content:
400
+ type: string
401
+ additionalProperties: false
402
+ - type: 'null'
403
+ additionalProperties: false
404
+ description: Environment context at event time (nested per D40).
405
+ userTraits:
406
+ description: 'Optional — included only when includeUserTraits: true on the
407
+ write. PII posture: follow-up issue pending.'
408
+ type:
409
+ - object
410
+ - 'null'
411
+ propertyNames:
412
+ type: string
413
+ additionalProperties: {}
414
+ required:
415
+ - companyId
416
+ - siteId
417
+ - eventId
418
+ - eventName
419
+ - timestamp
420
+ - serverTimestamp
421
+ - sessionId
422
+ - userId
423
+ - properties
424
+ - context
425
+ additionalProperties: false
426
+ description: 'AnalyticsEvent model (D40 / ING-304). Collection: companies/{companyId}/sites/{siteId}/analytics_events/{eventId}.
427
+ Append-only, immutable product/behavior event stream. Event names are free
428
+ strings; canonical vocabulary in CANONICAL_ANALYTICS_EVENT_NAMES.'
429
+ AnalyticsEventCreate:
430
+ allOf:
431
+ - $ref: '#/components/schemas/AnalyticsEvent'
432
+ description: Write payload for creating a new AnalyticsEvent document. Fields
433
+ marked `readOnly` are server-set and must not be included. Fields marked `x-immutable`
434
+ may be set once at creation.
435
+ required:
436
+ - companyId
437
+ - siteId
438
+ - eventId
439
+ - eventName
440
+ - timestamp
441
+ - sessionId
442
+ - userId
443
+ - properties
444
+ - context
445
+ AnalyticsEventUpdate:
446
+ allOf:
447
+ - $ref: '#/components/schemas/AnalyticsEvent'
448
+ description: Write payload for partial update (PATCH) of a AnalyticsEvent document.
449
+ All fields optional. Fields marked `readOnly` or `x-immutable` must not be
450
+ sent.
183
451
  Booking:
184
452
  type: object
185
453
  properties:
@@ -1598,6 +1866,112 @@ components:
1598
1866
  description: Write payload for partial update (PATCH) of a LoyaltyTransaction
1599
1867
  document. All fields optional. Fields marked `readOnly` or `x-immutable` must
1600
1868
  not be sent.
1869
+ MagicLinkRequest:
1870
+ type: object
1871
+ properties:
1872
+ id:
1873
+ readOnly: true
1874
+ description: (Read-only) Firestore document ID. 16-byte random hex.
1875
+ type:
1876
+ - string
1877
+ - 'null'
1878
+ companyId:
1879
+ type: string
1880
+ x-immutable: true
1881
+ description: (Immutable) FK → Company document ID.
1882
+ siteId:
1883
+ type: string
1884
+ x-immutable: true
1885
+ description: (Immutable) FK → Site document ID (D40 sub-tenant scope).
1886
+ email:
1887
+ type: string
1888
+ description: Populated if identifier is email; empty string if phone. Mutually
1889
+ exclusive with phone per document.
1890
+ phone:
1891
+ type: string
1892
+ description: Populated if identifier is E.164 format (starts with +); empty
1893
+ string if email.
1894
+ ip:
1895
+ type: string
1896
+ description: Client IP from X-Forwarded-For or RemoteAddr.
1897
+ allowed:
1898
+ type: boolean
1899
+ description: Whether the user passed the access control check.
1900
+ link:
1901
+ type: string
1902
+ description: Magic-link URL — non-empty only when DEV_MODE=true; empty in
1903
+ production (audit integrity).
1904
+ tier:
1905
+ type: string
1906
+ description: Access tier selected by the user. Free string per site (ING-304
1907
+ open question — tier values are site-specific today).
1908
+ authStatusReason:
1909
+ type: string
1910
+ description: 'Outcome reason code: whitelist | allowed_users | payment_redirect
1911
+ | payment_complete | not_allowed | redirected_to_payment.'
1912
+ referredBy:
1913
+ type: string
1914
+ description: Contact identifier of the referrer, resolved from submitted
1915
+ referral_code; empty if none.
1916
+ requestedAt:
1917
+ $ref: '#/components/schemas/FirestoreTimestamp'
1918
+ description: RFC3339Nano UTC at request time.
1919
+ verifyReason:
1920
+ description: 'Verify outcome reason: mirrors authStatusReason on success,
1921
+ or link_expired | link_invalid | not_allowed.'
1922
+ type:
1923
+ - string
1924
+ - 'null'
1925
+ verified:
1926
+ description: Whether the verify attempt succeeded.
1927
+ type:
1928
+ - boolean
1929
+ - 'null'
1930
+ verifiedAt:
1931
+ anyOf:
1932
+ - $ref: '#/components/schemas/FirestoreTimestamp'
1933
+ - type: 'null'
1934
+ description: RFC3339Nano UTC at verify time.
1935
+ required:
1936
+ - companyId
1937
+ - siteId
1938
+ - email
1939
+ - phone
1940
+ - ip
1941
+ - allowed
1942
+ - link
1943
+ - tier
1944
+ - authStatusReason
1945
+ - referredBy
1946
+ - requestedAt
1947
+ additionalProperties: false
1948
+ description: 'MagicLinkRequest model (D40 / ING-304). Collection: companies/{companyId}/sites/{siteId}/magic_link_requests/{requestId}.
1949
+ Authentication audit log — every request is logged regardless of outcome.
1950
+ Two-stage write: Log() then LogVerify().'
1951
+ MagicLinkRequestCreate:
1952
+ allOf:
1953
+ - $ref: '#/components/schemas/MagicLinkRequest'
1954
+ description: Write payload for creating a new MagicLinkRequest document. Fields
1955
+ marked `readOnly` are server-set and must not be included. Fields marked `x-immutable`
1956
+ may be set once at creation.
1957
+ required:
1958
+ - companyId
1959
+ - siteId
1960
+ - email
1961
+ - phone
1962
+ - ip
1963
+ - allowed
1964
+ - link
1965
+ - tier
1966
+ - authStatusReason
1967
+ - referredBy
1968
+ - requestedAt
1969
+ MagicLinkRequestUpdate:
1970
+ allOf:
1971
+ - $ref: '#/components/schemas/MagicLinkRequest'
1972
+ description: Write payload for partial update (PATCH) of a MagicLinkRequest
1973
+ document. All fields optional. Fields marked `readOnly` or `x-immutable` must
1974
+ not be sent.
1601
1975
  MetricsCurrent:
1602
1976
  type: object
1603
1977
  properties:
@@ -2827,6 +3201,83 @@ components:
2827
3201
  - $ref: '#/components/schemas/Sale'
2828
3202
  description: Write payload for partial update (PATCH) of a Sale document. All
2829
3203
  fields optional. Fields marked `readOnly` or `x-immutable` must not be sent.
3204
+ SitePayment:
3205
+ type: object
3206
+ properties:
3207
+ id:
3208
+ readOnly: true
3209
+ description: (Read-only) Firestore document ID, auto-generated.
3210
+ type:
3211
+ - string
3212
+ - 'null'
3213
+ companyId:
3214
+ type: string
3215
+ x-immutable: true
3216
+ description: (Immutable) FK → Company document ID.
3217
+ siteId:
3218
+ type: string
3219
+ x-immutable: true
3220
+ description: (Immutable) FK → Site document ID (D40 sub-tenant scope).
3221
+ contact:
3222
+ type: string
3223
+ description: Email or E.164 phone number. Matches AllowedUser.contact.
3224
+ sessionId:
3225
+ type: string
3226
+ description: Payment provider checkout session ID (e.g. Wave). Usable for
3227
+ dedup across dual writes.
3228
+ transactionId:
3229
+ type: string
3230
+ description: Payment provider transaction ID.
3231
+ tier:
3232
+ type: string
3233
+ description: Access tier. Free string per site (ING-304 open question).
3234
+ amount:
3235
+ type: number
3236
+ description: Amount paid. Generalized from amount_xof per D40 decision.
3237
+ currency:
3238
+ default: XOF
3239
+ description: Currency code (ISO 4217). Defaults to XOF for legacy SR-Single
3240
+ parity.
3241
+ type: string
3242
+ paidAt:
3243
+ $ref: '#/components/schemas/FirestoreTimestamp'
3244
+ description: RFC3339Nano UTC when payment was completed.
3245
+ required:
3246
+ - companyId
3247
+ - siteId
3248
+ - contact
3249
+ - sessionId
3250
+ - transactionId
3251
+ - tier
3252
+ - amount
3253
+ - currency
3254
+ - paidAt
3255
+ additionalProperties: false
3256
+ description: 'SitePayment model (D40 / ING-304). Collection: companies/{companyId}/sites/{siteId}/payments/{paymentId}.
3257
+ Immutable append-only transaction ledger. Distinct from AllowedUser (access
3258
+ state) and CustomerPayment (D22 — customer-level billing).'
3259
+ SitePaymentCreate:
3260
+ allOf:
3261
+ - $ref: '#/components/schemas/SitePayment'
3262
+ description: Write payload for creating a new SitePayment document. Fields marked
3263
+ `readOnly` are server-set and must not be included. Fields marked `x-immutable`
3264
+ may be set once at creation.
3265
+ required:
3266
+ - companyId
3267
+ - siteId
3268
+ - contact
3269
+ - sessionId
3270
+ - transactionId
3271
+ - tier
3272
+ - amount
3273
+ - currency
3274
+ - paidAt
3275
+ SitePaymentUpdate:
3276
+ allOf:
3277
+ - $ref: '#/components/schemas/SitePayment'
3278
+ description: Write payload for partial update (PATCH) of a SitePayment document.
3279
+ All fields optional. Fields marked `readOnly` or `x-immutable` must not be
3280
+ sent.
2830
3281
  Ticket:
2831
3282
  type: object
2832
3283
  properties: