@etohq/framework 1.3.0 → 1.5.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 (113) hide show
  1. package/LICENSE +21 -0
  2. package/dist/config/config.d.ts.map +1 -1
  3. package/dist/config/config.js +11 -4
  4. package/dist/config/config.js.map +1 -1
  5. package/dist/config/loader.d.ts +2 -5
  6. package/dist/config/loader.d.ts.map +1 -1
  7. package/dist/config/loader.js +14 -13
  8. package/dist/config/loader.js.map +1 -1
  9. package/dist/context/index.d.ts +1 -1
  10. package/dist/context/index.d.ts.map +1 -1
  11. package/dist/context/index.js +6 -3
  12. package/dist/context/index.js.map +1 -1
  13. package/dist/database/pg-connection-loader.d.ts +1 -1
  14. package/dist/database/pg-connection-loader.d.ts.map +1 -1
  15. package/dist/database/pg-connection-loader.js +25 -3
  16. package/dist/database/pg-connection-loader.js.map +1 -1
  17. package/dist/eto-app-loader.d.ts +6 -7
  18. package/dist/eto-app-loader.d.ts.map +1 -1
  19. package/dist/eto-app-loader.js +54 -4
  20. package/dist/eto-app-loader.js.map +1 -1
  21. package/dist/eto.d.ts +7 -7
  22. package/dist/eto.d.ts.map +1 -1
  23. package/dist/eto.js +4 -13
  24. package/dist/eto.js.map +1 -1
  25. package/dist/http/middlewares/apply-default-filters.d.ts.map +1 -1
  26. package/dist/http/middlewares/apply-default-filters.js.map +1 -1
  27. package/dist/http/middlewares/apply-params-as-filters.d.ts.map +1 -1
  28. package/dist/http/middlewares/apply-params-as-filters.js.map +1 -1
  29. package/dist/http/middlewares/authenticate-middleware.d.ts +3 -1
  30. package/dist/http/middlewares/authenticate-middleware.d.ts.map +1 -1
  31. package/dist/http/middlewares/authenticate-middleware.js +19 -10
  32. package/dist/http/middlewares/authenticate-middleware.js.map +1 -1
  33. package/dist/http/middlewares/bodyparser.d.ts +2 -0
  34. package/dist/http/middlewares/bodyparser.d.ts.map +1 -0
  35. package/dist/http/middlewares/bodyparser.js +99 -0
  36. package/dist/http/middlewares/bodyparser.js.map +1 -0
  37. package/dist/http/middlewares/ensure-publishable-api-key.d.ts.map +1 -1
  38. package/dist/http/middlewares/ensure-publishable-api-key.js +2 -2
  39. package/dist/http/middlewares/ensure-publishable-api-key.js.map +1 -1
  40. package/dist/http/middlewares/error-handler.d.ts.map +1 -1
  41. package/dist/http/middlewares/error-handler.js +7 -6
  42. package/dist/http/middlewares/error-handler.js.map +1 -1
  43. package/dist/http/types.d.ts +49 -19
  44. package/dist/http/types.d.ts.map +1 -1
  45. package/dist/http/utils/get-query-config.d.ts +5 -6
  46. package/dist/http/utils/get-query-config.d.ts.map +1 -1
  47. package/dist/http/utils/get-query-config.js +7 -5
  48. package/dist/http/utils/get-query-config.js.map +1 -1
  49. package/dist/http/utils/maybe-apply-link-filter.d.ts.map +1 -1
  50. package/dist/http/utils/maybe-apply-link-filter.js +12 -14
  51. package/dist/http/utils/maybe-apply-link-filter.js.map +1 -1
  52. package/dist/http/utils/refetch-entities.d.ts +1 -1
  53. package/dist/http/utils/refetch-entities.d.ts.map +1 -1
  54. package/dist/http/utils/refetch-entities.js +2 -2
  55. package/dist/http/utils/refetch-entities.js.map +1 -1
  56. package/dist/http/utils/validate-query.d.ts.map +1 -1
  57. package/dist/http/utils/validate-query.js +2 -1
  58. package/dist/http/utils/validate-query.js.map +1 -1
  59. package/dist/http/utils/wrap-handler.d.ts +2 -0
  60. package/dist/http/utils/wrap-handler.d.ts.map +1 -0
  61. package/dist/http/utils/wrap-handler.js +40 -0
  62. package/dist/http/utils/wrap-handler.js.map +1 -0
  63. package/dist/index.d.ts +1 -1
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js +1 -1
  66. package/dist/index.js.map +1 -1
  67. package/dist/jobs/job-loader.d.ts +13 -16
  68. package/dist/jobs/job-loader.d.ts.map +1 -1
  69. package/dist/jobs/job-loader.js +18 -88
  70. package/dist/jobs/job-loader.js.map +1 -1
  71. package/dist/links/link-loader.js +1 -1
  72. package/dist/links/link-loader.js.map +1 -1
  73. package/dist/loader.d.ts +8 -12
  74. package/dist/loader.d.ts.map +1 -1
  75. package/dist/loader.js +40 -35
  76. package/dist/loader.js.map +1 -1
  77. package/dist/logger/index.d.ts +28 -1
  78. package/dist/logger/index.d.ts.map +1 -1
  79. package/dist/logger/index.js +249 -3
  80. package/dist/logger/index.js.map +1 -1
  81. package/dist/migrations/index.d.ts +3 -0
  82. package/dist/migrations/index.d.ts.map +1 -0
  83. package/dist/migrations/index.js +19 -0
  84. package/dist/migrations/index.js.map +1 -0
  85. package/dist/migrations/migrator.d.ts +38 -0
  86. package/dist/migrations/migrator.d.ts.map +1 -0
  87. package/dist/migrations/migrator.js +130 -0
  88. package/dist/migrations/migrator.js.map +1 -0
  89. package/dist/migrations/run-migration-scripts.d.ts +17 -0
  90. package/dist/migrations/run-migration-scripts.d.ts.map +1 -0
  91. package/dist/migrations/run-migration-scripts.js +95 -0
  92. package/dist/migrations/run-migration-scripts.js.map +1 -0
  93. package/dist/mikro-orm-cli/bin.js +3 -3
  94. package/dist/mikro-orm-cli/bin.js.map +1 -1
  95. package/dist/subscribers/subscriber-loader.d.ts +5 -18
  96. package/dist/subscribers/subscriber-loader.d.ts.map +1 -1
  97. package/dist/subscribers/subscriber-loader.js +19 -95
  98. package/dist/subscribers/subscriber-loader.js.map +1 -1
  99. package/dist/types/container.d.ts +3 -2
  100. package/dist/types/container.d.ts.map +1 -1
  101. package/dist/utils/resource-loader.d.ts +26 -0
  102. package/dist/utils/resource-loader.d.ts.map +1 -0
  103. package/dist/utils/resource-loader.js +78 -0
  104. package/dist/utils/resource-loader.js.map +1 -0
  105. package/dist/workflows/workflow-loader.d.ts +4 -2
  106. package/dist/workflows/workflow-loader.d.ts.map +1 -1
  107. package/dist/workflows/workflow-loader.js +8 -58
  108. package/dist/workflows/workflow-loader.js.map +1 -1
  109. package/package.json +64 -57
  110. package/dist/telemetry/index.d.ts +0 -50
  111. package/dist/telemetry/index.d.ts.map +0 -1
  112. package/dist/telemetry/index.js +0 -81
  113. package/dist/telemetry/index.js.map +0 -1
