gitx.do 0.0.3 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. package/README.md +319 -92
  2. package/dist/cli/commands/add.d.ts +176 -0
  3. package/dist/cli/commands/add.d.ts.map +1 -0
  4. package/dist/cli/commands/add.js +979 -0
  5. package/dist/cli/commands/add.js.map +1 -0
  6. package/dist/cli/commands/blame.d.ts +1 -1
  7. package/dist/cli/commands/blame.d.ts.map +1 -1
  8. package/dist/cli/commands/blame.js +1 -1
  9. package/dist/cli/commands/blame.js.map +1 -1
  10. package/dist/cli/commands/branch.d.ts +1 -1
  11. package/dist/cli/commands/branch.d.ts.map +1 -1
  12. package/dist/cli/commands/branch.js +2 -2
  13. package/dist/cli/commands/branch.js.map +1 -1
  14. package/dist/cli/commands/checkout.d.ts +73 -0
  15. package/dist/cli/commands/checkout.d.ts.map +1 -0
  16. package/dist/cli/commands/checkout.js +725 -0
  17. package/dist/cli/commands/checkout.js.map +1 -0
  18. package/dist/cli/commands/commit.d.ts.map +1 -1
  19. package/dist/cli/commands/commit.js +22 -2
  20. package/dist/cli/commands/commit.js.map +1 -1
  21. package/dist/cli/commands/diff.d.ts +4 -4
  22. package/dist/cli/commands/diff.d.ts.map +1 -1
  23. package/dist/cli/commands/diff.js +9 -8
  24. package/dist/cli/commands/diff.js.map +1 -1
  25. package/dist/cli/commands/log.d.ts +1 -1
  26. package/dist/cli/commands/log.d.ts.map +1 -1
  27. package/dist/cli/commands/log.js +1 -1
  28. package/dist/cli/commands/log.js.map +1 -1
  29. package/dist/cli/commands/merge.d.ts +106 -0
  30. package/dist/cli/commands/merge.d.ts.map +1 -0
  31. package/dist/cli/commands/merge.js +852 -0
  32. package/dist/cli/commands/merge.js.map +1 -0
  33. package/dist/cli/commands/review.d.ts +1 -1
  34. package/dist/cli/commands/review.d.ts.map +1 -1
  35. package/dist/cli/commands/review.js +26 -1
  36. package/dist/cli/commands/review.js.map +1 -1
  37. package/dist/cli/commands/stash.d.ts +157 -0
  38. package/dist/cli/commands/stash.d.ts.map +1 -0
  39. package/dist/cli/commands/stash.js +655 -0
  40. package/dist/cli/commands/stash.js.map +1 -0
  41. package/dist/cli/commands/status.d.ts.map +1 -1
  42. package/dist/cli/commands/status.js +1 -2
  43. package/dist/cli/commands/status.js.map +1 -1
  44. package/dist/cli/commands/web.d.ts.map +1 -1
  45. package/dist/cli/commands/web.js +3 -2
  46. package/dist/cli/commands/web.js.map +1 -1
  47. package/dist/cli/fs-adapter.d.ts.map +1 -1
  48. package/dist/cli/fs-adapter.js +3 -5
  49. package/dist/cli/fs-adapter.js.map +1 -1
  50. package/dist/cli/fsx-cli-adapter.d.ts +359 -0
  51. package/dist/cli/fsx-cli-adapter.d.ts.map +1 -0
  52. package/dist/cli/fsx-cli-adapter.js +619 -0
  53. package/dist/cli/fsx-cli-adapter.js.map +1 -0
  54. package/dist/cli/index.d.ts.map +1 -1
  55. package/dist/cli/index.js +68 -12
  56. package/dist/cli/index.js.map +1 -1
  57. package/dist/cli/ui/components/DiffView.d.ts +7 -2
  58. package/dist/cli/ui/components/DiffView.d.ts.map +1 -1
  59. package/dist/cli/ui/components/DiffView.js.map +1 -1
  60. package/dist/cli/ui/components/ErrorDisplay.d.ts +6 -2
  61. package/dist/cli/ui/components/ErrorDisplay.d.ts.map +1 -1
  62. package/dist/cli/ui/components/ErrorDisplay.js.map +1 -1
  63. package/dist/cli/ui/components/FuzzySearch.d.ts +8 -2
  64. package/dist/cli/ui/components/FuzzySearch.d.ts.map +1 -1
  65. package/dist/cli/ui/components/FuzzySearch.js.map +1 -1
  66. package/dist/cli/ui/components/LoadingSpinner.d.ts +6 -2
  67. package/dist/cli/ui/components/LoadingSpinner.d.ts.map +1 -1
  68. package/dist/cli/ui/components/LoadingSpinner.js.map +1 -1
  69. package/dist/cli/ui/components/NavigationList.d.ts +7 -2
  70. package/dist/cli/ui/components/NavigationList.d.ts.map +1 -1
  71. package/dist/cli/ui/components/NavigationList.js.map +1 -1
  72. package/dist/cli/ui/components/ScrollableContent.d.ts +7 -2
  73. package/dist/cli/ui/components/ScrollableContent.d.ts.map +1 -1
  74. package/dist/cli/ui/components/ScrollableContent.js.map +1 -1
  75. package/dist/cli/ui/terminal-ui.d.ts +42 -9
  76. package/dist/cli/ui/terminal-ui.d.ts.map +1 -1
  77. package/dist/cli/ui/terminal-ui.js.map +1 -1
  78. package/dist/do/BashModule.d.ts +871 -0
  79. package/dist/do/BashModule.d.ts.map +1 -0
  80. package/dist/do/BashModule.js +1143 -0
  81. package/dist/do/BashModule.js.map +1 -0
  82. package/dist/do/FsModule.d.ts +612 -0
  83. package/dist/do/FsModule.d.ts.map +1 -0
  84. package/dist/do/FsModule.js +1120 -0
  85. package/dist/do/FsModule.js.map +1 -0
  86. package/dist/do/GitModule.d.ts +635 -0
  87. package/dist/do/GitModule.d.ts.map +1 -0
  88. package/dist/do/GitModule.js +784 -0
  89. package/dist/do/GitModule.js.map +1 -0
  90. package/dist/do/GitRepoDO.d.ts +281 -0
  91. package/dist/do/GitRepoDO.d.ts.map +1 -0
  92. package/dist/do/GitRepoDO.js +479 -0
  93. package/dist/do/GitRepoDO.js.map +1 -0
  94. package/dist/do/bash-ast.d.ts +246 -0
  95. package/dist/do/bash-ast.d.ts.map +1 -0
  96. package/dist/do/bash-ast.js +888 -0
  97. package/dist/do/bash-ast.js.map +1 -0
  98. package/dist/do/container-executor.d.ts +491 -0
  99. package/dist/do/container-executor.d.ts.map +1 -0
  100. package/dist/do/container-executor.js +731 -0
  101. package/dist/do/container-executor.js.map +1 -0
  102. package/dist/do/index.d.ts +53 -0
  103. package/dist/do/index.d.ts.map +1 -0
  104. package/dist/do/index.js +91 -0
  105. package/dist/do/index.js.map +1 -0
  106. package/dist/do/tiered-storage.d.ts +403 -0
  107. package/dist/do/tiered-storage.d.ts.map +1 -0
  108. package/dist/do/tiered-storage.js +689 -0
  109. package/dist/do/tiered-storage.js.map +1 -0
  110. package/dist/do/withBash.d.ts +231 -0
  111. package/dist/do/withBash.d.ts.map +1 -0
  112. package/dist/do/withBash.js +244 -0
  113. package/dist/do/withBash.js.map +1 -0
  114. package/dist/do/withFs.d.ts +237 -0
  115. package/dist/do/withFs.d.ts.map +1 -0
  116. package/dist/do/withFs.js +387 -0
  117. package/dist/do/withFs.js.map +1 -0
  118. package/dist/do/withGit.d.ts +180 -0
  119. package/dist/do/withGit.d.ts.map +1 -0
  120. package/dist/do/withGit.js +271 -0
  121. package/dist/do/withGit.js.map +1 -0
  122. package/dist/durable-object/object-store.d.ts +157 -15
  123. package/dist/durable-object/object-store.d.ts.map +1 -1
  124. package/dist/durable-object/object-store.js +435 -47
  125. package/dist/durable-object/object-store.js.map +1 -1
  126. package/dist/durable-object/schema.d.ts +12 -1
  127. package/dist/durable-object/schema.d.ts.map +1 -1
  128. package/dist/durable-object/schema.js +87 -2
  129. package/dist/durable-object/schema.js.map +1 -1
  130. package/dist/index.d.ts +84 -1
  131. package/dist/index.d.ts.map +1 -1
  132. package/dist/index.js +34 -0
  133. package/dist/index.js.map +1 -1
  134. package/dist/mcp/sandbox/miniflare-evaluator.d.ts +22 -0
  135. package/dist/mcp/sandbox/miniflare-evaluator.d.ts.map +1 -0
  136. package/dist/mcp/sandbox/miniflare-evaluator.js +140 -0
  137. package/dist/mcp/sandbox/miniflare-evaluator.js.map +1 -0
  138. package/dist/mcp/sandbox/object-store-proxy.d.ts +32 -0
  139. package/dist/mcp/sandbox/object-store-proxy.d.ts.map +1 -0
  140. package/dist/mcp/sandbox/object-store-proxy.js +30 -0
  141. package/dist/mcp/sandbox/object-store-proxy.js.map +1 -0
  142. package/dist/mcp/sandbox/template.d.ts +17 -0
  143. package/dist/mcp/sandbox/template.d.ts.map +1 -0
  144. package/dist/mcp/sandbox/template.js +71 -0
  145. package/dist/mcp/sandbox/template.js.map +1 -0
  146. package/dist/mcp/sandbox.d.ts.map +1 -1
  147. package/dist/mcp/sandbox.js +16 -4
  148. package/dist/mcp/sandbox.js.map +1 -1
  149. package/dist/mcp/tools/do.d.ts +32 -0
  150. package/dist/mcp/tools/do.d.ts.map +1 -0
  151. package/dist/mcp/tools/do.js +117 -0
  152. package/dist/mcp/tools/do.js.map +1 -0
  153. package/dist/mcp/tools.d.ts.map +1 -1
  154. package/dist/mcp/tools.js +1258 -22
  155. package/dist/mcp/tools.js.map +1 -1
  156. package/dist/pack/delta.d.ts +8 -0
  157. package/dist/pack/delta.d.ts.map +1 -1
  158. package/dist/pack/delta.js +241 -30
  159. package/dist/pack/delta.js.map +1 -1
  160. package/dist/refs/branch.d.ts +38 -25
  161. package/dist/refs/branch.d.ts.map +1 -1
  162. package/dist/refs/branch.js +421 -94
  163. package/dist/refs/branch.js.map +1 -1
  164. package/dist/refs/storage.d.ts +77 -5
  165. package/dist/refs/storage.d.ts.map +1 -1
  166. package/dist/refs/storage.js +193 -43
  167. package/dist/refs/storage.js.map +1 -1
  168. package/dist/refs/tag.d.ts +44 -24
  169. package/dist/refs/tag.d.ts.map +1 -1
  170. package/dist/refs/tag.js +411 -70
  171. package/dist/refs/tag.js.map +1 -1
  172. package/dist/storage/backend.d.ts +425 -0
  173. package/dist/storage/backend.d.ts.map +1 -0
  174. package/dist/storage/backend.js +41 -0
  175. package/dist/storage/backend.js.map +1 -0
  176. package/dist/storage/fsx-adapter.d.ts +204 -0
  177. package/dist/storage/fsx-adapter.d.ts.map +1 -0
  178. package/dist/storage/fsx-adapter.js +518 -0
  179. package/dist/storage/fsx-adapter.js.map +1 -0
  180. package/dist/storage/r2-pack.d.ts.map +1 -1
  181. package/dist/storage/r2-pack.js +4 -1
  182. package/dist/storage/r2-pack.js.map +1 -1
  183. package/dist/tiered/cdc-pipeline.js +3 -3
  184. package/dist/tiered/cdc-pipeline.js.map +1 -1
  185. package/dist/tiered/migration.d.ts.map +1 -1
  186. package/dist/tiered/migration.js +4 -1
  187. package/dist/tiered/migration.js.map +1 -1
  188. package/dist/types/capability.d.ts +1385 -0
  189. package/dist/types/capability.d.ts.map +1 -0
  190. package/dist/types/capability.js +36 -0
  191. package/dist/types/capability.js.map +1 -0
  192. package/dist/types/index.d.ts +13 -0
  193. package/dist/types/index.d.ts.map +1 -0
  194. package/dist/types/index.js +18 -0
  195. package/dist/types/index.js.map +1 -0
  196. package/dist/types/interfaces.d.ts +673 -0
  197. package/dist/types/interfaces.d.ts.map +1 -0
  198. package/dist/types/interfaces.js +26 -0
  199. package/dist/types/interfaces.js.map +1 -0
  200. package/dist/types/objects.d.ts +182 -0
  201. package/dist/types/objects.d.ts.map +1 -1
  202. package/dist/types/objects.js +249 -4
  203. package/dist/types/objects.js.map +1 -1
  204. package/dist/types/storage.d.ts +114 -0
  205. package/dist/types/storage.d.ts.map +1 -1
  206. package/dist/types/storage.js +160 -1
  207. package/dist/types/storage.js.map +1 -1
  208. package/dist/types/worker-loader.d.ts +60 -0
  209. package/dist/types/worker-loader.d.ts.map +1 -0
  210. package/dist/types/worker-loader.js +62 -0
  211. package/dist/types/worker-loader.js.map +1 -0
  212. package/dist/utils/hash.d.ts +126 -80
  213. package/dist/utils/hash.d.ts.map +1 -1
  214. package/dist/utils/hash.js +191 -100
  215. package/dist/utils/hash.js.map +1 -1
  216. package/dist/utils/sha1.d.ts +206 -0
  217. package/dist/utils/sha1.d.ts.map +1 -1
  218. package/dist/utils/sha1.js +405 -0
  219. package/dist/utils/sha1.js.map +1 -1
  220. package/dist/wire/path-security.d.ts +157 -0
  221. package/dist/wire/path-security.d.ts.map +1 -0
  222. package/dist/wire/path-security.js +307 -0
  223. package/dist/wire/path-security.js.map +1 -0
  224. package/dist/wire/receive-pack.d.ts +7 -0
  225. package/dist/wire/receive-pack.d.ts.map +1 -1
  226. package/dist/wire/receive-pack.js +29 -1
  227. package/dist/wire/receive-pack.js.map +1 -1
  228. package/dist/wire/upload-pack.d.ts.map +1 -1
  229. package/dist/wire/upload-pack.js +4 -1
  230. package/dist/wire/upload-pack.js.map +1 -1
  231. package/package.json +10 -1
