@artinet/sdk 0.5.17 → 0.6.0-preview.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 (316) hide show
  1. package/README.md +51 -557
  2. package/dist/browser/browser.d.ts +9 -0
  3. package/dist/browser/browser.js +10 -0
  4. package/dist/browser/client/a2a-client.d.ts +127 -0
  5. package/dist/browser/client/a2a-client.js +233 -0
  6. package/dist/browser/client/index.d.ts +1 -0
  7. package/dist/browser/client/index.js +1 -0
  8. package/dist/browser/config/index.d.ts +158 -0
  9. package/dist/browser/config/index.js +155 -0
  10. package/dist/browser/config/observability.d.ts +119 -0
  11. package/dist/browser/config/observability.js +35 -0
  12. package/dist/browser/services/a2a/helpers/message-builder.d.ts +17 -0
  13. package/dist/browser/services/a2a/helpers/message-builder.js +66 -0
  14. package/dist/browser/transport/rpc/parser.d.ts +15 -0
  15. package/dist/browser/transport/rpc/parser.js +48 -0
  16. package/dist/browser/transport/rpc/rpc-client.d.ts +80 -0
  17. package/dist/browser/transport/rpc/rpc-client.js +189 -0
  18. package/dist/browser/transport/streaming/event-stream.d.ts +25 -0
  19. package/dist/browser/transport/streaming/event-stream.js +100 -0
  20. package/dist/browser/types/a2a/a2a.d.ts +378 -0
  21. package/dist/browser/types/a2a/a2a.js +14 -0
  22. package/dist/browser/types/a2a/builder.d.ts +43 -0
  23. package/dist/browser/types/a2a/index.d.ts +3 -0
  24. package/dist/browser/types/a2a/index.js +2 -0
  25. package/dist/{types/interfaces → browser/types}/client.d.ts +25 -27
  26. package/dist/browser/types/core/core.d.ts +31 -0
  27. package/dist/browser/types/core/index.d.ts +1 -0
  28. package/dist/browser/types/core/index.js +1 -0
  29. package/dist/{types/interfaces/services → browser/types}/index.d.ts +3 -0
  30. package/dist/{types/interfaces/services → browser/types}/index.js +3 -0
  31. package/dist/browser/types/mcp/index.d.ts +1 -0
  32. package/dist/browser/types/mcp/index.js +1 -0
  33. package/dist/{types/interfaces/services/mcp/service.d.ts → browser/types/mcp/mcp.d.ts} +4 -3
  34. package/dist/browser/types/mcp/mcp.js +5 -0
  35. package/dist/browser/types/storage.d.ts +21 -0
  36. package/dist/browser/types/utils/index.d.ts +1 -0
  37. package/dist/browser/types/utils/index.js +1 -0
  38. package/dist/browser/types/utils/transform.d.ts +64 -0
  39. package/dist/browser/types/utils/transform.js +35 -0
  40. package/dist/browser/utils/common/constants.d.ts +11 -0
  41. package/dist/browser/utils/common/constants.js +38 -0
  42. package/dist/browser/utils/common/errors.d.ts +24 -0
  43. package/dist/browser/utils/common/errors.js +42 -0
  44. package/dist/browser/utils/common/utils.d.ts +32 -0
  45. package/dist/browser/utils/common/utils.js +43 -0
  46. package/dist/client/a2a-client.d.ts +21 -19
  47. package/dist/client/a2a-client.js +30 -9
  48. package/dist/config/default.d.ts +50 -0
  49. package/dist/config/default.js +62 -0
  50. package/dist/config/index.d.ts +158 -0
  51. package/dist/config/index.js +155 -0
  52. package/dist/config/observability.d.ts +119 -0
  53. package/dist/config/observability.js +35 -0
  54. package/dist/extensions/otel.d.ts +98 -0
  55. package/dist/extensions/otel.js +190 -0
  56. package/dist/extensions/pino.d.ts +44 -0
  57. package/dist/extensions/pino.js +107 -0
  58. package/dist/extensions/winston.d.ts +47 -0
  59. package/dist/extensions/winston.js +114 -0
  60. package/dist/index.d.ts +2 -0
  61. package/dist/index.js +2 -0
  62. package/dist/server/express/errors.js +3 -3
  63. package/dist/server/express/middeware.d.ts +2 -2
  64. package/dist/server/express/middeware.js +36 -9
  65. package/dist/server/express/server.d.ts +9 -55
  66. package/dist/server/express/server.js +51 -32
  67. package/dist/services/a2a/execute.d.ts +6 -0
  68. package/dist/services/a2a/execute.js +25 -0
  69. package/dist/services/a2a/factory/builder.d.ts +21 -80
  70. package/dist/services/a2a/factory/builder.js +23 -13
  71. package/dist/services/a2a/factory/context.d.ts +15 -128
  72. package/dist/services/a2a/factory/context.js +31 -136
  73. package/dist/services/a2a/factory/handler.d.ts +6 -0
  74. package/dist/services/a2a/factory/{method.js → handler.js} +2 -2
  75. package/dist/services/a2a/factory/index.d.ts +1 -2
  76. package/dist/services/a2a/factory/index.js +1 -2
  77. package/dist/services/a2a/factory/service.d.ts +20 -7
  78. package/dist/services/a2a/factory/service.js +4 -4
  79. package/dist/services/a2a/factory/state-machine.d.ts +11 -0
  80. package/dist/services/a2a/factory/state-machine.js +66 -0
  81. package/dist/services/a2a/{state/update → handlers}/artifact.d.ts +4 -4
  82. package/dist/services/a2a/handlers/cancel-task.d.ts +11 -0
  83. package/dist/services/a2a/handlers/cancel-task.js +33 -0
  84. package/dist/services/a2a/handlers/get-task.d.ts +11 -0
  85. package/dist/services/a2a/handlers/get-task.js +13 -0
  86. package/dist/services/a2a/handlers/resubscribe-task.d.ts +11 -0
  87. package/dist/services/a2a/handlers/resubscribe-task.js +56 -0
  88. package/dist/services/a2a/handlers/send-message.d.ts +11 -0
  89. package/dist/services/a2a/handlers/send-message.js +35 -0
  90. package/dist/services/a2a/handlers/stream-message.d.ts +11 -0
  91. package/dist/services/a2a/handlers/stream-message.js +19 -0
  92. package/dist/services/a2a/handlers/update.d.ts +17 -0
  93. package/dist/services/a2a/handlers/update.js +114 -0
  94. package/dist/services/a2a/helpers/agentcard-builder.d.ts +9 -5
  95. package/dist/services/a2a/helpers/agentcard-builder.js +5 -0
  96. package/dist/services/a2a/helpers/content.d.ts +2 -2
  97. package/dist/services/a2a/helpers/content.js +4 -0
  98. package/dist/services/a2a/helpers/history.d.ts +6 -0
  99. package/dist/services/a2a/helpers/history.js +7 -0
  100. package/dist/services/a2a/helpers/index.d.ts +3 -1
  101. package/dist/services/a2a/helpers/index.js +3 -1
  102. package/dist/services/a2a/helpers/message-builder.d.ts +13 -8
  103. package/dist/services/a2a/helpers/message-builder.js +5 -0
  104. package/dist/services/a2a/helpers/part.d.ts +9 -9
  105. package/dist/services/a2a/helpers/references.d.ts +6 -0
  106. package/dist/services/a2a/helpers/references.js +22 -0
  107. package/dist/services/a2a/index.d.ts +9 -5
  108. package/dist/services/a2a/index.js +8 -5
  109. package/dist/services/a2a/managers.d.ts +23 -0
  110. package/dist/services/a2a/managers.js +95 -0
  111. package/dist/services/a2a/messenger.d.ts +35 -0
  112. package/dist/services/{core/managers/command.js → a2a/messenger.js} +27 -31
  113. package/dist/services/a2a/service.d.ts +41 -371
  114. package/dist/services/a2a/service.js +239 -70
  115. package/dist/services/a2a/state-machine.d.ts +18 -0
  116. package/dist/services/a2a/state-machine.js +76 -0
  117. package/dist/services/a2a/streams.d.ts +22 -0
  118. package/dist/services/a2a/streams.js +98 -0
  119. package/dist/services/core/index.d.ts +1 -2
  120. package/dist/services/core/index.js +1 -2
  121. package/dist/services/core/manager.d.ts +15 -0
  122. package/dist/services/core/manager.js +42 -0
  123. package/dist/services/mcp/service.d.ts +11 -15
  124. package/dist/services/mcp/service.js +16 -16
  125. package/dist/transport/index.d.ts +0 -1
  126. package/dist/transport/index.js +1 -1
  127. package/dist/transport/rpc/parser.d.ts +2 -2
  128. package/dist/transport/rpc/parser.js +7 -7
  129. package/dist/transport/rpc/rpc-client.d.ts +5 -5
  130. package/dist/transport/rpc/rpc-client.js +7 -7
  131. package/dist/transport/streaming/event-stream.d.ts +3 -3
  132. package/dist/transport/streaming/event-stream.js +11 -10
  133. package/dist/transport/trpc/a2a/factory/router.d.ts +479 -871
  134. package/dist/transport/trpc/a2a/factory/router.js +2 -2
  135. package/dist/transport/trpc/a2a/routes/info.d.ts +108 -8
  136. package/dist/transport/trpc/a2a/routes/info.js +6 -2
  137. package/dist/transport/trpc/a2a/routes/message/route.d.ts +113 -162
  138. package/dist/transport/trpc/a2a/routes/message/route.js +7 -13
  139. package/dist/transport/trpc/a2a/routes/tasks/route.d.ts +114 -212
  140. package/dist/transport/trpc/a2a/routes/tasks/route.js +16 -19
  141. package/dist/transport/trpc/a2a/trpc.d.ts +9 -253
  142. package/dist/types/a2a/a2a.d.ts +378 -0
  143. package/dist/types/a2a/a2a.js +14 -0
  144. package/dist/types/a2a/builder.d.ts +43 -0
  145. package/dist/types/a2a/index.d.ts +3 -0
  146. package/dist/types/a2a/index.js +2 -0
  147. package/dist/types/client.d.ts +133 -0
  148. package/dist/types/core/core.d.ts +31 -0
  149. package/dist/types/core/core.js +1 -0
  150. package/dist/types/core/index.d.ts +1 -0
  151. package/dist/types/core/index.js +1 -0
  152. package/dist/types/index.d.ts +6 -3
  153. package/dist/types/index.js +6 -3
  154. package/dist/types/mcp/index.d.ts +1 -0
  155. package/dist/types/mcp/index.js +1 -0
  156. package/dist/types/mcp/mcp.d.ts +50 -0
  157. package/dist/types/mcp/mcp.js +5 -0
  158. package/dist/types/protocol.d.ts +33 -0
  159. package/dist/types/protocol.js +34 -0
  160. package/dist/types/storage.d.ts +21 -0
  161. package/dist/utils/common/constants.d.ts +7 -7
  162. package/dist/utils/common/constants.js +10 -10
  163. package/dist/utils/common/errors.d.ts +18 -17
  164. package/dist/utils/common/errors.js +14 -13
  165. package/dist/utils/common/parse.d.ts +7 -0
  166. package/dist/utils/common/parse.js +14 -0
  167. package/dist/utils/common/schema-validation.d.ts +2 -0
  168. package/dist/utils/common/schema-validation.js +12 -0
  169. package/dist/utils/common/utils.d.ts +23 -0
  170. package/dist/utils/common/utils.js +32 -0
  171. package/dist/utils/common/zAsyncIterable-v3.d.ts +1 -1
  172. package/dist/utils/common/zAsyncIterable-v3.js +2 -1
  173. package/dist/utils/index.d.ts +3 -3
  174. package/dist/utils/index.js +3 -3
  175. package/dist/utils/storage/file.d.ts +8 -17
  176. package/dist/utils/storage/file.js +44 -73
  177. package/package.json +86 -23
  178. package/dist/services/a2a/factory/event.d.ts +0 -58
  179. package/dist/services/a2a/factory/event.js +0 -177
  180. package/dist/services/a2a/factory/method.d.ts +0 -6
  181. package/dist/services/a2a/managers/cancellation.d.ts +0 -11
  182. package/dist/services/a2a/managers/cancellation.js +0 -16
  183. package/dist/services/a2a/managers/connection.d.ts +0 -11
  184. package/dist/services/a2a/managers/connection.js +0 -16
  185. package/dist/services/a2a/managers/context.d.ts +0 -11
  186. package/dist/services/a2a/managers/context.js +0 -16
  187. package/dist/services/a2a/managers/index.d.ts +0 -5
  188. package/dist/services/a2a/managers/index.js +0 -5
  189. package/dist/services/a2a/managers/task.d.ts +0 -11
  190. package/dist/services/a2a/managers/task.js +0 -16
  191. package/dist/services/a2a/methods/cancel-task.d.ts +0 -7
  192. package/dist/services/a2a/methods/cancel-task.js +0 -43
  193. package/dist/services/a2a/methods/get-task.d.ts +0 -112
  194. package/dist/services/a2a/methods/get-task.js +0 -14
  195. package/dist/services/a2a/methods/resubscribe-task.d.ts +0 -7
  196. package/dist/services/a2a/methods/resubscribe-task.js +0 -80
  197. package/dist/services/a2a/methods/send-message.d.ts +0 -7
  198. package/dist/services/a2a/methods/send-message.js +0 -19
  199. package/dist/services/a2a/methods/stream-message.d.ts +0 -8
  200. package/dist/services/a2a/methods/stream-message.js +0 -21
  201. package/dist/services/a2a/state/index.d.ts +0 -3
  202. package/dist/services/a2a/state/index.js +0 -3
  203. package/dist/services/a2a/state/load.d.ts +0 -14
  204. package/dist/services/a2a/state/load.js +0 -71
  205. package/dist/services/a2a/state/process.d.ts +0 -7
  206. package/dist/services/a2a/state/process.js +0 -13
  207. package/dist/services/a2a/state/update/index.d.ts +0 -2
  208. package/dist/services/a2a/state/update/index.js +0 -2
  209. package/dist/services/a2a/state/update/update.d.ts +0 -23
  210. package/dist/services/a2a/state/update/update.js +0 -123
  211. package/dist/services/core/execution/execute.d.ts +0 -6
  212. package/dist/services/core/execution/execute.js +0 -25
  213. package/dist/services/core/execution/index.d.ts +0 -1
  214. package/dist/services/core/execution/index.js +0 -1
  215. package/dist/services/core/managers/command.d.ts +0 -39
  216. package/dist/services/core/managers/event.d.ts +0 -18
  217. package/dist/services/core/managers/event.js +0 -56
  218. package/dist/services/core/managers/index.d.ts +0 -3
  219. package/dist/services/core/managers/index.js +0 -3
  220. package/dist/services/core/managers/stream.d.ts +0 -20
  221. package/dist/services/core/managers/stream.js +0 -77
  222. package/dist/types/ext.d.ts +0 -13
  223. package/dist/types/ext.js +0 -10
  224. package/dist/types/interfaces/index.d.ts +0 -3
  225. package/dist/types/interfaces/index.js +0 -3
  226. package/dist/types/interfaces/services/a2a/builder.d.ts +0 -37
  227. package/dist/types/interfaces/services/a2a/context.d.ts +0 -162
  228. package/dist/types/interfaces/services/a2a/engine.d.ts +0 -7
  229. package/dist/types/interfaces/services/a2a/index.d.ts +0 -5
  230. package/dist/types/interfaces/services/a2a/index.js +0 -5
  231. package/dist/types/interfaces/services/a2a/legacy.d.ts +0 -93
  232. package/dist/types/interfaces/services/a2a/service.d.ts +0 -409
  233. package/dist/types/interfaces/services/a2a/service.js +0 -5
  234. package/dist/types/interfaces/services/core/context/command.d.ts +0 -25
  235. package/dist/types/interfaces/services/core/context/command.js +0 -5
  236. package/dist/types/interfaces/services/core/context/context.d.ts +0 -207
  237. package/dist/types/interfaces/services/core/context/context.js +0 -5
  238. package/dist/types/interfaces/services/core/context/index.d.ts +0 -3
  239. package/dist/types/interfaces/services/core/context/index.js +0 -3
  240. package/dist/types/interfaces/services/core/context/types.d.ts +0 -11
  241. package/dist/types/interfaces/services/core/context/types.js +0 -5
  242. package/dist/types/interfaces/services/core/execution/engine.d.ts +0 -106
  243. package/dist/types/interfaces/services/core/execution/engine.js +0 -5
  244. package/dist/types/interfaces/services/core/execution/environment.d.ts +0 -11
  245. package/dist/types/interfaces/services/core/execution/environment.js +0 -5
  246. package/dist/types/interfaces/services/core/execution/execute.d.ts +0 -7
  247. package/dist/types/interfaces/services/core/execution/execute.js +0 -5
  248. package/dist/types/interfaces/services/core/execution/index.d.ts +0 -3
  249. package/dist/types/interfaces/services/core/execution/index.js +0 -3
  250. package/dist/types/interfaces/services/core/index.d.ts +0 -4
  251. package/dist/types/interfaces/services/core/index.js +0 -4
  252. package/dist/types/interfaces/services/core/managers/cancellation.d.ts +0 -9
  253. package/dist/types/interfaces/services/core/managers/cancellation.js +0 -5
  254. package/dist/types/interfaces/services/core/managers/connection.d.ts +0 -9
  255. package/dist/types/interfaces/services/core/managers/connection.js +0 -5
  256. package/dist/types/interfaces/services/core/managers/context.d.ts +0 -17
  257. package/dist/types/interfaces/services/core/managers/context.js +0 -5
  258. package/dist/types/interfaces/services/core/managers/event.d.ts +0 -328
  259. package/dist/types/interfaces/services/core/managers/event.js +0 -5
  260. package/dist/types/interfaces/services/core/managers/index.d.ts +0 -6
  261. package/dist/types/interfaces/services/core/managers/index.js +0 -6
  262. package/dist/types/interfaces/services/core/managers/stream.d.ts +0 -217
  263. package/dist/types/interfaces/services/core/managers/stream.js +0 -5
  264. package/dist/types/interfaces/services/core/managers/task.d.ts +0 -9
  265. package/dist/types/interfaces/services/core/service.d.ts +0 -115
  266. package/dist/types/interfaces/services/core/service.js +0 -5
  267. package/dist/types/interfaces/services/mcp/index.d.ts +0 -1
  268. package/dist/types/interfaces/services/mcp/index.js +0 -1
  269. package/dist/types/interfaces/services/mcp/service.js +0 -5
  270. package/dist/types/interfaces/storage.d.ts +0 -8
  271. package/dist/types/schemas/a2a/agent.d.ts +0 -2583
  272. package/dist/types/schemas/a2a/agent.js +0 -323
  273. package/dist/types/schemas/a2a/auth.d.ts +0 -908
  274. package/dist/types/schemas/a2a/auth.js +0 -283
  275. package/dist/types/schemas/a2a/error.d.ts +0 -396
  276. package/dist/types/schemas/a2a/error.js +0 -163
  277. package/dist/types/schemas/a2a/index.d.ts +0 -11
  278. package/dist/types/schemas/a2a/index.js +0 -11
  279. package/dist/types/schemas/a2a/kind.d.ts +0 -11
  280. package/dist/types/schemas/a2a/kind.js +0 -20
  281. package/dist/types/schemas/a2a/message.d.ts +0 -10343
  282. package/dist/types/schemas/a2a/message.js +0 -130
  283. package/dist/types/schemas/a2a/notification.d.ts +0 -1517
  284. package/dist/types/schemas/a2a/notification.js +0 -203
  285. package/dist/types/schemas/a2a/parameters.d.ts +0 -956
  286. package/dist/types/schemas/a2a/parameters.js +0 -241
  287. package/dist/types/schemas/a2a/protocol.d.ts +0 -14363
  288. package/dist/types/schemas/a2a/protocol.js +0 -59
  289. package/dist/types/schemas/a2a/rpc.d.ts +0 -182
  290. package/dist/types/schemas/a2a/rpc.js +0 -126
  291. package/dist/types/schemas/a2a/task.d.ts +0 -5886
  292. package/dist/types/schemas/a2a/task.js +0 -134
  293. package/dist/types/schemas/a2a/transport.d.ts +0 -31
  294. package/dist/types/schemas/a2a/transport.js +0 -28
  295. package/dist/types/schemas/index.d.ts +0 -1
  296. package/dist/types/schemas/index.js +0 -1
  297. package/dist/utils/logging/index.d.ts +0 -2
  298. package/dist/utils/logging/index.js +0 -2
  299. package/dist/utils/logging/log.d.ts +0 -33
  300. package/dist/utils/logging/log.js +0 -75
  301. package/dist/utils/logging/logger.d.ts +0 -18
  302. package/dist/utils/logging/logger.js +0 -18
  303. package/dist/utils/storage/memory.d.ts +0 -25
  304. package/dist/utils/storage/memory.js +0 -47
  305. /package/dist/{types/interfaces/services → browser/types}/a2a/builder.js +0 -0
  306. /package/dist/{types/interfaces → browser/types}/client.js +0 -0
  307. /package/dist/{types/interfaces/services/core/managers/task.js → browser/types/core/core.js} +0 -0
  308. /package/dist/{types/interfaces/services → browser/types}/protocol.d.ts +0 -0
  309. /package/dist/{types/interfaces/services → browser/types}/protocol.js +0 -0
  310. /package/dist/{types/interfaces → browser/types}/storage.js +0 -0
  311. /package/dist/services/a2a/{state/update → handlers}/artifact.js +0 -0
  312. /package/dist/services/a2a/{methods → handlers}/index.d.ts +0 -0
  313. /package/dist/services/a2a/{methods → handlers}/index.js +0 -0
  314. /package/dist/types/{interfaces/services/a2a/context.js → a2a/builder.js} +0 -0
  315. /package/dist/types/{interfaces/services/a2a/engine.js → client.js} +0 -0
  316. /package/dist/types/{interfaces/services/a2a/legacy.js → storage.js} +0 -0
