@fgv/ts-extras 5.1.0-46 → 5.1.0-47

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 (105) hide show
  1. package/README.md +90 -0
  2. package/dist/index.browser.js +3 -1
  3. package/dist/index.browser.js.map +1 -1
  4. package/dist/index.js +2 -1
  5. package/dist/index.js.map +1 -1
  6. package/dist/packlets/safer-fetch/addressClassification.js +438 -0
  7. package/dist/packlets/safer-fetch/addressClassification.js.map +1 -0
  8. package/dist/packlets/safer-fetch/addressPolicy.js +119 -0
  9. package/dist/packlets/safer-fetch/addressPolicy.js.map +1 -0
  10. package/dist/packlets/safer-fetch/contentType.js +120 -0
  11. package/dist/packlets/safer-fetch/contentType.js.map +1 -0
  12. package/dist/packlets/safer-fetch/deadline.js +254 -0
  13. package/dist/packlets/safer-fetch/deadline.js.map +1 -0
  14. package/dist/packlets/safer-fetch/defaults.js +131 -0
  15. package/dist/packlets/safer-fetch/defaults.js.map +1 -0
  16. package/dist/packlets/safer-fetch/failureReason.js +21 -0
  17. package/dist/packlets/safer-fetch/failureReason.js.map +1 -0
  18. package/dist/packlets/safer-fetch/guards.js +148 -0
  19. package/dist/packlets/safer-fetch/guards.js.map +1 -0
  20. package/dist/packlets/safer-fetch/index.browser.js +58 -0
  21. package/dist/packlets/safer-fetch/index.browser.js.map +1 -0
  22. package/dist/packlets/safer-fetch/index.js +52 -0
  23. package/dist/packlets/safer-fetch/index.js.map +1 -0
  24. package/dist/packlets/safer-fetch/model.js +21 -0
  25. package/dist/packlets/safer-fetch/model.js.map +1 -0
  26. package/dist/packlets/safer-fetch/nodeAddressGuard.js +191 -0
  27. package/dist/packlets/safer-fetch/nodeAddressGuard.js.map +1 -0
  28. package/dist/packlets/safer-fetch/redirect.js +93 -0
  29. package/dist/packlets/safer-fetch/redirect.js.map +1 -0
  30. package/dist/packlets/safer-fetch/retry.js +188 -0
  31. package/dist/packlets/safer-fetch/retry.js.map +1 -0
  32. package/dist/packlets/safer-fetch/saferFetch.js +755 -0
  33. package/dist/packlets/safer-fetch/saferFetch.js.map +1 -0
  34. package/dist/packlets/safer-fetch/transport.js +50 -0
  35. package/dist/packlets/safer-fetch/transport.js.map +1 -0
  36. package/dist/ts-extras.d.ts +1337 -0
  37. package/lib/index.browser.d.ts +2 -1
  38. package/lib/index.browser.d.ts.map +1 -1
  39. package/lib/index.browser.js +4 -1
  40. package/lib/index.browser.js.map +1 -1
  41. package/lib/index.d.ts +2 -1
  42. package/lib/index.d.ts.map +1 -1
  43. package/lib/index.js +3 -1
  44. package/lib/index.js.map +1 -1
  45. package/lib/packlets/safer-fetch/addressClassification.d.ts +144 -0
  46. package/lib/packlets/safer-fetch/addressClassification.d.ts.map +1 -0
  47. package/lib/packlets/safer-fetch/addressClassification.js +441 -0
  48. package/lib/packlets/safer-fetch/addressClassification.js.map +1 -0
  49. package/lib/packlets/safer-fetch/addressPolicy.d.ts +113 -0
  50. package/lib/packlets/safer-fetch/addressPolicy.d.ts.map +1 -0
  51. package/lib/packlets/safer-fetch/addressPolicy.js +123 -0
  52. package/lib/packlets/safer-fetch/addressPolicy.js.map +1 -0
  53. package/lib/packlets/safer-fetch/contentType.d.ts +51 -0
  54. package/lib/packlets/safer-fetch/contentType.d.ts.map +1 -0
  55. package/lib/packlets/safer-fetch/contentType.js +127 -0
  56. package/lib/packlets/safer-fetch/contentType.js.map +1 -0
  57. package/lib/packlets/safer-fetch/deadline.d.ts +138 -0
  58. package/lib/packlets/safer-fetch/deadline.d.ts.map +1 -0
  59. package/lib/packlets/safer-fetch/deadline.js +258 -0
  60. package/lib/packlets/safer-fetch/deadline.js.map +1 -0
  61. package/lib/packlets/safer-fetch/defaults.d.ts +108 -0
  62. package/lib/packlets/safer-fetch/defaults.d.ts.map +1 -0
  63. package/lib/packlets/safer-fetch/defaults.js +134 -0
  64. package/lib/packlets/safer-fetch/defaults.js.map +1 -0
  65. package/lib/packlets/safer-fetch/failureReason.d.ts +148 -0
  66. package/lib/packlets/safer-fetch/failureReason.d.ts.map +1 -0
  67. package/lib/packlets/safer-fetch/failureReason.js +22 -0
  68. package/lib/packlets/safer-fetch/failureReason.js.map +1 -0
  69. package/lib/packlets/safer-fetch/guards.d.ts +62 -0
  70. package/lib/packlets/safer-fetch/guards.d.ts.map +1 -0
  71. package/lib/packlets/safer-fetch/guards.js +153 -0
  72. package/lib/packlets/safer-fetch/guards.js.map +1 -0
  73. package/lib/packlets/safer-fetch/index.browser.d.ts +33 -0
  74. package/lib/packlets/safer-fetch/index.browser.d.ts.map +1 -0
  75. package/lib/packlets/safer-fetch/index.browser.js +82 -0
  76. package/lib/packlets/safer-fetch/index.browser.js.map +1 -0
  77. package/lib/packlets/safer-fetch/index.d.ts +27 -0
  78. package/lib/packlets/safer-fetch/index.d.ts.map +1 -0
  79. package/lib/packlets/safer-fetch/index.js +78 -0
  80. package/lib/packlets/safer-fetch/index.js.map +1 -0
  81. package/lib/packlets/safer-fetch/model.d.ts +373 -0
  82. package/lib/packlets/safer-fetch/model.d.ts.map +1 -0
  83. package/lib/packlets/safer-fetch/model.js +22 -0
  84. package/lib/packlets/safer-fetch/model.js.map +1 -0
  85. package/lib/packlets/safer-fetch/nodeAddressGuard.d.ts +129 -0
  86. package/lib/packlets/safer-fetch/nodeAddressGuard.d.ts.map +1 -0
  87. package/lib/packlets/safer-fetch/nodeAddressGuard.js +196 -0
  88. package/lib/packlets/safer-fetch/nodeAddressGuard.js.map +1 -0
  89. package/lib/packlets/safer-fetch/redirect.d.ts +62 -0
  90. package/lib/packlets/safer-fetch/redirect.d.ts.map +1 -0
  91. package/lib/packlets/safer-fetch/redirect.js +98 -0
  92. package/lib/packlets/safer-fetch/redirect.js.map +1 -0
  93. package/lib/packlets/safer-fetch/retry.d.ts +162 -0
  94. package/lib/packlets/safer-fetch/retry.d.ts.map +1 -0
  95. package/lib/packlets/safer-fetch/retry.js +197 -0
  96. package/lib/packlets/safer-fetch/retry.js.map +1 -0
  97. package/lib/packlets/safer-fetch/saferFetch.d.ts +108 -0
  98. package/lib/packlets/safer-fetch/saferFetch.d.ts.map +1 -0
  99. package/lib/packlets/safer-fetch/saferFetch.js +760 -0
  100. package/lib/packlets/safer-fetch/saferFetch.js.map +1 -0
  101. package/lib/packlets/safer-fetch/transport.d.ts +18 -0
  102. package/lib/packlets/safer-fetch/transport.d.ts.map +1 -0
  103. package/lib/packlets/safer-fetch/transport.js +53 -0
  104. package/lib/packlets/safer-fetch/transport.js.map +1 -0
  105. package/package.json +17 -7
