Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: pydantic models #35

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions appstoreserverlibrary/models/v2/AccountTenure.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Copyright (c) 2023 Apple Inc. Licensed under MIT License.

from enum import Enum

class AccountTenure(Enum):
"""
The age of the customer's account.

https://developer.apple.com/documentation/appstoreserverapi/accounttenure
"""
UNDECLARED = 0
ZERO_TO_THREE_DAYS = 1
THREE_DAYS_TO_TEN_DAYS = 2
TEN_DAYS_TO_THIRTY_DAYS = 3
THIRTY_DAYS_TO_NINETY_DAYS = 4
NINETY_DAYS_TO_ONE_HUNDRED_EIGHTY_DAYS = 5
ONE_HUNDRED_EIGHTY_DAYS_TO_THREE_HUNDRED_SIXTY_FIVE_DAYS = 6
GREATER_THAN_THREE_HUNDRED_SIXTY_FIVE_DAYS = 7
94 changes: 94 additions & 0 deletions appstoreserverlibrary/models/v2/AppTransaction.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
# Copyright (c) 2023 Apple Inc. Licensed under MIT License.
from typing import Optional

from attr import define
import attr
from pydantic import Field

from .Base import Model
from .Environment import Environment


class AppTransaction(Model):
"""
Information that represents the customer’s purchase of the app, cryptographically signed by the App Store.

https://developer.apple.com/documentation/storekit/apptransaction
"""

receiptType: Optional[Environment] = Field(default=None)
"""
The server environment that signs the app transaction.

https://developer.apple.com/documentation/storekit/apptransaction/3963901-environment
"""

appAppleId: Optional[int] = Field(default=None)
"""
The unique identifier the App Store uses to identify the app.

https://developer.apple.com/documentation/storekit/apptransaction/3954436-appid
"""

bundleId: Optional[str] = Field(default=None)
"""
The bundle identifier that the app transaction applies to.

https://developer.apple.com/documentation/storekit/apptransaction/3954439-bundleid
"""

applicationVersion: Optional[str] = Field(default=None)
"""
The app version that the app transaction applies to.

https://developer.apple.com/documentation/storekit/apptransaction/3954437-appversion
"""

versionExternalIdentifier: Optional[int] = Field(default=None)
"""
The version external identifier of the app

https://developer.apple.com/documentation/storekit/apptransaction/3954438-appversionid
"""

receiptCreationDate: Optional[int] = Field(default=None)
"""
The date that the App Store signed the JWS app transaction.

https://developer.apple.com/documentation/storekit/apptransaction/3954449-signeddate
"""

originalPurchaseDate: Optional[int] = Field(default=None)
"""
The date the user originally purchased the app from the App Store.

https://developer.apple.com/documentation/storekit/apptransaction/3954448-originalpurchasedate
"""

originalApplicationVersion: Optional[str] = Field(default=None)
"""
The app version that the user originally purchased from the App Store.

https://developer.apple.com/documentation/storekit/apptransaction/3954447-originalappversion
"""

deviceVerification: Optional[str] = Field(default=None)
"""
The Base64 device verification value to use to verify whether the app transaction belongs to the device.

https://developer.apple.com/documentation/storekit/apptransaction/3954441-deviceverification
"""

deviceVerificationNonce: Optional[str] = Field(default=None)
"""
The UUID used to compute the device verification value.

https://developer.apple.com/documentation/storekit/apptransaction/3954442-deviceverificationnonce
"""

preorderDate: Optional[int] = Field(default=None)
"""
The date the customer placed an order for the app before it's available in the App Store.

https://developer.apple.com/documentation/storekit/apptransaction/4013175-preorderdate
"""
13 changes: 13 additions & 0 deletions appstoreserverlibrary/models/v2/AutoRenewStatus.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Copyright (c) 2023 Apple Inc. Licensed under MIT License.

from enum import Enum


class AutoRenewStatus(Enum):
"""
The renewal status for an auto-renewable subscription.

https://developer.apple.com/documentation/appstoreserverapi/autorenewstatus
"""
OFF = 0
ON = 1
5 changes: 5 additions & 0 deletions appstoreserverlibrary/models/v2/Base.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from pydantic import BaseModel


