@vibefield/rosetta-protocol 0.0.0-stage → 0.1.0

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 (354) hide show
  1. package/README.md +73 -2
  2. package/dist/base64url.d.ts +4 -0
  3. package/dist/base64url.js +48 -0
  4. package/dist/client.d.ts +324 -0
  5. package/dist/client.js +981 -0
  6. package/dist/generated/ActivityResponse.d.ts +16 -0
  7. package/dist/generated/ActivityResponse.js +1 -0
  8. package/dist/generated/ActivitySession.d.ts +19 -0
  9. package/dist/generated/ActivitySession.js +1 -0
  10. package/dist/generated/ApiError.d.ts +5 -0
  11. package/dist/generated/ApiError.js +1 -0
  12. package/dist/generated/ArtifactKind.d.ts +1 -0
  13. package/dist/generated/ArtifactKind.js +2 -0
  14. package/dist/generated/ArtifactOp.d.ts +1 -0
  15. package/dist/generated/ArtifactOp.js +2 -0
  16. package/dist/generated/AssetRef.d.ts +14 -0
  17. package/dist/generated/AssetRef.js +1 -0
  18. package/dist/generated/AttachmentKind.d.ts +1 -0
  19. package/dist/generated/AttachmentKind.js +2 -0
  20. package/dist/generated/AttachmentRef.d.ts +21 -0
  21. package/dist/generated/AttachmentRef.js +1 -0
  22. package/dist/generated/AttachmentSource.d.ts +13 -0
  23. package/dist/generated/AttachmentSource.js +1 -0
  24. package/dist/generated/AttachmentUnavailableReason.d.ts +1 -0
  25. package/dist/generated/AttachmentUnavailableReason.js +2 -0
  26. package/dist/generated/BackfillState.d.ts +4 -0
  27. package/dist/generated/BackfillState.js +2 -0
  28. package/dist/generated/BoostRequest.d.ts +7 -0
  29. package/dist/generated/BoostRequest.js +2 -0
  30. package/dist/generated/BoostResponse.d.ts +6 -0
  31. package/dist/generated/BoostResponse.js +2 -0
  32. package/dist/generated/CanonicalDocument.d.ts +16 -0
  33. package/dist/generated/CanonicalDocument.js +1 -0
  34. package/dist/generated/CanonicalText.d.ts +10 -0
  35. package/dist/generated/CanonicalText.js +1 -0
  36. package/dist/generated/ChildTrace.d.ts +1 -0
  37. package/dist/generated/ChildTrace.js +2 -0
  38. package/dist/generated/CitationRef.d.ts +9 -0
  39. package/dist/generated/CitationRef.js +1 -0
  40. package/dist/generated/CodeLookupOp.d.ts +1 -0
  41. package/dist/generated/CodeLookupOp.js +2 -0
  42. package/dist/generated/CollaborationChannel.d.ts +1 -0
  43. package/dist/generated/CollaborationChannel.js +2 -0
  44. package/dist/generated/CollaborationEvent.d.ts +47 -0
  45. package/dist/generated/CollaborationEvent.js +1 -0
  46. package/dist/generated/CollaborationEventKind.d.ts +1 -0
  47. package/dist/generated/CollaborationEventKind.js +2 -0
  48. package/dist/generated/CollaborationOp.d.ts +1 -0
  49. package/dist/generated/CollaborationOp.js +2 -0
  50. package/dist/generated/CollaborationOutcome.d.ts +5 -0
  51. package/dist/generated/CollaborationOutcome.js +1 -0
  52. package/dist/generated/CollaborationStatus.d.ts +1 -0
  53. package/dist/generated/CollaborationStatus.js +2 -0
  54. package/dist/generated/CollaborationTimeline.d.ts +10 -0
  55. package/dist/generated/CollaborationTimeline.js +1 -0
  56. package/dist/generated/CollaboratorRef.d.ts +7 -0
  57. package/dist/generated/CollaboratorRef.js +1 -0
  58. package/dist/generated/CommandResponse.d.ts +7 -0
  59. package/dist/generated/CommandResponse.js +2 -0
  60. package/dist/generated/ContributionResponse.d.ts +4 -0
  61. package/dist/generated/ContributionResponse.js +1 -0
  62. package/dist/generated/ContributionRow.d.ts +22 -0
  63. package/dist/generated/ContributionRow.js +2 -0
  64. package/dist/generated/CorrelationDerivation.d.ts +1 -0
  65. package/dist/generated/CorrelationDerivation.js +2 -0
  66. package/dist/generated/DaemonStatus.d.ts +17 -0
  67. package/dist/generated/DaemonStatus.js +1 -0
  68. package/dist/generated/DayUsageResponse.d.ts +8 -0
  69. package/dist/generated/DayUsageResponse.js +1 -0
  70. package/dist/generated/Dimensions.d.ts +4 -0
  71. package/dist/generated/Dimensions.js +2 -0
  72. package/dist/generated/DiscoveriesResponse.d.ts +4 -0
  73. package/dist/generated/DiscoveriesResponse.js +1 -0
  74. package/dist/generated/DiscoveryRow.d.ts +23 -0
  75. package/dist/generated/DiscoveryRow.js +2 -0
  76. package/dist/generated/DisplayField.d.ts +7 -0
  77. package/dist/generated/DisplayField.js +1 -0
  78. package/dist/generated/DisplayScalar.d.ts +10 -0
  79. package/dist/generated/DisplayScalar.js +2 -0
  80. package/dist/generated/DisplayValue.d.ts +18 -0
  81. package/dist/generated/DisplayValue.js +1 -0
  82. package/dist/generated/DocumentBlock.d.ts +20 -0
  83. package/dist/generated/DocumentBlock.js +1 -0
  84. package/dist/generated/EnableRequest.d.ts +7 -0
  85. package/dist/generated/EnableRequest.js +2 -0
  86. package/dist/generated/EnableResponse.d.ts +3 -0
  87. package/dist/generated/EnableResponse.js +2 -0
  88. package/dist/generated/ErrorCode.d.ts +1 -0
  89. package/dist/generated/ErrorCode.js +2 -0
  90. package/dist/generated/ExecutionMode.d.ts +1 -0
  91. package/dist/generated/ExecutionMode.js +2 -0
  92. package/dist/generated/FailureKind.d.ts +1 -0
  93. package/dist/generated/FailureKind.js +2 -0
  94. package/dist/generated/FetchOutcome.d.ts +5 -0
  95. package/dist/generated/FetchOutcome.js +2 -0
  96. package/dist/generated/FieldRole.d.ts +1 -0
  97. package/dist/generated/FieldRole.js +2 -0
  98. package/dist/generated/FileChangeOp.d.ts +1 -0
  99. package/dist/generated/FileChangeOp.js +2 -0
  100. package/dist/generated/FileDelta.d.ts +11 -0
  101. package/dist/generated/FileDelta.js +1 -0
  102. package/dist/generated/FileSearchMode.d.ts +1 -0
  103. package/dist/generated/FileSearchMode.js +2 -0
  104. package/dist/generated/FindingItem.d.ts +9 -0
  105. package/dist/generated/FindingItem.js +1 -0
  106. package/dist/generated/FindingSeverity.d.ts +1 -0
  107. package/dist/generated/FindingSeverity.js +2 -0
  108. package/dist/generated/GroupDerivation.d.ts +1 -0
  109. package/dist/generated/GroupDerivation.js +2 -0
  110. package/dist/generated/GroupKind.d.ts +1 -0
  111. package/dist/generated/GroupKind.js +2 -0
  112. package/dist/generated/HeatmapDay.d.ts +16 -0
  113. package/dist/generated/HeatmapDay.js +2 -0
  114. package/dist/generated/HeatmapResponse.d.ts +4 -0
  115. package/dist/generated/HeatmapResponse.js +1 -0
  116. package/dist/generated/HourTotal.d.ts +16 -0
  117. package/dist/generated/HourTotal.js +2 -0
  118. package/dist/generated/HubStatus.d.ts +18 -0
  119. package/dist/generated/HubStatus.js +2 -0
  120. package/dist/generated/ImageVariant.d.ts +1 -0
  121. package/dist/generated/ImageVariant.js +2 -0
  122. package/dist/generated/IngestPhase.d.ts +9 -0
  123. package/dist/generated/IngestPhase.js +2 -0
  124. package/dist/generated/IngestProgress.d.ts +19 -0
  125. package/dist/generated/IngestProgress.js +1 -0
  126. package/dist/generated/ListOutcome.d.ts +3 -0
  127. package/dist/generated/ListOutcome.js +2 -0
  128. package/dist/generated/LocationOutcome.d.ts +5 -0
  129. package/dist/generated/LocationOutcome.js +1 -0
  130. package/dist/generated/MediaMetadata.d.ts +6 -0
  131. package/dist/generated/MediaMetadata.js +2 -0
  132. package/dist/generated/ModeOp.d.ts +1 -0
  133. package/dist/generated/ModeOp.js +2 -0
  134. package/dist/generated/ModelDay.d.ts +20 -0
  135. package/dist/generated/ModelDay.js +2 -0
  136. package/dist/generated/ModelHour.d.ts +8 -0
  137. package/dist/generated/ModelHour.js +2 -0
  138. package/dist/generated/Mutation.d.ts +45 -0
  139. package/dist/generated/Mutation.js +1 -0
  140. package/dist/generated/NativeToolRef.d.ts +6 -0
  141. package/dist/generated/NativeToolRef.js +2 -0
  142. package/dist/generated/Notice.d.ts +48 -0
  143. package/dist/generated/Notice.js +1 -0
  144. package/dist/generated/ParticipantColor.d.ts +1 -0
  145. package/dist/generated/ParticipantColor.js +2 -0
  146. package/dist/generated/ParticipantState.d.ts +1 -0
  147. package/dist/generated/ParticipantState.js +2 -0
  148. package/dist/generated/PermissionOutcome.d.ts +1 -0
  149. package/dist/generated/PermissionOutcome.js +2 -0
  150. package/dist/generated/PlanOp.d.ts +1 -0
  151. package/dist/generated/PlanOp.js +2 -0
  152. package/dist/generated/PricingResponse.d.ts +25 -0
  153. package/dist/generated/PricingResponse.js +1 -0
  154. package/dist/generated/PricingSource.d.ts +7 -0
  155. package/dist/generated/PricingSource.js +2 -0
  156. package/dist/generated/ProcessOp.d.ts +1 -0
  157. package/dist/generated/ProcessOp.js +2 -0
  158. package/dist/generated/ProcessOutcome.d.ts +4 -0
  159. package/dist/generated/ProcessOutcome.js +1 -0
  160. package/dist/generated/ProcessState.d.ts +1 -0
  161. package/dist/generated/ProcessState.js +2 -0
  162. package/dist/generated/ProjectBackfill.d.ts +27 -0
  163. package/dist/generated/ProjectBackfill.js +2 -0
  164. package/dist/generated/ProjectRow.d.ts +6 -0
  165. package/dist/generated/ProjectRow.js +2 -0
  166. package/dist/generated/ProjectsResponse.d.ts +4 -0
  167. package/dist/generated/ProjectsResponse.js +1 -0
  168. package/dist/generated/Provenance.d.ts +5 -0
  169. package/dist/generated/Provenance.js +2 -0
  170. package/dist/generated/QuestionOption.d.ts +5 -0
  171. package/dist/generated/QuestionOption.js +2 -0
  172. package/dist/generated/RangeUnit.d.ts +1 -0
  173. package/dist/generated/RangeUnit.js +2 -0
  174. package/dist/generated/ReadOutcome.d.ts +3 -0
  175. package/dist/generated/ReadOutcome.js +2 -0
  176. package/dist/generated/ReadTarget.d.ts +8 -0
  177. package/dist/generated/ReadTarget.js +1 -0
  178. package/dist/generated/ResourceRef.d.ts +25 -0
  179. package/dist/generated/ResourceRef.js +1 -0
  180. package/dist/generated/ResponseGroup.d.ts +5 -0
  181. package/dist/generated/ResponseGroup.js +1 -0
  182. package/dist/generated/ResponseRuntime.d.ts +9 -0
  183. package/dist/generated/ResponseRuntime.js +2 -0
  184. package/dist/generated/RuntimeBackfill.d.ts +50 -0
  185. package/dist/generated/RuntimeBackfill.js +1 -0
  186. package/dist/generated/RuntimeErrorKind.d.ts +1 -0
  187. package/dist/generated/RuntimeErrorKind.js +2 -0
  188. package/dist/generated/RuntimeIngestStatus.d.ts +30 -0
  189. package/dist/generated/RuntimeIngestStatus.js +2 -0
  190. package/dist/generated/RuntimeProvenance.d.ts +9 -0
  191. package/dist/generated/RuntimeProvenance.js +2 -0
  192. package/dist/generated/RuntimeRow.d.ts +25 -0
  193. package/dist/generated/RuntimeRow.js +1 -0
  194. package/dist/generated/RuntimesResponse.d.ts +4 -0
  195. package/dist/generated/RuntimesResponse.js +1 -0
  196. package/dist/generated/ScheduleOp.d.ts +1 -0
  197. package/dist/generated/ScheduleOp.js +2 -0
  198. package/dist/generated/SearchBuildProgress.d.ts +6 -0
  199. package/dist/generated/SearchBuildProgress.js +1 -0
  200. package/dist/generated/SearchBuildStage.d.ts +1 -0
  201. package/dist/generated/SearchBuildStage.js +2 -0
  202. package/dist/generated/SearchFilter.d.ts +5 -0
  203. package/dist/generated/SearchFilter.js +1 -0
  204. package/dist/generated/SearchFilterKind.d.ts +1 -0
  205. package/dist/generated/SearchFilterKind.js +2 -0
  206. package/dist/generated/SearchHit.d.ts +20 -0
  207. package/dist/generated/SearchHit.js +2 -0
  208. package/dist/generated/SearchOutcome.d.ts +7 -0
  209. package/dist/generated/SearchOutcome.js +1 -0
  210. package/dist/generated/SearchReadiness.d.ts +6 -0
  211. package/dist/generated/SearchReadiness.js +2 -0
  212. package/dist/generated/SearchRequest.d.ts +38 -0
  213. package/dist/generated/SearchRequest.js +2 -0
  214. package/dist/generated/SearchResponse.d.ts +6 -0
  215. package/dist/generated/SearchResponse.js +1 -0
  216. package/dist/generated/SearchState.d.ts +23 -0
  217. package/dist/generated/SearchState.js +1 -0
  218. package/dist/generated/ServerFrame.d.ts +56 -0
  219. package/dist/generated/ServerFrame.js +1 -0
  220. package/dist/generated/ServiceTier.d.ts +7 -0
  221. package/dist/generated/ServiceTier.js +2 -0
  222. package/dist/generated/SessionActivity.d.ts +9 -0
  223. package/dist/generated/SessionActivity.js +2 -0
  224. package/dist/generated/SessionDelegation.d.ts +30 -0
  225. package/dist/generated/SessionDelegation.js +1 -0
  226. package/dist/generated/SessionResponse.d.ts +4 -0
  227. package/dist/generated/SessionResponse.js +1 -0
  228. package/dist/generated/SessionRole.d.ts +1 -0
  229. package/dist/generated/SessionRole.js +2 -0
  230. package/dist/generated/SessionRow.d.ts +38 -0
  231. package/dist/generated/SessionRow.js +1 -0
  232. package/dist/generated/SessionsResponse.d.ts +4 -0
  233. package/dist/generated/SessionsResponse.js +1 -0
  234. package/dist/generated/ShellOutcome.d.ts +5 -0
  235. package/dist/generated/ShellOutcome.js +2 -0
  236. package/dist/generated/SourceLocation.d.ts +7 -0
  237. package/dist/generated/SourceLocation.js +1 -0
  238. package/dist/generated/SourceRange.d.ts +6 -0
  239. package/dist/generated/SourceRange.js +1 -0
  240. package/dist/generated/Stamp.d.ts +13 -0
  241. package/dist/generated/Stamp.js +2 -0
  242. package/dist/generated/StatusBasis.d.ts +1 -0
  243. package/dist/generated/StatusBasis.js +2 -0
  244. package/dist/generated/StatusResponse.d.ts +17 -0
  245. package/dist/generated/StatusResponse.js +1 -0
  246. package/dist/generated/StreamState.d.ts +1 -0
  247. package/dist/generated/StreamState.js +2 -0
  248. package/dist/generated/SummaryPurpose.d.ts +1 -0
  249. package/dist/generated/SummaryPurpose.js +2 -0
  250. package/dist/generated/TaskOp.d.ts +1 -0
  251. package/dist/generated/TaskOp.js +2 -0
  252. package/dist/generated/TaskSnapshot.d.ts +9 -0
  253. package/dist/generated/TaskSnapshot.js +1 -0
  254. package/dist/generated/TaskSnapshotItem.d.ts +13 -0
  255. package/dist/generated/TaskSnapshotItem.js +1 -0
  256. package/dist/generated/TaskStatus.d.ts +1 -0
  257. package/dist/generated/TaskStatus.js +2 -0
  258. package/dist/generated/TextRange.d.ts +4 -0
  259. package/dist/generated/TextRange.js +2 -0
  260. package/dist/generated/TimelineBody.d.ts +33 -0
  261. package/dist/generated/TimelineBody.js +1 -0
  262. package/dist/generated/TimelineEntry.d.ts +37 -0
  263. package/dist/generated/TimelineEntry.js +1 -0
  264. package/dist/generated/TimelineEntryResponse.d.ts +5 -0
  265. package/dist/generated/TimelineEntryResponse.js +1 -0
  266. package/dist/generated/TimelineGroup.d.ts +7 -0
  267. package/dist/generated/TimelineGroup.js +1 -0
  268. package/dist/generated/TimelineMeta.d.ts +10 -0
  269. package/dist/generated/TimelineMeta.js +1 -0
  270. package/dist/generated/TimelineMetaArtifact.d.ts +11 -0
  271. package/dist/generated/TimelineMetaArtifact.js +1 -0
  272. package/dist/generated/TimelineMetaArtifactSource.d.ts +10 -0
  273. package/dist/generated/TimelineMetaArtifactSource.js +1 -0
  274. package/dist/generated/TimelineMetaPlan.d.ts +8 -0
  275. package/dist/generated/TimelineMetaPlan.js +1 -0
  276. package/dist/generated/TimelineMetaPlanSource.d.ts +7 -0
  277. package/dist/generated/TimelineMetaPlanSource.js +2 -0
  278. package/dist/generated/TimelineMetaTask.d.ts +13 -0
  279. package/dist/generated/TimelineMetaTask.js +1 -0
  280. package/dist/generated/TimelineMetaWorkflow.d.ts +30 -0
  281. package/dist/generated/TimelineMetaWorkflow.js +1 -0
  282. package/dist/generated/TimelinePage.d.ts +17 -0
  283. package/dist/generated/TimelinePage.js +1 -0
  284. package/dist/generated/TokenSnapshot.d.ts +61 -0
  285. package/dist/generated/TokenSnapshot.js +1 -0
  286. package/dist/generated/ToolAction.d.ts +245 -0
  287. package/dist/generated/ToolAction.js +1 -0
  288. package/dist/generated/ToolCorrelation.d.ts +5 -0
  289. package/dist/generated/ToolCorrelation.js +1 -0
  290. package/dist/generated/ToolFailure.d.ts +6 -0
  291. package/dist/generated/ToolFailure.js +1 -0
  292. package/dist/generated/ToolInteraction.d.ts +19 -0
  293. package/dist/generated/ToolInteraction.js +1 -0
  294. package/dist/generated/ToolStatus.d.ts +1 -0
  295. package/dist/generated/ToolStatus.js +2 -0
  296. package/dist/generated/ToolStatusFact.d.ts +6 -0
  297. package/dist/generated/ToolStatusFact.js +1 -0
  298. package/dist/generated/ToolTiming.d.ts +5 -0
  299. package/dist/generated/ToolTiming.js +2 -0
  300. package/dist/generated/TruncationScope.d.ts +1 -0
  301. package/dist/generated/TruncationScope.js +2 -0
  302. package/dist/generated/TurnGap.d.ts +8 -0
  303. package/dist/generated/TurnGap.js +2 -0
  304. package/dist/generated/TurnSpan.d.ts +15 -0
  305. package/dist/generated/TurnSpan.js +1 -0
  306. package/dist/generated/UnpricedModel.d.ts +20 -0
  307. package/dist/generated/UnpricedModel.js +2 -0
  308. package/dist/generated/UsageCost.d.ts +18 -0
  309. package/dist/generated/UsageCost.js +2 -0
  310. package/dist/generated/UsageResponse.d.ts +11 -0
  311. package/dist/generated/UsageResponse.js +1 -0
  312. package/dist/generated/UsageScope.d.ts +6 -0
  313. package/dist/generated/UsageScope.js +2 -0
  314. package/dist/generated/UserAnswer.d.ts +5 -0
  315. package/dist/generated/UserAnswer.js +1 -0
  316. package/dist/generated/UserQuestion.d.ts +9 -0
  317. package/dist/generated/UserQuestion.js +1 -0
  318. package/dist/generated/WebNavigationOp.d.ts +1 -0
  319. package/dist/generated/WebNavigationOp.js +2 -0
  320. package/dist/generated/WebSearchOutcome.d.ts +5 -0
  321. package/dist/generated/WebSearchOutcome.js +1 -0
  322. package/dist/generated/WebSource.d.ts +4 -0
  323. package/dist/generated/WebSource.js +2 -0
  324. package/dist/generated/WorkflowAttempt.d.ts +16 -0
  325. package/dist/generated/WorkflowAttempt.js +1 -0
  326. package/dist/generated/WorkflowJournalKind.d.ts +1 -0
  327. package/dist/generated/WorkflowJournalKind.js +2 -0
  328. package/dist/generated/WorkflowJournalObservation.d.ts +21 -0
  329. package/dist/generated/WorkflowJournalObservation.js +1 -0
  330. package/dist/generated/WorkflowPhase.d.ts +5 -0
  331. package/dist/generated/WorkflowPhase.js +2 -0
  332. package/dist/generated/WorkflowResultKind.d.ts +1 -0
  333. package/dist/generated/WorkflowResultKind.js +2 -0
  334. package/dist/generated/WorkflowRun.d.ts +51 -0
  335. package/dist/generated/WorkflowRun.js +1 -0
  336. package/dist/generated/WorkflowRunStatus.d.ts +1 -0
  337. package/dist/generated/WorkflowRunStatus.js +2 -0
  338. package/dist/generated/WorkflowUsage.d.ts +10 -0
  339. package/dist/generated/WorkflowUsage.js +2 -0
  340. package/dist/generated/WorkflowWorker.d.ts +31 -0
  341. package/dist/generated/WorkflowWorker.js +1 -0
  342. package/dist/generated/WorkflowWorkerState.d.ts +1 -0
  343. package/dist/generated/WorkflowWorkerState.js +2 -0
  344. package/dist/generated/serde_json/JsonValue.d.ts +3 -0
  345. package/dist/generated/serde_json/JsonValue.js +2 -0
  346. package/dist/grants.d.ts +67 -0
  347. package/dist/grants.js +160 -0
  348. package/dist/index.d.ts +110 -0
  349. package/dist/index.js +1 -0
  350. package/dist/ordered-cache.d.ts +15 -0
  351. package/dist/ordered-cache.js +63 -0
  352. package/dist/protocol-version.d.mts +1 -0
  353. package/dist/protocol-version.mjs +2 -0
  354. package/package.json +47 -4
