Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
646954a
Add core TypeScript submodules and shared example support
bradleyshep Sep 8, 2026
e0f5d86
Reuse noble hex conversion helpers
bradleyshep Sep 9, 2026
a513320
Merge branch 'master' into bradley/submodules-core
bradleyshep Sep 9, 2026
f38ca85
Merge branch 'master' into bradley/submodules-core
bradleyshep Sep 17, 2026
5418e2f
Address core submodule review and retry failure handling
bradleyshep Sep 17, 2026
983341c
Use matching workspace artifacts for submodule CI
bradleyshep Sep 17, 2026
720daa3
Merge branch 'master' into bradley/submodules-core
bradleyshep Sep 21, 2026
470045f
Simplify rate-limit policy setup and reject invalid base64
bradleyshep Sep 24, 2026
0cce532
Keep Retry compatible with generated consumer TypeScript options
bradleyshep Sep 24, 2026
8ad05ee
Use shared licenses and preserve Apache text in core packages
bradleyshep Sep 29, 2026
fbb49d9
Merge remote-tracking branch 'origin/master' into bradley/submodules-…
bradleyshep Sep 29, 2026
094df0e
Regenerate lockfile from master to drop unrelated dependency changes
bradleyshep Sep 29, 2026
365e8dd
Refuse to remove the last rate-limit admin
bradleyshep Sep 29, 2026
36e058d
Install rate limit with install(ctx) and bound maintenance batches alike
bradleyshep Sep 29, 2026
b51ef2e
Replace createRetrySubmodule with retry client and install
bradleyshep Sep 29, 2026
8fd1b81
Return failure reasons from webhook signature checks
bradleyshep Sep 29, 2026
b47fe59
Keep rate-limit policy in the limiter client
bradleyshep Sep 29, 2026
a82ef55
Replace spacetimeCron and createCron with cron client
bradleyshep Sep 29, 2026
1e32883
Merge branch 'bradley/submodules-core-ratelimit' into bradley/submodu…
bradleyshep Sep 29, 2026
812c0d2
Register retry handlers after schema with typed contexts
bradleyshep Sep 29, 2026
0288cdd
Export SDK types that library declaration files need
bradleyshep Sep 29, 2026
7f23621
Ship compiled dist from the core submodule packages
bradleyshep Sep 29, 2026
4d59434
Regenerate cron example bindings with CLI 2.11.0
bradleyshep Sep 29, 2026
c57457e
Measure cron recovery replays by downtime window
bradleyshep Sep 29, 2026
dfdccc7
Prune retry history before recording an attempt
bradleyshep Sep 29, 2026
ca5e687
Reject rate-limit costs above the limit and export only caller errors
bradleyshep Sep 30, 2026
313ce60
Give up retry tasks whose handler throws a SenderError
bradleyshep Sep 30, 2026
45fe0a3
Lint submodules and run the cron recovery test in CI
bradleyshep Sep 30, 2026
d4447c6
Rename submodule-shared to example-ui
bradleyshep Sep 30, 2026
8f68066
Export only runtime cron error codes
bradleyshep Sep 30, 2026
ff2a196
Keep the retry unknown-handler code internal
bradleyshep Sep 30, 2026
01c8fe5
Export resetRegisteredScopes from rate-limit
bradleyshep Sep 30, 2026
24e3f63
Merge remote-tracking branch 'origin/master' into bradley/submodules-…
bradleyshep Sep 30, 2026
44f4ed1
Treat a signal-killed server as stopped in the cron recovery test
bradleyshep Sep 30, 2026
f9c8554
Explain core submodules through practical use cases
bradleyshep Oct 1, 2026
ce52d4c
docs: simplify core submodule READMEs
bradleyshep Oct 2, 2026
5fced67
Add Resend transactional email submodule (#5904)
bradleyshep Oct 7, 2026
ed73b68
Merge branch 'master' into bradley/submodules-core
bradleyshep Oct 8, 2026
ddbc32f
Run TypeScript submodule CI through cargo
bradleyshep Oct 9, 2026
ae25f1d
Merge master into submodules core and resolve formatter ignores
bradleyshep Oct 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2402,3 +2402,37 @@ jobs:
# - name: Print rows in the user table
# if: always()
# run: spacetime sql quickstart-chat "SELECT * FROM user"

typescript-submodules:
Comment thread
bradleyshep marked this conversation as resolved.
needs: [merge_queue_noop, upload-build-artifacts-linux]
if: ${{ needs.merge_queue_noop.outputs.skip != 'true' }}
name: TypeScript - Submodules
runs-on: spacetimedb-new-runner-2
env:
ARTIFACT_SUFFIX: linux
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 22

- uses: ./.github/actions/setup-pnpm
with:
run_install: true

- name: Install Rust toolchain
uses: dsherret/rust-toolchain-file@v1
- name: Set default rust toolchain
run: rustup default $(rustup show active-toolchain | cut -d' ' -f1)

- *set-cargo-target-dir
- *download-build-artifacts
- *extract-build-artifacts

- *expose-spacetime-cli

- name: Check TypeScript submodules
run: cargo ci typescript-submodules
8 changes: 8 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,14 @@ __pycache__/
## JetBrains
.idea/

# TypeScript submodule development outputs
spacetime-*-ts/example/.stdb-server-token
spacetime-*-ts/example/public/app.js
spacetime-*-ts/example/public/app.js.map
spacetime-*-ts/example/public/app.css
spacetime-*-ts/example/public/app.css.map
spacetime-*-ts/ts-codegen/

/protobuf
cs-src/
crates/bench/spacetime.svg
Expand Down
5 changes: 5 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,9 @@ dist
target
.github
coverage
**/public/app.js
**/public/app.js.map
**/public/app.css
**/public/app.css.map
**/src/module_bindings/**
crates/bindings-typescript/src/server/test-utils/portable-datastore-wasm
9 changes: 9 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ members = [
"tools/ci/commands/publish-checks",
"tools/ci/commands/run-spacetime",
"tools/ci/commands/typescript-test",
"tools/ci/commands/typescript-submodules",
"tools/ci/commands/version-upgrade-check",
"tools/ci/commands/docs",
"tools/ci/commands/codeowners-check",
Expand Down
3 changes: 3 additions & 0 deletions crates/bindings-typescript/src/lib/type_builders.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1762,6 +1762,9 @@ class SimpleSumBuilderImpl<Variants extends SimpleVariantsObj>
}
}

// Named so declaration files can refer to enum and unit builder instances.
export type { SumBuilderImpl, SimpleSumBuilderImpl, UnitBuilder };

export const SimpleSumBuilder: {
new <Variants extends SimpleVariantsObj>(
variants: Variants,
Expand Down
9 changes: 9 additions & 0 deletions crates/bindings-typescript/src/server/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,13 @@ export { ScheduleAt } from '../lib/schedule_at';

export type { Environment } from './environment';

// Named so libraries built on this package can emit declaration files for
// the tables, schemas, and exports they create.
export type { CoerceRow } from '../lib/table';
export type { TableSchema } from '../lib/table_schema';
export type { TablesToSchema } from '../lib/schema';
export type { EnvironmentValue } from '../lib/environment';
export type { ReadonlyDbView } from './db_view';
export type { Schema } from './schema';

import './polyfills'; // Ensure polyfills are loaded
17 changes: 17 additions & 0 deletions eslint.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ export default tseslint.config(
'**/dist/**',
'**/build/**',
'**/coverage/**',
'**/public/app.js',
'**/src/module_bindings/**',
'**/ts-codegen/**',
'**/templates/angular-ts/.angular/**',
'**/src/server/test-utils/portable-datastore-wasm/**',
],
Expand Down Expand Up @@ -63,6 +66,7 @@ export default tseslint.config(
'./tsconfig.json',
'./crates/bindings-typescript/tsconfig.json',
'./crates/bindings-typescript/test-app/tsconfig.json',
'./spacetime-example-ui-ts/tsconfig.json',
'./templates/react-ts/tsconfig.json',
'./templates/chat-react-ts/tsconfig.json',
'./templates/money-exchange-react-ts/tsconfig.json',
Expand Down Expand Up @@ -119,6 +123,19 @@ export default tseslint.config(
],
},
},
{
files: ['spacetime-*-ts/**/example/public/ui.js'],
languageOptions: {
sourceType: 'script',
globals: globals.browser,
},
},
{
files: ['spacetime-*-ts/**/*.{ts,tsx}'],
rules: {
'@typescript-eslint/no-explicit-any': 'error',
},
},
{
files: ['templates/angular-ts/src/**/*.ts'],
rules: {
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
},
"type": "module",
"scripts": {
"run-all": "pnpm -r -F ./crates/bindings-typescript -F ./crates/bindings-typescript/examples/quickstart-chat -F ./crates/bindings-typescript/test-app -F ./docs -F \"./templates/**\" run",
"run-all": "pnpm -r -F ./crates/bindings-typescript -F ./crates/bindings-typescript/test-app -F ./docs -F \"./templates/**\" -F \"./spacetime-*-ts/**\" run",
"format": "pnpm run-all format && prettier eslint.config.js --write",
"lint": "pnpm run-all lint && prettier eslint.config.js --check",
"build": "pnpm run-all build",
Expand Down
Loading
Loading