@zackbart/connecta 0.28.1 → 0.29.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 (319) hide show
  1. package/CHANGELOG.md +788 -5
  2. package/README.md +62 -42
  3. package/bin/connecta.mjs +110 -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/auth/clerk-sdk/client.d.ts +65 -0
  12. package/dist/auth/clerk-sdk/client.js +5 -0
  13. package/dist/auth/clerk-sdk/generated.js +1845 -0
  14. package/dist/auth/clerk-transport.js +19 -0
  15. package/dist/auth/clerk.d.ts +17 -7
  16. package/dist/auth/clerk.js +189 -107
  17. package/dist/auth/cloudflare-access.js +25 -26
  18. package/dist/auth/downstream-client-metadata.d.ts +29 -0
  19. package/dist/auth/downstream-client-metadata.js +133 -0
  20. package/dist/auth/downstream-oauth.js +1584 -1580
  21. package/dist/auth/downstream-revocation.js +106 -0
  22. package/dist/auth/oauth-token-response.js +231 -0
  23. package/dist/auth/oauth-v2-migration.js +116 -0
  24. package/dist/auth/static-oauth.js +93 -71
  25. package/dist/auth-elicitation.js +283 -0
  26. package/dist/branding.d.ts +8 -16
  27. package/dist/branding.js +26 -59
  28. package/dist/byte-read-response.js +39 -0
  29. package/dist/call-admission.js +12 -16
  30. package/dist/catalog-cache.js +739 -0
  31. package/dist/catalog-drift.d.ts +50 -15
  32. package/dist/catalog-drift.js +365 -128
  33. package/dist/catalog-fingerprint.js +2 -4
  34. package/dist/catalog-freshness.js +13 -0
  35. package/dist/catalog-limits.js +2 -2
  36. package/dist/catalog-service.js +368 -224
  37. package/dist/catalog.js +43 -84
  38. package/dist/concurrency.js +3 -4
  39. package/dist/config-defaults.d.ts +39 -0
  40. package/dist/config-defaults.js +46 -0
  41. package/dist/config-schema.d.ts +181 -0
  42. package/dist/config-schema.js +435 -0
  43. package/dist/config-value-sources.js +102 -0
  44. package/dist/config.d.ts +631 -0
  45. package/dist/config.js +503 -0
  46. package/dist/connector-access.d.ts +1 -0
  47. package/dist/connector-access.js +13 -15
  48. package/dist/connector-caller.d.ts +8 -0
  49. package/dist/connector-caller.js +15 -6
  50. package/dist/connector-scope.js +1 -1
  51. package/dist/connectors/api-connector.d.ts +59 -7
  52. package/dist/connectors/api-connector.js +106 -19
  53. package/dist/connectors/api.js +4 -1
  54. package/dist/connectors/guarded-fetch.d.ts +144 -0
  55. package/dist/connectors/guarded-fetch.js +84 -35
  56. package/dist/connectors/negotiation-cache.js +46 -0
  57. package/dist/connectors/option-shapes.js +27 -0
  58. package/dist/connectors/remote-mcp.d.ts +30 -4
  59. package/dist/connectors/remote-mcp.js +1774 -320
  60. package/dist/connectors/resource-uri.js +335 -0
  61. package/dist/credential-contract.d.ts +10 -0
  62. package/dist/credential-rules.js +1 -3
  63. package/dist/credential-url.js +108 -0
  64. package/dist/credentials.d.ts +6 -1
  65. package/dist/credentials.js +27 -18
  66. package/dist/d1.d.ts +130 -0
  67. package/dist/d1.js +290 -0
  68. package/dist/describe-config.d.ts +165 -0
  69. package/dist/describe-config.js +315 -0
  70. package/dist/described.js +106 -0
  71. package/dist/downstream-input-context.js +119 -0
  72. package/dist/downstream-input.js +323 -0
  73. package/dist/errors.d.ts +97 -20
  74. package/dist/errors.js +158 -80
  75. package/dist/execute.js +453 -305
  76. package/dist/executor-admission.d.ts +1 -0
  77. package/dist/executor-admission.js +11 -15
  78. package/dist/executor-contract.d.ts +20 -0
  79. package/dist/executor-contract.js +48 -0
  80. package/dist/executor-result.js +24 -9
  81. package/dist/executors/quickjs-child.js +3 -4
  82. package/dist/executors/quickjs-runtime.js +147 -59
  83. package/dist/executors/quickjs.js +29 -35
  84. package/dist/favicon.js +1 -2
  85. package/dist/fix-prompt.js +1 -3
  86. package/dist/guest-runtime.js +188 -0
  87. package/dist/guest-types.d.ts +176 -0
  88. package/dist/guest-types.js +1 -0
  89. package/dist/html-security.js +24 -0
  90. package/dist/identity.js +1 -3
  91. package/dist/inbound-credential.js +52 -0
  92. package/dist/index.d.ts +24 -256
  93. package/dist/index.js +65 -478
  94. package/dist/invocation-auth.js +69 -0
  95. package/dist/invocation.js +230 -73
  96. package/dist/json-schema.d.ts +1 -1
  97. package/dist/mcp-client-context.js +35 -0
  98. package/dist/mcp-result.js +11 -7
  99. package/dist/meta-output.js +76 -0
  100. package/dist/meta-tool-names.d.ts +2 -0
  101. package/dist/meta-tool-names.js +3 -0
  102. package/dist/meta-tools.js +285 -209
  103. package/dist/module-contracts.d.ts +8 -23
  104. package/dist/node.d.ts +0 -2
  105. package/dist/node.js +2 -2
  106. package/dist/oauth-callback-outcome.js +1 -3
  107. package/dist/oauth-handoff.js +117 -0
  108. package/dist/oauth-sealing.js +20 -0
  109. package/dist/operator-record.d.ts +137 -0
  110. package/dist/operator-record.js +420 -0
  111. package/dist/operator-ui/assets.js +31 -0
  112. package/dist/operator-ui/contract.d.ts +72 -0
  113. package/dist/operator-ui/contract.js +1 -0
  114. package/dist/operator-ui/fix-prompts.d.ts +18 -0
  115. package/dist/operator-ui/generated.js +5 -4
  116. package/dist/operator-ui/model.d.ts +12 -87
  117. package/dist/operator-ui/model.js +2 -9
  118. package/dist/operator-ui/setup-commands.js +1 -3
  119. package/dist/operator-ui/view.d.ts +323 -0
  120. package/dist/operator-ui/view.js +62 -189
  121. package/dist/page-styles.js +2 -3
  122. package/dist/program-source.js +14 -2
  123. package/dist/{exempt-writes.js → program-writes.js} +55 -18
  124. package/dist/provider.d.ts +142 -0
  125. package/dist/provider.js +187 -0
  126. package/dist/providers/_shared/google/result-size.js +57 -0
  127. package/dist/providers/_shared/google/service-account.d.ts +58 -0
  128. package/dist/providers/_shared/google/service-account.js +500 -0
  129. package/dist/providers/_shared/google/workspace.d.ts +276 -0
  130. package/dist/providers/_shared/google/workspace.js +518 -0
  131. package/dist/providers/{basecamp.d.ts → basecamp/index.d.ts} +6 -28
  132. package/dist/providers/basecamp/index.js +997 -0
  133. package/dist/providers/basecamp/skill.generated.js +9 -0
  134. package/dist/providers/{breeze.d.ts → breeze/index.d.ts} +2 -2
  135. package/dist/providers/{breeze.js → breeze/index.js} +184 -140
  136. package/dist/providers/breeze/skill.generated.js +9 -0
  137. package/dist/providers/{ccb.d.ts → ccb/index.d.ts} +2 -2
  138. package/dist/providers/{ccb.js → ccb/index.js} +271 -116
  139. package/dist/providers/ccb/skill.generated.js +9 -0
  140. package/dist/providers/{cloudflare.d.ts → cloudflare/index.d.ts} +8 -7
  141. package/dist/providers/{cloudflare.js → cloudflare/index.js} +171 -738
  142. package/dist/providers/cloudflare/skill.generated.js +10 -0
  143. package/dist/providers/docs/index.d.ts +54 -0
  144. package/dist/providers/docs/index.js +1237 -0
  145. package/dist/providers/docs/skill.generated.js +9 -0
  146. package/dist/providers/drive/index.d.ts +53 -0
  147. package/dist/providers/drive/index.js +1523 -0
  148. package/dist/providers/drive/skill.generated.js +9 -0
  149. package/dist/providers/forms/index.d.ts +54 -0
  150. package/dist/providers/forms/index.js +1217 -0
  151. package/dist/providers/forms/skill.generated.js +11 -0
  152. package/dist/providers/github/auth.d.ts +32 -0
  153. package/dist/providers/github/auth.js +361 -0
  154. package/dist/providers/github/hosted.js +218 -0
  155. package/dist/providers/github/index.d.ts +13 -0
  156. package/dist/providers/github/index.js +140 -0
  157. package/dist/providers/github/key.js +100 -0
  158. package/dist/providers/github/rest.js +321 -0
  159. package/dist/providers/github/scope.d.ts +29 -0
  160. package/dist/providers/github/scope.js +124 -0
  161. package/dist/providers/github/skill.generated.js +8 -0
  162. package/dist/providers/gmail/index.d.ts +51 -0
  163. package/dist/providers/gmail/index.js +1436 -0
  164. package/dist/providers/gmail/skill.generated.js +9 -0
  165. package/dist/providers/{linear.d.ts → linear/index.d.ts} +11 -14
  166. package/dist/providers/linear/index.js +352 -0
  167. package/dist/providers/linear/skill.generated.js +8 -0
  168. package/dist/providers/{mixpanel.d.ts → mixpanel/index.d.ts} +5 -10
  169. package/dist/providers/mixpanel/index.js +416 -0
  170. package/dist/providers/mixpanel/skill.generated.js +9 -0
  171. package/dist/providers/{notion.d.ts → notion/index.d.ts} +8 -8
  172. package/dist/providers/{notion.js → notion/index.js} +226 -239
  173. package/dist/providers/notion/skill.generated.js +10 -0
  174. package/dist/providers/{overflow.d.ts → overflow/index.d.ts} +2 -2
  175. package/dist/providers/{overflow.js → overflow/index.js} +74 -111
  176. package/dist/providers/overflow/skill.generated.js +8 -0
  177. package/dist/providers/{planning-center.d.ts → planning-center/index.d.ts} +2 -2
  178. package/dist/providers/{planning-center.js → planning-center/index.js} +264 -104
  179. package/dist/providers/planning-center/skill.generated.js +10 -0
  180. package/dist/providers/{revenuecat.d.ts → revenuecat/index.d.ts} +5 -10
  181. package/dist/providers/revenuecat/index.js +557 -0
  182. package/dist/providers/revenuecat/skill.generated.js +11 -0
  183. package/dist/providers/sheets/index.d.ts +54 -0
  184. package/dist/providers/sheets/index.js +1237 -0
  185. package/dist/providers/sheets/skill.generated.js +10 -0
  186. package/dist/providers/slides/index.d.ts +53 -0
  187. package/dist/providers/slides/index.js +2645 -0
  188. package/dist/providers/slides/skill.generated.js +9 -0
  189. package/dist/providers/{stripe.d.ts → stripe/index.d.ts} +5 -12
  190. package/dist/providers/stripe/index.js +266 -0
  191. package/dist/providers/stripe/skill.generated.js +11 -0
  192. package/dist/providers/{tithely.d.ts → tithely/index.d.ts} +2 -2
  193. package/dist/providers/{tithely.js → tithely/index.js} +60 -91
  194. package/dist/providers/tithely/skill.generated.js +8 -0
  195. package/dist/providers/{vercel.d.ts → vercel/index.d.ts} +8 -8
  196. package/dist/providers/vercel/index.js +1038 -0
  197. package/dist/providers/vercel/mcp-ownership.js +212 -0
  198. package/dist/providers/vercel/skill.generated.js +11 -0
  199. package/dist/registry.d.ts +108 -171
  200. package/dist/registry.js +513 -925
  201. package/dist/request-state.js +21 -0
  202. package/dist/resource-read.js +100 -0
  203. package/dist/result-shapes.js +17 -49
  204. package/dist/retired-toolkits.js +1 -1
  205. package/dist/routes/access-tokens.js +3 -6
  206. package/dist/routes/activity-context.js +21 -0
  207. package/dist/routes/activity-disclosure.js +40 -0
  208. package/dist/routes/activity.js +59 -21
  209. package/dist/routes/actor-labels.js +3 -50
  210. package/dist/routes/connect.js +221 -0
  211. package/dist/routes/credentials.js +15 -27
  212. package/dist/routes/mcp.js +356 -130
  213. package/dist/routes/oauth-client-metadata.js +15 -0
  214. package/dist/routes/oauth-management.js +45 -107
  215. package/dist/routes/oauth.js +110 -57
  216. package/dist/routes/operator.js +3 -3
  217. package/dist/routes/shared.d.ts +25 -64
  218. package/dist/routes/shared.js +160 -80
  219. package/dist/routes/skills.js +30 -0
  220. package/dist/routes/ui-config.js +225 -0
  221. package/dist/routes/ui-data.js +40 -35
  222. package/dist/routes/ui.js +66 -56
  223. package/dist/runtime/admission.js +4 -2
  224. package/dist/runtime/call-admission.js +3 -1
  225. package/dist/runtime/connector-scope.js +1 -4
  226. package/dist/runtime/run.js +10 -39
  227. package/dist/runtime/services.js +12 -117
  228. package/dist/runtime/shared-read.js +1 -3
  229. package/dist/runtime/storage.js +8 -1
  230. package/dist/sent-secrets.d.ts +52 -0
  231. package/dist/sent-secrets.js +474 -0
  232. package/dist/server.js +28 -71
  233. package/dist/skills.js +406 -174
  234. package/dist/sqlite.d.ts +48 -0
  235. package/dist/sqlite.js +166 -0
  236. package/dist/storage/keys.js +428 -0
  237. package/dist/storage/memory.js +7 -0
  238. package/dist/storage/sql.d.ts +66 -0
  239. package/dist/storage/sql.js +534 -0
  240. package/dist/timeout.js +4 -2
  241. package/dist/tool-name.js +17 -0
  242. package/dist/tool-safety.d.ts +9 -35
  243. package/dist/tool-safety.js +20 -40
  244. package/dist/types.d.ts +320 -54
  245. package/dist/types.js +0 -1
  246. package/dist/ui.d.ts +7 -19
  247. package/dist/ui.js +76 -90
  248. package/dist/url-safety.js +3 -6
  249. package/dist/usage-guide.js +137 -0
  250. package/dist/validate.d.ts +7 -0
  251. package/dist/validate.js +309 -47
  252. package/dist/version.d.ts +1 -7
  253. package/dist/version.js +3 -7
  254. package/dist/worker.d.ts +11 -0
  255. package/dist/worker.js +434 -0
  256. package/documentation/architecture.md +664 -231
  257. package/documentation/auth.md +936 -546
  258. package/documentation/code-mode.md +501 -312
  259. package/documentation/meta-tools.md +449 -200
  260. package/documentation/operator-tests.md +93 -0
  261. package/documentation/provider-migration-0.29.md +60 -0
  262. package/examples/worker/AGENTS.md +34 -12
  263. package/examples/worker/README.md +286 -255
  264. package/examples/worker/kv-to-d1.wrangler.jsonc +26 -0
  265. package/examples/worker/scripts/copy-kv-to-d1.mjs +162 -0
  266. package/examples/worker/src/connecta.config.ts +151 -0
  267. package/examples/worker/src/index.ts +14 -197
  268. package/examples/worker/wrangler.jsonc +15 -35
  269. package/package.json +120 -54
  270. package/templates/node/.dockerignore +1 -2
  271. package/templates/node/.env.example +20 -21
  272. package/templates/node/AGENTS.md +21 -17
  273. package/templates/node/Dockerfile +3 -5
  274. package/templates/node/README.md +133 -58
  275. package/templates/node/docker-compose.yml +11 -12
  276. package/templates/node/package.json +4 -2
  277. package/templates/node/src/connecta.config.ts +119 -0
  278. package/templates/node/src/index.ts +9 -154
  279. package/templates/node/src/provision-token.ts +17 -0
  280. package/AGENTS.md +0 -170
  281. package/dist/artifacts/connector.d.ts +0 -58
  282. package/dist/artifacts/connector.js +0 -730
  283. package/dist/artifacts/document.js +0 -86
  284. package/dist/artifacts/guide.js +0 -140
  285. package/dist/artifacts/html-scan.js +0 -329
  286. package/dist/artifacts/json.js +0 -78
  287. package/dist/artifacts/kv-store.d.ts +0 -20
  288. package/dist/artifacts/kv-store.js +0 -140
  289. package/dist/artifacts/markdown.js +0 -478
  290. package/dist/artifacts/module.d.ts +0 -37
  291. package/dist/artifacts/module.js +0 -66
  292. package/dist/artifacts/operations.d.ts +0 -197
  293. package/dist/artifacts/operations.js +0 -1002
  294. package/dist/artifacts/refresh.d.ts +0 -55
  295. package/dist/artifacts/refresh.js +0 -236
  296. package/dist/artifacts/routes.js +0 -206
  297. package/dist/artifacts/types.d.ts +0 -214
  298. package/dist/artifacts/types.js +0 -22
  299. package/dist/artifacts/validate.d.ts +0 -62
  300. package/dist/artifacts/validate.js +0 -651
  301. package/dist/artifacts.d.ts +0 -6
  302. package/dist/artifacts.js +0 -9
  303. package/dist/auth/bearer.d.ts +0 -11
  304. package/dist/auth/bearer.js +0 -50
  305. package/dist/providers/basecamp.js +0 -445
  306. package/dist/providers/linear.js +0 -217
  307. package/dist/providers/mixpanel.js +0 -247
  308. package/dist/providers/revenuecat.js +0 -317
  309. package/dist/providers/stripe.js +0 -253
  310. package/dist/providers/vercel.js +0 -1253
  311. package/dist/storage/file.d.ts +0 -15
  312. package/dist/storage/file.js +0 -455
  313. package/ethos.md +0 -93
  314. package/examples/worker/src/cloudflare-kv.ts +0 -43
  315. package/examples/worker/src/d1-activity-row.ts +0 -155
  316. package/examples/worker/src/d1-activity.ts +0 -147
  317. package/examples/worker/src/d1-storage.ts +0 -138
  318. package/examples/worker/src/r2-artifact-blobs.ts +0 -29
  319. 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 {};