package/dist/grants.js ADDED
@@ -0,0 +1,160 @@
1
+ // Per-session expiring grants (docs/AUTH.md): the TypeScript twin of
2
+ // `crates/server/src/grant.rs`, for the supervisor that mints them (fieldd)
3
+ // and for its tests. Node-only — it signs with `node:crypto` — so it is its
4
+ // own package entry, `@vibefield/rosetta-protocol/grants`, never part of the browser
5
+ // client. A browser carries a grant as an opaque string (the client's
6
+ // `credential` option); only the key's holder mints or verifies one.
7
+ //
8
+ // A grant is `<base64url(payload)>.<base64url(HMAC-SHA256(key, payload))>`,
9
+ // unpadded. `payload` is the RFC 8785 canonical JSON of the claims below.
10
+ // Both sides read `crates/server/tests/fixtures/grants.json`.
11
+ import { createHmac, timingSafeEqual } from "node:crypto";
12
+ import { base64UrlDecode, base64UrlEncode } from "./base64url.js";
13
+ /** The only payload version a daemon accepts. */
14
+ export const GRANT_VERSION = 1;
15
+ /** The scope every grant-openable route needs. */
16
+ export const SCOPE_READ = "read";
17
+ /**
18
+ * The recorded-file read (`/read/{target_index}`), which reads a file from the
19
+ * daemon's disk by the transcript's reference — more than the transcript, so it
20
+ * is minted separately: the file route needs it beside {@link SCOPE_READ}, and
21
+ * the minter decides which principals hold it (docs/AUTH.md §5.4).
22
+ */
23
+ export const SCOPE_FILES = "files";
24
+ /** A daemon refuses to start with a shorter key. */
25
+ export const MIN_GRANT_KEY_BYTES = 32;
26
+ /** The largest encoded grant a daemon reads. */
27
+ export const MAX_GRANT_BYTES = 4096;
28
+ const MAC_BYTES = 32;
29
+ /** A lone UTF-16 surrogate: not Unicode text, so not I-JSON (RFC 8785 §3.1). */
30
+ const LONE_SURROGATE = /\p{Cs}/u;
31
+ function isArray(value) {
32
+ return Array.isArray(value);
33
+ }
34
+ /**
35
+ * RFC 8785 (JCS): members sorted by UTF-16 code units (JavaScript's default
36
+ * sort), no whitespace, strings and numbers exactly as `JSON.stringify`
37
+ * writes them. Throws on what I-JSON forbids: non-finite numbers and lone
38
+ * surrogates.
39
+ */
40
+ export function canonicalize(value) {
41
+ if (typeof value === "string") {
42
+ if (LONE_SURROGATE.test(value))
43
+ throw new TypeError("canonical JSON strings are Unicode text");
44
+ return JSON.stringify(value);
45
+ }
46
+ if (typeof value === "number") {
47
+ if (!Number.isFinite(value))
48
+ throw new TypeError("canonical JSON numbers are finite");
49
+ return JSON.stringify(value);
50
+ }
51
+ if (value === null || typeof value === "boolean")
52
+ return JSON.stringify(value);
53
+ if (isArray(value))
54
+ return `[${value.map(canonicalize).join(",")}]`;
55
+ const members = Object.keys(value)
56
+ .sort()
57
+ .flatMap((key) => {
58
+ const member = value[key];
59
+ return member === undefined ? [] : [`${canonicalize(key)}:${canonicalize(member)}`];
60
+ });
61
+ return `{${members.join(",")}}`;
62
+ }
63
+ /** The canonical payload text of `claims` (exactly the five members). */
64
+ export function canonicalPayload(claims) {
65
+ return canonicalize({
66
+ cid: claims.cid,
67
+ exp: claims.exp,
68
+ scope: [...claims.scope],
69
+ sid: claims.sid,
70
+ v: claims.v,
71
+ });
72
+ }
73
+ function isClaims(value) {
74
+ if (typeof value !== "object" || value === null || Array.isArray(value))
75
+ return false;
76
+ const claims = value;
77
+ return (claims.v === GRANT_VERSION &&
78
+ typeof claims.sid === "string" &&
79
+ claims.sid !== "" &&
80
+ typeof claims.cid === "string" &&
81
+ claims.cid !== "" &&
82
+ typeof claims.exp === "number" &&
83
+ Number.isSafeInteger(claims.exp) &&
84
+ claims.exp >= 0 &&
85
+ Array.isArray(claims.scope) &&
86
+ claims.scope.every((entry) => typeof entry === "string"));
87
+ }
88
+ /** Canonical version-1 claims from payload bytes, or `null`. */
89
+ function claimsFrom(payload) {
90
+ try {
91
+ const text = new TextDecoder("utf-8", { fatal: true }).decode(payload);
92
+ const value = JSON.parse(text);
93
+ // One spelling per grant: the payload must be its own canonical form.
94
+ return isClaims(value) && canonicalPayload(value) === text ? value : null;
95
+ }
96
+ catch {
97
+ return null;
98
+ }
99
+ }
100
+ function sign(key, payload) {
101
+ return createHmac("sha256", key).update(payload).digest();
102
+ }
103
+ /** Mint a grant. Throws on claims a daemon would call malformed, or a short key. */
104
+ export function mintGrant(key, claims) {
105
+ if (key.length < MIN_GRANT_KEY_BYTES) {
106
+ throw new RangeError(`a grant key is at least ${MIN_GRANT_KEY_BYTES} bytes`);
107
+ }
108
+ if (!isClaims(claims))
109
+ throw new TypeError("not version-1 grant claims");
110
+ const payload = new TextEncoder().encode(canonicalPayload(claims));
111
+ return `${base64UrlEncode(payload)}.${base64UrlEncode(sign(key, payload))}`;
112
+ }
113
+ /**
114
+ * Verify as the daemon does: the MAC first (constant-time), then the
115
+ * canonical form, version, ids and expiry range, then `exp > nowMs`.
116
+ */
117
+ export function verifyGrant(key, grant, nowMs) {
118
+ const refused = (reason) => ({ ok: false, reason });
119
+ if (grant.length > MAX_GRANT_BYTES)
120
+ return refused("malformed");
121
+ const dot = grant.indexOf(".");
122
+ if (dot < 0)
123
+ return refused("malformed");
124
+ const payload = base64UrlDecode(grant.slice(0, dot));
125
+ const mac = base64UrlDecode(grant.slice(dot + 1));
126
+ if (payload === null || mac === null || mac.length !== MAC_BYTES)
127
+ return refused("malformed");
128
+ if (!timingSafeEqual(sign(key, payload), mac))
129
+ return refused("bad-signature");
130
+ const claims = claimsFrom(payload);
131
+ if (claims === null)
132
+ return refused("malformed");
133
+ if (claims.exp <= nowMs)
134
+ return refused("expired");
135
+ return { ok: true, claims };
136
+ }
137
+ /** The `Authorization` value that presents `grant`. */
138
+ export function grantAuthorization(grant) {
139
+ return `Rosetta-Grant ${grant}`;
140
+ }
141
+ /**
142
+ * Read a grant — an `Authorization: Rosetta-Grant <grant>` value or the bare
143
+ * grant — WITHOUT verifying it, e.g. to learn when a held grant expires.
144
+ * `null` unless it carries canonical version-1 claims. Only a key holder
145
+ * can tell whether it is authentic.
146
+ */
147
+ export function parseGrantHeader(value) {
148
+ const text = value.trim();
149
+ const scheme = /^rosetta-grant\s+/i.exec(text);
150
+ const grant = scheme === null ? text : text.slice(scheme[0].length);
151
+ const dot = grant.indexOf(".");
152
+ if (dot < 0 || grant.length > MAX_GRANT_BYTES)
153
+ return null;
154
+ const payload = base64UrlDecode(grant.slice(0, dot));
155
+ const mac = base64UrlDecode(grant.slice(dot + 1));
156
+ if (payload === null || mac === null || mac.length !== MAC_BYTES)
157
+ return null;
158
+ const claims = claimsFrom(payload);
159
+ return claims === null ? null : { grant, claims };
160
+ }
@@ -0,0 +1,110 @@
1
+ export type * from "./generated/ApiError.js";
2
+ export type * from "./generated/AssetRef.js";
3
+ export type * from "./generated/CanonicalText.js";
4
+ export type * from "./generated/CommandResponse.js";
5
+ export type * from "./generated/AttachmentKind.js";
6
+ export type * from "./generated/AttachmentRef.js";
7
+ export type * from "./generated/AttachmentSource.js";
8
+ export type * from "./generated/AttachmentUnavailableReason.js";
9
+ export type * from "./generated/BackfillState.js";
10
+ export type * from "./generated/BoostRequest.js";
11
+ export type * from "./generated/BoostResponse.js";
12
+ export type * from "./generated/ContributionResponse.js";
13
+ export type * from "./generated/ContributionRow.js";
14
+ export type * from "./generated/CitationRef.js";
15
+ export type * from "./generated/CollaborationChannel.js";
16
+ export type * from "./generated/CollaborationEvent.js";
17
+ export type * from "./generated/CollaborationEventKind.js";
18
+ export type * from "./generated/CollaborationStatus.js";
19
+ export type * from "./generated/CollaborationTimeline.js";
20
+ export type * from "./generated/DaemonStatus.js";
21
+ export type * from "./generated/DiscoveriesResponse.js";
22
+ export type * from "./generated/DiscoveryRow.js";
23
+ export type * from "./generated/EnableRequest.js";
24
+ export type * from "./generated/EnableResponse.js";
25
+ export type * from "./generated/ErrorCode.js";
26
+ export type * from "./generated/HeatmapDay.js";
27
+ export type * from "./generated/HeatmapResponse.js";
28
+ export type * from "./generated/HourTotal.js";
29
+ export type * from "./generated/HubStatus.js";
30
+ export type * from "./generated/IngestPhase.js";
31
+ export type * from "./generated/IngestProgress.js";
32
+ export type * from "./generated/GroupDerivation.js";
33
+ export type * from "./generated/GroupKind.js";
34
+ export type * from "./generated/ModelDay.js";
35
+ export type * from "./generated/Mutation.js";
36
+ export type * from "./generated/Notice.js";
37
+ export type * from "./generated/ParticipantColor.js";
38
+ export type * from "./generated/ProjectBackfill.js";
39
+ export type * from "./generated/ProjectRow.js";
40
+ export type * from "./generated/ProjectsResponse.js";
41
+ export type * from "./generated/RuntimeBackfill.js";
42
+ export type * from "./generated/RuntimeIngestStatus.js";
43
+ export type * from "./generated/RuntimeProvenance.js";
44
+ export type * from "./generated/RuntimeRow.js";
45
+ export type * from "./generated/ResponseGroup.js";
46
+ export type * from "./generated/ResponseRuntime.js";
47
+ export type * from "./generated/ResourceRef.js";
48
+ export type * from "./generated/RuntimesResponse.js";
49
+ export type * from "./generated/SearchHit.js";
50
+ export type * from "./generated/SearchReadiness.js";
51
+ export type * from "./generated/SearchRequest.js";
52
+ export type * from "./generated/SearchResponse.js";
53
+ export type * from "./generated/SearchState.js";
54
+ export type * from "./generated/SearchBuildProgress.js";
55
+ export type * from "./generated/SearchBuildStage.js";
56
+ export type * from "./generated/ServerFrame.js";
57
+ export type * from "./generated/SessionResponse.js";
58
+ export type * from "./generated/SessionRole.js";
59
+ export type * from "./generated/SessionRow.js";
60
+ export type * from "./generated/SessionActivity.js";
61
+ export type * from "./generated/SessionDelegation.js";
62
+ export type * from "./generated/SessionsResponse.js";
63
+ export type * from "./generated/Stamp.js";
64
+ export type * from "./generated/StatusResponse.js";
65
+ export type * from "./generated/StreamState.js";
66
+ export type * from "./generated/SummaryPurpose.js";
67
+ export type * from "./generated/TimelineBody.js";
68
+ export type * from "./generated/TimelineEntry.js";
69
+ export type * from "./generated/TimelineEntryResponse.js";
70
+ export type * from "./generated/TimelineMeta.js";
71
+ export type * from "./generated/TimelineMetaArtifact.js";
72
+ export type * from "./generated/TimelineMetaArtifactSource.js";
73
+ export type * from "./generated/TimelineMetaPlan.js";
74
+ export type * from "./generated/TimelineMetaPlanSource.js";
75
+ export type * from "./generated/TimelineMetaTask.js";
76
+ export type * from "./generated/TimelineMetaWorkflow.js";
77
+ export type * from "./generated/TimelineGroup.js";
78
+ export type * from "./generated/TimelinePage.js";
79
+ export type * from "./generated/TokenSnapshot.js";
80
+ export type * from "./generated/TaskSnapshot.js";
81
+ export type * from "./generated/TaskSnapshotItem.js";
82
+ export type * from "./generated/ToolAction.js";
83
+ export type * from "./generated/ToolInteraction.js";
84
+ export type * from "./generated/StatusBasis.js";
85
+ export type * from "./generated/ToolStatus.js";
86
+ export type * from "./generated/UsageCost.js";
87
+ export type * from "./generated/UsageResponse.js";
88
+ export type * from "./generated/DayUsageResponse.js";
89
+ export type * from "./generated/ModelHour.js";
90
+ export type * from "./generated/ActivityResponse.js";
91
+ export type * from "./generated/ActivitySession.js";
92
+ export type * from "./generated/TurnSpan.js";
93
+ export type * from "./generated/TurnGap.js";
94
+ export type * from "./generated/UsageScope.js";
95
+ export type * from "./generated/PricingResponse.js";
96
+ export type * from "./generated/PricingSource.js";
97
+ export type * from "./generated/ServiceTier.js";
98
+ export type * from "./generated/WorkflowJournalKind.js";
99
+ export type * from "./generated/WorkflowJournalObservation.js";
100
+ export type * from "./generated/WorkflowAttempt.js";
101
+ export type * from "./generated/WorkflowPhase.js";
102
+ export type * from "./generated/WorkflowResultKind.js";
103
+ export type * from "./generated/WorkflowRun.js";
104
+ export type * from "./generated/WorkflowRunStatus.js";
105
+ export type * from "./generated/WorkflowUsage.js";
106
+ export type * from "./generated/WorkflowWorker.js";
107
+ export type * from "./generated/WorkflowWorkerState.js";
108
+ export type * from "./generated/serde_json/JsonValue.js";
109
+ export * from "./client.js";
110
+ export type { ImageVariant } from "./generated/ImageVariant.js";
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ export * from "./client.js";
@@ -0,0 +1,15 @@
1
+ /** Mutable internal ordering with immutable published arrays. Updates whose
2
+ * sort key is unchanged replace one slot; moved/new rows use binary insertion. */
3
+ export declare class OrderedCache<T> {
4
+ private readonly byId;
5
+ private ordered;
6
+ private published;
7
+ private readonly id;
8
+ private readonly compare;
9
+ constructor(id: (row: T) => string, compare: (a: T, b: T) => number);
10
+ get(id: string): T | undefined;
11
+ private position;
12
+ set(row: T): void;
13
+ replace(rows: readonly T[]): void;
14
+ values(): T[];
15
+ }
@@ -0,0 +1,63 @@
1
+ /** Mutable internal ordering with immutable published arrays. Updates whose
2
+ * sort key is unchanged replace one slot; moved/new rows use binary insertion. */
3
+ export class OrderedCache {
4
+ byId = new Map();
5
+ ordered = [];
6
+ published = null;
7
+ id;
8
+ compare;
9
+ constructor(id, compare) {
10
+ this.id = id;
11
+ this.compare = compare;
12
+ }
13
+ get(id) {
14
+ return this.byId.get(id);
15
+ }
16
+ position(row) {
17
+ let low = 0;
18
+ let high = this.ordered.length;
19
+ while (low < high) {
20
+ const mid = (low + high) >>> 1;
21
+ const candidate = this.ordered[mid];
22
+ if (candidate === undefined) {
23
+ // `mid` is always within `[0, ordered.length)` while `low < high`, so a hole
24
+ // here means the ordering is already corrupt. Fail loudly rather than break
25
+ // out and return a position that would splice the row into the wrong slot.
26
+ throw new Error(`OrderedCache invariant violated: no row at index ${mid} of ${this.ordered.length}`);
27
+ }
28
+ if (this.compare(candidate, row) < 0)
29
+ low = mid + 1;
30
+ else
31
+ high = mid;
32
+ }
33
+ return low;
34
+ }
35
+ set(row) {
36
+ const id = this.id(row);
37
+ const old = this.byId.get(id);
38
+ if (old === row)
39
+ return;
40
+ this.published = null;
41
+ if (old !== undefined) {
42
+ const at = this.position(old);
43
+ if (this.compare(old, row) === 0) {
44
+ this.ordered[at] = row;
45
+ this.byId.set(id, row);
46
+ return;
47
+ }
48
+ this.ordered.splice(at, 1);
49
+ }
50
+ this.ordered.splice(this.position(row), 0, row);
51
+ this.byId.set(id, row);
52
+ }
53
+ replace(rows) {
54
+ this.byId.clear();
55
+ for (const row of rows)
56
+ this.byId.set(this.id(row), row);
57
+ this.ordered = [...this.byId.values()].sort(this.compare);
58
+ this.published = null;
59
+ }
60
+ values() {
61
+ return (this.published ??= this.ordered.slice());
62
+ }
63
+ }
@@ -0,0 +1 @@
1
+ export const PROTOCOL_VERSION: number;
@@ -0,0 +1,2 @@
1
+ // Shared wire version; checked against Rust in the wire tests.
2
+ export const PROTOCOL_VERSION = 27;
package/package.json CHANGED
@@ -1,6 +1,49 @@
1
1
  {
2
2
  "name": "@vibefield/rosetta-protocol",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "import": "./dist/index.js"
11
+ },
12
+ "./protocol-version": {
13
+ "types": "./dist/protocol-version.d.mts",
14
+ "import": "./dist/protocol-version.mjs"
15
+ },
16
+ "./grants": {
17
+ "types": "./dist/grants.d.ts",
18
+ "import": "./dist/grants.js"
19
+ }
20
+ },
21
+ "scripts": {
22
+ "build": "node ../../tools/npm/build.mjs",
23
+ "prepack": "npm run build",
24
+ "typecheck": "tsc -p tsconfig.json",
25
+ "pretest": "npm run build",
26
+ "test": "node --test test/*.test.mjs"
27
+ },
28
+ "files": [
29
+ "dist"
30
+ ],
31
+ "license": "UNLICENSED",
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "git+https://github.com/vibefield/rosetta.git",
35
+ "directory": "clients/ts"
36
+ },
37
+ "publishConfig": {
38
+ "access": "public",
39
+ "registry": "https://registry.npmjs.org/"
40
+ },
41
+ "description": "Rosetta protocol types, transport client, subscriptions, and session grants.",
42
+ "sideEffects": false,
43
+ "engines": {
44
+ "node": ">=22.18"
45
+ },
46
+ "devDependencies": {
47
+ "typescript": "5.9.3"
48
+ }
49
+ }