@pithy-sh/core 0.1.4 → 0.2.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 (270) hide show
  1. package/dist/address/address.d.ts +2 -0
  2. package/dist/address/address.js +2 -0
  3. package/dist/audit/auditEvent.d.ts +2 -0
  4. package/dist/audit/auditEvent.js +2 -0
  5. package/dist/audit/recorder.d.ts +2 -0
  6. package/dist/audit/recorder.js +2 -0
  7. package/dist/capability/bindings.d.ts +2 -0
  8. package/dist/capability/bindings.js +2 -0
  9. package/dist/capability/capability.d.ts +20 -0
  10. package/dist/capability/capability.d.ts.map +1 -1
  11. package/dist/capability/capability.js +2 -0
  12. package/dist/capability/client.d.ts +2 -0
  13. package/dist/capability/client.js +2 -0
  14. package/dist/capability/compose.d.ts +2 -0
  15. package/dist/capability/compose.js +2 -0
  16. package/dist/capability/composition.d.ts +2 -0
  17. package/dist/capability/composition.js +2 -0
  18. package/dist/capability/config.d.ts +2 -0
  19. package/dist/capability/config.js +2 -0
  20. package/dist/capability/devSecret.d.ts +2 -0
  21. package/dist/capability/devSecret.js +2 -0
  22. package/dist/capability/manifest.d.ts +63 -0
  23. package/dist/capability/manifest.d.ts.map +1 -1
  24. package/dist/capability/manifest.js +63 -1
  25. package/dist/capability/secretOrigin.d.ts +2 -0
  26. package/dist/capability/secretOrigin.js +2 -0
  27. package/dist/capability/settings.d.ts +2 -0
  28. package/dist/capability/settings.js +2 -0
  29. package/dist/capability/validateBindings.d.ts +2 -0
  30. package/dist/capability/validateBindings.js +2 -0
  31. package/dist/capability/vanishingKey.d.ts +2 -0
  32. package/dist/capability/vanishingKey.js +2 -0
  33. package/dist/controlPlane/audit/actions.d.ts +2 -0
  34. package/dist/controlPlane/audit/actions.js +2 -0
  35. package/dist/controlPlane/capability.d.ts +2 -0
  36. package/dist/controlPlane/capability.js +2 -0
  37. package/dist/controlPlane/config/config.d.ts +2 -0
  38. package/dist/controlPlane/config/config.js +2 -0
  39. package/dist/controlPlane/context.d.ts +2 -0
  40. package/dist/controlPlane/context.js +2 -0
  41. package/dist/controlPlane/data/connection.d.ts +2 -0
  42. package/dist/controlPlane/data/connection.js +2 -0
  43. package/dist/controlPlane/data/keyLifecycle.d.ts +2 -0
  44. package/dist/controlPlane/data/keyLifecycle.js +2 -0
  45. package/dist/controlPlane/data/replay.d.ts +2 -0
  46. package/dist/controlPlane/data/replay.js +2 -0
  47. package/dist/controlPlane/data/tables.d.ts +2 -0
  48. package/dist/controlPlane/data/tables.js +2 -0
  49. package/dist/controlPlane/discovery/adminRoute.d.ts +2 -0
  50. package/dist/controlPlane/discovery/adminRoute.js +2 -0
  51. package/dist/controlPlane/discovery/configuration.d.ts +2 -0
  52. package/dist/controlPlane/discovery/configuration.js +2 -0
  53. package/dist/controlPlane/discovery/drift.d.ts +2 -0
  54. package/dist/controlPlane/discovery/drift.js +2 -0
  55. package/dist/controlPlane/discovery/health.d.ts +2 -0
  56. package/dist/controlPlane/discovery/health.js +2 -0
  57. package/dist/controlPlane/discovery/healthSummary.d.ts +2 -0
  58. package/dist/controlPlane/discovery/healthSummary.js +2 -0
  59. package/dist/controlPlane/error/errors.d.ts +2 -0
  60. package/dist/controlPlane/error/errors.js +2 -0
  61. package/dist/controlPlane/http/cors.d.ts +2 -0
  62. package/dist/controlPlane/http/cors.js +2 -0
  63. package/dist/controlPlane/http/guard.d.ts +2 -0
  64. package/dist/controlPlane/http/guard.js +2 -0
  65. package/dist/controlPlane/http/handlers.d.ts +2 -0
  66. package/dist/controlPlane/http/handlers.js +2 -0
  67. package/dist/controlPlane/http/responses.d.ts +2 -0
  68. package/dist/controlPlane/http/responses.js +2 -0
  69. package/dist/controlPlane/http/routes.d.ts +2 -0
  70. package/dist/controlPlane/http/routes.js +2 -0
  71. package/dist/controlPlane/http/schemas.d.ts +2 -0
  72. package/dist/controlPlane/http/schemas.js +2 -0
  73. package/dist/controlPlane/http/verify.d.ts +2 -0
  74. package/dist/controlPlane/http/verify.js +2 -0
  75. package/dist/controlPlane/migrations/0001_init.d.ts +2 -0
  76. package/dist/controlPlane/migrations/0001_init.js +2 -0
  77. package/dist/controlPlane/replay/d1Guard.d.ts +2 -0
  78. package/dist/controlPlane/replay/d1Guard.js +2 -0
  79. package/dist/controlPlane/replay/guard.d.ts +2 -0
  80. package/dist/controlPlane/replay/guard.js +2 -0
  81. package/dist/controlPlane/replay/kvGuard.d.ts +2 -0
  82. package/dist/controlPlane/replay/kvGuard.js +2 -0
  83. package/dist/controlPlane/scope/scope.d.ts +2 -0
  84. package/dist/controlPlane/scope/scope.js +2 -0
  85. package/dist/controlPlane/token/base64url.d.ts +2 -0
  86. package/dist/controlPlane/token/base64url.js +2 -0
  87. package/dist/controlPlane/token/claims.d.ts +2 -0
  88. package/dist/controlPlane/token/claims.js +2 -0
  89. package/dist/controlPlane/token/digest.d.ts +2 -0
  90. package/dist/controlPlane/token/digest.js +2 -0
  91. package/dist/controlPlane/token/jws.d.ts +2 -0
  92. package/dist/controlPlane/token/jws.js +2 -0
  93. package/dist/controlPlane/token/mint.d.ts +2 -0
  94. package/dist/controlPlane/token/mint.js +2 -0
  95. package/dist/controlPlane/wire.d.ts +2 -0
  96. package/dist/controlPlane/wire.js +2 -0
  97. package/dist/createBackend.d.ts +2 -0
  98. package/dist/createBackend.js +2 -0
  99. package/dist/createEntrypoint.d.ts +2 -0
  100. package/dist/createEntrypoint.d.ts.map +1 -1
  101. package/dist/createEntrypoint.js +3 -0
  102. package/dist/data/boundParameters.d.ts +2 -0
  103. package/dist/data/boundParameters.js +2 -0
  104. package/dist/data/codecs.d.ts +2 -0
  105. package/dist/data/codecs.js +2 -0
  106. package/dist/data/cursor.d.ts +2 -0
  107. package/dist/data/cursor.js +2 -0
  108. package/dist/data/databases.d.ts +2 -0
  109. package/dist/data/databases.js +2 -0
  110. package/dist/data/db.d.ts +2 -0
  111. package/dist/data/db.js +2 -0
  112. package/dist/data/withD1Retry.d.ts +2 -0
  113. package/dist/data/withD1Retry.js +2 -0
  114. package/dist/entitlement/entitlement.d.ts +2 -0
  115. package/dist/entitlement/entitlement.js +2 -0
  116. package/dist/entitlement/gateScan.d.ts +2 -0
  117. package/dist/entitlement/gateScan.js +2 -0
  118. package/dist/entitlement/require.d.ts +2 -0
  119. package/dist/entitlement/require.js +2 -0
  120. package/dist/env/ambient.d.ts +2 -0
  121. package/dist/env/ambient.js +2 -0
  122. package/dist/env/ci.d.ts +2 -0
  123. package/dist/env/ci.js +2 -0
  124. package/dist/env/stem.d.ts +2 -0
  125. package/dist/env/stem.js +2 -0
  126. package/dist/error/cause.d.ts +68 -0
  127. package/dist/error/cause.d.ts.map +1 -1
  128. package/dist/error/cause.js +94 -1
  129. package/dist/error/client.d.ts +2 -0
  130. package/dist/error/client.js +2 -0
  131. package/dist/error/extend.d.ts +2 -0
  132. package/dist/error/extend.js +2 -0
  133. package/dist/error/http.d.ts +2 -0
  134. package/dist/error/http.js +2 -0
  135. package/dist/error/payload.d.ts +2 -0
  136. package/dist/error/payload.js +2 -0
  137. package/dist/error/pithyError.d.ts +2 -0
  138. package/dist/error/pithyError.js +2 -0
  139. package/dist/error/terminal.d.ts +2 -0
  140. package/dist/error/terminal.js +2 -0
  141. package/dist/http/authContext.d.ts +2 -0
  142. package/dist/http/authContext.js +2 -0
  143. package/dist/http/routeContract.d.ts +2 -0
  144. package/dist/http/routeContract.js +2 -0
  145. package/dist/http/sameOrigin.d.ts +2 -0
  146. package/dist/http/sameOrigin.js +2 -0
  147. package/dist/http/signedWebhook.d.ts +2 -0
  148. package/dist/http/signedWebhook.js +2 -0
  149. package/dist/http/validation.d.ts +2 -0
  150. package/dist/http/validation.js +2 -0
  151. package/dist/http/verification.d.ts +2 -0
  152. package/dist/http/verification.js +2 -0
  153. package/dist/i18n/acceptLanguage.d.ts +2 -0
  154. package/dist/i18n/acceptLanguage.js +2 -0
  155. package/dist/i18n/catalog.d.ts +2 -0
  156. package/dist/i18n/catalog.js +2 -0
  157. package/dist/i18n/locale.d.ts +2 -0
  158. package/dist/i18n/locale.js +2 -0
  159. package/dist/i18n/localeMarker.d.ts +2 -0
  160. package/dist/i18n/localeMarker.js +2 -0
  161. package/dist/i18n/match.d.ts +2 -0
  162. package/dist/i18n/match.js +2 -0
  163. package/dist/i18n/registry.d.ts +2 -0
  164. package/dist/i18n/registry.js +2 -0
  165. package/dist/i18n/translator.d.ts +2 -0
  166. package/dist/i18n/translator.js +2 -0
  167. package/dist/index.d.ts +2 -0
  168. package/dist/index.js +2 -0
  169. package/dist/kv/kv.d.ts +2 -0
  170. package/dist/kv/kv.js +2 -0
  171. package/dist/kv/namespaces.d.ts +2 -0
  172. package/dist/kv/namespaces.js +2 -0
  173. package/dist/logger/local.d.ts +2 -0
  174. package/dist/logger/local.js +2 -0
  175. package/dist/logger/logger.d.ts +2 -0
  176. package/dist/logger/logger.js +2 -0
  177. package/dist/logger/record.d.ts +2 -0
  178. package/dist/logger/record.js +2 -0
  179. package/dist/logger/worker.d.ts +2 -0
  180. package/dist/logger/worker.js +2 -0
  181. package/dist/migrations/batch.d.ts +2 -0
  182. package/dist/migrations/batch.js +2 -0
  183. package/dist/migrations/bookkeeping.d.ts +2 -0
  184. package/dist/migrations/bookkeeping.js +2 -0
  185. package/dist/migrations/owner.d.ts +2 -0
  186. package/dist/migrations/owner.js +2 -0
  187. package/dist/migrations/registry.d.ts +2 -0
  188. package/dist/migrations/registry.js +2 -0
  189. package/dist/migrations/runner.d.ts +2 -0
  190. package/dist/migrations/runner.js +2 -0
  191. package/dist/naming/domains.d.ts +2 -0
  192. package/dist/naming/domains.js +2 -0
  193. package/dist/naming/environment.d.ts +2 -0
  194. package/dist/naming/environment.js +2 -0
  195. package/dist/naming/feature.d.ts +2 -0
  196. package/dist/naming/feature.js +2 -0
  197. package/dist/naming/limits.d.ts +2 -0
  198. package/dist/naming/limits.js +2 -0
  199. package/dist/naming/provisionScope.d.ts +2 -0
  200. package/dist/naming/provisionScope.js +2 -0
  201. package/dist/naming/resource.d.ts +2 -0
  202. package/dist/naming/resource.js +2 -0
  203. package/dist/naming/resourceNames.d.ts +2 -0
  204. package/dist/naming/resourceNames.js +2 -0
  205. package/dist/naming/segment.d.ts +2 -0
  206. package/dist/naming/segment.js +2 -0
  207. package/dist/projection/asRead.d.ts +2 -0
  208. package/dist/projection/asRead.js +2 -0
  209. package/dist/projection/published.d.ts +2 -0
  210. package/dist/projection/published.js +2 -0
  211. package/dist/schema/describedness.d.ts +2 -0
  212. package/dist/schema/describedness.js +2 -0
  213. package/dist/seed/compose.d.ts +2 -0
  214. package/dist/seed/compose.js +2 -0
  215. package/dist/seed/devLogin.d.ts +2 -0
  216. package/dist/seed/devLogin.js +2 -0
  217. package/dist/seed/exampleIdentities.d.ts +2 -0
  218. package/dist/seed/exampleIdentities.js +2 -0
  219. package/dist/seed/metadata.d.ts +2 -0
  220. package/dist/seed/metadata.js +2 -0
  221. package/dist/seed/seed.d.ts +2 -0
  222. package/dist/seed/seed.js +2 -0
  223. package/dist/seed/seededRows.d.ts +2 -0
  224. package/dist/seed/seededRows.js +2 -0
  225. package/dist/seed/writeD1.d.ts +2 -0
  226. package/dist/seed/writeD1.js +2 -0
  227. package/dist/seed/writeKv.d.ts +2 -0
  228. package/dist/seed/writeKv.js +2 -0
  229. package/dist/semver/semver.d.ts +2 -0
  230. package/dist/semver/semver.js +2 -0
  231. package/dist/text/comments.d.ts +2 -0
  232. package/dist/text/comments.js +2 -0
  233. package/dist/version.generated.d.ts +3 -1
  234. package/dist/version.generated.js +3 -1
  235. package/dist/worker/health.d.ts +2 -0
  236. package/dist/worker/health.js +2 -0
  237. package/dist/worker/identity.d.ts +2 -0
  238. package/dist/worker/identity.js +2 -0
  239. package/dist/workflow/bindings.d.ts +2 -0
  240. package/dist/workflow/bindings.js +2 -0
  241. package/dist/workflow/dispatch.d.ts +2 -0
  242. package/dist/workflow/dispatch.js +2 -0
  243. package/dist/workflow/dispatchRoute.d.ts +2 -0
  244. package/dist/workflow/dispatchRoute.js +2 -0
  245. package/dist/workflow/faults.d.ts +2 -0
  246. package/dist/workflow/faults.js +2 -0
  247. package/dist/workflow/host.d.ts +2 -0
  248. package/dist/workflow/host.js +2 -0
  249. package/dist/workflow/hostEntry.d.ts +2 -0
  250. package/dist/workflow/hostEntry.js +2 -0
  251. package/dist/workflow/hostEnv.d.ts +2 -0
  252. package/dist/workflow/hostEnv.js +2 -0
  253. package/dist/workflow/loopback.d.ts +2 -0
  254. package/dist/workflow/loopback.js +2 -0
  255. package/dist/workflow/naming.d.ts +2 -0
  256. package/dist/workflow/naming.js +2 -0
  257. package/dist/workflow/register.d.ts +2 -0
  258. package/dist/workflow/register.js +2 -0
  259. package/dist/workflow/schemas.d.ts +2 -0
  260. package/dist/workflow/schemas.js +2 -0
  261. package/dist/workflow/spec.d.ts +2 -0
  262. package/dist/workflow/spec.js +2 -0
  263. package/dist/workflow/stepMessage.d.ts +2 -0
  264. package/dist/workflow/stepMessage.js +2 -0
  265. package/package.json +2 -2
  266. package/src/capability/capability.ts +18 -0
  267. package/src/capability/manifest.ts +94 -0
  268. package/src/createEntrypoint.ts +5 -0
  269. package/src/error/cause.ts +116 -0
  270. package/src/version.generated.ts +1 -1
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import { MAX_ENVIRONMENT_NAME } from "./environment.js";
2
4
  //#region src/naming/limits.ts
