@seedprotocol/sdk 0.7.8-next.1071.g2a141c1 → 0.7.8

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 (211) hide show
  1. package/dist/{ClientManager-Bv15o3Oz.js → ClientManager-B1r_8P5Z.js} +37 -40
  2. package/dist/ClientManager-B1r_8P5Z.js.map +1 -0
  3. package/dist/{Item-tX3kpbj4.js → Item-CjTEShfk.js} +384 -399
  4. package/dist/Item-CjTEShfk.js.map +1 -0
  5. package/dist/{ModelProperty-N-3gBfu5.js → ModelProperty-C3749Wjq.js} +36 -36
  6. package/dist/{ModelProperty-N-3gBfu5.js.map → ModelProperty-C3749Wjq.js.map} +1 -1
  7. package/dist/{Schema-CY3OxwKS.js → Schema-CX9CTtho.js} +35 -35
  8. package/dist/{Schema-CY3OxwKS.js.map → Schema-CX9CTtho.js.map} +1 -1
  9. package/dist/{SchemaValidationService-BR2ABK2r.js → SchemaValidationService-T5mqnY8q.js} +6 -6
  10. package/dist/{SchemaValidationService-BR2ABK2r.js.map → SchemaValidationService-T5mqnY8q.js.map} +1 -1
  11. package/dist/{backfillMetadataPropertyIds-vc_1RoDT.js → backfillMetadataPropertyIds-DWWkh-Ex.js} +3 -3
  12. package/dist/{backfillMetadataPropertyIds-vc_1RoDT.js.map → backfillMetadataPropertyIds-DWWkh-Ex.js.map} +1 -1
  13. package/dist/{tabEvents-BuorBItJ.js → changeFeed-DcsZ7deG.js} +369 -10
  14. package/dist/changeFeed-DcsZ7deG.js.map +1 -0
  15. package/dist/{configurePlatform-D-Pj9gTx.js → configurePlatform-AWild9o4.js} +2 -2
  16. package/dist/{configurePlatform-D-Pj9gTx.js.map → configurePlatform-AWild9o4.js.map} +1 -1
  17. package/dist/db/drizzle/0022_add_read_indexes.sql +5 -0
  18. package/dist/db/drizzle/0023_add_entity_changes.sql +48 -0
  19. package/dist/db/drizzle/meta/0022_snapshot.json +1585 -0
  20. package/dist/db/drizzle/meta/0023_snapshot.json +1645 -0
  21. package/dist/db/drizzle/meta/_journal.json +14 -0
  22. package/dist/{detachRowsBeforeDelete-sK1ye2W6.js → detachRowsBeforeDelete-Bo_pky-R.js} +2 -2
  23. package/dist/{detachRowsBeforeDelete-sK1ye2W6.js.map → detachRowsBeforeDelete-Bo_pky-R.js.map} +1 -1
  24. package/dist/dist/{ClientManager-Bv15o3Oz.d.ts → ClientManager-B1r_8P5Z.d.ts} +1 -1
  25. package/dist/dist/ClientManager-B1r_8P5Z.d.ts.map +1 -0
  26. package/dist/dist/{Item-tX3kpbj4.d.ts → Item-CjTEShfk.d.ts} +3 -2
  27. package/dist/dist/Item-CjTEShfk.d.ts.map +1 -0
  28. package/dist/dist/{ModelProperty-N-3gBfu5.d.ts → ModelProperty-C3749Wjq.d.ts} +1 -1
  29. package/dist/dist/{ModelProperty-N-3gBfu5.d.ts.map → ModelProperty-C3749Wjq.d.ts.map} +1 -1
  30. package/dist/dist/{Schema-CY3OxwKS.d.ts → Schema-CX9CTtho.d.ts} +2 -2
  31. package/dist/dist/{Schema-CY3OxwKS.d.ts.map → Schema-CX9CTtho.d.ts.map} +1 -1
  32. package/dist/dist/{SchemaValidationService-BR2ABK2r.d.ts → SchemaValidationService-T5mqnY8q.d.ts} +1 -1
  33. package/dist/dist/{SchemaValidationService-BR2ABK2r.d.ts.map → SchemaValidationService-T5mqnY8q.d.ts.map} +1 -1
  34. package/dist/dist/{backfillMetadataPropertyIds-vc_1RoDT.d.ts → backfillMetadataPropertyIds-DWWkh-Ex.d.ts} +1 -1
  35. package/dist/dist/backfillMetadataPropertyIds-DWWkh-Ex.d.ts.map +1 -0
  36. package/dist/dist/{tabEvents-BuorBItJ.d.ts → changeFeed-DcsZ7deG.d.ts} +101 -36
  37. package/dist/dist/changeFeed-DcsZ7deG.d.ts.map +1 -0
  38. package/dist/dist/{configurePlatform-D-Pj9gTx.d.ts → configurePlatform-AWild9o4.d.ts} +1 -1
  39. package/dist/dist/configurePlatform-AWild9o4.d.ts.map +1 -0
  40. package/dist/dist/{detachRowsBeforeDelete-sK1ye2W6.d.ts → detachRowsBeforeDelete-Bo_pky-R.d.ts} +1 -1
  41. package/dist/dist/detachRowsBeforeDelete-Bo_pky-R.d.ts.map +1 -0
  42. package/dist/dist/{eas-BSQxj7gN.d.ts → eas--9vtNkma.d.ts} +1 -1
  43. package/dist/dist/eas--9vtNkma.d.ts.map +1 -0
  44. package/dist/dist/{errors-a4Tj6hly.d.ts → errors-rIWK7gwJ.d.ts} +1 -1
  45. package/dist/dist/{errors-a4Tj6hly.d.ts.map → errors-rIWK7gwJ.d.ts.map} +1 -1
  46. package/dist/dist/{getItem-Ctps9gSs.d.ts → getItem-5j22EWWE.d.ts} +1 -1
  47. package/dist/dist/getItem-5j22EWWE.d.ts.map +1 -0
  48. package/dist/dist/{getPublishPayload-C2g5pPD2.d.ts → getPublishPayload-BGl2SaGK.d.ts} +1 -1
  49. package/dist/dist/{getPublishPayload-C2g5pPD2.d.ts.map → getPublishPayload-BGl2SaGK.d.ts.map} +1 -1
  50. package/dist/dist/{getPublishUploads-CaJHy3SL.d.ts → getPublishUploads-DVsDx6Xf.d.ts} +1 -1
  51. package/dist/dist/{getPublishUploads-CaJHy3SL.d.ts.map → getPublishUploads-DVsDx6Xf.d.ts.map} +1 -1
  52. package/dist/dist/{index-s73wD_LC.d.ts → index-C0SetTd1.d.ts} +1190 -1065
  53. package/dist/dist/index-C0SetTd1.d.ts.map +1 -0
  54. package/dist/dist/{index-BgEwcREa.d.ts → index-CJK3F_MK.d.ts} +13 -13
  55. package/dist/dist/index-CJK3F_MK.d.ts.map +1 -0
  56. package/dist/dist/{index-B6hPWSM4.d.ts → index-CZQrNqvq.d.ts} +130 -13
  57. package/dist/dist/{index-B6hPWSM4.d.ts.map → index-CZQrNqvq.d.ts.map} +1 -1
  58. package/dist/dist/{index-bOwhhJJL.d.ts → index-Dp4uyZYx.d.ts} +5 -5
  59. package/dist/dist/index-Dp4uyZYx.d.ts.map +1 -0
  60. package/dist/dist/{index.browser-C7iZp7mx.d.ts → index.browser-Ll71Y_Dl.d.ts} +391 -39
  61. package/dist/dist/{index.browser-C7iZp7mx.d.ts.map → index.browser-Ll71Y_Dl.d.ts.map} +1 -1
  62. package/dist/dist/{index.node-MPVTJR2J.d.ts → index.node-CgltN0cC.d.ts} +517 -49
  63. package/dist/dist/{index.node-MPVTJR2J.d.ts.map → index.node-CgltN0cC.d.ts.map} +1 -1
  64. package/dist/dist/modelPropertyRecordSchemas-C_lYTzMr.d.ts +7 -0
  65. package/dist/dist/modelPropertyRecordSchemas-C_lYTzMr.d.ts.map +1 -0
  66. package/dist/dist/platform.browser.d.ts +2 -2
  67. package/dist/dist/platform.node.d.ts +2 -2
  68. package/dist/dist/{property-mP9mOZ2L.d.ts → property-pcDxNEpy.d.ts} +3 -3
  69. package/dist/dist/property-pcDxNEpy.d.ts.map +1 -0
  70. package/dist/dist/{propertyValidationRules-DwzrYA7c.d.ts → propertyValidationRules-BEjN0f3-.d.ts} +6 -1
  71. package/dist/dist/propertyValidationRules-BEjN0f3-.d.ts.map +1 -0
  72. package/dist/dist/{publishDraftGraph-BzYVblZZ.d.ts → publishDraftGraph-I5yKe1Xz.d.ts} +1 -1
  73. package/dist/dist/{publishDraftGraph-BzYVblZZ.d.ts.map → publishDraftGraph-I5yKe1Xz.d.ts.map} +1 -1
  74. package/dist/dist/{resetAmbiguousLegacyItemData-B_IUQA09.d.ts → resetAmbiguousLegacyItemData-0Tin9-JK.d.ts} +1 -1
  75. package/dist/dist/resetAmbiguousLegacyItemData-0Tin9-JK.d.ts.map +1 -0
  76. package/dist/dist/{resolveModelForSyncedSeed-H-4tmU6l.d.ts → resolveModelForSyncedSeed-C5KXn6ex.d.ts} +1 -1
  77. package/dist/dist/resolveModelForSyncedSeed-C5KXn6ex.d.ts.map +1 -0
  78. package/dist/dist/{syncDbWithEas-y5VF623G.d.ts → syncDbWithEas-b4fESZ7C.d.ts} +1 -1
  79. package/dist/dist/syncDbWithEas-b4fESZ7C.d.ts.map +1 -0
  80. package/dist/dist/{tolerantWebAccess-DoI7QYT-.d.ts → tolerantWebAccess-CIpS7RLk.d.ts} +1 -1
  81. package/dist/dist/{tolerantWebAccess-DoI7QYT-.d.ts.map → tolerantWebAccess-CIpS7RLk.d.ts.map} +1 -1
  82. package/dist/dist/{updateSeedRevokedAt-BIzkbsUd.d.ts → updateSeedRevokedAt-CR4zwn-6.d.ts} +1 -1
  83. package/dist/dist/updateSeedRevokedAt-CR4zwn-6.d.ts.map +1 -0
  84. package/dist/{eas-BSQxj7gN.js → eas--9vtNkma.js} +3 -3
  85. package/dist/{eas-BSQxj7gN.js.map → eas--9vtNkma.js.map} +1 -1
  86. package/dist/{errors-a4Tj6hly.js → errors-rIWK7gwJ.js} +35 -35
  87. package/dist/{errors-a4Tj6hly.js.map → errors-rIWK7gwJ.js.map} +1 -1
  88. package/dist/{getItem-Ctps9gSs.js → getItem-5j22EWWE.js} +5 -5
  89. package/dist/{getItem-Ctps9gSs.js.map → getItem-5j22EWWE.js.map} +1 -1
  90. package/dist/{getPublishPayload-C2g5pPD2.js → getPublishPayload-BGl2SaGK.js} +14 -14
  91. package/dist/{getPublishPayload-C2g5pPD2.js.map → getPublishPayload-BGl2SaGK.js.map} +1 -1
  92. package/dist/{getPublishUploads-CaJHy3SL.js → getPublishUploads-DVsDx6Xf.js} +7 -7
  93. package/dist/{getPublishUploads-CaJHy3SL.js.map → getPublishUploads-DVsDx6Xf.js.map} +1 -1
  94. package/dist/{index-s73wD_LC.js → index-C0SetTd1.js} +52 -13
  95. package/dist/index-C0SetTd1.js.map +1 -0
  96. package/dist/{index-BgEwcREa.js → index-CJK3F_MK.js} +8 -8
  97. package/dist/index-CJK3F_MK.js.map +1 -0
  98. package/dist/{index-B6hPWSM4.js → index-CZQrNqvq.js} +3 -2
  99. package/dist/index-CZQrNqvq.js.map +1 -0
  100. package/dist/{index-bOwhhJJL.js → index-Dp4uyZYx.js} +8 -8
  101. package/dist/index-Dp4uyZYx.js.map +1 -0
  102. package/dist/{index.browser-C7iZp7mx.js → index.browser-Ll71Y_Dl.js} +243 -18
  103. package/dist/index.browser-Ll71Y_Dl.js.map +1 -0
  104. package/dist/{index.node-MPVTJR2J.js → index.node-CgltN0cC.js} +50 -15
  105. package/dist/index.node-CgltN0cC.js.map +1 -0
  106. package/dist/main.js +23 -30
  107. package/dist/main.js.map +1 -1
  108. package/dist/modelPropertyRecordSchemas-C_lYTzMr.js +94 -0
  109. package/dist/modelPropertyRecordSchemas-C_lYTzMr.js.map +1 -0
  110. package/dist/node.js +11 -11
  111. package/dist/platform.browser.js +5 -5
  112. package/dist/platform.node.js +4 -4
  113. package/dist/{property-mP9mOZ2L.js → property-pcDxNEpy.js} +7 -7
  114. package/dist/{property-mP9mOZ2L.js.map → property-pcDxNEpy.js.map} +1 -1
  115. package/dist/propertyValidationRules-BEjN0f3-.js +73 -0
  116. package/dist/propertyValidationRules-BEjN0f3-.js.map +1 -0
  117. package/dist/{publishDraftGraph-BzYVblZZ.js → publishDraftGraph-I5yKe1Xz.js} +6 -6
  118. package/dist/{publishDraftGraph-BzYVblZZ.js.map → publishDraftGraph-I5yKe1Xz.js.map} +1 -1
  119. package/dist/{resetAmbiguousLegacyItemData-B_IUQA09.js → resetAmbiguousLegacyItemData-0Tin9-JK.js} +2 -2
  120. package/dist/{resetAmbiguousLegacyItemData-B_IUQA09.js.map → resetAmbiguousLegacyItemData-0Tin9-JK.js.map} +1 -1
  121. package/dist/{resolveModelForSyncedSeed-H-4tmU6l.js → resolveModelForSyncedSeed-C5KXn6ex.js} +2 -2
  122. package/dist/{resolveModelForSyncedSeed-H-4tmU6l.js.map → resolveModelForSyncedSeed-C5KXn6ex.js.map} +1 -1
  123. package/dist/seedSchema/EntityChangeSchema.ts +28 -0
  124. package/dist/seedSchema/MetadataSchema.ts +12 -4
  125. package/dist/seedSchema/SeedSchema.ts +9 -3
  126. package/dist/seedSchema/VersionSchema.ts +9 -4
  127. package/dist/seedSchema/index.ts +1 -0
  128. package/dist/src/Item/Item.d.ts +2 -1
  129. package/dist/src/Item/Item.d.ts.map +1 -1
  130. package/dist/src/Item/service/actors/loadOrCreateItem.d.ts.map +1 -1
  131. package/dist/src/ItemProperty/ItemProperty.d.ts.map +1 -1
  132. package/dist/src/ItemProperty/service/actors/loadOrCreateProperty.d.ts.map +1 -1
  133. package/dist/src/ItemProperty/service/actors/modelPropertyRecordSchemas.d.ts +21 -0
  134. package/dist/src/ItemProperty/service/actors/modelPropertyRecordSchemas.d.ts.map +1 -0
  135. package/dist/src/browser/db/Db.d.ts +2 -2
  136. package/dist/src/browser/db/Db.d.ts.map +1 -1
  137. package/dist/src/browser/db/changeFeed.d.ts +77 -0
  138. package/dist/src/browser/db/changeFeed.d.ts.map +1 -0
  139. package/dist/src/browser/db/drizzleFiles.d.ts +4 -2
  140. package/dist/src/browser/db/drizzleFiles.d.ts.map +1 -1
  141. package/dist/src/db/write/applyArweaveL1TransactionIdLocal.d.ts.map +1 -1
  142. package/dist/src/db/write/claimUnpublishedDrafts.d.ts.map +1 -1
  143. package/dist/src/db/write/createMetadata.d.ts.map +1 -1
  144. package/dist/src/db/write/createSeed.d.ts.map +1 -1
  145. package/dist/src/db/write/createVersion.d.ts.map +1 -1
  146. package/dist/src/db/write/restoreDataItemIdsOverwrittenByL1.d.ts.map +1 -1
  147. package/dist/src/db/write/saveMetadata.d.ts.map +1 -1
  148. package/dist/src/db/write/updateItemPropertyValue.d.ts.map +1 -1
  149. package/dist/src/db/write/updateSeedRevokedAt.d.ts.map +1 -1
  150. package/dist/src/db/write/updateSeedUid.d.ts.map +1 -1
  151. package/dist/src/db/write/updateVersionUid.d.ts.map +1 -1
  152. package/dist/src/events/item/syncDbWithEas.d.ts.map +1 -1
  153. package/dist/src/helpers/propertyValidationRules.d.ts +8 -0
  154. package/dist/src/helpers/propertyValidationRules.d.ts.map +1 -1
  155. package/dist/src/helpers/timing.d.ts +36 -0
  156. package/dist/src/helpers/timing.d.ts.map +1 -1
  157. package/dist/src/index.d.ts +2 -0
  158. package/dist/src/index.d.ts.map +1 -1
  159. package/dist/src/node/db/singleConnectionTransactions.d.ts +6 -0
  160. package/dist/src/node/db/singleConnectionTransactions.d.ts.map +1 -1
  161. package/dist/src/outbox/itemAppliers.d.ts.map +1 -1
  162. package/dist/src/outbox/outbox.d.ts +2 -0
  163. package/dist/src/outbox/outbox.d.ts.map +1 -1
  164. package/dist/src/outbox/pendingValues.d.ts.map +1 -1
  165. package/dist/src/seedSchema/EntityChangeSchema.d.ts +126 -0
  166. package/dist/src/seedSchema/EntityChangeSchema.d.ts.map +1 -0
  167. package/dist/src/seedSchema/MetadataSchema.d.ts +4 -4
  168. package/dist/src/seedSchema/MetadataSchema.d.ts.map +1 -1
  169. package/dist/src/seedSchema/SeedSchema.d.ts +4 -4
  170. package/dist/src/seedSchema/SeedSchema.d.ts.map +1 -1
  171. package/dist/src/seedSchema/VersionSchema.d.ts +4 -4
  172. package/dist/src/seedSchema/VersionSchema.d.ts.map +1 -1
  173. package/dist/src/seedSchema/index.d.ts +1 -0
  174. package/dist/src/seedSchema/index.d.ts.map +1 -1
  175. package/dist/{syncDbWithEas-y5VF623G.js → syncDbWithEas-b4fESZ7C.js} +17 -23
  176. package/dist/syncDbWithEas-b4fESZ7C.js.map +1 -0
  177. package/dist/{tolerantWebAccess-DoI7QYT-.js → tolerantWebAccess-CIpS7RLk.js} +6 -6
  178. package/dist/{tolerantWebAccess-DoI7QYT-.js.map → tolerantWebAccess-CIpS7RLk.js.map} +1 -1
  179. package/dist/{updateSeedRevokedAt-BIzkbsUd.js → updateSeedRevokedAt-CR4zwn-6.js} +5 -6
  180. package/dist/updateSeedRevokedAt-CR4zwn-6.js.map +1 -0
  181. package/package.json +6 -6
  182. package/dist/ClientManager-Bv15o3Oz.js.map +0 -1
  183. package/dist/Item-tX3kpbj4.js.map +0 -1
  184. package/dist/dist/ClientManager-Bv15o3Oz.d.ts.map +0 -1
  185. package/dist/dist/Item-tX3kpbj4.d.ts.map +0 -1
  186. package/dist/dist/backfillMetadataPropertyIds-vc_1RoDT.d.ts.map +0 -1
  187. package/dist/dist/configurePlatform-D-Pj9gTx.d.ts.map +0 -1
  188. package/dist/dist/detachRowsBeforeDelete-sK1ye2W6.d.ts.map +0 -1
  189. package/dist/dist/eas-BSQxj7gN.d.ts.map +0 -1
  190. package/dist/dist/getItem-Ctps9gSs.d.ts.map +0 -1
  191. package/dist/dist/index-BgEwcREa.d.ts.map +0 -1
  192. package/dist/dist/index-bOwhhJJL.d.ts.map +0 -1
  193. package/dist/dist/index-s73wD_LC.d.ts.map +0 -1
  194. package/dist/dist/property-mP9mOZ2L.d.ts.map +0 -1
  195. package/dist/dist/propertyValidationRules-DwzrYA7c.d.ts.map +0 -1
  196. package/dist/dist/resetAmbiguousLegacyItemData-B_IUQA09.d.ts.map +0 -1
  197. package/dist/dist/resolveModelForSyncedSeed-H-4tmU6l.d.ts.map +0 -1
  198. package/dist/dist/syncDbWithEas-y5VF623G.d.ts.map +0 -1
  199. package/dist/dist/tabEvents-BuorBItJ.d.ts.map +0 -1
  200. package/dist/dist/updateSeedRevokedAt-BIzkbsUd.d.ts.map +0 -1
  201. package/dist/index-B6hPWSM4.js.map +0 -1
  202. package/dist/index-BgEwcREa.js.map +0 -1
  203. package/dist/index-bOwhhJJL.js.map +0 -1
  204. package/dist/index-s73wD_LC.js.map +0 -1
  205. package/dist/index.browser-C7iZp7mx.js.map +0 -1
  206. package/dist/index.node-MPVTJR2J.js.map +0 -1
  207. package/dist/propertyValidationRules-DwzrYA7c.js +0 -51
  208. package/dist/propertyValidationRules-DwzrYA7c.js.map +0 -1
  209. package/dist/syncDbWithEas-y5VF623G.js.map +0 -1
  210. package/dist/tabEvents-BuorBItJ.js.map +0 -1
  211. package/dist/updateSeedRevokedAt-BIzkbsUd.js.map +0 -1