class Model(BaseModel):
...
26 changes: 26 additions & 0 deletions appstoreserverlibrary/models/v2/CheckTestNotificationResponse.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Copyright (c) 2023 Apple Inc. Licensed under MIT License.
from typing import List, Optional

from pydantic import Field


class CheckTestNotificationResponse:
"""
A response that contains the contents of the test notification sent by the App Store server and the result from your server.

https://developer.apple.com/documentation/appstoreserverapi/checktestnotificationresponse
"""

signedPayload: Optional[str] = Field(default=None)
"""
A cryptographically signed payload, in JSON Web Signature (JWS) format, containing the response body for a version 2 notification.

https://developer.apple.com/documentation/appstoreservernotifications/signedpayload
"""

sendAttempts: Optional[List[SendAttemptItem]] = Field(default=None)
"""
An array of information the App Store server records for its attempts to send the TEST notification to your server. The array may contain a maximum of six sendAttemptItem objects.

https://developer.apple.com/documentation/appstoreserverapi/sendattemptitem
"""
102 changes: 102 additions & 0 deletions appstoreserverlibrary/models/v2/ConsumptionRequest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
# Copyright (c) 2023 Apple Inc. Licensed under MIT License.
from typing import Optional

from attr import define
import attr
from pydantic import Field

from .AccountTenure import AccountTenure
from .Base import Model

from .ConsumptionStatus import ConsumptionStatus
from .DeliveryStatus import DeliveryStatus
from .LifetimeDollarsPurchased import LifetimeDollarsPurchased
from .LifetimeDollarsRefunded import LifetimeDollarsRefunded
from .Platform import Platform
from .PlayTime import PlayTime
from .UserStatus import UserStatus


class ConsumptionRequest(Model):
"""
The request body containing consumption information.

https://developer.apple.com/documentation/appstoreserverapi/consumptionrequest
"""

customerConsented: Optional[bool] = Field(default=None)
"""
A Boolean value that indicates whether the customer consented to provide consumption data to the App Store.

https://developer.apple.com/documentation/appstoreserverapi/customerconsented
"""

consumptionStatus: Optional[ConsumptionStatus] = Field(default=None)
"""
A value that indicates the extent to which the customer consumed the in-app purchase.

https://developer.apple.com/documentation/appstoreserverapi/consumptionstatus
"""

platform: Optional[Platform] = Field(default=None)
"""
A value that indicates the platform on which the customer consumed the in-app purchase.

https://developer.apple.com/documentation/appstoreserverapi/platform
"""

sampleContentProvided: Optional[bool] = Field(default=None)
"""
A Boolean value that indicates whether you provided, prior to its purchase, a free sample or trial of the content, or information about its functionality.

https://developer.apple.com/documentation/appstoreserverapi/samplecontentprovided
"""

deliveryStatus: Optional[DeliveryStatus] = Field(default=None)
"""
A value that indicates whether the app successfully delivered an in-app purchase that works properly.

https://developer.apple.com/documentation/appstoreserverapi/deliverystatus
"""

appAccountToken: Optional[str] = Field(default=None)
"""
The UUID that an app optionally generates to map a customer's in-app purchase with its resulting App Store transaction.

https://developer.apple.com/documentation/appstoreserverapi/appaccounttoken
"""

accountTenure: Optional[AccountTenure] = Field(default=None)
"""
The age of the customer's account.

https://developer.apple.com/documentation/appstoreserverapi/accounttenure
"""

playTime: Optional[PlayTime] = Field(default=None)
"""
A value that indicates the amount of time that the customer used the app.

https://developer.apple.com/documentation/appstoreserverapi/consumptionrequest
"""

lifetimeDollarsRefunded: Optional[LifetimeDollarsRefunded] = Field(default=None)
"""
A value that indicates the total amount, in USD, of refunds the customer has received, in your app, across all platforms.

https://developer.apple.com/documentation/appstoreserverapi/lifetimedollarsrefunded
"""

lifetimeDollarsPurchased: Optional[LifetimeDollarsPurchased] = Field(default=None)
"""
A value that indicates the total amount, in USD, of in-app purchases the customer has made in your app, across all platforms.

https://developer.apple.com/documentation/appstoreserverapi/lifetimedollarspurchased
"""

userStatus: Optional[UserStatus] = Field(default=None)
"""
The status of the customer's account.

https://developer.apple.com/documentation/appstoreserverapi/userstatus
"""
14 changes: 14 additions & 0 deletions appstoreserverlibrary/models/v2/ConsumptionStatus.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Copyright (c) 2023 Apple Inc. Licensed under MIT License.

