@voyant-travel/auth 0.129.0 → 0.130.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/README.md +14 -0
- package/dist/cloud-broker/members.d.ts +9 -0
- package/dist/cloud-broker/members.js +10 -0
- package/dist/cloud-broker/members.js.map +1 -1
- package/dist/cloud-broker.d.ts +1 -1
- package/dist/cloud-broker.js +1 -1
- package/dist/cloud-broker.js.map +1 -1
- package/dist/identity-access-graph-runtime.js +2 -1
- package/dist/identity-access-graph-runtime.js.map +1 -1
- package/dist/invitations-routes.js +4 -0
- package/dist/invitations-routes.js.map +1 -1
- package/dist/local-member-access.d.ts +15 -0
- package/dist/local-member-access.js +119 -0
- package/dist/local-member-access.js.map +1 -0
- package/dist/runtime-contributor.js +18 -1
- package/dist/runtime-contributor.js.map +1 -1
- package/dist/server.d.ts +10 -6
- package/dist/server.js +6 -3
- package/dist/server.js.map +1 -1
- package/dist/team-management-cloud-adapter.d.ts +7 -0
- package/dist/team-management-cloud-adapter.js +146 -0
- package/dist/team-management-cloud-adapter.js.map +1 -0
- package/dist/team-management-local-adapter.d.ts +8 -0
- package/dist/team-management-local-adapter.js +285 -0
- package/dist/team-management-local-adapter.js.map +1 -0
- package/dist/team-management-policy.d.ts +27 -0
- package/dist/team-management-policy.js +109 -0
- package/dist/team-management-policy.js.map +1 -0
- package/dist/team-management-runtime-port.d.ts +60 -0
- package/dist/team-management-runtime-port.js +25 -0
- package/dist/team-management-runtime-port.js.map +1 -0
- package/dist/team-routes.d.ts +3 -3
- package/dist/team-routes.js +89 -138
- package/dist/team-routes.js.map +1 -1
- package/dist/voyant.js +35 -2
- package/dist/voyant.js.map +1 -1
- package/openapi/admin/team.json +42 -74
- package/package.json +9 -4
package/dist/team-routes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"team-routes.js","sourceRoot":"","sources":["../src/team-routes.ts"],"names":[],"mappings":"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","sourcesContent":["import { createRoute, OpenAPIHono, z } from \"@hono/zod-openapi\"\nimport { cloudAuthUserLinks } from \"@voyant-travel/db/schema/iam\"\nimport { openApiValidationHook, parseJsonBody, type VoyantDb } from \"@voyant-travel/hono\"\nimport { eq } from \"drizzle-orm\"\nimport type { Context } from \"hono\"\n\nimport {\n type CloudAdminMembersConfig,\n CloudAdminMembersError,\n inviteCloudAdminMember,\n listCloudAdminInvitations,\n listCloudAdminMemberRoles,\n listCloudAdminMembers,\n revokeCloudAdminInvitation,\n setCloudAdminMemberAccess,\n setCloudAdminMemberPermissions,\n} from \"./cloud-broker.js\"\nimport type { IdentityAccessRuntimeProvider } from \"./identity-access-runtime-port.js\"\n\ntype IdentityAccessEnv = {\n Bindings: Record<string, unknown>\n Variables: { userId?: string; db: VoyantDb }\n}\ntype TeamContext = { config: CloudAdminMembersConfig; actingWorkosUserId: string }\ntype TeamRouteContext = Context<IdentityAccessEnv>\n\nconst inviteSchema = z.object({\n email: z.string().email(),\n roleSlug: z.string().trim().min(1).max(120).optional().nullable(),\n expiresInDays: z.number().int().min(1).max(30).optional(),\n})\nconst accessSchema = z.object({ hasAccess: z.boolean() })\nconst permissionsSchema = z.object({\n permissions: z.array(z.string().trim().min(1).max(120)).max(200),\n})\n\nconst teamAdminApiId = \"@voyant-travel/auth#team.api.admin\"\nconst jsonBody = <T extends z.ZodTypeAny>(schema: T) => ({\n required: true,\n content: { \"application/json\": { schema } },\n})\nconst responses = (...statuses: number[]) =>\n Object.fromEntries(statuses.map((status) => [status, { description: `HTTP ${status}` }]))\nconst teamRoute = <M extends \"get\" | \"post\" | \"put\" | \"delete\", P extends string>(config: {\n method: M\n path: P\n operationId: string\n request?: Record<string, unknown>\n statuses: number[]\n}) =>\n createRoute({\n method: config.method,\n path: config.path,\n operationId: config.operationId,\n \"x-voyant-api-id\": teamAdminApiId,\n ...(config.request ? { request: config.request } : {}),\n responses: responses(...config.statuses),\n })\n\nconst listMembersRoute = teamRoute({\n method: \"get\",\n path: \"/members\",\n operationId: \"listTeamMembers\",\n statuses: [200, 401, 403, 404, 501],\n})\nconst listRolesRoute = teamRoute({\n method: \"get\",\n path: \"/roles\",\n operationId: \"listTeamRoles\",\n statuses: [200, 401, 403, 404, 501],\n})\nconst listTeamInvitationsRoute = teamRoute({\n method: \"get\",\n path: \"/invitations\",\n operationId: \"listTeamInvitations\",\n statuses: [200, 401, 403, 404, 501],\n})\nconst createTeamInvitationRoute = teamRoute({\n method: \"post\",\n path: \"/invitations\",\n operationId: \"createTeamInvitation\",\n request: { body: jsonBody(inviteSchema) },\n statuses: [201, 400, 401, 403, 404, 501],\n})\nconst revokeTeamInvitationRoute = teamRoute({\n method: \"delete\",\n path: \"/invitations/{invitationId}\",\n operationId: \"revokeTeamInvitation\",\n request: { params: z.object({ invitationId: z.string() }) },\n statuses: [204, 401, 403, 404, 501],\n})\nconst setTeamMemberAccessRoute = teamRoute({\n method: \"put\",\n path: \"/members/{membershipId}/access\",\n operationId: \"setTeamMemberAccess\",\n request: {\n params: z.object({ membershipId: z.string() }),\n body: jsonBody(accessSchema),\n },\n statuses: [200, 400, 401, 403, 404, 501],\n})\nconst setTeamMemberPermissionsRoute = teamRoute({\n method: \"put\",\n path: \"/members/{membershipId}/permissions\",\n operationId: \"setTeamMemberPermissions\",\n request: {\n params: z.object({ membershipId: z.string() }),\n body: jsonBody(permissionsSchema),\n },\n statuses: [200, 400, 401, 403, 404, 501],\n})\n\nasync function resolveActingWorkosUserId(db: VoyantDb, userId: string): Promise<string | null> {\n const [link] = await db\n .select({ providerAccountId: cloudAuthUserLinks.providerAccountId })\n .from(cloudAuthUserLinks)\n .where(eq(cloudAuthUserLinks.userId, userId))\n .limit(1)\n return link?.providerAccountId ?? null\n}\n\nexport function createTeamAdminRoutes(runtime: IdentityAccessRuntimeProvider) {\n const routes = new OpenAPIHono<IdentityAccessEnv>({ defaultHook: openApiValidationHook })\n\n const resolveContext = async (c: TeamRouteContext): Promise<TeamContext | Response> => {\n const deployment = runtime.resolveDeployment(c.env)\n if (deployment.authMode !== \"voyant-cloud\") return c.json({ error: \"Not found\" }, 404)\n\n const userId = c.get(\"userId\")\n if (!userId) return c.json({ error: \"Unauthorized\" }, 401)\n if (!deployment.cloudAdminMembers) {\n return c.json({ error: \"Voyant Cloud member management is not configured\" }, 501)\n }\n\n const actingWorkosUserId = await resolveActingWorkosUserId(c.get(\"db\"), userId)\n if (!actingWorkosUserId) {\n return c.json({ error: \"No Voyant Cloud identity for this session\" }, 403)\n }\n return { config: deployment.cloudAdminMembers, actingWorkosUserId }\n }\n\n const handleError = (c: TeamRouteContext, error: unknown): Response => {\n if (error instanceof CloudAdminMembersError) {\n return c.json({ error: error.reason ?? error.message }, error.status as 403)\n }\n throw error\n }\n\n routes.openapi(listMembersRoute, async (c) => {\n const context = await resolveContext(c)\n if (context instanceof Response) return context\n try {\n return c.json({ data: await listCloudAdminMembers(context) })\n } catch (error) {\n return handleError(c, error)\n }\n })\n routes.openapi(listRolesRoute, async (c) => {\n const context = await resolveContext(c)\n if (context instanceof Response) return context\n try {\n return c.json({ data: await listCloudAdminMemberRoles(context) })\n } catch (error) {\n return handleError(c, error)\n }\n })\n routes.openapi(listTeamInvitationsRoute, async (c) => {\n const context = await resolveContext(c)\n if (context instanceof Response) return context\n try {\n return c.json({ data: await listCloudAdminInvitations(context) })\n } catch (error) {\n return handleError(c, error)\n }\n })\n routes.openapi(createTeamInvitationRoute, async (c) => {\n const context = await resolveContext(c)\n if (context instanceof Response) return context\n const input = await parseJsonBody(c, inviteSchema)\n try {\n return c.json({ data: await inviteCloudAdminMember({ ...context, input }) }, 201)\n } catch (error) {\n return handleError(c, error)\n }\n })\n routes.openapi(revokeTeamInvitationRoute, async (c) => {\n const context = await resolveContext(c)\n if (context instanceof Response) return context\n try {\n await revokeCloudAdminInvitation({\n ...context,\n invitationId: c.req.param(\"invitationId\"),\n })\n return c.body(null, 204)\n } catch (error) {\n return handleError(c, error)\n }\n })\n routes.openapi(setTeamMemberAccessRoute, async (c) => {\n const context = await resolveContext(c)\n if (context instanceof Response) return context\n const input = await parseJsonBody(c, accessSchema)\n try {\n return c.json({\n data: await setCloudAdminMemberAccess({\n ...context,\n membershipId: c.req.param(\"membershipId\"),\n hasAccess: input.hasAccess,\n }),\n })\n } catch (error) {\n return handleError(c, error)\n }\n })\n routes.openapi(setTeamMemberPermissionsRoute, async (c) => {\n const context = await resolveContext(c)\n if (context instanceof Response) return context\n const input = await parseJsonBody(c, permissionsSchema)\n try {\n return c.json({\n data: await setCloudAdminMemberPermissions({\n ...context,\n membershipId: c.req.param(\"membershipId\"),\n permissions: input.permissions,\n }),\n })\n } catch (error) {\n return handleError(c, error)\n }\n })\n\n return routes\n}\n"]}
|
|
1
|
+
{"version":3,"file":"team-routes.js","sourceRoot":"","sources":["../src/team-routes.ts"],"names":[],"mappings":"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","sourcesContent":["import { createRoute, OpenAPIHono, z } from \"@hono/zod-openapi\"\nimport { openApiValidationHook, parseJsonBody, type VoyantDb } from \"@voyant-travel/hono\"\nimport type { Context } from \"hono\"\n\nimport { TeamManagementError } from \"./team-management-policy.js\"\nimport type {\n TeamManagementRequestContext,\n TeamManagementRuntimeProvider,\n} from \"./team-management-runtime-port.js\"\n\ntype TeamEnv = {\n Bindings: Record<string, unknown>\n Variables: { userId?: string; db: VoyantDb }\n}\ntype TeamRouteContext = Context<TeamEnv>\n\nconst inviteSchema = z.object({\n email: z.string().email(),\n roleId: z.string().trim().min(1).max(120),\n expiresInDays: z.number().int().min(1).max(30).optional(),\n})\nconst roleSchema = z.object({ roleId: z.string().trim().min(1).max(120) })\n\nconst teamAdminApiId = \"@voyant-travel/auth#team.api.admin\"\nconst jsonBody = <T extends z.ZodTypeAny>(schema: T) => ({\n required: true,\n content: { \"application/json\": { schema } },\n})\nconst responses = (...statuses: number[]) =>\n Object.fromEntries(statuses.map((status) => [status, { description: `HTTP ${status}` }]))\nconst teamRoute = <M extends \"get\" | \"post\" | \"put\" | \"delete\", P extends string>(config: {\n method: M\n path: P\n operationId: string\n request?: Record<string, unknown>\n statuses: number[]\n}) =>\n createRoute({\n method: config.method,\n path: config.path,\n operationId: config.operationId,\n \"x-voyant-api-id\": teamAdminApiId,\n ...(config.request ? { request: config.request } : {}),\n responses: responses(...config.statuses),\n })\n\nconst capabilitiesRoute = teamRoute({\n method: \"get\",\n path: \"/capabilities\",\n operationId: \"getTeamManagementCapabilities\",\n statuses: [200, 401, 403, 501],\n})\nconst listMembersRoute = teamRoute({\n method: \"get\",\n path: \"/members\",\n operationId: \"listTeamMembers\",\n statuses: [200, 401, 403, 501],\n})\nconst listRolesRoute = teamRoute({\n method: \"get\",\n path: \"/roles\",\n operationId: \"listTeamRoles\",\n statuses: [200, 401, 403, 501],\n})\nconst listInvitationsRoute = teamRoute({\n method: \"get\",\n path: \"/invitations\",\n operationId: \"listTeamInvitations\",\n statuses: [200, 401, 403, 501],\n})\nconst createInvitationRoute = teamRoute({\n method: \"post\",\n path: \"/invitations\",\n operationId: \"createTeamInvitation\",\n request: { body: jsonBody(inviteSchema) },\n statuses: [201, 400, 401, 403, 404, 409, 501],\n})\nconst revokeInvitationRoute = teamRoute({\n method: \"delete\",\n path: \"/invitations/{invitationId}\",\n operationId: \"revokeTeamInvitation\",\n request: { params: z.object({ invitationId: z.string() }) },\n statuses: [204, 401, 403, 404, 501],\n})\nconst updateRoleRoute = teamRoute({\n method: \"put\",\n path: \"/members/{memberId}/role\",\n operationId: \"updateTeamMemberRole\",\n request: {\n params: z.object({ memberId: z.string() }),\n body: jsonBody(roleSchema),\n },\n statuses: [200, 400, 401, 403, 404, 409, 501],\n})\nconst deactivateMemberRoute = teamRoute({\n method: \"delete\",\n path: \"/members/{memberId}\",\n operationId: \"deactivateTeamMember\",\n request: { params: z.object({ memberId: z.string() }) },\n statuses: [200, 401, 403, 404, 409, 501],\n})\nconst activateMemberRoute = teamRoute({\n method: \"put\",\n path: \"/members/{memberId}/activation\",\n operationId: \"activateTeamMember\",\n request: { params: z.object({ memberId: z.string() }) },\n statuses: [200, 401, 403, 404, 409, 501],\n})\n\nfunction requestContext(c: TeamRouteContext): TeamManagementRequestContext | Response {\n const userId = c.get(\"userId\")\n if (!userId) return c.json({ error: \"Unauthorized\" }, 401)\n return { bindings: c.env, db: c.get(\"db\"), userId }\n}\n\nfunction handleError(c: TeamRouteContext, error: unknown): Response {\n if (error instanceof TeamManagementError) {\n return c.json({ error: error.message, code: error.code }, error.status)\n }\n if (\n error instanceof Error &&\n \"status\" in error &&\n typeof error.status === \"number\" &&\n error.status >= 400 &&\n error.status <= 599\n ) {\n return c.json({ error: error.message }, error.status as 400)\n }\n throw error\n}\n\nexport function createTeamAdminRoutes(runtime: TeamManagementRuntimeProvider) {\n const routes = new OpenAPIHono<TeamEnv>({ defaultHook: openApiValidationHook })\n\n const run = async <T>(\n c: TeamRouteContext,\n operation: (context: TeamManagementRequestContext) => Promise<T>,\n ): Promise<T | Response> => {\n const context = requestContext(c)\n if (context instanceof Response) return context\n try {\n return await operation(context)\n } catch (error) {\n return handleError(c, error)\n }\n }\n\n routes.openapi(capabilitiesRoute, async (c) => {\n const result = await run(c, (context) => runtime.getCapabilities(context))\n return result instanceof Response ? result : c.json({ data: result })\n })\n routes.openapi(listMembersRoute, async (c) => {\n const result = await run(c, (context) => runtime.listMembers(context))\n return result instanceof Response ? result : c.json({ data: result })\n })\n routes.openapi(listRolesRoute, async (c) => {\n const result = await run(c, (context) => runtime.listRoles(context))\n return result instanceof Response ? result : c.json({ data: result })\n })\n routes.openapi(listInvitationsRoute, async (c) => {\n const result = await run(c, (context) => runtime.listInvitations(context))\n return result instanceof Response ? result : c.json({ data: result })\n })\n routes.openapi(createInvitationRoute, async (c) => {\n const input = await parseJsonBody(c, inviteSchema)\n const result = await run(c, (context) => runtime.inviteMember(context, input))\n return result instanceof Response ? result : c.json({ data: result }, 201)\n })\n routes.openapi(revokeInvitationRoute, async (c) => {\n const { invitationId } = c.req.param()\n const result = await run(c, (context) => runtime.revokeInvitation(context, invitationId))\n return result instanceof Response ? result : c.body(null, 204)\n })\n routes.openapi(updateRoleRoute, async (c) => {\n const { memberId } = c.req.param()\n const input = await parseJsonBody(c, roleSchema)\n const result = await run(c, (context) =>\n runtime.updateMemberRole(context, memberId, input.roleId),\n )\n return result instanceof Response ? result : c.json({ data: result })\n })\n routes.openapi(deactivateMemberRoute, async (c) => {\n const { memberId } = c.req.param()\n const result = await run(c, (context) => runtime.deactivateMember(context, memberId))\n return result instanceof Response ? result : c.json({ data: result })\n })\n routes.openapi(activateMemberRoute, async (c) => {\n const { memberId } = c.req.param()\n const result = await run(c, (context) => runtime.activateMember(context, memberId))\n return result instanceof Response ? result : c.json({ data: result })\n })\n\n return routes\n}\n"]}
|
package/dist/voyant.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { defineModule, providePort, requirePort } from "@voyant-travel/core/project";
|
|
2
2
|
import { identityAccessRuntimePort } from "./identity-access-runtime-port.js";
|
|
3
|
+
import { teamManagementRuntimePort } from "./team-management-runtime-port.js";
|
|
3
4
|
export const authInvitationsVoyantModule = defineModule({
|
|
4
5
|
id: "@voyant-travel/auth#invitations",
|
|
5
6
|
packageName: "@voyant-travel/auth",
|
|
@@ -47,14 +48,16 @@ export const authTeamVoyantModule = defineModule({
|
|
|
47
48
|
id: "@voyant-travel/auth#team",
|
|
48
49
|
packageName: "@voyant-travel/auth",
|
|
49
50
|
localId: "auth.team",
|
|
50
|
-
provides: { ports: [providePort(
|
|
51
|
-
runtimePorts: [requirePort(
|
|
51
|
+
provides: { ports: [providePort(teamManagementRuntimePort)] },
|
|
52
|
+
runtimePorts: [requirePort(teamManagementRuntimePort)],
|
|
52
53
|
api: [
|
|
53
54
|
{
|
|
54
55
|
id: "@voyant-travel/auth#team.api.admin",
|
|
55
56
|
surface: "admin",
|
|
56
57
|
mount: "team",
|
|
58
|
+
resource: "team",
|
|
57
59
|
openapi: { document: "team" },
|
|
60
|
+
transactional: true,
|
|
58
61
|
runtime: {
|
|
59
62
|
entry: "@voyant-travel/auth/identity-access-graph-runtime",
|
|
60
63
|
export: "createTeamVoyantRuntime",
|
|
@@ -89,6 +92,36 @@ export const authTeamVoyantModule = defineModule({
|
|
|
89
92
|
},
|
|
90
93
|
],
|
|
91
94
|
},
|
|
95
|
+
admin: {
|
|
96
|
+
compositionOrder: 5,
|
|
97
|
+
setupSteps: [{ id: "@voyant-travel/auth#setup.team", skippable: true }],
|
|
98
|
+
runtime: {
|
|
99
|
+
entry: "@voyant-travel/auth-react/admin",
|
|
100
|
+
export: "createSelectedAuthTeamAdminExtension",
|
|
101
|
+
},
|
|
102
|
+
copy: [
|
|
103
|
+
{
|
|
104
|
+
id: "@voyant-travel/auth#team.admin.copy",
|
|
105
|
+
namespace: "auth.admin.team",
|
|
106
|
+
fallbackLocale: "en",
|
|
107
|
+
runtime: {
|
|
108
|
+
entry: "@voyant-travel/auth-react/i18n",
|
|
109
|
+
export: "authUiMessageDefinitions",
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
],
|
|
113
|
+
routes: [
|
|
114
|
+
{
|
|
115
|
+
id: "@voyant-travel/auth#team.admin.route",
|
|
116
|
+
path: "/settings/team",
|
|
117
|
+
requiredScopes: ["team:read"],
|
|
118
|
+
runtime: {
|
|
119
|
+
entry: "@voyant-travel/auth-react/admin",
|
|
120
|
+
export: "createSelectedAuthTeamAdminExtension",
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
],
|
|
124
|
+
},
|
|
92
125
|
meta: { ownership: "package" },
|
|
93
126
|
});
|
|
94
127
|
//# sourceMappingURL=voyant.js.map
|
package/dist/voyant.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"voyant.js","sourceRoot":"","sources":["../src/voyant.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAEpF,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAE7E,MAAM,CAAC,MAAM,2BAA2B,GAAG,YAAY,CAAC;IACtD,EAAE,EAAE,iCAAiC;IACrC,WAAW,EAAE,qBAAqB;IAClC,OAAO,EAAE,kBAAkB;IAC3B,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC,EAAE;IAC7D,YAAY,EAAE,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC;IACtD,GAAG,EAAE;QACH;YACE,EAAE,EAAE,2CAA2C;YAC/C,OAAO,EAAE,OAAO;YAChB,KAAK,EAAE,aAAa;YACpB,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE;YACpC,aAAa,EAAE,IAAI;YACnB,OAAO,EAAE;gBACP,KAAK,EAAE,mDAAmD;gBAC1D,MAAM,EAAE,gCAAgC;aACzC;SACF;QACD;YACE,EAAE,EAAE,4CAA4C;YAChD,OAAO,EAAE,QAAQ;YACjB,KAAK,EAAE,aAAa;YACpB,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE;YACpC,aAAa,EAAE,IAAI;YACnB,OAAO,EAAE;gBACP,KAAK,EAAE,mDAAmD;gBAC1D,MAAM,EAAE,gCAAgC;aACzC;SACF;KACF;IACD,aAAa,EAAE;QACb;YACE,EAAE,EAAE,6CAA6C;YACjD,OAAO,EAAE;gBACP,KAAK,EAAE,6CAA6C;gBACpD,MAAM,EAAE,kCAAkC;aAC3C;SACF;KACF;IACD,IAAI,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE;CAC/B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,YAAY,CAAC;IAC/C,EAAE,EAAE,0BAA0B;IAC9B,WAAW,EAAE,qBAAqB;IAClC,OAAO,EAAE,WAAW;IACpB,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC,EAAE;IAC7D,YAAY,EAAE,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC;IACtD,GAAG,EAAE;QACH;YACE,EAAE,EAAE,oCAAoC;YACxC,OAAO,EAAE,OAAO;YAChB,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;YAC7B,OAAO,EAAE;gBACP,KAAK,EAAE,mDAAmD;gBAC1D,MAAM,EAAE,yBAAyB;aAClC;SACF;KACF;IACD,MAAM,EAAE;QACN,SAAS,EAAE;YACT;gBACE,EAAE,EAAE,iCAAiC;gBACrC,QAAQ,EAAE,MAAM;gBAChB,KAAK,EAAE,MAAM;gBACb,WAAW,EAAE,6CAA6C;gBAC1D,OAAO,EAAE;oBACP;wBACE,MAAM,EAAE,MAAM;wBACd,KAAK,EAAE,WAAW;wBAClB,WAAW,EAAE,0BAA0B;qBACxC;oBACD;wBACE,MAAM,EAAE,OAAO;wBACf,KAAK,EAAE,aAAa;wBACpB,WAAW,EAAE,uCAAuC;qBACrD;oBACD;wBACE,MAAM,EAAE,QAAQ;wBAChB,KAAK,EAAE,qBAAqB;wBAC5B,WAAW,EAAE,4BAA4B;wBACzC,SAAS,EAAE,IAAI;qBAChB;iBACF;aACF;SACF;KACF;IACD,IAAI,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE;CAC/B,CAAC,CAAA","sourcesContent":["import { defineModule, providePort, requirePort } from \"@voyant-travel/core/project\"\n\nimport { identityAccessRuntimePort } from \"./identity-access-runtime-port.js\"\n\nexport const authInvitationsVoyantModule = defineModule({\n id: \"@voyant-travel/auth#invitations\",\n packageName: \"@voyant-travel/auth\",\n localId: \"auth.invitations\",\n provides: { ports: [providePort(identityAccessRuntimePort)] },\n runtimePorts: [requirePort(identityAccessRuntimePort)],\n api: [\n {\n id: \"@voyant-travel/auth#invitations.api.admin\",\n surface: \"admin\",\n mount: \"invitations\",\n resource: \"team\",\n openapi: { document: \"invitations\" },\n transactional: true,\n runtime: {\n entry: \"@voyant-travel/auth/identity-access-graph-runtime\",\n export: \"createInvitationsVoyantRuntime\",\n },\n },\n {\n id: \"@voyant-travel/auth#invitations.api.public\",\n surface: \"public\",\n mount: \"invitations\",\n anonymous: true,\n openapi: { document: \"invitations\" },\n transactional: true,\n runtime: {\n entry: \"@voyant-travel/auth/identity-access-graph-runtime\",\n export: \"createInvitationsVoyantRuntime\",\n },\n },\n ],\n presentations: [\n {\n id: \"@voyant-travel/auth#presentation.local-auth\",\n runtime: {\n entry: \"@voyant-travel/auth-react/local-auth-routes\",\n export: \"createLocalAuthRouteContribution\",\n },\n },\n ],\n meta: { ownership: \"package\" },\n})\n\nexport const authTeamVoyantModule = defineModule({\n id: \"@voyant-travel/auth#team\",\n packageName: \"@voyant-travel/auth\",\n localId: \"auth.team\",\n provides: { ports: [providePort(
|
|
1
|
+
{"version":3,"file":"voyant.js","sourceRoot":"","sources":["../src/voyant.ts"],"names":[],"mappings":"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","sourcesContent":["import { defineModule, providePort, requirePort } from \"@voyant-travel/core/project\"\n\nimport { identityAccessRuntimePort } from \"./identity-access-runtime-port.js\"\nimport { teamManagementRuntimePort } from \"./team-management-runtime-port.js\"\n\nexport const authInvitationsVoyantModule = defineModule({\n id: \"@voyant-travel/auth#invitations\",\n packageName: \"@voyant-travel/auth\",\n localId: \"auth.invitations\",\n provides: { ports: [providePort(identityAccessRuntimePort)] },\n runtimePorts: [requirePort(identityAccessRuntimePort)],\n api: [\n {\n id: \"@voyant-travel/auth#invitations.api.admin\",\n surface: \"admin\",\n mount: \"invitations\",\n resource: \"team\",\n openapi: { document: \"invitations\" },\n transactional: true,\n runtime: {\n entry: \"@voyant-travel/auth/identity-access-graph-runtime\",\n export: \"createInvitationsVoyantRuntime\",\n },\n },\n {\n id: \"@voyant-travel/auth#invitations.api.public\",\n surface: \"public\",\n mount: \"invitations\",\n anonymous: true,\n openapi: { document: \"invitations\" },\n transactional: true,\n runtime: {\n entry: \"@voyant-travel/auth/identity-access-graph-runtime\",\n export: \"createInvitationsVoyantRuntime\",\n },\n },\n ],\n presentations: [\n {\n id: \"@voyant-travel/auth#presentation.local-auth\",\n runtime: {\n entry: \"@voyant-travel/auth-react/local-auth-routes\",\n export: \"createLocalAuthRouteContribution\",\n },\n },\n ],\n meta: { ownership: \"package\" },\n})\n\nexport const authTeamVoyantModule = defineModule({\n id: \"@voyant-travel/auth#team\",\n packageName: \"@voyant-travel/auth\",\n localId: \"auth.team\",\n provides: { ports: [providePort(teamManagementRuntimePort)] },\n runtimePorts: [requirePort(teamManagementRuntimePort)],\n api: [\n {\n id: \"@voyant-travel/auth#team.api.admin\",\n surface: \"admin\",\n mount: \"team\",\n resource: \"team\",\n openapi: { document: \"team\" },\n transactional: true,\n runtime: {\n entry: \"@voyant-travel/auth/identity-access-graph-runtime\",\n export: \"createTeamVoyantRuntime\",\n },\n },\n ],\n access: {\n resources: [\n {\n id: \"@voyant-travel/auth#access.team\",\n resource: \"team\",\n label: \"Team\",\n description: \"Manage staff team members and their access.\",\n actions: [\n {\n action: \"read\",\n label: \"View team\",\n description: \"View staff team members.\",\n },\n {\n action: \"write\",\n label: \"Manage team\",\n description: \"Create and update staff team members.\",\n },\n {\n action: \"delete\",\n label: \"Delete team members\",\n description: \"Delete staff team members.\",\n sensitive: true,\n },\n ],\n },\n ],\n },\n admin: {\n compositionOrder: 5,\n setupSteps: [{ id: \"@voyant-travel/auth#setup.team\", skippable: true }],\n runtime: {\n entry: \"@voyant-travel/auth-react/admin\",\n export: \"createSelectedAuthTeamAdminExtension\",\n },\n copy: [\n {\n id: \"@voyant-travel/auth#team.admin.copy\",\n namespace: \"auth.admin.team\",\n fallbackLocale: \"en\",\n runtime: {\n entry: \"@voyant-travel/auth-react/i18n\",\n export: \"authUiMessageDefinitions\",\n },\n },\n ],\n routes: [\n {\n id: \"@voyant-travel/auth#team.admin.route\",\n path: \"/settings/team\",\n requiredScopes: [\"team:read\"],\n runtime: {\n entry: \"@voyant-travel/auth-react/admin\",\n export: \"createSelectedAuthTeamAdminExtension\",\n },\n },\n ],\n },\n meta: { ownership: \"package\" },\n})\n"]}
|
package/openapi/admin/team.json
CHANGED
|
@@ -5,46 +5,39 @@
|
|
|
5
5
|
"version": "1.0.0"
|
|
6
6
|
},
|
|
7
7
|
"paths": {
|
|
8
|
+
"/v1/admin/team/capabilities": {
|
|
9
|
+
"get": {
|
|
10
|
+
"operationId": "getTeamManagementCapabilities",
|
|
11
|
+
"tags": ["Team"],
|
|
12
|
+
"x-voyant-api-id": "@voyant-travel/auth#team.api.admin",
|
|
13
|
+
"responses": { "200": { "description": "Team-management capabilities." } }
|
|
14
|
+
}
|
|
15
|
+
},
|
|
8
16
|
"/v1/admin/team/members": {
|
|
9
17
|
"get": {
|
|
10
18
|
"operationId": "listTeamMembers",
|
|
11
|
-
"summary": "List team members",
|
|
12
19
|
"tags": ["Team"],
|
|
13
20
|
"x-voyant-api-id": "@voyant-travel/auth#team.api.admin",
|
|
14
|
-
"responses": {
|
|
15
|
-
"200": { "description": "The deployment team members." },
|
|
16
|
-
"401": { "description": "The caller is not authenticated." },
|
|
17
|
-
"404": { "description": "Cloud team management is unavailable." }
|
|
18
|
-
}
|
|
21
|
+
"responses": { "200": { "description": "Team roster." } }
|
|
19
22
|
}
|
|
20
23
|
},
|
|
21
24
|
"/v1/admin/team/roles": {
|
|
22
25
|
"get": {
|
|
23
26
|
"operationId": "listTeamRoles",
|
|
24
|
-
"summary": "List team roles",
|
|
25
27
|
"tags": ["Team"],
|
|
26
28
|
"x-voyant-api-id": "@voyant-travel/auth#team.api.admin",
|
|
27
|
-
"responses": {
|
|
28
|
-
"200": { "description": "The available team roles." },
|
|
29
|
-
"401": { "description": "The caller is not authenticated." },
|
|
30
|
-
"404": { "description": "Cloud team management is unavailable." }
|
|
31
|
-
}
|
|
29
|
+
"responses": { "200": { "description": "Available team roles." } }
|
|
32
30
|
}
|
|
33
31
|
},
|
|
34
32
|
"/v1/admin/team/invitations": {
|
|
35
33
|
"get": {
|
|
36
34
|
"operationId": "listTeamInvitations",
|
|
37
|
-
"summary": "List team invitations",
|
|
38
35
|
"tags": ["Team"],
|
|
39
36
|
"x-voyant-api-id": "@voyant-travel/auth#team.api.admin",
|
|
40
|
-
"responses": {
|
|
41
|
-
"200": { "description": "The outstanding team invitations." },
|
|
42
|
-
"401": { "description": "The caller is not authenticated." }
|
|
43
|
-
}
|
|
37
|
+
"responses": { "200": { "description": "Team invitations." } }
|
|
44
38
|
},
|
|
45
39
|
"post": {
|
|
46
40
|
"operationId": "createTeamInvitation",
|
|
47
|
-
"summary": "Invite a team member",
|
|
48
41
|
"tags": ["Team"],
|
|
49
42
|
"x-voyant-api-id": "@voyant-travel/auth#team.api.admin",
|
|
50
43
|
"requestBody": {
|
|
@@ -53,34 +46,22 @@
|
|
|
53
46
|
"application/json": {
|
|
54
47
|
"schema": {
|
|
55
48
|
"type": "object",
|
|
56
|
-
"required": ["email"],
|
|
49
|
+
"required": ["email", "roleId"],
|
|
57
50
|
"properties": {
|
|
58
51
|
"email": { "type": "string", "format": "email" },
|
|
59
|
-
"
|
|
60
|
-
|
|
61
|
-
"minLength": 1,
|
|
62
|
-
"maxLength": 120
|
|
63
|
-
},
|
|
64
|
-
"expiresInDays": {
|
|
65
|
-
"type": "integer",
|
|
66
|
-
"minimum": 1,
|
|
67
|
-
"maximum": 30
|
|
68
|
-
}
|
|
52
|
+
"roleId": { "type": "string", "minLength": 1, "maxLength": 120 },
|
|
53
|
+
"expiresInDays": { "type": "integer", "minimum": 1, "maximum": 30 }
|
|
69
54
|
}
|
|
70
55
|
}
|
|
71
56
|
}
|
|
72
57
|
}
|
|
73
58
|
},
|
|
74
|
-
"responses": {
|
|
75
|
-
"201": { "description": "The created team invitation." },
|
|
76
|
-
"401": { "description": "The caller is not authenticated." }
|
|
77
|
-
}
|
|
59
|
+
"responses": { "201": { "description": "Created team invitation." } }
|
|
78
60
|
}
|
|
79
61
|
},
|
|
80
62
|
"/v1/admin/team/invitations/{invitationId}": {
|
|
81
63
|
"delete": {
|
|
82
64
|
"operationId": "revokeTeamInvitation",
|
|
83
|
-
"summary": "Revoke a team invitation",
|
|
84
65
|
"tags": ["Team"],
|
|
85
66
|
"x-voyant-api-id": "@voyant-travel/auth#team.api.admin",
|
|
86
67
|
"parameters": [
|
|
@@ -91,21 +72,17 @@
|
|
|
91
72
|
"schema": { "type": "string" }
|
|
92
73
|
}
|
|
93
74
|
],
|
|
94
|
-
"responses": {
|
|
95
|
-
"204": { "description": "The invitation was revoked." },
|
|
96
|
-
"401": { "description": "The caller is not authenticated." }
|
|
97
|
-
}
|
|
75
|
+
"responses": { "204": { "description": "Invitation revoked." } }
|
|
98
76
|
}
|
|
99
77
|
},
|
|
100
|
-
"/v1/admin/team/members/{
|
|
78
|
+
"/v1/admin/team/members/{memberId}/role": {
|
|
101
79
|
"put": {
|
|
102
|
-
"operationId": "
|
|
103
|
-
"summary": "Set team member access",
|
|
80
|
+
"operationId": "updateTeamMemberRole",
|
|
104
81
|
"tags": ["Team"],
|
|
105
82
|
"x-voyant-api-id": "@voyant-travel/auth#team.api.admin",
|
|
106
83
|
"parameters": [
|
|
107
84
|
{
|
|
108
|
-
"name": "
|
|
85
|
+
"name": "memberId",
|
|
109
86
|
"in": "path",
|
|
110
87
|
"required": true,
|
|
111
88
|
"schema": { "type": "string" }
|
|
@@ -117,54 +94,45 @@
|
|
|
117
94
|
"application/json": {
|
|
118
95
|
"schema": {
|
|
119
96
|
"type": "object",
|
|
120
|
-
"required": ["
|
|
121
|
-
"properties": { "
|
|
97
|
+
"required": ["roleId"],
|
|
98
|
+
"properties": { "roleId": { "type": "string", "minLength": 1 } }
|
|
122
99
|
}
|
|
123
100
|
}
|
|
124
101
|
}
|
|
125
102
|
},
|
|
126
|
-
"responses": {
|
|
127
|
-
"200": { "description": "The updated team member." },
|
|
128
|
-
"401": { "description": "The caller is not authenticated." }
|
|
129
|
-
}
|
|
103
|
+
"responses": { "200": { "description": "Updated team member." } }
|
|
130
104
|
}
|
|
131
105
|
},
|
|
132
|
-
"/v1/admin/team/members/{
|
|
133
|
-
"
|
|
134
|
-
"operationId": "
|
|
135
|
-
"summary": "Set team member permissions",
|
|
106
|
+
"/v1/admin/team/members/{memberId}": {
|
|
107
|
+
"delete": {
|
|
108
|
+
"operationId": "deactivateTeamMember",
|
|
136
109
|
"tags": ["Team"],
|
|
137
110
|
"x-voyant-api-id": "@voyant-travel/auth#team.api.admin",
|
|
138
111
|
"parameters": [
|
|
139
112
|
{
|
|
140
|
-
"name": "
|
|
113
|
+
"name": "memberId",
|
|
141
114
|
"in": "path",
|
|
142
115
|
"required": true,
|
|
143
116
|
"schema": { "type": "string" }
|
|
144
117
|
}
|
|
145
118
|
],
|
|
146
|
-
"
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
}
|
|
161
|
-
}
|
|
119
|
+
"responses": { "200": { "description": "Deactivated team member." } }
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
"/v1/admin/team/members/{memberId}/activation": {
|
|
123
|
+
"put": {
|
|
124
|
+
"operationId": "activateTeamMember",
|
|
125
|
+
"tags": ["Team"],
|
|
126
|
+
"x-voyant-api-id": "@voyant-travel/auth#team.api.admin",
|
|
127
|
+
"parameters": [
|
|
128
|
+
{
|
|
129
|
+
"name": "memberId",
|
|
130
|
+
"in": "path",
|
|
131
|
+
"required": true,
|
|
132
|
+
"schema": { "type": "string" }
|
|
162
133
|
}
|
|
163
|
-
|
|
164
|
-
"responses": {
|
|
165
|
-
"200": { "description": "The updated team member." },
|
|
166
|
-
"401": { "description": "The caller is not authenticated." }
|
|
167
|
-
}
|
|
134
|
+
],
|
|
135
|
+
"responses": { "200": { "description": "Activated team member." } }
|
|
168
136
|
}
|
|
169
137
|
}
|
|
170
138
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@voyant-travel/auth",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.130.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -67,6 +67,11 @@
|
|
|
67
67
|
"import": "./dist/identity-access-graph-runtime.js",
|
|
68
68
|
"default": "./dist/identity-access-graph-runtime.js"
|
|
69
69
|
},
|
|
70
|
+
"./team-management-runtime-port": {
|
|
71
|
+
"types": "./dist/team-management-runtime-port.d.ts",
|
|
72
|
+
"import": "./dist/team-management-runtime-port.js",
|
|
73
|
+
"default": "./dist/team-management-runtime-port.js"
|
|
74
|
+
},
|
|
70
75
|
"./runtime-contributor": {
|
|
71
76
|
"types": "./dist/runtime-contributor.d.ts",
|
|
72
77
|
"import": "./dist/runtime-contributor.js",
|
|
@@ -95,9 +100,9 @@
|
|
|
95
100
|
"drizzle-orm": "^0.45.2",
|
|
96
101
|
"hono": "^4.12.27",
|
|
97
102
|
"zod": "^4.4.3",
|
|
98
|
-
"@voyant-travel/core": "^0.
|
|
99
|
-
"@voyant-travel/db": "^0.114.
|
|
100
|
-
"@voyant-travel/hono": "^0.
|
|
103
|
+
"@voyant-travel/core": "^0.123.0",
|
|
104
|
+
"@voyant-travel/db": "^0.114.6",
|
|
105
|
+
"@voyant-travel/hono": "^0.127.0",
|
|
101
106
|
"@voyant-travel/types": "^0.109.2",
|
|
102
107
|
"@voyant-travel/utils": "^0.107.1"
|
|
103
108
|
},
|