@naylence/advanced-security 0.3.5-test.0 → 0.3.5-test.102

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 (221) hide show
  1. package/dist/browser/index.js +13412 -13006
  2. package/dist/browser/index.js.map +1 -1
  3. package/dist/cjs/browser.js +14 -28
  4. package/dist/cjs/browser.js.map +1 -1
  5. package/dist/cjs/index.js +5 -6
  6. package/dist/cjs/index.js.map +1 -1
  7. package/dist/cjs/naylence/fame/factory-manifest.js +15 -4
  8. package/dist/cjs/naylence/fame/factory-manifest.js.map +1 -1
  9. package/dist/cjs/naylence/fame/security/cert/browser-csr.js +103 -0
  10. package/dist/cjs/naylence/fame/security/cert/browser-csr.js.map +1 -0
  11. package/dist/cjs/naylence/fame/security/cert/ca-service-client.js +340 -39
  12. package/dist/cjs/naylence/fame/security/cert/ca-service-client.js.map +1 -1
  13. package/dist/cjs/naylence/fame/security/cert/ca-service-factory.js +7 -11
  14. package/dist/cjs/naylence/fame/security/cert/ca-service-factory.js.map +1 -1
  15. package/dist/cjs/naylence/fame/security/cert/ca-types.js +10 -7
  16. package/dist/cjs/naylence/fame/security/cert/ca-types.js.map +1 -1
  17. package/dist/cjs/naylence/fame/security/cert/csr-types.js +2 -0
  18. package/dist/cjs/naylence/fame/security/cert/csr-types.js.map +1 -0
  19. package/dist/cjs/naylence/fame/security/cert/default-ca-service-factory.js +6 -10
  20. package/dist/cjs/naylence/fame/security/cert/default-ca-service-factory.js.map +1 -1
  21. package/dist/cjs/naylence/fame/security/cert/default-ca-service.js +130 -66
  22. package/dist/cjs/naylence/fame/security/cert/default-ca-service.js.map +1 -1
  23. package/dist/cjs/naylence/fame/security/cert/default-certificate-manager-factory.js +12 -16
  24. package/dist/cjs/naylence/fame/security/cert/default-certificate-manager-factory.js.map +1 -1
  25. package/dist/cjs/naylence/fame/security/cert/default-certificate-manager.js +261 -103
  26. package/dist/cjs/naylence/fame/security/cert/default-certificate-manager.js.map +1 -1
  27. package/dist/cjs/naylence/fame/security/cert/grants.js +1 -4
  28. package/dist/cjs/naylence/fame/security/cert/grants.js.map +1 -1
  29. package/dist/cjs/naylence/fame/security/cert/index.js +13 -50
  30. package/dist/cjs/naylence/fame/security/cert/index.js.map +1 -1
  31. package/dist/cjs/naylence/fame/security/cert/internal-ca-service.js +77 -123
  32. package/dist/cjs/naylence/fame/security/cert/internal-ca-service.js.map +1 -1
  33. package/dist/cjs/naylence/fame/security/cert/node-ed25519-csr.js +156 -0
  34. package/dist/cjs/naylence/fame/security/cert/node-ed25519-csr.js.map +1 -0
  35. package/dist/cjs/naylence/fame/security/cert/oid-constants.js +7 -0
  36. package/dist/cjs/naylence/fame/security/cert/oid-constants.js.map +1 -0
  37. package/dist/cjs/naylence/fame/security/cert/trust-store/anchor-utils.js +119 -0
  38. package/dist/cjs/naylence/fame/security/cert/trust-store/anchor-utils.js.map +1 -0
  39. package/dist/cjs/naylence/fame/security/cert/trust-store/env-provider.js +123 -0
  40. package/dist/cjs/naylence/fame/security/cert/trust-store/env-provider.js.map +1 -0
  41. package/dist/cjs/naylence/fame/security/cert/trust-store/fame-ca-certs-parser.js +220 -0
  42. package/dist/cjs/naylence/fame/security/cert/trust-store/fame-ca-certs-parser.js.map +1 -0
  43. package/dist/cjs/naylence/fame/security/cert/trust-store/http-bundle-provider.js +411 -0
  44. package/dist/cjs/naylence/fame/security/cert/trust-store/http-bundle-provider.js.map +1 -0
  45. package/dist/cjs/naylence/fame/security/cert/trust-store/http-signed-bundle-provider.js +2 -0
  46. package/dist/cjs/naylence/fame/security/cert/trust-store/http-signed-bundle-provider.js.map +1 -0
  47. package/dist/cjs/naylence/fame/security/cert/trust-store/static-bundle-provider.js +37 -0
  48. package/dist/cjs/naylence/fame/security/cert/trust-store/static-bundle-provider.js.map +1 -0
  49. package/dist/cjs/naylence/fame/security/cert/trust-store/trust-store-provider.js +2 -0
  50. package/dist/cjs/naylence/fame/security/cert/trust-store/trust-store-provider.js.map +1 -0
  51. package/dist/cjs/naylence/fame/security/cert/util.js +25 -30
  52. package/dist/cjs/naylence/fame/security/cert/util.js.map +1 -1
  53. package/dist/cjs/naylence/fame/security/encryption/channel/channel-encryption-manager-factory.js +10 -14
  54. package/dist/cjs/naylence/fame/security/encryption/channel/channel-encryption-manager-factory.js.map +1 -1
  55. package/dist/cjs/naylence/fame/security/encryption/channel/channel-encryption-manager.js +32 -36
  56. package/dist/cjs/naylence/fame/security/encryption/channel/channel-encryption-manager.js.map +1 -1
  57. package/dist/cjs/naylence/fame/security/encryption/channel/index.js +2 -7
  58. package/dist/cjs/naylence/fame/security/encryption/channel/index.js.map +1 -1
  59. package/dist/cjs/naylence/fame/security/encryption/composite-encryption-manager-factory.js +10 -14
  60. package/dist/cjs/naylence/fame/security/encryption/composite-encryption-manager-factory.js.map +1 -1
  61. package/dist/cjs/naylence/fame/security/encryption/composite-encryption-manager.js +7 -11
  62. package/dist/cjs/naylence/fame/security/encryption/composite-encryption-manager.js.map +1 -1
  63. package/dist/cjs/naylence/fame/security/encryption/default-secure-channel-manager-factory.js +7 -11
  64. package/dist/cjs/naylence/fame/security/encryption/default-secure-channel-manager-factory.js.map +1 -1
  65. package/dist/cjs/naylence/fame/security/encryption/default-secure-channel-manager.js +19 -23
  66. package/dist/cjs/naylence/fame/security/encryption/default-secure-channel-manager.js.map +1 -1
  67. package/dist/cjs/naylence/fame/security/encryption/encryption-manager-registry.js +9 -15
  68. package/dist/cjs/naylence/fame/security/encryption/encryption-manager-registry.js.map +1 -1
  69. package/dist/cjs/naylence/fame/security/encryption/index.js +6 -15
  70. package/dist/cjs/naylence/fame/security/encryption/index.js.map +1 -1
  71. package/dist/cjs/naylence/fame/security/encryption/sealed/index.js +2 -7
  72. package/dist/cjs/naylence/fame/security/encryption/sealed/index.js.map +1 -1
  73. package/dist/cjs/naylence/fame/security/encryption/sealed/x25519-encryption-manager-factory.js +8 -12
  74. package/dist/cjs/naylence/fame/security/encryption/sealed/x25519-encryption-manager-factory.js.map +1 -1
  75. package/dist/cjs/naylence/fame/security/encryption/sealed/x25519-encryption-manager.js +26 -30
  76. package/dist/cjs/naylence/fame/security/encryption/sealed/x25519-encryption-manager.js.map +1 -1
  77. package/dist/cjs/naylence/fame/security/index.js +5 -10
  78. package/dist/cjs/naylence/fame/security/index.js.map +1 -1
  79. package/dist/cjs/naylence/fame/security/keys/index.js +2 -8
  80. package/dist/cjs/naylence/fame/security/keys/index.js.map +1 -1
  81. package/dist/cjs/naylence/fame/security/keys/x5c-key-manager-factory.js +9 -13
  82. package/dist/cjs/naylence/fame/security/keys/x5c-key-manager-factory.js.map +1 -1
  83. package/dist/cjs/naylence/fame/security/keys/x5c-key-manager.js +16 -52
  84. package/dist/cjs/naylence/fame/security/keys/x5c-key-manager.js.map +1 -1
  85. package/dist/cjs/naylence/fame/security/register-advanced-security-factories.js +8 -44
  86. package/dist/cjs/naylence/fame/security/register-advanced-security-factories.js.map +1 -1
  87. package/dist/cjs/naylence/fame/security/signing/eddsa-envelope-signer-factory.js +6 -43
  88. package/dist/cjs/naylence/fame/security/signing/eddsa-envelope-signer-factory.js.map +1 -1
  89. package/dist/cjs/naylence/fame/security/signing/eddsa-envelope-verifier-factory.js +8 -12
  90. package/dist/cjs/naylence/fame/security/signing/eddsa-envelope-verifier-factory.js.map +1 -1
  91. package/dist/cjs/naylence/fame/security/signing/eddsa-envelope-verifier.js +33 -70
  92. package/dist/cjs/naylence/fame/security/signing/eddsa-envelope-verifier.js.map +1 -1
  93. package/dist/cjs/naylence/fame/stickiness/aft-helper.js +8 -13
  94. package/dist/cjs/naylence/fame/stickiness/aft-helper.js.map +1 -1
  95. package/dist/cjs/naylence/fame/stickiness/aft-load-balancer-stickiness-manager-factory.js +12 -16
  96. package/dist/cjs/naylence/fame/stickiness/aft-load-balancer-stickiness-manager-factory.js.map +1 -1
  97. package/dist/cjs/naylence/fame/stickiness/aft-load-balancer-stickiness-manager.js +10 -14
  98. package/dist/cjs/naylence/fame/stickiness/aft-load-balancer-stickiness-manager.js.map +1 -1
  99. package/dist/cjs/naylence/fame/stickiness/aft-model.js +6 -14
  100. package/dist/cjs/naylence/fame/stickiness/aft-model.js.map +1 -1
  101. package/dist/cjs/naylence/fame/stickiness/aft-replica-stickiness-manager-factory.js +12 -16
  102. package/dist/cjs/naylence/fame/stickiness/aft-replica-stickiness-manager-factory.js.map +1 -1
  103. package/dist/cjs/naylence/fame/stickiness/aft-replica-stickiness-manager.js +13 -18
  104. package/dist/cjs/naylence/fame/stickiness/aft-replica-stickiness-manager.js.map +1 -1
  105. package/dist/cjs/naylence/fame/stickiness/aft-signer.js +23 -30
  106. package/dist/cjs/naylence/fame/stickiness/aft-signer.js.map +1 -1
  107. package/dist/cjs/naylence/fame/stickiness/aft-utils.js +3 -8
  108. package/dist/cjs/naylence/fame/stickiness/aft-utils.js.map +1 -1
  109. package/dist/cjs/naylence/fame/stickiness/aft-verifier.js +21 -28
  110. package/dist/cjs/naylence/fame/stickiness/aft-verifier.js.map +1 -1
  111. package/dist/cjs/naylence/fame/stickiness/index.js +10 -39
  112. package/dist/cjs/naylence/fame/stickiness/index.js.map +1 -1
  113. package/dist/cjs/naylence/fame/stickiness/stickiness-mode.js +3 -7
  114. package/dist/cjs/naylence/fame/stickiness/stickiness-mode.js.map +1 -1
  115. package/dist/cjs/naylence/fame/welcome/advanced-welcome-service-factory.js +14 -18
  116. package/dist/cjs/naylence/fame/welcome/advanced-welcome-service-factory.js.map +1 -1
  117. package/dist/cjs/naylence/fame/welcome/advanced-welcome-service.js +14 -18
  118. package/dist/cjs/naylence/fame/welcome/advanced-welcome-service.js.map +1 -1
  119. package/dist/cjs/naylence/fame/welcome/index.js +2 -8
  120. package/dist/cjs/naylence/fame/welcome/index.js.map +1 -1
  121. package/dist/cjs/plugin.js +8 -10
  122. package/dist/cjs/plugin.js.map +1 -1
  123. package/dist/cjs/version.js +8 -0
  124. package/dist/cjs/version.js.map +1 -0
  125. package/dist/esm/browser.js +3 -0
  126. package/dist/esm/browser.js.map +1 -1
  127. package/dist/esm/index.js +2 -0
  128. package/dist/esm/index.js.map +1 -1
  129. package/dist/esm/naylence/fame/factory-manifest.js +14 -0
  130. package/dist/esm/naylence/fame/factory-manifest.js.map +1 -1
  131. package/dist/esm/naylence/fame/security/cert/browser-csr.js +103 -0
  132. package/dist/esm/naylence/fame/security/cert/browser-csr.js.map +1 -0
  133. package/dist/esm/naylence/fame/security/cert/ca-server.js +35 -0
  134. package/dist/esm/naylence/fame/security/cert/ca-server.js.map +1 -1
  135. package/dist/esm/naylence/fame/security/cert/ca-service-client.js +331 -24
  136. package/dist/esm/naylence/fame/security/cert/ca-service-client.js.map +1 -1
  137. package/dist/esm/naylence/fame/security/cert/ca-types.js +8 -0
  138. package/dist/esm/naylence/fame/security/cert/ca-types.js.map +1 -1
  139. package/dist/esm/naylence/fame/security/cert/csr-types.js +2 -0
  140. package/dist/esm/naylence/fame/security/cert/csr-types.js.map +1 -0
  141. package/dist/esm/naylence/fame/security/cert/default-ca-service.js +102 -1
  142. package/dist/esm/naylence/fame/security/cert/default-ca-service.js.map +1 -1
  143. package/dist/esm/naylence/fame/security/cert/default-certificate-manager-factory.js +2 -2
  144. package/dist/esm/naylence/fame/security/cert/default-certificate-manager-factory.js.map +1 -1
  145. package/dist/esm/naylence/fame/security/cert/default-certificate-manager.js +239 -44
  146. package/dist/esm/naylence/fame/security/cert/default-certificate-manager.js.map +1 -1
  147. package/dist/esm/naylence/fame/security/cert/index.js +4 -1
  148. package/dist/esm/naylence/fame/security/cert/index.js.map +1 -1
  149. package/dist/esm/naylence/fame/security/cert/internal-ca-service.js +3 -6
  150. package/dist/esm/naylence/fame/security/cert/internal-ca-service.js.map +1 -1
  151. package/dist/esm/naylence/fame/security/cert/node-ed25519-csr.js +156 -0
  152. package/dist/esm/naylence/fame/security/cert/node-ed25519-csr.js.map +1 -0
  153. package/dist/esm/naylence/fame/security/cert/oid-constants.js +7 -0
  154. package/dist/esm/naylence/fame/security/cert/oid-constants.js.map +1 -0
  155. package/dist/esm/naylence/fame/security/cert/trust-store/anchor-utils.js +119 -0
  156. package/dist/esm/naylence/fame/security/cert/trust-store/anchor-utils.js.map +1 -0
  157. package/dist/esm/naylence/fame/security/cert/trust-store/env-provider.js +123 -0
  158. package/dist/esm/naylence/fame/security/cert/trust-store/env-provider.js.map +1 -0
  159. package/dist/esm/naylence/fame/security/cert/trust-store/fame-ca-certs-parser.js +220 -0
  160. package/dist/esm/naylence/fame/security/cert/trust-store/fame-ca-certs-parser.js.map +1 -0
  161. package/dist/esm/naylence/fame/security/cert/trust-store/http-bundle-provider.js +411 -0
  162. package/dist/esm/naylence/fame/security/cert/trust-store/http-bundle-provider.js.map +1 -0
  163. package/dist/esm/naylence/fame/security/cert/trust-store/http-signed-bundle-provider.js +2 -0
  164. package/dist/esm/naylence/fame/security/cert/trust-store/http-signed-bundle-provider.js.map +1 -0
  165. package/dist/esm/naylence/fame/security/cert/trust-store/static-bundle-provider.js +37 -0
  166. package/dist/esm/naylence/fame/security/cert/trust-store/static-bundle-provider.js.map +1 -0
  167. package/dist/esm/naylence/fame/security/cert/trust-store/trust-store-provider.js +2 -0
  168. package/dist/esm/naylence/fame/security/cert/trust-store/trust-store-provider.js.map +1 -0
  169. package/dist/esm/naylence/fame/security/cert/util.js +2 -3
  170. package/dist/esm/naylence/fame/security/cert/util.js.map +1 -1
  171. package/dist/esm/plugin.js +2 -0
  172. package/dist/esm/plugin.js.map +1 -1
  173. package/dist/esm/version.js +8 -0
  174. package/dist/esm/version.js.map +1 -0
  175. package/dist/types/browser.d.ts +3 -0
  176. package/dist/types/browser.d.ts.map +1 -1
  177. package/dist/types/index.d.ts +1 -0
  178. package/dist/types/index.d.ts.map +1 -1
  179. package/dist/types/naylence/fame/factory-manifest.d.ts +2 -0
  180. package/dist/types/naylence/fame/factory-manifest.d.ts.map +1 -1
  181. package/dist/types/naylence/fame/security/cert/browser-csr.d.ts +9 -0
  182. package/dist/types/naylence/fame/security/cert/browser-csr.d.ts.map +1 -0
  183. package/dist/types/naylence/fame/security/cert/ca-server.d.ts.map +1 -1
  184. package/dist/types/naylence/fame/security/cert/ca-service-client.d.ts.map +1 -1
  185. package/dist/types/naylence/fame/security/cert/ca-types.d.ts +32 -0
  186. package/dist/types/naylence/fame/security/cert/ca-types.d.ts.map +1 -1
  187. package/dist/types/naylence/fame/security/cert/csr-types.d.ts +5 -0
  188. package/dist/types/naylence/fame/security/cert/csr-types.d.ts.map +1 -0
  189. package/dist/types/naylence/fame/security/cert/default-ca-service.d.ts +2 -1
  190. package/dist/types/naylence/fame/security/cert/default-ca-service.d.ts.map +1 -1
  191. package/dist/types/naylence/fame/security/cert/default-certificate-manager-factory.d.ts +3 -3
  192. package/dist/types/naylence/fame/security/cert/default-certificate-manager-factory.d.ts.map +1 -1
  193. package/dist/types/naylence/fame/security/cert/default-certificate-manager.d.ts +32 -0
  194. package/dist/types/naylence/fame/security/cert/default-certificate-manager.d.ts.map +1 -1
  195. package/dist/types/naylence/fame/security/cert/index.d.ts +5 -1
  196. package/dist/types/naylence/fame/security/cert/index.d.ts.map +1 -1
  197. package/dist/types/naylence/fame/security/cert/internal-ca-service.d.ts +0 -3
  198. package/dist/types/naylence/fame/security/cert/internal-ca-service.d.ts.map +1 -1
  199. package/dist/types/naylence/fame/security/cert/node-ed25519-csr.d.ts +9 -0
  200. package/dist/types/naylence/fame/security/cert/node-ed25519-csr.d.ts.map +1 -0
  201. package/dist/types/naylence/fame/security/cert/oid-constants.d.ts +7 -0
  202. package/dist/types/naylence/fame/security/cert/oid-constants.d.ts.map +1 -0
  203. package/dist/types/naylence/fame/security/cert/trust-store/anchor-utils.d.ts +12 -0
  204. package/dist/types/naylence/fame/security/cert/trust-store/anchor-utils.d.ts.map +1 -0
  205. package/dist/types/naylence/fame/security/cert/trust-store/env-provider.d.ts +7 -0
  206. package/dist/types/naylence/fame/security/cert/trust-store/env-provider.d.ts.map +1 -0
  207. package/dist/types/naylence/fame/security/cert/trust-store/fame-ca-certs-parser.d.ts +9 -0
  208. package/dist/types/naylence/fame/security/cert/trust-store/fame-ca-certs-parser.d.ts.map +1 -0
  209. package/dist/types/naylence/fame/security/cert/trust-store/http-bundle-provider.d.ts +31 -0
  210. package/dist/types/naylence/fame/security/cert/trust-store/http-bundle-provider.d.ts.map +1 -0
  211. package/dist/types/naylence/fame/security/cert/trust-store/http-signed-bundle-provider.d.ts +2 -0
  212. package/dist/types/naylence/fame/security/cert/trust-store/http-signed-bundle-provider.d.ts.map +1 -0
  213. package/dist/types/naylence/fame/security/cert/trust-store/static-bundle-provider.d.ts +13 -0
  214. package/dist/types/naylence/fame/security/cert/trust-store/static-bundle-provider.d.ts.map +1 -0
  215. package/dist/types/naylence/fame/security/cert/trust-store/trust-store-provider.d.ts +37 -0
  216. package/dist/types/naylence/fame/security/cert/trust-store/trust-store-provider.d.ts.map +1 -0
  217. package/dist/types/naylence/fame/security/cert/util.d.ts.map +1 -1
  218. package/dist/types/plugin.d.ts.map +1 -1
  219. package/dist/types/version.d.ts +6 -0
  220. package/dist/types/version.d.ts.map +1 -0
  221. package/package.json +11 -7
