@teleporthq/teleport-plugin-next-workflows 0.43.53 → 0.43.55
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/__tests__/ai-chat-rag-sql-parameterization.test.ts +237 -0
- package/__tests__/ai-embedding-optional.test.ts +77 -0
- package/__tests__/ai-model-capabilities.test.ts +234 -0
- package/__tests__/ai-provider-coverage.test.ts +183 -0
- package/__tests__/cart-clear-db-mirror.test.ts +45 -0
- package/__tests__/cart-get-total-storefront-tax.test.ts +165 -0
- package/__tests__/cron-route-loop-templateparams.test.ts +15 -6
- package/__tests__/data-create-item-order-notification.test.ts +33 -0
- package/__tests__/ecommerce-customhandler-rewriter.test.ts +1 -1
- package/__tests__/internal-request-headers.test.ts +159 -0
- package/__tests__/order-details-route.test.ts +238 -0
- package/__tests__/resolve-config-template-params.test.ts +174 -0
- package/__tests__/utility-nodes.test.ts +27 -11
- package/dist/cjs/api-route-generator.d.ts.map +1 -1
- package/dist/cjs/api-route-generator.js +27 -15
- package/dist/cjs/api-route-generator.js.map +1 -1
- package/dist/cjs/ecommerce/order-details-route.d.ts +18 -0
- package/dist/cjs/ecommerce/order-details-route.d.ts.map +1 -0
- package/dist/cjs/ecommerce/order-details-route.js +172 -0
- package/dist/cjs/ecommerce/order-details-route.js.map +1 -0
- package/dist/cjs/ecommerce-customhandler-rewriter.d.ts +1 -1
- package/dist/cjs/ecommerce-customhandler-rewriter.d.ts.map +1 -1
- package/dist/cjs/ecommerce-customhandler-rewriter.js +20 -4
- package/dist/cjs/ecommerce-customhandler-rewriter.js.map +1 -1
- package/dist/cjs/executor-generator.d.ts.map +1 -1
- package/dist/cjs/executor-generator.js +69 -11
- package/dist/cjs/executor-generator.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-custom-prompt.js +1 -1
- package/dist/cjs/nodes/ai/ai-custom-prompt.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-detect-language.js +1 -1
- package/dist/cjs/nodes/ai/ai-detect-language.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-generate-text-embedding.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-generate-text-embedding.js +47 -4
- package/dist/cjs/nodes/ai/ai-generate-text-embedding.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-provider-utils.d.ts +2 -0
- package/dist/cjs/nodes/ai/ai-provider-utils.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-provider-utils.js +195 -106
- package/dist/cjs/nodes/ai/ai-provider-utils.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-sentiment-analysis.js +1 -1
- package/dist/cjs/nodes/ai/ai-sentiment-analysis.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-summarization.js +1 -1
- package/dist/cjs/nodes/ai/ai-summarization.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-text-classifier.js +1 -1
- package/dist/cjs/nodes/ai/ai-text-classifier.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-text-transform.js +1 -1
- package/dist/cjs/nodes/ai/ai-text-transform.js.map +1 -1
- package/dist/cjs/nodes/cart/cart-clear.d.ts.map +1 -1
- package/dist/cjs/nodes/cart/cart-clear.js +40 -0
- package/dist/cjs/nodes/cart/cart-clear.js.map +1 -1
- package/dist/cjs/nodes/cart/cart-get-total.d.ts.map +1 -1
- package/dist/cjs/nodes/cart/cart-get-total.js +56 -15
- package/dist/cjs/nodes/cart/cart-get-total.js.map +1 -1
- package/dist/cjs/nodes/data/data-count.d.ts.map +1 -1
- package/dist/cjs/nodes/data/data-count.js +6 -1
- package/dist/cjs/nodes/data/data-count.js.map +1 -1
- package/dist/cjs/nodes/data/data-create-item.d.ts.map +1 -1
- package/dist/cjs/nodes/data/data-create-item.js +45 -9
- package/dist/cjs/nodes/data/data-create-item.js.map +1 -1
- package/dist/cjs/nodes/data/data-delete-item.d.ts.map +1 -1
- package/dist/cjs/nodes/data/data-delete-item.js +7 -4
- package/dist/cjs/nodes/data/data-delete-item.js.map +1 -1
- package/dist/cjs/nodes/data/data-raw-query.d.ts.map +1 -1
- package/dist/cjs/nodes/data/data-raw-query.js +7 -1
- package/dist/cjs/nodes/data/data-raw-query.js.map +1 -1
- package/dist/cjs/nodes/data/data-select.d.ts.map +1 -1
- package/dist/cjs/nodes/data/data-select.js +6 -1
- package/dist/cjs/nodes/data/data-select.js.map +1 -1
- package/dist/cjs/nodes/data/data-update-item.d.ts.map +1 -1
- package/dist/cjs/nodes/data/data-update-item.js +7 -4
- package/dist/cjs/nodes/data/data-update-item.js.map +1 -1
- package/dist/cjs/nodes/utility/utility-hybrid-search.js +2 -2
- package/dist/cjs/nodes/utility/utility-hybrid-search.js.map +1 -1
- package/dist/cjs/nodes/utility/utility-semantic-search.js +1 -1
- package/dist/cjs/nodes/utility/utility-semantic-search.js.map +1 -1
- package/dist/cjs/nodes/utility/utility-similarity-scoring.d.ts.map +1 -1
- package/dist/cjs/nodes/utility/utility-similarity-scoring.js +49 -3
- package/dist/cjs/nodes/utility/utility-similarity-scoring.js.map +1 -1
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/cjs/workflow-project-plugin.d.ts.map +1 -1
- package/dist/cjs/workflow-project-plugin.js +10 -4
- package/dist/cjs/workflow-project-plugin.js.map +1 -1
- package/dist/esm/api-route-generator.d.ts.map +1 -1
- package/dist/esm/api-route-generator.js +27 -15
- package/dist/esm/api-route-generator.js.map +1 -1
- package/dist/esm/ecommerce/order-details-route.d.ts +18 -0
- package/dist/esm/ecommerce/order-details-route.d.ts.map +1 -0
- package/dist/esm/ecommerce/order-details-route.js +167 -0
- package/dist/esm/ecommerce/order-details-route.js.map +1 -0
- package/dist/esm/ecommerce-customhandler-rewriter.d.ts +1 -1
- package/dist/esm/ecommerce-customhandler-rewriter.d.ts.map +1 -1
- package/dist/esm/ecommerce-customhandler-rewriter.js +20 -4
- package/dist/esm/ecommerce-customhandler-rewriter.js.map +1 -1
- package/dist/esm/executor-generator.d.ts.map +1 -1
- package/dist/esm/executor-generator.js +69 -11
- package/dist/esm/executor-generator.js.map +1 -1
- package/dist/esm/nodes/ai/ai-custom-prompt.js +1 -1
- package/dist/esm/nodes/ai/ai-custom-prompt.js.map +1 -1
- package/dist/esm/nodes/ai/ai-detect-language.js +1 -1
- package/dist/esm/nodes/ai/ai-detect-language.js.map +1 -1
- package/dist/esm/nodes/ai/ai-generate-text-embedding.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-generate-text-embedding.js +47 -4
- package/dist/esm/nodes/ai/ai-generate-text-embedding.js.map +1 -1
- package/dist/esm/nodes/ai/ai-provider-utils.d.ts +2 -0
- package/dist/esm/nodes/ai/ai-provider-utils.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-provider-utils.js +194 -105
- package/dist/esm/nodes/ai/ai-provider-utils.js.map +1 -1
- package/dist/esm/nodes/ai/ai-sentiment-analysis.js +1 -1
- package/dist/esm/nodes/ai/ai-sentiment-analysis.js.map +1 -1
- package/dist/esm/nodes/ai/ai-summarization.js +1 -1
- package/dist/esm/nodes/ai/ai-summarization.js.map +1 -1
- package/dist/esm/nodes/ai/ai-text-classifier.js +1 -1
- package/dist/esm/nodes/ai/ai-text-classifier.js.map +1 -1
- package/dist/esm/nodes/ai/ai-text-transform.js +1 -1
- package/dist/esm/nodes/ai/ai-text-transform.js.map +1 -1
- package/dist/esm/nodes/cart/cart-clear.d.ts.map +1 -1
- package/dist/esm/nodes/cart/cart-clear.js +40 -0
- package/dist/esm/nodes/cart/cart-clear.js.map +1 -1
- package/dist/esm/nodes/cart/cart-get-total.d.ts.map +1 -1
- package/dist/esm/nodes/cart/cart-get-total.js +56 -15
- package/dist/esm/nodes/cart/cart-get-total.js.map +1 -1
- package/dist/esm/nodes/data/data-count.d.ts.map +1 -1
- package/dist/esm/nodes/data/data-count.js +6 -1
- package/dist/esm/nodes/data/data-count.js.map +1 -1
- package/dist/esm/nodes/data/data-create-item.d.ts.map +1 -1
- package/dist/esm/nodes/data/data-create-item.js +45 -9
- package/dist/esm/nodes/data/data-create-item.js.map +1 -1
- package/dist/esm/nodes/data/data-delete-item.d.ts.map +1 -1
- package/dist/esm/nodes/data/data-delete-item.js +7 -4
- package/dist/esm/nodes/data/data-delete-item.js.map +1 -1
- package/dist/esm/nodes/data/data-raw-query.d.ts.map +1 -1
- package/dist/esm/nodes/data/data-raw-query.js +7 -1
- package/dist/esm/nodes/data/data-raw-query.js.map +1 -1
- package/dist/esm/nodes/data/data-select.d.ts.map +1 -1
- package/dist/esm/nodes/data/data-select.js +6 -1
- package/dist/esm/nodes/data/data-select.js.map +1 -1
- package/dist/esm/nodes/data/data-update-item.d.ts.map +1 -1
- package/dist/esm/nodes/data/data-update-item.js +7 -4
- package/dist/esm/nodes/data/data-update-item.js.map +1 -1
- package/dist/esm/nodes/utility/utility-hybrid-search.js +2 -2
- package/dist/esm/nodes/utility/utility-hybrid-search.js.map +1 -1
- package/dist/esm/nodes/utility/utility-semantic-search.js +1 -1
- package/dist/esm/nodes/utility/utility-semantic-search.js.map +1 -1
- package/dist/esm/nodes/utility/utility-similarity-scoring.d.ts.map +1 -1
- package/dist/esm/nodes/utility/utility-similarity-scoring.js +49 -3
- package/dist/esm/nodes/utility/utility-similarity-scoring.js.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/workflow-project-plugin.d.ts.map +1 -1
- package/dist/esm/workflow-project-plugin.js +10 -4
- package/dist/esm/workflow-project-plugin.js.map +1 -1
- package/package.json +4 -4
- package/src/api-route-generator.ts +27 -15
- package/src/ecommerce/order-details-route.ts +195 -0
- package/src/ecommerce-customhandler-rewriter.ts +24 -4
- package/src/executor-generator.ts +69 -11
- package/src/nodes/ai/ai-custom-prompt.ts +2 -2
- package/src/nodes/ai/ai-detect-language.ts +2 -2
- package/src/nodes/ai/ai-generate-text-embedding.ts +49 -4
- package/src/nodes/ai/ai-provider-utils.ts +216 -106
- package/src/nodes/ai/ai-sentiment-analysis.ts +2 -2
- package/src/nodes/ai/ai-summarization.ts +2 -2
- package/src/nodes/ai/ai-text-classifier.ts +2 -2
- package/src/nodes/ai/ai-text-transform.ts +2 -2
- package/src/nodes/cart/cart-clear.ts +40 -0
- package/src/nodes/cart/cart-get-total.ts +61 -17
- package/src/nodes/data/data-count.ts +6 -1
- package/src/nodes/data/data-create-item.ts +45 -9
- package/src/nodes/data/data-delete-item.ts +6 -0
- package/src/nodes/data/data-raw-query.ts +8 -1
- package/src/nodes/data/data-select.ts +6 -1
- package/src/nodes/data/data-update-item.ts +6 -0
- package/src/nodes/utility/utility-hybrid-search.ts +2 -2
- package/src/nodes/utility/utility-semantic-search.ts +1 -1
- package/src/nodes/utility/utility-similarity-scoring.ts +56 -3
- package/src/workflow-project-plugin.ts +10 -4
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
// Where the buyer lands after a successful payment.
|
|
2
|
+
//
|
|
3
|
+
// ## ⛔ THE DEFECT (run c133d485)
|
|
4
|
+
//
|
|
5
|
+
// `buildPaymentMetadataBuilder` used to hard-code the redirect as
|
|
6
|
+
// `'/order-details/' + orderNumber + '?payment=success'`. The order-details page
|
|
7
|
+
// is a DETAILS page under whatever folder the site map put it in — this project
|
|
8
|
+
// routed it at `/orders/[order_number]` — so every Stripe / PayPal return landed
|
|
9
|
+
// on `/order-details/ORD-1?payment=success`, a 404, right after the customer
|
|
10
|
+
// paid. The COD path was unaffected because it navigates through
|
|
11
|
+
// `navigation-go-to-page`, which resolves the page's REAL route.
|
|
12
|
+
//
|
|
13
|
+
// Worse, the AI had already written the correct URL: the generated node emitted
|
|
14
|
+
// `successUrl: "/orders/" + encodeURIComponent(orderNumber) + "?payment=success"`
|
|
15
|
+
// and the rewriter — whose job is to replace positional `params[14]` lookups with
|
|
16
|
+
// shape-walking — overwrote it with the hard-coded one. A rewrite that fixes one
|
|
17
|
+
// bug must not import another.
|
|
18
|
+
//
|
|
19
|
+
// The prefix is therefore READ from the project, from the same field the runtime
|
|
20
|
+
// navigation node trusts (`targetPage.staticUrl`, the details page's route
|
|
21
|
+
// without its dynamic segment), with the literal route as a second source, the
|
|
22
|
+
// URL THE NODE ITSELF ALREADY DECLARES as a third, and the old constant only as
|
|
23
|
+
// a last resort.
|
|
24
|
+
//
|
|
25
|
+
// ## ⭐ WHY THE NODE'S OWN URL IS A SOURCE
|
|
26
|
+
//
|
|
27
|
+
// The place-order workflow is built by the GUI, which bakes the redirect from
|
|
28
|
+
// the live document (`resolvePagePath` -> `getResolvedPageUrl`) — so the node
|
|
29
|
+
// arrives here already carrying the right answer, `ensureUniquePageUrl`
|
|
30
|
+
// suffixes (`/orders1`) and editor renames included. Falling back to the
|
|
31
|
+
// constant while that string is sitting in the code we are about to replace is
|
|
32
|
+
// how a rewrite imports a 404: the two sources above depend on finding a
|
|
33
|
+
// `navigation-go-to-page` node, and an AI-authored or online-payment-only
|
|
34
|
+
// checkout need not have one. Reading it costs nothing and closes that hole.
|
|
35
|
+
//
|
|
36
|
+
// It is deliberately the THIRD source, not the first: `targetPage.staticUrl` is
|
|
37
|
+
// the runtime's own resolution of the real route, so where the two disagree the
|
|
38
|
+
// project wins and the paid path can never diverge from the COD path.
|
|
39
|
+
/** Only used when the project contains no order-details navigation at all. */
|
|
40
|
+
export const DEFAULT_ORDER_DETAILS_PREFIX = '/order-details';
|
|
41
|
+
const ORDERS_TABLE = 'teleport_orders';
|
|
42
|
+
const ORDER_DETAILS_PAGE_NAME_RE = /^order[-_\s]?details$/i;
|
|
43
|
+
/** `/orders`, `/shop/orders` — a route prefix, never a trailing slash. */
|
|
44
|
+
const normalisePrefix = (value) => {
|
|
45
|
+
const trimmed = value.trim();
|
|
46
|
+
if (trimmed.length === 0 || trimmed.charAt(0) !== '/') {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
// A dynamic segment is the differentiator's slot, not part of the prefix.
|
|
50
|
+
if (trimmed.indexOf('[') >= 0) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
const withoutTrailingSlash = trimmed.length > 1 ? trimmed.replace(/\/+$/, '') : trimmed;
|
|
54
|
+
return withoutTrailingSlash.length > 0 ? withoutTrailingSlash : null;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* `/orders/[order_number]` -> `/orders`. Returns null when the route carries no
|
|
58
|
+
* dynamic segment (then it is not a details route and `staticUrl` is the answer).
|
|
59
|
+
*/
|
|
60
|
+
const prefixFromDynamicRoute = (route) => {
|
|
61
|
+
const trimmed = route.trim();
|
|
62
|
+
if (trimmed.charAt(0) !== '/' || trimmed.indexOf('[') < 0) {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
const segments = trimmed.split('/').filter((segment) => segment.length > 0);
|
|
66
|
+
const kept = [];
|
|
67
|
+
for (let i = 0; i < segments.length; i++) {
|
|
68
|
+
if (segments[i].charAt(0) === '[') {
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
kept.push(segments[i]);
|
|
72
|
+
}
|
|
73
|
+
return kept.length > 0 ? '/' + kept.join('/') : null;
|
|
74
|
+
};
|
|
75
|
+
const targetsOrderDetails = (targetPage) => {
|
|
76
|
+
if (targetPage.isDetailsPage !== true) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
if (targetPage.rowOwnerTable === ORDERS_TABLE) {
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
return (typeof targetPage.pageName === 'string' && ORDER_DETAILS_PAGE_NAME_RE.test(targetPage.pageName));
|
|
83
|
+
};
|
|
84
|
+
const collectWorkflowNodes = (uidl) => {
|
|
85
|
+
const out = [];
|
|
86
|
+
const workflows = uidl.workflows;
|
|
87
|
+
if (!workflows) {
|
|
88
|
+
return out;
|
|
89
|
+
}
|
|
90
|
+
const push = (graphs) => {
|
|
91
|
+
if (!graphs || typeof graphs !== 'object') {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const values = Object.values(graphs);
|
|
95
|
+
for (let i = 0; i < values.length; i++) {
|
|
96
|
+
const nodes = values[i] && values[i].nodes;
|
|
97
|
+
if (Array.isArray(nodes)) {
|
|
98
|
+
for (let j = 0; j < nodes.length; j++) {
|
|
99
|
+
out.push(nodes[j]);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
push(workflows.workflows);
|
|
105
|
+
push(workflows.customNodes);
|
|
106
|
+
return out;
|
|
107
|
+
};
|
|
108
|
+
/**
|
|
109
|
+
* The order-details prefix a `general-custom-js` handler already declares, read
|
|
110
|
+
* from the `successUrl` string literal it builds — `successUrl: "/orders/" +
|
|
111
|
+
* encodeURIComponent(orderNumber) + "?payment=success"` -> `/orders`. Null when
|
|
112
|
+
* the handler has no such literal (or an unusable one).
|
|
113
|
+
*
|
|
114
|
+
* Pure; never throws.
|
|
115
|
+
*/
|
|
116
|
+
export const readSuccessUrlPrefix = (code) => {
|
|
117
|
+
if (typeof code !== 'string' || code.length === 0) {
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
const match = /successUrl\s*:\s*(['"])([^'"\n]*)\1/.exec(code);
|
|
121
|
+
if (!match) {
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
const literal = match[2];
|
|
125
|
+
// The literal is the PREFIX plus its separator; the order number is
|
|
126
|
+
// concatenated after it. A literal that already carries a whole URL (a query
|
|
127
|
+
// string, a dynamic slot) is not a prefix and is refused rather than trimmed.
|
|
128
|
+
if (literal.indexOf('?') >= 0 || literal.indexOf('[') >= 0) {
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
const prefix = normalisePrefix(literal);
|
|
132
|
+
// A bare '/' is the site root, not a details-page folder — taking it would
|
|
133
|
+
// build `successUrl: "//" + orderNumber`, a protocol-relative URL.
|
|
134
|
+
return prefix === null || prefix === '/' ? null : prefix;
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* The URL prefix the order-details page is served at, WITHOUT its dynamic
|
|
138
|
+
* segment and without a trailing slash — e.g. `/orders`. Pure; never throws.
|
|
139
|
+
*/
|
|
140
|
+
export const resolveOrderDetailsRoutePrefix = (uidl) => {
|
|
141
|
+
let fromRoute = null;
|
|
142
|
+
const nodes = collectWorkflowNodes(uidl);
|
|
143
|
+
for (let i = 0; i < nodes.length; i++) {
|
|
144
|
+
const node = nodes[i];
|
|
145
|
+
if (!node || node.type !== 'navigation-go-to-page' || !node.config) {
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
const targetPage = node.config.targetPage;
|
|
149
|
+
if (!targetPage || typeof targetPage !== 'object' || !targetsOrderDetails(targetPage)) {
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
// `staticUrl` is what `navigation-go-to-page` itself uses for a details page,
|
|
153
|
+
// so the paid path and the COD path can never disagree.
|
|
154
|
+
if (typeof targetPage.staticUrl === 'string') {
|
|
155
|
+
const prefix = normalisePrefix(targetPage.staticUrl);
|
|
156
|
+
if (prefix) {
|
|
157
|
+
return prefix;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// Second source: the literal route with its `[column]` slot still attached.
|
|
161
|
+
if (fromRoute === null && typeof node.config.pageId === 'string') {
|
|
162
|
+
fromRoute = prefixFromDynamicRoute(node.config.pageId);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return fromRoute !== null && fromRoute !== void 0 ? fromRoute : DEFAULT_ORDER_DETAILS_PREFIX;
|
|
166
|
+
};
|
|
167
|
+
//# sourceMappingURL=order-details-route.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"order-details-route.js","sourceRoot":"","sources":["../../../src/ecommerce/order-details-route.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,7 +18,7 @@ export declare const __testables: {
|
|
|
18
18
|
looksLikeStockDecrementBuilder: (code: string) => boolean;
|
|
19
19
|
buildLowStockSelectBuilder: (threshold: number) => string;
|
|
20
20
|
buildLowStockEmailPayloadNoOp: () => string;
|
|
21
|
-
buildPaymentMetadataBuilder: () => string;
|
|
21
|
+
buildPaymentMetadataBuilder: (orderDetailsPrefix: string) => string;
|
|
22
22
|
buildStockDecrementBuilder: (allowBackorders: boolean) => string;
|
|
23
23
|
DEFAULT_THRESHOLD: number;
|
|
24
24
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecommerce-customhandler-rewriter.d.ts","sourceRoot":"","sources":["../../src/ecommerce-customhandler-rewriter.ts"],"names":[],"mappings":"AA6BA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"ecommerce-customhandler-rewriter.d.ts","sourceRoot":"","sources":["../../src/ecommerce-customhandler-rewriter.ts"],"names":[],"mappings":"AA6BA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAoXxD,UAAU,cAAc;IACtB,qBAAqB,EAAE,MAAM,CAAA;IAC7B,oBAAoB,EAAE,MAAM,CAAA;IAC5B,8BAA8B,EAAE,MAAM,CAAA;IACtC,6BAA6B,EAAE,MAAM,CAAA;IACrC,8BAA8B,EAAE,MAAM,CAAA;IACtC,2BAA2B,EAAE,MAAM,CAAA;IACnC,2BAA2B,EAAE,MAAM,CAAA;IACnC,4BAA4B,EAAE,MAAM,CAAA;IACpC,sBAAsB,EAAE,MAAM,CAAA;CAC/B;AAMD,eAAO,MAAM,6BAA6B,SAAU,WAAW,KAAG,cA+KjE,CAAA;AAID,eAAO,MAAM,WAAW;2CAlesB,MAAM,KAAG,OAAO;0CAsBjB,MAAM,KAAG,OAAO;4CAyCd,MAAM,KAAG,OAAO;;4CAkChB,MAAM,KAAG,MAAM;yCAgLpB,MAAM;sDAnES,MAAM,KAAG,MAAM;;;CA8RvE,CAAA"}
|
|
@@ -30,6 +30,7 @@ import { STOCK_DECREMENT_MARKER, looksLikeStockDecrementBuilder, buildStockDecre
|
|
|
30
30
|
import { looksLikePlaceOrderAvailabilityCheck, looksLikeAddToCartStockCheck, looksLikeAddToCartLimitCheck, buildPlaceOrderAvailabilityCheck, buildAddToCartStockCheck, buildAddToCartLimitCheck, } from './ecommerce/cart-availability';
|
|
31
31
|
import { looksLikeOrderNumberGenerator, buildOrderNumberGenerator, } from './ecommerce/order-number-generator';
|
|
32
32
|
import { looksLikeOrderOwnershipHandler, buildOrderOwnershipReplacement, } from './ecommerce/order-ownership';
|
|
33
|
+
import { DEFAULT_ORDER_DETAILS_PREFIX, readSuccessUrlPrefix, resolveOrderDetailsRoutePrefix, } from './ecommerce/order-details-route';
|
|
33
34
|
const DEFAULT_THRESHOLD = 5;
|
|
34
35
|
const buildContext = (uidl) => {
|
|
35
36
|
const ecom = uidl.ecommerceSettings;
|
|
@@ -257,7 +258,14 @@ function customHandler(previousContext, params) {
|
|
|
257
258
|
// is "an object with an id and at least one column unique to the
|
|
258
259
|
// orders table" (total_amount / customer_email / order_number / …).
|
|
259
260
|
// This makes the lookup robust against ANY upstream reordering.
|
|
260
|
-
|
|
261
|
+
//
|
|
262
|
+
// `orderDetailsPrefix` is the order-details page's REAL route prefix,
|
|
263
|
+
// read from the project by `resolveOrderDetailsRoutePrefix` — this
|
|
264
|
+
// template used to hard-code `/order-details`, which 404'd every paid
|
|
265
|
+
// checkout on a project whose site map routed the page elsewhere
|
|
266
|
+
// (`/orders/[order_number]`). See ./ecommerce/order-details-route.
|
|
267
|
+
const buildPaymentMetadataBuilder = (orderDetailsPrefix) => {
|
|
268
|
+
const successPrefix = JSON.stringify(`${orderDetailsPrefix}/`);
|
|
261
269
|
return `${REWRITER_MARKER}
|
|
262
270
|
function customHandler(params) {
|
|
263
271
|
// Walk params looking for the order-create-item result. We accept
|
|
@@ -303,7 +311,7 @@ function customHandler(params) {
|
|
|
303
311
|
(orderId ? 'ORD-' + orderId.slice(0, 8) : '');
|
|
304
312
|
|
|
305
313
|
return {
|
|
306
|
-
successUrl:
|
|
314
|
+
successUrl: ${successPrefix} + encodeURIComponent(orderNumber || 'unknown') + '?payment=success',
|
|
307
315
|
cancelUrl: '/checkout',
|
|
308
316
|
description: 'Order ' + (orderNumber || orderId || 'pending'),
|
|
309
317
|
// Stripe / PayPal stash this string in their session metadata; the
|
|
@@ -361,7 +369,11 @@ export const rewriteLowStockCustomHandlers = (uidl) => {
|
|
|
361
369
|
// off, so its output is harmless either way.
|
|
362
370
|
const replacementSelect = buildLowStockSelectBuilder(ctx.threshold);
|
|
363
371
|
const replacementEmailNoOp = buildLowStockEmailPayloadNoOp();
|
|
364
|
-
|
|
372
|
+
// Where a paid checkout returns to. Resolved from the PROJECT when the project
|
|
373
|
+
// says (the runtime navigation node's own `targetPage.staticUrl`); only when
|
|
374
|
+
// it does not do we read the URL the node we are replacing already declares,
|
|
375
|
+
// which the GUI baked from the live document. See ./ecommerce/order-details-route.
|
|
376
|
+
const projectOrderDetailsPrefix = resolveOrderDetailsRoutePrefix(uidl);
|
|
365
377
|
const replacementStockDecrement = buildStockDecrementBuilder(ctx.allowBackorders);
|
|
366
378
|
// Cart-availability replacements: bake `allowBackorders` into the
|
|
367
379
|
// place-order pre-flight check so the runtime doesn't have to read
|
|
@@ -373,6 +385,7 @@ export const rewriteLowStockCustomHandlers = (uidl) => {
|
|
|
373
385
|
const replacementAddToCartLimitCheck = buildAddToCartLimitCheck();
|
|
374
386
|
const replacementOrderNumberGenerator = buildOrderNumberGenerator();
|
|
375
387
|
const visit = (nodes) => {
|
|
388
|
+
var _a;
|
|
376
389
|
if (!Array.isArray(nodes)) {
|
|
377
390
|
return;
|
|
378
391
|
}
|
|
@@ -400,7 +413,10 @@ export const rewriteLowStockCustomHandlers = (uidl) => {
|
|
|
400
413
|
// that applies wherever the AI emitted this pattern, even if the
|
|
401
414
|
// merchant later toggles e-commerce off.
|
|
402
415
|
if (looksLikePaymentMetadataBuilder(code)) {
|
|
403
|
-
|
|
416
|
+
const prefix = projectOrderDetailsPrefix === DEFAULT_ORDER_DETAILS_PREFIX
|
|
417
|
+
? (_a = readSuccessUrlPrefix(code)) !== null && _a !== void 0 ? _a : projectOrderDetailsPrefix
|
|
418
|
+
: projectOrderDetailsPrefix;
|
|
419
|
+
node.config.code = buildPaymentMetadataBuilder(prefix);
|
|
404
420
|
summary.paymentMetadataBuilderRewrites++;
|
|
405
421
|
continue;
|
|
406
422
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecommerce-customhandler-rewriter.js","sourceRoot":"","sources":["../../src/ecommerce-customhandler-rewriter.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,sDAAsD;AACtD,EAAE;AACF,2EAA2E;AAC3E,0EAA0E;AAC1E,6BAA6B;AAC7B,EAAE;AACF,qEAAqE;AACrE,0EAA0E;AAC1E,oEAAoE;AACpE,0EAA0E;AAC1E,yEAAyE;AACzE,2EAA2E;AAC3E,6EAA6E;AAC7E,EAAE;AACF,0EAA0E;AAC1E,yEAAyE;AACzE,qEAAqE;AACrE,4EAA4E;AAC5E,oEAAoE;AACpE,0EAA0E;AAC1E,4EAA4E;AAC5E,EAAE;AACF,yEAAyE;AACzE,sEAAsE;AACtE,0EAA0E;AAC1E,yEAAyE;AACzE,cAAc;AAGd,OAAO,EACL,sBAAsB,EACtB,8BAA8B,EAC9B,0BAA0B,EAC1B,iCAAiC,EACjC,qBAAqB,GACtB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EACL,oCAAoC,EACpC,4BAA4B,EAC5B,4BAA4B,EAC5B,gCAAgC,EAChC,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EACL,6BAA6B,EAC7B,yBAAyB,GAC1B,MAAM,oCAAoC,CAAA;AAC3C,OAAO,EACL,8BAA8B,EAC9B,8BAA8B,GAC/B,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"ecommerce-customhandler-rewriter.js","sourceRoot":"","sources":["../../src/ecommerce-customhandler-rewriter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor-generator.d.ts","sourceRoot":"","sources":["../../src/executor-generator.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,8BAA8B,QAAO,
|
|
1
|
+
{"version":3,"file":"executor-generator.d.ts","sourceRoot":"","sources":["../../src/executor-generator.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,8BAA8B,QAAO,MA2xCjD,CAAA;AAED,eAAO,MAAM,yBAAyB,QAAO,MAqgB5C,CAAA;AAED,eAAO,MAAM,yBAAyB,QAAO,MAK5C,CAAA"}
|
|
@@ -501,6 +501,35 @@ function resolveConfig(config, context) {
|
|
|
501
501
|
resolved[key] = resolveScalarValue(val, context);
|
|
502
502
|
}
|
|
503
503
|
}
|
|
504
|
+
// Component-bodied email nodes carry their merge values as \`templateParams\`
|
|
505
|
+
// and their body/subject as \`{{token}}\` templates. Filling them HERE — the one
|
|
506
|
+
// function every execution path funnels a node config through — is what makes
|
|
507
|
+
// the fill unmissable.
|
|
508
|
+
//
|
|
509
|
+
// It used to be pasted at the individual call sites instead, and it was only
|
|
510
|
+
// ever pasted at three of the sixteen: the client executor, and the loop-body
|
|
511
|
+
// + main loops of the cron/webhook route. The MAIN loop of
|
|
512
|
+
// \`generateServerSegmentAPIRoute\` — which is where every ordinary page
|
|
513
|
+
// workflow's email node actually executes — never had it, so withdrawal
|
|
514
|
+
// confirmations, withdrawal owner notifications, review notifications,
|
|
515
|
+
// order notifications and the password-reset email all shipped with their
|
|
516
|
+
// tokens verbatim: literal "{{customerName}}" in the body, "{{orderNumber}}"
|
|
517
|
+
// in the subject, and \`href="{{resetUrl}}"\` on the reset button (an invalid
|
|
518
|
+
// relative URL, which mail clients drop — so the button had no link at all).
|
|
519
|
+
// The abandoned-cart reminder was the only one that worked, because its send
|
|
520
|
+
// node sits inside a loop body AND on a cron route: the two paths that had
|
|
521
|
+
// the paste.
|
|
522
|
+
//
|
|
523
|
+
// Runs after resolution on purpose: \`templateParams[].value\` is itself a
|
|
524
|
+
// workflow-context ref that the loop above has just resolved.
|
|
525
|
+
if (Array.isArray(resolved.templateParams)) {
|
|
526
|
+
if (typeof resolved.body === 'string') {
|
|
527
|
+
resolved.body = applyTemplateParams(resolved.body, resolved.templateParams);
|
|
528
|
+
}
|
|
529
|
+
if (typeof resolved.subject === 'string') {
|
|
530
|
+
resolved.subject = applyTemplateParams(resolved.subject, resolved.templateParams);
|
|
531
|
+
}
|
|
532
|
+
}
|
|
504
533
|
return resolved;
|
|
505
534
|
}
|
|
506
535
|
|
|
@@ -809,17 +838,9 @@ async function executeNodes(nodes, edges, context, nodeHandlers, workflowConfig,
|
|
|
809
838
|
throw new Error(configError);
|
|
810
839
|
}
|
|
811
840
|
|
|
812
|
-
//
|
|
813
|
-
//
|
|
814
|
-
//
|
|
815
|
-
if (resolvedConfig && Array.isArray(resolvedConfig.templateParams)) {
|
|
816
|
-
if (typeof resolvedConfig.body === 'string') {
|
|
817
|
-
resolvedConfig.body = applyTemplateParams(resolvedConfig.body, resolvedConfig.templateParams);
|
|
818
|
-
}
|
|
819
|
-
if (typeof resolvedConfig.subject === 'string') {
|
|
820
|
-
resolvedConfig.subject = applyTemplateParams(resolvedConfig.subject, resolvedConfig.templateParams);
|
|
821
|
-
}
|
|
822
|
-
}
|
|
841
|
+
// NOTE: the component-bodied email fill used to live here. It now runs
|
|
842
|
+
// inside resolveConfig itself, so every execution path gets it exactly
|
|
843
|
+
// once — see the comment there.
|
|
823
844
|
|
|
824
845
|
if (node.type === 'general-if-statement') {
|
|
825
846
|
const condResult = evaluateCondition(resolvedConfig, context);
|
|
@@ -1217,7 +1238,44 @@ function collectBranchNodes(startId, allNodes, edges, excludeParentId) {
|
|
|
1217
1238
|
return ids;
|
|
1218
1239
|
}
|
|
1219
1240
|
|
|
1241
|
+
/**
|
|
1242
|
+
* Headers a server-side node must send when this deployment calls its OWN API
|
|
1243
|
+
* routes over HTTP (every data node does: \`fetch(__baseUrl + '/api/data/…')\`).
|
|
1244
|
+
*
|
|
1245
|
+
* ⛔ Without them, a deployment behind Vercel Deployment Protection answers its
|
|
1246
|
+
* own request with 401 "Protected deployment". The page renders — the visitor's
|
|
1247
|
+
* browser holds the bypass cookie — but every data node silently returns
|
|
1248
|
+
* \`{ rows: [] }\`, so the app looks alive while nothing reads or writes. On the
|
|
1249
|
+
* shipped AI-chat store this made the whole knowledge base invisible: the RAG
|
|
1250
|
+
* search returned zero rows for every question and the assistant answered "I
|
|
1251
|
+
* don't have enough information in my knowledge base" every single time.
|
|
1252
|
+
*
|
|
1253
|
+
* Two credentials, in order of what actually exists at the time:
|
|
1254
|
+
* - the visitor's own cookies, which already carried them past the protection
|
|
1255
|
+
* to reach this route. Forwarding them makes the self-call exactly as
|
|
1256
|
+
* authorized as the page load was, and nothing more.
|
|
1257
|
+
* - \`VERCEL_AUTOMATION_BYPASS_SECRET\`, the only thing that works when there is
|
|
1258
|
+
* no browser behind the request (a cron trigger, an inbound webhook).
|
|
1259
|
+
*
|
|
1260
|
+
* Same-origin only: these go to \`__baseUrl\`, which is derived from this
|
|
1261
|
+
* request's own host, so no credential is forwarded anywhere else.
|
|
1262
|
+
*/
|
|
1263
|
+
function internalRequestHeaders(req) {
|
|
1264
|
+
const headers = {};
|
|
1265
|
+
if (req && req.headers && req.headers.cookie) {
|
|
1266
|
+
headers.cookie = req.headers.cookie;
|
|
1267
|
+
}
|
|
1268
|
+
const bypassSecret = process.env.VERCEL_AUTOMATION_BYPASS_SECRET;
|
|
1269
|
+
if (bypassSecret) {
|
|
1270
|
+
headers['x-vercel-protection-bypass'] = bypassSecret;
|
|
1271
|
+
// Tells Vercel not to hand the bypass back to the caller as a cookie.
|
|
1272
|
+
headers['x-vercel-set-bypass-cookie'] = 'false';
|
|
1273
|
+
}
|
|
1274
|
+
return headers;
|
|
1275
|
+
}
|
|
1276
|
+
|
|
1220
1277
|
module.exports = {
|
|
1278
|
+
internalRequestHeaders,
|
|
1221
1279
|
resolveValue,
|
|
1222
1280
|
resolveSecret,
|
|
1223
1281
|
resolveConfig,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor-generator.js","sourceRoot":"","sources":["../../src/executor-generator.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAW,EAAE;IACzD,OAAO
|
|
1
|
+
{"version":3,"file":"executor-generator.js","sourceRoot":"","sources":["../../src/executor-generator.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAW,EAAE;IACzD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyxCR,CAAA;AACD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAW,EAAE;IACpD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmgBR,CAAA;AACD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAW,EAAE;IACpD,OAAO;;;CAGR,CAAA;AACD,CAAC,CAAA"}
|
|
@@ -17,7 +17,7 @@ async function ai_custom_prompt(config, context, streamCallback) {
|
|
|
17
17
|
catch (err) {
|
|
18
18
|
return { error: true, message: err.message, code: 'authentication_error' };
|
|
19
19
|
}
|
|
20
|
-
const provider =
|
|
20
|
+
const provider = __ai_resolveProvider(config);
|
|
21
21
|
temperature = __ai_clampTemperature(temperature, provider);
|
|
22
22
|
let systemMessage = config.systemMessage ? __ai_resolveTextField(config.systemMessage) : undefined;
|
|
23
23
|
if (systemMessage === '') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-custom-prompt.js","sourceRoot":"","sources":["../../../../src/nodes/ai/ai-custom-prompt.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,EACvB,gCAAgC,EAChC,wBAAwB,GACzB,MAAM,qBAAqB,CAAA;AAa5B,KAAK,UAAU,gBAAgB,CAC7B,MAAW,EACX,OAAgC,EAChC,cAAoB;IAEpB,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACnD,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,oBAAoB,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAA;KAC9E;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAA;IACtC,IAAI,WAAW,GAAG,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAA;IAC7E,IAAI,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,GAAG,CAAA;IACvC,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,GAAG,CAAC,EAAE;QAClD,SAAS,GAAG,CAAC,CAAA;KACd;IAED,IAAI,KAAK,CAAA;IACT,IAAI;QACF,KAAK,GAAG,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;KACxC;IAAC,OAAO,GAAQ,EAAE;QACjB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAA;KAC3E;IAED,MAAM,QAAQ,GAAG,
|
|
1
|
+
{"version":3,"file":"ai-custom-prompt.js","sourceRoot":"","sources":["../../../../src/nodes/ai/ai-custom-prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,7 +16,7 @@ async function ai_detect_language(config, context, streamCallback) {
|
|
|
16
16
|
catch (err) {
|
|
17
17
|
return { error: true, message: err.message, code: 'authentication_error' };
|
|
18
18
|
}
|
|
19
|
-
const provider =
|
|
19
|
+
const provider = __ai_resolveProvider(config);
|
|
20
20
|
const temperature = __ai_clampTemperature(0, provider);
|
|
21
21
|
let systemPrompt;
|
|
22
22
|
if (outputFormat === 'name') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-detect-language.js","sourceRoot":"","sources":["../../../../src/nodes/ai/ai-detect-language.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,EACvB,gCAAgC,EAChC,wBAAwB,GACzB,MAAM,qBAAqB,CAAA;AAc5B,KAAK,UAAU,kBAAkB,CAC/B,MAAW,EACX,OAAgC,EAChC,cAAoB;IAEpB,MAAM,IAAI,GAAG,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAA;IACtC,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,MAAM,CAAA;IAElD,IAAI,CAAC,IAAI,EAAE;QACT,IAAI,YAAY,KAAK,UAAU,EAAE;YAC/B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,EAAE,CAAA;SAC3D;QACD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAA;KAC/B;IAED,IAAI,KAAK,CAAA;IACT,IAAI;QACF,KAAK,GAAG,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;KACxC;IAAC,OAAO,GAAQ,EAAE;QACjB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAA;KAC3E;IAED,MAAM,QAAQ,GAAG,
|
|
1
|
+
{"version":3,"file":"ai-detect-language.js","sourceRoot":"","sources":["../../../../src/nodes/ai/ai-detect-language.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-generate-text-embedding.d.ts","sourceRoot":"","sources":["../../../../src/nodes/ai/ai-generate-text-embedding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"ai-generate-text-embedding.d.ts","sourceRoot":"","sources":["../../../../src/nodes/ai/ai-generate-text-embedding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAyG/C,eAAO,MAAM,uBAAuB,EAAE,oBAOrC,CAAA"}
|
|
@@ -1,15 +1,51 @@
|
|
|
1
1
|
import { generateAIProviderUtils, AI_PROVIDER_DEPENDENCIES } from './ai-provider-utils';
|
|
2
|
+
/**
|
|
3
|
+
* Text embeddings, always through OpenAI's embeddings API.
|
|
4
|
+
*
|
|
5
|
+
* ## `config.optional`
|
|
6
|
+
*
|
|
7
|
+
* A node result carrying `error: true` is FATAL — `isFatalNodeResult` in the
|
|
8
|
+
* executor throws on it and the whole workflow stops. That is right for a
|
|
9
|
+
* pipeline whose output is the embedding, and wrong for one where the
|
|
10
|
+
* embedding only powers a nice-to-have branch.
|
|
11
|
+
*
|
|
12
|
+
* The AI Assistant Chat is the second case: its retrieval is a hybrid of a
|
|
13
|
+
* vector search and a keyword search running in parallel, and the keyword half
|
|
14
|
+
* answers perfectly well on its own. A chat whose provider is Anthropic or
|
|
15
|
+
* Google may legitimately have no OpenAI key at all (embeddings are OpenAI-only
|
|
16
|
+
* because that is what the knowledge base was indexed with), and that must
|
|
17
|
+
* degrade to keyword-only search rather than break every message.
|
|
18
|
+
*
|
|
19
|
+
* With `optional: true` the node reports failure as data — `skipped: true` plus
|
|
20
|
+
* an empty `embedding` — so downstream nodes can branch on it. Consumers must
|
|
21
|
+
* check `embedding.length` before using it, which the chat's semantic-query
|
|
22
|
+
* builder already does.
|
|
23
|
+
*/
|
|
2
24
|
async function ai_generate_text_embedding(config, context) {
|
|
25
|
+
const optional = config.optional === true;
|
|
26
|
+
function fail(message, code) {
|
|
27
|
+
if (optional) {
|
|
28
|
+
return {
|
|
29
|
+
embedding: [],
|
|
30
|
+
vectorLiteral: '',
|
|
31
|
+
dimensions: 0,
|
|
32
|
+
skipped: true,
|
|
33
|
+
skipReason: message,
|
|
34
|
+
code,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
return { error: true, message, code };
|
|
38
|
+
}
|
|
3
39
|
const text = __ai_resolveTextField(config.text);
|
|
4
40
|
if (!text) {
|
|
5
|
-
return
|
|
41
|
+
return fail('Text to embed is required', 'missing_text');
|
|
6
42
|
}
|
|
7
43
|
let token;
|
|
8
44
|
try {
|
|
9
45
|
token = __ai_resolveToken(config.token);
|
|
10
46
|
}
|
|
11
47
|
catch (err) {
|
|
12
|
-
return
|
|
48
|
+
return fail(err.message, 'authentication_error');
|
|
13
49
|
}
|
|
14
50
|
const model = config.model || 'text-embedding-3-small';
|
|
15
51
|
const encodingFormat = config.encodingFormat || 'float';
|
|
@@ -29,11 +65,18 @@ async function ai_generate_text_embedding(config, context) {
|
|
|
29
65
|
const response = await client.embeddings.create(requestOpts);
|
|
30
66
|
const embeddingData = response.data && response.data[0];
|
|
31
67
|
if (!embeddingData || !embeddingData.embedding) {
|
|
32
|
-
return
|
|
68
|
+
return fail('No embedding returned from API', 'empty_response');
|
|
33
69
|
}
|
|
34
70
|
const usage = response.usage || {};
|
|
35
71
|
return {
|
|
36
72
|
embedding: embeddingData.embedding,
|
|
73
|
+
// pgvector's literal form, ready to bind as a `$N` param and cast with
|
|
74
|
+
// `::vector`. The raw `embedding` array cannot do that job: a JS array
|
|
75
|
+
// bound as a query parameter is serialized as a Postgres ARRAY literal
|
|
76
|
+
// (`{0.1,0.2}`), which no cast turns into a vector. Without this field a
|
|
77
|
+
// vector search has to assemble its SQL in a general-custom-js node —
|
|
78
|
+
// whose output is relayed to the browser, leaking the schema.
|
|
79
|
+
vectorLiteral: '[' + embeddingData.embedding.join(',') + ']',
|
|
37
80
|
model: response.model || model,
|
|
38
81
|
dimensions: embeddingData.embedding.length,
|
|
39
82
|
usage: {
|
|
@@ -43,7 +86,7 @@ async function ai_generate_text_embedding(config, context) {
|
|
|
43
86
|
};
|
|
44
87
|
}
|
|
45
88
|
catch (err) {
|
|
46
|
-
return
|
|
89
|
+
return fail(err.message || String(err), 'provider_error');
|
|
47
90
|
}
|
|
48
91
|
}
|
|
49
92
|
export const aiGenerateTextEmbedding = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-generate-text-embedding.js","sourceRoot":"","sources":["../../../../src/nodes/ai/ai-generate-text-embedding.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAKvF,KAAK,UAAU,0BAA0B,CAAC,MAAW,EAAE,OAAgC;IACrF,MAAM,
|
|
1
|
+
{"version":3,"file":"ai-generate-text-embedding.js","sourceRoot":"","sources":["../../../../src/nodes/ai/ai-generate-text-embedding.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export declare const AI_PROVIDER_DEPENDENCIES: Record<string, string>;
|
|
2
2
|
export declare function generateAIProviderUtils(): string;
|
|
3
3
|
export declare function generateAIStreamingProviderUtils(): string;
|
|
4
|
+
/** Floor applied to OpenAI reasoning models — see `__ai_modelCapabilities`. */
|
|
5
|
+
export declare const AI_REASONING_MODEL_MIN_TOKENS = 2000;
|
|
4
6
|
//# sourceMappingURL=ai-provider-utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-provider-utils.d.ts","sourceRoot":"","sources":["../../../../src/nodes/ai/ai-provider-utils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAM3D,CAAA;AAwBD,wBAAgB,uBAAuB,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"ai-provider-utils.d.ts","sourceRoot":"","sources":["../../../../src/nodes/ai/ai-provider-utils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAM3D,CAAA;AAwBD,wBAAgB,uBAAuB,IAAI,MAAM,CAahD;AAED,wBAAgB,gCAAgC,IAAI,MAAM,CAEzD;AAmVD,+EAA+E;AAC/E,eAAO,MAAM,6BAA6B,OAAO,CAAA"}
|