@diia-inhouse/workflow 1.17.11 → 2.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 (144) hide show
  1. package/dist/activities/index.d.ts +1 -0
  2. package/dist/activities/index.js +2 -18
  3. package/dist/activities/proxy.d.ts +34 -0
  4. package/dist/activities/proxy.js +16 -24
  5. package/dist/activity.d.ts +2 -0
  6. package/dist/activity.js +2 -15
  7. package/dist/cli/checkWorkflowDeterminism.js +249 -275
  8. package/dist/cli/determinism/errorClassifier.js +56 -60
  9. package/dist/cli/determinism/historyFiles.js +68 -97
  10. package/dist/cli/determinism/index.js +7 -19
  11. package/dist/cli/determinism/replayExecutor.js +114 -133
  12. package/dist/cli/determinism/replayOptions.js +13 -22
  13. package/dist/cli/determinism/report.js +55 -45
  14. package/dist/cli/determinism/reportPrinter.js +101 -138
  15. package/dist/cli/index.d.ts +1 -0
  16. package/dist/cli/index.js +79 -119
  17. package/dist/cli/syncTemporalSchedules.js +74 -91
  18. package/dist/cli/updateTemporalSchedule.js +43 -53
  19. package/dist/client.d.ts +3 -0
  20. package/dist/client.js +3 -19
  21. package/dist/common.d.ts +2 -0
  22. package/dist/common.js +2 -13
  23. package/dist/encryption/crypto.d.ts +7 -0
  24. package/dist/encryption/crypto.js +20 -22
  25. package/dist/encryption/dataConverter.d.ts +7 -0
  26. package/dist/encryption/dataConverter.js +15 -22
  27. package/dist/encryption/encryptionCodec.d.ts +31 -0
  28. package/dist/encryption/encryptionCodec.js +108 -124
  29. package/dist/encryption/index.d.ts +3 -0
  30. package/dist/encryption/index.js +4 -20
  31. package/dist/index.d.ts +7 -0
  32. package/dist/index.js +6 -42
  33. package/dist/instrumentation.js +6 -10
  34. package/dist/interceptors/asyncLocalStorageBridge.js +29 -66
  35. package/dist/interceptors/traceLogAttributes.d.ts +6 -0
  36. package/dist/interceptors/traceLogAttributes.js +16 -54
  37. package/dist/interceptors.d.ts +6 -0
  38. package/dist/interceptors.js +6 -8
  39. package/dist/interfaces/config.d.ts +58 -0
  40. package/dist/interfaces/index.d.ts +1 -0
  41. package/dist/interfaces/services/schedulesExporter.d.ts +96 -0
  42. package/dist/interfaces/services/worker.d.ts +60 -0
  43. package/dist/operations.d.ts +9 -0
  44. package/dist/operations.js +11 -75
  45. package/dist/services/client.d.ts +24 -0
  46. package/dist/services/client.js +89 -96
  47. package/dist/services/schedulesExporter.d.ts +101 -0
  48. package/dist/services/schedulesExporter.js +456 -0
  49. package/dist/services/worker/identity.d.ts +4 -0
  50. package/dist/services/worker/identity.js +6 -9
  51. package/dist/services/worker.d.ts +124 -0
  52. package/dist/services/worker.js +324 -304
  53. package/dist/services/workerHealth.d.ts +15 -0
  54. package/dist/services/workerHealth.js +26 -35
  55. package/dist/testing.d.ts +42 -0
  56. package/dist/testing.js +43 -54
  57. package/dist/worker.d.ts +9 -0
  58. package/dist/worker.js +7 -25
  59. package/package.json +40 -37
  60. package/dist/activities/index.js.map +0 -1
  61. package/dist/activities/proxy.js.map +0 -1
  62. package/dist/activity.js.map +0 -1
  63. package/dist/cli/checkWorkflowDeterminism.js.map +0 -1
  64. package/dist/cli/determinism/errorClassifier.js.map +0 -1
  65. package/dist/cli/determinism/historyFiles.js.map +0 -1
  66. package/dist/cli/determinism/index.js.map +0 -1
  67. package/dist/cli/determinism/replayExecutor.js.map +0 -1
  68. package/dist/cli/determinism/replayOptions.js.map +0 -1
  69. package/dist/cli/determinism/report.js.map +0 -1
  70. package/dist/cli/determinism/reportPrinter.js.map +0 -1
  71. package/dist/cli/determinism/types.js +0 -3
  72. package/dist/cli/determinism/types.js.map +0 -1
  73. package/dist/cli/index.js.map +0 -1
  74. package/dist/cli/syncTemporalSchedules.js.map +0 -1
  75. package/dist/cli/updateTemporalSchedule.js.map +0 -1
  76. package/dist/client.js.map +0 -1
  77. package/dist/common.js.map +0 -1
  78. package/dist/encryption/crypto.js.map +0 -1
  79. package/dist/encryption/dataConverter.js.map +0 -1
  80. package/dist/encryption/encryptionCodec.js.map +0 -1
  81. package/dist/encryption/index.js.map +0 -1
  82. package/dist/index.js.map +0 -1
  83. package/dist/instrumentation.js.map +0 -1
  84. package/dist/interceptors/asyncLocalStorageBridge.js.map +0 -1
  85. package/dist/interceptors/index.js +0 -8
  86. package/dist/interceptors/index.js.map +0 -1
  87. package/dist/interceptors/traceLogAttributes.js.map +0 -1
  88. package/dist/interceptors.js.map +0 -1
  89. package/dist/interfaces/config.js +0 -3
  90. package/dist/interfaces/config.js.map +0 -1
  91. package/dist/interfaces/index.js +0 -18
  92. package/dist/interfaces/index.js.map +0 -1
  93. package/dist/interfaces/services/worker.js +0 -3
  94. package/dist/interfaces/services/worker.js.map +0 -1
  95. package/dist/operations.js.map +0 -1
  96. package/dist/services/client.js.map +0 -1
  97. package/dist/services/index.js +0 -19
  98. package/dist/services/index.js.map +0 -1
  99. package/dist/services/worker/identity.js.map +0 -1
  100. package/dist/services/worker/index.js +0 -18
  101. package/dist/services/worker/index.js.map +0 -1
  102. package/dist/services/worker.js.map +0 -1
  103. package/dist/services/workerHealth.js.map +0 -1
  104. package/dist/testing.js.map +0 -1
  105. package/dist/types/activities/index.d.ts +0 -1
  106. package/dist/types/activities/proxy.d.ts +0 -35
  107. package/dist/types/activity.d.ts +0 -1
  108. package/dist/types/cli/checkWorkflowDeterminism.d.ts +0 -19
  109. package/dist/types/cli/determinism/errorClassifier.d.ts +0 -15
  110. package/dist/types/cli/determinism/historyFiles.d.ts +0 -18
  111. package/dist/types/cli/determinism/index.d.ts +0 -10
  112. package/dist/types/cli/determinism/replayExecutor.d.ts +0 -9
  113. package/dist/types/cli/determinism/replayOptions.d.ts +0 -7
  114. package/dist/types/cli/determinism/report.d.ts +0 -16
  115. package/dist/types/cli/determinism/reportPrinter.d.ts +0 -5
  116. package/dist/types/cli/determinism/types.d.ts +0 -44
  117. package/dist/types/cli/index.d.ts +0 -2
  118. package/dist/types/cli/syncTemporalSchedules.d.ts +0 -12
  119. package/dist/types/cli/updateTemporalSchedule.d.ts +0 -9
  120. package/dist/types/client.d.ts +0 -2
  121. package/dist/types/common.d.ts +0 -1
  122. package/dist/types/encryption/crypto.d.ts +0 -3
  123. package/dist/types/encryption/dataConverter.d.ts +0 -3
  124. package/dist/types/encryption/encryptionCodec.d.ts +0 -27
  125. package/dist/types/encryption/index.d.ts +0 -3
  126. package/dist/types/index.d.ts +0 -3
  127. package/dist/types/instrumentation.d.ts +0 -2
  128. package/dist/types/interceptors/asyncLocalStorageBridge.d.ts +0 -21
  129. package/dist/types/interceptors/index.d.ts +0 -2
  130. package/dist/types/interceptors/traceLogAttributes.d.ts +0 -2
  131. package/dist/types/interceptors.d.ts +0 -2
  132. package/dist/types/interfaces/config.d.ts +0 -38
  133. package/dist/types/interfaces/index.d.ts +0 -1
  134. package/dist/types/interfaces/services/worker.d.ts +0 -37
  135. package/dist/types/operations.d.ts +0 -5
  136. package/dist/types/services/client.d.ts +0 -20
  137. package/dist/types/services/index.d.ts +0 -2
  138. package/dist/types/services/worker/identity.d.ts +0 -1
  139. package/dist/types/services/worker/index.d.ts +0 -1
  140. package/dist/types/services/worker.d.ts +0 -113
  141. package/dist/types/services/workerHealth.d.ts +0 -11
  142. package/dist/types/testing.d.ts +0 -42
  143. package/dist/types/worker.d.ts +0 -3
  144. package/dist/worker.js.map +0 -1
