@igstack/app-catalog-backend-core 6.9.0 → 6.10.0

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 (39) hide show
  1. package/dist/db/syncAppCatalog.mjs +1 -0
  2. package/dist/db/syncAppCatalog.mjs.map +1 -1
  3. package/dist/generated/prisma/internal/class.mjs +4 -4
  4. package/dist/generated/prisma/internal/class.mjs.map +1 -1
  5. package/dist/generated/prisma/internal/prismaNamespace.d.mts +1 -0
  6. package/dist/generated/prisma/internal/prismaNamespace.d.mts.map +1 -1
  7. package/dist/generated/prisma/models/DbApprovalMethod.d.mts +1 -1
  8. package/dist/generated/prisma/models/DbAsset.d.mts +1 -1
  9. package/dist/generated/prisma/models/DbFeedback.d.mts +1 -1
  10. package/dist/generated/prisma/models/DbResource.d.mts +44 -1
  11. package/dist/generated/prisma/models/DbResource.d.mts.map +1 -1
  12. package/dist/index.d.mts +3 -3
  13. package/dist/index.mjs +2 -2
  14. package/dist/modules/appCatalog/service.d.mts +0 -1
  15. package/dist/modules/appCatalog/service.d.mts.map +1 -1
  16. package/dist/modules/appCatalog/service.mjs +2 -0
  17. package/dist/modules/appCatalog/service.mjs.map +1 -1
  18. package/dist/modules/feedback/feedbackRouter.mjs.map +1 -1
  19. package/dist/modules/feedback/service.d.mts +8 -1
  20. package/dist/modules/feedback/service.d.mts.map +1 -1
  21. package/dist/modules/feedback/service.mjs +12 -3
  22. package/dist/modules/feedback/service.mjs.map +1 -1
  23. package/dist/types/common/appCatalogTypes.d.mts +26 -1
  24. package/dist/types/common/appCatalogTypes.d.mts.map +1 -1
  25. package/package.json +4 -4
  26. package/prisma/schema.prisma +2 -0
  27. package/src/__tests__/rowToResourceClaims.test.ts +48 -0
  28. package/src/__tests__/stripHiddenText.test.ts +111 -0
  29. package/src/db/syncAppCatalog.ts +1 -0
  30. package/src/generated/prisma/internal/class.ts +4 -4
  31. package/src/generated/prisma/internal/prismaNamespace.ts +1 -0
  32. package/src/generated/prisma/internal/prismaNamespaceBrowser.ts +1 -0
  33. package/src/generated/prisma/models/DbResource.ts +45 -1
  34. package/src/index.ts +1 -0
  35. package/src/modules/appCatalog/service.ts +6 -1
  36. package/src/modules/feedback/feedbackRouter.ts +4 -2
  37. package/src/modules/feedback/service.ts +20 -2
  38. package/src/prisma-json-types.d.ts +3 -0
  39. package/src/types/common/appCatalogTypes.ts +26 -0
