@game-infra/api-schemas-core 0.0.0 → 0.3.0
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/LICENSE +21 -0
- package/README.md +17 -1
- package/dist/auth.d.ts +44 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +35 -2
- package/dist/auth.js.map +1 -1
- package/dist/contracts.d.ts +202 -1
- package/dist/contracts.d.ts.map +1 -1
- package/dist/contracts.js +106 -1
- package/dist/contracts.js.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/serviceToken.d.ts +393 -0
- package/dist/serviceToken.d.ts.map +1 -0
- package/dist/serviceToken.js +227 -0
- package/dist/serviceToken.js.map +1 -0
- package/package.json +14 -4
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Igor Savin
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @game-infra/api-schemas-core
|
|
2
2
|
|
|
3
|
-
Generic service API contract: valibot schemas plus [toad-contracts](https://github.com/kibertoad/toad-contracts) `defineApiContract` definitions for auth, savegame, game-entity CRUD, admin backup, feedback, and heartbeat. This is the base contract every game backend and frontend shares; the event-editor, balance, file-storage, and progress-tracker contracts build on it.
|
|
3
|
+
Generic service API contract: valibot schemas plus [toad-contracts](https://github.com/kibertoad/toad-contracts) `defineApiContract` definitions for auth, service tokens, savegame, game-entity CRUD, admin backup, feedback, and heartbeat. This is the base contract every game backend and frontend shares; the event-editor, balance, file-storage, and progress-tracker contracts build on it.
|
|
4
4
|
|
|
5
5
|
Published to npm. Also consumable as sibling source (`exports` points at `src/`).
|
|
6
6
|
|
|
@@ -44,6 +44,22 @@ const { getApiUrl } = createApiUrlResolver({ productionUrl: "https://api.example
|
|
|
44
44
|
getApiUrl(window.location.hostname); // dev URL on localhost, prod otherwise
|
|
45
45
|
```
|
|
46
46
|
|
|
47
|
+
### Service tokens
|
|
48
|
+
|
|
49
|
+
`serviceTokenCreateContract`, `serviceTokenListContract`, `serviceTokenRevokeContract`, `serviceTokenValidateContract`, and `serviceTokenPurgeContract` cover the credentials scripts and backend services present to game-infra APIs. The token appears in exactly one response — the one that creates it:
|
|
50
|
+
|
|
51
|
+
```ts
|
|
52
|
+
import { serviceTokenCreateContract, ServiceTokenValidation } from "@game-infra/api-schemas-core";
|
|
53
|
+
import { sendByApiContract } from "@toad-contracts/frontend-http-client";
|
|
54
|
+
|
|
55
|
+
const created = await sendByApiContract(client, serviceTokenCreateContract, {
|
|
56
|
+
body: { name: "nightly-import", ttlSeconds: ServiceTokenValidation.DEFAULT_TTL_SECONDS },
|
|
57
|
+
});
|
|
58
|
+
created.token; // shown once; the issuer never stores it
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
`ServiceTokenSchema` is what the issuer does store: id, owner, claims, issue time, expiry, revocation time. That is enough to revoke a token and nothing more, which is why revocation has to be checked with `serviceTokenValidateContract` rather than inferred from a signature.
|
|
62
|
+
|
|
47
63
|
## Extension points
|
|
48
64
|
|
|
49
65
|
- **Entity types**: `entityType` is a plain `string()`. The old `EntityTypes` enum (spell/item/persona/secret) was dropped; games re-tighten it via their own config/validation.
|
package/dist/auth.d.ts
CHANGED
|
@@ -7,13 +7,22 @@ export declare const AuthValidation: {
|
|
|
7
7
|
readonly MAX_PASSWORD_LENGTH: 128;
|
|
8
8
|
readonly MIN_USERNAME_LENGTH: 3;
|
|
9
9
|
readonly MAX_USERNAME_LENGTH: 64;
|
|
10
|
+
/**
|
|
11
|
+
* Usernames may not contain `@` or whitespace.
|
|
12
|
+
*
|
|
13
|
+
* Login takes a single `identifier` matched against both usernames and
|
|
14
|
+
* emails, so the two namespaces have to stay disjoint. Otherwise registering
|
|
15
|
+
* the username `victim@example.com` makes that account a second candidate for
|
|
16
|
+
* the victim's own email, and which row wins is not the victim's to decide.
|
|
17
|
+
*/
|
|
18
|
+
readonly USERNAME_PATTERN: RegExp;
|
|
10
19
|
};
|
|
11
20
|
/**
|
|
12
21
|
* Registration request schema
|
|
13
22
|
*/
|
|
14
23
|
export declare const RegisterRequestSchema: import("valibot").ObjectSchema<{
|
|
15
24
|
readonly email: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").EmailAction<string, undefined>]>;
|
|
16
|
-
readonly username: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").MinLengthAction<string, 3, undefined>, import("valibot").MaxLengthAction<string, 64, undefined>]>;
|
|
25
|
+
readonly username: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").MinLengthAction<string, 3, undefined>, import("valibot").MaxLengthAction<string, 64, undefined>, import("valibot").RegexAction<string, "Username may not contain @ or whitespace">]>;
|
|
17
26
|
readonly password: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").MinLengthAction<string, 6, undefined>, import("valibot").MaxLengthAction<string, 128, undefined>]>;
|
|
18
27
|
}, undefined>;
|
|
19
28
|
export type RegisterRequest = InferOutput<typeof RegisterRequestSchema>;
|
|
@@ -89,4 +98,38 @@ export declare const ValidateServiceTokenResponseSchema: import("valibot").Objec
|
|
|
89
98
|
valid: import("valibot").OptionalSchema<import("valibot").BooleanSchema<undefined>, undefined>;
|
|
90
99
|
}, undefined>;
|
|
91
100
|
export type ValidateServiceTokenResponse = InferOutput<typeof ValidateServiceTokenResponseSchema>;
|
|
101
|
+
/**
|
|
102
|
+
* Identity-service readiness response.
|
|
103
|
+
*
|
|
104
|
+
* Individual checks are added as optional keys, and stay optional. A consumer
|
|
105
|
+
* upgrades this package before the service it polls is redeployed — that gap is
|
|
106
|
+
* a rollout, not a fault — and a required key would turn readiness into a parse
|
|
107
|
+
* error for the duration, exactly when someone is watching it to decide whether
|
|
108
|
+
* the rollout worked. `failedChecks` is the field to act on either way.
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* ```ts
|
|
112
|
+
* import { IdentityReadinessResponseSchema } from '@game-infra/api-schemas-core'
|
|
113
|
+
* ```
|
|
114
|
+
*/
|
|
115
|
+
export declare const IdentityReadinessResponseSchema: import("valibot").ObjectSchema<{
|
|
116
|
+
readonly success: import("valibot").BooleanSchema<undefined>;
|
|
117
|
+
readonly checks: import("valibot").ObjectSchema<{
|
|
118
|
+
readonly jwtSecret: import("valibot").BooleanSchema<undefined>;
|
|
119
|
+
readonly usersTable: import("valibot").BooleanSchema<undefined>;
|
|
120
|
+
/** Absent from a deployment predating service tokens. */
|
|
121
|
+
readonly serviceTokensTable: import("valibot").OptionalSchema<import("valibot").BooleanSchema<undefined>, undefined>;
|
|
122
|
+
}, undefined>;
|
|
123
|
+
readonly failedChecks: import("valibot").ArraySchema<import("valibot").UnionSchema<[import("valibot").LiteralSchema<"jwtSecret", undefined>, import("valibot").LiteralSchema<"usersTable", undefined>, import("valibot").LiteralSchema<"serviceTokensTable", undefined>], undefined>, undefined>;
|
|
124
|
+
}, undefined>;
|
|
125
|
+
/**
|
|
126
|
+
* Inferred identity-service readiness response.
|
|
127
|
+
*
|
|
128
|
+
* @example
|
|
129
|
+
* ```ts
|
|
130
|
+
* import type { IdentityReadinessResponse } from '@game-infra/api-schemas-core'
|
|
131
|
+
* const ready: IdentityReadinessResponse['success'] = true
|
|
132
|
+
* ```
|
|
133
|
+
*/
|
|
134
|
+
export type IdentityReadinessResponse = InferOutput<typeof IdentityReadinessResponseSchema>;
|
|
92
135
|
//# sourceMappingURL=auth.d.ts.map
|
package/dist/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,WAAW,
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,WAAW,EAcjB,MAAM,SAAS,CAAC;AAGjB;;GAEG;AACH,eAAO,MAAM,cAAc;aACzB,mBAAmB,EAAE,CAAC;aACtB,mBAAmB,EAAE,GAAG;aACxB,mBAAmB,EAAE,CAAC;aACtB,mBAAmB,EAAE,EAAE;IACvB;;;;;;;OAOG;aACH,gBAAgB;CACR,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;aAahC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,WAAW,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,wBAAwB;IACnC,KAAK;IACL,MAAM;IACN,QAAQ;CACT,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;;;aAAwD,CAAC;AAE5F,MAAM,MAAM,gBAAgB,GAAG,WAAW,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAE1E;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;aAG7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAElE;;;GAGG;AACH,eAAO,MAAM,mBAAmB;;;;;;;aAAwD,CAAC;AAEzF,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEpE;;GAEG;AACH,eAAO,MAAM,0BAA0B;;aAErC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,WAAW,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAElF;;GAEG;AACH,eAAO,MAAM,2BAA2B;;;;;;;aAItC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,WAAW,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEpF;;;;GAIG;AACH,eAAO,MAAM,kCAAkC;;;;;aAE7C,CAAC;AAEH,MAAM,MAAM,4BAA4B,GAAG,WAAW,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAElG;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,+BAA+B;;;;;QAKxC,yDAAyD;;;;aAM3D,CAAC;AAEH;;;;;;;;GAQG;AACH,MAAM,MAAM,yBAAyB,GAAG,WAAW,CAAC,OAAO,+BAA+B,CAAC,CAAC"}
|
package/dist/auth.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { boolean, email, maxLength, minLength, number, object, optional, pipe, string, } from "valibot";
|
|
1
|
+
import { boolean, array, literal, email, maxLength, minLength, number, object, optional, pipe, regex, string, union, } from "valibot";
|
|
2
2
|
import { createSuccessResponseSchema } from "./common.js";
|
|
3
3
|
/**
|
|
4
4
|
* Validation constants - single source of truth for both FE and BE
|
|
@@ -8,13 +8,22 @@ export const AuthValidation = {
|
|
|
8
8
|
MAX_PASSWORD_LENGTH: 128,
|
|
9
9
|
MIN_USERNAME_LENGTH: 3,
|
|
10
10
|
MAX_USERNAME_LENGTH: 64,
|
|
11
|
+
/**
|
|
12
|
+
* Usernames may not contain `@` or whitespace.
|
|
13
|
+
*
|
|
14
|
+
* Login takes a single `identifier` matched against both usernames and
|
|
15
|
+
* emails, so the two namespaces have to stay disjoint. Otherwise registering
|
|
16
|
+
* the username `victim@example.com` makes that account a second candidate for
|
|
17
|
+
* the victim's own email, and which row wins is not the victim's to decide.
|
|
18
|
+
*/
|
|
19
|
+
USERNAME_PATTERN: /^[^\s@]+$/,
|
|
11
20
|
};
|
|
12
21
|
/**
|
|
13
22
|
* Registration request schema
|
|
14
23
|
*/
|
|
15
24
|
export const RegisterRequestSchema = object({
|
|
16
25
|
email: pipe(string(), email()),
|
|
17
|
-
username: pipe(string(), minLength(AuthValidation.MIN_USERNAME_LENGTH), maxLength(AuthValidation.MAX_USERNAME_LENGTH)),
|
|
26
|
+
username: pipe(string(), minLength(AuthValidation.MIN_USERNAME_LENGTH), maxLength(AuthValidation.MAX_USERNAME_LENGTH), regex(AuthValidation.USERNAME_PATTERN, "Username may not contain @ or whitespace")),
|
|
18
27
|
password: pipe(string(), minLength(AuthValidation.MIN_PASSWORD_LENGTH), maxLength(AuthValidation.MAX_PASSWORD_LENGTH)),
|
|
19
28
|
});
|
|
20
29
|
/**
|
|
@@ -63,4 +72,28 @@ export const ValidateTokenResponseSchema = createSuccessResponseSchema({
|
|
|
63
72
|
export const ValidateServiceTokenResponseSchema = createSuccessResponseSchema({
|
|
64
73
|
valid: optional(boolean()),
|
|
65
74
|
});
|
|
75
|
+
/**
|
|
76
|
+
* Identity-service readiness response.
|
|
77
|
+
*
|
|
78
|
+
* Individual checks are added as optional keys, and stay optional. A consumer
|
|
79
|
+
* upgrades this package before the service it polls is redeployed — that gap is
|
|
80
|
+
* a rollout, not a fault — and a required key would turn readiness into a parse
|
|
81
|
+
* error for the duration, exactly when someone is watching it to decide whether
|
|
82
|
+
* the rollout worked. `failedChecks` is the field to act on either way.
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```ts
|
|
86
|
+
* import { IdentityReadinessResponseSchema } from '@game-infra/api-schemas-core'
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
export const IdentityReadinessResponseSchema = object({
|
|
90
|
+
success: boolean(),
|
|
91
|
+
checks: object({
|
|
92
|
+
jwtSecret: boolean(),
|
|
93
|
+
usersTable: boolean(),
|
|
94
|
+
/** Absent from a deployment predating service tokens. */
|
|
95
|
+
serviceTokensTable: optional(boolean()),
|
|
96
|
+
}),
|
|
97
|
+
failedChecks: array(union([literal("jwtSecret"), literal("usersTable"), literal("serviceTokensTable")])),
|
|
98
|
+
});
|
|
66
99
|
//# sourceMappingURL=auth.js.map
|
package/dist/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,OAAO,EACP,KAAK,EACL,SAAS,EACT,SAAS,EACT,MAAM,EACN,MAAM,EACN,QAAQ,EACR,IAAI,EACJ,MAAM,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/contracts.d.ts
CHANGED
|
@@ -22,7 +22,7 @@ export declare const authRegisterContract: {
|
|
|
22
22
|
readonly pathResolver: () => string;
|
|
23
23
|
readonly requestBodySchema: import("valibot").ObjectSchema<{
|
|
24
24
|
readonly email: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").EmailAction<string, undefined>]>;
|
|
25
|
-
readonly username: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").MinLengthAction<string, 3, undefined>, import("valibot").MaxLengthAction<string, 64, undefined>]>;
|
|
25
|
+
readonly username: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").MinLengthAction<string, 3, undefined>, import("valibot").MaxLengthAction<string, 64, undefined>, import("valibot").RegexAction<string, "Username may not contain @ or whitespace">]>;
|
|
26
26
|
readonly password: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").MinLengthAction<string, 6, undefined>, import("valibot").MaxLengthAction<string, 128, undefined>]>;
|
|
27
27
|
}, undefined>;
|
|
28
28
|
readonly responsesByStatusCode: {
|
|
@@ -83,6 +83,207 @@ export declare const authValidateServiceTokenContract: {
|
|
|
83
83
|
}, undefined>;
|
|
84
84
|
};
|
|
85
85
|
};
|
|
86
|
+
/**
|
|
87
|
+
* Identity-service readiness contract.
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```ts
|
|
91
|
+
* import { identityReadinessContract } from '@game-infra/api-schemas-core'
|
|
92
|
+
* identityReadinessContract.pathResolver({}) // '/ready'
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
export declare const identityReadinessContract: {
|
|
96
|
+
readonly method: "get";
|
|
97
|
+
readonly pathResolver: () => string;
|
|
98
|
+
readonly responsesByStatusCode: {
|
|
99
|
+
200: import("valibot").ObjectSchema<{
|
|
100
|
+
readonly success: import("valibot").BooleanSchema<undefined>;
|
|
101
|
+
readonly checks: import("valibot").ObjectSchema<{
|
|
102
|
+
readonly jwtSecret: import("valibot").BooleanSchema<undefined>;
|
|
103
|
+
readonly usersTable: import("valibot").BooleanSchema<undefined>;
|
|
104
|
+
readonly serviceTokensTable: import("valibot").OptionalSchema<import("valibot").BooleanSchema<undefined>, undefined>;
|
|
105
|
+
}, undefined>;
|
|
106
|
+
readonly failedChecks: import("valibot").ArraySchema<import("valibot").UnionSchema<[import("valibot").LiteralSchema<"jwtSecret", undefined>, import("valibot").LiteralSchema<"usersTable", undefined>, import("valibot").LiteralSchema<"serviceTokensTable", undefined>], undefined>, undefined>;
|
|
107
|
+
}, undefined>;
|
|
108
|
+
503: import("valibot").ObjectSchema<{
|
|
109
|
+
readonly success: import("valibot").BooleanSchema<undefined>;
|
|
110
|
+
readonly checks: import("valibot").ObjectSchema<{
|
|
111
|
+
readonly jwtSecret: import("valibot").BooleanSchema<undefined>;
|
|
112
|
+
readonly usersTable: import("valibot").BooleanSchema<undefined>;
|
|
113
|
+
readonly serviceTokensTable: import("valibot").OptionalSchema<import("valibot").BooleanSchema<undefined>, undefined>;
|
|
114
|
+
}, undefined>;
|
|
115
|
+
readonly failedChecks: import("valibot").ArraySchema<import("valibot").UnionSchema<[import("valibot").LiteralSchema<"jwtSecret", undefined>, import("valibot").LiteralSchema<"usersTable", undefined>, import("valibot").LiteralSchema<"serviceTokensTable", undefined>], undefined>, undefined>;
|
|
116
|
+
}, undefined>;
|
|
117
|
+
};
|
|
118
|
+
};
|
|
119
|
+
/**
|
|
120
|
+
* Mint a service token for the authenticated account.
|
|
121
|
+
*
|
|
122
|
+
* The response is the only place the token ever appears; the issuer keeps a
|
|
123
|
+
* record of its id, owner, and expiry so it can be revoked, and nothing else.
|
|
124
|
+
*
|
|
125
|
+
* @example
|
|
126
|
+
* ```ts
|
|
127
|
+
* import { serviceTokenCreateContract } from '@game-infra/api-schemas-core'
|
|
128
|
+
* serviceTokenCreateContract.pathResolver({}) // '/service-tokens'
|
|
129
|
+
* ```
|
|
130
|
+
*/
|
|
131
|
+
export declare const serviceTokenCreateContract: {
|
|
132
|
+
readonly method: "post";
|
|
133
|
+
readonly pathResolver: () => string;
|
|
134
|
+
readonly requestBodySchema: import("valibot").ObjectSchema<{
|
|
135
|
+
readonly name: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").MinLengthAction<string, 1, "Name is required">, import("valibot").MaxLengthAction<string, 100, undefined>]>;
|
|
136
|
+
readonly ttlSeconds: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<readonly [import("valibot").NumberSchema<undefined>, import("valibot").IntegerAction<number, "TTL must be a whole number of seconds">, import("valibot").MinValueAction<number, number, undefined>, import("valibot").MaxValueAction<number, number, undefined>]>, undefined>;
|
|
137
|
+
readonly claims: import("valibot").OptionalSchema<import("valibot").ArraySchema<import("valibot").StringSchema<undefined>, undefined>, undefined>;
|
|
138
|
+
}, undefined>;
|
|
139
|
+
readonly responsesByStatusCode: {
|
|
140
|
+
200: import("valibot").ObjectSchema<{
|
|
141
|
+
readonly success: import("valibot").BooleanSchema<undefined>;
|
|
142
|
+
readonly error: import("valibot").OptionalSchema<import("valibot").StringSchema<undefined>, undefined>;
|
|
143
|
+
} & {
|
|
144
|
+
token: import("valibot").OptionalSchema<import("valibot").StringSchema<undefined>, undefined>;
|
|
145
|
+
serviceToken: import("valibot").OptionalSchema<import("valibot").ObjectSchema<{
|
|
146
|
+
readonly id: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").RegexAction<string, "Not a service-token id">]>;
|
|
147
|
+
readonly name: import("valibot").StringSchema<undefined>;
|
|
148
|
+
readonly userId: import("valibot").NumberSchema<undefined>;
|
|
149
|
+
readonly username: import("valibot").StringSchema<undefined>;
|
|
150
|
+
readonly claims: import("valibot").ArraySchema<import("valibot").StringSchema<undefined>, undefined>;
|
|
151
|
+
readonly createdAt: import("valibot").StringSchema<undefined>;
|
|
152
|
+
readonly expiresAt: import("valibot").StringSchema<undefined>;
|
|
153
|
+
readonly revokedAt: import("valibot").NullableSchema<import("valibot").StringSchema<undefined>, undefined>;
|
|
154
|
+
readonly lastUsedAt: import("valibot").NullableSchema<import("valibot").StringSchema<undefined>, undefined>;
|
|
155
|
+
}, undefined>, undefined>;
|
|
156
|
+
}, undefined>;
|
|
157
|
+
};
|
|
158
|
+
};
|
|
159
|
+
/**
|
|
160
|
+
* List the authenticated account's service tokens, newest first.
|
|
161
|
+
*
|
|
162
|
+
* @example
|
|
163
|
+
* ```ts
|
|
164
|
+
* import { serviceTokenListContract } from '@game-infra/api-schemas-core'
|
|
165
|
+
* serviceTokenListContract.pathResolver({}) // '/service-tokens'
|
|
166
|
+
* ```
|
|
167
|
+
*/
|
|
168
|
+
export declare const serviceTokenListContract: {
|
|
169
|
+
readonly method: "get";
|
|
170
|
+
readonly pathResolver: () => string;
|
|
171
|
+
readonly responsesByStatusCode: {
|
|
172
|
+
200: import("valibot").ObjectSchema<{
|
|
173
|
+
readonly success: import("valibot").BooleanSchema<undefined>;
|
|
174
|
+
readonly error: import("valibot").OptionalSchema<import("valibot").StringSchema<undefined>, undefined>;
|
|
175
|
+
} & {
|
|
176
|
+
serviceTokens: import("valibot").OptionalSchema<import("valibot").ArraySchema<import("valibot").ObjectSchema<{
|
|
177
|
+
readonly id: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").RegexAction<string, "Not a service-token id">]>;
|
|
178
|
+
readonly name: import("valibot").StringSchema<undefined>;
|
|
179
|
+
readonly userId: import("valibot").NumberSchema<undefined>;
|
|
180
|
+
readonly username: import("valibot").StringSchema<undefined>;
|
|
181
|
+
readonly claims: import("valibot").ArraySchema<import("valibot").StringSchema<undefined>, undefined>;
|
|
182
|
+
readonly createdAt: import("valibot").StringSchema<undefined>;
|
|
183
|
+
readonly expiresAt: import("valibot").StringSchema<undefined>;
|
|
184
|
+
readonly revokedAt: import("valibot").NullableSchema<import("valibot").StringSchema<undefined>, undefined>;
|
|
185
|
+
readonly lastUsedAt: import("valibot").NullableSchema<import("valibot").StringSchema<undefined>, undefined>;
|
|
186
|
+
}, undefined>, undefined>, undefined>;
|
|
187
|
+
retentionSeconds: import("valibot").OptionalSchema<import("valibot").NumberSchema<undefined>, undefined>;
|
|
188
|
+
}, undefined>;
|
|
189
|
+
};
|
|
190
|
+
};
|
|
191
|
+
/**
|
|
192
|
+
* Revoke one service token by id.
|
|
193
|
+
*
|
|
194
|
+
* @example
|
|
195
|
+
* ```ts
|
|
196
|
+
* import { serviceTokenRevokeContract } from '@game-infra/api-schemas-core'
|
|
197
|
+
* serviceTokenRevokeContract.pathResolver({ tokenId: 'st_0123456789abcdef0123456789abcdef' })
|
|
198
|
+
* // '/service-tokens/st_0123456789abcdef0123456789abcdef'
|
|
199
|
+
* ```
|
|
200
|
+
*/
|
|
201
|
+
export declare const serviceTokenRevokeContract: {
|
|
202
|
+
readonly method: "delete";
|
|
203
|
+
readonly requestPathParamsSchema: import("valibot").ObjectSchema<{
|
|
204
|
+
readonly tokenId: import("valibot").StringSchema<undefined>;
|
|
205
|
+
}, undefined> & import("@toad-contracts/valibot").StandardObjectKeysV1<unknown, unknown>;
|
|
206
|
+
readonly pathResolver: ({ tokenId }: {
|
|
207
|
+
tokenId: string;
|
|
208
|
+
}) => string;
|
|
209
|
+
readonly responsesByStatusCode: {
|
|
210
|
+
200: import("valibot").ObjectSchema<{
|
|
211
|
+
readonly success: import("valibot").BooleanSchema<undefined>;
|
|
212
|
+
readonly error: import("valibot").OptionalSchema<import("valibot").StringSchema<undefined>, undefined>;
|
|
213
|
+
} & {
|
|
214
|
+
serviceToken: import("valibot").OptionalSchema<import("valibot").ObjectSchema<{
|
|
215
|
+
readonly id: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").RegexAction<string, "Not a service-token id">]>;
|
|
216
|
+
readonly name: import("valibot").StringSchema<undefined>;
|
|
217
|
+
readonly userId: import("valibot").NumberSchema<undefined>;
|
|
218
|
+
readonly username: import("valibot").StringSchema<undefined>;
|
|
219
|
+
readonly claims: import("valibot").ArraySchema<import("valibot").StringSchema<undefined>, undefined>;
|
|
220
|
+
readonly createdAt: import("valibot").StringSchema<undefined>;
|
|
221
|
+
readonly expiresAt: import("valibot").StringSchema<undefined>;
|
|
222
|
+
readonly revokedAt: import("valibot").NullableSchema<import("valibot").StringSchema<undefined>, undefined>;
|
|
223
|
+
readonly lastUsedAt: import("valibot").NullableSchema<import("valibot").StringSchema<undefined>, undefined>;
|
|
224
|
+
}, undefined>, undefined>;
|
|
225
|
+
}, undefined>;
|
|
226
|
+
};
|
|
227
|
+
};
|
|
228
|
+
/**
|
|
229
|
+
* Check a service token's signature, expiry, and revocation state.
|
|
230
|
+
*
|
|
231
|
+
* `/auth/validate` cannot answer this: a signature proves only that the token
|
|
232
|
+
* was minted with this secret, and a revoked token keeps its signature.
|
|
233
|
+
*
|
|
234
|
+
* @example
|
|
235
|
+
* ```ts
|
|
236
|
+
* import { serviceTokenValidateContract } from '@game-infra/api-schemas-core'
|
|
237
|
+
* serviceTokenValidateContract.pathResolver({}) // '/service-tokens/validate'
|
|
238
|
+
* ```
|
|
239
|
+
*/
|
|
240
|
+
export declare const serviceTokenValidateContract: {
|
|
241
|
+
readonly method: "post";
|
|
242
|
+
readonly pathResolver: () => string;
|
|
243
|
+
readonly requestBodySchema: import("valibot").ObjectSchema<{
|
|
244
|
+
readonly token: import("valibot").StringSchema<undefined>;
|
|
245
|
+
}, undefined>;
|
|
246
|
+
readonly responsesByStatusCode: {
|
|
247
|
+
200: import("valibot").ObjectSchema<{
|
|
248
|
+
readonly success: import("valibot").BooleanSchema<undefined>;
|
|
249
|
+
readonly error: import("valibot").OptionalSchema<import("valibot").StringSchema<undefined>, undefined>;
|
|
250
|
+
} & {
|
|
251
|
+
valid: import("valibot").OptionalSchema<import("valibot").BooleanSchema<undefined>, undefined>;
|
|
252
|
+
reason: import("valibot").OptionalSchema<import("valibot").UnionSchema<[import("valibot").LiteralSchema<"invalid", undefined>, import("valibot").LiteralSchema<"expired", undefined>, import("valibot").LiteralSchema<"revoked", undefined>, import("valibot").LiteralSchema<"unknown", undefined>, import("valibot").LiteralSchema<"wrongTokenType", undefined>], undefined>, undefined>;
|
|
253
|
+
tokenId: import("valibot").OptionalSchema<import("valibot").StringSchema<undefined>, undefined>;
|
|
254
|
+
userId: import("valibot").OptionalSchema<import("valibot").NumberSchema<undefined>, undefined>;
|
|
255
|
+
username: import("valibot").OptionalSchema<import("valibot").StringSchema<undefined>, undefined>;
|
|
256
|
+
claims: import("valibot").OptionalSchema<import("valibot").ArraySchema<import("valibot").StringSchema<undefined>, undefined>, undefined>;
|
|
257
|
+
expiresAt: import("valibot").OptionalSchema<import("valibot").StringSchema<undefined>, undefined>;
|
|
258
|
+
}, undefined>;
|
|
259
|
+
};
|
|
260
|
+
};
|
|
261
|
+
/**
|
|
262
|
+
* Delete token records that have expired past the retention window.
|
|
263
|
+
*
|
|
264
|
+
* Runs on a schedule too; the endpoint exists so an operator or the console can
|
|
265
|
+
* ask for it without waiting for the next cron tick.
|
|
266
|
+
*
|
|
267
|
+
* @example
|
|
268
|
+
* ```ts
|
|
269
|
+
* import { serviceTokenPurgeContract } from '@game-infra/api-schemas-core'
|
|
270
|
+
* serviceTokenPurgeContract.pathResolver({}) // '/service-tokens/purge'
|
|
271
|
+
* ```
|
|
272
|
+
*/
|
|
273
|
+
export declare const serviceTokenPurgeContract: {
|
|
274
|
+
readonly method: "post";
|
|
275
|
+
readonly pathResolver: () => string;
|
|
276
|
+
readonly requestBodySchema: typeof ContractNoBody;
|
|
277
|
+
readonly responsesByStatusCode: {
|
|
278
|
+
200: import("valibot").ObjectSchema<{
|
|
279
|
+
readonly success: import("valibot").BooleanSchema<undefined>;
|
|
280
|
+
readonly error: import("valibot").OptionalSchema<import("valibot").StringSchema<undefined>, undefined>;
|
|
281
|
+
} & {
|
|
282
|
+
purged: import("valibot").OptionalSchema<import("valibot").NumberSchema<undefined>, undefined>;
|
|
283
|
+
retentionSeconds: import("valibot").OptionalSchema<import("valibot").NumberSchema<undefined>, undefined>;
|
|
284
|
+
}, undefined>;
|
|
285
|
+
};
|
|
286
|
+
};
|
|
86
287
|
export declare const savegameSaveContract: {
|
|
87
288
|
readonly method: "put";
|
|
88
289
|
readonly requestPathParamsSchema: import("valibot").ObjectSchema<{
|
package/dist/contracts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAqC,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAqC,MAAM,yBAAyB,CAAC;AA8C5F;;;;;;;;;;;;;;;;;GAiBG;AAMH,eAAO,MAAM,oBAAoB;;;;;;;;;QAIN,GAAG;;;;;;;;;CAC5B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;QAIH,GAAG;;;;;;;;;CAC5B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;QAIN,GAAG;;;;;;;;;CAC5B,CAAC;AAEH,eAAO,MAAM,gCAAgC;;;;QAGlB,GAAG;;;;;;;CAC5B,CAAC;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,yBAAyB;;;;QAIlC,GAAG;;;;;;;;;QACH,GAAG;;;;;;;;;;CAEL,CAAC;AAMH;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,0BAA0B;;;;;;;;;QAIZ,GAAG;;;;;;;;;;;;;;;;;;CAC5B,CAAC;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB;;;;QAGV,GAAG;;;;;;;;;;;;;;;;;;CAC5B,CAAC;AAEH;;;;;;;;;GASG;AACH,eAAO,MAAM,0BAA0B;;;;;;;;;QAIZ,GAAG;;;;;;;;;;;;;;;;;CAC5B,CAAC;AAEH;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,4BAA4B;;;;;;;QAId,GAAG;;;;;;;;;;;;;CAC5B,CAAC;AAEH;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,yBAAyB;;;;;QAIX,GAAG;;;;;;;;CAC5B,CAAC;AAWH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;QAMN,GAAG;;;;;CAC5B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;QAKN,GAAG;;;;;;;;;CAC5B,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;QAIX,GAAG;;;;;;;;;;;CAC5B,CAAC;AAYH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;QAKR,GAAG;;;;;;;CAC5B,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;QAMV,GAAG;;;;;;;CAC5B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;QAKR,GAAG;;;;;;;;;;CAC5B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;QAIR,GAAG;;;;;;;;;;;CAC5B,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;QAIX,GAAG;;;;;;;;;;;CAC5B,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;QAKV,GAAG;;;;;CAC5B,CAAC;AAEH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;QAKZ,GAAG;;;;;;;CAC5B,CAAC;AAMH,eAAO,MAAM,qBAAqB;;;;;QAIP,GAAG;;;;;;;;;;CAC5B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;QAGJ,GAAG;;;;;;;;;;;;;;CAC5B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;QAIP,GAAG;;;;;;;;CAC5B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;QAIR,GAAG;;;;;;;;;;;;;;CAC5B,CAAC;AAMH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;QAIR,GAAG;;;;;;;CAC5B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;QAGH,GAAG;;;;;CAC5B,CAAC"}
|
package/dist/contracts.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { ContractNoBody, defineApiContract, withObjectKeys } from "@toad-contracts/valibot";
|
|
2
2
|
import { object, string } from "valibot";
|
|
3
|
-
import { LoginRequestSchema, LoginResponseSchema, RegisterRequestSchema, RegisterResponseSchema, ValidateServiceTokenResponseSchema, ValidateTokenRequestSchema, ValidateTokenResponseSchema, } from "./auth.js";
|
|
3
|
+
import { LoginRequestSchema, LoginResponseSchema, RegisterRequestSchema, RegisterResponseSchema, ValidateServiceTokenResponseSchema, IdentityReadinessResponseSchema, ValidateTokenRequestSchema, ValidateTokenResponseSchema, } from "./auth.js";
|
|
4
4
|
import { DownloadBackupResponseSchema, ListBackupsResponseSchema, RestoreBackupRequestSchema, RestoreBackupResponseSchema, TriggerBackupResponseSchema, } from "./backup.js";
|
|
5
5
|
import { ApiResponseSchema } from "./common.js";
|
|
6
6
|
import { FeedbackSubmitRequestSchema, FeedbackSubmitResponseSchema } from "./feedback.js";
|
|
7
7
|
import { GameEntityBulkSaveRequestSchema, GameEntityBulkSaveResponseSchema, GameEntityDeleteResponseSchema, GameEntityListResponseSchema, GameEntityLoadResponseSchema, GameEntitySaveRequestSchema, GameEntitySaveResponseSchema, } from "./gameEntity.js";
|
|
8
8
|
import { SavegameListSlotsResponseSchema, SavegameLoadResponseSchema, SavegameSaveRequestSchema, SavegameSaveResponseSchema, } from "./savegame.js";
|
|
9
|
+
import { CreateServiceTokenRequestSchema, CreateServiceTokenResponseSchema, ListServiceTokensResponseSchema, PurgeServiceTokensResponseSchema, RevokeServiceTokenResponseSchema, ServiceTokenValidateRequestSchema, ServiceTokenValidateResponseSchema, } from "./serviceToken.js";
|
|
9
10
|
/**
|
|
10
11
|
* Typed endpoint contracts for the generic service API.
|
|
11
12
|
*
|
|
@@ -50,6 +51,110 @@ export const authValidateServiceTokenContract = defineApiContract({
|
|
|
50
51
|
pathResolver: () => "/auth/validate-service-token",
|
|
51
52
|
responsesByStatusCode: { 200: ValidateServiceTokenResponseSchema },
|
|
52
53
|
});
|
|
54
|
+
/**
|
|
55
|
+
* Identity-service readiness contract.
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```ts
|
|
59
|
+
* import { identityReadinessContract } from '@game-infra/api-schemas-core'
|
|
60
|
+
* identityReadinessContract.pathResolver({}) // '/ready'
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export const identityReadinessContract = defineApiContract({
|
|
64
|
+
method: "get",
|
|
65
|
+
pathResolver: () => "/ready",
|
|
66
|
+
responsesByStatusCode: {
|
|
67
|
+
200: IdentityReadinessResponseSchema,
|
|
68
|
+
503: IdentityReadinessResponseSchema,
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
// ============================================================================
|
|
72
|
+
// Service tokens
|
|
73
|
+
// ============================================================================
|
|
74
|
+
/**
|
|
75
|
+
* Mint a service token for the authenticated account.
|
|
76
|
+
*
|
|
77
|
+
* The response is the only place the token ever appears; the issuer keeps a
|
|
78
|
+
* record of its id, owner, and expiry so it can be revoked, and nothing else.
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```ts
|
|
82
|
+
* import { serviceTokenCreateContract } from '@game-infra/api-schemas-core'
|
|
83
|
+
* serviceTokenCreateContract.pathResolver({}) // '/service-tokens'
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
86
|
+
export const serviceTokenCreateContract = defineApiContract({
|
|
87
|
+
method: "post",
|
|
88
|
+
pathResolver: () => "/service-tokens",
|
|
89
|
+
requestBodySchema: CreateServiceTokenRequestSchema,
|
|
90
|
+
responsesByStatusCode: { 200: CreateServiceTokenResponseSchema },
|
|
91
|
+
});
|
|
92
|
+
/**
|
|
93
|
+
* List the authenticated account's service tokens, newest first.
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* ```ts
|
|
97
|
+
* import { serviceTokenListContract } from '@game-infra/api-schemas-core'
|
|
98
|
+
* serviceTokenListContract.pathResolver({}) // '/service-tokens'
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
101
|
+
export const serviceTokenListContract = defineApiContract({
|
|
102
|
+
method: "get",
|
|
103
|
+
pathResolver: () => "/service-tokens",
|
|
104
|
+
responsesByStatusCode: { 200: ListServiceTokensResponseSchema },
|
|
105
|
+
});
|
|
106
|
+
/**
|
|
107
|
+
* Revoke one service token by id.
|
|
108
|
+
*
|
|
109
|
+
* @example
|
|
110
|
+
* ```ts
|
|
111
|
+
* import { serviceTokenRevokeContract } from '@game-infra/api-schemas-core'
|
|
112
|
+
* serviceTokenRevokeContract.pathResolver({ tokenId: 'st_0123456789abcdef0123456789abcdef' })
|
|
113
|
+
* // '/service-tokens/st_0123456789abcdef0123456789abcdef'
|
|
114
|
+
* ```
|
|
115
|
+
*/
|
|
116
|
+
export const serviceTokenRevokeContract = defineApiContract({
|
|
117
|
+
method: "delete",
|
|
118
|
+
requestPathParamsSchema: withObjectKeys(object({ tokenId: string() })),
|
|
119
|
+
pathResolver: ({ tokenId }) => `/service-tokens/${tokenId}`,
|
|
120
|
+
responsesByStatusCode: { 200: RevokeServiceTokenResponseSchema },
|
|
121
|
+
});
|
|
122
|
+
/**
|
|
123
|
+
* Check a service token's signature, expiry, and revocation state.
|
|
124
|
+
*
|
|
125
|
+
* `/auth/validate` cannot answer this: a signature proves only that the token
|
|
126
|
+
* was minted with this secret, and a revoked token keeps its signature.
|
|
127
|
+
*
|
|
128
|
+
* @example
|
|
129
|
+
* ```ts
|
|
130
|
+
* import { serviceTokenValidateContract } from '@game-infra/api-schemas-core'
|
|
131
|
+
* serviceTokenValidateContract.pathResolver({}) // '/service-tokens/validate'
|
|
132
|
+
* ```
|
|
133
|
+
*/
|
|
134
|
+
export const serviceTokenValidateContract = defineApiContract({
|
|
135
|
+
method: "post",
|
|
136
|
+
pathResolver: () => "/service-tokens/validate",
|
|
137
|
+
requestBodySchema: ServiceTokenValidateRequestSchema,
|
|
138
|
+
responsesByStatusCode: { 200: ServiceTokenValidateResponseSchema },
|
|
139
|
+
});
|
|
140
|
+
/**
|
|
141
|
+
* Delete token records that have expired past the retention window.
|
|
142
|
+
*
|
|
143
|
+
* Runs on a schedule too; the endpoint exists so an operator or the console can
|
|
144
|
+
* ask for it without waiting for the next cron tick.
|
|
145
|
+
*
|
|
146
|
+
* @example
|
|
147
|
+
* ```ts
|
|
148
|
+
* import { serviceTokenPurgeContract } from '@game-infra/api-schemas-core'
|
|
149
|
+
* serviceTokenPurgeContract.pathResolver({}) // '/service-tokens/purge'
|
|
150
|
+
* ```
|
|
151
|
+
*/
|
|
152
|
+
export const serviceTokenPurgeContract = defineApiContract({
|
|
153
|
+
method: "post",
|
|
154
|
+
pathResolver: () => "/service-tokens/purge",
|
|
155
|
+
requestBodySchema: ContractNoBody,
|
|
156
|
+
responsesByStatusCode: { 200: PurgeServiceTokensResponseSchema },
|
|
157
|
+
});
|
|
53
158
|
// ============================================================================
|
|
54
159
|
// Savegame (save/load share one path, disambiguated by method)
|
|
55
160
|
// ============================================================================
|
package/dist/contracts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC5F,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,kCAAkC,EAClC,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,4BAA4B,EAC5B,yBAAyB,EACzB,0BAA0B,EAC1B,2BAA2B,EAC3B,2BAA2B,GAC5B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,2BAA2B,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC;AAC1F,OAAO,EACL,+BAA+B,EAC/B,gCAAgC,EAChC,8BAA8B,EAC9B,4BAA4B,EAC5B,4BAA4B,EAC5B,2BAA2B,EAC3B,4BAA4B,GAC7B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,+BAA+B,EAC/B,0BAA0B,EAC1B,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,8 +2,10 @@ export { ApiResponseSchema, createSuccessResponseSchema, TimestampFieldsSchema,
|
|
|
2
2
|
export type { ApiResponse, TimestampFields, EntityMetadata } from "./common.js";
|
|
3
3
|
export { AI_PROVIDERS, AIProviderSchema } from "./aiProvider.js";
|
|
4
4
|
export type { AIProviderType } from "./aiProvider.js";
|
|
5
|
-
export { AuthValidation, RegisterRequestSchema, AuthResponseFieldsSchema, RegisterResponseSchema, LoginRequestSchema, LoginResponseSchema, ValidateTokenRequestSchema, ValidateTokenResponseSchema, ValidateServiceTokenResponseSchema, } from "./auth.js";
|
|
6
|
-
export type { RegisterRequest, RegisterResponse, LoginRequest, LoginResponse, ValidateTokenRequest, ValidateTokenResponse, ValidateServiceTokenResponse, } from "./auth.js";
|
|
5
|
+
export { AuthValidation, RegisterRequestSchema, AuthResponseFieldsSchema, RegisterResponseSchema, LoginRequestSchema, LoginResponseSchema, ValidateTokenRequestSchema, ValidateTokenResponseSchema, ValidateServiceTokenResponseSchema, IdentityReadinessResponseSchema, } from "./auth.js";
|
|
6
|
+
export type { RegisterRequest, RegisterResponse, LoginRequest, LoginResponse, ValidateTokenRequest, ValidateTokenResponse, ValidateServiceTokenResponse, IdentityReadinessResponse, } from "./auth.js";
|
|
7
|
+
export { ServiceTokenValidation, ServiceTokenIdSchema, ServiceTokenSchema, CreateServiceTokenRequestSchema, CreateServiceTokenResponseSchema, ListServiceTokensResponseSchema, RevokeServiceTokenResponseSchema, ServiceTokenValidateRequestSchema, ServiceTokenRejectionSchema, ServiceTokenValidateResponseSchema, PurgeServiceTokensResponseSchema, } from "./serviceToken.js";
|
|
8
|
+
export type { ServiceToken, CreateServiceTokenRequest, CreateServiceTokenResponse, ListServiceTokensResponse, RevokeServiceTokenResponse, ServiceTokenValidateRequest, ServiceTokenRejection, ServiceTokenValidateResponse, PurgeServiceTokensResponse, } from "./serviceToken.js";
|
|
7
9
|
export { BackupInfoSchema, TriggerBackupResponseSchema, ListBackupsResponseSchema, RestoreBackupRequestSchema, RestoreBackupResponseSchema, DownloadBackupResponseSchema, } from "./backup.js";
|
|
8
10
|
export type { BackupInfo, TriggerBackupResponse, ListBackupsResponse, RestoreBackupRequest, RestoreBackupResponse, DownloadBackupResponse, } from "./backup.js";
|
|
9
11
|
export { FeedbackType, FeedbackSubmitRequestSchema, FeedbackSubmitResponseSchema, } from "./feedback.js";
|
|
@@ -14,5 +16,5 @@ export { GameEntitySaveRequestSchema, GameEntitySaveResponseSchema, GameEntityLo
|
|
|
14
16
|
export type { GameEntitySaveRequest, GameEntitySaveResponse, GameEntityLoadResponse, GameEntityInfo, GameEntityListResponse, GameEntityDeleteResponse, GameEntityBulkSaveRequest, GameEntityBulkSaveResponse, } from "./gameEntity.js";
|
|
15
17
|
export { DEFAULT_DEVELOPMENT_API_URL, createApiUrlResolver } from "./apiConfig.js";
|
|
16
18
|
export type { ApiUrlResolverOptions, ApiUrlResolver } from "./apiConfig.js";
|
|
17
|
-
export { authRegisterContract, authLoginContract, authValidateContract, authValidateServiceTokenContract, savegameSaveContract, savegameLoadContract, savegameListSlotsContract, gameEntitySaveContract, gameEntityUpdateContract, gameEntityLoadContract, gameEntityListContract, gameEntityListAllContract, gameEntityDeleteContract, gameEntityBulkSaveContract, backupTriggerContract, backupListContract, backupRestoreContract, backupDownloadContract, feedbackSubmitContract, heartbeatContract, } from "./contracts.js";
|
|
19
|
+
export { authRegisterContract, authLoginContract, authValidateContract, authValidateServiceTokenContract, identityReadinessContract, serviceTokenCreateContract, serviceTokenListContract, serviceTokenRevokeContract, serviceTokenValidateContract, serviceTokenPurgeContract, savegameSaveContract, savegameLoadContract, savegameListSlotsContract, gameEntitySaveContract, gameEntityUpdateContract, gameEntityLoadContract, gameEntityListContract, gameEntityListAllContract, gameEntityDeleteContract, gameEntityBulkSaveContract, backupTriggerContract, backupListContract, backupRestoreContract, backupDownloadContract, feedbackSubmitContract, heartbeatContract, } from "./contracts.js";
|
|
18
20
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,2BAA2B,EAC3B,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGhF,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACjE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGtD,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,0BAA0B,EAC1B,2BAA2B,EAC3B,kCAAkC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,2BAA2B,EAC3B,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGhF,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACjE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGtD,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,0BAA0B,EAC1B,2BAA2B,EAC3B,kCAAkC,EAClC,+BAA+B,GAChC,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,EAClB,+BAA+B,EAC/B,gCAAgC,EAChC,+BAA+B,EAC/B,gCAAgC,EAChC,iCAAiC,EACjC,2BAA2B,EAC3B,kCAAkC,EAClC,gCAAgC,GACjC,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,YAAY,EACZ,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,EACzB,0BAA0B,EAC1B,2BAA2B,EAC3B,qBAAqB,EACrB,4BAA4B,EAC5B,0BAA0B,GAC3B,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,gBAAgB,EAChB,2BAA2B,EAC3B,yBAAyB,EACzB,0BAA0B,EAC1B,2BAA2B,EAC3B,4BAA4B,GAC7B,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,UAAU,EACV,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,YAAY,EACZ,2BAA2B,EAC3B,4BAA4B,GAC7B,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAGnF,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,0BAA0B,EAC1B,cAAc,EACd,+BAA+B,GAChC,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,QAAQ,EACR,yBAAyB,GAC1B,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,2BAA2B,EAC3B,4BAA4B,EAC5B,4BAA4B,EAC5B,oBAAoB,EACpB,4BAA4B,EAC5B,8BAA8B,EAC9B,+BAA+B,EAC/B,gCAAgC,GACjC,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,cAAc,EACd,sBAAsB,EACtB,wBAAwB,EACxB,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACnF,YAAY,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAK5E,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,gCAAgC,EAChC,yBAAyB,EACzB,0BAA0B,EAC1B,wBAAwB,EACxB,0BAA0B,EAC1B,4BAA4B,EAC5B,yBAAyB,EACzB,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,EACzB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,wBAAwB,EACxB,0BAA0B,EAC1B,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC"}
|