@twin.org/node-core 0.10.1-next.3 → 0.10.1-next.5

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.
@@ -1,4 +1,5 @@
1
- import { Converter, RandomHelper, StringHelper } from "@twin.org/core";
1
+ import { Converter, GeneralError, JsonHelper, ObjectHelper, StringHelper } from "@twin.org/core";
2
+ import { Blake2b } from "@twin.org/crypto";
2
3
  import { EntityStorageConnectorFactory, SchemaMigrationFactory } from "@twin.org/entity-storage-models";
3
4
  import { envBoolean } from "./envHelpers.js";
4
5
  /**
@@ -37,43 +38,33 @@ function migrationAigIndexes() {
37
38
  return;
38
39
  }
39
40
  aigIndexEntityStorage ??= EntityStorageConnectorFactory.get(StringHelper.kebabCase("AuditableItemGraphVertexIndex"));
40
- await aigIndexEntityStorage.set({
41
- id: Converter.bytesToHex(RandomHelper.generate(16)),
42
- vertexId: entity.id,
43
- type: "vertex",
44
- value: entity.id.toLowerCase(),
45
- dateCreated: entity.dateCreated,
46
- dateModified: entity.dateModified ?? entity.dateCreated
47
- });
48
- // The context ids already contain the correct partition information for the indexes.
41
+ const values = [
42
+ { type: "vertex", value: entity.id.toLowerCase() }
43
+ ];
49
44
  const aliases = entity.aliasIndex
50
45
  ?.split("||")
51
46
  .map(alias => alias.trim())
52
47
  .filter(alias => alias.length > 0) ?? [];
53
48
  for (const alias of aliases) {
54
- await aigIndexEntityStorage.set({
55
- id: Converter.bytesToHex(RandomHelper.generate(16)),
56
- vertexId: entity.id,
57
- type: "alias",
58
- value: alias.toLowerCase(),
59
- dateCreated: entity.dateCreated,
60
- dateModified: entity.dateModified ?? entity.dateCreated
61
- });
49
+ values.push({ type: "alias", value: alias.toLowerCase() });
62
50
  }
63
51
  const resourceTypes = entity.resourceTypeIndex
64
52
  ?.split("||")
65
53
  .map(resourceType => resourceType.trim())
66
54
  .filter(resourceType => resourceType.length > 0) ?? [];
67
55
  for (const resourceType of resourceTypes) {
68
- await aigIndexEntityStorage.set({
69
- id: Converter.bytesToHex(RandomHelper.generate(16)),
70
- vertexId: entity.id,
71
- type: "resourceType",
72
- value: resourceType.toLowerCase(),
73
- dateCreated: entity.dateCreated,
74
- dateModified: entity.dateModified ?? entity.dateCreated
75
- });
56
+ values.push({ type: "resourceType", value: resourceType.toLowerCase() });
76
57
  }
58
+ // The context ids already contain the correct partition information for the indexes.
59
+ const entries = values.map(({ type, value }) => ({
60
+ id: indexRowId({ vertexId: entity.id, type, value }),
61
+ vertexId: entity.id,
62
+ type,
63
+ value,
64
+ dateCreated: entity.dateCreated,
65
+ dateModified: entity.dateModified ?? entity.dateCreated
66
+ }));
67
+ await writeIndexEntries(aigIndexEntityStorage, entries, entity.id);
77
68
  }
78
69
  };
79
70
  SchemaMigrationFactory.register(`${"AuditableItemGraphVertex"}_1_2`, () => migrationAigV1V2);
@@ -108,7 +99,7 @@ function migrationPapIndexes() {
108
99
  for (const target of targets) {
109
100
  for (const action of actions) {
110
101
  entries.push({
111
- id: Converter.bytesToHex(RandomHelper.generate(16)),
102
+ id: indexRowId({ policyId: entity.id, assigner, assignee, target, action }),
112
103
  policyId: entity.id,
113
104
  assigner,
114
105
  assignee,
@@ -121,7 +112,7 @@ function migrationPapIndexes() {
121
112
  }
122
113
  }
123
114
  // The context ids already contain the correct partition information for the indexes.
124
- await papIndexEntityStorage.setBatch(entries);
115
+ await writeIndexEntries(papIndexEntityStorage, entries, entity.id);
125
116
  }
126
117
  };
127
118
  SchemaMigrationFactory.register(`${"OdrlPolicy"}_0_1`, () => migrationPapV0V1);
@@ -142,4 +133,27 @@ function splitPolicyIndex(index) {
142
133
  }
143
134
  return values.length === 0 ? [undefined] : values;
144
135
  }
136
+ /**
137
+ * Build the id of an index row from the values which identify it, so a repeated migration
138
+ * writes the same row instead of a duplicate.
139
+ * @param identity The owner id and the index values of the row.
140
+ * @returns The hex encoded hash.
141
+ */
142
+ function indexRowId(identity) {
143
+ return Converter.bytesToHex(Blake2b.sum256(ObjectHelper.toBytes(JsonHelper.canonicalize(identity))));
144
+ }
145
+ /**
146
+ * Write the index rows of one entity, naming the entity when a row cannot be written.
147
+ * @param indexEntityStorage The index storage to write to.
148
+ * @param entries The rows to write.
149
+ * @param id The id of the entity the rows belong to.
150
+ */
151
+ async function writeIndexEntries(indexEntityStorage, entries, id) {
152
+ try {
153
+ await indexEntityStorage.setBatch(entries);
154
+ }
155
+ catch (error) {
156
+ throw new GeneralError("node", "migrationIndexWriteFailed", { id }, error);
157
+ }
158
+ }
145
159
  //# sourceMappingURL=migrationHelper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"migrationHelper.js","sourceRoot":"","sources":["../../../../src/builders/helper/migrationHelper.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2026 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type {\n\tAuditableItemGraphVertex,\n\tAuditableItemGraphVertexIndex,\n\tAuditableItemGraphVertexV1\n} from \"@twin.org/auditable-item-graph-service\";\nimport { Converter, RandomHelper, StringHelper } from \"@twin.org/core\";\nimport type { IEngineCore } from \"@twin.org/engine-models\";\nimport type { IEntitySchemaProperty } from \"@twin.org/entity\";\nimport {\n\tEntityStorageConnectorFactory,\n\tSchemaMigrationFactory,\n\ttype IEntityStorageConnector,\n\ttype ISchemaMigration\n} from \"@twin.org/entity-storage-models\";\nimport { nameof } from \"@twin.org/nameof\";\nimport type {\n\tOdrlPolicy,\n\tOdrlPolicyIndex,\n\tOdrlPolicyV0\n} from \"@twin.org/rights-management-pap-service\";\nimport { envBoolean } from \"./envHelpers.js\";\nimport type { IEnvironmentVariables } from \"../../models/IEnvironmentVariables.js\";\n\n/**\n * Initialise schema migrations for the engine.\n * @param engineCore The engine core instance.\n * @param envVars The environment variables.\n */\nexport function initialiseMigrations(\n\tengineCore: IEngineCore,\n\tenvVars: IEnvironmentVariables\n): void {\n\tif (!envBoolean(envVars, \"schemaMigrationEnabled\", true)) {\n\t\treturn;\n\t}\n\n\tmigrationAigIndexes();\n\tmigrationPapIndexes();\n}\n\n/**\n * Finalize schema migrations by clearing any temporary data stored in the shared store.\n * This should be called after all migrations have been processed to ensure that\n * any temporary data used during the migration process is removed.\n * @param engineCore The engine core instance.\n * @param envVars The environment variables.\n */\nexport async function finalizeMigrations(\n\tengineCore: IEngineCore,\n\tenvVars: IEnvironmentVariables\n): Promise<void> {\n\t// This is currently a placeholder for any finalization logic that might be needed\n\t// after all schema migrations have been processed.\n}\n\n/**\n * Perform migrations for Auditable Item Graph indexes.\n */\nfunction migrationAigIndexes(): void {\n\tlet aigIndexEntityStorage: IEntityStorageConnector<AuditableItemGraphVertexIndex> | undefined;\n\n\tconst migrationAigV1V2: ISchemaMigration<AuditableItemGraphVertexV1, AuditableItemGraphVertex> = {\n\t\tremoveEntityProperty: async (\n\t\t\tentity: AuditableItemGraphVertexV1,\n\t\t\tremovedProperties: IEntitySchemaProperty<AuditableItemGraphVertexV1>[]\n\t\t): Promise<void> => {\n\t\t\t// If the aliasIndex is being removed we should migrate both aliasIndex and resourceTypeIndex\n\t\t\t// to the new index structure.\n\t\t\tif (removedProperties.find(prop => prop.property === \"aliasIndex\") === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\taigIndexEntityStorage ??= EntityStorageConnectorFactory.get<\n\t\t\t\tIEntityStorageConnector<AuditableItemGraphVertexIndex>\n\t\t\t>(StringHelper.kebabCase(nameof<AuditableItemGraphVertexIndex>()));\n\n\t\t\tawait aigIndexEntityStorage.set({\n\t\t\t\tid: Converter.bytesToHex(RandomHelper.generate(16)),\n\t\t\t\tvertexId: entity.id,\n\t\t\t\ttype: \"vertex\",\n\t\t\t\tvalue: entity.id.toLowerCase(),\n\t\t\t\tdateCreated: entity.dateCreated,\n\t\t\t\tdateModified: entity.dateModified ?? entity.dateCreated\n\t\t\t});\n\n\t\t\t// The context ids already contain the correct partition information for the indexes.\n\t\t\tconst aliases: string[] =\n\t\t\t\tentity.aliasIndex\n\t\t\t\t\t?.split(\"||\")\n\t\t\t\t\t.map(alias => alias.trim())\n\t\t\t\t\t.filter(alias => alias.length > 0) ?? [];\n\n\t\t\tfor (const alias of aliases) {\n\t\t\t\tawait aigIndexEntityStorage.set({\n\t\t\t\t\tid: Converter.bytesToHex(RandomHelper.generate(16)),\n\t\t\t\t\tvertexId: entity.id,\n\t\t\t\t\ttype: \"alias\",\n\t\t\t\t\tvalue: alias.toLowerCase(),\n\t\t\t\t\tdateCreated: entity.dateCreated,\n\t\t\t\t\tdateModified: entity.dateModified ?? entity.dateCreated\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst resourceTypes: string[] =\n\t\t\t\tentity.resourceTypeIndex\n\t\t\t\t\t?.split(\"||\")\n\t\t\t\t\t.map(resourceType => resourceType.trim())\n\t\t\t\t\t.filter(resourceType => resourceType.length > 0) ?? [];\n\n\t\t\tfor (const resourceType of resourceTypes) {\n\t\t\t\tawait aigIndexEntityStorage.set({\n\t\t\t\t\tid: Converter.bytesToHex(RandomHelper.generate(16)),\n\t\t\t\t\tvertexId: entity.id,\n\t\t\t\t\ttype: \"resourceType\",\n\t\t\t\t\tvalue: resourceType.toLowerCase(),\n\t\t\t\t\tdateCreated: entity.dateCreated,\n\t\t\t\t\tdateModified: entity.dateModified ?? entity.dateCreated\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\tSchemaMigrationFactory.register(\n\t\t`${nameof<AuditableItemGraphVertex>()}_1_2`,\n\t\t() => migrationAigV1V2 as ISchemaMigration\n\t);\n}\n\n/**\n * Perform migrations for Policy Administration Point indexes.\n */\nfunction migrationPapIndexes(): void {\n\tlet papIndexEntityStorage: IEntityStorageConnector<OdrlPolicyIndex> | undefined;\n\n\tconst migrationPapV0V1: ISchemaMigration<OdrlPolicyV0, OdrlPolicy> = {\n\t\tremoveEntityProperty: async (\n\t\t\tentity: OdrlPolicyV0,\n\t\t\tremovedProperties: IEntitySchemaProperty<OdrlPolicyV0>[]\n\t\t): Promise<void> => {\n\t\t\t// If the assignerIndex is being removed we should migrate all four of the pipe delimited\n\t\t\t// indexes to the new index structure.\n\t\t\tif (removedProperties.find(prop => prop.property === \"assignerIndex\") === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tpapIndexEntityStorage ??= EntityStorageConnectorFactory.get<\n\t\t\t\tIEntityStorageConnector<OdrlPolicyIndex>\n\t\t\t>(StringHelper.kebabCase(nameof<OdrlPolicyIndex>()));\n\n\t\t\t// An absent dimension contributes a single undefined value, otherwise it would collapse\n\t\t\t// the combinations to none and the policy would not be indexed at all.\n\t\t\tconst assigners = splitPolicyIndex(entity.assignerIndex);\n\t\t\tconst assignees = splitPolicyIndex(entity.assigneeIndex);\n\t\t\tconst targets = splitPolicyIndex(entity.targetIndex);\n\t\t\tconst actions = splitPolicyIndex(entity.actionIndex);\n\n\t\t\t// The entries are ordered by the creation date, so a policy stored before the date was\n\t\t\t// recorded is given the migration time rather than leaving the column empty.\n\t\t\tconst dateCreated = entity.dateCreated ?? new Date(Date.now()).toISOString();\n\n\t\t\t// One entry per combination of assigner, assignee, target and action, which is what lets\n\t\t\t// a locator covering several of those fields be answered by a single lookup.\n\t\t\tconst entries: OdrlPolicyIndex[] = [];\n\t\t\tfor (const assigner of assigners) {\n\t\t\t\tfor (const assignee of assignees) {\n\t\t\t\t\tfor (const target of targets) {\n\t\t\t\t\t\tfor (const action of actions) {\n\t\t\t\t\t\t\tentries.push({\n\t\t\t\t\t\t\t\tid: Converter.bytesToHex(RandomHelper.generate(16)),\n\t\t\t\t\t\t\t\tpolicyId: entity.id,\n\t\t\t\t\t\t\t\tassigner,\n\t\t\t\t\t\t\t\tassignee,\n\t\t\t\t\t\t\t\ttarget,\n\t\t\t\t\t\t\t\taction,\n\t\t\t\t\t\t\t\tdateCreated\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// The context ids already contain the correct partition information for the indexes.\n\t\t\tawait papIndexEntityStorage.setBatch(entries);\n\t\t}\n\t};\n\tSchemaMigrationFactory.register(\n\t\t`${nameof<OdrlPolicy>()}_0_1`,\n\t\t() => migrationPapV0V1 as ISchemaMigration\n\t);\n}\n\n/**\n * Split one of the pipe delimited indexes from a v0 policy into its index dimension values.\n * @param index The pipe delimited index value.\n * @returns The distinct case folded values, or a single undefined when there are none.\n */\nfunction splitPolicyIndex(index: string | undefined): (string | undefined)[] {\n\tconst values: string[] = [];\n\n\tfor (const part of index?.split(\"|\") ?? []) {\n\t\t// Index values are always stored case folded so lookups are case insensitive.\n\t\tconst folded = part.trim().toLowerCase();\n\t\tif (folded.length > 0 && !values.includes(folded)) {\n\t\t\tvalues.push(folded);\n\t\t}\n\t}\n\n\treturn values.length === 0 ? [undefined] : values;\n}\n"]}
