@ameshkin/ticket-mate 0.1.21 → 0.1.23

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 (129) hide show
  1. package/package.json +2 -1
  2. package/public/acceptance-criteria/file-discovery.js +1 -1
  3. package/public/acceptance-criteria/file-discovery.js.map +1 -1
  4. package/public/cli/commands/env-debug.js +1 -1
  5. package/public/cli/commands/env-debug.js.map +1 -1
  6. package/public/cli/commands/init-repo.js +1 -1
  7. package/public/cli/commands/init-repo.js.map +1 -1
  8. package/public/cli/commands/status.js +1 -1
  9. package/public/cli/commands/status.js.map +1 -1
  10. package/public/cli/commands/superadmin.d.ts +9 -0
  11. package/public/cli/commands/superadmin.d.ts.map +1 -0
  12. package/public/cli/commands/superadmin.js +17 -0
  13. package/public/cli/commands/superadmin.js.map +1 -0
  14. package/public/cli/commands/test-workflow.js +1 -1
  15. package/public/cli/commands/test-workflow.js.map +1 -1
  16. package/public/cli/commands/webhook-setup.d.ts +8 -0
  17. package/public/cli/commands/webhook-setup.d.ts.map +1 -0
  18. package/public/cli/commands/webhook-setup.js +92 -0
  19. package/public/cli/commands/webhook-setup.js.map +1 -0
  20. package/public/cli/commands/webhooks-debug.js +1 -1
  21. package/public/cli/commands/webhooks-debug.js.map +1 -1
  22. package/public/cli/index.js +5 -0
  23. package/public/cli/index.js.map +1 -1
  24. package/public/cli/utils/get-cli-client.d.ts.map +1 -1
  25. package/public/cli/utils/get-cli-client.js +2 -1
  26. package/public/cli/utils/get-cli-client.js.map +1 -1
  27. package/public/config/config-loader.js +2 -2
  28. package/public/config/config-loader.js.map +1 -1
  29. package/public/config/config-wizard.js +1 -1
  30. package/public/config/config-wizard.js.map +1 -1
  31. package/public/config/config.js +1 -1
  32. package/public/config/config.js.map +1 -1
  33. package/public/config/jiraConnection.d.ts +3 -3
  34. package/public/config/jiraConnection.d.ts.map +1 -1
  35. package/public/config/jiraConnection.js +47 -41
  36. package/public/config/jiraConnection.js.map +1 -1
  37. package/public/config/pricing.d.ts +2 -2
  38. package/public/config/pricing.d.ts.map +1 -1
  39. package/public/config/pricing.js +164 -50
  40. package/public/config/pricing.js.map +1 -1
  41. package/public/config/project-mapping.js +1 -1
  42. package/public/config/project-mapping.js.map +1 -1
  43. package/public/fast-tasks/storage.d.ts +3 -2
  44. package/public/fast-tasks/storage.d.ts.map +1 -1
  45. package/public/fast-tasks/storage.js +24 -17
  46. package/public/fast-tasks/storage.js.map +1 -1
  47. package/public/jira-management/projects.d.ts.map +1 -1
  48. package/public/jira-management/projects.js +15 -13
  49. package/public/jira-management/projects.js.map +1 -1
  50. package/public/lib/auth/options.d.ts +0 -11
  51. package/public/lib/auth/options.d.ts.map +1 -1
  52. package/public/lib/auth/options.js +180 -698
  53. package/public/lib/auth/options.js.map +1 -1
  54. package/public/lib/dashboard-widgets.d.ts +2 -2
  55. package/public/lib/dashboard-widgets.d.ts.map +1 -1
  56. package/public/lib/dashboard-widgets.js +33 -33
  57. package/public/lib/dashboard-widgets.js.map +1 -1
  58. package/public/lib/docs.d.ts.map +1 -1
  59. package/public/lib/docs.js +5 -2
  60. package/public/lib/docs.js.map +1 -1
  61. package/public/lib/encryption.d.ts +2 -1
  62. package/public/lib/encryption.d.ts.map +1 -1
  63. package/public/lib/encryption.js +27 -20
  64. package/public/lib/encryption.js.map +1 -1
  65. package/public/lib/integrations/teams/auth.d.ts +1 -1
  66. package/public/lib/integrations/teams/auth.d.ts.map +1 -1
  67. package/public/lib/integrations/teams/auth.js +15 -15
  68. package/public/lib/integrations/teams/auth.js.map +1 -1
  69. package/public/lib/integrations/teams/transformer.d.ts.map +1 -1
  70. package/public/lib/integrations/teams/transformer.js +3 -1
  71. package/public/lib/integrations/teams/transformer.js.map +1 -1
  72. package/public/lib/invite/accept.d.ts +1 -0
  73. package/public/lib/invite/accept.d.ts.map +1 -1
  74. package/public/lib/invite/accept.js +22 -33
  75. package/public/lib/invite/accept.js.map +1 -1
  76. package/public/lib/invite/service.d.ts.map +1 -1
  77. package/public/lib/invite/service.js +7 -0
  78. package/public/lib/invite/service.js.map +1 -1
  79. package/public/lib/invite/types.d.ts +1 -0
  80. package/public/lib/invite/types.d.ts.map +1 -1
  81. package/public/lib/markdown/fallback-handler.js +2 -2
  82. package/public/lib/markdown/fallback-handler.js.map +1 -1
  83. package/public/lib/notifications.d.ts +1 -1
  84. package/public/lib/notifications.d.ts.map +1 -1
  85. package/public/lib/notifications.js +24 -7
  86. package/public/lib/notifications.js.map +1 -1
  87. package/public/lib/prisma.d.ts +5 -22
  88. package/public/lib/prisma.d.ts.map +1 -1
  89. package/public/lib/prisma.js +14 -132
  90. package/public/lib/prisma.js.map +1 -1
  91. package/public/lib/projects.d.ts +2 -2
  92. package/public/lib/webhook-events-store.d.ts +5 -6
  93. package/public/lib/webhook-events-store.d.ts.map +1 -1
  94. package/public/lib/webhook-events-store.js +63 -18
  95. package/public/lib/webhook-events-store.js.map +1 -1
  96. package/public/server/account/account.service.d.ts +217 -0
  97. package/public/server/account/account.service.d.ts.map +1 -0
  98. package/public/server/account/account.service.js +307 -0
  99. package/public/server/account/account.service.js.map +1 -0
  100. package/public/server/jira/jiraClient.d.ts +2 -1
  101. package/public/server/jira/jiraClient.d.ts.map +1 -1
  102. package/public/server/jira/jiraClient.js +4 -3
  103. package/public/server/jira/jiraClient.js.map +1 -1
  104. package/public/server/jira/tokens.d.ts.map +1 -1
  105. package/public/server/jira/tokens.js +0 -9
  106. package/public/server/jira/tokens.js.map +1 -1
  107. package/public/types/github.d.ts +18 -0
  108. package/public/types/github.d.ts.map +1 -0
  109. package/public/types/github.js +2 -0
  110. package/public/types/github.js.map +1 -0
  111. package/public/utils/adf.d.ts.map +1 -1
  112. package/public/utils/adf.js +2 -1
  113. package/public/utils/adf.js.map +1 -1
  114. package/public/utils/parseJiraError.d.ts +39 -0
  115. package/public/utils/parseJiraError.d.ts.map +1 -0
  116. package/public/utils/parseJiraError.js +70 -0
  117. package/public/utils/parseJiraError.js.map +1 -0
  118. package/public/utils/validation.d.ts.map +1 -1
  119. package/public/utils/validation.js +20 -20
  120. package/public/utils/validation.js.map +1 -1
  121. package/scripts/cli-wrapper.mjs +1 -0
  122. package/public/server/auth/account-provisioning.d.ts +0 -16
  123. package/public/server/auth/account-provisioning.d.ts.map +0 -1
  124. package/public/server/auth/account-provisioning.js +0 -109
  125. package/public/server/auth/account-provisioning.js.map +0 -1
  126. package/public/server/auth/atlassian-user-mapping.d.ts +0 -36
  127. package/public/server/auth/atlassian-user-mapping.d.ts.map +0 -1
  128. package/public/server/auth/atlassian-user-mapping.js +0 -97
  129. package/public/server/auth/atlassian-user-mapping.js.map +0 -1
