@furystack/rest 8.0.22 → 8.0.24

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.
@@ -0,0 +1,43 @@
1
+ import type { Method } from './methods.js';
2
+ /**
3
+ * The JSON schema type used for API endpoint definitions.
4
+ */
5
+ export type Schema = unknown;
6
+ /**
7
+ * Represents the definition of an API endpoint, including its method, path, schema, and schema name.
8
+ */
9
+ export type ApiEndpointDefinition = {
10
+ /**
11
+ * The HTTP method for the endpoint (e.g., GET, POST, PUT, DELETE).
12
+ */
13
+ method: Method;
14
+ /**
15
+ * The path of the endpoint, which is the URL pattern that the endpoint responds to.
16
+ */
17
+ path: string;
18
+ /**
19
+ * The JSON schema that defines the structure of the request and response for this endpoint.
20
+ * To include a schema, wrap your endpoint with a Validate({...}) call during the implementation.
21
+ */
22
+ schema: Schema;
23
+ /**
24
+ * The name of the schema, which can be used to reference this schema in documentation or other contexts.
25
+ * To include a schema name, wrap your endpoint with a Validate({...}) call during the implementation.
26
+ */
27
+ schemaName: string;
28
+ /**
29
+ * Indicates whether the endpoint requires authentication.
30
+ * To include the flag, wrap your endpoint with an Authenticat() call during the implementation.
31
+ */
32
+ isAuthenticated: boolean;
33
+ };
34
+ /**
35
+ * Represents the schema for an API, which is a record of endpoint definitions keyed by their paths.
36
+ */
37
+ export type ApiEndpointSchema = {
38
+ name: string;
39
+ description: string;
40
+ version: string;
41
+ endpoints: Record<string, ApiEndpointDefinition>;
42
+ };
43
+ //# sourceMappingURL=api-endpoint-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-endpoint-schema.d.ts","sourceRoot":"","sources":["../src/api-endpoint-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAE1C;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG,OAAO,CAAA;AAE5B;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAA;IAClB;;;OAGG;IACH,eAAe,EAAE,OAAO,CAAA;CACzB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAA;CACjD,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=api-endpoint-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-endpoint-schema.js","sourceRoot":"","sources":["../src/api-endpoint-schema.ts"],"names":[],"mappings":""}
package/esm/index.d.ts CHANGED
@@ -1,7 +1,9 @@
1
+ export * from './api-endpoint-schema.js';
1
2
  export * from './deserialize-query-string.js';
3
+ export * from './endpoint-models/index.js';
2
4
  export * from './methods.js';
3
- export * from './rest-api.js';
4
5
  export * from './request-error.js';
5
- export * from './endpoint-models/index.js';
6
+ export * from './rest-api.js';
6
7
  export * from './serialize-to-query-string.js';
8
+ export * from './swagger-document.js';
7
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAA;AAC7C,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,oBAAoB,CAAA;AAClC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,gCAAgC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA;AACxC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA;AAC7B,cAAc,gCAAgC,CAAA;AAC9C,cAAc,uBAAuB,CAAA"}
package/esm/index.js CHANGED
@@ -1,7 +1,9 @@
1
+ export * from './api-endpoint-schema.js';
1
2
  export * from './deserialize-query-string.js';
3
+ export * from './endpoint-models/index.js';
2
4
  export * from './methods.js';
3
- export * from './rest-api.js';
4
5
  export * from './request-error.js';
5
- export * from './endpoint-models/index.js';
6
+ export * from './rest-api.js';
6
7
  export * from './serialize-to-query-string.js';
8
+ export * from './swagger-document.js';
7
9
  //# sourceMappingURL=index.js.map
package/esm/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAA;AAC7C,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,oBAAoB,CAAA;AAClC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,gCAAgC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA;AACxC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA;AAC7B,cAAc,gCAAgC,CAAA;AAC9C,cAAc,uBAAuB,CAAA"}
package/esm/rest-api.d.ts CHANGED
@@ -1,4 +1,6 @@
1
+ import type { ApiEndpointSchema } from './api-endpoint-schema.js';
1
2
  import type { Method } from './methods.js';
