Add scim bridge with connector

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
This commit is contained in:
Bryan Frimin
2026-01-28 23:42:06 -08:00
parent 6d7f64ebf7
commit bc5bbdae81
43 changed files with 3568 additions and 189 deletions

View File

@@ -0,0 +1,53 @@
/**
* @generated SignedSource<<042ba763926f3dddfcf4f9d673ae5201>>
* @lightSyntaxTransform
* @nogrep
*/
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
import { ReaderFragment } from 'relay-runtime';
import { FragmentRefs } from "relay-runtime";
export type ConnectorListFragment$data = {
readonly scimConfiguration: {
readonly " $fragmentSpreads": FragmentRefs<"GoogleWorkspaceConnectorFragment">;
} | null | undefined;
readonly " $fragmentType": "ConnectorListFragment";
};
export type ConnectorListFragment$key = {
readonly " $data"?: ConnectorListFragment$data;
readonly " $fragmentSpreads": FragmentRefs<"ConnectorListFragment">;
};
const node: ReaderFragment = {
"argumentDefinitions": [],
"kind": "Fragment",
"metadata": null,
"name": "ConnectorListFragment",
"selections": [
{
"alias": null,
"args": null,
"concreteType": "SCIMConfiguration",
"kind": "LinkedField",
"name": "scimConfiguration",
"plural": false,
"selections": [
{
"args": null,
"kind": "FragmentSpread",
"name": "GoogleWorkspaceConnectorFragment"
}
],
"storageKey": null
}
],
"type": "Organization",
"abstractKey": null
};
(node as any).hash = "32fd94ab5080bb8deba95ab24b545fc1";
export default node;

View File

@@ -0,0 +1,93 @@
/**
* @generated SignedSource<<b7e9a7b1979b5caf109266b80803fdbf>>
* @lightSyntaxTransform
* @nogrep
*/
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type DeleteSCIMConfigurationInput = {
organizationId: string;
scimConfigurationId: string;
};
export type GoogleWorkspaceConnectorDeleteMutation$variables = {
input: DeleteSCIMConfigurationInput;
};
export type GoogleWorkspaceConnectorDeleteMutation$data = {
readonly deleteSCIMConfiguration: {
readonly deletedScimConfigurationId: string;
} | null | undefined;
};
export type GoogleWorkspaceConnectorDeleteMutation = {
response: GoogleWorkspaceConnectorDeleteMutation$data;
variables: GoogleWorkspaceConnectorDeleteMutation$variables;
};
const node: ConcreteRequest = (function(){
var v0 = [
{
"defaultValue": null,
"kind": "LocalArgument",
"name": "input"
}
],
v1 = [
{
"alias": null,
"args": [
{
"kind": "Variable",
"name": "input",
"variableName": "input"
}
],
"concreteType": "DeleteSCIMConfigurationPayload",
"kind": "LinkedField",
"name": "deleteSCIMConfiguration",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "deletedScimConfigurationId",
"storageKey": null
}
],
"storageKey": null
}
];
return {
"fragment": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "GoogleWorkspaceConnectorDeleteMutation",
"selections": (v1/*: any*/),
"type": "Mutation",
"abstractKey": null
},
"kind": "Request",
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "GoogleWorkspaceConnectorDeleteMutation",
"selections": (v1/*: any*/)
},
"params": {
"cacheID": "8fa5927c728a768a19fd163d162facac",
"id": null,
"metadata": {},
"name": "GoogleWorkspaceConnectorDeleteMutation",
"operationKind": "mutation",
"text": "mutation GoogleWorkspaceConnectorDeleteMutation(\n $input: DeleteSCIMConfigurationInput!\n) {\n deleteSCIMConfiguration(input: $input) {\n deletedScimConfigurationId\n }\n}\n"
}
};
})();
(node as any).hash = "fc1502ef215040eda187b2f782adb530";
export default node;

View File

