@ontrails/core 1.0.0-beta.14 → 1.0.0-beta.16

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 (314) hide show
  1. package/CHANGELOG.md +74 -0
  2. package/README.md +73 -24
  3. package/package.json +11 -4
  4. package/src/activation-provenance.ts +111 -0
  5. package/src/activation-source-compatibility.ts +430 -0
  6. package/src/activation-source-projection.ts +221 -0
  7. package/src/activation-source.ts +91 -0
  8. package/src/blob-ref.ts +51 -0
  9. package/src/branded.ts +1 -1
  10. package/src/context.ts +28 -4
  11. package/src/contour.ts +344 -0
  12. package/src/cross-batch.ts +69 -0
  13. package/src/cross-schema.ts +36 -0
  14. package/src/detours.ts +8 -0
  15. package/src/draft.ts +60 -52
  16. package/src/error-projection.ts +51 -0
  17. package/src/errors.ts +245 -48
  18. package/src/execute.ts +1250 -40
  19. package/src/fire.ts +1169 -0
  20. package/src/index.ts +383 -49
  21. package/src/internal/fork-ctx.ts +69 -0
  22. package/src/layer-projection.ts +192 -0
  23. package/src/layer.ts +81 -0
  24. package/src/observe.ts +361 -0
  25. package/src/path-security.ts +1 -1
  26. package/src/permits.ts +12 -0
  27. package/src/redaction/patterns.ts +6 -3
  28. package/src/resilience.ts +11 -11
  29. package/src/resource-config.ts +792 -0
  30. package/src/resource.ts +175 -0
  31. package/src/result.ts +18 -0
  32. package/src/run.ts +7 -6
  33. package/src/schedule-runtime.ts +689 -0
  34. package/src/schedule.ts +324 -0
  35. package/src/serialization.ts +90 -55
  36. package/src/signal-diagnostics.ts +633 -0
  37. package/src/signal-ref.ts +87 -0
  38. package/src/signal.ts +37 -0
  39. package/src/store/accessor-protocol.ts +56 -0
  40. package/src/store/index.ts +4 -0
  41. package/src/structured-examples.ts +245 -0
  42. package/src/surface-derivation.ts +91 -0
  43. package/src/surface-filter.ts +176 -0
  44. package/src/topo.ts +710 -59
  45. package/src/tracing.ts +345 -0
  46. package/src/trail.ts +347 -33
  47. package/src/trails/derive-trail.ts +842 -0
  48. package/src/trails/index.ts +9 -0
  49. package/src/trails/ingest.ts +138 -0
  50. package/src/{internal/trails-db.ts → trails-db.ts} +50 -31
  51. package/src/transport-error-map.ts +174 -0
  52. package/src/type-utils.ts +17 -2
  53. package/src/types.ts +208 -17
  54. package/src/validate-established-topo.ts +8 -2
  55. package/src/validate-topo.ts +244 -13
  56. package/src/validation.ts +58 -1
  57. package/src/webhook.ts +276 -0
  58. package/src/workspace.ts +1 -1
  59. package/src/zod-wrappers.ts +72 -0
  60. package/.turbo/turbo-build.log +0 -1
  61. package/.turbo/turbo-lint.log +0 -3
  62. package/.turbo/turbo-typecheck.log +0 -1
  63. package/dist/adapters.d.ts +0 -39
  64. package/dist/adapters.d.ts.map +0 -1
  65. package/dist/adapters.js +0 -2
  66. package/dist/adapters.js.map +0 -1
  67. package/dist/blob-ref.d.ts +0 -20
  68. package/dist/blob-ref.d.ts.map +0 -1
  69. package/dist/blob-ref.js +0 -22
  70. package/dist/blob-ref.js.map +0 -1
  71. package/dist/branded.d.ts +0 -36
  72. package/dist/branded.d.ts.map +0 -1
  73. package/dist/branded.js +0 -89
  74. package/dist/branded.js.map +0 -1
  75. package/dist/collections.d.ts +0 -31
  76. package/dist/collections.d.ts.map +0 -1
  77. package/dist/collections.js +0 -60
  78. package/dist/collections.js.map +0 -1
  79. package/dist/context.d.ts +0 -10
  80. package/dist/context.d.ts.map +0 -1
  81. package/dist/context.js +0 -21
  82. package/dist/context.js.map +0 -1
  83. package/dist/derive.d.ts +0 -44
  84. package/dist/derive.d.ts.map +0 -1
  85. package/dist/derive.js +0 -149
  86. package/dist/derive.js.map +0 -1
  87. package/dist/dispatch.d.ts +0 -27
  88. package/dist/dispatch.d.ts.map +0 -1
  89. package/dist/dispatch.js +0 -34
  90. package/dist/dispatch.js.map +0 -1
  91. package/dist/draft.d.ts +0 -28
  92. package/dist/draft.d.ts.map +0 -1
  93. package/dist/draft.js +0 -156
  94. package/dist/draft.js.map +0 -1
  95. package/dist/errors.d.ts +0 -83
  96. package/dist/errors.d.ts.map +0 -1
  97. package/dist/errors.js +0 -142
  98. package/dist/errors.js.map +0 -1
  99. package/dist/event.d.ts +0 -8
  100. package/dist/event.d.ts.map +0 -1
  101. package/dist/event.js +0 -7
  102. package/dist/event.js.map +0 -1
  103. package/dist/execute.d.ts +0 -35
  104. package/dist/execute.d.ts.map +0 -1
  105. package/dist/execute.js +0 -90
  106. package/dist/execute.js.map +0 -1
  107. package/dist/fetch.d.ts +0 -15
  108. package/dist/fetch.d.ts.map +0 -1
  109. package/dist/fetch.js +0 -102
  110. package/dist/fetch.js.map +0 -1
  111. package/dist/gate.d.ts +0 -17
  112. package/dist/gate.d.ts.map +0 -1
  113. package/dist/gate.js +0 -21
  114. package/dist/gate.js.map +0 -1
  115. package/dist/guards.d.ts +0 -17
  116. package/dist/guards.d.ts.map +0 -1
  117. package/dist/guards.js +0 -25
  118. package/dist/guards.js.map +0 -1
  119. package/dist/health.d.ts +0 -18
  120. package/dist/health.d.ts.map +0 -1
  121. package/dist/health.js +0 -5
  122. package/dist/health.js.map +0 -1
  123. package/dist/index.d.ts +0 -48
  124. package/dist/index.d.ts.map +0 -1
  125. package/dist/index.js +0 -51
  126. package/dist/index.js.map +0 -1
  127. package/dist/internal/topo-saves.d.ts +0 -47
  128. package/dist/internal/topo-saves.d.ts.map +0 -1
  129. package/dist/internal/topo-saves.js +0 -310
  130. package/dist/internal/topo-saves.js.map +0 -1
  131. package/dist/internal/topo-store-read.d.ts +0 -67
  132. package/dist/internal/topo-store-read.d.ts.map +0 -1
  133. package/dist/internal/topo-store-read.js +0 -222
  134. package/dist/internal/topo-store-read.js.map +0 -1
  135. package/dist/internal/topo-store.d.ts +0 -12
  136. package/dist/internal/topo-store.d.ts.map +0 -1
  137. package/dist/internal/topo-store.js +0 -571
  138. package/dist/internal/topo-store.js.map +0 -1
  139. package/dist/internal/trails-db.d.ts +0 -16
  140. package/dist/internal/trails-db.d.ts.map +0 -1
  141. package/dist/internal/trails-db.js +0 -118
  142. package/dist/internal/trails-db.js.map +0 -1
  143. package/dist/job.d.ts +0 -24
  144. package/dist/job.d.ts.map +0 -1
  145. package/dist/job.js +0 -17
  146. package/dist/job.js.map +0 -1
  147. package/dist/layer.d.ts +0 -6
  148. package/dist/layer.d.ts.map +0 -1
  149. package/dist/layer.js +0 -4
  150. package/dist/layer.js.map +0 -1
  151. package/dist/path-security.d.ts +0 -28
  152. package/dist/path-security.d.ts.map +0 -1
  153. package/dist/path-security.js +0 -63
  154. package/dist/path-security.js.map +0 -1
  155. package/dist/patterns/bulk.d.ts +0 -15
  156. package/dist/patterns/bulk.d.ts.map +0 -1
  157. package/dist/patterns/bulk.js +0 -14
  158. package/dist/patterns/bulk.js.map +0 -1
  159. package/dist/patterns/change.d.ts +0 -10
  160. package/dist/patterns/change.d.ts.map +0 -1
  161. package/dist/patterns/change.js +0 -10
  162. package/dist/patterns/change.js.map +0 -1
  163. package/dist/patterns/date-range.d.ts +0 -10
  164. package/dist/patterns/date-range.d.ts.map +0 -1
  165. package/dist/patterns/date-range.js +0 -10
  166. package/dist/patterns/date-range.js.map +0 -1
  167. package/dist/patterns/index.d.ts +0 -9
  168. package/dist/patterns/index.d.ts.map +0 -1
  169. package/dist/patterns/index.js +0 -9
  170. package/dist/patterns/index.js.map +0 -1
  171. package/dist/patterns/pagination.d.ts +0 -18
  172. package/dist/patterns/pagination.d.ts.map +0 -1
  173. package/dist/patterns/pagination.js +0 -18
  174. package/dist/patterns/pagination.js.map +0 -1
  175. package/dist/patterns/progress.d.ts +0 -11
  176. package/dist/patterns/progress.d.ts.map +0 -1
  177. package/dist/patterns/progress.js +0 -11
  178. package/dist/patterns/progress.js.map +0 -1
  179. package/dist/patterns/sorting.d.ts +0 -13
  180. package/dist/patterns/sorting.d.ts.map +0 -1
  181. package/dist/patterns/sorting.js +0 -10
  182. package/dist/patterns/sorting.js.map +0 -1
  183. package/dist/patterns/status.d.ts +0 -15
  184. package/dist/patterns/status.d.ts.map +0 -1
  185. package/dist/patterns/status.js +0 -9
  186. package/dist/patterns/status.js.map +0 -1
  187. package/dist/patterns/timestamps.d.ts +0 -10
  188. package/dist/patterns/timestamps.d.ts.map +0 -1
  189. package/dist/patterns/timestamps.js +0 -10
  190. package/dist/patterns/timestamps.js.map +0 -1
  191. package/dist/provision-config.d.ts +0 -22
  192. package/dist/provision-config.d.ts.map +0 -1
  193. package/dist/provision-config.js +0 -210
  194. package/dist/provision-config.js.map +0 -1
  195. package/dist/provision.d.ts +0 -71
  196. package/dist/provision.d.ts.map +0 -1
  197. package/dist/provision.js +0 -56
  198. package/dist/provision.js.map +0 -1
  199. package/dist/redaction/index.d.ts +0 -4
  200. package/dist/redaction/index.d.ts.map +0 -1
  201. package/dist/redaction/index.js +0 -3
  202. package/dist/redaction/index.js.map +0 -1
  203. package/dist/redaction/patterns.d.ts +0 -9
  204. package/dist/redaction/patterns.d.ts.map +0 -1
  205. package/dist/redaction/patterns.js +0 -39
  206. package/dist/redaction/patterns.js.map +0 -1
  207. package/dist/redaction/redactor.d.ts +0 -27
  208. package/dist/redaction/redactor.d.ts.map +0 -1
  209. package/dist/redaction/redactor.js +0 -89
  210. package/dist/redaction/redactor.js.map +0 -1
  211. package/dist/resilience.d.ts +0 -34
  212. package/dist/resilience.d.ts.map +0 -1
  213. package/dist/resilience.js +0 -164
  214. package/dist/resilience.js.map +0 -1
  215. package/dist/result.d.ts +0 -57
  216. package/dist/result.d.ts.map +0 -1
  217. package/dist/result.js +0 -156
  218. package/dist/result.js.map +0 -1
  219. package/dist/run.d.ts +0 -27
  220. package/dist/run.d.ts.map +0 -1
  221. package/dist/run.js +0 -34
  222. package/dist/run.js.map +0 -1
  223. package/dist/serialization.d.ts +0 -27
  224. package/dist/serialization.d.ts.map +0 -1
  225. package/dist/serialization.js +0 -153
  226. package/dist/serialization.js.map +0 -1
  227. package/dist/service-config.d.ts +0 -22
  228. package/dist/service-config.d.ts.map +0 -1
  229. package/dist/service-config.js +0 -210
  230. package/dist/service-config.js.map +0 -1
  231. package/dist/service.d.ts +0 -71
  232. package/dist/service.d.ts.map +0 -1
  233. package/dist/service.js +0 -56
  234. package/dist/service.js.map +0 -1
  235. package/dist/signal.d.ts +0 -33
  236. package/dist/signal.d.ts.map +0 -1
  237. package/dist/signal.js +0 -17
  238. package/dist/signal.js.map +0 -1
  239. package/dist/topo-store.d.ts +0 -48
  240. package/dist/topo-store.d.ts.map +0 -1
  241. package/dist/topo-store.js +0 -175
  242. package/dist/topo-store.js.map +0 -1
  243. package/dist/topo.d.ts +0 -25
  244. package/dist/topo.d.ts.map +0 -1
  245. package/dist/topo.js +0 -112
  246. package/dist/topo.js.map +0 -1
  247. package/dist/trail.d.ts +0 -96
  248. package/dist/trail.d.ts.map +0 -1
  249. package/dist/trail.js +0 -20
  250. package/dist/trail.js.map +0 -1
  251. package/dist/type-utils.d.ts +0 -24
  252. package/dist/type-utils.d.ts.map +0 -1
  253. package/dist/type-utils.js +0 -12
  254. package/dist/type-utils.js.map +0 -1
  255. package/dist/types.d.ts +0 -71
  256. package/dist/types.d.ts.map +0 -1
  257. package/dist/types.js +0 -3
  258. package/dist/types.js.map +0 -1
  259. package/dist/validate-established-topo.d.ts +0 -76
  260. package/dist/validate-established-topo.d.ts.map +0 -1
  261. package/dist/validate-established-topo.js +0 -43
  262. package/dist/validate-established-topo.js.map +0 -1
  263. package/dist/validate-topo.d.ts +0 -24
  264. package/dist/validate-topo.d.ts.map +0 -1
  265. package/dist/validate-topo.js +0 -176
  266. package/dist/validate-topo.js.map +0 -1
  267. package/dist/validation.d.ts +0 -27
  268. package/dist/validation.d.ts.map +0 -1
  269. package/dist/validation.js +0 -165
  270. package/dist/validation.js.map +0 -1
  271. package/dist/workspace.d.ts +0 -25
  272. package/dist/workspace.d.ts.map +0 -1
  273. package/dist/workspace.js +0 -57
  274. package/dist/workspace.js.map +0 -1
  275. package/src/__tests__/blob-ref.test.ts +0 -103
  276. package/src/__tests__/branded.test.ts +0 -148
  277. package/src/__tests__/collections.test.ts +0 -126
  278. package/src/__tests__/context.test.ts +0 -77
  279. package/src/__tests__/derive.test.ts +0 -260
  280. package/src/__tests__/errors.test.ts +0 -309
  281. package/src/__tests__/execute.test.ts +0 -525
  282. package/src/__tests__/fetch.test.ts +0 -217
  283. package/src/__tests__/gate.test.ts +0 -125
  284. package/src/__tests__/guards.test.ts +0 -102
  285. package/src/__tests__/path-security.test.ts +0 -114
  286. package/src/__tests__/patterns.test.ts +0 -273
  287. package/src/__tests__/redaction.test.ts +0 -244
  288. package/src/__tests__/resilience.test.ts +0 -246
  289. package/src/__tests__/result.test.ts +0 -155
  290. package/src/__tests__/run.test.ts +0 -181
  291. package/src/__tests__/serialization.test.ts +0 -401
  292. package/src/__tests__/service-config.test.ts +0 -228
  293. package/src/__tests__/service.test.ts +0 -197
  294. package/src/__tests__/signal.test.ts +0 -82
  295. package/src/__tests__/topo-store-read.test.ts +0 -251
  296. package/src/__tests__/topo-store.test.ts +0 -469
  297. package/src/__tests__/topo.test.ts +0 -277
  298. package/src/__tests__/trail-permit.test.ts +0 -60
  299. package/src/__tests__/trail.test.ts +0 -261
  300. package/src/__tests__/trails-db.test.ts +0 -191
  301. package/src/__tests__/type-utils.test.ts +0 -90
  302. package/src/__tests__/validate-topo.test.ts +0 -489
  303. package/src/__tests__/validation.test.ts +0 -336
  304. package/src/__tests__/workspace.test.ts +0 -183
  305. package/src/event.ts +0 -15
  306. package/src/gate.ts +0 -44
  307. package/src/internal/topo-saves.ts +0 -429
  308. package/src/internal/topo-store-read.ts +0 -473
  309. package/src/internal/topo-store.ts +0 -1087
  310. package/src/provision-config.ts +0 -373
  311. package/src/provision.ts +0 -148
  312. package/src/topo-store.ts +0 -301
  313. package/tsconfig.json +0 -9
  314. package/tsconfig.tsbuildinfo +0 -1
