@progus/connector 0.6.3 → 0.6.5

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/index.cjs CHANGED
@@ -368,6 +368,42 @@ var ACTIVE_SUBSCRIPTIONS_QUERY = `
368
368
  amount
369
369
  }
370
370
  }
371
+ ... on AppUsagePricing {
372
+ cappedAmount {
373
+ amount
374
+ }
375
+ terms
376
+ }
377
+ }
378
+ }
379
+ }
380
+ }
381
+ }
382
+ }
383
+ `;
384
+ var SUBSCRIPTION_DETAILS_QUERY = `
385
+ query AppSubscriptionDetails($id: ID!) {
386
+ node(id: $id) {
387
+ ... on AppSubscription {
388
+ id
389
+ name
390
+ status
391
+ lineItems {
392
+ plan {
393
+ pricingDetails {
394
+ __typename
395
+ ... on AppRecurringPricing {
396
+ interval
397
+ price {
398
+ amount
399
+ }
400
+ }
401
+ ... on AppUsagePricing {
402
+ cappedAmount {
403
+ amount
404
+ }
405
+ terms
406
+ }
371
407
  }
372
408
  }
373
409
  }
@@ -396,6 +432,13 @@ function parsePrice(rawPrice) {
396
432
  }
397
433
  return null;
398
434
  }
435
+ function extractPricing(subscription) {
436
+ const pricingDetails = subscription?.lineItems?.[0]?.plan?.pricingDetails;
437
+ const rawPrice = pricingDetails?.price?.amount ?? pricingDetails?.cappedAmount?.amount;
438
+ const subscriptionPrice = parsePrice(rawPrice);
439
+ const subscriptionPeriod = normalizeInterval(pricingDetails?.interval, subscription?.name);
440
+ return { subscriptionPrice, subscriptionPeriod };
441
+ }
399
442
  async function fetchActiveSubscriptionEventData(admin, logger = console) {
400
443
  const response = await admin.graphql(ACTIVE_SUBSCRIPTIONS_QUERY);
401
444
  const result = await response.json();
@@ -406,9 +449,33 @@ async function fetchActiveSubscriptionEventData(admin, logger = console) {
406
449
  const active = subscriptions.find((sub) => String(sub.status ?? "").toUpperCase() === "ACTIVE") ?? subscriptions[0];
407
450
  const subscriptionId = parseSubscriptionId(active?.id);
408
451
  if (!subscriptionId) return null;
409
- const pricingDetails = active?.lineItems?.[0]?.plan?.pricingDetails;
410
- const subscriptionPrice = parsePrice(pricingDetails?.price?.amount);
411
- const subscriptionPeriod = normalizeInterval(pricingDetails?.interval, active?.name);
452
+ let { subscriptionPrice, subscriptionPeriod } = extractPricing(active);
453
+ if (!subscriptionPeriod || subscriptionPrice === null) {
454
+ try {
455
+ const detailsResponse = await admin.graphql(SUBSCRIPTION_DETAILS_QUERY, {
456
+ variables: { id: active?.id }
457
+ });
458
+ const detailsJson = await detailsResponse.json();
459
+ if (detailsJson.errors?.length) {
460
+ logger.error?.("Partner subscription details query errors", { errors: detailsJson.errors });
461
+ }
462
+ const details = detailsJson.data?.node;
463
+ ({ subscriptionPrice, subscriptionPeriod } = extractPricing(details));
464
+ if (!subscriptionPeriod || subscriptionPrice === null) return null;
465
+ return {
466
+ subscriptionStatus: details?.status ?? active?.status ?? "ACTIVE",
467
+ subscriptionName: details?.name ?? active?.name,
468
+ subscriptionId,
469
+ subscriptionPrice,
470
+ subscriptionPeriod
471
+ };
472
+ } catch (error) {
473
+ logger.error?.("Partner subscription details query failed", {
474
+ error: error instanceof Error ? error.message : String(error)
475
+ });
476
+ return null;
477
+ }
478
+ }
412
479
  if (!subscriptionPeriod || subscriptionPrice === null) return null;
413
480
  return {
414
481
  subscriptionStatus: active?.status ?? "ACTIVE",
package/dist/index.js CHANGED
@@ -226,6 +226,42 @@ var ACTIVE_SUBSCRIPTIONS_QUERY = `
226
226
  amount