@@ -0,0 +1,90 @@
/**
* @generated SignedSource<<2beb895d75d5cbcbd64a59387e35c281>>
* @lightSyntaxTransform
* @nogrep
*/
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
import { ReaderFragment } from 'relay-runtime';
export type ConnectorProvider = "GOOGLE_WORKSPACE" | "SLACK";
import { FragmentRefs } from "relay-runtime";
export type GoogleWorkspaceConnectorFragment$data = {
readonly bridge: {
readonly connector: {
readonly createdAt: string;
readonly id: string;
readonly provider: ConnectorProvider;
} | null | undefined;
} | null | undefined;
readonly id: string;
readonly " $fragmentType": "GoogleWorkspaceConnectorFragment";
};
export type GoogleWorkspaceConnectorFragment$key = {
readonly " $data"?: GoogleWorkspaceConnectorFragment$data;
readonly " $fragmentSpreads": FragmentRefs<"GoogleWorkspaceConnectorFragment">;
};
const node: ReaderFragment = (function(){
var v0 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
};
return {
"argumentDefinitions": [],
"kind": "Fragment",
"metadata": null,
"name": "GoogleWorkspaceConnectorFragment",
"selections": [
(v0/*: any*/),
{
"alias": null,
"args": null,
"concreteType": "SCIMBridge",
"kind": "LinkedField",
"name": "bridge",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Connector",
"kind": "LinkedField",
"name": "connector",
"plural": false,
"selections": [
(v0/*: any*/),
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "provider",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "createdAt",
"storageKey": null
}
],
"storageKey": null
}
],
"storageKey": null
}
],
"type": "SCIMConfiguration",
"abstractKey": null
};
})();
(node as any).hash = "180a97ae989c22060d815280ec2f7b67";
export default node;

View File

