@microsoft/agents-hosting 1.9.0-beta.3.gb2d23c1c44 → 1.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/README.md +182 -4
  2. package/dist/package.json +3 -3
  3. package/dist/src/app/agentApplication.d.ts +4 -3
  4. package/dist/src/app/agentApplication.js +24 -21
  5. package/dist/src/app/agentApplication.js.map +1 -1
  6. package/dist/src/app/agentApplicationBuilder.d.ts +9 -2
  7. package/dist/src/app/agentApplicationBuilder.js +9 -0
  8. package/dist/src/app/agentApplicationBuilder.js.map +1 -1
  9. package/dist/src/app/agentApplicationOptions.d.ts +16 -4
  10. package/dist/src/app/auth/authorization.d.ts +54 -0
  11. package/dist/src/app/auth/authorization.js +63 -2
  12. package/dist/src/app/auth/authorization.js.map +1 -1
  13. package/dist/src/app/auth/authorizationManager.d.ts +0 -8
  14. package/dist/src/app/auth/authorizationManager.js +104 -178
  15. package/dist/src/app/auth/authorizationManager.js.map +1 -1
  16. package/dist/src/app/auth/handlerStorage.d.ts +5 -3
  17. package/dist/src/app/auth/handlerStorage.js +36 -10
  18. package/dist/src/app/auth/handlerStorage.js.map +1 -1
  19. package/dist/src/app/auth/types.d.ts +2 -2
  20. package/dist/src/app/index.d.ts +1 -0
  21. package/dist/src/app/proactive/proactive.js +10 -6
  22. package/dist/src/app/proactive/proactive.js.map +1 -1
  23. package/dist/src/app/proactive/proactiveOptions.d.ts +2 -2
  24. package/dist/src/app/rateLimit.d.ts +315 -0
  25. package/dist/src/app/rateLimit.js +333 -0
  26. package/dist/src/app/rateLimit.js.map +1 -0
  27. package/dist/src/app/turnState.d.ts +6 -3
  28. package/dist/src/app/turnState.js +43 -4
  29. package/dist/src/app/turnState.js.map +1 -1
  30. package/dist/src/auth/authConfiguration.d.ts +10 -3
  31. package/dist/src/auth/authConfiguration.js +292 -259
  32. package/dist/src/auth/authConfiguration.js.map +1 -1
  33. package/dist/src/auth/delegatedTokenCredential.d.ts +29 -0
  34. package/dist/src/auth/delegatedTokenCredential.js +49 -0
  35. package/dist/src/auth/delegatedTokenCredential.js.map +1 -0
  36. package/dist/src/auth/msal/msalTokenCredential.js +1 -1
  37. package/dist/src/auth/msal/msalTokenCredential.js.map +1 -1
  38. package/dist/src/auth/settings.d.ts +8 -70
  39. package/dist/src/auth/settings.js +5 -67
  40. package/dist/src/auth/settings.js.map +1 -1
  41. package/dist/src/cloudAdapter.d.ts +5 -0
  42. package/dist/src/cloudAdapter.js +13 -103
  43. package/dist/src/cloudAdapter.js.map +1 -1
  44. package/dist/src/configuration/botFrameworkEnvironmentCompatibility.d.ts +23 -0
  45. package/dist/src/configuration/botFrameworkEnvironmentCompatibility.js +183 -0
  46. package/dist/src/configuration/botFrameworkEnvironmentCompatibility.js.map +1 -0
  47. package/dist/src/configuration/configuration.d.ts +83 -0
  48. package/dist/src/configuration/configuration.js +836 -0
  49. package/dist/src/configuration/configuration.js.map +1 -0
  50. package/dist/src/configuration/configurationSource.d.ts +57 -0
  51. package/dist/src/configuration/configurationSource.js +7 -0
  52. package/dist/src/configuration/configurationSource.js.map +1 -0
  53. package/dist/src/configuration/environmentConfiguration.d.ts +14 -0
  54. package/dist/src/configuration/environmentConfiguration.js +271 -0
  55. package/dist/src/configuration/environmentConfiguration.js.map +1 -0
  56. package/dist/src/configuration/index.d.ts +7 -0
  57. package/dist/src/configuration/index.js +14 -0
  58. package/dist/src/configuration/index.js.map +1 -0
  59. package/dist/src/configuration/jsonFileConfigurationSource.d.ts +15 -0
  60. package/dist/src/configuration/jsonFileConfigurationSource.js +58 -0
  61. package/dist/src/configuration/jsonFileConfigurationSource.js.map +1 -0
  62. package/dist/src/createCloudAdapter.d.ts +30 -5
  63. package/dist/src/createCloudAdapter.js +17 -10
  64. package/dist/src/createCloudAdapter.js.map +1 -1
  65. package/dist/src/errorHelper.js +124 -5
  66. package/dist/src/errorHelper.js.map +1 -1
  67. package/dist/src/index.d.ts +1 -0
  68. package/dist/src/index.js +1 -0
  69. package/dist/src/index.js.map +1 -1
  70. package/dist/src/observability/traces.d.ts +6 -4
  71. package/dist/src/observability/traces.js +10 -9
  72. package/dist/src/observability/traces.js.map +1 -1
  73. package/dist/src/outboundHostValidator.d.ts +4 -1
  74. package/dist/src/outboundHostValidator.js +25 -48
  75. package/dist/src/outboundHostValidator.js.map +1 -1
  76. package/dist/src/state/agentState.d.ts +8 -3
  77. package/dist/src/state/agentState.js +26 -8
  78. package/dist/src/state/agentState.js.map +1 -1
  79. package/dist/src/state/conversationState.d.ts +2 -2
  80. package/dist/src/state/conversationState.js.map +1 -1
  81. package/dist/src/state/userState.d.ts +2 -2
  82. package/dist/src/state/userState.js.map +1 -1
  83. package/dist/src/statusCodes.d.ts +5 -0
  84. package/dist/src/statusCodes.js +5 -0
  85. package/dist/src/statusCodes.js.map +1 -1
  86. package/dist/src/storage/fileStorage.d.ts +83 -68
  87. package/dist/src/storage/fileStorage.js +279 -105
  88. package/dist/src/storage/fileStorage.js.map +1 -1
  89. package/dist/src/storage/index.d.ts +1 -0
  90. package/dist/src/storage/index.js +1 -0
  91. package/dist/src/storage/index.js.map +1 -1
  92. package/dist/src/storage/memoryStorage.d.ts +85 -60
  93. package/dist/src/storage/memoryStorage.js +244 -87
  94. package/dist/src/storage/memoryStorage.js.map +1 -1
  95. package/dist/src/storage/storage.d.ts +100 -2
  96. package/dist/src/storage/storage.js +25 -0
  97. package/dist/src/storage/storage.js.map +1 -1
  98. package/dist/src/storage/storageCompatibility.d.ts +17 -0
  99. package/dist/src/storage/storageCompatibility.js +157 -0
  100. package/dist/src/storage/storageCompatibility.js.map +1 -0
  101. package/dist/src/storage/storageExpiry.d.ts +6 -0
  102. package/dist/src/storage/storageExpiry.js +20 -0
  103. package/dist/src/storage/storageExpiry.js.map +1 -0
  104. package/dist/src/utils/env.d.ts +43 -0
  105. package/dist/src/utils/env.js +42 -6
  106. package/dist/src/utils/env.js.map +1 -1
  107. package/dist/src/utils.d.ts +1 -0
  108. package/dist/src/utils.js +10 -1
  109. package/dist/src/utils.js.map +1 -1
  110. package/package.json +3 -3
  111. package/src/app/agentApplication.ts +27 -14
  112. package/src/app/agentApplicationBuilder.ts +13 -2
  113. package/src/app/agentApplicationOptions.ts +18 -4
  114. package/src/app/auth/authorization.ts +67 -2
  115. package/src/app/auth/authorizationManager.ts +126 -204
  116. package/src/app/auth/handlerStorage.ts +51 -7
  117. package/src/app/auth/types.ts +2 -2
  118. package/src/app/index.ts +7 -0
  119. package/src/app/proactive/proactive.ts +19 -9
  120. package/src/app/proactive/proactiveOptions.ts +2 -2
  121. package/src/app/rateLimit.ts +659 -0
  122. package/src/app/turnState.ts +50 -7
  123. package/src/auth/authConfiguration.ts +415 -260
  124. package/src/auth/delegatedTokenCredential.ts +49 -0
  125. package/src/auth/msal/msalTokenCredential.ts +1 -1
  126. package/src/auth/settings.ts +5 -82
  127. package/src/cloudAdapter.ts +38 -113
  128. package/src/configuration/botFrameworkEnvironmentCompatibility.ts +245 -0
  129. package/src/configuration/configuration.ts +1076 -0
  130. package/src/configuration/configurationSource.ts +76 -0
  131. package/src/configuration/environmentConfiguration.ts +377 -0
  132. package/src/configuration/index.ts +19 -0
  133. package/src/configuration/jsonFileConfigurationSource.ts +74 -0
  134. package/src/createCloudAdapter.ts +52 -9
  135. package/src/errorHelper.ts +151 -5
  136. package/src/index.ts +1 -0
  137. package/src/observability/traces.ts +8 -7
  138. package/src/outboundHostValidator.ts +37 -44
  139. package/src/state/agentState.ts +39 -13
  140. package/src/state/conversationState.ts +2 -2
  141. package/src/state/userState.ts +2 -2
  142. package/src/statusCodes.ts +6 -0
  143. package/src/storage/fileStorage.ts +299 -106
  144. package/src/storage/index.ts +1 -0
  145. package/src/storage/memoryStorage.ts +268 -85
  146. package/src/storage/storage.ts +114 -2
  147. package/src/storage/storageCompatibility.ts +185 -0
  148. package/src/storage/storageExpiry.ts +21 -0
  149. package/src/utils/env.ts +63 -0
  150. package/src/utils.ts +10 -0