3
5
  /**
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import { type FeatureIdentity, type FeatureResourceKind } from "./feature";
2
4
  /**
3
5
  * **What a provisioning run names its resources, and which `env.<name>` stanza it writes them into —
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import { FEATURE_ENVIRONMENT, assertValidEnvironment } from "./environment.js";
2
4
  import { featureResourceName, featureSecretEntryName, featureWorkerName } from "./feature.js";
3
5
  import { resourceNames } from "./resourceNames.js";
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  /**
2
4
  * One naming rule, in one module: **`<project>-<env>-<thing>`**, kebab-case.
3
5
  *
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import { NAME_SEGMENT } from "./segment.js";
2
4
  import { InternalError, ValidationError } from "../error/pithyError.js";
3
5
  import { MAX_ENVIRONMENT_NAME } from "./environment.js";
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import { type FeatureIdentity, type FeatureResourceKind } from "./feature";
2
4
  /**
3
5
  * Every Cloudflare name a project composes, behind one object — **the facade**.
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import { InternalError, ValidationError } from "../error/pithyError.js";
2
4
  import { GLOBAL_SCOPE, assertValidEnvironment } from "./environment.js";
3
5
  import { NAMESPACE_LIMITS } from "./limits.js";
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  /**
2
4
  * What a single segment of a composed name may look like — one pattern, one home.
3
5
  *
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  //#region src/naming/segment.ts
2
4
  /**
3
5
  * What a single segment of a composed name may look like — one pattern, one home.
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import { z } from "zod";
2
4
  /**
3
5
  * The reader's contract: a capability's own response object, restated for a client that does not
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import { InternalError } from "../error/pithyError.js";
2
4
  import { z } from "zod";
3
5
  //#region src/projection/asRead.ts
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  /**
2
4
  * The gate primitive for a projection that crosses a trust boundary: **nothing left this surface but the
3
5
  * facts it publishes.**
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  //#region src/projection/published.ts
2
4
  /**
3
5
  * Everything in `document` that {@link PublishedFacts} does not permit, as lines naming what and where.
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import { z } from "zod";
2
4
  /**
3
5
  * The children of one schema, by kind. **Throws for a kind this walk has never been taught** — a
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import { InternalError } from "../error/pithyError.js";
2
4
  import { z } from "zod";
3
5
  //#region src/schema/describedness.ts
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import type { Capability } from "../capability/capability";
2
4
  import type { SeedSet } from "./seed";
3
5
  /** Maximum per-set `order`, derived from the prefix width so the two never drift. */
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import { InternalError } from "../error/pithyError.js";
2
4
  //#region src/seed/compose.ts
