@psnext/slingcli 2.5.20260607-2 → 2.5.20260615-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 (205) hide show
  1. package/node_modules/@aws-sdk/core/dist-cjs/index.js +47 -2297
  2. package/node_modules/@aws-sdk/core/dist-es/index.js +3 -3
  3. package/node_modules/@aws-sdk/core/dist-types/index.d.ts +5 -5
  4. package/node_modules/@aws-sdk/core/dist-types/ts3.4/index.d.ts +5 -5
  5. package/node_modules/@aws-sdk/core/package.json +8 -8
  6. package/node_modules/@aws-sdk/credential-provider-env/package.json +4 -4
  7. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/package.json +7 -7
  8. package/node_modules/@aws-sdk/credential-provider-http/package.json +6 -5
  9. package/node_modules/@aws-sdk/credential-provider-ini/package.json +11 -11
  10. package/node_modules/@aws-sdk/credential-provider-login/package.json +5 -5
  11. package/node_modules/@aws-sdk/credential-provider-node/package.json +9 -9
  12. package/node_modules/@aws-sdk/credential-provider-process/package.json +4 -4
  13. package/node_modules/@aws-sdk/credential-provider-sso/dist-cjs/index.js +4 -1
  14. package/node_modules/@aws-sdk/credential-provider-sso/dist-es/resolveSSOCredentials.js +4 -1
  15. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/package.json +5 -5
  16. package/node_modules/@aws-sdk/credential-provider-sso/package.json +9 -7
  17. package/node_modules/@aws-sdk/credential-provider-web-identity/package.json +5 -5
  18. package/node_modules/@aws-sdk/eventstream-handler-node/package.json +3 -3
  19. package/node_modules/@aws-sdk/middleware-eventstream/package.json +3 -3
  20. package/node_modules/@aws-sdk/middleware-websocket/package.json +5 -5
  21. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/cognito-identity/index.js +1 -1
  22. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/signin/index.js +1 -1
  23. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso/index.js +1 -1
  24. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc/index.js +1 -1
  25. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/index.js +1 -1
  26. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/package.json +7 -7
  27. package/node_modules/@aws-sdk/nested-clients/package.json +6 -6
  28. package/node_modules/@aws-sdk/signature-v4-multi-region/package.json +7 -6
  29. package/node_modules/@aws-sdk/types/package.json +2 -2
  30. package/node_modules/@aws-sdk/util-locate-window/package.json +2 -2
  31. package/node_modules/@aws-sdk/xml-builder/package.json +2 -2
  32. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +8 -0
  33. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js +1 -1
  34. package/node_modules/@earendil-works/pi-agent-core/package.json +2 -2
  35. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js +6 -6
  36. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js +906 -873
  37. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.js +25 -8
  38. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js +19 -12
  39. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.js +1 -0
  40. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.js +18 -12
  41. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.js +2 -1
  42. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses-shared.js +2 -1
  43. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.js +1 -0
  44. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/openai-codex.js +1 -1
  45. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js +3 -2
  46. package/node_modules/@earendil-works/pi-ai/package.json +1 -1
  47. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/args.js +3 -5
  48. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/project-trust.js +48 -0
  49. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/startup-ui.js +133 -0
  50. package/node_modules/@earendil-works/pi-coding-agent/dist/config.js +14 -3
  51. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-runtime.js +4 -1
  52. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-services.js +2 -2
  53. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.js +9 -2
  54. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/utils.js +1 -1
  55. package/node_modules/@earendil-works/pi-coding-agent/dist/core/experimental.js +4 -0
  56. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/loader.js +4 -4
  57. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.js +34 -0
  58. package/node_modules/@earendil-works/pi-coding-agent/dist/core/index.js +1 -0
  59. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-registry.js +5 -57
  60. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-resolver.js +41 -5
  61. package/node_modules/@earendil-works/pi-coding-agent/dist/core/package-manager.js +31 -17
  62. package/node_modules/@earendil-works/pi-coding-agent/dist/core/project-trust.js +58 -0
  63. package/node_modules/@earendil-works/pi-coding-agent/dist/core/prompt-templates.js +24 -26
  64. package/node_modules/@earendil-works/pi-coding-agent/dist/core/resolve-config-value.js +0 -4
  65. package/node_modules/@earendil-works/pi-coding-agent/dist/core/resource-loader.js +121 -54
  66. package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.js +11 -2
  67. package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.js +26 -0
  68. package/node_modules/@earendil-works/pi-coding-agent/dist/core/trust-manager.js +89 -17
  69. package/node_modules/@earendil-works/pi-coding-agent/dist/index.js +2 -2
  70. package/node_modules/@earendil-works/pi-coding-agent/dist/main.js +65 -76
  71. package/node_modules/@earendil-works/pi-coding-agent/dist/migrations.js +1 -118
  72. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/first-time-setup.js +103 -0
  73. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/index.js +1 -0
  74. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/login-dialog.js +7 -1
  75. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +20 -0
  76. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/tree-selector.js +87 -12
  77. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/trust-selector.js +23 -18
  78. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.js +104 -30
  79. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/theme/theme.js +19 -41
  80. package/node_modules/@earendil-works/pi-coding-agent/dist/package-manager-cli.js +72 -18
  81. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/changelog.js +78 -0
  82. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/version-check.js +4 -27
  83. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/LICENSE +15 -0
  84. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/bin/semver.js +195 -0
  85. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/classes/comparator.js +143 -0
  86. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/classes/index.js +7 -0
  87. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/classes/range.js +557 -0
  88. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/classes/semver.js +333 -0
  89. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/functions/clean.js +8 -0
  90. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/functions/cmp.js +54 -0
  91. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/functions/coerce.js +62 -0
  92. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/functions/compare-build.js +9 -0
  93. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/functions/compare-loose.js +5 -0
  94. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/functions/compare.js +7 -0
  95. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/functions/diff.js +60 -0
  96. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/functions/eq.js +5 -0
  97. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/functions/gt.js +5 -0
  98. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/functions/gte.js +5 -0
  99. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/functions/inc.js +21 -0
  100. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/functions/lt.js +5 -0
  101. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/functions/lte.js +5 -0
  102. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/functions/major.js +5 -0
  103. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/functions/minor.js +5 -0
  104. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/functions/neq.js +5 -0
  105. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/functions/parse.js +18 -0
  106. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/functions/patch.js +5 -0
  107. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/functions/prerelease.js +8 -0
  108. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/functions/rcompare.js +5 -0
  109. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/functions/rsort.js +5 -0
  110. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/functions/satisfies.js +12 -0
  111. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/functions/sort.js +5 -0
  112. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/functions/truncate.js +48 -0
  113. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/functions/valid.js +8 -0
  114. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/index.js +93 -0
  115. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/internal/constants.js +37 -0
  116. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/internal/debug.js +11 -0
  117. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/internal/identifiers.js +29 -0
  118. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/internal/lrucache.js +42 -0
  119. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/internal/parse-options.js +17 -0
  120. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/internal/re.js +223 -0
  121. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/package.json +78 -0
  122. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/preload.js +4 -0
  123. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/range.bnf +17 -0
  124. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/ranges/gtr.js +6 -0
  125. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/ranges/intersects.js +9 -0
  126. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/ranges/ltr.js +6 -0
  127. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/ranges/max-satisfying.js +27 -0
  128. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/ranges/min-satisfying.js +26 -0
  129. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/ranges/min-version.js +63 -0
  130. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/ranges/outside.js +82 -0
  131. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/ranges/simplify.js +49 -0
  132. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/ranges/subset.js +249 -0
  133. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/ranges/to-comparators.js +10 -0
  134. package/node_modules/@earendil-works/pi-coding-agent/node_modules/semver/ranges/valid.js +13 -0
  135. package/node_modules/@earendil-works/pi-coding-agent/npm-shrinkwrap.json +25 -12
  136. package/node_modules/@earendil-works/pi-coding-agent/package.json +6 -8
  137. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js +102 -43
  138. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.js +11 -1
  139. package/node_modules/@earendil-works/pi-tui/dist/fuzzy.js +2 -2
  140. package/node_modules/@earendil-works/pi-tui/dist/index.js +2 -0
  141. package/node_modules/@earendil-works/pi-tui/dist/terminal-colors.js +51 -0
  142. package/node_modules/@earendil-works/pi-tui/dist/terminal.js +38 -77
  143. package/node_modules/@earendil-works/pi-tui/dist/tui.js +145 -21
  144. package/node_modules/@earendil-works/pi-tui/dist/utils.js +44 -16
  145. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  146. package/node_modules/@nodable/entities/package.json +4 -1
  147. package/node_modules/@nodable/entities/src/EntityDecoder.js +104 -3
  148. package/node_modules/@nodable/entities/src/index.d.ts +77 -0
  149. package/node_modules/@nodable/entities/src/index.js +1 -1
  150. package/node_modules/@smithy/core/dist-cjs/submodules/retry/index.browser.js +3 -3
  151. package/node_modules/@smithy/core/dist-cjs/submodules/retry/index.js +3 -3
  152. package/node_modules/@smithy/core/dist-es/submodules/retry/middleware-retry/retry-pre-sra-deprecated/StandardRetryStrategy.js +2 -2
  153. package/node_modules/@smithy/core/dist-es/submodules/retry/util-retry/DefaultRateLimiter.js +1 -1
  154. package/node_modules/@smithy/core/package.json +17 -17
  155. package/node_modules/@smithy/credential-provider-imds/package.json +6 -6
  156. package/node_modules/@smithy/fetch-http-handler/package.json +9 -9
  157. package/node_modules/@smithy/signature-v4/package.json +6 -6
  158. package/node_modules/@smithy/types/package.json +9 -9
  159. package/node_modules/@types/node/README.md +1 -1
  160. package/node_modules/@types/node/http2.d.ts +1 -0
  161. package/node_modules/@types/node/package.json +2 -2
  162. package/node_modules/anynum/LICENSE +21 -0
  163. package/node_modules/anynum/README.md +142 -0
  164. package/node_modules/anynum/anynum.js +135 -0
  165. package/node_modules/anynum/digitTable.js +116 -0
  166. package/node_modules/anynum/package.json +42 -0
  167. package/node_modules/protobufjs/dist/light/protobuf.js +161 -203
  168. package/node_modules/protobufjs/dist/light/protobuf.js.map +1 -1
  169. package/node_modules/protobufjs/dist/light/protobuf.min.js +3 -3
  170. package/node_modules/protobufjs/dist/light/protobuf.min.js.map +1 -1
  171. package/node_modules/protobufjs/dist/minimal/protobuf.js +34 -77
  172. package/node_modules/protobufjs/dist/minimal/protobuf.js.map +1 -1
  173. package/node_modules/protobufjs/dist/minimal/protobuf.min.js +3 -3
  174. package/node_modules/protobufjs/dist/minimal/protobuf.min.js.map +1 -1
  175. package/node_modules/protobufjs/dist/protobuf.js +181 -223
  176. package/node_modules/protobufjs/dist/protobuf.js.map +1 -1
  177. package/node_modules/protobufjs/dist/protobuf.min.js +3 -3
  178. package/node_modules/protobufjs/dist/protobuf.min.js.map +1 -1
  179. package/node_modules/protobufjs/index.d.ts +0 -8
  180. package/node_modules/protobufjs/package.json +2 -3
  181. package/node_modules/protobufjs/src/converter.js +5 -4
  182. package/node_modules/protobufjs/src/decoder.js +1 -1
  183. package/node_modules/protobufjs/src/service.js +5 -7
  184. package/node_modules/protobufjs/src/type.js +3 -1
  185. package/node_modules/protobufjs/src/util/minimal.js +1 -4
  186. package/node_modules/protobufjs/src/verifier.js +1 -1
  187. package/node_modules/semver/classes/range.js +11 -2
  188. package/node_modules/semver/package.json +2 -2
  189. package/node_modules/strnum/CHANGELOG.md +8 -0
  190. package/node_modules/strnum/README.md +9 -0
  191. package/node_modules/strnum/package.json +4 -1
  192. package/node_modules/strnum/strnum.js +9 -1
  193. package/package.json +6 -6
  194. package/slingshot/index.js +260 -258
  195. package/node_modules/@protobufjs/inquire/CHANGELOG.md +0 -8
  196. package/node_modules/@protobufjs/inquire/LICENSE +0 -26
  197. package/node_modules/@protobufjs/inquire/README.md +0 -13
  198. package/node_modules/@protobufjs/inquire/index.d.ts +0 -10
  199. package/node_modules/@protobufjs/inquire/index.js +0 -38
  200. package/node_modules/@protobufjs/inquire/package.json +0 -21
  201. package/node_modules/@protobufjs/inquire/tests/data/array.js +0 -1
  202. package/node_modules/@protobufjs/inquire/tests/data/emptyArray.js +0 -1
  203. package/node_modules/@protobufjs/inquire/tests/data/emptyObject.js +0 -1
  204. package/node_modules/@protobufjs/inquire/tests/data/object.js +0 -1
  205. package/node_modules/@protobufjs/inquire/tests/index.js +0 -20