@@ -1,125 +1,109 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
1
+ import { decrypt, encrypt } from "./crypto.js";
2
+ import temporalProto from "@temporalio/proto";
3
+ import { webcrypto } from "node:crypto";
4
+ import { METADATA_ENCODING_KEY, ValueError } from "@temporalio/common";
5
+ import { decode, encode } from "@temporalio/common/lib/encoding.js";
6
+ import { DiiaLogger } from "@diia-inhouse/diia-logger";
7
+ //#region src/encryption/encryptionCodec.ts
8
+ const { temporal } = temporalProto;
9
+ var EncryptionCodec = class EncryptionCodec {
10
+ keys;
11
+ defaultKeyId;
12
+ envService;
13
+ logger;
14
+ batchSize;
15
+ encoding = "binary/encrypted";
16
+ metadataEncryptionKeyId = "encryption-key-id";
17
+ constructor(keys, defaultKeyId, envService, logger, options = {}) {
18
+ this.keys = keys;
19
+ this.defaultKeyId = defaultKeyId;
20
+ this.envService = envService;
21
+ this.logger = logger;
22
+ this.batchSize = options.batchSize ?? 50;
23
+ }
24
+ static async create(keyId, envService, options, logger = new DiiaLogger()) {
25
+ const storedKeys = /* @__PURE__ */ new Map();
26
+ const { vaultEnabled } = options;
27
+ if (!vaultEnabled) {
28
+ logger.info("Vault is disabled, extracting static keys from env for Temporal encryption");
29
+ const keys = JSON.parse(keyId);
30
+ for (const [fullKeyName, key] of Object.entries(keys)) storedKeys.set(fullKeyName, await EncryptionCodec.createCryptoKey(key));
31
+ const defaultKey = Object.keys(keys).toSorted((a, b) => {
32
+ const versionA = Number.parseInt(a.split("/").at(-1) || "0");
33
+ return Number.parseInt(b.split("/").at(-1) || "0") - versionA;
34
+ })[0];
35
+ return new this(storedKeys, defaultKey, envService, logger, options);
36
+ }
37
+ const { fullKeyName, key } = await envService.getTransitKey(keyId, { keyVersion: "latest" });
38
+ storedKeys.set(fullKeyName, await EncryptionCodec.createCryptoKey(key));
39
+ return new this(storedKeys, fullKeyName, envService, logger, options);
40
+ }
41
+ static async createCryptoKey(key) {
42
+ try {
43
+ const keyBuffer = Buffer.from(key, "base64");
44
+ return await webcrypto.subtle.importKey("raw", keyBuffer, {
45
+ name: "AES-GCM",
46
+ length: 256
47
+ }, true, ["encrypt", "decrypt"]);
48
+ } catch (err) {
49
+ throw new Error(`Failed to create crypto key: ${err.message}`, { cause: err });
50
+ }
51
+ }
52
+ async refreshDefaultKey() {
53
+ const { name: keyId } = this.splitKeyId(this.defaultKeyId);
54
+ const { fullKeyName, key } = await this.envService.getTransitKey(keyId, { keyVersion: "latest" });
55
+ if (!this.keys.has(fullKeyName)) {
56
+ const newKey = await EncryptionCodec.createCryptoKey(key);
57
+ this.keys.set(fullKeyName, newKey);
58
+ this.defaultKeyId = fullKeyName;
59
+ }
60
+ }
61
+ async encode(payloads) {
62
+ return await this.processBatch(payloads, async (payload) => ({
63
+ metadata: {
64
+ [METADATA_ENCODING_KEY]: encode(this.encoding),
65
+ [this.metadataEncryptionKeyId]: encode(this.defaultKeyId)
66
+ },
67
+ data: await encrypt(temporal.api.common.v1.Payload.encode(payload).finish(), this.keys.get(this.defaultKeyId))
68
+ }));
69
+ }
70
+ async decode(payloads) {
71
+ return await this.processBatch(payloads, async (payload) => {
72
+ if (!payload.metadata || decode(payload.metadata[METADATA_ENCODING_KEY]) !== this.encoding) return payload;
73
+ if (!payload.data) throw new ValueError("Payload data is missing");
74
+ const keyIdBytes = payload.metadata[this.metadataEncryptionKeyId];
75
+ if (!keyIdBytes) throw new ValueError("Unable to decrypt Payload without encryption key id");
76
+ const keyId = decode(keyIdBytes);
77
+ let key = this.keys.get(keyId);
78
+ if (!key) {
79
+ const { name, version } = this.splitKeyId(keyId);
80
+ const { key: rawKey } = await this.envService.getTransitKey(name, { keyVersion: version });
81
+ this.logger.info(`Decryption key ${keyId} not found in cache, fetched from vault`);
82
+ key = await EncryptionCodec.createCryptoKey(rawKey);
83
+ this.keys.set(keyId, key);
84
+ }
85
+ const decryptedPayloadBytes = await decrypt(payload.data, key);
86
+ return temporal.api.common.v1.Payload.decode(decryptedPayloadBytes);
87
+ });
88
+ }
89
+ async processBatch(items, processor) {
90
+ const results = [];
91
+ for (let i = 0; i < items.length; i += this.batchSize) {
92
+ const batchPromises = items.slice(i, i + this.batchSize).map(processor);
93
+ const batchResults = await Promise.all(batchPromises);
94
+ results.push(...batchResults);
95
+ }
96
+ return results;
97
+ }
98
+ splitKeyId(fullKeyId) {
99
+ const name = fullKeyId.split("/").slice(0, -1).join("/");
100
+ const version = fullKeyId.split("/").at(-1);
101
+ if (!version || Number.isNaN(Number(version))) throw new Error(`Invalid key ID: ${fullKeyId}. Failed to get version`);
102
+ return {
103
+ name,
104
+ version
105
+ };
106
+ }
4
107
  };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.EncryptionCodec = void 0;