@@ -1,5 +1,5 @@
/**
* @generated SignedSource<<481d9c3c647c11a95d68ff7e4a489a24>>
* @generated SignedSource<<29e2f3791be9e59a1c61033e31eb0134>>
* @lightSyntaxTransform
* @nogrep
*/
@@ -10,6 +10,7 @@
import { ConcreteRequest } from 'relay-runtime';
export type CreateSCIMConfigurationInput = {
connectorId?: string | null | undefined;
organizationId: string;
};
export type SCIMConfigurationCreateMutation$variables = {

View File

@@ -1,5 +1,5 @@
/**
* @generated SignedSource<<17691f5400c05fd0281c9320b9fb86b9>>
* @generated SignedSource<<dfd688860df6b21ffe3a3f14bb2e2bf1>>
* @lightSyntaxTransform
* @nogrep
*/
@@ -11,8 +11,15 @@
import { ReaderFragment } from 'relay-runtime';
import { FragmentRefs } from "relay-runtime";
export type SCIMConfigurationFragment$data = {
readonly endpointUrl: string;
readonly id: string;
readonly canCreateSCIMConfiguration: boolean;
readonly canDeleteSCIMConfiguration: boolean;
readonly scimConfiguration: {
readonly bridge: {
readonly id: string;
} | null | undefined;
readonly endpointUrl: string;
readonly id: string;
} | null | undefined;
readonly " $fragmentType": "SCIMConfigurationFragment";
};
export type SCIMConfigurationFragment$key = {
@@ -20,31 +27,83 @@ export type SCIMConfigurationFragment$key = {
readonly " $fragmentSpreads": FragmentRefs<"SCIMConfigurationFragment">;
};
const node: ReaderFragment = {
const node: ReaderFragment = (function(){
var v0 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
};
return {
"argumentDefinitions": [],
"kind": "Fragment",
"metadata": null,
"name": "SCIMConfigurationFragment",
"selections": [
{
"alias": null,
"args": null,
"alias": "canCreateSCIMConfiguration",
"args": [
{
"kind": "Literal",
"name": "action",
"value": "iam:scim-configuration:create"
}
],
"kind": "ScalarField",
"name": "id",
"storageKey": null
"name": "permission",
"storageKey": "permission(action:\"iam:scim-configuration:create\")"
},
{
"alias": "canDeleteSCIMConfiguration",
"args": [
{
"kind": "Literal",
"name": "action",
"value": "iam:scim-configuration:delete"
}
],
"kind": "ScalarField",
"name": "permission",
"storageKey": "permission(action:\"iam:scim-configuration:delete\")"
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "endpointUrl",
"concreteType": "SCIMConfiguration",
"kind": "LinkedField",
"name": "scimConfiguration",
"plural": false,
"selections": [
(v0/*: any*/),
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "endpointUrl",
"storageKey": null
},
{
"alias": null,
"args": null,
"concreteType": "SCIMBridge",
"kind": "LinkedField",
"name": "bridge",
"plural": false,
"selections": [
(v0/*: any*/)
],
"storageKey": null
}
],
"storageKey": null
}
],
"type": "SCIMConfiguration",
"type": "Organization",
"abstractKey": null
};
})();
(node as any).hash = "5bd76da1abe24699f9895857cda748b1";
(node as any).hash = "5b128ae2e680a0ffe0dd931e4e86f52e";
export default node;

View File

@@ -0,0 +1,120 @@
/**
* @generated SignedSource<<4b9c832eb09c31751c1da609cda983ba>>
* @lightSyntaxTransform
* @nogrep
*/
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type CreateSCIMConfigurationInput = {
connectorId?: string | null | undefined;
organizationId: string;
};
export type SCIMSettingsPageCreateSCIMConfigurationMutation$variables = {
input: CreateSCIMConfigurationInput;
};
export type SCIMSettingsPageCreateSCIMConfigurationMutation$data = {
readonly createSCIMConfiguration: {
readonly scimBridge: {
readonly id: string;
} | null | undefined;
readonly scimConfiguration: {
readonly id: string;
};
} | null | undefined;
};
export type SCIMSettingsPageCreateSCIMConfigurationMutation = {
response: SCIMSettingsPageCreateSCIMConfigurationMutation$data;
variables: SCIMSettingsPageCreateSCIMConfigurationMutation$variables;
};
const node: ConcreteRequest = (function(){
var v0 = [
{
"defaultValue": null,
"kind": "LocalArgument",
"name": "input"
}
],
v1 = [
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
}
],
v2 = [
{
"alias": null,
"args": [
{
"kind": "Variable",
"name": "input",
"variableName": "input"
}
],
"concreteType": "CreateSCIMConfigurationPayload",
"kind": "LinkedField",
"name": "createSCIMConfiguration",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "SCIMConfiguration",
"kind": "LinkedField",
"name": "scimConfiguration",
"plural": false,
"selections": (v1/*: any*/),
"storageKey": null
},
{
"alias": null,
"args": null,
"concreteType": "SCIMBridge",
"kind": "LinkedField",
"name": "scimBridge",
"plural": false,
"selections": (v1/*: any*/),
"storageKey": null
}
],
"storageKey": null
}
];
return {
"fragment": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "SCIMSettingsPageCreateSCIMConfigurationMutation",
"selections": (v2/*: any*/),
"type": "Mutation",
"abstractKey": null
},
"kind": "Request",
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "SCIMSettingsPageCreateSCIMConfigurationMutation",
"selections": (v2/*: any*/)
},
"params": {
"cacheID": "281c9e39b96e2e56c3f4379f8dd8dc30",
"id": null,
"metadata": {},
"name": "SCIMSettingsPageCreateSCIMConfigurationMutation",
"operationKind": "mutation",
"text": "mutation SCIMSettingsPageCreateSCIMConfigurationMutation(\n $input: CreateSCIMConfigurationInput!\n) {\n createSCIMConfiguration(input: $input) {\n scimConfiguration {\n id\n }\n scimBridge {\n id\n }\n }\n}\n"
}
};
})();
(node as any).hash = "841dfdb5ce8a226c7e683090c75951f0";
export default node;

View File