@@ -5,8 +5,9 @@ import * as Experimental from './packlets/experimental';
5
5
  import * as Hash from './packlets/hash/index.browser';
6
6
  import * as Mustache from './packlets/mustache';
7
7
  import * as RecordJar from './packlets/record-jar/index.browser';
8
+ import * as SaferFetch from './packlets/safer-fetch/index.browser';
8
9
  import * as Yaml from './packlets/yaml';
9
10
  import * as ZipFileTree from './packlets/zip-file-tree';
10
11
  import { Converters } from './packlets/conversion';
11
- export { AiAssist, Converters, CryptoUtils, CryptoUtils as Crypto, Csv, Experimental, Hash, Mustache, RecordJar, Yaml, ZipFileTree };
12
+ export { AiAssist, Converters, CryptoUtils, CryptoUtils as Crypto, Csv, Experimental, Hash, Mustache, RecordJar, SaferFetch, Yaml, ZipFileTree };
12
13
  //# sourceMappingURL=index.browser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.browser.d.ts","sourceRoot":"","sources":["../src/index.browser.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,QAAQ,MAAM,sBAAsB,CAAC;AAEjD,OAAO,KAAK,WAAW,MAAM,uCAAuC,CAAC;AAErE,OAAO,KAAK,GAAG,MAAM,8BAA8B,CAAC;AACpD,OAAO,KAAK,YAAY,MAAM,yBAAyB,CAAC;AAExD,OAAO,KAAK,IAAI,MAAM,+BAA+B,CAAC;AACtD,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC;AAEhD,OAAO,KAAK,SAAS,MAAM,qCAAqC,CAAC;AACjE,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,WAAW,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAInD,OAAO,EACL,QAAQ,EACR,UAAU,EACV,WAAW,EACX,WAAW,IAAI,MAAM,EACrB,GAAG,EACH,YAAY,EACZ,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,WAAW,EACZ,CAAC"}