7
- const node_crypto_1 = require("node:crypto");
8
- const common_1 = require("@temporalio/common");
9
- const encoding_1 = require("@temporalio/common/lib/encoding");
10
- const proto_1 = require("@temporalio/proto");
11
- const diia_logger_1 = __importDefault(require("@diia-inhouse/diia-logger"));
12
- const crypto_1 = require("./crypto");
13
- class EncryptionCodec {
14
- keys;
15
- defaultKeyId;
16
- envService;
17
- logger;
18
- batchSize;
19
- encoding = 'binary/encrypted';
20
- metadataEncryptionKeyId = 'encryption-key-id';
21
- constructor(keys, defaultKeyId, envService, logger, options = {}) {
22
- this.keys = keys;
23
- this.defaultKeyId = defaultKeyId;
24
- this.envService = envService;
25
- this.logger = logger;
26
- this.batchSize = options.batchSize ?? 50;
27
- this.defaultKeyId = defaultKeyId;
28
- }
29
- static async create(keyId, envService, options, logger = new diia_logger_1.default()) {
30
- const storedKeys = new Map();
31
- const { vaultEnabled } = options;
32
- if (!vaultEnabled) {
33
- logger.info('Vault is disabled, extracting static keys from env for Temporal encryption');
34
- const keys = JSON.parse(keyId);
35
- for (const [fullKeyName, key] of Object.entries(keys)) {
36
- storedKeys.set(fullKeyName, await EncryptionCodec.createCryptoKey(key));
37
- }
38
- const defaultKey = Object.keys(keys).toSorted((a, b) => {
39
- const versionA = Number.parseInt(a.split('/').at(-1) || '0');
40
- const versionB = Number.parseInt(b.split('/').at(-1) || '0');
41
- return versionB - versionA;
42
- })[0];
43
- return new this(storedKeys, defaultKey, envService, logger, options);
44
- }
45
- const { fullKeyName, key } = await envService.getTransitKey(keyId, { keyVersion: 'latest' });
46
- storedKeys.set(fullKeyName, await EncryptionCodec.createCryptoKey(key));
47
- return new this(storedKeys, fullKeyName, envService, logger, options);
48
- }
49
- static async createCryptoKey(key) {
50
- try {
51
- const keyBuffer = Buffer.from(key, 'base64');
52
- const cryptoKey = await node_crypto_1.webcrypto.subtle.importKey('raw', keyBuffer, {
53
- name: 'AES-GCM',
54
- length: 256,
55
- }, true, ['encrypt', 'decrypt']);
56
- return cryptoKey;
57
- }
58
- catch (err) {
59
- throw new Error(`Failed to create crypto key: ${err.message}`);
60
- }
61
- }
62
- async refreshDefaultKey() {
63
- const { name: keyId } = this.splitKeyId(this.defaultKeyId);
64
- const { fullKeyName, key } = await this.envService.getTransitKey(keyId, { keyVersion: 'latest' });
65
- if (!this.keys.has(fullKeyName)) {
66
- const newKey = await EncryptionCodec.createCryptoKey(key);
67
- this.keys.set(fullKeyName, newKey);
68
- this.defaultKeyId = fullKeyName;
69
- }
70
- }
71
- async encode(payloads) {
72
- return await this.processBatch(payloads, async (payload) => ({
73
- metadata: {
74
- [common_1.METADATA_ENCODING_KEY]: (0, encoding_1.encode)(this.encoding),
75
- [this.metadataEncryptionKeyId]: (0, encoding_1.encode)(this.defaultKeyId),
76
- },
77
- data: await (0, crypto_1.encrypt)(proto_1.temporal.api.common.v1.Payload.encode(payload).finish(), this.keys.get(this.defaultKeyId)),
78
- }));
79
- }
80
- async decode(payloads) {
81
- return await this.processBatch(payloads, async (payload) => {
82
- if (!payload.metadata || (0, encoding_1.decode)(payload.metadata[common_1.METADATA_ENCODING_KEY]) !== this.encoding) {
83
- return payload;
84
- }
85
- if (!payload.data) {
86
- throw new common_1.ValueError('Payload data is missing');
87
- }
88
- const keyIdBytes = payload.metadata[this.metadataEncryptionKeyId];
89
- if (!keyIdBytes) {
90
- throw new common_1.ValueError('Unable to decrypt Payload without encryption key id');
91
- }
92
- const keyId = (0, encoding_1.decode)(keyIdBytes);
93
- let key = this.keys.get(keyId);
94
- if (!key) {
95
- const { name, version } = this.splitKeyId(keyId);
96
- const { key: rawKey } = await this.envService.getTransitKey(name, { keyVersion: version });
97
- this.logger.info(`Decryption key ${keyId} not found in cache, fetched from vault`);
98
- key = await EncryptionCodec.createCryptoKey(rawKey);
99
- this.keys.set(keyId, key);
100
- }
101
- const decryptedPayloadBytes = await (0, crypto_1.decrypt)(payload.data, key);
102
- return proto_1.temporal.api.common.v1.Payload.decode(decryptedPayloadBytes);
103
- });
104
- }
105
- async processBatch(items, processor) {
106
- const results = [];
107
- for (let i = 0; i < items.length; i += this.batchSize) {
108
- const batch = items.slice(i, i + this.batchSize);
109
- const batchPromises = batch.map(processor);
110
- const batchResults = await Promise.all(batchPromises);
111
- results.push(...batchResults);
112
- }
113
- return results;
114
- }
115
- splitKeyId(fullKeyId) {
116
- const name = fullKeyId.split('/').slice(0, -1).join('/');
117
- const version = fullKeyId.split('/').at(-1);
118
- if (!version || Number.isNaN(Number(version))) {
119
- throw new Error(`Invalid key ID: ${fullKeyId}. Failed to get version`);
120
- }
121
- return { name, version };
122
- }
123
- }
124
- exports.EncryptionCodec = EncryptionCodec;
125
- //# sourceMappingURL=encryptionCodec.js.map
108
+ //#endregion
109
+ export { EncryptionCodec };
@@ -0,0 +1,3 @@
1
+ import { getDataConverter } from "./dataConverter.js";
2
+ import { EncryptionCodec } from "./encryptionCodec.js";
3
+ import { decrypt, encrypt } from "./crypto.js";
@@ -1,20 +1,4 @@
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("./dataConverter"), exports);
18
- __exportStar(require("./encryptionCodec"), exports);
19
- __exportStar(require("./crypto"), exports);
20
- //# sourceMappingURL=index.js.map
1
+ import "./crypto.js";
2
+ import "./encryptionCodec.js";
3
+ import "./dataConverter.js";
4
+ export {};
@@ -0,0 +1,7 @@
1
+ import { SchedulesExporterConfig } from "./interfaces/services/schedulesExporter.js";
2
+ import { TemporalConfig } from "./interfaces/config.js";
3
+ import { getDataConverter } from "./encryption/dataConverter.js";
4
+ import { EncryptionCodec } from "./encryption/encryptionCodec.js";
5
+ import { decrypt, encrypt } from "./encryption/crypto.js";
6
+ import * as proto from "@temporalio/proto";
7
+ export { EncryptionCodec, type SchedulesExporterConfig, type TemporalConfig, decrypt, encrypt, getDataConverter, proto };
package/dist/index.js CHANGED
@@ -1,42 +1,6 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
36
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.proto = void 0;
40
- exports.proto = __importStar(require("@temporalio/proto"));
41
- __exportStar(require("./encryption"), exports);
42
- //# sourceMappingURL=index.js.map
1
+ import { decrypt, encrypt } from "./encryption/crypto.js";
2
+ import { EncryptionCodec } from "./encryption/encryptionCodec.js";
3
+ import { getDataConverter } from "./encryption/dataConverter.js";
4
+ import "./encryption/index.js";
5
+ import * as proto from "@temporalio/proto";
6
+ export { EncryptionCodec, decrypt, encrypt, getDataConverter, proto };
@@ -1,10 +1,6 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.traceExporter = void 0;
4
- const exporter_trace_otlp_grpc_1 = require("@opentelemetry/exporter-trace-otlp-grpc");
5
- const env_1 = require("@diia-inhouse/env");
6
- exports.traceExporter = new exporter_trace_otlp_grpc_1.OTLPTraceExporter({
7
- url: env_1.EnvService.getVar('TRACING_EXPORTER_URL', 'string', 'http://localhost:4317') ||
8
- 'http://opentelemetry-collector.tracing.svc.cluster.local:4317',
9
- });
10
- //# sourceMappingURL=instrumentation.js.map
1
+ import { EnvService } from "@diia-inhouse/env";
2
+ import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-grpc";
3
+ //#region src/instrumentation.ts
4
+ const traceExporter = new OTLPTraceExporter({ url: EnvService.getVar("TRACING_EXPORTER_URL", "string", "http://localhost:4317") || "http://opentelemetry-collector.tracing.svc.cluster.local:4317" });
5
+ //#endregion
6
+ export { traceExporter };
@@ -1,67 +1,30 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.AsyncLocalStorageBridgeInterceptor = void 0;
37
- const otel = __importStar(require("@opentelemetry/api"));
1
+ import * as otel from "@opentelemetry/api";
2
+ //#region src/interceptors/asyncLocalStorageBridge.ts
38
3
  /**
39
- * Bridges OpenTelemetry trace context to AsyncLocalStorage for Temporal activities.
40
- *
41
- * Extracts trace_id from OpenTelemetry span and injects it into AsyncLocalStorage,
42
- * making it available to services.
43
- *
44
- * @example
45
- * // In a service called from an activity:
46
- * const traceId = this.asyncLocalStorage.getStore()?.logData?.traceId
47
- */
48
- class AsyncLocalStorageBridgeInterceptor {
49
- ctx;
50
- asyncLocalStorage;
51
- logger;
52
- constructor(ctx, asyncLocalStorage, logger) {
53
- this.ctx = ctx;
54
- this.asyncLocalStorage = asyncLocalStorage;
55
- this.logger = logger;
56
- }
57
- async execute(input, next) {
58
- const span = otel.trace.getSpan(otel.context.active());
59
- const spanContext = span?.spanContext();
60
- const traceId = spanContext && otel.isSpanContextValid(spanContext) ? spanContext.traceId : undefined;
61
- const logData = this.logger.prepareContext({ traceId });
62
- const alsData = { logData };
63
- return await this.asyncLocalStorage.run(alsData, async () => await next(input));
64
- }
65
- }
66
- exports.AsyncLocalStorageBridgeInterceptor = AsyncLocalStorageBridgeInterceptor;
67
- //# sourceMappingURL=asyncLocalStorageBridge.js.map
4
+ * Bridges OpenTelemetry trace context to AsyncLocalStorage for Temporal activities.
5
+ *
6
+ * Extracts trace_id from OpenTelemetry span and injects it into AsyncLocalStorage,
7
+ * making it available to services.
8
+ *
9
+ * @example
10
+ * // In a service called from an activity:
11
+ * const traceId = this.asyncLocalStorage.getStore()?.logData?.traceId
12
+ */
13
+ var AsyncLocalStorageBridgeInterceptor = class {
14
+ ctx;
15
+ asyncLocalStorage;
16
+ logger;
17
+ constructor(ctx, asyncLocalStorage, logger) {
18
+ this.ctx = ctx;
19
+ this.asyncLocalStorage = asyncLocalStorage;
20
+ this.logger = logger;
21
+ }
22
+ async execute(input, next) {
23
+ const spanContext = otel.trace.getSpan(otel.context.active())?.spanContext();
24
+ const traceId = spanContext && otel.isSpanContextValid(spanContext) ? spanContext.traceId : void 0;
25
+ const alsData = { logData: this.logger.prepareContext({ traceId }) };
26
+ return await this.asyncLocalStorage.run(alsData, async () => await next(input));
27
+ }
28
+ };
29
+ //#endregion
30
+ export { AsyncLocalStorageBridgeInterceptor };
@@ -0,0 +1,6 @@
1
+ import { WorkflowInterceptorsFactory } from "@temporalio/workflow";
2
+
3
+ //#region src/interceptors/traceLogAttributes.d.ts
4
+ declare const interceptors: WorkflowInterceptorsFactory;
5
+ //#endregion
6
+ export { interceptors };
@@ -1,55 +1,17 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.interceptors = void 0;
37
- const otel = __importStar(require("@opentelemetry/api"));
1
+ import * as otel from "@opentelemetry/api";
2
+ //#region src/interceptors/traceLogAttributes.ts
38
3
  /** Injects traceId and spanId from OpenTelemetry into workflow log attributes. */