@@ -4,7 +4,7 @@ import { easName, DEFAULT_NAME_MATCH_LEVEL, compareNameMatchTiers, isNameMatchLe
4
4
  import { waitFor } from 'xstate';
5
5
  import pluralize from 'pluralize';
6
6
  import { Type } from '@sinclair/typebox';
7
- import { sqliteTable, integer, text, unique, int, blob, uniqueIndex, index } from 'drizzle-orm/sqlite-core';
7
+ import { sqliteTable, integer, text, unique, int, index, blob, uniqueIndex } from 'drizzle-orm/sqlite-core';
8
8
  import { relations, and, eq, inArray, desc, isNull, isNotNull, or } from 'drizzle-orm';
9
9
  import { customAlphabet } from 'nanoid';
10
10
  import { alphanumeric } from 'nanoid-dictionary';
@@ -939,11 +939,16 @@ const seeds = sqliteTable('seeds', {
939
939
  publisher: text('publisher'),
940
940
  attestationRaw: text('attestation_raw'),
941
941
  attestationCreatedAt: int('attestation_created_at'),
942
- createdAt: int('created_at'),
943
- updatedAt: int('updated_at'),
942
+ // Set on insert when the writer leaves it out. No $onUpdate: readers rank rows by
943
+ // COALESCE(attestation_created_at, created_at), and some writers move it on purpose.
944
+ createdAt: int('created_at').$defaultFn(() => Date.now()),
945
+ // Set on every insert and update unless the writer passes a value.
946
+ updatedAt: int('updated_at')
947
+ .$defaultFn(() => Date.now())
948
+ .$onUpdate(() => Date.now()),
944
949
  _markedForDeletion: int('_marked_for_deletion'),
945
950
  revokedAt: int('revoked_at'),
946
- });
951
+ }, (table) => [index('seeds_uid_idx').on(table.uid), index('seeds_type_idx').on(table.type)]);
947
952
 
