sentryTypes.tsx 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. import PropTypes from 'prop-types';
  2. const Metadata = PropTypes.shape({
  3. value: PropTypes.string,
  4. message: PropTypes.string,
  5. directive: PropTypes.string,
  6. type: PropTypes.string,
  7. title: PropTypes.string,
  8. uri: PropTypes.string,
  9. });
  10. const Avatar = PropTypes.shape({
  11. avatarType: PropTypes.oneOf(['letter_avatar', 'upload', 'gravatar']),
  12. avatarUuid: PropTypes.string,
  13. });
  14. /**
  15. * A User is someone that has registered on Sentry
  16. */
  17. const User = PropTypes.shape({
  18. avatar: Avatar,
  19. avatarUrl: PropTypes.string,
  20. dateJoined: PropTypes.string,
  21. email: PropTypes.string,
  22. emails: PropTypes.arrayOf(
  23. PropTypes.shape({
  24. is_verified: PropTypes.bool,
  25. id: PropTypes.string,
  26. email: PropTypes.string,
  27. })
  28. ),
  29. has2fa: PropTypes.bool,
  30. hasPasswordAuth: PropTypes.bool,
  31. id: PropTypes.string,
  32. identities: PropTypes.array,
  33. isActive: PropTypes.bool,
  34. isManaged: PropTypes.bool,
  35. lastActive: PropTypes.string,
  36. lastLogin: PropTypes.string,
  37. username: PropTypes.string,
  38. });
  39. const EventOrGroupType = PropTypes.oneOf([
  40. 'error',
  41. 'csp',
  42. 'hpkp',
  43. 'expectct',
  44. 'expectstaple',
  45. 'default',
  46. 'transaction',
  47. ]);
  48. const Group = PropTypes.shape({
  49. id: PropTypes.string.isRequired,
  50. annotations: PropTypes.array,
  51. assignedTo: User,
  52. count: PropTypes.string,
  53. culprit: PropTypes.string,
  54. firstSeen: PropTypes.string,
  55. hasSeen: PropTypes.bool,
  56. isBookmarked: PropTypes.bool,
  57. isPublic: PropTypes.bool,
  58. isSubscribed: PropTypes.bool,
  59. lastSeen: PropTypes.string,
  60. level: PropTypes.string,
  61. logger: PropTypes.string,
  62. metadata: Metadata,
  63. numComments: PropTypes.number,
  64. permalink: PropTypes.string,
  65. project: PropTypes.shape({
  66. name: PropTypes.string,
  67. slug: PropTypes.string,
  68. }),
  69. shareId: PropTypes.string,
  70. shortId: PropTypes.string,
  71. status: PropTypes.string,
  72. statusDetails: PropTypes.object,
  73. title: PropTypes.string,
  74. type: EventOrGroupType,
  75. userCount: PropTypes.number,
  76. });
  77. const Team = PropTypes.shape({
  78. id: PropTypes.string.isRequired,
  79. slug: PropTypes.string.isRequired,
  80. });
  81. const Project = PropTypes.shape({
  82. // snuba returns id as number
  83. id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
  84. slug: PropTypes.string.isRequired,
  85. // snuba results may not contain a `name` or `isBookmarked
  86. teams: PropTypes.arrayOf(Team),
  87. name: PropTypes.string,
  88. isBookmarked: PropTypes.bool,
  89. status: PropTypes.string,
  90. });
  91. const Organization = PropTypes.shape({
  92. id: PropTypes.string.isRequired,
  93. });
  94. export default {
  95. Group,
  96. Organization,
  97. Project,
  98. User,
  99. };