@mj-biz-apps/orders-server 5.19.0 → 5.20.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 (47) hide show
  1. package/dist/BillComWebhookExtension.d.ts +46 -0
  2. package/dist/BillComWebhookExtension.d.ts.map +1 -0
  3. package/dist/BillComWebhookExtension.js +220 -0
  4. package/dist/BillComWebhookExtension.js.map +1 -0
  5. package/dist/CheckoutServerExtension.d.ts +9 -1
  6. package/dist/CheckoutServerExtension.d.ts.map +1 -1
  7. package/dist/CheckoutServerExtension.js +15 -0
  8. package/dist/CheckoutServerExtension.js.map +1 -1
  9. package/dist/__tests__/BillComWebhookExtension.test.d.ts +2 -0
  10. package/dist/__tests__/BillComWebhookExtension.test.d.ts.map +1 -0
  11. package/dist/__tests__/BillComWebhookExtension.test.js +166 -0
  12. package/dist/__tests__/BillComWebhookExtension.test.js.map +1 -0
  13. package/dist/__tests__/CheckoutServerExtension.test.js +19 -0
  14. package/dist/__tests__/CheckoutServerExtension.test.js.map +1 -1
  15. package/dist/__tests__/billcom-actions.test.d.ts +2 -0
  16. package/dist/__tests__/billcom-actions.test.d.ts.map +1 -0
  17. package/dist/__tests__/billcom-actions.test.js +89 -0
  18. package/dist/__tests__/billcom-actions.test.js.map +1 -0
  19. package/dist/__tests__/server-extensions-manifest.test.js +6 -0
  20. package/dist/__tests__/server-extensions-manifest.test.js.map +1 -1
  21. package/dist/custom/action-params.d.ts +31 -0
  22. package/dist/custom/action-params.d.ts.map +1 -0
  23. package/dist/custom/action-params.js +69 -0
  24. package/dist/custom/action-params.js.map +1 -0
  25. package/dist/custom/poll-external-payments.action.d.ts +25 -0
  26. package/dist/custom/poll-external-payments.action.d.ts.map +1 -0
  27. package/dist/custom/poll-external-payments.action.js +98 -0
  28. package/dist/custom/poll-external-payments.action.js.map +1 -0
  29. package/dist/custom/send-document.action.d.ts.map +1 -1
  30. package/dist/custom/send-document.action.js +3 -1
  31. package/dist/custom/send-document.action.js.map +1 -1
  32. package/dist/custom/send-external-invoices.action.d.ts +27 -0
  33. package/dist/custom/send-external-invoices.action.d.ts.map +1 -0
  34. package/dist/custom/send-external-invoices.action.js +92 -0
  35. package/dist/custom/send-external-invoices.action.js.map +1 -0
  36. package/dist/generated/graphql-schemas/__mj_BizAppsOrders.d.ts +361 -0
  37. package/dist/generated/graphql-schemas/__mj_BizAppsOrders.d.ts.map +1 -1
  38. package/dist/generated/graphql-schemas/__mj_BizAppsOrders.js +2428 -569
  39. package/dist/generated/graphql-schemas/__mj_BizAppsOrders.js.map +1 -1
  40. package/dist/index.d.ts +1 -0
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +19 -1
  43. package/dist/index.js.map +1 -1
  44. package/dist/server-extensions-manifest.d.ts.map +1 -1
  45. package/dist/server-extensions-manifest.js +6 -0
  46. package/dist/server-extensions-manifest.js.map +1 -1
  47. package/package.json +10 -4
