diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b512c09 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/.graphql-schema-linterrc b/.graphql-schema-linterrc new file mode 100644 index 0000000..e85e0c1 --- /dev/null +++ b/.graphql-schema-linterrc @@ -0,0 +1,16 @@ +{ + "rules": [ + "descriptions-are-capitalized", + "enum-values-all-caps", + "fields-are-camel-cased", + "fields-have-descriptions", + "types-have-descriptions", + "defined-types-are-used", + "deprecations-have-a-reason", + "input-object-fields-sorted-alphabetically", + "interface-fields-sorted-alphabetically", + "type-fields-sorted-alphabetically", + "types-are-capitalized", + "enum-values-sorted-alphabetically" + ] +} \ No newline at end of file diff --git a/README.md b/README.md index f5435d4..e8ee10c 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,23 @@ -# action-graphql-linter -Custom GitHub Action for linting GraphQL +# GraphQL Linter Action + +This action lints the GraphQL Schemas sent in the input. + +## Inputs + +## `graphql-schemas` + +**Required** GraphQL Schemas to lint. + +## Example usage + +```yaml +uses: actions/hello-world-javascript-action@v1.1 +with: + graphql-schemas: 'app/graphql.schema' +``` + +```yaml +uses: actions/hello-world-javascript-action@v1.1 +with: + graphql-schemas: 'graphql1.schema,graphql2.schema' +``` diff --git a/action.yml b/action.yml new file mode 100644 index 0000000..e2e5a43 --- /dev/null +++ b/action.yml @@ -0,0 +1,9 @@ +name: 'GraphQL Linter' +description: 'Lints the given GraphQL schemas' +inputs: + files: + description: 'Files to lint' + required: true +runs: + using: 'node16' + main: 'index.js' \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 0000000..0230573 --- /dev/null +++ b/index.js @@ -0,0 +1,34 @@ +const core = require('@actions/core'); +const github = require('@actions/github'); +const { runner } = require('graphql-schema-linter'); + +function lintSchemas(schemas) { + const args = [null, __dirname, ...schemas]; + console.log("Linting schemas: ", schemas.join()) + return runner.run(process.stdout, process.stdin, process.stderr, args) +} +async function main() { + const payload = JSON.stringify(github.context.payload, undefined, 2) + console.log(`The event payload: ${payload}`); + try { + const schemaFiles = core.getInput('files').split(','); + const combined = core.getInput('combined'); + + if (combined) { + const exitCode = await lintSchemas(schemaFiles); + if (exitCode !== 0) { + throw new Error(`Invalid Schemas ${schemas}`); + } + } else { + for (const schema of schemaFiles) { + const exitCode = await lintSchemas([schema]); + if (exitCode !== 0) { + throw new Error(`Invalid Schema ${schema}`); + } + } + } + } catch (error) { + core.setFailed(error.message); + } +} +main(); diff --git a/package.json b/package.json new file mode 100644 index 0000000..c5136e4 --- /dev/null +++ b/package.json @@ -0,0 +1,12 @@ +{ + "name": "playground", + "version": "1.0.0", + "main": "index.js", + "license": "MIT", + "dependencies": { + "@actions/core": "^1.9.0", + "@actions/github": "^5.0.3", + "graphql": "^16.5.0", + "graphql-schema-linter": "^3.0.1" + } +} diff --git a/schema.graphql b/schema.graphql new file mode 100644 index 0000000..c6d870f --- /dev/null +++ b/schema.graphql @@ -0,0 +1,4094 @@ +schema { + query: Query + mutation: Mutation +} + +type AccountTransfers { + count: Int! + name: String! +} + +type AccountTransfersReportOutput { + entities: [EntityAccountTransfers!]! +} + +input AdditionalInsuredInput { + firstName: String! + lastName: String! +} + +"""Output the names of additional insured persons""" +type AdditionalInsuredOutput { + firstName: String! + lastName: String! +} + +type Address implements AddressInterface { + active: Boolean + city: String + default: Boolean + id: ID + postalCode: String + state: String + street: String + unit: String +} + +enum AddressClassification { + COMMERCIAL + MILITARY + RESIDENTIAL + UNKNOWN +} + +enum AddressHomeSize { + four_bed_plus + one_bed + studio + three_bed + three_bed_plus @deprecated(reason: "added four-bed-plus option, changing to three_bed explicitly") + two_bed +} + +input AddressInput { + city: String! + homeSize: AddressHomeSize + postalCode: String! + state: String! + street: String! + unit: String +} + +interface AddressInterface { + city: String + postalCode: String + state: String + street: String + unit: String +} + +enum AddressOwnership { + OWN + RENT +} + +enum AddressStatus { + APT_NEEDED + INVALID + VALID +} + +input AnswerInviteInput { + token: String! +} + +input ApproveItemInput { + itemId: Int! + utilityKind: UtilityKinds +} + +type ApproveItemOutput { + """The item that was approved""" + item: Item! +} + +type AssignableRole { + helpText: String + id: Int + name: String +} + +type AssignableRolesOutput { + assignableRoles: [AssignableRole!]! +} + +"""Assurant coverage details""" +type AssurantCoverageDetails { + liabilityAmount: String + personalPropertyAmount: String +} + +"""Output from checking Assurant product eligibility""" +type AssurantEligibleOutput { + eligible: Boolean! + ineligibleReason: String +} + +"""Assurant premium details""" +type AssurantPremiumDetails { + amount: String +} + +"""Assurant transaction details""" +type AssurantTransactionDetails { + policyId: String + referralId: String + responseMessage: String +} + +"""moveId or address required with address taking precedence.""" +input AvailableOffersInput { + address: AddressInput + """ + 'aggressive' (default) - fetch provider offers from cache less than a day old + 'conservative' - fetch provider offers from cache that is not expired + 'none' - always fetch fresh offers from provider service + """ + cachingStrategy: ServiceabilityCachingStrategy + moveId: ID + providerCodes: [String!] + """Associate the original request when selecting suggested addresses""" + requestId: ID + source: String + suggestedAddressSelections: [ServiceabilitySuggestedAddressSelections!] +} + +"""moveId or address required with address taking precedence.""" +input AvailableProductsInput { + address: AddressInput + """ + 'aggressive' (default) - fetch provider offers from cache less than a day old + 'conservative' - fetch provider offers from cache that is not expired + 'none' - always fetch fresh offers from provider service + """ + cachingStrategy: ServiceabilityCachingStrategy + moveId: ID + providerCodes: [String!] + """Associate the original request when selecting suggested addresses""" + requestId: ID + """Versions of the shop flow schema to retrieve""" + shopFlowVersions: [ID] + suggestedAddressSelections: [ServiceabilitySuggestedAddressSelections!] +} + +type AvailableUtilityMarket { + availablePlans: [AvailableUtilityPlan!]! + enabled: Boolean! + kind: String! + subscriptions: [UtilitySubscription!]! +} + +type AvailableUtilityPlan { + plan: UtilityPlan! + recommended: Boolean! + recommendedReason: String +} + +type AvailableUtilityPlansOutput { + electric: [AvailableUtilityPlan!] +} + +type AvailableUtilityProvider { + businessPhone: String + enabled: Boolean + id: ID! + kind: String + localPhone: String + logo: String @deprecated(reason: "Use logoImage pattern") + logoImage: Image + matchLevel: UtilityMatchLevel + name: String + website: String +} + +input AvailableUtilityProviderAddress { + city: String + id: ID + postalCode: String + state: String + street: String + unit: String +} + +input AvailableUtilityProviderFilter { + enabled: Boolean + matchLevel: UtilityMatchLevel +} + +input AvailableUtilityProviderInput { + address: AvailableUtilityProviderAddress + divisionId: ID + filter: AvailableUtilityProviderFilter +} + +type AvailableUtilityProvidersOutput { + utilityMarkets: [AvailableUtilityMarket] + utilityProviders: [AvailableUtilityProvider] + utilityProvidersEdited: Boolean + utilityServices: AvailableUtilityServices +} + +type AvailableUtilityService { + applicable: Boolean! + providersFound: Boolean! +} + +type AvailableUtilityServices { + electric: AvailableUtilityService! + gas: AvailableUtilityService! + water: AvailableUtilityService! +} + +""" +Represents non-fractional signed whole numeric values. Since the value may +exceed the size of a 32-bit integer, it's encoded as a string. +""" +scalar BigInt + +input BundledOfferInput { + address: AddressInput + products: JSON! + requestId: String +} + +type BundledOfferOutput { + channelLineups: [ServiceabilityTvChannelLineup] + offer: ServiceabilityOfferInterface + offers: [ServiceabilityOfferInterface] + providerSummaries: [ServiceabilityProviderSummaries] + request: ServiceabilityRequest +} + +input CancelInviteInput { + token: String! +} + +enum CcpaDeleteUserComplianceAction { + deactivate + delete +} + +type CcpaDeleteUserEligibility { + complianceAction: CcpaDeleteUserComplianceAction + exceptionActions: [CcpaDeleteUserExceptionAction] + invites: [Invite] + user: User +} + +enum CcpaDeleteUserExceptionAction { + account_update + forward_mail + tv_internet_order +} + +type CcpaDeleteUserOutput { + complianceAction: CcpaDeleteUserComplianceAction + exceptionActions: [CcpaDeleteUserExceptionAction] +} + +input ChangePasswordInput { + newPassword: String! + pwChangeToken: String! +} + +type ChangePasswordOutput { + """the status message of the change""" + status: String +} + +type ClaimedPromotion { + claimedAt: DateTime + claimedFor: EntityInterface + confirmationNumber: String + contactPreference: ContactPreference + id: ID! + phone: String + promotion: Promotion + redemption: ClaimedPromotionRedemption + source: PromotionPlacement +} + +type ClaimedPromotionCode { + """Optional format if code type requires it""" + format: String + type: ClaimedPromotionCodeType + """Calculated or cached promo code used for the redemption""" + value: String +} + +enum ClaimedPromotionCodeType { + barcode + confirmation_code + none + promo_code +} + +type ClaimedPromotionRedemption { + code: ClaimedPromotionCode + """Matches promotion claim method""" + methods: [PromotionRedemptionMethod] +} + +type ClaimedPromotions { + count: Int! + name: String! +} + +type ClaimedPromotionsOutput { + claimedPromotions: [ClaimedPromotion] +} + +type ClaimedPromotionsReportOutput { + entities: [EntityClaimedPromotions!]! +} + +input ClaimPromotionInput { + contactPreference: ContactPreferenceInput + entityId: ID + moveExternalId: ID + moveId: ID + phone: String + promotionCode: ID + promotionId: ID + source: PromotionPlacement +} + +type ClaimPromotionOutput { + claimedPromotion: ClaimedPromotion +} + +input ClaimPromotionPublicInput { + promotionCode: ID + promotionId: ID + source: PromotionPlacement + userUuid: ID +} + +type ClaimPromotionPublicOutput { + claimedPromotion: ClaimedPromotion +} + +"""Output for getting list of companies.""" +type CompaniesOutput { + companies: [Company] +} + +type Company implements EntityInterface { + categories: [String] + description: String + displayName: String + email: String + externalIds: [ID] + id: ID! + logo: Image + """Metadata (predefined) for a Company.""" + metadata: CompanyMetadata @deprecated(reason: "Moving fields to top level of Company") + name: String + parent: Entity + phone: String + shortDescription: String + website: String +} + +type CompanyEngagementReport { + averageDollarsSaved: Float + averageHoursSaved: Float + averageUniqueStepWeight: Int! + averageUniqueSteps: Float + claimedCount: Int! + id: ID! + invitesClickedCount: Int! + invitesOpenedCount: Int! + invitesSentCount: Int! + parentId: ID + stepCounts: [SimpleCount!]! + totalDollarsSaved: Float + totalHoursSaved: Float + totalPossibleDollarsSaved: Float + totalPossibleHoursSaved: Float +} + +type CompanyMetadata { + description: String @deprecated(reason: "Moving to top level of Company") + displayName: String @deprecated(reason: "Moving to top level of Company") + shortDescription: String @deprecated(reason: "Moving to top level of Company") +} + +input CompanyMetadataInput { + description: String + displayName: String + shortDescription: String +} + +type CompanyReport { + brandingCount: Int! + claimedCount: Int! + id: ID! + noBrandingCount: Int! + optInCount: Int! + optOutCount: Int! + parentId: ID + totalCount: Int! +} + +type ConciergeAvailability { + agentId: String! + agentImage: Image! + agentName: String! + creatorId: String! + inboxId: String! + testAgent: Boolean! +} + +input ConciergeAvailabilityInput { + moveId: ID! + taskListSelections: [String]! +} + +type ConciergeAvailabilityOutput { + conciergeAvailability: ConciergeAvailability + conciergeEligibility: ConciergeEligibility + conciergeEligible: Boolean! +} + +type ConciergeEligibility { + eligibleFor: [String]! +} + +type ContactPreference { + timeOfDay: String + type: ContactPreferenceType +} + +input ContactPreferenceInput { + timeOfDay: String + type: ContactPreferenceType +} + +enum ContactPreferenceType { + EMAIL + PHONE +} + +"""Output from creating POL policy with Assurant""" +type CreateAssurantPolPolicyOutput { + additionalInsured: [AdditionalInsuredOutput!] + address: Address! + coverageDetails: AssurantCoverageDetails! + email: String! + firstName: String! + item: Item! + lastName: String! + policyEffectiveDate: Date! + premiumDetails: AssurantPremiumDetails! + transactionDetails: AssurantTransactionDetails! +} + +input CreateItemInput { + kind: String! + metadata: JSON + status: Statuses + """Only allowed for admin users.""" + userUuid: ID +} + +type CreateItemOutput { + """The ID of the new item""" + id: Int! + """The metadata of the item.""" + metadata: JSON + """The status of the item.""" + status: String! +} + +input CreatePublicSessionInput { + email: String + firstName: String + lastName: String + phoneNumber: String + source: String +} + +type CreatePublicSessionOutput { + accessToken: String! + client: String! + email: String + expiry: Int + firstName: String + lastName: String + phoneNumber: String + source: String + uid: String! +} + +interface DataViewInterface { + pagination: PaginationOutput +} + +scalar Date + +scalar DateTime + +type DeleteEntityItemDefinitionOutput { + entityItemDefinition: EntityItemDefinition +} + +type DeleteLocationOutput { + location: Location +} + +type DeleteMoverDocumentOutput { + """Whether or not the document was deleted.""" + deleted: Boolean! +} + +type DeletePromotionOutput { + promotion: Promotion +} + +type DeleteUtilityProviderPostalCodeOutput { + id: ID! +} + +type DenialReason { + complianceReason: String + serviceReason: String +} + +type DeregulatedElectricEligibility { + eligible: Boolean! +} + +enum Direction { + move_in + move_out + transfer + unknown +} + +type Division { + address: Address + assurantEnabled: Boolean + createdAt: DateTime! + id: ID! + name: String + rentersInsuranceConfig: RentersInsuranceConfig + residentOnboardingConfig: ResidentOnboardingConfig + residentOnboardingEnabled: Boolean + updatedAt: DateTime + utilitiesConfig: DivisionUtilitiesConfig + writebackEntityConfigurations: JSON +} + +type DivisionsOutput { + divisions: [Division!] +} + +type DivisionUtilitiesConfig { + electric: Boolean + electricProofFormat: DivisionUtilitiesConfigProofFormat + gas: Boolean + gasProofFormat: DivisionUtilitiesConfigProofFormat + water: Boolean + waterProofFormat: DivisionUtilitiesConfigProofFormat +} + +input DivisionUtilitiesConfigInput { + electric: Boolean! + electricProofFormat: DivisionUtilitiesConfigProofFormat + gas: Boolean! + gasProofFormat: DivisionUtilitiesConfigProofFormat + water: Boolean! + waterProofFormat: DivisionUtilitiesConfigProofFormat +} + +enum DivisionUtilitiesConfigProofFormat { + """Accept an account number as a string.""" + account_number + """Accept uploaded documents such as PDF or JPG.""" + document + """Legacy value, identical to account_number""" + number @deprecated(reason: "Replaced by account_number") +} + +input DivisionUtilityProviderInput { + id: ID! + kind: UtilityKinds! +} + +type DollyEligibility { + denialReason: [DenialReason!]! + eligible: Boolean! +} + +input DollyEligibilityInput { + """homeSize is ignored.""" + addresses: [AddressInput!]! + """e.g. ["2022-03-01"]""" + moveDateRange: [Date!] + moveSize: DollyMoveSize +} + +type DollyEligibilityOutput { + """Eligibility result per provided address. These should match the corresponding index of the input addresses.""" + addressEligibility: [DollyEligibility!]! + denialReason: [DenialReason!]! + eligible: Boolean! +} + +input DollyMoveInput { + fromAddress: AddressInput! + homeSize: AddressHomeSize @deprecated(reason: "Moving to AddressInput") + moveDate: Date! + """ + An ID value that may contain either a moveId, itemId, or a combination of both. The following format is assumed: + - moveId only: '${moveId}' ('${moveId}.' works too) + - itemId only: '.${itemId}' + - moveId+itemId: '${moveId}.${itemId}' + """ + moveId: ID! + toAddress: AddressInput! +} + +type DollyMoveOutput { + availableOnMoveDate: Boolean + bookedTime: String + eligible: Boolean + status: String + statusDate: String +} + +"""Move size values supported by dolly. This does not necessarily match AddressHomeSize.""" +enum DollyMoveSize { + one_bed + studio + three_bed + two_bed +} + +input DownloadMoverDocumentInput { + documentId: String! + itemId: Int! + utilityKind: UtilityKinds +} + +type DownloadMoverDocumentOutput { + """Presigned URL to the Document""" + documentUrl: String! +} + +type ElectricPlanPricing { + kwh1000: Float + kwh2000: Float + kwh500: Float +} + +type EligiblePromotion { + promotion: Promotion + """List of locations where the promotions is redeemable""" + validFor: [EntityInterface] +} + +type EligiblePromotionsOutput { + eligiblePromotions: [EligiblePromotion] +} + +input EligiblePromotionsUserInput { + fromAddress: AddressInput! + ownership: AddressOwnership + promotionClaimCount: Int + promotionLocationClaimCount: Int + toAddress: AddressInput! +} + +input EmailAvailableInput { + email: String! + inviteToken: String +} + +type EmailAvailableOutput { + available: Boolean +} + +type EngagementReportOutput { + entities: [CompanyEngagementReport!]! + totalStepCount: Int! +} + +input EnrollUtilitySubscriptionInput { + acceptedTOS: Boolean! + dateOfBirth: String! + email: String! + firstName: String! + lastName: String! + mailingAddress: AddressInput + paperlessBilling: Boolean + phone: String! + planId: String! + preferredLanguage: String + previousAddress: AddressInput! + requiredPlanEnrollmentFields: JSON + serviceAddress: AddressInput! + serviceStartDate: DateTime! + ssn: String! +} + +type EnrollUtilitySubscriptionOutput { + details: UtilitySubscriptionDetails + partner: String + partnerOrderId: String + plan: UtilityPlan + provider: String + providerOrderId: String + status: String + utilityKind: String +} + +type Entity implements EntityInterface { + featuredHomeServicesProviders: [EntityHomeServicesProvider] + id: ID! + name: String +} + +type EntityAccountTransfers { + alumniAccounts: [AccountTransfers!]! + id: ID! + loyaltyAccounts: [AccountTransfers!]! + parentId: ID + subscriptionAccounts: [AccountTransfers!]! +} + +type EntityBranding { + displayName: String + email: String + favicon: Image + kind: String + logo: Image + logoId: String + name: String + phone: String + poweredBy: PoweredByBranding + showBranding: Boolean + socialBranding: SocialBranding + teamName: String + title: String + type: EntityType! + website: String +} + +type EntityClaimedPromotions { + claimedPromotions: [ClaimedPromotions!]! + id: ID! + parentId: ID +} + +type EntityHomeServicesProvider { + entity: Entity + exclusive: Boolean + homeServicesProvider: HomeServicesProvider +} + +interface EntityInterface { + id: ID! + name: String +} + +type EntityItemDefinition { + enabled: Boolean! + entityId: ID! + id: ID! + itemDefinitionId: ID! + kind: EntityItemDefinitionKind! + reason: String +} + +enum EntityItemDefinitionKind { + exclude + include +} + +type EntityItemDefinitionOutput { + entityItemDefinition: EntityItemDefinition +} + +type EntityItemDefinitionsDataView implements DataViewInterface { + pagination: PaginationOutput +} + +type EntityItemDefinitionsOutput { + dataView: EntityItemDefinitionsDataView + entityItemDefinitions: [EntityItemDefinition]! +} + +type EntityMovesBreakdown { + direction: [MovesBreakdown!]! + id: ID! + moveOutDistance: [MovesBreakdown!]! + moveOutOwnership: [MovesBreakdown!]! + parentId: ID + zipByDirection: [MovesBreakdownByDirection!]! +} + +type EntityReport { + id: ID! + parentId: ID + verticals: VerticalsReport! +} + +enum EntityType { + COBRANDED_AGENT + COMPANY + DIVISION + PROFESSIONAL +} + +input EvaluateMoveIqEligibilityInput { + fromAddress: MoveIqPresenceAddressInput + moveId: ID + toAddress: MoveIqPresenceAddressInput +} + +type EvaluateMoveIqEligibilityOutput { + eligible: Boolean + moveType: MoveIqEligibleMoveType +} + +type FeatureEnabledOutput { + datafile: String + datafileRevision: String + featureExperiment: FeatureExperimentOutput + logs: [String!] + result: Boolean +} + +type FeatureExperimentOutput { + name: String + variationKey: String +} + +type FeatureVariablesOutput { + datafile: String + datafileRevision: String + logs: [String!] + variables: JSON +} + +enum FutureResidentsSortDirection { + """ascending - default""" + ASC + """descending""" + DESC +} + +enum FutureResidentsSorting { + DATE + NAME +} + +input GenerateHomeServicesOffersInput { + moveId: ID! +} + +type GenerateHomeServicesOffersOutput { + accepted: Boolean! +} + +input GenerateMoveIqOffersInput { + companyId: ID + moveId: ID + weight: Int +} + +type GenerateMoveIqOffersOutput { + averagePrice: Float + averagePriceWithPacking: Float + averageValueScore: Int + id: ID! + offerGroups: [MoveIqOfferGroup] + unqualifiedCompanies: [MoveIqCompany] +} + +type Home { + address: Address! + default: Boolean! + homeSize: AddressHomeSize + id: ID! + ownership: AddressOwnership + user: User! +} + +enum HomeSecurityPackage { + premium + professional + standard +} + +type HomeSecurityReservation { + confirmationNumber: String + createdAt: DateTime + id: ID! + moveId: ID + package: HomeSecurityPackage + status: HomeSecurityStatus + updatedAt: DateTime +} + +enum HomeSecurityStatus { + completed + reserved + started +} + +input HomeServiceReservationUserInput { + email: String! + firstName: String! + lastName: String! + phone: String! +} + +type HomeServicesAddress implements AddressInterface { + city: String + postalCode: String + state: String + street: String + unit: String +} + +input HomeServicesAddressInput { + city: String! + postalCode: String! + state: String! + street: String! + unit: String +} + +type HomeServicesBridgevineMetadata { + sessionId: String! + transactionId: String! +} + +input HomeServicesBridgevineMetadataInput { + sessionId: String! + transactionId: String! +} + +enum HomeServicesCallCenter { + bridgevine + kandela +} + +input HomeServicesCallCenterInput { + name: HomeServicesCallCenter! + outbound: Boolean +} + +enum HomeServicesFlowPreference { + EXCLUSIVE + FEATURED + SHOP + TRANSFER +} + +type HomeServicesMetadata { + bridgevine: HomeServicesBridgevineMetadata + checkoutEnabled: Boolean +} + +input HomeServicesMetadataInput { + bridgevine: HomeServicesBridgevineMetadataInput + checkoutEnabled: Boolean +} + +type HomeServicesOffer { + code: String! + disclaimer: String + extendedHighlights: [String] + highlights: [String] + id: ID! + introductoryPrice: HomeServicesOfferIntroductoryPrice + metadata: JSON + name: String! + price: Float + promo: HomeServicesOfferPromo + promotions: [HomeServicesOfferPromotion] + provider: HomeServicesProvider! + proximityDisclaimer: ServiceabilityProximityDisclaimer + services: HomeServicesOfferServices! + tags: [String] + term: String! + valueScore: Int + valueTier: OfferValueTier +} + +input HomeServicesOfferInput { + code: String! + disclaimer: String + extendedHighlights: [String] + highlights: [String] + id: ID! + introductoryPrice: HomeServicesOfferIntroductoryPriceInput + metadata: JSON + name: String! + price: Float + promo: HomeServicesOfferPromoInput + promotions: [HomeServicesOfferPromotionInput] + provider: HomeServicesProviderInput! + proximityDisclaimer: ProximityDisclaimerInput + services: HomeServicesOfferServicesInput! + tags: [String] + term: String! + valueScore: Int + valueTier: OfferValueTier +} + +type HomeServicesOfferIntroductoryPrice { + duration: Int + price: Float + savingsPercent: Int + term: String +} + +input HomeServicesOfferIntroductoryPriceInput { + duration: Int + price: Float + savingsPercent: Int + term: String +} + +type HomeServicesOfferPromo { + duration: Int + price: Float + savingsPercent: Int + term: String +} + +input HomeServicesOfferPromoInput { + duration: Int + price: Float + savingsPercent: Int + term: String +} + +type HomeServicesOfferPromotion { + disclaimer: String + promotion: String +} + +input HomeServicesOfferPromotionInput { + disclaimer: String + promotion: String +} + +type HomeServicesOfferServices { + internet: InternetService + phone: PhoneService + tv: TvService +} + +input HomeServicesOfferServicesInput { + internet: InternetServiceInput + phone: PhoneServiceInput + tv: TvServiceInput +} + +type HomeServicesOffersOutput { + availableProviders: [HomeServicesProvider]! + metadata: HomeServicesMetadata + notAvailableProviders: [HomeServicesProvider]! + offers: [HomeServicesOffer]! +} + +type HomeServicesOrder { + """Stringified JSON for contact info; have fields such as phoneNumber, firstName, lastName and email""" + contactInformation: JSON + """Stringified JSON for credit check; have fields such as ssn, dateOfBirth, driverLicenseNumber, state and expirationDate""" + creditCheck: JSON + id: ID! + """Stringified JSON for installation info; have fields such as selfInstall, oneTimePayment, shippingAddress, date, and time""" + installation: JSON + moveId: ID + offer: HomeServicesOffer! + """Stringified JSON for opt ins info; have fields such as infoOptIn, contactOptIn and termsAndConditionsOptIn""" + optIns: JSON + """payment infos""" + payment: JSON! + """itemized prices that can be used to generate receipt""" + price: JSON! + """Stringified JSON for promotion options; have fields such as hasDirecTV, direcTVAccountNumber, purchaseUnlimitedData""" + promotionOptions: JSON + reservationCode: String! + """Stringified JSON for security info; have fields such as question, response and passcode""" + security: JSON + """source of the order""" + source: String +} + +type HomeServicesOrderOutput { + order: HomeServicesOrder +} + +type HomeServicesPreferences { + flow: HomeServicesFlowPreference + internet: InternetPreference! + phone: PhonePreference! + propertyConfig: HomeServicesPropertyConfig + tv: TvPreference! + updaterPropertyConfig: HomeServicesPropertyConfig +} + +input HomeServicesPreferencesInput { + flow: HomeServicesFlowPreference + internet: InternetPreferenceInput! + phone: PhonePreferenceInput! + propertyConfig: HomeServicesPropertyConfigInput + tv: TvPreferenceInput! + updaterPropertyConfig: HomeServicesPropertyConfigInput +} + +type HomeServicesPreferencesOutput { + preferences: HomeServicesPreferences +} + +type HomeServicesPropertyConfig { + allowSatellite: Boolean + providers: [HomeServicesProvider]! +} + +input HomeServicesPropertyConfigByAddressInput { + address: HomeServicesAddressInput! +} + +input HomeServicesPropertyConfigInput { + allowSatellite: Boolean + providers: [HomeServicesProviderInput] +} + +type HomeServicesPropertyConfigOutput { + propertyConfig: HomeServicesPropertyConfig +} + +type HomeServicesProvider { + companyAppName: String + defaultUrl: String + entitiesFeaturedOn: [EntityHomeServicesProvider] + exclusive: Boolean! + featured: Boolean + featuredKind: HomeServicesProviderFeaturedKind + id: String! + internet: Boolean + logo: String! + moverAppName: String + name: String! + ott: Boolean + phone: Boolean + satellite: Boolean + security: Boolean + tv: Boolean + valueScore: Int + valueTier: OfferValueTier +} + +enum HomeServicesProviderFeaturedKind { + property_exclusive + property_featured + updater_featured +} + +input HomeServicesProviderInput { + exclusive: Boolean! + featured: Boolean + featuredKind: HomeServicesProviderFeaturedKind + id: String! + logo: String + name: String +} + +type HomeServicesProvidersOutput { + providers: [HomeServicesProvider] +} + +type HomeServicesRecommendation { + featuredProviders: JSON + insuranceConfig: JSON + offers: JSON + recommendation: JSON +} + +type HomeServicesReservation { + code: String! + createdAt: DateTime! + fromAddress: HomeServicesAddress + id: ID! + offer: HomeServicesOffer! + offers: [HomeServicesOffer] + preferences: HomeServicesPreferences + status: HomeServicesReservationStatus! + toAddress: HomeServicesAddress + user: User! +} + +type HomeServicesReservationOutput { + metadata: HomeServicesMetadata + reservation: HomeServicesReservation + serviceabilityReservation: ServiceabilityReservation +} + +enum HomeServicesReservationStatus { + RESERVED +} + +type Image { + baseUrl: Url! + id: ID! + url: Url! +} + +enum InternetKind { + BPL + CABLE + DSL + FIBER + SATELLITE + WIRELESS +} + +type InternetPreference { + serviceRequired: Boolean + speed: InternetSpeedTier +} + +input InternetPreferenceInput { + serviceRequired: Boolean + speed: InternetSpeedTier +} + +enum InternetProductType { + bpl + cable + dsl + fiber + satellite + wireless +} + +type InternetService { + kind: InternetKind + speed: InternetSpeed +} + +input InternetServiceInput { + kind: InternetKind + speed: InternetSpeedInput +} + +type InternetSpeed { + mbps: Int! + tier: InternetSpeedTier! +} + +input InternetSpeedInput { + mbps: Int! + tier: InternetSpeedTier! +} + +enum InternetSpeedTier { + MAXIMUM + MINIMUM + NORMAL +} + +type Invite { + createdAt: DateTime! + direction: Direction + email: String + estimatedMoveDate: Date + firstName: String + fromAddress: Address + id: ID! + lastName: String + leaseStartDate: Date + message: String + metadata: JSON + middleName: String + phone: String + residentOnboardingEnabled: Boolean! + sendDate: DateTime + sentAt: DateTime + sourceMethod: String! + status: InviteStatus + statusUpdatedAt: DateTime + suffixName: String + test: Boolean! + toAddress: Address + updatedAt: DateTime + user: User + uuid: String! +} + +input InviteDivisionInput { + """ID of the division of which we need future residents.""" + divisionId: Int! + """Page in the result set that should be returned.""" + pageNumber: Int = 1 + """Number of future residents per page.""" + pageSize: Int = 10 + """Whether or not the result set should contain residents whose move date has not yet passed.""" + preMoveOnly: Boolean = false + """Apply sorting to the result set.""" + sortBy: FutureResidentsSorting = NAME + """Which direction to sort the results.""" + sortDirection: FutureResidentsSortDirection = ASC +} + +type InviteDivisionOutput { + invites: [Invite!] + pagination: PaginationOutput +} + +type InviteOutput { + invite: Invite +} + +enum InviteStatus { + ANSWERED + BOUNCED + CANCELLED + CLAIMED + DUPLICATE + EMAIL_REQUESTED + INFO_NEEDED + INVALID_EMAIL + NOT_SENT + OPENED + OPT_OUT + QUEUED_TO_MOVER + REJECTED + REQUEUED_TO_MOVER + RESENT_TO_MOVER + REVIEW + REVIEWED + SENT_TO_MOVER +} + +"""An ISO 8601-encoded date""" +scalar ISO8601Date + +"""An ISO 8601-encoded datetime""" +scalar ISO8601DateTime + +type Item { + createdAt: DateTime! + """Item ID""" + id: Int! + """Type of item""" + kind: String! + """Associated message to user""" + message: String + """Associated JSON data related to item kind""" + metadata: JSON + """Item completion status""" + status: String + statusUpdatedAt: DateTime + updatedAt: DateTime +} + +scalar JSON + +input LinkEntityHomeServicesProviderInput { + entityId: ID! + homeServicesProviderId: ID! +} + +type LinkEntityHomeServicesProviderOutput { + entityHomeServicesProvider: EntityHomeServicesProvider +} + +type Location implements EntityInterface { + address: Address + categories: [String] + """ + Stringified JSON for any custom data. For consistency, prefer camelCase keys. + \"{\\\\"yearFounded\\\\": \\\\"1949\\\\"}\" + """ + customFields: JSON + email: String + """ + Location's ID in your system. Must be unique. + You can provide multiple IDs. + """ + externalIds: [ID] + id: ID! + logo: Image + """Metadata (predefined) for a Location.""" + metadata: LocationMetadata + name: String + """Company or Location to which this Location belongs""" + parent: Entity! + phone: String + rules: [Rule] + status: LocationStatus + website: String +} + +type LocationMetadata { + description: String + displayName: String + shortDescription: String +} + +input LocationMetadataInput { + description: String + displayName: String + shortDescription: String +} + +type LocationsOutput { + locations: [Location] +} + +enum LocationStatus { + draft + live + paused +} + +enum LocationType { + area + building +} + +input MakeGuestHomeServicesOrderInput { + """Stringified JSON for contact info; have fields such as phoneNumber, firstName, lastName and email""" + contactInformation: JSON + """Stringified JSON for credit check; have fields such as ssn, dateOfBirth, driverLicenseNumber, state and expirationDate""" + creditCheck: JSON + """Stringified JSON for installation info; have fields such as selfInstall, oneTimePayment, shippingAddress, date, and time""" + installation: JSON + offer: HomeServicesOfferInput! + """Stringified JSON for opt ins info; have fields such as infoOptIn, contactOptIn and termsAndConditionsOptIn""" + optIns: JSON + """payment infos""" + payment: JSON! + """prices that can be used to generate receipt""" + price: JSON! + """Stringified JSON for promotion options; have fields such as hasDirecTV, direcTVAccountNumber, purchaseUnlimitedData""" + promotionOptions: JSON + reservationCode: String! + """Stringified JSON for security info; have fields such as question, response and passcode""" + security: JSON + """source of order, e.g. xfinityspecial""" + source: String! = "guest" +} + +input MakeHomeSecurityReservationInput { + moveId: ID + package: HomeSecurityPackage +} + +type MakeHomeSecurityReservationOutput { + reservation: HomeSecurityReservation +} + +input MakeHomeServicesOrderInput { + """Stringified JSON for contact info; have fields such as phoneNumber, firstName, lastName and email""" + contactInformation: JSON + """Stringified JSON for credit check; have fields such as ssn, dateOfBirth, driverLicenseNumber, state and expirationDate""" + creditCheck: JSON + """Stringified JSON for installation info; have fields such as selfInstall, oneTimePayment, shippingAddress, date, and time""" + installation: JSON + moveId: ID! + offer: HomeServicesOfferInput! + """Stringified JSON for opt ins info; have fields such as infoOptIn, contactOptIn and termsAndConditionsOptIn""" + optIns: JSON + """payment infos""" + payment: JSON! + """prices that can be used to generate receipt""" + price: JSON! + """Stringified JSON for promotion options; have fields such as hasDirecTV, direcTVAccountNumber, purchaseUnlimitedData""" + promotionOptions: JSON + reservationCode: String! + """Stringified JSON for security info; have fields such as question, response and passcode""" + security: JSON +} + +type MakeHomeServicesOrderOutput { + order: HomeServicesOrder +} + +input MakeHomeServicesReservationInput { + callCenter: HomeServicesCallCenterInput + checkoutEnabled: Boolean + fromAddress: HomeServicesAddressInput + metadata: HomeServicesMetadataInput + moveId: ID! + offer: HomeServicesOfferInput! + offers: [HomeServicesOfferInput] + preferences: HomeServicesPreferencesInput! + propertyConfig: HomeServicesPropertyConfigInput + toAddress: HomeServicesAddressInput + user: HomeServiceReservationUserInput +} + +input MakeMoveIqEstimateRequestInput { + companyIds: [ID]! + date: Date! + email: String + firstName: String + lastName: String + moveId: ID! + moveType: String! + notes: String + phone: String +} + +input MakeMoveIqReservationInput { + date: Date! + email: String + firstName: String + includePacking: Boolean! + lastName: String + moveId: ID + offerId: ID! + phone: String! + source: MoveIqSource + topValue: Boolean! + valueScore: Int! + valueTier: OfferValueTier! +} + +type Manager implements UserInterface { + createdAt: DateTime + email: String! + externalId: String + firstName: String + fullName: String + id: ID! + lastName: String + numberOfProperties: String! + phone: String + restrictedDivisionIds: [Int!]! @deprecated(reason: "use restricted_divisions") + restrictedDivisions: [Division!]! + roleIds: [Int!]! + roleNames: [String!]! + roles: [String!]! @deprecated(reason: "use 'roleNames' instead - in the future this will be type 'AssignableRole'") + siteEntity: Entity! + updatedAt: DateTime +} + +type ManagersDataView implements DataViewInterface { + pagination: PaginationOutput +} + +input ManagersFilter { + """full text search query which matches on first_name, last_name, or email""" + fullText: String + nameFilter: String @deprecated(reason: "use 'fullText' instead") +} + +type ManagersOutput { + dataView: ManagersDataView + managers: [Manager!] +} + +type Move { + canEditAddresses: Boolean! + createdAt: DateTime! + date: Date! + direction: Direction + distanceKm: Float + distanceMi: Float + externalId: String + fromAddress: MoveAddress! + id: ID! + items: [Item!] + metadata: MoveMetadata + residentOnboardingEnabled: Boolean! + toAddress: MoveAddress! + updatedAt: DateTime +} + +input MoveAddKeyInput { + inviteToken: String + key: String! + uuid: ID! + value: String! +} + +type MoveAddress implements AddressInterface { + city: String + homeSize: AddressHomeSize + id: ID + ownership: AddressOwnership + postalCode: String + state: String + street: String + unit: String +} + +input MoveAddressInput { + city: String! + homeSize: AddressHomeSize + ownership: AddressOwnership + postalCode: String! + state: String! + street: String! + unit: String +} + +input MoveFindKeyInput { + inviteToken: String + key: String! + uuid: ID! +} + +type MoveIqAddress implements AddressInterface { + city: String + postalCode: String + state: String + street: String + unit: String +} + +type MoveIqAddressDetail { + address: MoveIqAddress + distanceToCurb: MoveIqDistanceToCurb + elevators: Boolean + stairCount: Int +} + +input MoveIqAddressDetailInput { + address: MoveIqAddressInput! + distanceToCurb: MoveIqDistanceToCurb! + elevators: Boolean! + stairCount: Int! +} + +input MoveIqAddressInput { + city: String! + postalCode: String! + state: String! + street: String! + unit: String +} + +type MoveIqBallparkPricesOutput { + ballparkPrices: [MoveIqPriceRange!]! +} + +type MoveIqCompany { + address: MoveIqCompanyAddress + affiliations: [String] + coverageAreas: [MoveIqCompanyCoverageArea] + description: String + email: String + id: ID! + licenses: MoveIqCompanyLicense + logo: MoveIqLogo + name: String + noteworthy: [String] + numberOfMoves: String + numberOfTrucks: Int + phone: String + rating: MoveIqCompanyRating + services: [String] + website: String + yearOfEstablishment: Int +} + +type MoveIqCompanyAddress implements AddressInterface { + city: String + postalCode: String + state: String + street: String + unit: String +} + +type MoveIqCompanyCoverageArea { + city: String + """Deprecated""" + postalCode: String + postalCodes: [String] + state: String +} + +type MoveIqCompanyLicense { + dot: String + interstate: String + local: String +} + +type MoveIqCompanyRating { + google: Float + qualityRating: String + reviews: [MoveIqCompanyReview] +} + +type MoveIqCompanyReview { + date: Date + name: String + rating: Float + review: String +} + +type MoveIqCubesheetItem { + category: String + id: ID! + name: String + weight: Float +} + +enum MoveIqDistanceToCurb { + FT_150 + FT_225 + FT_300 + FT_75 + UNSURE +} + +enum MoveIqEligibleMoveType { + interstate + intrastate + local +} + +type MoveIqEstimate { + batchId: BigInt + companyId: Int + id: ID! + status: MoveIqEstimateStatus +} + +type MoveIqEstimateRequest { + estimates: [MoveIqEstimate] + id: ID! + moveId: ID +} + +type MoveIqEstimateRequestOutput { + estimateRequest: MoveIqEstimateRequest +} + +enum MoveIqEstimateStatus { + CANCELLED + COMPLETED + CONFIRMED + REQUESTED + RESERVED +} + +enum MoveIqHomeArea { + BATH + BED + DINING + LIVING + OFFICE + OTHER +} + +enum MoveIqHomeSize { + FIVE_BEDROOM_PLUS + FOUR_BEDROOM + ONE_BEDROOM + STUDIO + THREE_BEDROOM + TWO_BEDROOM +} + +type MoveIqInventoryItemOutput { + cubesheetItem: MoveIqCubesheetItem + homeArea: MoveIqHomeArea + id: ID! + quantity: Int + """This is the volume for the total quantity""" + volume: Float + """This is the weight for the total quantity""" + weight: Float +} + +type MoveIqInventoryOutput { + inventoryItems: [MoveIqInventoryItemOutput] + moveId: ID + totalItems: Int + totalVolume: Float + totalWeight: Float +} + +type MoveIqLogo { + base: String + path: String +} + +type MoveIqMove { + fromAddressDetails: MoveIqAddressDetail + homeSize: MoveIqHomeSize + id: ID! + moveDate: Date + moveId: ID + toAddressDetails: MoveIqAddressDetail +} + +type MoveIqOffer { + date: Date + id: ID + price: Float + priceWithPacking: Float + valueScore: Int + valueScoreWithPacking: Int + valueTier: OfferValueTier + valueTierWithPacking: OfferValueTier +} + +type MoveIqOfferGroup { + company: MoveIqCompany + offers: [MoveIqOffer] +} + +input MoveIqPresenceAddressInput { + city: String + postalCode: String! + state: String + street: String + unit: String +} + +type MoveIqPriceRange { + homeSize: MoveIqHomeSize! + maxPrice: Float! + minPrice: Float! +} + +type MoveIqReservation { + company: MoveIqCompany + date: Date + id: ID! + includePacking: Boolean + moveId: ID + price: Float + """Type of pricing (standard)""" + pricing: String + status: MoveIqReservationStatus + topValue: Boolean + valueScore: Int + valueTier: OfferValueTier +} + +type MoveIqReservationOutput { + reservation: MoveIqReservation +} + +enum MoveIqReservationStatus { + CANCELLED + COMPLETED + CONFIRMED + RESERVED +} + +enum MoveIqSource { + MoveIQ + ProfileWidget + Unknown + Widget + iFrame +} + +type MoveKeyOutput { + key: String! + uuid: ID! + value: String! +} + +type MoveMetadata { + optimizelyHoldback: Boolean + personalization: MovePersonalization +} + +input MoveMetadataInput { + personalization: MovePersonalizationInput +} + +type MoveOutput { + move: Move +} + +type MovePersonalization { + movingReason: String + personsMoving: [String!] +} + +input MovePersonalizationInput { + movingReason: String + personsMoving: [String!] +} + +type MovesBreakdown { + count: Int! + value: String +} + +type MovesBreakdownByDirection { + count: Int! + direction: String! + value: String +} + +type MovesBreakdownReportOutput { + entities: [EntityMovesBreakdown!]! +} + +type Mutation { + """Activates the experiment for the current user in context""" + activateExperiment(attributes: JSON, experiment: String!, uuid: ID): VariationOutput + """Mark an invite as status answered""" + answerInvite(input: AnswerInviteInput!): InviteOutput + """Marks an item with status info_requested and sends event for email notification""" + approveItem(input: ApproveItemInput!): ApproveItemOutput + """Set invite status to cancelled""" + cancelInvite(input: CancelInviteInput!): InviteOutput + """Delete a user in compliance with CCPA""" + ccpaDeleteUser(email: String!): CcpaDeleteUserOutput + """Change Password""" + changePassword(input: ChangePasswordInput!): ChangePasswordOutput! + """Claim a promotion""" + claimPromotion(input: ClaimPromotionInput): ClaimPromotionOutput + """Claim a promotion""" + claimPromotionPublic(input: ClaimPromotionPublicInput): ClaimPromotionPublicOutput + """Create a Point of Lease insurance policy with assurant""" + createAssurantPolPolicy(additionalInsured: [AdditionalInsuredInput!], itemId: ID!): CreateAssurantPolPolicyOutput! + """Create an Item""" + createItem(input: CreateItemInput!): CreateItemOutput! + """Create a Public Session""" + createPublicSession(input: CreatePublicSessionInput): CreatePublicSessionOutput + """Create a serviceability lead""" + createServiceabilityLead(input: ServiceabilityLeadInput!): ServiceabilityLeadOutput + """Delete an entity item definition""" + deleteEntityItemDefinition(id: ID!): DeleteEntityItemDefinitionOutput + """Delete a promotion.""" + deleteLocation(externalId: ID, id: ID): DeleteLocationOutput + """Delete an insurance or utility document""" + deleteMoverDocument(documentId: String!, itemId: Int!, utilityKind: UtilityKinds): DeleteMoverDocumentOutput + """Delete a promotion.""" + deletePromotion(externalId: ID, id: ID): DeletePromotionOutput + """Delete a Utility Provider Postal Code""" + deleteUtilityProviderPostalCode(id: ID!): DeleteUtilityProviderPostalCodeOutput + """Download an insurance or utility document""" + downloadMoverDocument(input: DownloadMoverDocumentInput!): DownloadMoverDocumentOutput + """Enroll in utility subscription""" + enrollUtilitySubscription(input: EnrollUtilitySubscriptionInput!): EnrollUtilitySubscriptionOutput + """Evaluate MoveIq eligibility (coverage)""" + evaluateMoveIqEligibility(input: EvaluateMoveIqEligibilityInput!): EvaluateMoveIqEligibilityOutput + """Generate the offers for home services""" + generateHomeServicesOffers(input: GenerateHomeServicesOffersInput!): GenerateHomeServicesOffersOutput + """Generate the MoveIQ offers""" + generateMoveIqOffers(input: GenerateMoveIqOffersInput): GenerateMoveIqOffersOutput + """Link entity to home service featured provider""" + linkEntityHomeServicesProvider(input: LinkEntityHomeServicesProviderInput): LinkEntityHomeServicesProviderOutput + """Order a home service package""" + makeGuestHomeServicesOrder(input: MakeGuestHomeServicesOrderInput!): MakeHomeServicesOrderOutput + """Reserve Home Security Install""" + makeHomeSecurityReservation(input: MakeHomeSecurityReservationInput!): MakeHomeSecurityReservationOutput + """Order a home service package""" + makeHomeServicesOrder(input: MakeHomeServicesOrderInput!): MakeHomeServicesOrderOutput + """Reserve an offer""" + makeHomeServicesReservation(input: MakeHomeServicesReservationInput!): HomeServicesReservationOutput + """Request MoveIQ Estimates for the move""" + makeMoveIqEstimateRequest(input: MakeMoveIqEstimateRequestInput): MoveIqEstimateRequestOutput + """Reserve the MoveIQ reservation for the move""" + makeMoveIqReservation(input: MakeMoveIqReservationInput): MoveIqReservationOutput + """Reserve an offer""" + makeServiceabilityReservation(input: ServiceabilityReservationInput!): ServiceabilityReservationOutput + """Add Key to Move Datastore""" + moveAddKey(input: MoveAddKeyInput!): MoveKeyOutput + """Register Browser Token for Push Notifications""" + registerBrowserToken(input: RegisterBrowserTokenInput!): RegisterBrowserTokenOutput! + """Marks an item with status info_requested and sends event for email notification""" + rejectItem(input: RejectItemInput!): RejectItemOutput + """ + Replace an address + - new address will be retain active and primary/default status + from old address + - old address will be marked inactive + """ + replaceAddress(input: ReplaceAddressInput!): ReplaceAddressOutput! + """Request new utility""" + requestNewUtilityProvider(input: RequestNewUtilityProviderInput): RequestNewUtilityProviderOutput + """Request more information on a utility or an insurance item""" + requestUtilityAndInsuranceInformation(input: RequestUtilityAndInsuranceInformationInput!): RequestUtilityAndInsuranceInformationOutput @deprecated(reason: "Use rejectItem mutation for marking an item as info_requested") + """Mark an invite as status requeued_to_mover""" + resendInvite(input: ResendInviteInput!): InviteOutput + """Queue invites to be sent to all professionals in an Entity asynchronously""" + sendInvitesToEntityProfessionals(input: SendInvitesToEntityProfessionalsInput!): SendInvitesToEntityProfessionalsOutput! + """Given an unclaimed account, via email, resends an invite""" + sendMobileInviteVerificationEmail(email: String!): SendMobileInviteVerificationEmailOutput + """Send all previously uploaded mover document from move item (proof of insurance) to assurant""" + sendUploadedMoverDocumentsToAssurant(itemId: ID!): SendUploadedMoverDocumentsToAssurantOutput! + """Upsert a MoveIQ move""" + setMoveIqMove(input: SetMoveIqMoveInput): SetMoveIqMoveOutput + """Set move costs for a resident wherever they are in the lifecycle of a move-in""" + setResidentOnboardingMoveCosts(input: SetMoveCostsInput!): SetMoveCostsOutput + """Signup a new user""" + signUp(input: SignUpInput!): SignUpOutput! + """Signin a mover""" + signin(input: SigninInput!): SigninOutput + """Signup a new mover""" + signupMover(input: SignupMoverInput!): SignupMoverOutput + """Start Password Change""" + startPasswordChange(existingPW: String!): StartPasswordChangeOutput! + """Submit an anwer to an item question""" + submitItemAnswer(input: SubmitItemAnswerInput!): SubmitItemAnswerOutput + """Tracks a given event for the current user in context""" + trackExperimentEvent(attributes: JSON, event: String!): TrackEventOutput + """Unlink entity to home service featured provider""" + unlinkEntityHomeServicesProvider(input: UnlinkEntityHomeServicesProviderInput): UnlinkEntityHomeServicesProviderOutput + """Update division utilities""" + updateDivisionUtilityProviders(input: UpdateDivisionUtilityProvidersInput): UpdateDivisionUtilityProvidersOutput + """Update a home""" + updateHome(input: UpdateHomeInput!): UpdateHomeOutput! + """Update an Item""" + updateItem(input: UpdateItemInput!): UpdateItemOutput + """Update a move""" + updateMove(input: UpdateMoveInput!): UpdateMoveOutput + """Update with deltas inventory for a MoveIQ Move""" + updateMoveIqInventory(input: UpdateMoveIqInventoryInput): MoveIqInventoryOutput + """Update a Public Session""" + updatePublicSession(input: UpdatePublicSessionInput): UpdatePublicSessionOutput + """Updates renters insurance configuration""" + updateRentersInsuranceConfig(input: UpdateRentersInsuranceConfigInput!): UpdateRentersInsuranceConfigOutput! + """Update a user""" + updateUser(input: UpdateUserInput!): UpdateUserOutput + """Upload an insurance or utility document""" + uploadMoverDocument(file: UploadMoverDocumentInput!, itemId: Int!, utilityKind: UtilityKinds): UploadMoverDocumentOutput + """Upload an account number for utility proof""" + uploadUtilityAccountNumber(input: UtilityAccountNumberInput!): UtilityAccountNumberOutput + """Create or Update a company""" + upsertCompany(input: UpsertCompanyInput): UpsertCompanyOutput + """Create an entity item definition""" + upsertEntityItemDefinition(input: UpsertEntityItemDefinitionInput!): UpsertEntityItemDefinitionOutput! + """Create or Update a location""" + upsertLocation(input: UpsertLocationInput): UpsertLocationOutput + """Create or Update a manager""" + upsertManager(input: UpsertManagerInput): UpsertManagerOutput + """Create or Update an promotion""" + upsertPromotion(input: UpsertPromotionInput): UpsertPromotionOutput + """Upserts closing cost details.""" + upsertResidentOnboardingClosingDetails(input: UpsertResidentOnboardingClosingDetailsInput!): UpsertResidentOnboardingClosingDetailsOutput! + """ + Upserts a resident onboarding item identified by a matching code. This will + add or replace an existing item. No partial updates or merges to item data is + performed. Clients should pass the entirety of the item. + e.g. `{code: "pets", page: { questions:[...], ...}` + """ + upsertResidentOnboardingItem(input: UpsertResidentOnboardingItemInput!): UpsertResidentOnboardingItemOutput! + """Create or Update a rule""" + upsertRule(input: UpsertRuleInput): UpsertRuleOutput + """Upsert User Subscription Preferences""" + upsertSubscriptionPreferences(input: SubscriptionUpsertPreferencesInput!): SubscriptionUpsertPreferencesOutput + """Create or Update a Utility Provider""" + upsertUtilityProvider(input: UpsertUtilityProviderInput!): UpsertUtilityProviderOutput + """Create or Update a Utility Provider Postal Code""" + upsertUtilityProviderPostalCode(input: UpsertUtilityProviderPostalCodeInput!): UpsertUtilityProviderPostalCodeOutput + """verify pin""" + verifyPin(input: VerifyPinInput!): VerifyPinOutput! +} + +input NewUtilityProviderInput { + kind: UtilityKinds! + name: String! + phone: String + website: String +} + +type NormalizedAddress { + analysis: String! + city: String! + classification: AddressClassification! + components: String! + metadata: String! + postalCode: String! + state: String! + status: AddressStatus + street: String! + unit: String +} + +type NormalizedAddressOutput { + normalizedAddress: NormalizedAddress +} + +enum OfferValueTier { + BAD + GOOD + OK +} + +input PaginationInput { + page: Int + perPage: Int +} + +type PaginationOutput { + page: Int + perPage: Int + recordCount: Int +} + +enum PhoneKind { + CABLE + FIBER + LANDLINE + SATELLITE + VOIP +} + +type PhonePreference { + landline: Boolean + serviceRequired: Boolean +} + +input PhonePreferenceInput { + landline: Boolean + serviceRequired: Boolean +} + +enum PhoneProductType { + cable + fiber + landline + satellite + voip +} + +type PhoneService { + kind: PhoneKind +} + +input PhoneServiceInput { + kind: PhoneKind +} + +enum PhoneVerificationMethodInput { + CALL + SMS +} + +type PoweredByBranding { + hideTvInternetCallBanner: Boolean + hideTvInternetOffersSidebar: Boolean + hideTvInternetQuestionsDescription: Boolean + primaryColor: String + tvInternetPhoneNumber: String + verizonTvInternetPhoneNumber: String +} + +type ProfessionalAnalyticsReportOutput { + entities: [CompanyReport!]! +} + +type Promotion { + categories: [String] + """Unique identifier for a promotion for Updater use""" + code: ID! + """ + Stringified JSON for any custom data. For consistency, prefer camelCase keys. + \"{\\\\"yearFounded\\\\": \\\\"1949\\\\"}\" + """ + customFields: JSON + description: String + discount: String + displayName: String + """ + Promotion's ID in your system. Must be unique. + You can provide multiple IDs. + """ + externalIds: [ID] + """Company or Location to which the promotion pertains""" + forEntity: EntityInterface + fullTerms: String + """Promotion's Primary Key.""" + id: ID! + image: Image + """Metadata (predefined) for an Promotion.""" + metadata: PromotionMetadata + """Name of the promotion""" + name: String + ownerId: ID! + placements: [PromotionPlacement] + redemption: PromotionRedemption + rules: [Rule] + status: PromotionStatus +} + +enum PromotionClaimType { + digital + physical +} + +type PromotionCode { + format: String + type: PromotionCodeType + value: String +} + +input PromotionCodeInput { + description: String + format: String + type: PromotionCodeType + value: String +} + +enum PromotionCodeType { + confirmation_code + dynamic_class + none + static_barcode + static_promo_code +} + +type PromotionMetadata { + claimType: PromotionClaimType + code: String @deprecated(reason: "Moved to RedemptionCode") + contactPreferenceRequired: Boolean! + description: String @deprecated(reason: "Moving to top level of Promotion object") + discount: String @deprecated(reason: "Moving to top level of Promotion object") + displayName: String @deprecated(reason: "Moving to top level of Promotion object") + exclusive: Boolean! + fullTerms: String @deprecated(reason: "Moving to top level of Promotion object") + order: Int + redemption: PromotionRedemption @deprecated(reason: "Moving to top level of Promotion object") + shortTerms: String @deprecated(reason: "Not in use") + templates: PromotionTemplates + url: String @deprecated(reason: "Moved to RedemptionMethod URL") +} + +input PromotionMetadataInput { + claimType: PromotionClaimType + code: String + contactPreferenceRequired: Boolean + description: String + discount: String + displayName: String + exclusive: Boolean + fullTerms: String + order: Int + """Deprecated: Moving to top-level of Promotion""" + redemption: PromotionRedemptionInput + shortTerms: String + templates: PromotionTemplatesInput + url: String +} + +enum PromotionPlacement { + claim_go_redirect + email + exclusive_offers + forward_mail + moverpass + splash_page +} + +type PromotionRedemption { + barcode: String @deprecated(reason: "Moving to code field") + barcodeImage: Image @deprecated(reason: "Moving to code field") + code: PromotionCode + description: String @deprecated(reason: "Moving to code and method fields") + methods: [PromotionRedemptionMethod] +} + +input PromotionRedemptionInput { + """Deprecated: Moving to code field""" + barcode: String + """Deprecated: Moving to code field""" + barcodeUrl: Url + code: PromotionCodeInput + """Deprecated: Moving to code and method fields""" + description: String + methods: [PromotionRedemptionMethodInput!] +} + +type PromotionRedemptionMethod { + description: String + type: PromotionRedemptionMethodType + value: String +} + +input PromotionRedemptionMethodInput { + description: String + type: PromotionRedemptionMethodType + value: String +} + +enum PromotionRedemptionMethodType { + informational + location + website +} + +type PromotionsDataView implements DataViewInterface { + pagination: PaginationOutput +} + +type PromotionsOutput { + dataView: PromotionsDataView + promotions: [Promotion] +} + +enum PromotionStatus { + draft + expired + live + paused +} + +type PromotionTemplate { + engine: PromotionTemplateEngines + template: String +} + +enum PromotionTemplateEngines { + HTML + HYPERHTML +} + +input PromotionTemplateInput { + engine: PromotionTemplateEngines! + template: String! +} + +type PromotionTemplates { + contactPreferenceForm: PromotionTemplate +} + +input PromotionTemplatesInput { + contactPreferenceForm: PromotionTemplateInput +} + +type ProviderSocialData { + locationType: LocationType + percentage: Int + providerCode: String +} + +input ProximityDisclaimerInput { + pricingText: String + proximityDisclosure: String +} + +type Query { + """Retrieve the account transfers report for a given company and time period""" + accountTransfersReport(companyId: ID!, endDate: Date, startDate: Date): AccountTransfersReportOutput + """List of roles the current user can assign to users""" + assignableRoles: AssignableRolesOutput! + """Check if Assurant is eligible for a resident""" + assurantEligibility(itemId: ID!): AssurantEligibleOutput! + """Find available offers from serviceability services.""" + availableOffers(input: AvailableOffersInput!): ServiceabilityAvailableOffersOutput + """Find available products and shop flow schema from serviceability services.""" + availableProducts(input: AvailableProductsInput!): ServiceabilityAvailableProductsOutput + """Available utility plans""" + availableUtilityPlans: AvailableUtilityPlansOutput + """Available utilities""" + availableUtilityProviders(input: AvailableUtilityProviderInput): AvailableUtilityProvidersOutput + """Find a bundled offer from serviceability services.""" + bundledOffer(input: BundledOfferInput!): BundledOfferOutput + """Ensure user exists and can be deleted in compliance with CCPA""" + ccpaDeleteUserEligibility(email: String!): CcpaDeleteUserEligibility + """Retrieve all claimed promotions for a move""" + claimedPromotions(moveExternalId: ID, moveId: ID): ClaimedPromotionsOutput + """Retrieve the claimed promotions report for a given company and time period""" + claimedPromotionsReport(companyId: ID!, endDate: Date, startDate: Date): ClaimedPromotionsReportOutput + """Retrieve child companies based on authenticated parent""" + companies: CompaniesOutput + """Retrieve Company via id or externalId""" + company(externalId: ID, id: ID): Company + """Get Concierge Availability""" + conciergeAvailability(input: ConciergeAvailabilityInput!): ConciergeAvailabilityOutput + """Get division""" + division(id: ID!): Division + """Determines Dolly service availability for a given set of addresses.""" + dollyEligibility(input: DollyEligibilityInput!): DollyEligibilityOutput + """Determine Dolly eligibility for a From Address""" + dollyExtraHelpFrom(inputFrom: AddressInput!): Boolean @deprecated(reason: "Use dollyEligibility.") + """Determin Dolly eligibility for a To Address""" + dollyExtraHelpTo(inputTo: AddressInput!): Boolean @deprecated(reason: "Use dollyEligibility.") + """Find service availability and other info from Dolly service for full moves""" + dollyMove(input: DollyMoveInput!): DollyMoveOutput + """Find service availability and other info from Dolly service for retail locations""" + dollyRetailMove(input: DollyMoveInput!): DollyEligibilityOutput + """Find service availability and other info from Dolly service for short distance moves""" + dollySmallMove(input: DollyMoveInput!): DollyEligibilityOutput + """Retrieve all promotion and location pairs that a promotion is eligible for""" + eligiblePromotions(moveExternalId: ID, moveId: ID, placement: PromotionPlacement): EligiblePromotionsOutput + """Retrieve email availability for new user""" + emailAvailable(input: EmailAvailableInput!): EmailAvailableOutput + """Retrieve an Engagement Report for a given company""" + engagementReport(companyId: ID, endDate: Date, startDate: Date): EngagementReportOutput + """Entities""" + entity(id: ID!): Entity + """Retrieve an entity item definition based on id""" + entityItemDefinition(id: ID!): EntityItemDefinitionOutput + """Retrieve all entity item definitions""" + entityItemDefinitions(entityId: ID, page: Int, perPage: Int): EntityItemDefinitionsOutput + """Retrieves feature variables associated with a feature flag""" + getExperimentFeatureVariables(attributes: JSON, feature: String!): FeatureVariablesOutput + """Retrieves the variation of the experiment for the current user in context""" + getExperimentVariation(attributes: JSON, experiment: String!, uuid: ID): VariationOutput + """Retrieves the current move of the authenticated mover, or the move of the ID passed in""" + getMove(id: ID): MoveOutput + """Retrieves the authenticated user, or the user belonging to the ID passed in""" + getUser(id: ID): UserOutput @deprecated(reason: "Replaced by \"user\" query") + """Retrieve Home Security Reservation for the Move""" + homeSecurityReservation(moveId: ID!): HomeSecurityReservation + """Retrieve the Home Services order for the Updater move""" + homeServicesOrder(allowSensitive: Boolean, moveId: ID!): HomeServicesOrderOutput + """Retrieve the Home Services preferences for the Updater move""" + homeServicesPreferences(moveId: ID!): HomeServicesPreferencesOutput + """Retrieve the Home Services property config for the Updater move""" + homeServicesPropertyConfig(moveId: ID!): HomeServicesPropertyConfigOutput + """Find the Home Services property config for the given address""" + homeServicesPropertyConfigByAddress(input: HomeServicesPropertyConfigByAddressInput!): HomeServicesPropertyConfigOutput + """Retrieve single home service provider""" + homeServicesProvider(id: ID!): HomeServicesProvider + """Retrieve the list of all home service providers""" + homeServicesProviders: HomeServicesProvidersOutput + """Get home services recommendation for a move.""" + homeServicesRecommendation(moveId: ID!): HomeServicesRecommendation + """Retrieve the Home Services reservation for the Updater move""" + homeServicesReservation(moveId: ID!): HomeServicesReservationOutput + """Retrieve invites based on token/id""" + inviteByToken(token: String!): InviteOutput + """Retrieve all invites from a division""" + invitesByDivision(input: InviteDivisionInput!): InviteDivisionOutput + """Retrieves whether the feature is enabled for the current user in context""" + isExperimentFeatureEnabled(attributes: JSON, feature: String!): FeatureEnabledOutput + """Retrieve Location via Updaters id or id from your system (externalId)""" + location(externalId: ID, id: ID): Location + """Retrieve Locations for a company via Updaters companyId or id from your system (externalCompanyId)""" + locations(companyExternalId: ID, companyId: ID): LocationsOutput + """List of all managers""" + managers(filters: ManagersFilter, pagination: PaginationInput): ManagersOutput + """Get Key from Move Datastore""" + moveFindKey(input: MoveFindKeyInput!): MoveKeyOutput + """Retrieve the MoveIQ company""" + moveIqCompany(id: ID!): MoveIqCompany + """Retrieve the MoveIQ estimate requests for the Updater Move""" + moveIqEstimateRequest(moveId: ID): MoveIqEstimateRequest + """Find the Updater move's inventory items""" + moveIqInventory(moveId: ID): MoveIqInventoryOutput + """Find the MoveIQ move for the Updater Move""" + moveIqMove(moveId: ID): MoveIqMove + """Retrieve the MoveIQ reservation for the Updater Move""" + moveIqReservation(moveId: ID): MoveIqReservation + """Search for companies that can complete an in-home survey""" + moveIqSurveyAvailability(input: SurveyAvailabilityInput!): [MoveIqCompany] + """Retrieve the moves breakdown report for a given company and time period""" + movesBreakdownReport(companyId: ID, endDate: Date, startDate: Date): MovesBreakdownReportOutput + """Retrieve a normalized address for a given address""" + normalizedAddress(input: AddressInput!): NormalizedAddressOutput + """Retrieve an Agent Analytics Report for a given company""" + professionalAnalyticsReport(companyId: ID!, endDate: Date, startDate: Date): ProfessionalAnalyticsReportOutput + """Retrieve Promotion via Updaters id or id from your system (externalId)""" + promotion(code: ID, externalId: ID, id: ID): Promotion + """Retrieve Promotions tied to caller""" + promotions(page: Int, perPage: Int, search: String, sort: String, status: [PromotionStatus!]): PromotionsOutput + """Requesting an insurance Point Of Lease quote from Assurant based on address""" + requestAssurantPolQuote(itemId: ID!): RequestAssutantPolQuoteOutput! + """Return an individual resident based on inviteId""" + resident(input: ResidentInput!): ResidentOutput + """Returns division/property within the company which resident Onboarding enabled""" + residentOnboardingDivisions: DivisionsOutput + """Return sums of residents who need to be processed by Lease Agent""" + residentReport(input: ResidentReportInput!): ResidentReportOutput! + """Find all residents based on filtering""" + residents( + input: ResidentsInput! + """Page in the result set that should be returned.""" + page: Int + pagination: PaginationInput + """Number of future residents per page.""" + perPage: Int + sortBy: ResidentsSortByEnum + sortDirection: ResidentsSortDirectionEnum + sorting: ResidentsSortingInput + ): ResidentsOutput + """Retrieve a Revenue Report for a given company""" + revenueReport(companyId: ID, endDate: Date, entityId: ID, startDate: Date): RevenueReportOutput + """Search Home Services offers for the Updater move, preferences and configs""" + searchHomeServicesOffers(input: SearchHomeServicesOffersInput!): HomeServicesOffersOutput @deprecated(reason: "use AvailableOffers instead") + """Search MoveIq Ballpark Prices for the moveId""" + searchMoveIqBallparkPrices(input: SearchMoveIqBallparkPricesInput!): MoveIqBallparkPricesOutput + """Search Utility Provider Postal Codes""" + searchUtilityProviderPostalCodes(externalId: ID, id: ID, postalCode: String): [UtilityProviderPostalCode] + """Search Utilities""" + searchUtilityProviders(input: SearchUtilityProvidersInput!): [UtilityProvider] + """Fetch invite or account registration status for an email""" + signupStatus(input: SignupStatusInput!): SignupStatusOutput! + """Retrieve the Branding for the site""" + siteBranding(input: SiteBrandingInput): SiteBranding + """Find User Subscription Preferences""" + subscriptionPreferences(input: SubscriptionFindPreferencesInput): SubscriptionPreferencesOutput + """Retrieves the authenticated user (i.e. "me"), or the user belonging to the ID passed in""" + user(id: ID): UserInterface + """Get utility step eligiblity""" + utilityEligibility(moveId: ID): UtilityEligibility + """Utility plan enrollment info required for order completion""" + utilityPlanEnrollmentInfo(input: UtilityPlanEnrollmentInfoInput!): UtilityPlanEnrollmentInfoOutput + """Get utility subscriptions for the move provided""" + utilitySubscriptions(input: UtilitySubscriptionsInput): UtilitySubscriptionsOutput + """Retrieve eligible promotions based on input""" + verifyEligiblePromotions(input: VerifyEligiblePromotionsInput): VerifyEligiblePromotionsOutput +} + +input RegisterBrowserTokenInput { + browserToken: String! +} + +type RegisterBrowserTokenOutput { + """Iterable Status Code""" + code: String + """Iterable Message""" + message: String + success: Boolean +} + +input RejectItemInput { + itemId: Int! + message: String! + reason: String! + utilityKind: UtilityKinds +} + +type RejectItemOutput { + """The item that was approved""" + item: Item! +} + +type RentersInsuranceConfig { + ctaUrl: String + description: String + """Whether or not to exclude Sure as an option for Residents.""" + excludeSure: Boolean + """ + Image asset id. e.g. "v1468517070/recommended_provider_logo_2056" + """ + logoId: String + name: String + required: Boolean + requirements: [String!] +} + +input RentersInsuranceConfigInput { + ctaUrl: String + description: String + excludeSure: Boolean + logoId: String + name: String + required: Boolean + requirements: [String!] +} + +input ReplaceAddressInput { + """New address to set as the active address""" + activeAddress: AddressInput! + """The ID of the user's current active address.""" + id: ID! +} + +type ReplaceAddressOutput { + activeAddress: Address! + inactiveAddress: Address! +} + +"""Output from requesting POL quote to Assurant""" +type RequestAssutantPolQuoteOutput { + address: Address! + coverageDetails: AssurantCoverageDetails! + email: String! + firstName: String! + item: Item! + lastName: String! + premiumDetails: AssurantPremiumDetails! + transactionDetails: AssurantTransactionDetails! +} + +input RequestNewUtilityProviderInput { + divisionId: ID! + utilityProvider: NewUtilityProviderInput! +} + +type RequestNewUtilityProviderOutput { + message: String + status: String! +} + +input RequestUtilityAndInsuranceInformationInput { + itemId: Int! + message: String! + reason: String! + utilityKind: UtilityKinds +} + +type RequestUtilityAndInsuranceInformationOutput { + """Whether or not the request was processed.""" + processed: Boolean! +} + +input ResendInviteInput { + inviteId: ID! +} + +type Resident { + claimedMove: Move + claimedMoveId: ID + division: Division! + email: String! + firstName: String + fromAddress: Address + invite: Invite! + inviteId: ID! + lastName: String + middleName: String + moveDate: Date @deprecated(reason: "Use invite.leaseStartDate || invite.estimatedMoveDate moving forward") + phone: String + residentOnboardingItems: [Item!]! + residentOnboardingItemsCompletedCount: Int! + residentOnboardingItemsTotalCount: Int! + status: ResidentStatus! + suffixName: String + test: Boolean! + toAddress: Address + urgency: Int + urgencyScore: Int + user: User + userId: ID +} + +input ResidentInput { + inviteId: ID! +} + +type ResidentOnboardingConfig { + closingDetails: JSON + items: JSON + legacyItems: JSON + welcomeLetterAddon: String +} + +type ResidentOnboardingDataView implements DataViewInterface { + pagination: PaginationOutput +} + +type ResidentOutput { + resident: Resident! +} + +input ResidentReportInput { + includeTestInvites: Boolean = true + userId: ID + userUuid: ID +} + +type ResidentReportOutput { + numberOfResidentsAwaitingMoveInCosts: Int! + numberOfResidentsWithImminentLeaseStart: Int! + numberOfResidentsWithTasksForReview: Int! +} + +input ResidentsFilter { + fulltext: String + includeTestInvites: Boolean = true + leasingStartDate: ISO8601Date + moveStatus: ResidentsMoveStatusEnum + numberOfCompletedSteps: [Int!] + statuses: [ResidentStatus!] + updatedSince: ISO8601DateTime +} + +input ResidentsInput { + divisionIds: [ID!] + filters: ResidentsFilter +} + +enum ResidentsMoveStatusEnum { + POST_MOVE + PRE_MOVE +} + +type ResidentsOutput { + dataView: ResidentOnboardingDataView + residents: [Resident!]! +} + +enum ResidentsSortByEnum { + CONTACT_INFO + MOVE_IN_DATE + MOVE_IN_STATUS + PROPERTY_NAME + RESIDENT_NAME + URGENCY_SCORE +} + +enum ResidentsSortDirectionEnum { + ASC + DESC +} + +input ResidentsSortingInput { + sortBy: ResidentsSortByEnum + sortDirection: ResidentsSortDirectionEnum +} + +enum ResidentStatus { + """ + Resident that has created an account, but not all Resident Onboarding task/items are status "completed" + """ + INCOMPLETE + """ + Resident that has created an account, and all Resident Onboarding tasks/items are status "completed" + """ + MOVE_IN_READY + """Resident that needs move in cost set""" + NEEDS_MOVE_IN_COST_SET + """ + Resident that has created an account, and has at least one task/item in status "validating" + """ + NEEDS_VALIDATION + """Resident that needs review by Leasing Manager before sending invite""" + NEEDS_WELCOME_LETTER + """Resident that has not yet received their invite""" + NOT_SENT + """Resident that received their invite, but has not yet claimed an account""" + UNCLAIMED +} + +type RevenueReportOutput { + entities: [EntityReport!]! +} + +type Rule { + createdAt: DateTime! + definition: JSON! + description: String + externalIds: [ID] + id: ID! + ruleable: Ruleable! + updatedAt: DateTime! +} + +union Ruleable = Location | Promotion + +enum RuleableType { + location + promotion +} + +input RuleInput { + definition: JSON! + """ + Stringified/encoded JSON of rule definition. + For more info: {Link to rule DSL page.} + """ + description: String + externalId: ID +} + +input SearchHomeServicesOffersInput { + moveId: ID! + preferences: HomeServicesPreferencesInput + propertyConfig: HomeServicesPropertyConfigInput +} + +input SearchMoveIqBallparkPricesInput { + eligible: Boolean + moveId: ID! + moveType: MoveIqEligibleMoveType +} + +input SearchUtilityProvidersInput { + addressState: String + keyword: String + kind: UtilityKinds +} + +input SendInvitesToEntityProfessionalsInput { + entityId: ID! +} + +type SendInvitesToEntityProfessionalsOutput { + status: String! +} + +type SendMobileInviteVerificationEmailOutput { + status: SendMobileInviteVerificationEmailStatus! +} + +enum SendMobileInviteVerificationEmailStatus { + claimed + not_found + sent +} + +"""Output from sending move item documents to assurant.""" +type SendUploadedMoverDocumentsToAssurantOutput { + clientId: String! + email: String! + item: Item! + phoneNumber: String! + residentId: String! + zipCode: String! +} + +enum ServiceabilityAcceptTvInternetCustomer { + all + existing + new + none +} + +type ServiceabilityAddress implements AddressInterface { + city: String + postalCode: String + postalCodeExtension: String + providerAddress: JSON + providerAddressId: ID + state: String + street: String + unit: String +} + +type ServiceabilityAvailableOffersOutput { + availableProducts: [String] @deprecated(reason: "Use `availableProducts` query to retrieve `availableProducts`") + channelLineups: [ServiceabilityTvChannelLineup] + offers: [ServiceabilityOfferInterface] + providerSocialData: [ProviderSocialData] + providerSummaries: [ServiceabilityProviderSummaries] + request: ServiceabilityRequest + shopFlowSchema: JSON @deprecated(reason: "Use `availableProducts` query to retrieve `shopFlowSchema`") +} + +type ServiceabilityAvailableProductsOutput { + availableProducts: [String] + providerSocialData: [ProviderSocialData] + providerSummaries: [ServiceabilityProviderSummaries] + request: ServiceabilityRequest + shopFlowSchemas: [ShopFlowSchema] +} + +enum ServiceabilityCachingStrategy { + aggressive + conservative + none +} + +type ServiceabilityCharge { + amount: Float + description: String + term: ServiceabilityChargeTerm + type: ServiceabilityChargeType +} + +type ServiceabilityChargeTerm { + length: Int + offset: Int + recurrence: ServiceabilityRecurrenceType + unit: ServiceabilityTermUnit +} + +enum ServiceabilityChargeType { + activation + early_cancellation + installation + long_term + short_term +} + +type ServiceabilityContract { + cancellationFee: ServiceabilityContractCancellationFee + term: ServiceabilityContractTerm +} + +type ServiceabilityContractCancellationFee { + amount: Float + description: String +} + +type ServiceabilityContractTerm { + length: Int + unit: ServiceabilityTermUnit +} + +input ServiceabilityCustomerInformationInput { + email: String! + firstName: String! + lastName: String! + phone: String! +} + +type ServiceabilityDisclaimer { + disclaimer: String + displayLocation: ServiceabilityDisclaimerDisplayLocation + referenceMark: String +} + +enum ServiceabilityDisclaimerDisplayLocation { + details + list_page + proximity +} + +type ServiceabilityInternetProduct { + downloadSpeed: ServiceabilityInternetSpeed + features: [String] + name: String! + type: InternetProductType! + uploadSpeed: ServiceabilityInternetSpeed +} + +type ServiceabilityInternetSpeed { + disclaimer: ServiceabilityDisclaimer + unit: ServiceabilityInternetSpeedUnit! + value: Float! +} + +enum ServiceabilityInternetSpeedUnit { + gbps + kbps + mbps +} + +input ServiceabilityLeadInput { + customerInformation: ServiceabilityCustomerInformationInput! + offer: ServiceabilityOfferInput! + requestId: ID! + trackingId: String +} + +type ServiceabilityLeadOutput { + leadId: String +} + +input ServiceabilityOfferInput { + code: String! + providerCode: String! +} + +interface ServiceabilityOfferInterface { + code: String + contract: ServiceabilityContract + disclaimer: String + disclaimers: [ServiceabilityDisclaimer] + extendedHighlights: [String] + highlights: [String] + metadata: ServiceabilityOfferMetadata + name: String! + pricing: ServiceabilityPricing + promotions: [ServiceabilityPromotion] + providerCode: String + proximityDisclaimer: ServiceabilityProximityDisclaimer + tags: [String] +} + +type ServiceabilityOfferMetadata { + cachedAt: DateTime + fromCache: Boolean + misc: JSON +} + +type ServiceabilityPhoneProduct { + features: [String] + name: String! + type: PhoneProductType! +} + +type ServiceabilityPricing { + charges: [ServiceabilityCharge] + price: Float + term: ServiceabilityPricingTerm +} + +type ServiceabilityPricingTerm { + length: Int + unit: ServiceabilityTermUnit +} + +type ServiceabilityPromotion { + description: String + disclaimer: ServiceabilityDisclaimer + name: String +} + +type ServiceabilityProvider { + code: String + config: ServiceabilityProviderConfig + displayName: String + exclusive: Boolean + featured: Boolean + id: ID + logo: Image + name: String + phoneNumber: String + url: String + validationSteps: [String] +} + +enum ServiceabilityProviderAvailability { + available + unavailable + unknown +} + +type ServiceabilityProviderConfig { + supportAddressSuggestions: Boolean + supportExistingCustomer: Boolean +} + +type ServiceabilityProviderError { + code: String + message: String +} + +type ServiceabilityProviderSummaries { + addressAutoSelected: Boolean + addressSuggestions: [ServiceabilityAddress] + availability: ServiceabilityProviderAvailability + error: ServiceabilityProviderError + metadata: ServiceabilityProviderSummaryMetadata + provider: ServiceabilityProvider + queryAddress: ServiceabilityAddress + status: ServiceabilityResultStatus +} + +type ServiceabilityProviderSummaryMetadata { + providerApiVersion: String + strategy: String + strategyVersion: String +} + +type ServiceabilityProximityDisclaimer { + pricingText: String + proximityDisclosure: String +} + +enum ServiceabilityRecurrenceType { + one_time + recurring +} + +type ServiceabilityRequest { + address: ServiceabilityAddress! + createdAt: DateTime! + id: ID! + updatedAt: DateTime! +} + +type ServiceabilityReservation { + code: String! + createdAt: DateTime! + fromAddress: AddressInterface + id: ID! + offer: ServiceabilityOfferInterface! + offers: [ServiceabilityOfferInterface] + status: HomeServicesReservationStatus! + toAddress: AddressInterface + user: User! +} + +input ServiceabilityReservationInput { + metadata: ServiceabilityReservationMetadata + moveId: ID! + products: JSON! +} + +input ServiceabilityReservationMetadata { + checkoutEnabled: Boolean +} + +type ServiceabilityReservationOutput { + homeservicesReservation: HomeServicesReservation + reservation: ServiceabilityReservation +} + +enum ServiceabilityResultStatus { + cache + error + ok +} + +input ServiceabilitySuggestedAddressSelections { + providerAddressId: ID! + providerCode: String +} + +enum ServiceabilityTermUnit { + month + year +} + +type ServiceabilityTvChannelLineup { + channelCodes: [String] + code: String + description: String + providerName: String +} + +type ServiceabilityTvChannels { + count: Int + lineupCodes: [String] +} + +type ServiceabilityTvInternetProducts { + internet: ServiceabilityInternetProduct + phone: ServiceabilityPhoneProduct + tv: ServiceabilityTvProduct +} + +type ServiceabilityTvProduct { + additionalLanguages: [String] + channels: ServiceabilityTvChannels + features: [String] + name: String! + type: TvProductType! +} + +type Session { + accessToken: String! + client: String! + expiry: Int + jwt: String! + uid: String! +} + +input SetMoveCostsInput { + costs: JSON! + inviteId: ID! +} + +type SetMoveCostsOutput { + resident: Resident! +} + +input SetMoveIqMoveInput { + fromAddressDetails: MoveIqAddressDetailInput! + homeSize: MoveIqHomeSize! + moveDate: Date! + moveId: ID + toAddressDetails: MoveIqAddressDetailInput! +} + +type SetMoveIqMoveOutput { + move: MoveIqMove +} + +type ShopFlowSchema { + internetPlans: [JSON!] + json: JSON + version: ID! +} + +input SigninInput { + email: String! + password: String! + """session length in seconds, only supported for jwt expiry""" + sessionLength: Int +} + +type SigninOutput { + mover: User + session: Session +} + +input SignUpInput { + email: String! + externalId: String + firstName: String + guestUserId: String + lastName: String + middleName: String + password: String! + phone: String + promotions: [String!] + suffixName: String +} + +input SignupMoveAddressInput { + analysis: String + city: String! + classification: AddressClassification + components: String + homeSize: AddressHomeSize + metadata: String + ownership: AddressOwnership + postalCode: String! + state: String! + status: AddressStatus + street: String! + unit: String +} + +input SignupMoveInput { + externalId: String + fromAddress: SignupMoveAddressInput! + metadata: MoveMetadataInput + moveDate: Date! + """session length in seconds""" + sessionLength: Int + toAddress: SignupMoveAddressInput! +} + +input SignupMoverInput { + inviteToken: String + move: SignupMoveInput! + mover: SignupUserInput! + promotions: [String!] + referralCode: String +} + +type SignupMoverOutput { + mover: User + session: Session +} + +type SignUpOutput { + session: Session + user: User! +} + +enum SignupStatus { + """Email has an associated invite with estimated move date greater than 14 days ago""" + active_invite + """Email is associated with registered account (but has no active invite)""" + registered + unregistered +} + +input SignupStatusInput { + email: String! +} + +type SignupStatusOutput { + status: SignupStatus! +} + +input SignupUserInput { + email: String! + externalId: String + firstName: String! + lastName: String! + metadata: UserMetadataInput + middleName: String + password: String! + phone: String + suffixName: String +} + +type SimpleCount { + count: Int! + name: String! +} + +type SiteBranding { + branding: EntityBranding + disclaimer: String + entityBrandings: [EntityBranding] + journey: String! + subdomain: String +} + +input SiteBrandingInput { + inviteToken: String + subdomain: String +} + +type SocialBranding { + facebook: String + linkedin: String + twitter: String + website: String +} + +type StartPasswordChangeOutput { + """pw change jwt token""" + pwChangeToken: String +} + +enum Statuses { + cancelled + completed + info_requested + started + validating +} + +input SubmitItemAnswerInput { + finalSubmit: Boolean + itemId: Int! + submission: JSON! + utilityKind: UtilityKinds +} + +type SubmitItemAnswerOutput { + """The item that the submission was applied to.""" + item: Item! +} + +input SubscriptionFindPreferencesInput { + inviteToken: String + userUuid: ID +} + +type SubscriptionPreferences { + channel: SubscriptionPreferencesChannel! + messageType: SubscriptionPreferencesMessage! + subscribe: Boolean! +} + +enum SubscriptionPreferencesChannel { + email_marketing +} + +input SubscriptionPreferencesInput { + channel: SubscriptionPreferencesChannel! + messageType: SubscriptionPreferencesMessage! + subscribe: Boolean! +} + +enum SubscriptionPreferencesMessage { + abandonment + invite + lifecycle + promotional + survey +} + +type SubscriptionPreferencesOutput { + subscriptionPreferences: [SubscriptionPreferences!]! + userEmail: ID! + userUuid: ID +} + +input SubscriptionUpsertPreferencesInput { + inviteToken: String = null + subscriptionPreferences: [SubscriptionPreferencesInput!]! + userUuid: ID = null +} + +type SubscriptionUpsertPreferencesOutput { + subscriptionPreferences: [SubscriptionPreferences!]! + userEmail: ID! + userUuid: ID +} + +input SurveyAvailabilityInput { + date: String! + fromAddress: MoveIqAddressInput! + moveType: MoveIqEligibleMoveType! + toAddress: MoveIqAddressInput! +} + +type TrackEventOutput { + datafile: String + datafileRevision: String + logs: [String!] + result: Boolean +} + +type TvChannels { + count: Int! +} + +input TvChannelsInput { + count: Int! +} + +type TvFeatures { + dvr: Boolean + onDemand: Boolean +} + +input TvFeaturesInput { + dvr: Boolean + onDemand: Boolean +} + +type TvInternetOffer implements ServiceabilityOfferInterface { + acceptCustomer: ServiceabilityAcceptTvInternetCustomer + code: String + contract: ServiceabilityContract + disclaimer: String + disclaimers: [ServiceabilityDisclaimer] + extendedHighlights: [String] + highlights: [String] + metadata: ServiceabilityOfferMetadata + name: String! + pricing: ServiceabilityPricing + products: ServiceabilityTvInternetProducts + promotions: [ServiceabilityPromotion] + providerCode: String + proximityDisclaimer: ServiceabilityProximityDisclaimer + tags: [String] + valueScore: Int +} + +enum TvKind { + CABLE + FIBER + IPTV + SATELLITE +} + +type TvNetworks { + cinemax: Boolean + hbo: Boolean + showtime: Boolean + starz: Boolean +} + +input TvNetworksInput { + cinemax: Boolean + hbo: Boolean + showtime: Boolean + starz: Boolean +} + +enum TvPackage { + FAMILY + LATINO + NEWS + PREMIUM + SPORTS +} + +type TvPreference { + cable: Boolean + packages: [TvPackage] + serviceRequired: Boolean +} + +input TvPreferenceInput { + cable: Boolean + packages: [TvPackage] + serviceRequired: Boolean +} + +enum TvProductType { + cable + fiber + iptv + satellite +} + +type TvService { + additionalLanguages: [String] + channels: TvChannels + features: TvFeatures + kind: TvKind + longDescription: String + networks: TvNetworks + shortDescription: String +} + +input TvServiceInput { + additionalLanguages: [String] + channels: TvChannelsInput + features: TvFeaturesInput + kind: TvKind + longDescription: String + networks: TvNetworksInput + shortDescription: String +} + +input UnlinkEntityHomeServicesProviderInput { + entityId: ID! + homeServicesProviderId: ID! +} + +type UnlinkEntityHomeServicesProviderOutput { + deletedId: ID +} + +input UpdateDivisionUtilityProvidersInput { + divisionId: Int! + utilitiesConfig: DivisionUtilitiesConfigInput! + utilityProviders: [DivisionUtilityProviderInput] +} + +type UpdateDivisionUtilityProvidersOutput { + divisionId: Int! + utilitiesConfig: DivisionUtilitiesConfig + utilityProviders: [UtilityProvider] +} + +input UpdateHomeInput { + homeSize: AddressHomeSize + ownership: AddressOwnership +} + +type UpdateHomeOutput { + home: Home! +} + +input UpdateItemInput { + code: String + id: Int + itemId: Int @deprecated(reason: "Use `id` instead.") + metadata: JSON + status: Statuses +} + +type UpdateItemOutput { + """The metadata of the item.""" + metadata: JSON + """The status of the item.""" + status: String! + """Whether or not the item was updated.""" + updated: Boolean! +} + +input UpdateMoveInput { + date: Date + externalId: ID + fromAddress: MoveAddressInput + id: ID + toAddress: MoveAddressInput +} + +input UpdateMoveIqInventoryInput { + inventoryItemDeltas: [UpdateMoveIqInventoryItemInput] + moveId: ID +} + +input UpdateMoveIqInventoryItemInput { + cubesheetItemId: ID! + homeArea: MoveIqHomeArea! + quantity: Int! +} + +type UpdateMoveOutput { + move: Move +} + +input UpdatePublicSessionInput { + email: String + firstName: String + lastName: String + phoneNumber: String +} + +type UpdatePublicSessionOutput { + email: String + firstName: String + lastName: String + phoneNumber: String + source: String +} + +input UpdateRentersInsuranceConfigInput { + divisionId: ID! + rentersInsurance: RentersInsuranceConfigInput! +} + +type UpdateRentersInsuranceConfigOutput { + rentersInsurance: RentersInsuranceConfig! +} + +"""Update user identified by id, externalId, otherwise the current user.""" +input UpdateUserInput { + email: String + externalId: String + firstName: String + id: ID + lastName: String + middleName: String + onboardingCompleted: Boolean + phone: String + phoneVerificationMethod: PhoneVerificationMethodInput + suffixName: String +} + +type UpdateUserOutput { + user: User +} + +scalar UploadMoverDocumentInput + +type UploadMoverDocumentOutput { + """ID of the document that was uploaded.""" + documentId: String! + """Whether or not the document was uploaded.""" + uploaded: Boolean! +} + +"""Input used to upsert a company.""" +input UpsertCompanyInput { + categories: [String] + email: String + """Identifier(s) from your system. Must be unique across all your companies.""" + externalId: ID + """Updater's Identifier. Optional and can be ignored for create.""" + id: ID + logoUrl: Url + message: String + """Metadata (predefined) for a Company.""" + metadata: CompanyMetadataInput + name: String + parentExternalId: ID + phone: String + website: String +} + +type UpsertCompanyOutput { + company: Company +} + +input UpsertEntityItemDefinitionInput { + enabled: Boolean! + entityId: ID! + id: ID + itemDefinitionId: ID! + kind: EntityItemDefinitionKind! + reason: String! +} + +type UpsertEntityItemDefinitionOutput { + entityItemDefinition: EntityItemDefinition +} + +input UpsertLocationInput { + address: AddressInput + categories: [String] + """ + Stringified JSON for any custom data. For consistency, prefer camelCase keys. + \"{\\\\"yearFounded\\\\": \\\\"1949\\\\"}\" + """ + customFields: JSON + email: String + """Identifier(s) from your system. Must be unique across all your companies.""" + externalId: ID + """Updater's Identifier. Optional and can be ignored for create.""" + id: ID + """URL for location's logo.""" + logoUrl: Url + """Metadata (predefined) for a Location.""" + metadata: LocationMetadataInput + name: String + """Company's ID from your system to which this location belongs.""" + parentExternalId: ID + phone: String + """ + List of rules to be applied to this location. + If provided, this will replace ALL rules for this location. + """ + rules: [RuleInput] + status: LocationStatus + website: String +} + +type UpsertLocationOutput { + location: Location +} + +"""Input used to upsert a manager.""" +input UpsertManagerInput { + cellPhone: String + email: String + externalId: String + firstName: String + homePhone: String + """Updater's Identifier. Optional and can be ignored for create.""" + id: ID + lastName: String + parentExternalId: String + restrictedDivisionIds: [Int!] + roleIds: [Int!] +} + +type UpsertManagerOutput { + manager: Manager +} + +input UpsertPromotionInput { + categories: [String] + code: ID + """ + Stringified JSON for any custom data. For consistency, prefer camelCase keys. + \"{\\\\"yearFounded\\\\": \\\\"1949\\\\"}\" + """ + customFields: JSON + externalId: ID + forEntityExternalId: ID + forEntityId: ID + id: ID + """URL for promotions's image.""" + imageUrl: Url + """Metadata (predefined) for an Promotion.""" + metadata: PromotionMetadataInput + name: String + placements: [PromotionPlacement] + redemption: PromotionRedemptionInput + """ + List of rules to be applied to this promotion. + If provided, this will replace ALL rules for this promotion. + """ + rules: [RuleInput] + status: PromotionStatus +} + +type UpsertPromotionOutput { + promotion: Promotion +} + +input UpsertResidentOnboardingClosingDetailsInput { + """ + Any valid JSON that conforms to the expected structure of onboarding closing + costs data. This will be deprecated in the future and replaced by more + specific type definitions. + """ + closingDetailsData: JSON! + divisionId: ID! +} + +type UpsertResidentOnboardingClosingDetailsOutput { + closingDetailsData: JSON! +} + +input UpsertResidentOnboardingItemInput { + divisionId: ID! + """ + Any valid JSON data that should conform to the current expected structure of + onboarding items. The will be deprecated in the future and replaced by more + specific type definitions. + """ + itemData: JSON! +} + +type UpsertResidentOnboardingItemOutput { + itemData: JSON! +} + +input UpsertRuleInput { + definition: JSON + description: String + externalId: ID + id: ID + ruleableExternalId: ID + ruleableId: ID + ruleableType: RuleableType +} + +type UpsertRuleOutput { + rule: Rule +} + +input UpsertUtilityProviderInput { + businessPhone: String + email: String + externalId: String! + id: ID + kind: UtilityKinds + localPhone: String + logo: String + name: String + source: String! + state: String + website: String +} + +type UpsertUtilityProviderOutput { + utility: UtilityProvider +} + +input UpsertUtilityProviderPostalCodeInput { + appended: Boolean + externalId: ID! + id: ID + postalCode: String! + predominant: Boolean + source: String! + state: String! +} + +type UpsertUtilityProviderPostalCodeOutput { + utilityPostalCode: UtilityProviderPostalCode +} + +scalar Url + +type User implements UserInterface { + addresses: [Address!] + createdAt: DateTime + currentMove: Move + email: String! + externalId: String + firstName: String + id: ID! + lastName: String + metadata: UserMetadata + middleName: String + onboardingCompleted: Boolean! + phone: String + suffixName: String + updatedAt: DateTime + uuid: String! +} + +"""An authenticatable user""" +interface UserInterface { + createdAt: DateTime + email: String! + externalId: String + firstName: String + id: ID! + lastName: String + phone: String + updatedAt: DateTime +} + +type UserMetadata { + preferences: UserPreferences +} + +input UserMetadataInput { + preferences: UserPreferencesInput +} + +type UserOutput { + user: User! +} + +type UserPreferences { + allowCall: Boolean +} + +input UserPreferencesInput { + allowCall: Boolean +} + +input UtilityAccountNumberInput { + accountNumber: String! + itemId: Int! + utilityKind: UtilityKinds! + utilityProviderId: Int + utilityProviderName: String +} + +type UtilityAccountNumberOutput { + accountNumber: String + utilityProviderId: Int + utilityProviderName: String +} + +type UtilityEligibility { + deregulatedElectricEligibility: DeregulatedElectricEligibility +} + +enum UtilityKinds { + ELECTRIC + GAS + WATER + electric + gas + water +} + +type UtilityLegalIdentifiers { + identifier: String! + kind: String! +} + +enum UtilityMatchLevel { + POSTALCODE + PROPERTY +} + +type UtilityPlan { + contractTermMonths: Int + customerRightsUrl: String + description: String + distributorId: String + distributorName: String + earlyTerminationFee: Float + electricityFactsLabelUrl: String + estimatedMonthlyCost: UtilityPlanEstimatedMonthlyCost + greenPercentage: Float + isFixedPricing: Boolean + isGreen: Boolean + isVariablePricing: Boolean + legalIdentifiers: [UtilityLegalIdentifiers!] + name: String + nameId: String + partnerId: String + pricing: UtilityPlanPricing + providerId: String + providerImageUrl: String + providerName: String + providerPhone: String + providerPlanUrl: String + providerUrl: String + rateType: String + state: String + stateRenewablePercentage: Float + termsOfServiceUrl: String + type: String +} + +type UtilityPlanEnrollmentField { + content: String + dependentKey: String + dependentValue: Boolean + errorMessage: String + inputType: String! + key: String! + label: String! + options: [String] + regex: String + required: Boolean! +} + +type UtilityPlanEnrollmentInfo { + availableDates: UtilityPlanEnrollmentInfoAvailableDates + disclaimers: [String!] + fees: UtilityPlanEnrollmentInfoFees + requiredPlanEnrollmentFields: [UtilityPlanEnrollmentField!] + terms: [String!] +} + +type UtilityPlanEnrollmentInfoAvailableDates { + switchServiceDates: [Date!] +} + +type UtilityPlanEnrollmentInfoDistributorFees { + moveInCharges: String +} + +type UtilityPlanEnrollmentInfoFees { + distributorFees: UtilityPlanEnrollmentInfoDistributorFees +} + +input UtilityPlanEnrollmentInfoInput { + distributor: String! + provider: String! +} + +type UtilityPlanEnrollmentInfoOutput { + utilityPlanEnrollmentInfo: UtilityPlanEnrollmentInfo! +} + +type UtilityPlanEstimatedMonthlyCost { + max: Float + min: Float +} + +union UtilityPlanPricing = ElectricPlanPricing + +type UtilityProvider { + businessPhone: String + email: String + externalId: String + id: ID! + kind: UtilityKinds + localPhone: String + logo: String + name: String + source: String + state: String + website: String +} + +type UtilityProviderPostalCode { + """Denotes whether this record was appended to the 3rd party dataset""" + appended: Boolean! + externalId: ID! + id: ID! + postalCode: String! + """Denotes if the utility is predominant in this postal code""" + predominant: Boolean! + source: String! + state: String! +} + +type UtilitySubscription { + details: UtilitySubscriptionDetails + partner: String + partnerOrderId: String + plan: UtilityPlan + provider: String + providerOrderId: String + status: String! +} + +type UtilitySubscriptionDetails { + depositLink: String + depositText: String + finalStatus: String + fullName: String + nextStepsText: String + phone: String + providerData: JSON + providerName: String + serviceAddress: String + serviceStartDate: Date + switchDate: Date + userEmail: String +} + +input UtilitySubscriptionsInput { + moveId: ID! + status: String +} + +type UtilitySubscriptionsOutput { + electric: [UtilitySubscription!] + gas: [UtilitySubscription!] +} + +type VariationOutput { + datafile: String + datafileRevision: String + logs: [String!] + variationKey: String +} + +input VerifyEligiblePromotionsInput { + locationExternalId: ID + locationId: ID + promotionExternalId: ID + promotionId: ID + user: EligiblePromotionsUserInput! +} + +type VerifyEligiblePromotionsOutput { + eligiblePromotions: [EligiblePromotion] +} + +input VerifyPinInput { + pin: String! + userField: VerifyPinUserFieldInput! +} + +type VerifyPinOutput { + success: Boolean! +} + +enum VerifyPinUserFieldInput { + EMAIL + PHONE +} + +type VerticalConversion { + count: Int! +} + +type VerticalEligibility { + count: Int! +} + +type VerticalEngagement { + count: Int! +} + +type VerticalProvider { + count: Int! + name: String! +} + +type VerticalRevenue { + conversion: VerticalConversion! + eligibility: VerticalEligibility + engagement: VerticalEngagement! + providers: [VerticalProvider!]! +} + +type VerticalsReport { + homeservices: VerticalRevenue + insurance: VerticalRevenue + locals: VerticalRevenue + utilities: VerticalRevenue +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..db3849c --- /dev/null +++ b/yarn.lock @@ -0,0 +1,437 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@actions/core@^1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@actions/core/-/core-1.9.0.tgz#20c1baac5d4bd2508ba1fc3e5f3fc4b8a80d4082" + integrity sha512-5pbM693Ih59ZdUhgk+fts+bUWTnIdHV3kwOSr+QIoFHMLg7Gzhwm0cifDY/AG68ekEJAkHnQVpcy4f6GjmzBCA== + dependencies: + "@actions/http-client" "^2.0.1" + +"@actions/github@^5.0.3": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@actions/github/-/github-5.0.3.tgz#b305765d6173962d113451ea324ff675aa674f35" + integrity sha512-myjA/pdLQfhUGLtRZC/J4L1RXOG4o6aYdiEq+zr5wVVKljzbFld+xv10k1FX6IkIJtNxbAq44BdwSNpQ015P0A== + dependencies: + "@actions/http-client" "^2.0.1" + "@octokit/core" "^3.6.0" + "@octokit/plugin-paginate-rest" "^2.17.0" + "@octokit/plugin-rest-endpoint-methods" "^5.13.0" + +"@actions/http-client@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@actions/http-client/-/http-client-2.0.1.tgz#873f4ca98fe32f6839462a6f046332677322f99c" + integrity sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw== + dependencies: + tunnel "^0.0.6" + +"@octokit/auth-token@^2.4.4": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.5.0.tgz#27c37ea26c205f28443402477ffd261311f21e36" + integrity sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g== + dependencies: + "@octokit/types" "^6.0.3" + +"@octokit/core@^3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.6.0.tgz#3376cb9f3008d9b3d110370d90e0a1fcd5fe6085" + integrity sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q== + dependencies: + "@octokit/auth-token" "^2.4.4" + "@octokit/graphql" "^4.5.8" + "@octokit/request" "^5.6.3" + "@octokit/request-error" "^2.0.5" + "@octokit/types" "^6.0.3" + before-after-hook "^2.2.0" + universal-user-agent "^6.0.0" + +"@octokit/endpoint@^6.0.1": + version "6.0.12" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.12.tgz#3b4d47a4b0e79b1027fb8d75d4221928b2d05658" + integrity sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA== + dependencies: + "@octokit/types" "^6.0.3" + is-plain-object "^5.0.0" + universal-user-agent "^6.0.0" + +"@octokit/graphql@^4.5.8": + version "4.8.0" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.8.0.tgz#664d9b11c0e12112cbf78e10f49a05959aa22cc3" + integrity sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg== + dependencies: + "@octokit/request" "^5.6.0" + "@octokit/types" "^6.0.3" + universal-user-agent "^6.0.0" + +"@octokit/openapi-types@^12.11.0": + version "12.11.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-12.11.0.tgz#da5638d64f2b919bca89ce6602d059f1b52d3ef0" + integrity sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ== + +"@octokit/plugin-paginate-rest@^2.17.0": + version "2.21.3" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz#7f12532797775640dbb8224da577da7dc210c87e" + integrity sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw== + dependencies: + "@octokit/types" "^6.40.0" + +"@octokit/plugin-rest-endpoint-methods@^5.13.0": + version "5.16.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz#7ee8bf586df97dd6868cf68f641354e908c25342" + integrity sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw== + dependencies: + "@octokit/types" "^6.39.0" + deprecation "^2.3.1" + +"@octokit/request-error@^2.0.5", "@octokit/request-error@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.1.0.tgz#9e150357831bfc788d13a4fd4b1913d60c74d677" + integrity sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg== + dependencies: + "@octokit/types" "^6.0.3" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request@^5.6.0", "@octokit/request@^5.6.3": + version "5.6.3" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.6.3.tgz#19a022515a5bba965ac06c9d1334514eb50c48b0" + integrity sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A== + dependencies: + "@octokit/endpoint" "^6.0.1" + "@octokit/request-error" "^2.1.0" + "@octokit/types" "^6.16.1" + is-plain-object "^5.0.0" + node-fetch "^2.6.7" + universal-user-agent "^6.0.0" + +"@octokit/types@^6.0.3", "@octokit/types@^6.16.1", "@octokit/types@^6.39.0", "@octokit/types@^6.40.0": + version "6.41.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.41.0.tgz#e58ef78d78596d2fb7df9c6259802464b5f84a04" + integrity sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg== + dependencies: + "@octokit/openapi-types" "^12.11.0" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +before-after-hook@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e" + integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ== + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A== + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ== + +chalk@^2.0.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +columnify@^1.5.4: + version "1.6.0" + resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" + integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== + dependencies: + strip-ansi "^6.0.1" + wcwidth "^1.0.0" + +commander@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" + integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +cosmiconfig@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA== + dependencies: + clone "^1.0.2" + +deprecation@^2.0.0, deprecation@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +glob@^7.1.2: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +graphql-schema-linter@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/graphql-schema-linter/-/graphql-schema-linter-3.0.1.tgz#9b98d38357727c35bc6161bbda33f78a6956286e" + integrity sha512-+k4TGaWu1Ry740XiI/OZbzAC4omna5+S1rLjE0puPFSB99yORRdlX4U0+CWnwJuxh8FxLj5Ek2pDhsrSh9j5cQ== + dependencies: + chalk "^2.0.1" + columnify "^1.5.4" + commander "^3.0.0" + cosmiconfig "^5.2.1" + glob "^7.1.2" + +graphql@^16.5.0: + version "16.5.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.5.0.tgz#41b5c1182eaac7f3d47164fb247f61e4dfb69c85" + integrity sha512-qbHgh8Ix+j/qY+a/ZcJnFQ+j8ezakqPiHwPiZhV/3PgGlgf96QMBB5/f2rkiC9sgLoy/xvT6TSiaf2nTHJh5iA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg== + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw== + +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +node-fetch@^2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +once@^1.3.0, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +tunnel@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" + integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== + +universal-user-agent@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" + integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== + +wcwidth@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==