268 Commits
Author SHA1 Message Date
zeekayandHanzo Dev b618bc3f7a Stop two tests measuring the machine
A sleep that returned in 181ms and a 50ms TTL with 20ms of slack were
reporting how busy the box was rather than whether the code works.
Both keep the assertion that matters -- sleep does not return early, a
re-Put outlives the first expiry -- with margins jitter cannot reach:
the TTL test still fails three times in three when Put stops
refreshing expiresAt.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-10 21:40:16 -07:00
zeekay 9704b55c8d State a version once
A version written into a manifest is written into every manifest that wants it,
which is how eslint came to exist in a hundred and four forms across this estate
and how a package came to resolve twice at run time. The catalog moves the number
out of the manifest: a manifest names the package, the workspace names the
version.

Four are held below their latest because the newer release cannot be used, and
the reason is recorded rather than the version alone: @noble/hashes 2 renamed
every subpath the web3 stack imports, @splinetool/runtime 2 depends on a package
that was never published, @dynamic-labs 5.4.1 the same, and react-resizable-panels
3 points its types condition at the bundle.
2026-08-29 13:46:56 -07:00
zeekayandHanzo Dev 616e4b58d7 a hook is about a Base, and which Base arrives with the event
An extension's hooks were stated once, on the Base the process started with,
so a write to a tenant's Base fired nothing an extension had asked for. The
file says what to do when a record is created; it does not say where, and the
where comes with the event.

So a declaration is recorded as something that can be stated on any Base, and
stated on each as it is constructed — the same place realtime is bound, for
the same reason. A hook still sees only the Base it fired on.

This grants an extension nothing it did not have. A file on disk is the
operator's, and it already ran with the process's authority; what changes is
which data its hooks see. An extension written when there was one Base now
runs against each, which is a behaviour change and is the thing to know.

Routes and crons an extension declares stay on the Base that loaded it: a
route is registered once on a router, and a schedule belongs to the process.

A tenant's Base was bootstrapped and never served, so nothing it scheduled
ever ran — its logs were never cleaned and its database never optimised.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-13 19:56:46 -07:00
zeekay e9634a77dd Base sends no auth mail, because it has no auth flow to send it for
The verification and email-change templates were the last of local auth. Their
endpoints went in the IAM-native rip — bindRecordAuthApi keeps auth-methods and
auth-refresh and nothing else — so both answered 404 for every deployment, not
only IAM ones, and their buttons addressed a route in an admin SPA that no
longer exists. Re-pathing them last commit made them honest; this removes them,
along with everything that existed only to serve them.

That turned out to be a lot, and each piece was already dead on its own terms:

  core.EmailTemplate and the two collection fields — no other user
  the mails package entire — its two functions were the only callers of its
    own template resolver and its own html layout
  the $mails JSVM namespace — an empty object once the two binds went, and its
    type declarations advertised FIVE helpers, three of which (password reset,
    OTP, auth alert) were removed in that same rip and never bound at all, so
    hook authors have been reading a contract for functions that do not exist
  OnMailerRecordVerificationSend / OnMailerRecordEmailChangeSend — nothing has
    been able to fire either since the mails package was their only caller
  core.MailerRecordEvent — the type those two hooks carried

Nothing loses a capability. $app.newMailClient().send() is the general sender,
and it is what an app binding its own confirm route would have used anyway; the
two removed binds were convenience wrappers over it.

POST /v1/settings/test/email stays and gets better. It rendered a template
against a throwaway record, so "can this deployment deliver mail" was answerable
only through a flow that no longer exists. It sends a plain message now — no
template, no collection, no record, no token — which is the question an operator
has after editing SMTP settings.

The collection fields are DEFAULTS applied at creation; a collection stores its
own copy, and an options key the struct no longer declares is ignored on read,
so nothing already deployed changes shape. types.d.ts is regenerated by its own
generator rather than hand-edited (the generator still listed the deleted
package, which is why it had to be fixed first).
2026-08-10 21:14:46 -07:00
zeekay 054d65663a they are Bases, one per org — the word tenant is gone
Base's own registry was already org-native in every method — OrgDB(orgID),
HasOrg(orgID), orgDir(orgID) — and only the type names said tenant. So this is
the vocabulary catching up with the code, not a change of behaviour.

	TenantRegistry -> Bases          app.Bases().OrgDB(org)
	TenantConfig   -> BasesConfig
	MultiTenant    -> PerOrg         it enables per-org databases; say that
	MULTI_TENANT   -> MULTI_BASE
	core/tenant.go -> core/bases.go

