├── .java-version ├── fluxc-processor ├── .gitignore └── src │ └── main │ └── resources │ ├── wp-com-v3-endpoints.txt │ ├── jp-api-endpoints.txt │ ├── wporg-api-endpoints.txt │ ├── wp-api-endpoints.txt │ └── xmlrpc-endpoints.txt ├── fluxc-annotations ├── .gitignore ├── src │ └── main │ │ └── java │ │ └── org │ │ └── wordpress │ │ └── android │ │ └── fluxc │ │ └── annotations │ │ ├── action │ │ ├── IAction.java │ │ ├── NoPayload.java │ │ ├── ActionBuilder.java │ │ └── Action.java │ │ ├── AnnotationConfig.java │ │ ├── ActionEnum.java │ │ ├── Endpoint.java │ │ └── Action.java └── build.gradle ├── .editorconfig ├── fluxc ├── src │ └── main │ │ ├── res │ │ └── values │ │ │ └── strings.xml │ │ └── java │ │ └── org │ │ └── wordpress │ │ └── android │ │ └── fluxc │ │ ├── FluxCError.java │ │ ├── network │ │ ├── Response.java │ │ ├── rest │ │ │ ├── JsonObjectOrFalse.java │ │ │ ├── JsonObjectOrEmptyArray.java │ │ │ ├── wpcom │ │ │ │ ├── site │ │ │ │ │ ├── DesignatePrimaryDomainResponse.kt │ │ │ │ │ ├── ExportSiteResponse.java │ │ │ │ │ ├── SupportedCountryResponse.kt │ │ │ │ │ ├── PostFormatsResponse.java │ │ │ │ │ ├── SitesFeaturesRestResponse.kt │ │ │ │ │ ├── QuickStartCompletedResponse.java │ │ │ │ │ ├── SiteEditorsResponse.java │ │ │ │ │ ├── SupportedStateResponse.kt │ │ │ │ │ ├── JetpackCapabilitiesResponse.kt │ │ │ │ │ ├── InitiateAutomatedTransferResponse.java │ │ │ │ │ ├── UserRoleWPComRestResponse.java │ │ │ │ │ ├── DomainPriceResponse.kt │ │ │ │ │ ├── AutomatedTransferStatusResponse.java │ │ │ │ │ ├── PrivateAtomicCookieResponse.kt │ │ │ │ │ ├── DomainAvailabilityResponse.kt │ │ │ │ │ ├── NewSiteResponse.java │ │ │ │ │ ├── AutomatedTransferEligibilityCheckResponse.java │ │ │ │ │ ├── ConnectSiteInfoResponse.java │ │ │ │ │ └── DomainSuggestionResponse.java │ │ │ │ ├── jetpacktunnel │ │ │ │ │ └── JetpackTunnelResponse.kt │ │ │ │ ├── notifications │ │ │ │ │ ├── NotificationReadApiResponse.kt │ │ │ │ │ ├── NotificationSeenApiResponse.kt │ │ │ │ │ ├── RegisterDeviceRestResponse.kt │ │ │ │ │ ├── NotificationsApiResponse.kt │ │ │ │ │ ├── NotificationHashesApiResponse.kt │ │ │ │ │ └── NotificationHashApiResponse.kt │ │ │ │ ├── comment │ │ │ │ │ ├── CommentLikeWPComRestResponse.java │ │ │ │ │ └── CommentParent.java │ │ │ │ ├── account │ │ │ │ │ ├── SubscriptionResponse.java │ │ │ │ │ ├── UsernameSuggestionsResponse.java │ │ │ │ │ ├── AccountBoolResponse.java │ │ │ │ │ ├── AuthOptionsResponse.kt │ │ │ │ │ ├── IsAvailableResponse.java │ │ │ │ │ ├── signup │ │ │ │ │ │ └── AccountCreatedDto.kt │ │ │ │ │ └── DomainContactResponse.kt │ │ │ │ ├── auth │ │ │ │ │ ├── AuthEmailWPComRestResponse.java │ │ │ │ │ └── AppSecrets.java │ │ │ │ ├── theme │ │ │ │ │ └── ThemeDemoPageResponse.kt │ │ │ │ ├── scan │ │ │ │ │ ├── threat │ │ │ │ │ │ └── FixThreatsResponse.kt │ │ │ │ │ ├── FetchScanHistoryResponse.kt │ │ │ │ │ └── ScanStartResponse.kt │ │ │ │ ├── transactions │ │ │ │ │ └── SupportedDomainCountry.kt │ │ │ │ ├── post │ │ │ │ │ ├── GeoLocation.java │ │ │ │ │ ├── PostParent.java │ │ │ │ │ └── PostRemoteAutoSaveModel.kt │ │ │ │ ├── reader │ │ │ │ │ └── ReaderSearchSitesResponse.kt │ │ │ │ └── taxonomy │ │ │ │ │ └── TermWPComRestResponse.java │ │ │ └── wpapi │ │ │ │ ├── applicationpasswords │ │ │ │ ├── ApplicationPasswordUUID.kt │ │ │ │ ├── ApplicationPasswordCredentials.kt │ │ │ │ └── ApplicationPasswordsListener.kt │ │ │ │ ├── WPAPIResponse.kt │ │ │ │ ├── WPAPINetworkError.kt │ │ │ │ └── OnWPAPIErrorListener.kt │ │ ├── xmlrpc │ │ │ ├── site │ │ │ │ └── SiteXMLRPCResponse.java │ │ │ ├── XMLRPCException.java │ │ │ └── XMLRPCFault.java │ │ ├── utils │ │ │ ├── StatsGranularity.kt │ │ │ ├── CurrentDateUtils.kt │ │ │ └── JsonExt.kt │ │ ├── common │ │ │ └── comments │ │ │ │ └── CommentsApiPayload.kt │ │ ├── AcceptHeaderStrategy.kt │ │ └── HttpMethod.kt │ │ ├── model │ │ ├── revisions │ │ │ ├── RevisionsModel.kt │ │ │ ├── LocalDiffType.kt │ │ │ └── DiffOperations.kt │ │ ├── stats │ │ │ ├── SummaryModel.kt │ │ │ ├── PublicizeModel.kt │ │ │ ├── InsightTypeModel.kt │ │ │ ├── subscribers │ │ │ │ ├── SubscribersModel.kt │ │ │ │ └── PostsModel.kt │ │ │ ├── LoadMode.kt │ │ │ ├── VisitsModel.kt │ │ │ ├── time │ │ │ │ ├── FileDownloadsModel.kt │ │ │ │ ├── SearchTermsModel.kt │ │ │ │ ├── VideoPlaysModel.kt │ │ │ │ ├── VisitsAndViewsModel.kt │ │ │ │ ├── AuthorsModel.kt │ │ │ │ ├── CountryViewsModel.kt │ │ │ │ ├── PostAndPageViewsModel.kt │ │ │ │ ├── ClicksModel.kt │ │ │ │ └── ReferrersModel.kt │ │ │ ├── TagsModel.kt │ │ │ ├── InsightsMostPopularModel.kt │ │ │ ├── InsightTypeDataModel.kt │ │ │ ├── InsightsAllTimeModel.kt │ │ │ ├── FollowersModel.kt │ │ │ ├── CommentsModel.kt │ │ │ ├── InsightsLatestPostModel.kt │ │ │ ├── YearsInsightsModel.kt │ │ │ ├── PostDetailStatsModel.kt │ │ │ └── insights │ │ │ │ └── PostingActivityModel.kt │ │ ├── blaze │ │ │ ├── BlazeTargetingDevice.kt │ │ │ ├── BlazeTargetingTopic.kt │ │ │ ├── BlazeTargetingLanguage.kt │ │ │ ├── BlazeAdForecast.kt │ │ │ ├── BlazeAdSuggestion.kt │ │ │ ├── BlazeCampaignType.kt │ │ │ ├── BlazeTargetingLocation.kt │ │ │ ├── BlazeCampaignObjective.kt │ │ │ ├── BlazeTargetingParameters.kt │ │ │ └── BlazeCampaignsModel.kt │ │ ├── notification │ │ │ └── NoteIdSet.kt │ │ ├── activity │ │ │ ├── ActivityTypeModel.kt │ │ │ └── BackupDownloadStatusModel.kt │ │ ├── list │ │ │ ├── AuthorFilter.kt │ │ │ └── ListOrder.kt │ │ ├── LocalOrRemoteId.kt │ │ ├── PlanModel.kt │ │ ├── jetpack │ │ │ └── JetpackUser.kt │ │ ├── jetpacksocial │ │ │ └── JetpackSocial.kt │ │ ├── BloggingRemindersModel.kt │ │ ├── bloggingprompts │ │ │ └── BloggingPromptModel.kt │ │ ├── DomainModel.kt │ │ ├── vertical │ │ │ └── VerticalSegmentModel.kt │ │ ├── encryptedlogging │ │ │ └── EncryptionUtils.kt │ │ ├── SiteHomepageSettings.kt │ │ ├── scan │ │ │ └── threat │ │ │ │ └── FixThreatStatusModel.kt │ │ └── plugin │ │ │ └── PluginDirectoryType.java │ │ ├── store │ │ ├── StockMediaUploadItem.kt │ │ ├── StockMediaItem.kt │ │ ├── InvalidateDeviceRegistration.kt │ │ └── GetDeviceRegistrationStatus.kt │ │ ├── utils │ │ ├── CurrentTimeProvider.kt │ │ ├── TimeZoneProvider.kt │ │ ├── BuildConfigWrapper.kt │ │ ├── WhatsNewAppVersionUtils.kt │ │ ├── AppLogWrapper.kt │ │ ├── extensions │ │ │ ├── MapExtensions.kt │ │ │ └── StringExtensions.kt │ │ ├── DateTimeUtilsWrapper.kt │ │ ├── CommentErrorUtilsWrapper.kt │ │ ├── PreferenceUtils.kt │ │ └── JetpackAITranscriptionUtils.kt │ │ ├── action │ │ ├── ProductAction.kt │ │ ├── PlanOffersAction.kt │ │ ├── VerticalAction.kt │ │ ├── EditorThemeAction.kt │ │ ├── StockMediaAction.java │ │ ├── EncryptedLogAction.kt │ │ ├── WhatsNewAction.kt │ │ └── JetpackAction.java │ │ ├── logging │ │ └── FluxCCrashLogger.kt │ │ ├── module │ │ ├── ReleaseToolsModule.java │ │ ├── ApplicationPasswordsClientId.kt │ │ ├── AppContextModule.java │ │ └── ApplicationPasswordsModule.kt │ │ └── persistence │ │ ├── coverters │ │ ├── BlazeCampaignsDateConverter.kt │ │ ├── StringListConverter.kt │ │ └── BloggingPromptDateConverter.kt │ │ └── UpdateAllExceptId.java └── gradle.properties-example ├── example ├── src │ ├── androidTest │ │ ├── resources │ │ │ ├── jitm-dismiss-success.json │ │ │ ├── jitm-fetch-success-empty.json │ │ │ ├── change-username-success.json │ │ │ ├── wc-has-orders-response-success-missing-data-key.json │ │ │ ├── mark-notification-read-response-success.json │ │ │ ├── post-upload-response-success.json │ │ │ ├── wc-has-orders-response-success-no-orders.json │ │ │ ├── eligible-for-automated-transfer-response-success.json │ │ │ ├── mark-notification-seen-response-success.json │ │ │ ├── wc-order-shipment-providers-failed.json │ │ │ ├── fetch-auth-options-response-success-unverified-email.json │ │ │ ├── update-plugin-success-response.json │ │ │ ├── wc-response-failure-invalid-param.json │ │ │ ├── wc-revenue-stats-response-empty.json │ │ │ ├── authentication-error-response.json │ │ │ ├── wc-pay-store-location-for-site-address-missing-without-url-error.json │ │ │ ├── wc-fetch-invalid-product-id.json │ │ │ ├── wc-fetch-product-response-manage-stock-true.json │ │ │ ├── wc-fetch-product-response-manage-stock-false.json │ │ │ ├── wc-fetch-product-response-manage-stock-parent.json │ │ │ ├── wc-order-action-send-order-details-success.json │ │ │ ├── authentication-success-response.json │ │ │ ├── wc-pay-fetch-connection-token-response-success.json │ │ │ ├── wc-order-notes-response-failure-invalid-id.json │ │ │ ├── wc-pay-store-location-for-site-address-missing-with-empty-url-error.json │ │ │ ├── wc-pay-update-gateway-invalid-data-response-error.json │ │ │ ├── jitm-dismiss-failure.json │ │ │ ├── jitm-fetch-failure.json │ │ │ ├── wc-pay-capture-terminal-payment-response-success.json │ │ │ ├── wc-product-review-response-failure-invalid-id.json │ │ │ ├── automated-transfer-status-complete-response-success.json │ │ │ ├── automated-transfer-status-incomplete-response-success.json │ │ │ ├── jetpack-tunnel-root-response-failure.json │ │ │ ├── jetpack-tunnel-wp-v2-settings-response-success.json │ │ │ ├── wc-pay-store-location-for-site-invalid-postal-code-error.json │ │ │ ├── wc-delete-product-variation-image-failure.json │ │ │ ├── wc-pay-fetch-gateway-response-error.json │ │ │ ├── wc-pay-fetch-all-gateways-response-error.json │ │ │ ├── wc-pay-update-gateway-response-error.json │ │ │ ├── jetpack-tunnel-timeout-error.json │ │ │ ├── wc-pay-capture-terminal-payment-response-missing-order.json │ │ │ ├── fetch-auth-options-response-failure-email-login-not-allowed.json │ │ │ ├── wc-pay-capture-terminal-payment-response-unexpected-error.json │ │ │ ├── wc-order-receipt-success.json │ │ │ ├── wc-pay-capture-terminal-payment-response-uncapturable.json │ │ │ ├── wc-pay-store-location-for-site-address-missing-with-url-error.json │ │ │ ├── wc-pay-capture-terminal-payment-response-capture-error.json │ │ │ ├── initiate-automated-transfer-response-success.json │ │ │ ├── wc-pay-fetch-transactions-summary-response.json │ │ │ ├── wc-pay-fetch-gateway-response-success.json │ │ │ ├── wc-pay-update-gateway-response-success.json │ │ │ ├── wc-pay-load-account-response-empty-status.json │ │ │ ├── wc-pay-load-account-response-current-deadline.json │ │ │ ├── wc-pay-load-account-response-enabled-status.json │ │ │ ├── wc-pay-load-account-response-new-status.json │ │ │ ├── wc-pay-load-account-response-restricted-soon-status.json │ │ │ ├── stripe-extension-statement-descriptor-null.json │ │ │ ├── wc-pay-fetch-all-gateways-response-success.json │ │ │ ├── wc-pay-load-account-response-is-live-account.json │ │ │ ├── wc-pay-capture-terminal-payment-response-amount-too-small.json │ │ │ ├── fetch-notification-hashes-response-success.json │ │ │ ├── wc-add-product-category-response-success.json │ │ │ ├── wc-fetch-product-shipping-class-response-success.json │ │ │ ├── jetpack-tunnel-root-response-success.json │ │ │ └── wc-order-note-post-response-success.json │ │ ├── assets │ │ │ ├── pony.jpg │ │ │ └── pony.mp4 │ │ └── java │ │ │ └── org │ │ │ └── wordpress │ │ │ └── android │ │ │ └── fluxc │ │ │ ├── release │ │ │ ├── ReleaseStack_CardsTest.kt │ │ │ └── ReleaseStack_XMLRPCBase.java │ │ │ ├── utils │ │ │ └── WellSqlUtils.java │ │ │ └── ditests │ │ │ └── OkHttpTestComponent.kt │ ├── test │ │ ├── resources │ │ │ ├── wp │ │ │ │ ├── mobile │ │ │ │ │ ├── remote-config-success.json │ │ │ │ │ └── feature-flags-success.json │ │ │ │ ├── qrcode │ │ │ │ │ ├── authenticate-success.json │ │ │ │ │ └── validate-success.json │ │ │ │ ├── jetpack │ │ │ │ │ └── scan │ │ │ │ │ │ ├── jp-backup-daily-scan-unavailable.json │ │ │ │ │ │ ├── jp-backup-daily-start-scan-error.json │ │ │ │ │ │ ├── jp-complete-scan-scanning.json │ │ │ │ │ │ ├── jp-complete-scan-idle.json │ │ │ │ │ │ └── threat │ │ │ │ │ │ ├── threat-file-with-context-as-string.json │ │ │ │ │ │ ├── threat-fixable.json │ │ │ │ │ │ ├── threat-vulnerable-extension.json │ │ │ │ │ │ └── threat-database.json │ │ │ │ ├── dashboard │ │ │ │ │ └── cards_with_errors.json │ │ │ │ └── blaze │ │ │ │ │ └── blaze-campaigns.json │ │ │ ├── mockito-extensions │ │ │ │ └── org.mockito.plugins.MockMaker │ │ │ ├── wc │ │ │ │ ├── visitor-stats-fields.json │ │ │ │ ├── print-shipping-labels.json │ │ │ │ ├── product-attribute-delete.json │ │ │ │ ├── attribute-term-operation-response.json │ │ │ │ ├── product-attribute-create.json │ │ │ │ ├── product-attribute-update.json │ │ │ │ ├── order-shipping-lines.json │ │ │ │ └── site-setting-option-response.json │ │ │ ├── notifications │ │ │ │ └── subject-response.json │ │ │ └── activitylog │ │ │ │ └── body-response.json │ │ └── java │ │ │ └── org │ │ │ └── wordpress │ │ │ └── android │ │ │ └── fluxc │ │ │ ├── TestSiteSqlUtils.kt │ │ │ ├── JsonLoaderUtils.kt │ │ │ ├── wc │ │ │ ├── refunds │ │ │ │ └── RefundFixtures.kt │ │ │ └── utils │ │ │ │ └── SiteTestUtils.kt │ │ │ ├── CoroutinesTestUtils.kt │ │ │ ├── WellSqlTestUtils.java │ │ │ ├── utils │ │ │ ├── BloggingPromptUtilsTest.kt │ │ │ └── CurrentTimeProviderTest.kt │ │ │ ├── converters │ │ │ ├── StringListConverterTest.kt │ │ │ └── BloggingPromptDateConverterTest.kt │ │ │ ├── notifications │ │ │ └── NotificationTestUtils.kt │ │ │ └── endpoints │ │ │ └── WPComV3EndpointTest.kt │ ├── main │ │ ├── ic_launcher-web.png │ │ ├── res │ │ │ ├── mipmap-hdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-mdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xhdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxhdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxxhdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── values │ │ │ │ ├── attrs.xml │ │ │ │ ├── strings.xml │ │ │ │ └── dimens.xml │ │ │ ├── xml │ │ │ │ └── provider_paths.xml │ │ │ ├── drawable │ │ │ │ ├── ic_check.xml │ │ │ │ └── ic_clear.xml │ │ │ └── layout │ │ │ │ ├── fragment_woo_customers_search.xml │ │ │ │ ├── media_list_item.xml │ │ │ │ ├── list_item_skeleton.xml │ │ │ │ └── list_item_section_header.xml │ │ ├── assets │ │ │ └── jetpack-ai-transcription-test-audio-file.m4a │ │ └── java │ │ │ └── org │ │ │ └── wordpress │ │ │ └── android │ │ │ └── fluxc │ │ │ └── example │ │ │ ├── di │ │ │ ├── WCOrderListActivityModule.kt │ │ │ ├── ApplicationModule.kt │ │ │ └── MainActivityModule.kt │ │ │ ├── utils │ │ │ ├── ArrayUtils.kt │ │ │ └── ViewGroupExt.kt │ │ │ └── FragmentExt.kt │ └── debug │ │ └── AndroidManifest.xml ├── properties-example │ └── api.properties └── proguard-rules.pro ├── plugins └── woocommerce │ └── src │ ├── test │ ├── resources │ │ └── mockito-extensions │ │ │ └── org.mockito.plugins.MockMaker │ └── java │ │ └── org │ │ └── wordpress │ │ └── android │ │ └── fluxc │ │ └── persistence │ │ └── dao │ │ └── FakeTransactionExecutor.kt │ └── main │ └── kotlin │ └── org │ └── wordpress │ └── android │ └── fluxc │ ├── model │ ├── WCBundleStats.kt │ ├── metadata │ │ └── MetaDataParentItemType.kt │ ├── payments │ │ └── inperson │ │ │ ├── WCConnectionTokenResult.kt │ │ │ └── WCPaymentTransactionsSummaryResult.kt │ ├── WCProductBundleItemReport.kt │ ├── coupons │ │ └── CouponReport.kt │ ├── ProductWithMetaData.kt │ ├── WCVisitorStatsSummary.kt │ ├── order │ │ ├── CouponLine.kt │ │ ├── ShippingLine.kt │ │ └── UpdateOrderRequest.kt │ ├── WCGiftCardStats.kt │ ├── WCShippingMethod.kt │ ├── gateways │ │ └── WCGatewayModel.kt │ ├── WCSSRModel.kt │ ├── taxes │ │ ├── TaxBasedOnSettingEntity.kt │ │ ├── WCTaxClassMapper.kt │ │ └── TaxRateEntity.kt │ ├── shippinglabels │ │ ├── WCShippingLabelPaperSize.kt │ │ ├── WCShippingRatesResult.kt │ │ └── WCAddressVerificationResult.kt │ ├── WCProductComponent.kt │ └── customer │ │ └── WCCustomerFromAnalytics.kt │ ├── persistence │ ├── mappers │ │ └── MappingDatabaseException.kt │ ├── TransactionExecutor.kt │ ├── entity │ │ ├── ProductBasedIdentification.kt │ │ └── ShippingMethodEntity.kt │ └── converters │ │ ├── LocalIdConverter.kt │ │ ├── RemoteIdConverter.kt │ │ ├── BigDecimalConverter.kt │ │ ├── DiscountTypeConverter.kt │ │ ├── ISO8601DateConverter.kt │ │ ├── StringListConverter.kt │ │ └── LongListConverter.kt │ ├── network │ └── rest │ │ └── wpcom │ │ └── wc │ │ ├── addons │ │ ├── mappers │ │ │ └── MappingRemoteException.kt │ │ └── dto │ │ │ └── AddOnGroupDto.kt │ │ ├── order │ │ ├── OrderStatusApiResponse.kt │ │ ├── OrderCountApiResponse.kt │ │ ├── OrderMappingConst.kt │ │ ├── OrderReceiptResponse.kt │ │ ├── OrderSummaryApiResponse.kt │ │ └── OrderShipmentTrackingApiResponse.kt │ │ ├── system │ │ └── WCApiVersionResponse.kt │ │ ├── product │ │ ├── ProductCountApiResponse.kt │ │ ├── BatchProductApiResponse.kt │ │ ├── BatchAddProductTagApiResponse.kt │ │ ├── ProductShippingClassApiResponse.kt │ │ ├── ProductTagApiResponse.kt │ │ ├── attributes │ │ │ ├── terms │ │ │ │ └── AttributeTermApiResponse.kt │ │ │ └── AttributeApiResponse.kt │ │ ├── CoreProductVisibility.kt │ │ ├── CoreProductStatus.kt │ │ ├── CoreProductType.kt │ │ ├── CoreProductBackOrders.kt │ │ ├── CoreProductTaxStatus.kt │ │ ├── BatchProductVariationsApiResponse.kt │ │ └── ProductReviewApiResponse.kt │ │ ├── payments │ │ └── inperson │ │ │ ├── CapturePaymentApiResponse.kt │ │ │ └── ConnectionTokenApiResponse.kt │ │ ├── orderstats │ │ ├── OrderStatsApiResponse.kt │ │ ├── RevenueStatsApiResponse.kt │ │ ├── VisitorStatsSummaryApiResponse.kt │ │ └── VisitorStatsApiResponse.kt │ │ ├── customer │ │ └── CustomerSorting.kt │ │ ├── shippinglabels │ │ ├── SLCreationEligibilityApiResponse.kt │ │ ├── ShippingLabelStatusApiResponse.kt │ │ ├── ShippingLabelApiResponse.kt │ │ └── UpdateSettingsApiRequest.kt │ │ ├── SiteSettingsResponse.kt │ │ ├── bundlestats │ │ ├── BundleStatsApiResponse.kt │ │ └── BundlesReportApiResponse.kt │ │ ├── onboarding │ │ └── OnboardingTasksResponse.kt │ │ ├── coupons │ │ └── CouponReportDto.kt │ │ └── tracker │ │ └── TrackerStore.kt │ ├── domain │ └── GlobalAddonGroup.kt │ └── utils │ ├── BigDecimalExt.kt │ ├── MapExt.kt │ ├── JsonUtils.kt │ └── NonNegativeIntJsonDeserializer.kt ├── .idea ├── copyright │ └── profiles_settings.xml ├── codeStyles │ └── codeStyleConfig.xml ├── encodings.xml ├── vcs.xml └── externalDependencies.xml ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── jitpack.yml ├── .configure-files ├── api.properties.enc ├── tests.properties.enc ├── firebase.secrets.json.enc └── tests.properties-extra.enc ├── config ├── lint │ └── lint.xml └── gradle │ ├── gradle_build_scan.gradle │ └── gradle_build_cache.gradle ├── .buildkite ├── shared-pipeline-vars ├── publish-fluxc-annotations.sh ├── publish-fluxc-processor.sh ├── schedules │ └── dependency-analysis.yml └── woocommerce-tests.sh ├── .github └── workflows │ └── gradle-wrapper-validation.yml ├── gradle.properties-example ├── tests └── api │ └── build.gradle └── .configure /.java-version: -------------------------------------------------------------------------------- 1 | 17.0 2 | -------------------------------------------------------------------------------- /fluxc-processor/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /fluxc-annotations/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | [*.{kt,kts}] 2 | max_line_length=120 3 | -------------------------------------------------------------------------------- /fluxc/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/jitm-dismiss-success.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": true 3 | } -------------------------------------------------------------------------------- /example/src/androidTest/resources/jitm-fetch-success-empty.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": [] 3 | } -------------------------------------------------------------------------------- /fluxc-processor/src/main/resources/wp-com-v3-endpoints.txt: -------------------------------------------------------------------------------- 1 | /sites/$site/blogging-prompts -------------------------------------------------------------------------------- /example/src/test/resources/wp/mobile/remote-config-success.json: -------------------------------------------------------------------------------- 1 | { "jp-deadline": "2022-10-10"} -------------------------------------------------------------------------------- /example/src/test/resources/wp/qrcode/authenticate-success.json: -------------------------------------------------------------------------------- 1 | {"authenticated":true} 2 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/change-username-success.json: -------------------------------------------------------------------------------- 1 | { 2 | "success":true 3 | } 4 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-has-orders-response-success-missing-data-key.json: -------------------------------------------------------------------------------- 1 | { 2 | } 3 | -------------------------------------------------------------------------------- /example/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker: -------------------------------------------------------------------------------- 1 | mock-maker-inline 2 | -------------------------------------------------------------------------------- /example/src/test/resources/wp/mobile/feature-flags-success.json: -------------------------------------------------------------------------------- 1 | { "flag-1": true, "flag-2": false} -------------------------------------------------------------------------------- /example/src/test/resources/wc/visitor-stats-fields.json: -------------------------------------------------------------------------------- 1 | [ 2 | "period", 3 | "visitors" 4 | ] 5 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/mark-notification-read-response-success.json: -------------------------------------------------------------------------------- 1 | {"updated":[],"success":true} 2 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker: -------------------------------------------------------------------------------- 1 | mock-maker-inline 2 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/post-upload-response-success.json: -------------------------------------------------------------------------------- 1 | { 2 | "ID":7970, 3 | "type":"post" 4 | } 5 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-has-orders-response-success-no-orders.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": [ 3 | ] 4 | } 5 | -------------------------------------------------------------------------------- /.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/eligible-for-automated-transfer-response-success.json: -------------------------------------------------------------------------------- 1 | { 2 | "is_eligible":true 3 | } 4 | -------------------------------------------------------------------------------- /fluxc-processor/src/main/resources/jp-api-endpoints.txt: -------------------------------------------------------------------------------- 1 | /module/stats/active 2 | /connection/url 3 | /connection/data 4 | /jitm -------------------------------------------------------------------------------- /example/src/androidTest/resources/mark-notification-seen-response-success.json: -------------------------------------------------------------------------------- 1 | {"last_seen_time":"1543265347","success":true} 2 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-order-shipment-providers-failed.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "failed" : "" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /example/src/test/resources/wp/qrcode/validate-success.json: -------------------------------------------------------------------------------- 1 | {"browser":"Chrome","location":"Secaucus, New Jersey","success":true} 2 | -------------------------------------------------------------------------------- /example/properties-example/api.properties: -------------------------------------------------------------------------------- 1 | # OAuth credentials for example app 2 | wp.OAUTH.APP.ID = wp 3 | wp.OAUTH.APP.SECRET = wp 4 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/fetch-auth-options-response-success-unverified-email.json: -------------------------------------------------------------------------------- 1 | {"passwordless":false,"email_verified":false} 2 | -------------------------------------------------------------------------------- /fluxc-processor/src/main/resources/wporg-api-endpoints.txt: -------------------------------------------------------------------------------- 1 | /plugins/info/{version}#String/ 2 | /plugins/info/{version}#String/{slug}#String 3 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wordpress-mobile/WordPress-FluxC-Android/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /jitpack.yml: -------------------------------------------------------------------------------- 1 | before_install: 2 | - cp gradle.properties-example gradle.properties && cp -a example/properties-example/ example/properties/ 3 | -------------------------------------------------------------------------------- /.configure-files/api.properties.enc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wordpress-mobile/WordPress-FluxC-Android/HEAD/.configure-files/api.properties.enc -------------------------------------------------------------------------------- /example/src/main/ic_launcher-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wordpress-mobile/WordPress-FluxC-Android/HEAD/example/src/main/ic_launcher-web.png -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/FluxCError.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc; 2 | 3 | public interface FluxCError {} 4 | -------------------------------------------------------------------------------- /.configure-files/tests.properties.enc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wordpress-mobile/WordPress-FluxC-Android/HEAD/.configure-files/tests.properties.enc -------------------------------------------------------------------------------- /example/src/androidTest/resources/update-plugin-success-response.json: -------------------------------------------------------------------------------- 1 | { 2 | "slug": "UPDATE_PLUGIN_SLUG", 3 | "name": "UPDATE_PLUGIN_NAME" 4 | } 5 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-response-failure-invalid-param.json: -------------------------------------------------------------------------------- 1 | {"error":"rest_invalid_param","message":"Invalid parameter(s): include"} 2 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-revenue-stats-response-empty.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "totals": [], 4 | "intervals": [] 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /example/src/androidTest/assets/pony.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wordpress-mobile/WordPress-FluxC-Android/HEAD/example/src/androidTest/assets/pony.jpg -------------------------------------------------------------------------------- /example/src/androidTest/assets/pony.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wordpress-mobile/WordPress-FluxC-Android/HEAD/example/src/androidTest/assets/pony.mp4 -------------------------------------------------------------------------------- /example/src/androidTest/resources/authentication-error-response.json: -------------------------------------------------------------------------------- 1 | {"error":"invalid_request","error_description":"Incorrect username or password."} 2 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-pay-store-location-for-site-address-missing-without-url-error.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": "store_address_is_incomplete" 3 | } -------------------------------------------------------------------------------- /fluxc/gradle.properties-example: -------------------------------------------------------------------------------- 1 | fluxc.ENABLE_WPAPI = false 2 | wp.ENABLE_DATABASE_DOWNGRADE = true 3 | android.useAndroidX=true 4 | android.enableJetifier=true -------------------------------------------------------------------------------- /.configure-files/firebase.secrets.json.enc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wordpress-mobile/WordPress-FluxC-Android/HEAD/.configure-files/firebase.secrets.json.enc -------------------------------------------------------------------------------- /.configure-files/tests.properties-extra.enc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wordpress-mobile/WordPress-FluxC-Android/HEAD/.configure-files/tests.properties-extra.enc -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-fetch-invalid-product-id.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": "woocommerce_rest_product_invalid_id", 3 | "message": "Invalid ID." 4 | } 5 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-fetch-product-response-manage-stock-true.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "id": 1537, 4 | "manage_stock": true 5 | } 6 | } -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/Response.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network; 2 | 3 | public interface Response { 4 | } 5 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-fetch-product-response-manage-stock-false.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "id": 1537, 4 | "manage_stock": false 5 | } 6 | } -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-fetch-product-response-manage-stock-parent.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "id": 1537, 4 | "manage_stock": "parent" 5 | } 6 | } -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-order-action-send-order-details-success.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "message": "Order details email sent to customer." 4 | } 5 | } -------------------------------------------------------------------------------- /example/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wordpress-mobile/WordPress-FluxC-Android/HEAD/example/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wordpress-mobile/WordPress-FluxC-Android/HEAD/example/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/src/androidTest/resources/authentication-success-response.json: -------------------------------------------------------------------------------- 1 | {"access_token":"mocked_token","token_type":"bearer","blog_id":"0","blog_url":null,"scope":"global"} 2 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-pay-fetch-connection-token-response-success.json: -------------------------------------------------------------------------------- 1 | { 2 | "data" : { 3 | "secret": "abcdef", 4 | "test_mode": true 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /example/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wordpress-mobile/WordPress-FluxC-Android/HEAD/example/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wordpress-mobile/WordPress-FluxC-Android/HEAD/example/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wordpress-mobile/WordPress-FluxC-Android/HEAD/example/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /config/lint/lint.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-order-notes-response-failure-invalid-id.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": "woocommerce_rest_shop_order_invalid_id", 3 | "message": "Invalid ID." 4 | } 5 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-pay-store-location-for-site-address-missing-with-empty-url-error.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": "store_address_is_incomplete", 3 | "message": "" 4 | } -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-pay-update-gateway-invalid-data-response-error.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": "rest_invalid_param", 3 | "message": "Invalid parameter(s): enabled" 4 | } -------------------------------------------------------------------------------- /example/src/androidTest/resources/jitm-dismiss-failure.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": "server_error", 3 | "message": "Unexpected server error", 4 | "data": { 5 | "status": 500 6 | } 7 | } -------------------------------------------------------------------------------- /example/src/androidTest/resources/jitm-fetch-failure.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": "server_error", 3 | "message": "Unexpected server error", 4 | "data": { 5 | "status": 500 6 | } 7 | } -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-pay-capture-terminal-payment-response-success.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "status": "succeeded", 4 | "id": "dummy_payment_id" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-product-review-response-failure-invalid-id.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": "woocommerce_rest_review_invalid_id", 3 | "message": "Invalid review ID." 4 | } 5 | -------------------------------------------------------------------------------- /example/src/test/resources/wc/print-shipping-labels.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "mimeType": "application\/pdf", 4 | "b64Content": "12345=", 5 | "success": true 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/automated-transfer-status-complete-response-success.json: -------------------------------------------------------------------------------- 1 | { 2 | "status":"complete", 3 | "transfer_id":197364, 4 | "step":7, 5 | "total":7 6 | } 7 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/automated-transfer-status-incomplete-response-success.json: -------------------------------------------------------------------------------- 1 | { 2 | "status":"active", 3 | "transfer_id":197364, 4 | "step":3, 5 | "total":7 6 | } 7 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/jetpack-tunnel-root-response-failure.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": "rest_no_route", 3 | "message": "No route was found matching the URL and request method" 4 | } 5 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/jetpack-tunnel-wp-v2-settings-response-success.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "title": "New Title", 4 | "description": "New Description" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-pay-store-location-for-site-invalid-postal-code-error.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": "postal_code_invalid", 3 | "message": "Error: Invalid US postal code" 4 | } -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/JsonObjectOrFalse.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest; 2 | 3 | public abstract class JsonObjectOrFalse {} 4 | -------------------------------------------------------------------------------- /.idea/codeStyles/codeStyleConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-delete-product-variation-image-failure.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": "woocommerce_variation_invalid_image_id", 3 | "message": "#0 is an invalid image ID." 4 | } 5 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/revisions/RevisionsModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.revisions 2 | 3 | class RevisionsModel(var revisions: List) 4 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/JsonObjectOrEmptyArray.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest; 2 | 3 | public abstract class JsonObjectOrEmptyArray {} 4 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-pay-fetch-gateway-response-error.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": "wcpay_server_error", 3 | "message": "Unexpected server error", 4 | "data": { 5 | "status": 500 6 | } 7 | } -------------------------------------------------------------------------------- /example/src/test/resources/wp/jetpack/scan/jp-backup-daily-scan-unavailable.json: -------------------------------------------------------------------------------- 1 | { 2 | "state": "unavailable", 3 | "threats": null, 4 | "has_cloud": true, 5 | "reason": "missing_scan_capability" 6 | } 7 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-pay-fetch-all-gateways-response-error.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": "wcpay_server_error", 3 | "message": "Unexpected server error", 4 | "data": { 5 | "status": 500 6 | } 7 | } -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-pay-update-gateway-response-error.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": "wcpay_server_error", 3 | "message": "Unexpected server error", 4 | "data": { 5 | "status": 500 6 | } 7 | } -------------------------------------------------------------------------------- /example/src/main/assets/jetpack-ai-transcription-test-audio-file.m4a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wordpress-mobile/WordPress-FluxC-Android/HEAD/example/src/main/assets/jetpack-ai-transcription-test-audio-file.m4a -------------------------------------------------------------------------------- /.idea/externalDependencies.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/stats/SummaryModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.stats 2 | 3 | data class SummaryModel(val likes: Int, val comments: Int, val followers: Int) 4 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/jetpack-tunnel-timeout-error.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": "http_request_failed", 3 | "message": "cURL error 28: Operation timed out after 5001 milliseconds with 11111 bytes received" 4 | } 5 | -------------------------------------------------------------------------------- /fluxc-annotations/src/main/java/org/wordpress/android/fluxc/annotations/action/IAction.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.annotations.action; 2 | 3 | public interface IAction { 4 | String toString(); 5 | } 6 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-pay-capture-terminal-payment-response-missing-order.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "wcpay_missing_order", 3 | "message": "Order not found", 4 | "data": { 5 | "status": 404 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /fluxc-annotations/src/main/java/org/wordpress/android/fluxc/annotations/action/NoPayload.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.annotations.action; 2 | 3 | public class NoPayload { 4 | private NoPayload() {} 5 | } 6 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/blaze/BlazeTargetingDevice.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.blaze 2 | 3 | class BlazeTargetingDevice( 4 | val id: String, 5 | val name: String 6 | ) 7 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/fetch-auth-options-response-failure-email-login-not-allowed.json: -------------------------------------------------------------------------------- 1 | {"error":"email_login_not_allowed","message":"Please log in using your WordPress.com username instead of your email address."} 2 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/blaze/BlazeTargetingTopic.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.blaze 2 | 3 | class BlazeTargetingTopic( 4 | val id: String, 5 | val description: String 6 | ) 7 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/notification/NoteIdSet.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.notification 2 | 3 | data class NoteIdSet(val id: Int, val remoteNoteId: Long, val remoteSiteId: Long) 4 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/model/WCBundleStats.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model 2 | 3 | data class WCBundleStats( 4 | val itemsSold: Int, 5 | val netRevenue: Double 6 | ) 7 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-pay-capture-terminal-payment-response-unexpected-error.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "wcpay_server_error", 3 | "message": "Unexpected server error", 4 | "data": { 5 | "status": 500 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/blaze/BlazeTargetingLanguage.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.blaze 2 | 3 | data class BlazeTargetingLanguage( 4 | val id: String, 5 | val name: String 6 | ) 7 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-order-receipt-success.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "receipt_url": "https:\/\/test.site\/wc\/file\/transient\/7e811783b66f468b61b4738231287b2a706ce1", 4 | "expiration_date": "2024-01-23" 5 | } 6 | } -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/blaze/BlazeAdForecast.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.blaze 2 | 3 | data class BlazeAdForecast( 4 | val minImpressions: Long, 5 | val maxImpressions: Long, 6 | ) 7 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/site/DesignatePrimaryDomainResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.site 2 | 3 | data class DesignatePrimaryDomainResponse(val success: Boolean) 4 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/site/ExportSiteResponse.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.site; 2 | 3 | public class ExportSiteResponse { 4 | public String status; 5 | } 6 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/model/metadata/MetaDataParentItemType.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.metadata 2 | 3 | enum class MetaDataParentItemType { 4 | ORDER, 5 | PRODUCT 6 | } 7 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-pay-capture-terminal-payment-response-uncapturable.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "wcpay_payment_uncapturable", 3 | "message": "The payment cannot be captured", 4 | "data": { 5 | "status": 409 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /example/src/main/res/values/attrs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/activity/ActivityTypeModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.activity 2 | 3 | data class ActivityTypeModel( 4 | val key: String, 5 | val name: String, 6 | val count: Int 7 | ) 8 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpapi/applicationpasswords/ApplicationPasswordUUID.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpapi.applicationpasswords 2 | 3 | internal typealias ApplicationPasswordUUID = String 4 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/jetpacktunnel/JetpackTunnelResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.jetpacktunnel 2 | 3 | class JetpackTunnelResponse { 4 | val data: T? = null 5 | } 6 | -------------------------------------------------------------------------------- /example/src/test/java/org/wordpress/android/fluxc/TestSiteSqlUtils.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc 2 | 3 | import org.wordpress.android.fluxc.persistence.SiteSqlUtils 4 | 5 | object TestSiteSqlUtils { 6 | val siteSqlUtils = SiteSqlUtils() 7 | } 8 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/site/SupportedCountryResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.site 2 | 3 | class SupportedCountryResponse( 4 | val code: String?, 5 | val name: String? 6 | ) 7 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/blaze/BlazeAdSuggestion.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.blaze 2 | 3 | data class BlazeAdSuggestion( 4 | val tagLine: String, 5 | val description: String, 6 | val ctaText: String 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/model/payments/inperson/WCConnectionTokenResult.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.payments.inperson 2 | 3 | data class WCConnectionTokenResult(val token: String, val isTestMode: Boolean) 4 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/persistence/mappers/MappingDatabaseException.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.persistence.mappers 2 | 3 | internal class MappingDatabaseException(override val message: String) : Exception() 4 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/blaze/BlazeCampaignType.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.blaze 2 | 3 | enum class BlazeCampaignType(val value: String) { 4 | POST("post"), 5 | PAGE("page"), 6 | PRODUCT("product"), 7 | } 8 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/store/StockMediaUploadItem.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.store 2 | 3 | data class StockMediaUploadItem( 4 | val name: String? = null, 5 | val title: String? = null, 6 | val url: String? = null 7 | ) 8 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-pay-store-location-for-site-address-missing-with-url-error.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": "store_address_is_incomplete", 3 | "message": "https://myusernametestsite2020151673500.wpcomstaging.com/wp-admin/admin.php?page=wc-settings&tab=general" 4 | } -------------------------------------------------------------------------------- /example/src/test/resources/wp/dashboard/cards_with_errors.json: -------------------------------------------------------------------------------- 1 | { 2 | "todays_stats": { 3 | "error": "jetpack_disconnected" 4 | }, 5 | "posts": { 6 | "error": "unauthorized" 7 | }, 8 | "activity": { 9 | "error": "unauthorized" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/xmlrpc/site/SiteXMLRPCResponse.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.xmlrpc.site; 2 | 3 | import org.wordpress.android.fluxc.network.Response; 4 | 5 | public class SiteXMLRPCResponse implements Response {} 6 | -------------------------------------------------------------------------------- /example/src/test/resources/wp/jetpack/scan/jp-backup-daily-start-scan-error.json: -------------------------------------------------------------------------------- 1 | { 2 | "success": false, 3 | "error": { 4 | "errors": { 5 | "vp_api_error": [ 6 | "Site does not have scan capability." 7 | ] 8 | }, 9 | "error_data": [] 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/list/AuthorFilter.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.list 2 | 3 | sealed class AuthorFilter { 4 | object Everyone : AuthorFilter() 5 | data class SpecificAuthor(val authorId: Long) : AuthorFilter() 6 | } 7 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-pay-capture-terminal-payment-response-capture-error.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "wcpay_capture_error", 3 | "message": "Payment capture failed to complete with the following message: ", 4 | "data": { 5 | "status": 502 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /example/src/main/res/xml/provider_paths.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/stats/PublicizeModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.stats 2 | 3 | data class PublicizeModel(val services: List, val hasMore: Boolean) { 4 | data class Service(val name: String, val followers: Int) 5 | } 6 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/site/PostFormatsResponse.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.site; 2 | 3 | import java.util.Map; 4 | 5 | public class PostFormatsResponse { 6 | public Map formats; 7 | } 8 | -------------------------------------------------------------------------------- /example/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | FluxC Example 3 | 4 | 5 | Hello blank fragment 6 | 7 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/LocalOrRemoteId.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model 2 | 3 | sealed class LocalOrRemoteId { 4 | data class LocalId(val value: Int) : LocalOrRemoteId() 5 | data class RemoteId(val value: Long) : LocalOrRemoteId() 6 | } 7 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/utils/CurrentTimeProvider.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.utils 2 | 3 | import java.util.Date 4 | import javax.inject.Inject 5 | 6 | class CurrentTimeProvider 7 | @Inject constructor() { 8 | fun currentDate() = Date() 9 | } 10 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/addons/mappers/MappingRemoteException.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.addons.mappers 2 | 3 | internal class MappingRemoteException(override val message: String) : Exception() 4 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/blaze/BlazeTargetingLocation.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.blaze 2 | 3 | data class BlazeTargetingLocation( 4 | val id: Long, 5 | val name: String, 6 | val type: String, 7 | val parent: BlazeTargetingLocation? 8 | ) 9 | -------------------------------------------------------------------------------- /.buildkite/shared-pipeline-vars: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # This file is `source`'d before calling `buildkite-agent pipeline upload`, and can be used 4 | # to set up some variables that will be interpolated in the `.yml` pipeline before uploading it. 5 | 6 | export CI_TOOLKIT="automattic/a8c-ci-toolkit#3.4.2" 7 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/stats/InsightTypeModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.stats 2 | 3 | import org.wordpress.android.fluxc.store.StatsStore.InsightType 4 | 5 | data class InsightTypeModel(val addedTypes: List, val removedTypes: List) 6 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/model/WCProductBundleItemReport.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model 2 | 3 | data class WCProductBundleItemReport( 4 | val name: String, 5 | val image: String?, 6 | val itemsSold: Int, 7 | val netRevenue: Double 8 | ) 9 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/blaze/BlazeCampaignObjective.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.blaze 2 | 3 | data class BlazeCampaignObjective( 4 | val id: String, 5 | val title: String, 6 | val description: String, 7 | val suitableForDescription: String 8 | ) 9 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/utils/TimeZoneProvider.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.utils 2 | 3 | import java.util.TimeZone 4 | import javax.inject.Inject 5 | 6 | class TimeZoneProvider @Inject constructor() { 7 | fun getDefaultTimeZone(): TimeZone = TimeZone.getDefault() 8 | } 9 | -------------------------------------------------------------------------------- /.github/workflows/gradle-wrapper-validation.yml: -------------------------------------------------------------------------------- 1 | name: "Validate Gradle Wrapper" 2 | on: [push, pull_request] 3 | 4 | jobs: 5 | validation: 6 | name: "Validation" 7 | runs-on: ubuntu-latest 8 | steps: 9 | - uses: actions/checkout@v2 10 | - uses: gradle/wrapper-validation-action@v1 11 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/initiate-automated-transfer-response-success.json: -------------------------------------------------------------------------------- 1 | { 2 | "plugin_url":"https://downloads.wordpress.org/plugin/react.zip", 3 | "status":"active", 4 | "success":true, 5 | "active_theme_slug":"pub\/independent-publisher-2", 6 | "theme_url":"", 7 | "transfer_id":197364 8 | } 9 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/stats/subscribers/SubscribersModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.stats.subscribers 2 | 3 | data class SubscribersModel(val period: String, val dates: List) { 4 | data class PeriodData(val period: String, val subscribers: Long) 5 | } 6 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/notifications/NotificationReadApiResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.notifications 2 | 3 | import org.wordpress.android.fluxc.network.Response 4 | 5 | class NotificationReadApiResponse(val success: Boolean) : Response 6 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/model/coupons/CouponReport.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.coupons 2 | 3 | import java.math.BigDecimal 4 | 5 | data class CouponReport( 6 | val couponId: Long, 7 | val amount: BigDecimal, 8 | val ordersCount: Int 9 | ) 10 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/persistence/TransactionExecutor.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.persistence 2 | 3 | interface TransactionExecutor { 4 | suspend fun executeInTransaction(block: suspend () -> R): R 5 | fun runInTransaction(block: () -> R): R 6 | } 7 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/PlanModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model 2 | 3 | class PlanModel( 4 | val productId: Int?, 5 | val productSlug: String?, 6 | val productName: String?, 7 | val isCurrentPlan: Boolean, 8 | val hasDomainCredit: Boolean 9 | ) 10 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/order/OrderStatusApiResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.order 2 | 3 | class OrderStatusApiResponse { 4 | val slug: String? = null 5 | val name: String? = null 6 | val total: Int = 0 7 | } 8 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/stats/LoadMode.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.stats 2 | 3 | sealed class LimitMode { 4 | data class Top(val limit: Int) : LimitMode() 5 | object All : LimitMode() 6 | } 7 | 8 | data class PagedMode(val pageSize: Int, val loadMore: Boolean = false) 9 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/stats/subscribers/PostsModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.stats.subscribers 2 | 3 | data class PostsModel(val posts: List) { 4 | data class PostModel(val id: Long, val href: String, val title: String, val opens: Int, val clicks: Int) 5 | } 6 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpapi/WPAPIResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpapi 2 | 3 | sealed class WPAPIResponse { 4 | data class Success(val data: T?) : WPAPIResponse() 5 | data class Error(val error: WPAPINetworkError) : WPAPIResponse() 6 | } 7 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/comment/CommentLikeWPComRestResponse.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.comment; 2 | 3 | public class CommentLikeWPComRestResponse { 4 | public boolean success; 5 | public boolean i_like; 6 | public long like_count; 7 | } 8 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/comment/CommentParent.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.comment; 2 | 3 | import org.wordpress.android.fluxc.network.rest.JsonObjectOrFalse; 4 | 5 | public class CommentParent extends JsonObjectOrFalse { 6 | public long ID; 7 | } 8 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/account/SubscriptionResponse.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.account; 2 | 3 | import org.wordpress.android.fluxc.network.Response; 4 | 5 | public class SubscriptionResponse implements Response { 6 | public boolean subscribed; 7 | } 8 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/auth/AuthEmailWPComRestResponse.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.auth; 2 | 3 | import org.wordpress.android.fluxc.network.Response; 4 | 5 | public class AuthEmailWPComRestResponse implements Response { 6 | public boolean success; 7 | } 8 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/site/SitesFeaturesRestResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.site 2 | 3 | data class SitesFeaturesRestResponse( 4 | val features: Map 5 | ) 6 | 7 | data class SiteFeatures( 8 | val active: List 9 | ) 10 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/model/ProductWithMetaData.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model 2 | 3 | import org.wordpress.android.fluxc.model.metadata.WCMetaData 4 | 5 | data class ProductWithMetaData( 6 | val product: WCProductModel, 7 | val metaData: List = emptyList() 8 | ) 9 | -------------------------------------------------------------------------------- /fluxc-annotations/src/main/java/org/wordpress/android/fluxc/annotations/action/ActionBuilder.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.annotations.action; 2 | 3 | public abstract class ActionBuilder { 4 | public static Action generateNoPayloadAction(IAction actionType) { 5 | return new Action<>(actionType, null); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/action/ProductAction.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.action 2 | 3 | import org.wordpress.android.fluxc.annotations.ActionEnum 4 | import org.wordpress.android.fluxc.annotations.action.IAction 5 | 6 | @ActionEnum 7 | enum class ProductAction : IAction { 8 | FETCH_PRODUCTS 9 | } 10 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/stats/VisitsModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.stats 2 | 3 | data class VisitsModel( 4 | val period: String, 5 | val views: Int, 6 | val visitors: Int, 7 | val likes: Int, 8 | val reblogs: Int, 9 | val comments: Int, 10 | val posts: Int 11 | ) 12 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/site/QuickStartCompletedResponse.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.site; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | public class QuickStartCompletedResponse { 6 | @SerializedName("success") 7 | public boolean success; 8 | } 9 | -------------------------------------------------------------------------------- /config/gradle/gradle_build_scan.gradle: -------------------------------------------------------------------------------- 1 | 2 | // Only run build scan on CI builds. 3 | if (System.getenv('CI')) { 4 | buildScan { 5 | termsOfServiceUrl = 'https://gradle.com/terms-of-service' 6 | termsOfServiceAgree = 'yes' 7 | tag 'CI' 8 | publishAlways() 9 | uploadInBackground = false 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /example/src/androidTest/java/org/wordpress/android/fluxc/release/ReleaseStack_CardsTest.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.release 2 | 3 | class ReleaseStack_CardsTest : ReleaseStack_Base() { 4 | @Throws(Exception::class) 5 | override fun setUp() { 6 | super.setUp() 7 | // Register 8 | init() 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-pay-fetch-transactions-summary-response.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "count": 7, 4 | "currency": "usd", 5 | "total": 2231720, 6 | "fees": 58095, 7 | "net": 2173625, 8 | "store_currencies": [ 9 | "usd" 10 | ], 11 | "customer_currencies": [ 12 | "usd" 13 | ] 14 | } 15 | } -------------------------------------------------------------------------------- /example/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/action/PlanOffersAction.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.action 2 | 3 | import org.wordpress.android.fluxc.annotations.ActionEnum 4 | import org.wordpress.android.fluxc.annotations.action.IAction 5 | 6 | @ActionEnum 7 | enum class PlanOffersAction : IAction { 8 | FETCH_PLAN_OFFERS 9 | } 10 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/blaze/BlazeTargetingParameters.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.blaze 2 | 3 | data class BlazeTargetingParameters( 4 | val locations: List? = null, 5 | val languages: List? = null, 6 | val devices: List? = null, 7 | val topics: List? = null 8 | ) 9 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/stats/time/FileDownloadsModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.stats.time 2 | 3 | data class FileDownloadsModel(val fileDownloads: List, val hasMore: Boolean) { 4 | data class FileDownloads( 5 | val filename: String, 6 | val downloads: Int 7 | ) 8 | } 9 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/order/OrderCountApiResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.order 2 | 3 | import org.wordpress.android.fluxc.network.Response 4 | 5 | class OrderCountApiResponse : Response { 6 | val slug: String? = null 7 | val total: Int = 0 8 | } 9 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/system/WCApiVersionResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.system 2 | 3 | import org.wordpress.android.fluxc.model.SiteModel 4 | 5 | data class WCApiVersionResponse( 6 | val siteModel: SiteModel, 7 | val apiVersion: String? 8 | ) 9 | -------------------------------------------------------------------------------- /fluxc-annotations/src/main/java/org/wordpress/android/fluxc/annotations/AnnotationConfig.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.annotations; 2 | 3 | public abstract class AnnotationConfig { 4 | public static final String PACKAGE = "org.wordpress.android.fluxc.generated"; 5 | public static final String PACKAGE_ENDPOINTS = PACKAGE + ".endpoint"; 6 | } 7 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/jetpack/JetpackUser.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.jetpack 2 | 3 | data class JetpackUser( 4 | val isConnected: Boolean, 5 | val isMaster: Boolean, 6 | val username: String, 7 | val wpcomId: Long, 8 | val wpcomUsername: String, 9 | val wpcomEmail: String 10 | ) 11 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/stats/TagsModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.stats 2 | 3 | data class TagsModel(val tags: List, val hasMore: Boolean) { 4 | class TagModel(val items: List, val views: Long) { 5 | data class Item(val name: String, val type: String, val link: String) 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/site/SiteEditorsResponse.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.site; 2 | 3 | import org.wordpress.android.fluxc.network.Response; 4 | 5 | public class SiteEditorsResponse implements Response { 6 | public String editor_mobile; 7 | public String editor_web; 8 | } 9 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/theme/ThemeDemoPageResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.theme 2 | 3 | data class DemoPageResponse( 4 | val link: String, 5 | val slug: String, 6 | val title: PageTitle, 7 | ) 8 | 9 | data class PageTitle( 10 | val rendered: String, 11 | ) 12 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/utils/BuildConfigWrapper.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.utils 2 | 3 | import dagger.Reusable 4 | import org.wordpress.android.fluxc.BuildConfig 5 | import javax.inject.Inject 6 | 7 | @Reusable 8 | class BuildConfigWrapper @Inject constructor() { 9 | fun isDebug() = BuildConfig.DEBUG 10 | } 11 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/stats/InsightsMostPopularModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.stats 2 | 3 | data class InsightsMostPopularModel( 4 | val siteId: Long, 5 | val highestDayOfWeek: Int, 6 | val highestHour: Int, 7 | val highestDayPercent: Double, 8 | val highestHourPercent: Double 9 | ) 10 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpapi/WPAPINetworkError.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpapi 2 | 3 | import org.wordpress.android.fluxc.network.BaseRequest.BaseNetworkError 4 | 5 | class WPAPINetworkError( 6 | baseError: BaseNetworkError, 7 | val errorCode: String? = null 8 | ) : BaseNetworkError(baseError) 9 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpapi/applicationpasswords/ApplicationPasswordCredentials.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpapi.applicationpasswords 2 | 3 | data class ApplicationPasswordCredentials( 4 | val userName: String, 5 | val password: String, 6 | val uuid: ApplicationPasswordUUID? = null 7 | ) 8 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/scan/threat/FixThreatsResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.scan.threat 2 | 3 | import com.google.gson.annotations.SerializedName 4 | import org.wordpress.android.fluxc.network.Response 5 | 6 | data class FixThreatsResponse(@SerializedName("ok") val ok: Boolean?) : Response 7 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/site/SupportedStateResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.site 2 | 3 | import android.os.Parcelable 4 | import kotlinx.parcelize.Parcelize 5 | 6 | @Parcelize 7 | class SupportedStateResponse( 8 | val code: String?, 9 | val name: String? 10 | ) : Parcelable 11 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/store/StockMediaItem.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.store 2 | 3 | data class StockMediaItem( 4 | val id: String? = null, 5 | val name: String? = null, 6 | val title: String? = null, 7 | val url: String? = null, 8 | val date: String? = null, 9 | val thumbnail: String? = null 10 | ) 11 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/order/OrderMappingConst.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.order 2 | 3 | object OrderMappingConst { 4 | const val CHARGE_ID_KEY = "_charge_id" 5 | const val SHIPPING_PHONE_KEY = "_shipping_phone" 6 | const val RECEIPT_URL_KEY = "receipt_url" 7 | } 8 | -------------------------------------------------------------------------------- /example/src/main/res/drawable/ic_check.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /config/gradle/gradle_build_cache.gradle: -------------------------------------------------------------------------------- 1 | 2 | // Only run build cache on CI builds. 3 | if (System.getenv('CI')) { 4 | buildCache { 5 | remote(HttpBuildCache) { 6 | url = "http://10.0.2.215:5071/cache/" 7 | allowUntrustedServer = true 8 | allowInsecureProtocol = true 9 | push = true 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /gradle.properties-example: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | org.gradle.jvmargs=-Xmx6G -XX:+HeapDumpOnOutOfMemoryError 4 | 5 | # WordPress-Flux-Android properties. 6 | 7 | android.useAndroidX=true 8 | android.enableJetifier=false 9 | 10 | android.nonTransitiveRClass=true 11 | 12 | # Dependency Analysis Plugin 13 | dependency.analysis.android.ignored.variants=release 14 | -------------------------------------------------------------------------------- /example/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 8dp 6 | 4dp 7 | 8 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/account/UsernameSuggestionsResponse.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.account; 2 | 3 | import org.wordpress.android.fluxc.network.Response; 4 | 5 | import java.util.List; 6 | 7 | public class UsernameSuggestionsResponse implements Response { 8 | public List suggestions; 9 | } 10 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/transactions/SupportedDomainCountry.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.transactions 2 | 3 | import android.os.Parcelable 4 | import kotlinx.parcelize.Parcelize 5 | 6 | @Parcelize 7 | data class SupportedDomainCountry( 8 | val code: String, 9 | val name: String 10 | ) : Parcelable 11 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/utils/StatsGranularity.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.utils 2 | 3 | enum class StatsGranularity(private val value: String) { 4 | DAYS("day"), 5 | WEEKS("week"), 6 | MONTHS("month"), 7 | YEARS("year"); 8 | 9 | override fun toString(): String { 10 | return value 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/stats/InsightTypeDataModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.stats 2 | 3 | import org.wordpress.android.fluxc.store.StatsStore.InsightType 4 | 5 | data class InsightTypeDataModel(val type: InsightType, val status: Status, val position: Int?) { 6 | enum class Status { 7 | ADDED, REMOVED, NEW 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/account/AccountBoolResponse.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.account; 2 | 3 | import org.wordpress.android.fluxc.network.Response; 4 | 5 | public class AccountBoolResponse implements Response { 6 | public boolean success; 7 | public String error; 8 | public String message; 9 | } 10 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/post/GeoLocation.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.post; 2 | 3 | import org.wordpress.android.fluxc.network.rest.JsonObjectOrFalse; 4 | 5 | public class GeoLocation extends JsonObjectOrFalse { 6 | public double latitude; 7 | public double longitude; 8 | public String address; 9 | } 10 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/utils/CurrentDateUtils.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.utils 2 | 3 | import java.util.Calendar 4 | import java.util.Date 5 | import javax.inject.Inject 6 | 7 | class CurrentDateUtils 8 | @Inject constructor() { 9 | fun getCurrentDate() = Date() 10 | fun getCurrentCalendar() = Calendar.getInstance() 11 | } 12 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/model/WCVisitorStatsSummary.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model 2 | 3 | import org.wordpress.android.fluxc.store.WCStatsStore.StatsGranularity 4 | 5 | data class WCVisitorStatsSummary( 6 | val granularity: StatsGranularity, 7 | val date: String, 8 | val views: Int, 9 | val visitors: Int 10 | ) 11 | -------------------------------------------------------------------------------- /tests/api/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'java' 2 | dependencies { 3 | testImplementation sharedLibs.restAssured 4 | testImplementation sharedLibs.junit 5 | testImplementation sharedLibs.json 6 | } 7 | 8 | test { 9 | testLogging { 10 | events "passed", "skipped", "failed", "standardOut", "standardError" 11 | } 12 | } 13 | 14 | repositories { 15 | google() 16 | } 17 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/logging/FluxCCrashLogger.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.logging 2 | 3 | interface FluxCCrashLogger { 4 | fun recordEvent(message: String, category: String?) 5 | 6 | fun recordException(exception: Throwable, category: String?) 7 | 8 | fun sendReport(exception: Throwable?, tags: Map, message: String?) 9 | } 10 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/account/AuthOptionsResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.account 2 | 3 | import org.wordpress.android.fluxc.network.Response 4 | 5 | @Suppress("VariableNaming") 6 | class AuthOptionsResponse : Response { 7 | var passwordless: Boolean? = null 8 | var email_verified: Boolean? = null 9 | } 10 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/model/order/CouponLine.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.order 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class CouponLine( 6 | val id: Long?, 7 | val code: String, 8 | val discount: String?, 9 | @SerializedName("discount_tax") 10 | val discountTax: String?, 11 | ) 12 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionSha256Sum=258e722ec21e955201e31447b0aed14201765a3bfbae296a46cf60b70e66db70 4 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-all.zip 5 | networkTimeout=10000 6 | validateDistributionUrl=true 7 | zipStoreBase=GRADLE_USER_HOME 8 | zipStorePath=wrapper/dists 9 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/model/WCGiftCardStats.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model 2 | 3 | data class WCGiftCardStats( 4 | val usedValue: Long, 5 | val netValue: Double, 6 | val intervals: List 7 | ) 8 | 9 | data class WCGiftCardStatsInterval( 10 | val usedValue: Long, 11 | val netValue: Double, 12 | ) 13 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/model/WCShippingMethod.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model 2 | 3 | import org.wordpress.android.fluxc.persistence.entity.ShippingMethodEntity 4 | 5 | data class WCShippingMethod ( 6 | val id: String, 7 | val title: String 8 | ) 9 | 10 | fun ShippingMethodEntity.toAppModel() = WCShippingMethod(this.id,this.title) 11 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/product/ProductCountApiResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.product 2 | 3 | import org.wordpress.android.fluxc.network.Response 4 | 5 | class ProductCountApiResponse : Response { 6 | val slug: String? = null 7 | val name: String? = null 8 | val total: Long = 0 9 | } 10 | -------------------------------------------------------------------------------- /example/src/test/resources/wp/jetpack/scan/jp-complete-scan-scanning.json: -------------------------------------------------------------------------------- 1 | { 2 | "state": "scanning", 3 | "threats": [], 4 | "has_cloud": false, 5 | "credentials": [ 6 | { 7 | "still_valid": true, 8 | "type": "managed", 9 | "role": "main" 10 | } 11 | ], 12 | "current": { 13 | "is_initial": false, 14 | "timestamp": "2020-11-16T08:02:31+00:00", 15 | "progress": 80 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/post/PostParent.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.post; 2 | 3 | import org.wordpress.android.fluxc.network.rest.JsonObjectOrFalse; 4 | 5 | public class PostParent extends JsonObjectOrFalse { 6 | public long ID; 7 | public String type; 8 | public String link; 9 | public String title; 10 | } 11 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/account/IsAvailableResponse.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.account; 2 | 3 | import org.wordpress.android.fluxc.network.rest.JsonObjectOrFalse; 4 | 5 | public class IsAvailableResponse extends JsonObjectOrFalse { 6 | public String error; 7 | public String message; 8 | public String status; 9 | } 10 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/site/JetpackCapabilitiesResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.site 2 | 3 | import com.google.gson.annotations.SerializedName 4 | import org.wordpress.android.fluxc.network.Response 5 | 6 | data class JetpackCapabilitiesResponse( 7 | @SerializedName("capabilities") val capabilities: List? 8 | ) : Response 9 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/notifications/NotificationSeenApiResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.notifications 2 | 3 | import org.wordpress.android.fluxc.network.Response 4 | 5 | @Suppress("VariableNaming") 6 | class NotificationSeenApiResponse : Response { 7 | val last_seen_time: Long? = null 8 | val success: Boolean = false 9 | } 10 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/order/OrderReceiptResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.order 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class OrderReceiptResponse( 6 | @SerializedName("receipt_url") val receiptUrl: String, 7 | @SerializedName("expiration_date") val expirationDate: String, 8 | ) 9 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/action/VerticalAction.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.action 2 | 3 | import org.wordpress.android.fluxc.annotations.Action 4 | import org.wordpress.android.fluxc.annotations.ActionEnum 5 | import org.wordpress.android.fluxc.annotations.action.IAction 6 | 7 | @ActionEnum 8 | enum class VerticalAction : IAction { 9 | @Action 10 | FETCH_SEGMENTS, 11 | } 12 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/stats/InsightsAllTimeModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.stats 2 | 3 | import java.util.Date 4 | 5 | data class InsightsAllTimeModel( 6 | val siteId: Long, 7 | val date: Date? = null, 8 | val visitors: Int, 9 | val views: Int, 10 | val posts: Int, 11 | val viewsBestDay: String, 12 | val viewsBestDayTotal: Int 13 | ) 14 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/notifications/RegisterDeviceRestResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.notifications 2 | 3 | import com.google.gson.annotations.SerializedName 4 | import org.wordpress.android.fluxc.network.Response 5 | 6 | class RegisterDeviceRestResponse : Response { 7 | @SerializedName("ID") 8 | val id: String? = null 9 | } 10 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/payments/inperson/CapturePaymentApiResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.payments.inperson 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class CapturePaymentApiResponse( 6 | @SerializedName("status") val status: String, 7 | @SerializedName("id") val paymentId: String 8 | ) 9 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-pay-fetch-gateway-response-success.json: -------------------------------------------------------------------------------- 1 | { 2 | "data":{ 3 | "id": "cod", 4 | "title": "Pay in Person", 5 | "description": "Pay by card or another accepted payment method", 6 | "order": "", 7 | "enabled": true, 8 | "method_title": "Cash on delivery", 9 | "method_description": "Have your customers pay with cash (or by other means) upon delivery." 10 | } 11 | } -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-pay-update-gateway-response-success.json: -------------------------------------------------------------------------------- 1 | { 2 | "data":{ 3 | "id": "cod", 4 | "title": "Pay in Person", 5 | "description": "Pay by card or another accepted payment method", 6 | "order": "", 7 | "enabled": true, 8 | "method_title": "Cash on delivery", 9 | "method_description": "Have your customers pay with cash (or by other means) upon delivery." 10 | } 11 | } -------------------------------------------------------------------------------- /example/src/main/res/drawable/ic_clear.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/orderstats/OrderStatsApiResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.orderstats 2 | 3 | import com.google.gson.JsonElement 4 | import org.wordpress.android.fluxc.network.Response 5 | 6 | class OrderStatsApiResponse : Response { 7 | val fields: JsonElement? = null 8 | val data: JsonElement? = null 9 | } 10 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-pay-load-account-response-empty-status.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "has_pending_requirements": false, 4 | "has_overdue_requirements": false, 5 | "current_deadline": null, 6 | "status": "", 7 | "statement_descriptor": "DO.WPMT.CO", 8 | "store_currencies": { 9 | "default": "usd", 10 | "supported": ["usd"] 11 | }, 12 | "country": "US" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /fluxc-annotations/src/main/java/org/wordpress/android/fluxc/annotations/ActionEnum.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.annotations; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Target; 5 | 6 | /** 7 | * Defines an enum of actions related to a particular store. 8 | */ 9 | @Target(value = ElementType.TYPE) 10 | public @interface ActionEnum { 11 | String name() default ""; 12 | } 13 | -------------------------------------------------------------------------------- /fluxc-processor/src/main/resources/wp-api-endpoints.txt: -------------------------------------------------------------------------------- 1 | /posts/ 2 | /posts// 3 | 4 | /pages/ 5 | /pages// 6 | 7 | /media/ 8 | /media// 9 | 10 | /comments/ 11 | /comments// 12 | 13 | /settings/ 14 | 15 | /users/ 16 | /users/me/ 17 | /users/me/application-passwords 18 | /users/me/application-passwords/#String 19 | /users/me/application-passwords/introspect 20 | 21 | /plugins/ 22 | /plugins/#String -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/site/InitiateAutomatedTransferResponse.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.site; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | public class InitiateAutomatedTransferResponse { 6 | public String status; 7 | public boolean success; 8 | @SerializedName("transfer_id") 9 | public int transferId; 10 | } 11 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/site/UserRoleWPComRestResponse.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.site; 2 | 3 | import java.util.List; 4 | 5 | public class UserRoleWPComRestResponse { 6 | public class UserRolesResponse { 7 | public List roles; 8 | } 9 | public String name; 10 | public String display_name; 11 | } 12 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/customer/CustomerSorting.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.customer 2 | 3 | enum class CustomerSorting { 4 | NAME_ASC, 5 | NAME_DESC, 6 | INCLUDE_ASC, 7 | INCLUDE_DESC, 8 | REGISTERED_DATE_ASC, 9 | REGISTERED_DATE_DESC, 10 | DATE_LAST_ACTIVE_ASC, 11 | DATE_LAST_ACTIVE_DESC, 12 | } 13 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/payments/inperson/ConnectionTokenApiResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.payments.inperson 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class ConnectionTokenApiResponse( 6 | @SerializedName("secret") val token: String, 7 | @SerializedName("test_mode") val isTestMode: Boolean 8 | ) 9 | -------------------------------------------------------------------------------- /.buildkite/publish-fluxc-annotations.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euo pipefail 4 | 5 | ./gradlew \ 6 | :fluxc-annotations:prepareToPublishToS3 $(prepare_to_publish_to_s3_params) \ 7 | :fluxc-annotations:publish 8 | 9 | # Add meta-data for the published version so we can use it in subsequent steps 10 | cat ./fluxc-annotations/build/published-version.txt | buildkite-agent meta-data set "PUBLISHED_FLUXC_ANNOTATIONS_VERSION" 11 | -------------------------------------------------------------------------------- /example/src/test/java/org/wordpress/android/fluxc/JsonLoaderUtils.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc 2 | 3 | import com.google.gson.Gson 4 | 5 | object JsonLoaderUtils { 6 | fun String.jsonFileAs(clazz: Class) = 7 | UnitTestUtils.getStringFromResourceFile( 8 | this@JsonLoaderUtils::class.java, 9 | this 10 | )?.let { Gson().fromJson(it, clazz) } 11 | } 12 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/stats/time/SearchTermsModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.stats.time 2 | 3 | data class SearchTermsModel( 4 | val otherSearchTerms: Int, 5 | val totalSearchTerms: Int, 6 | val unknownSearchCount: Int, 7 | val searchTerms: List, 8 | val hasMore: Boolean 9 | ) { 10 | data class SearchTerm(val text: String, val views: Int) 11 | } 12 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/reader/ReaderSearchSitesResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.reader 2 | 3 | import com.google.gson.annotations.JsonAdapter 4 | 5 | import org.wordpress.android.fluxc.model.ReaderSiteModel 6 | 7 | @JsonAdapter(ReaderSearchSitesDeserializer::class) 8 | class ReaderSearchSitesResponse( 9 | val sites: List 10 | ) 11 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/orderstats/RevenueStatsApiResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.orderstats 2 | 3 | import com.google.gson.JsonElement 4 | import org.wordpress.android.fluxc.network.Response 5 | 6 | class RevenueStatsApiResponse : Response { 7 | val totals: JsonElement? = null 8 | val intervals: JsonElement? = null 9 | } 10 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/product/BatchProductApiResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.product 2 | 3 | import com.google.gson.annotations.SerializedName 4 | import org.wordpress.android.fluxc.network.Response 5 | 6 | data class BatchProductApiResponse( 7 | @SerializedName("update") val updatedProducts: List? = null, 8 | ) : Response 9 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-pay-load-account-response-current-deadline.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "has_pending_requirements": false, 4 | "has_overdue_requirements": true, 5 | "current_deadline": 1628258304, 6 | "status": "", 7 | "statement_descriptor": "DO.WPMT.CO", 8 | "store_currencies": { 9 | "default": "usd", 10 | "supported": ["usd"] 11 | }, 12 | "country": "US" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-pay-load-account-response-enabled-status.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "has_pending_requirements": false, 4 | "has_overdue_requirements": false, 5 | "current_deadline": null, 6 | "status": "enabled", 7 | "statement_descriptor": "DO.WPMT.CO", 8 | "store_currencies": { 9 | "default": "usd", 10 | "supported": ["usd"] 11 | }, 12 | "country": "US" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-pay-load-account-response-new-status.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "has_pending_requirements": false, 4 | "has_overdue_requirements": false, 5 | "current_deadline": null, 6 | "status": "new_status", 7 | "statement_descriptor": "DO.WPMT.CO", 8 | "store_currencies": { 9 | "default": "usd", 10 | "supported": ["usd"] 11 | }, 12 | "country": "US" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /example/src/main/res/layout/fragment_woo_customers_search.xml: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/model/gateways/WCGatewayModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.gateways 2 | 3 | data class WCGatewayModel( 4 | val id: String, 5 | val title: String, 6 | val description: String, 7 | val order: Int, 8 | val isEnabled: Boolean, 9 | val methodTitle: String, 10 | val methodDescription: String, 11 | val features: List 12 | ) 13 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/persistence/entity/ProductBasedIdentification.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.persistence.entity 2 | 3 | import org.wordpress.android.fluxc.model.LocalOrRemoteId.LocalId 4 | import org.wordpress.android.fluxc.model.LocalOrRemoteId.RemoteId 5 | 6 | data class ProductBasedIdentification( 7 | val productRemoteId: RemoteId, 8 | val localSiteId: LocalId 9 | ) 10 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/utils/WhatsNewAppVersionUtils.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.utils 2 | 3 | object WhatsNewAppVersionUtils { 4 | fun versionNameToInt(appVersion: String): Int { 5 | val majorMinor = Regex("(\\d+\\.)(\\d+)").find(appVersion, 0)?.value 6 | 7 | majorMinor?.let { 8 | return it.replace(".", "").toInt() 9 | } 10 | return -1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /example/src/test/resources/wp/jetpack/scan/jp-complete-scan-idle.json: -------------------------------------------------------------------------------- 1 | { 2 | "state": "idle", 3 | "threats": [], 4 | "has_cloud": false, 5 | "credentials": [ 6 | { 7 | "still_valid": true, 8 | "type": "managed", 9 | "role": "main" 10 | } 11 | ], 12 | "most_recent": { 13 | "is_initial": false, 14 | "timestamp": "2020-11-16T06:23:26+00:00", 15 | "duration": 12, 16 | "progress": 100, 17 | "error": false 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/site/DomainPriceResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.site 2 | 3 | @Suppress("ConstructorParameterNaming") 4 | data class DomainPriceResponse( 5 | val is_premium: Boolean = false, 6 | val product_id: Int?, 7 | val product_slug: String?, 8 | val cost: String?, 9 | val raw_price: Double?, 10 | val currency_code: String? 11 | ) 12 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-pay-load-account-response-restricted-soon-status.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "has_pending_requirements": false, 4 | "has_overdue_requirements": false, 5 | "current_deadline": null, 6 | "status": "restricted_soon", 7 | "statement_descriptor": "DO.WPMT.CO", 8 | "store_currencies": { 9 | "default": "usd", 10 | "supported": ["usd"] 11 | }, 12 | "country": "US" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /example/src/test/resources/notifications/subject-response.json: -------------------------------------------------------------------------------- 1 | { 2 | "text": "You've received 20 likes on My Site", 3 | "ranges": [ 4 | { 5 | "type": "b", 6 | "indices": [ 7 | 16, 8 | 18 9 | ] 10 | }, 11 | { 12 | "type": "site", 13 | "indices": [ 14 | 28, 15 | 35 16 | ], 17 | "url": "http://mysite.wordpress.com", 18 | "id": 123 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/module/ReleaseToolsModule.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.module; 2 | 3 | import java.util.Locale; 4 | 5 | import javax.inject.Singleton; 6 | 7 | import dagger.Module; 8 | import dagger.Provides; 9 | 10 | @Module 11 | public class ReleaseToolsModule { 12 | @Singleton 13 | @Provides 14 | public Locale provideLocale() { 15 | return Locale.getDefault(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/site/AutomatedTransferStatusResponse.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.site; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | public class AutomatedTransferStatusResponse { 6 | public String status; 7 | @SerializedName("step") 8 | public int currentStep; 9 | @SerializedName("total") 10 | public int totalSteps; 11 | } 12 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/site/PrivateAtomicCookieResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.site 2 | 3 | class PrivateAtomicCookieResponse( 4 | val url: String, 5 | val cookies: List 6 | ) 7 | 8 | class AtomicCookie( 9 | val expires: String, 10 | val path: String, 11 | val domain: String, 12 | val name: String, 13 | val value: String 14 | ) 15 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/xmlrpc/XMLRPCException.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.xmlrpc; 2 | 3 | public class XMLRPCException extends Exception { 4 | private static final long serialVersionUID = 7499675036625522379L; 5 | 6 | public XMLRPCException(Exception e) { 7 | super(e); 8 | } 9 | 10 | public XMLRPCException(String string) { 11 | super(string); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/orderstats/VisitorStatsSummaryApiResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.orderstats 2 | 3 | import org.wordpress.android.fluxc.network.Response 4 | 5 | data class VisitorStatsSummaryApiResponse( 6 | val date: String? = null, 7 | val period: String? = null, 8 | val views: Int = 0, 9 | val visitors: Int = 0 10 | ) : Response 11 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/stripe-extension-statement-descriptor-null.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "has_pending_requirements": false, 4 | "has_overdue_requirements": false, 5 | "current_deadline": null, 6 | "is_live": true, 7 | "status": "restricted_soon", 8 | "statement_descriptor": null, 9 | "store_currencies": { 10 | "default": "usd", 11 | "supported": ["usd"] 12 | }, 13 | "country": "US" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/notifications/NotificationsApiResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.notifications 2 | 3 | import org.wordpress.android.fluxc.network.Response 4 | 5 | @Suppress("VariableNaming") 6 | class NotificationsApiResponse : Response { 7 | val last_seen_time: Long? = null 8 | val number: Int? = null 9 | val notes: List? = null 10 | } 11 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/product/BatchAddProductTagApiResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.product 2 | 3 | import com.google.gson.annotations.SerializedName 4 | import org.wordpress.android.fluxc.network.Response 5 | 6 | class BatchAddProductTagApiResponse : Response { 7 | @SerializedName("create") 8 | val addedTags: List? = null 9 | } 10 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/shippinglabels/SLCreationEligibilityApiResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.shippinglabels 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class SLCreationEligibilityApiResponse( 6 | @SerializedName("is_eligible") 7 | val isEligible: Boolean, 8 | @SerializedName("reason") 9 | val reason: String? 10 | ) 11 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-pay-fetch-all-gateways-response-success.json: -------------------------------------------------------------------------------- 1 | { 2 | "data":[ 3 | {"id": "woocommerce_payments", "title": "Credit card / debit card", "description": "Enter your card details"}, 4 | {"id": "bacs", "title": "Direct bank transfer", "description": "Make your payment directly into our bank account. Please use your Order ID as the payment reference. Your order will not be shipped until the funds have cleared in our account."} 5 | ] 6 | } -------------------------------------------------------------------------------- /example/src/main/java/org/wordpress/android/fluxc/example/di/WCOrderListActivityModule.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.example.di 2 | 3 | import dagger.Module 4 | import dagger.android.ContributesAndroidInjector 5 | import org.wordpress.android.fluxc.example.WCOrderListActivity 6 | 7 | @Module 8 | internal interface WCOrderListActivityModule { 9 | @ContributesAndroidInjector 10 | fun provideWCOrderListActivityInjector(): WCOrderListActivity 11 | } 12 | -------------------------------------------------------------------------------- /example/src/test/resources/wp/jetpack/scan/threat/threat-file-with-context-as-string.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": 22917236, 3 | "signature": "PHP.Generic.BadPattern.5", 4 | "first_detected": "2020-06-25T13:10:05.000Z", 5 | "description": "This code pattern is often used to run a very dangerous shell programs on your server. The code in these files needs to be reviewed, and possibly cleaned.", 6 | "status": "current", 7 | "fixable": false, 8 | "context": "" 9 | } 10 | -------------------------------------------------------------------------------- /fluxc-annotations/src/main/java/org/wordpress/android/fluxc/annotations/Endpoint.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.annotations; 2 | 3 | import java.lang.annotation.Documented; 4 | import java.lang.annotation.ElementType; 5 | import java.lang.annotation.Target; 6 | 7 | /** 8 | * Declares a valid REST endpoint. 9 | */ 10 | @Documented 11 | @Target({ElementType.FIELD, ElementType.METHOD}) 12 | public @interface Endpoint { 13 | String value(); 14 | } 15 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/activity/BackupDownloadStatusModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.activity 2 | 3 | import java.util.Date 4 | 5 | data class BackupDownloadStatusModel( 6 | val downloadId: Long, 7 | val rewindId: String, 8 | val backupPoint: Date, 9 | val startedAt: Date, 10 | val progress: Int?, 11 | val downloadCount: Int?, 12 | val validUntil: Date?, 13 | val url: String? 14 | ) 15 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/model/WCSSRModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model 2 | 3 | data class WCSSRModel( 4 | val remoteSiteId: Long, 5 | val environment: String? = null, 6 | val database: String? = null, 7 | val activePlugins: String? = null, 8 | val theme: String? = null, 9 | val settings: String? = null, 10 | val security: String? = null, 11 | val pages: String? = null 12 | ) 13 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/SiteSettingsResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc 2 | 3 | import com.google.gson.JsonElement 4 | import org.wordpress.android.fluxc.network.Response 5 | 6 | class SiteSettingsResponse : Response { 7 | val id: String? = null 8 | val value: JsonElement? = null // JsonElement because this field can be a string or an array (at least) 9 | } 10 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/test/java/org/wordpress/android/fluxc/persistence/dao/FakeTransactionExecutor.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.persistence.dao 2 | 3 | import org.wordpress.android.fluxc.persistence.TransactionExecutor 4 | 5 | object FakeTransactionExecutor : TransactionExecutor { 6 | override suspend fun executeInTransaction(block: suspend () -> R): R = block() 7 | 8 | override fun runInTransaction(block: () -> R): R = block() 9 | } 10 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-pay-load-account-response-is-live-account.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "has_pending_requirements": false, 4 | "has_overdue_requirements": false, 5 | "current_deadline": null, 6 | "is_live": true, 7 | "status": "restricted_soon", 8 | "statement_descriptor": "DO.WPMT.CO", 9 | "store_currencies": { 10 | "default": "usd", 11 | "supported": ["usd"] 12 | }, 13 | "country": "US" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /example/src/main/java/org/wordpress/android/fluxc/example/di/ApplicationModule.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.example.di 2 | 3 | import android.app.Application 4 | import android.content.Context 5 | 6 | import dagger.Binds 7 | import dagger.Module 8 | 9 | @Module 10 | abstract class ApplicationModule { 11 | // Expose Application as an injectable context 12 | @Binds 13 | internal abstract fun bindContext(application: Application): Context 14 | } 15 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/module/ApplicationPasswordsClientId.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.module 2 | 3 | import javax.inject.Qualifier 4 | import kotlin.annotation.AnnotationRetention.RUNTIME 5 | 6 | /** 7 | * Defines the name to use for naming the WordPress "application passwords" that the app 8 | * will create. 9 | */ 10 | @Qualifier 11 | @MustBeDocumented 12 | @Retention(RUNTIME) 13 | annotation class ApplicationPasswordsClientId 14 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/notifications/NotificationHashesApiResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.notifications 2 | 3 | import org.wordpress.android.fluxc.network.Response 4 | 5 | @Suppress("VariableNaming") 6 | class NotificationHashesApiResponse : Response { 7 | val last_seen_time: Long? = null 8 | val number: Int? = null 9 | val notes: List? = null 10 | } 11 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/utils/AppLogWrapper.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.utils 2 | 3 | import org.wordpress.android.util.AppLog 4 | import javax.inject.Inject 5 | 6 | class AppLogWrapper 7 | @Inject constructor() { 8 | fun d(tag: AppLog.T, message: String) = AppLog.d(tag, message) 9 | fun e(tag: AppLog.T, message: String) = AppLog.e(tag, message) 10 | fun w(tag: AppLog.T, message: String) = AppLog.w(tag, message) 11 | } 12 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/model/taxes/TaxBasedOnSettingEntity.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.taxes 2 | 3 | import androidx.room.Entity 4 | import androidx.room.PrimaryKey 5 | import org.wordpress.android.fluxc.model.LocalOrRemoteId.LocalId 6 | 7 | @Entity(tableName = "TaxBasedOnSetting") 8 | data class TaxBasedOnSettingEntity( 9 | @PrimaryKey val localSiteId: LocalId, 10 | val selectedOption: String, 11 | ) 12 | -------------------------------------------------------------------------------- /example/src/test/java/org/wordpress/android/fluxc/wc/refunds/RefundFixtures.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.wc.refunds 2 | 3 | import org.wordpress.android.fluxc.network.rest.wpcom.wc.refunds.RefundRestClient.RefundResponse 4 | 5 | val REFUND_RESPONSE = RefundResponse( 6 | 1L, 7 | "2011-10-10T14:48:00", 8 | "10.00", 9 | "No reason", 10 | false, 11 | emptyList(), 12 | emptyList(), 13 | emptyList() 14 | ) 15 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/list/ListOrder.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.list 2 | 3 | import java.util.Locale 4 | 5 | enum class ListOrder(val value: String) { 6 | ASC("ASC"), 7 | DESC("DESC"); 8 | companion object { 9 | fun fromValue(value: String): ListOrder? { 10 | return values().firstOrNull { it.value.toLowerCase(Locale.ROOT) == value.toLowerCase(Locale.ROOT) } 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/stats/time/VideoPlaysModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.stats.time 2 | 3 | data class VideoPlaysModel( 4 | val otherPlays: Int, 5 | val totalPlays: Int, 6 | val plays: List, 7 | val hasMore: Boolean 8 | ) { 9 | data class VideoPlays( 10 | val postId: String, 11 | val title: String, 12 | val url: String?, 13 | val plays: Int 14 | ) 15 | } 16 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/scan/FetchScanHistoryResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.scan 2 | 3 | import com.google.gson.annotations.SerializedName 4 | import org.wordpress.android.fluxc.network.Response 5 | import org.wordpress.android.fluxc.network.rest.wpcom.scan.threat.Threat 6 | 7 | data class FetchScanHistoryResponse( 8 | @SerializedName("threats") val threats: List? 9 | ) : Response 10 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/utils/extensions/MapExtensions.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.utils.extensions 2 | 3 | @Suppress("UNCHECKED_CAST") 4 | fun Map.filterNotNull(): Map = 5 | filterValues { it != null } as Map 6 | 7 | fun MutableMap.putIfNotNull(vararg pairs: Pair) = apply { 8 | pairs.forEach { pair -> 9 | pair.second?.let { put(pair.first, it) } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/shippinglabels/ShippingLabelStatusApiResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.shippinglabels 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class ShippingLabelStatusApiResponse( 6 | @SerializedName("success") 7 | val isSuccess: Boolean = false, 8 | @SerializedName("labels") 9 | val labels: List? = null 10 | ) 11 | -------------------------------------------------------------------------------- /example/src/main/java/org/wordpress/android/fluxc/example/di/MainActivityModule.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.example.di 2 | 3 | import dagger.Module 4 | import dagger.android.ContributesAndroidInjector 5 | import org.wordpress.android.fluxc.example.MainExampleActivity 6 | 7 | @Module 8 | internal interface MainActivityModule { 9 | @ContributesAndroidInjector(modules = [FragmentsModule::class]) 10 | fun provideMainActivityInjector(): MainExampleActivity 11 | } 12 | -------------------------------------------------------------------------------- /fluxc-processor/src/main/resources/xmlrpc-endpoints.txt: -------------------------------------------------------------------------------- 1 | wp.getProfile 2 | wp.getOptions 3 | wp.getPostFormats 4 | wp.getUsersBlogs 5 | wp.getMediaLibrary 6 | wp.getMediaItem 7 | wp.getPost 8 | wp.getPosts 9 | wp.newPost 10 | wp.editPost 11 | wp.deletePost 12 | wp.getTerm 13 | wp.getTerms 14 | wp.newTerm 15 | wp.deleteTerm 16 | wp.editTerm 17 | wp.uploadFile 18 | wp.newComment 19 | wp.getComment 20 | wp.getComments 21 | wp.deleteComment 22 | wp.editComment 23 | system.listMethods 24 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/stats/FollowersModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.stats 2 | 3 | import java.util.Date 4 | 5 | data class FollowersModel( 6 | val totalCount: Int, 7 | val followers: List, 8 | val hasMore: Boolean 9 | ) { 10 | data class FollowerModel( 11 | val avatar: String, 12 | val label: String, 13 | val url: String?, 14 | val dateSubscribed: Date 15 | ) 16 | } 17 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/site/DomainAvailabilityResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.site 2 | 3 | @Suppress("ConstructorParameterNaming") 4 | class DomainAvailabilityResponse( 5 | val product_id: Int?, 6 | val product_slug: String?, 7 | val domain_name: String?, 8 | val status: String?, 9 | val mappable: String?, 10 | val cost: String?, 11 | val supports_privacy: Boolean = false 12 | ) 13 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/persistence/converters/LocalIdConverter.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.persistence.converters 2 | 3 | import androidx.room.TypeConverter 4 | import org.wordpress.android.fluxc.model.LocalOrRemoteId.LocalId 5 | 6 | class LocalIdConverter { 7 | @TypeConverter 8 | fun fromLocalId(value: LocalId?) = value?.value 9 | 10 | @TypeConverter 11 | fun toLocalId(value: Int?) = value?.let { LocalId(it) } 12 | } 13 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/jetpacksocial/JetpackSocial.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.jetpacksocial 2 | 3 | data class JetpackSocial( 4 | val isShareLimitEnabled: Boolean, 5 | val toBePublicizedCount: Int, 6 | val shareLimit: Int, 7 | val publicizedCount: Int, 8 | val sharedPostsCount: Int, 9 | val sharesRemaining: Int, 10 | val isEnhancedPublishingEnabled: Boolean, 11 | val isSocialImageGeneratorEnabled: Boolean, 12 | ) 13 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/stats/time/VisitsAndViewsModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.stats.time 2 | 3 | data class VisitsAndViewsModel(val period: String, val dates: List) { 4 | data class PeriodData( 5 | val period: String, 6 | val views: Long, 7 | val visitors: Long, 8 | val likes: Long, 9 | val reblogs: Long, 10 | val comments: Long, 11 | val posts: Long 12 | ) 13 | } 14 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/orderstats/VisitorStatsApiResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.orderstats 2 | 3 | import com.google.gson.JsonElement 4 | import org.wordpress.android.fluxc.network.Response 5 | 6 | class VisitorStatsApiResponse : Response { 7 | val date: String? = null 8 | val unit: String? = null 9 | val fields: JsonElement? = null 10 | val data: JsonElement? = null 11 | } 12 | -------------------------------------------------------------------------------- /example/src/test/resources/wc/product-attribute-delete.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": 17, 3 | "name": "Size", 4 | "slug": "pa_size", 5 | "type": "select", 6 | "order_by": "name", 7 | "has_archives": true, 8 | "_links": { 9 | "self": [ 10 | { 11 | "href": "https://example.com/wp-json/wc/v3/products/attributes/6" 12 | } 13 | ], 14 | "collection": [ 15 | { 16 | "href": "https://example.com/wp-json/wc/v3/products/attributes" 17 | } 18 | ] 19 | } 20 | } -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/stats/time/AuthorsModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.stats.time 2 | 3 | data class AuthorsModel(val otherViews: Int, val authors: List, val hasMore: Boolean) { 4 | data class Author( 5 | val name: String, 6 | val views: Int, 7 | val avatarUrl: String?, 8 | val posts: List 9 | ) 10 | data class Post(val id: String, val title: String, val views: Int, val url: String?) 11 | } 12 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/notifications/NotificationHashApiResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.notifications 2 | 3 | import org.wordpress.android.fluxc.network.Response 4 | 5 | /** 6 | * The response to fetching only the `id` and `note_hash` from the remote api endpoint 7 | */ 8 | @Suppress("VariableNaming") 9 | class NotificationHashApiResponse : Response { 10 | var id: Long = 0 11 | var note_hash: Long = 0 12 | } 13 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/post/PostRemoteAutoSaveModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.post 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class PostRemoteAutoSaveModel( 6 | @SerializedName("ID") val revisionId: Long?, 7 | @SerializedName("post_ID") val remotePostId: Long?, 8 | @SerializedName("modified") val modified: String?, 9 | @SerializedName("preview_URL") val previewUrl: String? 10 | ) 11 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/persistence/converters/RemoteIdConverter.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.persistence.converters 2 | 3 | import androidx.room.TypeConverter 4 | import org.wordpress.android.fluxc.model.LocalOrRemoteId.RemoteId 5 | 6 | class RemoteIdConverter { 7 | @TypeConverter 8 | fun fromRemoteId(value: RemoteId?) = value?.value 9 | 10 | @TypeConverter 11 | fun toRemoteId(value: Long?) = value?.let { RemoteId(it) } 12 | } 13 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-pay-capture-terminal-payment-response-amount-too-small.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "wcpay_capture_error", 3 | "message": "Payment capture failed to complete with the following message: Minimum required amount was not reached. The minimum amount to capture is 0.5 USD.", 4 | "data": { 5 | "status": 400, 6 | "extra_details": { 7 | "minimum_amount": 50, 8 | "minimum_amount_currency": "USD" 9 | }, 10 | "error_type": "amount_too_small" 11 | } 12 | } -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/stats/CommentsModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.stats 2 | 3 | data class CommentsModel( 4 | val posts: List, 5 | val authors: List, 6 | val hasMorePosts: Boolean, 7 | val hasMoreAuthors: Boolean 8 | ) { 9 | data class Post(val id: Long, val name: String, val comments: Int, val link: String) 10 | data class Author(val name: String, val comments: Int, val link: String, val gravatar: String) 11 | } 12 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/account/signup/AccountCreatedDto.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.account.signup 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class AccountCreatedDto( 6 | @SerializedName("success") val success: Boolean, 7 | @SerializedName("username") val username: String, 8 | @SerializedName("user_id") val id: String, 9 | @SerializedName("bearer_token") val token: String, 10 | ) 11 | -------------------------------------------------------------------------------- /example/src/test/resources/wc/attribute-term-operation-response.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": 23, 3 | "name": "XXS", 4 | "slug": "xxs", 5 | "description": "", 6 | "menu_order": 1, 7 | "count": 1, 8 | "_links": { 9 | "self": [ 10 | { 11 | "href": "https://example.com/wp-json/wc/v3/products/attributes/2/terms/23" 12 | } 13 | ], 14 | "collection": [ 15 | { 16 | "href": "https://example.com/wp-json/wc/v3/products/attributes/2/terms" 17 | } 18 | ] 19 | } 20 | } -------------------------------------------------------------------------------- /example/src/test/resources/wc/product-attribute-create.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": 1, 3 | "name": "Color", 4 | "slug": "pa_color", 5 | "type": "select", 6 | "order_by": "menu_order", 7 | "has_archives": true, 8 | "_links": { 9 | "self": [ 10 | { 11 | "href": "https://example.com/wp-json/wc/v3/products/attributes/6" 12 | } 13 | ], 14 | "collection": [ 15 | { 16 | "href": "https://example.com/wp-json/wc/v3/products/attributes" 17 | } 18 | ] 19 | } 20 | } -------------------------------------------------------------------------------- /example/src/test/resources/wc/product-attribute-update.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": 99, 3 | "name": "test_name", 4 | "slug": "pa_test", 5 | "type": "test_type", 6 | "order_by": "test", 7 | "has_archives": false, 8 | "_links": { 9 | "self": [ 10 | { 11 | "href": "https://example.com/wp-json/wc/v3/products/attributes/6" 12 | } 13 | ], 14 | "collection": [ 15 | { 16 | "href": "https://example.com/wp-json/wc/v3/products/attributes" 17 | } 18 | ] 19 | } 20 | } -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/BloggingRemindersModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model 2 | 3 | data class BloggingRemindersModel( 4 | val siteId: Int, 5 | val enabledDays: Set = setOf(), 6 | val hour: Int = 10, 7 | val minute: Int = 0, 8 | val isPromptIncluded: Boolean = false, 9 | val isPromptsCardEnabled: Boolean = true, 10 | ) { 11 | enum class Day { 12 | MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/common/comments/CommentsApiPayload.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.common.comments 2 | 3 | import org.wordpress.android.fluxc.Payload 4 | import org.wordpress.android.fluxc.store.CommentStore.CommentError 5 | 6 | data class CommentsApiPayload( 7 | val response: T? = null 8 | ) : Payload() { 9 | constructor(error: CommentError, response: T? = null) : this(response) { 10 | this.error = error 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/product/ProductShippingClassApiResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.product 2 | 3 | import org.wordpress.android.fluxc.network.Response 4 | 5 | @Suppress("PropertyName") 6 | class ProductShippingClassApiResponse : Response { 7 | var id: Long = 0L 8 | 9 | var name: String? = null 10 | var slug: String? = null 11 | var description: String? = null 12 | 13 | var count = 0 14 | } 15 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/bundlestats/BundleStatsApiResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.bundlestats 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class BundleStatsApiResponse(val totals: BundleStatsTotals) 6 | 7 | data class BundleStatsTotals( 8 | @SerializedName("items_sold") 9 | val itemsSold: Int? = null, 10 | @SerializedName("net_revenue") 11 | val netRevenue: Double? = null, 12 | ) 13 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/persistence/converters/BigDecimalConverter.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.persistence.converters 2 | 3 | import androidx.room.TypeConverter 4 | import java.math.BigDecimal 5 | 6 | class BigDecimalConverter { 7 | @TypeConverter 8 | fun bigDecimalToString(input: BigDecimal): String = input.toPlainString() 9 | 10 | @TypeConverter 11 | fun stringToBigDecimal(input: String): BigDecimal = input.toBigDecimalOrNull() ?: BigDecimal.ZERO 12 | } 13 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/bloggingprompts/BloggingPromptModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.bloggingprompts 2 | 3 | import java.util.Date 4 | 5 | data class BloggingPromptModel( 6 | val id: Int, 7 | val text: String, 8 | val date: Date, 9 | val isAnswered: Boolean, 10 | val attribution: String, 11 | val respondentsCount: Int, 12 | val respondentsAvatarUrls: List, 13 | val answeredLink: String, 14 | val bloganuaryId: String? = null, 15 | ) 16 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/utils/DateTimeUtilsWrapper.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.utils 2 | 3 | import dagger.Reusable 4 | import org.wordpress.android.util.DateTimeUtils 5 | import java.util.Date 6 | import javax.inject.Inject 7 | 8 | @Reusable 9 | class DateTimeUtilsWrapper @Inject constructor() { 10 | fun timestampFromIso8601(strDate: String?) = DateTimeUtils.timestampFromIso8601(strDate) 11 | fun iso8601UTCFromDate(date: Date?): String? = DateTimeUtils.iso8601UTCFromDate(date) 12 | } 13 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/persistence/converters/DiscountTypeConverter.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.persistence.converters 2 | 3 | import androidx.room.TypeConverter 4 | import org.wordpress.android.fluxc.persistence.entity.CouponEntity.DiscountType 5 | 6 | class DiscountTypeConverter { 7 | @TypeConverter 8 | fun fromDiscountType(type: DiscountType) = type.value 9 | 10 | @TypeConverter 11 | fun toDiscountType(value: String) = DiscountType.fromString(value) 12 | } 13 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/stats/time/CountryViewsModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.stats.time 2 | 3 | data class CountryViewsModel( 4 | val otherViews: Int, 5 | val totalViews: Int, 6 | val countries: List, 7 | val hasMore: Boolean 8 | ) { 9 | data class Country( 10 | val countryCode: String, 11 | val fullName: String, 12 | val views: Int, 13 | val flagIconUrl: String?, 14 | val flatFlagIconUrl: String? 15 | ) 16 | } 17 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/domain/GlobalAddonGroup.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.domain 2 | 3 | data class GlobalAddonGroup( 4 | val name: String, 5 | val restrictedCategoriesIds: CategoriesRestriction, 6 | val addons: List 7 | ) { 8 | sealed class CategoriesRestriction { 9 | object AllProductsCategories : CategoriesRestriction() 10 | data class SpecifiedProductCategories(val productCategories: List) : CategoriesRestriction() 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /example/src/main/java/org/wordpress/android/fluxc/example/utils/ArrayUtils.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.example.utils 2 | 3 | object ArrayUtils { 4 | private const val INDEX_NOT_FOUND = -1 5 | 6 | @JvmStatic 7 | fun contains(stringArray: Array, string: String): Boolean { 8 | return indexOf(stringArray, string) != INDEX_NOT_FOUND 9 | } 10 | 11 | @JvmStatic 12 | fun indexOf(stringArray: Array, string: String): Int { 13 | return stringArray.indexOf(string) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/site/NewSiteResponse.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.site; 2 | 3 | import org.wordpress.android.fluxc.network.Response; 4 | 5 | public class NewSiteResponse implements Response { 6 | public boolean success; 7 | public BlogDetails blog_details; 8 | public String error; 9 | public String message; 10 | 11 | public static class BlogDetails { 12 | public String url; 13 | public String blogid; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/utils/CommentErrorUtilsWrapper.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.utils 2 | 3 | import dagger.Reusable 4 | import org.wordpress.android.fluxc.network.BaseRequest.BaseNetworkError 5 | import org.wordpress.android.fluxc.store.CommentStore.CommentError 6 | import javax.inject.Inject 7 | 8 | @Reusable 9 | class CommentErrorUtilsWrapper @Inject constructor() { 10 | fun networkToCommentError(error: BaseNetworkError): CommentError = CommentErrorUtils.networkToCommentError(error) 11 | } 12 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/utils/BigDecimalExt.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.utils 2 | 3 | import java.math.BigDecimal 4 | 5 | /** 6 | * Returns the sum of all values produced by [selector] function applied to each element in the collection. 7 | */ 8 | public inline fun Iterable.sumBy(selector: (T) -> BigDecimal): BigDecimal { 9 | var sum: BigDecimal = BigDecimal.ZERO 10 | for (element in this) { 11 | sum += selector(element) 12 | } 13 | return sum 14 | } 15 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/site/AutomatedTransferEligibilityCheckResponse.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.site; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | public class AutomatedTransferEligibilityCheckResponse { 6 | @SerializedName("is_eligible") 7 | public boolean isEligible; 8 | public EligibilityError[] errors; 9 | 10 | class EligibilityError { 11 | public String code; 12 | public String message; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/AcceptHeaderStrategy.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network 2 | 3 | import javax.inject.Inject 4 | 5 | sealed class AcceptHeaderStrategy(val header: String = ACCEPT_HEADER, open val value: String) { 6 | class JsonAcceptHeader @Inject constructor() : AcceptHeaderStrategy(value = APPLICATION_JSON_VALUE) 7 | 8 | companion object { 9 | private const val ACCEPT_HEADER = "Accept" 10 | private const val APPLICATION_JSON_VALUE = "application/json" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/onboarding/OnboardingTasksResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.onboarding 2 | 3 | data class TaskGroupDto( 4 | val id: String, 5 | val tasks: List 6 | ) 7 | 8 | data class TaskDto( 9 | val id: String, 10 | val isComplete: Boolean = false, 11 | val isVisited: Boolean = false, 12 | val isActioned: Boolean = false, 13 | val canView: Boolean = false, 14 | val actionUrl: String? 15 | ) 16 | 17 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/action/EditorThemeAction.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.action 2 | 3 | import org.wordpress.android.fluxc.annotations.Action 4 | import org.wordpress.android.fluxc.annotations.ActionEnum 5 | import org.wordpress.android.fluxc.annotations.action.IAction 6 | import org.wordpress.android.fluxc.store.EditorThemeStore.FetchEditorThemePayload 7 | 8 | @ActionEnum 9 | enum class EditorThemeAction : IAction { 10 | @Action(payloadType = FetchEditorThemePayload::class) 11 | FETCH_EDITOR_THEME 12 | } 13 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/stats/InsightsLatestPostModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.stats 2 | 3 | import java.util.Date 4 | 5 | data class InsightsLatestPostModel( 6 | val siteId: Long, 7 | val postTitle: String, 8 | val postURL: String, 9 | val postDate: Date, 10 | val postId: Long, 11 | val postViewsCount: Int = 0, 12 | val postCommentCount: Int = 0, 13 | val postLikeCount: Int, 14 | val dayViews: List>, 15 | val featuredImageUrl: String 16 | ) 17 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/utils/JsonExt.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.utils 2 | 3 | import com.google.gson.Gson 4 | import com.google.gson.reflect.TypeToken 5 | 6 | // Convert an object of type T to type R 7 | inline fun T.convert(): R { 8 | val gson = Gson() 9 | val json = gson.toJson(this) 10 | return gson.fromJson(json, object : TypeToken() {}.type) 11 | } 12 | 13 | // Convert an object to a Map 14 | fun T.toMap(): Map { 15 | return convert() 16 | } 17 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/utils/MapExt.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.utils 2 | 3 | fun MutableMap.putIfNotEmpty(vararg pairs: Pair) = apply { 4 | pairs.forEach { pair -> 5 | pair.second?.takeIf { it.isNotEmpty() } 6 | ?.let { put(pair.first, it) } 7 | } 8 | } 9 | 10 | fun MutableMap.putIfNotNull(vararg pairs: Pair) = apply { 11 | pairs.forEach { pair -> 12 | pair.second?.let { put(pair.first, it) } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /example/src/test/java/org/wordpress/android/fluxc/CoroutinesTestUtils.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc 2 | 3 | import kotlinx.coroutines.CoroutineScope 4 | import kotlinx.coroutines.Dispatchers 5 | import kotlinx.coroutines.runBlocking 6 | import kotlin.coroutines.CoroutineContext 7 | import kotlin.coroutines.EmptyCoroutineContext 8 | 9 | fun test(context: CoroutineContext = EmptyCoroutineContext, block: suspend CoroutineScope.() -> T) { 10 | runBlocking(context, block) 11 | } 12 | 13 | val TEST_SCOPE = CoroutineScope(Dispatchers.Unconfined) 14 | -------------------------------------------------------------------------------- /example/src/test/resources/wc/order-shipping-lines.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": 2, 4 | "method_title": "Flat Rate Shipping", 5 | "method_id": "flat_rate", 6 | "instance_id": "0", 7 | "total": "10.00", 8 | "total_tax": "0.00", 9 | "taxes": [], 10 | "meta_data": [] 11 | }, 12 | { 13 | "id": 3, 14 | "method_title": "Local Pickup Shipping", 15 | "method_id": "local_pickup", 16 | "instance_id": "0", 17 | "total": "20.00", 18 | "total_tax": "0.00", 19 | "taxes": [], 20 | "meta_data": [] 21 | } 22 | ] 23 | -------------------------------------------------------------------------------- /fluxc-annotations/src/main/java/org/wordpress/android/fluxc/annotations/action/Action.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.annotations.action; 2 | 3 | public class Action { 4 | private final IAction mActionType; 5 | private final T mPayload; 6 | 7 | public Action(IAction actionType, T payload) { 8 | mActionType = actionType; 9 | mPayload = payload; 10 | } 11 | 12 | public IAction getType() { 13 | return mActionType; 14 | } 15 | 16 | public T getPayload() { 17 | return mPayload; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/model/taxes/WCTaxClassMapper.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.taxes 2 | 3 | import org.wordpress.android.fluxc.network.rest.wpcom.wc.taxes.WCTaxRestClient.TaxClassApiResponse 4 | import javax.inject.Inject 5 | 6 | class WCTaxClassMapper 7 | @Inject constructor() { 8 | fun map(response: TaxClassApiResponse): WCTaxClassModel { 9 | return WCTaxClassModel().apply { 10 | name = response.name ?: "" 11 | slug = response.slug ?: "" 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /example/src/test/resources/wp/jetpack/scan/threat/threat-fixable.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": 22856973, 3 | "signature": "Vulnerable.WP.Extension", 4 | "first_detected": "2020-06-24T21:03:20.000Z", 5 | "description": "The plugin WooCommerce (version 4.1.0) has a known vulnerability", 6 | "status": "current", 7 | "fixable": { 8 | "fixer": "update", 9 | "target": "4.2.2" 10 | }, 11 | "extension": { 12 | "type": "plugin", 13 | "slug": "woocommerce", 14 | "name": "WooCommerce", 15 | "version": "4.1.0", 16 | "isPremium": false 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/auth/AppSecrets.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.auth; 2 | 3 | public class AppSecrets { 4 | private final String mAppId; 5 | private final String mAppSecret; 6 | 7 | public AppSecrets(String appId, String appSecret) { 8 | mAppId = appId; 9 | mAppSecret = appSecret; 10 | } 11 | 12 | public String getAppId() { 13 | return mAppId; 14 | } 15 | 16 | public String getAppSecret() { 17 | return mAppSecret; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/order/OrderSummaryApiResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.order 2 | 3 | import com.google.gson.annotations.SerializedName 4 | import org.wordpress.android.fluxc.network.Response 5 | 6 | class OrderSummaryApiResponse : Response { 7 | val id: Long? = null 8 | 9 | @SerializedName("date_created_gmt") 10 | val dateCreatedGmt: String? = null 11 | 12 | @SerializedName("date_modified_gmt") 13 | val dateModifiedGmt: String? = null 14 | } 15 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/DomainModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model 2 | 3 | import org.wordpress.android.fluxc.network.rest.wpcom.site.Domain 4 | 5 | /** 6 | * Lightweight version of the [Domain] to be stored in the database. 7 | */ 8 | data class DomainModel( 9 | val domain: String, 10 | val primaryDomain: Boolean, 11 | val wpcomDomain: Boolean 12 | ) 13 | 14 | fun Domain.asDomainModel() = DomainModel( 15 | domain = domain.orEmpty(), 16 | primaryDomain = primaryDomain, 17 | wpcomDomain = wpcomDomain 18 | ) 19 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/order/OrderShipmentTrackingApiResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.order 2 | 3 | import org.wordpress.android.fluxc.network.Response 4 | 5 | @Suppress("PropertyName", "VariableNaming") 6 | class OrderShipmentTrackingApiResponse : Response { 7 | val tracking_id: String? = null 8 | val tracking_provider: String? = null 9 | val tracking_link: String? = null 10 | val tracking_number: String? = null 11 | val date_shipped: String? = null 12 | } 13 | -------------------------------------------------------------------------------- /example/src/test/java/org/wordpress/android/fluxc/WellSqlTestUtils.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc; 2 | 3 | import com.yarolegovich.wellsql.WellSql; 4 | 5 | import org.wordpress.android.fluxc.model.AccountModel; 6 | 7 | public class WellSqlTestUtils { 8 | public static void setupWordPressComAccount() { 9 | AccountModel account = new AccountModel(); 10 | account.setUserId(20151021); 11 | account.setUserName("fluxc"); 12 | account.setEmail("flux@capacitorsrus.co"); 13 | 14 | WellSql.insert(account).execute(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/stats/time/PostAndPageViewsModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.stats.time 2 | 3 | data class PostAndPageViewsModel(val views: List, val hasMore: Boolean) { 4 | data class ViewsModel( 5 | val id: Long, 6 | val title: String, 7 | val views: Int, 8 | val type: ViewsType, 9 | val url: String 10 | ) 11 | 12 | enum class ViewsType { 13 | POST, 14 | PAGE, 15 | HOMEPAGE, 16 | OTHER, 17 | ATTACHMENT 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/product/ProductTagApiResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.product 2 | 3 | import com.google.gson.JsonElement 4 | import org.wordpress.android.fluxc.network.Response 5 | 6 | @Suppress("PropertyName") 7 | class ProductTagApiResponse : Response { 8 | var id: Long = 0L 9 | 10 | var name: String? = null 11 | var slug: String? = null 12 | var description: String? = null 13 | 14 | val error: JsonElement? = null 15 | 16 | var count = 0 17 | } 18 | -------------------------------------------------------------------------------- /fluxc-annotations/src/main/java/org/wordpress/android/fluxc/annotations/Action.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.annotations; 2 | 3 | import org.wordpress.android.fluxc.annotations.action.NoPayload; 4 | 5 | import java.lang.annotation.ElementType; 6 | import java.lang.annotation.Target; 7 | 8 | /** 9 | * Defines an individual action with optional payload. To annotate an option with no payload, don't set the 10 | * {@link Action#payloadType}. 11 | */ 12 | @Target(ElementType.FIELD) 13 | public @interface Action { 14 | Class payloadType() default NoPayload.class; 15 | } 16 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/action/StockMediaAction.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.action; 2 | 3 | import org.wordpress.android.fluxc.annotations.Action; 4 | import org.wordpress.android.fluxc.annotations.ActionEnum; 5 | import org.wordpress.android.fluxc.annotations.action.IAction; 6 | import org.wordpress.android.fluxc.store.StockMediaStore; 7 | 8 | @ActionEnum 9 | public enum StockMediaAction implements IAction { 10 | // Remote actions 11 | @Action(payloadType = StockMediaStore.FetchStockMediaListPayload.class) 12 | FETCH_STOCK_MEDIA 13 | } 14 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/stats/time/ClicksModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.stats.time 2 | 3 | data class ClicksModel(val otherClicks: Int, val totalClicks: Int, val groups: List, val hasMore: Boolean) { 4 | data class Group( 5 | val groupId: String?, 6 | val name: String?, 7 | val icon: String?, 8 | val url: String?, 9 | val views: Int?, 10 | val clicks: List 11 | ) 12 | data class Click(val name: String, val views: Int, val icon: String?, val url: String?) 13 | } 14 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/site/ConnectSiteInfoResponse.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.site; 2 | 3 | import org.wordpress.android.fluxc.network.Response; 4 | 5 | public class ConnectSiteInfoResponse implements Response { 6 | public boolean exists; 7 | public boolean isWordPress; 8 | public boolean hasJetpack; 9 | public boolean isJetpackActive; 10 | public boolean isJetpackConnected; 11 | public boolean isWordPressDotCom; // CHECKSTYLE IGNORE 12 | public String urlAfterRedirects; 13 | } 14 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/store/InvalidateDeviceRegistration.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.store 2 | 3 | import org.wordpress.android.fluxc.utils.PreferenceUtils 4 | import javax.inject.Inject 5 | 6 | class InvalidateDeviceRegistration @Inject constructor( 7 | private val prefsWrapper: PreferenceUtils.PreferenceUtilsWrapper 8 | ) { 9 | operator fun invoke() { 10 | prefsWrapper.getFluxCPreferences() 11 | .edit() 12 | .remove(NotificationStore.WPCOM_PUSH_DEVICE_SERVER_ID) 13 | .apply() 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/addons/dto/AddOnGroupDto.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.addons.dto 2 | 3 | import com.google.gson.annotations.SerializedName 4 | import org.wordpress.android.fluxc.model.addons.RemoteAddonDto 5 | 6 | data class AddOnGroupDto( 7 | @SerializedName("id") val id: Long, 8 | @SerializedName("name") val name: String, 9 | @SerializedName("restrict_to_category_ids") val categoryIds: List?, 10 | @SerializedName("fields") val addons: List 11 | ) 12 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/stats/YearsInsightsModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.stats 2 | 3 | data class YearsInsightsModel(val years: List) { 4 | data class YearInsights( 5 | val avgComments: Double?, 6 | val avgImages: Double?, 7 | val avgLikes: Double?, 8 | val avgWords: Double?, 9 | val totalComments: Int, 10 | val totalImages: Int, 11 | val totalLikes: Int, 12 | val totalPosts: Int, 13 | val totalWords: Int, 14 | val year: String 15 | ) 16 | } 17 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/fetch-notification-hashes-response-success.json: -------------------------------------------------------------------------------- 1 | { 2 | "last_seen_time": "1545385215", 3 | "number": 5, 4 | "notes": [ 5 | { 6 | "id": 3633457829, 7 | "note_hash": 1880451709 8 | }, 9 | { 10 | "id": 3689918893, 11 | "note_hash": 33118303 12 | }, 13 | { 14 | "id": 3616322875, 15 | "note_hash": 3760179657 16 | }, 17 | { 18 | "id": 3689748979, 19 | "note_hash": 3333755643 20 | }, 21 | { 22 | "id": 3604874081, 23 | "note_hash": 1502673285 24 | } 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /example/src/test/resources/wp/jetpack/scan/threat/threat-vulnerable-extension.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": 22920156, 3 | "signature": "Vulnerable.WP.Extension", 4 | "first_detected": "2020-06-25T14:03:40.000Z", 5 | "description": "The plugin WooCommerce (version 4.1.0) has a known vulnerability", 6 | "status": "current", 7 | "fixable": { 8 | "fixer": "update", 9 | "target": "4.2.2" 10 | }, 11 | "extension": { 12 | "type": "plugin", 13 | "slug": "woocommerce", 14 | "name": "WooCommerce", 15 | "version": "4.1.0", 16 | "isPremium": false 17 | } 18 | } 19 | 20 | 21 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/module/AppContextModule.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.module; 2 | 3 | import android.content.Context; 4 | 5 | import javax.inject.Singleton; 6 | 7 | import dagger.Module; 8 | import dagger.Provides; 9 | 10 | @Module 11 | public class AppContextModule { 12 | private final Context mAppContext; 13 | 14 | public AppContextModule(Context appContext) { 15 | mAppContext = appContext; 16 | } 17 | 18 | @Singleton 19 | @Provides 20 | Context providesContext() { 21 | return mAppContext; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/persistence/coverters/BlazeCampaignsDateConverter.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.persistence.coverters 2 | 3 | import androidx.room.TypeConverter 4 | import org.wordpress.android.fluxc.network.rest.wpcom.blaze.BlazeCampaignsUtils 5 | import java.util.Date 6 | 7 | class BlazeCampaignsDateConverter { 8 | @TypeConverter 9 | fun stringToDate(value: String?) = value?.let { BlazeCampaignsUtils.stringToDate(it) } 10 | 11 | @TypeConverter 12 | fun dateToString(date: Date?) = date?.let { BlazeCampaignsUtils.dateToString(it) } 13 | } 14 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/action/EncryptedLogAction.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.action 2 | 3 | import org.wordpress.android.fluxc.annotations.Action 4 | import org.wordpress.android.fluxc.annotations.ActionEnum 5 | import org.wordpress.android.fluxc.annotations.action.IAction 6 | import org.wordpress.android.fluxc.store.EncryptedLogStore.UploadEncryptedLogPayload 7 | 8 | @ActionEnum 9 | enum class EncryptedLogAction : IAction { 10 | @Action(payloadType = UploadEncryptedLogPayload::class) 11 | UPLOAD_LOG, 12 | @Action 13 | RESET_UPLOAD_STATES 14 | } 15 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/module/ApplicationPasswordsModule.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.module 2 | 3 | import dagger.BindsOptionalOf 4 | import dagger.Module 5 | import org.wordpress.android.fluxc.network.rest.wpapi.applicationpasswords.ApplicationPasswordsListener 6 | 7 | @Module 8 | interface ApplicationPasswordsModule { 9 | @BindsOptionalOf 10 | fun bindOptionalApplicationPasswordsListener(): ApplicationPasswordsListener 11 | @BindsOptionalOf 12 | @ApplicationPasswordsClientId 13 | fun bindOptionalApplicationPasswordsClientId(): String 14 | } 15 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/site/DomainSuggestionResponse.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.site; 2 | 3 | import org.wordpress.android.fluxc.network.Response; 4 | 5 | public class DomainSuggestionResponse implements Response { 6 | public String cost; 7 | public String domain_name; 8 | public boolean is_free; 9 | public boolean is_premium; 10 | public boolean supports_privacy; 11 | 12 | public int product_id; 13 | public String product_slug; 14 | public String vendor; 15 | public float relevance; 16 | } 17 | -------------------------------------------------------------------------------- /example/src/androidTest/java/org/wordpress/android/fluxc/utils/WellSqlUtils.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.utils; 2 | 3 | import com.yarolegovich.wellsql.WellSql; 4 | 5 | import org.wordpress.android.fluxc.model.PostModel; 6 | import org.wordpress.android.fluxc.model.TermModel; 7 | 8 | public class WellSqlUtils { 9 | public static int getTotalPostsCount() { 10 | return WellSql.select(PostModel.class).getAsCursor().getCount(); 11 | } 12 | 13 | public static int getTotalTermsCount() { 14 | return WellSql.select(TermModel.class).getAsCursor().getCount(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/vertical/VerticalSegmentModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.vertical 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class VerticalSegmentModel( 6 | @SerializedName("segment_type_title") val title: String, 7 | @SerializedName("segment_type_subtitle") val subtitle: String, 8 | @SerializedName("icon_URL") val iconUrl: String, 9 | @SerializedName("icon_color") val iconColor: String, 10 | @SerializedName("id") val segmentId: Long, 11 | @SerializedName("mobile") val isMobileSegment: Boolean 12 | ) 13 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpapi/applicationpasswords/ApplicationPasswordsListener.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpapi.applicationpasswords 2 | 3 | import org.wordpress.android.fluxc.model.SiteModel 4 | import org.wordpress.android.fluxc.network.rest.wpapi.WPAPINetworkError 5 | 6 | interface ApplicationPasswordsListener { 7 | fun onNewPasswordCreated(isPasswordRegenerated: Boolean) {} 8 | fun onPasswordGenerationFailed(networkError: WPAPINetworkError) {} 9 | fun onFeatureUnavailable(siteModel: SiteModel, networkError: WPAPINetworkError) {} 10 | } 11 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/shippinglabels/ShippingLabelApiResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.shippinglabels 2 | 3 | import com.google.gson.JsonElement 4 | import org.wordpress.android.fluxc.network.Response 5 | 6 | class ShippingLabelApiResponse : Response { 7 | val orderId: Long? = null 8 | val paperSize: String? = null 9 | 10 | val formData: JsonElement? = null 11 | val storeOptions: JsonElement? = null 12 | val labelsData: List? = null 13 | 14 | val success: Boolean? = null 15 | } 16 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/encryptedlogging/EncryptionUtils.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.encryptedlogging 2 | 3 | import com.goterl.lazysodium.LazySodiumAndroid 4 | import com.goterl.lazysodium.SodiumAndroid 5 | 6 | /** 7 | * Convenience helpers for Encrypted Logging 8 | */ 9 | object EncryptionUtils { 10 | /** 11 | * Use a single shared instance of the Sodium library. 12 | * 13 | * The initialization is inexpensive, but verbose, so this is just syntactic sugar. 14 | */ 15 | @JvmStatic 16 | val sodium = LazySodiumAndroid(SodiumAndroid()) 17 | } 18 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/utils/extensions/StringExtensions.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.utils.extensions 2 | 3 | import java.net.URLEncoder 4 | 5 | /** 6 | * Encodes delimiting characters as per 7 | * [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986#section-2.2) 8 | */ 9 | fun String.encodeRfc3986Delimiters(): String { 10 | val rfc3986Delimiters = "!'()*" 11 | 12 | return replace("[$rfc3986Delimiters]".toRegex()) { 13 | URLEncoder.encode(it.value, "UTF-8") 14 | } 15 | } 16 | 17 | fun String.slashJoin(end: String) = "${this.trimEnd('/')}/${end.trimStart('/')}" 18 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/action/WhatsNewAction.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.action 2 | 3 | import org.wordpress.android.fluxc.annotations.Action 4 | import org.wordpress.android.fluxc.annotations.ActionEnum 5 | import org.wordpress.android.fluxc.annotations.action.IAction 6 | import org.wordpress.android.fluxc.store.WhatsNewStore.WhatsNewFetchPayload 7 | 8 | @ActionEnum 9 | enum class WhatsNewAction : IAction { 10 | // Remote actions 11 | @Action(payloadType = WhatsNewFetchPayload::class) 12 | FETCH_REMOTE_ANNOUNCEMENT, 13 | 14 | @Action 15 | FETCH_CACHED_ANNOUNCEMENT 16 | } 17 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/stats/PostDetailStatsModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.stats 2 | 3 | data class PostDetailStatsModel( 4 | val views: Int = 0, 5 | val dayViews: List, 6 | val weekViews: List, 7 | val yearsTotal: List, 8 | val yearsAverage: List 9 | ) { 10 | data class Year(val year: Int, val months: List, val value: Int) 11 | data class Month(val month: Int, val count: Int) 12 | data class Week(val days: List, val average: Int, val total: Int) 13 | data class Day(val period: String, val count: Int) 14 | } 15 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/model/payments/inperson/WCPaymentTransactionsSummaryResult.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.payments.inperson 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class WCPaymentTransactionsSummaryResult( 6 | @SerializedName("count") val transactionsCount: Int, 7 | val currency: String, 8 | val total: Int, 9 | val fees: Int, 10 | val net: Int, 11 | @SerializedName("store_currencies") val storeCurrencies: List?, 12 | @SerializedName("customer_currencies") val customerCurrencies: List?, 13 | ) 14 | -------------------------------------------------------------------------------- /example/src/androidTest/java/org/wordpress/android/fluxc/ditests/OkHttpTestComponent.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.ditests 2 | 3 | import dagger.Component 4 | import org.wordpress.android.fluxc.module.ReleaseNetworkModule 5 | import org.wordpress.android.fluxc.module.OkHttpClientModule 6 | import javax.inject.Singleton 7 | 8 | @Singleton 9 | @Component( 10 | modules = [ 11 | OkHttpClientModule::class, 12 | ReleaseNetworkModule::class, 13 | TestInterceptorModule::class 14 | ] 15 | ) 16 | interface OkHttpTestComponent { 17 | fun inject(test: OkHttpInjectionTest) 18 | } 19 | -------------------------------------------------------------------------------- /example/src/main/java/org/wordpress/android/fluxc/example/FragmentExt.kt: -------------------------------------------------------------------------------- 1 | @file:JvmName("FragmentExtensions") 2 | package org.wordpress.android.fluxc.example 3 | 4 | import androidx.fragment.app.Fragment 5 | 6 | /** 7 | * Shortcut for appending messages to the log in MainActivity 8 | */ 9 | fun Fragment.prependToLog(s: String) { 10 | (activity as? MainExampleActivity)?.prependToLog(s) 11 | } 12 | 13 | fun Fragment.replaceFragment(fragment: Fragment) { 14 | parentFragmentManager.beginTransaction() 15 | .replace(R.id.fragment_container, fragment) 16 | .addToBackStack(null) 17 | .commit() 18 | } 19 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/SiteHomepageSettings.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model 2 | 3 | import org.wordpress.android.fluxc.model.SiteHomepageSettings.ShowOnFront.PAGE 4 | import org.wordpress.android.fluxc.model.SiteHomepageSettings.ShowOnFront.POSTS 5 | 6 | sealed class SiteHomepageSettings(val showOnFront: ShowOnFront) { 7 | data class StaticPage(val pageForPostsId: Long, val pageOnFrontId: Long) : SiteHomepageSettings(PAGE) 8 | object Posts : SiteHomepageSettings(POSTS) 9 | 10 | enum class ShowOnFront(val value: String) { 11 | PAGE("page"), POSTS("posts") 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/product/attributes/terms/AttributeTermApiResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.product.attributes.terms 2 | 3 | import com.google.gson.annotations.SerializedName 4 | import org.wordpress.android.fluxc.network.Response 5 | 6 | class AttributeTermApiResponse : Response { 7 | val id: String? = null 8 | val name: String? = null 9 | val slug: String? = null 10 | val description: String? = null 11 | val count: String? = null 12 | @SerializedName("menu_order") 13 | val menuOrder: String? = null 14 | } 15 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/model/shippinglabels/WCShippingLabelPaperSize.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.shippinglabels 2 | 3 | enum class WCShippingLabelPaperSize(val stringValue: String) { 4 | A4("a4"), 5 | LABEL("label"), 6 | LEGAL("legal"), 7 | LETTER("letter"); 8 | 9 | companion object { 10 | fun fromString(value: String): WCShippingLabelPaperSize { 11 | // When the value is unknown, WCS in wp-admin uses Label by default 12 | return WCShippingLabelPaperSize.values().find { it.stringValue == value } ?: LABEL 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/shippinglabels/UpdateSettingsApiRequest.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.shippinglabels 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class UpdateSettingsApiRequest( 6 | @SerializedName("selected_payment_method_id") 7 | val selectedPaymentMethodId: Int?, 8 | @SerializedName("enabled") 9 | val isCreatingLabelsEnabled: Boolean?, 10 | @SerializedName("paper_size") 11 | val paperSize: String?, 12 | @SerializedName("email_receipts") 13 | val isEmailReceiptEnabled: Boolean? 14 | ) 15 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/persistence/converters/ISO8601DateConverter.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.persistence.converters 2 | 3 | import androidx.room.TypeConverter 4 | import org.wordpress.android.util.DateTimeUtils 5 | import java.util.Date 6 | 7 | /** 8 | * A Room type converter for ISO 8601-formatted dates 9 | */ 10 | class ISO8601DateConverter { 11 | @TypeConverter 12 | fun stringToDate(value: String?) = value?.let { DateTimeUtils.dateUTCFromIso8601(it) } 13 | 14 | @TypeConverter 15 | fun dateToString(date: Date?) = date?.let { DateTimeUtils.iso8601FromDate(it) } 16 | } 17 | -------------------------------------------------------------------------------- /.buildkite/publish-fluxc-processor.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euo pipefail 4 | 5 | # Retrieve data from previous steps 6 | PUBLISHED_FLUXC_ANNOTATIONS_VERSION=$(buildkite-agent meta-data get "PUBLISHED_FLUXC_ANNOTATIONS_VERSION") 7 | 8 | ./gradlew \ 9 | -PfluxcAnnotationsVersion="$PUBLISHED_FLUXC_ANNOTATIONS_VERSION" \ 10 | :fluxc-processor:prepareToPublishToS3 $(prepare_to_publish_to_s3_params) \ 11 | :fluxc-processor:publish 12 | 13 | # Add meta-data for the published version so we can use it in subsequent steps 14 | cat ./fluxc-processor/build/published-version.txt | buildkite-agent meta-data set "PUBLISHED_FLUXC_PROCESSOR_VERSION" 15 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/persistence/coverters/StringListConverter.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.persistence.coverters 2 | 3 | import androidx.room.TypeConverter 4 | 5 | class StringListConverter { 6 | companion object { 7 | private const val SEPARATOR = "," 8 | } 9 | 10 | @TypeConverter 11 | fun listToString(value: List): String = value.joinToString(separator = SEPARATOR) 12 | 13 | @TypeConverter 14 | fun stringToList(value: String): List = if (value.isEmpty()) { 15 | emptyList() 16 | } else { 17 | value.split(SEPARATOR).toList() 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/bundlestats/BundlesReportApiResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.bundlestats 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class BundlesReportApiResponse( 6 | @SerializedName("items_sold") 7 | val itemsSold: Int? = null, 8 | @SerializedName("net_revenue") 9 | val netRevenue: Double? = null, 10 | @SerializedName("extended_info") 11 | val extendedInfo: ExtendedInfo 12 | ) 13 | 14 | data class ExtendedInfo( 15 | val name: String? = null, 16 | val image: String? = null, 17 | ) 18 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-add-product-category-response-success.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "id": 105, 4 | "name": "test12", 5 | "slug": "test12", 6 | "parent": 0, 7 | "description": "", 8 | "display": "default", 9 | "image": null, 10 | "menu_order": 0, 11 | "count": 0, 12 | "_links": { 13 | "self": [{ 14 | "href": "https:\/\/awootestshop.mystagingwebsite.com\/wp-json\/wc\/v3\/products\/categories\/105" 15 | }], 16 | "collection": [{ 17 | "href": "https:\/\/awootestshop.mystagingwebsite.com\/wp-json\/wc\/v3\/products\/categories" 18 | }] 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /example/src/main/res/layout/media_list_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 13 | 14 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/product/attributes/AttributeApiResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.product.attributes 2 | 3 | import com.google.gson.annotations.SerializedName 4 | import org.wordpress.android.fluxc.network.Response 5 | 6 | class AttributeApiResponse : Response { 7 | val id: String? = null 8 | val name: String? = null 9 | val slug: String? = null 10 | val type: String? = null 11 | @SerializedName("order_by") 12 | val orderBy: String? = null 13 | @SerializedName("has_archives") 14 | val hasArchives: Boolean? = null 15 | } 16 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/utils/JsonUtils.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.utils 2 | 3 | import com.google.gson.JsonElement 4 | 5 | const val EMPTY_JSON_ARRAY = "[]" 6 | 7 | fun JsonElement?.isElementNullOrEmpty(): Boolean { 8 | return this?.let { 9 | when{ 10 | this.isJsonObject -> this.asJsonObject.size() == 0 11 | this.isJsonArray -> this.asJsonArray.size()== 0 12 | this.isJsonPrimitive && this.asJsonPrimitive.isString -> this.asString.isEmpty() 13 | this.isJsonNull -> true 14 | else -> false 15 | } 16 | } ?: true 17 | } 18 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-fetch-product-shipping-class-response-success.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "id": 34, 4 | "name": "example1", 5 | "slug": "example-1", 6 | "description": "Testing shipping class", 7 | "count": 1, 8 | "_links": { 9 | "self": [ 10 | { 11 | "href": "https:\/\/anitaastestwooshop.mystagingwebsite.com\/wp-json\/wc\/v3\/products\/shipping_classes\/34" 12 | } 13 | ], 14 | "collection": [ 15 | { 16 | "href": "https:\/\/anitaastestwooshop.mystagingwebsite.com\/wp-json\/wc\/v3\/products\/shipping_classes" 17 | } 18 | ] 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/model/WCProductComponent.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class WCProductComponent( 6 | @SerializedName("id") val id: Long, 7 | @SerializedName("title") val title: String, 8 | @SerializedName("description") val description: String, 9 | @SerializedName("query_type") val queryType: String, 10 | @SerializedName("query_ids") val queryIds: List, 11 | @SerializedName("default_option_id") val defaultOptionId: String, 12 | @SerializedName("thumbnail_src") val thumbnailUrl: String? 13 | ) 14 | -------------------------------------------------------------------------------- /example/src/test/java/org/wordpress/android/fluxc/utils/BloggingPromptUtilsTest.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.utils 2 | 3 | import org.junit.Assert 4 | import org.junit.Test 5 | import org.wordpress.android.fluxc.network.rest.wpcom.bloggingprompts.BloggingPromptsUtils 6 | 7 | class BloggingPromptUtilsTest { 8 | @Test 9 | fun testBloggingPromptDateStringToDateObject() { 10 | val date = "2022-05-01" 11 | 12 | // A string date converted to Date and back should be unaltered 13 | val result = BloggingPromptsUtils.stringToDate(date) 14 | Assert.assertEquals(date, BloggingPromptsUtils.dateToString(result)) 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpapi/OnWPAPIErrorListener.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpapi 2 | 3 | import org.wordpress.android.fluxc.network.BaseRequest 4 | import org.wordpress.android.fluxc.network.BaseRequest.BaseNetworkError 5 | 6 | fun interface OnWPAPIErrorListener { 7 | fun onErrorResponse(error: WPAPINetworkError) 8 | } 9 | 10 | class WPAPIErrorListenerWrapper( 11 | private val listener: OnWPAPIErrorListener 12 | ) : BaseRequest.BaseErrorListener { 13 | override fun onErrorResponse(error: BaseNetworkError) { 14 | listener.onErrorResponse(error as WPAPINetworkError) 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/model/shippinglabels/WCShippingRatesResult.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.shippinglabels 2 | 3 | import org.wordpress.android.fluxc.network.rest.wpcom.wc.shippinglabels.ShippingLabelRestClient.ShippingRatesApiResponse.ShippingOption.Rate 4 | 5 | data class WCShippingRatesResult( 6 | val packageRates: List 7 | ) { 8 | data class ShippingOption( 9 | val optionId: String, 10 | val rates: List 11 | ) 12 | 13 | data class ShippingPackage( 14 | val boxId: String, 15 | val shippingOptions: List 16 | ) 17 | } 18 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/product/CoreProductVisibility.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.product 2 | 3 | enum class CoreProductVisibility(val value: String) { 4 | VISIBLE("visible"), 5 | CATALOG("catalog"), 6 | SEARCH("search"), 7 | HIDDEN("hidden"); 8 | 9 | companion object { 10 | private val valueMap = values().associateBy(CoreProductVisibility::value) 11 | 12 | /** 13 | * Convert the base value into the associated CoreProductVisibility object 14 | */ 15 | fun fromValue(value: String) = valueMap[value] 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /.buildkite/schedules/dependency-analysis.yml: -------------------------------------------------------------------------------- 1 | # yaml-language-server: $schema=https://raw.githubusercontent.com/buildkite/pipeline-schema/main/schema.json 2 | --- 3 | 4 | agents: 5 | queue: "android" 6 | 7 | steps: 8 | - label: "dependency analysis" 9 | command: | 10 | echo "--- 📊 Analyzing" 11 | cp gradle.properties-example gradle.properties && cp -a example/properties-example/ example/properties/ 12 | ./gradlew buildHealth 13 | plugins: [$CI_TOOLKIT] 14 | artifact_paths: 15 | - "build/reports/dependency-analysis/build-health-report.*" 16 | notify: 17 | - slack: "#android-core-notifs" 18 | if: build.state == "failed" 19 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/jetpack-tunnel-root-response-success.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "name": "Site Title", 4 | "description": "", 5 | "url": "https:\/\/demo-site.blog", 6 | "home": "https:\/\/demo-site.blog", 7 | "gmt_offset": "0", 8 | "timezone_string": "", 9 | "namespaces": [ 10 | "oembed\/1.0", 11 | "akismet\/v1", 12 | "jetpack\/v4", 13 | "wc\/v1", 14 | "wc\/v2", 15 | "wc\/v3", 16 | "wp\/v2" 17 | ], 18 | "authentication": [], 19 | "_links": { 20 | "help": [ 21 | { 22 | "href": "http:\/\/v2.wp-api.org\/" 23 | } 24 | ] 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/account/DomainContactResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.account 2 | 3 | @Suppress("VariableNaming") 4 | class DomainContactResponse { 5 | var first_name: String? = null 6 | var last_name: String? = null 7 | var organization: String? = null 8 | var address_1: String? = null 9 | var address_2: String? = null 10 | var postal_code: String? = null 11 | var city: String? = null 12 | var state: String? = null 13 | var country_code: String? = null 14 | var email: String? = null 15 | var phone: String? = null 16 | var fax: String? = null 17 | } 18 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/model/shippinglabels/WCAddressVerificationResult.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.shippinglabels 2 | 3 | import org.wordpress.android.fluxc.model.shippinglabels.WCShippingLabelModel.ShippingLabelAddress 4 | 5 | sealed class WCAddressVerificationResult { 6 | data class Valid( 7 | val suggestedAddress: ShippingLabelAddress, 8 | val isTrivialNormalization: Boolean 9 | ) : WCAddressVerificationResult() 10 | data class InvalidAddress(val message: String) : WCAddressVerificationResult() 11 | data class InvalidRequest(val message: String) : WCAddressVerificationResult() 12 | } 13 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/product/CoreProductStatus.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.product 2 | 3 | enum class CoreProductStatus(val value: String) { 4 | DRAFT("draft"), 5 | PENDING("pending"), 6 | PRIVATE("private"), 7 | PUBLISH("publish"), 8 | TRASH("trash"); 9 | 10 | companion object { 11 | private val valueMap = values().associateBy(CoreProductStatus::value) 12 | 13 | /** 14 | * Convert the base value into the associated CoreProductStatus object 15 | */ 16 | fun fromValue(value: String) = valueMap[value] 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/product/CoreProductType.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.product 2 | 3 | enum class CoreProductType(val value: String) { 4 | SIMPLE("simple"), 5 | GROUPED("grouped"), 6 | EXTERNAL("external"), 7 | VARIABLE("variable"), 8 | BUNDLE("bundle"); 9 | 10 | companion object { 11 | private val valueMap = values().associateBy(CoreProductType::value) 12 | 13 | /** 14 | * Convert the base value into the associated CoreProductType object 15 | */ 16 | fun fromValue(value: String) = valueMap[value] 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /example/src/main/res/layout/list_item_skeleton.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /example/src/test/java/org/wordpress/android/fluxc/utils/CurrentTimeProviderTest.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.utils 2 | 3 | import kotlinx.coroutines.delay 4 | import org.assertj.core.api.Assertions.assertThat 5 | import org.junit.Test 6 | import org.wordpress.android.fluxc.test 7 | 8 | class CurrentTimeProviderTest { 9 | private val currentTimeProvider = CurrentTimeProvider() 10 | 11 | @Test 12 | fun `always returns current date`() = test { 13 | val firstDate = currentTimeProvider.currentDate() 14 | delay(1) 15 | val secondDate = currentTimeProvider.currentDate() 16 | 17 | assertThat(firstDate).isNotEqualTo(secondDate) 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /example/src/test/resources/activitylog/body-response.json: -------------------------------------------------------------------------------- 1 | { 2 | "text": "Comment text", 3 | "ranges": [ 4 | { 5 | "url": "https://www.wordpress.com", 6 | "indices": [ 7 | 27, 8 | 39 9 | ], 10 | "site_id": 123, 11 | "section": "post", 12 | "intent": "edit", 13 | "context": "single", 14 | "id": 111 15 | }, 16 | { 17 | "url": "https://www.wordpress.com", 18 | "indices": [ 19 | 0, 20 | 7 21 | ], 22 | "site_id": 123, 23 | "section": "comment", 24 | "intent": "edit", 25 | "context": "single", 26 | "id": 17, 27 | "root_id": 68 28 | } 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/action/JetpackAction.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.action; 2 | 3 | import org.wordpress.android.fluxc.annotations.Action; 4 | import org.wordpress.android.fluxc.annotations.ActionEnum; 5 | import org.wordpress.android.fluxc.annotations.action.IAction; 6 | import org.wordpress.android.fluxc.model.SiteModel; 7 | import org.wordpress.android.fluxc.store.JetpackStore.ActivateStatsModulePayload; 8 | 9 | @ActionEnum 10 | public enum JetpackAction implements IAction { 11 | @Action(payloadType = SiteModel.class) 12 | INSTALL_JETPACK, 13 | @Action(payloadType = ActivateStatsModulePayload.class) 14 | ACTIVATE_STATS_MODULE 15 | } 16 | -------------------------------------------------------------------------------- /example/src/main/java/org/wordpress/android/fluxc/example/utils/ViewGroupExt.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.example.utils 2 | 3 | import android.view.View 4 | import android.view.ViewGroup 5 | import android.widget.Button 6 | 7 | fun ViewGroup.toggleSiteDependentButtons(enabled: Boolean = true) = 8 | childViewsAsSequence() 9 | .filter { it is Button } 10 | .forEach { it.isEnabled = enabled } 11 | 12 | fun ViewGroup.childViewsAsSequence(): Sequence = 13 | mutableListOf().apply { 14 | for (it in 0 until childCount) { 15 | add(getChildAt(it)) 16 | } 17 | }.asSequence() 18 | -------------------------------------------------------------------------------- /example/src/test/java/org/wordpress/android/fluxc/converters/StringListConverterTest.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.converters 2 | 3 | import org.junit.Assert 4 | import org.junit.Test 5 | import org.wordpress.android.fluxc.persistence.coverters.StringListConverter 6 | 7 | class StringListConverterTest { 8 | @Test 9 | fun testStringToListToStringConversion() { 10 | val converter = StringListConverter() 11 | 12 | val string = "apple,banana,1" 13 | 14 | // A string converted to list and back should be unaltered 15 | val result = converter.stringToList(string) 16 | Assert.assertEquals(string, converter.listToString(result)) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /example/src/test/resources/wc/site-setting-option-response.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "woocommerce_enable_coupons", 3 | "label": "Enable coupons", 4 | "description": "Enable the use of coupon codes", 5 | "type": "checkbox", 6 | "default": "yes", 7 | "tip": "Coupons can be applied from the cart and checkout pages.", 8 | "value": "yes", 9 | "_links": { 10 | "self": [ 11 | { 12 | "href": "https://awootestshop.mystagingwebsite.com/wp-json/wc/v3/settings/general/woocommerce_enable_coupons" 13 | } 14 | ], 15 | "collection": [ 16 | { 17 | "href": "https://awootestshop.mystagingwebsite.com/wp-json/wc/v3/settings/general" 18 | } 19 | ] 20 | } 21 | } -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/persistence/coverters/BloggingPromptDateConverter.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.persistence.coverters 2 | 3 | import androidx.room.TypeConverter 4 | import org.wordpress.android.fluxc.network.rest.wpcom.bloggingprompts.BloggingPromptsUtils 5 | import java.util.Date 6 | 7 | /** 8 | * A Room type converter for Blogging Prompt dates in YYYY-MM-DD format 9 | */ 10 | class BloggingPromptDateConverter { 11 | @TypeConverter 12 | fun stringToDate(value: String?) = value?.let { BloggingPromptsUtils.stringToDate(it) } 13 | 14 | @TypeConverter 15 | fun dateToString(date: Date?) = date?.let { BloggingPromptsUtils.dateToString(it) } 16 | } 17 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/product/CoreProductBackOrders.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.product 2 | 3 | /** 4 | * Standard Core WooCommerce product back order options 5 | */ 6 | enum class CoreProductBackOrders(val value: String) { 7 | NO("no"), 8 | NOTIFY("notify"), 9 | YES("yes"); 10 | 11 | companion object { 12 | private val valueMap = values().associateBy(CoreProductBackOrders::value) 13 | 14 | /** 15 | * Convert the base value into the associated CoreProductBackOrders object 16 | */ 17 | fun fromValue(value: String) = valueMap[value] 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /example/src/test/java/org/wordpress/android/fluxc/notifications/NotificationTestUtils.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.notifications 2 | 3 | import com.google.gson.Gson 4 | import org.wordpress.android.fluxc.network.rest.wpcom.notifications.NotificationApiResponse 5 | import org.wordpress.android.fluxc.network.rest.wpcom.notifications.NotificationsApiResponse 6 | 7 | object NotificationTestUtils { 8 | fun parseNotificationsApiResponseFromJsonString(json: String) = 9 | Gson().fromJson(json, NotificationsApiResponse::class.java) 10 | 11 | fun parseNotificationApiResponseFromJsonString(json: String) = 12 | Gson().fromJson(json, NotificationApiResponse::class.java) 13 | } 14 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/xmlrpc/XMLRPCFault.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.xmlrpc; 2 | 3 | public class XMLRPCFault extends XMLRPCException { 4 | private static final long serialVersionUID = 5676562456612956519L; 5 | private String mFaultString; 6 | private int mFaultCode; 7 | 8 | public XMLRPCFault(String faultString, int faultCode) { 9 | super(faultString); 10 | this.mFaultString = faultString; 11 | this.mFaultCode = faultCode; 12 | } 13 | 14 | public String getFaultString() { 15 | return mFaultString; 16 | } 17 | 18 | public int getFaultCode() { 19 | return mFaultCode; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/product/CoreProductTaxStatus.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.product 2 | 3 | /** 4 | * Standard Core WooCommerce product tax statuses 5 | */ 6 | enum class CoreProductTaxStatus(val value: String) { 7 | TAXABLE("taxable"), 8 | SHIPPING("shipping"), 9 | NONE("none"); 10 | 11 | companion object { 12 | private val valueMap = values().associateBy(CoreProductTaxStatus::value) 13 | 14 | /** 15 | * Convert the base value into the associated CoreProductTaxStatus object 16 | */ 17 | fun fromValue(value: String) = valueMap[value] 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /fluxc-annotations/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id "java" 3 | alias(sharedLibs.plugins.automattic.publishToS3) 4 | } 5 | 6 | java { 7 | sourceCompatibility = JavaVersion.VERSION_1_8 8 | targetCompatibility = JavaVersion.VERSION_1_8 9 | 10 | withSourcesJar() 11 | withJavadocJar() 12 | } 13 | 14 | project.afterEvaluate { 15 | publishing { 16 | publications { 17 | FluxCAnnotationsPublication(MavenPublication) { 18 | from components.java 19 | 20 | groupId "org.wordpress.fluxc" 21 | artifactId "fluxc-annotations" 22 | // version is set by 'publish-to-s3' plugin 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/HttpMethod.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network 2 | 3 | import com.android.volley.Request.Method as VolleyMethod 4 | 5 | enum class HttpMethod { 6 | GET, POST, DELETE, PUT, HEAD, OPTIONS, TRACE, PATCH 7 | } 8 | 9 | fun HttpMethod.toVolleyMethod(): Int = when (this) { 10 | HttpMethod.GET -> VolleyMethod.GET 11 | HttpMethod.POST -> VolleyMethod.POST 12 | HttpMethod.DELETE -> VolleyMethod.DELETE 13 | HttpMethod.PUT -> VolleyMethod.PUT 14 | HttpMethod.HEAD -> VolleyMethod.HEAD 15 | HttpMethod.OPTIONS -> VolleyMethod.OPTIONS 16 | HttpMethod.TRACE -> VolleyMethod.TRACE 17 | HttpMethod.PATCH -> VolleyMethod.PATCH 18 | } 19 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/model/order/ShippingLine.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.order 2 | 3 | import com.google.gson.annotations.JsonAdapter 4 | import com.google.gson.annotations.SerializedName 5 | import org.wordpress.android.fluxc.utils.NullStringJsonAdapter 6 | 7 | data class ShippingLine( 8 | val id: Long? = null, 9 | val total: String? = null, 10 | @SerializedName("total_tax") 11 | val totalTax: String? = null, 12 | @SerializedName("method_id") 13 | @JsonAdapter(NullStringJsonAdapter::class, nullSafe = false) 14 | val methodId: String? = null, 15 | @SerializedName("method_title") 16 | val methodTitle: String? = null 17 | ) 18 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/persistence/entity/ShippingMethodEntity.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.persistence.entity 2 | 3 | import androidx.room.Entity 4 | import org.wordpress.android.fluxc.model.LocalOrRemoteId.LocalId 5 | import org.wordpress.android.fluxc.model.WCShippingMethod 6 | 7 | @Entity(tableName = "ShippingMethod", primaryKeys = ["localSiteId", "id"]) 8 | data class ShippingMethodEntity ( 9 | val id: String, 10 | val localSiteId: LocalId, 11 | val title: String 12 | ) 13 | 14 | fun WCShippingMethod.toEntity(localSiteId: LocalId) = ShippingMethodEntity( 15 | id = this.id, 16 | localSiteId = localSiteId, 17 | title = this.title 18 | ) 19 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/persistence/converters/StringListConverter.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.persistence.converters 2 | 3 | import androidx.room.TypeConverter 4 | 5 | class StringListConverter { 6 | companion object { 7 | private const val SEPARATOR = "," 8 | } 9 | 10 | @TypeConverter 11 | fun listToString(value: List?): String? = 12 | value?.joinToString(separator = SEPARATOR) 13 | 14 | @TypeConverter 15 | fun stringToList(value: String?): List? = value?.let { 16 | if (it.isEmpty()) { 17 | emptyList() 18 | } else { 19 | it.split(SEPARATOR) 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /example/src/androidTest/java/org/wordpress/android/fluxc/release/ReleaseStack_XMLRPCBase.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.release; 2 | 3 | import org.wordpress.android.fluxc.example.BuildConfig; 4 | import org.wordpress.android.fluxc.model.SiteModel; 5 | 6 | public class ReleaseStack_XMLRPCBase extends ReleaseStack_Base { 7 | static SiteModel sSite; 8 | 9 | { 10 | sSite = new SiteModel(); 11 | sSite.setId(1); 12 | sSite.setSelfHostedSiteId(0); 13 | sSite.setUsername(BuildConfig.TEST_WPORG_USERNAME_SH_SIMPLE); 14 | sSite.setPassword(BuildConfig.TEST_WPORG_PASSWORD_SH_SIMPLE); 15 | sSite.setXmlRpcUrl(BuildConfig.TEST_WPORG_URL_SH_SIMPLE_ENDPOINT); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /example/src/test/java/org/wordpress/android/fluxc/converters/BloggingPromptDateConverterTest.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.converters 2 | 3 | import org.junit.Assert 4 | import org.junit.Test 5 | import org.wordpress.android.fluxc.persistence.coverters.BloggingPromptDateConverter 6 | 7 | class BloggingPromptDateConverterTest { 8 | @Test 9 | fun testBloggingPromptDateStringToDateObject() { 10 | val converter = BloggingPromptDateConverter() 11 | 12 | val date = "2022-05-01" 13 | 14 | // A string date converted to Date and back should be unaltered 15 | val result = converter.stringToDate(date) 16 | Assert.assertEquals(date, converter.dateToString(result)) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/scan/ScanStartResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.scan 2 | 3 | import com.google.gson.annotations.SerializedName 4 | import org.wordpress.android.fluxc.network.Response 5 | 6 | data class ScanStartResponse( 7 | @SerializedName("error") val error: Error? = null, 8 | @SerializedName("success") val success: Boolean? 9 | ) : Response { 10 | data class Error( 11 | @SerializedName("error_data") val errorData: List?, 12 | @SerializedName("errors") val errors: Errors? 13 | ) 14 | 15 | data class Errors( 16 | @SerializedName("vp_api_error") val vpApiError: List? 17 | ) 18 | } 19 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/scan/threat/FixThreatStatusModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.scan.threat 2 | 3 | data class FixThreatStatusModel( 4 | val id: Long, 5 | val status: FixStatus, 6 | val error: String? = null 7 | ) { 8 | enum class FixStatus(val value: String) { 9 | NOT_STARTED("not_started"), 10 | IN_PROGRESS("in_progress"), 11 | NOT_FIXED("not_fixed"), 12 | FIXED("fixed"), 13 | UNKNOWN("unknown"); 14 | 15 | companion object { 16 | fun fromValue(value: String?): FixStatus { 17 | return values().firstOrNull { it.value == value } ?: UNKNOWN 18 | } 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/model/customer/WCCustomerFromAnalytics.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.customer 2 | 3 | data class WCCustomerFromAnalytics( 4 | val avgOrderValue: Double, 5 | val city: String, 6 | val country: String, 7 | val dateLastActive: String, 8 | val dateLastActiveGmt: String, 9 | val dateLastOrder: String, 10 | val dateRegistered: String, 11 | val dateRegisteredGmt: String, 12 | val email: String, 13 | val id: Long, 14 | val name: String, 15 | val ordersCount: Int, 16 | val postcode: String, 17 | val state: String, 18 | val totalSpend: Double, 19 | val userId: Long, 20 | val username: String 21 | ) 22 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/persistence/converters/LongListConverter.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.persistence.converters 2 | 3 | import androidx.room.TypeConverter 4 | 5 | class LongListConverter { 6 | companion object { 7 | private const val SEPARATOR = "," 8 | } 9 | 10 | @TypeConverter 11 | fun listToString(value: List?): String? = 12 | value?.joinToString(separator = SEPARATOR) 13 | 14 | @TypeConverter 15 | fun stringToList(value: String?): List? = value?.let { 16 | if (it.isEmpty()) { 17 | emptyList() 18 | } else { 19 | it.split(SEPARATOR).map(String::toLong) 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /.configure: -------------------------------------------------------------------------------- 1 | { 2 | "project_name": "FluxC-Android", 3 | "branch": "trunk", 4 | "pinned_hash": "18dbcdc1545c8211582869d7f375914bf5a19c9b", 5 | "files_to_copy": [ 6 | { 7 | "file": "android/FluxC/tests.properties", 8 | "destination": "example/properties/tests.properties" 9 | }, 10 | { 11 | "file": "android/FluxC/tests.properties-extra", 12 | "destination": "example/properties/tests.properties-extra" 13 | }, 14 | { 15 | "file": "android/FluxC/api.properties", 16 | "destination": "example/properties/api.properties" 17 | }, 18 | { 19 | "file": "android/FluxC/firebase.secrets.json", 20 | "destination": ".configure-files/firebase.secrets.json" 21 | } 22 | ] 23 | } -------------------------------------------------------------------------------- /example/src/test/java/org/wordpress/android/fluxc/endpoints/WPComV3EndpointTest.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.endpoints 2 | 3 | import org.assertj.core.api.Assertions.assertThat 4 | import org.junit.Test 5 | import org.wordpress.android.fluxc.generated.endpoint.WPCOMV3 6 | 7 | class WPComV3EndpointTest { 8 | @Test 9 | fun testAllEndpoints() { 10 | assertThat("/sites/123/blogging-prompts/") 11 | .isEqualTo(WPCOMV3.sites.site(123).blogging_prompts.endpoint) 12 | } 13 | 14 | @Test 15 | fun testUrls() { 16 | assertThat("https://public-api.wordpress.com/wpcom/v3/sites/123/blogging-prompts/") 17 | .isEqualTo(WPCOMV3.sites.site(123).blogging_prompts.url) 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/revisions/LocalDiffType.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.revisions 2 | 3 | enum class LocalDiffType constructor(private val string: String) { 4 | TITLE("title"), 5 | CONTENT("post"), 6 | UNKNOWN("unknown"); 7 | 8 | override fun toString(): String { 9 | return string 10 | } 11 | 12 | companion object { 13 | @JvmStatic 14 | fun fromString(string: String?): LocalDiffType { 15 | return when (string) { 16 | "title" -> TITLE 17 | "post" -> CONTENT 18 | else -> { 19 | UNKNOWN 20 | } 21 | } 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/utils/PreferenceUtils.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.utils 2 | 3 | import android.content.Context 4 | import android.content.SharedPreferences 5 | import javax.inject.Inject 6 | 7 | object PreferenceUtils { 8 | @JvmStatic 9 | fun getFluxCPreferences(context: Context): SharedPreferences { 10 | return context.getSharedPreferences("${context.packageName}_fluxc-preferences", Context.MODE_PRIVATE) 11 | } 12 | 13 | class PreferenceUtilsWrapper 14 | @Inject constructor(private val context: Context) { 15 | fun getFluxCPreferences(): SharedPreferences { 16 | return PreferenceUtils.getFluxCPreferences(context) 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/product/BatchProductVariationsApiResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.product 2 | 3 | import com.google.gson.annotations.SerializedName 4 | import org.wordpress.android.fluxc.network.Response 5 | 6 | /** 7 | * Representation of Batch Update Product Variations API response. 8 | */ 9 | data class BatchProductVariationsApiResponse( 10 | @SerializedName("create") val createdVariations: List? = null, 11 | @SerializedName("update") val updatedVariations: List? = null, 12 | @SerializedName("delete") val deletedVariations: List? = null 13 | ) : Response 14 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/model/order/UpdateOrderRequest.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.order 2 | 3 | import org.wordpress.android.fluxc.model.WCOrderStatusModel 4 | 5 | data class UpdateOrderRequest( 6 | val customerId: Long? = null, 7 | val status: WCOrderStatusModel? = null, 8 | val lineItems: List>? = null, 9 | val shippingAddress: OrderAddress.Shipping? = null, 10 | val billingAddress: OrderAddress.Billing? = null, 11 | val feeLines: List? = null, 12 | val couponLines: List? = null, 13 | val shippingLines: List? = null, 14 | val customerNote: String? = null, 15 | val giftCard: String? = null 16 | ) 17 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/coupons/CouponReportDto.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.coupons 2 | 3 | import com.google.gson.annotations.SerializedName 4 | import org.wordpress.android.fluxc.model.coupons.CouponReport 5 | import java.math.BigDecimal 6 | 7 | data class CouponReportDto( 8 | @SerializedName("coupon_id") val couponId: Long, 9 | @SerializedName("amount") val amount: String?, 10 | @SerializedName("orders_count") val ordersCount: Int? 11 | ) 12 | 13 | fun CouponReportDto.toDataModel() = CouponReport( 14 | couponId = couponId, 15 | amount = amount?.toBigDecimalOrNull() ?: BigDecimal.ZERO, 16 | ordersCount = ordersCount ?: 0 17 | ) 18 | -------------------------------------------------------------------------------- /example/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /Users/max/work/android-sdk-mac/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class mName to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /example/src/test/resources/wp/blaze/blaze-campaigns.json: -------------------------------------------------------------------------------- 1 | { 2 | "campaigns": [ 3 | { 4 | "id": "1234", 5 | "status": "rejected", 6 | "start_time": "2023-06-02T00:00:00.000Z", 7 | "duration_days": 10, 8 | "total_budget": 100.0, 9 | "spent_budget": 0.0, 10 | "impressions": 0, 11 | "clicks": 0, 12 | "site_name": "siteName", 13 | "text_snippet": "title", 14 | "target_url": "https://example.com", 15 | "target_urn": "urn:wpcom:post:199247490:9", 16 | "main_image": { 17 | "url": "imageUrl", 18 | "mime_type": "image/jpeg", 19 | "width": 100.0, 20 | "height": 100.0 21 | } 22 | } 23 | ], 24 | "total_count": 1, 25 | "skipped": 0 26 | } 27 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/blaze/BlazeCampaignsModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.blaze 2 | 3 | import java.util.Date 4 | 5 | data class BlazeCampaignsModel( 6 | val campaigns: List = emptyList(), 7 | val skipped: Int, 8 | val totalItems: Int, 9 | ) 10 | 11 | data class BlazeCampaignModel( 12 | val campaignId: String, 13 | val title: String, 14 | val imageUrl: String?, 15 | val startTime: Date, 16 | val durationInDays: Int, 17 | val uiStatus: String, 18 | val impressions: Long, 19 | val clicks: Long, 20 | val targetUrn: String?, 21 | val totalBudget: Double, 22 | val spentBudget: Double, 23 | val isEndlessCampaign: Boolean 24 | ) 25 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/stats/time/ReferrersModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.stats.time 2 | 3 | data class ReferrersModel(val otherViews: Int, val totalViews: Int, val groups: List, val hasMore: Boolean) { 4 | data class Group( 5 | val groupId: String?, 6 | val name: String?, 7 | val icon: String?, 8 | val url: String?, 9 | val total: Int?, 10 | val referrers: List, 11 | val markedAsSpam: Boolean = false 12 | ) 13 | data class Referrer( 14 | val name: String, 15 | val views: Int, 16 | val icon: String?, 17 | val url: String?, 18 | val markedAsSpam: Boolean = false 19 | ) 20 | } 21 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/persistence/UpdateAllExceptId.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.persistence; 2 | 3 | import android.content.ContentValues; 4 | 5 | import com.yarolegovich.wellsql.WellSql; 6 | import com.yarolegovich.wellsql.mapper.InsertMapper; 7 | import com.yarolegovich.wellsql.mapper.SQLiteMapper; 8 | 9 | class UpdateAllExceptId implements InsertMapper { 10 | private final SQLiteMapper mMapper; 11 | 12 | UpdateAllExceptId(Class clazz) { 13 | mMapper = WellSql.mapperFor(clazz); 14 | } 15 | 16 | @Override 17 | public ContentValues toCv(T item) { 18 | ContentValues cv = mMapper.toCv(item); 19 | cv.remove("_id"); 20 | return cv; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /example/src/test/java/org/wordpress/android/fluxc/wc/utils/SiteTestUtils.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.wc.utils 2 | 3 | import org.wordpress.android.fluxc.model.AccountModel 4 | import org.wordpress.android.fluxc.model.SiteModel 5 | import org.wordpress.android.fluxc.persistence.AccountSqlUtils 6 | import org.wordpress.android.fluxc.persistence.SiteSqlUtils 7 | 8 | object SiteTestUtils { 9 | fun insertTestAccountAndSiteIntoDb(): SiteModel { 10 | val account = AccountModel().apply { userId = 412 } 11 | AccountSqlUtils.insertOrUpdateAccount(account, 5124) 12 | 13 | val site = SiteModel() 14 | site.siteId = 6347 15 | 16 | SiteSqlUtils().insertOrUpdateSite(site) 17 | return site 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/taxonomy/TermWPComRestResponse.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.taxonomy; 2 | 3 | import androidx.annotation.NonNull; 4 | 5 | import org.wordpress.android.fluxc.network.Response; 6 | 7 | import java.util.List; 8 | 9 | @SuppressWarnings("NotNullFieldNotInitialized") 10 | public class TermWPComRestResponse implements Response { 11 | public static class TermsResponse { 12 | @NonNull public List terms; 13 | } 14 | 15 | public long ID; 16 | @NonNull public String name; 17 | @NonNull public String slug; 18 | @NonNull public String description; 19 | public int post_count; 20 | public long parent; 21 | } 22 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/utils/JetpackAITranscriptionUtils.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.utils 2 | 3 | import java.io.File 4 | import javax.inject.Inject 5 | 6 | class JetpackAITranscriptionUtils @Inject constructor() { 7 | fun isFileEligibleForTranscription(file: File, sizeLimit: Long): Boolean { 8 | if (!fileExistsAndIsReadable(file)) { 9 | return false 10 | } 11 | return fileMeetsSizeLimit(file.length(), sizeLimit) 12 | } 13 | 14 | private fun fileExistsAndIsReadable(file: File) = file.exists() && file.canRead() 15 | 16 | private fun fileMeetsSizeLimit(fileSizeInBytes: Long, sizeLimit: Long): Boolean { 17 | return fileSizeInBytes <= sizeLimit 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/stats/insights/PostingActivityModel.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.stats.insights 2 | 3 | import java.util.Date 4 | 5 | data class PostingActivityModel(val streak: StreakModel, val months: List, val max: Int, val hasMore: Boolean) { 6 | data class StreakModel( 7 | val currentStreakStart: Date?, 8 | val currentStreakEnd: Date?, 9 | val currentStreakLength: Int?, 10 | val longestStreakStart: Date?, 11 | val longestStreakEnd: Date?, 12 | val longestStreakLength: Int? 13 | ) 14 | 15 | data class Month(val year: Int, val month: Int, val days: Map) 16 | data class Day(val year: Int, val month: Int, val day: Int) 17 | } 18 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/tracker/TrackerStore.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.tracker 2 | 3 | import org.wordpress.android.fluxc.model.SiteModel 4 | import org.wordpress.android.fluxc.network.rest.wpcom.wc.WooPayload 5 | import javax.inject.Inject 6 | import javax.inject.Singleton 7 | 8 | @Singleton 9 | class TrackerStore @Inject internal constructor(private val restClient: TrackerRestClient) { 10 | suspend fun sendTelemetry( 11 | appVersion: String, 12 | site: SiteModel, 13 | installationDateIso8601: String? 14 | ): WooPayload { 15 | return restClient.sendTelemetry(appVersion, site, installationDateIso8601) 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /example/src/main/res/layout/list_item_section_header.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/model/taxes/TaxRateEntity.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.taxes 2 | 3 | import androidx.room.Entity 4 | import org.wordpress.android.fluxc.model.LocalOrRemoteId.LocalId 5 | import org.wordpress.android.fluxc.model.LocalOrRemoteId.RemoteId 6 | 7 | @Entity( 8 | tableName = "TaxRate", 9 | primaryKeys = ["id", "localSiteId"], 10 | ) 11 | data class TaxRateEntity ( 12 | val id: RemoteId, 13 | val localSiteId: LocalId, 14 | val country: String? = null, 15 | val state: String? = null, 16 | val postcode: String? = null, 17 | val city: String? = null, 18 | val rate: String? = null, 19 | val name: String? = null, 20 | val taxClass: String? = null, 21 | ) 22 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/product/ProductReviewApiResponse.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.network.rest.wpcom.wc.product 2 | 3 | import com.google.gson.JsonElement 4 | import org.wordpress.android.fluxc.network.Response 5 | 6 | @Suppress("PropertyName", "VariableNaming") 7 | class ProductReviewApiResponse : Response { 8 | val id: Long = 0L 9 | val date_created_gmt: String? = null 10 | val product_id: Long = 0L 11 | val status: String? = null 12 | val reviewer: String? = null 13 | val reviewer_email: String? = null 14 | val review: String? = null 15 | val rating: Int = 0 16 | val verified: Boolean = false 17 | val reviewer_avatar_urls: JsonElement? = null 18 | } 19 | -------------------------------------------------------------------------------- /plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/utils/NonNegativeIntJsonDeserializer.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.utils 2 | 3 | import com.google.gson.JsonDeserializationContext 4 | import com.google.gson.JsonDeserializer 5 | import com.google.gson.JsonElement 6 | import java.lang.reflect.Type 7 | 8 | class NonNegativeIntJsonDeserializer : JsonDeserializer { 9 | override fun deserialize( 10 | json: JsonElement?, 11 | typeOfT: Type?, 12 | context: JsonDeserializationContext? 13 | ): Int? { 14 | return try { 15 | json?.asInt?.let { 16 | if (it >= 0) it else null 17 | } 18 | } catch (e: NumberFormatException) { 19 | null 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /.buildkite/woocommerce-tests.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euo pipefail 4 | 5 | echo "--- :closed_lock_with_key: Installing Secrets" 6 | cp gradle.properties-example gradle.properties && cp -a example/properties-example/ example/properties/ 7 | 8 | # Submitting an HTTP request to the site runs any wp_cron tasks that are scheduled, which helps ensure the test passes 9 | wget $API_TEST_SITE_URL 10 | 11 | echo -e "\n--- :gradle: Run Tests" 12 | ./gradlew :tests:api:test || EXIT_CODE=$? 13 | 14 | echo -e "\n--- :buildkite: Upload Test Results to Test Analytics" 15 | find tests/api/build/test-results/test -name "TEST-*.xml" -exec upload_buildkite_test_analytics_junit {} $BUILDKITE_ANALYTICS_TOKEN_WOO_TESTS \; 16 | 17 | echo -e "\n--- Emitting original exit code" 18 | exit ${EXIT_CODE:-0} 19 | -------------------------------------------------------------------------------- /example/src/test/resources/wp/jetpack/scan/threat/threat-database.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": 9155430, 3 | "signature": "Suspicious.Links", 4 | "first_detected": "2019-09-06T14:56:58.000Z", 5 | "description": "Jetpack has detected a link to a possible dangerous site. These sites are often related to dangerous or malicious code.", 6 | "status": "current", 7 | "fixable": false, 8 | "table": "wp_posts", 9 | "rows": { 10 | "949": { 11 | "id": 1849, 12 | "description": "KiethAbare - 2019-01-20 18:41:40", 13 | "url": "http://to.ht/bestforex48357\\n" 14 | }, 15 | "950": { 16 | "id": 1850, 17 | "description": "KiethAbare - 2019-01-20 18:41:45", 18 | "url": "http://to.ht/bestforex48357\\n" 19 | } 20 | }, 21 | "objectType": "post" 22 | } 23 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/plugin/PluginDirectoryType.java: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.plugin; 2 | 3 | import java.util.Locale; 4 | 5 | public enum PluginDirectoryType { 6 | FEATURED, 7 | NEW, 8 | POPULAR, 9 | SITE; 10 | 11 | @Override 12 | public String toString() { 13 | return this.name().toLowerCase(Locale.US); 14 | } 15 | 16 | public static PluginDirectoryType fromString(String string) { 17 | if (string != null) { 18 | for (PluginDirectoryType type : PluginDirectoryType.values()) { 19 | if (string.equalsIgnoreCase(type.name())) { 20 | return type; 21 | } 22 | } 23 | } 24 | return NEW; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/model/revisions/DiffOperations.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.model.revisions 2 | 3 | enum class DiffOperations constructor(private val string: String) { 4 | COPY("copy"), 5 | ADD("add"), 6 | DELETE("del"), 7 | UNKNOWN("unknown"); 8 | 9 | override fun toString(): String { 10 | return string 11 | } 12 | 13 | companion object { 14 | @JvmStatic 15 | fun fromString(string: String?): DiffOperations { 16 | return when (string) { 17 | "copy" -> COPY 18 | "add" -> ADD 19 | "del" -> DELETE 20 | else -> { 21 | UNKNOWN 22 | } 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /fluxc/src/main/java/org/wordpress/android/fluxc/store/GetDeviceRegistrationStatus.kt: -------------------------------------------------------------------------------- 1 | package org.wordpress.android.fluxc.store 2 | 3 | import javax.inject.Inject 4 | import org.wordpress.android.fluxc.utils.PreferenceUtils 5 | 6 | class GetDeviceRegistrationStatus @Inject constructor( 7 | private val prefsWrapper: PreferenceUtils.PreferenceUtilsWrapper 8 | ) { 9 | operator fun invoke(): Status { 10 | val deviceId = prefsWrapper.getFluxCPreferences().getString(NotificationStore.WPCOM_PUSH_DEVICE_SERVER_ID, null) 11 | return if (deviceId.isNullOrEmpty()) { 12 | Status.UNREGISTERED 13 | } else { 14 | Status.REGISTERED 15 | } 16 | } 17 | 18 | enum class Status { 19 | REGISTERED, UNREGISTERED 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /example/src/androidTest/resources/wc-order-note-post-response-success.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "id": 86, 4 | "date_created": "2018-05-04T02:07:50", 5 | "date_created_gmt": "2018-05-04T02:07:50", 6 | "note": "Test rest note", 7 | "customer_note": true, 8 | "_links": { 9 | "self": [ 10 | { 11 | "href": "https:\/\/amandatestsatomic1.blog\/wp-json\/wc\/v2\/orders\/104\/notes\/86" 12 | } 13 | ], 14 | "collection": [ 15 | { 16 | "href": "https:\/\/amandatestsatomic1.blog\/wp-json\/wc\/v2\/orders\/104\/notes" 17 | } 18 | ], 19 | "up": [ 20 | { 21 | "href": "https:\/\/amandatestsatomic1.blog\/wp-json\/wc\/v2\/orders\/104" 22 | } 23 | ] 24 | } 25 | } 26 | } 27 | --------------------------------------------------------------------------------