@@ -14,19 +14,6 @@ export async function acceptInvite(token) {
14
14
  // 1. Find and validate invite
15
15
  const invite = await prisma.teamInvite.findUnique({
16
16
  where: { token },
17
- include: {
18
- invitedBy: {
19
- select: {
20
- accountUsers: {
21
- take: 1, // Assuming inviter belongs to the account they are inviting to
22
- // In a real multi-tenant system, invite should store accountId explicitly.
23
- // For this system, we rely on inviter's account context (or the only account they have permissions on).
24
- // Let's assume invitedByUserId has an AccountUser record we can trace.
25
- include: { account: true },
26
- },
27
- },
28
- },
29
- },
30
17
  });
31
18
  if (!invite) {
32
19
  throw new InviteError("Invalid invite token", "INVALID_TOKEN");
@@ -38,27 +25,28 @@ export async function acceptInvite(token) {
38
25
  throw new InviteError("Invite has expired", "INVITE_EXPIRED");
39
26
  }
40
27
  // Determine target account
41
- // Ideally TeamInvite should have accountId.
42
- // If not, we infer from inviter. But wait, `invitedByUserId` is just a user ID.
43
- // We need to know WHICH account they were invited to.
44
- // If our schema doesn't have accountId on TeamInvite, we might have a problem if a user is in multiple accounts.
45
- // However, looking at `service.ts`, we didn't save accountId.
46
- // Let's assume for this MVP/Context that we look up the inviter's active account or similar.
47
- // Or, we assume the inviter is in exactly one account (Owner/Admin context).
48
- // FIX: We should probably look up the AccountUser of the inviter that has ADMIN role?
49
- // Or check if we stored it? We didn't in INVITE-1.
50
- // Let's try to find the account from the inviter.
51
- // We'll search for the first account where the inviter is an ADMIN or OWNER.
52
- const inviterMembership = await prisma.accountUser.findFirst({
53
- where: {
54
- userId: invite.invitedByUserId,
55
- role: { in: ["ADMIN", "OWNER"] },
56
- },
57
- });
58
- if (!inviterMembership) {
59
- throw new InviteError("Inviter account context not found", "INVITER_CONTEXT_MISSING");
28
+ let targetAccountId = invite.accountId;
29
+ if (!targetAccountId) {
30
+ // Fallback logic for legacy invites without accountId
31
+ const inviterMembership = await prisma.accountUser.findFirst({
32
+ where: {
33
+ userId: invite.invitedByUserId,
34
+ role: { in: ["ADMIN", "OWNER"] },
35
+ },
36
+ });
37
+ if (!inviterMembership) {
38
+ throw new InviteError("Inviter account context not found", "INVITER_CONTEXT_MISSING");
39
+ }
40
+ // Since we can't be sure which account for legacy, we take the inviter's first admin account
41
+ targetAccountId = inviterMembership.accountId;
42
+ }
43
+ const accountId = targetAccountId;
44
+ // 0. Check seat limits
45
+ const { AccountService } = await import("@/server/account/account.service");
46
+ const canAdd = await AccountService.canAddSeat(accountId);
47
+ if (!canAdd) {
48
+ throw new InviteError("Cannot join team: account has reached seat limit. Please contact the account owner to upgrade.", "LIMIT_REACHED");
60
49
  }
61
- const targetAccountId = inviterMembership.accountId;
62
50
  // 2. Find or Create User
63
51
  let userId = "";
64
52
  let isNewUser = false;
@@ -156,6 +144,7 @@ export async function getInviteDetails(token) {
156
144
  role: true,
157
145
  expiresAt: true,
158
146
  status: true,
147
+ accountId: true,
159
148
  invitedBy: {
160
149
  select: {
161
150
  name: true,
@@ -1 +1 @@
1
- {"version":3,"file":"accept.js","sourceRoot":"","sources":["../../../src/lib/invite/accept.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"accept.js","sourceRoot":"","sources":["../../../src/lib/invite/accept.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/lib/invite/service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAG5D,qBAAa,WAAY,SAAQ,KAAK;IACpC,IAAI,EAAE,MAAM,CAAC;gBACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAK1C;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,iBAAiB,EACxB,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,cAAc,CAAC,CAsFzB"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/lib/invite/service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAI5D,qBAAa,WAAY,SAAQ,KAAK;IACpC,IAAI,EAAE,MAAM,CAAC;gBACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAK1C;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,iBAAiB,EACxB,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,cAAc,CAAC,CAgGzB"}
@@ -1,5 +1,6 @@
1
1
  import { prisma } from "@/lib/prisma";
2
2
  import { randomBytes } from "crypto";
3
+ import { AccountService } from "@/server/account/account.service";
3
4
  export class InviteError extends Error {
4
5
  code;
5
6
  constructor(message, code) {
@@ -13,6 +14,11 @@ export class InviteError extends Error {
13
14
  * Throws InviteError if user exists or pending invite exists.
14
15
  */
15
16
  export async function createInvite(input, invitedByUserId) {
17
+ // 0. Check seat limits
18
+ const canAdd = await AccountService.canAddSeat(input.accountId);
19
+ if (!canAdd) {
20
+ throw new InviteError("Cannot invite user: account has reached seat limit", "LIMIT_REACHED");
21
+ }
16
22
  // 1. Check if user already exists
17
23
  const existingUser = await prisma.user.findUnique({
18
24
  where: { email: input.email },
@@ -46,6 +52,7 @@ export async function createInvite(input, invitedByUserId) {
46
52
  expiresAt,
47
53
  status: "pending",
48
54
  invitedByUserId,
55
+ accountId: input.accountId,
49
56
  },
50
57
  });
51
58
  // 6. Send invite email
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/lib/invite/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/lib/invite/service.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ export type InviteRole = "ADMIN" | "MANAGER" | "USER";
2
2
  export interface CreateInviteInput {
3
3
  email: string;
4
4
  role: InviteRole;
5
+ accountId: string;
5
6
  displayName?: string;
6
7
  phoneNumber?: string;
7
8
  timeZone?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/invite/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEtD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,IAAI,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/invite/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEtD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,IAAI,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB"}
@@ -24,7 +24,7 @@ export class MarkdownHandler {
24
24
  const frontmatterRegex = /^---\s*\n([\s\S]*?)\n---\s*\n([\s\S]*)$/;
25
25
  const match = content.match(frontmatterRegex);
26
26
  let body = content;
27
- let metas = {};
27
+ const metas = {};
28
28
  if (match) {
29
29
  const frontmatter = match[1];
30
30
  body = match[2];
@@ -81,7 +81,7 @@ export class MarkdownHandler {
81
81
  }
82
82
  generateExcerpt(content, length) {
83
83
  // Remove markdown syntax for excerpt
84
- let text = content
84
+ const text = content
85
85
  .replace(/^#+\s+/gm, '') // Remove headers
86
86
  .replace(/\[([^\]]+)\]\([^\)]+\)/g, '$1') // Convert links to text
87
87
  .replace(/!\[([^\]]*)\]\([^\)]+\)/g, '') // Remove images
@@ -1 +1 @@
1
- {"version":3,"file":"fallback-handler.js","sourceRoot":"","sources":["../../../src/lib/markdown/fallback-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fallback-handler.js","sourceRoot":"","sources":["../../../src/lib/markdown/fallback-handler.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAchC,MAAM,OAAO,eAAe;IAClB,OAAO,CAAyB;IAExC,YAAY,UAAkC,EAAE;QAC9C,IAAI,CAAC,OAAO,GAAG;YACb,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,GAAG;YAC3C,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;SAC3C,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,QAAgB;QAC3B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAElD,sBAAsB;QACtB,MAAM,gBAAgB,GAAG,yCAAyC,CAAC;QACnE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAE9C,IAAI,IAAI,GAAG,OAAO,CAAC;QACnB,MAAM,KAAK,GAA4B,EAAE,CAAC;QAE1C,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAEhB,+CAA+C;YAC/C,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACrC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;oBACnB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;oBACjD,IAAI,KAAK,GAA8B,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAE7E,gBAAgB;oBAChB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;wBAC9C,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;wBACnD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC7B,CAAC;oBAED,iBAAiB;oBACjB,IAAI,KAAK,KAAK,MAAM;wBAAE,KAAK,GAAG,IAAI,CAAC;yBAC9B,IAAI,KAAK,KAAK,OAAO;wBAAE,KAAK,GAAG,KAAK,CAAC;oBAE1C,gBAAgB;yBACX,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;wBAC/C,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;oBACxB,CAAC;oBAED,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACrB,CAAC;YACH,CAAC;QACH,CAAC;QAED,kDAAkD;QAClD,MAAM,KAAK,GAAI,KAAK,CAAC,KAAgB;YACvB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YACvB,eAAe,CAAC;QAE9B,mBAAmB;QACnB,MAAM,OAAO,GAAI,KAAK,CAAC,OAAkB;YACzB,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,GAAG,CAAC,CAAC;QAE9E,OAAO;YACL,OAAO,EAAE,IAAI;YACb,KAAK;YACL,OAAO;YACP,KAAK;SACN,CAAC;IACJ,CAAC;IAEO,YAAY,CAAC,OAAe;QAClC,uBAAuB;QACvB,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC7C,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3B,CAAC;QAED,uBAAuB;QACvB,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC9C,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,eAAe,CAAC,OAAe,EAAE,MAAc;QACrD,qCAAqC;QACrC,MAAM,IAAI,GAAG,OAAO;aACjB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,iBAAiB;aACzC,OAAO,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC,wBAAwB;aACjE,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC,gBAAgB;aACxD,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,wBAAwB;aACpD,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC,cAAc;aACjD,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,gBAAgB;aAC/C,IAAI,EAAE,CAAC;QAEV,4CAA4C;QAC5C,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;YACtD,OAAO,cAAc,CAAC;QACxB,CAAC;QAED,qBAAqB;QACrB,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC;QAClD,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -55,7 +55,7 @@ export declare function getNotifications(options: {
55
55
  unreadOnly?: boolean;
56
56
  type?: NotificationType | string;
57
57
  source?: NotificationSource | string;
58
- userId: string;
58
+ userId?: string | null;
59
59
  }): Promise<{
60
60
  notifications: {
61
61
  id: any;
@@ -1 +1 @@
1
- {"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../../src/lib/notifications.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,MAAM,gBAAgB,GACxB,SAAS,GACT,gBAAgB,GAChB,gBAAgB,GAChB,iBAAiB,GACjB,qBAAqB,GACrB,kBAAkB,GAClB,aAAa,GACb,WAAW,GACX,eAAe,GACf,eAAe,GACf,OAAO,GACP,MAAM,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE7F,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAAC;IAChC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCtF;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,2BAAqB,CAAC;AAErD;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BpF;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAe5E;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAAC;IACjC,MAAM,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAAC;IACrC,MAAM,EAAE,MAAM,CAAC;CAChB;;;;;;;;;;;;;;;;;GAgEA"}
1
+ {"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../../src/lib/notifications.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,MAAM,gBAAgB,GACxB,SAAS,GACT,gBAAgB,GAChB,gBAAgB,GAChB,iBAAiB,GACjB,qBAAqB,GACrB,kBAAkB,GAClB,aAAa,GACb,WAAW,GACX,eAAe,GACf,eAAe,GACf,OAAO,GACP,MAAM,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE7F,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAAC;IAChC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCtF;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,2BAAqB,CAAC;AAErD;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BpF;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAe5E;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAAC;IACjC,MAAM,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;;;;;;;;;;;;;;;;;GA2EA"}
@@ -114,13 +114,20 @@ export async function markAllNotificationsRead(userId) {
114
114
  */
115
115
  export async function getNotifications(options) {
116
116
  const { limit = 50, offset = 0, unreadOnly = false, type, source, userId, } = options;
117
- // Validate userId is provided (TypeScript should enforce this, but runtime check for safety)
118
- if (!userId) {
119
- throw new Error('userId is required - cannot query notifications without user filter');
117
+ // Build where clause
118
+ const where = {};
119
+ // User filter logic:
120
+ // 1. If userId is provided: Match (userId = provided OR userId = null)
121
+ // 2. If userId is NOT provided: Match (userId = null) ONLY
122
+ if (userId) {
123
+ where.OR = [
124
+ { userId: userId },
125
+ { userId: null }
126
+ ];
127
+ }
128
+ else {
129
+ where.userId = null;
120
130
  }
121
- const where = {
122
- userId, // Always filter by userId - prevents cross-user data leaks
123
- };
124
131
  if (unreadOnly) {
125
132
  where.read = false;
126
133
  }
@@ -155,7 +162,17 @@ export async function getNotifications(options) {
155
162
  userId: n.userId, // Include userId in response
156
163
  })),
157
164
  total,
158
- unread: await prisma.notification.count({ where: { read: false, userId } }), // Always filter by userId
165
+ unread: await prisma.notification.count({
166
+ where: {
167
+ read: false,
168
+ ...(userId ? {
169
+ OR: [
170
+ { userId: userId },
171
+ { userId: null }
172
+ ]
173
+ } : { userId: null })
174
+ }
175
+ }),
159
176
  };
160
177
  }
161
178
  //# sourceMappingURL=notifications.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"notifications.js","sourceRoot":"","sources":["../../src/lib/notifications.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"notifications.js","sourceRoot":"","sources":["../../src/lib/notifications.ts"],"names":[],"mappings":"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"}
@@ -1,23 +1,6 @@
1
- /**
2
- * Lazy Prisma Client
3
- *
4
- * Prisma is only instantiated when actually needed at runtime.
5
- * This prevents build-time errors when DATABASE_URL is missing.
6
- *
7
- * IMPORTANT: This module can be imported during build, but Prisma client
8
- * will only be created when actually used (at runtime in API routes).
9
- */
10
- import type { PrismaClient } from "@prisma/client";
11
- /**
12
- * Prisma client instance
13
- *
14
- * Accessing this property will lazily create the client on first use.
15
- * Only use this in runtime code (API routes, server actions).
16
- *
17
- * The client is created synchronously on first access, which is safe
18
- * because API routes only execute at runtime, not during build.
19
- *
20
- * @throws Error if DATABASE_URL is missing when first accessed
21
- */
22
- export declare const prisma: PrismaClient;
1
+ import { PrismaClient } from "@prisma/client";
2
+ declare const prisma: PrismaClient<{
3
+ log: ("warn" | "error" | "query")[];
4
+ }, "warn" | "error" | "query", import("@prisma/client/runtime/library").DefaultArgs>;
5
+ export { prisma };
23
6
  //# sourceMappingURL=prisma.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prisma.d.ts","sourceRoot":"","sources":["../../src/lib/prisma.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AA4InD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,MAAM,EAAE,YAAkC,CAAC"}
1
+ {"version":3,"file":"prisma.d.ts","sourceRoot":"","sources":["../../src/lib/prisma.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAkB9C,QAAA,MAAM,MAAM;;oFAAoD,CAAC;AAOjE,OAAO,EAAE,MAAM,EAAE,CAAC"}
@@ -1,135 +1,17 @@
1
- /**
2
- * Lazy Prisma Client
3
- *
4
- * Prisma is only instantiated when actually needed at runtime.
5
- * This prevents build-time errors when DATABASE_URL is missing.
6
- *
7
- * IMPORTANT: This module can be imported during build, but Prisma client
8
- * will only be created when actually used (at runtime in API routes).
9
- */
10
- import { createRequire } from "module";
11
- // Create a require function for use in ESM context
12
- const require = createRequire(import.meta.url);
13
- const globalForPrisma = globalThis;
14
- let prismaClientInstance = undefined;
15
- /**
16
- * Get Prisma client instance (lazy initialization)
17
- *
18
- * This function lazily creates the Prisma client only when called.
19
- * It checks for DATABASE_URL and throws a clear error if missing.
20
- *
21
- * @throws Error if DATABASE_URL is missing
22
- */
23
- async function getPrismaClient() {
24
- // Check for DATABASE_URL at runtime (not build time)
25
- if (!process.env.DATABASE_URL) {
26
- throw new Error('DATABASE_URL is not set. ' +
27
- 'This is required for database operations. ' +
28
- 'If you are in Preview/Development without a database, this feature is not available.');
29
- }
30
- // Return cached instance if available
31
- if (prismaClientInstance) {
32
- return prismaClientInstance;
33
- }
34
- // Check global cache
35
- if (globalForPrisma.prisma) {
36
- prismaClientInstance = globalForPrisma.prisma;
37
- return prismaClientInstance;
38
- }
39
- // Lazy import PrismaClient using dynamic import
40
- // This avoids executing PrismaClient constructor during build
41
- const { PrismaClient: PrismaClientConstructor } = await import("@prisma/client");
42
- // Log database connection info
43
- const dbUrl = process.env.DATABASE_URL || '(not set)';
44
- const dbUrlForLog = dbUrl.includes('@')
45
- ? dbUrl.replace(/:[^:@]+@/, ':****@') // Mask password
46
- : dbUrl;
47
- console.log('[ticket-mate] 📦 Database connection:', {
48
- url: dbUrlForLog,
49
- host: dbUrl.match(/@([^:]+):/)?.[1] || 'unknown',
50
- database: dbUrl.match(/\/[^?]+/)?.[0]?.replace(/\//, '') || 'unknown',
51
- });
52
- const prisma = new PrismaClientConstructor({
53
- log: process.env.NODE_ENV === "development" ? ["query", "error", "warn"] : ["error"],
54
- });
55
- // Note: Prisma connects lazily on first query
56
- // We don't call $connect() here to avoid blocking module load
57
- // Connection errors will be caught in individual query handlers
58
- if (process.env.NODE_ENV !== "production") {
59
- globalForPrisma.prisma = prisma;
60
- }
61
- prismaClientInstance = prisma;
62
- return prisma;
63
- }
64
- /**
65
- * Synchronous getter for Prisma client
66
- *
67
- * For compatibility with existing code that expects synchronous access,
68
- * we use a proxy that lazily initializes on first property access.
69
- *
70
- * WARNING: This will throw if DATABASE_URL is missing when first accessed.
71
- */
72
- function createPrismaProxy() {
73
- return new Proxy({}, {
74
- get(_target, prop) {
75
- // Synchronously check if we have an instance
76
- if (prismaClientInstance) {
77
- const value = prismaClientInstance[prop];
78
- if (typeof value === 'function') {
79
- return value.bind(prismaClientInstance);
80
- }
81
- return value;
82
- }
83
- // If no instance, we need to create it synchronously
84
- // This will throw if DATABASE_URL is missing
85
- if (!process.env.DATABASE_URL) {
86
- throw new Error('DATABASE_URL is not set. ' +
87
- 'This is required for database operations. ' +
88
- 'If you are in Preview/Development without a database, this feature is not available.');
89
- }
90
- // Use createRequire to import PrismaClient synchronously in ESM context
91
- // This works because @prisma/client exports both ESM and CJS
92
- // We can't use await import() in a synchronous Proxy get trap
93
- const { PrismaClient: PrismaClientConstructor } = require("@prisma/client");
94
- if (globalForPrisma.prisma) {
95
- prismaClientInstance = globalForPrisma.prisma;
96
- }
97
- else {
98
- // Log database connection info
99
- const dbUrl = process.env.DATABASE_URL || '(not set)';
100
- const dbUrlForLog = dbUrl.includes('@')
101
- ? dbUrl.replace(/:[^:@]+@/, ':****@') // Mask password
102
- : dbUrl;
103
- console.log('[ticket-mate] 📦 Database connection:', {
104
- url: dbUrlForLog,
105
- host: dbUrl.match(/@([^:]+):/)?.[1] || 'unknown',
106
- database: dbUrl.match(/\/[^?]+/)?.[0]?.replace(/\//, '') || 'unknown',
107
- });
108
- prismaClientInstance = new PrismaClientConstructor({
109
- log: process.env.NODE_ENV === "development" ? ["query", "error", "warn"] : ["error"],
110
- });
111
- if (process.env.NODE_ENV !== "production") {
112
- globalForPrisma.prisma = prismaClientInstance;
113
- }
114
- }
115
- const value = prismaClientInstance[prop];
116
- if (typeof value === 'function') {
117
- return value.bind(prismaClientInstance);
118
- }
119
- return value;
120
- },
1
+ import { PrismaClient } from "@prisma/client";
2
+ const prismaClientSingleton = () => {
3
+ return new PrismaClient({
4
+ log: process.env.NODE_ENV === "development"
5
+ ? ["query", "error", "warn"]
6
+ : ["error"],
121
7
  });
8
+ };
9
+ const globalForPrisma = globalThis;
10
+ // Use existing global instance or create a new one
11
+ const prisma = globalForPrisma.prisma ?? prismaClientSingleton();
12
+ // Save instance to global in dev to survive hot reloads
13
+ if (process.env.NODE_ENV !== "production") {
14
+ globalForPrisma.prisma = prisma;
122
15
  }
123
- /**
124
- * Prisma client instance
125
- *
126
- * Accessing this property will lazily create the client on first use.
127
- * Only use this in runtime code (API routes, server actions).
128
- *
129
- * The client is created synchronously on first access, which is safe
130
- * because API routes only execute at runtime, not during build.
131
- *
132
- * @throws Error if DATABASE_URL is missing when first accessed
133
- */
134
- export const prisma = createPrismaProxy();
16
+ export { prisma };
135
17
  //# sourceMappingURL=prisma.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prisma.js","sourceRoot":"","sources":["../../src/lib/prisma.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prisma.js","sourceRoot":"","sources":["../../src/lib/prisma.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,qBAAqB,GAAG,GAAG,EAAE;IACjC,OAAO,IAAI,YAAY,CAAC;QACtB,GAAG,EACD,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa;YACpC,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC;YAC5B,CAAC,CAAC,CAAC,OAAO,CAAC;KAChB,CAAC,CAAC;AACL,CAAC,CAAC;AAIF,MAAM,eAAe,GAAG,UAEvB,CAAC;AAEF,mDAAmD;AACnD,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,IAAI,qBAAqB,EAAE,CAAC;AAEjE,wDAAwD;AACxD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;IAC1C,eAAe,CAAC,MAAM,GAAG,MAAM,CAAC;AAClC,CAAC;AAED,OAAO,EAAE,MAAM,EAAE,CAAC"}
@@ -15,10 +15,10 @@ export interface ProjectWithRepo {
15
15
  */
16
16
  export declare function getProjectWithRepoByJiraKey(jiraProjectKey: string): Promise<{
17
17
  id: string;
18
- slug: string;
18
+ repoPath: string;
19
19
  displayName: string;
20
+ slug: string;
20
21
  jiraProjectKey: string;
21
- repoPath: string;
22
22
  } | null>;
23
23
  /**
24
24
  * Update project repository path
@@ -1,7 +1,3 @@
1
- /**
2
- * Shared webhook events store
3
- * Used by both /api/webhooks/jira and /api/webhooks/events
4
- */
5
1
  export interface WebhookEvent {
6
2
  id: string;
7
3
  timestamp: string;
@@ -15,9 +11,12 @@ export interface WebhookEvent {
15
11
  direction: "INCOMING" | "OUTGOING";
16
12
  rawPayload?: any;
17
13
  changelog?: any;
14
+ result?: string;
15
+ errorMessage?: string;
16
+ workflowId?: string;
18
17
  }
19
- export declare function addWebhookEvent(event: Partial<WebhookEvent>): WebhookEvent;
20
- export declare function getWebhookEvents(): WebhookEvent[];
18
+ export declare function addWebhookEvent(event: Partial<WebhookEvent>): Promise<WebhookEvent>;
19
+ export declare function getWebhookEvents(): Promise<WebhookEvent[]>;
21
20
  export declare function clearWebhookEvents(): void;
22
21
  export declare function getWebhookEventsCount(): number;
23
22
  //# sourceMappingURL=webhook-events-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"webhook-events-store.d.ts","sourceRoot":"","sources":["../../src/lib/webhook-events-store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,UAAU,GAAG,UAAU,CAAC;IACnC,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,SAAS,CAAC,EAAE,GAAG,CAAC;CACjB;AAKD,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAyB1E;AAED,wBAAgB,gBAAgB,IAAI,YAAY,EAAE,CAEjD;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C"}
1
+ {"version":3,"file":"webhook-events-store.d.ts","sourceRoot":"","sources":["../../src/lib/webhook-events-store.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,UAAU,GAAG,UAAU,CAAC;IACnC,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD,wBAAsB,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAgDzF;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAwBhE;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAIzC;AAGD,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C"}