@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
@@ -2,89 +2,114 @@
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { Storage, StoreItem } from './storage';
5
+ import { StorageDeleteOptions, StorageDeleteResults, StorageReadResults, StorageWriteOptions, StorageWriteResults, Storage, StorageV2, StoreItem } from './storage';
6
+ interface MemoryStorageState {
7
+ memory: {
8
+ [key: string]: string;
9
+ };
10
+ versions: {
11
+ [key: string]: string;
12
+ };
13
+ expirations: {
14
+ [key: string]: number;
15
+ };
16
+ etag: number;
17
+ }
18
+ declare class MemoryStorageInternals {
19
+ private static readonly states;
20
+ readonly state: MemoryStorageState;
21
+ /**
22
+ * Creates an internal in-memory provider for the selected storage contract.
23
+ */
24
+ constructor(memory?: {
25
+ [key: string]: string;
26
+ });
27
+ save(key: string, item: unknown, expiresAt?: number): string;
28
+ getVersion(key: string, value: StoreItem): string | undefined;
29
+ isExpired(key: string): boolean;
30
+ remove(key: string): void;
31
+ }
6
32
  /**
7
- * A simple in-memory storage provider that implements the Storage interface.
33
+ * A simple in-memory storage provider for development and testing.
8
34
  *
9
- * @remarks
10
- * This class provides a volatile storage solution that keeps data in memory,
11
- * which means data is lost when the process terminates. It's primarily useful for:
12
- * - Development and testing scenarios
13
- * - Simple applications that don't require data persistence across restarts
14
- * - Stateless environments where external storage isn't available
15
- *
16
- * MemoryStorage supports optimistic concurrency control through eTags and
17
- * can be used as a singleton through the {@link MemoryStorage.getSingleInstance | getSingleInstance() method} to
18
- * share state across different parts of an application.
35
+ * This class implements the legacy {@link Storage} contract. Use
36
+ * {@link MemoryStorageV2} for the structured StorageV2 contract.
19
37
  */