@@ -1,22 +0,0 @@
1
- /**
2
- * Provision resolution pipeline.
3
- *
4
- * Extracted from execute.ts to keep both modules under the 400 LOC ceiling.
5
- * Handles config validation, singleton caching, concurrent-creation dedup,
6
- * and the full resolve-or-create flow for declared provisions.
7
- */
8
- import type { ProvisionOverrideMap } from './provision.js';
9
- import type { AnyTrail } from './trail.js';
10
- import type { TrailContext } from './types.js';
11
- import { Result } from './result.js';
12
- type ConfigValues = Readonly<Record<string, Record<string, unknown>>>;
13
- /**
14
- * Resolve all declared provisions for a trail.
15
- *
16
- * Validates per-provision config, checks overrides and caches, and creates
17
- * new instances as needed. Returns an enriched context with all provision
18
- * instances injected into extensions.
19
- */
20
- export declare const resolveProvisions: (trail: AnyTrail, ctx: TrailContext, overrides?: ProvisionOverrideMap, configValues?: ConfigValues) => Promise<Result<TrailContext, Error>>;
21
- export {};
22
- //# sourceMappingURL=provision-config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provision-config.d.ts","sourceRoot":"","sources":["../src/provision-config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAGV,oBAAoB,EACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAOrC,KAAK,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AA0TtE;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAC5B,OAAO,QAAQ,EACf,KAAK,YAAY,EACjB,YAAY,oBAAoB,EAChC,eAAe,YAAY,KAC1B,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,CAsBrC,CAAC"}
@@ -1,210 +0,0 @@
1
- /**
2
- * Provision resolution pipeline.
3
- *
4
- * Extracted from execute.ts to keep both modules under the 400 LOC ceiling.
5
- * Handles config validation, singleton caching, concurrent-creation dedup,
6
- * and the full resolve-or-create flow for declared provisions.
7
- */
8
- import { InternalError, ValidationError } from './errors.js';
9
- import { Result } from './result.js';
10
- import { createProvisionLookup } from './provision.js';
11
- // ---------------------------------------------------------------------------
12
- // Singleton caches
13
- // ---------------------------------------------------------------------------
14
- const singletonProvisions = new WeakMap();
15
- /** In-flight provision creation promises, keyed by provision x context. */
16
- const pendingCreations = new WeakMap();
17
- // ---------------------------------------------------------------------------
18
- // Context helpers
19
- // ---------------------------------------------------------------------------
20
- const toProvisionContext = (ctx, config) => ({
21
- config,
22
- cwd: ctx.cwd,
23
- env: ctx.env,
24
- workspaceRoot: ctx.workspaceRoot,
25
- });
26
- const toProvisionContextKey = (ctx) => JSON.stringify({
27
- config: ctx.config,
28
- cwd: ctx.cwd,
29
- env: Object.entries(ctx.env ?? {}).toSorted(([left], [right]) => left.localeCompare(right)),
30
- workspaceRoot: ctx.workspaceRoot,
31
- });
32
- // ---------------------------------------------------------------------------
33
- // Config validation
34
- // ---------------------------------------------------------------------------
35
- /** Validate and resolve a provision's config from the provided configValues map. */
36
- const resolveProvisionConfig = (declaredProvision, configValues) => {
37
- if (declaredProvision.config === undefined) {
38
- return Result.ok();
39
- }
40
- const raw = configValues?.[declaredProvision.id];
41
- if (raw === undefined) {
42
- return Result.err(new ValidationError(`Provision "${declaredProvision.id}" declares a config schema but no config was provided`));
43
- }
44
- const parsed = declaredProvision.config.safeParse(raw);
45
- if (!parsed.success) {
46
- return Result.err(new ValidationError(`Provision "${declaredProvision.id}" config validation failed: ${parsed.error.message}`));
47
- }
48
- return Result.ok(parsed.data);
49
- };
50
- // ---------------------------------------------------------------------------
51
- // Override / cache lookups
52
- // ---------------------------------------------------------------------------
53
- const hasOwnProvisionOverride = (overrides, id) => overrides !== undefined && Object.hasOwn(overrides, id);
54
- const getCachedSingletonProvision = (declaredProvision, provisionContext) => {
55
- const scopedCache = singletonProvisions.get(declaredProvision);
56
- if (scopedCache === undefined) {
57
- return { found: false, value: undefined };
58
- }
59
- const key = toProvisionContextKey(provisionContext);
60
- if (!scopedCache.has(key)) {
61
- return { found: false, value: undefined };
62
- }
63
- return {
64
- found: true,
65
- value: scopedCache.get(key),
66
- };
67
- };
68
- const getProvidedProvision = (ctx, overrides, declaredProvision, provisionContext) => {
69
- const { id } = declaredProvision;
70
- if (hasOwnProvisionOverride(overrides, id)) {
71
- return Result.ok(overrides[id]);
72
- }
73
- if (Object.hasOwn(ctx.extensions ?? {}, id)) {
74
- return Result.ok(ctx.extensions?.[id]);
75
- }
76
- const cached = getCachedSingletonProvision(declaredProvision, provisionContext);
77
- if (cached.found) {
78
- return Result.ok(cached.value);
79
- }
80
- return undefined;
81
- };
82
- const getOverrideOrExtension = (ctx, overrides, declaredProvision) => getProvidedProvision(ctx, overrides, declaredProvision, toProvisionContext(ctx));
83
- const resolveConfigAwareProvidedProvision = (ctx, declaredProvision, configValues) => {
84
- const configResult = resolveProvisionConfig(declaredProvision, configValues);
85
- if (configResult.isErr()) {
86
- return configResult;
87
- }
88
- const provisionContext = toProvisionContext(ctx, configResult.value);
89
- const provided = getProvidedProvision(ctx, undefined, declaredProvision, provisionContext);
90
- return provided
91
- ? Result.ok({ kind: 'provided', value: provided.unwrap() })
92
- : Result.ok({ kind: 'context', provisionContext });
93
- };
94
- // ---------------------------------------------------------------------------
95
- // Instance creation
96
- // ---------------------------------------------------------------------------
97
- const toInternalProvisionError = (id, error) => {
98
- const cause = error instanceof Error ? error : undefined;
99
- const message = cause?.message ?? String(error);
100
- return new InternalError(`Provision "${id}" failed to resolve: ${message}`, {
101
- ...(cause ? { cause } : {}),
102
- context: { provisionId: id },
103
- });
104
- };
105
- const getSingletonProvisionCache = (declaredProvision) => {
106
- const existing = singletonProvisions.get(declaredProvision);
107
- if (existing !== undefined) {
108
- return existing;
109
- }
110
- const created = new Map();
111
- singletonProvisions.set(declaredProvision, created);
112
- return created;
113
- };
114
- const doCreateProvisionInstance = async (declaredProvision, provisionContext) => {
115
- try {
116
- const created = await declaredProvision.create(provisionContext);
117
- if (created.isErr()) {
118
- return Result.err(created.error);
119
- }
120
- const instance = created.unwrap();
121
- getSingletonProvisionCache(declaredProvision).set(toProvisionContextKey(provisionContext), instance);
122
- return Result.ok(instance);
123
- }
124
- catch (error) {
125
- return Result.err(toInternalProvisionError(declaredProvision.id, error));
126
- }
127
- };
128
- const trackPendingCreation = (declaredProvision, key, promise) => {
129
- const pending = pendingCreations.get(declaredProvision);
130
- if (pending) {
131
- pending.set(key, promise);
132
- }
133
- else {
134
- pendingCreations.set(declaredProvision, new Map([[key, promise]]));
135
- }
136
- };
137
- /**
138
- * Deduplicates concurrent creation of the same provision singleton.
139
- * If a creation is already in flight for this provision x context key,
140
- * returns the existing promise instead of spawning a second factory call.
141
- */
142
- const createProvisionInstance = async (declaredProvision, provisionContext) => {
143
- const key = toProvisionContextKey(provisionContext);
144
- const inflight = pendingCreations.get(declaredProvision)?.get(key);
145
- if (inflight) {
146
- return inflight;
147
- }
148
- const promise = doCreateProvisionInstance(declaredProvision, provisionContext);
149
- trackPendingCreation(declaredProvision, key, promise);
150
- try {
151
- return await promise;
152
- }
153
- finally {
154
- pendingCreations.get(declaredProvision)?.delete(key);
155
- }
156
- };
157
- /** Validate config and resolve a single declared provision. */
158
- const resolveDeclaredProvision = async (declaredProvision, ctx, overrides, configValues) => {
159
- // Check overrides/extensions first — skip config validation entirely when
160
- // a provision instance is already provided.
161
- const overrideOrExtension = getOverrideOrExtension(ctx, overrides, declaredProvision);
162
- if (overrideOrExtension !== undefined) {
163
- return overrideOrExtension;
164
- }
165
- // Resolve config before consulting the singleton cache so config-aware
166
- // provisions use the same canonical context for cache reads and writes.
167
- const configAwareProvision = resolveConfigAwareProvidedProvision(ctx, declaredProvision, configValues);
168
- if (configAwareProvision.isErr()) {
169
- return configAwareProvision;
170
- }
171
- // No provided instance — create via factory.
172
- const resolved = configAwareProvision.unwrap();
173
- if (resolved.kind === 'provided') {
174
- return Result.ok(resolved.value);
175
- }
176
- return await createProvisionInstance(declaredProvision, resolved.provisionContext);
177
- };
178
- // ---------------------------------------------------------------------------
179
- // Full trail provision resolution
180
- // ---------------------------------------------------------------------------
181
- const withResolvedProvisions = (ctx, resolvedProvisions) => {
182
- const extensions = { ...ctx.extensions, ...resolvedProvisions };
183
- const resolvedCtx = { ...ctx, extensions };
184
- const lookup = createProvisionLookup(() => resolvedCtx);
185
- resolvedCtx.provision = lookup;
186
- return resolvedCtx;
187
- };
188
- /**
189
- * Resolve all declared provisions for a trail.
190
- *
191
- * Validates per-provision config, checks overrides and caches, and creates
192
- * new instances as needed. Returns an enriched context with all provision
193
- * instances injected into extensions.
194
- */
195
- export const resolveProvisions = async (trail, ctx, overrides, configValues) => {
196
- const { provisions } = trail;
197
- if (provisions.length === 0) {
198
- return Result.ok(ctx);
199
- }
200
- const resolvedProvisions = {};
201
- for (const declaredProvision of provisions) {
202
- const resolved = await resolveDeclaredProvision(declaredProvision, ctx, overrides, configValues);
203
- if (resolved.isErr()) {
204
- return resolved;
205
- }
206
- resolvedProvisions[declaredProvision.id] = resolved.unwrap();
207
- }
208
- return Result.ok(withResolvedProvisions(ctx, resolvedProvisions));
209
- };
210
- //# sourceMappingURL=provision-config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provision-config.js","sourceRoot":"","sources":["../src/provision-config.ts"],"names":[],"mappings":"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"}
@@ -1,71 +0,0 @@
1
- import type { Result } from './result.js';
2
- import type { ProvisionLookup, TrailContext } from './types.js';
3
- import type { z } from 'zod';
4
- /**
5
- * Stable process-scoped fields available when constructing a provision.
6
- *
7
- * Provisions are app-level singletons, so they intentionally do not receive
8
- * the full per-request TrailContext. When a provision declares a `config` schema,
9
- * the validated config is passed as `svc.config`.
10
- */
11
- export type ProvisionContext<C = unknown> = Pick<TrailContext, 'cwd' | 'env' | 'workspaceRoot'> & {
12
- readonly config: C;
13
- };
14
- /**
15
- * Everything needed to describe a provision before a factory is introduced.
16
- *
17
- * When `config` is a Zod schema, the `create` callback receives
18
- * `ProvisionContext<C>` with the validated config value.
19
- */
20
- export interface ProvisionSpec<T, C = unknown> {
21
- /** Create the provision instance from stable process-scoped context. */
22
- readonly create: (svc: ProvisionContext<C>) => Result<T, Error> | Promise<Result<T, Error>>;
23
- /** Config schema — when present, config is validated and passed to `create`. */
24
- readonly config?: z.ZodType<C> | undefined;
25
- /** Optional cleanup performed when the hosting trailhead shuts down. */
26
- readonly dispose?: ((provision: T) => void | Promise<void>) | undefined;
27
- /** Optional operational readiness probe for introspection tooling. */
28
- readonly health?: ((provision: T) => Result<unknown, Error> | Promise<Result<unknown, Error>>) | undefined;
29
- /** Optional test factory used by higher-level helpers. */
30
- readonly mock?: (() => T | Promise<T>) | undefined;
31
- /** Human-readable description. */
32
- readonly description?: string | undefined;
33
- /** Arbitrary meta for tooling and filtering. */
34
- readonly meta?: Readonly<Record<string, unknown>> | undefined;
35
- }
36
- /** A typed provision definition. */
37
- export interface Provision<T> extends ProvisionSpec<T> {
38
- readonly kind: 'provision';
39
- readonly id: string;
40
- /** Read the resolved provision instance from a trail context. */
41
- from(ctx: TrailContext): T;
42
- }
43
- /**
44
- * Existential type for heterogeneous provision collections.
45
- *
46
- * `Provision<T>` includes function parameters in `dispose`/`health`, so
47
- * `unknown` is too narrow for mixed provision arrays. `any` is the correct
48
- * existential here.
49
- */
50
- export type AnyProvision = Provision<any>;
51
- /** Explicit runtime overrides keyed by provision ID. */
52
- export type ProvisionOverrideMap = Readonly<Record<string, unknown>>;
53
- /** Create a `ctx.provision(...)` accessor bound to a concrete context snapshot. */
54
- export declare const createProvisionLookup: (getContext: () => Pick<TrailContext, "extensions">) => ProvisionLookup;
55
- /**
56
- * Create a typed provision definition.
57
- *
58
- * The provision object is inert until a later execution branch resolves concrete
59
- * instances into TrailContext extensions.
60
- */
61
- export declare const provision: <T>(id: string, spec: ProvisionSpec<T>) => Provision<T>;
62
- /** Narrow unknown values to provision definitions during topo discovery. */
63
- export declare const isProvision: (value: unknown) => value is AnyProvision;
64
- /**
65
- * Return the first duplicate provision ID in a collection, if any.
66
- *
67
- * This supports later topo registration without each caller duplicating the
68
- * same scan logic.
69
- */
70
- export declare const findDuplicateProvisionId: (provisions: readonly Pick<AnyProvision, "id">[]) => string | undefined;
71
- //# sourceMappingURL=provision.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provision.d.ts","sourceRoot":"","sources":["../src/provision.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,GAAG,OAAO,IAAI,IAAI,CAC9C,YAAY,EACZ,KAAK,GAAG,KAAK,GAAG,eAAe,CAChC,GAAG;IACF,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;CACpB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO;IAC3C,wEAAwE;IACxE,QAAQ,CAAC,MAAM,EAAE,CACf,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC,KACrB,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAClD,gFAAgF;IAChF,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IAC3C,wEAAwE;IACxE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;IACxE,sEAAsE;IACtE,QAAQ,CAAC,MAAM,CAAC,EACZ,CAAC,CACC,SAAS,EAAE,CAAC,KACT,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,GAC9D,SAAS,CAAC;IACd,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IACnD,kCAAkC;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,gDAAgD;IAChD,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;CAC/D;AAED,oCAAoC;AACpC,MAAM,WAAW,SAAS,CAAC,CAAC,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,IAAI,CAAC,GAAG,EAAE,YAAY,GAAG,CAAC,CAAC;CAC5B;AAED;;;;;;GAMG;AAEH,MAAM,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;AAE1C,wDAAwD;AACxD,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAqBrE,mFAAmF;AACnF,eAAO,MAAM,qBAAqB,GAChC,YAAY,MAAM,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,KACjD,eAQoB,CAAC;AAExB;;;;;GAKG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,EACzB,IAAI,MAAM,EACV,MAAM,aAAa,CAAC,CAAC,CAAC,KACrB,SAAS,CAAC,CAAC,CASV,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,WAAW,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,YAMrD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,GACnC,YAAY,SAAS,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,KAC9C,MAAM,GAAG,SASX,CAAC"}
package/dist/provision.js DELETED
@@ -1,56 +0,0 @@
1
- import { NotFoundError } from './errors.js';
2
- const getProvisionId = (provisionOrId) => typeof provisionOrId === 'string' ? provisionOrId : provisionOrId.id;
3
- const getProvisionInstance = (ctx, provisionOrId) => {
4
- const id = getProvisionId(provisionOrId);
5
- return ctx.extensions?.[id];
6
- };
7
- const hasProvisionInstance = (ctx, provisionOrId) => Object.hasOwn(ctx.extensions ?? {}, getProvisionId(provisionOrId));
8
- /** Create a `ctx.provision(...)` accessor bound to a concrete context snapshot. */
9
- export const createProvisionLookup = (getContext) => ((provisionOrId) => {
10
- const id = getProvisionId(provisionOrId);
11
- const ctx = getContext();
12
- if (!hasProvisionInstance(ctx, id)) {
13
- throw new NotFoundError(`Provision "${id}" not found in trail context`);
14
- }
15
- return getProvisionInstance(ctx, id);
16
- });
17
- /**
18
- * Create a typed provision definition.
19
- *
20
- * The provision object is inert until a later execution branch resolves concrete
21
- * instances into TrailContext extensions.
22
- */
23
- export const provision = (id, spec) => Object.freeze({
24
- ...spec,
25
- from(ctx) {
26
- const lookup = ctx.provision ?? createProvisionLookup(() => ctx);
27
- return lookup(this);
28
- },
29
- id,
30
- kind: 'provision',
31
- });
32
- /** Narrow unknown values to provision definitions during topo discovery. */
33
- export const isProvision = (value) => {
34
- if (typeof value !== 'object' || value === null) {
35
- return false;
36
- }
37
- const v = value;
38
- return v.kind === 'provision' && typeof v.id === 'string';
39
- };
40
- /**
41
- * Return the first duplicate provision ID in a collection, if any.
42
- *
43
- * This supports later topo registration without each caller duplicating the
44
- * same scan logic.
45
- */
46
- export const findDuplicateProvisionId = (provisions) => {
47
- const seen = new Set();
48
- for (const candidate of provisions) {
49
- if (seen.has(candidate.id)) {
50
- return candidate.id;
51
- }
52
- seen.add(candidate.id);
53
- }
54
- return undefined;
55
- };
56
- //# sourceMappingURL=provision.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provision.js","sourceRoot":"","sources":["../src/provision.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAqE5C,MAAM,cAAc,GAAG,CACrB,aAAgD,EACxC,EAAE,CACV,OAAO,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC;AAEvE,MAAM,oBAAoB,GAAG,CAC3B,GAAqC,EACrC,aAAgD,EAC7C,EAAE;IACL,MAAM,EAAE,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;IACzC,OAAO,GAAG,CAAC,UAAU,EAAE,CAAC,EAAE,CAAM,CAAC;AACnC,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAC3B,GAAqC,EACrC,aAAgD,EACvC,EAAE,CACX,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;AAErE,mFAAmF;AACnF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,UAAkD,EACjC,EAAE,CACnB,CAAC,CAAC,aAAgD,EAAE,EAAE;IACpD,MAAM,EAAE,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,aAAa,CAAC,cAAc,EAAE,8BAA8B,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,oBAAoB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACvC,CAAC,CAAoB,CAAC;AAExB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,EAAU,EACV,IAAsB,EACR,EAAE,CAChB,MAAM,CAAC,MAAM,CAAC;IACZ,GAAG,IAAI;IACP,IAAI,CAAC,GAAiB;QACpB,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,IAAI,qBAAqB,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IACD,EAAE;IACF,IAAI,EAAE,WAAoB;CAC3B,CAAC,CAAC;AAEL,4EAA4E;AAC5E,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAc,EAAyB,EAAE;IACnE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,CAAC,GAAG,KAAyC,CAAC;IACpD,OAAO,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;AAC5D,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,UAA+C,EAC3B,EAAE;IACtB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;YAC3B,OAAO,SAAS,CAAC,EAAE,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC"}
@@ -1,4 +0,0 @@
1
- export { DEFAULT_PATTERNS, DEFAULT_SENSITIVE_KEYS } from './patterns.js';
2
- export { createRedactor } from './redactor.js';
3
- export type { Redactor, RedactorConfig } from './redactor.js';
4
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/redaction/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
@@ -1,3 +0,0 @@
1
- export { DEFAULT_PATTERNS, DEFAULT_SENSITIVE_KEYS } from './patterns.js';
2
- export { createRedactor } from './redactor.js';
3
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/redaction/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
@@ -1,9 +0,0 @@
1
- /**
2
- * Default redaction patterns and sensitive key lists.
3
- *
4
- * These are used by {@link createRedactor} to strip secrets from strings
5
- * and object values before they reach logs, traces, or error payloads.
6
- */
7
- export declare const DEFAULT_PATTERNS: RegExp[];
8
- export declare const DEFAULT_SENSITIVE_KEYS: string[];
9
- //# sourceMappingURL=patterns.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../src/redaction/patterns.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,eAAO,MAAM,gBAAgB,EAAE,MAAM,EAkBpC,CAAC;AAMF,eAAO,MAAM,sBAAsB,EAAE,MAAM,EAW1C,CAAC"}
@@ -1,39 +0,0 @@
1
- /**
2
- * Default redaction patterns and sensitive key lists.
3
- *
4
- * These are used by {@link createRedactor} to strip secrets from strings
5
- * and object values before they reach logs, traces, or error payloads.
6
- */
7
- // ---------------------------------------------------------------------------
8
- // Regex patterns that match sensitive values inside arbitrary strings
9
- // ---------------------------------------------------------------------------
10
- export const DEFAULT_PATTERNS = [
11
- // Credit card numbers: 4 groups of 4 digits separated by spaces or dashes
12
- /\b\d{4}[- ]\d{4}[- ]\d{4}[- ]\d{4}\b/g,
13
- // SSN: XXX-XX-XXXX
14
- /\b\d{3}-\d{2}-\d{4}\b/g,
15
- // Bearer tokens
16
- /Bearer\s+[A-Za-z0-9\-._~+/]+=*/g,
17
- // Basic auth
18
- /Basic\s+[A-Za-z0-9+/]+=*/g,
19
- // API keys: sk-*, pk_*, sk_* prefixed tokens
20
- /\b(?:sk-|pk_|sk_)[A-Za-z0-9_-]{8,}\b/g,
21
- // JWT tokens: eyJ... (three base64url segments separated by dots)
22
- /\beyJ[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g,
23
- ];
24
- // ---------------------------------------------------------------------------
25
- // Object keys whose values should always be redacted
26
- // ---------------------------------------------------------------------------
27
- export const DEFAULT_SENSITIVE_KEYS = [
28
- 'password',
29
- 'secret',
30
- 'token',
31
- 'apiKey',
32
- 'api_key',
33
- 'authorization',
34
- 'cookie',
35
- 'ssn',
36
- 'creditCard',
37
- 'credit_card',
38
- ];
39
- //# sourceMappingURL=patterns.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../src/redaction/patterns.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,8EAA8E;AAC9E,sEAAsE;AACtE,8EAA8E;AAE9E,MAAM,CAAC,MAAM,gBAAgB,GAAa;IACxC,0EAA0E;IAC1E,uCAAuC;IAEvC,mBAAmB;IACnB,wBAAwB;IAExB,gBAAgB;IAChB,iCAAiC;IAEjC,aAAa;IACb,2BAA2B;IAE3B,6CAA6C;IAC7C,uCAAuC;IAEvC,kEAAkE;IAClE,2DAA2D;CAC5D,CAAC;AAEF,8EAA8E;AAC9E,qDAAqD;AACrD,8EAA8E;AAE9E,MAAM,CAAC,MAAM,sBAAsB,GAAa;IAC9C,UAAU;IACV,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,SAAS;IACT,eAAe;IACf,QAAQ;IACR,KAAK;IACL,YAAY;IACZ,aAAa;CACd,CAAC"}
@@ -1,27 +0,0 @@
1
- /**
2
- * Redactor — strips sensitive data from strings and objects.
3
- *
4
- * @example
5
- * ```ts
6
- * const r = createRedactor();
7
- * r.redact("token: Bearer abc123"); // "token: [REDACTED]"
8
- * r.redactObject({ password: "s3cret" }); // { password: "[REDACTED]" }
9
- * ```
10
- */
11
- export interface RedactorConfig {
12
- readonly patterns?: RegExp[];
13
- readonly sensitiveKeys?: string[];
14
- readonly replacement?: string;
15
- }
16
- export interface Redactor {
17
- /** Replace all pattern matches in a string with the replacement. */
18
- redact(value: string): string;
19
- /**
20
- * Deep-clone `obj` and redact:
21
- * 1. Values whose key matches a sensitive key (case-insensitive).
22
- * 2. All remaining string values that match a pattern.
23
- */
24
- redactObject<T extends Record<string, unknown>>(obj: T): T;
25
- }
26
- export declare const createRedactor: (config?: RedactorConfig) => Redactor;
27
- //# sourceMappingURL=redactor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"redactor.d.ts","sourceRoot":"","sources":["../../src/redaction/redactor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,QAAQ;IACvB,oEAAoE;IACpE,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IAE9B;;;;OAIG;IACH,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;CAC5D;AA8HD,eAAO,MAAM,cAAc,GAAI,SAAS,cAAc,KAAG,QAkBxD,CAAC"}
@@ -1,89 +0,0 @@
1
- /**
2
- * Redactor — strips sensitive data from strings and objects.
3
- *
4
- * @example
5
- * ```ts
6
- * const r = createRedactor();
7
- * r.redact("token: Bearer abc123"); // "token: [REDACTED]"
8
- * r.redactObject({ password: "s3cret" }); // { password: "[REDACTED]" }
9
- * ```
10
- */
11
- import { DEFAULT_PATTERNS, DEFAULT_SENSITIVE_KEYS } from './patterns.js';
12
- // ---------------------------------------------------------------------------
13
- // Helpers
14
- // ---------------------------------------------------------------------------
15
- const resetPatterns = (patterns) => {
16
- for (const p of patterns) {
17
- p.lastIndex = 0;
18
- }
19
- };
20
- const applyPatterns = (value, patterns, replacement) => {
21
- let result = value;
22
- for (const pattern of patterns) {
23
- // Reset in case the regex is stateful (global flag)
24
- pattern.lastIndex = 0;
25
- result = result.replace(pattern, replacement);
26
- }
27
- return result;
28
- };
29
- const isSensitiveKey = (key, sensitiveKeysLower) => key !== undefined && sensitiveKeysLower.has(key.toLowerCase());
30
- const mapObjectValues = (value, visit) => {
31
- const result = {};
32
- for (const [key, item] of Object.entries(value)) {
33
- result[key] = visit(item, key);
34
- }
35
- return result;
36
- };
37
- /** Track and guard against circular references in object graphs. */
38
- const trackOrCircular = (value, seen) => {
39
- if (seen.has(value)) {
40
- return '[Circular]';
41
- }
42
- seen.add(value);
43
- return null;
44
- };
45
- /* oxlint-disable no-use-before-define -- mutual recursion between redactCompound and deepRedact */
46
- /** Redact a compound value (array or object), delegating scalars back to deepRedact. */
47
- const redactCompound = (value, sensitiveKeysLower, patterns, replacement, seen) => {
48
- const circular = trackOrCircular(value, seen);
49
- if (circular) {
50
- return circular;
51
- }
52
- if (Array.isArray(value)) {
53
- return value.map((item) => deepRedact(item, sensitiveKeysLower, patterns, replacement, undefined, seen));
54
- }
55
- return mapObjectValues(value, (item, key) => deepRedact(item, sensitiveKeysLower, patterns, replacement, key, seen));
56
- };
57
- const deepRedact = (value, sensitiveKeysLower, patterns, replacement, currentKey, seen = new WeakSet()) => {
58
- if (isSensitiveKey(currentKey, sensitiveKeysLower)) {
59
- return replacement;
60
- }
61
- if (typeof value === 'string') {
62
- return applyPatterns(value, patterns, replacement);
63
- }
64
- if (value !== null && typeof value === 'object') {
65
- return redactCompound(value, sensitiveKeysLower, patterns, replacement, seen);
66
- }
67
- return value;
68
- };
69
- /* oxlint-enable no-use-before-define */
70
- // ---------------------------------------------------------------------------
71
- // Factory
72
- // ---------------------------------------------------------------------------
73
- export const createRedactor = (config) => {
74
- const patterns = config?.patterns ?? DEFAULT_PATTERNS;
75
- const sensitiveKeys = config?.sensitiveKeys ?? DEFAULT_SENSITIVE_KEYS;
76
- const replacement = config?.replacement ?? '[REDACTED]';
77
- const sensitiveKeysLower = new Set(sensitiveKeys.map((k) => k.toLowerCase()));
78
- return {
79
- redact(value) {
80
- resetPatterns(patterns);
81
- return applyPatterns(value, patterns, replacement);
82
- },
83
- redactObject(obj) {
84
- resetPatterns(patterns);
85
- return deepRedact(obj, sensitiveKeysLower, patterns, replacement);
86
- },
87
- };
88
- };
89
- //# sourceMappingURL=redactor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"redactor.js","sourceRoot":"","sources":["../../src/redaction/redactor.ts"],"names":[],"mappings":"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"}
@@ -1,34 +0,0 @@
1
- /**
2
- * Resilience utilities for @ontrails/core
3
- *
4
- * Retry with exponential backoff and timeout wrappers,
5
- * all returning Result types.
6
- */
7
- import { Result } from './result.js';
8
- export interface RetryOptions {
9
- /** Maximum number of attempts (default: 3) */
10
- readonly maxAttempts?: number | undefined;
11
- /** Base delay in ms before first retry (default: 1000) */
12
- readonly baseDelay?: number | undefined;
13
- /** Maximum delay in ms (default: 30000) */
14
- readonly maxDelay?: number | undefined;
15
- /** Exponential backoff factor (default: 2) */
16
- readonly backoffFactor?: number | undefined;
17
- /** Custom predicate — defaults to isRetryable from error taxonomy */
18
- readonly shouldRetry?: ((error: Error) => boolean) | undefined;
19
- /** AbortSignal for cancellation */
20
- readonly signal?: AbortSignal | undefined;
21
- }
22
- /** Default retry predicate using the error taxonomy. */
23
- export declare const shouldRetry: (error: Error) => boolean;
24
- /** Compute exponential backoff delay with full jitter. */
25
- export declare const getBackoffDelay: (attempt: number, options?: Pick<RetryOptions, "baseDelay" | "maxDelay" | "backoffFactor">) => number;
26
- export declare const retry: <T>(fn: () => Promise<Result<T, Error>>, options?: RetryOptions) => Promise<Result<T, Error>>;
27
- /**
28
- * Run an async Result-returning function with a timeout.
29
- *
30
- * If the timeout fires first, returns a TimeoutError result.
31
- * Also respects an external AbortSignal.
32
- */
33
- export declare const withTimeout: <T>(fn: () => Promise<Result<T, Error>>, ms: number, signal?: AbortSignal) => Promise<Result<T, Error>>;
34
- //# sourceMappingURL=resilience.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resilience.d.ts","sourceRoot":"","sources":["../src/resilience.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAMrC,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,0DAA0D;IAC1D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,2CAA2C;IAC3C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,8CAA8C;IAC9C,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,qEAAqE;IACrE,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;IAC/D,mCAAmC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAC3C;AAgCD,wDAAwD;AACxD,eAAO,MAAM,WAAW,GAAI,OAAO,KAAK,KAAG,OAA6B,CAAC;AAMzE,0DAA0D;AAC1D,eAAO,MAAM,eAAe,GAC1B,SAAS,MAAM,EACf,UAAU,IAAI,CAAC,YAAY,EAAE,WAAW,GAAG,UAAU,GAAG,eAAe,CAAC,KACvE,MAQF,CAAC;AA8CF,eAAO,MAAM,KAAK,GAAU,CAAC,EAC3B,IAAI,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EACnC,UAAU,YAAY,KACrB,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAsB1B,CAAC;AAMF;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,EAC3B,IAAI,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EACnC,IAAI,MAAM,EACV,SAAS,WAAW,KACnB,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAoE1B,CAAC"}