@opendatalabs/personal-server-ts-core 1.33.7 → 1.34.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 (341) hide show
  1. package/dist/additions/budget.d.ts +28 -0
  2. package/dist/additions/budget.d.ts.map +1 -0
  3. package/dist/additions/budget.js +119 -0
  4. package/dist/additions/budget.js.map +1 -0
  5. package/dist/additions/durable.d.ts +64 -0
  6. package/dist/additions/durable.d.ts.map +1 -0
  7. package/dist/additions/durable.js +591 -0
  8. package/dist/additions/durable.js.map +1 -0
  9. package/dist/additions/first-added.d.ts +32 -48
  10. package/dist/additions/first-added.d.ts.map +1 -1
  11. package/dist/additions/first-added.js +68 -123
  12. package/dist/additions/first-added.js.map +1 -1
  13. package/dist/additions/index.d.ts +3 -0
  14. package/dist/additions/index.d.ts.map +1 -1
  15. package/dist/additions/index.js +3 -0
  16. package/dist/additions/index.js.map +1 -1
  17. package/dist/additions/ledger-store.js +1 -1
  18. package/dist/additions/record-rules.d.ts.map +1 -1
  19. package/dist/additions/record-rules.js +7 -0
  20. package/dist/additions/record-rules.js.map +1 -1
  21. package/dist/additions/summary.d.ts +88 -1
  22. package/dist/additions/summary.d.ts.map +1 -1
  23. package/dist/additions/summary.js +173 -8
  24. package/dist/additions/summary.js.map +1 -1
  25. package/dist/additions/version-inventory.d.ts +80 -0
  26. package/dist/additions/version-inventory.d.ts.map +1 -0
  27. package/dist/additions/version-inventory.js +232 -0
  28. package/dist/additions/version-inventory.js.map +1 -0
  29. package/dist/api/index.d.ts +70 -2
  30. package/dist/api/index.d.ts.map +1 -1
  31. package/dist/api/index.js +506 -79
  32. package/dist/api/index.js.map +1 -1
  33. package/dist/auth/index.d.ts +1 -1
  34. package/dist/auth/index.d.ts.map +1 -1
  35. package/dist/auth/index.js +1 -1
  36. package/dist/auth/index.js.map +1 -1
  37. package/dist/auth/request.d.ts +6 -0
  38. package/dist/auth/request.d.ts.map +1 -1
  39. package/dist/auth/request.js +66 -4
  40. package/dist/auth/request.js.map +1 -1
  41. package/dist/contracts/data.d.ts +54 -8
  42. package/dist/contracts/data.d.ts.map +1 -1
  43. package/dist/contracts/data.js +178 -35
  44. package/dist/contracts/data.js.map +1 -1
  45. package/dist/contracts/index.d.ts +1 -1
  46. package/dist/contracts/index.d.ts.map +1 -1
  47. package/dist/derivatives/registration.d.ts +0 -5
  48. package/dist/derivatives/registration.d.ts.map +1 -1
  49. package/dist/derivatives/registration.js +2 -1
  50. package/dist/derivatives/registration.js.map +1 -1
  51. package/dist/errors/pdpp-catalog.d.ts +36 -0
  52. package/dist/errors/pdpp-catalog.d.ts.map +1 -0
  53. package/dist/errors/pdpp-catalog.js +86 -0
  54. package/dist/errors/pdpp-catalog.js.map +1 -0
  55. package/dist/grants/index.d.ts +2 -0
  56. package/dist/grants/index.d.ts.map +1 -1
  57. package/dist/grants/index.js +4 -0
  58. package/dist/grants/index.js.map +1 -1
  59. package/dist/grants/pdpp-binding-store.d.ts +89 -0
  60. package/dist/grants/pdpp-binding-store.d.ts.map +1 -0
  61. package/dist/grants/pdpp-binding-store.js +112 -0
  62. package/dist/grants/pdpp-binding-store.js.map +1 -0
  63. package/dist/grants/pdpp-binding.d.ts +169 -0
  64. package/dist/grants/pdpp-binding.d.ts.map +1 -0
  65. package/dist/grants/pdpp-binding.js +236 -0
  66. package/dist/grants/pdpp-binding.js.map +1 -0
  67. package/dist/legacy-projection/bindings.d.ts +28 -1
  68. package/dist/legacy-projection/bindings.d.ts.map +1 -1
  69. package/dist/legacy-projection/bindings.js +622 -189
  70. package/dist/legacy-projection/bindings.js.map +1 -1
  71. package/dist/legacy-projection/claude-source-record.d.ts +22 -0
  72. package/dist/legacy-projection/claude-source-record.d.ts.map +1 -0
  73. package/dist/legacy-projection/claude-source-record.js +360 -0
  74. package/dist/legacy-projection/claude-source-record.js.map +1 -0
  75. package/dist/legacy-projection/declared-text.d.ts +41 -0
  76. package/dist/legacy-projection/declared-text.d.ts.map +1 -0
  77. package/dist/legacy-projection/declared-text.js +199 -0
  78. package/dist/legacy-projection/declared-text.js.map +1 -0
  79. package/dist/legacy-projection/github-browser-bindings.d.ts.map +1 -1
  80. package/dist/legacy-projection/github-browser-bindings.js +89 -5
  81. package/dist/legacy-projection/github-browser-bindings.js.map +1 -1
  82. package/dist/legacy-projection/github-legacy-fields.d.ts +6 -0
  83. package/dist/legacy-projection/github-legacy-fields.d.ts.map +1 -0
  84. package/dist/legacy-projection/github-legacy-fields.js +202 -0
  85. package/dist/legacy-projection/github-legacy-fields.js.map +1 -0
  86. package/dist/legacy-projection/index.d.ts +3 -1
  87. package/dist/legacy-projection/index.d.ts.map +1 -1
  88. package/dist/legacy-projection/index.js +49 -1
  89. package/dist/legacy-projection/index.js.map +1 -1
  90. package/dist/legacy-projection/oura-browser-bindings.d.ts.map +1 -1
  91. package/dist/legacy-projection/oura-browser-bindings.js +43 -41
  92. package/dist/legacy-projection/oura-browser-bindings.js.map +1 -1
  93. package/dist/legacy-projection/types.d.ts +38 -2
  94. package/dist/legacy-projection/types.d.ts.map +1 -1
  95. package/dist/mcp/connection-api.d.ts.map +1 -1
  96. package/dist/mcp/connection-api.js +4 -0
  97. package/dist/mcp/connection-api.js.map +1 -1
  98. package/dist/mcp/index.d.ts +1 -0
  99. package/dist/mcp/index.d.ts.map +1 -1
  100. package/dist/mcp/index.js +1 -0
  101. package/dist/mcp/index.js.map +1 -1
  102. package/dist/mcp/oauth-redirect.d.ts +14 -0
  103. package/dist/mcp/oauth-redirect.d.ts.map +1 -0
  104. package/dist/mcp/oauth-redirect.js +51 -0
  105. package/dist/mcp/oauth-redirect.js.map +1 -0
  106. package/dist/mcp/resources.d.ts.map +1 -1
  107. package/dist/mcp/resources.js +3 -0
  108. package/dist/mcp/resources.js.map +1 -1
  109. package/dist/mcp/tools.d.ts.map +1 -1
  110. package/dist/mcp/tools.js +11 -2
  111. package/dist/mcp/tools.js.map +1 -1
  112. package/dist/pdpp/approval.d.ts +271 -0
  113. package/dist/pdpp/approval.d.ts.map +1 -0
  114. package/dist/pdpp/approval.js +467 -0
  115. package/dist/pdpp/approval.js.map +1 -0
  116. package/dist/pdpp/client-identity.d.ts +88 -0
  117. package/dist/pdpp/client-identity.d.ts.map +1 -0
  118. package/dist/pdpp/client-identity.js +196 -0
  119. package/dist/pdpp/client-identity.js.map +1 -0
  120. package/dist/pdpp/client-metadata.d.ts +95 -0
  121. package/dist/pdpp/client-metadata.d.ts.map +1 -0
  122. package/dist/pdpp/client-metadata.js +96 -0
  123. package/dist/pdpp/client-metadata.js.map +1 -0
  124. package/dist/pdpp/commitments.d.ts +75 -0
  125. package/dist/pdpp/commitments.d.ts.map +1 -0
  126. package/dist/pdpp/commitments.js +113 -0
  127. package/dist/pdpp/commitments.js.map +1 -0
  128. package/dist/pdpp/declaration.d.ts +118 -0
  129. package/dist/pdpp/declaration.d.ts.map +1 -0
  130. package/dist/pdpp/declaration.js +836 -0
  131. package/dist/pdpp/declaration.js.map +1 -0
  132. package/dist/pdpp/index.d.ts +37 -0
  133. package/dist/pdpp/index.d.ts.map +1 -0
  134. package/dist/pdpp/index.js +23 -0
  135. package/dist/pdpp/index.js.map +1 -0
  136. package/dist/pdpp/issuance.d.ts +126 -0
  137. package/dist/pdpp/issuance.d.ts.map +1 -0
  138. package/dist/pdpp/issuance.js +180 -0
  139. package/dist/pdpp/issuance.js.map +1 -0
  140. package/dist/pdpp/pkce.d.ts +53 -0
  141. package/dist/pdpp/pkce.d.ts.map +1 -0
  142. package/dist/pdpp/pkce.js +109 -0
  143. package/dist/pdpp/pkce.js.map +1 -0
  144. package/dist/pdpp/redirect.d.ts +60 -0
  145. package/dist/pdpp/redirect.d.ts.map +1 -0
  146. package/dist/pdpp/redirect.js +125 -0
  147. package/dist/pdpp/redirect.js.map +1 -0
  148. package/dist/pdpp/resolve.d.ts +109 -0
  149. package/dist/pdpp/resolve.d.ts.map +1 -0
  150. package/dist/pdpp/resolve.js +393 -0
  151. package/dist/pdpp/resolve.js.map +1 -0
  152. package/dist/pdpp/review.d.ts +280 -0
  153. package/dist/pdpp/review.d.ts.map +1 -0
  154. package/dist/pdpp/review.js +205 -0
  155. package/dist/pdpp/review.js.map +1 -0
  156. package/dist/pdpp/selection.d.ts +50 -0
  157. package/dist/pdpp/selection.d.ts.map +1 -0
  158. package/dist/pdpp/selection.js +442 -0
  159. package/dist/pdpp/selection.js.map +1 -0
  160. package/dist/pdpp/store.d.ts +228 -0
  161. package/dist/pdpp/store.d.ts.map +1 -0
  162. package/dist/pdpp/store.js +542 -0
  163. package/dist/pdpp/store.js.map +1 -0
  164. package/dist/pdpp/tokens.d.ts +181 -0
  165. package/dist/pdpp/tokens.d.ts.map +1 -0
  166. package/dist/pdpp/tokens.js +419 -0
  167. package/dist/pdpp/tokens.js.map +1 -0
  168. package/dist/pdpp/types.d.ts +441 -0
  169. package/dist/pdpp/types.d.ts.map +1 -0
  170. package/dist/pdpp/types.js +61 -0
  171. package/dist/pdpp/types.js.map +1 -0
  172. package/dist/pdpp-version.d.ts +28 -0
  173. package/dist/pdpp-version.d.ts.map +1 -0
  174. package/dist/pdpp-version.js +28 -0
  175. package/dist/pdpp-version.js.map +1 -0
  176. package/dist/policy/data-read.d.ts +24 -0
  177. package/dist/policy/data-read.d.ts.map +1 -1
  178. package/dist/policy/data-read.js +60 -3
  179. package/dist/policy/data-read.js.map +1 -1
  180. package/dist/policy/data-write.d.ts.map +1 -1
  181. package/dist/policy/data-write.js +3 -0
  182. package/dist/policy/data-write.js.map +1 -1
  183. package/dist/policy/index.d.ts +1 -0
  184. package/dist/policy/index.d.ts.map +1 -1
  185. package/dist/policy/index.js +1 -0
  186. package/dist/policy/index.js.map +1 -1
  187. package/dist/policy/reserved-scopes.d.ts +3 -0
  188. package/dist/policy/reserved-scopes.d.ts.map +1 -0
  189. package/dist/policy/reserved-scopes.js +5 -0
  190. package/dist/policy/reserved-scopes.js.map +1 -0
  191. package/dist/ports/index.d.ts +63 -0
  192. package/dist/ports/index.d.ts.map +1 -1
  193. package/dist/ports/index.js.map +1 -1
  194. package/dist/ports/pdpp-auth.d.ts +129 -0
  195. package/dist/ports/pdpp-auth.d.ts.map +1 -0
  196. package/dist/ports/pdpp-auth.js +60 -0
  197. package/dist/ports/pdpp-auth.js.map +1 -0
  198. package/dist/ports/pdpp-auth.test-utils.d.ts +9 -0
  199. package/dist/ports/pdpp-auth.test-utils.d.ts.map +1 -0
  200. package/dist/ports/pdpp-auth.test-utils.js +18 -0
  201. package/dist/ports/pdpp-auth.test-utils.js.map +1 -0
  202. package/dist/schemas/server-config.d.ts +44 -0
  203. package/dist/schemas/server-config.d.ts.map +1 -1
  204. package/dist/schemas/server-config.js +91 -0
  205. package/dist/schemas/server-config.js.map +1 -1
  206. package/dist/signing/request-signer.d.ts +2 -0
  207. package/dist/signing/request-signer.d.ts.map +1 -1
  208. package/dist/signing/request-signer.js +1 -0
  209. package/dist/signing/request-signer.js.map +1 -1
  210. package/dist/storage/adapters/interface.d.ts +3 -0
  211. package/dist/storage/adapters/interface.d.ts.map +1 -1
  212. package/dist/storage/adapters/vana-audience.d.ts +12 -0
  213. package/dist/storage/adapters/vana-audience.d.ts.map +1 -0
  214. package/dist/storage/adapters/vana-audience.js +72 -0
  215. package/dist/storage/adapters/vana-audience.js.map +1 -0
  216. package/dist/storage/adapters/vana.d.ts +2 -0
  217. package/dist/storage/adapters/vana.d.ts.map +1 -1
  218. package/dist/storage/adapters/vana.js +53 -20
  219. package/dist/storage/adapters/vana.js.map +1 -1
  220. package/dist/storage/canonical-legacy-projection.d.ts +262 -0
  221. package/dist/storage/canonical-legacy-projection.d.ts.map +1 -0
  222. package/dist/storage/canonical-legacy-projection.js +761 -0
  223. package/dist/storage/canonical-legacy-projection.js.map +1 -0
  224. package/dist/storage/index/manager.d.ts +29 -2
  225. package/dist/storage/index/manager.d.ts.map +1 -1
  226. package/dist/storage/index/schema.d.ts +1 -1
  227. package/dist/storage/index/schema.js +1 -1
  228. package/dist/storage/index/types.d.ts +7 -1
  229. package/dist/storage/index/types.d.ts.map +1 -1
  230. package/dist/storage/legacy-projection.d.ts +4 -3
  231. package/dist/storage/legacy-projection.d.ts.map +1 -1
  232. package/dist/storage/legacy-projection.js +145 -42
  233. package/dist/storage/legacy-projection.js.map +1 -1
  234. package/dist/storage/legacy-scope-coverage-exceptions.d.ts +8 -0
  235. package/dist/storage/legacy-scope-coverage-exceptions.d.ts.map +1 -0
  236. package/dist/storage/legacy-scope-coverage-exceptions.js +10 -0
  237. package/dist/storage/legacy-scope-coverage-exceptions.js.map +1 -0
  238. package/dist/storage/legacy-scope-coverage.d.ts +53 -0
  239. package/dist/storage/legacy-scope-coverage.d.ts.map +1 -0
  240. package/dist/storage/legacy-scope-coverage.js +403 -0
  241. package/dist/storage/legacy-scope-coverage.js.map +1 -0
  242. package/dist/storage/legacy-scope-entity-keys.d.ts +4 -0
  243. package/dist/storage/legacy-scope-entity-keys.d.ts.map +1 -0
  244. package/dist/storage/legacy-scope-entity-keys.js +92 -0
  245. package/dist/storage/legacy-scope-entity-keys.js.map +1 -0
  246. package/dist/storage/legacy-scope-view.d.ts +154 -0
  247. package/dist/storage/legacy-scope-view.d.ts.map +1 -0
  248. package/dist/storage/legacy-scope-view.js +735 -0
  249. package/dist/storage/legacy-scope-view.js.map +1 -0
  250. package/dist/storage/pdpp-records/completion.d.ts +91 -0
  251. package/dist/storage/pdpp-records/completion.d.ts.map +1 -0
  252. package/dist/storage/pdpp-records/completion.js +170 -0
  253. package/dist/storage/pdpp-records/completion.js.map +1 -0
  254. package/dist/storage/pdpp-records/cursor.d.ts +41 -0
  255. package/dist/storage/pdpp-records/cursor.d.ts.map +1 -0
  256. package/dist/storage/pdpp-records/cursor.js +49 -0
  257. package/dist/storage/pdpp-records/cursor.js.map +1 -0
  258. package/dist/storage/pdpp-records/declaration-witness.d.ts +58 -0
  259. package/dist/storage/pdpp-records/declaration-witness.d.ts.map +1 -0
  260. package/dist/storage/pdpp-records/declaration-witness.js +230 -0
  261. package/dist/storage/pdpp-records/declaration-witness.js.map +1 -0
  262. package/dist/storage/pdpp-records/enforcement.d.ts +52 -0
  263. package/dist/storage/pdpp-records/enforcement.d.ts.map +1 -0
  264. package/dist/storage/pdpp-records/enforcement.js +116 -0
  265. package/dist/storage/pdpp-records/enforcement.js.map +1 -0
  266. package/dist/storage/pdpp-records/index.d.ts +5 -0
  267. package/dist/storage/pdpp-records/index.d.ts.map +1 -0
  268. package/dist/storage/pdpp-records/index.js +5 -0
  269. package/dist/storage/pdpp-records/index.js.map +1 -0
  270. package/dist/storage/pdpp-records/ingest-plan.d.ts +39 -0
  271. package/dist/storage/pdpp-records/ingest-plan.d.ts.map +1 -0
  272. package/dist/storage/pdpp-records/ingest-plan.js +103 -0
  273. package/dist/storage/pdpp-records/ingest-plan.js.map +1 -0
  274. package/dist/storage/pdpp-records/interface.d.ts +104 -0
  275. package/dist/storage/pdpp-records/interface.d.ts.map +1 -0
  276. package/dist/storage/pdpp-records/interface.js +2 -0
  277. package/dist/storage/pdpp-records/interface.js.map +1 -0
  278. package/dist/storage/pdpp-records/memory-store.d.ts +9 -0
  279. package/dist/storage/pdpp-records/memory-store.d.ts.map +1 -0
  280. package/dist/storage/pdpp-records/memory-store.js +466 -0
  281. package/dist/storage/pdpp-records/memory-store.js.map +1 -0
  282. package/dist/storage/pdpp-records/portable.d.ts +9 -0
  283. package/dist/storage/pdpp-records/portable.d.ts.map +1 -0
  284. package/dist/storage/pdpp-records/portable.js +8 -0
  285. package/dist/storage/pdpp-records/portable.js.map +1 -0
  286. package/dist/storage/pdpp-records/read-port.d.ts +44 -0
  287. package/dist/storage/pdpp-records/read-port.d.ts.map +1 -0
  288. package/dist/storage/pdpp-records/read-port.js +22 -0
  289. package/dist/storage/pdpp-records/read-port.js.map +1 -0
  290. package/dist/storage/pdpp-records/record-key.d.ts +52 -0
  291. package/dist/storage/pdpp-records/record-key.d.ts.map +1 -0
  292. package/dist/storage/pdpp-records/record-key.js +97 -0
  293. package/dist/storage/pdpp-records/record-key.js.map +1 -0
  294. package/dist/storage/pdpp-records/schema.d.ts +41 -0
  295. package/dist/storage/pdpp-records/schema.d.ts.map +1 -0
  296. package/dist/storage/pdpp-records/schema.js +153 -0
  297. package/dist/storage/pdpp-records/schema.js.map +1 -0
  298. package/dist/storage/pdpp-records/stream-declaration.d.ts +88 -0
  299. package/dist/storage/pdpp-records/stream-declaration.d.ts.map +1 -0
  300. package/dist/storage/pdpp-records/stream-declaration.js +57 -0
  301. package/dist/storage/pdpp-records/stream-declaration.js.map +1 -0
  302. package/dist/storage/pdpp-records/types.d.ts +138 -0
  303. package/dist/storage/pdpp-records/types.d.ts.map +1 -0
  304. package/dist/storage/pdpp-records/types.js +38 -0
  305. package/dist/storage/pdpp-records/types.js.map +1 -0
  306. package/dist/sync/data-point-feed.d.ts +3 -0
  307. package/dist/sync/data-point-feed.d.ts.map +1 -1
  308. package/dist/sync/data-point-feed.js +17 -1
  309. package/dist/sync/data-point-feed.js.map +1 -1
  310. package/dist/sync/delete-data-port.d.ts +2 -0
  311. package/dist/sync/delete-data-port.d.ts.map +1 -1
  312. package/dist/sync/delete-data-port.js +1 -1
  313. package/dist/sync/delete-data-port.js.map +1 -1
  314. package/dist/sync/engine/sync-manager.d.ts.map +1 -1
  315. package/dist/sync/engine/sync-manager.js +5 -2
  316. package/dist/sync/engine/sync-manager.js.map +1 -1
  317. package/dist/sync/index.d.ts +3 -1
  318. package/dist/sync/index.d.ts.map +1 -1
  319. package/dist/sync/index.js +4 -0
  320. package/dist/sync/index.js.map +1 -1
  321. package/dist/sync/pdpp-import.d.ts +192 -0
  322. package/dist/sync/pdpp-import.d.ts.map +1 -0
  323. package/dist/sync/pdpp-import.js +441 -0
  324. package/dist/sync/pdpp-import.js.map +1 -0
  325. package/dist/sync/scope-deletions.d.ts +10 -0
  326. package/dist/sync/scope-deletions.d.ts.map +1 -1
  327. package/dist/sync/scope-deletions.js +40 -7
  328. package/dist/sync/scope-deletions.js.map +1 -1
  329. package/dist/sync/workers/download.d.ts +14 -0
  330. package/dist/sync/workers/download.d.ts.map +1 -1
  331. package/dist/sync/workers/download.js +149 -13
  332. package/dist/sync/workers/download.js.map +1 -1
  333. package/dist/sync/workers/upload.d.ts +2 -0
  334. package/dist/sync/workers/upload.d.ts.map +1 -1
  335. package/dist/sync/workers/upload.js +7 -0
  336. package/dist/sync/workers/upload.js.map +1 -1
  337. package/dist/test-utils/memory-storage.d.ts +1 -1
  338. package/dist/test-utils/memory-storage.d.ts.map +1 -1
  339. package/dist/test-utils/memory-storage.js +11 -5
  340. package/dist/test-utils/memory-storage.js.map +1 -1
  341. package/package.json +54 -4