@@ -1,5 +1,5 @@
/**
* @generated SignedSource<<5507ea6452d9065f29d74bf685ea3777>>
* @generated SignedSource<<8e3a5e8f3e57e3097149f28537f50e31>>
* @lightSyntaxTransform
* @nogrep
*/
@@ -16,12 +16,15 @@ export type SCIMSettingsPageQuery$variables = {
export type SCIMSettingsPageQuery$data = {
readonly organization: {
readonly __typename: "Organization";
readonly canCreateSCIMConfiguration: boolean;
readonly canDeleteSCIMConfiguration: boolean;
readonly id: string;
readonly scimConfiguration: {
readonly " $fragmentSpreads": FragmentRefs<"SCIMConfigurationFragment" | "SCIMEventListFragment">;
readonly bridge: {
readonly id: string;
} | null | undefined;
readonly id: string;
readonly " $fragmentSpreads": FragmentRefs<"SCIMEventListFragment">;
} | null | undefined;
readonly " $fragmentSpreads": FragmentRefs<"ConnectorListFragment" | "SCIMConfigurationFragment">;
} | {
// This will never be '%other', but we need some
// value in case none of the concrete values match.
@@ -63,32 +66,13 @@ v3 = {
"storageKey": null
},
v4 = {
"alias": "canCreateSCIMConfiguration",
"args": [
{
"kind": "Literal",
"name": "action",
"value": "iam:scim-configuration:create"
}
],
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "permission",
"storageKey": "permission(action:\"iam:scim-configuration:create\")"
"name": "createdAt",
"storageKey": null
},
v5 = {
"alias": "canDeleteSCIMConfiguration",
"args": [
{
"kind": "Literal",
"name": "action",
"value": "iam:scim-configuration:delete"
}
],
"kind": "ScalarField",
"name": "permission",
"storageKey": "permission(action:\"iam:scim-configuration:delete\")"
},
v6 = [
v5 = [
{
"kind": "Literal",
"name": "first",
@@ -117,8 +101,6 @@ return {
"kind": "InlineFragment",
"selections": [
(v3/*: any*/),
(v4/*: any*/),
(v5/*: any*/),
{
"alias": null,
"args": null,
@@ -127,10 +109,18 @@ return {
"name": "scimConfiguration",
"plural": false,
"selections": [
(v3/*: any*/),
{
"alias": null,
"args": null,
"kind": "FragmentSpread",
"name": "SCIMConfigurationFragment"
"concreteType": "SCIMBridge",
"kind": "LinkedField",
"name": "bridge",
"plural": false,
"selections": [
(v3/*: any*/)
],
"storageKey": null
},
{
"args": null,
@@ -139,6 +129,16 @@ return {
}
],
"storageKey": null
},
{
"args": null,
"kind": "FragmentSpread",
"name": "SCIMConfigurationFragment"
},
{
"args": null,
"kind": "FragmentSpread",
"name": "ConnectorListFragment"
}
],
"type": "Organization",
@@ -172,8 +172,6 @@ return {
{
"kind": "InlineFragment",
"selections": [
(v4/*: any*/),
(v5/*: any*/),
{
"alias": null,
"args": null,
@@ -186,13 +184,38 @@ return {
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "endpointUrl",
"concreteType": "SCIMBridge",
"kind": "LinkedField",
"name": "bridge",
"plural": false,
"selections": [
(v3/*: any*/),
{
"alias": null,
"args": null,
"concreteType": "Connector",
"kind": "LinkedField",
"name": "connector",
"plural": false,
"selections": [
(v3/*: any*/),
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "provider",
"storageKey": null
},
(v4/*: any*/)
],
"storageKey": null
}
],
"storageKey": null
},
{
"alias": null,
"args": (v6/*: any*/),
"args": (v5/*: any*/),
"concreteType": "SCIMEventConnection",
"kind": "LinkedField",
"name": "events",
@@ -250,13 +273,7 @@ return {
"name": "ipAddress",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "createdAt",
"storageKey": null
},
(v4/*: any*/),
{
"alias": null,
"args": null,
@@ -346,15 +363,48 @@ return {
},
{
"alias": null,
"args": (v6/*: any*/),
"args": (v5/*: any*/),
"filters": null,
"handle": "connection",
"key": "SCIMEventListFragment_events",
"kind": "LinkedHandle",
"name": "events"
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "endpointUrl",
"storageKey": null
}
],
"storageKey": null
},
{
"alias": "canCreateSCIMConfiguration",
"args": [
{
"kind": "Literal",
"name": "action",
"value": "iam:scim-configuration:create"
}
],
"kind": "ScalarField",
"name": "permission",
"storageKey": "permission(action:\"iam:scim-configuration:create\")"
},
{
"alias": "canDeleteSCIMConfiguration",
"args": [
{
"kind": "Literal",
"name": "action",
"value": "iam:scim-configuration:delete"
}
],
"kind": "ScalarField",
"name": "permission",
"storageKey": "permission(action:\"iam:scim-configuration:delete\")"
}
],
"type": "Organization",
@@ -366,16 +416,16 @@ return {
]
},
"params": {
"cacheID": "89bcad16c50ccf4ef4afd0345b02fe4a",
"cacheID": "eabd000a44bc720b07342557eedac872",
"id": null,
"metadata": {},
"name": "SCIMSettingsPageQuery",
"operationKind": "query",
"text": "query SCIMSettingsPageQuery(\n $organizationId: ID!\n) {\n organization: node(id: $organizationId) {\n __typename\n ... on Organization {\n id\n canCreateSCIMConfiguration: permission(action: \"iam:scim-configuration:create\")\n canDeleteSCIMConfiguration: permission(action: \"iam:scim-configuration:delete\")\n scimConfiguration {\n ...SCIMConfigurationFragment\n ...SCIMEventListFragment\n id\n }\n }\n id\n }\n}\n\nfragment SCIMConfigurationFragment on SCIMConfiguration {\n id\n endpointUrl\n}\n\nfragment SCIMEventListFragment on SCIMConfiguration {\n events(first: 20) {\n edges {\n node {\n id\n ...SCIMEventListItemFragment\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n hasPreviousPage\n startCursor\n }\n }\n id\n}\n\nfragment SCIMEventListItemFragment on SCIMEvent {\n id\n method\n path\n statusCode\n errorMessage\n ipAddress\n createdAt\n membership {\n id\n profile {\n fullName\n id\n }\n }\n}\n"
"text": "query SCIMSettingsPageQuery(\n $organizationId: ID!\n) {\n organization: node(id: $organizationId) {\n __typename\n ... on Organization {\n id\n scimConfiguration {\n id\n bridge {\n id\n }\n ...SCIMEventListFragment\n }\n ...SCIMConfigurationFragment\n ...ConnectorListFragment\n }\n id\n }\n}\n\nfragment ConnectorListFragment on Organization {\n scimConfiguration {\n ...GoogleWorkspaceConnectorFragment\n id\n }\n}\n\nfragment GoogleWorkspaceConnectorFragment on SCIMConfiguration {\n id\n bridge {\n connector {\n id\n provider\n createdAt\n }\n id\n }\n}\n\nfragment SCIMConfigurationFragment on Organization {\n canCreateSCIMConfiguration: permission(action: \"iam:scim-configuration:create\")\n canDeleteSCIMConfiguration: permission(action: \"iam:scim-configuration:delete\")\n scimConfiguration {\n id\n endpointUrl\n bridge {\n id\n }\n }\n}\n\nfragment SCIMEventListFragment on SCIMConfiguration {\n events(first: 20) {\n edges {\n node {\n id\n ...SCIMEventListItemFragment\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n hasPreviousPage\n startCursor\n }\n }\n id\n}\n\nfragment SCIMEventListItemFragment on SCIMEvent {\n id\n method\n path\n statusCode\n errorMessage\n ipAddress\n createdAt\n membership {\n id\n profile {\n fullName\n id\n }\n }\n}\n"
}
};
})();
(node as any).hash = "051cceb15c9eaf30694189c259b6d715";
(node as any).hash = "9db69676a14d2a6c4062fee58ce728e1";
export default node;