@@ -0,0 +1,190 @@
1
+ /**
2
+ * @fileoverview OpenTelemetry integration for Artinet SDK.
3
+ *
4
+ * Lightweight utilities for integrating user-configured OpenTelemetry
5
+ * with the SDK's tracing and logging interfaces.
6
+ *
7
+ * @module @artinet/sdk/otel
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import { trace } from '@opentelemetry/api';
12
+ * import { configure } from '@artinet/sdk';
13
+ * import { configureOtel, withSpan } from '@artinet/sdk/otel';
14
+ *
15
+ * // User initializes their own OpenTelemetry setup
16
+ * // ... NodeSDK setup, exporters, etc. ...
17
+ *
18
+ * // Get tracer and configure SDK
19
+ * const tracer = trace.getTracer('my-agent');
20
+ * configure({
21
+ * tracer,
22
+ * logger: configureOtel({ level: 'debug' })
23
+ * });
24
+ * ```
25
+ */
26
+ import { trace, context, SpanKind, SpanStatusCode, } from "@opentelemetry/api";
27
+ import { formatError } from "../config/observability.js";
28
+ /**
29
+ * Level priority for filtering.
30
+ */
31
+ const LEVEL_PRIORITY = {
32
+ trace: 0,
33
+ verbose: 1,
34
+ debug: 2,
35
+ info: 3,
36
+ warn: 4,
37
+ error: 5,
38
+ silent: 6,
39
+ };
40
+ /**
41
+ * Create a logger that adds log events to the current span.
42
+ *
43
+ * This logger optionally wraps a base logger and adds all log messages
44
+ * as span events in the current trace context.
45
+ *
46
+ * @param options - Logger options
47
+ * @returns ILogger implementation
48
+ *
49
+ * @example
50
+ * ```typescript
51
+ * import { configure } from '@artinet/sdk';
52
+ * import { configureOtel } from '@artinet/sdk/otel';
53
+ * import { configurePino } from '@artinet/sdk/pino';
54
+ * import pino from 'pino';
55
+ *
56
+ * // Logs go to both Pino AND span events
57
+ * configure({
58
+ * logger: configureOtel({
59
+ * baseLogger: configurePino(pino()),
60
+ * level: 'debug'
61
+ * })
62
+ * });
63
+ * ```
64
+ */
65
+ export function configureOtel(options = {}) {
66
+ let currentLevel = options.level ?? "info";
67
+ const baseLogger = options.baseLogger;
68
+ function shouldLog(level) {
69
+ return LEVEL_PRIORITY[level] >= LEVEL_PRIORITY[currentLevel];
70
+ }
71
+ function addSpanEvent(level, msg, args) {
72
+ const span = trace.getActiveSpan();
73
+ if (!span)
74
+ return;
75
+ const attributes = {
76
+ "log.level": level,
77
+ };
78
+ args.forEach((arg, idx) => {
79
+ if (typeof arg === "object" && arg !== null) {
80
+ Object.entries(arg).forEach(([key, value]) => {
81
+ if (typeof value === "string" ||
82
+ typeof value === "number" ||
83
+ typeof value === "boolean") {
84
+ attributes[key] = value;
85
+ }
86
+ else {
87
+ attributes[key] = JSON.stringify(value);
88
+ }
89
+ });
90
+ }
91
+ else if (arg !== undefined) {
92
+ attributes[`arg${idx}`] = String(arg);
93
+ }
94
+ });
95
+ span.addEvent(msg, attributes);
96
+ }
97
+ return {
98
+ get level() {
99
+ return currentLevel;
100
+ },
101
+ debug(msg, ...args) {
102
+ if (!shouldLog("debug"))
103
+ return;
104
+ addSpanEvent("debug", msg, args);
105
+ baseLogger?.debug(msg, ...args);
106
+ },
107
+ info(msg, ...args) {
108
+ if (!shouldLog("info"))
109
+ return;
110
+ addSpanEvent("info", msg, args);
111
+ baseLogger?.info(msg, ...args);
112
+ },
113
+ warn(msg, ...args) {
114
+ if (!shouldLog("warn"))
115
+ return;
116
+ addSpanEvent("warn", msg, args);
117
+ baseLogger?.warn(msg, ...args);
118
+ },
119
+ error(msg, err) {
120
+ if (!shouldLog("error"))
121
+ return;
122
+ addSpanEvent("error", msg, [formatError(err)]);
123
+ baseLogger?.error(msg, err);
124
+ },
125
+ setLevel(level) {
126
+ currentLevel = level;
127
+ baseLogger?.setLevel?.(level);
128
+ },
129
+ getLevel() {
130
+ return currentLevel;
131
+ },
132
+ child(ctx) {
133
+ return configureOtel({
134
+ baseLogger: baseLogger?.child?.(ctx),
135
+ level: currentLevel,
136
+ });
137
+ },
138
+ };
139
+ }
140
+ /**
141
+ * Execute a function within a new span.
142
+ *
143
+ * @param tracer - User's tracer instance
144
+ * @param name - Span name
145
+ * @param fn - Function to execute
146
+ * @param options - Optional span options
147
+ * @returns Result of the function
148
+ *
149
+ * @example
150
+ * ```typescript
151
+ * import { trace } from '@opentelemetry/api';
152
+ * import { withSpan } from '@artinet/sdk/otel';
153
+ *
154
+ * const tracer = trace.getTracer('my-agent');
155
+ * const result = await withSpan(tracer, 'processTask', async (span) => {
156
+ * span.setAttribute('taskId', '123');
157
+ * return await doWork();
158
+ * });
159
+ * ```
160
+ */
161
+ export async function withSpan(tracer, name, fn, options) {
162
+ return tracer.startActiveSpan(name, { kind: options?.kind ?? SpanKind.INTERNAL }, async (span) => {
163
+ if (options?.attributes) {
164
+ Object.entries(options.attributes).forEach(([key, value]) => {
165
+ span.setAttribute(key, value);
166
+ });
167
+ }
168
+ try {
169
+ const result = await fn(span);
170
+ span.setStatus({ code: SpanStatusCode.OK });
171
+ return result;
172
+ }
173
+ catch (error) {
174
+ span.setStatus({
175
+ code: SpanStatusCode.ERROR,
176
+ message: error instanceof Error ? error.message : String(error),
177
+ });
178
+ span.recordException(error);
179
+ throw error;
180
+ }
181
+ finally {
182
+ span.end();
183
+ }
184
+ });
185
+ }
186
+ /**
187
+ * Re-export OpenTelemetry API types for convenience.
188
+ */
189
+ export { trace, context, SpanKind, SpanStatusCode, };
190
+ export default configureOtel;
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @fileoverview Pino logger adapter for Artinet SDK.
3
+ *
4
+ * Lightweight wrapper that adapts a user-configured Pino instance
5
+ * to the SDK's ILogger interface.
6
+ *
7
+ * @module @artinet/sdk/pino
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import pino from 'pino';
12
+ * import { configure } from '@artinet/sdk';
13
+ * import { configurePino } from '@artinet/sdk/pino';
14
+ *
15
+ * // User configures their own pino instance
16
+ * const pinoLogger = pino({
17
+ * level: 'debug',
18
+ * transport: { target: 'pino-pretty' }
19
+ * });
20
+ *
21
+ * // Wrap and configure SDK
22
+ * configure({ logger: configurePino(pinoLogger) });
23
+ * ```
24
+ */
25
+ import type { Logger as PinoLogger } from "pino";
26
+ import type { ILogger } from "../config/observability.js";
27
+ /**
28
+ * Wrap a Pino logger instance to implement ILogger.
29
+ *
30
+ * @param pinoLogger - User-configured Pino logger instance
31
+ * @returns ILogger implementation
32
+ *
33
+ * @example
34
+ * ```typescript
35
+ * import pino from 'pino';
36
+ * import { configure } from '@artinet/sdk';
37
+ * import { configurePino } from '@artinet/sdk/pino';
38
+ *
39
+ * const myPino = pino({ level: 'debug' });
40
+ * configure({ logger: configurePino(myPino) });
41
+ * ```
42
+ */
43
+ export declare function configurePino(pinoLogger: PinoLogger): ILogger;
44
+ export default configurePino;
@@ -0,0 +1,107 @@
1
+ /**
2
+ * @fileoverview Pino logger adapter for Artinet SDK.
3
+ *
4
+ * Lightweight wrapper that adapts a user-configured Pino instance
5
+ * to the SDK's ILogger interface.
6
+ *
7
+ * @module @artinet/sdk/pino
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import pino from 'pino';
12
+ * import { configure } from '@artinet/sdk';
13
+ * import { configurePino } from '@artinet/sdk/pino';
14
+ *
15
+ * // User configures their own pino instance
16
+ * const pinoLogger = pino({
17
+ * level: 'debug',
18
+ * transport: { target: 'pino-pretty' }
19
+ * });
20
+ *
21
+ * // Wrap and configure SDK
22
+ * configure({ logger: configurePino(pinoLogger) });
23
+ * ```
24
+ */
25
+ /**
26
+ * Level mapping from Pino to Artinet.
27
+ */
28
+ const LEVEL_MAP = {
29
+ trace: "trace",
30
+ debug: "debug",
31
+ info: "info",
32
+ warn: "warn",
33
+ error: "error",
34
+ fatal: "error",
35
+ silent: "silent",
36
+ };
37
+ /**
38
+ * Reverse level mapping from Artinet to Pino.
39
+ */
40
+ const ARTINET_TO_PINO = {
41
+ trace: "trace",
42
+ verbose: "debug",
43
+ debug: "debug",
44
+ info: "info",
45
+ warn: "warn",
46
+ error: "error",
47
+ silent: "silent",
48
+ };
49
+ function mergeArgs(args) {
50
+ if (args.length === 0)
51
+ return undefined;
52
+ if (args.length === 1 && typeof args[0] === "object" && args[0] !== null) {
53
+ return args[0];
54
+ }
55
+ return args.reduce((acc, arg, idx) => {
56
+ if (typeof arg === "object" && arg !== null) {
57
+ return { ...acc, [idx]: arg };
58
+ }
59
+ acc[`${idx}`] = arg;
60
+ return acc;
61
+ }, {});
62
+ }
63
+ /**
64
+ * Wrap a Pino logger instance to implement ILogger.
65
+ *
66
+ * @param pinoLogger - User-configured Pino logger instance
67
+ * @returns ILogger implementation
68
+ *
69
+ * @example
70
+ * ```typescript
71
+ * import pino from 'pino';
72
+ * import { configure } from '@artinet/sdk';
73
+ * import { configurePino } from '@artinet/sdk/pino';
74
+ *
75
+ * const myPino = pino({ level: 'debug' });
76
+ * configure({ logger: configurePino(myPino) });
77
+ * ```
78
+ */
79
+ export function configurePino(pinoLogger) {
80
+ return {
81
+ get level() {
82
+ return LEVEL_MAP[pinoLogger.level] ?? "info";
83
+ },
84
+ debug(msg, ...args) {
85
+ pinoLogger.debug(mergeArgs(args), msg);
86
+ },
87
+ info(msg, ...args) {
88
+ pinoLogger.info(mergeArgs(args), msg);
89
+ },
90
+ warn(msg, ...args) {
91
+ pinoLogger.warn(mergeArgs(args), msg);
92
+ },
93
+ error(msg, err) {
94
+ pinoLogger.error(err, msg);
95
+ },
96
+ setLevel(level) {
97
+ pinoLogger.level = ARTINET_TO_PINO[level] ?? "info";
98
+ },
99
+ getLevel() {
100
+ return LEVEL_MAP[pinoLogger.level] ?? "info";
101
+ },
102
+ child(context) {
103
+ return configurePino(pinoLogger.child(context));
104
+ },
105
+ };
106
+ }
107
+ export default configurePino;
@@ -0,0 +1,47 @@
1
+ /**
2
+ * @fileoverview Winston logger adapter for Artinet SDK.
3
+ *
4
+ * Lightweight wrapper that adapts a user-configured Winston instance
5
+ * to the SDK's ILogger interface.
6
+ *
7
+ * @module @artinet/sdk/winston
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import winston from 'winston';
12
+ * import { configure } from '@artinet/sdk';
13
+ * import { configureWinston } from '@artinet/sdk/winston';
14
+ *
15
+ * // User configures their own winston instance
16
+ * const winstonLogger = winston.createLogger({
17
+ * level: 'debug',
18
+ * transports: [new winston.transports.Console()]
19
+ * });
20
+ *
21
+ * // Wrap and configure SDK
22
+ * configure({ logger: configureWinston(winstonLogger) });
23
+ * ```
24
+ */
25
+ import type { Logger as WinstonLogger } from "winston";
26
+ import type { ILogger } from "../config/observability.js";
27
+ /**
28
+ * Wrap a Winston logger instance to implement ILogger.
29
+ *
30
+ * @param winstonLogger - User-configured Winston logger instance
31
+ * @returns ILogger implementation
32
+ *
33
+ * @example
34
+ * ```typescript
35
+ * import winston from 'winston';
36
+ * import { configure } from '@artinet/sdk';
37
+ * import { configureWinston } from '@artinet/sdk/winston';
38
+ *
39
+ * const myWinston = winston.createLogger({
40
+ * level: 'debug',
41
+ * transports: [new winston.transports.Console()]
42
+ * });
43
+ * configure({ logger: configureWinston(myWinston) });
44
+ * ```
45
+ */
46
+ export declare function configureWinston(winstonLogger: WinstonLogger): ILogger;
47
+ export default configureWinston;
@@ -0,0 +1,114 @@
1
+ /**
2
+ * @fileoverview Winston logger adapter for Artinet SDK.
3
+ *
4
+ * Lightweight wrapper that adapts a user-configured Winston instance
5
+ * to the SDK's ILogger interface.
6
+ *
7
+ * @module @artinet/sdk/winston
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import winston from 'winston';
12
+ * import { configure } from '@artinet/sdk';
13
+ * import { configureWinston } from '@artinet/sdk/winston';
14
+ *
15
+ * // User configures their own winston instance
16
+ * const winstonLogger = winston.createLogger({
17
+ * level: 'debug',
18
+ * transports: [new winston.transports.Console()]
19
+ * });
20
+ *
21
+ * // Wrap and configure SDK
22
+ * configure({ logger: configureWinston(winstonLogger) });
23
+ * ```
24
+ */
25
+ /**
26
+ * Level mapping from Winston to Artinet.
27
+ */
28
+ const LEVEL_MAP = {
29
+ silly: "trace",
30
+ verbose: "verbose",
31
+ debug: "debug",
32
+ http: "debug",
33
+ info: "info",
34
+ warn: "warn",
35
+ error: "error",
36
+ silent: "silent",
37
+ };
38
+ /**
39
+ * Reverse level mapping from Artinet to Winston.
40
+ */
41
+ const ARTINET_TO_WINSTON = {
42
+ trace: "silly",
43
+ verbose: "verbose",
44
+ debug: "debug",
45
+ info: "info",
46
+ warn: "warn",
47
+ error: "error",
48
+ silent: "silent",
49
+ };
50
+ /**
51
+ * Merge spread args into metadata object for Winston.
52
+ */
53
+ function mergeArgs(args) {
54
+ if (args.length === 0)
55
+ return {};
56
+ if (args.length === 1 && typeof args[0] === "object" && args[0] !== null) {
57
+ return args[0];
58
+ }
59
+ return args.reduce((acc, arg, idx) => {
60
+ if (typeof arg === "object" && arg !== null) {
61
+ return { ...acc, ...arg };
62
+ }
63
+ acc[`arg${idx}`] = arg;
64
+ return acc;
65
+ }, {});
66
+ }
67
+ /**
68
+ * Wrap a Winston logger instance to implement ILogger.
69
+ *
70
+ * @param winstonLogger - User-configured Winston logger instance
71
+ * @returns ILogger implementation
72
+ *
73
+ * @example
74
+ * ```typescript
75
+ * import winston from 'winston';
76
+ * import { configure } from '@artinet/sdk';
77
+ * import { configureWinston } from '@artinet/sdk/winston';
78
+ *
79
+ * const myWinston = winston.createLogger({
80
+ * level: 'debug',
81
+ * transports: [new winston.transports.Console()]
82
+ * });
83
+ * configure({ logger: configureWinston(myWinston) });
84
+ * ```
85
+ */
86
+ export function configureWinston(winstonLogger) {
87
+ return {
88
+ get level() {
89
+ return LEVEL_MAP[winstonLogger.level] ?? "info";
90
+ },
91
+ debug(msg, ...args) {
92
+ winstonLogger.debug(msg, mergeArgs(args));
93
+ },
94
+ info(msg, ...args) {
95
+ winstonLogger.info(msg, mergeArgs(args));
96
+ },
97
+ warn(msg, ...args) {
98
+ winstonLogger.warn(msg, mergeArgs(args));
99
+ },
100
+ error(msg, err) {
101
+ winstonLogger.error(msg, err);
102
+ },
103
+ setLevel(level) {
104
+ winstonLogger.level = ARTINET_TO_WINSTON[level] ?? "info";
105
+ },
106
+ getLevel() {
107
+ return LEVEL_MAP[winstonLogger.level] ?? "info";
108
+ },
109
+ child(context) {
110
+ return configureWinston(winstonLogger.child(context));
111
+ },
112
+ };
113
+ }
114
+ export default configureWinston;
package/dist/index.d.ts CHANGED
@@ -4,3 +4,5 @@ export * from "./server/index.js";
4
4
  export * from "./services/index.js";
