@prefactor/sdk 0.1.3 → 0.1.4

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 (56) hide show
  1. package/dist/index.cjs +16 -1253
  2. package/dist/index.cjs.map +4 -17
  3. package/dist/index.d.ts +2 -81
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +4 -1255
  6. package/dist/index.js.map +4 -17
  7. package/package.json +6 -22
  8. package/LICENSE +0 -14
  9. package/README.md +0 -313
  10. package/dist/LICENSE +0 -14
  11. package/dist/README.md +0 -313
  12. package/dist/config.d.ts +0 -259
  13. package/dist/config.d.ts.map +0 -1
  14. package/dist/config.js +0 -110
  15. package/dist/config.js.map +0 -1
  16. package/dist/instrumentation/langchain/metadata-extractor.d.ts +0 -20
  17. package/dist/instrumentation/langchain/metadata-extractor.d.ts.map +0 -1
  18. package/dist/instrumentation/langchain/metadata-extractor.js +0 -54
  19. package/dist/instrumentation/langchain/metadata-extractor.js.map +0 -1
  20. package/dist/instrumentation/langchain/middleware.d.ts +0 -84
  21. package/dist/instrumentation/langchain/middleware.d.ts.map +0 -1
  22. package/dist/instrumentation/langchain/middleware.js +0 -181
  23. package/dist/instrumentation/langchain/middleware.js.map +0 -1
  24. package/dist/package.json +0 -56
  25. package/dist/tracing/context.d.ts +0 -53
  26. package/dist/tracing/context.d.ts.map +0 -1
  27. package/dist/tracing/context.js +0 -65
  28. package/dist/tracing/context.js.map +0 -1
  29. package/dist/tracing/span.d.ts +0 -68
  30. package/dist/tracing/span.d.ts.map +0 -1
  31. package/dist/tracing/span.js +0 -21
  32. package/dist/tracing/span.js.map +0 -1
  33. package/dist/tracing/tracer.d.ts +0 -100
  34. package/dist/tracing/tracer.d.ts.map +0 -1
  35. package/dist/tracing/tracer.js +0 -151
  36. package/dist/tracing/tracer.js.map +0 -1
  37. package/dist/transport/base.d.ts +0 -38
  38. package/dist/transport/base.d.ts.map +0 -1
  39. package/dist/transport/base.js +0 -2
  40. package/dist/transport/base.js.map +0 -1
  41. package/dist/transport/http.d.ts +0 -90
  42. package/dist/transport/http.d.ts.map +0 -1
  43. package/dist/transport/http.js +0 -399
  44. package/dist/transport/http.js.map +0 -1
  45. package/dist/transport/stdio.d.ts +0 -48
  46. package/dist/transport/stdio.d.ts.map +0 -1
  47. package/dist/transport/stdio.js +0 -71
  48. package/dist/transport/stdio.js.map +0 -1
  49. package/dist/utils/logging.d.ts +0 -29
  50. package/dist/utils/logging.d.ts.map +0 -1
  51. package/dist/utils/logging.js +0 -71
  52. package/dist/utils/logging.js.map +0 -1
  53. package/dist/utils/serialization.d.ts +0 -24
  54. package/dist/utils/serialization.d.ts.map +0 -1
  55. package/dist/utils/serialization.js +0 -60
  56. package/dist/utils/serialization.js.map +0 -1