@@ -100,6 +100,7 @@ export type DbResourceCountAggregateOutputType = {
100
100
  urlIssues: number
101
101
  tiers:PrismaJson.TierVariant[]
102
102
  quickJumps:PrismaJson.QuickJump[]
103
+ claims:PrismaJson.Claim[]
103
104
  childrenLabel: number
104
105
  parentSlug: number
105
106
  tier: number
@@ -191,6 +192,7 @@ export type DbResourceCountAggregateInputType = {
191
192
  urlIssues?: true
192
193
  tiers?: true
193
194
  quickJumps?: true
195
+ claims?: true
194
196
  childrenLabel?: true
195
197
  parentSlug?: true
196
198
  tier?: true
@@ -303,6 +305,7 @@ export type DbResourceGroupByOutputType = {
303
305
  urlIssues: string[]
304
306
  tiers:PrismaJson.TierVariant[] | null
305
307
  quickJumps:PrismaJson.QuickJump[] | null
308
+ claims:PrismaJson.Claim[] | null
306
309
  childrenLabel: string | null
307
310
  parentSlug: string | null
308
311
  tier: string | null
@@ -363,6 +366,7 @@ export type DbResourceWhereInput = {
363
366
  urlIssues?: Prisma.StringNullableListFilter<"DbResource">
364
367
  tiers?: Prisma.JsonNullableFilter<"DbResource">
365
368
  quickJumps?: Prisma.JsonNullableFilter<"DbResource">
369
+ claims?: Prisma.JsonNullableFilter<"DbResource">
366
370
  childrenLabel?: Prisma.StringNullableFilter<"DbResource"> | string | null
367
371
  parentSlug?: Prisma.StringNullableFilter<"DbResource"> | string | null
368
372
  tier?: Prisma.StringNullableFilter<"DbResource"> | string | null
@@ -406,6 +410,7 @@ export type DbResourceOrderByWithRelationInput = {
406
410
  urlIssues?: Prisma.SortOrder
407
411
  tiers?: Prisma.SortOrderInput | Prisma.SortOrder
408
412
  quickJumps?: Prisma.SortOrderInput | Prisma.SortOrder
413
+ claims?: Prisma.SortOrderInput | Prisma.SortOrder
409
414
  childrenLabel?: Prisma.SortOrderInput | Prisma.SortOrder
410
415
  parentSlug?: Prisma.SortOrderInput | Prisma.SortOrder
411
416
  tier?: Prisma.SortOrderInput | Prisma.SortOrder
@@ -452,6 +457,7 @@ export type DbResourceWhereUniqueInput = Prisma.AtLeast<{
452
457
  urlIssues?: Prisma.StringNullableListFilter<"DbResource">
453
458
  tiers?: Prisma.JsonNullableFilter<"DbResource">
454
459
  quickJumps?: Prisma.JsonNullableFilter<"DbResource">
460
+ claims?: Prisma.JsonNullableFilter<"DbResource">
455
461
  childrenLabel?: Prisma.StringNullableFilter<"DbResource"> | string | null
456
462
  parentSlug?: Prisma.StringNullableFilter<"DbResource"> | string | null
457
463
  tier?: Prisma.StringNullableFilter<"DbResource"> | string | null
@@ -495,6 +501,7 @@ export type DbResourceOrderByWithAggregationInput = {
495
501
  urlIssues?: Prisma.SortOrder
496
502
  tiers?: Prisma.SortOrderInput | Prisma.SortOrder
497
503
  quickJumps?: Prisma.SortOrderInput | Prisma.SortOrder
504
+ claims?: Prisma.SortOrderInput | Prisma.SortOrder
498
505
  childrenLabel?: Prisma.SortOrderInput | Prisma.SortOrder
499
506
  parentSlug?: Prisma.SortOrderInput | Prisma.SortOrder
500
507
  tier?: Prisma.SortOrderInput | Prisma.SortOrder
@@ -540,6 +547,7 @@ export type DbResourceScalarWhereWithAggregatesInput = {
540
547
  urlIssues?: Prisma.StringNullableListFilter<"DbResource">
541
548
  tiers?: Prisma.JsonNullableWithAggregatesFilter<"DbResource">
542
549
  quickJumps?: Prisma.JsonNullableWithAggregatesFilter<"DbResource">
550
+ claims?: Prisma.JsonNullableWithAggregatesFilter<"DbResource">
543
551
  childrenLabel?: Prisma.StringNullableWithAggregatesFilter<"DbResource"> | string | null
544
552
  parentSlug?: Prisma.StringNullableWithAggregatesFilter<"DbResource"> | string | null
545
553
  tier?: Prisma.StringNullableWithAggregatesFilter<"DbResource"> | string | null
@@ -579,6 +587,7 @@ export type DbResourceCreateInput = {
579
587
  urlIssues?: Prisma.DbResourceCreateurlIssuesInput | string[]
580
588
  tiers?:PrismaJson.TierVariant[] | Prisma.NullableJsonNullValueInput
581
589
  quickJumps?:PrismaJson.QuickJump[] | Prisma.NullableJsonNullValueInput
590
+ claims?:PrismaJson.Claim[] | Prisma.NullableJsonNullValueInput
582
591
  childrenLabel?: string | null
583
592
  tier?: string | null
584
593
  aliases?: Prisma.DbResourceCreatealiasesInput | string[]
@@ -621,6 +630,7 @@ export type DbResourceUncheckedCreateInput = {
621
630
  urlIssues?: Prisma.DbResourceCreateurlIssuesInput | string[]
622
631
  tiers?:PrismaJson.TierVariant[] | Prisma.NullableJsonNullValueInput
623
632
  quickJumps?:PrismaJson.QuickJump[] | Prisma.NullableJsonNullValueInput
633
+ claims?:PrismaJson.Claim[] | Prisma.NullableJsonNullValueInput
624
634
  childrenLabel?: string | null
625
635
  parentSlug?: string | null
626
636
  tier?: string | null
@@ -663,6 +673,7 @@ export type DbResourceUpdateInput = {
663
673
  urlIssues?: Prisma.DbResourceUpdateurlIssuesInput | string[]
664
674
  tiers?:PrismaJson.TierVariant[] | Prisma.NullableJsonNullValueInput
665
675
  quickJumps?:PrismaJson.QuickJump[] | Prisma.NullableJsonNullValueInput
676
+ claims?:PrismaJson.Claim[] | Prisma.NullableJsonNullValueInput
666
677
  childrenLabel?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
667
678
  tier?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
668
679
  aliases?: Prisma.DbResourceUpdatealiasesInput | string[]
@@ -705,6 +716,7 @@ export type DbResourceUncheckedUpdateInput = {
705
716
  urlIssues?: Prisma.DbResourceUpdateurlIssuesInput | string[]
706
717
  tiers?:PrismaJson.TierVariant[] | Prisma.NullableJsonNullValueInput
707
718
  quickJumps?:PrismaJson.QuickJump[] | Prisma.NullableJsonNullValueInput
719
+ claims?:PrismaJson.Claim[] | Prisma.NullableJsonNullValueInput
708
720
  childrenLabel?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
709
721
  parentSlug?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
710
722
  tier?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
@@ -747,6 +759,7 @@ export type DbResourceCreateManyInput = {
747
759
  urlIssues?: Prisma.DbResourceCreateurlIssuesInput | string[]
748
760
  tiers?:PrismaJson.TierVariant[] | Prisma.NullableJsonNullValueInput
749
761
  quickJumps?:PrismaJson.QuickJump[] | Prisma.NullableJsonNullValueInput
762
+ claims?:PrismaJson.Claim[] | Prisma.NullableJsonNullValueInput
750
763
  childrenLabel?: string | null
751
764
  parentSlug?: string | null
752
765
  tier?: string | null
@@ -786,6 +799,7 @@ export type DbResourceUpdateManyMutationInput = {
786
799
  urlIssues?: Prisma.DbResourceUpdateurlIssuesInput | string[]
787
800
  tiers?:PrismaJson.TierVariant[] | Prisma.NullableJsonNullValueInput
788
801
  quickJumps?:PrismaJson.QuickJump[] | Prisma.NullableJsonNullValueInput
802
+ claims?:PrismaJson.Claim[] | Prisma.NullableJsonNullValueInput
789
803
  childrenLabel?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
790
804
  tier?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
791
805
  aliases?: Prisma.DbResourceUpdatealiasesInput | string[]
@@ -824,6 +838,7 @@ export type DbResourceUncheckedUpdateManyInput = {
824
838
  urlIssues?: Prisma.DbResourceUpdateurlIssuesInput | string[]
825
839
  tiers?:PrismaJson.TierVariant[] | Prisma.NullableJsonNullValueInput
826
840
  quickJumps?:PrismaJson.QuickJump[] | Prisma.NullableJsonNullValueInput
841
+ claims?:PrismaJson.Claim[] | Prisma.NullableJsonNullValueInput
827
842
  childrenLabel?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
828
843
  parentSlug?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
829
844
  tier?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
@@ -878,6 +893,7 @@ export type DbResourceCountOrderByAggregateInput = {
878
893
  urlIssues?: Prisma.SortOrder
879
894
  tiers?: Prisma.SortOrder
880
895
  quickJumps?: Prisma.SortOrder
896
+ claims?: Prisma.SortOrder
881
897
  childrenLabel?: Prisma.SortOrder
882
898
  parentSlug?: Prisma.SortOrder
883
899
  tier?: Prisma.SortOrder
@@ -1123,6 +1139,7 @@ export type DbResourceCreateWithoutChildrenInput = {
1123
1139
  urlIssues?: Prisma.DbResourceCreateurlIssuesInput | string[]
1124
1140
  tiers?:PrismaJson.TierVariant[] | Prisma.NullableJsonNullValueInput
1125
1141
  quickJumps?:PrismaJson.QuickJump[] | Prisma.NullableJsonNullValueInput
1142
+ claims?:PrismaJson.Claim[] | Prisma.NullableJsonNullValueInput
1126
1143
  childrenLabel?: string | null
1127
1144
  tier?: string | null
1128
1145
  aliases?: Prisma.DbResourceCreatealiasesInput | string[]
@@ -1164,6 +1181,7 @@ export type DbResourceUncheckedCreateWithoutChildrenInput = {
1164
1181
  urlIssues?: Prisma.DbResourceCreateurlIssuesInput | string[]
1165
1182
  tiers?:PrismaJson.TierVariant[] | Prisma.NullableJsonNullValueInput
1166
1183
  quickJumps?:PrismaJson.QuickJump[] | Prisma.NullableJsonNullValueInput
1184
+ claims?:PrismaJson.Claim[] | Prisma.NullableJsonNullValueInput
1167
1185
  childrenLabel?: string | null
1168
1186
  parentSlug?: string | null
1169
1187
  tier?: string | null
@@ -1210,6 +1228,7 @@ export type DbResourceCreateWithoutParentInput = {
1210
1228
  urlIssues?: Prisma.DbResourceCreateurlIssuesInput | string[]
1211
1229
  tiers?:PrismaJson.TierVariant[] | Prisma.NullableJsonNullValueInput
1212
1230
  quickJumps?:PrismaJson.QuickJump[] | Prisma.NullableJsonNullValueInput
1231
+ claims?:PrismaJson.Claim[] | Prisma.NullableJsonNullValueInput
1213
1232
  childrenLabel?: string | null
1214
1233
  tier?: string | null
1215
1234
  aliases?: Prisma.DbResourceCreatealiasesInput | string[]
@@ -1251,6 +1270,7 @@ export type DbResourceUncheckedCreateWithoutParentInput = {
1251
1270
  urlIssues?: Prisma.DbResourceCreateurlIssuesInput | string[]
1252
1271
  tiers?:PrismaJson.TierVariant[] | Prisma.NullableJsonNullValueInput
1253
1272
  quickJumps?:PrismaJson.QuickJump[] | Prisma.NullableJsonNullValueInput
1273
+ claims?:PrismaJson.Claim[] | Prisma.NullableJsonNullValueInput
1254
1274
  childrenLabel?: string | null
1255
1275
  tier?: string | null
1256
1276
  aliases?: Prisma.DbResourceCreatealiasesInput | string[]
@@ -1313,6 +1333,7 @@ export type DbResourceUpdateWithoutChildrenInput = {
1313
1333
  urlIssues?: Prisma.DbResourceUpdateurlIssuesInput | string[]
1314
1334
  tiers?:PrismaJson.TierVariant[] | Prisma.NullableJsonNullValueInput
1315
1335
  quickJumps?:PrismaJson.QuickJump[] | Prisma.NullableJsonNullValueInput
1336
+ claims?:PrismaJson.Claim[] | Prisma.NullableJsonNullValueInput
1316
1337
  childrenLabel?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
1317
1338
  tier?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
1318
1339
  aliases?: Prisma.DbResourceUpdatealiasesInput | string[]
@@ -1354,6 +1375,7 @@ export type DbResourceUncheckedUpdateWithoutChildrenInput = {
1354
1375
  urlIssues?: Prisma.DbResourceUpdateurlIssuesInput | string[]
1355
1376
  tiers?:PrismaJson.TierVariant[] | Prisma.NullableJsonNullValueInput
1356
1377
  quickJumps?:PrismaJson.QuickJump[] | Prisma.NullableJsonNullValueInput
1378
+ claims?:PrismaJson.Claim[] | Prisma.NullableJsonNullValueInput
1357
1379
  childrenLabel?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
1358
1380
  parentSlug?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
1359
1381
  tier?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
@@ -1414,6 +1436,7 @@ export type DbResourceScalarWhereInput = {
1414
1436
  urlIssues?: Prisma.StringNullableListFilter<"DbResource">
1415
1437
  tiers?: Prisma.JsonNullableFilter<"DbResource">
1416
1438
  quickJumps?: Prisma.JsonNullableFilter<"DbResource">
1439
+ claims?: Prisma.JsonNullableFilter<"DbResource">
1417
1440
  childrenLabel?: Prisma.StringNullableFilter<"DbResource"> | string | null
1418
1441
  parentSlug?: Prisma.StringNullableFilter<"DbResource"> | string | null
1419
1442
  tier?: Prisma.StringNullableFilter<"DbResource"> | string | null
@@ -1453,6 +1476,7 @@ export type DbResourceCreateWithoutFeedbackInput = {
1453
1476
  urlIssues?: Prisma.DbResourceCreateurlIssuesInput | string[]
1454
1477
  tiers?:PrismaJson.TierVariant[] | Prisma.NullableJsonNullValueInput
1455
1478
  quickJumps?:PrismaJson.QuickJump[] | Prisma.NullableJsonNullValueInput
1479
+ claims?:PrismaJson.Claim[] | Prisma.NullableJsonNullValueInput
1456
1480
  childrenLabel?: string | null
1457
1481
  tier?: string | null
1458
1482
  aliases?: Prisma.DbResourceCreatealiasesInput | string[]
@@ -1494,6 +1518,7 @@ export type DbResourceUncheckedCreateWithoutFeedbackInput = {
1494
1518
  urlIssues?: Prisma.DbResourceCreateurlIssuesInput | string[]
1495
1519
  tiers?:PrismaJson.TierVariant[] | Prisma.NullableJsonNullValueInput
1496
1520
  quickJumps?:PrismaJson.QuickJump[] | Prisma.NullableJsonNullValueInput
1521
+ claims?:PrismaJson.Claim[] | Prisma.NullableJsonNullValueInput
1497
1522
  childrenLabel?: string | null
1498
1523
  parentSlug?: string | null
1499
1524
  tier?: string | null
@@ -1551,6 +1576,7 @@ export type DbResourceUpdateWithoutFeedbackInput = {
1551
1576
  urlIssues?: Prisma.DbResourceUpdateurlIssuesInput | string[]
1552
1577
  tiers?:PrismaJson.TierVariant[] | Prisma.NullableJsonNullValueInput
1553
1578
  quickJumps?:PrismaJson.QuickJump[] | Prisma.NullableJsonNullValueInput
1579
+ claims?:PrismaJson.Claim[] | Prisma.NullableJsonNullValueInput
1554
1580
  childrenLabel?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
1555
1581
  tier?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
1556
1582
  aliases?: Prisma.DbResourceUpdatealiasesInput | string[]
@@ -1592,6 +1618,7 @@ export type DbResourceUncheckedUpdateWithoutFeedbackInput = {
1592
1618
  urlIssues?: Prisma.DbResourceUpdateurlIssuesInput | string[]
1593
1619
  tiers?:PrismaJson.TierVariant[] | Prisma.NullableJsonNullValueInput
1594
1620
  quickJumps?:PrismaJson.QuickJump[] | Prisma.NullableJsonNullValueInput
1621
+ claims?:PrismaJson.Claim[] | Prisma.NullableJsonNullValueInput
1595
1622
  childrenLabel?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
1596
1623
  parentSlug?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
1597
1624
  tier?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
@@ -1633,6 +1660,7 @@ export type DbResourceCreateWithoutSourceRefsInput = {
1633
1660
  urlIssues?: Prisma.DbResourceCreateurlIssuesInput | string[]
1634
1661
  tiers?:PrismaJson.TierVariant[] | Prisma.NullableJsonNullValueInput
1635
1662
  quickJumps?:PrismaJson.QuickJump[] | Prisma.NullableJsonNullValueInput
1663
+ claims?:PrismaJson.Claim[] | Prisma.NullableJsonNullValueInput
1636
1664
  childrenLabel?: string | null
1637
1665
  tier?: string | null
1638
1666
  aliases?: Prisma.DbResourceCreatealiasesInput | string[]
@@ -1674,6 +1702,7 @@ export type DbResourceUncheckedCreateWithoutSourceRefsInput = {
1674
1702
  urlIssues?: Prisma.DbResourceCreateurlIssuesInput | string[]
1675
1703
  tiers?:PrismaJson.TierVariant[] | Prisma.NullableJsonNullValueInput
1676
1704
  quickJumps?:PrismaJson.QuickJump[] | Prisma.NullableJsonNullValueInput
1705
+ claims?:PrismaJson.Claim[] | Prisma.NullableJsonNullValueInput
1677
1706
  childrenLabel?: string | null
1678
1707
  parentSlug?: string | null
1679
1708
  tier?: string | null
@@ -1731,6 +1760,7 @@ export type DbResourceUpdateWithoutSourceRefsInput = {
1731
1760
  urlIssues?: Prisma.DbResourceUpdateurlIssuesInput | string[]
1732
1761
  tiers?:PrismaJson.TierVariant[] | Prisma.NullableJsonNullValueInput
1733
1762
  quickJumps?:PrismaJson.QuickJump[] | Prisma.NullableJsonNullValueInput
1763
+ claims?:PrismaJson.Claim[] | Prisma.NullableJsonNullValueInput
1734
1764
  childrenLabel?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
1735
1765
  tier?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
1736
1766
  aliases?: Prisma.DbResourceUpdatealiasesInput | string[]
@@ -1772,6 +1802,7 @@ export type DbResourceUncheckedUpdateWithoutSourceRefsInput = {
1772
1802
  urlIssues?: Prisma.DbResourceUpdateurlIssuesInput | string[]
1773
1803
  tiers?:PrismaJson.TierVariant[] | Prisma.NullableJsonNullValueInput
1774
1804
  quickJumps?:PrismaJson.QuickJump[] | Prisma.NullableJsonNullValueInput
1805
+ claims?:PrismaJson.Claim[] | Prisma.NullableJsonNullValueInput
1775
1806
  childrenLabel?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
1776
1807
  parentSlug?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
1777
1808
  tier?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
@@ -1813,6 +1844,7 @@ export type DbResourceCreateManyParentInput = {
1813
1844
  urlIssues?: Prisma.DbResourceCreateurlIssuesInput | string[]
1814
1845
  tiers?:PrismaJson.TierVariant[] | Prisma.NullableJsonNullValueInput
1815
1846
  quickJumps?:PrismaJson.QuickJump[] | Prisma.NullableJsonNullValueInput
1847
+ claims?:PrismaJson.Claim[] | Prisma.NullableJsonNullValueInput
1816
1848
  childrenLabel?: string | null
1817
1849
  tier?: string | null
1818
1850
  aliases?: Prisma.DbResourceCreatealiasesInput | string[]
@@ -1851,6 +1883,7 @@ export type DbResourceUpdateWithoutParentInput = {
1851
1883
  urlIssues?: Prisma.DbResourceUpdateurlIssuesInput | string[]
1852
1884
  tiers?:PrismaJson.TierVariant[] | Prisma.NullableJsonNullValueInput
1853
1885
  quickJumps?:PrismaJson.QuickJump[] | Prisma.NullableJsonNullValueInput
1886
+ claims?:PrismaJson.Claim[] | Prisma.NullableJsonNullValueInput
1854
1887
  childrenLabel?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
1855
1888
  tier?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
1856
1889
  aliases?: Prisma.DbResourceUpdatealiasesInput | string[]
@@ -1892,6 +1925,7 @@ export type DbResourceUncheckedUpdateWithoutParentInput = {
1892
1925
  urlIssues?: Prisma.DbResourceUpdateurlIssuesInput | string[]
1893
1926
  tiers?:PrismaJson.TierVariant[] | Prisma.NullableJsonNullValueInput
1894
1927
  quickJumps?:PrismaJson.QuickJump[] | Prisma.NullableJsonNullValueInput
1928
+ claims?:PrismaJson.Claim[] | Prisma.NullableJsonNullValueInput
1895
1929
  childrenLabel?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
1896
1930
  tier?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
1897
1931
  aliases?: Prisma.DbResourceUpdatealiasesInput | string[]
@@ -1933,6 +1967,7 @@ export type DbResourceUncheckedUpdateManyWithoutParentInput = {
1933
1967
  urlIssues?: Prisma.DbResourceUpdateurlIssuesInput | string[]
1934
1968
  tiers?:PrismaJson.TierVariant[] | Prisma.NullableJsonNullValueInput
1935
1969
  quickJumps?:PrismaJson.QuickJump[] | Prisma.NullableJsonNullValueInput
1970
+ claims?:PrismaJson.Claim[] | Prisma.NullableJsonNullValueInput
1936
1971
  childrenLabel?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
1937
1972
  tier?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
1938
1973
  aliases?: Prisma.DbResourceUpdatealiasesInput | string[]
@@ -2020,6 +2055,7 @@ export type DbResourceSelect<ExtArgs extends runtime.Types.Extensions.InternalAr
2020
2055
  urlIssues?: boolean
2021
2056
  tiers?: boolean
2022
2057
  quickJumps?: boolean
2058
+ claims?: boolean
2023
2059
  childrenLabel?: boolean
2024
2060
  parentSlug?: boolean
2025
2061
  tier?: boolean
@@ -2064,6 +2100,7 @@ export type DbResourceSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Ex
2064
2100
  urlIssues?: boolean
2065
2101
  tiers?: boolean
2066
2102
  quickJumps?: boolean
2103
+ claims?: boolean
2067
2104
  childrenLabel?: boolean
2068
2105
  parentSlug?: boolean
2069
2106
  tier?: boolean
@@ -2104,6 +2141,7 @@ export type DbResourceSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Ex
2104
2141
  urlIssues?: boolean
2105
2142
  tiers?: boolean
2106
2143
  quickJumps?: boolean
2144
+ claims?: boolean
2107
2145
  childrenLabel?: boolean
2108
2146
  parentSlug?: boolean
2109
2147
  tier?: boolean
@@ -2144,6 +2182,7 @@ export type DbResourceSelectScalar = {
2144
2182
  urlIssues?: boolean
2145
2183
  tiers?: boolean
2146
2184
  quickJumps?: boolean
2185
+ claims?: boolean
2147
2186
  childrenLabel?: boolean
2148
2187
  parentSlug?: boolean
2149
2188
  tier?: boolean
@@ -2159,7 +2198,7 @@ export type DbResourceSelectScalar = {
2159
2198
  updatedAt?: boolean
2160
2199
  }
2161
2200
 
2162
- export type DbResourceOmit<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetOmit<"id" | "slug" | "type" | "displayName" | "abbreviation" | "nicknames" | "description" | "access" | "teams" | "accessRequest" | "notes" | "background" | "tags" | "appUrl" | "links" | "iconName" | "screenshotIds" | "deprecated" | "aiPrompt" | "aiMemory" | "urlIssues" | "tiers" | "quickJumps" | "childrenLabel" | "parentSlug" | "tier" | "aliases" | "ownerPersonSlug" | "approverSlugs" | "accessComments" | "extra" | "lastCheckedAt" | "nextCheckAfter" | "lastContentChangeAt" | "createdAt" | "updatedAt", ExtArgs["result"]["dbResource"]>
2201
+ export type DbResourceOmit<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetOmit<"id" | "slug" | "type" | "displayName" | "abbreviation" | "nicknames" | "description" | "access" | "teams" | "accessRequest" | "notes" | "background" | "tags" | "appUrl" | "links" | "iconName" | "screenshotIds" | "deprecated" | "aiPrompt" | "aiMemory" | "urlIssues" | "tiers" | "quickJumps" | "claims" | "childrenLabel" | "parentSlug" | "tier" | "aliases" | "ownerPersonSlug" | "approverSlugs" | "accessComments" | "extra" | "lastCheckedAt" | "nextCheckAfter" | "lastContentChangeAt" | "createdAt" | "updatedAt", ExtArgs["result"]["dbResource"]>
2163
2202
  export type DbResourceInclude<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
2164
2203
  sourceRefs?: boolean | Prisma.DbResource$sourceRefsArgs<ExtArgs>
2165
2204
  feedback?: boolean | Prisma.DbResource$feedbackArgs<ExtArgs>
@@ -2224,6 +2263,10 @@ export type $DbResourcePayload<ExtArgs extends runtime.Types.Extensions.Internal
2224
2263
  * [QuickJump[]]
2225
2264
  */
2226
2265
  quickJumps:PrismaJson.QuickJump[] | null
2266
+ /**
2267
+ * [Claim[]] Statements the card text is built from; see Claim in appCatalogTypes.
2268
+ */
2269
+ claims:PrismaJson.Claim[] | null
2227
2270
  childrenLabel: string | null
2228
2271
  parentSlug: string | null
2229
2272
  tier: string | null
@@ -2690,6 +2733,7 @@ export interface DbResourceFieldRefs {
2690
2733
  readonly urlIssues: Prisma.FieldRef<"DbResource", 'String[]'>
2691
2734
  readonly tiers: Prisma.FieldRef<"DbResource", 'Json'>
2692
2735
  readonly quickJumps: Prisma.FieldRef<"DbResource", 'Json'>
2736
+ readonly claims: Prisma.FieldRef<"DbResource", 'Json'>
2693
2737
  readonly childrenLabel: Prisma.FieldRef<"DbResource", 'String'>
2694
2738
  readonly parentSlug: Prisma.FieldRef<"DbResource", 'String'>
2695
2739
  readonly tier: Prisma.FieldRef<"DbResource", 'String'>
package/src/index.ts CHANGED
@@ -35,6 +35,7 @@ export {
35
35
  MAX_ATTACHMENTS,
36
36
  MAX_BODY_LENGTH,
37
37
  MAX_SUBJECT_LENGTH,
38
+ stripHiddenText,
38
39
  type FeedbackList,
39
40
  type FeedbackView,
40
41
  } from './modules/feedback/service'
@@ -128,7 +128,7 @@ export async function getApprovalMethodsFromPrisma(): Promise<
128
128
  })
129
129
  }
130
130
 
131
- function rowToResource(row: ResourceRowWithSourceRefs): Resource {
131
+ export function rowToResource(row: ResourceRowWithSourceRefs): Resource {
132
132
  const accessRequest =
133
133
  row.accessRequest as unknown as Resource['accessRequest']
134
134
  const teams = (row.teams as unknown as string[] | null) ?? []
@@ -172,6 +172,10 @@ function rowToResource(row: ResourceRowWithSourceRefs): Resource {
172
172
  row.quickJumps == null
173
173
  ? undefined
174
174
  : (row.quickJumps as unknown as Resource['quickJumps'])
175
+ const claims =
176
+ row.claims == null
177
+ ? undefined
178
+ : (row.claims as unknown as Resource['claims'])
175
179
  const freshness = computeFreshness({
176
180
  lastCheckedAt: row.lastCheckedAt ? row.lastCheckedAt.toISOString() : null,
177
181
  nextCheckAfter: row.nextCheckAfter
@@ -205,6 +209,7 @@ function rowToResource(row: ResourceRowWithSourceRefs): Resource {
205
209
  urlIssues,
206
210
  tiers,
207
211
  quickJumps,
212
+ claims,
208
213
  childrenLabel: row.childrenLabel ?? undefined,
209
214
  // Fields from former SubResource
210
215
  parentSlug: row.parentSlug ?? undefined,
@@ -69,8 +69,10 @@ export function createFeedbackRouter() {
69
69
  .object({
70
70
  resourceSlug: z.string().optional(),
71
71
  subject: z.string().max(MAX_SUBJECT_LENGTH).optional(),
72
- // Both optional on purpose: a bare flag with no words and no image is the
73
- // cheapest signal a passing visitor can send, and still worth having.
72
+ // Both optional: a note can be words, screenshots or both, and a
73
+ // catalog-level ask may carry only its subject. The entry's input asks
74
+ // for words or an image, but the API still stores an empty note as a
75
+ // bare flag, which is what older rows are.
74
76
  body: z.string().max(MAX_BODY_LENGTH).optional(),
75
77
  attachmentIds: z.array(z.string()).max(MAX_ATTACHMENTS).optional(),
76
78
  })
@@ -134,6 +134,23 @@ export async function listMyFeedback(
134
134
  return rows.map((row) => toView(row, actor))
135
135
  }
136
136
 
137
+ /**
138
+ * Strips invisible characters from text that AI agents will read.
139
+ *
140
+ * Removes zero-width characters (except ZWJ, needed for emoji), directional marks/overrides,
141
+ * and Unicode tag characters that could hide instructions or disguise links.
142
+ */
143
+ export function stripHiddenText(text: string): string {
144
+ // Zero-width: U+200B, U+200C, U+2060, U+FEFF
145
+ // Directional: U+200E-U+200F, U+202A-U+202E, U+2066-U+2069
146
+ // Tag chars: U+E0000-U+E007F
147
+ // Preserves U+200D (ZWJ) for emoji
148
+ return text.replace(
149
+ /[\u{200B}\u{200C}\u{200E}-\u{200F}\u{202A}-\u{202E}\u{2060}\u{2066}-\u{2069}\u{E0000}-\u{E007F}\u{FEFF}]/gu,
150
+ '',
151
+ )
152
+ }
153
+
137
154
  export class FeedbackError extends Error {
138
155
  constructor(
139
156
  readonly reason:
@@ -151,7 +168,8 @@ export class FeedbackError extends Error {
151
168
 
152
169
  function normaliseBody(body: string | undefined | null): string | null {
153
170
  if (body === undefined || body === null) return null
154
- const trimmed = body.trim()
171
+ const stripped = stripHiddenText(body)
172
+ const trimmed = stripped.trim()
155
173
  // A bare flag is a valid signal, so empty is stored as absent rather than refused.
156
174
  return trimmed ? trimmed.slice(0, MAX_BODY_LENGTH) : null
157
175
  }
@@ -198,7 +216,7 @@ export async function addFeedback(
198
216
  resourceId,
199
217
  subject: resourceId
200
218
  ? null
201
- : subject!.trim().slice(0, MAX_SUBJECT_LENGTH),
219
+ : stripHiddenText(subject!).trim().slice(0, MAX_SUBJECT_LENGTH),
202
220
  authorHash: actor.hash,
203
221
  authorAlias: actor.alias,
204
222
  body: normaliseBody(body),
@@ -35,6 +35,9 @@ declare global {
35
35
  // DbResource.quickJumps - Deep links that take one typed identifier
36
36
  type QuickJump = import('./types/index').QuickJump
37
37
 
38
+ // DbResource.claims - Validated descriptions shown on Documentation tab
39
+ type Claim = import('./types/index').Claim
40
+
38
41
  // DbResource.extra - Arbitrary extra data
39
42
  type SubResourceExtra = Record<string, unknown>
40
43
  }
@@ -154,6 +154,30 @@ export interface Freshness {
154
154
  isStale: boolean
155
155
  }
156
156
 
157
+ /**
158
+ * One plain statement about an entry, kept so the card can say why it says what it
159
+ * says. Active claims are an input the card text must honour, and they win over a
160
+ * source that contradicts them. Review claims are recorded but not yet verified;
161
+ * they never drive card text. Archived claims are kept with the reason they
162
+ * stopped applying, and are ignored.
163
+ */
164
+ export interface Claim {
165
+ /** One plain statement about the app, phrased as a fact. */
166
+ text: string
167
+ /** ISO date the claim was recorded. */
168
+ addedAt: string
169
+ /** Where it came from: `feedback:<id>`, a person or team, or a URL. */
170
+ origin?: string
171
+ /**
172
+ * `active` = verified, drives card text; `review` = recorded but not yet
173
+ * verified, never drives card text; `archived` = stopped applying.
174
+ */
175
+ status: 'active' | 'review' | 'archived'
176
+ /** Required when status is 'archived'. */
177
+ archiveReason?: string
178
+ archivedAt?: string
179
+ }
180
+
157
181
  /**
158
182
  * Resource entry in the catalog (application or sub-resource).
159
183
  * Unified model: applications have no parentSlug; sub-resources have parentSlug.
@@ -209,6 +233,8 @@ export interface Resource {
209
233
  tiers?: TierVariant[]
210
234
  /** Deep links that take one typed identifier — see {@link QuickJump}. */
211
235
  quickJumps?: QuickJump[]
236
+ /** Why the card says what it says — see {@link Claim}. */
237
+ claims?: Claim[]
212
238
  /**
213
239
  * What this resource's children are called, as a plural noun ("Accounts",
214
240
  * "Namespaces", "Databases"). Set on the PARENT, not the children.