39
- class TraceLogAttributesInterceptor {
40
- getLogAttributes(input, next) {
41
- const attrs = next(input);
42
- const span = otel.trace.getSpan(otel.context.active());
43
- const spanContext = span?.spanContext();
44
- if (spanContext && otel.isSpanContextValid(spanContext)) {
45
- attrs.traceId = spanContext.traceId;
46
- attrs.spanId = spanContext.spanId;
47
- }
48
- return attrs;
49
- }
50
- }
51
- const interceptors = () => ({
52
- outbound: [new TraceLogAttributesInterceptor()],
53
- });
54
- exports.interceptors = interceptors;
55
- //# sourceMappingURL=traceLogAttributes.js.map
4
+ var TraceLogAttributesInterceptor = class {
5
+ getLogAttributes(input, next) {
6
+ const attrs = next(input);
7
+ const spanContext = otel.trace.getSpan(otel.context.active())?.spanContext();
8
+ if (spanContext && otel.isSpanContextValid(spanContext)) {
9
+ attrs.traceId = spanContext.traceId;
10
+ attrs.spanId = spanContext.spanId;
11
+ }
12
+ return attrs;
13
+ }
14
+ };
15
+ const interceptors = () => ({ outbound: [new TraceLogAttributesInterceptor()] });
16
+ //#endregion
17
+ export { interceptors };
@@ -0,0 +1,6 @@
1
+ import { WorkflowInterceptorsFactory } from "@temporalio/workflow";
2
+
3
+ //#region src/interceptors.d.ts
4
+ declare const workflowInterceptors: WorkflowInterceptorsFactory;
5
+ //#endregion
6
+ export { workflowInterceptors };
@@ -1,10 +1,8 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.workflowInterceptors = void 0;
4
- const interceptors_opentelemetry_1 = require("@temporalio/interceptors-opentelemetry");
1
+ import { OpenTelemetryInboundInterceptor, OpenTelemetryOutboundInterceptor } from "@temporalio/interceptors-opentelemetry";
2
+ //#region src/interceptors.ts
5
3
  const workflowInterceptors = () => ({
6
- inbound: [new interceptors_opentelemetry_1.OpenTelemetryInboundInterceptor()],
7
- outbound: [new interceptors_opentelemetry_1.OpenTelemetryOutboundInterceptor()],
4
+ inbound: [new OpenTelemetryInboundInterceptor()],
5
+ outbound: [new OpenTelemetryOutboundInterceptor()]
8
6
  });