948
953
  const versions = sqliteTable('versions', {
949
954
  localId: text('local_id').unique(),
@@ -952,8 +957,13 @@ const versions = sqliteTable('versions', {
952
957
  seedUid: text('seed_uid'),
953
958
  seedType: text('seed_type'),
954
959
  note: text('note'),
955
- createdAt: int('created_at'),
956
- updatedAt: int('updated_at'),
960
+ // Set on insert when the writer leaves it out. No $onUpdate: readers rank rows by
961
+ // COALESCE(attestation_created_at, created_at), and some writers move it on purpose.
962
+ createdAt: int('created_at').$defaultFn(() => Date.now()),
963
+ // Set on every insert and update unless the writer passes a value.
964
+ updatedAt: int('updated_at')
965
+ .$defaultFn(() => Date.now())
966
+ .$onUpdate(() => Date.now()),
957
967
  attestationCreatedAt: int('attestation_created_at'),
958
968
  attestationRaw: text('attestation_raw'),
959
969
  publisher: text('publisher'),
@@ -962,7 +972,7 @@ const versions = sqliteTable('versions', {
962
972
  * unpublish time until sync confirms it). Null while live or unpublished.
963
973
  */
964
974
  revokedAt: int('revoked_at'),
965
- });
975
+ }, (table) => [index('versions_seed_local_id_idx').on(table.seedLocalId)]);
966
976
 
967
977
  const metadata = sqliteTable('metadata', {
968
978
  localId: text('local_id').unique(),
@@ -986,8 +996,13 @@ const metadata = sqliteTable('metadata', {
986
996
  attestationRaw: text('attestation_raw'),
987
997
  attestationCreatedAt: int('attestation_created_at'),
988
998
  contentHash: text('content_hash'),
989
- createdAt: int('created_at'),
990
- updatedAt: int('updated_at'),
999
+ // Set on insert when the writer leaves it out. No $onUpdate: readers rank rows by
1000
+ // COALESCE(attestation_created_at, created_at), and some writers move it on purpose.
1001
+ createdAt: int('created_at').$defaultFn(() => Date.now()),
1002
+ // Set on every insert and update unless the writer passes a value.
1003
+ updatedAt: int('updated_at')
1004
+ .$defaultFn(() => Date.now())
1005
+ .$onUpdate(() => Date.now()),
991
1006
  publisher: text('publisher'),
992
1007
  // Unix seconds when this row's attestation was revoked on EAS; null while it's live (or for a
993
1008
  // local, unpublished row). EAS sync keeps only the canonical attestation per (version, property
@@ -998,7 +1013,10 @@ const metadata = sqliteTable('metadata', {
998
1013
  // attestation (uid null, ref_value_type 'file', value = the transaction id): that attestation's
999
1014
  // uid. Null for every other row. Marks the row as published content, not a local draft.
1000
1015
  derivedFromUid: text('derived_from_uid'),
1001
- });
1016
+ }, (table) => [
1017
+ index('metadata_seed_local_id_property_name_idx').on(table.seedLocalId, table.propertyName),
1018
+ index('metadata_seed_uid_idx').on(table.seedUid),
1019
+ ]);
1002
1020
 
1003
1021
  const appState = sqliteTable('appState', {
1004
1022
  key: text('key').unique(),
@@ -1192,6 +1210,26 @@ const pendingWrites = sqliteTable('pending_writes', {
1192
1210
  drainOrder: index('pending_writes_drain_order').on(table.status, table.seedLocalId, table.propertyName, table.createdAt),
1193
1211
  }));
1194
1212
 
1213
+ /**
1214
+ * The entity change log (ADR 0020): one row per row written to `seeds`, `versions` or `metadata`,
1215
+ * inserted by triggers (migration 0023), so it commits or rolls back with the write. The browser's
1216
+ * change feed reads it to tell loaded Items and ItemProperties which seeds changed. Nothing else
1217
+ * writes it; the leader tab prunes rows older than 10 minutes.
1218
+ */
1219
+ const entityChanges = sqliteTable('entity_changes', {
1220
+ seq: int('seq').primaryKey({ autoIncrement: true }),
1221
+ /** `seeds` | `versions` | `metadata` */
1222
+ tbl: text('tbl').notNull(),
1223
+ seedLocalId: text('seed_local_id'),
1224
+ seedUid: text('seed_uid'),
1225
+ /** Set for `metadata` rows only. */
1226
+ propertyName: text('property_name'),
1227
+ /** Unix ms when the trigger ran. */
1228
+ at: int('at').notNull(),
1229
+ }, (table) => ({
1230
+ at: index('entity_changes_at').on(table.at),
1231
+ }));
1232
+
1195
1233
  const seedUidToStorageTransactionId = new Map();
1196
1234
  const getStorageTransactionIdForSeedUid = async (seedUid) => {
1197
1235
  if (seedUidToStorageTransactionId.has(seedUid)) {
@@ -4254,6 +4292,7 @@ const saveMetadata = async (metadataRecord, metadataValues) => {
4254
4292
  .update(metadata)
4255
4293
  .set({
4256
4294
  ...metadataValues,
4295
+ // Stamped here: a value carried in metadataValues would otherwise win over $onUpdate.
4257
4296
  updatedAt: Date.now(),
4258
4297
  })
4259
4298
  .where(eq(metadata.localId, metadataRecord.localId));
@@ -4441,7 +4480,7 @@ const syncDbFiles = async (_endpoints) => {
4441
4480
  const getAppDbReady = async () => {
4442
4481
  if (!BaseDb.isAppDbReady()) {
4443
4482
  // Wait for ClientManager to be ready (DB_INIT state or later)
4444
- const _mod_0 = await import('./ClientManager-Bv15o3Oz.js');
4483
+ const _mod_0 = await import('./ClientManager-B1r_8P5Z.js');
4445
4484
  const _ns_0 = _mod_0.$;
4446
4485
  const clientManagerMod = _ns_0;
4447
4486
  const { getClient } = clientManagerMod;
@@ -5138,5 +5177,5 @@ const getArweaveUrlForTransaction = (storageTransactionId) => {
5138
5177
  return BaseArweaveClient.getRawUrl(storageTransactionId);
5139
5178
  };
5140
5179
 
5141
- export { buildArweaveContentTags as $, schemas as A, seeds as B, uploadProcesses as C, DEFAULT_TEXT_MAX_LENGTH as D, versions as E, BaseDb as F, resolveStorageNameToSchemaName as G, AmbiguousModelError as H, eventEmitter as I, nameMatchLevels as J, getPropertyIdForModelAndName as K, resolveItemModelFileId as L, ModelPropertyDataTypes as M, BaseFileManager as N, addModelsToDb as O, Property as P, INIT_SCRIPT_SUCCESS_MESSAGE as Q, getCorrectId as R, SCHEMA_TS as S, THtmlEmbeddedDataUriPolicy as T, isPublishedSeedRef as U, normalizeRelationPropertyValue as V, resolveSeedIdsFromRefString as W, getArweaveUrlForTransaction as X, INTERNAL_STORAGE_MODEL_FILE_IDS as Y, getStorageDirForDataType as Z, getContentSha256 as _, TProperty as a, getWatchedAddressesFromDb as a$, getItemStorageSubdir as a0, getItemStorageLocalFileName as a1, isNode as a2, ZERO_BYTES32 as a3, resolveModelRecord as a4, getItemModelScope as a5, VERSION_SCHEMA_UID as a6, INTERNAL_PROPERTY_NAMES as a7, isStorageSeedRef as a8, defaultAttestationData as a9, classifyMediaRef as aA, closestImageSize as aB, contentSha256TagMatches as aC, ensureImageLocal as aD, getAddressesForItemsFilter as aE, getFeedItemStringField as aF, normalizeAddressConfig as aG, normalizeAddressList as aH, normalizeArweaveTxIdForEnsure as aI, normalizeFeedItemFields as aJ, resolveMediaRef as aK, isInternalSchema as aL, writeModelToDb as aM, writePropertyToDb as aN, addSchemaToDb as aO, renameModelInDb as aP, currentNameMatchLevels as aQ, loadModelsFromDbForSchema as aR, mergeDbModelsIntoSchemaModels as aS, clearNameMatchLevels as aT, isTestOrSeedDev as aU, downloadAllFilesRequestHandler as aV, downloadAllFilesBinaryRequestHandler as aW, warnOnInvalidNameMatch as aX, INTERNAL_SCHEMA_IDS as aY, linkModelToSchema as aZ, getMetadataPropertyNamesForQuery as a_, INTERNAL_DATA_TYPES as aa, listRelationEasPropertyName as ab, easPropertyNameForPublish as ac, normalizePublisher as ad, getAllAddressesFromDb as ae, loadNameMatchLevels as af, scheduleBulkFilesDownloadFromEasSync as ag, EAS_SEED_DATA_SYNCED_TO_DB_EVENT as ah, generateId as ai, normalizeHexAddress as aj, toMetadataPropertyName as ak, getItemStoragePropertiesForModel as al, isBrowser as am, getModelIdByFileId as an, getModelId as ao, setCachedPropertyRefresher as ap, withSqliteBusyRetry as aq, SEED_CONFIG_FILE as ar, SEED_CONFIG_FALLBACKS as as, CONTENT_SHA256_TAG as at, CONTENT_TYPE_TAG as au, ImageSize as av, SEED_PROTOCOL_SCHEMA_NAME as aw, SeedModels as ax, VERSION_SCHEMA_DEF as ay, VERSION_SCHEMA_UID_OPTIMISM_SEPOLIA as az, TPropertyConstructor as b, getOwnedAddressesFromDb as b0, CLIENT_NOT_INITIALIZED as b1, toSchemaPropertyName as b2, isSqliteBusyError as b3, easSchemaDefinitionForProperty as b4, getStorageTransactionIdForSeedUid as b5, convertTxIdToImage as b6, getPropertyIdForSchemaFileId as b7, downloadTransactionIdWithDedupe as b8, resolveMetadataRecord as b9, getDataTypeFromString as ba, getMimeType as bb, listRelationStoragePropertyName as bc, PROPERTY_NAMES_EXEMPT_FROM_ID_SUFFIX_STRIP as bd, toItemPropertyKey as be, getAlternatePropertyNameForInstanceLookup as bf, BaseDb$1 as bg, ModelSchema as bh, BaseFileManager$1 as bi, SchemaSchema as bj, ModelSchemaSchema as bk, resolveModelRecord$1 as bl, db as bm, download as bn, generateId$1 as bo, TPropertyDataType as c, TPropertyDefs as d, TStorageType as e, TValidationRules as f, normalizePropertyRecordSchema as g, appState as h, isDataType as i, arweaveL1FinalizeJobs as j, config as k, easSyncProcesses as l, metadata as m, normalizeDataType as n, htmlEmbeddedImageCoPublish as o, modelRelations as p, modelSchemas as q, modelUids as r, models as s, modelsRelations as t, pendingWrites as u, properties as v, propertiesRelations as w, propertyUidRelations as x, propertyUids as y, publishProcesses as z };
5142
- //# sourceMappingURL=index-s73wD_LC.js.map
5180
+ export { getStorageDirForDataType as $, publishProcesses as A, schemas as B, seeds as C, DEFAULT_TEXT_MAX_LENGTH as D, uploadProcesses as E, versions as F, BaseDb as G, resolveStorageNameToSchemaName as H, AmbiguousModelError as I, eventEmitter as J, nameMatchLevels as K, resolveModelRecord as L, ModelPropertyDataTypes as M, getPropertyIdForModelAndName as N, resolveItemModelFileId as O, Property as P, BaseFileManager as Q, addModelsToDb as R, INIT_SCRIPT_SUCCESS_MESSAGE as S, THtmlEmbeddedDataUriPolicy as T, SCHEMA_TS as U, getCorrectId as V, isPublishedSeedRef as W, normalizeRelationPropertyValue as X, resolveSeedIdsFromRefString as Y, getArweaveUrlForTransaction as Z, INTERNAL_STORAGE_MODEL_FILE_IDS as _, TProperty as a, INTERNAL_SCHEMA_IDS as a$, getContentSha256 as a0, buildArweaveContentTags as a1, getItemStorageSubdir as a2, getItemStorageLocalFileName as a3, isNode as a4, ZERO_BYTES32 as a5, getItemModelScope as a6, VERSION_SCHEMA_UID as a7, INTERNAL_PROPERTY_NAMES as a8, isStorageSeedRef as a9, VERSION_SCHEMA_DEF as aA, VERSION_SCHEMA_UID_OPTIMISM_SEPOLIA as aB, classifyMediaRef as aC, closestImageSize as aD, contentSha256TagMatches as aE, ensureImageLocal as aF, getAddressesForItemsFilter as aG, getFeedItemStringField as aH, normalizeAddressConfig as aI, normalizeAddressList as aJ, normalizeArweaveTxIdForEnsure as aK, normalizeFeedItemFields as aL, resolveMediaRef as aM, isInternalSchema as aN, writeModelToDb as aO, writePropertyToDb as aP, addSchemaToDb as aQ, renameModelInDb as aR, currentNameMatchLevels as aS, withSqliteBusyRetry as aT, loadModelsFromDbForSchema as aU, mergeDbModelsIntoSchemaModels as aV, clearNameMatchLevels as aW, isTestOrSeedDev as aX, downloadAllFilesRequestHandler as aY, downloadAllFilesBinaryRequestHandler as aZ, warnOnInvalidNameMatch as a_, defaultAttestationData as aa, INTERNAL_DATA_TYPES as ab, listRelationEasPropertyName as ac, easPropertyNameForPublish as ad, normalizePublisher as ae, getAllAddressesFromDb as af, loadNameMatchLevels as ag, scheduleBulkFilesDownloadFromEasSync as ah, EAS_SEED_DATA_SYNCED_TO_DB_EVENT as ai, generateId as aj, normalizeHexAddress as ak, toMetadataPropertyName as al, getItemStoragePropertiesForModel as am, getModelIdByFileId as an, getModelId as ao, setCachedPropertyRefresher as ap, isSqliteBusyError as aq, SQLITE_BUSY_RETRY_DELAYS_MS as ar, SEED_CONFIG_FILE as as, SEED_CONFIG_FALLBACKS as at, isBrowser as au, CONTENT_SHA256_TAG as av, CONTENT_TYPE_TAG as aw, ImageSize as ax, SEED_PROTOCOL_SCHEMA_NAME as ay, SeedModels as az, TPropertyConstructor as b, linkModelToSchema as b0, getMetadataPropertyNamesForQuery as b1, getWatchedAddressesFromDb as b2, getOwnedAddressesFromDb as b3, CLIENT_NOT_INITIALIZED as b4, toSchemaPropertyName as b5, easSchemaDefinitionForProperty as b6, getStorageTransactionIdForSeedUid as b7, convertTxIdToImage as b8, getPropertyIdForSchemaFileId as b9, downloadTransactionIdWithDedupe as ba, resolveMetadataRecord as bb, getDataTypeFromString as bc, getMimeType as bd, listRelationStoragePropertyName as be, PROPERTY_NAMES_EXEMPT_FROM_ID_SUFFIX_STRIP as bf, toItemPropertyKey as bg, getAlternatePropertyNameForInstanceLookup as bh, BaseDb$1 as bi, ModelSchema as bj, BaseFileManager$1 as bk, SchemaSchema as bl, ModelSchemaSchema as bm, resolveModelRecord$1 as bn, db as bo, download as bp, generateId$1 as bq, TPropertyDataType as c, TPropertyDefs as d, TStorageType as e, TValidationRules as f, normalizePropertyRecordSchema as g, appState as h, isDataType as i, arweaveL1FinalizeJobs as j, config as k, easSyncProcesses as l, metadata as m, normalizeDataType as n, entityChanges as o, htmlEmbeddedImageCoPublish as p, modelRelations as q, modelSchemas as r, modelUids as s, models as t, modelsRelations as u, pendingWrites as v, properties as w, propertiesRelations as x, propertyUidRelations as y, propertyUids as z };
5181
+ //# sourceMappingURL=index-C0SetTd1.js.map