@zackbart/connecta 0.28.1 → 0.30.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 (332) hide show
  1. package/CHANGELOG.md +855 -5
  2. package/README.md +125 -116
  3. package/bin/connecta.mjs +121 -139
  4. package/bin/meta-tool-names.d.mts +2 -0
  5. package/bin/meta-tool-names.mjs +9 -0
  6. package/bin/version.mjs +3 -0
  7. package/dist/access-tokens.js +53 -63
  8. package/dist/activity-request.js +8 -0
  9. package/dist/activity.d.ts +76 -42
  10. package/dist/activity.js +110 -42
  11. package/dist/argument-redaction.js +230 -0
  12. package/dist/auth/clerk-sdk/client.d.ts +65 -0
  13. package/dist/auth/clerk-sdk/client.js +5 -0
  14. package/dist/auth/clerk-sdk/generated.js +1845 -0
  15. package/dist/auth/clerk-transport.js +19 -0
  16. package/dist/auth/clerk.d.ts +17 -7
  17. package/dist/auth/clerk.js +189 -107
  18. package/dist/auth/cloudflare-access.js +25 -26
  19. package/dist/auth/downstream-client-metadata.d.ts +29 -0
  20. package/dist/auth/downstream-client-metadata.js +133 -0
  21. package/dist/auth/downstream-oauth.js +1584 -1580
  22. package/dist/auth/downstream-revocation.js +106 -0
  23. package/dist/auth/oauth-token-response.js +231 -0
  24. package/dist/auth/oauth-v2-migration.js +116 -0
  25. package/dist/auth/static-oauth.js +93 -71
  26. package/dist/auth-elicitation.js +288 -0
  27. package/dist/authorization-handoff.js +111 -0
  28. package/dist/branding.d.ts +8 -16
  29. package/dist/branding.js +26 -59
  30. package/dist/byte-read-response.js +39 -0
  31. package/dist/call-admission.js +12 -16
  32. package/dist/catalog-cache.js +739 -0
  33. package/dist/catalog-drift.d.ts +50 -15
  34. package/dist/catalog-drift.js +365 -128
  35. package/dist/catalog-fingerprint.js +2 -4
  36. package/dist/catalog-freshness.js +13 -0
  37. package/dist/catalog-limits.js +2 -2
  38. package/dist/catalog-service.js +409 -225
  39. package/dist/catalog.js +43 -84
  40. package/dist/concurrency.js +3 -4
  41. package/dist/config-defaults.d.ts +39 -0
  42. package/dist/config-defaults.js +46 -0
  43. package/dist/config-schema.d.ts +181 -0
  44. package/dist/config-schema.js +435 -0
  45. package/dist/config-value-sources.js +102 -0
  46. package/dist/config.d.ts +633 -0
  47. package/dist/config.js +508 -0
  48. package/dist/connector-access.d.ts +1 -0
  49. package/dist/connector-access.js +13 -15
  50. package/dist/connector-caller.d.ts +8 -0
  51. package/dist/connector-caller.js +15 -6
  52. package/dist/connector-scope.js +1 -1
  53. package/dist/connectors/api-connector.d.ts +59 -7
  54. package/dist/connectors/api-connector.js +106 -19
  55. package/dist/connectors/api.js +4 -1
  56. package/dist/connectors/guarded-fetch.d.ts +144 -0
  57. package/dist/connectors/guarded-fetch.js +87 -38
  58. package/dist/connectors/negotiation-cache.js +46 -0
  59. package/dist/connectors/option-shapes.js +27 -0
  60. package/dist/connectors/remote-mcp.d.ts +30 -4
  61. package/dist/connectors/remote-mcp.js +1774 -320
  62. package/dist/connectors/resource-uri.js +335 -0
  63. package/dist/credential-contract.d.ts +10 -0
  64. package/dist/credential-rules.js +1 -3
  65. package/dist/credential-url.js +108 -0
  66. package/dist/credentials.d.ts +6 -1
  67. package/dist/credentials.js +27 -18
  68. package/dist/d1.d.ts +130 -0
  69. package/dist/d1.js +290 -0
  70. package/dist/describe-config.d.ts +165 -0
  71. package/dist/describe-config.js +315 -0
  72. package/dist/described.js +106 -0
  73. package/dist/downstream-input-context.js +128 -0
  74. package/dist/downstream-input.js +325 -0
  75. package/dist/errors.d.ts +132 -31
  76. package/dist/errors.js +175 -87
  77. package/dist/execute.js +798 -318
  78. package/dist/executor-admission.d.ts +1 -0
  79. package/dist/executor-admission.js +11 -15
  80. package/dist/executor-contract.d.ts +20 -0
  81. package/dist/executor-contract.js +48 -0
  82. package/dist/executor-result.js +30 -13
  83. package/dist/executors/quickjs-child.js +15 -9
  84. package/dist/executors/quickjs-protocol.js +5 -6
  85. package/dist/executors/quickjs-runtime.js +152 -59
  86. package/dist/executors/quickjs.js +49 -39
  87. package/dist/favicon.js +1 -2
  88. package/dist/fix-prompt.js +1 -3
  89. package/dist/guest-runtime.js +238 -0
  90. package/dist/guest-types.d.ts +218 -0
  91. package/dist/guest-types.js +1 -0
  92. package/dist/html-security.js +24 -0
  93. package/dist/identity.js +1 -3
  94. package/dist/inbound-credential.js +52 -0
  95. package/dist/index.d.ts +24 -256
  96. package/dist/index.js +65 -478
  97. package/dist/invocation-auth.js +69 -0
  98. package/dist/invocation.js +262 -79
  99. package/dist/json-schema.d.ts +1 -1
  100. package/dist/mcp-client-context.js +35 -0
  101. package/dist/mcp-result.js +11 -7
  102. package/dist/meta-output.js +61 -0
  103. package/dist/meta-tool-names.d.ts +2 -0
  104. package/dist/meta-tool-names.js +3 -0
  105. package/dist/meta-tools.js +419 -272
  106. package/dist/module-contracts.d.ts +8 -23
  107. package/dist/node.d.ts +0 -2
  108. package/dist/node.js +2 -2
  109. package/dist/oauth-callback-outcome.js +1 -3
  110. package/dist/oauth-handoff.js +194 -0
  111. package/dist/oauth-sealing.js +20 -0
  112. package/dist/operator-record.d.ts +137 -0
  113. package/dist/operator-record.js +420 -0
  114. package/dist/operator-ui/assets.js +31 -0
  115. package/dist/operator-ui/contract.d.ts +72 -0
  116. package/dist/operator-ui/contract.js +1 -0
  117. package/dist/operator-ui/fix-prompts.d.ts +18 -0
  118. package/dist/operator-ui/generated.js +5 -4
  119. package/dist/operator-ui/model.d.ts +12 -87
  120. package/dist/operator-ui/model.js +2 -9
  121. package/dist/operator-ui/setup-commands.js +1 -3
  122. package/dist/operator-ui/view.d.ts +323 -0
  123. package/dist/operator-ui/view.js +62 -189
  124. package/dist/page-styles.js +2 -3
  125. package/dist/program-result.js +5 -0
  126. package/dist/program-source.js +14 -2
  127. package/dist/{exempt-writes.js → program-writes.js} +60 -19
  128. package/dist/provider.d.ts +142 -0
  129. package/dist/provider.js +187 -0
  130. package/dist/providers/_shared/google/result-size.js +57 -0
  131. package/dist/providers/_shared/google/service-account.d.ts +58 -0
  132. package/dist/providers/_shared/google/service-account.js +500 -0
  133. package/dist/providers/_shared/google/workspace.d.ts +276 -0
  134. package/dist/providers/_shared/google/workspace.js +518 -0
  135. package/dist/providers/_shared/request-token.js +83 -0
  136. package/dist/providers/{basecamp.d.ts → basecamp/index.d.ts} +6 -28
  137. package/dist/providers/basecamp/index.js +997 -0
  138. package/dist/providers/basecamp/skill.generated.js +9 -0
  139. package/dist/providers/{breeze.d.ts → breeze/index.d.ts} +2 -2
  140. package/dist/providers/{breeze.js → breeze/index.js} +184 -140
  141. package/dist/providers/breeze/skill.generated.js +9 -0
  142. package/dist/providers/{ccb.d.ts → ccb/index.d.ts} +2 -2
  143. package/dist/providers/{ccb.js → ccb/index.js} +271 -116
  144. package/dist/providers/ccb/skill.generated.js +9 -0
  145. package/dist/providers/{cloudflare.d.ts → cloudflare/index.d.ts} +8 -7
  146. package/dist/providers/{cloudflare.js → cloudflare/index.js} +171 -738
  147. package/dist/providers/cloudflare/skill.generated.js +10 -0
  148. package/dist/providers/docs/index.d.ts +54 -0
  149. package/dist/providers/docs/index.js +1237 -0
  150. package/dist/providers/docs/skill.generated.js +9 -0
  151. package/dist/providers/drive/index.d.ts +53 -0
  152. package/dist/providers/drive/index.js +1523 -0
  153. package/dist/providers/drive/skill.generated.js +9 -0
  154. package/dist/providers/forms/index.d.ts +54 -0
  155. package/dist/providers/forms/index.js +1217 -0
  156. package/dist/providers/forms/skill.generated.js +11 -0
  157. package/dist/providers/github/auth.d.ts +32 -0
  158. package/dist/providers/github/auth.js +361 -0
  159. package/dist/providers/github/hosted.js +218 -0
  160. package/dist/providers/github/index.d.ts +13 -0
  161. package/dist/providers/github/index.js +140 -0
  162. package/dist/providers/github/key.js +100 -0
  163. package/dist/providers/github/rest.js +321 -0
  164. package/dist/providers/github/scope.d.ts +29 -0
  165. package/dist/providers/github/scope.js +124 -0
  166. package/dist/providers/github/skill.generated.js +8 -0
  167. package/dist/providers/gmail/index.d.ts +51 -0
  168. package/dist/providers/gmail/index.js +1436 -0
  169. package/dist/providers/gmail/skill.generated.js +9 -0
  170. package/dist/providers/infisical/index.d.ts +7 -0
  171. package/dist/providers/infisical/index.js +713 -0
  172. package/dist/providers/infisical/skill.generated.js +8 -0
  173. package/dist/providers/{linear.d.ts → linear/index.d.ts} +11 -14
  174. package/dist/providers/linear/index.js +352 -0
  175. package/dist/providers/linear/skill.generated.js +8 -0
  176. package/dist/providers/{mixpanel.d.ts → mixpanel/index.d.ts} +5 -10
  177. package/dist/providers/mixpanel/index.js +416 -0
  178. package/dist/providers/mixpanel/skill.generated.js +9 -0
  179. package/dist/providers/{notion.d.ts → notion/index.d.ts} +8 -8
  180. package/dist/providers/{notion.js → notion/index.js} +226 -239
  181. package/dist/providers/notion/skill.generated.js +10 -0
  182. package/dist/providers/{overflow.d.ts → overflow/index.d.ts} +2 -2
  183. package/dist/providers/{overflow.js → overflow/index.js} +74 -111
  184. package/dist/providers/overflow/skill.generated.js +8 -0
  185. package/dist/providers/{planning-center.d.ts → planning-center/index.d.ts} +2 -2
  186. package/dist/providers/{planning-center.js → planning-center/index.js} +264 -104
  187. package/dist/providers/planning-center/skill.generated.js +10 -0
  188. package/dist/providers/{revenuecat.d.ts → revenuecat/index.d.ts} +5 -10
  189. package/dist/providers/revenuecat/index.js +557 -0
  190. package/dist/providers/revenuecat/skill.generated.js +11 -0
  191. package/dist/providers/sheets/index.d.ts +54 -0
  192. package/dist/providers/sheets/index.js +1237 -0
  193. package/dist/providers/sheets/skill.generated.js +10 -0
  194. package/dist/providers/slides/index.d.ts +53 -0
  195. package/dist/providers/slides/index.js +2645 -0
  196. package/dist/providers/slides/skill.generated.js +9 -0
  197. package/dist/providers/{stripe.d.ts → stripe/index.d.ts} +5 -12
  198. package/dist/providers/stripe/index.js +266 -0
  199. package/dist/providers/stripe/skill.generated.js +11 -0
  200. package/dist/providers/{tithely.d.ts → tithely/index.d.ts} +2 -2
  201. package/dist/providers/{tithely.js → tithely/index.js} +60 -91
  202. package/dist/providers/tithely/skill.generated.js +8 -0
  203. package/dist/providers/{vercel.d.ts → vercel/index.d.ts} +8 -8
  204. package/dist/providers/vercel/index.js +1038 -0
  205. package/dist/providers/vercel/mcp-ownership.js +212 -0
  206. package/dist/providers/vercel/skill.generated.js +11 -0
  207. package/dist/registry.d.ts +110 -171
  208. package/dist/registry.js +588 -927
  209. package/dist/request-state.js +21 -0
  210. package/dist/resource-read.js +103 -0
  211. package/dist/result-shapes.js +17 -49
  212. package/dist/retired-toolkits.js +1 -1
  213. package/dist/routes/access-tokens.js +3 -6
  214. package/dist/routes/activity-context.js +21 -0
  215. package/dist/routes/activity-disclosure.js +40 -0
  216. package/dist/routes/activity.js +59 -21
  217. package/dist/routes/actor-labels.js +3 -50
  218. package/dist/routes/connect.js +221 -0
  219. package/dist/routes/credentials.js +15 -27
  220. package/dist/routes/mcp.js +365 -130
  221. package/dist/routes/oauth-client-metadata.js +15 -0
  222. package/dist/routes/oauth-management.js +45 -107
  223. package/dist/routes/oauth.js +110 -57
  224. package/dist/routes/operator.js +3 -3
  225. package/dist/routes/shared.d.ts +25 -64
  226. package/dist/routes/shared.js +160 -80
  227. package/dist/routes/skills.js +30 -0
  228. package/dist/routes/ui-config.js +225 -0
  229. package/dist/routes/ui-data.js +40 -35
  230. package/dist/routes/ui.js +66 -56
  231. package/dist/runtime/admission.js +4 -2
  232. package/dist/runtime/call-admission.js +3 -1
  233. package/dist/runtime/connector-scope.js +1 -4
  234. package/dist/runtime/run.js +10 -39
  235. package/dist/runtime/services.js +12 -117
  236. package/dist/runtime/shared-read.js +1 -3
  237. package/dist/runtime/storage.js +8 -1
  238. package/dist/sent-secrets.d.ts +93 -0
  239. package/dist/sent-secrets.js +1013 -0
  240. package/dist/server.js +28 -71
  241. package/dist/skills.js +416 -174
  242. package/dist/sqlite.d.ts +48 -0
  243. package/dist/sqlite.js +181 -0
  244. package/dist/storage/keys.js +443 -0
  245. package/dist/storage/memory.js +16 -4
  246. package/dist/storage/sql.d.ts +66 -0
  247. package/dist/storage/sql.js +543 -0
  248. package/dist/timeout.js +4 -2
  249. package/dist/tool-name.js +17 -0
  250. package/dist/tool-safety.d.ts +9 -35
  251. package/dist/tool-safety.js +20 -40
  252. package/dist/types.d.ts +336 -56
  253. package/dist/types.js +0 -1
  254. package/dist/ui.d.ts +7 -19
  255. package/dist/ui.js +76 -90
  256. package/dist/url-safety.js +3 -6
  257. package/dist/usage-guide.js +146 -0
  258. package/dist/validate.d.ts +7 -0
  259. package/dist/validate.js +309 -47
  260. package/dist/version.d.ts +1 -7
  261. package/dist/version.js +3 -7
  262. package/dist/worker.d.ts +11 -0
  263. package/dist/worker.js +435 -0
  264. package/documentation/README.md +63 -0
  265. package/documentation/architecture.md +696 -231
  266. package/documentation/auth.md +1069 -546
  267. package/documentation/code-mode.md +662 -356
  268. package/documentation/deploying.md +146 -0
  269. package/documentation/integrating.md +159 -0
  270. package/documentation/meta-tools.md +570 -216
  271. package/documentation/operating.md +135 -0
  272. package/documentation/operator-tests.md +97 -0
  273. package/documentation/operator-ui.md +132 -0
  274. package/documentation/provider-migration-0.29.md +65 -0
  275. package/examples/worker/AGENTS.md +34 -12
  276. package/examples/worker/README.md +293 -255
  277. package/examples/worker/kv-to-d1.wrangler.jsonc +26 -0
  278. package/examples/worker/scripts/copy-kv-to-d1.mjs +162 -0
  279. package/examples/worker/src/connecta.config.ts +151 -0
  280. package/examples/worker/src/index.ts +14 -197
  281. package/examples/worker/wrangler.jsonc +15 -35
  282. package/package.json +126 -54
  283. package/templates/node/.dockerignore +1 -2
  284. package/templates/node/.env.example +20 -21
  285. package/templates/node/AGENTS.md +21 -17
  286. package/templates/node/Dockerfile +3 -5
  287. package/templates/node/README.md +140 -58
  288. package/templates/node/docker-compose.yml +11 -12
  289. package/templates/node/package.json +4 -2
  290. package/templates/node/src/connecta.config.ts +119 -0
  291. package/templates/node/src/index.ts +9 -154
  292. package/templates/node/src/provision-token.ts +17 -0
  293. package/AGENTS.md +0 -170
  294. package/dist/artifacts/connector.d.ts +0 -58
  295. package/dist/artifacts/connector.js +0 -730
  296. package/dist/artifacts/document.js +0 -86
  297. package/dist/artifacts/guide.js +0 -140
  298. package/dist/artifacts/html-scan.js +0 -329
  299. package/dist/artifacts/json.js +0 -78
  300. package/dist/artifacts/kv-store.d.ts +0 -20
  301. package/dist/artifacts/kv-store.js +0 -140
  302. package/dist/artifacts/markdown.js +0 -478
  303. package/dist/artifacts/module.d.ts +0 -37
  304. package/dist/artifacts/module.js +0 -66
  305. package/dist/artifacts/operations.d.ts +0 -197
  306. package/dist/artifacts/operations.js +0 -1002
  307. package/dist/artifacts/refresh.d.ts +0 -55
  308. package/dist/artifacts/refresh.js +0 -236
  309. package/dist/artifacts/routes.js +0 -206
  310. package/dist/artifacts/types.d.ts +0 -214
  311. package/dist/artifacts/types.js +0 -22
  312. package/dist/artifacts/validate.d.ts +0 -62
  313. package/dist/artifacts/validate.js +0 -651
  314. package/dist/artifacts.d.ts +0 -6
  315. package/dist/artifacts.js +0 -9
  316. package/dist/auth/bearer.d.ts +0 -11
  317. package/dist/auth/bearer.js +0 -50
  318. package/dist/providers/basecamp.js +0 -445
  319. package/dist/providers/linear.js +0 -217
  320. package/dist/providers/mixpanel.js +0 -247
  321. package/dist/providers/revenuecat.js +0 -317
  322. package/dist/providers/stripe.js +0 -253
  323. package/dist/providers/vercel.js +0 -1253
  324. package/dist/storage/file.d.ts +0 -15
  325. package/dist/storage/file.js +0 -455
  326. package/ethos.md +0 -93
  327. package/examples/worker/src/cloudflare-kv.ts +0 -43
  328. package/examples/worker/src/d1-activity-row.ts +0 -155
  329. package/examples/worker/src/d1-activity.ts +0 -147
  330. package/examples/worker/src/d1-storage.ts +0 -138
  331. package/examples/worker/src/r2-artifact-blobs.ts +0 -29
  332. package/templates/node/src/file-activity.ts +0 -182
