sporades 0.9.39 โ†’ 0.9.41

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 (60) hide show
  1. package/CHANGES.md +88 -0
  2. package/Dockerfile.base +5 -5
  3. package/README.md +6 -0
  4. package/bin/sporades-host-helper.js +5 -3
  5. package/bin/sporades.js +436 -150
  6. package/dist/access-keys-runtime.d.ts.map +1 -1
  7. package/dist/access-keys-runtime.js +5 -2
  8. package/dist/access-keys-runtime.js.map +1 -1
  9. package/dist/auth-admission.d.ts.map +1 -1
  10. package/dist/auth-admission.js +3 -0
  11. package/dist/auth-admission.js.map +1 -1
  12. package/dist/auth-runtime.d.ts +10 -7
  13. package/dist/auth-runtime.d.ts.map +1 -1
  14. package/dist/auth-runtime.js +150 -28
  15. package/dist/auth-runtime.js.map +1 -1
  16. package/dist/base-image.js +2 -2
  17. package/dist/cli/access-key-operator-envelope.js +1 -1
  18. package/dist/cli/access-key-operator-envelope.js.map +1 -1
  19. package/dist/cli/cli-version.d.ts +1 -1
  20. package/dist/cli/cli-version.js +1 -1
  21. package/dist/database-runtime.d.ts.map +1 -1
  22. package/dist/database-runtime.js +23 -3
  23. package/dist/database-runtime.js.map +1 -1
  24. package/dist/endpoint-file-response.d.ts +2 -0
  25. package/dist/endpoint-file-response.d.ts.map +1 -1
  26. package/dist/endpoint-file-response.js +5 -0
  27. package/dist/endpoint-file-response.js.map +1 -1
  28. package/dist/endpoint-session.d.ts +3 -0
  29. package/dist/endpoint-session.d.ts.map +1 -0
  30. package/dist/endpoint-session.js +15 -0
  31. package/dist/endpoint-session.js.map +1 -0
  32. package/dist/generated-source-manifest.json +7 -6
  33. package/dist/observability-runtime.d.ts +1 -2
  34. package/dist/observability-runtime.d.ts.map +1 -1
  35. package/dist/observability-runtime.js +65 -43
  36. package/dist/observability-runtime.js.map +1 -1
  37. package/dist/server-runtime-source.d.ts +4 -1
  38. package/dist/server-runtime-source.d.ts.map +1 -1
  39. package/dist/server-runtime-source.js +161 -75
  40. package/dist/server-runtime-source.js.map +1 -1
  41. package/dist/server.d.ts +11 -3
  42. package/dist/server.d.ts.map +1 -1
  43. package/dist/server.js +13 -0
  44. package/dist/server.js.map +1 -1
  45. package/dist/teams-runtime.d.ts.map +1 -1
  46. package/dist/teams-runtime.js +30 -0
  47. package/dist/teams-runtime.js.map +1 -1
  48. package/dist/templates/client-runtime-template.d.ts.map +1 -1
  49. package/dist/templates/client-runtime-template.js +17 -1
  50. package/dist/templates/client-runtime-template.js.map +1 -1
  51. package/dist/templates/server-bundle-module-graph.js +1 -1
  52. package/dist/templates/server-bundle-module-graph.js.map +1 -1
  53. package/package.json +4 -4
  54. package/src/types/client.d.ts +19 -4
  55. package/src/types/observability.d.ts +12 -2
  56. package/src/types/server.d.ts +51 -5
  57. package/dist/stored-row-decoding.d.ts +0 -7
  58. package/dist/stored-row-decoding.d.ts.map +0 -1
  59. package/dist/stored-row-decoding.js +0 -69
  60. package/dist/stored-row-decoding.js.map +0 -1
package/CHANGES.md CHANGED
@@ -1,5 +1,51 @@
1
1
  # Changes
2
2
 
