@pattern-stack/codegen 0.10.1 → 0.12.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 (279) hide show
  1. package/CHANGELOG.md +122 -0
  2. package/README.md +5 -5
  3. package/consumer-skills/codegen/SKILL.md +2 -2
  4. package/consumer-skills/{sync → integration}/SKILL.md +29 -29
  5. package/consumer-skills/{sync → integration}/audit-and-detection.md +22 -22
  6. package/consumer-skills/{sync → integration}/change-sources-and-sinks.md +60 -60
  7. package/consumer-skills/subsystems/SKILL.md +8 -8
  8. package/consumer-skills/subsystems/wiring-and-order.md +7 -7
  9. package/dist/runtime/base-classes/index.d.ts +4 -4
  10. package/dist/runtime/base-classes/index.js +35 -35
  11. package/dist/runtime/base-classes/index.js.map +1 -1
  12. package/dist/runtime/base-classes/{synced-entity-repository.d.ts → integrated-entity-repository.d.ts} +15 -15
  13. package/dist/runtime/base-classes/{synced-entity-repository.js → integrated-entity-repository.js} +21 -21
  14. package/dist/runtime/base-classes/integrated-entity-repository.js.map +1 -0
  15. package/dist/runtime/base-classes/{synced-entity-service.d.ts → integrated-entity-service.d.ts} +6 -6
  16. package/dist/runtime/base-classes/{synced-entity-service.js → integrated-entity-service.js} +4 -4
  17. package/dist/runtime/base-classes/integrated-entity-service.js.map +1 -0
  18. package/dist/runtime/base-classes/{sync-upsert-config.d.ts → integration-upsert-config.d.ts} +13 -13
  19. package/dist/runtime/base-classes/integration-upsert-config.js +1 -0
  20. package/dist/runtime/base-classes/{junction-sync-repository.d.ts → junction-integration-repository.d.ts} +11 -11
  21. package/dist/runtime/base-classes/{junction-sync-repository.js → junction-integration-repository.js} +15 -15
  22. package/dist/runtime/base-classes/junction-integration-repository.js.map +1 -0
  23. package/dist/runtime/subsystems/auth/auth-oauth-state.schema.js.map +1 -1
  24. package/dist/runtime/subsystems/auth/auth.module.d.ts +4 -4
  25. package/dist/runtime/subsystems/auth/auth.module.js +3 -3
  26. package/dist/runtime/subsystems/auth/auth.module.js.map +1 -1
  27. package/dist/runtime/subsystems/auth/auth.tokens.d.ts +8 -8
  28. package/dist/runtime/subsystems/auth/auth.tokens.js +6 -6
  29. package/dist/runtime/subsystems/auth/auth.tokens.js.map +1 -1
  30. package/dist/runtime/subsystems/auth/backends/state-store.drizzle-backend.js.map +1 -1
  31. package/dist/runtime/subsystems/auth/controllers/auth.controller.d.ts +2 -2
  32. package/dist/runtime/subsystems/auth/controllers/auth.controller.js +3 -3
  33. package/dist/runtime/subsystems/auth/controllers/auth.controller.js.map +1 -1
  34. package/dist/runtime/subsystems/auth/index.d.ts +3 -3
  35. package/dist/runtime/subsystems/auth/index.js +40 -40
  36. package/dist/runtime/subsystems/auth/index.js.map +1 -1
  37. package/dist/runtime/subsystems/auth/middleware/requester-context.js.map +1 -1
  38. package/dist/runtime/subsystems/auth/protocols/auth-strategy.d.ts +3 -3
  39. package/dist/runtime/subsystems/auth/protocols/{integration-store.d.ts → connection-store.d.ts} +20 -20
  40. package/dist/runtime/subsystems/auth/protocols/connection-store.js +1 -0
  41. package/dist/runtime/subsystems/auth/protocols/provider-strategy.d.ts +3 -3
  42. package/dist/runtime/subsystems/auth/runtime/{integration-broken.error.d.ts → connection-broken.error.d.ts} +5 -5
  43. package/dist/runtime/subsystems/auth/runtime/connection-broken.error.js +19 -0
  44. package/dist/runtime/subsystems/auth/runtime/connection-broken.error.js.map +1 -0
  45. package/dist/runtime/subsystems/auth/runtime/oauth2-refresh.strategy.d.ts +10 -10
  46. package/dist/runtime/subsystems/auth/runtime/oauth2-refresh.strategy.js +28 -28
  47. package/dist/runtime/subsystems/auth/runtime/oauth2-refresh.strategy.js.map +1 -1
  48. package/dist/runtime/subsystems/auth/runtime/with-auth-retry.d.ts +1 -1
  49. package/dist/runtime/subsystems/auth/runtime/with-auth-retry.js +3 -3
  50. package/dist/runtime/subsystems/auth/runtime/with-auth-retry.js.map +1 -1
  51. package/dist/runtime/subsystems/index.d.ts +11 -7
  52. package/dist/runtime/subsystems/index.js +1041 -67
  53. package/dist/runtime/subsystems/index.js.map +1 -1
  54. package/dist/runtime/subsystems/{sync → integration}/build-change-source.d.ts +3 -3
  55. package/dist/runtime/subsystems/{sync → integration}/build-change-source.js +3 -3
  56. package/dist/runtime/subsystems/integration/build-change-source.js.map +1 -0
  57. package/dist/runtime/subsystems/{sync → integration}/deep-equal.differ.d.ts +2 -2
  58. package/dist/runtime/subsystems/{sync → integration}/deep-equal.differ.js +1 -1
  59. package/dist/runtime/subsystems/integration/deep-equal.differ.js.map +1 -0
  60. package/dist/runtime/subsystems/{sync → integration}/detection-config.schema.d.ts +3 -3
  61. package/dist/runtime/subsystems/{sync → integration}/detection-config.schema.js +1 -1
  62. package/dist/runtime/subsystems/integration/detection-config.schema.js.map +1 -0
  63. package/dist/runtime/subsystems/integration/entity-change-source-registry.memory.d.ts +25 -0
  64. package/dist/runtime/subsystems/integration/entity-change-source-registry.memory.js +34 -0
  65. package/dist/runtime/subsystems/integration/entity-change-source-registry.memory.js.map +1 -0
  66. package/dist/runtime/subsystems/integration/entity-change-source-registry.protocol.d.ts +53 -0
  67. package/dist/runtime/subsystems/integration/entity-change-source-registry.protocol.js +13 -0
  68. package/dist/runtime/subsystems/integration/entity-change-source-registry.protocol.js.map +1 -0
  69. package/dist/runtime/subsystems/{sync/execute-sync.use-case.d.ts → integration/execute-integration.use-case.d.ts} +13 -13
  70. package/dist/runtime/subsystems/{sync/execute-sync.use-case.js → integration/execute-integration.use-case.js} +30 -30
  71. package/dist/runtime/subsystems/integration/execute-integration.use-case.js.map +1 -0
  72. package/dist/runtime/subsystems/integration/index.d.ts +30 -0
  73. package/dist/runtime/subsystems/{sync → integration}/index.js +206 -171
  74. package/dist/runtime/subsystems/integration/index.js.map +1 -0
  75. package/dist/runtime/subsystems/{sync/sync-audit.schema.d.ts → integration/integration-audit.schema.d.ts} +64 -64
  76. package/dist/runtime/subsystems/{sync/sync-audit.schema.js → integration/integration-audit.schema.js} +47 -47
  77. package/dist/runtime/subsystems/integration/integration-audit.schema.js.map +1 -0
  78. package/dist/runtime/subsystems/{sync/sync-change-source.protocol.d.ts → integration/integration-change-source.protocol.d.ts} +10 -10
  79. package/dist/runtime/subsystems/integration/integration-change-source.protocol.js +1 -0
  80. package/dist/runtime/subsystems/{sync/sync-cursor-store.drizzle-backend.d.ts → integration/integration-cursor-store.drizzle-backend.d.ts} +1 -1
  81. package/dist/runtime/subsystems/{sync/sync-cursor-store.drizzle-backend.js → integration/integration-cursor-store.drizzle-backend.js} +65 -65
  82. package/dist/runtime/subsystems/integration/integration-cursor-store.drizzle-backend.js.map +1 -0
  83. package/dist/runtime/subsystems/{sync/sync-cursor-store.memory-backend.d.ts → integration/integration-cursor-store.memory-backend.d.ts} +6 -6
  84. package/dist/runtime/subsystems/{sync/sync-cursor-store.memory-backend.js → integration/integration-cursor-store.memory-backend.js} +5 -5
  85. package/dist/runtime/subsystems/integration/integration-cursor-store.memory-backend.js.map +1 -0
  86. package/dist/runtime/subsystems/{sync/sync-cursor-store.protocol.d.ts → integration/integration-cursor-store.protocol.d.ts} +13 -13
  87. package/dist/runtime/subsystems/integration/integration-cursor-store.protocol.js +1 -0
  88. package/dist/runtime/subsystems/{sync/sync-errors.d.ts → integration/integration-errors.d.ts} +2 -2
  89. package/dist/runtime/subsystems/{sync/sync-errors.js → integration/integration-errors.js} +3 -3
  90. package/dist/runtime/subsystems/integration/integration-errors.js.map +1 -0
  91. package/dist/runtime/subsystems/{sync/sync-field-diff.protocol.d.ts → integration/integration-field-diff.protocol.d.ts} +2 -2
  92. package/dist/runtime/subsystems/{sync/sync-field-diff.protocol.js → integration/integration-field-diff.protocol.js} +2 -2
  93. package/dist/runtime/subsystems/integration/integration-field-diff.protocol.js.map +1 -0
  94. package/dist/runtime/subsystems/{sync/sync-loopback.protocol.d.ts → integration/integration-loopback.protocol.d.ts} +2 -2
  95. package/dist/runtime/subsystems/integration/integration-loopback.protocol.js +1 -0
  96. package/dist/runtime/subsystems/{sync/sync-middleware.protocol.d.ts → integration/integration-middleware.protocol.d.ts} +5 -5
  97. package/dist/runtime/subsystems/integration/integration-middleware.protocol.js +1 -0
  98. package/dist/runtime/subsystems/{sync/sync-run-recorder.drizzle-backend.d.ts → integration/integration-run-recorder.drizzle-backend.d.ts} +5 -5
  99. package/dist/runtime/subsystems/{sync/sync-run-recorder.drizzle-backend.js → integration/integration-run-recorder.drizzle-backend.js} +73 -73
  100. package/dist/runtime/subsystems/integration/integration-run-recorder.drizzle-backend.js.map +1 -0
  101. package/dist/runtime/subsystems/{sync/sync-run-recorder.memory-backend.d.ts → integration/integration-run-recorder.memory-backend.d.ts} +15 -15
  102. package/dist/runtime/subsystems/{sync/sync-run-recorder.memory-backend.js → integration/integration-run-recorder.memory-backend.js} +11 -11
  103. package/dist/runtime/subsystems/integration/integration-run-recorder.memory-backend.js.map +1 -0
  104. package/dist/runtime/subsystems/{sync/sync-run-recorder.protocol.d.ts → integration/integration-run-recorder.protocol.d.ts} +25 -25
  105. package/dist/runtime/subsystems/integration/integration-run-recorder.protocol.js +1 -0
  106. package/dist/runtime/subsystems/{sync/sync-sink.protocol.d.ts → integration/integration-sink.protocol.d.ts} +5 -5
  107. package/dist/runtime/subsystems/integration/integration-sink.protocol.js +1 -0
  108. package/dist/runtime/subsystems/{sync/sync.module.d.ts → integration/integration.module.d.ts} +24 -24
  109. package/dist/runtime/subsystems/{sync/sync.module.js → integration/integration.module.js} +132 -132
  110. package/dist/runtime/subsystems/integration/integration.module.js.map +1 -0
  111. package/dist/runtime/subsystems/integration/integration.tokens.d.ts +60 -0
  112. package/dist/runtime/subsystems/integration/integration.tokens.js +20 -0
  113. package/dist/runtime/subsystems/integration/integration.tokens.js.map +1 -0
  114. package/dist/runtime/subsystems/{sync → integration}/loopback.middleware.d.ts +5 -5
  115. package/dist/runtime/subsystems/{sync → integration}/loopback.middleware.js +1 -1
  116. package/dist/runtime/subsystems/integration/loopback.middleware.js.map +1 -0
  117. package/dist/runtime/subsystems/{sync → integration}/poll-change-source.d.ts +5 -5
  118. package/dist/runtime/subsystems/{sync → integration}/poll-change-source.js +1 -1
  119. package/dist/runtime/subsystems/integration/poll-change-source.js.map +1 -0
  120. package/dist/runtime/subsystems/{sync → integration}/webhook-change-source.d.ts +5 -5
  121. package/dist/runtime/subsystems/{sync → integration}/webhook-change-source.js +1 -1
  122. package/dist/runtime/subsystems/integration/webhook-change-source.js.map +1 -0
  123. package/dist/runtime/subsystems/jobs/job-worker.module.d.ts +1 -1
  124. package/dist/runtime/subsystems/observability/index.d.ts +4 -4
  125. package/dist/runtime/subsystems/observability/index.js +11 -11
  126. package/dist/runtime/subsystems/observability/index.js.map +1 -1
  127. package/dist/runtime/subsystems/observability/observability.module.d.ts +2 -2
  128. package/dist/runtime/subsystems/observability/observability.module.js +11 -11
  129. package/dist/runtime/subsystems/observability/observability.module.js.map +1 -1
  130. package/dist/runtime/subsystems/observability/observability.protocol.d.ts +11 -11
  131. package/dist/runtime/subsystems/observability/observability.service.d.ts +6 -6
  132. package/dist/runtime/subsystems/observability/observability.service.js +11 -11
  133. package/dist/runtime/subsystems/observability/observability.service.js.map +1 -1
  134. package/dist/runtime/subsystems/observability/observability.tokens.d.ts +1 -1
  135. package/dist/runtime/subsystems/observability/observability.tokens.js.map +1 -1
  136. package/dist/runtime/subsystems/observability/reporters/bridge-metrics.reporter.d.ts +3 -3
  137. package/dist/runtime/subsystems/observability/reporters/bridge-metrics.reporter.js.map +1 -1
  138. package/dist/runtime/subsystems/observability/reporters/index.d.ts +3 -3
  139. package/dist/runtime/subsystems/observability/reporters/index.js.map +1 -1
  140. package/dist/src/cli/index.js +1336 -376
  141. package/dist/src/cli/index.js.map +1 -1
  142. package/dist/src/index.d.ts +70 -22
  143. package/dist/src/index.js +290 -194
  144. package/dist/src/index.js.map +1 -1
  145. package/examples/auth-integrations/README.md +32 -32
  146. package/examples/auth-integrations/definitions/entities/{integration.yaml → connection.yaml} +10 -10
  147. package/examples/auth-integrations/runtime/{integrations/adapters/integration-grant-sink.adapter.ts → connections/adapters/connection-grant-sink.adapter.ts} +7 -7
  148. package/examples/auth-integrations/runtime/{integrations/adapters/integration-reader.adapter.ts → connections/adapters/connection-reader.adapter.ts} +10 -10
  149. package/examples/auth-integrations/runtime/{integrations/adapters/integration-token-writer.adapter.ts → connections/adapters/connection-token-writer.adapter.ts} +11 -11
  150. package/examples/auth-integrations/runtime/connections/connections-auth.module.ts +81 -0
  151. package/examples/auth-integrations/runtime/{integrations/facade/integrations.service.ts → connections/facade/connections.service.ts} +35 -35
  152. package/examples/auth-integrations/runtime/{integrations → connections}/oauth/use-cases/create-or-update-from-oauth-grant.use-case.ts +11 -11
  153. package/examples/auth-integrations/runtime/{integrations/oauth/use-cases/disconnect-integration.use-case.ts → connections/oauth/use-cases/disconnect-connection.use-case.ts} +6 -6
  154. package/examples/auth-integrations/runtime/connections/oauth/use-cases/list-user-connections.use-case.ts +21 -0
  155. package/examples/auth-integrations/runtime/connections/oauth/use-cases/mark-connection-requires-reauth.use-case.ts +21 -0
  156. package/package.json +9 -1
  157. package/runtime/base-classes/index.ts +8 -8
  158. package/runtime/base-classes/{synced-entity-repository.ts → integrated-entity-repository.ts} +36 -36
  159. package/runtime/base-classes/{synced-entity-service.ts → integrated-entity-service.ts} +6 -6
  160. package/runtime/base-classes/{sync-upsert-config.ts → integration-upsert-config.ts} +12 -12
  161. package/runtime/base-classes/{junction-sync-repository.ts → junction-integration-repository.ts} +28 -28
  162. package/runtime/subsystems/auth/auth-oauth-state.schema.ts +1 -1
  163. package/runtime/subsystems/auth/auth.module.ts +4 -4
  164. package/runtime/subsystems/auth/auth.tokens.ts +7 -7
  165. package/runtime/subsystems/auth/controllers/auth.controller.ts +7 -7
  166. package/runtime/subsystems/auth/index.ts +19 -19
  167. package/runtime/subsystems/auth/protocols/auth-strategy.ts +3 -3
  168. package/runtime/subsystems/auth/protocols/{integration-store.ts → connection-store.ts} +19 -19
  169. package/runtime/subsystems/auth/protocols/provider-strategy.ts +2 -2
  170. package/runtime/subsystems/auth/runtime/{integration-broken.error.ts → connection-broken.error.ts} +5 -5
  171. package/runtime/subsystems/auth/runtime/oauth2-refresh.strategy.ts +35 -35
  172. package/runtime/subsystems/auth/runtime/with-auth-retry.ts +3 -3
  173. package/runtime/subsystems/index.ts +26 -11
  174. package/runtime/subsystems/{sync → integration}/build-change-source.ts +3 -3
  175. package/runtime/subsystems/{sync → integration}/deep-equal.differ.ts +7 -7
  176. package/runtime/subsystems/{sync → integration}/detection-config.schema.ts +3 -3
  177. package/runtime/subsystems/integration/entity-change-source-registry.memory.ts +40 -0
  178. package/runtime/subsystems/integration/entity-change-source-registry.protocol.ts +59 -0
  179. package/runtime/subsystems/{sync/execute-sync.use-case.ts → integration/execute-integration.use-case.ts} +40 -40
  180. package/runtime/subsystems/{sync → integration}/index.ts +56 -47
  181. package/runtime/subsystems/{sync/sync-audit.schema.ts → integration/integration-audit.schema.ts} +61 -61
  182. package/runtime/subsystems/{sync/sync-change-source.protocol.ts → integration/integration-change-source.protocol.ts} +9 -9
  183. package/runtime/subsystems/{sync/sync-cursor-store.drizzle-backend.ts → integration/integration-cursor-store.drizzle-backend.ts} +30 -30
  184. package/runtime/subsystems/{sync/sync-cursor-store.memory-backend.ts → integration/integration-cursor-store.memory-backend.ts} +9 -9
  185. package/runtime/subsystems/{sync/sync-cursor-store.protocol.ts → integration/integration-cursor-store.protocol.ts} +13 -13
  186. package/runtime/subsystems/{sync/sync-errors.ts → integration/integration-errors.ts} +3 -3
  187. package/runtime/subsystems/{sync/sync-field-diff.protocol.ts → integration/integration-field-diff.protocol.ts} +2 -2
  188. package/runtime/subsystems/{sync/sync-loopback.protocol.ts → integration/integration-loopback.protocol.ts} +2 -2
  189. package/runtime/subsystems/{sync/sync-middleware.protocol.ts → integration/integration-middleware.protocol.ts} +6 -6
  190. package/runtime/subsystems/{sync/sync-run-recorder.drizzle-backend.ts → integration/integration-run-recorder.drizzle-backend.ts} +39 -39
  191. package/runtime/subsystems/{sync/sync-run-recorder.memory-backend.ts → integration/integration-run-recorder.memory-backend.ts} +23 -23
  192. package/runtime/subsystems/{sync/sync-run-recorder.protocol.ts → integration/integration-run-recorder.protocol.ts} +25 -25
  193. package/runtime/subsystems/{sync/sync-sink.protocol.ts → integration/integration-sink.protocol.ts} +4 -4
  194. package/runtime/subsystems/{sync/sync.module.ts → integration/integration.module.ts} +48 -48
  195. package/runtime/subsystems/integration/integration.tokens.ts +63 -0
  196. package/runtime/subsystems/{sync → integration}/loopback.middleware.ts +5 -5
  197. package/runtime/subsystems/{sync → integration}/poll-change-source.ts +7 -7
  198. package/runtime/subsystems/{sync → integration}/webhook-change-source.ts +7 -7
  199. package/runtime/subsystems/observability/index.ts +1 -1
  200. package/runtime/subsystems/observability/observability.module.ts +2 -2
  201. package/runtime/subsystems/observability/observability.protocol.ts +11 -11
  202. package/runtime/subsystems/observability/observability.service.ts +13 -13
  203. package/runtime/subsystems/observability/observability.tokens.ts +1 -1
  204. package/src/patterns/library/index.ts +4 -4
  205. package/src/patterns/library/{synced.pattern.ts → integrated.pattern.ts} +12 -12
  206. package/src/patterns/library/junction.pattern.ts +1 -1
  207. package/src/patterns/pattern-definition.ts +3 -3
  208. package/templates/entity/new/backend/modules/core/{sync-source.ejs.t → integration-source.ejs.t} +6 -6
  209. package/templates/entity/new/clean-lite-ps/entity.ejs.t +12 -3
  210. package/templates/entity/new/clean-lite-ps/module.ejs.t +1 -1
  211. package/templates/entity/new/clean-lite-ps/prompt-extension.js +243 -60
  212. package/templates/entity/new/clean-lite-ps/repository.ejs.t +27 -27
  213. package/templates/entity/new/frontend/collections/collection.ejs.t +26 -1
  214. package/templates/entity/new/frontend/collections/collections-base.ejs.t +11 -0
  215. package/templates/entity/new/frontend/entity/combined.ejs.t +31 -1
  216. package/templates/entity/new/prompt.js +27 -15
  217. package/templates/junction/new/entity.ejs.t +1 -1
  218. package/templates/junction/new/prompt.js +24 -24
  219. package/templates/junction/new/repository.ejs.t +19 -19
  220. package/templates/subsystem/auth/auth-oauth-state.schema.ejs.t +2 -2
  221. package/templates/subsystem/auth-config/prompt.js +1 -1
  222. package/templates/subsystem/auth-integrations/app-module-hook.ejs.t +5 -5
  223. package/templates/subsystem/bridge/prompt.js +1 -1
  224. package/templates/subsystem/integration/integration-audit.schema.ejs.t +192 -0
  225. package/templates/subsystem/{sync → integration}/prompt.js +12 -12
  226. package/templates/subsystem/{sync-config/codegen-config-sync-block.ejs.t → integration-config/codegen-config-integration-block.ejs.t} +7 -7
  227. package/templates/subsystem/integration-config/prompt.js +22 -0
  228. package/templates/subsystem/jobs/worker.ejs.t +2 -2
  229. package/templates/subsystem/observability/main-hook.ejs.t +1 -1
  230. package/templates/subsystem/observability/prompt.js +1 -1
  231. package/templates/subsystem/openapi-config/prompt.js +1 -1
  232. package/dist/runtime/base-classes/junction-sync-repository.js.map +0 -1
  233. package/dist/runtime/base-classes/sync-upsert-config.js +0 -1
  234. package/dist/runtime/base-classes/synced-entity-repository.js.map +0 -1
  235. package/dist/runtime/base-classes/synced-entity-service.js.map +0 -1
  236. package/dist/runtime/subsystems/auth/protocols/integration-store.js +0 -1
  237. package/dist/runtime/subsystems/auth/runtime/integration-broken.error.js +0 -19
  238. package/dist/runtime/subsystems/auth/runtime/integration-broken.error.js.map +0 -1
  239. package/dist/runtime/subsystems/sync/build-change-source.js.map +0 -1
  240. package/dist/runtime/subsystems/sync/deep-equal.differ.js.map +0 -1
  241. package/dist/runtime/subsystems/sync/detection-config.schema.js.map +0 -1
  242. package/dist/runtime/subsystems/sync/execute-sync.use-case.js.map +0 -1
  243. package/dist/runtime/subsystems/sync/index.d.ts +0 -28
  244. package/dist/runtime/subsystems/sync/index.js.map +0 -1
  245. package/dist/runtime/subsystems/sync/loopback.middleware.js.map +0 -1
  246. package/dist/runtime/subsystems/sync/poll-change-source.js.map +0 -1
  247. package/dist/runtime/subsystems/sync/sync-audit.schema.js.map +0 -1
  248. package/dist/runtime/subsystems/sync/sync-change-source.protocol.js +0 -1
  249. package/dist/runtime/subsystems/sync/sync-cursor-store.drizzle-backend.js.map +0 -1
  250. package/dist/runtime/subsystems/sync/sync-cursor-store.memory-backend.js.map +0 -1
  251. package/dist/runtime/subsystems/sync/sync-cursor-store.protocol.js +0 -1
  252. package/dist/runtime/subsystems/sync/sync-errors.js.map +0 -1
  253. package/dist/runtime/subsystems/sync/sync-field-diff.protocol.js.map +0 -1
  254. package/dist/runtime/subsystems/sync/sync-loopback.protocol.js +0 -1
  255. package/dist/runtime/subsystems/sync/sync-middleware.protocol.js +0 -1
  256. package/dist/runtime/subsystems/sync/sync-run-recorder.drizzle-backend.js.map +0 -1
  257. package/dist/runtime/subsystems/sync/sync-run-recorder.memory-backend.js.map +0 -1
  258. package/dist/runtime/subsystems/sync/sync-run-recorder.protocol.js +0 -1
  259. package/dist/runtime/subsystems/sync/sync-sink.protocol.js +0 -1
  260. package/dist/runtime/subsystems/sync/sync.module.js.map +0 -1
  261. package/dist/runtime/subsystems/sync/sync.tokens.d.ts +0 -47
  262. package/dist/runtime/subsystems/sync/sync.tokens.js +0 -18
  263. package/dist/runtime/subsystems/sync/sync.tokens.js.map +0 -1
  264. package/dist/runtime/subsystems/sync/webhook-change-source.js.map +0 -1
  265. package/examples/auth-integrations/runtime/integrations/integrations-auth.module.ts +0 -81
  266. package/examples/auth-integrations/runtime/integrations/oauth/use-cases/list-user-integrations.use-case.ts +0 -21
  267. package/examples/auth-integrations/runtime/integrations/oauth/use-cases/mark-integration-requires-reauth.use-case.ts +0 -21
  268. package/runtime/subsystems/sync/sync.tokens.ts +0 -49
  269. package/templates/entity/new/backend/modules/core/sync-source.providers.ejs.t +0 -18
  270. package/templates/subsystem/sync/sync-audit.schema.ejs.t +0 -192
  271. package/templates/subsystem/sync-config/prompt.js +0 -22
  272. /package/dist/runtime/base-classes/{sync-upsert-config.js.map → integration-upsert-config.js.map} +0 -0
  273. /package/dist/runtime/subsystems/auth/protocols/{integration-store.js.map → connection-store.js.map} +0 -0
  274. /package/dist/runtime/subsystems/{sync/sync-change-source.protocol.js.map → integration/integration-change-source.protocol.js.map} +0 -0
  275. /package/dist/runtime/subsystems/{sync/sync-cursor-store.protocol.js.map → integration/integration-cursor-store.protocol.js.map} +0 -0
  276. /package/dist/runtime/subsystems/{sync/sync-loopback.protocol.js.map → integration/integration-loopback.protocol.js.map} +0 -0
  277. /package/dist/runtime/subsystems/{sync/sync-middleware.protocol.js.map → integration/integration-middleware.protocol.js.map} +0 -0
  278. /package/dist/runtime/subsystems/{sync/sync-run-recorder.protocol.js.map → integration/integration-run-recorder.protocol.js.map} +0 -0
  279. /package/dist/runtime/subsystems/{sync/sync-sink.protocol.js.map → integration/integration-sink.protocol.js.map} +0 -0