20
- export declare class MemoryStorage implements Storage {
21
- private memory;
38
+ export declare class MemoryStorage extends MemoryStorageInternals implements Storage {
22
39
  private static instance;
40
+ constructor(memory?: {
41
+ [key: string]: string;
42
+ });
23
43
  /**
24
- * Counter used to generate unique eTags for stored items
44
+ * Reads legacy items from process-local memory.
45
+ *
46
+ * @param keys The keys to read; must not be empty.
47
+ * @returns Existing items keyed by storage key. Missing keys are omitted and returned items
48
+ * include their legacy `eTag`.
25
49
  */
26
- private etag;
50
+ read(keys: string[]): Promise<StoreItem>;
27
51
  /**
28
- * Creates a new instance of the MemoryStorage class.
52
+ * Writes legacy items to process-local memory.
29
53
  *
30
- * @param memory An optional initial memory store to seed the storage with data
54
+ * @param changes The items to write, keyed by storage key.
55
+ * @throws If `changes` is invalid or an item supplies a stale legacy `eTag`.
31
56
  */
32
- constructor(memory?: {
33
- [k: string]: string;
34
- });
57
+ write(changes: StoreItem): Promise<void>;
35
58
  /**
36
- * Gets a single shared instance of the MemoryStorage class.
37
- *
38
- * @returns The singleton instance of MemoryStorage
39
- *
40
- * @remarks
41
- * Using this method ensures that the same storage instance is used across
42
- * the application, allowing for shared state without passing references.
59
+ * Deletes legacy items from process-local memory.
43
60
  *
61
+ * @param keys The keys to delete. Missing keys are ignored.
44
62
  */
63
+ delete(keys: string[]): Promise<void>;
45
64
  static getSingleInstance(): MemoryStorage;
65
+ }
66
+ /**
67
+ * An in-memory provider for the structured {@link StorageV2} contract.
68
+ *
69
+ * Unlike {@link MemoryStorage}, every read returns an outcome for every requested key, and every
70
+ * write and delete returns an outcome for every supplied key. Storage versions are returned
71
+ * separately from application values, so an `eTag` property in a value is preserved. Use
72
+ * {@link StorageWriteMode.CreateOnly}, {@link StorageWriteMode.Replace}, or `expectedVersion` to
73
+ * guard concurrent writes.
74
+ *
75
+ * This provider is intended for development and testing only; state is process-local.
76
+ */
77
+ export declare class MemoryStorageV2 extends StorageV2 {
78
+ private static instance;
79
+ private readonly internals;
46
80
  /**
47
- * Reads storage items from memory.
81
+ * Creates a V2 in-memory storage provider.
48
82
  *
49
- * @param keys The keys of the items to read
50
- * @returns A promise that resolves to the read items
51
- * @throws Will throw an error if keys are not provided or the array is empty
83
+ * @param memory Optional backing store to share with another in-memory storage instance.
52
84
  */
53
- read(keys: string[]): Promise<StoreItem>;
85
+ constructor(memory?: {
86
+ [key: string]: string;
87
+ });
54
88
  /**
55
- * Writes storage items to memory.
89
+ * Reads items from process-local memory.
56
90
  *
57
- * @param changes The items to write, indexed by key
58
- * @returns A promise that resolves when the write operation is complete
59
- * @throws Will throw an error if changes are not provided or if there's an eTag conflict
60
- *
61
- * @remarks
62
- * This method supports optimistic concurrency control through eTags.
63
- * If an item has an eTag, it will only be updated if the existing item
64
- * has the same eTag. If an item has an eTag of '*' or no eTag, it will
65
- * always be written regardless of the current state.
91
+ * @param keys The keys to read. Empty batches are valid.
92
+ * @returns A result for every key, with `notFound` for missing items and a separate storage
93
+ * version for successful reads.
66
94
  */
67
- write(changes: StoreItem): Promise<void>;
95
+ read<T extends object = Record<string, unknown>>(keys: string[]): Promise<StorageReadResults<T>>;
68
96
  /**
69
- * Deletes storage items from memory.
97
+ * Writes items to process-local memory with optional concurrency conditions.
70
98
  *
71
- * @param keys The keys of the items to delete
72
- * @returns A promise that resolves when the delete operation is complete
99
+ * @param changes The values to write, keyed by storage key.
100
+ * @param options Create-only, replace, or expected-version conditions.
101
+ * @returns A result for every supplied key, including `conflict` or `conditionNotMet` when a
102
+ * condition cannot be satisfied.
73
103
  */
74
- delete(keys: string[]): Promise<void>;
104
+ write<T extends object = Record<string, unknown>>(changes: Record<string, T>, options?: StorageWriteOptions): Promise<StorageWriteResults>;
75
105
  /**
76
- * Saves an item to memory with a new eTag.
77
- *
78
- * @param key The key of the item to save
79
- * @param item The item to save
80
- *
81
- * @remarks
82
- * This private method handles the details of:
83
- * - Creating a clone of the item to prevent modification of the original
84
- * - Generating a new eTag for optimistic concurrency control
85
- * - Converting the item to a JSON string for storage
106
+ * Deletes items from process-local memory with an optional version condition.
86
107
  *
87
- * @private
108
+ * @param keys The keys to delete. Empty batches are valid.
109
+ * @param options An optional expected storage version.
110
+ * @returns A result for every supplied key.
88
111
  */
89
- private saveItem;
112
+ delete(keys: string[], options?: StorageDeleteOptions): Promise<StorageDeleteResults>;
113
+ static getSingleInstance(): MemoryStorageV2;
90
114
  }
115
+ export {};
@@ -4,62 +4,67 @@
4
4
  * Licensed under the MIT License.
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.MemoryStorage = void 0;
8
- const agents_telemetry_1 = require("@microsoft/agents-telemetry");
7
+ exports.MemoryStorageV2 = exports.MemoryStorage = void 0;
9
8
  const agents_activity_1 = require("@microsoft/agents-activity");
10
- const observability_1 = require("../observability");
11
- const agents_telemetry_2 = require("@microsoft/agents-telemetry");
9
+ const agents_telemetry_1 = require("@microsoft/agents-telemetry");
12
10
  const errorHelper_1 = require("../errorHelper");
13
- const logger = (0, agents_telemetry_2.debug)('agents:memory-storage');
14
- /**
15
- * A simple in-memory storage provider that implements the Storage interface.
16
- *
17
- * @remarks
18
- * This class provides a volatile storage solution that keeps data in memory,
19
- * which means data is lost when the process terminates. It's primarily useful for:
20
- * - Development and testing scenarios
21
- * - Simple applications that don't require data persistence across restarts
22
- * - Stateless environments where external storage isn't available
23
- *
24
- * MemoryStorage supports optimistic concurrency control through eTags and
25
- * can be used as a singleton through the {@link MemoryStorage.getSingleInstance | getSingleInstance() method} to
26
- * share state across different parts of an application.
27
- */
28
- class MemoryStorage {
11
+ const observability_1 = require("../observability");
12
+ const storageExpiry_1 = require("./storageExpiry");
13
+ const storage_1 = require("./storage");
14
+ const logger = (0, agents_telemetry_1.debug)('agents:memory-storage');
15
+ class MemoryStorageInternals {
29
16
  /**
30
- * Creates a new instance of the MemoryStorage class.
31
- *
32
- * @param memory An optional initial memory store to seed the storage with data
17
+ * Creates an internal in-memory provider for the selected storage contract.
33
18
  */
34
19
  constructor(memory = {}) {
35
- this.memory = memory;
36
- /**
37
- * Counter used to generate unique eTags for stored items
38
- */
39
- this.etag = 1;
40
- }
41
- /**
42
- * Gets a single shared instance of the MemoryStorage class.
43
- *
44
- * @returns The singleton instance of MemoryStorage
45
- *
46
- * @remarks
47
- * Using this method ensures that the same storage instance is used across
48
- * the application, allowing for shared state without passing references.
49
- *
50
- */
51
- static getSingleInstance() {
52
- if (!MemoryStorage.instance) {
53
- MemoryStorage.instance = new MemoryStorage();
20
+ let state = MemoryStorageInternals.states.get(memory);
21
+ if (!state) {
22
+ state = { memory, versions: {}, expirations: {}, etag: getNextETag(memory) };
23
+ MemoryStorageInternals.states.set(memory, state);
54
24
  }
55
- return MemoryStorage.instance;
25
+ this.state = state;
26
+ }
27
+ save(key, item, expiresAt) {
28
+ const version = (this.state.etag++).toString();
29
+ this.state.memory[key] = JSON.stringify(item);
30
+ this.state.versions[key] = version;
31
+ if (expiresAt === undefined)
32
+ delete this.state.expirations[key];
33
+ else
34
+ this.state.expirations[key] = expiresAt;
35
+ return version;
36
+ }
37
+ getVersion(key, value) {
38
+ var _a;
39
+ return (_a = this.state.versions[key]) !== null && _a !== void 0 ? _a : value.eTag;
40
+ }
41
+ isExpired(key) {
42
+ const expiresAt = this.state.expirations[key];
43
+ return expiresAt !== undefined && expiresAt <= Date.now();
44
+ }
45
+ remove(key) {
46
+ delete this.state.memory[key];
47
+ delete this.state.versions[key];
48
+ delete this.state.expirations[key];
49
+ }
50
+ }
51
+ MemoryStorageInternals.states = new WeakMap();
52
+ /**
53
+ * A simple in-memory storage provider for development and testing.
54
+ *
55
+ * This class implements the legacy {@link Storage} contract. Use
56
+ * {@link MemoryStorageV2} for the structured StorageV2 contract.
57
+ */
58
+ class MemoryStorage extends MemoryStorageInternals {
59
+ constructor(memory = {}) {
60
+ super(memory);
56
61
  }
57
62
  /**
58
- * Reads storage items from memory.
63
+ * Reads legacy items from process-local memory.
59
64
  *
60
- * @param keys The keys of the items to read
61
- * @returns A promise that resolves to the read items
62
- * @throws Will throw an error if keys are not provided or the array is empty
65
+ * @param keys The keys to read; must not be empty.
66
+ * @returns Existing items keyed by storage key. Missing keys are omitted and returned items
67
+ * include their legacy `eTag`.
63
68
  */
64
69
  async read(keys) {
65
70
  return (0, agents_telemetry_1.trace)(observability_1.StorageTraceDefinitions.read, async ({ record }) => {
@@ -70,84 +75,236 @@ class MemoryStorage {
70
75
  const data = {};
71
76
  for (const key of keys) {
72
77
  logger.debug(`Reading key: ${key}`);
73
- const item = this.memory[key];
78
+ const item = this.state.memory[key];
74
79
  if (item) {
75
- data[key] = JSON.parse(item);
80
+ const value = JSON.parse(item);
81
+ const version = this.getVersion(key, value);
82
+ data[key] = version === undefined ? value : { ...value, eTag: version };
76
83
  }
77
84
  }
78
85
  return data;
79
86
  });
80
87
  }
81
88
  /**
82
- * Writes storage items to memory.
89
+ * Writes legacy items to process-local memory.
83
90
  *
84
- * @param changes The items to write, indexed by key
85
- * @returns A promise that resolves when the write operation is complete
86
- * @throws Will throw an error if changes are not provided or if there's an eTag conflict
87
- *
88
- * @remarks
89
- * This method supports optimistic concurrency control through eTags.
90
- * If an item has an eTag, it will only be updated if the existing item
91
- * has the same eTag. If an item has an eTag of '*' or no eTag, it will
92
- * always be written regardless of the current state.
91
+ * @param changes The items to write, keyed by storage key.
92
+ * @throws If `changes` is invalid or an item supplies a stale legacy `eTag`.
93
93
  */
94
94
  async write(changes) {
95
95
  return (0, agents_telemetry_1.trace)(observability_1.StorageTraceDefinitions.write, async ({ record }) => {
96
- if (!changes || changes.length === 0) {
96
+ record({ keyCount: changes ? Object.keys(changes).length : undefined });
97
+ if (!changes || typeof changes !== 'object' || Array.isArray(changes)) {
97
98
  throw agents_activity_1.ExceptionHelper.generateException(ReferenceError, errorHelper_1.Errors.StorageWriteChangesRequired);
98
99
  }
99
- record({ keyCount: changes.length });
100
100
  for (const [key, newItem] of Object.entries(changes)) {
101
101
  logger.debug(`Writing key: ${key}`);
102
- const oldItemStr = this.memory[key];
102
+ const oldItemStr = this.state.memory[key];
103
103
  if (!oldItemStr || newItem.eTag === '*' || !newItem.eTag) {
104
- this.saveItem(key, newItem);
104
+ const { eTag: _eTag, ...value } = newItem;
105
+ this.save(key, { ...value, eTag: (this.state.etag).toString() });
106
+ continue;
107
+ }
108
+ const oldItem = JSON.parse(oldItemStr);
109
+ if (newItem.eTag === this.getVersion(key, oldItem)) {
110
+ const { eTag: _eTag, ...value } = newItem;
111
+ this.save(key, { ...value, eTag: (this.state.etag).toString() });
105
112
  }
106
113
  else {
107
- const oldItem = JSON.parse(oldItemStr);
108
- if (newItem.eTag === oldItem.eTag) {
109
- this.saveItem(key, newItem);
110
- }
111
- else {
112
- throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.StorageETagConflict, undefined, { key });
113
- }
114
+ throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.StorageETagConflict, undefined, { key });
114
115
  }
115
116
  }
116
117
  });
117
118
  }
118
119
  /**
119
- * Deletes storage items from memory.
120
+ * Deletes legacy items from process-local memory.
120
121
  *
121
- * @param keys The keys of the items to delete
122
- * @returns A promise that resolves when the delete operation is complete
122
+ * @param keys The keys to delete. Missing keys are ignored.
123
123
  */
124
124
  async delete(keys) {
125
125
  return (0, agents_telemetry_1.trace)(observability_1.StorageTraceDefinitions.delete, async ({ record }) => {
126
126
  record({ keyCount: keys === null || keys === void 0 ? void 0 : keys.length });
127
127
  logger.debug(`Deleting keys: ${keys.join(', ')}`);
128
128
  for (const key of keys) {
129
- delete this.memory[key];
129
+ this.remove(key);
130
130
  }
131
131
  });
132
132
  }
133
+ static getSingleInstance() {
134
+ if (!MemoryStorage.instance)
135
+ MemoryStorage.instance = new MemoryStorage();
136
+ return MemoryStorage.instance;
137
+ }
138
+ }
139
+ exports.MemoryStorage = MemoryStorage;
140
+ /**
141
+ * An in-memory provider for the structured {@link StorageV2} contract.
142
+ *
143
+ * Unlike {@link MemoryStorage}, every read returns an outcome for every requested key, and every
144
+ * write and delete returns an outcome for every supplied key. Storage versions are returned
145
+ * separately from application values, so an `eTag` property in a value is preserved. Use
146
+ * {@link StorageWriteMode.CreateOnly}, {@link StorageWriteMode.Replace}, or `expectedVersion` to
147
+ * guard concurrent writes.
148
+ *
149
+ * This provider is intended for development and testing only; state is process-local.
150
+ */
151
+ class MemoryStorageV2 extends storage_1.StorageV2 {
133
152
  /**
134
- * Saves an item to memory with a new eTag.
153
+ * Creates a V2 in-memory storage provider.
135
154
  *
136
- * @param key The key of the item to save
137
- * @param item The item to save
155
+ * @param memory Optional backing store to share with another in-memory storage instance.
156
+ */
157
+ constructor(memory = {}) {
158
+ super();
159
+ this.internals = new MemoryStorageInternals(memory);
160
+ }
161
+ /**
162
+ * Reads items from process-local memory.
138
163
  *
139
- * @remarks
140
- * This private method handles the details of:
141
- * - Creating a clone of the item to prevent modification of the original
142
- * - Generating a new eTag for optimistic concurrency control
143
- * - Converting the item to a JSON string for storage
164
+ * @param keys The keys to read. Empty batches are valid.
165
+ * @returns A result for every key, with `notFound` for missing items and a separate storage
166
+ * version for successful reads.
167
+ */
168
+ async read(keys) {
169
+ return (0, agents_telemetry_1.trace)(observability_1.StorageTraceDefinitions.read, async ({ record }) => {
170
+ record({ keyCount: keys === null || keys === void 0 ? void 0 : keys.length });
171
+ if (!Array.isArray(keys)) {
172
+ throw agents_activity_1.ExceptionHelper.generateException(ReferenceError, errorHelper_1.Errors.StorageReadKeysRequired);
173
+ }
174
+ if (keys.some(key => typeof key !== 'string' || key.trim() === '')) {
175
+ throw agents_activity_1.ExceptionHelper.generateException(ReferenceError, errorHelper_1.Errors.StorageV2KeyRequired);
176
+ }
177
+ const results = {};
178
+ for (const key of keys) {
179
+ logger.debug(`Reading key: ${key}`);
180
+ if (this.internals.isExpired(key)) {
181
+ logger.info('Item expired, deleting from memory', { key: (0, agents_telemetry_1.redactString)(key, true) });
182
+ this.internals.remove(key);
183
+ }
184
+ const item = this.internals.state.memory[key];
185
+ if (!item) {
186
+ results[key] = { key, status: storage_1.StorageOperationStatus.NotFound };
187
+ continue;
188
+ }
189
+ const value = JSON.parse(item);
190
+ results[key] = { key, status: storage_1.StorageOperationStatus.Succeeded, value, version: this.internals.getVersion(key, value) };
191
+ }
192
+ return results;
193
+ });
194
+ }
195
+ /**
196
+ * Writes items to process-local memory with optional concurrency conditions.
197
+ *
198
+ * @param changes The values to write, keyed by storage key.
199
+ * @param options Create-only, replace, or expected-version conditions.
200
+ * @returns A result for every supplied key, including `conflict` or `conditionNotMet` when a
201
+ * condition cannot be satisfied.
202
+ */
203
+ async write(changes, options) {
204
+ return (0, agents_telemetry_1.trace)(observability_1.StorageTraceDefinitions.write, async ({ record }) => {
205
+ var _a;
206
+ record({ keyCount: changes ? Object.keys(changes).length : undefined });
207
+ if ((options === null || options === void 0 ? void 0 : options.expectedVersion) === '') {
208
+ throw agents_activity_1.ExceptionHelper.generateException(RangeError, errorHelper_1.Errors.StorageV2ExpectedVersionEmpty);
209
+ }
210
+ if (!changes || typeof changes !== 'object' || Array.isArray(changes)) {
211
+ throw agents_activity_1.ExceptionHelper.generateException(ReferenceError, errorHelper_1.Errors.StorageWriteChangesRequired);
212
+ }
213
+ if (Object.values(changes).some(value => value === null || typeof value !== 'object' || Array.isArray(value))) {
214
+ throw agents_activity_1.ExceptionHelper.generateException(TypeError, errorHelper_1.Errors.StorageV2ValueRequired);
215
+ }
216
+ if (Object.keys(changes).some(key => key.trim() === '')) {
217
+ throw agents_activity_1.ExceptionHelper.generateException(ReferenceError, errorHelper_1.Errors.StorageV2KeyRequired);
218
+ }
219
+ const results = {};
220
+ const expiresAt = (0, storageExpiry_1.getStorageWriteExpiry)(options);
221
+ const mode = (_a = options === null || options === void 0 ? void 0 : options.mode) !== null && _a !== void 0 ? _a : storage_1.StorageWriteMode.Upsert;
222
+ if (!Object.values(storage_1.StorageWriteMode).includes(mode)) {
223
+ throw agents_activity_1.ExceptionHelper.generateException(RangeError, errorHelper_1.Errors.StorageV2WriteModeUnsupported, undefined, { mode: String(mode) });
224
+ }
225
+ for (const [key, newItem] of Object.entries(changes)) {
226
+ if (this.internals.isExpired(key)) {
227
+ logger.info('Item expired, deleting from memory', { key: (0, agents_telemetry_1.redactString)(key, true) });
228
+ this.internals.remove(key);
229
+ }
230
+ const oldItemStr = this.internals.state.memory[key];
231
+ const oldItem = oldItemStr ? JSON.parse(oldItemStr) : undefined;
232
+ const currentVersion = oldItem ? this.internals.getVersion(key, oldItem) : undefined;
233
+ if (mode === storage_1.StorageWriteMode.CreateOnly && oldItemStr) {
234
+ results[key] = { key, status: storage_1.StorageOperationStatus.Conflict, version: currentVersion };
235
+ }
236
+ else if (mode === storage_1.StorageWriteMode.Replace && !oldItemStr) {
237
+ results[key] = { key, status: storage_1.StorageOperationStatus.NotFound };
238
+ }
239
+ else if ((options === null || options === void 0 ? void 0 : options.expectedVersion) !== undefined && options.expectedVersion !== currentVersion) {
240
+ results[key] = { key, status: storage_1.StorageOperationStatus.ConditionNotMet, version: currentVersion };
241
+ }
242
+ else {
243
+ results[key] = { key, status: storage_1.StorageOperationStatus.Succeeded, version: this.internals.save(key, newItem, expiresAt) };
244
+ }
245
+ }
246
+ return results;
247
+ });
248
+ }
249
+ /**
250
+ * Deletes items from process-local memory with an optional version condition.
144
251
  *
145
- * @private
252
+ * @param keys The keys to delete. Empty batches are valid.
253
+ * @param options An optional expected storage version.
254
+ * @returns A result for every supplied key.
146
255
  */
147
- saveItem(key, item) {
148
- const clone = Object.assign({}, item, { eTag: (this.etag++).toString() });
149
- this.memory[key] = JSON.stringify(clone);
256
+ async delete(keys, options) {
257
+ return (0, agents_telemetry_1.trace)(observability_1.StorageTraceDefinitions.delete, async ({ record }) => {
258
+ record({ keyCount: keys === null || keys === void 0 ? void 0 : keys.length });
259
+ if ((options === null || options === void 0 ? void 0 : options.expectedVersion) === '') {
260
+ throw agents_activity_1.ExceptionHelper.generateException(RangeError, errorHelper_1.Errors.StorageV2ExpectedVersionEmpty);
261
+ }
262
+ if (!Array.isArray(keys)) {
263
+ throw agents_activity_1.ExceptionHelper.generateException(ReferenceError, errorHelper_1.Errors.StorageReadKeysRequired);
264
+ }
265
+ if (keys.some(key => typeof key !== 'string' || key.trim() === '')) {
266
+ throw agents_activity_1.ExceptionHelper.generateException(ReferenceError, errorHelper_1.Errors.StorageV2KeyRequired);
267
+ }
268
+ const results = {};
269
+ for (const key of keys) {
270
+ if (this.internals.isExpired(key)) {
271
+ logger.info('Item expired, deleting from memory', { key: (0, agents_telemetry_1.redactString)(key, true) });
272
+ this.internals.remove(key);
273
+ }
274
+ const item = this.internals.state.memory[key];
275
+ if (!item) {
276
+ results[key] = { key, status: storage_1.StorageOperationStatus.NotFound };
277
+ continue;
278
+ }
279
+ const value = JSON.parse(item);
280
+ const version = this.internals.getVersion(key, value);
281
+ if ((options === null || options === void 0 ? void 0 : options.expectedVersion) !== undefined && options.expectedVersion !== version) {
282
+ results[key] = { key, status: storage_1.StorageOperationStatus.ConditionNotMet, version };
283
+ continue;
284
+ }
285
+ this.internals.remove(key);
286
+ results[key] = { key, status: storage_1.StorageOperationStatus.Succeeded, version };
287
+ }
288
+ return results;
289
+ });
290
+ }
291
+ static getSingleInstance() {
292
+ if (!MemoryStorageV2.instance)
293
+ MemoryStorageV2.instance = new MemoryStorageV2();
294
+ return MemoryStorageV2.instance;
150
295
  }
151
296
  }
152
- exports.MemoryStorage = MemoryStorage;
297
+ exports.MemoryStorageV2 = MemoryStorageV2;
298
+ function getNextETag(memory) {
299
+ return Object.values(memory).reduce((next, item) => {
300
+ var _a;
301
+ try {
302
+ const version = Number((_a = JSON.parse(item)) === null || _a === void 0 ? void 0 : _a.eTag);
303
+ return Number.isSafeInteger(version) && version >= next ? version + 1 : next;
304
+ }
305
+ catch {
306
+ return next;
307
+ }
308
+ }, 1);
309
+ }
153
310
  //# sourceMappingURL=memoryStorage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"memoryStorage.js","sourceRoot":"","sources":["../../../src/storage/memoryStorage.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,kEAAmD;AACnD,gEAA4D;AAC5D,oDAA0D;AAE1D,kEAAmD;AACnD,gDAAuC;AAEvC,MAAM,MAAM,GAAG,IAAA,wBAAK,EAAC,uBAAuB,CAAC,CAAA;AAE7C;;;;;;;;;;;;;GAaG;AACH;IAOE;;;;OAIG;IACH,YAAqB,MAAM,GAA4B,EAAE;QAApC,WAAM,GAAN,MAAM,CAA8B;QAVzD;;WAEG;QACK,SAAI,GAAW,CAAC,CAAA;IAOqC,CAAC;IAE9D;;;;;;;;;OASG;IACH,MAAM,CAAC,iBAAiB;QACtB,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC5B,aAAa,CAAC,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAA;QAC9C,CAAC;QACD,OAAO,aAAa,CAAC,QAAQ,CAAA;IAC/B,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,IAAI,CAAE,IAAc;QACxB,OAAO,IAAA,wBAAK,EAAC,uCAAuB,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YAC9D,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,EAAE,CAAC,CAAA;YAClC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/B,MAAM,iCAAe,CAAC,iBAAiB,CAAC,cAAc,EAAE,oBAAM,CAAC,uBAAuB,CAAC,CAAA;YACzF,CAAC;YAED,MAAM,IAAI,GAAc,EAAE,CAAA;YAC1B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,CAAC,KAAK,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAA;gBACnC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBAC7B,IAAI,IAAI,EAAE,CAAC;oBACT,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBAC9B,CAAC;YACH,CAAC;YAED,OAAO,IAAI,CAAA;QACb,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,KAAK,CAAE,OAAkB;QAC7B,OAAO,IAAA,wBAAK,EAAC,uCAAuB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YAC/D,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrC,MAAM,iCAAe,CAAC,iBAAiB,CAAC,cAAc,EAAE,oBAAM,CAAC,2BAA2B,CAAC,CAAA;YAC7F,CAAC;YACD,MAAM,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;YAEpC,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrD,MAAM,CAAC,KAAK,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAA;gBACnC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBACnC,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;oBACzD,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;gBAC7B,CAAC;qBAAM,CAAC;oBACN,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;oBACtC,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC;wBAClC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;oBAC7B,CAAC;yBAAM,CAAC;wBACN,MAAM,iCAAe,CAAC,iBAAiB,CAAC,KAAK,EAAE,oBAAM,CAAC,mBAAmB,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,CAAA;oBAChG,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,MAAM,CAAE,IAAc;QAC1B,OAAO,IAAA,wBAAK,EAAC,uCAAuB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YAChE,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,EAAE,CAAC,CAAA;YAClC,MAAM,CAAC,KAAK,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YACjD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACzB,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;;;;;;;;OAaG;IACK,QAAQ,CAAE,GAAW,EAAE,IAAa;QAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;QACzE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IAC1C,CAAC;CACF"}
1
+ {"version":3,"file":"memoryStorage.js","sourceRoot":"","sources":["../../../src/storage/memoryStorage.ts"],"names":[],"mappings":"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"}