@modainteract/moda-interact-shared 0.9.0 → 0.10.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.
- package/dist/billing.d.ts +22 -1
- package/dist/billing.js +17 -1
- package/dist/{chunk-YDKVCS3T.js → chunk-KO4LMZ66.js} +35 -1
- package/dist/chunk-KO4LMZ66.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +17 -1
- package/package.json +2 -1
- package/dist/chunk-YDKVCS3T.js.map +0 -1
package/dist/billing.d.ts
CHANGED
|
@@ -2,6 +2,10 @@ import { z } from 'zod';
|
|
|
2
2
|
|
|
3
3
|
declare const ARCH007_BILLING_CONTRACT_SCHEMA_VERSION: 1;
|
|
4
4
|
declare const WHATSAPP_PROVIDER_STATUS_SCHEMA_VERSION: 2;
|
|
5
|
+
declare const BILLING_SUBSCRIPTION_RECONCILE_SCHEMA_VERSION: 1;
|
|
6
|
+
declare const BILLING_SUBSCRIPTION_RECONCILE_QUEUE_NAME = "billing-subscription-reconcile";
|
|
7
|
+
declare const BILLING_SUBSCRIPTION_RECONCILE_JOB_NAME = "reconcile-subscription";
|
|
8
|
+
declare const APP_PRICING_BILLING_PERIOD_DRAIN_WINDOW_MS: 300000;
|
|
5
9
|
declare const BILLING_PLAN_KINDS: readonly ["FREE", "PAID_METERED"];
|
|
6
10
|
declare const BillingPlanKindSchema: z.ZodEnum<{
|
|
7
11
|
FREE: "FREE";
|
|
@@ -19,6 +23,7 @@ type BillingUsageMetric = z.infer<typeof BillingUsageMetricSchema>;
|
|
|
19
23
|
declare const BILLING_SYSTEM_MESSAGE_CODES: {
|
|
20
24
|
readonly FREE_ALLOWANCE_WARNING: "BILLING_FREE_ALLOWANCE_WARNING";
|
|
21
25
|
readonly FREE_ALLOWANCE_EXHAUSTED: "BILLING_FREE_ALLOWANCE_EXHAUSTED";
|
|
26
|
+
readonly RECOVERY_CAPACITY_EXHAUSTED: "BILLING_RECOVERY_CAPACITY_EXHAUSTED";
|
|
22
27
|
readonly PLAN_UPGRADED: "BILLING_PLAN_UPGRADED";
|
|
23
28
|
readonly PLAN_DOWNGRADE_SCHEDULED: "BILLING_PLAN_DOWNGRADE_SCHEDULED";
|
|
24
29
|
readonly SUBSCRIPTION_ENDED: "BILLING_SUBSCRIPTION_ENDED";
|
|
@@ -34,6 +39,7 @@ declare const BILLING_SYSTEM_MESSAGE_CODES: {
|
|
|
34
39
|
declare const BillingSystemMessageCodeSchema: z.ZodEnum<{
|
|
35
40
|
BILLING_FREE_ALLOWANCE_WARNING: "BILLING_FREE_ALLOWANCE_WARNING";
|
|
36
41
|
BILLING_FREE_ALLOWANCE_EXHAUSTED: "BILLING_FREE_ALLOWANCE_EXHAUSTED";
|
|
42
|
+
BILLING_RECOVERY_CAPACITY_EXHAUSTED: "BILLING_RECOVERY_CAPACITY_EXHAUSTED";
|
|
37
43
|
BILLING_PLAN_UPGRADED: "BILLING_PLAN_UPGRADED";
|
|
38
44
|
BILLING_PLAN_DOWNGRADE_SCHEDULED: "BILLING_PLAN_DOWNGRADE_SCHEDULED";
|
|
39
45
|
BILLING_SUBSCRIPTION_ENDED: "BILLING_SUBSCRIPTION_ENDED";
|
|
@@ -97,6 +103,20 @@ declare const WhatsAppProviderStatusSchema: z.ZodEnum<{
|
|
|
97
103
|
FAILED: "FAILED";
|
|
98
104
|
}>;
|
|
99
105
|
type WhatsAppProviderStatus = z.infer<typeof WhatsAppProviderStatusSchema>;
|
|
106
|
+
declare const BillingSubscriptionReconcileJobSchema: z.ZodObject<{
|
|
107
|
+
schemaVersion: z.ZodLiteral<1>;
|
|
108
|
+
shopId: z.ZodString;
|
|
109
|
+
subscriptionId: z.ZodString;
|
|
110
|
+
expectedNextReconcileAt: z.ZodISODateTime;
|
|
111
|
+
}, z.core.$strict>;
|
|
112
|
+
type BillingSubscriptionReconcileJob = z.infer<typeof BillingSubscriptionReconcileJobSchema>;
|
|
113
|
+
declare function parseBillingSubscriptionReconcileJob(input: unknown): BillingSubscriptionReconcileJob;
|
|
114
|
+
declare function safeParseBillingSubscriptionReconcileJob(input: unknown): z.ZodSafeParseResult<{
|
|
115
|
+
schemaVersion: 1;
|
|
116
|
+
shopId: string;
|
|
117
|
+
subscriptionId: string;
|
|
118
|
+
expectedNextReconcileAt: string;
|
|
119
|
+
}>;
|
|
100
120
|
declare const WhatsAppProviderPricingMetadataSchema: z.ZodObject<{
|
|
101
121
|
billable: z.ZodOptional<z.ZodBoolean>;
|
|
102
122
|
category: z.ZodOptional<z.ZodString>;
|
|
@@ -136,8 +156,9 @@ declare function safeParseNormalizedWhatsAppStatus(input: unknown): z.ZodSafePar
|
|
|
136
156
|
model?: string | undefined;
|
|
137
157
|
} | undefined;
|
|
138
158
|
}>;
|
|
159
|
+
declare function createBillingSubscriptionReconcileJobId(subscriptionId: string, expectedNextReconcileAt: string): string;
|
|
139
160
|
declare function createMerchantBillingSystemSourceKey(shopId: string, code: BillingSystemMessageCode, eventIdentity: string, version?: number): string;
|
|
140
161
|
declare function createRecoveryIdempotencyKey(shopId: string, recoveryId: string): string;
|
|
141
162
|
declare function createShopifyUsageIdempotencyKey(shopId: string, usageEventId: string): string;
|
|
142
163
|
|
|
143
|
-
export { ARCH007_BILLING_CONTRACT_SCHEMA_VERSION, BILLING_PLAN_KINDS, BILLING_SYSTEM_MESSAGE_CODES, BILLING_USAGE_METRICS, type BillingPlanKind, BillingPlanKindSchema, type BillingSystemMessageCode, BillingSystemMessageCodeSchema, type BillingUsageMetric, BillingUsageMetricSchema, type NormalizedWhatsAppStatus, NormalizedWhatsAppStatusSchema, type PurchasedRecoveryCreditCounterSnapshot, SHOPIFY_SUBSCRIPTION_CANCELLATION_ARGS, SUBSCRIPTION_CANCELLATION_MODES, type ShopifySubscriptionCancellationArgs, type SubscriptionCancellationMode, SubscriptionCancellationModeSchema, WHATSAPP_PROVIDER_STATUSES, WHATSAPP_PROVIDER_STATUS_SCHEMA_VERSION, type WhatsAppProviderPricingMetadata, WhatsAppProviderPricingMetadataSchema, type WhatsAppProviderStatus, WhatsAppProviderStatusSchema, availablePurchasedRecoveryCredits, createMerchantBillingSystemSourceKey, createRecoveryIdempotencyKey, createShopifyUsageIdempotencyKey, parseNormalizedWhatsAppStatus, safeParseNormalizedWhatsAppStatus };
|
|
164
|
+
export { APP_PRICING_BILLING_PERIOD_DRAIN_WINDOW_MS, ARCH007_BILLING_CONTRACT_SCHEMA_VERSION, BILLING_PLAN_KINDS, BILLING_SUBSCRIPTION_RECONCILE_JOB_NAME, BILLING_SUBSCRIPTION_RECONCILE_QUEUE_NAME, BILLING_SUBSCRIPTION_RECONCILE_SCHEMA_VERSION, BILLING_SYSTEM_MESSAGE_CODES, BILLING_USAGE_METRICS, type BillingPlanKind, BillingPlanKindSchema, type BillingSubscriptionReconcileJob, BillingSubscriptionReconcileJobSchema, type BillingSystemMessageCode, BillingSystemMessageCodeSchema, type BillingUsageMetric, BillingUsageMetricSchema, type NormalizedWhatsAppStatus, NormalizedWhatsAppStatusSchema, type PurchasedRecoveryCreditCounterSnapshot, SHOPIFY_SUBSCRIPTION_CANCELLATION_ARGS, SUBSCRIPTION_CANCELLATION_MODES, type ShopifySubscriptionCancellationArgs, type SubscriptionCancellationMode, SubscriptionCancellationModeSchema, WHATSAPP_PROVIDER_STATUSES, WHATSAPP_PROVIDER_STATUS_SCHEMA_VERSION, type WhatsAppProviderPricingMetadata, WhatsAppProviderPricingMetadataSchema, type WhatsAppProviderStatus, WhatsAppProviderStatusSchema, availablePurchasedRecoveryCredits, createBillingSubscriptionReconcileJobId, createMerchantBillingSystemSourceKey, createRecoveryIdempotencyKey, createShopifyUsageIdempotencyKey, parseBillingSubscriptionReconcileJob, parseNormalizedWhatsAppStatus, safeParseBillingSubscriptionReconcileJob, safeParseNormalizedWhatsAppStatus };
|
package/dist/billing.js
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
|
+
APP_PRICING_BILLING_PERIOD_DRAIN_WINDOW_MS,
|
|
2
3
|
ARCH007_BILLING_CONTRACT_SCHEMA_VERSION,
|
|
3
4
|
BILLING_PLAN_KINDS,
|
|
5
|
+
BILLING_SUBSCRIPTION_RECONCILE_JOB_NAME,
|
|
6
|
+
BILLING_SUBSCRIPTION_RECONCILE_QUEUE_NAME,
|
|
7
|
+
BILLING_SUBSCRIPTION_RECONCILE_SCHEMA_VERSION,
|
|
4
8
|
BILLING_SYSTEM_MESSAGE_CODES,
|
|
5
9
|
BILLING_USAGE_METRICS,
|
|
6
10
|
BillingPlanKindSchema,
|
|
11
|
+
BillingSubscriptionReconcileJobSchema,
|
|
7
12
|
BillingSystemMessageCodeSchema,
|
|
8
13
|
BillingUsageMetricSchema,
|
|
9
14
|
NormalizedWhatsAppStatusSchema,
|
|
@@ -15,18 +20,26 @@ import {
|
|
|
15
20
|
WhatsAppProviderPricingMetadataSchema,
|
|
16
21
|
WhatsAppProviderStatusSchema,
|
|
17
22
|
availablePurchasedRecoveryCredits,
|
|
23
|
+
createBillingSubscriptionReconcileJobId,
|
|
18
24
|
createMerchantBillingSystemSourceKey,
|
|
19
25
|
createRecoveryIdempotencyKey,
|
|
20
26
|
createShopifyUsageIdempotencyKey,
|
|
27
|
+
parseBillingSubscriptionReconcileJob,
|
|
21
28
|
parseNormalizedWhatsAppStatus,
|
|
29
|
+
safeParseBillingSubscriptionReconcileJob,
|
|
22
30
|
safeParseNormalizedWhatsAppStatus
|
|
23
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-KO4LMZ66.js";
|
|
24
32
|
export {
|
|
33
|
+
APP_PRICING_BILLING_PERIOD_DRAIN_WINDOW_MS,
|
|
25
34
|
ARCH007_BILLING_CONTRACT_SCHEMA_VERSION,
|
|
26
35
|
BILLING_PLAN_KINDS,
|
|
36
|
+
BILLING_SUBSCRIPTION_RECONCILE_JOB_NAME,
|
|
37
|
+
BILLING_SUBSCRIPTION_RECONCILE_QUEUE_NAME,
|
|
38
|
+
BILLING_SUBSCRIPTION_RECONCILE_SCHEMA_VERSION,
|
|
27
39
|
BILLING_SYSTEM_MESSAGE_CODES,
|
|
28
40
|
BILLING_USAGE_METRICS,
|
|
29
41
|
BillingPlanKindSchema,
|
|
42
|
+
BillingSubscriptionReconcileJobSchema,
|
|
30
43
|
BillingSystemMessageCodeSchema,
|
|
31
44
|
BillingUsageMetricSchema,
|
|
32
45
|
NormalizedWhatsAppStatusSchema,
|
|
@@ -38,10 +51,13 @@ export {
|
|
|
38
51
|
WhatsAppProviderPricingMetadataSchema,
|
|
39
52
|
WhatsAppProviderStatusSchema,
|
|
40
53
|
availablePurchasedRecoveryCredits,
|
|
54
|
+
createBillingSubscriptionReconcileJobId,
|
|
41
55
|
createMerchantBillingSystemSourceKey,
|
|
42
56
|
createRecoveryIdempotencyKey,
|
|
43
57
|
createShopifyUsageIdempotencyKey,
|
|
58
|
+
parseBillingSubscriptionReconcileJob,
|
|
44
59
|
parseNormalizedWhatsAppStatus,
|
|
60
|
+
safeParseBillingSubscriptionReconcileJob,
|
|
45
61
|
safeParseNormalizedWhatsAppStatus
|
|
46
62
|
};
|
|
47
63
|
//# sourceMappingURL=billing.js.map
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
var ARCH007_BILLING_CONTRACT_SCHEMA_VERSION = 1;
|
|
4
4
|
var WHATSAPP_PROVIDER_STATUS_SCHEMA_VERSION = 2;
|
|
5
|
+
var BILLING_SUBSCRIPTION_RECONCILE_SCHEMA_VERSION = 1;
|
|
6
|
+
var BILLING_SUBSCRIPTION_RECONCILE_QUEUE_NAME = "billing-subscription-reconcile";
|
|
7
|
+
var BILLING_SUBSCRIPTION_RECONCILE_JOB_NAME = "reconcile-subscription";
|
|
8
|
+
var APP_PRICING_BILLING_PERIOD_DRAIN_WINDOW_MS = 3e5;
|
|
5
9
|
var BILLING_PLAN_KINDS = ["FREE", "PAID_METERED"];
|
|
6
10
|
var BillingPlanKindSchema = z.enum(BILLING_PLAN_KINDS);
|
|
7
11
|
var BILLING_USAGE_METRICS = [
|
|
@@ -14,6 +18,7 @@ var BillingUsageMetricSchema = z.enum(BILLING_USAGE_METRICS);
|
|
|
14
18
|
var BILLING_SYSTEM_MESSAGE_CODES = {
|
|
15
19
|
FREE_ALLOWANCE_WARNING: "BILLING_FREE_ALLOWANCE_WARNING",
|
|
16
20
|
FREE_ALLOWANCE_EXHAUSTED: "BILLING_FREE_ALLOWANCE_EXHAUSTED",
|
|
21
|
+
RECOVERY_CAPACITY_EXHAUSTED: "BILLING_RECOVERY_CAPACITY_EXHAUSTED",
|
|
17
22
|
PLAN_UPGRADED: "BILLING_PLAN_UPGRADED",
|
|
18
23
|
PLAN_DOWNGRADE_SCHEDULED: "BILLING_PLAN_DOWNGRADE_SCHEDULED",
|
|
19
24
|
SUBSCRIPTION_ENDED: "BILLING_SUBSCRIPTION_ENDED",
|
|
@@ -29,6 +34,7 @@ var BILLING_SYSTEM_MESSAGE_CODES = {
|
|
|
29
34
|
var BILLING_SYSTEM_MESSAGE_CODE_VALUES = [
|
|
30
35
|
BILLING_SYSTEM_MESSAGE_CODES.FREE_ALLOWANCE_WARNING,
|
|
31
36
|
BILLING_SYSTEM_MESSAGE_CODES.FREE_ALLOWANCE_EXHAUSTED,
|
|
37
|
+
BILLING_SYSTEM_MESSAGE_CODES.RECOVERY_CAPACITY_EXHAUSTED,
|
|
32
38
|
BILLING_SYSTEM_MESSAGE_CODES.PLAN_UPGRADED,
|
|
33
39
|
BILLING_SYSTEM_MESSAGE_CODES.PLAN_DOWNGRADE_SCHEDULED,
|
|
34
40
|
BILLING_SYSTEM_MESSAGE_CODES.SUBSCRIPTION_ENDED,
|
|
@@ -91,6 +97,18 @@ var WHATSAPP_PROVIDER_STATUSES = [
|
|
|
91
97
|
var WhatsAppProviderStatusSchema = z.enum(WHATSAPP_PROVIDER_STATUSES);
|
|
92
98
|
var MAX_ID_LENGTH = 128;
|
|
93
99
|
var MAX_SHORT_TEXT_LENGTH = 128;
|
|
100
|
+
var BillingSubscriptionReconcileJobSchema = z.object({
|
|
101
|
+
schemaVersion: z.literal(BILLING_SUBSCRIPTION_RECONCILE_SCHEMA_VERSION),
|
|
102
|
+
shopId: z.string().trim().min(1).max(MAX_ID_LENGTH),
|
|
103
|
+
subscriptionId: z.string().trim().min(1).max(MAX_ID_LENGTH),
|
|
104
|
+
expectedNextReconcileAt: z.iso.datetime({ offset: true })
|
|
105
|
+
}).strict();
|
|
106
|
+
function parseBillingSubscriptionReconcileJob(input) {
|
|
107
|
+
return BillingSubscriptionReconcileJobSchema.parse(input);
|
|
108
|
+
}
|
|
109
|
+
function safeParseBillingSubscriptionReconcileJob(input) {
|
|
110
|
+
return BillingSubscriptionReconcileJobSchema.safeParse(input);
|
|
111
|
+
}
|
|
94
112
|
var WhatsAppProviderPricingMetadataSchema = z.object({
|
|
95
113
|
billable: z.boolean().optional(),
|
|
96
114
|
category: z.string().trim().min(1).max(MAX_SHORT_TEXT_LENGTH).optional(),
|
|
@@ -124,6 +142,14 @@ function fnv1a64(value) {
|
|
|
124
142
|
}
|
|
125
143
|
return hash.toString(16).padStart(16, "0");
|
|
126
144
|
}
|
|
145
|
+
function createBillingSubscriptionReconcileJobId(subscriptionId, expectedNextReconcileAt) {
|
|
146
|
+
assertKeyPart("subscriptionId", subscriptionId);
|
|
147
|
+
if (subscriptionId.trim().length > MAX_ID_LENGTH) {
|
|
148
|
+
throw new Error(`subscriptionId must be at most ${MAX_ID_LENGTH} characters`);
|
|
149
|
+
}
|
|
150
|
+
z.iso.datetime({ offset: true }).parse(expectedNextReconcileAt);
|
|
151
|
+
return `billing-subscription-reconcile-${fnv1a64(`${subscriptionId.trim()}\0${expectedNextReconcileAt}`)}`;
|
|
152
|
+
}
|
|
127
153
|
function boundedKey(prefix, parts, maxLength) {
|
|
128
154
|
const canonical = parts.map((part) => part.trim()).join(":");
|
|
129
155
|
const readable = `${prefix}:${canonical}`;
|
|
@@ -153,6 +179,10 @@ function createShopifyUsageIdempotencyKey(shopId, usageEventId) {
|
|
|
153
179
|
export {
|
|
154
180
|
ARCH007_BILLING_CONTRACT_SCHEMA_VERSION,
|
|
155
181
|
WHATSAPP_PROVIDER_STATUS_SCHEMA_VERSION,
|
|
182
|
+
BILLING_SUBSCRIPTION_RECONCILE_SCHEMA_VERSION,
|
|
183
|
+
BILLING_SUBSCRIPTION_RECONCILE_QUEUE_NAME,
|
|
184
|
+
BILLING_SUBSCRIPTION_RECONCILE_JOB_NAME,
|
|
185
|
+
APP_PRICING_BILLING_PERIOD_DRAIN_WINDOW_MS,
|
|
156
186
|
BILLING_PLAN_KINDS,
|
|
157
187
|
BillingPlanKindSchema,
|
|
158
188
|
BILLING_USAGE_METRICS,
|
|
@@ -165,12 +195,16 @@ export {
|
|
|
165
195
|
availablePurchasedRecoveryCredits,
|
|
166
196
|
WHATSAPP_PROVIDER_STATUSES,
|
|
167
197
|
WhatsAppProviderStatusSchema,
|
|
198
|
+
BillingSubscriptionReconcileJobSchema,
|
|
199
|
+
parseBillingSubscriptionReconcileJob,
|
|
200
|
+
safeParseBillingSubscriptionReconcileJob,
|
|
168
201
|
WhatsAppProviderPricingMetadataSchema,
|
|
169
202
|
NormalizedWhatsAppStatusSchema,
|
|
170
203
|
parseNormalizedWhatsAppStatus,
|
|
171
204
|
safeParseNormalizedWhatsAppStatus,
|
|
205
|
+
createBillingSubscriptionReconcileJobId,
|
|
172
206
|
createMerchantBillingSystemSourceKey,
|
|
173
207
|
createRecoveryIdempotencyKey,
|
|
174
208
|
createShopifyUsageIdempotencyKey
|
|
175
209
|
};
|
|
176
|
-
//# sourceMappingURL=chunk-
|
|
210
|
+
//# sourceMappingURL=chunk-KO4LMZ66.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/billing.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport const ARCH007_BILLING_CONTRACT_SCHEMA_VERSION = 1 as const;\nexport const WHATSAPP_PROVIDER_STATUS_SCHEMA_VERSION = 2 as const;\nexport const BILLING_SUBSCRIPTION_RECONCILE_SCHEMA_VERSION = 1 as const;\nexport const BILLING_SUBSCRIPTION_RECONCILE_QUEUE_NAME = \"billing-subscription-reconcile\";\nexport const BILLING_SUBSCRIPTION_RECONCILE_JOB_NAME = \"reconcile-subscription\";\nexport const APP_PRICING_BILLING_PERIOD_DRAIN_WINDOW_MS = 300000 as const;\n\nexport const BILLING_PLAN_KINDS = [\"FREE\", \"PAID_METERED\"] as const;\nexport const BillingPlanKindSchema = z.enum(BILLING_PLAN_KINDS);\nexport type BillingPlanKind = z.infer<typeof BillingPlanKindSchema>;\n\nexport const BILLING_USAGE_METRICS = [\n \"RECOVERY_CONVERSATION\",\n \"OUTBOUND_AUTOMATED_MESSAGE\",\n \"DELIVERED_WHATSAPP_MESSAGE\",\n \"RECOVERY_CREDIT_PACK_PURCHASE\",\n] as const;\nexport const BillingUsageMetricSchema = z.enum(BILLING_USAGE_METRICS);\nexport type BillingUsageMetric = z.infer<typeof BillingUsageMetricSchema>;\n\nexport const BILLING_SYSTEM_MESSAGE_CODES = {\n FREE_ALLOWANCE_WARNING: \"BILLING_FREE_ALLOWANCE_WARNING\",\n FREE_ALLOWANCE_EXHAUSTED: \"BILLING_FREE_ALLOWANCE_EXHAUSTED\",\n RECOVERY_CAPACITY_EXHAUSTED: \"BILLING_RECOVERY_CAPACITY_EXHAUSTED\",\n PLAN_UPGRADED: \"BILLING_PLAN_UPGRADED\",\n PLAN_DOWNGRADE_SCHEDULED: \"BILLING_PLAN_DOWNGRADE_SCHEDULED\",\n SUBSCRIPTION_ENDED: \"BILLING_SUBSCRIPTION_ENDED\",\n SAFETY_LIMIT_REACHED: \"BILLING_SAFETY_LIMIT_REACHED\",\n PLAN_CHANGE_ACTION_REQUIRED: \"BILLING_PLAN_CHANGE_ACTION_REQUIRED\",\n CANCELLATION_REQUEST_RECEIVED: \"BILLING_CANCELLATION_REQUEST_RECEIVED\",\n CANCELLATION_COMPLETED: \"BILLING_CANCELLATION_COMPLETED\",\n CANCELLATION_REJECTED: \"BILLING_CANCELLATION_REJECTED\",\n REFUND_REQUEST_RECEIVED: \"BILLING_REFUND_REQUEST_RECEIVED\",\n REFUND_COMPLETED: \"BILLING_REFUND_COMPLETED\",\n REFUND_REJECTED: \"BILLING_REFUND_REJECTED\",\n} as const;\n\nconst BILLING_SYSTEM_MESSAGE_CODE_VALUES = [\n BILLING_SYSTEM_MESSAGE_CODES.FREE_ALLOWANCE_WARNING,\n BILLING_SYSTEM_MESSAGE_CODES.FREE_ALLOWANCE_EXHAUSTED,\n BILLING_SYSTEM_MESSAGE_CODES.RECOVERY_CAPACITY_EXHAUSTED,\n BILLING_SYSTEM_MESSAGE_CODES.PLAN_UPGRADED,\n BILLING_SYSTEM_MESSAGE_CODES.PLAN_DOWNGRADE_SCHEDULED,\n BILLING_SYSTEM_MESSAGE_CODES.SUBSCRIPTION_ENDED,\n BILLING_SYSTEM_MESSAGE_CODES.SAFETY_LIMIT_REACHED,\n BILLING_SYSTEM_MESSAGE_CODES.PLAN_CHANGE_ACTION_REQUIRED,\n BILLING_SYSTEM_MESSAGE_CODES.CANCELLATION_REQUEST_RECEIVED,\n BILLING_SYSTEM_MESSAGE_CODES.CANCELLATION_COMPLETED,\n BILLING_SYSTEM_MESSAGE_CODES.CANCELLATION_REJECTED,\n BILLING_SYSTEM_MESSAGE_CODES.REFUND_REQUEST_RECEIVED,\n BILLING_SYSTEM_MESSAGE_CODES.REFUND_COMPLETED,\n BILLING_SYSTEM_MESSAGE_CODES.REFUND_REJECTED,\n] as const;\n\nexport const BillingSystemMessageCodeSchema = z.enum(BILLING_SYSTEM_MESSAGE_CODE_VALUES);\nexport type BillingSystemMessageCode = z.infer<typeof BillingSystemMessageCodeSchema>;\n\nexport const SUBSCRIPTION_CANCELLATION_MODES = [\n \"END_OF_CYCLE\",\n \"IMMEDIATE_NO_PRORATION\",\n \"IMMEDIATE_PRORATED\",\n \"IMMEDIATE_SKIP_FINAL_USAGE\",\n] as const;\n\nexport const SubscriptionCancellationModeSchema = z.enum(SUBSCRIPTION_CANCELLATION_MODES);\nexport type SubscriptionCancellationMode = z.infer<typeof SubscriptionCancellationModeSchema>;\n\nexport type ShopifySubscriptionCancellationArgs = Readonly<{\n deferCancellation: boolean;\n prorate: boolean;\n skipFinalUsageCharge: boolean;\n}>;\n\nexport const SHOPIFY_SUBSCRIPTION_CANCELLATION_ARGS = {\n END_OF_CYCLE: {\n deferCancellation: true,\n prorate: false,\n skipFinalUsageCharge: false,\n },\n IMMEDIATE_NO_PRORATION: {\n deferCancellation: false,\n prorate: false,\n skipFinalUsageCharge: false,\n },\n IMMEDIATE_PRORATED: {\n deferCancellation: false,\n prorate: true,\n skipFinalUsageCharge: false,\n },\n IMMEDIATE_SKIP_FINAL_USAGE: {\n deferCancellation: false,\n prorate: false,\n skipFinalUsageCharge: true,\n },\n} as const satisfies Readonly<\n Record<SubscriptionCancellationMode, ShopifySubscriptionCancellationArgs>\n>;\n\nexport type PurchasedRecoveryCreditCounterSnapshot = Readonly<{\n grantedQuantity: number;\n committedQuantity: number;\n reservedQuantity: number;\n refundingQuantity: number;\n}>;\n\nexport function availablePurchasedRecoveryCredits(\n counter: PurchasedRecoveryCreditCounterSnapshot,\n): number {\n for (const [name, value] of Object.entries(counter)) {\n if (!Number.isInteger(value) || value < 0) {\n throw new Error(`${name} must be a non-negative integer`);\n }\n }\n\n return Math.max(\n counter.grantedQuantity\n - counter.committedQuantity\n - counter.reservedQuantity\n - counter.refundingQuantity,\n 0,\n );\n}\n\nexport const WHATSAPP_PROVIDER_STATUSES = [\n \"SENT\",\n \"DELIVERED\",\n \"READ\",\n \"FAILED\",\n] as const;\nexport const WhatsAppProviderStatusSchema = z.enum(WHATSAPP_PROVIDER_STATUSES);\nexport type WhatsAppProviderStatus = z.infer<typeof WhatsAppProviderStatusSchema>;\n\nconst MAX_ID_LENGTH = 128;\nconst MAX_SHORT_TEXT_LENGTH = 128;\n\nexport const BillingSubscriptionReconcileJobSchema = z\n .object({\n schemaVersion: z.literal(BILLING_SUBSCRIPTION_RECONCILE_SCHEMA_VERSION),\n shopId: z.string().trim().min(1).max(MAX_ID_LENGTH),\n subscriptionId: z.string().trim().min(1).max(MAX_ID_LENGTH),\n expectedNextReconcileAt: z.iso.datetime({ offset: true }),\n })\n .strict();\n\nexport type BillingSubscriptionReconcileJob = z.infer<\n typeof BillingSubscriptionReconcileJobSchema\n>;\n\nexport function parseBillingSubscriptionReconcileJob(\n input: unknown,\n): BillingSubscriptionReconcileJob {\n return BillingSubscriptionReconcileJobSchema.parse(input);\n}\n\nexport function safeParseBillingSubscriptionReconcileJob(input: unknown) {\n return BillingSubscriptionReconcileJobSchema.safeParse(input);\n}\n\nexport const WhatsAppProviderPricingMetadataSchema = z\n .object({\n billable: z.boolean().optional(),\n category: z.string().trim().min(1).max(MAX_SHORT_TEXT_LENGTH).optional(),\n model: z.string().trim().min(1).max(MAX_SHORT_TEXT_LENGTH).optional(),\n })\n .strict()\n .refine((value) => Object.keys(value).length > 0, \"pricing metadata must not be empty\");\n\nexport type WhatsAppProviderPricingMetadata = z.infer<\n typeof WhatsAppProviderPricingMetadataSchema\n>;\n\nexport const NormalizedWhatsAppStatusSchema = z\n .object({\n schemaVersion: z.literal(WHATSAPP_PROVIDER_STATUS_SCHEMA_VERSION),\n providerAccountId: z.string().trim().min(1).max(MAX_ID_LENGTH),\n providerPhoneNumberId: z.string().trim().min(1).max(MAX_ID_LENGTH),\n providerMessageId: z.string().trim().min(1).max(MAX_ID_LENGTH),\n status: WhatsAppProviderStatusSchema,\n occurredAt: z.iso.datetime({ offset: true }),\n pricing: WhatsAppProviderPricingMetadataSchema.optional(),\n })\n .strict();\n\nexport type NormalizedWhatsAppStatus = z.infer<typeof NormalizedWhatsAppStatusSchema>;\n\nexport function parseNormalizedWhatsAppStatus(input: unknown): NormalizedWhatsAppStatus {\n return NormalizedWhatsAppStatusSchema.parse(input);\n}\n\nexport function safeParseNormalizedWhatsAppStatus(input: unknown) {\n return NormalizedWhatsAppStatusSchema.safeParse(input);\n}\n\nfunction assertKeyPart(name: string, value: string): void {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new Error(`${name} must be a non-empty string`);\n }\n}\n\nfunction fnv1a64(value: string): string {\n let hash = 0xcbf29ce484222325n;\n for (const character of value) {\n hash ^= BigInt(character.codePointAt(0) ?? 0);\n hash = BigInt.asUintN(64, hash * 0x100000001b3n);\n }\n return hash.toString(16).padStart(16, \"0\");\n}\n\nexport function createBillingSubscriptionReconcileJobId(\n subscriptionId: string,\n expectedNextReconcileAt: string,\n): string {\n assertKeyPart(\"subscriptionId\", subscriptionId);\n if (subscriptionId.trim().length > MAX_ID_LENGTH) {\n throw new Error(`subscriptionId must be at most ${MAX_ID_LENGTH} characters`);\n }\n z.iso.datetime({ offset: true }).parse(expectedNextReconcileAt);\n return `billing-subscription-reconcile-${fnv1a64(`${subscriptionId.trim()}\\u0000${expectedNextReconcileAt}`)}`;\n}\n\nfunction boundedKey(prefix: string, parts: string[], maxLength: number): string {\n const canonical = parts.map((part) => part.trim()).join(\":\");\n const readable = `${prefix}:${canonical}`;\n if (readable.length <= maxLength) return readable;\n return `${prefix}:h${fnv1a64(canonical)}`;\n}\n\nexport function createMerchantBillingSystemSourceKey(\n shopId: string,\n code: BillingSystemMessageCode,\n eventIdentity: string,\n version = 1,\n): string {\n assertKeyPart(\"shopId\", shopId);\n assertKeyPart(\"code\", code);\n assertKeyPart(\"eventIdentity\", eventIdentity);\n if (!Number.isInteger(version) || version < 1) {\n throw new Error(\"version must be a positive integer\");\n }\n return boundedKey(\"billing-system\", [shopId, code, eventIdentity, String(version)], 255);\n}\n\nexport function createRecoveryIdempotencyKey(shopId: string, recoveryId: string): string {\n assertKeyPart(\"shopId\", shopId);\n assertKeyPart(\"recoveryId\", recoveryId);\n return boundedKey(\"recovery\", [shopId, recoveryId], 255);\n}\n\nexport function createShopifyUsageIdempotencyKey(\n shopId: string,\n usageEventId: string,\n): string {\n assertKeyPart(\"shopId\", shopId);\n assertKeyPart(\"usageEventId\", usageEventId);\n return boundedKey(\"shopify\", [shopId, usageEventId], 64);\n}"],"mappings":"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","names":[]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { CatalogueValidationOptions, CountryCode, CountryCodeSchema, CurrencyCode, CurrencyCodeSchema, IcuMessageCatalogue, IcuMessageValues, InternationalContext, InternationalContextSchema, InternationalizationRuntime, InternationalizationRuntimeOptions, LanguageSource, LanguageSourceSchema, LanguageTag, LanguageTagSchema, TimeZoneId, TimeZoneIdSchema, canonicaliseLanguageTag, createInternationalizationRuntime, mergeInternationalContext, normalizeCountryCode, normalizeCurrencyCode, normalizeTimeZone, resolveLocaleDirection, validateIcuCatalogue } from './internationalization.js';
|
|
2
|
-
export { ARCH007_BILLING_CONTRACT_SCHEMA_VERSION, BILLING_PLAN_KINDS, BILLING_SYSTEM_MESSAGE_CODES, BILLING_USAGE_METRICS, BillingPlanKind, BillingPlanKindSchema, BillingSystemMessageCode, BillingSystemMessageCodeSchema, BillingUsageMetric, BillingUsageMetricSchema, NormalizedWhatsAppStatus, NormalizedWhatsAppStatusSchema, PurchasedRecoveryCreditCounterSnapshot, SHOPIFY_SUBSCRIPTION_CANCELLATION_ARGS, SUBSCRIPTION_CANCELLATION_MODES, ShopifySubscriptionCancellationArgs, SubscriptionCancellationMode, SubscriptionCancellationModeSchema, WHATSAPP_PROVIDER_STATUSES, WHATSAPP_PROVIDER_STATUS_SCHEMA_VERSION, WhatsAppProviderPricingMetadata, WhatsAppProviderPricingMetadataSchema, WhatsAppProviderStatus, WhatsAppProviderStatusSchema, availablePurchasedRecoveryCredits, createMerchantBillingSystemSourceKey, createRecoveryIdempotencyKey, createShopifyUsageIdempotencyKey, parseNormalizedWhatsAppStatus, safeParseNormalizedWhatsAppStatus } from './billing.js';
|
|
2
|
+
export { APP_PRICING_BILLING_PERIOD_DRAIN_WINDOW_MS, ARCH007_BILLING_CONTRACT_SCHEMA_VERSION, BILLING_PLAN_KINDS, BILLING_SUBSCRIPTION_RECONCILE_JOB_NAME, BILLING_SUBSCRIPTION_RECONCILE_QUEUE_NAME, BILLING_SUBSCRIPTION_RECONCILE_SCHEMA_VERSION, BILLING_SYSTEM_MESSAGE_CODES, BILLING_USAGE_METRICS, BillingPlanKind, BillingPlanKindSchema, BillingSubscriptionReconcileJob, BillingSubscriptionReconcileJobSchema, BillingSystemMessageCode, BillingSystemMessageCodeSchema, BillingUsageMetric, BillingUsageMetricSchema, NormalizedWhatsAppStatus, NormalizedWhatsAppStatusSchema, PurchasedRecoveryCreditCounterSnapshot, SHOPIFY_SUBSCRIPTION_CANCELLATION_ARGS, SUBSCRIPTION_CANCELLATION_MODES, ShopifySubscriptionCancellationArgs, SubscriptionCancellationMode, SubscriptionCancellationModeSchema, WHATSAPP_PROVIDER_STATUSES, WHATSAPP_PROVIDER_STATUS_SCHEMA_VERSION, WhatsAppProviderPricingMetadata, WhatsAppProviderPricingMetadataSchema, WhatsAppProviderStatus, WhatsAppProviderStatusSchema, availablePurchasedRecoveryCredits, createBillingSubscriptionReconcileJobId, createMerchantBillingSystemSourceKey, createRecoveryIdempotencyKey, createShopifyUsageIdempotencyKey, parseBillingSubscriptionReconcileJob, parseNormalizedWhatsAppStatus, safeParseBillingSubscriptionReconcileJob, safeParseNormalizedWhatsAppStatus } from './billing.js';
|
|
3
3
|
export { AuthoredSupportBodySchema, MERCHANT_COMMUNICATIONS_JOB_NAMES, MERCHANT_COMMUNICATIONS_QUEUE_NAME, MERCHANT_COMMUNICATIONS_SCHEMA_VERSION, MerchantMessageTranslationContract, MerchantMessageTranslationContractSchema, MerchantMessageTranslationStatus, MerchantMessageTranslationStatusSchema, MerchantSupportMessageContract, MerchantSupportMessageContractSchema, MerchantSupportMessageKind, MerchantSupportMessageKindSchema, MerchantSupportMessageState, MerchantSupportMessageStateSchema, MerchantTranslationBatchContract, MerchantTranslationBatchContractSchema, MerchantTranslationBatchStatus, MerchantTranslationBatchStatusSchema, MerchantTranslationDirection, MerchantTranslationDirectionSchema, MerchantTranslationReconciliationRequestContract, MerchantTranslationReconciliationRequestContractSchema, MerchantTranslationReconciliationScope, MerchantTranslationReconciliationScopeSchema, MerchantTranslationReconciliationStatus, MerchantTranslationReconciliationStatusSchema, PLATFORM_SUPPORT_LANGUAGE_TAG, TranslatedSupportBodySchema, TranslationBatchPollJob, TranslationBatchPollJobSchema, TranslationBatchResultsJob, TranslationBatchResultsJobSchema, TranslationBatchSubmitJob, TranslationBatchSubmitJobSchema, TranslationDispatchJob, TranslationDispatchJobSchema, TranslationReconcileJob, TranslationReconcileJobSchema, countUnicodeGraphemes, requiresMerchantTranslation } from './merchant-communications.js';
|
|
4
4
|
export { CheckoutCreatedPayloadV2, CheckoutCreatedPayloadV2Schema, CheckoutObservedPayload, CheckoutObservedPayloadSchema, CheckoutUpdatedPayloadV2, CheckoutUpdatedPayloadV2Schema, MAX_LINE_ITEMS, MAX_URL_LENGTH, OrderCompletedPayload, OrderCompletedPayloadSchema, OrderCompletedPayloadV2, OrderCompletedPayloadV2Schema, SHOPIFY_COMMERCE_EVENT_SCHEMA_VERSION, SHOPIFY_COMMERCE_EVENT_SCHEMA_VERSION_V1, SHOPIFY_COMMERCE_EVENT_SCHEMA_VERSION_V2, SHOPIFY_COMMERCE_EVENT_TYPES, SHOPIFY_RECOVERY_EVENT_TYPES_V2, SHOPIFY_WEBHOOK_OUTBOX_DESTINATIONS, SHOPIFY_WEBHOOK_QUEUE_CONTRACTS, ShopifyCartActivityEventV2, ShopifyCartActivityEventV2Schema, ShopifyCartActivityPayloadV2, ShopifyCartActivityPayloadV2Schema, ShopifyCheckoutCreatedEventV2, ShopifyCheckoutCreatedEventV2Schema, ShopifyCheckoutLineItem, ShopifyCheckoutLineItemSchema, ShopifyCheckoutLineItemsSchema, ShopifyCheckoutObservedEvent, ShopifyCheckoutObservedEventSchema, ShopifyCheckoutUpdatedEventV2, ShopifyCheckoutUpdatedEventV2Schema, ShopifyCommerceEvent, ShopifyCommerceEventSchema, ShopifyCommerceEventType, ShopifyCustomerReference, ShopifyCustomerReferenceSchema, ShopifyMoney, ShopifyMoneySchema, ShopifyOrderCompletedEvent, ShopifyOrderCompletedEventSchema, ShopifyOrderCompletedEventV2, ShopifyOrderCompletedEventV2Schema, ShopifyRecoveryEventTypeV2, ShopifyRecoveryEventV2, ShopifyRecoveryEventV2Schema, ShopifyTenant, ShopifyTenantSchema, createShopifyCartActivityOrderingKey, createShopifyCommerceOrderingKey, createShopifyOrderCorrelationOrderingKey, createShopifyOrderOrderingKey, createShopifyPendingRecoveryOrderingKey, isCartActivityEventV2, isCheckoutCreatedEventV2, isCheckoutObservedEvent, isCheckoutUpdatedEventV2, isOrderCompletedEvent, isOrderCompletedEventV2, parseShopifyCommerceEvent, parseShopifyRecoveryEventV2, safeParseShopifyCommerceEvent, safeParseShopifyRecoveryEventV2 } from './shopify/index.js';
|
|
5
5
|
import 'zod';
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
|
+
APP_PRICING_BILLING_PERIOD_DRAIN_WINDOW_MS,
|
|
2
3
|
ARCH007_BILLING_CONTRACT_SCHEMA_VERSION,
|
|
3
4
|
BILLING_PLAN_KINDS,
|
|
5
|
+
BILLING_SUBSCRIPTION_RECONCILE_JOB_NAME,
|
|
6
|
+
BILLING_SUBSCRIPTION_RECONCILE_QUEUE_NAME,
|
|
7
|
+
BILLING_SUBSCRIPTION_RECONCILE_SCHEMA_VERSION,
|
|
4
8
|
BILLING_SYSTEM_MESSAGE_CODES,
|
|
5
9
|
BILLING_USAGE_METRICS,
|
|
6
10
|
BillingPlanKindSchema,
|
|
11
|
+
BillingSubscriptionReconcileJobSchema,
|
|
7
12
|
BillingSystemMessageCodeSchema,
|
|
8
13
|
BillingUsageMetricSchema,
|
|
9
14
|
NormalizedWhatsAppStatusSchema,
|
|
@@ -15,12 +20,15 @@ import {
|
|
|
15
20
|
WhatsAppProviderPricingMetadataSchema,
|
|
16
21
|
WhatsAppProviderStatusSchema,
|
|
17
22
|
availablePurchasedRecoveryCredits,
|
|
23
|
+
createBillingSubscriptionReconcileJobId,
|
|
18
24
|
createMerchantBillingSystemSourceKey,
|
|
19
25
|
createRecoveryIdempotencyKey,
|
|
20
26
|
createShopifyUsageIdempotencyKey,
|
|
27
|
+
parseBillingSubscriptionReconcileJob,
|
|
21
28
|
parseNormalizedWhatsAppStatus,
|
|
29
|
+
safeParseBillingSubscriptionReconcileJob,
|
|
22
30
|
safeParseNormalizedWhatsAppStatus
|
|
23
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-KO4LMZ66.js";
|
|
24
32
|
import {
|
|
25
33
|
AuthoredSupportBodySchema,
|
|
26
34
|
MERCHANT_COMMUNICATIONS_JOB_NAMES,
|
|
@@ -109,12 +117,17 @@ import {
|
|
|
109
117
|
validateIcuCatalogue
|
|
110
118
|
} from "./chunk-B6Y3QQLI.js";
|
|
111
119
|
export {
|
|
120
|
+
APP_PRICING_BILLING_PERIOD_DRAIN_WINDOW_MS,
|
|
112
121
|
ARCH007_BILLING_CONTRACT_SCHEMA_VERSION,
|
|
113
122
|
AuthoredSupportBodySchema,
|
|
114
123
|
BILLING_PLAN_KINDS,
|
|
124
|
+
BILLING_SUBSCRIPTION_RECONCILE_JOB_NAME,
|
|
125
|
+
BILLING_SUBSCRIPTION_RECONCILE_QUEUE_NAME,
|
|
126
|
+
BILLING_SUBSCRIPTION_RECONCILE_SCHEMA_VERSION,
|
|
115
127
|
BILLING_SYSTEM_MESSAGE_CODES,
|
|
116
128
|
BILLING_USAGE_METRICS,
|
|
117
129
|
BillingPlanKindSchema,
|
|
130
|
+
BillingSubscriptionReconcileJobSchema,
|
|
118
131
|
BillingSystemMessageCodeSchema,
|
|
119
132
|
BillingUsageMetricSchema,
|
|
120
133
|
CheckoutCreatedPayloadV2Schema,
|
|
@@ -183,6 +196,7 @@ export {
|
|
|
183
196
|
availablePurchasedRecoveryCredits,
|
|
184
197
|
canonicaliseLanguageTag,
|
|
185
198
|
countUnicodeGraphemes,
|
|
199
|
+
createBillingSubscriptionReconcileJobId,
|
|
186
200
|
createInternationalizationRuntime,
|
|
187
201
|
createMerchantBillingSystemSourceKey,
|
|
188
202
|
createRecoveryIdempotencyKey,
|
|
@@ -202,11 +216,13 @@ export {
|
|
|
202
216
|
normalizeCountryCode,
|
|
203
217
|
normalizeCurrencyCode,
|
|
204
218
|
normalizeTimeZone,
|
|
219
|
+
parseBillingSubscriptionReconcileJob,
|
|
205
220
|
parseNormalizedWhatsAppStatus,
|
|
206
221
|
parseShopifyCommerceEvent,
|
|
207
222
|
parseShopifyRecoveryEventV2,
|
|
208
223
|
requiresMerchantTranslation,
|
|
209
224
|
resolveLocaleDirection,
|
|
225
|
+
safeParseBillingSubscriptionReconcileJob,
|
|
210
226
|
safeParseNormalizedWhatsAppStatus,
|
|
211
227
|
safeParseShopifyCommerceEvent,
|
|
212
228
|
safeParseShopifyRecoveryEventV2,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@modainteract/moda-interact-shared",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -72,6 +72,7 @@
|
|
|
72
72
|
"build": "tsup",
|
|
73
73
|
"typecheck": "tsc --noEmit",
|
|
74
74
|
"test": "tsx --test \"src/**/*.test.ts\"",
|
|
75
|
+
"validate:billing-entrypoint": "npm run build && node scripts/validate-billing-entrypoint.mjs",
|
|
75
76
|
"validate:internationalization-entrypoint": "npm run build && node scripts/validate-internationalization-entrypoint.mjs",
|
|
76
77
|
"validate:merchant-communications-node": "npm run build && node scripts/validate-merchant-communications-node.mjs",
|
|
77
78
|
"validate:testing-node": "npm run build && node scripts/validate-testing-node.mjs",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/billing.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport const ARCH007_BILLING_CONTRACT_SCHEMA_VERSION = 1 as const;\nexport const WHATSAPP_PROVIDER_STATUS_SCHEMA_VERSION = 2 as const;\n\nexport const BILLING_PLAN_KINDS = [\"FREE\", \"PAID_METERED\"] as const;\nexport const BillingPlanKindSchema = z.enum(BILLING_PLAN_KINDS);\nexport type BillingPlanKind = z.infer<typeof BillingPlanKindSchema>;\n\nexport const BILLING_USAGE_METRICS = [\n \"RECOVERY_CONVERSATION\",\n \"OUTBOUND_AUTOMATED_MESSAGE\",\n \"DELIVERED_WHATSAPP_MESSAGE\",\n \"RECOVERY_CREDIT_PACK_PURCHASE\",\n] as const;\nexport const BillingUsageMetricSchema = z.enum(BILLING_USAGE_METRICS);\nexport type BillingUsageMetric = z.infer<typeof BillingUsageMetricSchema>;\n\nexport const BILLING_SYSTEM_MESSAGE_CODES = {\n FREE_ALLOWANCE_WARNING: \"BILLING_FREE_ALLOWANCE_WARNING\",\n FREE_ALLOWANCE_EXHAUSTED: \"BILLING_FREE_ALLOWANCE_EXHAUSTED\",\n PLAN_UPGRADED: \"BILLING_PLAN_UPGRADED\",\n PLAN_DOWNGRADE_SCHEDULED: \"BILLING_PLAN_DOWNGRADE_SCHEDULED\",\n SUBSCRIPTION_ENDED: \"BILLING_SUBSCRIPTION_ENDED\",\n SAFETY_LIMIT_REACHED: \"BILLING_SAFETY_LIMIT_REACHED\",\n PLAN_CHANGE_ACTION_REQUIRED: \"BILLING_PLAN_CHANGE_ACTION_REQUIRED\",\n CANCELLATION_REQUEST_RECEIVED: \"BILLING_CANCELLATION_REQUEST_RECEIVED\",\n CANCELLATION_COMPLETED: \"BILLING_CANCELLATION_COMPLETED\",\n CANCELLATION_REJECTED: \"BILLING_CANCELLATION_REJECTED\",\n REFUND_REQUEST_RECEIVED: \"BILLING_REFUND_REQUEST_RECEIVED\",\n REFUND_COMPLETED: \"BILLING_REFUND_COMPLETED\",\n REFUND_REJECTED: \"BILLING_REFUND_REJECTED\",\n} as const;\n\nconst BILLING_SYSTEM_MESSAGE_CODE_VALUES = [\n BILLING_SYSTEM_MESSAGE_CODES.FREE_ALLOWANCE_WARNING,\n BILLING_SYSTEM_MESSAGE_CODES.FREE_ALLOWANCE_EXHAUSTED,\n BILLING_SYSTEM_MESSAGE_CODES.PLAN_UPGRADED,\n BILLING_SYSTEM_MESSAGE_CODES.PLAN_DOWNGRADE_SCHEDULED,\n BILLING_SYSTEM_MESSAGE_CODES.SUBSCRIPTION_ENDED,\n BILLING_SYSTEM_MESSAGE_CODES.SAFETY_LIMIT_REACHED,\n BILLING_SYSTEM_MESSAGE_CODES.PLAN_CHANGE_ACTION_REQUIRED,\n BILLING_SYSTEM_MESSAGE_CODES.CANCELLATION_REQUEST_RECEIVED,\n BILLING_SYSTEM_MESSAGE_CODES.CANCELLATION_COMPLETED,\n BILLING_SYSTEM_MESSAGE_CODES.CANCELLATION_REJECTED,\n BILLING_SYSTEM_MESSAGE_CODES.REFUND_REQUEST_RECEIVED,\n BILLING_SYSTEM_MESSAGE_CODES.REFUND_COMPLETED,\n BILLING_SYSTEM_MESSAGE_CODES.REFUND_REJECTED,\n] as const;\n\nexport const BillingSystemMessageCodeSchema = z.enum(BILLING_SYSTEM_MESSAGE_CODE_VALUES);\nexport type BillingSystemMessageCode = z.infer<typeof BillingSystemMessageCodeSchema>;\n\nexport const SUBSCRIPTION_CANCELLATION_MODES = [\n \"END_OF_CYCLE\",\n \"IMMEDIATE_NO_PRORATION\",\n \"IMMEDIATE_PRORATED\",\n \"IMMEDIATE_SKIP_FINAL_USAGE\",\n] as const;\n\nexport const SubscriptionCancellationModeSchema = z.enum(SUBSCRIPTION_CANCELLATION_MODES);\nexport type SubscriptionCancellationMode = z.infer<typeof SubscriptionCancellationModeSchema>;\n\nexport type ShopifySubscriptionCancellationArgs = Readonly<{\n deferCancellation: boolean;\n prorate: boolean;\n skipFinalUsageCharge: boolean;\n}>;\n\nexport const SHOPIFY_SUBSCRIPTION_CANCELLATION_ARGS = {\n END_OF_CYCLE: {\n deferCancellation: true,\n prorate: false,\n skipFinalUsageCharge: false,\n },\n IMMEDIATE_NO_PRORATION: {\n deferCancellation: false,\n prorate: false,\n skipFinalUsageCharge: false,\n },\n IMMEDIATE_PRORATED: {\n deferCancellation: false,\n prorate: true,\n skipFinalUsageCharge: false,\n },\n IMMEDIATE_SKIP_FINAL_USAGE: {\n deferCancellation: false,\n prorate: false,\n skipFinalUsageCharge: true,\n },\n} as const satisfies Readonly<\n Record<SubscriptionCancellationMode, ShopifySubscriptionCancellationArgs>\n>;\n\nexport type PurchasedRecoveryCreditCounterSnapshot = Readonly<{\n grantedQuantity: number;\n committedQuantity: number;\n reservedQuantity: number;\n refundingQuantity: number;\n}>;\n\nexport function availablePurchasedRecoveryCredits(\n counter: PurchasedRecoveryCreditCounterSnapshot,\n): number {\n for (const [name, value] of Object.entries(counter)) {\n if (!Number.isInteger(value) || value < 0) {\n throw new Error(`${name} must be a non-negative integer`);\n }\n }\n\n return Math.max(\n counter.grantedQuantity\n - counter.committedQuantity\n - counter.reservedQuantity\n - counter.refundingQuantity,\n 0,\n );\n}\n\nexport const WHATSAPP_PROVIDER_STATUSES = [\n \"SENT\",\n \"DELIVERED\",\n \"READ\",\n \"FAILED\",\n] as const;\nexport const WhatsAppProviderStatusSchema = z.enum(WHATSAPP_PROVIDER_STATUSES);\nexport type WhatsAppProviderStatus = z.infer<typeof WhatsAppProviderStatusSchema>;\n\nconst MAX_ID_LENGTH = 128;\nconst MAX_SHORT_TEXT_LENGTH = 128;\n\nexport const WhatsAppProviderPricingMetadataSchema = z\n .object({\n billable: z.boolean().optional(),\n category: z.string().trim().min(1).max(MAX_SHORT_TEXT_LENGTH).optional(),\n model: z.string().trim().min(1).max(MAX_SHORT_TEXT_LENGTH).optional(),\n })\n .strict()\n .refine((value) => Object.keys(value).length > 0, \"pricing metadata must not be empty\");\n\nexport type WhatsAppProviderPricingMetadata = z.infer<\n typeof WhatsAppProviderPricingMetadataSchema\n>;\n\nexport const NormalizedWhatsAppStatusSchema = z\n .object({\n schemaVersion: z.literal(WHATSAPP_PROVIDER_STATUS_SCHEMA_VERSION),\n providerAccountId: z.string().trim().min(1).max(MAX_ID_LENGTH),\n providerPhoneNumberId: z.string().trim().min(1).max(MAX_ID_LENGTH),\n providerMessageId: z.string().trim().min(1).max(MAX_ID_LENGTH),\n status: WhatsAppProviderStatusSchema,\n occurredAt: z.iso.datetime({ offset: true }),\n pricing: WhatsAppProviderPricingMetadataSchema.optional(),\n })\n .strict();\n\nexport type NormalizedWhatsAppStatus = z.infer<typeof NormalizedWhatsAppStatusSchema>;\n\nexport function parseNormalizedWhatsAppStatus(input: unknown): NormalizedWhatsAppStatus {\n return NormalizedWhatsAppStatusSchema.parse(input);\n}\n\nexport function safeParseNormalizedWhatsAppStatus(input: unknown) {\n return NormalizedWhatsAppStatusSchema.safeParse(input);\n}\n\nfunction assertKeyPart(name: string, value: string): void {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new Error(`${name} must be a non-empty string`);\n }\n}\n\nfunction fnv1a64(value: string): string {\n let hash = 0xcbf29ce484222325n;\n for (const character of value) {\n hash ^= BigInt(character.codePointAt(0) ?? 0);\n hash = BigInt.asUintN(64, hash * 0x100000001b3n);\n }\n return hash.toString(16).padStart(16, \"0\");\n}\n\nfunction boundedKey(prefix: string, parts: string[], maxLength: number): string {\n const canonical = parts.map((part) => part.trim()).join(\":\");\n const readable = `${prefix}:${canonical}`;\n if (readable.length <= maxLength) return readable;\n return `${prefix}:h${fnv1a64(canonical)}`;\n}\n\nexport function createMerchantBillingSystemSourceKey(\n shopId: string,\n code: BillingSystemMessageCode,\n eventIdentity: string,\n version = 1,\n): string {\n assertKeyPart(\"shopId\", shopId);\n assertKeyPart(\"code\", code);\n assertKeyPart(\"eventIdentity\", eventIdentity);\n if (!Number.isInteger(version) || version < 1) {\n throw new Error(\"version must be a positive integer\");\n }\n return boundedKey(\"billing-system\", [shopId, code, eventIdentity, String(version)], 255);\n}\n\nexport function createRecoveryIdempotencyKey(shopId: string, recoveryId: string): string {\n assertKeyPart(\"shopId\", shopId);\n assertKeyPart(\"recoveryId\", recoveryId);\n return boundedKey(\"recovery\", [shopId, recoveryId], 255);\n}\n\nexport function createShopifyUsageIdempotencyKey(\n shopId: string,\n usageEventId: string,\n): string {\n assertKeyPart(\"shopId\", shopId);\n assertKeyPart(\"usageEventId\", usageEventId);\n return boundedKey(\"shopify\", [shopId, usageEventId], 64);\n}"],"mappings":"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","names":[]}
|