@@ -1,23 +1,10 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../node_modules/@prefactor/pfid/dist/errors.js", "../node_modules/@prefactor/pfid/dist/pfid.js", "../node_modules/@prefactor/pfid/dist/index.js", "../src/index.ts", "../src/tracing/tracer.ts", "../src/tracing/span.ts", "../src/tracing/context.ts", "../src/instrumentation/langchain/metadata-extractor.ts", "../src/instrumentation/langchain/middleware.ts", "../src/utils/serialization.ts", "../src/transport/stdio.ts", "../src/utils/logging.ts", "../src/transport/http.ts", "../src/config.ts"],
3
+ "sources": ["../src/index.ts"],
4
4
  "sourcesContent": [
5
- "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PfidError = void 0;\nclass PfidError extends Error {\n constructor(code, message) {\n super(message);\n this.name = 'PfidError';\n this.code = code;\n Object.setPrototypeOf(this, PfidError.prototype);\n }\n static make(code, problem) {\n const message = (() => {\n switch (code) {\n case 'invalid_binary':\n return `invalid binary PFID: ${JSON.stringify(problem)}`;\n case 'invalid_pfid':\n return `invalid PFID: ${JSON.stringify(problem)}`;\n case 'invalid_partition':\n return `invalid partition: ${JSON.stringify(problem)}`;\n }\n })();\n return new PfidError(code, message);\n }\n}\nexports.PfidError = PfidError;\n//# sourceMappingURL=errors.js.map",
6
- "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.zero = zero;\nexports.generate = generate;\nexports.generateWithTimestamp = generateWithTimestamp;\nexports.generateExample = generateExample;\nexports.generateRelated = generateRelated;\nexports.generateRoot = generateRoot;\nexports.generateBinary = generateBinary;\nexports.generateBinaryWithTimestamp = generateBinaryWithTimestamp;\nexports.isPfid = isPfid;\nexports.encode = encode;\nexports.decode = decode;\nexports.extractPartition = extractPartition;\nexports.generatePartition = generatePartition;\nconst crypto_1 = require(\"crypto\");\nconst errors_1 = require(\"./errors\");\n// Constants\nconst MAX_TIMESTAMP = 281474976710655; // 2^48 - 1\nconst MAX_PARTITION = 1073741823; // 2^30 - 1\n// Crockford Base32 encoding/decoding\nconst ENCODE_CHARS = '0123456789abcdefghjkmnpqrstvwxyz';\nconst DECODE_MAP = {\n '0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7,\n '8': 8, '9': 9, 'a': 10, 'b': 11, 'c': 12, 'd': 13, 'e': 14, 'f': 15,\n 'g': 16, 'h': 17, 'j': 18, 'k': 19, 'm': 20, 'n': 21, 'p': 22, 'q': 23,\n 'r': 24, 's': 25, 't': 26, 'v': 27, 'w': 28, 'x': 29, 'y': 30, 'z': 31,\n};\nfunction encodeChar(value) {\n return ENCODE_CHARS[value];\n}\nfunction decodeChar(char) {\n const value = DECODE_MAP[char.toLowerCase()];\n if (value === undefined) {\n throw new Error(`Invalid character: ${char}`);\n }\n return value;\n}\n// Validation guards\nfunction isValidTimestamp(timestamp) {\n return Number.isInteger(timestamp) && timestamp >= 0 && timestamp <= MAX_TIMESTAMP;\n}\nfunction isValidPartition(partition) {\n return Number.isInteger(partition) && partition >= 0 && partition <= MAX_PARTITION;\n}\n/**\n * A zero PFID -- probably don't actually use it, but if you need a placeholder.\n */\nfunction zero() {\n return '00000000000000000000000000000000';\n}\n/**\n * Generate a Crockford Base32 encoded PFID string with current time.\n */\nfunction generate(partition) {\n if (!isValidPartition(partition)) {\n throw new Error(`Invalid partition: ${partition}`);\n }\n return unsafeEncode(generateBinary(partition));\n}\n/**\n * Generate a Crockford Base32 encoded PFID string with a provided Unix timestamp.\n */\nfunction generateWithTimestamp(partition, timestamp) {\n if (!isValidPartition(partition)) {\n throw new Error(`Invalid partition: ${partition}`);\n }\n if (!isValidTimestamp(timestamp)) {\n throw new Error(`Invalid timestamp: ${timestamp}`);\n }\n return unsafeEncode(generateBinaryWithTimestamp(partition, timestamp));\n}\n/**\n * Generate an ID suitable for use in an example -- it's well into the past.\n */\nfunction generateExample() {\n return generateWithTimestamp(123456789, 1234567890000);\n}\n/**\n * Generate an ID with the same partition as an existing PFID.\n */\nfunction generateRelated(existingPfid) {\n return generate(extractPartition(existingPfid));\n}\n/**\n * Generate an ID with a random partition.\n */\nfunction generateRoot() {\n return generate(generatePartition());\n}\n/**\n * Generate a binary PFID with current time.\n */\nfunction generateBinary(partition) {\n if (!isValidPartition(partition)) {\n throw new Error(`Invalid partition: ${partition}`);\n }\n const timestamp = Date.now();\n return generateBinaryWithTimestamp(partition, timestamp);\n}\n/**\n * Generate a binary PFID with a provided Unix timestamp.\n *\n * Binary layout (20 bytes):\n * - Bytes 0-5: timestamp (48 bits, big-endian)\n * - Bytes 6-9: partition (32 bits, big-endian, but only 30 bits used)\n * - Bytes 10-19: randomness (80 bits)\n */\nfunction generateBinaryWithTimestamp(partition, timestamp) {\n if (!isValidPartition(partition)) {\n throw new Error(`Invalid partition: ${partition}`);\n }\n if (!isValidTimestamp(timestamp)) {\n throw new Error(`Invalid timestamp: ${timestamp}`);\n }\n const buffer = Buffer.allocUnsafe(20);\n // Write timestamp (48 bits = 6 bytes) - big endian\n // JavaScript bitwise operators only work on 32 bits, so we need to use division for high bits\n buffer[0] = Math.floor(timestamp / 0x10000000000) & 0xff; // >> 40\n buffer[1] = Math.floor(timestamp / 0x100000000) & 0xff; // >> 32\n buffer[2] = (timestamp >> 24) & 0xff;\n buffer[3] = (timestamp >> 16) & 0xff;\n buffer[4] = (timestamp >> 8) & 0xff;\n buffer[5] = timestamp & 0xff;\n // Write partition (32 bits = 4 bytes) - big endian\n buffer.writeUInt32BE(partition, 6);\n // Write randomness (80 bits = 10 bytes)\n (0, crypto_1.randomBytes)(10).copy(buffer, 10);\n return buffer;\n}\n/**\n * Check if a string is a valid PFID.\n * Valid PFID: 32 characters, first character must be 0-7, rest must be valid Crockford Base32.\n */\nfunction isPfid(string) {\n if (typeof string !== 'string') {\n return false;\n }\n if (string.length !== 32) {\n return false;\n }\n // First character must be 0-7\n if (string[0] < '0' || string[0] > '7') {\n return false;\n }\n // All characters must be valid Crockford Base32\n const validPattern = /^[0-7][0-9abcdefghjkmnpqrstvwxyz]{31}$/;\n return validPattern.test(string);\n}\n/**\n * Encode a binary PFID to a Crockford Base32 string.\n * @throws {PfidError} If the binary is invalid\n */\nfunction encode(binary) {\n if (!Buffer.isBuffer(binary) || binary.length !== 20) {\n throw errors_1.PfidError.make('invalid_binary', binary);\n }\n try {\n const encoded = unsafeEncode(binary);\n if (isPfid(encoded)) {\n return encoded;\n }\n else {\n throw errors_1.PfidError.make('invalid_binary', binary);\n }\n }\n catch (error) {\n if (error instanceof errors_1.PfidError) {\n throw error;\n }\n throw errors_1.PfidError.make('invalid_binary', binary);\n }\n}\n/**\n * Decode a Crockford Base32 PFID string to binary.\n * @throws {PfidError} If the PFID is invalid\n */\nfunction decode(pfid) {\n if (typeof pfid !== 'string' || pfid.length !== 32) {\n throw errors_1.PfidError.make('invalid_pfid', pfid);\n }\n // First character must be 0-7\n if (pfid[0] < '0' || pfid[0] > '7') {\n throw errors_1.PfidError.make('invalid_pfid', pfid);\n }\n try {\n return unsafeDecode(pfid);\n }\n catch (error) {\n if (error instanceof errors_1.PfidError) {\n throw error;\n }\n throw errors_1.PfidError.make('invalid_pfid', pfid);\n }\n}\n/**\n * Extract partition from a PFID string.\n * @throws {PfidError} If the PFID is invalid\n */\nfunction extractPartition(pfid) {\n if (!isPfid(pfid)) {\n throw errors_1.PfidError.make('invalid_pfid', pfid);\n }\n try {\n // Extract the partition portion (characters 10-15, 6 characters = 30 bits)\n const partitionStr = pfid.substring(10, 16);\n return decodePartition(partitionStr);\n }\n catch (error) {\n if (error instanceof errors_1.PfidError) {\n throw error;\n }\n throw errors_1.PfidError.make('invalid_pfid', pfid);\n }\n}\n/**\n * Generate a random partition.\n */\nfunction generatePartition() {\n const buffer = (0, crypto_1.randomBytes)(4);\n // Clear top 2 bits to ensure partition is in valid range\n buffer[0] = buffer[0] & 0x3f; // Keep only bottom 6 bits of first byte\n // Read as 32-bit unsigned integer, but only use 30 bits\n const partition = buffer.readUInt32BE(0) & 0x3fffffff;\n return partition;\n}\n// Internal encoding/decoding functions\n/**\n * Unsafe encode - assumes valid 20-byte buffer.\n * Encodes 160 bits as 32 characters of Crockford Base32.\n *\n * Bit layout (reading from binary):\n * - t1::3, t2::5, t3::5, t4::5, t5::5, t6::5, t7::5, t8::5, t9::5, t10::5 (48 bits timestamp)\n * - 0::2 (2 bits padding)\n * - p1::5, p2::5, p3::5, p4::5, p5::5, p6::5 (30 bits partition)\n * - r1::5, r2::5, r3::5, r4::5, r5::5, r6::5, r7::5, r8::5, r9::5, r10::5, r11::5, r12::5, r13::5, r14::5, r15::5, r16::5 (80 bits randomness)\n */\nfunction unsafeEncode(binary) {\n // Helper to read bits across byte boundaries\n let bitOffset = 0;\n function readBits(count) {\n let value = 0;\n for (let i = 0; i < count; i++) {\n const byteIndex = Math.floor(bitOffset / 8);\n const bitIndex = 7 - (bitOffset % 8);\n const bit = (binary[byteIndex] >> bitIndex) & 1;\n value = (value << 1) | bit;\n bitOffset++;\n }\n return value;\n }\n // Read timestamp: 3 + 5*9 = 48 bits\n const t1 = readBits(3);\n const t2 = readBits(5);\n const t3 = readBits(5);\n const t4 = readBits(5);\n const t5 = readBits(5);\n const t6 = readBits(5);\n const t7 = readBits(5);\n const t8 = readBits(5);\n const t9 = readBits(5);\n const t10 = readBits(5);\n // Skip 2 padding bits\n readBits(2);\n // Read partition: 5*6 = 30 bits\n const p1 = readBits(5);\n const p2 = readBits(5);\n const p3 = readBits(5);\n const p4 = readBits(5);\n const p5 = readBits(5);\n const p6 = readBits(5);\n // Read randomness: 5*16 = 80 bits\n const r1 = readBits(5);\n const r2 = readBits(5);\n const r3 = readBits(5);\n const r4 = readBits(5);\n const r5 = readBits(5);\n const r6 = readBits(5);\n const r7 = readBits(5);\n const r8 = readBits(5);\n const r9 = readBits(5);\n const r10 = readBits(5);\n const r11 = readBits(5);\n const r12 = readBits(5);\n const r13 = readBits(5);\n const r14 = readBits(5);\n const r15 = readBits(5);\n const r16 = readBits(5);\n return (encodeChar(t1) + encodeChar(t2) + encodeChar(t3) + encodeChar(t4) + encodeChar(t5) +\n encodeChar(t6) + encodeChar(t7) + encodeChar(t8) + encodeChar(t9) + encodeChar(t10) +\n encodeChar(p1) + encodeChar(p2) + encodeChar(p3) + encodeChar(p4) + encodeChar(p5) + encodeChar(p6) +\n encodeChar(r1) + encodeChar(r2) + encodeChar(r3) + encodeChar(r4) + encodeChar(r5) + encodeChar(r6) +\n encodeChar(r7) + encodeChar(r8) + encodeChar(r9) + encodeChar(r10) + encodeChar(r11) + encodeChar(r12) +\n encodeChar(r13) + encodeChar(r14) + encodeChar(r15) + encodeChar(r16));\n}\n/**\n * Unsafe decode - assumes valid 32-character string.\n * Decodes 32 characters of Crockford Base32 to 160 bits (20 bytes).\n *\n * The decode process reads each character as a byte, decodes it to a 5-bit value,\n * then packs those bits back into the binary format.\n */\nfunction unsafeDecode(pfid) {\n // Decode each character to its 5-bit value (except t1 which is 3 bits)\n const t1 = decodeChar(pfid[0]); // 3 bits\n const t2 = decodeChar(pfid[1]); // 5 bits\n const t3 = decodeChar(pfid[2]); // 5 bits\n const t4 = decodeChar(pfid[3]); // 5 bits\n const t5 = decodeChar(pfid[4]); // 5 bits\n const t6 = decodeChar(pfid[5]); // 5 bits\n const t7 = decodeChar(pfid[6]); // 5 bits\n const t8 = decodeChar(pfid[7]); // 5 bits\n const t9 = decodeChar(pfid[8]); // 5 bits\n const t10 = decodeChar(pfid[9]); // 5 bits\n const p1 = decodeChar(pfid[10]); // 5 bits\n const p2 = decodeChar(pfid[11]); // 5 bits\n const p3 = decodeChar(pfid[12]); // 5 bits\n const p4 = decodeChar(pfid[13]); // 5 bits\n const p5 = decodeChar(pfid[14]); // 5 bits\n const p6 = decodeChar(pfid[15]); // 5 bits\n const r1 = decodeChar(pfid[16]); // 5 bits\n const r2 = decodeChar(pfid[17]); // 5 bits\n const r3 = decodeChar(pfid[18]); // 5 bits\n const r4 = decodeChar(pfid[19]); // 5 bits\n const r5 = decodeChar(pfid[20]); // 5 bits\n const r6 = decodeChar(pfid[21]); // 5 bits\n const r7 = decodeChar(pfid[22]); // 5 bits\n const r8 = decodeChar(pfid[23]); // 5 bits\n const r9 = decodeChar(pfid[24]); // 5 bits\n const r10 = decodeChar(pfid[25]); // 5 bits\n const r11 = decodeChar(pfid[26]); // 5 bits\n const r12 = decodeChar(pfid[27]); // 5 bits\n const r13 = decodeChar(pfid[28]); // 5 bits\n const r14 = decodeChar(pfid[29]); // 5 bits\n const r15 = decodeChar(pfid[30]); // 5 bits\n const r16 = decodeChar(pfid[31]); // 5 bits\n // Helper to write bits across byte boundaries\n const buffer = Buffer.alloc(20, 0);\n let bitOffset = 0;\n function writeBits(value, count) {\n for (let i = count - 1; i >= 0; i--) {\n const byteIndex = Math.floor(bitOffset / 8);\n const bitIndex = 7 - (bitOffset % 8);\n const bit = (value >> i) & 1;\n buffer[byteIndex] |= (bit << bitIndex);\n bitOffset++;\n }\n }\n // Write timestamp: 3 + 5*9 = 48 bits\n writeBits(t1, 3);\n writeBits(t2, 5);\n writeBits(t3, 5);\n writeBits(t4, 5);\n writeBits(t5, 5);\n writeBits(t6, 5);\n writeBits(t7, 5);\n writeBits(t8, 5);\n writeBits(t9, 5);\n writeBits(t10, 5);\n // Write 2 padding bits (0)\n writeBits(0, 2);\n // Write partition: 5*6 = 30 bits\n writeBits(p1, 5);\n writeBits(p2, 5);\n writeBits(p3, 5);\n writeBits(p4, 5);\n writeBits(p5, 5);\n writeBits(p6, 5);\n // Write randomness: 5*16 = 80 bits\n writeBits(r1, 5);\n writeBits(r2, 5);\n writeBits(r3, 5);\n writeBits(r4, 5);\n writeBits(r5, 5);\n writeBits(r6, 5);\n writeBits(r7, 5);\n writeBits(r8, 5);\n writeBits(r9, 5);\n writeBits(r10, 5);\n writeBits(r11, 5);\n writeBits(r12, 5);\n writeBits(r13, 5);\n writeBits(r14, 5);\n writeBits(r15, 5);\n writeBits(r16, 5);\n return buffer;\n}\n/**\n * Decode partition from 6-character encoded partition string.\n * @throws {PfidError} If the partition string is invalid\n */\nfunction decodePartition(partitionStr) {\n if (typeof partitionStr !== 'string' || partitionStr.length !== 6) {\n throw errors_1.PfidError.make('invalid_partition', partitionStr);\n }\n try {\n const p1 = decodeChar(partitionStr[0]);\n const p2 = decodeChar(partitionStr[1]);\n const p3 = decodeChar(partitionStr[2]);\n const p4 = decodeChar(partitionStr[3]);\n const p5 = decodeChar(partitionStr[4]);\n const p6 = decodeChar(partitionStr[5]);\n // Reconstruct the 30-bit partition value\n // The partition is stored as: 0 (2 bits) + p1 (5 bits) + p2 (5 bits) + ... + p6 (5 bits)\n const buffer = Buffer.allocUnsafe(4);\n buffer[0] = (0 << 6) | (p1 << 1) | (p2 >> 4);\n buffer[1] = ((p2 & 0x0f) << 4) | (p3 >> 1);\n buffer[2] = ((p3 & 0x01) << 7) | (p4 << 2) | (p5 >> 3);\n buffer[3] = ((p5 & 0x07) << 5) | (p6 >> 0);\n // Read as 32-bit unsigned integer, mask to 30 bits\n const partition = buffer.readUInt32BE(0) & 0x3fffffff;\n return partition;\n }\n catch (error) {\n if (error instanceof errors_1.PfidError) {\n throw error;\n }\n throw errors_1.PfidError.make('invalid_partition', partitionStr);\n }\n}\n//# sourceMappingURL=pfid.js.map",
7
- "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PfidError = exports.generatePartition = exports.extractPartition = exports.decode = exports.encode = exports.isPfid = exports.generateBinaryWithTimestamp = exports.generateBinary = exports.generateRoot = exports.generateRelated = exports.generateExample = exports.generateWithTimestamp = exports.generate = exports.zero = void 0;\nvar pfid_1 = require(\"./pfid\");\nObject.defineProperty(exports, \"zero\", { enumerable: true, get: function () { return pfid_1.zero; } });\nObject.defineProperty(exports, \"generate\", { enumerable: true, get: function () { return pfid_1.generate; } });\nObject.defineProperty(exports, \"generateWithTimestamp\", { enumerable: true, get: function () { return pfid_1.generateWithTimestamp; } });\nObject.defineProperty(exports, \"generateExample\", { enumerable: true, get: function () { return pfid_1.generateExample; } });\nObject.defineProperty(exports, \"generateRelated\", { enumerable: true, get: function () { return pfid_1.generateRelated; } });\nObject.defineProperty(exports, \"generateRoot\", { enumerable: true, get: function () { return pfid_1.generateRoot; } });\nObject.defineProperty(exports, \"generateBinary\", { enumerable: true, get: function () { return pfid_1.generateBinary; } });\nObject.defineProperty(exports, \"generateBinaryWithTimestamp\", { enumerable: true, get: function () { return pfid_1.generateBinaryWithTimestamp; } });\nObject.defineProperty(exports, \"isPfid\", { enumerable: true, get: function () { return pfid_1.isPfid; } });\nObject.defineProperty(exports, \"encode\", { enumerable: true, get: function () { return pfid_1.encode; } });\nObject.defineProperty(exports, \"decode\", { enumerable: true, get: function () { return pfid_1.decode; } });\nObject.defineProperty(exports, \"extractPartition\", { enumerable: true, get: function () { return pfid_1.extractPartition; } });\nObject.defineProperty(exports, \"generatePartition\", { enumerable: true, get: function () { return pfid_1.generatePartition; } });\nvar errors_1 = require(\"./errors\");\nObject.defineProperty(exports, \"PfidError\", { enumerable: true, get: function () { return errors_1.PfidError; } });\n//# sourceMappingURL=index.js.map",
8
- "import { extractPartition, type Partition } from '@prefactor/pfid';\nimport { Tracer } from './tracing/tracer.js';\nimport { PrefactorMiddleware } from './instrumentation/langchain/middleware.js';\nimport { StdioTransport } from './transport/stdio.js';\nimport { HttpTransport } from './transport/http.js';\nimport { createConfig, HttpTransportConfigSchema, type Config } from './config.js';\nimport { configureLogging, getLogger } from './utils/logging.js';\nimport { createMiddleware, type AgentMiddleware } from 'langchain';\n\nconst logger = getLogger('init');\n\nlet globalTracer: Tracer | null = null;\nlet globalMiddleware: AgentMiddleware | null = null;\n\n/**\n * Initialize the Prefactor SDK and return middleware for LangChain.js\n *\n * This is the main entry point for the SDK. Call this function to create a middleware\n * instance that you can pass to your LangChain.js agents.\n *\n * @param config - Optional configuration object\n * @returns PrefactorMiddleware instance to use with LangChain.js agents\n *\n * @example\n * ```typescript\n * import { init } from '@prefactor/sdk';\n * import { createAgent } from 'langchain';\n *\n * // Initialize with defaults (stdio transport)\n * const middleware = init();\n *\n * // Or configure HTTP transport\n * const middleware = init({\n * transportType: 'http',\n * httpConfig: {\n * apiUrl: 'https://api.prefactor.ai',\n * apiToken: process.env.PREFACTOR_API_TOKEN!,\n * }\n * });\n *\n * const agent = createAgent({\n * model: 'claude-sonnet-4-5-20250929',\n * tools: [myTool],\n * middleware: [middleware],\n * });\n * ```\n */\nexport function init(config?: Partial<Config>): AgentMiddleware {\n configureLogging();\n\n const finalConfig = createConfig(config);\n logger.info('Initializing Prefactor SDK', { transport: finalConfig.transportType });\n\n if (globalMiddleware !== null) {\n return globalMiddleware;\n }\n\n let transport;\n if (finalConfig.transportType === 'stdio') {\n transport = new StdioTransport();\n } else {\n if (!finalConfig.httpConfig) {\n throw new Error('HTTP transport requires httpConfig to be provided in configuration');\n }\n // Parse httpConfig to apply defaults from schema\n const httpConfig = HttpTransportConfigSchema.parse(finalConfig.httpConfig);\n transport = new HttpTransport(httpConfig);\n }\n\n // Extract partition from agent_id if provided (for HTTP transport)\n let partition: Partition | undefined;\n if (finalConfig.httpConfig?.agentId) {\n try {\n partition = extractPartition(finalConfig.httpConfig.agentId);\n logger.debug('Extracted partition from agent_id', { partition });\n } catch (error) {\n logger.warn('Failed to extract partition from agent_id, using random partition', { error });\n }\n }\n\n globalTracer = new Tracer(transport, partition);\n const prefactorMiddleware = new PrefactorMiddleware(globalTracer);\n\n const middleware = createMiddleware({\n name: 'prefactor',\n // biome-ignore lint/suspicious/noExplicitAny: LangChain middleware hooks use dynamic types\n wrapModelCall: async (request: any, handler: any) => {\n return prefactorMiddleware.wrapModelCall(request, handler);\n },\n // biome-ignore lint/suspicious/noExplicitAny: LangChain middleware hooks use dynamic types\n wrapToolCall: async (request: any, handler: any) => {\n return prefactorMiddleware.wrapToolCall(request, handler);\n },\n // biome-ignore lint/suspicious/noExplicitAny: LangChain middleware hooks use dynamic types\n beforeAgent: async (state: any) => {\n await prefactorMiddleware.beforeAgent(state);\n },\n // biome-ignore lint/suspicious/noExplicitAny: LangChain middleware hooks use dynamic types\n afterAgent: async (state: any) => {\n await prefactorMiddleware.afterAgent(state);\n },\n });\n\n globalMiddleware = middleware;\n return middleware;\n}\n\n/**\n * Get the current tracer instance.\n *\n * If no tracer has been created yet, this will call init() with default configuration.\n *\n * @returns Tracer instance\n *\n * @example\n * ```typescript\n * import { getTracer } from '@prefactor/sdk';\n *\n * const tracer = getTracer();\n * const span = tracer.startSpan({\n * name: 'custom-operation',\n * spanType: SpanType.TOOL,\n * inputs: { data: 'example' }\n * });\n * ```\n */\nexport function getTracer(): Tracer {\n if (!globalTracer) {\n init();\n }\n return globalTracer!;\n}\n\n/**\n * Shutdown the SDK and flush any pending spans.\n *\n * Call this before your application exits to ensure all spans are sent to the transport.\n * This is especially important for HTTP transport which has a queue of pending requests.\n *\n * @returns Promise that resolves when shutdown is complete\n *\n * @example\n * ```typescript\n * import { shutdown } from '@prefactor/sdk';\n *\n * process.on('SIGTERM', async () => {\n * await shutdown();\n * process.exit(0);\n * });\n * ```\n */\nexport async function shutdown(): Promise<void> {\n if (globalTracer) {\n logger.info('Shutting down Prefactor SDK');\n await globalTracer.close();\n }\n globalTracer = null;\n globalMiddleware = null;\n}\n\n// Automatic shutdown on process exit\nprocess.on('beforeExit', () => {\n shutdown().catch((error) => {\n console.error('Error during Prefactor SDK shutdown:', error);\n });\n});\n\n// Re-export types for consumer convenience\nexport type { Config, HttpTransportConfig } from './config.js';\nexport { SpanType, SpanStatus } from './tracing/span.js';\nexport type { Span, TokenUsage, ErrorInfo } from './tracing/span.js';\nexport { PrefactorMiddleware } from './instrumentation/langchain/middleware.js';\nexport { Tracer } from './tracing/tracer.js';\n",
9
- "import { generate, generatePartition, type Partition } from '@prefactor/pfid';\nimport type { Transport } from '../transport/base.js';\nimport type { Span, SpanType, TokenUsage } from './span.js';\nimport { SpanStatus } from './span.js';\n\n/**\n * Options for starting a new span\n */\nexport interface StartSpanOptions {\n /** Name of the span */\n name: string;\n\n /** Type of operation this span represents */\n spanType: SpanType;\n\n /** Input data for this operation */\n inputs: Record<string, unknown>;\n\n /** ID of the parent span (optional) */\n parentSpanId?: string;\n\n /** Trace ID to use (optional, will generate if not provided) */\n traceId?: string;\n\n /** Additional metadata (optional) */\n metadata?: Record<string, unknown>;\n\n /** Tags for categorizing the span (optional) */\n tags?: string[];\n}\n\n/**\n * Options for ending a span\n */\nexport interface EndSpanOptions {\n /** Output data from the operation */\n outputs?: Record<string, unknown>;\n\n /** Error that occurred (if any) */\n error?: Error;\n\n /** Token usage information (for LLM calls) */\n tokenUsage?: TokenUsage;\n}\n\n/**\n * Tracer manages the lifecycle of spans.\n *\n * The tracer is responsible for:\n * - Creating spans with unique IDs\n * - Managing span lifecycle (start/end)\n * - Delegating to the transport layer for span emission\n * - Handling agent instance lifecycle\n *\n * @example\n * ```typescript\n * const tracer = new Tracer(transport);\n *\n * const span = tracer.startSpan({\n * name: 'llm-call',\n * spanType: SpanType.LLM,\n * inputs: { prompt: 'Hello' }\n * });\n *\n * try {\n * // ... do work ...\n * tracer.endSpan(span, { outputs: { response: 'Hi!' } });\n * } catch (error) {\n * tracer.endSpan(span, { error });\n * }\n * ```\n */\nexport class Tracer {\n private partition: Partition;\n\n /**\n * Initialize the tracer.\n *\n * @param transport - The transport to use for emitting spans\n * @param partition - The partition for ID generation. If not provided, a random partition will be generated.\n */\n constructor(private transport: Transport, partition?: Partition) {\n this.partition = partition ?? generatePartition();\n }\n\n /**\n * Start a new span\n *\n * @param options - Span configuration options\n * @returns The created span\n */\n startSpan(options: StartSpanOptions): Span {\n const spanId = generate(this.partition);\n const traceId = options.traceId ?? generate(this.partition);\n\n const span: Span = {\n spanId,\n parentSpanId: options.parentSpanId ?? null,\n traceId,\n name: options.name,\n spanType: options.spanType,\n startTime: Date.now(),\n endTime: null,\n status: SpanStatus.RUNNING,\n inputs: options.inputs,\n outputs: null,\n tokenUsage: null,\n error: null,\n metadata: options.metadata ?? {},\n tags: options.tags ?? [],\n };\n\n // AGENT spans are emitted immediately for real-time tracking\n // They will be finished later with finishSpan()\n if (options.spanType === 'agent') {\n try {\n this.transport.emit(span);\n } catch (error) {\n console.error('Failed to emit agent span:', error);\n }\n }\n\n return span;\n }\n\n /**\n * End a span and emit it to the transport\n *\n * @param span - The span to end\n * @param options - End span options (outputs, error, token usage)\n */\n endSpan(span: Span, options?: EndSpanOptions): void {\n span.endTime = Date.now();\n span.outputs = options?.outputs ?? null;\n span.tokenUsage = options?.tokenUsage ?? null;\n\n if (options?.error) {\n span.status = SpanStatus.ERROR;\n span.error = {\n errorType: options.error.constructor.name,\n message: options.error.message,\n stacktrace: options.error.stack ?? '',\n };\n } else {\n span.status = SpanStatus.SUCCESS;\n }\n\n try {\n // AGENT spans use finishSpan API (they were already emitted on start)\n // Other span types are emitted here\n if (span.spanType === 'agent') {\n this.transport.finishSpan(span.spanId, span.endTime);\n } else {\n this.transport.emit(span);\n }\n } catch (error) {\n console.error('Failed to emit/finish span:', error);\n }\n }\n\n /**\n * Signal the start of an agent instance execution\n */\n startAgentInstance(): void {\n try {\n this.transport.startAgentInstance();\n } catch (error) {\n console.error('Failed to start agent instance:', error);\n }\n }\n\n /**\n * Signal the completion of an agent instance execution\n */\n finishAgentInstance(): void {\n try {\n this.transport.finishAgentInstance();\n } catch (error) {\n console.error('Failed to finish agent instance:', error);\n }\n }\n\n /**\n * Close the tracer and flush any pending spans\n *\n * @returns Promise that resolves when the tracer is closed\n */\n async close(): Promise<void> {\n try {\n await this.transport.close();\n } catch (error) {\n console.error('Failed to close transport:', error);\n }\n }\n}\n",
10
- "/**\n * Types of spans that can be traced\n */\nexport enum SpanType {\n AGENT = 'agent',\n LLM = 'llm',\n TOOL = 'tool',\n CHAIN = 'chain',\n RETRIEVER = 'retriever',\n}\n\n/**\n * Status of a span\n */\nexport enum SpanStatus {\n RUNNING = 'running',\n SUCCESS = 'success',\n ERROR = 'error',\n}\n\n/**\n * Token usage information for LLM calls\n */\nexport interface TokenUsage {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n}\n\n/**\n * Error information captured when a span fails\n */\nexport interface ErrorInfo {\n errorType: string;\n message: string;\n stacktrace: string;\n}\n\n/**\n * A span represents a single operation in a trace\n */\nexport interface Span {\n /** Unique identifier for this span */\n spanId: string;\n\n /** ID of the parent span, or null if this is a root span */\n parentSpanId: string | null;\n\n /** Trace ID shared by all spans in a single trace */\n traceId: string;\n\n /** Human-readable name for this span */\n name: string;\n\n /** Type of operation this span represents */\n spanType: SpanType;\n\n /** Start time in milliseconds since Unix epoch */\n startTime: number;\n\n /** End time in milliseconds since Unix epoch, or null if still running */\n endTime: number | null;\n\n /** Current status of the span */\n status: SpanStatus;\n\n /** Input data for this operation */\n inputs: Record<string, unknown>;\n\n /** Output data from this operation, or null if not completed */\n outputs: Record<string, unknown> | null;\n\n /** Token usage for LLM calls, or null if not applicable */\n tokenUsage: TokenUsage | null;\n\n /** Error information if the span failed, or null if successful */\n error: ErrorInfo | null;\n\n /** Additional metadata about this span */\n metadata: Record<string, unknown>;\n\n /** Tags for categorizing and filtering spans */\n tags: string[];\n}\n",
11
- "import { AsyncLocalStorage } from 'node:async_hooks';\nimport type { Span } from './span.js';\n\n/**\n * Storage for the current span in async context\n */\nconst spanStorage = new AsyncLocalStorage<Span>();\n\n/**\n * SpanContext manages the current span in async execution contexts.\n * This enables automatic parent-child span relationships without manual tracking.\n *\n * Uses Node.js AsyncLocalStorage which provides async-safe context propagation.\n *\n * @example\n * ```typescript\n * const span = tracer.startSpan({ name: 'parent', ... });\n *\n * await SpanContext.runAsync(span, async () => {\n * // Inside this function, getCurrent() returns the parent span\n * const parent = SpanContext.getCurrent();\n *\n * const child = tracer.startSpan({\n * name: 'child',\n * parentSpanId: parent?.spanId,\n * traceId: parent?.traceId,\n * });\n * // ...\n * });\n * ```\n */\nexport class SpanContext {\n /**\n * Get the current span from the async context\n *\n * @returns The current span, or undefined if no span is active\n */\n static getCurrent(): Span | undefined {\n return spanStorage.getStore();\n }\n\n /**\n * Run a synchronous function with the given span as the current context\n *\n * @param span - The span to set as current\n * @param fn - The function to execute\n * @returns The return value of the function\n */\n static run<T>(span: Span, fn: () => T): T {\n return spanStorage.run(span, fn);\n }\n\n /**\n * Run an asynchronous function with the given span as the current context\n *\n * @param span - The span to set as current\n * @param fn - The async function to execute\n * @returns A promise resolving to the return value of the function\n */\n static async runAsync<T>(span: Span, fn: () => Promise<T>): Promise<T> {\n return spanStorage.run(span, fn);\n }\n\n /**\n * Clear the current context (primarily for testing)\n */\n static clear(): void {\n spanStorage.disable();\n }\n}\n",
12
- "import type { TokenUsage } from '../../tracing/span.js';\n\n/**\n * Extract token usage information from LLM responses.\n *\n * Handles multiple response formats from different LLM providers and LangChain versions.\n *\n * @param response - The LLM response object\n * @returns TokenUsage object or null if no usage data found\n *\n * @example\n * ```typescript\n * const response = await model.invoke(messages);\n * const tokenUsage = extractTokenUsage(response);\n * if (tokenUsage) {\n * console.log(`Tokens used: ${tokenUsage.totalTokens}`);\n * }\n * ```\n */\n// biome-ignore lint/suspicious/noExplicitAny: LLM response structure varies by provider\nexport function extractTokenUsage(response: any): TokenUsage | null {\n try {\n // Try token_usage field (common format)\n const tokenUsage = response?.token_usage ?? response?.usage;\n if (tokenUsage) {\n return {\n promptTokens: tokenUsage.prompt_tokens ?? 0,\n completionTokens: tokenUsage.completion_tokens ?? 0,\n totalTokens: tokenUsage.total_tokens ?? 0,\n };\n }\n\n // Try usage_metadata field (LangChain format)\n const usageMetadata = response?.usage_metadata;\n if (usageMetadata) {\n return {\n promptTokens: usageMetadata.input_tokens ?? 0,\n completionTokens: usageMetadata.output_tokens ?? 0,\n totalTokens: usageMetadata.total_tokens ?? 0,\n };\n }\n\n // Try response_metadata.token_usage (nested format)\n const responseMetadata = response?.response_metadata;\n if (responseMetadata?.token_usage) {\n return {\n promptTokens: responseMetadata.token_usage.prompt_tokens ?? 0,\n completionTokens: responseMetadata.token_usage.completion_tokens ?? 0,\n totalTokens: responseMetadata.token_usage.total_tokens ?? 0,\n };\n }\n\n return null;\n } catch {\n return null;\n }\n}\n",
13
- "import type { Tracer } from '../../tracing/tracer.js';\nimport { SpanContext } from '../../tracing/context.js';\nimport { SpanType } from '../../tracing/span.js';\nimport type { Span } from '../../tracing/span.js';\nimport { extractTokenUsage } from './metadata-extractor.js';\n\n/**\n * Prefactor middleware for LangChain.js agents.\n *\n * This middleware automatically traces LLM calls, tool executions, and agent workflows.\n * It integrates with LangChain.js middleware API to provide transparent instrumentation.\n *\n * Features:\n * - Automatic parent-child span relationships via context propagation\n * - Token usage extraction for LLM calls\n * - Error tracking and debugging\n * - Zero-overhead instrumentation (graceful failure)\n *\n * @example\n * ```typescript\n * import { init } from '@prefactor/sdk';\n * import { createReactAgent } from '@langchain/langgraph/prebuilt';\n *\n * const middleware = init();\n * const agent = createReactAgent({\n * llm: model,\n * tools: [myTool],\n * middleware: [middleware],\n * });\n * ```\n */\nexport class PrefactorMiddleware {\n private rootSpan: Span | null = null;\n\n constructor(private tracer: Tracer) {}\n\n /**\n * Called before agent execution starts\n *\n * @param state - Agent state containing messages\n */\n // biome-ignore lint/suspicious/noExplicitAny: LangChain state can be any structure\n async beforeAgent(state: any): Promise<void> {\n const parentSpan = SpanContext.getCurrent();\n const messages = state?.messages ?? [];\n\n this.tracer.startAgentInstance();\n\n const span = this.tracer.startSpan({\n name: 'agent',\n spanType: SpanType.AGENT,\n inputs: { messages: messages.slice(-3).map((m: unknown) => String(m)) },\n parentSpanId: parentSpan?.spanId,\n traceId: parentSpan?.traceId,\n });\n\n this.rootSpan = span;\n }\n\n /**\n * Called after agent execution completes\n *\n * @param state - Agent state containing messages\n */\n // biome-ignore lint/suspicious/noExplicitAny: LangChain state can be any structure\n async afterAgent(state: any): Promise<void> {\n if (!this.rootSpan) {\n return;\n }\n\n const messages = state?.messages ?? [];\n this.tracer.endSpan(this.rootSpan, {\n outputs: { messages: messages.slice(-3).map((m: unknown) => String(m)) },\n });\n\n this.tracer.finishAgentInstance();\n SpanContext.clear();\n this.rootSpan = null;\n }\n\n /**\n * Wrap a model call to trace LLM invocations\n *\n * @param request - Model invocation request\n * @param handler - The actual model call function\n * @returns Promise resolving to the model response\n */\n // biome-ignore lint/suspicious/noExplicitAny: LangChain request/handler types are dynamic\n async wrapModelCall<T>(request: any, handler: (req: any) => Promise<T>): Promise<T> {\n const parentSpan = SpanContext.getCurrent();\n\n const span = this.tracer.startSpan({\n name: this.extractModelName(request),\n spanType: SpanType.LLM,\n inputs: this.extractModelInputs(request),\n parentSpanId: parentSpan?.spanId,\n traceId: parentSpan?.traceId,\n });\n\n try {\n // CRITICAL: Wrap handler in context so child operations see this span\n const response = await SpanContext.runAsync(span, async () => {\n return handler(request);\n });\n\n const outputs = this.extractModelOutputs(response);\n const tokenUsage = extractTokenUsage(response);\n\n this.tracer.endSpan(span, { outputs, tokenUsage: tokenUsage ?? undefined });\n return response;\n } catch (error) {\n this.tracer.endSpan(span, { error: error as Error });\n throw error;\n }\n }\n\n /**\n * Wrap a tool call to trace tool executions\n *\n * @param request - Tool invocation request\n * @param handler - The actual tool call function\n * @returns Promise resolving to the tool response\n */\n // biome-ignore lint/suspicious/noExplicitAny: LangChain request/handler types are dynamic\n async wrapToolCall<T>(request: any, handler: (req: any) => Promise<T>): Promise<T> {\n const parentSpan = SpanContext.getCurrent();\n\n const span = this.tracer.startSpan({\n name: this.extractToolName(request),\n spanType: SpanType.TOOL,\n inputs: this.extractToolInputs(request),\n parentSpanId: parentSpan?.spanId,\n traceId: parentSpan?.traceId,\n });\n\n try {\n // CRITICAL: Wrap handler in context so child operations see this span\n const response = await SpanContext.runAsync(span, async () => {\n return handler(request);\n });\n\n this.tracer.endSpan(span, {\n outputs: this.extractToolOutputs(response),\n });\n return response;\n } catch (error) {\n this.tracer.endSpan(span, { error: error as Error });\n throw error;\n }\n }\n\n /**\n * Extract model name from request\n */\n // biome-ignore lint/suspicious/noExplicitAny: LangChain request structure is dynamic\n private extractModelName(request: any): string {\n return request?.model ?? request?.modelName ?? 'unknown';\n }\n\n /**\n * Extract model inputs from request\n */\n // biome-ignore lint/suspicious/noExplicitAny: LangChain request structure is dynamic\n private extractModelInputs(request: any): Record<string, unknown> {\n const messages = request?.messages ?? [];\n return { messages: messages.slice(-3).map((m: unknown) => String(m)) };\n }\n\n /**\n * Extract model outputs from response\n */\n // biome-ignore lint/suspicious/noExplicitAny: LangChain response structure is dynamic\n private extractModelOutputs(response: any): Record<string, unknown> {\n const content = response?.content ?? response?.text ?? '';\n return { content: String(content) };\n }\n\n /**\n * Extract tool name from request\n */\n // biome-ignore lint/suspicious/noExplicitAny: LangChain request structure is dynamic\n private extractToolName(request: any): string {\n return request?.name ?? request?.tool ?? 'unknown';\n }\n\n /**\n * Extract tool inputs from request\n */\n // biome-ignore lint/suspicious/noExplicitAny: LangChain request structure is dynamic\n private extractToolInputs(request: any): Record<string, unknown> {\n return { input: request?.input ?? request?.args ?? {} };\n }\n\n /**\n * Extract tool outputs from response\n */\n // biome-ignore lint/suspicious/noExplicitAny: LangChain response structure is dynamic\n private extractToolOutputs(response: any): Record<string, unknown> {\n return { output: response?.output ?? response };\n }\n}\n",
14
- "/**\n * Truncate a string to a maximum length, adding an ellipsis if truncated\n *\n * @param value - The string to truncate\n * @param maxLength - Maximum length\n * @returns Truncated string\n */\nexport function truncateString(value: string, maxLength: number): string {\n if (value.length <= maxLength) {\n return value;\n }\n return value.slice(0, maxLength) + '... [truncated]';\n}\n\n/**\n * Serialize a value for JSON output, handling non-serializable types and\n * truncating long strings\n *\n * @param value - Value to serialize\n * @param maxLength - Maximum length for strings (null for no truncation)\n * @returns Serialized value\n *\n * @example\n * ```typescript\n * const serialized = serializeValue({ message: 'Hello'.repeat(1000) }, 100);\n * // Result: { message: 'HelloHelloHello... [truncated]' }\n * ```\n */\nexport function serializeValue(value: unknown, maxLength: number | null = 10000): unknown {\n // Handle primitives that don't need serialization\n if (value === null || value === undefined) {\n return value;\n }\n\n if (typeof value === 'boolean' || typeof value === 'number') {\n return value;\n }\n\n // Handle strings with truncation\n if (typeof value === 'string') {\n return maxLength !== null ? truncateString(value, maxLength) : value;\n }\n\n // Handle arrays\n if (Array.isArray(value)) {\n return value.map((item) => serializeValue(item, maxLength));\n }\n\n // Handle objects\n if (typeof value === 'object') {\n const result: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(value)) {\n result[key] = serializeValue(val, maxLength);\n }\n return result;\n }\n\n // Handle other types by converting to string\n try {\n return String(value);\n } catch {\n return `<${typeof value} object>`;\n }\n}\n",
15
- "import type { Transport } from './base.js';\nimport type { Span } from '../tracing/span.js';\nimport { serializeValue } from '../utils/serialization.js';\n\n/**\n * STDIO transport emits spans as newline-delimited JSON to stdout.\n *\n * This is the default transport and requires no configuration.\n * It's useful for local development and for piping span data to other tools.\n *\n * Features:\n * - Newline-delimited JSON output\n * - Promise-based write locking for ordering\n * - Graceful error handling\n *\n * @example\n * ```typescript\n * const transport = new StdioTransport();\n * const tracer = new Tracer(transport);\n * ```\n */\nexport class StdioTransport implements Transport {\n private closed = false;\n private writeLock = Promise.resolve();\n\n /**\n * Emit a span to stdout as JSON\n *\n * @param span - The span to emit\n */\n emit(span: Span): void {\n if (this.closed) {\n return;\n }\n\n // Queue write to maintain ordering\n this.writeLock = this.writeLock.then(async () => {\n try {\n const serialized = serializeValue(span);\n const json = JSON.stringify(serialized);\n await Bun.write(Bun.stdout, json + '\\n');\n } catch (error) {\n console.error('Failed to emit span to stdout:', error);\n }\n });\n }\n\n /**\n * No-op for stdio transport (not applicable)\n */\n finishSpan(): void {\n // No-op for stdio transport\n }\n\n /**\n * No-op for stdio transport (not applicable)\n */\n startAgentInstance(): void {\n // No-op for stdio transport\n }\n\n /**\n * No-op for stdio transport (not applicable)\n */\n finishAgentInstance(): void {\n // No-op for stdio transport\n }\n\n /**\n * Close the transport and wait for pending writes to complete\n *\n * @returns Promise that resolves when all writes are complete\n */\n async close(): Promise<void> {\n this.closed = true;\n await this.writeLock;\n }\n}\n",
16
- "/**\n * Log levels for the SDK\n */\nenum LogLevel {\n DEBUG = 0,\n INFO = 1,\n WARN = 2,\n ERROR = 3,\n}\n\n/**\n * Logger class for the Prefactor SDK\n */\nclass Logger {\n private static level: LogLevel = LogLevel.INFO;\n\n constructor(private namespace: string) {}\n\n debug(message: string, ...args: unknown[]): void {\n if (Logger.level <= LogLevel.DEBUG) {\n console.debug(`[prefactor:${this.namespace}] ${message}`, ...args);\n }\n }\n\n info(message: string, ...args: unknown[]): void {\n if (Logger.level <= LogLevel.INFO) {\n console.info(`[prefactor:${this.namespace}] ${message}`, ...args);\n }\n }\n\n warn(message: string, ...args: unknown[]): void {\n if (Logger.level <= LogLevel.WARN) {\n console.warn(`[prefactor:${this.namespace}] ${message}`, ...args);\n }\n }\n\n error(message: string, ...args: unknown[]): void {\n if (Logger.level <= LogLevel.ERROR) {\n console.error(`[prefactor:${this.namespace}] ${message}`, ...args);\n }\n }\n\n /**\n * Set the global log level\n */\n static setLevel(level: 'debug' | 'info' | 'warn' | 'error'): void {\n const levelMap = {\n debug: LogLevel.DEBUG,\n info: LogLevel.INFO,\n warn: LogLevel.WARN,\n error: LogLevel.ERROR,\n };\n Logger.level = levelMap[level];\n }\n}\n\n/**\n * Get a logger instance for a specific namespace\n *\n * @param namespace - The namespace for this logger\n * @returns Logger instance\n */\nexport function getLogger(namespace: string): Logger {\n return new Logger(namespace);\n}\n\n/**\n * Configure logging based on environment variables\n */\nexport function configureLogging(): void {\n const level = process.env.PREFACTOR_LOG_LEVEL?.toLowerCase() as\n | 'debug'\n | 'info'\n | 'warn'\n | 'error'\n | undefined;\n\n if (level) {\n Logger.setLevel(level);\n }\n}\n",
17
- "import type { Transport } from './base.js';\nimport type { HttpTransportConfig } from '../config.js';\nimport type { Span } from '../tracing/span.js';\nimport { getLogger } from '../utils/logging.js';\n\nconst logger = getLogger('http-transport');\n\n/**\n * Queue item types for background processing\n */\ninterface QueueItem {\n type: 'span' | 'finish_span' | 'start_agent' | 'finish_agent';\n data: unknown;\n}\n\n/**\n * HTTP transport sends spans to a remote API endpoint.\n *\n * Features:\n * - Queue-based async processing\n * - Exponential backoff retry logic\n * - Span ID mapping (SDK ID → backend ID)\n * - Agent instance lifecycle management\n * - Graceful shutdown with timeout\n *\n * @example\n * ```typescript\n * const transport = new HttpTransport({\n * apiUrl: 'https://api.prefactor.ai',\n * apiToken: process.env.PREFACTOR_API_TOKEN!,\n * });\n * ```\n */\nexport class HttpTransport implements Transport {\n private queue: QueueItem[] = [];\n private processing = false;\n private closed = false;\n private agentInstanceId: string | null = null;\n private spanIdMap = new Map<string, string>();\n\n constructor(private config: HttpTransportConfig) {\n this.startProcessing();\n }\n\n /**\n * Emit a span (adds to queue for async processing)\n *\n * @param span - The span to emit\n */\n emit(span: Span): void {\n if (this.closed) {\n return;\n }\n this.queue.push({ type: 'span', data: span });\n }\n\n /**\n * Finish a previously emitted span (for AGENT spans)\n *\n * @param spanId - ID of the span to finish\n * @param endTime - End time in milliseconds since Unix epoch\n */\n finishSpan(spanId: string, endTime: number): void {\n if (this.closed) {\n return;\n }\n const timestamp = new Date(endTime).toISOString();\n this.queue.push({ type: 'finish_span', data: { spanId, timestamp } });\n }\n\n /**\n * Signal the start of an agent instance execution\n */\n startAgentInstance(): void {\n if (this.closed) {\n return;\n }\n this.queue.push({ type: 'start_agent', data: null });\n }\n\n /**\n * Signal the completion of an agent instance execution\n */\n finishAgentInstance(): void {\n if (this.closed) {\n return;\n }\n this.queue.push({ type: 'finish_agent', data: null });\n }\n\n /**\n * Start background queue processing\n */\n private async startProcessing(): Promise<void> {\n this.processing = true;\n\n while (!this.closed || this.queue.length > 0) {\n if (this.queue.length === 0) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n continue;\n }\n\n const item = this.queue.shift()!;\n\n try {\n // Ensure agent is registered before processing spans\n if (!this.agentInstanceId && item.type !== 'start_agent') {\n await this.ensureAgentRegistered();\n }\n\n switch (item.type) {\n case 'span':\n await this.sendSpan(item.data as Span);\n break;\n case 'finish_span':\n await this.finishSpanHttp(item.data as { spanId: string; timestamp: string });\n break;\n case 'start_agent':\n await this.startAgentInstanceHttp();\n break;\n case 'finish_agent':\n await this.finishAgentInstanceHttp();\n break;\n }\n } catch (error) {\n logger.error('Error processing queue item:', error);\n }\n }\n\n this.processing = false;\n }\n\n /**\n * Send a span to the API\n */\n private async sendSpan(span: Span, retry = 0): Promise<void> {\n const url = `${this.config.apiUrl}/api/v1/agent_spans`;\n const payload = this.transformSpanToApiFormat(span);\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${this.config.apiToken}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n signal: AbortSignal.timeout(this.config.requestTimeout),\n });\n\n if (response.ok) {\n const data = await response.json() as { details?: { id?: string } };\n const backendSpanId = data?.details?.id;\n if (backendSpanId) {\n this.spanIdMap.set(span.spanId, backendSpanId);\n }\n return;\n }\n\n // Retry on server errors or rate limiting\n if ((response.status >= 500 || response.status === 429) && retry < this.config.maxRetries) {\n const delay = Math.min(\n this.config.initialRetryDelay * Math.pow(this.config.retryMultiplier, retry),\n this.config.maxRetryDelay\n );\n logger.debug(`Retrying span send after ${delay}ms (attempt ${retry + 1})`);\n await new Promise((resolve) => setTimeout(resolve, delay));\n return this.sendSpan(span, retry + 1);\n }\n\n logger.error(`Failed to send span: ${response.status} ${response.statusText}`);\n } catch (error) {\n logger.error('Error sending span:', error);\n\n // Retry on network errors\n if (retry < this.config.maxRetries) {\n const delay = Math.min(\n this.config.initialRetryDelay * Math.pow(this.config.retryMultiplier, retry),\n this.config.maxRetryDelay\n );\n await new Promise((resolve) => setTimeout(resolve, delay));\n return this.sendSpan(span, retry + 1);\n }\n }\n }\n\n /**\n * Transform span to backend API format with nested details/payload structure\n */\n private transformSpanToApiFormat(span: Span): Record<string, unknown> {\n const startedAt = new Date(span.startTime).toISOString();\n const finishedAt = span.endTime ? new Date(span.endTime).toISOString() : null;\n\n // Build payload with span data\n const payload: Record<string, unknown> = {\n span_id: span.spanId,\n trace_id: span.traceId,\n name: span.name,\n status: span.status,\n inputs: span.inputs,\n outputs: span.outputs,\n metadata: span.metadata,\n tags: span.tags,\n token_usage: null,\n error: null,\n };\n\n // Add optional token_usage\n if (span.tokenUsage) {\n payload.token_usage = {\n prompt_tokens: span.tokenUsage.promptTokens,\n completion_tokens: span.tokenUsage.completionTokens,\n total_tokens: span.tokenUsage.totalTokens,\n };\n }\n\n // Add optional error\n if (span.error) {\n payload.error = {\n error_type: span.error.errorType,\n message: span.error.message,\n stacktrace: span.error.stacktrace,\n };\n }\n\n // Resolve parent span ID to backend ID\n const parentSpanId = span.parentSpanId\n ? (this.spanIdMap.get(span.parentSpanId) ?? null)\n : null;\n\n return {\n details: {\n agent_instance_id: this.agentInstanceId,\n schema_name: span.spanType,\n payload,\n parent_span_id: parentSpanId,\n started_at: startedAt,\n finished_at: finishedAt,\n },\n };\n }\n\n /**\n * Get default schema (v1.0.0) with span schemas for all supported types\n */\n private getDefaultSchema(): Record<string, unknown> {\n return {\n external_identifier: '1.0.0',\n span_schemas: {\n agent: {\n type: 'object',\n properties: { type: { type: 'string', const: 'agent' } },\n },\n llm: {\n type: 'object',\n properties: { type: { type: 'string', const: 'llm' } },\n },\n tool: {\n type: 'object',\n properties: { type: { type: 'string', const: 'tool' } },\n },\n chain: {\n type: 'object',\n properties: { type: { type: 'string', const: 'chain' } },\n },\n retriever: {\n type: 'object',\n properties: { type: { type: 'string', const: 'retriever' } },\n },\n },\n };\n }\n\n /**\n * Ensure an agent instance is registered\n */\n private async ensureAgentRegistered(): Promise<void> {\n if (this.agentInstanceId) {\n return;\n }\n\n const url = `${this.config.apiUrl}/api/v1/agent_instance/register`;\n const payload: Record<string, unknown> = {};\n\n if (this.config.agentId) payload.agent_id = this.config.agentId;\n if (this.config.agentVersion) {\n payload.agent_version = {\n external_identifier: this.config.agentVersion,\n name: this.config.agentName || 'Agent',\n description: this.config.agentDescription || '',\n };\n }\n\n // Schema handling - four modes:\n // 1. skipSchema=true: No schema in payload (pre-registered on backend)\n // 2. agentSchema provided: Use full custom schema object\n // 3. agentSchemaVersion provided: Use version identifier only\n // 4. None of above: Use default v1.0.0 schema\n if (this.config.skipSchema) {\n logger.debug('Skipping schema in registration (skipSchema=true)');\n // Do not add agent_schema_version key\n } else if (this.config.agentSchema) {\n logger.debug('Using custom agent schema');\n payload.agent_schema_version = this.config.agentSchema;\n } else if (this.config.agentSchemaVersion) {\n logger.debug(`Using schema version: ${this.config.agentSchemaVersion}`);\n payload.agent_schema_version = {\n external_identifier: this.config.agentSchemaVersion,\n };\n } else {\n logger.debug('Using default hardcoded schema (v1.0.0)');\n payload.agent_schema_version = this.getDefaultSchema();\n }\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${this.config.apiToken}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n signal: AbortSignal.timeout(this.config.requestTimeout),\n });\n\n if (response.ok) {\n const data = await response.json() as { details?: { id?: string } };\n this.agentInstanceId = data?.details?.id ?? null;\n logger.debug(`Registered agent instance: ${this.agentInstanceId}`);\n } else {\n logger.error(`Failed to register agent: ${response.status} ${response.statusText}`);\n }\n } catch (error) {\n logger.error('Error registering agent:', error);\n }\n }\n\n /**\n * Start agent instance execution\n */\n private async startAgentInstanceHttp(): Promise<void> {\n await this.ensureAgentRegistered();\n\n if (!this.agentInstanceId) {\n logger.error('Cannot start agent instance: not registered');\n return;\n }\n\n const url = `${this.config.apiUrl}/api/v1/agent_instance/${this.agentInstanceId}/start`;\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${this.config.apiToken}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({}),\n signal: AbortSignal.timeout(this.config.requestTimeout),\n });\n\n if (!response.ok) {\n logger.error(`Failed to start agent instance: ${response.status} ${response.statusText}`);\n }\n } catch (error) {\n logger.error('Error starting agent instance:', error);\n }\n }\n\n /**\n * Finish agent instance execution\n */\n private async finishAgentInstanceHttp(): Promise<void> {\n if (!this.agentInstanceId) {\n logger.error('Cannot finish agent instance: not registered');\n return;\n }\n\n const url = `${this.config.apiUrl}/api/v1/agent_instance/${this.agentInstanceId}/finish`;\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${this.config.apiToken}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({}),\n signal: AbortSignal.timeout(this.config.requestTimeout),\n });\n\n if (!response.ok) {\n logger.error(`Failed to finish agent instance: ${response.status} ${response.statusText}`);\n }\n } catch (error) {\n logger.error('Error finishing agent instance:', error);\n }\n }\n\n /**\n * Finish a span via HTTP\n */\n private async finishSpanHttp(data: { spanId: string; timestamp: string }): Promise<void> {\n const backendSpanId = this.spanIdMap.get(data.spanId);\n if (!backendSpanId) {\n logger.warn(`Cannot finish span ${data.spanId}: backend ID not found`);\n return;\n }\n\n const url = `${this.config.apiUrl}/api/v1/agent_spans/${backendSpanId}/finish`;\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${this.config.apiToken}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ timestamp: data.timestamp }),\n signal: AbortSignal.timeout(this.config.requestTimeout),\n });\n\n if (!response.ok) {\n logger.error(`Failed to finish span: ${response.status} ${response.statusText}`);\n }\n } catch (error) {\n logger.error('Error finishing span:', error);\n }\n }\n\n /**\n * Close the transport and wait for queue to drain\n *\n * @returns Promise that resolves when transport is closed\n */\n async close(): Promise<void> {\n this.closed = true;\n\n // Wait for queue to drain (with timeout)\n const timeout = 10000;\n const start = Date.now();\n while (this.processing && Date.now() - start < timeout) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n\n if (this.processing) {\n logger.warn('Transport closed with pending queue items');\n }\n }\n}\n",
18
- "import { z } from 'zod';\n\n/**\n * Configuration schema for HTTP transport\n */\nexport const HttpTransportConfigSchema = z.object({\n /** API endpoint URL */\n apiUrl: z.string().url(),\n\n /** Authentication token */\n apiToken: z.string().min(1),\n\n /** Optional agent identifier */\n agentId: z.string().optional(),\n\n /** Optional agent version */\n agentVersion: z.string().optional(),\n\n /** Optional agent name */\n agentName: z.string().optional(),\n\n /** Optional agent description */\n agentDescription: z.string().optional(),\n\n /** Optional agent schema for validation (full schema object) */\n agentSchema: z.record(z.unknown()).optional(),\n\n /** Optional agent schema version identifier (string) */\n agentSchemaVersion: z.string().optional(),\n\n /** Skip schema validation */\n skipSchema: z.boolean().default(false),\n\n /** Request timeout in milliseconds */\n requestTimeout: z.number().positive().default(30000),\n\n /** Connection timeout in milliseconds */\n connectTimeout: z.number().positive().default(10000),\n\n /** Maximum number of retry attempts */\n maxRetries: z.number().int().nonnegative().default(3),\n\n /** Initial delay between retries in milliseconds */\n initialRetryDelay: z.number().positive().default(1000),\n\n /** Maximum delay between retries in milliseconds */\n maxRetryDelay: z.number().positive().default(60000),\n\n /** Multiplier for exponential backoff */\n retryMultiplier: z.number().positive().default(2.0),\n});\n\nexport type HttpTransportConfig = z.infer<typeof HttpTransportConfigSchema>;\n\n/**\n * Partial HTTP config schema for user input (before defaults are applied)\n */\nexport const PartialHttpConfigSchema = z.object({\n apiUrl: z.string().url(),\n apiToken: z.string().min(1),\n agentId: z.string().optional(),\n agentVersion: z.string().optional(),\n agentName: z.string().optional(),\n agentDescription: z.string().optional(),\n agentSchema: z.record(z.unknown()).optional(),\n agentSchemaVersion: z.string().optional(),\n skipSchema: z.boolean().optional(),\n requestTimeout: z.number().positive().optional(),\n connectTimeout: z.number().positive().optional(),\n maxRetries: z.number().int().nonnegative().optional(),\n initialRetryDelay: z.number().positive().optional(),\n maxRetryDelay: z.number().positive().optional(),\n retryMultiplier: z.number().positive().optional(),\n});\n\nexport type PartialHttpConfig = z.infer<typeof PartialHttpConfigSchema>;\n\n/**\n * Main SDK configuration schema\n */\nexport const ConfigSchema = z.object({\n /** Transport type to use for span emission */\n transportType: z.enum(['stdio', 'http']).default('stdio'),\n\n /** Sampling rate (0.0 to 1.0) */\n sampleRate: z.number().min(0).max(1).default(1.0),\n\n /** Whether to capture span inputs */\n captureInputs: z.boolean().default(true),\n\n /** Whether to capture span outputs */\n captureOutputs: z.boolean().default(true),\n\n /** Maximum length for input strings */\n maxInputLength: z.number().int().positive().default(10000),\n\n /** Maximum length for output strings */\n maxOutputLength: z.number().int().positive().default(10000),\n\n /** HTTP transport configuration (required if transportType is 'http') */\n httpConfig: PartialHttpConfigSchema.optional(),\n});\n\nexport type Config = z.infer<typeof ConfigSchema>;\n\n/**\n * Creates a validated configuration object by merging provided options with\n * environment variables and defaults.\n *\n * @param options - Partial configuration options\n * @returns Validated configuration object\n * @throws {z.ZodError} If configuration is invalid\n *\n * @example\n * ```typescript\n * const config = createConfig({\n * transportType: 'http',\n * httpConfig: {\n * apiUrl: 'https://api.prefactor.ai',\n * apiToken: process.env.PREFACTOR_API_TOKEN!,\n * }\n * });\n * ```\n */\nexport function createConfig(options?: Partial<Config>): Config {\n const config = {\n transportType:\n options?.transportType ??\n (process.env.PREFACTOR_TRANSPORT as 'stdio' | 'http' | undefined) ??\n 'stdio',\n sampleRate: options?.sampleRate ?? parseFloat(process.env.PREFACTOR_SAMPLE_RATE ?? '1.0'),\n captureInputs: options?.captureInputs ?? process.env.PREFACTOR_CAPTURE_INPUTS !== 'false',\n captureOutputs: options?.captureOutputs ?? process.env.PREFACTOR_CAPTURE_OUTPUTS !== 'false',\n maxInputLength:\n options?.maxInputLength ?? parseInt(process.env.PREFACTOR_MAX_INPUT_LENGTH ?? '10000', 10),\n maxOutputLength:\n options?.maxOutputLength ?? parseInt(process.env.PREFACTOR_MAX_OUTPUT_LENGTH ?? '10000', 10),\n httpConfig: options?.httpConfig,\n };\n\n // Validate and return\n return ConfigSchema.parse(config);\n}\n"
5
+ "// Re-export everything from both packages for backwards compatibility\nexport * from '@prefactor/core';\nexport * from '@prefactor/langchain';\n"
19
6
  ],