5
5
  export * from "./transport/index.js";
6
6
  export * from "./utils/index.js";
7
+ export * from "./config/index.js";
8
+ export * from "./config/default.js";
package/dist/index.js CHANGED
@@ -4,3 +4,5 @@ export * from "./server/index.js";
4
4
  export * from "./services/index.js";
5
5
  export * from "./transport/index.js";
6
6
  export * from "./utils/index.js";
7
+ export * from "./config/index.js";
8
+ export * from "./config/default.js";
@@ -3,7 +3,7 @@
3
3
  * SPDX-License-Identifier: Apache-2.0
4
4
  */
5
5
  import { SystemError, INTERNAL_ERROR } from "../../utils/index.js";
6
- import { logError } from "../../utils/logging/index.js";
6
+ import { logger } from "../../config/index.js";
7
7
  import escapeHtml from "escape-html";
8
8
  /**
9
9
  * Express error handler middleware.
@@ -13,7 +13,7 @@ export const errorHandler = (err, req, res, _) => {
13
13
  if (res.headersSent) {
14
14
  headersSent = true;
15
15
  }
16
- logError("errorHandler", JSON.stringify(err), err);
16
+ logger.error("errorHandler", err);
17
17
  let reqId = null;
18
18
  try {
19
19
  if (req.body && typeof req.body === "object" && "id" in req.body) {
@@ -21,7 +21,7 @@ export const errorHandler = (err, req, res, _) => {
21
21
  }
22
22
  }
23
23
  catch (e) {
24
- logError("A2AServer", "Error extracting request ID", e);
24
+ logger.error("errorHandler: Error extracting request ID", e);
25
25
  }
26
26
  let jsonRpcError;
27
27
  if (err instanceof SystemError) {
@@ -3,5 +3,5 @@
3
3
  * SPDX-License-Identifier: Apache-2.0
4
4
  */