3
5
  /** Width of the zero-padded `order` prefix in a composed key — the stable sort anchor. */
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import { z } from "zod";
2
4
  /**
3
5
  * The dev-login artifact: the one file a seed run writes so `pithy dev` can say how to sign in.
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import { JsonDate } from "../data/codecs.js";
2
4
  import { z } from "zod";
3
5
  //#region src/seed/devLogin.ts
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  /**
2
4
  * The canonical example identities — a small, fixed cast of demo users that every capability's
3
5
  * example seed set references. It is what makes `pithy seed` (with `seed.includeExamples`) fill a
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  //#region src/seed/exampleIdentities.ts
2
4
  /**
3
5
  * The canonical demo cast, in a stable order. Referenced by every capability's example seed set so
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  /**
2
4
  * The standard Cloudflare-asset metadata convention.
3
5
  *
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  //#region src/seed/metadata.ts
2
4
  /**
3
5
  * The standard Cloudflare-asset metadata convention.
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import type { z } from "zod";
2
4
  import type { KvStoreSpec } from "../kv/namespaces";
3
5
  import type { SeededRows } from "./seededRows";
package/dist/seed/seed.js CHANGED
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  //#region src/seed/seed.ts
2
4
  /**
3
5
  * Author a seed set. A pass-through that anchors the {@link SeedSet} type at the author site (the
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import type { SeedSet } from "./seed";
2
4
  /**
3
5
  * The run's own inventory: which rows a seed run declares, per table, before it writes any of them.
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  //#region src/seed/seededRows.ts
2
4
  /**
3
5
  * Index every set's statically declared D1 rows into one lookup, in composed order.
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import type { Kysely } from "kysely";
2
4
  import { z } from "zod";
3
5
  import type { D1SeedGroup } from "./seed";
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import { fromZodError } from "../error/pithyError.js";
2
4
  import { chunkRowsByBoundParameters } from "../data/boundParameters.js";
3
5
  import { z } from "zod";
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import { z } from "zod";
2
4
  import type { TypedKv } from "../kv/kv";
3
5
  import type { KvStoreSpec } from "../kv/namespaces";
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import { fromZodError } from "../error/pithyError.js";
2
4
  import { z } from "zod";
3
5
  //#region src/seed/writeKv.ts
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  /**
2
4
  * Semantic versions: one parse, one format, one order.
3
5
  *
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import { z } from "zod";
2
4
  //#region src/semver/semver.ts
3
5
  /**
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  /**
2
4
  * `source` with every comment blanked — the one comment stripper this repository's gates share.
3
5
  *
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  //#region src/text/comments.ts
2
4
  /**
3
5
  * `source` with every comment blanked — the one comment stripper this repository's gates share.
@@ -1,5 +1,7 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  /** This package's npm name — the join key against a release feed. */
2
4
  export declare const PACKAGE_NAME = "@pithy-sh/core";