@@ -0,0 +1,46 @@
1
+ import type { Application } from 'express';
2
+ import { type IMetadataProvider, type UserInfo } from '@memberjunction/core';
3
+ import { BaseServerExtension, type ExtensionHealthResult, type ExtensionInitResult, type ServerExtensionConfig } from '@memberjunction/server-extensions-core';
4
+ export declare class BillComWebhookExtension extends BaseServerExtension {
5
+ Initialize(app: Application, config: ServerExtensionConfig): Promise<ExtensionInitResult>;
6
+ Shutdown(): Promise<void>;
7
+ HealthCheck(): Promise<ExtensionHealthResult>;
8
+ private resolveSystemUser;
9
+ }
10
+ export interface BillComWebhookRequest {
11
+ rawBody: string;
12
+ headers: Record<string, string | undefined>;
13
+ providerId: string;
14
+ }
15
+ /** Transport-agnostic so it can be tested without Express. Exported for that reason. */
16
+ export declare function HandleBillComWebhook(req: BillComWebhookRequest, res: {
17
+ status(code: number): {
18
+ json(body: unknown): unknown;
19
+ };
20
+ }, context: () => {
21
+ provider: IMetadataProvider | undefined;
22
+ user: UserInfo | undefined;
23
+ }, runPoll?: (providerId: string, provider: IMetadataProvider, user: UserInfo) => Promise<void>): Promise<void>;
24
+ /**
25
+ * A NOTIFICATION MUST NOT RECORD CASH THE SCHEDULED JOB IS NOT YET ALLOWED TO RECORD.
26
+ *
27
+ * This route used to call the poll with `Preview: false` outright. Both jobs ship Disabled and in
28
+ * Preview precisely so Finance reads one run before any money moves, and merging this branch is
29
+ * supposed to turn nothing on — but the route is enabled in the server config, so the day somebody
30
+ * registered the Bill.com subscription and set the secret, the first `invoice.updated` event would
31
+ * have captured a real payment and posted Dr Cash / Cr A/R before anyone had approved a preview.
32
+ *
33
+ * So the webhook now follows the job rather than overriding it: it polls only when the scheduled poll
34
+ * job is Active AND out of Preview. Anything else is logged and ignored, because a webhook-driven
35
+ * preview writes nothing and nobody reads its output — the scheduled run is where a preview belongs.
36
+ */
37
+ export declare function PollJobIsLive(job: {
38
+ Status: string | null;
39
+ Configuration: string | null;
40
+ } | null | undefined): {
41
+ Live: boolean;
42
+ Why: string;
43
+ };
44
+ /** Tree-shaking anchor — call from the server bootstrap. */
45
+ export declare function LoadBillComWebhookExtension(): void;
46
+ //# sourceMappingURL=BillComWebhookExtension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BillComWebhookExtension.d.ts","sourceRoot":"","sources":["../src/BillComWebhookExtension.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,WAAW,EAAqB,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAiC,KAAK,iBAAiB,EAAE,KAAK,QAAQ,EAAkC,MAAM,sBAAsB,CAAC;AAG5I,OAAO,EAAE,mBAAmB,EAAE,KAAK,qBAAqB,EAAE,KAAK,mBAAmB,EAAE,KAAK,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAO/J,qBACa,uBAAwB,SAAQ,mBAAmB;IAC/C,UAAU,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAmBzF,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzB,WAAW,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAO1D,OAAO,CAAC,iBAAiB;CAO5B;AAED,MAAM,WAAW,qBAAqB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAC5C,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,wFAAwF;AACxF,wBAAsB,oBAAoB,CACtC,GAAG,EAAE,qBAAqB,EAC1B,GAAG,EAAE;IAAE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAA;KAAE,CAAA;CAAE,EAC/D,OAAO,EAAE,MAAM;IAAE,QAAQ,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAA;CAAE,EACtF,OAAO,GAAE,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAkB,GAC7G,OAAO,CAAC,IAAI,CAAC,CAoCf;AAuCD;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE;IAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAK7I;AA0CD,4DAA4D;AAC5D,wBAAgB,2BAA2B,IAAI,IAAI,CAElD"}
@@ -0,0 +1,220 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ /**
8
+ * @fileoverview `OrdersBillComWebhook` — POST /webhooks/billcom/:providerId, mounted before auth.
9
+ *
10
+ * WHAT A BILL.COM WEBHOOK CAN AND CANNOT DO FOR US. Bill.com publishes invoice events
11
+ * (created/updated/archived/restored) signed HMAC-SHA256 over the raw body, and NO payment-received
12
+ * event; an `invoice.updated` carries no receivable-payment id. So the poll (`Orders.PollExternalPayments`)
13
+ * stays the source of truth for cash, and this route does exactly one thing with a VERIFIED
14
+ * notification: run that poll for the provider named in the URL, now, instead of at the next tick.
15
+ * Unverified notifications do nothing — the only thing this endpoint can make us do is call Bill.com,
16
+ * and an unauthenticated way to make us do that is a way to exhaust our API budget.
17
+ *
18
+ * RAW BODY, LIKE THE PAYMENT WEBHOOK. A JSON parser upstream re-serialises the body and invalidates
19
+ * every signature, so this route parses nothing before verifying.
20
+ *
21
+ * RESPOND FIRST, POLL AFTER. Bill.com retries a non-200 with exponential backoff and disables a
22
+ * subscription that keeps failing. A poll can take longer than a webhook client waits, so the route
23
+ * returns 202 as soon as the signature verifies and runs the poll detached, logging its outcome.
24
+ *
25
+ * REGISTERING THE SUBSCRIPTION IS A SETUP STEP, NOT CODE: `POST /v3/subscriptions` in Bill.com with
26
+ * `notificationUrl = https://<host>/webhooks/billcom/<PaymentProviderID>` and `events` = the four
27
+ * invoice events, then put the returned `securityKey` where the provider's `CredentialsRef` points
28
+ * (`<REF>_WEBHOOK_SECRET`).
29
+ *
30
+ * @module @mj-biz-apps/orders-server
31
+ */
32
+ import BodyParser from 'body-parser';
33
+ import { LogError, LogStatus, Metadata, RunView } from '@memberjunction/core';
34
+ import { UserCache } from '@memberjunction/generic-database-provider';
35
+ import { RegisterClass, UUIDsEqual } from '@memberjunction/global';
36
+ import { BaseServerExtension } from '@memberjunction/server-extensions-core';
37
+ import { OrdersPollExternalPaymentsOperation } from '@mj-biz-apps/orders-entities';
38
+ import { IsPaymentRelevant, ResolvePaymentProvider } from '@mj-biz-apps/orders-core-entities-server';
39
+ const MAX_BODY = '1mb';
40
+ const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
41
+ let BillComWebhookExtension = class BillComWebhookExtension extends BaseServerExtension {
42
+ async Initialize(app, config) {
43
+ const route = `${config.RootPath.replace(/\/+$/, '')}/:providerId`;
44
+ app.post(route, BodyParser.raw({ type: '*/*', limit: MAX_BODY }), async (req, res) => {
45
+ await HandleBillComWebhook({
46
+ // Raw bytes under the raw parser, a string if something already decoded it — the same
47
+ // reading as PaymentWebhookHandler. Never re-serialised: that would break the signature.
48
+ rawBody: typeof req.body === 'string' ? req.body : String(req.body ?? ''),
49
+ headers: flattenHeaders(req.headers),
50
+ providerId: String(req.params?.providerId ?? ''),
51
+ }, res, () => ({ provider: Metadata.Provider, user: this.resolveSystemUser() }));
52
+ });
53
+ LogStatus(`[Orders] Bill.com webhook route registered at POST ${route}`);
54
+ return { Success: true, Message: 'Orders Bill.com webhook mounted (unauthenticated, raw body, signature-verified; a verified event triggers the payment poll).', RegisteredRoutes: [`POST ${route}`] };
55
+ }
56
+ async Shutdown() {
57
+ // Nothing held open.
58
+ }
59
+ async HealthCheck() {
60
+ const user = this.resolveSystemUser();
61
+ return user
62
+ ? { Healthy: true, Name: 'OrdersBillComWebhook' }
63
+ : { Healthy: false, Name: 'OrdersBillComWebhook', Details: { Reason: "MJ's system user does not resolve, so every Bill.com notification will be refused." } };
64
+ }
65
+ resolveSystemUser() {
66
+ try {
67
+ return UserCache.Instance.GetSystemUser() ?? undefined;
68
+ }
69
+ catch {
70
+ return undefined;
71
+ }
72
+ }
73
+ };
74
+ BillComWebhookExtension = __decorate([
75
+ RegisterClass(BaseServerExtension, 'OrdersBillComWebhook')
76
+ ], BillComWebhookExtension);
77
+ export { BillComWebhookExtension };
78
+ /** Transport-agnostic so it can be tested without Express. Exported for that reason. */
79
+ export async function HandleBillComWebhook(req, res, context, runPoll = defaultRunPoll) {
80
+ if (!UUID.test(req.providerId)) {
81
+ res.status(404).json({ received: false, reason: 'unknown provider' });
82
+ return;
83
+ }
84
+ const { provider, user } = context();
85
+ if (!provider || !user) {
86
+ // 500, not 4xx: the notification is real and we want it retried once startup is fixed.
87
+ LogError("A Bill.com webhook arrived but MJ's system user or provider could not be resolved; refusing so Bill.com retries.");
88
+ res.status(500).json({ received: false });
89
+ return;
90
+ }
91
+ let driver;
92
+ try {
93
+ driver = await ResolvePaymentProvider(req.providerId, provider, user);
94
+ }
95
+ catch (err) {
96
+ LogError(`Bill.com webhook for provider ${req.providerId}: ${err instanceof Error ? err.message : String(err)}`);
97
+ res.status(404).json({ received: false, reason: 'provider not configured' });
98
+ return;
99
+ }
100
+ if (driver.Config.TypeCode !== 'BillCom') {
101
+ res.status(404).json({ received: false, reason: 'not a Bill.com provider' });
102
+ return;
103
+ }
104
+ const verdict = await driver.VerifyWebhook(req.rawBody, req.headers);
105
+ if (!verdict.Valid) {
106
+ LogError(`Bill.com webhook for provider ${req.providerId} refused: ${verdict.Reason ?? 'signature invalid'}`);
107
+ res.status(401).json({ received: false });
108
+ return;
109
+ }
110
+ const event = driver.ParseWebhookEvent(req.rawBody);
111
+ const relevant = !event || IsPaymentRelevant(event.Kind);
112
+ // Acknowledge now; Bill.com's retry clock is short and a poll is not.
113
+ res.status(202).json({ received: true, polled: relevant, kind: event?.Kind ?? null });
114
+ if (!relevant)
115
+ return;
116
+ void runPoll(req.providerId, provider, user).catch((err) => LogError(`Bill.com webhook-triggered poll for ${req.providerId} failed: ${err instanceof Error ? err.message : String(err)}`));
117
+ }
118
+ /** The Action behind `Orders — Poll External Payments`, whose scheduled job governs this route. */
119
+ const POLL_ACTION_ID = 'B8C4D3E2-0A5F-4D72-9E3B-6F2A8C4D0B11';
120
+ /** That Action's `Preview` input param. Seeded by V202609272103; the job's Configuration names it. */
121
+ const POLL_PREVIEW_PARAM_ID = 'B8C4D3E2-0A5F-4D72-9E3B-6F2A8C4D0B13';
122
+ const SCHEDULED_JOB_ENTITY = 'MJ: Scheduled Jobs';
123
+ /**
124
+ * Is this job's `Preview` param set to something the action will read as true?
125
+ *
126
+ * MUST AGREE WITH `boolParam` (packages/Server/src/custom/action-params.ts), which is what actually
127
+ * decides whether the scheduled run previews. It accepts a real boolean as well as 'true', '1', 'yes'
128
+ * and 'y', and every one of those is a spelling a person can put in the Configuration JSON. This used
129
+ * to be a regex for `"Value": "true"` over the whole blob, which disagreed with `boolParam` on three
130
+ * of them — each disagreement a job that previews while this route records cash — and matched ANY
131
+ * param's value rather than Preview's, so a MaxCount of "true" would have blocked a live job.
132
+ *
133
+ * ABSENT MEANS NOT PREVIEWING, which is the action's own default (`preview = !!input?.Preview`);
134
+ * the two have to answer the same way or the gate is worse than no gate.
135
+ */
136
+ function previewParamIsTrue(configuration) {
137
+ let parsed;
138
+ try {
139
+ parsed = JSON.parse(configuration ?? '');
140
+ }
141
+ catch {
142
+ // Unreadable configuration is not permission to record money.
143
+ return true;
144
+ }
145
+ const params = parsed?.Params;
146
+ if (!Array.isArray(params))
147
+ return false;
148
+ const preview = params.find((x) => typeof x?.ActionParamID === 'string' && UUIDsEqual(x.ActionParamID, POLL_PREVIEW_PARAM_ID));
149
+ if (!preview)
150
+ return false;
151
+ const raw = preview.Value;
152
+ if (raw == null || raw === '')
153
+ return false;
154
+ if (typeof raw === 'boolean')
155
+ return raw;
156
+ return ['true', '1', 'yes', 'y'].includes(String(raw).trim().toLowerCase());
157
+ }
158
+ /**
159
+ * A NOTIFICATION MUST NOT RECORD CASH THE SCHEDULED JOB IS NOT YET ALLOWED TO RECORD.
160
+ *
161
+ * This route used to call the poll with `Preview: false` outright. Both jobs ship Disabled and in
162
+ * Preview precisely so Finance reads one run before any money moves, and merging this branch is
163
+ * supposed to turn nothing on — but the route is enabled in the server config, so the day somebody
164
+ * registered the Bill.com subscription and set the secret, the first `invoice.updated` event would
165
+ * have captured a real payment and posted Dr Cash / Cr A/R before anyone had approved a preview.
166
+ *
167
+ * So the webhook now follows the job rather than overriding it: it polls only when the scheduled poll
168
+ * job is Active AND out of Preview. Anything else is logged and ignored, because a webhook-driven
169
+ * preview writes nothing and nobody reads its output — the scheduled run is where a preview belongs.
170
+ */
171
+ export function PollJobIsLive(job) {
172
+ if (!job)
173
+ return { Live: false, Why: 'no scheduled poll job is installed' };
174
+ if ((job.Status ?? '').trim().toLowerCase() !== 'active')
175
+ return { Live: false, Why: `the scheduled poll job is ${job.Status?.trim() || 'not active'}` };
176
+ if (previewParamIsTrue(job.Configuration))
177
+ return { Live: false, Why: 'the scheduled poll job is still in Preview' };
178
+ return { Live: true, Why: 'the scheduled poll job is live' };
179
+ }
180
+ /**
181
+ * THE MOST RESTRICTIVE POLL JOB WINS, not whichever row the database happened to return first.
182
+ *
183
+ * One job covers every provider today (the shipped row names no `PaymentProviderID`), but the poll
184
+ * takes one and this route is per-provider, so a site that splits the job per provider is an ordinary
185
+ * configuration. Reading `Results[0]` of an unordered view then answered with an arbitrary job's
186
+ * state — provider A live would have let a notification for provider B record cash while B's own job
187
+ * was still in Preview. With no way to tell from here which job governs which provider, every
188
+ * installed poll job has to agree before this route writes anything.
189
+ */
190
+ async function pollIsLive(provider, user) {
191
+ const rv = new RunView(provider);
192
+ const r = await rv.RunView({ EntityName: SCHEDULED_JOB_ENTITY, ExtraFilter: `Configuration LIKE '%${POLL_ACTION_ID}%'`, Fields: ['Status', 'Configuration'], OrderBy: 'Name', ResultType: 'simple' }, user);
193
+ const jobs = r.Results ?? [];
194
+ if (!jobs.length)
195
+ return PollJobIsLive(null);
196
+ const verdicts = jobs.map((j) => PollJobIsLive(j));
197
+ const blocked = verdicts.find((v) => !v.Live);
198
+ return blocked ?? verdicts[0];
199
+ }
200
+ async function defaultRunPoll(providerId, provider, user) {
201
+ const live = await pollIsLive(provider, user);
202
+ if (!live.Live) {
203
+ LogStatus(`[Orders] Bill.com notification for ${providerId} acknowledged but NOT polled: ${live.Why}. Nothing was recorded.`);
204
+ return;
205
+ }
206
+ const result = await new OrdersPollExternalPaymentsOperation().Execute({ PaymentProviderID: providerId, Preview: false }, { provider, user });
207
+ const out = result.Output;
208
+ LogStatus(`[Orders] Bill.com webhook-triggered poll for ${providerId}: ${out?.Message ?? result.ErrorMessage ?? 'no result'}`);
209
+ }
210
+ function flattenHeaders(headers) {
211
+ const flat = {};
212
+ for (const [key, value] of Object.entries(headers))
213
+ flat[key.toLowerCase()] = Array.isArray(value) ? value.join(',') : value;
214
+ return flat;
215
+ }
216
+ /** Tree-shaking anchor — call from the server bootstrap. */
217
+ export function LoadBillComWebhookExtension() {
218
+ void BillComWebhookExtension;
219
+ }
220
+ //# sourceMappingURL=BillComWebhookExtension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BillComWebhookExtension.js","sourceRoot":"","sources":["../src/BillComWebhookExtension.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,13 @@
1
- import type { Application } from 'express';
1
+ import type { Application, Response } from 'express';
2
2
  import { BaseServerExtension, type ExtensionHealthResult, type ExtensionInitResult, type ServerExtensionConfig } from '@memberjunction/server-extensions-core';