@@ -5,6 +5,30 @@
5
5
 
6
6
  import { XML as DEFAULT_XML_ENTITIES } from "./entities.js"
7
7
 
8
+ // ---------------------------------------------------------------------------
9
+ // Entity hook action constants
10
+ // ---------------------------------------------------------------------------
11
+
12
+ /**
13
+ * Action constants for `onExternalEntity` and `onInputEntity` hooks.
14
+ *
15
+ * Use these instead of raw strings to avoid typos:
16
+ *
17
+ * @example
18
+ * import EntityDecoder, { ENTITY_ACTION } from './EntityDecoder.js';
19
+ * const dec = new EntityDecoder({
20
+ * onInputEntity: (name, value) => ENTITY_ACTION.BLOCK,
21
+ * });
22
+ */
23
+ export const ENTITY_ACTION = Object.freeze({
24
+ /** Resolve and expand the entity normally. */
25
+ ALLOW: 'allow',
26
+ /** Silently skip this entity — it will not be registered. */
27
+ BLOCK: 'block',
28
+ /** Throw an error, aborting entity registration entirely. */
29
+ THROW: 'throw',
30
+ });
31
+
8
32
  // ---------------------------------------------------------------------------
9
33
  // Helpers
10
34
  // ---------------------------------------------------------------------------
