@twreporter-academy/api-types 0.0.9 → 0.0.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/dist/schemas/member.d.ts
CHANGED
|
@@ -26,7 +26,17 @@ export declare const V1AccessTokenResponseSchema: z.ZodObject<{
|
|
|
26
26
|
export declare const V1RevokeMemberCacheBodySchema: z.ZodObject<{
|
|
27
27
|
email: z.ZodEmail;
|
|
28
28
|
}, z.core.$strip>;
|
|
29
|
+
export declare const V1RevokeMemberCacheOutcomeSchema: z.ZodEnum<{
|
|
30
|
+
not_found: "not_found";
|
|
31
|
+
revoked: "revoked";
|
|
32
|
+
manual_grant: "manual_grant";
|
|
33
|
+
}>;
|
|
29
34
|
export declare const V1RevokeMemberCacheResponseSchema: z.ZodObject<{
|
|
30
35
|
ok: z.ZodLiteral<true>;
|
|
36
|
+
outcome: z.ZodEnum<{
|
|
37
|
+
not_found: "not_found";
|
|
38
|
+
revoked: "revoked";
|
|
39
|
+
manual_grant: "manual_grant";
|
|
40
|
+
}>;
|
|
31
41
|
}, z.core.$strip>;
|
|
32
42
|
//# sourceMappingURL=member.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"member.d.ts","sourceRoot":"","sources":["../../src/schemas/member.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAKvB,eAAO,MAAM,qBAAqB;;iBAYP,CAAA;AAE3B,eAAO,MAAM,qBAAqB;;;;;;;iBASP,CAAA;AAE3B,eAAO,MAAM,6BAA6B;;;;;;;iBAAwB,CAAA;AAElE,eAAO,MAAM,2BAA2B;;;;iBAMP,CAAA;AAEjC,eAAO,MAAM,6BAA6B;;iBAIP,CAAA;AAEnC,eAAO,MAAM,iCAAiC
|
|
1
|
+
{"version":3,"file":"member.d.ts","sourceRoot":"","sources":["../../src/schemas/member.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAKvB,eAAO,MAAM,qBAAqB;;iBAYP,CAAA;AAE3B,eAAO,MAAM,qBAAqB;;;;;;;iBASP,CAAA;AAE3B,eAAO,MAAM,6BAA6B;;;;;;;iBAAwB,CAAA;AAElE,eAAO,MAAM,2BAA2B;;;;iBAMP,CAAA;AAEjC,eAAO,MAAM,6BAA6B;;iBAIP,CAAA;AAEnC,eAAO,MAAM,gCAAgC;;;;EAI3C,CAAA;AAEF,eAAO,MAAM,iCAAiC;;;;;;;iBAKP,CAAA"}
|
package/dist/schemas/member.js
CHANGED
|
@@ -27,8 +27,10 @@ export const V1AccessTokenResponseSchema = z.object({
|
|
|
27
27
|
export const V1RevokeMemberCacheBodySchema = z.object({
|
|
28
28
|
email: z.email()
|
|
29
29
|
}).openapi('RevokeMemberCacheBody');
|
|
30
|
+
export const V1RevokeMemberCacheOutcomeSchema = z.enum(['revoked', 'not_found', 'manual_grant']);
|
|
30
31
|
export const V1RevokeMemberCacheResponseSchema = z.object({
|
|
31
|
-
ok: z.literal(true)
|
|
32
|
+
ok: z.literal(true),
|
|
33
|
+
outcome: V1RevokeMemberCacheOutcomeSchema
|
|
32
34
|
}).openapi('RevokeMemberCacheResponse');
|
|
33
35
|
|
|
34
36
|
// --- OpenAPI path registration ---
|
|
@@ -120,7 +122,7 @@ registry.registerPath({
|
|
|
120
122
|
method: 'post',
|
|
121
123
|
path: '/v1/admin/members/revoke-cache',
|
|
122
124
|
tags: ['Admin'],
|
|
123
|
-
description: 'Invalidate MemberAccess cache for a member by email (clear checkedAt). Requires a Google OIDC ID token from an allowlisted caller.
|
|
125
|
+
description: 'Invalidate MemberAccess cache for a member by email (clear checkedAt). Requires a Google OIDC ID token from an allowlisted caller. Terminal outcomes (revoked, not_found, manual_grant) always return 200 so Pub/Sub push can acknowledge delivery.',
|
|
124
126
|
request: {
|
|
125
127
|
body: {
|
|
126
128
|
content: {
|
|
@@ -132,7 +134,7 @@ registry.registerPath({
|
|
|
132
134
|
},
|
|
133
135
|
responses: {
|
|
134
136
|
200: {
|
|
135
|
-
description: '
|
|
137
|
+
description: 'Request processed. outcome is revoked, not_found, or manual_grant.',
|
|
136
138
|
content: {
|
|
137
139
|
'application/json': {
|
|
138
140
|
schema: V1RevokeMemberCacheResponseSchema
|
|
@@ -163,22 +165,6 @@ registry.registerPath({
|
|
|
163
165
|
}
|
|
164
166
|
}
|
|
165
167
|
},
|
|
166
|
-
404: {
|
|
167
|
-
description: 'Member not found',
|
|
168
|
-
content: {
|
|
169
|
-
'application/json': {
|
|
170
|
-
schema: RestErrorBodySchema
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
},
|
|
174
|
-
409: {
|
|
175
|
-
description: 'Conflict — member has a manual grant',
|
|
176
|
-
content: {
|
|
177
|
-
'application/json': {
|
|
178
|
-
schema: RestErrorBodySchema
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
},
|
|
182
168
|
...internalServerErrorResponse
|
|
183
169
|
}
|
|
184
170
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"member.js","names":["z","RestErrorBodySchema","registry","V1MemberMeQuerySchema","object","refreshAccess","preprocess","v","undefined","Array","isArray","boolean","optional","openapi","V1MemberProfileSchema","id","string","email","name","twreporterUserId","hasAccess","createdAt","iso","datetime","nullable","V1MemberProfileResponseSchema","V1AccessTokenResponseSchema","accessToken","expiresAt","number","V1RevokeMemberCacheBodySchema","V1RevokeMemberCacheResponseSchema","ok","literal","unauthorizedResponse","description","content","schema","internalServerErrorResponse","registerPath","method","path","tags","responses","request","query","body"],"sources":["../../src/schemas/member.ts"],"sourcesContent":["import { z } from 'zod'\n\nimport { RestErrorBodySchema } from '../rest.js'\nimport { registry } from './registry.js'\n\nexport const V1MemberMeQuerySchema = z\n .object({\n refreshAccess: z\n .preprocess((v) => {\n if (v === undefined) return undefined\n if (Array.isArray(v)) return v[0]\n if (v === true || v === 'true' || v === '1') return true\n if (v === false || v === 'false' || v === '0') return false\n return v\n }, z.boolean())\n .optional(),\n })\n .openapi('MemberMeQuery')\n\nexport const V1MemberProfileSchema = z\n .object({\n id: z.string(),\n email: z.string(),\n name: z.string(),\n twreporterUserId: z.string(),\n hasAccess: z.boolean(),\n createdAt: z.iso.datetime().nullable().optional(),\n })\n .openapi('MemberProfile')\n\nexport const V1MemberProfileResponseSchema = V1MemberProfileSchema\n\nexport const V1AccessTokenResponseSchema = z\n .object({\n accessToken: z.string(),\n twreporterUserId: z.string(),\n expiresAt: z.number(),\n })\n .openapi('AccessTokenResponse')\n\nexport const V1RevokeMemberCacheBodySchema = z\n .object({\n email: z.email(),\n })\n .openapi('RevokeMemberCacheBody')\n\nexport const V1RevokeMemberCacheResponseSchema = z\n .object({\n ok: z.literal(true),\n })\n .openapi('RevokeMemberCacheResponse')\n\n// --- OpenAPI path registration ---\n\nconst unauthorizedResponse = {\n 401: {\n description: 'Unauthorized — missing or invalid JWT',\n content: { 'application/json': { schema: RestErrorBodySchema } },\n },\n} as const\n\nconst internalServerErrorResponse = {\n 500: {\n description: 'Internal server error',\n content: { 'application/json': { schema: RestErrorBodySchema } },\n },\n} as const\n\nregistry.registerPath({\n method: 'post',\n path: '/auth/access-token',\n tags: ['Auth'],\n description:\n 'Exchange id_token cookie for a JWT access token. Creates the member on first login.',\n responses: {\n 200: {\n description: 'Success',\n content: {\n 'application/json': { schema: V1AccessTokenResponseSchema },\n },\n },\n 400: {\n description: 'Bad request — missing id_token cookie',\n content: { 'application/json': { schema: RestErrorBodySchema } },\n },\n 403: {\n description: 'Forbidden — missing, invalid, or disallowed Origin',\n content: { 'application/json': { schema: RestErrorBodySchema } },\n },\n ...unauthorizedResponse,\n ...internalServerErrorResponse,\n },\n})\n\nregistry.registerPath({\n method: 'get',\n path: '/v1/members/me',\n tags: ['Members'],\n description:\n 'Get the authenticated member profile. Set refreshAccess=true to bypass the MemberAccess cache and re-fetch roles from go-api.',\n request: {\n query: V1MemberMeQuerySchema,\n },\n responses: {\n 200: {\n description: 'Success',\n content: {\n 'application/json': { schema: V1MemberProfileResponseSchema },\n },\n },\n 404: {\n description: 'Member not found',\n content: { 'application/json': { schema: RestErrorBodySchema } },\n },\n ...unauthorizedResponse,\n ...internalServerErrorResponse,\n },\n})\n\nregistry.registerPath({\n method: 'post',\n path: '/v1/admin/members/revoke-cache',\n tags: ['Admin'],\n description:\n 'Invalidate MemberAccess cache for a member by email (clear checkedAt). Requires a Google OIDC ID token from an allowlisted caller.
|
|
1
|
+
{"version":3,"file":"member.js","names":["z","RestErrorBodySchema","registry","V1MemberMeQuerySchema","object","refreshAccess","preprocess","v","undefined","Array","isArray","boolean","optional","openapi","V1MemberProfileSchema","id","string","email","name","twreporterUserId","hasAccess","createdAt","iso","datetime","nullable","V1MemberProfileResponseSchema","V1AccessTokenResponseSchema","accessToken","expiresAt","number","V1RevokeMemberCacheBodySchema","V1RevokeMemberCacheOutcomeSchema","enum","V1RevokeMemberCacheResponseSchema","ok","literal","outcome","unauthorizedResponse","description","content","schema","internalServerErrorResponse","registerPath","method","path","tags","responses","request","query","body"],"sources":["../../src/schemas/member.ts"],"sourcesContent":["import { z } from 'zod'\n\nimport { RestErrorBodySchema } from '../rest.js'\nimport { registry } from './registry.js'\n\nexport const V1MemberMeQuerySchema = z\n .object({\n refreshAccess: z\n .preprocess((v) => {\n if (v === undefined) return undefined\n if (Array.isArray(v)) return v[0]\n if (v === true || v === 'true' || v === '1') return true\n if (v === false || v === 'false' || v === '0') return false\n return v\n }, z.boolean())\n .optional(),\n })\n .openapi('MemberMeQuery')\n\nexport const V1MemberProfileSchema = z\n .object({\n id: z.string(),\n email: z.string(),\n name: z.string(),\n twreporterUserId: z.string(),\n hasAccess: z.boolean(),\n createdAt: z.iso.datetime().nullable().optional(),\n })\n .openapi('MemberProfile')\n\nexport const V1MemberProfileResponseSchema = V1MemberProfileSchema\n\nexport const V1AccessTokenResponseSchema = z\n .object({\n accessToken: z.string(),\n twreporterUserId: z.string(),\n expiresAt: z.number(),\n })\n .openapi('AccessTokenResponse')\n\nexport const V1RevokeMemberCacheBodySchema = z\n .object({\n email: z.email(),\n })\n .openapi('RevokeMemberCacheBody')\n\nexport const V1RevokeMemberCacheOutcomeSchema = z.enum([\n 'revoked',\n 'not_found',\n 'manual_grant',\n])\n\nexport const V1RevokeMemberCacheResponseSchema = z\n .object({\n ok: z.literal(true),\n outcome: V1RevokeMemberCacheOutcomeSchema,\n })\n .openapi('RevokeMemberCacheResponse')\n\n// --- OpenAPI path registration ---\n\nconst unauthorizedResponse = {\n 401: {\n description: 'Unauthorized — missing or invalid JWT',\n content: { 'application/json': { schema: RestErrorBodySchema } },\n },\n} as const\n\nconst internalServerErrorResponse = {\n 500: {\n description: 'Internal server error',\n content: { 'application/json': { schema: RestErrorBodySchema } },\n },\n} as const\n\nregistry.registerPath({\n method: 'post',\n path: '/auth/access-token',\n tags: ['Auth'],\n description:\n 'Exchange id_token cookie for a JWT access token. Creates the member on first login.',\n responses: {\n 200: {\n description: 'Success',\n content: {\n 'application/json': { schema: V1AccessTokenResponseSchema },\n },\n },\n 400: {\n description: 'Bad request — missing id_token cookie',\n content: { 'application/json': { schema: RestErrorBodySchema } },\n },\n 403: {\n description: 'Forbidden — missing, invalid, or disallowed Origin',\n content: { 'application/json': { schema: RestErrorBodySchema } },\n },\n ...unauthorizedResponse,\n ...internalServerErrorResponse,\n },\n})\n\nregistry.registerPath({\n method: 'get',\n path: '/v1/members/me',\n tags: ['Members'],\n description:\n 'Get the authenticated member profile. Set refreshAccess=true to bypass the MemberAccess cache and re-fetch roles from go-api.',\n request: {\n query: V1MemberMeQuerySchema,\n },\n responses: {\n 200: {\n description: 'Success',\n content: {\n 'application/json': { schema: V1MemberProfileResponseSchema },\n },\n },\n 404: {\n description: 'Member not found',\n content: { 'application/json': { schema: RestErrorBodySchema } },\n },\n ...unauthorizedResponse,\n ...internalServerErrorResponse,\n },\n})\n\nregistry.registerPath({\n method: 'post',\n path: '/v1/admin/members/revoke-cache',\n tags: ['Admin'],\n description:\n 'Invalidate MemberAccess cache for a member by email (clear checkedAt). Requires a Google OIDC ID token from an allowlisted caller. Terminal outcomes (revoked, not_found, manual_grant) always return 200 so Pub/Sub push can acknowledge delivery.',\n request: {\n body: {\n content: {\n 'application/json': { schema: V1RevokeMemberCacheBodySchema },\n },\n },\n },\n responses: {\n 200: {\n description:\n 'Request processed. outcome is revoked, not_found, or manual_grant.',\n content: {\n 'application/json': { schema: V1RevokeMemberCacheResponseSchema },\n },\n },\n 400: {\n description: 'Invalid request body',\n content: { 'application/json': { schema: RestErrorBodySchema } },\n },\n 401: {\n description: 'Unauthorized — missing or invalid GCP IAM token',\n content: { 'application/json': { schema: RestErrorBodySchema } },\n },\n 403: {\n description: 'Forbidden — valid token but caller not allowlisted',\n content: { 'application/json': { schema: RestErrorBodySchema } },\n },\n ...internalServerErrorResponse,\n },\n})\n"],"mappings":"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","ignoreList":[]}
|