@stacksjs/defaults 0.75.447 → 0.75.451
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.
- package/ai/skills/stacks-auth/SKILL.md +26 -0
- package/ai/skills/stacks-cache/SKILL.md +12 -2
- package/ai/skills/stacks-native/CATALOG.md +20 -18
- package/ai/skills/stacks-pagination/SKILL.md +8 -1
- package/ai/skills/stacks-socials/SKILL.md +14 -0
- package/ai/skills/stacks-storage/SKILL.md +8 -0
- package/ai/skills/stacks-strings/SKILL.md +2 -0
- package/ai/skills/stacks-utils/SKILL.md +24 -5
- package/app/Actions/InstallAction.ts +28 -7
- package/ide/vscode/package.json +1 -1
- package/package.json +4 -4
|
@@ -737,13 +737,39 @@ not authenticate them. OAuth resource endpoints must explicitly use
|
|
|
737
737
|
required scopes. Ordinary refresh also refuses delegated refresh credentials;
|
|
738
738
|
use the OAuth token endpoint and the registered client's protocol authentication.
|
|
739
739
|
|
|
740
|
+
### Userinfo and pairwise subjects
|
|
741
|
+
|
|
742
|
+
The provider has no id_token. A relying party that signs people in with this
|
|
743
|
+
provider reads `oauthUserInfoResponse(request, { scopes, resource, audience,
|
|
744
|
+
workspaceId, isSubjectEligible, pairwiseSecret, claims })`: the same delegated
|
|
745
|
+
token checks as any protected resource, then `{ ...claims, sub }`. `sub` comes
|
|
746
|
+
from `pairwiseOAuthSubject(secret, clientId, subject)`, an HMAC that differs per
|
|
747
|
+
client so two relying parties cannot join records on it; keep its secret apart
|
|
748
|
+
from rotating app keys. `claims({ sub, subject, clientId, scopes })` releases
|
|
749
|
+
only what the granted scopes cover, and null answers 401. The socials
|
|
750
|
+
`StacksIssuerProvider` is the matching client.
|
|
751
|
+
|
|
740
752
|
## Token-only recovery endpoints
|
|
741
753
|
|
|
742
754
|
For high-entropy reset credentials, `mintPasswordResetToken()` returns `{ token, digest }`.
|
|
743
755
|
Store the digest in `password_resets.token`, never the plaintext.
|
|
756
|
+
Prefer `issuePasswordResetToken(email, { throttleMs?, expiresAt?, eligible? })` when
|
|
757
|
+
issuing for an existing account. It locks that account before checking its current
|
|
758
|
+
email, the synchronous application eligibility predicate and the saved throttle.
|
|
759
|
+
It considers all supported legacy email-case variants when throttling, and retires
|
|
760
|
+
them together when replacing the credential. `throttleMs: 0` disables throttling.
|
|
761
|
+
It atomically replaces the digest and returns `{ issued: true, token, userId, email }`
|
|
762
|
+
or `{ issued: false }`. The latter deliberately combines unknown, ineligible and
|
|
763
|
+
throttled accounts; recovery endpoints must keep their public response generic.
|
|
764
|
+
Only send the returned credential after issuance commits.
|
|
765
|
+
Treat its value as opaque. It is bound to the issuing account, so reassigning an
|
|
766
|
+
email address cannot let an old recovery reset the address's new account.
|
|
744
767
|
`consumePasswordResetToken(token, async claim => { ... })` locks the owner and token,
|
|
745
768
|
checks the stored expiry and consumes it in the same transaction as callback writes.
|
|
746
769
|
`claim` is `{ userId, email, hasExplicitExpiry }`; result is `{ consumed: false }` or
|
|
747
770
|
`{ consumed: true, value }`. Failures roll back the credential and account changes.
|
|
748
771
|
Use database work only in the callback, and send notifications after commit.
|
|
772
|
+
The credential is consumed before the callback, so it composes with
|
|
773
|
+
`revokeAccountCredentials(claim.userId)`. That sweep also removes any pending
|
|
774
|
+
password-reset links; changing a password must retire recovery credentials too.
|
|
749
775
|
The existing `passwordResets(email)` flow supports email-addressed bcrypt tokens.
|
|
@@ -27,8 +27,9 @@ const products = await cache.mget<{ name: string }>(['product:42', 'product:43']
|
|
|
27
27
|
shipped) on every driver, memory included, so a value set with no TTL
|
|
28
28
|
expires after an hour. The `memory` export is a separate in-process
|
|
29
29
|
instance with no default expiry.
|
|
30
|
-
- `setForever` stores without expiry; `getTtl` reads
|
|
31
|
-
`ttl(key, seconds)` updates it.
|
|
30
|
+
- `setForever` stores without expiry; `getTtl` reads the absolute expiry in epoch
|
|
31
|
+
milliseconds (zero for forever); `ttl(key, seconds)` updates it.
|
|
32
|
+
Missing or expired values are undefined.
|
|
32
33
|
- `mset([{ key, value, ttl? }])` writes entries. `del(keyOrKeys)` and
|
|
33
34
|
`deleteMany(keys)` return counts; `remove(key)` returns void.
|
|
34
35
|
- `has/missing/take`, `keys(pattern?)`, `getStats`,
|
|
@@ -61,6 +62,15 @@ deploys, pointing `path` at a file the deploy preserves (the app's own SQLite
|
|
|
61
62
|
database works; the table is the driver's alone). `createCache(driver,
|
|
62
63
|
options?)` selects one of memory, redis, singlestore or sqlite.
|
|
63
64
|
|
|
65
|
+
SQLite TTLs, including `stdTTL`, must be finite non-negative seconds with
|
|
66
|
+
representable expiry timestamps. Zero alone means forever; fractions work.
|
|
67
|
+
Invalid TTLs throw RangeError before publication; invalid `mset` entries roll
|
|
68
|
+
back the batch. `getTtl` evicts expired entries instead of reporting stale
|
|
69
|
+
metadata. `mget` preserves special keys such as `__proto__` as own properties.
|
|
70
|
+
SQLite key globs are case-sensitive, with only `*` a wildcard; `?`, brackets,
|
|
71
|
+
percent, underscore and backslash are literal. An empty pattern matches an
|
|
72
|
+
empty key, while an omitted pattern lists all live keys in the prefix.
|
|
73
|
+
|
|
64
74
|
The `cache` export is the driver `config/cache.ts` selects, with its `prefix`
|
|
65
75
|
and `ttl` applied on every driver (memory also takes `maxKeys`, `useClones`
|
|
66
76
|
and `drivers.memory`), resolved on first use and once the app's config has
|
|
@@ -18,12 +18,12 @@ Browser runtime bindings are documented separately in `stacks-auto-imports`.
|
|
|
18
18
|
| `@stacksjs/api` | [`stacks-api`](../stacks-api/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/api/src/index.ts) | 12 |
|
|
19
19
|
| `@stacksjs/arrays` | [`stacks-arrays`](../stacks-arrays/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/arrays/src/index.ts) | 12 |
|
|
20
20
|
| `@stacksjs/audio` | [`stacks-audio`](../stacks-audio/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/audio/src/index.ts) | 3 |
|
|
21
|
-
| `@stacksjs/auth` | [`stacks-auth`](../stacks-auth/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/index.ts) |
|
|
21
|
+
| `@stacksjs/auth` | [`stacks-auth`](../stacks-auth/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/index.ts) | 127 |
|
|
22
22
|
| `@stacksjs/browser` | [`stacks-browser`](../stacks-browser/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/browser/src/index.ts) | 8 |
|
|
23
23
|
| `@stacksjs/browser-extension` | [`stacks-browser-extension`](../stacks-browser-extension/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/browser-extension/src/index.ts) | 9 |
|
|
24
|
-
| `@stacksjs/buddy` | [`stacks-buddy`](../stacks-buddy/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/buddy/src/index.ts) |
|
|
24
|
+
| `@stacksjs/buddy` | [`stacks-buddy`](../stacks-buddy/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/buddy/src/index.ts) | 180 |
|
|
25
25
|
| `@stacksjs/build` | [`stacks-build`](../stacks-build/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/build/src/index.ts) | 6 |
|
|
26
|
-
| `@stacksjs/cache` | [`stacks-cache`](../stacks-cache/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cache/src/index.ts) |
|
|
26
|
+
| `@stacksjs/cache` | [`stacks-cache`](../stacks-cache/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cache/src/index.ts) | 24 |
|
|
27
27
|
| `@stacksjs/calendar-api` | [`stacks-calendar`](../stacks-calendar/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/calendar-api/src/index.ts) | 5 |
|
|
28
28
|
| `@stacksjs/charts` | [`stacks-charts`](../stacks-charts/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/charts/src/index.ts) | 3 |
|
|
29
29
|
| `@stacksjs/chat` | [`stacks-chat`](../stacks-chat/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/chat/src/index.ts) | 6 |
|
|
@@ -65,8 +65,8 @@ Browser runtime bindings are documented separately in `stacks-auto-imports`.
|
|
|
65
65
|
| `@stacksjs/newsletter` | [`stacks-newsletter`](../stacks-newsletter/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/newsletter/src/index.ts) | 7 |
|
|
66
66
|
| `@stacksjs/notifications` | [`stacks-notifications`](../stacks-notifications/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/notifications/src/index.ts) | 18 |
|
|
67
67
|
| `@stacksjs/objects` | [`stacks-objects`](../stacks-objects/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/objects/src/index.ts) | 8 |
|
|
68
|
-
| `@stacksjs/orm` | [`stacks-orm`](../stacks-orm/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/orm/src/index.ts) |
|
|
69
|
-
| `@stacksjs/pagination` | [`stacks-pagination`](../stacks-pagination/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/pagination/src/index.ts) |
|
|
68
|
+
| `@stacksjs/orm` | [`stacks-orm`](../stacks-orm/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/orm/src/index.ts) | 77 |
|
|
69
|
+
| `@stacksjs/pagination` | [`stacks-pagination`](../stacks-pagination/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/pagination/src/index.ts) | 1 |
|
|
70
70
|
| `@stacksjs/path` | [`stacks-path`](../stacks-path/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/path/src/index.ts) | 13 |
|
|
71
71
|
| `@stacksjs/payments` | [`stacks-payments`](../stacks-payments/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/payments/src/index.ts) | 39 |
|
|
72
72
|
| `@stacksjs/push` | [`stacks-push`](../stacks-push/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/push/src/index.ts) | 8 |
|
|
@@ -85,15 +85,15 @@ Browser runtime bindings are documented separately in `stacks-auto-imports`.
|
|
|
85
85
|
| `@stacksjs/skills` | [`stacks-skills`](../stacks-skills/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/skills/src/index.ts) | 1 |
|
|
86
86
|
| `@stacksjs/slug` | [`stacks-slug`](../stacks-slug/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/slug/src/index.ts) | 5 |
|
|
87
87
|
| `@stacksjs/sms` | [`stacks-sms`](../stacks-sms/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/sms/src/index.ts) | 6 |
|
|
88
|
-
| `@stacksjs/socials` | [`stacks-socials`](../stacks-socials/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/socials/src/index.ts) |
|
|
89
|
-
| `@stacksjs/storage` | [`stacks-storage`](../stacks-storage/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/storage/src/index.ts) |
|
|
90
|
-
| `@stacksjs/strings` | [`stacks-strings`](../stacks-strings/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/strings/src/index.ts) |
|
|
88
|
+
| `@stacksjs/socials` | [`stacks-socials`](../stacks-socials/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/socials/src/index.ts) | 18 |
|
|
89
|
+
| `@stacksjs/storage` | [`stacks-storage`](../stacks-storage/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/storage/src/index.ts) | 48 |
|
|
90
|
+
| `@stacksjs/strings` | [`stacks-strings`](../stacks-strings/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/strings/src/index.ts) | 11 |
|
|
91
91
|
| `@stacksjs/testing` | [`stacks-testing`](../stacks-testing/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/testing/src/index.ts) | 24 |
|
|
92
92
|
| `@stacksjs/tinker` | [`stacks-repl`](../stacks-repl/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/tinker/src/index.ts) | 1 |
|
|
93
93
|
| `@stacksjs/tunnel` | [`stacks-tunnel`](../stacks-tunnel/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/tunnel/src/index.ts) | 1 |
|
|
94
94
|
| `@stacksjs/types` | [`stacks-types`](../stacks-types/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/types/src/index.ts) | 2 |
|
|
95
95
|
| `@stacksjs/ui` | [`stacks-ui`](../stacks-ui/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/ui/src/index.ts) | 6 |
|
|
96
|
-
| `@stacksjs/utils` | [`stacks-utils`](../stacks-utils/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/utils/src/index.ts) |
|
|
96
|
+
| `@stacksjs/utils` | [`stacks-utils`](../stacks-utils/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/utils/src/index.ts) | 22 |
|
|
97
97
|
| `@stacksjs/validation` | [`stacks-validation`](../stacks-validation/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/validation/src/index.ts) | 25 |
|
|
98
98
|
| `@stacksjs/video` | [`stacks-video`](../stacks-video/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/video/src/index.ts) | 3 |
|
|
99
99
|
| `@stacksjs/whois` | [`stacks-whois`](../stacks-whois/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/whois/src/index.ts) | 5 |
|
|
@@ -187,9 +187,9 @@ Guidance: [`stacks-auth`](../stacks-auth/SKILL.md). Source: [storage/framework/c
|
|
|
187
187
|
|
|
188
188
|
Declared runtime exports: `DEFAULT_ROLE_PACKS`, `createBqbRbacStore`, `generateTOTP`, `generateTOTPSecret`, `requestImpersonation`, `seedDefaultRoles`, `totpKeyUri`, `verifyTOTP`.
|
|
189
189
|
|
|
190
|
-
Local source modules: [src/authentication.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/authentication.ts), [src/authenticator.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/authenticator.ts), [src/authorizable.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/authorizable.ts), [src/browser-session.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/browser-session.ts), [src/client.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/client.ts), [src/cookie-auth.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/cookie-auth.ts), [src/credential-user.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/credential-user.ts), [src/email-verification.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/email-verification.ts), [src/gate.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/gate.ts), [src/impersonation-auth.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/impersonation-auth.ts), [src/impersonation-store.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/impersonation-store.ts), [src/impersonation.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/impersonation.ts), [src/magic-link.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/magic-link.ts), [src/middleware.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/middleware.ts), [src/oauth-authorization-codes.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-authorization-codes.ts), [src/oauth-authorization-endpoint.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-authorization-endpoint.ts), [src/oauth-authorization-requests.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-authorization-requests.ts), [src/oauth-authorization-response.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-authorization-response.ts), [src/oauth-authorization.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-authorization.ts), [src/oauth-browser-session.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-browser-session.ts), [src/oauth-client-registration.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-client-registration.ts), [src/oauth-consent.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-consent.ts), [src/oauth-delegated-access.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-delegated-access.ts), [src/oauth-dynamic-registration.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-dynamic-registration.ts), [src/oauth-grants.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-grants.ts), [src/oauth-introspection.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-introspection.ts), [src/oauth-metadata.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-metadata.ts), [src/oauth-pkce.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-pkce.ts), [src/oauth-protected-resource.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-protected-resource.ts), [src/oauth-provider.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-provider.ts), [src/oauth-pruning.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-pruning.ts), [src/oauth-revocation.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-revocation.ts), [src/oauth-server.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-server.ts), [src/oauth-token-endpoint.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-token-endpoint.ts), [src/oauth-token-exchange.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-token-exchange.ts), [src/oauth-token-request.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-token-request.ts), [src/oauth-token-response.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-token-response.ts), [src/page-gate.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/page-gate.ts), [src/passkey.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/passkey.ts), [src/passkeys.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/passkeys.ts), [src/password/reset-token.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/password/reset-token.ts), [src/password/reset.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/password/reset.ts), [src/permissions.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/permissions.ts), [src/policy.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/policy.ts), [src/rate-limiter.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/rate-limiter.ts), [src/rbac-seed.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/rbac-seed.ts), [src/rbac-store-bqb.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/rbac-store-bqb.ts), [src/rbac.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/rbac.ts), [src/referrals.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/referrals.ts), [src/register.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/register.ts), [src/request-token.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/request-token.ts), [src/session-auth.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/session-auth.ts), [src/session-handoff.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/session-handoff.ts), [src/socials.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/socials.ts), [src/team.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/team.ts), [src/tokens.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/tokens.ts), [src/two-factor.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/two-factor.ts), [src/user.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/user.ts).
|
|
190
|
+
Local source modules: [src/authentication.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/authentication.ts), [src/authenticator.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/authenticator.ts), [src/authorizable.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/authorizable.ts), [src/browser-session.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/browser-session.ts), [src/client.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/client.ts), [src/cookie-auth.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/cookie-auth.ts), [src/credential-user.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/credential-user.ts), [src/email-verification.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/email-verification.ts), [src/gate.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/gate.ts), [src/impersonation-auth.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/impersonation-auth.ts), [src/impersonation-store.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/impersonation-store.ts), [src/impersonation.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/impersonation.ts), [src/magic-link.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/magic-link.ts), [src/middleware.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/middleware.ts), [src/oauth-authorization-codes.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-authorization-codes.ts), [src/oauth-authorization-endpoint.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-authorization-endpoint.ts), [src/oauth-authorization-requests.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-authorization-requests.ts), [src/oauth-authorization-response.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-authorization-response.ts), [src/oauth-authorization.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-authorization.ts), [src/oauth-browser-session.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-browser-session.ts), [src/oauth-client-registration.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-client-registration.ts), [src/oauth-consent.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-consent.ts), [src/oauth-delegated-access.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-delegated-access.ts), [src/oauth-dynamic-registration.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-dynamic-registration.ts), [src/oauth-grants.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-grants.ts), [src/oauth-introspection.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-introspection.ts), [src/oauth-metadata.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-metadata.ts), [src/oauth-pkce.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-pkce.ts), [src/oauth-protected-resource.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-protected-resource.ts), [src/oauth-provider.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-provider.ts), [src/oauth-pruning.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-pruning.ts), [src/oauth-revocation.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-revocation.ts), [src/oauth-server.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-server.ts), [src/oauth-token-endpoint.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-token-endpoint.ts), [src/oauth-token-exchange.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-token-exchange.ts), [src/oauth-token-request.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-token-request.ts), [src/oauth-token-response.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-token-response.ts), [src/oauth-userinfo.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/oauth-userinfo.ts), [src/page-gate.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/page-gate.ts), [src/passkey.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/passkey.ts), [src/passkeys.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/passkeys.ts), [src/password/reset-token.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/password/reset-token.ts), [src/password/reset.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/password/reset.ts), [src/permissions.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/permissions.ts), [src/policy.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/policy.ts), [src/rate-limiter.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/rate-limiter.ts), [src/rbac-seed.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/rbac-seed.ts), [src/rbac-store-bqb.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/rbac-store-bqb.ts), [src/rbac.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/rbac.ts), [src/referrals.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/referrals.ts), [src/register.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/register.ts), [src/request-token.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/request-token.ts), [src/session-auth.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/session-auth.ts), [src/session-handoff.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/session-handoff.ts), [src/socials.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/socials.ts), [src/team.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/team.ts), [src/tokens.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/tokens.ts), [src/two-factor.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/two-factor.ts), [src/user.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/src/user.ts).
|
|
191
191
|
|
|
192
|
-
Evidence directory: [
|
|
192
|
+
Evidence directory: [127 retained tests](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/auth/tests). These files are evidence pointers, not a claim that all tests were run for this catalog.
|
|
193
193
|
|
|
194
194
|
### @stacksjs/browser
|
|
195
195
|
|
|
@@ -219,7 +219,7 @@ Read the entrypoint and package export map for re-exported or type-only surfaces
|
|
|
219
219
|
|
|
220
220
|
Local source modules: [src/commands/index.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/buddy/src/commands/index.ts).
|
|
221
221
|
|
|
222
|
-
Evidence directory: [
|
|
222
|
+
Evidence directory: [180 retained tests](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/buddy/tests). These files are evidence pointers, not a claim that all tests were run for this catalog.
|
|
223
223
|
|
|
224
224
|
### @stacksjs/build
|
|
225
225
|
|
|
@@ -239,7 +239,7 @@ Read the entrypoint and package export map for re-exported or type-only surfaces
|
|
|
239
239
|
|
|
240
240
|
Local source modules: [src/drivers/index.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cache/src/drivers/index.ts), [src/key.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cache/src/key.ts).
|
|
241
241
|
|
|
242
|
-
Evidence directory: [
|
|
242
|
+
Evidence directory: [24 retained tests](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cache/tests). These files are evidence pointers, not a claim that all tests were run for this catalog.
|
|
243
243
|
|
|
244
244
|
### @stacksjs/calendar-api
|
|
245
245
|
|
|
@@ -641,7 +641,7 @@ Declared runtime exports: `Activity`, `AnalyticsEvent`, `Auction`, `AuctionItem`
|
|
|
641
641
|
|
|
642
642
|
Local source modules: [src/auto-crud.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/orm/src/auto-crud.ts), [src/batch-loader.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/orm/src/batch-loader.ts), [src/db.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/orm/src/db.ts), [src/define-model.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/orm/src/define-model.ts), [src/extend-model.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/orm/src/extend-model.ts), [src/gdpr/index.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/orm/src/gdpr/index.ts), [src/generate-database-schema.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/orm/src/generate-database-schema.ts), [src/locked-row.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/orm/src/locked-row.ts), [src/messaging.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/orm/src/messaging.ts), [src/model-types.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/orm/src/model-types.ts), [src/ownership.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/orm/src/ownership.ts), [src/paginator-request.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/orm/src/paginator-request.ts), [src/row-token.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/orm/src/row-token.ts), [src/subquery.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/orm/src/subquery.ts), [src/traits/audit.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/orm/src/traits/audit.ts), [src/traits/billable.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/orm/src/traits/billable.ts), [src/traits/categorizable.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/orm/src/traits/categorizable.ts), [src/traits/commentable.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/orm/src/traits/commentable.ts), [src/traits/likeable.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/orm/src/traits/likeable.ts), [src/traits/taggable.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/orm/src/traits/taggable.ts), [src/transaction.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/orm/src/transaction.ts), [src/types.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/orm/src/types.ts), [src/utils/encrypted.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/orm/src/utils/encrypted.ts), [src/utils/prunable.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/orm/src/utils/prunable.ts).
|
|
643
643
|
|
|
644
|
-
Evidence directory: [
|
|
644
|
+
Evidence directory: [77 retained tests](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/orm/tests). These files are evidence pointers, not a claim that all tests were run for this catalog.
|
|
645
645
|
|
|
646
646
|
### @stacksjs/pagination
|
|
647
647
|
|
|
@@ -649,6 +649,8 @@ Guidance: [`stacks-pagination`](../stacks-pagination/SKILL.md). Source: [storage
|
|
|
649
649
|
|
|
650
650
|
Declared runtime exports: `isCursorPaginator`, `isPaginator`, `isSimplePaginator`, `toCursorPaginator`, `toPaginator`, `toSimplePaginator`.
|
|
651
651
|
|
|
652
|
+
Evidence directory: [1 retained tests](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/pagination/tests). These files are evidence pointers, not a claim that all tests were run for this catalog.
|
|
653
|
+
|
|
652
654
|
### @stacksjs/path
|
|
653
655
|
|
|
654
656
|
Guidance: [`stacks-path`](../stacks-path/SKILL.md). Source: [storage/framework/core/path/src/index.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/path/src/index.ts).
|
|
@@ -831,7 +833,7 @@ Read the entrypoint and package export map for re-exported or type-only surfaces
|
|
|
831
833
|
|
|
832
834
|
Local source modules: [src/abstract.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/socials/src/abstract.ts), [src/authorize.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/socials/src/authorize.ts), [src/drivers/index.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/socials/src/drivers/index.ts), [src/exceptions.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/socials/src/exceptions.ts), [src/flows.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/socials/src/flows.ts), [src/handoff.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/socials/src/handoff.ts), [src/identities.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/socials/src/identities.ts), [src/meta-graph.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/socials/src/meta-graph.ts), [src/publish.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/socials/src/publish.ts), [src/registry.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/socials/src/registry.ts), [src/token.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/socials/src/token.ts), [src/types.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/socials/src/types.ts).
|
|
833
835
|
|
|
834
|
-
Evidence directory: [
|
|
836
|
+
Evidence directory: [18 retained tests](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/socials/tests). These files are evidence pointers, not a claim that all tests were run for this catalog.
|
|
835
837
|
|
|
836
838
|
### @stacksjs/storage
|
|
837
839
|
|
|
@@ -841,7 +843,7 @@ Declared runtime exports: `PathSanitizeError`, `Storage`, `StorageManager`, `Upl
|
|
|
841
843
|
|
|
842
844
|
Local source modules: [src/adapters/index.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/storage/src/adapters/index.ts), [src/bounded-text-file.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/storage/src/bounded-text-file.ts), [src/completed-artifact-directory.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/storage/src/completed-artifact-directory.ts), [src/copy.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/storage/src/copy.ts), [src/delete.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/storage/src/delete.ts), [src/drivers/index.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/storage/src/drivers/index.ts), [src/facade.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/storage/src/facade.ts), [src/file-info.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/storage/src/file-info.ts), [src/files.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/storage/src/files.ts), [src/folders.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/storage/src/folders.ts), [src/fs.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/storage/src/fs.ts), [src/glob.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/storage/src/glob.ts), [src/hash.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/storage/src/hash.ts), [src/helpers.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/storage/src/helpers.ts), [src/mime-verify.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/storage/src/mime-verify.ts), [src/path-sanitize.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/storage/src/path-sanitize.ts), [src/provision.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/storage/src/provision.ts), [src/s3-presigned-post.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/storage/src/s3-presigned-post.ts), [src/signed-url.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/storage/src/signed-url.ts), [src/static-serve.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/storage/src/static-serve.ts), [src/storage.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/storage/src/storage.ts), [src/temporary-workspaces.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/storage/src/temporary-workspaces.ts), [src/types.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/storage/src/types.ts), [src/types/filesystem.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/storage/src/types/filesystem.ts), [src/uploaded-file.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/storage/src/uploaded-file.ts), [src/zip.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/storage/src/zip.ts).
|
|
843
845
|
|
|
844
|
-
Evidence directory: [
|
|
846
|
+
Evidence directory: [48 retained tests](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/storage/tests). These files are evidence pointers, not a claim that all tests were run for this catalog.
|
|
845
847
|
|
|
846
848
|
### @stacksjs/strings
|
|
847
849
|
|
|
@@ -851,7 +853,7 @@ Declared runtime exports: `string`.
|
|
|
851
853
|
|
|
852
854
|
Local source modules: [src/string.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/strings/src/string.ts).
|
|
853
855
|
|
|
854
|
-
Evidence directory: [
|
|
856
|
+
Evidence directory: [11 retained tests](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/strings/tests). These files are evidence pointers, not a claim that all tests were run for this catalog.
|
|
855
857
|
|
|
856
858
|
### @stacksjs/testing
|
|
857
859
|
|
|
@@ -909,7 +911,7 @@ Declared runtime exports: `browserUtils`, `clamp`, `notNullish`, `retry`, `useOn
|
|
|
909
911
|
|
|
910
912
|
Local source modules: [src/bytes.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/utils/src/bytes.ts), [src/clean.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/utils/src/clean.ts), [src/colors.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/utils/src/colors.ts), [src/config.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/utils/src/config.ts), [src/debounce.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/utils/src/debounce.ts), [src/detect.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/utils/src/detect.ts), [src/equal.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/utils/src/equal.ts), [src/errors.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/utils/src/errors.ts), [src/export-size.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/utils/src/export-size.ts), [src/find.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/utils/src/find.ts), [src/git.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/utils/src/git.ts), [src/hash.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/utils/src/hash.ts), [src/helpers.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/utils/src/helpers.ts), [src/macroable.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/utils/src/macroable.ts), [src/markdown.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/utils/src/markdown.ts), [src/merge.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/utils/src/merge.ts), [src/observer.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/utils/src/observer.ts), [src/pipe.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/utils/src/pipe.ts), [src/pipeline.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/utils/src/pipeline.ts), [src/safe-json.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/utils/src/safe-json.ts), [src/size.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/utils/src/size.ts), [src/versions.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/utils/src/versions.ts).
|
|
911
913
|
|
|
912
|
-
Evidence directory: [
|
|
914
|
+
Evidence directory: [22 retained tests](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/utils/tests). These files are evidence pointers, not a claim that all tests were run for this catalog.
|
|
913
915
|
|
|
914
916
|
### @stacksjs/validation
|
|
915
917
|
|
|
@@ -25,7 +25,14 @@ native parser. Do not treat a cursor as a trusted SQL fragment.
|
|
|
25
25
|
|
|
26
26
|
toPaginator, toSimplePaginator and toCursorPaginator adapt source results.
|
|
27
27
|
isPaginator/isSimplePaginator/isCursorPaginator identify the canonical shapes;
|
|
28
|
-
they
|
|
28
|
+
they require every mandatory metadata field, safe positive page integers,
|
|
29
|
+
non-negative integer totals and correctly typed optional links. They do not
|
|
30
|
+
authenticate a source or validate rows. Empty out-of-range pages remain valid.
|
|
31
|
+
|
|
32
|
+
BigInt cursors serialize as exact decimal strings. Composite cursors encode
|
|
33
|
+
BigInts as decimal string entries inside a JSON array. Keep those tokens intact
|
|
34
|
+
through query parameters; the ORM parser restores tuples and SQL bindings
|
|
35
|
+
accept decimal strings without a lossy Number conversion.
|
|
29
36
|
|
|
30
37
|
## HTTP and UI
|
|
31
38
|
|
|
@@ -34,6 +34,20 @@ instance redirect. X always uses PKCE; its verifier lives in the base class
|
|
|
34
34
|
(getPkceVerifier/withCodeVerifier), so a callback on a fresh instance can
|
|
35
35
|
restore it. Registry descriptors say `pkce` (X) and `nonce` (Apple).
|
|
36
36
|
|
|
37
|
+
## Signing in with another Stacks application
|
|
38
|
+
|
|
39
|
+
`StacksIssuerProvider({ issuer, clientId, clientSecret, redirectUrl, scopes,
|
|
40
|
+
resource, userInfoUrl })` signs people in with another Stacks app that runs
|
|
41
|
+
`oauthProvider`: Authorization Code with S256 PKCE (always on, so carry
|
|
42
|
+
`getPkceVerifier()` in the flow and restore it with `withCodeVerifier()`) and
|
|
43
|
+
client_secret_basic. Send `resource` whenever the issuer binds scopes to one.
|
|
44
|
+
`getTokens(code)` keeps the refresh token that `getAccessToken` drops;
|
|
45
|
+
`refreshTokens(rt)` rotates it, `revokeToken(rt)` unlinks (RFC 7009) and
|
|
46
|
+
`getClaims(token)` / `getUserByToken(token)` read the issuer's
|
|
47
|
+
`oauthUserInfoResponse` endpoint, keyed by its pairwise `sub`. Only a boolean
|
|
48
|
+
`email_verified` counts as verified. It is constructed directly, not through the
|
|
49
|
+
registry.
|
|
50
|
+
|
|
37
51
|
## Flow state (login CSRF)
|
|
38
52
|
|
|
39
53
|
A callback that exchanges any `code` signs the victim into the attacker's
|
|
@@ -291,6 +291,14 @@ const local = createLocalStorage({ root: './storage' })
|
|
|
291
291
|
- MIME type detection is extension-based (supports txt, html, css, js, json, xml, pdf, zip, jpg, jpeg, png, gif, svg, mp4, mp3, wav)
|
|
292
292
|
- `list()` returns an async iterable; supports `deep: true` for recursive listing
|
|
293
293
|
|
|
294
|
+
### Memory adapter stream lifecycle
|
|
295
|
+
|
|
296
|
+
A move to the same normalized path is a no-op for an existing file, preserving
|
|
297
|
+
bytes, visibility and modification time. A missing source still throws.
|
|
298
|
+
`putStream` aborts pending reads promptly, cancels the reader and never publishes
|
|
299
|
+
partial contents. Stream writes release reader locks on success, failure and
|
|
300
|
+
abort. Existing destination contents survive a failed or aborted upload.
|
|
301
|
+
|
|
294
302
|
### S3 Adapter (`S3StorageAdapter`)
|
|
295
303
|
|
|
296
304
|
```typescript
|
|
@@ -429,6 +429,8 @@ interface PluralizeOptions { count?, inclusive? }
|
|
|
429
429
|
- `helpers.ts` exports `toString()` (Object.prototype.toString, not ordinary
|
|
430
430
|
string coercion) and `mask(value, character, index, length?)`. Mask supports
|
|
431
431
|
a negative starting index and uses the first character of its mask string.
|
|
432
|
+
Index and explicit length must be safe integers, otherwise it throws RangeError.
|
|
433
|
+
Negative integer lengths mask nothing. Coordinates count Unicode code points.
|
|
432
434
|
|
|
433
435
|
## CSV exports
|
|
434
436
|
|
|
@@ -45,7 +45,7 @@ export { clamp, notNullish, retry, useOnline } from '@stacksjs/browser'
|
|
|
45
45
|
|
|
46
46
|
## Deep Merge (`merge.ts`)
|
|
47
47
|
|
|
48
|
-
Replacement for `defu`.
|
|
48
|
+
Replacement for `defu`. Only own enumerable string keys are read. Arrays concatenate; plain records recursively merge. Non-plain nested values (including URL, ArrayBuffer, Blob and class instances) retain identity. A plain record replaces a non-plain target rather than copying its indices or prototype fields. A `"__proto__"` key is skipped, as defu skips it, so a parsed request body cannot set the result's prototype.
|
|
49
49
|
|
|
50
50
|
```typescript
|
|
51
51
|
import { merge, mergeDefaults, createMerger, defu } from '@stacksjs/utils'
|
|
@@ -79,6 +79,13 @@ throttledFn.cancel() // cancel pending invocation
|
|
|
79
79
|
await delay(1000) // sleep for 1 second (returns Promise<void>)
|
|
80
80
|
```
|
|
81
81
|
|
|
82
|
+
Calls and debounce `flush()` return `ReturnType<T> | undefined`: before any
|
|
83
|
+
invocation there is no result; suppressed calls return the last result,
|
|
84
|
+
including a Promise for async callbacks. Both preserve the callback receiver.
|
|
85
|
+
Pending arguments are consumed before invoking, so reentrant calls survive.
|
|
86
|
+
`cancel()` clears pending work; throttle cancellation also resets its interval.
|
|
87
|
+
Manual debounce `flush()` invokes pending work even with `trailing: false`.
|
|
88
|
+
|
|
82
89
|
Note: unlike some implementations, this debounce does NOT support `maxWait`. The throttle uses `Date.now()` for timing, not setTimeout stacking.
|
|
83
90
|
|
|
84
91
|
## Color Output (`colors.ts`)
|
|
@@ -156,6 +163,10 @@ readableSize(1024) // alias for formatBytes
|
|
|
156
163
|
|
|
157
164
|
Units: B, KB, MB, GB, TB, PB, EB, ZB, YB (decimal) or B, KiB, MiB, GiB, TiB, PiB, EiB, ZiB, YiB (binary).
|
|
158
165
|
|
|
166
|
+
`parseBytes` accepts a complete decimal with an optional known decimal or
|
|
167
|
+
binary unit (case-insensitive). It rejects partial numbers, unknown units,
|
|
168
|
+
trailing text and non-finite output. Fractions and negative values are allowed.
|
|
169
|
+
|
|
159
170
|
## Export Size Calculation (`size.ts`)
|
|
160
171
|
|
|
161
172
|
```typescript
|
|
@@ -433,19 +444,27 @@ Glob belongs to `@stacksjs/storage`; it is not re-exported from the utils root.
|
|
|
433
444
|
|
|
434
445
|
## Safe serialization and typed composition
|
|
435
446
|
|
|
436
|
-
`safeJsonParse(text, fallback?)
|
|
437
|
-
|
|
438
|
-
|
|
447
|
+
`safeJsonParse(text, fallback?)` and `safeJsonParseResult` make parse failure
|
|
448
|
+
behavior explicit. A parse generic result type is a caller annotation, not
|
|
449
|
+
validation of untrusted JSON.
|
|
439
450
|
Validate decoded objects at the request boundary before treating them as a
|
|
440
451
|
model, config, or provider payload.
|
|
441
452
|
|
|
453
|
+
`safeJsonStringify` returns `string | undefined`, matching JSON for unsupported
|
|
454
|
+
roots (undefined, functions and symbols). Shared non-cyclic objects serialize
|
|
455
|
+
at every occurrence; only ancestor cycles become `[Circular]`. BigInts become
|
|
456
|
+
decimal strings. User getters and `toJSON` methods can still throw.
|
|
457
|
+
|
|
442
458
|
`pipe(value, ...steps)` applies ordinary typed unary functions left to right.
|
|
443
459
|
`piped(...steps)` returns the composed function and `tap(effect)` returns a
|
|
444
460
|
pass-through step. These differ from middleware-style `Pipeline`, whose pipes
|
|
445
461
|
receive a next function. Choose the simple function seam for data transforms.
|
|
446
462
|
|
|
447
463
|
`isDeepEqual` now compares Date, RegExp, Map, Set, typed arrays and ArrayBuffers
|
|
448
|
-
by value and tracks circular pairs.
|
|
464
|
+
by value and tracks active circular pairs. Cycle topology/sharing need not
|
|
465
|
+
match when fields are structurally equal. Objects require matching own
|
|
466
|
+
enumerable string keys. Arrays distinguish a hole from an own undefined slot;
|
|
467
|
+
two corresponding holes compare equal. Host objects and Errors remain identity
|
|
449
468
|
comparisons. Read retained equal tests for a non-plain object rather than
|
|
450
469
|
assuming every object with similar printable fields is equal.
|
|
451
470
|
|
|
@@ -65,17 +65,38 @@ else
|
|
|
65
65
|
# bun ./storage/framework/core/buddy/src/cli.ts setup
|
|
66
66
|
fi
|
|
67
67
|
|
|
68
|
-
#
|
|
69
|
-
|
|
68
|
+
# Each run owns a private directory for its named pipe, so two runs never read
|
|
69
|
+
# or delete each other's stream, and nothing outlives this one. The directory is
|
|
70
|
+
# removed on success, on failure and when the run is interrupted.
|
|
71
|
+
PIPE_DIR="$(mktemp -d "\${TMPDIR:-/tmp}/stacks-install.XXXXXX")" || exit 1
|
|
72
|
+
PIPE="$PIPE_DIR/setup.pipe"
|
|
73
|
+
SETUP_PID=""
|
|
74
|
+
cleanup() {
|
|
75
|
+
if [ -n "$SETUP_PID" ]; then kill -TERM -- "-$SETUP_PID" 2>/dev/null; fi
|
|
76
|
+
rm -rf "$PIPE_DIR"
|
|
77
|
+
}
|
|
78
|
+
trap cleanup EXIT
|
|
79
|
+
trap 'exit 130' INT
|
|
80
|
+
trap 'exit 143' TERM HUP
|
|
70
81
|
|
|
71
|
-
|
|
72
|
-
|
|
82
|
+
mkfifo "$PIPE" || exit 1
|
|
83
|
+
|
|
84
|
+
# Run the command, send output to both the console and the pipe. It gets its own
|
|
85
|
+
# process group (job control) so an interrupted run can stop all of it, and
|
|
86
|
+
# pipefail keeps the setup's own exit status rather than tee's.
|
|
87
|
+
set -m
|
|
88
|
+
( set -o pipefail; bun "$CLI_PATH" setup | tee "$PIPE" ) &
|
|
89
|
+
SETUP_PID=$!
|
|
90
|
+
set +m
|
|
73
91
|
|
|
74
92
|
# Read from the pipe, add timestamps, and append to the file
|
|
75
|
-
while IFS= read -r line; do echo "$(date '+[%Y-%m-%d %H:%M:%S]') $line"; done <
|
|
93
|
+
while IFS= read -r line; do echo "$(date '+[%Y-%m-%d %H:%M:%S]') $line"; done < "$PIPE" >> "$LOG_PATH"
|
|
76
94
|
|
|
77
|
-
#
|
|
78
|
-
|
|
95
|
+
# Report the setup's exit status, not the cleanup's
|
|
96
|
+
wait "$SETUP_PID"
|
|
97
|
+
STATUS=$?
|
|
98
|
+
SETUP_PID=""
|
|
99
|
+
exit "$STATUS"
|
|
79
100
|
`
|
|
80
101
|
|
|
81
102
|
return setupScriptContents
|
package/ide/vscode/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"publisher": "Stacks",
|
|
3
3
|
"name": "vscode-stacks",
|
|
4
4
|
"displayName": "Stacks",
|
|
5
|
-
"version": "0.75.
|
|
5
|
+
"version": "0.75.451",
|
|
6
6
|
"description": "Stacks, built into VS Code: stx templates, pickier linting and formatting, encrypted env files, the dev server preview and every buddy command. No other extensions required.",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"funding": "https://github.com/sponsors/chrisbbreuer",
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@stacksjs/defaults",
|
|
3
3
|
"type": "module",
|
|
4
4
|
"sideEffects": false,
|
|
5
|
-
"version": "0.75.
|
|
5
|
+
"version": "0.75.451",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
8
8
|
"url": "git+https://github.com/stacksjs/stacks.git",
|
|
@@ -45,9 +45,9 @@
|
|
|
45
45
|
"dependencies": {
|
|
46
46
|
"@iconify-json/f7": "^1.2.2",
|
|
47
47
|
"@iconify-json/hugeicons": "^1.2.35",
|
|
48
|
-
"@stacksjs/mobile": "0.75.
|
|
49
|
-
"@stacksjs/sanitizer": "0.2.
|
|
50
|
-
"@stacksjs/stx": "0.2.
|
|
48
|
+
"@stacksjs/mobile": "0.75.451",
|
|
49
|
+
"@stacksjs/sanitizer": "0.2.794",
|
|
50
|
+
"@stacksjs/stx": "0.2.794",
|
|
51
51
|
"@xterm/addon-fit": "^0.11.0",
|
|
52
52
|
"@xterm/xterm": "^6.0.0",
|
|
53
53
|
"ts-qr-codes": "^0.1.8"
|