Tenant was the wrong noun twice over: it is the multi-tenancy word, and this
product's unit is the thing a customer creates per org — a Base. Identity here
is org, user, project, and nothing else.

The UI never said it; this was Go-side only. 64 packages green.

One test was collateral and is fixed rather than renamed: TestToHTTPHeader
asserts a pure snake_case-to-Header-Case transform, so rewriting its EXPECTED
value while its input stayed "tenant_id" made it assert something false. The case
is dropped — org_id already covers that transform.
2026-08-10 18:23:40 -07:00
zeekayandHanzo Dev 130234e462 jsvm types: regenerate — committed conflict markers, and 9 namespaces it never had
`plugins/jsvm/internal/types/generated/types.d.ts` carried literal
`<<<<<<< HEAD` / `=======` / `>>>>>>> upstream/master` at lines 23807-23850,
committed, from an old upstream merge nobody finished. The file's own first
line reads GENERATED CODE - DO NOT MODIFY BY HAND, so it was not hand-edited
around: `make jstypes` (go run ./plugins/jsvm/internal/types/types.go) was run,
which is the one way this file is produced.

Regenerating showed the markers were the smaller half of the problem — the file
was badly stale. Nothing was lost (every namespace present before is still
present, `declare function` count unchanged at 17) and NINE namespaces appear
that Base's own packages have exported for some time: crdt, tasks, network,
metric, logger, query, json, big, rsa. Hook authors writing JS against Base had
no types for any of them.