3
5
  /** This package's version, stamped from its own package.json at generation time. */
4
- export declare const PACKAGE_VERSION = "0.1.4";
6
+ export declare const PACKAGE_VERSION = "0.2.0";
5
7
  //# sourceMappingURL=version.generated.d.ts.map
@@ -1,7 +1,9 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  //#region src/version.generated.ts
2
4
  /** This package's npm name — the join key against a release feed. */
3
5
  const PACKAGE_NAME = "@pithy-sh/core";
4
6
  /** This package's version, stamped from its own package.json at generation time. */
5
- const PACKAGE_VERSION = "0.1.4";
7
+ const PACKAGE_VERSION = "0.2.0";
6
8
  //#endregion
7
9
  export { PACKAGE_NAME, PACKAGE_VERSION };
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  /**
2
4
  * **Where every Pithy Worker answers liveness — written once, read by everyone who needs it.**
3
5
  *
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  //#region src/worker/health.ts
2
4
  /**
3
5
  * **Where every Pithy Worker answers liveness — written once, read by everyone who needs it.**
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  /**
2
4
  * What a running Worker knows about itself — the three vars every Pithy Worker is scaffolded with, and
3
5
  * the one reader for them.
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  //#region src/worker/identity.ts
2
4
  /**
3
5
  * What a running Worker knows about itself — the three vars every Pithy Worker is scaffolded with, and
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import type { BindingSpecInput } from "../capability/bindings";
2
4
  import type { RegisteredWorkflow, WorkflowSpec, WorkflowSpecMap } from "./spec";
3
5
  /**
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  //#region src/workflow/bindings.ts
2
4
  /**
3
5
  * The one derivation from a durable job to the `workflow` binding that job needs.
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import type { Logger } from "../logger/logger";
2
4
  import { type LoopbackFetch } from "./loopback";
3
5
  import type { WorkflowBinding, WorkflowRegistry } from "./spec";
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import { PithyError, messageOf } from "../error/pithyError.js";
2
4
  import "../worker/identity.js";
3
5
  import { noopLogger } from "../logger/logger.js";
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import type { Hono } from "hono";
2
4
  import type { PithyHonoEnv } from "../capability/capability";
3
5
  import { type AmbientEnv } from "../env/ambient";
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import { ForbiddenError, PithyError } from "../error/pithyError.js";
2
4
  import { validationHook } from "../http/validation.js";
3
5
  import { WORKFLOW_DISPATCH_ROUTE, WorkflowDispatchParams, WorkflowDispatchRequest } from "./schemas.js";
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  /**
2
4
  * **Every fault that reaches a durable step is classified — retryable or terminal — at a stated site.**
3
5
  *
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import { PithyError } from "../error/pithyError.js";
2
4
  import { d1TransientFault } from "../data/withD1Retry.js";
3
5
  import { encodeWorkflowStepMessage } from "./stepMessage.js";
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import { type WorkflowHostNameParts } from "./naming";
2
4
  import type { WorkflowRegistry } from "./spec";
3
5
  /**
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import { InternalError } from "../error/pithyError.js";
2
4
  import { ENVIRONMENT_VAR, PROJECT_VAR } from "../worker/identity.js";
3
5
  import { workflowHostName, workflowScriptName } from "./naming.js";
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  /**
2
4
  * The default export of a Workflow host that serves nothing over HTTP (#426).
3
5
  *
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import { NotFoundError } from "../error/pithyError.js";
2
4
  import { HttpError } from "../error/http.js";
3
5
  //#region src/workflow/hostEntry.ts
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import { z } from "zod";
2
4
  import type { Logger } from "../logger/logger";
3
5
  /**
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import { InternalError } from "../error/pithyError.js";
2
4
  import { createWorkerLogger } from "../logger/worker.js";
3
5
  import { z } from "zod";
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import type { WorkflowBinding } from "./spec";
2
4
  /**
3
5
  * The loopback dispatcher: the one-method dispatch seam, carried over a sibling's origin instead of
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import { UpstreamError, UpstreamTimeoutError } from "../error/pithyError.js";
2
4
  import { workflowDispatchPath } from "./schemas.js";
3
5
  //#region src/workflow/loopback.ts
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  /**
2
4
  * Every name a durable job answers to, in one module. The CLI writes these into a host worker's
3
5
  * resolved `wrangler.jsonc`, the provisioner deploys under them, and the dispatcher resolves
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import { NAME_SEGMENT } from "../naming/segment.js";
2
4
  import { InternalError } from "../error/pithyError.js";
3
5
  import { NAMESPACE_LIMITS } from "../naming/limits.js";
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import type { Capability } from "../capability/capability";
2
4
  import type { RegisteredWorkflow, WorkflowRegistry } from "./spec";
3
5
  /**
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import { InternalError } from "../error/pithyError.js";
2
4
  import { workflowKey } from "./naming.js";
3
5
  //#region src/workflow/register.ts
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import { z } from "zod";
2
4
  /**
3
5
  * The request and response contract of the host's dispatch route ({@link ./dispatchRoute.ts}).
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import { z } from "zod";
2
4
  //#region src/workflow/schemas.ts
3
5
  /**
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  import type { z } from "zod";
2
4
  /**
3
5
  * The durable-job seam. A capability declares the Cloudflare Workflows it owns as a map of
@@ -0,0 +1,2 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  /**
2
4
  * **The one statement of what a terminal Workflow step writes into its error text, and the one reader of it.**
3
5
  *
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 Pithy
2
+ // SPDX-License-Identifier: MIT
1
3
  //#region src/workflow/stepMessage.ts
2
4
  /**
3
5
  * **The one statement of what a terminal Workflow step writes into its error text, and the one reader of it.**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pithy-sh/core",
3
- "version": "0.1.4",
3
+ "version": "0.2.0",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -25,7 +25,7 @@
25
25
  }
26
26
  },
27
27
  "scripts": {
28
- "build": "tsdown && tsc -p tsconfig.build.json",
28
+ "build": "tsdown && tsc -p tsconfig.build.json && bun ../../tooling/build/src/stampDeclarations.ts",
29
29
  "typecheck": "tsc -p tsconfig.json",
30
30
  "test": "vitest run",
31
31
  "test:node": "vitest run --project=node",
@@ -410,6 +410,24 @@ export interface Capability<
410
410
  * every {@link Capability.secretRegistry} slice here into one combined registry.
411
411
  */