@@ -1,214 +0,0 @@
1
- /** How a page's source is interpreted: self-contained HTML, or Markdown rendered at read time. */
2
- export type ArtifactKind = "html" | "markdown";
3
- /**
4
- * Who made a version. The same shape as an activity actor, taken from the
5
- * inbound authorization that admitted the call — never from its arguments.
6
- */
7
- export interface ArtifactActor {
8
- kind: string;
9
- id?: string;
10
- namespace?: string;
11
- }
12
- /** What produced a version. */
13
- export type ArtifactVersionOp = "create" | "update" | "patch" | "rollback" | "set" | "refresh";
14
- /**
15
- * A version stream: the view (the page source), one per named data document,
16
- * and the refresh program.
17
- */
18
- export type ArtifactStream = "view" | `doc:${string}` | "refresh";
19
- /** One immutable version in one stream. Written once, never rewritten. */
20
- export interface ArtifactVersionRecord {
21
- /** 1-based and dense within its stream. */
22
- version: number;
23
- /** Content address of the body (a SHA-256 hex digest). Absent on a removal. */
24
- body?: string;
25
- /** UTF-8 bytes of the body; 0 on a removal. */
26
- bytes: number;
27
- by: ArtifactActor;
28
- /** ISO-8601 instant the version was committed. */
29
- at: string;
30
- op: ArtifactVersionOp;
31
- /** Set by a rollback: the version whose body this one reuses. */
32
- restoredFrom?: number;
33
- /** Set on a version a refresh run produced. */
34
- runId?: string;
35
- /** A document removal. The name keeps its history and its numbering. */
36
- removed?: true;
37
- }
38
- /**
39
- * The one mutable record per artifact. Every write is a compare-and-set of
40
- * this record, which carries the latest version of every stream; earlier
41
- * versions live beside it, immutable.
42
- */
43
- export interface ArtifactHeadRecord {
44
- /** Increments on every write of any kind. */
45
- revision: number;
46
- title: string;
47
- kind: ArtifactKind;
48
- archived: boolean;
49
- createdBy: ArtifactActor;
50
- createdAt: string;
51
- updatedBy: ArtifactActor;
52
- updatedAt: string;
53
- view: ArtifactVersionRecord;
54
- /** Latest version of every document name ever set, removals included. */
55
- documents: Record<string, ArtifactVersionRecord>;
56
- /** Absent until a refresh program is configured. */
57
- refresh?: ArtifactRefreshState;
58
- }
59
- export type ArtifactRefreshSchedule = "manual" | "daily" | "weekly";
60
- export interface ArtifactRefreshState {
61
- program: ArtifactVersionRecord;
62
- /** Trusted caller captured by the built-in connector, reauthorized on every run. */
63
- owner?: {
64
- identity: import("../types.js").AuthenticatedIdentity;
65
- pool?: string;
66
- };
67
- document: string;
68
- schedule: ArtifactRefreshSchedule;
69
- configuredAt: string;
70
- /** An expiring CAS claim. Only its run may publish data. */
71
- claim?: {
72
- runId: string;
73
- until: string;
74
- };
75
- last?: {
76
- runId: string;
77
- at: string;
78
- status: "succeeded" | "unchanged" | "failed" | "superseded";
79
- documentVersion?: number;
80
- };
81
- }
82
- /** One refresh run, as history keeps it. */
83
- export interface ArtifactRunRecord {
84
- runId: string;
85
- /** ISO-8601; with `runId`, what orders history. */
86
- startedAt: string;
87
- finishedAt?: string;
88
- status: "running" | "succeeded" | "unchanged" | "failed" | "superseded";
89
- trigger: "schedule" | {
90
- manual: ArtifactActor;
91
- };
92
- /** The refresh program version the run executed. */
93
- programVersion: number;
94
- /** The data version the run produced, when it produced one. */
95
- documentVersion?: number;
96
- errorCode?: string;
97
- /** Bounded failure message, for agents reading run history only. */
98
- message?: string;
99
- /** Bounded captured console output, for agents reading run history only. */
100
- logs?: string;
101
- }
102
- /**
103
- * Where an artifact store keeps bodies when they should not sit in the key
104
- * value store itself — an R2 bucket on Workers. Keys are content addresses,
105
- * so `put` of an existing key writes the same bytes again.
106
- */
107
- export interface ArtifactBlobStore {
108
- put(key: string, body: string): Promise<void>;
109
- get(key: string): Promise<string | null>;
110
- }
111
- /**
112
- * The storage primitives the artifacts module needs, and nothing else: every
113
- * rule — conflicts, patches, limits, validation — lives above this contract,
114
- * once. `kvArtifactStore` is the reference implementation.
115
- */
116
- export interface ArtifactStore {
117
- /** The head and an opaque token for `swapHead`, or null when absent. */
118
- head(id: string): Promise<{
119
- head: ArtifactHeadRecord;
120
- token: string;
121
- } | null>;
122
- /**
123
- * Atomically replace the head when its token is still `expected` (null:
124
- * create only when absent). Of N concurrent swaps from one token exactly one
125
- * returns true.
126
- */
127
- swapHead(id: string, expected: string | null, next: ArtifactHeadRecord): Promise<boolean>;
128
- /** Heads in id order after `after`, and the cursor to continue from. */
129
- heads(options: {
130
- after?: string;
131
- limit: number;
132
- }): Promise<{
133
- heads: {
134
- id: string;
135
- head: ArtifactHeadRecord;
136
- }[];
137
- next?: string;
138
- }>;
139
- /** Content-addressed and idempotent. */
140
- putBody(key: string, body: string): Promise<void>;
141
- body(key: string): Promise<string | null>;
142
- /** Idempotent: a version's record never changes once written. */
143
- putVersion(id: string, stream: ArtifactStream, version: number, record: ArtifactVersionRecord): Promise<void>;
144
- /** Stored versions below `below` (all when omitted), newest first. */
145
- versions(id: string, stream: ArtifactStream, options: {
146
- below?: number;
147
- limit: number;
148
- }): Promise<ArtifactVersionRecord[]>;
149
- /** Insert or replace one run by `runId`; retains the newest 50. */
150
- putRun(id: string, run: ArtifactRunRecord): Promise<void>;
151
- /** Newest first. */
152
- runs(id: string, limit: number): Promise<ArtifactRunRecord[]>;
153
- /** Durable, best-effort continuation for bounded scheduled scans. */
154
- refreshScanCursor(): Promise<string | undefined>;
155
- setRefreshScanCursor(after: string | undefined): Promise<void>;
156
- }
157
- /**
158
- * Size and shape bounds. Every write checks them, the guide states them, and a
159
- * deployment may only tighten them.
160
- */
161
- export interface ArtifactLimits {
162
- /** A page's source, in UTF-8 bytes. Default 1 MiB. */
163
- sourceBytes: number;
164
- /** One document, serialized, in UTF-8 bytes. Default 512 KiB. */
165
- documentBytes: number;
166
- /** Live documents per artifact. Default 16. */
167
- documents: number;
168
- /** Every live document together. Default 4 MiB. */
169
- totalDocumentBytes: number;
170
- /** Source plus injected data, as the viewer builds it. Default 5 MiB. */
171
- renderedBytes: number;
172
- /** Title length in characters. Default 160. */
173
- titleChars: number;
174
- /** Edits in one patch. Default 50. */
175
- patchEdits: number;
176
- /** One edit's `find`, in UTF-8 bytes. Default 16 KiB. */
177
- findBytes: number;
178
- /** A refresh program's source, in UTF-8 bytes. Default 64 KiB. */
179
- programBytes: number;
180
- /** Console output kept per refresh run, in UTF-8 bytes. Default 8 KiB. */
181
- runLogBytes: number;
182
- /** Object and array nesting in a document. Default 64. */
183
- jsonDepth: number;
184
- }
185
- export declare const DEFAULT_ARTIFACT_LIMITS: Readonly<ArtifactLimits>;
186
- /** Refresh runs a store keeps per artifact. */
187
- export declare const ARTIFACT_RUNS_RETAINED = 50;
188
- /**
189
- * Origins a page may load from. Scripts come from `scripts`; stylesheets and
190
- * `preconnect` hints from `styles`; web fonts from `fonts`. Each entry is an
191
- * exact `https:` origin, and the viewer's CSP names exactly these.
192
- */
193
- export interface ArtifactAllowlist {
194
- scripts: readonly string[];
195
- styles: readonly string[];
196
- fonts: readonly string[];
197
- }
198
- export declare const DEFAULT_ARTIFACT_ALLOWLIST: Readonly<ArtifactAllowlist>;
199
- /** One validation finding. `line` and `column` are 1-based, into the source. */
200
- export interface ArtifactIssue {
201
- code: string;
202
- severity: "error" | "warning";
203
- message: string;
204
- line?: number;
205
- column?: number;
206
- }
207
- /** What validation found. `ok` is exactly "no errors"; warnings never block a save. */
208
- export interface ArtifactValidation {
209
- ok: boolean;
210
- errors: ArtifactIssue[];
211
- warnings: ArtifactIssue[];
212
- /** Errors beyond the 20 reported. */
213
- errorsOmitted?: number;
214
- }
@@ -1,22 +0,0 @@
1
- // The artifacts module's public data shapes and the storage contract behind
2
- // them. Web-API only, and reachable only from the `./artifacts` subpath.
3
- export const DEFAULT_ARTIFACT_LIMITS = Object.freeze({
4
- sourceBytes: 1024 * 1024,
5
- documentBytes: 512 * 1024,
6
- documents: 16,
7
- totalDocumentBytes: 4 * 1024 * 1024,
8
- renderedBytes: 5 * 1024 * 1024,
9
- titleChars: 160,
10
- patchEdits: 50,
11
- findBytes: 16 * 1024,
12
- programBytes: 64 * 1024,
13
- runLogBytes: 8 * 1024,
14
- jsonDepth: 64,
15
- });
16
- /** Refresh runs a store keeps per artifact. */
17
- export const ARTIFACT_RUNS_RETAINED = 50;
18
- export const DEFAULT_ARTIFACT_ALLOWLIST = Object.freeze({
19
- scripts: Object.freeze([]),
20
- styles: Object.freeze([]),
21
- fonts: Object.freeze([]),
22
- });
@@ -1,62 +0,0 @@
1
- import { type ArtifactAllowlist, type ArtifactIssue, type ArtifactKind, type ArtifactLimits, type ArtifactValidation } from "./types.js";
2
- /** An artifact id: the URL slug. No leading `_`, so `_api` and `_frame` stay free. */
3
- export declare const ARTIFACT_ID: RegExp;
4
- /** Plain-object document maps must never resolve a name through their prototype. */
5
- export declare function validDocumentName(name: unknown): name is string;
6
- /** Fill in defaults; a deployment may only tighten a limit. Throws on anything else. */
7
- export declare function resolveLimits(partial?: Partial<ArtifactLimits>): ArtifactLimits;
8
- /** Normalize an allowlist: every entry an exact `https:` origin. Throws on anything else. */
9
- export declare function resolveAllowlist(partial?: Partial<ArtifactAllowlist>): ArtifactAllowlist;
10
- export interface ViewCheckInput {
11
- kind: ArtifactKind;
12
- source: string;
13
- /** The title a Markdown page renders with. */
14
- title?: string;
15
- /** Document names the page will receive, for the missing-name warning. */
16
- documentNames: readonly string[];
17
- /** Serialized bytes of every document the page will receive. */
18
- dataBytes: number;
19
- }
20
- export interface CheckContext {
21
- limits: ArtifactLimits;
22
- allowlist: ArtifactAllowlist;
23
- }
24
- interface Findings {
25
- errors: ArtifactIssue[];
26
- warnings: ArtifactIssue[];
27
- }
28
- /** Every static finding for a page's source. */
29
- export declare function checkView(input: ViewCheckInput, context: CheckContext): Findings;
30
- export interface DocumentCheck {
31
- /** The stored form: script-safe JSON. Absent when the document is refused. */
32
- text?: string;
33
- bytes: number;
34
- error?: ArtifactIssue;
35
- }
36
- /** Check one document's name and value, and serialize it the way it is stored. */
37
- export declare function checkDocument(name: string, value: unknown, limits: ArtifactLimits): DocumentCheck;
38
- /** The collective document bounds: how many, and how large together. */
39
- export declare function checkDocumentTotals(live: number, totalBytes: number, limits: ArtifactLimits): ArtifactIssue | undefined;
40
- /** Sort findings by position, cap errors at 20, and report what was cut. */
41
- export declare function finish(findings: Findings): ArtifactValidation;
42
- export interface ValidateArtifactInput {
43
- kind: ArtifactKind;
44
- source: string;
45
- /** Sample documents, as the page would receive them. */
46
- documents?: Record<string, unknown>;
47
- /** The title a Markdown page renders with. */
48
- title?: string;
49
- }
50
- export interface ValidateArtifactOptions {
51
- limits?: Partial<ArtifactLimits>;
52
- allowlist?: Partial<ArtifactAllowlist>;
53
- }
54
- /**
55
- * Validate a page and its documents without saving anything: the same static
56
- * checks every artifact write runs. `ok` is exactly "no errors"; warnings are
57
- * advice.
58
- */
59
- export declare function validateArtifact(input: ValidateArtifactInput, options?: ValidateArtifactOptions): ArtifactValidation;
60
- /** `validateArtifact` against an already-resolved context. */
61
- export declare function validateWithContext(input: ValidateArtifactInput, context: CheckContext): ArtifactValidation;
62
- export {};