@porulle/core 0.57.1 → 0.59.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.
Files changed (46) hide show
  1. package/dist/auth/auth-failure.d.ts +6 -1
  2. package/dist/auth/auth-failure.d.ts.map +1 -1
  3. package/dist/auth/auth-failure.js +4 -0
  4. package/dist/auth/middleware.d.ts.map +1 -1
  5. package/dist/auth/middleware.js +17 -3
  6. package/dist/config/types.d.ts +2 -0
  7. package/dist/config/types.d.ts.map +1 -1
  8. package/dist/index.d.ts +3 -0
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/kernel/hooks/bulk-pairs.d.ts +10 -0
  11. package/dist/kernel/hooks/bulk-pairs.d.ts.map +1 -0
  12. package/dist/kernel/hooks/bulk-pairs.js +20 -0
  13. package/dist/kernel/plugin/manifest.d.ts.map +1 -1
  14. package/dist/kernel/plugin/manifest.js +2 -0
  15. package/dist/modules/audit/hooks.d.ts.map +1 -1
  16. package/dist/modules/audit/hooks.js +16 -0
  17. package/dist/modules/audit/service.d.ts +2 -0
  18. package/dist/modules/audit/service.d.ts.map +1 -1
  19. package/dist/modules/audit/service.js +20 -0
  20. package/dist/modules/channels/adapter.d.ts +10 -0
  21. package/dist/modules/channels/adapter.d.ts.map +1 -1
  22. package/dist/modules/inventory/repository/index.d.ts +11 -0
  23. package/dist/modules/inventory/repository/index.d.ts.map +1 -1
  24. package/dist/modules/inventory/repository/index.js +40 -0
  25. package/dist/modules/inventory/service.d.ts +32 -0
  26. package/dist/modules/inventory/service.d.ts.map +1 -1
  27. package/dist/modules/inventory/service.js +97 -0
  28. package/dist/modules/webhooks/hook.d.ts +7 -0
  29. package/dist/modules/webhooks/hook.d.ts.map +1 -1
  30. package/dist/modules/webhooks/hook.js +31 -0
  31. package/dist/runtime/kernel-register-hooks.d.ts.map +1 -1
  32. package/dist/runtime/kernel-register-hooks.js +4 -1
  33. package/package.json +3 -3
  34. package/src/auth/auth-failure.ts +6 -1
  35. package/src/auth/middleware.ts +18 -3
  36. package/src/config/types.ts +2 -0
  37. package/src/index.ts +3 -0
  38. package/src/kernel/hooks/bulk-pairs.ts +23 -0
  39. package/src/kernel/plugin/manifest.ts +2 -0
  40. package/src/modules/audit/hooks.ts +17 -0
  41. package/src/modules/audit/service.ts +21 -0
  42. package/src/modules/channels/adapter.ts +7 -0
  43. package/src/modules/inventory/repository/index.ts +57 -0
  44. package/src/modules/inventory/service.ts +116 -0
  45. package/src/modules/webhooks/hook.ts +33 -0
  46. package/src/runtime/kernel-register-hooks.ts +7 -1
@@ -1,5 +1,6 @@
1
1
  import { resolveOrgIdForCommerce } from "../../auth/org.js";
2
2
  import type { AfterHook } from "../../kernel/hooks/types.js";
3
+ import type { InventoryAdjustManyResult } from "../inventory/service.js";
3
4
 
4
5
  /**
5
6
  * Webhook delivery hook — enqueues delivery jobs instead of blocking.
@@ -39,3 +40,35 @@ export const deliverWebhooks: AfterHook<unknown> = async ({ result, operation, c
39
40
  });
40
41
  }
41
42
  };
43
+
44
+ /**
45
+ * `inventory.afterAdjustMany` — a page of changed levels. Subscribers get exactly what
46
+ * `inventory.afterAdjust` gave them: one `inventory.update` event per changed level, per endpoint.
47
+ * Only the endpoint lookup is shared across the page.
48
+ */
49
+ export const deliverWebhooksForAdjustMany: AfterHook<InventoryAdjustManyResult> = async ({ result, operation, context }) => {
50
+ const eventName = `${String(context.context.moduleName ?? "unknown")}.${operation}`;
51
+ const webhooksService = context.services.webhooks as {
52
+ getEndpointsForEvent(event: string, orgId: string): Promise<{ ok: boolean; value: Array<{ id: string; url: string; secret: string }> }>;
53
+ };
54
+ const orgId = resolveOrgIdForCommerce(context.actor, context.commerceConfig);
55
+ const levels = result.entities.flatMap((entity) => entity.levels);
56
+ if (levels.length === 0) return;
57
+ const endpoints = await webhooksService.getEndpointsForEvent(eventName, orgId);
58
+ if (!endpoints.ok) return;
59
+ for (const endpoint of endpoints.value) {
60
+ for (const level of levels) {
61
+ await context.jobs.enqueue("webhooks/deliver", {
62
+ endpointId: endpoint.id,
63
+ endpointUrl: endpoint.url,
64
+ endpointSecret: endpoint.secret,
65
+ eventName,
66
+ payload: level,
67
+ }, {
68
+ organizationId: orgId,
69
+ maxAttempts: 5,
70
+ queue: "webhooks",
71
+ });
72
+ }
73
+ }
74
+ };
@@ -1,8 +1,9 @@
1
1
  import type { CommerceConfig } from "../config/types.js";
2
2
  import { HookRegistry, type HookHandler } from "../kernel/hooks/registry.js";
3
- import { deliverWebhooks } from "../modules/webhooks/hook.js";
3
+ import { deliverWebhooks, deliverWebhooksForAdjustMany } from "../modules/webhooks/hook.js";
4
4
  import { syncToSearchIndex } from "../modules/search/hooks.js";
5
5
  import { auditHooks } from "../modules/audit/hooks.js";
6
+ import { assertBulkHookPairs } from "../kernel/hooks/bulk-pairs.js";
6
7
 
7
8
  export function registerConfiguredKernelHooks(
8
9
  config: CommerceConfig,
@@ -28,6 +29,10 @@ export function registerConfiguredKernelHooks(
28
29
  ] as const) {
29
30
  const hooksObject = moduleConfig?.hooks;
30
31
  if (!hooksObject) continue;
32
+ assertBulkHookPairs(
33
+ Object.entries(hooksObject).filter(([, handlers]) => Array.isArray(handlers) && handlers.length > 0).map(([hookName]) => `${moduleName}.${hookName}`),
34
+ `config.${moduleName}.hooks`,
35
+ );
31
36
  for (const [hookName, handlers] of Object.entries(hooksObject)) {
32
37
  const normalizedHandlers = (Array.isArray(handlers) ? handlers : []) as HookHandler[];
33
38
  hooks.registerConfigHooks(
@@ -43,6 +48,7 @@ export function registerConfiguredKernelHooks(
43
48
  hooks.append("catalog.afterUpdate", deliverWebhooks);
44
49
  hooks.append("catalog.afterDelete", deliverWebhooks);
45
50
  hooks.append("inventory.afterAdjust", deliverWebhooks);
51
+ hooks.append("inventory.afterAdjustMany", deliverWebhooksForAdjustMany as HookHandler);
46
52
  hooks.append("customers.afterCreate", deliverWebhooks);
47
53
  hooks.append("customers.afterUpdate", deliverWebhooks);
48
54
  hooks.append("pricing.afterCreate", deliverWebhooks);