9
- exports.workflowInterceptors = workflowInterceptors;
10
- //# sourceMappingURL=interceptors.js.map
7
+ //#endregion
8
+ export { workflowInterceptors };
@@ -0,0 +1,58 @@
1
+ import { SchedulesExporterConfig } from "./services/schedulesExporter.js";
2
+ import { ClientOptions, ConnectionOptions } from "@temporalio/client";
3
+ import { MetricsConfig } from "@diia-inhouse/diia-metrics";
4
+ import { QueueConnectionConfig } from "@diia-inhouse/diia-queue";
5
+
6
+ //#region src/interfaces/config.d.ts
7
+ interface TemporalConfig extends Omit<ClientOptions, "dataConverter"> {
8
+ taskQueue: string;
9
+ encryptionEnabled: boolean;
10
+ encryptionKeyId: string;
11
+ encryptionKeyRefreshInterval?: number;
12
+ address?: string;
13
+ tls?: ConnectionOptions["tls"];
14
+ connectTimeout?: ConnectionOptions["connectTimeout"];
15
+ /**
16
+ * Controls whether the Temporal worker runs in the same process as the service.
17
+ *
18
+ * - `true` (default): Worker is bootstrapped together with the service in the same process.
19
+ * - `false`: Service starts without bootstrapping the worker. The worker should be run
20
+ * as a separate process using `bootstrapWorker()`.
21
+ *
22
+ * This is configured at the service level to enable flexible deployment topologies
23
+ * where workers can be scaled independently from the main service.
24
+ */
25
+ workerInProcess?: boolean;
26
+ /**
27
+ * Whether to disable message queue consumers when running as a separate worker process.
28
+ * Applies to all queue connection types (internal, external, etc.).
29
+ *
30
+ * Defaults to `true` when `bootstrapWorker` manages the full application lifecycle
31
+ * (i.e. when `configFactory` and `deps` are provided).
32
+ */
33
+ disableQueueConsumers?: boolean;
34
+ /**
35
+ * Controls the SchedulesExporter, which polls Temporal Schedule and Visibility APIs and
36
+ * emits per-schedule + in-flight workflow gauges (`diia_schedule_*`, `diia_workflows_running`,
37
+ * etc.). Auto-started by `bootstrapWorker` / `initTemporalWorker` — services do not need
38
+ * to instantiate it themselves.
39
+ *
40
+ * Runs only in the worker process: when `workerInProcess === false` and the service is
41
+ * started without `bootstrapWorker`'s lifecycle path, the exporter is skipped (the worker
42
+ * process owns it).
43
+ *
44
+ * - Omit (default) — exporter starts with the defaults in `SchedulesExporterConfig`.
45
+ * - `false` — disable the exporter entirely (e.g. for clusters without advanced visibility).
46
+ * - Object — override polling intervals or other knobs. See `SchedulesExporterConfig`.
47
+ */
48
+ schedulesExporter?: SchedulesExporterConfig | false;
49
+ }
50
+ interface AppConfig {
51
+ temporal: TemporalConfig;
52
+ metrics: {
53
+ custom: MetricsConfig;
54
+ };
55
+ rabbit?: QueueConnectionConfig;
56
+ }
57
+ //#endregion
58
+ export { AppConfig, TemporalConfig };
@@ -0,0 +1 @@
1
+ import { AppConfig, TemporalConfig } from "./config.js";