@selvajs/server 1.5.0-beta.0 → 1.5.0-beta.10
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/README.md +17 -17
- package/dist/access/guards.d.ts.map +1 -1
- package/dist/access/guards.js +11 -7
- package/dist/access/guards.js.map +1 -1
- package/dist/api/bodies.d.ts +0 -2
- package/dist/api/bodies.d.ts.map +1 -1
- package/dist/api/deps.d.ts +19 -1
- package/dist/api/deps.d.ts.map +1 -1
- package/dist/api/deps.js +4 -1
- package/dist/api/deps.js.map +1 -1
- package/dist/api/errors.d.ts +11 -0
- package/dist/api/errors.d.ts.map +1 -1
- package/dist/api/errors.js +15 -1
- package/dist/api/errors.js.map +1 -1
- package/dist/api/idempotency-http.d.ts.map +1 -0
- package/dist/api/idempotency-http.js.map +1 -0
- package/dist/api/idempotency.d.ts +58 -0
- package/dist/api/idempotency.d.ts.map +1 -0
- package/dist/api/idempotency.js +130 -0
- package/dist/api/idempotency.js.map +1 -0
- package/dist/api/index.d.ts +3 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +3 -0
- package/dist/api/index.js.map +1 -1
- package/dist/api/openapi.d.ts +84 -0
- package/dist/api/openapi.d.ts.map +1 -0
- package/dist/api/openapi.js +247 -0
- package/dist/api/openapi.js.map +1 -0
- package/dist/api/rate-limit.d.ts +57 -0
- package/dist/api/rate-limit.d.ts.map +1 -0
- package/dist/api/rate-limit.js +108 -0
- package/dist/api/rate-limit.js.map +1 -0
- package/dist/api/respond.d.ts +14 -9
- package/dist/api/respond.d.ts.map +1 -1
- package/dist/api/respond.js +49 -17
- package/dist/api/respond.js.map +1 -1
- package/dist/api/scope.d.ts +3 -0
- package/dist/api/scope.d.ts.map +1 -1
- package/dist/api/scope.js +8 -2
- package/dist/api/scope.js.map +1 -1
- package/dist/compute/index.d.ts +0 -1
- package/dist/compute/index.d.ts.map +1 -1
- package/dist/compute/index.js +0 -1
- package/dist/compute/index.js.map +1 -1
- package/dist/definitions/definition-service.d.ts.map +1 -1
- package/dist/definitions/definition-service.js +7 -1
- package/dist/definitions/definition-service.js.map +1 -1
- package/dist/definitions/index.d.ts +1 -1
- package/dist/definitions/index.d.ts.map +1 -1
- package/dist/definitions/index.js +1 -1
- package/dist/definitions/index.js.map +1 -1
- package/dist/definitions/visibility.d.ts +35 -1
- package/dist/definitions/visibility.d.ts.map +1 -1
- package/dist/definitions/visibility.js +94 -7
- package/dist/definitions/visibility.js.map +1 -1
- package/dist/handlers/apiTokens.d.ts +59 -4
- package/dist/handlers/apiTokens.d.ts.map +1 -1
- package/dist/handlers/apiTokens.js +96 -21
- package/dist/handlers/apiTokens.js.map +1 -1
- package/dist/handlers/definitions.d.ts +7 -1
- package/dist/handlers/definitions.d.ts.map +1 -1
- package/dist/handlers/definitions.js +32 -9
- package/dist/handlers/definitions.js.map +1 -1
- package/dist/handlers/index.d.ts +2 -1
- package/dist/handlers/index.d.ts.map +1 -1
- package/dist/handlers/index.js +2 -1
- package/dist/handlers/index.js.map +1 -1
- package/dist/handlers/me.d.ts.map +1 -1
- package/dist/handlers/me.js +9 -1
- package/dist/handlers/me.js.map +1 -1
- package/dist/handlers/oauthConsent.d.ts +37 -0
- package/dist/handlers/oauthConsent.d.ts.map +1 -0
- package/dist/handlers/oauthConsent.js +63 -0
- package/dist/handlers/oauthConsent.js.map +1 -0
- package/dist/handlers/orgMembers.d.ts.map +1 -1
- package/dist/handlers/orgMembers.js +2 -0
- package/dist/handlers/orgMembers.js.map +1 -1
- package/dist/handlers/projects.d.ts +5 -0
- package/dist/handlers/projects.d.ts.map +1 -1
- package/dist/handlers/projects.js +21 -4
- package/dist/handlers/projects.js.map +1 -1
- package/dist/handlers/services.d.ts +1 -1
- package/dist/handlers/services.d.ts.map +1 -1
- package/dist/handlers/services.js.map +1 -1
- package/dist/http/api-token.d.ts +12 -3
- package/dist/http/api-token.d.ts.map +1 -1
- package/dist/http/api-token.js +29 -6
- package/dist/http/api-token.js.map +1 -1
- package/dist/http/csrf.d.ts +18 -0
- package/dist/http/csrf.d.ts.map +1 -0
- package/dist/http/csrf.js +37 -0
- package/dist/http/csrf.js.map +1 -0
- package/dist/http/index.d.ts +1 -0
- package/dist/http/index.d.ts.map +1 -1
- package/dist/http/index.js +1 -0
- package/dist/http/index.js.map +1 -1
- package/dist/oauth/index.d.ts +160 -0
- package/dist/oauth/index.d.ts.map +1 -0
- package/dist/oauth/index.js +465 -0
- package/dist/oauth/index.js.map +1 -0
- package/dist/organizations/index.d.ts +1 -0
- package/dist/organizations/index.d.ts.map +1 -1
- package/dist/organizations/index.js +1 -0
- package/dist/organizations/index.js.map +1 -1
- package/dist/organizations/user-memberships.d.ts +11 -0
- package/dist/organizations/user-memberships.d.ts.map +1 -0
- package/dist/organizations/user-memberships.js +23 -0
- package/dist/organizations/user-memberships.js.map +1 -0
- package/dist/testing/harness.d.ts +3 -1
- package/dist/testing/harness.d.ts.map +1 -1
- package/dist/testing/harness.js +6 -1
- package/dist/testing/harness.js.map +1 -1
- package/dist/testing/index.d.ts +1 -1
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +1 -1
- package/dist/testing/index.js.map +1 -1
- package/dist/testing/scenarios.d.ts +6 -0
- package/dist/testing/scenarios.d.ts.map +1 -1
- package/dist/testing/scenarios.js +12 -1
- package/dist/testing/scenarios.js.map +1 -1
- package/dist/tokens/api-token-codec.d.ts +2 -2
- package/dist/tokens/api-token-codec.js +2 -2
- package/dist/tokens/api-token-holder.d.ts +30 -0
- package/dist/tokens/api-token-holder.d.ts.map +1 -0
- package/dist/tokens/api-token-holder.js +27 -0
- package/dist/tokens/api-token-holder.js.map +1 -0
- package/dist/tokens/index.d.ts +1 -0
- package/dist/tokens/index.d.ts.map +1 -1
- package/dist/tokens/index.js +1 -0
- package/dist/tokens/index.js.map +1 -1
- package/package.json +16 -11
- package/dist/compute/idempotency-http.d.ts.map +0 -1
- package/dist/compute/idempotency-http.js.map +0 -1
- /package/dist/{compute → api}/idempotency-http.d.ts +0 -0
- /package/dist/{compute → api}/idempotency-http.js +0 -0
package/README.md
CHANGED
|
@@ -26,23 +26,23 @@ pnpm add @selvajs/server
|
|
|
26
26
|
**There is no root export.** Import from a subpath — `import … from '@selvajs/server'` fails to
|
|
27
27
|
resolve, on purpose, so it stays visible which slice a consumer depends on.
|
|
28
28
|
|
|
29
|
-
| Export | Contents
|
|
30
|
-
| ------------------------------- |
|
|
31
|
-
| `@selvajs/server/compute` | Compute limits, rate limiting, idempotency, SSRF guard, remote-definition fetch
|
|
32
|
-
| `@selvajs/server/definitions` | Definition service, compute-schema extraction, render loader
|
|
33
|
-
| `@selvajs/server/providers` | Env-driven provider selection over a caller-supplied registry
|
|
34
|
-
| `@selvajs/server/tokens` | HMAC
|
|
35
|
-
| `@selvajs/server/errors` | Sentry-backed `IErrorReporter`
|
|
36
|
-
| `@selvajs/server/logging` | pino-backed `ILogger` + request-id correlation
|
|
37
|
-
| `@selvajs/server/http` | Security headers, body-size and redirect guards, route classification
|
|
38
|
-
| `@selvajs/server/access` | Builds the input platform's project access rules consume
|
|
39
|
-
| `@selvajs/server/ops` | Channel-aware semver comparison
|
|
40
|
-
| `@selvajs/server/api` | Transport-free API core: handler contract,
|
|
41
|
-
| `@selvajs/server/handlers` | The API handlers: business logic behind each endpoint, bound via `runHandler`
|
|
42
|
-
| `@selvajs/server/projects` | Project writes whose rules two routes must agree on
|
|
43
|
-
| `@selvajs/server/organizations` | Org-level domain services spanning more than one provider
|
|
44
|
-
| `@selvajs/server/notifications` | `SmtpNotificationProvider`, SMTP config, invite delivery
|
|
45
|
-
| `@selvajs/server/testing` | Test harness for the transport-free API handlers
|
|
29
|
+
| Export | Contents |
|
|
30
|
+
| ------------------------------- | ------------------------------------------------------------------------------------------------------- |
|
|
31
|
+
| `@selvajs/server/compute` | Compute limits, rate limiting, idempotency, SSRF guard, remote-definition fetch |
|
|
32
|
+
| `@selvajs/server/definitions` | Definition service, compute-schema extraction, render loader |
|
|
33
|
+
| `@selvajs/server/providers` | Env-driven provider selection over a caller-supplied registry |
|
|
34
|
+
| `@selvajs/server/tokens` | HMAC token codecs: capability URLs (share links, invites), `selva_` API tokens; API-token holder policy |
|
|
35
|
+
| `@selvajs/server/errors` | Sentry-backed `IErrorReporter` |
|
|
36
|
+
| `@selvajs/server/logging` | pino-backed `ILogger` + request-id correlation |
|
|
37
|
+
| `@selvajs/server/http` | Security headers, body-size and redirect guards, route classification |
|
|
38
|
+
| `@selvajs/server/access` | Builds the input platform's project access rules consume |
|
|
39
|
+
| `@selvajs/server/ops` | Channel-aware semver comparison |
|
|
40
|
+
| `@selvajs/server/api` | Transport-free API core: handler contract, deps, errors, token scope, per-token rate limit, idempotency |
|
|
41
|
+
| `@selvajs/server/handlers` | The API handlers: business logic behind each endpoint, bound via `runHandler` |
|
|
42
|
+
| `@selvajs/server/projects` | Project writes whose rules two routes must agree on |
|
|
43
|
+
| `@selvajs/server/organizations` | Org-level domain services spanning more than one provider |
|
|
44
|
+
| `@selvajs/server/notifications` | `SmtpNotificationProvider`, SMTP config, invite delivery |
|
|
45
|
+
| `@selvajs/server/testing` | Test harness for the transport-free API handlers |
|
|
46
46
|
|
|
47
47
|
Requires a `@selvajs/platform` provider (e.g. `@selvajs/local-provider` or
|
|
48
48
|
`@selvajs/supabase-provider`) for data/storage/auth.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/access/guards.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EACX,QAAQ,EACR,gBAAgB,EAEhB,aAAa,EACb,OAAO,EACP,kBAAkB,EAClB,OAAO,EACP,cAAc,EACd,WAAW,EACX,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/access/guards.ts"],"names":[],"mappings":"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"}
|
package/dist/access/guards.js
CHANGED
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* that reached for a module global would drag the whole composition root — and
|
|
21
21
|
* its top-level `await createSelvaProviders()` — into every consumer.
|
|
22
22
|
*/
|
|
23
|
-
import { isFlagEnabled, hasPermission, canReclaim, canCreateProject, canChangeOrgRole, canView, canSolve,
|
|
23
|
+
import { isFlagEnabled, hasPermission, canReclaim, canCreateProject, canChangeOrgRole, canView, canSolve, canCreateDefinition, canManage, canEditProjectSettings, canEditDefinition, outsideTokenOrg } from '@selvajs/platform';
|
|
24
24
|
import { createProjectAccessInputBuilder } from './project-access-input.js';
|
|
25
25
|
import { apiError, ApiErrorCode } from '../api/errors.js';
|
|
26
26
|
/**
|
|
@@ -147,8 +147,9 @@ async function contentCheck(check) {
|
|
|
147
147
|
}
|
|
148
148
|
async function loadProjectOr404(ctx, projectId, src) {
|
|
149
149
|
const project = await projectsOf(src).getProject(ctx, projectId);
|
|
150
|
-
if (!project)
|
|
150
|
+
if (!project || outsideTokenOrg(ctx, project.orgId)) {
|
|
151
151
|
apiError(404, ApiErrorCode.NOT_FOUND, 'Project not found');
|
|
152
|
+
}
|
|
152
153
|
return project;
|
|
153
154
|
}
|
|
154
155
|
// Rule-input assembly (the "which rows does each visibility need" knowledge)
|
|
@@ -188,11 +189,7 @@ export function projectAccessInputFromRowsWith(src, ...args) {
|
|
|
188
189
|
export async function requireCanCreateDefinition(locals, projectId) {
|
|
189
190
|
const { user, ctx } = requireAuthed(locals);
|
|
190
191
|
const project = await loadProjectOr404(ctx, projectId, locals);
|
|
191
|
-
const allowed = await contentCheck(async () =>
|
|
192
|
-
if (project.autoJoinOnUpload)
|
|
193
|
-
return true;
|
|
194
|
-
return canEdit(await buildProjectAccessInput(ctx, project, locals));
|
|
195
|
-
});
|
|
192
|
+
const allowed = await contentCheck(async () => canCreateDefinition(await buildProjectAccessInput(ctx, project, locals)));
|
|
196
193
|
if (!allowed) {
|
|
197
194
|
apiError(403, ApiErrorCode.FORBIDDEN, 'You do not have permission to upload definitions to this project.');
|
|
198
195
|
}
|
|
@@ -341,6 +338,8 @@ export async function requireCanSolve(locals, projectId,
|
|
|
341
338
|
preloadedProject) {
|
|
342
339
|
const { user, ctx } = requireAuthed(locals);
|
|
343
340
|
const project = preloadedProject ?? (await loadProjectOr404(ctx, projectId, locals));
|
|
341
|
+
if (outsideTokenOrg(ctx, project.orgId))
|
|
342
|
+
apiError(404, ApiErrorCode.NOT_FOUND, 'Project not found');
|
|
344
343
|
const allowed = await contentCheck(async () => canSolve(await buildProjectAccessInput(ctx, project, locals)));
|
|
345
344
|
if (!allowed)
|
|
346
345
|
apiError(403, ApiErrorCode.FORBIDDEN, 'You do not have access to this project.');
|
|
@@ -371,6 +370,9 @@ export async function requireEditableDefinition(locals, guid) {
|
|
|
371
370
|
projectsOf(locals).getProject(ctx, record.projectId),
|
|
372
371
|
projectsOf(locals).getProjectMember(ctx, record.projectId, ctx.userId)
|
|
373
372
|
]);
|
|
373
|
+
if (project && outsideTokenOrg(ctx, project.orgId)) {
|
|
374
|
+
apiError(404, ApiErrorCode.NOT_FOUND, 'Definition not found');
|
|
375
|
+
}
|
|
374
376
|
const allowed = await contentCheck(async () => canEditDefinition({
|
|
375
377
|
project,
|
|
376
378
|
definition: record,
|
|
@@ -400,6 +402,8 @@ preloaded) {
|
|
|
400
402
|
: definitionMetaOf(locals).get(ctx, definitionGuid),
|
|
401
403
|
projectsOf(locals).getProjectMember(ctx, projectId, ctx.userId)
|
|
402
404
|
]);
|
|
405
|
+
if (project && outsideTokenOrg(ctx, project.orgId))
|
|
406
|
+
return false;
|
|
403
407
|
return canEditDefinition({
|
|
404
408
|
project,
|
|
405
409
|
definition,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/access/guards.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/access/guards.ts"],"names":[],"mappings":"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"}
|
package/dist/api/bodies.d.ts
CHANGED
|
@@ -76,7 +76,6 @@ export declare const CreateInviteBodySchema: z.ZodObject<{
|
|
|
76
76
|
manage_org_compute: "manage_org_compute";
|
|
77
77
|
manage_definitions: "manage_definitions";
|
|
78
78
|
manage_projects: "manage_projects";
|
|
79
|
-
read_all_org_projects: "read_all_org_projects";
|
|
80
79
|
}>]>>>;
|
|
81
80
|
}, z.core.$strip>;
|
|
82
81
|
export declare const OrgComputePatchBodySchema: z.ZodObject<{
|
|
@@ -101,7 +100,6 @@ export declare const UpdateOrgMemberBodySchema: z.ZodObject<{
|
|
|
101
100
|
manage_org_compute: "manage_org_compute";
|
|
102
101
|
manage_definitions: "manage_definitions";
|
|
103
102
|
manage_projects: "manage_projects";
|
|
104
|
-
read_all_org_projects: "read_all_org_projects";
|
|
105
103
|
}>>>;
|
|
106
104
|
}, z.core.$strip>;
|
|
107
105
|
export declare const CreateApiTokenBodySchema: z.ZodObject<{
|
package/dist/api/bodies.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bodies.d.ts","sourceRoot":"","sources":["../../src/api/bodies.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAiBxB,eAAO,MAAM,eAAe;;;;;;;;;iBAO1B,CAAC;AAMH,eAAO,MAAM,uBAAuB;;;;;;;;;;iBAKlC,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;;;;;iBAOzB,CAAC;AAEZ,eAAO,MAAM,0BAA0B;;;;;;;iBAGrC,CAAC;AAEH,eAAO,MAAM,6BAA6B;;;;;;iBAAwC,CAAC;AASnF,eAAO,MAAM,sBAAsB
|
|
1
|
+
{"version":3,"file":"bodies.d.ts","sourceRoot":"","sources":["../../src/api/bodies.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAiBxB,eAAO,MAAM,eAAe;;;;;;;;;iBAO1B,CAAC;AAMH,eAAO,MAAM,uBAAuB;;;;;;;;;;iBAKlC,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;;;;;iBAOzB,CAAC;AAEZ,eAAO,MAAM,0BAA0B;;;;;;;iBAGrC,CAAC;AAEH,eAAO,MAAM,6BAA6B;;;;;;iBAAwC,CAAC;AASnF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;iBAIjC,CAAC;AAiBH,eAAO,MAAM,yBAAyB;;;;;;;;;;iBAIpC,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;iBASnC,CAAC;AAMJ,eAAO,MAAM,wBAAwB;;;;iBAInC,CAAC"}
|
package/dist/api/deps.d.ts
CHANGED
|
@@ -15,6 +15,9 @@ import type { DefinitionService } from '../definitions/definition-service.js';
|
|
|
15
15
|
import type { OrgAssetService } from '../organizations/org-asset-service.js';
|
|
16
16
|
import type { TokenCodec } from '../tokens/token-codec.js';
|
|
17
17
|
import type { ApiTokenCodec } from '../tokens/api-token-codec.js';
|
|
18
|
+
import type { ApiTokenHolderPolicy } from '../tokens/api-token-holder.js';
|
|
19
|
+
import type { ApiRateLimiter } from './rate-limit.js';
|
|
20
|
+
import type { ApiIdempotencyStore } from './idempotency.js';
|
|
18
21
|
import type { IAuthProvider, IDataProvider, IEventSink, INotificationProvider, IStorageProvider, SelvaConfig, SelvaFlags } from '@selvajs/platform';
|
|
19
22
|
export interface SelvaDeps {
|
|
20
23
|
auth: IAuthProvider;
|
|
@@ -66,6 +69,8 @@ export interface SelvaDeps {
|
|
|
66
69
|
invites?: TokenCodec;
|
|
67
70
|
/** Without it, minting answers 503 `API_TOKENS_UNAVAILABLE`. */
|
|
68
71
|
apiTokens?: ApiTokenCodec;
|
|
72
|
+
/** Who may mint and use API tokens. Absent: the platform permission `manage_api_tokens`. */
|
|
73
|
+
mayHoldApiTokens?: ApiTokenHolderPolicy;
|
|
69
74
|
};
|
|
70
75
|
/**
|
|
71
76
|
* Upload caps, in bytes.
|
|
@@ -90,8 +95,18 @@ export interface SelvaDeps {
|
|
|
90
95
|
* handlers report `not-configured` rather than failing the write.
|
|
91
96
|
*/
|
|
92
97
|
notifications?: INotificationProvider;
|
|
98
|
+
/**
|
|
99
|
+
* Per-token request limit `runHandler` charges. Absent: the process-wide
|
|
100
|
+
* default (`DEFAULT_API_RATE_LIMIT`). `null`: no limit. A host's own limiter
|
|
101
|
+
* must outlive the request, since deps are rebuilt per request.
|
|
102
|
+
*/
|
|
103
|
+
apiRateLimiter?: ApiRateLimiter | null;
|
|
104
|
+
/** Replay store for routes mounted with `idempotent: true`. Absent: the process-wide default. */
|
|
105
|
+
idempotency?: ApiIdempotencyStore;
|
|
93
106
|
/** Instance display name, used where a record has none. */
|
|
94
107
|
instanceName: string;
|
|
108
|
+
/** Where a person manages their API tokens, linked from the new-key email. Host-relative. */
|
|
109
|
+
apiTokenSettingsPath: string;
|
|
95
110
|
/**
|
|
96
111
|
* Drop the host's warm compute client for one server id.
|
|
97
112
|
*
|
|
@@ -128,11 +143,14 @@ export interface SelvaDeps {
|
|
|
128
143
|
* `tokens` arrives in an options object rather than as a third positional, so
|
|
129
144
|
* the two composed bags cannot be swapped at a call site.
|
|
130
145
|
*/
|
|
131
|
-
export declare function depsFromConfig(config: SelvaConfig, services?: SelvaDeps['services'], { tokens, uploadLimits, evictComputeClient, notifications, instanceName }?: {
|
|
146
|
+
export declare function depsFromConfig(config: SelvaConfig, services?: SelvaDeps['services'], { tokens, uploadLimits, evictComputeClient, notifications, instanceName, apiTokenSettingsPath, apiRateLimiter, idempotency }?: {
|
|
132
147
|
tokens?: SelvaDeps['tokens'];
|
|
133
148
|
uploadLimits?: Partial<SelvaDeps['uploadLimits']>;
|
|
134
149
|
evictComputeClient?: SelvaDeps['evictComputeClient'];
|
|
135
150
|
notifications?: INotificationProvider;
|
|
136
151
|
instanceName?: string;
|
|
152
|
+
apiTokenSettingsPath?: string;
|
|
153
|
+
apiRateLimiter?: ApiRateLimiter | null;
|
|
154
|
+
idempotency?: ApiIdempotencyStore;
|
|
137
155
|
}): SelvaDeps;
|
|
138
156
|
//# sourceMappingURL=deps.d.ts.map
|
package/dist/api/deps.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deps.d.ts","sourceRoot":"","sources":["../../src/api/deps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EACX,aAAa,EACb,aAAa,EACb,UAAU,EACV,qBAAqB,EACrB,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,IAAI,EAAE,aAAa,CAAC;IACpB,uEAAuE;IACvE,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5B,uCAAuC;IACvC,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IACpC,0DAA0D;IAC1D,cAAc,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IAC7C,aAAa,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IAC9C,WAAW,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IAC1C,UAAU,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IACxC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IAClC,WAAW,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IAC1C,qBAAqB,EAAE,aAAa,CAAC,uBAAuB,CAAC,CAAC;IAC9D;;;;;;;OAOG;IACH,MAAM,EAAE,UAAU,CAAC;IACnB;;;;OAIG;IACH,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,UAAU,KAAK,OAAO,CAAC;IAC1C;;;;;;;;;;;;;OAaG;IACH,MAAM,EAAE;QACP,UAAU,CAAC,EAAE,UAAU,CAAC;QACxB,OAAO,CAAC,EAAE,UAAU,CAAC;QACrB,gEAAgE;QAChE,SAAS,CAAC,EAAE,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"deps.d.ts","sourceRoot":"","sources":["../../src/api/deps.ts"],"names":[],"mappings":"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"}
|
package/dist/api/deps.js
CHANGED
|
@@ -21,7 +21,7 @@ import { isFlagEnabled, NoopEventSink } from '@selvajs/platform';
|
|
|
21
21
|
* `tokens` arrives in an options object rather than as a third positional, so
|
|
22
22
|
* the two composed bags cannot be swapped at a call site.
|
|
23
23
|
*/
|
|
24
|
-
export function depsFromConfig(config, services = {}, { tokens = {}, uploadLimits, evictComputeClient = () => { }, notifications, instanceName = 'Selva' } = {}) {
|
|
24
|
+
export function depsFromConfig(config, services = {}, { tokens = {}, uploadLimits, evictComputeClient = () => { }, notifications, instanceName = 'Selva', apiTokenSettingsPath = '/settings/tokens', apiRateLimiter, idempotency } = {}) {
|
|
25
25
|
const { data } = config;
|
|
26
26
|
return {
|
|
27
27
|
auth: config.auth,
|
|
@@ -49,6 +49,9 @@ export function depsFromConfig(config, services = {}, { tokens = {}, uploadLimit
|
|
|
49
49
|
evictComputeClient,
|
|
50
50
|
notifications,
|
|
51
51
|
instanceName,
|
|
52
|
+
apiTokenSettingsPath,
|
|
53
|
+
apiRateLimiter,
|
|
54
|
+
idempotency,
|
|
52
55
|
services
|
|
53
56
|
};
|
|
54
57
|
}
|
package/dist/api/deps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deps.js","sourceRoot":"","sources":["../../src/api/deps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"deps.js","sourceRoot":"","sources":["../../src/api/deps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAsIjE;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAC7B,MAAmB,EACnB,WAAkC,EAAE,EACpC,EACC,MAAM,GAAG,EAAE,EACX,YAAY,EACZ,kBAAkB,GAAG,GAAG,EAAE,GAAE,CAAC,EAC7B,aAAa,EACb,YAAY,GAAG,OAAO,EACtB,oBAAoB,GAAG,kBAAkB,EACzC,cAAc,EACd,WAAW,KAUR,EAAE;IAEN,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IACxB,OAAO;QACN,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,IAAI;QACJ,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,cAAc,EAAE,IAAI,CAAC,WAAW;QAChC,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;QACjD,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI,aAAa,EAAE;QAC5C,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC;QAC3C,MAAM;QACN,qEAAqE;QACrE,sEAAsE;QACtE,sEAAsE;QACtE,YAAY,EAAE;YACb,qBAAqB,EAAE,YAAY,EAAE,qBAAqB,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI;YAC9E,gBAAgB,EAAE,YAAY,EAAE,gBAAgB,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI;SACpE;QACD,kBAAkB;QAClB,aAAa;QACb,YAAY;QACZ,oBAAoB;QACpB,cAAc;QACd,WAAW;QACX,QAAQ;KACR,CAAC;AACH,CAAC"}
|
package/dist/api/errors.d.ts
CHANGED
|
@@ -20,6 +20,10 @@ export declare const ApiErrorCode: {
|
|
|
20
20
|
readonly INTERNAL: "INTERNAL";
|
|
21
21
|
/** API tokens are switched off or misconfigured here; browser sessions still work. */
|
|
22
22
|
readonly API_TOKENS_UNAVAILABLE: "API_TOKENS_UNAVAILABLE";
|
|
23
|
+
/** Too many requests, or a share link's solve cap is spent. `Retry-After`, when sent, says when to retry. */
|
|
24
|
+
readonly RATE_LIMITED: "RATE_LIMITED";
|
|
25
|
+
/** The key is valid, but the host's holder policy no longer lets its owner hold API tokens. */
|
|
26
|
+
readonly API_TOKEN_HOLDER_REFUSED: "API_TOKEN_HOLDER_REFUSED";
|
|
23
27
|
};
|
|
24
28
|
export type ApiErrorCode = (typeof ApiErrorCode)[keyof typeof ApiErrorCode];
|
|
25
29
|
export declare class ApiError extends Error {
|
|
@@ -31,6 +35,13 @@ export declare class ApiError extends Error {
|
|
|
31
35
|
readonly details?: Record<string, string>;
|
|
32
36
|
constructor(status: number, code: ApiErrorCode, message: string, fields?: Record<string, string>, details?: Record<string, string>);
|
|
33
37
|
}
|
|
38
|
+
export interface ApiErrorBody {
|
|
39
|
+
message: string;
|
|
40
|
+
code: ApiErrorCode;
|
|
41
|
+
fields?: Record<string, string>;
|
|
42
|
+
details?: Record<string, string>;
|
|
43
|
+
}
|
|
44
|
+
export declare function toErrorBody(err: ApiError): ApiErrorBody;
|
|
34
45
|
export declare function isApiError(err: unknown): err is ApiError;
|
|
35
46
|
/** Raise a structured API error. The only way handlers should fail. */
|
|
36
47
|
export declare function apiError(status: number, code: ApiErrorCode, message: string, fields?: Record<string, string>, details?: Record<string, string>): never;
|
package/dist/api/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/api/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,iFAAiF;AACjF,eAAO,MAAM,YAAY;;;;;;;;;;IAUxB,sFAAsF;;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/api/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,iFAAiF;AACjF,eAAO,MAAM,YAAY;;;;;;;;;;IAUxB,sFAAsF;;IAEtF,6GAA6G;;IAE7G,+FAA+F;;CAEtF,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;AAE5E,qBAAa,QAAS,SAAQ,KAAK;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,sFAAsF;IACtF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,yEAAyE;IACzE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAGzC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CASjC;AAED,MAAM,WAAW,YAAY;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,QAAQ,GAAG,YAAY,CAKvD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,QAAQ,CAExD;AAED,uEAAuE;AACvE,wBAAgB,QAAQ,CACvB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,KAAK,CAEP;AAED,qFAAqF;AACrF,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAqB1D"}
|
package/dist/api/errors.js
CHANGED
|
@@ -19,7 +19,11 @@ export const ApiErrorCode = {
|
|
|
19
19
|
SETUP_REQUIRED: 'SETUP_REQUIRED',
|
|
20
20
|
INTERNAL: 'INTERNAL',
|
|
21
21
|
/** API tokens are switched off or misconfigured here; browser sessions still work. */
|
|
22
|
-
API_TOKENS_UNAVAILABLE: 'API_TOKENS_UNAVAILABLE'
|
|
22
|
+
API_TOKENS_UNAVAILABLE: 'API_TOKENS_UNAVAILABLE',
|
|
23
|
+
/** Too many requests, or a share link's solve cap is spent. `Retry-After`, when sent, says when to retry. */
|
|
24
|
+
RATE_LIMITED: 'RATE_LIMITED',
|
|
25
|
+
/** The key is valid, but the host's holder policy no longer lets its owner hold API tokens. */
|
|
26
|
+
API_TOKEN_HOLDER_REFUSED: 'API_TOKEN_HOLDER_REFUSED'
|
|
23
27
|
};
|
|
24
28
|
export class ApiError extends Error {
|
|
25
29
|
status;
|
|
@@ -37,6 +41,14 @@ export class ApiError extends Error {
|
|
|
37
41
|
this.details = details;
|
|
38
42
|
}
|
|
39
43
|
}
|
|
44
|
+
export function toErrorBody(err) {
|
|
45
|
+
const body = { message: err.message, code: err.code };
|
|
46
|
+
if (err.fields)
|
|
47
|
+
body.fields = err.fields;
|
|
48
|
+
if (err.details)
|
|
49
|
+
body.details = err.details;
|
|
50
|
+
return body;
|
|
51
|
+
}
|
|
40
52
|
export function isApiError(err) {
|
|
41
53
|
return err instanceof ApiError;
|
|
42
54
|
}
|
|
@@ -59,6 +71,8 @@ export function codeForStatus(status) {
|
|
|
59
71
|
return ApiErrorCode.CONFLICT;
|
|
60
72
|
case 422:
|
|
61
73
|
return ApiErrorCode.UNPROCESSABLE;
|
|
74
|
+
case 429:
|
|
75
|
+
return ApiErrorCode.RATE_LIMITED;
|
|
62
76
|
case 503:
|
|
63
77
|
return ApiErrorCode.COMPUTE_UNAVAILABLE;
|
|
64
78
|
default:
|
package/dist/api/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/api/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,iFAAiF;AACjF,MAAM,CAAC,MAAM,YAAY,GAAG;IAC3B,iBAAiB,EAAE,mBAAmB;IACtC,YAAY,EAAE,cAAc;IAC5B,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;IACpB,aAAa,EAAE,eAAe;IAC9B,mBAAmB,EAAE,qBAAqB;IAC1C,cAAc,EAAE,gBAAgB;IAChC,QAAQ,EAAE,UAAU;IACpB,sFAAsF;IACtF,sBAAsB,EAAE,wBAAwB;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/api/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,iFAAiF;AACjF,MAAM,CAAC,MAAM,YAAY,GAAG;IAC3B,iBAAiB,EAAE,mBAAmB;IACtC,YAAY,EAAE,cAAc;IAC5B,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;IACpB,aAAa,EAAE,eAAe;IAC9B,mBAAmB,EAAE,qBAAqB;IAC1C,cAAc,EAAE,gBAAgB;IAChC,QAAQ,EAAE,UAAU;IACpB,sFAAsF;IACtF,sBAAsB,EAAE,wBAAwB;IAChD,6GAA6G;IAC7G,YAAY,EAAE,cAAc;IAC5B,+FAA+F;IAC/F,wBAAwB,EAAE,0BAA0B;CAC3C,CAAC;AAIX,MAAM,OAAO,QAAS,SAAQ,KAAK;IACzB,MAAM,CAAS;IACf,IAAI,CAAe;IAC5B,sFAAsF;IAC7E,MAAM,CAA0B;IACzC,yEAAyE;IAChE,OAAO,CAA0B;IAE1C,YACC,MAAc,EACd,IAAkB,EAClB,OAAe,EACf,MAA+B,EAC/B,OAAgC;QAEhC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,CAAC;CACD;AASD,MAAM,UAAU,WAAW,CAAC,GAAa;IACxC,MAAM,IAAI,GAAiB,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;IACpE,IAAI,GAAG,CAAC,MAAM;QAAE,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IACzC,IAAI,GAAG,CAAC,OAAO;QAAE,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IAC5C,OAAO,IAAI,CAAC;AACb,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAY;IACtC,OAAO,GAAG,YAAY,QAAQ,CAAC;AAChC,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,QAAQ,CACvB,MAAc,EACd,IAAkB,EAClB,OAAe,EACf,MAA+B,EAC/B,OAAgC;IAEhC,MAAM,IAAI,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAC5D,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,aAAa,CAAC,MAAc;IAC3C,QAAQ,MAAM,EAAE,CAAC;QAChB,KAAK,GAAG;YACP,OAAO,YAAY,CAAC,iBAAiB,CAAC;QACvC,KAAK,GAAG;YACP,OAAO,YAAY,CAAC,YAAY,CAAC;QAClC,KAAK,GAAG;YACP,OAAO,YAAY,CAAC,SAAS,CAAC;QAC/B,KAAK,GAAG;YACP,OAAO,YAAY,CAAC,SAAS,CAAC;QAC/B,KAAK,GAAG;YACP,OAAO,YAAY,CAAC,QAAQ,CAAC;QAC9B,KAAK,GAAG;YACP,OAAO,YAAY,CAAC,aAAa,CAAC;QACnC,KAAK,GAAG;YACP,OAAO,YAAY,CAAC,YAAY,CAAC;QAClC,KAAK,GAAG;YACP,OAAO,YAAY,CAAC,mBAAmB,CAAC;QACzC;YACC,OAAO,YAAY,CAAC,QAAQ,CAAC;IAC/B,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idempotency-http.d.ts","sourceRoot":"","sources":["../../src/api/idempotency-http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,8EAA8E;AAC9E,eAAO,MAAM,2BAA2B,yBAAyB,CAAC;AAElE;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IAC5B,IAAI,EAAE,WAAW,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,mEAAmE;AACnE,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,CAM7E;AAED,iFAAiF;AACjF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,GAAG,QAAQ,CAItF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idempotency-http.js","sourceRoot":"","sources":["../../src/api/idempotency-http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,8EAA8E;AAC9E,MAAM,CAAC,MAAM,2BAA2B,GAAG,sBAAsB,CAAC;AAYlE;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,SAAiB;IACjE,OAAO,GAAG,QAAQ,IAAI,SAAS,EAAE,CAAC;AACnC,CAAC;AAED,mEAAmE;AACnE,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAa;IACnD,OAAO;QACN,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,OAAO,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACnC,IAAI,EAAE,MAAM,GAAG,CAAC,WAAW,EAAE;KAC7B,CAAC;AACH,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,kBAAkB,CAAC,MAAsB,EAAE,QAAiB;IAC3E,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,QAAQ;QAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,MAAM,CAAC,CAAC;IAC/D,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;AACtE,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `Idempotency-Key` for mounted routes that opt in with `idempotent: true`.
|
|
3
|
+
*
|
|
4
|
+
* Built on the generic store (`../compute/idempotency.ts`) and the wire
|
|
5
|
+
* contract (`./idempotency-http.ts`). The store absorbs in-flight and near-term
|
|
6
|
+
* retries in this process; it is not a durable record. A create that must never duplicate also needs the key on
|
|
7
|
+
* the created row under a unique constraint, written in the same transaction.
|
|
8
|
+
*
|
|
9
|
+
* Each entry carries a fingerprint of method, path, query and body, so a client that
|
|
10
|
+
* reuses a key for a different request gets 422 instead of someone else's
|
|
11
|
+
* replay. Only responses below 400 are kept: a failed attempt frees the key so
|
|
12
|
+
* a corrected retry can run.
|
|
13
|
+
*/
|
|
14
|
+
import type { RequestContext } from '@selvajs/platform';
|
|
15
|
+
import { type IdempotencyStore } from '../compute/idempotency.js';
|
|
16
|
+
import { type StoredResponse } from './idempotency-http.js';
|
|
17
|
+
export declare const IDEMPOTENCY_KEY_HEADER = "Idempotency-Key";
|
|
18
|
+
export declare const MAX_IDEMPOTENCY_KEY_LENGTH = 255;
|
|
19
|
+
/** Covers a client's retry-on-timeout window without turning into a result cache. */
|
|
20
|
+
export declare const DEFAULT_API_IDEMPOTENCY_TTL_MS: number;
|
|
21
|
+
export interface IdempotentEntry {
|
|
22
|
+
fingerprint: string;
|
|
23
|
+
response: StoredResponse;
|
|
24
|
+
}
|
|
25
|
+
export type ApiIdempotencyStore = IdempotencyStore<IdempotentEntry>;
|
|
26
|
+
export declare function createApiIdempotencyStore(ttlMs?: number): ApiIdempotencyStore;
|
|
27
|
+
/** The store `depsFromConfig` wires when the host passes none. One per process. */
|
|
28
|
+
export declare function defaultApiIdempotencyStore(): ApiIdempotencyStore;
|
|
29
|
+
/**
|
|
30
|
+
* The narrowest identity a key is namespaced by: the token for a token
|
|
31
|
+
* request, so two keys of one user never share replays, else the user.
|
|
32
|
+
*/
|
|
33
|
+
export declare function idempotencyCallerId(ctx: RequestContext): string;
|
|
34
|
+
/** Read and validate the client's key. `null` when the header is absent. */
|
|
35
|
+
export declare function readIdempotencyKey(request: Request): string | null;
|
|
36
|
+
/** SHA-256 over method, path with query, and body, hex. */
|
|
37
|
+
export declare function requestFingerprint(method: string, url: URL, body: ArrayBuffer | string): Promise<string>;
|
|
38
|
+
/**
|
|
39
|
+
* The body `requestFingerprint` should hash, read from a clone so the handler
|
|
40
|
+
* can still consume the original.
|
|
41
|
+
*
|
|
42
|
+
* Multipart is canonicalized to its fields and file contents: clients pick a
|
|
43
|
+
* fresh random boundary per request, so the raw bytes of an identical retry
|
|
44
|
+
* never match.
|
|
45
|
+
*/
|
|
46
|
+
export declare function fingerprintBody(request: Request): Promise<ArrayBuffer | string>;
|
|
47
|
+
/**
|
|
48
|
+
* Run `fn` once per `(callerId, clientKey)`, replaying its response to repeats
|
|
49
|
+
* with `Idempotency-Replayed: true`. Throws 422 when the key was used for a
|
|
50
|
+
* different request. Errors `fn` throws propagate and free the key.
|
|
51
|
+
*/
|
|
52
|
+
export declare function runIdempotent({ store, callerId, clientKey, fingerprint }: {
|
|
53
|
+
store: ApiIdempotencyStore;
|
|
54
|
+
callerId: string;
|
|
55
|
+
clientKey: string;
|
|
56
|
+
fingerprint: string;
|
|
57
|
+
}, fn: () => Promise<Response>): Promise<Response>;
|
|
58
|
+
//# sourceMappingURL=idempotency.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idempotency.d.ts","sourceRoot":"","sources":["../../src/api/idempotency.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC1F,OAAO,EAIN,KAAK,cAAc,EACnB,MAAM,uBAAuB,CAAC;AAG/B,eAAO,MAAM,sBAAsB,oBAAoB,CAAC;AACxD,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAC9C,qFAAqF;AACrF,eAAO,MAAM,8BAA8B,QAAa,CAAC;AAEzD,MAAM,WAAW,eAAe;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,cAAc,CAAC;CACzB;AAED,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC;AAEpE,wBAAgB,yBAAyB,CACxC,KAAK,SAAiC,GACpC,mBAAmB,CAErB;AAID,mFAAmF;AACnF,wBAAgB,0BAA0B,IAAI,mBAAmB,CAEhE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CAE/D;AAED,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAWlE;AAOD,2DAA2D;AAC3D,wBAAsB,kBAAkB,CACvC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,WAAW,GAAG,MAAM,GACxB,OAAO,CAAC,MAAM,CAAC,CAOjB;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,CAsBrF;AAmBD;;;;GAIG;AACH,wBAAsB,aAAa,CAClC,EACC,KAAK,EACL,QAAQ,EACR,SAAS,EACT,WAAW,EACX,EAAE;IAAE,KAAK,EAAE,mBAAmB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EAC3F,EAAE,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,GACzB,OAAO,CAAC,QAAQ,CAAC,CAiBnB"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `Idempotency-Key` for mounted routes that opt in with `idempotent: true`.
|
|
3
|
+
*
|
|
4
|
+
* Built on the generic store (`../compute/idempotency.ts`) and the wire
|
|
5
|
+
* contract (`./idempotency-http.ts`). The store absorbs in-flight and near-term
|
|
6
|
+
* retries in this process; it is not a durable record. A create that must never duplicate also needs the key on
|
|
7
|
+
* the created row under a unique constraint, written in the same transaction.
|
|
8
|
+
*
|
|
9
|
+
* Each entry carries a fingerprint of method, path, query and body, so a client that
|
|
10
|
+
* reuses a key for a different request gets 422 instead of someone else's
|
|
11
|
+
* replay. Only responses below 400 are kept: a failed attempt frees the key so
|
|
12
|
+
* a corrected retry can run.
|
|
13
|
+
*/
|
|
14
|
+
import { createIdempotencyStore } from '../compute/idempotency.js';
|
|
15
|
+
import { fromStoredResponse, idempotencyKey, toStoredResponse } from './idempotency-http.js';
|
|
16
|
+
import { apiError, ApiErrorCode } from './errors.js';
|
|
17
|
+
export const IDEMPOTENCY_KEY_HEADER = 'Idempotency-Key';
|
|
18
|
+
export const MAX_IDEMPOTENCY_KEY_LENGTH = 255;
|
|
19
|
+
/** Covers a client's retry-on-timeout window without turning into a result cache. */
|
|
20
|
+
export const DEFAULT_API_IDEMPOTENCY_TTL_MS = 5 * 60_000;
|
|
21
|
+
export function createApiIdempotencyStore(ttlMs = DEFAULT_API_IDEMPOTENCY_TTL_MS) {
|
|
22
|
+
return createIdempotencyStore({ ttlMs });
|
|
23
|
+
}
|
|
24
|
+
let sharedDefault;
|
|
25
|
+
/** The store `depsFromConfig` wires when the host passes none. One per process. */
|
|
26
|
+
export function defaultApiIdempotencyStore() {
|
|
27
|
+
return (sharedDefault ??= createApiIdempotencyStore());
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The narrowest identity a key is namespaced by: the token for a token
|
|
31
|
+
* request, so two keys of one user never share replays, else the user.
|
|
32
|
+
*/
|
|
33
|
+
export function idempotencyCallerId(ctx) {
|
|
34
|
+
return ctx.apiScope ? `token:${ctx.apiScope.tokenId}` : `user:${ctx.userId}`;
|
|
35
|
+
}
|
|
36
|
+
/** Read and validate the client's key. `null` when the header is absent. */
|
|
37
|
+
export function readIdempotencyKey(request) {
|
|
38
|
+
const key = request.headers.get(IDEMPOTENCY_KEY_HEADER);
|
|
39
|
+
if (key === null)
|
|
40
|
+
return null;
|
|
41
|
+
if (key.length === 0 || key.length > MAX_IDEMPOTENCY_KEY_LENGTH) {
|
|
42
|
+
apiError(400, ApiErrorCode.VALIDATION_FAILED, `${IDEMPOTENCY_KEY_HEADER} must be 1 to ${MAX_IDEMPOTENCY_KEY_LENGTH} characters.`);
|
|
43
|
+
}
|
|
44
|
+
return key;
|
|
45
|
+
}
|
|
46
|
+
async function sha256Hex(bytes) {
|
|
47
|
+
const digest = await crypto.subtle.digest('SHA-256', bytes);
|
|
48
|
+
return Array.from(new Uint8Array(digest), (b) => b.toString(16).padStart(2, '0')).join('');
|
|
49
|
+
}
|
|
50
|
+
/** SHA-256 over method, path with query, and body, hex. */
|
|
51
|
+
export async function requestFingerprint(method, url, body) {
|
|
52
|
+
const head = new TextEncoder().encode(`${method.toUpperCase()} ${url.pathname}${url.search}\n`);
|
|
53
|
+
const tail = typeof body === 'string' ? new TextEncoder().encode(body) : new Uint8Array(body);
|
|
54
|
+
const bytes = new Uint8Array(head.length + tail.length);
|
|
55
|
+
bytes.set(head);
|
|
56
|
+
bytes.set(tail, head.length);
|
|
57
|
+
return sha256Hex(bytes);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* The body `requestFingerprint` should hash, read from a clone so the handler
|
|
61
|
+
* can still consume the original.
|
|
62
|
+
*
|
|
63
|
+
* Multipart is canonicalized to its fields and file contents: clients pick a
|
|
64
|
+
* fresh random boundary per request, so the raw bytes of an identical retry
|
|
65
|
+
* never match.
|
|
66
|
+
*/
|
|
67
|
+
export async function fingerprintBody(request) {
|
|
68
|
+
const type = request.headers.get('content-type') ?? '';
|
|
69
|
+
if (!type.toLowerCase().startsWith('multipart/form-data')) {
|
|
70
|
+
return request.clone().arrayBuffer();
|
|
71
|
+
}
|
|
72
|
+
let form;
|
|
73
|
+
try {
|
|
74
|
+
form = await request.clone().formData();
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// Malformed: hash the raw bytes and let the handler refuse it.
|
|
78
|
+
return request.clone().arrayBuffer();
|
|
79
|
+
}
|
|
80
|
+
const parts = [];
|
|
81
|
+
for (const [name, value] of form) {
|
|
82
|
+
parts.push([
|
|
83
|
+
name,
|
|
84
|
+
typeof value === 'string'
|
|
85
|
+
? value
|
|
86
|
+
: { file: value.name, type: value.type, sha256: await sha256Hex(await value.arrayBuffer()) }
|
|
87
|
+
]);
|
|
88
|
+
}
|
|
89
|
+
return JSON.stringify(parts);
|
|
90
|
+
}
|
|
91
|
+
class NotReplayable {
|
|
92
|
+
fingerprint;
|
|
93
|
+
response;
|
|
94
|
+
constructor(fingerprint, response) {
|
|
95
|
+
this.fingerprint = fingerprint;
|
|
96
|
+
this.response = response;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
function assertSameRequest(stored, fingerprint) {
|
|
100
|
+
if (stored !== fingerprint) {
|
|
101
|
+
apiError(422, ApiErrorCode.UNPROCESSABLE, `This ${IDEMPOTENCY_KEY_HEADER} was already used for a different request.`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Run `fn` once per `(callerId, clientKey)`, replaying its response to repeats
|
|
106
|
+
* with `Idempotency-Replayed: true`. Throws 422 when the key was used for a
|
|
107
|
+
* different request. Errors `fn` throws propagate and free the key.
|
|
108
|
+
*/
|
|
109
|
+
export async function runIdempotent({ store, callerId, clientKey, fingerprint }, fn) {
|
|
110
|
+
let outcome;
|
|
111
|
+
try {
|
|
112
|
+
outcome = await store.run(idempotencyKey(callerId, clientKey), async () => {
|
|
113
|
+
const res = await fn();
|
|
114
|
+
const response = await toStoredResponse(res);
|
|
115
|
+
if (res.status >= 400)
|
|
116
|
+
throw new NotReplayable(fingerprint, response);
|
|
117
|
+
return { fingerprint, response };
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
catch (err) {
|
|
121
|
+
if (!(err instanceof NotReplayable))
|
|
122
|
+
throw err;
|
|
123
|
+
// A concurrent retry joining the failed attempt receives the same failure.
|
|
124
|
+
assertSameRequest(err.fingerprint, fingerprint);
|
|
125
|
+
return fromStoredResponse(err.response, false);
|
|
126
|
+
}
|
|
127
|
+
assertSameRequest(outcome.value.fingerprint, fingerprint);
|
|
128
|
+
return fromStoredResponse(outcome.value.response, outcome.replayed);
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=idempotency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idempotency.js","sourceRoot":"","sources":["../../src/api/idempotency.ts"],"names":[],"mappings":"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"}
|
package/dist/api/index.d.ts
CHANGED
|
@@ -5,8 +5,11 @@ export { collection, created, noContent } from './responses.js';
|
|
|
5
5
|
export { shaped, shapedCollection } from './shaped.js';
|
|
6
6
|
export { formText, parseBody, parseParam, requireCaller, requireParams, requireUpload, throwZodError } from './request.js';
|
|
7
7
|
export { runHandler, toErrorBody, type ApiErrorBody, type RunHandlerOptions } from './respond.js';
|
|
8
|
+
export { createApiRateLimiter, defaultApiRateLimiter, resolveApiRateLimitConfig, chargeApiRateLimit, rateLimitHeaders, rateLimitedResponse, withRateLimitHeaders, DEFAULT_API_RATE_LIMIT, type ApiRateLimiter, type ApiRateLimitConfig, type ApiRateLimitVerdict } from './rate-limit.js';
|
|
9
|
+
export { createApiIdempotencyStore, defaultApiIdempotencyStore, idempotencyCallerId, readIdempotencyKey, requestFingerprint, runIdempotent, IDEMPOTENCY_KEY_HEADER, MAX_IDEMPOTENCY_KEY_LENGTH, DEFAULT_API_IDEMPOTENCY_TTL_MS, type ApiIdempotencyStore, type IdempotentEntry } from './idempotency.js';
|
|
8
10
|
export { assertScope, actionForMethod, scopeRefusalsToday, projectScopeTarget, definitionScopeTarget } from './scope.js';
|
|
9
11
|
export { mapCoreError } from './map-core-error.js';
|
|
12
|
+
export { buildOpenApiDocument, operationId, type Endpoint, type HttpMethod, type Json, type OpenApiOptions, type ResponseKind } from './openapi.js';
|
|
10
13
|
export { parseListOptions, parseDefinitionListOptions } from './pagination.js';
|
|
11
14
|
export { SolveBodySchema, CreateProjectBodySchema, UpdateProjectBodySchema, AddProjectMemberBodySchema, UpdateProjectMemberBodySchema, CreateInviteBodySchema, OrgComputePatchBodySchema, UpdateOrgMemberBodySchema, CreateApiTokenBodySchema } from './bodies.js';
|
|
12
15
|
export { ShareLinkResponseSchema, CreatedShareLinkResponseSchema, InviteResponseSchema, CreatedInviteResponseSchema, OrgComputeServerResponseSchema, ComputeCatalogEntrySchema, OrgComputeResponseSchema, ApiTokenResponseSchema, CreatedApiTokenResponseSchema, type ShareLinkResponse } from './responses-schema.js';
|