5
5
  import { NextFunction, Request, Response } from "express";
6
- import { A2AServiceInterface } from "../../types/index.js";
7
- export declare function jsonRPCMiddleware(service: A2AServiceInterface, req: Request, res: Response, next: NextFunction): Promise<void>;
6
+ import { A2A } from "../../types/index.js";
7
+ export declare function jsonRPCMiddleware(service: A2A.Service, req: Request, res: Response, next: NextFunction, extendedAgentCard?: A2A.AgentCard): Promise<void>;
@@ -2,8 +2,9 @@
2
2
  * Copyright 2025 The Artinet Project
3
3
  * SPDX-License-Identifier: Apache-2.0
4
4
  */
5
- import { PUSH_NOTIFICATION_NOT_SUPPORTED, INVALID_REQUEST, INVALID_PARAMS, METHOD_NOT_FOUND, } from "../../utils/index.js";
6
- import { logError } from "../../utils/logging/index.js";
5
+ import { A2A } from "../../types/index.js";
6
+ import { PUSH_NOTIFICATION_NOT_SUPPORTED, INVALID_REQUEST, INVALID_PARAMS, METHOD_NOT_FOUND, AUTHENTICATED_EXTENDED_CARD_NOT_CONFIGURED, } from "../../utils/index.js";
7
+ import { logger } from "../../config/index.js";
7
8
  const isValidMethod = (method) => {
8
9
  return (method &&
9
10
  method !== "" &&
@@ -12,8 +13,15 @@ const isValidMethod = (method) => {
12
13
  typeof method === "string");
13
14
  };
14
15
  const checkParams = (params, method) => {
15
- if (!params ||
16
- (typeof params === "object" && Object.keys(params).length === 0)) {
16
+ if (!params || (typeof params !== "object" && !Array.isArray(params))) {
17
+ throw INVALID_PARAMS({
18
+ data: {
19
+ message: "Invalid params",
20
+ method,
21
+ },
22
+ });
23
+ }
24
+ else if (typeof params === "object" && Object.keys(params).length === 0) {
17
25
  throw INVALID_PARAMS({
18
26
  data: {
19
27
  message: "No params provided",
@@ -22,14 +30,14 @@ const checkParams = (params, method) => {
22
30
  });
23
31
  }
24
32
  };
25
- export async function jsonRPCMiddleware(service, req, res, next) {
33
+ export async function jsonRPCMiddleware(service, req, res, next, extendedAgentCard) {
26
34
  const { method, params, id, jsonrpc } = req.body;
27
- // Validate JSON-RPC format
28
- if (jsonrpc !== "2.0" || !id) {
35
+ if (jsonrpc !== "2.0" ||
36
+ (id && typeof id !== "string" && typeof id !== "number" && id !== null)) {
29
37
  res.json({
30
38
  jsonrpc: "2.0",
31
39
  id: id || null,
32
- error: { code: -32600, message: "Invalid Request" },
40
+ error: { code: A2A.ErrorCodeInvalidRequest, message: "Invalid Request" },
33
41
  });
34
42
  return;
35
43
  }
@@ -87,6 +95,8 @@ export async function jsonRPCMiddleware(service, req, res, next) {
87
95
  result = await service.cancelTask(params);
88
96
  break;
89
97
  }
98
+ //todo: Implement push notifications
99
+ //todo: Implement Tasks List
90
100
  case "tasks/pushNotificationConfig/set":
91
101
  case "tasks/pushNotificationConfig/get":
92
102
  case "tasks/pushNotificationConfig/delete":
@@ -98,6 +108,20 @@ export async function jsonRPCMiddleware(service, req, res, next) {
98
108
  },
99
109
  });
100
110
  }
111
+ case "agent/getAuthenticatedExtendedCard": {
112
+ if (!extendedAgentCard ||
113
+ (await service.getAgentCard()).supportsAuthenticatedExtendedCard !==
114
+ true) {
115
+ throw AUTHENTICATED_EXTENDED_CARD_NOT_CONFIGURED({
116
+ data: {
117
+ message: "Authenticated Extended Card is not configured",
118
+ method,
119
+ },
120
+ });
121
+ }
122
+ result = extendedAgentCard;
123
+ break;
124
+ }
101
125
  default:
102
126
  throw METHOD_NOT_FOUND({
103
127
  data: {
@@ -109,7 +133,10 @@ export async function jsonRPCMiddleware(service, req, res, next) {
109
133
  res.json({ jsonrpc: "2.0", id, result });
110
134
  }
111
135
  catch (error) {
112
- logError("jsonRPCMiddleware", "error detected", error, req.body);
136
+ logger.error("jsonRPCMiddleware[Error]:", error);
137
+ logger.warn("jsonRPCMiddleware[Error]: Request body", {
138
+ request: req.body,
139
+ });
113
140
  return next(error);
114
141
  }
115
142
  }