@@ -7,167 +7,341 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
7
7
  return (mod && mod.__esModule) ? mod : { "default": mod };
8
8
  };
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.FileStorage = void 0;
11
- const path_1 = __importDefault(require("path"));
12
- const fs_1 = __importDefault(require("fs"));
10
+ exports.FileStorageV2 = exports.FileStorage = void 0;
11
+ const node_fs_1 = __importDefault(require("node:fs"));
12
+ const node_path_1 = __importDefault(require("node:path"));
13
+ const node_crypto_1 = require("node:crypto");
14
+ const agents_activity_1 = require("@microsoft/agents-activity");
13
15
  const agents_telemetry_1 = require("@microsoft/agents-telemetry");
16
+ const errorHelper_1 = require("../errorHelper");
14
17
  const observability_1 = require("../observability");
18
+ const storageExpiry_1 = require("./storageExpiry");
19
+ const storage_1 = require("./storage");
20
+ const logger = (0, agents_telemetry_1.debug)('agents:file-storage');
21
+ class FileStorageInternals {
22
+ constructor(folder) {
23
+ node_fs_1.default.mkdirSync(folder, { recursive: true });
24
+ this.statePath = node_path_1.default.join(folder, 'state.json');
25
+ this.versionsPath = node_path_1.default.join(folder, 'state.versions.json');
26
+ this.expirationsPath = node_path_1.default.join(folder, 'state.expirations.json');
27
+ if (!node_fs_1.default.existsSync(this.statePath))
28
+ node_fs_1.default.writeFileSync(this.statePath, '{}');
29
+ this.state = JSON.parse(node_fs_1.default.readFileSync(this.statePath, 'utf8'));
30
+ this.versions = node_fs_1.default.existsSync(this.versionsPath)
31
+ ? JSON.parse(node_fs_1.default.readFileSync(this.versionsPath, 'utf8'))
32
+ : {};
33
+ this.expirations = node_fs_1.default.existsSync(this.expirationsPath)
34
+ ? JSON.parse(node_fs_1.default.readFileSync(this.expirationsPath, 'utf8'))
35
+ : {};
36
+ }
37
+ flush() {
38
+ node_fs_1.default.writeFileSync(this.statePath, JSON.stringify(this.state, null, 2));
39
+ if (node_fs_1.default.existsSync(this.versionsPath) || Object.keys(this.versions).length > 0) {
40
+ node_fs_1.default.writeFileSync(this.versionsPath, JSON.stringify(this.versions, null, 2));
41
+ }
42
+ if (node_fs_1.default.existsSync(this.expirationsPath) || Object.keys(this.expirations).length > 0) {
43
+ node_fs_1.default.writeFileSync(this.expirationsPath, JSON.stringify(this.expirations, null, 2));
44
+ }
45
+ }
46
+ getOrCreateVersion(key) {
47
+ var _a;
48
+ const version = (_a = this.versions[key]) !== null && _a !== void 0 ? _a : (0, node_crypto_1.randomUUID)();
49
+ this.versions[key] = version;
50
+ return version;
51
+ }
52
+ isExpired(key) {
53
+ const expiresAt = this.expirations[key];
54
+ return expiresAt !== undefined && expiresAt <= Date.now();
55
+ }
56
+ remove(key) {
57
+ delete this.state[key];
58
+ delete this.versions[key];
59
+ delete this.expirations[key];
60
+ }
61
+ }
15
62
  /**
16
63
  * A file-based storage implementation that persists data to the local filesystem.
17
64
  *
18
65
  * @remarks
19
- * FileStorage stores all data in a single JSON file named 'state.json' within a specified folder.
66
+ * FileStorage stores all data in a single JSON file named `state.json` within a specified folder.
20
67
  * This implementation is suitable for development scenarios, local testing, and single-instance
21
68
  * deployments where shared state across multiple instances is not required.
22
69
  *
23
- * The storage format is a simple key-value JSON object where keys are strings and values
24
- * can be any JSON-serializable data. All operations are synchronous file I/O operations
25
- * wrapped in Promise interfaces to match the Storage contract.
70
+ * Values remain a key-value JSON object in `state.json`. V2 keeps generated storage versions in
71
+ * `state.versions.json` so a value's own `eTag` property is not changed. All operations use
72
+ * synchronous file I/O wrapped in Promise interfaces. Use {@link FileStorageV2} for the
73
+ * structured StorageV2 contract.
74
+ * V2 supports create-only, replace, and expected-version conditions.
75
+ *
76
+ * The inherited constructor creates the folder and `state.json` when needed, then loads values
77
+ * and V2 version metadata into memory. It creates `state.versions.json` on the first V2 write.
26
78
  *
27
79
  * ### Warning
28
80
  * This implementation does not provide:
29
81
  * - Thread safety for concurrent access
30
- * - Optimistic concurrency control (eTag support)
31
82
  * - Atomic operations across multiple keys
32
83
  * - Scale for large datasets
33
84
  *
34
- * For production scenarios requiring these features, consider using
35
- * database-backed storage implementations instead.
85
+ * For production scenarios requiring these features, use a database-backed storage implementation.
36
86
  *
37
87
  * @example
38
88
  * ```typescript
39
- * const storage = new FileStorage('./data');
89
+ * const legacyStorage = new FileStorage('./data')
90
+ * const storageV2 = new FileStorageV2('./data-v2')
40
91
  *
41
- * // Write some data
42
- * await storage.write({
43
- * 'user123': { name: 'John', lastSeen: new Date().toISOString() },
44
- * 'conversation456': { turn: 5, context: 'discussing weather' }
45
- * });
92
+ * await storageV2.write({
93
+ * user123: { name: 'John', lastSeen: new Date().toISOString() }
94
+ * })
46
95
  *
47
- * // Read specific keys
48
- * const data = await storage.read(['user123']);
49
- * console.log(data.user123); // { name: 'John', lastSeen: '...' }
96
+ * const result = await storageV2.read(['user123'])
97
+ * console.log(result.user123.value)
50
98
  *
51
- * // Delete data
52
- * await storage.delete(['conversation456']);
99
+ * await storageV2.delete(['user123'])
53
100
  * ```
54
- *
55
101
  */
