@talosjs/payment 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,17 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["src/PaymentException.ts", "src/PolarAnalytics.ts", "src/PolarCheckout.ts", "src/PolarCustomer.ts", "src/PolarCustomerPortal.ts", "src/PolarDiscount.ts", "src/PolarProduct.ts", "src/types.ts"],
4
+ "sourcesContent": [
5
+ "import { Exception } from \"@talosjs/exception\";\nimport { HttpStatus } from \"@talosjs/http-status\";\n\nexport class PaymentException extends Exception {\n constructor(message: string, key: string, data: Record<string, unknown> = {}) {\n super(message, {\n key,\n status: HttpStatus.Code.InternalServerError,\n data,\n });\n\n this.name = \"PaymentException\";\n }\n}\n",
6
+ "import { AppEnv } from \"@talosjs/app-env\";\nimport { inject, injectable } from \"@talosjs/container\";\nimport { Polar } from \"@polar-sh/sdk\";\nimport type { RFCDate } from \"@polar-sh/sdk/types/rfcdate.js\";\nimport { PaymentException } from \"./PaymentException\";\nimport type {\n AnalyticsIntervalsLimitsType,\n AnalyticsLimitsType,\n AnalyticsMetricInfoType,\n AnalyticsMetricsType,\n AnalyticsOptionsType,\n AnalyticsPeriodType,\n AnalyticsResponseType,\n BillingTypeType,\n} from \"./types\";\n\n@injectable()\nexport class PolarAnalytics {\n private client: Polar;\n\n constructor(@inject(AppEnv) private readonly env: AppEnv) {\n const accessToken = this.env.POLAR_ACCESS_TOKEN;\n\n if (!accessToken) {\n throw new PaymentException(\n \"Polar access token is required. Please set the POLAR_ACCESS_TOKEN environment variable.\",\n \"TOKEN_REQUIRED\",\n );\n }\n\n this.client = new Polar({\n accessToken,\n server: (this.env.POLAR_ENVIRONMENT as \"sandbox\" | \"production\") || \"production\",\n });\n }\n\n public async get(options: AnalyticsOptionsType): Promise<AnalyticsResponseType> {\n const response = await this.client.metrics.get({\n startDate: this.toRFCDate(options.startDate),\n endDate: this.toRFCDate(options.endDate),\n interval: options.interval,\n organizationId: options.organizationId ?? null,\n productId: options.productId ?? null,\n billingType: (options.billingType as BillingTypeType) ?? null,\n customerId: options.customerId ?? null,\n });\n\n return {\n periods: response.periods.map((period) => this.mapPeriod(period)),\n metrics: this.mapMetrics(response.metrics),\n };\n }\n\n public async getLimits(): Promise<AnalyticsLimitsType> {\n const response = await this.client.metrics.limits();\n\n return {\n minDate: new Date(response.minDate.toString()),\n intervals: this.mapIntervalsLimits(response.intervals),\n };\n }\n\n private toRFCDate(date: Date): RFCDate {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n\n return `${year}-${month}-${day}` as unknown as RFCDate;\n }\n\n private mapPeriod(period: {\n timestamp: Date;\n orders: number;\n revenue: number;\n cumulativeRevenue: number;\n averageOrderValue: number;\n oneTimeProducts: number;\n oneTimeProductsRevenue: number;\n newSubscriptions: number;\n newSubscriptionsRevenue: number;\n renewedSubscriptions: number;\n renewedSubscriptionsRevenue: number;\n activeSubscriptions: number;\n monthlyRecurringRevenue: number;\n }): AnalyticsPeriodType {\n return {\n timestamp: period.timestamp,\n orders: period.orders,\n revenue: period.revenue,\n cumulativeRevenue: period.cumulativeRevenue,\n averageOrderValue: period.averageOrderValue,\n oneTimeProducts: period.oneTimeProducts,\n oneTimeProductsRevenue: period.oneTimeProductsRevenue,\n newSubscriptions: period.newSubscriptions,\n newSubscriptionsRevenue: period.newSubscriptionsRevenue,\n renewedSubscriptions: period.renewedSubscriptions,\n renewedSubscriptionsRevenue: period.renewedSubscriptionsRevenue,\n activeSubscriptions: period.activeSubscriptions,\n monthlyRecurringRevenue: period.monthlyRecurringRevenue,\n };\n }\n\n private mapMetricInfo(metric: { slug: string; displayName: string; type: string }): AnalyticsMetricInfoType {\n return {\n slug: metric.slug,\n displayName: metric.displayName,\n type: metric.type,\n };\n }\n\n private mapMetrics(metrics: {\n orders: { slug: string; displayName: string; type: string };\n revenue: { slug: string; displayName: string; type: string };\n cumulativeRevenue: { slug: string; displayName: string; type: string };\n averageOrderValue: { slug: string; displayName: string; type: string };\n oneTimeProducts: { slug: string; displayName: string; type: string };\n oneTimeProductsRevenue: { slug: string; displayName: string; type: string };\n newSubscriptions: { slug: string; displayName: string; type: string };\n newSubscriptionsRevenue: { slug: string; displayName: string; type: string };\n renewedSubscriptions: { slug: string; displayName: string; type: string };\n renewedSubscriptionsRevenue: { slug: string; displayName: string; type: string };\n activeSubscriptions: { slug: string; displayName: string; type: string };\n monthlyRecurringRevenue: { slug: string; displayName: string; type: string };\n }): AnalyticsMetricsType {\n return {\n orders: this.mapMetricInfo(metrics.orders),\n revenue: this.mapMetricInfo(metrics.revenue),\n cumulativeRevenue: this.mapMetricInfo(metrics.cumulativeRevenue),\n averageOrderValue: this.mapMetricInfo(metrics.averageOrderValue),\n oneTimeProducts: this.mapMetricInfo(metrics.oneTimeProducts),\n oneTimeProductsRevenue: this.mapMetricInfo(metrics.oneTimeProductsRevenue),\n newSubscriptions: this.mapMetricInfo(metrics.newSubscriptions),\n newSubscriptionsRevenue: this.mapMetricInfo(metrics.newSubscriptionsRevenue),\n renewedSubscriptions: this.mapMetricInfo(metrics.renewedSubscriptions),\n renewedSubscriptionsRevenue: this.mapMetricInfo(metrics.renewedSubscriptionsRevenue),\n activeSubscriptions: this.mapMetricInfo(metrics.activeSubscriptions),\n monthlyRecurringRevenue: this.mapMetricInfo(metrics.monthlyRecurringRevenue),\n };\n }\n\n private mapIntervalsLimits(intervals: {\n hour: { maxDays: number };\n day: { maxDays: number };\n week: { maxDays: number };\n month: { maxDays: number };\n year: { maxDays: number };\n }): AnalyticsIntervalsLimitsType {\n return {\n hour: { maxDays: intervals.hour.maxDays },\n day: { maxDays: intervals.day.maxDays },\n week: { maxDays: intervals.week.maxDays },\n month: { maxDays: intervals.month.maxDays },\n year: { maxDays: intervals.year.maxDays },\n };\n }\n}\n",
7
+ "import { AppEnv } from \"@talosjs/app-env\";\nimport { inject, injectable } from \"@talosjs/container\";\nimport type { CurrencyCodeType } from \"@talosjs/currencies\";\nimport { Polar } from \"@polar-sh/sdk\";\nimport { PaymentException } from \"./PaymentException\";\nimport type {\n CheckoutAddressType,\n CheckoutCreateType,\n CheckoutCustomerType,\n CheckoutResponseType,\n CheckoutStatusType,\n CheckoutType,\n} from \"./types\";\n\n@injectable()\nexport class PolarCheckout {\n private client: Polar;\n\n constructor(@inject(AppEnv) private readonly env: AppEnv) {\n const accessToken = this.env.POLAR_ACCESS_TOKEN;\n\n if (!accessToken) {\n throw new PaymentException(\n \"Polar access token is required. Please set the POLAR_ACCESS_TOKEN environment variable.\",\n \"TOKEN_REQUIRED\",\n );\n }\n\n this.client = new Polar({\n accessToken,\n server: (this.env.POLAR_ENVIRONMENT as \"sandbox\" | \"production\") || \"production\",\n });\n }\n\n public async create(data: CheckoutCreateType): Promise<CheckoutType> {\n const response = await this.client.checkouts.create({\n products: data.products,\n customerExternalId: data.customerExternalId ?? null,\n customerId: data.customerId ?? null,\n customerEmail: data.customerEmail ?? null,\n customerName: data.customerName ?? null,\n customerBillingAddress: data.customerBillingAddress?.country\n ? {\n country: data.customerBillingAddress.country,\n line1: data.customerBillingAddress.line1 ?? null,\n line2: data.customerBillingAddress.line2 ?? null,\n city: data.customerBillingAddress.city ?? null,\n state: data.customerBillingAddress.state ?? null,\n postalCode: data.customerBillingAddress.postalCode ?? null,\n }\n : null,\n customerTaxId: data.customerTaxId ?? null,\n discountId: data.discountId ?? null,\n allowDiscountCodes: data.allowDiscountCodes ?? true,\n successUrl: data.successUrl ?? null,\n embedOrigin: data.embedOrigin ?? null,\n metadata: data.metadata,\n });\n\n return this.mapResponse(response as unknown as CheckoutResponseType);\n }\n\n public async get(id: string): Promise<CheckoutType> {\n const response = await this.client.checkouts.get({ id });\n\n return this.mapResponse(response as unknown as CheckoutResponseType);\n }\n\n private mapResponse(response: CheckoutResponseType): CheckoutType {\n const checkout: CheckoutType = {\n id: response.id,\n status: response.status as CheckoutStatusType,\n clientSecret: response.clientSecret,\n };\n\n if (response.url) {\n checkout.url = response.url;\n }\n\n if (response.embedId) {\n checkout.embedId = response.embedId;\n }\n\n if (response.allowDiscountCodes !== undefined) {\n checkout.allowDiscountCodes = response.allowDiscountCodes;\n }\n\n if (response.isDiscountApplicable !== undefined) {\n checkout.isDiscountApplicable = response.isDiscountApplicable;\n }\n\n if (response.isPaymentRequired !== undefined) {\n checkout.isPaymentRequired = response.isPaymentRequired;\n }\n\n if (response.metadata) {\n checkout.metadata = response.metadata;\n }\n\n if (response.createdAt) {\n checkout.createdAt = response.createdAt;\n }\n\n if (response.modifiedAt) {\n checkout.updatedAt = response.modifiedAt;\n }\n\n if (response.expiresAt) {\n checkout.expiresAt = response.expiresAt;\n }\n\n if (response.successUrl) {\n checkout.successUrl = response.successUrl;\n }\n\n if (response.embedOrigin) {\n checkout.embedOrigin = response.embedOrigin;\n }\n\n if (response.amount !== undefined) {\n checkout.amount = response.amount;\n }\n\n if (response.taxAmount !== undefined) {\n checkout.taxAmount = response.taxAmount;\n }\n\n if (response.currency) {\n checkout.currency = response.currency as CurrencyCodeType;\n }\n\n if (response.subtotalAmount !== undefined) {\n checkout.subtotalAmount = response.subtotalAmount;\n }\n\n if (response.totalAmount !== undefined) {\n checkout.totalAmount = response.totalAmount;\n }\n\n if (response.productId) {\n checkout.productId = response.productId;\n }\n\n if (response.productPriceId) {\n checkout.productPriceId = response.productPriceId;\n }\n\n if (response.discountId) {\n checkout.discountId = response.discountId;\n }\n\n if (response.customer) {\n checkout.customer = {\n id: response.customer.id,\n email: response.customer.email,\n name: response.customer.name,\n externalId: response.customer.externalId,\n taxId: response.customer.taxId,\n } as CheckoutCustomerType;\n\n if (response.customer.billingAddress) {\n checkout.customer.billingAddress = response.customer.billingAddress as CheckoutAddressType;\n }\n }\n\n return checkout;\n }\n}\n",
8
+ "import { AppEnv } from \"@talosjs/app-env\";\nimport { inject, injectable } from \"@talosjs/container\";\nimport { Polar } from \"@polar-sh/sdk\";\nimport type { Address } from \"@polar-sh/sdk/models/components/address.js\";\nimport { PaymentException } from \"./PaymentException\";\nimport type {\n CustomerAddressType,\n CustomerCreateType,\n CustomerListOptionsType,\n CustomerListResponseType,\n CustomerListResultType,\n CustomerResponseType,\n CustomerType,\n CustomerUpdateType,\n} from \"./types\";\n\n@injectable()\nexport class PolarCustomer {\n private client: Polar;\n\n constructor(@inject(AppEnv) private readonly env: AppEnv) {\n const accessToken = this.env.POLAR_ACCESS_TOKEN;\n\n if (!accessToken) {\n throw new PaymentException(\n \"Polar access token is required. Please set the POLAR_ACCESS_TOKEN environment variable.\",\n \"TOKEN_REQUIRED\",\n );\n }\n\n this.client = new Polar({\n accessToken,\n server: (this.env.POLAR_ENVIRONMENT as \"sandbox\" | \"production\") || \"production\",\n });\n }\n\n public async create(data: CustomerCreateType): Promise<CustomerType> {\n const response = await this.client.customers.create({\n email: data.email,\n name: data.name ?? null,\n externalId: data.externalId ?? null,\n billingAddress: data.billingAddress ? this.toBillingAddress(data.billingAddress) : null,\n taxId: data.taxId ? [data.taxId, null] : null,\n organizationId: data.organizationId ?? null,\n metadata: data.metadata,\n });\n\n return this.mapResponse(response as unknown as CustomerResponseType);\n }\n\n public async update(id: string, data: CustomerUpdateType): Promise<CustomerType> {\n const response = await this.client.customers.update({\n id,\n customerUpdate: {\n email: data.email ?? null,\n name: data.name ?? null,\n billingAddress: data.billingAddress ? this.toBillingAddress(data.billingAddress) : null,\n taxId: data.taxId ? [data.taxId, null] : null,\n metadata: data.metadata,\n },\n });\n\n return this.mapResponse(response as unknown as CustomerResponseType);\n }\n\n public async remove(id: string): Promise<void> {\n await this.client.customers.delete({ id });\n }\n\n public async get(id: string): Promise<CustomerType> {\n const response = await this.client.customers.get({ id });\n\n return this.mapResponse(response as unknown as CustomerResponseType);\n }\n\n public async list(options?: CustomerListOptionsType): Promise<CustomerListResultType> {\n const response = await this.client.customers.list({\n organizationId: options?.organizationId,\n email: options?.email,\n query: options?.query,\n page: options?.page ?? 1,\n limit: options?.limit ?? 10,\n });\n\n const result = response as unknown as CustomerListResponseType;\n\n return {\n items: result.result.items.map((item) => this.mapResponse(item)),\n pagination: {\n totalCount: result.result.pagination.totalCount,\n maxPage: result.result.pagination.maxPage,\n },\n };\n }\n\n public async getByExternalId(externalId: string): Promise<CustomerType> {\n const response = await this.client.customers.getExternal({ externalId });\n\n return this.mapResponse(response as unknown as CustomerResponseType);\n }\n\n public async updateByExternalId(externalId: string, data: CustomerUpdateType): Promise<CustomerType> {\n const response = await this.client.customers.updateExternal({\n externalId,\n customerUpdate: {\n email: data.email ?? null,\n name: data.name ?? null,\n billingAddress: data.billingAddress ? this.toBillingAddress(data.billingAddress) : null,\n taxId: data.taxId ? [data.taxId, null] : null,\n metadata: data.metadata,\n },\n });\n\n return this.mapResponse(response as unknown as CustomerResponseType);\n }\n\n public async removeByExternalId(externalId: string): Promise<void> {\n await this.client.customers.deleteExternal({ externalId });\n }\n\n private toBillingAddress(address: CustomerAddressType): Address {\n return {\n country: address.country ?? \"\",\n line1: address.line1,\n line2: address.line2,\n city: address.city,\n state: address.state,\n postalCode: address.postalCode,\n };\n }\n\n private mapResponse(response: CustomerResponseType): CustomerType {\n const customer: CustomerType = {\n id: response.id,\n email: response.email,\n emailVerified: response.emailVerified ?? false,\n };\n\n if (response.createdAt) {\n customer.createdAt = response.createdAt;\n }\n\n if (response.modifiedAt) {\n customer.updatedAt = response.modifiedAt;\n }\n\n if (response.deletedAt) {\n customer.deletedAt = response.deletedAt;\n }\n\n if (response.name) {\n customer.name = response.name;\n }\n\n if (response.externalId) {\n customer.externalId = response.externalId;\n }\n\n if (response.avatarUrl) {\n customer.avatarUrl = response.avatarUrl;\n }\n\n if (response.billingAddress) {\n const billingAddress: CustomerAddressType = {};\n if (response.billingAddress.line1) {\n billingAddress.line1 = response.billingAddress.line1;\n }\n if (response.billingAddress.line2) {\n billingAddress.line2 = response.billingAddress.line2;\n }\n if (response.billingAddress.city) {\n billingAddress.city = response.billingAddress.city;\n }\n if (response.billingAddress.state) {\n billingAddress.state = response.billingAddress.state;\n }\n if (response.billingAddress.postalCode) {\n billingAddress.postalCode = response.billingAddress.postalCode;\n }\n if (response.billingAddress.country) {\n billingAddress.country = response.billingAddress.country;\n }\n customer.billingAddress = billingAddress;\n }\n\n if (response.taxId) {\n const taxIdValue = typeof response.taxId === \"string\" ? response.taxId : response.taxId[1];\n customer.taxId = taxIdValue;\n }\n\n if (response.organizationId) {\n customer.organizationId = response.organizationId;\n }\n\n if (response.metadata) {\n customer.metadata = response.metadata;\n }\n\n return customer;\n }\n}\n",
9
+ "import { AppEnv } from \"@talosjs/app-env\";\nimport { inject, injectable } from \"@talosjs/container\";\nimport { Polar } from \"@polar-sh/sdk\";\nimport { PaymentException } from \"./PaymentException\";\nimport type { CustomerSessionCreateType, CustomerSessionResponseType, CustomerSessionType } from \"./types\";\n\n@injectable()\nexport class PolarCustomerPortal {\n private client: Polar;\n\n constructor(@inject(AppEnv) private readonly env: AppEnv) {\n const accessToken = this.env.POLAR_ACCESS_TOKEN;\n\n if (!accessToken) {\n throw new PaymentException(\n \"Polar access token is required. Please set the POLAR_ACCESS_TOKEN environment variable.\",\n \"TOKEN_REQUIRED\",\n );\n }\n\n this.client = new Polar({\n accessToken,\n server: (this.env.POLAR_ENVIRONMENT as \"sandbox\" | \"production\") || \"production\",\n });\n }\n\n public async create(data: CustomerSessionCreateType): Promise<CustomerSessionType> {\n const response = await this.client.customerSessions.create({\n customerId: data.customerId,\n });\n\n return this.mapResponse(response as unknown as CustomerSessionResponseType);\n }\n\n public getPortalUrl(organizationSlug: string): string {\n const baseUrl = this.env.POLAR_ENVIRONMENT === \"sandbox\" ? \"https://sandbox.polar.sh\" : \"https://polar.sh\";\n\n return `${baseUrl}/${organizationSlug}/portal`;\n }\n\n private mapResponse(response: CustomerSessionResponseType): CustomerSessionType {\n const session: CustomerSessionType = {\n id: response.id,\n token: response.token,\n customerPortalUrl: response.customerPortalUrl,\n };\n\n if (response.createdAt) {\n session.createdAt = response.createdAt;\n }\n\n if (response.expiresAt) {\n session.expiresAt = response.expiresAt;\n }\n\n if (response.customerId) {\n session.customerId = response.customerId;\n }\n\n return session;\n }\n}\n",
10
+ "import { AppEnv } from \"@talosjs/app-env\";\nimport { inject, injectable } from \"@talosjs/container\";\nimport type { CurrencyCodeType } from \"@talosjs/currencies\";\nimport { Polar } from \"@polar-sh/sdk\";\nimport { PaymentException } from \"./PaymentException\";\nimport type { DiscountDurationType, DiscountResponseType, DiscountType, IDiscount, IProduct } from \"./types\";\n\n@injectable()\nexport class PolarDiscount {\n private client: Polar;\n\n constructor(@inject(AppEnv) private readonly env: AppEnv) {\n const accessToken = this.env.POLAR_ACCESS_TOKEN;\n\n if (!accessToken) {\n throw new PaymentException(\n \"Polar access token is required. Please set the POLAR_ACCESS_TOKEN environment variable.\",\n \"TOKEN_REQUIRED\",\n );\n }\n\n this.client = new Polar({\n accessToken,\n server: (this.env.POLAR_ENVIRONMENT as \"sandbox\" | \"production\") || \"production\",\n });\n }\n\n private toDiscountType(type: DiscountType): \"percentage\" | \"fixed\" {\n return type === \"percentage\" ? \"percentage\" : \"fixed\";\n }\n\n private toDiscountDuration(duration: DiscountDurationType): \"once\" | \"repeating\" | \"forever\" {\n switch (duration) {\n case \"once\":\n return \"once\";\n case \"repeating\":\n return \"repeating\";\n case \"forever\":\n return \"forever\";\n default:\n return \"once\";\n }\n }\n\n public async create(data: IDiscount): Promise<IDiscount> {\n const discountType = this.toDiscountType(data.type);\n const duration = this.toDiscountDuration(data.duration);\n\n const basePayload = {\n name: data.name,\n code: data.code ?? null,\n startsAt: data.startAt ?? null,\n endsAt: data.endAt ?? null,\n maxRedemptions: data.maxRedemptions ?? null,\n organizationId: data.organizationId ?? null,\n metadata: data.metadata,\n products: data.applicableProducts?.map((p) => p.id as string) ?? null,\n };\n\n let response: unknown;\n\n if (discountType === \"percentage\") {\n if (duration === \"repeating\") {\n response = await this.client.discounts.create({\n ...basePayload,\n type: \"percentage\",\n basisPoints: data.amount * 100,\n duration: \"repeating\",\n durationInMonths: data.durationInMonths ?? 1,\n });\n } else {\n response = await this.client.discounts.create({\n ...basePayload,\n type: \"percentage\",\n basisPoints: data.amount * 100,\n duration: duration as \"once\" | \"forever\",\n });\n }\n } else {\n if (duration === \"repeating\") {\n response = await this.client.discounts.create({\n ...basePayload,\n type: \"fixed\",\n amount: data.amount,\n currency: data.currency ?? \"usd\",\n duration: \"repeating\",\n durationInMonths: data.durationInMonths ?? 1,\n });\n } else {\n response = await this.client.discounts.create({\n ...basePayload,\n type: \"fixed\",\n amount: data.amount,\n currency: data.currency ?? \"usd\",\n duration: duration as \"once\" | \"forever\",\n });\n }\n }\n\n return this.mapResponse(response as unknown as DiscountResponseType);\n }\n\n public async update(id: string, data: Partial<IDiscount>): Promise<IDiscount> {\n const response = await this.client.discounts.update({\n id,\n discountUpdate: {\n name: data.name ?? null,\n code: data.code ?? null,\n startsAt: data.startAt ?? null,\n endsAt: data.endAt ?? null,\n maxRedemptions: data.maxRedemptions ?? null,\n metadata: data.metadata,\n products: data.applicableProducts?.map((p) => p.id as string) ?? null,\n },\n });\n\n return this.mapResponse(response as unknown as DiscountResponseType);\n }\n\n public async remove(id: string): Promise<void> {\n await this.client.discounts.delete({ id });\n }\n\n public async get(id: string): Promise<IDiscount> {\n const response = await this.client.discounts.get({ id });\n\n return this.mapResponse(response as unknown as DiscountResponseType);\n }\n\n private mapResponse(response: DiscountResponseType): IDiscount {\n const discount: IDiscount = {\n id: response.id,\n name: response.name,\n type: response.type as DiscountType,\n amount: response.type === \"percentage\" ? (response.basisPoints ?? 0) / 100 : (response.amount ?? 0),\n duration: response.duration as DiscountDurationType,\n redemptionsCount: response.redemptionsCount,\n metadata: response.metadata,\n };\n\n if (response.createdAt) {\n discount.createdAt = response.createdAt;\n }\n\n if (response.modifiedAt) {\n discount.updatedAt = response.modifiedAt;\n }\n\n if (response.code) {\n discount.code = response.code;\n }\n\n if (response.startsAt) {\n discount.startAt = response.startsAt;\n }\n\n if (response.endsAt) {\n discount.endAt = response.endsAt;\n }\n\n if (response.maxRedemptions) {\n discount.maxRedemptions = response.maxRedemptions;\n }\n\n if (response.durationInMonths) {\n discount.durationInMonths = response.durationInMonths;\n }\n\n if (response.organizationId) {\n discount.organizationId = response.organizationId;\n }\n\n if (response.currency) {\n discount.currency = response.currency as CurrencyCodeType;\n }\n\n if (response.products) {\n discount.applicableProducts = response.products.map(\n (p: { id: string; name: string }) =>\n ({\n id: p.id,\n name: p.name,\n }) as IProduct,\n );\n }\n\n return discount;\n }\n}\n",
11
+ "import { AppEnv } from \"@talosjs/app-env\";\nimport { inject, injectable } from \"@talosjs/container\";\nimport { Polar } from \"@polar-sh/sdk\";\nimport type { SubscriptionRecurringInterval } from \"@polar-sh/sdk/models/components/subscriptionrecurringinterval.js\";\nimport { PaymentException } from \"./PaymentException\";\nimport type { BenefitType, CustomFieldType, IProduct, PriceType, SubscriptionPeriodType } from \"./types\";\n\n@injectable()\nexport class PolarProduct {\n private client: Polar;\n\n constructor(@inject(AppEnv) private readonly env: AppEnv) {\n const accessToken = this.env.POLAR_ACCESS_TOKEN;\n\n if (!accessToken) {\n throw new PaymentException(\n \"Polar access token is required. Please set the POLAR_ACCESS_TOKEN environment variable.\",\n \"TOKEN_REQUIRED\",\n );\n }\n\n this.client = new Polar({\n accessToken,\n server: (this.env.POLAR_ENVIRONMENT as \"sandbox\" | \"production\") || \"production\",\n });\n }\n\n private toRecurringInterval(period?: SubscriptionPeriodType): SubscriptionRecurringInterval | null {\n if (!period) return null;\n\n switch (period) {\n case \"monthly\":\n return \"month\";\n case \"yearly\":\n return \"year\";\n default:\n return null;\n }\n }\n\n public async create(data: IProduct): Promise<Omit<IProduct, \"id\">> {\n const response = await this.client.products.create({\n name: data.name,\n description: data.description ?? null,\n recurringInterval: this.toRecurringInterval(data.recurringInterval),\n prices:\n data.prices?.map((price) => ({\n type: price.type,\n priceCurrency: price.priceCurrency ?? \"usd\",\n priceAmount: price.priceAmount,\n minimumAmount: price.minimumAmount,\n maximumAmount: price.maximumAmount,\n presetAmount: price.presetAmount,\n })) ?? [],\n medias: data.images?.map((image) => image.url) ?? null,\n organizationId: data.organizationId ?? null,\n metadata: data.metadata,\n attachedCustomFields: data.attachedCustomFields?.map((field) => ({\n customFieldId: field.customFieldId,\n required: field.required,\n })),\n });\n\n return this.mapResponse(response);\n }\n\n public async update(id: string, data: Partial<IProduct>): Promise<Omit<IProduct, \"id\">> {\n const response = await this.client.products.update({\n id,\n productUpdate: {\n name: data.name ?? null,\n description: data.description ?? null,\n isArchived: data.isArchived ?? null,\n recurringInterval: this.toRecurringInterval(data.recurringInterval),\n prices:\n data.prices?.map((price) => ({\n type: price.type,\n priceCurrency: price.priceCurrency ?? \"usd\",\n priceAmount: price.priceAmount,\n minimumAmount: price.minimumAmount,\n maximumAmount: price.maximumAmount,\n presetAmount: price.presetAmount,\n })) ?? null,\n medias: data.images?.map((image) => image.url) ?? null,\n metadata: data.metadata,\n attachedCustomFields:\n data.attachedCustomFields?.map((field) => ({\n customFieldId: field.customFieldId,\n required: field.required,\n })) ?? null,\n },\n });\n\n return this.mapResponse(response);\n }\n\n public async remove(id: string): Promise<void> {\n await this.client.products.update({\n id,\n productUpdate: {\n isArchived: true,\n },\n });\n }\n\n private mapResponse(response: {\n id: string;\n createdAt: Date;\n modifiedAt: Date | null;\n name: string;\n description: string | null;\n isRecurring: boolean;\n isArchived: boolean;\n organizationId: string;\n metadata: Record<string, string | number | boolean>;\n prices: unknown[];\n benefits: unknown[];\n attachedCustomFields: unknown[];\n }): Omit<IProduct, \"id\"> {\n const product: Omit<IProduct, \"id\"> = {\n key: response.id,\n name: response.name,\n isRecurring: response.isRecurring,\n isArchived: response.isArchived,\n organizationId: response.organizationId,\n metadata: response.metadata,\n prices: response.prices as PriceType[],\n benefits: response.benefits as BenefitType[],\n attachedCustomFields: response.attachedCustomFields as CustomFieldType[],\n };\n\n if (response.createdAt) {\n product.createdAt = response.createdAt;\n }\n\n if (response.modifiedAt) {\n product.updatedAt = response.modifiedAt;\n }\n\n if (response.description) {\n product.description = response.description;\n }\n\n return product;\n }\n}\n",
12
+ "import type { CurrencyCodeType } from \"@talosjs/currencies\";\nimport type { IBase, ScalarType } from \"@talosjs/types\";\n\nexport enum EPriceType {\n FIXED = \"fixed\",\n CUSTOM = \"custom\",\n FREE = \"free\",\n}\n\nexport type PriceTypeType = `${EPriceType}`;\n\nexport type ProductImageType = {\n id: string;\n url: string;\n};\n\nexport type PriceType = {\n type: PriceTypeType;\n priceCurrency?: string;\n priceAmount?: number;\n minimumAmount?: number;\n maximumAmount?: number;\n presetAmount?: number;\n};\n\nexport type CustomFieldType = {\n customFieldId: string;\n required: boolean;\n};\n\nexport enum EDiscountType {\n PERCENTAGE = \"percentage\",\n FIXED = \"fixed\",\n}\n\nexport enum EDiscountDuration {\n ONCE = \"once\",\n REPEATING = \"repeating\",\n FOREVER = \"forever\",\n}\n\nexport type DiscountDurationType = `${EDiscountDuration}`;\n\nexport enum ESubscriptionPeriod {\n MONTHLY = \"monthly\",\n YEARLY = \"yearly\",\n WEEKLY = \"weekly\",\n DAILY = \"daily\",\n}\n\nexport type DiscountType = `${EDiscountType}`;\nexport type SubscriptionPeriodType = `${ESubscriptionPeriod}`;\n\nexport enum EBenefitType {\n CREDITS = \"credits\",\n LICENSE_KEYS = \"license_keys\",\n FILE_DOWNLOADS = \"file_downloads\",\n GITHUB_REPOSITORY_ACCESS = \"github_repository_access\",\n DISCORD_ACCESS = \"discord_access\",\n CUSTOM = \"custom\",\n}\n\nexport type BenefitTypeType = `${EBenefitType}`;\n\nexport enum EGitHubPermission {\n READ = \"read\",\n TRIAGE = \"triage\",\n WRITE = \"write\",\n MAINTAIN = \"maintain\",\n ADMIN = \"admin\",\n}\n\nexport type GitHubPermissionType = `${EGitHubPermission}`;\n\nexport type BenefitBaseType = {\n type: BenefitTypeType;\n name: string;\n description?: string;\n isSelectable?: boolean;\n isDeletable?: boolean;\n organizationId?: string;\n};\n\nexport type CreditsBenefitType = BenefitBaseType & {\n type: typeof EBenefitType.CREDITS;\n amount: number;\n rollover?: boolean;\n};\n\nexport type LicenseKeysBenefitType = BenefitBaseType & {\n type: typeof EBenefitType.LICENSE_KEYS;\n prefix?: string;\n expiresInDays?: number;\n expiresInMonths?: number;\n expiresInYears?: number;\n activationLimit?: number;\n usageLimit?: number;\n};\n\nexport type FileDownloadsBenefitType = BenefitBaseType & {\n type: typeof EBenefitType.FILE_DOWNLOADS;\n files?: BenefitFileType[];\n};\n\nexport type BenefitFileType = {\n id: string;\n name: string;\n size: number;\n mimeType?: string;\n checksum?: string;\n isEnabled?: boolean;\n};\n\nexport type GitHubRepositoryAccessBenefitType = BenefitBaseType & {\n type: typeof EBenefitType.GITHUB_REPOSITORY_ACCESS;\n repositoryOwner: string;\n repositoryName: string;\n permission?: GitHubPermissionType;\n};\n\nexport type DiscordAccessBenefitType = BenefitBaseType & {\n type: typeof EBenefitType.DISCORD_ACCESS;\n guildId: string;\n roleId: string;\n};\n\nexport type CustomBenefitType = BenefitBaseType & {\n type: typeof EBenefitType.CUSTOM;\n note?: string;\n};\n\nexport type BenefitType =\n | CreditsBenefitType\n | LicenseKeysBenefitType\n | FileDownloadsBenefitType\n | GitHubRepositoryAccessBenefitType\n | DiscordAccessBenefitType\n | CustomBenefitType;\n\nexport interface IProduct extends IBase {\n key?: string;\n name: string;\n description?: string;\n categories?: string[];\n currency?: CurrencyCodeType;\n price?: number;\n barcode?: string;\n images?: ProductImageType[];\n attributes?: Record<string, ScalarType>;\n tags?: string[];\n isRecurring?: boolean;\n isArchived?: boolean;\n organizationId?: string;\n recurringInterval?: SubscriptionPeriodType;\n metadata?: Record<string, string | number | boolean>;\n prices?: PriceType[];\n benefits?: BenefitType[];\n attachedCustomFields?: CustomFieldType[];\n}\n\nexport interface IFeature extends IBase {\n name: string;\n description?: string;\n isEnabled?: boolean;\n limit?: number;\n}\n\nexport interface IPlan extends IBase {\n name: string;\n description?: string;\n currency: CurrencyCodeType;\n price: number;\n period: ESubscriptionPeriod;\n periodCount?: number;\n features?: IFeature[];\n isActive?: boolean;\n trialDays?: number;\n}\n\nexport interface ICredit extends IBase {\n balance: number;\n currency?: CurrencyCodeType;\n expiresAt?: Date;\n description?: string;\n}\n\nexport interface ISubscription extends IBase {\n discounts?: IDiscount[];\n plans?: IPlan[];\n credits?: ICredit[];\n startAt: Date;\n endAt?: Date;\n isTrial?: boolean;\n isActive?: boolean;\n}\n\nexport interface IDiscount extends IBase {\n key?: string;\n name: string;\n description?: string;\n code?: string;\n type: DiscountType;\n amount: number;\n currency?: CurrencyCodeType;\n duration: DiscountDurationType;\n durationInMonths?: number;\n startAt?: Date;\n endAt?: Date;\n maxUses?: number;\n usedCount?: number;\n maxRedemptions?: number;\n redemptionsCount?: number;\n isActive?: boolean;\n minimumAmount?: number;\n applicableProducts?: IProduct[];\n applicablePlans?: IPlan[];\n organizationId?: string;\n metadata?: Record<string, string | number | boolean>;\n}\n\nexport enum ECheckoutStatus {\n OPEN = \"open\",\n EXPIRED = \"expired\",\n CONFIRMED = \"confirmed\",\n SUCCEEDED = \"succeeded\",\n FAILED = \"failed\",\n}\n\nexport type CheckoutStatusType = `${ECheckoutStatus}`;\n\nexport type CheckoutCustomerType = {\n id?: string;\n email?: string;\n name?: string;\n externalId?: string;\n billingAddress?: CheckoutAddressType;\n taxId?: string;\n};\n\nexport type CheckoutAddressType = {\n line1?: string;\n line2?: string;\n city?: string;\n state?: string;\n postalCode?: string;\n country?: string;\n};\n\nexport type CheckoutCreateType = {\n products: string[];\n customerExternalId?: string;\n customerId?: string;\n customerEmail?: string;\n customerName?: string;\n customerBillingAddress?: CheckoutAddressType;\n customerTaxId?: string;\n discountId?: string;\n allowDiscountCodes?: boolean;\n successUrl?: string;\n embedOrigin?: string;\n metadata?: Record<string, string | number | boolean>;\n};\n\nexport type CheckoutType = {\n id: string;\n url?: string;\n embedId?: string;\n status: CheckoutStatusType;\n clientSecret: string;\n createdAt?: Date;\n updatedAt?: Date;\n expiresAt?: Date;\n successUrl?: string;\n embedOrigin?: string;\n amount?: number;\n taxAmount?: number;\n currency?: CurrencyCodeType;\n subtotalAmount?: number;\n totalAmount?: number;\n productId?: string;\n productPriceId?: string;\n discountId?: string;\n allowDiscountCodes?: boolean;\n isDiscountApplicable?: boolean;\n isPaymentRequired?: boolean;\n customer?: CheckoutCustomerType;\n metadata?: Record<string, string | number | boolean>;\n};\n\nexport type CustomerSessionCreateType = {\n customerId: string;\n};\n\nexport type CustomerSessionType = {\n id: string;\n token: string;\n customerPortalUrl: string;\n createdAt?: Date;\n expiresAt?: Date;\n customerId?: string;\n};\n\nexport type CustomerAddressType = {\n line1?: string;\n line2?: string;\n city?: string;\n state?: string;\n postalCode?: string;\n country?: string;\n};\n\nexport type CustomerCreateType = {\n email: string;\n name?: string;\n externalId?: string;\n billingAddress?: CustomerAddressType;\n taxId?: string;\n organizationId?: string;\n metadata?: Record<string, string | number | boolean>;\n};\n\nexport type CustomerUpdateType = {\n email?: string;\n name?: string;\n billingAddress?: CustomerAddressType;\n taxId?: string;\n metadata?: Record<string, string | number | boolean>;\n};\n\nexport type CustomerType = {\n id: string;\n email: string;\n emailVerified: boolean;\n name?: string;\n externalId?: string;\n avatarUrl?: string;\n billingAddress?: CustomerAddressType;\n taxId?: string;\n organizationId?: string;\n metadata?: Record<string, string | number | boolean>;\n createdAt?: Date;\n updatedAt?: Date;\n deletedAt?: Date;\n};\n\nexport type CustomerListOptionsType = {\n organizationId?: string;\n email?: string;\n query?: string;\n page?: number;\n limit?: number;\n};\n\nexport type CustomerListResultType = {\n items: CustomerType[];\n pagination: {\n totalCount: number;\n maxPage: number;\n };\n};\n\nexport enum EAnalyticsInterval {\n YEAR = \"year\",\n MONTH = \"month\",\n WEEK = \"week\",\n DAY = \"day\",\n HOUR = \"hour\",\n}\n\nexport type AnalyticsIntervalType = `${EAnalyticsInterval}`;\n\nexport enum EBillingType {\n ONE_TIME = \"one_time\",\n RECURRING = \"recurring\",\n}\n\nexport type BillingTypeType = `${EBillingType}`;\n\nexport type AnalyticsOptionsType = {\n startDate: Date;\n endDate: Date;\n interval: AnalyticsIntervalType;\n organizationId?: string | string[];\n productId?: string | string[];\n billingType?: BillingTypeType | BillingTypeType[];\n customerId?: string | string[];\n};\n\nexport type AnalyticsPeriodType = {\n timestamp: Date;\n orders: number;\n revenue: number;\n cumulativeRevenue: number;\n averageOrderValue: number;\n oneTimeProducts: number;\n oneTimeProductsRevenue: number;\n newSubscriptions: number;\n newSubscriptionsRevenue: number;\n renewedSubscriptions: number;\n renewedSubscriptionsRevenue: number;\n activeSubscriptions: number;\n monthlyRecurringRevenue: number;\n};\n\nexport type AnalyticsMetricInfoType = {\n slug: string;\n displayName: string;\n type: string;\n};\n\nexport type AnalyticsMetricsType = {\n orders: AnalyticsMetricInfoType;\n revenue: AnalyticsMetricInfoType;\n cumulativeRevenue: AnalyticsMetricInfoType;\n averageOrderValue: AnalyticsMetricInfoType;\n oneTimeProducts: AnalyticsMetricInfoType;\n oneTimeProductsRevenue: AnalyticsMetricInfoType;\n newSubscriptions: AnalyticsMetricInfoType;\n newSubscriptionsRevenue: AnalyticsMetricInfoType;\n renewedSubscriptions: AnalyticsMetricInfoType;\n renewedSubscriptionsRevenue: AnalyticsMetricInfoType;\n activeSubscriptions: AnalyticsMetricInfoType;\n monthlyRecurringRevenue: AnalyticsMetricInfoType;\n};\n\nexport type AnalyticsResponseType = {\n periods: AnalyticsPeriodType[];\n metrics: AnalyticsMetricsType;\n};\n\nexport type AnalyticsIntervalLimitType = {\n maxDays: number;\n};\n\nexport type AnalyticsIntervalsLimitsType = {\n hour: AnalyticsIntervalLimitType;\n day: AnalyticsIntervalLimitType;\n week: AnalyticsIntervalLimitType;\n month: AnalyticsIntervalLimitType;\n year: AnalyticsIntervalLimitType;\n};\n\nexport type AnalyticsLimitsType = {\n minDate: Date;\n intervals: AnalyticsIntervalsLimitsType;\n};\n\nexport type CustomerSessionResponseType = {\n id: string;\n token: string;\n customerPortalUrl: string;\n createdAt?: Date;\n expiresAt?: Date;\n customerId?: string;\n};\n\nexport type DiscountResponseType = {\n id: string;\n createdAt?: Date;\n modifiedAt?: Date;\n name: string;\n code?: string;\n type: string;\n basisPoints?: number;\n amount?: number;\n currency?: string;\n duration: string;\n durationInMonths?: number;\n startsAt?: Date;\n endsAt?: Date;\n maxRedemptions?: number;\n redemptionsCount: number;\n organizationId?: string;\n metadata: Record<string, string | number | boolean>;\n products?: { id: string; name: string }[];\n};\n\nexport type CheckoutResponseType = {\n id: string;\n createdAt?: Date;\n modifiedAt?: Date;\n url?: string;\n embedId?: string;\n status: string;\n clientSecret: string;\n expiresAt?: Date;\n successUrl?: string;\n embedOrigin?: string;\n amount?: number;\n taxAmount?: number;\n currency?: string;\n subtotalAmount?: number;\n totalAmount?: number;\n productId?: string;\n productPriceId?: string;\n discountId?: string;\n allowDiscountCodes?: boolean;\n isDiscountApplicable?: boolean;\n isPaymentRequired?: boolean;\n customer?: {\n id?: string;\n email?: string;\n name?: string;\n externalId?: string;\n billingAddress?: {\n line1?: string;\n line2?: string;\n city?: string;\n state?: string;\n postalCode?: string;\n country?: string;\n };\n taxId?: string;\n };\n metadata: Record<string, string | number | boolean>;\n};\n\nexport type CustomerResponseType = {\n id: string;\n createdAt?: Date;\n modifiedAt?: Date;\n deletedAt?: Date;\n email: string;\n emailVerified?: boolean;\n name?: string;\n externalId?: string;\n avatarUrl?: string;\n billingAddress?: {\n line1?: string;\n line2?: string;\n city?: string;\n state?: string;\n postalCode?: string;\n country?: string;\n };\n taxId?: string | [string, string];\n organizationId?: string;\n metadata?: Record<string, string | number | boolean>;\n};\n\nexport type CustomerListResponseType = {\n result: {\n items: CustomerResponseType[];\n pagination: {\n totalCount: number;\n maxPage: number;\n };\n };\n};\n"
13
+ ],
14
+ "mappings": "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",
15
+ "debugId": "1D32103632506D8764756E2164756E21",
16
+ "names": []
17
+ }
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "@talosjs/payment",
3
+ "description": "Payment and pricing type definitions with currency handling, product categorization, and billing metadata for e-commerce integrations",
4
+ "version": "1.0.0",
5
+ "type": "module",
6
+ "files": [
7
+ "dist",
8
+ "LICENSE",
9
+ "README.md",
10
+ "package.json"
11
+ ],
12
+ "module": "./dist/index.js",
13
+ "types": "./dist/index.d.ts",
14
+ "exports": {
15
+ ".": {
16
+ "import": {
17
+ "types": "./dist/index.d.ts",
18
+ "default": "./dist/index.js"
19
+ }
20
+ },
21
+ "./package.json": "./package.json"
22
+ },
23
+ "license": "MIT",
24
+ "scripts": {
25
+ "build": "bunup",
26
+ "lint": "tsgo --noEmit && bunx biome lint",
27
+ "npm:publish": "bun publish --tolerate-republish --force --production --access public"
28
+ },
29
+ "dependencies": {
30
+ "@talosjs/app-env": "^1.12.0",
31
+ "@talosjs/container": "^1.5.1",
32
+ "@talosjs/exception": "^1.2.10",
33
+ "@talosjs/http-status": "^1.1.11",
34
+ "@polar-sh/sdk": "^0.30.0"
35
+ },
36
+ "devDependencies": {
37
+ "@talosjs/currencies": "^1.1.12",
38
+ "@talosjs/types": "^1.3.7"
39
+ },
40
+ "keywords": [
41
+ "billing",
42
+ "bun",
43
+ "e-commerce",
44
+ "talos",
45
+ "payment",
46
+ "payments",
47
+ "pricing",
48
+ "typescript"
49
+ ]
50
+ }