1
+ {"version":3,"file":"index.browser.d.ts","sourceRoot":"","sources":["../src/index.browser.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,QAAQ,MAAM,sBAAsB,CAAC;AAEjD,OAAO,KAAK,WAAW,MAAM,uCAAuC,CAAC;AAErE,OAAO,KAAK,GAAG,MAAM,8BAA8B,CAAC;AACpD,OAAO,KAAK,YAAY,MAAM,yBAAyB,CAAC;AAExD,OAAO,KAAK,IAAI,MAAM,+BAA+B,CAAC;AACtD,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC;AAEhD,OAAO,KAAK,SAAS,MAAM,qCAAqC,CAAC;AAEjE,OAAO,KAAK,UAAU,MAAM,sCAAsC,CAAC;AACnE,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,WAAW,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAInD,OAAO,EACL,QAAQ,EACR,UAAU,EACV,WAAW,EACX,WAAW,IAAI,MAAM,EACrB,GAAG,EACH,YAAY,EACZ,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,UAAU,EACV,IAAI,EACJ,WAAW,EACZ,CAAC"}
@@ -54,7 +54,7 @@ var __importStar = (this && this.__importStar) || (function () {
54
54
  };
55
55
  })();
56
56
  Object.defineProperty(exports, "__esModule", { value: true });
57
- exports.ZipFileTree = exports.Yaml = exports.RecordJar = exports.Mustache = exports.Hash = exports.Experimental = exports.Csv = exports.Crypto = exports.CryptoUtils = exports.Converters = exports.AiAssist = void 0;
57
+ exports.ZipFileTree = exports.Yaml = exports.SaferFetch = exports.RecordJar = exports.Mustache = exports.Hash = exports.Experimental = exports.Csv = exports.Crypto = exports.CryptoUtils = exports.Converters = exports.AiAssist = void 0;
58
58
  /* c8 ignore start - Browser-specific export used conditionally in package.json */
59
59
  const AiAssist = __importStar(require("./packlets/ai-assist"));
60
60
  exports.AiAssist = AiAssist;
@@ -75,6 +75,9 @@ exports.Mustache = Mustache;
75
75
  // eslint-disable-next-line @rushstack/packlets/mechanics
76
76
  const RecordJar = __importStar(require("./packlets/record-jar/index.browser"));
77
77
  exports.RecordJar = RecordJar;