@@ -169,6 +193,14 @@ export default class EntityDecoder {
169
193
  * the effective action is max(onNCR, rangeMinimum).
170
194
  * @param {'remove'|'throw'} [options.ncr.nullNCR='remove']
171
195
  * Action for U+0000 (null). 'allow' and 'leave' are clamped to 'remove' since null is never safe.
196
+ * @param {((name: string, value: string) => 'allow'|'block'|'throw')|null} [options.onExternalEntity=null]
197
+ * Hook called when an external entity is registered via `setExternalEntities()` or
198
+ * `addExternalEntity()`. Return `ENTITY_ACTION.ALLOW` to accept the entity,
199
+ * `ENTITY_ACTION.BLOCK` to silently skip it, or `ENTITY_ACTION.THROW` to abort with an error.
200
+ * @param {((name: string, value: string) => 'allow'|'block'|'throw')|null} [options.onInputEntity=null]
201
+ * Hook called when an input entity is registered via `addInputEntities()`. Return
202
+ * `ENTITY_ACTION.ALLOW` to accept, `ENTITY_ACTION.BLOCK` to silently skip, or
203
+ * `ENTITY_ACTION.THROW` to abort with an error.
172
204
  */
173
205
  constructor(options = {}) {
174
206
  this._limit = options.limit || {};
@@ -204,6 +236,43 @@ export default class EntityDecoder {
204
236
  this._ncrXmlVersion = ncrCfg.xmlVersion;
205
237
  this._ncrOnLevel = ncrCfg.onLevel;
206
238
  this._ncrNullLevel = ncrCfg.nullLevel;
239
+
240
+ // --- Registration hooks ---
241
+ /** @type {((name: string, value: string) => 'allow'|'block'|'throw')|null} */
242
+ this._onExternalEntity = typeof options.onExternalEntity === 'function'
243
+ ? options.onExternalEntity
244
+ : null;
245
+ /** @type {((name: string, value: string) => 'allow'|'block'|'throw')|null} */
246
+ this._onInputEntity = typeof options.onInputEntity === 'function'
247
+ ? options.onInputEntity
248
+ : null;
249
+ }
250
+
251
+ // -------------------------------------------------------------------------
252
+ // Private: registration hook dispatch
253
+ // -------------------------------------------------------------------------
254
+
255
+ /**
256
+ * Invoke a registration hook for a single entity name/value pair.
257
+ * Returns true when the entity should be accepted, false when it should be
258
+ * silently skipped (BLOCK), and throws when the hook returns THROW.
259
+ *
260
+ * @param {((name: string, value: string) => 'allow'|'block'|'throw')|null} hook
261
+ * @param {string} name
262
+ * @param {string} value
263
+ * @param {string} context — used in error messages ('external' | 'input')
264
+ * @returns {boolean} true = accept, false = skip
265
+ */
266
+ _applyRegistrationHook(hook, name, value, context) {
267
+ if (!hook) return true; // no hook → always accept
268
+ const action = hook(name, value);
269
+ if (action === ENTITY_ACTION.BLOCK) return false;
270
+ if (action === ENTITY_ACTION.THROW) {
271
+ throw new Error(
272
+ `[EntityDecoder] Registration of ${context} entity "&${name};" was rejected by hook`
273
+ );
274
+ }
275
+ return true; // ALLOW or any unknown return value → accept
207
276
  }
208
277
 
209
278
  // -------------------------------------------------------------------------
@@ -213,6 +282,9 @@ export default class EntityDecoder {
213
282
  /**
214
283
  * Replace the full set of persistent external entities.
215
284
  * All keys are validated — throws on invalid characters.
285
+ * If `onExternalEntity` is set, it is called once per entry; entries that
286
+ * return `ENTITY_ACTION.BLOCK` are silently omitted, `ENTITY_ACTION.THROW`
287
+ * aborts the whole call.
216
288
  * @param {Record<string, string | { regex?: RegExp, val: string }>} map
217
289
  */
218
290
  setExternalEntities(map) {
@@ -221,18 +293,34 @@ export default class EntityDecoder {
221
293
  validateEntityName(key);
222
294
  }
223
295
  }
224
- this._externalMap = mergeEntityMaps(map);
296
+ if (!this._onExternalEntity) {
297
+ this._externalMap = mergeEntityMaps(map);
298
+ return;
299
+ }
300
+ // Hook present — resolve values first, then filter
301
+ const flat = mergeEntityMaps(map);
302
+ const filtered = Object.create(null);
303
+ for (const [name, value] of Object.entries(flat)) {
304
+ if (this._applyRegistrationHook(this._onExternalEntity, name, value, 'external')) {
305
+ filtered[name] = value;
306
+ }
307
+ }
308
+ this._externalMap = filtered;
225
309
  }
226
310
 
227
311
  /**
228
312
  * Add a single persistent external entity.
313
+ * If `onExternalEntity` is set it is called before the entity is stored;
314
+ * `ENTITY_ACTION.BLOCK` silently skips storage, `ENTITY_ACTION.THROW` raises.
229
315
  * @param {string} key
230
316
  * @param {string} value
231
317
  */
232
318
  addExternalEntity(key, value) {
233
319
  validateEntityName(key);
234
320
  if (typeof value === 'string' && value.indexOf('&') === -1) {
235
- this._externalMap[key] = value;
321
+ if (this._applyRegistrationHook(this._onExternalEntity, key, value, 'external')) {
322
+ this._externalMap[key] = value;
323
+ }
236
324
  }
237
325
  }
238
326
 
@@ -243,12 +331,25 @@ export default class EntityDecoder {
243
331
  /**
244
332
  * Inject DOCTYPE entities for the current document.
245
333
  * Also resets per-document expansion counters.
334
+ * If `onInputEntity` is set it is called once per entry; entries returning
335
+ * `ENTITY_ACTION.BLOCK` are silently omitted, `ENTITY_ACTION.THROW` aborts.
246
336
  * @param {Record<string, string | { regx?: RegExp, regex?: RegExp, val: string }>} map
247
337
  */
248
338
  addInputEntities(map) {
249
339
  this._totalExpansions = 0;
250
340
  this._expandedLength = 0;
251
- this._inputMap = mergeEntityMaps(map);
341
+ if (!this._onInputEntity) {
342
+ this._inputMap = mergeEntityMaps(map);
343
+ return;
344
+ }
345
+ const flat = mergeEntityMaps(map);
346
+ const filtered = Object.create(null);
347
+ for (const [name, value] of Object.entries(flat)) {
348
+ if (this._applyRegistrationHook(this._onInputEntity, name, value, 'input')) {
349
+ filtered[name] = value;
350
+ }
351
+ }
352
+ this._inputMap = filtered;
252
353
  }
253
354
 
254
355
  // -------------------------------------------------------------------------
@@ -5,6 +5,50 @@
5
5
  /** A function-based entity replacement value (used for numeric refs). */
6
6
  export type EntityValFn = (match: string, captured: string, ...rest: unknown[]) => string;
7
7
 
8
+ // ---------------------------------------------------------------------------
9
+ // Entity registration hook
10
+ // ---------------------------------------------------------------------------
11
+
12
+ /**
13
+ * Actions returned by `onExternalEntity` / `onInputEntity` hooks.
14
+ * Use the `ENTITY_ACTION` constant object instead of raw strings to avoid typos.
15
+ *
16
+ * - `'allow'` — register and expand the entity normally
17
+ * - `'block'` — silently skip the entity (not registered, treated as unknown)
18
+ * - `'throw'` — abort registration with an error
19
+ */
20
+ export type EntityHookAction = 'allow' | 'block' | 'throw';
21
+
22
+ /**
23
+ * Immutable constant bag for entity registration hook return values.
24
+ *
25
+ * @example
26
+ * import { ENTITY_ACTION } from '@nodable/entities';
27
+ * const dec = new EntityDecoder({
28
+ * onInputEntity: (_name, _value) => ENTITY_ACTION.BLOCK,
29
+ * });
30
+ */
31
+ export const ENTITY_ACTION: Readonly<{
32
+ /** Register and expand the entity normally. */
33
+ ALLOW: 'allow';
34
+ /** Silently skip this entity — it will not be registered. */
35
+ BLOCK: 'block';
36
+ /** Throw an error, aborting entity registration. */
37
+ THROW: 'throw';
38
+ }>;
39
+
40
+ /**
41
+ * Callback signature for `onExternalEntity` and `onInputEntity` hooks.
42
+ *
43
+ * Called once per entity **at registration time** (not at decode time).
44
+ * Return `ENTITY_ACTION.ALLOW` (or `'allow'`) to accept, `ENTITY_ACTION.BLOCK`
45
+ * to silently skip, or `ENTITY_ACTION.THROW` to raise an error.
46
+ *
47
+ * @param name — the entity name without `&` / `;`, e.g. `"brand"`
48
+ * @param value — the resolved string value after any `{regex,val}` unwrapping
49
+ */
50
+ export type EntityRegistrationHook = (name: string, value: string) => EntityHookAction;
51
+
8
52
  // ---------------------------------------------------------------------------
9
53
  // Encoder options
10
54
  // ---------------------------------------------------------------------------
@@ -191,6 +235,39 @@ export interface EntityDecoderOptions {
191
235
  * Numeric Character Reference (NCR) policy.
192
236
  */
193
237
  ncr?: EntityDecoderNCROptions;
238
+
239
+ /**
240
+ * Hook called once **at registration time** for each entity passed to
241
+ * `setExternalEntities()` or `addExternalEntity()`.
242
+ *
243
+ * - `'allow'` (or `ENTITY_ACTION.ALLOW`) — register the entity normally (default)
244
+ * - `'block'` (or `ENTITY_ACTION.BLOCK`) — silently skip; the entity is not stored
245
+ * - `'throw'` (or `ENTITY_ACTION.THROW`) — abort registration with an `Error`
246
+ *
247
+ * The hook receives the entity name (without `&`/`;`) and the resolved string
248
+ * value. It is **not** called during `decode()` — only when entities are added.
249
+ *
250
+ * @example
251
+ * const dec = new EntityDecoder({
252
+ * onExternalEntity: (name, value) =>
253
+ * DANGEROUS_NAMES.has(name) ? ENTITY_ACTION.BLOCK : ENTITY_ACTION.ALLOW,
254
+ * });
255
+ */
256
+ onExternalEntity?: EntityRegistrationHook | null;
257
+
258
+ /**
259
+ * Hook called once **at registration time** for each entity passed to
260
+ * `addInputEntities()`.
261
+ *
262
+ * Follows the same `'allow' | 'block' | 'throw'` contract as `onExternalEntity`.
263
+ *
264
+ * @example
265
+ * const dec = new EntityDecoder({
266
+ * // Block all input / DOCTYPE entities unconditionally
267
+ * onInputEntity: () => ENTITY_ACTION.BLOCK,
268
+ * });
269
+ */
270
+ onInputEntity?: EntityRegistrationHook | null;
194
271
  }
195
272
 
196
273
  // ---------------------------------------------------------------------------
@@ -6,7 +6,7 @@
6
6
 
7
7
  */
8
8
 
9
- export { default as EntityDecoder } from './EntityDecoder.js';
9
+ export { default as EntityDecoder, ENTITY_ACTION } from './EntityDecoder.js';
10
10
  export {
11
11
  COMMON_HTML,
12
12
  XML,
@@ -250,7 +250,7 @@ function bindGetRetryPlugin(isStreamingPayload) {
250
250
  }
251
251
 
252
252
  class DefaultRateLimiter {
253
- static setTimeoutFn = setTimeout;
253
+ static setTimeoutFn = (fn, delay) => setTimeout(fn, delay);
254
254
  beta;
255
255
  minCapacity;
256
256
  minFillRate;
@@ -690,9 +690,9 @@ const getDelayFromRetryAfterHeader = (response) => {
690
690
  const retryAfter = response.headers[retryAfterHeaderName];
691
691
  const retryAfterSeconds = Number(retryAfter);
692
692
  if (!Number.isNaN(retryAfterSeconds))
693
- return retryAfterSeconds * 1000;
693
+ return Math.min(retryAfterSeconds * 1000, 20_000);
694
694
  const retryAfterDate = new Date(retryAfter);
695
- return retryAfterDate.getTime() - Date.now();
695
+ return Math.min(retryAfterDate.getTime() - Date.now(), 20_000);
696
696
  };
697
697
 
698
698
  class AdaptiveRetryStrategy extends StandardRetryStrategy {
@@ -252,7 +252,7 @@ function bindGetRetryPlugin(isStreamingPayload) {
252
252
  }
253
253
 
254
254
  class DefaultRateLimiter {
255
- static setTimeoutFn = setTimeout;
255
+ static setTimeoutFn = (fn, delay) => setTimeout(fn, delay);
256
256
  beta;
257
257
  minCapacity;
258
258
  minFillRate;
@@ -692,9 +692,9 @@ const getDelayFromRetryAfterHeader = (response) => {
692
692
  const retryAfter = response.headers[retryAfterHeaderName];
693
693
  const retryAfterSeconds = Number(retryAfter);
694
694
  if (!Number.isNaN(retryAfterSeconds))
695
- return retryAfterSeconds * 1000;
695
+ return Math.min(retryAfterSeconds * 1000, 20_000);
696
696
  const retryAfterDate = new Date(retryAfter);
697
- return retryAfterDate.getTime() - Date.now();
697
+ return Math.min(retryAfterDate.getTime() - Date.now(), 20_000);
698
698
  };
699
699
 
700
700
  class AdaptiveRetryStrategy extends StandardRetryStrategy {
@@ -89,7 +89,7 @@ const getDelayFromRetryAfterHeader = (response) => {
89
89
  const retryAfter = response.headers[retryAfterHeaderName];
90
90
  const retryAfterSeconds = Number(retryAfter);
91
91
  if (!Number.isNaN(retryAfterSeconds))
92
- return retryAfterSeconds * 1000;
92
+ return Math.min(retryAfterSeconds * 1000, 20_000);
93
93
  const retryAfterDate = new Date(retryAfter);
94
- return retryAfterDate.getTime() - Date.now();
94
+ return Math.min(retryAfterDate.getTime() - Date.now(), 20_000);
95
95
  };
@@ -1,6 +1,6 @@
1
1
  import { isThrottlingError } from "../service-error-classification/service-error-classification";
2
2
  export class DefaultRateLimiter {
3
- static setTimeoutFn = setTimeout;
3
+ static setTimeoutFn = (fn, delay) => setTimeout(fn, delay);
4
4
  beta;
5
5
  minCapacity;
6
6
  minFillRate;
@@ -1,21 +1,21 @@
1
1
  {
2
2
  "name": "@smithy/core",
3
- "version": "3.24.6",
3
+ "version": "3.24.7",
4
4
  "scripts": {
5
- "build": "concurrently 'yarn:build:types' 'yarn:build:es:cjs'",
6
- "build:es:cjs": "yarn g:tsc -p tsconfig.es.json && node ../../scripts/inline core",
5
+ "build": "yarn lint && concurrently 'yarn:build:types' 'yarn:build:es:cjs'",
6
+ "build:es:cjs": "yarn g:tsc -p tsconfig.es.json && node ../../scripts/inline",
7
7
  "build:types": "yarn g:tsc -p tsconfig.types.json",
8
8
  "build:types:downlevel": "premove dist-types/ts3.4 && downlevel-dts dist-types dist-types/ts3.4",
9
- "clean": "premove dist-cjs dist-es dist-types tsconfig.cjs.tsbuildinfo tsconfig.es.tsbuildinfo tsconfig.types.tsbuildinfo",
9
+ "clean": "premove dist-cjs dist-es dist-types *.tsbuildinfo",
10
10
  "extract:docs": "api-extractor run --local",
11
11
  "format": "prettier --config ../../prettier.config.js --ignore-path ../../.prettierignore --write \"**/*.{ts,md,json}\"",
12
- "lint": "npx eslint -c ../../.eslintrc.js \"src/**/*.ts\" --fix && node ./scripts/lint",
12
+ "lint": "node ../../scripts/validation/submodules-linter.js",
13
13
  "stage-release": "premove .release && yarn pack && mkdir ./.release && tar zxvf ./package.tgz --directory ./.release && rm ./package.tgz",
14
14
  "test": "yarn g:vitest run",
15
- "test:cbor:perf": "node ./scripts/cbor-perf.mjs",
15
+ "test:watch": "yarn g:vitest watch",
16
16
  "test:integration": "yarn g:vitest run -c vitest.config.integ.mts",
17
17
  "test:integration:watch": "yarn g:vitest watch -c vitest.config.integ.mts",
18
- "test:watch": "yarn g:vitest watch"
18
+ "test:cbor:perf": "node ./scripts/cbor-perf.mjs"
19
19
  },
20
20
  "main": "./dist-cjs/index.js",
21
21
  "module": "./dist-es/index.js",
@@ -169,9 +169,18 @@
169
169
  "sideEffects": false,
170
170
  "dependencies": {
171
171
  "@aws-crypto/crc32": "5.2.0",
172
- "@smithy/types": "^4.14.3",
172
+ "@smithy/types": "^4.14.4",
173
173
  "tslib": "^2.6.2"
174
174
  },
175
+ "devDependencies": {
176
+ "@types/node": "^18.11.9",
177
+ "concurrently": "7.0.0",
178
+ "downlevel-dts": "0.10.1",
179
+ "hash-test-vectors": "^1.3.2",
180
+ "json-bigint": "^1.0.0",
181
+ "premove": "4.0.0",
182
+ "typedoc": "0.23.23"
183
+ },
175
184
  "engines": {
176
185
  "node": ">=18.0.0"
177
186
  },
@@ -213,15 +222,6 @@
213
222
  "url": "https://github.com/smithy-lang/smithy-typescript.git",
214
223
  "directory": "packages/core"
215
224
  },
216
- "devDependencies": {
217
- "@types/node": "^18.11.9",
218
- "concurrently": "7.0.0",
219
- "downlevel-dts": "0.10.1",
220
- "hash-test-vectors": "^1.3.2",
221
- "json-bigint": "^1.0.0",
222
- "premove": "4.0.0",
223
- "typedoc": "0.23.23"
224
- },
225
225
  "typedoc": {
226
226
  "entryPoint": "src/index.ts"
227
227
  },
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@smithy/credential-provider-imds",
3
- "version": "4.3.8",
3
+ "version": "4.3.9",
4
4
  "description": "AWS credential provider that sources credentials from the EC2 instance metadata service and ECS container metadata service",
5
5
  "main": "./dist-cjs/index.js",
6
6
  "module": "./dist-es/index.js",
7
7
  "scripts": {
8
8
  "build": "concurrently 'yarn:build:types' 'yarn:build:es:cjs'",
9
- "build:es:cjs": "yarn g:tsc -p tsconfig.es.json && node ../../scripts/inline credential-provider-imds",
9
+ "build:es:cjs": "yarn g:tsc -p tsconfig.es.json && node ../../scripts/inline",
10
10
  "build:types": "yarn g:tsc -p tsconfig.types.json",
11
11
  "build:types:downlevel": "premove dist-types/ts3.4 && downlevel-dts dist-types dist-types/ts3.4",
12
- "clean": "premove dist-cjs dist-es dist-types tsconfig.cjs.tsbuildinfo tsconfig.es.tsbuildinfo tsconfig.types.tsbuildinfo",
12
+ "clean": "premove dist-cjs dist-es dist-types *.tsbuildinfo",
13
13
  "format": "prettier --config ../../prettier.config.js --ignore-path ../../.prettierignore --write \"**/*.{ts,md,json}\"",
14
14
  "lint": "eslint -c ../../.eslintrc.js \"src/**/*.ts\"",
15
15
  "stage-release": "premove .release && yarn pack && mkdir ./.release && tar zxvf ./package.tgz --directory ./.release && rm ./package.tgz",
@@ -22,13 +22,13 @@
22
22
  ],
23
23
  "author": {
24
24
  "name": "AWS SDK for JavaScript Team",
25
- "url": "https://aws.amazon.com/javascript/"
25
+ "url": "https://aws.amazon.com/sdk-for-javascript/"
26
26
  },
27
27
  "license": "Apache-2.0",
28
28
  "sideEffects": false,
29
29
  "dependencies": {
30
- "@smithy/core": "^3.24.6",
31
- "@smithy/types": "^4.14.3",
30
+ "@smithy/core": "^3.24.7",
31
+ "@smithy/types": "^4.14.4",
32
32
  "tslib": "^2.6.2"
33
33
  },
34
34
  "devDependencies": {
@@ -1,25 +1,25 @@
1
1
  {
2
2
  "name": "@smithy/fetch-http-handler",
3
- "version": "5.4.6",
3
+ "version": "5.4.7",
4
4
  "description": "Provides a way to make requests",
5
5
  "scripts": {
6
6
  "build": "concurrently 'yarn:build:types' 'yarn:build:es:cjs'",
7
- "build:es:cjs": "yarn g:tsc -p tsconfig.es.json && node ../../scripts/inline fetch-http-handler",
7
+ "build:es:cjs": "yarn g:tsc -p tsconfig.es.json && node ../../scripts/inline",
8
8
  "build:types": "yarn g:tsc -p tsconfig.types.json",
9
9
  "build:types:downlevel": "premove dist-types/ts3.4 && downlevel-dts dist-types dist-types/ts3.4",
10
- "clean": "premove dist-cjs dist-es dist-types tsconfig.cjs.tsbuildinfo tsconfig.es.tsbuildinfo tsconfig.types.tsbuildinfo",
10
+ "clean": "premove dist-cjs dist-es dist-types *.tsbuildinfo",
11
11
  "extract:docs": "api-extractor run --local",
12
12
  "format": "prettier --config ../../prettier.config.js --ignore-path ../../.prettierignore --write \"**/*.{ts,md,json}\"",
13
13
  "lint": "eslint -c ../../.eslintrc.js \"src/**/*.ts\"",
14
14
  "stage-release": "premove .release && yarn pack && mkdir ./.release && tar zxvf ./package.tgz --directory ./.release && rm ./package.tgz",
15
15
  "test": "yarn g:vitest run && yarn test:browser",
16
+ "test:watch": "yarn g:vitest watch",
16
17
  "test:browser": "yarn g:vitest run -c vitest.config.browser.mts",
17
- "test:browser:watch": "yarn g:vitest watch -c vitest.config.browser.mts",
18
- "test:watch": "yarn g:vitest watch"
18
+ "test:browser:watch": "yarn g:vitest watch -c vitest.config.browser.mts"
19
19
  },
20
20
  "author": {
21
21
  "name": "AWS SDK for JavaScript Team",
22
- "url": "https://aws.amazon.com/javascript/"
22
+ "url": "https://aws.amazon.com/sdk-for-javascript/"
23
23
  },
24
24
  "license": "Apache-2.0",
25
25
  "sideEffects": false,
@@ -27,12 +27,12 @@
27
27
  "module": "./dist-es/index.js",
28
28
  "types": "./dist-types/index.d.ts",
29
29
  "dependencies": {
30
- "@smithy/core": "^3.24.6",
31
- "@smithy/types": "^4.14.3",
30
+ "@smithy/core": "^3.24.7",
31
+ "@smithy/types": "^4.14.4",
32
32
  "tslib": "^2.6.2"
33
33
  },
34
34
  "devDependencies": {
35
- "@smithy/abort-controller": "^4.2.16",
35
+ "@smithy/abort-controller": "^4.2.17",
36
36
  "concurrently": "7.0.0",
37
37
  "downlevel-dts": "0.10.1",
38
38
  "premove": "4.0.0",
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "@smithy/signature-v4",
3
- "version": "5.4.6",
3
+ "version": "5.4.7",
4
4
  "description": "A standalone implementation of the AWS Signature V4 request signing algorithm",
5
5
  "main": "./dist-cjs/index.js",
6
6
  "module": "./dist-es/index.js",
7
7
  "types": "./dist-types/index.d.ts",
8
8
  "scripts": {
9
9
  "build": "concurrently 'yarn:build:types' 'yarn:build:es:cjs'",
10
- "build:es:cjs": "yarn g:tsc -p tsconfig.es.json && node ../../scripts/inline signature-v4",
10
+ "build:es:cjs": "yarn g:tsc -p tsconfig.es.json && node ../../scripts/inline",
11
11
  "build:types": "yarn g:tsc -p tsconfig.types.json",
12
12
  "build:types:downlevel": "premove dist-types/ts3.4 && downlevel-dts dist-types dist-types/ts3.4",
13
- "clean": "premove dist-cjs dist-es dist-types tsconfig.cjs.tsbuildinfo tsconfig.es.tsbuildinfo tsconfig.types.tsbuildinfo",
13
+ "clean": "premove dist-cjs dist-es dist-types *.tsbuildinfo",
14
14
  "extract:docs": "api-extractor run --local",
15
15
  "format": "prettier --config ../../prettier.config.js --ignore-path ../../.prettierignore --write \"**/*.{ts,md,json}\"",
16
16
  "lint": "eslint -c ../../.eslintrc.js \"src/**/*.ts\"",
@@ -20,13 +20,13 @@
20
20
  },
21
21
  "author": {
22
22
  "name": "AWS SDK for JavaScript Team",
23
- "url": "https://aws.amazon.com/javascript/"
23
+ "url": "https://aws.amazon.com/sdk-for-javascript/"
24
24
  },
25
25
  "license": "Apache-2.0",
26
26
  "sideEffects": false,
27
27
  "dependencies": {
28
- "@smithy/core": "^3.24.6",
29
- "@smithy/types": "^4.14.3",
28
+ "@smithy/core": "^3.24.7",
29
+ "@smithy/types": "^4.14.4",
30
30
  "tslib": "^2.6.2"
31
31
  },
32
32
  "devDependencies": {
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@smithy/types",
3
- "version": "4.14.3",
3
+ "version": "4.14.4",
4
4
  "scripts": {
5
5
  "build": "concurrently 'yarn:build:types' 'yarn:build:es:cjs'",
6
- "build:es:cjs": "yarn g:tsc -p tsconfig.es.json && node ../../scripts/inline types",
6
+ "build:es:cjs": "yarn g:tsc -p tsconfig.es.json && node ../../scripts/inline",
7
7
  "build:types": "yarn g:tsc -p tsconfig.types.json",
8
8
  "build:types:downlevel": "premove dist-types/ts3.4 && downlevel-dts dist-types dist-types/ts3.4 && node scripts/downlevel",
9
- "clean": "premove dist-cjs dist-es dist-types tsconfig.cjs.tsbuildinfo tsconfig.es.tsbuildinfo tsconfig.types.tsbuildinfo",
9
+ "clean": "premove dist-cjs dist-es dist-types *.tsbuildinfo",
10
10
  "extract:docs": "api-extractor run --local",
11
11
  "format": "prettier --config ../../prettier.config.js --ignore-path ../../.prettierignore --write \"**/*.{ts,md,json}\"",
12
12
  "lint": "eslint -c ../../.eslintrc.js \"src/**/*.ts\"",
@@ -26,6 +26,12 @@
26
26
  "dependencies": {
27
27
  "tslib": "^2.6.2"
28
28
  },
29
+ "devDependencies": {
30
+ "concurrently": "7.0.0",
31
+ "downlevel-dts": "0.10.1",
32
+ "premove": "4.0.0",
33
+ "typedoc": "0.23.23"
34
+ },
29
35
  "engines": {
30
36
  "node": ">=18.0.0"
31
37
  },
@@ -45,12 +51,6 @@
45
51
  "url": "https://github.com/smithy-lang/smithy-typescript.git",
46
52
  "directory": "packages/types"
47
53
  },
48
- "devDependencies": {
49
- "concurrently": "7.0.0",
50
- "downlevel-dts": "0.10.1",
51
- "premove": "4.0.0",
52
- "typedoc": "0.23.23"
53
- },
54
54
  "typedoc": {
55
55
  "entryPoint": "src/index.ts"
56
56
  },
@@ -8,7 +8,7 @@ This package contains type definitions for node (https://nodejs.org/).
8
8
  Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node.
9
9
 
10
10
  ### Additional Details
11
- * Last updated: Fri, 05 Jun 2026 22:33:07 GMT
11
+ * Last updated: Wed, 10 Jun 2026 22:15:09 GMT
12
12
  * Dependencies: [undici-types](https://npmjs.com/package/undici-types)
13
13
 
14
14
  # Credits
@@ -20,6 +20,7 @@ declare module "node:http2" {
20
20
  ":method"?: string | undefined;
21
21
  ":authority"?: string | undefined;
22
22
  ":scheme"?: string | undefined;
23
+ ":protocol"?: string | undefined;
23
24
  }
24
25
  // Http2Stream
25
26
  interface StreamState {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@types/node",
3
- "version": "25.9.2",
3
+ "version": "25.9.3",
4
4
  "description": "TypeScript definitions for node",
5
5
  "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node",
6
6
  "license": "MIT",
@@ -150,6 +150,6 @@
150
150
  "undici-types": ">=7.24.0 <7.24.7"
151
151
  },
152
152
  "peerDependencies": {},
153
- "typesPublisherContentHash": "a4b1508fd78227ea41216c90a2f88a2fa4eeaefffb6c5d6334a18215ad38d681",
153
+ "typesPublisherContentHash": "b651099f0be23911446e6a283ee816760ef628511df23064b85b949a9ca68cf5",
154
154
  "typeScriptVersion": "5.3"
155
155
  }
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Natural Intelligence
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.