@@ -227,4 +227,409 @@ export function sha1Verify(data, expected) {
227
227
  }
228
228
  return true;
229
229
  }
230
+ // ============================================================================
231
+ // Hex Conversion Utilities
232
+ // ============================================================================
233
+ /**
234
+ * Convert bytes to hexadecimal string.
235
+ *
236
+ * @description Efficiently converts a Uint8Array to its hexadecimal
237
+ * representation. Each byte becomes two hex characters (00-ff).
238
+ *
239
+ * @param bytes - Input bytes to convert
240
+ * @returns Lowercase hexadecimal string (2 chars per byte)
241
+ *
242
+ * @example
243
+ * ```typescript
244
+ * const bytes = new Uint8Array([0x48, 0x65, 0x6c, 0x6c, 0x6f])
245
+ * const hex = bytesToHex(bytes)
246
+ * console.log(hex) // '48656c6c6f'
247
+ * ```
248
+ */
249
+ export function bytesToHex(bytes) {
250
+ let hex = '';
251
+ for (let i = 0; i < bytes.length; i++) {
252
+ hex += bytes[i].toString(16).padStart(2, '0');
253
+ }
254
+ return hex;
255
+ }
256
+ /**
257
+ * Convert hexadecimal string to bytes.
258
+ *
259
+ * @description Converts a hexadecimal string back to its binary representation.
260
+ * Each pair of hex characters becomes one byte.
261
+ *
262
+ * @param hex - Hexadecimal string (case-insensitive)
263
+ * @returns Uint8Array of bytes
264
+ * @throws {Error} If hex string has odd length
265
+ *
266
+ * @example
267
+ * ```typescript
268
+ * const hex = '48656c6c6f'
269
+ * const bytes = hexToBytes(hex)
270
+ * console.log(new TextDecoder().decode(bytes)) // 'Hello'
271
+ * ```
272
+ */
273
+ export function hexToBytes(hex) {
274
+ if (hex.length % 2 !== 0) {
275
+ throw new Error('Hex string must have even length');
276
+ }
277
+ const bytes = new Uint8Array(hex.length / 2);
278
+ for (let i = 0; i < hex.length; i += 2) {
279
+ bytes[i / 2] = parseInt(hex.substring(i, i + 2), 16);
280
+ }
281
+ return bytes;
282
+ }
283
+ // ============================================================================
284
+ // Pre-computed constants for streaming SHA-1
285
+ // ============================================================================
286
+ /**
287
+ * Initial hash values for SHA-1 (first 32 bits of fractional parts of square roots of first 5 primes)
288
+ * @internal
289
+ */
290
+ const SHA1_H0 = 0x67452301;
291
+ const SHA1_H1 = 0xefcdab89;
292
+ const SHA1_H2 = 0x98badcfe;
293
+ const SHA1_H3 = 0x10325476;
294
+ const SHA1_H4 = 0xc3d2e1f0;
295
+ /**
296
+ * SHA-1 round constants
297
+ * @internal
298
+ */
299
+ const SHA1_K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];
300
+ /**
301
+ * Rotate left (circular left shift) operation.
302
+ * @internal
303
+ */
304
+ function rotl(n, s) {
305
+ return ((n << s) | (n >>> (32 - s))) >>> 0;
306
+ }
307
+ /**
308
+ * Process a single 64-byte chunk in SHA-1
309
+ * @internal
310
+ */
311
+ function processChunk(chunk, h, w) {
312
+ const chunkView = new DataView(chunk.buffer, chunk.byteOffset, 64);
313
+ // Break chunk into sixteen 32-bit big-endian words
314
+ for (let i = 0; i < 16; i++) {
315
+ w[i] = chunkView.getUint32(i * 4, false);
316
+ }
317
+ // Extend the sixteen 32-bit words into eighty 32-bit words
318
+ for (let i = 16; i < 80; i++) {
319
+ w[i] = rotl(w[i - 3] ^ w[i - 8] ^ w[i - 14] ^ w[i - 16], 1);
320
+ }
321
+ // Initialize working variables
322
+ let a = h[0];
323
+ let b = h[1];
324
+ let c = h[2];
325
+ let d = h[3];
326
+ let e = h[4];
327
+ // Main loop - 80 rounds
328
+ for (let i = 0; i < 80; i++) {
329
+ let f, k;
330
+ if (i < 20) {
331
+ f = (b & c) | (~b & d);
332
+ k = SHA1_K[0];
333
+ }
334
+ else if (i < 40) {
335
+ f = b ^ c ^ d;
336
+ k = SHA1_K[1];
337
+ }
338
+ else if (i < 60) {
339
+ f = (b & c) | (b & d) | (c & d);
340
+ k = SHA1_K[2];
341
+ }
342
+ else {
343
+ f = b ^ c ^ d;
344
+ k = SHA1_K[3];
345
+ }
346
+ const temp = (rotl(a, 5) + f + e + k + w[i]) >>> 0;
347
+ e = d;
348
+ d = c;
349
+ c = rotl(b, 30);
350
+ b = a;
351
+ a = temp;
352
+ }
353
+ // Add this chunk's hash to result so far
354
+ h[0] = (h[0] + a) >>> 0;
355
+ h[1] = (h[1] + b) >>> 0;
356
+ h[2] = (h[2] + c) >>> 0;
357
+ h[3] = (h[3] + d) >>> 0;
358
+ h[4] = (h[4] + e) >>> 0;
359
+ }
360
+ /**
361
+ * Streaming SHA-1 hasher for processing large data incrementally.
362
+ *
363
+ * @description
364
+ * This class allows hashing data in chunks, which is essential for:
365
+ * - Processing large files without loading everything into memory
366
+ * - Computing hashes of data streams
367
+ * - Pack file generation and verification
368
+ *
369
+ * The hasher maintains internal state and can accept data through the
370
+ * `update()` method before finalizing with `digest()` or `digestHex()`.
371
+ *
372
+ * **Performance Note**: For small data (< 64 bytes), the non-streaming
373
+ * `sha1()` function may be slightly faster due to lower overhead.
374
+ *
375
+ * @class StreamingSHA1
376
+ *
377
+ * @example
378
+ * ```typescript
379
+ * // Hash a large file in chunks
380
+ * const hasher = new StreamingSHA1()
381
+ *
382
+ * for await (const chunk of fileStream) {
383
+ * hasher.update(chunk)
384
+ * }
385
+ *
386
+ * const hash = hasher.digestHex()
387
+ * console.log(`File hash: ${hash}`)
388
+ * ```
389
+ *
390
+ * @example
391
+ * ```typescript
392
+ * // Hash Git object with header
393
+ * const hasher = new StreamingSHA1()
394
+ * hasher.update(new TextEncoder().encode(`blob ${size}\0`))
395
+ * hasher.update(content)
396
+ * const objectId = hasher.digestHex()
397
+ * ```
398
+ */
399
+ export class StreamingSHA1 {
400
+ /** Hash state */
401
+ h;
402
+ /** Working array for chunk processing */
403
+ w;
404
+ /** Buffer for incomplete chunks */
405
+ buffer;
406
+ /** Current position in buffer */
407
+ bufferLength;
408
+ /** Total bytes processed */
409
+ totalLength;
410
+ /** Whether digest has been called */
411
+ finalized;
412
+ /**
413
+ * Creates a new StreamingSHA1 hasher instance.
414
+ */
415
+ constructor() {
416
+ this.h = new Uint32Array([SHA1_H0, SHA1_H1, SHA1_H2, SHA1_H3, SHA1_H4]);
417
+ this.w = new Uint32Array(80);
418
+ this.buffer = new Uint8Array(64);
419
+ this.bufferLength = 0;
420
+ this.totalLength = 0n;
421
+ this.finalized = false;
422
+ }
423
+ /**
424
+ * Resets the hasher to its initial state.
425
+ *
426
+ * @description Allows reusing the same hasher instance for a new hash
427
+ * computation without creating a new object.
428
+ *
429
+ * @example
430
+ * ```typescript
431
+ * const hasher = new StreamingSHA1()
432
+ * hasher.update(data1)
433
+ * const hash1 = hasher.digestHex()
434
+ *
435
+ * hasher.reset()
436
+ * hasher.update(data2)
437
+ * const hash2 = hasher.digestHex()
438
+ * ```
439
+ */
440
+ reset() {
441
+ this.h[0] = SHA1_H0;
442
+ this.h[1] = SHA1_H1;
443
+ this.h[2] = SHA1_H2;
444
+ this.h[3] = SHA1_H3;
445
+ this.h[4] = SHA1_H4;
446
+ this.bufferLength = 0;
447
+ this.totalLength = 0n;
448
+ this.finalized = false;
449
+ }
450
+ /**
451
+ * Updates the hash with additional data.
452
+ *
453
+ * @description Processes the input data, updating the internal hash state.
454
+ * Data is buffered internally until a complete 64-byte chunk is available,
455
+ * then processed immediately.
456
+ *
457
+ * This method can be called multiple times before finalizing with `digest()`.
458
+ *
459
+ * @param {Uint8Array} data - Data to add to the hash computation
460
+ * @returns {this} The hasher instance for method chaining
461
+ * @throws {Error} If called after digest() without reset()
462
+ *
463
+ * @example
464
+ * ```typescript
465
+ * const hasher = new StreamingSHA1()
466
+ * .update(header)
467
+ * .update(content)
468
+ * .update(footer)
469
+ * const hash = hasher.digestHex()
470
+ * ```
471
+ */
472
+ update(data) {
473
+ if (this.finalized) {
474
+ throw new Error('Cannot update after digest() - call reset() first');
475
+ }
476
+ this.totalLength += BigInt(data.length);
477
+ let offset = 0;
478
+ // If we have buffered data, try to complete a chunk
479
+ if (this.bufferLength > 0) {
480
+ const needed = 64 - this.bufferLength;
481
+ const available = Math.min(needed, data.length);
482
+ this.buffer.set(data.subarray(0, available), this.bufferLength);
483
+ this.bufferLength += available;
484
+ offset = available;
485
+ if (this.bufferLength === 64) {
486
+ processChunk(this.buffer, this.h, this.w);
487
+ this.bufferLength = 0;
488
+ }
489
+ }
490
+ // Process complete 64-byte chunks directly from input
491
+ while (offset + 64 <= data.length) {
492
+ processChunk(data.subarray(offset, offset + 64), this.h, this.w);
493
+ offset += 64;
494
+ }
495
+ // Buffer remaining bytes
496
+ if (offset < data.length) {
497
+ this.buffer.set(data.subarray(offset), this.bufferLength);
498
+ this.bufferLength += data.length - offset;
499
+ }
500
+ return this;
501
+ }
502
+ /**
503
+ * Finalizes the hash computation and returns the 20-byte digest.
504
+ *
505
+ * @description Applies SHA-1 padding to the remaining data and computes
506
+ * the final hash. After calling this method, the hasher cannot be updated
507
+ * unless `reset()` is called.
508
+ *
509
+ * @returns {Uint8Array} 20-byte SHA-1 hash
510
+ *
511
+ * @example
512
+ * ```typescript
513
+ * const hasher = new StreamingSHA1()
514
+ * hasher.update(data)
515
+ * const hashBytes = hasher.digest()
516
+ * console.log(hashBytes.length) // 20
517
+ * ```
518
+ */
519
+ digest() {
520
+ if (this.finalized) {
521
+ // Return cached result
522
+ const result = new Uint8Array(20);
523
+ const resultView = new DataView(result.buffer);
524
+ resultView.setUint32(0, this.h[0], false);
525
+ resultView.setUint32(4, this.h[1], false);
526
+ resultView.setUint32(8, this.h[2], false);
527
+ resultView.setUint32(12, this.h[3], false);
528
+ resultView.setUint32(16, this.h[4], false);
529
+ return result;
530
+ }
531
+ this.finalized = true;
532
+ const bitLen = this.totalLength * 8n;
533
+ // Pad message: append 1 bit (0x80)
534
+ this.buffer[this.bufferLength] = 0x80;
535
+ this.bufferLength++;
536
+ // If we don't have room for the 64-bit length, fill and process this chunk
537
+ if (this.bufferLength > 56) {
538
+ // Fill rest with zeros and process
539
+ this.buffer.fill(0, this.bufferLength, 64);
540
+ processChunk(this.buffer, this.h, this.w);
541
+ this.bufferLength = 0;
542
+ }
543
+ // Fill with zeros up to length field
544
+ this.buffer.fill(0, this.bufferLength, 56);
545
+ // Write length as 64-bit big-endian
546
+ const lengthView = new DataView(this.buffer.buffer, this.buffer.byteOffset, 64);
547
+ lengthView.setBigUint64(56, bitLen, false);
548
+ // Process final chunk
549
+ processChunk(this.buffer, this.h, this.w);
550
+ // Produce the final hash value (big-endian)
551
+ const result = new Uint8Array(20);
552
+ const resultView = new DataView(result.buffer);
553
+ resultView.setUint32(0, this.h[0], false);
554
+ resultView.setUint32(4, this.h[1], false);
555
+ resultView.setUint32(8, this.h[2], false);
556
+ resultView.setUint32(12, this.h[3], false);
557
+ resultView.setUint32(16, this.h[4], false);
558
+ return result;
559
+ }
560
+ /**
561
+ * Finalizes the hash computation and returns the hex string digest.
562
+ *
563
+ * @description Convenience method that calls `digest()` and converts
564
+ * the result to a 40-character lowercase hexadecimal string.
565
+ *
566
+ * @returns {string} 40-character lowercase hexadecimal hash string
567
+ *
568
+ * @example
569
+ * ```typescript
570
+ * const hasher = new StreamingSHA1()
571
+ * hasher.update(data)
572
+ * const hash = hasher.digestHex()
573
+ * console.log(hash) // 'aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d'
574
+ * ```
575
+ */
576
+ digestHex() {
577
+ const hash = this.digest();
578
+ let hex = '';
579
+ for (let i = 0; i < hash.length; i++) {
580
+ hex += hash[i].toString(16).padStart(2, '0');
581
+ }
582
+ return hex;
583
+ }
584
+ }
585
+ /**
586
+ * Hash a Git object with streaming support for large objects.
587
+ *
588
+ * @description
589
+ * Uses the streaming hasher to compute the SHA-1 of a Git object with its header.
590
+ * This is more memory-efficient than `hashObject` in `hash.ts` for large objects
591
+ * as it doesn't require concatenating header and data.
592
+ *
593
+ * @param type - Object type ('blob', 'tree', 'commit', 'tag')
594
+ * @param data - Object content as binary data
595
+ * @returns 20-byte SHA-1 hash as Uint8Array
596
+ *
597
+ * @example
598
+ * ```typescript
599
+ * const content = new TextEncoder().encode('hello')
600
+ * const hashBytes = hashObjectStreaming('blob', content)
601
+ * ```
602
+ */
603
+ export function hashObjectStreaming(type, data) {
604
+ const hasher = new StreamingSHA1();
605
+ const header = new TextEncoder().encode(`${type} ${data.length}\0`);
606
+ hasher.update(header);
607
+ hasher.update(data);
608
+ return hasher.digest();
609
+ }
610
+ /**
611
+ * Hash a Git object with streaming support, returning hex string.
612
+ *
613
+ * @description
614
+ * Convenience wrapper that returns the hash as a 40-character hex string
615
+ * instead of raw bytes.
616
+ *
617
+ * @param type - Object type ('blob', 'tree', 'commit', 'tag')
618
+ * @param data - Object content as binary data
619
+ * @returns 40-character lowercase hexadecimal SHA-1 hash
620
+ *
621
+ * @example
622
+ * ```typescript
623
+ * const content = new TextEncoder().encode('hello')
624
+ * const sha = hashObjectStreamingHex('blob', content)
625
+ * console.log(sha) // 'b6fc4c620b67d95f953a5c1c1230aaab5db5a1b0'
626
+ * ```
627
+ */
628
+ export function hashObjectStreamingHex(type, data) {
629
+ const hasher = new StreamingSHA1();
630
+ const header = new TextEncoder().encode(`${type} ${data.length}\0`);
631
+ hasher.update(header);
632
+ hasher.update(data);
633
+ return hasher.digestHex();
634
+ }
230
635
  //# sourceMappingURL=sha1.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sha1.js","sourceRoot":"","sources":["../../src/utils/sha1.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sha1.js","sourceRoot":"","sources":["../../src/utils/sha1.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,157 @@