@@ -15,11 +15,11 @@
15
15
  * - `AUTH_USER_CONTEXT` (IUserContext) — resolves "who is this request"
16
16
  * from the consumer's session/JWT/etc.
17
17
  * - `OAUTH_STATE_STORE` (IOAuthStateStore) — CSRF state minting/consume.
18
- * - `AUTH_INTEGRATION_GRANT_SINK` (IIntegrationGrantSink) — persists the
18
+ * - `AUTH_CONNECTION_GRANT_SINK` (IConnectionGrantSink) — persists the
19
19
  * freshly-minted grant. Adapter lives consumer-side (e.g. the
20
20
  * auth-integrations starter from #285).
21
21
  *
22
- * The controller never imports `IntegrationsService` or any other concrete
22
+ * The controller never imports `ConnectionsService` or any other concrete
23
23
  * consumer type — it goes through ports only.
24
24
  */
25
25
  import {
@@ -34,7 +34,7 @@ import {
34
34
  HttpStatus,
35
35
  } from '@nestjs/common';
36
36
  import {
37
- AUTH_INTEGRATION_GRANT_SINK,
37
+ AUTH_CONNECTION_GRANT_SINK,
38
38
  AUTH_OPTIONS,
39
39
  AUTH_USER_CONTEXT,
40
40
  OAUTH_STATE_STORE,
@@ -47,7 +47,7 @@ import type {
47
47
  IProviderStrategy,
48
48
  ProviderStrategyRegistry,
49
49
  } from '../protocols/provider-strategy';
50
- import type { IIntegrationGrantSink } from '../protocols/integration-store';
50
+ import type { IConnectionGrantSink } from '../protocols/connection-store';
51
51
 
52
52
  /**
53
53
  * Minimal response surface used by the controller — typed loosely so we
@@ -67,8 +67,8 @@ export class AuthController {
67
67
  private readonly userContext: IUserContext,
68
68
  @Inject(OAUTH_STATE_STORE)
69
69
  private readonly stateStore: IOAuthStateStore,
70
- @Inject(AUTH_INTEGRATION_GRANT_SINK)
71
- private readonly grantSink: IIntegrationGrantSink,
70
+ @Inject(AUTH_CONNECTION_GRANT_SINK)
71
+ private readonly grantSink: IConnectionGrantSink,
72
72
  @Inject(AUTH_OPTIONS)
73
73
  private readonly options: AuthModuleOptions,
74
74
  ) {}
@@ -127,7 +127,7 @@ export class AuthController {
127
127
  });
128
128
  return res.redirect(
129
129
  HttpStatus.FOUND,
130
- redirect ?? `/settings/integrations?connected=${encodeURIComponent(slug)}`,
130
+ redirect ?? `/settings/connections?connected=${encodeURIComponent(slug)}`,
131
131
  );
132
132
  }
133
133
 
@@ -9,25 +9,25 @@
9
9
  * AuthController,
10
10
  * ENCRYPTION_KEY,
11
11
  * OAUTH_STATE_STORE,
12
- * AUTH_INTEGRATION_READER,
13
- * AUTH_INTEGRATION_TOKEN_WRITER,
14
- * AUTH_INTEGRATION_GRANT_SINK,
12
+ * AUTH_CONNECTION_READER,
13
+ * AUTH_CONNECTION_TOKEN_WRITER,
14
+ * AUTH_CONNECTION_GRANT_SINK,
15
15
  * AUTH_USER_CONTEXT,
16
16
  * STRATEGY_REGISTRY,
17
17
  * AUTH_OPTIONS,
18
18
  * OAuth2RefreshStrategy,
19
19
  * withAuthRetry,
20
- * IntegrationBrokenError,
20
+ * ConnectionBrokenError,
21
21
  * SessionExpiredError,
22
22
  * OAuthStateError,
23
23
  * type IAuthStrategy,
24
24
  * type IEncryptionKey,
25
25
  * type IOAuthStateStore,
26
26
  * type OAuthStateRecord,
27
- * type IIntegrationReader,
28
- * type IIntegrationTokenWriter,
29
- * type IIntegrationGrantSink,
30
- * type IntegrationGrantInput,
27
+ * type IConnectionReader,
28
+ * type IConnectionTokenWriter,
29
+ * type IConnectionGrantSink,
30
+ * type ConnectionGrantInput,
31
31
  * type IUserContext,
32
32
  * type IProviderStrategy,
33
33
  * type ProviderStrategyRegistry,
@@ -49,13 +49,13 @@ export type {
49
49
  } from './protocols/oauth-state-store';
50
50
  export { OAuthStateError } from './protocols/oauth-state-store';
51
51
  export type {
52
- DecryptedIntegration,
53
- IIntegrationReader,
54
- IIntegrationTokenWriter,
55
- IntegrationTokenUpdate,
56
- IIntegrationGrantSink,
57
- IntegrationGrantInput,
58
- } from './protocols/integration-store';
52
+ DecryptedConnection,
53
+ IConnectionReader,
54
+ IConnectionTokenWriter,
55
+ ConnectionTokenUpdate,
56
+ IConnectionGrantSink,
57
+ ConnectionGrantInput,
58
+ } from './protocols/connection-store';
59
59
  export type { IUserContext } from './protocols/user-context';
60
60
  export type {
61
61
  IProviderStrategy,
@@ -67,9 +67,9 @@ export type {
67
67
  export {
68
68
  ENCRYPTION_KEY,
69
69
  OAUTH_STATE_STORE,
70
- AUTH_INTEGRATION_READER,
71
- AUTH_INTEGRATION_TOKEN_WRITER,
72
- AUTH_INTEGRATION_GRANT_SINK,
70
+ AUTH_CONNECTION_READER,
71
+ AUTH_CONNECTION_TOKEN_WRITER,
72
+ AUTH_CONNECTION_GRANT_SINK,
73
73
  AUTH_USER_CONTEXT,
74
74
  STRATEGY_REGISTRY,
75
75
  AUTH_OPTIONS,
@@ -83,7 +83,7 @@ export {
83
83
  type FetchLike,
84
84
  } from './runtime/oauth2-refresh.strategy';
85
85
  export { withAuthRetry, type WithAuthRetryOptions } from './runtime/with-auth-retry';
86
- export { IntegrationBrokenError } from './runtime/integration-broken.error';
86
+ export { ConnectionBrokenError } from './runtime/connection-broken.error';
87
87
  export {
88
88
  SessionExpiredError,
89
89
  isSessionExpiredError,
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Auth subsystem — `IAuthStrategy` port.
3
3
  *
4
- * The credentials-resolution seam used by every integration adapter. Adapters
4
+ * The credentials-resolution seam used by every connection adapter. Adapters
5
5
  * depend on this interface; concrete strategies (SalesforceAuthStrategy,
6
6
  * HubSpotAuthStrategy, future Gmail/Calendar) typically extend the
7
7
  * `OAuth2RefreshStrategy` template-method base in `../runtime/`.
@@ -35,12 +35,12 @@ export interface AuthResolveOptions {
35
35
  }
36
36
 
37
37
  /**
38
- * Auth-strategy contract shared by every integration adapter. Implementations
38
+ * Auth-strategy contract shared by every connection adapter. Implementations
39
39
  * typically extend `OAuth2RefreshStrategy` and override four small hooks.
40
40
  */
41
41
  export interface IAuthStrategy {
42
42
  resolve(
43
- integrationId: string,
43
+ connectionId: string,
44
44
  opts?: AuthResolveOptions,
45
45
  ): Promise<AuthCredentials>;
46
46
  }
@@ -1,26 +1,26 @@
1
1
  /**
2
- * Auth subsystem — integration storage ports.
2
+ * Auth subsystem — connection storage ports.
3
3
  *
4
- * `OAuth2RefreshStrategy` reads decrypted integration rows and persists
4
+ * `OAuth2RefreshStrategy` reads decrypted connection rows and persists
5
5
  * refreshed tokens. The subsystem doesn't care what entity framework stores
6
6
  * those rows — consumers implement these narrow ports against whatever
7
- * `integrations` table their app uses.
7
+ * `connections` table their app uses.
8
8
  *
9
9
  * In the extraction-source app both ports are satisfied by a
10
- * pair of thin adapters over `IntegrationService` + `RefreshIntegrationUseCase`.
10
+ * pair of thin adapters over `ConnectionService` + `RefreshConnectionUseCase`.
11
11
  * The codegen-patterns `examples/auth-integrations/` starter (separate PR)
12
- * ships a canonical `integration.yaml` whose generated service + use case
12
+ * ships a canonical `connection.yaml` whose generated service + use case
13
13
  * satisfy the shape out of the box.
14
14
  */
15
15
 
16
16
  /**
17
- * An integration row with its secrets decrypted and ready to use.
17
+ * An connection row with its secrets decrypted and ready to use.
18
18
  *
19
19
  * Consumers produce this shape from their own storage by passing stored
20
20
  * ciphertexts through `IEncryptionKey.decrypt`. The subsystem never sees
21
21
  * the ciphertext form.
22
22
  */
23
- export interface DecryptedIntegration {
23
+ export interface DecryptedConnection {
24
24
  id: string;
25
25
  /** Provider slug — must match the strategy's `provider`. */
26
26
  provider: string;
@@ -35,13 +35,13 @@ export interface DecryptedIntegration {
35
35
  }
36
36
 
37
37
  /**
38
- * Read port — fetches a decrypted integration by id.
38
+ * Read port — fetches a decrypted connection by id.
39
39
  *
40
40
  * Adapters typically wrap a service/repo call that does the decryption
41
41
  * internally. `OAuth2RefreshStrategy.resolve()` calls this on every invocation.
42
42
  */
43
- export interface IIntegrationReader {
44
- findByIdDecrypted(integrationId: string): Promise<DecryptedIntegration | null>;
43
+ export interface IConnectionReader {
44
+ findByIdDecrypted(connectionId: string): Promise<DecryptedConnection | null>;
45
45
  }
46
46
 
47
47
  /**
@@ -54,15 +54,15 @@ export interface IIntegrationReader {
54
54
  * `refreshToken` semantics: `undefined` means "provider did not rotate; keep
55
55
  * existing ciphertext". A rotated token comes through as a string.
56
56
  */
57
- export interface IntegrationTokenUpdate {
58
- integrationId: string;
57
+ export interface ConnectionTokenUpdate {
58
+ connectionId: string;
59
59
  accessToken: string;
60
60
  refreshToken?: string;
61
61
  expiresAt: Date;
62
62
  }
63
63
 
64
- export interface IIntegrationTokenWriter {
65
- persistRefresh(update: IntegrationTokenUpdate): Promise<void>;
64
+ export interface IConnectionTokenWriter {
65
+ persistRefresh(update: ConnectionTokenUpdate): Promise<void>;
66
66
  }
67
67
 
68
68
  /**
@@ -71,10 +71,10 @@ export interface IIntegrationTokenWriter {
71
71
  * re-connected an existing one).
72
72
  *
73
73
  * `AuthController.callback` invokes this after `IProviderStrategy.exchangeCodeForTokens`.
74
- * The subsystem itself never imports a concrete `IntegrationsService` — the
74
+ * The subsystem itself never imports a concrete `ConnectionsService` — the
75
75
  * consumer's `auth-integrations` starter (or any equivalent) adapts this
76
76
  * port. Keeps the auth subsystem standalone: a non-codegen consumer can
77
- * satisfy the port against its own integrations storage.
77
+ * satisfy the port against its own connections storage.
78
78
  *
79
79
  * Semantics:
80
80
  * - Upserts on `(userId, provider)`. Repeated grants for the same pair
@@ -85,7 +85,7 @@ export interface IIntegrationTokenWriter {
85
85
  * them (e.g. some providers omit `expires_in`; not every flow returns
86
86
  * a refresh token on first grant).
87
87
  */
88
- export interface IntegrationGrantInput {
88
+ export interface ConnectionGrantInput {
89
89
  userId: string;
90
90
  /** Provider slug — must match the strategy's `provider`. */
91
91
  provider: string;
@@ -98,6 +98,6 @@ export interface IntegrationGrantInput {
98
98
  providerMetadata?: Record<string, unknown>;
99
99
  }
100
100
 
101
- export interface IIntegrationGrantSink {
102
- createOrUpdateFromOAuthGrant(input: IntegrationGrantInput): Promise<void>;
101
+ export interface IConnectionGrantSink {
102
+ createOrUpdateFromOAuthGrant(input: ConnectionGrantInput): Promise<void>;
103
103
  }
@@ -18,9 +18,9 @@
18
18
  * and dispatches by slug.
19
19
  *
20
20
  * **Naming convention:** interfaces that describe behavioral ports use the
21
- * `I` prefix (`IProviderStrategy`, `IIntegrationReader`, `IUserContext`,
21
+ * `I` prefix (`IProviderStrategy`, `IConnectionReader`, `IUserContext`,
22
22
  * `IOAuthStateStore`, `IEncryptionKey`). Plain data types / DTOs (e.g.
23
- * `ExchangedTokens`, `DecryptedIntegration`, `IntegrationGrantInput`) do
23
+ * `ExchangedTokens`, `DecryptedConnection`, `ConnectionGrantInput`) do
24
24
  * not. Abstract template-method classes (e.g. `OAuth2RefreshStrategy`) also
25
25
  * do not — the `I` is for interfaces only.
26
26
  */
@@ -2,20 +2,20 @@
2
2
  * Thrown when an OAuth2 provider returns `400 invalid_grant`/`invalid_token`
3
3
  * on refresh — the refresh token itself is dead (user revoked, org
4
4
  * deactivated, token expired beyond the provider's rotation window). The
5
- * integration should be marked broken so background sync stops picking it
5
+ * connection should be marked broken so background sync stops picking it
6
6
  * up; the user re-initiates OAuth.
7
7
  *
8
8
  * Shared across every OAuth2 strategy.
9
9
  */
10
- export class IntegrationBrokenError extends Error {
10
+ export class ConnectionBrokenError extends Error {
11
11
  constructor(
12
- readonly integrationId: string,
12
+ readonly connectionId: string,
13
13
  readonly errorCode: string,
14
14
  readonly errorDescription: string,
15
15
  ) {
16
16
  super(
17
- `Integration ${integrationId} broken: ${errorCode} - ${errorDescription}`,
17
+ `Connection ${connectionId} broken: ${errorCode} - ${errorDescription}`,
18
18
  );
19
- this.name = 'IntegrationBrokenError';
19
+ this.name = 'ConnectionBrokenError';
20
20
  }
21
21
  }
@@ -8,18 +8,18 @@
8
8
  * later" evidence.
9
9
  *
10
10
  * Subclass contract:
11
- * - `provider` — slug matched against `integrations.provider`
11
+ * - `provider` — slug matched against `connections.provider`
12
12
  * - `defaultExpiresInSec` — fallback when refresh response omits `expires_in`
13
13
  * - `tokenEndpoint()` — URL to POST the refresh grant
14
14
  * - `refreshBodyExtras()` — provider-specific body params
15
15
  * - `parseRefreshResponse()` — raw JSON → ParsedRefreshResponse
16
16
  * - `buildCredentials()` — stored or freshly-refreshed access token +
17
- * integration + optional raw refresh response
17
+ * connection + optional raw refresh response
18
18
  * → provider credentials
19
19
  *
20
20
  * Base handles: expiry check w/ 5-min safety window, `forceRefresh` escape
21
21
  * hatch, POST form-urlencoded body, OAuth2 error mapping to
22
- * `IntegrationBrokenError`, refresh-token rotation persistence, fetch +
22
+ * `ConnectionBrokenError`, refresh-token rotation persistence, fetch +
23
23
  * clock injection for tests.
24
24
  */
25
25
  import type {
@@ -28,11 +28,11 @@ import type {
28
28
  IAuthStrategy,
29
29
  } from '../protocols/auth-strategy';
30
30
  import type {
31
- DecryptedIntegration,
32
- IIntegrationReader,
33
- IIntegrationTokenWriter,
34
- } from '../protocols/integration-store';
35
- import { IntegrationBrokenError } from './integration-broken.error';
31
+ DecryptedConnection,
32
+ IConnectionReader,
33
+ IConnectionTokenWriter,
34
+ } from '../protocols/connection-store';
35
+ import { ConnectionBrokenError } from './connection-broken.error';
36
36
 
37
37
  export type FetchLike = (
38
38
  input: string | URL | Request,
@@ -43,8 +43,8 @@ export type FetchLike = (
43
43
  const REFRESH_SAFETY_MS = 5 * 60 * 1000;
44
44
 
45
45
  export interface OAuth2RefreshStrategyOptions {
46
- integrationReader: IIntegrationReader;
47
- tokenWriter: IIntegrationTokenWriter;
46
+ connectionReader: IConnectionReader;
47
+ tokenWriter: IConnectionTokenWriter;
48
48
  /** Injectable fetch for tests. Defaults to the global `fetch`. */
49
49
  fetch?: FetchLike;
50
50
  /** Injectable clock for tests. Defaults to `Date.now`. */
@@ -66,65 +66,65 @@ export abstract class OAuth2RefreshStrategy implements IAuthStrategy {
66
66
  protected abstract readonly provider: string;
67
67
  protected abstract readonly defaultExpiresInSec: number;
68
68
 
69
- protected readonly integrationReader: IIntegrationReader;
70
- protected readonly tokenWriter: IIntegrationTokenWriter;
69
+ protected readonly connectionReader: IConnectionReader;
70
+ protected readonly tokenWriter: IConnectionTokenWriter;
71
71
  protected readonly fetchImpl: FetchLike;
72
72
  protected readonly now: () => number;
73
73
 
74
74
  constructor(opts: OAuth2RefreshStrategyOptions) {
75
- this.integrationReader = opts.integrationReader;
75
+ this.connectionReader = opts.connectionReader;
76
76
  this.tokenWriter = opts.tokenWriter;
77
77
  this.fetchImpl = opts.fetch ?? fetch;
78
78
  this.now = opts.now ?? Date.now;
79
79
  }
80
80
 
81
81
  async resolve(
82
- integrationId: string,
82
+ connectionId: string,
83
83
  opts: AuthResolveOptions = {},
84
84
  ): Promise<AuthCredentials> {
85
- const integration =
86
- await this.integrationReader.findByIdDecrypted(integrationId);
87
- if (!integration) {
88
- throw new Error(`Integration ${integrationId} not found`);
85
+ const connection =
86
+ await this.connectionReader.findByIdDecrypted(connectionId);
87
+ if (!connection) {
88
+ throw new Error(`Connection ${connectionId} not found`);
89
89
  }
90
- if (integration.provider !== this.provider) {
90
+ if (connection.provider !== this.provider) {
91
91
  throw new Error(
92
- `${this.constructor.name} called for non-${this.provider} integration ${integrationId} (provider=${integration.provider})`,
92
+ `${this.constructor.name} called for non-${this.provider} connection ${connectionId} (provider=${connection.provider})`,
93
93
  );
94
94
  }
95
95
 
96
96
  const needsRefresh =
97
97
  opts.forceRefresh ||
98
- this.isExpiring(integration.expiresAt) ||
99
- !integration.accessToken;
98
+ this.isExpiring(connection.expiresAt) ||
99
+ !connection.accessToken;
100
100
 
101
101
  if (!needsRefresh) {
102
- return this.buildCredentials(integration.accessToken, integration);
102
+ return this.buildCredentials(connection.accessToken, connection);
103
103
  }
104
104
 
105
- if (!integration.refreshToken) {
106
- throw new IntegrationBrokenError(
107
- integrationId,
105
+ if (!connection.refreshToken) {
106
+ throw new ConnectionBrokenError(
107
+ connectionId,
108
108
  'no_refresh_token',
109
- 'Integration has no refresh token; user must reconnect',
109
+ 'Connection has no refresh token; user must reconnect',
110
110
  );
111
111
  }
112
112
 
113
113
  const { parsed, raw } = await this.executeRefresh(
114
- integrationId,
115
- integration.refreshToken,
114
+ connectionId,
115
+ connection.refreshToken,
116
116
  );
117
117
  const newExpiresAt = new Date(
118
118
  this.now() + (parsed.expiresInSec ?? this.defaultExpiresInSec) * 1000,
119
119
  );
120
120
  await this.tokenWriter.persistRefresh({
121
- integrationId,
121
+ connectionId,
122
122
  accessToken: parsed.accessToken,
123
123
  refreshToken: parsed.refreshToken ?? undefined,
124
124
  expiresAt: newExpiresAt,
125
125
  });
126
126
 
127
- return this.buildCredentials(parsed.accessToken, integration, raw);
127
+ return this.buildCredentials(parsed.accessToken, connection, raw);
128
128
  }
129
129
 
130
130
  protected abstract tokenEndpoint(): string;
@@ -132,12 +132,12 @@ export abstract class OAuth2RefreshStrategy implements IAuthStrategy {
132
132
  protected abstract parseRefreshResponse(raw: unknown): ParsedRefreshResponse;
133
133
  protected abstract buildCredentials(
134
134
  accessToken: string,
135
- integration: DecryptedIntegration,
135
+ connection: DecryptedConnection,
136
136
  refreshRaw?: unknown,
137
137
  ): AuthCredentials;
138
138
 
139
139
  private async executeRefresh(
140
- integrationId: string,
140
+ connectionId: string,
141
141
  refreshToken: string,
142
142
  ): Promise<{ parsed: ParsedRefreshResponse; raw: unknown }> {
143
143
  const body = new URLSearchParams({
@@ -160,8 +160,8 @@ export abstract class OAuth2RefreshStrategy implements IAuthStrategy {
160
160
  response.status === 400 &&
161
161
  (err.error === 'invalid_grant' || err.error === 'invalid_token')
162
162
  ) {
163
- throw new IntegrationBrokenError(
164
- integrationId,
163
+ throw new ConnectionBrokenError(
164
+ connectionId,
165
165
  err.error ?? 'invalid_grant',
166
166
  err.error_description ?? err.message ?? 'refresh token rejected',
167
167
  );
@@ -33,18 +33,18 @@ export interface WithAuthRetryOptions {
33
33
 
34
34
  export async function withAuthRetry<T>(
35
35
  authStrategy: IAuthStrategy,
36
- integrationId: string,
36
+ connectionId: string,
37
37
  op: (credentials: AuthCredentials) => Promise<T>,
38
38
  options: WithAuthRetryOptions = {},
39
39
  ): Promise<T> {
40
40
  const classify = options.isSessionExpired ?? isSessionExpiredError;
41
41
 
42
- let creds = await authStrategy.resolve(integrationId);
42
+ let creds = await authStrategy.resolve(connectionId);
43
43
  try {
44
44
  return await op(creds);
45
45
  } catch (e) {
46
46
  if (!classify(e)) throw e;
47
- creds = await authStrategy.resolve(integrationId, { forceRefresh: true });
47
+ creds = await authStrategy.resolve(connectionId, { forceRefresh: true });
48
48
  return op(creds);
49
49
  }
50
50
  }
@@ -46,17 +46,32 @@ export type {
46
46
  PoolStatusCount,
47
47
  JobRunFailure,
48
48
  StatusHistogram,
49
- SyncRunSummary,
49
+ IntegrationRunSummary,
50
50
  CursorSnapshot,
51
51
  } from './observability';
52
52
 
53
+ // Integration — entity change-source registry (C7) + change-source port.
54
+ // Exposed here so L2 surface packages (e.g. @pattern-stack/codegen-crm) can
55
+ // import them across the package boundary via @pattern-stack/codegen/subsystems
56
+ // (Track C C6). Selective re-export (not `export *`) to avoid the
57
+ // IntegrationRunSummary name clash with the observability barrel above.
58
+ export {
59
+ ENTITY_CHANGE_SOURCE_REGISTRY,
60
+ MemoryEntityChangeSourceRegistry,
61
+ UnknownEntityError,
62
+ } from './integration';
63
+ export type {
64
+ IEntityChangeSourceRegistry,
65
+ IChangeSource,
66
+ } from './integration';
67
+
53
68
  // Auth
54
69
  export {
55
70
  ENCRYPTION_KEY,
56
71
  OAUTH_STATE_STORE,
57
- AUTH_INTEGRATION_READER,
58
- AUTH_INTEGRATION_TOKEN_WRITER,
59
- AUTH_INTEGRATION_GRANT_SINK,
72
+ AUTH_CONNECTION_READER,
73
+ AUTH_CONNECTION_TOKEN_WRITER,
74
+ AUTH_CONNECTION_GRANT_SINK,
60
75
  AUTH_USER_CONTEXT,
61
76
  STRATEGY_REGISTRY,
62
77
  AUTH_OPTIONS,
@@ -64,7 +79,7 @@ export {
64
79
  AuthController,
65
80
  OAuth2RefreshStrategy,
66
81
  withAuthRetry,
67
- IntegrationBrokenError,
82
+ ConnectionBrokenError,
68
83
  SessionExpiredError,
69
84
  isSessionExpiredError,
70
85
  OAuthStateError,
@@ -77,19 +92,19 @@ export type {
77
92
  IAuthStrategy,
78
93
  IEncryptionKey,
79
94
  IOAuthStateStore,
80
- IIntegrationReader,
81
- IIntegrationTokenWriter,
82
- IIntegrationGrantSink,
83
- IntegrationGrantInput,
95
+ IConnectionReader,
96
+ IConnectionTokenWriter,
97
+ IConnectionGrantSink,
98
+ ConnectionGrantInput,
84
99
  IUserContext,
85
100
  IProviderStrategy,
86
101
  ProviderStrategyRegistry,
87
102
  ExchangedTokens,
88
103
  AuthCredentials,
89
104
  AuthResolveOptions,
90
- DecryptedIntegration,
105
+ DecryptedConnection,
91
106
  OAuthStateRecord,
92
- IntegrationTokenUpdate,
107
+ ConnectionTokenUpdate,
93
108
  ParsedRefreshResponse,
94
109
  AuthOAuthState,
95
110
  } from './auth';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Sync subsystem — `buildChangeSource()` runtime factory (#250, ADR-033.1 b).
2
+ * Integration subsystem — `buildChangeSource()` runtime factory (#250, ADR-033.1 b).
3
3
  *
4
4
  * Mode-dispatching constructor for `IChangeSource<T>`. Codegen-emitted
5
5
  * provider modules call this from `useFactory` once they've resolved the
@@ -9,8 +9,8 @@
9
9
  * consumers pass one fetch callback regardless of mode.
10
10
  */
11
11
  import type { DetectionConfig } from './detection-config.schema';
12
- import type { IChangeSource } from './sync-change-source.protocol';
13
- import type { ChangeMiddleware } from './sync-middleware.protocol';
12
+ import type { IChangeSource } from './integration-change-source.protocol';
13
+ import type { ChangeMiddleware } from './integration-middleware.protocol';
14
14
  import {
15
15
  PollChangeSource,
16
16
  type PollFetchCallback,
@@ -1,5 +1,5 @@
1
1
  /**
2
- * DeepEqualDiffer — default `IFieldDiffer<T>` for the sync subsystem (SYNC-5).
2
+ * DeepEqualDiffer — default `IFieldDiffer<T>` for the integration subsystem (SYNC-5).
3
3
  *
4
4
  * Walks every field of `incoming` against `existing`, emitting a structured
5
5
  * per-field diff (`{ from, to }`) for every field whose value changed.
@@ -39,15 +39,15 @@ import type {
39
39
  DiffResult,
40
40
  FieldDiff,
41
41
  IFieldDiffer,
42
- } from './sync-field-diff.protocol';
42
+ } from './integration-field-diff.protocol';
43
43
 
44
44
  /**
45
- * Default ignore list. Keep in sync with consumer canonical-record shapes —
46
- * adding a row-metadata field here means no sync will ever mark it changed.
45
+ * Default ignore list. Keep in integration with consumer canonical-record shapes —
46
+ * adding a row-metadata field here means no integration will ever mark it changed.
47
47
  *
48
48
  * Includes the columns contributed by the `external_id_tracking` behavior
49
49
  * (`external_id`/`externalId`, `provider`, `provider_metadata`/`providerMetadata`).
50
- * These are sync-tracking metadata, not domain attributes: they ride on the
50
+ * These are integration-tracking metadata, not domain attributes: they ride on the
51
51
  * canonical record but must never register as a field change (the external id
52
52
  * is the record's identity, not a mutable value). Listed in both snake_case
53
53
  * and camelCase so the differ ignores them regardless of the consumer's
@@ -71,7 +71,7 @@ const DEFAULT_IGNORE_FIELDS: ReadonlySet<string> = new Set([
71
71
  export interface DeepEqualDifferOptions {
72
72
  /**
73
73
  * Extra field names to ignore in addition to the defaults. Consumers can
74
- * pass `['sync_version']` etc. to augment the base list; values here are
74
+ * pass `['integration_version']` etc. to augment the base list; values here are
75
75
  * merged (not replaced) with `DEFAULT_IGNORE_FIELDS`.
76
76
  */
77
77
  readonly ignore?: readonly string[];
@@ -148,7 +148,7 @@ export class DeepEqualDiffer<T extends Record<string, unknown>>
148
148
  // ─── equality helpers ───────────────────────────────────────────────────────
149
149
 
150
150
  /**
151
- * Field-level equality with the canonical-sync normalizations:
151
+ * Field-level equality with the canonical-integration normalizations:
152
152
  * - Date → toISOString (adapters deliver strings)
153
153
  * - numeric-string vs number → numeric equality when both parse
154
154
  * - deep equality for plain objects/arrays (single-level is enough for
@@ -1,7 +1,7 @@
1
1
  /**
2
- * Sync subsystem — DetectionConfig schema (#226-1)
2
+ * Integration subsystem — DetectionConfig schema (#226-1)
3
3
  *
4
- * Canonical Zod schema for per-entity sync detection config. The schema is
4
+ * Canonical Zod schema for per-entity integration detection config. The schema is
5
5
  * the single source of truth for filter/mapping shape and is consumed by:
6
6
  *
7
7
  * 1. Runtime primitives — `PollChangeSource<T>`, `WebhookChangeSource<T>`
@@ -16,7 +16,7 @@
16
16
  * - Cursor strategy is a tagged union over the four shapes the three modes
17
17
  * need (`systemModstamp`, `replayId`, `timestamp`, `eventId`). Each
18
18
  * strategy types its cursor internally; the orchestrator persists what
19
- * the iterator last yielded (sync skill rule 2).
19
+ * the iterator last yielded (integration skill rule 2).
20
20
  * - `mode: 'poll'` may opt into `provenance: 'cdc'` so Stripe-style event
21
21
  * endpoints (mechanically a poll, semantically CDC) reuse the poll
22
22
  * primitive while emitting `Change<T>.source = 'cdc'`. Long-lived