@tanqory/plugin-sdk 0.3.3 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/manifest.d.ts +47 -0
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +119 -0
- package/dist/manifest.js.map +1 -1
- package/dist/manifest.spec.js +111 -0
- package/dist/manifest.spec.js.map +1 -1
- package/package.json +1 -1
package/dist/manifest.d.ts
CHANGED
|
@@ -34,6 +34,53 @@ export interface TanqoryAppManifest {
|
|
|
34
34
|
}>;
|
|
35
35
|
supportUrl?: string;
|
|
36
36
|
privacyPolicyUrl?: string;
|
|
37
|
+
/** How merchants reach the app. `embed` = framed in the dashboard (default). */
|
|
38
|
+
appType?: 'embed' | 'external';
|
|
39
|
+
/**
|
|
40
|
+
* Where the app appears in the dashboard navigation. `placement` names a
|
|
41
|
+
* platform nav slot (e.g. `marketing`, `apps`); the authoritative slot list
|
|
42
|
+
* is enforced at review — this SDK checks shape, not membership, so a new
|
|
43
|
+
* slot does not require an SDK release. `items` are sub-links rendered
|
|
44
|
+
* under that slot, each resolving inside your app's embedded surface.
|
|
45
|
+
*/
|
|
46
|
+
navigation?: {
|
|
47
|
+
placement: string;
|
|
48
|
+
items?: Array<{
|
|
49
|
+
label: string;
|
|
50
|
+
path: string;
|
|
51
|
+
}>;
|
|
52
|
+
};
|
|
53
|
+
iframe?: {
|
|
54
|
+
minHeight?: number;
|
|
55
|
+
width?: 'full' | 'centered';
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Platform capabilities the app REQUESTS. A request is not a grant: review
|
|
59
|
+
* must approve each one onto the app before it has any effect — declaring it
|
|
60
|
+
* here is how you ask.
|
|
61
|
+
*
|
|
62
|
+
* Two forms:
|
|
63
|
+
* - a bare slug from Tanqory's closed vocabulary, e.g. `marketing-suite`
|
|
64
|
+
* - a namespaced notification capability, `<family>:<name>`:
|
|
65
|
+
* - `notification-override:<typeName>` — send this notification type
|
|
66
|
+
* *instead of* the platform (e.g. `notification-override:order_new`)
|
|
67
|
+
* - `notification-channel:<channelName>` — add a delivery channel
|
|
68
|
+
* alongside the platform's own (e.g. `notification-channel:line`)
|
|
69
|
+
*
|
|
70
|
+
* The family prefixes are checked here; the type and channel names are not.
|
|
71
|
+
* That vocabulary is the platform's registry, it grows without an SDK
|
|
72
|
+
* release, and a copy of it in this package would be stale the week after
|
|
73
|
+
* it shipped — same reason `navigation.placement` is shape-checked only.
|
|
74
|
+
*/
|
|
75
|
+
provides?: string[];
|
|
76
|
+
/**
|
|
77
|
+
* Where the platform POSTs a rendered message for the notification types and
|
|
78
|
+
* channels you took over. Required as soon as `provides` names one — a
|
|
79
|
+
* takeover with nowhere to deliver silently drops every message it claimed.
|
|
80
|
+
*/
|
|
81
|
+
notifications?: {
|
|
82
|
+
dispatchUrl: string;
|
|
83
|
+
};
|
|
37
84
|
}
|
|
38
85
|
export declare class ManifestError extends Error {
|
|
39
86
|
readonly problems: string[];
|
package/dist/manifest.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,kBAAkB;IACjC,iFAAiF;IACjF,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAA;IACd;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9C,qFAAqF;IACrF,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACjD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,kBAAkB;IACjC,iFAAiF;IACjF,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAA;IACd;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9C,qFAAqF;IACrF,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACjD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAQzB,gFAAgF;IAChF,OAAO,CAAC,EAAE,OAAO,GAAG,UAAU,CAAA;IAC9B;;;;;;OAMG;IACH,UAAU,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAA;IAClF,MAAM,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,CAAA;KAAE,CAAA;IAC5D;;;;;;;;;;;;;;;;;OAiBG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB;;;;OAIG;IACH,aAAa,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CAAA;CACxC;AAED,qBAAa,aAAc,SAAQ,KAAK;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE;gBAAlB,QAAQ,EAAE,MAAM,EAAE;CAIxC;AA8CD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,CA2LnE;AAED,0EAA0E;AAC1E,eAAO,MAAM,iBAAiB;;CAA8B,CAAA"}
|
package/dist/manifest.js
CHANGED
|
@@ -24,6 +24,13 @@ class ManifestError extends Error {
|
|
|
24
24
|
}
|
|
25
25
|
exports.ManifestError = ManifestError;
|
|
26
26
|
const HANDLE = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
27
|
+
const SLUG = /^[a-z0-9]+(?:[-_][a-z0-9]+)*$/;
|
|
28
|
+
/**
|
|
29
|
+
* Capability families whose member names are the platform's to define. The
|
|
30
|
+
* prefix is validated here; everything after the colon is checked against the
|
|
31
|
+
* live registry server-side.
|
|
32
|
+
*/
|
|
33
|
+
const NAMESPACED_CAPABILITY_FAMILIES = ['notification-override', 'notification-channel'];
|
|
27
34
|
function isHttpsUrl(value, { allowLocalhost = false } = {}) {
|
|
28
35
|
if (typeof value !== 'string')
|
|
29
36
|
return false;
|
|
@@ -40,6 +47,22 @@ function isHttpsUrl(value, { allowLocalhost = false } = {}) {
|
|
|
40
47
|
// never sent to it, and requiring TLS on a laptop is friction with no payoff.
|
|
41
48
|
return (allowLocalhost && url.protocol === 'http:' && /^(localhost|127\.0\.0\.1)$/.test(url.hostname));
|
|
42
49
|
}
|
|
50
|
+
/** Hosts that resolve to the machine making the call — never the app's server. */
|
|
51
|
+
function isLoopbackHost(value) {
|
|
52
|
+
let host;
|
|
53
|
+
try {
|
|
54
|
+
host = new URL(value).hostname.toLowerCase();
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
return (host === 'localhost' ||
|
|
60
|
+
host.endsWith('.localhost') ||
|
|
61
|
+
host === '127.0.0.1' ||
|
|
62
|
+
host === '::1' ||
|
|
63
|
+
host === '[::1]' ||
|
|
64
|
+
host === '0.0.0.0');
|
|
65
|
+
}
|
|
43
66
|
/**
|
|
44
67
|
* Parse and validate a manifest.
|
|
45
68
|
*
|
|
@@ -108,6 +131,102 @@ function parseAppManifest(input) {
|
|
|
108
131
|
problems.push(`\`${field}\` must be an https URL`);
|
|
109
132
|
}
|
|
110
133
|
}
|
|
134
|
+
// A field that never existed but shipped in an early first-party manifest —
|
|
135
|
+
// reject it BY NAME so the fix is obvious, instead of silently ignoring a
|
|
136
|
+
// key the author believes is doing something.
|
|
137
|
+
if ('embeddedPath' in manifest) {
|
|
138
|
+
problems.push('`embeddedPath` is not a manifest field — use `embedded: { enabled: true, path: "..." }`');
|
|
139
|
+
}
|
|
140
|
+
if (manifest.appType !== undefined &&
|
|
141
|
+
manifest.appType !== 'embed' &&
|
|
142
|
+
manifest.appType !== 'external') {
|
|
143
|
+
problems.push('`appType` must be "embed" or "external"');
|
|
144
|
+
}
|
|
145
|
+
if (manifest.navigation !== undefined) {
|
|
146
|
+
const navigation = manifest.navigation;
|
|
147
|
+
if (typeof navigation?.placement !== 'string' || !SLUG.test(navigation.placement)) {
|
|
148
|
+
problems.push('`navigation.placement` must be a lowercase slug naming a platform nav slot (e.g. "marketing")');
|
|
149
|
+
}
|
|
150
|
+
if (navigation?.items !== undefined) {
|
|
151
|
+
if (!Array.isArray(navigation.items)) {
|
|
152
|
+
problems.push('`navigation.items` must be an array');
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
navigation.items.forEach((item, index) => {
|
|
156
|
+
const entry = item;
|
|
157
|
+
if (typeof entry?.label !== 'string' || entry.label.trim().length === 0) {
|
|
158
|
+
problems.push(`\`navigation.items[${index}].label\` is required`);
|
|
159
|
+
}
|
|
160
|
+
if (typeof entry?.path !== 'string' ||
|
|
161
|
+
!entry.path.startsWith('/') ||
|
|
162
|
+
entry.path.includes('..')) {
|
|
163
|
+
problems.push(`\`navigation.items[${index}].path\` must be an in-app path starting with "/" (no "..")`);
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
if (manifest.iframe !== undefined) {
|
|
170
|
+
const iframe = manifest.iframe;
|
|
171
|
+
if (iframe?.minHeight !== undefined &&
|
|
172
|
+
(typeof iframe.minHeight !== 'number' ||
|
|
173
|
+
!Number.isFinite(iframe.minHeight) ||
|
|
174
|
+
iframe.minHeight <= 0)) {
|
|
175
|
+
problems.push('`iframe.minHeight` must be a positive number of pixels');
|
|
176
|
+
}
|
|
177
|
+
if (iframe?.width !== undefined && iframe.width !== 'full' && iframe.width !== 'centered') {
|
|
178
|
+
problems.push('`iframe.width` must be "full" or "centered"');
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
let requestsNotificationCapability = false;
|
|
182
|
+
if (manifest.provides !== undefined) {
|
|
183
|
+
if (!Array.isArray(manifest.provides) || manifest.provides.some((c) => typeof c !== 'string')) {
|
|
184
|
+
problems.push('`provides` must be an array of capability names');
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
const seen = new Set();
|
|
188
|
+
for (const capability of manifest.provides) {
|
|
189
|
+
const colon = capability.indexOf(':');
|
|
190
|
+
if (colon === -1) {
|
|
191
|
+
if (!SLUG.test(capability)) {
|
|
192
|
+
problems.push(`\`provides\` entry "${capability}" must be a lowercase slug — capabilities come from Tanqory's closed vocabulary and review grants each one`);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
// Namespaced: the family is ours to check, the name is the
|
|
197
|
+
// platform's. Both halves must still be present and well-formed —
|
|
198
|
+
// "notification-override:" reviews cleanly and overrides nothing.
|
|
199
|
+
const family = capability.slice(0, colon);
|
|
200
|
+
const name = capability.slice(colon + 1);
|
|
201
|
+
if (!NAMESPACED_CAPABILITY_FAMILIES.includes(family)) {
|
|
202
|
+
problems.push(`\`provides\` entry "${capability}" uses an unknown capability family "${family}" — namespaced capabilities are ${NAMESPACED_CAPABILITY_FAMILIES.map((f) => `${f}:<name>`).join(' or ')}`);
|
|
203
|
+
}
|
|
204
|
+
else if (!SLUG.test(name)) {
|
|
205
|
+
problems.push(`\`provides\` entry "${capability}" must name a ${family === 'notification-channel' ? 'channel' : 'notification type'} after the colon, as a lowercase slug (e.g. "${family}:${family === 'notification-channel' ? 'line' : 'order_new'}")`);
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
requestsNotificationCapability = true;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
if (seen.has(capability))
|
|
212
|
+
problems.push(`\`provides\` lists "${capability}" more than once`);
|
|
213
|
+
seen.add(capability);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if (manifest.notifications !== undefined) {
|
|
218
|
+
const notifications = manifest.notifications;
|
|
219
|
+
// Localhost is refused even though `devUrl` allows it: this URL is called
|
|
220
|
+
// by the platform, not opened by a browser, so a laptop address here is
|
|
221
|
+
// one nothing can ever reach.
|
|
222
|
+
if (!isHttpsUrl(notifications?.dispatchUrl) ||
|
|
223
|
+
isLoopbackHost(notifications.dispatchUrl)) {
|
|
224
|
+
problems.push('`notifications.dispatchUrl` must be an https URL the platform can reach (not localhost — Tanqory calls it, your browser does not)');
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
else if (requestsNotificationCapability) {
|
|
228
|
+
problems.push('`notifications.dispatchUrl` is required when `provides` names a notification-override or notification-channel capability — otherwise the messages you took over have nowhere to go');
|
|
229
|
+
}
|
|
111
230
|
if (problems.length > 0)
|
|
112
231
|
throw new ManifestError(problems);
|
|
113
232
|
return manifest;
|
package/dist/manifest.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
|
package/dist/manifest.spec.js
CHANGED
|
@@ -78,5 +78,116 @@ function problemsOf(input) {
|
|
|
78
78
|
(0, vitest_1.expect)(problemsOf(null)).not.toEqual([]);
|
|
79
79
|
(0, vitest_1.expect)(problemsOf('a string')).not.toEqual([]);
|
|
80
80
|
});
|
|
81
|
+
(0, vitest_1.describe)('manifest v2 — surface declaration', () => {
|
|
82
|
+
(0, vitest_1.it)('accepts a full v2 manifest', () => {
|
|
83
|
+
(0, vitest_1.expect)(problemsOf({
|
|
84
|
+
...VALID,
|
|
85
|
+
appType: 'embed',
|
|
86
|
+
navigation: {
|
|
87
|
+
placement: 'marketing',
|
|
88
|
+
items: [
|
|
89
|
+
{ label: 'Campaigns', path: '/campaigns' },
|
|
90
|
+
{ label: 'Automations', path: '/automations' },
|
|
91
|
+
],
|
|
92
|
+
},
|
|
93
|
+
iframe: { minHeight: 480, width: 'full' },
|
|
94
|
+
provides: ['marketing-suite'],
|
|
95
|
+
})).toEqual([]);
|
|
96
|
+
});
|
|
97
|
+
(0, vitest_1.it)('a v1 manifest with none of the new fields stays valid unchanged', () => {
|
|
98
|
+
(0, vitest_1.expect)(problemsOf(VALID)).toEqual([]);
|
|
99
|
+
});
|
|
100
|
+
(0, vitest_1.it)('rejects the legacy top-level embeddedPath by name', () => {
|
|
101
|
+
const problems = problemsOf({ ...VALID, embeddedPath: '/embed' });
|
|
102
|
+
(0, vitest_1.expect)(problems.join(' ')).toContain('embeddedPath');
|
|
103
|
+
(0, vitest_1.expect)(problems.join(' ')).toContain('embedded: { enabled: true');
|
|
104
|
+
});
|
|
105
|
+
(0, vitest_1.it)('rejects an unknown appType', () => {
|
|
106
|
+
(0, vitest_1.expect)(problemsOf({ ...VALID, appType: 'popup' })).not.toEqual([]);
|
|
107
|
+
});
|
|
108
|
+
(0, vitest_1.it)('navigation.placement must be a slug; membership is enforced at review, not here', () => {
|
|
109
|
+
(0, vitest_1.expect)(problemsOf({ ...VALID, navigation: { placement: 'Not A Slug' } })).not.toEqual([]);
|
|
110
|
+
// Shape-valid but not a known slot today — the SDK passes it so a new
|
|
111
|
+
// platform slot never requires an SDK release; review owns the list.
|
|
112
|
+
(0, vitest_1.expect)(problemsOf({ ...VALID, navigation: { placement: 'future_slot' } })).toEqual([]);
|
|
113
|
+
});
|
|
114
|
+
(0, vitest_1.it)('navigation items need a label and a rooted, traversal-free path', () => {
|
|
115
|
+
const problems = problemsOf({
|
|
116
|
+
...VALID,
|
|
117
|
+
navigation: { placement: 'marketing', items: [{ label: '', path: '/a/../b' }] },
|
|
118
|
+
});
|
|
119
|
+
(0, vitest_1.expect)(problems.length).toBe(2);
|
|
120
|
+
});
|
|
121
|
+
(0, vitest_1.it)('iframe constraints: positive minHeight, width from the pair', () => {
|
|
122
|
+
(0, vitest_1.expect)(problemsOf({ ...VALID, iframe: { minHeight: -1 } })).not.toEqual([]);
|
|
123
|
+
(0, vitest_1.expect)(problemsOf({ ...VALID, iframe: { width: 'wide' } })).not.toEqual([]);
|
|
124
|
+
(0, vitest_1.expect)(problemsOf({ ...VALID, iframe: { minHeight: 320, width: 'centered' } })).toEqual([]);
|
|
125
|
+
});
|
|
126
|
+
(0, vitest_1.it)('provides entries are slugs, no duplicates', () => {
|
|
127
|
+
(0, vitest_1.expect)(problemsOf({ ...VALID, provides: ['Marketing Suite'] })).not.toEqual([]);
|
|
128
|
+
(0, vitest_1.expect)(problemsOf({ ...VALID, provides: ['marketing-suite', 'marketing-suite'] })).not.toEqual([]);
|
|
129
|
+
(0, vitest_1.expect)(problemsOf({ ...VALID, provides: ['marketing-suite'] })).toEqual([]);
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
(0, vitest_1.describe)('notification capabilities', () => {
|
|
133
|
+
const NOTIFY = { dispatchUrl: 'https://hooks.example.com/tanqory/notifications' };
|
|
134
|
+
(0, vitest_1.it)('accepts an override and a channel alongside a plain capability', () => {
|
|
135
|
+
(0, vitest_1.expect)(problemsOf({
|
|
136
|
+
...VALID,
|
|
137
|
+
provides: [
|
|
138
|
+
'marketing-suite',
|
|
139
|
+
'notification-override:order_new',
|
|
140
|
+
'notification-channel:line',
|
|
141
|
+
],
|
|
142
|
+
notifications: NOTIFY,
|
|
143
|
+
})).toEqual([]);
|
|
144
|
+
});
|
|
145
|
+
(0, vitest_1.it)('passes an unknown type or channel name — that vocabulary is the platform’s', () => {
|
|
146
|
+
// Shape-valid but not in today's registry. The SDK lets it through for
|
|
147
|
+
// the same reason it lets an unknown nav placement through: the list
|
|
148
|
+
// lives server-side and must grow without an SDK release.
|
|
149
|
+
(0, vitest_1.expect)(problemsOf({
|
|
150
|
+
...VALID,
|
|
151
|
+
provides: ['notification-override:some_future_type'],
|
|
152
|
+
notifications: NOTIFY,
|
|
153
|
+
})).toEqual([]);
|
|
154
|
+
});
|
|
155
|
+
(0, vitest_1.it)('rejects an unknown capability family', () => {
|
|
156
|
+
const problems = problemsOf({
|
|
157
|
+
...VALID,
|
|
158
|
+
provides: ['notification-takeover:order_new'],
|
|
159
|
+
notifications: NOTIFY,
|
|
160
|
+
});
|
|
161
|
+
(0, vitest_1.expect)(problems.join(' ')).toContain('notification-takeover');
|
|
162
|
+
(0, vitest_1.expect)(problems.join(' ')).toContain('notification-override:<name>');
|
|
163
|
+
});
|
|
164
|
+
vitest_1.it.each([
|
|
165
|
+
['an empty name', 'notification-override:'],
|
|
166
|
+
['an uppercase name', 'notification-channel:LINE'],
|
|
167
|
+
['a spaced name', 'notification-override:order new'],
|
|
168
|
+
['a second colon', 'notification-override:order:new'],
|
|
169
|
+
])('rejects %s', (_label, capability) => {
|
|
170
|
+
(0, vitest_1.expect)(problemsOf({ ...VALID, provides: [capability], notifications: NOTIFY })).not.toEqual([]);
|
|
171
|
+
});
|
|
172
|
+
(0, vitest_1.it)('requires a dispatchUrl once a notification capability is declared', () => {
|
|
173
|
+
// A takeover with nowhere to deliver drops every message it claimed —
|
|
174
|
+
// the one failure mode a merchant would never see in the UI.
|
|
175
|
+
const problems = problemsOf({ ...VALID, provides: ['notification-override:order_new'] });
|
|
176
|
+
(0, vitest_1.expect)(problems.join(' ')).toContain('notifications.dispatchUrl');
|
|
177
|
+
});
|
|
178
|
+
(0, vitest_1.it)('does not require a dispatchUrl for a plain capability', () => {
|
|
179
|
+
(0, vitest_1.expect)(problemsOf({ ...VALID, provides: ['marketing-suite'] })).toEqual([]);
|
|
180
|
+
});
|
|
181
|
+
vitest_1.it.each([
|
|
182
|
+
['http', 'http://hooks.example.com/n'],
|
|
183
|
+
['localhost', 'https://localhost:3000/n'],
|
|
184
|
+
['a loopback ip', 'https://127.0.0.1/n'],
|
|
185
|
+
['not a URL at all', '/notifications'],
|
|
186
|
+
])('rejects a dispatchUrl on %s', (_label, dispatchUrl) => {
|
|
187
|
+
// Unlike `devUrl`, this URL is called BY Tanqory. A laptop address here
|
|
188
|
+
// is one nothing can ever reach, so it is refused rather than tolerated.
|
|
189
|
+
(0, vitest_1.expect)(problemsOf({ ...VALID, notifications: { dispatchUrl } })).not.toEqual([]);
|
|
190
|
+
});
|
|
191
|
+
});
|
|
81
192
|
});
|
|
82
193
|
//# sourceMappingURL=manifest.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.spec.js","sourceRoot":"","sources":["../src/manifest.spec.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"manifest.spec.js","sourceRoot":"","sources":["../src/manifest.spec.ts"],"names":[],"mappings":"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"}
|