20
- "mappings": "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",
21
- "debugId": "B87F59F21724570864756E2164756E21",
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;AACA;",
8
+ "debugId": "AAE78A21E19036CC64756E2164756E21",
22
9
  "names": []
23
10
  }
package/dist/index.d.ts CHANGED
@@ -1,82 +1,3 @@
1
- import { Tracer } from './tracing/tracer.js';
2
- import { type Config } from './config.js';
3
- import { type AgentMiddleware } from 'langchain';
4
- /**
5
- * Initialize the Prefactor SDK and return middleware for LangChain.js
6
- *
7
- * This is the main entry point for the SDK. Call this function to create a middleware
8
- * instance that you can pass to your LangChain.js agents.
9
- *
10
- * @param config - Optional configuration object
11
- * @returns PrefactorMiddleware instance to use with LangChain.js agents
12
- *
13
- * @example
14
- * ```typescript
15
- * import { init } from '@prefactor/sdk';
16
- * import { createAgent } from 'langchain';
17
- *
18
- * // Initialize with defaults (stdio transport)
19
- * const middleware = init();
20
- *
21
- * // Or configure HTTP transport
22
- * const middleware = init({
23
- * transportType: 'http',
24
- * httpConfig: {
25
- * apiUrl: 'https://api.prefactor.ai',
26
- * apiToken: process.env.PREFACTOR_API_TOKEN!,
27
- * }
28
- * });
29
- *
30
- * const agent = createAgent({
31
- * model: 'claude-sonnet-4-5-20250929',
32
- * tools: [myTool],
33
- * middleware: [middleware],
34
- * });
35
- * ```
36
- */
37
- export declare function init(config?: Partial<Config>): AgentMiddleware;
38
- /**
39
- * Get the current tracer instance.
40
- *
41
- * If no tracer has been created yet, this will call init() with default configuration.
42
- *
43
- * @returns Tracer instance
44
- *
45
- * @example
46
- * ```typescript
47
- * import { getTracer } from '@prefactor/sdk';
48
- *
49
- * const tracer = getTracer();
50
- * const span = tracer.startSpan({
51
- * name: 'custom-operation',
52
- * spanType: SpanType.TOOL,
53
- * inputs: { data: 'example' }
54
- * });
55
- * ```
56
- */
57
- export declare function getTracer(): Tracer;
58
- /**
59
- * Shutdown the SDK and flush any pending spans.
60
- *
61
- * Call this before your application exits to ensure all spans are sent to the transport.
62
- * This is especially important for HTTP transport which has a queue of pending requests.
63
- *
64
- * @returns Promise that resolves when shutdown is complete
65
- *
66
- * @example
67
- * ```typescript
68
- * import { shutdown } from '@prefactor/sdk';
69
- *
70
- * process.on('SIGTERM', async () => {
71
- * await shutdown();
72
- * process.exit(0);
73
- * });
74
- * ```
75
- */
76
- export declare function shutdown(): Promise<void>;
77
- export type { Config, HttpTransportConfig } from './config.js';
78
- export { SpanType, SpanStatus } from './tracing/span.js';
79
- export type { Span, TokenUsage, ErrorInfo } from './tracing/span.js';
80
- export { PrefactorMiddleware } from './instrumentation/langchain/middleware.js';
81
- export { Tracer } from './tracing/tracer.js';
1
+ export * from '@prefactor/core';
2
+ export * from '@prefactor/langchain';
82
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAI7C,OAAO,EAA2C,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAEnF,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AAOnE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,eAAe,CA0D9D;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAKlC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAO9C;AAUD,YAAY,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACzD,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC"}