@ingenx-io/valets-schema-mcp-server 0.2.7 → 0.2.8

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 (81) hide show
  1. package/data/docs/enums/app-status.md +1 -1
  2. package/data/docs/enums/attention-status.md +1 -1
  3. package/data/docs/enums/booking-status.md +1 -1
  4. package/data/docs/enums/contract-status.md +1 -1
  5. package/data/docs/enums/customer-payment-status.md +1 -1
  6. package/data/docs/enums/customer-payment-target-type.md +1 -1
  7. package/data/docs/enums/delivery-type.md +1 -1
  8. package/data/docs/enums/deployment-link-type.md +1 -1
  9. package/data/docs/enums/event-status.md +1 -1
  10. package/data/docs/enums/expense-payment-status.md +1 -1
  11. package/data/docs/enums/fulfillment-status.md +1 -1
  12. package/data/docs/enums/loyalty-transaction-type.md +1 -1
  13. package/data/docs/enums/milestone-status.md +1 -1
  14. package/data/docs/enums/notification-channel.md +1 -1
  15. package/data/docs/enums/notification-entity-type.md +1 -1
  16. package/data/docs/enums/notification-status.md +1 -1
  17. package/data/docs/enums/order-status.md +1 -1
  18. package/data/docs/enums/outbound-message-format.md +1 -1
  19. package/data/docs/enums/outbound-message-purpose.md +1 -1
  20. package/data/docs/enums/outbound-message-status.md +1 -1
  21. package/data/docs/enums/payment-method.md +1 -1
  22. package/data/docs/enums/payment-proof-status.md +1 -1
  23. package/data/docs/enums/payment-status.md +1 -1
  24. package/data/docs/enums/pending-issue.md +1 -1
  25. package/data/docs/enums/return-status.md +1 -1
  26. package/data/docs/enums/session-status.md +1 -1
  27. package/data/docs/enums/site-status.md +1 -1
  28. package/data/docs/enums/stocktake-frequency.md +1 -1
  29. package/data/docs/enums/stocktake-item-status.md +1 -1
  30. package/data/docs/enums/stocktake-status.md +1 -1
  31. package/data/docs/enums/ticket-status.md +1 -1
  32. package/data/docs/enums/waba-label.md +1 -1
  33. package/data/docs/enums/whatsapp-button-sub-type.md +1 -1
  34. package/data/docs/enums/whatsapp-template-component.md +1 -1
  35. package/data/docs/enums/whatsapp-template-status.md +1 -1
  36. package/data/docs/index.md +2 -2
  37. package/data/docs/models/allowed-user.md +1 -1
  38. package/data/docs/models/analytics-backfill.md +1 -1
  39. package/data/docs/models/analytics-daily.md +1 -1
  40. package/data/docs/models/analytics-event.md +1 -1
  41. package/data/docs/models/analytics-hourly.md +1 -1
  42. package/data/docs/models/app-payment.md +1 -1
  43. package/data/docs/models/app.md +1 -1
  44. package/data/docs/models/booking-version.md +1 -1
  45. package/data/docs/models/booking.md +1 -1
  46. package/data/docs/models/contract.md +1 -1
  47. package/data/docs/models/customer-payment-allocation.md +1 -1
  48. package/data/docs/models/customer-payment.md +1 -1
  49. package/data/docs/models/customer.md +1 -1
  50. package/data/docs/models/event.md +1 -1
  51. package/data/docs/models/expense.md +1 -1
  52. package/data/docs/models/loyalty-config.md +1 -1
  53. package/data/docs/models/loyalty-reward.md +1 -1
  54. package/data/docs/models/loyalty-status.md +1 -1
  55. package/data/docs/models/loyalty-transaction.md +1 -1
  56. package/data/docs/models/magic-link-request.md +1 -1
  57. package/data/docs/models/metrics-current.md +1 -1
  58. package/data/docs/models/metrics-daily.md +1 -1
  59. package/data/docs/models/metrics-monthly.md +1 -1
  60. package/data/docs/models/notification-record.md +67 -34
  61. package/data/docs/models/order-item.md +1 -1
  62. package/data/docs/models/order.md +1 -1
  63. package/data/docs/models/outbound-payment-allocation.md +1 -1
  64. package/data/docs/models/outbound-payment.md +1 -1
  65. package/data/docs/models/payment-webhook-delivery.md +1 -1
  66. package/data/docs/models/payment-webhook-endpoint.md +1 -1
  67. package/data/docs/models/sale.md +1 -1
  68. package/data/docs/models/site-payment.md +1 -1
  69. package/data/docs/models/site.md +1 -1
  70. package/data/docs/models/stocktake-item.md +1 -1
  71. package/data/docs/models/stocktake.md +1 -1
  72. package/data/docs/models/ticket.md +1 -1
  73. package/data/docs/models/user.md +1 -1
  74. package/data/docs/models/whatsapp-inbound-message.md +41 -17
  75. package/data/docs/models/whatsapp-outbound-lifecycle-event.md +1 -1
  76. package/data/docs/models/whatsapp-outbound-message.md +55 -31
  77. package/data/docs/models/whatsapp-template.md +1 -1
  78. package/data/static/llms.txt +13 -6
  79. package/data/static/openapi.yaml +74 -6
  80. package/data/static/schemas.json +48 -5
  81. package/package.json +1 -1