56
- class FileStorage {
102
+ class FileStorage extends FileStorageInternals {
57
103
  /**
58
- * Creates a new FileStorage instance that stores data in the specified folder.
59
- *
60
- * @param folder The absolute or relative path to the folder where the state.json file will be stored
61
- * @throws May throw filesystem errors if the folder cannot be created or accessed
104
+ * Reads legacy items from `state.json`.
62
105
  *
63
- * @remarks
64
- * The constructor performs the following initialization steps:
65
- * 1. Creates the target folder if it doesn't exist (including parent directories)
66
- * 2. Creates an empty state.json file if it doesn't exist
67
- * 3. Loads existing data from state.json into memory for fast access
106
+ * @param keys The keys to read; must not be empty.
107
+ * @returns Existing items keyed by storage key. Missing keys are omitted.
108
+ */
109
+ async read(keys) {
110
+ return (0, agents_telemetry_1.trace)(observability_1.StorageTraceDefinitions.read, async ({ record }) => {
111
+ record({ keyCount: keys === null || keys === void 0 ? void 0 : keys.length });
112
+ if (!keys || keys.length === 0) {
113
+ throw agents_activity_1.ExceptionHelper.generateException(ReferenceError, errorHelper_1.Errors.StorageReadKeysRequired);
114
+ }
115
+ const items = Object.fromEntries(keys
116
+ .filter(key => Boolean(this.state[key]))
117
+ .map(key => [key, this.state[key]]));
118
+ return items;
119
+ });
120
+ }
121
+ /**
122
+ * Writes legacy items to `state.json`.
68
123
  *
124
+ * @param changes The items to write, keyed by storage key.
125
+ * @throws If `changes` is invalid or the file cannot be written.
69
126
  */
70
- constructor(folder) {
71
- this._folder = folder;
72
- if (!fs_1.default.existsSync(folder)) {
73
- fs_1.default.mkdirSync(folder, { recursive: true });
74
- }
75
- if (!fs_1.default.existsSync(path_1.default.join(folder, 'state.json'))) {
76
- fs_1.default.writeFileSync(path_1.default.join(folder, 'state.json'), '{}');
77
- }
78
- const data = fs_1.default.readFileSync(path_1.default.join(folder, 'state.json'), 'utf8');
79
- this._stateFile = JSON.parse(data);
127
+ async write(changes) {
128
+ return (0, agents_telemetry_1.trace)(observability_1.StorageTraceDefinitions.write, async ({ record }) => {
129
+ record({ keyCount: changes ? Object.keys(changes).length : undefined });
130
+ if (!changes || typeof changes !== 'object' || Array.isArray(changes)) {
131
+ throw agents_activity_1.ExceptionHelper.generateException(ReferenceError, errorHelper_1.Errors.StorageWriteChangesRequired);
132
+ }
133
+ Object.assign(this.state, changes);
134
+ for (const key of Object.keys(changes)) {
135
+ delete this.versions[key];
136
+ delete this.expirations[key];
137
+ }
138
+ this.flush();
139
+ });
80
140
  }
81
141
  /**
82
- * Reads store items from the filesystem storage.
142
+ * Deletes legacy items from `state.json`.
83
143
  *
84
- * @param keys Array of keys to read from storage
85
- * @returns Promise resolving to an object containing the requested items (keys that don't exist are omitted)
86
- * @throws ReferenceError if keys array is empty or undefined
144
+ * @param keys The keys to delete; must not be empty. Missing keys are ignored.
145
+ */
146
+ async delete(keys) {
147
+ return (0, agents_telemetry_1.trace)(observability_1.StorageTraceDefinitions.delete, async ({ record }) => {
148
+ record({ keyCount: keys === null || keys === void 0 ? void 0 : keys.length });
149
+ if (!keys || keys.length === 0) {
150
+ throw agents_activity_1.ExceptionHelper.generateException(ReferenceError, errorHelper_1.Errors.StorageDeleteKeysRequired);
151
+ }
152
+ for (const key of keys) {
153
+ this.remove(key);
154
+ }
155
+ this.flush();
156
+ });
157
+ }
158
+ }
159
+ exports.FileStorage = FileStorage;
160
+ /**
161
+ * A file-backed provider for the structured {@link StorageV2} contract.
162
+ *
163
+ * This is the V2 counterpart to {@link FileStorage}. Values are stored in `state.json`, while
164
+ * generated storage versions are stored separately in `state.versions.json`; an `eTag` property
165
+ * in an application value is therefore preserved. Reads and mutations return a result for every
166
+ * requested key and support create-only, replace, and expected-version conditions.
167
+ *
168
+ * Like {@link FileStorage}, this provider is for development, local testing, and single-instance
169
+ * deployments. It does not provide cross-process concurrency or multi-key atomicity.
170
+ */
171
+ class FileStorageV2 extends storage_1.StorageV2 {
172
+ /**
173
+ * Creates a V2 file storage provider.
87
174
  *
88
- * @remarks
89
- * This method reads from the in-memory cache that was loaded during construction,
90
- * making it very fast but potentially returning stale data if the file was
91
- * modified by external processes.
175
+ * @param folder The absolute or relative folder where `state.json` is stored.
176
+ * @throws May throw filesystem errors if the folder or state file cannot be created or read.
177
+ */
178
+ constructor(folder) {
179
+ super();
180
+ this.internals = new FileStorageInternals(folder);
181
+ }
182
+ /**
183
+ * Reads items and their stored versions from the local state files.
92
184
  *
185
+ * @param keys The keys to read. Empty batches are valid.
186
+ * @returns A result for every key, with `notFound` for missing items. Returned values are cloned.
93
187
  */
94
- read(keys) {
188
+ async read(keys) {
95
189
  return (0, agents_telemetry_1.trace)(observability_1.StorageTraceDefinitions.read, async ({ record }) => {
96
190
  record({ keyCount: keys === null || keys === void 0 ? void 0 : keys.length });
97
- return new Promise((resolve, reject) => {
98
- if (!keys || keys.length === 0) {
99
- reject(new ReferenceError('Keys are required when reading.'));
100
- }
101
- else {
102
- const data = {};
103
- for (const key of keys) {
104
- const item = this._stateFile[key];
105
- if (item) {
106
- data[key] = item;
107
- }
191
+ validateV2Keys(keys);
192
+ let createdVersion = false;
193
+ const results = Object.fromEntries(keys.map(key => {
194
+ if (!Object.prototype.hasOwnProperty.call(this.internals.state, key) || this.internals.isExpired(key)) {
195
+ if (this.internals.isExpired(key)) {
196
+ logger.info('Item expired, deleting from storage', { key: (0, agents_telemetry_1.redactString)(key, true) });
197
+ this.internals.remove(key);
198
+ createdVersion = true;
108
199
  }
109
- resolve(data);
200
+ return [key, { key, status: storage_1.StorageOperationStatus.NotFound }];
110
201
  }
111
- });
202
+ const value = structuredClone(this.internals.state[key]);
203
+ const version = this.internals.versions[key];
204
+ createdVersion || (createdVersion = version === undefined);
205
+ return [key, {
206
+ key,
207
+ status: storage_1.StorageOperationStatus.Succeeded,
208
+ value,
209
+ version: version !== null && version !== void 0 ? version : this.internals.getOrCreateVersion(key),
210
+ }];
211
+ }));
212
+ if (createdVersion)
213
+ this.internals.flush();
214
+ return results;
112
215
  });
113
216
  }
114
217
  /**
115
- * Writes store items to the filesystem storage.
116
- *
117
- * @param changes Object containing key-value pairs to write to storage
118
- * @returns Promise that resolves when the write operation completes
119
- *
120
- * @remarks
121
- * This method updates both the in-memory cache and writes the entire state
122
- * to the state.json file. The file is written with pretty-printing (2-space indentation)
123
- * for better readability during development and debugging.
124
- *
125
- * > [!NOTE]
126
- * > This implementation does not support eTag-based optimistic concurrency control.
127
- * > Any eTag values in the changes object are ignored.
218
+ * Writes cloned items and generated versions to the local state files.
128
219
  *
220
+ * @param changes The values to write, keyed by storage key.
221
+ * @param options Create-only, replace, or expected-version conditions.
222
+ * @returns A result for every supplied key, including concurrency-condition outcomes.
129
223
  */
130
- write(changes) {
224
+ async write(changes, options) {
131
225
  return (0, agents_telemetry_1.trace)(observability_1.StorageTraceDefinitions.write, async ({ record }) => {
132
- const keys = Object.keys(changes);
133
- record({ keyCount: keys === null || keys === void 0 ? void 0 : keys.length });
134
- for (const key of keys) {
135
- this._stateFile[key] = changes[key];
226
+ var _a;
227
+ record({ keyCount: changes ? Object.keys(changes).length : undefined });
228
+ validateExpectedVersion(options === null || options === void 0 ? void 0 : options.expectedVersion);
229
+ validateV2Changes(changes);
230
+ const results = {};
231
+ const expiresAt = (0, storageExpiry_1.getStorageWriteExpiry)(options);
232
+ const mode = (_a = options === null || options === void 0 ? void 0 : options.mode) !== null && _a !== void 0 ? _a : storage_1.StorageWriteMode.Upsert;
233
+ validateWriteMode(mode);
234
+ let changed = false;
235
+ let createdVersion = false;
236
+ for (const [key, value] of Object.entries(changes)) {
237
+ if (this.internals.isExpired(key)) {
238
+ logger.info('Item expired, deleting from storage', { key: (0, agents_telemetry_1.redactString)(key, true) });
239
+ this.internals.remove(key);
240
+ changed = true;
241
+ }
242
+ const current = this.internals.state[key];
243
+ createdVersion || (createdVersion = current !== undefined && this.internals.versions[key] === undefined);
244
+ const currentVersion = current === undefined
245
+ ? undefined
246
+ : this.internals.getOrCreateVersion(key);
247
+ if (mode === storage_1.StorageWriteMode.CreateOnly && current !== undefined) {
248
+ results[key] = { key, status: storage_1.StorageOperationStatus.Conflict, version: currentVersion };
249
+ }
250
+ else if (mode === storage_1.StorageWriteMode.Replace && current === undefined) {
251
+ results[key] = { key, status: storage_1.StorageOperationStatus.NotFound };
252
+ }
253
+ else if ((options === null || options === void 0 ? void 0 : options.expectedVersion) !== undefined && options.expectedVersion !== currentVersion) {
254
+ results[key] = { key, status: storage_1.StorageOperationStatus.ConditionNotMet, version: currentVersion };
255
+ }
256
+ else {
257
+ const version = (0, node_crypto_1.randomUUID)();
258
+ this.internals.state[key] = structuredClone(value);
259
+ this.internals.versions[key] = version;
260
+ if (expiresAt === undefined)
261
+ delete this.internals.expirations[key];
262
+ else
263
+ this.internals.expirations[key] = expiresAt;
264
+ results[key] = { key, status: storage_1.StorageOperationStatus.Succeeded, version };
265
+ changed = true;
266
+ }
136
267
  }
137
- fs_1.default.writeFileSync(this._folder + '/state.json', JSON.stringify(this._stateFile, null, 2));
268
+ if (changed || createdVersion)
269
+ this.internals.flush();
270
+ return results;
138
271
  });
139
272
  }
140
273
  /**
141
- * Deletes store items from the filesystem storage.
142
- *
143
- * @param keys Array of keys to delete from storage
144
- * @returns Promise that resolves when the delete operation completes
145
- *
146
- * @throws ReferenceError if keys array is empty or undefined
147
- *
148
- * @remarks
149
- * This method removes the specified keys from both the in-memory cache
150
- * and writes the updated state to the state.json file. Keys that don't
151
- * exist in storage are silently ignored.
274
+ * Deletes items and their versions from the local state files.
152
275
  *
276
+ * @param keys The keys to delete. Empty batches are valid.
277
+ * @param options An optional expected storage version.
278
+ * @returns A result for every supplied key.
153
279
  */
154
- delete(keys) {
280
+ async delete(keys, options) {
155
281
  return (0, agents_telemetry_1.trace)(observability_1.StorageTraceDefinitions.delete, async ({ record }) => {
156
282
  record({ keyCount: keys === null || keys === void 0 ? void 0 : keys.length });
157
- return new Promise((resolve, reject) => {
158
- if (!keys || keys.length === 0) {
159
- reject(new ReferenceError('Keys are required when deleting.'));
283
+ validateExpectedVersion(options === null || options === void 0 ? void 0 : options.expectedVersion);
284
+ validateV2Keys(keys);
285
+ const results = {};
286
+ let changed = false;
287
+ let createdVersion = false;
288
+ for (const key of keys) {
289
+ if (this.internals.isExpired(key)) {
290
+ logger.info('Item expired, deleting from storage', { key: (0, agents_telemetry_1.redactString)(key, true) });
291
+ this.internals.remove(key);
292
+ changed = true;
293
+ }
294
+ const current = this.internals.state[key];
295
+ createdVersion || (createdVersion = current !== undefined && this.internals.versions[key] === undefined);
296
+ const currentVersion = current === undefined
297
+ ? undefined
298
+ : this.internals.getOrCreateVersion(key);
299
+ if (current === undefined) {
300
+ results[key] = { key, status: storage_1.StorageOperationStatus.NotFound };
301
+ }
302
+ else if ((options === null || options === void 0 ? void 0 : options.expectedVersion) !== undefined && options.expectedVersion !== currentVersion) {
303
+ results[key] = { key, status: storage_1.StorageOperationStatus.ConditionNotMet, version: currentVersion };
160
304
  }
161
305
  else {
162
- for (const key of keys) {
163
- delete this._stateFile[key];
164
- }
165
- fs_1.default.writeFileSync(this._folder + '/state.json', JSON.stringify(this._stateFile, null, 2));
166
- resolve(undefined);
306
+ this.internals.remove(key);
307
+ results[key] = { key, status: storage_1.StorageOperationStatus.Succeeded, version: currentVersion };
308
+ changed = true;
167
309
  }
168
- });
310
+ }
311
+ if (changed || createdVersion)
312
+ this.internals.flush();
313
+ return results;
169
314
  });
170
315
  }
171
316
  }
172
- exports.FileStorage = FileStorage;
317
+ exports.FileStorageV2 = FileStorageV2;
318
+ function validateV2Keys(keys) {
319
+ if (!Array.isArray(keys)) {
320
+ throw agents_activity_1.ExceptionHelper.generateException(ReferenceError, errorHelper_1.Errors.StorageReadKeysRequired);
321
+ }
322
+ if (keys.some(key => typeof key !== 'string' || key.trim() === '')) {
323
+ throw agents_activity_1.ExceptionHelper.generateException(ReferenceError, errorHelper_1.Errors.StorageV2KeyRequired);
324
+ }
325
+ }
326
+ function validateV2Changes(changes) {
327
+ if (changes === null || typeof changes !== 'object' || Array.isArray(changes)) {
328
+ throw agents_activity_1.ExceptionHelper.generateException(ReferenceError, errorHelper_1.Errors.StorageWriteChangesRequired);
329
+ }
330
+ if (Object.keys(changes).some(key => key.trim() === '')) {
331
+ throw agents_activity_1.ExceptionHelper.generateException(ReferenceError, errorHelper_1.Errors.StorageV2KeyRequired);
332
+ }
333
+ if (Object.values(changes).some(value => value === null || typeof value !== 'object' || Array.isArray(value))) {
334
+ throw agents_activity_1.ExceptionHelper.generateException(TypeError, errorHelper_1.Errors.StorageV2ValueRequired);
335
+ }
336
+ }
337
+ function validateExpectedVersion(expectedVersion) {
338
+ if (expectedVersion === '') {
339
+ throw agents_activity_1.ExceptionHelper.generateException(RangeError, errorHelper_1.Errors.StorageV2ExpectedVersionEmpty);
340
+ }
341
+ }
342
+ function validateWriteMode(mode) {
343
+ if (!Object.values(storage_1.StorageWriteMode).includes(mode)) {
344
+ throw agents_activity_1.ExceptionHelper.generateException(RangeError, errorHelper_1.Errors.StorageV2WriteModeUnsupported, undefined, { mode: String(mode) });
345
+ }
346
+ }
173
347
  //# sourceMappingURL=fileStorage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fileStorage.js","sourceRoot":"","sources":["../../../src/storage/fileStorage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fileStorage.js","sourceRoot":"","sources":["../../../src/storage/fileStorage.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
1
  export * from './storage';
2
+ export * from './storageExpiry';
2
3
  export * from './memoryStorage';
3
4
  export * from './fileStorage';
@@ -15,6 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./storage"), exports);
18
+ __exportStar(require("./storageExpiry"), exports);
18
19
  __exportStar(require("./memoryStorage"), exports);
19
20
  __exportStar(require("./fileStorage"), exports);
20
21
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/storage/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAAyB;AACzB,kDAA+B;AAC/B,gDAA6B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/storage/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAAyB;AACzB,kDAA+B;AAC/B,kDAA+B;AAC/B,gDAA6B"}