from enum import Enum

class ConsumptionStatus(Enum):
"""
A value that indicates the extent to which the customer consumed the in-app purchase.

https://developer.apple.com/documentation/appstoreserverapi/consumptionstatus
"""
UNDECLARED = 0
NOT_CONSUMED = 1
PARTIALLY_CONSUMED = 2
FULLY_CONSUMED = 3
67 changes: 67 additions & 0 deletions appstoreserverlibrary/models/v2/Data.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# Copyright (c) 2023 Apple Inc. Licensed under MIT License.
from typing import Optional

from attr import define
import attr
from pydantic import Field

from .Base import Model
from .Environment import Environment
from .Status import Status


class Data(Model):
"""
The app metadata and the signed renewal and transaction information.

https://developer.apple.com/documentation/appstoreservernotifications/data
"""

environment: Optional[Environment] = Field(default=None)
"""
The server environment that the notification applies to, either sandbox or production.

https://developer.apple.com/documentation/appstoreservernotifications/environment
"""

appAppleId: Optional[int] = Field(default=None)
"""
The unique identifier of an app in the App Store.

https://developer.apple.com/documentation/appstoreservernotifications/appappleid
"""

bundleId: Optional[str] = Field(default=None)
"""
The bundle identifier of an app.

https://developer.apple.com/documentation/appstoreserverapi/bundleid
"""

bundleVersion: Optional[str] = Field(default=None)
"""
The version of the build that identifies an iteration of the bundle.

https://developer.apple.com/documentation/appstoreservernotifications/bundleversion
"""

signedTransactionInfo: Optional[str] = Field(default=None)
"""
Transaction information signed by the App Store, in JSON Web Signature (JWS) format.

https://developer.apple.com/documentation/appstoreserverapi/jwstransaction
"""

signedRenewalInfo: Optional[str] = Field(default=None)
"""
Subscription renewal information, signed by the App Store, in JSON Web Signature (JWS) format.

https://developer.apple.com/documentation/appstoreserverapi/jwsrenewalinfo
"""

status: Optional[Status] = Field(default=None)
"""
The status of an auto-renewable subscription as of the signedDate in the responseBodyV2DecodedPayload.

https://developer.apple.com/documentation/appstoreservernotifications/status
"""
17 changes: 17 additions & 0 deletions appstoreserverlibrary/models/v2/DeliveryStatus.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Copyright (c) 2023 Apple Inc. Licensed under MIT License.

from enum import Enum


class DeliveryStatus(Enum):
"""
A value that indicates whether the app successfully delivered an in-app purchase that works properly.

https://developer.apple.com/documentation/appstoreserverapi/deliverystatus
"""
DELIVERED_AND_WORKING_PROPERLY = 0
DID_NOT_DELIVER_DUE_TO_QUALITY_ISSUE = 1
DELIVERED_WRONG_ITEM = 2
DID_NOT_DELIVER_DUE_TO_SERVER_OUTAGE = 3
DID_NOT_DELIVER_DUE_TO_IN_GAME_CURRENCY_CHANGE = 4
DID_NOT_DELIVER_FOR_OTHER_REASON = 5
13 changes: 13 additions & 0 deletions appstoreserverlibrary/models/v2/Environment.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Copyright (c) 2023 Apple Inc. Licensed under MIT License.

from enum import Enum


class Environment(str, Enum):
"""
The server environment, either sandbox or production.

https://developer.apple.com/documentation/appstoreserverapi/environment
"""
SANDBOX = "Sandbox"
PRODUCTION = "Production"
15 changes: 15 additions & 0 deletions appstoreserverlibrary/models/v2/ExpirationIntent.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Copyright (c) 2023 Apple Inc. Licensed under MIT License.

from enum import Enum

class ExpirationIntent(Enum):
"""
The reason an auto-renewable subscription expired.

https://developer.apple.com/documentation/appstoreserverapi/expirationintent
"""
CUSTOMER_CANCELLED = 1
BILLING_ERROR = 2
CUSTOMER_DID_NOT_CONSENT_TO_PRICE_INCREASE = 3
PRODUCT_NOT_AVAILABLE = 4
OTHER = 5
Loading