227
227
  }
228
228
  }
229
+ ... on AppUsagePricing {
230
+ cappedAmount {
231
+ amount
232
+ }
233
+ terms
234
+ }
235
+ }
236
+ }
237
+ }
238
+ }
239
+ }
240
+ }
241
+ `;
242
+ var SUBSCRIPTION_DETAILS_QUERY = `
243
+ query AppSubscriptionDetails($id: ID!) {
244
+ node(id: $id) {
245
+ ... on AppSubscription {
246
+ id
247
+ name
248
+ status
249
+ lineItems {
250
+ plan {
251
+ pricingDetails {
252
+ __typename
253
+ ... on AppRecurringPricing {
254
+ interval
255
+ price {
256
+ amount
257
+ }
258
+ }
259
+ ... on AppUsagePricing {
260
+ cappedAmount {
261
+ amount
262
+ }
263
+ terms
264
+ }
229
265
  }
230
266
  }
231
267
  }
@@ -254,6 +290,13 @@ function parsePrice(rawPrice) {
254
290
  }
255
291
  return null;
256
292
  }
293
+ function extractPricing(subscription) {
294
+ const pricingDetails = subscription?.lineItems?.[0]?.plan?.pricingDetails;
295
+ const rawPrice = pricingDetails?.price?.amount ?? pricingDetails?.cappedAmount?.amount;
296
+ const subscriptionPrice = parsePrice(rawPrice);
297
+ const subscriptionPeriod = normalizeInterval(pricingDetails?.interval, subscription?.name);
298
+ return { subscriptionPrice, subscriptionPeriod };
299
+ }
257
300
  async function fetchActiveSubscriptionEventData(admin, logger = console) {
258
301
  const response = await admin.graphql(ACTIVE_SUBSCRIPTIONS_QUERY);
259
302
  const result = await response.json();
@@ -264,9 +307,33 @@ async function fetchActiveSubscriptionEventData(admin, logger = console) {
264
307
  const active = subscriptions.find((sub) => String(sub.status ?? "").toUpperCase() === "ACTIVE") ?? subscriptions[0];
265
308
  const subscriptionId = parseSubscriptionId(active?.id);
266
309
  if (!subscriptionId) return null;
267
- const pricingDetails = active?.lineItems?.[0]?.plan?.pricingDetails;
268
- const subscriptionPrice = parsePrice(pricingDetails?.price?.amount);
269
- const subscriptionPeriod = normalizeInterval(pricingDetails?.interval, active?.name);
310
+ let { subscriptionPrice, subscriptionPeriod } = extractPricing(active);
311
+ if (!subscriptionPeriod || subscriptionPrice === null) {
312
+ try {
313
+ const detailsResponse = await admin.graphql(SUBSCRIPTION_DETAILS_QUERY, {
314
+ variables: { id: active?.id }
315
+ });
316
+ const detailsJson = await detailsResponse.json();
317
+ if (detailsJson.errors?.length) {
318
+ logger.error?.("Partner subscription details query errors", { errors: detailsJson.errors });
319
+ }
320
+ const details = detailsJson.data?.node;
321
+ ({ subscriptionPrice, subscriptionPeriod } = extractPricing(details));
322
+ if (!subscriptionPeriod || subscriptionPrice === null) return null;
323
+ return {
324
+ subscriptionStatus: details?.status ?? active?.status ?? "ACTIVE",
325
+ subscriptionName: details?.name ?? active?.name,
326
+ subscriptionId,
327
+ subscriptionPrice,
328
+ subscriptionPeriod
329
+ };
330
+ } catch (error) {
331
+ logger.error?.("Partner subscription details query failed", {
332
+ error: error instanceof Error ? error.message : String(error)
333
+ });
334
+ return null;
335
+ }
336
+ }
270
337
  if (!subscriptionPeriod || subscriptionPrice === null) return null;
271
338
  return {
272
339
  subscriptionStatus: active?.status ?? "ACTIVE",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@progus/connector",
3
- "version": "0.6.3",
3
+ "version": "0.6.5",
4
4
  "description": "Progus partner/affiliate connector helpers",
5
5
  "license": "MIT",
6
6
  "type": "module",