chenhunghan commited on
Commit
62cf129
·
unverified ·
1 Parent(s): 2be99ac

chore: refactor into getSCIMToken

Browse files

Signed-off-by: Hung-Han (Henry) Chen <chenhungh@gmail.com>

src/resources/(groups)/[groupId]/index.ts CHANGED
@@ -1,6 +1,7 @@
1
  import { type InferSchema, type ResourceMetadata } from "xmcp";
2
  import { headers } from "xmcp/headers";
3
  import { z } from "zod";
 
4
 
5
  export const schema = {
6
  groupId: z.string().describe("The ID of the group"),
@@ -30,7 +31,7 @@ export default async function handler({
30
  excludedAttributes,
31
  }: InferSchema<typeof schema>) {
32
  const requestHeaders = headers();
33
- const apiToken = requestHeaders["x-scim-api-key"];
34
  const baseUrl = requestHeaders["x-scim-base-url"];
35
 
36
  if (!apiToken) {
 
1
  import { type InferSchema, type ResourceMetadata } from "xmcp";
2
  import { headers } from "xmcp/headers";
3
  import { z } from "zod";
4
+ import { getScimToken } from "../../../utils/getSCIMApiKey";
5
 
6
  export const schema = {
7
  groupId: z.string().describe("The ID of the group"),
 
31
  excludedAttributes,
32
  }: InferSchema<typeof schema>) {
33
  const requestHeaders = headers();
34
+ const apiToken = getScimToken(requestHeaders);
35
  const baseUrl = requestHeaders["x-scim-base-url"];
36
 
37
  if (!apiToken) {
src/resources/(groups)/index.ts CHANGED
@@ -1,6 +1,7 @@
1
  import { type InferSchema, type ResourceMetadata } from "xmcp";
2
  import { headers } from "xmcp/headers";
3
  import { z } from "zod";
 
4
 
5
  export const schema = {
6
  filter: z
@@ -35,7 +36,7 @@ export default async function handler({
35
  count,
36
  }: InferSchema<typeof schema>) {
37
  const requestHeaders = headers();
38
- const apiToken = requestHeaders["x-scim-api-key"];
39
  const baseUrl = requestHeaders["x-scim-base-url"];
40
 
41
  if (!apiToken) {
 
1
  import { type InferSchema, type ResourceMetadata } from "xmcp";
2
  import { headers } from "xmcp/headers";
3
  import { z } from "zod";
4
+ import { getScimToken } from "../../utils/getSCIMApiKey";
5
 
6
  export const schema = {
7
  filter: z
 
36
  count,
37
  }: InferSchema<typeof schema>) {
38
  const requestHeaders = headers();
39
+ const apiToken = getScimToken(requestHeaders);
40
  const baseUrl = requestHeaders["x-scim-base-url"];
41
 
42
  if (!apiToken) {
src/resources/(users)/[userId]/index.ts CHANGED
@@ -1,6 +1,7 @@
1
  import { type InferSchema, type ResourceMetadata } from "xmcp";
2
  import { headers } from "xmcp/headers";
3
  import { z } from "zod";
 
4
 
5
  export const schema = {
6
  userId: z.string().describe("The ID of the user"),
@@ -30,7 +31,7 @@ export default async function handler({
30
  excludedAttributes,
31
  }: InferSchema<typeof schema>) {
32
  const requestHeaders = headers();
33
- const apiToken = requestHeaders["x-scim-api-key"];
34
  const baseUrl = requestHeaders["x-scim-base-url"];
35
 
36
  if (!apiToken) {
 
1
  import { type InferSchema, type ResourceMetadata } from "xmcp";
2
  import { headers } from "xmcp/headers";
3
  import { z } from "zod";
4
+ import { getScimToken } from "../../../utils/getSCIMApiKey";
5
 
6
  export const schema = {
7
  userId: z.string().describe("The ID of the user"),
 
31
  excludedAttributes,
32
  }: InferSchema<typeof schema>) {
33
  const requestHeaders = headers();
34
+ const apiToken = getScimToken(requestHeaders);
35
  const baseUrl = requestHeaders["x-scim-base-url"];
36
 
37
  if (!apiToken) {
src/resources/(users)/index.ts CHANGED
@@ -1,6 +1,7 @@
1
  import { type InferSchema, type ResourceMetadata } from "xmcp";
2
  import { headers } from "xmcp/headers";
3
  import { z } from "zod";
 
4
 
5
  export const schema = {
6
  filter: z
@@ -35,7 +36,7 @@ export default async function handler({
35
  count,
36
  }: InferSchema<typeof schema>) {
37
  const requestHeaders = headers();
38
- const apiToken = requestHeaders["x-scim-api-key"];
39
  const baseUrl = requestHeaders["x-scim-base-url"];
40
 
41
  if (!apiToken) {
 
1
  import { type InferSchema, type ResourceMetadata } from "xmcp";
2
  import { headers } from "xmcp/headers";
3
  import { z } from "zod";
4
+ import { getScimToken } from "../../utils/getSCIMApiKey";
5
 
6
  export const schema = {
7
  filter: z
 
36
  count,
37
  }: InferSchema<typeof schema>) {
38
  const requestHeaders = headers();
39
+ const apiToken = getScimToken(requestHeaders);
40
  const baseUrl = requestHeaders["x-scim-base-url"];
41
 
42
  if (!apiToken) {
src/tools/addUserToGroup.ts CHANGED
@@ -1,6 +1,7 @@
1
  import { type InferSchema, type ToolMetadata } from "xmcp";
2
  import { headers } from "xmcp/headers";
3
  import { z } from "zod";
 
4
  import { readJsonBody } from "../utils/responseBody";
5
 
6
  export const metadata: ToolMetadata = {
@@ -24,7 +25,7 @@ export default async function addUserToGroup(
24
  params: InferSchema<typeof schema>
25
  ) {
26
  const requestHeaders = headers();
27
- const apiToken = requestHeaders["x-scim-api-key"];
28
  const baseUrl = requestHeaders["x-scim-base-url"];
29
 
30
  if (!apiToken) {
 
1
  import { type InferSchema, type ToolMetadata } from "xmcp";
2
  import { headers } from "xmcp/headers";
3
  import { z } from "zod";
4
+ import { getScimToken } from "../utils/getSCIMApiKey";
5
  import { readJsonBody } from "../utils/responseBody";
6
 
7
  export const metadata: ToolMetadata = {
 
25
  params: InferSchema<typeof schema>
26
  ) {
27
  const requestHeaders = headers();
28
+ const apiToken = getScimToken(requestHeaders);
29
  const baseUrl = requestHeaders["x-scim-base-url"];
30
 
31
  if (!apiToken) {
src/tools/createGroup.ts CHANGED
@@ -1,7 +1,8 @@
1
  import { type InferSchema, type ToolMetadata } from "xmcp";
2
  import { headers } from "xmcp/headers";
3
- import { groupResourceSchema } from "../schemas/groupResourceSchema";
4
  import { z } from "zod";
 
 
5
  import { readJsonBody } from "../utils/responseBody";
6
 
7
  export const metadata: ToolMetadata = {
@@ -30,7 +31,7 @@ export default async function createGroup(
30
  ) {
31
  const { groupResource } = params;
32
  const requestHeaders = headers();
33
- const apiToken = requestHeaders["x-scim-api-key"];
34
  const baseUrl = requestHeaders["x-scim-base-url"];
35
 
36
  if (!apiToken) {
 
1
  import { type InferSchema, type ToolMetadata } from "xmcp";
2
  import { headers } from "xmcp/headers";
 
3
  import { z } from "zod";
4
+ import { groupResourceSchema } from "../schemas/groupResourceSchema";
5
+ import { getScimToken } from "../utils/getSCIMApiKey";
6
  import { readJsonBody } from "../utils/responseBody";
7
 
8
  export const metadata: ToolMetadata = {
 
31
  ) {
32
  const { groupResource } = params;
33
  const requestHeaders = headers();
34
+ const apiToken = getScimToken(requestHeaders);
35
  const baseUrl = requestHeaders["x-scim-base-url"];
36
 
37
  if (!apiToken) {
src/tools/createUser.ts CHANGED
@@ -2,6 +2,7 @@ import { type InferSchema, type ToolMetadata } from "xmcp";
2
  import { headers } from "xmcp/headers";
3
  import { z } from "zod";
4
  import { userResourceSchema } from "../schemas/userResourceSchema";
 
5
  import { readJsonBody } from "../utils/responseBody";
6
 
7
  export const metadata: ToolMetadata = {
@@ -30,7 +31,7 @@ export default async function createUser(
30
  ) {
31
  const { userResource } = params;
32
  const requestHeaders = headers();
33
- const apiToken = requestHeaders["x-scim-api-key"];
34
  const baseUrl = requestHeaders["x-scim-base-url"];
35
 
36
  if (!apiToken) {
 
2
  import { headers } from "xmcp/headers";
3
  import { z } from "zod";
4
  import { userResourceSchema } from "../schemas/userResourceSchema";
5
+ import { getScimToken } from "../utils/getSCIMApiKey";
6
  import { readJsonBody } from "../utils/responseBody";
7
 
8
  export const metadata: ToolMetadata = {
 
31
  ) {
32
  const { userResource } = params;
33
  const requestHeaders = headers();
34
+ const apiToken = getScimToken(requestHeaders);
35
  const baseUrl = requestHeaders["x-scim-base-url"];
36
 
37
  if (!apiToken) {
src/tools/deleteGroup.ts CHANGED
@@ -1,6 +1,7 @@
1
  import { type InferSchema, type ToolMetadata } from "xmcp";
2
  import { headers } from "xmcp/headers";
3
  import { z } from "zod";
 
4
 
5
  export const metadata: ToolMetadata = {
6
  name: "delete-group",
@@ -22,7 +23,7 @@ export default async function deleteGroup(
22
  params: InferSchema<typeof schema>
23
  ) {
24
  const requestHeaders = headers();
25
- const apiToken = requestHeaders["x-scim-api-key"];
26
  const baseUrl = requestHeaders["x-scim-base-url"];
27
 
28
  if (!apiToken) {
 
1
  import { type InferSchema, type ToolMetadata } from "xmcp";
2
  import { headers } from "xmcp/headers";
3
  import { z } from "zod";
4
+ import { getScimToken } from "../utils/getSCIMApiKey";
5
 
6
  export const metadata: ToolMetadata = {
7
  name: "delete-group",
 
23
  params: InferSchema<typeof schema>
24
  ) {
25
  const requestHeaders = headers();
26
+ const apiToken = getScimToken(requestHeaders);
27
  const baseUrl = requestHeaders["x-scim-base-url"];
28
 
29
  if (!apiToken) {
src/tools/deleteUser.ts CHANGED
@@ -1,6 +1,7 @@
1
  import { type InferSchema, type ToolMetadata } from "xmcp";
2
  import { headers } from "xmcp/headers";
3
  import { z } from "zod";
 
4
 
5
  export const metadata: ToolMetadata = {
6
  name: "delete-user",
@@ -22,7 +23,7 @@ export default async function deleteUser(
22
  params: InferSchema<typeof schema>
23
  ) {
24
  const requestHeaders = headers();
25
- const apiToken = requestHeaders["x-scim-api-key"];
26
  const baseUrl = requestHeaders["x-scim-base-url"];
27
 
28
  if (!apiToken) {
 
1
  import { type InferSchema, type ToolMetadata } from "xmcp";
2
  import { headers } from "xmcp/headers";
3
  import { z } from "zod";
4
+ import { getScimToken } from "../utils/getSCIMApiKey";
5
 
6
  export const metadata: ToolMetadata = {
7
  name: "delete-user",
 
23
  params: InferSchema<typeof schema>
24
  ) {
25
  const requestHeaders = headers();
26
+ const apiToken = getScimToken(requestHeaders);
27
  const baseUrl = requestHeaders["x-scim-base-url"];
28
 
29
  if (!apiToken) {
src/tools/patchGroup.ts CHANGED
@@ -1,7 +1,8 @@
1
  import { type InferSchema, type ToolMetadata } from "xmcp";
2
  import { headers } from "xmcp/headers";
3
- import { patchOperationSchema } from "../schemas/patchOperationSchema";
4
  import { z } from "zod";
 
 
5
  import { readJsonBody } from "../utils/responseBody";
6
 
7
  export const metadata: ToolMetadata = {
@@ -25,7 +26,7 @@ export default async function patchGroup(
25
  params: InferSchema<typeof schema>
26
  ) {
27
  const requestHeaders = headers();
28
- const apiToken = requestHeaders["x-scim-api-key"];
29
  const baseUrl = requestHeaders["x-scim-base-url"];
30
 
31
  if (!apiToken) {
 
1
  import { type InferSchema, type ToolMetadata } from "xmcp";
2
  import { headers } from "xmcp/headers";
 
3
  import { z } from "zod";
4
+ import { patchOperationSchema } from "../schemas/patchOperationSchema";
5
+ import { getScimToken } from "../utils/getSCIMApiKey";
6
  import { readJsonBody } from "../utils/responseBody";
7
 
8
  export const metadata: ToolMetadata = {
 
26
  params: InferSchema<typeof schema>
27
  ) {
28
  const requestHeaders = headers();
29
+ const apiToken = getScimToken(requestHeaders);
30
  const baseUrl = requestHeaders["x-scim-base-url"];
31
 
32
  if (!apiToken) {
src/tools/patchUser.ts CHANGED
@@ -1,7 +1,8 @@
1
  import { type InferSchema, type ToolMetadata } from "xmcp";
2
  import { headers } from "xmcp/headers";
3
- import { patchOperationSchema } from "../schemas/patchOperationSchema";
4
  import { z } from "zod";
 
 
5
  import { readJsonBody } from "../utils/responseBody";
6
 
7
  export const metadata: ToolMetadata = {
@@ -25,7 +26,7 @@ export default async function patchUser(
25
  params: InferSchema<typeof schema>
26
  ) {
27
  const requestHeaders = headers();
28
- const apiToken = requestHeaders["x-scim-api-key"];
29
  const baseUrl = requestHeaders["x-scim-base-url"];
30
 
31
  if (!apiToken) {
 
1
  import { type InferSchema, type ToolMetadata } from "xmcp";
2
  import { headers } from "xmcp/headers";
 
3
  import { z } from "zod";
4
+ import { patchOperationSchema } from "../schemas/patchOperationSchema";
5
+ import { getScimToken } from "../utils/getSCIMApiKey";
6
  import { readJsonBody } from "../utils/responseBody";
7
 
8
  export const metadata: ToolMetadata = {
 
26
  params: InferSchema<typeof schema>
27
  ) {
28
  const requestHeaders = headers();
29
+ const apiToken = getScimToken(requestHeaders);
30
  const baseUrl = requestHeaders["x-scim-base-url"];
31
 
32
  if (!apiToken) {
src/tools/removeUserFromGroup.ts CHANGED
@@ -1,6 +1,7 @@
1
  import { type InferSchema, type ToolMetadata } from "xmcp";
2
  import { headers } from "xmcp/headers";
3
  import { z } from "zod";
 
4
  import { readJsonBody } from "../utils/responseBody";
5
 
6
  export const metadata: ToolMetadata = {
@@ -24,7 +25,7 @@ export default async function removeUserFromGroup(
24
  params: InferSchema<typeof schema>
25
  ) {
26
  const requestHeaders = headers();
27
- const apiToken = requestHeaders["x-scim-api-key"];
28
  const baseUrl = requestHeaders["x-scim-base-url"];
29
 
30
  if (!apiToken) {
 
1
  import { type InferSchema, type ToolMetadata } from "xmcp";
2
  import { headers } from "xmcp/headers";
3
  import { z } from "zod";
4
+ import { getScimToken } from "../utils/getSCIMApiKey";
5
  import { readJsonBody } from "../utils/responseBody";
6
 
7
  export const metadata: ToolMetadata = {
 
25
  params: InferSchema<typeof schema>
26
  ) {
27
  const requestHeaders = headers();
28
+ const apiToken = getScimToken(requestHeaders);
29
  const baseUrl = requestHeaders["x-scim-base-url"];
30
 
31
  if (!apiToken) {
src/tools/replaceGroup.ts CHANGED
@@ -1,7 +1,8 @@
1
  import { type InferSchema, type ToolMetadata } from "xmcp";
2
  import { headers } from "xmcp/headers";
3
- import { groupResourceSchema } from "../schemas/groupResourceSchema";
4
  import { z } from "zod";
 
 
5
  import { readJsonBody } from "../utils/responseBody";
6
 
7
  export const metadata: ToolMetadata = {
@@ -25,7 +26,7 @@ export default async function replaceGroup(
25
  params: InferSchema<typeof schema>
26
  ) {
27
  const requestHeaders = headers();
28
- const apiToken = requestHeaders["x-scim-api-key"];
29
  const baseUrl = requestHeaders["x-scim-base-url"];
30
 
31
  if (!apiToken) {
 
1
  import { type InferSchema, type ToolMetadata } from "xmcp";
2
  import { headers } from "xmcp/headers";
 
3
  import { z } from "zod";
4
+ import { groupResourceSchema } from "../schemas/groupResourceSchema";
5
+ import { getScimToken } from "../utils/getSCIMApiKey";
6
  import { readJsonBody } from "../utils/responseBody";
7
 
8
  export const metadata: ToolMetadata = {
 
26
  params: InferSchema<typeof schema>
27
  ) {
28
  const requestHeaders = headers();
29
+ const apiToken = getScimToken(requestHeaders);
30
  const baseUrl = requestHeaders["x-scim-base-url"];
31
 
32
  if (!apiToken) {
src/tools/replaceUser.ts CHANGED
@@ -1,7 +1,8 @@
1
  import { type InferSchema, type ToolMetadata } from "xmcp";
2
  import { headers } from "xmcp/headers";
3
- import { userResourceSchema } from "../schemas/userResourceSchema";
4
  import { z } from "zod";
 
 
5
  import { readJsonBody } from "../utils/responseBody";
6
 
7
  export const metadata: ToolMetadata = {
@@ -25,7 +26,7 @@ export default async function replaceUser(
25
  params: InferSchema<typeof schema>
26
  ) {
27
  const requestHeaders = headers();
28
- const apiToken = requestHeaders["x-scim-api-key"];
29
  const baseUrl = requestHeaders["x-scim-base-url"];
30
 
31
  if (!apiToken) {
 
1
  import { type InferSchema, type ToolMetadata } from "xmcp";
2
  import { headers } from "xmcp/headers";
 
3
  import { z } from "zod";
4
+ import { userResourceSchema } from "../schemas/userResourceSchema";
5
+ import { getScimToken } from "../utils/getSCIMApiKey";
6
  import { readJsonBody } from "../utils/responseBody";
7
 
8
  export const metadata: ToolMetadata = {
 
26
  params: InferSchema<typeof schema>
27
  ) {
28
  const requestHeaders = headers();
29
+ const apiToken = getScimToken(requestHeaders);
30
  const baseUrl = requestHeaders["x-scim-base-url"];
31
 
32
  if (!apiToken) {
src/utils/getSCIMApiKey.ts ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+
3
+ type Headers = import("http").IncomingHttpHeaders;
4
+
5
+ export function getScimToken(headers: Headers): string {
6
+ let token = "";
7
+
8
+ if (process.env.SCIM_API_TOKEN) {
9
+ token = process.env.SCIM_API_TOKEN;
10
+ }
11
+ const tokenFromHeader = headers["x-scim-api-key"] || headers["X-SCIM-API-KEY"];
12
+ if (typeof tokenFromHeader === "string") {
13
+ token = tokenFromHeader.trim();
14
+ }
15
+
16
+ return token;
17
+ }