3
+ import type { SwaggerDocument } from './swagger-document.js';
2
4
  export type RestApi = {
3
5
  [TMethod in Method]?: {
4
6
  [TUrl: string]: {
@@ -10,4 +12,21 @@ export type RestApi = {
10
12
  };
11
13
  };
12
14
  };
15
+ /**
16
+ * Represents an API with a GET action to retrieve its schema.
17
+ * This type extends the base RestApi type to include a specific GET endpoint for schema retrieval.
18
+ */
19
+ export type WithSchemaAction<T extends RestApi> = T & {
20
+ GET: {
21
+ '/schema': {
22
+ result: ApiEndpointSchema;
23
+ headers: {
24
+ accept: 'application/schema+json';
25
+ };
26
+ };
27
+ '/swagger.json': {
28
+ result: SwaggerDocument;
29
+ };
30
+ };
31
+ };
13
32
  //# sourceMappingURL=rest-api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rest-api.d.ts","sourceRoot":"","sources":["../src/rest-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAE1C,MAAM,MAAM,OAAO,GAAG;KACnB,OAAO,IAAI,MAAM,CAAC,CAAC,EAAE;QACpB,CAAC,IAAI,EAAE,MAAM,GAAG;YAAE,MAAM,EAAE,OAAO,CAAC;YAAC,GAAG,CAAC,EAAE,OAAO,CAAC;YAAC,KAAK,CAAC,EAAE,OAAO,CAAC;YAAC,IAAI,CAAC,EAAE,OAAO,CAAC;YAAC,OAAO,CAAC,EAAE,OAAO,CAAA;SAAE,CAAA;KACvG;CACF,CAAA"}
1
+ {"version":3,"file":"rest-api.d.ts","sourceRoot":"","sources":["../src/rest-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAE5D,MAAM,MAAM,OAAO,GAAG;KACnB,OAAO,IAAI,MAAM,CAAC,CAAC,EAAE;QACpB,CAAC,IAAI,EAAE,MAAM,GAAG;YAAE,MAAM,EAAE,OAAO,CAAC;YAAC,GAAG,CAAC,EAAE,OAAO,CAAC;YAAC,KAAK,CAAC,EAAE,OAAO,CAAC;YAAC,IAAI,CAAC,EAAE,OAAO,CAAC;YAAC,OAAO,CAAC,EAAE,OAAO,CAAA;SAAE,CAAA;KACvG;CACF,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,OAAO,IAAI,CAAC,GAAG;IACpD,GAAG,EAAE;QACH,SAAS,EAAE;YAAE,MAAM,EAAE,iBAAiB,CAAC;YAAC,OAAO,EAAE;gBAAE,MAAM,EAAE,yBAAyB,CAAA;aAAE,CAAA;SAAE,CAAA;QACxF,eAAe,EAAE;YAAE,MAAM,EAAE,eAAe,CAAA;SAAE,CAAA;KAC7C,CAAA;CACF,CAAA"}
@@ -0,0 +1,196 @@
1
+ export type SwaggerDocument = {
2
+ openapi: string;
3
+ info: InfoObject;
4
+ jsonSchemaDialect?: string;
5
+ externalDocs?: ExternalDocumentationObject;
6
+ servers?: ServerObject[];
7
+ tags?: TagObject[];
8
+ security?: SecurityRequirementObject[];
9
+ paths?: Record<string, PathItem>;
10
+ webhooks?: Record<string, PathItem>;
11
+ components?: ComponentsObject;
12
+ [key: `x-${string}`]: unknown;
13
+ };
14
+ export type InfoObject = {
15
+ title: string;
16
+ version: string;
17
+ description?: string;
18
+ summary?: string;
19
+ termsOfService?: string;
20
+ contact?: ContactObject;
21
+ license?: LicenseObject;
22
+ [key: `x-${string}`]: unknown;
23
+ };
24
+ export type ContactObject = {
25
+ name?: string;
26
+ url?: string;
27
+ email?: string;
28
+ [key: `x-${string}`]: unknown;
29
+ };
30
+ export type LicenseObject = {
31
+ name: string;
32
+ identifier?: string;
33
+ url?: string;
34
+ [key: `x-${string}`]: unknown;
35
+ };
36
+ export type ExternalDocumentationObject = {
37
+ url: string;
38
+ description?: string;
39
+ [key: `x-${string}`]: unknown;
40
+ };
41
+ export type ServerObject = {
42
+ url: string;
43
+ description?: string;
44
+ variables?: Record<string, ServerVariableObject>;
45
+ [key: `x-${string}`]: unknown;
46
+ };
47
+ export type ServerVariableObject = {
48
+ default: string;
49
+ description?: string;
50
+ enum?: string[];
51
+ [key: `x-${string}`]: unknown;
52
+ };
53
+ export type TagObject = {
54
+ name: string;
55
+ description?: string;
56
+ externalDocs?: ExternalDocumentationObject;
57
+ [key: `x-${string}`]: unknown;
58
+ };
59
+ export type SecurityRequirementObject = Record<string, string[]>;
60
+ export type ComponentsObject = {
61
+ schemas?: Record<string, object | boolean>;
62
+ responses?: Record<string, ResponseObject | ReferenceObject>;
63
+ parameters?: Record<string, ParameterObject | ReferenceObject>;
64
+ examples?: Record<string, ExampleObject | ReferenceObject>;
65
+ requestBodies?: Record<string, RequestBodyObject | ReferenceObject>;
66
+ headers?: Record<string, HeaderObject | ReferenceObject>;
67
+ securitySchemes?: Record<string, SecuritySchemeObject | ReferenceObject>;
68
+ links?: Record<string, LinkObject | ReferenceObject>;
69
+ callbacks?: Record<string, CallbackObject | ReferenceObject>;
70
+ pathItems?: Record<string, PathItem | ReferenceObject>;
71
+ [key: `x-${string}`]: unknown;
72
+ };
73
+ export type ReferenceObject = {
74
+ $ref: string;
75
+ description?: string;
76
+ summary?: string;
77
+ };
78
+ export type PathItem = {
79
+ summary?: string;
80
+ description?: string;
81
+ get?: Operation;
82
+ put?: Operation;
83
+ post?: Operation;
84
+ delete?: Operation;
85
+ options?: Operation;
86
+ head?: Operation;
87
+ patch?: Operation;
88
+ trace?: Operation;
89
+ servers?: ServerObject[];
90
+ parameters?: Array<ParameterObject | ReferenceObject>;
91
+ [key: `x-${string}`]: unknown;
92
+ };
93
+ export type Operation = {
94
+ tags?: string[];
95
+ summary?: string;
96
+ description?: string;
97
+ externalDocs?: ExternalDocumentationObject;
98
+ operationId?: string;
99
+ parameters?: Array<ParameterObject | ReferenceObject>;
100
+ requestBody?: RequestBodyObject | ReferenceObject;
101
+ responses: ResponsesObject;
102
+ callbacks?: Record<string, CallbackObject | ReferenceObject>;
103
+ deprecated?: boolean;
104
+ security?: SecurityRequirementObject[];
105
+ servers?: ServerObject[];
106
+ [key: `x-${string}`]: unknown;
107
+ };
108
+ export type ParameterObject = {
109
+ name: string;
110
+ in: 'query' | 'header' | 'path' | 'cookie';
111
+ description?: string;
112
+ required?: boolean;
113
+ deprecated?: boolean;
114
+ allowEmptyValue?: boolean;
115
+ style?: string;
116
+ explode?: boolean;
117
+ allowReserved?: boolean;
118
+ schema?: object | boolean;
119
+ example?: unknown;
120
+ examples?: Record<string, ExampleObject | ReferenceObject>;
121
+ content?: Record<string, MediaTypeObject>;
122
+ [key: `x-${string}`]: unknown;
123
+ };
124
+ export type RequestBodyObject = {
125
+ description?: string;
126
+ content: Record<string, MediaTypeObject>;
127
+ required?: boolean;
128
+ [key: `x-${string}`]: unknown;
129
+ };
130
+ export type MediaTypeObject = {
131
+ schema?: object | boolean;
132
+ example?: unknown;
133
+ examples?: Record<string, ExampleObject | ReferenceObject>;
134
+ encoding?: Record<string, EncodingObject>;
135
+ [key: `x-${string}`]: unknown;
136
+ };
137
+ export type EncodingObject = {
138
+ contentType?: string;
139
+ headers?: Record<string, HeaderObject | ReferenceObject>;
140
+ style?: string;
141
+ explode?: boolean;
142
+ allowReserved?: boolean;
143
+ [key: `x-${string}`]: unknown;
144
+ };
145
+ export type ResponsesObject = Record<string, ResponseObject | ReferenceObject>;
146
+ export type ResponseObject = {
147
+ description: string;
148
+ headers?: Record<string, HeaderObject | ReferenceObject>;
149
+ content?: Record<string, MediaTypeObject>;
150
+ links?: Record<string, LinkObject | ReferenceObject>;
151
+ [key: `x-${string}`]: unknown;
152
+ };
153
+ export type HeaderObject = Omit<ParameterObject, 'name' | 'in'>;
154
+ export type ExampleObject = {
155
+ summary?: string;
156
+ description?: string;
157
+ value?: unknown;
158
+ externalValue?: string;
159
+ [key: `x-${string}`]: unknown;
160
+ };
161
+ export type LinkObject = {
162
+ operationRef?: string;
163
+ operationId?: string;
164
+ parameters?: Record<string, unknown>;
165
+ requestBody?: unknown;
166
+ description?: string;
167
+ server?: ServerObject;
168
+ [key: `x-${string}`]: unknown;
169
+ };
170
+ export type CallbackObject = Record<string, PathItem>;
171
+ export type SecuritySchemeObject = {
172
+ type: 'apiKey' | 'http' | 'mutualTLS' | 'oauth2' | 'openIdConnect';
173
+ description?: string;
174
+ name?: string;
175
+ in?: 'query' | 'header' | 'cookie';
176
+ scheme?: string;
177
+ bearerFormat?: string;
178
+ flows?: OAuthFlowsObject;
179
+ openIdConnectUrl?: string;
180
+ [key: `x-${string}`]: unknown;
181
+ };
182
+ export type OAuthFlowsObject = {
183
+ implicit?: OAuthFlowObject;
184
+ password?: OAuthFlowObject;
185
+ clientCredentials?: OAuthFlowObject;
186
+ authorizationCode?: OAuthFlowObject;
187
+ [key: `x-${string}`]: unknown;
188
+ };
189
+ export type OAuthFlowObject = {
190
+ authorizationUrl?: string;
191
+ tokenUrl?: string;
192
+ refreshUrl?: string;
193
+ scopes: Record<string, string>;
194
+ [key: `x-${string}`]: unknown;
195
+ };
196
+ //# sourceMappingURL=swagger-document.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swagger-document.d.ts","sourceRoot":"","sources":["../src/swagger-document.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=swagger-document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swagger-document.js","sourceRoot":"","sources":["../src/swagger-document.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@furystack/rest",
3
- "version": "8.0.22",
3
+ "version": "8.0.24",
4
4
  "description": "Generic REST package",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -37,12 +37,12 @@
37
37
  },
38
38
  "homepage": "https://github.com/furystack/furystack",
39
39
  "dependencies": {
40
- "@furystack/core": "^15.0.22",
41
- "@furystack/inject": "^12.0.19"
40
+ "@furystack/core": "^15.0.24",
41
+ "@furystack/inject": "^12.0.20"
42
42
  },
43
43
  "devDependencies": {
44
- "@types/node": "^24.0.3",
45
- "typescript": "^5.8.3",
44
+ "@types/node": "^24.3.0",
45
+ "typescript": "^5.9.2",
46
46
  "vitest": "^3.2.4"
47
47
  },
48
48
  "gitHead": "1045d854bfd8c475b7035471d130d401417a2321"
@@ -0,0 +1,45 @@
1
+ import type { Method } from './methods.js'
2
+
3
+ /**
4
+ * The JSON schema type used for API endpoint definitions.
5
+ */
6
+ export type Schema = unknown // TODO: Fix me
7
+
8
+ /**
9
+ * Represents the definition of an API endpoint, including its method, path, schema, and schema name.
10
+ */
11
+ export type ApiEndpointDefinition = {
12
+ /**
13
+ * The HTTP method for the endpoint (e.g., GET, POST, PUT, DELETE).
14
+ */
15
+ method: Method
16
+ /**
17
+ * The path of the endpoint, which is the URL pattern that the endpoint responds to.
18
+ */
19
+ path: string
20
+ /**
21
+ * The JSON schema that defines the structure of the request and response for this endpoint.
22
+ * To include a schema, wrap your endpoint with a Validate({...}) call during the implementation.
23
+ */
24
+ schema: Schema
25
+ /**
26
+ * The name of the schema, which can be used to reference this schema in documentation or other contexts.
27
+ * To include a schema name, wrap your endpoint with a Validate({...}) call during the implementation.
28
+ */
29
+ schemaName: string
30
+ /**
31
+ * Indicates whether the endpoint requires authentication.
32
+ * To include the flag, wrap your endpoint with an Authenticat() call during the implementation.
33
+ */
34
+ isAuthenticated: boolean
35
+ }
36
+
37
+ /**
38
+ * Represents the schema for an API, which is a record of endpoint definitions keyed by their paths.
39
+ */
40
+ export type ApiEndpointSchema = {
41
+ name: string
42
+ description: string
43
+ version: string
44
+ endpoints: Record<string, ApiEndpointDefinition>
45
+ }
package/src/index.ts CHANGED
@@ -1,6 +1,8 @@
1
+ export * from './api-endpoint-schema.js'
1
2
  export * from './deserialize-query-string.js'
3
+ export * from './endpoint-models/index.js'
2
4
  export * from './methods.js'
3
- export * from './rest-api.js'
4
5
  export * from './request-error.js'
5
- export * from './endpoint-models/index.js'
6
+ export * from './rest-api.js'
6
7
  export * from './serialize-to-query-string.js'
8
+ export * from './swagger-document.js'
package/src/rest-api.ts CHANGED
@@ -1,7 +1,20 @@
1
+ import type { ApiEndpointSchema } from './api-endpoint-schema.js'
1
2
  import type { Method } from './methods.js'
3
+ import type { SwaggerDocument } from './swagger-document.js'
2
4
 
3
5
  export type RestApi = {
4
6
  [TMethod in Method]?: {
5
7
  [TUrl: string]: { result: unknown; url?: unknown; query?: unknown; body?: unknown; headers?: unknown }
6
8
  }
7
9
  }
10
+
11
+ /**
12
+ * Represents an API with a GET action to retrieve its schema.
13
+ * This type extends the base RestApi type to include a specific GET endpoint for schema retrieval.
14
+ */
15
+ export type WithSchemaAction<T extends RestApi> = T & {
16
+ GET: {
17
+ '/schema': { result: ApiEndpointSchema; headers: { accept: 'application/schema+json' } }
18
+ '/swagger.json': { result: SwaggerDocument }
19
+ }
20
+ }