@goatlab/node-backend 0.0.15 → 0.1.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 (126) hide show
  1. package/README.md +54 -38
  2. package/dist/container/Container.d.ts +441 -0
  3. package/dist/container/Container.js +895 -0
  4. package/dist/container/Container.js.map +1 -0
  5. package/dist/container/DistributedCacheInvalidator.d.ts +84 -0
  6. package/dist/container/DistributedCacheInvalidator.js +213 -0
  7. package/dist/container/DistributedCacheInvalidator.js.map +1 -0
  8. package/dist/container/LruCache.d.ts +14 -0
  9. package/dist/container/LruCache.js +23 -0
  10. package/dist/container/LruCache.js.map +1 -0
  11. package/dist/container/types.d.ts +128 -0
  12. package/dist/container/types.js +6 -0
  13. package/dist/container/types.js.map +1 -0
  14. package/dist/index.d.ts +31 -0
  15. package/dist/index.js +53 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/server/bootstraps/getExpressTrpcApp.d.ts +17 -0
  18. package/dist/server/bootstraps/getExpressTrpcApp.js +98 -0
  19. package/dist/server/bootstraps/getExpressTrpcApp.js.map +1 -0
  20. package/dist/server/consts.d.ts +35 -0
  21. package/dist/server/consts.js +33 -0
  22. package/dist/server/consts.js.map +1 -0
  23. package/dist/server/context/context.model.d.ts +13 -0
  24. package/dist/server/context/context.model.js +3 -0
  25. package/dist/server/context/context.model.js.map +1 -0
  26. package/dist/server/context/request.context.d.ts +40 -0
  27. package/dist/server/context/request.context.js +65 -0
  28. package/dist/server/context/request.context.js.map +1 -0
  29. package/dist/server/context/trpc.context.d.ts +11 -0
  30. package/dist/server/context/trpc.context.js +67 -0
  31. package/dist/server/context/trpc.context.js.map +1 -0
  32. package/dist/server/initOpenApiDocs.d.ts +9 -0
  33. package/dist/server/initOpenApiDocs.js +18 -0
  34. package/dist/server/initOpenApiDocs.js.map +1 -0
  35. package/dist/server/middleware/cloudTaskDecrypt.middleware.d.ts +6 -0
  36. package/dist/server/middleware/cloudTaskDecrypt.middleware.js +44 -0
  37. package/dist/server/middleware/cloudTaskDecrypt.middleware.js.map +1 -0
  38. package/dist/server/middleware/error.middleware.d.ts +17 -0
  39. package/dist/server/middleware/error.middleware.js +66 -0
  40. package/dist/server/middleware/error.middleware.js.map +1 -0
  41. package/dist/server/middleware/handleRequest.middleware.d.ts +7 -0
  42. package/dist/server/middleware/handleRequest.middleware.js +40 -0
  43. package/dist/server/middleware/handleRequest.middleware.js.map +1 -0
  44. package/dist/server/middleware/logger/cloudRun.logger.d.ts +27 -0
  45. package/dist/server/middleware/logger/cloudRun.logger.js +87 -0
  46. package/dist/server/middleware/logger/cloudRun.logger.js.map +1 -0
  47. package/dist/server/middleware/logger/logger.service.d.ts +6 -0
  48. package/dist/server/middleware/logger/logger.service.js +17 -0
  49. package/dist/server/middleware/logger/logger.service.js.map +1 -0
  50. package/dist/server/middleware/logs.middleware.d.ts +7 -0
  51. package/dist/server/middleware/logs.middleware.js +130 -0
  52. package/dist/server/middleware/logs.middleware.js.map +1 -0
  53. package/dist/server/middleware/requireAuthenticated.d.ts +2 -0
  54. package/dist/server/middleware/requireAuthenticated.js +13 -0
  55. package/dist/server/middleware/requireAuthenticated.js.map +1 -0
  56. package/dist/server/middleware/trpcError.middleware.d.ts +4 -0
  57. package/dist/server/middleware/trpcError.middleware.js +38 -0
  58. package/dist/server/middleware/trpcError.middleware.js.map +1 -0
  59. package/dist/server/schemas/user.schema.d.ts +109 -0
  60. package/dist/server/schemas/user.schema.js +28 -0
  61. package/dist/server/schemas/user.schema.js.map +1 -0
  62. package/dist/server/sentry/getSentry.d.ts +6 -0
  63. package/dist/server/sentry/getSentry.js +45 -0
  64. package/dist/server/sentry/getSentry.js.map +1 -0
  65. package/dist/server/sentry/sentry.service.d.ts +34 -0
  66. package/dist/server/sentry/sentry.service.js +110 -0
  67. package/dist/server/sentry/sentry.service.js.map +1 -0
  68. package/dist/server/services/email/email.model.d.ts +84 -0
  69. package/dist/server/services/email/email.model.js +62 -0
  70. package/dist/server/services/email/email.model.js.map +1 -0
  71. package/dist/server/services/email/email.service.d.ts +23 -0
  72. package/dist/server/services/email/email.service.js +139 -0
  73. package/dist/server/services/email/email.service.js.map +1 -0
  74. package/dist/server/services/gcp/getGcpServiceAccountFromBase64.d.ts +15 -0
  75. package/dist/server/services/gcp/getGcpServiceAccountFromBase64.js +9 -0
  76. package/dist/server/services/gcp/getGcpServiceAccountFromBase64.js.map +1 -0
  77. package/dist/server/services/secrets/secret.service.d.ts +31 -0
  78. package/dist/server/services/secrets/secret.service.js +172 -0
  79. package/dist/server/services/secrets/secret.service.js.map +1 -0
  80. package/dist/server/services/sendgrid/sendgrid.model.d.ts +118 -0
  81. package/dist/server/services/sendgrid/sendgrid.model.js +3 -0
  82. package/dist/server/services/sendgrid/sendgrid.model.js.map +1 -0
  83. package/dist/server/services/sendgrid/sendgridApi.service.d.ts +13 -0
  84. package/dist/server/services/sendgrid/sendgridApi.service.js +79 -0
  85. package/dist/server/services/sendgrid/sendgridApi.service.js.map +1 -0
  86. package/dist/server/services/sendgrid/sendgridHooks.model.d.ts +27 -0
  87. package/dist/server/services/sendgrid/sendgridHooks.model.js +19 -0
  88. package/dist/server/services/sendgrid/sendgridHooks.model.js.map +1 -0
  89. package/dist/server/services/translations/template.util.d.ts +7 -0
  90. package/dist/server/services/translations/template.util.js +11 -0
  91. package/dist/server/services/translations/template.util.js.map +1 -0
  92. package/dist/server/services/translations/translation.model.d.ts +4 -0
  93. package/dist/server/services/translations/translation.model.js +6 -0
  94. package/dist/server/services/translations/translation.model.js.map +1 -0
  95. package/dist/server/services/translations/translation.service.d.ts +25 -0
  96. package/dist/server/services/translations/translation.service.js +97 -0
  97. package/dist/server/services/translations/translation.service.js.map +1 -0
  98. package/dist/server/services/util/benchmarker.d.ts +13 -0
  99. package/dist/server/services/util/benchmarker.js +34 -0
  100. package/dist/server/services/util/benchmarker.js.map +1 -0
  101. package/dist/server/services/util/pagination.d.ts +50 -0
  102. package/dist/server/services/util/pagination.js +57 -0
  103. package/dist/server/services/util/pagination.js.map +1 -0
  104. package/dist/server/services/util/url.service.d.ts +75 -0
  105. package/dist/server/services/util/url.service.js +139 -0
  106. package/dist/server/services/util/url.service.js.map +1 -0
  107. package/dist/server/test/express.mock.d.ts +6 -0
  108. package/dist/server/test/express.mock.js +49 -0
  109. package/dist/server/test/express.mock.js.map +1 -0
  110. package/dist/server/test/firebase.mock.d.ts +4 -0
  111. package/dist/server/test/firebase.mock.js +30 -0
  112. package/dist/server/test/firebase.mock.js.map +1 -0
  113. package/dist/server/test/mock.model.d.ts +5 -0
  114. package/dist/server/test/mock.model.js +3 -0
  115. package/dist/server/test/mock.model.js.map +1 -0
  116. package/dist/server/test/trpc.mock.d.ts +6 -0
  117. package/dist/server/test/trpc.mock.js +14 -0
  118. package/dist/server/test/trpc.mock.js.map +1 -0
  119. package/dist/server/trpc.d.ts +364 -0
  120. package/dist/server/trpc.js +87 -0
  121. package/dist/server/trpc.js.map +1 -0
  122. package/dist/server/types/Envinronment.d.ts +1 -0
  123. package/dist/server/types/Envinronment.js +3 -0
  124. package/dist/server/types/Envinronment.js.map +1 -0
  125. package/dist/tsconfig.tsbuildinfo +1 -1
  126. package/package.json +33 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret.service.js","sourceRoot":"","sources":["../../../../src/server/services/secrets/secret.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ import type { EmailAddress, EmailAttachment } from '../email/email.model';