@@ -1,3 +1,30 @@
1
- import logger from "@etohq/cli/dist/reporter";
1
+ import ora from "ora";
2
+ import winston from "winston";
3
+ export declare class Reporter {
4
+ protected activities_: Record<string, any>;
5
+ protected loggerInstance_: winston.Logger;
6
+ protected ora_: typeof ora;
7
+ constructor({ logger, activityLogger }: {
8
+ logger: any;
9
+ activityLogger: any;
10
+ });
11
+ panic(data: any): void;
12
+ shouldLog: (level: string) => boolean;
13
+ setLogLevel(level: string): void;
14
+ unsetLogLevel(): void;
15
+ activity(message: string, config?: any): string;
16
+ progress(activityId: string, message: string): void;
17
+ error(messageOrError: string | Error, error?: Error): void;
18
+ failure(activityId: string, message: string): any;
19
+ success(activityId: string, message: string): any;
20
+ silly(message: string): void;
21
+ debug(message: string): void;
22
+ verbose(message: string): void;
23
+ http(message: string): void;
24
+ info(message: string): void;
25
+ warn(message: string): void;
26
+ log(...args: any[]): void;
27
+ }
28
+ declare const logger: Reporter;
2
29
  export { logger };
3
30
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/logger/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAE7C,OAAO,EAAE,MAAM,EAAE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/logger/index.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAA;AAErB,OAAO,OAAO,MAAM,SAAS,CAAA;AAgD7B,qBAAa,QAAQ;IACnB,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC1C,SAAS,CAAC,eAAe,EAAE,OAAO,CAAC,MAAM,CAAA;IACzC,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,CAAA;gBAEd,EAAE,MAAM,EAAE,cAAc,EAAE;;;KAAA;IAMtC,KAAK,CAAC,IAAI,KAAA;IAQV,SAAS,GAAI,OAAO,MAAM,aAIzB;IAED,WAAW,CAAC,KAAK,EAAE,MAAM;IAIzB,aAAa;IAIb,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,GAAQ;IA4B1C,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAmB5C,KAAK,CAAC,cAAc,EAAE,MAAM,GAAG,KAAK,EAAE,KAAK,CAAC,EAAE,KAAK;IAsCnD,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IA+B3C,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IA+B3C,KAAK,CAAC,OAAO,EAAE,MAAM;IAOrB,KAAK,CAAC,OAAO,EAAE,MAAM;IAOrB,OAAO,CAAC,OAAO,EAAE,MAAM;IAOvB,IAAI,CAAC,OAAO,EAAE,MAAM;IAOpB,IAAI,CAAC,OAAO,EAAE,MAAM;IAOpB,IAAI,CAAC,OAAO,EAAE,MAAM;IAOpB,GAAG,CAAC,GAAG,IAAI,OAAA;CAYZ;AAED,QAAA,MAAM,MAAM,UAGV,CAAA;AAEF,OAAO,EAAE,MAAM,EAAE,CAAA"}
@@ -3,7 +3,253 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.logger = void 0;
7
- const reporter_1 = __importDefault(require("@etohq/cli/dist/reporter"));
8
- exports.logger = reporter_1.default;
6
+ exports.logger = exports.Reporter = void 0;
7
+ const ora_1 = __importDefault(require("ora"));
8
+ const ulid_1 = require("ulid");
9
+ const winston_1 = __importDefault(require("winston"));
10
+ const util_1 = require("util");
11
+ const stack_trace_1 = __importDefault(require("stack-trace"));
12
+ const LOG_LEVEL = process.env.LOG_LEVEL || "http";
13
+ const LOG_FILE = process.env.LOG_FILE || "";
14
+ const NODE_ENV = process.env.NODE_ENV || "development";
15
+ const IS_DEV = NODE_ENV.startsWith("dev");
16
+ let transports = [];
17
+ if (!IS_DEV) {
18
+ transports.push(new winston_1.default.transports.Console());
19
+ }
20
+ else {
21
+ transports.push(new winston_1.default.transports.Console({
22
+ format: winston_1.default.format.combine(winston_1.default.format.cli({
23
+ levels: winston_1.default.config.npm.levels,
24
+ }), winston_1.default.format.splat()),
25
+ }));
26
+ }
27
+ if (LOG_FILE) {
28
+ transports.push(new winston_1.default.transports.File({
29
+ filename: LOG_FILE,
30
+ }));
31
+ }
32
+ const loggerInstance = winston_1.default.createLogger({
33
+ level: LOG_LEVEL,
34
+ levels: winston_1.default.config.npm.levels,
35
+ format: winston_1.default.format.combine(winston_1.default.format.timestamp({
36
+ format: "YYYY-MM-DD HH:mm:ss",
37
+ }), winston_1.default.format.errors({ stack: true }), winston_1.default.format.splat(), winston_1.default.format.json()),
38
+ transports,
39
+ });
40
+ class Reporter {
41
+ constructor({ logger, activityLogger }) {
42
+ this.shouldLog = (level) => {
43
+ const levelValue = this.loggerInstance_.levels[level];
44
+ const logLevel = this.loggerInstance_.levels[this.loggerInstance_.level];
45
+ return levelValue <= logLevel;
46
+ };
47
+ this.activities_ = {};
48
+ this.loggerInstance_ = logger;
49
+ this.ora_ = activityLogger;
50
+ }
51
+ panic(data) {
52
+ this.loggerInstance_.log({
53
+ level: "error",
54
+ message: data.message,
55
+ });
56
+ process.exit(1);
57
+ }
58
+ setLogLevel(level) {
59
+ this.loggerInstance_.level = level;
60
+ }
61
+ unsetLogLevel() {
62
+ this.loggerInstance_.level = LOG_LEVEL;
63
+ }
64
+ activity(message, config = {}) {
65
+ const id = (0, ulid_1.ulid)();
66
+ if (IS_DEV && this.shouldLog("info")) {
67
+ const activity = this.ora_(message).start();
68
+ this.activities_[id] = {
69
+ activity,
70
+ config,
71
+ start: Date.now(),
72
+ };
73
+ return id;
74
+ }
75
+ else {
76
+ this.activities_[id] = {
77
+ start: Date.now(),
78
+ config,
79
+ };
80
+ this.loggerInstance_.log({
81
+ activity_id: id,
82
+ level: "info",
83
+ config,
84
+ message,
85
+ });
86
+ return id;
87
+ }
88
+ }
89
+ progress(activityId, message) {
90
+ const toLog = {
91
+ level: "info",
92
+ message,
93
+ };
94
+ if (this.activities_[activityId]) {
95
+ const activity = this.activities_[activityId];
96
+ if (activity.activity) {
97
+ activity.text = message;
98
+ }
99
+ else {
100
+ toLog["activity_id"] = activityId;
101
+ this.loggerInstance_.log(toLog);
102
+ }
103
+ }
104
+ else {
105
+ this.loggerInstance_.log(toLog);
106
+ }
107
+ }
108
+ error(messageOrError, error) {
109
+ let message;
110
+ let errorAsObject;
111
+ if (messageOrError && typeof messageOrError === "object") {
112
+ errorAsObject = messageOrError;
113
+ message = messageOrError.message;
114
+ }
115
+ else if (error) {
116
+ message = messageOrError;
117
+ errorAsObject = error;
118
+ }
119
+ else {
120
+ message = messageOrError;
121
+ }
122
+ const toLog = {
123
+ level: "error",
124
+ message,
125
+ };
126
+ if (errorAsObject) {
127
+ toLog["message"] = errorAsObject.message;
128
+ toLog["stack"] = stack_trace_1.default.parse(errorAsObject);
129
+ if ("cause" in errorAsObject) {
130
+ toLog["cause"] = (0, util_1.inspect)(errorAsObject.cause);
131
+ }
132
+ }
133
+ if (errorAsObject?.message && errorAsObject?.message !== message) {
134
+ this.loggerInstance_.log({ level: "error", message });
135
+ }
136
+ this.loggerInstance_.log(toLog);
137
+ if (errorAsObject && IS_DEV) {
138
+ console.error(errorAsObject);
139
+ }
140
+ }
141
+ failure(activityId, message) {
142
+ const time = Date.now();
143
+ const toLog = {
144
+ level: "error",
145
+ message,
146
+ };
147
+ if (this.activities_[activityId]) {
148
+ const activity = this.activities_[activityId];
149
+ if (activity.activity) {
150
+ activity.activity.fail(`${message} – ${time - activity.start}`);
151
+ }
152
+ else {
153
+ toLog["duration"] = time - activity.start;
154
+ toLog["activity_id"] = activityId;
155
+ this.loggerInstance_.log(toLog);
156
+ }
157
+ }
158
+ else {
159
+ this.loggerInstance_.log(toLog);
160
+ }
161
+ if (this.activities_[activityId]) {
162
+ const activity = this.activities_[activityId];
163
+ return {
164
+ ...activity,
165
+ duration: time - activity.start,
166
+ };
167
+ }
168
+ return null;
169
+ }
170
+ success(activityId, message) {
171
+ const time = Date.now();
172
+ const toLog = {
173
+ level: "info",
174
+ message,
175
+ };
176
+ if (this.activities_[activityId]) {
177
+ const activity = this.activities_[activityId];
178
+ if (activity.activity) {
179
+ activity.activity.succeed(`${message} – ${time - activity.start}ms`);
180
+ }
181
+ else {
182
+ toLog["duration"] = time - activity.start;
183
+ toLog["activity_id"] = activityId;
184
+ this.loggerInstance_.log(toLog);
185
+ }
186
+ }
187
+ else {
188
+ this.loggerInstance_.log(toLog);
189
+ }
190
+ if (this.activities_[activityId]) {
191
+ const activity = this.activities_[activityId];
192
+ return {
193
+ ...activity,
194
+ duration: time - activity.start,
195
+ };
196
+ }
197
+ return null;
198
+ }
199
+ silly(message) {
200
+ this.loggerInstance_.log({
201
+ level: "silly",
202
+ message,
203
+ });
204
+ }
205
+ debug(message) {
206
+ this.loggerInstance_.log({
207
+ level: "debug",
208
+ message,
209
+ });
210
+ }
211
+ verbose(message) {
212
+ this.loggerInstance_.log({
213
+ level: "vebose",
214
+ message,
215
+ });
216
+ }
217
+ http(message) {
218
+ this.loggerInstance_.log({
219
+ level: "http",
220
+ message,
221
+ });
222
+ }
223
+ info(message) {
224
+ this.loggerInstance_.log({
225
+ level: "info",
226
+ message,
227
+ });
228
+ }
229
+ warn(message) {
230
+ this.loggerInstance_.warn({
231
+ level: "warn",
232
+ message,
233
+ });
234
+ }
235
+ log(...args) {
236
+ if (args.length > 1) {
237
+ // @ts-ignore
238
+ this.loggerInstance_.log(...args);
239
+ }
240
+ else {
241
+ let message = args[0];
242
+ this.loggerInstance_.log({
243
+ level: "info",
244
+ message,
245
+ });
246
+ }
247
+ }
248
+ }
249
+ exports.Reporter = Reporter;
250
+ const logger = new Reporter({
251
+ logger: loggerInstance,
252
+ activityLogger: ora_1.default,
253
+ });
254
+ exports.logger = logger;
9
255
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/logger/index.ts"],"names":[],"mappings":";;;;;;AAAA,wEAA6C;AAEpC,iBAFF,kBAAM,CAEE"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/logger/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from "./migrator";
2
+ export * from "./run-migration-scripts";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,yBAAyB,CAAA"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./migrator"), exports);
18
+ __exportStar(require("./run-migration-scripts"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA0B;AAC1B,0DAAuC"}
@@ -0,0 +1,38 @@
1
+ import { EtoContainer } from "@etohq/types";
2
+ import { Knex } from "@mikro-orm/knex";
3
+ export declare abstract class Migrator {
4
+ #private;
5
+ protected abstract migration_table_name: string;
6
+ protected container: EtoContainer;
7
+ protected pgConnection: Knex<any>;
8
+ constructor({ container }: {
9
+ container: EtoContainer;
10
+ });
11
+ /**
12
+ * Util to track duration using hrtime
13
+ */
14
+ protected trackDuration(): {
15
+ getSeconds(): string;
16
+ };
17
+ ensureDatabase(): Promise<void>;
18
+ ensureMigrationsTable(): Promise<void>;
19
+ getExecutedMigrations(): Promise<{
20
+ script_name: string;
21
+ }[]>;
22
+ insertMigration(records: Record<string, any>[]): Promise<void>;
23
+ /**
24
+ * Load migration files from the given paths
25
+ *
26
+ * @param paths - The paths to load migration files from
27
+ * @param options - The options for loading migration files
28
+ * @param options.force - Whether to force loading migration files even if they have already been loaded
29
+ * @returns The loaded migration file paths
30
+ */
31
+ loadMigrationFiles(paths: string[], { force }?: {
32
+ force?: boolean;
33
+ }): Promise<string[]>;
34
+ protected abstract createMigrationTable(): Promise<void>;
35
+ abstract run(...args: any[]): Promise<any>;
36
+ abstract getPendingMigrations(migrationPaths: string[]): Promise<string[]>;
37
+ }
38
+ //# sourceMappingURL=migrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrator.d.ts","sourceRoot":"","sources":["../../src/migrations/migrator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAMtC,8BAAsB,QAAQ;;IAC5B,SAAS,CAAC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAA;IAE/C,SAAS,CAAC,SAAS,EAAE,YAAY,CAAA;IACjC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;gBAIrB,EAAE,SAAS,EAAE,EAAE;QAAE,SAAS,EAAE,YAAY,CAAA;KAAE;IAOtD;;OAEG;IACH,SAAS,CAAC,aAAa;;;IAUjB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB/B,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAwBtC,qBAAqB,IAAI,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAY3D,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBpE;;;;;;;OAOG;IACG,kBAAkB,CACtB,KAAK,EAAE,MAAM,EAAE,EACf,EAAE,KAAK,EAAE,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAqB,GAChD,OAAO,CAAC,MAAM,EAAE,CAAC;IAiCpB,SAAS,CAAC,QAAQ,CAAC,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IACxD,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAC1C,QAAQ,CAAC,oBAAoB,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAC3E"}
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
4
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
5
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
6
+ };
7
+ var _Migrator_alreadyLoadedPaths;
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.Migrator = void 0;
10
+ const glob_1 = require("glob");
11
+ const path_1 = require("path");
12
+ const logger_1 = require("../logger");
13
+ const utils_1 = require("../utils");
14
+ class Migrator {
15
+ constructor({ container }) {
16
+ _Migrator_alreadyLoadedPaths.set(this, new Map());
17
+ this.container = container;
18
+ this.pgConnection = this.container.resolve(utils_1.ContainerRegistrationKeys.PG_CONNECTION);
19
+ }
20
+ /**
21
+ * Util to track duration using hrtime
22
+ */
23
+ trackDuration() {
24
+ const startTime = process.hrtime();
25
+ return {
26
+ getSeconds() {
27
+ const duration = process.hrtime(startTime);
28
+ return (duration[0] + duration[1] / 1e9).toFixed(2);
29
+ },
30
+ };
31
+ }
32
+ async ensureDatabase() {
33
+ const pgConnection = this.container.resolve(utils_1.ContainerRegistrationKeys.PG_CONNECTION);
34
+ try {
35
+ await pgConnection.raw("SELECT 1 + 1;");
36
+ }
37
+ catch (error) {
38
+ if (error.code === "3D000") {
39
+ logger_1.logger.error(`Cannot run migrations. ${error.message.replace("error: ", "")}`);
40
+ logger_1.logger.info(`Run command "db:create" to create the database`);
41
+ }
42
+ else {
43
+ logger_1.logger.error(error);
44
+ }
45
+ throw error;
46
+ }
47
+ }
48
+ async ensureMigrationsTable() {
49
+ try {
50
+ // Check if table exists
51
+ const tableExists = await this.pgConnection.raw(`
52
+ SELECT EXISTS (
53
+ SELECT FROM information_schema.tables
54
+ WHERE table_schema = 'public'
55
+ AND table_name = '${this.migration_table_name}'
56
+ );
57
+ `);
58
+ if (!tableExists.rows[0].exists) {
59
+ logger_1.logger.info(`Creating migrations table '${this.migration_table_name}'...`);
60
+ await this.createMigrationTable();
61
+ logger_1.logger.info("Migrations table created successfully");
62
+ }
63
+ }
64
+ catch (error) {
65
+ logger_1.logger.error("Failed to ensure migrations table exists:", error);
66
+ throw error;
67
+ }
68
+ }
69
+ async getExecutedMigrations() {
70
+ try {
71
+ const result = await this.pgConnection.raw(`SELECT * FROM ${this.migration_table_name}`);
72
+ return result.rows;
73
+ }
74
+ catch (error) {
75
+ logger_1.logger.error("Failed to get executed migrations:", error);
76
+ throw error;
77
+ }
78
+ }
79
+ async insertMigration(records) {
80
+ try {
81
+ const values = records.map((record) => Object.values(record));
82
+ const columns = Object.keys(records[0]);
83
+ await this.pgConnection.raw(`INSERT INTO ${this.migration_table_name} (${columns.join(", ")}) VALUES ${values
84
+ .map((itemValues) => `(${new Array(itemValues.length).fill("?").join(",")})`)
85
+ .join(",")}`, values.flat());
86
+ }
87
+ catch (error) {
88
+ logger_1.logger.error(`Failed to update migration table '${this.migration_table_name}':`, error);
89
+ throw error;
90
+ }
91
+ }
92
+ /**
93
+ * Load migration files from the given paths
94
+ *
95
+ * @param paths - The paths to load migration files from
96
+ * @param options - The options for loading migration files
97
+ * @param options.force - Whether to force loading migration files even if they have already been loaded
98
+ * @returns The loaded migration file paths
99
+ */
100
+ async loadMigrationFiles(paths, { force } = { force: false }) {
101
+ const allScripts = [];
102
+ for (const basePath of paths) {
103
+ if (!force && __classPrivateFieldGet(this, _Migrator_alreadyLoadedPaths, "f").has(basePath)) {
104
+ allScripts.push(...__classPrivateFieldGet(this, _Migrator_alreadyLoadedPaths, "f").get(basePath));
105
+ continue;
106
+ }
107
+ try {
108
+ const scriptFiles = glob_1.glob.sync("*.{js,ts}", {
109
+ cwd: basePath,
110
+ ignore: ["**/index.{js,ts}", "**/*.d.ts"],
111
+ });
112
+ scriptFiles.sort((a, b) => a.localeCompare(b));
113
+ if (!scriptFiles?.length) {
114
+ continue;
115
+ }
116
+ const filePaths = scriptFiles.map((script) => (0, path_1.join)(basePath, script));
117
+ __classPrivateFieldGet(this, _Migrator_alreadyLoadedPaths, "f").set(basePath, filePaths);
118
+ allScripts.push(...filePaths);
119
+ }
120
+ catch (error) {
121
+ logger_1.logger.error(`Failed to load migration files from ${basePath}:`, error);
122
+ throw error;
123
+ }
124
+ }
125
+ return allScripts;
126
+ }
127
+ }
128
+ exports.Migrator = Migrator;
129
+ _Migrator_alreadyLoadedPaths = new WeakMap();
130
+ //# sourceMappingURL=migrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrator.js","sourceRoot":"","sources":["../../src/migrations/migrator.ts"],"names":[],"mappings":";;;;;;;;;AAEA,+BAA2B;AAC3B,+BAA2B;AAC3B,sCAAkC;AAClC,oCAAoD;AAEpD,MAAsB,QAAQ;IAQ5B,YAAY,EAAE,SAAS,EAA+B;QAFtD,uCAAwC,IAAI,GAAG,EAAE,EAAA;QAG/C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CACxC,iCAAyB,CAAC,aAAa,CACxC,CAAA;IACH,CAAC;IAED;;OAEG;IACO,aAAa;QACrB,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,EAAE,CAAA;QAClC,OAAO;YACL,UAAU;gBACR,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;gBAC1C,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;YACrD,CAAC;SACF,CAAA;IACH,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CACzC,iCAAyB,CAAC,aAAa,CACxC,CAAA;QAED,IAAI,CAAC;YACH,MAAM,YAAY,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC3B,eAAM,CAAC,KAAK,CACV,0BAA0B,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CACjE,CAAA;gBACD,eAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAA;YAC/D,CAAC;iBAAM,CAAC;gBACN,eAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YACrB,CAAC;YACD,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;IAED,KAAK,CAAC,qBAAqB;QACzB,IAAI,CAAC;YACH,wBAAwB;YACxB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;;;;8BAIxB,IAAI,CAAC,oBAAoB;;OAEhD,CAAC,CAAA;YAEF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;gBAChC,eAAM,CAAC,IAAI,CACT,8BAA8B,IAAI,CAAC,oBAAoB,MAAM,CAC9D,CAAA;gBACD,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAA;gBACjC,eAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAA;YACtD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAAA;YAChE,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;IAED,KAAK,CAAC,qBAAqB;QACzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CACxC,iBAAiB,IAAI,CAAC,oBAAoB,EAAE,CAC7C,CAAA;YACD,OAAO,MAAM,CAAC,IAAI,CAAA;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAA;YACzD,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAA8B;QAClD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;YAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;YAEvC,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CACzB,eAAe,IAAI,CAAC,oBAAoB,KAAK,OAAO,CAAC,IAAI,CACvD,IAAI,CACL,YAAY,MAAM;iBAChB,GAAG,CACF,CAAC,UAAU,EAAE,EAAE,CACb,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAC1D;iBACA,IAAI,CAAC,GAAG,CAAC,EAAE,EACd,MAAM,CAAC,IAAI,EAAE,CACd,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CACV,qCAAqC,IAAI,CAAC,oBAAoB,IAAI,EAClE,KAAK,CACN,CAAA;YACD,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,kBAAkB,CACtB,KAAe,EACf,EAAE,KAAK,KAA0B,EAAE,KAAK,EAAE,KAAK,EAAE;QAEjD,MAAM,UAAU,GAAa,EAAE,CAAA;QAE/B,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC,KAAK,IAAI,uBAAA,IAAI,oCAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACrD,UAAU,CAAC,IAAI,CAAC,GAAG,uBAAA,IAAI,oCAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;gBAC1D,SAAQ;YACV,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,WAAI,CAAC,IAAI,CAAC,WAAW,EAAE;oBACzC,GAAG,EAAE,QAAQ;oBACb,MAAM,EAAE,CAAC,kBAAkB,EAAE,WAAW,CAAC;iBAC1C,CAAC,CAAA;gBACF,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;gBAE9C,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;oBACzB,SAAQ;gBACV,CAAC;gBAED,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAA,WAAI,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA;gBACrE,uBAAA,IAAI,oCAAoB,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;gBAEjD,UAAU,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAA;YAC/B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,eAAM,CAAC,KAAK,CAAC,uCAAuC,QAAQ,GAAG,EAAE,KAAK,CAAC,CAAA;gBACvE,MAAM,KAAK,CAAA;YACb,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAA;IACnB,CAAC;CAKF;AA5JD,4BA4JC"}
@@ -0,0 +1,17 @@
1
+ import { EtoContainer } from "@etohq/types";
2
+ import { Migrator } from "./migrator";
3
+ export declare class MigrationScriptsMigrator extends Migrator {
4
+ #private;
5
+ protected migration_table_name: string;
6
+ constructor({ container }: {
7
+ container: EtoContainer;
8
+ });
9
+ /**
10
+ * Run the migration scripts
11
+ * @param paths - The paths from which to load the scripts
12
+ */
13
+ run(paths: string[]): Promise<void>;
14
+ getPendingMigrations(migrationPaths: string[]): Promise<string[]>;
15
+ protected createMigrationTable(): Promise<void>;
16
+ }
17
+ //# sourceMappingURL=run-migration-scripts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-migration-scripts.d.ts","sourceRoot":"","sources":["../../src/migrations/run-migration-scripts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAI3C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAKrC,qBAAa,wBAAyB,SAAQ,QAAQ;;IACpD,SAAS,CAAC,oBAAoB,SAAsB;gBAExC,EAAE,SAAS,EAAE,EAAE;QAAE,SAAS,EAAE,YAAY,CAAA;KAAE;IAItD;;;OAGG;IACG,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA4DnC,oBAAoB,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;cASvD,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;CA0BtD"}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
4
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
5
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
6
+ };
7
+ var _MigrationScriptsMigrator_instances, _MigrationScriptsMigrator_updateMigrationFinishedAt, _MigrationScriptsMigrator_deleteMigration;
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.MigrationScriptsMigrator = void 0;
10
+ const utils_1 = require("@etohq/utils");
11
+ const path_1 = require("path");
12
+ const logger_1 = require("../logger");
13
+ const migrator_1 = require("./migrator");
14
+ // we really dont need this i think. since encore takes over migration, hmm, i think this is different, this is for scripts, lets confirm later.
15
+ class MigrationScriptsMigrator extends migrator_1.Migrator {
16
+ constructor({ container }) {
17
+ super({ container });
18
+ _MigrationScriptsMigrator_instances.add(this);
19
+ this.migration_table_name = "script_migrations";
20
+ }
21
+ /**
22
+ * Run the migration scripts
23
+ * @param paths - The paths from which to load the scripts
24
+ */
25
+ async run(paths) {
26
+ const lockService = this.container.resolve(utils_1.Modules.LOCKING);
27
+ const lockKey = "migration-scripts-running";
28
+ await lockService.acquire(lockKey, {
29
+ expire: 60 * 60,
30
+ });
31
+ try {
32
+ const scriptPaths = await this.getPendingMigrations(paths);
33
+ for (const script of scriptPaths) {
34
+ const scriptFn = await (0, utils_1.dynamicImport)(script);
35
+ if (!scriptFn.default) {
36
+ throw new Error(`Failed to load migration script ${script}. No default export found.`);
37
+ }
38
+ const scriptName = (0, path_1.basename)(script);
39
+ const err = await this.insertMigration([
40
+ { script_name: scriptName },
41
+ ]).catch((e) => e);
42
+ /**
43
+ * In case another processes is running in parallel, the migration might
44
+ * have already been executed and therefore the insert will fail because of the
45
+ * unique constraint.
46
+ */
47
+ if (err) {
48
+ if (err.constraint === "idx_script_name_unique") {
49
+ continue;
50
+ }
51
+ throw err;
52
+ }
53
+ logger_1.logger.info(`Running migration script ${script}`);
54
+ try {
55
+ const tracker = this.trackDuration();
56
+ await scriptFn.default({ container: this.container });
57
+ logger_1.logger.info(`Migration script ${script} completed (${tracker.getSeconds()}s)`);
58
+ await __classPrivateFieldGet(this, _MigrationScriptsMigrator_instances, "m", _MigrationScriptsMigrator_updateMigrationFinishedAt).call(this, scriptName);
59
+ }
60
+ catch (error) {
61
+ logger_1.logger.error(`Failed to run migration script ${script}:`, error);
62
+ await __classPrivateFieldGet(this, _MigrationScriptsMigrator_instances, "m", _MigrationScriptsMigrator_deleteMigration).call(this, scriptName);
63
+ throw error;
64
+ }
65
+ }
66
+ }
67
+ finally {
68
+ await lockService.release(lockKey);
69
+ }
70
+ }
71
+ async getPendingMigrations(migrationPaths) {
72
+ const executedMigrations = new Set((await this.getExecutedMigrations()).map((item) => item.script_name));
73
+ const all = await this.loadMigrationFiles(migrationPaths);
74
+ return all.filter((item) => !executedMigrations.has((0, path_1.basename)(item)));
75
+ }
76
+ async createMigrationTable() {
77
+ await this.pgConnection.raw(`
78
+ CREATE TABLE IF NOT EXISTS ${this.migration_table_name} (
79
+ id SERIAL PRIMARY KEY,
80
+ script_name VARCHAR(255) NOT NULL,
81
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
82
+ finished_at TIMESTAMP WITH TIME ZONE
83
+ );
84
+
85
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_script_name_unique ON ${this.migration_table_name} (script_name);
86
+ `);
87
+ }
88
+ }
89
+ exports.MigrationScriptsMigrator = MigrationScriptsMigrator;
90
+ _MigrationScriptsMigrator_instances = new WeakSet(), _MigrationScriptsMigrator_updateMigrationFinishedAt = function _MigrationScriptsMigrator_updateMigrationFinishedAt(scriptName) {
91
+ return this.pgConnection.raw(`UPDATE ${this.migration_table_name} SET finished_at = NOW() WHERE script_name = ?`, [scriptName]);
92
+ }, _MigrationScriptsMigrator_deleteMigration = function _MigrationScriptsMigrator_deleteMigration(scriptName) {
93
+ return this.pgConnection.raw(`DELETE FROM ${this.migration_table_name} WHERE script_name = ?`, [scriptName]);
94
+ };
95
+ //# sourceMappingURL=run-migration-scripts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-migration-scripts.js","sourceRoot":"","sources":["../../src/migrations/run-migration-scripts.ts"],"names":[],"mappings":"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"}