@uniforge/portal 0.1.0-alpha.2

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 (49) hide show
  1. package/dist/auth/index.d.cts +104 -0
  2. package/dist/auth/index.d.ts +104 -0
  3. package/dist/auth/index.js +194 -0
  4. package/dist/auth/index.js.map +1 -0
  5. package/dist/auth/index.mjs +160 -0
  6. package/dist/auth/index.mjs.map +1 -0
  7. package/dist/dashboard/index.d.cts +76 -0
  8. package/dist/dashboard/index.d.ts +76 -0
  9. package/dist/dashboard/index.js +158 -0
  10. package/dist/dashboard/index.js.map +1 -0
  11. package/dist/dashboard/index.mjs +129 -0
  12. package/dist/dashboard/index.mjs.map +1 -0
  13. package/dist/feature-flags/index.d.cts +75 -0
  14. package/dist/feature-flags/index.d.ts +75 -0
  15. package/dist/feature-flags/index.js +111 -0
  16. package/dist/feature-flags/index.js.map +1 -0
  17. package/dist/feature-flags/index.mjs +83 -0
  18. package/dist/feature-flags/index.mjs.map +1 -0
  19. package/dist/index.d.cts +15 -0
  20. package/dist/index.d.ts +15 -0
  21. package/dist/index.js +31 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/index.mjs +6 -0
  24. package/dist/index.mjs.map +1 -0
  25. package/dist/merchants/index.d.cts +100 -0
  26. package/dist/merchants/index.d.ts +100 -0
  27. package/dist/merchants/index.js +120 -0
  28. package/dist/merchants/index.js.map +1 -0
  29. package/dist/merchants/index.mjs +90 -0
  30. package/dist/merchants/index.mjs.map +1 -0
  31. package/dist/metrics/index.d.cts +83 -0
  32. package/dist/metrics/index.d.ts +83 -0
  33. package/dist/metrics/index.js +112 -0
  34. package/dist/metrics/index.js.map +1 -0
  35. package/dist/metrics/index.mjs +83 -0
  36. package/dist/metrics/index.mjs.map +1 -0
  37. package/dist/tickets/index.d.cts +96 -0
  38. package/dist/tickets/index.d.ts +96 -0
  39. package/dist/tickets/index.js +102 -0
  40. package/dist/tickets/index.js.map +1 -0
  41. package/dist/tickets/index.mjs +73 -0
  42. package/dist/tickets/index.mjs.map +1 -0
  43. package/dist/webhook-logs/index.d.cts +88 -0
  44. package/dist/webhook-logs/index.d.ts +88 -0
  45. package/dist/webhook-logs/index.js +111 -0
  46. package/dist/webhook-logs/index.js.map +1 -0
  47. package/dist/webhook-logs/index.mjs +82 -0
  48. package/dist/webhook-logs/index.mjs.map +1 -0
  49. package/package.json +70 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/tickets/index.ts","../../src/tickets/ticket-service.ts","../../src/tickets/ticket-comment-service.ts","../../src/tickets/ticket-stats-service.ts"],"sourcesContent":["export type {\n TicketPriority,\n TicketStatus,\n Ticket,\n TicketComment,\n TicketCreateInput,\n TicketUpdateInput,\n TicketFilter,\n TicketListResult,\n TicketStats,\n} from './types.js';\n\nexport type { TicketDataSource } from './ticket-data-source.js';\n\nexport { TicketService } from './ticket-service.js';\nexport { TicketCommentService } from './ticket-comment-service.js';\nexport { TicketStatsService } from './ticket-stats-service.js';\n","import type { TicketDataSource } from './ticket-data-source.js';\nimport type {\n Ticket,\n TicketCreateInput,\n TicketFilter,\n TicketListResult,\n TicketUpdateInput,\n} from './types.js';\n\nexport class TicketService {\n private readonly dataSource: TicketDataSource;\n\n constructor(dataSource: TicketDataSource) {\n this.dataSource = dataSource;\n }\n\n async createTicket(input: TicketCreateInput): Promise<Ticket> {\n if (!input.subject.trim()) {\n throw new Error('Ticket subject cannot be empty');\n }\n return this.dataSource.create(input);\n }\n\n async getTicket(ticketId: string): Promise<Ticket | null> {\n return this.dataSource.getById(ticketId);\n }\n\n async listTickets(\n filter?: TicketFilter,\n page = 1,\n pageSize = 20,\n ): Promise<TicketListResult> {\n return this.dataSource.list(filter, page, pageSize);\n }\n\n async updateTicket(\n ticketId: string,\n input: TicketUpdateInput,\n ): Promise<Ticket | null> {\n return this.dataSource.update(ticketId, input);\n }\n\n async resolveTicket(ticketId: string): Promise<Ticket | null> {\n return this.dataSource.update(ticketId, {\n status: 'resolved',\n });\n }\n\n async closeTicket(ticketId: string): Promise<Ticket | null> {\n return this.dataSource.update(ticketId, {\n status: 'closed',\n });\n }\n\n async assignTicket(\n ticketId: string,\n assignee: string,\n ): Promise<Ticket | null> {\n return this.dataSource.update(ticketId, { assignee });\n }\n}\n","import type { TicketDataSource } from './ticket-data-source.js';\nimport type { TicketComment } from './types.js';\n\nexport class TicketCommentService {\n private readonly dataSource: TicketDataSource;\n\n constructor(dataSource: TicketDataSource) {\n this.dataSource = dataSource;\n }\n\n async addComment(\n ticketId: string,\n author: string,\n authorRole: TicketComment['authorRole'],\n content: string,\n ): Promise<TicketComment> {\n if (!content.trim()) {\n throw new Error('Comment content cannot be empty');\n }\n return this.dataSource.addComment(ticketId, { author, authorRole, content });\n }\n\n async getComments(ticketId: string): Promise<TicketComment[]> {\n return this.dataSource.getComments(ticketId);\n }\n}\n","import type { TicketDataSource } from './ticket-data-source.js';\nimport type { TicketStats } from './types.js';\n\nexport class TicketStatsService {\n private readonly dataSource: TicketDataSource;\n\n constructor(dataSource: TicketDataSource) {\n this.dataSource = dataSource;\n }\n\n async getStats(): Promise<TicketStats> {\n return this.dataSource.getStats();\n }\n\n async getOpenTicketCount(): Promise<number> {\n const stats = await this.dataSource.getStats();\n return stats.openCount;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACSO,IAAM,gBAAN,MAAoB;AAAA,EACR;AAAA,EAEjB,YAAY,YAA8B;AACxC,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,MAAM,aAAa,OAA2C;AAC5D,QAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACzB,YAAM,IAAI,MAAM,gCAAgC;AAAA,IAClD;AACA,WAAO,KAAK,WAAW,OAAO,KAAK;AAAA,EACrC;AAAA,EAEA,MAAM,UAAU,UAA0C;AACxD,WAAO,KAAK,WAAW,QAAQ,QAAQ;AAAA,EACzC;AAAA,EAEA,MAAM,YACJ,QACA,OAAO,GACP,WAAW,IACgB;AAC3B,WAAO,KAAK,WAAW,KAAK,QAAQ,MAAM,QAAQ;AAAA,EACpD;AAAA,EAEA,MAAM,aACJ,UACA,OACwB;AACxB,WAAO,KAAK,WAAW,OAAO,UAAU,KAAK;AAAA,EAC/C;AAAA,EAEA,MAAM,cAAc,UAA0C;AAC5D,WAAO,KAAK,WAAW,OAAO,UAAU;AAAA,MACtC,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,YAAY,UAA0C;AAC1D,WAAO,KAAK,WAAW,OAAO,UAAU;AAAA,MACtC,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,aACJ,UACA,UACwB;AACxB,WAAO,KAAK,WAAW,OAAO,UAAU,EAAE,SAAS,CAAC;AAAA,EACtD;AACF;;;ACzDO,IAAM,uBAAN,MAA2B;AAAA,EACf;AAAA,EAEjB,YAAY,YAA8B;AACxC,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,MAAM,WACJ,UACA,QACA,YACA,SACwB;AACxB,QAAI,CAAC,QAAQ,KAAK,GAAG;AACnB,YAAM,IAAI,MAAM,iCAAiC;AAAA,IACnD;AACA,WAAO,KAAK,WAAW,WAAW,UAAU,EAAE,QAAQ,YAAY,QAAQ,CAAC;AAAA,EAC7E;AAAA,EAEA,MAAM,YAAY,UAA4C;AAC5D,WAAO,KAAK,WAAW,YAAY,QAAQ;AAAA,EAC7C;AACF;;;ACtBO,IAAM,qBAAN,MAAyB;AAAA,EACb;AAAA,EAEjB,YAAY,YAA8B;AACxC,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,MAAM,WAAiC;AACrC,WAAO,KAAK,WAAW,SAAS;AAAA,EAClC;AAAA,EAEA,MAAM,qBAAsC;AAC1C,UAAM,QAAQ,MAAM,KAAK,WAAW,SAAS;AAC7C,WAAO,MAAM;AAAA,EACf;AACF;","names":[]}
@@ -0,0 +1,73 @@
1
+ // src/tickets/ticket-service.ts
2
+ var TicketService = class {
3
+ dataSource;
4
+ constructor(dataSource) {
5
+ this.dataSource = dataSource;
6
+ }
7
+ async createTicket(input) {
8
+ if (!input.subject.trim()) {
9
+ throw new Error("Ticket subject cannot be empty");
10
+ }
11
+ return this.dataSource.create(input);
12
+ }
13
+ async getTicket(ticketId) {
14
+ return this.dataSource.getById(ticketId);
15
+ }
16
+ async listTickets(filter, page = 1, pageSize = 20) {
17
+ return this.dataSource.list(filter, page, pageSize);
18
+ }
19
+ async updateTicket(ticketId, input) {
20
+ return this.dataSource.update(ticketId, input);
21
+ }
22
+ async resolveTicket(ticketId) {
23
+ return this.dataSource.update(ticketId, {
24
+ status: "resolved"
25
+ });
26
+ }
27
+ async closeTicket(ticketId) {
28
+ return this.dataSource.update(ticketId, {
29
+ status: "closed"
30
+ });
31
+ }
32
+ async assignTicket(ticketId, assignee) {
33
+ return this.dataSource.update(ticketId, { assignee });
34
+ }
35
+ };
36
+
37
+ // src/tickets/ticket-comment-service.ts
38
+ var TicketCommentService = class {
39
+ dataSource;
40
+ constructor(dataSource) {
41
+ this.dataSource = dataSource;
42
+ }
43
+ async addComment(ticketId, author, authorRole, content) {
44
+ if (!content.trim()) {
45
+ throw new Error("Comment content cannot be empty");
46
+ }
47
+ return this.dataSource.addComment(ticketId, { author, authorRole, content });
48
+ }
49
+ async getComments(ticketId) {
50
+ return this.dataSource.getComments(ticketId);
51
+ }
52
+ };
53
+
54
+ // src/tickets/ticket-stats-service.ts
55
+ var TicketStatsService = class {
56
+ dataSource;
57
+ constructor(dataSource) {
58
+ this.dataSource = dataSource;
59
+ }
60
+ async getStats() {
61
+ return this.dataSource.getStats();
62
+ }
63
+ async getOpenTicketCount() {
64
+ const stats = await this.dataSource.getStats();
65
+ return stats.openCount;
66
+ }
67
+ };
68
+ export {
69
+ TicketCommentService,
70
+ TicketService,
71
+ TicketStatsService
72
+ };
73
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/tickets/ticket-service.ts","../../src/tickets/ticket-comment-service.ts","../../src/tickets/ticket-stats-service.ts"],"sourcesContent":["import type { TicketDataSource } from './ticket-data-source.js';\nimport type {\n Ticket,\n TicketCreateInput,\n TicketFilter,\n TicketListResult,\n TicketUpdateInput,\n} from './types.js';\n\nexport class TicketService {\n private readonly dataSource: TicketDataSource;\n\n constructor(dataSource: TicketDataSource) {\n this.dataSource = dataSource;\n }\n\n async createTicket(input: TicketCreateInput): Promise<Ticket> {\n if (!input.subject.trim()) {\n throw new Error('Ticket subject cannot be empty');\n }\n return this.dataSource.create(input);\n }\n\n async getTicket(ticketId: string): Promise<Ticket | null> {\n return this.dataSource.getById(ticketId);\n }\n\n async listTickets(\n filter?: TicketFilter,\n page = 1,\n pageSize = 20,\n ): Promise<TicketListResult> {\n return this.dataSource.list(filter, page, pageSize);\n }\n\n async updateTicket(\n ticketId: string,\n input: TicketUpdateInput,\n ): Promise<Ticket | null> {\n return this.dataSource.update(ticketId, input);\n }\n\n async resolveTicket(ticketId: string): Promise<Ticket | null> {\n return this.dataSource.update(ticketId, {\n status: 'resolved',\n });\n }\n\n async closeTicket(ticketId: string): Promise<Ticket | null> {\n return this.dataSource.update(ticketId, {\n status: 'closed',\n });\n }\n\n async assignTicket(\n ticketId: string,\n assignee: string,\n ): Promise<Ticket | null> {\n return this.dataSource.update(ticketId, { assignee });\n }\n}\n","import type { TicketDataSource } from './ticket-data-source.js';\nimport type { TicketComment } from './types.js';\n\nexport class TicketCommentService {\n private readonly dataSource: TicketDataSource;\n\n constructor(dataSource: TicketDataSource) {\n this.dataSource = dataSource;\n }\n\n async addComment(\n ticketId: string,\n author: string,\n authorRole: TicketComment['authorRole'],\n content: string,\n ): Promise<TicketComment> {\n if (!content.trim()) {\n throw new Error('Comment content cannot be empty');\n }\n return this.dataSource.addComment(ticketId, { author, authorRole, content });\n }\n\n async getComments(ticketId: string): Promise<TicketComment[]> {\n return this.dataSource.getComments(ticketId);\n }\n}\n","import type { TicketDataSource } from './ticket-data-source.js';\nimport type { TicketStats } from './types.js';\n\nexport class TicketStatsService {\n private readonly dataSource: TicketDataSource;\n\n constructor(dataSource: TicketDataSource) {\n this.dataSource = dataSource;\n }\n\n async getStats(): Promise<TicketStats> {\n return this.dataSource.getStats();\n }\n\n async getOpenTicketCount(): Promise<number> {\n const stats = await this.dataSource.getStats();\n return stats.openCount;\n }\n}\n"],"mappings":";AASO,IAAM,gBAAN,MAAoB;AAAA,EACR;AAAA,EAEjB,YAAY,YAA8B;AACxC,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,MAAM,aAAa,OAA2C;AAC5D,QAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACzB,YAAM,IAAI,MAAM,gCAAgC;AAAA,IAClD;AACA,WAAO,KAAK,WAAW,OAAO,KAAK;AAAA,EACrC;AAAA,EAEA,MAAM,UAAU,UAA0C;AACxD,WAAO,KAAK,WAAW,QAAQ,QAAQ;AAAA,EACzC;AAAA,EAEA,MAAM,YACJ,QACA,OAAO,GACP,WAAW,IACgB;AAC3B,WAAO,KAAK,WAAW,KAAK,QAAQ,MAAM,QAAQ;AAAA,EACpD;AAAA,EAEA,MAAM,aACJ,UACA,OACwB;AACxB,WAAO,KAAK,WAAW,OAAO,UAAU,KAAK;AAAA,EAC/C;AAAA,EAEA,MAAM,cAAc,UAA0C;AAC5D,WAAO,KAAK,WAAW,OAAO,UAAU;AAAA,MACtC,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,YAAY,UAA0C;AAC1D,WAAO,KAAK,WAAW,OAAO,UAAU;AAAA,MACtC,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,aACJ,UACA,UACwB;AACxB,WAAO,KAAK,WAAW,OAAO,UAAU,EAAE,SAAS,CAAC;AAAA,EACtD;AACF;;;ACzDO,IAAM,uBAAN,MAA2B;AAAA,EACf;AAAA,EAEjB,YAAY,YAA8B;AACxC,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,MAAM,WACJ,UACA,QACA,YACA,SACwB;AACxB,QAAI,CAAC,QAAQ,KAAK,GAAG;AACnB,YAAM,IAAI,MAAM,iCAAiC;AAAA,IACnD;AACA,WAAO,KAAK,WAAW,WAAW,UAAU,EAAE,QAAQ,YAAY,QAAQ,CAAC;AAAA,EAC7E;AAAA,EAEA,MAAM,YAAY,UAA4C;AAC5D,WAAO,KAAK,WAAW,YAAY,QAAQ;AAAA,EAC7C;AACF;;;ACtBO,IAAM,qBAAN,MAAyB;AAAA,EACb;AAAA,EAEjB,YAAY,YAA8B;AACxC,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,MAAM,WAAiC;AACrC,WAAO,KAAK,WAAW,SAAS;AAAA,EAClC;AAAA,EAEA,MAAM,qBAAsC;AAC1C,UAAM,QAAQ,MAAM,KAAK,WAAW,SAAS;AAC7C,WAAO,MAAM;AAAA,EACf;AACF;","names":[]}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Webhook logs module types.
3
+ */
4
+ interface WebhookLogEntry {
5
+ id: string;
6
+ topic: string;
7
+ shopDomain: string;
8
+ payload: Record<string, unknown>;
9
+ deliveredAt: Date;
10
+ statusCode: number;
11
+ responseBody?: string;
12
+ responseTimeMs: number;
13
+ success: boolean;
14
+ retryCount: number;
15
+ headers?: Record<string, string>;
16
+ }
17
+ interface WebhookLogFilter {
18
+ topic?: string;
19
+ shopDomain?: string;
20
+ success?: boolean;
21
+ startDate?: Date;
22
+ endDate?: Date;
23
+ minStatusCode?: number;
24
+ maxStatusCode?: number;
25
+ }
26
+ interface WebhookLogSearchResult {
27
+ logs: WebhookLogEntry[];
28
+ total: number;
29
+ page: number;
30
+ pageSize: number;
31
+ }
32
+ interface WebhookReplayResult {
33
+ originalLogId: string;
34
+ replayedAt: Date;
35
+ success: boolean;
36
+ statusCode: number;
37
+ responseTimeMs: number;
38
+ error?: string;
39
+ }
40
+ interface WebhookLogStats {
41
+ totalDeliveries: number;
42
+ successCount: number;
43
+ failureCount: number;
44
+ avgResponseTimeMs: number;
45
+ topicBreakdown: Array<{
46
+ topic: string;
47
+ count: number;
48
+ successRate: number;
49
+ }>;
50
+ }
51
+
52
+ interface WebhookLogDataSource {
53
+ storeLog(entry: Omit<WebhookLogEntry, 'id'>): Promise<WebhookLogEntry>;
54
+ getLog(logId: string): Promise<WebhookLogEntry | null>;
55
+ searchLogs(filter: WebhookLogFilter, page?: number, pageSize?: number): Promise<WebhookLogSearchResult>;
56
+ getStats(startDate: Date, endDate: Date): Promise<WebhookLogStats>;
57
+ deleteOldLogs(olderThan: Date): Promise<number>;
58
+ }
59
+
60
+ declare class WebhookLogService {
61
+ private readonly dataSource;
62
+ constructor(dataSource: WebhookLogDataSource);
63
+ logDelivery(entry: Omit<WebhookLogEntry, 'id'>): Promise<WebhookLogEntry>;
64
+ getDeliveryLog(logId: string): Promise<WebhookLogEntry | null>;
65
+ searchDeliveries(filter?: WebhookLogFilter, page?: number, pageSize?: number): Promise<WebhookLogSearchResult>;
66
+ getDeliveryStats(days?: number): Promise<WebhookLogStats>;
67
+ }
68
+
69
+ type WebhookDeliveryFn = (url: string, topic: string, payload: Record<string, unknown>, headers?: Record<string, string>) => Promise<{
70
+ statusCode: number;
71
+ responseTimeMs: number;
72
+ error?: string;
73
+ }>;
74
+ declare class WebhookReplayService {
75
+ private readonly dataSource;
76
+ private readonly deliveryFn;
77
+ constructor(dataSource: WebhookLogDataSource, deliveryFn: WebhookDeliveryFn);
78
+ replayDelivery(logId: string, targetUrl: string): Promise<WebhookReplayResult | null>;
79
+ replayBatch(logIds: string[], targetUrl: string): Promise<WebhookReplayResult[]>;
80
+ }
81
+
82
+ declare class LogCleanupService {
83
+ private readonly dataSource;
84
+ constructor(dataSource: WebhookLogDataSource);
85
+ cleanupOldLogs(retentionDays?: number): Promise<number>;
86
+ }
87
+
88
+ export { LogCleanupService, type WebhookDeliveryFn, type WebhookLogDataSource, type WebhookLogEntry, type WebhookLogFilter, type WebhookLogSearchResult, WebhookLogService, type WebhookLogStats, type WebhookReplayResult, WebhookReplayService };
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Webhook logs module types.
3
+ */
4
+ interface WebhookLogEntry {
5
+ id: string;
6
+ topic: string;
7
+ shopDomain: string;
8
+ payload: Record<string, unknown>;
9
+ deliveredAt: Date;
10
+ statusCode: number;
11
+ responseBody?: string;
12
+ responseTimeMs: number;
13
+ success: boolean;
14
+ retryCount: number;
15
+ headers?: Record<string, string>;
16
+ }
17
+ interface WebhookLogFilter {
18
+ topic?: string;
19
+ shopDomain?: string;
20
+ success?: boolean;
21
+ startDate?: Date;
22
+ endDate?: Date;
23
+ minStatusCode?: number;
24
+ maxStatusCode?: number;
25
+ }
26
+ interface WebhookLogSearchResult {
27
+ logs: WebhookLogEntry[];
28
+ total: number;
29
+ page: number;
30
+ pageSize: number;
31
+ }
32
+ interface WebhookReplayResult {
33
+ originalLogId: string;
34
+ replayedAt: Date;
35
+ success: boolean;
36
+ statusCode: number;
37
+ responseTimeMs: number;
38
+ error?: string;
39
+ }
40
+ interface WebhookLogStats {
41
+ totalDeliveries: number;
42
+ successCount: number;
43
+ failureCount: number;
44
+ avgResponseTimeMs: number;
45
+ topicBreakdown: Array<{
46
+ topic: string;
47
+ count: number;
48
+ successRate: number;
49
+ }>;
50
+ }
51
+
52
+ interface WebhookLogDataSource {
53
+ storeLog(entry: Omit<WebhookLogEntry, 'id'>): Promise<WebhookLogEntry>;
54
+ getLog(logId: string): Promise<WebhookLogEntry | null>;
55
+ searchLogs(filter: WebhookLogFilter, page?: number, pageSize?: number): Promise<WebhookLogSearchResult>;
56
+ getStats(startDate: Date, endDate: Date): Promise<WebhookLogStats>;
57
+ deleteOldLogs(olderThan: Date): Promise<number>;
58
+ }
59
+
60
+ declare class WebhookLogService {
61
+ private readonly dataSource;
62
+ constructor(dataSource: WebhookLogDataSource);
63
+ logDelivery(entry: Omit<WebhookLogEntry, 'id'>): Promise<WebhookLogEntry>;
64
+ getDeliveryLog(logId: string): Promise<WebhookLogEntry | null>;
65
+ searchDeliveries(filter?: WebhookLogFilter, page?: number, pageSize?: number): Promise<WebhookLogSearchResult>;
66
+ getDeliveryStats(days?: number): Promise<WebhookLogStats>;
67
+ }
68
+
69
+ type WebhookDeliveryFn = (url: string, topic: string, payload: Record<string, unknown>, headers?: Record<string, string>) => Promise<{
70
+ statusCode: number;
71
+ responseTimeMs: number;
72
+ error?: string;
73
+ }>;
74
+ declare class WebhookReplayService {
75
+ private readonly dataSource;
76
+ private readonly deliveryFn;
77
+ constructor(dataSource: WebhookLogDataSource, deliveryFn: WebhookDeliveryFn);
78
+ replayDelivery(logId: string, targetUrl: string): Promise<WebhookReplayResult | null>;
79
+ replayBatch(logIds: string[], targetUrl: string): Promise<WebhookReplayResult[]>;
80
+ }
81
+
82
+ declare class LogCleanupService {
83
+ private readonly dataSource;
84
+ constructor(dataSource: WebhookLogDataSource);
85
+ cleanupOldLogs(retentionDays?: number): Promise<number>;
86
+ }
87
+
88
+ export { LogCleanupService, type WebhookDeliveryFn, type WebhookLogDataSource, type WebhookLogEntry, type WebhookLogFilter, type WebhookLogSearchResult, WebhookLogService, type WebhookLogStats, type WebhookReplayResult, WebhookReplayService };
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/webhook-logs/index.ts
21
+ var webhook_logs_exports = {};
22
+ __export(webhook_logs_exports, {
23
+ LogCleanupService: () => LogCleanupService,
24
+ WebhookLogService: () => WebhookLogService,
25
+ WebhookReplayService: () => WebhookReplayService
26
+ });
27
+ module.exports = __toCommonJS(webhook_logs_exports);
28
+
29
+ // src/webhook-logs/webhook-log-service.ts
30
+ var WebhookLogService = class {
31
+ constructor(dataSource) {
32
+ this.dataSource = dataSource;
33
+ }
34
+ async logDelivery(entry) {
35
+ return this.dataSource.storeLog(entry);
36
+ }
37
+ async getDeliveryLog(logId) {
38
+ return this.dataSource.getLog(logId);
39
+ }
40
+ async searchDeliveries(filter, page, pageSize) {
41
+ return this.dataSource.searchLogs(filter ?? {}, page ?? 1, pageSize ?? 20);
42
+ }
43
+ async getDeliveryStats(days) {
44
+ const effectiveDays = days ?? 7;
45
+ const endDate = /* @__PURE__ */ new Date();
46
+ const startDate = /* @__PURE__ */ new Date();
47
+ startDate.setDate(startDate.getDate() - effectiveDays);
48
+ return this.dataSource.getStats(startDate, endDate);
49
+ }
50
+ };
51
+
52
+ // src/webhook-logs/webhook-replay-service.ts
53
+ var WebhookReplayService = class {
54
+ constructor(dataSource, deliveryFn) {
55
+ this.dataSource = dataSource;
56
+ this.deliveryFn = deliveryFn;
57
+ }
58
+ async replayDelivery(logId, targetUrl) {
59
+ const log = await this.dataSource.getLog(logId);
60
+ if (!log) {
61
+ return null;
62
+ }
63
+ const result = await this.deliveryFn(
64
+ targetUrl,
65
+ log.topic,
66
+ log.payload,
67
+ log.headers
68
+ );
69
+ const replayResult = {
70
+ originalLogId: logId,
71
+ replayedAt: /* @__PURE__ */ new Date(),
72
+ success: result.statusCode >= 200 && result.statusCode < 300,
73
+ statusCode: result.statusCode,
74
+ responseTimeMs: result.responseTimeMs
75
+ };
76
+ if (result.error !== void 0) {
77
+ replayResult.error = result.error;
78
+ }
79
+ return replayResult;
80
+ }
81
+ async replayBatch(logIds, targetUrl) {
82
+ const results = [];
83
+ for (const logId of logIds) {
84
+ const result = await this.replayDelivery(logId, targetUrl);
85
+ if (result) {
86
+ results.push(result);
87
+ }
88
+ }
89
+ return results;
90
+ }
91
+ };
92
+
93
+ // src/webhook-logs/log-cleanup-service.ts
94
+ var LogCleanupService = class {
95
+ constructor(dataSource) {
96
+ this.dataSource = dataSource;
97
+ }
98
+ async cleanupOldLogs(retentionDays) {
99
+ const effectiveDays = retentionDays ?? 30;
100
+ const cutoff = /* @__PURE__ */ new Date();
101
+ cutoff.setDate(cutoff.getDate() - effectiveDays);
102
+ return this.dataSource.deleteOldLogs(cutoff);
103
+ }
104
+ };
105
+ // Annotate the CommonJS export names for ESM import in node:
106
+ 0 && (module.exports = {
107
+ LogCleanupService,
108
+ WebhookLogService,
109
+ WebhookReplayService
110
+ });
111
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/webhook-logs/index.ts","../../src/webhook-logs/webhook-log-service.ts","../../src/webhook-logs/webhook-replay-service.ts","../../src/webhook-logs/log-cleanup-service.ts"],"sourcesContent":["export type {\n WebhookLogEntry,\n WebhookLogFilter,\n WebhookLogSearchResult,\n WebhookReplayResult,\n WebhookLogStats,\n} from './types.js';\n\nexport type { WebhookLogDataSource } from './webhook-log-data-source.js';\n\nexport { WebhookLogService } from './webhook-log-service.js';\n\nexport type { WebhookDeliveryFn } from './webhook-replay-service.js';\nexport { WebhookReplayService } from './webhook-replay-service.js';\n\nexport { LogCleanupService } from './log-cleanup-service.js';\n","import type { WebhookLogDataSource } from './webhook-log-data-source.js';\nimport type {\n WebhookLogEntry,\n WebhookLogFilter,\n WebhookLogSearchResult,\n WebhookLogStats,\n} from './types.js';\n\nexport class WebhookLogService {\n constructor(private readonly dataSource: WebhookLogDataSource) {}\n\n async logDelivery(\n entry: Omit<WebhookLogEntry, 'id'>,\n ): Promise<WebhookLogEntry> {\n return this.dataSource.storeLog(entry);\n }\n\n async getDeliveryLog(logId: string): Promise<WebhookLogEntry | null> {\n return this.dataSource.getLog(logId);\n }\n\n async searchDeliveries(\n filter?: WebhookLogFilter,\n page?: number,\n pageSize?: number,\n ): Promise<WebhookLogSearchResult> {\n return this.dataSource.searchLogs(filter ?? {}, page ?? 1, pageSize ?? 20);\n }\n\n async getDeliveryStats(days?: number): Promise<WebhookLogStats> {\n const effectiveDays = days ?? 7;\n const endDate = new Date();\n const startDate = new Date();\n startDate.setDate(startDate.getDate() - effectiveDays);\n return this.dataSource.getStats(startDate, endDate);\n }\n}\n","import type { WebhookLogDataSource } from './webhook-log-data-source.js';\nimport type { WebhookReplayResult } from './types.js';\n\nexport type WebhookDeliveryFn = (\n url: string,\n topic: string,\n payload: Record<string, unknown>,\n headers?: Record<string, string>,\n) => Promise<{ statusCode: number; responseTimeMs: number; error?: string }>;\n\nexport class WebhookReplayService {\n constructor(\n private readonly dataSource: WebhookLogDataSource,\n private readonly deliveryFn: WebhookDeliveryFn,\n ) {}\n\n async replayDelivery(\n logId: string,\n targetUrl: string,\n ): Promise<WebhookReplayResult | null> {\n const log = await this.dataSource.getLog(logId);\n if (!log) {\n return null;\n }\n\n const result = await this.deliveryFn(\n targetUrl,\n log.topic,\n log.payload,\n log.headers,\n );\n\n const replayResult: WebhookReplayResult = {\n originalLogId: logId,\n replayedAt: new Date(),\n success: result.statusCode >= 200 && result.statusCode < 300,\n statusCode: result.statusCode,\n responseTimeMs: result.responseTimeMs,\n };\n\n if (result.error !== undefined) {\n replayResult.error = result.error;\n }\n\n return replayResult;\n }\n\n async replayBatch(\n logIds: string[],\n targetUrl: string,\n ): Promise<WebhookReplayResult[]> {\n const results: WebhookReplayResult[] = [];\n for (const logId of logIds) {\n const result = await this.replayDelivery(logId, targetUrl);\n if (result) {\n results.push(result);\n }\n }\n return results;\n }\n}\n","import type { WebhookLogDataSource } from './webhook-log-data-source.js';\n\nexport class LogCleanupService {\n constructor(private readonly dataSource: WebhookLogDataSource) {}\n\n async cleanupOldLogs(retentionDays?: number): Promise<number> {\n const effectiveDays = retentionDays ?? 30;\n const cutoff = new Date();\n cutoff.setDate(cutoff.getDate() - effectiveDays);\n return this.dataSource.deleteOldLogs(cutoff);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACQO,IAAM,oBAAN,MAAwB;AAAA,EAC7B,YAA6B,YAAkC;AAAlC;AAAA,EAAmC;AAAA,EAEhE,MAAM,YACJ,OAC0B;AAC1B,WAAO,KAAK,WAAW,SAAS,KAAK;AAAA,EACvC;AAAA,EAEA,MAAM,eAAe,OAAgD;AACnE,WAAO,KAAK,WAAW,OAAO,KAAK;AAAA,EACrC;AAAA,EAEA,MAAM,iBACJ,QACA,MACA,UACiC;AACjC,WAAO,KAAK,WAAW,WAAW,UAAU,CAAC,GAAG,QAAQ,GAAG,YAAY,EAAE;AAAA,EAC3E;AAAA,EAEA,MAAM,iBAAiB,MAAyC;AAC9D,UAAM,gBAAgB,QAAQ;AAC9B,UAAM,UAAU,oBAAI,KAAK;AACzB,UAAM,YAAY,oBAAI,KAAK;AAC3B,cAAU,QAAQ,UAAU,QAAQ,IAAI,aAAa;AACrD,WAAO,KAAK,WAAW,SAAS,WAAW,OAAO;AAAA,EACpD;AACF;;;AC1BO,IAAM,uBAAN,MAA2B;AAAA,EAChC,YACmB,YACA,YACjB;AAFiB;AACA;AAAA,EAChB;AAAA,EAEH,MAAM,eACJ,OACA,WACqC;AACrC,UAAM,MAAM,MAAM,KAAK,WAAW,OAAO,KAAK;AAC9C,QAAI,CAAC,KAAK;AACR,aAAO;AAAA,IACT;AAEA,UAAM,SAAS,MAAM,KAAK;AAAA,MACxB;AAAA,MACA,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IACN;AAEA,UAAM,eAAoC;AAAA,MACxC,eAAe;AAAA,MACf,YAAY,oBAAI,KAAK;AAAA,MACrB,SAAS,OAAO,cAAc,OAAO,OAAO,aAAa;AAAA,MACzD,YAAY,OAAO;AAAA,MACnB,gBAAgB,OAAO;AAAA,IACzB;AAEA,QAAI,OAAO,UAAU,QAAW;AAC9B,mBAAa,QAAQ,OAAO;AAAA,IAC9B;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,YACJ,QACA,WACgC;AAChC,UAAM,UAAiC,CAAC;AACxC,eAAW,SAAS,QAAQ;AAC1B,YAAM,SAAS,MAAM,KAAK,eAAe,OAAO,SAAS;AACzD,UAAI,QAAQ;AACV,gBAAQ,KAAK,MAAM;AAAA,MACrB;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;;;AC1DO,IAAM,oBAAN,MAAwB;AAAA,EAC7B,YAA6B,YAAkC;AAAlC;AAAA,EAAmC;AAAA,EAEhE,MAAM,eAAe,eAAyC;AAC5D,UAAM,gBAAgB,iBAAiB;AACvC,UAAM,SAAS,oBAAI,KAAK;AACxB,WAAO,QAAQ,OAAO,QAAQ,IAAI,aAAa;AAC/C,WAAO,KAAK,WAAW,cAAc,MAAM;AAAA,EAC7C;AACF;","names":[]}
@@ -0,0 +1,82 @@
1
+ // src/webhook-logs/webhook-log-service.ts
2
+ var WebhookLogService = class {
3
+ constructor(dataSource) {
4
+ this.dataSource = dataSource;
5
+ }
6
+ async logDelivery(entry) {
7
+ return this.dataSource.storeLog(entry);
8
+ }
9
+ async getDeliveryLog(logId) {
10
+ return this.dataSource.getLog(logId);
11
+ }
12
+ async searchDeliveries(filter, page, pageSize) {
13
+ return this.dataSource.searchLogs(filter ?? {}, page ?? 1, pageSize ?? 20);
14
+ }
15
+ async getDeliveryStats(days) {
16
+ const effectiveDays = days ?? 7;
17
+ const endDate = /* @__PURE__ */ new Date();
18
+ const startDate = /* @__PURE__ */ new Date();
19
+ startDate.setDate(startDate.getDate() - effectiveDays);
20
+ return this.dataSource.getStats(startDate, endDate);
21
+ }
22
+ };
23
+
24
+ // src/webhook-logs/webhook-replay-service.ts
25
+ var WebhookReplayService = class {
26
+ constructor(dataSource, deliveryFn) {
27
+ this.dataSource = dataSource;
28
+ this.deliveryFn = deliveryFn;
29
+ }
30
+ async replayDelivery(logId, targetUrl) {
31
+ const log = await this.dataSource.getLog(logId);
32
+ if (!log) {
33
+ return null;
34
+ }
35
+ const result = await this.deliveryFn(
36
+ targetUrl,
37
+ log.topic,
38
+ log.payload,
39
+ log.headers
40
+ );
41
+ const replayResult = {
42
+ originalLogId: logId,
43
+ replayedAt: /* @__PURE__ */ new Date(),
44
+ success: result.statusCode >= 200 && result.statusCode < 300,
45
+ statusCode: result.statusCode,
46
+ responseTimeMs: result.responseTimeMs
47
+ };
48
+ if (result.error !== void 0) {
49
+ replayResult.error = result.error;
50
+ }
51
+ return replayResult;
52
+ }
53
+ async replayBatch(logIds, targetUrl) {
54
+ const results = [];
55
+ for (const logId of logIds) {
56
+ const result = await this.replayDelivery(logId, targetUrl);
57
+ if (result) {
58
+ results.push(result);
59
+ }
60
+ }
61
+ return results;
62
+ }
63
+ };
64
+
65
+ // src/webhook-logs/log-cleanup-service.ts
66
+ var LogCleanupService = class {
67
+ constructor(dataSource) {
68
+ this.dataSource = dataSource;
69
+ }
70
+ async cleanupOldLogs(retentionDays) {
71
+ const effectiveDays = retentionDays ?? 30;
72
+ const cutoff = /* @__PURE__ */ new Date();
73
+ cutoff.setDate(cutoff.getDate() - effectiveDays);
74
+ return this.dataSource.deleteOldLogs(cutoff);
75
+ }
76
+ };
77
+ export {
78
+ LogCleanupService,
79
+ WebhookLogService,
80
+ WebhookReplayService
81
+ };
82
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/webhook-logs/webhook-log-service.ts","../../src/webhook-logs/webhook-replay-service.ts","../../src/webhook-logs/log-cleanup-service.ts"],"sourcesContent":["import type { WebhookLogDataSource } from './webhook-log-data-source.js';\nimport type {\n WebhookLogEntry,\n WebhookLogFilter,\n WebhookLogSearchResult,\n WebhookLogStats,\n} from './types.js';\n\nexport class WebhookLogService {\n constructor(private readonly dataSource: WebhookLogDataSource) {}\n\n async logDelivery(\n entry: Omit<WebhookLogEntry, 'id'>,\n ): Promise<WebhookLogEntry> {\n return this.dataSource.storeLog(entry);\n }\n\n async getDeliveryLog(logId: string): Promise<WebhookLogEntry | null> {\n return this.dataSource.getLog(logId);\n }\n\n async searchDeliveries(\n filter?: WebhookLogFilter,\n page?: number,\n pageSize?: number,\n ): Promise<WebhookLogSearchResult> {\n return this.dataSource.searchLogs(filter ?? {}, page ?? 1, pageSize ?? 20);\n }\n\n async getDeliveryStats(days?: number): Promise<WebhookLogStats> {\n const effectiveDays = days ?? 7;\n const endDate = new Date();\n const startDate = new Date();\n startDate.setDate(startDate.getDate() - effectiveDays);\n return this.dataSource.getStats(startDate, endDate);\n }\n}\n","import type { WebhookLogDataSource } from './webhook-log-data-source.js';\nimport type { WebhookReplayResult } from './types.js';\n\nexport type WebhookDeliveryFn = (\n url: string,\n topic: string,\n payload: Record<string, unknown>,\n headers?: Record<string, string>,\n) => Promise<{ statusCode: number; responseTimeMs: number; error?: string }>;\n\nexport class WebhookReplayService {\n constructor(\n private readonly dataSource: WebhookLogDataSource,\n private readonly deliveryFn: WebhookDeliveryFn,\n ) {}\n\n async replayDelivery(\n logId: string,\n targetUrl: string,\n ): Promise<WebhookReplayResult | null> {\n const log = await this.dataSource.getLog(logId);\n if (!log) {\n return null;\n }\n\n const result = await this.deliveryFn(\n targetUrl,\n log.topic,\n log.payload,\n log.headers,\n );\n\n const replayResult: WebhookReplayResult = {\n originalLogId: logId,\n replayedAt: new Date(),\n success: result.statusCode >= 200 && result.statusCode < 300,\n statusCode: result.statusCode,\n responseTimeMs: result.responseTimeMs,\n };\n\n if (result.error !== undefined) {\n replayResult.error = result.error;\n }\n\n return replayResult;\n }\n\n async replayBatch(\n logIds: string[],\n targetUrl: string,\n ): Promise<WebhookReplayResult[]> {\n const results: WebhookReplayResult[] = [];\n for (const logId of logIds) {\n const result = await this.replayDelivery(logId, targetUrl);\n if (result) {\n results.push(result);\n }\n }\n return results;\n }\n}\n","import type { WebhookLogDataSource } from './webhook-log-data-source.js';\n\nexport class LogCleanupService {\n constructor(private readonly dataSource: WebhookLogDataSource) {}\n\n async cleanupOldLogs(retentionDays?: number): Promise<number> {\n const effectiveDays = retentionDays ?? 30;\n const cutoff = new Date();\n cutoff.setDate(cutoff.getDate() - effectiveDays);\n return this.dataSource.deleteOldLogs(cutoff);\n }\n}\n"],"mappings":";AAQO,IAAM,oBAAN,MAAwB;AAAA,EAC7B,YAA6B,YAAkC;AAAlC;AAAA,EAAmC;AAAA,EAEhE,MAAM,YACJ,OAC0B;AAC1B,WAAO,KAAK,WAAW,SAAS,KAAK;AAAA,EACvC;AAAA,EAEA,MAAM,eAAe,OAAgD;AACnE,WAAO,KAAK,WAAW,OAAO,KAAK;AAAA,EACrC;AAAA,EAEA,MAAM,iBACJ,QACA,MACA,UACiC;AACjC,WAAO,KAAK,WAAW,WAAW,UAAU,CAAC,GAAG,QAAQ,GAAG,YAAY,EAAE;AAAA,EAC3E;AAAA,EAEA,MAAM,iBAAiB,MAAyC;AAC9D,UAAM,gBAAgB,QAAQ;AAC9B,UAAM,UAAU,oBAAI,KAAK;AACzB,UAAM,YAAY,oBAAI,KAAK;AAC3B,cAAU,QAAQ,UAAU,QAAQ,IAAI,aAAa;AACrD,WAAO,KAAK,WAAW,SAAS,WAAW,OAAO;AAAA,EACpD;AACF;;;AC1BO,IAAM,uBAAN,MAA2B;AAAA,EAChC,YACmB,YACA,YACjB;AAFiB;AACA;AAAA,EAChB;AAAA,EAEH,MAAM,eACJ,OACA,WACqC;AACrC,UAAM,MAAM,MAAM,KAAK,WAAW,OAAO,KAAK;AAC9C,QAAI,CAAC,KAAK;AACR,aAAO;AAAA,IACT;AAEA,UAAM,SAAS,MAAM,KAAK;AAAA,MACxB;AAAA,MACA,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IACN;AAEA,UAAM,eAAoC;AAAA,MACxC,eAAe;AAAA,MACf,YAAY,oBAAI,KAAK;AAAA,MACrB,SAAS,OAAO,cAAc,OAAO,OAAO,aAAa;AAAA,MACzD,YAAY,OAAO;AAAA,MACnB,gBAAgB,OAAO;AAAA,IACzB;AAEA,QAAI,OAAO,UAAU,QAAW;AAC9B,mBAAa,QAAQ,OAAO;AAAA,IAC9B;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,YACJ,QACA,WACgC;AAChC,UAAM,UAAiC,CAAC;AACxC,eAAW,SAAS,QAAQ;AAC1B,YAAM,SAAS,MAAM,KAAK,eAAe,OAAO,SAAS;AACzD,UAAI,QAAQ;AACV,gBAAQ,KAAK,MAAM;AAAA,MACrB;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;;;AC1DO,IAAM,oBAAN,MAAwB;AAAA,EAC7B,YAA6B,YAAkC;AAAlC;AAAA,EAAmC;AAAA,EAEhE,MAAM,eAAe,eAAyC;AAC5D,UAAM,gBAAgB,iBAAiB;AACvC,UAAM,SAAS,oBAAI,KAAK;AACxB,WAAO,QAAQ,OAAO,QAAQ,IAAI,aAAa;AAC/C,WAAO,KAAK,WAAW,cAAc,MAAM;AAAA,EAC7C;AACF;","names":[]}
package/package.json ADDED
@@ -0,0 +1,70 @@
1
+ {
2
+ "name": "@uniforge/portal",
3
+ "version": "0.1.0-alpha.2",
4
+ "description": "Developer portal backend services for UniForge",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.mjs",
12
+ "require": "./dist/index.js"
13
+ },
14
+ "./auth": {
15
+ "types": "./dist/auth/index.d.ts",
16
+ "import": "./dist/auth/index.mjs",
17
+ "require": "./dist/auth/index.js"
18
+ },
19
+ "./dashboard": {
20
+ "types": "./dist/dashboard/index.d.ts",
21
+ "import": "./dist/dashboard/index.mjs",
22
+ "require": "./dist/dashboard/index.js"
23
+ },
24
+ "./merchants": {
25
+ "types": "./dist/merchants/index.d.ts",
26
+ "import": "./dist/merchants/index.mjs",
27
+ "require": "./dist/merchants/index.js"
28
+ },
29
+ "./metrics": {
30
+ "types": "./dist/metrics/index.d.ts",
31
+ "import": "./dist/metrics/index.mjs",
32
+ "require": "./dist/metrics/index.js"
33
+ },
34
+ "./webhook-logs": {
35
+ "types": "./dist/webhook-logs/index.d.ts",
36
+ "import": "./dist/webhook-logs/index.mjs",
37
+ "require": "./dist/webhook-logs/index.js"
38
+ },
39
+ "./feature-flags": {
40
+ "types": "./dist/feature-flags/index.d.ts",
41
+ "import": "./dist/feature-flags/index.mjs",
42
+ "require": "./dist/feature-flags/index.js"
43
+ },
44
+ "./tickets": {
45
+ "types": "./dist/tickets/index.d.ts",
46
+ "import": "./dist/tickets/index.mjs",
47
+ "require": "./dist/tickets/index.js"
48
+ }
49
+ },
50
+ "dependencies": {
51
+ "@uniforge/core": "0.1.0-alpha.2",
52
+ "@uniforge/platform-core": "0.1.0-alpha.2"
53
+ },
54
+ "devDependencies": {
55
+ "tsup": "^8.0.0",
56
+ "typescript": "^5.3.0",
57
+ "vitest": "^1.0.0"
58
+ },
59
+ "publishConfig": {
60
+ "access": "public"
61
+ },
62
+ "files": [
63
+ "dist"
64
+ ],
65
+ "scripts": {
66
+ "build": "tsup",
67
+ "test": "vitest",
68
+ "typecheck": "tsc --noEmit"
69
+ }
70
+ }