3
+ /**
4
+ * Hosts load the element from their own origin with `<script type="module">`, and a
5
+ * cross-origin module script is refused by the browser without `Access-Control-Allow-Origin`.
6
+ * The bundle is public, static and carries no credentials, so any origin may read it. This is
7
+ * deliberately not the widget's `allowedOrigins`: the script is fetched before the page names
8
+ * a widget, and the POST routes still apply each widget's origin policy.
9
+ */
10
+ export declare function setElementAssetCorsHeaders(res: Pick<Response, 'setHeader'>): void;
3
11
  interface CheckoutEdgeSettings {
4
12
  /** Email of the named checkout service principal; falls back to the system user. */
5
13
  ServiceUserEmail?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"CheckoutServerExtension.d.ts","sourceRoot":"","sources":["../src/CheckoutServerExtension.ts"],"names":[],"mappings":"AAmDA,OAAO,KAAK,EAAE,WAAW,EAAmC,MAAM,SAAS,CAAC;AAI5E,OAAO,EACH,mBAAmB,EACnB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC7B,MAAM,wCAAwC,CAAC;AAuDhD,UAAU,oBAAoB;IAC1B,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mEAAmE;IACnE,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,+CAA+C;IAC/C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,2DAA2D;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,0FAA0F;AAC1F,wBAAgB,mCAAmC,CAC/C,QAAQ,EAAE,IAAI,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,EAC7D,GAAG,GAAE,MAAM,CAAC,UAAwB,GACrC,OAAO,CAQT;AAOD,qBACa,uBAAwB,SAAQ,mBAAmB;IAC5D,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,WAAW,CAA6D;IAChF,OAAO,CAAC,wBAAwB,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,UAAU,CAAK;IAEV,UAAU,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA+CzF,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzB,WAAW,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAa1D,+FAA+F;YACjF,WAAW;IAyCzB,8EAA8E;YAChE,eAAe;IAe7B;;;;;OAKG;YACW,iBAAiB;IAsD/B,gFAAgF;IAChF,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,cAAc;IAQtB,mFAAmF;IACnF,OAAO,CAAC,oBAAoB;IAI5B;;;;OAIG;YACW,eAAe;IA6B7B;;;;OAIG;YACW,aAAa;IA4C3B,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,wBAAwB;IAMhC,OAAO,CAAC,wBAAwB;IAWhC,OAAO,CAAC,WAAW;YAOL,wBAAwB;YAaxB,gBAAgB;YAahB,WAAW;YAcX,mBAAmB;YAYnB,cAAc;IAc5B,kEAAkE;IAClE,OAAO,CAAC,iBAAiB;IAkBzB;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAIhB;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;CAkB5B;AAED,0FAA0F;AAC1F,wBAAgB,2BAA2B,IAAI,IAAI,CAElD"}