2
+ export interface SendgridHTMLEmailRequest {
3
+ fromEmail: string;
4
+ fromName: string;
5
+ replyTo: string;
6
+ subject: string;
7
+ html: string;
8
+ categories: string[];
9
+ recipients: [
10
+ {
11
+ email: string;
12
+ name?: string;
13
+ }
14
+ ];
15
+ bcc?: EmailAddress[];
16
+ attachments?: EmailAttachment[];
17
+ }
18
+ export interface SendGridEmailResponse {
19
+ isSuccess: boolean;
20
+ statusCode: number;
21
+ body: string | Record<string, string>;
22
+ headers: Record<string, string>;
23
+ }
24
+ export interface TrackingSettingsJSON {
25
+ click_tracking?: {
26
+ enable?: boolean;
27
+ enable_text?: boolean;
28
+ };
29
+ open_tracking?: {
30
+ enable?: boolean;
31
+ substitution_tag?: string;
32
+ };
33
+ subscription_tracking?: {
34
+ enable?: boolean;
35
+ text?: string;
36
+ html?: string;
37
+ substitution_tag?: string;
38
+ };
39
+ ganalytics?: {
40
+ enable?: boolean;
41
+ utm_source?: string;
42
+ utm_medium?: string;
43
+ utm_term?: string;
44
+ utm_content?: string;
45
+ utm_campaign?: string;
46
+ };
47
+ }
48
+ export interface MailSettingsJSON {
49
+ bcc?: {
50
+ enable?: boolean;
51
+ email?: string;
52
+ };
53
+ bypass_list_management?: {
54
+ enable?: boolean;
55
+ };
56
+ footer?: {
57
+ enable?: boolean;
58
+ text?: string;
59
+ html?: string;
60
+ };
61
+ sandbox_mode?: {
62
+ enable?: boolean;
63
+ };
64
+ spam_check?: {
65
+ enable?: boolean;
66
+ threshold?: number;
67
+ post_to_url?: string;
68
+ };
69
+ }
70
+ export interface ASMOptionsJSON {
71
+ group_id: number;
72
+ groups_to_display?: number[];
73
+ }
74
+ export interface MailContent {
75
+ type: string;
76
+ value: string;
77
+ }
78
+ export interface AttachmentJSON {
79
+ content: string;
80
+ filename: string;
81
+ type?: string;
82
+ disposition?: string;
83
+ content_id?: string;
84
+ }
85
+ export interface EmailJSON {
86
+ name?: string;
87
+ email: string;
88
+ }
89
+ export interface PersonalizationJSON {
90
+ to: EmailJSON | EmailJSON[];
91
+ cc?: EmailJSON[];
92
+ bcc?: EmailJSON[];
93
+ headers?: Record<string, string>;
94
+ substitutions?: Record<string, string>;
95
+ dynamic_template_data?: Record<string, string>;
96
+ custom_args?: Record<string, string>;
97
+ subject?: string;
98
+ send_at?: number;
99
+ }
100
+ export interface MailJSON {
101
+ from: EmailJSON;
102
+ subject: string;
103
+ content: MailContent[];
104
+ personalizations: PersonalizationJSON[];
105
+ attachments?: AttachmentJSON[] | EmailAttachment[];
106
+ categories?: string[];
107
+ headers?: Record<string, string>;
108
+ mail_settings?: MailSettingsJSON;
109
+ tracking_settings?: TrackingSettingsJSON;
110
+ custom_args?: Record<string, string>;
111
+ sections?: Record<string, string>;
112
+ asm?: ASMOptionsJSON;
113
+ reply_to?: EmailJSON;
114
+ send_at?: number;
115
+ batch_id?: string;
116
+ template_id?: string;
117
+ ip_pool_name?: string;
118
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=sendgrid.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sendgrid.model.js","sourceRoot":"","sources":["../../../../src/server/services/sendgrid/sendgrid.model.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import { KyInstance } from '@goatlab/js-utils';
2
+ import type { SendGridEmailResponse, SendgridHTMLEmailRequest } from './sendgrid.model';
3
+ export declare class SendgridService {
4
+ sendgridApi: KyInstance | undefined;
5
+ shouldSendEmail: boolean;
6
+ fromEmail: string;
7
+ constructor({ token, shouldSendEmail, fromEmail, }: {
8
+ token: string;
9
+ shouldSendEmail?: boolean;
10
+ fromEmail: string;
11
+ });
12
+ sendFinalizedEmail(request: SendgridHTMLEmailRequest): Promise<SendGridEmailResponse>;
13
+ }
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SendgridService = void 0;
4
+ const js_utils_1 = require("@goatlab/js-utils");
5
+ class SendgridService {
6
+ sendgridApi = undefined;
7
+ shouldSendEmail = true;
8
+ fromEmail = 'test@example.com';
9
+ constructor({ token, shouldSendEmail = true, fromEmail, }) {
10
+ this.sendgridApi = js_utils_1.Http.getClient({
11
+ prefixUrl: 'https://api.sendgrid.com/v3/',
12
+ headers: {
13
+ Authorization: `Bearer ${token}`,
14
+ },
15
+ retry: {
16
+ limit: 3,
17
+ // Sendgrid uses POST
18
+ methods: ['POST'],
19
+ },
20
+ });
21
+ this.shouldSendEmail = shouldSendEmail;
22
+ this.fromEmail = fromEmail;
23
+ }
24
+ // https://docs.sendgrid.com/api-reference/mail-send/mail-send
25
+ async sendFinalizedEmail(request) {
26
+ if (this.shouldSendEmail) {
27
+ console.log('NOT SENDING EMAILS - shouldSendEmail=false');
28
+ return {
29
+ isSuccess: false,
30
+ statusCode: 1,
31
+ body: {},
32
+ headers: {},
33
+ };
34
+ }
35
+ const json = {
36
+ personalizations: [
37
+ {
38
+ to: request.recipients,
39
+ bcc: request.bcc?.length ? request.bcc : undefined,
40
+ },
41
+ ],
42
+ subject: request.subject,
43
+ categories: request.categories,
44
+ content: [{ type: 'text/html', value: request.html }],
45
+ from: {
46
+ email: this.fromEmail,
47
+ name: request.fromName,
48
+ },
49
+ reply_to: { email: request.replyTo },
50
+ tracking_settings: {
51
+ click_tracking: {
52
+ enable: true,
53
+ enable_text: true,
54
+ },
55
+ open_tracking: {
56
+ enable: true,
57
+ },
58
+ },
59
+ attachments: request.attachments?.length
60
+ ? request.attachments
61
+ : undefined,
62
+ };
63
+ if (!this.sendgridApi) {
64
+ return {
65
+ isSuccess: false,
66
+ statusCode: 1,
67
+ body: {},
68
+ headers: {},
69
+ };
70
+ }
71
+ return await this.sendgridApi
72
+ .post('mail/send', {
73
+ json,
74
+ })
75
+ .json();
76
+ }
77
+ }
78
+ exports.SendgridService = SendgridService;
79
+ //# sourceMappingURL=sendgridApi.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sendgridApi.service.js","sourceRoot":"","sources":["../../../../src/server/services/sendgrid/sendgridApi.service.ts"],"names":[],"mappings":";;;AAAA,gDAAoD;AAOpD,MAAa,eAAe;IAC1B,WAAW,GAA2B,SAAS,CAAA;IAC/C,eAAe,GAAY,IAAI,CAAA;IAC/B,SAAS,GAAW,kBAAkB,CAAA;IAEtC,YAAY,EACV,KAAK,EACL,eAAe,GAAG,IAAI,EACtB,SAAS,GAKV;QACC,IAAI,CAAC,WAAW,GAAG,eAAI,CAAC,SAAS,CAAC;YAChC,SAAS,EAAE,8BAA8B;YACzC,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,KAAK,EAAE;aACjC;YACD,KAAK,EAAE;gBACL,KAAK,EAAE,CAAC;gBACR,qBAAqB;gBACrB,OAAO,EAAE,CAAC,MAAM,CAAC;aAClB;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;QACtC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;IAED,8DAA8D;IAC9D,KAAK,CAAC,kBAAkB,CACtB,OAAiC;QAEjC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAA;YACzD,OAAO;gBACL,SAAS,EAAE,KAAK;gBAChB,UAAU,EAAE,CAAC;gBACb,IAAI,EAAE,EAAE;gBACR,OAAO,EAAE,EAAE;aACZ,CAAA;QACH,CAAC;QAED,MAAM,IAAI,GAAa;YACrB,gBAAgB,EAAE;gBAChB;oBACE,EAAE,EAAE,OAAO,CAAC,UAAU;oBACtB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;iBACnD;aACF;YACD,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;YACrD,IAAI,EAAE;gBACJ,KAAK,EAAE,IAAI,CAAC,SAAS;gBACrB,IAAI,EAAE,OAAO,CAAC,QAAQ;aACvB;YACD,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE;YACpC,iBAAiB,EAAE;gBACjB,cAAc,EAAE;oBACd,MAAM,EAAE,IAAI;oBACZ,WAAW,EAAE,IAAI;iBAClB;gBACD,aAAa,EAAE;oBACb,MAAM,EAAE,IAAI;iBACb;aACF;YACD,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,MAAM;gBACtC,CAAC,CAAC,OAAO,CAAC,WAAW;gBACrB,CAAC,CAAC,SAAS;SACd,CAAA;QAED,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO;gBACL,SAAS,EAAE,KAAK;gBAChB,UAAU,EAAE,CAAC;gBACb,IAAI,EAAE,EAAE;gBACR,OAAO,EAAE,EAAE;aACZ,CAAA;QACH,CAAC;QAED,OAAO,MAAM,IAAI,CAAC,WAAW;aAC1B,IAAI,CAAC,WAAW,EAAE;YACjB,IAAI;SACL,CAAC;aACD,IAAI,EAAyB,CAAA;IAClC,CAAC;CACF;AAxFD,0CAwFC"}
@@ -0,0 +1,27 @@
1
+ import type { EmailCategory } from '../email/email.model';
2
+ export declare enum SendgridEventType {
3
+ processed = "processed",
4
+ dropped = "dropped",
5
+ bounce = "bounce",
6
+ deferred = "deferred",
7
+ delivered = "delivered",
8
+ open = "open",
9
+ click = "click",
10
+ unsubscribe = "unsubscribe",
11
+ spamreport = "spamreport"
12
+ }
13
+ export interface SendgridEvent {
14
+ email: string;
15
+ category?: EmailCategory[];
16
+ 'smtp-id'?: string;
17
+ sg_event_id: string;
18
+ sg_message_id?: string;
19
+ timestamp: number;
20
+ event: SendgridEventType;
21
+ ip?: string;
22
+ url?: string;
23
+ useragent?: string;
24
+ response?: string;
25
+ reason?: string;
26
+ status?: string;
27
+ }
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SendgridEventType = void 0;
4
+ var SendgridEventType;
5
+ (function (SendgridEventType) {
6
+ // Process events
7
+ SendgridEventType["processed"] = "processed";
8
+ SendgridEventType["dropped"] = "dropped";
9
+ // Deliver events
10
+ SendgridEventType["bounce"] = "bounce";
11
+ SendgridEventType["deferred"] = "deferred";
12
+ SendgridEventType["delivered"] = "delivered";
13
+ // Read events
14
+ SendgridEventType["open"] = "open";
15
+ SendgridEventType["click"] = "click";
16
+ SendgridEventType["unsubscribe"] = "unsubscribe";
17
+ SendgridEventType["spamreport"] = "spamreport";
18
+ })(SendgridEventType || (exports.SendgridEventType = SendgridEventType = {}));
19
+ //# sourceMappingURL=sendgridHooks.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sendgridHooks.model.js","sourceRoot":"","sources":["../../../../src/server/services/sendgrid/sendgridHooks.model.ts"],"names":[],"mappings":";;;AAEA,IAAY,iBAeX;AAfD,WAAY,iBAAiB;IAC3B,iBAAiB;IACjB,4CAAuB,CAAA;IACvB,wCAAmB,CAAA;IAEnB,iBAAiB;IACjB,sCAAiB,CAAA;IACjB,0CAAqB,CAAA;IACrB,4CAAuB,CAAA;IAEvB,cAAc;IACd,kCAAa,CAAA;IACb,oCAAe,CAAA;IACf,gDAA2B,CAAA;IAC3B,8CAAyB,CAAA;AAC3B,CAAC,EAfW,iBAAiB,iCAAjB,iBAAiB,QAe5B"}
@@ -0,0 +1,7 @@
1
+ import type { AnyObject } from '@goatlab/js-utils';
2
+ import type { PupaOptions } from '@goatlab/js-utils/dist/Strings/pupa';
3
+ declare class TemplateUtil {
4
+ renderString(tmpl: string, params?: AnyObject, opt?: PupaOptions): string;
5
+ }
6
+ export declare const templateUtil: TemplateUtil;
7
+ export {};
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.templateUtil = void 0;
4
+ const js_utils_1 = require("@goatlab/js-utils");
5
+ class TemplateUtil {
6
+ renderString(tmpl, params = {}, opt = {}) {
7
+ return js_utils_1.Strings.pupa(tmpl, params, opt);
8
+ }
9
+ }
10
+ exports.templateUtil = new TemplateUtil();
11
+ //# sourceMappingURL=template.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.util.js","sourceRoot":"","sources":["../../../../src/server/services/translations/template.util.ts"],"names":[],"mappings":";;;AAEA,gDAA2C;AAE3C,MAAM,YAAY;IAChB,YAAY,CACV,IAAY,EACZ,SAAoB,EAAE,EACtB,MAAmB,EAAE;QAErB,OAAO,kBAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;IACxC,CAAC;CACF;AAEY,QAAA,YAAY,GAAG,IAAI,YAAY,EAAE,CAAA"}
@@ -0,0 +1,4 @@
1
+ export type LANG = 'en_us' | 'en_gb' | 'es_us' | 'es_cl' | 'es_mx';
2
+ export declare const SUPPORTED_LANGUAGES: LANG[];
3
+ export declare const LANG_DEFAULT = "en_us";
4
+ export declare const missingTranslationExcludeList: Set<string>;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.missingTranslationExcludeList = exports.LANG_DEFAULT = void 0;
4
+ exports.LANG_DEFAULT = 'en_us';
5
+ exports.missingTranslationExcludeList = new Set([]);
6
+ //# sourceMappingURL=translation.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translation.model.js","sourceRoot":"","sources":["../../../../src/server/services/translations/translation.model.ts"],"names":[],"mappings":";;;AAGa,QAAA,YAAY,GAAG,OAAO,CAAA;AAEtB,QAAA,6BAA6B,GAAG,IAAI,GAAG,CAAS,EAAE,CAAC,CAAA"}
@@ -0,0 +1,25 @@
1
+ import type { StringMap } from '@goatlab/js-utils';
2
+ import { LANG } from './translation.model';
3
+ export interface UserLanguageOptions {
4
+ language: LANG | null;
5
+ }
6
+ declare class TranslationService {
7
+ getLocale(lang: LANG | null): StringMap;
8
+ getLocaleMap(): Record<LANG, StringMap>;
9
+ missingKey(key: string): string;
10
+ translate(key: string, acc: UserLanguageOptions, args?: any): string;
11
+ /**
12
+ * Implementation based on static ./src/lang/*.json files
13
+ */
14
+ translateIfExists(key: string, user: UserLanguageOptions, args?: {}): string | undefined;
15
+ formatResult(key: string, text: string, args?: {}): string;
16
+ reportMissing(key: string, opt: UserLanguageOptions): void;
17
+ /**
18
+ * Based on: https://nodejs.org/api/intl.html#intl_detecting_internationalization_support
19
+ */
20
+ hasFullICU(): boolean;
21
+ }
22
+ export declare const translationService: TranslationService;
23
+ export declare function tr(key: string, user: UserLanguageOptions, args?: {}): string;
24
+ export declare function trIfExists(key: string, user: UserLanguageOptions, args?: {}): string | undefined;
25
+ export {};
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.translationService = void 0;
4
+ exports.tr = tr;
5
+ exports.trIfExists = trIfExists;
6
+ const pupa_1 = require("@goatlab/js-utils/dist/Strings/pupa");
7
+ const consts_1 = require("../../consts");
8
+ const template_util_1 = require("./template.util");
9
+ const translation_model_1 = require("./translation.model");
10
+ class TranslationService {
11
+ // @Memo.syncMethod()
12
+ getLocale(lang) {
13
+ try {
14
+ return { ...require(`${consts_1.config.langDir}/${lang}.json`) };
15
+ }
16
+ catch {
17
+ console.warn(`Unsupported lang ${lang}`);
18
+ return undefined;
19
+ }
20
+ }
21
+ getLocaleMap() {
22
+ return translation_model_1.SUPPORTED_LANGUAGES.reduce((map, lang) => {
23
+ map[lang] = this.getLocale(lang);
24
+ return map;
25
+ }, {});
26
+ }
27
+ missingKey(key) {
28
+ return `[${key}]`;
29
+ }
30
+ translate(key, acc, args = {}) {
31
+ const v = this.translateIfExists(key, acc, args);
32
+ if (!v) {
33
+ this.reportMissing(key, acc);
34
+ if (process.env.MOCK_LANG && process.env.MOCK_LANG_THROW_IF_NOT_FOUND) {
35
+ throw new Error(`key ${key} does not exist`);
36
+ }
37
+ }
38
+ return v ?? this.missingKey(key);
39
+ }
40
+ /**
41
+ * Implementation based on static ./src/lang/*.json files
42
+ */
43
+ translateIfExists(key, user, args = {}) {
44
+ const fallbackLocale = this.getLocale(translation_model_1.LANG_DEFAULT);
45
+ const locale = this.getLocale(user.language);
46
+ const value = locale[key] ?? fallbackLocale[key];
47
+ return value && this.formatResult(key, value, args);
48
+ }
49
+ formatResult(key, text, args = {}) {
50
+ if (process.env.MOCK_LANG) {
51
+ return `** ${key} **`;
52
+ }
53
+ if (Object.keys(args).length) {
54
+ try {
55
+ return template_util_1.templateUtil.renderString(text, args);
56
+ }
57
+ catch (err) {
58
+ if (err instanceof pupa_1.MissingValueError) {
59
+ // sentryService.captureMessage(
60
+ // `template value missing for key=${key}, param=${err.key}`,
61
+ // )
62
+ return template_util_1.templateUtil.renderString(text, args, { ignoreMissing: true });
63
+ }
64
+ throw err;
65
+ }
66
+ }
67
+ else {
68
+ return text;
69
+ }
70
+ }
71
+ reportMissing(key, opt) {
72
+ console.log(opt); // For Sentry
73
+ //sentryService.captureMessage(`translation missing for key=${key}}`)
74
+ }
75
+ /**
76
+ * Based on: https://nodejs.org/api/intl.html#intl_detecting_internationalization_support
77
+ */
78
+ hasFullICU() {
79
+ try {
80
+ const january = new Date(9e8);
81
+ const spanish = new Intl.DateTimeFormat('es', { month: 'long' });
82
+ return spanish.format(january) === 'enero';
83
+ }
84
+ catch {
85
+ return false;
86
+ }
87
+ }
88
+ }
89
+ exports.translationService = new TranslationService();
90
+ // Alias
91
+ function tr(key, user, args = {}) {
92
+ return exports.translationService.translate(key, user, args);
93
+ }
94
+ function trIfExists(key, user, args = {}) {
95
+ return exports.translationService.translateIfExists(key, user, args);
96
+ }
97
+ //# sourceMappingURL=translation.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translation.service.js","sourceRoot":"","sources":["../../../../src/server/services/translations/translation.service.ts"],"names":[],"mappings":";;;AA4GA,gBAEC;AAED,gCAMC;AArHD,8DAAuE;AACvE,yCAAqC;AACrC,mDAA8C;AAC9C,2DAA6E;AAO7E,MAAM,kBAAkB;IACtB,qBAAqB;IACrB,SAAS,CAAC,IAAiB;QACzB,IAAI,CAAC;YACH,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,eAAM,CAAC,OAAO,IAAI,IAAI,OAAO,CAAC,EAAE,CAAA;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAA;YACxC,OAAO,SAAgB,CAAA;QACzB,CAAC;IACH,CAAC;IAED,YAAY;QACV,OAAO,uCAAmB,CAAC,MAAM,CAC/B,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YACZ,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;YAChC,OAAO,GAAG,CAAA;QACZ,CAAC,EACD,EAA6B,CAC9B,CAAA;IACH,CAAC;IAED,UAAU,CAAC,GAAW;QACpB,OAAO,IAAI,GAAG,GAAG,CAAA;IACnB,CAAC;IAED,SAAS,CAAC,GAAW,EAAE,GAAwB,EAAE,OAAY,EAAE;QAC7D,MAAM,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;QAEhD,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;YAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,CAAC;gBACtE,MAAM,IAAI,KAAK,CAAC,OAAO,GAAG,iBAAiB,CAAC,CAAA;YAC9C,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;IAClC,CAAC;IAED;;OAEG;IACH,iBAAiB,CACf,GAAW,EACX,IAAyB,EACzB,IAAI,GAAG,EAAE;QAET,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,gCAAY,CAAC,CAAA;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,CAAA;QAChD,OAAO,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;IACrD,CAAC;IAED,YAAY,CAAC,GAAW,EAAE,IAAY,EAAE,IAAI,GAAG,EAAE;QAC/C,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YAC1B,OAAO,MAAM,GAAG,KAAK,CAAA;QACvB,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,OAAO,4BAAY,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YAC9C,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,IAAI,GAAG,YAAY,wBAAiB,EAAE,CAAC;oBACrC,gCAAgC;oBAChC,+DAA+D;oBAC/D,IAAI;oBACJ,OAAO,4BAAY,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;gBACvE,CAAC;gBAED,MAAM,GAAG,CAAA;YACX,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED,aAAa,CAAC,GAAW,EAAE,GAAwB;QACjD,OAAO,CAAC,GAAG,CAAC,GAAU,CAAC,CAAA,CAAC,aAAa;QACrC,qEAAqE;IACvE,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAA;YAC7B,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;YAChE,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,OAAO,CAAA;QAC5C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;CACF;AAEY,QAAA,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAA;AAE1D,QAAQ;AACR,SAAgB,EAAE,CAAC,GAAW,EAAE,IAAyB,EAAE,IAAI,GAAG,EAAE;IAClE,OAAO,0BAAkB,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AACtD,CAAC;AAED,SAAgB,UAAU,CACxB,GAAW,EACX,IAAyB,EACzB,IAAI,GAAG,EAAE;IAET,OAAO,0BAAkB,CAAC,iBAAiB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AAC9D,CAAC"}
@@ -0,0 +1,13 @@
1
+ export interface BenchmarkResult {
2
+ 'Task name': string;
3
+ 'Latency avg (ns)': string;
4
+ 'Latency med (ns)': string;
5
+ 'Throughput avg (ops/s)': string;
6
+ 'Throughput med (ops/s)': string;
7
+ Samples: number;
8
+ }
9
+ export declare function analyzeBenchmarkResults(results: BenchmarkResult[]): {
10
+ name: string;
11
+ latencyImprovement: number;
12
+ throughputImprovement: number;
13
+ }[];
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.analyzeBenchmarkResults = analyzeBenchmarkResults;
4
+ function analyzeBenchmarkResults(results) {
5
+ const parseValue = (value) => parseFloat(value.split(' ± ')[0]);
6
+ // Extract numeric values
7
+ const parsedResults = results.map((r) => ({
8
+ name: r['Task name'],
9
+ latencyAvg: parseValue(r['Latency avg (ns)']),
10
+ latencyMed: parseValue(r['Latency med (ns)']),
11
+ throughputAvg: parseValue(r['Throughput avg (ops/s)']),
12
+ throughputMed: parseValue(r['Throughput med (ops/s)']),
13
+ samples: r.Samples,
14
+ }));
15
+ console.log({ parsedResults });
16
+ // Find the best performers
17
+ const bestLatency = Math.min(...parsedResults.map((r) => r.latencyAvg)); // Lower is better
18
+ const bestThroughput = Math.max(...parsedResults.map((r) => r.throughputAvg)); // Higher is better
19
+ // Calculate improvements
20
+ const analysis = parsedResults.map((r) => ({
21
+ name: r.name,
22
+ latencyImprovement: ((bestLatency - r.latencyAvg) / bestLatency) * 100, // Lower is better
23
+ throughputImprovement: ((r.throughputAvg - bestThroughput) / bestThroughput) * 100, // Higher is better
24
+ }));
25
+ // Sort results from best to worst (by latency)
26
+ const sortedAnalysis = analysis.sort((a, b) => b.latencyImprovement - a.latencyImprovement);
27
+ console.table(sortedAnalysis.map(({ name, latencyImprovement, throughputImprovement }) => ({
28
+ 'Task Name': name,
29
+ 'Latency Improvement (%)': latencyImprovement.toFixed(2),
30
+ 'Throughput Improvement (%)': throughputImprovement.toFixed(2),
31
+ })));
32
+ return sortedAnalysis;
33
+ }
34
+ //# sourceMappingURL=benchmarker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchmarker.js","sourceRoot":"","sources":["../../../../src/server/services/util/benchmarker.ts"],"names":[],"mappings":";;AASA,0DA4CC;AA5CD,SAAgB,uBAAuB,CAAC,OAA0B;IAChE,MAAM,UAAU,GAAG,CAAC,KAAa,EAAU,EAAE,CAC3C,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAEnC,yBAAyB;IACzB,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxC,IAAI,EAAE,CAAC,CAAC,WAAW,CAAC;QACpB,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;QAC7C,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;QAC7C,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC;QACtD,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC;QACtD,OAAO,EAAE,CAAC,CAAC,OAAO;KACnB,CAAC,CAAC,CAAA;IAEH,OAAO,CAAC,GAAG,CAAC,EAAE,aAAa,EAAE,CAAC,CAAA;IAE9B,2BAA2B;IAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA,CAAC,kBAAkB;IAC1F,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAA,CAAC,mBAAmB;IAEjG,yBAAyB;IACzB,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACzC,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,kBAAkB,EAAE,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,WAAW,CAAC,GAAG,GAAG,EAAE,kBAAkB;QAC1F,qBAAqB,EACnB,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,cAAc,CAAC,GAAG,cAAc,CAAC,GAAG,GAAG,EAAE,mBAAmB;KACnF,CAAC,CAAC,CAAA;IAEH,+CAA+C;IAC/C,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,CAClC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAkB,GAAG,CAAC,CAAC,kBAAkB,CACtD,CAAA;IAED,OAAO,CAAC,KAAK,CACX,cAAc,CAAC,GAAG,CAChB,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,EAAE,EAAE,CAAC,CAAC;QACxD,WAAW,EAAE,IAAI;QACjB,yBAAyB,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;QACxD,4BAA4B,EAAE,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC;KAC/D,CAAC,CACH,CACF,CAAA;IAED,OAAO,cAAc,CAAA;AACvB,CAAC"}
@@ -0,0 +1,50 @@
1
+ import type { z, ZodTypeAny } from 'zod';
2
+ interface PaginationParams<T> {
3
+ cursor?: number | null;
4
+ perPage?: number;
5
+ total: number;
6
+ items: T[];
7
+ }
8
+ interface PaginationResult<T> {
9
+ total: number;
10
+ perPage: number;
11
+ currentPage: number;
12
+ lastPage: number;
13
+ nextPage: number | null;
14
+ previousPage: number | null;
15
+ data: T[];
16
+ }
17
+ /**
18
+ * Class to handle pagination calculations and operations.
19
+ */
20
+ declare class PaginationUtility {
21
+ /**
22
+ * Calculates the page number and the number of items to skip based on the cursor and items per page.
23
+ * @param cursor The current page number, defaults to 1 if not provided.
24
+ * @param perPage The number of items per page, defaults to 10 if not provided.
25
+ * @returns An object with the calculated page number and skip count.
26
+ */
27
+ calculatePaginationCursor({ cursor, perPage, }: {
28
+ cursor?: number | null;
29
+ perPage?: number | null;
30
+ }): {
31
+ page: number;
32
+ skip: number;
33
+ };
34
+ /**
35
+ * Paginates an array of items.
36
+ * @param cursor The page number to retrieve.
37
+ * @param perPage The number of items per page.
38
+ * @param total The total number of items.
39
+ * @param items The array of items to paginate.
40
+ * @returns The paginated result including metadata.
41
+ */
42
+ paginate<T>({ cursor, perPage, total, items, }: PaginationParams<T>): PaginationResult<T>;
43
+ getNextCursor<T extends ZodTypeAny>({ limit, items, schema, }: {
44
+ limit: number;
45
+ items: any[];
46
+ schema: T;
47
+ }): z.infer<T> | undefined;
48
+ }
49
+ export declare const paginationUtility: PaginationUtility;
50
+ export {};
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.paginationUtility = void 0;
4
+ /**
5
+ * Class to handle pagination calculations and operations.
6
+ */
7
+ class PaginationUtility {
8
+ /**
9
+ * Calculates the page number and the number of items to skip based on the cursor and items per page.
10
+ * @param cursor The current page number, defaults to 1 if not provided.
11
+ * @param perPage The number of items per page, defaults to 10 if not provided.
12
+ * @returns An object with the calculated page number and skip count.
13
+ */
14
+ calculatePaginationCursor({ cursor = 1, perPage = 10, }) {
15
+ const page = Math.max(1, cursor ?? 1);
16
+ const itemsPerPage = Math.max(1, perPage ?? 10);
17
+ const skip = (page - 1) * itemsPerPage;
18
+ return { page, skip };
19
+ }
20
+ /**
21
+ * Paginates an array of items.
22
+ * @param cursor The page number to retrieve.
23
+ * @param perPage The number of items per page.
24
+ * @param total The total number of items.
25
+ * @param items The array of items to paginate.
26
+ * @returns The paginated result including metadata.
27
+ */
28
+ paginate({ cursor = 1, perPage = 10, total, items, }) {
29
+ const page = Math.max(1, cursor ?? 1);
30
+ const itemsPerPage = Math.max(1, perPage || 10);
31
+ const lastPage = Math.ceil(total / itemsPerPage);
32
+ const nextPage = page + 1 <= lastPage ? page + 1 : null;
33
+ const previousPage = page - 1 >= 1 ? page - 1 : null;
34
+ return {
35
+ total,
36
+ perPage: itemsPerPage,
37
+ currentPage: page,
38
+ lastPage,
39
+ nextPage,
40
+ previousPage,
41
+ data: items,
42
+ };
43
+ }
44
+ getNextCursor({ limit, items, schema, }) {
45
+ let nextCursor;
46
+ if (items.length > limit) {
47
+ const nextItem = items.pop();
48
+ if (nextItem) {
49
+ // Validate and pick properties based on the provided Zod schema
50
+ nextCursor = schema.safeParse(nextItem).data;
51
+ }
52
+ }
53
+ return nextCursor;
54
+ }
55
+ }
56
+ exports.paginationUtility = new PaginationUtility();
57
+ //# sourceMappingURL=pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../../../src/server/services/util/pagination.ts"],"names":[],"mappings":";;;AAmBA;;GAEG;AACH,MAAM,iBAAiB;IACrB;;;;;OAKG;IACH,yBAAyB,CAAC,EACxB,MAAM,GAAG,CAAC,EACV,OAAO,GAAG,EAAE,GAIb;QACC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,CAAA;QACrC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC,CAAA;QAC/C,MAAM,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,YAAY,CAAA;QAEtC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;IACvB,CAAC;IAED;;;;;;;OAOG;IACH,QAAQ,CAAI,EACV,MAAM,GAAG,CAAC,EACV,OAAO,GAAG,EAAE,EACZ,KAAK,EACL,KAAK,GACe;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,CAAA;QACrC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC,CAAA;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,CAAA;QAChD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QACvD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAEpD,OAAO;YACL,KAAK;YACL,OAAO,EAAE,YAAY;YACrB,WAAW,EAAE,IAAI;YACjB,QAAQ;YACR,QAAQ;YACR,YAAY;YACZ,IAAI,EAAE,KAAK;SACZ,CAAA;IACH,CAAC;IAED,aAAa,CAAuB,EAClC,KAAK,EACL,KAAK,EACL,MAAM,GAKP;QACC,IAAI,UAAkC,CAAA;QAEtC,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,EAAE,CAAA;YAE5B,IAAI,QAAQ,EAAE,CAAC;gBACb,gEAAgE;gBAChE,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAA;YAC9C,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAA;IACnB,CAAC;CACF;AAEY,QAAA,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAA"}