1
+ {"version":3,"file":"migrationHelper.js","sourceRoot":"","sources":["../../../../src/builders/helper/migrationHelper.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2026 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type {\n\tAuditableItemGraphVertex,\n\tAuditableItemGraphVertexIndex,\n\tAuditableItemGraphVertexV1\n} from \"@twin.org/auditable-item-graph-service\";\nimport { Converter, GeneralError, JsonHelper, ObjectHelper, StringHelper } from \"@twin.org/core\";\nimport { Blake2b } from \"@twin.org/crypto\";\nimport type { IEngineCore } from \"@twin.org/engine-models\";\nimport type { IEntitySchemaProperty } from \"@twin.org/entity\";\nimport {\n\tEntityStorageConnectorFactory,\n\tSchemaMigrationFactory,\n\ttype IEntityStorageConnector,\n\ttype ISchemaMigration\n} from \"@twin.org/entity-storage-models\";\nimport { nameof } from \"@twin.org/nameof\";\nimport type {\n\tOdrlPolicy,\n\tOdrlPolicyIndex,\n\tOdrlPolicyV0\n} from \"@twin.org/rights-management-pap-service\";\nimport { envBoolean } from \"./envHelpers.js\";\nimport type { IEnvironmentVariables } from \"../../models/IEnvironmentVariables.js\";\n\n/**\n * Initialise schema migrations for the engine.\n * @param engineCore The engine core instance.\n * @param envVars The environment variables.\n */\nexport function initialiseMigrations(\n\tengineCore: IEngineCore,\n\tenvVars: IEnvironmentVariables\n): void {\n\tif (!envBoolean(envVars, \"schemaMigrationEnabled\", true)) {\n\t\treturn;\n\t}\n\n\tmigrationAigIndexes();\n\tmigrationPapIndexes();\n}\n\n/**\n * Finalize schema migrations by clearing any temporary data stored in the shared store.\n * This should be called after all migrations have been processed to ensure that\n * any temporary data used during the migration process is removed.\n * @param engineCore The engine core instance.\n * @param envVars The environment variables.\n */\nexport async function finalizeMigrations(\n\tengineCore: IEngineCore,\n\tenvVars: IEnvironmentVariables\n): Promise<void> {\n\t// This is currently a placeholder for any finalization logic that might be needed\n\t// after all schema migrations have been processed.\n}\n\n/**\n * Perform migrations for Auditable Item Graph indexes.\n */\nfunction migrationAigIndexes(): void {\n\tlet aigIndexEntityStorage: IEntityStorageConnector<AuditableItemGraphVertexIndex> | undefined;\n\n\tconst migrationAigV1V2: ISchemaMigration<AuditableItemGraphVertexV1, AuditableItemGraphVertex> = {\n\t\tremoveEntityProperty: async (\n\t\t\tentity: AuditableItemGraphVertexV1,\n\t\t\tremovedProperties: IEntitySchemaProperty<AuditableItemGraphVertexV1>[]\n\t\t): Promise<void> => {\n\t\t\t// If the aliasIndex is being removed we should migrate both aliasIndex and resourceTypeIndex\n\t\t\t// to the new index structure.\n\t\t\tif (removedProperties.find(prop => prop.property === \"aliasIndex\") === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\taigIndexEntityStorage ??= EntityStorageConnectorFactory.get<\n\t\t\t\tIEntityStorageConnector<AuditableItemGraphVertexIndex>\n\t\t\t>(StringHelper.kebabCase(nameof<AuditableItemGraphVertexIndex>()));\n\n\t\t\tconst values: { type: string; value: string }[] = [\n\t\t\t\t{ type: \"vertex\", value: entity.id.toLowerCase() }\n\t\t\t];\n\n\t\t\tconst aliases: string[] =\n\t\t\t\tentity.aliasIndex\n\t\t\t\t\t?.split(\"||\")\n\t\t\t\t\t.map(alias => alias.trim())\n\t\t\t\t\t.filter(alias => alias.length > 0) ?? [];\n\n\t\t\tfor (const alias of aliases) {\n\t\t\t\tvalues.push({ type: \"alias\", value: alias.toLowerCase() });\n\t\t\t}\n\n\t\t\tconst resourceTypes: string[] =\n\t\t\t\tentity.resourceTypeIndex\n\t\t\t\t\t?.split(\"||\")\n\t\t\t\t\t.map(resourceType => resourceType.trim())\n\t\t\t\t\t.filter(resourceType => resourceType.length > 0) ?? [];\n\n\t\t\tfor (const resourceType of resourceTypes) {\n\t\t\t\tvalues.push({ type: \"resourceType\", value: resourceType.toLowerCase() });\n\t\t\t}\n\n\t\t\t// The context ids already contain the correct partition information for the indexes.\n\t\t\tconst entries: AuditableItemGraphVertexIndex[] = values.map(({ type, value }) => ({\n\t\t\t\tid: indexRowId({ vertexId: entity.id, type, value }),\n\t\t\t\tvertexId: entity.id,\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t\tdateCreated: entity.dateCreated,\n\t\t\t\tdateModified: entity.dateModified ?? entity.dateCreated\n\t\t\t}));\n\n\t\t\tawait writeIndexEntries(aigIndexEntityStorage, entries, entity.id);\n\t\t}\n\t};\n\tSchemaMigrationFactory.register(\n\t\t`${nameof<AuditableItemGraphVertex>()}_1_2`,\n\t\t() => migrationAigV1V2 as ISchemaMigration\n\t);\n}\n\n/**\n * Perform migrations for Policy Administration Point indexes.\n */\nfunction migrationPapIndexes(): void {\n\tlet papIndexEntityStorage: IEntityStorageConnector<OdrlPolicyIndex> | undefined;\n\n\tconst migrationPapV0V1: ISchemaMigration<OdrlPolicyV0, OdrlPolicy> = {\n\t\tremoveEntityProperty: async (\n\t\t\tentity: OdrlPolicyV0,\n\t\t\tremovedProperties: IEntitySchemaProperty<OdrlPolicyV0>[]\n\t\t): Promise<void> => {\n\t\t\t// If the assignerIndex is being removed we should migrate all four of the pipe delimited\n\t\t\t// indexes to the new index structure.\n\t\t\tif (removedProperties.find(prop => prop.property === \"assignerIndex\") === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tpapIndexEntityStorage ??= EntityStorageConnectorFactory.get<\n\t\t\t\tIEntityStorageConnector<OdrlPolicyIndex>\n\t\t\t>(StringHelper.kebabCase(nameof<OdrlPolicyIndex>()));\n\n\t\t\t// An absent dimension contributes a single undefined value, otherwise it would collapse\n\t\t\t// the combinations to none and the policy would not be indexed at all.\n\t\t\tconst assigners = splitPolicyIndex(entity.assignerIndex);\n\t\t\tconst assignees = splitPolicyIndex(entity.assigneeIndex);\n\t\t\tconst targets = splitPolicyIndex(entity.targetIndex);\n\t\t\tconst actions = splitPolicyIndex(entity.actionIndex);\n\n\t\t\t// The entries are ordered by the creation date, so a policy stored before the date was\n\t\t\t// recorded is given the migration time rather than leaving the column empty.\n\t\t\tconst dateCreated = entity.dateCreated ?? new Date(Date.now()).toISOString();\n\n\t\t\t// One entry per combination of assigner, assignee, target and action, which is what lets\n\t\t\t// a locator covering several of those fields be answered by a single lookup.\n\t\t\tconst entries: OdrlPolicyIndex[] = [];\n\t\t\tfor (const assigner of assigners) {\n\t\t\t\tfor (const assignee of assignees) {\n\t\t\t\t\tfor (const target of targets) {\n\t\t\t\t\t\tfor (const action of actions) {\n\t\t\t\t\t\t\tentries.push({\n\t\t\t\t\t\t\t\tid: indexRowId({ policyId: entity.id, assigner, assignee, target, action }),\n\t\t\t\t\t\t\t\tpolicyId: entity.id,\n\t\t\t\t\t\t\t\tassigner,\n\t\t\t\t\t\t\t\tassignee,\n\t\t\t\t\t\t\t\ttarget,\n\t\t\t\t\t\t\t\taction,\n\t\t\t\t\t\t\t\tdateCreated\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// The context ids already contain the correct partition information for the indexes.\n\t\t\tawait writeIndexEntries(papIndexEntityStorage, entries, entity.id);\n\t\t}\n\t};\n\tSchemaMigrationFactory.register(\n\t\t`${nameof<OdrlPolicy>()}_0_1`,\n\t\t() => migrationPapV0V1 as ISchemaMigration\n\t);\n}\n\n/**\n * Split one of the pipe delimited indexes from a v0 policy into its index dimension values.\n * @param index The pipe delimited index value.\n * @returns The distinct case folded values, or a single undefined when there are none.\n */\nfunction splitPolicyIndex(index: string | undefined): (string | undefined)[] {\n\tconst values: string[] = [];\n\n\tfor (const part of index?.split(\"|\") ?? []) {\n\t\t// Index values are always stored case folded so lookups are case insensitive.\n\t\tconst folded = part.trim().toLowerCase();\n\t\tif (folded.length > 0 && !values.includes(folded)) {\n\t\t\tvalues.push(folded);\n\t\t}\n\t}\n\n\treturn values.length === 0 ? [undefined] : values;\n}\n\n/**\n * Build the id of an index row from the values which identify it, so a repeated migration\n * writes the same row instead of a duplicate.\n * @param identity The owner id and the index values of the row.\n * @returns The hex encoded hash.\n */\nfunction indexRowId(identity: { [id: string]: string | undefined }): string {\n\treturn Converter.bytesToHex(\n\t\tBlake2b.sum256(ObjectHelper.toBytes(JsonHelper.canonicalize(identity)))\n\t);\n}\n\n/**\n * Write the index rows of one entity, naming the entity when a row cannot be written.\n * @param indexEntityStorage The index storage to write to.\n * @param entries The rows to write.\n * @param id The id of the entity the rows belong to.\n */\nasync function writeIndexEntries<T>(\n\tindexEntityStorage: IEntityStorageConnector<T>,\n\tentries: T[],\n\tid: string\n): Promise<void> {\n\ttry {\n\t\tawait indexEntityStorage.setBatch(entries);\n\t} catch (error) {\n\t\tthrow new GeneralError(\"node\", \"migrationIndexWriteFailed\", { id }, error);\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"IEngineEnvironmentVariables.js","sourceRoot":"","sources":["../../../src/models/IEngineEnvironmentVariables.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\n\n/**\n * The engine core environment variables.\n */\nexport interface IEngineEnvironmentVariables {\n\t/**\n\t * Start the engine in debug mode.\n\t */\n\tdebug?: string;\n\n\t/**\n\t * Start the engine in silent mode.\n\t */\n\tsilent?: string;\n\n\t/**\n\t * Controls how unrecognised TWIN_* environment variables are handled at startup.\n\t * \"error\" (default): throws a startup error, allowing CI and production deployments\n\t * to hard-fail on misconfigured or misspelled variable names.\n\t * \"warn\": logs a warning and continues.\n\t * \"ignore\": skips validation entirely.\n\t * Any other value is rejected at startup.\n\t * @default \"error\"\n\t */\n\tstrictEnv?: string;\n\n\t/**\n\t * Comma-separated list of raw environment variable names to exempt from the unknown-key check.\n\t * Use this to allowlist variables introduced by custom extensions that are not part of the\n\t * core interface, e.g. TWIN_MY_EXTENSION_SECRET.\n\t */\n\tenvAllowList?: string;\n\n\t/**\n\t * The root directory for storing items like state file.\n\t */\n\tstorageFileRoot?: string;\n\n\t/**\n\t * The name of the state file.\n\t */\n\tstateFilename?: string;\n\n\t/**\n\t * Is multi-tenant support enabled, defaults to false.\n\t */\n\ttenantEnabled?: string;\n\n\t/**\n\t * Enable schema migration, defaults to true.\n\t */\n\tschemaMigrationEnabled?: string;\n\n\t/**\n\t * The type of the entity storage to create, comma separate for more than one connector.\n\t * values: file, memory, aws-dynamodb, azure-cosmosdb, gcp-firestoredb, scylladb, mysql, mongodb, postgresql\n\t */\n\tentityStorageConnectorType?: string;\n\n\t/**\n\t * The default entity storage connector to use, defaults to the first one in the list.\n\t */\n\tentityStorageConnectorDefault?: string;\n\n\t/**\n\t * A prefix for all the table in entity-storage, can be empty.\n\t */\n\tentityStorageTablePrefix?: string;\n\n\t/**\n\t * AWS DynamoDB auth mode, either credentials or pod.\n\t */\n\tawsDynamodbAuthMode?: string;\n\n\t/**\n\t * AWS Dynamo DB access key id.\n\t */\n\tawsDynamodbAccessKeyId?: string;\n\n\t/**\n\t * AWS Dynamo DB Endpoint if running local instance.\n\t */\n\tawsDynamodbEndpoint?: string;\n\n\t/**\n\t * AWS Dynamo DB region.\n\t */\n\tawsDynamodbRegion?: string;\n\n\t/**\n\t * AWS Dynamo DB secret access key.\n\t */\n\tawsDynamodbSecretAccessKey?: string;\n\n\t/**\n\t * AWS Dynamo DB connection timeout in milliseconds.\n\t */\n\tawsDynamodbConnectionTimeout?: string;\n\n\t/**\n\t * Azure Cosmos DB key.\n\t */\n\tazureCosmosdbKey?: string;\n\n\t/**\n\t * Azure Cosmos DB container id.\n\t */\n\tazureCosmosdbContainerId?: string;\n\n\t/**\n\t * Azure Cosmos DB database id.\n\t */\n\tazureCosmosdbDatabaseId?: string;\n\n\t/**\n\t * Azure Cosmos DB endpoint.\n\t */\n\tazureCosmosdbEndpoint?: string;\n\n\t/**\n\t * GCP Firestore collection name.\n\t */\n\tgcpFirestoreCollectionName?: string;\n\n\t/**\n\t * GCP Firestore credentials.\n\t */\n\tgcpFirestoreCredentials?: string;\n\n\t/**\n\t * GCP Firestore database id.\n\t */\n\tgcpFirestoreDatabaseId?: string;\n\n\t/**\n\t * GCP Firestore endpoint.\n\t */\n\tgcpFirestoreEndpoint?: string;\n\n\t/**\n\t * GCP Firestore project id.\n\t */\n\tgcpFirestoreProjectId?: string;\n\n\t/**\n\t * ScyllaDB hosts as comma separated string.\n\t */\n\tscylladbHosts?: string;\n\n\t/**\n\t * ScyllaDB keyspace.\n\t */\n\tscylladbKeyspace?: string;\n\n\t/**\n\t * ScyllaDB local data center.\n\t */\n\tscylladbLocalDataCenter?: string;\n\n\t/**\n\t * ScyllaDB port.\n\t */\n\tscylladbPort?: string;\n\n\t/**\n\t * ScyllaDB connection pool: number of connections per local host.\n\t */\n\tscylladbPoolCoreConnectionsPerHost?: string;\n\n\t/**\n\t * ScyllaDB connection pool: maximum requests per connection.\n\t */\n\tscylladbPoolMaxRequestsPerConnection?: string;\n\n\t/**\n\t * MySQL host.\n\t */\n\tmySqlHost?: string;\n\n\t/**\n\t * MySQL port.\n\t */\n\tmySqlPort?: string;\n\n\t/**\n\t * MySQL username.\n\t */\n\tmySqlUser?: string;\n\n\t/**\n\t * MySQL password.\n\t */\n\tmySqlPassword?: string;\n\n\t/**\n\t * MySQL Database.\n\t */\n\tmySqlDatabase?: string;\n\n\t/**\n\t * MySQL connection pool: maximum number of connections.\n\t */\n\tmySqlPoolConnectionLimit?: string;\n\n\t/**\n\t * MySQL connection pool: maximum number of idle connections.\n\t */\n\tmySqlPoolMaxIdle?: string;\n\n\t/**\n\t * MySQL connection pool: milliseconds before an idle connection is removed.\n\t */\n\tmySqlPoolIdleTimeout?: string;\n\n\t/**\n\t * MySQL connection pool: enable TCP keep-alive.\n\t */\n\tmySqlPoolEnableKeepAlive?: string;\n\n\t/**\n\t * MySQL connection pool: wait for a connection when pool is full.\n\t */\n\tmySqlPoolWaitForConnections?: string;\n\n\t/**\n\t * MySQL connection pool: maximum queued requests (0 = unlimited).\n\t */\n\tmySqlPoolQueueLimit?: string;\n\n\t/**\n\t * MongoDB host.\n\t */\n\tmongoDbHost?: string;\n\n\t/**\n\t * MongoDB port.\n\t */\n\tmongoDbPort?: string;\n\n\t/**\n\t * MongoDB username.\n\t */\n\tmongoDbUser?: string;\n\n\t/**\n\t * MongoDB password.\n\t */\n\tmongoDbPassword?: string;\n\n\t/**\n\t * MongoDB Database.\n\t */\n\tmongoDbDatabase?: string;\n\n\t/**\n\t * MongoDB connection pool: maximum number of connections.\n\t */\n\tmongoDbPoolMaxPoolSize?: string;\n\n\t/**\n\t * MongoDB connection pool: minimum number of connections to maintain.\n\t */\n\tmongoDbPoolMinPoolSize?: string;\n\n\t/**\n\t * MongoDB connection pool: milliseconds a connection can remain idle before removal.\n\t */\n\tmongoDbPoolMaxIdleTime?: string;\n\n\t/**\n\t * MongoDB connection pool: milliseconds to wait for a connection before throwing.\n\t */\n\tmongoDbPoolWaitQueueTimeout?: string;\n\n\t/**\n\t * PostgreSQl host.\n\t */\n\tpostgreSqlHost?: string;\n\n\t/**\n\t * PostgreSQl port.\n\t */\n\tpostgreSqlPort?: string;\n\n\t/**\n\t * PostgreSQl username.\n\t */\n\tpostgreSqlUser?: string;\n\n\t/**\n\t * PostgreSQl password.\n\t */\n\tpostgreSqlPassword?: string;\n\n\t/**\n\t * PostgreSQl Database.\n\t */\n\tpostgreSqlDatabase?: string;\n\n\t/**\n\t * PostgreSQL connection pool: maximum number of connections.\n\t */\n\tpostgreSqlPoolMax?: string;\n\n\t/**\n\t * PostgreSQL connection pool: seconds a connection can remain idle before being closed.\n\t */\n\tpostgreSqlPoolIdleTimeout?: string;\n\n\t/**\n\t * PostgreSQL connection pool: seconds to wait when establishing a connection.\n\t */\n\tpostgreSqlPoolConnectTimeout?: string;\n\n\t/**\n\t * PostgreSQL connection pool: maximum seconds a connection can remain open.\n\t */\n\tpostgreSqlPoolMaxLifetime?: string;\n\n\t/**\n\t * The security token for accessing IPFS API.\n\t */\n\tipfsBearerToken?: string;\n\n\t/**\n\t * The url for accessing IPFS API.\n\t */\n\tipfsApiUrl?: string;\n\n\t/**\n\t * The type of the entity storage to create, comma separate for more than one connector.\n\t * values: memory, file, ipfs, aws-s3, azure-storage, gcp-storage.\n\t */\n\tblobStorageConnectorType?: string;\n\n\t/**\n\t * The default blob storage connector to use, defaults to the first one in the list.\n\t */\n\tblobStorageConnectorDefault?: string;\n\n\t/**\n\t * Enable encryption for the blob storage.\n\t */\n\tblobStorageEnableEncryption?: string;\n\n\t/**\n\t * The id of the encryption key for the blob storage.\n\t */\n\tblobStorageEncryptionKeyId?: string;\n\n\t/**\n\t * A prefix for all the blobs in blob-storage, can be empty.\n\t */\n\tblobStoragePrefix?: string;\n\n\t/**\n\t * AWS S3 region.\n\t */\n\tawsS3Region?: string;\n\n\t/**\n\t * AWS S3 bucket name.\n\t */\n\tawsS3BucketName?: string;\n\n\t/**\n\t * AWS S3 auth mode, either credentials or pod, defaults to credentials.\n\t */\n\tawsS3AuthMode?: string;\n\n\t/**\n\t * AWS S3 access key id.\n\t */\n\tawsS3AccessKeyId?: string;\n\n\t/**\n\t * AWS S3 secret access key.\n\t */\n\tawsS3SecretAccessKey?: string;\n\n\t/**\n\t * AWS S3 endpoint.\n\t */\n\tawsS3Endpoint?: string;\n\n\t/**\n\t * Azure Storage account key.\n\t */\n\tazureStorageAccountKey?: string;\n\n\t/**\n\t * Azure Storage account name.\n\t */\n\tazureStorageAccountName?: string;\n\n\t/**\n\t * Azure Storage container.\n\t */\n\tazureStorageContainerName?: string;\n\n\t/**\n\t * Azure Storage endpoint.\n\t */\n\tazureStorageEndpoint?: string;\n\n\t/**\n\t * GCP Storage bucket.\n\t */\n\tgcpStorageBucketName?: string;\n\n\t/**\n\t * GCP Storage credentials.\n\t */\n\tgcpStorageCredentials?: string;\n\n\t/**\n\t * GCP Storage endpoint.\n\t */\n\tgcpStorageEndpoint?: string;\n\n\t/**\n\t * GCP Storage project id.\n\t */\n\tgcpStorageProjectId?: string;\n\n\t/**\n\t * The type of the default vault connector: entity-storage, hashicorp.\n\t */\n\tvaultConnector?: string;\n\n\t/**\n\t * Prefix to prepend to entries in the vault.\n\t */\n\tvaultPrefix?: string;\n\n\t/**\n\t * Hashicorp Vault token.\n\t */\n\thashicorpVaultToken?: string;\n\n\t/**\n\t * Hashicorp Vault endpoint.\n\t */\n\thashicorpVaultEndpoint?: string;\n\n\t/**\n\t * The type of logging task connector, can be a comma separated list: console, entity-storage, open-telemetry, file.\n\t */\n\tloggingConnector?: string;\n\n\t/**\n\t * The batch size for the logging task, set to 1 for no batching.\n\t */\n\tloggingBatchSize?: string;\n\n\t/**\n\t * The batch flush interval in seconds for the logging task, how often to flush the logs when using batching, defaults to 5 seconds.\n\t */\n\tloggingBatchFlushInterval?: string;\n\n\t/**\n\t * Delete log entries older than this many minutes for the entity-storage logging connector.\n\t * Set to 0 to disable age-based retention.\n\t * @default 2880 (2 days)\n\t */\n\tloggingRetainFor?: string;\n\n\t/**\n\t * Keep at most this many log entries for the entity-storage logging connector.\n\t * Set to 0 to disable count-based retention.\n\t * @default 10000\n\t */\n\tloggingMaxEntries?: string;\n\n\t/**\n\t * How often the retention cleanup task runs in minutes for the entity-storage logging connector.\n\t * Set to 0 to disable periodic cleanup.\n\t * @default 5\n\t */\n\tloggingRetentionInterval?: string;\n\n\t/**\n\t * Maximum number of entries deleted per cleanup batch for the entity-storage logging connector.\n\t * Keeping this value smaller helps avoid spikes in database load.\n\t * @default 1000\n\t */\n\tloggingRetentionBatchSize?: string;\n\n\t/**\n\t * A list of components to exclude from logging, can be a comma separated list of component Class names e.g. \"ComponentA,ComponentB\".\n\t */\n\tloggingSilentComponents?: string;\n\n\t/**\n\t * The directory to write log files into when using the file logging connector. Required when TWIN_LOGGING_CONNECTOR includes \"file\".\n\t */\n\tloggingFileDirectory?: string;\n\n\t/**\n\t * The log filename when using the file logging connector, defaults to \"app.log\".\n\t */\n\tloggingFileFilename?: string;\n\n\t/**\n\t * The maximum log file size in bytes before rotation when using the file logging connector, defaults to 10485760 (10 MB). Set to 0 or negative to disable rotation.\n\t */\n\tloggingFileMaxFileSizeBytes?: string;\n\n\t/**\n\t * The number of rotated log files to retain when using the file logging connector, defaults to 5. Set to 0 or negative to keep all rotated files.\n\t */\n\tloggingFileMaxRetainedFiles?: string;\n\n\t/**\n\t * A list of components to exclude from telemetry, can be a comma separated list of component Class names e.g. \"ComponentA,ComponentB\".\n\t */\n\ttelemetrySilentComponents?: string;\n\n\t/**\n\t * The name of the OpenTelemetry logger, only required if using open-telemetry as logging connector, defaults to twin-logging.\n\t */\n\topenTelemetryLoggingLoggerName?: string;\n\n\t/**\n\t * The version of the OpenTelemetry logger, only required if using open-telemetry as logging connector, defaults to 1.0.0.\n\t */\n\topenTelemetryLoggingLoggerVersion?: string;\n\n\t/**\n\t * The OTLP endpoint URL for the OpenTelemetry logging exporter, required when using open-telemetry as logging connector, e.g. http://localhost:4318/v1/logs.\n\t */\n\topenTelemetryLoggingPrometheusEndpoint?: string;\n\n\t/**\n\t * The log record processor to use for the OpenTelemetry logging exporter, either batch or simple, defaults to batch.\n\t */\n\topenTelemetryLoggingProcessor?: string;\n\n\t/**\n\t * The type of event bus connector: local.\n\t */\n\teventBusConnector?: string;\n\n\t/**\n\t * The type of event bus component: service.\n\t */\n\teventBusComponent?: string;\n\n\t/**\n\t * The email protocol connector types, comma-separated: pop3, imap, gmail, outlook.\n\t */\n\temailProtocolConnector?: string;\n\n\t/**\n\t * AWS SES region.\n\t */\n\tawsSesRegion?: string;\n\n\t/**\n\t * AWS SES auth mode, either credentials or pod, defaults to credentials.\n\t */\n\tawsSesAuthMode?: string;\n\n\t/**\n\t * AWS SES secret access key.\n\t */\n\tawsSesSecretAccessKey?: string;\n\n\t/**\n\t * AWS SES access key id.\n\t */\n\tawsSesAccessKeyId?: string;\n\n\t/**\n\t * AWS SES endpoint.\n\t */\n\tawsSesEndpoint?: string;\n\n\t/**\n\t * The applications for the push notifications reference a separate json with @json: prefix.\n\t */\n\tawsMessagingPushNotificationApplications?: string;\n\n\t/**\n\t * The type of messaging email connector: entity-storage, aws, smtp.\n\t */\n\tmessagingEmailConnector?: string;\n\n\t/**\n\t * SMTP server hostname or IP address.\n\t */\n\tsmtpHost?: string;\n\n\t/**\n\t * SMTP server port, defaults to 587.\n\t */\n\tsmtpPort?: string;\n\n\t/**\n\t * Whether the SMTP connector uses TLS.\n\t */\n\tsmtpSecure?: string;\n\n\t/**\n\t * SMTP authentication username.\n\t */\n\tsmtpUsername?: string;\n\n\t/**\n\t * SMTP authentication password.\n\t */\n\tsmtpPassword?: string;\n\n\t/**\n\t * The type of messaging sms connector: entity-storage, aws.\n\t */\n\tmessagingSmsConnector?: string;\n\n\t/**\n\t * The type of messaging push notification connector: entity-storage, aws.\n\t */\n\tmessagingPushNotificationConnector?: string;\n\n\t/**\n\t * The type of telemetry connector, comma-separated for multiple: entity-storage, open-telemetry, silent.\n\t */\n\ttelemetryConnector?: string;\n\n\t/**\n\t * The name of the Open Telemetry meter to use, only required if using open-telemetry as telemetry connector, defaults to twin-node.\n\t */\n\topenTelemetryMeterName?: string;\n\n\t/**\n\t * The version of the Open Telemetry metrics specification to use, only required if using open-telemetry as telemetry connector, defaults to 1.0.0.\n\t */\n\topenTelemetryMeterVersion?: string;\n\n\t/**\n\t * The type of Open Telemetry metric reader to use, only required if using open-telemetry as telemetry connector, values: prometheus.\n\t */\n\topenTelemetryReader?: string;\n\n\t/**\n\t * The port to use for the Open Telemetry Prometheus metrics server, only required if using open-telemetry as telemetry connector and prometheus as reader, defaults to 9464.\n\t */\n\topenTelemetryPrometheusPort?: string;\n\n\t/**\n\t * Polling interval in seconds for the telemetry metrics collector. Defaults to 60.\n\t */\n\ttelemetryMetricsCollectorInterval?: string;\n\n\t/**\n\t * The type of telemetry metrics producers, can be a comma separated list: system, process.\n\t */\n\ttelemetryMetricsProducers?: string;\n\n\t/**\n\t * Maximum number of values retained per telemetry metric (count-based history cap). Defaults to 1440.\n\t */\n\ttelemetryMetricsProducerMaxHistory?: string;\n\n\t/**\n\t * The batch size for the telemetry connector, set to 1 to disable size-based flushing.\n\t */\n\ttelemetryBatchSize?: string;\n\n\t/**\n\t * The batch flush interval in seconds for the telemetry connector, how often to flush when using batching, defaults to 5 seconds.\n\t */\n\ttelemetryBatchFlushInterval?: string;\n\n\t/**\n\t * The maximum number of metric values to hold in the write-ahead cache for the telemetry connector. Set to 0 for unlimited.\n\t * @default 1000\n\t */\n\ttelemetryMaxCacheSize?: string;\n\n\t/**\n\t * How long in milliseconds the telemetry connector waits for its background thread to confirm\n\t * a flush before a read continues without it.\n\t * @default 30000\n\t */\n\ttelemetryFlushTimeout?: string;\n\n\t/**\n\t * How long in milliseconds the telemetry connector holds values so several share a single\n\t * background task, instead of creating one task per value. Set to 0 to disable coalescing.\n\t * @default 1000\n\t */\n\ttelemetryTaskCoalesce?: string;\n\n\t/**\n\t * How long in milliseconds the telemetry connector allows with tasks outstanding and none of\n\t * them completing before its background thread is treated as stalled and replaced. Set to 0\n\t * to disable the check.\n\t * @default 60000\n\t */\n\ttelemetryTaskStallTimeout?: string;\n\n\t/**\n\t * The maximum number of metric definitions held in the in-memory definition cache for the telemetry connector.\n\t * @default 100\n\t */\n\ttelemetryMetricDefinitionCacheCapacity?: string;\n\n\t/**\n\t * The time-to-idle in milliseconds for cached metric definitions in the telemetry connector.\n\t * @default 3600000\n\t */\n\ttelemetryMetricDefinitionCacheTtiMs?: string;\n\n\t/**\n\t * A list of components to exclude from tracing, can be a comma separated list of component Class names e.g. \"ComponentA,ComponentB\".\n\t */\n\ttracingSilentComponents?: string;\n\n\t/**\n\t * The type of tracing connector, comma-separated for multiple: entity-storage, open-telemetry, console, silent.\n\t */\n\ttracingConnector?: string;\n\n\t/**\n\t * The type of facade to activate, comma-separated for multiple: tracing. When this is not set no\n\t * facades are activated.\n\t */\n\tfacade?: string;\n\n\t/**\n\t * The factories the tracing facade is activated on, as a comma separated list of factory type names\n\t * e.g. \"component,vault\", replacing the default set rather than adding to it. Only applies when the\n\t * tracing facade is activated.\n\t */\n\ttracingFacadeFactories?: string;\n\n\t/**\n\t * Additional instance types the tracing facade is not applied to in the component factory, as a comma\n\t * separated list of regular expressions matched anywhere in the type name e.g. \"^my-tracing-service$\".\n\t * These extend the types which are always excluded, \"tracing\", \"telemetry\", \"metrics\", \"logging\" and\n\t * \"platform\", they do not replace them.\n\t */\n\ttracingFacadeComponentExcludeTypes?: string;\n\n\t/**\n\t * Additional parameter names the tracing facade does not record, as a comma separated list\n\t * e.g. \"ssn,accountNumber\". These extend the names which are always excluded, they do not\n\t * replace them.\n\t */\n\ttracingFacadeExcludeParams?: string;\n\n\t/**\n\t * Additional method names the tracing facade does not record a span for, as a comma separated\n\t * list e.g. \"health,ping\". These extend the names which are always excluded, they do not\n\t * replace them.\n\t */\n\ttracingFacadeExcludeMethods?: string;\n\n\t/**\n\t * The object values the tracing facade records, as a comma separated list of patterns matched\n\t * against the end of \"parameter\" or \"parameter.property\", where the returned value is named\n\t * \"resolved\" e.g. \"filter.id,resolved.id\". Naming the parameter records the whole object\n\t * including any secrets it holds, naming a property records only that property. Object\n\t * parameters and returned objects are omitted unless matched here.\n\t */\n\ttracingFacadeIncludeObjects?: string;\n\n\t/**\n\t * The name of the Open Telemetry tracer to use, only required if using open-telemetry as tracing connector, defaults to twin-node.\n\t */\n\topenTelemetryTracingTracerName?: string;\n\n\t/**\n\t * The version of the Open Telemetry tracing specification to use, only required if using open-telemetry as tracing connector, defaults to 1.0.0.\n\t */\n\topenTelemetryTracingTracerVersion?: string;\n\n\t/**\n\t * The OTLP HTTP endpoint to push spans to, e.g. http://localhost:4318/v1/traces. Required when using open-telemetry as tracing connector.\n\t */\n\topenTelemetryTracingEndpoint?: string;\n\n\t/**\n\t * The span processor: batch (default) or simple. Only used when TWIN_TRACING_CONNECTOR=open-telemetry.\n\t */\n\topenTelemetryTracingProcessor?: string;\n\n\t/**\n\t * The type of faucet connector: entity-storage, iota.\n\t */\n\tfaucetConnector?: string;\n\n\t/**\n\t * The type of wallet connector: entity-storage, iota.\n\t */\n\twalletConnector?: string;\n\n\t/**\n\t * The type of NFT connector: entity-storage, iota.\n\t */\n\tnftConnector?: string;\n\n\t/**\n\t * The NFT deployed package id, for custom deployments.\n\t */\n\tnftPackageId?: string;\n\n\t/**\n\t * The type of notarization connector: entity-storage, iota.\n\t */\n\tnotarizationConnector?: string;\n\n\t/**\n\t * The type of identity connector: entity-storage, iota.\n\t */\n\tidentityConnector?: string;\n\n\t/**\n\t * The index of the wallet address to use, defaults to 0.\n\t */\n\tidentityWalletAddressIndex?: string;\n\n\t/**\n\t * The TTL in milliseconds for caching resolved DIDs when using the IOTA identity connector. Omit to use the connector default.\n\t */\n\tidentityDidResolutionCacheTtl?: string;\n\n\t/**\n\t * The maximum number of DID documents to hold in the resolution cache. Only used when using the IOTA identity connector and caching is enabled.\n\t */\n\tidentityDidResolutionCacheCapacity?: string;\n\n\t/**\n\t * The mutex timeout in milliseconds for the DID resolution cache. Only used when using the IOTA identity connector and caching is enabled.\n\t */\n\tidentityDidResolutionCacheMutexTimeout?: string;\n\n\t/**\n\t * The number of times to retry resolving a DID after a write operation (create, update, or delete) to confirm propagation. Only used when using the IOTA identity connector.\n\t */\n\tidentityDidResolutionRetries?: string;\n\n\t/**\n\t * The delay in milliseconds between DID resolution retries after a write operation. Only used when using the IOTA identity connector.\n\t */\n\tidentityDidResolutionRetryDelay?: string;\n\n\t/**\n\t * The type of identity resolver connector: entity-storage, iota.\n\t */\n\tidentityResolverConnector?: string;\n\n\t/**\n\t * IOTA Faucet Endpoint.\n\t */\n\tiotaFaucetEndpoint?: string;\n\n\t/**\n\t * IOTA Node Endpoint.\n\t */\n\tiotaNodeEndpoint?: string;\n\n\t/**\n\t * IOTA network.\n\t */\n\tiotaNetwork?: string;\n\n\t/**\n\t * IOTA coin type.\n\t */\n\tiotaCoinType?: string;\n\n\t/**\n\t * IOTA gas budget, in nanos.\n\t */\n\tiotaGasBudget?: string;\n\n\t/**\n\t * IOTA gas reservation duration, in seconds.\n\t */\n\tiotaGasReservationDuration?: string;\n\n\t/**\n\t * IOTA Explorer Endpoint.\n\t */\n\tiotaExplorerEndpoint?: string;\n\n\t/**\n\t * IOTA Gas Station Endpoint.\n\t */\n\tiotaGasStationEndpoint?: string;\n\n\t/**\n\t * IOTA Gas Station Authentication Token.\n\t */\n\tiotaGasStationAuthToken?: string;\n\n\t/**\n\t * The IOTA Identity deployed package id, for custom deployments.\n\t */\n\tiotaIdentityPackageId?: string;\n\n\t/**\n\t * Universal Resolver Endpoint.\n\t */\n\tuniversalResolverEndpoint?: string;\n\n\t/**\n\t * The type of identity profile connector: entity-storage.\n\t */\n\tidentityProfileConnector?: string;\n\n\t/**\n\t * The identity verification method id to use with immutable proofs.\n\t */\n\timmutableProofVerificationMethodId?: string;\n\n\t/**\n\t * The number of times to retry a proof task when it fails, 0 to disable retries.\n\t * @default 5\n\t */\n\timmutableProofTaskRetryCount?: string;\n\n\t/**\n\t * The interval in seconds to wait between proof task retries.\n\t * @default 5\n\t */\n\timmutableProofTaskRetryInterval?: string;\n\n\t/**\n\t * The time in minutes to retain the record of a failed proof task.\n\t * Set to -1 to retain failures forever.\n\t * @default 10080\n\t */\n\timmutableProofTaskFailureRetainFor?: string;\n\n\t/**\n\t * How long in seconds the proof task worker stays idle before it shuts down.\n\t * Set to 0 to shut it down after every task, or -1 to never shut it down.\n\t * @default 60\n\t */\n\timmutableProofTaskWorkerIdleTimeout?: string;\n\n\t/**\n\t * How often in minutes the immutable proof reconciliation sweep runs.\n\t * @default 30\n\t */\n\timmutableProofSweepInterval?: string;\n\n\t/**\n\t * The minimum age in minutes before a proof with no notarization is considered stuck.\n\t * @default 180\n\t */\n\timmutableProofSweepStaleThreshold?: string;\n\n\t/**\n\t * The number of sweep attempts made before a proof is parked.\n\t * @default 5\n\t */\n\timmutableProofSweepMaxAttempts?: string;\n\n\t/**\n\t * The maximum number of proofs to re-enqueue per tenant per sweep cycle.\n\t * @default 10\n\t */\n\timmutableProofSweepBatchLimit?: string;\n\n\t/**\n\t * The minimum time in minutes between sweep attempts for the same proof.\n\t * @default 60\n\t */\n\timmutableProofSweepBackoff?: string;\n\n\t/**\n\t * ISO 8601 date-time used to treat older missing-task proofs as retryable.\n\t */\n\timmutableProofSweepAssumeRetryableBefore?: string;\n\n\t/**\n\t * The type of attestation connector: entity-storage, iota.\n\t */\n\tattestationConnector?: string;\n\n\t/**\n\t * The identity verification method id to use with attestation.\n\t */\n\tattestationVerificationMethodId?: string;\n\n\t/**\n\t * The type of the default data converters, can be a comma separated list: json, xml.\n\t */\n\tdataConverterConnectors?: string;\n\n\t/**\n\t * The type of the default data extractor, can be a comma separated list: json-path.\n\t */\n\tdataExtractorConnectors?: string;\n\n\t/**\n\t * Enable the task scheduler regardless of which other components are active, defaults to false.\n\t */\n\ttaskSchedulerEnabled?: string;\n\n\t/**\n\t * Is the auditable item graph enabled, defaults to false.\n\t */\n\tauditableItemGraphEnabled?: string;\n\n\t/**\n\t * Is the auditable item stream enabled, defaults to false.\n\t */\n\tauditableItemStreamEnabled?: string;\n\n\t/**\n\t * Is the document management enabled, defaults to false.\n\t */\n\tdocumentManagementEnabled?: string;\n\n\t/**\n\t * Enable the federated catalogue, defaults to false, automatically enabled if remote endpoint, filters or dataspace is enabled.\n\t */\n\tfederatedCatalogueEnabled?: string;\n\n\t/**\n\t * Federated catalog filters, command separated list of filters to add.\n\t */\n\tfederatedCatalogueFilters?: string;\n\n\t/**\n\t * Federated catalog remote endpoint, if set will use a REST client instead of local service.\n\t */\n\tfederatedCatalogueRemoteEndpoint?: string;\n\n\t/**\n\t * The path prefix used by the federated catalogue REST client when forwarding requests to the remote endpoint, defaults to \"federated-catalogue\".\n\t */\n\tfederatedCatalogueRestClientPathPrefix?: string;\n\n\t/**\n\t * The trust generators to add to the factory, comma separated list.\n\t */\n\ttrustGenerators?: string;\n\n\t/**\n\t * The trust verifiers to add to the factory, comma separated list.\n\t */\n\ttrustVerifiers?: string;\n\n\t/**\n\t * The verification method to use for trust identities.\n\t * Defaults to trust-assertion.\n\t */\n\ttrustVerificationMethodId?: string;\n\n\t/**\n\t * The trust time to live for generating JWTs in seconds.\n\t * Defaults to undefined for never expiring.\n\t */\n\ttrustJwtTtl?: string;\n\n\t/**\n\t * The allow lists for the trust identity verifier, comma separated list of identities.\n\t */\n\ttrustIdentitiesAllow?: string;\n\n\t/**\n\t * The deny lists for the trust identity verifier, comma separated list of identities.\n\t */\n\ttrustIdentitiesDeny?: string;\n\n\t/**\n\t * Path under which the rights management service is mounted (single source\n\t * of truth). The same value drives:\n\t * - the server route mount (via engine config)\n\t * - the PNP service's callback URL builder (`buildCallbackUrl`)\n\t * - the PNP rest-client's pathPrefix (consumer side)\n\t * Defaults to `rights-management`. Set when deploying behind a reverse proxy\n\t * with path rewriting, K8s ingress with path-based routing, or any custom\n\t * mount point.\n\t */\n\trightsManagementCallbackPath?: string;\n\n\t/**\n\t * The rights management policy information sources to add to the factory.\n\t */\n\trightsManagementPolicyInformationSources?: string;\n\n\t/**\n\t * The rights management policy negotiators sources to add to the factory.\n\t */\n\trightsManagementPolicyNegotiators?: string;\n\n\t/**\n\t * The rights management policy requesters to add to the factory.\n\t */\n\trightsManagementPolicyRequesters?: string;\n\n\t/**\n\t * The rights management policy execution actions to add to the factory.\n\t */\n\trightsManagementPolicyExecutionActions?: string;\n\n\t/**\n\t * The rights management policy enforcement processors to add to the factory.\n\t */\n\trightsManagementPolicyEnforcementProcessors?: string;\n\n\t/**\n\t * The rights management policy arbiters to add to the factory.\n\t */\n\trightsManagementPolicyArbiters?: string;\n\n\t/**\n\t * The rights management policy obligation enforcers to add to the factory.\n\t */\n\trightsManagementPolicyObligationEnforcers?: string;\n\n\t/**\n\t * Is the dataspace enabled, defaults to false.\n\t */\n\tdataspaceEnabled?: string;\n\n\t/**\n\t * The length of time to retain the activity logs for in seconds, set to -1 to keep forever.\n\t * @default 600\n\t */\n\tdataspaceRetainActivityLogsFor?: string;\n\n\t/**\n\t * The interval in seconds for cleaning up the activity logs.\n\t * @default 3600\n\t */\n\tdataspaceActivityLogsCleanupInterval?: string;\n\n\t/**\n\t * The TTL in milliseconds for the dataspace agreement cache.\n\t */\n\tdataspaceAgreementCacheTtl?: string;\n\n\t/**\n\t * The mutex timeout in milliseconds for the dataspace agreement cache.\n\t */\n\tdataspaceAgreementCacheMutexTimeout?: string;\n\n\t/**\n\t * The time in milliseconds after which an unused agreement is eligible for removal.\n\t */\n\tdataspaceAgreementUnusedThreshold?: string;\n\n\t/**\n\t * The interval in milliseconds between agreement sweep runs.\n\t */\n\tdataspaceAgreementSweepInterval?: string;\n\n\t/**\n\t * The number of times to retry failed data plane tasks.\n\t */\n\tdataspaceRetryCount?: string;\n\n\t/**\n\t * Maximum HTTP retry attempts per push delivery task execution.\n\t */\n\tdataspacePushRetryCount?: string;\n\n\t/**\n\t * Base delay in milliseconds for exponential backoff between push HTTP retries.\n\t */\n\tdataspacePushRetryBaseDelay?: string;\n\n\t/**\n\t * Timeout in milliseconds for each push delivery HTTP POST request.\n\t */\n\tdataspacePushTimeout?: string;\n\n\t/**\n\t * Interval in milliseconds between orphaned push subscription cleanup scans.\n\t */\n\tdataspacePushSubscriptionCleanupInterval?: string;\n\n\t/**\n\t * Base route path for the data plane service (path only, not full URL).\n\t * Combined with the public origin to form the `dataAddress.endpoint` sent to PULL consumers\n\t * and the inbox URL sent to PUSH providers.\n\t *\n\t * This must be the mount-point prefix of the data plane routes, NOT a specific route path.\n\t * Do NOT append sub-paths such as `/entities` or `/inbox` - those are appended automatically\n\t * by each transfer handler and by the data plane REST client.\n\t *\n\t * REQUIRED if PULL or PUSH transfers are supported.\n\t * If not specified, PULL and PUSH transfers will not be available.\n\t *\n\t * Example: \"dataspace\"\n\t */\n\tdataspaceDataPlanePath?: string;\n\n\t/**\n\t * Whether the provider immediately starts a transfer once it has been requested.\n\t * When false the transfer stays in REQUESTED until the provider explicitly calls transferStarted.\n\t * @default false\n\t */\n\tdataspaceAutoStartTransfers?: string;\n\n\t/**\n\t * How long in seconds a negotiation may sit without progress before it is treated as timed out.\n\t * @default 30\n\t */\n\tdataspaceStalledNegotiationTimeout?: string;\n\n\t/**\n\t * How long in seconds a consumer-initiated transfer may sit in REQUESTED without the provider\n\t * progressing it before it is treated as timed out.\n\t * @default 30\n\t */\n\tdataspaceStalledTransferTimeout?: string;\n\n\t/**\n\t * How long in seconds a provider transfer may stay idle before the idle policy marks it as stalled.\n\t */\n\tdataspaceProviderTransferIdleTimeout?: string;\n\n\t/**\n\t * How frequently in seconds the provider idle transfer policy sweep runs.\n\t */\n\tdataspaceProviderTransferPolicySweepInterval?: string;\n\n\t/**\n\t * Path under which the dataspace control plane is mounted (path only, not full URL).\n\t * This must match the control-plane REST mount, as it is combined with the public\n\t * origin to build the consumer's advertised callback address.\n\t * @default \"dataspace-control-plane\"\n\t */\n\tdataspaceCallbackPath?: string;\n\n\t/**\n\t * Are the health components enabled, defaults to false.\n\t */\n\thealthEnabled?: string;\n\n\t/**\n\t * The interval in seconds for performing health checks, defaults to 60.\n\t */\n\thealthInterval?: string;\n\n\t/**\n\t * The interval in seconds for performing health checks at startup, defaults to 2.\n\t * This allows components that take a long time to initialize to be healthy before the first health check is performed.\n\t */\n\thealthStartupInterval?: string;\n\n\t/**\n\t * The interval in seconds for running the application health lifecycle (init, application, teardown), defaults to 300.\n\t */\n\thealthApplicationInterval?: string;\n\n\t/**\n\t * Comma separated list of regular expressions matched against the engine component type keys,\n\t * any which match are excluded from the engine clone used by the application health background\n\t * task. Defaults to the component groups which provide no application health checks.\n\t */\n\thealthExcludeCloneComponents?: string;\n\n\t/**\n\t * The maximum number of workers to use for processing background tasks, defaults to twice the number of CPU cores.\n\t */\n\tbackgroundTaskMaxSystemWorkerCount?: string;\n\n\t/**\n\t * The interval in milliseconds to leave between background tasks, defaults to 100.\n\t */\n\tbackgroundTaskInterval?: string;\n\n\t/**\n\t * The interval in milliseconds to leave between background task retries, defaults to 5000.\n\t */\n\tbackgroundTaskRetryInterval?: string;\n\n\t/**\n\t * The interval in milliseconds between sweeps removing retained background tasks, defaults to 120000.\n\t */\n\tbackgroundTaskCleanupInterval?: string;\n\n\t/**\n\t * The time in milliseconds to wait for each handler's workers to shut down before terminating them, defaults to 5000.\n\t */\n\tbackgroundTaskWorkerShutdownTimeout?: string;\n\n\t/**\n\t * The maximum dispatches of a background task attempt before it is failed as interrupted, defaults to 3, set to -1 for no limit.\n\t */\n\tbackgroundTaskMaxDispatchCount?: string;\n\n\t/**\n\t * The type of the automation action to create, comma separate for more than one connector.\n\t * values: fetch\n\t */\n\tautomationActionTypes?: string;\n\n\t/**\n\t * The default mutex timeout in milliseconds, used when no component-specific timeout is set, defaults to 5000 if omitted.\n\t */\n\tmutexTimeoutDefault?: string;\n\n\t/**\n\t * The mutex timeout in milliseconds for the auditable item graph component.\n\t */\n\tauditableItemGraphMutexTimeout?: string;\n\n\t/**\n\t * The mutex timeout in milliseconds for the auditable item stream component.\n\t */\n\tauditableItemStreamMutexTimeout?: string;\n\n\t/**\n\t * The mutex timeout in milliseconds for the federated catalogue component.\n\t */\n\tfederatedCatalogueMutexTimeout?: string;\n\n\t/**\n\t * The mutex timeout in milliseconds for the document management component.\n\t */\n\tdocumentManagementMutexTimeout?: string;\n\n\t/**\n\t * The mutex timeout in milliseconds for the memory and file entity storage connectors.\n\t */\n\tentityStorageMutexTimeout?: string;\n\n\t/**\n\t * The mutex timeout in milliseconds for the rights management component.\n\t */\n\trightsManagementMutexTimeout?: string;\n\n\t/**\n\t * A comma separated list of additional node extensions to load, the initialiseExtension method will be called for each extension.\n\t */\n\textensions?: string;\n}\n"]}
1
+ {"version":3,"file":"IEngineEnvironmentVariables.js","sourceRoot":"","sources":["../../../src/models/IEngineEnvironmentVariables.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\n\n/**\n * The engine core environment variables.\n */\nexport interface IEngineEnvironmentVariables {\n\t/**\n\t * Start the engine in debug mode.\n\t */\n\tdebug?: string;\n\n\t/**\n\t * Start the engine in silent mode.\n\t */\n\tsilent?: string;\n\n\t/**\n\t * Controls how unrecognised TWIN_* environment variables are handled at startup.\n\t * \"error\" (default): throws a startup error, allowing CI and production deployments\n\t * to hard-fail on misconfigured or misspelled variable names.\n\t * \"warn\": logs a warning and continues.\n\t * \"ignore\": skips validation entirely.\n\t * Any other value is rejected at startup.\n\t * @default \"error\"\n\t */\n\tstrictEnv?: string;\n\n\t/**\n\t * Comma-separated list of raw environment variable names to exempt from the unknown-key check.\n\t * Use this to allowlist variables introduced by custom extensions that are not part of the\n\t * core interface, e.g. TWIN_MY_EXTENSION_SECRET.\n\t */\n\tenvAllowList?: string;\n\n\t/**\n\t * The root directory for storing items like state file.\n\t */\n\tstorageFileRoot?: string;\n\n\t/**\n\t * The name of the state file.\n\t */\n\tstateFilename?: string;\n\n\t/**\n\t * Is multi-tenant support enabled, defaults to false.\n\t */\n\ttenantEnabled?: string;\n\n\t/**\n\t * Enable schema migration, defaults to true.\n\t */\n\tschemaMigrationEnabled?: string;\n\n\t/**\n\t * The type of the entity storage to create, comma separate for more than one connector.\n\t * values: file, memory, aws-dynamodb, azure-cosmosdb, gcp-firestoredb, scylladb, mysql, mongodb, postgresql\n\t */\n\tentityStorageConnectorType?: string;\n\n\t/**\n\t * The default entity storage connector to use, defaults to the first one in the list.\n\t */\n\tentityStorageConnectorDefault?: string;\n\n\t/**\n\t * A prefix for all the table in entity-storage, can be empty.\n\t */\n\tentityStorageTablePrefix?: string;\n\n\t/**\n\t * AWS DynamoDB auth mode, either credentials or pod.\n\t */\n\tawsDynamodbAuthMode?: string;\n\n\t/**\n\t * AWS Dynamo DB access key id.\n\t */\n\tawsDynamodbAccessKeyId?: string;\n\n\t/**\n\t * AWS Dynamo DB Endpoint if running local instance.\n\t */\n\tawsDynamodbEndpoint?: string;\n\n\t/**\n\t * AWS Dynamo DB region.\n\t */\n\tawsDynamodbRegion?: string;\n\n\t/**\n\t * AWS Dynamo DB secret access key.\n\t */\n\tawsDynamodbSecretAccessKey?: string;\n\n\t/**\n\t * AWS Dynamo DB connection timeout in milliseconds.\n\t */\n\tawsDynamodbConnectionTimeout?: string;\n\n\t/**\n\t * Azure Cosmos DB key.\n\t */\n\tazureCosmosdbKey?: string;\n\n\t/**\n\t * Azure Cosmos DB container id.\n\t */\n\tazureCosmosdbContainerId?: string;\n\n\t/**\n\t * Azure Cosmos DB database id.\n\t */\n\tazureCosmosdbDatabaseId?: string;\n\n\t/**\n\t * Azure Cosmos DB endpoint.\n\t */\n\tazureCosmosdbEndpoint?: string;\n\n\t/**\n\t * GCP Firestore collection name.\n\t */\n\tgcpFirestoreCollectionName?: string;\n\n\t/**\n\t * GCP Firestore credentials.\n\t */\n\tgcpFirestoreCredentials?: string;\n\n\t/**\n\t * GCP Firestore database id.\n\t */\n\tgcpFirestoreDatabaseId?: string;\n\n\t/**\n\t * GCP Firestore endpoint.\n\t */\n\tgcpFirestoreEndpoint?: string;\n\n\t/**\n\t * GCP Firestore project id.\n\t */\n\tgcpFirestoreProjectId?: string;\n\n\t/**\n\t * ScyllaDB hosts as comma separated string.\n\t */\n\tscylladbHosts?: string;\n\n\t/**\n\t * ScyllaDB keyspace.\n\t */\n\tscylladbKeyspace?: string;\n\n\t/**\n\t * ScyllaDB local data center.\n\t */\n\tscylladbLocalDataCenter?: string;\n\n\t/**\n\t * ScyllaDB port.\n\t */\n\tscylladbPort?: string;\n\n\t/**\n\t * ScyllaDB connection pool: number of connections per local host.\n\t */\n\tscylladbPoolCoreConnectionsPerHost?: string;\n\n\t/**\n\t * ScyllaDB connection pool: maximum requests per connection.\n\t */\n\tscylladbPoolMaxRequestsPerConnection?: string;\n\n\t/**\n\t * MySQL host.\n\t */\n\tmySqlHost?: string;\n\n\t/**\n\t * MySQL port.\n\t */\n\tmySqlPort?: string;\n\n\t/**\n\t * MySQL username.\n\t */\n\tmySqlUser?: string;\n\n\t/**\n\t * MySQL password.\n\t */\n\tmySqlPassword?: string;\n\n\t/**\n\t * MySQL Database.\n\t */\n\tmySqlDatabase?: string;\n\n\t/**\n\t * MySQL connection pool: maximum number of connections.\n\t */\n\tmySqlPoolConnectionLimit?: string;\n\n\t/**\n\t * MySQL connection pool: maximum number of idle connections.\n\t */\n\tmySqlPoolMaxIdle?: string;\n\n\t/**\n\t * MySQL connection pool: milliseconds before an idle connection is removed.\n\t */\n\tmySqlPoolIdleTimeout?: string;\n\n\t/**\n\t * MySQL connection pool: enable TCP keep-alive.\n\t */\n\tmySqlPoolEnableKeepAlive?: string;\n\n\t/**\n\t * MySQL connection pool: wait for a connection when pool is full.\n\t */\n\tmySqlPoolWaitForConnections?: string;\n\n\t/**\n\t * MySQL connection pool: maximum queued requests (0 = unlimited).\n\t */\n\tmySqlPoolQueueLimit?: string;\n\n\t/**\n\t * MongoDB host.\n\t */\n\tmongoDbHost?: string;\n\n\t/**\n\t * MongoDB port.\n\t */\n\tmongoDbPort?: string;\n\n\t/**\n\t * MongoDB username.\n\t */\n\tmongoDbUser?: string;\n\n\t/**\n\t * MongoDB password.\n\t */\n\tmongoDbPassword?: string;\n\n\t/**\n\t * MongoDB Database.\n\t */\n\tmongoDbDatabase?: string;\n\n\t/**\n\t * MongoDB connection pool: maximum number of connections.\n\t */\n\tmongoDbPoolMaxPoolSize?: string;\n\n\t/**\n\t * MongoDB connection pool: minimum number of connections to maintain.\n\t */\n\tmongoDbPoolMinPoolSize?: string;\n\n\t/**\n\t * MongoDB connection pool: milliseconds a connection can remain idle before removal.\n\t */\n\tmongoDbPoolMaxIdleTime?: string;\n\n\t/**\n\t * MongoDB connection pool: milliseconds to wait for a connection before throwing.\n\t */\n\tmongoDbPoolWaitQueueTimeout?: string;\n\n\t/**\n\t * PostgreSQl host.\n\t */\n\tpostgreSqlHost?: string;\n\n\t/**\n\t * PostgreSQl port.\n\t */\n\tpostgreSqlPort?: string;\n\n\t/**\n\t * PostgreSQl username.\n\t */\n\tpostgreSqlUser?: string;\n\n\t/**\n\t * PostgreSQl password.\n\t */\n\tpostgreSqlPassword?: string;\n\n\t/**\n\t * PostgreSQl Database.\n\t */\n\tpostgreSqlDatabase?: string;\n\n\t/**\n\t * PostgreSQL connection pool: maximum number of connections.\n\t */\n\tpostgreSqlPoolMax?: string;\n\n\t/**\n\t * PostgreSQL connection pool: seconds a connection can remain idle before being closed.\n\t */\n\tpostgreSqlPoolIdleTimeout?: string;\n\n\t/**\n\t * PostgreSQL connection pool: seconds to wait when establishing a connection.\n\t */\n\tpostgreSqlPoolConnectTimeout?: string;\n\n\t/**\n\t * PostgreSQL connection pool: maximum seconds a connection can remain open.\n\t */\n\tpostgreSqlPoolMaxLifetime?: string;\n\n\t/**\n\t * The security token for accessing IPFS API.\n\t */\n\tipfsBearerToken?: string;\n\n\t/**\n\t * The url for accessing IPFS API.\n\t */\n\tipfsApiUrl?: string;\n\n\t/**\n\t * The type of the entity storage to create, comma separate for more than one connector.\n\t * values: memory, file, ipfs, aws-s3, azure-storage, gcp-storage.\n\t */\n\tblobStorageConnectorType?: string;\n\n\t/**\n\t * The default blob storage connector to use, defaults to the first one in the list.\n\t */\n\tblobStorageConnectorDefault?: string;\n\n\t/**\n\t * Enable encryption for the blob storage.\n\t */\n\tblobStorageEnableEncryption?: string;\n\n\t/**\n\t * The id of the encryption key for the blob storage.\n\t */\n\tblobStorageEncryptionKeyId?: string;\n\n\t/**\n\t * A prefix for all the blobs in blob-storage, can be empty.\n\t */\n\tblobStoragePrefix?: string;\n\n\t/**\n\t * AWS S3 region.\n\t */\n\tawsS3Region?: string;\n\n\t/**\n\t * AWS S3 bucket name.\n\t */\n\tawsS3BucketName?: string;\n\n\t/**\n\t * AWS S3 auth mode, either credentials or pod, defaults to credentials.\n\t */\n\tawsS3AuthMode?: string;\n\n\t/**\n\t * AWS S3 access key id.\n\t */\n\tawsS3AccessKeyId?: string;\n\n\t/**\n\t * AWS S3 secret access key.\n\t */\n\tawsS3SecretAccessKey?: string;\n\n\t/**\n\t * AWS S3 endpoint.\n\t */\n\tawsS3Endpoint?: string;\n\n\t/**\n\t * Azure Storage account key.\n\t */\n\tazureStorageAccountKey?: string;\n\n\t/**\n\t * Azure Storage account name.\n\t */\n\tazureStorageAccountName?: string;\n\n\t/**\n\t * Azure Storage container.\n\t */\n\tazureStorageContainerName?: string;\n\n\t/**\n\t * Azure Storage endpoint.\n\t */\n\tazureStorageEndpoint?: string;\n\n\t/**\n\t * GCP Storage bucket.\n\t */\n\tgcpStorageBucketName?: string;\n\n\t/**\n\t * GCP Storage credentials.\n\t */\n\tgcpStorageCredentials?: string;\n\n\t/**\n\t * GCP Storage endpoint.\n\t */\n\tgcpStorageEndpoint?: string;\n\n\t/**\n\t * GCP Storage project id.\n\t */\n\tgcpStorageProjectId?: string;\n\n\t/**\n\t * The type of the default vault connector: entity-storage, hashicorp.\n\t */\n\tvaultConnector?: string;\n\n\t/**\n\t * Prefix to prepend to entries in the vault.\n\t */\n\tvaultPrefix?: string;\n\n\t/**\n\t * Hashicorp Vault token.\n\t */\n\thashicorpVaultToken?: string;\n\n\t/**\n\t * Hashicorp Vault endpoint.\n\t */\n\thashicorpVaultEndpoint?: string;\n\n\t/**\n\t * The type of logging task connector, can be a comma separated list: console, entity-storage, open-telemetry, file.\n\t */\n\tloggingConnector?: string;\n\n\t/**\n\t * The batch size for the logging task, set to 1 for no batching.\n\t */\n\tloggingBatchSize?: string;\n\n\t/**\n\t * The batch flush interval in seconds for the logging task, how often to flush the logs when using batching, defaults to 5 seconds.\n\t */\n\tloggingBatchFlushInterval?: string;\n\n\t/**\n\t * Delete log entries older than this many minutes for the entity-storage logging connector.\n\t * Set to 0 to disable age-based retention.\n\t * @default 2880 (2 days)\n\t */\n\tloggingRetainFor?: string;\n\n\t/**\n\t * Keep at most this many log entries for the entity-storage logging connector.\n\t * Set to 0 to disable count-based retention.\n\t * @default 10000\n\t */\n\tloggingMaxEntries?: string;\n\n\t/**\n\t * How often the retention cleanup task runs in minutes for the entity-storage logging connector.\n\t * Set to 0 to disable periodic cleanup.\n\t * @default 5\n\t */\n\tloggingRetentionInterval?: string;\n\n\t/**\n\t * Maximum number of entries deleted per cleanup batch for the entity-storage logging connector.\n\t * Keeping this value smaller helps avoid spikes in database load.\n\t * @default 1000\n\t */\n\tloggingRetentionBatchSize?: string;\n\n\t/**\n\t * A list of components to exclude from logging, can be a comma separated list of component Class names e.g. \"ComponentA,ComponentB\".\n\t */\n\tloggingSilentComponents?: string;\n\n\t/**\n\t * The directory to write log files into when using the file logging connector. Required when TWIN_LOGGING_CONNECTOR includes \"file\".\n\t */\n\tloggingFileDirectory?: string;\n\n\t/**\n\t * The log filename when using the file logging connector, defaults to \"app.log\".\n\t */\n\tloggingFileFilename?: string;\n\n\t/**\n\t * The maximum log file size in bytes before rotation when using the file logging connector, defaults to 10485760 (10 MB). Set to 0 or negative to disable rotation.\n\t */\n\tloggingFileMaxFileSizeBytes?: string;\n\n\t/**\n\t * The number of rotated log files to retain when using the file logging connector, defaults to 5. Set to 0 or negative to keep all rotated files.\n\t */\n\tloggingFileMaxRetainedFiles?: string;\n\n\t/**\n\t * A list of components to exclude from telemetry, can be a comma separated list of component Class names e.g. \"ComponentA,ComponentB\".\n\t */\n\ttelemetrySilentComponents?: string;\n\n\t/**\n\t * The name of the OpenTelemetry logger, only required if using open-telemetry as logging connector, defaults to twin-logging.\n\t */\n\topenTelemetryLoggingLoggerName?: string;\n\n\t/**\n\t * The version of the OpenTelemetry logger, only required if using open-telemetry as logging connector, defaults to 1.0.0.\n\t */\n\topenTelemetryLoggingLoggerVersion?: string;\n\n\t/**\n\t * The OTLP endpoint URL for the OpenTelemetry logging exporter, required when using open-telemetry as logging connector, e.g. http://localhost:4318/v1/logs.\n\t */\n\topenTelemetryLoggingPrometheusEndpoint?: string;\n\n\t/**\n\t * The log record processor to use for the OpenTelemetry logging exporter, either batch or simple, defaults to batch.\n\t */\n\topenTelemetryLoggingProcessor?: string;\n\n\t/**\n\t * The type of event bus connector: local.\n\t */\n\teventBusConnector?: string;\n\n\t/**\n\t * The type of event bus component: service.\n\t */\n\teventBusComponent?: string;\n\n\t/**\n\t * The email protocol connector types, comma-separated: pop3, imap, gmail, outlook.\n\t */\n\temailProtocolConnector?: string;\n\n\t/**\n\t * AWS SES region.\n\t */\n\tawsSesRegion?: string;\n\n\t/**\n\t * AWS SES auth mode, either credentials or pod, defaults to credentials.\n\t */\n\tawsSesAuthMode?: string;\n\n\t/**\n\t * AWS SES secret access key.\n\t */\n\tawsSesSecretAccessKey?: string;\n\n\t/**\n\t * AWS SES access key id.\n\t */\n\tawsSesAccessKeyId?: string;\n\n\t/**\n\t * AWS SES endpoint.\n\t */\n\tawsSesEndpoint?: string;\n\n\t/**\n\t * The applications for the push notifications reference a separate json with @json: prefix.\n\t */\n\tawsMessagingPushNotificationApplications?: string;\n\n\t/**\n\t * The type of messaging email connector: entity-storage, aws, smtp.\n\t */\n\tmessagingEmailConnector?: string;\n\n\t/**\n\t * SMTP server hostname or IP address.\n\t */\n\tsmtpHost?: string;\n\n\t/**\n\t * SMTP server port, defaults to 587.\n\t */\n\tsmtpPort?: string;\n\n\t/**\n\t * Whether the SMTP connector uses TLS.\n\t */\n\tsmtpSecure?: string;\n\n\t/**\n\t * SMTP authentication username.\n\t */\n\tsmtpUsername?: string;\n\n\t/**\n\t * SMTP authentication password.\n\t */\n\tsmtpPassword?: string;\n\n\t/**\n\t * The type of messaging sms connector: entity-storage, aws.\n\t */\n\tmessagingSmsConnector?: string;\n\n\t/**\n\t * The type of messaging push notification connector: entity-storage, aws.\n\t */\n\tmessagingPushNotificationConnector?: string;\n\n\t/**\n\t * The type of telemetry connector, comma-separated for multiple: entity-storage, open-telemetry, silent.\n\t */\n\ttelemetryConnector?: string;\n\n\t/**\n\t * The name of the Open Telemetry meter to use, only required if using open-telemetry as telemetry connector, defaults to twin-node.\n\t */\n\topenTelemetryMeterName?: string;\n\n\t/**\n\t * The version of the Open Telemetry metrics specification to use, only required if using open-telemetry as telemetry connector, defaults to 1.0.0.\n\t */\n\topenTelemetryMeterVersion?: string;\n\n\t/**\n\t * The type of Open Telemetry metric reader to use, only required if using open-telemetry as telemetry connector, values: prometheus.\n\t */\n\topenTelemetryReader?: string;\n\n\t/**\n\t * The port to use for the Open Telemetry Prometheus metrics server, only required if using open-telemetry as telemetry connector and prometheus as reader, defaults to 9464.\n\t */\n\topenTelemetryPrometheusPort?: string;\n\n\t/**\n\t * Polling interval in seconds for the telemetry metrics collector. Defaults to 60.\n\t */\n\ttelemetryMetricsCollectorInterval?: string;\n\n\t/**\n\t * The type of telemetry metrics producers, can be a comma separated list: system, process.\n\t */\n\ttelemetryMetricsProducers?: string;\n\n\t/**\n\t * Maximum number of values retained per telemetry metric (count-based history cap). Defaults to 1440.\n\t */\n\ttelemetryMetricsProducerMaxHistory?: string;\n\n\t/**\n\t * The batch size for the telemetry connector, set to 1 to disable size-based flushing.\n\t */\n\ttelemetryBatchSize?: string;\n\n\t/**\n\t * The batch flush interval in seconds for the telemetry connector, how often to flush when using batching, defaults to 5 seconds.\n\t */\n\ttelemetryBatchFlushInterval?: string;\n\n\t/**\n\t * The maximum number of metric values to hold in the write-ahead cache for the telemetry connector. Set to 0 for unlimited.\n\t * @default 1000\n\t */\n\ttelemetryMaxCacheSize?: string;\n\n\t/**\n\t * How long in milliseconds the telemetry connector waits for its background thread to confirm\n\t * a flush before a read continues without it.\n\t * @default 30000\n\t */\n\ttelemetryFlushTimeout?: string;\n\n\t/**\n\t * How long in milliseconds the telemetry connector holds values so several share a single\n\t * background task, instead of creating one task per value. Set to 0 to disable coalescing.\n\t * @default 1000\n\t */\n\ttelemetryTaskCoalesce?: string;\n\n\t/**\n\t * How long in milliseconds the telemetry connector allows with tasks outstanding and none of\n\t * them completing before its background thread is treated as stalled and replaced. Set to 0\n\t * to disable the check.\n\t * @default 60000\n\t */\n\ttelemetryTaskStallTimeout?: string;\n\n\t/**\n\t * The maximum number of metric definitions held in the in-memory definition cache for the telemetry connector.\n\t * @default 100\n\t */\n\ttelemetryMetricDefinitionCacheCapacity?: string;\n\n\t/**\n\t * The time-to-idle in milliseconds for cached metric definitions in the telemetry connector.\n\t * @default 3600000\n\t */\n\ttelemetryMetricDefinitionCacheTtiMs?: string;\n\n\t/**\n\t * A list of components to exclude from tracing, can be a comma separated list of component Class names e.g. \"ComponentA,ComponentB\".\n\t */\n\ttracingSilentComponents?: string;\n\n\t/**\n\t * The type of tracing connector, comma-separated for multiple: entity-storage, open-telemetry, console, silent.\n\t */\n\ttracingConnector?: string;\n\n\t/**\n\t * The type of facade to activate, comma-separated for multiple: tracing. When this is not set no\n\t * facades are activated.\n\t */\n\tfacade?: string;\n\n\t/**\n\t * The factories the tracing facade is activated on, as a comma separated list of factory type names\n\t * e.g. \"component,vault\", replacing the default set rather than adding to it. Only applies when the\n\t * tracing facade is activated.\n\t */\n\ttracingFacadeFactories?: string;\n\n\t/**\n\t * Additional instance types the tracing facade is not applied to in the component factory, as a comma\n\t * separated list of regular expressions matched anywhere in the type name e.g. \"^my-tracing-service$\".\n\t * These extend the types which are always excluded, \"tracing\", \"telemetry\", \"metrics\", \"logging\" and\n\t * \"platform\", they do not replace them.\n\t */\n\ttracingFacadeComponentExcludeTypes?: string;\n\n\t/**\n\t * Additional parameter names the tracing facade does not record, as a comma separated list\n\t * e.g. \"ssn,accountNumber\". These extend the names which are always excluded, they do not\n\t * replace them.\n\t */\n\ttracingFacadeExcludeParams?: string;\n\n\t/**\n\t * Additional method names the tracing facade does not record a span for, as a comma separated\n\t * list e.g. \"health,ping\". These extend the names which are always excluded, they do not\n\t * replace them.\n\t */\n\ttracingFacadeExcludeMethods?: string;\n\n\t/**\n\t * The object values the tracing facade records, as a comma separated list of patterns matched\n\t * against the end of \"parameter\" or \"parameter.property\", where the returned value is named\n\t * \"resolved\" e.g. \"filter.id,resolved.id\". Naming the parameter records the whole object\n\t * including any secrets it holds, naming a property records only that property. Object\n\t * parameters and returned objects are omitted unless matched here.\n\t */\n\ttracingFacadeIncludeObjects?: string;\n\n\t/**\n\t * The name of the Open Telemetry tracer to use, only required if using open-telemetry as tracing connector, defaults to twin-node.\n\t */\n\topenTelemetryTracingTracerName?: string;\n\n\t/**\n\t * The version of the Open Telemetry tracing specification to use, only required if using open-telemetry as tracing connector, defaults to 1.0.0.\n\t */\n\topenTelemetryTracingTracerVersion?: string;\n\n\t/**\n\t * The OTLP HTTP endpoint to push spans to, e.g. http://localhost:4318/v1/traces. Required when using open-telemetry as tracing connector.\n\t */\n\topenTelemetryTracingEndpoint?: string;\n\n\t/**\n\t * The span processor: batch (default) or simple. Only used when TWIN_TRACING_CONNECTOR=open-telemetry.\n\t */\n\topenTelemetryTracingProcessor?: string;\n\n\t/**\n\t * The type of faucet connector: entity-storage, iota.\n\t */\n\tfaucetConnector?: string;\n\n\t/**\n\t * The type of wallet connector: entity-storage, iota.\n\t */\n\twalletConnector?: string;\n\n\t/**\n\t * The type of NFT connector: entity-storage, iota.\n\t */\n\tnftConnector?: string;\n\n\t/**\n\t * The NFT deployed package id, for custom deployments.\n\t */\n\tnftPackageId?: string;\n\n\t/**\n\t * The type of notarization connector: entity-storage, iota.\n\t */\n\tnotarizationConnector?: string;\n\n\t/**\n\t * The type of identity connector: entity-storage, iota.\n\t */\n\tidentityConnector?: string;\n\n\t/**\n\t * The index of the wallet address to use, defaults to 0.\n\t */\n\tidentityWalletAddressIndex?: string;\n\n\t/**\n\t * The TTL in milliseconds for caching resolved DIDs when using the IOTA identity connector. Omit to use the connector default.\n\t */\n\tidentityDidResolutionCacheTtl?: string;\n\n\t/**\n\t * The maximum number of DID documents to hold in the resolution cache. Only used when using the IOTA identity connector and caching is enabled.\n\t */\n\tidentityDidResolutionCacheCapacity?: string;\n\n\t/**\n\t * The mutex timeout in milliseconds for the DID resolution cache. Only used when using the IOTA identity connector and caching is enabled.\n\t */\n\tidentityDidResolutionCacheMutexTimeout?: string;\n\n\t/**\n\t * The number of times to retry resolving a DID after a write operation (create, update, or delete) to confirm propagation. Only used when using the IOTA identity connector.\n\t */\n\tidentityDidResolutionRetries?: string;\n\n\t/**\n\t * The delay in milliseconds between DID resolution retries after a write operation. Only used when using the IOTA identity connector.\n\t */\n\tidentityDidResolutionRetryDelay?: string;\n\n\t/**\n\t * The type of identity resolver connector: entity-storage, iota.\n\t */\n\tidentityResolverConnector?: string;\n\n\t/**\n\t * IOTA Faucet Endpoint.\n\t */\n\tiotaFaucetEndpoint?: string;\n\n\t/**\n\t * IOTA Node Endpoint.\n\t */\n\tiotaNodeEndpoint?: string;\n\n\t/**\n\t * IOTA network.\n\t */\n\tiotaNetwork?: string;\n\n\t/**\n\t * IOTA coin type.\n\t */\n\tiotaCoinType?: string;\n\n\t/**\n\t * IOTA gas budget, in nanos.\n\t */\n\tiotaGasBudget?: string;\n\n\t/**\n\t * IOTA gas reservation duration, in seconds.\n\t */\n\tiotaGasReservationDuration?: string;\n\n\t/**\n\t * IOTA Explorer Endpoint.\n\t */\n\tiotaExplorerEndpoint?: string;\n\n\t/**\n\t * IOTA Gas Station Endpoint.\n\t */\n\tiotaGasStationEndpoint?: string;\n\n\t/**\n\t * IOTA Gas Station Authentication Token.\n\t */\n\tiotaGasStationAuthToken?: string;\n\n\t/**\n\t * The IOTA Identity deployed package id, for custom deployments.\n\t */\n\tiotaIdentityPackageId?: string;\n\n\t/**\n\t * Universal Resolver Endpoint.\n\t */\n\tuniversalResolverEndpoint?: string;\n\n\t/**\n\t * The type of identity profile connector: entity-storage.\n\t */\n\tidentityProfileConnector?: string;\n\n\t/**\n\t * The identity verification method id to use with immutable proofs.\n\t */\n\timmutableProofVerificationMethodId?: string;\n\n\t/**\n\t * The number of times to retry a proof task when it fails, 0 to disable retries.\n\t * @default 5\n\t */\n\timmutableProofTaskRetryCount?: string;\n\n\t/**\n\t * The interval in seconds to wait between proof task retries.\n\t * @default 5\n\t */\n\timmutableProofTaskRetryInterval?: string;\n\n\t/**\n\t * The time in minutes to retain the record of a failed proof task.\n\t * Set to -1 to retain failures forever.\n\t * @default 10080\n\t */\n\timmutableProofTaskFailureRetainFor?: string;\n\n\t/**\n\t * How long in seconds the proof task worker stays idle before it shuts down.\n\t * Set to 0 to shut it down after every task, or -1 to never shut it down.\n\t * @default 60\n\t */\n\timmutableProofTaskWorkerIdleTimeout?: string;\n\n\t/**\n\t * The maximum number of proof task workers that can run in parallel.\n\t * @default 1\n\t */\n\timmutableProofTaskWorkerCount?: string;\n\n\t/**\n\t * How often in minutes the immutable proof reconciliation sweep runs.\n\t * @default 30\n\t */\n\timmutableProofSweepInterval?: string;\n\n\t/**\n\t * The minimum age in minutes before a proof with no notarization is considered stuck.\n\t * @default 180\n\t */\n\timmutableProofSweepStaleThreshold?: string;\n\n\t/**\n\t * The number of sweep attempts made before a proof is parked.\n\t * @default 5\n\t */\n\timmutableProofSweepMaxAttempts?: string;\n\n\t/**\n\t * The maximum number of proofs to re-enqueue per tenant per sweep cycle.\n\t * @default 10\n\t */\n\timmutableProofSweepBatchLimit?: string;\n\n\t/**\n\t * The minimum time in minutes between sweep attempts for the same proof.\n\t * @default 60\n\t */\n\timmutableProofSweepBackoff?: string;\n\n\t/**\n\t * ISO 8601 date-time used to treat older missing-task proofs as retryable.\n\t */\n\timmutableProofSweepAssumeRetryableBefore?: string;\n\n\t/**\n\t * The type of attestation connector: entity-storage, iota.\n\t */\n\tattestationConnector?: string;\n\n\t/**\n\t * The identity verification method id to use with attestation.\n\t */\n\tattestationVerificationMethodId?: string;\n\n\t/**\n\t * The type of the default data converters, can be a comma separated list: json, xml.\n\t */\n\tdataConverterConnectors?: string;\n\n\t/**\n\t * The type of the default data extractor, can be a comma separated list: json-path.\n\t */\n\tdataExtractorConnectors?: string;\n\n\t/**\n\t * Enable the task scheduler regardless of which other components are active, defaults to false.\n\t */\n\ttaskSchedulerEnabled?: string;\n\n\t/**\n\t * Is the auditable item graph enabled, defaults to false.\n\t */\n\tauditableItemGraphEnabled?: string;\n\n\t/**\n\t * Is the auditable item stream enabled, defaults to false.\n\t */\n\tauditableItemStreamEnabled?: string;\n\n\t/**\n\t * Is the document management enabled, defaults to false.\n\t */\n\tdocumentManagementEnabled?: string;\n\n\t/**\n\t * Enable the federated catalogue, defaults to false, automatically enabled if remote endpoint, filters or dataspace is enabled.\n\t */\n\tfederatedCatalogueEnabled?: string;\n\n\t/**\n\t * Federated catalog filters, command separated list of filters to add.\n\t */\n\tfederatedCatalogueFilters?: string;\n\n\t/**\n\t * Federated catalog remote endpoint, if set will use a REST client instead of local service.\n\t */\n\tfederatedCatalogueRemoteEndpoint?: string;\n\n\t/**\n\t * The path prefix used by the federated catalogue REST client when forwarding requests to the remote endpoint, defaults to \"federated-catalogue\".\n\t */\n\tfederatedCatalogueRestClientPathPrefix?: string;\n\n\t/**\n\t * The trust generators to add to the factory, comma separated list.\n\t */\n\ttrustGenerators?: string;\n\n\t/**\n\t * The trust verifiers to add to the factory, comma separated list.\n\t */\n\ttrustVerifiers?: string;\n\n\t/**\n\t * The verification method to use for trust identities.\n\t * Defaults to trust-assertion.\n\t */\n\ttrustVerificationMethodId?: string;\n\n\t/**\n\t * The trust time to live for generating JWTs in seconds.\n\t * Defaults to undefined for never expiring.\n\t */\n\ttrustJwtTtl?: string;\n\n\t/**\n\t * The allow lists for the trust identity verifier, comma separated list of identities.\n\t */\n\ttrustIdentitiesAllow?: string;\n\n\t/**\n\t * The deny lists for the trust identity verifier, comma separated list of identities.\n\t */\n\ttrustIdentitiesDeny?: string;\n\n\t/**\n\t * Path under which the rights management service is mounted (single source\n\t * of truth). The same value drives:\n\t * - the server route mount (via engine config)\n\t * - the PNP service's callback URL builder (`buildCallbackUrl`)\n\t * - the PNP rest-client's pathPrefix (consumer side)\n\t * Defaults to `rights-management`. Set when deploying behind a reverse proxy\n\t * with path rewriting, K8s ingress with path-based routing, or any custom\n\t * mount point.\n\t */\n\trightsManagementCallbackPath?: string;\n\n\t/**\n\t * The rights management policy information sources to add to the factory.\n\t */\n\trightsManagementPolicyInformationSources?: string;\n\n\t/**\n\t * The rights management policy negotiators sources to add to the factory.\n\t */\n\trightsManagementPolicyNegotiators?: string;\n\n\t/**\n\t * The rights management policy requesters to add to the factory.\n\t */\n\trightsManagementPolicyRequesters?: string;\n\n\t/**\n\t * The rights management policy execution actions to add to the factory.\n\t */\n\trightsManagementPolicyExecutionActions?: string;\n\n\t/**\n\t * The rights management policy enforcement processors to add to the factory.\n\t */\n\trightsManagementPolicyEnforcementProcessors?: string;\n\n\t/**\n\t * The rights management policy arbiters to add to the factory.\n\t */\n\trightsManagementPolicyArbiters?: string;\n\n\t/**\n\t * The rights management policy obligation enforcers to add to the factory.\n\t */\n\trightsManagementPolicyObligationEnforcers?: string;\n\n\t/**\n\t * Is the dataspace enabled, defaults to false.\n\t */\n\tdataspaceEnabled?: string;\n\n\t/**\n\t * The length of time to retain the activity logs for in seconds, set to -1 to keep forever.\n\t * @default 600\n\t */\n\tdataspaceRetainActivityLogsFor?: string;\n\n\t/**\n\t * The interval in seconds for cleaning up the activity logs.\n\t * @default 3600\n\t */\n\tdataspaceActivityLogsCleanupInterval?: string;\n\n\t/**\n\t * The TTL in milliseconds for the dataspace agreement cache.\n\t */\n\tdataspaceAgreementCacheTtl?: string;\n\n\t/**\n\t * The mutex timeout in milliseconds for the dataspace agreement cache.\n\t */\n\tdataspaceAgreementCacheMutexTimeout?: string;\n\n\t/**\n\t * The time in milliseconds after which an unused agreement is eligible for removal.\n\t */\n\tdataspaceAgreementUnusedThreshold?: string;\n\n\t/**\n\t * The interval in milliseconds between agreement sweep runs.\n\t */\n\tdataspaceAgreementSweepInterval?: string;\n\n\t/**\n\t * The number of times to retry failed data plane tasks.\n\t */\n\tdataspaceRetryCount?: string;\n\n\t/**\n\t * Maximum HTTP retry attempts per push delivery task execution.\n\t */\n\tdataspacePushRetryCount?: string;\n\n\t/**\n\t * Base delay in milliseconds for exponential backoff between push HTTP retries.\n\t */\n\tdataspacePushRetryBaseDelay?: string;\n\n\t/**\n\t * Timeout in milliseconds for each push delivery HTTP POST request.\n\t */\n\tdataspacePushTimeout?: string;\n\n\t/**\n\t * Interval in milliseconds between orphaned push subscription cleanup scans.\n\t */\n\tdataspacePushSubscriptionCleanupInterval?: string;\n\n\t/**\n\t * Base route path for the data plane service (path only, not full URL).\n\t * Combined with the public origin to form the `dataAddress.endpoint` sent to PULL consumers\n\t * and the inbox URL sent to PUSH providers.\n\t *\n\t * This must be the mount-point prefix of the data plane routes, NOT a specific route path.\n\t * Do NOT append sub-paths such as `/entities` or `/inbox` - those are appended automatically\n\t * by each transfer handler and by the data plane REST client.\n\t *\n\t * REQUIRED if PULL or PUSH transfers are supported.\n\t * If not specified, PULL and PUSH transfers will not be available.\n\t *\n\t * Example: \"dataspace\"\n\t */\n\tdataspaceDataPlanePath?: string;\n\n\t/**\n\t * Whether the provider immediately starts a transfer once it has been requested.\n\t * When false the transfer stays in REQUESTED until the provider explicitly calls transferStarted.\n\t * @default false\n\t */\n\tdataspaceAutoStartTransfers?: string;\n\n\t/**\n\t * How long in seconds a negotiation may sit without progress before it is treated as timed out.\n\t * @default 30\n\t */\n\tdataspaceStalledNegotiationTimeout?: string;\n\n\t/**\n\t * How long in seconds a consumer-initiated transfer may sit in REQUESTED without the provider\n\t * progressing it before it is treated as timed out.\n\t * @default 30\n\t */\n\tdataspaceStalledTransferTimeout?: string;\n\n\t/**\n\t * How long in seconds a provider transfer may stay idle before the idle policy marks it as stalled.\n\t */\n\tdataspaceProviderTransferIdleTimeout?: string;\n\n\t/**\n\t * How frequently in seconds the provider idle transfer policy sweep runs.\n\t */\n\tdataspaceProviderTransferPolicySweepInterval?: string;\n\n\t/**\n\t * Path under which the dataspace control plane is mounted (path only, not full URL).\n\t * This must match the control-plane REST mount, as it is combined with the public\n\t * origin to build the consumer's advertised callback address.\n\t * @default \"dataspace-control-plane\"\n\t */\n\tdataspaceCallbackPath?: string;\n\n\t/**\n\t * Are the health components enabled, defaults to false.\n\t */\n\thealthEnabled?: string;\n\n\t/**\n\t * The interval in seconds for performing health checks, defaults to 60.\n\t */\n\thealthInterval?: string;\n\n\t/**\n\t * The interval in seconds for performing health checks at startup, defaults to 2.\n\t * This allows components that take a long time to initialize to be healthy before the first health check is performed.\n\t */\n\thealthStartupInterval?: string;\n\n\t/**\n\t * The interval in seconds for running the application health lifecycle (init, application, teardown), defaults to 300.\n\t */\n\thealthApplicationInterval?: string;\n\n\t/**\n\t * Comma separated list of regular expressions matched against the engine component type keys,\n\t * any which match are excluded from the engine clone used by the application health background\n\t * task. Defaults to the component groups which provide no application health checks.\n\t */\n\thealthExcludeCloneComponents?: string;\n\n\t/**\n\t * The maximum number of workers to use for processing background tasks, defaults to twice the number of CPU cores.\n\t */\n\tbackgroundTaskMaxSystemWorkerCount?: string;\n\n\t/**\n\t * The interval in milliseconds to leave between background tasks, defaults to 100.\n\t */\n\tbackgroundTaskInterval?: string;\n\n\t/**\n\t * The interval in milliseconds to leave between background task retries, defaults to 5000.\n\t */\n\tbackgroundTaskRetryInterval?: string;\n\n\t/**\n\t * The interval in milliseconds between sweeps removing retained background tasks, defaults to 120000.\n\t */\n\tbackgroundTaskCleanupInterval?: string;\n\n\t/**\n\t * The time in milliseconds to wait for each handler's workers to shut down before terminating them, defaults to 5000.\n\t */\n\tbackgroundTaskWorkerShutdownTimeout?: string;\n\n\t/**\n\t * The maximum dispatches of a background task attempt before it is failed as interrupted, defaults to 3, set to -1 for no limit.\n\t */\n\tbackgroundTaskMaxDispatchCount?: string;\n\n\t/**\n\t * The type of the automation action to create, comma separate for more than one connector.\n\t * values: fetch\n\t */\n\tautomationActionTypes?: string;\n\n\t/**\n\t * The default mutex timeout in milliseconds, used when no component-specific timeout is set, defaults to 5000 if omitted.\n\t */\n\tmutexTimeoutDefault?: string;\n\n\t/**\n\t * The mutex timeout in milliseconds for the auditable item graph component.\n\t */\n\tauditableItemGraphMutexTimeout?: string;\n\n\t/**\n\t * The mutex timeout in milliseconds for the auditable item stream component.\n\t */\n\tauditableItemStreamMutexTimeout?: string;\n\n\t/**\n\t * The mutex timeout in milliseconds for the federated catalogue component.\n\t */\n\tfederatedCatalogueMutexTimeout?: string;\n\n\t/**\n\t * The mutex timeout in milliseconds for the document management component.\n\t */\n\tdocumentManagementMutexTimeout?: string;\n\n\t/**\n\t * The mutex timeout in milliseconds for the memory and file entity storage connectors.\n\t */\n\tentityStorageMutexTimeout?: string;\n\n\t/**\n\t * The mutex timeout in milliseconds for the rights management component.\n\t */\n\trightsManagementMutexTimeout?: string;\n\n\t/**\n\t * A comma separated list of additional node extensions to load, the initialiseExtension method will be called for each extension.\n\t */\n\textensions?: string;\n}\n"]}
@@ -210,6 +210,7 @@ const engineEnvironmentVariableKeysInternal = {
210
210
  immutableProofTaskRetryInterval: true,
211
211
  immutableProofTaskFailureRetainFor: true,
212
212
  immutableProofTaskWorkerIdleTimeout: true,
213
+ immutableProofTaskWorkerCount: true,
213
214
  immutableProofSweepInterval: true,
214
215
  immutableProofSweepStaleThreshold: true,
215
216
  immutableProofSweepMaxAttempts: true,
@@ -1 +1 @@
1
- {"version":3,"file":"engineEnvironmentVariableKeys.js","sourceRoot":"","sources":["../../../src/models/engineEnvironmentVariableKeys.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2026 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type { IEngineEnvironmentVariables } from \"./IEngineEnvironmentVariables.js\";\n\n// Mapped type exhaustiveness check: TypeScript requires every key of\n// Required<IEngineEnvironmentVariables> to appear here with value `true`.\n// Removing a key → compile error (\"Property X is missing\").\n// Adding an invented key → compile error (\"Object literal may only specify known properties\").\nconst engineEnvironmentVariableKeysInternal: {\n\t[K in keyof Required<IEngineEnvironmentVariables>]: true;\n} = {\n\t// global\n\tdebug: true,\n\tsilent: true,\n\tstrictEnv: true,\n\tenvAllowList: true,\n\tstorageFileRoot: true,\n\tstateFilename: true,\n\ttenantEnabled: true,\n\tschemaMigrationEnabled: true,\n\textensions: true,\n\t// entity storage\n\tentityStorageConnectorType: true,\n\tentityStorageConnectorDefault: true,\n\tentityStorageTablePrefix: true,\n\tentityStorageMutexTimeout: true,\n\t// AWS DynamoDB\n\tawsDynamodbAuthMode: true,\n\tawsDynamodbAccessKeyId: true,\n\tawsDynamodbSecretAccessKey: true,\n\tawsDynamodbRegion: true,\n\tawsDynamodbEndpoint: true,\n\tawsDynamodbConnectionTimeout: true,\n\t// Azure Cosmos DB\n\tazureCosmosdbKey: true,\n\tazureCosmosdbContainerId: true,\n\tazureCosmosdbDatabaseId: true,\n\tazureCosmosdbEndpoint: true,\n\t// GCP Firestore\n\tgcpFirestoreCollectionName: true,\n\tgcpFirestoreCredentials: true,\n\tgcpFirestoreDatabaseId: true,\n\tgcpFirestoreEndpoint: true,\n\tgcpFirestoreProjectId: true,\n\t// ScyllaDB\n\tscylladbHosts: true,\n\tscylladbKeyspace: true,\n\tscylladbLocalDataCenter: true,\n\tscylladbPort: true,\n\tscylladbPoolCoreConnectionsPerHost: true,\n\tscylladbPoolMaxRequestsPerConnection: true,\n\t// MySQL\n\tmySqlHost: true,\n\tmySqlPort: true,\n\tmySqlUser: true,\n\tmySqlPassword: true,\n\tmySqlDatabase: true,\n\tmySqlPoolConnectionLimit: true,\n\tmySqlPoolMaxIdle: true,\n\tmySqlPoolIdleTimeout: true,\n\tmySqlPoolEnableKeepAlive: true,\n\tmySqlPoolWaitForConnections: true,\n\tmySqlPoolQueueLimit: true,\n\t// MongoDB\n\tmongoDbHost: true,\n\tmongoDbPort: true,\n\tmongoDbUser: true,\n\tmongoDbPassword: true,\n\tmongoDbDatabase: true,\n\tmongoDbPoolMaxPoolSize: true,\n\tmongoDbPoolMinPoolSize: true,\n\tmongoDbPoolMaxIdleTime: true,\n\tmongoDbPoolWaitQueueTimeout: true,\n\t// PostgreSQL\n\tpostgreSqlHost: true,\n\tpostgreSqlPort: true,\n\tpostgreSqlUser: true,\n\tpostgreSqlPassword: true,\n\tpostgreSqlDatabase: true,\n\tpostgreSqlPoolMax: true,\n\tpostgreSqlPoolIdleTimeout: true,\n\tpostgreSqlPoolConnectTimeout: true,\n\tpostgreSqlPoolMaxLifetime: true,\n\t// IPFS\n\tipfsBearerToken: true,\n\tipfsApiUrl: true,\n\t// blob storage\n\tblobStorageConnectorType: true,\n\tblobStorageConnectorDefault: true,\n\tblobStorageEnableEncryption: true,\n\tblobStorageEncryptionKeyId: true,\n\tblobStoragePrefix: true,\n\t// AWS S3\n\tawsS3Region: true,\n\tawsS3BucketName: true,\n\tawsS3AuthMode: true,\n\tawsS3AccessKeyId: true,\n\tawsS3SecretAccessKey: true,\n\tawsS3Endpoint: true,\n\t// Azure Storage\n\tazureStorageAccountKey: true,\n\tazureStorageAccountName: true,\n\tazureStorageContainerName: true,\n\tazureStorageEndpoint: true,\n\t// GCP Storage\n\tgcpStorageBucketName: true,\n\tgcpStorageCredentials: true,\n\tgcpStorageEndpoint: true,\n\tgcpStorageProjectId: true,\n\t// vault\n\tvaultConnector: true,\n\tvaultPrefix: true,\n\thashicorpVaultToken: true,\n\thashicorpVaultEndpoint: true,\n\t// logging\n\tloggingConnector: true,\n\tloggingBatchSize: true,\n\tloggingBatchFlushInterval: true,\n\tloggingRetainFor: true,\n\tloggingMaxEntries: true,\n\tloggingRetentionInterval: true,\n\tloggingRetentionBatchSize: true,\n\tloggingSilentComponents: true,\n\tloggingFileDirectory: true,\n\tloggingFileFilename: true,\n\tloggingFileMaxFileSizeBytes: true,\n\tloggingFileMaxRetainedFiles: true,\n\t// open telemetry logging\n\topenTelemetryLoggingLoggerName: true,\n\topenTelemetryLoggingLoggerVersion: true,\n\topenTelemetryLoggingPrometheusEndpoint: true,\n\topenTelemetryLoggingProcessor: true,\n\t// event bus\n\teventBusConnector: true,\n\teventBusComponent: true,\n\t// email\n\temailProtocolConnector: true,\n\t// messaging\n\tmessagingEmailConnector: true,\n\tmessagingSmsConnector: true,\n\tmessagingPushNotificationConnector: true,\n\tsmtpHost: true,\n\tsmtpPort: true,\n\tsmtpSecure: true,\n\tsmtpUsername: true,\n\tsmtpPassword: true,\n\t// AWS SES\n\tawsSesRegion: true,\n\tawsSesAuthMode: true,\n\tawsSesSecretAccessKey: true,\n\tawsSesAccessKeyId: true,\n\tawsSesEndpoint: true,\n\tawsMessagingPushNotificationApplications: true,\n\t// telemetry\n\ttelemetryConnector: true,\n\topenTelemetryMeterName: true,\n\topenTelemetryMeterVersion: true,\n\topenTelemetryReader: true,\n\topenTelemetryPrometheusPort: true,\n\ttelemetryMetricsCollectorInterval: true,\n\ttelemetryMetricsProducers: true,\n\ttelemetryMetricsProducerMaxHistory: true,\n\ttelemetryBatchSize: true,\n\ttelemetryBatchFlushInterval: true,\n\ttelemetryMaxCacheSize: true,\n\ttelemetryFlushTimeout: true,\n\ttelemetryTaskCoalesce: true,\n\ttelemetryTaskStallTimeout: true,\n\ttelemetryMetricDefinitionCacheCapacity: true,\n\ttelemetryMetricDefinitionCacheTtiMs: true,\n\ttelemetrySilentComponents: true,\n\t// tracing\n\ttracingConnector: true,\n\t// facades\n\tfacade: true,\n\ttracingFacadeFactories: true,\n\ttracingFacadeComponentExcludeTypes: true,\n\ttracingFacadeExcludeParams: true,\n\ttracingFacadeExcludeMethods: true,\n\ttracingFacadeIncludeObjects: true,\n\topenTelemetryTracingTracerName: true,\n\topenTelemetryTracingTracerVersion: true,\n\topenTelemetryTracingEndpoint: true,\n\topenTelemetryTracingProcessor: true,\n\ttracingSilentComponents: true,\n\t// DLT / identity\n\tfaucetConnector: true,\n\twalletConnector: true,\n\tnftConnector: true,\n\tnftPackageId: true,\n\tnotarizationConnector: true,\n\tidentityConnector: true,\n\tidentityWalletAddressIndex: true,\n\tidentityDidResolutionCacheTtl: true,\n\tidentityDidResolutionCacheCapacity: true,\n\tidentityDidResolutionCacheMutexTimeout: true,\n\tidentityDidResolutionRetries: true,\n\tidentityDidResolutionRetryDelay: true,\n\tidentityResolverConnector: true,\n\tidentityProfileConnector: true,\n\tuniversalResolverEndpoint: true,\n\t// IOTA\n\tiotaFaucetEndpoint: true,\n\tiotaNodeEndpoint: true,\n\tiotaNetwork: true,\n\tiotaCoinType: true,\n\tiotaGasBudget: true,\n\tiotaGasReservationDuration: true,\n\tiotaExplorerEndpoint: true,\n\tiotaGasStationEndpoint: true,\n\tiotaGasStationAuthToken: true,\n\tiotaIdentityPackageId: true,\n\t// attestation / proofs\n\timmutableProofVerificationMethodId: true,\n\timmutableProofTaskRetryCount: true,\n\timmutableProofTaskRetryInterval: true,\n\timmutableProofTaskFailureRetainFor: true,\n\timmutableProofTaskWorkerIdleTimeout: true,\n\timmutableProofSweepInterval: true,\n\timmutableProofSweepStaleThreshold: true,\n\timmutableProofSweepMaxAttempts: true,\n\timmutableProofSweepBatchLimit: true,\n\timmutableProofSweepBackoff: true,\n\timmutableProofSweepAssumeRetryableBefore: true,\n\tattestationConnector: true,\n\tattestationVerificationMethodId: true,\n\t// data processing\n\tdataConverterConnectors: true,\n\tdataExtractorConnectors: true,\n\ttaskSchedulerEnabled: true,\n\t// auditable items / documents\n\tauditableItemGraphEnabled: true,\n\tauditableItemGraphMutexTimeout: true,\n\tauditableItemStreamEnabled: true,\n\tauditableItemStreamMutexTimeout: true,\n\tdocumentManagementEnabled: true,\n\tdocumentManagementMutexTimeout: true,\n\t// federated catalogue\n\tfederatedCatalogueEnabled: true,\n\tfederatedCatalogueFilters: true,\n\tfederatedCatalogueRemoteEndpoint: true,\n\tfederatedCatalogueRestClientPathPrefix: true,\n\tfederatedCatalogueMutexTimeout: true,\n\t// trust\n\ttrustGenerators: true,\n\ttrustVerifiers: true,\n\ttrustVerificationMethodId: true,\n\ttrustJwtTtl: true,\n\ttrustIdentitiesAllow: true,\n\ttrustIdentitiesDeny: true,\n\t// rights management\n\trightsManagementCallbackPath: true,\n\trightsManagementPolicyInformationSources: true,\n\trightsManagementPolicyNegotiators: true,\n\trightsManagementPolicyRequesters: true,\n\trightsManagementPolicyExecutionActions: true,\n\trightsManagementPolicyEnforcementProcessors: true,\n\trightsManagementPolicyArbiters: true,\n\trightsManagementPolicyObligationEnforcers: true,\n\trightsManagementMutexTimeout: true,\n\t// dataspace\n\tdataspaceEnabled: true,\n\tdataspaceRetainActivityLogsFor: true,\n\tdataspaceActivityLogsCleanupInterval: true,\n\tdataspaceAgreementCacheTtl: true,\n\tdataspaceAgreementCacheMutexTimeout: true,\n\tdataspaceAgreementUnusedThreshold: true,\n\tdataspaceAgreementSweepInterval: true,\n\tdataspaceRetryCount: true,\n\tdataspacePushRetryCount: true,\n\tdataspacePushRetryBaseDelay: true,\n\tdataspacePushTimeout: true,\n\tdataspacePushSubscriptionCleanupInterval: true,\n\tdataspaceDataPlanePath: true,\n\tdataspaceAutoStartTransfers: true,\n\tdataspaceStalledNegotiationTimeout: true,\n\tdataspaceStalledTransferTimeout: true,\n\tdataspaceProviderTransferIdleTimeout: true,\n\tdataspaceProviderTransferPolicySweepInterval: true,\n\tdataspaceCallbackPath: true,\n\t// health\n\thealthEnabled: true,\n\thealthInterval: true,\n\thealthStartupInterval: true,\n\thealthApplicationInterval: true,\n\thealthExcludeCloneComponents: true,\n\t// background task\n\tbackgroundTaskMaxSystemWorkerCount: true,\n\tbackgroundTaskInterval: true,\n\tbackgroundTaskRetryInterval: true,\n\tbackgroundTaskCleanupInterval: true,\n\tbackgroundTaskWorkerShutdownTimeout: true,\n\tbackgroundTaskMaxDispatchCount: true,\n\t// automation / mutex\n\tautomationActionTypes: true,\n\tmutexTimeoutDefault: true\n};\n\n/**\n * The set of camelCase property names that are valid IEngineEnvironmentVariables keys.\n */\nexport const ENGINE_ENVIRONMENT_VARIABLE_KEYS: ReadonlySet<string> = new Set(\n\tObject.keys(engineEnvironmentVariableKeysInternal)\n);\n"]}
1
+ {"version":3,"file":"engineEnvironmentVariableKeys.js","sourceRoot":"","sources":["../../../src/models/engineEnvironmentVariableKeys.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2026 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type { IEngineEnvironmentVariables } from \"./IEngineEnvironmentVariables.js\";\n\n// Mapped type exhaustiveness check: TypeScript requires every key of\n// Required<IEngineEnvironmentVariables> to appear here with value `true`.\n// Removing a key → compile error (\"Property X is missing\").\n// Adding an invented key → compile error (\"Object literal may only specify known properties\").\nconst engineEnvironmentVariableKeysInternal: {\n\t[K in keyof Required<IEngineEnvironmentVariables>]: true;\n} = {\n\t// global\n\tdebug: true,\n\tsilent: true,\n\tstrictEnv: true,\n\tenvAllowList: true,\n\tstorageFileRoot: true,\n\tstateFilename: true,\n\ttenantEnabled: true,\n\tschemaMigrationEnabled: true,\n\textensions: true,\n\t// entity storage\n\tentityStorageConnectorType: true,\n\tentityStorageConnectorDefault: true,\n\tentityStorageTablePrefix: true,\n\tentityStorageMutexTimeout: true,\n\t// AWS DynamoDB\n\tawsDynamodbAuthMode: true,\n\tawsDynamodbAccessKeyId: true,\n\tawsDynamodbSecretAccessKey: true,\n\tawsDynamodbRegion: true,\n\tawsDynamodbEndpoint: true,\n\tawsDynamodbConnectionTimeout: true,\n\t// Azure Cosmos DB\n\tazureCosmosdbKey: true,\n\tazureCosmosdbContainerId: true,\n\tazureCosmosdbDatabaseId: true,\n\tazureCosmosdbEndpoint: true,\n\t// GCP Firestore\n\tgcpFirestoreCollectionName: true,\n\tgcpFirestoreCredentials: true,\n\tgcpFirestoreDatabaseId: true,\n\tgcpFirestoreEndpoint: true,\n\tgcpFirestoreProjectId: true,\n\t// ScyllaDB\n\tscylladbHosts: true,\n\tscylladbKeyspace: true,\n\tscylladbLocalDataCenter: true,\n\tscylladbPort: true,\n\tscylladbPoolCoreConnectionsPerHost: true,\n\tscylladbPoolMaxRequestsPerConnection: true,\n\t// MySQL\n\tmySqlHost: true,\n\tmySqlPort: true,\n\tmySqlUser: true,\n\tmySqlPassword: true,\n\tmySqlDatabase: true,\n\tmySqlPoolConnectionLimit: true,\n\tmySqlPoolMaxIdle: true,\n\tmySqlPoolIdleTimeout: true,\n\tmySqlPoolEnableKeepAlive: true,\n\tmySqlPoolWaitForConnections: true,\n\tmySqlPoolQueueLimit: true,\n\t// MongoDB\n\tmongoDbHost: true,\n\tmongoDbPort: true,\n\tmongoDbUser: true,\n\tmongoDbPassword: true,\n\tmongoDbDatabase: true,\n\tmongoDbPoolMaxPoolSize: true,\n\tmongoDbPoolMinPoolSize: true,\n\tmongoDbPoolMaxIdleTime: true,\n\tmongoDbPoolWaitQueueTimeout: true,\n\t// PostgreSQL\n\tpostgreSqlHost: true,\n\tpostgreSqlPort: true,\n\tpostgreSqlUser: true,\n\tpostgreSqlPassword: true,\n\tpostgreSqlDatabase: true,\n\tpostgreSqlPoolMax: true,\n\tpostgreSqlPoolIdleTimeout: true,\n\tpostgreSqlPoolConnectTimeout: true,\n\tpostgreSqlPoolMaxLifetime: true,\n\t// IPFS\n\tipfsBearerToken: true,\n\tipfsApiUrl: true,\n\t// blob storage\n\tblobStorageConnectorType: true,\n\tblobStorageConnectorDefault: true,\n\tblobStorageEnableEncryption: true,\n\tblobStorageEncryptionKeyId: true,\n\tblobStoragePrefix: true,\n\t// AWS S3\n\tawsS3Region: true,\n\tawsS3BucketName: true,\n\tawsS3AuthMode: true,\n\tawsS3AccessKeyId: true,\n\tawsS3SecretAccessKey: true,\n\tawsS3Endpoint: true,\n\t// Azure Storage\n\tazureStorageAccountKey: true,\n\tazureStorageAccountName: true,\n\tazureStorageContainerName: true,\n\tazureStorageEndpoint: true,\n\t// GCP Storage\n\tgcpStorageBucketName: true,\n\tgcpStorageCredentials: true,\n\tgcpStorageEndpoint: true,\n\tgcpStorageProjectId: true,\n\t// vault\n\tvaultConnector: true,\n\tvaultPrefix: true,\n\thashicorpVaultToken: true,\n\thashicorpVaultEndpoint: true,\n\t// logging\n\tloggingConnector: true,\n\tloggingBatchSize: true,\n\tloggingBatchFlushInterval: true,\n\tloggingRetainFor: true,\n\tloggingMaxEntries: true,\n\tloggingRetentionInterval: true,\n\tloggingRetentionBatchSize: true,\n\tloggingSilentComponents: true,\n\tloggingFileDirectory: true,\n\tloggingFileFilename: true,\n\tloggingFileMaxFileSizeBytes: true,\n\tloggingFileMaxRetainedFiles: true,\n\t// open telemetry logging\n\topenTelemetryLoggingLoggerName: true,\n\topenTelemetryLoggingLoggerVersion: true,\n\topenTelemetryLoggingPrometheusEndpoint: true,\n\topenTelemetryLoggingProcessor: true,\n\t// event bus\n\teventBusConnector: true,\n\teventBusComponent: true,\n\t// email\n\temailProtocolConnector: true,\n\t// messaging\n\tmessagingEmailConnector: true,\n\tmessagingSmsConnector: true,\n\tmessagingPushNotificationConnector: true,\n\tsmtpHost: true,\n\tsmtpPort: true,\n\tsmtpSecure: true,\n\tsmtpUsername: true,\n\tsmtpPassword: true,\n\t// AWS SES\n\tawsSesRegion: true,\n\tawsSesAuthMode: true,\n\tawsSesSecretAccessKey: true,\n\tawsSesAccessKeyId: true,\n\tawsSesEndpoint: true,\n\tawsMessagingPushNotificationApplications: true,\n\t// telemetry\n\ttelemetryConnector: true,\n\topenTelemetryMeterName: true,\n\topenTelemetryMeterVersion: true,\n\topenTelemetryReader: true,\n\topenTelemetryPrometheusPort: true,\n\ttelemetryMetricsCollectorInterval: true,\n\ttelemetryMetricsProducers: true,\n\ttelemetryMetricsProducerMaxHistory: true,\n\ttelemetryBatchSize: true,\n\ttelemetryBatchFlushInterval: true,\n\ttelemetryMaxCacheSize: true,\n\ttelemetryFlushTimeout: true,\n\ttelemetryTaskCoalesce: true,\n\ttelemetryTaskStallTimeout: true,\n\ttelemetryMetricDefinitionCacheCapacity: true,\n\ttelemetryMetricDefinitionCacheTtiMs: true,\n\ttelemetrySilentComponents: true,\n\t// tracing\n\ttracingConnector: true,\n\t// facades\n\tfacade: true,\n\ttracingFacadeFactories: true,\n\ttracingFacadeComponentExcludeTypes: true,\n\ttracingFacadeExcludeParams: true,\n\ttracingFacadeExcludeMethods: true,\n\ttracingFacadeIncludeObjects: true,\n\topenTelemetryTracingTracerName: true,\n\topenTelemetryTracingTracerVersion: true,\n\topenTelemetryTracingEndpoint: true,\n\topenTelemetryTracingProcessor: true,\n\ttracingSilentComponents: true,\n\t// DLT / identity\n\tfaucetConnector: true,\n\twalletConnector: true,\n\tnftConnector: true,\n\tnftPackageId: true,\n\tnotarizationConnector: true,\n\tidentityConnector: true,\n\tidentityWalletAddressIndex: true,\n\tidentityDidResolutionCacheTtl: true,\n\tidentityDidResolutionCacheCapacity: true,\n\tidentityDidResolutionCacheMutexTimeout: true,\n\tidentityDidResolutionRetries: true,\n\tidentityDidResolutionRetryDelay: true,\n\tidentityResolverConnector: true,\n\tidentityProfileConnector: true,\n\tuniversalResolverEndpoint: true,\n\t// IOTA\n\tiotaFaucetEndpoint: true,\n\tiotaNodeEndpoint: true,\n\tiotaNetwork: true,\n\tiotaCoinType: true,\n\tiotaGasBudget: true,\n\tiotaGasReservationDuration: true,\n\tiotaExplorerEndpoint: true,\n\tiotaGasStationEndpoint: true,\n\tiotaGasStationAuthToken: true,\n\tiotaIdentityPackageId: true,\n\t// attestation / proofs\n\timmutableProofVerificationMethodId: true,\n\timmutableProofTaskRetryCount: true,\n\timmutableProofTaskRetryInterval: true,\n\timmutableProofTaskFailureRetainFor: true,\n\timmutableProofTaskWorkerIdleTimeout: true,\n\timmutableProofTaskWorkerCount: true,\n\timmutableProofSweepInterval: true,\n\timmutableProofSweepStaleThreshold: true,\n\timmutableProofSweepMaxAttempts: true,\n\timmutableProofSweepBatchLimit: true,\n\timmutableProofSweepBackoff: true,\n\timmutableProofSweepAssumeRetryableBefore: true,\n\tattestationConnector: true,\n\tattestationVerificationMethodId: true,\n\t// data processing\n\tdataConverterConnectors: true,\n\tdataExtractorConnectors: true,\n\ttaskSchedulerEnabled: true,\n\t// auditable items / documents\n\tauditableItemGraphEnabled: true,\n\tauditableItemGraphMutexTimeout: true,\n\tauditableItemStreamEnabled: true,\n\tauditableItemStreamMutexTimeout: true,\n\tdocumentManagementEnabled: true,\n\tdocumentManagementMutexTimeout: true,\n\t// federated catalogue\n\tfederatedCatalogueEnabled: true,\n\tfederatedCatalogueFilters: true,\n\tfederatedCatalogueRemoteEndpoint: true,\n\tfederatedCatalogueRestClientPathPrefix: true,\n\tfederatedCatalogueMutexTimeout: true,\n\t// trust\n\ttrustGenerators: true,\n\ttrustVerifiers: true,\n\ttrustVerificationMethodId: true,\n\ttrustJwtTtl: true,\n\ttrustIdentitiesAllow: true,\n\ttrustIdentitiesDeny: true,\n\t// rights management\n\trightsManagementCallbackPath: true,\n\trightsManagementPolicyInformationSources: true,\n\trightsManagementPolicyNegotiators: true,\n\trightsManagementPolicyRequesters: true,\n\trightsManagementPolicyExecutionActions: true,\n\trightsManagementPolicyEnforcementProcessors: true,\n\trightsManagementPolicyArbiters: true,\n\trightsManagementPolicyObligationEnforcers: true,\n\trightsManagementMutexTimeout: true,\n\t// dataspace\n\tdataspaceEnabled: true,\n\tdataspaceRetainActivityLogsFor: true,\n\tdataspaceActivityLogsCleanupInterval: true,\n\tdataspaceAgreementCacheTtl: true,\n\tdataspaceAgreementCacheMutexTimeout: true,\n\tdataspaceAgreementUnusedThreshold: true,\n\tdataspaceAgreementSweepInterval: true,\n\tdataspaceRetryCount: true,\n\tdataspacePushRetryCount: true,\n\tdataspacePushRetryBaseDelay: true,\n\tdataspacePushTimeout: true,\n\tdataspacePushSubscriptionCleanupInterval: true,\n\tdataspaceDataPlanePath: true,\n\tdataspaceAutoStartTransfers: true,\n\tdataspaceStalledNegotiationTimeout: true,\n\tdataspaceStalledTransferTimeout: true,\n\tdataspaceProviderTransferIdleTimeout: true,\n\tdataspaceProviderTransferPolicySweepInterval: true,\n\tdataspaceCallbackPath: true,\n\t// health\n\thealthEnabled: true,\n\thealthInterval: true,\n\thealthStartupInterval: true,\n\thealthApplicationInterval: true,\n\thealthExcludeCloneComponents: true,\n\t// background task\n\tbackgroundTaskMaxSystemWorkerCount: true,\n\tbackgroundTaskInterval: true,\n\tbackgroundTaskRetryInterval: true,\n\tbackgroundTaskCleanupInterval: true,\n\tbackgroundTaskWorkerShutdownTimeout: true,\n\tbackgroundTaskMaxDispatchCount: true,\n\t// automation / mutex\n\tautomationActionTypes: true,\n\tmutexTimeoutDefault: true\n};\n\n/**\n * The set of camelCase property names that are valid IEngineEnvironmentVariables keys.\n */\nexport const ENGINE_ENVIRONMENT_VARIABLE_KEYS: ReadonlySet<string> = new Set(\n\tObject.keys(engineEnvironmentVariableKeysInternal)\n);\n"]}
package/dist/es/node.js CHANGED
@@ -33,7 +33,7 @@ export async function run(nodeOptions, args) {
33
33
  nodeOptions ??= {};
34
34
  const serverInfo = {
35
35
  name: nodeOptions?.serverName ?? "TWIN Node",
36
- version: nodeOptions?.serverVersion ?? "0.10.1-next.3" // x-release-please-version
36
+ version: nodeOptions?.serverVersion ?? "0.10.1-next.5" // x-release-please-version
37
37
  };
38
38
  CLIDisplay.header(serverInfo.name, serverInfo.version, "🌩️ ");
39
39
  if (!Is.stringValue(nodeOptions?.executionDirectory)) {