1
+ {"version":3,"file":"CheckoutServerExtension.d.ts","sourceRoot":"","sources":["../src/CheckoutServerExtension.ts"],"names":[],"mappings":"AAqDA,OAAO,KAAK,EAAE,WAAW,EAAyB,QAAQ,EAAE,MAAM,SAAS,CAAC;AAI5E,OAAO,EACH,mBAAmB,EACnB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC7B,MAAM,wCAAwC,CAAC;AA+ChD;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAI,CAGjF;AAWD,UAAU,oBAAoB;IAC1B,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mEAAmE;IACnE,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,+CAA+C;IAC/C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,2DAA2D;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,0FAA0F;AAC1F,wBAAgB,mCAAmC,CAC/C,QAAQ,EAAE,IAAI,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,EAC7D,GAAG,GAAE,MAAM,CAAC,UAAwB,GACrC,OAAO,CAQT;AAOD,qBACa,uBAAwB,SAAQ,mBAAmB;IAC5D,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,WAAW,CAA6D;IAChF,OAAO,CAAC,wBAAwB,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,UAAU,CAAK;IAEV,UAAU,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAiDzF,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzB,WAAW,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAa1D,+FAA+F;YACjF,WAAW;IAyCzB,8EAA8E;YAChE,eAAe;IAe7B;;;;;OAKG;YACW,iBAAiB;IAsD/B,gFAAgF;IAChF,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,cAAc;IAQtB,mFAAmF;IACnF,OAAO,CAAC,oBAAoB;IAI5B;;;;OAIG;YACW,eAAe;IA6B7B;;;;OAIG;YACW,aAAa;IA4C3B,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,wBAAwB;IAMhC,OAAO,CAAC,wBAAwB;IAWhC,OAAO,CAAC,WAAW;YAOL,wBAAwB;YAaxB,gBAAgB;YAahB,WAAW;YAcX,mBAAmB;YAYnB,cAAc;IAc5B,kEAAkE;IAClE,OAAO,CAAC,iBAAiB;IAkBzB;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAIhB;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;CAkB5B;AAED,0FAA0F;AAC1F,wBAAgB,2BAA2B,IAAI,IAAI,CAElD"}
@@ -32,6 +32,8 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
32
32
  * `allowedOrigins`, a browser request from any other origin is refused AND receives no