1
+ /**
2
+ * @fileoverview Path Security Validation for Wire Protocol
3
+ *
4
+ * This module provides security validation for paths and refs received from
5
+ * clients via the wire protocol. It prevents path traversal attacks and ensures
6
+ * paths are properly normalized and scoped.
7
+ *
8
+ * @module wire/path-security
9
+ *
10
+ * ## Security Considerations
11
+ *
12
+ * - Prevents path traversal via `../` sequences
13
+ * - Rejects absolute paths starting with `/` or drive letters
14
+ * - Normalizes paths to remove redundant separators
15
+ * - Validates ref names are within allowed namespace
16
+ * - Blocks null bytes and other control characters
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * import { validateRefPath, validateRepositoryId, PathSecurityError } from './path-security'
21
+ *
22
+ * try {
23
+ * validateRefPath('refs/heads/main') // OK
24
+ * validateRefPath('refs/../../../etc/passwd') // Throws PathSecurityError
25
+ * } catch (e) {
26
+ * if (e instanceof PathSecurityError) {
27
+ * console.error('Security violation:', e.message)
28
+ * }
29
+ * }
30
+ * ```
31
+ */
32
+ /**
33
+ * Error thrown when a path security violation is detected.
34
+ */
35
+ export declare class PathSecurityError extends Error {
36
+ readonly code: string;
37
+ constructor(message: string, code?: string);
38
+ }
39
+ /**
40
+ * Result of path validation.
41
+ */
42
+ export interface PathValidationResult {
43
+ /** Whether the path is valid */
44
+ valid: boolean;
45
+ /** Error message if invalid */
46
+ error?: string;
47
+ /** Error code if invalid */
48
+ code?: string;
49
+ /** Normalized path (if valid) */
50
+ normalizedPath?: string;
51
+ }
52
+ /**
53
+ * Check if a path contains path traversal sequences.
54
+ *
55
+ * @param path - Path to check
56
+ * @returns true if path traversal is detected
57
+ */
58
+ export declare function containsPathTraversal(path: string): boolean;
59
+ /**
60
+ * Check if a path is absolute.
61
+ *
62
+ * @param path - Path to check
63
+ * @returns true if the path is absolute
64
+ */
65
+ export declare function isAbsolutePath(path: string): boolean;
66
+ /**
67
+ * Check if a path contains dangerous characters.
68
+ *
69
+ * @param path - Path to check
70
+ * @returns Object with valid status and optional error
71
+ */
72
+ export declare function containsDangerousCharacters(path: string): {
73
+ dangerous: boolean;
74
+ reason?: string;
75
+ };
76
+ /**
77
+ * Normalize a path by removing redundant separators and resolving . components.
78
+ * Does NOT resolve .. components - those should be rejected.
79
+ *
80
+ * @param path - Path to normalize
81
+ * @returns Normalized path
82
+ */
83
+ export declare function normalizePath(path: string): string;
84
+ /**
85
+ * Validate a ref path for security issues.
86
+ *
87
+ * @description
88
+ * Validates a Git ref path to ensure it:
89
+ * - Does not contain path traversal sequences
90
+ * - Is not an absolute path
91
+ * - Does not contain dangerous characters
92
+ * - Starts with a valid ref prefix (refs/, HEAD)
93
+ *
94
+ * @param refPath - Ref path to validate
95
+ * @returns Validation result
96
+ *
97
+ * @example
98
+ * ```typescript
99
+ * const result = validateRefPath('refs/heads/main')
100
+ * // result.valid === true
101
+ *
102
+ * const badResult = validateRefPath('refs/heads/../../../etc/passwd')
103
+ * // badResult.valid === false
104
+ * // badResult.error === 'path traversal detected'
105
+ * ```
106
+ */
107
+ export declare function validateRefPath(refPath: string): PathValidationResult;
108
+ /**
109
+ * Validate a repository identifier for security issues.
110
+ *
111
+ * @description
112
+ * Validates a repository identifier to ensure it:
113
+ * - Does not contain path traversal sequences
114
+ * - Is not an absolute path
115
+ * - Does not contain dangerous characters
116
+ * - Contains only allowed characters (alphanumeric, dash, underscore, dot, slash)
117
+ *
118
+ * @param repoId - Repository identifier to validate
119
+ * @returns Validation result
120
+ *
121
+ * @example
122
+ * ```typescript
123
+ * const result = validateRepositoryId('my-org/my-repo')
124
+ * // result.valid === true
125
+ *
126
+ * const badResult = validateRepositoryId('../../../etc/passwd')
127
+ * // badResult.valid === false
128
+ * ```
129
+ */
130
+ export declare function validateRepositoryId(repoId: string): PathValidationResult;
131
+ /**
132
+ * Validate and sanitize a ref name for security.
133
+ *
134
+ * @description
135
+ * Combines Git ref name validation with security checks.
136
+ * This should be used in addition to the standard validateRefName function.
137
+ *
138
+ * @param refName - Ref name to validate
139
+ * @throws {PathSecurityError} If security violation detected
140
+ * @returns Normalized ref name
141
+ *
142
+ * @example
143
+ * ```typescript
144
+ * const safe = validateSecureRefName('refs/heads/main') // 'refs/heads/main'
145
+ * validateSecureRefName('refs/../etc/passwd') // throws PathSecurityError
146
+ * ```
147
+ */
148
+ export declare function validateSecureRefName(refName: string): string;
149
+ /**
150
+ * Validate and sanitize a repository identifier for security.
151
+ *
152
+ * @param repoId - Repository identifier to validate
153
+ * @throws {PathSecurityError} If security violation detected
154
+ * @returns Normalized repository identifier
155
+ */
156
+ export declare function validateSecureRepositoryId(repoId: string): string;
157
+ //# sourceMappingURL=path-security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-security.d.ts","sourceRoot":"","sources":["../../src/wire/path-security.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;gBAET,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAkC;CAKtE;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,gCAAgC;IAChC,KAAK,EAAE,OAAO,CAAA;IACd,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,4BAA4B;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,iCAAiC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAkBD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CA0B3D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAcpD;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAejG;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAsBlD;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB,CAiDrE;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB,CAuCzE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAW7D;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAWjE"}