Worth knowing for whoever adds a regenerate-and-diff gate: the generator
prepends `// <unix timestamp>` to line 1, so this file is never byte-reproducible
across runs and such a gate must ignore that line.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-04 17:08:13 -07:00
zeekayandHanzo Dev 4d5ad48ace chore: scrub upstream-fork brand mentions (Base-native naming only)
Co-authored-by: Hanzo Dev <[email protected]>
2026-06-30 13:32:06 -07:00
zeekay e7df8c856e base: complete pocketbase→base rename; Base = pure IAM client
Rename / namespace:
- Finish github.com/pocketbase/* → github.com/hanzoai/base (+ /dbx) sweep
  across all Go sources; restore the renamed root launcher (Base, base.go).
- Drop the upstream-only surfaces ours doesn't ship (admin ui/, the
  password/OTP/oauth2/impersonate auth files, extensions) re-added by the
  upstream merge.
- Decomplect the on-disk layout to one base_/ namespace: data/, migrations/,
  hooks/, types.d.ts are siblings under base_/ (default data dir
  base_/data). Drop the hz_ prefix everywhere; collapse migratecmd's
  identical JS/Go branches to one path.
- Remove the accidentally-committed hz_data/ dev dir (db + iam.key) and
  gitignore the runtime namespace dirs.

Deps / build:
- kmsclient now imported from the light github.com/hanzoai/kms/sdk/go module
  (the root kms module zip exceeds Go's download limit); cloud/pkg/base
  Mount removed (lives in the fused daemon).
- replicate v0.4.0 → v0.8.0; metric.Counter.Get() (no prometheus dto);
  network/metrics.go import fix; auth gitlab/github tidy.

Tests / behavior:
- Wire registerNotifyWatcherHooks; debounce notify files past the kqueue
  rescan window so cross-instance settings/collections reload fires.
- migratecmd: exclude createdAt/updatedAt (not created/updated); regenerate
  Go+JS automigration goldens from canonical output.
- Convert the two stale archive red-probes to assert the landed defenses
  (backlog cap bounds memory; forged-segment signature is rejected).

IAM-native (Base = pure IAM client):
- Rip the ~1k-line home-grown embedded IAM (iam_embedded*.go) and the
  iam-user CLI. Base no longer reinvents identity as _iam_users/_superusers
  rows. IAM_ENDPOINT (hanzo.id, or an in-process iam.Embed in the fused
  daemon) is required; Base validates IAM JWTs via JWKS only — superuser is
  the IAM admin claim, resolved to an ephemeral unpersisted record.
- Extract the IDV reverse-proxy (/v1/idv/*) into idv_proxy.go — it was
  mis-colocated in the embedded onboarding file and is independent of IAM.
- Bind the SQL console (/v1/sql) and test it through real IAM JWTs against a
  JWKS stub (no hardcoded record tokens, no persisted rows).
2026-06-10 21:29:14 -07:00
zeekay cc7a65b5cb base: route convention /api/* -> /v1/*
One path: /v1/*. We do not use /api/ — that's Casdoor's path. The
BASE_API_PREFIX env knob is gone; the prefix is hard-coded in
apis/base.go and apis/serve.go banner.

Server-side mounts:
- apis: bindHealthApi, bindCollectionApi, bindRecordCrudApi, etc. all
  attach under r.Group("/v1") (was r.Group(BASE_API_PREFIX, default /api))
- platform plugin: /api/platform/* -> /v1/platform/* (including auth and
  org sub-groups)
- kms plugin: /api/kms/* -> /v1/kms/*
- functions plugin: /api/functions/* -> /v1/functions/*
- cloudsql plugin: /api/cloud-sql/*, /api/meta/* -> /v1/*
- superuser OIDC: /_/api/oidc/config -> /_/v1/oidc/config
- core settings: default RateLimitRule labels /api/batch, /api/ ->
  /v1/batch, /v1/
- apis/batch.go: ValidBatchActions regexes match /v1/collections/*;
  internal rewrite targets /v1/collections/* (was /v1/base/collections/*,
  a stale artifact)

Clients:
- sdk/base-js (BaseClient.collections, files, realtime, CRDT WS,
  signIn/refresh/health) targets /v1/*
- sdk/base-react (use-crdt WS path) targets /v1/crdt
- ui-react admin (lib/api.ts, settings.application copy) targets /v1/*
- cmd/cli (NewClient.APIPrefix) defaults to /v1; client_test.go and
  cmd/cli_test.go stubServer use /v1/*
- cmd/typegen calls /v1/collections

Upstream paths untouched: Casdoor IAM (/api/login, /api/userinfo,
/api/signup, /api/send-verification-code, /api/get-user), KMS Infisical
(/api/v1/auth/universal-auth/login, /api/v2/workspace/environments),
Kubernetes tasks (/api/v1/namespaces/...), IPFS (/api/v0/...), Gitea/
GitLab/Discord/Strava/Patreon/Box/Wakatime upstream APIs. Those are
their contracts, not ours.

Tests: all 437 prior /api/ test URLs across apis/*_test.go and
plugins/platform/auth_proxy_test.go updated to /v1/. Build + go vet
clean. ./apis ./core ./plugins/platform ./plugins/jsvm ./forms all
green. Pre-existing red probes (network/TestRedProbe_*,
migratecmd/TestAutomigrateCollection*) unchanged.
2026-05-15 14:41:26 -07:00
zeekay 5939cbaa0c logger: switch attr-helpers to variadic positional pairs
Every non-handler call site that wrapped a value in
slog.String/Int/Bool/Any/Float64/Uint64 was passing an Attr through the
variadic any... slot of (*slog.Logger).Info/Warn/Error/Debug; the same
slot accepts the bare "key", value pair with identical semantics. Drop
the wrapper so the surface is one level less indirect and so the next
two commits can swap (*slog.Logger) for a small Logger interface
without rewriting every attr expression as well.

23 files, 156 call sites collapsed; no behavior change. Five files —
tools/logger/log.go, tools/logger/batch_handler.go +_test, and
core/log_printer.go +_test — are the handler-implementation layer and
legitimately reference slog.Attr/Level/Group; they were skipped.
2026-05-15 03:50:49 -07:00
zeekay 48b8d40e49 tests,migrations: align fixtures with the IAM-native auth shape
Sweep the surviving auth-side tests so they no longer assert on
deleted constants / models / config knobs:
  - collection / record exports + indexes / record-table-sync drop
    the password column from auth-collection bootstrap fixtures and
    the JSON snapshots
  - TestRecordPublicExportAndMarshalJSON keeps the legacy "drop
    password key from auth-record export" invariant (now enforced as
    a hard-coded delete on the record_model.go side, not via the
    field type) so accidental Set("password", x) calls never leak
  - api-layer crud/auth-methods/collection-import scenarios drop the
    "password / passwordConfirm / oldPassword / MFA / OTP" expected
    keys and switch the auth-collection-create error fixtures to
    email-validation + manager-access scenarios that still exist
  - migrate-cmd / jsvm bind counts updated; jsvm $mails surface
    drops to {verification, email-change}; PasswordField + the
    sendRecordPasswordReset / sendRecordOTP / sendRecordAuthAlert
    bindings removed from the type generator's expected fixture
  - migrations/1747094400 raw-SQL implementation: the old delete
    path went through the collection model (which can't rehydrate
    pre-rip rows that still encode the deleted password field type)
    and the system-collection guard. New approach: DROP TABLE IF
    EXISTS + DELETE FROM _collections WHERE name=$x, then strip the
    password entry from each surviving auth collection's JSON
    fields array and ALTER TABLE DROP COLUMN. Idempotent on fresh
    installs (no legacy table → no-op).

apis ./core ./plugins/jsvm ./forms all run green now.
2026-05-15 03:40:04 -07:00
zeekay ef827c8709 apis,forms,plugins: rip password cascade from consumers
- forms/RecordUpsert no longer manages a plain password / confirm /
  oldPassword triple; Load + validateFormFields only handle the
  email + verified system fields now. DrySubmit + Submit semantics
  unchanged
- apis/installer + apis/superuser_auth_oidc drop SetRandomPassword;
  the installer superuser and the OIDC auto-create path persist a
  verified passwordless record (IAM handles credentials)
- apis/collection_test snapshots updated for the slimmer auth
  collection bootstrap (no system "password" field) and the smaller
  collection inventory (12 not 16); the now-stale "create-base-
  collection-with-oldPassword-rejected" test is deleted because the
  reserved-key check is gone
- plugins/jsvm drops the PasswordField bind
- plugins/zap returns 410 Gone for /identity (the only ZAP path
  that called record.ValidatePassword) — IAM PKCE is the only login
- plugins/migratecmd test no longer probes a PasswordResetToken
  secret on auth collections
- tests/dynamic_stubs loses StubMFARecords + StubOTPRecords;
  tests/token_helper loses GetUserPasswordResetToken
2026-05-15 03:19:15 -07:00
zeekay 5807ed3ee9 core,mails: rip hooks and senders for retired local-auth flows
App.OnRecordAuthWithPasswordRequest, OnRecord{Request,Confirm}-
PasswordResetRequest, OnRecord{Request,Authenticate}OTPRequest,
OnMailerRecordPasswordResetSend, OnMailerRecordOTPSend and
OnMailerRecordAuthAlertSend were vestigial after the 16-handler purge
in eda3ae3a — every callable that wired them up is gone. Drop the
interface methods, the event types, the BaseApp fields, the init/getter
plumbing, and the matching mails.SendRecordPasswordReset /
SendRecordOTP / SendRecordAuthAlert senders. The superuser
PasswordReset filter goes with them; IAM owns superuser password flow.

The superuser collection save handler no longer forces PasswordAuth
on or pairs OTP with MFA — _superusers is now a pure email-only
mirror; IAM PKCE is the only way in.
2026-05-15 03:00:46 -07:00
zeekay c73114ddaa rename: pb.js → base.js — remove PocketBase naming remnant 2026-04-17 11:09:44 -07:00
zeekay 4641f13ae7 feat: Base platform — CRDT privacy, React admin, on-chain anchor SDK 2026-03-01 18:00:00 -08:00
zeekay 6759ac456c Rebrand PocketBase imports to Hanzo Base across all Go files
Replace github.com/pocketbase/pocketbase with github.com/hanzoai/base
in 106 Go source files. Keep pocketbase/dbx and pocketbase/tygoja as-is
(upstream dependencies). Add compiled binary to .gitignore. Include
realtime DX design document inspired by Convex patterns.
2026-02-27 09:43:39 -08:00
zeekay 4b4d307330 Merge remote-tracking branch 'upstream/master'
# Conflicts:
#	.github/SECURITY.md
#	plugins/jsvm/internal/types/generated/types.d.ts
#	ui/dist/assets/AuthMethodsDocs-Dpd1KLEi.js
#	ui/dist/assets/AuthRefreshDocs-KmFqCz1h.js
#	ui/dist/assets/AuthWithOAuth2Docs-CyJfh606.js
#	ui/dist/assets/AuthWithOtpDocs-CuAOVtzX.js
#	ui/dist/assets/AuthWithPasswordDocs-CmHb4Jjn.js
#	ui/dist/assets/BatchApiDocs-LUXI6B6N.js
#	ui/dist/assets/DeleteApiDocs-KmnbmZ-6.js
#	ui/dist/assets/EmailChangeDocs-DhDDRSkd.js
#	ui/dist/assets/FieldsQueryParam-C7N80dkz.js
#	ui/dist/assets/ListApiDocs-BZTCC2fq.js
#	ui/dist/assets/PageInstaller-Cdywf0VY.js
#	ui/dist/assets/PageOAuth2RedirectFailure-9trAN4R5.js
#	ui/dist/assets/PageOAuth2RedirectSuccess-BKErE1i9.js
#	ui/dist/assets/PageRecordConfirmEmailChange-B83GxdXn.js
#	ui/dist/assets/PageRecordConfirmPasswordReset-72PfbDaZ.js
#	ui/dist/assets/PageRecordConfirmVerification-Cudgspq-.js
#	ui/dist/assets/PageSuperuserConfirmPasswordReset-BvmdsmYF.js
#	ui/dist/assets/PageSuperuserRequestPasswordReset-B8e2B4ZR.js
#	ui/dist/assets/PasswordResetDocs-Do427Hpy.js
#	ui/dist/assets/RealtimeApiDocs-DydjyGiu.js
#	ui/dist/assets/VerificationDocs-CTnb2Ar3.js
#	ui/dist/assets/ViewApiDocs-D9o91Lhw.js
2026-02-27 08:57:15 -08:00
Gani Georgiev 01d3511665 fixed typo 2026-02-24 15:19:25 +02:00
Gani Georgiev e57c945e4c [#7543] documented the unmarshal jsvm helper 2026-02-24 15:14:25 +02:00
zeekay 4b229fae5b Merge remote-tracking branch 'upstream/master'
# Conflicts:
#	core/record_field_resolver_multi_match.go
#	ui/dist/assets/AuthMethodsDocs-ChShXLwE.js
#	ui/dist/assets/AuthMethodsDocs-Cqvl0T_l.js
#	ui/dist/assets/AuthMethodsDocs-DIqhS7qY.js
#	ui/dist/assets/AuthRefreshDocs-CHakkNnn.js
#	ui/dist/assets/AuthRefreshDocs-DLb1qree.js
#	ui/dist/assets/AuthRefreshDocs-DXgrlMdk.js
#	ui/dist/assets/AuthWithOAuth2Docs-Bl8VRxNv.js
#	ui/dist/assets/AuthWithOAuth2Docs-DVBOel22.js
#	ui/dist/assets/AuthWithOAuth2Docs-I213UiJ7.js
#	ui/dist/assets/AuthWithOtpDocs-B9tL6gIN.js
#	ui/dist/assets/AuthWithOtpDocs-C2PPm9-Z.js
#	ui/dist/assets/AuthWithOtpDocs-qEMoMG3D.js
#	ui/dist/assets/AuthWithPasswordDocs-B8JWDbPL.js
#	ui/dist/assets/AuthWithPasswordDocs-BTHeYJwE.js
#	ui/dist/assets/AuthWithPasswordDocs-D9rqgLpO.js
#	ui/dist/assets/BatchApiDocs-BV4PYYXn.js
#	ui/dist/assets/BatchApiDocs-DXa997am.js
#	ui/dist/assets/BatchApiDocs-Di2Qe2dV.js
#	ui/dist/assets/DeleteApiDocs-C3IINRwz.js
#	ui/dist/assets/DeleteApiDocs-LfmVp4Uf.js
#	ui/dist/assets/DeleteApiDocs-SU4XdGhJ.js
#	ui/dist/assets/EmailChangeDocs-COx1USU5.js
#	ui/dist/assets/EmailChangeDocs-D-qNHT_P.js
#	ui/dist/assets/EmailChangeDocs-DpfXIE_V.js
#	ui/dist/assets/FieldsQueryParam-BYe9ZK-G.js
#	ui/dist/assets/FieldsQueryParam-L8vpHeF4.js
#	ui/dist/assets/FieldsQueryParam-z0dGQ6uY.js
#	ui/dist/assets/ListApiDocs-BCTT-AOz.js
#	ui/dist/assets/ListApiDocs-C0_GwI7k.js
#	ui/dist/assets/ListApiDocs-T9_aO-pW.js
#	ui/dist/assets/PageInstaller-B22bivaN.js
#	ui/dist/assets/PageInstaller-C0BBhyBx.js
#	ui/dist/assets/PageInstaller-IYSwJhZW.js
#	ui/dist/assets/PageOAuth2RedirectFailure-BjbpqlFj.js
#	ui/dist/assets/PageOAuth2RedirectFailure-COyNF79R.js
#	ui/dist/assets/PageOAuth2RedirectFailure-DPmGG9zv.js
#	ui/dist/assets/PageOAuth2RedirectSuccess-6cMXLFAX.js
#	ui/dist/assets/PageOAuth2RedirectSuccess-CdkCarGH.js
#	ui/dist/assets/PageOAuth2RedirectSuccess-DSEIHeQL.js
#	ui/dist/assets/PageRecordConfirmEmailChange-BYW-6ASg.js
#	ui/dist/assets/PageRecordConfirmEmailChange-Bm1CIYvq.js
#	ui/dist/assets/PageRecordConfirmEmailChange-BpaqOT4u.js
#	ui/dist/assets/PageRecordConfirmPasswordReset--wx_u2lI.js
#	ui/dist/assets/PageRecordConfirmPasswordReset-CoeY2Z_C.js
#	ui/dist/assets/PageRecordConfirmPasswordReset-Ptya5bfe.js
#	ui/dist/assets/PageRecordConfirmVerification-6xjF3T0O.js
#	ui/dist/assets/PageRecordConfirmVerification-C1UTIIJh.js
#	ui/dist/assets/PageRecordConfirmVerification-C4LixXvA.js
#	ui/dist/assets/PageSuperuserConfirmPasswordReset-19z2IFg4.js
#	ui/dist/assets/PageSuperuserConfirmPasswordReset-DwNi0ugQ.js
#	ui/dist/assets/PageSuperuserConfirmPasswordReset-SMnDTRNi.js
#	ui/dist/assets/PageSuperuserRequestPasswordReset-BpDW217f.js
#	ui/dist/assets/PageSuperuserRequestPasswordReset-DK63qE6z.js
#	ui/dist/assets/PageSuperuserRequestPasswordReset-bG02qLIM.js
#	ui/dist/assets/PasswordResetDocs-CE67mLC0.js
#	ui/dist/assets/PasswordResetDocs-CHAK0vma.js
#	ui/dist/assets/PasswordResetDocs-Dap-N4rx.js
#	ui/dist/assets/RealtimeApiDocs-BooTSQCb.js
#	ui/dist/assets/RealtimeApiDocs-CoHmYVEx.js
#	ui/dist/assets/RealtimeApiDocs-D7ds3fHt.js
#	ui/dist/assets/VerificationDocs-B42AIoCQ.js
#	ui/dist/assets/VerificationDocs-BS7b11zH.js
#	ui/dist/assets/VerificationDocs-ZhkdFVIl.js
#	ui/dist/assets/ViewApiDocs-BXmRLHZ1.js
#	ui/dist/assets/ViewApiDocs-DM5JJQjh.js
#	ui/dist/assets/ViewApiDocs-DRpxcuJR.js
#	ui/public/fonts/source-sans-pro/source-sans-pro-v18-latin_cyrillic-700.woff2
#	ui/public/fonts/ubuntu-mono/ubuntu-mono-v17-cyrillic_latin-700.woff2
2026-02-22 01:17:16 -08:00
Gani Georgiev 8da3b837b8 updated jsvm types 2026-02-16 22:04:19 +02:00
Gani Georgiev 691620ba51 use temp dir for the $filesystem.local test 2026-02-14 12:08:57 +02:00
Gani Georgiev 13dee9f333 [#7526] added $filesystem.s3 and $filesystem.local JSVM bindings 2026-02-14 11:49:50 +02:00
Gani Georgiev 961f1341a7 renamed arguments to make it more clear that they are dangeous 2026-02-13 16:40:29 +02:00
Gani Georgiev 9a0c9d538d regenerated jsvm types and bumped app version 2026-01-18 18:53:03 +02:00
Gani Georgiev 1b560439fe fixed comment typos 2026-01-17 10:58:12 +02:00
Gani Georgiev 262c30e071 updated JSVM types and bumped app version 2026-01-15 22:24:07 +02:00
Gani Georgiev dc9a08b1f1 bumped go deps and updated jsvm types 2025-12-21 08:11:36 +02:00
Gani Georgiev 2774392b70 fixed error msg typo 2025-12-19 10:19:31 +02:00
Gani Georgiev b28ac9cbde [#7396] added nullable JSVM type helpers 2025-12-17 19:27:17 +02:00
Gani Georgiev 7d07d4a2d2 updated jsvm types 2025-11-22 10:59:15 +02:00
Gani Georgiev e9c1a81e53 added missing mails.sendRecordAuthAlert jsvm binding 2025-11-13 10:45:33 +02:00
Gani Georgiev 049077a351 replaced placeholder in migration and updated jsvm types 2025-11-10 17:59:11 +02:00
Gani Georgiev 1e397cf227 updated jsvm types 2025-11-04 11:23:35 +02:00
Gani Georgiev 6869994017 updated jsvm types 2025-10-31 22:24:47 +02:00
Gani Georgiev 204d540707 updated jsvm types and npm deps 2025-10-23 18:21:34 +03:00
Gani Georgiev d737a9bb27 updated jsvm types 2025-10-23 13:15:03 +03:00
Gani Georgiev 2637eae68a fixed Message.WriteSSE example 2025-09-13 23:46:13 +03:00
Gani Georgiev 28ac6b2030 updated jsvm types 2025-09-06 21:45:20 +03:00
Gani Georgiev d58fe16148 updated jsvm types 2025-09-06 15:18:48 +03:00
Gani Georgiev 4fd31b4a36 added os.Root bindings to the JSVM 2025-09-06 14:51:27 +03:00
Gani Georgiev 90adb5ff45 regenerated jsvm types 2025-08-23 09:20:51 +03:00
Gani Georgiev c57b00b10b enabled __hooks in the jsvm migrations 2025-08-23 08:44:30 +03:00
Gani Georgiev ca38f3b470 [#7125] registered missing jsvm migrations bindings 2025-08-23 07:45:28 +03:00
Gani Georgiev 9520d63b50 regenerated ui/dist and jsvm types 2025-08-22 21:32:03 +03:00
Gani Georgiev 8ff1260f3d [#7098] fixed RateLimitRule.Audience code comment 2025-08-15 19:29:42 +03:00
Gani Georgiev 2bc5bae4cd regenerated JSVM types 2025-08-12 21:46:18 +03:00
Gani Georgiev a33d962cdc regenerated jsvm types 2025-08-02 08:40:44 +03:00
Gani Georgiev 40e44872a5 [#7067] explain more clearly the DynamicModel caveats 2025-08-02 08:13:15 +03:00
Gani Georgiev f722185b20 updated jsvm types 2025-07-19 11:31:26 +03:00