33
33
  * CORS grant (so the browser blocks the response either way). With no allowlist
34
34
  * configured, any origin is allowed — the distribution slug remains the access control.
35
+ * The element bundle (`GET {RootPath}/element/main.js`) is the exception: it is public
36
+ * static code, served to every origin (`setElementAssetCorsHeaders`).
35
37
  * 4. TURNSTILE — when the widget sets `requireTurnstile`, session initialization and
36
38
  * completion demand a Cloudflare Turnstile token, verified server-side against the secret
37
39
  * named by `Settings.TurnstileSecretEnvVar`. Required-but-unconfigured verifies as a 503,
@@ -101,6 +103,17 @@ function resolveCheckoutElementDir() {
101
103
  }
102
104
  return null;
103
105
  }
106
+ /**
107
+ * Hosts load the element from their own origin with `<script type="module">`, and a
108
+ * cross-origin module script is refused by the browser without `Access-Control-Allow-Origin`.
109
+ * The bundle is public, static and carries no credentials, so any origin may read it. This is
110
+ * deliberately not the widget's `allowedOrigins`: the script is fetched before the page names
111
+ * a widget, and the POST routes still apply each widget's origin policy.
112
+ */
113
+ export function setElementAssetCorsHeaders(res) {
114
+ res.setHeader('Access-Control-Allow-Origin', '*');
115
+ res.setHeader('Cross-Origin-Resource-Policy', 'cross-origin');
116
+ }
104
117
  /** Bounded size of the rate-limit map — oldest windows evict first. */
