Add category field
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
This commit is contained in:
@@ -18,7 +18,7 @@ import Fuse from "fuse.js";
|
||||
import { useToast } from "@/hooks/use-toast";
|
||||
import { PageTemplate } from "@/components/PageTemplate";
|
||||
import { ListVendorViewSkeleton } from "./ListVendorPage";
|
||||
import { ListVendorViewCreateVendorMutation } from "./__generated__/ListVendorViewCreateVendorMutation.graphql";
|
||||
import { ListVendorViewCreateVendorMutation, VendorCategory } from "./__generated__/ListVendorViewCreateVendorMutation.graphql";
|
||||
import { ListVendorViewPaginationQuery } from "./__generated__/ListVendorViewPaginationQuery.graphql";
|
||||
import { ListVendorView_vendors$key } from "./__generated__/ListVendorView_vendors.graphql";
|
||||
import { ListVendorViewQuery } from "./__generated__/ListVendorViewQuery.graphql";
|
||||
@@ -385,7 +385,7 @@ function ListVendorContent({
|
||||
headquarterAddress: vendor.headquarterAddress,
|
||||
legalName: vendor.legalName,
|
||||
websiteUrl: vendor.websiteUrl,
|
||||
category: vendor.category,
|
||||
category: vendor.category as VendorCategory || null,
|
||||
privacyPolicyUrl: vendor.privacyPolicyUrl,
|
||||
serviceLevelAgreementUrl:
|
||||
vendor.serviceLevelAgreementUrl,
|
||||
|
||||
@@ -18,7 +18,7 @@ import { Suspense, useEffect, useState, useCallback, useRef } from "react";
|
||||
import type { VendorViewQuery as VendorViewQueryType } from "./__generated__/VendorViewQuery.graphql";
|
||||
import type { VendorViewDeleteComplianceReportMutation as DeleteComplianceReportMutationType } from "./__generated__/VendorViewDeleteComplianceReportMutation.graphql";
|
||||
import type { VendorViewUploadComplianceReportMutation as UploadComplianceReportMutationType } from "./__generated__/VendorViewUploadComplianceReportMutation.graphql";
|
||||
import type { VendorViewUpdateVendorMutation } from "./__generated__/VendorViewUpdateVendorMutation.graphql";
|
||||
import type { VendorViewUpdateVendorMutation, VendorCategory } from "./__generated__/VendorViewUpdateVendorMutation.graphql";
|
||||
import type { VendorViewCreateRiskAssessmentMutation } from "./__generated__/VendorViewCreateRiskAssessmentMutation.graphql";
|
||||
import type { VendorViewAssessVendorMutation } from "./__generated__/VendorViewAssessVendorMutation.graphql";
|
||||
import type {
|
||||
@@ -34,6 +34,36 @@ import PeopleSelector from "@/components/PeopleSelector";
|
||||
import { formatDistanceToNow, format, isPast } from "date-fns";
|
||||
import { Dialog, DialogContent, DialogHeader, DialogTitle } from "@/components/ui/dialog";
|
||||
|
||||
interface VendorCategoryOption {
|
||||
value: VendorCategory;
|
||||
label: string;
|
||||
}
|
||||
|
||||
const VENDOR_CATEGORIES: VendorCategoryOption[] = [
|
||||
{ value: "ANALYTICS", label: "Analytics" },
|
||||
{ value: "CLOUD_MONITORING", label: "Cloud Monitoring" },
|
||||
{ value: "CLOUD_PROVIDER", label: "Cloud Provider" },
|
||||
{ value: "COLLABORATION", label: "Collaboration" },
|
||||
{ value: "CUSTOMER_SUPPORT", label: "Customer Support" },
|
||||
{ value: "DATA_STORAGE_AND_PROCESSING", label: "Data Storage and Processing" },
|
||||
{ value: "DOCUMENT_MANAGEMENT", label: "Document Management" },
|
||||
{ value: "EMPLOYEE_MANAGEMENT", label: "Employee Management" },
|
||||
{ value: "ENGINEERING", label: "Engineering" },
|
||||
{ value: "FINANCE", label: "Finance" },
|
||||
{ value: "IDENTITY_PROVIDER", label: "Identity Provider" },
|
||||
{ value: "IT", label: "IT" },
|
||||
{ value: "MARKETING", label: "Marketing" },
|
||||
{ value: "OFFICE_OPERATIONS", label: "Office Operations" },
|
||||
{ value: "OTHER", label: "Other" },
|
||||
{ value: "PASSWORD_MANAGEMENT", label: "Password Management" },
|
||||
{ value: "PRODUCT_AND_DESIGN", label: "Product and Design" },
|
||||
{ value: "PROFESSIONAL_SERVICES", label: "Professional Services" },
|
||||
{ value: "RECRUITING", label: "Recruiting" },
|
||||
{ value: "SALES", label: "Sales" },
|
||||
{ value: "SECURITY", label: "Security" },
|
||||
{ value: "VERSION_CONTROL", label: "Version Control" }
|
||||
];
|
||||
|
||||
const vendorViewQuery = graphql`
|
||||
query VendorViewQuery($vendorId: ID!, $organizationId: ID!) {
|
||||
node(id: $vendorId) {
|
||||
@@ -52,6 +82,7 @@ const vendorViewQuery = graphql`
|
||||
headquarterAddress
|
||||
legalName
|
||||
websiteUrl
|
||||
category
|
||||
businessOwner {
|
||||
id
|
||||
fullName
|
||||
@@ -127,6 +158,7 @@ const updateVendorMutation = graphql`
|
||||
headquarterAddress
|
||||
legalName
|
||||
websiteUrl
|
||||
category
|
||||
businessOwner {
|
||||
id
|
||||
fullName
|
||||
@@ -216,6 +248,7 @@ const assessVendorMutation = graphql`
|
||||
headquarterAddress
|
||||
legalName
|
||||
websiteUrl
|
||||
category
|
||||
businessOwner {
|
||||
id
|
||||
fullName
|
||||
@@ -1415,6 +1448,7 @@ function VendorViewContent({
|
||||
websiteUrl: data.node.websiteUrl || "",
|
||||
businessOwnerId: data.node.businessOwner?.id || null,
|
||||
securityOwnerId: data.node.securityOwner?.id || null,
|
||||
category: data.node.category || null,
|
||||
});
|
||||
const [updateVendor] =
|
||||
useMutation<VendorViewUpdateVendorMutation>(updateVendorMutation);
|
||||
@@ -1447,6 +1481,7 @@ function VendorViewContent({
|
||||
...formData,
|
||||
businessOwnerId: formData.businessOwnerId || undefined,
|
||||
securityOwnerId: formData.securityOwnerId || undefined,
|
||||
category: formData.category as VendorCategory | null,
|
||||
};
|
||||
|
||||
updateVendor({
|
||||
@@ -1556,6 +1591,7 @@ function VendorViewContent({
|
||||
websiteUrl: data.node.websiteUrl || "",
|
||||
businessOwnerId: data.node.businessOwner?.id || null,
|
||||
securityOwnerId: data.node.securityOwner?.id || null,
|
||||
category: data.node.category || null,
|
||||
});
|
||||
setEditedFields(new Set());
|
||||
};
|
||||
@@ -1817,7 +1853,25 @@ function VendorViewContent({
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="space-y-1">
|
||||
<p className="text-sm font-medium text-[#6B716A]">Category</p>
|
||||
<div className="rounded-lg bg-[rgba(5,77,5,0.03)] px-2 py-1.5">
|
||||
<select
|
||||
value={formData.category || ""}
|
||||
onChange={(e) => {
|
||||
const value = e.target.value;
|
||||
handleFieldChange("category", value ? (value as VendorCategory) : null);
|
||||
}}
|
||||
className="w-full font-geist font-medium text-[16px] leading-[1.5em] text-[#141E12] bg-transparent border-0 outline-none focus:ring-0 focus-visible:ring-0 p-0"
|
||||
>
|
||||
{VENDOR_CATEGORIES.map(({ value, label }) => (
|
||||
<option key={value} value={value}>
|
||||
{label}
|
||||
</option>
|
||||
))}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div className="space-y-1">
|
||||
<p className="text-sm font-medium text-[#6B716A]">
|
||||
Legal name
|
||||
@@ -2386,6 +2440,7 @@ function VendorViewContent({
|
||||
headquarterAddress: newData.headquarterAddress || prevData.headquarterAddress,
|
||||
legalName: newData.legalName || prevData.legalName,
|
||||
websiteUrl: newData.websiteUrl || prevData.websiteUrl,
|
||||
category: newData.category || prevData.category,
|
||||
};
|
||||
return newFormData;
|
||||
});
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @generated SignedSource<<c911b01b560dfe4143e7ffd06650ff58>>
|
||||
* @generated SignedSource<<a8dc580c053c9091819cb2d348c0b3e0>>
|
||||
* @lightSyntaxTransform
|
||||
* @nogrep
|
||||
*/
|
||||
@@ -9,9 +9,10 @@
|
||||
// @ts-nocheck
|
||||
|
||||
import { ConcreteRequest } from 'relay-runtime';
|
||||
export type VendorCategory = "ANALYTICS" | "CLOUD_MONITORING" | "CLOUD_PROVIDER" | "COLLABORATION" | "CUSTOMER_SUPPORT" | "DATA_STORAGE_AND_PROCESSING" | "DOCUMENT_MANAGEMENT" | "EMPLOYEE_MANAGEMENT" | "ENGINEERING" | "FINANCE" | "IDENTITY_PROVIDER" | "IT" | "MARKETING" | "OFFICE_OPERATIONS" | "OTHER" | "PASSWORD_MANAGEMENT" | "PRODUCT_AND_DESIGN" | "PROFESSIONAL_SERVICES" | "RECRUITING" | "SALES" | "SECURITY" | "VERSION_CONTROL";
|
||||
export type CreateVendorInput = {
|
||||
businessOwnerId?: string | null | undefined;
|
||||
category?: string | null | undefined;
|
||||
category?: VendorCategory | null | undefined;
|
||||
certifications?: ReadonlyArray<string> | null | undefined;
|
||||
dataProcessingAgreementUrl?: string | null | undefined;
|
||||
description?: string | null | undefined;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @generated SignedSource<<71c7ed1be8cf0477074d6cf130143626>>
|
||||
* @generated SignedSource<<f0c7d1514ae65ab5cef017af474f5825>>
|
||||
* @lightSyntaxTransform
|
||||
* @nogrep
|
||||
*/
|
||||
@@ -9,6 +9,7 @@
|
||||
// @ts-nocheck
|
||||
|
||||
import { ConcreteRequest } from 'relay-runtime';
|
||||
export type VendorCategory = "ANALYTICS" | "CLOUD_MONITORING" | "CLOUD_PROVIDER" | "COLLABORATION" | "CUSTOMER_SUPPORT" | "DATA_STORAGE_AND_PROCESSING" | "DOCUMENT_MANAGEMENT" | "EMPLOYEE_MANAGEMENT" | "ENGINEERING" | "FINANCE" | "IDENTITY_PROVIDER" | "IT" | "MARKETING" | "OFFICE_OPERATIONS" | "OTHER" | "PASSWORD_MANAGEMENT" | "PRODUCT_AND_DESIGN" | "PROFESSIONAL_SERVICES" | "RECRUITING" | "SALES" | "SECURITY" | "VERSION_CONTROL";
|
||||
export type AssessVendorInput = {
|
||||
id: string;
|
||||
websiteUrl: string;
|
||||
@@ -23,6 +24,7 @@ export type VendorViewAssessVendorMutation$data = {
|
||||
readonly fullName: string;
|
||||
readonly id: string;
|
||||
} | null | undefined;
|
||||
readonly category: VendorCategory;
|
||||
readonly certifications: ReadonlyArray<string>;
|
||||
readonly dataProcessingAgreementUrl: string | null | undefined;
|
||||
readonly description: string | null | undefined;
|
||||
@@ -190,6 +192,13 @@ v3 = [
|
||||
"name": "websiteUrl",
|
||||
"storageKey": null
|
||||
},
|
||||
{
|
||||
"alias": null,
|
||||
"args": null,
|
||||
"kind": "ScalarField",
|
||||
"name": "category",
|
||||
"storageKey": null
|
||||
},
|
||||
{
|
||||
"alias": null,
|
||||
"args": null,
|
||||
@@ -242,16 +251,16 @@ return {
|
||||
"selections": (v3/*: any*/)
|
||||
},
|
||||
"params": {
|
||||
"cacheID": "ccc16b2de8f7f3936458cd4823a14992",
|
||||
"cacheID": "592ee741d52ee98a1e10330e97a14707",
|
||||
"id": null,
|
||||
"metadata": {},
|
||||
"name": "VendorViewAssessVendorMutation",
|
||||
"operationKind": "mutation",
|
||||
"text": "mutation VendorViewAssessVendorMutation(\n $input: AssessVendorInput!\n) {\n assessVendor(input: $input) {\n vendor {\n id\n name\n description\n statusPageUrl\n termsOfServiceUrl\n privacyPolicyUrl\n serviceLevelAgreementUrl\n dataProcessingAgreementUrl\n securityPageUrl\n trustPageUrl\n certifications\n headquarterAddress\n legalName\n websiteUrl\n businessOwner {\n id\n fullName\n }\n securityOwner {\n id\n fullName\n }\n updatedAt\n }\n }\n}\n"
|
||||
"text": "mutation VendorViewAssessVendorMutation(\n $input: AssessVendorInput!\n) {\n assessVendor(input: $input) {\n vendor {\n id\n name\n description\n statusPageUrl\n termsOfServiceUrl\n privacyPolicyUrl\n serviceLevelAgreementUrl\n dataProcessingAgreementUrl\n securityPageUrl\n trustPageUrl\n certifications\n headquarterAddress\n legalName\n websiteUrl\n category\n businessOwner {\n id\n fullName\n }\n securityOwner {\n id\n fullName\n }\n updatedAt\n }\n }\n}\n"
|
||||
}
|
||||
};
|
||||
})();
|
||||
|
||||
(node as any).hash = "ed23d00ce5a44aa6bfd43a072552ed1c";
|
||||
(node as any).hash = "8dddda77f031533f207ac903d883a902";
|
||||
|
||||
export default node;
|
||||
|
||||
131
apps/console/src/pages/organizations/vendors/__generated__/VendorViewQuery.graphql.ts
generated
vendored
131
apps/console/src/pages/organizations/vendors/__generated__/VendorViewQuery.graphql.ts
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @generated SignedSource<<2a33eeb4651f6afe0a8f06f44c0f2711>>
|
||||
* @generated SignedSource<<a24deac1363fef61e3bc8f1a5b3d1848>>
|
||||
* @lightSyntaxTransform
|
||||
* @nogrep
|
||||
*/
|
||||
@@ -12,6 +12,7 @@ import { ConcreteRequest } from 'relay-runtime';
|
||||
import { FragmentRefs } from "relay-runtime";
|
||||
export type BusinessImpact = "CRITICAL" | "HIGH" | "LOW" | "MEDIUM";
|
||||
export type DataSensitivity = "CRITICAL" | "HIGH" | "LOW" | "MEDIUM" | "NONE";
|
||||
export type VendorCategory = "ANALYTICS" | "CLOUD_MONITORING" | "CLOUD_PROVIDER" | "COLLABORATION" | "CUSTOMER_SUPPORT" | "DATA_STORAGE_AND_PROCESSING" | "DOCUMENT_MANAGEMENT" | "EMPLOYEE_MANAGEMENT" | "ENGINEERING" | "FINANCE" | "IDENTITY_PROVIDER" | "IT" | "MARKETING" | "OFFICE_OPERATIONS" | "OTHER" | "PASSWORD_MANAGEMENT" | "PRODUCT_AND_DESIGN" | "PROFESSIONAL_SERVICES" | "RECRUITING" | "SALES" | "SECURITY" | "VERSION_CONTROL";
|
||||
export type VendorViewQuery$variables = {
|
||||
organizationId: string;
|
||||
vendorId: string;
|
||||
@@ -22,6 +23,7 @@ export type VendorViewQuery$data = {
|
||||
readonly fullName: string;
|
||||
readonly id: string;
|
||||
} | null | undefined;
|
||||
readonly category?: VendorCategory;
|
||||
readonly certifications?: ReadonlyArray<string>;
|
||||
readonly complianceReports?: {
|
||||
readonly edges: ReadonlyArray<{
|
||||
@@ -206,65 +208,72 @@ v16 = {
|
||||
"storageKey": null
|
||||
},
|
||||
v17 = {
|
||||
"alias": null,
|
||||
"args": null,
|
||||
"kind": "ScalarField",
|
||||
"name": "category",
|
||||
"storageKey": null
|
||||
},
|
||||
v18 = {
|
||||
"alias": null,
|
||||
"args": null,
|
||||
"kind": "ScalarField",
|
||||
"name": "fullName",
|
||||
"storageKey": null
|
||||
},
|
||||
v18 = [
|
||||
v19 = [
|
||||
(v3/*: any*/),
|
||||
(v17/*: any*/)
|
||||
(v18/*: any*/)
|
||||
],
|
||||
v19 = {
|
||||
v20 = {
|
||||
"alias": null,
|
||||
"args": null,
|
||||
"concreteType": "People",
|
||||
"kind": "LinkedField",
|
||||
"name": "businessOwner",
|
||||
"plural": false,
|
||||
"selections": (v18/*: any*/),
|
||||
"selections": (v19/*: any*/),
|
||||
"storageKey": null
|
||||
},
|
||||
v20 = {
|
||||
v21 = {
|
||||
"alias": null,
|
||||
"args": null,
|
||||
"concreteType": "People",
|
||||
"kind": "LinkedField",
|
||||
"name": "securityOwner",
|
||||
"plural": false,
|
||||
"selections": (v18/*: any*/),
|
||||
"storageKey": null
|
||||
},
|
||||
v21 = {
|
||||
"alias": null,
|
||||
"args": null,
|
||||
"kind": "ScalarField",
|
||||
"name": "createdAt",
|
||||
"selections": (v19/*: any*/),
|
||||
"storageKey": null
|
||||
},
|
||||
v22 = {
|
||||
"alias": null,
|
||||
"args": null,
|
||||
"kind": "ScalarField",
|
||||
"name": "updatedAt",
|
||||
"name": "createdAt",
|
||||
"storageKey": null
|
||||
},
|
||||
v23 = {
|
||||
"alias": null,
|
||||
"args": null,
|
||||
"kind": "ScalarField",
|
||||
"name": "__typename",
|
||||
"name": "updatedAt",
|
||||
"storageKey": null
|
||||
},
|
||||
v24 = {
|
||||
"alias": null,
|
||||
"args": null,
|
||||
"kind": "ScalarField",
|
||||
"name": "cursor",
|
||||
"name": "__typename",
|
||||
"storageKey": null
|
||||
},
|
||||
v25 = {
|
||||
"alias": null,
|
||||
"args": null,
|
||||
"kind": "ScalarField",
|
||||
"name": "cursor",
|
||||
"storageKey": null
|
||||
},
|
||||
v26 = {
|
||||
"alias": null,
|
||||
"args": null,
|
||||
"concreteType": "PageInfo",
|
||||
@@ -289,7 +298,7 @@ v25 = {
|
||||
],
|
||||
"storageKey": null
|
||||
},
|
||||
v26 = [
|
||||
v27 = [
|
||||
{
|
||||
"alias": null,
|
||||
"args": null,
|
||||
@@ -342,18 +351,18 @@ v26 = [
|
||||
"name": "fileSize",
|
||||
"storageKey": null
|
||||
},
|
||||
(v21/*: any*/),
|
||||
(v23/*: any*/)
|
||||
(v22/*: any*/),
|
||||
(v24/*: any*/)
|
||||
],
|
||||
"storageKey": null
|
||||
},
|
||||
(v24/*: any*/)
|
||||
(v25/*: any*/)
|
||||
],
|
||||
"storageKey": null
|
||||
},
|
||||
(v25/*: any*/)
|
||||
(v26/*: any*/)
|
||||
],
|
||||
v27 = [
|
||||
v28 = [
|
||||
{
|
||||
"alias": null,
|
||||
"args": null,
|
||||
@@ -413,28 +422,28 @@ v27 = [
|
||||
"kind": "LinkedField",
|
||||
"name": "assessedBy",
|
||||
"plural": false,
|
||||
"selections": (v18/*: any*/),
|
||||
"selections": (v19/*: any*/),
|
||||
"storageKey": null
|
||||
},
|
||||
(v21/*: any*/),
|
||||
(v23/*: any*/)
|
||||
(v22/*: any*/),
|
||||
(v24/*: any*/)
|
||||
],
|
||||
"storageKey": null
|
||||
},
|
||||
(v24/*: any*/)
|
||||
(v25/*: any*/)
|
||||
],
|
||||
"storageKey": null
|
||||
},
|
||||
(v25/*: any*/)
|
||||
(v26/*: any*/)
|
||||
],
|
||||
v28 = [
|
||||
v29 = [
|
||||
{
|
||||
"kind": "Variable",
|
||||
"name": "id",
|
||||
"variableName": "organizationId"
|
||||
}
|
||||
],
|
||||
v29 = {
|
||||
v30 = {
|
||||
"alias": null,
|
||||
"args": [
|
||||
{
|
||||
@@ -452,16 +461,16 @@ v29 = {
|
||||
],
|
||||
"storageKey": null
|
||||
},
|
||||
v30 = {
|
||||
v31 = {
|
||||
"kind": "Literal",
|
||||
"name": "first",
|
||||
"value": 100
|
||||
},
|
||||
v31 = [
|
||||
(v30/*: any*/)
|
||||
],
|
||||
v32 = [
|
||||
(v30/*: any*/),
|
||||
(v31/*: any*/)
|
||||
],
|
||||
v33 = [
|
||||
(v31/*: any*/),
|
||||
{
|
||||
"kind": "Literal",
|
||||
"name": "orderBy",
|
||||
@@ -506,10 +515,11 @@ return {
|
||||
(v14/*: any*/),
|
||||
(v15/*: any*/),
|
||||
(v16/*: any*/),
|
||||
(v19/*: any*/),
|
||||
(v17/*: any*/),
|
||||
(v20/*: any*/),
|
||||
(v21/*: any*/),
|
||||
(v22/*: any*/),
|
||||
(v23/*: any*/),
|
||||
{
|
||||
"alias": "complianceReports",
|
||||
"args": null,
|
||||
@@ -517,7 +527,7 @@ return {
|
||||
"kind": "LinkedField",
|
||||
"name": "__VendorView_complianceReports_connection",
|
||||
"plural": false,
|
||||
"selections": (v26/*: any*/),
|
||||
"selections": (v27/*: any*/),
|
||||
"storageKey": null
|
||||
},
|
||||
{
|
||||
@@ -527,7 +537,7 @@ return {
|
||||
"kind": "LinkedField",
|
||||
"name": "__VendorView_riskAssessments_connection",
|
||||
"plural": false,
|
||||
"selections": (v27/*: any*/),
|
||||
"selections": (v28/*: any*/),
|
||||
"storageKey": null
|
||||
}
|
||||
],
|
||||
@@ -539,7 +549,7 @@ return {
|
||||
},
|
||||
{
|
||||
"alias": "organization",
|
||||
"args": (v28/*: any*/),
|
||||
"args": (v29/*: any*/),
|
||||
"concreteType": null,
|
||||
"kind": "LinkedField",
|
||||
"name": "node",
|
||||
@@ -569,7 +579,7 @@ return {
|
||||
"name": "user",
|
||||
"plural": false,
|
||||
"selections": [
|
||||
(v29/*: any*/)
|
||||
(v30/*: any*/)
|
||||
],
|
||||
"storageKey": null
|
||||
}
|
||||
@@ -597,7 +607,7 @@ return {
|
||||
"name": "node",
|
||||
"plural": false,
|
||||
"selections": [
|
||||
(v23/*: any*/),
|
||||
(v24/*: any*/),
|
||||
(v3/*: any*/),
|
||||
{
|
||||
"kind": "InlineFragment",
|
||||
@@ -615,23 +625,24 @@ return {
|
||||
(v14/*: any*/),
|
||||
(v15/*: any*/),
|
||||
(v16/*: any*/),
|
||||
(v19/*: any*/),
|
||||
(v17/*: any*/),
|
||||
(v20/*: any*/),
|
||||
(v21/*: any*/),
|
||||
(v22/*: any*/),
|
||||
(v23/*: any*/),
|
||||
{
|
||||
"alias": null,
|
||||
"args": (v31/*: any*/),
|
||||
"args": (v32/*: any*/),
|
||||
"concreteType": "VendorComplianceReportConnection",
|
||||
"kind": "LinkedField",
|
||||
"name": "complianceReports",
|
||||
"plural": false,
|
||||
"selections": (v26/*: any*/),
|
||||
"selections": (v27/*: any*/),
|
||||
"storageKey": "complianceReports(first:100)"
|
||||
},
|
||||
{
|
||||
"alias": null,
|
||||
"args": (v31/*: any*/),
|
||||
"args": (v32/*: any*/),
|
||||
"filters": null,
|
||||
"handle": "connection",
|
||||
"key": "VendorView_complianceReports",
|
||||
@@ -640,17 +651,17 @@ return {
|
||||
},
|
||||
{
|
||||
"alias": null,
|
||||
"args": (v31/*: any*/),
|
||||
"args": (v32/*: any*/),
|
||||
"concreteType": "VendorRiskAssessmentConnection",
|
||||
"kind": "LinkedField",
|
||||
"name": "riskAssessments",
|
||||
"plural": false,
|
||||
"selections": (v27/*: any*/),
|
||||
"selections": (v28/*: any*/),
|
||||
"storageKey": "riskAssessments(first:100)"
|
||||
},
|
||||
{
|
||||
"alias": null,
|
||||
"args": (v31/*: any*/),
|
||||
"args": (v32/*: any*/),
|
||||
"filters": null,
|
||||
"handle": "connection",
|
||||
"key": "VendorView_riskAssessments",
|
||||
@@ -666,20 +677,20 @@ return {
|
||||
},
|
||||
{
|
||||
"alias": "organization",
|
||||
"args": (v28/*: any*/),
|
||||
"args": (v29/*: any*/),
|
||||
"concreteType": null,
|
||||
"kind": "LinkedField",
|
||||
"name": "node",
|
||||
"plural": false,
|
||||
"selections": [
|
||||
(v23/*: any*/),
|
||||
(v24/*: any*/),
|
||||
(v3/*: any*/),
|
||||
{
|
||||
"kind": "InlineFragment",
|
||||
"selections": [
|
||||
{
|
||||
"alias": null,
|
||||
"args": (v32/*: any*/),
|
||||
"args": (v33/*: any*/),
|
||||
"concreteType": "PeopleConnection",
|
||||
"kind": "LinkedField",
|
||||
"name": "peoples",
|
||||
@@ -702,7 +713,7 @@ return {
|
||||
"plural": false,
|
||||
"selections": [
|
||||
(v3/*: any*/),
|
||||
(v17/*: any*/),
|
||||
(v18/*: any*/),
|
||||
{
|
||||
"alias": null,
|
||||
"args": null,
|
||||
@@ -710,21 +721,21 @@ return {
|
||||
"name": "primaryEmailAddress",
|
||||
"storageKey": null
|
||||
},
|
||||
(v23/*: any*/)
|
||||
(v24/*: any*/)
|
||||
],
|
||||
"storageKey": null
|
||||
},
|
||||
(v24/*: any*/)
|
||||
(v25/*: any*/)
|
||||
],
|
||||
"storageKey": null
|
||||
},
|
||||
(v25/*: any*/)
|
||||
(v26/*: any*/)
|
||||
],
|
||||
"storageKey": "peoples(first:100,orderBy:{\"direction\":\"ASC\",\"field\":\"FULL_NAME\"})"
|
||||
},
|
||||
{
|
||||
"alias": null,
|
||||
"args": (v32/*: any*/),
|
||||
"args": (v33/*: any*/),
|
||||
"filters": [
|
||||
"orderBy"
|
||||
],
|
||||
@@ -756,7 +767,7 @@ return {
|
||||
"name": "user",
|
||||
"plural": false,
|
||||
"selections": [
|
||||
(v29/*: any*/),
|
||||
(v30/*: any*/),
|
||||
(v3/*: any*/)
|
||||
],
|
||||
"storageKey": null
|
||||
@@ -768,7 +779,7 @@ return {
|
||||
]
|
||||
},
|
||||
"params": {
|
||||
"cacheID": "d80a66271806001a76348db9398ae760",
|
||||
"cacheID": "83601f58c499976a22f7dec4312d147b",
|
||||
"id": null,
|
||||
"metadata": {
|
||||
"connection": [
|
||||
@@ -794,11 +805,11 @@ return {
|
||||
},
|
||||
"name": "VendorViewQuery",
|
||||
"operationKind": "query",
|
||||
"text": "query VendorViewQuery(\n $vendorId: ID!\n $organizationId: ID!\n) {\n node(id: $vendorId) {\n __typename\n ... on Vendor {\n id\n name\n description\n statusPageUrl\n termsOfServiceUrl\n privacyPolicyUrl\n serviceLevelAgreementUrl\n dataProcessingAgreementUrl\n securityPageUrl\n trustPageUrl\n certifications\n headquarterAddress\n legalName\n websiteUrl\n businessOwner {\n id\n fullName\n }\n securityOwner {\n id\n fullName\n }\n createdAt\n updatedAt\n complianceReports(first: 100) {\n edges {\n node {\n id\n reportName\n reportDate\n validUntil\n fileUrl\n fileSize\n createdAt\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n riskAssessments(first: 100) {\n edges {\n node {\n id\n assessedAt\n expiresAt\n dataSensitivity\n businessImpact\n notes\n assessedBy {\n id\n fullName\n }\n createdAt\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n id\n }\n organization: node(id: $organizationId) {\n __typename\n ...PeopleSelector_organization\n id\n }\n viewer {\n user {\n people(organizationId: $organizationId) {\n id\n }\n id\n }\n id\n }\n}\n\nfragment PeopleSelector_organization on Organization {\n id\n peoples(first: 100, orderBy: {direction: ASC, field: FULL_NAME}) {\n edges {\n node {\n id\n fullName\n primaryEmailAddress\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n}\n"
|
||||
"text": "query VendorViewQuery(\n $vendorId: ID!\n $organizationId: ID!\n) {\n node(id: $vendorId) {\n __typename\n ... on Vendor {\n id\n name\n description\n statusPageUrl\n termsOfServiceUrl\n privacyPolicyUrl\n serviceLevelAgreementUrl\n dataProcessingAgreementUrl\n securityPageUrl\n trustPageUrl\n certifications\n headquarterAddress\n legalName\n websiteUrl\n category\n businessOwner {\n id\n fullName\n }\n securityOwner {\n id\n fullName\n }\n createdAt\n updatedAt\n complianceReports(first: 100) {\n edges {\n node {\n id\n reportName\n reportDate\n validUntil\n fileUrl\n fileSize\n createdAt\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n riskAssessments(first: 100) {\n edges {\n node {\n id\n assessedAt\n expiresAt\n dataSensitivity\n businessImpact\n notes\n assessedBy {\n id\n fullName\n }\n createdAt\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n id\n }\n organization: node(id: $organizationId) {\n __typename\n ...PeopleSelector_organization\n id\n }\n viewer {\n user {\n people(organizationId: $organizationId) {\n id\n }\n id\n }\n id\n }\n}\n\nfragment PeopleSelector_organization on Organization {\n id\n peoples(first: 100, orderBy: {direction: ASC, field: FULL_NAME}) {\n edges {\n node {\n id\n fullName\n primaryEmailAddress\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n}\n"
|
||||
}
|
||||
};
|
||||
})();
|
||||
|
||||
(node as any).hash = "97cacb4f4410588114fc82abc78d9140";
|
||||
(node as any).hash = "812a334dc26fb2961aae24862496ff0c";
|
||||
|
||||
export default node;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @generated SignedSource<<9089536ddf16d713cfc68bd20f8f8caf>>
|
||||
* @generated SignedSource<<687421f6528edb3fe7623b14cda888d7>>
|
||||
* @lightSyntaxTransform
|
||||
* @nogrep
|
||||
*/
|
||||
@@ -9,9 +9,10 @@
|
||||
// @ts-nocheck
|
||||
|
||||
import { ConcreteRequest } from 'relay-runtime';
|
||||
export type VendorCategory = "ANALYTICS" | "CLOUD_MONITORING" | "CLOUD_PROVIDER" | "COLLABORATION" | "CUSTOMER_SUPPORT" | "DATA_STORAGE_AND_PROCESSING" | "DOCUMENT_MANAGEMENT" | "EMPLOYEE_MANAGEMENT" | "ENGINEERING" | "FINANCE" | "IDENTITY_PROVIDER" | "IT" | "MARKETING" | "OFFICE_OPERATIONS" | "OTHER" | "PASSWORD_MANAGEMENT" | "PRODUCT_AND_DESIGN" | "PROFESSIONAL_SERVICES" | "RECRUITING" | "SALES" | "SECURITY" | "VERSION_CONTROL";
|
||||
export type UpdateVendorInput = {
|
||||
businessOwnerId?: string | null | undefined;
|
||||
category?: string | null | undefined;
|
||||
category?: VendorCategory | null | undefined;
|
||||
certifications?: ReadonlyArray<string> | null | undefined;
|
||||
dataProcessingAgreementUrl?: string | null | undefined;
|
||||
description?: string | null | undefined;
|
||||
@@ -38,6 +39,7 @@ export type VendorViewUpdateVendorMutation$data = {
|
||||
readonly fullName: string;
|
||||
readonly id: string;
|
||||
} | null | undefined;
|
||||
readonly category: VendorCategory;
|
||||
readonly certifications: ReadonlyArray<string>;
|
||||
readonly dataProcessingAgreementUrl: string | null | undefined;
|
||||
readonly description: string | null | undefined;
|
||||
@@ -205,6 +207,13 @@ v3 = [
|
||||
"name": "websiteUrl",
|
||||
"storageKey": null
|
||||
},
|
||||
{
|
||||
"alias": null,
|
||||
"args": null,
|
||||
"kind": "ScalarField",
|
||||
"name": "category",
|
||||
"storageKey": null
|
||||
},
|
||||
{
|
||||
"alias": null,
|
||||
"args": null,
|
||||
@@ -257,16 +266,16 @@ return {
|
||||
"selections": (v3/*: any*/)
|
||||
},
|
||||
"params": {
|
||||
"cacheID": "c539b8cd35be693bea445fa86c473bfd",
|
||||
"cacheID": "8ead09e0003d808fcf2d2bc8ca19c8b2",
|
||||
"id": null,
|
||||
"metadata": {},
|
||||
"name": "VendorViewUpdateVendorMutation",
|
||||
"operationKind": "mutation",
|
||||
"text": "mutation VendorViewUpdateVendorMutation(\n $input: UpdateVendorInput!\n) {\n updateVendor(input: $input) {\n vendor {\n id\n name\n description\n statusPageUrl\n termsOfServiceUrl\n privacyPolicyUrl\n serviceLevelAgreementUrl\n dataProcessingAgreementUrl\n securityPageUrl\n trustPageUrl\n certifications\n headquarterAddress\n legalName\n websiteUrl\n businessOwner {\n id\n fullName\n }\n securityOwner {\n id\n fullName\n }\n updatedAt\n }\n }\n}\n"
|
||||
"text": "mutation VendorViewUpdateVendorMutation(\n $input: UpdateVendorInput!\n) {\n updateVendor(input: $input) {\n vendor {\n id\n name\n description\n statusPageUrl\n termsOfServiceUrl\n privacyPolicyUrl\n serviceLevelAgreementUrl\n dataProcessingAgreementUrl\n securityPageUrl\n trustPageUrl\n certifications\n headquarterAddress\n legalName\n websiteUrl\n category\n businessOwner {\n id\n fullName\n }\n securityOwner {\n id\n fullName\n }\n updatedAt\n }\n }\n}\n"
|
||||
}
|
||||
};
|
||||
})();
|
||||
|
||||
(node as any).hash = "478f755b8d9a6b7f7deec1b3a1c71d07";
|
||||
(node as any).hash = "90aa0b06cde30ea8a7deb711d5ba0c69";
|
||||
|
||||
export default node;
|
||||
|
||||
183
packages/vendors/data.json
vendored
183
packages/vendors/data.json
vendored
@@ -9,7 +9,7 @@
|
||||
"description": "Slack is a team communication platform that allows users to send messages, files, and images to each other.",
|
||||
"statusPageUrl": "https://slack-status.com/",
|
||||
"termsOfServiceUrl": "https://slack.com/intl/en-gb/main-services-agreement",
|
||||
"category": "Collaboration",
|
||||
"category": "COLLABORATION",
|
||||
"certifications": [
|
||||
"ISO/IEC 27001:2022",
|
||||
"ISO/IEC 27017:2015",
|
||||
@@ -28,7 +28,7 @@
|
||||
"privacyPolicyUrl": "https://zoom.us/privacy",
|
||||
"serviceLevelAgreementUrl": "https://explore.zoom.us/en/premier-support-terms/",
|
||||
"description": "Zoom is a video communication platform that allows users to send messages, files, and images to each other.",
|
||||
"category": "Collaboration",
|
||||
"category": "COLLABORATION",
|
||||
"certifications": [
|
||||
"ISO/IEC 27001:2022",
|
||||
"ISO/IEC 27017:2015",
|
||||
@@ -62,7 +62,7 @@
|
||||
"serviceLevelAgreementUrl": "https://github.com/site/terms",
|
||||
"subprocessorsListUrl": "https://docs.github.com/en/site-policy/privacy-policies/github-subprocessors",
|
||||
"description": "Github is a code hosting platform for version control and collaboration.",
|
||||
"category": "Version control",
|
||||
"category": "VERSION_CONTROL",
|
||||
"certifications": [
|
||||
"SOC 1 Type 2",
|
||||
"SOC 2 Type 2",
|
||||
@@ -83,7 +83,7 @@
|
||||
"serviceLevelAgreementUrl": "https://stripe.com/legal/ssa",
|
||||
"dataProcessingAgreementUrl": "https://stripe.com/legal/dpa",
|
||||
"description": "Online payment processing platform that enables businesses to accept and manage digital payments, supporting various payment methods and currencies with integrated fraud protection and compliance features",
|
||||
"category": "Finance",
|
||||
"category": "FINANCE",
|
||||
"certifications": [
|
||||
"PCI DSS v4.0",
|
||||
"SOC 2 Type 2",
|
||||
@@ -108,7 +108,7 @@
|
||||
"privacyPolicyUrl": "https://cloudflare.com/privacy",
|
||||
"serviceLevelAgreementUrl": "https://www.cloudflare.com/en-gb/business-sla",
|
||||
"description": "Cloudflare is a cloud computing company that provides a range of services, including web hosting, domain name registration, and cloud storage.",
|
||||
"category": "Cloud provider",
|
||||
"category": "CLOUD_PROVIDER",
|
||||
"certifications": [
|
||||
"ISO/IEC 27001:2013",
|
||||
"ISO/IEC 27701:2019",
|
||||
@@ -145,7 +145,7 @@
|
||||
"privacyPolicyUrl": "https://sentry.io/privacy",
|
||||
"serviceLevelAgreementUrl": "",
|
||||
"description": "Sentry is a cloud-based platform for monitoring and analyzing application performance and user behavior.",
|
||||
"category": "Engineering",
|
||||
"category": "ENGINEERING",
|
||||
"certifications": ["ISO/IEC 27001:2013", "SOC2 Type 2"],
|
||||
"securityPageUrl": "https://sentry.io/security",
|
||||
"statusPageUrl": "https://status.sentry.io/"
|
||||
@@ -158,7 +158,7 @@
|
||||
"privacyPolicyUrl": "https://datadog.com/privacy",
|
||||
"serviceLevelAgreementUrl": "https://datadog.com/terms",
|
||||
"description": "Datadog is a cloud-based platform for monitoring and analyzing application performance and user behavior.",
|
||||
"category": "Cloud monitoring",
|
||||
"category": "CLOUD_MONITORING",
|
||||
"certifications": [
|
||||
"CCPA",
|
||||
"CSA STAR",
|
||||
@@ -184,7 +184,7 @@
|
||||
"serviceLevelAgreementUrl": "https://vercel.com/legal/sla",
|
||||
"dataProcessingAgreementUrl": "https://vercel.com/legal/dpa",
|
||||
"description": "Vercel is a cloud-based platform for monitoring and analyzing application performance and user behavior.",
|
||||
"category": "Cloud provider",
|
||||
"category": "CLOUD_PROVIDER",
|
||||
"certifications": [
|
||||
"ISO/IEC 27001:2013",
|
||||
"SOC2 Type 2",
|
||||
@@ -208,7 +208,7 @@
|
||||
"serviceLevelAgreementUrl": "https://sendgrid.com/terms",
|
||||
"dataProcessingAgreementUrl": "https://sendgrid.com/dpa",
|
||||
"description": "Cloud-based email delivery platform that provides transactional and marketing email services, offering reliable message delivery, analytics, and automation features for business communications.",
|
||||
"category": "Communication & Collaboration",
|
||||
"category": "COLLABORATION",
|
||||
"certifications": [
|
||||
"CCPA",
|
||||
"CPRA",
|
||||
@@ -232,7 +232,7 @@
|
||||
"privacyPolicyUrl": "https://www.figma.com/legal/privacy/",
|
||||
"serviceSoftwareAgreementUrl": "https://www.figma.com/ssa/",
|
||||
"description": "Cloud-based design and prototyping platform that enables collaborative interface design, wireframing, and mockup creation with real-time editing capabilities for teams.",
|
||||
"category": "Product and design",
|
||||
"category": "PRODUCT_AND_DESIGN",
|
||||
"certifications": [
|
||||
"SOC 2 Type 2",
|
||||
"ISO/IEC 27001:2013",
|
||||
@@ -262,7 +262,7 @@
|
||||
"subprocessorsListUrl": "https://www.notion.so/notion/Notion-s-List-of-Subprocessors-268fa5bcfa0f46b6bc29436b21676734",
|
||||
"businessAssociateAgreementUrl": "https://www.notion.so/notion/Business-Associate-Agreement-909d9f4ccca041b1a23d0fe6e56fa111",
|
||||
"description": "Cloud-based workspace and collaboration platform that offers document management, project management, and team communication features, allowing users to create, edit, and share content in a centralized environment.",
|
||||
"category": "Document management",
|
||||
"category": "DOCUMENT_MANAGEMENT",
|
||||
"certifications": [
|
||||
"SOC 2 Type 2",
|
||||
"ISO/IEC 27001:2022",
|
||||
@@ -284,7 +284,7 @@
|
||||
"privacyPolicyUrl": "https://app.termly.io/policy-viewer/policy.html?policyUUID=95d79e73-9d6f-4e0a-8abd-2a608e8f5242",
|
||||
"termsOfServiceUrl": "https://mintlify.com/legal/terms",
|
||||
"description": "Mintlify is a cloud-based documentation platform that enables teams to create, manage, and share documentation for their projects.",
|
||||
"category": "Engineering",
|
||||
"category": "ENGINEERING",
|
||||
"certifications": ["SOC 2 Type 1"],
|
||||
"subprocessorsListUrl": "https://security.mintlify.com",
|
||||
"trustPageUrl": "https://security.mintlify.com/",
|
||||
@@ -298,7 +298,7 @@
|
||||
"privacyPolicyUrl": "https://supabase.com/privacy",
|
||||
"termsOfServiceUrl": "https://supabase.com/terms",
|
||||
"description": "Open-source Firebase alternative providing a backend-as-a-service platform with PostgreSQL database, authentication, storage, and API functionality for application development.",
|
||||
"category": "Data storage and processing",
|
||||
"category": "DATA_STORAGE_AND_PROCESSING",
|
||||
"certifications": ["SOC2 Type 2", "HIPAA", "GDPR"],
|
||||
"securityPageUrl": "https://supabase.com/security",
|
||||
"serviceLevelAgreementUrl": "https://supabase.com/sla",
|
||||
@@ -315,7 +315,7 @@
|
||||
"termsOfServiceUrl": "https://www.twilio.com/en-us/legal/tos",
|
||||
"serviceLevelAgreementUrl": "https://www.twilio.com/en-us/legal/service-level-agreement/segment-data-ingestion-api",
|
||||
"description": "Segment is a cloud-based customer data platform that enables businesses to collect, clean, and analyze customer data from across their systems.",
|
||||
"category": "Analytics",
|
||||
"category": "ANALYTICS",
|
||||
"certifications": [
|
||||
"SOC 2 Type 2",
|
||||
"ISO/IEC 27001:2022",
|
||||
@@ -339,7 +339,7 @@
|
||||
"privacyPolicyUrl": "https://www.okta.com/privacy-policy/",
|
||||
"termsOfServiceUrl": "https://www.okta.com/terms-of-service/",
|
||||
"description": "Auth0 is a cloud-based identity and access management platform that enables businesses to secure their applications and data.",
|
||||
"category": "Identity provider",
|
||||
"category": "IDENTITY_PROVIDER",
|
||||
"certifications": [
|
||||
"SOC 2 Type 2",
|
||||
"ISO/IEC 27001:2022",
|
||||
@@ -370,7 +370,7 @@
|
||||
"securityPageUrl": "https://www.heroku.com/policy/security",
|
||||
"serviceLevelAgreementUrl": "https://www.salesforce.com/en-us/wp-content/uploads/sites/4/documents/legal/Salesforce_MSA.pdf",
|
||||
"description": "Heroku is a cloud-based platform for building, deploying, and scaling applications.",
|
||||
"category": "Cloud provider",
|
||||
"category": "CLOUD_PROVIDER",
|
||||
"certifications": [
|
||||
"PCI-DSS",
|
||||
"ISO/IEC 27001:2013",
|
||||
@@ -392,7 +392,7 @@
|
||||
"privacyPolicyUrl": "https://linear.app/privacy",
|
||||
"termsOfServiceUrl": "https://linear.app/terms",
|
||||
"description": "Linear is a cloud-based project management platform that enables teams to manage their projects and tasks.",
|
||||
"category": "Engineering",
|
||||
"category": "ENGINEERING",
|
||||
"statusPageUrl": "https://linearstatus.com/",
|
||||
"dataProcessingAgreementUrl": "https://linear.app/dpa",
|
||||
"securityPageUrl": "https://linear.app/security",
|
||||
@@ -410,7 +410,7 @@
|
||||
"dataProcessingAgreementUrl": "https://legal.hubspot.com/dpa",
|
||||
"termsOfServiceUrl": "https://legal.hubspot.com/terms-of-service",
|
||||
"description": "Hubspot is a cloud-based marketing and sales platform that enables businesses to manage their marketing and sales activities.",
|
||||
"category": "Marketing",
|
||||
"category": "MARKETING",
|
||||
"subprocessorsListUrl": "https://legal.hubspot.com/sub-processors-page",
|
||||
"certifications": ["GDPR", "SOC 3", "SOC 2 Type 2"],
|
||||
"statusPageUrl": "https://status.hubspot.com/"
|
||||
@@ -426,7 +426,7 @@
|
||||
"securityPageUrl": "https://langfuse.com/docs/data-security-privacy",
|
||||
"description": "Langfuse is a cloud-based language model platform that enables businesses to build, test, and deploy language models.",
|
||||
"dataProcessingAgreementUrl": "https://static.langfuse.com/legal/2025-02-17-Public-Langfuse%20DPA.docx.pdf",
|
||||
"category": "Engineering",
|
||||
"category": "ENGINEERING",
|
||||
"certifications": ["ISO/IEC 27001:2022", "SOC 2 Type 2", "GDPR", "HIPAA"]
|
||||
},
|
||||
{
|
||||
@@ -441,7 +441,7 @@
|
||||
"dataProcessingAgreementUrl": "https://workspace.google.com/terms/09242021/dpa_terms/",
|
||||
"statusPageUrl": "https://www.google.com/appsstatus/dashboard/",
|
||||
"securityPageUrl": "https://workspace.google.com/security/",
|
||||
"category": "Collaboration",
|
||||
"category": "COLLABORATION",
|
||||
"certifications": [
|
||||
"ISO/IEC 27001:2022",
|
||||
"ISO/IEC 27017:2015",
|
||||
@@ -463,7 +463,7 @@
|
||||
"headquarterAddress": "301 Howard St Suite 300, San Francisco, CA 94105",
|
||||
"websiteUrl": "https://www.algolia.com",
|
||||
"description": "Algolia is a search-as-a-service platform that enables businesses to deliver fast and relevant search and discovery experiences across websites and applications.",
|
||||
"category": "Engineering",
|
||||
"category": "ENGINEERING",
|
||||
"certifications": [
|
||||
"ISO/IEC 27001:2022",
|
||||
"ISO/IEC 27017:2015",
|
||||
@@ -490,7 +490,7 @@
|
||||
"headquarterAddress": "2261 Market St #4008, San Francisco HQ",
|
||||
"websiteUrl": "https://posthog.com",
|
||||
"description": "Open-source product analytics platform that enables teams to understand user behavior and optimize product performance.",
|
||||
"category": "Analytics",
|
||||
"category": "ANALYTICS",
|
||||
"certifications": ["SOC 2 Type 2", "GDPR", "CCPA"],
|
||||
"securityPageUrl": "https://posthog.com/handbook/company/security",
|
||||
"privacyPolicyUrl": "https://posthog.com/privacy",
|
||||
@@ -513,7 +513,7 @@
|
||||
"securityPageUrl": "https://assets.ctfassets.net/wl95ljfippl8/1j9UbmmoSaoMNusVps3ib3/9e00936f3891c84c75ccd6a87cdb992c/Security_Whitepaper_Final_20210927.pdf",
|
||||
"trustPageUrl": "https://www.airtable.com/company/trust-and-security",
|
||||
"description": "Airtable is a no-code platform that combines the simplicity of a spreadsheet with the complexity of a database, enabling users to build custom applications without writing code.",
|
||||
"category": "Data storage and processing",
|
||||
"category": "DATA_STORAGE_AND_PROCESSING",
|
||||
"certifications": [
|
||||
"SOC 2 Type 2",
|
||||
"ISO/IEC 27001:2022",
|
||||
@@ -531,7 +531,7 @@
|
||||
"headquarterAddress": "3180 18th St, San Francisco, CA 94110",
|
||||
"websiteUrl": "https://openai.com",
|
||||
"description": "OpenAI is an AI research and deployment company dedicated to ensuring that artificial general intelligence benefits all of humanity.",
|
||||
"category": "Engineering",
|
||||
"category": "ENGINEERING",
|
||||
"certifications": [
|
||||
"SOC 2 Type 2",
|
||||
"CSA STAR Level 1",
|
||||
@@ -555,7 +555,7 @@
|
||||
"headquarterAddress": "548 Market St, San Francisco, CA 94104",
|
||||
"websiteUrl": "https://www.anthropic.com",
|
||||
"description": "Anthropic is an AI safety and research company developing reliable, interpretable, and steerable AI systems, including the Claude family of large language models.",
|
||||
"category": "Engineering",
|
||||
"category": "ENGINEERING",
|
||||
"certifications": ["SOC 2 Type 1", "SOC 2 Type 2"],
|
||||
"securityPageUrl": "https://trust.anthropic.com",
|
||||
"privacyPolicyUrl": "https://www.anthropic.com/legal/privacy",
|
||||
@@ -574,7 +574,7 @@
|
||||
"termsOfServiceUrl": "https://gusto.com/about/terms",
|
||||
"businessAssociateAgreementUrl": "https://support.gusto.com/article/152166121100000/The-Health-Insurance-Portability-and-Accountability-Act-of-1996-HIPAA",
|
||||
"description": "Gusto is a cloud-based platform that provides payroll, benefits, and human resource management software for businesses. It handles payments to employees and contractors and manages compliance with tax, labor, and immigration laws.",
|
||||
"category": "Employee management",
|
||||
"category": "EMPLOYEE_MANAGEMENT",
|
||||
"certifications": ["SOC 1 Type 2", "SOC 2 Type 2", "HIPAA"],
|
||||
"securityPageUrl": "https://gusto.com/security",
|
||||
"trustPageUrl": "https://trust.gusto.com/",
|
||||
@@ -592,7 +592,7 @@
|
||||
"subprocessorsListUrl": "https://aws.amazon.com/compliance/sub-processors/",
|
||||
"businessAssociateAgreementUrl": "https://aws.amazon.com/compliance/hipaa-compliance/",
|
||||
"description": "Amazon Web Services (AWS) is the world's most comprehensive and broadly adopted cloud platform, offering over 200 fully featured services from data centers globally. Millions of customers—including startups, enterprises, and government agencies—use AWS to lower costs, become more agile, and innovate faster.",
|
||||
"category": "Cloud provider",
|
||||
"category": "CLOUD_PROVIDER",
|
||||
"certifications": [
|
||||
"CSA",
|
||||
"ProcessUnity",
|
||||
@@ -673,7 +673,7 @@
|
||||
"headquarterAddress": "271 17th St NW. 10th Floor. Atlanta, Georgia 30363, US",
|
||||
"websiteUrl": "https://calendly.com",
|
||||
"description": "Online scheduling platform that automates appointment booking and meeting management for businesses and individuals.",
|
||||
"category": "Collaboration",
|
||||
"category": "COLLABORATION",
|
||||
"certifications": [
|
||||
"SOC 2 Type 2",
|
||||
"SOC 3",
|
||||
@@ -696,7 +696,7 @@
|
||||
"headquarterAddress": "Suite 2a1, Northside House, Mount Pleasant, Barnet, England, EN4 9EB",
|
||||
"websiteUrl": "https://www.jsdelivr.com",
|
||||
"description": "jsDelivr is a free, open-source Content Delivery Network (CDN) for open-source files, providing fast and reliable delivery of JavaScript libraries and other web assets.",
|
||||
"category": "Engineering",
|
||||
"category": "ENGINEERING",
|
||||
"certifications": ["GDPR", "CCPA"],
|
||||
"securityPageUrl": "https://www.jsdelivr.com/documents/security-policy.pdf",
|
||||
"privacyPolicyUrl": "https://www.jsdelivr.com/terms/privacy-policy",
|
||||
@@ -711,7 +711,7 @@
|
||||
"headquarterAddress": "1999 Harrison St, Suite 1150, Oakland, CA 94612, United States",
|
||||
"websiteUrl": "https://www.npmjs.com",
|
||||
"description": "npm is the world's largest software registry, providing a platform for JavaScript developers to share and manage packages for Node.js and frontend projects.",
|
||||
"category": "Engineering",
|
||||
"category": "ENGINEERING",
|
||||
"certifications": ["GDPR", "CCPA"],
|
||||
"securityPageUrl": "https://docs.npmjs.com/policies/security/",
|
||||
"privacyPolicyUrl": "https://www.npmjs.com/policies/privacy",
|
||||
@@ -724,7 +724,7 @@
|
||||
"headquarterAddress": "660 King Street, Unit 345, San Francisco, CA 94107, United States",
|
||||
"websiteUrl": "https://clerk.com",
|
||||
"description": "Clerk provides a comprehensive suite of embeddable UIs, flexible APIs, and admin dashboards to authenticate and manage users.",
|
||||
"category": "Identity provider",
|
||||
"category": "IDENTITY_PROVIDER",
|
||||
"certifications": ["SOC 2 Type 2", "HIPAA", "GDPR", "CCPA"],
|
||||
"securityPageUrl": "https://clerk.com/docs/security/overview",
|
||||
"privacyPolicyUrl": "https://clerk.com/legal/privacy",
|
||||
@@ -739,7 +739,7 @@
|
||||
"headquarterAddress": "Västriku tn 2, 50403, Tartu, Estonia",
|
||||
"websiteUrl": "https://plausible.io/",
|
||||
"description": "Open-source, privacy-focused web analytics platform that provides simple and lightweight tracking without cookies.",
|
||||
"category": "Analytics",
|
||||
"category": "ANALYTICS",
|
||||
"certifications": ["GDPR", "CCPA", "PECR"],
|
||||
"securityPageUrl": "https://plausible.io/security",
|
||||
"privacyPolicyUrl": "https://plausible.io/privacy",
|
||||
@@ -754,7 +754,7 @@
|
||||
"headquarterAddress": "Rua Cubatão, 929, São Paulo, 04013-043, Brazil",
|
||||
"websiteUrl": "https://www.latitude.sh",
|
||||
"description": "Latitude.sh provides global bare metal cloud infrastructure, enabling developers to deploy and manage physical servers with low latency and high automation.",
|
||||
"category": "Cloud provider",
|
||||
"category": "CLOUD_PROVIDER",
|
||||
"certifications": ["CCPA"],
|
||||
"securityPageUrl": "https://www.latitude.sh/legal/security",
|
||||
"privacyPolicyUrl": "https://www.latitude.sh/legal/privacy",
|
||||
@@ -768,7 +768,7 @@
|
||||
"headquarterAddress": "251 Rhode Island Street, Suite 205, San Francisco, CA 94103, United States",
|
||||
"websiteUrl": "https://www.together.ai",
|
||||
"description": "Together AI provides a full-stack cloud platform for developers to train, fine-tune, and deploy open-source generative AI models with high-performance infrastructure.",
|
||||
"category": "Engineering",
|
||||
"category": "ENGINEERING",
|
||||
"certifications": ["SOC 2 Type 1", "HIPAA", "GDPR", "CCPA"],
|
||||
"privacyPolicyUrl": "https://www.together.ai/privacy",
|
||||
"termsOfServiceUrl": "https://www.together.ai/terms-of-service",
|
||||
@@ -781,7 +781,7 @@
|
||||
"headquarterAddress": "660 Mission Street, San Francisco, CA 94103, United States",
|
||||
"websiteUrl": "https://www.mercury.com",
|
||||
"description": "Fintech company that provides banking services to early stage start-up companies. The company is not a bank, but works with banking service providers to provide bank accounts and other financial services.",
|
||||
"category": "Finance",
|
||||
"category": "FINANCE",
|
||||
"certifications": ["SOC 2 Type 1", "SOC 2 Type 2", "PCI DSS"],
|
||||
"securityPageUrl": "https://mercury.com/security",
|
||||
"privacyPolicyUrl": "https://www.datocms-assets.com/115132/1741892788-v5-mercury-privacy-policy-2025-03-13.pdf",
|
||||
@@ -795,7 +795,7 @@
|
||||
"headquarterAddress": "650 Castro St 120 223Mountain View, CA 94041, United States",
|
||||
"websiteUrl": "https://signal.org",
|
||||
"description": "Signal is a secure messaging app that provides end-to-end encryption for text, voice, and video communications.",
|
||||
"category": "Collaboration",
|
||||
"category": "COLLABORATION",
|
||||
"securityPageUrl": "https://signal.org/security",
|
||||
"privacyPolicyUrl": "https://signal.org/legal/#privacy-policy",
|
||||
"termsOfServiceUrl": "https://signal.org/legal/#terms-of-service",
|
||||
@@ -807,7 +807,7 @@
|
||||
"headquarterAddress": "Tel Aviv, Israel",
|
||||
"websiteUrl": "https://monday.com",
|
||||
"description": "monday.com is a work management platform that helps teams plan, track, and manage work.",
|
||||
"category": "Collaboration",
|
||||
"category": "COLLABORATION",
|
||||
"certifications": [
|
||||
"ISO/IEC 27001:2022",
|
||||
"ISO/IEC 27018:2014",
|
||||
@@ -838,7 +838,7 @@
|
||||
"headquarterAddress": "333 Bush Street, San Francisco, California 94104, United States",
|
||||
"websiteUrl": "https://carta.com",
|
||||
"description": "Carta is a financial technology company that provides a platform for managing employee equity compensation.",
|
||||
"category": "Finance",
|
||||
"category": "FINANCE",
|
||||
"certifications": [
|
||||
"SOC 1 Type 2",
|
||||
"SOC 2 Type 2",
|
||||
@@ -859,7 +859,7 @@
|
||||
"headquarterAddress": "440 N Barranca Ave #4750, Covina, CA 91723-1722, United States",
|
||||
"websiteUrl": "https://www.apollo.io/",
|
||||
"description": "Apollo.io is an AI-powered sales intelligence and engagement platform that helps B2B teams find, contact, and close ideal buyers through a comprehensive database and automation tools.",
|
||||
"category": "Sales",
|
||||
"category": "SALES",
|
||||
"certifications": [
|
||||
"ISO 27001",
|
||||
"SOC 2 Type 2",
|
||||
@@ -883,7 +883,7 @@
|
||||
"headquarterAddress": "Level 6, 341 George Street, Sydney, NSW 2000, Australia",
|
||||
"websiteUrl": "https://www.atlassian.com",
|
||||
"description": "Atlassian provides collaboration and productivity software for teams, including products like Jira, Confluence, and Trello.",
|
||||
"category": "Engineering",
|
||||
"category": "ENGINEERING",
|
||||
"certifications": [
|
||||
"HIPAA",
|
||||
"ISO/IEC 27001:2013",
|
||||
@@ -928,7 +928,7 @@
|
||||
"headquarterAddress": "398 11th Street, 2nd Floor, San Francisco, CA 94103, United States",
|
||||
"websiteUrl": "https://webflow.com",
|
||||
"description": "Webflow is a no-code visual development platform that allows users to design, build, and launch responsive websites without writing code.",
|
||||
"category": "Product and design",
|
||||
"category": "PRODUCT_AND_DESIGN",
|
||||
"certifications": [
|
||||
"PCI DSS v4.0 SAQ-D",
|
||||
"ISO/IEC 27001:2022",
|
||||
@@ -949,7 +949,7 @@
|
||||
"headquarterAddress": "4711 Yonge Street, 10th Floor, Toronto, Ontario, M2N 6K8, Canada",
|
||||
"websiteUrl": "https://1password.com",
|
||||
"description": "1Password is a secure password manager that helps individuals and businesses store and manage passwords, credentials, and sensitive information across devices.",
|
||||
"category": "Password management",
|
||||
"category": "PASSWORD_MANAGEMENT",
|
||||
"certifications": [
|
||||
"SOC 2 Type 2",
|
||||
"ISO/IEC 27001",
|
||||
@@ -973,7 +973,7 @@
|
||||
"headquarterAddress": "1 Montgomery St, Suite 2400, San Francisco, CA 94104, United States",
|
||||
"websiteUrl": "https://checkr.com",
|
||||
"description": "Checkr provides AI-powered background check and screening services to help businesses make informed hiring decisions quickly and fairly.",
|
||||
"category": "Employee management",
|
||||
"category": "EMPLOYEE_MANAGEMENT",
|
||||
"certifications": [
|
||||
"SOC 2 Type 2",
|
||||
"SOC 3",
|
||||
@@ -998,7 +998,7 @@
|
||||
"headquarterAddress": "430 California Street, 11th Floor, San Francisco, CA 94104, United States",
|
||||
"websiteUrl": "https://www.rippling.com",
|
||||
"description": "Rippling is an all-in-one workforce management platform that unifies HR, IT, payroll, and finance operations into a single system.",
|
||||
"category": "Employee management",
|
||||
"category": "EMPLOYEE_MANAGEMENT",
|
||||
"certifications": [
|
||||
"SOC 1 Type 1",
|
||||
"SOC 2 Type 2",
|
||||
@@ -1018,7 +1018,7 @@
|
||||
"headquarterAddress": "250 Montgomery St, San Francisco, CA 94104",
|
||||
"websiteUrl": "https://www.vouch.us",
|
||||
"description": "Vouch is a digital-first insurance platform providing tailored coverage solutions for startups and high-growth companies.",
|
||||
"category": "Finance",
|
||||
"category": "FINANCE",
|
||||
"certifications": ["CPRA"],
|
||||
"privacyPolicyUrl": "https://www.vouch.us/legal/privacy-notice",
|
||||
"termsOfServiceUrl": "https://www.vouch.us/legal/terms-of-use",
|
||||
@@ -1030,7 +1030,7 @@
|
||||
"headquarterAddress": "101 Spear Street, Fifth Floor, San Francisco, CA 94105",
|
||||
"websiteUrl": "https://www.twilio.com/",
|
||||
"description": "Twilio is a cloud communications platform that provides APIs for developers to add messaging, voice, video, and email capabilities to applications.",
|
||||
"category": "Communication & Collaboration",
|
||||
"category": "COLLABORATION",
|
||||
"certifications": [
|
||||
"SOC 2 Type 2",
|
||||
"GDPR",
|
||||
@@ -1057,7 +1057,7 @@
|
||||
"headquarterAddress": "18 rue de Navarin, 75009 Paris, France",
|
||||
"websiteUrl": "https://qonto.com",
|
||||
"description": "Qonto is a European business finance solution offering online banking, invoicing, expense management, and financial tools for SMEs and freelancers.",
|
||||
"category": "Finance",
|
||||
"category": "FINANCE",
|
||||
"certifications": ["ISO 27001", "PCI DSS", "GDPR", "DSP2", "DORA"],
|
||||
"securityPageUrl": "https://qonto.com/en/security",
|
||||
"privacyPolicyUrl": "https://legal.qonto.com/en?_gl=1*eyxi0u*_gcl_au*NDEzMTYzMTE2LjE3NDQ5OTkzOTA.#template-6uiwuhdde",
|
||||
@@ -1070,7 +1070,7 @@
|
||||
"headquarterAddress": "403 Francisco Street, San Francisco",
|
||||
"websiteUrl": "https://www.cursor.com",
|
||||
"description": "AI-powered integrated development environment enhancing developer productivity with advanced AI features.",
|
||||
"category": "Engineering",
|
||||
"category": "ENGINEERING",
|
||||
"certifications": ["SOC 2 Type 2", "SOC 2 Type 1"],
|
||||
"securityPageUrl": "https://www.cursor.com/security",
|
||||
"privacyPolicyUrl": "https://www.cursor.com/privacy",
|
||||
@@ -1085,7 +1085,7 @@
|
||||
"headquarterAddress": "6114 La Salle Ave, Suite 459, Oakland, CA 94611, United States",
|
||||
"websiteUrl": "https://pulley.com",
|
||||
"description": "Pulley is an equity management platform that helps startups manage cap tables, issue equity, and ensure compliance with tools for fundraising modeling, 409A valuations, and more.",
|
||||
"category": "Finance",
|
||||
"category": "FINANCE",
|
||||
"certifications": ["SOC 2 Type 2", "GDPR", "CCPA"],
|
||||
"securityPageUrl": "https://pulley.com/security",
|
||||
"privacyPolicyUrl": "https://pulley.com/privacy",
|
||||
@@ -1098,7 +1098,7 @@
|
||||
"headquarterAddress": "One Microsoft Way, Redmond, WA 98052-6399, United States",
|
||||
"websiteUrl": "https://azure.microsoft.com",
|
||||
"description": "Microsoft Azure is a comprehensive cloud computing platform offering a wide range of services including computing, analytics, storage, and networking.",
|
||||
"category": "Cloud provider",
|
||||
"category": "CLOUD_PROVIDER",
|
||||
"certifications": [
|
||||
"CIS Benchmark",
|
||||
"CSA-STAR",
|
||||
@@ -1216,7 +1216,7 @@
|
||||
"headquarterAddress": "One Microsoft Way, Redmond, WA 98052-6399, United States",
|
||||
"websiteUrl": "https://www.microsoft.com/microsoft-365",
|
||||
"description": "Microsoft 365 is a cloud-based productivity suite offering applications like Word, Excel, Teams, and OneDrive, integrated with AI-powered features and enterprise-grade security.",
|
||||
"category": "Collaboration",
|
||||
"category": "COLLABORATION",
|
||||
"certifications": [
|
||||
"CIS Benchmark",
|
||||
"CSA-STAR",
|
||||
@@ -1334,7 +1334,7 @@
|
||||
"headquarterAddress": "1600 Amphitheatre Parkway, Mountain View, CA 94043, US",
|
||||
"websiteUrl": "https://google.com",
|
||||
"description": "Google is a multinational technology company specializing in internet-related services and products, including search, advertising, cloud computing, software, and hardware.",
|
||||
"category": "Cloud provider",
|
||||
"category": "CLOUD_PROVIDER",
|
||||
"certifications": [
|
||||
"ISO 27001",
|
||||
"ISO 27017",
|
||||
@@ -1374,7 +1374,7 @@
|
||||
"headquarterAddress": "New York City, NY, United States",
|
||||
"websiteUrl": "https://www.porter.run",
|
||||
"description": "Porter is a platform-as-a-service (PaaS) that enables developers to deploy and manage applications in their own AWS, GCP, or Azure cloud accounts with minimal DevOps overhead.",
|
||||
"category": "Cloud provider",
|
||||
"category": "CLOUD_PROVIDER",
|
||||
"certifications": [
|
||||
"SOC 2 Type 2",
|
||||
"GDPR",
|
||||
@@ -1391,7 +1391,7 @@
|
||||
"headquarterAddress": "1 North Calle Cesar Chavez, Suite 102, Santa Barbara, CA 93103",
|
||||
"websiteUrl": "https://bitwarden.com",
|
||||
"description": "Bitwarden is a secure, open-source password manager that enables individuals and organizations to store, manage, and share sensitive data across devices.",
|
||||
"category": "Password management",
|
||||
"category": "PASSWORD_MANAGEMENT",
|
||||
"certifications": [
|
||||
"ISO/IEC 27001:2022",
|
||||
"SOC 2 Type 2",
|
||||
@@ -1415,7 +1415,7 @@
|
||||
"headquarterAddress": "Rozengracht 207B, 1016 LZ Amsterdam, Netherlands",
|
||||
"websiteUrl": "https://www.framer.com",
|
||||
"description": "Framer is a no-code website builder that enables designers and teams to create and publish professional, responsive websites with built-in CMS, animations, and real-time collaboration tools.",
|
||||
"category": "Product and design",
|
||||
"category": "PRODUCT_AND_DESIGN",
|
||||
"certifications": [
|
||||
"SOC 2 Type 2",
|
||||
"ISO/IEC 27001:2022",
|
||||
@@ -1436,7 +1436,7 @@
|
||||
"headquarterAddress": "2261 Market Street #4382, San Francisco, CA 94114, USA",
|
||||
"websiteUrl": "https://cal.com",
|
||||
"description": "Cal.com is an open-source scheduling platform that lets individuals and organizations create customizable booking experiences and integrate scheduling into their products.",
|
||||
"category": "Collaboration",
|
||||
"category": "COLLABORATION",
|
||||
"certifications": [
|
||||
"SOC 2 Type 2",
|
||||
"ISO/IEC 27001:2022",
|
||||
@@ -1459,7 +1459,7 @@
|
||||
"headquarterAddress": "2 Sun Court Suite 400 Peachtree Corners, GA 30092",
|
||||
"websiteUrl": "https://mailchimp.com",
|
||||
"description": "All-in-one marketing automation platform that lets organizations create, send, and analyze email campaigns and other customer-engagement content.",
|
||||
"category": "Marketing",
|
||||
"category": "MARKETING",
|
||||
"certifications": [
|
||||
"SOC 2 Type 2",
|
||||
"ISO 27001",
|
||||
@@ -1483,7 +1483,7 @@
|
||||
"headquarterAddress": "800 W El Camino Real, Suite 170, Mountain View, CA 94040",
|
||||
"websiteUrl": "https://otter.ai",
|
||||
"description": "AI-powered meeting assistant that captures, transcribes, and summarizes conversations in real time to make information from meetings searchable and shareable.",
|
||||
"category": "Collaboration",
|
||||
"category": "COLLABORATION",
|
||||
"certifications": [
|
||||
"SOC 2 Type 2",
|
||||
"ISO/IEC 27001:2022",
|
||||
@@ -1505,7 +1505,7 @@
|
||||
"headquarterAddress": "2261 Market Street #5039, San Francisco, CA 94114, United States",
|
||||
"websiteUrl": "https://resend.com",
|
||||
"description": "Developer-focused email delivery platform offering a modern API and tooling to build, test and send transactional and marketing emails at scale.",
|
||||
"category": "Marketing",
|
||||
"category": "MARKETING",
|
||||
"certifications": [
|
||||
"SOC 2 Type 2",
|
||||
"GDPR",
|
||||
@@ -1528,7 +1528,7 @@
|
||||
"headquarterAddress": "2 Rue Kellermann, 59100 Roubaix, France",
|
||||
"websiteUrl": "https://www.ovhcloud.com",
|
||||
"description": "OVHcloud is a French cloud computing company offering public and private cloud products, shared hosting, and dedicated server solutions in 140 countries worldwide.",
|
||||
"category": "Cloud provider",
|
||||
"category": "CLOUD_PROVIDER",
|
||||
"certifications": [
|
||||
"ISO/IEC 27001",
|
||||
"ISO/IEC 27017",
|
||||
@@ -1561,7 +1561,7 @@
|
||||
"headquarterAddress": "11950 Democracy Drive, Suite 300, Reston, VA 20190, USA",
|
||||
"websiteUrl": "https://us.ovhcloud.com",
|
||||
"description": "Global cloud-infrastructure provider delivering bare-metal servers, public and private cloud, and web-hosting services at scale.",
|
||||
"category": "Cloud provider",
|
||||
"category": "CLOUD_PROVIDER",
|
||||
"certifications": [
|
||||
"ISO/IEC 27001",
|
||||
"ISO/IEC 27017",
|
||||
@@ -1592,7 +1592,7 @@
|
||||
"headquarterAddress": "530 Fifth Avenue, 8th Floor, Suite 802, New York, NY 10036, United States",
|
||||
"websiteUrl": "https://www.pipedrive.com",
|
||||
"description": "Pipedrive is a sales-focused CRM platform designed to help small businesses manage leads, track deals, and automate sales processes.",
|
||||
"category": "Sales",
|
||||
"category": "SALES",
|
||||
"certifications": [
|
||||
"SOC 2 Type 2",
|
||||
"SOC 3",
|
||||
@@ -1619,7 +1619,7 @@
|
||||
"certifications": [
|
||||
"GDPR"
|
||||
],
|
||||
|
||||
|
||||
"securityPageUrl": "https://docs.plesk.com/en-US/obsidian/administrator-guide/plesk-administration/securing-plesk.59464/",
|
||||
"privacyPolicyUrl": "https://www.plesk.com/legal/#privacy-policy",
|
||||
"termsOfServiceUrl": "https://www.plesk.com/legal/#terms-of-use/",
|
||||
@@ -1631,7 +1631,7 @@
|
||||
"headquarterAddress": "106 boulevard Haussmann, 75008 Paris, France",
|
||||
"websiteUrl": "https://www.brevo.com",
|
||||
"description": "Cloud-based CRM and multichannel marketing platform that lets businesses run email, SMS, WhatsApp and automated campaigns while managing customer relationships from one suite.",
|
||||
"category": "Marketing",
|
||||
"category": "MARKETING",
|
||||
"certifications": [
|
||||
"ISO/IES 27001:2013",
|
||||
"GDPR",
|
||||
@@ -1651,14 +1651,14 @@
|
||||
"legalName": "Better Stack, Inc.",
|
||||
"websiteUrl": "https://betterstack.com",
|
||||
"description": "Developer-first observability platform that unifies log management, uptime monitoring, incident response, and public status pages.",
|
||||
"category": "Cloud monitoring",
|
||||
|
||||
"category": "CLOUD_MONITORING",
|
||||
|
||||
"certifications": [
|
||||
"SOC 2 Type 2",
|
||||
"GDPR",
|
||||
"CCPA"
|
||||
],
|
||||
|
||||
|
||||
"securityPageUrl": "https://betterstack.com/security",
|
||||
"privacyPolicyUrl": "https://betterstack.com/privacy",
|
||||
"termsOfServiceUrl": "https://betterstack.com/terms",
|
||||
@@ -1672,8 +1672,8 @@
|
||||
"headquarterAddress": "535 Mission Street, 14th Floor, San Francisco, CA 94105, United States",
|
||||
"websiteUrl": "https://planetscale.com",
|
||||
"description": "PlanetScale provides a serverless, MySQL-compatible database-as-a-service built on Vitess that lets developers scale relational workloads without managing infrastructure.",
|
||||
"category": "Data storage and processing",
|
||||
|
||||
"category": "DATA_STORAGE_AND_PROCESSING",
|
||||
|
||||
"certifications": [
|
||||
"SOC 2 Type 2",
|
||||
"HIPAA",
|
||||
@@ -1697,7 +1697,7 @@
|
||||
"headquarterAddress": "3790 El Camino Real #1052, Palo Alto, CA 94306, USA",
|
||||
"websiteUrl": "https://www.docker.com",
|
||||
"description": "Developer platform for building, sharing, and running containerized applications.",
|
||||
"category": "Engineering",
|
||||
"category": "ENGINEERING",
|
||||
"certifications": [
|
||||
"SOC 2 Type 2",
|
||||
"ISO/IEC 27001",
|
||||
@@ -1726,7 +1726,7 @@
|
||||
"headquarterAddress": "650 S 500W Suite 300, Salt Lake City, UT 84101, United States",
|
||||
"websiteUrl": "https://www.brex.com",
|
||||
"description": "AI-powered global spend platform offering corporate cards, expense management, business accounts and travel in one place.",
|
||||
"category": "Finance",
|
||||
"category": "FINANCE",
|
||||
"certifications": [
|
||||
"SOC 1 Type 2",
|
||||
"SOC 2 Type 2",
|
||||
@@ -1748,7 +1748,7 @@
|
||||
"headquarterAddress": "28 West 23rd Street, Floor 2, New York, NY 10010 USA",
|
||||
"websiteUrl": "https://ramp.com",
|
||||
"description": "Corporate spend-management platform offering corporate cards, expense automation, bill pay, and vendor management for finance teams.",
|
||||
"category": "Finance",
|
||||
"category": "FINANCE",
|
||||
"certifications": [
|
||||
"SOC 2 Type 2",
|
||||
"SOC 1 Type 2",
|
||||
@@ -1771,7 +1771,7 @@
|
||||
"headquarterAddress": "650 Castro St., Suite 120 #92426, Mountain View, CA 94041, USA",
|
||||
"websiteUrl": "https://clickhouse.com",
|
||||
"description": "Open-source column-oriented database and managed cloud service for ultra-fast, real-time analytics on large-volume data.",
|
||||
"category": "Data storage and processing",
|
||||
"category": "DATA_STORAGE_AND_PROCESSING",
|
||||
"certifications": [
|
||||
"SOC 2 Type 2",
|
||||
"ISO/IEC 27001",
|
||||
@@ -1799,7 +1799,7 @@
|
||||
"headquarterAddress": "401-50 Lynn Williams Street, Toronto, ON M6K 3R9, Canada",
|
||||
"websiteUrl": "https://tailscale.com",
|
||||
"description": "Tailscale provides a zero-config mesh VPN and zero-trust networking platform that securely connects devices and services across any network.",
|
||||
"category": "Security",
|
||||
"category": "SECURITY",
|
||||
"certifications": [
|
||||
"SOC 2 Type II",
|
||||
"GDPR",
|
||||
@@ -1820,7 +1820,7 @@
|
||||
"headquarterAddress": "575 Market Street, Floor 5, San Francisco, CA 94105, USA",
|
||||
"websiteUrl": "https://puzzle.io",
|
||||
"description": "Puzzle provides modern, real-time accounting software that gives startups automated bookkeeping and instant finance metrics such as cash, burn and runway.",
|
||||
"category": "Finance",
|
||||
"category": "FINANCE",
|
||||
"certifications": [
|
||||
"SOC 2 Type 2",
|
||||
"GDPR",
|
||||
@@ -1838,7 +1838,7 @@
|
||||
"headquarterAddress": "490 Post St, Suite 640,San Francisco, CA 94102, United States",
|
||||
"websiteUrl": "https://www.getprobo.com/",
|
||||
"description": "Probo is an open-source compliance platform that helps startups achieve SOC 2 and ISO 27001 certifications quickly and affordably, with expert guidance and no vendor lock-in.",
|
||||
"category": "Security",
|
||||
"category": "SECURITY",
|
||||
"privacyPolicyUrl": "https://www.getprobo.com/privacy",
|
||||
"termsOfServiceUrl": "https://www.getprobo.com/terms",
|
||||
"subprocessorsListUrl": "https://www.getprobo.com/subprocessors"
|
||||
@@ -1849,7 +1849,7 @@
|
||||
"headquarterAddress": "31 Rue des Vinaigriers, 75010 Paris, France",
|
||||
"websiteUrl": "https://www.folk.app",
|
||||
"description": "Lightweight, collaborative CRM that automates contact and relationship management for modern teams.",
|
||||
"category": "Sales",
|
||||
"category": "SALES",
|
||||
"certifications": [
|
||||
"SOC 2 Type 1",
|
||||
"GDPR",
|
||||
@@ -1865,7 +1865,7 @@
|
||||
"name": "Claap",
|
||||
"websiteUrl": "https://www.claap.io",
|
||||
"description": "AI-powered meeting recorder and video workspace that automates post-meeting tasks and CRM enrichment.",
|
||||
"category": "Collaboration",
|
||||
"category": "COLLABORATION",
|
||||
"certifications": [
|
||||
"SOC 2 Type 2",
|
||||
"GDPR",
|
||||
@@ -1882,7 +1882,7 @@
|
||||
"headquarterAddress": "Joachimstraße 7, 10119 Berlin, Germany",
|
||||
"websiteUrl": "https://pitch.com",
|
||||
"description": "Cloud-based presentation platform that lets teams collaboratively create, design, and share visually engaging slide decks in real time.",
|
||||
"category": "Product and design",
|
||||
"category": "PRODUCT_AND_DESIGN",
|
||||
"certifications": [
|
||||
"GDPR"
|
||||
],
|
||||
@@ -1900,7 +1900,7 @@
|
||||
"headquarterAddress": "51 Rue de Londres, 75008 Paris, France",
|
||||
"websiteUrl": "https://www.spendesk.com",
|
||||
"description": "Spendesk is a comprehensive spend management platform offering solutions like virtual and physical cards, invoice processing, and expense reimbursements to streamline company spending.",
|
||||
"category": "Finance",
|
||||
"category": "FINANCE",
|
||||
"certifications": [
|
||||
"GDPR",
|
||||
"ISO/IEC 27001:2022",
|
||||
@@ -1920,7 +1920,7 @@
|
||||
"headquarterAddress": "1125 Mission Street, San Francisco, CA 94103, United States",
|
||||
"websiteUrl": "https://www.lever.co",
|
||||
"description": "Cloud-based talent-acquisition suite that combines applicant-tracking and candidate-relationship-management tools so organisations can source, engage and hire talent in one place.",
|
||||
"category": "Recruiting",
|
||||
"category": "RECRUITING",
|
||||
"certifications": [
|
||||
"SOC 2 Type 2",
|
||||
"ISO/IEC 27001",
|
||||
@@ -1943,7 +1943,7 @@
|
||||
"headquarterAddress": "1600 Amphitheatre Parkway, Mountain View, CA 94043, USA",
|
||||
"websiteUrl": "https://cloud.google.com",
|
||||
"description": "Comprehensive public cloud computing platform offering infrastructure, data analytics, AI, security, and developer tools",
|
||||
"category": "Cloud provider",
|
||||
"category": "CLOUD_PROVIDER",
|
||||
"certifications": [
|
||||
"Cloud Computing Compliance Controls Catalog (C5)",
|
||||
"CSA",
|
||||
@@ -2107,7 +2107,7 @@
|
||||
"headquarterAddress": "2045 W Grand Ave, Chicago, IL 60612, United States",
|
||||
"websiteUrl": "https://fly.io",
|
||||
"description": "Developer-focused public cloud platform offering hardware-virtualized containers (Fly Machines) with KVM isolation, automatic scaling to zero, and integrated tools for deploying and managing applications globally",
|
||||
"category": "Cloud provider",
|
||||
"category": "CLOUD_PROVIDER",
|
||||
"certifications": [
|
||||
"SOC 2 Type 2",
|
||||
"EU-U.S. DPF",
|
||||
@@ -2133,7 +2133,7 @@
|
||||
"headquarterAddress": "6202 Via De Adrianna, San Jose, CA 95120, United States",
|
||||
"websiteUrl": "https://upstash.com",
|
||||
"description": "Serverless data platform providing HTTP-based Redis, Vector, and QStash services with global low-latency, automatic scaling, and durable storage",
|
||||
"category": "Data storage and processing",
|
||||
"category": "DATA_STORAGE_AND_PROCESSING",
|
||||
"certifications": [
|
||||
"SOC 2 Type 2",
|
||||
"GDPR",
|
||||
@@ -2154,7 +2154,7 @@
|
||||
"headquarterAddress": "Dunajska cesta 165, 1000 Ljubljana, Slovenia",
|
||||
"websiteUrl": "https://bunny.net",
|
||||
"description": "Cloud-based content-delivery, edge-storage and optimization platform that accelerates and secures web content worldwide.",
|
||||
"category": "Cloud provider",
|
||||
"category": "CLOUD_PROVIDER",
|
||||
"certifications": [
|
||||
"ISO 27001",
|
||||
"GDPR"
|
||||
@@ -2172,7 +2172,7 @@
|
||||
"headquarterAddress": "350 Tenth Ave, 5th Floor, San Diego, CA 92101, United States",
|
||||
"websiteUrl": "https://clickup.com",
|
||||
"description": "All-in-one productivity platform for project management, document collaboration, and goal tracking.",
|
||||
"category": "Project management",
|
||||
"category": "COLLABORATION",
|
||||
"certifications": [
|
||||
"SOC 2 Type 2",
|
||||
"ISO/IEC 27001",
|
||||
@@ -2199,7 +2199,7 @@
|
||||
"headquarterAddress": "5314 56 St, Camrose, Alberta T4V 2E5, Canada",
|
||||
"websiteUrl": "https://www.danami.com",
|
||||
"description": "Developer of security, firewall and anti-spam extensions for the Plesk hosting control panel.",
|
||||
"category": "Developer tools",
|
||||
"category": "DEVELOPER_TOOLS",
|
||||
"privacyPolicyUrl": "https://www.danami.com/legal/privacy-policy",
|
||||
"termsOfServiceUrl": "https://www.danami.com/legal/terms-of-service"
|
||||
},
|
||||
@@ -2209,7 +2209,7 @@
|
||||
"headquarterAddress": "188 Spear St., Suite 1000, San Francisco, CA 94105, USA",
|
||||
"websiteUrl": "https://newrelic.com",
|
||||
"description": "New Relic provides a full-stack observability platform that lets engineering teams monitor, analyze, and improve application, infrastructure, and digital-experience performance in real time.",
|
||||
"category": "Cloud monitoring",
|
||||
"category": "CLOUD_MONITORING",
|
||||
"certifications": [
|
||||
"SOC 2 Type 2",
|
||||
"ISO/IEC 27001:2022",
|
||||
@@ -2238,7 +2238,7 @@
|
||||
"headquarterAddress": "188 King Street, Unit 502, San Francisco, CA 94107, USA",
|
||||
"websiteUrl": "https://usepylon.com",
|
||||
"description": "Pylon provides a modern unified customer-support platform for B2B companies, combining ticketing, chat, knowledge base, AI assistance, customer portal and workflows in one tool.",
|
||||
"category": "Customer support",
|
||||
"category": "CUSTOMER_SUPPORT",
|
||||
"certifications": [
|
||||
"SOC 2 Type 2",
|
||||
"ISO/IEC 27001",
|
||||
@@ -2258,7 +2258,7 @@
|
||||
"legalName": "Astrodon Inc.",
|
||||
"websiteUrl": "https://loops.so",
|
||||
"description": "Email platform for SaaS companies that lets teams create, send and track product, marketing, and transactional emails from a single interface",
|
||||
"category": "Marketing",
|
||||
"category": "MARKETING",
|
||||
"certifications": [
|
||||
"GDPR",
|
||||
"CCPA"
|
||||
@@ -2275,7 +2275,7 @@
|
||||
"headquarterAddress": "115 Sansome St, San Francisco, CA 94104-3601, United States",
|
||||
"websiteUrl": "https://www.perplexity.ai",
|
||||
"description": "Generative AI answer engine that delivers real-time, source-cited answers to user questions.",
|
||||
"category": "Marketing",
|
||||
"category": "MARKETING",
|
||||
"certifications": [
|
||||
"SOC 2 Type 2",
|
||||
"GDPR",
|
||||
@@ -2292,4 +2292,3 @@
|
||||
"statusPageUrl": "https://status.perplexity.ai/"
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
@@ -75,12 +75,36 @@ const (
|
||||
- terms_of_service_url: URL to terms of service page
|
||||
- status_page_url: URL to system status page
|
||||
- certifications: Array of security/compliance certifications (e.g., ["SOC2", "ISO27001"])
|
||||
- category: One of the following enum values:
|
||||
- "ANALYTICS"
|
||||
- "CLOUD_MONITORING"
|
||||
- "CLOUD_PROVIDER"
|
||||
- "COLLABORATION"
|
||||
- "CUSTOMER_SUPPORT"
|
||||
- "DATA_STORAGE_AND_PROCESSING"
|
||||
- "DOCUMENT_MANAGEMENT"
|
||||
- "EMPLOYEE_MANAGEMENT"
|
||||
- "ENGINEERING"
|
||||
- "FINANCE"
|
||||
- "IDENTITY_PROVIDER"
|
||||
- "IT"
|
||||
- "MARKETING"
|
||||
- "OFFICE_OPERATIONS"
|
||||
- "OTHER"
|
||||
- "PASSWORD_MANAGEMENT"
|
||||
- "PRODUCT_AND_DESIGN"
|
||||
- "PROFESSIONAL_SERVICES"
|
||||
- "RECRUITING"
|
||||
- "SALES"
|
||||
- "SECURITY"
|
||||
- "VERSION_CONTROL"
|
||||
|
||||
# SOP
|
||||
- Please ensure the output is clean, standardized JSON.
|
||||
- Use web search to gather info, if you cannot find what you are looking for, just return an empty string instead
|
||||
- For URLs, return the full URL if found, otherwise an empty string
|
||||
- For certifications, return an empty array if none found
|
||||
- For category, if you cannot determine the category, use "OTHER"
|
||||
|
||||
# **Example output format:**
|
||||
Respond ONLY with a JSON object. No explanation, no markdown, no preamble. Like this:
|
||||
@@ -96,7 +120,8 @@ const (
|
||||
"trust_page_url": "https://stripe.com/trust",
|
||||
"terms_of_service_url": "https://stripe.com/terms",
|
||||
"status_page_url": "https://status.stripe.com",
|
||||
"certifications": ["SOC1", "SOC2", "PCI DSS Level 1", "ISO 27001"]
|
||||
"certifications": ["SOC1", "SOC2", "PCI DSS Level 1", "ISO 27001"],
|
||||
"category": "FINANCE"
|
||||
}
|
||||
|
||||
### Company url:
|
||||
|
||||
@@ -84,11 +84,7 @@ func (i *BusinessImpact) UnmarshalJSON(data []byte) error {
|
||||
}
|
||||
|
||||
func (i *BusinessImpact) UnmarshalText(text []byte) error {
|
||||
var s string
|
||||
if err := json.Unmarshal(text, &s); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
s := string(text)
|
||||
switch s {
|
||||
case "LOW":
|
||||
*i = BusinessImpactLow
|
||||
|
||||
84
pkg/coredata/migrations/20250527T211803Z.sql
Normal file
84
pkg/coredata/migrations/20250527T211803Z.sql
Normal file
@@ -0,0 +1,84 @@
|
||||
CREATE TYPE vendor_category AS ENUM (
|
||||
'ANALYTICS',
|
||||
'CLOUD_MONITORING',
|
||||
'CLOUD_PROVIDER',
|
||||
'COLLABORATION',
|
||||
'CUSTOMER_SUPPORT',
|
||||
'DATA_STORAGE_AND_PROCESSING',
|
||||
'DOCUMENT_MANAGEMENT',
|
||||
'EMPLOYEE_MANAGEMENT',
|
||||
'ENGINEERING',
|
||||
'FINANCE',
|
||||
'IDENTITY_PROVIDER',
|
||||
'IT',
|
||||
'MARKETING',
|
||||
'OFFICE_OPERATIONS',
|
||||
'OTHER',
|
||||
'PASSWORD_MANAGEMENT',
|
||||
'PRODUCT_AND_DESIGN',
|
||||
'PROFESSIONAL_SERVICES',
|
||||
'RECRUITING',
|
||||
'SALES',
|
||||
'SECURITY',
|
||||
'VERSION_CONTROL'
|
||||
);
|
||||
|
||||
ALTER TABLE vendors DROP COLUMN IF EXISTS category;
|
||||
ALTER TABLE vendors ADD COLUMN category vendor_category NOT NULL DEFAULT 'OTHER';
|
||||
|
||||
-- Update categories based on the vendor data.json mappings
|
||||
UPDATE vendors SET category = 'ANALYTICS' WHERE name IN ('Segment', 'Plausible Analytics', 'PostHog');
|
||||
|
||||
UPDATE vendors SET category = 'CLOUD_MONITORING' WHERE name IN ('Datadog', 'New Relic', 'Better Stack');
|
||||
|
||||
UPDATE vendors SET category = 'CLOUD_PROVIDER' WHERE name IN (
|
||||
'Amazon Web Services (AWS)', 'Microsoft Azure', 'Google Cloud Platform', 'Cloudflare',
|
||||
'Vercel', 'Fly.io', 'Latitude.sh', 'Google', 'Heroku', 'Porter', 'OVHcloud global',
|
||||
'OVHcloud US', 'bunny.net'
|
||||
);
|
||||
|
||||
UPDATE vendors SET category = 'COLLABORATION' WHERE name IN (
|
||||
'Slack', 'Microsoft 365', 'Cal.com', 'Zoom', 'Sendgrid', 'Google Workspace',
|
||||
'Signal', 'monday.com', 'Calendly', 'Twilio', 'Otter.ai', 'Claap', 'ClickUp'
|
||||
);
|
||||
|
||||
UPDATE vendors SET category = 'CUSTOMER_SUPPORT' WHERE name = 'Pylon';
|
||||
|
||||
UPDATE vendors SET category = 'DATA_STORAGE_AND_PROCESSING' WHERE name IN (
|
||||
'Supabase', 'PlanetScale', 'ClickHouse', 'Airtable', 'Upstash'
|
||||
);
|
||||
|
||||
UPDATE vendors SET category = 'DOCUMENT_MANAGEMENT' WHERE name = 'Notion';
|
||||
|
||||
UPDATE vendors SET category = 'EMPLOYEE_MANAGEMENT' WHERE name IN ('Gusto', 'Checkr', 'Rippling');
|
||||
|
||||
UPDATE vendors SET category = 'ENGINEERING' WHERE name IN (
|
||||
'Sentry', 'npm', 'Atlassian', 'Algolia', 'Mintlify', 'Linear', 'Langfuse',
|
||||
'OpenAI', 'Anthropic', 'Cursor', 'Together AI', 'Docker', 'jsDelivr'
|
||||
);
|
||||
|
||||
UPDATE vendors SET category = 'FINANCE' WHERE name IN (
|
||||
'Stripe', 'Pulley', 'Mercury', 'Brex', 'Ramp', 'Carta', 'Qonto', 'Spendesk', 'Puzzle', 'Vouch'
|
||||
);
|
||||
|
||||
UPDATE vendors SET category = 'IDENTITY_PROVIDER' WHERE name IN ('Auth0', 'Clerk');
|
||||
|
||||
UPDATE vendors SET category = 'IT' WHERE name IN ('Namecheap', 'Plesk');
|
||||
|
||||
UPDATE vendors SET category = 'MARKETING' WHERE name IN (
|
||||
'Hubspot', 'Mailchimp', 'Resend', 'Brevo', 'Loops', 'Perplexity'
|
||||
);
|
||||
|
||||
UPDATE vendors SET category = 'PASSWORD_MANAGEMENT' WHERE name IN ('1Password', 'Bitwarden');
|
||||
|
||||
UPDATE vendors SET category = 'PRODUCT_AND_DESIGN' WHERE name IN (
|
||||
'Framer', 'Figma', 'Webflow', 'Pitch'
|
||||
);
|
||||
|
||||
UPDATE vendors SET category = 'RECRUITING' WHERE name = 'Lever';
|
||||
|
||||
UPDATE vendors SET category = 'SALES' WHERE name IN ('Apollo.io', 'Pipedrive', 'folk');
|
||||
|
||||
UPDATE vendors SET category = 'SECURITY' WHERE name IN ('Tailscale', 'Probo');
|
||||
|
||||
UPDATE vendors SET category = 'VERSION_CONTROL' WHERE name = 'Github';
|
||||
@@ -28,26 +28,26 @@ import (
|
||||
|
||||
type (
|
||||
Vendor struct {
|
||||
ID gid.GID `db:"id"`
|
||||
OrganizationID gid.GID `db:"organization_id"`
|
||||
Name string `db:"name"`
|
||||
Description *string `db:"description"`
|
||||
Category string `db:"category"`
|
||||
HeadquarterAddress *string `db:"headquarter_address"`
|
||||
LegalName *string `db:"legal_name"`
|
||||
WebsiteURL *string `db:"website_url"`
|
||||
PrivacyPolicyURL *string `db:"privacy_policy_url"`
|
||||
ServiceLevelAgreementURL *string `db:"service_level_agreement_url"`
|
||||
DataProcessingAgreementURL *string `db:"data_processing_agreement_url"`
|
||||
Certifications []string `db:"certifications"`
|
||||
BusinessOwnerID *gid.GID `db:"business_owner_id"`
|
||||
SecurityOwnerID *gid.GID `db:"security_owner_id"`
|
||||
StatusPageURL *string `db:"status_page_url"`
|
||||
TermsOfServiceURL *string `db:"terms_of_service_url"`
|
||||
SecurityPageURL *string `db:"security_page_url"`
|
||||
TrustPageURL *string `db:"trust_page_url"`
|
||||
CreatedAt time.Time `db:"created_at"`
|
||||
UpdatedAt time.Time `db:"updated_at"`
|
||||
ID gid.GID `db:"id"`
|
||||
OrganizationID gid.GID `db:"organization_id"`
|
||||
Name string `db:"name"`
|
||||
Description *string `db:"description"`
|
||||
Category VendorCategory `db:"category"`
|
||||
HeadquarterAddress *string `db:"headquarter_address"`
|
||||
LegalName *string `db:"legal_name"`
|
||||
WebsiteURL *string `db:"website_url"`
|
||||
PrivacyPolicyURL *string `db:"privacy_policy_url"`
|
||||
ServiceLevelAgreementURL *string `db:"service_level_agreement_url"`
|
||||
DataProcessingAgreementURL *string `db:"data_processing_agreement_url"`
|
||||
Certifications []string `db:"certifications"`
|
||||
BusinessOwnerID *gid.GID `db:"business_owner_id"`
|
||||
SecurityOwnerID *gid.GID `db:"security_owner_id"`
|
||||
StatusPageURL *string `db:"status_page_url"`
|
||||
TermsOfServiceURL *string `db:"terms_of_service_url"`
|
||||
SecurityPageURL *string `db:"security_page_url"`
|
||||
TrustPageURL *string `db:"trust_page_url"`
|
||||
CreatedAt time.Time `db:"created_at"`
|
||||
UpdatedAt time.Time `db:"updated_at"`
|
||||
}
|
||||
|
||||
Vendors []*Vendor
|
||||
|
||||
228
pkg/coredata/vendor_category.go
Normal file
228
pkg/coredata/vendor_category.go
Normal file
@@ -0,0 +1,228 @@
|
||||
// Copyright (c) 2025 Probo Inc <hello@getprobo.com>.
|
||||
//
|
||||
// Permission to use, copy, modify, and/or distribute this software for any
|
||||
// purpose with or without fee is hereby granted, provided that the above
|
||||
// copyright notice and this permission notice appear in all copies.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
// AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
// OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
// PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
package coredata
|
||||
|
||||
import (
|
||||
"database/sql/driver"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
type VendorCategory string
|
||||
|
||||
const (
|
||||
VendorCategoryAnalytics VendorCategory = "ANALYTICS"
|
||||
VendorCategoryCloudMonitoring VendorCategory = "CLOUD_MONITORING"
|
||||
VendorCategoryCloudProvider VendorCategory = "CLOUD_PROVIDER"
|
||||
VendorCategoryCollaboration VendorCategory = "COLLABORATION"
|
||||
VendorCategoryCustomerSupport VendorCategory = "CUSTOMER_SUPPORT"
|
||||
VendorCategoryDataStorageAndProcessing VendorCategory = "DATA_STORAGE_AND_PROCESSING"
|
||||
VendorCategoryDocumentManagement VendorCategory = "DOCUMENT_MANAGEMENT"
|
||||
VendorCategoryEmployeeManagement VendorCategory = "EMPLOYEE_MANAGEMENT"
|
||||
VendorCategoryEngineering VendorCategory = "ENGINEERING"
|
||||
VendorCategoryFinance VendorCategory = "FINANCE"
|
||||
VendorCategoryIdentityProvider VendorCategory = "IDENTITY_PROVIDER"
|
||||
VendorCategoryIT VendorCategory = "IT"
|
||||
VendorCategoryMarketing VendorCategory = "MARKETING"
|
||||
VendorCategoryOfficeOperations VendorCategory = "OFFICE_OPERATIONS"
|
||||
VendorCategoryOther VendorCategory = "OTHER"
|
||||
VendorCategoryPasswordManagement VendorCategory = "PASSWORD_MANAGEMENT"
|
||||
VendorCategoryProductAndDesign VendorCategory = "PRODUCT_AND_DESIGN"
|
||||
VendorCategoryProfessionalServices VendorCategory = "PROFESSIONAL_SERVICES"
|
||||
VendorCategoryRecruiting VendorCategory = "RECRUITING"
|
||||
VendorCategorySales VendorCategory = "SALES"
|
||||
VendorCategorySecurity VendorCategory = "SECURITY"
|
||||
VendorCategoryVersionControl VendorCategory = "VERSION_CONTROL"
|
||||
)
|
||||
|
||||
func (i VendorCategory) String() string {
|
||||
return string(i)
|
||||
}
|
||||
|
||||
func (i *VendorCategory) Scan(value interface{}) error {
|
||||
switch v := value.(type) {
|
||||
case string:
|
||||
switch v {
|
||||
case "ANALYTICS":
|
||||
*i = VendorCategoryAnalytics
|
||||
case "CLOUD_MONITORING":
|
||||
*i = VendorCategoryCloudMonitoring
|
||||
case "CLOUD_PROVIDER":
|
||||
*i = VendorCategoryCloudProvider
|
||||
case "COLLABORATION":
|
||||
*i = VendorCategoryCollaboration
|
||||
case "CUSTOMER_SUPPORT":
|
||||
*i = VendorCategoryCustomerSupport
|
||||
case "DATA_STORAGE_AND_PROCESSING":
|
||||
*i = VendorCategoryDataStorageAndProcessing
|
||||
case "DOCUMENT_MANAGEMENT":
|
||||
*i = VendorCategoryDocumentManagement
|
||||
case "EMPLOYEE_MANAGEMENT":
|
||||
*i = VendorCategoryEmployeeManagement
|
||||
case "ENGINEERING":
|
||||
*i = VendorCategoryEngineering
|
||||
case "FINANCE":
|
||||
*i = VendorCategoryFinance
|
||||
case "IDENTITY_PROVIDER":
|
||||
*i = VendorCategoryIdentityProvider
|
||||
case "IT":
|
||||
*i = VendorCategoryIT
|
||||
case "MARKETING":
|
||||
*i = VendorCategoryMarketing
|
||||
case "OFFICE_OPERATIONS":
|
||||
*i = VendorCategoryOfficeOperations
|
||||
case "OTHER":
|
||||
*i = VendorCategoryOther
|
||||
case "PASSWORD_MANAGEMENT":
|
||||
*i = VendorCategoryPasswordManagement
|
||||
case "PRODUCT_AND_DESIGN":
|
||||
*i = VendorCategoryProductAndDesign
|
||||
case "PROFESSIONAL_SERVICES":
|
||||
*i = VendorCategoryProfessionalServices
|
||||
case "RECRUITING":
|
||||
*i = VendorCategoryRecruiting
|
||||
case "SALES":
|
||||
*i = VendorCategorySales
|
||||
case "SECURITY":
|
||||
*i = VendorCategorySecurity
|
||||
case "VERSION_CONTROL":
|
||||
*i = VendorCategoryVersionControl
|
||||
default:
|
||||
return fmt.Errorf("invalid VendorCategory value: %q", v)
|
||||
}
|
||||
default:
|
||||
return fmt.Errorf("unsupported type for VendorCategory: %T", value)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (i VendorCategory) Value() (driver.Value, error) {
|
||||
return i.String(), nil
|
||||
}
|
||||
|
||||
func (i VendorCategory) MarshalJSON() ([]byte, error) {
|
||||
return json.Marshal(i.String())
|
||||
}
|
||||
|
||||
func (i *VendorCategory) UnmarshalJSON(data []byte) error {
|
||||
var s string
|
||||
if err := json.Unmarshal(data, &s); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
switch s {
|
||||
case "ANALYTICS":
|
||||
*i = VendorCategoryAnalytics
|
||||
case "CLOUD_MONITORING":
|
||||
*i = VendorCategoryCloudMonitoring
|
||||
case "CLOUD_PROVIDER":
|
||||
*i = VendorCategoryCloudProvider
|
||||
case "COLLABORATION":
|
||||
*i = VendorCategoryCollaboration
|
||||
case "CUSTOMER_SUPPORT":
|
||||
*i = VendorCategoryCustomerSupport
|
||||
case "DATA_STORAGE_AND_PROCESSING":
|
||||
*i = VendorCategoryDataStorageAndProcessing
|
||||
case "DOCUMENT_MANAGEMENT":
|
||||
*i = VendorCategoryDocumentManagement
|
||||
case "EMPLOYEE_MANAGEMENT":
|
||||
*i = VendorCategoryEmployeeManagement
|
||||
case "ENGINEERING":
|
||||
*i = VendorCategoryEngineering
|
||||
case "FINANCE":
|
||||
*i = VendorCategoryFinance
|
||||
case "IDENTITY_PROVIDER":
|
||||
*i = VendorCategoryIdentityProvider
|
||||
case "IT":
|
||||
*i = VendorCategoryIT
|
||||
case "MARKETING":
|
||||
*i = VendorCategoryMarketing
|
||||
case "OFFICE_OPERATIONS":
|
||||
*i = VendorCategoryOfficeOperations
|
||||
case "OTHER":
|
||||
*i = VendorCategoryOther
|
||||
case "PASSWORD_MANAGEMENT":
|
||||
*i = VendorCategoryPasswordManagement
|
||||
case "PRODUCT_AND_DESIGN":
|
||||
*i = VendorCategoryProductAndDesign
|
||||
case "PROFESSIONAL_SERVICES":
|
||||
*i = VendorCategoryProfessionalServices
|
||||
case "RECRUITING":
|
||||
*i = VendorCategoryRecruiting
|
||||
case "SALES":
|
||||
*i = VendorCategorySales
|
||||
case "SECURITY":
|
||||
*i = VendorCategorySecurity
|
||||
case "VERSION_CONTROL":
|
||||
*i = VendorCategoryVersionControl
|
||||
default:
|
||||
return fmt.Errorf("invalid VendorCategory value: %q", s)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (i *VendorCategory) UnmarshalText(text []byte) error {
|
||||
s := string(text)
|
||||
|
||||
switch s {
|
||||
case "ANALYTICS":
|
||||
*i = VendorCategoryAnalytics
|
||||
case "CLOUD_MONITORING":
|
||||
*i = VendorCategoryCloudMonitoring
|
||||
case "CLOUD_PROVIDER":
|
||||
*i = VendorCategoryCloudProvider
|
||||
case "COLLABORATION":
|
||||
*i = VendorCategoryCollaboration
|
||||
case "CUSTOMER_SUPPORT":
|
||||
*i = VendorCategoryCustomerSupport
|
||||
case "DATA_STORAGE_AND_PROCESSING":
|
||||
*i = VendorCategoryDataStorageAndProcessing
|
||||
case "DOCUMENT_MANAGEMENT":
|
||||
*i = VendorCategoryDocumentManagement
|
||||
case "EMPLOYEE_MANAGEMENT":
|
||||
*i = VendorCategoryEmployeeManagement
|
||||
case "ENGINEERING":
|
||||
*i = VendorCategoryEngineering
|
||||
case "FINANCE":
|
||||
*i = VendorCategoryFinance
|
||||
case "IDENTITY_PROVIDER":
|
||||
*i = VendorCategoryIdentityProvider
|
||||
case "IT":
|
||||
*i = VendorCategoryIT
|
||||
case "MARKETING":
|
||||
*i = VendorCategoryMarketing
|
||||
case "OFFICE_OPERATIONS":
|
||||
*i = VendorCategoryOfficeOperations
|
||||
case "OTHER":
|
||||
*i = VendorCategoryOther
|
||||
case "PASSWORD_MANAGEMENT":
|
||||
*i = VendorCategoryPasswordManagement
|
||||
case "PRODUCT_AND_DESIGN":
|
||||
*i = VendorCategoryProductAndDesign
|
||||
case "PROFESSIONAL_SERVICES":
|
||||
*i = VendorCategoryProfessionalServices
|
||||
case "RECRUITING":
|
||||
*i = VendorCategoryRecruiting
|
||||
case "SALES":
|
||||
*i = VendorCategorySales
|
||||
case "SECURITY":
|
||||
*i = VendorCategorySecurity
|
||||
case "VERSION_CONTROL":
|
||||
*i = VendorCategoryVersionControl
|
||||
default:
|
||||
return fmt.Errorf("invalid VendorCategory value: %q", s)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -37,7 +37,7 @@ type (
|
||||
HeadquarterAddress *string
|
||||
LegalName *string
|
||||
WebsiteURL *string
|
||||
Category *string
|
||||
Category *coredata.VendorCategory
|
||||
PrivacyPolicyURL *string
|
||||
ServiceLevelAgreementURL *string
|
||||
DataProcessingAgreementURL *string
|
||||
@@ -58,7 +58,7 @@ type (
|
||||
LegalName *string
|
||||
WebsiteURL *string
|
||||
TermsOfServiceURL *string
|
||||
Category *string
|
||||
Category *coredata.VendorCategory
|
||||
PrivacyPolicyURL *string
|
||||
ServiceLevelAgreementURL *string
|
||||
DataProcessingAgreementURL *string
|
||||
@@ -160,6 +160,8 @@ func (s VendorService) Update(
|
||||
|
||||
if req.Category != nil {
|
||||
vendor.Category = *req.Category
|
||||
} else {
|
||||
vendor.Category = coredata.VendorCategoryOther
|
||||
}
|
||||
|
||||
if req.SecurityPageURL != nil {
|
||||
@@ -321,7 +323,7 @@ func (s VendorService) Create(
|
||||
if req.Category != nil {
|
||||
vendor.Category = *req.Category
|
||||
} else {
|
||||
vendor.Category = "Other"
|
||||
vendor.Category = coredata.VendorCategoryOther
|
||||
}
|
||||
|
||||
if err := vendor.Insert(ctx, conn, s.svc.scope); err != nil {
|
||||
@@ -441,7 +443,7 @@ func (s VendorService) Assess(
|
||||
Name: vendorInfo.Name,
|
||||
WebsiteURL: &req.WebsiteURL,
|
||||
Description: &vendorInfo.Description,
|
||||
Category: vendorInfo.Category,
|
||||
Category: coredata.VendorCategory(vendorInfo.Category),
|
||||
HeadquarterAddress: &vendorInfo.HeadquarterAddress,
|
||||
LegalName: &vendorInfo.LegalName,
|
||||
PrivacyPolicyURL: &vendorInfo.PrivacyPolicyURL,
|
||||
|
||||
@@ -312,6 +312,31 @@ enum PolicyVersionOrderField
|
||||
)
|
||||
}
|
||||
|
||||
enum VendorCategory @goModel(model: "github.com/getprobo/probo/pkg/coredata.VendorCategory") {
|
||||
ANALYTICS @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryAnalytics")
|
||||
CLOUD_MONITORING @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryCloudMonitoring")
|
||||
CLOUD_PROVIDER @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryCloudProvider")
|
||||
COLLABORATION @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryCollaboration")
|
||||
CUSTOMER_SUPPORT @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryCustomerSupport")
|
||||
DATA_STORAGE_AND_PROCESSING @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryDataStorageAndProcessing")
|
||||
DOCUMENT_MANAGEMENT @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryDocumentManagement")
|
||||
EMPLOYEE_MANAGEMENT @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryEmployeeManagement")
|
||||
ENGINEERING @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryEngineering")
|
||||
FINANCE @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryFinance")
|
||||
IDENTITY_PROVIDER @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryIdentityProvider")
|
||||
IT @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryIT")
|
||||
MARKETING @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryMarketing")
|
||||
OFFICE_OPERATIONS @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryOfficeOperations")
|
||||
OTHER @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryOther")
|
||||
PASSWORD_MANAGEMENT @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryPasswordManagement")
|
||||
PRODUCT_AND_DESIGN @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryProductAndDesign")
|
||||
PROFESSIONAL_SERVICES @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryProfessionalServices")
|
||||
RECRUITING @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryRecruiting")
|
||||
SALES @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategorySales")
|
||||
SECURITY @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategorySecurity")
|
||||
VERSION_CONTROL @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryVersionControl")
|
||||
}
|
||||
|
||||
# Order Input Types
|
||||
input UserOrder
|
||||
@goModel(
|
||||
@@ -539,6 +564,7 @@ type People implements Node {
|
||||
type Vendor implements Node {
|
||||
id: ID!
|
||||
name: String!
|
||||
category: VendorCategory!
|
||||
description: String
|
||||
|
||||
organization: Organization! @goField(forceResolver: true)
|
||||
@@ -1115,7 +1141,7 @@ input CreateVendorInput {
|
||||
legalName: String
|
||||
websiteUrl: String
|
||||
privacyPolicyUrl: String
|
||||
category: String
|
||||
category: VendorCategory
|
||||
serviceLevelAgreementUrl: String
|
||||
dataProcessingAgreementUrl: String
|
||||
certifications: [String!]
|
||||
@@ -1139,7 +1165,7 @@ input UpdateVendorInput {
|
||||
websiteUrl: String
|
||||
legalName: String
|
||||
headquarterAddress: String
|
||||
category: String
|
||||
category: VendorCategory
|
||||
certifications: [String!]
|
||||
securityPageUrl: String
|
||||
trustPageUrl: String
|
||||
|
||||
@@ -674,6 +674,7 @@ type ComplexityRoot struct {
|
||||
|
||||
Vendor struct {
|
||||
BusinessOwner func(childComplexity int) int
|
||||
Category func(childComplexity int) int
|
||||
Certifications func(childComplexity int) int
|
||||
ComplianceReports func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.VendorComplianceReportOrderBy) int
|
||||
CreatedAt func(childComplexity int) int
|
||||
@@ -3513,6 +3514,13 @@ func (e *executableSchema) Complexity(ctx context.Context, typeName, field strin
|
||||
|
||||
return e.complexity.Vendor.BusinessOwner(childComplexity), true
|
||||
|
||||
case "Vendor.category":
|
||||
if e.complexity.Vendor.Category == nil {
|
||||
break
|
||||
}
|
||||
|
||||
return e.complexity.Vendor.Category(childComplexity), true
|
||||
|
||||
case "Vendor.certifications":
|
||||
if e.complexity.Vendor.Certifications == nil {
|
||||
break
|
||||
@@ -4397,6 +4405,31 @@ enum PolicyVersionOrderField
|
||||
)
|
||||
}
|
||||
|
||||
enum VendorCategory @goModel(model: "github.com/getprobo/probo/pkg/coredata.VendorCategory") {
|
||||
ANALYTICS @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryAnalytics")
|
||||
CLOUD_MONITORING @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryCloudMonitoring")
|
||||
CLOUD_PROVIDER @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryCloudProvider")
|
||||
COLLABORATION @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryCollaboration")
|
||||
CUSTOMER_SUPPORT @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryCustomerSupport")
|
||||
DATA_STORAGE_AND_PROCESSING @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryDataStorageAndProcessing")
|
||||
DOCUMENT_MANAGEMENT @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryDocumentManagement")
|
||||
EMPLOYEE_MANAGEMENT @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryEmployeeManagement")
|
||||
ENGINEERING @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryEngineering")
|
||||
FINANCE @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryFinance")
|
||||
IDENTITY_PROVIDER @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryIdentityProvider")
|
||||
IT @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryIT")
|
||||
MARKETING @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryMarketing")
|
||||
OFFICE_OPERATIONS @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryOfficeOperations")
|
||||
OTHER @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryOther")
|
||||
PASSWORD_MANAGEMENT @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryPasswordManagement")
|
||||
PRODUCT_AND_DESIGN @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryProductAndDesign")
|
||||
PROFESSIONAL_SERVICES @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryProfessionalServices")
|
||||
RECRUITING @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryRecruiting")
|
||||
SALES @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategorySales")
|
||||
SECURITY @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategorySecurity")
|
||||
VERSION_CONTROL @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryVersionControl")
|
||||
}
|
||||
|
||||
# Order Input Types
|
||||
input UserOrder
|
||||
@goModel(
|
||||
@@ -4624,6 +4657,7 @@ type People implements Node {
|
||||
type Vendor implements Node {
|
||||
id: ID!
|
||||
name: String!
|
||||
category: VendorCategory!
|
||||
description: String
|
||||
|
||||
organization: Organization! @goField(forceResolver: true)
|
||||
@@ -5200,7 +5234,7 @@ input CreateVendorInput {
|
||||
legalName: String
|
||||
websiteUrl: String
|
||||
privacyPolicyUrl: String
|
||||
category: String
|
||||
category: VendorCategory
|
||||
serviceLevelAgreementUrl: String
|
||||
dataProcessingAgreementUrl: String
|
||||
certifications: [String!]
|
||||
@@ -5224,7 +5258,7 @@ input UpdateVendorInput {
|
||||
websiteUrl: String
|
||||
legalName: String
|
||||
headquarterAddress: String
|
||||
category: String
|
||||
category: VendorCategory
|
||||
certifications: [String!]
|
||||
securityPageUrl: String
|
||||
trustPageUrl: String
|
||||
@@ -9802,6 +9836,8 @@ func (ec *executionContext) fieldContext_AssessVendorPayload_vendor(_ context.Co
|
||||
return ec.fieldContext_Vendor_id(ctx, field)
|
||||
case "name":
|
||||
return ec.fieldContext_Vendor_name(ctx, field)
|
||||
case "category":
|
||||
return ec.fieldContext_Vendor_category(ctx, field)
|
||||
case "description":
|
||||
return ec.fieldContext_Vendor_description(ctx, field)
|
||||
case "organization":
|
||||
@@ -25613,6 +25649,8 @@ func (ec *executionContext) fieldContext_UpdateVendorPayload_vendor(_ context.Co
|
||||
return ec.fieldContext_Vendor_id(ctx, field)
|
||||
case "name":
|
||||
return ec.fieldContext_Vendor_name(ctx, field)
|
||||
case "category":
|
||||
return ec.fieldContext_Vendor_category(ctx, field)
|
||||
case "description":
|
||||
return ec.fieldContext_Vendor_description(ctx, field)
|
||||
case "organization":
|
||||
@@ -26396,6 +26434,50 @@ func (ec *executionContext) fieldContext_Vendor_name(_ context.Context, field gr
|
||||
return fc, nil
|
||||
}
|
||||
|
||||
func (ec *executionContext) _Vendor_category(ctx context.Context, field graphql.CollectedField, obj *types.Vendor) (ret graphql.Marshaler) {
|
||||
fc, err := ec.fieldContext_Vendor_category(ctx, field)
|
||||
if err != nil {
|
||||
return graphql.Null
|
||||
}
|
||||
ctx = graphql.WithFieldContext(ctx, fc)
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
ec.Error(ctx, ec.Recover(ctx, r))
|
||||
ret = graphql.Null
|
||||
}
|
||||
}()
|
||||
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) {
|
||||
ctx = rctx // use context from middleware stack in children
|
||||
return obj.Category, nil
|
||||
})
|
||||
if err != nil {
|
||||
ec.Error(ctx, err)
|
||||
return graphql.Null
|
||||
}
|
||||
if resTmp == nil {
|
||||
if !graphql.HasFieldError(ctx, fc) {
|
||||
ec.Errorf(ctx, "must not be null")
|
||||
}
|
||||
return graphql.Null
|
||||
}
|
||||
res := resTmp.(coredata.VendorCategory)
|
||||
fc.Result = res
|
||||
return ec.marshalNVendorCategory2githubᚗcomᚋgetproboᚋproboᚋpkgᚋcoredataᚐVendorCategory(ctx, field.Selections, res)
|
||||
}
|
||||
|
||||
func (ec *executionContext) fieldContext_Vendor_category(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) {
|
||||
fc = &graphql.FieldContext{
|
||||
Object: "Vendor",
|
||||
Field: field,
|
||||
IsMethod: false,
|
||||
IsResolver: false,
|
||||
Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) {
|
||||
return nil, errors.New("field of type VendorCategory does not have child fields")
|
||||
},
|
||||
}
|
||||
return fc, nil
|
||||
}
|
||||
|
||||
func (ec *executionContext) _Vendor_description(ctx context.Context, field graphql.CollectedField, obj *types.Vendor) (ret graphql.Marshaler) {
|
||||
fc, err := ec.fieldContext_Vendor_description(ctx, field)
|
||||
if err != nil {
|
||||
@@ -27388,6 +27470,8 @@ func (ec *executionContext) fieldContext_VendorComplianceReport_vendor(_ context
|
||||
return ec.fieldContext_Vendor_id(ctx, field)
|
||||
case "name":
|
||||
return ec.fieldContext_Vendor_name(ctx, field)
|
||||
case "category":
|
||||
return ec.fieldContext_Vendor_category(ctx, field)
|
||||
case "description":
|
||||
return ec.fieldContext_Vendor_description(ctx, field)
|
||||
case "organization":
|
||||
@@ -28141,6 +28225,8 @@ func (ec *executionContext) fieldContext_VendorEdge_node(_ context.Context, fiel
|
||||
return ec.fieldContext_Vendor_id(ctx, field)
|
||||
case "name":
|
||||
return ec.fieldContext_Vendor_name(ctx, field)
|
||||
case "category":
|
||||
return ec.fieldContext_Vendor_category(ctx, field)
|
||||
case "description":
|
||||
return ec.fieldContext_Vendor_description(ctx, field)
|
||||
case "organization":
|
||||
@@ -28273,6 +28359,8 @@ func (ec *executionContext) fieldContext_VendorRiskAssessment_vendor(_ context.C
|
||||
return ec.fieldContext_Vendor_id(ctx, field)
|
||||
case "name":
|
||||
return ec.fieldContext_Vendor_name(ctx, field)
|
||||
case "category":
|
||||
return ec.fieldContext_Vendor_category(ctx, field)
|
||||
case "description":
|
||||
return ec.fieldContext_Vendor_description(ctx, field)
|
||||
case "organization":
|
||||
@@ -31869,7 +31957,7 @@ func (ec *executionContext) unmarshalInputCreateVendorInput(ctx context.Context,
|
||||
it.PrivacyPolicyURL = data
|
||||
case "category":
|
||||
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("category"))
|
||||
data, err := ec.unmarshalOString2ᚖstring(ctx, v)
|
||||
data, err := ec.unmarshalOVendorCategory2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋcoredataᚐVendorCategory(ctx, v)
|
||||
if err != nil {
|
||||
return it, err
|
||||
}
|
||||
@@ -33706,7 +33794,7 @@ func (ec *executionContext) unmarshalInputUpdateVendorInput(ctx context.Context,
|
||||
it.HeadquarterAddress = data
|
||||
case "category":
|
||||
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("category"))
|
||||
data, err := ec.unmarshalOString2ᚖstring(ctx, v)
|
||||
data, err := ec.unmarshalOVendorCategory2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋcoredataᚐVendorCategory(ctx, v)
|
||||
if err != nil {
|
||||
return it, err
|
||||
}
|
||||
@@ -40470,6 +40558,11 @@ func (ec *executionContext) _Vendor(ctx context.Context, sel ast.SelectionSet, o
|
||||
if out.Values[i] == graphql.Null {
|
||||
atomic.AddUint32(&out.Invalids, 1)
|
||||
}
|
||||
case "category":
|
||||
out.Values[i] = ec._Vendor_category(ctx, field, obj)
|
||||
if out.Values[i] == graphql.Null {
|
||||
atomic.AddUint32(&out.Invalids, 1)
|
||||
}
|
||||
case "description":
|
||||
out.Values[i] = ec._Vendor_description(ctx, field, obj)
|
||||
case "organization":
|
||||
@@ -44539,6 +44632,74 @@ func (ec *executionContext) marshalNVendor2ᚖgithubᚗcomᚋgetproboᚋproboᚋ
|
||||
return ec._Vendor(ctx, sel, v)
|
||||
}
|
||||
|
||||
func (ec *executionContext) unmarshalNVendorCategory2githubᚗcomᚋgetproboᚋproboᚋpkgᚋcoredataᚐVendorCategory(ctx context.Context, v any) (coredata.VendorCategory, error) {
|
||||
tmp, err := graphql.UnmarshalString(v)
|
||||
res := unmarshalNVendorCategory2githubᚗcomᚋgetproboᚋproboᚋpkgᚋcoredataᚐVendorCategory[tmp]
|
||||
return res, graphql.ErrorOnPath(ctx, err)
|
||||
}
|
||||
|
||||
func (ec *executionContext) marshalNVendorCategory2githubᚗcomᚋgetproboᚋproboᚋpkgᚋcoredataᚐVendorCategory(ctx context.Context, sel ast.SelectionSet, v coredata.VendorCategory) graphql.Marshaler {
|
||||
_ = sel
|
||||
res := graphql.MarshalString(marshalNVendorCategory2githubᚗcomᚋgetproboᚋproboᚋpkgᚋcoredataᚐVendorCategory[v])
|
||||
if res == graphql.Null {
|
||||
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
|
||||
ec.Errorf(ctx, "the requested element is null which the schema does not allow")
|
||||
}
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
var (
|
||||
unmarshalNVendorCategory2githubᚗcomᚋgetproboᚋproboᚋpkgᚋcoredataᚐVendorCategory = map[string]coredata.VendorCategory{
|
||||
"ANALYTICS": coredata.VendorCategoryAnalytics,
|
||||
"CLOUD_MONITORING": coredata.VendorCategoryCloudMonitoring,
|
||||
"CLOUD_PROVIDER": coredata.VendorCategoryCloudProvider,
|
||||
"COLLABORATION": coredata.VendorCategoryCollaboration,
|
||||
"CUSTOMER_SUPPORT": coredata.VendorCategoryCustomerSupport,
|
||||
"DATA_STORAGE_AND_PROCESSING": coredata.VendorCategoryDataStorageAndProcessing,
|
||||
"DOCUMENT_MANAGEMENT": coredata.VendorCategoryDocumentManagement,
|
||||
"EMPLOYEE_MANAGEMENT": coredata.VendorCategoryEmployeeManagement,
|
||||
"ENGINEERING": coredata.VendorCategoryEngineering,
|
||||
"FINANCE": coredata.VendorCategoryFinance,
|
||||
"IDENTITY_PROVIDER": coredata.VendorCategoryIdentityProvider,
|
||||
"IT": coredata.VendorCategoryIT,
|
||||
"MARKETING": coredata.VendorCategoryMarketing,
|
||||
"OFFICE_OPERATIONS": coredata.VendorCategoryOfficeOperations,
|
||||
"OTHER": coredata.VendorCategoryOther,
|
||||
"PASSWORD_MANAGEMENT": coredata.VendorCategoryPasswordManagement,
|
||||
"PRODUCT_AND_DESIGN": coredata.VendorCategoryProductAndDesign,
|
||||
"PROFESSIONAL_SERVICES": coredata.VendorCategoryProfessionalServices,
|
||||
"RECRUITING": coredata.VendorCategoryRecruiting,
|
||||
"SALES": coredata.VendorCategorySales,
|
||||
"SECURITY": coredata.VendorCategorySecurity,
|
||||
"VERSION_CONTROL": coredata.VendorCategoryVersionControl,
|
||||
}
|
||||
marshalNVendorCategory2githubᚗcomᚋgetproboᚋproboᚋpkgᚋcoredataᚐVendorCategory = map[coredata.VendorCategory]string{
|
||||
coredata.VendorCategoryAnalytics: "ANALYTICS",
|
||||
coredata.VendorCategoryCloudMonitoring: "CLOUD_MONITORING",
|
||||
coredata.VendorCategoryCloudProvider: "CLOUD_PROVIDER",
|
||||
coredata.VendorCategoryCollaboration: "COLLABORATION",
|
||||
coredata.VendorCategoryCustomerSupport: "CUSTOMER_SUPPORT",
|
||||
coredata.VendorCategoryDataStorageAndProcessing: "DATA_STORAGE_AND_PROCESSING",
|
||||
coredata.VendorCategoryDocumentManagement: "DOCUMENT_MANAGEMENT",
|
||||
coredata.VendorCategoryEmployeeManagement: "EMPLOYEE_MANAGEMENT",
|
||||
coredata.VendorCategoryEngineering: "ENGINEERING",
|
||||
coredata.VendorCategoryFinance: "FINANCE",
|
||||
coredata.VendorCategoryIdentityProvider: "IDENTITY_PROVIDER",
|
||||
coredata.VendorCategoryIT: "IT",
|
||||
coredata.VendorCategoryMarketing: "MARKETING",
|
||||
coredata.VendorCategoryOfficeOperations: "OFFICE_OPERATIONS",
|
||||
coredata.VendorCategoryOther: "OTHER",
|
||||
coredata.VendorCategoryPasswordManagement: "PASSWORD_MANAGEMENT",
|
||||
coredata.VendorCategoryProductAndDesign: "PRODUCT_AND_DESIGN",
|
||||
coredata.VendorCategoryProfessionalServices: "PROFESSIONAL_SERVICES",
|
||||
coredata.VendorCategoryRecruiting: "RECRUITING",
|
||||
coredata.VendorCategorySales: "SALES",
|
||||
coredata.VendorCategorySecurity: "SECURITY",
|
||||
coredata.VendorCategoryVersionControl: "VERSION_CONTROL",
|
||||
}
|
||||
)
|
||||
|
||||
func (ec *executionContext) marshalNVendorComplianceReport2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐVendorComplianceReport(ctx context.Context, sel ast.SelectionSet, v *types.VendorComplianceReport) graphql.Marshaler {
|
||||
if v == nil {
|
||||
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
|
||||
@@ -45590,6 +45751,76 @@ func (ec *executionContext) unmarshalOUserOrder2ᚖgithubᚗcomᚋgetproboᚋpro
|
||||
return &res, graphql.ErrorOnPath(ctx, err)
|
||||
}
|
||||
|
||||
func (ec *executionContext) unmarshalOVendorCategory2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋcoredataᚐVendorCategory(ctx context.Context, v any) (*coredata.VendorCategory, error) {
|
||||
if v == nil {
|
||||
return nil, nil
|
||||
}
|
||||
tmp, err := graphql.UnmarshalString(v)
|
||||
res := unmarshalOVendorCategory2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋcoredataᚐVendorCategory[tmp]
|
||||
return &res, graphql.ErrorOnPath(ctx, err)
|
||||
}
|
||||
|
||||
func (ec *executionContext) marshalOVendorCategory2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋcoredataᚐVendorCategory(ctx context.Context, sel ast.SelectionSet, v *coredata.VendorCategory) graphql.Marshaler {
|
||||
if v == nil {
|
||||
return graphql.Null
|
||||
}
|
||||
_ = sel
|
||||
_ = ctx
|
||||
res := graphql.MarshalString(marshalOVendorCategory2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋcoredataᚐVendorCategory[*v])
|
||||
return res
|
||||
}
|
||||
|
||||
var (
|
||||
unmarshalOVendorCategory2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋcoredataᚐVendorCategory = map[string]coredata.VendorCategory{
|
||||
"ANALYTICS": coredata.VendorCategoryAnalytics,
|
||||
"CLOUD_MONITORING": coredata.VendorCategoryCloudMonitoring,
|
||||
"CLOUD_PROVIDER": coredata.VendorCategoryCloudProvider,
|
||||
"COLLABORATION": coredata.VendorCategoryCollaboration,
|
||||
"CUSTOMER_SUPPORT": coredata.VendorCategoryCustomerSupport,
|
||||
"DATA_STORAGE_AND_PROCESSING": coredata.VendorCategoryDataStorageAndProcessing,
|
||||
"DOCUMENT_MANAGEMENT": coredata.VendorCategoryDocumentManagement,
|
||||
"EMPLOYEE_MANAGEMENT": coredata.VendorCategoryEmployeeManagement,
|
||||
"ENGINEERING": coredata.VendorCategoryEngineering,
|
||||
"FINANCE": coredata.VendorCategoryFinance,
|
||||
"IDENTITY_PROVIDER": coredata.VendorCategoryIdentityProvider,
|
||||
"IT": coredata.VendorCategoryIT,
|
||||
"MARKETING": coredata.VendorCategoryMarketing,
|
||||
"OFFICE_OPERATIONS": coredata.VendorCategoryOfficeOperations,
|
||||
"OTHER": coredata.VendorCategoryOther,
|
||||
"PASSWORD_MANAGEMENT": coredata.VendorCategoryPasswordManagement,
|
||||
"PRODUCT_AND_DESIGN": coredata.VendorCategoryProductAndDesign,
|
||||
"PROFESSIONAL_SERVICES": coredata.VendorCategoryProfessionalServices,
|
||||
"RECRUITING": coredata.VendorCategoryRecruiting,
|
||||
"SALES": coredata.VendorCategorySales,
|
||||
"SECURITY": coredata.VendorCategorySecurity,
|
||||
"VERSION_CONTROL": coredata.VendorCategoryVersionControl,
|
||||
}
|
||||
marshalOVendorCategory2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋcoredataᚐVendorCategory = map[coredata.VendorCategory]string{
|
||||
coredata.VendorCategoryAnalytics: "ANALYTICS",
|
||||
coredata.VendorCategoryCloudMonitoring: "CLOUD_MONITORING",
|
||||
coredata.VendorCategoryCloudProvider: "CLOUD_PROVIDER",
|
||||
coredata.VendorCategoryCollaboration: "COLLABORATION",
|
||||
coredata.VendorCategoryCustomerSupport: "CUSTOMER_SUPPORT",
|
||||
coredata.VendorCategoryDataStorageAndProcessing: "DATA_STORAGE_AND_PROCESSING",
|
||||
coredata.VendorCategoryDocumentManagement: "DOCUMENT_MANAGEMENT",
|
||||
coredata.VendorCategoryEmployeeManagement: "EMPLOYEE_MANAGEMENT",
|
||||
coredata.VendorCategoryEngineering: "ENGINEERING",
|
||||
coredata.VendorCategoryFinance: "FINANCE",
|
||||
coredata.VendorCategoryIdentityProvider: "IDENTITY_PROVIDER",
|
||||
coredata.VendorCategoryIT: "IT",
|
||||
coredata.VendorCategoryMarketing: "MARKETING",
|
||||
coredata.VendorCategoryOfficeOperations: "OFFICE_OPERATIONS",
|
||||
coredata.VendorCategoryOther: "OTHER",
|
||||
coredata.VendorCategoryPasswordManagement: "PASSWORD_MANAGEMENT",
|
||||
coredata.VendorCategoryProductAndDesign: "PRODUCT_AND_DESIGN",
|
||||
coredata.VendorCategoryProfessionalServices: "PROFESSIONAL_SERVICES",
|
||||
coredata.VendorCategoryRecruiting: "RECRUITING",
|
||||
coredata.VendorCategorySales: "SALES",
|
||||
coredata.VendorCategorySecurity: "SECURITY",
|
||||
coredata.VendorCategoryVersionControl: "VERSION_CONTROL",
|
||||
}
|
||||
)
|
||||
|
||||
func (ec *executionContext) unmarshalOVendorComplianceReportOrder2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐVendorComplianceReportOrderBy(ctx context.Context, v any) (*types.VendorComplianceReportOrderBy, error) {
|
||||
if v == nil {
|
||||
return nil, nil
|
||||
|
||||
@@ -246,23 +246,23 @@ type CreateTaskPayload struct {
|
||||
}
|
||||
|
||||
type CreateVendorInput struct {
|
||||
OrganizationID gid.GID `json:"organizationId"`
|
||||
Name string `json:"name"`
|
||||
Description *string `json:"description,omitempty"`
|
||||
HeadquarterAddress *string `json:"headquarterAddress,omitempty"`
|
||||
LegalName *string `json:"legalName,omitempty"`
|
||||
WebsiteURL *string `json:"websiteUrl,omitempty"`
|
||||
PrivacyPolicyURL *string `json:"privacyPolicyUrl,omitempty"`
|
||||
Category *string `json:"category,omitempty"`
|
||||
ServiceLevelAgreementURL *string `json:"serviceLevelAgreementUrl,omitempty"`
|
||||
DataProcessingAgreementURL *string `json:"dataProcessingAgreementUrl,omitempty"`
|
||||
Certifications []string `json:"certifications,omitempty"`
|
||||
SecurityPageURL *string `json:"securityPageUrl,omitempty"`
|
||||
TrustPageURL *string `json:"trustPageUrl,omitempty"`
|
||||
StatusPageURL *string `json:"statusPageUrl,omitempty"`
|
||||
TermsOfServiceURL *string `json:"termsOfServiceUrl,omitempty"`
|
||||
BusinessOwnerID *gid.GID `json:"businessOwnerId,omitempty"`
|
||||
SecurityOwnerID *gid.GID `json:"securityOwnerId,omitempty"`
|
||||
OrganizationID gid.GID `json:"organizationId"`
|
||||
Name string `json:"name"`
|
||||
Description *string `json:"description,omitempty"`
|
||||
HeadquarterAddress *string `json:"headquarterAddress,omitempty"`
|
||||
LegalName *string `json:"legalName,omitempty"`
|
||||
WebsiteURL *string `json:"websiteUrl,omitempty"`
|
||||
PrivacyPolicyURL *string `json:"privacyPolicyUrl,omitempty"`
|
||||
Category *coredata.VendorCategory `json:"category,omitempty"`
|
||||
ServiceLevelAgreementURL *string `json:"serviceLevelAgreementUrl,omitempty"`
|
||||
DataProcessingAgreementURL *string `json:"dataProcessingAgreementUrl,omitempty"`
|
||||
Certifications []string `json:"certifications,omitempty"`
|
||||
SecurityPageURL *string `json:"securityPageUrl,omitempty"`
|
||||
TrustPageURL *string `json:"trustPageUrl,omitempty"`
|
||||
StatusPageURL *string `json:"statusPageUrl,omitempty"`
|
||||
TermsOfServiceURL *string `json:"termsOfServiceUrl,omitempty"`
|
||||
BusinessOwnerID *gid.GID `json:"businessOwnerId,omitempty"`
|
||||
SecurityOwnerID *gid.GID `json:"securityOwnerId,omitempty"`
|
||||
}
|
||||
|
||||
type CreateVendorPayload struct {
|
||||
@@ -909,23 +909,23 @@ type UpdateTaskPayload struct {
|
||||
}
|
||||
|
||||
type UpdateVendorInput struct {
|
||||
ID gid.GID `json:"id"`
|
||||
Name *string `json:"name,omitempty"`
|
||||
Description *string `json:"description,omitempty"`
|
||||
StatusPageURL *string `json:"statusPageUrl,omitempty"`
|
||||
TermsOfServiceURL *string `json:"termsOfServiceUrl,omitempty"`
|
||||
PrivacyPolicyURL *string `json:"privacyPolicyUrl,omitempty"`
|
||||
ServiceLevelAgreementURL *string `json:"serviceLevelAgreementUrl,omitempty"`
|
||||
DataProcessingAgreementURL *string `json:"dataProcessingAgreementUrl,omitempty"`
|
||||
WebsiteURL *string `json:"websiteUrl,omitempty"`
|
||||
LegalName *string `json:"legalName,omitempty"`
|
||||
HeadquarterAddress *string `json:"headquarterAddress,omitempty"`
|
||||
Category *string `json:"category,omitempty"`
|
||||
Certifications []string `json:"certifications,omitempty"`
|
||||
SecurityPageURL *string `json:"securityPageUrl,omitempty"`
|
||||
TrustPageURL *string `json:"trustPageUrl,omitempty"`
|
||||
BusinessOwnerID *gid.GID `json:"businessOwnerId,omitempty"`
|
||||
SecurityOwnerID *gid.GID `json:"securityOwnerId,omitempty"`
|
||||
ID gid.GID `json:"id"`
|
||||
Name *string `json:"name,omitempty"`
|
||||
Description *string `json:"description,omitempty"`
|
||||
StatusPageURL *string `json:"statusPageUrl,omitempty"`
|
||||
TermsOfServiceURL *string `json:"termsOfServiceUrl,omitempty"`
|
||||
PrivacyPolicyURL *string `json:"privacyPolicyUrl,omitempty"`
|
||||
ServiceLevelAgreementURL *string `json:"serviceLevelAgreementUrl,omitempty"`
|
||||
DataProcessingAgreementURL *string `json:"dataProcessingAgreementUrl,omitempty"`
|
||||
WebsiteURL *string `json:"websiteUrl,omitempty"`
|
||||
LegalName *string `json:"legalName,omitempty"`
|
||||
HeadquarterAddress *string `json:"headquarterAddress,omitempty"`
|
||||
Category *coredata.VendorCategory `json:"category,omitempty"`
|
||||
Certifications []string `json:"certifications,omitempty"`
|
||||
SecurityPageURL *string `json:"securityPageUrl,omitempty"`
|
||||
TrustPageURL *string `json:"trustPageUrl,omitempty"`
|
||||
BusinessOwnerID *gid.GID `json:"businessOwnerId,omitempty"`
|
||||
SecurityOwnerID *gid.GID `json:"securityOwnerId,omitempty"`
|
||||
}
|
||||
|
||||
type UpdateVendorPayload struct {
|
||||
@@ -987,6 +987,7 @@ type UserEdge struct {
|
||||
type Vendor struct {
|
||||
ID gid.GID `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Category coredata.VendorCategory `json:"category"`
|
||||
Description *string `json:"description,omitempty"`
|
||||
Organization *Organization `json:"organization"`
|
||||
ComplianceReports *VendorComplianceReportConnection `json:"complianceReports"`
|
||||
|
||||
@@ -59,6 +59,7 @@ func NewVendor(v *coredata.Vendor) *Vendor {
|
||||
HeadquarterAddress: v.HeadquarterAddress,
|
||||
LegalName: v.LegalName,
|
||||
WebsiteURL: v.WebsiteURL,
|
||||
Category: v.Category,
|
||||
UpdatedAt: v.UpdatedAt,
|
||||
CreatedAt: v.CreatedAt,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user