78
+ // eslint-disable-next-line @rushstack/packlets/mechanics
79
+ const SaferFetch = __importStar(require("./packlets/safer-fetch/index.browser"));
80
+ exports.SaferFetch = SaferFetch;
78
81
  const Yaml = __importStar(require("./packlets/yaml"));
79
82
  exports.Yaml = Yaml;
80
83
  const ZipFileTree = __importStar(require("./packlets/zip-file-tree"));
@@ -1 +1 @@
1
- {"version":3,"file":"index.browser.js","sourceRoot":"","sources":["../src/index.browser.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,kFAAkF;AAClF,+DAAiD;AAmB/C,4BAAQ;AAlBV,yDAAyD;AACzD,mFAAqE;AAmBnE,kCAAW;AACI,6BAAM;AAnBvB,yDAAyD;AACzD,kEAAoD;AAmBlD,kBAAG;AAlBL,sEAAwD;AAmBtD,oCAAY;AAlBd,yDAAyD;AACzD,oEAAsD;AAkBpD,oBAAI;AAjBN,8DAAgD;AAkB9C,4BAAQ;AAjBV,yDAAyD;AACzD,+EAAiE;AAiB/D,8BAAS;AAhBX,sDAAwC;AAiBtC,oBAAI;AAhBN,sEAAwD;AAiBtD,kCAAW;AAfb,sDAAmD;AAMjD,2FANO,uBAAU,OAMP;AAWZ,oBAAoB","sourcesContent":["/*\n * Copyright (c) 2020 Erik Fortune\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n/* c8 ignore start - Browser-specific export used conditionally in package.json */\nimport * as AiAssist from './packlets/ai-assist';\n// eslint-disable-next-line @rushstack/packlets/mechanics\nimport * as CryptoUtils from './packlets/crypto-utils/index.browser';\n// eslint-disable-next-line @rushstack/packlets/mechanics\nimport * as Csv from './packlets/csv/index.browser';\nimport * as Experimental from './packlets/experimental';\n// eslint-disable-next-line @rushstack/packlets/mechanics\nimport * as Hash from './packlets/hash/index.browser';\nimport * as Mustache from './packlets/mustache';\n// eslint-disable-next-line @rushstack/packlets/mechanics\nimport * as RecordJar from './packlets/record-jar/index.browser';\nimport * as Yaml from './packlets/yaml';\nimport * as ZipFileTree from './packlets/zip-file-tree';\n\nimport { Converters } from './packlets/conversion';\n\n// Browser-safe exports - Node.js crypto-based providers excluded\n// Use BrowserCryptoProvider from @fgv/ts-web-extras for browser crypto\nexport {\n AiAssist,\n Converters,\n CryptoUtils,\n CryptoUtils as Crypto,\n Csv,\n Experimental,\n Hash,\n Mustache,\n RecordJar,\n Yaml,\n ZipFileTree\n};\n/* c8 ignore stop */\n"]}
1
+ {"version":3,"file":"index.browser.js","sourceRoot":"","sources":["../src/index.browser.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,kFAAkF;AAClF,+DAAiD;AAqB/C,4BAAQ;AApBV,yDAAyD;AACzD,mFAAqE;AAqBnE,kCAAW;AACI,6BAAM;AArBvB,yDAAyD;AACzD,kEAAoD;AAqBlD,kBAAG;AApBL,sEAAwD;AAqBtD,oCAAY;AApBd,yDAAyD;AACzD,oEAAsD;AAoBpD,oBAAI;AAnBN,8DAAgD;AAoB9C,4BAAQ;AAnBV,yDAAyD;AACzD,+EAAiE;AAmB/D,8BAAS;AAlBX,yDAAyD;AACzD,iFAAmE;AAkBjE,gCAAU;AAjBZ,sDAAwC;AAkBtC,oBAAI;AAjBN,sEAAwD;AAkBtD,kCAAW;AAhBb,sDAAmD;AAMjD,2FANO,uBAAU,OAMP;AAYZ,oBAAoB","sourcesContent":["/*\n * Copyright (c) 2020 Erik Fortune\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n/* c8 ignore start - Browser-specific export used conditionally in package.json */\nimport * as AiAssist from './packlets/ai-assist';\n// eslint-disable-next-line @rushstack/packlets/mechanics\nimport * as CryptoUtils from './packlets/crypto-utils/index.browser';\n// eslint-disable-next-line @rushstack/packlets/mechanics\nimport * as Csv from './packlets/csv/index.browser';\nimport * as Experimental from './packlets/experimental';\n// eslint-disable-next-line @rushstack/packlets/mechanics\nimport * as Hash from './packlets/hash/index.browser';\nimport * as Mustache from './packlets/mustache';\n// eslint-disable-next-line @rushstack/packlets/mechanics\nimport * as RecordJar from './packlets/record-jar/index.browser';\n// eslint-disable-next-line @rushstack/packlets/mechanics\nimport * as SaferFetch from './packlets/safer-fetch/index.browser';\nimport * as Yaml from './packlets/yaml';\nimport * as ZipFileTree from './packlets/zip-file-tree';\n\nimport { Converters } from './packlets/conversion';\n\n// Browser-safe exports - Node.js crypto-based providers excluded\n// Use BrowserCryptoProvider from @fgv/ts-web-extras for browser crypto\nexport {\n AiAssist,\n Converters,\n CryptoUtils,\n CryptoUtils as Crypto,\n Csv,\n Experimental,\n Hash,\n Mustache,\n RecordJar,\n SaferFetch,\n Yaml,\n ZipFileTree\n};\n/* c8 ignore stop */\n"]}
package/lib/index.d.ts CHANGED
@@ -5,8 +5,9 @@ import * as Experimental from './packlets/experimental';
5
5
  import * as Hash from './packlets/hash';
6
6
  import * as Mustache from './packlets/mustache';
7
7
  import * as RecordJar from './packlets/record-jar';
8
+ import * as SaferFetch from './packlets/safer-fetch';
8
9
  import * as Yaml from './packlets/yaml';
9
10
  import * as ZipFileTree from './packlets/zip-file-tree';
10
11
  import { Converters } from './packlets/conversion';
11
- export { AiAssist, Converters, CryptoUtils, Csv, Experimental, Hash, Mustache, RecordJar, Yaml, ZipFileTree };
12
+ export { AiAssist, Converters, CryptoUtils, Csv, Experimental, Hash, Mustache, RecordJar, SaferFetch, Yaml, ZipFileTree };
12
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,QAAQ,MAAM,sBAAsB,CAAC;AACjD,OAAO,KAAK,WAAW,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,YAAY,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,WAAW,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,QAAQ,MAAM,sBAAsB,CAAC;AACjD,OAAO,KAAK,WAAW,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,YAAY,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,UAAU,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,WAAW,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EACL,QAAQ,EACR,UAAU,EACV,WAAW,EACX,GAAG,EACH,YAAY,EACZ,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,UAAU,EACV,IAAI,EACJ,WAAW,EACZ,CAAC"}
package/lib/index.js CHANGED
@@ -54,7 +54,7 @@ var __importStar = (this && this.__importStar) || (function () {
54
54
  };
55
55
  })();
56
56
  Object.defineProperty(exports, "__esModule", { value: true });
57
- exports.ZipFileTree = exports.Yaml = exports.RecordJar = exports.Mustache = exports.Hash = exports.Experimental = exports.Csv = exports.CryptoUtils = exports.Converters = exports.AiAssist = void 0;
57
+ exports.ZipFileTree = exports.Yaml = exports.SaferFetch = exports.RecordJar = exports.Mustache = exports.Hash = exports.Experimental = exports.Csv = exports.CryptoUtils = exports.Converters = exports.AiAssist = void 0;
58
58
  const AiAssist = __importStar(require("./packlets/ai-assist"));
59
59
  exports.AiAssist = AiAssist;
60
60
  const CryptoUtils = __importStar(require("./packlets/crypto-utils"));
@@ -69,6 +69,8 @@ const Mustache = __importStar(require("./packlets/mustache"));
69
69
  exports.Mustache = Mustache;
70
70
  const RecordJar = __importStar(require("./packlets/record-jar"));
71
71
  exports.RecordJar = RecordJar;
72
+ const SaferFetch = __importStar(require("./packlets/safer-fetch"));
73
+ exports.SaferFetch = SaferFetch;
72
74
  const Yaml = __importStar(require("./packlets/yaml"));
73
75
  exports.Yaml = Yaml;
74
76
  const ZipFileTree = __importStar(require("./packlets/zip-file-tree"));
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,+DAAiD;AAYxC,4BAAQ;AAXjB,qEAAuD;AAWxB,kCAAW;AAV1C,oDAAsC;AAUM,kBAAG;AAT/C,sEAAwD;AASP,oCAAY;AAR7D,sDAAwC;AAQuB,oBAAI;AAPnE,8DAAgD;AAOqB,4BAAQ;AAN7E,iEAAmD;AAM4B,8BAAS;AALxF,sDAAwC;AAKkD,oBAAI;AAJ9F,sEAAwD;AAIwC,kCAAW;AAF3G,sDAAmD;AAEhC,2FAFV,uBAAU,OAEU","sourcesContent":["/*\n * Copyright (c) 2020 Erik Fortune\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport * as AiAssist from './packlets/ai-assist';\nimport * as CryptoUtils from './packlets/crypto-utils';\nimport * as Csv from './packlets/csv';\nimport * as Experimental from './packlets/experimental';\nimport * as Hash from './packlets/hash';\nimport * as Mustache from './packlets/mustache';\nimport * as RecordJar from './packlets/record-jar';\nimport * as Yaml from './packlets/yaml';\nimport * as ZipFileTree from './packlets/zip-file-tree';\n\nimport { Converters } from './packlets/conversion';\n\nexport { AiAssist, Converters, CryptoUtils, Csv, Experimental, Hash, Mustache, RecordJar, Yaml, ZipFileTree };\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,+DAAiD;AAc/C,4BAAQ;AAbV,qEAAuD;AAerD,kCAAW;AAdb,oDAAsC;AAepC,kBAAG;AAdL,sEAAwD;AAetD,oCAAY;AAdd,sDAAwC;AAetC,oBAAI;AAdN,8DAAgD;AAe9C,4BAAQ;AAdV,iEAAmD;AAejD,8BAAS;AAdX,mEAAqD;AAenD,gCAAU;AAdZ,sDAAwC;AAetC,oBAAI;AAdN,sEAAwD;AAetD,kCAAW;AAbb,sDAAmD;AAIjD,2FAJO,uBAAU,OAIP","sourcesContent":["/*\n * Copyright (c) 2020 Erik Fortune\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport * as AiAssist from './packlets/ai-assist';\nimport * as CryptoUtils from './packlets/crypto-utils';\nimport * as Csv from './packlets/csv';\nimport * as Experimental from './packlets/experimental';\nimport * as Hash from './packlets/hash';\nimport * as Mustache from './packlets/mustache';\nimport * as RecordJar from './packlets/record-jar';\nimport * as SaferFetch from './packlets/safer-fetch';\nimport * as Yaml from './packlets/yaml';\nimport * as ZipFileTree from './packlets/zip-file-tree';\n\nimport { Converters } from './packlets/conversion';\n\nexport {\n AiAssist,\n Converters,\n CryptoUtils,\n Csv,\n Experimental,\n Hash,\n Mustache,\n RecordJar,\n SaferFetch,\n Yaml,\n ZipFileTree\n};\n"]}
@@ -0,0 +1,144 @@
1
+ import { type Result } from '@fgv/ts-utils';
2
+ /**
3
+ * The address family of a parsed IP address literal.
4
+ * @public
5
+ */
6
+ export type AddressFamily = 'ipv4' | 'ipv6';
7
+ /**
8
+ * The security-relevant classification of an IP address.
9
+ *
10
+ * `'public'` is the only classification that describes an address which is
11
+ * globally routable on the public internet; every other value names a
12
+ * special-purpose range that a server-side fetch reaching untrusted input
13
+ * should not be able to reach by default.
14
+ *
15
+ * @public
16
+ */
17
+ export type AddressClassification =
18
+ /** Globally routable unicast — the only classification a default guard permits. */
19
+ 'public'
20
+ /** `0.0.0.0/8` and `::` — "this host on this network"; routes to localhost on Linux. */
21
+ | 'unspecified'
22
+ /** `127.0.0.0/8` and `::1`. */
23
+ | 'loopback'
24
+ /**
25
+ * `169.254.0.0/16` and `fe80::/10`. The IPv4 range contains the cloud
26
+ * instance-metadata endpoint (`169.254.169.254`) and is the single
27
+ * highest-value SSRF target.
28
+ */
29
+ | 'link-local'
30
+ /** RFC 1918 — `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`. */
31
+ | 'private'
32
+ /** RFC 4193 IPv6 unique-local — `fc00::/7`. */
33
+ | 'unique-local'
34
+ /** RFC 6598 carrier-grade NAT — `100.64.0.0/10`. Frequently carrier or container internal. */
35
+ | 'carrier-grade-nat'
36
+ /** RFC 2544 benchmarking — `198.18.0.0/15`. */
37
+ | 'benchmarking'
38
+ /** Documentation ranges — `192.0.2.0/24`, `198.51.100.0/24`, `203.0.113.0/24`, `2001:db8::/32`. */
39
+ | 'documentation'
40
+ /** IETF protocol assignments — `192.0.0.0/24` and `2001::/23`. */
41
+ | 'protocol-assignment'
42
+ /** `224.0.0.0/4` and `ff00::/8`. */
43
+ | 'multicast'
44
+ /** `255.255.255.255/32`. */
45
+ | 'broadcast'
46
+ /** Every other special-purpose or future-use range (e.g. `240.0.0.0/4`, `fec0::/10`). */
47
+ | 'reserved';
48
+ /**
49
+ * The way an IPv6 address carried the IPv4 address whose classification was used.
50
+ *
51
+ * Each of these is a documented SSRF bypass: an address such as
52
+ * `::ffff:169.254.169.254` is an IPv6 address by family, but the address the
53
+ * connection actually reaches is the embedded IPv4 one, so the embedded
54
+ * address is what must be classified.
55
+ *
56
+ * @public
57
+ */
58
+ export type Ipv4EmbeddingKind =
59
+ /** `::ffff:0:0/96` — the IPv4-mapped IPv6 form. */
60
+ 'ipv4-mapped'
61
+ /** `::/96` — the deprecated (RFC 4291) IPv4-compatible form. */
62
+ | 'ipv4-compatible'
63
+ /** `64:ff9b::/96` — the RFC 6052 well-known NAT64 prefix. */
64
+ | 'nat64'
65
+ /** `2002::/16` — the RFC 3056 6to4 form, whose IPv4 lives in bits 16..47. */
66
+ | '6to4';
67
+ /**
68
+ * The IPv4 address an IPv6 address embedded, and the way it embedded it.
69
+ * @public
70
+ */
71
+ export interface IEmbeddedIpv4 {
72
+ /** The encoding that carried the IPv4 address. */
73
+ readonly kind: Ipv4EmbeddingKind;
74
+ /** The dotted-quad form of the embedded IPv4 address. */
75
+ readonly address: string;
76
+ }
77
+ /**
78
+ * The result of classifying a single IP address literal.
79
+ * @public
80
+ */
81
+ export interface IClassifiedAddress {
82
+ /** The address exactly as supplied to {@link classifyAddress}. */
83
+ readonly address: string;
84
+ /**
85
+ * A canonical textual form of the address: dotted-quad for IPv4, and
86
+ * lowercase RFC 5952 hex-group form (with `::` run compression) for IPv6.
87
+ * Note that IPv6 addresses embedding an IPv4 address canonicalize to their
88
+ * hex-group form (`::ffff:a9fe:a9fe`), not to the dotted-quad mixed form;
89
+ * `embeddedIpv4` carries the readable IPv4 value.
90
+ */
91
+ readonly canonical: string;
92
+ /** The address family of the literal as supplied — never the embedded family. */
93
+ readonly family: AddressFamily;
94
+ /**
95
+ * The classification used for policy decisions. For an IPv6 address that
96
+ * embeds an IPv4 address, this is the classification of the *embedded* IPv4
97
+ * address.
98
+ */
99
+ readonly classification: AddressClassification;
100
+ /**
101
+ * Present exactly when `classification` was derived from an IPv4 address
102
+ * embedded in this IPv6 address, and absent otherwise.
103
+ */
104
+ readonly embeddedIpv4?: IEmbeddedIpv4;
105
+ }
106
+ /**
107
+ * Classifies a single IP address literal.
108
+ *
109
+ * The function is pure, synchronous, and deterministic — it performs no name
110
+ * resolution and no I/O. Input that is not an IP address literal (a DNS
111
+ * hostname, for instance) fails; callers that accept hostnames should treat a
112
+ * failure here as "not a literal" and resolve the name, then classify each
113
+ * resolved address.
114
+ *
115
+ * Accepted forms:
116
+ *
117
+ * - dotted-quad IPv4 (`169.254.169.254`)
118
+ * - the shortened and non-decimal IPv4 forms the WHATWG URL parser accepts
119
+ * (`127.1`, `2130706433`, `0177.0.0.1`, `0x7f.1`)
120
+ * - IPv6, with or without `::` compression, optionally bracketed as a URL
121
+ * `hostname` is (`[::1]`) and optionally carrying a zone id (`fe80::1%eth0`)
122
+ * - IPv6 forms that embed an IPv4 address — IPv4-mapped, IPv4-compatible,
123
+ * NAT64 and 6to4 — which are classified by their embedded IPv4 address
124
+ *
125
+ * A trailing dot is accepted on an IPv4 literal (`127.0.0.1.`), matching URL
126
+ * hostname normalization.
127
+ *
128
+ * **Classify a URL's `hostname`, never the raw URL text.** This function does
129
+ * not apply IDNA/Unicode normalization, and that step is not cosmetic: the
130
+ * platform's URL parser reads `http://127.0.0.1/`, `http://127。0。0。1/` and
131
+ * even `http://⑫7.0.0.1/` as the host `127.0.0.1`, because IDNA normalizes
132
+ * fullwidth digits, the ideographic full stop and circled numbers to their
133
+ * ASCII equivalents. Handed one of those strings directly this function fails —
134
+ * which is fail-closed, but only because the caller is then expected to treat
135
+ * "not a literal" as "resolve it as a name". Reading `new URL(...).hostname`
136
+ * gets the normalization for free and is the only supported use.
137
+ *
138
+ * @param address - the address literal to classify.
139
+ * @returns `Success` with the {@link IClassifiedAddress | classification},
140
+ * or `Failure` if the supplied text is not a well-formed IP address literal.
141
+ * @public
142
+ */
143
+ export declare function classifyAddress(address: string): Result<IClassifiedAddress>;
144
+ //# sourceMappingURL=addressClassification.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addressClassification.d.ts","sourceRoot":"","sources":["../../../src/packlets/safer-fetch/addressClassification.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAE,KAAK,MAAM,EAAiB,MAAM,eAAe,CAAC;AAE3D;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;AAE5C;;;;;;;;;GASG;AACH,MAAM,MAAM,qBAAqB;AAC/B,mFAAmF;AACjF,QAAQ;AACV,wFAAwF;GACtF,aAAa;AACf,+BAA+B;GAC7B,UAAU;AACZ;;;;GAIG;GACD,YAAY;AACd,kEAAkE;GAChE,SAAS;AACX,+CAA+C;GAC7C,cAAc;AAChB,8FAA8F;GAC5F,mBAAmB;AACrB,+CAA+C;GAC7C,cAAc;AAChB,mGAAmG;GACjG,eAAe;AACjB,kEAAkE;GAChE,qBAAqB;AACvB,oCAAoC;GAClC,WAAW;AACb,4BAA4B;GAC1B,WAAW;AACb,yFAAyF;GACvF,UAAU,CAAC;AAEf;;;;;;;;;GASG;AACH,MAAM,MAAM,iBAAiB;AAC3B,mDAAmD;AACjD,aAAa;AACf,gEAAgE;GAC9D,iBAAiB;AACnB,6DAA6D;GAC3D,OAAO;AACT,6EAA6E;GAC3E,MAAM,CAAC;AAEX;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,kDAAkD;IAClD,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,yDAAyD;IACzD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,kEAAkE;IAClE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB;;;;;;OAMG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,iFAAiF;IACjF,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,cAAc,EAAE,qBAAqB,CAAC;IAC/C;;;OAGG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC;CACvC;AAsZD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,kBAAkB,CAAC,CA0B3E"}