@@ -0,0 +1,53 @@
1
+ /**
2
+ * A pure coverage check for a latest legacy body and its canonical projection.
3
+ * Entity arrays use stable keys. Same-time comparisons retain relative order;
4
+ * newer canonical state may reorder or, with proof, delete entities.
5
+ * Diagnostics contain paths and counts, never entity keys or field values.
6
+ */
7
+ import type { ProjectionOmission } from "../legacy-projection/types.js";
8
+ export interface LegacyCoverageSchema {
9
+ type?: string | readonly string[];
10
+ properties?: Record<string, LegacyCoverageSchema>;
11
+ items?: LegacyCoverageSchema;
12
+ schema?: LegacyCoverageSchema;
13
+ }
14
+ export interface LegacyCoverageOptions {
15
+ /** Scope being compared. */
16
+ scope?: string;
17
+ /** Raw-value-backed omissions emitted by this exact canonical projection. */
18
+ projectionOmissions?: readonly ProjectionOmission[];
19
+ /** JSON paths to entity arrays; [] marks each array element, e.g. $.posts[].comments. */
20
+ entityKeys?: Readonly<Record<string, readonly string[]>>;
21
+ /** Legacy payload schema. An `id` or `uuid` item field supplies a key. */
22
+ schema?: LegacyCoverageSchema;
23
+ /** Maximum canonical/legacy byte ratio before payload growth can refuse takeover. Default 1.5. */
24
+ maxPayloadRatio?: number;
25
+ /** Minimum extra bytes required before payload growth can refuse takeover. Default 256 KiB. */
26
+ maxExtraBytes?: number;
27
+ /** True only when the canonical state is known to follow the legacy head. */
28
+ canonicalNewer?: boolean;
29
+ /** True only with accepted completion proof for a replacement newer than the legacy head. */
30
+ allowProvenDeletion?: boolean;
31
+ }
32
+ export type LegacyCoverageReason = "no_stable_key" | "missing_entity" | "missing_field" | "field_mismatch" | "type_mismatch" | "timestamp_format" | "identity_mismatch" | "creation_mismatch" | "array_order" | "payload_growth" | "missing_raw_blob" | "projection_unavailable";
33
+ export interface LegacyCoverageVerdict {
34
+ comparisonCase: "same_time" | "canonical_newer";
35
+ covered: boolean;
36
+ reason: LegacyCoverageReason | null;
37
+ /** Counts include accepted proven deletions, which do not block coverage. */
38
+ reasonCounts: Record<LegacyCoverageReason, number>;
39
+ /** Reviewed legacy defects and provenance-backed omissions used in this evaluation. */
40
+ appliedExceptions: {
41
+ path: string;
42
+ reason: string;
43
+ authority: "canonical";
44
+ }[];
45
+ missingEntityCount: number;
46
+ mismatchedFieldPaths: string[];
47
+ legacyBytes: number;
48
+ canonicalBytes: number;
49
+ byteDelta: number;
50
+ }
51
+ /** Compare JSON payloads, not file envelopes: metadata is outside the coverage rule. */
52
+ export declare function compareLegacyCoverage(legacyPayload: unknown, canonicalPayload: unknown, options?: LegacyCoverageOptions): LegacyCoverageVerdict;
53
+ //# sourceMappingURL=legacy-scope-coverage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy-scope-coverage.d.ts","sourceRoot":"","sources":["../../src/storage/legacy-scope-coverage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAGxE,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAClD,KAAK,CAAC,EAAE,oBAAoB,CAAC;IAC7B,MAAM,CAAC,EAAE,oBAAoB,CAAC;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,mBAAmB,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACpD,yFAAyF;IACzF,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;IACzD,0EAA0E;IAC1E,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,kGAAkG;IAClG,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,+FAA+F;IAC/F,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6EAA6E;IAC7E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,6FAA6F;IAC7F,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,MAAM,oBAAoB,GAC5B,eAAe,GACf,gBAAgB,GAChB,eAAe,GACf,gBAAgB,GAChB,eAAe,GACf,kBAAkB,GAClB,mBAAmB,GACnB,mBAAmB,GACnB,aAAa,GACb,gBAAgB,GAChB,kBAAkB,GAClB,wBAAwB,CAAC;AAE7B,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,WAAW,GAAG,iBAAiB,CAAC;IAChD,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACpC,6EAA6E;IAC7E,YAAY,EAAE,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC;IACnD,uFAAuF;IACvF,iBAAiB,EAAE;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,WAAW,CAAC;KACxB,EAAE,CAAC;IACJ,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AA6GD,wFAAwF;AACxF,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,OAAO,EACtB,gBAAgB,EAAE,OAAO,EACzB,OAAO,GAAE,qBAA0B,GAClC,qBAAqB,CA+XvB"}
@@ -0,0 +1,403 @@
1
+ import { LEGACY_COVERAGE_EXCEPTIONS } from "./legacy-scope-coverage-exceptions.js";
2
+ const METADATA_FIELDS = new Set([
3
+ "fetched_at",
4
+ "collectedAt",
5
+ "collected_at",
6
+ "synced_at",
7
+ ]);
8
+ const CREATION_FIELDS = new Set([
9
+ "created_at",
10
+ "createdAt",
11
+ "createdTime",
12
+ "creationTime",
13
+ "create_time",
14
+ "creationDate",
15
+ "dateCreated",
16
+ "creation_time",
17
+ ]);
18
+ function jsonType(value) {
19
+ if (value === null)
20
+ return "null";
21
+ if (Array.isArray(value))
22
+ return "array";
23
+ return typeof value === "object" ? "object" : typeof value;
24
+ }
25
+ function timestampFormat(value) {
26
+ if (typeof value === "number")
27
+ return "epoch_number";
28
+ if (typeof value !== "string")
29
+ return jsonType(value);
30
+ if (/^\d{4}-\d{2}-\d{2}$/.test(value))
31
+ return "date_only";
32
+ if (/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}/.test(value))
33
+ return "iso_datetime";
34
+ return "other_string";
35
+ }
36
+ function isTimestampLikeValue(value) {
37
+ const format = timestampFormat(value);
38
+ return format === "iso_datetime" || format === "date_only";
39
+ }
40
+ function sameIsoInstantAtMillisecond(legacy, canonical) {
41
+ if (timestampFormat(legacy) !== "iso_datetime" ||
42
+ timestampFormat(canonical) !== "iso_datetime") {
43
+ return false;
44
+ }
45
+ const legacyMilliseconds = Date.parse(legacy);
46
+ const canonicalMilliseconds = Date.parse(canonical);
47
+ return (Number.isFinite(legacyMilliseconds) &&
48
+ Number.isFinite(canonicalMilliseconds) &&
49
+ legacyMilliseconds === canonicalMilliseconds);
50
+ }
51
+ function isTimestampField(field) {
52
+ return /(?:^date$|Date$|_date$|^time$|Time$|_time$|At$|_at$|timestamp|Timestamp$)/.test(field);
53
+ }
54
+ function isCreationField(field) {
55
+ return (CREATION_FIELDS.has(field) ||
56
+ /(?:^|_)created(?:_at|_on|_time|_date)?$/.test(field) ||
57
+ /Created(?:At|On|Time|Date)?$/.test(field));
58
+ }
59
+ function isIdentityField(field) {
60
+ return field === "id" || field === "uuid" || /(?:Id|_id)$/.test(field);
61
+ }
62
+ function object(value) {
63
+ return value !== null && typeof value === "object" && !Array.isArray(value);
64
+ }
65
+ function stableKey(value, fields) {
66
+ if (!object(value) || fields.length === 0)
67
+ return null;
68
+ const parts = [];
69
+ for (const field of fields) {
70
+ const part = value[field];
71
+ if ((typeof part !== "string" &&
72
+ typeof part !== "number" &&
73
+ typeof part !== "boolean") ||
74
+ part === "" ||
75
+ (typeof part === "number" && !Number.isFinite(part))) {
76
+ return null;
77
+ }
78
+ parts.push(part);
79
+ }
80
+ return JSON.stringify(parts);
81
+ }
82
+ function schemaKeys(schema) {
83
+ const properties = schema?.items?.properties;
84
+ if (properties?.id)
85
+ return ["id"];
86
+ if (properties?.uuid)
87
+ return ["uuid"];
88
+ return [];
89
+ }
90
+ /** Compare JSON payloads, not file envelopes: metadata is outside the coverage rule. */
91
+ export function compareLegacyCoverage(legacyPayload, canonicalPayload, options = {}) {
92
+ const legacyBytes = new TextEncoder().encode(JSON.stringify(legacyPayload)).length;
93
+ const canonicalBytes = new TextEncoder().encode(JSON.stringify(canonicalPayload)).length;
94
+ const byteDelta = canonicalBytes - legacyBytes;
95
+ const comparisonCase = options.canonicalNewer
96
+ ? "canonical_newer"
97
+ : "same_time";
98
+ const deletionAllowed = options.canonicalNewer === true && options.allowProvenDeletion === true;
99
+ const paths = new Set();
100
+ const appliedExceptions = new Map();
101
+ const blockedReasons = new Set();
102
+ const reasonCounts = {
103
+ no_stable_key: 0,
104
+ missing_entity: 0,
105
+ missing_field: 0,
106
+ field_mismatch: 0,
107
+ type_mismatch: 0,
108
+ timestamp_format: 0,
109
+ identity_mismatch: 0,
110
+ creation_mismatch: 0,
111
+ array_order: 0,
112
+ payload_growth: 0,
113
+ missing_raw_blob: 0,
114
+ projection_unavailable: 0,
115
+ };
116
+ let missingEntityCount = 0;
117
+ function mark(reason, path, blocks = true, count = 1) {
118
+ reasonCounts[reason] += count;
119
+ if (blocks)
120
+ blockedReasons.add(reason);
121
+ if (path)
122
+ paths.add(path);
123
+ }
124
+ function compare(legacy, canonical, path, arrayPath, schema, field = undefined, identityFields = [], entityPath, entityKey) {
125
+ if (jsonType(legacy) !== jsonType(canonical)) {
126
+ mark("type_mismatch", path);
127
+ return;
128
+ }
129
+ if (Array.isArray(legacy)) {
130
+ // Equal JSON types above establish that canonical is an array.
131
+ if (!Array.isArray(canonical))
132
+ return;
133
+ const entityFields = options.entityKeys?.[arrayPath] ?? schemaKeys(schema);
134
+ if (legacy.length === 0 ||
135
+ legacy.some((item) => item !== null && typeof item === "object")) {
136
+ // There are no old entity keys to lose from an empty array. Newer
137
+ // entities are additions under the same rule as a nonempty array.
138
+ if (legacy.length === 0) {
139
+ if (entityFields.length > 0)
140
+ return;
141
+ }
142
+ else {
143
+ const fields = entityFields;
144
+ if (fields.length === 0) {
145
+ mark("no_stable_key", path);
146
+ return;
147
+ }
148
+ const legacyKeys = new Set();
149
+ const canonicalPositions = new Map();
150
+ for (const item of legacy) {
151
+ const key = stableKey(item, fields);
152
+ if (key === null || legacyKeys.has(key)) {
153
+ mark("no_stable_key", path);
154
+ return;
155
+ }
156
+ legacyKeys.add(key);
157
+ }
158
+ for (const [index, item] of canonical.entries()) {
159
+ const key = stableKey(item, fields);
160
+ if (key === null)
161
+ continue;
162
+ if (canonicalPositions.has(key)) {
163
+ mark("no_stable_key", path);
164
+ return;
165
+ }
166
+ canonicalPositions.set(key, index);
167
+ }
168
+ let lastPosition = -1;
169
+ for (const [index, item] of legacy.entries()) {
170
+ const key = stableKey(item, fields);
171
+ // Every legacy key was checked above.
172
+ const position = canonicalPositions.get(key);
173
+ if (position === undefined) {
174
+ missingEntityCount += 1;
175
+ mark("missing_entity", undefined, !deletionAllowed);
176
+ continue;
177
+ }
178
+ if (!options.canonicalNewer && position < lastPosition)
179
+ mark("array_order", path);
180
+ lastPosition = position;
181
+ compare(item, canonical[position], `${path}[${index}]`, `${arrayPath}[]`, schema?.items, undefined, fields, `${arrayPath}[]`, fields.length === 1 &&
182
+ object(item) &&
183
+ (typeof item[fields[0]] === "string" ||
184
+ typeof item[fields[0]] === "number" ||
185
+ typeof item[fields[0]] === "boolean")
186
+ ? item[fields[0]]
187
+ : undefined);
188
+ }
189
+ return;
190
+ }
191
+ }
192
+ if (legacy.length === 0) {
193
+ if (!options.canonicalNewer && canonical.length > 0)
194
+ mark("array_order", path);
195
+ return;
196
+ }
197
+ // Scalar values have no identity key, so newer state must retain the
198
+ // legacy multiset. Same-time state must retain the exact sequence.
199
+ const encoded = (value) => {
200
+ const timestampLike = (field !== undefined && isTimestampField(field)) ||
201
+ isTimestampLikeValue(value);
202
+ if (timestampLike && timestampFormat(value) === "iso_datetime") {
203
+ const milliseconds = Date.parse(value);
204
+ if (Number.isFinite(milliseconds))
205
+ return `iso_datetime:${milliseconds}`;
206
+ }
207
+ return JSON.stringify(value);
208
+ };
209
+ const available = canonical.map(encoded);
210
+ const expected = legacy.map(encoded);
211
+ const expectedTypes = new Set(legacy.map(jsonType));
212
+ if (canonical.some((value) => !expectedTypes.has(jsonType(value)))) {
213
+ mark("type_mismatch", path);
214
+ return;
215
+ }
216
+ if (field !== undefined &&
217
+ isTimestampField(field) &&
218
+ canonical.some((value) => {
219
+ const expectedFormats = new Set(legacy.map(timestampFormat));
220
+ return !expectedFormats.has(timestampFormat(value));
221
+ })) {
222
+ mark("timestamp_format", path);
223
+ return;
224
+ }
225
+ // Value corrections cannot replace missing slots or waive cardinality.
226
+ if (canonical.length < legacy.length) {
227
+ const missing = legacy.length - canonical.length;
228
+ missingEntityCount += missing;
229
+ mark("missing_entity", path, true, missing);
230
+ return;
231
+ }
232
+ if (!options.canonicalNewer && canonical.length !== legacy.length) {
233
+ mark("array_order", path);
234
+ return;
235
+ }
236
+ const counts = new Map();
237
+ for (const item of available)
238
+ counts.set(item, (counts.get(item) ?? 0) + 1);
239
+ let missingValues = 0;
240
+ let hadMissingValue = false;
241
+ for (const [index, item] of expected.entries()) {
242
+ const count = counts.get(item) ?? 0;
243
+ if (count !== 0) {
244
+ counts.set(item, count - 1);
245
+ continue;
246
+ }
247
+ hadMissingValue = true;
248
+ missingValues += 1;
249
+ const legacyValue = legacy[index];
250
+ const hasTypeMismatch = canonical.some((value) => jsonType(value) !== jsonType(legacyValue));
251
+ const hasTimestampFormatMismatch = canonical.some((value) => jsonType(value) === jsonType(legacyValue) &&
252
+ ((field !== undefined && isTimestampField(field)) ||
253
+ isTimestampLikeValue(legacyValue) ||
254
+ isTimestampLikeValue(value)) &&
255
+ timestampFormat(value) !== timestampFormat(legacyValue));
256
+ if (hasTypeMismatch) {
257
+ mark("type_mismatch", path);
258
+ missingValues -= 1;
259
+ }
260
+ else if (hasTimestampFormatMismatch) {
261
+ mark("timestamp_format", path);
262
+ missingValues -= 1;
263
+ }
264
+ else if (field && isCreationField(field)) {
265
+ const normalizedPath = path.replace(/\[\d+\]/g, "[]");
266
+ const exception = LEGACY_COVERAGE_EXCEPTIONS.find((entry) => entry.scope === options.scope && entry.path === normalizedPath);
267
+ const canonicalValue = canonical[index];
268
+ if (exception &&
269
+ canonicalValue !== undefined &&
270
+ canonicalValue !== null &&
271
+ canonicalValue !== "" &&
272
+ jsonType(canonicalValue) === jsonType(legacyValue) &&
273
+ timestampFormat(canonicalValue) === timestampFormat(legacyValue)) {
274
+ appliedExceptions.set(normalizedPath, {
275
+ path: exception.path,
276
+ reason: exception.reason,
277
+ authority: exception.authority,
278
+ });
279
+ }
280
+ else {
281
+ mark("creation_mismatch", path);
282
+ }
283
+ missingValues -= 1;
284
+ }
285
+ }
286
+ if (hadMissingValue) {
287
+ missingEntityCount += missingValues;
288
+ // A scalar has no stable entity identity. Completion proof cannot
289
+ // distinguish a deleted value from a changed value in this array.
290
+ if (missingValues > 0)
291
+ mark("missing_entity", path, true, missingValues);
292
+ return;
293
+ }
294
+ if (options.canonicalNewer)
295
+ return;
296
+ if (expected.length !== available.length ||
297
+ expected.some((item, index) => item !== available[index]))
298
+ mark("array_order", path);
299
+ return;
300
+ }
301
+ if (object(legacy)) {
302
+ // Equal JSON types above establish that canonical is an object.
303
+ if (!object(canonical))
304
+ return;
305
+ for (const [field, value] of Object.entries(legacy)) {
306
+ if (METADATA_FIELDS.has(field))
307
+ continue;
308
+ const childPath = `${path}.${field}`;
309
+ if (!Object.hasOwn(canonical, field)) {
310
+ // Omission evidence names a path relative to its entity. Match the
311
+ // full relative path so evidence for `timestamp` cannot excuse a
312
+ // nested `contributors.timestamp` on the same entity.
313
+ const schemaPath = `${arrayPath}.${field}`;
314
+ const omission = entityPath !== undefined && schemaPath.startsWith(`${entityPath}.`)
315
+ ? options.projectionOmissions?.find((entry) => entry.entityPath === entityPath &&
316
+ entry.entityKey === entityKey &&
317
+ entry.fieldPath === schemaPath.slice(entityPath.length + 1))
318
+ : undefined;
319
+ if (omission) {
320
+ appliedExceptions.set(schemaPath, {
321
+ path: schemaPath,
322
+ reason: omission.reason,
323
+ authority: "canonical",
324
+ });
325
+ }
326
+ else {
327
+ mark("missing_field", childPath);
328
+ }
329
+ continue;
330
+ }
331
+ compare(value, canonical[field], childPath, `${arrayPath}.${field}`, schema?.properties?.[field], field, identityFields, entityPath, entityKey);
332
+ }
333
+ return;
334
+ }
335
+ const timestampField = field !== undefined &&
336
+ (isTimestampField(field) ||
337
+ isCreationField(field) ||
338
+ isTimestampLikeValue(legacy) ||
339
+ isTimestampLikeValue(canonical));
340
+ if (timestampField &&
341
+ timestampFormat(legacy) !== timestampFormat(canonical)) {
342
+ mark("timestamp_format", path);
343
+ return;
344
+ }
345
+ if (Object.is(legacy, canonical) ||
346
+ (timestampField && sameIsoInstantAtMillisecond(legacy, canonical))) {
347
+ return;
348
+ }
349
+ if (field && (identityFields.includes(field) || isIdentityField(field))) {
350
+ mark("identity_mismatch", path);
351
+ }
352
+ else if (field && isCreationField(field)) {
353
+ const normalizedPath = path.replace(/\[\d+\]/g, "[]");
354
+ const exception = LEGACY_COVERAGE_EXCEPTIONS.find((entry) => entry.scope === options.scope && entry.path === normalizedPath);
355
+ if (exception &&
356
+ canonical !== undefined &&
357
+ canonical !== null &&
358
+ canonical !== "") {
359
+ appliedExceptions.set(normalizedPath, {
360
+ path: exception.path,
361
+ reason: exception.reason,
362
+ authority: exception.authority,
363
+ });
364
+ return;
365
+ }
366
+ mark("creation_mismatch", path);
367
+ }
368
+ else if (!options.canonicalNewer) {
369
+ mark("field_mismatch", path);
370
+ }
371
+ }
372
+ const schema = options.schema?.schema ?? options.schema;
373
+ compare(legacyPayload, canonicalPayload, "$", "$", schema);
374
+ if (canonicalBytes > legacyBytes * (options.maxPayloadRatio ?? 1.5) &&
375
+ byteDelta > (options.maxExtraBytes ?? 256 * 1024)) {
376
+ mark("payload_growth");
377
+ }
378
+ const reason = [
379
+ "no_stable_key",
380
+ "missing_entity",
381
+ "type_mismatch",
382
+ "timestamp_format",
383
+ "identity_mismatch",
384
+ "creation_mismatch",
385
+ "field_mismatch",
386
+ "missing_field",
387
+ "array_order",
388
+ "payload_growth",
389
+ ].find((candidate) => blockedReasons.has(candidate)) ?? null;
390
+ return {
391
+ comparisonCase,
392
+ covered: reason === null,
393
+ reason,
394
+ reasonCounts,
395
+ appliedExceptions: [...appliedExceptions.values()],
396
+ missingEntityCount,
397
+ mismatchedFieldPaths: [...paths],
398
+ legacyBytes,
399
+ canonicalBytes,
400
+ byteDelta,
401
+ };
402
+ }
403
+ //# sourceMappingURL=legacy-scope-coverage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy-scope-coverage.js","sourceRoot":"","sources":["../../src/storage/legacy-scope-coverage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /** Stable legacy entity keys reviewed against the vendored scope schemas.
2
+ * A missing path has no proven key and cannot qualify for takeover. */
3
+ export declare const LEGACY_SCOPE_ENTITY_KEYS: Readonly<Record<string, Readonly<Record<string, readonly string[]>>>>;
4
+ //# sourceMappingURL=legacy-scope-entity-keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy-scope-entity-keys.d.ts","sourceRoot":"","sources":["../../src/storage/legacy-scope-entity-keys.ts"],"names":[],"mappings":"AAAA;uEACuE;AACvE,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAC7C,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC,CAyF5D,CAAC"}
@@ -0,0 +1,92 @@
1
+ /** Stable legacy entity keys reviewed against the vendored scope schemas.
2
+ * A missing path has no proven key and cannot qualify for takeover. */
3
+ export const LEGACY_SCOPE_ENTITY_KEYS = {
4
+ "amazon.orders": {
5
+ "$.orders": ["orderId"],
6
+ },
7
+ "chatgpt.conversations": {
8
+ "$.conversations": ["id"],
9
+ "$.conversations[].messages": ["id"],
10
+ },
11
+ "chatgpt.memories": {
12
+ "$.memories": ["id"],
13
+ },
14
+ "claude.conversations": {
15
+ "$.conversations": ["id"],
16
+ "$.conversations[].messages": ["id"],
17
+ },
18
+ "claude.projects": {
19
+ "$.projects": ["id"],
20
+ },
21
+ "github.contributions": {
22
+ "$.yearTotals": ["year"],
23
+ "$.days": ["date"],
24
+ "$.monthlyTotals": ["month"],
25
+ },
26
+ "github.events": {
27
+ "$.events": ["id"],
28
+ },
29
+ "github.history": {
30
+ "$.pullRequests": ["id"],
31
+ "$.issues": ["id"],
32
+ },
33
+ "heb.orders": {
34
+ "$.orders": ["orderId"],
35
+ "$.orders[].items": ["productId"],
36
+ },
37
+ "icloud_notes.folders": {
38
+ "$.folders": ["recordName"],
39
+ },
40
+ "icloud_notes.notes": {
41
+ "$.notes": ["recordName"],
42
+ },
43
+ "instagram.following": {
44
+ "$.accounts": ["pk"],
45
+ },
46
+ "instagram.posts": {
47
+ "$.posts[].who_liked": ["id"],
48
+ },
49
+ "oura.activity": {
50
+ "$.days": ["id"],
51
+ },
52
+ "oura.readiness": {
53
+ "$.days": ["id"],
54
+ },
55
+ "oura.sleep": {
56
+ "$.dailyScores": ["id"],
57
+ "$.sleepPeriods": ["id"],
58
+ },
59
+ "shop.orders": {
60
+ "$.orders": ["id"],
61
+ },
62
+ "strava.activities": {
63
+ "$.activities": ["id"],
64
+ },
65
+ "strava.coverage_diagnostics": {
66
+ "$.coverage_diagnostics": ["id"],
67
+ },
68
+ "wholefoods.orders": {
69
+ "$.orders": ["orderId"],
70
+ "$.orders[].items": ["productId"],
71
+ },
72
+ "youtube.history": {
73
+ "$.history": ["videoId"],
74
+ },
75
+ "youtube.likes": {
76
+ "$.likedVideos": ["videoId"],
77
+ },
78
+ "youtube.playlistItems": {
79
+ "$.playlists": ["playlistId"],
80
+ "$.playlists[].items": ["videoId"],
81
+ },
82
+ "youtube.playlists": {
83
+ "$.playlists": ["playlistId"],
84
+ },
85
+ "youtube.subscriptions": {
86
+ "$.subscriptions": ["channelId"],
87
+ },
88
+ "youtube.watchLater": {
89
+ "$.watchLater": ["videoId"],
90
+ },
91
+ };
92
+ //# sourceMappingURL=legacy-scope-entity-keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy-scope-entity-keys.js","sourceRoot":"","sources":["../../src/storage/legacy-scope-entity-keys.ts"],"names":[],"mappings":"AAAA;uEACuE;AACvE,MAAM,CAAC,MAAM,wBAAwB,GAEjC;IACF,eAAe,EAAE;QACf,UAAU,EAAE,CAAC,SAAS,CAAC;KACxB;IACD,uBAAuB,EAAE;QACvB,iBAAiB,EAAE,CAAC,IAAI,CAAC;QACzB,4BAA4B,EAAE,CAAC,IAAI,CAAC;KACrC;IACD,kBAAkB,EAAE;QAClB,YAAY,EAAE,CAAC,IAAI,CAAC;KACrB;IACD,sBAAsB,EAAE;QACtB,iBAAiB,EAAE,CAAC,IAAI,CAAC;QACzB,4BAA4B,EAAE,CAAC,IAAI,CAAC;KACrC;IACD,iBAAiB,EAAE;QACjB,YAAY,EAAE,CAAC,IAAI,CAAC;KACrB;IACD,sBAAsB,EAAE;QACtB,cAAc,EAAE,CAAC,MAAM,CAAC;QACxB,QAAQ,EAAE,CAAC,MAAM,CAAC;QAClB,iBAAiB,EAAE,CAAC,OAAO,CAAC;KAC7B;IACD,eAAe,EAAE;QACf,UAAU,EAAE,CAAC,IAAI,CAAC;KACnB;IACD,gBAAgB,EAAE;QAChB,gBAAgB,EAAE,CAAC,IAAI,CAAC;QACxB,UAAU,EAAE,CAAC,IAAI,CAAC;KACnB;IACD,YAAY,EAAE;QACZ,UAAU,EAAE,CAAC,SAAS,CAAC;QACvB,kBAAkB,EAAE,CAAC,WAAW,CAAC;KAClC;IACD,sBAAsB,EAAE;QACtB,WAAW,EAAE,CAAC,YAAY,CAAC;KAC5B;IACD,oBAAoB,EAAE;QACpB,SAAS,EAAE,CAAC,YAAY,CAAC;KAC1B;IACD,qBAAqB,EAAE;QACrB,YAAY,EAAE,CAAC,IAAI,CAAC;KACrB;IACD,iBAAiB,EAAE;QACjB,qBAAqB,EAAE,CAAC,IAAI,CAAC;KAC9B;IACD,eAAe,EAAE;QACf,QAAQ,EAAE,CAAC,IAAI,CAAC;KACjB;IACD,gBAAgB,EAAE;QAChB,QAAQ,EAAE,CAAC,IAAI,CAAC;KACjB;IACD,YAAY,EAAE;QACZ,eAAe,EAAE,CAAC,IAAI,CAAC;QACvB,gBAAgB,EAAE,CAAC,IAAI,CAAC;KACzB;IACD,aAAa,EAAE;QACb,UAAU,EAAE,CAAC,IAAI,CAAC;KACnB;IACD,mBAAmB,EAAE;QACnB,cAAc,EAAE,CAAC,IAAI,CAAC;KACvB;IACD,6BAA6B,EAAE;QAC7B,wBAAwB,EAAE,CAAC,IAAI,CAAC;KACjC;IACD,mBAAmB,EAAE;QACnB,UAAU,EAAE,CAAC,SAAS,CAAC;QACvB,kBAAkB,EAAE,CAAC,WAAW,CAAC;KAClC;IACD,iBAAiB,EAAE;QACjB,WAAW,EAAE,CAAC,SAAS,CAAC;KACzB;IACD,eAAe,EAAE;QACf,eAAe,EAAE,CAAC,SAAS,CAAC;KAC7B;IACD,uBAAuB,EAAE;QACvB,aAAa,EAAE,CAAC,YAAY,CAAC;QAC7B,qBAAqB,EAAE,CAAC,SAAS,CAAC;KACnC;IACD,mBAAmB,EAAE;QACnB,aAAa,EAAE,CAAC,YAAY,CAAC;KAC9B;IACD,uBAAuB,EAAE;QACvB,iBAAiB,EAAE,CAAC,WAAW,CAAC;KACjC;IACD,oBAAoB,EAAE;QACpB,cAAc,EAAE,CAAC,SAAS,CAAC;KAC5B;CACF,CAAC"}