import type { ActivityStore } from "./activity-log.js"; import type { ApplicationEntitlementInspectionRecord, ApplicationMonetizationAuditService } from "./application-monetization-audit-service.js"; import type { ApplicationSkuAuditResult, ApplicationSkuRecord } from "./application-sku-audit-service.js"; import type { ApplicationEntitlementBeneficiary, DiscordClient } from "./discord-client.js"; import { type OperationStore } from "./operation-store.js"; import type { ScopePolicy } from "./policy.js"; import type { DiscordApplication, RequestOptions } from "./types.js"; export type ApplicationEntitlementChangeAction = "consume" | "create-test" | "delete-test"; export interface CreateApplicationTestEntitlementRequest { action: "create"; auditReason: string; beneficiary: ApplicationEntitlementBeneficiary; operationKey: string; skuId: string; } export interface DeleteApplicationTestEntitlementRequest { acknowledgeIrreversibleDeletion: true; action: "delete"; auditReason: string; beneficiary: ApplicationEntitlementBeneficiary; creationOperationKey: string; entitlementId: string; operationKey: string; skuId: string; } export type ApplicationTestEntitlementChangeRequest = CreateApplicationTestEntitlementRequest | DeleteApplicationTestEntitlementRequest; export interface ApplicationEntitlementConsumptionRequest { acknowledgeExternalFulfillment: true; auditReason: string; entitlementId: string; fulfillmentReference: string; operationKey: string; skuId: string; userId: string; } interface NormalizedApplicationEntitlementRequestBase { auditReason: string; beneficiary: ApplicationEntitlementBeneficiary; operationKeyHash: string; skuId: string; } export type NormalizedApplicationTestEntitlementChangeRequest = (Omit & NormalizedApplicationEntitlementRequestBase & { action: "create-test"; }) | (Omit & NormalizedApplicationEntitlementRequestBase & { action: "delete-test"; creationOperationKeyHash: string; }); export interface NormalizedApplicationEntitlementConsumptionRequest extends NormalizedApplicationEntitlementRequestBase { acknowledgeExternalFulfillment: true; action: "consume"; entitlementId: string; fulfillmentReferenceHash: string; userId: string; } export interface ApplicationEntitlementPrivacyProjection { auditReason: "digest-bound-not-persisted"; fulfillmentReference: "hash-only"; persistence: "content-free-records-only"; productText: "omitted"; rawPayloads: "omitted"; rawOperationKeys: "hash-only"; } export interface ApplicationEntitlementSkuEvidence { available: boolean; catalogDigest: string; catalogRecords: number; id: string; purchaseScope: ApplicationSkuRecord["flags"]["purchaseScope"]; type: ApplicationSkuRecord["type"]["name"]; } export interface ApplicationTestEntitlementPlan { acknowledgeIrreversibleDeletion: boolean; action: "create-test" | "delete-test"; applicationId: string; auditReason: string; beneficiary: { id: string; type: "guild" | "user"; }; botId: string; createdAt: string; creationReceipt: { activityId: string; creationOperationKeyHash: string; entitlementId: string; verified: true; } | null; current: ApplicationEntitlementInspectionRecord[]; digest: string; effect: "change" | "none"; entitlementId: string | null; inventory: { complete: true; digest: string; returned: number; safetyLimit: number; }; operationKeyHash: string; privacy: ApplicationEntitlementPrivacyProjection; risks: string[]; schemaVersion: number; sku: ApplicationEntitlementSkuEvidence; status: "already-absent" | "already-entitled" | "planned"; verification: { automaticRetry: false; exactReadback: true; rollback: "none"; }; warnings: string[]; writeRequired: boolean; } export interface ApplicationEntitlementConsumptionPlan { acknowledgeExternalFulfillment: true; action: "consume"; applicationId: string; auditReason: string; beneficiary: { id: string; type: "user"; }; botId: string; createdAt: string; current: ApplicationEntitlementInspectionRecord; digest: string; effect: "change" | "none"; entitlementId: string; fulfillmentReferenceHash: string; operationKeyHash: string; privacy: ApplicationEntitlementPrivacyProjection; risks: string[]; schemaVersion: number; sku: ApplicationEntitlementSkuEvidence; status: "already-consumed" | "planned"; verification: { automaticRetry: false; exactReadback: true; externalFulfillmentVerifiedByConnector: false; rollback: "none"; }; warnings: string[]; writeRequired: boolean; } export interface ApplicationEntitlementChangeResult { action: ApplicationEntitlementChangeAction; activityId: string | null; applicationId: string; beneficiary: { id: string; type: "guild" | "user"; }; entitlementId: string; operationKeyHash: string; planDigest: string; schemaVersion: number; skuId: string; status: "already-absent" | "already-consumed" | "already-entitled" | "completed"; verification: "match" | "not-required"; } export interface ApplicationEntitlementServiceClient extends Pick { } export interface ApplicationEntitlementServiceOptions { activityStore: ActivityStore; client: ApplicationEntitlementServiceClient; clock?: () => Date; monetizationAuditService: Pick; operationStore: OperationStore; planKey?: Uint8Array; policy: Pick; randomId?: () => string; } export declare function fulfillmentReferenceHash(value: string): string; export declare function normalizeApplicationTestEntitlementChangeRequest(value: ApplicationTestEntitlementChangeRequest): NormalizedApplicationTestEntitlementChangeRequest; export declare function normalizeApplicationEntitlementConsumptionRequest(value: ApplicationEntitlementConsumptionRequest): NormalizedApplicationEntitlementConsumptionRequest; export declare class ApplicationEntitlementService { #private; constructor(options: ApplicationEntitlementServiceOptions); planTestEntitlementChange(application: DiscordApplication, botId: string, skuAudit: ApplicationSkuAuditResult, request: ApplicationTestEntitlementChangeRequest, options?: RequestOptions): Promise; planEntitlementConsumption(application: DiscordApplication, botId: string, skuAudit: ApplicationSkuAuditResult, request: ApplicationEntitlementConsumptionRequest, options?: RequestOptions): Promise; executeTestEntitlementChange(application: DiscordApplication, botId: string, skuAudit: ApplicationSkuAuditResult, request: ApplicationTestEntitlementChangeRequest, expectedDigest: string, options?: RequestOptions): Promise; executeEntitlementConsumption(application: DiscordApplication, botId: string, skuAudit: ApplicationSkuAuditResult, request: ApplicationEntitlementConsumptionRequest, expectedDigest: string, options?: RequestOptions): Promise; } export {}; //# sourceMappingURL=application-entitlement-service.d.ts.map