105
118
  const RATE_CACHE_MAX = 50_000;
106
119
  const CHECKOUT_SESSION_ENTITY = 'MJ_BizApps_Orders: Checkout Sessions';
@@ -134,10 +147,12 @@ let CheckoutServerExtension = class CheckoutServerExtension extends BaseServerEx
134
147
  const elementDir = resolveCheckoutElementDir();
135
148
  if (elementDir) {
136
149
  app.get(`${root}/element/main.js`, (_req, res) => {
150
+ setElementAssetCorsHeaders(res);
137
151
  res.type('application/javascript').sendFile(path.join(elementDir, 'main.js'));
138
152
  });
139
153
  if (shouldServeCheckoutElementSourceMap(this.settings)) {
140
154
  app.get(`${root}/element/main.js.map`, (_req, res) => {
155
+ setElementAssetCorsHeaders(res);
141
156
  res.type('application/json').sendFile(path.join(elementDir, 'main.js.map'));
142
157
  });
143
158
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CheckoutServerExtension.js","sourceRoot":"","sources":["../src/CheckoutServerExtension.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CheckoutServerExtension.js","sourceRoot":"","sources":["../src/CheckoutServerExtension.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=BillComWebhookExtension.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BillComWebhookExtension.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/BillComWebhookExtension.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * The Bill.com webhook route, without Express and without a database. The rules that matter: an
3
+ * unverified body triggers nothing; a verified one is acknowledged immediately and the poll for THAT
4
+ * provider runs; an unknown or non-Bill.com provider is a 404 so Bill.com stops retrying it.
5
+ */
6
+ import { afterEach, describe, expect, it, vi } from 'vitest';
7
+ const { resolvePaymentProvider } = vi.hoisted(() => ({ resolvePaymentProvider: vi.fn() }));
8
+ vi.mock('@mj-biz-apps/orders-core-entities-server', async () => {
9
+ const actual = await vi.importActual('@mj-biz-apps/orders-core-entities-server');
10
+ return { ...actual, ResolvePaymentProvider: resolvePaymentProvider };
11
+ });
12
+ vi.mock('@memberjunction/core', async () => {
13
+ const actual = await vi.importActual('@memberjunction/core');
14
+ return { ...actual, LogError: vi.fn(), LogStatus: vi.fn(), Metadata: { Provider: {} } };
15
+ });
16
+ vi.mock('@memberjunction/generic-database-provider', () => ({ UserCache: { Instance: { GetSystemUser: () => ({ ID: 'sys' }) } } }));
17
+ vi.mock('@memberjunction/server-extensions-core', () => ({ BaseServerExtension: class {
18
+ } }));
19
+ vi.mock('@memberjunction/global', async () => {
20
+ const actual = await vi.importActual('@memberjunction/global');
21
+ return { ...actual, RegisterClass: () => () => undefined };
22
+ });
23
+ vi.mock('body-parser', () => ({ default: { raw: () => (_req, _res, next) => next() } }));
24
+ vi.mock('@mj-biz-apps/orders-entities', async () => {
25
+ const actual = await vi.importActual('@mj-biz-apps/orders-entities');
26
+ return { ...actual, OrdersPollExternalPaymentsOperation: class {
27
+ constructor() {
28
+ this.Execute = async () => ({ Success: true, Output: { Message: 'ok' } });
29
+ }
30
+ } };
31
+ });
32
+ import { HandleBillComWebhook, PollJobIsLive } from '../BillComWebhookExtension.js';
33
+ import { SignBillComPayload, VerifyBillComSignature, ParseBillComWebhookEvent } from '@mj-biz-apps/orders-core-entities-server';
34
+ const providerId = '11111111-2222-4333-8444-555555555555';
35
+ const key = 'securityKey';
36
+ const body = JSON.stringify({ type: 'invoice.updated', data: { id: '00e1' } });
37
+ const fakeDriver = (typeCode = 'BillCom', secret = key) => ({
38
+ Config: { TypeCode: typeCode },
39
+ VerifyWebhook: async (raw, headers) => VerifyBillComSignature(raw, headers, secret),
40
+ ParseWebhookEvent: (raw) => { const e = ParseBillComWebhookEvent(raw); return e ? { EventID: e.EventID ?? 'x', Kind: e.Type } : null; },
41
+ });
42
+ const respond = () => {
43
+ const calls = [];
44
+ return { calls, res: { status: (code) => ({ json: (b) => { calls.push({ status: code, body: b }); return b; } }) } };
45
+ };
46
+ const context = () => ({ provider: {}, user: { ID: 'sys' } });
47
+ afterEach(() => resolvePaymentProvider.mockReset());
48
+ describe('HandleBillComWebhook', () => {
49
+ it('acknowledges a verified invoice event with 202 and polls that provider', async () => {
50
+ resolvePaymentProvider.mockResolvedValue(fakeDriver());
51
+ const polled = [];
52
+ const { calls, res } = respond();
53
+ await HandleBillComWebhook({ rawBody: body, headers: { 'x-bill-sha-signature': await SignBillComPayload(body, key) }, providerId }, res, context, async (id) => { polled.push(id); });
54
+ expect(calls).toEqual([{ status: 202, body: { received: true, polled: true, kind: 'invoice.updated' } }]);
55
+ expect(polled).toEqual([providerId]);
56
+ });
57
+ it('refuses a bad signature with 401 and polls nothing', async () => {
58
+ resolvePaymentProvider.mockResolvedValue(fakeDriver());
59
+ const polled = [];
60
+ const { calls, res } = respond();
61
+ await HandleBillComWebhook({ rawBody: body, headers: { 'x-bill-sha-signature': 'nope' }, providerId }, res, context, async (id) => { polled.push(id); });
62
+ expect(calls[0].status).toBe(401);
63
+ expect(polled).toEqual([]);
64
+ });
65
+ it('404s an unknown provider id, an unconfigured provider, and a non-Bill.com provider', async () => {
66
+ const polled = [];
67
+ let r = respond();
68
+ await HandleBillComWebhook({ rawBody: body, headers: {}, providerId: 'not-a-uuid' }, r.res, context, async (id) => { polled.push(id); });
69
+ expect(r.calls[0].status).toBe(404);
70
+ resolvePaymentProvider.mockRejectedValue(new Error('No payment provider'));
71
+ r = respond();
72
+ await HandleBillComWebhook({ rawBody: body, headers: {}, providerId }, r.res, context, async (id) => { polled.push(id); });
73
+ expect(r.calls[0].status).toBe(404);
74
+ resolvePaymentProvider.mockResolvedValue(fakeDriver('Stripe'));
75
+ r = respond();
76
+ await HandleBillComWebhook({ rawBody: body, headers: {}, providerId }, r.res, context, async (id) => { polled.push(id); });
77
+ expect(r.calls[0].status).toBe(404);
78
+ expect(polled).toEqual([]);
79
+ });
80
+ it('a verified event that is not about invoices or payments is acknowledged but not polled', async () => {
81
+ resolvePaymentProvider.mockResolvedValue(fakeDriver());
82
+ const other = JSON.stringify({ type: 'vendor.created', data: { id: '009' } });
83
+ const polled = [];
84
+ const { calls, res } = respond();
85
+ await HandleBillComWebhook({ rawBody: other, headers: { 'x-bill-sha-signature': await SignBillComPayload(other, key) }, providerId }, res, context, async (id) => { polled.push(id); });
86
+ expect(calls[0]).toEqual({ status: 202, body: { received: true, polled: false, kind: 'vendor.created' } });
87
+ expect(polled).toEqual([]);
88
+ });
89
+ it('500s when the system user cannot be resolved, so Bill.com retries', async () => {
90
+ const { calls, res } = respond();
91
+ await HandleBillComWebhook({ rawBody: body, headers: {}, providerId }, res, () => ({ provider: undefined, user: undefined }));
92
+ expect(calls[0].status).toBe(500);
93
+ });
94
+ });
95
+ /**
96
+ * A VERIFIED NOTIFICATION MUST NOT RECORD CASH THE SCHEDULED JOB IS NOT YET ALLOWED TO RECORD.
97
+ *
98
+ * The route is enabled in the server config while both jobs ship Disabled and in Preview, so this
99
+ * used to call the poll with Preview hard-coded off: the day somebody registered the Bill.com
100
+ * subscription and set the secret, the first invoice event would have captured a real payment and
101
+ * posted Dr Cash / Cr A/R before anyone had read a preview run.
102
+ */
103
+ describe('PollJobIsLive', () => {
104
+ // The real shape: the poll Action and its Preview param, as V202609272103 seeds them.
105
+ const PREVIEW = 'B8C4D3E2-0A5F-4D72-9E3B-6F2A8C4D0B13';
106
+ const MAXCOUNT = 'B8C4D3E2-0A5F-4D72-9E3B-6F2A8C4D0B14';
107
+ const config = (preview, maxCount = '100') => JSON.stringify({
108
+ ActionID: 'B8C4D3E2-0A5F-4D72-9E3B-6F2A8C4D0B11',
109
+ Params: [
110
+ ...(preview === undefined ? [] : [{ ActionParamID: PREVIEW, ValueType: 'Static', Value: preview }]),
111
+ { ActionParamID: MAXCOUNT, ValueType: 'Static', Value: maxCount },
112
+ ],
113
+ });
114
+ const live = { Status: 'Active', Configuration: config('false') };
115
+ it('polls only when the scheduled job is Active and out of Preview', () => {
116
+ expect(PollJobIsLive(live).Live).toBe(true);
117
+ });
118
+ it('refuses while the job is in Preview, however it is cased', () => {
119
+ expect(PollJobIsLive({ ...live, Configuration: config('true') }).Live).toBe(false);
120
+ expect(PollJobIsLive({ ...live, Configuration: config('TRUE') }).Live).toBe(false);
121
+ });
122
+ it('refuses while the job is Disabled — the shipping posture', () => {
123
+ const d = PollJobIsLive({ ...live, Status: 'Disabled' });
124
+ expect(d.Live).toBe(false);
125
+ expect(d.Why).toMatch(/Disabled/i);
126
+ });
127
+ it('refuses when no job is installed at all, rather than assuming permission', () => {
128
+ expect(PollJobIsLive(null).Live).toBe(false);
129
+ expect(PollJobIsLive(undefined).Live).toBe(false);
130
+ });
131
+ it('says WHY, because the notification is otherwise silently dropped', () => {
132
+ for (const j of [null, { ...live, Status: 'Disabled' }, { ...live, Configuration: config('true') }]) {
133
+ expect(PollJobIsLive(j).Why.length).toBeGreaterThan(0);
134
+ }
135
+ });
136
+ });
137
+ describe('PollJobIsLive reads the Preview PARAM, not the blob', () => {
138
+ const PREVIEW = 'B8C4D3E2-0A5F-4D72-9E3B-6F2A8C4D0B13';
139
+ const MAXCOUNT = 'B8C4D3E2-0A5F-4D72-9E3B-6F2A8C4D0B14';
140
+ const job = (params) => ({ Status: 'Active', Configuration: JSON.stringify({ ActionID: 'B8C4D3E2-0A5F-4D72-9E3B-6F2A8C4D0B11', Params: params }) });
141
+ const previewValue = (v) => job([{ ActionParamID: PREVIEW, ValueType: 'Static', Value: v }]);
142
+ // MUST AGREE WITH `boolParam`, which is what decides whether the scheduled run previews. Each of
143
+ // these was read as LIVE by the regex this replaced, so the webhook would have recorded cash while
144
+ // the job it claims to follow was previewing.
145
+ it.each([[true], ['true'], ['TRUE'], ['1'], ['yes'], ['y'], [' True ']])('treats %p as still previewing', (v) => {
146
+ expect(PollJobIsLive(previewValue(v)).Live).toBe(false);
147
+ });
148
+ it.each([[false], ['false'], ['0'], ['no'], ['n'], [''], [null]])('treats %p as out of preview', (v) => {
149
+ expect(PollJobIsLive(previewValue(v)).Live).toBe(true);
150
+ });
151
+ it('is not fooled by another param whose value happens to be true', () => {
152
+ // MaxCount "true" is nonsense, but it must not block a job that is genuinely live.
153
+ expect(PollJobIsLive(job([{ ActionParamID: PREVIEW, Value: 'false' }, { ActionParamID: MAXCOUNT, Value: 'true' }])).Live).toBe(true);
154
+ });
155
+ it('matches the param id however it is cased in the JSON', () => {
156
+ expect(PollJobIsLive(job([{ ActionParamID: PREVIEW.toLowerCase(), Value: 'true' }])).Live).toBe(false);
157
+ });
158
+ it('is live when Preview is absent — the action defaults the same way', () => {
159
+ expect(PollJobIsLive(job([{ ActionParamID: MAXCOUNT, Value: '100' }])).Live).toBe(true);
160
+ });
161
+ it('refuses configuration it cannot read, rather than assuming permission', () => {
162
+ expect(PollJobIsLive({ Status: 'Active', Configuration: 'not json' }).Live).toBe(false);
163
+ expect(PollJobIsLive({ Status: 'Active', Configuration: null }).Live).toBe(false);
164
+ });
165
+ });
166
+ //# sourceMappingURL=BillComWebhookExtension.test.js.map