@@ -24,6 +24,7 @@ sidebar_position: 40
24
24
  "uid": "user_u8x92kqm"
25
25
  },
26
26
  "createdAt": "createdAt",
27
+ "contactE164": null,
27
28
  "status": "status",
28
29
  "wamid": null,
29
30
  "error": null,
@@ -58,21 +59,22 @@ sidebar_position: 40
58
59
  - [11. Property `createdAt`](#createdAt)
59
60
  - [11.1. Property `_seconds`](#createdAt__seconds)
60
61
  - [11.2. Property `_nanoseconds`](#createdAt__nanoseconds)
61
- - [12. Property `status`](#status)
62
- - [13. Property `wamid`](#wamid)
63
- - [14. Property `error`](#error)
64
- - [15. Property `sentAt`](#sentAt)
65
- - [15.1. Property `firestore-timestamp`](#sentAt_anyOf_i0)
66
- - [15.2. Property `item 1`](#sentAt_anyOf_i1)
67
- - [16. Property `deliveredAt`](#deliveredAt)
68
- - [16.1. Property `firestore-timestamp`](#deliveredAt_anyOf_i0)
69
- - [16.2. Property `item 1`](#deliveredAt_anyOf_i1)
70
- - [17. Property `readAt`](#readAt)
71
- - [17.1. Property `firestore-timestamp`](#readAt_anyOf_i0)
72
- - [17.2. Property `item 1`](#readAt_anyOf_i1)
73
- - [18. Property `failedAt`](#failedAt)
74
- - [18.1. Property `firestore-timestamp`](#failedAt_anyOf_i0)
75
- - [18.2. Property `item 1`](#failedAt_anyOf_i1)
62
+ - [12. Property `contactE164`](#contactE164)
63
+ - [13. Property `status`](#status)
64
+ - [14. Property `wamid`](#wamid)
65
+ - [15. Property `error`](#error)
66
+ - [16. Property `sentAt`](#sentAt)
67
+ - [16.1. Property `firestore-timestamp`](#sentAt_anyOf_i0)
68
+ - [16.2. Property `item 1`](#sentAt_anyOf_i1)
69
+ - [17. Property `deliveredAt`](#deliveredAt)
70
+ - [17.1. Property `firestore-timestamp`](#deliveredAt_anyOf_i0)
71
+ - [17.2. Property `item 1`](#deliveredAt_anyOf_i1)
72
+ - [18. Property `readAt`](#readAt)
73
+ - [18.1. Property `firestore-timestamp`](#readAt_anyOf_i0)
74
+ - [18.2. Property `item 1`](#readAt_anyOf_i1)
75
+ - [19. Property `failedAt`](#failedAt)
76
+ - [19.1. Property `firestore-timestamp`](#failedAt_anyOf_i0)
77
+ - [19.2. Property `item 1`](#failedAt_anyOf_i1)
76
78
 
77
79
  | | |
78
80
  | ------------------------- | --------------------------------------- |
@@ -96,6 +98,7 @@ sidebar_position: 40
96
98
  | - [orderUuid](#orderUuid ) | No | string or null | No | - | Order reference. Present on review_request messages. |
97
99
  | + [sentBy](#sentBy ) | No | object | No | - | (Immutable) Dashboard actor who enqueued the message. |
98
100
  | + [createdAt](#createdAt ) | No | object | No | In #/definitions/firestore-timestamp | (Immutable) Enqueue timestamp, set by the dashboard at create. |
101
+ | - [contactE164](#contactE164 ) | No | string or null | No | - | (Read-only) E.164-normalized recipient phone (e.g. +2250777471485). Canonical join key (#56). Populated by the backend; absent on pre-migration docs. |
99
102
  | + [status](#status ) | No | enum (of string) | No | In #/definitions/outbound-message-status | Delivery status. Created as \`queued\` by the dashboard; updated in place by the backend. |
100
103
  | - [wamid](#wamid ) | No | string or null | No | - | (Read-only) WhatsApp message ID returned by Meta once the backend sends. Absent while queued or on failure. |
101
104
  | - [error](#error ) | No | string or null | No | - | (Read-only) Human-readable failure reason. Present on status=failed. Raw Meta error detail lives in the lifecycle_events subcollection. |
@@ -402,7 +405,28 @@ Set at creation only. This field cannot be modified after the document is create
402
405
  Set at creation only. This field cannot be modified after the document is created. Include it in CREATE payloads; omit it (or leave unchanged) in UPDATE payloads.
403
406
  :::
404
407
 
405
- ## <a name="status"></a>12. Property `status`
408
+ ## <a name="contactE164"></a>12. Property `contactE164`
409
+
410
+ | | |
411
+ | ------------ | ---------------- |
412
+ | **Type** | `string or null` |
413
+ | **Required** | No |
414
+
415
+ **Description:** (Read-only) E.164-normalized recipient phone (e.g. +2250777471485). Canonical join key (#56). Populated by the backend; absent on pre-migration docs.
416
+
417
+ :::warning Server-set
418
+ Do not include in write requests. This field is set exclusively by the server (Firestore trigger or Admin SDK). Clients that send it will have the value silently ignored or may receive a validation error.
419
+ :::
420
+
421
+ :::note
422
+ E.164-normalized form of `to` (wa_id). Canonical join key across WhatsappOutboundMessage, WhatsappInboundMessage, and NotificationRecord. Use this for conversation threading, search, and cross-collection joins — not the raw `to` wa_id (#56).
423
+ :::
424
+
425
+ :::tip When to set
426
+ Populated by whatsapp-server on every new outbound doc. Absent on pre-#56 docs until the backfill migration runs. CI normalization: wa_id 22577471485 → +2250777471485 (insert trunk 0 after country code for 8-digit numbers in the 07/05/01 series that predate the 2014 10-digit migration).
427
+ :::
428
+
429
+ ## <a name="status"></a>13. Property `status`
406
430
 
407
431
  | | |
408
432
  | -------------- | ------------------------------------- |
@@ -423,7 +447,7 @@ Must be one of:
423
447
  Dashboard must create with `queued`. The backend owns every transition after (sent → delivered → read, or failed).
424
448
  :::
425
449
 
426
- ## <a name="wamid"></a>13. Property `wamid`
450
+ ## <a name="wamid"></a>14. Property `wamid`
427
451
 
428
452
  | | |
429
453
  | ------------ | ---------------- |
@@ -440,7 +464,7 @@ Do not include in write requests. This field is set exclusively by the server (F
440
464
  Useful for audit and dedup. Does NOT enable reply-threading for template messages — Meta silently ignores context.message_id on templates. Threading only works for kind=text within the 24-hour service window (#50).
441
465
  :::
442
466
 
443
- ## <a name="error"></a>14. Property `error`
467
+ ## <a name="error"></a>15. Property `error`
444
468
 
445
469
  | | |
446
470
  | ------------ | ---------------- |
@@ -453,7 +477,7 @@ Useful for audit and dedup. Does NOT enable reply-threading for template message
453
477
  Do not include in write requests. This field is set exclusively by the server (Firestore trigger or Admin SDK). Clients that send it will have the value silently ignored or may receive a validation error.
454
478
  :::
455
479
 
456
- ## <a name="sentAt"></a>15. Property `sentAt`
480
+ ## <a name="sentAt"></a>16. Property `sentAt`
457
481
 
458
482
  | | |
459
483
  | ------------------------- | ---------------- |
@@ -468,7 +492,7 @@ Do not include in write requests. This field is set exclusively by the server (F
468
492
  | [firestore-timestamp](#sentAt_anyOf_i0) |
469
493
  | [item 1](#sentAt_anyOf_i1) |
470
494
 
471
- ### <a name="sentAt_anyOf_i0"></a>15.1. Property `firestore-timestamp`
495
+ ### <a name="sentAt_anyOf_i0"></a>16.1. Property `firestore-timestamp`
472
496
 
473
497
  | | |
474
498
  | ------------------------- | ----------------------- |
@@ -479,7 +503,7 @@ Do not include in write requests. This field is set exclusively by the server (F
479
503
 
480
504
  **Description:** Firestore Timestamp — Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
481
505
 
482
- ### <a name="sentAt_anyOf_i1"></a>15.2. Property `item 1`
506
+ ### <a name="sentAt_anyOf_i1"></a>16.2. Property `item 1`
483
507
 
484
508
  | | |
485
509
  | ------------ | ------ |
@@ -490,7 +514,7 @@ Do not include in write requests. This field is set exclusively by the server (F
490
514
  Do not include in write requests. This field is set exclusively by the server (Firestore trigger or Admin SDK). Clients that send it will have the value silently ignored or may receive a validation error.
491
515
  :::
492
516
 
493
- ## <a name="deliveredAt"></a>16. Property `deliveredAt`
517
+ ## <a name="deliveredAt"></a>17. Property `deliveredAt`
494
518
 
495
519
  | | |
496
520
  | ------------------------- | ---------------- |
@@ -505,7 +529,7 @@ Do not include in write requests. This field is set exclusively by the server (F
505
529
  | [firestore-timestamp](#deliveredAt_anyOf_i0) |
506
530
  | [item 1](#deliveredAt_anyOf_i1) |
507
531
 
508
- ### <a name="deliveredAt_anyOf_i0"></a>16.1. Property `firestore-timestamp`
532
+ ### <a name="deliveredAt_anyOf_i0"></a>17.1. Property `firestore-timestamp`
509
533
 
510
534
  | | |
511
535
  | ------------------------- | ----------------------- |
@@ -516,7 +540,7 @@ Do not include in write requests. This field is set exclusively by the server (F
516
540
 
517
541
  **Description:** Firestore Timestamp — Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
518
542
 
519
- ### <a name="deliveredAt_anyOf_i1"></a>16.2. Property `item 1`
543
+ ### <a name="deliveredAt_anyOf_i1"></a>17.2. Property `item 1`
520
544
 
521
545
  | | |
522
546
  | ------------ | ------ |
@@ -527,7 +551,7 @@ Do not include in write requests. This field is set exclusively by the server (F
527
551
  Do not include in write requests. This field is set exclusively by the server (Firestore trigger or Admin SDK). Clients that send it will have the value silently ignored or may receive a validation error.
528
552
  :::
529
553
 
530
- ## <a name="readAt"></a>17. Property `readAt`
554
+ ## <a name="readAt"></a>18. Property `readAt`
531
555
 
532
556
  | | |
533
557
  | ------------------------- | ---------------- |
@@ -542,7 +566,7 @@ Do not include in write requests. This field is set exclusively by the server (F
542
566
  | [firestore-timestamp](#readAt_anyOf_i0) |
543
567
  | [item 1](#readAt_anyOf_i1) |
544
568
 
545
- ### <a name="readAt_anyOf_i0"></a>17.1. Property `firestore-timestamp`
569
+ ### <a name="readAt_anyOf_i0"></a>18.1. Property `firestore-timestamp`
546
570
 
547
571
  | | |
548
572
  | ------------------------- | ----------------------- |
@@ -553,7 +577,7 @@ Do not include in write requests. This field is set exclusively by the server (F
553
577
 
554
578
  **Description:** Firestore Timestamp — Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
555
579
 
556
- ### <a name="readAt_anyOf_i1"></a>17.2. Property `item 1`
580
+ ### <a name="readAt_anyOf_i1"></a>18.2. Property `item 1`
557
581
 
558
582
  | | |
559
583
  | ------------ | ------ |
@@ -564,7 +588,7 @@ Do not include in write requests. This field is set exclusively by the server (F
564
588
  Do not include in write requests. This field is set exclusively by the server (Firestore trigger or Admin SDK). Clients that send it will have the value silently ignored or may receive a validation error.
565
589
  :::
566
590
 
567
- ## <a name="failedAt"></a>18. Property `failedAt`
591
+ ## <a name="failedAt"></a>19. Property `failedAt`
568
592
 
569
593
  | | |
570
594
  | ------------------------- | ---------------- |
@@ -579,7 +603,7 @@ Do not include in write requests. This field is set exclusively by the server (F
579
603
  | [firestore-timestamp](#failedAt_anyOf_i0) |
580
604
  | [item 1](#failedAt_anyOf_i1) |
581
605
 
582
- ### <a name="failedAt_anyOf_i0"></a>18.1. Property `firestore-timestamp`
606
+ ### <a name="failedAt_anyOf_i0"></a>19.1. Property `firestore-timestamp`
583
607
 
584
608
  | | |
585
609
  | ------------------------- | ----------------------- |
@@ -590,7 +614,7 @@ Do not include in write requests. This field is set exclusively by the server (F
590
614
 
591
615
  **Description:** Firestore Timestamp — Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
592
616
 
593
- ### <a name="failedAt_anyOf_i1"></a>18.2. Property `item 1`
617
+ ### <a name="failedAt_anyOf_i1"></a>19.2. Property `item 1`
594
618
 
595
619
  | | |
596
620
  | ------------ | ------ |
@@ -598,7 +622,7 @@ Do not include in write requests. This field is set exclusively by the server (F
598
622
  | **Required** | No |
599
623
 
600
624
  ----------------------------------------------------------------------------------------------------------------------------
601
- Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-30 at 13:57:29 +0000
625
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-30 at 14:38:11 +0000
602
626
 
603
627
  :::warning Server-set
604
628
  Do not include in write requests. This field is set exclusively by the server (Firestore trigger or Admin SDK). Clients that send it will have the value silently ignored or may receive a validation error.
@@ -291,7 +291,7 @@ Do not include in write requests. This field is set exclusively by the server (F
291
291
  **Description:** (Read-only) Rendered preview text for display in the dashboard picker.
292
292
 
293
293
  ----------------------------------------------------------------------------------------------------------------------------
294
- Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-30 at 13:57:29 +0000
294
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-30 at 14:38:11 +0000
295
295
 
296
296
  :::warning Server-set
297
297
  Do not include in write requests. This field is set exclusively by the server (Firestore trigger or Admin SDK). Clients that send it will have the value silently ignored or may receive a validation error.
@@ -1332,17 +1332,20 @@ Fields: 12 (6 required)
1332
1332
  | recipients | object | yes | (Read-only) Recipients of the notification. |
1333
1333
  | recipients.to | array<object> | yes | Primary recipients. |
1334
1334
  | recipients.to[].email | string | no | Recipient email address. Present for email notifications. |
1335
- | recipients.to[].phone | string | no | Recipient phone number (E.164). Present for whatsapp/sms notifications. |
1335
+ | recipients.to[].phone | string | no | Recipient phone number as passed by the sender (may be raw wa_id or E.164). Present for whatsapp/sms notifications. |
1336
+ | recipients.to[].contactE164 | string | no | (Read-only) E.164-normalized phone (e.g. +2250777471485). Canonical join key across WhatsApp and notification collections (#56). |
1336
1337
  | recipients.to[].name | string | no | Recipient display name. |
1337
1338
  | recipients.to[].role | string | no | Recipient role (e.g. organizer, customer). |
1338
1339
  | recipients.cc | array<object> | no | CC recipients (email). |
1339
1340
  | recipients.cc[].email | string | no | Recipient email address. Present for email notifications. |
1340
- | recipients.cc[].phone | string | no | Recipient phone number (E.164). Present for whatsapp/sms notifications. |
1341
+ | recipients.cc[].phone | string | no | Recipient phone number as passed by the sender (may be raw wa_id or E.164). Present for whatsapp/sms notifications. |
1342
+ | recipients.cc[].contactE164 | string | no | (Read-only) E.164-normalized phone (e.g. +2250777471485). Canonical join key across WhatsApp and notification collections (#56). |
1341
1343
  | recipients.cc[].name | string | no | Recipient display name. |
1342
1344
  | recipients.cc[].role | string | no | Recipient role (e.g. organizer, customer). |
1343
1345
  | recipients.bcc | array<object> | no | BCC recipients (email). |
1344
1346
  | recipients.bcc[].email | string | no | Recipient email address. Present for email notifications. |
1345
- | recipients.bcc[].phone | string | no | Recipient phone number (E.164). Present for whatsapp/sms notifications. |
1347
+ | recipients.bcc[].phone | string | no | Recipient phone number as passed by the sender (may be raw wa_id or E.164). Present for whatsapp/sms notifications. |
1348
+ | recipients.bcc[].contactE164 | string | no | (Read-only) E.164-normalized phone (e.g. +2250777471485). Canonical join key across WhatsApp and notification collections (#56). |
1346
1349
  | recipients.bcc[].name | string | no | Recipient display name. |
1347
1350
  | recipients.bcc[].role | string | no | Recipient role (e.g. organizer, customer). |
1348
1351
  | relatedEntity | object | yes | (Read-only) Entity that triggered the notification. type=order triggers the dual-write to the order subcollection. |
@@ -1947,7 +1950,7 @@ Example:
1947
1950
  ```
1948
1951
 
1949
1952
  ### WhatsappInboundMessage
1950
- Fields: 13 (7 required)
1953
+ Fields: 14 (7 required)
1951
1954
 
1952
1955
  | Field | Type | Required | Description |
1953
1956
  |-------|------|----------|-------------|
@@ -1964,6 +1967,7 @@ Fields: 13 (7 required)
1964
1967
  | caption | ['string', 'null'] | no | Media caption text. Present when the sender included a caption. |
1965
1968
  | storageUrl | ['string', 'null'] | no | Durable Cloud Storage URL for the downloaded media binary. Present after the media has been fetched and stored server-side. |
1966
1969
  | context | ['object', 'null'] | no | Reply/forward context. Present on replies and forwarded messages. |
1970
+ | contactE164 | ['string', 'null'] | no | (Read-only) E.164-normalized sender phone (e.g. +2250777471485). Canonical join key (#56). Populated by the backend; absent on pre-migration docs. |
1967
1971
 
1968
1972
  Example:
1969
1973
  ```json
@@ -1980,7 +1984,8 @@ Example:
1980
1984
  "mediaId": null,
1981
1985
  "caption": null,
1982
1986
  "storageUrl": null,
1983
- "context": null
1987
+ "context": null,
1988
+ "contactE164": null
1984
1989
  }
1985
1990
  ```
1986
1991
 
@@ -2019,7 +2024,7 @@ Example:
2019
2024
  ```
2020
2025
 
2021
2026
  ### WhatsappOutboundMessage
2022
- Fields: 18 (7 required)
2027
+ Fields: 19 (7 required)
2023
2028
 
2024
2029
  | Field | Type | Required | Description |
2025
2030
  |-------|------|----------|-------------|
@@ -2036,6 +2041,7 @@ Fields: 18 (7 required)
2036
2041
  | sentBy.uid | string | yes | Firebase Auth UID of the dashboard user who enqueued the message. |
2037
2042
  | sentBy.email | string | no | Email of the sender, if available. |
2038
2043
  | createdAt | FirestoreTimestamp | yes | (Immutable) Enqueue timestamp, set by the dashboard at create. |
2044
+ | contactE164 | ['string', 'null'] | no | (Read-only) E.164-normalized recipient phone (e.g. +2250777471485). Canonical join key (#56). Populated by the backend; absent on pre-migration docs. |
2039
2045
  | status | OutboundMessageStatus | yes | Delivery status. Created as `queued` by the dashboard; updated in place by the backend. |
2040
2046
  | wamid | ['string', 'null'] | no | (Read-only) WhatsApp message ID returned by Meta once the backend sends. Absent while queued or on failure. |
2041
2047
  | error | ['string', 'null'] | no | (Read-only) Human-readable failure reason. Present on status=failed. Raw Meta error detail lives in the lifecycle_events subcollection. |
@@ -2060,6 +2066,7 @@ Example:
2060
2066
  "uid": "user_u8x92kqm"
2061
2067
  },
2062
2068
  "createdAt": "createdAt",
2069
+ "contactE164": null,
2063
2070
  "status": "status",
2064
2071
  "wamid": null,
2065
2072
  "error": null,
@@ -3999,8 +3999,20 @@ components:
3999
3999
  description: Recipient email address. Present for email notifications.
4000
4000
  type: string
4001
4001
  phone:
4002
- description: Recipient phone number (E.164). Present for whatsapp/sms
4003
- notifications.
4002
+ description: Recipient phone number as passed by the sender (may
4003
+ be raw wa_id or E.164). Present for whatsapp/sms notifications.
4004
+ type: string
4005
+ contactE164:
4006
+ readOnly: true
4007
+ x-note: Canonical E.164 phone, normalized from `phone` by the
4008
+ backend writer. Use this for joins and search, not the raw `phone`
4009
+ field (#56). Absent on pre-migration docs.
4010
+ x-when: Populated by Cloud Functions on every new NotificationRecord
4011
+ for whatsapp/sms channels. CI normalization applied (8→10-digit
4012
+ 07/05/01 series).
4013
+ description: (Read-only) E.164-normalized phone (e.g. +2250777471485).
4014
+ Canonical join key across WhatsApp and notification collections
4015
+ (#56).
4004
4016
  type: string
4005
4017
  name:
4006
4018
  description: Recipient display name.
@@ -4021,8 +4033,20 @@ components:
4021
4033
  description: Recipient email address. Present for email notifications.
4022
4034
  type: string
4023
4035
  phone:
4024
- description: Recipient phone number (E.164). Present for whatsapp/sms
4025
- notifications.
4036
+ description: Recipient phone number as passed by the sender (may
4037
+ be raw wa_id or E.164). Present for whatsapp/sms notifications.
4038
+ type: string
4039
+ contactE164:
4040
+ readOnly: true
4041
+ x-note: Canonical E.164 phone, normalized from `phone` by the
4042
+ backend writer. Use this for joins and search, not the raw `phone`
4043
+ field (#56). Absent on pre-migration docs.
4044
+ x-when: Populated by Cloud Functions on every new NotificationRecord
4045
+ for whatsapp/sms channels. CI normalization applied (8→10-digit
4046
+ 07/05/01 series).
4047
+ description: (Read-only) E.164-normalized phone (e.g. +2250777471485).
4048
+ Canonical join key across WhatsApp and notification collections
4049
+ (#56).
4026
4050
  type: string
4027
4051
  name:
4028
4052
  description: Recipient display name.
@@ -4042,8 +4066,20 @@ components:
4042
4066
  description: Recipient email address. Present for email notifications.
4043
4067
  type: string
4044
4068
  phone:
4045
- description: Recipient phone number (E.164). Present for whatsapp/sms
4046
- notifications.
4069
+ description: Recipient phone number as passed by the sender (may
4070
+ be raw wa_id or E.164). Present for whatsapp/sms notifications.
4071
+ type: string
4072
+ contactE164:
4073
+ readOnly: true
4074
+ x-note: Canonical E.164 phone, normalized from `phone` by the
4075
+ backend writer. Use this for joins and search, not the raw `phone`
4076
+ field (#56). Absent on pre-migration docs.
4077
+ x-when: Populated by Cloud Functions on every new NotificationRecord
4078
+ for whatsapp/sms channels. CI normalization applied (8→10-digit
4079
+ 07/05/01 series).
4080
+ description: (Read-only) E.164-normalized phone (e.g. +2250777471485).
4081
+ Canonical join key across WhatsApp and notification collections
4082
+ (#56).
4047
4083
  type: string
4048
4084
  name:
4049
4085
  description: Recipient display name.
@@ -6071,6 +6107,22 @@ components:
6071
6107
  type: boolean
6072
6108
  const: true
6073
6109
  additionalProperties: false
6110
+ contactE164:
6111
+ readOnly: true
6112
+ x-note: E.164-normalized form of `from` (wa_id). Canonical join key across
6113
+ WhatsappInboundMessage, WhatsappOutboundMessage, and NotificationRecord.
6114
+ Use this for conversation threading, search, and cross-collection joins
6115
+ — not the raw `from` wa_id (#56).
6116
+ x-when: 'Populated by whatsapp-server on every new inbound doc. Absent on
6117
+ pre-#56 docs until the backfill migration runs. CI normalization: wa_id
6118
+ 22577471485 → +2250777471485 (insert trunk 0 after country code for 8-digit
6119
+ numbers in the 07/05/01 series that predate the 2014 10-digit migration).'
6120
+ description: (Read-only) E.164-normalized sender phone (e.g. +2250777471485).
6121
+ Canonical join key (#56). Populated by the backend; absent on pre-migration
6122
+ docs.
6123
+ type:
6124
+ - string
6125
+ - 'null'
6074
6126
  required:
6075
6127
  - wabaId
6076
6128
  - waba
@@ -6290,6 +6342,22 @@ components:
6290
6342
  $ref: '#/components/schemas/FirestoreTimestamp'
6291
6343
  description: (Immutable) Enqueue timestamp, set by the dashboard at create.
6292
6344
  x-immutable: true
6345
+ contactE164:
6346
+ readOnly: true
6347
+ x-note: E.164-normalized form of `to` (wa_id). Canonical join key across
6348
+ WhatsappOutboundMessage, WhatsappInboundMessage, and NotificationRecord.
6349
+ Use this for conversation threading, search, and cross-collection joins
6350
+ — not the raw `to` wa_id (#56).
6351
+ x-when: 'Populated by whatsapp-server on every new outbound doc. Absent
6352
+ on pre-#56 docs until the backfill migration runs. CI normalization: wa_id
6353
+ 22577471485 → +2250777471485 (insert trunk 0 after country code for 8-digit
6354
+ numbers in the 07/05/01 series that predate the 2014 10-digit migration).'
6355
+ description: (Read-only) E.164-normalized recipient phone (e.g. +2250777471485).
6356
+ Canonical join key (#56). Populated by the backend; absent on pre-migration
6357
+ docs.
6358
+ type:
6359
+ - string
6360
+ - 'null'
6293
6361
  status:
6294
6362
  $ref: '#/components/schemas/OutboundMessageStatus'
6295
6363
  description: Delivery status. Created as `queued` by the dashboard; updated
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "description": "@valets/schema \u2014 consolidated schema bundle",
4
- "generated": "2026-05-30T13:57:29.446011+00:00",
4
+ "generated": "2026-05-30T14:38:11.260961+00:00",
5
5
  "schemas": {
6
6
  "allowed-user": {
7
7
  "type": "object",
@@ -4467,7 +4467,14 @@
4467
4467
  "type": "string"
4468
4468
  },
4469
4469
  "phone": {
4470
- "description": "Recipient phone number (E.164). Present for whatsapp/sms notifications.",
4470
+ "description": "Recipient phone number as passed by the sender (may be raw wa_id or E.164). Present for whatsapp/sms notifications.",
4471
+ "type": "string"
4472
+ },
4473
+ "contactE164": {
4474
+ "readOnly": true,
4475
+ "x-note": "Canonical E.164 phone, normalized from `phone` by the backend writer. Use this for joins and search, not the raw `phone` field (#56). Absent on pre-migration docs.",
4476
+ "x-when": "Populated by Cloud Functions on every new NotificationRecord for whatsapp/sms channels. CI normalization applied (8\u219210-digit 07/05/01 series).",
4477
+ "description": "(Read-only) E.164-normalized phone (e.g. +2250777471485). Canonical join key across WhatsApp and notification collections (#56).",
4471
4478
  "type": "string"
4472
4479
  },
4473
4480
  "name": {
@@ -4495,7 +4502,14 @@
4495
4502
  "type": "string"
4496
4503
  },
4497
4504
  "phone": {
4498
- "description": "Recipient phone number (E.164). Present for whatsapp/sms notifications.",
4505
+ "description": "Recipient phone number as passed by the sender (may be raw wa_id or E.164). Present for whatsapp/sms notifications.",
4506
+ "type": "string"
4507
+ },
4508
+ "contactE164": {
4509
+ "readOnly": true,
4510
+ "x-note": "Canonical E.164 phone, normalized from `phone` by the backend writer. Use this for joins and search, not the raw `phone` field (#56). Absent on pre-migration docs.",
4511
+ "x-when": "Populated by Cloud Functions on every new NotificationRecord for whatsapp/sms channels. CI normalization applied (8\u219210-digit 07/05/01 series).",
4512
+ "description": "(Read-only) E.164-normalized phone (e.g. +2250777471485). Canonical join key across WhatsApp and notification collections (#56).",
4499
4513
  "type": "string"
4500
4514
  },
4501
4515
  "name": {
@@ -4522,7 +4536,14 @@
4522
4536
  "type": "string"
4523
4537
  },
4524
4538
  "phone": {
4525
- "description": "Recipient phone number (E.164). Present for whatsapp/sms notifications.",
4539
+ "description": "Recipient phone number as passed by the sender (may be raw wa_id or E.164). Present for whatsapp/sms notifications.",
4540
+ "type": "string"
4541
+ },
4542
+ "contactE164": {
4543
+ "readOnly": true,
4544
+ "x-note": "Canonical E.164 phone, normalized from `phone` by the backend writer. Use this for joins and search, not the raw `phone` field (#56). Absent on pre-migration docs.",
4545
+ "x-when": "Populated by Cloud Functions on every new NotificationRecord for whatsapp/sms channels. CI normalization applied (8\u219210-digit 07/05/01 series).",
4546
+ "description": "(Read-only) E.164-normalized phone (e.g. +2250777471485). Canonical join key across WhatsApp and notification collections (#56).",
4526
4547
  "type": "string"
4527
4548
  },
4528
4549
  "name": {
@@ -7361,6 +7382,16 @@
7361
7382
  }
7362
7383
  },
7363
7384
  "additionalProperties": false
7385
+ },
7386
+ "contactE164": {
7387
+ "readOnly": true,
7388
+ "x-note": "E.164-normalized form of `from` (wa_id). Canonical join key across WhatsappInboundMessage, WhatsappOutboundMessage, and NotificationRecord. Use this for conversation threading, search, and cross-collection joins \u2014 not the raw `from` wa_id (#56).",
7389
+ "x-when": "Populated by whatsapp-server on every new inbound doc. Absent on pre-#56 docs until the backfill migration runs. CI normalization: wa_id 22577471485 \u2192 +2250777471485 (insert trunk 0 after country code for 8-digit numbers in the 07/05/01 series that predate the 2014 10-digit migration).",
7390
+ "description": "(Read-only) E.164-normalized sender phone (e.g. +2250777471485). Canonical join key (#56). Populated by the backend; absent on pre-migration docs.",
7391
+ "type": [
7392
+ "string",
7393
+ "null"
7394
+ ]
7364
7395
  }
7365
7396
  },
7366
7397
  "required": [
@@ -7387,7 +7418,8 @@
7387
7418
  "mediaId": null,
7388
7419
  "caption": null,
7389
7420
  "storageUrl": null,
7390
- "context": null
7421
+ "context": null,
7422
+ "contactE164": null
7391
7423
  }
7392
7424
  },
7393
7425
  "whatsapp-outbound-lifecycle-event": {
@@ -7623,6 +7655,16 @@
7623
7655
  "description": "(Immutable) Enqueue timestamp, set by the dashboard at create.",
7624
7656
  "x-immutable": true
7625
7657
  },
7658
+ "contactE164": {
7659
+ "readOnly": true,
7660
+ "x-note": "E.164-normalized form of `to` (wa_id). Canonical join key across WhatsappOutboundMessage, WhatsappInboundMessage, and NotificationRecord. Use this for conversation threading, search, and cross-collection joins \u2014 not the raw `to` wa_id (#56).",
7661
+ "x-when": "Populated by whatsapp-server on every new outbound doc. Absent on pre-#56 docs until the backfill migration runs. CI normalization: wa_id 22577471485 \u2192 +2250777471485 (insert trunk 0 after country code for 8-digit numbers in the 07/05/01 series that predate the 2014 10-digit migration).",
7662
+ "description": "(Read-only) E.164-normalized recipient phone (e.g. +2250777471485). Canonical join key (#56). Populated by the backend; absent on pre-migration docs.",
7663
+ "type": [
7664
+ "string",
7665
+ "null"
7666
+ ]
7667
+ },
7626
7668
  "status": {
7627
7669
  "$ref": "#/definitions/outbound-message-status",
7628
7670
  "description": "Delivery status. Created as `queued` by the dashboard; updated in place by the backend.",
@@ -7719,6 +7761,7 @@
7719
7761
  "uid": "user_u8x92kqm"
7720
7762
  },
7721
7763
  "createdAt": "createdAt",
7764
+ "contactE164": null,
7722
7765
  "status": "status",
7723
7766
  "wamid": null,
7724
7767
  "error": null,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ingenx-io/valets-schema-mcp-server",
3
- "version": "0.2.7",
3
+ "version": "0.2.8",
4
4
  "description": "MCP server exposing @valets/schema documentation to AI agents",
5
5
  "type": "module",
6
6
  "main": "index.js",