3
+ ## v0.9.41 - 2026-10-24
4
+
5
+ Changes since v0.9.40.
6
+
7
+ ### ๐Ÿš€ Features
8
+
9
+ - Allow any script version (4a43c515).
10
+ - Add Capsule implicitMutations opt-out for the implicit table mutation surface (#304) (9692d63e).
11
+ - Add explicitly sessionless public endpoints (#308) (1b367744).
12
+ - Add atomic Capsule admission for additional Team creation (#305) (d74d7999).
13
+
14
+ ### ๐Ÿ› Bug Fixes
15
+
16
+ - Prevent account-wide sign-in lockout with bounded verification (#299) (b73dc192).
17
+
18
+ ### ๐Ÿ”ง Improvements
19
+
20
+ - Regenerate dist and bin [skip ci] (271b05d2).
21
+ - Regenerate dist and bin [skip ci] (9c3e3204).
22
+
23
+ ### ๐Ÿ“ Documentation
24
+
25
+ - Build dist and bin on main with local CI (#314) (3f555768).
26
+ - Remove the runtime-owned ctx.env browser query (#289) (#301) (cde2b5cf).
27
+ - Reject email signup from linked identities (#300) (e6348a83).
28
+ - Make the full test suite pass in office worktrees (#309) (23d1663d).
29
+ - Expose shared rate limits during Capsule File ingress admission (#307) (2f57e950).
30
+ - Revoke all account authority atomically on a browser password change (#302) (32962832).
31
+ - Isolate public collection budgets from server error delivery (#303) (c1956ad0).
32
+
33
+ ### ๐Ÿงช Tests
34
+
35
+ - Wait for exported durable Job metrics (#311) (48951c93).
36
+
37
+ ## v0.9.40 - 2026-10-23
38
+
39
+ Changes since v0.9.39.
40
+
41
+ ### ๐Ÿ“ Documentation
42
+
43
+ - Upgrade Capsule base to Node 24 LTS and normalize npm pack JSON (#288) (8f5ecc5b).
44
+
45
+ ### ๐Ÿงช Tests
46
+
47
+ - Describe SQLite inspection columns without StatementSync#columns() (#287) (9b29b3d5).
48
+
3
49
  ## v0.9.39 - 2026-10-22
4
50
 
5
51
  Changes since v0.9.38.
@@ -10,8 +56,40 @@ Changes since v0.9.38.
10
56
 
11
57
  ## Unreleased
12
58
 
59
+ ### ๐Ÿ”’ Security
60
+
61
+ - Remove the runtime-owned `ctx.env` browser query (#289). Query clients,
62
+ including Anonymous Sessions, could subscribe to the undeclared `ctx.env`
63
+ name and receive the entire server environment. That name now follows the
64
+ ordinary unknown-query response and returns no environment data, while
65
+ `ctx.env` stays available to trusted server handlers. A Capsule that declares
66
+ its own query with that name keeps the normal declared-query contract.
67
+
68
+ ### ๐Ÿ“ฆ Packaging
69
+
70
+ - Upgrade the default Capsule Base image to `0.3.0-node24-alpine`, using Node
71
+ 24.22.1 LTS on Alpine 3.23 with a pinned upstream image digest. Upgrade the CLI
72
+ and Host helper and redeploy to replace existing containers; restarting a
73
+ release preserves its pinned image. Keep explicit image overrides unchanged.
74
+ - Normalize npm pack JSON metadata across flat and package-keyed formats in
75
+ release verification and packaged compatibility checks, preserving artifact
76
+ hashes and rejecting ambiguous output.
77
+
13
78
  ### ๐Ÿš€ Features
14
79
 
80
+ - Let Capsules opt out of implicit table mutations (#292). Declaring
81
+ `implicitMutations: false` bounds the mutation surface to explicitly declared
82
+ names: every undeclared name answers the ordinary unknown-mutation refusal
83
+ before context middleware, any fallback write, mutation hooks, or success
84
+ effects such as the deferred query rebroadcast. Omitting the flag or passing
85
+ `true` keeps 0.9.x behavior, where undeclared names that describe a table
86
+ (`addNote`, `updateNoteText`) insert or update rows under their fallback
87
+ semantics. Declared mutations, server `ctx.db`, implicit table queries and
88
+ table ACLs keep their behavior, and a bundled declared mutation matching the
89
+ generated scaffold `addโ€ฆ` body stops riding the implicit path while the
90
+ surface is retired. Present non-boolean values are rejected at authoring and
91
+ at Capsule startup (`INVALID_IMPLICIT_MUTATIONS`). The flag is not business
92
+ quota enforcement; declare checks in mutations, ACL rules, or hooks.
15
93
  - Add read-only `sporades host db list|dump|query` for running Hosted Capsules (#285).
16
94
  It runs the Host helper over the operator's existing SSH access and the
17
95
  generated Bundle's one-shot action seam, opens the Capsule SQLite file
@@ -21,6 +99,16 @@ Changes since v0.9.38.
21
99
  defaults to the project's Host binding. Requires `sporades host upgrade` and
22
100
  a redeploy with this CLI; no public route is added.
23
101
 
102
+ ### ๐Ÿ› Bug Fixes
103
+
104
+ - Fix `sporades host db query` failing with "columns is not a function" on
105
+ Hosted Capsules. The previous Base image ran Node 22.14, whose `node:sqlite` lacks
106
+ `StatementSync#columns()` (added in 22.16). SQLite inspection queries now
107
+ describe their columns without it, including zero-row results, so Hosted,
108
+ Dev and MCP ops queries on Node 22.13โ€“22.15 return the same
109
+ `{ ok, data: { columns, rows }, error }` envelope. Requires a redeploy with
110
+ this CLI.
111
+
24
112
  ## v0.9.38 - 2026-10-22
25
113
 
26
114
  Changes since v0.9.37.
package/Dockerfile.base CHANGED
@@ -1,12 +1,12 @@
1
- FROM node:22.14-alpine
1
+ FROM node:24.22.1-alpine3.23@sha256:0468540aa58203ff9e40c2aab3907c52644ab818af6176b1c70a026137dc92a2
2
2
 
3
3
  LABEL org.opencontainers.image.title="Sporades Base Image"
4
- LABEL org.opencontainers.image.description="Thin Node 22 Base image for Sporades Container sessions and Hosted Capsules"
5
- LABEL org.opencontainers.image.version="0.2.0-node22-alpine"
4
+ LABEL org.opencontainers.image.description="Thin Node 24 LTS Base image for Sporades Container sessions and Hosted Capsules"
5
+ LABEL org.opencontainers.image.version="0.3.0-node24-alpine"
6
6
  LABEL org.opencontainers.image.source="https://github.com/sporades/sporades"
7
7
  LABEL com.sporades.base-image.name="sporades-base"
8
- LABEL com.sporades.base-image.version="0.2.0-node22-alpine"
9
- LABEL com.sporades.base-image.node="22"
8
+ LABEL com.sporades.base-image.version="0.3.0-node24-alpine"
9
+ LABEL com.sporades.base-image.node="24"
10
10
 
11
11
  RUN apk add --no-cache openssh-server fail2ban clamav clamav-daemon \
12
12
  && addgroup -g 10001 -S sporades \
package/README.md CHANGED
@@ -360,6 +360,12 @@ Capsules through authorized public keys in `sporades.json`. Normal management
360
360
  remains the CLI and Host helper surfaces; SSH is a compatibility and emergency
361
361
  access path.
362
362
 
363
+ ## Contributing
364
+
365
+ Run a local build and tests, but never commit `dist/` or `bin/` in a PR. CI
366
+ regenerates their tracked copies on main after merge. See the
367
+ [generated artifacts workflow](https://github.com/mgscox/sporades/blob/main/docs/agents/generated-artifacts.md).
368
+
363
369
  ## License
364
370
 
365
371
  MIT
@@ -256,8 +256,8 @@ var init_base_image = __esm({
256
256
  "use strict";
257
257
  SPORADES_BASE_IMAGE = {
258
258
  name: "sporades-base",
259
- image: "ghcr.io/sporades/sporades-base:0.2.0-node22-alpine",
260
- version: "0.2.0-node22-alpine",
259
+ image: "ghcr.io/sporades/sporades-base:0.3.0-node24-alpine",
260
+ version: "0.3.0-node24-alpine",
261
261
  runtimeUser: "sporades",
262
262
  runtimeUid: 10001,
263
263
  runtimeGid: 10001,
@@ -45813,6 +45813,7 @@ var clamavRefreshTimeoutMs = 5 * 60 * 1e3;
45813
45813
  // src/auth-runtime.ts
45814
45814
  var nodeCryptoModule3 = process.getBuiltinModule("node:crypto");
45815
45815
  var EMAIL_SIGN_IN_THROTTLE_WINDOW_MS = 15 * 60 * 1e3;
45816
+ var EMAIL_SIGN_IN_VERIFICATION_WINDOW_MS = 60 * 1e3;
45816
45817
  var PASSWORD_RESET_DEFAULT_TTL_MS = 60 * 60 * 1e3;
45817
45818
  var PASSWORD_RESET_MIN_TTL_MS = 5 * 60 * 1e3;
45818
45819
  var PASSWORD_RESET_MAX_TTL_MS = 24 * 60 * 60 * 1e3;
@@ -45931,6 +45932,7 @@ var REVOCATION_CAUSES = /* @__PURE__ */ new Set([
45931
45932
  "owner",
45932
45933
  "operator",
45933
45934
  "password-reset",
45935
+ "password-change",
45934
45936
  "owner-unlinked",
45935
45937
  "owner-deleted",
45936
45938
  "service-user-administrator",
@@ -46183,7 +46185,7 @@ var mutationExecution = new MutationExecutionStorage();
46183
46185
  init_cli_support();
46184
46186
 
46185
46187
  // src/cli/cli-version.ts
46186
- var CLI_VERSION = "0.9.39";
46188
+ var CLI_VERSION = "0.9.41";
46187
46189
 
46188
46190
  // src/cli/schedule-inspection-envelope.ts
46189
46191
  var SCHEDULE_DIAGNOSTIC_FIELDS = /* @__PURE__ */ new Set([