@@ -0,0 +1,220 @@
1
+ export function parseFameCaCerts(rawSources, options = {}) {
2
+ const entries = normalizeSourceEntries(rawSources);
3
+ if (entries.length === 0) {
4
+ return [];
5
+ }
6
+ const envPins = normalizeStringArray(options.hashPins);
7
+ const envSpkis = normalizeStringArray(options.allowedSpkis);
8
+ const envAllowTofu = parseBoolean(options.allowTofu);
9
+ const envRefreshMs = parseInteger(options.refreshIntervalMs);
10
+ const sources = [];
11
+ for (const entry of entries) {
12
+ if (entry.startsWith("data:")) {
13
+ sources.push({ type: "DATA_PEM", dataUri: entry });
14
+ continue;
15
+ }
16
+ if (entry.startsWith("http://")) {
17
+ throw new Error("FAME_CA_CERTS may not reference insecure HTTP URLs");
18
+ }
19
+ if (entry.startsWith("https://")) {
20
+ const { source, pins } = buildHttpsSource(entry, {
21
+ hashPins: envPins,
22
+ allowedSpkis: envSpkis,
23
+ allowTofu: envAllowTofu,
24
+ refreshIntervalMs: envRefreshMs,
25
+ });
26
+ sources.push({ ...source, ...pins });
27
+ continue;
28
+ }
29
+ if (entry.startsWith("file://")) {
30
+ sources.push({
31
+ type: "FILE",
32
+ path: extractFilePath(entry),
33
+ });
34
+ continue;
35
+ }
36
+ if (entry.includes("-----BEGIN")) {
37
+ sources.push({ type: "INLINE_PEM", pem: entry });
38
+ continue;
39
+ }
40
+ sources.push({ type: "FILE", path: entry });
41
+ }
42
+ return sources;
43
+ }
44
+ function normalizeSourceEntries(candidate) {
45
+ if (!candidate) {
46
+ return [];
47
+ }
48
+ if (Array.isArray(candidate)) {
49
+ return candidate
50
+ .map((value) => (typeof value === "string" ? value.trim() : ""))
51
+ .filter((value) => value.length > 0);
52
+ }
53
+ if (typeof candidate === "string") {
54
+ const trimmed = candidate.trim();
55
+ if (!trimmed) {
56
+ return [];
57
+ }
58
+ if (trimmed.startsWith("[")) {
59
+ try {
60
+ const parsed = JSON.parse(trimmed);
61
+ if (Array.isArray(parsed)) {
62
+ return parsed
63
+ .map((value) => (typeof value === "string" ? value.trim() : ""))
64
+ .filter((value) => value.length > 0);
65
+ }
66
+ }
67
+ catch {
68
+ // fall through to delimiter parsing
69
+ }
70
+ }
71
+ if (trimmed.startsWith("data:")) {
72
+ return [trimmed];
73
+ }
74
+ if (trimmed.includes("\n")) {
75
+ return trimmed
76
+ .split(/\s*\n+\s*/u)
77
+ .map((value) => value.trim())
78
+ .filter((value) => value.length > 0);
79
+ }
80
+ return trimmed
81
+ .split(/\s*,\s*/u)
82
+ .map((value) => value.trim())
83
+ .filter((value) => value.length > 0);
84
+ }
85
+ return [];
86
+ }
87
+ function buildHttpsSource(value, defaults) {
88
+ const url = new URL(value);
89
+ if (url.protocol !== "https:") {
90
+ throw new Error("HTTPS trust bundle URL must use https://");
91
+ }
92
+ const queryPins = extractPinsFromQuery(url);
93
+ const hashPins = mergeUnique(defaults.hashPins ?? [], queryPins.hashPins ?? []);
94
+ const allowedSpkis = mergeUnique(defaults.allowedSpkis ?? [], queryPins.allowedSpkis ?? []);
95
+ const allowTofu = queryPins.allowTofu ?? defaults.allowTofu ?? undefined;
96
+ const refreshIntervalMs = queryPins.refreshIntervalMs ?? defaults.refreshIntervalMs ?? undefined;
97
+ const source = {
98
+ type: "HTTPS_BUNDLE",
99
+ url: url.toString(),
100
+ };
101
+ return {
102
+ source,
103
+ pins: {
104
+ hashPins: hashPins.length > 0 ? hashPins : undefined,
105
+ allowedSpkis: allowedSpkis.length > 0 ? allowedSpkis : undefined,
106
+ allowTofu,
107
+ refreshIntervalMs,
108
+ },
109
+ };
110
+ }
111
+ function extractPinsFromQuery(url) {
112
+ const hashPins = [];
113
+ const hashKeys = ["sha256", "hash", "bundle_sha256", "pin", "pins"];
114
+ for (const key of hashKeys) {
115
+ const values = url.searchParams.getAll(key);
116
+ for (const value of values) {
117
+ if (value) {
118
+ hashPins.push(value.trim());
119
+ }
120
+ }
121
+ }
122
+ const allowedSpkis = [];
123
+ const spkiKeys = ["spki", "allowed_spki", "allowed_spkis"];
124
+ for (const key of spkiKeys) {
125
+ const values = url.searchParams.getAll(key);
126
+ for (const value of values) {
127
+ if (value) {
128
+ allowedSpkis.push(value.trim());
129
+ }
130
+ }
131
+ }
132
+ let allowTofu;
133
+ const tofuParam = url.searchParams.get("tofu") ?? url.searchParams.get("allow_tofu");
134
+ if (tofuParam !== null) {
135
+ allowTofu = parseBoolean(tofuParam);
136
+ }
137
+ let refreshIntervalMs;
138
+ const refreshParam = url.searchParams.get("refresh") ?? url.searchParams.get("interval");
139
+ if (refreshParam !== null) {
140
+ const parsed = parseInteger(refreshParam);
141
+ if (typeof parsed === "number" && parsed > 0) {
142
+ refreshIntervalMs = parsed;
143
+ }
144
+ }
145
+ return {
146
+ hashPins: hashPins.length > 0 ? hashPins : undefined,
147
+ allowedSpkis: allowedSpkis.length > 0 ? allowedSpkis : undefined,
148
+ allowTofu,
149
+ refreshIntervalMs,
150
+ };
151
+ }
152
+ function extractFilePath(uri) {
153
+ try {
154
+ const url = new URL(uri);
155
+ if (url.protocol !== "file:") {
156
+ return uri;
157
+ }
158
+ return url.pathname;
159
+ }
160
+ catch {
161
+ return uri;
162
+ }
163
+ }
164
+ function normalizeStringArray(input) {
165
+ if (!input) {
166
+ return [];
167
+ }
168
+ if (Array.isArray(input)) {
169
+ return input.map((value) => value.trim()).filter((value) => value.length > 0);
170
+ }
171
+ if (typeof input === "string") {
172
+ return input
173
+ .split(/\s*,\s*/u)
174
+ .map((value) => value.trim())
175
+ .filter((value) => value.length > 0);
176
+ }
177
+ return [];
178
+ }
179
+ function parseBoolean(value) {
180
+ if (typeof value === "boolean") {
181
+ return value;
182
+ }
183
+ if (typeof value === "string") {
184
+ const normalized = value.trim().toLowerCase();
185
+ if (normalized === "true" || normalized === "1") {
186
+ return true;
187
+ }
188
+ if (normalized === "false" || normalized === "0") {
189
+ return false;
190
+ }
191
+ }
192
+ return undefined;
193
+ }
194
+ function parseInteger(value) {
195
+ if (typeof value === "number" && Number.isFinite(value)) {
196
+ return value;
197
+ }
198
+ if (typeof value === "string") {
199
+ const parsed = Number.parseInt(value, 10);
200
+ if (Number.isFinite(parsed)) {
201
+ return parsed;
202
+ }
203
+ }
204
+ return undefined;
205
+ }
206
+ function mergeUnique(left, right) {
207
+ const set = new Set();
208
+ for (const value of left) {
209
+ if (value) {
210
+ set.add(value);
211
+ }
212
+ }
213
+ for (const value of right) {
214
+ if (value) {
215
+ set.add(value);
216
+ }
217
+ }
218
+ return Array.from(set);
219
+ }
220
+ //# sourceMappingURL=fame-ca-certs-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fame-ca-certs-parser.js","sourceRoot":"","sources":["../../../../../../../src/naylence/fame/security/cert/trust-store/fame-ca-certs-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,411 @@
1
+ import { sha256 } from "@noble/hashes/sha2.js";
2
+ import { computeSpkiSha256, normalizePem, pemChainToAnchors, toBase64Url, withComputedSpki, } from "./anchor-utils.js";
3
+ const DEFAULT_REFRESH_INTERVAL_MS = 86400000; // 24 hours
4
+ const MIN_REFRESH_INTERVAL_MS = 60000; // 1 minute
5
+ const consoleLogger = {
6
+ debug: (...args) => {
7
+ if (!isProductionEnvironment()) {
8
+ console.debug("[trust-bundle]", ...args);
9
+ }
10
+ },
11
+ warn: (...args) => {
12
+ console.warn("[trust-bundle]", ...args);
13
+ },
14
+ };
15
+ export class HttpBundleProvider {
16
+ constructor(options) {
17
+ this.lastFetched = 0;
18
+ this.etag = null;
19
+ this.lastKnownHash = null;
20
+ this.version = null;
21
+ this.anchors = null;
22
+ this.inflight = null;
23
+ this.listeners = new Set();
24
+ this.initialized = false;
25
+ if (!options.url) {
26
+ throw new Error("HTTP trust bundle requires a URL");
27
+ }
28
+ const parsed = new URL(options.url);
29
+ if (parsed.protocol !== "https:") {
30
+ throw new Error("Trust bundle URL must use HTTPS");
31
+ }
32
+ this.url = parsed;
33
+ this.refreshIntervalMs = normalizeRefreshInterval(options.refreshIntervalMs);
34
+ this.hashPins = normalizeHashPins(options.hashPins);
35
+ this.allowedSpkis = normalizeAllowedSpkis(options.allowedSpkis);
36
+ this.allowTofu = options.allowTofu === true;
37
+ this.enforceBrowserPins = options.enforcePinsInBrowser !== false;
38
+ this.cacheKey =
39
+ options.cacheKey ?? computeCacheKey(`${parsed.origin}${parsed.pathname}`);
40
+ if (isBrowserEnvironment() && !this.allowTofu && this.enforceBrowserPins) {
41
+ if (this.hashPins.length === 0 && this.allowedSpkis.length === 0) {
42
+ throw new Error("Browser environments require hash pin, SPKI allowlist, or TOFU");
43
+ }
44
+ }
45
+ }
46
+ async getRoots() {
47
+ if (!this.initialized) {
48
+ await this.initialize();
49
+ }
50
+ if (this.inflight) {
51
+ return this.inflight;
52
+ }
53
+ const now = Date.now();
54
+ const stale = now - this.lastFetched >= this.refreshIntervalMs;
55
+ if (stale || !this.anchors) {
56
+ this.inflight = this.fetchLatest()
57
+ .catch((error) => {
58
+ consoleLogger.warn("Trust bundle refresh failed", error);
59
+ if (this.anchors) {
60
+ return this.anchors;
61
+ }
62
+ throw error;
63
+ })
64
+ .finally(() => {
65
+ this.inflight = null;
66
+ });
67
+ return this.inflight;
68
+ }
69
+ return this.anchors;
70
+ }
71
+ onUpdate(callback) {
72
+ this.listeners.add(callback);
73
+ return () => {
74
+ this.listeners.delete(callback);
75
+ };
76
+ }
77
+ async initialize() {
78
+ try {
79
+ const cached = await loadCache(this.cacheKey);
80
+ if (cached) {
81
+ this.applyCachedEntry(cached);
82
+ consoleLogger.debug("Loaded trust bundle from cache", {
83
+ url: this.url.href,
84
+ anchorCount: cached.anchors.length,
85
+ });
86
+ }
87
+ }
88
+ catch (error) {
89
+ consoleLogger.warn("Failed to load cached trust bundle", error);
90
+ }
91
+ this.initialized = true;
92
+ }
93
+ applyCachedEntry(entry) {
94
+ this.anchors = withComputedSpki(entry.anchors);
95
+ this.etag = entry.etag;
96
+ this.lastFetched = entry.fetchedAt;
97
+ this.lastKnownHash = entry.hash;
98
+ this.version = entry.version;
99
+ }
100
+ async fetchLatest() {
101
+ const headers = {
102
+ "Accept": "application/json, application/pem-certificate-chain, text/plain",
103
+ };
104
+ if (this.etag) {
105
+ headers["If-None-Match"] = this.etag;
106
+ }
107
+ const response = await fetch(this.url, {
108
+ method: "GET",
109
+ headers,
110
+ cache: "no-store",
111
+ });
112
+ if (response.status === 304 && this.anchors) {
113
+ this.lastFetched = Date.now();
114
+ return this.anchors;
115
+ }
116
+ if (!response.ok) {
117
+ throw new Error(`Failed to download trust bundle: ${response.status} ${response.statusText}`);
118
+ }
119
+ const arrayBuffer = await response.arrayBuffer();
120
+ const payload = new Uint8Array(arrayBuffer);
121
+ const hash = computeHash(payload);
122
+ const pins = this.hashPins.length > 0 ? this.hashPins : null;
123
+ if (pins && !pins.includes(hash)) {
124
+ throw new Error("Trust bundle hash mismatch");
125
+ }
126
+ let expectedHash = pins ? hash : null;
127
+ if (!pins) {
128
+ if (this.lastKnownHash) {
129
+ if (this.lastKnownHash !== hash) {
130
+ throw new Error("Trust bundle hash changed without pin");
131
+ }
132
+ expectedHash = hash;
133
+ }
134
+ else if (this.allowTofu) {
135
+ expectedHash = hash;
136
+ }
137
+ else if (isBrowserEnvironment() && this.enforceBrowserPins) {
138
+ throw new Error("Browser download without pins or TOFU is blocked");
139
+ }
140
+ }
141
+ const bundle = parseBundlePayload(payload, this.url.href);
142
+ if (bundle.version !== null && this.version !== null) {
143
+ if (bundle.version < this.version) {
144
+ throw new Error("Trust bundle downgrade detected");
145
+ }
146
+ }
147
+ if (this.allowedSpkis.length > 0) {
148
+ enforceSpkiAllowlist(bundle.anchors, this.allowedSpkis);
149
+ }
150
+ const etagHeader = response.headers.get("etag");
151
+ this.anchors = withComputedSpki(bundle.anchors);
152
+ this.etag = etagHeader;
153
+ this.lastFetched = Date.now();
154
+ this.lastKnownHash = expectedHash;
155
+ this.version = bundle.version;
156
+ const cacheEntry = {
157
+ anchors: this.anchors,
158
+ etag: this.etag,
159
+ fetchedAt: this.lastFetched,
160
+ hash: this.lastKnownHash,
161
+ version: this.version,
162
+ };
163
+ await saveCache(this.cacheKey, cacheEntry);
164
+ this.notifyListeners();
165
+ return this.anchors;
166
+ }
167
+ notifyListeners() {
168
+ for (const callback of this.listeners) {
169
+ try {
170
+ callback();
171
+ }
172
+ catch (error) {
173
+ consoleLogger.warn("Trust bundle listener failed", error);
174
+ }
175
+ }
176
+ }
177
+ }
178
+ function parseBundlePayload(payload, sourceUrl) {
179
+ const text = bytesToUtf8(payload);
180
+ const trimmed = text.trim();
181
+ if (trimmed.startsWith("{")) {
182
+ const parsed = JSON.parse(trimmed);
183
+ const version = typeof parsed.version === "number" ? parsed.version : null;
184
+ const roots = Array.isArray(parsed.roots) ? parsed.roots : [];
185
+ const anchors = roots
186
+ .map((root) => {
187
+ const record = root;
188
+ const pem = normalizePem(String(record.pem ?? ""));
189
+ if (!pem) {
190
+ return null;
191
+ }
192
+ const anchor = {
193
+ pem,
194
+ ...(typeof record.kid === "string" ? { kid: record.kid } : {}),
195
+ ...(typeof record.validUntil === "string"
196
+ ? { notAfter: record.validUntil }
197
+ : {}),
198
+ ...(typeof record.notBefore === "string"
199
+ ? { notBefore: record.notBefore }
200
+ : {}),
201
+ };
202
+ return anchor;
203
+ })
204
+ .filter((anchor) => anchor !== null);
205
+ if (anchors.length === 0) {
206
+ throw new Error("Trust bundle JSON does not contain any roots");
207
+ }
208
+ return { anchors, version };
209
+ }
210
+ if (trimmed.includes("-----BEGIN")) {
211
+ return { anchors: pemChainToAnchors(trimmed), version: null };
212
+ }
213
+ throw new Error(`Unsupported trust bundle format from ${sourceUrl}`);
214
+ }
215
+ function enforceSpkiAllowlist(anchors, allowlist) {
216
+ const missing = [];
217
+ for (const anchor of anchors) {
218
+ const spki = anchor.spkiSha256 ?? computeSpkiSha256(anchor.pem);
219
+ if (!spki || !allowlist.includes(spki)) {
220
+ missing.push(anchor.kid ?? spki ?? "unknown");
221
+ }
222
+ }
223
+ if (missing.length > 0) {
224
+ throw new Error(`Trust bundle contains roots not present in SPKI allowlist: ${missing.join(",")}`);
225
+ }
226
+ }
227
+ function normalizeHashPins(pins) {
228
+ if (!pins || pins.length === 0) {
229
+ return [];
230
+ }
231
+ return pins
232
+ .map((pin) => pin.trim())
233
+ .filter((pin) => pin.length > 0)
234
+ .map((pin) => {
235
+ if (/^[0-9a-fA-F]{64}$/u.test(pin)) {
236
+ return hexToBase64Url(pin);
237
+ }
238
+ return pin;
239
+ });
240
+ }
241
+ function normalizeAllowedSpkis(entries) {
242
+ if (!entries || entries.length === 0) {
243
+ return [];
244
+ }
245
+ return entries.map((entry) => entry.trim()).filter((entry) => entry.length);
246
+ }
247
+ function normalizeRefreshInterval(value) {
248
+ if (typeof value !== "number" || Number.isNaN(value) || value <= 0) {
249
+ return DEFAULT_REFRESH_INTERVAL_MS;
250
+ }
251
+ return Math.max(MIN_REFRESH_INTERVAL_MS, Math.floor(value));
252
+ }
253
+ function computeHash(payload) {
254
+ const digest = sha256(payload);
255
+ return toBase64Url(digest);
256
+ }
257
+ function hexToBase64Url(hex) {
258
+ const bytes = new Uint8Array(hex.length / 2);
259
+ for (let index = 0; index < bytes.length; index += 1) {
260
+ bytes[index] = parseInt(hex.slice(index * 2, index * 2 + 2), 16);
261
+ }
262
+ return toBase64Url(bytes);
263
+ }
264
+ function bytesToUtf8(data) {
265
+ if (typeof TextDecoder !== "undefined") {
266
+ return new TextDecoder().decode(data);
267
+ }
268
+ if (typeof Buffer !== "undefined") {
269
+ return Buffer.from(data).toString("utf8");
270
+ }
271
+ return String.fromCharCode(...Array.from(data));
272
+ }
273
+ function computeCacheKey(value) {
274
+ const digest = sha256(new TextEncoder().encode(value));
275
+ return Array.from(digest)
276
+ .map((byte) => byte.toString(16).padStart(2, "0"))
277
+ .join("");
278
+ }
279
+ async function loadCache(key) {
280
+ if (isNodeEnvironment()) {
281
+ return loadCacheFromFile(key);
282
+ }
283
+ return loadCacheFromBrowser(key);
284
+ }
285
+ async function saveCache(key, entry) {
286
+ if (isNodeEnvironment()) {
287
+ await saveCacheToFile(key, entry);
288
+ }
289
+ else {
290
+ await saveCacheToBrowser(key, entry);
291
+ }
292
+ }
293
+ async function loadCacheFromFile(key) {
294
+ try {
295
+ const { default: path } = await import("node:path");
296
+ const fs = await import("node:fs/promises");
297
+ const os = await import("node:os");
298
+ const dir = path.join(os.homedir(), ".naylence", "trust-bundles");
299
+ const filePath = path.join(dir, `${key}.json`);
300
+ const content = await fs.readFile(filePath, "utf8");
301
+ const parsed = JSON.parse(content);
302
+ return parsed;
303
+ }
304
+ catch (error) {
305
+ if (error?.code === "ENOENT") {
306
+ return null;
307
+ }
308
+ throw error;
309
+ }
310
+ }
311
+ async function saveCacheToFile(key, entry) {
312
+ const { default: path } = await import("node:path");
313
+ const fs = await import("node:fs/promises");
314
+ const os = await import("node:os");
315
+ const dir = path.join(os.homedir(), ".naylence", "trust-bundles");
316
+ await fs.mkdir(dir, { recursive: true });
317
+ const filePath = path.join(dir, `${key}.json`);
318
+ const payload = JSON.stringify(entry, null, 2);
319
+ await fs.writeFile(filePath, payload, "utf8");
320
+ }
321
+ const BROWSER_CACHE_NAMESPACE = "naylence.trustBundles";
322
+ async function loadCacheFromBrowser(key) {
323
+ const store = await openBrowserStore();
324
+ if (!store) {
325
+ return null;
326
+ }
327
+ return store.get(key);
328
+ }
329
+ async function saveCacheToBrowser(key, entry) {
330
+ const store = await openBrowserStore();
331
+ if (!store) {
332
+ return;
333
+ }
334
+ await store.set(key, entry);
335
+ }
336
+ async function openBrowserStore() {
337
+ if (typeof indexedDB !== "undefined") {
338
+ return openIndexedDbStore();
339
+ }
340
+ if (typeof localStorage !== "undefined") {
341
+ return {
342
+ async get(key) {
343
+ const payload = localStorage.getItem(`${BROWSER_CACHE_NAMESPACE}:${key}`);
344
+ if (!payload) {
345
+ return null;
346
+ }
347
+ return JSON.parse(payload);
348
+ },
349
+ async set(key, value) {
350
+ localStorage.setItem(`${BROWSER_CACHE_NAMESPACE}:${key}`, JSON.stringify(value));
351
+ },
352
+ };
353
+ }
354
+ return null;
355
+ }
356
+ async function openIndexedDbStore() {
357
+ return new Promise((resolve) => {
358
+ const request = indexedDB.open("naylence_trust_bundles", 1);
359
+ request.onupgradeneeded = () => {
360
+ const db = request.result;
361
+ if (!db.objectStoreNames.contains("bundles")) {
362
+ db.createObjectStore("bundles");
363
+ }
364
+ };
365
+ request.onsuccess = () => {
366
+ const db = request.result;
367
+ resolve({
368
+ get: (key) => new Promise((storeResolve, storeReject) => {
369
+ const transaction = db.transaction("bundles", "readonly");
370
+ const store = transaction.objectStore("bundles");
371
+ const getRequest = store.get(key);
372
+ getRequest.onsuccess = () => {
373
+ storeResolve(getRequest.result ?? null);
374
+ };
375
+ getRequest.onerror = () => {
376
+ storeReject(getRequest.error ?? new Error("IndexedDB get failed"));
377
+ };
378
+ }),
379
+ set: (key, value) => new Promise((storeResolve, storeReject) => {
380
+ const transaction = db.transaction("bundles", "readwrite");
381
+ const store = transaction.objectStore("bundles");
382
+ const putRequest = store.put(value, key);
383
+ putRequest.onsuccess = () => {
384
+ storeResolve();
385
+ };
386
+ putRequest.onerror = () => {
387
+ storeReject(putRequest.error ?? new Error("IndexedDB put failed"));
388
+ };
389
+ }),
390
+ });
391
+ };
392
+ request.onerror = () => {
393
+ consoleLogger.warn("IndexedDB unavailable for trust bundle caching", request.error);
394
+ resolve(null);
395
+ };
396
+ });
397
+ }
398
+ function isBrowserEnvironment() {
399
+ return typeof window !== "undefined" && typeof window.document !== "undefined";
400
+ }
401
+ function isNodeEnvironment() {
402
+ return (typeof process !== "undefined" &&
403
+ typeof process.versions !== "undefined" &&
404
+ typeof process.versions.node === "string");
405
+ }
406
+ function isProductionEnvironment() {
407
+ return (typeof process !== "undefined" &&
408
+ typeof process.env !== "undefined" &&
409
+ process.env.NODE_ENV === "production");
410
+ }
411
+ //# sourceMappingURL=http-bundle-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-bundle-provider.js","sourceRoot":"","sources":["../../../../../../../src/naylence/fame/security/cert/trust-store/http-bundle-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAqB3B,MAAM,2BAA2B,GAAG,QAAU,CAAC,CAAC,WAAW;AAC3D,MAAM,uBAAuB,GAAG,KAAM,CAAC,CAAC,WAAW;AAEnD,MAAM,aAAa,GAAG;IACpB,KAAK,EAAE,CAAC,GAAG,IAAe,EAAQ,EAAE;QAClC,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC;YAC/B,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,IAAI,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,IAAI,EAAE,CAAC,GAAG,IAAe,EAAQ,EAAE;QACjC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF,CAAC;AAEF,MAAM,OAAO,kBAAkB;IAkB7B,YAAmB,OAAkC;QAT7C,gBAAW,GAAG,CAAC,CAAC;QAChB,SAAI,GAAkB,IAAI,CAAC;QAC3B,kBAAa,GAAkB,IAAI,CAAC;QACpC,YAAO,GAAkB,IAAI,CAAC;QAC9B,YAAO,GAAyB,IAAI,CAAC;QACrC,aAAQ,GAAkC,IAAI,CAAC;QACtC,cAAS,GAAG,IAAI,GAAG,EAAc,CAAC;QAC3C,gBAAW,GAAG,KAAK,CAAC;QAG1B,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC;QAClB,IAAI,CAAC,iBAAiB,GAAG,wBAAwB,CAC/C,OAAO,CAAC,iBAAiB,CAC1B,CAAC;QACF,IAAI,CAAC,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,YAAY,GAAG,qBAAqB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAChE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,KAAK,IAAI,CAAC;QAC5C,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,oBAAoB,KAAK,KAAK,CAAC;QACjE,IAAI,CAAC,QAAQ;YACX,OAAO,CAAC,QAAQ,IAAI,eAAe,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE5E,IAAI,oBAAoB,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACzE,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjE,MAAM,IAAI,KAAK,CACb,gEAAgE,CACjE,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,QAAQ;QACnB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,QAAQ,CAAC;QACvB,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,iBAAiB,CAAC;QAC/D,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE;iBAC/B,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACf,aAAa,CAAC,IAAI,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;gBACzD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjB,OAAO,IAAI,CAAC,OAAO,CAAC;gBACtB,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC,CAAC;iBACD,OAAO,CAAC,GAAG,EAAE;gBACZ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACvB,CAAC,CAAC,CAAC;YACL,OAAO,IAAI,CAAC,QAAQ,CAAC;QACvB,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAEM,QAAQ,CAAC,QAAoB;QAClC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9C,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBAC9B,aAAa,CAAC,KAAK,CAAC,gCAAgC,EAAE;oBACpD,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI;oBAClB,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;iBACnC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,aAAa,CAAC,IAAI,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAEO,gBAAgB,CAAC,KAAwB;QAC/C,IAAI,CAAC,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC;QAChC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC/B,CAAC;IAEO,KAAK,CAAC,WAAW;QACvB,MAAM,OAAO,GAA2B;YACtC,QAAQ,EAAE,iEAAiE;SAC5E,CAAC;QAEF,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;QACvC,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;YACrC,MAAM,EAAE,KAAK;YACb,OAAO;YACP,KAAK,EAAE,UAAU;SAClB,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC5C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,OAAO,CAAC;QACtB,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CACb,oCAAoC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAC7E,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;QACjD,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QAElC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7D,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACtC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;oBAChC,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;gBAC3D,CAAC;gBACD,YAAY,GAAG,IAAI,CAAC;YACtB,CAAC;iBAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC1B,YAAY,GAAG,IAAI,CAAC;YACtB,CAAC;iBAAM,IAAI,oBAAoB,EAAE,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC7D,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QAEH,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAExD,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YACrD,IAAI,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,oBAAoB,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9B,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAE9B,MAAM,UAAU,GAAsB;YACpC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,WAAW;YAC3B,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC;QAEF,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC3C,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAEO,eAAe;QACrB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,QAAQ,EAAE,CAAC;YACb,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,aAAa,CAAC,IAAI,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAOD,SAAS,kBAAkB,CACzB,OAAmB,EACnB,SAAiB;IAEjB,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAE5B,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAC;QAC9D,MAAM,OAAO,GAAG,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3E,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAE9D,MAAM,OAAO,GAAkB,KAAK;aACjC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACZ,MAAM,MAAM,GAAG,IAA+B,CAAC;YAC/C,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;YACnD,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,MAAM,GAAgB;gBAC1B,GAAG;gBACH,GAAG,CAAC,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9D,GAAG,CAAC,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ;oBACvC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,UAAU,EAAE;oBACjC,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ;oBACtC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE;oBACjC,CAAC,CAAC,EAAE,CAAC;aACR,CAAC;YAEF,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,MAAM,EAAyB,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;QAE9D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAC9B,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACnC,OAAO,EAAE,OAAO,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAChE,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,wCAAwC,SAAS,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,oBAAoB,CAC3B,OAA+B,EAC/B,SAA4B;IAE5B,MAAM,OAAO,GAAG,EAAc,CAAC;IAC/B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,IAAI,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChE,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,IAAI,SAAS,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,8DAA8D,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAClF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CACxB,IAAmC;IAEnC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,IAAI;SACR,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;SACxB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;SAC/B,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACX,IAAI,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,qBAAqB,CAC5B,OAAsC;IAEtC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAc;IAC9C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACnE,OAAO,2BAA2B,CAAC;IACrC,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,WAAW,CAAC,OAAmB;IACtC,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/B,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,cAAc,CAAC,GAAW;IACjC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,KAAK,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,WAAW,CAAC,IAAgB;IACnC,IAAI,OAAO,WAAW,KAAK,WAAW,EAAE,CAAC;QACvC,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACvD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;SACtB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SACjD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,GAAW;IAClC,IAAI,iBAAiB,EAAE,EAAE,CAAC;QACxB,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,oBAAoB,CAAC,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,GAAW,EAAE,KAAwB;IAC5D,IAAI,iBAAiB,EAAE,EAAE,CAAC;QACxB,MAAM,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,MAAM,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,GAAW;IAC1C,IAAI,CAAC;QACH,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;QACpD,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAC5C,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;QAEnC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAsB,CAAC;QACxD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;YACxD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,GAAW,EAAE,KAAwB;IAClE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IACpD,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAC5C,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IAEnC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;IAClE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC/C,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,uBAAuB,GAAG,uBAAuB,CAAC;AAExD,KAAK,UAAU,oBAAoB,CAAC,GAAW;IAC7C,MAAM,KAAK,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACvC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,GAAW,EAAE,KAAwB;IACrE,MAAM,KAAK,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACvC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;IACT,CAAC;IAED,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC9B,CAAC;AAOD,KAAK,UAAU,gBAAgB;IAC7B,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE,CAAC;QACrC,OAAO,kBAAkB,EAAE,CAAC;IAC9B,CAAC;IAED,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE,CAAC;QACxC,OAAO;YACL,KAAK,CAAC,GAAG,CAAC,GAAW;gBACnB,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,uBAAuB,IAAI,GAAG,EAAE,CAAC,CAAC;gBAC1E,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAsB,CAAC;YAClD,CAAC;YACD,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAwB;gBAC7C,YAAY,CAAC,OAAO,CAClB,GAAG,uBAAuB,IAAI,GAAG,EAAE,EACnC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CACtB,CAAC;YACJ,CAAC;SACF,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,kBAAkB;IAC/B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC;QAE5D,OAAO,CAAC,eAAe,GAAG,GAAG,EAAE;YAC7B,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;YAC1B,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7C,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAClC,CAAC;QACH,CAAC,CAAC;QAEF,OAAO,CAAC,SAAS,GAAG,GAAG,EAAE;YACvB,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;YAC1B,OAAO,CAAC;gBACN,GAAG,EAAE,CAAC,GAAW,EAAE,EAAE,CACnB,IAAI,OAAO,CAA2B,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE;oBAClE,MAAM,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;oBAC1D,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;oBACjD,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAClC,UAAU,CAAC,SAAS,GAAG,GAAG,EAAE;wBAC1B,YAAY,CAAE,UAAU,CAAC,MAA4B,IAAI,IAAI,CAAC,CAAC;oBACjE,CAAC,CAAC;oBACF,UAAU,CAAC,OAAO,GAAG,GAAG,EAAE;wBACxB,WAAW,CAAC,UAAU,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;oBACrE,CAAC,CAAC;gBACJ,CAAC,CAAC;gBACJ,GAAG,EAAE,CAAC,GAAW,EAAE,KAAwB,EAAE,EAAE,CAC7C,IAAI,OAAO,CAAO,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE;oBAC9C,MAAM,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;oBAC3D,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;oBACjD,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBACzC,UAAU,CAAC,SAAS,GAAG,GAAG,EAAE;wBAC1B,YAAY,EAAE,CAAC;oBACjB,CAAC,CAAC;oBACF,UAAU,CAAC,OAAO,GAAG,GAAG,EAAE;wBACxB,WAAW,CAAC,UAAU,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;oBACrE,CAAC,CAAC;gBACJ,CAAC,CAAC;aACL,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,OAAO,CAAC,OAAO,GAAG,GAAG,EAAE;YACrB,aAAa,CAAC,IAAI,CAAC,gDAAgD,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YACpF,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,oBAAoB;IAC3B,OAAO,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,WAAW,CAAC;AACjF,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO,CACL,OAAO,OAAO,KAAK,WAAW;QAC9B,OAAO,OAAO,CAAC,QAAQ,KAAK,WAAW;QACvC,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAC1C,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB;IAC9B,OAAO,CACL,OAAO,OAAO,KAAK,WAAW;QAC9B,OAAO,OAAO,CAAC,GAAG,KAAK,WAAW;QAClC,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CACtC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { HttpBundleProvider } from "./http-bundle-provider.js";
2
+ //# sourceMappingURL=http-signed-bundle-provider.js.map