@jskit-ai/agent-docs 0.1.271 → 0.1.272
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/guide/agent/app-setup/authentication.md +149 -0
- package/guide/agent/framework/typed-features.md +5 -0
- package/package.json +1 -1
- package/patterns/feature-package/example/booking-engine/package.json +1 -1
- package/patterns/minimal-foundation/example/package.json +3 -3
- package/patterns/shell-foundation/example/package.json +4 -4
- package/patterns/shell-foundation/example/packages/main/package.json +1 -1
- package/reference/autogen/PATTERN_INDEX.md +37 -37
- package/reference/autogen/packages/auth-core.md +9 -2
- package/reference/autogen/packages/auth-provider-local-core.md +85 -21
- package/reference/autogen/packages/auth-provider-local-db-core.md +7 -0
- package/reference/autogen/packages/auth-web.md +13 -2
- package/reference/autogen/packages/kernel.md +15 -0
- package/skills/jskit/references/pattern-index.md +37 -37
- package/skills/jskit/references/patterns/app/minimal-foundation/example/package.json +3 -3
- package/skills/jskit/references/patterns/app/shell-foundation/example/package.json +4 -4
- package/skills/jskit/references/patterns/app/shell-foundation/example/packages/main/package.json +1 -1
- package/skills/jskit/references/patterns/auth/accounts-hub/example/package.json +2 -2
- package/skills/jskit/references/patterns/auth/oidc-sign-in/example/package.json +2 -2
- package/skills/jskit/references/patterns/auth/supabase-auth/example/package.json +1 -1
- package/skills/jskit/references/patterns/connectors/calendar-cli/example/package.json +4 -4
- package/skills/jskit/references/patterns/crud/json-api-resource-package/example/packages/books/package.json +2 -2
- package/skills/jskit/references/patterns/database/mysql-application/example/package.json +1 -1
- package/skills/jskit/references/patterns/database/postgres-application/example/package.json +1 -1
- package/skills/jskit/references/patterns/realtime/realtime-application/example/package.json +2 -2
- package/skills/jskit/references/patterns/server/feature-package/example/booking-engine/package.json +1 -1
- package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users/package.json +2 -2
- package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users-workspace/package.json +3 -3
- package/skills/jskit/references/typed-features.md +5 -0
|
@@ -66,6 +66,150 @@ Protected server operations declare an auth policy; they do not trust a hidden
|
|
|
66
66
|
button or a page-local session check. Other packages extend auth through the
|
|
67
67
|
public extension capability rather than replacing the auth service.
|
|
68
68
|
|
|
69
|
+
## Sign-in protection
|
|
70
|
+
|
|
71
|
+
Two limits slow down password guessing, and both are on by default.
|
|
72
|
+
|
|
73
|
+
**Per client address.** Every auth route that can be abused by repetition
|
|
74
|
+
declares a `rateLimit`, which the kernel enforces for each client address. A
|
|
75
|
+
request over it is refused with status 429, the code `kernel.http.rateLimited`
|
|
76
|
+
(`params.count` is the seconds to wait) and a `Retry-After` header. The
|
|
77
|
+
defaults, per minute: `login`, `register`, `registerConfirm`,
|
|
78
|
+
`loginOtpRequest` and `loginOtpVerify` 10; `registerConfirmationResend` and
|
|
79
|
+
`passwordForgot` 5;
|
|
80
|
+
`oauthStart`, `oauthComplete`, `passwordRecovery` and `passwordReset` 20;
|
|
81
|
+
`devLoginAs` 30. Change one in the application's server configuration;
|
|
82
|
+
`false` removes it:
|
|
83
|
+
|
|
84
|
+
```js
|
|
85
|
+
// config/server.js
|
|
86
|
+
config.auth = {
|
|
87
|
+
...config.auth,
|
|
88
|
+
rateLimits: {
|
|
89
|
+
login: { max: 5, timeWindow: "1 minute" },
|
|
90
|
+
oauthStart: false
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
A route name auth does not have, or a value that is neither
|
|
96
|
+
`{ max, timeWindow }` nor `false`, stops startup. `timeWindow` is milliseconds
|
|
97
|
+
or text such as `"30 seconds"` or `"1 hour"`.
|
|
98
|
+
|
|
99
|
+
The address is Fastify's `request.ip`. Behind a reverse proxy every request
|
|
100
|
+
comes from the proxy, so all clients would share one count: create Fastify with
|
|
101
|
+
`trustProxy` set to the proxy's address (for example
|
|
102
|
+
`Fastify({ trustProxy: "127.0.0.1" })`), and never to `true` when clients can
|
|
103
|
+
also reach the server directly.
|
|
104
|
+
|
|
105
|
+
**Per account (local auth).** After 5 failed sign-ins in a row for one email,
|
|
106
|
+
that email must wait 30 seconds before its next attempt; each further failure
|
|
107
|
+
doubles the wait, up to an hour (NIST SP 800-63B's example). While it waits,
|
|
108
|
+
sign-in is refused, even with the right password, with status 429, the code
|
|
109
|
+
`auth.local.login.locked` (`params.count` minutes, `params.retryAfterSeconds`)
|
|
110
|
+
and `Retry-After`. Emails without an account are counted the same way, so the
|
|
111
|
+
wait says nothing about which accounts exist. A successful sign-in forgets the
|
|
112
|
+
failures, and so does a day without one. Waits are temporary and password
|
|
113
|
+
recovery is never blocked: completing a password reset ends the wait, so an
|
|
114
|
+
attacker who keeps an account waiting cannot keep its owner out. The failures
|
|
115
|
+
are kept in the file store (`sign-in-failures.passwd`) or, with
|
|
116
|
+
`@jskit-ai/auth-provider-local-db-core`, in the `auth_local_sign_in_failures`
|
|
117
|
+
table (run `npm run db:migrate`).
|
|
118
|
+
|
|
119
|
+
| Env | Default | Meaning |
|
|
120
|
+
| --- | --- | --- |
|
|
121
|
+
| `AUTH_LOCAL_SIGN_IN_FAILURES_BEFORE_WAIT` | `5` | Failed sign-ins in a row before the account waits, 1 to 100. |
|
|
122
|
+
| `AUTH_LOCAL_SIGN_IN_FIRST_WAIT_SECONDS` | `30` | The first wait. |
|
|
123
|
+
| `AUTH_LOCAL_SIGN_IN_MAX_WAIT_SECONDS` | `3600` | The longest wait, at least the first. |
|
|
124
|
+
| `AUTH_LOCAL_PASSWORD_MIN_LENGTH` | `8` | The shortest password local auth accepts, 8 to 64. |
|
|
125
|
+
|
|
126
|
+
NIST SP 800-63B-4 asks for at least 15 characters when a password is the only
|
|
127
|
+
sign-in factor, and at least 8 when it is used with another factor; set
|
|
128
|
+
`AUTH_LOCAL_PASSWORD_MIN_LENGTH=15` for password-only sign-in. Passwords up to
|
|
129
|
+
128 characters are accepted.
|
|
130
|
+
|
|
131
|
+
The login page shows either refusal, translated, with the wait.
|
|
132
|
+
|
|
133
|
+
## Email confirmation (local auth)
|
|
134
|
+
|
|
135
|
+
Local auth confirms the email address of each account it registers by
|
|
136
|
+
password, in every environment, unless `AUTH_LOCAL_EMAIL_CONFIRMATION=false`.
|
|
137
|
+
Registering keeps the registration waiting, with no account, profile or
|
|
138
|
+
session, and answers `requiresEmailConfirmation: true`; the sign-in page then
|
|
139
|
+
shows "Confirm your email", with a button to send a new link and a field for
|
|
140
|
+
the link or its code. Opening the link (`/auth/login?confirmation_token=...`)
|
|
141
|
+
creates the account and signs the person in. The `auth.local.user.registered`
|
|
142
|
+
hook runs then, not on registering. Signing in with the right password while the registration waits
|
|
143
|
+
is refused with status 403 and `auth.login.emailUnconfirmed`, and the sign-in
|
|
144
|
+
page shows how to confirm; a wrong password is an ordinary failed sign-in.
|
|
145
|
+
|
|
146
|
+
A link's code is random, kept only as a hash, works once and expires after a
|
|
147
|
+
day. Registering the same email again, or asking for a new link, replaces it,
|
|
148
|
+
so a waiting registration never keeps the email from its owner. Asking for a
|
|
149
|
+
new link answers the same whether or not a registration waits.
|
|
150
|
+
|
|
151
|
+
The link is emailed by the optional `auth.local.confirmation-sender`
|
|
152
|
+
capability, an async function accepting `{ email, confirmationUrl }`, built
|
|
153
|
+
like the recovery sender below; with it, `APP_PUBLIC_URL` is required and the
|
|
154
|
+
link is never returned or logged. In development without one, the link is in
|
|
155
|
+
the registration's answer (`confirmationUrl`) and the log, and the sign-in page
|
|
156
|
+
shows it with a button that confirms it. In production (`NODE_ENV=production`)
|
|
157
|
+
without one, the server refuses to start, naming both ways out: install a
|
|
158
|
+
sender, or set `AUTH_LOCAL_EMAIL_CONFIRMATION=false`. For direct library
|
|
159
|
+
composition, pass the sender as `confirmationSender` to
|
|
160
|
+
`createLocalAuthService()`, with `emailConfirmationSender: true` in
|
|
161
|
+
`resolveLocalAuthConfig()`; without one, pass
|
|
162
|
+
`createLoggedConfirmationSender(logger)`.
|
|
163
|
+
|
|
164
|
+
| Env | Default | Meaning |
|
|
165
|
+
| --- | --- | --- |
|
|
166
|
+
| `AUTH_LOCAL_EMAIL_CONFIRMATION` | on | `false` registers and signs in at once, without confirming the email. |
|
|
167
|
+
|
|
168
|
+
Accounts that exist already are confirmed: only registrations made after the
|
|
169
|
+
upgrade wait. Waiting registrations are kept in the file store
|
|
170
|
+
(`registrations.passwd`) or, with `@jskit-ai/auth-provider-local-db-core`, in
|
|
171
|
+
the `auth_local_registrations` table (run `npm run db:migrate`). A custom
|
|
172
|
+
`auth.local.backend` implements the `registrations` collection. Tests that
|
|
173
|
+
register and expect a session either confirm with the answer's
|
|
174
|
+
`confirmationUrl` or set `AUTH_LOCAL_EMAIL_CONFIRMATION=false`.
|
|
175
|
+
|
|
176
|
+
## The first account in production (local auth)
|
|
177
|
+
|
|
178
|
+
The first account to register becomes the application's owner, so on a
|
|
179
|
+
production server (`NODE_ENV=production`) whose local auth has no account yet,
|
|
180
|
+
registering needs a one-time setup code that only the server's operator can
|
|
181
|
+
read. Development needs no code.
|
|
182
|
+
|
|
183
|
+
Each start of such a server makes a new code, such as
|
|
184
|
+
`7KQ2M-X9D4F-0RWHN-3TBZC`, and keeps only its hash. It writes the code:
|
|
185
|
+
|
|
186
|
+
- in the log, as one warning: `Local auth has no account yet: register the
|
|
187
|
+
first account with this setup code.`, with the fields
|
|
188
|
+
`firstAccountSetupCode` (the code) and `firstAccountSetupCodeFile`;
|
|
189
|
+
- in the file `first-account-setup-code` in `AUTH_LOCAL_STORE_DIR` (default
|
|
190
|
+
`.jskit/auth`), mode 600, for a hosting tool to read. A store directory that
|
|
191
|
+
cannot be written leaves only the log line.
|
|
192
|
+
|
|
193
|
+
While it waits, the sign-in page's registration form shows a "Setup code"
|
|
194
|
+
field (capability `features.firstAccountSetupCode`), and the register body
|
|
195
|
+
takes `setupCode`; letter case, spaces and dashes do not matter. A missing code
|
|
196
|
+
is refused with 403 `auth.local.setup.codeRequired`, a wrong one with 403
|
|
197
|
+
`auth.local.setup.codeInvalid`. An OAuth sign-in cannot create that first
|
|
198
|
+
account. The registration then follows the ordinary rules, email confirmation
|
|
199
|
+
included, and confirming it signs the owner in. The code admits registrations
|
|
200
|
+
until an account exists; then it stops working and its file is deleted, and
|
|
201
|
+
registration needs no code again. Restarting before then makes a new code and
|
|
202
|
+
the old one stops working: the latest log line and the file always agree, and
|
|
203
|
+
nothing but a hash is kept for checking it. Run one server while the first
|
|
204
|
+
account is set up, since each server makes its own code.
|
|
205
|
+
|
|
206
|
+
A hosting tool that shows the code to the operator itself supplies it in
|
|
207
|
+
`AUTH_LOCAL_SETUP_CODE`, at least 20 letters and digits, for example a
|
|
208
|
+
generated production secret. The server then asks for that code at every start
|
|
209
|
+
and on every server, writes no `first-account-setup-code` file, and logs only
|
|
210
|
+
that the code is in `AUTH_LOCAL_SETUP_CODE`, never the code itself. Outside
|
|
211
|
+
production the variable is ignored.
|
|
212
|
+
|
|
69
213
|
## Application-owned recovery email
|
|
70
214
|
|
|
71
215
|
Local auth owns recovery tokens, expiry and recovery-scoped sessions. The
|
|
@@ -128,6 +272,11 @@ URL. Without a sender, production recovery is disabled; explicit development
|
|
|
128
272
|
output remains available for local testing. A sender failure never falls back
|
|
129
273
|
to development output. The generic recovery delivery capability is `email`.
|
|
130
274
|
|
|
275
|
+
Production is `NODE_ENV=production`; anything else, unset included, is
|
|
276
|
+
development, so the host that serves the application sets it. A production
|
|
277
|
+
server with `AUTH_LOCAL_RECOVERY_DEV_OUTPUT` set refuses to start and names the
|
|
278
|
+
setting to remove, rather than ignoring it.
|
|
279
|
+
|
|
131
280
|
### Pre-release migration
|
|
132
281
|
|
|
133
282
|
This is a V0 breaking change. There is one runtime path, with no old SMTP reader
|
|
@@ -735,6 +735,11 @@ for anything that reads or writes the domain.**
|
|
|
735
735
|
`request.executeAction({ actionId: ACTION_X, input })` returns.
|
|
736
736
|
- A route that bypasses actions (a provider's callback) gets its own named
|
|
737
737
|
registrar. Summaries are sentences.
|
|
738
|
+
- A route that repetition can abuse (sign-in, codes, sending email) declares
|
|
739
|
+
`rateLimit: { max, timeWindow }`, which the kernel enforces per client
|
|
740
|
+
address and refuses with 429, `kernel.http.rateLimited` and `Retry-After`.
|
|
741
|
+
A limit worth changing per application is read from its config, as
|
|
742
|
+
`config.auth.rateLimits` is.
|
|
738
743
|
|
|
739
744
|
Why: an action is the one place a domain operation's policy, input and
|
|
740
745
|
events are declared.
|
package/package.json
CHANGED
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@local/main": "0.1.0",
|
|
36
36
|
"@fastify/static": "^10.1.3",
|
|
37
|
-
"@jskit-ai/kernel": "0.2.
|
|
37
|
+
"@jskit-ai/kernel": "0.2.9",
|
|
38
38
|
"@tanstack/vue-query": "^5.101.0",
|
|
39
39
|
"fastify": "^5.12.7",
|
|
40
40
|
"pino": "^10.3.1",
|
|
@@ -43,13 +43,13 @@
|
|
|
43
43
|
"vue": "^3.5.44",
|
|
44
44
|
"vue-router": "^5.3.1",
|
|
45
45
|
"vuetify": "^4.1.2",
|
|
46
|
-
"@jskit-ai/http-runtime": "0.2.
|
|
46
|
+
"@jskit-ai/http-runtime": "0.2.9",
|
|
47
47
|
"@fastify/fast-json-stringify-compiler": "^5.1.0",
|
|
48
48
|
"@vue/devtools-api": "^8.2.1"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
51
|
"@jskit-ai/config-eslint": "0.1.245",
|
|
52
|
-
"@jskit-ai/jskit-catalog": "0.2.
|
|
52
|
+
"@jskit-ai/jskit-catalog": "0.2.24",
|
|
53
53
|
"@playwright/test": "1.61.1",
|
|
54
54
|
"@vitejs/plugin-vue": "^6.0.7",
|
|
55
55
|
"eslint": "^10.8.0",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@local/main": "0.1.0",
|
|
36
36
|
"@fastify/static": "^10.1.3",
|
|
37
|
-
"@jskit-ai/kernel": "0.2.
|
|
37
|
+
"@jskit-ai/kernel": "0.2.9",
|
|
38
38
|
"@tanstack/vue-query": "^5.101.0",
|
|
39
39
|
"fastify": "^5.12.7",
|
|
40
40
|
"pino": "^10.3.1",
|
|
@@ -43,15 +43,15 @@
|
|
|
43
43
|
"vue": "^3.5.44",
|
|
44
44
|
"vue-router": "^5.3.1",
|
|
45
45
|
"vuetify": "^4.1.2",
|
|
46
|
-
"@jskit-ai/http-runtime": "0.2.
|
|
46
|
+
"@jskit-ai/http-runtime": "0.2.9",
|
|
47
47
|
"@mdi/js": "^7.4.47",
|
|
48
|
-
"@jskit-ai/shell-web": "0.2.
|
|
48
|
+
"@jskit-ai/shell-web": "0.2.10",
|
|
49
49
|
"@fastify/fast-json-stringify-compiler": "^5.1.0",
|
|
50
50
|
"@vue/devtools-api": "^8.2.1"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
53
|
"@jskit-ai/config-eslint": "0.1.245",
|
|
54
|
-
"@jskit-ai/jskit-catalog": "0.2.
|
|
54
|
+
"@jskit-ai/jskit-catalog": "0.2.24",
|
|
55
55
|
"@playwright/test": "1.61.1",
|
|
56
56
|
"@vitejs/plugin-vue": "^6.0.7",
|
|
57
57
|
"eslint": "^10.8.0",
|
|
@@ -15,7 +15,7 @@ A concrete Fastify, Vue, and JSKIT application foundation for products that do n
|
|
|
15
15
|
|
|
16
16
|
- Id: `app/minimal-foundation`
|
|
17
17
|
- Keywords: `app`, `fastify`, `foundation`, `minimal`, `server`, `vite`, `vue`
|
|
18
|
-
- Owner: `@jskit-ai/agent-docs@0.1.
|
|
18
|
+
- Owner: `@jskit-ai/agent-docs@0.1.272`
|
|
19
19
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/app/minimal-foundation/PATTERN.md)
|
|
20
20
|
- Examples: [example/](../../skills/jskit/references/patterns/app/minimal-foundation/example/)
|
|
21
21
|
- Requires: `@jskit-ai/http-runtime`, `@jskit-ai/kernel`
|
|
@@ -26,7 +26,7 @@ A concrete JSKIT web application foundation with responsive shell navigation, se
|
|
|
26
26
|
|
|
27
27
|
- Id: `app/shell-foundation`
|
|
28
28
|
- Keywords: `app`, `foundation`, `material`, `navigation`, `placements`, `shell`, `vite`, `vue`
|
|
29
|
-
- Owner: `@jskit-ai/agent-docs@0.1.
|
|
29
|
+
- Owner: `@jskit-ai/agent-docs@0.1.272`
|
|
30
30
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/app/shell-foundation/PATTERN.md)
|
|
31
31
|
- Examples: [example/](../../skills/jskit/references/patterns/app/shell-foundation/example/)
|
|
32
32
|
- Requires: `@jskit-ai/http-runtime`, `@jskit-ai/kernel`, `@jskit-ai/shell-web`
|
|
@@ -37,7 +37,7 @@ Configure an assistant runtime for one application surface and expose its chat a
|
|
|
37
37
|
|
|
38
38
|
- Id: `assistant/assistant-surface`
|
|
39
39
|
- Keywords: `ai`, `assistant`, `chat`, `config`, `environment`, `page`, `placement`, `settings`, `surface`
|
|
40
|
-
- Owner: `@jskit-ai/assistant-runtime@0.2.
|
|
40
|
+
- Owner: `@jskit-ai/assistant-runtime@0.2.21`
|
|
41
41
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/assistant/assistant-surface/PATTERN.md)
|
|
42
42
|
- Examples: [example/](../../skills/jskit/references/patterns/assistant/assistant-surface/example/)
|
|
43
43
|
- Requires: `@jskit-ai/assistant-runtime`, `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`, `@jskit-ai/shell-web`
|
|
@@ -48,7 +48,7 @@ Run one OpenID Connect sign-in for all of an owner's apps as its own JSKIT proje
|
|
|
48
48
|
|
|
49
49
|
- Id: `auth/accounts-hub`
|
|
50
50
|
- Keywords: `accounts hub`, `auth`, `authentication`, `issuer`, `master login`, `oidc`, `openid connect`, `single sign-on`, `sso`
|
|
51
|
-
- Owner: `@jskit-ai/oidc-issuer-core@0.1.
|
|
51
|
+
- Owner: `@jskit-ai/oidc-issuer-core@0.1.16`
|
|
52
52
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/auth/accounts-hub/PATTERN.md)
|
|
53
53
|
- Examples: [example/](../../skills/jskit/references/patterns/auth/accounts-hub/example/)
|
|
54
54
|
- Requires: `@jskit-ai/oidc-issuer-core`
|
|
@@ -59,7 +59,7 @@ Compose JSKIT authentication routes, views, profile controls, and public surface
|
|
|
59
59
|
|
|
60
60
|
- Id: `auth/auth-surface`
|
|
61
61
|
- Keywords: `account`, `auth`, `login`, `logout`, `password`, `placement`, `profile`, `reset`, `surface`
|
|
62
|
-
- Owner: `@jskit-ai/auth-web@0.2.
|
|
62
|
+
- Owner: `@jskit-ai/auth-web@0.2.12`
|
|
63
63
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/auth/auth-surface/PATTERN.md)
|
|
64
64
|
- Examples: [example/](../../skills/jskit/references/patterns/auth/auth-surface/example/)
|
|
65
65
|
- Requires: `@jskit-ai/auth-core`, `@jskit-ai/auth-web`, `@jskit-ai/shell-web`
|
|
@@ -70,7 +70,7 @@ Let people sign in with the accounts they already have in an accounts hub or ano
|
|
|
70
70
|
|
|
71
71
|
- Id: `auth/oidc-sign-in`
|
|
72
72
|
- Keywords: `accounts hub`, `auth`, `authentication`, `back-channel logout`, `dynamic client registration`, `issuer`, `master login`, `oidc`, `openid connect`, `single sign-on`, `sso`
|
|
73
|
-
- Owner: `@jskit-ai/auth-provider-oidc-core@0.2.
|
|
73
|
+
- Owner: `@jskit-ai/auth-provider-oidc-core@0.2.14`
|
|
74
74
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/auth/oidc-sign-in/PATTERN.md)
|
|
75
75
|
- Examples: [example/](../../skills/jskit/references/patterns/auth/oidc-sign-in/example/)
|
|
76
76
|
- Requires: `@jskit-ai/auth-provider-oidc-core`, `@jskit-ai/auth-web`
|
|
@@ -81,7 +81,7 @@ Add Supabase authentication through normal npm composition, explicit environment
|
|
|
81
81
|
|
|
82
82
|
- Id: `auth/supabase-auth`
|
|
83
83
|
- Keywords: `auth`, `authentication`, `oauth`, `sessions`, `supabase`
|
|
84
|
-
- Owner: `@jskit-ai/auth-provider-supabase-core@0.2.
|
|
84
|
+
- Owner: `@jskit-ai/auth-provider-supabase-core@0.2.11`
|
|
85
85
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/auth/supabase-auth/PATTERN.md)
|
|
86
86
|
- Examples: [example/](../../skills/jskit/references/patterns/auth/supabase-auth/example/)
|
|
87
87
|
- Requires: `@jskit-ai/auth-provider-supabase-core`
|
|
@@ -92,7 +92,7 @@ Resolve an administrator environment key or an individual user's grant, then use
|
|
|
92
92
|
|
|
93
93
|
- Id: `connectors/ai-connections`
|
|
94
94
|
- Keywords: `ai`, `api-key`, `cli`, `environment`, `free`, `models`, `ownership`, `zai`, `zen`
|
|
95
|
-
- Owner: `@jskit-ai/connectors-catalog@0.2.
|
|
95
|
+
- Owner: `@jskit-ai/connectors-catalog@0.2.10`
|
|
96
96
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/connectors/ai-connections/PATTERN.md)
|
|
97
97
|
- Examples: [example/](../../skills/jskit/references/patterns/connectors/ai-connections/example/)
|
|
98
98
|
- Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
|
|
@@ -103,7 +103,7 @@ Compose provider operations, authorization and encrypted file storage from a CLI
|
|
|
103
103
|
|
|
104
104
|
- Id: `connectors/api-key-connection`
|
|
105
105
|
- Keywords: `api-key`, `clay`, `cli`, `clickhouse`, `connectors`, `dbt`, `files`, `firecrawl`, `granola`, `integrations`, `metrics`, `prestashop`, `resend`, `semantic-layer`, `semrush`, `x-twitter`
|
|
106
|
-
- Owner: `@jskit-ai/connectors-catalog@0.2.
|
|
106
|
+
- Owner: `@jskit-ai/connectors-catalog@0.2.10`
|
|
107
107
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/connectors/api-key-connection/PATTERN.md)
|
|
108
108
|
- Examples: [example/](../../skills/jskit/references/patterns/connectors/api-key-connection/example/)
|
|
109
109
|
- Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
|
|
@@ -114,7 +114,7 @@ Compose token-based MCP discovery and explicitly authorized tool calls using the
|
|
|
114
114
|
|
|
115
115
|
- Id: `connectors/assistant-mcp`
|
|
116
116
|
- Keywords: `assistant`, `cli`, `connectors`, `files`, `integrations`, `mcp`, `n8n`, `sanity`
|
|
117
|
-
- Owner: `@jskit-ai/connectors-catalog@0.2.
|
|
117
|
+
- Owner: `@jskit-ai/connectors-catalog@0.2.10`
|
|
118
118
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/connectors/assistant-mcp/PATTERN.md)
|
|
119
119
|
- Examples: [example/](../../skills/jskit/references/patterns/connectors/assistant-mcp/example/)
|
|
120
120
|
- Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
|
|
@@ -125,7 +125,7 @@ Configure assistant OAuth clients, then compose existing state, encrypted file g
|
|
|
125
125
|
|
|
126
126
|
- Id: `connectors/assistant-mcp-oauth`
|
|
127
127
|
- Keywords: `amplitude`, `assistant`, `atlassian`, `canva`, `cli`, `client metadata`, `confidence`, `connectors`, `figma`, `files`, `granola`, `hex`, `mcp`, `miro`, `oauth`
|
|
128
|
-
- Owner: `@jskit-ai/connectors-catalog@0.2.
|
|
128
|
+
- Owner: `@jskit-ai/connectors-catalog@0.2.10`
|
|
129
129
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/connectors/assistant-mcp-oauth/PATTERN.md)
|
|
130
130
|
- Examples: [example/](../../skills/jskit/references/patterns/connectors/assistant-mcp-oauth/example/)
|
|
131
131
|
- Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
|
|
@@ -136,7 +136,7 @@ Compose signed AWS operations, file configuration and application authorization
|
|
|
136
136
|
|
|
137
137
|
- Id: `connectors/aws-storage-queries`
|
|
138
138
|
- Keywords: `athena`, `aws`, `cli`, `connectors`, `files`, `iam`, `queries`, `s3`, `storage`, `sts`
|
|
139
|
-
- Owner: `@jskit-ai/connectors-catalog@0.2.
|
|
139
|
+
- Owner: `@jskit-ai/connectors-catalog@0.2.10`
|
|
140
140
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/connectors/aws-storage-queries/PATTERN.md)
|
|
141
141
|
- Examples: [example/](../../skills/jskit/references/patterns/connectors/aws-storage-queries/example/)
|
|
142
142
|
- Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
|
|
@@ -147,7 +147,7 @@ Compose reusable connection libraries with portable configuration, application o
|
|
|
147
147
|
|
|
148
148
|
- Id: `connectors/calendar-cli`
|
|
149
149
|
- Keywords: `calendar`, `cli`, `connectors`, `google`, `integrations`, `oauth`, `permissions`
|
|
150
|
-
- Owner: `@jskit-ai/connector-google-calendar@0.2.
|
|
150
|
+
- Owner: `@jskit-ai/connector-google-calendar@0.2.10`
|
|
151
151
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/connectors/calendar-cli/PATTERN.md)
|
|
152
152
|
- Examples: [example/](../../skills/jskit/references/patterns/connectors/calendar-cli/example/)
|
|
153
153
|
- Requires: `@jskit-ai/connector-google-calendar`, `@jskit-ai/connectors-core`, `@jskit-ai/database-runtime-mysql`
|
|
@@ -158,7 +158,7 @@ Compose the shared connector runtime for event delivery while leaving workflow c
|
|
|
158
158
|
|
|
159
159
|
- Id: `connectors/event-delivery`
|
|
160
160
|
- Keywords: `cli`, `connectors`, `events`, `files`, `inngest`, `integrations`, `workflows`
|
|
161
|
-
- Owner: `@jskit-ai/connectors-catalog@0.2.
|
|
161
|
+
- Owner: `@jskit-ai/connectors-catalog@0.2.10`
|
|
162
162
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/connectors/event-delivery/PATTERN.md)
|
|
163
163
|
- Examples: [example/](../../skills/jskit/references/patterns/connectors/event-delivery/example/)
|
|
164
164
|
- Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
|
|
@@ -169,7 +169,7 @@ Wire service-account grants, file storage, explicit message actions and public b
|
|
|
169
169
|
|
|
170
170
|
- Id: `connectors/firebase-messaging`
|
|
171
171
|
- Keywords: `cli`, `connectors`, `fcm`, `files`, `firebase`, `integrations`, `jwt`, `notifications`, `push`, `service-account`, `vapid`
|
|
172
|
-
- Owner: `@jskit-ai/connectors-catalog@0.2.
|
|
172
|
+
- Owner: `@jskit-ai/connectors-catalog@0.2.10`
|
|
173
173
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/connectors/firebase-messaging/PATTERN.md)
|
|
174
174
|
- Examples: [example/](../../skills/jskit/references/patterns/connectors/firebase-messaging/example/)
|
|
175
175
|
- Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
|
|
@@ -180,7 +180,7 @@ Compose reviewed Search campaigns with project-owned Google OAuth and portable s
|
|
|
180
180
|
|
|
181
181
|
- Id: `connectors/google-ads-search`
|
|
182
182
|
- Keywords: `ads`, `campaigns`, `cli`, `connectors`, `conversion`, `google`, `search`
|
|
183
|
-
- Owner: `@jskit-ai/connectors-catalog@0.2.
|
|
183
|
+
- Owner: `@jskit-ai/connectors-catalog@0.2.10`
|
|
184
184
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/connectors/google-ads-search/PATTERN.md)
|
|
185
185
|
- Examples: [example/](../../skills/jskit/references/patterns/connectors/google-ads-search/example/)
|
|
186
186
|
- Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
|
|
@@ -191,7 +191,7 @@ Compose provider consent, verification and encrypted file persistence from an ap
|
|
|
191
191
|
|
|
192
192
|
- Id: `connectors/oauth-connection`
|
|
193
193
|
- Keywords: `accounting`, `assistant permissions`, `books`, `cli`, `client credentials`, `connectors`, `consent`, `crm`, `databricks`, `developer token`, `fabric`, `files`, `gaql`, `google ads`, `graphql`, `integrations`, `linkedin`, `microsoft`, `oauth`, `powerpoint`, `salesforce`, `service principal`, `shopify`, `soql`, `staffing`, `tiktok`, `twitch`, `wave`, `word`, `wordpress`, `workday`, `xero`, `zoho`
|
|
194
|
-
- Owner: `@jskit-ai/connectors-catalog@0.2.
|
|
194
|
+
- Owner: `@jskit-ai/connectors-catalog@0.2.10`
|
|
195
195
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/connectors/oauth-connection/PATTERN.md)
|
|
196
196
|
- Examples: [example/](../../skills/jskit/references/patterns/connectors/oauth-connection/example/)
|
|
197
197
|
- Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
|
|
@@ -202,7 +202,7 @@ Compose a sequential catalogue batch and preserve partial success for applicatio
|
|
|
202
202
|
|
|
203
203
|
- Id: `connectors/paddle-catalogue`
|
|
204
204
|
- Keywords: `batch`, `paddle`, `payments`, `prices`, `products`
|
|
205
|
-
- Owner: `@jskit-ai/connectors-catalog@0.2.
|
|
205
|
+
- Owner: `@jskit-ai/connectors-catalog@0.2.10`
|
|
206
206
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/connectors/paddle-catalogue/PATTERN.md)
|
|
207
207
|
- Examples: [example/](../../skills/jskit/references/patterns/connectors/paddle-catalogue/example/)
|
|
208
208
|
- Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
|
|
@@ -213,7 +213,7 @@ Resolve a publishable image key deliberately and use the shared URL library in a
|
|
|
213
213
|
|
|
214
214
|
- Id: `connectors/public-image`
|
|
215
215
|
- Keywords: `cli`, `connectors`, `files`, `images`, `integrations`, `logo-dev`, `public-key`
|
|
216
|
-
- Owner: `@jskit-ai/connectors-catalog@0.2.
|
|
216
|
+
- Owner: `@jskit-ai/connectors-catalog@0.2.10`
|
|
217
217
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/connectors/public-image/PATTERN.md)
|
|
218
218
|
- Examples: [example/](../../skills/jskit/references/patterns/connectors/public-image/example/)
|
|
219
219
|
- Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
|
|
@@ -224,7 +224,7 @@ Compose file configuration, Redshift Data API operations and application query o
|
|
|
224
224
|
|
|
225
225
|
- Id: `connectors/redshift-queries`
|
|
226
226
|
- Keywords: `aws`, `cli`, `connectors`, `files`, `iam`, `provisioned`, `redshift`, `serverless`, `sql`, `warehouse`
|
|
227
|
-
- Owner: `@jskit-ai/connectors-catalog@0.2.
|
|
227
|
+
- Owner: `@jskit-ai/connectors-catalog@0.2.10`
|
|
228
228
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/connectors/redshift-queries/PATTERN.md)
|
|
229
229
|
- Examples: [example/](../../skills/jskit/references/patterns/connectors/redshift-queries/example/)
|
|
230
230
|
- Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
|
|
@@ -235,7 +235,7 @@ Use the shared scanner runtime from a CLI or a host worker with portable configu
|
|
|
235
235
|
|
|
236
236
|
- Id: `connectors/source-scanning`
|
|
237
237
|
- Keywords: `cancellation`, `cli`, `connectors`, `integrations`, `scanning`, `security`, `source`, `wiz`, `worker`
|
|
238
|
-
- Owner: `@jskit-ai/connectors-catalog@0.2.
|
|
238
|
+
- Owner: `@jskit-ai/connectors-catalog@0.2.10`
|
|
239
239
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/connectors/source-scanning/PATTERN.md)
|
|
240
240
|
- Examples: [example/](../../skills/jskit/references/patterns/connectors/source-scanning/example/)
|
|
241
241
|
- Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
|
|
@@ -246,7 +246,7 @@ Add a protected administration surface, settings shell, and semantic navigation
|
|
|
246
246
|
|
|
247
247
|
- Id: `console/console-surface`
|
|
248
248
|
- Keywords: `admin`, `console`, `navigation`, `owner`, `placement`, `settings`, `surface`
|
|
249
|
-
- Owner: `@jskit-ai/console-web@0.1.
|
|
249
|
+
- Owner: `@jskit-ai/console-web@0.1.234`
|
|
250
250
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/console/console-surface/PATTERN.md)
|
|
251
251
|
- Examples: [example/](../../skills/jskit/references/patterns/console/console-surface/example/)
|
|
252
252
|
- Requires: `@jskit-ai/console-core`, `@jskit-ai/console-web`, `@jskit-ai/shell-web`
|
|
@@ -257,7 +257,7 @@ Build a routed CRUD user interface as thin application pages over JSKIT's shared
|
|
|
257
257
|
|
|
258
258
|
- Id: `crud/crud-screen-set`
|
|
259
259
|
- Keywords: `actions`, `add`, `crud`, `delete`, `edit`, `filters`, `list`, `material`, `routes`, `view`, `vue`
|
|
260
|
-
- Owner: `@jskit-ai/http-web@0.2.
|
|
260
|
+
- Owner: `@jskit-ai/http-web@0.2.15`
|
|
261
261
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/crud/crud-screen-set/PATTERN.md)
|
|
262
262
|
- Examples: [example/](../../skills/jskit/references/patterns/crud/crud-screen-set/example/)
|
|
263
263
|
- Requires: `@jskit-ai/http-web`, `@jskit-ai/resource-crud-core`
|
|
@@ -268,7 +268,7 @@ Build a complete application-owned CRUD server package from a migration, resourc
|
|
|
268
268
|
|
|
269
269
|
- Id: `crud/json-api-resource-package`
|
|
270
270
|
- Keywords: `actions`, `crud`, `database`, `json-api`, `migration`, `permissions`, `provider`, `repository`, `routes`, `service`
|
|
271
|
-
- Owner: `@jskit-ai/crud-core@0.2.
|
|
271
|
+
- Owner: `@jskit-ai/crud-core@0.2.10`
|
|
272
272
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/crud/json-api-resource-package/PATTERN.md)
|
|
273
273
|
- Examples: [example/](../../skills/jskit/references/patterns/crud/json-api-resource-package/example/)
|
|
274
274
|
- Requires: `@jskit-ai/crud-core`, `@jskit-ai/resource-crud-core`
|
|
@@ -279,7 +279,7 @@ Define an authenticated application resource whose records belong to the current
|
|
|
279
279
|
|
|
280
280
|
- Id: `crud/resource-contract`
|
|
281
281
|
- Keywords: `authenticated`, `crud`, `database`, `owner-scoped`, `resource`, `user`
|
|
282
|
-
- Owner: `@jskit-ai/resource-crud-core@0.1.
|
|
282
|
+
- Owner: `@jskit-ai/resource-crud-core@0.1.200`
|
|
283
283
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/crud/resource-contract/PATTERN.md)
|
|
284
284
|
- Examples: [example/](../../skills/jskit/references/patterns/crud/resource-contract/example/)
|
|
285
285
|
- Requires: `@jskit-ai/resource-crud-core`
|
|
@@ -290,7 +290,7 @@ Configure a JSKIT application for MySQL with a fixed driver, ordinary environmen
|
|
|
290
290
|
|
|
291
291
|
- Id: `database/mysql-application`
|
|
292
292
|
- Keywords: `database`, `knex`, `mariadb`, `migrations`, `mysql`, `mysql2`
|
|
293
|
-
- Owner: `@jskit-ai/database-runtime-mysql@0.1.
|
|
293
|
+
- Owner: `@jskit-ai/database-runtime-mysql@0.1.256`
|
|
294
294
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/database/mysql-application/PATTERN.md)
|
|
295
295
|
- Examples: [example/](../../skills/jskit/references/patterns/database/mysql-application/example/)
|
|
296
296
|
- Requires: `@jskit-ai/database-runtime-mysql`
|
|
@@ -301,7 +301,7 @@ Configure a JSKIT application for PostgreSQL with a fixed driver, ordinary envir
|
|
|
301
301
|
|
|
302
302
|
- Id: `database/postgres-application`
|
|
303
303
|
- Keywords: `database`, `knex`, `migrations`, `pg`, `postgres`, `postgresql`
|
|
304
|
-
- Owner: `@jskit-ai/database-runtime-postgres@0.1.
|
|
304
|
+
- Owner: `@jskit-ai/database-runtime-postgres@0.1.255`
|
|
305
305
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/database/postgres-application/PATTERN.md)
|
|
306
306
|
- Examples: [example/](../../skills/jskit/references/patterns/database/postgres-application/example/)
|
|
307
307
|
- Requires: `@jskit-ai/database-runtime-postgres`
|
|
@@ -312,7 +312,7 @@ Wrap a JSKIT web application in a Capacitor Android shell using native Capacitor
|
|
|
312
312
|
|
|
313
313
|
- Id: `mobile/android-application`
|
|
314
314
|
- Keywords: `android`, `capacitor`, `device`, `mobile`, `native`, `shell`, `webview`
|
|
315
|
-
- Owner: `@jskit-ai/mobile-capacitor@0.2.
|
|
315
|
+
- Owner: `@jskit-ai/mobile-capacitor@0.2.10`
|
|
316
316
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/mobile/android-application/PATTERN.md)
|
|
317
317
|
- Examples: [example/](../../skills/jskit/references/patterns/mobile/android-application/example/)
|
|
318
318
|
- Requires: `@capacitor/android`, `@capacitor/app`, `@capacitor/cli`, `@jskit-ai/mobile-capacitor`
|
|
@@ -323,7 +323,7 @@ Add JSKIT realtime events with an optional Redis backplane and an explicit shell
|
|
|
323
323
|
|
|
324
324
|
- Id: `realtime/realtime-application`
|
|
325
325
|
- Keywords: `realtime`, `redis`, `socket.io`, `sockets`, `status`, `websocket`
|
|
326
|
-
- Owner: `@jskit-ai/realtime@0.2.
|
|
326
|
+
- Owner: `@jskit-ai/realtime@0.2.13`
|
|
327
327
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/realtime/realtime-application/PATTERN.md)
|
|
328
328
|
- Examples: [example/](../../skills/jskit/references/patterns/realtime/realtime-application/example/)
|
|
329
329
|
- Requires: `@jskit-ai/realtime`, `@jskit-ai/shell-web`
|
|
@@ -334,7 +334,7 @@ Compose application-owned Google Publisher Tag delivery with the generic rewarde
|
|
|
334
334
|
|
|
335
335
|
- Id: `rewards/google-rewarded`
|
|
336
336
|
- Keywords: `ads`, `google`, `publisher tag`, `rewarded`, `unlock`
|
|
337
|
-
- Owner: `@jskit-ai/rewarded-web@0.2.
|
|
337
|
+
- Owner: `@jskit-ai/rewarded-web@0.2.12`
|
|
338
338
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/rewards/google-rewarded/PATTERN.md)
|
|
339
339
|
- Examples: [example/](../../skills/jskit/references/patterns/rewards/google-rewarded/example/)
|
|
340
340
|
- Requires: `@jskit-ai/rewarded-web`
|
|
@@ -345,7 +345,7 @@ Define a server feature through explicit capabilities and first-class actions, a
|
|
|
345
345
|
|
|
346
346
|
- Id: `server/feature-package`
|
|
347
347
|
- Keywords: `actions`, `feature`, `json-rest`, `knex`, `orchestration`, `package`, `provider`, `repository`, `routes`, `server`
|
|
348
|
-
- Owner: `@jskit-ai/agent-docs@0.1.
|
|
348
|
+
- Owner: `@jskit-ai/agent-docs@0.1.272`
|
|
349
349
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/server/feature-package/PATTERN.md)
|
|
350
350
|
- Examples: [example/](../../skills/jskit/references/patterns/server/feature-package/example/)
|
|
351
351
|
- Requires: `@jskit-ai/kernel`
|
|
@@ -356,7 +356,7 @@ Compose the JSKIT responsive shell, semantic placements, settings navigation, an
|
|
|
356
356
|
|
|
357
357
|
- Id: `shell/application-shell`
|
|
358
358
|
- Keywords: `adaptive`, `app`, `layout`, `navigation`, `placement`, `responsive`, `settings`, `shell`
|
|
359
|
-
- Owner: `@jskit-ai/shell-web@0.2.
|
|
359
|
+
- Owner: `@jskit-ai/shell-web@0.2.10`
|
|
360
360
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/shell/application-shell/PATTERN.md)
|
|
361
361
|
- Examples: [example/](../../skills/jskit/references/patterns/shell/application-shell/example/)
|
|
362
362
|
- Requires: `@jskit-ai/kernel`, `@jskit-ai/shell-web`
|
|
@@ -367,7 +367,7 @@ Add product routes and shell extensions through file routing, semantic placement
|
|
|
367
367
|
|
|
368
368
|
- Id: `ui/page-and-placement`
|
|
369
369
|
- Keywords: `component`, `navigation`, `outlet`, `page`, `placement`, `routes`, `section`, `shell`, `subpages`, `vue`
|
|
370
|
-
- Owner: `@jskit-ai/shell-web@0.2.
|
|
370
|
+
- Owner: `@jskit-ai/shell-web@0.2.10`
|
|
371
371
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/ui/page-and-placement/PATTERN.md)
|
|
372
372
|
- Examples: [example/](../../skills/jskit/references/patterns/ui/page-and-placement/example/)
|
|
373
373
|
- Requires: `@jskit-ai/kernel`, `@jskit-ai/shell-web`
|
|
@@ -378,7 +378,7 @@ Compose an account settings route and profile, preference, notification, and sig
|
|
|
378
378
|
|
|
379
379
|
- Id: `users/account-settings`
|
|
380
380
|
- Keywords: `account`, `link provider`, `notifications`, `oauth`, `preferences`, `profile`, `settings`, `sign-in methods`, `user`, `vue`
|
|
381
|
-
- Owner: `@jskit-ai/users-web@0.2.
|
|
381
|
+
- Owner: `@jskit-ai/users-web@0.2.17`
|
|
382
382
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/users/account-settings/PATTERN.md)
|
|
383
383
|
- Examples: [example/](../../skills/jskit/references/patterns/users/account-settings/example/)
|
|
384
384
|
- Requires: `@jskit-ai/shell-web`, `@jskit-ai/users-core`, `@jskit-ai/users-web`
|
|
@@ -389,7 +389,7 @@ Expose user administration and workspace-scoped member operations through app-ow
|
|
|
389
389
|
|
|
390
390
|
- Id: `users/user-administration-server`
|
|
391
391
|
- Keywords: `account`, `admin`, `member`, `repository`, `resource`, `routes`, `service`, `user`, `workspace`
|
|
392
|
-
- Owner: `@jskit-ai/users-core@0.2.
|
|
392
|
+
- Owner: `@jskit-ai/users-core@0.2.11`
|
|
393
393
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/users/user-administration-server/PATTERN.md)
|
|
394
394
|
- Examples: [example/](../../skills/jskit/references/patterns/users/user-administration-server/example/)
|
|
395
395
|
- Requires: `@jskit-ai/crud-core`, `@jskit-ai/users-core`
|
|
@@ -400,7 +400,7 @@ Configure roles, workspace access policy, invitations, and app-owned invitation
|
|
|
400
400
|
|
|
401
401
|
- Id: `workspaces/workspace-server`
|
|
402
402
|
- Keywords: `access`, `invite`, `membership`, `multitenancy`, `policy`, `role`, `tenancy`, `workspace`
|
|
403
|
-
- Owner: `@jskit-ai/workspaces-core@0.2.
|
|
403
|
+
- Owner: `@jskit-ai/workspaces-core@0.2.11`
|
|
404
404
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/workspaces/workspace-server/PATTERN.md)
|
|
405
405
|
- Examples: [example/](../../skills/jskit/references/patterns/workspaces/workspace-server/example/)
|
|
406
406
|
- Requires: `@jskit-ai/users-core`, `@jskit-ai/workspaces-core`
|
|
@@ -411,7 +411,7 @@ Compose workspace selection, invitation, member administration, settings, and re
|
|
|
411
411
|
|
|
412
412
|
- Id: `workspaces/workspace-surfaces`
|
|
413
413
|
- Keywords: `admin`, `invite`, `member`, `navigation`, `settings`, `surface`, `switcher`, `workspace`
|
|
414
|
-
- Owner: `@jskit-ai/workspaces-web@0.2.
|
|
414
|
+
- Owner: `@jskit-ai/workspaces-web@0.2.17`
|
|
415
415
|
- Read: [PATTERN.md](../../skills/jskit/references/patterns/workspaces/workspace-surfaces/PATTERN.md)
|
|
416
416
|
- Examples: [example/](../../skills/jskit/references/patterns/workspaces/workspace-surfaces/example/)
|
|
417
417
|
- Requires: `@jskit-ai/shell-web`, `@jskit-ai/workspaces-core`, `@jskit-ai/workspaces-web`
|
|
@@ -101,7 +101,6 @@ Exports
|
|
|
101
101
|
- `ensureDevAuthRuntimeAvailable(policy = {}, request = null)`
|
|
102
102
|
- `isDevAuthBootstrapEnabled(policy)`
|
|
103
103
|
- `isLocalDevAuthRequest(request)`
|
|
104
|
-
- `isProductionNodeEnv(nodeEnv)`
|
|
105
104
|
- `resolveDevAuthPolicy({ enabled = false, nodeEnv = "development", secret = "" } = {})`
|
|
106
105
|
- `resolveDevAuthPolicyFromEnv(env = {})`
|
|
107
106
|
Local functions
|
|
@@ -164,7 +163,6 @@ Exports
|
|
|
164
163
|
Local functions
|
|
165
164
|
- `normalizeUnsafeMethods(methodsValue)`
|
|
166
165
|
- `normalizeApiPrefix(value)`
|
|
167
|
-
- `normalizeRateLimitPluginOptions(value)`
|
|
168
166
|
- `resolveRouteConfig(request)`
|
|
169
167
|
- `enforceCsrfProtection(fastify, request, reply)`
|
|
170
168
|
- `resolveCsrfToken(request)`
|
|
@@ -367,6 +365,8 @@ Exports
|
|
|
367
365
|
- `okOutputValidator`
|
|
368
366
|
- `okMessageOutputValidator`
|
|
369
367
|
- `registerOutputValidator`
|
|
368
|
+
- `registerConfirmationResendOutputValidator`
|
|
369
|
+
- `registerConfirmOutputValidator`
|
|
370
370
|
- `loginOutputValidator`
|
|
371
371
|
- `otpVerifyOutputValidator`
|
|
372
372
|
- `oauthCompleteOutputValidator`
|
|
@@ -462,6 +462,12 @@ Exports
|
|
|
462
462
|
- `AUTH_REGISTER_CONFIRMATION_RESEND_MESSAGES`
|
|
463
463
|
- `authRegisterConfirmationResendCommand`
|
|
464
464
|
|
|
465
|
+
### `src/shared/commands/authRegisterConfirmCommand.js`
|
|
466
|
+
Exports
|
|
467
|
+
- `authRegisterConfirmBodyValidator`
|
|
468
|
+
- `AUTH_REGISTER_CONFIRM_MESSAGES`
|
|
469
|
+
- `authRegisterConfirmCommand`
|
|
470
|
+
|
|
465
471
|
### `src/shared/commands/authSessionReadCommand.js`
|
|
466
472
|
Exports
|
|
467
473
|
- `sessionOutputValidator`
|
|
@@ -473,6 +479,7 @@ Exports
|
|
|
473
479
|
Exports
|
|
474
480
|
- `authRegisterCommand`
|
|
475
481
|
- `authRegisterConfirmationResendCommand`
|
|
482
|
+
- `authRegisterConfirmCommand`
|
|
476
483
|
- `authLoginPasswordCommand`
|
|
477
484
|
- `authLoginOtpRequestCommand`
|
|
478
485
|
- `authLoginOtpVerifyCommand`
|