412
412
  compose?: (context: CapabilityComposeContext) => void;
413
+ /**
414
+ * Optional **entrypoint** hook, called once by {@link createEntrypoint} with every composed
415
+ * capability, after {@link Capability.compose} has run for all of them.
416
+ *
417
+ * **The distinction from `compose` is the audience, and it is load-bearing.** `createBackend` assembles
418
+ * a backend for anything that wants to look at one, and the CLI is a caller: `pithy ui` builds the app
419
+ * to read its route tree, and `composeCapabilities` runs every `compose` hook to read what a capability
420
+ * reports. `createEntrypoint` is the other thing — it is only ever called by a Worker's own
421
+ * `src/index.ts`, so a throw from here is a Worker that does not serve, and nothing else.
422
+ *
423
+ * So this is where a capability refuses a composition that must never take a request but must still
424
+ * *load*, because the adopter's own toolchain has to keep working on the project while they fix it.
425
+ * `@pithy-sh/payments` is the case it exists for: `pithy add` scaffolds an unimplemented
426
+ * `resolveSubject`, every CLI command keeps loading that config, and the Worker refuses to boot until
427
+ * the adopter has written it (#500). A check that can be made at composition still belongs at
428
+ * composition — earlier is better, and a refusal the CLI can raise is a refusal an adopter sees sooner.
429
+ */
430
+ boot?: (context: CapabilityComposeContext) => void;
413
431
  /** Mounts a Hono sub-router. */
414
432
  routes?: (app: Hono<PithyHonoEnv>) => void;
415
433
  /** Composable middleware (e.g. turnstile(), requireAuth()). */